]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/bot/default/havocbot/roles.qc
Merge branch 'master' into Mario/overkill
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / bot / default / havocbot / roles.qc
index 677ef578e79bd6984a43dbb72c02736b9389e463..f57a18fed6c39a1bb4a5d7b3e63506996d817d13 100644 (file)
@@ -21,10 +21,9 @@ void havocbot_goalrating_items(entity this, float ratingscale, vector org, float
 
        IL_EACH(g_items, it.bot_pickup,
        {
-               o = (it.absmin + it.absmax) * 0.5;
-               friend_distance = 10000; enemy_distance = 10000;
                rating = 0;
 
+               o = (it.absmin + it.absmax) * 0.5;
                if(!it.solid || vdist(o - org, >, sradius) || (it == this.ignoregoal && time < this.ignoregoaltime) )
                        continue;
 
@@ -34,10 +33,13 @@ void havocbot_goalrating_items(entity this, float ratingscale, vector org, float
                        traceline(o, o + '0 0 -1500', true, NULL);
 
                        d = pointcontents(trace_endpos + '0 0 1');
-                       if(d & CONTENT_WATER || d & CONTENT_SLIME || d & CONTENT_LAVA)
-                               continue;
-                       if(tracebox_hits_trigger_hurt(it.origin, it.mins, it.maxs, trace_endpos))
+                       if(d == CONTENT_WATER || d == CONTENT_SLIME || d == CONTENT_LAVA)
                                continue;
+                       // this tracebox_hits_trigger_hurt call isn't needed:
+                       // dropped weapons are removed as soon as they fall on a trigger_hurt
+                       // and can't be rated while they are in the air
+                       //if(tracebox_hits_trigger_hurt(it.origin, it.mins, it.maxs, trace_endpos))
+                       //      continue;
                }
                else
                {
@@ -49,6 +51,7 @@ void havocbot_goalrating_items(entity this, float ratingscale, vector org, float
 
                if(teamplay)
                {
+                       friend_distance = 10000; enemy_distance = 10000;
                        discard = false;
 
                        entity picker = it;
@@ -65,33 +68,18 @@ void havocbot_goalrating_items(entity this, float ratingscale, vector org, float
                                                continue;
 
                                        friend_distance = d;
-
                                        discard = true;
 
-                                       if( picker.health && it.health > this.health )
-                                               continue;
+                                       if (picker.health && it.health > this.health) continue;
+                                       if (picker.armorvalue && it.armorvalue > this.armorvalue) continue;
 
-                                       if( picker.armorvalue && it.armorvalue > this.armorvalue)
-                                               continue;
+                                       if (picker.weapons && (picker.weapons & ~it.weapons)) continue;
 
-                                       if( picker.weapons )
-                                       if( picker.weapons & ~it.weapons )
-                                               continue;
-
-                                       if (picker.ammo_shells && it.ammo_shells > this.ammo_shells)
-                                               continue;
-
-                                       if (picker.ammo_nails && it.ammo_nails > this.ammo_nails)
-                                               continue;
-
-                                       if (picker.ammo_rockets && it.ammo_rockets > this.ammo_rockets)
-                                               continue;
-
-                                       if (picker.ammo_cells && it.ammo_cells > this.ammo_cells)
-                                               continue;
-
-                                       if (picker.ammo_plasma && it.ammo_plasma > this.ammo_plasma)
-                                               continue;
+                                       if (picker.ammo_shells && it.ammo_shells > this.ammo_shells) continue;
+                                       if (picker.ammo_nails && it.ammo_nails > this.ammo_nails) continue;
+                                       if (picker.ammo_rockets && it.ammo_rockets > this.ammo_rockets) continue;
+                                       if (picker.ammo_cells && it.ammo_cells > this.ammo_cells) continue;
+                                       if (picker.ammo_plasma && it.ammo_plasma > this.ammo_plasma) continue;
 
                                        discard = false;
                                }
@@ -108,7 +96,6 @@ void havocbot_goalrating_items(entity this, float ratingscale, vector org, float
                        if ( (enemy_distance < friend_distance && vdist(o - org, <, enemy_distance)) ||
                                (friend_distance > autocvar_bot_ai_friends_aware_pickup_radius ) || !discard )
                                rating = it.bot_pickupevalfunc(this, it);
-
                }
                else
                        rating = it.bot_pickupevalfunc(this, it);
@@ -145,12 +132,12 @@ void havocbot_goalrating_enemyplayers(entity this, float ratingscale, vector org
                        continue;
 
                // not falling
-               if((IS_ONGROUND(it)) == 0)
+               if(!IS_ONGROUND(it))
                {
                        traceline(it.origin, it.origin + '0 0 -1500', true, NULL);
                        t = pointcontents(trace_endpos + '0 0 1');
                        if(t != CONTENT_SOLID )
-                       if(t & CONTENT_WATER || t & CONTENT_SLIME || t & CONTENT_LAVA)
+                       if(t == CONTENT_WATER || t == CONTENT_SLIME || t == CONTENT_LAVA)
                                continue;
                        if(tracebox_hits_trigger_hurt(it.origin, it.mins, it.maxs, trace_endpos))
                                continue;