Skip to content

Commit 25bdd34

Browse files
committed
Add new natives RG_CBasePlayerItem_Materialize, RG_CBasePlayerItem_CheckRespawn
1 parent 8f9e7c1 commit 25bdd34

7 files changed

Lines changed: 79 additions & 1 deletion

File tree

reapi/extra/amxmodx/scripting/include/reapi.inc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ enum hooks_tables_e
2626
ht_weapon,
2727
ht_gib,
2828
ht_cbaseentity,
29-
ht_botmanager
29+
ht_botmanager,
30+
ht_cbaseplayeritem
3031
};
3132

3233
enum members_tables_e

reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -942,6 +942,24 @@ enum GamedllFunc_CBasePlayer
942942
RG_CBasePlayer_RemoveAllItems,
943943
};
944944

945+
/**
946+
* GamedllFunc CBasePlayerItem
947+
*/
948+
enum GamedllFunc_CBasePlayerItem
949+
{
950+
/*
951+
* Description: -
952+
* Params: (const this)
953+
*/
954+
RG_CBasePlayerItem_Materialize = BEGIN_FUNC_REGION(cbaseplayeritem),
955+
956+
/*
957+
* Description: -
958+
* Params: (const this)
959+
*/
960+
RG_CBasePlayerItem_CheckRespawn,
961+
}
962+
945963
/**
946964
* GamedllFunc CBasePlayer
947965
*/

reapi/include/cssdk/dlls/regamedll_api.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,15 @@ typedef IHookChainRegistryClass<void, class CBasePlayer> IReGameHookRegistry_CBa
630630
typedef IHookChainClass<void, class CBasePlayer, BOOL> IReGameHook_CBasePlayer_RemoveAllItems;
631631
typedef IHookChainRegistryClass<void, class CBasePlayer, BOOL> IReGameHookRegistry_CBasePlayer_RemoveAllItems;
632632

