diff options
author | Ovah <dreadkiller@gmx.de> | 2019-01-28 16:14:58 -0300 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-11-23 00:39:13 +0100 |
commit | 3027458338a4b3679b4a938d00be2c1bbbd56786 (patch) | |
tree | bfa76a70bca5ed64f089518b7d955a20acda6e5a /src | |
parent | 3847d7b2778c0799b8942f2ed70ee40771d28533 (diff) |
Scripts/Magister Terrace: Update InstanceScript and more fixes
Cherrypicked of https://github.com/Ovahlord/TrinityCore/commits/4.3.4
(cherry picked from commit 1b346485e40ddee958c116579d93bcff063021a5)
Diffstat (limited to 'src')
5 files changed, 77 insertions, 84 deletions
diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index 0cfae13f8ee..90bc62d3b12 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -258,7 +258,7 @@ struct boss_felblood_kaelthas : public BossAI switch (summon->GetEntry()) { case NPC_ARCANE_SPHERE: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 70.0f, true, true)) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 70.0f, true)) summon->GetMotionMaster()->MoveFollow(target, 0.0f, 0.0f); break; case NPC_FLAME_STRIKE: @@ -307,7 +307,7 @@ struct boss_felblood_kaelthas : public BossAI break; case EVENT_FLAME_STRIKE: Talk(SAY_FLAME_STRIKE); - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true, 0)) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) DoCast(target, SPELL_FLAME_STRIKE); events.Repeat(44s); break; @@ -319,7 +319,7 @@ struct boss_felblood_kaelthas : public BossAI events.Repeat(1min); break; case EVENT_PYROBLAST: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true, 0)) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 40.0f, true)) DoCast(target, SPELL_PYROBLAST); break; case EVENT_PHOENIX: diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp index e9e5de4cfc8..5a0b5a6395f 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp @@ -160,7 +160,7 @@ public: //this mean she at some point evaded void JustReachedHome() override { - instance->SetBossState(DATA_DELRISSA, FAIL); + instance->SetBossState(DATA_PRIESTESS_DELRISSA, FAIL); } void JustEngagedWith(Unit* who) override @@ -172,7 +172,7 @@ public: if (!pAdd->IsEngaged()) AddThreat(who, 0.0f, pAdd); - instance->SetBossState(DATA_DELRISSA, IN_PROGRESS); + instance->SetBossState(DATA_PRIESTESS_DELRISSA, IN_PROGRESS); } void InitializeLackeys() @@ -240,7 +240,7 @@ public: Talk(SAY_DEATH); if (instance->GetData(DATA_DELRISSA_DEATH_COUNT) == MAX_ACTIVE_LACKEY) - instance->SetBossState(DATA_DELRISSA, DONE); + instance->SetBossState(DATA_PRIESTESS_DELRISSA, DONE); else me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE); } @@ -378,10 +378,10 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI AcquireGUIDs(); // in case she is not alive and Reset was for some reason called, respawn her (most likely party wipe after killing her) - if (Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_DELRISSA))) + if (Creature* delrissa = instance->GetCreature(DATA_PRIESTESS_DELRISSA)) { - if (!pDelrissa->IsAlive()) - pDelrissa->Respawn(); + if (!delrissa->IsAlive()) + delrissa->Respawn(); } } @@ -395,21 +395,21 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI if (!pAdd->IsEngaged() && pAdd != me) AddThreat(who, 0.0f, pAdd); - if (Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_DELRISSA))) - if (pDelrissa->IsAlive() && !pDelrissa->IsEngaged()) - AddThreat(who, 0.0f, pDelrissa); + if (Creature* delrissa = instance->GetCreature(DATA_PRIESTESS_DELRISSA)) + if (delrissa->IsAlive() && !delrissa->IsEngaged()) + AddThreat(who, 0.0f, delrissa); } void JustDied(Unit* /*killer*/) override { - Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_DELRISSA)); + Creature* delrissa = instance->GetCreature(DATA_PRIESTESS_DELRISSA); uint32 uiLackeyDeathCount = instance->GetData(DATA_DELRISSA_DEATH_COUNT); - if (!pDelrissa) + if (!delrissa) return; //should delrissa really yell if dead? - pDelrissa->AI()->Talk(LackeyDeath[uiLackeyDeathCount].id); + delrissa->AI()->Talk(LackeyDeath[uiLackeyDeathCount].id); instance->SetData(DATA_DELRISSA_DEATH_COUNT, SPECIAL); @@ -419,27 +419,27 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI if (uiLackeyDeathCount == MAX_ACTIVE_LACKEY) { //time to make her lootable and complete event if she died before lackeys - if (!pDelrissa->IsAlive()) + if (!delrissa->IsAlive()) { - pDelrissa->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE); + delrissa->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE); - instance->SetBossState(DATA_DELRISSA, DONE); + instance->SetBossState(DATA_PRIESTESS_DELRISSA, DONE); } } } void KilledUnit(Unit* victim) override { - if (Creature* Delrissa = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_DELRISSA))) - Delrissa->AI()->KilledUnit(victim); + if (Creature* delrissa = instance->GetCreature(DATA_PRIESTESS_DELRISSA)) + delrissa->AI()->KilledUnit(victim); } void AcquireGUIDs() { - if (Creature* Delrissa = (ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_DELRISSA)))) + if (Creature* delrissa = instance->GetCreature(DATA_PRIESTESS_DELRISSA)) { for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i) - m_auiLackeyGUIDs[i] = ENSURE_AI(boss_priestess_delrissa::boss_priestess_delrissaAI, Delrissa->AI())->m_auiLackeyGUID[i]; + m_auiLackeyGUIDs[i] = ENSURE_AI(boss_priestess_delrissa::boss_priestess_delrissaAI, delrissa->AI())->m_auiLackeyGUID[i]; } } diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp index 5e1bdfc522f..3d622233ef0 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp @@ -73,7 +73,7 @@ class boss_selin_fireheart : public CreatureScript struct boss_selin_fireheartAI : public BossAI { - boss_selin_fireheartAI(Creature* creature) : BossAI(creature, DATA_SELIN), _scheduledEvents(false) { } + boss_selin_fireheartAI(Creature* creature) : BossAI(creature, DATA_SELIN_FIREHEART), _scheduledEvents(false) { } void Reset() override { @@ -267,9 +267,9 @@ class npc_fel_crystal : public CreatureScript { if (InstanceScript* instance = me->GetInstanceScript()) { - Creature* Selin = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SELIN)); - if (Selin && Selin->IsAlive()) - Selin->AI()->DoAction(ACTION_SWITCH_PHASE); + Creature* selin = instance->GetCreature(DATA_SELIN_FIREHEART); + if (selin && selin->IsAlive()) + selin->AI()->DoAction(ACTION_SWITCH_PHASE); } } }; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp index bcd8bff620c..a5f42c2e12f 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp @@ -36,18 +36,29 @@ ObjectData const creatureData[] = { + { BOSS_SELIN_FIREHEART, DATA_SELIN_FIREHEART }, + { BOSS_VEXALLUS, DATA_VEXALLUS }, + { BOSS_PRIESTESS_DELRISSA, DATA_PRIESTESS_DELRISSA }, { BOSS_KAELTHAS_SUNSTRIDER, DATA_KAELTHAS_SUNSTRIDER }, + { NPC_KALECGOS, DATA_KALECGOS }, + { NPC_HUMAN_KALECGOS, DATA_KALECGOS }, + { 0, 0 } // END +}; + +ObjectData const gameObjectData[] = +{ + { GO_ESCAPE_ORB, DATA_ESCAPE_ORB }, { 0, 0 } // END }; DoorData const doorData[] = { - { GO_SELIN_DOOR, DATA_SELIN, DOOR_TYPE_PASSAGE }, - { GO_SELIN_ENCOUNTER_DOOR, DATA_SELIN, DOOR_TYPE_ROOM }, - { GO_VEXALLUS_DOOR, DATA_VEXALLUS, DOOR_TYPE_PASSAGE }, - { GO_DELRISSA_DOOR, DATA_DELRISSA, DOOR_TYPE_PASSAGE }, - { GO_ASYLUM_DOOR, DATA_KAELTHAS_SUNSTRIDER, DOOR_TYPE_ROOM }, - { 0, 0, DOOR_TYPE_ROOM } // END + { GO_SUNWELL_RAID_GATE_2 , DATA_SELIN_FIREHEART, DOOR_TYPE_PASSAGE }, + { GO_ASSEMBLY_CHAMBER_DOOR, DATA_SELIN_FIREHEART, DOOR_TYPE_ROOM }, + { GO_SUNWELL_RAID_GATE_5, DATA_VEXALLUS, DOOR_TYPE_PASSAGE }, + { GO_SUNWELL_RAID_GATE_4, DATA_PRIESTESS_DELRISSA, DOOR_TYPE_PASSAGE }, + { GO_ASYLUM_DOOR, DATA_KAELTHAS_SUNSTRIDER, DOOR_TYPE_ROOM }, + { 0, 0, DOOR_TYPE_ROOM } // END }; Position const KalecgosSpawnPos = { 164.3747f, -397.1197f, 2.151798f, 1.66219f }; @@ -64,7 +75,7 @@ class instance_magisters_terrace : public InstanceMapScript { SetHeaders(DataHeader); SetBossNumber(EncounterCount); - LoadObjectData(creatureData, nullptr); + LoadObjectData(creatureData, gameObjectData); LoadDoorData(doorData); Initialize(); } @@ -114,16 +125,6 @@ class instance_magisters_terrace : public InstanceMapScript switch (creature->GetEntry()) { - case NPC_SELIN: - SelinGUID = creature->GetGUID(); - break; - case NPC_DELRISSA: - DelrissaGUID = creature->GetGUID(); - break; - case NPC_KALECGOS: - case NPC_HUMAN_KALECGOS: - KalecgosGUID = creature->GetGUID(); - break; case NPC_COILSKAR_WITCH: case NPC_SUNBLADE_WARLOCK: case NPC_SUNBLADE_MAGE_GUARD: @@ -178,28 +179,34 @@ class instance_magisters_terrace : public InstanceMapScript case GO_KAEL_STATUE_2: _statueGUIDs.push_back(go->GetGUID()); break; + case GO_ESCAPE_ORB: + if (GetBossState(DATA_KAELTHAS_SUNSTRIDER) == DONE) + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); + break; default: break; } } - void ProcessEvent(WorldObject* obj, uint32 eventId) override + void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) override { if (eventId == EVENT_SPAWN_KALECGOS) - if (!ObjectAccessor::GetCreature(*obj, KalecgosGUID) && Events.Empty()) - Events.ScheduleEvent(EVENT_SPAWN_KALECGOS, Minutes(1)); + if (!GetCreature(DATA_KALECGOS) && _events.Empty()) + _events.ScheduleEvent(EVENT_SPAWN_KALECGOS, 1min); } void Update(uint32 diff) override { - Events.Update(diff); + _events.Update(diff); - if (Events.ExecuteEvent() == EVENT_SPAWN_KALECGOS) + if (_events.ExecuteEvent() == EVENT_SPAWN_KALECGOS) + { if (Creature* kalecgos = instance->SummonCreature(NPC_KALECGOS, KalecgosSpawnPos)) { kalecgos->GetMotionMaster()->MovePath(PATH_KALECGOS_FLIGHT, false); kalecgos->AI()->Talk(SAY_KALECGOS_SPAWN); } + } } bool SetBossState(uint32 type, EncounterState state) override @@ -209,7 +216,7 @@ class instance_magisters_terrace : public InstanceMapScript switch (type) { - case DATA_DELRISSA: + case DATA_PRIESTESS_DELRISSA: if (state == IN_PROGRESS) _delrissaDeathCount = 0; break; @@ -219,6 +226,9 @@ class instance_magisters_terrace : public InstanceMapScript for (ObjectGuid guid : _statueGUIDs) HandleGameObject(guid, false); } + else if (state == DONE) + if (GameObject* orb = GetGameObject(DATA_ESCAPE_ORB)) + orb->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; default: break; @@ -226,22 +236,6 @@ class instance_magisters_terrace : public InstanceMapScript return true; } - ObjectGuid GetGuidData(uint32 type) const override - { - switch (type) - { - case DATA_SELIN: - return SelinGUID; - case DATA_DELRISSA: - return DelrissaGUID; - case DATA_ESCAPE_ORB: - return EscapeOrbGUID; - default: - break; - } - return ObjectGuid::Empty; - } - void WriteSaveDataMore(std::ostringstream& data) override { data << _kaelthasIntroState; @@ -253,11 +247,7 @@ class instance_magisters_terrace : public InstanceMapScript } protected: - EventMap Events; - ObjectGuid SelinGUID; - ObjectGuid DelrissaGUID; - ObjectGuid EscapeOrbGUID; - ObjectGuid KalecgosGUID; + EventMap _events; GuidVector _statueGUIDs; GuidSet _kaelthasPreTrashGUIDs; uint8 _delrissaDeathCount; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h index 9bfada78af2..0c6868ced35 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h @@ -28,9 +28,9 @@ uint32 const EncounterCount = 4; enum MTDataTypes { // Encounter states - DATA_SELIN, + DATA_SELIN_FIREHEART = 0, DATA_VEXALLUS, - DATA_DELRISSA, + DATA_PRIESTESS_DELRISSA, DATA_KAELTHAS_SUNSTRIDER, // Encounter related @@ -40,6 +40,7 @@ enum MTDataTypes // Additional data DATA_KAELTHAS_INTRO_STATE, + DATA_KALECGOS, DATA_ESCAPE_ORB }; @@ -47,6 +48,9 @@ enum MTCreatureIds { // Bosses BOSS_KAELTHAS_SUNSTRIDER = 24664, + BOSS_SELIN_FIREHEART = 24723, + BOSS_VEXALLUS = 24744, + BOSS_PRIESTESS_DELRISSA = 24560, // Encounter related /*Kael'thas Sunstrider*/ @@ -55,31 +59,30 @@ enum MTCreatureIds NPC_PHOENIX = 24674, NPC_PHOENIX_EGG = 24675, - NPC_SELIN = 24723, - NPC_DELRISSA = 24560, + /*Selin Fireheart*/ NPC_FEL_CRYSTAL = 24722, - NPC_KALECGOS = 24844, // Event related + NPC_KALECGOS = 24844, NPC_HUMAN_KALECGOS = 24848, NPC_COILSKAR_WITCH = 24696, NPC_SUNBLADE_WARLOCK = 24686, NPC_SUNBLADE_MAGE_GUARD = 24683, NPC_SISTER_OF_TORMENT = 24697, NPC_ETHEREUM_SMUGGLER = 24698, - NPC_SUNBLADE_BLOOD_KNIGHT = 24684, + NPC_SUNBLADE_BLOOD_KNIGHT = 24684 }; enum MTGameObjectIds { - GO_VEXALLUS_DOOR = 187896, - GO_SELIN_DOOR = 187979, - GO_SELIN_ENCOUNTER_DOOR = 188065, - GO_DELRISSA_DOOR = 187770, - GO_ASYLUM_DOOR = 188064, - GO_KAEL_STATUE_1 = 188165, - GO_KAEL_STATUE_2 = 188166, - GO_ESCAPE_ORB = 188173 + GO_ASSEMBLY_CHAMBER_DOOR = 187979, + GO_SUNWELL_RAID_GATE_2 = 188065, + GO_SUNWELL_RAID_GATE_4 = 187770, + GO_SUNWELL_RAID_GATE_5 = 187896, + GO_ASYLUM_DOOR = 188064, + GO_KAEL_STATUE_1 = 188165, + GO_KAEL_STATUE_2 = 188166, + GO_ESCAPE_ORB = 188173 }; enum MTInstanceEventIds |