diff options
Diffstat (limited to 'src/server/scripts/Outland')
25 files changed, 94 insertions, 137 deletions
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp index 57d6bfcbad3..29e68fa8751 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp @@ -101,7 +101,7 @@ public: if (IsHeroic()) DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0), SPELL_POLYMORPH); else - DoCast(SelectTarget(SELECT_TARGET_TOPAGGRO, 1), SPELL_POLYMORPH); + DoCast(SelectTarget(SELECT_TARGET_MAXTHREAT, 1), SPELL_POLYMORPH); events.ScheduleEvent(EVENT_POLYMORPH, urand(15000, 17500)); break; case EVENT_ARCANE_VOLLEY: diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp index 52e81448d42..c5e8f9fbba8 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp @@ -109,15 +109,11 @@ class boss_blackheart_the_inciter : public CreatureScript { DoCast(me, SPELL_INCITE_CHAOS); - std::list<HostileReference*> t_list = me->getThreatManager().getThreatList(); - for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) - { - if (Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) - if (target->GetTypeId() == TYPEID_PLAYER) - me->CastSpell(target, SPELL_INCITE_CHAOS_B, true); - } - - DoResetThreat(); + for (ThreatReference* ref : me->GetThreatManager().GetUnsortedThreatList()) + if (ref->GetVictim()->GetTypeId() == TYPEID_PLAYER) + me->CastSpell(ref->GetVictim(), SPELL_INCITE_CHAOS_B, true); + + ResetThreatList(); events.ScheduleEvent(EVENT_INCITE_CHAOS, 40000); break; } diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp index 99abd0be016..cca3a86ddb7 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp @@ -155,16 +155,7 @@ class boss_murmur : public CreatureScript return; if (!me->IsWithinMeleeRange(me->GetVictim())) - { - ThreatContainer::StorageType threatlist = me->getThreatManager().getThreatList(); - for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i != threatlist.end(); ++i) - if (Unit* target = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid())) - if (me->IsWithinMeleeRange(target)) - { - me->TauntApply(target); - break; - } - } + me->GetThreatManager().ResetThreat(me->GetVictim()); DoMeleeAttackIfReady(); } diff --git a/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp b/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp index 6f23709103a..ba8ded29f51 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp @@ -219,7 +219,7 @@ public: if (Unit* oldTarget = me->GetVictim()) { _oldTargetGUID = oldTarget->GetGUID(); - _oldThreat = DoGetThreat(oldTarget); + _oldThreat = GetThreat(oldTarget); } _targetGUID = target->GetGUID(); DoCastSelf(SPELL_FEL_RAGE_SELF, true); @@ -295,9 +295,9 @@ public: if (Unit* oldTarget = ObjectAccessor::GetUnit(*me, _oldTargetGUID)) if (Unit* currentTarget = ObjectAccessor::GetUnit(*me, _targetGUID)) { - DoModifyThreatPercent(currentTarget, -100); + ModifyThreatByPercent(currentTarget, -100); AttackStart(oldTarget); - me->AddThreat(oldTarget, _oldThreat); + AddThreat(oldTarget, _oldThreat); Initialize(); } } diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index 1080e6c1ca9..f638bf8149d 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -539,10 +539,7 @@ public: BossAI::JustSummoned(summon); if (summon->GetEntry() == NPC_ILLIDARI_ELITE) if (Creature* akama = instance->GetCreature(DATA_AKAMA)) - { - summon->CombatStart(akama); - summon->AddThreat(akama, 1000.0f); - } + AddThreat(akama, 1000.0f, summon); } void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override @@ -939,7 +936,7 @@ public: events.ScheduleEvent(EVENT_SCHEDULE_DEMON_SPELLS, Seconds(15)); break; case EVENT_SCHEDULE_DEMON_SPELLS: - DoResetThreat(); + ResetThreatList(); ScheduleEvents(GROUP_PHASE_DEMON, GROUP_PHASE_DEMON); break; case EVENT_DEMON_TEXT: @@ -948,7 +945,7 @@ public: case EVENT_RESUME_COMBAT_DEMON: { uint8 group = _phase == PHASE_3 ? GROUP_PHASE_3 : GROUP_PHASE_4; - DoResetThreat(); + ResetThreatList(); ScheduleEvents(group, group); me->LoadEquipment(1, true); break; diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp index 8a7b782baf2..789ba19fa5b 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp @@ -116,7 +116,7 @@ public: me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true); DoCast(SPELL_SNARE_SELF); } - DoResetThreat(); + ResetThreatList(); DoZoneInCombat(); events.ScheduleEvent(EVENT_SWITCH_PHASE, Seconds(60)); } @@ -126,11 +126,10 @@ public: uint64 health = 0; Unit* target = nullptr; - ThreatContainer::StorageType threatList = me->getThreatManager().getThreatList(); - for (ThreatContainer::StorageType::const_iterator itr = threatList.begin(); itr != threatList.end(); ++itr) + for (auto* ref : me->GetThreatManager().GetUnsortedThreatList()) { - Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); - if (unit && me->IsWithinMeleeRange(unit)) + Unit* unit = ref->GetVictim(); + if (me->IsWithinMeleeRange(unit)) { if (unit->GetHealth() > health) { @@ -162,8 +161,8 @@ public: case EVENT_SWITCH_TARGET: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100.0f, true)) { - DoResetThreat(); - me->AddThreat(target, 1000000.0f); + ResetThreatList(); + AddThreat(target, 1000000.0f); DoCast(target, SPELL_CHARGE); Talk(EMOTE_NEW_TARGET); } diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp index acacdfddc38..bdbc067ae92 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp @@ -193,7 +193,7 @@ public: events.Repeat(Seconds(30), Seconds(40)); break; case EVENT_SHADOW_DEATH: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100.0f, true, -SPELL_SPIRITUAL_VENGEANCE)) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100.0f, true, true, -SPELL_SPIRITUAL_VENGEANCE)) DoCast(target, SPELL_SHADOW_OF_DEATH); events.Repeat(Seconds(30), Seconds(35)); break; @@ -338,16 +338,16 @@ public: { if (Creature* teron = _instance->GetCreature(DATA_TERON_GOREFIEND)) { - Unit* target = teron->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true, -SPELL_SPIRITUAL_VENGEANCE); + Unit* target = teron->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true, true, -SPELL_SPIRITUAL_VENGEANCE); // He should target Vengeful Spirits only if has no other player available if (!target) target = teron->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0); if (target) { - DoResetThreat(); + ResetThreatList(); AttackStart(target); - me->AddThreat(target, 1000000.0f); + AddThreat(target, 1000000.0f); targetGUID = target->GetGUID(); } } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp index 7ac9ad71a8e..d5ef10dda82 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp @@ -293,7 +293,7 @@ public: MarkOfHydross_Count = 0; Talk(SAY_SWITCH_TO_CLEAN); - DoResetThreat(); + ResetThreatList(); SummonBeams(); // spawn 4 adds @@ -377,7 +377,7 @@ public: CorruptedForm = true; Talk(SAY_SWITCH_TO_CORRUPT); - DoResetThreat(); + ResetThreatList(); DeSummonBeams(); // spawn 4 adds diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp index ba563eb252f..f90d9e27604 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp @@ -348,7 +348,6 @@ public: // Shock Burst // Randomly used in Phases 1 and 3 on Vashj's target, it's a Shock spell doing 8325-9675 nature damage and stunning the target for 5 seconds, during which she will not attack her target but switch to the next person on the aggro list. DoCastVictim(SPELL_SHOCK_BLAST); - me->TauntApply(me->GetVictim()); ShockBlastTimer = 1000 + rand32() % 14000; // random cooldown } else ShockBlastTimer -= diff; @@ -432,11 +431,10 @@ public: if (CheckTimer <= diff) { bool inMeleeRange = false; - std::list<HostileReference*> t_list = me->getThreatManager().getThreatList(); - for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) + for (auto* ref : me->GetThreatManager().GetUnsortedThreatList()) { - Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); - if (target && target->IsWithinDistInMap(me, 5)) // if in melee range + Unit* target = ref->GetVictim(); + if (target->IsWithinMeleeRange(me)) // if in melee range { inMeleeRange = true; break; @@ -684,7 +682,7 @@ public: void EnterCombat(Unit* who) override { - me->AddThreat(who, 0.1f); + AddThreat(who, 0.1f); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp index d9759343bc7..fabc91da4c7 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp @@ -131,7 +131,7 @@ public: if (done_by->GetGUID() != victimGUID && done_by->GetGUID() != me->GetGUID()) { damage = 0; - DoModifyThreatPercent(done_by, -100); + ModifyThreatByPercent(done_by, -100); } } @@ -149,11 +149,11 @@ public: if (me->EnsureVictim()->GetGUID() != victimGUID) { - DoModifyThreatPercent(me->GetVictim(), -100); + ModifyThreatByPercent(me->GetVictim(), -100); Unit* owner = ObjectAccessor::GetUnit(*me, victimGUID); if (owner && owner->IsAlive()) { - me->AddThreat(owner, 999999); + AddThreat(owner, 999999); AttackStart(owner); } else if (owner && owner->isDead()) { @@ -334,7 +334,7 @@ public: Unit* victim = NULL; victim = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_LEOTHERAS_EVENT_STARTER)); if (victim) - me->getThreatManager().addThreat(victim, 1); + AddThreat(victim, 1); StartEvent(); } } @@ -386,7 +386,7 @@ public: if (unit_target && unit_target->IsAlive()) { unit->CastSpell(unit_target, SPELL_CONSUMING_MADNESS, true); - DoModifyThreatPercent(unit_target, -100); + ModifyThreatByPercent(unit_target, -100); } } } @@ -440,7 +440,7 @@ public: Unit* newTarget = SelectTarget(SELECT_TARGET_RANDOM, 0); if (newTarget) { - DoResetThreat(); + ResetThreatList(); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MovePoint(0, newTarget->GetPositionX(), newTarget->GetPositionY(), newTarget->GetPositionZ()); } @@ -458,7 +458,7 @@ public: Whirlwind_Timer = 15000; NeedThreatReset = false; - DoResetThreat(); + ResetThreatList(); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveChase(me->GetVictim()); } @@ -524,16 +524,17 @@ public: //Summon Inner Demon if (InnerDemons_Timer <= diff) { - ThreatContainer::StorageType const & ThreatList = me->getThreatManager().getThreatList(); - std::vector<Unit*> TargetList; - for (ThreatContainer::StorageType::const_iterator itr = ThreatList.begin(); itr != ThreatList.end(); ++itr) + ThreatManager const& mgr = me->GetThreatManager(); + std::list<Unit*> TargetList; + Unit* currentVictim = mgr.GetCurrentVictim(); + for (ThreatReference* ref : mgr.GetSortedThreatList()) { - Unit* tempTarget = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); - if (tempTarget && tempTarget->GetTypeId() == TYPEID_PLAYER && tempTarget->GetGUID() != me->EnsureVictim()->GetGUID() && TargetList.size()<5) - TargetList.push_back(tempTarget); + if (Player* tempTarget = ref->GetVictim()->ToPlayer()) + if (tempTarget != currentVictim && TargetList.size()<5) + TargetList.push_back(tempTarget); } //SpellInfo* spell = GET_SPELL(SPELL_INSIDIOUS_WHISPER); - for (std::vector<Unit*>::const_iterator itr = TargetList.begin(); itr != TargetList.end(); ++itr) + for (auto itr = TargetList.begin(), end = TargetList.end(); itr != end; ++itr) { if ((*itr) && (*itr)->IsAlive()) { diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index 75713f960a3..ead7069e962 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -228,9 +228,9 @@ public: return; } - if (me->getThreatManager().getThreatList().empty()) // check if should evade + if (!me->IsThreatened()) // check if should evade { - if (me->IsInCombat()) + if (me->IsEngaged()) EnterEvadeMode(); return; } @@ -344,7 +344,7 @@ public: return; } else PhaseTimer-=diff; - if (me->getThreatManager().getThreatList().empty()) // check if should evade + if (!me->IsThreatened()) // check if should evade { EnterEvadeMode(); return; diff --git a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp index 980cdce1bc8..87401815f53 100644 --- a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp +++ b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp @@ -205,7 +205,7 @@ class boss_gruul : public CreatureScript // Hurtful Strike if (m_uiHurtfulStrike_Timer <= diff) { - Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 1); + Unit* target = SelectTarget(SELECT_TARGET_MAXTHREAT, 1); if (target && me->IsWithinMeleeRange(me->GetVictim())) DoCast(target, SPELL_HURTFUL_STRIKE); diff --git a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp index a6c70e6b0f1..704350ce89d 100644 --- a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp +++ b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp @@ -248,7 +248,7 @@ public: if (me->Attack(who, true)) { - me->AddThreat(who, 0.0f); + AddThreat(who, 0.0f); me->SetInCombatWith(who); who->SetInCombatWith(me); @@ -557,17 +557,14 @@ public: //BlastWave_Timer if (BlastWave_Timer <= diff) { - Unit* target = NULL; - std::list<HostileReference*> t_list = me->getThreatManager().getThreatList(); std::vector<Unit*> target_list; - for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) + for (auto* ref : me->GetThreatManager().GetUnsortedThreatList()) { - target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); - //15 yard radius minimum - if (target && target->IsWithinDist(me, 15, false)) + Unit* target = ref->GetVictim(); + if (target && target->IsWithinDist(me, 15, false)) // 15 yard radius minimum target_list.push_back(target); - target = NULL; } + Unit* target = nullptr; if (!target_list.empty()) target = *(target_list.begin() + rand32() % target_list.size()); diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp index 858705111b0..5b2c6d1f6f8 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp @@ -141,7 +141,7 @@ class boss_nazan : public CreatureScript me->SetDisableGravity(false); me->SetWalk(true); me->GetMotionMaster()->Clear(); - if (Unit* victim = SelectTarget(SELECT_TARGET_NEAREST, 0)) + if (Unit* victim = SelectTarget(SELECT_TARGET_MINDISTANCE, 0)) AttackStart(victim); DoStartMovement(me->GetVictim()); Talk(EMOTE); diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp index eea4b8d15f3..70aecff5f91 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp @@ -344,8 +344,8 @@ class boss_warbringer_omrogg : public CreatureScript if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { DoYellForThreat(); - DoResetThreat(); - me->AddThreat(target, 0.0f); + ResetThreatList(); + AddThreat(target, 0.0f); } ResetThreat_Timer = 25000 + rand32() % 15000; } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index 59e48cb078b..9061f36d8bf 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -210,7 +210,7 @@ class boss_alar : public CreatureScript void UpdateAI(uint32 diff) override { - if (!me->IsInCombat()) // sometimes IsInCombat but !incombat, faction bug? + if (!me->IsEngaged()) return; if (Berserk_Timer <= diff) @@ -327,7 +327,7 @@ class boss_alar : public CreatureScript if (Phase1) { - if (me->getThreatManager().getThreatList().empty()) + if (!me->IsThreatened()) { EnterEvadeMode(); return; diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index ab5480e8b5f..d09fa536cc3 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -410,11 +410,11 @@ struct advisorbase_ai : public ScriptedAI if (!Target) Target = me->GetVictim(); - DoResetThreat(); + ResetThreatList(); AttackStart(Target); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveChase(Target); - me->AddThreat(Target, 0.0f); + AddThreat(Target, 0.0f); } } } @@ -560,7 +560,7 @@ class boss_kaelthas : public CreatureScript { DoAction(ACTION_START_ENCOUNTER); who->SetInCombatWith(me); - me->AddThreat(who, 0.0f); + AddThreat(who, 0.0f); me->SetTarget(who->GetGUID()); } } @@ -621,7 +621,7 @@ class boss_kaelthas : public CreatureScript me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->RemoveAurasDueToSpell(SPELL_FULLPOWER); - if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0)) + if (Unit* target = SelectTarget(SELECT_TARGET_MAXTHREAT, 0)) AttackStart(target); DoAction(ACTION_SCHEDULE_COMBAT_EVENTS); @@ -706,7 +706,7 @@ class boss_kaelthas : public CreatureScript Talk(SAY_PHASE4_INTRO2); // Sometimes people can collect Aggro in Phase 1-3. Reset threat before releasing Kael. - DoResetThreat(); + ResetThreatList(); me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED)); @@ -906,7 +906,7 @@ class boss_thaladred_the_darkener : public CreatureScript void EnterCombat(Unit* who) override { Talk(SAY_THALADRED_AGGRO); - me->AddThreat(who, 5000000.0f); + AddThreat(who, 5000000.0f); } void JustDied(Unit* killer) override @@ -929,8 +929,8 @@ class boss_thaladred_the_darkener : public CreatureScript { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { - DoResetThreat(); - me->AddThreat(target, 5000000.0f); + ResetThreatList(); + AddThreat(target, 5000000.0f); Talk(EMOTE_THALADRED_GAZE, target); Gaze_Timer = 8500; } @@ -1089,7 +1089,7 @@ class boss_grand_astromancer_capernian : public CreatureScript if (me->Attack(who, true)) { - me->AddThreat(who, 0.0f); + AddThreat(who, 0.0f); me->SetInCombatWith(who); who->SetInCombatWith(me); @@ -1137,13 +1137,11 @@ class boss_grand_astromancer_capernian : public CreatureScript if (ArcaneExplosion_Timer <= diff) { bool InMeleeRange = false; - Unit* target = NULL; - ThreatContainer::StorageType const &threatlist = me->getThreatManager().getThreatList(); - for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i!= threatlist.end(); ++i) + Unit* target = nullptr; + for (auto* ref : me->GetThreatManager().GetUnsortedThreatList()) { - Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()); - //if in melee range - if (unit && unit->IsWithinDistInMap(me, 5)) + Unit* unit = ref->GetVictim(); + if (unit->IsWithinMeleeRange(me)) { InMeleeRange = true; target = unit; @@ -1418,7 +1416,7 @@ class npc_phoenix_egg_tk : public CreatureScript void JustSummoned(Creature* summoned) override { - summoned->AddThreat(me->GetVictim(), 0.0f); + AddThreat(me->GetVictim(), 0.0f, summoned); summoned->CastSpell(summoned, SPELL_REBIRTH, false); } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp index 3ca0d959f79..8886740ff1b 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp @@ -111,20 +111,15 @@ class boss_void_reaver : public CreatureScript break; case EVENT_ARCANE_ORB: { - Unit* target = NULL; - std::list<HostileReference*> t_list = me->getThreatManager().getThreatList(); std::vector<Unit*> target_list; - for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr != t_list.end(); ++itr) + for (auto* ref : me->GetThreatManager().GetUnsortedThreatList()) { - target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); - if (!target) - continue; - // exclude pets & totems, 18 yard radius minimum + Unit* target = ref->GetVictim(); if (target->GetTypeId() == TYPEID_PLAYER && target->IsAlive() && !target->IsWithinDist(me, 18, false)) target_list.push_back(target); - target = NULL; } + Unit* target; if (!target_list.empty()) target = *(target_list.begin() + rand32() % target_list.size()); else @@ -139,8 +134,8 @@ class boss_void_reaver : public CreatureScript case EVENT_KNOCK_AWAY: DoCastVictim(SPELL_KNOCK_AWAY); // Drop 25% aggro - if (DoGetThreat(me->GetVictim())) - DoModifyThreatPercent(me->GetVictim(), -25); + if (GetThreat(me->GetVictim())) + ModifyThreatByPercent(me->GetVictim(), -25); events.ScheduleEvent(EVENT_KNOCK_AWAY, 30000); break; diff --git a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp index d8775fa71df..9dd6bc36fb9 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp @@ -78,16 +78,11 @@ class npc_crystalcore_devastator : public CreatureScript //Knockaway_Timer if (Knockaway_Timer <= diff) { - DoCastVictim(SPELL_KNOCKAWAY, true); - - // current aggro target is knocked away pick new target - Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0); - - if (!target || target == me->GetVictim()) - target = SelectTarget(SELECT_TARGET_TOPAGGRO, 1); - - if (target) - me->TauntApply(target); + if (Unit* victim = me->GetVictim()) + { + DoCastVictim(SPELL_KNOCKAWAY, true); + me->GetThreatManager().ResetThreat(victim); + } Knockaway_Timer = 23000; } diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp index 2a68ebd1ef6..a3d1fa9ee55 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp @@ -214,7 +214,6 @@ class npc_ragin_flames : public CreatureScript if (inferno_Timer <= diff) { DoCastVictim(SPELL_INFERNO); - me->TauntApply(me->GetVictim()); inferno_Timer = 10000; } else inferno_Timer -= diff; diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp index 3b4f22bc23c..eafd1f679f4 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp @@ -116,7 +116,7 @@ class npc_millhouse_manastorm : public CreatureScript { if (me->Attack(who, true)) { - me->AddThreat(who, 0.0f); + AddThreat(who, 0.0f); me->SetInCombatWith(who); who->SetInCombatWith(me); me->GetMotionMaster()->MoveChase(who, 25.0f); diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp index ab8b16468ae..6c499d8a280 100644 --- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp +++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp @@ -98,7 +98,7 @@ public: me->SetFaction(FACTION_FRIENDLY); me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); me->RemoveAllAuras(); - me->DeleteThreatList(); + me->GetThreatManager().ClearAllThreat(); me->CombatStop(true); Talk(SAY_FREE); return; @@ -971,7 +971,7 @@ public: _events.Reset(); me->RestoreFaction(); me->RemoveAllAuras(); - me->DeleteThreatList(); + me->GetThreatManager().ClearAllThreat(); me->CombatStop(true); me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); @@ -997,7 +997,7 @@ public: me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->SetFaction(FACTION_MONSTER_2); if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID)) - me->CombatStart(player); + me->EngageWithTarget(player); _events.ScheduleEvent(EVENT_FIREBALL, 1); _events.ScheduleEvent(EVENT_FROSTNOVA, Seconds(5)); break; diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index 6b74490e9dd..462178d2bb0 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -431,21 +431,14 @@ public: // some code to cast spell Mana Burn on random target which has mana if (ManaBurnTimer <= diff) { - std::list<HostileReference*> AggroList = me->getThreatManager().getThreatList(); std::list<Unit*> UnitsWithMana; - - for (std::list<HostileReference*>::const_iterator itr = AggroList.begin(); itr != AggroList.end(); ++itr) - { - if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) - { - if (unit->GetCreateMana() > 0) - UnitsWithMana.push_back(unit); - } - } + for (auto* ref : me->GetThreatManager().GetUnsortedThreatList()) + if (ref->GetVictim()->GetPower(POWER_MANA)) + UnitsWithMana.push_back(ref->GetVictim()); if (!UnitsWithMana.empty()) { DoCast(Trinity::Containers::SelectRandomContainerElement(UnitsWithMana), SPELL_MANA_BURN); - ManaBurnTimer = 8000 + (rand32() % 10 * 1000); // 8-18 sec cd + ManaBurnTimer = urand(8000, 18000); // 8-18 sec cd } else ManaBurnTimer = 3500; diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index a44dedb56ca..8520b43e8b4 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -398,13 +398,11 @@ public: Unit* Dragonmaw = me->FindNearestCreature(NPC_DRAGONMAW_SUBJUGATOR, 50); if (Dragonmaw) { - me->AddThreat(Dragonmaw, 100000.0f); + AddThreat(Dragonmaw, 100000.0f); AttackStart(Dragonmaw); } - HostileReference* ref = me->getThreatManager().getOnlineContainer().getReferenceByTarget(caster); - if (ref) - ref->removeReference(); + me->GetThreatManager().ClearThreat(caster); } } @@ -908,7 +906,7 @@ public: if (Player* AggroTarget = ObjectAccessor::GetPlayer(*me, AggroTargetGUID)) { me->SetTarget(AggroTarget->GetGUID()); - me->AddThreat(AggroTarget, 1); + AddThreat(AggroTarget, 1); me->HandleEmoteCommand(EMOTE_ONESHOT_POINT); } break; diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp index cb3666e6261..5772c5c1a0e 100644 --- a/src/server/scripts/Outland/zone_terokkar_forest.cpp +++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp @@ -96,7 +96,7 @@ public: me->SetFaction(FACTION_FRIENDLY); me->SetStandState(UNIT_STAND_STATE_SIT); me->RemoveAllAuras(); - me->DeleteThreatList(); + me->GetThreatManager().ClearAllThreat(); me->CombatStop(true); UnkorUnfriendly_Timer = 60000; } |
