From e23138171abedf2e0c2fa1c10925223f6ed1b248 Mon Sep 17 00:00:00 2001 From: Jakob MG Date: Sat, 23 Oct 2010 21:30:24 +0200 Subject: [PATCH] Fix uzi flash entity leakage --- .../server/tturrets/units/unit_machinegun.qc | 15 +---- qcsrc/server/tturrets/units/unit_walker.qc | 16 +---- qcsrc/server/vehicles/spiderbot.qc | 24 ++------ qcsrc/server/w_uzi.qc | 60 +++++++++++-------- 4 files changed, 46 insertions(+), 69 deletions(-) diff --git a/qcsrc/server/tturrets/units/unit_machinegun.qc b/qcsrc/server/tturrets/units/unit_machinegun.qc index 4777722da8..c9a37416b6 100644 --- a/qcsrc/server/tturrets/units/unit_machinegun.qc +++ b/qcsrc/server/tturrets/units/unit_machinegun.qc @@ -5,9 +5,6 @@ void turret_machinegun_attack(); //.float bulletcounter; void turret_machinegun_attack() { - - entity flash; - sound (self, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM); fireBallisticBullet (self.tur_shotorg, self.tur_shotdir_updated,self.shot_spread, self.shot_speed, 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET, 0, 1, cvar("g_balance_uzi_bulletconstant")); endFireBallisticBullet(); @@ -15,16 +12,8 @@ void turret_machinegun_attack() //w_deathtypestring = "had an alergic reaction due to 10 kilos of led"; te_smallflash(self.tur_shotorg); - // muzzle flash for 3rd person view - flash = spawn(); - setmodel(flash, "models/uziflash.md3"); // precision set below - setattachment(flash, self.tur_head, "tag_fire"); - flash.think = W_Uzi_Flash_Go; - flash.nextthink = time + 0.02; - flash.frame = 2; - flash.angles_z = flash.v_angle_z + random() * 180; - flash.alpha = 1; - flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION; + UziFlash(); + setattachment(self.muzzle_flash, self.tur_head, "tag_fire"); } diff --git a/qcsrc/server/tturrets/units/unit_walker.qc b/qcsrc/server/tturrets/units/unit_walker.qc index e12bbb8302..59aaf653de 100644 --- a/qcsrc/server/tturrets/units/unit_walker.qc +++ b/qcsrc/server/tturrets/units/unit_walker.qc @@ -615,26 +615,14 @@ void walker_postthink() void walker_attack() { - entity flash; - sound (self, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM); fireBallisticBullet (self.tur_shotorg, self.tur_shotdir_updated,self.shot_spread, self.shot_speed, 5, self.shot_dmg, 0, self.shot_force, DEATH_TURRET, 0, 1, cvar("g_balance_uzi_bulletconstant")); endFireBallisticBullet(); if (self.uzi_bulletcounter == 2) { - flash = spawn(); - - setmodel(flash, "models/uziflash.md3"); - setattachment(flash, self.tur_head, "tag_fire"); - - flash.scale = 3; - flash.think = W_Uzi_Flash_Go; - flash.nextthink = time + 0.02; - flash.frame = 2; - flash.angles_z = flash.v_angle_z + random() * 180; - flash.alpha = 1; - flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION; + UziFlash(); + setattachment(self.muzzle_flash, self.tur_head, "tag_fire"); self.uzi_bulletcounter = 0; } diff --git a/qcsrc/server/vehicles/spiderbot.qc b/qcsrc/server/vehicles/spiderbot.qc index ba4360550e..056249ed53 100644 --- a/qcsrc/server/vehicles/spiderbot.qc +++ b/qcsrc/server/vehicles/spiderbot.qc @@ -188,6 +188,7 @@ void spiderbot_rocket_do() self.gun2.cnt = time + self.attack_finished_single; } +/* void spiderbot_minigun_fire_Flash_Go() { if (self.frame > 10) { @@ -201,12 +202,12 @@ void spiderbot_minigun_fire_Flash_Go() { self.scale -= 0.01; self.nextthink = time + 0.02; } +*/ -void spiderbot_minigun_fire(entity gun,float trail) +void spiderbot_minigun_fire(entity gun, float trail) { - - entity flash; vector v; + v = gettaginfo(gun,gettagindex(gun,"barrels")); v_forward = normalize(v_forward); @@ -215,22 +216,9 @@ void spiderbot_minigun_fire(entity gun,float trail) fireBullet (v, v_forward, cvar("g_vehicle_spiderbot_minigun_spread"), cvar("g_vehicle_spiderbot_minigun_damage"), cvar("g_vehicle_spiderbot_minigun_spread"), DEATH_SBMINIGUN, 0); - if not (gun.enemy) - { - gun.enemy = spawn(); - setattachment(gun.enemy , gun, "barrels"); - setorigin(gun.enemy ,gun.enemy.origin + '52 0 0'); - } - flash = gun.enemy; - setmodel(flash, "models/uziflash.md3"); - flash.think = spiderbot_minigun_fire_Flash_Go; - flash.nextthink = time + 0.02; - flash.frame = 2; - flash.angles_z = flash.v_angle_z + random() * 180; - flash.alpha = 1; - flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION; - flash.scale = 1; + UziFlash(); + setattachment(self.muzzle_flash, self.tur_head, "tag_fire"); if(trail) trailparticles(self, particleeffectnum("EF_MGTURRETTRAIL"), v, trace_endpos); diff --git a/qcsrc/server/w_uzi.qc b/qcsrc/server/w_uzi.qc index b72e5ab0a4..788c9880fe 100644 --- a/qcsrc/server/w_uzi.qc +++ b/qcsrc/server/w_uzi.qc @@ -2,25 +2,49 @@ REGISTER_WEAPON(UZI, w_uzi, IT_NAILS, 3, WEP_FLAG_NORMAL | WEP_TYPE_HITSCAN, BOT_PICKUP_RATING_MID, "uzi", "uzi", "Machine Gun"); #else #ifdef SVQC +.entity muzzle_flash; + // leilei's fancy muzzleflash stuff -void W_Uzi_Flash_Go() { - if (self.alpha >= 0) - { - setmodel(self, ""); - return; - } +void Uzi_Flash_Go() +{ self.frame = self.frame + 2; self.scale = self.scale * 0.5; self.alpha = self.alpha - 0.25; - self.think = W_Uzi_Flash_Go; self.nextthink = time + 0.05; -}; + + if (self.alpha <= 0) + { + self.think = SUB_Remove; + self.nextthink = time; + self.owner.muzzle_flash = world; + return; + } + +} + +void UziFlash() +{ + if (self.muzzle_flash == world) + self.muzzle_flash = spawn(); + + // muzzle flash for 1st person view + setmodel(self.muzzle_flash, "models/uziflash.md3"); // precision set below + + self.muzzle_flash.scale = 0.75; + self.muzzle_flash.think = Uzi_Flash_Go; + self.muzzle_flash.nextthink = time + 0.02; + self.muzzle_flash.frame = 2; + self.muzzle_flash.alpha = 0.75; + self.muzzle_flash.angles_z = random() * 180; + self.muzzle_flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION; + self.muzzle_flash.owner = self; + + +} .float uzi_bulletcounter; void W_Uzi_Attack (float deathtype) { - local entity flash; - if not(self.items & IT_UNLIMITED_WEAPON_AMMO) { if (self.uzi_bulletcounter == 1) @@ -46,20 +70,8 @@ void W_Uzi_Attack (float deathtype) pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); - if ((self.muzzleflash == world) || wasfreed(self.muzzleflash)) - self.muzzleflash = spawn(); - - // muzzle flash for 1st person view - setmodel(self.muzzleflash, "models/uziflash.md3"); // precision set below - //SUB_SetFade(flash, time + 0.06, 0); - self.muzzleflash.scale = 0.75; - self.muzzleflash.think = W_Uzi_Flash_Go; - self.muzzleflash.nextthink = time + 0.02; - self.muzzleflash.frame = 2; - self.muzzleflash.alpha = 0.75; - self.muzzleflash.angles_z = random() * 180; - self.muzzleflash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION; - W_AttachToShotorg(self.muzzleflash, '5 0 0'); + UziFlash(); + W_AttachToShotorg(self.muzzle_flash, '5 0 0'); // casing code if (cvar("g_casings") >= 2) -- 2.39.2