From 8df0aef198bca28b430ab117ccf1c830cf3510bc Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Fri, 27 Aug 2010 20:55:14 +0200 Subject: [PATCH] simplify telefrag logic so e.g. gibs cannot telefrag players; option g_telefrag_teamplay (if set, team mates cannot be telefragged) --- defaultXonotic.cfg | 1 + qcsrc/server/t_teleporters.qc | 26 ++++++++++++++------------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index d30974fe6..15a8bcabf 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -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" diff --git a/qcsrc/server/t_teleporters.qc b/qcsrc/server/t_teleporters.qc index c929bcf6f..2d72a5c35 100644 --- a/qcsrc/server/t_teleporters.qc +++ b/qcsrc/server/t_teleporters.qc @@ -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'); } -- 2.39.2