diff --git a/core/sourcemod.cpp b/core/sourcemod.cpp index cf2998af..aa92da32 100644 --- a/core/sourcemod.cpp +++ b/core/sourcemod.cpp @@ -510,6 +510,9 @@ void SourceModBase::DoGlobalPluginLoads() /* Re-mark any extensions as loaded */ g_Extensions.MarkAllLoaded(); + + /* Call OnAllPluginsLoaded */ + g_PluginSys.AllPluginsLoaded(); } size_t SourceModBase::BuildPath(PathType type, char *buffer, size_t maxlength, char *format, ...) diff --git a/core/systems/PluginSys.cpp b/core/systems/PluginSys.cpp index 4219c808..2714406c 100644 --- a/core/systems/PluginSys.cpp +++ b/core/systems/PluginSys.cpp @@ -340,6 +340,23 @@ void CPlugin::Call_OnPluginEnd() pFunction->Execute(&result); } +void CPlugin::Call_OnAllPluginsLoaded() +{ + if (m_status > Plugin_Paused) + { + return; + } + + cell_t result; + IPluginFunction *pFunction = m_ctx.base->GetFunctionByName("OnAllPluginsLoaded"); + if (!pFunction) + { + return; + } + + pFunction->Execute(&result); +} + bool CPlugin::Call_AskPluginLoad(char *error, size_t maxlength) { if (m_status != Plugin_Created) @@ -977,6 +994,7 @@ IPlugin *CPluginManager::LoadPlugin(const char *path, bool debug, PluginType typ UnloadPlugin(pl); return NULL; } + pl->Call_OnAllPluginsLoaded(); } return pl; @@ -2315,3 +2333,15 @@ bool CPluginManager::LibraryExists(const char *lib) return false; } + +void CPluginManager::AllPluginsLoaded() +{ + List::iterator iter; + CPlugin *pl; + + for (iter=m_plugins.begin(); iter!=m_plugins.end(); iter++) + { + pl = (*iter); + pl->Call_OnAllPluginsLoaded(); + } +} \ No newline at end of file diff --git a/core/systems/PluginSys.h b/core/systems/PluginSys.h index 9b0f0628..d1b2effc 100644 --- a/core/systems/PluginSys.h +++ b/core/systems/PluginSys.h @@ -201,6 +201,11 @@ public: */ void Call_OnPluginEnd(); + /** + * Calls the OnAllPluginsLoaded function. + */ + void Call_OnAllPluginsLoaded(); + /** * Toggles debug mode in the plugin */ @@ -395,6 +400,11 @@ public: */ void AddFunctionsToForward(const char *name, IChangeableForward *pForward); + /** + * Iterates through plugins to call OnAllPluginsLoaded. + */ + void AllPluginsLoaded(); + CPlugin *GetPluginFromIdentity(IdentityToken_t *pToken); void Shutdown(); diff --git a/plugins/include/sourcemod.inc b/plugins/include/sourcemod.inc index d3124444..401fc955 100644 --- a/plugins/include/sourcemod.inc +++ b/plugins/include/sourcemod.inc @@ -143,6 +143,11 @@ forward OnConfigsExecuted(); */ forward OnServerCfg(); +/** + * Called after all plugins have been loaded. + */ +forward OnAllPluginsLoaded(); + /** * Returns the calling plugin's Handle. *