core/logic/intercom.h
author Nicholas Hastings <skamonkey@gmail.com>
Wed May 25 13:31:14 2011 -0400 (2011-05-25)
changeset 3285 065beec73902
parent 3055 4c81256cac43
child 3320 f1ccb4a17a06
permissions -rw-r--r--
Backed out changeset: 65eb3df32b1c
dvander@2726
     1
/**
dvander@2726
     2
 * vim: set ts=4 :
dvander@2726
     3
 * =============================================================================
dvander@2726
     4
 * SourceMod
dvander@2726
     5
 * Copyright (C) 2004-2009 AlliedModders LLC.  All rights reserved.
dvander@2726
     6
 * =============================================================================
dvander@2726
     7
 *
dvander@2726
     8
 * This program is free software; you can redistribute it and/or modify it under
dvander@2726
     9
 * the terms of the GNU General Public License, version 3.0, as published by the
dvander@2726
    10
 * Free Software Foundation.
dvander@2726
    11
 * 
dvander@2726
    12
 * This program is distributed in the hope that it will be useful, but WITHOUT
dvander@2726
    13
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
dvander@2726
    14
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
dvander@2726
    15
 * details.
dvander@2726
    16
 *
dvander@2726
    17
 * You should have received a copy of the GNU General Public License along with
dvander@2726
    18
 * this program.  If not, see <http://www.gnu.org/licenses/>.
dvander@2726
    19
 *
dvander@2726
    20
 * As a special exception, AlliedModders LLC gives you permission to link the
dvander@2726
    21
 * code of this program (as well as its derivative works) to "Half-Life 2," the
dvander@2726
    22
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
dvander@2726
    23
 * by the Valve Corporation.  You must obey the GNU General Public License in
dvander@2726
    24
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
dvander@2726
    25
 * this exception to all derivative works.  AlliedModders LLC defines further
dvander@2726
    26
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
dvander@2726
    27
 * or <http://www.sourcemod.net/license.php>.
dvander@2726
    28
 *
dvander@2726
    29
 * Version: $Id$
dvander@2726
    30
 */
dvander@2726
    31
dvander@2726
    32
#include <sp_vm_api.h>
dvander@2726
    33
#include <IHandleSys.h>
dvander@2726
    34
#include <IShareSys.h>
dvander@2726
    35
dvander@2726
    36
#ifndef _INCLUDE_SOURCEMOD_INTERCOM_H_
dvander@2726
    37
#define _INCLUDE_SOURCEMOD_INTERCOM_H_
dvander@2726
    38
dvander@2726
    39
using namespace SourceMod;
dvander@2726
    40
dvander@2726
    41
/**
dvander@2726
    42
 * Add 1 to the RHS of this expression to bump the intercom file
dvander@2726
    43
 * This is to prevent mismatching core/logic binaries
dvander@2726
    44
 */
kaspars@3055
    45
#define SM_LOGIC_MAGIC		(0x0F47C0DE - 15)
dvander@2726
    46
dvander@2726
    47
#if defined SM_LOGIC
dvander@2726
    48
class IVEngineServer
dvander@2726
    49
#else
dvander@2726
    50
class IVEngineServer_Logic
dvander@2726
    51
#endif
dvander@2726
    52
{
dvander@2726
    53
public:
dvander@2726
    54
	virtual bool IsMapValid(const char *map) = 0;
dvander@3001
    55
	virtual void ServerCommand(const char *cmd) = 0;
dvander@2726
    56
};
dvander@2726
    57
dvander@2726
    58
namespace SourceMod
dvander@2726
    59
{
dvander@2726
    60
	class ISourceMod;
dvander@2726
    61
	class ILibrarySys;
dvander@2726
    62
	class ITextParsers;
dvander@2726
    63
	class IThreader;
dvander@2728
    64
	class IRootConsole;
dvander@2728
    65
	class IPluginManager;
dvander@2730
    66
	class IForwardManager;
dvander@2989
    67
	class ITimerSystem;
dvander@2996
    68
	class IPlayerManager;
dvander@3000
    69
	class IAdminSystem;
dvander@3001
    70
	class IGameHelpers;
dvander@3004
    71
	class IPhraseCollection;
dvander@3004
    72
	class ITranslator;
dvander@3010
    73
	class IGameConfig;
dvander@2726
    74
}
dvander@2726
    75
dvander@2726
    76
class IVEngineServer;
dvander@2726
    77
class ConVar;
dvander@2726
    78
dvander@2989
    79
