X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fw_rocketlauncher.qc;h=c109fc796b68afeb88d1b62d683083bd33062c29;hp=f6975b3b6a0d13d6903830adc2526c8c9940110f;hb=4fc59bbd7e2d4f25ba21952ed50ae754295a7faa;hpb=99cb391b8d83f0efdb2c9aeb7ccc50683dfd0b55 diff --git a/qcsrc/server/w_rocketlauncher.qc b/qcsrc/server/w_rocketlauncher.qc index f6975b3b6a..c109fc796b 100644 --- a/qcsrc/server/w_rocketlauncher.qc +++ b/qcsrc/server/w_rocketlauncher.qc @@ -14,7 +14,7 @@ void W_Rocket_Unregister() } } -void W_Rocket_Explode (void) +void W_Rocket_Explode () { W_Rocket_Unregister(); @@ -26,6 +26,7 @@ void W_Rocket_Explode (void) self.event_damage = SUB_Null; self.takedamage = DAMAGE_NO; + RadiusDamage (self, self.owner, cvar("g_balance_rocketlauncher_damage"), cvar("g_balance_rocketlauncher_edgedamage"), cvar("g_balance_rocketlauncher_radius"), world, cvar("g_balance_rocketlauncher_force"), self.projectiledeathtype, other); if (self.owner.weapon == WEP_ROCKET_LAUNCHER) @@ -42,6 +43,29 @@ void W_Rocket_Explode (void) remove (self); } +void W_Rocket_DoRemoteExplode () +{ + W_Rocket_Unregister(); + + self.event_damage = SUB_Null; + self.takedamage = DAMAGE_NO; + + RadiusDamage (self, self.owner, cvar("g_balance_rocketlauncher_remote_damage"), cvar("g_balance_rocketlauncher_remote_edgedamage"), cvar("g_balance_rocketlauncher_remote_radius"), world, cvar("g_balance_rocketlauncher_remote_force"), self.projectiledeathtype | HITTYPE_BOUNCE, world); + + if (self.owner.weapon == WEP_ROCKET_LAUNCHER) + { + if(self.owner.ammo_rockets < cvar("g_balance_rocketlauncher_ammo")) + { + self.owner.cnt = WEP_ROCKET_LAUNCHER; + ATTACK_FINISHED(self.owner) = time; + self.owner.switchweapon = w_getbestweapon(self.owner); + } + if(g_laserguided_missile) + ATTACK_FINISHED(self.owner) = time + cvar("g_balance_rocketlauncher_refire") * W_WeaponRateFactor(); + } + remove (self); +} + entity FindLaserTarget(entity e, float dist_variance, float dot_variance) { entity head, selected; @@ -104,12 +128,7 @@ void W_Rocket_RemoteExplode() : (vlen(NearestPointOnBox(self.owner, self.origin) - self.origin) > cvar("g_balance_rocketlauncher_radius")) // safety device ) { - other = world; - self.projectiledeathtype |= HITTYPE_BOUNCE; - W_Rocket_Explode (); - } - else - { + W_Rocket_DoRemoteExplode(); } } } @@ -272,9 +291,13 @@ void W_Rocket_Think (void) void W_Rocket_Touch (void) { + if(WarpZone_Projectile_Touch()) + { + if(wasfreed(self)) + W_Rocket_Unregister(); + return; + } W_Rocket_Unregister(); - - PROJECTILE_TOUCH; W_Rocket_Explode (); } @@ -344,6 +367,7 @@ void W_Rocket_Attack (void) W_AttachToShotorg(flash, '5 0 0'); // common properties + other = missile; MUTATOR_CALLHOOK(EditProjectile); } void spawnfunc_weapon_rocketlauncher (void); // defined in t_items.qc @@ -544,17 +568,6 @@ float w_rlauncher(float req) } else if (req == WR_CHECKAMMO2) return FALSE; - else if (req == WR_SUICIDEMESSAGE) - w_deathtypestring = "exploded"; - else if (req == WR_KILLMESSAGE) - { - if(w_deathtype & HITTYPE_BOUNCE) // (remote detonation) - w_deathtypestring = "got too close to #'s rocket"; - else if(w_deathtype & HITTYPE_SPLASH) - w_deathtypestring = "almost dodged #'s rocket"; - else - w_deathtypestring = "ate #'s rocket"; - } else if (req == WR_RESETPLAYER) { self.rl_release = 0; @@ -577,6 +590,17 @@ float w_rlauncher(float req) { precache_sound("weapons/rocket_impact.wav"); } + else if (req == WR_SUICIDEMESSAGE) + w_deathtypestring = "%s exploded"; + else if (req == WR_KILLMESSAGE) + { + if(w_deathtype & HITTYPE_BOUNCE) // (remote detonation) + w_deathtypestring = "%s got too close to %s's rocket"; + else if(w_deathtype & HITTYPE_SPLASH) + w_deathtypestring = "%s almost dodged %s's rocket"; + else + w_deathtypestring = "%s ate %s's rocket"; + } return TRUE; } #endif