From ea6836ae401ad7f0629470097e17d96eb7a2341a Mon Sep 17 00:00:00 2001 From: GLoOoccK <155241167+GLoOoccK@users.noreply.github.com> Date: Sun, 13 Apr 2025 16:24:05 -0300 Subject: [PATCH 01/14] Update reapi_gamedll_const.inc --- .../extra/amxmodx/scripting/include/reapi_gamedll_const.inc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc index af521a71..d2a0b8b3 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc @@ -946,6 +946,12 @@ enum GamedllFunc_CBasePlayer * Params: (const this) */ RG_CBasePlayer_UpdateStatusBar, + + /* + * Description: - + * Params: (const this, pevAttacker, Float:flModifier) + */ + RG_CBasePlayer_Knockback, }; /** From 65a75323d07d340401230e5293c489934b20bb56 Mon Sep 17 00:00:00 2001 From: GLoOoccK <155241167+GLoOoccK@users.noreply.github.com> Date: Sun, 13 Apr 2025 16:25:02 -0300 Subject: [PATCH 02/14] Update CSPlayer.h --- reapi/include/cssdk/dlls/API/CSPlayer.h | 1 + 1 file changed, 1 insertion(+) diff --git a/reapi/include/cssdk/dlls/API/CSPlayer.h b/reapi/include/cssdk/dlls/API/CSPlayer.h index f3294959..a70b94d7 100644 --- a/reapi/include/cssdk/dlls/API/CSPlayer.h +++ b/reapi/include/cssdk/dlls/API/CSPlayer.h @@ -119,6 +119,7 @@ class CCSPlayer: public CCSMonster virtual void OnSpawnEquip(bool addDefault = true, bool equipGame = true) = 0; virtual void SetScoreboardAttributes(CBasePlayer *destination = nullptr) = 0; virtual void Observer_FindNextPlayer(bool bReverse, const char *name = nullptr) = 0; + virtual void Knockback(CBaseEntity *pAttacker, float flModifier) = 0; CBasePlayer *BasePlayer() const; From 8f1e08e816f6609d5075210b270e0a375a0b46cd Mon Sep 17 00:00:00 2001 From: GLoOoccK <155241167+GLoOoccK@users.noreply.github.com> Date: Sun, 13 Apr 2025 16:26:15 -0300 Subject: [PATCH 03/14] Update regamedll_api.h --- reapi/include/cssdk/dlls/regamedll_api.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/reapi/include/cssdk/dlls/regamedll_api.h b/reapi/include/cssdk/dlls/regamedll_api.h index daaec1f6..a39d025a 100644 --- a/reapi/include/cssdk/dlls/regamedll_api.h +++ b/reapi/include/cssdk/dlls/regamedll_api.h @@ -634,6 +634,10 @@ typedef IHookChainRegistryClass IReGameHookRegist typedef IHookChainClass IReGameHook_CBasePlayer_UpdateStatusBar; typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_UpdateStatusBar; +// CBasePlayer::Knockback hook +typedef IHookChainClass IReGameHook_CBasePlayer_Knockback; +typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_Knockback; + class IReGameHookchains { public: virtual ~IReGameHookchains() {} @@ -797,6 +801,7 @@ class IReGameHookchains { virtual IReGameHookRegistry_CBasePlayer_Observer_Think *CBasePlayer_Observer_Think() = 0; virtual IReGameHookRegistry_CBasePlayer_RemoveAllItems *CBasePlayer_RemoveAllItems() = 0; virtual IReGameHookRegistry_CBasePlayer_UpdateStatusBar *CBasePlayer_UpdateStatusBar() = 0; + virtual IReGameHookRegistry_CBasePlayer_Knockback *CBasePlayer_Knockback() = 0; }; struct ReGameFuncs_t { From 576a72f7c37ffaa9d38a293f7988bd52578e4ef6 Mon Sep 17 00:00:00 2001 From: GLoOoccK <155241167+GLoOoccK@users.noreply.github.com> Date: Sun, 13 Apr 2025 16:28:05 -0300 Subject: [PATCH 04/14] Update hook_callback.cpp --- reapi/src/hook_callback.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/reapi/src/hook_callback.cpp b/reapi/src/hook_callback.cpp index 54feb426..8a1f46be 100644 --- a/reapi/src/hook_callback.cpp +++ b/reapi/src/hook_callback.cpp @@ -1776,6 +1776,16 @@ void CBasePlayer_UpdateStatusBar(IReGameHook_CBasePlayer_UpdateStatusBar *chain, callVoidForward(RG_CBasePlayer_UpdateStatusBar, original, indexOfEdict(pthis->pev)); } +void CBasePlayer_Knockback(IReGameHook_CBasePlayer_Knockback *chain, CBasePlayer *pthis, CBaseEntity *pAttacker, float flModifier) +{ + auto original = [chain](int _pthis, int _pAttacker, float _flModifier) + { + chain->callNext(getPrivate(_pthis), getPrivate(_pAttacker), _flModifier); + }; + + callVoidForward(RG_CBasePlayer_Knockback, original, indexOfEdict(pthis->pev), indexOfEdict(pAttacker->pev), flModifier); +} + /* * VTC functions */ From 9a3b894e173f65bb53067cc786245eaa830a6bd7 Mon Sep 17 00:00:00 2001 From: GLoOoccK <155241167+GLoOoccK@users.noreply.github.com> Date: Sun, 13 Apr 2025 16:29:46 -0300 Subject: [PATCH 05/14] Update hook_callback.h --- reapi/src/hook_callback.h | 1 + 1 file changed, 1 insertion(+) diff --git a/reapi/src/hook_callback.h b/reapi/src/hook_callback.h index 7e2720de..30362a0c 100644 --- a/reapi/src/hook_callback.h +++ b/reapi/src/hook_callback.h @@ -575,6 +575,7 @@ void CBasePlayer_Observer_Think(IReGameHook_CBasePlayer_Observer_Think *chain, C void CBasePlayer_RemoveAllItems(IReGameHook_CBasePlayer_RemoveAllItems *chain, CBasePlayer *pthis, BOOL removeSuit); 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_Knockback(IReGameHook_CBasePlayer_Knockback *chain, CBasePlayer *pthis, CBaseEntity *pAttacker, float flModifier); /* * VTC functions From c4742f328f2b5080bf4e2e865d6a9c21fda60def Mon Sep 17 00:00:00 2001 From: GLoOoccK <155241167+GLoOoccK@users.noreply.github.com> Date: Sun, 13 Apr 2025 16:30:31 -0300 Subject: [PATCH 06/14] Update hook_list.cpp --- reapi/src/hook_list.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/reapi/src/hook_list.cpp b/reapi/src/hook_list.cpp index 7ff1096c..4a511331 100644 --- a/reapi/src/hook_list.cpp +++ b/reapi/src/hook_list.cpp @@ -217,6 +217,7 @@ hook_t hooklist_player[] = { DLL(CBasePlayer_Observer_Think), DLL(CBasePlayer_RemoveAllItems), DLL(CBasePlayer_UpdateStatusBar), + DLL(CBasePlayer_Knockback), }; hook_t hooklist_gamerules[] = { From 077ff4efa37b355fed6fbe86284d383a1719f983 Mon Sep 17 00:00:00 2001 From: GLoOoccK <155241167+GLoOoccK@users.noreply.github.com> Date: Sun, 13 Apr 2025 16:31:36 -0300 Subject: [PATCH 07/14] Update hook_list.h --- reapi/src/hook_list.h | 1 + 1 file changed, 1 insertion(+) diff --git a/reapi/src/hook_list.h b/reapi/src/hook_list.h index fdba2a92..52405798 100644 --- a/reapi/src/hook_list.h +++ b/reapi/src/hook_list.h @@ -241,6 +241,7 @@ enum GamedllFunc_CBasePlayer RG_CBasePlayer_Observer_Think, RG_CBasePlayer_RemoveAllItems, RG_CBasePlayer_UpdateStatusBar, + RG_CBasePlayer_Knockback, // [...] }; From 32753f648aba749c6fdfb90f4935f673deaac6a4 Mon Sep 17 00:00:00 2001 From: GLoOoccK <155241167+GLoOoccK@users.noreply.github.com> Date: Sun, 13 Apr 2025 16:47:04 -0300 Subject: [PATCH 08/14] Update natives_misc.cpp --- reapi/src/natives/natives_misc.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/reapi/src/natives/natives_misc.cpp b/reapi/src/natives/natives_misc.cpp index 9a18fd32..7069d071 100644 --- a/reapi/src/natives/natives_misc.cpp +++ b/reapi/src/natives/natives_misc.cpp @@ -3375,6 +3375,33 @@ cell AMX_NATIVE_CALL rg_send_death_message(AMX *amx, cell *params) return TRUE; } +/* +* Adds knockback to the victim. +* +* @param pVictim Victim index. +* @param pAttacker Attacker index. +* @param flModifier Modifier amount. +* +* @noreturn +*/ +cell AMX_NATIVE_CALL rg_player_knockback(AMX* amx, cell* params) +{ + enum args_e { arg_count, arg_victim, arg_attacker, arg_modifier }; + + CHECK_ISPLAYER(arg_victim); + CHECK_ISENTITY(arg_attacker); + + CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_victim]); + CHECK_CONNECTED(pPlayer, arg_victim); + + CBaseEntity *pAttacker = getPrivate(params[arg_attacker]); + + CAmxArgs args(amx, params); + pPlayer->Knockback(pAttacker, args[arg_modifier]); + + return TRUE; +} + AMX_NATIVE_INFO Misc_Natives_RG[] = { { "rg_set_animation", rg_set_animation }, @@ -3490,6 +3517,7 @@ AMX_NATIVE_INFO Misc_Natives_RG[] = { "rg_player_relationship", rg_player_relationship }, { "rg_send_death_message", rg_send_death_message }, + { "rg_player_knockback", rg_player_knockback }, { nullptr, nullptr } }; From 16d52512ba95233adcec26aeada40c61ce89ec97 Mon Sep 17 00:00:00 2001 From: GLoOoccK <155241167+GLoOoccK@users.noreply.github.com> Date: Sun, 13 Apr 2025 16:48:00 -0300 Subject: [PATCH 09/14] Update reapi_gamedll.inc --- .../extra/amxmodx/scripting/include/reapi_gamedll.inc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc index 0fee9a6a..328c4937 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc @@ -1233,3 +1233,14 @@ native rg_player_relationship(const player, const target); * @noreturn */ native rg_send_death_message(const pKiller, const pVictim, const pAssister, const pevInflictor, const killerWeaponName[], const DeathMessageFlags:iDeathMessageFlags, const KillRarity:iRarityOfKill); + +/* +* Adds knockback to the victim. +* +* @param pVictim Victim index. +* @param pAttacker Attacker index. +* @param flModifier Modifier amount. +* +* @noreturn +*/ +native rg_player_knockback(const pVictim, const pAttacker, const Float:flModifier); From 9fa4359654de17c98a53fa6cf83e38030dec2419 Mon Sep 17 00:00:00 2001 From: GLoOoccK <155241167+GLoOoccK@users.noreply.github.com> Date: Sun, 13 Apr 2025 17:29:59 -0300 Subject: [PATCH 10/14] Update natives_misc.cpp --- reapi/src/natives/natives_misc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reapi/src/natives/natives_misc.cpp b/reapi/src/natives/natives_misc.cpp index 7069d071..3f70b054 100644 --- a/reapi/src/natives/natives_misc.cpp +++ b/reapi/src/natives/natives_misc.cpp @@ -3397,7 +3397,7 @@ cell AMX_NATIVE_CALL rg_player_knockback(AMX* amx, cell* params) CBaseEntity *pAttacker = getPrivate(params[arg_attacker]); CAmxArgs args(amx, params); - pPlayer->Knockback(pAttacker, args[arg_modifier]); + pPlayer->CSPlayer()->Knockback(pAttacker, args[arg_modifier]); return TRUE; } From f31496a716a57a1d9fe1f6a7ba5e265f6a2658cb Mon Sep 17 00:00:00 2001 From: GLoOoccK Date: Fri, 18 Apr 2025 16:52:15 -0300 Subject: [PATCH 11/14] minor refactor --- .../scripting/include/reapi_gamedll.inc | 11 ++--- .../scripting/include/reapi_gamedll_const.inc | 4 +- reapi/include/cssdk/dlls/API/CSPlayer.h | 2 +- reapi/include/cssdk/dlls/regamedll_api.h | 8 ++-- reapi/src/hook_callback.cpp | 8 ++-- reapi/src/hook_callback.h | 2 +- reapi/src/hook_list.cpp | 2 +- reapi/src/hook_list.h | 2 +- reapi/src/natives/natives_misc.cpp | 40 +++++++++++++------ 9 files changed, 47 insertions(+), 32 deletions(-) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc index 328c4937..023be74c 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc @@ -1235,12 +1235,13 @@ native rg_player_relationship(const player, const target); native rg_send_death_message(const pKiller, const pVictim, const pAssister, const pevInflictor, const killerWeaponName[], const DeathMessageFlags:iDeathMessageFlags, const KillRarity:iRarityOfKill); /* -* Adds knockback to the victim. +* Adds impulse to the player. * -* @param pVictim Victim index. -* @param pAttacker Attacker index. -* @param flModifier Modifier amount. +* @param player Player index. +* @param attacker Attacker index. +* @param flKnockbackFactor Knockback factor. +* @param flVelModifier Velocity Modifier. * * @noreturn */ -native rg_player_knockback(const pVictim, const pAttacker, const Float:flModifier); +native rg_player_takedamage_impulse(const player, const attacker, const Float:flKnockbackFactor, const Float:flVelModifier); diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc index d2a0b8b3..0d3aa530 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc @@ -949,9 +949,9 @@ enum GamedllFunc_CBasePlayer /* * Description: - - * Params: (const this, pevAttacker, Float:flModifier) + * Params: (const this, attacker, Float:flKnockbackFactor, Float:flVelModifier) */ - RG_CBasePlayer_Knockback, + RG_CBasePlayer_TakeDamageImpulse, }; /** diff --git a/reapi/include/cssdk/dlls/API/CSPlayer.h b/reapi/include/cssdk/dlls/API/CSPlayer.h index a70b94d7..684e3387 100644 --- a/reapi/include/cssdk/dlls/API/CSPlayer.h +++ b/reapi/include/cssdk/dlls/API/CSPlayer.h @@ -119,7 +119,7 @@ class CCSPlayer: public CCSMonster virtual void OnSpawnEquip(bool addDefault = true, bool equipGame = true) = 0; virtual void SetScoreboardAttributes(CBasePlayer *destination = nullptr) = 0; virtual void Observer_FindNextPlayer(bool bReverse, const char *name = nullptr) = 0; - virtual void Knockback(CBaseEntity *pAttacker, float flModifier) = 0; + virtual void TakeDamageImpulse(CBasePlayer *pAttacker, float flKnockbackFactor, float flVelModifier) = 0; CBasePlayer *BasePlayer() const; diff --git a/reapi/include/cssdk/dlls/regamedll_api.h b/reapi/include/cssdk/dlls/regamedll_api.h index a39d025a..b64b8677 100644 --- a/reapi/include/cssdk/dlls/regamedll_api.h +++ b/reapi/include/cssdk/dlls/regamedll_api.h @@ -634,9 +634,9 @@ typedef IHookChainRegistryClass IReGameHookRegist typedef IHookChainClass IReGameHook_CBasePlayer_UpdateStatusBar; typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_UpdateStatusBar; -// CBasePlayer::Knockback hook -typedef IHookChainClass IReGameHook_CBasePlayer_Knockback; -typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_Knockback; +// CBasePlayer::TakeDamageImpulse hook +typedef IHookChainClass IReGameHook_CBasePlayer_TakeDamageImpulse; +typedef IHookChainRegistryClass IReGameHookRegistry_CBasePlayer_TakeDamageImpulse; class IReGameHookchains { public: @@ -801,7 +801,7 @@ class IReGameHookchains { virtual IReGameHookRegistry_CBasePlayer_Observer_Think *CBasePlayer_Observer_Think() = 0; virtual IReGameHookRegistry_CBasePlayer_RemoveAllItems *CBasePlayer_RemoveAllItems() = 0; virtual IReGameHookRegistry_CBasePlayer_UpdateStatusBar *CBasePlayer_UpdateStatusBar() = 0; - virtual IReGameHookRegistry_CBasePlayer_Knockback *CBasePlayer_Knockback() = 0; + virtual IReGameHookRegistry_CBasePlayer_TakeDamageImpulse *CBasePlayer_TakeDamageImpulse() = 0; }; struct ReGameFuncs_t { diff --git a/reapi/src/hook_callback.cpp b/reapi/src/hook_callback.cpp index 8a1f46be..d562de03 100644 --- a/reapi/src/hook_callback.cpp +++ b/reapi/src/hook_callback.cpp @@ -1776,14 +1776,14 @@ void CBasePlayer_UpdateStatusBar(IReGameHook_CBasePlayer_UpdateStatusBar *chain, callVoidForward(RG_CBasePlayer_UpdateStatusBar, original, indexOfEdict(pthis->pev)); } -void CBasePlayer_Knockback(IReGameHook_CBasePlayer_Knockback *chain, CBasePlayer *pthis, CBaseEntity *pAttacker, float flModifier) +void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *chain, CBasePlayer *pthis, CBasePlayer *pAttacker, float flKnockbackFactor, float flVelModifier) { - auto original = [chain](int _pthis, int _pAttacker, float _flModifier) + auto original = [chain](int _pthis, int _pAttacker, float _flKnockbackFactor, float _flVelModifier) { - chain->callNext(getPrivate(_pthis), getPrivate(_pAttacker), _flModifier); + chain->callNext(getPrivate(_pthis), getPrivate(_pAttacker), _flKnockbackFactor, _flVelModifier); }; - callVoidForward(RG_CBasePlayer_Knockback, original, indexOfEdict(pthis->pev), indexOfEdict(pAttacker->pev), flModifier); + callVoidForward(RG_CBasePlayer_TakeDamageImpulse, original, indexOfEdict(pthis->pev), indexOfEdict(pAttacker->pev), flKnockbackFactor, flVelModifier); } /* diff --git a/reapi/src/hook_callback.h b/reapi/src/hook_callback.h index 30362a0c..4903994e 100644 --- a/reapi/src/hook_callback.h +++ b/reapi/src/hook_callback.h @@ -575,7 +575,7 @@ void CBasePlayer_Observer_Think(IReGameHook_CBasePlayer_Observer_Think *chain, C void CBasePlayer_RemoveAllItems(IReGameHook_CBasePlayer_RemoveAllItems *chain, CBasePlayer *pthis, BOOL removeSuit); 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_Knockback(IReGameHook_CBasePlayer_Knockback *chain, CBasePlayer *pthis, CBaseEntity *pAttacker, float flModifier); +void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *chain, CBasePlayer *pthis, CBasePlayer *pAttacker, float flKnockbackFactor, float flVelModifier); /* * VTC functions diff --git a/reapi/src/hook_list.cpp b/reapi/src/hook_list.cpp index 4a511331..cb8bd17e 100644 --- a/reapi/src/hook_list.cpp +++ b/reapi/src/hook_list.cpp @@ -217,7 +217,7 @@ hook_t hooklist_player[] = { DLL(CBasePlayer_Observer_Think), DLL(CBasePlayer_RemoveAllItems), DLL(CBasePlayer_UpdateStatusBar), - DLL(CBasePlayer_Knockback), + DLL(CBasePlayer_TakeDamageImpulse), }; hook_t hooklist_gamerules[] = { diff --git a/reapi/src/hook_list.h b/reapi/src/hook_list.h index 52405798..1cdb7bb4 100644 --- a/reapi/src/hook_list.h +++ b/reapi/src/hook_list.h @@ -241,7 +241,7 @@ enum GamedllFunc_CBasePlayer RG_CBasePlayer_Observer_Think, RG_CBasePlayer_RemoveAllItems, RG_CBasePlayer_UpdateStatusBar, - RG_CBasePlayer_Knockback, + RG_CBasePlayer_TakeDamageImpulse, // [...] }; diff --git a/reapi/src/natives/natives_misc.cpp b/reapi/src/natives/natives_misc.cpp index 3f70b054..077c9bb3 100644 --- a/reapi/src/natives/natives_misc.cpp +++ b/reapi/src/natives/natives_misc.cpp @@ -3376,28 +3376,42 @@ cell AMX_NATIVE_CALL rg_send_death_message(AMX *amx, cell *params) } /* -* Adds knockback to the victim. +* Adds impulse to the player. * -* @param pVictim Victim index. -* @param pAttacker Attacker index. -* @param flModifier Modifier amount. +* @param player Player index. +* @param attacker Attacker index. +* @param flKnockbackFactor Knockback factor. +* @param flVelModifier Velocity Modifier. * * @noreturn */ -cell AMX_NATIVE_CALL rg_player_knockback(AMX* amx, cell* params) +cell AMX_NATIVE_CALL rg_player_takedamage_impulse(AMX *amx, cell *params) { - enum args_e { arg_count, arg_victim, arg_attacker, arg_modifier }; + enum args_e { arg_count, arg_index, arg_attacker, arg_knockback_factor, arg_vel_modifier }; - CHECK_ISPLAYER(arg_victim); - CHECK_ISENTITY(arg_attacker); + CHECK_ISPLAYER(arg_index); + CHECK_ISPLAYER(arg_attacker); - CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_victim]); - CHECK_CONNECTED(pPlayer, arg_victim); + CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]); + CHECK_CONNECTED(pPlayer, arg_index); - CBaseEntity *pAttacker = getPrivate(params[arg_attacker]); + if (!pPlayer->IsAlive()) + { + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: player %d not alive", __FUNCTION__, params[arg_index]); + return FALSE; + } + + CBasePlayer *pAttacker = UTIL_PlayerByIndex(params[arg_attacker]); + CHECK_CONNECTED(pAttacker, arg_attacker); + + if (!pAttacker->IsAlive()) + { + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: attacker %d not alive", __FUNCTION__, params[arg_attacker]); + return FALSE; + } CAmxArgs args(amx, params); - pPlayer->CSPlayer()->Knockback(pAttacker, args[arg_modifier]); + pPlayer->CSPlayer()->TakeDamageImpulse(pAttacker, args[arg_knockback_factor], args[arg_vel_modifier]); return TRUE; } @@ -3517,7 +3531,7 @@ AMX_NATIVE_INFO Misc_Natives_RG[] = { "rg_player_relationship", rg_player_relationship }, { "rg_send_death_message", rg_send_death_message }, - { "rg_player_knockback", rg_player_knockback }, + { "rg_player_takedamage_impulse", rg_player_takedamage_impulse }, { nullptr, nullptr } }; From 420e2890fc88657a762272a5532b87ae48b3b8f6 Mon Sep 17 00:00:00 2001 From: GLoOoccK Date: Fri, 18 Apr 2025 18:45:36 -0300 Subject: [PATCH 12/14] minor refactor --- reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc | 6 +++--- .../amxmodx/scripting/include/reapi_gamedll_const.inc | 2 +- reapi/include/cssdk/dlls/API/CSPlayer.h | 2 +- reapi/src/hook_callback.cpp | 8 ++++---- reapi/src/hook_callback.h | 2 +- reapi/src/natives/natives_misc.cpp | 8 ++++---- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc index 023be74c..4a891573 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll.inc @@ -1239,9 +1239,9 @@ native rg_send_death_message(const pKiller, const pVictim, const pAssister, cons * * @param player Player index. * @param attacker Attacker index. -* @param flKnockbackFactor Knockback factor. -* @param flVelModifier Velocity Modifier. +* @param flKnockbackForce Knockback force. +* @param flVelModifier Velocity modifier. * * @noreturn */ -native rg_player_takedamage_impulse(const player, const attacker, const Float:flKnockbackFactor, const Float:flVelModifier); +native rg_player_takedamage_impulse(const player, const attacker, const Float:flKnockbackForce, const Float:flVelModifier); diff --git a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc index 0d3aa530..cdb78f8c 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc @@ -949,7 +949,7 @@ enum GamedllFunc_CBasePlayer /* * Description: - - * Params: (const this, attacker, Float:flKnockbackFactor, Float:flVelModifier) + * Params: (const this, attacker, Float:flKnockbackForce, Float:flVelModifier) */ RG_CBasePlayer_TakeDamageImpulse, }; diff --git a/reapi/include/cssdk/dlls/API/CSPlayer.h b/reapi/include/cssdk/dlls/API/CSPlayer.h index 684e3387..dd97e378 100644 --- a/reapi/include/cssdk/dlls/API/CSPlayer.h +++ b/reapi/include/cssdk/dlls/API/CSPlayer.h @@ -119,7 +119,7 @@ class CCSPlayer: public CCSMonster virtual void OnSpawnEquip(bool addDefault = true, bool equipGame = true) = 0; virtual void SetScoreboardAttributes(CBasePlayer *destination = nullptr) = 0; virtual void Observer_FindNextPlayer(bool bReverse, const char *name = nullptr) = 0; - virtual void TakeDamageImpulse(CBasePlayer *pAttacker, float flKnockbackFactor, float flVelModifier) = 0; + virtual void TakeDamageImpulse(CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier) = 0; CBasePlayer *BasePlayer() const; diff --git a/reapi/src/hook_callback.cpp b/reapi/src/hook_callback.cpp index d562de03..fdb723e4 100644 --- a/reapi/src/hook_callback.cpp +++ b/reapi/src/hook_callback.cpp @@ -1776,14 +1776,14 @@ void CBasePlayer_UpdateStatusBar(IReGameHook_CBasePlayer_UpdateStatusBar *chain, callVoidForward(RG_CBasePlayer_UpdateStatusBar, original, indexOfEdict(pthis->pev)); } -void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *chain, CBasePlayer *pthis, CBasePlayer *pAttacker, float flKnockbackFactor, float flVelModifier) +void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *chain, CBasePlayer *pthis, CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier) { - auto original = [chain](int _pthis, int _pAttacker, float _flKnockbackFactor, float _flVelModifier) + auto original = [chain](int _pthis, int _pAttacker, float _flKnockbackForce, float _flVelModifier) { - chain->callNext(getPrivate(_pthis), getPrivate(_pAttacker), _flKnockbackFactor, _flVelModifier); + chain->callNext(getPrivate(_pthis), getPrivate(_pAttacker), _flKnockbackForce, _flVelModifier); }; - callVoidForward(RG_CBasePlayer_TakeDamageImpulse, original, indexOfEdict(pthis->pev), indexOfEdict(pAttacker->pev), flKnockbackFactor, flVelModifier); + callVoidForward(RG_CBasePlayer_TakeDamageImpulse, original, indexOfEdict(pthis->pev), indexOfEdict(pAttacker->pev), flKnockbackForce, flVelModifier); } /* diff --git a/reapi/src/hook_callback.h b/reapi/src/hook_callback.h index 4903994e..1065997a 100644 --- a/reapi/src/hook_callback.h +++ b/reapi/src/hook_callback.h @@ -575,7 +575,7 @@ void CBasePlayer_Observer_Think(IReGameHook_CBasePlayer_Observer_Think *chain, C void CBasePlayer_RemoveAllItems(IReGameHook_CBasePlayer_RemoveAllItems *chain, CBasePlayer *pthis, BOOL removeSuit); 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 flKnockbackFactor, float flVelModifier); +void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *chain, CBasePlayer *pthis, CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier); /* * VTC functions diff --git a/reapi/src/natives/natives_misc.cpp b/reapi/src/natives/natives_misc.cpp index 077c9bb3..de49e9e0 100644 --- a/reapi/src/natives/natives_misc.cpp +++ b/reapi/src/natives/natives_misc.cpp @@ -3380,14 +3380,14 @@ cell AMX_NATIVE_CALL rg_send_death_message(AMX *amx, cell *params) * * @param player Player index. * @param attacker Attacker index. -* @param flKnockbackFactor Knockback factor. -* @param flVelModifier Velocity Modifier. +* @param flKnockbackForce Knockback force. +* @param flVelModifier Velocity modifier. * * @noreturn */ cell AMX_NATIVE_CALL rg_player_takedamage_impulse(AMX *amx, cell *params) { - enum args_e { arg_count, arg_index, arg_attacker, arg_knockback_factor, arg_vel_modifier }; + enum args_e { arg_count, arg_index, arg_attacker, arg_knockback_force, arg_vel_modifier }; CHECK_ISPLAYER(arg_index); CHECK_ISPLAYER(arg_attacker); @@ -3411,7 +3411,7 @@ cell AMX_NATIVE_CALL rg_player_takedamage_impulse(AMX *amx, cell *params) } CAmxArgs args(amx, params); - pPlayer->CSPlayer()->TakeDamageImpulse(pAttacker, args[arg_knockback_factor], args[arg_vel_modifier]); + pPlayer->CSPlayer()->TakeDamageImpulse(pAttacker, args[arg_knockback_force], args[arg_vel_modifier]); return TRUE; } From aeb48109be8f8cbf8b64011e447c6ee07cb72c55 Mon Sep 17 00:00:00 2001 From: GLoOoccK Date: Sun, 20 Apr 2025 11:21:09 -0300 Subject: [PATCH 13/14] bump minor api version --- reapi/include/cssdk/dlls/regamedll_api.h | 2 +- reapi/version/version.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/reapi/include/cssdk/dlls/regamedll_api.h b/reapi/include/cssdk/dlls/regamedll_api.h index b64b8677..62273fe6 100644 --- a/reapi/include/cssdk/dlls/regamedll_api.h +++ b/reapi/include/cssdk/dlls/regamedll_api.h @@ -40,7 +40,7 @@ #include #define REGAMEDLL_API_VERSION_MAJOR 5 -#define REGAMEDLL_API_VERSION_MINOR 29 +#define REGAMEDLL_API_VERSION_MINOR 30 // CBasePlayer::Spawn hook typedef IHookChainClass IReGameHook_CBasePlayer_Spawn; diff --git a/reapi/version/version.h b/reapi/version/version.h index 62c33001..d3e8b9db 100644 --- a/reapi/version/version.h +++ b/reapi/version/version.h @@ -6,5 +6,5 @@ #pragma once #define VERSION_MAJOR 5 -#define VERSION_MINOR 28 +#define VERSION_MINOR 29 #define VERSION_MAINTENANCE 0 From 8ff83e6c681665056aaf450f0d1fb29fc46a9577 Mon Sep 17 00:00:00 2001 From: GLoOoccK <155241167+GLoOoccK@users.noreply.github.com> Date: Sun, 20 Apr 2025 11:27:59 -0300 Subject: [PATCH 14/14] Update 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 cdb78f8c..82749cb4 100644 --- a/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc +++ b/reapi/extra/amxmodx/scripting/include/reapi_gamedll_const.inc @@ -948,7 +948,7 @@ enum GamedllFunc_CBasePlayer RG_CBasePlayer_UpdateStatusBar, /* - * Description: - + * Description: Called for the victim player after taking damage, when "knockback" and "pain shock" are applied. * Params: (const this, attacker, Float:flKnockbackForce, Float:flVelModifier) */ RG_CBasePlayer_TakeDamageImpulse,