From 6f301b5ceab068d79cf2b75bd50c7166a6f65c61 Mon Sep 17 00:00:00 2001 From: Arkshine Date: Wed, 7 Oct 2015 17:31:28 +0200 Subject: [PATCH] Consistency: Replace GETEDICT, INDEXENT2 and others things with HLTypeConversion in hamsandwich module --- modules/fakemeta/AMBuilder | 1 + modules/fakemeta/msvc12/fakemeta.vcxproj | 2 + .../fakemeta/msvc12/fakemeta.vcxproj.filters | 9 + modules/fun/AMBuilder | 1 + modules/fun/msvc12/fun.vcxproj | 2 + modules/fun/msvc12/fun.vcxproj.filters | 9 + modules/hamsandwich/AMBuilder | 1 + modules/hamsandwich/DataHandler.cpp | 1 - modules/hamsandwich/DataHandler.h | 30 +-- modules/hamsandwich/NEW_Util.h | 71 ------- modules/hamsandwich/amxx_api.cpp | 10 +- modules/hamsandwich/call_funcs.cpp | 201 +++++++++--------- modules/hamsandwich/ham_utils.h | 110 +--------- modules/hamsandwich/hook_callbacks.cpp | 80 +++---- modules/hamsandwich/hook_native.cpp | 8 +- .../hamsandwich/msvc12/hamsandwich.vcxproj | 5 +- .../msvc12/hamsandwich.vcxproj.filters | 18 +- modules/hamsandwich/pdata.cpp | 27 +-- modules/hamsandwich/srvcmd.cpp | 50 ++--- public/HLTypeConversion.h | 23 +- 20 files changed, 252 insertions(+), 407 deletions(-) delete mode 100644 modules/hamsandwich/NEW_Util.h diff --git a/modules/fakemeta/AMBuilder b/modules/fakemeta/AMBuilder index 710be0d5..9419bb1c 100644 --- a/modules/fakemeta/AMBuilder +++ b/modules/fakemeta/AMBuilder @@ -9,6 +9,7 @@ binary.compiler.defines += [ binary.sources = [ '../../public/sdk/amxxmodule.cpp', + '../../public/memtools/MemoryUtils.cpp', 'dllfunc.cpp', 'engfunc.cpp', 'fakemeta_amxx.cpp', diff --git a/modules/fakemeta/msvc12/fakemeta.vcxproj b/modules/fakemeta/msvc12/fakemeta.vcxproj index 1fbcb363..d2d7df5c 100644 --- a/modules/fakemeta/msvc12/fakemeta.vcxproj +++ b/modules/fakemeta/msvc12/fakemeta.vcxproj @@ -96,6 +96,7 @@ + @@ -111,6 +112,7 @@ + diff --git a/modules/fakemeta/msvc12/fakemeta.vcxproj.filters b/modules/fakemeta/msvc12/fakemeta.vcxproj.filters index 3a04028d..b48aead2 100644 --- a/modules/fakemeta/msvc12/fakemeta.vcxproj.filters +++ b/modules/fakemeta/msvc12/fakemeta.vcxproj.filters @@ -33,6 +33,9 @@ {65d8835f-89cd-44ab-b2ac-83617ab4d7b3} + + {e1b28b22-6fde-4e1f-a982-f37dec584571} + @@ -71,6 +74,9 @@ Source Files + + Memtools + @@ -109,6 +115,9 @@ Header Files + + Memtools + diff --git a/modules/fun/AMBuilder b/modules/fun/AMBuilder index d7222b23..06d81f5c 100644 --- a/modules/fun/AMBuilder +++ b/modules/fun/AMBuilder @@ -5,6 +5,7 @@ binary = AMXX.MetaModule(builder, 'fun') binary.sources = [ '../../public/sdk/amxxmodule.cpp', + '../../public/memtools/MemoryUtils.cpp', 'fun.cpp', ] diff --git a/modules/fun/msvc12/fun.vcxproj b/modules/fun/msvc12/fun.vcxproj index cc828144..bb70d392 100644 --- a/modules/fun/msvc12/fun.vcxproj +++ b/modules/fun/msvc12/fun.vcxproj @@ -141,11 +141,13 @@ + + diff --git a/modules/fun/msvc12/fun.vcxproj.filters b/modules/fun/msvc12/fun.vcxproj.filters index 463f5648..a4b5a414 100644 --- a/modules/fun/msvc12/fun.vcxproj.filters +++ b/modules/fun/msvc12/fun.vcxproj.filters @@ -18,6 +18,9 @@ {2256d296-4d3f-4321-8afb-8ff5dff8053f} + + {d2522a66-df9f-49c8-9f74-ee3738ae3d98} + @@ -26,6 +29,9 @@ Module SDK\SDK Base + + Memtools + @@ -40,6 +46,9 @@ Header Files + + Memtools + diff --git a/modules/hamsandwich/AMBuilder b/modules/hamsandwich/AMBuilder index 29f5bc1c..6181a91b 100644 --- a/modules/hamsandwich/AMBuilder +++ b/modules/hamsandwich/AMBuilder @@ -9,6 +9,7 @@ binary.compiler.defines += [ binary.sources = [ '../../public/sdk/amxxmodule.cpp', + '../../public/memtools/MemoryUtils.cpp', 'amxx_api.cpp', 'config_parser.cpp', 'hook_callbacks.cpp', diff --git a/modules/hamsandwich/DataHandler.cpp b/modules/hamsandwich/DataHandler.cpp index b212c7a8..2b6fc55e 100644 --- a/modules/hamsandwich/DataHandler.cpp +++ b/modules/hamsandwich/DataHandler.cpp @@ -20,7 +20,6 @@ #include "ham_const.h" #include "ham_utils.h" -#include "NEW_Util.h" CStack< Data * > ReturnStack; CStack< Data * > OrigReturnStack; diff --git a/modules/hamsandwich/DataHandler.h b/modules/hamsandwich/DataHandler.h index f49ca085..fe253ff3 100644 --- a/modules/hamsandwich/DataHandler.h +++ b/modules/hamsandwich/DataHandler.h @@ -151,7 +151,7 @@ public: { return -1; } - *(reinterpret_cast(m_data))=amx_ctof2(*data); + *(reinterpret_cast(m_data))=amx_ctof(*data); return 0; }; @@ -167,9 +167,9 @@ public: } Vector *vec=reinterpret_cast(m_data); - vec->x=amx_ctof2(data[0]); - vec->y=amx_ctof2(data[1]); - vec->z=amx_ctof2(data[2]); + vec->x=amx_ctof(data[0]); + vec->y=amx_ctof(data[1]); + vec->z=amx_ctof(data[2]); return 0; }; @@ -218,7 +218,7 @@ public: } if (IsType(RET_CBASE)) { - *(reinterpret_cast(m_data))=IndexToPrivate(*data); + *(reinterpret_cast(m_data))= TypeConversion.id_to_cbase(*data); if (m_index != 0) { *m_index=*data; @@ -228,7 +228,7 @@ public: } else if (IsType(RET_ENTVAR)) { - *(reinterpret_cast(m_data))=IndexToEntvar(*data); + *(reinterpret_cast(m_data))= TypeConversion.id_to_entvars(*data); if (m_index != 0) { *m_index=*data; @@ -238,7 +238,7 @@ public: } else if (IsType(RET_EDICT)) { - *(reinterpret_cast(m_data)) = IndexToEdict(*data); + *(reinterpret_cast(m_data)) = TypeConversion.id_to_edict(*data); if (m_index != 0) { *m_index = *data; @@ -299,7 +299,7 @@ public: { return -1; } - *data=amx_ftoc2(*(reinterpret_cast(m_data))); + *data=amx_ftoc(*(reinterpret_cast(m_data))); return 0; }; @@ -314,9 +314,9 @@ public: return -1; } Vector *vec=reinterpret_cast(m_data); - data[0]=amx_ftoc2(vec->x); - data[1]=amx_ftoc2(vec->y); - data[2]=amx_ftoc2(vec->z); + data[0]=amx_ftoc(vec->x); + data[1]=amx_ftoc(vec->y); + data[2]=amx_ftoc(vec->z); return 0; }; @@ -332,7 +332,7 @@ public: } const char *i=(reinterpret_cast(m_data)->chars()); - while (len-- && + while (len-- && (*data++=*i++)!='\0') { /* nothing */ @@ -347,19 +347,19 @@ public: } if (IsType(RET_CBASE)) { - *data=PrivateToIndex(m_data); + *data= TypeConversion.cbase_to_id(m_data); return 0; } else if (IsType(RET_ENTVAR)) { - *data=EntvarToIndex(reinterpret_cast(m_data)); + *data= TypeConversion.entvars_to_id(reinterpret_cast(m_data)); return 0; } else if (IsType(RET_EDICT)) { - *data = EdictToIndex(reinterpret_cast(m_data)); + *data = TypeConversion.edict_to_id(reinterpret_cast(m_data)); return 0; } diff --git a/modules/hamsandwich/NEW_Util.h b/modules/hamsandwich/NEW_Util.h deleted file mode 100644 index ea008f71..00000000 --- a/modules/hamsandwich/NEW_Util.h +++ /dev/null @@ -1,71 +0,0 @@ -// vim: set ts=4 sw=4 tw=99 noet: -// -// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). -// Copyright (C) The AMX Mod X Development Team. -// -// This software is licensed under the GNU General Public License, version 3 or higher. -// Additional exceptions apply. For full license details, see LICENSE.txt or visit: -// https://alliedmods.net/amxmodx-license - -// -// Ham Sandwich Module -// - -/* Inlined replacements for INDEXENT/ENTINDEX - * It only really removes the overhead of the push/jump - * but since INDEXENT/ENTINDEX are used a lot with amxx - * it might be beneficial to include. - * NOTE: Bad stuff will happen if you call these before - * NEW_Initialize() - * NOTE: No bounds checking is done because natives - * should use their own bounds checking! - */ - -#ifndef NEW_UTIL_H -#define NEW_UTIL_H - - -extern edict_t *NEW_FirstEdict; -extern bool NEW_Initialized; - -/** - * This is called on the first Spawn() ever hooked. This would be worldspawn (index 0) - */ -inline void NEW_Initialize(edict_t *Entity) -{ - NEW_FirstEdict=Entity; - NEW_Initialized=true; -} - - -/** - * Converts an integer index into an edict pointer - */ -inline edict_t *INDEXENT_NEW(const int Index) -{ - return (edict_t *)(NEW_FirstEdict + Index); -}; - -/** - * Converts an edict pointer into an integer index - */ -inline int ENTINDEX_NEW(const edict_t *Ent) -{ - return (int)(Ent - NEW_FirstEdict); -}; - -// Inlined replacement of MF_GetAmxAddr - - -inline REAL amx_ctof2(cell x) -{ - return *(REAL*)&x; -} -inline cell amx_ftoc2(REAL x) -{ - return *(cell*)&x; -} - - -#endif // NEW_UTIL_H - diff --git a/modules/hamsandwich/amxx_api.cpp b/modules/hamsandwich/amxx_api.cpp index d48a05a7..fc11c972 100644 --- a/modules/hamsandwich/amxx_api.cpp +++ b/modules/hamsandwich/amxx_api.cpp @@ -14,7 +14,6 @@ #include "amxxmodule.h" #include -#include "NEW_Util.h" #include #include "forward.h" #include "hook.h" @@ -24,9 +23,9 @@ #include #include "DataHandler.h" #include "hook_specialbot.h" +#include -edict_t *NEW_FirstEdict; -bool NEW_Initialized; +HLTypeConversion TypeConversion; extern ke::Vector hooks[HAM_LAST_ENTRY_DONT_USE_ME_LOL]; extern CHamSpecialBotHandler SpecialbotHandler; @@ -36,7 +35,6 @@ extern AMX_NATIVE_INFO ReturnNatives[]; extern AMX_NATIVE_INFO pdata_natives[]; extern AMX_NATIVE_INFO pdata_natives_safe[]; - extern hook_t hooklist[]; int ReadConfig(void); @@ -66,6 +64,7 @@ void OnAmxxAttach(void) assert(strcmp(hooklist[Ham_Item_GetItemInfo].name, "item_getiteminfo") == 0); MF_AddNatives(pdata_natives_safe); + if (ReadConfig() > 0) { if (Offsets.IsValid()) @@ -118,8 +117,9 @@ void OnPluginsUnloaded(void) void OnPluginsLoaded(void) { - NEW_Initialize(INDEXENT(0)); + TypeConversion.init(); } + void OnMetaAttach(void) { REG_SVR_COMMAND("ham", HamCommand); diff --git a/modules/hamsandwich/call_funcs.cpp b/modules/hamsandwich/call_funcs.cpp index 8b5494fc..97504b70 100644 --- a/modules/hamsandwich/call_funcs.cpp +++ b/modules/hamsandwich/call_funcs.cpp @@ -76,7 +76,7 @@ inline void *_GetFunction(void *pthis, int id) int id=params[2]; \ CHECK_FUNCTION(func); \ CHECK_ENTITY(id); \ - void *pv=IndexToPrivate(id); \ + void *pv=TypeConversion.id_to_cbase(id); \ bool istramp; \ void *__func=GetFunction(pv, func, istramp); \ if (!istramp && !gDoForwards) \ @@ -116,7 +116,7 @@ cell Call_Void_Entvar(AMX *amx, cell *params) CHECK_ENTITY(id3); - entvars_t *ev1=&(INDEXENT_NEW(id3)->v); + entvars_t *ev1 = TypeConversion.id_to_entvars(id3); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, ev1); @@ -135,7 +135,7 @@ cell Call_Void_Cbase(AMX *amx, cell *params) CHECK_ENTITY(id3); - void *pv1=(INDEXENT_NEW(id3)->pvPrivateData); + void *pv1 = TypeConversion.id_to_cbase(id3); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, pv1); @@ -149,7 +149,7 @@ cell Call_Int_Float_Int(AMX *amx, cell *params) { SETUP(2); - float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); + float f3=amx_ctof(*MF_GetAmxAddr(amx, params[3])); int i4=*MF_GetAmxAddr(amx, params[4]); #if defined(_WIN32) @@ -163,7 +163,7 @@ cell Call_Int_Float_Int_Int(AMX *amx, cell *params) { SETUP(3); - float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); + float f3=amx_ctof(*MF_GetAmxAddr(amx, params[3])); int i4=*MF_GetAmxAddr(amx, params[4]); int i5=*MF_GetAmxAddr(amx, params[5]); @@ -183,7 +183,7 @@ cell Call_Void_Entvar_Int(AMX *amx, cell *params) CHECK_ENTITY(id3); - entvars_t *ev3=&(INDEXENT_NEW(id3)->v); + entvars_t *ev3 = TypeConversion.id_to_entvars(id3); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, ev3, i4); @@ -204,8 +204,8 @@ cell Call_Void_Entvar_Entvar_Int(AMX *amx, cell *params) CHECK_ENTITY(id3); CHECK_ENTITY(id4); - entvars_t *ev3=&(INDEXENT_NEW(id3)->v); - entvars_t *ev4=&(INDEXENT_NEW(id4)->v); + entvars_t *ev3 = TypeConversion.id_to_entvars(id3); + entvars_t *ev4 = TypeConversion.id_to_entvars(id4); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, ev3, ev4, i5); @@ -224,7 +224,7 @@ cell Call_Int_Cbase(AMX *amx, cell *params) CHECK_ENTITY(id3); - void *pv1=(INDEXENT_NEW(id3)->pvPrivateData); + void *pv1 = TypeConversion.id_to_cbase(id3); #if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, pv1); @@ -300,7 +300,7 @@ cell Call_Int_Entvar(AMX *amx, cell *params) CHECK_ENTITY(id3); - entvars_t *ev3=&(INDEXENT_NEW(id3)->v); + entvars_t *ev3 = TypeConversion.id_to_entvars(id3); #if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, ev3); @@ -315,14 +315,14 @@ cell Call_Int_Entvar_Entvar_Float_Int(AMX *amx, cell *params) int id3=*MF_GetAmxAddr(amx, params[3]); int id4=*MF_GetAmxAddr(amx, params[4]); - float f5=amx_ctof2(*MF_GetAmxAddr(amx, params[5])); + float f5=amx_ctof(*MF_GetAmxAddr(amx, params[5])); int i6=*MF_GetAmxAddr(amx, params[6]); CHECK_ENTITY(id3); CHECK_ENTITY(id4); - entvars_t *ev3=&(INDEXENT_NEW(id3)->v); - entvars_t *ev4=&(INDEXENT_NEW(id4)->v); + entvars_t *ev3 = TypeConversion.id_to_entvars(id3); + entvars_t *ev4 = TypeConversion.id_to_entvars(id4); #if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, ev3, ev4, f5, i6); @@ -337,15 +337,15 @@ cell Call_Int_Entvar_Entvar_Float_Float_Int(AMX *amx, cell *params) int id3=*MF_GetAmxAddr(amx, params[3]); int id4=*MF_GetAmxAddr(amx, params[4]); - float f5=amx_ctof2(*MF_GetAmxAddr(amx, params[5])); - float f6=amx_ctof2(*MF_GetAmxAddr(amx, params[6])); + float f5=amx_ctof(*MF_GetAmxAddr(amx, params[5])); + float f6=amx_ctof(*MF_GetAmxAddr(amx, params[6])); int i7=*MF_GetAmxAddr(amx, params[7]); CHECK_ENTITY(id3); CHECK_ENTITY(id4); - entvars_t *ev3=&(INDEXENT_NEW(id3)->v); - entvars_t *ev4=&(INDEXENT_NEW(id4)->v); + entvars_t *ev3 = TypeConversion.id_to_entvars(id3); + entvars_t *ev4 = TypeConversion.id_to_entvars(id4); #if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, ev3, ev4, f5, f6, i7); @@ -373,13 +373,13 @@ cell Call_Vector_Float_Cbase_Int(AMX *amx, cell *params) { SETUP(4); - float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); + float f3=amx_ctof(*MF_GetAmxAddr(amx, params[3])); int id4=*MF_GetAmxAddr(amx, params[4]); int i5=*MF_GetAmxAddr(amx, params[5]); - + CHECK_ENTITY(id4); - void *p4=IndexToPrivate(id4); + void *p4 = TypeConversion.id_to_cbase(id4); #if defined(_WIN32) Vector ret; @@ -403,13 +403,13 @@ cell Call_Void_Cbase_Cbase_Int_Float(AMX *amx, cell *params) int id3=*MF_GetAmxAddr(amx, params[3]); int id4=*MF_GetAmxAddr(amx, params[4]); int i5=*MF_GetAmxAddr(amx, params[5]); - float f6=amx_ctof2(*MF_GetAmxAddr(amx, params[6])); + float f6=amx_ctof(*MF_GetAmxAddr(amx, params[6])); CHECK_ENTITY(id3); CHECK_ENTITY(id4); - void *p3=IndexToPrivate(id3); - void *p4=IndexToPrivate(id4); + void *p3 = TypeConversion.id_to_cbase(id3); + void *p4 = TypeConversion.id_to_cbase(id4); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, p3, p4, i5, f6); @@ -425,7 +425,7 @@ cell Call_Void_Entvar_Float_Vector_Trace_Int(AMX *amx, cell *params) SETUP(5); int id3=*MF_GetAmxAddr(amx, params[3]); - float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4])); + float f4=amx_ctof(*MF_GetAmxAddr(amx, params[4])); Vector v5; TraceResult *tr6=reinterpret_cast(*MF_GetAmxAddr(amx, params[6])); int i7=*MF_GetAmxAddr(amx, params[7]); @@ -444,7 +444,7 @@ cell Call_Void_Entvar_Float_Vector_Trace_Int(AMX *amx, cell *params) CHECK_ENTITY(id3); - entvars_t *ev3=&(INDEXENT_NEW(id3)->v); + entvars_t *ev3 = TypeConversion.id_to_entvars(id3); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, ev3, f4, v5, tr6, i7); #elif defined(__linux__) || defined(__APPLE__) @@ -458,7 +458,7 @@ cell Call_Void_Float_Vector_Trace_Int(AMX *amx, cell *params) { SETUP(4); - float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); + float f3=amx_ctof(*MF_GetAmxAddr(amx, params[3])); Vector v4; TraceResult *tr5=reinterpret_cast(*MF_GetAmxAddr(amx, params[5])); int i6=*MF_GetAmxAddr(amx, params[6]); @@ -504,7 +504,7 @@ cell Call_Cbase_Void(AMX *amx, cell *params) #elif defined(__linux__) || defined(__APPLE__) void *ret=reinterpret_cast(__func)(pv); #endif - return PrivateToIndex(ret); + return TypeConversion.cbase_to_id(ret); } cell Call_Float_Int(AMX *amx, cell *params) @@ -512,15 +512,15 @@ cell Call_Float_Int(AMX *amx, cell *params) SETUP(2); int i3=*MF_GetAmxAddr(amx, params[3]); - + #if defined(_WIN32) float ret=reinterpret_cast(__func)(pv, 0, i3); #elif defined(__linux__) || defined(__APPLE__) float ret=reinterpret_cast(__func)(pv, i3); #endif - *MF_GetAmxAddr(amx, params[4])=amx_ftoc2(ret); + *MF_GetAmxAddr(amx, params[4])=amx_ftoc(ret); - return 1; + return 1; } cell Call_Vector_Void(AMX *amx, cell *params) @@ -596,12 +596,12 @@ cell Call_Void_Entvar_Float_Float(AMX *amx, cell *params) SETUP(3); int id3=*MF_GetAmxAddr(amx, params[3]); - float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4])); - float f5=amx_ctof2(*MF_GetAmxAddr(amx, params[5])); + float f4=amx_ctof(*MF_GetAmxAddr(amx, params[4])); + float f5=amx_ctof(*MF_GetAmxAddr(amx, params[5])); CHECK_ENTITY(id3); - entvars_t *ev3=&(INDEXENT_NEW(id3)->v); + entvars_t *ev3 = TypeConversion.id_to_entvars(id3); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, ev3, f4, f5); @@ -625,8 +625,8 @@ cell Call_Void_pFloat_pFloat(AMX *amx, cell *params) reinterpret_cast(__func)(pv, &f3, &f4); #endif - *MF_GetAmxAddr(amx, params[3]) = amx_ftoc2(f3); - *MF_GetAmxAddr(amx, params[4]) = amx_ftoc2(f4); + *MF_GetAmxAddr(amx, params[3]) = amx_ftoc(f3); + *MF_GetAmxAddr(amx, params[4]) = amx_ftoc(f4); return 1; } @@ -636,11 +636,11 @@ cell Call_Void_Entvar_Float(AMX *amx, cell *params) SETUP(2); int id3=*MF_GetAmxAddr(amx, params[3]); - float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4])); + float f4=amx_ctof(*MF_GetAmxAddr(amx, params[4])); CHECK_ENTITY(id3); - entvars_t *ev3=&(INDEXENT_NEW(id3)->v); + entvars_t *ev3 = TypeConversion.id_to_entvars(id3); #if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, ev3, f4); @@ -693,16 +693,16 @@ cell Call_Float_Void(AMX *amx, cell *params) #elif defined(__linux__) || defined(__APPLE__) float ret=reinterpret_cast(__func)(pv); #endif - *MF_GetAmxAddr(amx, params[3])=amx_ftoc2(ret); + *MF_GetAmxAddr(amx, params[3])=amx_ftoc(ret); return 1; - } + cell Call_Void_Float_Int(AMX* amx, cell* params) { SETUP(2); - float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); + float f3=amx_ctof(*MF_GetAmxAddr(amx, params[3])); int i4 = *MF_GetAmxAddr(amx, params[4]); #if defined(_WIN32) @@ -718,17 +718,17 @@ cell Call_Float_Float_Cbase(AMX* amx, cell* params) { SETUP(3); - float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); + float f3=amx_ctof(*MF_GetAmxAddr(amx, params[3])); int id4=*MF_GetAmxAddr(amx, params[4]); CHECK_ENTITY(id4); - void *p4 = IndexToPrivate(id4); + void *p4 = TypeConversion.id_to_cbase(id4); #if defined(_WIN32) float ret = reinterpret_cast(__func)(pv, 0, f3, p4); #elif defined(__linux__) || defined(__APPLE__) float ret = reinterpret_cast(__func)(pv, f3, p4); #endif - *MF_GetAmxAddr(amx, params[5]) = amx_ftoc2(ret); + *MF_GetAmxAddr(amx, params[5]) = amx_ftoc(ret); return 1; } @@ -737,7 +737,7 @@ cell Call_Void_Float(AMX* amx, cell* params) { SETUP(1); - float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); + float f3=amx_ctof(*MF_GetAmxAddr(amx, params[3])); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, f3); @@ -751,9 +751,9 @@ cell Call_Void_Float_Float_Float_Int(AMX* amx, cell* params) { SETUP(4); - float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); - float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4])); - float f5=amx_ctof2(*MF_GetAmxAddr(amx, params[5])); + float f3=amx_ctof(*MF_GetAmxAddr(amx, params[3])); + float f4=amx_ctof(*MF_GetAmxAddr(amx, params[4])); + float f5=amx_ctof(*MF_GetAmxAddr(amx, params[5])); int i6=*MF_GetAmxAddr(amx, params[6]); #if defined(_WIN32) @@ -768,7 +768,7 @@ cell Call_Vector_Float(AMX *amx, cell *params) { SETUP(2); - float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); + float f3=amx_ctof(*MF_GetAmxAddr(amx, params[3])); #if defined(_WIN32) Vector ret; @@ -788,12 +788,12 @@ cell Call_Void_Float_Cbase(AMX *amx, cell *params) { SETUP(2); - float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); + float f3=amx_ctof(*MF_GetAmxAddr(amx, params[3])); int id4=*MF_GetAmxAddr(amx, params[4]); CHECK_ENTITY(id4); - void *p4=IndexToPrivate(id4); + void *p4 = TypeConversion.id_to_cbase(id4); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, f3, p4); @@ -808,8 +808,8 @@ cell Call_Int_Float_Float(AMX *amx, cell *params) { SETUP(2); - float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); - float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4])); + float f3=amx_ctof(*MF_GetAmxAddr(amx, params[3])); + float f4=amx_ctof(*MF_GetAmxAddr(amx, params[4])); #if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, f3, f4); @@ -822,7 +822,7 @@ cell Call_Int_Float(AMX *amx, cell *params) { SETUP(1); - float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); + float f3=amx_ctof(*MF_GetAmxAddr(amx, params[3])); #if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, f3); @@ -850,9 +850,9 @@ cell Call_Void_Str_Float_Float_Float(AMX *amx, cell *params) SETUP(4); char *sz3=MF_GetAmxString(amx, params[3], 0, NULL); - float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4])); - float f5=amx_ctof2(*MF_GetAmxAddr(amx, params[5])); - float f6=amx_ctof2(*MF_GetAmxAddr(amx, params[6])); + float f4=amx_ctof(*MF_GetAmxAddr(amx, params[4])); + float f5=amx_ctof(*MF_GetAmxAddr(amx, params[5])); + float f6=amx_ctof(*MF_GetAmxAddr(amx, params[6])); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, sz3, f4, f5, f6); @@ -868,16 +868,15 @@ cell Call_Void_Str_Float_Float_Float_Int_Cbase(AMX *amx, cell *params) SETUP(6); char *sz3=MF_GetAmxString(amx, params[3], 0, NULL); - float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4])); - float f5=amx_ctof2(*MF_GetAmxAddr(amx, params[5])); - float f6=amx_ctof2(*MF_GetAmxAddr(amx, params[6])); + float f4=amx_ctof(*MF_GetAmxAddr(amx, params[4])); + float f5=amx_ctof(*MF_GetAmxAddr(amx, params[5])); + float f6=amx_ctof(*MF_GetAmxAddr(amx, params[6])); int i7=*MF_GetAmxAddr(amx, params[7]); int id8=*MF_GetAmxAddr(amx, params[8]); CHECK_ENTITY(id8); - void *p8=IndexToPrivate(id8); - + void *p8 = TypeConversion.id_to_cbase(id8); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, sz3, f4, f5, f6, i7, p8); @@ -905,8 +904,8 @@ cell Call_Int_Vector_Vector_Float_Float(AMX *amx, cell *params) v4.y=fl4[1]; v4.z=fl4[2]; - float f5=amx_ctof2(*MF_GetAmxAddr(amx, params[5])); - float f6=amx_ctof2(*MF_GetAmxAddr(amx, params[6])); + float f5=amx_ctof(*MF_GetAmxAddr(amx, params[5])); + float f6=amx_ctof(*MF_GetAmxAddr(amx, params[6])); #if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, v3, v4, f5, f6); @@ -934,15 +933,15 @@ cell Call_Void_Entvar_Entvar_Float_Int_Int(AMX *amx, cell *params) int id3=*MF_GetAmxAddr(amx, params[3]); int id4=*MF_GetAmxAddr(amx, params[4]); - float f5=amx_ctof2(*MF_GetAmxAddr(amx, params[5])); + float f5=amx_ctof(*MF_GetAmxAddr(amx, params[5])); int i6=*MF_GetAmxAddr(amx, params[6]); int i7=*MF_GetAmxAddr(amx, params[7]); CHECK_ENTITY(id3); CHECK_ENTITY(id4); - entvars_t *ev3=&(INDEXENT_NEW(id3)->v); - entvars_t *ev4=&(INDEXENT_NEW(id4)->v); + entvars_t *ev3 = TypeConversion.id_to_entvars(id3); + entvars_t *ev4 = TypeConversion.id_to_entvars(id4); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, ev3, ev4, f5, i6, i7); @@ -966,15 +965,15 @@ cell Call_Void_Vector_Entvar_Entvar_Float_Int_Int(AMX *amx, cell *params) int id4=*MF_GetAmxAddr(amx, params[4]); int id5=*MF_GetAmxAddr(amx, params[5]); - float f6=amx_ctof2(*MF_GetAmxAddr(amx, params[6])); + float f6=amx_ctof(*MF_GetAmxAddr(amx, params[6])); int i7=*MF_GetAmxAddr(amx, params[7]); int i8=*MF_GetAmxAddr(amx, params[8]); CHECK_ENTITY(id4); CHECK_ENTITY(id5); - entvars_t *ev4=&(INDEXENT_NEW(id4)->v); - entvars_t *ev5=&(INDEXENT_NEW(id5)->v); + entvars_t *ev4 = TypeConversion.id_to_entvars(id4); + entvars_t *ev5 = TypeConversion.id_to_entvars(id5); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, v3, ev4, ev5, f6, i7, i8); @@ -990,14 +989,14 @@ cell Call_Float_Int_Float(AMX *amx, cell *params) SETUP(3); int i3=*MF_GetAmxAddr(amx, params[3]); - float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4])); + float f4=amx_ctof(*MF_GetAmxAddr(amx, params[4])); #if defined(_WIN32) float ret=reinterpret_cast(__func)(pv, 0, i3, f4); #elif defined(__linux__) || defined(__APPLE__) float ret=reinterpret_cast(__func)(pv, i3, f4); #endif - *MF_GetAmxAddr(amx, params[5])=amx_ftoc2(ret); + *MF_GetAmxAddr(amx, params[5])=amx_ftoc(ret); return 1; } @@ -1022,7 +1021,7 @@ cell Call_Void_Edict(AMX *amx, cell *params) int id3=*MF_GetAmxAddr(amx, params[3]); CHECK_ENTITY(id3); - edict_t *ed3=INDEXENT_NEW(id3); + edict_t *ed3 = TypeConversion.id_to_edict(id3); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, ed3); @@ -1119,7 +1118,7 @@ cell Call_Int_Int_Int_Float_Int(AMX* amx, cell* params) int i3=*MF_GetAmxAddr(amx, params[3]); int i4=*MF_GetAmxAddr(amx, params[4]); - float f5=amx_ctof2(*MF_GetAmxAddr(amx, params[5])); + float f5=amx_ctof(*MF_GetAmxAddr(amx, params[5])); int i6=*MF_GetAmxAddr(amx, params[6]); #if defined(_WIN32) @@ -1152,7 +1151,7 @@ cell Call_Void_Cbase_Int(AMX *amx, cell *params) int id3=*MF_GetAmxAddr(amx, params[3]); CHECK_ENTITY(id3); - void *p8=IndexToPrivate(id3); + void *p8 = TypeConversion.id_to_cbase(id3); int i4=*MF_GetAmxAddr(amx, params[4]); @@ -1239,8 +1238,8 @@ cell Call_Void_Float_Float(AMX *amx, cell *params) { SETUP(2); - float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); - float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4])); + float f3=amx_ctof(*MF_GetAmxAddr(amx, params[3])); + float f4=amx_ctof(*MF_GetAmxAddr(amx, params[4])); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, f3, f4); @@ -1288,7 +1287,7 @@ cell Call_Int_pVector_pVector_Cbase_pFloat(AMX *amx, cell *params) int id5=*MF_GetAmxAddr(amx, params[5]); CHECK_ENTITY(id5); - void *p5=IndexToPrivate(id5); + void *p5 = TypeConversion.id_to_cbase(id5); float f6; @@ -1306,7 +1305,7 @@ cell Call_Int_pVector_pVector_Cbase_pFloat(AMX *amx, cell *params) fl4[1]=v4.y; fl4[2]=v4.z; - *MF_GetAmxAddr(amx, params[6]) = amx_ftoc2(f6); + *MF_GetAmxAddr(amx, params[6]) = amx_ftoc(f6); return ret; } @@ -1318,7 +1317,7 @@ cell Call_Void_Cbase_pVector_Float(AMX *amx, cell *params) int id3=*MF_GetAmxAddr(amx, params[3]); CHECK_ENTITY(id3); - void *i3=IndexToPrivate(id3); + void *i3 = TypeConversion.id_to_cbase(id3); Vector v4; float *fl4=(float *)MF_GetAmxAddr(amx, params[4]); @@ -1326,7 +1325,7 @@ cell Call_Void_Cbase_pVector_Float(AMX *amx, cell *params) v4.y=fl4[1]; v4.z=fl4[2]; - float f5=amx_ctof2(*MF_GetAmxAddr(amx, params[5])); + float f5=amx_ctof(*MF_GetAmxAddr(amx, params[5])); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, i3, &v4, f5); @@ -1359,11 +1358,11 @@ cell Call_Int_pVector_pVector_Float_Cbase_pVector(AMX *amx, cell *params) v4.y=fl4[1]; v4.z=fl4[2]; - float f5=amx_ctof2(*MF_GetAmxAddr(amx, params[5])); + float f5=amx_ctof(*MF_GetAmxAddr(amx, params[5])); int id6=*MF_GetAmxAddr(amx, params[6]); CHECK_ENTITY(id6); - void *p6=IndexToPrivate(id6); + void *p6 = TypeConversion.id_to_cbase(id6); Vector v7; float *fl7=(float *)MF_GetAmxAddr(amx, params[7]); @@ -1401,7 +1400,7 @@ cell Call_Int_Cbase_Bool(AMX *amx, cell *params) CHECK_ENTITY(id3); - void *pv1=(INDEXENT_NEW(id3)->pvPrivateData); + void *pv1 = TypeConversion.id_to_cbase(id3); bool b4=*MF_GetAmxAddr(amx, params[4]) ? true : false; @@ -1444,9 +1443,9 @@ cell Call_Int_Entvar_Float(AMX *amx, cell *params) CHECK_ENTITY(id3); - entvars_t *ev3=&(INDEXENT_NEW(id3)->v); + entvars_t *ev3 = TypeConversion.id_to_entvars(id3); - float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4])); + float f4=amx_ctof(*MF_GetAmxAddr(amx, params[4])); #if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, ev3, f4); @@ -1459,16 +1458,16 @@ cell Call_Float_Float(AMX *amx, cell *params) { SETUP(2); - float f3=amx_ctof2(*MF_GetAmxAddr(amx, params[3])); + float f3=amx_ctof(*MF_GetAmxAddr(amx, params[3])); #if defined(_WIN32) float ret=reinterpret_cast(__func)(pv, 0, f3); #elif defined(__linux__) || defined(__APPLE__) float ret=reinterpret_cast(__func)(pv, f3); #endif - *MF_GetAmxAddr(amx, params[4])=amx_ftoc2(ret); + *MF_GetAmxAddr(amx, params[4])=amx_ftoc(ret); - return 1; + return 1; } cell Call_Void_Entvar_Entvar_Float(AMX *amx, cell *params) @@ -1477,13 +1476,13 @@ cell Call_Void_Entvar_Entvar_Float(AMX *amx, cell *params) int id3=*MF_GetAmxAddr(amx, params[3]); int id4=*MF_GetAmxAddr(amx, params[4]); - float f5=amx_ctof2(*MF_GetAmxAddr(amx, params[5])); + float f5=amx_ctof(*MF_GetAmxAddr(amx, params[5])); CHECK_ENTITY(id3); CHECK_ENTITY(id4); - entvars_t *ev3=&(INDEXENT_NEW(id3)->v); - entvars_t *ev4=&(INDEXENT_NEW(id4)->v); + entvars_t *ev3 = TypeConversion.id_to_entvars(id3); + entvars_t *ev4 = TypeConversion.id_to_entvars(id4); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, ev3, ev4, f5); @@ -1523,11 +1522,11 @@ cell Call_Int_pVector_pVector_Float_Cbase_pVector_pVector_Bool(AMX *amx, cell *p v4.y=fl4[1]; v4.z=fl4[2]; - float f5=amx_ctof2(*MF_GetAmxAddr(amx, params[5])); + float f5=amx_ctof(*MF_GetAmxAddr(amx, params[5])); int id6=*MF_GetAmxAddr(amx, params[6]); CHECK_ENTITY(id6); - void *p6=IndexToPrivate(id6); + void *p6 = TypeConversion.id_to_cbase(id6); Vector v7; float *fl7=(float *)MF_GetAmxAddr(amx, params[7]); @@ -1582,7 +1581,7 @@ cell Call_Int_Vector_Cbase(AMX *amx, cell *params) int id4=*MF_GetAmxAddr(amx, params[4]); CHECK_ENTITY(id4); - void *p4=IndexToPrivate(id4); + void *p4 = TypeConversion.id_to_cbase(id4); #if defined(_WIN32) int ret=reinterpret_cast(__func)(pv, 0, v3, p4); @@ -1622,7 +1621,7 @@ cell Call_Int_Cbase_pVector(AMX *amx, cell *params) int id3=*MF_GetAmxAddr(amx, params[3]); CHECK_ENTITY(id3); - void *pv1=(INDEXENT_NEW(id3)->pvPrivateData); + void *pv1 = TypeConversion.id_to_cbase(id3); Vector v4; float *fl4=(float *)MF_GetAmxAddr(amx, params[4]); @@ -1664,7 +1663,7 @@ cell Call_Bool_Cbase(AMX *amx, cell *params) int id3=*MF_GetAmxAddr(amx, params[3]); CHECK_ENTITY(id3); - void *pv1=(INDEXENT_NEW(id3)->pvPrivateData); + void *pv1 = TypeConversion.id_to_cbase(id3); #if defined(_WIN32) return reinterpret_cast(__func)(pv, 0, pv1); @@ -1693,9 +1692,8 @@ cell Call_Void_Cbase_Float(AMX *amx, cell *params) int id3=*MF_GetAmxAddr(amx, params[3]); CHECK_ENTITY(id3); - void *p8=IndexToPrivate(id3); - float f4=amx_ctof2(*MF_GetAmxAddr(amx, params[4])); - + void *p8 = TypeConversion.id_to_cbase(id3); + float f4 = amx_ctof(*MF_GetAmxAddr(amx, params[4])); #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, p8, f4); @@ -1713,9 +1711,8 @@ cell Call_Void_Cbase_Bool(AMX *amx, cell *params) int id3=*MF_GetAmxAddr(amx, params[3]); CHECK_ENTITY(id3); - void *p8=IndexToPrivate(id3); - - bool b4=*MF_GetAmxAddr(amx, params[4]) ? true : false; + void *p8 = TypeConversion.id_to_cbase(id3); + bool b4 = *MF_GetAmxAddr(amx, params[4]) ? true : false; #if defined(_WIN32) reinterpret_cast(__func)(pv, 0, p8, b4); diff --git a/modules/hamsandwich/ham_utils.h b/modules/hamsandwich/ham_utils.h index 1222ba9e..a30f415f 100644 --- a/modules/hamsandwich/ham_utils.h +++ b/modules/hamsandwich/ham_utils.h @@ -16,8 +16,9 @@ #include "amxxmodule.h" #include "offsets.h" -#include "NEW_Util.h" -#include +#include + +extern HLTypeConversion TypeConversion; #define CHECK_FUNCTION(x) \ if (x < 0 || x >= HAM_LAST_ENTRY_DONT_USE_ME_LOL) { \ @@ -38,124 +39,31 @@ MF_LogError(amx, AMX_ERR_NATIVE, "Entity out of range (%d)", x); \ return 0; \ } else { \ - if (INDEXENT_NEW(x)->free) { \ + if (TypeConversion.id_to_edict(x)->free) { \ MF_LogError(amx, AMX_ERR_NATIVE, "Invalid entity (%d)", x); \ return 0; \ - } else if (INDEXENT_NEW(x)->pvPrivateData == NULL) { \ + } else if (TypeConversion.id_to_edict(x)->pvPrivateData == NULL) { \ MF_LogError(amx, AMX_ERR_NATIVE, "Entity has null private data (%d)", x); \ return 0; \ } \ } -inline edict_t *PrivateToEdict(const void *pdata) -{ - - if (!pdata) - { - return NULL; - } - - char *ptr=(char*)pdata + Offsets.GetPev(); - entvars_t *pev=(entvars_t *)ptr; - - if (!pev) - { - return NULL; - } - return pev->pContainingEntity; -}; - -inline int PrivateToIndex(const void *pdata) -{ - - if (pdata==NULL) - { - return -1; - } - char *ptr=(char*)pdata; - - ptr+=Offsets.GetPev(); - - entvars_t *pev=*(entvars_t **)ptr; - - - if (pev==NULL) - { - return -1; - } - - if (pev->pContainingEntity==NULL) - { - return -1; - } - - return ENTINDEX_NEW(pev->pContainingEntity); -}; -inline void *IndexToPrivate(int index) -{ - return INDEXENT_NEW(index)->pvPrivateData; -}; -inline entvars_t *IndexToEntvar(int index) -{ - return &(INDEXENT_NEW(index)->v); -}; - -inline int EntvarToIndex(entvars_t *pev) -{ - if (pev==NULL) - { - return -1; - } - - if (pev->pContainingEntity==NULL) - { - return -1; - } - - return ENTINDEX_NEW(pev->pContainingEntity); -}; - -inline int EdictToIndex(edict_t *v) -{ - if (v==NULL) - { - return -1; - } - - return ENTINDEX_NEW(v); -} - -inline edict_t *IndexToEdict(int index) -{ - return INDEXENT_NEW(index); -}; - -inline edict_t *EntvarToEdict(entvars_t *pev) -{ - if (pev==NULL) - { - return NULL; - } - - return pev->pContainingEntity; -}; inline void **EdictToVTable(edict_t *ent) { - char *btbl=(char *)ent->pvPrivateData; - btbl+=Offsets.GetBase(); + char *btbl = (char *)ent->pvPrivateData; + btbl += Offsets.GetBase(); return *((void ***)btbl); }; inline void **GetVTable(void *pthis, int size) { - return *((void***)(((char*)pthis)+size)); + return *((void***)(((char*)pthis) + size)); } inline void *GetVTableEntry(void *pthis, int ventry, int size) { - void **vtbl=GetVTable(pthis, size); + void **vtbl = GetVTable(pthis, size); return vtbl[ventry]; } -void print_srvconsole(const char *fmt, ...); #endif diff --git a/modules/hamsandwich/hook_callbacks.cpp b/modules/hamsandwich/hook_callbacks.cpp index 39d4c333..c0cbc096 100644 --- a/modules/hamsandwich/hook_callbacks.cpp +++ b/modules/hamsandwich/hook_callbacks.cpp @@ -47,7 +47,7 @@ extern bool gDoForwards; // Parameter value pushes #define MAKE_VECTOR() \ - int iThis=PrivateToIndex(pthis); \ + int iThis=TypeConversion.cbase_to_id(pthis); \ ke::Vector *__vec=new ke::Vector; \ ParamStack.push(__vec); \ P_CBASE(pthis, iThis) @@ -194,7 +194,7 @@ void Hook_Void_Entvar(Hook *hook, void *pthis, entvars_t *entvar) { PUSH_VOID() - int iOther=EntvarToIndex(entvar); + int iOther= TypeConversion.entvars_to_id(entvar); MAKE_VECTOR() @@ -222,7 +222,7 @@ void Hook_Void_Entvar(Hook *hook, void *pthis, entvars_t *entvar) void Hook_Void_Cbase(Hook *hook, void *pthis, void *other) { PUSH_VOID() - int iOther=PrivateToIndex(other); + int iOther=TypeConversion.cbase_to_id(other); MAKE_VECTOR() @@ -312,7 +312,7 @@ int Hook_Int_Float_Int_Int(Hook *hook, void *pthis, float f1, int i1, int i2) void Hook_Void_Entvar_Int(Hook *hook, void *pthis, entvars_t *ev1, int i1) { PUSH_VOID() - int iOther=EntvarToIndex(ev1); + int iOther=TypeConversion.entvars_to_id(ev1); MAKE_VECTOR() @@ -340,8 +340,8 @@ void Hook_Void_Entvar_Int(Hook *hook, void *pthis, entvars_t *ev1, int i1) void Hook_Void_Entvar_Entvar_Int(Hook *hook, void *pthis, entvars_t *ev1, entvars_t *ev2, int i1) { PUSH_VOID() - int iInflictor=EntvarToIndex(ev1); - int iAttacker=EntvarToIndex(ev2); + int iInflictor=TypeConversion.entvars_to_id(ev1); + int iAttacker=TypeConversion.entvars_to_id(ev2); MAKE_VECTOR() @@ -374,7 +374,7 @@ int Hook_Int_Cbase(Hook *hook, void *pthis, void *cb1) PUSH_INT() - int iOther=PrivateToIndex(cb1); + int iOther=TypeConversion.cbase_to_id(cb1); MAKE_VECTOR() @@ -533,7 +533,7 @@ int Hook_Int_Entvar(Hook *hook, void *pthis, entvars_t *ev1) int origret=0; PUSH_INT() - int iOther=EntvarToIndex(ev1); + int iOther=TypeConversion.entvars_to_id(ev1); MAKE_VECTOR() P_ENTVAR(ev1, iOther) @@ -563,8 +563,8 @@ int Hook_Int_Entvar_Entvar_Float_Int(Hook *hook, void *pthis, entvars_t *inflict int ret=0; int origret=0; PUSH_INT() - int iInflictor=EntvarToIndex(inflictor); - int iAttacker=EntvarToIndex(attacker); + int iInflictor=TypeConversion.entvars_to_id(inflictor); + int iAttacker=TypeConversion.entvars_to_id(attacker); MAKE_VECTOR() P_ENTVAR(inflictor, iInflictor) @@ -597,8 +597,8 @@ int Hook_Int_Entvar_Entvar_Float_Float_Int(Hook *hook, void *pthis, entvars_t *i int ret=0; int origret=0; PUSH_INT() - int iInflictor=EntvarToIndex(inflictor); - int iAttacker=EntvarToIndex(attacker); + int iInflictor=TypeConversion.entvars_to_id(inflictor); + int iAttacker=TypeConversion.entvars_to_id(attacker); MAKE_VECTOR() P_ENTVAR(inflictor, iInflictor) @@ -698,7 +698,7 @@ void Hook_Vector_Float_Cbase_Int(Hook *hook, Vector *out, void *pthis, float f1, memset(&ret, 0x0, sizeof(Vector)); memset(&origret, 0x0, sizeof(Vector)); - int iEnt = PrivateToIndex(cb); + int iEnt = TypeConversion.cbase_to_id(cb); P_FLOAT(f1) P_CBASE(cb, iEnt) @@ -728,8 +728,8 @@ void Hook_Vector_Float_Cbase_Int(Hook *hook, Vector *out, void *pthis, float f1, void Hook_Void_Cbase_Cbase_Int_Float(Hook *hook, void *pthis, void *cb1, void *cb2, int i1, float f1) { PUSH_VOID() - int iCaller=PrivateToIndex(cb1); - int iActivator=PrivateToIndex(cb2); + int iCaller=TypeConversion.cbase_to_id(cb1); + int iActivator=TypeConversion.cbase_to_id(cb2); MAKE_VECTOR() P_CBASE(cb1, iCaller) @@ -759,7 +759,7 @@ void Hook_Void_Cbase_Cbase_Int_Float(Hook *hook, void *pthis, void *cb1, void *c void Hook_Void_Entvar_Float_Vector_Trace_Int(Hook *hook, void *pthis, entvars_t *ev1, float f1, Vector v1, TraceResult *tr1, int i1) { PUSH_VOID() - int iev1=EntvarToIndex(ev1); + int iev1=TypeConversion.entvars_to_id(ev1); MAKE_VECTOR() P_ENTVAR(ev1, iev1) @@ -972,7 +972,7 @@ int Hook_Int_pVector(Hook *hook, void *pthis, Vector *v1) void Hook_Void_Entvar_Float_Float(Hook *hook, void *pthis, entvars_t *ev1, float f1, float f2) { PUSH_VOID() - cell cev1=EntvarToIndex(ev1); + cell cev1=TypeConversion.entvars_to_id(ev1); MAKE_VECTOR() P_ENTVAR(ev1, cev1) @@ -1026,7 +1026,7 @@ void Hook_Void_pFloat_pFloat(Hook *hook, void *pthis, float *f1, float *f2) void Hook_Void_Entvar_Float(Hook *hook, void *pthis, entvars_t *ev1, float f1) { PUSH_VOID() - cell cev1=EntvarToIndex(ev1); + cell cev1=TypeConversion.entvars_to_id(ev1); MAKE_VECTOR() P_ENTVAR(ev1, cev1) @@ -1160,7 +1160,7 @@ float Hook_Float_Float_Cbase(Hook* hook, void* pthis, float f1, void *cb1) MAKE_VECTOR() - int i1 = PrivateToIndex(cb1); + int i1 = TypeConversion.cbase_to_id(cb1); P_FLOAT(f1) P_CBASE(cb1, i1) @@ -1277,7 +1277,7 @@ void Hook_Vector_Float(Hook *hook, Vector *out, void *pthis, float f1) void Hook_Void_Float_Cbase(Hook *hook, void *pthis, float f1, void *cb) { PUSH_VOID() - int iEnt =PrivateToIndex(cb); + int iEnt =TypeConversion.cbase_to_id(cb); MAKE_VECTOR() P_FLOAT(f1) @@ -1440,7 +1440,7 @@ void Hook_Void_Str_Float_Float_Float_Int_Cbase(Hook *hook, void *pthis, const ch PUSH_VOID() a = sz1; - int iEnt=PrivateToIndex(cb); + int iEnt=TypeConversion.cbase_to_id(cb); MAKE_VECTOR() @@ -1544,8 +1544,8 @@ void Hook_Void_Entvar_Entvar_Float_Int_Int(Hook *hook, void *pthis, entvars_t *i { PUSH_VOID() - int iInflictor=EntvarToIndex(inflictor); - int iAttacker=EntvarToIndex(attacker); + int iInflictor=TypeConversion.entvars_to_id(inflictor); + int iAttacker=TypeConversion.entvars_to_id(attacker); MAKE_VECTOR() @@ -1578,8 +1578,8 @@ void Hook_Void_Vector_Entvar_Entvar_Float_Int_Int(Hook *hook, void *pthis, Vecto { PUSH_VOID() - int iInflictor=EntvarToIndex(inflictor); - int iAttacker=EntvarToIndex(attacker); + int iInflictor=TypeConversion.entvars_to_id(inflictor); + int iAttacker=TypeConversion.entvars_to_id(attacker); MAKE_VECTOR() @@ -1682,7 +1682,7 @@ void Hook_Void_Edict(Hook *hook, void *pthis, edict_t *ed1) { PUSH_VOID() - int id1=EdictToIndex(ed1); + int id1=TypeConversion.edict_to_id(ed1); MAKE_VECTOR() P_EDICT(ed1, id1) @@ -1900,7 +1900,7 @@ void Hook_Void_Str_Int(Hook *hook, void *pthis, const char *sz1, int i2) void Hook_Void_Cbase_Int(Hook *hook, void *pthis, void *p1, int i1) { PUSH_VOID() - int iEnt =PrivateToIndex(p1); + int iEnt =TypeConversion.cbase_to_id(p1); MAKE_VECTOR() @@ -2124,7 +2124,7 @@ int Hook_Int_pVector_pVector_Cbase_pFloat(Hook *hook, void *pthis, Vector *v1, V PUSH_INT() - int i3=PrivateToIndex(cb); + int i3=TypeConversion.cbase_to_id(cb); MAKE_VECTOR() P_PTRVECTOR(v1) @@ -2161,7 +2161,7 @@ int Hook_Int_pVector_pVector_Cbase_pFloat(Hook *hook, void *pthis, Vector *v1, V void Hook_Void_Cbase_pVector_Float(Hook *hook, void *pthis, void *p1, Vector *v1, float fl) { PUSH_VOID() - int iEnt =PrivateToIndex(p1); + int iEnt =TypeConversion.cbase_to_id(p1); MAKE_VECTOR() @@ -2194,7 +2194,7 @@ int Hook_Int_pVector_pVector_Float_Cbase_pVector(Hook *hook, void *pthis, Vector PUSH_INT() - int i4=PrivateToIndex(cb); + int i4=TypeConversion.cbase_to_id(cb); MAKE_VECTOR() P_PTRVECTOR(v1) @@ -2238,7 +2238,7 @@ int Hook_Int_Cbase_Bool(Hook *hook, void *pthis, void *cb1, bool b1) PUSH_INT() - int i1=PrivateToIndex(cb1); + int i1=TypeConversion.cbase_to_id(cb1); MAKE_VECTOR() @@ -2305,7 +2305,7 @@ int Hook_Int_Entvar_Float(Hook *hook, void *pthis, entvars_t *ev1, float f1) int origret=0; PUSH_INT() - int i1=EntvarToIndex(ev1); + int i1=TypeConversion.entvars_to_id(ev1); MAKE_VECTOR() P_ENTVAR(ev1, i1) @@ -2365,8 +2365,8 @@ void Hook_Void_Entvar_Entvar_Float(Hook *hook, void *pthis, entvars_t *attacker, { PUSH_VOID() - int iAttacker=EntvarToIndex(attacker); - int iInflictor=EntvarToIndex(inflictor); + int iAttacker=TypeConversion.entvars_to_id(attacker); + int iInflictor=TypeConversion.entvars_to_id(inflictor); MAKE_VECTOR() @@ -2428,7 +2428,7 @@ int Hook_Int_pVector_pVector_Float_Cbase_pVector_pVector_Bool(Hook *hook, void * PUSH_INT() - int i4=PrivateToIndex(cb); + int i4=TypeConversion.cbase_to_id(cb); MAKE_VECTOR() @@ -2478,7 +2478,7 @@ int Hook_Int_Vector_Cbase(Hook *hook, void *pthis, Vector v1, void* cb) int origret=0; PUSH_INT() - int i4=PrivateToIndex(cb); + int i4=TypeConversion.cbase_to_id(cb); MAKE_VECTOR() @@ -2546,7 +2546,7 @@ int Hook_Int_Cbase_pVector(Hook *hook, void *pthis, void *cb1, Vector *v1) PUSH_INT() - int iOther=PrivateToIndex(cb1); + int iOther=TypeConversion.cbase_to_id(cb1); MAKE_VECTOR() @@ -2606,7 +2606,7 @@ bool Hook_Bool_Cbase(Hook *hook, void *pthis, void *cb) PUSH_BOOL() - int iOther=PrivateToIndex(cb); + int iOther=TypeConversion.cbase_to_id(cb); MAKE_VECTOR() @@ -2669,7 +2669,7 @@ bool Hook_Bool_Int(Hook *hook, void *pthis, int i1) void Hook_Void_Cbase_Float(Hook *hook, void *pthis, void *p1, float f1) { PUSH_VOID() - int iEnt =PrivateToIndex(p1); + int iEnt =TypeConversion.cbase_to_id(p1); MAKE_VECTOR() @@ -2698,7 +2698,7 @@ void Hook_Void_Cbase_Float(Hook *hook, void *pthis, void *p1, float f1) void Hook_Void_Cbase_Bool(Hook *hook, void *pthis, void *p1, bool b1) { PUSH_VOID() - int iEnt =PrivateToIndex(p1); + int iEnt =TypeConversion.cbase_to_id(p1); MAKE_VECTOR() diff --git a/modules/hamsandwich/hook_native.cpp b/modules/hamsandwich/hook_native.cpp index 797fa997..4b70a492 100644 --- a/modules/hamsandwich/hook_native.cpp +++ b/modules/hamsandwich/hook_native.cpp @@ -641,13 +641,12 @@ static cell AMX_NATIVE_CALL RegisterHamFromEntity(AMX *amx, cell *params) char *function=MF_GetAmxString(amx, params[3], 0, NULL); int entid=params[2]; char classname[64]; - + // Check the entity - edict_t *Entity=INDEXENT_NEW(entid); + edict_t *Entity = TypeConversion.id_to_edict(entid); - - if (Entity->pvPrivateData == NULL) + if (!Entity || Entity->pvPrivateData == NULL) { MF_LogError(amx, AMX_ERR_NATIVE,"Failed to retrieve classtype for entity id \"%d\", hook for \"%s\" not active.",entid,function); @@ -656,7 +655,6 @@ static cell AMX_NATIVE_CALL RegisterHamFromEntity(AMX *amx, cell *params) } void **vtable=GetVTable(Entity->pvPrivateData, Offsets.GetBase()); - if (vtable == NULL) { MF_LogError(amx, AMX_ERR_NATIVE,"Failed to retrieve vtable for entity id \"%d\", hook for \"%s\" not active.",entid,function); diff --git a/modules/hamsandwich/msvc12/hamsandwich.vcxproj b/modules/hamsandwich/msvc12/hamsandwich.vcxproj index 942246f9..4d68336a 100644 --- a/modules/hamsandwich/msvc12/hamsandwich.vcxproj +++ b/modules/hamsandwich/msvc12/hamsandwich.vcxproj @@ -100,6 +100,7 @@ + @@ -113,6 +114,8 @@ + + @@ -127,8 +130,6 @@ - - diff --git a/modules/hamsandwich/msvc12/hamsandwich.vcxproj.filters b/modules/hamsandwich/msvc12/hamsandwich.vcxproj.filters index e6a629fb..c453c475 100644 --- a/modules/hamsandwich/msvc12/hamsandwich.vcxproj.filters +++ b/modules/hamsandwich/msvc12/hamsandwich.vcxproj.filters @@ -30,6 +30,9 @@ {1f536280-a798-4422-847e-ed6e8df80258} cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx + + {c26eb07d-14b7-49e9-9122-6b7f5a711ecf} + @@ -65,6 +68,9 @@ Module SDK\SDK Base + + Memtools + @@ -100,12 +106,6 @@ Header Files - - Header Files - - - Header Files - Hooks @@ -115,6 +115,12 @@ Module SDK + + Header Files + + + Memtools + diff --git a/modules/hamsandwich/pdata.cpp b/modules/hamsandwich/pdata.cpp index 9a476de9..f71b0bb3 100644 --- a/modules/hamsandwich/pdata.cpp +++ b/modules/hamsandwich/pdata.cpp @@ -13,17 +13,8 @@ #include "amxxmodule.h" #include "offsets.h" -#include "NEW_Util.h" #include "ham_utils.h" -inline edict_t* INDEXENT2( int iEdictNum ) -{ - if (iEdictNum >= 1 && iEdictNum <= gpGlobals->maxClients) - return MF_GetPlayerEdict(iEdictNum); - else - return (*g_engfuncs.pfnPEntityOfEntIndex)(iEdictNum); -} - #ifdef DONT_TOUCH_THIS_AGAIN_BAIL #define FM_CHECK_ENTITY(x) \ if (x < 0 || x > gpGlobals->maxEntities) { \ @@ -48,7 +39,7 @@ inline edict_t* INDEXENT2( int iEdictNum ) if (x < 0 || x > gpGlobals->maxEntities) { \ MF_LogError(amx, AMX_ERR_NATIVE, "Entity out of range (%d)", x); \ return 0; \ - } else if (x != 0 && FNullEnt(INDEXENT2(x))) { \ + } else if (x != 0 && FNullEnt(TypeConversion.id_to_edict(x))) { \ MF_LogError(amx, AMX_ERR_NATIVE, "Invalid entity %d", x); \ return 0; \ } @@ -73,16 +64,16 @@ static cell AMX_NATIVE_CALL get_pdata_cbase_safe(AMX *amx, cell *params) MF_LogError(amx, AMX_ERR_NATIVE, "Invalid offset provided. (got: %d)", iOffset); return 0; } - void *ptr=*((void **)((int *)INDEXENT_NEW(index)->pvPrivateData + iOffset)); + void *ptr = get_pdata(TypeConversion.id_to_edict(index), iOffset * 4); // *4 because macro is char-based and native is int-based. - if (ptr == 0) + if (!ptr) { return -1; } for (int i=0; imaxEntities; ++i) { - if (ptr == INDEXENT_NEW(i)->pvPrivateData) + if (ptr == TypeConversion.id_to_cbase(i)) { return i; } @@ -90,6 +81,7 @@ static cell AMX_NATIVE_CALL get_pdata_cbase_safe(AMX *amx, cell *params) return -2; } + static cell AMX_NATIVE_CALL get_pdata_cbase(AMX *amx, cell *params) { int index=params[1]; @@ -110,10 +102,11 @@ static cell AMX_NATIVE_CALL get_pdata_cbase(AMX *amx, cell *params) MF_LogError(amx, AMX_ERR_NATIVE, "Invalid offset provided. (got: %d)", iOffset); return 0; } - void *ptr=*((void **)((int *)INDEXENT_NEW(index)->pvPrivateData + iOffset)); + void *ptr = get_pdata(TypeConversion.id_to_edict(index), iOffset * 4); - return PrivateToIndex(ptr); + return TypeConversion.cbase_to_id(ptr); } + static cell AMX_NATIVE_CALL set_pdata_cbase(AMX *amx, cell *params) { int index=params[1]; @@ -142,11 +135,11 @@ static cell AMX_NATIVE_CALL set_pdata_cbase(AMX *amx, cell *params) if (target == -1) { - *((void **)((int *)INDEXENT_NEW(index)->pvPrivateData + iOffset)) = NULL; + set_pdata(TypeConversion.id_to_edict(index), iOffset * 4, nullptr); } else { - *((void **)((int *)INDEXENT_NEW(index)->pvPrivateData + iOffset)) = INDEXENT_NEW(target)->pvPrivateData; + set_pdata(TypeConversion.id_to_edict(index), iOffset * 4, TypeConversion.id_to_cbase(target)); } return 1; diff --git a/modules/hamsandwich/srvcmd.cpp b/modules/hamsandwich/srvcmd.cpp index 72ded5b1..8658e02a 100644 --- a/modules/hamsandwich/srvcmd.cpp +++ b/modules/hamsandwich/srvcmd.cpp @@ -12,32 +12,15 @@ // #include "amxxmodule.h" -#include #include #include "ham_const.h" #include "hooklist.h" #include "offsets.h" -#include "forward.h" #include "hook.h" - extern hook_t hooklist[]; extern ke::Vector hooks[HAM_LAST_ENTRY_DONT_USE_ME_LOL]; -void print_srvconsole(const char *fmt, ...) -{ - va_list argptr; - static char string[384]; - va_start(argptr, fmt); - vsnprintf(string, sizeof(string) - 1, fmt, argptr); - string[sizeof(string) - 1] = '\0'; - va_end(argptr); - - SERVER_PRINT(string); -} - - - void HamCommand(void) { const char *cmd=CMD_ARGV(1); @@ -45,10 +28,11 @@ void HamCommand(void) if (strcmp(cmd, "list")==0) { unsigned int Total=0; - print_srvconsole("%-24s | %10s\n","Name","Set","Value"); - print_srvconsole("------------------------------------\n"); - print_srvconsole("%-24s | %10d\n", "pev", Offsets.GetPev()); - print_srvconsole("%-24s | %10d\n", "base", Offsets.GetBase()); + + MF_PrintSrvConsole("%-24s | %10s\n","Name","Set","Value"); + MF_PrintSrvConsole("------------------------------------\n"); + MF_PrintSrvConsole("%-24s | %10d\n", "pev", Offsets.GetPev()); + MF_PrintSrvConsole("%-24s | %10d\n", "base", Offsets.GetBase()); if (Offsets.IsPevSet()) { @@ -66,7 +50,7 @@ void HamCommand(void) if (hooklist[i].isset != 0) { - print_srvconsole("%-24s | %10d\n", hooklist[i].name, hooklist[i].vtid); + MF_PrintSrvConsole("%-24s | %10d\n", hooklist[i].name, hooklist[i].vtid); Total++; count++; } @@ -74,19 +58,19 @@ void HamCommand(void) if (count >= 5) { count = 0; - print_srvconsole("------------------------------------\n"); + MF_PrintSrvConsole("------------------------------------\n"); } } - print_srvconsole("\n%u keys, %u set.\n\n", HAM_LAST_ENTRY_DONT_USE_ME_LOL, Total); + MF_PrintSrvConsole("\n%u keys, %u set.\n\n", HAM_LAST_ENTRY_DONT_USE_ME_LOL, Total); return; } else if (strcmp(cmd, "hooks")==0) { - print_srvconsole("%-24s | %-27s | %10s | %10s\n", "Key", "Classname", "Pre", "Post"); - print_srvconsole("--------------------------------------------------------------------------------\n"); + MF_PrintSrvConsole("%-24s | %-27s | %10s | %10s\n", "Key", "Classname", "Pre", "Post"); + MF_PrintSrvConsole("--------------------------------------------------------------------------------\n"); unsigned int ForwardCount=0; unsigned int HookCount=0; int count = 0; @@ -97,20 +81,20 @@ void HamCommand(void) HookCount++; ForwardCount += hooks[i].at(j)->pre.length() + hooks[i].at(j)->post.length(); - print_srvconsole("%-24s | %-27s | %10d | %10d\n", hooklist[i].name, hooks[i].at(j)->ent, hooks[i].at(j)->pre.length(), hooks[i].at(j)->post.length()); + MF_PrintSrvConsole("%-24s | %-27s | %10d | %10d\n", hooklist[i].name, hooks[i].at(j)->ent, hooks[i].at(j)->pre.length(), hooks[i].at(j)->post.length()); if (count >= 5) { - print_srvconsole("--------------------------------------------------------------------------------\n"); + MF_PrintSrvConsole("--------------------------------------------------------------------------------\n"); } } } - print_srvconsole("\n%u hooks, %u forwards.\n\n", HookCount, ForwardCount); + MF_PrintSrvConsole("\n%u hooks, %u forwards.\n\n", HookCount, ForwardCount); return; } // Unknown command - print_srvconsole("Usage: ham < command > [ argument ]\n"); - print_srvconsole("Commands:\n"); - print_srvconsole(" %-22s - %s\n", "list", "list all keys and their values from the config file."); - print_srvconsole(" %-22s - %s\n", "hooks", "list all active hooks"); + MF_PrintSrvConsole("Usage: ham < command > [ argument ]\n"); + MF_PrintSrvConsole("Commands:\n"); + MF_PrintSrvConsole(" %-22s - %s\n", "list", "list all keys and their values from the config file."); + MF_PrintSrvConsole(" %-22s - %s\n", "hooks", "list all active hooks"); } diff --git a/public/HLTypeConversion.h b/public/HLTypeConversion.h index 5df77a1a..0aa6c466 100644 --- a/public/HLTypeConversion.h +++ b/public/HLTypeConversion.h @@ -9,7 +9,8 @@ #ifndef _HL_CONVERSION_TYPE_H_ #define _HL_CONVERSION_TYPE_H_ -#include "amxxmodule.h" +#include // size_t +#include // edict_t, etc. template static inline T& ref_pdata(void *pPrivateData, int offset, int element = 0) { @@ -98,7 +99,7 @@ class HLTypeConversion void* id_to_cbase(int index) { - edict_t *pEdict = id_to_edict(index); + auto pEdict = id_to_edict(index); return pEdict ? pEdict->pvPrivateData : nullptr; } @@ -126,7 +127,7 @@ class HLTypeConversion entvars_t* id_to_entvars(int index) { - edict_t *pEdict = id_to_edict(index); + auto pEdict = id_to_edict(index); return pEdict ? VARS(pEdict) : nullptr; } @@ -147,19 +148,23 @@ class HLTypeConversion return entvars_to_id(cbase_to_entvar(cbase)); } + public: + + size_t get_pev() + { + return m_PevOffset; + } + private: void search_pev() { - entvars_t *pev = VARS(m_FirstEdict); - - byte *privateData = reinterpret_cast(m_FirstEdict->pvPrivateData); + auto pev = VARS(m_FirstEdict); + auto privateData = reinterpret_cast(m_FirstEdict->pvPrivateData); for (size_t i = 0; i < 0xFFF; ++i) { - entvars_t *val = *(reinterpret_cast(privateData + i)); - - if (val == pev) + if (*reinterpret_cast(privateData + i) == pev) { m_PevOffset = i; return;