X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_weapons.qc;h=3106169008cad0d4ec5029cfe9d2dbb06c32c22c;hb=ff52b5b146e83d1d61dc7304918fdb1f5b7d63f3;hp=6a28a1154d91ac9769ce54f0ea2f8b92176b5ef5;hpb=fdb8fddad19ce594e98563dd156fa349c0a834c6;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cl_weapons.qc b/qcsrc/server/cl_weapons.qc index 6a28a1154..310616900 100644 --- a/qcsrc/server/cl_weapons.qc +++ b/qcsrc/server/cl_weapons.qc @@ -1,4 +1,4 @@ -void W_Reload() +void W_TriggerReload() { weapon_action(self.weapon, WR_RELOAD); } @@ -15,7 +15,7 @@ void W_SwitchWeapon(float imp) } else { - W_Reload(); + W_TriggerReload(); } }; @@ -197,6 +197,7 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto self = oldself; if(startitem_failed) return string_null; + wep.glowmod = own.weaponentity_glowmod; wep.think = thrown_wep_think; wep.nextthink = time + 0.5; return ""; @@ -221,10 +222,18 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto 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) + { + own.ammofield += self.weapon_load[self.weapon]; + self.weapon_load[self.weapon] = -1; // schedule the weapon for reloading + } } } s = substring(s, 5, -1); } + wep.glowmod = own.weaponentity_glowmod; wep.think = thrown_wep_think; wep.nextthink = time + 0.5; return s; @@ -275,6 +284,8 @@ 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) @@ -312,7 +323,7 @@ void W_WeaponFrame() if(((arena_roundbased || g_ca || g_freezetag) && time < warmup) || ((time < game_starttime) && !autocvar_sv_ready_restart_after_countdown)) return; - if(g_freezetag && self.freezetag_frozen == 1) + if(self.freezetag_frozen == 1) return; if (!self.weaponentity || self.health < 1) @@ -337,9 +348,21 @@ void W_WeaponFrame() { if (self.weaponentity.state == WS_CLEAR) { - setanim(self, self.anim_draw, FALSE, TRUE, TRUE); + //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 + { + self.clip_load = self.weapon_load[self.switchweapon]; + self.clip_size = cvar(strcat("g_balance_", e.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); @@ -351,8 +374,7 @@ void W_WeaponFrame() if(ATTACK_FINISHED(self) <= time + self.weapon_frametime * 0.5) { #endif - // UGLY WORKAROUND: play this on CHAN_WEAPON2 so it can't cut off fire sounds - sound (self, CHAN_WEAPON2, "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); @@ -388,7 +410,6 @@ void W_WeaponFrame() v_forward = fo; v_right = ri; v_up = up; - self.weaponentity_glowmod = '0 0 0'; // reset glowmod, weapon think function only *might* set it weapon_action(self.weapon, WR_THINK); } if (time + self.weapon_frametime * 0.5 >= self.weapon_nextthink)