From 086b82b9473c04549323844d2b0c6bbbfbde7e54 Mon Sep 17 00:00:00 2001 From: Samual Date: Fri, 30 Sep 2011 13:34:42 -0400 Subject: [PATCH] Fix some more bugs with W_CheckProjectileDamage and hagar -- should be pretty good now, but will still need more testing --- qcsrc/server/g_hook.qc | 2 +- qcsrc/server/w_common.qc | 33 ++++++++++++++++++++----------- qcsrc/server/w_fireball.qc | 2 +- qcsrc/server/w_grenadelauncher.qc | 2 +- qcsrc/server/w_hagar.qc | 2 ++ qcsrc/server/w_hook.qc | 2 +- qcsrc/server/w_rocketlauncher.qc | 2 +- qcsrc/server/w_seeker.qc | 2 +- 8 files changed, 29 insertions(+), 18 deletions(-) diff --git a/qcsrc/server/g_hook.qc b/qcsrc/server/g_hook.qc index 27a63c421..30c3ca54b 100644 --- a/qcsrc/server/g_hook.qc +++ b/qcsrc/server/g_hook.qc @@ -274,7 +274,7 @@ void GrapplingHook_Damage (entity inflictor, entity attacker, float damage, floa if(self.health <= 0) return; - if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, 0)) // no exceptions + if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions return; // g_balance_projectiledamage says to halt self.health = self.health - damage; diff --git a/qcsrc/server/w_common.qc b/qcsrc/server/w_common.qc index 81cf68ef2..87f743253 100644 --- a/qcsrc/server/w_common.qc +++ b/qcsrc/server/w_common.qc @@ -545,33 +545,42 @@ float W_CheckProjectileDamage(entity inflictor, entity projowner, float deathtyp { float is_from_contents = (deathtype == DEATH_SLIME || deathtype == DEATH_LAVA); float is_from_owner = (inflictor == projowner); + float is_from_exception = (exception != -1); - print(strcat("from_contents ", ftos(is_from_contents), " : from_owner ", ftos(is_from_owner), " : exception ", ftos(exception), ". \n")); - + print(strcat("from_contents ", ftos(is_from_contents), " : from_owner ", ftos(is_from_owner), " : exception ", strcat(ftos(is_from_exception), " (", ftos(exception), "). \n"))); + if(autocvar_g_projectiles_damage <= -2) { return FALSE; // no damage to projectiles at all, not even with the exceptions } else if(autocvar_g_projectiles_damage == -1) { - if not(exception) - return FALSE; // no damage other than exceptions (electro combo, hagar join explode, minelayer mines) + if(is_from_exception) + return (exception); // if exception is detected, allow it to override + else + return FALSE; // otherwise, no other damage is allowed } else if(autocvar_g_projectiles_damage == 0) { - if not(is_from_contents || exception) - return FALSE; // only damage from contents or exceptions is allowed + if(is_from_exception) + return (exception); // if exception is detected, allow it to override + else if not(is_from_contents) + return FALSE; // otherwise, only allow damage from contents } else if(autocvar_g_projectiles_damage == 1) { - if not(is_from_contents || is_from_owner || exception) - return FALSE; // only self damage or damage from contents or exceptions is allowed + if(is_from_exception) + return (exception); // if exception is detected, allow it to override + else if not(is_from_contents || is_from_owner) + return FALSE; // otherwise, only allow self damage and damage from contents + } + else if(autocvar_g_projectiles_damage == 2) // allow any damage, but override for exceptions + { + if(is_from_exception) + return (exception); // if exception is detected, allow it to override } - - // -2 or lower disables all damage including exceptions - // 2 or higher automatically allows all damage normally - return TRUE; // continue with the damage as planned + return TRUE; // if none of these return, then allow damage anyway. } void W_PrepareExplosionByDamage(entity attacker, void() explode) diff --git a/qcsrc/server/w_fireball.qc b/qcsrc/server/w_fireball.qc index dd85c5c85..b15caf0fb 100644 --- a/qcsrc/server/w_fireball.qc +++ b/qcsrc/server/w_fireball.qc @@ -116,7 +116,7 @@ void W_Fireball_Damage (entity inflictor, entity attacker, float damage, float d if(self.health <= 0) return; - if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, 0)) // no exceptions + if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions return; // g_projectiles_damage says to halt self.health = self.health - damage; diff --git a/qcsrc/server/w_grenadelauncher.qc b/qcsrc/server/w_grenadelauncher.qc index 7a405d30b..67cee9613 100644 --- a/qcsrc/server/w_grenadelauncher.qc +++ b/qcsrc/server/w_grenadelauncher.qc @@ -50,7 +50,7 @@ void W_Grenade_Damage (entity inflictor, entity attacker, float damage, float de if (self.health <= 0) return; - if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, 0)) // no exceptions + if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions return; // g_projectiles_damage says to halt self.health = self.health - damage; diff --git a/qcsrc/server/w_hagar.qc b/qcsrc/server/w_hagar.qc index 20a82a215..6b34b40cb 100644 --- a/qcsrc/server/w_hagar.qc +++ b/qcsrc/server/w_hagar.qc @@ -29,6 +29,8 @@ void W_Hagar_Damage (entity inflictor, entity attacker, float damage, float deat && ((inflictor.projectiledeathtype & HITTYPE_SECONDARY) && (self.projectiledeathtype & HITTYPE_SECONDARY)) && autocvar_g_balance_hagar_secondary_load_linkexplode); + print("is_linkexplode: ", ftos(is_linkexplode), ". \n"); + if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, is_linkexplode)) return; // g_projectiles_damage says to halt diff --git a/qcsrc/server/w_hook.qc b/qcsrc/server/w_hook.qc index 856518822..5cbbebe11 100644 --- a/qcsrc/server/w_hook.qc +++ b/qcsrc/server/w_hook.qc @@ -57,7 +57,7 @@ void W_Hook_Damage (entity inflictor, entity attacker, float damage, float death if (self.health <= 0) return; - if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, 0)) // no exceptions + if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions return; // g_projectiles_damage says to halt self.health = self.health - damage; diff --git a/qcsrc/server/w_rocketlauncher.qc b/qcsrc/server/w_rocketlauncher.qc index 3a1bc9699..1070d82f4 100644 --- a/qcsrc/server/w_rocketlauncher.qc +++ b/qcsrc/server/w_rocketlauncher.qc @@ -239,7 +239,7 @@ void W_Rocket_Damage (entity inflictor, entity attacker, float damage, float dea if (self.health <= 0) return; - if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, 0)) // no exceptions + if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions return; // g_projectiles_damage says to halt self.health = self.health - damage; diff --git a/qcsrc/server/w_seeker.qc b/qcsrc/server/w_seeker.qc index 72cd9085a..f369bc926 100644 --- a/qcsrc/server/w_seeker.qc +++ b/qcsrc/server/w_seeker.qc @@ -125,7 +125,7 @@ void Seeker_Missile_Damage (entity inflictor, entity attacker, float damage, flo if (self.health <= 0) return; - if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, 0)) // no exceptions + if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions return; // g_projectiles_damage says to halt if (self.realowner == attacker) -- 2.39.2