diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc index 8cc322b4..5d302f77 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc @@ -958,6 +958,13 @@ enum GamedllFunc_CBasePlayer * Params: (const this, attacker, Float:flKnockbackForce, Float:flVelModifier) */ RG_CBasePlayer_TakeDamageImpulse, + + /* + * Description: Called to update the player's zone signals (buy, bomb, rescue, escape and VIP safety zones). + * Normally runs at most once per 0.5 seconds for each player. + * 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 8222d68b..8a2a6cc6 100644 --- a/reapi/include/cssdk/dlls/regamedll_api.h +++ b/reapi/include/cssdk/dlls/regamedll_api.h @@ -642,6 +642,10 @@ typedef IHookChainRegistryClass IReGameHook_SendSayMessage; typedef IHookChainRegistry IReGameHookRegistry_SendSayMessage; +// CBasePlayer::HandleSignals hook +typedef IHookChainClass IReGameHook_CBasePlayer_HandleSignals; +typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_HandleSignals; + class IReGameHookchains { public: virtual ~IReGameHookchains() {} @@ -809,6 +813,8 @@ class IReGameHookchains { virtual IReGameHookRegistry_CBasePlayer_TakeDamageImpulse *CBasePlayer_TakeDamageImpulse() = 0; virtual IReGameHookRegistry_SendSayMessage *SendSayMessage() = 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 ea1267d1..cf8a7564 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) + { + chain->callNext(getPrivate(_pthis)); + }; + + callVoidForward(RG_CBasePlayer_HandleSignals, original, indexOfEdict(pthis->pev)); +} + void SendSayMessage(IReGameHook_SendSayMessage *chain, CBasePlayer *pPlayer, const char *pszCmd, BOOL teamonly, const char *pszText, const char *pszFormat, const char *pszConsoleFormat, bool bSenderDead, const char *placeName, bool consoleUsesPlaceName) { auto original = [chain](int _pPlayer, const char *_pszCmd, BOOL _teamonly, const char *_pszText, const char *_pszFormat, const char *_pszConsoleFormat, bool _bSenderDead, const char *_placeName, bool _consoleUsesPlaceName) diff --git a/reapi/src/hook_callback.h b/reapi/src/hook_callback.h index b3ee499f..123109c8 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); void SendSayMessage(IReGameHook_SendSayMessage *chain, CBasePlayer *pPlayer, const char *pszCmd, BOOL teamonly, const char *pszText, const char *pszFormat, const char *pszConsoleFormat, bool bSenderDead, const char *placeName, bool consoleUsesPlaceName); /* diff --git a/reapi/src/hook_list.cpp b/reapi/src/hook_list.cpp index 0e019026..59cdc538 100644 --- a/reapi/src/hook_list.cpp +++ b/reapi/src/hook_list.cpp @@ -219,6 +219,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 cb469f1c..5a0d2df3 100644 --- a/reapi/src/hook_list.h +++ b/reapi/src/hook_list.h @@ -243,6 +243,7 @@ enum GamedllFunc_CBasePlayer RG_CBasePlayer_RemoveAllItems, RG_CBasePlayer_UpdateStatusBar, RG_CBasePlayer_TakeDamageImpulse, + RG_CBasePlayer_HandleSignals, // [...] };