From d6e8697efe2ba95a4f9304b347fa283c43303fed Mon Sep 17 00:00:00 2001 From: Noxies Date: Thu, 2 Dec 2021 15:48:49 +0100 Subject: [PATCH] fix(Scripts/BFD): Fix problem with Aku'mai event being skippable after crash (#9463) --- .../BlackfathomDeeps/blackfathom_deeps.h | 5 +++-- .../instance_blackfathom_deeps.cpp | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h index 39a3b9f18..c30314752 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h @@ -25,8 +25,9 @@ enum Data TYPE_FIRE2 = 2, TYPE_FIRE3 = 3, TYPE_FIRE4 = 4, - TYPE_AKU_MAI = 5, - MAX_ENCOUNTERS = 6 + TYPE_AKU_MAI_EVENT = 5, + TYPE_AKU_MAI = 6, + MAX_ENCOUNTERS = 7 }; enum CreatureIds diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp index 9c43e3ea6..1b7e4df1e 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp @@ -52,8 +52,13 @@ public: unit->GetEntry() == NPC_MURKSHALLOW_SOFTSHELL || unit->GetEntry() == NPC_AKU_MAI_SNAPJAW)) { if (--_requiredDeaths == 0) - if (_encounters[TYPE_FIRE1] == DONE && _encounters[TYPE_FIRE2] == DONE && _encounters[TYPE_FIRE3] == DONE && _encounters[TYPE_FIRE4] == DONE) + { + if (IsFireEventDone()) + { HandleGameObject(_akumaiPortalGUID, true); + _encounters[TYPE_AKU_MAI_EVENT] = DONE; + } + } } } @@ -65,7 +70,7 @@ public: case GO_FIRE_OF_AKU_MAI_2: case GO_FIRE_OF_AKU_MAI_3: case GO_FIRE_OF_AKU_MAI_4: - if (_encounters[gameobject->GetEntry() - GO_FIRE_OF_AKU_MAI_1 + 1] == DONE) + if (_encounters[TYPE_AKU_MAI_EVENT] == DONE) { gameobject->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); gameobject->SetGoState(GO_STATE_ACTIVE); @@ -80,7 +85,7 @@ public: gameobject->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); break; case GO_AKU_MAI_DOOR: - if (_encounters[TYPE_FIRE1] == DONE && _encounters[TYPE_FIRE2] == DONE && _encounters[TYPE_FIRE3] == DONE && _encounters[TYPE_FIRE4] == DONE) + if (IsFireEventDone() && _encounters[TYPE_AKU_MAI_EVENT] == DONE) HandleGameObject(ObjectGuid::Empty, true, gameobject); _akumaiPortalGUID = gameobject->GetGUID(); break; @@ -97,6 +102,7 @@ public: case TYPE_FIRE3: case TYPE_FIRE4: case TYPE_AKU_MAI: + case TYPE_AKU_MAI_EVENT: _encounters[type] = data; break; } @@ -131,6 +137,11 @@ public: } } + bool IsFireEventDone() + { + return _encounters[TYPE_FIRE1] == DONE && _encounters[TYPE_FIRE2] == DONE && _encounters[TYPE_FIRE3] == DONE && _encounters[TYPE_FIRE4] == DONE; + } + private: uint32 _encounters[MAX_ENCOUNTERS]; ObjectGuid _akumaiPortalGUID;