From: Paul Scott <poogascott@gmail.com>
Date: Fri, 3 Jun 2011 23:18:39 +0000 (+1000)
Subject: A bug remains where sometimes a bot will try to free another player but
X-Git-Tag: xonotic-v0.5.0~199^2~13^2~4^2
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=9b985a987a198cef67e2da4909dcc5435964fc78;p=xonotic%2Fxonotic-data.pk3dir.git

A bug remains where sometimes a bot will try to free another player but
then move away again which continues in an endless loop.
---

diff --git a/qcsrc/server/bot/havocbot/role_freezetag.qc b/qcsrc/server/bot/havocbot/role_freezetag.qc
index cc5332022..c81d7d0f3 100644
--- a/qcsrc/server/bot/havocbot/role_freezetag.qc
+++ b/qcsrc/server/bot/havocbot/role_freezetag.qc
@@ -8,25 +8,46 @@ void havocbot_goalrating_freeplayers(float ratingscale, vector org, float sradiu
 
 	FOR_EACH_PLAYER(head)
 	{
-		if ((head != self) && (head.team == self.team) && (head.freezetag_frozen))
+		if ((head != self) && (head.team == self.team))
 		{
-			distance = vlen(head.origin - org);
-			if (distance > sradius)
-				continue;
-			navigation_routerating(head, ratingscale, 2000);
+			if (head.freezetag_frozen)
+			{
+				distance = vlen(head.origin - org);
+				if (distance > sradius)
+					continue;
+				navigation_routerating(head, ratingscale, 2000);
+			}
+			else
+			{
+				// If teamate is not frozen still seek them out as fight better
+				// in a group.
+				navigation_routerating(head, ratingscale/3, 2000);
+			}
 		}
 	}
 };
 
 void havocbot_role_ft_offense()
 {
+	local entity head;
+	float unfrozen;
+
 	if(self.deadflag != DEAD_NO)
 		return;
 
 	if (!self.havocbot_role_timeout)
 		self.havocbot_role_timeout = time + random() * 10 + 20;
 
-	if (time > self.havocbot_role_timeout)
+	// Count how many players on team are unfrozen.
+	unfrozen = 0;
+	FOR_EACH_PLAYER(head)
+	{
+		if ((head.team == self.team) && (!head.freezetag_frozen))
+			unfrozen++;
+	}
+
+	// If only one left on team or if role has timed out then start trying to free players.
+	if (((unfrozen == 0) && (!self.freezetag_frozen)) || (time > self.havocbot_role_timeout))
 	{
 		dprint("changing role to freeing\n");
 		self.havocbot_role = havocbot_role_ft_freeing;