core/HalfLife2.h
author David Anderson <dvander@alliedmods.net>
Sun Aug 26 17:41:02 2007 +0000 (2007-08-26)
changeset 1369 bd9ccced1b1a
parent 1338 1ba17552b7b1
child 1423 e73b3563f254
permissions -rw-r--r--
fixed amb834 - command callbacks could potentially occur on invalid clients in very rare cases
     1 /**
     2  * vim: set ts=4 :
     3  * =============================================================================
     4  * SourceMod
     5  * Copyright (C) 2004-2007 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.h"
    39 #include "sm_globals.h"
    40 #include "sm_queue.h"
    41 #include <IGameHelpers.h>
    42 #include <KeyValues.h>
    43 
    44 using namespace SourceHook;
    45 using namespace SourceMod;
    46 
    47 #define HUD_PRINTTALK		3
    48 #define HUD_PRINTCENTER		4
    49 
    50 struct DataTableInfo
    51 {
    52 	ServerClass *sc;
    53 	Trie *lookup;
    54 };
    55 
    56 struct DataMapTrie
    57 {
    58 	DataMapTrie() : trie(NULL) {}
    59 	Trie *trie;
    60 };
    61 
    62 struct DelayedFakeCliCmd
    63 {
    64 	String cmd;
    65 	int client;
    66 	int userid;
    67 };
    68 
    69 class CHalfLife2 : 
    70 	public SMGlobalClass,
    71 	public IGameHelpers
    72 {
    73 public:
    74 	CHalfLife2();
    75 	~CHalfLife2();
    76 public:
    77 	void OnSourceModStartup(bool late);
    78 	void OnSourceModAllInitialized();
    79 	/*void OnSourceModAllShutdown();*/
    80 public: //IGameHelpers
    81 	SendProp *FindInSendTable(const char *classname, const char *offset);
    82 	datamap_t *GetDataMap(CBaseEntity *pEntity);
    83 	ServerClass *FindServerClass(const char *classname);
    84 	typedescription_t *FindInDataMap(datamap_t *pMap, const char *offset);
    85 	void SetEdictStateChanged(edict_t *pEdict, unsigned short offset);
    86 	bool TextMsg(int client, int dest, const char *msg);
    87 	bool HintTextMsg(int client, const char *msg);
    88 	bool ShowVGUIMenu(int client, const char *name, KeyValues *data, bool show);
    89 public:
    90 	void AddToFakeCliCmdQueue(int client, int userid, const char *cmd);
    91 	void ProcessFakeCliCmdQueue();
    92 private:
    93 	DataTableInfo *_FindServerClass(const char *classname);
    94 private:
    95 	Trie *m_pClasses;
    96 	List<DataTableInfo *> m_Tables;
    97 	THash<datamap_t *, DataMapTrie> m_Maps;
    98 	int m_MsgTextMsg;
    99 	int m_HinTextMsg;
   100 	int m_VGUIMenu;
   101 	Queue<DelayedFakeCliCmd *> m_CmdQueue;
   102 	CStack<DelayedFakeCliCmd *> m_FreeCmds;
   103 };
   104 
   105 extern CHalfLife2 g_HL2;
   106 extern bool g_IsOriginalEngine;
   107 
   108 #endif //_INCLUDE_SOURCEMOD_CHALFLIFE2_H_