X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_weapons.qc;h=afe3088d431cd40507f61ce543442da20f80fa8c;hb=6a49bef4b396e0fbedaf2a91460896a58dbe5702;hp=9e59a4c5554edb9205d74ea6549893aff2641b06;hpb=42b501c5da481b2598db9bfc1b93b06fede3657a;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cl_weapons.qc b/qcsrc/server/cl_weapons.qc index 9e59a4c55..afe3088d4 100644 --- a/qcsrc/server/cl_weapons.qc +++ b/qcsrc/server/cl_weapons.qc @@ -284,8 +284,6 @@ void W_ThrowWeapon(vector velo, vector delta, float doreduce) w = self.weapon; if (w == 0) return; // just in case - if(self.weapon_forbidchange) - return; if(MUTATOR_CALLHOOK(ForbidThrowCurrentWeapon)) return; if(!autocvar_g_weapon_throwable) @@ -332,6 +330,7 @@ void W_WeaponFrame() if(!self.switchweapon) { self.weapon = 0; + self.switchingweapon = 0; self.weaponentity.state = WS_CLEAR; self.weaponname = ""; self.items &~= IT_AMMO; @@ -348,6 +347,9 @@ void W_WeaponFrame() { if (self.weaponentity.state == WS_CLEAR) { + // end switching! + self.switchingweapon = self.switchweapon; + //setanim(self, self.anim_draw, FALSE, TRUE, TRUE); self.weaponentity.state = WS_RAISE; weapon_action(self.switchweapon, WR_SETUP); @@ -368,14 +370,21 @@ void W_WeaponFrame() weapon_thinkf(WFRAME_IDLE, autocvar_g_balance_weaponswitchdelay, w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0'); } + else if (self.weaponentity.state == WS_DROP) + { + // in dropping phase we can switch at any time + self.switchingweapon = self.switchweapon; + } else if (self.weaponentity.state == WS_READY) { + // start switching! + self.switchingweapon = self.switchweapon; + #ifndef INDEPENDENT_ATTACK_FINISHED if(ATTACK_FINISHED(self) <= time + self.weapon_frametime * 0.5) { #endif - // UGLY WORKAROUND: play this on CH_WEAPON_B so it can't cut off fire sounds - sound (self, CH_WEAPON_B, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM); + sound (self, CH_WEAPON_SINGLE, "weapons/weapon_switch.wav", VOL_BASE, ATTN_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); @@ -406,13 +415,16 @@ void W_WeaponFrame() W_SwitchWeapon_Force(self, w_getbestweapon(self)); wb = 0; } + + v_forward = fo; + v_right = ri; + v_up = up; + if(wb) - { - v_forward = fo; - v_right = ri; - v_up = up; weapon_action(self.weapon, WR_THINK); - } + else + weapon_action(self.weapon, WR_GONETHINK); + if (time + self.weapon_frametime * 0.5 >= self.weapon_nextthink) { if(self.weapon_think)