aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp2
-rw-r--r--src/server/scripts/Commands/cs_group.cpp2
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp5
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h16
-rw-r--r--src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp2
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp11
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp6
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp316
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp18
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp6
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h12
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp11
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp30
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp38
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp40
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp77
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp58
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp44
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp323
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h2
-rw-r--r--src/server/scripts/Northrend/zone_zuldrak.cpp4
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp8
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp4
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h8
-rw-r--r--src/server/scripts/Outland/zone_shadowmoon_valley.cpp2
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp37
-rw-r--r--src/server/scripts/Spells/spell_item.cpp41
-rw-r--r--src/server/scripts/Spells/spell_pet.cpp2
-rw-r--r--src/server/scripts/World/go_scripts.cpp2
-rw-r--r--src/server/scripts/World/item_scripts.cpp2
41 files changed, 524 insertions, 641 deletions
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index 3cd797d5e00..11417b305a5 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -918,7 +918,7 @@ public:
uint32 entry = atoul(e);
float x, y, z, o = handler->GetSession()->GetPlayer()->GetOrientation();
- handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, handler->GetSession()->GetPlayer()->GetObjectSize());
+ handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, handler->GetSession()->GetPlayer()->GetCombatReach());
if (!i)
return handler->GetSession()->GetPlayer()->SummonCreature(entry, x, y, z, o) != nullptr;
diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp
index afe3b3c2645..f6866734a7c 100644
--- a/src/server/scripts/Commands/cs_group.cpp
+++ b/src/server/scripts/Commands/cs_group.cpp
@@ -143,7 +143,7 @@ public:
// before GM
float x, y, z;
- gmPlayer->GetClosePoint(x, y, z, player->GetObjectSize());
+ gmPlayer->GetClosePoint(x, y, z, player->GetCombatReach());
player->TeleportTo(gmPlayer->GetMapId(), x, y, z, player->GetOrientation());
}
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 1067283431d..23dbd8e3d1a 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -591,7 +591,7 @@ public:
// before GM
float x, y, z;
- handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, target->GetObjectSize());
+ handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, target->GetCombatReach());
target->TeleportTo(handler->GetSession()->GetPlayer()->GetMapId(), x, y, z, target->GetOrientation());
PhasingHandler::InheritPhaseShift(target, handler->GetSession()->GetPlayer());
target->UpdateObjectVisibility();
@@ -2201,9 +2201,6 @@ public:
case WAYPOINT_MOTION_TYPE:
handler->SendSysMessage(LANG_MOVEGENS_WAYPOINT);
break;
- case ANIMAL_RANDOM_MOTION_TYPE:
- handler->SendSysMessage(LANG_MOVEGENS_ANIMAL_RANDOM);
- break;
case CONFUSED_MOTION_TYPE:
handler->SendSysMessage(LANG_MOVEGENS_CONFUSED);
break;
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index ac4d8abb366..7a2e6cff30e 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -1457,7 +1457,7 @@ public:
// place pet before player
float x, y, z;
- player->GetClosePoint (x, y, z, creatureTarget->GetObjectSize(), CONTACT_DISTANCE);
+ player->GetClosePoint (x, y, z, creatureTarget->GetCombatReach(), CONTACT_DISTANCE);
pet->Relocate(x, y, z, float(M_PI) - player->GetOrientation());
// set pet to defensive mode by default (some classes can't control controlled pets in fact).
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
index 22efdea4071..c0ae774c5f1 100644
--- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
+++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp
@@ -126,7 +126,7 @@ class boss_selin_fireheart : public CreatureScript
Crystals.remove(CrystalChosen);
float x, y, z;
- CrystalChosen->GetClosePoint(x, y, z, me->GetObjectSize(), CONTACT_DISTANCE);
+ CrystalChosen->GetClosePoint(x, y, z, me->GetCombatReach(), CONTACT_DISTANCE);
events.SetPhase(PHASE_DRAIN);
me->SetWalk(false);
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
index d47bf3c7862..fea8c330b9c 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp
@@ -101,7 +101,7 @@ public:
FlyBackTimer = 500;
break;
case 1:
- player->GetClosePoint(x, y, z, me->GetObjectSize());
+ player->GetClosePoint(x, y, z, me->GetCombatReach());
z += 2.5f;
x -= 2.0f;
y -= 1.5f;
diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h
index 9f72ffe8183..c905702d3bc 100644
--- a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h
+++ b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h
@@ -20,17 +20,9 @@
#define DataHeader "ST"
-#define TROLLBOSS1_DEATH 1
-#define TROLLBOSS2_DEATH 2
-#define TROLLBOSS3_DEATH 3
-#define TROLLBOSS4_DEATH 4
-#define TROLLBOSS5_DEATH 5
-#define TROLLBOSS6_DEATH 6
-#define JAMMALAN_DEATH 7
-#define MORPHAZ_DEATH 8
-#define HAZZAS_DEATH 9
-#define ERANIKUS_DEATH 10
-#define ATALALARION_DEATH 11 //optional
+enum STEvents
+{
+ EVENT_STATE = 1
+};
-#define EVENT_STATE 1
#endif
diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp
index 58690c3a171..71784911f34 100644
--- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp
+++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp
@@ -539,7 +539,7 @@ public:
/// TODO: Remove this once we find a general rule for WorldObject::MovePosition (this spell shouldn't take the Z change into consideration)
Unit* caster = GetCaster();
float angle = float(rand_norm()) * static_cast<float>(2 * M_PI);
- uint32 dist = caster->GetObjectSize() + GetSpellInfo()->GetEffect(EFFECT_0)->CalcRadius(caster) * (float)rand_norm();
+ uint32 dist = caster->GetCombatReach() + GetSpellInfo()->GetEffect(EFFECT_0)->CalcRadius(caster) * (float)rand_norm();
float x = caster->GetPositionX() + dist * std::cos(angle);
float y = caster->GetPositionY() + dist * std::sin(angle);
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
index f00f96660a8..9112fd9ccd2 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp
@@ -483,15 +483,6 @@ class npc_anubarak_anub_ar_assassin : public CreatureScript
{
npc_anubarak_anub_ar_assassinAI(Creature* creature) : npc_anubarak_pet_template(creature, false), _backstabTimer(6 * IN_MILLISECONDS) { }
- bool IsInBounds(Position const& jumpTo, CreatureBoundary const* boundary)
- {
- if (!boundary)
- return true;
- for (AreaBoundary const* it : *boundary)
- if (!it->IsWithinBoundary(&jumpTo))
- return false;
- return true;
- }
Position GetRandomPositionAround(Creature* anubarak)
{
static float DISTANCE_MIN = 10.0f;
@@ -508,7 +499,7 @@ class npc_anubarak_anub_ar_assassin : public CreatureScript
Position jumpTo;
do
jumpTo = GetRandomPositionAround(anubarak);
- while (!IsInBounds(jumpTo, boundary));
+ while (!CreatureAI::IsInBounds(boundary, &jumpTo));
me->GetMotionMaster()->MoveJump(jumpTo, 40.0f, 40.0f);
DoCastSelf(SPELL_ASSASSIN_VISUAL, true);
}
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp
index 1df68607625..ff4343f31fd 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp
@@ -146,7 +146,7 @@ class boss_king_dred : public CreatureScript
float x, y, z;
- me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 10.0f);
+ me->GetClosePoint(x, y, z, me->GetCombatReach() / 3, 10.0f);
me->SummonCreature(RAND(NPC_DRAKKARI_GUTRIPPER, NPC_DRAKKARI_SCYTHECLAW), x, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 1000);
events.ScheduleEvent(EVENT_RAPTOR_CALL, urand(20000, 25000));
break;
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
index c67179d67eb..c78424c0078 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp
@@ -131,7 +131,7 @@ class boss_bronjahm : public CreatureScript
{
summons.Summon(summon);
summon->SetReactState(REACT_PASSIVE);
- summon->GetMotionMaster()->MoveFollow(me, me->GetObjectSize(), 0.0f);
+ summon->GetMotionMaster()->MoveFollow(me, me->GetCombatReach(), 0.0f);
summon->CastSpell(summon, SPELL_PURPLE_BANISH_VISUAL, true);
}
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
index 98ee4e6194e..80ab44fe32a 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -790,7 +790,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_DEATHBRINGER_SAURFANG)))
{
float x, y, z;
- deathbringer->GetClosePoint(x, y, z, deathbringer->GetObjectSize());
+ deathbringer->GetClosePoint(x, y, z, deathbringer->GetCombatReach());
me->SetWalk(true);
me->GetMotionMaster()->MovePoint(POINT_CORPSE, x, y, z);
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
index 99060220471..1ab35165e5a 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
@@ -387,7 +387,7 @@ class npc_coldflame : public CreatureScript
{
float ang = Position::NormalizeOrientation(pos.GetAngle(me));
me->SetOrientation(ang);
- owner->GetNearPoint2D(pos.m_positionX, pos.m_positionY, 5.0f - owner->GetObjectSize(), ang);
+ owner->GetNearPoint2D(pos.m_positionX, pos.m_positionY, 5.0f - owner->GetCombatReach(), ang);
}
else
{
@@ -400,7 +400,7 @@ class npc_coldflame : public CreatureScript
float ang = Position::NormalizeOrientation(pos.GetAngle(target));
me->SetOrientation(ang);
- owner->GetNearPoint2D(pos.m_positionX, pos.m_positionY, 15.0f - owner->GetObjectSize(), ang);
+ owner->GetNearPoint2D(pos.m_positionX, pos.m_positionY, 15.0f - owner->GetCombatReach(), ang);
}
me->NearTeleportTo(pos.GetPositionX(), pos.GetPositionY(), me->GetPositionZ(), me->GetOrientation());
@@ -518,7 +518,7 @@ class spell_marrowgar_coldflame : public SpellScriptLoader
{
targets.clear();
// select any unit but not the tank (by owners threatlist)
- Unit* target = GetCaster()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 1, -GetCaster()->GetObjectSize(), true, -SPELL_IMPALED);
+ Unit* target = GetCaster()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 1, -GetCaster()->GetCombatReach(), true, -SPELL_IMPALED);
if (!target)
target = GetCaster()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true); // or the tank if its solo
if (!target)
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 e525c2efa45..94bf769b771 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -197,77 +197,80 @@ enum Events
{
// The Lich King
// intro events
- EVENT_INTRO_MOVE_1 = 1,
- EVENT_INTRO_MOVE_2 = 2,
- EVENT_INTRO_MOVE_3 = 3,
- EVENT_INTRO_TALK_1 = 4,
- EVENT_EMOTE_CAST_SHOUT = 5,
- EVENT_INTRO_EMOTE_1 = 6,
- EVENT_INTRO_CHARGE = 7,
- EVENT_INTRO_CAST_FREEZE = 8,
- EVENT_FINISH_INTRO = 9,
+ EVENT_INTRO_MOVE_1 = 1,
+ EVENT_INTRO_MOVE_2,
+ EVENT_INTRO_MOVE_3,
+ EVENT_INTRO_TALK_1,
+ EVENT_EMOTE_CAST_SHOUT,
+ EVENT_INTRO_EMOTE_1,
+ EVENT_INTRO_CHARGE,
+ EVENT_INTRO_CAST_FREEZE,
+ EVENT_FINISH_INTRO,
// combat events
- EVENT_SUMMON_SHAMBLING_HORROR = 10,
- EVENT_SUMMON_DRUDGE_GHOUL = 11,
- EVENT_INFEST = 12,
- EVENT_NECROTIC_PLAGUE = 13,
- EVENT_SHADOW_TRAP = 14, // heroic only
- EVENT_SOUL_REAPER = 15,
- EVENT_DEFILE = 16,
- EVENT_HARVEST_SOUL = 17, // normal mode only
- EVENT_PAIN_AND_SUFFERING = 18,
- EVENT_SUMMON_ICE_SPHERE = 19,
- EVENT_SUMMON_RAGING_SPIRIT = 20,
- EVENT_QUAKE = 21,
- EVENT_SUMMON_VALKYR = 22,
- EVENT_GRAB_PLAYER = 23,
- EVENT_MOVE_TO_DROP_POS = 24,
- EVENT_LIFE_SIPHON = 25, // heroic only
- EVENT_START_ATTACK = 26,
- EVENT_QUAKE_2 = 27,
- EVENT_VILE_SPIRITS = 28,
- EVENT_HARVEST_SOULS = 29, // heroic only
- EVENT_BERSERK = 30,
- EVENT_SOUL_RIP = 31,
- EVENT_DESTROY_SOUL = 32,
- EVENT_FROSTMOURNE_TALK_1 = 33,
- EVENT_FROSTMOURNE_TALK_2 = 34,
- EVENT_FROSTMOURNE_TALK_3 = 35,
- EVENT_TELEPORT_BACK = 36,
- EVENT_FROSTMOURNE_HEROIC = 37,
- EVENT_OUTRO_TALK_1 = 38,
- EVENT_OUTRO_TALK_2 = 39,
- EVENT_OUTRO_EMOTE_TALK = 40,
- EVENT_OUTRO_TALK_3 = 41,
- EVENT_OUTRO_MOVE_CENTER = 42,
- EVENT_OUTRO_TALK_4 = 43,
- EVENT_OUTRO_RAISE_DEAD = 44,
- EVENT_OUTRO_TALK_5 = 45,
- EVENT_OUTRO_BLESS = 46,
- EVENT_OUTRO_REMOVE_ICE = 47,
- EVENT_OUTRO_MOVE_1 = 48,
- EVENT_OUTRO_JUMP = 49,
- EVENT_OUTRO_TALK_6 = 50,
- EVENT_OUTRO_KNOCK_BACK = 51,
- EVENT_OUTRO_SOUL_BARRAGE = 52,
- EVENT_OUTRO_SUMMON_TERENAS = 53,
- EVENT_OUTRO_TERENAS_TALK_1 = 54,
- EVENT_OUTRO_TERENAS_TALK_2 = 55,
- EVENT_OUTRO_TALK_7 = 56,
- EVENT_OUTRO_TALK_8 = 57,
+ EVENT_SUMMON_SHAMBLING_HORROR,
+ EVENT_SUMMON_DRUDGE_GHOUL,
+ EVENT_INFEST,
+ EVENT_NECROTIC_PLAGUE,
+ EVENT_SHADOW_TRAP, // heroic only
+ EVENT_SOUL_REAPER,
+ EVENT_DEFILE,
+ EVENT_HARVEST_SOUL, // normal mode only
+ EVENT_PAIN_AND_SUFFERING,
+ EVENT_SUMMON_ICE_SPHERE,
+ EVENT_SUMMON_RAGING_SPIRIT,
+ EVENT_QUAKE,
+ EVENT_SUMMON_VALKYR,
+ EVENT_GRAB_PLAYER,
+ EVENT_MOVE_TO_DROP_POS,
+ EVENT_LIFE_SIPHON, // heroic only
+ EVENT_MOVE_TO_CENTER, // heroic only
+ EVENT_START_ATTACK,
+ EVENT_SUMMON_RAGING_SPIRIT_2,
+ EVENT_QUAKE_2,
+ EVENT_VILE_SPIRITS,
+ EVENT_HARVEST_SOULS, // heroic only
+ EVENT_BERSERK,
+ EVENT_SOUL_RIP,
+ EVENT_DESTROY_SOUL,
+ EVENT_FROSTMOURNE_TALK_1,
+ EVENT_FROSTMOURNE_TALK_2,
+ EVENT_FROSTMOURNE_TALK_3,
+ EVENT_TELEPORT_BACK,
+ EVENT_FROSTMOURNE_HEROIC,
+ EVENT_OUTRO_TALK_1,
+ EVENT_OUTRO_TALK_2,
+ EVENT_OUTRO_EMOTE_TALK,
+ EVENT_OUTRO_TALK_3,
+ EVENT_OUTRO_MOVE_CENTER,
+ EVENT_OUTRO_TALK_4,
+ EVENT_OUTRO_RAISE_DEAD,
+ EVENT_OUTRO_TALK_5,
+ EVENT_OUTRO_BLESS,
+ EVENT_OUTRO_REMOVE_ICE,
+ EVENT_OUTRO_MOVE_1,
+ EVENT_OUTRO_JUMP,
+ EVENT_OUTRO_TALK_6,
+ EVENT_OUTRO_KNOCK_BACK,
+ EVENT_OUTRO_SOUL_BARRAGE,
+ EVENT_OUTRO_SUMMON_TERENAS,
+ EVENT_OUTRO_TERENAS_TALK_1,
+ EVENT_OUTRO_TERENAS_TALK_2,
+ EVENT_OUTRO_TALK_7,
+ EVENT_OUTRO_TALK_8,
// Shambling Horror
- EVENT_SHOCKWAVE = 58,
- EVENT_ENRAGE = 59,
+ EVENT_SHOCKWAVE,
+ EVENT_ENRAGE,
// Raging Spirit
- EVENT_SOUL_SHRIEK = 60,
+ EVENT_SOUL_SHRIEK,
+ EVENT_SET_AGRESSIVE,
// Strangulate Vehicle (Harvest Soul)
- EVENT_TELEPORT = 61,
- EVENT_MOVE_TO_LICH_KING = 62,
- EVENT_DESPAWN_SELF = 63,
+ EVENT_TELEPORT,
+ EVENT_MOVE_TO_LICH_KING,
+ EVENT_DESPAWN_SELF,
};
enum EventGroups
@@ -320,6 +323,7 @@ enum MovePoints
POINT_OUTRO_JUMP = 11,
POINT_LK_OUTRO_2 = 12,
POINT_GROUND = 13,
+ POINT_SIPHON = 14,
POINT_CHARGE = 1003, // globally used number for charge spell effects
};
@@ -334,12 +338,14 @@ enum EncounterActions
ACTION_SUMMON_TERENAS = 6,
ACTION_FINISH_OUTRO = 7,
ACTION_TELEPORT_BACK = 8,
+ ACTION_DISABLE_RAGING = 9
};
enum MiscData
{
LIGHT_SNOWSTORM = 2490,
LIGHT_SOULSTORM = 2508,
+ LIGHT_FOG = 2509,
MUSIC_FROZEN_THRONE = 17457,
MUSIC_SPECIAL = 17458, // Summon Shambling Horror, Remorseless Winter, Quake, Summon Val'kyr Periodic, Harvest Soul, Vile Spirits
@@ -499,17 +505,7 @@ class boss_the_lich_king : public CreatureScript
_vileSpiritExplosions = 0;
}
- void InitializeAI() override
- {
- SetupEncounter();
- }
-
- void JustRespawned() override
- {
- SetupEncounter();
- }
-
- void SetupEncounter()
+ void Reset() override
{
_Reset();
me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
@@ -524,9 +520,10 @@ class boss_the_lich_king : public CreatureScript
Cell::VisitGridObjects(me, worker, 333.0f);
// Reset any light override
- me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, 0, 5000);
+ me->GetMap()->SetZoneOverrideLight(AREA_ICECROWN_CITADEL, 0, 5000);
- me->SummonCreature(NPC_HIGHLORD_TIRION_FORDRING_LK, TirionSpawn, TEMPSUMMON_MANUAL_DESPAWN);
+ if (!ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HIGHLORD_TIRION_FORDRING)))
+ me->SummonCreature(NPC_HIGHLORD_TIRION_FORDRING_LK, TirionSpawn, TEMPSUMMON_MANUAL_DESPAWN);
}
void JustDied(Unit* /*killer*/) override
@@ -538,6 +535,8 @@ class boss_the_lich_king : public CreatureScript
me->GetMotionMaster()->MoveFall();
if (Creature* frostmourne = me->FindNearestCreature(NPC_FROSTMOURNE_TRIGGER, 50.0f))
frostmourne->DespawnOrUnsummon();
+ me->GetMap()->SetZoneOverrideLight(AREA_ICECROWN_CITADEL, LIGHT_FOG, 5000);
+ me->GetMap()->SetZoneWeather(AREA_ICECROWN_CITADEL, WEATHER_STATE_FOG, 0.0f);
}
void EnterCombat(Unit* target) override
@@ -550,6 +549,7 @@ class boss_the_lich_king : public CreatureScript
}
me->setActive(true);
+ me->SetCombatPulseDelay(5);
DoZoneInCombat();
events.SetPhase(PHASE_ONE);
@@ -592,7 +592,7 @@ class boss_the_lich_king : public CreatureScript
case ACTION_START_ENCOUNTER:
instance->SetBossState(DATA_THE_LICH_KING, IN_PROGRESS);
Talk(SAY_LK_INTRO_1);
- me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_FROZEN_THRONE);
+ me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_FROZEN_THRONE);
// schedule talks
me->SetStandState(UNIT_STAND_STATE_STAND);
events.ScheduleEvent(EVENT_INTRO_MOVE_1, 4000);
@@ -601,10 +601,10 @@ class boss_the_lich_king : public CreatureScript
events.ScheduleEvent(EVENT_START_ATTACK, 5000);
break;
case ACTION_PLAY_MUSIC:
- me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_FINAL);
+ me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_FINAL);
break;
case ACTION_RESTORE_LIGHT:
- me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, 0, 5000);
+ me->GetMap()->SetZoneOverrideLight(AREA_ICECROWN_CITADEL, 0, 5000);
break;
case ACTION_BREAK_FROSTMOURNE:
me->CastSpell((Unit*)NULL, SPELL_SUMMON_BROKEN_FROSTMOURNE, TRIGGERED_IGNORE_CAST_IN_PROGRESS);
@@ -666,6 +666,7 @@ class boss_the_lich_king : public CreatureScript
events.SetPhase(PHASE_TRANSITION);
me->SetReactState(REACT_PASSIVE);
me->AttackStop();
+ me->InterruptNonMeleeSpells(true);
me->GetMotionMaster()->MovePoint(POINT_CENTER_1, CenterPosition);
return;
}
@@ -675,6 +676,7 @@ class boss_the_lich_king : public CreatureScript
events.SetPhase(PHASE_TRANSITION);
me->SetReactState(REACT_PASSIVE);
me->AttackStop();
+ me->InterruptNonMeleeSpells(true);
me->GetMotionMaster()->MovePoint(POINT_CENTER_2, CenterPosition);
return;
}
@@ -686,7 +688,7 @@ class boss_the_lich_king : public CreatureScript
events.Reset();
events.SetPhase(PHASE_OUTRO);
summons.DespawnAll();
- me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_FURY_OF_FROSTMOURNE);
+ me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_FURY_OF_FROSTMOURNE);
me->InterruptNonMeleeSpells(true);
me->CastSpell((Unit*)NULL, SPELL_FURY_OF_FROSTMOURNE, TRIGGERED_NONE);
me->SetWalk(true);
@@ -738,8 +740,8 @@ class boss_the_lich_king : public CreatureScript
{
summon->CastSpell((Unit*)NULL, SPELL_BROKEN_FROSTMOURNE, true);
- me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, LIGHT_SOULSTORM, 10000);
- me->GetMap()->SetZoneWeather(AREA_THE_FROZEN_THRONE, WEATHER_STATE_BLACKSNOW, 0.5f);
+ me->GetMap()->SetZoneOverrideLight(AREA_ICECROWN_CITADEL, LIGHT_SOULSTORM, 10000);
+ me->GetMap()->SetZoneWeather(AREA_ICECROWN_CITADEL, WEATHER_STATE_BLACKSNOW, 0.5f);
events.ScheduleEvent(EVENT_OUTRO_SOUL_BARRAGE, 5000, 0, PHASE_OUTRO);
return;
@@ -793,8 +795,8 @@ class boss_the_lich_king : public CreatureScript
{
if (spell->Id == REMORSELESS_WINTER_1 || spell->Id == REMORSELESS_WINTER_2)
{
- me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, LIGHT_SNOWSTORM, 5000);
- me->GetMap()->SetZoneWeather(AREA_THE_FROZEN_THRONE, WEATHER_STATE_LIGHT_SNOW, 0.5f);
+ me->GetMap()->SetZoneOverrideLight(AREA_ICECROWN_CITADEL, LIGHT_SNOWSTORM, 5000);
+ me->GetMap()->SetZoneWeather(AREA_ICECROWN_CITADEL, WEATHER_STATE_LIGHT_SNOW, 0.5f);
}
}
@@ -820,13 +822,14 @@ class boss_the_lich_king : public CreatureScript
case POINT_CENTER_1:
me->SetFacingTo(0.0f, true);
Talk(SAY_LK_REMORSELESS_WINTER);
- me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL);
+ me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_SPECIAL);
DoCast(me, SPELL_REMORSELESS_WINTER_1);
+ summons.DespawnEntry(NPC_SHADOW_TRAP);
events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions
events.ScheduleEvent(EVENT_QUAKE, 62500, 0, PHASE_TRANSITION);
events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, 4000, 0, PHASE_TRANSITION);
events.ScheduleEvent(EVENT_SUMMON_ICE_SPHERE, 8000, 0, PHASE_TRANSITION);
- events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, 3000, 0, PHASE_TRANSITION);
+ events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, 6000, 0, PHASE_TRANSITION);
events.ScheduleEvent(EVENT_SUMMON_VALKYR, 78000, 0, PHASE_TWO);
events.ScheduleEvent(EVENT_INFEST, 70000, 0, PHASE_TWO);
events.ScheduleEvent(EVENT_DEFILE, 97000, 0, PHASE_TWO);
@@ -835,14 +838,14 @@ class boss_the_lich_king : public CreatureScript
case POINT_CENTER_2:
me->SetFacingTo(0.0f, true);
Talk(SAY_LK_REMORSELESS_WINTER);
- me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL);
+ me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_SPECIAL);
DoCast(me, SPELL_REMORSELESS_WINTER_2);
summons.DespawnEntry(NPC_VALKYR_SHADOWGUARD);
events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions
events.ScheduleEvent(EVENT_QUAKE_2, 62500, 0, PHASE_TRANSITION);
events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, 6000, 0, PHASE_TRANSITION);
events.ScheduleEvent(EVENT_SUMMON_ICE_SPHERE, 8000, 0, PHASE_TRANSITION);
- events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, 5000, 0, PHASE_TRANSITION);
+ events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT_2, 5000, 0, PHASE_TRANSITION);
events.ScheduleEvent(EVENT_DEFILE, 95500, 0, PHASE_THREE);
events.ScheduleEvent(EVENT_SOUL_REAPER, 99500, 0, PHASE_THREE);
events.ScheduleEvent(EVENT_VILE_SPIRITS, 79500, EVENT_GROUP_VILE_SPIRITS, PHASE_THREE);
@@ -921,7 +924,7 @@ class boss_the_lich_king : public CreatureScript
break;
case EVENT_SUMMON_SHAMBLING_HORROR:
DoCast(me, SPELL_SUMMON_SHAMBLING_HORROR);
- me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL);
+ me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_SPECIAL);
events.ScheduleEvent(EVENT_SUMMON_SHAMBLING_HORROR, 60000, 0, PHASE_ONE);
break;
case EVENT_SUMMON_DRUDGE_GHOUL:
@@ -977,24 +980,29 @@ class boss_the_lich_king : public CreatureScript
me->CastSpell(target, SPELL_RAGING_SPIRIT, TRIGGERED_NONE);
events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, urand(22000, 23000), 0, PHASE_TRANSITION);
break;
+ case EVENT_SUMMON_RAGING_SPIRIT_2:
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
+ me->CastSpell(target, SPELL_RAGING_SPIRIT, TRIGGERED_NONE);
+ events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, 18000, 0, PHASE_TRANSITION);
+ break;
case EVENT_QUAKE:
events.SetPhase(PHASE_TWO);
me->ClearUnitState(UNIT_STATE_CASTING); // clear state to ensure check in DoCastAOE passes
DoCastAOE(SPELL_QUAKE);
- me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL);
+ me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_SPECIAL);
Talk(SAY_LK_QUAKE);
break;
case EVENT_QUAKE_2:
events.SetPhase(PHASE_THREE);
me->ClearUnitState(UNIT_STATE_CASTING); // clear state to ensure check in DoCastAOE passes
DoCastAOE(SPELL_QUAKE);
- me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL);
+ me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_SPECIAL);
Talk(SAY_LK_QUAKE);
break;
case EVENT_SUMMON_VALKYR:
- me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL);
+ me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_SPECIAL);
Talk(SAY_LK_SUMMON_VALKYR);
- DoCastAOE(SUMMON_VALKYR);
+ DoCastAOE(SUMMON_VALKYR, true);
events.ScheduleEvent(EVENT_SUMMON_VALKYR, urand(45000, 50000), 0, PHASE_TWO);
break;
case EVENT_START_ATTACK:
@@ -1003,7 +1011,7 @@ class boss_the_lich_king : public CreatureScript
events.SetPhase(PHASE_THREE);
break;
case EVENT_VILE_SPIRITS:
- me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL);
+ me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_SPECIAL);
DoCastAOE(SPELL_VILE_SPIRITS);
events.ScheduleEvent(EVENT_VILE_SPIRITS, urand(35000, 40000), EVENT_GROUP_VILE_SPIRITS, PHASE_THREE);
break;
@@ -1019,6 +1027,25 @@ class boss_the_lich_king : public CreatureScript
events.RescheduleEvent(EVENT_SOUL_REAPER, urand(57000, 62000), 0, PHASE_THREE);
events.ScheduleEvent(EVENT_START_ATTACK, 49000);
events.ScheduleEvent(EVENT_FROSTMOURNE_HEROIC, 6500);
+ for (ObjectGuid guid : summons)
+ {
+ if (Creature* summon = ObjectAccessor::GetCreature(*me, guid))
+ {
+ if (summon->GetEntry() == NPC_VILE_SPIRIT)
+ {
+ summon->m_Events.KillAllEvents(true);
+ summon->m_Events.AddEvent(new VileSpiritActivateEvent(summon), summon->m_Events.CalculateTime(56500));
+ summon->SetReactState(REACT_PASSIVE);
+ summon->CombatStop(true);
+ summon->RemoveAurasDueToSpell(SPELL_VILE_SPIRIT_MOVE_SEARCH);
+ summon->RemoveAurasDueToSpell(SPELL_VILE_SPIRIT_DAMAGE_SEARCH);
+ summon->GetMotionMaster()->MoveTargetedHome();
+ summon->GetMotionMaster()->MoveRandom(10.0f);
+ }
+ else if (summon->GetEntry() == NPC_RAGING_SPIRIT)
+ summon->AI()->DoAction(ACTION_DISABLE_RAGING);
+ }
+ }
break;
case EVENT_FROSTMOURNE_HEROIC:
if (TempSummon* terenas = me->GetMap()->SummonCreature(NPC_TERENAS_MENETHIL_FROSTMOURNE_H, TerenasSpawnHeroic, NULL, 50000))
@@ -1034,18 +1061,6 @@ class boss_the_lich_king : public CreatureScript
spawner->CastSpell(spawner, SPELL_SUMMON_SPIRIT_BOMB_2, true); // summons bombs on players
spawner->m_Events.AddEvent(new TriggerWickedSpirit(spawner), spawner->m_Events.CalculateTime(3000));
}
-
- for (SummonList::iterator i = summons.begin(); i != summons.end(); ++i)
- {
- Creature* summon = ObjectAccessor::GetCreature(*me, *i);
- if (summon && summon->GetEntry() == NPC_VILE_SPIRIT)
- {
- summon->m_Events.KillAllEvents(true);
- summon->m_Events.AddEvent(new VileSpiritActivateEvent(summon), summon->m_Events.CalculateTime(50000));
- summon->GetMotionMaster()->MoveRandom(10.0f);
- summon->SetReactState(REACT_PASSIVE);
- }
- }
}
break;
case EVENT_OUTRO_TALK_1:
@@ -1074,7 +1089,7 @@ class boss_the_lich_king : public CreatureScript
case EVENT_OUTRO_RAISE_DEAD:
DoCastAOE(SPELL_RAISE_DEAD);
me->ClearUnitState(UNIT_STATE_CASTING);
- me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_FINAL);
+ me->GetMap()->SetZoneMusic(AREA_ICECROWN_CITADEL, MUSIC_FINAL);
break;
case EVENT_OUTRO_TALK_5:
Talk(SAY_LK_OUTRO_5);
@@ -1189,7 +1204,7 @@ class npc_tirion_fordring_tft : public CreatureScript
if (spell->Id == SPELL_ICE_LOCK)
me->SetFacingTo(3.085098f);
else if (spell->Id == SPELL_BROKEN_FROSTMOURNE_KNOCK)
- SetEquipmentSlots(true); // remove glow on ashbringer
+ me->LoadEquipment(1); // remove glow on ashbringer
}
void sGossipSelect(Player* /*player*/, uint32 menuId, uint32 gossipListId) override
@@ -1357,7 +1372,9 @@ class npc_raging_spirit : public CreatureScript
void Reset() override
{
+ me->SetReactState(REACT_PASSIVE);
_events.Reset();
+ _events.ScheduleEvent(EVENT_SET_AGRESSIVE, 2000);
_events.ScheduleEvent(EVENT_SOUL_SHRIEK, urand(12000, 15000));
DoCast(me, SPELL_PLAGUE_AVOIDANCE, true);
DoCast(me, SPELL_RAGING_SPIRIT_VISUAL, true);
@@ -1367,6 +1384,19 @@ class npc_raging_spirit : public CreatureScript
DoCast(me, SPELL_BOSS_HITTIN_YA, true);
}
+ void DoAction(int32 action) override
+ {
+ if (action == ACTION_DISABLE_RAGING)
+ {
+ _events.Reset();
+ _events.SetPhase(PHASE_FROSTMOURNE);
+ _events.ScheduleEvent(EVENT_SET_AGRESSIVE, 52000);
+ me->SetReactState(REACT_PASSIVE);
+ me->AttackStop();
+ me->InterruptNonMeleeSpells(true);
+ }
+ }
+
void IsSummonedBy(Unit* /*summoner*/) override
{
// player is the spellcaster so register summon manually
@@ -1384,7 +1414,7 @@ class npc_raging_spirit : public CreatureScript
void UpdateAI(uint32 diff) override
{
- if (!UpdateVictim())
+ if (!_events.IsInPhase(PHASE_FROSTMOURNE) && !UpdateVictim())
return;
_events.Update(diff);
@@ -1400,6 +1430,14 @@ class npc_raging_spirit : public CreatureScript
DoCastAOE(SPELL_SOUL_SHRIEK);
_events.ScheduleEvent(EVENT_SOUL_SHRIEK, urand(12000, 15000));
break;
+ case EVENT_SET_AGRESSIVE:
+ me->SetReactState(REACT_AGGRESSIVE);
+ if (_events.IsInPhase(PHASE_FROSTMOURNE))
+ {
+ _events.SetPhase(PHASE_THREE);
+ _events.ScheduleEvent(EVENT_SOUL_SHRIEK, urand(12000, 15000));
+ }
+ break;
default:
break;
}
@@ -1454,19 +1492,18 @@ class npc_valkyr_shadowguard : public CreatureScript
if (me->HealthBelowPctDamaged(50, damage))
{
- _events.Reset();
DoCastAOE(SPELL_EJECT_ALL_PASSENGERS);
- me->GetMotionMaster()->MoveTargetedHome();
- me->ClearUnitState(UNIT_STATE_EVADE);
+ ScheduleHeroicEvents();
}
}
- void JustReachedHome() override
+ void ScheduleHeroicEvents()
{
- // schedule siphon life event (heroic only)
DoZoneInCombat();
_events.Reset();
+ _events.ScheduleEvent(EVENT_MOVE_TO_CENTER, 1);
_events.ScheduleEvent(EVENT_LIFE_SIPHON, 2000);
+ me->ClearUnitState(UNIT_STATE_EVADE);
}
void AttackStart(Unit* /*target*/) override
@@ -1482,7 +1519,10 @@ class npc_valkyr_shadowguard : public CreatureScript
{
case POINT_DROP_PLAYER:
DoCastAOE(SPELL_EJECT_ALL_PASSENGERS);
- me->DespawnOrUnsummon(1000);
+ if (IsHeroic())
+ ScheduleHeroicEvents();
+ else
+ me->DespawnOrUnsummon(1000);
break;
case POINT_CHARGE:
if (Player* target = ObjectAccessor::GetPlayer(*me, _grabbedPlayer))
@@ -1545,6 +1585,13 @@ class npc_valkyr_shadowguard : public CreatureScript
DoCast(target, SPELL_LIFE_SIPHON);
_events.ScheduleEvent(EVENT_LIFE_SIPHON, 2500);
break;
+ case EVENT_MOVE_TO_CENTER:
+ {
+ Position pos = me->GetRandomPoint(CenterPosition, 4.0f);
+ pos.m_positionZ = me->GetHomePosition().m_positionZ;
+ me->GetMotionMaster()->MovePoint(POINT_SIPHON, pos);
+ break;
+ }
default:
break;
}
@@ -1607,6 +1654,7 @@ class npc_strangulate_vehicle : public CreatureScript
if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING)))
lichKing->AI()->SummonedCreatureDespawn(me);
+ me->DespawnOrUnsummon();
}
void UpdateAI(uint32 diff) override
@@ -2099,7 +2147,7 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader
}
private:
- void SelectTarget(std::list<Unit*>& targets)
+ void SelectTarget(std::list<WorldObject*>& targets)
{
targets.sort(Trinity::ObjectDistanceOrderPred(GetCaster()));
if (targets.size() < 2)
@@ -2125,6 +2173,7 @@ class spell_the_lich_king_necrotic_plague_jump : public SpellScriptLoader
void Register() override
{
+ OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_the_lich_king_necrotic_plague_SpellScript::SelectTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
BeforeHit += BeforeSpellHitFn(spell_the_lich_king_necrotic_plague_SpellScript::CheckAura);
OnHit += SpellHitFn(spell_the_lich_king_necrotic_plague_SpellScript::AddMissingStack);
}
@@ -2357,12 +2406,6 @@ class spell_the_lich_king_raging_spirit : public SpellScriptLoader
{
PrepareSpellScript(spell_the_lich_king_raging_spirit_SpellScript);
- bool Validate(SpellInfo const* spell) override
- {
- SpellEffectInfo const* effect0 = spell->GetEffect(EFFECT_0);
- return effect0 && ValidateSpellInfo({ uint32(effect0->CalcValue()) });
- }
-
void HandleScript(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
@@ -3134,6 +3177,34 @@ class spell_the_lich_king_jump_remove_aura : public SpellScriptLoader
}
};
+class spell_the_lich_king_harvest_souls_teleport : public SpellScriptLoader
+{
+public:
+ spell_the_lich_king_harvest_souls_teleport() : SpellScriptLoader("spell_the_lich_king_harvest_souls_teleport") { }
+
+ class spell_the_lich_king_harvest_souls_teleport_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_the_lich_king_harvest_souls_teleport_SpellScript);
+
+ void RelocateTransportOffset(SpellEffIndex /*effIndex*/)
+ {
+ float randCoordX = frand(-18.0f, 18.0f);
+ float randCoordY = frand(-18.0f, 18.0f);
+ GetHitDest()->RelocateOffset({ randCoordX, randCoordY, 0.0f, 0.0f });
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_the_lich_king_harvest_souls_teleport_SpellScript::RelocateTransportOffset, EFFECT_1, SPELL_EFFECT_TELEPORT_UNITS);
+ }
+ };
+
+ SpellScript* GetSpellScript() const override
+ {
+ return new spell_the_lich_king_harvest_souls_teleport_SpellScript();
+ }
+};
+
class achievement_been_waiting_long_time : public AchievementCriteriaScript
{
public:
@@ -3203,6 +3274,7 @@ void AddSC_boss_the_lich_king()
new spell_the_lich_king_jump();
new spell_the_lich_king_jump_remove_aura();
new spell_trigger_spell_from_caster("spell_the_lich_king_mass_resurrection", SPELL_MASS_RESURRECTION_REAL);
+ new spell_the_lich_king_harvest_souls_teleport();
new achievement_been_waiting_long_time();
new achievement_neck_deep_in_vile();
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
index 1f9d88ea885..8fff8922983 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
@@ -321,6 +321,7 @@ enum ICCreaturesIds
NPC_WORLD_TRIGGER_INFINITE_AOI = 36171,
NPC_SPIRIT_BOMB = 39189,
NPC_FROSTMOURNE_TRIGGER = 38584,
+ NPC_SHADOW_TRAP = 39137,
// Generic
NPC_INVISIBLE_STALKER = 30298
@@ -524,8 +525,7 @@ enum ICWorldStatesICC
enum ICAreaIds
{
- AREA_ICECROWN_CITADEL = 4812,
- AREA_THE_FROZEN_THRONE = 4859
+ AREA_ICECROWN_CITADEL = 4812
};
class spell_trigger_spell_from_caster : public SpellScriptLoader
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
index 1d0ef4ccea0..d70f0d07c54 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp
@@ -881,26 +881,20 @@ public:
{
PrepareAuraScript(spell_kelthuzad_chains_AuraScript);
- void HandleApply(AuraEffect const* /*eff*/, AuraEffectHandleModes /*mode*/)
+ void HandleApply(AuraEffect const* aurEff, AuraEffectHandleModes mode)
{
- Unit* target = GetTarget();
- float scale = target->GetObjectScale();
- ApplyPercentModFloatVar(scale, 200.0f, true);
- target->SetObjectScale(scale);
+ aurEff->HandleAuraModScale(GetTargetApplication(), mode, true);
}
- void HandleRemove(AuraEffect const* /*eff*/, AuraEffectHandleModes /*mode*/)
+ void HandleRemove(AuraEffect const* aurEff, AuraEffectHandleModes mode)
{
- Unit* target = GetTarget();
- float scale = target->GetObjectScale();
- ApplyPercentModFloatVar(scale, 200.0f, false);
- target->SetObjectScale(scale);
+ aurEff->HandleAuraModScale(GetTargetApplication(), mode, false);
}
void Register() override
{
- AfterEffectApply += AuraEffectApplyFn(spell_kelthuzad_chains_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL);
- AfterEffectRemove += AuraEffectApplyFn(spell_kelthuzad_chains_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectApply += AuraEffectApplyFn(spell_kelthuzad_chains_AuraScript::HandleApply, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectApplyFn(spell_kelthuzad_chains_AuraScript::HandleRemove, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL);
}
};
diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index b61e42974ac..1569697c81c 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -43,7 +43,7 @@ BossBoundaryData const boundaries =
/* Military Quarter */
{ BOSS_RAZUVIOUS, new ZRangeBoundary(260.0f, 287.0f) }, // will not chase onto the upper floor
{ BOSS_GOTHIK, new RectangleBoundary(2627.0f, 2764.0f, -3440.0f, -3275.0f) },
- { BOSS_HORSEMEN, new ParallelogramBoundary(AreaBoundary::DoublePosition(2646.0, -2959.0), AreaBoundary::DoublePosition(2529.0, -3075.0), AreaBoundary::DoublePosition(2506.0, -2854.0)) },
+ { BOSS_HORSEMEN, new ParallelogramBoundary(Position(2646.0f, -2959.0f), Position(2529.0f, -3075.0f), Position(2506.0f, -2854.0f)) },
/* Construct Quarter */
{ BOSS_PATCHWERK, new CircleBoundary(Position(3204.0f, -3241.4f), 240.0f) },
@@ -51,9 +51,9 @@ BossBoundaryData const boundaries =
{ BOSS_GROBBULUS, new CircleBoundary(Position(3204.0f, -3241.4f), 240.0f) },
{ BOSS_GROBBULUS, new RectangleBoundary(3295.0f, 3340.0f, -3254.2f, -3230.18f, true) }, // entrance door blocker
{ BOSS_GLUTH, new CircleBoundary(Position(3293.0f, -3142.0f), 80.0) },
- { BOSS_GLUTH, new ParallelogramBoundary(AreaBoundary::DoublePosition(3401.0, -3149.0), AreaBoundary::DoublePosition(3261.0, -3028.0), AreaBoundary::DoublePosition(3320.0, -3267.0)) },
+ { BOSS_GLUTH, new ParallelogramBoundary(Position(3401.0f, -3149.0f), Position(3261.0f, -3028.0f), Position(3320.0f, -3267.0f)) },
{ BOSS_GLUTH, new ZRangeBoundary(285.0f, 310.0f) },
- { BOSS_THADDIUS, new ParallelogramBoundary(AreaBoundary::DoublePosition(3478.3, -3070.0), AreaBoundary::DoublePosition(3370.0, -2961.5), AreaBoundary::DoublePosition(3580.0, -2961.5)) },
+ { BOSS_THADDIUS, new ParallelogramBoundary(Position(3478.3f, -3070.0f), Position(3370.0f, -2961.5f), Position(3580.0f, -2961.5f)) },
/* Frostwyrm Lair */
{ BOSS_SAPPHIRON, new CircleBoundary(Position(3517.627f, -5255.5f), 110.0) },
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h
index b066eb59bea..4c3faf67b5a 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h
@@ -23,7 +23,7 @@
#define EoEScriptName "instance_eye_of_eternity"
#define DataHeader "EOE"
-enum InstanceData
+enum EOEInstanceData
{
DATA_MALYGOS_EVENT,
MAX_ENCOUNTER,
@@ -33,7 +33,7 @@ enum InstanceData
DATA_RESPAWN_IRIS
};
-enum InstanceData64
+enum EOEInstanceData64
{
DATA_TRIGGER,
DATA_MALYGOS,
@@ -44,7 +44,7 @@ enum InstanceData64
DATA_GIFT_BOX_BUNNY_GUID
};
-enum InstanceNpcs
+enum EOEInstanceNpcs
{
NPC_MALYGOS = 28859,
NPC_VORTEX_TRIGGER = 30090,
@@ -60,7 +60,7 @@ enum InstanceNpcs
NPC_SURGE_OF_POWER = 30334
};
-enum InstanceGameObjects
+enum EOEInstanceGameObjects
{
GO_NEXUS_RAID_PLATFORM = 193070,
GO_EXIT_PORTAL = 193908,
@@ -72,12 +72,12 @@ enum InstanceGameObjects
GO_HEART_OF_MAGIC_25 = 194159
};
-enum InstanceEvents
+enum EOEInstanceEvents
{
EVENT_FOCUSING_IRIS = 20711
};
-enum InstanceSpells
+enum EOEInstanceSpells
{
SPELL_VORTEX_4 = 55853, // damage | used to enter to the vehicle
SPELL_VORTEX_5 = 56263, // damage | used to enter to the vehicle
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 818485e4440..4e5019618ec 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
@@ -410,7 +410,7 @@ class boss_algalon_the_observer : public CreatureScript
{
_firstPull = false;
Talk(SAY_ALGALON_START_TIMER);
- if (Creature* brann = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BRANN_BRONZEBEARD_ALG)))
+ if (Creature* brann = instance->GetCreature(DATA_BRANN_BRONZEBEARD_ALG))
brann->AI()->DoAction(ACTION_FINISH_INTRO);
me->setActive(true);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
index b8f23964df6..fe01a917cd6 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp
@@ -393,8 +393,8 @@ class npc_sanctum_sentry : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- if (Creature* Auriaya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_AURIAYA)))
- Auriaya->AI()->DoAction(ACTION_CRAZY_CAT_LADY);
+ if (Creature* auriaya = instance->GetCreature(BOSS_AURIAYA))
+ auriaya->AI()->DoAction(ACTION_CRAZY_CAT_LADY);
}
private:
@@ -472,8 +472,8 @@ class npc_feral_defender : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
DoCast(me, SPELL_SUMMON_ESSENCE);
- if (Creature* Auriaya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_AURIAYA)))
- Auriaya->AI()->DoAction(ACTION_RESPAWN_DEFENDER);
+ if (Creature* auriaya = instance->GetCreature(BOSS_AURIAYA))
+ auriaya->AI()->DoAction(ACTION_RESPAWN_DEFENDER);
}
private:
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
index b2958daf07c..8e734e6d3e7 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
@@ -974,11 +974,6 @@ class npc_mimirons_inferno : public CreatureScript
public:
npc_mimirons_inferno() : CreatureScript("npc_mimirons_inferno") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<npc_mimirons_infernoAI>(creature);
- }
-
struct npc_mimirons_infernoAI : public npc_escortAI
{
npc_mimirons_infernoAI(Creature* creature) : npc_escortAI(creature)
@@ -1031,6 +1026,10 @@ public:
}
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetUlduarAI<npc_mimirons_infernoAI>(creature);
+ }
};
class npc_hodirs_fury : public CreatureScript
@@ -1247,7 +1246,7 @@ class npc_lorekeeper : public CreatureScript
CloseGossipMenuFor(player);
me->GetMap()->LoadGrid(364, -16); // make sure leviathan is loaded
- if (Creature* leviathan = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_LEVIATHAN)))
+ if (Creature* leviathan = _instance->GetCreature(BOSS_LEVIATHAN))
{
leviathan->AI()->DoAction(ACTION_START_HARD_MODE);
me->SetVisible(false);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
index ad4b7c6413f..5cfc0d75481 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp
@@ -1061,8 +1061,8 @@ class npc_ancient_water_spirit : public CreatureScript
{
Initialize();
instance = me->GetInstanceScript();
- if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA)))
- waveCount = ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount;
+ if (Creature* freya = instance->GetCreature(BOSS_FREYA))
+ waveCount = ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->trioWaveCount;
else
waveCount = 0;
}
@@ -1099,10 +1099,10 @@ class npc_ancient_water_spirit : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA)))
+ if (Creature* freya = instance->GetCreature(BOSS_FREYA))
{
- ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false;
- ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(1);
+ ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->checkElementalAlive[waveCount] = false;
+ ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->LasherDead(1);
}
}
@@ -1129,8 +1129,8 @@ class npc_storm_lasher : public CreatureScript
{
Initialize();
instance = me->GetInstanceScript();
- if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA)))
- waveCount = ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount;
+ if (Creature* freya = instance->GetCreature(BOSS_FREYA))
+ waveCount = ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->trioWaveCount;
else
waveCount = 0;
}
@@ -1173,10 +1173,10 @@ class npc_storm_lasher : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA)))
+ if (Creature* freya = instance->GetCreature(BOSS_FREYA))
{
- ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false;
- ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(2);
+ ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->checkElementalAlive[waveCount] = false;
+ ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->LasherDead(2);
}
}
@@ -1203,8 +1203,8 @@ class npc_snaplasher : public CreatureScript
npc_snaplasherAI(Creature* creature) : ScriptedAI(creature)
{
instance = me->GetInstanceScript();
- if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA)))
- waveCount = ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount;
+ if (Creature* freya = instance->GetCreature(BOSS_FREYA))
+ waveCount = ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->trioWaveCount;
else
waveCount = 0;
}
@@ -1222,10 +1222,10 @@ class npc_snaplasher : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA)))
+ if (Creature* freya = instance->GetCreature(BOSS_FREYA))
{
- ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false;
- ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(4);
+ ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->checkElementalAlive[waveCount] = false;
+ ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->LasherDead(4);
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
index 9630f1ddbfe..6c03b9f5ecb 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp
@@ -336,8 +336,8 @@ class boss_saronite_animus : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- if (Creature* Vezax = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_VEZAX)))
- Vezax->AI()->DoAction(ACTION_ANIMUS_DIE);
+ if (Creature* vezax = instance->GetCreature(BOSS_VEZAX))
+ vezax->AI()->DoAction(ACTION_ANIMUS_DIE);
}
void UpdateAI(uint32 diff) override
@@ -434,8 +434,8 @@ class npc_saronite_vapors : public CreatureScript
DoCast(me, SPELL_SARONITE_VAPORS);
me->DespawnOrUnsummon(30000);
- if (Creature* Vezax = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_VEZAX)))
- Vezax->AI()->DoAction(ACTION_VAPORS_DIE);
+ if (Creature* vezax = instance->GetCreature(BOSS_VEZAX))
+ vezax->AI()->DoAction(ACTION_VAPORS_DIE);
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
index 57b96e26943..4d8a49160bc 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp
@@ -242,8 +242,8 @@ class npc_flash_freeze : public CreatureScript
// Prevents to have Ice Block on other place than target is
me->NearTeleportTo(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), target->GetOrientation());
if (target->GetTypeId() == TYPEID_PLAYER)
- if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR)))
- Hodir->AI()->DoAction(ACTION_CHEESE_THE_FREEZE);
+ if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
+ hodir->AI()->DoAction(ACTION_CHEESE_THE_FREEZE);
}
}
};
@@ -291,21 +291,21 @@ class npc_ice_block : public CreatureScript
void DamageTaken(Unit* who, uint32& /*damage*/) override
{
- if (Creature* Helper = ObjectAccessor::GetCreature(*me, targetGUID))
+ if (Creature* helper = ObjectAccessor::GetCreature(*me, targetGUID))
{
- Helper->RemoveUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED));
- Helper->SetControlled(false, UNIT_STATE_ROOT);
+ helper->RemoveUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED));
+ helper->SetControlled(false, UNIT_STATE_ROOT);
- if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR)))
+ if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
{
- if (!Hodir->IsInCombat())
+ if (!hodir->IsInCombat())
{
- Hodir->SetReactState(REACT_AGGRESSIVE);
- Hodir->AI()->DoZoneInCombat();
- Hodir->AI()->AttackStart(who);
+ hodir->SetReactState(REACT_AGGRESSIVE);
+ hodir->AI()->DoZoneInCombat();
+ hodir->AI()->AttackStart(who);
}
- Helper->AI()->AttackStart(Hodir);
+ helper->AI()->AttackStart(hodir);
}
}
}
@@ -717,8 +717,8 @@ class npc_hodir_priest : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR)))
- Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
+ if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
+ hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
private:
@@ -782,8 +782,8 @@ class npc_hodir_shaman : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR)))
- Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
+ if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
+ hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
private:
@@ -846,8 +846,8 @@ class npc_hodir_druid : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR)))
- Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
+ if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
+ hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
private:
@@ -929,8 +929,8 @@ class npc_hodir_mage : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR)))
- Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
+ if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
+ hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
private:
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
index e4040a44a36..37141085731 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp
@@ -328,7 +328,7 @@ class npc_iron_construct : public CreatureScript
if (me->HasAura(RAID_MODE(SPELL_BRITTLE, SPELL_BRITTLE_25)) && damage >= 5000)
{
DoCast(SPELL_SHATTER);
- if (Creature* ignis = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_IGNIS)))
+ if (Creature* ignis = _instance->GetCreature(BOSS_IGNIS))
if (ignis->AI())
ignis->AI()->DoAction(ACTION_REMOVE_BUFF);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index 5cf1cf67de8..fd4d7b02229 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -371,7 +371,7 @@ static bool IsEncounterFinished(Unit* who)
mkii->DespawnOrUnsummon(120000);
vx001->DespawnOrUnsummon(120000);
aerial->DespawnOrUnsummon(120000);
- if (Creature* mimiron = ObjectAccessor::GetCreature(*who, instance->GetGuidData(BOSS_MIMIRON)))
+ if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->JustDied(who);
return true;
}
@@ -428,7 +428,7 @@ class boss_mimiron : public CreatureScript
me->RemoveAurasDueToSpell(SPELL_WELD);
DoCast(me->GetVehicleBase(), SPELL_SEAT_6);
- if (GameObject* button = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_BUTTON)))
+ if (GameObject* button = instance->GetGameObject(DATA_MIMIRON_BUTTON))
button->AddFlag(GO_FLAG_NOT_SELECTABLE);
if (_fireFighter)
@@ -458,14 +458,14 @@ class boss_mimiron : public CreatureScript
_Reset();
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
- if (GameObject* elevator = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_ELEVATOR)))
+ if (GameObject* elevator = instance->GetGameObject(DATA_MIMIRON_ELEVATOR))
elevator->SetGoState(GO_STATE_ACTIVE);
if (_fireFighter)
- if (Creature* computer = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_COMPUTER)))
+ if (Creature* computer = instance->GetCreature(DATA_COMPUTER))
computer->AI()->DoAction(DO_DEACTIVATE_COMPUTER);
- if (GameObject* button = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_BUTTON)))
+ if (GameObject* button = instance->GetGameObject(DATA_MIMIRON_BUTTON))
{
button->SetGoState(GO_STATE_READY);
button->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
@@ -493,7 +493,7 @@ class boss_mimiron : public CreatureScript
switch (eventId)
{
case EVENT_SUMMON_FLAMES:
- if (Unit* worldtrigger = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_MIMIRON_WORLD_TRIGGER)))
+ if (Creature* worldtrigger = instance->GetCreature(DATA_MIMIRON_WORLD_TRIGGER))
worldtrigger->CastCustomSpell(SPELL_SCRIPT_EFFECT_SUMMON_FLAMES_INITIAL, SPELLVALUE_MAX_TARGETS, 3, NULL, true, NULL, NULL, me->GetGUID());
events.RescheduleEvent(EVENT_SUMMON_FLAMES, 28000);
break;
@@ -529,14 +529,14 @@ class boss_mimiron : public CreatureScript
events.ScheduleEvent(EVENT_VX001_ACTIVATION_4, 5000);
break;
case EVENT_VX001_ACTIVATION_4:
- if (GameObject* elevator = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_ELEVATOR)))
+ if (GameObject* elevator = instance->GetGameObject(DATA_MIMIRON_ELEVATOR))
elevator->SetGoState(GO_STATE_READY);
- if (Unit* worldtrigger = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_MIMIRON_WORLD_TRIGGER)))
+ if (Creature* worldtrigger = instance->GetCreature(DATA_MIMIRON_WORLD_TRIGGER))
worldtrigger->CastSpell(worldtrigger, SPELL_ELEVATOR_KNOCKBACK);
events.ScheduleEvent(EVENT_VX001_ACTIVATION_5, 6000);
break;
case EVENT_VX001_ACTIVATION_5:
- if (GameObject* elevator = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_ELEVATOR)))
+ if (GameObject* elevator = instance->GetGameObject(DATA_MIMIRON_ELEVATOR))
elevator->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
if (Creature* vx001 = me->SummonCreature(NPC_VX_001, VX001SummonPos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000))
vx001->CastSpell(vx001, SPELL_FREEZE_ANIM);
@@ -644,7 +644,7 @@ class boss_mimiron : public CreatureScript
Talk(SAY_V07TRON_DEATH);
if (_fireFighter)
{
- if (Creature* computer = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_COMPUTER)))
+ if (Creature* computer = instance->GetCreature(DATA_COMPUTER))
computer->AI()->DoAction(DO_DEACTIVATE_COMPUTER);
me->SummonGameObject(RAID_MODE(GO_CACHE_OF_INNOVATION_FIREFIGHTER, GO_CACHE_OF_INNOVATION_FIREFIGHTER_HERO), 2744.040f, 2569.352f, 364.3135f, 3.124123f, QuaternionData(0.f, 0.f, 0.9999619f, 0.008734641f), 604800);
}
@@ -783,7 +783,7 @@ class boss_leviathan_mk_ii : public CreatureScript
void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
+ if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->Talk(events.IsInPhase(PHASE_LEVIATHAN_MK_II) ? SAY_MKII_SLAY : SAY_V07TRON_SLAY);
}
@@ -798,7 +798,7 @@ class boss_leviathan_mk_ii : public CreatureScript
me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_HALF_HEAL);
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
+ if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_VX001);
break;
case WP_MKII_P4_POS_1:
@@ -808,7 +808,7 @@ class boss_leviathan_mk_ii : public CreatureScript
events.ScheduleEvent(EVENT_MOVE_POINT_3, 1);
break;
case WP_MKII_P4_POS_3:
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
+ if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_2);
break;
case WP_MKII_P4_POS_4:
@@ -951,7 +951,7 @@ class boss_vx_001 : public CreatureScript
me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); // | UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_HALF_HEAL); // has no effect, wat
DoCast(me, SPELL_TORSO_DISABLED);
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
+ if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_AERIAL);
}
else if (events.IsInPhase(PHASE_VOL7RON))
@@ -1022,7 +1022,7 @@ class boss_vx_001 : public CreatureScript
void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
+ if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->Talk(events.IsInPhase(PHASE_VX_001) ? SAY_VX001_SLAY : SAY_V07TRON_SLAY);
}
@@ -1201,7 +1201,7 @@ class boss_aerial_command_unit : public CreatureScript
void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
+ if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->Talk(events.IsInPhase(PHASE_AERIAL_COMMAND_UNIT) ? SAY_AERIAL_SLAY : SAY_V07TRON_SLAY);
}
@@ -1211,7 +1211,7 @@ class boss_aerial_command_unit : public CreatureScript
{
me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
+ if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_1);
}
}
@@ -1435,7 +1435,7 @@ class npc_mimiron_computer : public CreatureScript
{
case EVENT_SELF_DESTRUCT_10:
Talk(SAY_SELF_DESTRUCT_10);
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
+ if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_HARD_MODE);
events.ScheduleEvent(EVENT_SELF_DESTRUCT_9, 60000);
break;
@@ -1477,7 +1477,7 @@ class npc_mimiron_computer : public CreatureScript
break;
case EVENT_SELF_DESTRUCT_FINALIZED:
Talk(SAY_SELF_DESTRUCT_FINALIZED);
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
+ if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_SELF_DESTRUCT);
DoCast(me, SPELL_SELF_DESTRUCTION_AURA);
DoCast(me, SPELL_SELF_DESTRUCTION_VISUAL);
@@ -1658,7 +1658,7 @@ class go_mimiron_hardmode_button : public GameObjectScript
if (!instance)
return false;
- if (Creature* computer = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_COMPUTER)))
+ if (Creature* computer = instance->GetCreature(DATA_COMPUTER))
computer->AI()->DoAction(DO_ACTIVATE_COMPUTER);
go->SetGoState(GO_STATE_ACTIVE);
go->AddFlag(GO_FLAG_NOT_SELECTABLE);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
index 8a1bbfe712c..3f56f4523cc 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
@@ -189,16 +189,22 @@ class boss_razorscale_controller : public CreatureScript
public:
boss_razorscale_controller() : CreatureScript("boss_razorscale_controller") { }
- struct boss_razorscale_controllerAI : public BossAI
+ struct boss_razorscale_controllerAI : public ScriptedAI
{
- boss_razorscale_controllerAI(Creature* creature) : BossAI(creature, DATA_RAZORSCALE_CONTROL)
+ boss_razorscale_controllerAI(Creature* creature) : ScriptedAI(creature), summons(me)
{
+ instance = creature->GetInstanceScript();
me->SetDisplayFromModel(1);
}
+ InstanceScript* instance;
+ EventMap events;
+ SummonList summons;
+
void Reset() override
{
- _Reset();
+ events.Reset();
+ summons.DespawnAll();
me->SetReactState(REACT_PASSIVE);
}
@@ -207,14 +213,14 @@ class boss_razorscale_controller : public CreatureScript
switch (spell->Id)
{
case SPELL_FLAMED:
- if (GameObject* Harpoon1 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_RAZOR_HARPOON_1)))
- Harpoon1->RemoveFromWorld();
- if (GameObject* Harpoon2 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_RAZOR_HARPOON_2)))
- Harpoon2->RemoveFromWorld();
- if (GameObject* Harpoon3 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_RAZOR_HARPOON_3)))
- Harpoon3->RemoveFromWorld();
- if (GameObject* Harpoon4 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_RAZOR_HARPOON_4)))
- Harpoon4->RemoveFromWorld();
+ if (GameObject* harpoon = instance->GetGameObject(GO_RAZOR_HARPOON_1))
+ harpoon->RemoveFromWorld();
+ if (GameObject* harpoon = instance->GetGameObject(GO_RAZOR_HARPOON_2))
+ harpoon->RemoveFromWorld();
+ if (GameObject* harpoon = instance->GetGameObject(GO_RAZOR_HARPOON_3))
+ harpoon->RemoveFromWorld();
+ if (GameObject* harpoon = instance->GetGameObject(GO_RAZOR_HARPOON_4))
+ harpoon->RemoveFromWorld();
DoAction(ACTION_HARPOON_BUILD);
DoAction(ACTION_PLACE_BROKEN_HARPOON);
break;
@@ -229,7 +235,8 @@ class boss_razorscale_controller : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- _JustDied();
+ events.Reset();
+ summons.DespawnAll();
}
void DoAction(int32 action) override
@@ -261,39 +268,39 @@ class boss_razorscale_controller : public CreatureScript
{
case EVENT_BUILD_HARPOON_1:
Talk(EMOTE_HARPOON);
- if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_1, PosHarpoon[0].GetPositionX(), PosHarpoon[0].GetPositionY(), PosHarpoon[0].GetPositionZ(), 4.790f, QuaternionData::fromEulerAnglesZYX(4.790f, 0.0f, 0.0f), uint32(me->GetRespawnTime())))
+ if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_1, PosHarpoon[0].GetPositionX(), PosHarpoon[0].GetPositionY(), PosHarpoon[0].GetPositionZ(), 4.790f, QuaternionData::fromEulerAnglesZYX(4.790f, 0.0f, 0.0f), uint32(me->GetRespawnTime())))
{
- if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) //only nearest broken harpoon
- BrokenHarpoon->RemoveFromWorld();
+ if (GameObject* brokenHarpoon = harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) //only nearest broken harpoon
+ brokenHarpoon->RemoveFromWorld();
events.ScheduleEvent(EVENT_BUILD_HARPOON_2, 20000);
events.CancelEvent(EVENT_BUILD_HARPOON_1);
}
return;
case EVENT_BUILD_HARPOON_2:
Talk(EMOTE_HARPOON);
- if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_2, PosHarpoon[1].GetPositionX(), PosHarpoon[1].GetPositionY(), PosHarpoon[1].GetPositionZ(), 4.659f, QuaternionData::fromEulerAnglesZYX(4.659f, 0.0f, 0.0f), uint32(me->GetRespawnTime())))
+ if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_2, PosHarpoon[1].GetPositionX(), PosHarpoon[1].GetPositionY(), PosHarpoon[1].GetPositionZ(), 4.659f, QuaternionData::fromEulerAnglesZYX(4.659f, 0.0f, 0.0f), uint32(me->GetRespawnTime())))
{
- if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f))
- BrokenHarpoon->RemoveFromWorld();
+ if (GameObject* brokenHarpoon = harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f))
+ brokenHarpoon->RemoveFromWorld();
events.CancelEvent(EVENT_BUILD_HARPOON_2);
}
return;
case EVENT_BUILD_HARPOON_3:
Talk(EMOTE_HARPOON);
- if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_3, PosHarpoon[2].GetPositionX(), PosHarpoon[2].GetPositionY(), PosHarpoon[2].GetPositionZ(), 5.382f, QuaternionData::fromEulerAnglesZYX(5.382f, 0.0f, 0.0f), uint32(me->GetRespawnTime())))
+ if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_3, PosHarpoon[2].GetPositionX(), PosHarpoon[2].GetPositionY(), PosHarpoon[2].GetPositionZ(), 5.382f, QuaternionData::fromEulerAnglesZYX(5.382f, 0.0f, 0.0f), uint32(me->GetRespawnTime())))
{
- if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f))
- BrokenHarpoon->RemoveFromWorld();
+ if (GameObject* brokenHarpoon = harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f))
+ brokenHarpoon->RemoveFromWorld();
events.ScheduleEvent(EVENT_BUILD_HARPOON_4, 20000);
events.CancelEvent(EVENT_BUILD_HARPOON_3);
}
return;
case EVENT_BUILD_HARPOON_4:
Talk(EMOTE_HARPOON);
- if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_4, PosHarpoon[3].GetPositionX(), PosHarpoon[3].GetPositionY(), PosHarpoon[3].GetPositionZ(), 4.266f, QuaternionData::fromEulerAnglesZYX(4.266f, 0.0f, 0.0f), uint32(me->GetRespawnTime())))
+ if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_4, PosHarpoon[3].GetPositionX(), PosHarpoon[3].GetPositionY(), PosHarpoon[3].GetPositionZ(), 4.266f, QuaternionData::fromEulerAnglesZYX(4.266f, 0.0f, 0.0f), uint32(me->GetRespawnTime())))
{
- if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f))
- BrokenHarpoon->RemoveFromWorld();
+ if (GameObject* brokenHarpoon = harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f))
+ brokenHarpoon->RemoveFromWorld();
events.CancelEvent(EVENT_BUILD_HARPOON_4);
}
return;
@@ -315,9 +322,9 @@ class go_razorscale_harpoon : public GameObjectScript
bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
- InstanceScript* instance = go->GetInstanceScript();
- if (ObjectAccessor::GetCreature(*go, instance->GetGuidData(BOSS_RAZORSCALE)))
- go->AddFlag(GO_FLAG_NOT_SELECTABLE);
+ if (InstanceScript* instance = go->GetInstanceScript())
+ if (instance->GetCreature(BOSS_RAZORSCALE))
+ go->AddFlag(GO_FLAG_NOT_SELECTABLE);
return false;
}
};
@@ -361,14 +368,14 @@ class boss_razorscale : public CreatureScript
me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_PASSIVE);
Initialize();
- if (Creature* commander = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EXPEDITION_COMMANDER)))
+ if (Creature* commander = instance->GetCreature(DATA_EXPEDITION_COMMANDER))
commander->AI()->DoAction(ACTION_COMMANDER_RESET);
}
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
- if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZORSCALE_CONTROL)))
+ if (Creature* controller = instance->GetCreature(DATA_RAZORSCALE_CONTROL))
controller->AI()->DoAction(ACTION_HARPOON_BUILD);
me->SetSpeedRate(MOVE_FLIGHT, 3.0f);
me->SetReactState(REACT_PASSIVE);
@@ -383,7 +390,7 @@ class boss_razorscale : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
_JustDied();
- if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZORSCALE_CONTROL)))
+ if (Creature* controller = instance->GetCreature(DATA_RAZORSCALE_CONTROL))
controller->AI()->Reset();
}
@@ -459,7 +466,7 @@ class boss_razorscale : public CreatureScript
me->SetCanFly(false);
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED));
- if (Creature* commander = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EXPEDITION_COMMANDER)))
+ if (Creature* commander = instance->GetCreature(DATA_EXPEDITION_COMMANDER))
commander->AI()->DoAction(ACTION_GROUND_PHASE);
events.ScheduleEvent(EVENT_BREATH, 30000, 0, PHASE_GROUND);
events.ScheduleEvent(EVENT_BUFFET, 33000, 0, PHASE_GROUND);
@@ -475,7 +482,7 @@ class boss_razorscale : public CreatureScript
return;
case EVENT_BUFFET:
DoCastAOE(SPELL_WINGBUFFET);
- if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZORSCALE_CONTROL)))
+ if (Creature* controller = instance->GetCreature(DATA_RAZORSCALE_CONTROL))
controller->CastSpell(controller, SPELL_FLAMED, true);
events.CancelEvent(EVENT_BUFFET);
return;
@@ -717,10 +724,10 @@ class npc_expedition_commander : public CreatureScript
Phase = 5;
break;
case 5:
- if (Creature* Razorscale = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_RAZORSCALE)))
+ if (Creature* razorscale = instance->GetCreature(BOSS_RAZORSCALE))
{
- Razorscale->AI()->DoAction(ACTION_EVENT_START);
- me->SetInCombatWith(Razorscale);
+ razorscale->AI()->DoAction(ACTION_EVENT_START);
+ me->SetInCombatWith(razorscale);
}
if (Creature* firstEngineer = ObjectAccessor::GetCreature(*me, Engineer[0]))
firstEngineer->AI()->Talk(SAY_AGGRO_1);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
index 0366f1534ba..c6fc0925bf6 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp
@@ -176,11 +176,6 @@ class boss_xt002 : public CreatureScript
public:
boss_xt002() : CreatureScript("boss_xt002") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<boss_xt002_AI>(creature);
- }
-
struct boss_xt002_AI : public BossAI
{
boss_xt002_AI(Creature* creature) : BossAI(creature, BOSS_XT002)
@@ -441,6 +436,12 @@ class boss_xt002 : public CreatureScript
uint8 _heartExposed;
uint32 _transferHealth;
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetUlduarAI<boss_xt002_AI>(creature);
+ }
+
};
/*-------------------------------------------------------
@@ -460,7 +461,7 @@ class npc_xt002_heart : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002)))
+ if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
{
xt002->AI()->SetData(DATA_TRANSFERED_HEALTH, me->GetHealth());
xt002->AI()->DoAction(ACTION_ENTER_HARD_MODE);
@@ -487,11 +488,6 @@ class npc_scrapbot : public CreatureScript
public:
npc_scrapbot() : CreatureScript("npc_scrapbot") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<npc_scrapbotAI>(creature);
- }
-
struct npc_scrapbotAI : public ScriptedAI
{
npc_scrapbotAI(Creature* creature) : ScriptedAI(creature)
@@ -511,15 +507,15 @@ class npc_scrapbot : public CreatureScript
Initialize();
- if (Creature* pXT002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002)))
- me->GetMotionMaster()->MoveFollow(pXT002, 0.0f, 0.0f);
+ if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
+ me->GetMotionMaster()->MoveFollow(xt002, 0.0f, 0.0f);
}
void UpdateAI(uint32 diff) override
{
if (_rangeCheckTimer <= diff)
{
- if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002)))
+ if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
{
if (me->IsWithinMeleeRange(xt002))
{
@@ -538,6 +534,12 @@ class npc_scrapbot : public CreatureScript
InstanceScript* _instance;
uint32 _rangeCheckTimer;
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetUlduarAI<npc_scrapbotAI>(creature);
+ }
+
};
/*-------------------------------------------------------
@@ -550,11 +552,6 @@ class npc_pummeller : public CreatureScript
public:
npc_pummeller() : CreatureScript("npc_pummeller") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<npc_pummellerAI>(creature);
- }
-
struct npc_pummellerAI : public ScriptedAI
{
npc_pummellerAI(Creature* creature) : ScriptedAI(creature)
@@ -574,7 +571,7 @@ class npc_pummeller : public CreatureScript
{
Initialize();
- if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002)))
+ if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
{
Position pos = xt002->GetPosition();
me->GetMotionMaster()->MovePoint(0, pos);
@@ -622,6 +619,12 @@ class npc_pummeller : public CreatureScript
uint32 _trampleTimer;
uint32 _uppercutTimer;
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetUlduarAI<npc_pummellerAI>(creature);
+ }
+
};
/*-------------------------------------------------------
@@ -657,11 +660,6 @@ class npc_boombot : public CreatureScript
public:
npc_boombot() : CreatureScript("npc_boombot") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<npc_boombotAI>(creature);
- }
-
struct npc_boombotAI : public ScriptedAI
{
npc_boombotAI(Creature* creature) : ScriptedAI(creature)
@@ -682,8 +680,8 @@ class npc_boombot : public CreatureScript
DoCast(SPELL_AURA_BOOMBOT); // For achievement
/// @todo proper waypoints?
- if (Creature* pXT002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002)))
- me->GetMotionMaster()->MoveFollow(pXT002, 0.0f, 0.0f);
+ if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
+ me->GetMotionMaster()->MoveFollow(xt002, 0.0f, 0.0f);
}
void DamageTaken(Unit* /*who*/, uint32& damage) override
@@ -723,6 +721,12 @@ class npc_boombot : public CreatureScript
InstanceScript* _instance;
bool _boomed;
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetUlduarAI<npc_boombotAI>(creature);
+ }
+
};
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 6c1101d433d..79214b5b0e1 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
@@ -511,7 +511,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
void EnterCombat(Unit* /*who*/) override
{
- if (Creature* sara = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SARA)))
+ if (Creature* sara = instance->GetCreature(DATA_SARA))
sara->SetInCombatWith(me);
for (uint8 i = DATA_FREYA_YS; i <= DATA_MIMIRON_YS; ++i)
@@ -531,7 +531,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
void JustDied(Unit* killer) override
{
// don't despawn Yogg-Saron's corpse, remove him from SummonList!
- if (Creature* yogg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_YOGG_SARON)))
+ if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON))
summons.Despawn(yogg);
BossAI::JustDied(killer);
@@ -556,7 +556,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
instance->SetBossState(BOSS_YOGG_SARON, IN_PROGRESS);
break;
case EVENT_EXTINGUISH_ALL_LIFE:
- if (Creature* yogg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_YOGG_SARON)))
+ if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON))
{
yogg->AI()->Talk(EMOTE_YOGG_SARON_EXTINGUISH_ALL_LIFE, me);
yogg->CastSpell((Unit*)NULL, SPELL_EXTINGUISH_ALL_LIFE, true);
@@ -584,7 +584,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
break;
case EVENT_ILLUSION:
{
- if (Creature* yogg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_YOGG_SARON)))
+ if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON))
{
yogg->AI()->Talk(EMOTE_YOGG_SARON_MADNESS);
yogg->AI()->Talk(SAY_YOGG_SARON_MADNESS);
@@ -597,7 +597,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
uint8 illusion = urand(CHAMBER_ILLUSION, STORMWIND_ILLUSION);
instance->SetData(DATA_ILLUSION, illusion);
- if (Creature* brain = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BRAIN_OF_YOGG_SARON)))
+ if (Creature* brain = instance->GetCreature(DATA_BRAIN_OF_YOGG_SARON))
brain->AI()->DoAction(ACTION_INDUCE_MADNESS);
events.ScheduleEvent(EVENT_ILLUSION, 80000, 0, PHASE_TWO); // wowwiki says 80 secs, wowhead says something about 90 secs
break;
@@ -623,7 +623,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
case ACTION_PHASE_TWO:
events.SetPhase(PHASE_TWO);
me->SummonCreature(NPC_YOGG_SARON, YoggSaronSpawnPos);
- if (Creature* brain = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BRAIN_OF_YOGG_SARON)))
+ if (Creature* brain = instance->GetCreature(DATA_BRAIN_OF_YOGG_SARON))
brain->SetInCombatWithZone();
events.ScheduleEvent(EVENT_SUMMON_CORRUPTOR_TENTACLE, 1, EVENT_GROUP_SUMMON_TENTACLES, PHASE_TWO);
events.ScheduleEvent(EVENT_SUMMON_CONSTRICTOR_TENTACLE, 1, EVENT_GROUP_SUMMON_TENTACLES, PHASE_TWO);
@@ -722,7 +722,7 @@ class boss_sara : public CreatureScript
if (_events.IsInPhase(PHASE_ONE))
{
- if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
+ if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->DoAction(ACTION_PHASE_TRANSFORM);
Talk(SAY_SARA_TRANSFORM_1);
@@ -818,14 +818,14 @@ class boss_sara : public CreatureScript
Talk(SAY_SARA_TRANSFORM_4);
DoCast(me, SPELL_FULL_HEAL);
me->setFaction(16);
- if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
+ if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->DoAction(ACTION_PHASE_TWO);
if (Creature* mimiron = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_MIMIRON_YS)))
mimiron->AI()->DoAction(ACTION_PHASE_TWO);
break;
case EVENT_TRANSFORM_4:
DoCast(me, SPELL_PHASE_2_TRANSFORM);
- if (Creature* yogg = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_YOGG_SARON)))
+ if (Creature* yogg = _instance->GetCreature(BOSS_YOGG_SARON))
DoCast(yogg, SPELL_RIDE_YOGG_SARON_VEHICLE);
DoCast(me, SPELL_SHADOWY_BARRIER_SARA);
_events.SetPhase(PHASE_TWO);
@@ -881,7 +881,7 @@ class boss_sara : public CreatureScript
break;
}
- if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
+ if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->JustSummoned(summon);
}
@@ -948,7 +948,7 @@ class boss_yogg_saron : public CreatureScript
{
Talk(SAY_YOGG_SARON_DEATH);
- if (Creature* creature = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
+ if (Creature* creature = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
me->Kill(creature);
for (uint8 i = DATA_SARA; i <= DATA_BRAIN_OF_YOGG_SARON; ++i)
@@ -1065,11 +1065,11 @@ class boss_brain_of_yogg_saron : public CreatureScript
DoCast(me, SPELL_BRAIN_HURT_VISUAL, true);
me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE));
- if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
+ if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->DoAction(ACTION_PHASE_THREE);
- if (Creature* sara = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SARA)))
+ if (Creature* sara = _instance->GetCreature(DATA_SARA))
sara->AI()->DoAction(ACTION_PHASE_THREE);
- if (Creature* yogg = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_YOGG_SARON)))
+ if (Creature* yogg = _instance->GetCreature(BOSS_YOGG_SARON))
yogg->AI()->DoAction(ACTION_PHASE_THREE);
for (uint8 i = DATA_THORIM_YS; i <= DATA_MIMIRON_YS; ++i)
@@ -1107,7 +1107,7 @@ class boss_brain_of_yogg_saron : public CreatureScript
DoCastAOE(SPELL_SHATTERED_ILLUSION, true);
_instance->HandleGameObject(_instance->GetGuidData(GO_BRAIN_ROOM_DOOR_1 + illusion), true);
- if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
+ if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->DoAction(ACTION_TOGGLE_SHATTERED_ILLUSION);
}
break;
@@ -1214,7 +1214,7 @@ class npc_guardian_of_yogg_saron : public CreatureScript
return;
// Guardian can be summoned both by Voice of Yogg-Saron and by Ominous Cloud
- if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
+ if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->JustSummoned(me);
}
@@ -1317,7 +1317,7 @@ class npc_constrictor_tentacle : public CreatureScript
void IsSummonedBy(Unit* /*summoner*/) override
{
- if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
+ if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->JustSummoned(me);
}
@@ -1408,7 +1408,7 @@ class npc_influence_tentacle : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
- if (Creature* brain = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_BRAIN_OF_YOGG_SARON)))
+ if (Creature* brain = _instance->GetCreature(DATA_BRAIN_OF_YOGG_SARON))
brain->AI()->DoAction(ACTION_TENTACLE_KILLED);
}
@@ -2779,7 +2779,7 @@ class spell_yogg_saron_induce_madness : public SpellScriptLoader // 64059
GetCaster()->CastSpell((Unit*)NULL, SPELL_SHATTERED_ILLUSION_REMOVE);
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
- if (Creature* voice = ObjectAccessor::GetCreature(*GetCaster(), instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
+ if (Creature* voice = instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->DoAction(ACTION_TOGGLE_SHATTERED_ILLUSION);
}
@@ -3053,7 +3053,9 @@ class spell_yogg_saron_in_the_maws_of_the_old_god : public SpellScriptLoader
SpellCastResult CheckRequirement()
{
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
- if (Creature* yogg = ObjectAccessor::GetCreature(*GetCaster(), instance->GetGuidData(BOSS_YOGG_SARON)))
+ {
+ if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON))
+ {
if (yogg->FindCurrentSpellBySpellId(SPELL_DEAFENING_ROAR))
{
if (GetCaster()->GetDistance(yogg) > 20.0f)
@@ -3061,6 +3063,8 @@ class spell_yogg_saron_in_the_maws_of_the_old_god : public SpellScriptLoader
else
return SPELL_CAST_OK;
}
+ }
+ }
return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW;
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
index 3683e9f5ea3..d34a7ac516c 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
@@ -79,6 +79,28 @@ MinionData const minionData[] =
ObjectData const creatureData[] =
{
+ { NPC_FLAME_LEVIATHAN, BOSS_LEVIATHAN },
+ { NPC_IGNIS, BOSS_IGNIS },
+ { NPC_RAZORSCALE, BOSS_RAZORSCALE },
+ { NPC_XT002, BOSS_XT002 },
+ { NPC_KOLOGARN, BOSS_KOLOGARN },
+ { NPC_AURIAYA, BOSS_AURIAYA },
+ { NPC_HODIR, BOSS_HODIR },
+ { NPC_THORIM, BOSS_THORIM },
+ { NPC_FREYA, BOSS_FREYA },
+ { NPC_MIMIRON, BOSS_MIMIRON },
+ { NPC_VEZAX, BOSS_VEZAX },
+ { NPC_YOGG_SARON, BOSS_YOGG_SARON },
+ { NPC_ALGALON, BOSS_ALGALON },
+
+ { NPC_EXPEDITION_COMMANDER, DATA_EXPEDITION_COMMANDER },
+ { NPC_RAZORSCALE_CONTROLLER, DATA_RAZORSCALE_CONTROL },
+ { NPC_COMPUTER, DATA_COMPUTER },
+ { NPC_WORLD_TRIGGER_MIMIRON, DATA_MIMIRON_WORLD_TRIGGER },
+ { NPC_VOICE_OF_YOGG_SARON, DATA_VOICE_OF_YOGG_SARON },
+ { NPC_SARA, DATA_SARA },
+ { NPC_BRAIN_OF_YOGG_SARON, DATA_BRAIN_OF_YOGG_SARON },
+ { NPC_BRANN_BRONZBEARD_ALG, DATA_BRANN_BRONZEBEARD_ALG },
{ NPC_BRANN_BRONZEBEARD_INTRO, DATA_BRANN_BRONZEBEARD_INTRO },
{ NPC_LORE_KEEPER_OF_NORGANNON, DATA_LORE_KEEPER_OF_NORGANNON },
{ NPC_HIGH_EXPLORER_DELLORAH, DATA_DELLORAH },
@@ -86,6 +108,19 @@ ObjectData const creatureData[] =
{ 0, 0, }
};
+ObjectData const objectData[] =
+{
+ { GO_MIMIRON_ELEVATOR, DATA_MIMIRON_ELEVATOR },
+ { GO_MIMIRON_BUTTON, DATA_MIMIRON_BUTTON },
+ { GO_DOODAD_UL_UNIVERSEGLOBE01, DATA_UNIVERSE_GLOBE },
+ { GO_DOODAD_UL_ULDUAR_TRAPDOOR_03, DATA_ALGALON_TRAPDOOR },
+ { GO_RAZOR_HARPOON_1, GO_RAZOR_HARPOON_1 },
+ { GO_RAZOR_HARPOON_2, GO_RAZOR_HARPOON_2 },
+ { GO_RAZOR_HARPOON_3, GO_RAZOR_HARPOON_3 },
+ { GO_RAZOR_HARPOON_4, GO_RAZOR_HARPOON_4 },
+ { 0, 0 }
+};
+
class instance_ulduar : public InstanceMapScript
{
public:
@@ -100,7 +135,7 @@ class instance_ulduar : public InstanceMapScript
LoadBossBoundaries(boundaries);
LoadDoorData(doorData);
LoadMinionData(minionData);
- LoadObjectData(creatureData, nullptr);
+ LoadObjectData(creatureData, objectData);
_algalonTimer = 61;
_maxArmorItemLevel = 0;
@@ -124,51 +159,29 @@ class instance_ulduar : public InstanceMapScript
}
// Creatures
- ObjectGuid LeviathanGUID;
GuidVector LeviathanVehicleGUIDs;
- ObjectGuid IgnisGUID;
- ObjectGuid RazorscaleGUID;
- ObjectGuid RazorscaleController;
- ObjectGuid ExpeditionCommanderGUID;
- ObjectGuid XT002GUID;
+
ObjectGuid XTToyPileGUIDs[4];
ObjectGuid AssemblyGUIDs[3];
- ObjectGuid KologarnGUID;
- ObjectGuid AuriayaGUID;
- ObjectGuid HodirGUID;
- ObjectGuid ThorimGUID;
- ObjectGuid FreyaGUID;
+
ObjectGuid ElderGUIDs[3];
ObjectGuid FreyaAchieveTriggerGUID;
- ObjectGuid MimironGUID;
ObjectGuid MimironVehicleGUIDs[3];
- ObjectGuid MimironComputerGUID;
- ObjectGuid MimironWorldTriggerGUID;
- ObjectGuid VezaxGUID;
- ObjectGuid YoggSaronGUID;
- ObjectGuid VoiceOfYoggSaronGUID;
- ObjectGuid SaraGUID;
- ObjectGuid BrainOfYoggSaronGUID;
ObjectGuid KeeperGUIDs[4];
- ObjectGuid AlgalonGUID;
- ObjectGuid BrannBronzebeardAlgGUID;
// GameObjects
ObjectGuid LeviathanGateGUID;
- ObjectGuid RazorHarpoonGUIDs[4];
ObjectGuid KologarnChestGUID;
ObjectGuid KologarnBridgeGUID;
ObjectGuid ThorimChestGUID;
ObjectGuid HodirRareCacheGUID;
ObjectGuid HodirChestGUID;
ObjectGuid MimironTramGUID;
- ObjectGuid MimironElevatorGUID;
- ObjectGuid MimironButtonGUID;
+
ObjectGuid BrainRoomDoorGUIDs[3];
ObjectGuid AlgalonSigilDoorGUID[3];
ObjectGuid AlgalonFloorGUID[2];
- ObjectGuid AlgalonUniverseGUID;
- ObjectGuid AlgalonTrapdoorGUID;
+
ObjectGuid GiftOfTheObserverGUID;
// Miscellaneous
@@ -239,6 +252,8 @@ class instance_ulduar : public InstanceMapScript
void OnCreatureCreate(Creature* creature) override
{
+ InstanceScript::OnCreatureCreate(creature);
+
if (!TeamInInstance)
{
Map::PlayerList const& Players = instance->GetPlayers();
@@ -249,40 +264,22 @@ class instance_ulduar : public InstanceMapScript
switch (creature->GetEntry())
{
- case NPC_LEVIATHAN:
- LeviathanGUID = creature->GetGUID();
- break;
case NPC_SALVAGED_DEMOLISHER:
case NPC_SALVAGED_SIEGE_ENGINE:
case NPC_SALVAGED_CHOPPER:
LeviathanVehicleGUIDs.push_back(creature->GetGUID());
break;
- case NPC_IGNIS:
- IgnisGUID = creature->GetGUID();
- break;
-
- // Razorscale
- case NPC_RAZORSCALE:
- RazorscaleGUID = creature->GetGUID();
- break;
- case NPC_RAZORSCALE_CONTROLLER:
- RazorscaleController = creature->GetGUID();
- break;
- case NPC_EXPEDITION_COMMANDER:
- ExpeditionCommanderGUID = creature->GetGUID();
- break;
// XT-002 Deconstructor
- case NPC_XT002:
- XT002GUID = creature->GetGUID();
- break;
case NPC_XT_TOY_PILE:
for (uint8 i = 0; i < 4; ++i)
+ {
if (!XTToyPileGUIDs[i])
{
XTToyPileGUIDs[i] = creature->GetGUID();
break;
}
+ }
break;
// Assembly of Iron
@@ -299,17 +296,7 @@ class instance_ulduar : public InstanceMapScript
AddMinion(creature, true);
break;
- case NPC_KOLOGARN:
- KologarnGUID = creature->GetGUID();
- break;
- case NPC_AURIAYA:
- AuriayaGUID = creature->GetGUID();
- break;
-
// Hodir
- case NPC_HODIR:
- HodirGUID = creature->GetGUID();
- break;
case NPC_EIVI_NIGHTFEATHER:
if (TeamInInstance == HORDE)
creature->UpdateEntry(NPC_TOR_GREYCLOUD);
@@ -343,14 +330,7 @@ class instance_ulduar : public InstanceMapScript
creature->UpdateEntry(NPC_BATTLE_PRIEST_GINA);
break;
- case NPC_THORIM:
- ThorimGUID = creature->GetGUID();
- break;
-
// Freya
- case NPC_FREYA:
- FreyaGUID = creature->GetGUID();
- break;
case NPC_IRONBRANCH:
ElderGUIDs[0] = creature->GetGUID();
if (GetBossState(BOSS_FREYA) == DONE)
@@ -371,9 +351,6 @@ class instance_ulduar : public InstanceMapScript
break;
// Mimiron
- case NPC_MIMIRON:
- MimironGUID = creature->GetGUID();
- break;
case NPC_LEVIATHAN_MKII:
MimironVehicleGUIDs[0] = creature->GetGUID();
break;
@@ -383,30 +360,8 @@ class instance_ulduar : public InstanceMapScript
case NPC_AERIAL_COMMAND_UNIT:
MimironVehicleGUIDs[2] = creature->GetGUID();
break;
- case NPC_COMPUTER:
- MimironComputerGUID = creature->GetGUID();
- break;
- case NPC_WORLD_TRIGGER_MIMIRON:
- MimironWorldTriggerGUID = creature->GetGUID();
- break;
-
- case NPC_VEZAX:
- VezaxGUID = creature->GetGUID();
- break;
// Yogg-Saron
- case NPC_YOGG_SARON:
- YoggSaronGUID = creature->GetGUID();
- break;
- case NPC_VOICE_OF_YOGG_SARON:
- VoiceOfYoggSaronGUID = creature->GetGUID();
- break;
- case NPC_BRAIN_OF_YOGG_SARON:
- BrainOfYoggSaronGUID = creature->GetGUID();
- break;
- case NPC_SARA:
- SaraGUID = creature->GetGUID();
- break;
case NPC_FREYA_YS:
KeeperGUIDs[0] = creature->GetGUID();
_summonYSKeeper[0] = false;
@@ -436,12 +391,6 @@ class instance_ulduar : public InstanceMapScript
break;
// Algalon
- case NPC_ALGALON:
- AlgalonGUID = creature->GetGUID();
- break;
- case NPC_BRANN_BRONZBEARD_ALG:
- BrannBronzebeardAlgGUID = creature->GetGUID();
- break;
//! These creatures are summoned by something else than Algalon
//! but need to be controlled/despawned by him - so they need to be
//! registered in his summon list
@@ -449,7 +398,7 @@ class instance_ulduar : public InstanceMapScript
case NPC_ALGALON_STALKER_ASTEROID_TARGET_01:
case NPC_ALGALON_STALKER_ASTEROID_TARGET_02:
case NPC_UNLEASHED_DARK_MATTER:
- if (Creature* algalon = instance->GetCreature(AlgalonGUID))
+ if (Creature* algalon = GetCreature(BOSS_ALGALON))
algalon->AI()->JustSummoned(creature);
break;
}
@@ -459,34 +408,34 @@ class instance_ulduar : public InstanceMapScript
void OnCreatureRemove(Creature* creature) override
{
+ InstanceScript::OnCreatureRemove(creature);
+
switch (creature->GetEntry())
{
case NPC_XT_TOY_PILE:
for (uint8 i = 0; i < 4; ++i)
+ {
if (XTToyPileGUIDs[i] == creature->GetGUID())
{
XTToyPileGUIDs[i].Clear();
break;
}
+ }
break;
case NPC_STEELBREAKER:
case NPC_MOLGEIM:
case NPC_BRUNDIR:
AddMinion(creature, false);
break;
- case NPC_BRANN_BRONZBEARD_ALG:
- if (BrannBronzebeardAlgGUID == creature->GetGUID())
- BrannBronzebeardAlgGUID.Clear();
- break;
default:
break;
}
-
- InstanceScript::OnCreatureRemove(creature);
}
void OnGameObjectCreate(GameObject* gameObject) override
{
+ InstanceScript::OnGameObjectCreate(gameObject);
+
switch (gameObject->GetEntry())
{
case GO_KOLOGARN_CHEST_HERO:
@@ -513,43 +462,11 @@ class instance_ulduar : public InstanceMapScript
case GO_MIMIRON_TRAM:
MimironTramGUID = gameObject->GetGUID();
break;
- case GO_MIMIRON_ELEVATOR:
- MimironElevatorGUID = gameObject->GetGUID();
- break;
- case GO_MIMIRON_BUTTON:
- MimironButtonGUID = gameObject->GetGUID();
- break;
case GO_LEVIATHAN_GATE:
LeviathanGateGUID = gameObject->GetGUID();
if (GetBossState(BOSS_LEVIATHAN) == DONE)
gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
break;
- case GO_LEVIATHAN_DOOR:
- case GO_XT_002_DOOR:
- case GO_IRON_COUNCIL_DOOR:
- case GO_ARCHIVUM_DOOR:
- case GO_HODIR_ENTRANCE:
- case GO_HODIR_DOOR:
- case GO_HODIR_ICE_DOOR:
- case GO_MIMIRON_DOOR_1:
- case GO_MIMIRON_DOOR_2:
- case GO_MIMIRON_DOOR_3:
- case GO_VEZAX_DOOR:
- case GO_YOGG_SARON_DOOR:
- AddDoor(gameObject, true);
- break;
- case GO_RAZOR_HARPOON_1:
- RazorHarpoonGUIDs[0] = gameObject->GetGUID();
- break;
- case GO_RAZOR_HARPOON_2:
- RazorHarpoonGUIDs[1] = gameObject->GetGUID();
- break;
- case GO_RAZOR_HARPOON_3:
- RazorHarpoonGUIDs[2] = gameObject->GetGUID();
- break;
- case GO_RAZOR_HARPOON_4:
- RazorHarpoonGUIDs[3] = gameObject->GetGUID();
- break;
case GO_MOLE_MACHINE:
if (GetBossState(BOSS_RAZORSCALE) == IN_PROGRESS)
gameObject->SetGoState(GO_STATE_ACTIVE);
@@ -580,23 +497,12 @@ class instance_ulduar : public InstanceMapScript
break;
case GO_DOODAD_UL_SIGILDOOR_03:
AlgalonSigilDoorGUID[2] = gameObject->GetGUID();
- AddDoor(gameObject, true);
break;
case GO_DOODAD_UL_UNIVERSEFLOOR_01:
AlgalonFloorGUID[0] = gameObject->GetGUID();
- AddDoor(gameObject, true);
break;
case GO_DOODAD_UL_UNIVERSEFLOOR_02:
AlgalonFloorGUID[1] = gameObject->GetGUID();
- AddDoor(gameObject, true);
- break;
- case GO_DOODAD_UL_UNIVERSEGLOBE01:
- AlgalonUniverseGUID = gameObject->GetGUID();
- AddDoor(gameObject, true);
- break;
- case GO_DOODAD_UL_ULDUAR_TRAPDOOR_03:
- AlgalonTrapdoorGUID = gameObject->GetGUID();
- AddDoor(gameObject, true);
break;
case GO_GIFT_OF_THE_OBSERVER_10:
case GO_GIFT_OF_THE_OBSERVER_25:
@@ -607,40 +513,12 @@ class instance_ulduar : public InstanceMapScript
}
}
- void OnGameObjectRemove(GameObject* gameObject) override
- {
- switch (gameObject->GetEntry())
- {
- case GO_LEVIATHAN_DOOR:
- case GO_XT_002_DOOR:
- case GO_IRON_COUNCIL_DOOR:
- case GO_ARCHIVUM_DOOR:
- case GO_HODIR_ENTRANCE:
- case GO_HODIR_DOOR:
- case GO_HODIR_ICE_DOOR:
- case GO_MIMIRON_DOOR_1:
- case GO_MIMIRON_DOOR_2:
- case GO_MIMIRON_DOOR_3:
- case GO_VEZAX_DOOR:
- case GO_YOGG_SARON_DOOR:
- case GO_DOODAD_UL_SIGILDOOR_03:
- case GO_DOODAD_UL_UNIVERSEFLOOR_01:
- case GO_DOODAD_UL_UNIVERSEFLOOR_02:
- case GO_DOODAD_UL_UNIVERSEGLOBE01:
- case GO_DOODAD_UL_ULDUAR_TRAPDOOR_03:
- AddDoor(gameObject, false);
- break;
- default:
- break;
- }
- }
-
void OnUnitDeath(Unit* unit) override
{
// Champion/Conqueror of Ulduar
if (unit->GetTypeId() == TYPEID_PLAYER)
{
- for (uint8 i = 0; i < BOSS_ALGALON; i++)
+ for (uint8 i = 0; i < BOSS_ALGALON; ++i)
{
if (GetBossState(i) == IN_PROGRESS)
{
@@ -686,27 +564,27 @@ class instance_ulduar : public InstanceMapScript
void ProcessEvent(WorldObject* /*gameObject*/, uint32 eventId) override
{
- // Flame Leviathan's Tower Event triggers
- Creature* FlameLeviathan = instance->GetCreature(LeviathanGUID);
-
switch (eventId)
{
+ // Flame Leviathan's Tower Event triggers
case EVENT_TOWER_OF_STORM_DESTROYED:
- if (FlameLeviathan && FlameLeviathan->IsAlive())
- FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_STORM_DESTROYED);
+ if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN))
+ flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_STORM_DESTROYED);
break;
case EVENT_TOWER_OF_FROST_DESTROYED:
- if (FlameLeviathan && FlameLeviathan->IsAlive())
- FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FROST_DESTROYED);
+ if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN))
+ flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FROST_DESTROYED);
break;
case EVENT_TOWER_OF_FLAMES_DESTROYED:
- if (FlameLeviathan && FlameLeviathan->IsAlive())
- FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FLAMES_DESTROYED);
+ if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN))
+ flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FLAMES_DESTROYED);
break;
case EVENT_TOWER_OF_LIFE_DESTROYED:
- if (FlameLeviathan && FlameLeviathan->IsAlive())
- FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_LIFE_DESTROYED);
+ if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN))
+ flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_LIFE_DESTROYED);
break;
+
+ // Yogg-Saron Event triggers
case EVENT_ACTIVATE_SANITY_WELL:
if (Creature* freya = instance->GetCreature(KeeperGUIDs[0]))
freya->AI()->DoAction(4/*ACTION_SANITY_WELLS*/);
@@ -851,9 +729,9 @@ class instance_ulduar : public InstanceMapScript
HodirRareCacheData = data;
if (!HodirRareCacheData)
{
- if (Creature* Hodir = instance->GetCreature(HodirGUID))
+ if (Creature* hodir = GetCreature(BOSS_HODIR))
if (GameObject* gameObject = instance->GetGameObject(HodirRareCacheGUID))
- Hodir->RemoveGameObject(gameObject, false);
+ hodir->RemoveGameObject(gameObject, false);
}
break;
case DATA_UNBROKEN:
@@ -888,30 +766,7 @@ class instance_ulduar : public InstanceMapScript
{
switch (data)
{
- case BOSS_LEVIATHAN:
- return LeviathanGUID;
- case BOSS_IGNIS:
- return IgnisGUID;
-
- // Razorscale
- case BOSS_RAZORSCALE:
- return RazorscaleGUID;
- case DATA_RAZORSCALE_CONTROL:
- return RazorscaleController;
- case DATA_EXPEDITION_COMMANDER:
- return ExpeditionCommanderGUID;
- case GO_RAZOR_HARPOON_1:
- return RazorHarpoonGUIDs[0];
- case GO_RAZOR_HARPOON_2:
- return RazorHarpoonGUIDs[1];
- case GO_RAZOR_HARPOON_3:
- return RazorHarpoonGUIDs[2];
- case GO_RAZOR_HARPOON_4:
- return RazorHarpoonGUIDs[3];
-
// XT-002 Deconstructor
- case BOSS_XT002:
- return XT002GUID;
case DATA_TOY_PILE_0:
case DATA_TOY_PILE_1:
case DATA_TOY_PILE_2:
@@ -926,18 +781,7 @@ class instance_ulduar : public InstanceMapScript
case DATA_BRUNDIR:
return AssemblyGUIDs[2];
- case BOSS_KOLOGARN:
- return KologarnGUID;
- case BOSS_AURIAYA:
- return AuriayaGUID;
- case BOSS_HODIR:
- return HodirGUID;
- case BOSS_THORIM:
- return ThorimGUID;
-
// Freya
- case BOSS_FREYA:
- return FreyaGUID;
case BOSS_BRIGHTLEAF:
return ElderGUIDs[0];
case BOSS_IRONBRANCH:
@@ -946,35 +790,14 @@ class instance_ulduar : public InstanceMapScript
return ElderGUIDs[2];
// Mimiron
- case BOSS_MIMIRON:
- return MimironGUID;
case DATA_LEVIATHAN_MK_II:
return MimironVehicleGUIDs[0];
case DATA_VX_001:
return MimironVehicleGUIDs[1];
case DATA_AERIAL_COMMAND_UNIT:
return MimironVehicleGUIDs[2];
- case DATA_COMPUTER:
- return MimironComputerGUID;
- case DATA_MIMIRON_WORLD_TRIGGER:
- return MimironWorldTriggerGUID;
- case DATA_MIMIRON_ELEVATOR:
- return MimironElevatorGUID;
- case DATA_MIMIRON_BUTTON:
- return MimironButtonGUID;
-
- case BOSS_VEZAX:
- return VezaxGUID;
// Yogg-Saron
- case BOSS_YOGG_SARON:
- return YoggSaronGUID;
- case DATA_VOICE_OF_YOGG_SARON:
- return VoiceOfYoggSaronGUID;
- case DATA_BRAIN_OF_YOGG_SARON:
- return BrainOfYoggSaronGUID;
- case DATA_SARA:
- return SaraGUID;
case GO_BRAIN_ROOM_DOOR_1:
return BrainRoomDoorGUIDs[0];
case GO_BRAIN_ROOM_DOOR_2:
@@ -991,8 +814,6 @@ class instance_ulduar : public InstanceMapScript
return KeeperGUIDs[3];
// Algalon
- case BOSS_ALGALON:
- return AlgalonGUID;
case DATA_SIGILDOOR_01:
return AlgalonSigilDoorGUID[0];
case DATA_SIGILDOOR_02:
@@ -1003,15 +824,9 @@ class instance_ulduar : public InstanceMapScript
return AlgalonFloorGUID[0];
case DATA_UNIVERSE_FLOOR_02:
return AlgalonFloorGUID[1];
- case DATA_UNIVERSE_GLOBE:
- return AlgalonUniverseGUID;
- case DATA_ALGALON_TRAPDOOR:
- return AlgalonTrapdoorGUID;
- case DATA_BRANN_BRONZEBEARD_ALG:
- return BrannBronzebeardAlgGUID;
}
- return ObjectGuid::Empty;
+ return InstanceScript::GetGuidData(data);
}
uint32 GetData(uint32 type) const override
@@ -1179,7 +994,7 @@ class instance_ulduar : public InstanceMapScript
{
DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 0);
_events.CancelEvent(EVENT_UPDATE_ALGALON_TIMER);
- if (Creature* algalon = instance->GetCreature(AlgalonGUID))
+ if (Creature* algalon = GetCreature(BOSS_ALGALON))
algalon->AI()->DoAction(EVENT_DESPAWN_ALGALON);
}
break;
@@ -1200,8 +1015,8 @@ class instance_ulduar : public InstanceMapScript
}
break;
case EVENT_LEVIATHAN_BREAK_DOOR:
- if (Creature* Leviathan = instance->GetCreature(LeviathanGUID))
- Leviathan->AI()->DoAction(ACTION_MOVE_TO_CENTER_POSITION);
+ if (Creature* leviathan = GetCreature(BOSS_LEVIATHAN))
+ leviathan->AI()->DoAction(ACTION_MOVE_TO_CENTER_POSITION);
if (GameObject* gameObject = instance->GetGameObject(LeviathanGateGUID))
gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
break;
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
index 74adb6d1d13..a26b699b396 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
@@ -279,7 +279,7 @@ enum UlduarGameObjects
GO_GIFT_OF_THE_OBSERVER_25 = 194822,
};
-enum EventIds
+enum UUEventIds
{
EVENT_TOWER_OF_STORM_DESTROYED = 21031,
EVENT_TOWER_OF_FROST_DESTROYED = 21032,
diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp
index e7f17a1033b..0e42a431d93 100644
--- a/src/server/scripts/Northrend/zone_zuldrak.cpp
+++ b/src/server/scripts/Northrend/zone_zuldrak.cpp
@@ -58,7 +58,7 @@ public:
me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
float x, y, z;
- me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 0.1f);
+ me->GetClosePoint(x, y, z, me->GetCombatReach() / 3, 0.1f);
if (Creature* summon = me->SummonCreature(NPC_RAGECLAW, x, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 1000))
{
@@ -183,7 +183,7 @@ public:
void Reset() override
{
float x, y, z;
- me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 25.0f);
+ me->GetClosePoint(x, y, z, me->GetCombatReach() / 3, 25.0f);
me->GetMotionMaster()->MovePoint(0, x, y, z);
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
index e2e8a6bbef7..50fbd937d53 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp
@@ -351,6 +351,8 @@ public:
Talk(SUFF_SAY_RECAP);
me->AttackStop();
me->SetReactState(REACT_PASSIVE);
+ events.Reset();
+ me->InterruptNonMeleeSpells(false);
me->GetMotionMaster()->MovePoint(RELIQUARY_DESPAWN_WAYPOINT, DespawnPoint);
}
}
@@ -479,6 +481,8 @@ public:
Talk(DESI_SAY_RECAP);
me->AttackStop();
me->SetReactState(REACT_PASSIVE);
+ events.Reset();
+ me->InterruptNonMeleeSpells(false);
me->GetMotionMaster()->MovePoint(RELIQUARY_DESPAWN_WAYPOINT, DespawnPoint);
}
}
@@ -743,7 +747,7 @@ class spell_reliquary_of_souls_aura_of_desire : public SpellScriptLoader
caster->CastCustomSpell(SPELL_AURA_OF_DESIRE_DAMAGE, SPELLVALUE_BASE_POINT0, bp, caster, true, nullptr, aurEff);
}
- void UpdateAmount(AuraEffect const* /*effect*/)
+ void UpdateAmount(AuraEffect* /*aurEff*/)
{
if (AuraEffect* effect = GetAura()->GetEffect(EFFECT_1))
effect->ChangeAmount(effect->GetAmount() - 5);
@@ -752,7 +756,7 @@ class spell_reliquary_of_souls_aura_of_desire : public SpellScriptLoader
void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_reliquary_of_souls_aura_of_desire_AuraScript::OnProcSpell, EFFECT_0, SPELL_AURA_MOD_HEALING_PCT);
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_reliquary_of_souls_aura_of_desire_AuraScript::UpdateAmount, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
+ OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_reliquary_of_souls_aura_of_desire_AuraScript::UpdateAmount, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
index 515039e987b..8cd4bbc9cf0 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp
@@ -55,7 +55,7 @@ ObjectData const gameObjectData[] =
{ 0, 0 } //END
};
-static DataTypes const collapseObjectDatas[] =
+static MLDataTypes const collapseObjectDatas[] =
{
DATA_MAGTHERIDON_COLUMN_0,
DATA_MAGTHERIDON_COLUMN_1,
@@ -116,7 +116,7 @@ class instance_magtheridons_lair : public InstanceMapScript
HandleGameObject(ObjectGuid::Empty, value == ACTION_ENABLE ? true : false, hall);
break;
case DATA_COLLAPSE_2:
- for (DataTypes data : collapseObjectDatas)
+ for (MLDataTypes data : collapseObjectDatas)
if (GameObject* go = GetGameObject(data))
HandleGameObject(ObjectGuid::Empty, value == ACTION_ENABLE ? true : false, go);
break;
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h
index 4e46ecd98e7..87190d446b0 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h
@@ -25,7 +25,7 @@
uint32 const EncounterCount = 1;
-enum DataTypes
+enum MLDataTypes
{
DATA_MAGTHERIDON = 0,
DATA_WORLD_TRIGGER = 1,
@@ -42,13 +42,13 @@ enum DataTypes
DATA_CALL_WARDERS = 12
};
-enum Actions
+enum MLActions
{
ACTION_ENABLE = 1,
ACTION_DISABLE = 2
};
-enum CreatureIds
+enum MLCreatureIds
{
NPC_MAGTHERIDON = 17257,
NPC_ABYSSAL = 17454,
@@ -61,7 +61,7 @@ enum CreatureIds
NPC_HELLFIRE_WARDER = 18829
};
-enum GameObjectIds
+enum MLGameObjectIds
{
GO_MAGTHERIDON_DOOR = 183847,
GO_MANTICRON_CUBE = 181713,
diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
index a482096ce7c..a8bd85023a2 100644
--- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
+++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
@@ -525,7 +525,7 @@ public:
Tapped = true;
float x, y, z;
- caster->GetClosePoint(x, y, z, me->GetObjectSize());
+ caster->GetClosePoint(x, y, z, me->GetCombatReach());
me->SetWalk(false);
me->GetMotionMaster()->MovePoint(1, x, y, z);
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 7adb0d0d4cf..eb800765b7c 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -4207,42 +4207,6 @@ class spell_gen_pony_mount_check : public SpellScriptLoader
}
};
-class spell_gen_shroud_of_death : public SpellScriptLoader
-{
-public:
- spell_gen_shroud_of_death() : SpellScriptLoader("spell_gen_shroud_of_death") { }
-
- class spell_gen_shroud_of_death_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_gen_shroud_of_death_AuraScript);
-
- void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- PreventDefaultAction();
- GetUnitOwner()->m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
- GetUnitOwner()->m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
- }
-
- void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- PreventDefaultAction();
- GetUnitOwner()->m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE);
- GetUnitOwner()->m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE);
- }
-
- void Register() override
- {
- OnEffectApply += AuraEffectApplyFn(spell_gen_shroud_of_death_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- OnEffectRemove += AuraEffectRemoveFn(spell_gen_shroud_of_death_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_gen_shroud_of_death_AuraScript();
- }
-};
-
// 169869 - Transformation Sickness
class spell_gen_decimatus_transformation_sickness : public SpellScriptLoader
{
@@ -4568,7 +4532,6 @@ void AddSC_generic_spell_scripts()
new spell_gen_landmine_knockback_achievement();
new spell_gen_clear_debuffs();
new spell_gen_pony_mount_check();
- new spell_gen_shroud_of_death();
new spell_gen_decimatus_transformation_sickness();
new spell_gen_anetheron_summon_towering_infernal();
new spell_gen_mark_of_kazrogal_hellfire();
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index 9836318f066..7461e52e1b4 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -1100,6 +1100,46 @@ class spell_item_gnomish_death_ray : public SpellScriptLoader
}
};
+// Item 10721: Gnomish Harm Prevention Belt
+// 13234 - Harm Prevention Belt
+enum HarmPreventionBelt
+{
+ SPELL_FORCEFIELD_COLLAPSE = 13235
+};
+
+class spell_item_harm_prevention_belt : public SpellScriptLoader
+{
+public:
+ spell_item_harm_prevention_belt() : SpellScriptLoader("spell_item_harm_prevention_belt") { }
+
+ class spell_item_harm_prevention_belt_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_item_harm_prevention_belt_AuraScript);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_FORCEFIELD_COLLAPSE))
+ return false;
+ return true;
+ }
+
+ void HandleProc(ProcEventInfo& /*eventInfo*/)
+ {
+ GetTarget()->CastSpell((Unit*)nullptr, SPELL_FORCEFIELD_COLLAPSE, true);
+ }
+
+ void Register() override
+ {
+ OnProc += AuraProcFn(spell_item_harm_prevention_belt_AuraScript::HandleProc);
+ }
+ };
+
+ AuraScript* GetAuraScript() const override
+ {
+ return new spell_item_harm_prevention_belt_AuraScript();
+ }
+};
+
enum Heartpierce
{
SPELL_INVIGORATION_MANA = 71881,
@@ -4839,6 +4879,7 @@ void AddSC_item_spell_scripts()
new spell_item_flask_of_the_north();
new spell_item_frozen_shadoweave();
new spell_item_gnomish_death_ray();
+ new spell_item_harm_prevention_belt();
new spell_item_heartpierce<SPELL_INVIGORATION_ENERGY, SPELL_INVIGORATION_MANA, SPELL_INVIGORATION_RAGE, SPELL_INVIGORATION_RP>("spell_item_heartpierce");
new spell_item_heartpierce<SPELL_INVIGORATION_ENERGY_HERO, SPELL_INVIGORATION_MANA_HERO, SPELL_INVIGORATION_RAGE_HERO, SPELL_INVIGORATION_RP_HERO>("spell_item_heartpierce_hero");
new spell_item_crystal_spire_of_karabor();
diff --git a/src/server/scripts/Spells/spell_pet.cpp b/src/server/scripts/Spells/spell_pet.cpp
index c0b570cbf46..7aaba87a2da 100644
--- a/src/server/scripts/Spells/spell_pet.cpp
+++ b/src/server/scripts/Spells/spell_pet.cpp
@@ -314,7 +314,7 @@ public:
{
if (AuraEffect* /* aurEff */ect = owner->GetAuraEffect(56246, EFFECT_0))
{
- float base_attPower = pet->GetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE) * pet->GetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_PCT);
+ float base_attPower = pet->GetFlatModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE) * pet->GetPctModifierValue(UNIT_MOD_ATTACK_POWER, BASE_PCT);
amount += CalculatePct(amount+base_attPower, /* aurEff */ect->GetAmount());
}
}
diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp
index 98814128a34..c0e1fdaae33 100644
--- a/src/server/scripts/World/go_scripts.cpp
+++ b/src/server/scripts/World/go_scripts.cpp
@@ -361,7 +361,7 @@ public:
uint32 BirdEntry = 0;
float fX, fY, fZ;
- go->GetClosePoint(fX, fY, fZ, go->GetObjectSize(), INTERACTION_DISTANCE);
+ go->GetClosePoint(fX, fY, fZ, go->GetCombatReach(), INTERACTION_DISTANCE);
switch (go->GetEntry())
{
diff --git a/src/server/scripts/World/item_scripts.cpp b/src/server/scripts/World/item_scripts.cpp
index 55b7d571d56..628ca0edcae 100644
--- a/src/server/scripts/World/item_scripts.cpp
+++ b/src/server/scripts/World/item_scripts.cpp
@@ -243,7 +243,7 @@ public:
return true;
float x, y, z;
- go->GetClosePoint(x, y, z, go->GetObjectSize() / 3, 7.0f);
+ go->GetClosePoint(x, y, z, go->GetCombatReach() / 3, 7.0f);
go->SummonGameObject(GO_HIGH_QUALITY_FUR, *go, QuaternionData::fromEulerAnglesZYX(go->GetOrientation(), 0.0f, 0.0f), 1);
if (TempSummon* summon = player->SummonCreature(NPC_NESINGWARY_TRAPPER, x, y, z, go->GetOrientation(), TEMPSUMMON_DEAD_DESPAWN, 1000))
{