diff -r 7602d7fb60d9 -r 026da5437111 core/sourcemm_api.cpp --- a/core/sourcemm_api.cpp Fri Jul 11 06:51:21 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,240 +0,0 @@ -/** - * vim: set ts=4 : - * ============================================================================= - * SourceMod - * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. - * ============================================================================= - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License, version 3.0, as published by the - * Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see . - * - * As a special exception, AlliedModders LLC gives you permission to link the - * code of this program (as well as its derivative works) to "Half-Life 2," the - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software - * by the Valve Corporation. You must obey the GNU General Public License in - * all respects for all other code used. Additionally, AlliedModders LLC grants - * this exception to all derivative works. AlliedModders LLC defines further - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), - * or . - * - * Version: $Id$ - */ - -#include "sourcemod.h" -#include "sourcemm_api.h" -#include "sm_version.h" -#include "Logger.h" -#include "ExtensionSys.h" -#include "concmd_cleaner.h" -#include "compat_wrappers.h" - -SourceMod_Core g_SourceMod_Core; -IVEngineServer *engine = NULL; -IServerGameDLL *gamedll = NULL; -IServerGameClients *serverClients = NULL; -ISmmPluginManager *g_pMMPlugins = NULL; -CGlobalVars *gpGlobals = NULL; -ICvar *icvar = NULL; -IGameEventManager2 *gameevents = NULL; -IUniformRandomStream *engrandom = NULL; -CallClass *enginePatch = NULL; -CallClass *gamedllPatch = NULL; -IPlayerInfoManager *playerinfo = NULL; -IBaseFileSystem *basefilesystem = NULL; -IEngineSound *enginesound = NULL; -IServerPluginHelpers *serverpluginhelpers = NULL; -IServerPluginCallbacks *vsp_interface = NULL; -int vsp_version = 0; - -PLUGIN_EXPOSE(SourceMod, g_SourceMod_Core); - -bool SourceMod_Core::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late) -{ - PLUGIN_SAVEVARS(); - - GET_V_IFACE_ANY(GetServerFactory, gamedll, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL); - GET_V_IFACE_CURRENT(GetEngineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER); - GET_V_IFACE_CURRENT(GetServerFactory, serverClients, IServerGameClients, INTERFACEVERSION_SERVERGAMECLIENTS); - GET_V_IFACE_CURRENT(GetEngineFactory, icvar, ICvar, CVAR_INTERFACE_VERSION); - GET_V_IFACE_CURRENT(GetEngineFactory, gameevents, IGameEventManager2, INTERFACEVERSION_GAMEEVENTSMANAGER2); - GET_V_IFACE_CURRENT(GetEngineFactory, engrandom, IUniformRandomStream, VENGINE_SERVER_RANDOM_INTERFACE_VERSION); - GET_V_IFACE_CURRENT(GetFileSystemFactory, basefilesystem, IBaseFileSystem, BASEFILESYSTEM_INTERFACE_VERSION); - GET_V_IFACE_CURRENT(GetEngineFactory, enginesound, IEngineSound, IENGINESOUND_SERVER_INTERFACE_VERSION); - GET_V_IFACE_CURRENT(GetEngineFactory, serverpluginhelpers, IServerPluginHelpers, INTERFACEVERSION_ISERVERPLUGINHELPERS); - - /* :TODO: Make this optional and... make it find earlier versions [?] */ - GET_V_IFACE_CURRENT(GetServerFactory, playerinfo, IPlayerInfoManager, INTERFACEVERSION_PLAYERINFOMANAGER); - - if ((g_pMMPlugins = (ISmmPluginManager *)g_SMAPI->MetaFactory(MMIFACE_PLMANAGER, NULL, NULL)) == NULL) - { - if (error) - { - snprintf(error, maxlen, "Unable to find interface %s", MMIFACE_PLMANAGER); - } - return false; - } - - gpGlobals = ismm->GetCGlobals(); - - ismm->AddListener(this, this); - -#if defined METAMOD_PLAPI_VERSION - if ((vsp_interface = g_SMAPI->GetVSPInfo(&vsp_version)) == NULL) -#endif - { - g_SMAPI->EnableVSPListener(); - } - - return g_SourceMod.InitializeSourceMod(error, maxlen, late); -} - -bool SourceMod_Core::Unload(char *error, size_t maxlen) -{ - g_SourceMod.CloseSourceMod(); - return true; -} - -bool SourceMod_Core::Pause(char *error, size_t maxlen) -{ - return true; -} - -bool SourceMod_Core::Unpause(char *error, size_t maxlen) -{ - return true; -} - -void SourceMod_Core::AllPluginsLoaded() -{ - g_SourceMod.AllPluginsLoaded(); -} - -const char *SourceMod_Core::GetAuthor() -{ - return "AlliedModders LLC"; -} - -const char *SourceMod_Core::GetName() -{ - return "SourceMod"; -} - -const char *SourceMod_Core::GetDescription() -{ - return "Extensible administration and scripting system"; -} - -const char *SourceMod_Core::GetURL() -{ - return "http://www.sourcemod.net/"; -} - -const char *SourceMod_Core::GetLicense() -{ - return "See LICENSE.txt"; -} - -const char *SourceMod_Core::GetVersion() -{ - return SVN_FULL_VERSION; -} - -const char *SourceMod_Core::GetDate() -{ - return __DATE__; -} - -const char *SourceMod_Core::GetLogTag() -{ - return "SM"; -} - -void SourceMod_Core::OnVSPListening(IServerPluginCallbacks *iface) -{ - /* This shouldn't happen */ - if (!iface) - { - g_Logger.LogFatal("Metamod:Source version is out of date. SourceMod requires 1.4.2 or greater."); - return; - } - - if (vsp_interface == NULL) - { - vsp_interface = iface; - } - - if (!g_Loaded) - { - return; - } - -#if defined METAMOD_PLAPI_VERSION - if (vsp_version == 0) - { - g_SMAPI->GetVSPInfo(&vsp_version); - } -#else - if (vsp_version == 0) - { - if (strcmp(g_SourceMod.GetGameFolderName(), "ship") == 0) - { - vsp_version = 1; - } - else - { - vsp_version = 2; - } - } -#endif - - /* Notify! */ - SMGlobalClass *pBase = SMGlobalClass::head; - while (pBase) - { - pBase->OnSourceModVSPReceived(); - pBase = pBase->m_pGlobalClassNext; - } -} - -#if defined METAMOD_PLAPI_VERSION - -void SourceMod_Core::OnUnlinkConCommandBase(PluginId id, ConCommandBase *pCommand) -{ - Global_OnUnlinkConCommandBase(pCommand); -} - -#else - -void SourceMod_Core::OnPluginUnload(PluginId id) -{ - Global_OnUnlinkConCommandBase(NULL); -} - -#endif - -void *SourceMod_Core::OnMetamodQuery(const char *iface, int *ret) -{ - void *ptr = NULL; - - if (strcmp(iface, SOURCEMOD_INTERFACE_EXTENSIONS) == 0) - { - ptr = (IExtensionManager *)&g_Extensions; - } - - if (ret != NULL) - { - *ret = (ptr == NULL) ? IFACE_FAILED : IFACE_OK; - } - - return ptr; -} -