From 0c17b6cc340ad3a089bca16fe66915f1da80b180 Mon Sep 17 00:00:00 2001 From: Franco Romaniello Date: Tue, 31 Aug 2021 04:36:57 -0300 Subject: [PATCH 1/6] Implement Observer_FindNextPlayer Hook --- .../amxmodx/scripting/include/reapi_gamedll_const.inc | 6 ++++++ reapi/include/cssdk/dlls/regamedll_api.h | 7 ++++++- 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(+), 1 deletion(-) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc index d31c51c0..0ef350bd 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc @@ -627,6 +627,12 @@ enum GamedllFunc_CBasePlayer */ RG_CBasePlayer_Observer_IsValidTarget, + /* + * Description: - + * Params: (const this, bool bReverse, name[]) + */ + RG_CBasePlayer_Observer_FindNextPlayer, + /* * Description: - * Params: (const this, PLAYER_ANIM:playerAnim) diff --git a/reapi/include/cssdk/dlls/regamedll_api.h b/reapi/include/cssdk/dlls/regamedll_api.h index a3597c89..1ae2663a 100644 --- a/reapi/include/cssdk/dlls/regamedll_api.h +++ b/reapi/include/cssdk/dlls/regamedll_api.h @@ -39,7 +39,7 @@ #include #define REGAMEDLL_API_VERSION_MAJOR 5 -#define REGAMEDLL_API_VERSION_MINOR 20 +#define REGAMEDLL_API_VERSION_MINOR 22 // CBasePlayer::Spawn hook typedef IHookChainClass IReGameHook_CBasePlayer_Spawn; @@ -133,6 +133,10 @@ typedef IHookChainRegistryClass IReGameHook_CBasePlayer_Observer_IsValidTarget; typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_Observer_IsValidTarget; +// CBasePlayer::Observer_FindNextPlayer hook +typedef IHookChainClass IReGameHook_CBasePlayer_Observer_FindNextPlayer; +typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_Observer_FindNextPlayer; + // CBasePlayer::SetAnimation hook typedef IHookChainClass IReGameHook_CBasePlayer_SetAnimation; typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_SetAnimation; @@ -531,6 +535,7 @@ class IReGameHookchains { virtual IReGameHookRegistry_CBasePlayer_Blind *CBasePlayer_Blind() = 0; virtual IReGameHookRegistry_CBasePlayer_Observer_IsValidTarget *CBasePlayer_Observer_IsValidTarget() = 0; + virtual IReGameHookRegistry_CBasePlayer_Observer_FindNextPlayer* CBasePlayer_Observer_FindNextPlayer() = 0; virtual IReGameHookRegistry_CBasePlayer_SetAnimation *CBasePlayer_SetAnimation() = 0; virtual IReGameHookRegistry_CBasePlayer_GiveDefaultItems *CBasePlayer_GiveDefaultItems() = 0; virtual IReGameHookRegistry_CBasePlayer_GiveNamedItem *CBasePlayer_GiveNamedItem() = 0; diff --git a/reapi/src/hook_callback.cpp b/reapi/src/hook_callback.cpp index 1307ffb9..b2136060 100644 --- a/reapi/src/hook_callback.cpp +++ b/reapi/src/hook_callback.cpp @@ -298,6 +298,16 @@ CBasePlayer *CBasePlayer_Observer_IsValidTarget(IReGameHook_CBasePlayer_Observer return getPrivate(callForward(RG_CBasePlayer_Observer_IsValidTarget, original, indexOfEdict(pthis->pev), iPlayerIndex, bSameTeam)); } +void CBasePlayer_Observer_FindNextPlayer(IReGameHook_CBasePlayer_Observer_FindNextPlayer *chain, CBasePlayer *pthis, bool bReverse, const char *name) +{ + auto original = [chain](int _pthis, bool _bReverse, const char *_name) + { + chain->callNext(getPrivate(_pthis), _bReverse, _name); + }; + + callVoidForward(RG_CBasePlayer_Observer_FindNextPlayer, original, indexOfEdict(pthis->pev), bReverse, name); +} + void CBasePlayer_SetAnimation(IReGameHook_CBasePlayer_SetAnimation *chain, CBasePlayer *pthis, PLAYER_ANIM playerAnim) { auto original = [chain](int _pthis, PLAYER_ANIM _playerAnim) diff --git a/reapi/src/hook_callback.h b/reapi/src/hook_callback.h index 32e11827..95944d7a 100644 --- a/reapi/src/hook_callback.h +++ b/reapi/src/hook_callback.h @@ -402,6 +402,7 @@ void CBasePlayer_RoundRespawn(IReGameHook_CBasePlayer_RoundRespawn *chain, CBase void CBasePlayer_Blind(IReGameHook_CBasePlayer_Blind *chain, CBasePlayer *pthis, float flUntilTime, float flHoldTime, float flFadeTime, int iAlpha); CBasePlayer *CBasePlayer_Observer_IsValidTarget(IReGameHook_CBasePlayer_Observer_IsValidTarget *chain, CBasePlayer *pthis, int iPlayerIndex, bool bSameTeam); +void CBasePlayer_Observer_FindNextPlayer(IReGameHook_CBasePlayer_Observer_FindNextPlayer *chain, CBasePlayer *pthis, bool bReverse, const char *name); void CBasePlayer_SetAnimation(IReGameHook_CBasePlayer_SetAnimation *chain, CBasePlayer *pthis, PLAYER_ANIM playerAnim); void CBasePlayer_GiveDefaultItems(IReGameHook_CBasePlayer_GiveDefaultItems *chain, CBasePlayer *pthis); CBaseEntity *CBasePlayer_GiveNamedItem(IReGameHook_CBasePlayer_GiveNamedItem *chain, CBasePlayer *pthis, const char *pszName); diff --git a/reapi/src/hook_list.cpp b/reapi/src/hook_list.cpp index ffbbe881..86f35246 100644 --- a/reapi/src/hook_list.cpp +++ b/reapi/src/hook_list.cpp @@ -143,6 +143,7 @@ hook_t hooklist_player[] = { DLL(CBasePlayer_SetClientUserInfoName), DLL(CBasePlayer_Observer_IsValidTarget), + DLL(CBasePlayer_Observer_FindNextPlayer), DLL(CBasePlayer_SetAnimation), DLL(CBasePlayer_GiveDefaultItems), DLL(CBasePlayer_GiveNamedItem), diff --git a/reapi/src/hook_list.h b/reapi/src/hook_list.h index 0e4841ff..3b303dd2 100644 --- a/reapi/src/hook_list.h +++ b/reapi/src/hook_list.h @@ -167,6 +167,7 @@ enum GamedllFunc_CBasePlayer RG_CBasePlayer_SetClientUserInfoModel, RG_CBasePlayer_SetClientUserInfoName, RG_CBasePlayer_Observer_IsValidTarget, + RG_CBasePlayer_Observer_FindNextPlayer, RG_CBasePlayer_SetAnimation, RG_CBasePlayer_GiveDefaultItems, RG_CBasePlayer_GiveNamedItem, From 5bfa4ce394b5d661b36e82daa91aab74cfde1d07 Mon Sep 17 00:00:00 2001 From: Sergey Shorokhov Date: Thu, 2 Sep 2021 18:30:08 +0300 Subject: [PATCH 2/6] Update regamedll_api.h --- reapi/include/cssdk/dlls/regamedll_api.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/reapi/include/cssdk/dlls/regamedll_api.h b/reapi/include/cssdk/dlls/regamedll_api.h index c904b388..541b9182 100644 --- a/reapi/include/cssdk/dlls/regamedll_api.h +++ b/reapi/include/cssdk/dlls/regamedll_api.h @@ -133,10 +133,6 @@ typedef IHookChainRegistryClass IReGameHook_CBasePlayer_Observer_IsValidTarget; typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_Observer_IsValidTarget; -// CBasePlayer::Observer_FindNextPlayer hook -typedef IHookChainClass IReGameHook_CBasePlayer_Observer_FindNextPlayer; -typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_Observer_FindNextPlayer; - // CBasePlayer::SetAnimation hook typedef IHookChainClass IReGameHook_CBasePlayer_SetAnimation; typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_SetAnimation; @@ -509,6 +505,10 @@ typedef IHookChainRegistryClass IReGameHook_CBasePlayer_Observer_SetMode; typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_Observer_SetMode; +// CBasePlayer::Observer_FindNextPlayer hook +typedef IHookChainClass IReGameHook_CBasePlayer_Observer_FindNextPlayer; +typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_Observer_FindNextPlayer; + // CBasePlayer::Pain hook typedef IHookChainClass IReGameHook_CBasePlayer_Pain; typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_Pain; @@ -550,7 +550,6 @@ class IReGameHookchains { virtual IReGameHookRegistry_CBasePlayer_Blind *CBasePlayer_Blind() = 0; virtual IReGameHookRegistry_CBasePlayer_Observer_IsValidTarget *CBasePlayer_Observer_IsValidTarget() = 0; - virtual IReGameHookRegistry_CBasePlayer_Observer_FindNextPlayer* CBasePlayer_Observer_FindNextPlayer() = 0; virtual IReGameHookRegistry_CBasePlayer_SetAnimation *CBasePlayer_SetAnimation() = 0; virtual IReGameHookRegistry_CBasePlayer_GiveDefaultItems *CBasePlayer_GiveDefaultItems() = 0; virtual IReGameHookRegistry_CBasePlayer_GiveNamedItem *CBasePlayer_GiveNamedItem() = 0; @@ -650,7 +649,8 @@ class IReGameHookchains { virtual IReGameHookRegistry_CBaseEntity_FireBullets3 *CBaseEntity_FireBullets3() = 0; virtual IReGameHookRegistry_CBasePlayer_Observer_SetMode *CBasePlayer_Observer_SetMode() = 0; - + virtual IReGameHookRegistry_CBasePlayer_Observer_FindNextPlayer *CBasePlayer_Observer_FindNextPlayer() = 0; + virtual IReGameHookRegistry_CBasePlayer_Pain *CBasePlayer_Pain() = 0; virtual IReGameHookRegistry_CBasePlayer_DeathSound *CBasePlayer_DeathSound() = 0; virtual IReGameHookRegistry_CBasePlayer_JoiningThink *CBasePlayer_JoiningThink() = 0; From 0cc17c3bb9b9c0ec3da9f821e69eba53f837380d Mon Sep 17 00:00:00 2001 From: Sergey Shorokhov Date: Thu, 2 Sep 2021 18:38:40 +0300 Subject: [PATCH 3/6] fix order for Vfuncs --- .../scripting/include/reapi_gamedll_const.inc | 14 +++++++------- reapi/src/hook_list.cpp | 2 +- reapi/src/hook_list.h | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc index 21c0c8f5..3e85667d 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc @@ -628,12 +628,6 @@ enum GamedllFunc_CBasePlayer */ RG_CBasePlayer_Observer_IsValidTarget, - /* - * Description: - - * Params: (const this, bool bReverse, name[]) - */ - RG_CBasePlayer_Observer_FindNextPlayer, - /* * Description: - * Params: (const this, PLAYER_ANIM:playerAnim) @@ -797,7 +791,13 @@ enum GamedllFunc_CBasePlayer * Params: (const this, iMode) */ RG_CBasePlayer_Observer_SetMode, - + + /* + * Description: - + * Params: (const this, bool bReverse, name[]) + */ + RG_CBasePlayer_Observer_FindNextPlayer, + /* * Description: Called when a client emits a "pain sound" after received damage. * Return type: void diff --git a/reapi/src/hook_list.cpp b/reapi/src/hook_list.cpp index c5b52b0a..bf52208d 100644 --- a/reapi/src/hook_list.cpp +++ b/reapi/src/hook_list.cpp @@ -143,7 +143,6 @@ hook_t hooklist_player[] = { DLL(CBasePlayer_SetClientUserInfoName), DLL(CBasePlayer_Observer_IsValidTarget), - DLL(CBasePlayer_Observer_FindNextPlayer), DLL(CBasePlayer_SetAnimation), DLL(CBasePlayer_GiveDefaultItems), DLL(CBasePlayer_GiveNamedItem), @@ -170,6 +169,7 @@ hook_t hooklist_player[] = { DLL(CBasePlayer_DropIdlePlayer), DLL(CBasePlayer_Observer_SetMode), + DLL(CBasePlayer_Observer_FindNextPlayer), DLL(CBasePlayer_Pain), DLL(CBasePlayer_DeathSound), diff --git a/reapi/src/hook_list.h b/reapi/src/hook_list.h index 317ea7c1..c95cd47a 100644 --- a/reapi/src/hook_list.h +++ b/reapi/src/hook_list.h @@ -167,7 +167,6 @@ enum GamedllFunc_CBasePlayer RG_CBasePlayer_SetClientUserInfoModel, RG_CBasePlayer_SetClientUserInfoName, RG_CBasePlayer_Observer_IsValidTarget, - RG_CBasePlayer_Observer_FindNextPlayer, RG_CBasePlayer_SetAnimation, RG_CBasePlayer_GiveDefaultItems, RG_CBasePlayer_GiveNamedItem, @@ -195,6 +194,7 @@ enum GamedllFunc_CBasePlayer RG_CBasePlayer_DropIdlePlayer, RG_CBasePlayer_Observer_SetMode, + RG_CBasePlayer_Observer_FindNextPlayer, RG_CBasePlayer_Pain, RG_CBasePlayer_DeathSound, From 1308a874f1b30224f0b8dc5a32cc21b2a572280c Mon Sep 17 00:00:00 2001 From: Sergey Shorokhov Date: Thu, 2 Sep 2021 18:39:21 +0300 Subject: [PATCH 4/6] Add description in reapi_gamedll_const.inc --- reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc index 3e85667d..2802f071 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc @@ -793,7 +793,7 @@ enum GamedllFunc_CBasePlayer RG_CBasePlayer_Observer_SetMode, /* - * Description: - + * Description: Called when a client attempt to find the next observer. * Params: (const this, bool bReverse, name[]) */ RG_CBasePlayer_Observer_FindNextPlayer, From aa52b3e7b0e470720b2736372232b316a6fbcaa4 Mon Sep 17 00:00:00 2001 From: Sergey Shorokhov Date: Thu, 2 Sep 2021 18:42:35 +0300 Subject: [PATCH 5/6] add macro for suppress warning: 200 on amxmodx 1.8.2 --- reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc index 2802f071..06d9351c 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc @@ -38,6 +38,7 @@ #define RG_CBasePlayerWeapon_DefaultReload RG_CBaseWeapon_DefReload #define RG_CBasePlayerWeapon_DefaultShotgunReload RG_CBaseWeapon_DefShotgunReload #define RG_CBasePlayer_Observer_SetMode RG_CBasePlayer_Observer_SetMod + #define RG_CBasePlayer_Observer_FindNextPlayer RG_CBasePlayer_Observer_FindNxt #endif /** From fb30df0d6b31b654663f7644de187e8fbb121ec6 Mon Sep 17 00:00:00 2001 From: Sergey Shorokhov Date: Thu, 2 Sep 2021 18:44:47 +0300 Subject: [PATCH 6/6] Add return type for hook description --- reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc index 06d9351c..bfee811b 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc @@ -795,6 +795,7 @@ enum GamedllFunc_CBasePlayer /* * Description: Called when a client attempt to find the next observer. + * Return type: void * Params: (const this, bool bReverse, name[]) */ RG_CBasePlayer_Observer_FindNextPlayer,