diff options
Diffstat (limited to 'src/server/game/AI/CreatureAI.cpp')
-rw-r--r-- | src/server/game/AI/CreatureAI.cpp | 37 |
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(); |