aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Northrend
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2017-07-01 20:18:02 +0200
committerShauren <shauren.trinity@gmail.com>2017-07-01 20:18:02 +0200
commite2a1ccd118d129b96e09ff1a15ed0adb1d4a3897 (patch)
treebbe6600c4066078bb7c64a117df457dce0d00b26 /src/server/scripts/Northrend
parent5879eb2198fdb976b9fff136757bf8187adb6cf0 (diff)
[3.3.5] Combat/Threat rewrite - prep & refactor (#19966)
* Combat/Threat rewrite (PR #19930) prep work. Mostly refactors, and a compatibility layer on ThreatManager/HostileReference that allows scripts to be changed already.
Diffstat (limited to 'src/server/scripts/Northrend')
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp6
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp12
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp4
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp7
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp34
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp6
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp5
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp22
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp14
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp6
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp13
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp12
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp9
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp6
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp15
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp6
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp32
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp16
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp9
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_noth.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp64
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp2
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp52
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp12
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp12
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp6
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp15
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp6
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp4
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp2
-rw-r--r--src/server/scripts/Northrend/VioletHold/violet_hold.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp2
58 files changed, 217 insertions, 272 deletions
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
index 30ba1180663..882b3c22410 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp
@@ -191,7 +191,7 @@ public:
else
{
who->SetInCombatWith(me);
- me->AddThreat(who, 0.0f);
+ AddThreat(who, 0.0f);
}
}
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
index faaa22cf9ac..89b5268684d 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp
@@ -162,7 +162,7 @@ public:
bool IsInCombatWithPlayer() const
{
- std::list<HostileReference*> const& refs = me->getThreatManager().getThreatList();
+ std::list<HostileReference*> const& refs = me->GetThreatManager().getThreatList();
for (HostileReference const* hostileRef : refs)
{
if (Unit const* target = hostileRef->getTarget())
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
index 22eb9cdb04a..c74dd3dec6b 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
@@ -220,7 +220,7 @@ struct dummy_dragonAI : public ScriptedAI
me->SetInCombatWithZone();
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0, true))
{
- me->AddThreat(target, 1.0f);
+ me->GetThreatManager().AddThreat(target, 1.0f);
me->Attack(target, true);
me->GetMotionMaster()->MoveChase(target);
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index 1256e5745b3..472dc16191f 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -345,7 +345,7 @@ class boss_halion : public CreatureScript
break;
case EVENT_METEOR_STRIKE:
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -SPELL_TWILIGHT_REALM))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, true, -SPELL_TWILIGHT_REALM))
{
_meteorStrikePos = target->GetPosition();
me->CastSpell(_meteorStrikePos.GetPositionX(), _meteorStrikePos.GetPositionY(), _meteorStrikePos.GetPositionZ(), SPELL_METEOR_STRIKE, true, nullptr, nullptr, me->GetGUID());
@@ -356,7 +356,7 @@ class boss_halion : public CreatureScript
}
case EVENT_FIERY_COMBUSTION:
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_TWILIGHT_REALM))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, true, -SPELL_TWILIGHT_REALM))
me->CastSpell(target, SPELL_FIERY_COMBUSTION, TRIGGERED_IGNORE_SET_FACING);
events.ScheduleEvent(EVENT_FIERY_COMBUSTION, Seconds(25));
break;
@@ -527,7 +527,7 @@ class boss_twilight_halion : public CreatureScript
events.ScheduleEvent(EVENT_BREATH, randtime(Seconds(10), Seconds(14)));
break;
case EVENT_SOUL_CONSUMPTION:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, SPELL_TWILIGHT_REALM))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, true, SPELL_TWILIGHT_REALM))
me->CastSpell(target, SPELL_SOUL_CONSUMPTION, TRIGGERED_IGNORE_SET_FACING);
events.ScheduleEvent(EVENT_SOUL_CONSUMPTION, Seconds(20));
break;
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
index 5181b125fdf..4bb64f22dfc 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
@@ -115,7 +115,7 @@ void AggroAllPlayers(Creature* temp)
temp->SetReactState(REACT_AGGRESSIVE);
temp->SetInCombatWith(player);
player->SetInCombatWith(temp);
- temp->AddThreat(player, 0.0f);
+ temp->GetThreatManager().AddThreat(player, 0.0f);
}
}
}
@@ -263,8 +263,8 @@ public:
Player* player = itr->GetSource();
if (player && !player->IsGameMaster() && me->IsInRange(player, 8.0f, 25.0f, false))
{
- DoResetThreat();
- me->AddThreat(player, 1.0f);
+ ResetThreatList();
+ me->GetThreatManager().AddThreat(player, 1.0f);
DoCast(player, SPELL_CHARGE);
break;
}
@@ -409,8 +409,8 @@ public:
Player* player = itr->GetSource();
if (player && !player->IsGameMaster() && me->IsInRange(player, 8.0f, 25.0f, false))
{
- DoResetThreat();
- me->AddThreat(player, 5.0f);
+ ResetThreatList();
+ me->GetThreatManager().AddThreat(player, 5.0f);
DoCast(player, SPELL_INTERCEPT);
break;
}
@@ -847,7 +847,7 @@ public:
if (uiShootTimer <= uiDiff)
{
- if (Unit* target = SelectTarget(SELECT_TARGET_FARTHEST, 0, 30.0f))
+ if (Unit* target = SelectTarget(SELECT_TARGET_MAXDISTANCE, 0, 30.0f))
{
uiTargetGUID = target->GetGUID();
DoCast(target, SPELL_SHOOT);
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
index 4dc43888726..efedf67069f 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
@@ -384,9 +384,7 @@ public:
temp->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
temp->SetReactState(REACT_AGGRESSIVE);
- temp->SetInCombatWith(player);
- player->SetInCombatWith(temp);
- temp->AddThreat(player, 0.0f);
+ AddThreat(player, 0.0f, temp);
}
}
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
index 60479c6be30..72ac4f0e499 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
@@ -261,7 +261,7 @@ class boss_anubarak_trial : public CreatureScript
summoned->SetDisplayId(summoned->GetCreatureTemplate()->Modelid1);
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
{
- summoned->CombatStart(target);
+ summoned->EngageWithTarget(target);
Talk(EMOTE_SPIKE, target);
}
break;
@@ -814,12 +814,11 @@ class npc_anubarak_spike : public CreatureScript
DoCast(who, SPELL_MARK);
me->SetSpeedRate(MOVE_RUN, 0.5f);
// make sure the Spine will really follow the one he should
- me->getThreatManager().clearReferences();
+ ResetThreatList();
me->SetInCombatWithZone();
- me->getThreatManager().addThreat(who, std::numeric_limits<float>::max());
+ AddThreat(who, 1000000.0f);
me->GetMotionMaster()->Clear(true);
me->GetMotionMaster()->MoveChase(who);
- me->TauntApply(who);
}
private:
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
index ef37afffc04..d4fade43ba4 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp
@@ -611,20 +611,9 @@ struct boss_faction_championsAI : public BossAI
void UpdateThreat()
{
- std::list<HostileReference*> const& tList = me->getThreatManager().getThreatList();
- for (std::list<HostileReference*>::const_iterator itr = tList.begin(); itr != tList.end(); ++itr)
- {
- Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
- if (unit && me->getThreatManager().getThreat(unit))
- {
- if (unit->GetTypeId() == TYPEID_PLAYER)
- {
- float threat = CalculateThreat(me->GetDistance2d(unit), (float)unit->GetArmor(), unit->GetHealth());
- me->getThreatManager().modifyThreatPercent(unit, -100);
- me->AddThreat(unit, 1000000.0f * threat);
- }
- }
- }
+ for (ThreatReference* ref : me->GetThreatManager().GetUnsortedThreatList())
+ if (Player* victim = ref->GetVictim()->ToPlayer())
+ ref->SetThreat(1000000.0f * CalculateThreat(me->GetDistance2d(victim), victim->GetArmor(), victim->GetHealth()));
}
void UpdatePower()
@@ -693,7 +682,7 @@ struct boss_faction_championsAI : public BossAI
Unit* SelectEnemyCaster(bool /*casting*/)
{
- std::list<HostileReference*> const& tList = me->getThreatManager().getThreatList();
+ std::list<HostileReference*> const& tList = me->GetThreatManager().getThreatList();
std::list<HostileReference*>::const_iterator iter;
for (iter = tList.begin(); iter!=tList.end(); ++iter)
{
@@ -706,15 +695,10 @@ struct boss_faction_championsAI : public BossAI
uint32 EnemiesInRange(float distance)
{
- std::list<HostileReference*> const& tList = me->getThreatManager().getThreatList();
- std::list<HostileReference*>::const_iterator iter;
uint32 count = 0;
- for (iter = tList.begin(); iter != tList.end(); ++iter)
- {
- Unit* target = ObjectAccessor::GetUnit(*me, (*iter)->getUnitGuid());
- if (target && me->GetDistance2d(target) < distance)
- ++count;
- }
+ for (ThreatReference* ref : me->GetThreatManager().GetUnsortedThreatList())
+ if (me->GetDistance2d(ref->GetVictim()) < distance)
+ ++count;
return count;
}
@@ -725,9 +709,7 @@ struct boss_faction_championsAI : public BossAI
if (me->Attack(who, true))
{
- me->AddThreat(who, 10.0f);
- me->SetInCombatWith(who);
- who->SetInCombatWith(me);
+ AddThreat(who, 10.0f);
if (_aiType == AI_MELEE || _aiType == AI_PET)
DoStartMovement(who);
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
index 7b6a20c1dd7..767f46756ea 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp
@@ -161,12 +161,12 @@ class boss_jaraxxus : public CreatureScript
events.ScheduleEvent(EVENT_FEL_FIREBALL, urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS));
return;
case EVENT_FEL_LIGHTNING:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -SPELL_LORD_HITTIN))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, true, -SPELL_LORD_HITTIN))
DoCast(target, SPELL_FEL_LIGHTING);
events.ScheduleEvent(EVENT_FEL_LIGHTNING, urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS));
return;
case EVENT_INCINERATE_FLESH:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_LORD_HITTIN))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, true, -SPELL_LORD_HITTIN))
{
Talk(EMOTE_INCINERATE, target);
Talk(SAY_INCINERATE);
@@ -179,7 +179,7 @@ class boss_jaraxxus : public CreatureScript
events.ScheduleEvent(EVENT_NETHER_POWER, 40*IN_MILLISECONDS);
return;
case EVENT_LEGION_FLAME:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_LORD_HITTIN))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, true, -SPELL_LORD_HITTIN))
{
Talk(EMOTE_LEGION_FLAME, target);
DoCast(target, SPELL_LEGION_FLAME);
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
index ba4c19b316d..73dd987171e 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
@@ -319,7 +319,7 @@ struct boss_twin_baseAI : public BossAI
events.ScheduleEvent(EVENT_TWIN_SPIKE, 20 * IN_MILLISECONDS);
break;
case EVENT_TOUCH:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 200.0f, true, OtherEssenceSpellId))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 200.0f, true, true, OtherEssenceSpellId))
me->CastCustomSpell(TouchSpellId, SPELLVALUE_MAX_TARGETS, 1, target, false);
events.ScheduleEvent(EVENT_TOUCH, urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS));
break;
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
index c966f74cd89..8a404f66cc5 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
@@ -555,8 +555,7 @@ class npc_fizzlebang_toc : public CreatureScript
{
//1-shot Fizzlebang
jaraxxus->CastSpell(me, 67888, false); // 67888 - Fel Lightning
- me->SetInCombatWith(jaraxxus);
- jaraxxus->AddThreat(me, 1000.0f);
+ AddThreat(me, 1000.0f, jaraxxus);
jaraxxus->AI()->AttackStart(me);
}
_instance->SetData(TYPE_EVENT, 1160);
@@ -683,7 +682,7 @@ class npc_tirion_toc : public CreatureScript
break;
case 400:
Talk(SAY_STAGE_0_06);
- me->getThreatManager().clearReferences();
+ me->GetThreatManager().ClearAllThreat();
_updateTimer = 5*IN_MILLISECONDS;
_instance->SetData(TYPE_EVENT, 0);
break;
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
index ab35de44aeb..1bedf9f7961 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
@@ -960,14 +960,12 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
void DeleteAllFromThreatList(Unit* target, ObjectGuid except)
{
- ThreatContainer::StorageType threatlist = target->getThreatManager().getThreatList();
- for (auto i : threatlist)
- {
- if (i->getUnitGuid() == except)
- continue;
-
- i->removeReference();
- }
+ std::vector<ThreatReference*> toClear;
+ for (ThreatReference* ref : target->GetThreatManager().GetUnsortedThreatList())
+ if (ref->GetVictim()->GetGUID() != except)
+ toClear.push_back(ref);
+ for (ThreatReference* ref : toClear)
+ ref->ClearThreat();
}
void UpdateAI(uint32 diff) override
@@ -1346,7 +1344,7 @@ class npc_the_lich_king_escape_hor : public CreatureScript
AttackStart(victim);
return me->GetVictim() != nullptr;
}
- else if (me->getThreatManager().getThreatList().size() < 2 && me->HasAura(SPELL_REMORSELESS_WINTER))
+ else if (me->GetThreatManager().GetThreatListSize() < 2 && me->HasAura(SPELL_REMORSELESS_WINTER))
{
EnterEvadeMode(EVADE_REASON_OTHER);
return false;
@@ -1929,7 +1927,7 @@ class npc_frostsworn_general : public CreatureScript
void SummonClones()
{
std::list<Unit*> playerList;
- SelectTargetList(playerList, 5, SELECT_TARGET_TOPAGGRO, 0.0f, true);
+ SelectTargetList(playerList, 5, SELECT_TARGET_MAXTHREAT, 0, 0.0f, true);
for (Unit* target : playerList)
{
if (Creature* reflection = me->SummonCreature(NPC_REFLECTION, *target, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000))
@@ -2172,7 +2170,7 @@ struct npc_escape_event_trash : public ScriptedAI
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
me->SetInCombatWith(leader);
leader->SetInCombatWith(me);
- me->AddThreat(leader, 0.0f);
+ AddThreat(leader, 0.0f);
}
}
@@ -2292,7 +2290,7 @@ class npc_risen_witch_doctor : public CreatureScript
_events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_CURSE, urand(10000, 15000));
break;
case EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT:
- if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0, 20.0f, true))
+ if (Unit* target = SelectTarget(SELECT_TARGET_MAXTHREAT, 0, 20.0f, true))
DoCast(target, SPELL_SHADOW_BOLT);
_events.ScheduleEvent(EVENT_RISEN_WITCH_DOCTOR_SHADOW_BOLT, urand(2000, 3000));
break;
diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
index 05bf39cb5fb..f21d4fa007c 100644
--- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp
@@ -197,16 +197,16 @@ class boss_ick : public CreatureScript
void _ResetThreat(Unit* target)
{
- DoModifyThreatPercent(target, -100);
- me->AddThreat(target, _tempThreat);
+ ModifyThreatByPercent(target, -100);
+ AddThreat(target, _tempThreat);
}
void UpdateAI(uint32 diff) override
{
- if (!me->IsInCombat())
+ if (!me->IsEngaged())
return;
- if (!me->GetVictim() && me->getThreatManager().isThreatListEmpty())
+ if (!me->GetVictim() && me->GetThreatManager().IsThreatListEmpty())
{
EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
return;
@@ -638,9 +638,9 @@ class spell_krick_pursuit : public SpellScriptLoader
{
ick->AI()->Talk(SAY_ICK_CHASE_1, target);
ick->AddAura(GetSpellInfo()->Id, target);
- ENSURE_AI(boss_ick::boss_ickAI, ick->AI())->SetTempThreat(ick->getThreatManager().getThreat(target));
- ick->AddThreat(target, float(GetEffectValue()));
- target->AddThreat(ick, float(GetEffectValue()));
+ ENSURE_AI(boss_ick::boss_ickAI, ick->AI())->SetTempThreat(ick->GetThreatManager().GetThreat(target));
+ ick->GetThreatManager().AddThreat(target, float(GetEffectValue()), GetSpellInfo(), true, true);
+ target->GetThreatManager().AddThreat(ick, float(GetEffectValue()), GetSpellInfo(), true, true);
}
}
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
index 5b2248d5341..28be5f8ccc0 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -505,7 +505,7 @@ struct BloodPrincesBossAI : public BossAI
{
if (!_isEmpowered)
{
- me->AddThreat(attacker, float(damage));
+ AddThreat(attacker, float(damage));
damage = 0;
}
}
@@ -1151,8 +1151,8 @@ class npc_dark_nucleus : public CreatureScript
if (attacker == me)
return;
- me->DeleteThreatList();
- me->AddThreat(attacker, 500000000.0f);
+ me->GetThreatManager().ClearAllThreat();
+ AddThreat(attacker, 500000000.0f);
}
void UpdateAI(uint32 diff) override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
index b908e1a9c35..30d57d99a75 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp
@@ -484,15 +484,14 @@ class boss_blood_queen_lana_thel : public CreatureScript
// offtank for this encounter is the player standing closest to main tank
Player* SelectRandomTarget(bool includeOfftank, std::list<Player*>* targetList = nullptr)
{
- std::list<HostileReference*> const& threatlist = me->getThreatManager().getThreatList();
- std::list<Player*> tempTargets;
-
- if (threatlist.empty())
+ if (me->GetThreatManager().IsThreatListEmpty(true))
return nullptr;
- for (std::list<HostileReference*>::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
- if (Unit* refTarget = (*itr)->getTarget())
- if (refTarget != me->GetVictim() && refTarget->GetTypeId() == TYPEID_PLAYER && (includeOfftank || (refTarget->GetGUID() != _offtankGUID)))
+ std::list<Player*> tempTargets;
+ Unit* maintank = me->GetThreatManager().GetCurrentVictim();
+ for (ThreatReference* ref : me->GetThreatManager().GetUnsortedThreatList())
+ if (Player* refTarget = ref->GetVictim()->ToPlayer())
+ if (refTarget != maintank && (includeOfftank || (refTarget->GetGUID() != _offtankGUID)))
tempTargets.push_back(refTarget->ToPlayer());
if (tempTargets.empty())
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
index 172c54fd7e0..f5568b4c298 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -580,7 +580,7 @@ class boss_deathbringer_saurfang : public CreatureScript
}
case ACTION_MARK_OF_THE_FALLEN_CHAMPION:
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_MARK_OF_THE_FALLEN_CHAMPION))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, true, -SPELL_MARK_OF_THE_FALLEN_CHAMPION))
{
++_fallenChampionCastCount;
DoCast(target, SPELL_MARK_OF_THE_FALLEN_CHAMPION);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
index 5b0ea090802..dbf8aa32697 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
@@ -211,8 +211,8 @@ class boss_festergut : public CreatureScript
{
std::list<Unit*> ranged, melee;
uint32 minTargets = RAID_MODE<uint32>(3, 8, 3, 8);
- SelectTargetList(ranged, 25, SELECT_TARGET_RANDOM, -5.0f, true);
- SelectTargetList(melee, 25, SELECT_TARGET_RANDOM, 5.0f, true);
+ SelectTargetList(ranged, 25, SELECT_TARGET_RANDOM, 0, -5.0f, true);
+ SelectTargetList(melee, 25, SELECT_TARGET_RANDOM, 0, 5.0f, true);
while (ranged.size() < minTargets)
{
if (melee.empty())
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
index aa0ce037619..41b836922e1 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
@@ -583,7 +583,7 @@ struct gunship_npc_AI : public ScriptedAI
if (!me->IsAlive() || !me->IsInCombat())
return;
- me->DeleteThreatList();
+ me->GetThreatManager().ClearAllThreat();
me->CombatStop(true);
me->GetMotionMaster()->MoveTargetedHome();
}
@@ -639,7 +639,7 @@ protected:
return me->GetVictim() != nullptr;
}
- else if (me->getThreatManager().isThreatListEmpty())
+ else if (me->GetThreatManager().IsThreatListEmpty())
{
EnterEvadeMode(EVADE_REASON_OTHER);
return false;
@@ -728,7 +728,7 @@ class npc_gunship : public CreatureScript
{
Creature* stalker = *itr;
stalker->RemoveAllAuras();
- stalker->DeleteThreatList();
+ stalker->GetThreatManager().ClearAllThreat();
stalker->CombatStop(true);
}
@@ -887,7 +887,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
if (!me->IsAlive())
return;
- me->DeleteThreatList();
+ me->GetThreatManager().ClearAllThreat();
me->CombatStop(true);
me->GetMotionMaster()->MoveTargetedHome();
@@ -1156,7 +1156,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
if (!me->IsAlive())
return;
- me->DeleteThreatList();
+ me->GetThreatManager().ClearAllThreat();
me->CombatStop(true);
me->GetMotionMaster()->MoveTargetedHome();
@@ -1492,7 +1492,7 @@ struct npc_gunship_boarding_addAI : public gunship_npc_AI
{
players.sort(Trinity::ObjectDistanceOrderPred(me));
for (std::list<Player*>::iterator itr = players.begin(); itr != players.end(); ++itr)
- me->AddThreat(*itr, 1.0f);
+ AddThreat(*itr, 1.0f);
AttackStart(players.front());
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
index 602c191cfab..8a444b3d933 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
@@ -316,9 +316,10 @@ class boss_lady_deathwhisper : public CreatureScript
scheduler.Schedule(Seconds(27), [this](TaskContext dominate_mind)
{
Talk(SAY_DOMINATE_MIND);
- for (uint8 i = 0; i < _dominateMindCount; i++)
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_DOMINATE_MIND))
- DoCast(target, SPELL_DOMINATE_MIND);
+ std::list<Unit*> targets;
+ SelectTargetList(targets, _dominateMindCount, SELECT_TARGET_RANDOM, 0, 0.0f, true, false, -SPELL_DOMINATE_MIND);
+ for (Unit* target : targets)
+ DoCast(target, SPELL_DOMINATE_MIND);
dominate_mind.Repeat(Seconds(40), Seconds(45));
});
// phase one only
@@ -414,7 +415,7 @@ class boss_lady_deathwhisper : public CreatureScript
Talk(SAY_PHASE_2);
Talk(EMOTE_PHASE_2);
DoStartMovement(me->GetVictim());
- DoResetThreat();
+ ResetThreatList();
damage -= me->GetPower(POWER_MANA);
me->SetPower(POWER_MANA, 0);
me->RemoveAurasDueToSpell(SPELL_MANA_BARRIER);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
index c13ce2ed638..ca8a9356db6 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
@@ -518,8 +518,8 @@ class spell_marrowgar_coldflame : public SpellScriptLoader
void SelectTarget(std::list<WorldObject*>& targets)
{
targets.clear();
- // select any unit but not the tank (by owners threatlist)
- Unit* target = GetCaster()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 1, -GetCaster()->GetCombatReach(), true, -SPELL_IMPALED);
+ // select any unit but not the tank
+ Unit* target = GetCaster()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 0, -GetCaster()->GetCombatReach(), true, false, -SPELL_IMPALED);
if (!target)
target = GetCaster()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true); // or the tank if its solo
if (!target)
@@ -645,7 +645,7 @@ class spell_marrowgar_bone_spike_graveyard : public SpellScriptLoader
uint8 boneSpikeCount = uint8(GetCaster()->GetMap()->GetSpawnMode() & 1 ? 3 : 1);
std::list<Unit*> targets;
- marrowgarAI->SelectTargetList(targets, BoneSpikeTargetSelector(marrowgarAI), boneSpikeCount, SELECT_TARGET_RANDOM);
+ marrowgarAI->SelectTargetList(targets, boneSpikeCount, SELECT_TARGET_RANDOM, 1, BoneSpikeTargetSelector(marrowgarAI));
if (targets.empty())
return;
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
index ca10713b47a..63d3af3931a 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
@@ -503,10 +503,9 @@ class boss_professor_putricide : public CreatureScript
{
std::list<Unit*> targetList;
{
- const std::list<HostileReference*>& threatlist = me->getThreatManager().getThreatList();
- for (std::list<HostileReference*>::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
- if ((*itr)->getTarget()->GetTypeId() == TYPEID_PLAYER)
- targetList.push_back((*itr)->getTarget());
+ for (ThreatReference* ref : me->GetThreatManager().GetUnsortedThreatList())
+ if (Player* target = ref->GetVictim()->ToPlayer())
+ targetList.push_back(target);
}
size_t half = targetList.size()/2;
@@ -605,7 +604,7 @@ class boss_professor_putricide : public CreatureScript
case EVENT_SLIME_PUDDLE:
{
std::list<Unit*> targets;
- SelectTargetList(targets, 2, SELECT_TARGET_RANDOM, 0.0f, true);
+ SelectTargetList(targets, 2, SELECT_TARGET_RANDOM, 0, 0.0f, true);
if (!targets.empty())
for (std::list<Unit*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
DoCast(*itr, SPELL_SLIME_PUDDLE_TRIGGER);
@@ -635,7 +634,7 @@ class boss_professor_putricide : public CreatureScript
if (Is25ManRaid())
{
std::list<Unit*> targets;
- SelectTargetList(targets, 2, SELECT_TARGET_RANDOM, -7.0f, true);
+ SelectTargetList(targets, 2, SELECT_TARGET_RANDOM, 0, -7.0f, true);
if (!targets.empty())
{
Talk(EMOTE_MALLEABLE_GOO);
@@ -925,9 +924,9 @@ class spell_putricide_ooze_channel : public SpellScriptLoader
void StartAttack()
{
GetCaster()->ClearUnitState(UNIT_STATE_CASTING);
- GetCaster()->DeleteThreatList();
+ GetCaster()->GetThreatManager().ClearAllThreat();
GetCaster()->ToCreature()->AI()->AttackStart(GetHitUnit());
- GetCaster()->AddThreat(GetHitUnit(), 500000000.0f); // value seen in sniff
+ GetCaster()->GetThreatManager().AddThreat(GetHitUnit(), 500000000.0f, nullptr, true, true); // value seen in sniff
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index 337bdc560b4..e8bea735d40 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
@@ -258,7 +258,7 @@ class npc_little_ooze : public CreatureScript
DoCast(me, SPELL_WEAK_RADIATING_OOZE, true);
DoCast(me, SPELL_GREEN_ABOMINATION_HITTIN__YA_PROC, true);
events.ScheduleEvent(EVENT_STICKY_OOZE, 5000);
- me->AddThreat(summoner, 500000.0f);
+ AddThreat(summoner, 500000.0f);
}
void JustDied(Unit* /*killer*/) override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
index 36574c9e812..4bf8f97f623 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -1540,7 +1540,7 @@ class spell_frostwarden_handler_focus_fire : public SpellScriptLoader
void HandleScript(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
- GetCaster()->AddThreat(GetHitUnit(), float(GetEffectValue()));
+ GetCaster()->GetThreatManager().AddThreat(GetHitUnit(), float(GetEffectValue()));
GetCaster()->GetAI()->SetData(DATA_WHELP_MARKER, 1);
}
@@ -1559,7 +1559,7 @@ class spell_frostwarden_handler_focus_fire : public SpellScriptLoader
PreventDefaultAction();
if (Unit* caster = GetCaster())
{
- caster->AddThreat(GetTarget(), -float(GetSpellInfo()->Effects[EFFECT_1].CalcValue()));
+ caster->GetThreatManager().AddThreat(GetTarget(), -float(GetSpellInfo()->Effects[EFFECT_1].CalcValue()));
caster->GetAI()->SetData(DATA_WHELP_MARKER, 0);
}
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
index b219ded2afd..97b3261f51e 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -972,7 +972,7 @@ class boss_the_lich_king : public CreatureScript
events.ScheduleEvent(EVENT_SOUL_REAPER, urand(33000, 35000), 0, PHASE_TWO_THREE);
break;
case EVENT_DEFILE:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_HARVEST_SOUL_VALKYR))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, true, -SPELL_HARVEST_SOUL_VALKYR))
{
Talk(EMOTE_DEFILE_WARNING);
DoCast(target, SPELL_DEFILE);
@@ -1789,7 +1789,7 @@ class npc_terenas_menethil : public CreatureScript
if (!me->IsAlive())
return;
- me->DeleteThreatList();
+ me->GetThreatManager().ClearAllThreat();
me->CombatStop(false);
}
@@ -2781,7 +2781,7 @@ class spell_the_lich_king_vile_spirit_move_target_search : public SpellScriptLoa
return;
GetCaster()->ToCreature()->AI()->AttackStart(GetHitUnit());
- GetCaster()->AddThreat(GetHitUnit(), 100000.0f);
+ GetCaster()->GetThreatManager().AddThreat(GetHitUnit(), 100000.0f);
}
void Register() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index c558aa47d52..493b759e0f7 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -562,7 +562,7 @@ class npc_green_dragon_combat_trigger : public CreatureScript
// @TODO check out of bounds on all encounter creatures, evade if matched
- std::list<HostileReference*> const& threatList = me->getThreatManager().getThreatList();
+ std::list<HostileReference*> const& threatList = me->GetThreatManager().getThreatList();
if (threatList.empty())
{
EnterEvadeMode();
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index 789370d8762..2ddfa86f5fa 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -922,7 +922,7 @@ class boss_sister_svalna : public CreatureScript
Talk(SAY_SVALNA_AGGRO);
break;
case EVENT_IMPALING_SPEAR:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_IMPALING_SPEAR))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, true, -SPELL_IMPALING_SPEAR))
{
DoCast(me, SPELL_AETHER_SHIELD);
DoCast(target, SPELL_IMPALING_SPEAR);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
index 37baf7afe8d..ffc899b4d0d 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
@@ -1460,7 +1460,7 @@ class instance_icecrown_citadel : public InstanceMapScript
if (Creature* warden = instance->SummonCreature(NPC_SPIRIT_WARDEN, SpiritWardenSpawn, nullptr, 63000))
{
terenas->AI()->AttackStart(warden);
- warden->AddThreat(terenas, 300000.0f);
+ warden->GetThreatManager().AddThreat(terenas, 300000.0f, nullptr, true, true);
}
}
break;
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
index 597471597dd..0fb00d18fd3 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
@@ -240,11 +240,7 @@ struct boss_four_horsemen_baseAI : public BossAI
continue;
if (player->IsAlive())
- {
- cBoss->AddThreat(player, 0.0f);
- cBoss->SetInCombatWith(player);
- player->SetInCombatWith(cBoss);
- }
+ AddThreat(player, 0.0f, cBoss);
}
}
@@ -403,19 +399,19 @@ class boss_four_horsemen_baron : public CreatureScript
{
SetCombatMovement(true);
me->SetReactState(REACT_AGGRESSIVE);
- ThreatManager& threat = me->getThreatManager();
- if (threat.isThreatListEmpty())
+ ThreatManager& threat = me->GetThreatManager();
+ if (threat.IsThreatListEmpty())
{
if (Unit* nearest = me->SelectNearestPlayer(5000.0f))
{
- me->AddThreat(nearest, 1.0f);
+ AddThreat(nearest, 1.0f);
AttackStart(nearest);
}
else
ResetEncounter();
}
else
- AttackStart(threat.getHostilTarget());
+ AttackStart(threat.GetCurrentVictim());
events.ScheduleEvent(EVENT_BERSERK, Minutes(10));
events.ScheduleEvent(EVENT_MARK, Seconds(24));
@@ -476,19 +472,19 @@ class boss_four_horsemen_thane : public CreatureScript
{
SetCombatMovement(true);
me->SetReactState(REACT_AGGRESSIVE);
- ThreatManager& threat = me->getThreatManager();
- if (threat.isThreatListEmpty())
+ ThreatManager& threat = me->GetThreatManager();
+ if (threat.IsThreatListEmpty())
{
if (Unit* nearest = me->SelectNearestPlayer(5000.0f))
{
- me->AddThreat(nearest, 1.0f);
+ AddThreat(nearest, 1.0f);
AttackStart(nearest);
}
else
ResetEncounter();
}
else
- AttackStart(threat.getHostilTarget());
+ AttackStart(threat.GetCurrentVictim());
events.ScheduleEvent(EVENT_BERSERK, Minutes(10));
events.ScheduleEvent(EVENT_MARK, Seconds(24));
@@ -567,7 +563,7 @@ class boss_four_horsemen_lady : public CreatureScript
return;
if (!_ourMovementFinished)
return;
- if (me->getThreatManager().isThreatListEmpty())
+ if (me->GetThreatManager().IsThreatListEmpty())
{
EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
return;
@@ -600,7 +596,7 @@ class boss_four_horsemen_lady : public CreatureScript
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- if (Unit* target = SelectTarget(SELECT_TARGET_NEAREST, 0, 45.0f, true))
+ if (Unit* target = SelectTarget(SELECT_TARGET_MINDISTANCE, 0, 45.0f, true))
DoCast(target, SPELL_SHADOW_BOLT);
else
{
@@ -637,7 +633,7 @@ class boss_four_horsemen_sir : public CreatureScript
return;
if (!_ourMovementFinished)
return;
- if (me->getThreatManager().isThreatListEmpty())
+ if (me->GetThreatManager().IsThreatListEmpty())
{
EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
return;
@@ -657,7 +653,7 @@ class boss_four_horsemen_sir : public CreatureScript
events.Repeat(Seconds(15));
break;
case EVENT_HOLYWRATH:
- if (Unit* target = SelectTarget(SELECT_TARGET_NEAREST, 0, 45.0f, true))
+ if (Unit* target = SelectTarget(SELECT_TARGET_MINDISTANCE, 0, 45.0f, true))
{
DoCast(target, SPELL_HOLY_WRATH, true);
_shouldSay = true;
@@ -670,7 +666,7 @@ class boss_four_horsemen_sir : public CreatureScript
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
- if (Unit* target = SelectTarget(SELECT_TARGET_NEAREST, 0, 45.0f, true))
+ if (Unit* target = SelectTarget(SELECT_TARGET_MINDISTANCE, 0, 45.0f, true))
DoCast(target, SPELL_HOLY_BOLT);
else
{
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
index c09de96f7b6..3a6e67538c2 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
@@ -398,7 +398,7 @@ class boss_gothik : public CreatureScript
switch (action)
{
case ACTION_MINION_EVADE:
- if (_gateIsOpen || me->getThreatManager().isThreatListEmpty())
+ if (_gateIsOpen || me->GetThreatManager().IsThreatListEmpty())
return EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
if (_gateCanOpen)
OpenGate();
@@ -424,8 +424,8 @@ class boss_gothik : public CreatureScript
// thus we only do a cursory check to make sure (edge cases?)
if (Player* newTarget = FindEligibleTarget(me, _gateIsOpen))
{
- me->getThreatManager().resetAllAggro();
- me->AddThreat(newTarget, 1.0f);
+ ResetThreatList();
+ AddThreat(newTarget, 1.0f);
AttackStart(newTarget);
}
else
@@ -507,7 +507,7 @@ class boss_gothik : public CreatureScript
Talk(SAY_PHASE_TWO);
Talk(EMOTE_PHASE_TWO);
me->SetReactState(REACT_PASSIVE);
- me->getThreatManager().resetAllAggro();
+ ResetThreatList();
DoCastAOE(SPELL_TELEPORT_LIVE);
break;
case EVENT_TELEPORT:
@@ -517,7 +517,7 @@ class boss_gothik : public CreatureScript
me->AttackStop();
me->StopMoving();
me->SetReactState(REACT_PASSIVE);
- me->getThreatManager().resetAllAggro();
+ ResetThreatList();
DoCastAOE(_lastTeleportDead ? SPELL_TELEPORT_LIVE : SPELL_TELEPORT_DEAD);
_lastTeleportDead = !_lastTeleportDead;
@@ -598,7 +598,7 @@ struct npc_gothik_minion_baseAI : public ScriptedAI
case ACTION_ACQUIRE_TARGET:
if (Player* target = FindEligibleTarget(me, _gateIsOpen))
{
- me->AddThreat(target, 1.0f);
+ AddThreat(target, 1.0f);
AttackStart(target);
}
else
@@ -626,8 +626,8 @@ struct npc_gothik_minion_baseAI : public ScriptedAI
if (Player* newTarget = FindEligibleTarget(me, _gateIsOpen))
{
me->RemoveAurasByType(SPELL_AURA_MOD_TAUNT);
- me->getThreatManager().resetAllAggro();
- me->AddThreat(newTarget, 1.0f);
+ ResetThreatList();
+ AddThreat(newTarget, 1.0f);
AttackStart(newTarget);
}
else
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
index 626a7c023af..863637ca90b 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
@@ -92,7 +92,7 @@ class boss_grobbulus : public CreatureScript
events.Repeat(randtime(Seconds(15), Seconds(30)));
return;
case EVENT_INJECT:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_MUTATING_INJECTION))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, true, -SPELL_MUTATING_INJECTION))
DoCast(target, SPELL_MUTATING_INJECTION);
events.Repeat(Seconds(8) + Milliseconds(uint32(std::round(120 * me->GetHealthPct()))));
return;
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
index 93b91bec9f3..faaafac710a 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
@@ -189,7 +189,7 @@ class KelThuzadCharmedPlayerAI : public SimpleCharmedPlayerAI
{
if (Unit* target = charmer->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, CharmedPlayerTargetSelectPred()))
return target;
- if (Unit* target = charmer->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -SPELL_CHAINS))
+ if (Unit* target = charmer->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, true, -SPELL_CHAINS))
return target;
}
return nullptr;
@@ -283,10 +283,9 @@ public:
{
Talk(SAY_CHAINS);
std::list<Unit*> targets;
- SelectTargetList(targets, 3, SELECT_TARGET_RANDOM, 0.0f, true);
+ SelectTargetList(targets, 3, SELECT_TARGET_RANDOM, 0, 0.0f, true, false);
for (Unit* target : targets)
- if (me->GetVictim() != target) // skip MT
- DoCast(target, SPELL_CHAINS);
+ DoCast(target, SPELL_CHAINS);
}
}
@@ -426,7 +425,7 @@ public:
me->CastStop();
events.SetPhase(PHASE_TWO);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
- me->getThreatManager().resetAllAggro();
+ ResetThreatList();
me->SetReactState(REACT_AGGRESSIVE);
Talk(EMOTE_PHASE_TWO);
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
index 1627cba08b9..1a6bbccdb30 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp
@@ -139,7 +139,7 @@ public:
case EVENT_WRAP:
{
std::list<Unit*> targets;
- SelectTargetList(targets, WebTargetSelector(me), RAID_MODE(1, 2), SELECT_TARGET_RANDOM);
+ SelectTargetList(targets, RAID_MODE(1, 2), SELECT_TARGET_RANDOM, 1, WebTargetSelector(me));
if (!targets.empty())
{
Talk(EMOTE_WEB_WRAP);
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
index 9394ececc08..b7333e90e2e 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp
@@ -128,7 +128,7 @@ public:
DoZoneInCombat();
- if (me->getThreatManager().isThreatListEmpty())
+ if (!me->IsThreatened())
Reset();
else
{
@@ -235,7 +235,7 @@ public:
case EVENT_BLINK:
DoCastAOE(SPELL_CRIPPLE, true);
DoCastAOE(SPELL_BLINK);
- DoResetThreat();
+ ResetThreatList();
justBlinked = true;
events.Repeat(Seconds(40));
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
index 92dcdf95da4..c1fdc5b950e 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp
@@ -119,41 +119,31 @@ public:
{
// Hateful Strike targets the highest non-MT threat in melee range on 10man
// and the higher HP target out of the two highest non-MT threats in melee range on 25man
- float MostThreat = 0.0f;
- Unit* secondThreatTarget = nullptr;
- Unit* thirdThreatTarget = nullptr;
-
- std::list<HostileReference*>::const_iterator i = me->getThreatManager().getThreatList().begin();
- for (; i != me->getThreatManager().getThreatList().end(); ++i)
- { // find second highest
- Unit* target = (*i)->getTarget();
- if (target->IsAlive() && target != me->GetVictim() && (*i)->getThreat() >= MostThreat && me->IsWithinMeleeRange(target))
- {
- MostThreat = (*i)->getThreat();
- secondThreatTarget = target;
- }
- }
-
- if (secondThreatTarget && Is25ManRaid())
- { // find third highest
- MostThreat = 0.0f;
- i = me->getThreatManager().getThreatList().begin();
- for (; i != me->getThreatManager().getThreatList().end(); ++i)
- {
- Unit* target = (*i)->getTarget();
- if (target->IsAlive() && target != me->GetVictim() && target != secondThreatTarget && (*i)->getThreat() >= MostThreat && me->IsWithinMeleeRange(target))
- {
- MostThreat = (*i)->getThreat();
- thirdThreatTarget = target;
- }
- }
+ ThreatReference* secondThreat = nullptr;
+ ThreatReference* thirdThreat = nullptr;
+
+ ThreatManager const& mgr = me->GetThreatManager();
+ Unit* currentVictim = mgr.GetCurrentVictim();
+ auto const& pair = mgr.GetSortedThreatList();
+ auto it = pair.begin(), end = pair.end();
+ if (it == end)
+ EnterEvadeMode(EVADE_REASON_NO_HOSTILES);
+
+ if ((*it)->GetVictim() != currentVictim)
+ secondThreat = *it;
+ if ((!secondThreat || Is25ManRaid()) && (++it != end))
+ {
+ if ((*it)->GetVictim() != currentVictim)
+ (secondThreat ? thirdThreat : secondThreat) = *it;
+ if (!thirdThreat && Is25ManRaid() && (++it != end))
+ thirdThreat = *it;
}
Unit* pHatefulTarget = nullptr;
- if (!thirdThreatTarget)
- pHatefulTarget = secondThreatTarget;
- else if (secondThreatTarget)
- pHatefulTarget = (secondThreatTarget->GetHealth() < thirdThreatTarget->GetHealth()) ? thirdThreatTarget : secondThreatTarget;
+ if (!thirdThreat)
+ pHatefulTarget = secondThreat->GetVictim();
+ else if (secondThreat)
+ pHatefulTarget = (secondThreat->GetVictim()->GetHealth() < thirdThreat->GetVictim()->GetHealth()) ? thirdThreat->GetVictim() : secondThreat->GetVictim();
if (!pHatefulTarget)
pHatefulTarget = me->GetVictim();
@@ -162,11 +152,11 @@ public:
// add threat to highest threat targets
if (me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim()))
- me->getThreatManager().addThreat(me->GetVictim(), HATEFUL_THREAT_AMT);
- if (secondThreatTarget)
- me->getThreatManager().addThreat(secondThreatTarget, HATEFUL_THREAT_AMT);
- if (thirdThreatTarget)
- me->getThreatManager().addThreat(thirdThreatTarget, HATEFUL_THREAT_AMT); // this will only ever be used in 25m
+ AddThreat(me->GetVictim(), HATEFUL_THREAT_AMT);
+ if (secondThreat)
+ secondThreat->AddThreat(HATEFUL_THREAT_AMT);
+ if (thirdThreat)
+ thirdThreat->AddThreat(HATEFUL_THREAT_AMT);
events.Repeat(Seconds(1));
break;
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
index 4679fb17358..58da5a92295 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
@@ -231,7 +231,7 @@ class npc_dk_understudy : public CreatureScript
{
me->SetReactState(REACT_AGGRESSIVE);
if (Unit* charmer = ObjectAccessor::GetUnit(*me, _charmer))
- me->AddThreat(charmer, 100000.0f);
+ AddThreat(charmer, 100000.0f);
DoZoneInCombat(nullptr, 250.0f);
}
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
index 205a098d077..8e2f093863b 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
@@ -310,7 +310,7 @@ class boss_sapphiron : public CreatureScript
_iceboltTargets.clear();
std::list<Unit*> targets;
- SelectTargetList(targets, RAID_MODE(2, 3), SELECT_TARGET_RANDOM, 200.0f, true);
+ SelectTargetList(targets, RAID_MODE(2, 3), SELECT_TARGET_RANDOM, 0, 200.0f, true);
for (Unit* target : targets)
if (target)
_iceboltTargets.push_back(target->GetGUID());
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
index a74dd052695..d6a36680c33 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
@@ -399,7 +399,7 @@ public:
me->SetReactState(REACT_AGGRESSIVE);
DoZoneInCombat();
- if (Unit* closest = SelectTarget(SELECT_TARGET_NEAREST, 0, 500.0f))
+ if (Unit* closest = SelectTarget(SELECT_TARGET_MINDISTANCE, 0, 500.0f))
AttackStart(closest);
else // if there is no nearest target, then there is no target, meaning we should reset
{
@@ -564,7 +564,7 @@ public:
if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
if (feugen->GetVictim())
{
- me->AddThreat(feugen->EnsureVictim(), 0.0f);
+ AddThreat(feugen->EnsureVictim(), 0.0f);
me->SetInCombatWith(feugen->EnsureVictim());
}
break;
@@ -606,11 +606,8 @@ public:
thaddius->AI()->DoAction(ACTION_STALAGG_AGGRO);
if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN)))
- if (!feugen->IsInCombat())
- {
- feugen->AddThreat(who, 0.0f);
- feugen->SetInCombatWith(who);
- }
+ if (!feugen->IsEngaged())
+ AddThreat(who, 0.0f, feugen);
}
void DamageTaken(Unit* /*who*/, uint32& damage) override
@@ -833,7 +830,7 @@ public:
if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
if (stalagg->GetVictim())
{
- me->AddThreat(stalagg->EnsureVictim(), 0.0f);
+ AddThreat(stalagg->EnsureVictim(), 0.0f);
me->SetInCombatWith(stalagg->EnsureVictim());
}
staticFieldTimer = 6 * IN_MILLISECONDS;
@@ -877,10 +874,7 @@ public:
if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG)))
if (!stalagg->IsInCombat())
- {
- stalagg->AddThreat(who, 0.0f);
- stalagg->SetInCombatWith(who);
- }
+ AddThreat(who, 0.0f, stalagg);
}
void DamageTaken(Unit* /*who*/, uint32& damage) override
@@ -1213,39 +1207,39 @@ class spell_thaddius_magnetic_pull : public SpellScriptLoader
if (!stalagg)
return;
- Unit* feugenTank = feugen->GetVictim();
- Unit* stalaggTank = stalagg->GetVictim();
+ ThreatManager& feugenThreat = feugen->GetThreatManager();
+ ThreatManager& stalaggThreat = stalagg->GetThreatManager();
+
+ Unit* feugenTank = feugenThreat.GetCurrentVictim();
+ Unit* stalaggTank = stalaggThreat.GetCurrentVictim();
if (!feugenTank || !stalaggTank)
return;
- ThreatManager& feugenThreat = feugen->getThreatManager();
- ThreatManager& stalaggThreat = stalagg->getThreatManager();
-
if (feugenTank == stalaggTank) // special behavior if the tanks are the same (taken from retail)
{
- float feugenTankThreat = feugenThreat.getThreat(feugenTank);
- float stalaggTankThreat = stalaggThreat.getThreat(stalaggTank);
+ float feugenTankThreat = feugenThreat.GetThreat(feugenTank);
+ float stalaggTankThreat = stalaggThreat.GetThreat(stalaggTank);
- feugenThreat.addThreat(feugenTank, stalaggTankThreat - feugenTankThreat);
- stalaggThreat.addThreat(stalaggTank, feugenTankThreat - stalaggTankThreat);
+ feugen->GetThreatManager().AddThreat(feugenTank, stalaggTankThreat - feugenTankThreat, nullptr, true, true);
+ stalagg->GetThreatManager().AddThreat(stalaggTank, feugenTankThreat - stalaggTankThreat, nullptr, true, true);
feugen->CastSpell(stalaggTank, SPELL_MAGNETIC_PULL_EFFECT, true);
}
else // normal case, two tanks
{
- float feugenTankThreat = feugenThreat.getThreat(feugenTank);
- float feugenOtherThreat = feugenThreat.getThreat(stalaggTank);
- float stalaggTankThreat = stalaggThreat.getThreat(stalaggTank);
- float stalaggOtherThreat = stalaggThreat.getThreat(feugenTank);
+ float feugenTankThreat = feugenThreat.GetThreat(feugenTank);
+ float feugenOtherThreat = feugenThreat.GetThreat(stalaggTank);
+ float stalaggTankThreat = stalaggThreat.GetThreat(stalaggTank);
+ float stalaggOtherThreat = stalaggThreat.GetThreat(feugenTank);
// set the two entries in feugen's threat table to be equal to the ones in stalagg's
- feugenThreat.addThreat(stalaggTank, stalaggTankThreat - feugenOtherThreat);
- feugenThreat.addThreat(feugenTank, stalaggOtherThreat - feugenTankThreat);
+ stalagg->GetThreatManager().AddThreat(stalaggTank, stalaggTankThreat - feugenOtherThreat, nullptr, true, true);
+ stalagg->GetThreatManager().AddThreat(feugenTank, stalaggOtherThreat - feugenTankThreat, nullptr, true, true);
// set the two entries in stalagg's threat table to be equal to the ones in feugen's
- stalaggThreat.addThreat(feugenTank, feugenTankThreat - stalaggOtherThreat);
- stalaggThreat.addThreat(stalaggTank, feugenOtherThreat - stalaggTankThreat);
+ stalagg->GetThreatManager().AddThreat(feugenTank, feugenTankThreat - stalaggOtherThreat, nullptr, true, true);
+ stalagg->GetThreatManager().AddThreat(stalaggTank, feugenOtherThreat - stalaggTankThreat, nullptr, true, true);
// pull the two tanks across
feugenTank->CastSpell(stalaggTank, SPELL_MAGNETIC_PULL_EFFECT, true);
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index dcf26afa14b..b6dd3924c06 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -955,7 +955,7 @@ public:
case EVENT_SURGE_OF_POWER_P_THREE:
if (GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
{
- if (Unit* tempSurgeTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, false, SPELL_RIDE_RED_DRAGON_BUDDY))
+ if (Unit* tempSurgeTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, false, true, SPELL_RIDE_RED_DRAGON_BUDDY))
{
if (Vehicle* drakeVehicle = tempSurgeTarget->GetVehicleKit())
{
@@ -979,7 +979,7 @@ public:
events.ScheduleEvent(EVENT_SURGE_OF_POWER_P_THREE, urand(9, 18)*IN_MILLISECONDS, 0, PHASE_THREE);
break;
case EVENT_STATIC_FIELD:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 60.0f, false, SPELL_RIDE_RED_DRAGON_BUDDY))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 60.0f, false, true, SPELL_RIDE_RED_DRAGON_BUDDY))
DoCast(target, SPELL_STATIC_FIELD_MISSLE, true);
events.ScheduleEvent(EVENT_STATIC_FIELD, urand(15, 30)*IN_MILLISECONDS, 0, PHASE_THREE);
@@ -1827,13 +1827,11 @@ class spell_malygos_vortex_visual : public SpellScriptLoader
{
if (Creature* caster = GetCaster()->ToCreature())
{
- ThreatContainer::StorageType const& m_threatlist = caster->getThreatManager().getThreatList();
- for (ThreatContainer::StorageType::const_iterator itr = m_threatlist.begin(); itr!= m_threatlist.end(); ++itr)
+ for (ThreatReference* ref : caster->GetThreatManager().GetUnsortedThreatList())
{
- if (Unit* target = (*itr)->getTarget())
+ if (Player* targetPlayer = ref->GetVictim()->ToPlayer())
{
- Player* targetPlayer = target->ToPlayer();
- if (!targetPlayer || targetPlayer->IsGameMaster())
+ if (targetPlayer->IsGameMaster())
continue;
if (InstanceScript* instance = caster->GetInstanceScript())
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
index ef10057f180..f1ab2dfb0cb 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp
@@ -181,26 +181,20 @@ public:
{
if (Creature* malygos = instance->GetCreature(malygosGUID))
{
- ThreatContainer::StorageType const& threatList = malygos->getThreatManager().getThreatList();
for (GuidList::const_iterator itr_vortex = vortexTriggers.begin(); itr_vortex != vortexTriggers.end(); ++itr_vortex)
{
- if (threatList.empty())
- return;
-
uint8 counter = 0;
if (Creature* trigger = instance->GetCreature(*itr_vortex))
{
// each trigger have to cast the spell to 5 players.
- for (ThreatContainer::StorageType::const_iterator itr = threatList.begin(); itr != threatList.end(); ++itr)
+ for (auto* ref : malygos->GetThreatManager().GetUnsortedThreatList())
{
if (counter >= 5)
break;
- if (Unit* target = (*itr)->getTarget())
+ if (Player* player = ref->GetVictim()->ToPlayer())
{
- Player* player = target->ToPlayer();
-
- if (!player || player->IsGameMaster() || player->HasAura(SPELL_VORTEX_4))
+ if (player->IsGameMaster() || player->HasAura(SPELL_VORTEX_4))
continue;
player->CastSpell(trigger, SPELL_VORTEX_4, true);
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
index 459b9cb188d..a7c8a2536db 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp
@@ -290,7 +290,7 @@ class boss_urom : public CreatureScript
{
me->RemoveAllAuras();
me->CombatStop(false);
- me->DeleteThreatList();
+ me->GetThreatManager().ClearAllThreat();
}
void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
index 604fdeb6123..e22448a54ef 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp
@@ -135,7 +135,7 @@ public:
{
if (me->Attack(who, true))
{
- me->AddThreat(who, 0.0f);
+ AddThreat(who, 0.0f);
me->SetInCombatWith(who);
who->SetInCombatWith(me);
@@ -328,7 +328,7 @@ public:
// 4 - Wait for delay to expire
if (m_uiDelay_Timer <= diff)
{
- if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0))
+ if (Unit* target = SelectTarget(SELECT_TARGET_MAXTHREAT, 0))
{
me->SetReactState(REACT_AGGRESSIVE);
me->SetInCombatWith(target);
@@ -410,7 +410,7 @@ public:
{
if (me->Attack(who, true))
{
- me->AddThreat(who, 0.0f);
+ AddThreat(who, 0.0f);
me->SetInCombatWith(who);
who->SetInCombatWith(me);
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
index 6463c0c1aef..5c3b98f3984 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp
@@ -115,7 +115,7 @@ class boss_maiden_of_grief : public CreatureScript
events.ScheduleEvent(EVENT_STORM_OF_GRIEF, urand(15000, 20000));
break;
case EVENT_SHOCK_OF_SORROW:
- DoResetThreat();
+ ResetThreatList();
Talk(SAY_STUN);
DoCastAOE(SPELL_SHOCK_OF_SORROW);
events.ScheduleEvent(EVENT_SHOCK_OF_SORROW, urand(20000, 30000));
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
index 2e926b17710..fc54e6fec54 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
@@ -384,7 +384,7 @@ public:
void JustSummoned(Creature* summoned) override
{
lDwarfGUIDList.push_back(summoned->GetGUID());
- summoned->AddThreat(me, 0.0f);
+ AddThreat(me, 0.0f, summoned);
summoned->AI()->AttackStart(me);
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
index aacf9332a75..72a911d398e 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
@@ -593,8 +593,8 @@ class boss_algalon_the_observer : public CreatureScript
//! Workaround for Creature::_IsTargetAcceptable returning false
//! for creatures that start combat in REACT_PASSIVE and UNIT_FLAG_NOT_SELECTABLE
//! causing them to immediately evade
- if (!me->getThreatManager().isThreatListEmpty())
- AttackStart(me->getThreatManager().getHostilTarget());
+ if (!me->GetThreatManager().IsThreatListEmpty())
+ AttackStart(me->GetThreatManager().SelectVictim());
for (uint32 i = 0; i < LIVING_CONSTELLATION_COUNT; ++i)
if (Creature* summon = DoSummon(NPC_LIVING_CONSTELLATION, ConstellationPos[i], 0, TEMPSUMMON_DEAD_DESPAWN))
summon->SetReactState(REACT_PASSIVE);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
index 0a22fafb95e..4e69e9c2bc6 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
@@ -630,7 +630,7 @@ class boss_stormcaller_brundir : public CreatureScript
me->RemoveAurasDueToSpell(SPELL_LIGHTNING_TENDRILS_VISUAL);
DoStartMovement(me->GetVictim());
events.CancelEvent(EVENT_GROUND);
- me->getThreatManager().resetAllAggro();
+ ResetThreatList();
break;
case EVENT_MOVE_POSITION:
if (me->IsWithinMeleeRange(me->GetVictim()))
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
index b9983785a18..aa6e8e955b4 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
@@ -152,7 +152,7 @@ class boss_auriaya : public CreatureScript
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
{
summoned->AI()->AttackStart(target);
- summoned->AddThreat(target, 250.0f);
+ AddThreat(target, 250.0f, summoned);
DoZoneInCombat(summoned);
}
@@ -374,7 +374,7 @@ class npc_sanctum_sentry : public CreatureScript
case EVENT_POUNCE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
{
- me->AddThreat(target, 100.0f);
+ AddThreat(target, 100.0f);
AttackStart(target);
DoCast(target, SPELL_SAVAGE_POUNCE);
}
@@ -443,7 +443,7 @@ class npc_feral_defender : public CreatureScript
case EVENT_FERAL_POUNCE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
{
- me->AddThreat(target, 100.0f);
+ AddThreat(target, 100.0f);
AttackStart(target);
DoCast(target, SPELL_FERAL_POUNCE);
}
@@ -452,7 +452,7 @@ class npc_feral_defender : public CreatureScript
case EVENT_RUSH:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
{
- me->AddThreat(target, 100.0f);
+ AddThreat(target, 100.0f);
AttackStart(target);
DoCast(target, SPELL_FERAL_RUSH);
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
index b8846cace28..b436f196b40 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
@@ -351,8 +351,7 @@ class boss_freya : public CreatureScript
Elder[n]->CastSpell(me, SPELL_IRONBRANCH_ESSENCE, true);
Elder[n]->RemoveLootMode(LOOT_MODE_DEFAULT); //! Why?
Elder[n]->AI()->AttackStart(who);
- Elder[n]->AddThreat(who, 250.0f);
- Elder[n]->SetInCombatWith(who);
+ AddThreat(who, 250.0f, Elder[n]);
++elderCount;
}
}
@@ -447,7 +446,7 @@ class boss_freya : public CreatureScript
break;
case EVENT_STRENGTHENED_IRON_ROOTS:
Talk(EMOTE_IRON_ROOTS);
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true, -SPELL_ROOTS_FREYA))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true, true, -SPELL_ROOTS_FREYA))
target->CastSpell(target, SPELL_ROOTS_FREYA, true); // This must be cast by Target self
events.ScheduleEvent(EVENT_STRENGTHENED_IRON_ROOTS, urand(12000, 20000));
break;
@@ -632,7 +631,7 @@ class boss_freya : public CreatureScript
Elder->RemoveAllAuras();
Elder->AttackStop();
Elder->CombatStop(true);
- Elder->DeleteThreatList();
+ Elder->GetThreatManager().ClearAllThreat();
Elder->AI()->DoAction(ACTION_ELDER_FREYA_KILLED);
}
}
@@ -662,7 +661,7 @@ class boss_freya : public CreatureScript
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 250.0f, true))
{
summoned->AI()->AttackStart(target);
- summoned->AddThreat(target, 250.0f);
+ AddThreat(target, 250.0f, summoned);
DoZoneInCombat(summoned);
}
}
@@ -959,7 +958,7 @@ class boss_elder_ironbranch : public CreatureScript
events.ScheduleEvent(EVENT_IMPALE, urand(15000, 25000));
break;
case EVENT_IRON_ROOTS:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true, -SPELL_ROOTS_IRONBRANCH))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true, true, -SPELL_ROOTS_IRONBRANCH))
target->CastSpell(target, SPELL_ROOTS_IRONBRANCH, true);
events.ScheduleEvent(EVENT_IRON_ROOTS, urand(10000, 20000));
break;
@@ -1036,7 +1035,7 @@ class npc_detonating_lasher : public CreatureScript
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
{
// Switching to other target - modify aggro of new target by 20% from current target's aggro
- me->AddThreat(target, me->getThreatManager().getThreat(me->GetVictim(), false) * 1.2f);
+ AddThreat(target, me->GetThreatManager().GetThreat(me->GetVictim()) * 1.2f);
AttackStart(target);
}
changeTargetTimer = urand(5000, 10000);
@@ -1303,7 +1302,7 @@ class npc_ancient_conservator : public CreatureScript
if (natureFuryTimer <= diff)
{
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true, -SPELL_NATURE_FURY))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true, true, -SPELL_NATURE_FURY))
DoCast(target, SPELL_NATURE_FURY);
me->AddAura(SPELL_CONSERVATOR_GRIP, me);
natureFuryTimer = 5000;
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
index a7a90595ffe..5e24c699f78 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
@@ -233,7 +233,7 @@ class npc_flash_freeze : public CreatureScript
{
targetGUID = summoner->GetGUID();
me->SetInCombatWith(summoner);
- me->AddThreat(summoner, 250.0f);
+ AddThreat(summoner, 250.0f);
if (Unit* target = ObjectAccessor::GetUnit(*me, targetGUID))
{
DoCast(target, SPELL_BLOCK_OF_ICE, true);
@@ -277,8 +277,8 @@ class npc_ice_block : public CreatureScript
summoner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
summoner->SetControlled(true, UNIT_STATE_ROOT);
me->SetInCombatWith(summoner);
- me->AddThreat(summoner, 250.0f);
- summoner->AddThreat(me, 250.0f);
+ AddThreat(summoner, 250.0f);
+ AddThreat(me, 250.0f, summoner);
if (Creature* target = ObjectAccessor::GetCreature(*me, targetGUID))
{
DoCast(target, SPELL_FLASH_FREEZE_HELPER, true);
@@ -487,7 +487,7 @@ class boss_hodir : public CreatureScript
if (gettingColdInHereTimer <= diff && gettingColdInHere)
{
- std::list<HostileReference*> ThreatList = me->getThreatManager().getThreatList();
+ std::list<HostileReference*> ThreatList = me->GetThreatManager().getThreatList();
for (std::list<HostileReference*>::const_iterator itr = ThreatList.begin(); itr != ThreatList.end(); ++itr)
if (Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()))
if (Aura* BitingColdAura = target->GetAura(SPELL_BITING_COLD_TRIGGERED))
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
index 57ace8ec195..b17a5343f71 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp
@@ -303,7 +303,7 @@ class boss_kologarn : public CreatureScript
break;
}
case EVENT_FOCUSED_EYEBEAM:
- if (Unit* eyebeamTargetUnit = SelectTarget(SELECT_TARGET_FARTHEST, 0, 0, true))
+ if (Unit* eyebeamTargetUnit = SelectTarget(SELECT_TARGET_MAXDISTANCE, 0, 0, true))
{
eyebeamTarget = eyebeamTargetUnit->GetGUID();
DoCast(me, SPELL_SUMMON_FOCUSED_EYEBEAM, true);
@@ -367,7 +367,7 @@ class StoneGripTargetSelector : public std::unary_function<Unit*, bool>
bool operator()(WorldObject* target)
{
- if (target == _victim && _me->getThreatManager().getThreatList().size() > 1)
+ if (target == _victim && _me->GetThreatManager().GetThreatListSize() > 1)
return true;
if (target->GetTypeId() != TYPEID_PLAYER)
@@ -399,7 +399,7 @@ class spell_ulduar_stone_grip_cast_target : public SpellScriptLoader
void FilterTargetsInitial(std::list<WorldObject*>& unitList)
{
// Remove "main tank" and non-player targets
- unitList.remove_if(StoneGripTargetSelector(GetCaster()->ToCreature(), GetCaster()->GetVictim()));
+ unitList.remove_if(StoneGripTargetSelector(GetCaster()->ToCreature(), GetCaster()->GetThreatManager().GetCurrentVictim()));
// Maximum affected targets per difficulty mode
uint32 maxTargets = 1;
if (GetSpellInfo()->Id == 63981)
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index 9ed4f098ed6..4859e376779 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -1291,9 +1291,9 @@ class npc_mimiron_assault_bot : public CreatureScript
if (me->HasUnitState(UNIT_STATE_ROOT))
{
- if (Unit* newTarget = SelectTarget(SELECT_TARGET_NEAREST, 0, 30.0f, true))
+ if (Unit* newTarget = SelectTarget(SELECT_TARGET_MINDISTANCE, 0, 30.0f, true))
{
- me->DeleteThreatList();
+ me->GetThreatManager().ClearAllThreat();
AttackStart(newTarget);
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
index cfa977166ad..118c293755a 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp
@@ -607,7 +607,7 @@ class boss_thorim : public CreatureScript
if (type != EFFECT_MOTION_TYPE || id != EVENT_JUMP)
return;
- me->getThreatManager().resetAllAggro();
+ ResetThreatList();
SetBoundary(&ArenaBoundaries);
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
index 66970ee996f..7f3a2120e88 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
@@ -3026,7 +3026,7 @@ class spell_yogg_saron_hate_to_zero : public SpellScriptLoader // 63984
{
if (Unit* target = GetHitUnit())
if (target->CanHaveThreatList())
- target->getThreatManager().modifyThreatPercent(GetCaster(), -100);
+ target->GetThreatManager().ModifyThreatByPercent(GetCaster(), -100);
}
void Register() override
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
index 6300fa0e9c1..3d2fa75ecac 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
@@ -228,7 +228,7 @@ class boss_ingvar_the_plunderer : public CreatureScript
case EVENT_JUST_TRANSFORMED:
ScheduleSecondPhase();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
- if (Unit* target = me->getThreatManager().getHostilTarget())
+ if (Unit* target = me->GetThreatManager().SelectVictim())
AttackStart(target);
else
{
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
index b10a6a97e04..bb4b78e55f5 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp
@@ -202,7 +202,7 @@ class boss_keleseth : public CreatureScript
events.ScheduleEvent(EVENT_SHADOWBOLT, urand(2, 3) * IN_MILLISECONDS);
break;
case EVENT_FROST_TOMB:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true, -SPELL_FROST_TOMB))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true, true, -SPELL_FROST_TOMB))
{
Talk(SAY_FROST_TOMB);
Talk(SAY_FROST_TOMB_EMOTE, target);
@@ -294,7 +294,7 @@ class npc_vrykul_skeleton : public CreatureScript
switch (eventId)
{
case EVENT_DECREPIFY:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -SPELL_DECREPIFY))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, true, -SPELL_DECREPIFY))
DoCast(target, SPELL_DECREPIFY);
events.ScheduleEvent(EVENT_DECREPIFY, urand(1, 5)*IN_MILLISECONDS);
break;
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
index 4ba41149c45..effd1741bf1 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp
@@ -603,7 +603,7 @@ public:
_scheduler
.Schedule(Seconds(13), [this](TaskContext net)
{
- if (Unit* target = SelectTarget(SELECT_TARGET_FARTHEST, 0, 30, true))
+ if (Unit* target = SelectTarget(SELECT_TARGET_MAXDISTANCE, 0, 30, true))
DoCast(target, SPELL_NET);
net.Repeat();
})
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
index 83b25986222..d4cd2a1637f 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
@@ -193,7 +193,7 @@ public:
case NPC_AVENGING_SPIRIT:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
- summon->AddThreat(target, 0.0f);
+ AddThreat(target, 0.0f, summon);
summon->AI()->AttackStart(target);
}
break;
diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
index 7f8d987ef31..e06087a738b 100644
--- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
@@ -1122,7 +1122,7 @@ class npc_azure_stalker : public CreatureScript
task.Schedule(Milliseconds(1300), [this](TaskContext /*task*/)
{
- if (Unit* target = SelectTarget(SELECT_TARGET_NEAREST, 0, 5.0f))
+ if (Unit* target = SelectTarget(SELECT_TARGET_MINDISTANCE, 0, 5.0f))
DoCast(target, SPELL_BACKSTAB);
});
diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp
index 2e62c09bc17..50818339887 100644
--- a/src/server/scripts/Northrend/zone_borean_tundra.cpp
+++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp
@@ -721,7 +721,7 @@ public:
Creature* owner = GetOwner()->ToCreature();
owner->RemoveAllAurasExceptType(SPELL_AURA_DUMMY);
owner->CombatStop(true);
- owner->DeleteThreatList();
+ owner->GetThreatManager().ClearAllThreat();
owner->GetMotionMaster()->Clear(false);
owner->GetMotionMaster()->MoveFollow(GetCaster(), 4.0f, 0.0f);
owner->CastSpell(owner, SPELL_SUBDUED, true);