From: Paul Scott 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;