]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
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 cce5963990893d7a4178e8b7d5e0ddd7895b886e..8a17ef6a1dd44abfca2b064b20434285a5df1054 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 4af13e10228d101f414d61feae9ad9b4adb9b132..baee4ac532888599a7e3ff786bbeceb8363e6a60 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 eea33ddb7b98e71c762a7fc09f9d7f41856c7558..156c37f2629528f91e750303eecad20d34cd87e6 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);