From 3085ce7173c70e21081bb50786f4e132f17be08c Mon Sep 17 00:00:00 2001 From: ShadowsAdi <54354938+ShadowsAdi@users.noreply.github.com> Date: Sun, 20 Mar 2022 21:49:32 +0200 Subject: [PATCH 1/4] `API`: Implement `RG_PM_LadderMove` hook Related to https://github.com/s1lentq/reapi/issues/82 --- .../scripting/include/reapi_gamedll_const.inc | 6 ++++++ reapi/include/cssdk/dlls/regamedll_api.h | 6 ++++++ reapi/src/hook_callback.cpp | 17 +++++++++++++++++ reapi/src/hook_callback.h | 12 ++++++++++++ reapi/src/hook_list.cpp | 1 + reapi/src/hook_list.h | 2 ++ 6 files changed, 44 insertions(+) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc index 5265f7ed..f9e1616a 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc @@ -400,6 +400,12 @@ enum GamedllFunc * Params: (pevVictim, cGibs, human) */ RG_SpawnRandomGibs, + + /* + * Description: Called when a player is on a ladder. + * Params: (const playerIndex) + */ + RG_PM_LadderMove, }; /** diff --git a/reapi/include/cssdk/dlls/regamedll_api.h b/reapi/include/cssdk/dlls/regamedll_api.h index 53a6d661..7a9f2386 100644 --- a/reapi/include/cssdk/dlls/regamedll_api.h +++ b/reapi/include/cssdk/dlls/regamedll_api.h @@ -237,6 +237,10 @@ typedef IHookChainRegistry IReGameHookRegistry typedef IHookChain IReGameHook_PM_AirMove; typedef IHookChainRegistry IReGameHookRegistry_PM_AirMove; +// PM_LadderMove hook +typedef IHookChain IReGameHook_PM_LadderMove; +typedef IHookChainRegistry IReGameHookRegistry_PM_LadderMove; + // HandleMenu_ChooseAppearance hook typedef IHookChain IReGameHook_HandleMenu_ChooseAppearance; typedef IHookChainRegistry IReGameHookRegistry_HandleMenu_ChooseAppearance; @@ -654,6 +658,8 @@ class IReGameHookchains { virtual IReGameHookRegistry_CBasePlayer_Pain *CBasePlayer_Pain() = 0; virtual IReGameHookRegistry_CBasePlayer_DeathSound *CBasePlayer_DeathSound() = 0; virtual IReGameHookRegistry_CBasePlayer_JoiningThink *CBasePlayer_JoiningThink() = 0; + + virtual IReGameHookRegistry_PM_LadderMove *PM_LadderMove() = 0; }; struct ReGameFuncs_t { diff --git a/reapi/src/hook_callback.cpp b/reapi/src/hook_callback.cpp index 78b3a5c4..c316ab75 100644 --- a/reapi/src/hook_callback.cpp +++ b/reapi/src/hook_callback.cpp @@ -803,6 +803,23 @@ void PM_AirMove(IReGameHook_PM_AirMove *chain, int playerIndex) callVoidForward(RG_PM_AirMove, original, playerIndex); } +void PM_LadderMove_AMXX(Phys_T *data, int playerIndex) +{ + auto original = [data](int _playerIndex) + { + data->m_chain->callNext(data->m_args.pLadder); + }; + + callVoidForward(RG_PM_LadderMove, original, playerIndex); +} + +void PM_LadderMove(IReGameHook_PM_LadderMove *chain, physent_t *pLadder) +{ + PM_LadderMove_args_t args(pLadder); + Phys_T data(chain, args); + PM_LadderMove_AMXX(&data, pLadder-> player + 1); +} + BOOL CSGameRules_FShouldSwitchWeapon(IReGameHook_CSGameRules_FShouldSwitchWeapon *chain, CBasePlayer *pPlayer, CBasePlayerItem *pWeapon) { auto original = [chain](int _pPlayer, int _pWeapon) diff --git a/reapi/src/hook_callback.h b/reapi/src/hook_callback.h index 9925b729..d140a368 100644 --- a/reapi/src/hook_callback.h +++ b/reapi/src/hook_callback.h @@ -383,6 +383,18 @@ void PM_Move_AMXX(Move_t *data, int playerIndex); void PM_Move(IReGameHook_PM_Move *chain, playermove_t *ppmove, int server); void PM_AirMove(IReGameHook_PM_AirMove *chain, int playerIndex); + +struct PM_LadderMove_args_t +{ + PM_LadderMove_args_t(physent_t* _ladder) : pLadder(_ladder) {} + + physent_t *pLadder; +}; + +using Phys_T = hookdata_t; +void PM_LadderMove_AMXX(Phys_T *data); +void PM_LadderMove(IReGameHook_PM_LadderMove *chain, physent_t *pLadder); + void HandleMenu_ChooseAppearance(IReGameHook_HandleMenu_ChooseAppearance *chain, CBasePlayer *pPlayer, int slot); BOOL HandleMenu_ChooseTeam(IReGameHook_HandleMenu_ChooseTeam *chain, CBasePlayer *pPlayer, int slot); void ShowMenu(IReGameHook_ShowMenu *chain, CBasePlayer *pPlayer, int bitsValidSlots, int nDisplayTime, BOOL fNeedMore, char *pszText); diff --git a/reapi/src/hook_list.cpp b/reapi/src/hook_list.cpp index 2b9df5cb..b72bc113 100644 --- a/reapi/src/hook_list.cpp +++ b/reapi/src/hook_list.cpp @@ -117,6 +117,7 @@ hook_t hooklist_gamedll[] = { DLL(IsPenetrableEntity), DLL(SpawnHeadGib), DLL(SpawnRandomGibs), + DLL(PM_LadderMove), }; hook_t hooklist_animating[] = { diff --git a/reapi/src/hook_list.h b/reapi/src/hook_list.h index bf798827..6108b1cb 100644 --- a/reapi/src/hook_list.h +++ b/reapi/src/hook_list.h @@ -134,6 +134,8 @@ enum GamedllFunc RG_SpawnHeadGib, RG_SpawnRandomGibs, + + RG_PM_LadderMove, // [...] }; From ca23307217ae8dd697f02e2a90473c5365cb97b7 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Sun, 16 Jul 2023 02:32:32 +0700 Subject: [PATCH 2/4] Update hook_callback.h --- reapi/src/hook_callback.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reapi/src/hook_callback.h b/reapi/src/hook_callback.h index d140a368..254c7878 100644 --- a/reapi/src/hook_callback.h +++ b/reapi/src/hook_callback.h @@ -386,7 +386,7 @@ void PM_AirMove(IReGameHook_PM_AirMove *chain, int playerIndex); struct PM_LadderMove_args_t { - PM_LadderMove_args_t(physent_t* _ladder) : pLadder(_ladder) {} + PM_LadderMove_args_t(physent_t *_ladder) : pLadder(_ladder) {} physent_t *pLadder; }; From 1cd9a140cc6260f3c098a867582659d69a256b20 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Sun, 16 Jul 2023 02:33:37 +0700 Subject: [PATCH 3/4] Update hook_callback.cpp --- reapi/src/hook_callback.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reapi/src/hook_callback.cpp b/reapi/src/hook_callback.cpp index c316ab75..83fda191 100644 --- a/reapi/src/hook_callback.cpp +++ b/reapi/src/hook_callback.cpp @@ -817,7 +817,7 @@ void PM_LadderMove(IReGameHook_PM_LadderMove *chain, physent_t *pLadder) { PM_LadderMove_args_t args(pLadder); Phys_T data(chain, args); - PM_LadderMove_AMXX(&data, pLadder-> player + 1); + PM_LadderMove_AMXX(&data, pLadder->player + 1); } BOOL CSGameRules_FShouldSwitchWeapon(IReGameHook_CSGameRules_FShouldSwitchWeapon *chain, CBasePlayer *pPlayer, CBasePlayerItem *pWeapon) From d0fe2d6920900d499b8b0369d89c19b0395d7695 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Sun, 16 Jul 2023 02:39:46 +0700 Subject: [PATCH 4/4] Update hook_list.h --- reapi/src/hook_list.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/reapi/src/hook_list.h b/reapi/src/hook_list.h index b9db9450..352472cf 100644 --- a/reapi/src/hook_list.h +++ b/reapi/src/hook_list.h @@ -143,10 +143,9 @@ enum GamedllFunc RG_SpawnHeadGib, RG_SpawnRandomGibs, - - RG_PM_LadderMove, RG_CreateWeaponBox, + RG_PM_LadderMove, // [...] };