2 * vim: set ts=4 sw=4 tw=99 noet:
3 * =============================================================================
5 * Copyright (C) 2004-2009 AlliedModders LLC. All rights reserved.
6 * =============================================================================
8 * This program is free software; you can redistribute it and/or modify it under
9 * the terms of the GNU General Public License, version 3.0, as published by the
10 * Free Software Foundation.
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * You should have received a copy of the GNU General Public License along with
18 * this program. If not, see <http://www.gnu.org/licenses/>.
20 * As a special exception, AlliedModders LLC gives you permission to link the
21 * code of this program (as well as its derivative works) to "Half-Life 2," the
22 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
23 * by the Valve Corporation. You must obey the GNU General Public License in
24 * all respects for all other code used. Additionally, AlliedModders LLC grants
25 * this exception to all derivative works. AlliedModders LLC defines further
26 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
27 * or <http://www.sourcemod.net/license.php>.
32 #ifndef _INCLUDE_SOURCEMOD_INTERCOM_H_
33 #define _INCLUDE_SOURCEMOD_INTERCOM_H_
35 #include <sp_vm_api.h>
36 #include <IHandleSys.h>
37 #include <IShareSys.h>
38 #include <IPluginSys.h>
39 #include <IDBDriver.h>
40 #include <sh_string.h>
41 #include <sp_vm_api.h>
42 #include <sh_vector.h>
43 #include <IExtensionSys.h>
45 using namespace SourceMod;
46 using namespace SourcePawn;
47 using namespace SourceHook;
50 * Add 1 to the RHS of this expression to bump the intercom file
51 * This is to prevent mismatching core/logic binaries
53 #define SM_LOGIC_MAGIC (0x0F47C0DE - 24)
58 class IVEngineServer_Logic
62 virtual bool IsMapValid(const char *map) = 0;
63 virtual void ServerCommand(const char *cmd) = 0;
66 typedef int FileFindHandle_t;
71 class IFileSystem_Logic
75 virtual const char *FindFirstEx(const char *pWildCard, const char *pPathID, FileFindHandle_t *pHandle) = 0;
76 virtual const char *FindNext(FileFindHandle_t handle) = 0;
77 virtual void FindClose(FileFindHandle_t handle) = 0;
88 class IForwardManager;
93 class IPhraseCollection;
106 class IChangeableForward;
111 const double *universalTime;
112 float *interval_per_tick;
118 SourceHook::String autocfg;
119 SourceHook::String folder;
125 LibraryAction_Removed,
131 class SMPlugin : public IPlugin
134 virtual size_t GetConfigCount() = 0;
135 virtual AutoConfig *GetConfig(size_t i) = 0;
136 virtual void AddLibrary(const char *name) = 0;
137 virtual void AddConfig(bool create, const char *cfg, const char *folder) = 0;
138 virtual void SetErrorState(PluginStatus status, const char *fmt, ...) = 0;
144 virtual void LoadAll(const char *config_path, const char *plugins_path) = 0;
145 virtual void RefreshAll() = 0;
146 virtual void Shutdown() = 0;
147 virtual IdentityToken_t *GetIdentity() = 0;
148 virtual void SyncMaxClients(int maxClients) = 0;
149 virtual void AddPluginsListener(IPluginsListener *listener) = 0;
150 virtual void RemovePluginsListener(IPluginsListener *listener) = 0;
151 virtual IPluginIterator *GetPluginIterator() = 0;
152 virtual void OnLibraryAction(const char *name, LibraryAction action) = 0;
153 virtual bool LibraryExists(const char *name) = 0;
154 virtual SMPlugin *FindPluginByOrder(unsigned num) = 0;
155 virtual SMPlugin *FindPluginByIdentity(IdentityToken_t *ident) = 0;
156 virtual SMPlugin *FindPluginByContext(IPluginContext *ctx) = 0;
157 virtual SMPlugin *FindPluginByContext(sp_context_t *ctx) = 0;
158 virtual SMPlugin *FindPluginByConsoleArg(const char *text) = 0;
159 virtual SMPlugin *FindPluginByHandle(Handle_t hndl, HandleError *errp) = 0;
160 virtual bool UnloadPlugin(IPlugin *plugin) = 0;
161 virtual const CVector<SMPlugin *> *ListPlugins() = 0;
162 virtual void FreePluginList(const CVector<SMPlugin *> *list) = 0;
163 virtual void AddFunctionsToForward(const char *name, IChangeableForward *fwd) = 0;
166 class IExtensionSys : public IExtensionManager
169 virtual IExtension *LoadAutoExtension(const char *name, bool bErrorOnMissing=true) = 0;
170 virtual void TryAutoload() = 0;
171 virtual void Shutdown() = 0;
172 virtual IExtension *FindExtensionByFile(const char *name) = 0;
173 virtual bool LibraryExists(const char *name) = 0;
174 virtual void CallOnCoreMapStart(edict_t *edictList, int edictCount, int maxClients) = 0;
175 virtual IExtension *GetExtensionFromIdent(IdentityToken_t *token) = 0;
176 virtual void BindChildPlugin(IExtension *ext, SMPlugin *plugin) = 0;
177 virtual void AddRawDependency(IExtension *myself, IdentityToken_t *token, void *iface) = 0;
178 virtual const CVector<IExtension *> *ListExtensions() = 0;
179 virtual void FreeExtensionList(const CVector<IExtension *> *list) = 0;
185 AutoPluginList(IScriptManager *scripts)
186 : scripts_(scripts), list_(scripts->ListPlugins())
191 scripts_->FreePluginList(list_);
193 const CVector<SMPlugin *> *operator ->()
198 IScriptManager *scripts_;
199 const CVector<SMPlugin *> *list_;
202 class AutoExtensionList
205 AutoExtensionList(IExtensionSys *extensions)
206 : extensions_(extensions), list_(extensions_->ListExtensions())
211 extensions_->FreeExtensionList(list_);
213 const CVector<IExtension *> *operator ->()
218 IExtensionSys *extensions_;
219 const CVector<IExtension *> *list_;
229 IVEngineServer *engine;
230 IFileSystem *filesystem;
231 IRootConsole *rootmenu;
232 IForwardManager *forwardsys;
233 ITimerSystem *timersys;
234 IPlayerManager *playerhelpers;
235 IAdminSystem *adminsys;
236 IGameHelpers *gamehelpers;
237 ISourcePawnEngine **spe1;
238 ISourcePawnEngine2 **spe2;
240 ConVar * (*FindConVar)(const char*);
241 unsigned int (*strncopy)(char*, const char*, size_t);
242 char * (*TrimWhitespace)(char *, size_t &);
243 void (*LogError)(const char*, ...);
244 void (*LogFatal)(const char*, ...);
245 void (*Log)(const char*, ...);
246 void (*LogToFile)(FILE *fp, const char*, ...);
247 void (*LogToGame)(const char *message);
248 bool (*FileExists)(const char *path);
249 const char * (*GetCvarString)(ConVar*);
250 size_t (*Format)(char*, size_t, const char*, ...);
251 size_t (*FormatArgs)(char*, size_t, const char*,va_list ap);
252 bool (*gnprintf)(char *, size_t, const char *, IPhraseCollection *, void **,
253 unsigned int, unsigned int &, size_t *, const char **);
254 size_t (*atcprintf)(char *, size_t, const char *, IPluginContext *, const cell_t *, int *);
255 bool (*GetGameName)(char *buffer, size_t maxlength);
256 const char * (*GetGameDescription)();
257 const char * (*GetSourceEngineName)();
258 bool (*SymbolsAreHidden)();
259 const char * (*GetCoreConfigValue)(const char*);
260 bool (*IsMapLoading)();
261 bool (*IsMapRunning)();
262 int (*Argc)(const CCommand &args);
263 const char * (*Arg)(const CCommand &args, int arg);
264 int (*LoadMMSPlugin)(const char *file, bool *ok, char *error, size_t maxlength);
265 void (*UnloadMMSPlugin)(int id);
266 void (*DoGlobalPluginLoads)();
267 bool (*AreConfigsExecuted)();
268 void (*ExecuteConfigs)(IPluginContext *ctx);
269 DatabaseInfo (*GetDBInfoFromKeyValues)(KeyValues *);
270 const char *gamesuffix;
272 ServerGlobals *serverGlobals;
273 void * serverFactory;
274 void * engineFactory;
275 void * matchmakingDSFactory;
276 SMGlobalClass * listeners;
284 ITranslator *translator;
285 const char *(*stristr)(const char *, const char *);
286 bool (*CoreTranslate)(char *, size_t, const char *, unsigned int, size_t *, ...);
287 void (*AddCorePhraseFile)(const char *filename);
288 unsigned int (*ReplaceAll)(char*, size_t, const char *, const char *, bool);
289 char *(*ReplaceEx)(char *, size_t, const char *, size_t, const char *, size_t, bool);
290 size_t (*DecodeHexString)(unsigned char *, size_t, const char *);
291 IGameConfig * (*GetCoreGameConfig)();
292 bool (*OnLogPrint)(const char *msg); // true to supercede
293 IDebugListener *debugger;
294 void (*GenerateError)(IPluginContext *, cell_t, int, const char *, ...);
295 void (*AddNatives)(sp_nativeinfo_t *natives);
296 void (*DumpHandles)(void (*dumpfn)(const char *fmt, ...));
297 IScriptManager *scripts;
299 IExtensionSys *extsys;
300 IHandleSys *handlesys;
301 IdentityToken_t *core_ident;
305 typedef void (*LogicInitFunction)(const sm_core_t *core, sm_logic_t *logic);
306 typedef LogicInitFunction (*LogicLoadFunction)(uint32_t magic);
307 typedef ITextParsers *(*GetITextParsers)();
309 #endif /* _INCLUDE_SOURCEMOD_INTERCOM_H_ */