]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/cl_weapons.qc
fix a stupid interaction between weapon throwing and weapon load (loaded ammo was...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / cl_weapons.qc
index 73d610b6c65a41c69eb4e00defc8128b3421f190..94eaccd2daf4a4cc8a46b3afc9982c122b006e38 100644 (file)
@@ -205,27 +205,27 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto
 
        if(W_WeaponBit(wpn) & WEPBIT_SUPERWEAPONS)
        {
-               if(self.items & IT_UNLIMITED_SUPERWEAPONS)
+               if(own.items & IT_UNLIMITED_SUPERWEAPONS)
                {
                        wep.superweapons_finished = time + autocvar_g_balance_superweapons_time;
                }
                else
                {
-                       float superweapons = 0;
+                       float superweapons = 1;
                        for(i = WEP_FIRST; i <= WEP_LAST; ++i)
-                               if(self.weapons & WEPBIT_SUPERWEAPONS & W_WeaponBit(i))
+                               if(own.weapons & WEPBIT_SUPERWEAPONS & W_WeaponBit(i))
                                        ++superweapons;
                        if(superweapons <= 1)
                        {
-                               wep.superweapons_finished = self.superweapons_finished;
-                               self.superweapons_finished = 0;
+                               wep.superweapons_finished = own.superweapons_finished;
+                               own.superweapons_finished = 0;
                        }
                        else
                        {
-                               float timeleft = self.superweapons_finished - time;
+                               float timeleft = own.superweapons_finished - time;
                                float weptimeleft = timeleft / superweapons;
                                wep.superweapons_finished = time + weptimeleft;
-                               self.superweapons_finished -= weptimeleft;
+                               own.superweapons_finished -= weptimeleft;
                        }
                }
        }
@@ -262,7 +262,6 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto
                                if(wa & j)
                                {
                                        ammofield = Item_CounterField(j);
-                                       wep.ammofield = 0;
 
                                        // if our weapon is loaded, give its load back to the player
                                        if(self.(weapon_load[self.weapon]) > 0)
@@ -270,6 +269,8 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto
                                                own.ammofield += self.(weapon_load[self.weapon]);
                                                self.(weapon_load[self.weapon]) = -1; // schedule the weapon for reloading
                                        }
+
+                                       wep.ammofield = 0;
                                }
                        }
                }
@@ -280,10 +281,6 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto
                                if(wa & j)
                                {
                                        ammofield = Item_CounterField(j);
-                                       thisammo = min(own.ammofield, wep.ammofield);
-                                       wep.ammofield = thisammo;
-                                       own.ammofield -= thisammo;
-                                       s = strcat(s, " and ", ftos(thisammo), " ", Item_CounterFieldName(j));
 
                                        // if our weapon is loaded, give its load back to the player
                                        if(self.(weapon_load[self.weapon]) > 0)
@@ -291,6 +288,11 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto
                                                own.ammofield += self.(weapon_load[self.weapon]);
                                                self.(weapon_load[self.weapon]) = -1; // schedule the weapon for reloading
                                        }
+
+                                       thisammo = min(own.ammofield, wep.ammofield);
+                                       wep.ammofield = thisammo;
+                                       own.ammofield -= thisammo;
+                                       s = strcat(s, " and ", ftos(thisammo), " ", Item_CounterFieldName(j));
                                }
                        }
                        s = substring(s, 5, -1);