3 * ===============================================================
4 * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved.
5 * ===============================================================
7 * This file is not open source and may not be copied without explicit
8 * written permission of AlliedModders LLC. This file may not be redistributed
9 * in whole or significant part.
10 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
16 #include "sourcemm_api.h"
17 #include "sm_version.h"
18 #include "sourcemod.h"
21 SourceMod_Core g_SourceMod_Core;
22 IVEngineServer *engine = NULL;
23 IServerGameDLL *gamedll = NULL;
24 IServerGameClients *serverClients = NULL;
25 ISmmPluginManager *g_pMMPlugins = NULL;
26 CGlobalVars *gpGlobals = NULL;
28 IGameEventManager2 *gameevents = NULL;
29 IUniformRandomStream *engrandom = NULL;
30 CallClass<IVEngineServer> *enginePatch = NULL;
31 CallClass<IServerGameDLL> *gamedllPatch = NULL;
32 IPlayerInfoManager *playerinfo = NULL;
33 IBaseFileSystem *basefilesystem = NULL;
34 IEngineSound *enginesound = NULL;
35 IServerPluginHelpers *serverpluginhelpers = NULL;
37 PLUGIN_EXPOSE(SourceMod, g_SourceMod_Core);
39 bool SourceMod_Core::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late)
43 GET_V_IFACE_ANY(serverFactory, gamedll, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL);
44 GET_V_IFACE_CURRENT(engineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER);
45 GET_V_IFACE_CURRENT(serverFactory, serverClients, IServerGameClients, INTERFACEVERSION_SERVERGAMECLIENTS);
46 GET_V_IFACE_CURRENT(engineFactory, icvar, ICvar, VENGINE_CVAR_INTERFACE_VERSION);
47 GET_V_IFACE_CURRENT(engineFactory, gameevents, IGameEventManager2, INTERFACEVERSION_GAMEEVENTSMANAGER2);
48 GET_V_IFACE_CURRENT(engineFactory, engrandom, IUniformRandomStream, VENGINE_SERVER_RANDOM_INTERFACE_VERSION);
49 GET_V_IFACE_CURRENT(fileSystemFactory, basefilesystem, IBaseFileSystem, BASEFILESYSTEM_INTERFACE_VERSION);
50 GET_V_IFACE_CURRENT(engineFactory, enginesound, IEngineSound, IENGINESOUND_SERVER_INTERFACE_VERSION);
51 GET_V_IFACE_CURRENT(engineFactory, serverpluginhelpers, IServerPluginHelpers, INTERFACEVERSION_ISERVERPLUGINHELPERS);
53 /* :TODO: Make this optional and... make it find earlier versions [?] */
54 GET_V_IFACE_CURRENT(serverFactory, playerinfo, IPlayerInfoManager, INTERFACEVERSION_PLAYERINFOMANAGER);
56 if ((g_pMMPlugins = (ISmmPluginManager *)g_SMAPI->MetaFactory(MMIFACE_PLMANAGER, NULL, NULL)) == NULL)
60 snprintf(error, maxlen, "Unable to find interface %s", MMIFACE_PLMANAGER);
65 gpGlobals = ismm->pGlobals();
67 ismm->AddListener(this, this);
68 ismm->EnableVSPListener();
70 return g_SourceMod.InitializeSourceMod(error, maxlen, late);
73 bool SourceMod_Core::Unload(char *error, size_t maxlen)
75 g_SourceMod.CloseSourceMod();
79 bool SourceMod_Core::Pause(char *error, size_t maxlen)
84 bool SourceMod_Core::Unpause(char *error, size_t maxlen)
89 void SourceMod_Core::AllPluginsLoaded()
91 g_SourceMod.AllPluginsLoaded();
94 const char *SourceMod_Core::GetAuthor()
96 return "AlliedModders, LLC";
99 const char *SourceMod_Core::GetName()
104 const char *SourceMod_Core::GetDescription()
106 return "Extensible administration and scripting system";
109 const char *SourceMod_Core::GetURL()
111 return "http://www.sourcemod.net/";
114 const char *SourceMod_Core::GetLicense()
116 return "See LICENSE.txt";
119 const char *SourceMod_Core::GetVersion()
121 return SVN_FULL_VERSION;
124 const char *SourceMod_Core::GetDate()
129 const char *SourceMod_Core::GetLogTag()
134 void SourceMod_Core::OnVSPListening(IServerPluginCallbacks *iface)
136 /* This shouldn't happen */
139 g_Logger.LogFatal("Metamod:Source version is out of date. SourceMod requires 1.4 or greater.");
144 SMGlobalClass *pBase = SMGlobalClass::head;
147 pBase->OnSourceModVSPReceived(iface);
148 pBase = pBase->m_pGlobalClassNext;