From 022a90cff4944c8248634641eacf9fcb4b5f3093 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 27 Aug 2022 14:46:32 +0200 Subject: [PATCH] fix(Scripts/TempleOfAhnQiraj): Added missing doors. (#12734) Fixes #12712 --- .../rev_1660471315394863600.sql | 6 +++ .../Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp | 2 + .../TempleOfAhnQiraj/boss_twinemperors.cpp | 7 +++ .../instance_temple_of_ahnqiraj.cpp | 51 +++++++++++++++++++ .../TempleOfAhnQiraj/temple_of_ahnqiraj.h | 7 +++ 5 files changed, 73 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1660471315394863600.sql diff --git a/data/sql/updates/pending_db_world/rev_1660471315394863600.sql b/data/sql/updates/pending_db_world/rev_1660471315394863600.sql new file mode 100644 index 000000000..a8ea93a32 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1660471315394863600.sql @@ -0,0 +1,6 @@ +-- +DELETE FROM `gameobject` WHERE `id` IN (180634,180635,180636); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`) VALUES +(6680,180634,531,0,0,1,1,-8929.61,1344.38,-104.211,-2.43473,0,0,-0.938191,0.346119,604800,100,0,'',0), +(6683,180635,531,0,0,1,1,-9016.36,1330.68,-104.211,2.80125,0,0,0.985556,0.169351,604800,100,1,'',0), +(6686,180636,531,0,0,1,1,-8429.59,2048.81,153.309,-2.76634,0,0,-0.98245,0.186527,604800,100,1,'',0); diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp index 4cce25cdf..e01f1dc05 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp @@ -112,6 +112,8 @@ struct boss_skeram : public BossAI { _JustDied(); Talk(SAY_DEATH); + + instance->HandleGameObject(instance->GetGuidData(AQ40_DOOR_3), true); } else me->RemoveCorpse(); diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp index 1b5922a36..e496ef8a3 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -91,6 +91,8 @@ struct boss_twinemperorsAI : public BossAI me->ClearUnitState(UNIT_STATE_STUNNED); DontYellWhenDead = false; EnrageTimer = 15 * 60000; + + instance->HandleGameObject(instance->GetGuidData(AQ40_DOOR_1), true); } Creature* GetOtherBoss() @@ -127,6 +129,9 @@ struct boss_twinemperorsAI : public BossAI } if (!DontYellWhenDead) // I hope AI is not threaded DoPlaySoundToSet(me, IAmVeklor() ? SOUND_VL_DEATH : SOUND_VN_DEATH); + + instance->HandleGameObject(instance->GetGuidData(AQ40_DOOR_1), true); + instance->HandleGameObject(instance->GetGuidData(AQ40_DOOR_2), true); } void KilledUnit(Unit* /*victim*/) override @@ -150,6 +155,8 @@ struct boss_twinemperorsAI : public BossAI otherAI->DoZoneInCombat(); } } + + instance->HandleGameObject(instance->GetGuidData(AQ40_DOOR_1), false); } void SpellHit(Unit* caster, SpellInfo const* entry) override diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp index afa17a879..5c989a169 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp @@ -42,6 +42,7 @@ public: instance_temple_of_ahnqiraj_InstanceMapScript(Map* map) : InstanceScript(map) { LoadObjectData(creatureData, nullptr); + doorGUIDs.fill(ObjectGuid::Empty); SetBossNumber(MAX_BOSS_NUMBER); } @@ -55,6 +56,8 @@ public: ObjectGuid VeklorGUID; ObjectGuid VeknilashGUID; ObjectGuid ViscidusGUID; + std::array doorGUIDs; + uint32 BugTrioDeathCount; uint32 CthunPhase; @@ -73,6 +76,10 @@ public: { case NPC_SKERAM: SkeramGUID = creature->GetGUID(); + if (!creature->IsAlive()) + { + HandleGameObject(doorGUIDs[2], true); + } break; case NPC_VEM: VemGUID = creature->GetGUID(); @@ -85,6 +92,10 @@ public: break; case NPC_VEKLOR: VeklorGUID = creature->GetGUID(); + if (!creature->IsAlive()) + { + HandleGameObject(doorGUIDs[1], true); + } break; case NPC_VEKNILASH: VeknilashGUID = creature->GetGUID(); @@ -101,6 +112,40 @@ public: InstanceScript::OnCreatureCreate(creature); } + void OnGameObjectCreate(GameObject* go) override + { + switch (go->GetEntry()) + { + case AQ40_DOOR_1: + doorGUIDs[0] = go->GetGUID(); + break; + case AQ40_DOOR_2: + doorGUIDs[1] = go->GetGUID(); + if (Creature* veklor = instance->GetCreature(VeklorGUID)) + { + if (!veklor->IsAlive()) + { + HandleGameObject(go->GetGUID(), true); + } + } + break; + case AQ40_DOOR_3: + doorGUIDs[2] = go->GetGUID(); + if (Creature* skeram = instance->GetCreature(SkeramGUID)) + { + if (!skeram->IsAlive()) + { + HandleGameObject(go->GetGUID(), true); + } + } + break; + default: + break; + } + + InstanceScript::OnGameObjectCreate(go); + } + uint32 GetData(uint32 type) const override { switch (type) @@ -142,6 +187,12 @@ public: return VeknilashGUID; case DATA_VISCIDUS: return ViscidusGUID; + case AQ40_DOOR_1: + return doorGUIDs[0]; + case AQ40_DOOR_2: + return doorGUIDs[1]; + case AQ40_DOOR_3: + return doorGUIDs[2]; } return ObjectGuid::Empty; } diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h index 5b097f344..c81b09033 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h @@ -79,6 +79,13 @@ enum Creatures NPC_SARTURA = 15516 }; +enum ObjectsAQ40 +{ + AQ40_DOOR_1 = 180634, + AQ40_DOOR_2 = 180635, + AQ40_DOOR_3 = 180636 +}; + template inline AI* GetTempleOfAhnQirajAI(T* obj) {