X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_weapons.qc;h=5e704a496bebc259fea97e0cfd9cd4d35e5ccf33;hb=95e6d244a74e5f62b27055efd00563923c2acbbe;hp=0014e9182d4f4c864559af9f5982902dbc37efcb;hpb=5b9c815160b06ce5d741df5fb4497242c3419f9a;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cl_weapons.qc b/qcsrc/server/cl_weapons.qc index 0014e9182..5e704a496 100644 --- a/qcsrc/server/cl_weapons.qc +++ b/qcsrc/server/cl_weapons.qc @@ -188,7 +188,7 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto wep.flags |= FL_TOSSED; wep.colormap = own.colormap; - if(WEPSET_CONTAINS_AW(WEPBIT_SUPERWEAPONS, wpn)) + if(WepSet_FromWeapon(wpn) & WEPSET_SUPERWEAPONS) { if(own.items & IT_UNLIMITED_SUPERWEAPONS) { @@ -198,8 +198,8 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto { float superweapons = 1; for(i = WEP_FIRST; i <= WEP_LAST; ++i) - if(WEPSET_CONTAINS_AW(WEPBIT_SUPERWEAPONS, i)) - if(WEPSET_CONTAINS_EW(own, i)) + if(WepSet_FromWeapon(i) & WEPSET_SUPERWEAPONS) + if(own.weapons & WepSet_FromWeapon(i)) ++superweapons; if(superweapons <= 1) { @@ -309,7 +309,7 @@ float W_IsWeaponThrowable(float w) return 0; wa = W_AmmoItemCode(w); - if(WEPSET_CONTAINS_AW(start_weapons, w)) + if(start_weapons & WepSet_FromWeapon(w)) { // start weapons that take no ammo can't be dropped (this prevents dropping the laser, as long as it continues to use no ammo) if(start_items & IT_UNLIMITED_WEAPON_AMMO) @@ -330,6 +330,8 @@ void W_ThrowWeapon(vector velo, vector delta, float doreduce) w = self.weapon; if (w == 0) return; // just in case + if(self.frozen) + return; if(MUTATOR_CALLHOOK(ForbidThrowCurrentWeapon)) return; if(!autocvar_g_weapon_throwable) @@ -339,9 +341,9 @@ void W_ThrowWeapon(vector velo, vector delta, float doreduce) if(!W_IsWeaponThrowable(w)) return; - if(!WEPSET_CONTAINS_EW(self, w)) + if(!(self.weapons & WepSet_FromWeapon(w))) return; - WEPSET_ANDNOT_EW(self, w); + self.weapons &= ~WepSet_FromWeapon(w); W_SwitchWeapon_Force(self, w_getbestweapon(self)); a = W_ThrowNewWeapon(self, w, doreduce, self.origin + delta, velo); @@ -358,7 +360,7 @@ float forbidWeaponUse() return 1; if(self.player_blocked) return 1; - if(self.freezetag_frozen) + if(self.frozen) return 1; return 0; } @@ -386,7 +388,7 @@ void W_WeaponFrame() self.switchingweapon = 0; self.weaponentity.state = WS_CLEAR; self.weaponname = ""; - self.items &~= IT_AMMO; + self.items &= ~IT_AMMO; return; } @@ -403,24 +405,25 @@ void W_WeaponFrame() // end switching! self.switchingweapon = self.switchweapon; + entity newwep = get_weaponinfo(self.switchweapon); + //setanim(self, self.anim_draw, FALSE, TRUE, TRUE); self.weaponentity.state = WS_RAISE; weapon_action(self.switchweapon, WR_SETUP); // set our clip load to the load of the weapon we switched to, if it's reloadable - entity e; - e = get_weaponinfo(self.switchweapon); - if(e.spawnflags & WEP_FLAG_RELOADABLE && cvar(strcat("g_balance_", e.netname, "_reload_ammo"))) // prevent accessing undefined cvars + if(newwep.spawnflags & WEP_FLAG_RELOADABLE && cvar(strcat("g_balance_", newwep.netname, "_reload_ammo"))) // prevent accessing undefined cvars { self.clip_load = self.(weapon_load[self.switchweapon]); - self.clip_size = cvar(strcat("g_balance_", e.netname, "_reload_ammo")); + self.clip_size = cvar(strcat("g_balance_", newwep.netname, "_reload_ammo")); } else self.clip_load = self.clip_size = 0; // VorteX: add player model weapon select frame here // setcustomframe(PlayerWeaponRaise); - weapon_thinkf(WFRAME_IDLE, autocvar_g_balance_weaponswitchdelay, w_ready); + weapon_thinkf(WFRAME_IDLE, cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname)), w_ready); + //print(sprintf("W_WeaponFrame(): cvar: %s, value: %f\n", sprintf("g_balance_%s_switchdelay_raise", newwep.netname), cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname)))); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0'); } else if (self.weaponentity.state == WS_DROP) @@ -433,14 +436,17 @@ void W_WeaponFrame() // start switching! self.switchingweapon = self.switchweapon; + entity oldwep = get_weaponinfo(self.weapon); + #ifndef INDEPENDENT_ATTACK_FINISHED if(ATTACK_FINISHED(self) <= time + self.weapon_frametime * 0.5) { #endif - sound (self, CH_WEAPON_SINGLE, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_WEAPON_SINGLE, "weapons/weapon_switch.wav", VOL_BASE, ATTEN_NORM); self.weaponentity.state = WS_DROP; // set up weapon switch think in the future, and start drop anim - weapon_thinkf(WFRAME_DONTCHANGE, autocvar_g_balance_weaponswitchdelay, w_clear); + weapon_thinkf(WFRAME_DONTCHANGE, cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname)), w_clear); + //print(sprintf("W_WeaponFrame(): cvar: %s, value: %f\n", sprintf("g_balance_%s_switchdelay_drop", oldwep.netname), cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname)))); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE); #ifndef INDEPENDENT_ATTACK_FINISHED } @@ -463,7 +469,7 @@ void W_WeaponFrame() while (c < W_TICSPERFRAME) { c = c + 1; - if(w && !WEPSET_CONTAINS_EW(self, w)) + if(w && !(self.weapons & WepSet_FromWeapon(w))) { if(self.weapon == self.switchweapon) W_SwitchWeapon_Force(self, w_getbestweapon(self));