]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
A bug remains where sometimes a bot will try to free another player but
authorPaul Scott <poogascott@gmail.com>
Fri, 3 Jun 2011 23:18:39 +0000 (09:18 +1000)
committerRudolf Polzer <divVerent@xonotic.org>
Mon, 20 Jun 2011 08:25:32 +0000 (10:25 +0200)
then move away again which continues in an endless loop.

qcsrc/server/bot/havocbot/role_freezetag.qc

index cc5332022e2094750692c577d537ca53e08b9ef5..c81d7d0f350f48671a168e57248a3cf858be79db 100644 (file)
@@ -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;