void instance_karazhan::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_ATTUMEN: m_auiEncounter[uiType] = uiData; if (uiData == FAIL) { // Respawn Midnight on Fail if (Creature* pMidnight = GetSingleCreatureFromStorage(NPC_MIDNIGHT)) { if (!pMidnight->isAlive()) pMidnight->Respawn(); } } break; case TYPE_MOROES: case TYPE_MAIDEN: m_auiEncounter[uiType] = uiData; break; case TYPE_OPERA: // Don't store the same data twice if (uiData == m_auiEncounter[uiType]) break; m_auiEncounter[uiType] = uiData; if (uiData == IN_PROGRESS) m_uiOzDeathCount = 0; if (uiData == DONE) { DoUseDoorOrButton(GO_STAGE_DOOR_LEFT); DoUseDoorOrButton(GO_STAGE_DOOR_RIGHT); DoToggleGameObjectFlags(GO_SIDE_ENTRANCE_DOOR, GO_FLAG_LOCKED, false); } // use curtain only for event start or fail else DoUseDoorOrButton(GO_STAGE_CURTAIN); break; case TYPE_CURATOR: case TYPE_TERESTIAN: m_auiEncounter[uiType] = uiData; break; case TYPE_ARAN: if (uiData == FAIL || uiData == DONE) DoToggleGameObjectFlags(GO_PRIVATE_LIBRARY_DOOR, GO_FLAG_LOCKED, false); if (uiData == IN_PROGRESS) DoToggleGameObjectFlags(GO_PRIVATE_LIBRARY_DOOR, GO_FLAG_LOCKED, true); m_auiEncounter[uiType] = uiData; break; case TYPE_NETHERSPITE: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_MASSIVE_DOOR); break; case TYPE_CHESS: if (uiData == DONE) { // doors and loot are not handled for friendly games if (GetData(TYPE_CHESS) != SPECIAL) { DoUseDoorOrButton(GO_GAMESMANS_HALL_EXIT_DOOR); DoRespawnGameObject(GO_DUST_COVERED_CHEST, DAY); DoToggleGameObjectFlags(GO_DUST_COVERED_CHEST, GO_FLAG_NO_INTERACT, false); } // cast game end spells if (Creature* pMedivh = GetSingleCreatureFromStorage(NPC_ECHO_MEDIVH)) { pMedivh->CastSpell(pMedivh, SPELL_FORCE_KILL_BUNNY, true); pMedivh->CastSpell(pMedivh, SPELL_GAME_OVER, true); pMedivh->CastSpell(pMedivh, SPELL_CLEAR_BOARD, true); } if (Creature* pController = GetSingleCreatureFromStorage(NPC_CHESS_VICTORY_CONTROLLER)) pController->CastSpell(pController, SPELL_VICTORY_VISUAL, true); // remove silence debuff Map::PlayerList const& players = instance->GetPlayers(); for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { if (Player* pPlayer = itr->getSource()) { pPlayer->RemoveAurasDueToSpell(SPELL_GAME_IN_SESSION); pPlayer->RemoveAurasDueToSpell(SPELL_IN_GAME); } } m_bFriendlyGame = false; m_uiChessResetTimer = 35000; } else if (uiData == FAIL) { // clean the board for reset if (Creature* pMedivh = GetSingleCreatureFromStorage(NPC_ECHO_MEDIVH)) { pMedivh->CastSpell(pMedivh, SPELL_GAME_OVER, true); pMedivh->CastSpell(pMedivh, SPELL_CLEAR_BOARD, true); } // remove silence debuff Map::PlayerList const& players = instance->GetPlayers(); for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { if (Player* pPlayer = itr->getSource()) { pPlayer->RemoveAurasDueToSpell(SPELL_GAME_IN_SESSION); pPlayer->RemoveAurasDueToSpell(SPELL_IN_GAME); } } m_uiChessResetTimer = 35000; } else if (uiData == IN_PROGRESS || uiData == SPECIAL) DoPrepareChessEvent(); m_auiEncounter[uiType] = uiData; break; case TYPE_MALCHEZZAR: DoUseDoorOrButton(GO_NETHERSPACE_DOOR); m_auiEncounter[uiType] = uiData; break; case TYPE_NIGHTBANE: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_MASTERS_TERRACE_DOOR_1); DoUseDoorOrButton(GO_MASTERS_TERRACE_DOOR_2); // reset event on timer if (uiData == FAIL) m_uiNightbaneResetTimer = 30000; break; // Store the event type for the Opera case TYPE_OPERA_PERFORMANCE: m_uiOperaEvent = uiData; break; } // Also save the opera performance, once it's set if (uiData == DONE || uiType == TYPE_OPERA_PERFORMANCE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << m_auiEncounter[6] << " " << m_auiEncounter[7] << " " << m_auiEncounter[8] << " " << m_auiEncounter[9] << " " << m_auiEncounter[10] << " " << m_uiOperaEvent; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void Update(uint32 diff) { // Spawn the support for the bridge if necessary if (spawnSupport) { if (GameObject* pCollision = instance->GetGameObject(uiCollision)) pCollision->SummonGameObject(192743, pCollision->GetPositionX(), pCollision->GetPositionY(), pCollision->GetPositionZ(), pCollision->GetOrientation(), 0, 0, 0, 0, 0); spawnSupport = false; } // If there is nothing to activate, then return if (!toActivate) return; if (timer < diff) { timer = 0; if (toActivate == uiBridge) { toActivate = 0; GameObject* pBridge = instance->GetGameObject(uiBridge); GameObject* pCollision = instance->GetGameObject(uiCollision); GameObject* pSladRanStatue = instance->GetGameObject(uiSladRanStatue); GameObject* pMoorabiStatue = instance->GetGameObject(uiMoorabiStatue); GameObject* pDrakkariColossusStatue = instance->GetGameObject(uiDrakkariColossusStatue); GameObject* pGalDarahStatue = instance->GetGameObject(uiGalDarahStatue); if (pBridge && pCollision && pSladRanStatue && pMoorabiStatue && pDrakkariColossusStatue && pGalDarahStatue) { pBridge->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); pCollision->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); pSladRanStatue->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); pMoorabiStatue->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); pDrakkariColossusStatue->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); pGalDarahStatue->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); // Add the GO that solidifies the bridge so you can walk on it spawnSupport = true; SaveToDB(); } } else { uint32 spell = 0; GameObject* pAltar = NULL; if (toActivate == uiSladRanStatue) { spell = 57071; pAltar = instance->GetGameObject(uiSladRanAltar); } else if (toActivate == uiMoorabiStatue) { spell = 57068; pAltar = instance->GetGameObject(uiMoorabiAltar); } else if (toActivate == uiDrakkariColossusStatue) { spell = 57072; pAltar = instance->GetGameObject(uiDrakkariColossusAltar); } // This is a workaround to make the beam cast properly. The caster should be ID 30298 but since the spells // all are with scripted target for that same ID, it will hit itself. if (pAltar) if (Creature* trigger = pAltar->SummonCreature(18721, pAltar->GetPositionX(), pAltar->GetPositionY(), pAltar->GetPositionZ() + 3, pAltar->GetOrientation(), TEMPSUMMON_CORPSE_DESPAWN, 5000)) { // Set the trigger model to invisible trigger->SetDisplayId(11686); trigger->CastSpell(trigger, spell, false); } if (GameObject* statueGO = instance->GetGameObject(toActivate)) statueGO->SetGoState(GO_STATE_READY); toActivate = 0; if (phase == 3) QueueActivation(uiBridge, 3000); else SaveToDB(); // Don't save in between last statue and bridge turning in case of crash leading to stuck instance } } else timer -= diff; }
void SetData(uint32 uiType, uint32 uiData) { switch(uiType) { case TYPE_HELLMAW: m_auiEncounter[0] = uiData; break; case TYPE_OVERSEER: if (uiData != DONE) { error_log("SD2: Shadow Labyrinth: TYPE_OVERSEER did not expect other data than DONE"); return; } if (m_uiFelOverseerCount) { --m_uiFelOverseerCount; if (m_uiFelOverseerCount) debug_log("SD2: Shadow Labyrinth: %u Fel Overseers left to kill.", m_uiFelOverseerCount); else { m_auiEncounter[1] = DONE; debug_log("SD2: Shadow Labyrinth: TYPE_OVERSEER == DONE"); } } break; case TYPE_INCITER: if (uiData == DONE) DoUseDoorOrButton(m_uiRefectoryDoorGUID); m_auiEncounter[2] = uiData; break; case TYPE_VORPIL: if (uiData == DONE) DoUseDoorOrButton(m_uiScreamingHallDoorGUID); m_auiEncounter[3] = uiData; break; case TYPE_MURMUR: m_auiEncounter[4] = uiData; break; } if (uiData == DONE) { if (uiType == TYPE_OVERSEER && m_uiFelOverseerCount != 0) return; OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4]; strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void SetData(uint32 type, uint32 data) { switch(type) { case DATA_HIGHWARLORDNAJENTUSEVENT: if (data == DONE) { HandleGameObject(NajentusGate, true); } m_auiEncounter[0] = data;break; case DATA_SUPREMUSEVENT: if (data == DONE) { HandleGameObject(NajentusGate, true); } m_auiEncounter[1] = data; break; case DATA_SHADEOFAKAMAEVENT: if (data == IN_PROGRESS) { HandleGameObject(ShadeOfAkamaDoor, false); } else HandleGameObject(ShadeOfAkamaDoor, true); m_auiEncounter[2] = data; break; case DATA_TERONGOREFIENDEVENT: if (data == IN_PROGRESS) { HandleGameObject(TeronDoor, false); HandleGameObject(CommonDoor, false); }else { HandleGameObject(TeronDoor, true); HandleGameObject(CommonDoor, true); } m_auiEncounter[3] = data; break; case DATA_GURTOGGBLOODBOILEVENT: if (data == DONE) { HandleGameObject(GuurtogDoor, true); } m_auiEncounter[4] = data; break; case DATA_RELIQUARYOFSOULSEVENT: if (data == DONE) { HandleGameObject(TempleDoor, true); } m_auiEncounter[5] = data; break; case DATA_MOTHERSHAHRAZEVENT: if (data == DONE) { HandleGameObject(MotherDoor, true); } m_auiEncounter[6] = data; break; case DATA_ILLIDARICOUNCILEVENT: if (data == IN_PROGRESS) { HandleGameObject(CouncilDoor, false); HandleGameObject(SimpleDoor, false); }else { HandleGameObject(CouncilDoor, true); HandleGameObject(SimpleDoor, true); } m_auiEncounter[7] = data; break; case DATA_ILLIDANSTORMRAGEEVENT: m_auiEncounter[8] = data; break; } if (data == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << m_auiEncounter[6] << " " << m_auiEncounter[7] << " " << m_auiEncounter[8]; str_data = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_naxxramas::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_ANUB_REKHAN: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_ARAC_ANUB_DOOR); if (uiData == DONE) DoUseDoorOrButton(GO_ARAC_ANUB_GATE); break; case TYPE_FAERLINA: DoUseDoorOrButton(GO_ARAC_FAER_WEB); if (uiData == DONE) { DoUseDoorOrButton(GO_ARAC_FAER_DOOR); DoUseDoorOrButton(GO_ARAC_MAEX_OUTER_DOOR); } m_auiEncounter[uiType] = uiData; break; case TYPE_MAEXXNA: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_ARAC_MAEX_INNER_DOOR, uiData); if (uiData == DONE) { DoUseDoorOrButton(GO_ARAC_EYE_RAMP); DoUseDoorOrButton(GO_ARAC_EYE_BOSS); DoRespawnGameObject(GO_ARAC_PORTAL, 30 * MINUTE); DoToggleGameObjectFlags(GO_ARAC_PORTAL, GO_FLAG_NO_INTERACT, false); m_uiTauntTimer = 5000; } break; case TYPE_NOTH: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_PLAG_NOTH_ENTRY_DOOR); if (uiData == DONE) { DoUseDoorOrButton(GO_PLAG_NOTH_EXIT_DOOR); DoUseDoorOrButton(GO_PLAG_HEIG_ENTRY_DOOR); } break; case TYPE_HEIGAN: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_PLAG_HEIG_ENTRY_DOOR); if (uiData == DONE) DoUseDoorOrButton(GO_PLAG_HEIG_EXIT_HALLWAY); break; case TYPE_LOATHEB: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_PLAG_LOAT_DOOR); if (uiData == DONE) { DoUseDoorOrButton(GO_PLAG_EYE_RAMP); DoUseDoorOrButton(GO_PLAG_EYE_BOSS); DoRespawnGameObject(GO_PLAG_PORTAL, 30 * MINUTE); DoToggleGameObjectFlags(GO_PLAG_PORTAL, GO_FLAG_NO_INTERACT, false); m_uiTauntTimer = 5000; } break; case TYPE_RAZUVIOUS: m_auiEncounter[uiType] = uiData; break; case TYPE_GOTHIK: switch (uiData) { case IN_PROGRESS: DoUseDoorOrButton(GO_MILI_GOTH_ENTRY_GATE); DoUseDoorOrButton(GO_MILI_GOTH_COMBAT_GATE); break; case SPECIAL: DoUseDoorOrButton(GO_MILI_GOTH_COMBAT_GATE); break; case FAIL: if (m_auiEncounter[uiType] == IN_PROGRESS) DoUseDoorOrButton(GO_MILI_GOTH_COMBAT_GATE); DoUseDoorOrButton(GO_MILI_GOTH_ENTRY_GATE); break; case DONE: DoUseDoorOrButton(GO_MILI_GOTH_ENTRY_GATE); DoUseDoorOrButton(GO_MILI_GOTH_EXIT_GATE); DoUseDoorOrButton(GO_MILI_HORSEMEN_DOOR); m_dialogueHelper.StartNextDialogueText(NPC_THANE); break; } m_auiEncounter[uiType] = uiData; break; case TYPE_FOUR_HORSEMEN: // Skip if already set if (m_auiEncounter[uiType] == uiData) return; if (uiData == SPECIAL) { ++m_uiHorseMenKilled; if (m_uiHorseMenKilled == 4) SetData(TYPE_FOUR_HORSEMEN, DONE); // Don't store special data break; } if (uiData == FAIL) m_uiHorseMenKilled = 0; m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_MILI_HORSEMEN_DOOR); if (uiData == DONE) { // Despawn spirits if (Creature* pSpirit = GetSingleCreatureFromStorage(NPC_SPIRIT_OF_BLAUMEUX)) pSpirit->ForcedDespawn(); if (Creature* pSpirit = GetSingleCreatureFromStorage(NPC_SPIRIT_OF_MOGRAINE)) pSpirit->ForcedDespawn(); if (Creature* pSpirit = GetSingleCreatureFromStorage(NPC_SPIRIT_OF_KORTHAZZ)) pSpirit->ForcedDespawn(); if (Creature* pSpirit = GetSingleCreatureFromStorage(NPC_SPIRIT_OF_ZELIREK)) pSpirit->ForcedDespawn(); DoUseDoorOrButton(GO_MILI_EYE_RAMP); DoUseDoorOrButton(GO_MILI_EYE_BOSS); DoRespawnGameObject(GO_MILI_PORTAL, 30 * MINUTE); DoToggleGameObjectFlags(GO_MILI_PORTAL, GO_FLAG_NO_INTERACT, false); DoRespawnGameObject(GO_CHEST_HORSEMEN_NORM, 30 * MINUTE); m_uiTauntTimer = 5000; } break; case TYPE_PATCHWERK: m_auiEncounter[uiType] = uiData; if (uiData == DONE) DoUseDoorOrButton(GO_CONS_PATH_EXIT_DOOR); break; case TYPE_GROBBULUS: m_auiEncounter[uiType] = uiData; break; case TYPE_GLUTH: m_auiEncounter[uiType] = uiData; if (uiData == DONE) { DoUseDoorOrButton(GO_CONS_GLUT_EXIT_DOOR); DoUseDoorOrButton(GO_CONS_THAD_DOOR); } break; case TYPE_THADDIUS: // Only process real changes here if (m_auiEncounter[uiType] == uiData) return; m_auiEncounter[uiType] = uiData; if (uiData != SPECIAL) DoUseDoorOrButton(GO_CONS_THAD_DOOR, uiData); if (uiData == DONE) { DoUseDoorOrButton(GO_CONS_EYE_RAMP); DoUseDoorOrButton(GO_CONS_EYE_BOSS); DoRespawnGameObject(GO_CONS_PORTAL, 30 * MINUTE); DoToggleGameObjectFlags(GO_CONS_PORTAL, GO_FLAG_NO_INTERACT, false); m_uiTauntTimer = 5000; } break; case TYPE_SAPPHIRON: m_auiEncounter[uiType] = uiData; if (uiData == DONE) { DoUseDoorOrButton(GO_KELTHUZAD_WATERFALL_DOOR); m_dialogueHelper.StartNextDialogueText(NPC_KELTHUZAD); } // Start Sapph summoning process if (uiData == SPECIAL) m_uiSapphSpawnTimer = 22000; break; case TYPE_KELTHUZAD: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_KELTHUZAD_EXIT_DOOR); if (uiData == NOT_STARTED) { if (GameObject* pWindow = GetSingleGameObjectFromStorage(GO_KELTHUZAD_WINDOW_1)) pWindow->ResetDoorOrButton(); if (GameObject* pWindow = GetSingleGameObjectFromStorage(GO_KELTHUZAD_WINDOW_2)) pWindow->ResetDoorOrButton(); if (GameObject* pWindow = GetSingleGameObjectFromStorage(GO_KELTHUZAD_WINDOW_3)) pWindow->ResetDoorOrButton(); if (GameObject* pWindow = GetSingleGameObjectFromStorage(GO_KELTHUZAD_WINDOW_4)) pWindow->ResetDoorOrButton(); } break; } if (uiData == DONE || (uiData == SPECIAL && uiType == TYPE_SAPPHIRON)) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << m_auiEncounter[6] << " " << m_auiEncounter[7] << " " << m_auiEncounter[8] << " " << m_auiEncounter[9] << " " << m_auiEncounter[10] << " " << m_auiEncounter[11] << " " << m_auiEncounter[12] << " " << m_auiEncounter[13] << " " << m_auiEncounter[14] << " " << m_auiEncounter[15]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_scholomance::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_KIRTONOS: // This door is initially closed by DB-scripts, so only use it in case of FAIL, DONE, or on aggro after wipe if (m_auiEncounter[uiType] != FAIL && uiData == IN_PROGRESS) return; m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_GATE_KIRTONOS); break; case TYPE_RATTLEGORE: m_auiEncounter[uiType] = uiData; break; case TYPE_RAS_FROSTWHISPER: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_GATE_RAS); break; case TYPE_MALICIA: // TODO this code can be simplified, when it is known which event-ids correspond to which room m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(m_mGandlingData[EVENT_ID_MALICIA].m_doorGuid); break; case TYPE_THEOLEN: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(m_mGandlingData[EVENT_ID_THEOLEN].m_doorGuid); break; case TYPE_POLKELT: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(m_mGandlingData[EVENT_ID_POLKELT].m_doorGuid); break; case TYPE_RAVENIAN: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(m_mGandlingData[EVENT_ID_RAVENIAN].m_doorGuid); break; case TYPE_ALEXEI_BAROV: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(m_mGandlingData[EVENT_ID_BAROV].m_doorGuid); break; case TYPE_ILLUCIA_BAROV: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(m_mGandlingData[EVENT_ID_ILLUCIA].m_doorGuid); break; case TYPE_GANDLING: m_auiEncounter[uiType] = uiData; // Close the door to main room, because the encounter will take place only in the main hall and random around all the 6 rooms DoUseDoorOrButton(GO_GATE_GANDLING); break; } // Summon Gandling if (uiData == DONE) DoSpawnGandlingIfCan(false); if (uiData == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << m_auiEncounter[6] << " " << m_auiEncounter[7] << " " << m_auiEncounter[8] << " " << m_auiEncounter[9]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_ruins_of_ahnqiraj::SetData(uint32 uiType, uint32 uiData) { switch(uiType) { case TYPE_KURINNAXX: if (uiData == DONE) { DoSapwnAndorovIfCan(); // Yell after kurinnaxx if (m_auiEncounter[uiType] != DONE) DoOrSimulateScriptTextForThisInstance(YELL_OSSIRIAN_BREACHED, NPC_OSSIRIAN); } m_auiEncounter[uiType] = uiData; break; case TYPE_RAJAXX: m_auiEncounter[uiType] = uiData; if (uiData == IN_PROGRESS) { m_hasResetRajaxx = false; DoSortArmyWaves(); } if (uiData == DONE) { Map::PlayerList const &PlayerList = instance->GetPlayers(); for (Map::PlayerList::const_iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr) { if (itr->getSource() && itr->getSource()->IsInWorld()) itr->getSource()->SetCombatTimer(0); } if (Creature* pAndorov = GetSingleCreatureFromStorage(NPC_GENERAL_ANDOROV)) { if (pAndorov->isAlive() && m_auiEncounter[TYPE_ANDOROV] != FAIL) { #if AQ_PATCH >= 10 pAndorov->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); #else pAndorov->ForcedDespawn(); #endif Map::PlayerList const& lPlayers = this->instance->GetPlayers(); if (!lPlayers.isEmpty()) for (Map::PlayerList::const_iterator itr = lPlayers.begin(); itr != lPlayers.end(); ++itr) { if (Player* pPlayer = itr->getSource()) pPlayer->RewardReputation(609, 150); } } } } break; case TYPE_MOAM: case TYPE_BURU: case TYPE_AYAMISS: case TYPE_OSSIRIAN: case TYPE_ANDOROV: m_auiEncounter[uiType] = uiData; break; } if (uiData == DONE || (uiType == TYPE_RAJAXX && uiData == IN_PROGRESS) || (uiType == TYPE_ANDOROV && uiData == FAIL)) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << m_auiEncounter[6]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_naxxramas::SetData(uint32 uiType, uint32 uiData) { switch(uiType) { case TYPE_ANUB_REKHAN: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_ARAC_ANUB_DOOR); if (uiData == DONE) { DoUseDoorOrButton(GO_ARAC_ANUB_GATE); DoStartTimedAchievement(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, ACHIEV_START_MAEXXNA_ID); } break; case TYPE_FAERLINA: DoUseDoorOrButton(GO_ARAC_FAER_WEB); if (uiData == IN_PROGRESS) SetSpecialAchievementCriteria(TYPE_ACHIEV_KNOCK_YOU_OUT, true); if (uiData == DONE) { DoUseDoorOrButton(GO_ARAC_FAER_DOOR); DoUseDoorOrButton(GO_ARAC_MAEX_OUTER_DOOR); } m_auiEncounter[uiType] = uiData; break; case TYPE_MAEXXNA: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_ARAC_MAEX_INNER_DOOR, uiData); if (uiData == DONE) { DoUseDoorOrButton(GO_ARAC_EYE_RAMP); DoRespawnGameObject(GO_ARAC_PORTAL, 30*MINUTE); m_uiTauntTimer = 5000; } break; case TYPE_NOTH: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_PLAG_NOTH_ENTRY_DOOR); if (uiData == DONE) { DoUseDoorOrButton(GO_PLAG_NOTH_EXIT_DOOR); DoUseDoorOrButton(GO_PLAG_HEIG_ENTRY_DOOR); } break; case TYPE_HEIGAN: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_PLAG_HEIG_ENTRY_DOOR); if (uiData == IN_PROGRESS) SetSpecialAchievementCriteria(TYPE_ACHIEV_SAFETY_DANCE, true); if (uiData == DONE) DoUseDoorOrButton(GO_PLAG_HEIG_EXIT_DOOR); break; case TYPE_LOATHEB: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_PLAG_LOAT_DOOR); if (uiData == IN_PROGRESS) SetSpecialAchievementCriteria(TYPE_ACHIEV_SPORE_LOSER, true); if (uiData == DONE) { DoUseDoorOrButton(GO_PLAG_EYE_RAMP); DoRespawnGameObject(GO_PLAG_PORTAL, 30*MINUTE); m_uiTauntTimer = 5000; } break; case TYPE_RAZUVIOUS: m_auiEncounter[uiType] = uiData; break; case TYPE_GOTHIK: switch(uiData) { case IN_PROGRESS: DoUseDoorOrButton(GO_MILI_GOTH_ENTRY_GATE); DoUseDoorOrButton(GO_MILI_GOTH_COMBAT_GATE); break; case SPECIAL: DoUseDoorOrButton(GO_MILI_GOTH_COMBAT_GATE); break; case FAIL: if (m_auiEncounter[uiType] == IN_PROGRESS) DoUseDoorOrButton(GO_MILI_GOTH_COMBAT_GATE); DoUseDoorOrButton(GO_MILI_GOTH_ENTRY_GATE); break; case DONE: DoUseDoorOrButton(GO_MILI_GOTH_ENTRY_GATE); DoUseDoorOrButton(GO_MILI_GOTH_EXIT_GATE); DoUseDoorOrButton(GO_MILI_HORSEMEN_DOOR); break; } m_auiEncounter[uiType] = uiData; break; case TYPE_FOUR_HORSEMEN: if (uiData == SPECIAL) { m_auiEncounter[uiType] = uiData; ++m_uiHorsemenDead; if (m_uiHorsemenDead >= 4) uiData = DONE; else break; } if (uiData == IN_PROGRESS) { SetSpecialAchievementCriteria(TYPE_ACHIEV_AND_THEY, true); m_uiHorsemenDead = 0; } if (uiData == DONE) { DoUseDoorOrButton(GO_MILI_EYE_RAMP); DoRespawnGameObject(GO_MILI_PORTAL, 30*MINUTE); DoRespawnGameObject(instance->IsRegularDifficulty() ? GO_CHEST_HORSEMEN_NORM : GO_CHEST_HORSEMEN_HERO, 30*MINUTE); m_uiTauntTimer = 5000; // Set achiev credit DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, ACHIEV_SPELL_FOUR_HORSEMEN); } m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_MILI_HORSEMEN_DOOR); break; case TYPE_PATCHWERK: m_auiEncounter[uiType] = uiData; if (uiData == IN_PROGRESS) DoStartTimedAchievement(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, ACHIEV_START_PATCHWERK_ID); if (uiData == DONE) DoUseDoorOrButton(GO_CONS_PATH_EXIT_DOOR); break; case TYPE_GROBBULUS: m_auiEncounter[uiType] = uiData; break; case TYPE_GLUTH: m_auiEncounter[uiType] = uiData; if (uiData == DONE) { DoUseDoorOrButton(GO_CONS_GLUT_EXIT_DOOR); DoUseDoorOrButton(GO_CONS_THAD_DOOR); } break; case TYPE_THADDIUS: // Only process real changes here if (m_auiEncounter[uiType] == uiData) return; m_auiEncounter[uiType] = uiData; if (uiData != SPECIAL) DoUseDoorOrButton(GO_CONS_THAD_DOOR, uiData); // Uncomment when this achievement is implemented //if (uiData == IN_PROGRESS) // SetSpecialAchievementCriteria(TYPE_ACHIEV_SHOCKING, true); if (uiData == DONE) { DoUseDoorOrButton(GO_CONS_EYE_RAMP); DoRespawnGameObject(GO_CONS_PORTAL, 30*MINUTE); m_uiTauntTimer = 5000; } break; case TYPE_SAPPHIRON: m_auiEncounter[uiType] = uiData; // Uncomment when achiev check implemented //if (uiData == IN_PROGRESS) // SetSpecialAchievementCriteria(TYPE_ACHIEV_HUNDRED_CLUB, true); if (uiData == DONE) { DoUseDoorOrButton(GO_KELTHUZAD_WATERFALL_DOOR); m_dialogueHelper.StartNextDialogueText(SAY_SAPP_DIALOG1); } break; case TYPE_KELTHUZAD: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_KELTHUZAD_EXIT_DOOR); if (uiData == IN_PROGRESS) SetSpecialAchievementCriteria(TYPE_ACHIEV_GET_ENOUGH, false); break; case TYPE_UNDYING_FAILED: m_auiEncounter[uiType] = uiData; break; } if (uiData == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << m_auiEncounter[6] << " " << m_auiEncounter[7] << " " << m_auiEncounter[8] << " " << m_auiEncounter[9] << " " << m_auiEncounter[10] << " " << m_auiEncounter[11] << " " << m_auiEncounter[12] << " " << m_auiEncounter[13] << " " << m_auiEncounter[14] << " " << m_auiEncounter[15]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void SetData(uint32 type, uint32 data) { switch (type) { case DATA_STRANGE_POOL: StrangePool = data; break; case DATA_CONTROL_CONSOLE: if (data == DONE) { HandleGameObject(BridgePart[0], true); HandleGameObject(BridgePart[0], true); HandleGameObject(BridgePart[0], true); } ControlConsole = data; break; case DATA_TRASH: if (data == 1 && TrashCount < MIN_KILLS) ++TrashCount;//+1 died SaveToDB(); break; case DATA_WATER: Water = data; break; case DATA_HYDROSSTHEUNSTABLEEVENT: m_auiEncounter[0] = data; break; case DATA_LEOTHERASTHEBLINDEVENT: m_auiEncounter[1] = data; break; case DATA_THELURKERBELOWEVENT: m_auiEncounter[2] = data; break; case DATA_KARATHRESSEVENT: m_auiEncounter[3] = data; break; case DATA_MOROGRIMTIDEWALKEREVENT: m_auiEncounter[4] = data; break; //Lady Vashj case DATA_LADYVASHJEVENT: if (data == NOT_STARTED) { ShieldGeneratorDeactivated[0] = false; ShieldGeneratorDeactivated[1] = false; ShieldGeneratorDeactivated[2] = false; ShieldGeneratorDeactivated[3] = false; } m_auiEncounter[5] = data; break; case DATA_SHIELDGENERATOR1: ShieldGeneratorDeactivated[0] = data != 0; break; case DATA_SHIELDGENERATOR2: ShieldGeneratorDeactivated[1] = data != 0; break; case DATA_SHIELDGENERATOR3: ShieldGeneratorDeactivated[2] = data != 0; break; case DATA_SHIELDGENERATOR4: ShieldGeneratorDeactivated[3] = data != 0; break; default: break; } if (data == DONE) SaveToDB(); }
void instance_dire_maul::SetData(uint32 uiType, uint32 uiData) { switch(uiType) { // East case TYPE_ZEVRIM: if (uiData == DONE) { // Update Old Ironbark so he can open the conservatory door if (Creature* pIronbark = instance->GetCreature(m_uiOldIronbarkGUID)) { DoScriptText(SAY_IRONBARK_REDEEM, pIronbark); pIronbark->setFaction(FACTION_FREUNDLICH); pIronbark->SetDisplayId(1461); } } m_auiEncounter[uiType] = uiData; break; case TYPE_IRONBARK: if (uiData == DONE) { DoUseDoorOrButton(m_uiConservatoryDoorGUID); } m_auiEncounter[uiType] = uiData; break; case TYPE_ALZZIN: // This Encounter is expected to be handled within Acid (reason handling at 50% hp) if (uiData == DONE) { if (!m_bWallDestroyed) { DoUseDoorOrButton(m_uiCrumbleWallGUID); m_bWallDestroyed = true; } DoUseDoorOrButton(m_uiCorruptVineGUID); if (!m_lFelvineShardGUIDs.empty()) { for(GUIDList::const_iterator itr = m_lFelvineShardGUIDs.begin(); itr != m_lFelvineShardGUIDs.end(); ++itr) DoRespawnGameObject(*itr); } } else if (uiData == SPECIAL && !m_bWallDestroyed) { DoUseDoorOrButton(m_uiCrumbleWallGUID); m_bWallDestroyed = true; } m_auiEncounter[uiType] = uiData; break; // West case TYPE_IMMOLTHAR: if (uiData == DONE) { if (Creature* pPrince = instance->GetCreature(m_uiPrinceTortheldrinGUID)) { DoScriptText(SAY_FREE_IMMOLTHAR, pPrince); pPrince->setFaction(FACTION_HOSTILE); pPrince->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); // Despawn Chest-Aura if (GameObject* pChestAura = instance->GetGameObject(m_uiPrincesChestAuraGUID)) pChestAura->Use(pPrince); } } m_auiEncounter[uiType] = uiData; break; case TYPE_PRINCE: m_auiEncounter[uiType] = uiData; break; case TYPE_PYLON_1: case TYPE_PYLON_2: case TYPE_PYLON_3: case TYPE_PYLON_4: case TYPE_PYLON_5: m_auiEncounter[uiType] = uiData; if (uiData == DONE) { DoUseDoorOrButton(m_auiCrystalGeneratorGUID[uiType - TYPE_PYLON_1]); if (CheckAllGeneratorsDestroyed()) ProcessForceFieldOpening(); } break; // North case TYPE_KING_GORDOK: m_auiEncounter[uiType] = uiData; if (uiData == DONE) { StartTrue = true; /* // Apply Aura to players in the map Map::PlayerList const& players = instance->GetPlayers(); for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { if (Player* pPlayer = itr->getSource()) pPlayer->CastSpell(pPlayer, SPELL_KING_OF_GORDOK, true); }*/ } break; case TYPE_KNOT_CHEST: { m_auiEncounter[uiType] = uiData; } break; case TYPE_GORDOK_CHEST: m_auiEncounter[uiType] = uiData; break; default: { if(uiType < MAX_ENCOUNTER) { m_auiEncounter[uiType] = uiData; } } break; } if (uiData == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; for(uint32 i = 0; i < MAX_ENCOUNTER; ++i) saveStream << m_auiEncounter[i] << " "; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_sunwell_plateau::SetData(uint32 uiType, uint32 uiData) { switch(uiType) { case TYPE_KALECGOS: m_auiEncounter[uiType] = uiData; // combat doors DoUseDoorOrButton(GO_FORCEFIELD); DoUseDoorOrButton(GO_BOSS_COLLISION_1); DoUseDoorOrButton(GO_BOSS_COLLISION_2); if (uiData == IN_PROGRESS) SpectralRealmList.clear(); break; case TYPE_BRUTALLUS: m_auiEncounter[uiType] = uiData; if (uiData == SPECIAL) DoUseDoorOrButton(GO_ICE_BARRIER, MINUTE); break; case TYPE_FELMYST: m_auiEncounter[uiType] = uiData; if (uiData == DONE) DoUseDoorOrButton(GO_FIRE_BARRIER); break; case TYPE_EREDAR_TWINS: m_auiEncounter[uiType] = uiData; if (uiData == DONE) { DoUseDoorOrButton(GO_SECOND_GATE); DoUseDoorOrButton(GO_MURU_ENTER_GATE); } break; case TYPE_MURU: m_auiEncounter[uiType] = uiData; // combat door DoUseDoorOrButton(GO_MURU_ENTER_GATE); if (uiData == DONE) { DoUseDoorOrButton(GO_MURU_EXIT_GATE); DoUseDoorOrButton(GO_THIRD_GATE); } break; case TYPE_KILJAEDEN: m_auiEncounter[uiType] = uiData; break; case DATA_SET_SPECTRAL_CHECK: m_uiSpectralRealmTimer = uiData; break; } if (uiData == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void SetData (uint32 type, uint32 data) { switch(type) { case DATA_ALTAR_DOORS: Encounters[0] = data; if (data == DONE) SetDoor (altarOfTheKeeperTempleDoor, true); break; case DATA_ANCIENT_DOOR: Encounters[1] = data; if (data == DONE) //archeadas defeat { SetDoor (archaedasTempleDoor, true); //re open enter door SetDoor (ancientVaultDoor, true); } break; case DATA_IRONAYA_DOOR: Encounters[2] = data; break; case DATA_STONE_KEEPERS: ActivateStoneKeepers(); break; case DATA_MINIONS: switch(data) { case NOT_STARTED: if (Encounters[0] == DONE) //if players opened the doors SetDoor (archaedasTempleDoor, true); RespawnMinions(); break; case IN_PROGRESS: ActivateWallMinions(); break; case SPECIAL: DeActivateMinions(); break; } break; case DATA_IRONAYA_SEAL: keystoneCheck = true; break; } if (data == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << Encounters[0] << " " << Encounters[1] << " " << Encounters[2]; str_data = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_zulaman::SetData(uint32 uiType, uint32 uiData) { debug_log("SD2: Instance Zulaman: SetData received for type %u with data %u", uiType, uiData); switch (uiType) { case TYPE_EVENT_RUN: if (uiData == SPECIAL) { ++m_uiGongCount; if (m_uiGongCount == 5) m_auiEncounter[TYPE_EVENT_RUN] = uiData; return; } if (uiData == IN_PROGRESS) { DoTimeRunSay(RUN_START); DoUseDoorOrButton(GO_MASSIVE_GATE); if (m_auiEncounter[TYPE_RUN_EVENT_TIME]) SetData(TYPE_RUN_EVENT_TIME, m_auiEncounter[TYPE_RUN_EVENT_TIME]); else SetData(TYPE_RUN_EVENT_TIME, 20); // 20 Minutes as default time DoUpdateWorldState(WORLD_STATE_ID, 1); } if (uiData == FAIL) { DoTimeRunSay(RUN_FAIL); DoUpdateWorldState(WORLD_STATE_ID, 0); // Kill remaining Event NPCs for (uint8 i = 0; i < MAX_CHESTS; ++i) { // Not yet rescued, so too late if (!m_aEventNpcInfo[i].uiSavePosition) { if (Creature* pCreature = instance->GetCreature(m_aEventNpcInfo[i].npGuid)) pCreature->ForcedDespawn(); } } } if (uiData == DONE) { DoTimeRunSay(RUN_DONE); DoUpdateWorldState(WORLD_STATE_ID, 0); } m_auiEncounter[uiType] = uiData; break; case TYPE_AKILZON: DoUseDoorOrButton(GO_WIND_DOOR); if (uiData == DONE) { if (m_auiEncounter[TYPE_EVENT_RUN] == IN_PROGRESS) { m_auiEncounter[TYPE_RUN_EVENT_TIME] += 10; // Add 10 minutes SetData(TYPE_RUN_EVENT_TIME, m_auiEncounter[TYPE_RUN_EVENT_TIME]); DoChestEvent(INDEX_AKILZON); } } m_auiEncounter[uiType] = uiData; break; case TYPE_NALORAKK: if (uiData == DONE) { if (m_auiEncounter[TYPE_EVENT_RUN] == IN_PROGRESS) { m_auiEncounter[TYPE_RUN_EVENT_TIME] += 15; // Add 15 minutes SetData(TYPE_RUN_EVENT_TIME, m_auiEncounter[TYPE_RUN_EVENT_TIME]); DoChestEvent(INDEX_NALORAKK); } } m_auiEncounter[uiType] = uiData; break; case TYPE_JANALAI: if (uiData == DONE) { if (m_auiEncounter[TYPE_EVENT_RUN] == IN_PROGRESS) DoChestEvent(INDEX_JANALAI); } m_auiEncounter[uiType] = uiData; break; case TYPE_HALAZZI: DoUseDoorOrButton(GO_LYNX_TEMPLE_ENTRANCE); if (uiData == DONE) { DoUseDoorOrButton(GO_LYNX_TEMPLE_EXIT); if (m_auiEncounter[TYPE_EVENT_RUN] == IN_PROGRESS) DoChestEvent(INDEX_HALAZZI); } m_auiEncounter[uiType] = uiData; break; case TYPE_MALACRASS: DoUseDoorOrButton(GO_HEXLORD_ENTRANCE); if (uiData == DONE) DoUseDoorOrButton(GO_WOODEN_DOOR); m_auiEncounter[uiType] = uiData; break; case TYPE_ZULJIN: DoUseDoorOrButton(GO_FIRE_DOOR); m_auiEncounter[uiType] = uiData; break; case TYPE_RUN_EVENT_TIME: m_auiEncounter[uiType] = uiData; DoUpdateWorldState(WORLD_STATE_COUNTER, m_auiEncounter[uiType]); break; case TYPE_RAND_VENDOR_1: m_auiRandVendor[0] = uiData; break; case TYPE_RAND_VENDOR_2: m_auiRandVendor[1] = uiData; break; default: script_error_log("Instance Zulaman: ERROR SetData = %u for type %u does not exist/not implemented.", uiType, uiData); return; } if (uiData == DONE && GetKilledPreBosses() == 4 && (uiType == TYPE_AKILZON || uiType == TYPE_NALORAKK || uiType == TYPE_JANALAI || uiType == TYPE_HALAZZI)) { DoUseDoorOrButton(GO_HEXLORD_ENTRANCE); if (m_auiEncounter[TYPE_EVENT_RUN] == IN_PROGRESS) SetData(TYPE_EVENT_RUN, DONE); } if (uiData == DONE || uiType == TYPE_RUN_EVENT_TIME || uiType == TYPE_EVENT_RUN) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << m_auiEncounter[6] << " " << m_auiEncounter[7]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_dire_maul::SetData(uint32 uiType, uint32 uiData) { switch(uiType) { // East case TYPE_ALZZIN: // This Encounter is expected to be handled within Acid (reason handling at 50% hp) if (uiData == DONE) { if (!m_bWallDestroyed) { DoUseDoorOrButton(m_uiCrumbleWallGUID); m_bWallDestroyed = true; } DoUseDoorOrButton(m_uiCorruptVineGUID); if (!m_lFelvineShardGUIDs.empty()) { for(std::list<uint64>::iterator i = m_lFelvineShardGUIDs.begin(); i != m_lFelvineShardGUIDs.end(); ++i) DoRespawnGameObject(*i); } } else if (uiData == SPECIAL && !m_bWallDestroyed) { DoUseDoorOrButton(m_uiCrumbleWallGUID); m_bWallDestroyed = true; } m_auiEncounter[uiType] = uiData; break; // West case TYPE_IMMOLTHAR: if (uiData == DONE) { if (Creature* pPrince = instance->GetCreature(m_uiPrinceTortheldrinGUID)) { DoScriptText(SAY_FREE_IMMOLTHAR, pPrince); pPrince->setFaction(FACTION_HOSTILE); // Despawn Chest-Aura if (GameObject* pChestAura = instance->GetGameObject(m_uiPrincesChestAuraGUID)) pChestAura->Use(pPrince); } } m_auiEncounter[uiType] = uiData; break; case TYPE_PRINCE: m_auiEncounter[uiType] = uiData; break; case TYPE_PYLON_1: case TYPE_PYLON_2: case TYPE_PYLON_3: case TYPE_PYLON_4: case TYPE_PYLON_5: m_auiEncounter[uiType] = uiData; if (uiData == DONE) { DoUseDoorOrButton(m_auiCrystalGeneratorGUID[uiType - TYPE_PYLON_1]); if (CheckAllGeneratorsDestroyed()) ProcessForceFieldOpening(); } break; // North case TYPE_KING_GORDOK: m_auiEncounter[uiType] = uiData; if (uiData == DONE) { // Apply Aura to players in the map Map::PlayerList const& players = instance->GetPlayers(); for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { if (Player* pPlayer = itr->getSource()) pPlayer->CastSpell(pPlayer, SPELL_KING_OF_GORDOK, true); } } break; } if (uiData >= DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << m_auiEncounter[6] << " " << m_auiEncounter[7] << " " << m_auiEncounter[8]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void SetData(uint32 type, uint32 data) { switch (type) { case DATA_HIGHWARLORDNAJENTUSEVENT: if(data == DONE) { HandleGameObject(NajentusGate, true); } if(Encounters[0] != DONE) { Encounters[0] = data; } break; case DATA_SUPREMUSEVENT: if(data == DONE) { HandleGameObject(MainTempleDoors, true); } if(Encounters[1] != DONE) Encounters[1] = data; break; case DATA_SHADEOFAKAMAEVENT: if(data == IN_PROGRESS) { HandleGameObject(ShadeOfAkamaDoor, false); }else HandleGameObject(ShadeOfAkamaDoor, true); if(Encounters[2] != DONE) Encounters[2] = data; HandleTempleDoor(); break; case DATA_TERONGOREFIENDEVENT: if(data == IN_PROGRESS) { HandleGameObject(TeronDoor, false); HandleGameObject(CommonDoor, false); }else { HandleGameObject(TeronDoor, true); HandleGameObject(CommonDoor, true); } if(Encounters[3] != DONE) Encounters[3] = data; HandleTempleDoor(); break; case DATA_GURTOGGBLOODBOILEVENT: if(data == DONE) { HandleGameObject(GuurtogDoor, true); } if(Encounters[4] != DONE) Encounters[4] = data; HandleTempleDoor(); break; case DATA_RELIQUARYOFSOULSEVENT: if(Encounters[5] != DONE) Encounters[5] = data; HandleTempleDoor(); break; case DATA_MOTHERSHAHRAZEVENT: if(data == DONE) { HandleGameObject(MotherDoor, true); } if(Encounters[6] != DONE) Encounters[6] = data; break; case DATA_ILLIDARICOUNCILEVENT: if(data == IN_PROGRESS) { HandleGameObject(CouncilDoor, false); HandleGameObject(SimpleDoor, false); }else { HandleGameObject(CouncilDoor, true); HandleGameObject(SimpleDoor, true); } if(Encounters[7] != DONE) Encounters[7] = data; break; case DATA_ILLIDANSTORMRAGEEVENT: if(Encounters[8] != DONE) Encounters[8] = data; break; case DATA_ILLIDAN_GATE_OPENED: if(IllidanGateOpend != DONE) IllidanGateOpend = data; break; } if (data == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << "B T " << Encounters[0] << ' ' << Encounters[1] << ' ' << Encounters[2] << ' ' << Encounters[3] << ' ' << Encounters[4] << ' ' << Encounters[5] << ' ' << Encounters[6] << ' ' << Encounters[7] << ' ' << Encounters[8] << ' ' << IllidanGateOpend; str_data = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void SetData(uint32 uiType, uint32 uiData) { debug_log("SD2: Instance Gundrak: SetData received for type %u with data %u",uiType,uiData); switch(uiType) { case TYPE_SLADRAN: m_auiEncounter[0] = uiData; if (uiData == DONE) if (GameObject* pGo = instance->GetGameObject(m_uiAltarOfSladranGUID)) pGo->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1); if (uiData == SPECIAL) DoUseDoorOrButton(m_uiSnakeKeyGUID); break; case TYPE_MOORABI: m_auiEncounter[1] = uiData; if (uiData == DONE) { if (!instance->IsRegularDifficulty()) DoUseDoorOrButton(m_uiEckDoorGUID); if (GameObject* pGo = instance->GetGameObject(m_uiAltarOfMoorabiGUID)) pGo->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1); } if (uiData == SPECIAL) DoUseDoorOrButton(m_uiMammothKeyGUID); break; case TYPE_COLOSSUS: m_auiEncounter[2] = uiData; if (uiData == DONE) if (GameObject* pGo = instance->GetGameObject(m_uiAltarOfColossusGUID)) pGo->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1); if (uiData == SPECIAL) DoUseDoorOrButton(m_uiTrollKeyGUID); break; case TYPE_GALDARAH: m_auiEncounter[3] = uiData; DoUseDoorOrButton(m_uiGaldarahDoorGUID); if (uiData == DONE) { DoUseDoorOrButton(m_uiExitDoorLeftGUID); DoUseDoorOrButton(m_uiExitDoorRightGUID); } break; case TYPE_ECK: m_auiEncounter[4] = uiData; if (uiData == DONE) DoUseDoorOrButton(m_uiEckUnderwaterDoorGUID); break; default: error_log("SD2: Instance Gundrak: ERROR SetData = %u for type %u does not exist/not implemented.",uiType,uiData); break; } if (uiData == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4]; strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_magisters_terrace::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_SELIN: if (uiData == DONE) DoUseDoorOrButton(GO_SELIN_DOOR); if (uiData == FAIL) { // Reset crystals - respawn and kill is handled by creature linking for (GuidList::const_iterator itr = m_lFelCrystalGuid.begin(); itr != m_lFelCrystalGuid.end(); ++itr) { if (Creature* pTemp = instance->GetCreature(*itr)) { if (!pTemp->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); if (pTemp->isAlive()) pTemp->AI()->EnterEvadeMode(); } } } if (uiData == IN_PROGRESS) { // Stop channeling when the fight starts for (GuidList::const_iterator itr = m_lFelCrystalGuid.begin(); itr != m_lFelCrystalGuid.end(); ++itr) { if (Creature* pTemp = instance->GetCreature(*itr)) pTemp->InterruptNonMeleeSpells(false); } } DoUseDoorOrButton(GO_SELIN_ENCOUNTER_DOOR); m_auiEncounter[uiType] = uiData; break; case TYPE_VEXALLUS: if (uiData == DONE) DoUseDoorOrButton(GO_VEXALLUS_DOOR); m_auiEncounter[uiType] = uiData; break; case TYPE_DELRISSA: if (uiData == DONE) DoUseDoorOrButton(GO_DELRISSA_DOOR); if (uiData == IN_PROGRESS) m_uiDelrissaDeathCount = 0; m_auiEncounter[uiType] = uiData; break; case TYPE_KAELTHAS: DoUseDoorOrButton(GO_KAEL_DOOR); if (uiData == DONE) DoToggleGameObjectFlags(GO_ESCAPE_QUEL_DANAS, GO_FLAG_NO_INTERACT, false); m_auiEncounter[uiType] = uiData; break; } if (uiData == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_old_hillsbrad::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_BARREL_DIVERSION: m_auiEncounter[uiType] = uiData; if (uiData == IN_PROGRESS) { if (m_uiBarrelCount >= MAX_BARRELS) return; // Update barrels used and world state ++m_uiBarrelCount; DoUpdateWorldState(WORLD_STATE_OH, m_uiBarrelCount); debug_log("SD2: Instance Old Hillsbrad: go_barrel_old_hillsbrad count %u", m_uiBarrelCount); // Set encounter to done, and spawn Liutenant Drake if (m_uiBarrelCount == MAX_BARRELS) { UpdateLodgeQuestCredit(); if (Player* pPlayer = GetPlayerInMap()) { pPlayer->SummonCreature(NPC_DRAKE, aDrakeSummonLoc[0], aDrakeSummonLoc[1], aDrakeSummonLoc[2], aDrakeSummonLoc[3], TEMPSPAWN_DEAD_DESPAWN, 0); // set the houses on fire for (GuidList::const_iterator itr = m_lRoaringFlamesList.begin(); itr != m_lRoaringFlamesList.end(); ++itr) DoRespawnGameObject(*itr, 30 * MINUTE); // move the orcs outside the houses float fX, fY, fZ; for (GuidList::const_iterator itr = m_lRightPrisonersList.begin(); itr != m_lRightPrisonersList.end(); ++itr) { if (Creature* pOrc = instance->GetCreature(*itr)) { pOrc->GetRandomPoint(afInstanceLoc[0][0], afInstanceLoc[0][1], afInstanceLoc[0][2], 10.0f, fX, fY, fZ); pOrc->SetWalk(false); pOrc->GetMotionMaster()->MovePoint(0, fX, fY, fZ); pOrc->SetStandState(UNIT_STAND_STATE_STAND); } } for (GuidList::const_iterator itr = m_lLeftPrisonersList.begin(); itr != m_lLeftPrisonersList.end(); ++itr) { if (Creature* pOrc = instance->GetCreature(*itr)) { pOrc->GetRandomPoint(afInstanceLoc[1][0], afInstanceLoc[1][1], afInstanceLoc[1][2], 10.0f, fX, fY, fZ); pOrc->SetWalk(false); pOrc->GetMotionMaster()->MovePoint(0, fX, fY, fZ); pOrc->SetStandState(UNIT_STAND_STATE_STAND); } } } else debug_log("SD2: Instance Old Hillsbrad: SetData (Type: %u Data %u) cannot find any pPlayer.", uiType, uiData); SetData(TYPE_BARREL_DIVERSION, DONE); } } break; case TYPE_THRALL_EVENT: // nothing to do if already done and thrall respawn if (GetData(TYPE_THRALL_EVENT) == DONE) return; m_auiEncounter[uiType] = uiData; if (uiData == FAIL) { // despawn the bosses if necessary if (Creature* pSkarloc = GetSingleCreatureFromStorage(NPC_SKARLOC, true)) pSkarloc->ForcedDespawn(); if (Creature* pEpoch = GetSingleCreatureFromStorage(NPC_EPOCH, true)) pEpoch->ForcedDespawn(); if (m_uiThrallEventCount <= MAX_WIPE_COUNTER) { ++m_uiThrallEventCount; debug_log("SD2: Instance Old Hillsbrad: Thrall event failed %u times.", m_uiThrallEventCount); // reset Thrall on timer m_uiThrallResetTimer = 30000; } // If we already respawned Thrall too many times, the event is failed for good else if (m_uiThrallEventCount > MAX_WIPE_COUNTER) debug_log("SD2: Instance Old Hillsbrad: Thrall event failed %u times. Reset instance required.", m_uiThrallEventCount); } break; case TYPE_DRAKE: case TYPE_SKARLOC: case TYPE_ESCORT_BARN: case TYPE_ESCORT_INN: case TYPE_EPOCH: m_auiEncounter[uiType] = uiData; debug_log("SD2: Instance Old Hillsbrad: Thrall event type %u adjusted to data %u.", uiType, uiData); break; } if (uiData == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << m_auiEncounter[6]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void SetData(uint32 type, uint32 data) { switch(type) { case TYPE_LEVIATHAN: if (data == IN_PROGRESS) { HandleGameObject(m_uiLeviathanDoor[0],false); HandleGameObject(m_uiLeviathanDoor[1],false); HandleGameObject(m_uiLeviathanDoor[2],false); HandleGameObject(m_uiLeviathanDoor[3],false); HandleGameObject(m_uiLeviathanDoor[4],false); HandleGameObject(m_uiLeviathanDoor[5],false); HandleGameObject(m_uiLeviathanDoor[6],false); } else { HandleGameObject(m_uiLeviathanDoor[0],true); HandleGameObject(m_uiLeviathanDoor[1],true); HandleGameObject(m_uiLeviathanDoor[2],true); HandleGameObject(m_uiLeviathanDoor[3],true); HandleGameObject(m_uiLeviathanDoor[4],true); HandleGameObject(m_uiLeviathanDoor[5],true); HandleGameObject(m_uiLeviathanDoor[6],true); } break; case TYPE_IGNIS: case TYPE_RAZORSCALE: case TYPE_XT002: case TYPE_ASSEMBLY: break; case TYPE_KOLOGARN: m_auiEncounter[TYPE_KOLOGARN] = data; if (data == DONE && KologarnChest) KologarnChest->SetRespawnTime(KologarnChest->GetRespawnDelay()); break; case TYPE_AURIAYA: case TYPE_MIMIRON: break; case TYPE_HODIR: m_auiEncounter[TYPE_HODIR] = data; if (data == DONE && HodirChest) HodirChest->SetRespawnTime(HodirChest->GetRespawnDelay()); break; case TYPE_THORIM: m_auiEncounter[TYPE_THORIM] = data; if (data == DONE && ThorimChest) ThorimChest->SetRespawnTime(ThorimChest->GetRespawnDelay()); break; case TYPE_FREYA: m_auiEncounter[TYPE_FREYA] = data; if (data == DONE && FreyaChest) FreyaChest->SetRespawnTime(FreyaChest->GetRespawnDelay()); break; case TYPE_VEZAX: case TYPE_YOGGSARON: break; case TYPE_ALGALON: m_auiEncounter[type] = data; break; case TYPE_COLOSSUS: m_auiEncounter[TYPE_COLOSSUS] = data; if (data == 2) { if (Creature* pBoss = instance->GetCreature(m_uiLeviathanGUID)) pBoss->AI()->DoAction(10); if (GameObject* pGate = instance->GetGameObject(m_uiLeviathanGateGUID)) pGate->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); } break; } if (data == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) saveStream << m_auiEncounter[i] << " "; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void SetData(uint32 type, uint32 data) { switch( type ) { case DATA_DRAKOS: m_auiEncounter[DATA_DRAKOS] = data; if( data == DONE ) { DoUpdateWorldState(WORLD_STATE_CENTRIFUGE_CONSTRUCT_SHOW, 1); DoUpdateWorldState(WORLD_STATE_CENTRIFUGE_CONSTRUCT_AMOUNT, 10-CentrifugeCount); if (instance->IsHeroic()) DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_MAKE_IT_COUNT_TIMED_EVENT); } break; case DATA_VAROS: m_auiEncounter[DATA_VAROS] = data; if( data == DONE ) { DoUpdateWorldState(WORLD_STATE_CENTRIFUGE_CONSTRUCT_SHOW, 0); if( Creature* urom = instance->GetCreature(uiUromGUID) ) urom->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } break; case DATA_UROM: m_auiEncounter[DATA_UROM] = data; if( data == DONE ) if( Creature* eregos = instance->GetCreature(uiEregosGUID) ) eregos->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); break; case DATA_EREGOS: m_auiEncounter[DATA_EREGOS] = data; if (data == DONE) DoRespawnGameObject(EregosCacheGUID, 7*DAY); break; case DATA_CC_COUNT: if( CentrifugeCount < 10 ) { ++CentrifugeCount; DoUpdateWorldState(WORLD_STATE_CENTRIFUGE_CONSTRUCT_AMOUNT, 10-CentrifugeCount); } if( CentrifugeCount >= 10 ) if( Creature* varos = instance->GetCreature(uiVarosGUID) ) { varos->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); varos->InterruptNonMeleeSpells(false); varos->RemoveAura(50053); } break; case DATA_AMBER_VOID: bAmberVoid = data ? true : false; break; case DATA_EMERALD_VOID: bEmeraldVoid = data ? true : false; break; case DATA_RUBY_VOID: bRubyVoid = data ? true : false; break; } if( data == DONE ) SaveToDB(); }
void SetData(uint32 uiType, uint32 uiData) { switch(uiType) { case TYPE_EVENT: m_auiEncounter[uiType] = uiData; uiData = NOT_STARTED; break; case TYPE_RAGEFIRE: m_auiEncounter[uiType] = uiData; OpenAllDoors(); break; case TYPE_BALTHARUS: m_auiEncounter[uiType] = uiData; OpenAllDoors(); break; case TYPE_XERESTRASZA: m_auiEncounter[uiType] = uiData; if (uiData == IN_PROGRESS) DoOpenDoor(GO_FIRE_FIELD); else if (uiData == NOT_STARTED) { DoCloseDoor(GO_FIRE_FIELD); OpenAllDoors(); } else if (uiData == DONE) { OpenAllDoors(); if (m_auiEncounter[TYPE_ZARITHRIAN] == DONE) { m_auiEncounter[TYPE_EVENT] = 200; m_auiEventTimer = 30000; }; } break; case TYPE_ZARITHRIAN: m_auiEncounter[uiType] = uiData; if (uiData == DONE) { DoOpenDoor(GO_FLAME_WALLS); m_auiEncounter[TYPE_EVENT] = 200; m_auiEventTimer = 30000; } else if (uiData == IN_PROGRESS) DoCloseDoor(GO_FLAME_WALLS); else if (uiData == FAIL) DoOpenDoor(GO_FLAME_WALLS); break; case TYPE_HALION: m_auiEncounter[uiType] = uiData; if (uiData == IN_PROGRESS) DoCloseDoor(GO_FLAME_RING); else DoOpenDoor(GO_FLAME_RING); break; case TYPE_HALION_EVENT: m_auiHalionEvent = uiData; uiData = NOT_STARTED; break; case TYPE_EVENT_TIMER: m_auiEventTimer = uiData; uiData = NOT_STARTED; break; case DATA_ORB_DIRECTION: m_auiOrbDirection = uiData; uiData = NOT_STARTED; break; case DATA_ORB_N: m_auiOrbNState = uiData; uiData = NOT_STARTED; break; case DATA_ORB_S: m_auiOrbSState = uiData; uiData = NOT_STARTED; break; case TYPE_COUNTER: if (uiData == COUNTER_OFF) { UpdateWorldState(false,0); } else { UpdateWorldState(true,uiData); } uiData = NOT_STARTED; break; } if (uiData == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5]; strSaveData = 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; } }
void SetData(uint32 type, uint32 data) { switch(type) { case DATA_RAGEWINTERCHILLEVENT: m_auiEncounter[0] = data; break; case DATA_ANETHERONEVENT: m_auiEncounter[1] = data; break; case DATA_KAZROGALEVENT: m_auiEncounter[2] = data; break; case DATA_AZGALOREVENT: { m_auiEncounter[3] = data; if (data == DONE) { if (ArchiYell)break; ArchiYell = true; Creature* creature = instance->GetCreature(Azgalor); if (creature) { Creature* pUnit = creature->SummonCreature(21987,creature->GetPositionX(),creature->GetPositionY(),creature->GetPositionZ(),0,TEMPSUMMON_TIMED_DESPAWN,10000); Map* pMap = creature->GetMap(); if (pMap->IsDungeon() && pUnit) { pUnit->SetVisible(false); Map::PlayerList const &PlayerList = pMap->GetPlayers(); if (PlayerList.isEmpty()) return; for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { if (i->getSource()) { WorldPacket data(SMSG_MESSAGECHAT, 200); pUnit->BuildMonsterChat(&data,CHAT_MSG_MONSTER_YELL,YELL_EFFORTS,0,YELL_EFFORTS_NAME,i->getSource()->GetGUID()); i->getSource()->GetSession()->SendPacket(&data); WorldPacket data2(SMSG_PLAY_SOUND, 4); data2 << 10986; i->getSource()->GetSession()->SendPacket(&data2); } } } } } } break; case DATA_ARCHIMONDEEVENT: m_auiEncounter[4] = data; break; case DATA_RESET_TRASH_COUNT: Trash = 0; break; case DATA_TRASH: if (data) Trash = data; else Trash--; DoUpdateWorldState(WORLD_STATE_ENEMYCOUNT, Trash); break; case TYPE_RETREAT: if (data == SPECIAL) { if (!m_uiAncientGemGUID.empty()) { for (std::list<uint64>::const_iterator itr = m_uiAncientGemGUID.begin(); itr != m_uiAncientGemGUID.end(); ++itr) { //don't know how long it expected DoRespawnGameObject(*itr,DAY); } } } break; case DATA_ALLIANCE_RETREAT: allianceRetreat = data; HandleGameObject(HordeGate, true); SaveToDB(); break; case DATA_HORDE_RETREAT: hordeRetreat = data; HandleGameObject(ElfGate, true); SaveToDB(); break; case DATA_RAIDDAMAGE: RaidDamage += data; if (RaidDamage >= MINRAIDDAMAGE) RaidDamage = MINRAIDDAMAGE; break; case DATA_RESET_RAIDDAMAGE: RaidDamage = 0; break; } sLog->outDebug("TSCR: Instance Hyjal: Instance data updated for event %u (Data=%u)",type,data); if (data == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << allianceRetreat << " " << hordeRetreat << " " << RaidDamage; str_data = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_stratholme::SetData(uint32 uiType, uint32 uiData) { // TODO: Remove the hard-coded indexes from array accessing switch(uiType) { case TYPE_BARON_RUN: switch(uiData) { case IN_PROGRESS: if (m_auiEncounter[uiType] == IN_PROGRESS || m_auiEncounter[uiType] == FAIL) break; if (Creature* pBaron = instance->GetCreature(m_uiBaronGUID)) DoScriptText(SAY_ANNOUNCE_RUN_START, pBaron); m_uiBaronRunTimer = 45*MINUTE*IN_MILLISECONDS; debug_log("SD2: Instance Stratholme: Baron run in progress."); break; case FAIL: //may add code to remove aura from players, but in theory the time should be up already and removed. break; case DONE: m_uiBaronRunTimer = 0; break; } m_auiEncounter[uiType] = uiData; break; case TYPE_BARONESS: case TYPE_NERUB: case TYPE_PALLID: m_auiEncounter[uiType] = uiData; if (uiData == DONE) { DoSortZiggurats(); DoUseDoorOrButton(m_auiZigguratGUID[uiType - TYPE_BARONESS]); } if (uiData == SPECIAL) StartSlaugtherSquare(); break; case TYPE_RAMSTEIN: if (uiData == SPECIAL) { if (m_auiEncounter[uiType] != SPECIAL && m_auiEncounter[uiType] != DONE) { m_uiSlaugtherSquareTimer = 20000; // TODO - unknown, also possible that this is not the very correct place.. DoUseDoorOrButton(m_uiPortGauntletGUID); m_bIsSlaughterhouseGateOpened = false; } uint32 uiCount = m_sAbomnationGUID.size(); for(std::set<uint64>::iterator itr = m_sAbomnationGUID.begin(); itr != m_sAbomnationGUID.end();) { if (Creature* pAbom = instance->GetCreature(*itr)) { ++itr; if (!pAbom->isAlive()) --uiCount; } else { // Remove obsolete guid from set and decrement count m_sAbomnationGUID.erase(itr++); --uiCount; } } if (!uiCount) { // Old Comment: a bit itchy, it should close m_auiRamsteinDoorGUID door after 10 secs, but it doesn't. skipping it for now. // However looks like that this door is no more closed DoUseDoorOrButton(m_auiRamsteinDoorGUID); // No more handlng of Abomnations m_uiSlaugtherSquareTimer = 0; if (Creature* pBaron = instance->GetCreature(m_uiBaronGUID)) { DoScriptText(SAY_ANNOUNCE_RAMSTEIN, pBaron); if (Creature* pRamstein = pBaron->SummonCreature(NPC_RAMSTEIN, sStratholmeLocation[2].m_fX, sStratholmeLocation[2].m_fY, sStratholmeLocation[2].m_fZ, sStratholmeLocation[2].m_fO, TEMPSUMMON_DEAD_DESPAWN, 0)) pRamstein->GetMotionMaster()->MovePoint(0, sStratholmeLocation[3].m_fX, sStratholmeLocation[3].m_fY, sStratholmeLocation[3].m_fZ); debug_log("SD2: Instance Stratholme - Slaugther event: Ramstein spawned."); } } else debug_log("SD2: Instance Stratholme - Slaugther event: %u Abomnation left to kill.", uiCount); } // After fail aggroing Ramstein means wipe on Ramstein, so close door again if (uiData == IN_PROGRESS && m_auiEncounter[uiType] == FAIL) { DoUseDoorOrButton(m_uiPortGauntletGUID); m_bIsSlaughterhouseGateOpened = false; } if (uiData == DONE) { // Open side gate and start summoning skeletons DoUseDoorOrButton(m_uiPortSlaughterGateGUID); // use this timer as a bool just to start summoning m_uiMindlessSummonTimer = 500; m_uiMindlessCount = 0; m_luiUndeadGUIDs.clear(); // Summon 5 guards if (Creature* pBaron = instance->GetCreature(m_uiBaronGUID)) { for(uint8 i = 0; i < 5; ++i) { float fX, fY, fZ; pBaron->GetRandomPoint(sStratholmeLocation[6].m_fX, sStratholmeLocation[6].m_fY, sStratholmeLocation[6].m_fZ, 5.0f, fX, fY, fZ); if (Creature* pTemp = pBaron->SummonCreature(NPC_BLACK_GUARD, sStratholmeLocation[6].m_fX, sStratholmeLocation[6].m_fY, sStratholmeLocation[6].m_fZ, sStratholmeLocation[6].m_fO, TEMPSUMMON_DEAD_DESPAWN, 0)) m_luiGuardGUIDs.push_back(pTemp->GetGUID()); } debug_log("SD2: Instance Stratholme - Slaugther event: Summoned 5 guards."); } } // Open Door again and stop Abomnation if (uiData == FAIL && m_auiEncounter[uiType] != FAIL) { DoUseDoorOrButton(m_uiPortGauntletGUID); m_bIsSlaughterhouseGateOpened = true; m_uiSlaugtherSquareTimer = 0; // Let already moving Abomnations stop for (std::set<uint64>::iterator itr = m_sAbomnationGUID.begin(); itr != m_sAbomnationGUID.end(); ++itr) { Creature* pAbom = instance->GetCreature(*itr); if (pAbom && pAbom->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE) pAbom->GetMotionMaster()->MovementExpired(); } } m_auiEncounter[uiType] = uiData; break; case TYPE_BARON: if (uiData == IN_PROGRESS) { // Reached the Baron within time-limit if (m_auiEncounter[TYPE_BARON_RUN] == IN_PROGRESS) SetData(TYPE_BARON_RUN, DONE); // Close Slaughterhouse door if needed if (m_bIsSlaughterhouseGateOpened) { DoUseDoorOrButton(m_uiPortGauntletGUID); m_bIsSlaughterhouseGateOpened = false; } } if (uiData == DONE) { if (m_auiEncounter[TYPE_BARON_RUN] == DONE) { Map::PlayerList const& players = instance->GetPlayers(); for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { if (Player* pPlayer = itr->getSource()) { if (pPlayer->HasAura(SPELL_BARON_ULTIMATUM)) pPlayer->RemoveAurasDueToSpell(SPELL_BARON_ULTIMATUM); if (pPlayer->GetQuestStatus(QUEST_DEAD_MAN_PLEA) == QUEST_STATUS_INCOMPLETE) pPlayer->AreaExploredOrEventHappens(QUEST_DEAD_MAN_PLEA); } } // Open cage and finish rescue event if (Creature* pYsidaT = instance->GetCreature(m_uiYsidaTriggerGUID)) { if (Creature* pYsida = pYsidaT->SummonCreature(NPC_YSIDA, pYsidaT->GetPositionX(), pYsidaT->GetPositionY(), pYsidaT->GetPositionZ(), pYsidaT->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 1800000)) { DoScriptText(SAY_EPILOGUE, pYsida); pYsida->GetMotionMaster()->MovePoint(0, sStratholmeLocation[7].m_fX, sStratholmeLocation[7].m_fY, sStratholmeLocation[7].m_fZ); } DoUseDoorOrButton(m_uiYsidaCageGUID); } } // Open Slaughterhouse door again DoUseDoorOrButton(m_uiPortGauntletGUID); m_bIsSlaughterhouseGateOpened = true; } if (uiData == FAIL) { DoUseDoorOrButton(m_uiPortGauntletGUID); m_bIsSlaughterhouseGateOpened = true; } // combat door DoUseDoorOrButton(m_auiRivendareDoorGUID); m_auiEncounter[5] = uiData; // TODO break; case TYPE_BARTHILAS_RUN: if (uiData == IN_PROGRESS) { Creature* pBarthilas = instance->GetCreature(m_uiBarthilasGUID); if (pBarthilas && pBarthilas->isAlive() && !pBarthilas->isInCombat()) { DoScriptText(SAY_WARN_BARON, pBarthilas); pBarthilas->RemoveSplineFlag(SPLINEFLAG_WALKMODE); pBarthilas->GetMotionMaster()->MovePoint(0, sStratholmeLocation[0].m_fX, sStratholmeLocation[0].m_fY, sStratholmeLocation[0].m_fZ); m_uiBarthilasRunTimer = 8000; } } m_auiEncounter[6] = uiData; // TODO break; case TYPE_SH_AELMAR: m_bIsSilverHandDead[0] = (uiData) ? true : false; break; case TYPE_SH_CATHELA: m_bIsSilverHandDead[1] = (uiData) ? true : false; break; case TYPE_SH_GREGOR: m_bIsSilverHandDead[2] = (uiData) ? true : false; break; case TYPE_SH_NEMAS: m_bIsSilverHandDead[3] = (uiData) ? true : false; break; case TYPE_SH_VICAR: m_bIsSilverHandDead[4] = (uiData) ? true : false; break; } if (uiData == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << m_auiEncounter[6]; strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_gnomeregan::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_GRUBBIS: m_auiEncounter[0] = uiData; if (uiData == IN_PROGRESS) { // Sort the explosive charges if needed if (!m_luiExplosiveChargeGUIDs.empty()) { std::list<GameObject*> lExplosiveCharges; for (GuidList::const_iterator itr = m_luiExplosiveChargeGUIDs.begin(); itr != m_luiExplosiveChargeGUIDs.end(); ++itr) { if (GameObject* pCharge = instance->GetGameObject(*itr)) { lExplosiveCharges.push_back(pCharge); } } m_luiExplosiveChargeGUIDs.clear(); // Sort from east to west lExplosiveCharges.sort(sortFromEastToWest); // Sort to south and north uint8 uiCounterSouth = 0; uint8 uiCounterNorth = 0; GameObject* pCaveInSouth = GetSingleGameObjectFromStorage(GO_CAVE_IN_SOUTH); GameObject* pCaveInNorth = GetSingleGameObjectFromStorage(GO_CAVE_IN_NORTH); if (pCaveInSouth && pCaveInNorth) { for (std::list<GameObject*>::iterator itr = lExplosiveCharges.begin(); itr != lExplosiveCharges.end(); ++itr) { if ((*itr)->GetDistanceOrder(pCaveInSouth, pCaveInNorth) && uiCounterSouth < MAX_EXPLOSIVES_PER_SIDE) { m_aExplosiveSortedGuids[0][uiCounterSouth] = (*itr)->GetObjectGuid(); ++uiCounterSouth; } else if (uiCounterNorth < MAX_EXPLOSIVES_PER_SIDE) { m_aExplosiveSortedGuids[1][uiCounterNorth] = (*itr)->GetObjectGuid(); ++uiCounterNorth; } } } } } if (uiData == FAIL) { // Despawn possible spawned explosive charges SetData(TYPE_EXPLOSIVE_CHARGE, DATA_EXPLOSIVE_CHARGE_USE); } if (uiData == DONE) { for (GuidList::const_iterator itr = m_lRedRocketGUIDs.begin(); itr != m_lRedRocketGUIDs.end(); ++itr) { DoRespawnGameObject(*itr, HOUR); } } break; case TYPE_EXPLOSIVE_CHARGE: switch (uiData) { case DATA_EXPLOSIVE_CHARGE_1: DoRespawnGameObject(m_aExplosiveSortedGuids[0][0], HOUR); m_luiSpawnedExplosiveChargeGUIDs.push_back(m_aExplosiveSortedGuids[0][0]); break; case DATA_EXPLOSIVE_CHARGE_2: DoRespawnGameObject(m_aExplosiveSortedGuids[0][1], HOUR); m_luiSpawnedExplosiveChargeGUIDs.push_back(m_aExplosiveSortedGuids[0][1]); break; case DATA_EXPLOSIVE_CHARGE_3: DoRespawnGameObject(m_aExplosiveSortedGuids[1][0], HOUR); m_luiSpawnedExplosiveChargeGUIDs.push_back(m_aExplosiveSortedGuids[1][0]); break; case DATA_EXPLOSIVE_CHARGE_4: DoRespawnGameObject(m_aExplosiveSortedGuids[1][1], HOUR); m_luiSpawnedExplosiveChargeGUIDs.push_back(m_aExplosiveSortedGuids[1][1]); break; case DATA_EXPLOSIVE_CHARGE_USE: Creature* pBlastmaster = GetSingleCreatureFromStorage(NPC_BLASTMASTER_SHORTFUSE); if (!pBlastmaster) { break; } for (GuidList::const_iterator itr = m_luiSpawnedExplosiveChargeGUIDs.begin(); itr != m_luiSpawnedExplosiveChargeGUIDs.end(); ++itr) { if (GameObject* pExplosive = instance->GetGameObject(*itr)) { pExplosive->Use(pBlastmaster); } } m_luiSpawnedExplosiveChargeGUIDs.clear(); break; } return; case TYPE_THERMAPLUGG: m_auiEncounter[1] = uiData; if (uiData == IN_PROGRESS) { // Make Door locked if (GameObject* pDoor = GetSingleGameObjectFromStorage(GO_THE_FINAL_CHAMBER)) { pDoor->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); if (pDoor->getLootState() == GO_ACTIVATED) { pDoor->ResetDoorOrButton(); } } // Always directly activates this bomb-face DoActivateBombFace(2); } else if (uiData == DONE || uiData == FAIL) { // Make Door unlocked again if (GameObject* pDoor = GetSingleGameObjectFromStorage(GO_THE_FINAL_CHAMBER)) { pDoor->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); if (pDoor->getLootState() == GO_READY) { pDoor->UseDoorOrButton(); } } // Deactivate all remaining BombFaces for (uint8 i = 0; i < MAX_GNOME_FACES; ++i) { DoDeactivateBombFace(i); } } break; } if (uiData == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_trial_of_the_crusader::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_WIPE_COUNT: if (IsHeroicDifficulty()) DoUpdateWorldState(WORLD_STATE_WIPES_COUNT, MAX_WIPES_ALLOWED - m_auiEncounter[TYPE_WIPE_COUNT] >= 0 ? MAX_WIPES_ALLOWED - m_auiEncounter[TYPE_WIPE_COUNT] : 0); m_auiEncounter[uiType] = uiData; break; case TYPE_NORTHREND_BEASTS: if (uiData == SPECIAL) { if (Creature* pTirion = GetSingleCreatureFromStorage(NPC_TIRION_A)) DoScriptText(m_auiEncounter[uiType] != FAIL ? SAY_TIRION_RAID_INTRO_LONG : SAY_RAID_TRIALS_INTRO, pTirion); StartNextDialogueText(TYPE_NORTHREND_BEASTS); } else if (uiData == FAIL) { SetData(TYPE_WIPE_COUNT, m_auiEncounter[TYPE_WIPE_COUNT] + 1); StartNextDialogueText(SAY_TIRION_BEAST_WIPE); } else if (uiData == DONE) StartNextDialogueText(SAY_TIRION_BEAST_SLAY); m_auiEncounter[uiType] = uiData; break; case TYPE_JARAXXUS: if (uiData == SPECIAL) // TODO - What happen in wipe case? StartNextDialogueText(TYPE_JARAXXUS); else if (uiData == FAIL) { SetData(TYPE_WIPE_COUNT, m_auiEncounter[TYPE_WIPE_COUNT] + 1); StartNextDialogueText(NPC_RAMSEY_2); } else if (uiData == DONE) StartNextDialogueText(SAY_JARAXXUS_DEATH); m_auiEncounter[uiType] = uiData; break; case TYPE_FACTION_CHAMPIONS: if (uiData == SPECIAL) StartNextDialogueText(m_auiEncounter[uiType] != FAIL ? SAY_TIRION_PVP_INTRO_1 : TYPE_FACTION_CHAMPIONS); else if (uiData == FAIL) { SetData(TYPE_WIPE_COUNT, m_auiEncounter[TYPE_WIPE_COUNT] + 1); StartNextDialogueText(NPC_RAMSEY_3); } else if (uiData == DONE) { DoRespawnGameObject(GO_CRUSADERS_CACHE, 60 * MINUTE); StartNextDialogueText(SAY_VARIAN_PVP_A_WIN); } m_auiEncounter[uiType] = uiData; break; case TYPE_TWIN_VALKYR: if (uiData == SPECIAL) { if (Creature* pTirion = GetSingleCreatureFromStorage(NPC_TIRION_A)) DoScriptText(m_auiEncounter[uiType] != FAIL ? SAY_TIRION_TWINS_INTRO : SAY_RAID_INTRO_SHORT, pTirion); StartNextDialogueText(TYPE_TWIN_VALKYR); } else if (uiData == FAIL) { SetData(TYPE_WIPE_COUNT, m_auiEncounter[TYPE_WIPE_COUNT] + 1); StartNextDialogueText(NPC_RAMSEY_4); } else if (uiData == DONE) StartNextDialogueText(EVENT_TWINS_KILLED); m_auiEncounter[uiType] = uiData; break; case TYPE_ANUBARAK: if (uiData == SPECIAL) StartNextDialogueText(TYPE_ANUBARAK); else if (uiData == FAIL) SetData(TYPE_WIPE_COUNT, m_auiEncounter[TYPE_WIPE_COUNT] + 1); else if (uiData == DONE) DoHandleEventEpilogue(); // Handle combat door if (uiData != SPECIAL) DoUseDoorOrButton(GO_WEB_DOOR); m_auiEncounter[uiType] = uiData; break; default: error_log("SD2: Instance Trial of The Crusader: ERROR SetData = %u for type %u does not exist/not implemented.", uiType, uiData); return; } if (uiData == DONE || uiType == TYPE_WIPE_COUNT) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_icecrown_citadel::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_MARROWGAR: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_MARROWGAR_DOOR); if (uiData == DONE) { DoUseDoorOrButton(GO_ICEWALL_1); DoUseDoorOrButton(GO_ICEWALL_2); // Note: this door use may not be correct. In theory the door should be already opened DoUseDoorOrButton(GO_ORATORY_DOOR); } break; case TYPE_LADY_DEATHWHISPER: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_ORATORY_DOOR); // ToDo: set the elevateor in motion when TYPE_LADY_DEATHWHISPER == DONE break; case TYPE_GUNSHIP_BATTLE: m_auiEncounter[uiType] = uiData; if (uiData == DONE) DoRespawnGameObject(m_uiTeam == ALLIANCE ? GO_GUNSHIP_ARMORY_A : GO_GUNSHIP_ARMORY_H, 60 * MINUTE); break; case TYPE_DEATHBRINGER_SAURFANG: m_auiEncounter[uiType] = uiData; if (uiData == DONE) { DoUseDoorOrButton(GO_SAURFANG_DOOR); DoRespawnGameObject(GO_SAURFANG_CACHE, 60 * MINUTE); // Note: these doors may not be correct. In theory the doors should be already opened DoUseDoorOrButton(GO_SCIENTIST_DOOR); DoUseDoorOrButton(GO_CRIMSON_HALL_DOOR); DoUseDoorOrButton(GO_GREEN_DRAGON_ENTRANCE); } break; case TYPE_FESTERGUT: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_ORANGE_PLAGUE); if (uiData == DONE) DoToggleGameObjectFlags(GO_ORANGE_VALVE, GO_FLAG_NO_INTERACT, false); break; case TYPE_ROTFACE: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_GREEN_PLAGUE); if (uiData == DONE) DoToggleGameObjectFlags(GO_GREEN_VALVE, GO_FLAG_NO_INTERACT, false); break; case TYPE_PROFESSOR_PUTRICIDE: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_SCIENTIST_DOOR); break; case TYPE_BLOOD_PRINCE_COUNCIL: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_CRIMSON_HALL_DOOR); if (uiData == DONE) { DoUseDoorOrButton(GO_COUNCIL_DOOR_1); DoUseDoorOrButton(GO_COUNCIL_DOOR_2); } break; case TYPE_QUEEN_LANATHEL: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_BLOODPRINCE_DOOR); if (uiData == DONE) DoUseDoorOrButton(GO_ICECROWN_GRATE); break; case TYPE_VALITHRIA: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_GREEN_DRAGON_ENTRANCE); // Side doors DoUseDoorOrButton(GO_VALITHRIA_DOOR_1); DoUseDoorOrButton(GO_VALITHRIA_DOOR_2); // Some doors are used only in 25 man mode if (instance->GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL || instance->GetDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC) { DoUseDoorOrButton(GO_VALITHRIA_DOOR_3); DoUseDoorOrButton(GO_VALITHRIA_DOOR_4); } if (uiData == DONE) { DoUseDoorOrButton(GO_GREEN_DRAGON_EXIT); DoUseDoorOrButton(GO_SINDRAGOSA_ENTRANCE); DoRespawnGameObject(GO_DREAMWALKER_CACHE, 60 * MINUTE); } break; case TYPE_SINDRAGOSA: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_SINDRAGOSA_ENTRANCE); break; case TYPE_LICH_KING: m_auiEncounter[uiType] = uiData; break; default: script_error_log("Instance Icecrown Citadel: ERROR SetData = %u for type %u does not exist/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_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << m_auiEncounter[6] << " " << m_auiEncounter[7] << " " << m_auiEncounter[8] << " " << m_auiEncounter[9] << " " << m_auiEncounter[10] << " " << m_auiEncounter[11]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void SetData(uint32 type, uint32 data) { switch (type) { case DATA_PRINCEKELESETH_EVENT: m_auiEncounter[0] = data; break; case DATA_SKARVALD_DALRONN_EVENT: m_auiEncounter[1] = data; break; case DATA_INGVAR_EVENT: if (data == DONE) { HandleGameObject(portcullis[0], true); HandleGameObject(portcullis[1], true); } m_auiEncounter[2] = data; break; case EVENT_FORGE_1: if (data == NOT_STARTED) { HandleGameObject(forge_bellow[0], false); HandleGameObject(forge_fire[0], false); HandleGameObject(forge_anvil[0], false); }else { HandleGameObject(forge_bellow[0], true); HandleGameObject(forge_fire[0], true); HandleGameObject(forge_anvil[0], true); } forge_event[0] = data; break; case EVENT_FORGE_2: if (data == NOT_STARTED) { HandleGameObject(forge_bellow[1], false); HandleGameObject(forge_fire[1], false); HandleGameObject(forge_anvil[1], false); }else { HandleGameObject(forge_bellow[1], true); HandleGameObject(forge_fire[1], true); HandleGameObject(forge_anvil[1], true); } forge_event[1] = data; break; case EVENT_FORGE_3: if (data == NOT_STARTED) { HandleGameObject(forge_bellow[2], false); HandleGameObject(forge_fire[2], false); HandleGameObject(forge_anvil[2], false); }else { HandleGameObject(forge_bellow[2], true); HandleGameObject(forge_fire[2], true); HandleGameObject(forge_anvil[2], true); } forge_event[2] = data; break; } if (data == DONE) { SaveToDB(); } }
void instance_blackrock_spire::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_ROOM_EVENT: if (uiData == DONE) DoUseDoorOrButton(GO_EMBERSEER_IN); m_auiEncounter[uiType] = uiData; break; case TYPE_EMBERSEER: // Don't set the same data twice if (m_auiEncounter[uiType] == uiData) break; // Combat door DoUseDoorOrButton(GO_DOORS); // Respawn all incarcerators and reset the runes on FAIL if (uiData == FAIL) { for (GuidList::const_iterator itr = m_lIncarceratorGUIDList.begin(); itr != m_lIncarceratorGUIDList.end(); ++itr) { if (Creature* pIncarcerator = instance->GetCreature(*itr)) { if (!pIncarcerator->isAlive()) pIncarcerator->Respawn(); pIncarcerator->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PASSIVE); } } DoUseEmberseerRunes(true); } else if (uiData == DONE) { DoUseEmberseerRunes(); DoUseDoorOrButton(GO_EMBERSEER_OUT); } m_auiEncounter[uiType] = uiData; break; case TYPE_FLAMEWREATH: if (uiData == FAIL) { m_uiFlamewreathEventTimer = 0; m_uiFlamewreathWaveCount = 0; } m_auiEncounter[uiType] = uiData; break; case TYPE_STADIUM: // Don't set the same data twice if (m_auiEncounter[uiType] == uiData) break; // Combat door DoUseDoorOrButton(GO_GYTH_ENTRY_DOOR); // Start event if (uiData == IN_PROGRESS) StartNextDialogueText(SAY_NEFARIUS_INTRO_1); else if (uiData == DONE) { // Event complete: remove the summoned spectators for (GuidList::const_iterator itr = m_lStadiumSpectatorsGUIDList.begin(); itr != m_lStadiumSpectatorsGUIDList.end(); ++itr) { Creature* pSpectator = instance->GetCreature(*itr); if (pSpectator) pSpectator->ForcedDespawn(); } DoUseDoorOrButton(GO_GYTH_EXIT_DOOR); } else if (uiData == FAIL) { // Despawn Nefarius, Rend and the spectators on fail (the others are despawned OnCreatureEvade()) if (Creature* pNefarius = GetSingleCreatureFromStorage(NPC_LORD_VICTOR_NEFARIUS)) pNefarius->ForcedDespawn(); if (Creature* pRend = GetSingleCreatureFromStorage(NPC_REND_BLACKHAND)) pRend->ForcedDespawn(); if (Creature* pGyth = GetSingleCreatureFromStorage(NPC_GYTH)) pGyth->ForcedDespawn(); for (GuidList::const_iterator itr = m_lStadiumSpectatorsGUIDList.begin(); itr != m_lStadiumSpectatorsGUIDList.end(); ++itr) { Creature* pSpectator = instance->GetCreature(*itr); if (pSpectator) pSpectator->ForcedDespawn(); } m_uiStadiumEventTimer = 0; m_uiStadiumMobsAlive = 0; m_uiStadiumWaves = 0; } m_auiEncounter[uiType] = uiData; break; case TYPE_DRAKKISATH: case TYPE_VALTHALAK: m_auiEncounter[uiType] = uiData; break; } if (uiData == DONE) { OUT_SAVE_INST_DATA; std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_ulduar::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_LEVIATHAN: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_SHIELD_WALL); if (uiData == DONE) { DoUseDoorOrButton(GO_XT002_GATE); DoUseDoorOrButton(GO_LEVIATHAN_GATE); } break; case TYPE_IGNIS: m_auiEncounter[uiType] = uiData; break; case TYPE_RAZORSCALE: m_auiEncounter[uiType] = uiData; break; case TYPE_XT002: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_XT002_GATE); break; case TYPE_ASSEMBLY: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_IRON_ENTRANCE_DOOR); if (uiData == DONE) DoUseDoorOrButton(GO_ARCHIVUM_DOOR); break; case TYPE_KOLOGARN: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_SHATTERED_DOOR); if (uiData == DONE) { DoRespawnGameObject(instance->IsRegularDifficulty() ? GO_CACHE_OF_LIVING_STONE : GO_CACHE_OF_LIVING_STONE_H, 30*MINUTE); if (GameObject* pBridge = GetSingleGameObjectFromStorage(GO_KOLOGARN_BRIDGE)) pBridge->SetGoState(GO_STATE_READY); } break; case TYPE_AURIAYA: m_auiEncounter[uiType] = uiData; break; // Keepers case TYPE_MIMIRON: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_MIMIRON_DOOR_1); DoUseDoorOrButton(GO_MIMIRON_DOOR_2); DoUseDoorOrButton(GO_MIMIRON_DOOR_3); if (uiData == DONE) { if (GetData(TYPE_MIMIRON_HARD) != DONE) DoRespawnGameObject(instance->IsRegularDifficulty() ? GO_CACHE_OF_INOV : GO_CACHE_OF_INOV_H, 30*MINUTE); SpawnFriendlyKeeper(NPC_MIMIRON_IMAGE); } break; case TYPE_HODIR: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_HODIR_ENTER); if (uiData == DONE) { DoUseDoorOrButton(GO_HODIR_ICE_WALL); DoUseDoorOrButton(GO_HODIR_EXIT); DoRespawnGameObject(instance->IsRegularDifficulty() ? GO_CACHE_OF_WINTER : GO_CACHE_OF_WINTER_H, 30*MINUTE); SpawnFriendlyKeeper(NPC_HODIR_IMAGE); } break; case TYPE_THORIM: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_LIGHTNING_FIELD); if (uiData == IN_PROGRESS) DoUseDoorOrButton(GO_DARK_IRON_PORTCULIS); if (uiData == DONE) { if (GetData(TYPE_THORIM_HARD) != DONE) DoRespawnGameObject(instance->IsRegularDifficulty() ? GO_CACHE_OF_STORMS : GO_CACHE_OF_STORMS_H, 30*MINUTE); SpawnFriendlyKeeper(NPC_THORIM_IMAGE); } break; case TYPE_FREYA: m_auiEncounter[uiType] = uiData; if (uiData == DONE) SpawnFriendlyKeeper(NPC_FREYA_IMAGE); break; // Prison case TYPE_VEZAX: m_auiEncounter[uiType] = uiData; if (uiData == DONE) DoUseDoorOrButton(GO_VEZAX_GATE); break; case TYPE_YOGGSARON: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_YOGG_GATE); break; // Celestial Planetarium case TYPE_ALGALON: m_auiEncounter[uiType] = uiData; //TODO: need to find the proper way to use these DoUseDoorOrButton(GO_CELESTIAL_DOOR); DoUseDoorOrButton(GO_UNIVERSE_FLOOR_CELESTIAL); if (uiData == DONE) DoRespawnGameObject(instance->IsRegularDifficulty() ? GO_GIFT_OF_OBSERVER : GO_GIFT_OF_OBSERVER_H, 30*MINUTE); break; // Hard modes case TYPE_LEVIATHAN_HARD: m_auiHardBoss[0] = uiData; // TODO: add extra loot break; case TYPE_XT002_HARD: m_auiHardBoss[1] = uiData; // TODO: add extra loot break; case TYPE_HODIR_HARD: m_auiHardBoss[2] = uiData; if (uiData == DONE) DoRespawnGameObject(instance->IsRegularDifficulty() ? GO_CACHE_OF_RARE_WINTER : GO_CACHE_OF_RARE_WINTER_H, 30*MINUTE); break; case TYPE_THORIM_HARD: m_auiHardBoss[3] = uiData; if (uiData == DONE) DoRespawnGameObject(instance->IsRegularDifficulty() ? GO_CACHE_OF_RARE_STORMS : GO_CACHE_OF_RARE_STORMS_H, 30*MINUTE); break; case TYPE_MIMIRON_HARD: m_auiHardBoss[4] = uiData; if (uiData == DONE) DoRespawnGameObject(instance->IsRegularDifficulty() ? GO_CACHE_OF_INOV_HARD : GO_CACHE_OF_INOV_HARD_H, 30*MINUTE); break; case TYPE_VEZAX_HARD: m_auiHardBoss[5] = uiData; // TODO: add extra loot break; case TYPE_YOGGSARON_HARD: m_auiHardBoss[6] = uiData; // TODO: add extra loot break; // Ulduar keepers case TYPE_KEEPER_HODIR: m_auiUlduarKeepers[0] = uiData; break; case TYPE_KEEPER_THORIM: m_auiUlduarKeepers[1] = uiData; break; case TYPE_KEEPER_FREYA: m_auiUlduarKeepers[2] = uiData; break; case TYPE_KEEPER_MIMIRON: m_auiUlduarKeepers[3] = uiData; break; } DoOpenMadnessDoorIfCan(); if (uiData == DONE || uiData == FAIL) { OUT_SAVE_INST_DATA; // Save all encounters, hard bosses, keepers and teleporters std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " << m_auiEncounter[6] << " " << m_auiEncounter[7] << " " << m_auiEncounter[8] << " " << m_auiEncounter[9] << " " << m_auiEncounter[10] << " " << m_auiEncounter[11] << " " << m_auiEncounter[12] << " " << m_auiEncounter[13] << " " << m_auiHardBoss[0] << " " << m_auiHardBoss[1] << " " << m_auiHardBoss[2] << " " << m_auiHardBoss[2] << " " << m_auiHardBoss[4] << " " << m_auiHardBoss[5] << " " << m_auiHardBoss[6] << " " << m_auiUlduarKeepers[0] << " " << m_auiUlduarKeepers[1] << " " << m_auiUlduarKeepers[2] << " " << m_auiUlduarKeepers[3]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }