aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/AI/CreatureAI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/AI/CreatureAI.cpp')
-rw-r--r--src/server/game/AI/CreatureAI.cpp37
1 files changed, 12 insertions, 25 deletions
diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp
index 54fbabd0b50..6894f4af091 100644
--- a/src/server/game/AI/CreatureAI.cpp
+++ b/src/server/game/AI/CreatureAI.cpp
@@ -85,8 +85,8 @@ void CreatureAI::DoZoneInCombat(Creature* creature /*= nullptr*/, float maxRange
if (Unit* summoner = creature->ToTempSummon()->GetSummoner())
{
Unit* target = summoner->getAttackerForHelper();
- if (!target && summoner->CanHaveThreatList() && !summoner->getThreatManager().isThreatListEmpty())
- target = summoner->getThreatManager().getHostilTarget();
+ if (!target && summoner->CanHaveThreatList() && !summoner->GetThreatManager().IsThreatListEmpty())
+ target = summoner->GetThreatManager().GetAnyTarget();
if (target && (creature->IsFriendlyTo(summoner) || creature->IsHostileTo(target)))
creature->AI()->AttackStart(target);
}
@@ -117,16 +117,8 @@ void CreatureAI::DoZoneInCombat(Creature* creature /*= nullptr*/, float maxRange
{
creature->SetInCombatWith(player);
player->SetInCombatWith(creature);
- creature->AddThreat(player, 0.0f);
+ creature->GetThreatManager().AddThreat(player, 0.0f, nullptr, true, true);
}
-
- /* Causes certain things to never leave the threat list (Priest Lightwell, etc):
- for (Unit::ControlList::const_iterator itr = player->m_Controlled.begin(); itr != player->m_Controlled.end(); ++itr)
- {
- creature->SetInCombatWith(*itr);
- (*itr)->SetInCombatWith(creature);
- creature->AddThreat(*itr, 0.0f);
- }*/
}
}
}
@@ -144,11 +136,11 @@ void CreatureAI::MoveInLineOfSight_Safe(Unit* who)
void CreatureAI::MoveInLineOfSight(Unit* who)
{
- if (me->GetVictim())
+ if (me->IsEngaged())
return;
if (me->HasReactState(REACT_AGGRESSIVE) && me->CanStartAttack(who, false))
- AttackStart(who);
+ me->EngageWithTarget(who);
}
void CreatureAI::_OnOwnerCombatInteraction(Unit* target)
@@ -157,12 +149,7 @@ void CreatureAI::_OnOwnerCombatInteraction(Unit* target)
return;
if (!me->HasReactState(REACT_PASSIVE) && me->CanStartAttack(target, true))
- {
- if (me->IsInCombat())
- me->AddThreat(target, 0.0f);
- else
- AttackStart(target);
- }
+ me->EngageWithTarget(target);
}
// Distract creature, if player gets too close while stealthed/prowling
@@ -172,8 +159,8 @@ void CreatureAI::TriggerAlert(Unit const* who) const
if (!who || who->GetTypeId() != TYPEID_PLAYER)
return;
- // If this unit isn't an NPC, is already distracted, is in combat, is confused, stunned or fleeing, do nothing
- if (me->GetTypeId() != TYPEID_UNIT || me->IsInCombat() || me->HasUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_STUNNED | UNIT_STATE_FLEEING | UNIT_STATE_DISTRACTED))
+ // If this unit isn't an NPC, is already distracted, is fighting, is confused, stunned or fleeing, do nothing
+ if (me->GetTypeId() != TYPEID_UNIT || me->IsEngaged() || me->HasUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_STUNNED | UNIT_STATE_FLEEING | UNIT_STATE_DISTRACTED))
return;
// Only alert for hostiles!
@@ -230,7 +217,7 @@ void CreatureAI::SetGazeOn(Unit* target)
bool CreatureAI::UpdateVictimWithGaze()
{
- if (!me->IsInCombat())
+ if (!me->IsEngaged())
return false;
if (me->HasReactState(REACT_PASSIVE))
@@ -250,7 +237,7 @@ bool CreatureAI::UpdateVictimWithGaze()
bool CreatureAI::UpdateVictim()
{
- if (!me->IsInCombat())
+ if (!me->IsEngaged())
return false;
if (!me->HasReactState(REACT_PASSIVE))
@@ -261,7 +248,7 @@ bool CreatureAI::UpdateVictim()
return me->GetVictim() != nullptr;
}
- else if (me->getThreatManager().isThreatListEmpty())
+ else if (me->GetThreatManager().IsThreatListEmpty())
{
EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
return false;
@@ -278,7 +265,7 @@ bool CreatureAI::_EnterEvadeMode(EvadeReason /*why*/)
me->RemoveAurasOnEvade();
// sometimes bosses stuck in combat?
- me->DeleteThreatList();
+ me->GetThreatManager().ClearAllThreat();
me->CombatStop(true);
me->SetLootRecipient(nullptr);
me->ResetPlayerDamageReq();