]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/bot/havocbot/roles.qc
Merge branch 'master' into terencehill/arena_stuff
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / bot / havocbot / roles.qc
index 514c364ac723963e1617e17ee3bc5ac28287bbf6..18699a7bd6f310001cc50e3ac359d250a55f6e5a 100644 (file)
@@ -10,12 +10,14 @@ void havocbot_goalrating_items(float ratingscale, vector org, float sradius)
        local entity head;
        local entity player;
        local float rating, d, discard, distance, friend_distance, enemy_distance;
+       vector o;
        ratingscale = ratingscale * 0.0001; // items are rated around 10000 already
        head = findchainfloat(bot_pickup, TRUE);
 
        while (head)
        {
-               distance = vlen(head.origin - org);
+               o = (head.absmin + head.absmax) * 0.5;
+               distance = vlen(o - org);
                friend_distance = 10000; enemy_distance = 10000;
                rating = 0;
 
@@ -28,7 +30,7 @@ void havocbot_goalrating_items(float ratingscale, vector org, float sradius)
                // Check if the item can be picked up safely
                if(head.classname == "droppedweapon")
                {
-                       traceline(head.origin, head.origin + '0 0 -1500', TRUE, world);
+                       traceline(o, o + '0 0 -1500', TRUE, world);
 
                        d = pointcontents(trace_endpos + '0 0 1');
                        if(d & CONTENT_WATER || d & CONTENT_SLIME || d & CONTENT_LAVA)
@@ -53,7 +55,7 @@ void havocbot_goalrating_items(float ratingscale, vector org, float sradius)
                        }
                }
 
-               if(teams_matter)
+               if(teamplay)
                {
                        discard = FALSE;
 
@@ -63,7 +65,7 @@ void havocbot_goalrating_items(float ratingscale, vector org, float sradius)
                                if ( self == player || player.deadflag )
                                        continue;
 
-                               d = vlen(player.origin - head.origin); // distance between player and item
+                               d = vlen(player.origin - o); // distance between player and item
 
                                if ( player.team == self.team )
                                {
@@ -131,7 +133,7 @@ void havocbot_goalrating_controlpoints(float ratingscale, vector org, float srad
        head = findchain(classname, "dom_controlpoint");
        while (head)
        {
-               if (vlen(head.origin - org) < sradius)
+               if (vlen(( ( head.absmin + head.absmax ) * 0.5 ) - org) < sradius)
                {
                        if(head.cnt > -1) // this is just being fought for
                                navigation_routerating(head, ratingscale, 5000);
@@ -148,7 +150,7 @@ void havocbot_goalrating_enemyplayers(float ratingscale, vector org, float sradi
 {
        local entity head;
        local float t, noteam, distance;
-       noteam = ((self.team == 0) || !teams_matter); // fteqcc sucks
+       noteam = ((self.team == 0) || !teamplay); // fteqcc sucks
 
        if (autocvar_bot_nofire)
                return;
@@ -168,6 +170,9 @@ void havocbot_goalrating_enemyplayers(float ratingscale, vector org, float sradi
                        if (distance < 100 || distance > sradius)
                                continue;
 
+                       if (head.freezetag_frozen)
+                               continue;
+
                        if(g_minstagib)
                        if(head.items & IT_STRENGTH)
                                continue;
@@ -274,24 +279,6 @@ void havocbot_role_race()
        }
 };
 
-// Keepaway
-// If you don't have the ball, get it; if you do, kill people.
-void havocbot_role_ka()
-{
-       if(self.deadflag != DEAD_NO)
-               return;
-
-       if (self.bot_strategytime < time)
-       {
-               self.bot_strategytime = time + autocvar_bot_ai_strategyinterval;
-               navigation_goalrating_start();
-               havocbot_goalrating_items(10000, self.origin, 10000);
-               havocbot_goalrating_enemyplayers(20000, self.origin, 10000);
-               //havocbot_goalrating_waypoints(1, self.origin, 1000);
-               navigation_goalrating_end();
-       }
-}
-
 void havocbot_chooserole_dm()
 {
        self.havocbot_role = havocbot_role_dm;
@@ -307,11 +294,6 @@ void havocbot_chooserole_dom()
        self.havocbot_role = havocbot_role_dom;
 };
 
-void havocbot_chooserole_ka()
-{
-       self.havocbot_role = havocbot_role_ka;
-}
-
 void havocbot_chooserole()
 {
        dprint("choosing a role...\n");
@@ -328,6 +310,8 @@ void havocbot_chooserole()
                havocbot_chooserole_ons();
        else if (g_keepaway)
                havocbot_chooserole_ka();
+       else if (g_freezetag)
+               havocbot_chooserole_ft();
        else // assume anything else is deathmatch
                havocbot_chooserole_dm();
 };