]> 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 d3ac1f2ba9974be1f8a0ce7c0df776e8b8020d0e..efdd9ed1cf921806917a107368a78058fe3b7b41 100644 (file)
@@ -124,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);
@@ -297,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
@@ -331,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)
                        {
@@ -495,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;
@@ -780,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;
@@ -799,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)