From 93638c1c04e5460aedd66f38230cd25e6c24fbf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20Erhard=20P=C3=A1l?= Date: Wed, 24 Dec 2025 14:42:42 +0100 Subject: [PATCH] Implement CBasePlayer::HandleSignals Hook --- regamedll/dlls/API/CAPI_Impl.cpp | 1 + regamedll/dlls/API/CAPI_Impl.h | 6 ++++++ regamedll/dlls/player.cpp | 4 +++- regamedll/dlls/player.h | 1 + regamedll/public/regamedll/regamedll_api.h | 5 +++++ 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/regamedll/dlls/API/CAPI_Impl.cpp b/regamedll/dlls/API/CAPI_Impl.cpp index 55da8ae34..71487fcce 100644 --- a/regamedll/dlls/API/CAPI_Impl.cpp +++ b/regamedll/dlls/API/CAPI_Impl.cpp @@ -338,6 +338,7 @@ GAMEHOOK_REGISTRY(CBasePlayer_Observer_Think); GAMEHOOK_REGISTRY(CBasePlayer_RemoveAllItems); GAMEHOOK_REGISTRY(CBasePlayer_UpdateStatusBar); GAMEHOOK_REGISTRY(CBasePlayer_TakeDamageImpulse); +GAMEHOOK_REGISTRY(CBasePlayer_HandleSignals); int CReGameApi::GetMajorVersion() { return REGAMEDLL_API_VERSION_MAJOR; diff --git a/regamedll/dlls/API/CAPI_Impl.h b/regamedll/dlls/API/CAPI_Impl.h index 727fdf9e4..afd8edf79 100644 --- a/regamedll/dlls/API/CAPI_Impl.h +++ b/regamedll/dlls/API/CAPI_Impl.h @@ -757,6 +757,10 @@ typedef IHookChainRegistryClassImpl CReGameHookRegistry_CBase typedef IHookChainClassImpl CReGameHook_CBasePlayer_TakeDamageImpulse; typedef IHookChainRegistryClassImpl CReGameHookRegistry_CBasePlayer_TakeDamageImpulse; +// CBasePlayer::HandleSignals hook +typedef IHookChainClassImpl CReGameHook_CBasePlayer_HandleSignals; +typedef IHookChainRegistryClassImpl CReGameHookRegistry_CBasePlayer_HandleSignals; + class CReGameHookchains: public IReGameHookchains { public: // CBasePlayer virtual @@ -920,6 +924,7 @@ class CReGameHookchains: public IReGameHookchains { CReGameHookRegistry_CBasePlayer_RemoveAllItems m_CBasePlayer_RemoveAllItems; CReGameHookRegistry_CBasePlayer_UpdateStatusBar m_CBasePlayer_UpdateStatusBar; CReGameHookRegistry_CBasePlayer_TakeDamageImpulse m_CBasePlayer_TakeDamageImpulse; + CReGameHookRegistry_CBasePlayer_HandleSignals m_CBasePlayer_HandleSignals; public: virtual IReGameHookRegistry_CBasePlayer_Spawn *CBasePlayer_Spawn(); @@ -1082,6 +1087,7 @@ class CReGameHookchains: public IReGameHookchains { virtual IReGameHookRegistry_CBasePlayer_RemoveAllItems *CBasePlayer_RemoveAllItems(); virtual IReGameHookRegistry_CBasePlayer_UpdateStatusBar *CBasePlayer_UpdateStatusBar(); virtual IReGameHookRegistry_CBasePlayer_TakeDamageImpulse *CBasePlayer_TakeDamageImpulse(); + virtual IReGameHookRegistry_CBasePlayer_HandleSignals *CBasePlayer_HandleSignals(); }; extern CReGameHookchains g_ReGameHookchains; diff --git a/regamedll/dlls/player.cpp b/regamedll/dlls/player.cpp index 5fca4c720..83fc9be3b 100644 --- a/regamedll/dlls/player.cpp +++ b/regamedll/dlls/player.cpp @@ -7066,7 +7066,9 @@ void OLD_CheckRescueZone(CBasePlayer *pPlayer) } } -void CBasePlayer::HandleSignals() +LINK_HOOK_CLASS_VOID_CHAIN2(CBasePlayer, HandleSignals) + +void EXT_FUNC CBasePlayer::__API_HOOK(HandleSignals)() { if (CSGameRules()->IsMultiplayer()) { diff --git a/regamedll/dlls/player.h b/regamedll/dlls/player.h index 78098344f..c65ab54a7 100644 --- a/regamedll/dlls/player.h +++ b/regamedll/dlls/player.h @@ -452,6 +452,7 @@ class CBasePlayer: public CBaseMonster { void RemoveAllItems_OrigFunc(BOOL removeSuit); void UpdateStatusBar_OrigFunc(); void TakeDamageImpulse_OrigFunc(CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier); + void HandleSignals_OrigFunc(); CCSPlayer *CSPlayer() const; #endif // REGAMEDLL_API diff --git a/regamedll/public/regamedll/regamedll_api.h b/regamedll/public/regamedll/regamedll_api.h index fda245bce..8d193a5ea 100644 --- a/regamedll/public/regamedll/regamedll_api.h +++ b/regamedll/public/regamedll/regamedll_api.h @@ -636,6 +636,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() {} @@ -800,6 +804,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 {