Skip to content

Commit

Permalink
feat(NpcBots/bot_ai): Change ranged bots to run to a tank or to their…
Browse files Browse the repository at this point in the history
… master when they have aggro (#7)

* feat(NpcBots/bot_ai): Changed ranged bots to run to a tank or to their master when they have aggro

* Tweaked the move position to be in a radius of +/- 1.5 from the target
  • Loading branch information
atrapalis authored Aug 13, 2024
1 parent 2a7b25d commit c54569d
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions src/server/game/AI/NpcBots/bot_ai.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5430,7 +5430,34 @@ void bot_ai::CalculateAttackPos(Unit* target, Position& pos, bool& force) const
force = true;
return;
}

// Ranged bots that are being targeted should move towards a tank bot or towards the player
if (!IsTank(me) && HasRole(BOT_ROLE_RANGED) && target->GetVictim() == me)
{
// By default go to the master
Unit* moveTarget = master;

// Look for a tank in the master's bots
BotMap const* map = master->GetBotMgr()->GetBotMap();
for (BotMap::const_iterator itr = map->begin(); itr != map->end(); ++itr)
if (itr->second && (IsTank(itr->second) || IsOffTank(itr->second)))
moveTarget = itr->second;

// Decide if the bot needs to move
float thresholdDistance = 1.5f;
bool rangedBotNeedsToMove = std::abs(me->GetDistance(moveTarget)) > thresholdDistance;
if (rangedBotNeedsToMove)
{
// Randomise and adjust the bot's position
float randomModifier = irand(0, 1) ? 1.0f : -1.0f;
float absoluteAngle = me->GetAbsoluteAngle(moveTarget);
pos.Relocate(Position(moveTarget->GetPositionX() + randomModifier * thresholdDistance * std::cos(absoluteAngle), moveTarget->GetPositionY() + randomModifier * thresholdDistance * std::sin(absoluteAngle)));
}

force = true;
return;
}

pos.Relocate(ppos);
if (!me->IsWithinLOSInMap(target, VMAP::ModelIgnoreFlags::M2, LINEOFSIGHT_ALL_CHECKS))
force = true;
Expand Down

0 comments on commit c54569d

Please sign in to comment.