X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fbot%2Fhavocbot%2Froles.qc;h=a54874786cf6df38f2f87cbf267ba88970d5fc79;hb=4779c1bd8269aaca0d20e802c7e8e685602bb926;hp=93a683a9341cba58301801faabc56598b05187f2;hpb=4337dab09bbbe024bcc77db446ed76962fb17f0d;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/bot/havocbot/roles.qc b/qcsrc/server/bot/havocbot/roles.qc index 93a683a93..a54874786 100644 --- a/qcsrc/server/bot/havocbot/roles.qc +++ b/qcsrc/server/bot/havocbot/roles.qc @@ -7,9 +7,9 @@ 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; + entity head; + entity player; + 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); @@ -85,8 +85,8 @@ void havocbot_goalrating_items(float ratingscale, vector org, float sradius) if( head.armorvalue && player.armorvalue > self.armorvalue) continue; - if( head.weapons ) - if( (player.weapons & head.weapons) != head.weapons) + if( !WEPSET_EMPTY_E(head) ) + if( !WEPSET_CONTAINS_ALL_EE(player, head) ) continue; if (head.ammo_shells && player.ammo_shells > self.ammo_shells) @@ -125,11 +125,11 @@ void havocbot_goalrating_items(float ratingscale, vector org, float sradius) navigation_routerating(head, rating * ratingscale, 2000); head = head.chain; } -}; +} void havocbot_goalrating_controlpoints(float ratingscale, vector org, float sradius) { - local entity head; + entity head; head = findchain(classname, "dom_controlpoint"); while (head) { @@ -144,12 +144,12 @@ void havocbot_goalrating_controlpoints(float ratingscale, vector org, float srad } head = head.chain; } -}; +} void havocbot_goalrating_enemyplayers(float ratingscale, vector org, float sradius) { - local entity head; - local float t, noteam, distance; + entity head; + float t, noteam, distance; noteam = ((self.team == 0) || !teamplay); // fteqcc sucks if (autocvar_bot_nofire) @@ -162,21 +162,12 @@ void havocbot_goalrating_enemyplayers(float ratingscale, vector org, float sradi FOR_EACH_PLAYER(head) { // TODO: Merge this logic with the bot_shouldattack function - if (self != head) - if (head.health > 0) - if ((noteam && (!bot_ignore_bots || clienttype(head) == CLIENTTYPE_REAL)) || head.team != self.team) + if(bot_shouldattack(head)) { distance = vlen(head.origin - org); if (distance < 100 || distance > sradius) continue; - if (head.freezetag_frozen) - continue; - - if(g_minstagib) - if(head.items & IT_STRENGTH) - continue; - // rate only visible enemies /* traceline(self.origin + self.view_ofs, head.origin, MOVE_NOMONSTERS, self); @@ -207,29 +198,10 @@ void havocbot_goalrating_enemyplayers(float ratingscale, vector org, float sradi navigation_routerating(head, t * ratingscale, 2000); } } -}; +} // choose a role according to the situation -void() havocbot_role_dm; - -//DOM: -//go to best items, or control points you don't own -void havocbot_role_dom() -{ - if(self.deadflag != DEAD_NO) - return; - - if (self.bot_strategytime < time) - { - self.bot_strategytime = time + autocvar_bot_ai_strategyinterval; - navigation_goalrating_start(); - havocbot_goalrating_controlpoints(10000, self.origin, 15000); - havocbot_goalrating_items(8000, self.origin, 8000); - //havocbot_goalrating_enemyplayers(3000, self.origin, 2000); - //havocbot_goalrating_waypoints(1, self.origin, 1000); - navigation_goalrating_end(); - } -}; +void havocbot_role_dm(); //DM: //go to best items @@ -247,7 +219,7 @@ void havocbot_role_dm() //havocbot_goalrating_waypoints(1, self.origin, 1000); navigation_goalrating_end(); } -}; +} //Race: //go to next checkpoint, and annoy enemies @@ -281,43 +253,30 @@ void havocbot_role_race() navigation_goalrating_end(); } -}; +} void havocbot_chooserole_dm() { self.havocbot_role = havocbot_role_dm; -}; +} void havocbot_chooserole_race() { self.havocbot_role = havocbot_role_race; -}; - -void havocbot_chooserole_dom() -{ - self.havocbot_role = havocbot_role_dom; -}; +} void havocbot_chooserole() { dprint("choosing a role...\n"); self.bot_strategytime = 0; - if (g_ctf) - havocbot_chooserole_ctf(); - else if (g_domination) - havocbot_chooserole_dom(); + if (MUTATOR_CALLHOOK(HavocBot_ChooseRule)) + return; else if (g_keyhunt) havocbot_chooserole_kh(); else if (g_race || g_cts) havocbot_chooserole_race(); else if (g_onslaught) havocbot_chooserole_ons(); - else if (g_keepaway) - havocbot_chooserole_ka(); - else if (g_freezetag) - havocbot_chooserole_ft(); - else if (g_assault) - havocbot_chooserole_ast(); else // assume anything else is deathmatch havocbot_chooserole_dm(); -}; +}