Consistency: Replace GETEDICT and variants with HLTypeConversion in cstrike module
This commit is contained in:
parent
6f301b5cea
commit
b65a0600ee
@ -15,7 +15,6 @@ binary.sources = [
|
||||
'CstrikeHacks.cpp',
|
||||
'CstrikeUtils.cpp',
|
||||
'CstrikeUserMessages.cpp',
|
||||
'CstrikeHLTypeConversion.cpp',
|
||||
'../../../public/memtools/MemoryUtils.cpp',
|
||||
'../../../public/memtools/CDetour/detours.cpp',
|
||||
'../../../public/memtools/CDetour/asm/asm.c',
|
||||
|
@ -14,8 +14,6 @@
|
||||
#ifndef CSTRIKE_DATA_H
|
||||
#define CSTRIKE_DATA_H
|
||||
|
||||
#include "amxxmodule.h"
|
||||
|
||||
/**
|
||||
* Weapon Ids for use with CS_OnBuyAttempt(), CS_OnBuy().
|
||||
*/
|
||||
|
@ -1,119 +0,0 @@
|
||||
//
|
||||
// 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
|
||||
|
||||
//
|
||||
// Counter-Strike Module
|
||||
//
|
||||
|
||||
#include "CstrikeHLTypeConversion.h"
|
||||
|
||||
OffsetHandler* G_OffsetHandler;
|
||||
HL_TypeConversion G_HL_TypeConversion;
|
||||
|
||||
void OffsetHandler::search_pev()
|
||||
{
|
||||
edict_t *pEdict = INDEXENT(0);
|
||||
entvars_t *pev = VARS(pEdict);
|
||||
|
||||
byte *privateData = reinterpret_cast<byte*>(pEdict->pvPrivateData);
|
||||
|
||||
for (int i = 0; i < 0xFFF; i++)
|
||||
{
|
||||
entvars_t *val = *(reinterpret_cast<entvars_t**>(privateData + i));
|
||||
|
||||
if (val == pev)
|
||||
{
|
||||
this->pev = i;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// This should not happen.
|
||||
this->pev = 0;
|
||||
}
|
||||
|
||||
inline edict_t* HL_TypeConversion::INDEXENT2(int iEdictNum)
|
||||
{
|
||||
if (iEdictNum >= 1 && iEdictNum <= gpGlobals->maxClients)
|
||||
{
|
||||
return MF_GetPlayerEdict(iEdictNum);
|
||||
}
|
||||
else
|
||||
{
|
||||
return (*g_engfuncs.pfnPEntityOfEntIndex)(iEdictNum);
|
||||
}
|
||||
}
|
||||
|
||||
edict_t* HL_TypeConversion::entvar_to_edict(entvars_t *pev)
|
||||
{
|
||||
if (!pev)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return pev->pContainingEntity;
|
||||
}
|
||||
|
||||
int HL_TypeConversion::entvar_to_id(entvars_t *pev)
|
||||
{
|
||||
if (!pev)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!pev->pContainingEntity)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
return ENTINDEX(pev->pContainingEntity);
|
||||
}
|
||||
|
||||
void* HL_TypeConversion::id_to_cbase(int index)
|
||||
{
|
||||
edict_t* edict = INDEXENT2(index);
|
||||
return edict ? edict->pvPrivateData : nullptr;
|
||||
}
|
||||
|
||||
entvars_t* HL_TypeConversion::id_to_entvar(int index)
|
||||
{
|
||||
edict_t *pEdict = INDEXENT2(index);
|
||||
return pEdict ? VARS(pEdict) : nullptr;
|
||||
}
|
||||
|
||||
entvars_t* HL_TypeConversion::cbase_to_entvar(void* cbase)
|
||||
{
|
||||
if (!cbase)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return *reinterpret_cast<entvars_t**>(reinterpret_cast<int8*>(cbase) + G_OffsetHandler->pev);
|
||||
}
|
||||
|
||||
int HL_TypeConversion::cbase_to_id(void *cbase)
|
||||
{
|
||||
if (!cbase)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
entvars_t *pev = this->cbase_to_entvar(cbase);
|
||||
|
||||
if (!pev)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!pev->pContainingEntity || FNullEnt(pev->pContainingEntity))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
return ENTINDEX(pev->pContainingEntity);
|
||||
}
|
@ -1,49 +0,0 @@
|
||||
//
|
||||
// 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
|
||||
|
||||
//
|
||||
// Counter-Strike Module
|
||||
//
|
||||
|
||||
#ifndef HL_TYPE_CONVERSION_H
|
||||
#define HL_TYPE_CONVERSION_H
|
||||
|
||||
#include "amxxmodule.h"
|
||||
|
||||
struct OffsetHandler
|
||||
{
|
||||
int pev;
|
||||
|
||||
void search_pev();
|
||||
|
||||
OffsetHandler()
|
||||
{
|
||||
search_pev();
|
||||
}
|
||||
};
|
||||
|
||||
class HL_TypeConversion
|
||||
{
|
||||
public:
|
||||
|
||||
inline edict_t* INDEXENT2(int iEdictNum);
|
||||
|
||||
edict_t* entvar_to_edict(entvars_t *pev);
|
||||
int entvar_to_id(entvars_t *pev);
|
||||
|
||||
void* id_to_cbase(int index);
|
||||
int cbase_to_id(void *cbase);
|
||||
|
||||
entvars_t* id_to_entvar(int index);
|
||||
entvars_t* cbase_to_entvar(void* cbase);
|
||||
};
|
||||
|
||||
extern OffsetHandler* G_OffsetHandler;
|
||||
extern HL_TypeConversion G_HL_TypeConversion;
|
||||
|
||||
#endif // HL_TYPE_CONVERSION_H
|
@ -14,7 +14,6 @@
|
||||
#include "CstrikeDatas.h"
|
||||
#include "CstrikeUtils.h"
|
||||
#include "CstrikeHacks.h"
|
||||
#include "CstrikeHLTypeConversion.h"
|
||||
#include <sm_stringhashmap.h>
|
||||
|
||||
void CtrlDetours_ClientCommand(bool set);
|
||||
@ -213,7 +212,7 @@ DETOUR_DECL_MEMBER1(GiveNamedItem, void, const char*, pszName) // void CBasePlay
|
||||
// If the current item id is not null, this means player has triggers a buy command.
|
||||
if (CurrentItemId)
|
||||
{
|
||||
int client = G_HL_TypeConversion.cbase_to_id(this);
|
||||
int client = TypeConversion.cbase_to_id(this);
|
||||
|
||||
if (MF_IsPlayerAlive(client) && MF_ExecuteForward(ForwardOnBuy, static_cast<cell>(client), static_cast<cell>(CurrentItemId)) > 0)
|
||||
{
|
||||
@ -234,7 +233,7 @@ DETOUR_DECL_MEMBER1(GiveShield, void, bool, bRetire) // void CBasePlayer::GiveSh
|
||||
// Special case for shield. Game doesn't use GiveNamedItem() to give a shield.
|
||||
if (CurrentItemId == CSI_SHIELDGUN)
|
||||
{
|
||||
int client = G_HL_TypeConversion.cbase_to_id(this);
|
||||
int client = TypeConversion.cbase_to_id(this);
|
||||
|
||||
if (MF_IsPlayerAlive(client) && MF_ExecuteForward(ForwardOnBuy, static_cast<cell>(client), CSI_SHIELDGUN) > 0)
|
||||
{
|
||||
|
@ -13,16 +13,15 @@
|
||||
|
||||
#include "amxxmodule.h"
|
||||
#include "CstrikeUtils.h"
|
||||
#include "CstrikeDatas.h"
|
||||
#include "CstrikeHacks.h"
|
||||
#include "CstrikeHLTypeConversion.h"
|
||||
#include <IGameConfigs.h>
|
||||
#include "engine_strucs.h"
|
||||
|
||||
IGameConfig *MainConfig;
|
||||
IGameConfig *CommonConfig;
|
||||
IGameConfigManager *ConfigManager;
|
||||
|
||||
HLTypeConversion TypeConversion;
|
||||
|
||||
int AmxxCheckGame(const char *game)
|
||||
{
|
||||
if (strcasecmp(game, "cstrike") == 0 ||
|
||||
@ -75,11 +74,8 @@ void OnPluginsLoaded()
|
||||
ToggleDetour_ClientCommands(ForwardInternalCommand != -1 || ForwardOnBuy != -1 || ForwardOnBuyAttempt != -1);
|
||||
ToggleDetour_BuyCommands(ForwardOnBuy != -1);
|
||||
|
||||
// Search pev offset automatically.
|
||||
if (!G_OffsetHandler)
|
||||
{
|
||||
G_OffsetHandler = new OffsetHandler;
|
||||
}
|
||||
// Search pev/vtable offset automatically.
|
||||
TypeConversion.init();
|
||||
|
||||
// Used with model natives, enabled on demand.
|
||||
g_pengfuncsTable->pfnSetClientKeyValue = nullptr;
|
||||
|
@ -16,9 +16,7 @@
|
||||
#include "CstrikeUtils.h"
|
||||
#include "CstrikeHacks.h"
|
||||
#include "CstrikeUserMessages.h"
|
||||
#include "CstrikeHLTypeConversion.h"
|
||||
#include <CDetour/detours.h>
|
||||
#include <amtl/am-vector.h>
|
||||
#include <amtl/am-string.h>
|
||||
|
||||
bool NoKifesMode = false;
|
||||
@ -999,14 +997,14 @@ static cell AMX_NATIVE_CALL cs_set_hostage_follow(AMX *amx, cell *params)
|
||||
GET_OFFSET("CHostageImprov", m_idleState);
|
||||
GET_OFFSET("HostageFollowState", m_leader);
|
||||
GET_OFFSET("SimpleStateMachine", m_state); // +4 for virtual table pointer of IImprovEvent.
|
||||
GET_OFFSET("SimpleStateMachine", m_stateTimer); //
|
||||
GET_OFFSET("SimpleStateMachine", m_stateTimer); //
|
||||
|
||||
if (target)
|
||||
{
|
||||
set_pdata<void*>(pImprov, m_behavior + 4 + m_state, reinterpret_cast<int8*>(pImprov) + m_followState);
|
||||
set_pdata<float>(pImprov, m_behavior + 4 + m_stateTimer, gpGlobals->time);
|
||||
|
||||
get_pdata<EHANDLE>(pImprov, m_followState + m_leader).Set(GETEDICT(target));
|
||||
get_pdata<EHANDLE>(pImprov, m_followState + m_leader).Set(TypeConversion.id_to_edict(target));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1018,7 +1016,7 @@ static cell AMX_NATIVE_CALL cs_set_hostage_follow(AMX *amx, cell *params)
|
||||
}
|
||||
else
|
||||
{
|
||||
get_pdata<EHANDLE>(pHostage, m_hTargetEnt).Set(target ? GETEDICT(target) : nullptr);
|
||||
get_pdata<EHANDLE>(pHostage, m_hTargetEnt).Set(target ? TypeConversion.id_to_edict(target) : nullptr);
|
||||
}
|
||||
|
||||
return 1;
|
||||
@ -1728,10 +1726,10 @@ static cell AMX_NATIVE_CALL cs_find_ent_by_class(AMX* amx, cell* params)
|
||||
}
|
||||
|
||||
int len;
|
||||
void* pEntity = G_HL_TypeConversion.id_to_cbase(params[1]);
|
||||
void* pEntity = TypeConversion.id_to_cbase(params[1]);
|
||||
const char* value = MF_GetAmxString(amx, params[2], 0, &len);
|
||||
|
||||
int index = G_HL_TypeConversion.cbase_to_id(CS_UTIL_FindEntityByString(pEntity, "classname", value));
|
||||
int index = TypeConversion.cbase_to_id(CS_UTIL_FindEntityByString(pEntity, "classname", value));
|
||||
|
||||
if (index != -1)
|
||||
{
|
||||
|
@ -14,6 +14,10 @@
|
||||
#ifndef CSTRIKE_UTILS_H
|
||||
#define CSTRIKE_UTILS_H
|
||||
|
||||
#include <HLTypeConversion.h>
|
||||
|
||||
extern HLTypeConversion TypeConversion;
|
||||
|
||||
bool UTIL_IsPlayer(edict_t *pPlayer);
|
||||
void UTIL_TextMsg_Generic(edict_t* pPlayer, const char* message);
|
||||
bool UTIL_CheckForPublic(const char *publicname);
|
||||
@ -70,10 +74,6 @@ bool UTIL_CheckForPublic(const char *publicname);
|
||||
return 0; \
|
||||
}
|
||||
|
||||
#define GETEDICT(n) \
|
||||
((n >= 1 && n <= gpGlobals->maxClients) ? MF_GetPlayerEdict(n) : INDEXENT(n))
|
||||
|
||||
|
||||
#define GET_OFFSET(classname, member) \
|
||||
static int member = -1; \
|
||||
if (member == -1) \
|
||||
@ -99,71 +99,6 @@ bool UTIL_CheckForPublic(const char *publicname);
|
||||
member = type.fieldOffset; \
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline T& get_pdata(edict_t *pEntity, int offset, int element = 0)
|
||||
{
|
||||
return *reinterpret_cast<T*>(reinterpret_cast<int8*>(pEntity->pvPrivateData) + offset + element * sizeof(T));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline T& get_pdata(void *pEntity, int offset, int element = 0)
|
||||
{
|
||||
return *reinterpret_cast<T*>(reinterpret_cast<int8*>(pEntity) + offset + element * sizeof(T));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline void set_pdata(edict_t *pEntity, int offset, T value, int element = 0)
|
||||
{
|
||||
*reinterpret_cast<T*>(reinterpret_cast<int8*>(pEntity->pvPrivateData) + offset + element * sizeof(T)) = value;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline void set_pdata(void *pEntity, int offset, T value, int element = 0)
|
||||
{
|
||||
*reinterpret_cast<T*>(reinterpret_cast<int8*>(pEntity) + offset + element * sizeof(T)) = value;
|
||||
}
|
||||
|
||||
class EHANDLE
|
||||
{
|
||||
private:
|
||||
|
||||
edict_t* m_pent;
|
||||
int m_serialnumber;
|
||||
|
||||
public:
|
||||
|
||||
edict_t* Get(void)
|
||||
{
|
||||
if (!FNullEnt(m_pent))
|
||||
{
|
||||
if (m_pent->serialnumber == m_serialnumber)
|
||||
{
|
||||
return m_pent;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
};
|
||||
|
||||
edict_t* Set(edict_t *pent)
|
||||
{
|
||||
if (!FNullEnt(pent))
|
||||
{
|
||||
m_pent = pent;
|
||||
m_serialnumber = m_pent->serialnumber;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pent = nullptr;
|
||||
m_serialnumber = 0;
|
||||
}
|
||||
|
||||
return pent;
|
||||
};
|
||||
};
|
||||
|
||||
class CUnifiedSignals
|
||||
{
|
||||
public:
|
||||
|
@ -146,7 +146,6 @@
|
||||
<ClCompile Include="..\..\..\..\public\memtools\MemoryUtils.cpp" />
|
||||
<ClCompile Include="..\CstrikeMain.cpp" />
|
||||
<ClCompile Include="..\CstrikeHacks.cpp" />
|
||||
<ClCompile Include="..\CstrikeHLTypeConversion.cpp" />
|
||||
<ClCompile Include="..\CstrikeNatives.cpp" />
|
||||
<ClCompile Include="..\CstrikePlayer.cpp" />
|
||||
<ClCompile Include="..\CstrikeUserMessages.cpp" />
|
||||
|
@ -53,9 +53,6 @@
|
||||
<ClCompile Include="..\..\..\..\public\sdk\amxxmodule.cpp">
|
||||
<Filter>Module SDK\SDK Base</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\CstrikeHLTypeConversion.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\CstrikeUserMessages.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
|
Loading…
Reference in New Issue
Block a user