X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fbot%2Fhavocbot%2Froles.qc;h=91eb2ec1a5afbce4132a566baa3c2d115f480edc;hb=3adaa0873ad9eac20f32e6e3fc0455d4f9e044cd;hp=d0c10651b88134d364377b5f8edb641658710ad7;hpb=fd2b1a8ba60990ceca63c494e1fc6094c3b7f6b2;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/bot/havocbot/roles.qc b/qcsrc/server/bot/havocbot/roles.qc index d0c10651b..f682b6926 100644 --- a/qcsrc/server/bot/havocbot/roles.qc +++ b/qcsrc/server/bot/havocbot/roles.qc @@ -69,7 +69,7 @@ void havocbot_goalrating_items(float ratingscale, vector org, float sradius) if ( player.team == self.team ) { - if ( clienttype(player) != CLIENTTYPE_REAL || discard ) + if ( !IS_REAL_CLIENT(player) || discard ) continue; if( d > friend_distance) @@ -86,7 +86,7 @@ void havocbot_goalrating_items(float ratingscale, vector org, float sradius) continue; if( head.weapons ) - if( (player.weapons & head.weapons) != head.weapons) + if( head.weapons & ~player.weapons ) continue; if (head.ammo_shells && player.ammo_shells > self.ammo_shells) @@ -98,7 +98,10 @@ void havocbot_goalrating_items(float ratingscale, vector org, float sradius) if (head.ammo_rockets && player.ammo_rockets > self.ammo_rockets) continue; - if (head.ammo_cells && player.ammo_cells > self.ammo_cells ) + if (head.ammo_cells && player.ammo_cells > self.ammo_cells) + continue; + + if (head.ammo_plasma && player.ammo_plasma > self.ammo_plasma) continue; discard = FALSE; @@ -162,21 +165,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); @@ -184,11 +178,11 @@ void havocbot_goalrating_enemyplayers(float ratingscale, vector org, float sradi continue; */ - if(head.flags & FL_INWATER || head.flags & FL_PARTIALGROUND) + if((head.flags & FL_INWATER) || (head.flags & FL_PARTIALGROUND)) continue; // not falling - if(head.flags & FL_ONGROUND == 0) + if((head.flags & FL_ONGROUND) == 0) { traceline(head.origin, head.origin + '0 0 -1500', TRUE, world); t = pointcontents(trace_endpos + '0 0 1'); @@ -212,25 +206,6 @@ void havocbot_goalrating_enemyplayers(float ratingscale, vector org, float sradi // 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(); - } -} - //DM: //go to best items void havocbot_role_dm() @@ -293,31 +268,18 @@ 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_ChooseRole)) + 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(); }