void instance_blood_furnace::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_THE_MAKER_EVENT: if (uiData == IN_PROGRESS) DoUseDoorOrButton(GO_DOOR_MAKER_FRONT); if (uiData == FAIL) DoUseDoorOrButton(GO_DOOR_MAKER_FRONT); if (uiData == DONE) { DoUseDoorOrButton(GO_DOOR_MAKER_FRONT); DoUseDoorOrButton(GO_DOOR_MAKER_REAR); } m_auiEncounter[uiType] = uiData; break; case TYPE_BROGGOK_EVENT: if (m_auiEncounter[uiType] == uiData) return; // Combat door; the exit door is opened in event DoUseDoorOrButton(GO_DOOR_BROGGOK_FRONT); if (uiData == IN_PROGRESS) { if (m_uiBroggokEventPhase <= MAX_ORC_WAVES) { m_uiBroggokEventPhase = 0; DoSortBroggokOrcs(); // open first cage DoNextBroggokEventPhase(); } } else if (uiData == FAIL) { // On wipe we reset only the orcs; if the party wipes at the boss itself then the orcs don't reset if (m_uiBroggokEventPhase <= MAX_ORC_WAVES) { for (uint8 i = 0; i < MAX_ORC_WAVES; ++i) { // Reset Orcs if (!m_aBroggokEvent[i].m_bIsCellOpened) continue; m_aBroggokEvent[i].m_uiKilledOrcCount = 0; for (GuidSet::const_iterator itr = m_aBroggokEvent[i].m_sSortedOrcGuids.begin(); itr != m_aBroggokEvent[i].m_sSortedOrcGuids.end(); ++itr) { if (Creature* pOrc = instance->GetCreature(*itr)) { if (!pOrc->isAlive()) pOrc->Respawn(); } } // Close Door DoUseDoorOrButton(m_aBroggokEvent[i].m_cellGuid); m_aBroggokEvent[i].m_bIsCellOpened = false; } } } m_auiEncounter[uiType] = uiData; break; case TYPE_KELIDAN_EVENT: if (uiData == DONE) { DoUseDoorOrButton(GO_DOOR_KELIDAN_EXIT); DoUseDoorOrButton(GO_DOOR_FINAL_EXIT); } m_auiEncounter[uiType] = uiData; break; default: script_error_log("Instance Blood Furnace SetData with Type %u Data %u, but this is not implemented.", uiType, uiData); return; } if (uiData == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void SetData(uint32 type, uint32 data) { switch(type) { case DATA_MAKEREVENT: if (data == IN_PROGRESS) { HandleGameObject(Maker1GUID, false); } else HandleGameObject(Maker1GUID, true); if (data == DONE) { HandleGameObject(Maker2GUID, true); } if (Encounter[0] != DONE) Encounter[0] = data; break; case DATA_BROGGOKEVENT: if (data == IN_PROGRESS) { if (Creature* pBroggok = instance->GetCreature(BroggokGUID)) DoScriptText(SAY_BROGGOK_INTRO, pBroggok); HandleGameObject(Brog1GUID, false); if (BroggokEventPhase <= MAX_ORC_WAVES) { DoSortBroggokOrcs(); DoNextBroggokEventPhase(); } } else { HandleGameObject(Brog1GUID, true); } if (data == FAIL) { if (BroggokEventPhase <= MAX_BROGGOK_WAVES) { for (uint8 i = 0; i < MAX_ORC_WAVES; ++i) { if (!BroggokEvent[i].IsCellOpened) continue; BroggokEvent[i].KilledOrcCount = 0; for (std::set<uint64>::const_iterator itr = BroggokEvent[i].SortedOrcGuids.begin(); itr != BroggokEvent[i].SortedOrcGuids.end(); ++itr) { if (Creature* pOrc = instance->GetCreature(*itr)) { if (!pOrc->isAlive()) { pOrc->Respawn(); BroggokEventPhase = 0; } } } DoUseDoorOrButton(BroggokEvent[i].CellGuid); BroggokEvent[i].IsCellOpened = false; if (GameObject* Lever = instance->GetGameObject(LeverGUID)) { if (Lever) Lever->ResetDoorOrButton(); } } } } if (data == DONE) { HandleGameObject(Brog2GUID, true); } if (Encounter[1] != DONE) Encounter[1] = data; break; case DATA_KELIDANEVENT: if (data == DONE) { HandleGameObject(Sewer1GUID, true); HandleGameObject(Sewer2GUID, true); } if (Encounter[2] != DONE) Encounter[2] = data; break; } if (data == DONE) { SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }