dvander@2168: /** dvander@2168: * vim: set ts=4 : dvander@2168: * ============================================================================= dvander@2168: * SourceMod dvander@2168: * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. dvander@2168: * ============================================================================= dvander@2168: * dvander@2168: * This program is free software; you can redistribute it and/or modify it under dvander@2168: * the terms of the GNU General Public License, version 3.0, as published by the dvander@2168: * Free Software Foundation. dvander@2168: * dvander@2168: * This program is distributed in the hope that it will be useful, but WITHOUT dvander@2168: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS dvander@2168: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more dvander@2168: * details. dvander@2168: * dvander@2168: * You should have received a copy of the GNU General Public License along with dvander@2168: * this program. If not, see . dvander@2168: * dvander@2168: * As a special exception, AlliedModders LLC gives you permission to link the dvander@2168: * code of this program (as well as its derivative works) to "Half-Life 2," the dvander@2168: * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software dvander@2168: * by the Valve Corporation. You must obey the GNU General Public License in dvander@2168: * all respects for all other code used. Additionally, AlliedModders LLC grants dvander@2168: * this exception to all derivative works. AlliedModders LLC defines further dvander@2168: * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), dvander@2168: * or . dvander@2168: * dvander@2168: * Version: $Id$ dvander@2168: */ dvander@2168: dvander@2168: #ifndef _INCLUDE_SOURCEMOD_GLOBALS_H_ dvander@2168: #define _INCLUDE_SOURCEMOD_GLOBALS_H_ dvander@2168: dvander@2168: /** dvander@2168: * @file Contains global headers that most files in SourceMod will need. dvander@2168: */ dvander@2168: dvander@2168: #include dvander@2168: #include dvander@2168: #include "sm_platform.h" dvander@2168: #include dvander@2168: dvander@2168: using namespace SourcePawn; dvander@2168: using namespace SourceMod; dvander@2168: dvander@2168: class IServerPluginCallbacks; dvander@2168: dvander@2168: /** dvander@2168: * @brief Lists result codes possible from attempting to set a core configuration option. dvander@2168: */ dvander@2168: enum ConfigResult dvander@2168: { dvander@2168: ConfigResult_Accept = 0, /**< Config option was successfully set */ dvander@2168: ConfigResult_Reject = 1, /**< Config option was given an invalid value and was rejected */ dvander@2168: ConfigResult_Ignore = 2 /**< Config option was invalid, but ignored */ dvander@2168: }; dvander@2168: dvander@2168: /** dvander@2168: * @brief Lists possible sources of a config option change dvander@2168: */ dvander@2168: enum ConfigSource dvander@2168: { dvander@2168: ConfigSource_File = 0, /**< Config option was set from config file (core.cfg) */ dvander@2168: ConfigSource_Console = 1, /**< Config option was set from console command (sm config) */ dvander@2168: }; dvander@2168: dvander@2168: /** dvander@2168: * @brief Any class deriving from this will be automatically initiated/shutdown by SourceMod dvander@2168: */ dvander@2168: class SMGlobalClass dvander@2168: { dvander@2168: friend class SourceMod_Core; dvander@2168: friend class SourceModBase; dvander@2168: friend class CoreConfig; dvander@2168: friend class CExtensionManager; dvander@2168: public: dvander@2168: SMGlobalClass(); dvander@2168: public: dvander@2168: /** dvander@2168: * @brief Called when SourceMod is initially loading dvander@2168: */ dvander@2168: virtual void OnSourceModStartup(bool late) dvander@2168: { dvander@2168: } dvander@2168: dvander@2168: /** dvander@2168: * @brief Called after all global classes have been started up dvander@2168: */ dvander@2168: virtual void OnSourceModAllInitialized() dvander@2168: { dvander@2168: } dvander@2168: dvander@2168: /** dvander@2168: * @brief Called after all global classes have initialized dvander@2168: */ dvander@2168: virtual void OnSourceModAllInitialized_Post() dvander@2168: { dvander@2168: } dvander@2168: dvander@2168: /** dvander@2168: * @brief Called when SourceMod is shutting down dvander@2168: */ dvander@2168: virtual void OnSourceModShutdown() dvander@2168: { dvander@2168: } dvander@2168: dvander@2168: /** dvander@2168: * @brief Called after SourceMod is completely shut down dvander@2168: */ dvander@2168: virtual void OnSourceModAllShutdown() dvander@2168: { dvander@2168: } dvander@2168: dvander@2168: /** dvander@2168: * @brief Called when a core config option is changed. dvander@2168: * @note This is called once BEFORE OnSourceModStartup() when SourceMod is loading dvander@2168: * @note It can then be called again when the 'sm config' command is used dvander@2168: */ dvander@2168: virtual ConfigResult OnSourceModConfigChanged(const char *key, dvander@2168: const char *value, dvander@2168: ConfigSource source, dvander@2168: char *error, dvander@2168: size_t maxlength) dvander@2168: { dvander@2168: return ConfigResult_Ignore; dvander@2168: } dvander@2168: dvander@2168: /** dvander@2168: * @brief Called when the level changes. dvander@2168: */ dvander@2168: virtual void OnSourceModLevelChange(const char *mapName) dvander@2168: { dvander@2168: } dvander@2168: dvander@2168: /** dvander@2168: * @brief Called when the level ends. dvander@2168: */ dvander@2168: virtual void OnSourceModLevelEnd() dvander@2168: { dvander@2168: } dvander@2168: dvander@2168: /** dvander@2168: * @brief Called after plugins are loaded on mapchange. dvander@2168: */ dvander@2168: virtual void OnSourceModPluginsLoaded() dvander@2168: { dvander@2168: } dvander@2168: dvander@2168: /** dvander@2168: * @brief Called when SourceMod receives a pointer to IServerPluginCallbacks from SourceMM dvander@2168: */ dvander@2168: virtual void OnSourceModVSPReceived() dvander@2168: { dvander@2168: } dvander@2168: dvander@2168: /** dvander@2168: * @brief Called once all MM:S plugins are loaded. dvander@2168: */ dvander@2168: virtual void OnSourceModGameInitialized() dvander@2168: { dvander@2168: } dvander@2168: dvander@2168: /** dvander@2168: * @brief Called when an identity is dropped (right now, extensions only) dvander@2168: */ dvander@2168: virtual void OnSourceModIdentityDropped(IdentityToken_t *pToken) dvander@2168: { dvander@2168: } dvander@2168: private: dvander@2168: SMGlobalClass *m_pGlobalClassNext; dvander@2168: static SMGlobalClass *head; dvander@2168: }; dvander@2168: dvander@2168: extern ISourcePawnEngine *g_pSourcePawn; dvander@2175: extern ISourcePawnEngine2 *g_pSourcePawn2; dvander@2168: extern IVirtualMachine *g_pVM; dvander@2168: extern IdentityToken_t *g_pCoreIdent; dvander@2168: dvander@2168: #include "sm_autonatives.h" dvander@2168: dvander@2168: #endif //_INCLUDE_SOURCEMOD_GLOBALS_H_