diff options
-rw-r--r-- | src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp | 15 | ||||
-rw-r--r-- | src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp | 38 |
2 files changed, 41 insertions, 12 deletions
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp index 7e53256b5e1..893660267d1 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp @@ -58,6 +58,13 @@ class boss_broggok : public CreatureScript void Reset() override { _Reset(); + + if (GameObject * lever = instance->GetGameObject(DATA_BROGGOK_LEVER)) + { + lever->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE | GO_FLAG_IN_USE); + lever->SetGoState(GO_STATE_READY); + } + DoAction(ACTION_RESET_BROGGOK); } @@ -144,12 +151,14 @@ class go_broggok_lever : public GameObjectScript if (instance->GetBossState(DATA_BROGGOK) != DONE && instance->GetBossState(DATA_BROGGOK) != IN_PROGRESS) { instance->SetBossState(DATA_BROGGOK, IN_PROGRESS); - if (Creature* broggok = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BROGGOK))) + if (Creature* broggok = instance->GetCreature(DATA_BROGGOK)) broggok->AI()->DoAction(ACTION_PREPARE_BROGGOK); } - me->UseDoorOrButton(); - return false; + me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE | GO_FLAG_IN_USE); + me->SetGoState(GO_STATE_ACTIVE); + + return true; } }; diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp index 7ea19e66880..4bff42aa157 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp @@ -33,6 +33,18 @@ DoorData const doorData[] = { 0, 0, DOOR_TYPE_ROOM } // END }; +ObjectData const creatureData[] = +{ + { NPC_BROGGOK, DATA_BROGGOK }, + { 0, 0 } // END +}; + +ObjectData const gameObjectData[] = +{ + { GO_BROGGOK_LEVER, DATA_BROGGOK_LEVER }, + { 0, 0 } //END +}; + class instance_blood_furnace : public InstanceMapScript { public: @@ -45,6 +57,7 @@ class instance_blood_furnace : public InstanceMapScript SetHeaders(DataHeader); SetBossNumber(EncounterCount); LoadDoorData(doorData); + LoadObjectData(creatureData, gameObjectData); PrisonerCounter5 = 0; PrisonerCounter6 = 0; @@ -54,6 +67,8 @@ class instance_blood_furnace : public InstanceMapScript void OnCreatureCreate(Creature* creature) override { + InstanceScript::OnCreatureCreate(creature); + switch (creature->GetEntry()) { case NPC_THE_MAKER: @@ -153,8 +168,6 @@ class instance_blood_furnace : public InstanceMapScript break; case NOT_STARTED: ResetPrisons(); - if (GameObject* lever = instance->GetGameObject(BroggokLeverGUID)) - lever->Respawn(); break; default: break; @@ -169,28 +182,35 @@ class instance_blood_furnace : public InstanceMapScript void ResetPrisons() { - PrisonerCounter5 = PrisonersCell5.size(); ResetPrisoners(PrisonersCell5); + PrisonerCounter5 = PrisonersCell5.size(); HandleGameObject(PrisonCellGUIDs[DATA_PRISON_CELL5 - DATA_PRISON_CELL1], false); - PrisonerCounter6 = PrisonersCell6.size(); ResetPrisoners(PrisonersCell6); + PrisonerCounter6 = PrisonersCell6.size(); HandleGameObject(PrisonCellGUIDs[DATA_PRISON_CELL6 - DATA_PRISON_CELL1], false); - PrisonerCounter7 = PrisonersCell7.size(); ResetPrisoners(PrisonersCell7); + PrisonerCounter7 = PrisonersCell7.size(); HandleGameObject(PrisonCellGUIDs[DATA_PRISON_CELL7 - DATA_PRISON_CELL1], false); - PrisonerCounter8 = PrisonersCell8.size(); ResetPrisoners(PrisonersCell8); + PrisonerCounter8 = PrisonersCell8.size(); HandleGameObject(PrisonCellGUIDs[DATA_PRISON_CELL8 - DATA_PRISON_CELL1], false); } - void ResetPrisoners(GuidSet const& prisoners) + void ResetPrisoners(GuidSet& prisoners) { - for (GuidSet::const_iterator i = prisoners.begin(); i != prisoners.end(); ++i) - if (Creature* prisoner = instance->GetCreature(*i)) + for (GuidSet::const_iterator i = prisoners.begin(); i != prisoners.end();) + if (Creature * prisoner = instance->GetCreature(*i)) + { + if (!prisoner->IsAlive()) + i = prisoners.erase(i); + else + ++i; + ResetPrisoner(prisoner); + } } void ResetPrisoner(Creature* prisoner) |