commit
7035d31e9d
|
@ -0,0 +1,24 @@
|
||||||
|
return
|
||||||
|
{
|
||||||
|
HOOK_WORLD_STARTED =
|
||||||
|
{
|
||||||
|
CalledWhen = "A {{cWorld|world}} is initialized",
|
||||||
|
DefaultFnName = "OnWorldStarted", -- also used as pagename
|
||||||
|
Desc = [[
|
||||||
|
This hook is called whenever a {{cWorld|world}} is initialized.
|
||||||
|
]],
|
||||||
|
Params =
|
||||||
|
{
|
||||||
|
{ Name = "World", Type = "{{cWorld}}", Notes = "World that is started" },
|
||||||
|
},
|
||||||
|
Returns = [[
|
||||||
|
If the function returns false or no value, the next plugin's callback is called. If the function
|
||||||
|
returns true, no other callback is called for this event. There is no overridable behavior.
|
||||||
|
]],
|
||||||
|
}, -- HOOK_WORLD_STARTED
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
** Lua binding: AllToLua
|
** Lua binding: AllToLua
|
||||||
** Generated automatically by tolua++-1.0.92 on 12/08/13 18:11:12.
|
** Generated automatically by tolua++-1.0.92 on 12/11/13 12:34:21.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
|
@ -19926,6 +19926,41 @@ static int tolua_AllToLua_cRoot_GetWorld00(lua_State* tolua_S)
|
||||||
}
|
}
|
||||||
#endif //#ifndef TOLUA_DISABLE
|
#endif //#ifndef TOLUA_DISABLE
|
||||||
|
|
||||||
|
/* method: CreateAndInitializeWorld of class cRoot */
|
||||||
|
#ifndef TOLUA_DISABLE_tolua_AllToLua_cRoot_CreateAndInitializeWorld00
|
||||||
|
static int tolua_AllToLua_cRoot_CreateAndInitializeWorld00(lua_State* tolua_S)
|
||||||
|
{
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
tolua_Error tolua_err;
|
||||||
|
if (
|
||||||
|
!tolua_isusertype(tolua_S,1,"cRoot",0,&tolua_err) ||
|
||||||
|
!tolua_iscppstring(tolua_S,2,0,&tolua_err) ||
|
||||||
|
!tolua_isnoobj(tolua_S,3,&tolua_err)
|
||||||
|
)
|
||||||
|
goto tolua_lerror;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
cRoot* self = (cRoot*) tolua_tousertype(tolua_S,1,0);
|
||||||
|
const AString a_WorldName = ((const AString) tolua_tocppstring(tolua_S,2,0));
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'CreateAndInitializeWorld'", NULL);
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
cWorld* tolua_ret = (cWorld*) self->CreateAndInitializeWorld(a_WorldName);
|
||||||
|
tolua_pushusertype(tolua_S,(void*)tolua_ret,"cWorld");
|
||||||
|
tolua_pushcppstring(tolua_S,(const char*)a_WorldName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 2;
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
tolua_lerror:
|
||||||
|
tolua_error(tolua_S,"#ferror in function 'CreateAndInitializeWorld'.",&tolua_err);
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif //#ifndef TOLUA_DISABLE
|
||||||
|
|
||||||
/* method: GetPrimaryServerVersion of class cRoot */
|
/* method: GetPrimaryServerVersion of class cRoot */
|
||||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cRoot_GetPrimaryServerVersion00
|
#ifndef TOLUA_DISABLE_tolua_AllToLua_cRoot_GetPrimaryServerVersion00
|
||||||
static int tolua_AllToLua_cRoot_GetPrimaryServerVersion00(lua_State* tolua_S)
|
static int tolua_AllToLua_cRoot_GetPrimaryServerVersion00(lua_State* tolua_S)
|
||||||
|
@ -29797,6 +29832,7 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||||
tolua_constant(tolua_S,"HOOK_UPDATING_SIGN",cPluginManager::HOOK_UPDATING_SIGN);
|
tolua_constant(tolua_S,"HOOK_UPDATING_SIGN",cPluginManager::HOOK_UPDATING_SIGN);
|
||||||
tolua_constant(tolua_S,"HOOK_WEATHER_CHANGED",cPluginManager::HOOK_WEATHER_CHANGED);
|
tolua_constant(tolua_S,"HOOK_WEATHER_CHANGED",cPluginManager::HOOK_WEATHER_CHANGED);
|
||||||
tolua_constant(tolua_S,"HOOK_WEATHER_CHANGING",cPluginManager::HOOK_WEATHER_CHANGING);
|
tolua_constant(tolua_S,"HOOK_WEATHER_CHANGING",cPluginManager::HOOK_WEATHER_CHANGING);
|
||||||
|
tolua_constant(tolua_S,"HOOK_WORLD_STARTED",cPluginManager::HOOK_WORLD_STARTED);
|
||||||
tolua_constant(tolua_S,"HOOK_WORLD_TICK",cPluginManager::HOOK_WORLD_TICK);
|
tolua_constant(tolua_S,"HOOK_WORLD_TICK",cPluginManager::HOOK_WORLD_TICK);
|
||||||
tolua_constant(tolua_S,"HOOK_NUM_HOOKS",cPluginManager::HOOK_NUM_HOOKS);
|
tolua_constant(tolua_S,"HOOK_NUM_HOOKS",cPluginManager::HOOK_NUM_HOOKS);
|
||||||
tolua_constant(tolua_S,"HOOK_MAX",cPluginManager::HOOK_MAX);
|
tolua_constant(tolua_S,"HOOK_MAX",cPluginManager::HOOK_MAX);
|
||||||
|
@ -31348,6 +31384,7 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||||
tolua_function(tolua_S,"GetServer",tolua_AllToLua_cRoot_GetServer00);
|
tolua_function(tolua_S,"GetServer",tolua_AllToLua_cRoot_GetServer00);
|
||||||
tolua_function(tolua_S,"GetDefaultWorld",tolua_AllToLua_cRoot_GetDefaultWorld00);
|
tolua_function(tolua_S,"GetDefaultWorld",tolua_AllToLua_cRoot_GetDefaultWorld00);
|
||||||
tolua_function(tolua_S,"GetWorld",tolua_AllToLua_cRoot_GetWorld00);
|
tolua_function(tolua_S,"GetWorld",tolua_AllToLua_cRoot_GetWorld00);
|
||||||
|
tolua_function(tolua_S,"CreateAndInitializeWorld",tolua_AllToLua_cRoot_CreateAndInitializeWorld00);
|
||||||
tolua_function(tolua_S,"GetPrimaryServerVersion",tolua_AllToLua_cRoot_GetPrimaryServerVersion00);
|
tolua_function(tolua_S,"GetPrimaryServerVersion",tolua_AllToLua_cRoot_GetPrimaryServerVersion00);
|
||||||
tolua_function(tolua_S,"SetPrimaryServerVersion",tolua_AllToLua_cRoot_SetPrimaryServerVersion00);
|
tolua_function(tolua_S,"SetPrimaryServerVersion",tolua_AllToLua_cRoot_SetPrimaryServerVersion00);
|
||||||
tolua_function(tolua_S,"GetGroupManager",tolua_AllToLua_cRoot_GetGroupManager00);
|
tolua_function(tolua_S,"GetGroupManager",tolua_AllToLua_cRoot_GetGroupManager00);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
** Lua binding: AllToLua
|
** Lua binding: AllToLua
|
||||||
** Generated automatically by tolua++-1.0.92 on 12/08/13 18:11:13.
|
** Generated automatically by tolua++-1.0.92 on 12/11/13 12:34:22.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Exported function */
|
/* Exported function */
|
||||||
|
|
|
@ -93,6 +93,7 @@ public:
|
||||||
virtual bool OnUpdatingSign (cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ, AString & a_Line1, AString & a_Line2, AString & a_Line3, AString & a_Line4, cPlayer * a_Player) = 0;
|
virtual bool OnUpdatingSign (cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ, AString & a_Line1, AString & a_Line2, AString & a_Line3, AString & a_Line4, cPlayer * a_Player) = 0;
|
||||||
virtual bool OnWeatherChanged (cWorld & a_World) = 0;
|
virtual bool OnWeatherChanged (cWorld & a_World) = 0;
|
||||||
virtual bool OnWeatherChanging (cWorld & a_World, eWeather & a_NewWeather) = 0;
|
virtual bool OnWeatherChanging (cWorld & a_World, eWeather & a_NewWeather) = 0;
|
||||||
|
virtual bool OnWorldStarted (cWorld & a_World) = 0;
|
||||||
virtual bool OnWorldTick (cWorld & a_World, float a_Dt, int a_LastTickDurationMSec) = 0;
|
virtual bool OnWorldTick (cWorld & a_World, float a_Dt, int a_LastTickDurationMSec) = 0;
|
||||||
|
|
||||||
/** Handles the command split into a_Split, issued by player a_Player.
|
/** Handles the command split into a_Split, issued by player a_Player.
|
||||||
|
|
|
@ -1143,6 +1143,21 @@ bool cPluginLua::OnWeatherChanging(cWorld & a_World, eWeather & a_NewWeather)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cPluginLua::OnWorldStarted(cWorld & a_World)
|
||||||
|
{
|
||||||
|
cCSLock Lock(m_CriticalSection);
|
||||||
|
cLuaRefs & Refs = m_HookMap[cPluginManager::HOOK_WORLD_STARTED];
|
||||||
|
for (cLuaRefs::iterator itr = Refs.begin(), end = Refs.end(); itr != end; ++itr)
|
||||||
|
{
|
||||||
|
m_LuaState.Call((int)(**itr), &a_World);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cPluginLua::OnWorldTick(cWorld & a_World, float a_Dt, int a_LastTickDurationMSec)
|
bool cPluginLua::OnWorldTick(cWorld & a_World, float a_Dt, int a_LastTickDurationMSec)
|
||||||
{
|
{
|
||||||
cCSLock Lock(m_CriticalSection);
|
cCSLock Lock(m_CriticalSection);
|
||||||
|
|
|
@ -90,6 +90,7 @@ public:
|
||||||
virtual bool OnUpdatingSign (cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ, AString & a_Line1, AString & a_Line2, AString & a_Line3, AString & a_Line4, cPlayer * a_Player) override;
|
virtual bool OnUpdatingSign (cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ, AString & a_Line1, AString & a_Line2, AString & a_Line3, AString & a_Line4, cPlayer * a_Player) override;
|
||||||
virtual bool OnWeatherChanged (cWorld & a_World) override;
|
virtual bool OnWeatherChanged (cWorld & a_World) override;
|
||||||
virtual bool OnWeatherChanging (cWorld & a_World, eWeather & a_NewWeather) override;
|
virtual bool OnWeatherChanging (cWorld & a_World, eWeather & a_NewWeather) override;
|
||||||
|
virtual bool OnWorldStarted (cWorld & a_World) override;
|
||||||
virtual bool OnWorldTick (cWorld & a_World, float a_Dt, int a_LastTickDurationMSec) override;
|
virtual bool OnWorldTick (cWorld & a_World, float a_Dt, int a_LastTickDurationMSec) override;
|
||||||
|
|
||||||
virtual bool HandleCommand(const AStringVector & a_Split, cPlayer * a_Player) override;
|
virtual bool HandleCommand(const AStringVector & a_Split, cPlayer * a_Player) override;
|
||||||
|
|
|
@ -1209,6 +1209,27 @@ bool cPluginManager::CallHookWeatherChanging(cWorld & a_World, eWeather & a_NewW
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cPluginManager::CallHookWorldStarted(cWorld & a_World)
|
||||||
|
{
|
||||||
|
HookMap::iterator Plugins = m_Hooks.find(HOOK_WORLD_STARTED);
|
||||||
|
if (Plugins == m_Hooks.end())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (PluginList::iterator itr = Plugins->second.begin(); itr != Plugins->second.end(); ++itr)
|
||||||
|
{
|
||||||
|
if ((*itr)->OnWorldStarted(a_World))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cPluginManager::CallHookWorldTick(cWorld & a_World, float a_Dt, int a_LastTickDurationMSec)
|
bool cPluginManager::CallHookWorldTick(cWorld & a_World, float a_Dt, int a_LastTickDurationMSec)
|
||||||
{
|
{
|
||||||
HookMap::iterator Plugins = m_Hooks.find(HOOK_WORLD_TICK);
|
HookMap::iterator Plugins = m_Hooks.find(HOOK_WORLD_TICK);
|
||||||
|
|
|
@ -106,6 +106,7 @@ public: // tolua_export
|
||||||
HOOK_UPDATING_SIGN,
|
HOOK_UPDATING_SIGN,
|
||||||
HOOK_WEATHER_CHANGED,
|
HOOK_WEATHER_CHANGED,
|
||||||
HOOK_WEATHER_CHANGING,
|
HOOK_WEATHER_CHANGING,
|
||||||
|
HOOK_WORLD_STARTED,
|
||||||
HOOK_WORLD_TICK,
|
HOOK_WORLD_TICK,
|
||||||
|
|
||||||
// Note that if a hook type is added, it may need processing in cPlugin::CanAddHook() descendants,
|
// Note that if a hook type is added, it may need processing in cPlugin::CanAddHook() descendants,
|
||||||
|
@ -191,6 +192,7 @@ public: // tolua_export
|
||||||
bool CallHookUpdatingSign (cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ, AString & a_Line1, AString & a_Line2, AString & a_Line3, AString & a_Line4, cPlayer * a_Player);
|
bool CallHookUpdatingSign (cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ, AString & a_Line1, AString & a_Line2, AString & a_Line3, AString & a_Line4, cPlayer * a_Player);
|
||||||
bool CallHookWeatherChanged (cWorld & a_World);
|
bool CallHookWeatherChanged (cWorld & a_World);
|
||||||
bool CallHookWeatherChanging (cWorld & a_World, eWeather & a_NewWeather);
|
bool CallHookWeatherChanging (cWorld & a_World, eWeather & a_NewWeather);
|
||||||
|
bool CallHookWorldStarted (cWorld & a_World);
|
||||||
bool CallHookWorldTick (cWorld & a_World, float a_Dt, int a_LastTickDurationMSec);
|
bool CallHookWorldTick (cWorld & a_World, float a_Dt, int a_LastTickDurationMSec);
|
||||||
|
|
||||||
bool DisablePlugin(const AString & a_PluginName); // tolua_export
|
bool DisablePlugin(const AString & a_PluginName); // tolua_export
|
||||||
|
|
19
src/Root.cpp
19
src/Root.cpp
|
@ -299,12 +299,31 @@ void cRoot::LoadWorlds(cIniFile & IniFile)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cWorld * cRoot::CreateAndInitializeWorld(const AString & a_WorldName)
|
||||||
|
{
|
||||||
|
if (m_WorldsByName[a_WorldName] != NULL)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
cWorld* NewWorld = new cWorld(a_WorldName.c_str());
|
||||||
|
m_WorldsByName[a_WorldName] = NewWorld;
|
||||||
|
NewWorld->Start();
|
||||||
|
NewWorld->InitializeSpawn();
|
||||||
|
m_PluginManager->CallHookWorldStarted(*NewWorld);
|
||||||
|
return NewWorld;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cRoot::StartWorlds(void)
|
void cRoot::StartWorlds(void)
|
||||||
{
|
{
|
||||||
for (WorldMap::iterator itr = m_WorldsByName.begin(); itr != m_WorldsByName.end(); ++itr)
|
for (WorldMap::iterator itr = m_WorldsByName.begin(); itr != m_WorldsByName.end(); ++itr)
|
||||||
{
|
{
|
||||||
itr->second->Start();
|
itr->second->Start();
|
||||||
itr->second->InitializeSpawn();
|
itr->second->InitializeSpawn();
|
||||||
|
m_PluginManager->CallHookWorldStarted(*itr->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@ public:
|
||||||
cServer * GetServer(void) { return m_Server; } // tolua_export
|
cServer * GetServer(void) { return m_Server; } // tolua_export
|
||||||
cWorld * GetDefaultWorld(void); // tolua_export
|
cWorld * GetDefaultWorld(void); // tolua_export
|
||||||
cWorld * GetWorld(const AString & a_WorldName); // tolua_export
|
cWorld * GetWorld(const AString & a_WorldName); // tolua_export
|
||||||
|
cWorld * CreateAndInitializeWorld(const AString & a_WorldName); // tolua_export
|
||||||
|
|
||||||
/// Calls the callback for each world; returns true if the callback didn't abort (return true)
|
/// Calls the callback for each world; returns true if the callback didn't abort (return true)
|
||||||
bool ForEachWorld(cWorldListCallback & a_Callback); // >> Exported in ManualBindings <<
|
bool ForEachWorld(cWorldListCallback & a_Callback); // >> Exported in ManualBindings <<
|
||||||
|
|
Loading…
Reference in New Issue