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_