Skip to content

Commit 80e9622

Browse files
authored
Merge pull request #1 from JohanCorn/implement-api-hook-for-handle-signals
Implement CBasePlayer::HandleSignals Hook
2 parents 2e80703 + 355d4fc commit 80e9622

6 files changed

Lines changed: 25 additions & 0 deletions

File tree

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -952,6 +952,13 @@ enum GamedllFunc_CBasePlayer
952952
* Params: (const this, attacker, Float:flKnockbackForce, Float:flVelModifier)
953953
*/
954954
RG_CBasePlayer_TakeDamageImpulse,
955+
956+
/*
957+
* Description: Called when signals are handled.
958+
* Return type: void
959+
* Params: (const this)
960+
*/
961+
RG_CBasePlayer_HandleSignals,
955962
};
956963

957964
/**

reapi/include/cssdk/dlls/regamedll_api.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,10 @@ typedef IHookChainRegistryClass<void, class CBasePlayer> IReGameHookRegistry_CBa
638638
typedef IHookChainClass<void, class CBasePlayer, class CBasePlayer *, float, float> IReGameHook_CBasePlayer_TakeDamageImpulse;
639639
typedef IHookChainRegistryClass<void, class CBasePlayer, class CBasePlayer *, float, float> IReGameHookRegistry_CBasePlayer_TakeDamageImpulse;
640640

641+
// CBasePlayer::HandleSignals hook
642+
typedef IHookChainClass<void, class CBasePlayer> IReGameHook_CBasePlayer_HandleSignals;
643+
typedef IHookChainRegistryClass<void, class CBasePlayer> IReGameHookRegistry_CBasePlayer_HandleSignals;
644+
641645
class IReGameHookchains {
642646
public:
643647
virtual ~IReGameHookchains() {}
@@ -802,6 +806,7 @@ class IReGameHookchains {
802806
virtual IReGameHookRegistry_CBasePlayer_RemoveAllItems *CBasePlayer_RemoveAllItems() = 0;
803807
virtual IReGameHookRegistry_CBasePlayer_UpdateStatusBar *CBasePlayer_UpdateStatusBar() = 0;
804808
virtual IReGameHookRegistry_CBasePlayer_TakeDamageImpulse *CBasePlayer_TakeDamageImpulse() = 0;
809+
virtual IReGameHookRegistry_CBasePlayer_HandleSignals *CBasePlayer_HandleSignals() = 0;
805810
};
806811

807812
struct ReGameFuncs_t {

reapi/src/hook_callback.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1786,6 +1786,16 @@ void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *ch
17861786
callVoidForward(RG_CBasePlayer_TakeDamageImpulse, original, indexOfEdict(pthis->pev), indexOfEdict(pAttacker->pev), flKnockbackForce, flVelModifier);
17871787
}
17881788

1789+
void CBasePlayer_HandleSignals(IReGameHook_CBasePlayer_HandleSignals *chain, CBasePlayer *pthis)
1790+
{
1791+
auto original = [chain](int _pthis)
1792+
{
1793+
return chain->callNext(getPrivate<CBasePlayer>(_pthis));
1794+
};
1795+
1796+
callVoidForward(RG_CBasePlayer_HandleSignals, original, indexOfEdict(pthis->pev));
1797+
}
1798+
17891799
/*
17901800
* VTC functions
17911801
*/

reapi/src/hook_callback.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,7 @@ void CBasePlayer_RemoveAllItems(IReGameHook_CBasePlayer_RemoveAllItems *chain, C
576576
void CSGameRules_SendDeathMessage(IReGameHook_CSGameRules_SendDeathMessage *chain, CBaseEntity *pKiller, CBasePlayer *pVictim, CBasePlayer *pAssister, entvars_t *pevInflictor, const char *killerWeaponName, int iDeathMessageFlags, int iRarityOfKill);
577577
void CBasePlayer_UpdateStatusBar(IReGameHook_CBasePlayer_UpdateStatusBar *chain, CBasePlayer *pthis);
578578
void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *chain, CBasePlayer *pthis, CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier);
579+
void CBasePlayer_HandleSignals(IReGameHook_CBasePlayer_HandleSignals *chain, CBasePlayer *pthis);
579580

580581
/*
581582
* VTC functions

reapi/src/hook_list.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ hook_t hooklist_player[] = {
218218
DLL(CBasePlayer_RemoveAllItems),
219219
DLL(CBasePlayer_UpdateStatusBar),
220220
DLL(CBasePlayer_TakeDamageImpulse),
221+
DLL(CBasePlayer_HandleSignals),
221222
};
222223

223224
hook_t hooklist_gamerules[] = {

reapi/src/hook_list.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ enum GamedllFunc_CBasePlayer
242242
RG_CBasePlayer_RemoveAllItems,
243243
RG_CBasePlayer_UpdateStatusBar,
244244
RG_CBasePlayer_TakeDamageImpulse,
245+
RG_CBasePlayer_HandleSignals,
245246

246247
// [...]
247248
};

0 commit comments

Comments
 (0)