X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fbot%2Fdefault%2Fhavocbot%2Froles.qc;h=f57a18fed6c39a1bb4a5d7b3e63506996d817d13;hp=677ef578e79bd6984a43dbb72c02736b9389e463;hb=d492869ab1f18e05121529b7bcffcb637d13994c;hpb=8f08a117d2eada0c38cb1d07a0798daf192dd666 diff --git a/qcsrc/server/bot/default/havocbot/roles.qc b/qcsrc/server/bot/default/havocbot/roles.qc index 677ef578e7..f57a18fed6 100644 --- a/qcsrc/server/bot/default/havocbot/roles.qc +++ b/qcsrc/server/bot/default/havocbot/roles.qc @@ -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;