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=771ab282ddd49039f36fcfbed52a8cb24ccb18c1;hb=d492869ab1f18e05121529b7bcffcb637d13994c;hpb=af71335a8e418edc55126a63aa65afd9353f413c;ds=sidebyside diff --git a/qcsrc/server/bot/default/havocbot/roles.qc b/qcsrc/server/bot/default/havocbot/roles.qc index 771ab282d..f57a18fed 100644 --- a/qcsrc/server/bot/default/havocbot/roles.qc +++ b/qcsrc/server/bot/default/havocbot/roles.qc @@ -19,12 +19,11 @@ void havocbot_goalrating_items(entity this, float ratingscale, vector org, float vector o; ratingscale = ratingscale * 0.0001; // items are rated around 10000 already - FOREACH_ENTITY_FLOAT(bot_pickup, true, + 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.armorvalue && it.armorvalue > this.armorvalue) - 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.health && it.health > this.health) continue; + if (picker.armorvalue && it.armorvalue > this.armorvalue) continue; - if (picker.ammo_cells && it.ammo_cells > this.ammo_cells) - continue; + if (picker.weapons && (picker.weapons & ~it.weapons)) 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); @@ -118,19 +105,6 @@ void havocbot_goalrating_items(entity this, float ratingscale, vector org, float }); } -void havocbot_goalrating_controlpoints(entity this, float ratingscale, vector org, float sradius) -{ - FOREACH_ENTITY_CLASS("dom_controlpoint", vdist((((it.absmin + it.absmax) * 0.5) - org), <, sradius), - { - if(it.cnt > -1) // this is just being fought - navigation_routerating(this, it, ratingscale, 5000); - else if(it.goalentity.cnt == 0) // unclaimed - navigation_routerating(this, it, ratingscale * 0.5, 5000); - else if(it.goalentity.team != this.team) // other team's point - navigation_routerating(this, it, ratingscale * 0.2, 5000); - }); -} - void havocbot_goalrating_enemyplayers(entity this, float ratingscale, vector org, float sradius) { if (autocvar_bot_nofire) @@ -158,18 +132,18 @@ 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; } - // TODO: rate waypoints near the targetted player at that moment, instead of the player itthis + // TODO: rate waypoints near the targeted player at that moment, instead of the player itself // adding a player as a goal seems to be quite dangerous, especially on space maps // remove hack in navigation_poptouchedgoals() after performing this change