dvander@2726: /** dvander@2726: * vim: set ts=4 : dvander@2726: * ============================================================================= dvander@2726: * SourceMod dvander@2726: * Copyright (C) 2004-2009 AlliedModders LLC. All rights reserved. dvander@2726: * ============================================================================= dvander@2726: * dvander@2726: * This program is free software; you can redistribute it and/or modify it under dvander@2726: * the terms of the GNU General Public License, version 3.0, as published by the dvander@2726: * Free Software Foundation. dvander@2726: * dvander@2726: * This program is distributed in the hope that it will be useful, but WITHOUT dvander@2726: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS dvander@2726: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more dvander@2726: * details. dvander@2726: * dvander@2726: * You should have received a copy of the GNU General Public License along with dvander@2726: * this program. If not, see . dvander@2726: * dvander@2726: * As a special exception, AlliedModders LLC gives you permission to link the dvander@2726: * code of this program (as well as its derivative works) to "Half-Life 2," the dvander@2726: * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software dvander@2726: * by the Valve Corporation. You must obey the GNU General Public License in dvander@2726: * all respects for all other code used. Additionally, AlliedModders LLC grants dvander@2726: * this exception to all derivative works. AlliedModders LLC defines further dvander@2726: * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), dvander@2726: * or . dvander@2726: * dvander@2726: * Version: $Id$ dvander@2726: */ dvander@2726: dvander@2726: #include dvander@2726: #include dvander@2726: #include dvander@2726: dvander@2726: #ifndef _INCLUDE_SOURCEMOD_INTERCOM_H_ dvander@2726: #define _INCLUDE_SOURCEMOD_INTERCOM_H_ dvander@2726: dvander@2726: using namespace SourceMod; dvander@2726: dvander@2726: /** dvander@2726: * Add 1 to the RHS of this expression to bump the intercom file dvander@2726: * This is to prevent mismatching core/logic binaries dvander@2726: */ dvander@3792: #define SM_LOGIC_MAGIC (0x0F47C0DE - 18) dvander@2726: dvander@2726: #if defined SM_LOGIC dvander@2726: class IVEngineServer dvander@2726: #else dvander@2726: class IVEngineServer_Logic dvander@2726: #endif dvander@2726: { dvander@2726: public: dvander@2726: virtual bool IsMapValid(const char *map) = 0; dvander@3001: virtual void ServerCommand(const char *cmd) = 0; dvander@2726: }; dvander@2726: dvander@2726: namespace SourceMod dvander@2726: { dvander@2726: class ISourceMod; dvander@2726: class ILibrarySys; dvander@2726: class ITextParsers; dvander@2726: class IThreader; dvander@2728: class IRootConsole; dvander@2728: class IPluginManager; dvander@2730: class IForwardManager; dvander@2989: class ITimerSystem; dvander@2996: class IPlayerManager; dvander@3000: class IAdminSystem; dvander@3001: class IGameHelpers; dvander@3004: class IPhraseCollection; dvander@3004: class ITranslator; dvander@3010: class IGameConfig; dvander@2726: } dvander@2726: dvander@2726: class IVEngineServer; dvander@2726: class ConVar; dvander@2726: dvander@2989: struct ServerGlobals dvander@2989: { dvander@2989: const double *universalTime; dvander@2989: float *interval_per_tick; dvander@2989: float *frametime; dvander@2989: }; dvander@2989: dvander@2726: struct sm_core_t dvander@2726: { dvander@2726: /* Objects */ dvander@2726: IHandleSys *handlesys; dvander@2726: IdentityToken_t *core_ident; dvander@2726: ISourceMod *sm; dvander@2726: ILibrarySys *libsys; dvander@2726: IVEngineServer *engine; dvander@2726: IShareSys *sharesys; dvander@2728: IRootConsole *rootmenu; dvander@2728: IPluginManager *pluginsys; dvander@2730: IForwardManager *forwardsys; dvander@2989: ITimerSystem *timersys; dvander@2996: IPlayerManager *playerhelpers; dvander@3000: IAdminSystem *adminsys; dvander@3010: IGameHelpers *gamehelpers; dvander@3792: ISourcePawnEngine *spe1; dvander@3792: ISourcePawnEngine2 *spe2; dvander@2726: /* Functions */ dvander@2726: void (*AddNatives)(sp_nativeinfo_t* nlist); dvander@2726: ConVar * (*FindConVar)(const char*); dvander@2726: unsigned int (*strncopy)(char*, const char*, size_t); dvander@2726: char * (*TrimWhitespace)(char *, size_t &); dvander@2726: void (*LogError)(const char*, ...); dvander@3791: void (*Log)(const char*, ...); dvander@3791: void (*LogToFile)(FILE *fp, const char*, ...); dvander@3791: void (*LogToGame)(const char *message); dvander@3791: bool (*FileExists)(const char *path); dvander@2726: const char * (*GetCvarString)(ConVar*); dvander@2726: size_t (*Format)(char*, size_t, const char*, ...); dvander@3792: size_t (*FormatArgs)(char*, size_t, const char*,va_list ap); dvander@3004: bool (*gnprintf)(char *, size_t, const char *, IPhraseCollection *, void **, dvander@3004: unsigned int, unsigned int &, size_t *, const char **); dvander@3006: size_t (*atcprintf)(char *, size_t, const char *, IPluginContext *, const cell_t *, int *); dvander@3010: bool (*GetGameName)(char *buffer, size_t maxlength); dvander@3010: const char * (*GetGameDescription)(); dvander@3010: const char * (*GetSourceEngineName)(); dvander@3010: bool (*SymbolsAreHidden)(); fyrenmoo@3366: const char * (*GetCoreConfigValue)(const char*); dvander@2989: /* Data */ dvander@2989: ServerGlobals *serverGlobals; dvander@3010: void * serverFactory; dvander@3010: void * engineFactory; skamonkey@3320: void * matchmakingDSFactory; dvander@2726: }; dvander@2726: dvander@2726: struct sm_logic_t dvander@2726: { dvander@2726: SMGlobalClass *head; dvander@2726: IThreader *threader; dvander@2728: IProfiler *profiler; dvander@3004: ITranslator *translator; dvander@3002: const char *(*stristr)(const char *, const char *); dvander@3004: bool (*CoreTranslate)(char *, size_t, const char *, unsigned int, size_t *, ...); dvander@3004: void (*AddCorePhraseFile)(const char *filename); dvander@3005: unsigned int (*ReplaceAll)(char*, size_t, const char *, const char *, bool); dvander@3005: char *(*ReplaceEx)(char *, size_t, const char *, size_t, const char *, size_t, bool); dvander@3010: size_t (*DecodeHexString)(unsigned char *, size_t, const char *); dvander@3010: IGameConfig * (*GetCoreGameConfig)(); dvander@3791: bool (*OnLogPrint)(const char *msg); // true to supercede dvander@3792: IDebugListener *debugger; dvander@3792: void (*GenerateError)(IPluginContext *, cell_t, int, const char *, ...); dvander@2726: }; dvander@2726: dvander@2726: typedef void (*LogicInitFunction)(const sm_core_t *core, sm_logic_t *logic); dvander@2726: typedef LogicInitFunction (*LogicLoadFunction)(uint32_t magic); dvander@2726: typedef ITextParsers *(*GetITextParsers)(); dvander@2726: dvander@2726: #endif /* _INCLUDE_SOURCEMOD_INTERCOM_H_ */ dvander@2726: