X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_weapons.qc;h=b1f6aabba106d9728c27f967dab608f6a365a0ad;hb=8edf812eab35c10b402dbcdf11b5d36be95261bb;hp=4a333934ae84a5ddc83f4281e2f7406daff1ef9a;hpb=df90a2b0763b3e68025a66c7c5604b7542912af8;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cl_weapons.qc b/qcsrc/server/cl_weapons.qc index 4a333934a..b1f6aabba 100644 --- a/qcsrc/server/cl_weapons.qc +++ b/qcsrc/server/cl_weapons.qc @@ -17,7 +17,7 @@ void W_SwitchWeapon(float imp) { W_TriggerReload(); } -}; +} .float weaponcomplainindex; float W_GetCycleWeapon(entity pl, string weaponorder, float dir, float imp, float complain, float skipmissing) @@ -149,14 +149,14 @@ void W_LastWeapon() float w_getbestweapon(entity e) { return W_GetCycleWeapon(e, e.cvar_cl_weaponpriority, 0, -1, FALSE, TRUE); -}; +} // generic weapons table // TODO should they be macros instead? float weapon_action(float wpn, float wrequest) { return (get_weaponinfo(wpn)).weapon_func(wrequest); -}; +} string W_Name(float weaponid) { @@ -220,7 +220,25 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto self = oldself; if(startitem_failed) return string_null; - if(doreduce) + if(doreduce && g_weapon_stay == 2) + { + for(i = 0, j = 1; i < 24; ++i, j *= 2) + { + 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) + { + own.ammofield += self.(weapon_load[self.weapon]); + self.(weapon_load[self.weapon]) = -1; // schedule the weapon for reloading + } + } + } + } + else if(doreduce) { for(i = 0, j = 1; i < 24; ++i, j *= 2) { @@ -245,6 +263,7 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto wep.glowmod = own.weaponentity_glowmod; wep.think = thrown_wep_think; wep.nextthink = time + 0.5; + wep.pickup_anyway = TRUE; // these are ALWAYS pickable return s; } } @@ -287,7 +306,7 @@ float W_IsWeaponThrowable(float w) // toss current weapon void W_ThrowWeapon(vector velo, vector delta, float doreduce) { - local float w, wb; + float w, wb; string a; w = self.weapon; @@ -297,8 +316,6 @@ void W_ThrowWeapon(vector velo, vector delta, float doreduce) return; if(!autocvar_g_weapon_throwable) return; - if(autocvar_g_weapon_stay == 1) - return; if(self.weaponentity.state != WS_READY) return; if(!W_IsWeaponThrowable(w)) @@ -317,7 +334,7 @@ void W_ThrowWeapon(vector velo, vector delta, float doreduce) sprint(self, strcat("You dropped the ^2", W_Name(w), "\n")); else sprint(self, strcat("You dropped the ^2", W_Name(w), " with ", a, "\n")); -}; +} // Bringed back weapon frame void W_WeaponFrame() @@ -414,7 +431,7 @@ void W_WeaponFrame() // call the think code which may fire the weapon // and do so multiple times to resolve framerate dependency issues if the // server framerate is very low and the weapon fire rate very high - local float c; + float c; c = 0; while (c < W_TICSPERFRAME) { @@ -469,4 +486,4 @@ void W_WeaponFrame() else self.currentammo = 1; #endif -}; +}