From 2bcd16b194420ae5d3e70786dad45106bd3fc773 Mon Sep 17 00:00:00 2001 From: Alan Shen Date: Tue, 1 Sep 2026 21:11:21 -0600 Subject: [PATCH 1/2] Weapon API IsWeaponReloadable() --- src/game/server/neo/bot/behavior/neo_bot_behavior.cpp | 2 +- src/game/server/neo/bot/neo_bot.cpp | 2 +- src/game/shared/neo/weapons/weapon_balc.h | 1 + src/game/shared/neo/weapons/weapon_knife.h | 1 + src/game/shared/neo/weapons/weapon_neobasecombatweapon.h | 1 + 5 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/game/server/neo/bot/behavior/neo_bot_behavior.cpp b/src/game/server/neo/bot/behavior/neo_bot_behavior.cpp index 8420b14a4d..8be31b73e3 100644 --- a/src/game/server/neo/bot/behavior/neo_bot_behavior.cpp +++ b/src/game/server/neo/bot/behavior/neo_bot_behavior.cpp @@ -879,7 +879,7 @@ void CNEOBotMainAction::FireWeaponAtEnemy( CNEOBot *me ) } if ( myWeapon && me->IsCombatWeapon( myWeapon ) - && !( myWeapon->GetNeoWepBits() & NEO_WEP_BALC ) + && myWeapon->IsWeaponReloadable() && myWeapon->m_iClip1 <= 0 ) { if (myWeapon->m_bInReload) diff --git a/src/game/server/neo/bot/neo_bot.cpp b/src/game/server/neo/bot/neo_bot.cpp index 175eb07c2f..dba0046d0f 100644 --- a/src/game/server/neo/bot/neo_bot.cpp +++ b/src/game/server/neo/bot/neo_bot.cpp @@ -1687,7 +1687,7 @@ void CNEOBot::ReloadIfLowClip(bool bForceReload) return; } - if (wepBits & NEO_WEP_BALC) + if (!myWeapon->IsWeaponReloadable()) { return; } diff --git a/src/game/shared/neo/weapons/weapon_balc.h b/src/game/shared/neo/weapons/weapon_balc.h index f90ab87d42..4e0889f6bf 100644 --- a/src/game/shared/neo/weapons/weapon_balc.h +++ b/src/game/shared/neo/weapons/weapon_balc.h @@ -52,6 +52,7 @@ class CWeaponBALC : public CNEOBaseCombatWeapon virtual const char *GetTracerType() override final { return "AirboatGunTracer"; } virtual bool CanDrop() final { return false; } virtual bool CanAim() final { return true; } + virtual bool IsWeaponReloadable() const override final { return false; } inline virtual bool IsAutomatic(void) const override final { return m_bIsPrimaryFireMode; diff --git a/src/game/shared/neo/weapons/weapon_knife.h b/src/game/shared/neo/weapons/weapon_knife.h index 0ffe8957cd..1d0aebe1d3 100644 --- a/src/game/shared/neo/weapons/weapon_knife.h +++ b/src/game/shared/neo/weapons/weapon_knife.h @@ -41,6 +41,7 @@ class CWeaponKnife : public CNEOBaseCombatWeapon virtual bool CanDrop() final { return false; } virtual bool CanAim() final { return false; } virtual bool CanPerformSecondaryAttack() const override final { return false; } + virtual bool IsWeaponReloadable() const override final { return false; } #ifdef CLIENT_DLL virtual bool ShouldDraw() final; diff --git a/src/game/shared/neo/weapons/weapon_neobasecombatweapon.h b/src/game/shared/neo/weapons/weapon_neobasecombatweapon.h index 99bd3d52f7..eb08336c7d 100644 --- a/src/game/shared/neo/weapons/weapon_neobasecombatweapon.h +++ b/src/game/shared/neo/weapons/weapon_neobasecombatweapon.h @@ -145,6 +145,7 @@ class CNEOBaseCombatWeapon : public CBaseHL2MPCombatWeapon virtual bool Reload( void ) override; virtual void FinishReload(void) override; + virtual bool IsWeaponReloadable(void) const { return true; } virtual bool CanBeSelected(void) override; virtual bool IsFollowingEntity() override { From c854f68e67ae177d90a77f866c71864730959529 Mon Sep 17 00:00:00 2001 From: Alan Shen Date: Wed, 2 Sep 2026 20:05:22 -0600 Subject: [PATCH 2/2] Define unreloadable ghost and throwable explosives --- src/game/shared/neo/weapons/weapon_ghost.h | 1 + src/game/shared/neo/weapons/weapon_neobaseprojectile.h | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/game/shared/neo/weapons/weapon_ghost.h b/src/game/shared/neo/weapons/weapon_ghost.h index b84a0dc408..75c4f6f216 100644 --- a/src/game/shared/neo/weapons/weapon_ghost.h +++ b/src/game/shared/neo/weapons/weapon_ghost.h @@ -65,6 +65,7 @@ class CWeaponGhost : public CNEOBaseCombatWeapon virtual void Equip(CBaseCombatCharacter *pNewOwner) override; bool CanBePickedUpByClass(int classId) OVERRIDE; virtual bool CanAim() final { return false; } + virtual bool IsWeaponReloadable(void) const override final { return false; } NEO_WEP_BITS_UNDERLYING_TYPE WeaponIndex() const override { return NEO_WIDX_GHOST; } virtual NEO_WEP_BITS_UNDERLYING_TYPE GetNeoWepBits(void) const { return NEO_WEP_GHOST; } diff --git a/src/game/shared/neo/weapons/weapon_neobaseprojectile.h b/src/game/shared/neo/weapons/weapon_neobaseprojectile.h index ea4a870f6e..39c2ee2b86 100644 --- a/src/game/shared/neo/weapons/weapon_neobaseprojectile.h +++ b/src/game/shared/neo/weapons/weapon_neobaseprojectile.h @@ -7,6 +7,8 @@ class CNEOBaseProjectile : public CNEOBaseCombatWeapon { DECLARE_CLASS(CNEOBaseProjectile, CNEOBaseProjectile); +public: + virtual bool IsWeaponReloadable(void) const override { return false; } protected: void GetThrowPos(const Vector& throwFwd, const Vector& pos, Vector& outPos) const; inline void GetThrowPos(const Vector& throwFwd, Vector& posInPlace) const