diff --git a/core/HalfLife2.cpp b/core/HalfLife2.cpp index 49ca4feb..20948b10 100644 --- a/core/HalfLife2.cpp +++ b/core/HalfLife2.cpp @@ -85,6 +85,7 @@ void CHalfLife2::OnSourceModStartup(bool late) void CHalfLife2::OnSourceModAllInitialized() { m_MsgTextMsg = g_UserMsgs.GetMessageIndex("TextMsg"); + g_ShareSys.AddInterface(NULL, this); } IChangeInfoAccessor *CBaseEdict::GetChangeAccessor() diff --git a/core/HalfLife2.h b/core/HalfLife2.h index 8a7c0669..5ab6ab82 100644 --- a/core/HalfLife2.h +++ b/core/HalfLife2.h @@ -19,12 +19,10 @@ #include #include "sm_trie.h" #include "sm_globals.h" -#include -#include -#include -#include +#include using namespace SourceHook; +using namespace SourceMod; #define HUD_PRINTTALK 3 #define HUD_PRINTCENTER 4 @@ -41,7 +39,9 @@ struct DataMapTrie Trie *trie; }; -class CHalfLife2 : public SMGlobalClass +class CHalfLife2 : + public SMGlobalClass, + public IGameHelpers { public: CHalfLife2(); @@ -50,8 +50,9 @@ public: void OnSourceModStartup(bool late); void OnSourceModAllInitialized(); /*void OnSourceModAllShutdown();*/ -public: +public: //IGameHelpers SendProp *FindInSendTable(const char *classname, const char *offset); + datamap_t *GetDataMap(CBaseEntity *pEntity); ServerClass *FindServerClass(const char *classname); typedescription_t *FindInDataMap(datamap_t *pMap, const char *offset); void SetEdictStateChanged(edict_t *pEdict, unsigned short offset); diff --git a/core/msvc8/sourcemod_mm.vcproj b/core/msvc8/sourcemod_mm.vcproj index 4c0b5553..0896b941 100644 --- a/core/msvc8/sourcemod_mm.vcproj +++ b/core/msvc8/sourcemod_mm.vcproj @@ -472,6 +472,10 @@ RelativePath="..\..\public\IGameConfigs.h" > + + diff --git a/core/smn_entities.cpp b/core/smn_entities.cpp index 93e0f662..4f2f4084 100644 --- a/core/smn_entities.cpp +++ b/core/smn_entities.cpp @@ -109,6 +109,12 @@ inline datamap_t *CBaseEntity_GetDataDescMap(CBaseEntity *pEntity) return VGetDataDescMap(pEntity, offset); } +/* :TODO: Move this! */ +datamap_t *CHalfLife2::GetDataMap(CBaseEntity *pEntity) +{ + return CBaseEntity_GetDataDescMap(pEntity); +} + static cell_t GetMaxEntities(IPluginContext *pContext, const cell_t *params) { return gpGlobals->maxEntities; diff --git a/public/IGameHelpers.h b/public/IGameHelpers.h new file mode 100644 index 00000000..e90550a7 --- /dev/null +++ b/public/IGameHelpers.h @@ -0,0 +1,103 @@ +/** + * vim: set ts=4 : + * =============================================================== + * SourceMod, Copyright (C) 2004-2007 AlliedModders LLC. + * All rights reserved. + * =============================================================== + * + * This file is part of the SourceMod/SourcePawn SDK. This file may only be + * used or modified under the Terms and Conditions of its License Agreement, + * which is found in public/licenses/LICENSE.txt. As of this notice, derivative + * works must be licensed under the GNU General Public License (version 2 or + * greater). A copy of the GPL is included under public/licenses/GPL.txt. + * + * To view the latest information, see: http://www.sourcemod.net/license.php + * + * Version: $Id$ + */ + +#ifndef _INCLUDE_SOURCEMOD_GAMEHELPERS_H_ +#define _INCLUDE_SOURCEMOD_GAMEHELPERS_H_ + +#include +#include +#include +#include +#include + +#define SMINTERFACE_GAMEHELPERS_NAME "IGameHelpers" +#define SMINTERFACE_GAMEHELPERS_VERSION 1 + +/** + * @file IGameHelpers.h + * @brief Provides Source helper functions. + */ + +namespace SourceMod +{ + class IGameHelpers : public SMInterface + { + public: + virtual const char *GetInterfaceName() + { + return SMINTERFACE_GAMEHELPERS_NAME; + } + virtual unsigned int GetInterfaceVersion() + { + return SMINTERFACE_GAMEHELPERS_VERSION; + } + public: + /** + * @brief Finds a send property in a named send table. + * + * @param classname Top-level sendtable name. + * @param offset Property name. + * @return SendProp pointer on success, NULL on failure. + */ + virtual SendProp *FindInSendTable(const char *classname, const char *offset) =0; + + /** + * @brief Finds a named server class. + * + * @return ServerClass pointer on success, NULL on failure. + */ + virtual ServerClass *FindServerClass(const char *classname) =0; + + /** + * @brief Finds a datamap_t definition. + * + * @param pMap datamap_t pointer. + * @param offset Property name. + * @return typedescription_t pointer on success, NULL + * on failure. + */ + virtual typedescription_t *FindInDataMap(datamap_t *pMap, const char *offset) =0; + + /** + * @brief Retrieves an entity's datamap_t pointer. + * + * @param pEntity CBaseEntity entity. + * @return datamap_t pointer, or NULL on failure. + */ + virtual datamap_t *GetDataMap(CBaseEntity *pEntity) =0; + + /** + * @brief Marks an edict as state changed for an offset. + * + * @param pEdict Edict pointer. + * @param offset Offset index. + */ + virtual void SetEdictStateChanged(edict_t *pEdict, unsigned short offset) =0; + + /** + * @brief Sends a text message to a client. + * + * @param client Client index. + * @param dest Destination on the HUD. + * @param msg Message to send. + */ + virtual void TextMsg(int client, int dest, const char *msg) =0; + }; +} + +#endif //_INCLUDE_SOURCEMOD_GAMEHELPERS_H_ \ No newline at end of file