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: