]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/g_damage.qc
Merge branch 'master' into mirceakitsune/damage_effects
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / g_damage.qc
index 0bd7a8da84b4ae6aa743673b45df1db5f428d958..efdd9ed1cf921806917a107368a78058fe3b7b41 100644 (file)
@@ -41,8 +41,6 @@ void Damage_DamageInfo(vector org, float coredamage, float edgedamage, float rad
        Net_LinkEntity(e, FALSE, 0.2, Damage_DamageInfo_SendEntity);
 }
 
-#define DAMAGE_CENTERPRINT_SPACER NEWLINES
-
 float checkrules_firstblood;
 
 float yoda;
@@ -126,6 +124,8 @@ void GiveFrags (entity attacker, entity targ, float f, float deathtype)
        {
                // regular frag
                PlayerScore_Add(attacker, SP_KILLS, 1);
+               if(targ.playerid)
+                       PlayerStats_Event(attacker, sprintf("kills-%d", targ.playerid), 1);
        }
 
        PlayerScore_Add(targ, SP_DEATHS, 1);
@@ -299,13 +299,9 @@ void Obituary (entity attacker, entity inflictor, entity targ, float deathtype)
        string  s, a, msg;
        float w, type;
 
-       if (targ.classname == "player" || targ.classname == "corpse")
+       if (targ.classname == "player")
        {
-               if (targ.classname == "corpse")
-                       s = "A corpse";
-               else
-                       s = targ.netname;
-
+               s = targ.netname;
                a = attacker.netname;
 
                if (targ == attacker) // suicides
@@ -333,7 +329,7 @@ void Obituary (entity attacker, entity inflictor, entity targ, float deathtype)
 
                        Send_KillNotification(s, msg, ftos(w), deathtype, MSG_SUICIDE);
                }
-               else if (attacker.classname == "player" || attacker.classname == "gib")
+               else if (attacker.classname == "player")
                {
                        if(teamplay && attacker.team == targ.team)
                        {
@@ -497,6 +493,10 @@ entity damage_attacker;
 
 void Damage (entity targ, entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
+       // if the target is a player or dead body, activate damage effects
+       if(targ.classname == "player" || targ.classname == "body")
+               Violence_DamageEffect_SetRepeat(targ, damage, DEATH_WEAPONOF(deathtype));
+
        float mirrordamage;
        float mirrorforce;
        float teamdamage0;
@@ -647,7 +647,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                        if (targ.armorvalue && (deathtype == WEP_MINSTANEX) && damage)
                        {
                                targ.armorvalue -= 1;
-                               centerprint(targ, strcat(DAMAGE_CENTERPRINT_SPACER, "^3Remaining extra lives: ",ftos(targ.armorvalue)));
+                               centerprint(targ, strcat("^3Remaining extra lives: ",ftos(targ.armorvalue)));
                                damage = 0;
                                targ.hitsound += 1;
                                attacker.hitsound += 1; // TODO change this to a future specific hitsound for armor hit
@@ -659,7 +659,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                                if (targ != attacker)
                                {
                                        if ((targ.health >= 1) && (targ.classname == "player"))
-                                               centerprint(attacker, strcat(DAMAGE_CENTERPRINT_SPACER, "Secondary fire inflicts no damage!"));
+                                               centerprint(attacker, "Secondary fire inflicts no damage!");
                                        force = '0 0 0';
                                        // keep mirrorforce
                                        attacker = targ;
@@ -782,15 +782,21 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                        if(deathtype & HITTYPE_HEADSHOT)
                                damage *= 1 + damage_headshotbonus;
 
-                       if(targ.classname == "player")
+                       entity victim;
+                       if((targ.vehicle_flags & VHF_ISVEHICLE) && targ.owner)
+                               victim = targ.owner;
+                       else
+                               victim = targ;
+
+                       if(victim.classname == "player" || victim.turrcaps_flags & TFL_TURRCAPS_ISTURRET)
                        {
-                               if(IsDifferentTeam(targ, attacker))
+                               if(IsDifferentTeam(victim, attacker))
                                {
                                        if(damage > 0)
                                        {
                                                if(deathtype != DEATH_FIRE)
                                                {
-                                                       if(targ.BUTTON_CHAT)
+                                                       if(victim.BUTTON_CHAT)
                                                                attacker.typehitsound += 1;
                                                        else
                                                                attacker.hitsound += 1;
@@ -801,12 +807,13 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
 
                                                if not(DEATH_ISSPECIAL(deathtype))
                                                {
+                                                       if(targ.classname == "player") // don't do this for vehicles
                                                        if(!g_minstagib)
-                                                       if(IsFlying(targ))
+                                                       if(IsFlying(victim))
                                                                yoda = 1;
 
                                                        if(g_minstagib)
-                                                       if(targ.items & IT_STRENGTH)
+                                                       if(victim.items & IT_STRENGTH)
                                                                yoda = 1;
 
                                                        if(deathtype & HITTYPE_HEADSHOT)
@@ -896,7 +903,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                        if(attacker.armorvalue > 0)
                        {
                                attacker.armorvalue = attacker.armorvalue - 1;
-                               centerprint(attacker, strcat(DAMAGE_CENTERPRINT_SPACER, "^3Remaining extra lives: ",ftos(attacker.armorvalue)));
+                               centerprint(attacker, strcat("^3Remaining extra lives: ",ftos(attacker.armorvalue)));
                                attacker.hitsound += 1;
                        }
                        mirrordamage = 0;