From 9b985a987a198cef67e2da4909dcc5435964fc78 Mon Sep 17 00:00:00 2001 From: Paul Scott Date: Sat, 4 Jun 2011 09:18:39 +1000 Subject: [PATCH] A bug remains where sometimes a bot will try to free another player but then move away again which continues in an endless loop. --- qcsrc/server/bot/havocbot/role_freezetag.qc | 33 +++++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) 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; -- 2.39.2