From e94c276267ec6bef6720ffb5ecd20db5e627a652 Mon Sep 17 00:00:00 2001 From: Agiel Date: Mon, 16 Feb 2026 20:51:30 +0100 Subject: [PATCH] More ADS fixes * Fix scoped weapons disappearing when switched to while holding aim * Allow hold to aim during freeze time. --- src/game/client/c_baseplayer.cpp | 2 +- src/game/client/neo/c_neo_player.cpp | 13 +++++++++++++ src/game/server/player.cpp | 2 +- src/game/shared/neo/neo_predicted_viewmodel.cpp | 17 ----------------- src/game/shared/neo/neo_predicted_viewmodel.h | 1 - src/game/shared/neo/weapons/weapon_srs.cpp | 2 +- 6 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/game/client/c_baseplayer.cpp b/src/game/client/c_baseplayer.cpp index 424c32f06..e520bfabf 100644 --- a/src/game/client/c_baseplayer.cpp +++ b/src/game/client/c_baseplayer.cpp @@ -2593,7 +2593,7 @@ void C_BasePlayer::PhysicsSimulate( void ) ctx->cmd.upmove = 0; ctx->cmd.impulse = 0; ctx->cmd.buttons &= ~(IN_ATTACK | IN_JUMP | IN_SPEED | - IN_ALT1 | IN_ALT2 | IN_BACK | IN_FORWARD | IN_MOVELEFT | IN_MOVERIGHT | IN_RUN | IN_ZOOM); + IN_ALT1 | IN_ALT2 | IN_BACK | IN_FORWARD | IN_MOVELEFT | IN_MOVERIGHT | IN_RUN); const bool isTachi = (dynamic_cast(GetActiveWeapon()) != NULL); if (!isTachi) { diff --git a/src/game/client/neo/c_neo_player.cpp b/src/game/client/neo/c_neo_player.cpp index a5a13a6d3..18f301ae7 100644 --- a/src/game/client/neo/c_neo_player.cpp +++ b/src/game/client/neo/c_neo_player.cpp @@ -830,6 +830,19 @@ void C_NEO_Player::ItemPreFrame( void ) void C_NEO_Player::ItemPostFrame( void ) { BaseClass::ItemPostFrame(); + + auto pWeapon = static_cast(GetActiveWeapon()); + if (pWeapon && pWeapon->GetNeoWepBits() & NEO_WEP_SCOPEDWEAPON) + { + if (IsInAim()) + { + GetNEOViewModel()->AddEffects(EF_NODRAW); + } + else + { + GetNEOViewModel()->RemoveEffects(EF_NODRAW); + } + } } float C_NEO_Player::GetMinFOV() const diff --git a/src/game/server/player.cpp b/src/game/server/player.cpp index 804f7e02d..d09054c45 100644 --- a/src/game/server/player.cpp +++ b/src/game/server/player.cpp @@ -3946,7 +3946,7 @@ void CBasePlayer::PlayerRunCommand(CUserCmd *ucmd, IMoveHelper *moveHelper) } ucmd->buttons &= ~(IN_ATTACK | IN_JUMP | IN_SPEED | - IN_ALT1 | IN_ALT2 | IN_BACK | IN_FORWARD | IN_MOVELEFT | IN_MOVERIGHT | IN_RUN | IN_ZOOM); + IN_ALT1 | IN_ALT2 | IN_BACK | IN_FORWARD | IN_MOVELEFT | IN_MOVERIGHT | IN_RUN); const bool isTachi = (dynamic_cast(GetActiveWeapon()) != NULL); if (!isTachi) { diff --git a/src/game/shared/neo/neo_predicted_viewmodel.cpp b/src/game/shared/neo/neo_predicted_viewmodel.cpp index 95edfc64c..36461a832 100644 --- a/src/game/shared/neo/neo_predicted_viewmodel.cpp +++ b/src/game/shared/neo/neo_predicted_viewmodel.cpp @@ -275,23 +275,6 @@ int CNEOPredictedViewModel::DrawModel(int flags) return BaseClass::DrawModel(flags); } - -bool CNEOPredictedViewModel::ShouldDraw() -{ - const auto* owner = ToNEOPlayer(GetOwner()); - if (!owner || !owner->IsInAim()) - return BaseClass::ShouldDraw(); - - const auto* wep = assert_cast(GetOwningWeapon()); - if (!wep) - return BaseClass::ShouldDraw(); - - const bool isScopedWithSniper = wep->GetNeoWepBits() & NEO_WEP_SCOPEDWEAPON; - if (!isScopedWithSniper) - return BaseClass::ShouldDraw(); - - return false; -} #endif float EaseOut(float current, float target, float step) diff --git a/src/game/shared/neo/neo_predicted_viewmodel.h b/src/game/shared/neo/neo_predicted_viewmodel.h index 9d7fdf6b3..c69474bec 100644 --- a/src/game/shared/neo/neo_predicted_viewmodel.h +++ b/src/game/shared/neo/neo_predicted_viewmodel.h @@ -41,7 +41,6 @@ class CNEOPredictedViewModel : public CPredictedViewModel virtual void ClientThink() override; virtual int DrawModel(int flags); - virtual bool ShouldDraw() override; virtual void ProcessMuzzleFlashEvent() final override; virtual RenderGroup_t GetRenderGroup() override; diff --git a/src/game/shared/neo/weapons/weapon_srs.cpp b/src/game/shared/neo/weapons/weapon_srs.cpp index 7db9c1a1b..804371318 100644 --- a/src/game/shared/neo/weapons/weapon_srs.cpp +++ b/src/game/shared/neo/weapons/weapon_srs.cpp @@ -118,4 +118,4 @@ bool CWeaponSRS::Reload() bool CWeaponSRS::CanBePickedUpByClass(int classId) { return classId != NEO_CLASS_JUGGERNAUT; -} \ No newline at end of file +}