From 4e62e833a3d7c2174c135edb3fca0ff0209b26df Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Fri, 8 Apr 2022 12:37:45 -0700 Subject: [PATCH] CGameRules: Add method bool PlayerCanAttack(base_player) --- base/src/client/viewmodel.qc | 8 ++++++++ src/server/gamerules.h | 1 + src/server/gamerules.qc | 17 +++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/base/src/client/viewmodel.qc b/base/src/client/viewmodel.qc index a562ea5e..7d0e7dfa 100644 --- a/base/src/client/viewmodel.qc +++ b/base/src/client/viewmodel.qc @@ -123,6 +123,14 @@ Viewmodel_ApplyBob(entity gun) sprint = 20 * pSeatLocal->m_flSprintLerp; gun.angles[0] += sprint; gun.angles[1] += sprint + (sprint * pViewBob->m_flBob) * 0.25f; + + if (pSeat->m_ePlayer.gflags & GF_IS_HEALING) { + pSeatLocal->m_flHealLerp = bound(0.0f, pSeatLocal->m_flHealLerp + clframetime, 1.0f); + } else { + pSeatLocal->m_flHealLerp = bound(0.0f, pSeatLocal->m_flHealLerp - clframetime, 1.0f); + } + gun.angles[0] += pSeatLocal->m_flHealLerp * 45; + gun.origin[2] -= pSeatLocal->m_flHealLerp * 5; #endif gun.angles[0] += strength * sintime; diff --git a/src/server/gamerules.h b/src/server/gamerules.h index 74b7e477..dc0e1bd3 100644 --- a/src/server/gamerules.h +++ b/src/server/gamerules.h @@ -37,6 +37,7 @@ class CGameRules virtual void(base_player) PlayerPostFrame; virtual void(base_player) PlayerDeath; virtual void(base_player) PlayerPain; + virtual bool(base_player) PlayerCanAttack; /* level transitions */ virtual void(void) LevelNewParms; diff --git a/src/server/gamerules.qc b/src/server/gamerules.qc index e415230c..ed5906e7 100644 --- a/src/server/gamerules.qc +++ b/src/server/gamerules.qc @@ -221,6 +221,17 @@ CGameRules::DamageApply(entity t, entity c, float dmg, int w, damageType_t type) if (eTarget.flags & FL_CLIENT) { base_player tp = (base_player)t; + /* don't allow any damage */ + if (PlayerCanAttack(tp) == false) { + g_dmg_eAttacker = c; + g_dmg_eTarget = t; + g_dmg_iDamage = 0; + g_dmg_iHitBody = 0; + g_dmg_iFlags = type; + g_dmg_iWeapon = w; + return; + } + /* skip armor */ if not (type & DMG_SKIP_ARMOR) if (tp.armor && dmg > 0) { @@ -387,3 +398,9 @@ Gamerules_IsTeamPlay(void) { return (g_grMode.IsTeamPlay()) ? TRUE : FALSE; } + +bool +CGameRules::PlayerCanAttack(base_player bp) +{ + return true; +} \ No newline at end of file