From 355d4fc90d0d2fda0430aa036a4428630bca8524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Erhard=20P=C3=A1l?= Date: Wed, 24 Dec 2025 15:20:54 +0100 Subject: [PATCH] Implement CBasePlayer::HandleSignals Hook --- .../amxmodx/scripting/include/reapi_gamedll_const.inc | 7 +++++++ reapi/include/cssdk/dlls/regamedll_api.h | 5 +++++ reapi/src/hook_callback.cpp | 10 ++++++++++ reapi/src/hook_callback.h | 1 + reapi/src/hook_list.cpp | 1 + reapi/src/hook_list.h | 1 + 6 files changed, 25 insertions(+) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc index 03621e61..af4bb11d 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc @@ -952,6 +952,13 @@ enum GamedllFunc_CBasePlayer * Params: (const this, attacker, Float:flKnockbackForce, Float:flVelModifier) */ RG_CBasePlayer_TakeDamageImpulse, + + /* + * Description: Called when signals are handled. + * Return type: void + * Params: (const this) + */ + RG_CBasePlayer_HandleSignals, }; /** diff --git a/reapi/include/cssdk/dlls/regamedll_api.h b/reapi/include/cssdk/dlls/regamedll_api.h index 62273fe6..e8f5beb3 100644 --- a/reapi/include/cssdk/dlls/regamedll_api.h +++ b/reapi/include/cssdk/dlls/regamedll_api.h @@ -638,6 +638,10 @@ typedef IHookChainRegistryClass IReGameHookRegistry_CBa typedef IHookChainClass IReGameHook_CBasePlayer_TakeDamageImpulse; typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_TakeDamageImpulse; +// CBasePlayer::HandleSignals hook +typedef IHookChainClass IReGameHook_CBasePlayer_HandleSignals; +typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_HandleSignals; + class IReGameHookchains { public: virtual ~IReGameHookchains() {} @@ -802,6 +806,7 @@ class IReGameHookchains { virtual IReGameHookRegistry_CBasePlayer_RemoveAllItems *CBasePlayer_RemoveAllItems() = 0; virtual IReGameHookRegistry_CBasePlayer_UpdateStatusBar *CBasePlayer_UpdateStatusBar() = 0; virtual IReGameHookRegistry_CBasePlayer_TakeDamageImpulse *CBasePlayer_TakeDamageImpulse() = 0; + virtual IReGameHookRegistry_CBasePlayer_HandleSignals *CBasePlayer_HandleSignals() = 0; }; struct ReGameFuncs_t { diff --git a/reapi/src/hook_callback.cpp b/reapi/src/hook_callback.cpp index 7d03f922..fa93813f 100644 --- a/reapi/src/hook_callback.cpp +++ b/reapi/src/hook_callback.cpp @@ -1786,6 +1786,16 @@ void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *ch callVoidForward(RG_CBasePlayer_TakeDamageImpulse, original, indexOfEdict(pthis->pev), indexOfEdict(pAttacker->pev), flKnockbackForce, flVelModifier); } +void CBasePlayer_HandleSignals(IReGameHook_CBasePlayer_HandleSignals *chain, CBasePlayer *pthis) +{ + auto original = [chain](int _pthis) + { + return chain->callNext(getPrivate(_pthis)); + }; + + callVoidForward(RG_CBasePlayer_HandleSignals, original, indexOfEdict(pthis->pev)); +} + /* * VTC functions */ diff --git a/reapi/src/hook_callback.h b/reapi/src/hook_callback.h index 1065997a..f3baf107 100644 --- a/reapi/src/hook_callback.h +++ b/reapi/src/hook_callback.h @@ -576,6 +576,7 @@ void CBasePlayer_RemoveAllItems(IReGameHook_CBasePlayer_RemoveAllItems *chain, C void CSGameRules_SendDeathMessage(IReGameHook_CSGameRules_SendDeathMessage *chain, CBaseEntity *pKiller, CBasePlayer *pVictim, CBasePlayer *pAssister, entvars_t *pevInflictor, const char *killerWeaponName, int iDeathMessageFlags, int iRarityOfKill); void CBasePlayer_UpdateStatusBar(IReGameHook_CBasePlayer_UpdateStatusBar *chain, CBasePlayer *pthis); void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *chain, CBasePlayer *pthis, CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier); +void CBasePlayer_HandleSignals(IReGameHook_CBasePlayer_HandleSignals *chain, CBasePlayer *pthis); /* * VTC functions diff --git a/reapi/src/hook_list.cpp b/reapi/src/hook_list.cpp index cb8bd17e..928070db 100644 --- a/reapi/src/hook_list.cpp +++ b/reapi/src/hook_list.cpp @@ -218,6 +218,7 @@ hook_t hooklist_player[] = { DLL(CBasePlayer_RemoveAllItems), DLL(CBasePlayer_UpdateStatusBar), DLL(CBasePlayer_TakeDamageImpulse), + DLL(CBasePlayer_HandleSignals), }; hook_t hooklist_gamerules[] = { diff --git a/reapi/src/hook_list.h b/reapi/src/hook_list.h index 1cdb7bb4..adc1817b 100644 --- a/reapi/src/hook_list.h +++ b/reapi/src/hook_list.h @@ -242,6 +242,7 @@ enum GamedllFunc_CBasePlayer RG_CBasePlayer_RemoveAllItems, RG_CBasePlayer_UpdateStatusBar, RG_CBasePlayer_TakeDamageImpulse, + RG_CBasePlayer_HandleSignals, // [...] };