aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Outland/TempestKeep
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2017-07-01 20:18:02 +0200
committerShauren <shauren.trinity@gmail.com>2020-08-13 22:46:44 +0200
commit8be23fcbbdf26e8169defd761e61765f301bebe0 (patch)
tree6309b79f7dd617a8ddc801624dbbd4ed7ac22174 /src/server/scripts/Outland/TempestKeep
parent2c99678118798279372f17d4bb5f5a88ac95c413 (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. (cherry picked from commit e2a1ccd118d129b96e09ff1a15ed0adb1d4a3897)
Diffstat (limited to 'src/server/scripts/Outland/TempestKeep')
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp4
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp30
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp15
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp15
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp1
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp2
6 files changed, 27 insertions, 40 deletions
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);