X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fw_electro.qc;h=2268ca7cb150a558e9f83d325027213b238b4beb;hp=2824b96d58622b2e04f98fd865a6ff1bc5dbba32;hb=99e0de6d197aae596bbd1a1e2154f9a49029a63b;hpb=98d21fdbeb61ce071ad10b1d02a38b57be938228 diff --git a/qcsrc/server/w_electro.qc b/qcsrc/server/w_electro.qc index 2824b96d58..2268ca7cb1 100644 --- a/qcsrc/server/w_electro.qc +++ b/qcsrc/server/w_electro.qc @@ -195,6 +195,7 @@ float lgbeam_send(entity to, float sf) if(sf & 1) { WriteByte(MSG_ENTITY, num_for_edict(self.owner)); + WriteCoord(MSG_ENTITY, cvar("g_balance_electro_primary_range")); } if(sf & 2) { @@ -215,23 +216,32 @@ float lgbeam_send(entity to, float sf) void lgbeam_think() { self.owner.prevlgfire = time; - if (self.owner.weaponentity.state != WS_INUSE || (self.owner.ammo_cells <= 0 && !(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)) || self != self.owner.lgbeam || self.owner.deadflag != DEAD_NO || !self.owner.BUTTON_ATCK) + if (self != self.owner.lgbeam) { remove(self); return; } + if (self.owner.weaponentity.state != WS_INUSE || (self.owner.ammo_cells <= 0 && !(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)) || self.owner.deadflag != DEAD_NO || !self.owner.BUTTON_ATCK) + { + if(self == self.owner.lgbeam) + self.owner.lgbeam = world; + remove(self); + return; + } self.nextthink = time; makevectors(self.owner.v_angle); - float dt; + float dt, f; dt = frametime; if not(self.owner.items & IT_UNLIMITED_WEAPON_AMMO) { if(cvar("g_balance_electro_primary_ammo")) - dt = min(frametime, self.owner.ammo_cells / cvar("g_balance_electro_primary_ammo")); - self.owner.ammo_cells = max(0, self.owner.ammo_cells - cvar("g_balance_electro_primary_ammo") * frametime); + { + dt = min(dt, self.owner.ammo_cells / cvar("g_balance_electro_primary_ammo")); + self.owner.ammo_cells = max(0, self.owner.ammo_cells - cvar("g_balance_electro_primary_ammo") * frametime); + } } W_SetupShot_Range(self.owner, TRUE, 0, "", cvar("g_balance_electro_primary_damage") * dt, cvar("g_balance_electro_primary_range")); @@ -242,7 +252,11 @@ void lgbeam_think() { vector force; force = w_shotdir * cvar("g_balance_electro_primary_force") + '0 0 1' * cvar("g_balance_electro_primary_force_up"); - Damage (trace_ent, self.owner, self.owner, cvar("g_balance_electro_primary_damage") * dt, WEP_ELECTRO, trace_endpos, force * dt); + + f = ExponentialFalloff(cvar("g_balance_electro_primary_falloff_mindist"), cvar("g_balance_electro_primary_falloff_maxdist"), cvar("g_balance_electro_primary_falloff_halflifedist"), vlen(WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos) - w_shotorg)); + + Damage (trace_ent, self.owner, self.owner, cvar("g_balance_electro_primary_damage") * dt * f, WEP_ELECTRO, trace_endpos, force * dt); + Damage_RecordDamage(self.owner, WEP_ELECTRO, cvar("g_balance_electro_primary_damage") * dt * f); } W_Plasma_TriggerCombo(trace_endpos, cvar("g_balance_electro_primary_comboradius"), self.owner); @@ -350,7 +364,7 @@ float w_electro(float req) { if(cvar("g_balance_electro_lightning")) { - if (self.BUTTON_ATCK_prev == 0) + if ((!self.lgbeam) || wasfreed(self.lgbeam)) { W_Electro_Attack3(); } @@ -363,7 +377,14 @@ float w_electro(float req) weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_electro_primary_animtime"), w_ready); } } else { - self.BUTTON_ATCK_prev = 0; + if(cvar("g_balance_electro_lightning")) + { + if (self.BUTTON_ATCK_prev != 0) + { + ATTACK_FINISHED(self) = time + cvar("g_balance_electro_primary_refire") * W_WeaponRateFactor(); + } + self.BUTTON_ATCK_prev = 0; + } } if (self.BUTTON_ATCK2) @@ -396,7 +417,7 @@ float w_electro(float req) else if (req == WR_CHECKAMMO1) { if(cvar("g_balance_electro_lightning")) - return self.ammo_cells >= cvar("g_balance_electro_primary_ammo") * cvar("g_balance_electro_primary_refire"); + return !cvar("g_balance_electro_primary_ammo") || (self.ammo_cells > 0); else return self.ammo_cells >= cvar("g_balance_electro_primary_ammo"); } @@ -447,27 +468,27 @@ float w_electro(float req) else if (req == WR_SUICIDEMESSAGE) { if(w_deathtype & HITTYPE_SECONDARY) - w_deathtypestring = "could not remember where they put plasma"; + w_deathtypestring = "%s could not remember where they put plasma"; else - w_deathtypestring = "played with plasma"; + w_deathtypestring = "%s played with plasma"; } else if (req == WR_KILLMESSAGE) { if(w_deathtype & HITTYPE_SECONDARY) { if(w_deathtype & HITTYPE_SPLASH) // unchecked: BOUNCE - w_deathtypestring = "just noticed #'s blue ball"; + w_deathtypestring = "%s just noticed %s's blue ball"; else // unchecked: BOUNCE - w_deathtypestring = "got in touch with #'s blue ball"; + w_deathtypestring = "%s got in touch with %s's blue ball"; } else { if(w_deathtype & HITTYPE_BOUNCE) // combo - w_deathtypestring = "felt the electrifying air of #'s combo"; + w_deathtypestring = "%s felt the electrifying air of %s's combo"; else if(w_deathtype & HITTYPE_SPLASH) - w_deathtypestring = "got too close to #'s blue beam"; + w_deathtypestring = "%s got too close to %s's blue beam"; else - w_deathtypestring = "was blasted by #'s blue beam"; + w_deathtypestring = "%s was blasted by %s's blue beam"; } } return TRUE;