fix(Scripts/BFD): Fix problem with Aku'mai event being skippable after crash (#9463)

This commit is contained in:
Noxies
2021-12-02 15:48:49 +01:00
committed by GitHub
parent 51adbffae4
commit d6e8697efe
2 changed files with 17 additions and 5 deletions

View File

@@ -25,8 +25,9 @@ enum Data
TYPE_FIRE2 = 2, TYPE_FIRE2 = 2,
TYPE_FIRE3 = 3, TYPE_FIRE3 = 3,
TYPE_FIRE4 = 4, TYPE_FIRE4 = 4,
TYPE_AKU_MAI = 5, TYPE_AKU_MAI_EVENT = 5,
MAX_ENCOUNTERS = 6 TYPE_AKU_MAI = 6,
MAX_ENCOUNTERS = 7
}; };
enum CreatureIds enum CreatureIds

View File

@@ -52,8 +52,13 @@ public:
unit->GetEntry() == NPC_MURKSHALLOW_SOFTSHELL || unit->GetEntry() == NPC_AKU_MAI_SNAPJAW)) unit->GetEntry() == NPC_MURKSHALLOW_SOFTSHELL || unit->GetEntry() == NPC_AKU_MAI_SNAPJAW))
{ {
if (--_requiredDeaths == 0) 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); 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_2:
case GO_FIRE_OF_AKU_MAI_3: case GO_FIRE_OF_AKU_MAI_3:
case GO_FIRE_OF_AKU_MAI_4: 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->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
gameobject->SetGoState(GO_STATE_ACTIVE); gameobject->SetGoState(GO_STATE_ACTIVE);
@@ -80,7 +85,7 @@ public:
gameobject->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); gameobject->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
break; break;
case GO_AKU_MAI_DOOR: 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); HandleGameObject(ObjectGuid::Empty, true, gameobject);
_akumaiPortalGUID = gameobject->GetGUID(); _akumaiPortalGUID = gameobject->GetGUID();
break; break;
@@ -97,6 +102,7 @@ public:
case TYPE_FIRE3: case TYPE_FIRE3:
case TYPE_FIRE4: case TYPE_FIRE4:
case TYPE_AKU_MAI: case TYPE_AKU_MAI:
case TYPE_AKU_MAI_EVENT:
_encounters[type] = data; _encounters[type] = data;
break; 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: private:
uint32 _encounters[MAX_ENCOUNTERS]; uint32 _encounters[MAX_ENCOUNTERS];
ObjectGuid _akumaiPortalGUID; ObjectGuid _akumaiPortalGUID;