]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Fix some more bugs with W_CheckProjectileDamage and hagar -- should be pretty good...
authorSamual <samual@xonotic.org>
Fri, 30 Sep 2011 17:34:42 +0000 (13:34 -0400)
committerSamual <samual@xonotic.org>
Fri, 30 Sep 2011 17:34:42 +0000 (13:34 -0400)
qcsrc/server/g_hook.qc
qcsrc/server/w_common.qc
qcsrc/server/w_fireball.qc
qcsrc/server/w_grenadelauncher.qc
qcsrc/server/w_hagar.qc
qcsrc/server/w_hook.qc
qcsrc/server/w_rocketlauncher.qc
qcsrc/server/w_seeker.qc

index 27a63c421034ff2c0fe20cb640bfa887304cb830..30c3ca54beef26820378f959dfb232b4658af096 100644 (file)
@@ -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;
index 81cf68ef227822a09c116c9bec99bdf33b9ec976..87f743253c9ad5a9f11cd69399a594827d945b22 100644 (file)
@@ -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)
index dd85c5c855aed2351baf058a3d3d4bf8a78b6b17..b15caf0fbc10bde111ca1248ce01997680cbf96a 100644 (file)
@@ -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;
index 7a405d30bc1d430742d85461f35f6590808755c1..67cee96132b7294b20574406ca943b8b0d3686ab 100644 (file)
@@ -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;
index 20a82a2159497c21fcf6795459576fbb0b8b84d2..6b34b40cb48cd67bc443455d71b72df171a14ba4 100644 (file)
@@ -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
 
index 85651882290df540571b5a8f55710240197154eb..5cbbebe11d4126da7fbea6eae4c1d459ab203adb 100644 (file)
@@ -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;
index 3a1bc9699665f2ec871da2174f4c22a67aed2a98..1070d82f4161ff35bb25b5a06a35667ded682d59 100644 (file)
@@ -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;
index 72cd9085a0c39c3edb7f95b2f0237a09f539656b..f369bc926907a8b881cebf6d410d596ea16bf9b0 100644 (file)
@@ -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)