633+
// CBasePlayerItem::Materialize hook
634+
typedef IHookChainClass<void, class CBasePlayerItem> IReGameHook_CBasePlayerItem_Materialize;
635+
typedef IHookChainRegistryClass<void, class CBasePlayerItem> IReGameHookRegistry_CBasePlayerItem_Materialize;
636+
637+
// CBasePlayerItem::CheckRespawn hook
638+
typedef IHookChainClass<void, class CBasePlayerItem> IReGameHook_CBasePlayerItem_CheckRespawn;
639+
typedef IHookChainRegistryClass<void, class CBasePlayerItem> IReGameHookRegistry_CBasePlayerItem_CheckRespawn;
640+
641+
633642
class IReGameHookchains {
634643
public:
635644
virtual ~IReGameHookchains() {}
@@ -792,6 +801,9 @@ class IReGameHookchains {
792801
virtual IReGameHookRegistry_CBasePlayer_PlayerDeathThink *CBasePlayer_PlayerDeathThink() = 0;
793802
virtual IReGameHookRegistry_CBasePlayer_Observer_Think *CBasePlayer_Observer_Think() = 0;
794803
virtual IReGameHookRegistry_CBasePlayer_RemoveAllItems *CBasePlayer_RemoveAllItems() = 0;
804+
805+
virtual IReGameHookRegistry_CBasePlayerItem_Materialize *CBasePlayerItem_Materialize() = 0;
806+
virtual IReGameHookRegistry_CBasePlayerItem_CheckRespawn *CBasePlayerItem_CheckRespawn() = 0;
795807
};
796808

797809
struct ReGameFuncs_t {

reapi/src/hook_callback.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1766,6 +1766,28 @@ void CSGameRules_SendDeathMessage(IReGameHook_CSGameRules_SendDeathMessage *chai
17661766
callVoidForward(RG_CSGameRules_SendDeathMessage, original, indexOfPDataAmx(pKiller), indexOfEdict(pVictim->pev), indexOfPDataAmx(pAssister), indexOfEdictAmx(pevInflictor), killerWeaponName, iDeathMessageFlags, iRarityOfKill);
17671767
}
17681768

1769+
void CBasePlayerItem_Materialize(IReGameHook_CBasePlayerItem_Materialize *chain, CBasePlayerItem *pthis)
1770+
{
1771+
auto original = [chain](int _pthis)
1772+
{
1773+
chain->callNext(getPrivate<CBasePlayerItem>(_pthis));
1774+
};
1775+
1776+
callVoidForward(RG_CBasePlayerItem_Materialize, original, indexOfEdict(pthis->pev));
1777+
}
1778+
1779+
1780+
void CBasePlayerItem_CheckRespawn(IReGameHook_CBasePlayerItem_CheckRespawn *chain, CBasePlayerItem *pthis)
1781+
{
1782+
auto original = [chain](int _pthis)
1783+
{
1784+
chain->callNext(getPrivate<CBasePlayerItem>(_pthis));
1785+
};
1786+
1787+
callVoidForward(RG_CBasePlayerItem_CheckRespawn, original, indexOfEdict(pthis->pev));
1788+
}
1789+
1790+
17691791
/*
17701792
* VTC functions
17711793
*/

reapi/src/hook_callback.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,8 @@ void CBasePlayer_PlayerDeathThink(IReGameHook_CBasePlayer_PlayerDeathThink *chai
566566
void CBasePlayer_Observer_Think(IReGameHook_CBasePlayer_Observer_Think *chain, CBasePlayer *pthis);
567567
void CBasePlayer_RemoveAllItems(IReGameHook_CBasePlayer_RemoveAllItems *chain, CBasePlayer *pthis, BOOL removeSuit);
568568
void CSGameRules_SendDeathMessage(IReGameHook_CSGameRules_SendDeathMessage *chain, CBaseEntity *pKiller, CBasePlayer *pVictim, CBasePlayer *pAssister, entvars_t *pevInflictor, const char *killerWeaponName, int iDeathMessageFlags, int iRarityOfKill);
569+
void CBasePlayerItem_Materialize(IReGameHook_CBasePlayerItem_Materialize *chain, CBasePlayerItem *pthis);
570+
void CBasePlayerItem_CheckRespawn(IReGameHook_CBasePlayerItem_CheckRespawn *chain, CBasePlayerItem *pthis);
569571

570572
/*
571573
* VTC functions

reapi/src/hook_list.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ hook_t hooklist_player[] = {
216216
DLL(CBasePlayer_PlayerDeathThink),
217217
DLL(CBasePlayer_Observer_Think),
218218
DLL(CBasePlayer_RemoveAllItems),
219+
219220
};
220221

221222
hook_t hooklist_gamerules[] = {
@@ -289,6 +290,14 @@ hook_t hooklist_botmanager[] = {
289290
DLL(CBotManager_OnEvent),
290291
};
291292

293+
hook_t hooklist_cbaseplayeritem[] = {
294+
DLL(CBasePlayerItem_Materialize),
295+
DLL(CBasePlayerItem_CheckRespawn),
296+
};
297+
298+
299+
300+
292301
#define RCHECK(h,...) { {}, {}, #h, "ReChecker", [](){ return api_cfg.hasRechecker(); }, ((!(RC_##h & (MAX_REGION_RANGE - 1)) ? regfunc::current_cell = 1, true : false) || (RC_##h & (MAX_REGION_RANGE - 1)) == regfunc::current_cell++) ? regfunc(h##__VA_ARGS__) : regfunc(#h#__VA_ARGS__), [](){ g_RecheckerHookchains->h()->registerHook(&h); }, [](){ g_RecheckerHookchains->h()->unregisterHook(&h); }, false}
293302
hook_t hooklist_rechecker[] = {
294303
RCHECK(FileConsistencyProcess, _AMXX),
@@ -316,6 +325,7 @@ hook_t* hooklist_t::getHookSafe(size_t hook)
316325
CASE(gib)
317326
CASE(cbaseentity)
318327
CASE(botmanager)
328+
CASE(cbaseplayeritem)
319329
}
320330

321331
return nullptr;
@@ -337,6 +347,7 @@ void hooklist_t::clear()
337347
FOREACH_CLEAR(gib);
338348
FOREACH_CLEAR(cbaseentity);
339349
FOREACH_CLEAR(botmanager);
350+
FOREACH_CLEAR(cbaseplayeritem);
340351
}
341352

342353
void hook_t::clear()

reapi/src/hook_list.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ extern hook_t hooklist_weapon[];
3939
extern hook_t hooklist_gib[];
4040
extern hook_t hooklist_cbaseentity[];
4141
extern hook_t hooklist_botmanager[];
42+
extern hook_t hooklist_cbaseplayeritem[];
4243

4344
enum
4445
{
@@ -67,6 +68,7 @@ struct hooklist_t
6768
CASE(gib)
6869
CASE(cbaseentity)
6970
CASE(botmanager)
71+
CASE(cbaseplayeritem)
7072
}
7173

7274
#undef CASE
@@ -91,6 +93,7 @@ struct hooklist_t
9193
ht_gib,
9294
ht_cbaseentity,
9395
ht_botmanager,
96+
ht_cbaseplayeritem,
9497
};
9598
};
9699

@@ -345,3 +348,12 @@ enum ReCheckerFunc
345348

346349
// [...]
347350
};
351+
352+
353+
enum GamedllFunc_CBasePlayerItem
354+
{
355+
RG_CBasePlayerItem_Materialize = BEGIN_FUNC_REGION(cbaseplayeritem),
356+
RG_CBasePlayerItem_CheckRespawn,
357+
358+
// [...]
359+
};

0 commit comments

Comments
 (0)