mirror of
https://github.com/s1lentq/ReGameDLL_CS.git
synced 2025-04-24 23:43:42 +03:00
API: Knockback (#1069)
This commit is contained in:
parent
a4f48f4e42
commit
8d5aa54ceb
@ -132,6 +132,7 @@ This means that plugins that do binary code analysis (Orpheu for example) probab
|
|||||||
| mp_randomspawn | 0 | 0 | 1 | Random player spawns<br/>`0` disabled <br/>`1` enabled<br/>`NOTE`: Navigation `maps/.nav` file required |
|
| mp_randomspawn | 0 | 0 | 1 | Random player spawns<br/>`0` disabled <br/>`1` enabled<br/>`NOTE`: Navigation `maps/.nav` file required |
|
||||||
| mp_playerid_showhealth | 1 | 0 | 2 | Player ID display mode.<br/>`0` don't show health<br/>`1` show health for teammates only (default CS behaviour)<br/>`2` show health for all players |
|
| mp_playerid_showhealth | 1 | 0 | 2 | Player ID display mode.<br/>`0` don't show health<br/>`1` show health for teammates only (default CS behaviour)<br/>`2` show health for all players |
|
||||||
| mp_playerid_field | 3 | 0 | 3 | Player ID field display mode.<br/>`0` don't show additional information<br/>`1` show team name<br/>`2` show health percentage<br/>`3` show both team name and health percentage |
|
| mp_playerid_field | 3 | 0 | 3 | Player ID field display mode.<br/>`0` don't show additional information<br/>`1` show team name<br/>`2` show health percentage<br/>`3` show both team name and health percentage |
|
||||||
|
| mp_knockback | 170 | - | - | Knockback force applied to the victim when damaged by strong weapons (e.g. `AWP`, `AK47`).<br/>Works only if not crouching, and not hit in the legs.<br/>Set to `0` to disable. |
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
7
dist/game.cfg
vendored
7
dist/game.cfg
vendored
@ -680,3 +680,10 @@ mp_playerid_showhealth "1"
|
|||||||
//
|
//
|
||||||
// Default value: "3"
|
// Default value: "3"
|
||||||
mp_playerid_field "3"
|
mp_playerid_field "3"
|
||||||
|
|
||||||
|
// Knockback force applied to the victim when damaged by strong weapons (e.g. AWP, AK47).
|
||||||
|
// Works only if not crouching, and not hit in the legs.
|
||||||
|
// Set to "0" to disable.
|
||||||
|
//
|
||||||
|
// Default: "170"
|
||||||
|
mp_knockback "170"
|
||||||
|
@ -337,6 +337,7 @@ GAMEHOOK_REGISTRY(CBasePlayer_PlayerDeathThink);
|
|||||||
GAMEHOOK_REGISTRY(CBasePlayer_Observer_Think);
|
GAMEHOOK_REGISTRY(CBasePlayer_Observer_Think);
|
||||||
GAMEHOOK_REGISTRY(CBasePlayer_RemoveAllItems);
|
GAMEHOOK_REGISTRY(CBasePlayer_RemoveAllItems);
|
||||||
GAMEHOOK_REGISTRY(CBasePlayer_UpdateStatusBar);
|
GAMEHOOK_REGISTRY(CBasePlayer_UpdateStatusBar);
|
||||||
|
GAMEHOOK_REGISTRY(CBasePlayer_TakeDamageImpulse);
|
||||||
|
|
||||||
int CReGameApi::GetMajorVersion() {
|
int CReGameApi::GetMajorVersion() {
|
||||||
return REGAMEDLL_API_VERSION_MAJOR;
|
return REGAMEDLL_API_VERSION_MAJOR;
|
||||||
|
@ -753,6 +753,10 @@ typedef IHookChainRegistryClassImpl<void, CBasePlayer, BOOL> CReGameHookRegistry
|
|||||||
typedef IHookChainClassImpl<void, CBasePlayer> CReGameHook_CBasePlayer_UpdateStatusBar;
|
typedef IHookChainClassImpl<void, CBasePlayer> CReGameHook_CBasePlayer_UpdateStatusBar;
|
||||||
typedef IHookChainRegistryClassImpl<void, CBasePlayer> CReGameHookRegistry_CBasePlayer_UpdateStatusBar;
|
typedef IHookChainRegistryClassImpl<void, CBasePlayer> CReGameHookRegistry_CBasePlayer_UpdateStatusBar;
|
||||||
|
|
||||||
|
// CBasePlayer::TakeDamageImpulse hook
|
||||||
|
typedef IHookChainClassImpl<void, CBasePlayer, CBasePlayer *, float, float> CReGameHook_CBasePlayer_TakeDamageImpulse;
|
||||||
|
typedef IHookChainRegistryClassImpl<void, CBasePlayer, CBasePlayer *, float, float> CReGameHookRegistry_CBasePlayer_TakeDamageImpulse;
|
||||||
|
|
||||||
class CReGameHookchains: public IReGameHookchains {
|
class CReGameHookchains: public IReGameHookchains {
|
||||||
public:
|
public:
|
||||||
// CBasePlayer virtual
|
// CBasePlayer virtual
|
||||||
@ -915,6 +919,7 @@ public:
|
|||||||
CReGameHookRegistry_CBasePlayer_Observer_Think m_CBasePlayer_Observer_Think;
|
CReGameHookRegistry_CBasePlayer_Observer_Think m_CBasePlayer_Observer_Think;
|
||||||
CReGameHookRegistry_CBasePlayer_RemoveAllItems m_CBasePlayer_RemoveAllItems;
|
CReGameHookRegistry_CBasePlayer_RemoveAllItems m_CBasePlayer_RemoveAllItems;
|
||||||
CReGameHookRegistry_CBasePlayer_UpdateStatusBar m_CBasePlayer_UpdateStatusBar;
|
CReGameHookRegistry_CBasePlayer_UpdateStatusBar m_CBasePlayer_UpdateStatusBar;
|
||||||
|
CReGameHookRegistry_CBasePlayer_TakeDamageImpulse m_CBasePlayer_TakeDamageImpulse;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual IReGameHookRegistry_CBasePlayer_Spawn *CBasePlayer_Spawn();
|
virtual IReGameHookRegistry_CBasePlayer_Spawn *CBasePlayer_Spawn();
|
||||||
@ -1076,6 +1081,7 @@ public:
|
|||||||
virtual IReGameHookRegistry_CBasePlayer_Observer_Think *CBasePlayer_Observer_Think();
|
virtual IReGameHookRegistry_CBasePlayer_Observer_Think *CBasePlayer_Observer_Think();
|
||||||
virtual IReGameHookRegistry_CBasePlayer_RemoveAllItems *CBasePlayer_RemoveAllItems();
|
virtual IReGameHookRegistry_CBasePlayer_RemoveAllItems *CBasePlayer_RemoveAllItems();
|
||||||
virtual IReGameHookRegistry_CBasePlayer_UpdateStatusBar *CBasePlayer_UpdateStatusBar();
|
virtual IReGameHookRegistry_CBasePlayer_UpdateStatusBar *CBasePlayer_UpdateStatusBar();
|
||||||
|
virtual IReGameHookRegistry_CBasePlayer_TakeDamageImpulse *CBasePlayer_TakeDamageImpulse();
|
||||||
};
|
};
|
||||||
|
|
||||||
extern CReGameHookchains g_ReGameHookchains;
|
extern CReGameHookchains g_ReGameHookchains;
|
||||||
|
@ -539,6 +539,11 @@ EXT_FUNC bool CCSPlayer::CheckActivityInGame()
|
|||||||
return (fabs(deltaYaw) >= 0.1f && fabs(deltaPitch) >= 0.1f);
|
return (fabs(deltaYaw) >= 0.1f && fabs(deltaPitch) >= 0.1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXT_FUNC void CCSPlayer::TakeDamageImpulse(CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier)
|
||||||
|
{
|
||||||
|
BasePlayer()->TakeDamageImpulse(pAttacker, flKnockbackForce, flVelModifier);
|
||||||
|
}
|
||||||
|
|
||||||
void CCSPlayer::ResetVars()
|
void CCSPlayer::ResetVars()
|
||||||
{
|
{
|
||||||
m_szModel[0] = '\0';
|
m_szModel[0] = '\0';
|
||||||
|
@ -199,6 +199,8 @@ cvar_t randomspawn = { "mp_randomspawn", "0", FCVAR_SERVER, 0.0f, nu
|
|||||||
cvar_t playerid_showhealth = { "mp_playerid_showhealth", "1", 0, 1.0f, nullptr };
|
cvar_t playerid_showhealth = { "mp_playerid_showhealth", "1", 0, 1.0f, nullptr };
|
||||||
cvar_t playerid_field = { "mp_playerid_field", "3", 0, 3.0f, nullptr };
|
cvar_t playerid_field = { "mp_playerid_field", "3", 0, 3.0f, nullptr };
|
||||||
|
|
||||||
|
cvar_t knockback = { "mp_knockback", "170", 0, 170.0f, nullptr };
|
||||||
|
|
||||||
void GameDLL_Version_f()
|
void GameDLL_Version_f()
|
||||||
{
|
{
|
||||||
if (Q_stricmp(CMD_ARGV(1), "version") != 0)
|
if (Q_stricmp(CMD_ARGV(1), "version") != 0)
|
||||||
@ -485,6 +487,8 @@ void EXT_FUNC GameDLLInit()
|
|||||||
|
|
||||||
CVAR_REGISTER(&flymove_method);
|
CVAR_REGISTER(&flymove_method);
|
||||||
|
|
||||||
|
CVAR_REGISTER(&knockback);
|
||||||
|
|
||||||
// print version
|
// print version
|
||||||
CONSOLE_ECHO("ReGameDLL version: " APP_VERSION "\n");
|
CONSOLE_ECHO("ReGameDLL version: " APP_VERSION "\n");
|
||||||
|
|
||||||
|
@ -216,6 +216,7 @@ extern cvar_t logkills;
|
|||||||
extern cvar_t randomspawn;
|
extern cvar_t randomspawn;
|
||||||
extern cvar_t playerid_showhealth;
|
extern cvar_t playerid_showhealth;
|
||||||
extern cvar_t playerid_field;
|
extern cvar_t playerid_field;
|
||||||
|
extern cvar_t knockback;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1233,7 +1233,7 @@ BOOL EXT_FUNC CBasePlayer::__API_HOOK(TakeDamage)(entvars_t *pevInflictor, entva
|
|||||||
|
|
||||||
if (!ShouldDoLargeFlinch(m_LastHitGroup, iGunType))
|
if (!ShouldDoLargeFlinch(m_LastHitGroup, iGunType))
|
||||||
{
|
{
|
||||||
m_flVelocityModifier = 0.5f;
|
TakeDamageImpulse(pAttack, 0.0f, 0.5f);
|
||||||
|
|
||||||
if (m_LastHitGroup == HITGROUP_HEAD)
|
if (m_LastHitGroup == HITGROUP_HEAD)
|
||||||
m_bHighDamage = (flDamage > 60);
|
m_bHighDamage = (flDamage > 60);
|
||||||
@ -1246,10 +1246,13 @@ BOOL EXT_FUNC CBasePlayer::__API_HOOK(TakeDamage)(entvars_t *pevInflictor, entva
|
|||||||
{
|
{
|
||||||
if (pev->velocity.Length() < 300)
|
if (pev->velocity.Length() < 300)
|
||||||
{
|
{
|
||||||
Vector attack_velocity = (pev->origin - pAttack->pev->origin).Normalize() * 170;
|
#ifdef REGAMEDLL_ADD
|
||||||
pev->velocity = pev->velocity + attack_velocity;
|
float knockbackValue = knockback.value;
|
||||||
|
#else
|
||||||
|
float knockbackValue = 170;
|
||||||
|
#endif
|
||||||
|
|
||||||
m_flVelocityModifier = 0.65f;
|
TakeDamageImpulse(pAttack, knockbackValue, 0.65f);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetAnimation(PLAYER_LARGE_FLINCH);
|
SetAnimation(PLAYER_LARGE_FLINCH);
|
||||||
@ -10867,6 +10870,17 @@ bool CBasePlayer::Kill()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LINK_HOOK_CLASS_VOID_CHAIN(CBasePlayer, TakeDamageImpulse, (CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier), pAttacker, flKnockbackForce, flVelModifier)
|
||||||
|
|
||||||
|
void EXT_FUNC CBasePlayer::__API_HOOK(TakeDamageImpulse)(CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier)
|
||||||
|
{
|
||||||
|
if (flKnockbackForce != 0.0f)
|
||||||
|
pev->velocity += (pev->origin - pAttacker->pev->origin).Normalize() * flKnockbackForce;
|
||||||
|
|
||||||
|
if (flVelModifier != 0.0f)
|
||||||
|
m_flVelocityModifier = flVelModifier;
|
||||||
|
}
|
||||||
|
|
||||||
const usercmd_t *CBasePlayer::GetLastUserCommand() const
|
const usercmd_t *CBasePlayer::GetLastUserCommand() const
|
||||||
{
|
{
|
||||||
#ifdef REGAMEDLL_API
|
#ifdef REGAMEDLL_API
|
||||||
|
@ -451,6 +451,7 @@ public:
|
|||||||
void Observer_Think_OrigFunc();
|
void Observer_Think_OrigFunc();
|
||||||
void RemoveAllItems_OrigFunc(BOOL removeSuit);
|
void RemoveAllItems_OrigFunc(BOOL removeSuit);
|
||||||
void UpdateStatusBar_OrigFunc();
|
void UpdateStatusBar_OrigFunc();
|
||||||
|
void TakeDamageImpulse_OrigFunc(CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier);
|
||||||
|
|
||||||
CCSPlayer *CSPlayer() const;
|
CCSPlayer *CSPlayer() const;
|
||||||
#endif // REGAMEDLL_API
|
#endif // REGAMEDLL_API
|
||||||
@ -659,6 +660,7 @@ public:
|
|||||||
void UseEmpty();
|
void UseEmpty();
|
||||||
void DropIdlePlayer(const char *reason);
|
void DropIdlePlayer(const char *reason);
|
||||||
bool Kill();
|
bool Kill();
|
||||||
|
void TakeDamageImpulse(CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier);
|
||||||
|
|
||||||
// templates
|
// templates
|
||||||
template<typename T = CBasePlayerItem, typename Functor>
|
template<typename T = CBasePlayerItem, typename Functor>
|
||||||
|
@ -118,6 +118,7 @@ public:
|
|||||||
virtual void OnSpawnEquip(bool addDefault = true, bool equipGame = true);
|
virtual void OnSpawnEquip(bool addDefault = true, bool equipGame = true);
|
||||||
virtual void SetScoreboardAttributes(CBasePlayer *destination = nullptr);
|
virtual void SetScoreboardAttributes(CBasePlayer *destination = nullptr);
|
||||||
virtual void Observer_FindNextPlayer(bool bReverse, const char *name = nullptr);
|
virtual void Observer_FindNextPlayer(bool bReverse, const char *name = nullptr);
|
||||||
|
virtual void TakeDamageImpulse(CBasePlayer *pAttacker, float flKnockbackForce, float flVelModifier);
|
||||||
|
|
||||||
bool IsPlayerDominated(int iPlayerIndex) const;
|
bool IsPlayerDominated(int iPlayerIndex) const;
|
||||||
void SetPlayerDominated(CBasePlayer *pPlayer, bool bDominated);
|
void SetPlayerDominated(CBasePlayer *pPlayer, bool bDominated);
|
||||||
|
@ -38,7 +38,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;
|
||||||
@ -632,6 +632,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() {}
|
||||||
@ -795,6 +799,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 {
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define VERSION_MAJOR 5
|
#define VERSION_MAJOR 5
|
||||||
#define VERSION_MINOR 29
|
#define VERSION_MINOR 30
|
||||||
#define VERSION_MAINTENANCE 0
|
#define VERSION_MAINTENANCE 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user