When using specific weapon binds, if the player doesn't have the weapon, attempt...
authorMario <mario@smbclan.net>
Fri, 12 Oct 2018 19:44:54 +0000 (05:44 +1000)
committerMario <mario@smbclan.net>
Fri, 12 Oct 2018 19:44:54 +0000 (05:44 +1000)
qcsrc/server/impulse.qc
qcsrc/server/weapons/selection.qc
qcsrc/server/weapons/selection.qh

index cce5963..8a17ef6 100644 (file)
@@ -149,7 +149,7 @@ X(9, next)
                for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot) \
                { \
                        .entity weaponentity = weaponentities[slot]; \
-                       W_SwitchWeapon(this, Weapons_from(WEP_FIRST + i), weaponentity); \
+                       W_SwitchWeapon_TryOthers(this, Weapons_from(WEP_FIRST + i), weaponentity); \
                        if(slot == 0 && autocvar_g_weaponswitch_debug != 1) \
                                break; \
                } \
index 4af13e1..baee4ac 100644 (file)
@@ -282,6 +282,25 @@ void W_SwitchWeapon(entity this, Weapon w, .entity weaponentity)
        }
 }
 
+void W_SwitchWeapon_TryOthers(entity this, Weapon w, .entity weaponentity)
+{
+       if(this.(weaponentity).m_switchweapon != w)
+       {
+               if(client_hasweapon(this, w, weaponentity, true, true)) // NOTE: still complains
+                       W_SwitchWeapon_Force(this, w, weaponentity);
+               else
+               {
+                       this.(weaponentity).selectweapon = w.m_id; // update selectweapon anyway
+                       W_NextWeaponOnImpulse(this, w.impulse, weaponentity);
+               }
+       }
+       else if(!forbidWeaponUse(this))
+       {
+               entity actor = this;
+               w.wr_reload(w, actor, weaponentity);
+       }
+}
+
 void W_CycleWeapon(entity this, string weaponorder, float dir, .entity weaponentity)
 {
        float w;
index eea33dd..156c37f 100644 (file)
@@ -19,6 +19,7 @@ void W_SwitchWeapon_Force(Player this, Weapon w, .entity weaponentity);
 // perform weapon to attack (weaponstate and attack_finished check is here)
 void W_SwitchToOtherWeapon(entity this, .entity weaponentity);
 void W_SwitchWeapon(entity this, Weapon imp, .entity weaponentity);
+void W_SwitchWeapon_TryOthers(entity this, Weapon imp, .entity weaponentity);
 
 void W_CycleWeapon(entity this, string weaponorder, float dir, .entity weaponentity);