X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fw_electro.qc;h=6634837db6131f9da80daf588a54b53ceae2c008;hp=a98c5a9153a0214842e84a67edc3bbb1bdf8529c;hb=4fc59bbd7e2d4f25ba21952ed50ae754295a7faa;hpb=aa4c896acf8088d26fcbd5ff4e3f6e7a0acb0600 diff --git a/qcsrc/server/w_electro.qc b/qcsrc/server/w_electro.qc index a98c5a915..6634837db 100644 --- a/qcsrc/server/w_electro.qc +++ b/qcsrc/server/w_electro.qc @@ -136,6 +136,8 @@ void W_Electro_Attack() //sounds bad CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM, TRUE); + + other = proj; MUTATOR_CALLHOOK(EditProjectile); } void W_Electro_Attack2() @@ -182,6 +184,8 @@ void W_Electro_Attack2() #endif CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO, FALSE); // no culling, it has sound + + other = proj; MUTATOR_CALLHOOK(EditProjectile); } .vector hook_start, hook_end; @@ -216,23 +220,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")); @@ -243,8 +256,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); - Damage_RecordDamage(self.owner, WEP_ELECTRO, cvar("g_balance_electro_primary_damage") * 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); @@ -352,7 +368,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(); } @@ -365,7 +381,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) @@ -398,7 +421,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"); }