]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
simplify telefrag logic so e.g. gibs cannot telefrag players; option g_telefrag_teamp...
authorRudolf Polzer <divverent@alientrap.org>
Fri, 27 Aug 2010 18:55:14 +0000 (20:55 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Fri, 27 Aug 2010 18:55:14 +0000 (20:55 +0200)
defaultXonotic.cfg
qcsrc/server/t_teleporters.qc

index d30974fe66ec699961a10e11fa52d7f1650bb94a..15a8bcabf2513f91ec0e650fb1fb711500f694ff 100644 (file)
@@ -323,6 +323,7 @@ seta cl_particles_oldnexbeam 0 "Uses the old v2.3 Nexgun beam instead of the new
 set sv_qcweaponanimation 0
 
 set g_telefrags 1 "telefragging, i.e. killing someone who stands in the way of someone who is teleporting"
+set g_telefrags_teamplay 1 "never telefrag team mates"
 set g_telefrags_avoid 1 "when teleporters have a random destination, avoid teleporting to locations where a telefrag would happen"
 set g_teleport_maxspeed 0 "maximum speed that a player can keep when going through a teleporter (if a misc_teleporter_dest also has a cap the smallest one of these will be used), 0 = don't limit, -1 = keep no speed"
 
index c929bcf6f1367763c83848de39fe15802a6e18b6..2d72a5c35b273c6229b621bbcc27f6dbad1d8f0e 100644 (file)
@@ -29,13 +29,14 @@ void trigger_teleport_use()
 
 float check_tdeath(entity player, vector org, vector telefragmin, vector telefragmax)
 {
-       TDEATHLOOP(org)
+       if (telefragger.classname == "player" && telefragger.health >= 1)
        {
-               if ((player.classname == "player") && (player.health >= 1))
+               TDEATHLOOP(org)
                {
-                       if(head.classname == "player")
-                               if(head.health >= 1)
-                                       return 1;
+                       if not(teamplay && cvar("g_telefrags_teamplay") && head.team == telefragger.team)
+                               if(head.classname == "player")
+                                       if(head.health >= 1)
+                                               return 1;
                }
        }
        return 0;
@@ -45,15 +46,16 @@ void tdeath(entity player, entity teleporter, entity telefragger, vector telefra
 {
        TDEATHLOOP(player.origin)
        {
-               if ((player.classname == "player") && (player.health >= 1))
+               if (telefragger.classname == "player" && telefragger.health >= 1)
                {
-                       if(head.classname == "player")
-                               if(head.health >= 1)
-                                       ++tdeath_hit;
-                       Damage (head, teleporter, telefragger, 10000, DEATH_TELEFRAG, head.origin, '0 0 0');
+                       if not(teamplay && cvar("g_telefrags_teamplay") && head.team == telefragger.team)
+                       {
+                               if(head.classname == "player")
+                                       if(head.health >= 1)
+                                               ++tdeath_hit;
+                               Damage (head, teleporter, telefragger, 10000, DEATH_TELEFRAG, head.origin, '0 0 0');
+                       }
                }
-               else if (telefragger.health < 1) // corpses gib
-                       Damage (head, teleporter, telefragger, 10000, DEATH_TELEFRAG, head.origin, '0 0 0');
                else // dead bodies and monsters gib themselves instead of telefragging
                        Damage (telefragger, teleporter, telefragger, 10000, DEATH_TELEFRAG, telefragger.origin, '0 0 0');
        }