mirror of
https://github.com/rehlds/reapi.git
synced 2025-05-03 10:19:28 +03:00
API: Knockback (#348)
This commit is contained in:
parent
5c06c04fa7
commit
66f6096160
@ -1233,3 +1233,15 @@ native rg_player_relationship(const player, const target);
|
|||||||
* @noreturn
|
* @noreturn
|
||||||
*/
|
*/
|
||||||
native rg_send_death_message(const pKiller, const pVictim, const pAssister, const pevInflictor, const killerWeaponName[], const DeathMessageFlags:iDeathMessageFlags, const KillRarity:iRarityOfKill);
|
native rg_send_death_message(const pKiller, const pVictim, const pAssister, const pevInflictor, const killerWeaponName[], const DeathMessageFlags:iDeathMessageFlags, const KillRarity:iRarityOfKill);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Adds impulse to the player.
|
||||||
|
*
|
||||||
|
* @param player Player index.
|
||||||
|
* @param attacker Attacker index.
|
||||||
|
* @param flKnockbackForce Knockback force.
|
||||||
|
* @param flVelModifier Velocity modifier.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
native rg_player_takedamage_impulse(const player, const attacker, const Float:flKnockbackForce, const Float:flVelModifier);
|
||||||
|
@ -946,6 +946,12 @@ enum GamedllFunc_CBasePlayer
|
|||||||
* Params: (const this)
|
* Params: (const this)
|
||||||
*/
|
*/
|
||||||
RG_CBasePlayer_UpdateStatusBar,
|
RG_CBasePlayer_UpdateStatusBar,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -119,6 +119,7 @@ public:
|
|||||||
virtual void OnSpawnEquip(bool addDefault = true, bool equipGame = true) = 0;
|
virtual void OnSpawnEquip(bool addDefault = true, bool equipGame = true) = 0;
|
||||||
virtual void SetScoreboardAttributes(CBasePlayer *destination = nullptr) = 0;
|
virtual void SetScoreboardAttributes(CBasePlayer *destination = nullptr) = 0;
|
||||||
virtual void Observer_FindNextPlayer(bool bReverse, const char *name = nullptr) = 0;
|
virtual void Observer_FindNextPlayer(bool bReverse, const char *name = nullptr) = 0;
|
||||||
|
virtual void TakeDamageImpulse(CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier) = 0;
|
||||||
|
|
||||||
CBasePlayer *BasePlayer() const;
|
CBasePlayer *BasePlayer() const;
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
#include <API/CSInterfaces.h>
|
#include <API/CSInterfaces.h>
|
||||||
|
|
||||||
#define REGAMEDLL_API_VERSION_MAJOR 5
|
#define REGAMEDLL_API_VERSION_MAJOR 5
|
||||||
#define REGAMEDLL_API_VERSION_MINOR 29
|
#define REGAMEDLL_API_VERSION_MINOR 30
|
||||||
|
|
||||||
// CBasePlayer::Spawn hook
|
// CBasePlayer::Spawn hook
|
||||||
typedef IHookChainClass<void, class CBasePlayer> IReGameHook_CBasePlayer_Spawn;
|
typedef IHookChainClass<void, class CBasePlayer> IReGameHook_CBasePlayer_Spawn;
|
||||||
@ -634,6 +634,10 @@ typedef IHookChainRegistryClass<void, class CBasePlayer, BOOL> IReGameHookRegist
|
|||||||
typedef IHookChainClass<void, class CBasePlayer> IReGameHook_CBasePlayer_UpdateStatusBar;
|
typedef IHookChainClass<void, class CBasePlayer> IReGameHook_CBasePlayer_UpdateStatusBar;
|
||||||
typedef IHookChainRegistryClass<void, class CBasePlayer> IReGameHookRegistry_CBasePlayer_UpdateStatusBar;
|
typedef IHookChainRegistryClass<void, class CBasePlayer> IReGameHookRegistry_CBasePlayer_UpdateStatusBar;
|
||||||
|
|
||||||
|
// CBasePlayer::TakeDamageImpulse hook
|
||||||
|
typedef IHookChainClass<void, class CBasePlayer, class CBasePlayer *, float, float> IReGameHook_CBasePlayer_TakeDamageImpulse;
|
||||||
|
typedef IHookChainRegistryClass<void, class CBasePlayer, class CBasePlayer *, float, float> IReGameHookRegistry_CBasePlayer_TakeDamageImpulse;
|
||||||
|
|
||||||
class IReGameHookchains {
|
class IReGameHookchains {
|
||||||
public:
|
public:
|
||||||
virtual ~IReGameHookchains() {}
|
virtual ~IReGameHookchains() {}
|
||||||
@ -797,6 +801,7 @@ public:
|
|||||||
virtual IReGameHookRegistry_CBasePlayer_Observer_Think *CBasePlayer_Observer_Think() = 0;
|
virtual IReGameHookRegistry_CBasePlayer_Observer_Think *CBasePlayer_Observer_Think() = 0;
|
||||||
virtual IReGameHookRegistry_CBasePlayer_RemoveAllItems *CBasePlayer_RemoveAllItems() = 0;
|
virtual IReGameHookRegistry_CBasePlayer_RemoveAllItems *CBasePlayer_RemoveAllItems() = 0;
|
||||||
virtual IReGameHookRegistry_CBasePlayer_UpdateStatusBar *CBasePlayer_UpdateStatusBar() = 0;
|
virtual IReGameHookRegistry_CBasePlayer_UpdateStatusBar *CBasePlayer_UpdateStatusBar() = 0;
|
||||||
|
virtual IReGameHookRegistry_CBasePlayer_TakeDamageImpulse *CBasePlayer_TakeDamageImpulse() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ReGameFuncs_t {
|
struct ReGameFuncs_t {
|
||||||
|
@ -1776,6 +1776,16 @@ void CBasePlayer_UpdateStatusBar(IReGameHook_CBasePlayer_UpdateStatusBar *chain,
|
|||||||
callVoidForward(RG_CBasePlayer_UpdateStatusBar, original, indexOfEdict(pthis->pev));
|
callVoidForward(RG_CBasePlayer_UpdateStatusBar, original, indexOfEdict(pthis->pev));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *chain, CBasePlayer *pthis, CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier)
|
||||||
|
{
|
||||||
|
auto original = [chain](int _pthis, int _pAttacker, float _flKnockbackForce, float _flVelModifier)
|
||||||
|
{
|
||||||
|
chain->callNext(getPrivate<CBasePlayer>(_pthis), getPrivate<CBasePlayer>(_pAttacker), _flKnockbackForce, _flVelModifier);
|
||||||
|
};
|
||||||
|
|
||||||
|
callVoidForward(RG_CBasePlayer_TakeDamageImpulse, original, indexOfEdict(pthis->pev), indexOfEdict(pAttacker->pev), flKnockbackForce, flVelModifier);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* VTC functions
|
* VTC functions
|
||||||
*/
|
*/
|
||||||
|
@ -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 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 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_UpdateStatusBar(IReGameHook_CBasePlayer_UpdateStatusBar *chain, CBasePlayer *pthis);
|
||||||
|
void CBasePlayer_TakeDamageImpulse(IReGameHook_CBasePlayer_TakeDamageImpulse *chain, CBasePlayer *pthis, CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* VTC functions
|
* VTC functions
|
||||||
|
@ -217,6 +217,7 @@ hook_t hooklist_player[] = {
|
|||||||
DLL(CBasePlayer_Observer_Think),
|
DLL(CBasePlayer_Observer_Think),
|
||||||
DLL(CBasePlayer_RemoveAllItems),
|
DLL(CBasePlayer_RemoveAllItems),
|
||||||
DLL(CBasePlayer_UpdateStatusBar),
|
DLL(CBasePlayer_UpdateStatusBar),
|
||||||
|
DLL(CBasePlayer_TakeDamageImpulse),
|
||||||
};
|
};
|
||||||
|
|
||||||
hook_t hooklist_gamerules[] = {
|
hook_t hooklist_gamerules[] = {
|
||||||
|
@ -241,6 +241,7 @@ enum GamedllFunc_CBasePlayer
|
|||||||
RG_CBasePlayer_Observer_Think,
|
RG_CBasePlayer_Observer_Think,
|
||||||
RG_CBasePlayer_RemoveAllItems,
|
RG_CBasePlayer_RemoveAllItems,
|
||||||
RG_CBasePlayer_UpdateStatusBar,
|
RG_CBasePlayer_UpdateStatusBar,
|
||||||
|
RG_CBasePlayer_TakeDamageImpulse,
|
||||||
|
|
||||||
// [...]
|
// [...]
|
||||||
};
|
};
|
||||||
|
@ -3375,6 +3375,47 @@ cell AMX_NATIVE_CALL rg_send_death_message(AMX *amx, cell *params)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Adds impulse to the player.
|
||||||
|
*
|
||||||
|
* @param player Player index.
|
||||||
|
* @param attacker Attacker index.
|
||||||
|
* @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_force, arg_vel_modifier };
|
||||||
|
|
||||||
|
CHECK_ISPLAYER(arg_index);
|
||||||
|
CHECK_ISPLAYER(arg_attacker);
|
||||||
|
|
||||||
|
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
||||||
|
CHECK_CONNECTED(pPlayer, arg_index);
|
||||||
|
|
||||||
|
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()->TakeDamageImpulse(pAttacker, args[arg_knockback_force], args[arg_vel_modifier]);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO Misc_Natives_RG[] =
|
AMX_NATIVE_INFO Misc_Natives_RG[] =
|
||||||
{
|
{
|
||||||
{ "rg_set_animation", rg_set_animation },
|
{ "rg_set_animation", rg_set_animation },
|
||||||
@ -3490,6 +3531,7 @@ AMX_NATIVE_INFO Misc_Natives_RG[] =
|
|||||||
{ "rg_player_relationship", rg_player_relationship },
|
{ "rg_player_relationship", rg_player_relationship },
|
||||||
|
|
||||||
{ "rg_send_death_message", rg_send_death_message },
|
{ "rg_send_death_message", rg_send_death_message },
|
||||||
|
{ "rg_player_takedamage_impulse", rg_player_takedamage_impulse },
|
||||||
|
|
||||||
{ nullptr, nullptr }
|
{ nullptr, nullptr }
|
||||||
};
|
};
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define VERSION_MAJOR 5
|
#define VERSION_MAJOR 5
|
||||||
#define VERSION_MINOR 28
|
#define VERSION_MINOR 29
|
||||||
#define VERSION_MAINTENANCE 0
|
#define VERSION_MAINTENANCE 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user