struct ServerGlobals
dvander@2989
    80
{
dvander@2989
    81
	const double *universalTime;
dvander@2989
    82
	float *interval_per_tick;
dvander@2989
    83
	float *frametime;
dvander@2989
    84
};
dvander@2989
    85
dvander@2726
    86
struct sm_core_t
dvander@2726
    87
{
dvander@2726
    88
	/* Objects */
dvander@2726
    89
	IHandleSys 		*handlesys;
dvander@2726
    90
	IdentityToken_t *core_ident;
dvander@2726
    91
	ISourceMod		*sm;
dvander@2726
    92
	ILibrarySys		*libsys;
dvander@2726
    93
	IVEngineServer	*engine;
dvander@2726
    94
	IShareSys		*sharesys;
dvander@2728
    95
	IRootConsole	*rootmenu;
dvander@2728
    96
	IPluginManager	*pluginsys;
dvander@2730
    97
	IForwardManager	*forwardsys;
dvander@2989
    98
	ITimerSystem    *timersys;
dvander@2996
    99
	IPlayerManager  *playerhelpers;
dvander@3000
   100
	IAdminSystem	*adminsys;
dvander@3010
   101
	IGameHelpers    *gamehelpers;
dvander@2726
   102
	/* Functions */
dvander@2726
   103
	void			(*AddNatives)(sp_nativeinfo_t* nlist);
dvander@2726
   104
	ConVar *		(*FindConVar)(const char*);
dvander@2726
   105
	unsigned int	(*strncopy)(char*, const char*, size_t);
dvander@2726
   106
	char *			(*TrimWhitespace)(char *, size_t &);
dvander@2726
   107
	void			(*LogError)(const char*, ...);
dvander@2726
   108
	const char *	(*GetCvarString)(ConVar*);
dvander@2726
   109
	size_t			(*Format)(char*, size_t, const char*, ...);
dvander@2989
   110
	void			(*GenerateError)(IPluginContext *, cell_t, int, const char *, ...);
dvander@3004
   111
	bool			(*gnprintf)(char *, size_t, const char *, IPhraseCollection *, void **,
dvander@3004
   112
	                            unsigned int, unsigned int &, size_t *, const char **);
dvander@3006
   113
	size_t			(*atcprintf)(char *, size_t, const char *, IPluginContext *, const cell_t *, int *);
dvander@3010
   114
	bool            (*GetGameName)(char *buffer, size_t maxlength);
dvander@3010
   115
	const char *    (*GetGameDescription)();
dvander@3010
   116
	const char *    (*GetSourceEngineName)();
dvander@3010
   117
	bool            (*SymbolsAreHidden)();
dvander@2989
   118
	/* Data */
dvander@2989
   119
	ServerGlobals   *serverGlobals;
dvander@3010
   120
	void *          serverFactory;
dvander@3010
   121
	void *          engineFactory;
dvander@2726
   122
};
dvander@2726
   123
dvander@2726
   124
struct sm_logic_t
dvander@2726
   125
{
dvander@2726
   126
	SMGlobalClass	*head;
dvander@2726
   127
	IThreader		*threader;
dvander@2728
   128
	IProfiler		*profiler;
dvander@3004
   129
	ITranslator		*translator;
dvander@3002
   130
	const char      *(*stristr)(const char *, const char *);
dvander@3004
   131
	bool			(*CoreTranslate)(char *,  size_t, const char *, unsigned int, size_t *, ...);
dvander@3004
   132
	void            (*AddCorePhraseFile)(const char *filename);
dvander@3005
   133
	unsigned int	(*ReplaceAll)(char*, size_t, const char *, const char *, bool);
dvander@3005
   134
	char            *(*ReplaceEx)(char *, size_t, const char *, size_t, const char *, size_t, bool);
dvander@3010
   135
	size_t          (*DecodeHexString)(unsigned char *, size_t, const char *);
dvander@3010
   136
	IGameConfig *   (*GetCoreGameConfig)();
dvander@2726
   137
};
dvander@2726
   138
dvander@2726
   139
typedef void (*LogicInitFunction)(const sm_core_t *core, sm_logic_t *logic);
dvander@2726
   140
typedef LogicInitFunction (*LogicLoadFunction)(uint32_t magic);
dvander@2726
   141
typedef ITextParsers *(*GetITextParsers)();
dvander@2726
   142
dvander@2726
   143
#endif /* _INCLUDE_SOURCEMOD_INTERCOM_H_ */
dvander@2726
   144