From 97ec037776fd2fadb5e413c99478f0e4d6b53a0e Mon Sep 17 00:00:00 2001
From: Samual <samual@xonotic.org>
Date: Sat, 31 Mar 2012 21:10:42 -0400
Subject: [PATCH] Finish implementing ctf_Handle_Failed_Pass()

---
 qcsrc/server/mutators/gamemode_ctf.qc | 64 +++++++++++----------------
 1 file changed, 26 insertions(+), 38 deletions(-)

diff --git a/qcsrc/server/mutators/gamemode_ctf.qc b/qcsrc/server/mutators/gamemode_ctf.qc
index 4b42a3b35e..1918c78d3b 100644
--- a/qcsrc/server/mutators/gamemode_ctf.qc
+++ b/qcsrc/server/mutators/gamemode_ctf.qc
@@ -174,48 +174,38 @@ void ctf_CaptureShield_Spawn(entity flag)
 
 void ctf_Handle_Failed_Pass(entity flag)
 {
-	/*entity tmp_player; // temporary entity which the FOR_EACH_PLAYER loop uses to scan players
 	entity sender = flag.pass_sender;
-	if(!flag) { return; }
-	if(time < flag.throw_antispam) { return; } // antispam of passing
-	
-	// reset player
-	player.flagcarried = world;
-	WaypointSprite_Ping(player.wps_flagcarrier);
-	WaypointSprite_Kill(player.wps_flagcarrier);
-	
-	// transfer flag to reciever
-	flag.owner = reciever;
-	flag.owner.flagcarried = flag;
-	flag.ctf_carrier = reciever;
-	setattachment(flag, reciever, "");
-	setorigin(flag, FLAG_CARRY_OFFSET);
 
+	flag.movetype = MOVETYPE_TOSS;
+	flag.takedamage = DAMAGE_YES;
+	flag.health = flag.max_flag_health;
+	flag.ctf_droptime = time;
+	flag.ctf_dropper = sender;
+	flag.ctf_status = FLAG_DROPPED;
+	
 	// messages and sounds
-	sound(player, CH_TRIGGER, flag.snd_flag_touch, VOL_BASE, ATTN_NORM);
-	ctf_EventLog("pass", flag.team, player);
-	ctf_EventLog("recieve", flag.team, reciever);
-	FOR_EACH_PLAYER(tmp_player)
-		if(tmp_player == player)
-			centerprint(tmp_player, strcat("You passed the ", flag.netname, " to ", reciever.netname));
-		else if(tmp_player == reciever)
-			centerprint(tmp_player, strcat("You recieved the ", flag.netname, " from ", player.netname));
-		else if(tmp_player.team == player.team)
-			centerprint(tmp_player, strcat(player.netname, " passed the ", flag.netname, " to ", reciever.netname));
-			
-	// effects
-	te_lightning2(world, reciever.origin, player.origin);
+	Send_KillNotification(sender.netname, flag.netname, "", INFO_LOSTFLAG, MSG_INFO);
+	sound(flag, CH_TRIGGER, flag.snd_flag_dropped, VOL_BASE, ATTN_NONE);
+	ctf_EventLog("dropped", sender.team, sender);
+
+	// scoring
+	PlayerTeamScore_AddScore(sender, -ctf_ReadScore("penalty_drop"));	
+	PlayerScore_Add(sender, SP_CTF_DROPS, 1);
 	
-	// create new waypoint
-	WaypointSprite_Spawn("flagcarrier", 0, 0, reciever, '0 0 64', world, reciever.team, reciever, wps_flagcarrier, FALSE, RADARICON_FLAG, '1 1 0');
-	WaypointSprite_UpdateMaxHealth(reciever.wps_flagcarrier, '1 0 0' * healtharmor_maxdamage(start_health, start_armorvalue, autocvar_g_balance_armor_blockpercent) * 2);
-	WaypointSprite_UpdateHealth(reciever.wps_flagcarrier, '1 0 0' * healtharmor_maxdamage(reciever.health, reciever.armorvalue, autocvar_g_balance_armor_blockpercent));
-	WaypointSprite_UpdateTeamRadar(reciever.wps_flagcarrier, RADARICON_FLAGCARRIER, '1 1 0');
+	// waypoints
+	if(autocvar_g_ctf_flag_dropped_waypoint)
+		WaypointSprite_Spawn("flagdropped", 0, 0, flag, '0 0 64', world, ((autocvar_g_ctf_flag_dropped_waypoint == 2) ? 0 : sender.team), flag, wps_flagdropped, FALSE, RADARICON_FLAG, '0 0.5 0' + ((flag.team == COLOR_TEAM1) ? '0.75 0 0' : '0 0 0.75'));
+
+	if(autocvar_g_ctf_flag_returntime || (autocvar_g_ctf_flag_take_damage && autocvar_g_ctf_flag_health))
+	{
+		WaypointSprite_UpdateMaxHealth(flag.wps_flagdropped, flag.max_flag_health);
+		WaypointSprite_UpdateHealth(flag.wps_flagdropped, flag.health);
+	}
 	
-	flag.throw_antispam = time + autocvar_g_ctf_pass_wait;*/
+	sender.throw_antispam = time + autocvar_g_ctf_pass_wait;
 	
-	print("ctf_Handle_Failed_Pass() called.\n");
-	ctf_RespawnFlag(flag);
+	flag.pass_sender = world;
+	flag.pass_target = world;
 }
 
 void ctf_Handle_Retrieve(entity flag, entity player)
@@ -259,8 +249,6 @@ void ctf_Handle_Retrieve(entity flag, entity player)
 	
 	flag.pass_sender = world;
 	flag.pass_target = world;
-	
-	print("ctf_Handle_Retrieve() called.\n");
 }
 
 void ctf_Handle_Throw(entity player, entity reciever, float droptype)
-- 
2.39.5