core/HalfLife2.h
author Nicholas Hastings <skamonkey@gmail.com>
Tue Mar 09 18:41:25 2010 -0500 (2010-03-09)
changeset 2932 77cd75e433b4
parent 2879 16c4fb1d4836
child 3010 8ea042c00c80
permissions -rw-r--r--
Fixed inaccurate description for sm_unban (bug 4245, r=dvander)
     1 /**
     2  * vim: set ts=4 :
     3  * =============================================================================
     4  * SourceMod
     5  * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
     6  * =============================================================================
     7  *
     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.
    11  * 
    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
    15  * details.
    16  *
    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/>.
    19  *
    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>.
    28  *
    29  * Version: $Id$
    30  */
    31 
    32 #ifndef _INCLUDE_SOURCEMOD_CHALFLIFE2_H_
    33 #define _INCLUDE_SOURCEMOD_CHALFLIFE2_H_
    34 
    35 #include <sh_list.h>
    36 #include <sh_string.h>
    37 #include <sh_tinyhash.h>
    38 #include <sm_trie_tpl.h>
    39 #include "sm_trie.h"
    40 #include "sm_globals.h"
    41 #include "sm_queue.h"
    42 #include <IGameHelpers.h>
    43 #include <KeyValues.h>
    44 #include <server_class.h>
    45 #include <datamap.h>
    46 #include <ihandleentity.h>
    47 
    48 class CCommand;
    49 
    50 using namespace SourceHook;
    51 using namespace SourceMod;
    52 
    53 #define HUD_PRINTTALK		3
    54 #define HUD_PRINTCENTER		4
    55 
    56 struct DataTableInfo
    57 {
    58 	ServerClass *sc;
    59 	KTrie<sm_sendprop_info_t> lookup;
    60 };
    61 
    62 struct DataMapTrie
    63 {
    64 	DataMapTrie() : trie(NULL) {}
    65 	Trie *trie;
    66 };
    67 
    68 struct DelayedFakeCliCmd
    69 {
    70 	String cmd;
    71 	int client;
    72 	int userid;
    73 };
    74 
    75 struct CachedCommandInfo
    76 {
    77 	const CCommand *args;
    78 #if SOURCE_ENGINE <= SE_DARKMESSIAH
    79 	char cmd[300];
    80 #endif
    81 };
    82 
    83 struct DelayedKickInfo
    84 {
    85 	int userid;
    86 	int client;
    87 	char buffer[384];
    88 };
    89 
    90 class CEntInfo
    91 {
    92 public:
    93 	IHandleEntity	*m_pEntity;
    94 	int				m_SerialNumber;
    95 	CEntInfo		*m_pPrev;
    96 	CEntInfo		*m_pNext;
    97 };
    98 
    99 class CHalfLife2 : 
   100 	public SMGlobalClass,
   101 	public IGameHelpers
   102 {
   103 public:
   104 	CHalfLife2();
   105 	~CHalfLife2();
   106 public:
   107 	void OnSourceModStartup(bool late);
   108 	void OnSourceModAllInitialized();
   109 	void OnSourceModAllInitialized_Post();
   110 	/*void OnSourceModAllShutdown();*/
   111 public: //IGameHelpers
   112 	SendProp *FindInSendTable(const char *classname, const char *offset);
   113 	bool FindSendPropInfo(const char *classname, const char *offset, sm_sendprop_info_t *info);
   114 	datamap_t *GetDataMap(CBaseEntity *pEntity);
   115 	ServerClass *FindServerClass(const char *classname);
   116 	typedescription_t *FindInDataMap(datamap_t *pMap, const char *offset);
   117 	void SetEdictStateChanged(edict_t *pEdict, unsigned short offset);
   118 	bool TextMsg(int client, int dest, const char *msg);
   119 	bool HintTextMsg(int client, const char *msg);
   120 	bool HintTextMsg(cell_t *players, int count, const char *msg);
   121 	bool ShowVGUIMenu(int client, const char *name, KeyValues *data, bool show);
   122 	bool IsLANServer();
   123 	bool KVLoadFromFile(KeyValues *kv, IBaseFileSystem *filesystem, const char *resourceName, const char *pathID = NULL);
   124 	edict_t *EdictOfIndex(int index);
   125 	int IndexOfEdict(edict_t *pEnt);
   126 	edict_t *GetHandleEntity(CBaseHandle &hndl);
   127 	void SetHandleEntity(CBaseHandle &hndl, edict_t *pEnt);
   128 	const char *GetCurrentMap();
   129 	void ServerCommand(const char *buffer);
   130 	CBaseEntity *ReferenceToEntity(cell_t entRef);
   131 	cell_t EntityToReference(CBaseEntity *pEntity);
   132 	cell_t IndexToReference(int entIndex);
   133 	int ReferenceToIndex(cell_t entRef);
   134 	cell_t ReferenceToBCompatRef(cell_t entRef);
   135 	CEntInfo *LookupEntity(int entIndex);
   136 	cell_t EntityToBCompatRef(CBaseEntity *pEntity);
   137 	void *GetGlobalEntityList();
   138 public:
   139 	void AddToFakeCliCmdQueue(int client, int userid, const char *cmd);
   140 	void ProcessFakeCliCmdQueue();
   141 public:
   142 	void PushCommandStack(const CCommand *cmd);
   143 	void PopCommandStack();
   144 	const CCommand *PeekCommandStack();
   145 	const char *CurrentCommandName();
   146 	void AddDelayedKick(int client, int userid, const char *msg);
   147 	void ProcessDelayedKicks();
   148 #if !defined METAMOD_PLAPI_VERSION || PLAPI_VERSION < 11
   149 	bool IsOriginalEngine();
   150 #endif
   151 private:
   152 	DataTableInfo *_FindServerClass(const char *classname);
   153 private:
   154 	Trie *m_pClasses;
   155 	List<DataTableInfo *> m_Tables;
   156 	THash<datamap_t *, DataMapTrie> m_Maps;
   157 	int m_MsgTextMsg;
   158 	int m_HinTextMsg;
   159 	int m_SayTextMsg;
   160 	int m_VGUIMenu;
   161 	Queue<DelayedFakeCliCmd *> m_CmdQueue;
   162 	CStack<DelayedFakeCliCmd *> m_FreeCmds;
   163 	CStack<CachedCommandInfo> m_CommandStack;
   164 	Queue<DelayedKickInfo> m_DelayedKicks;
   165 };
   166 
   167 extern CHalfLife2 g_HL2;
   168 
   169 bool IndexToAThings(cell_t, CBaseEntity **pEntData, edict_t **pEdictData);
   170 
   171 #endif //_INCLUDE_SOURCEMOD_CHALFLIFE2_H_