X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fw_common.qc;h=08c56121b5c6a110661fe6c6977bc90edee2d992;hb=728d6c1e0e0b5d4e63d5f090a1594ab557290ff6;hp=dfd5c77b6975566a6e9a29fe0013af30d1466d7c;hpb=738e2ebdf9d63a4957f1d9883558bd6bc09cbfcd;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/w_common.qc b/qcsrc/server/w_common.qc index dfd5c77b6..08c56121b 100644 --- a/qcsrc/server/w_common.qc +++ b/qcsrc/server/w_common.qc @@ -26,9 +26,9 @@ void W_GiveWeapon (entity e, float wep, string name) .vector railgunforce; void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, float mindist, float maxdist, float halflifedist, float forcehalflifedist, float deathtype) { - local vector hitloc, force, endpoint, dir; - local entity ent, endent; - local float endq3surfaceflags; + vector hitloc, force, endpoint, dir; + entity ent, endent; + float endq3surfaceflags; float totaldmg; entity o; @@ -545,26 +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 ", 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 - + { + 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 - - // -2 or lower disables all damage including exceptions - // 2 or higher automatically allows all damage normally + { + 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 + } - 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)