void instance_blackrock_depths::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_RING_OF_LAW: // If finished the arena event after theldren fight if (uiData == DONE && m_auiEncounter[0] == SPECIAL) DoRespawnGameObject(GO_ARENA_SPOILS, HOUR); else if (uiData == DONE) { for (GuidSet::const_iterator itr = m_sArenaCrowdNpcGuids.begin(); itr != m_sArenaCrowdNpcGuids.end(); ++itr) { if (Creature* pSpectator = instance->GetCreature(*itr)) pSpectator->SetFactionTemporary(FACTION_ARENA_NEUTRAL, TEMPFACTION_RESTORE_RESPAWN); } } m_auiEncounter[0] = uiData; break; case TYPE_VAULT: if (uiData == SPECIAL) { ++m_uiCofferDoorsOpened; if (m_uiCofferDoorsOpened == MAX_RELIC_DOORS) { SetData(TYPE_VAULT, IN_PROGRESS); Creature* pConstruct = NULL; // Activate vault constructs for (GuidSet::const_iterator itr = m_sVaultNpcGuids.begin(); itr != m_sVaultNpcGuids.end(); ++itr) { pConstruct = instance->GetCreature(*itr); if (pConstruct) pConstruct->RemoveAurasDueToSpell(SPELL_STONED); } if (!pConstruct) return; // Summon doomgrip pConstruct->SummonCreature(NPC_WATCHER_DOOMGRIP, aVaultPositions[0], aVaultPositions[1], aVaultPositions[2], aVaultPositions[3], TEMPSUMMON_DEAD_DESPAWN, 0); } // No need to store in this case return; } if (uiData == DONE) { DoUseDoorOrButton(GO_SECRET_DOOR); DoToggleGameObjectFlags(GO_SECRET_SAFE, GO_FLAG_NO_INTERACT, false); } m_auiEncounter[1] = uiData; break; case TYPE_ROCKNOT: if (uiData == SPECIAL) ++m_uiBarAleCount; else { if (uiData == DONE) { HandleBarPatrons(PATRON_PISSED); SetBarDoorIsOpen(); } m_auiEncounter[2] = uiData; } break; case TYPE_TOMB_OF_SEVEN: // Don't set the same data twice if (uiData == m_auiEncounter[3]) break; // Combat door DoUseDoorOrButton(GO_TOMB_ENTER); // Start the event if (uiData == IN_PROGRESS) DoCallNextDwarf(); if (uiData == FAIL) { // Reset dwarfes for (uint8 i = 0; i < MAX_DWARFS; ++i) { if (Creature* pDwarf = GetSingleCreatureFromStorage(aTombDwarfes[i])) { if (!pDwarf->isAlive()) pDwarf->Respawn(); } } m_uiDwarfRound = 0; m_uiDwarfFightTimer = 0; } if (uiData == DONE) { DoRespawnGameObject(GO_CHEST_SEVEN, HOUR); DoUseDoorOrButton(GO_TOMB_EXIT); } m_auiEncounter[3] = uiData; break; case TYPE_LYCEUM: if (uiData == DONE) { DoUseDoorOrButton(GO_GOLEM_ROOM_N); DoUseDoorOrButton(GO_GOLEM_ROOM_S); } m_auiEncounter[4] = uiData; break; case TYPE_IRON_HALL: switch (uiData) { case IN_PROGRESS: DoUseDoorOrButton(GO_GOLEM_ROOM_N); DoUseDoorOrButton(GO_GOLEM_ROOM_S); break; case FAIL: DoUseDoorOrButton(GO_GOLEM_ROOM_N); DoUseDoorOrButton(GO_GOLEM_ROOM_S); break; case DONE: DoUseDoorOrButton(GO_GOLEM_ROOM_N); DoUseDoorOrButton(GO_GOLEM_ROOM_S); DoUseDoorOrButton(GO_THRONE_ROOM); break; } m_auiEncounter[5] = uiData; break; case TYPE_QUEST_JAIL_BREAK: m_auiEncounter[6] = uiData; return; case TYPE_FLAMELASH: for (int i = 0; i < MAX_DWARF_RUNES; ++i) DoUseDoorOrButton(GO_DWARFRUNE_A01 + i); return; case TYPE_HURLEY: if (uiData == SPECIAL) { ++m_uiBrokenKegs; if (m_uiBrokenKegs == 3) { if (Creature* pPlugger = GetSingleCreatureFromStorage(NPC_PLUGGER_SPAZZRING)) { // Summon Hurley Blackbreath Creature* pHurley = pPlugger->SummonCreature(NPC_HURLEY_BLACKBREATH, aHurleyPositions[0], aHurleyPositions[1], aHurleyPositions[2], aHurleyPositions[3], TEMPSUMMON_DEAD_DESPAWN, 0); if (!pHurley) return; // Summon cronies around Hurley for (uint8 i = 0; i < MAX_CRONIES; ++i) { float fX, fY, fZ; pPlugger->GetRandomPoint(aHurleyPositions[0], aHurleyPositions[1], aHurleyPositions[2], 2.0f, fX, fY, fZ); if (Creature* pSummoned = pPlugger->SummonCreature(NPC_BLACKBREATH_CRONY, fX, fY, fZ, aHurleyPositions[3], TEMPSUMMON_DEAD_DESPAWN, 0)) { pSummoned->SetWalk(false); // The cronies should not engage anyone until their boss does so // the linking is done by DB pSummoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PASSIVE); // The movement toward the kegs is handled by Hurley EscortAI // and we want the cronies to follow him there pSummoned->GetMotionMaster()->MoveFollow(pHurley, 1.0f, 0); } } SetData(TYPE_HURLEY, IN_PROGRESS); } } } else m_auiEncounter[8] = uiData; break; case TYPE_BRIDGE: m_auiEncounter[9] = uiData; return; case TYPE_BAR: if (uiData == IN_PROGRESS) HandleBarPatrol(0); m_auiEncounter[10] = uiData; break; case TYPE_PLUGGER: if (uiData == SPECIAL) { if (Creature* pPlugger = GetSingleCreatureFromStorage(NPC_PLUGGER_SPAZZRING)) { ++m_uiStolenAles; if (m_uiStolenAles == 3) uiData = IN_PROGRESS; } } m_auiEncounter[11] = uiData; break; case TYPE_NAGMARA: m_auiEncounter[12] = 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_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_draktharon_keep::SetData(uint32 uiType, uint32 uiData) { switch(uiType) { case TYPE_TROLLGORE: if (uiData == IN_PROGRESS) m_bTrollgoreConsume = true; if (uiData == SPECIAL) m_bTrollgoreConsume = false; m_auiEncounter[uiType] = uiData; break; case TYPE_NOVOS: if (uiData == IN_PROGRESS) { // Sort the dummies DoSortNovosDummies(); // Cast some visual spells Creature* pTarget = instance->GetCreature(m_novosChannelGuid); for (uint8 i = 0; i < MAX_CRYSTALS; ++i) { Creature* pCaster = instance->GetCreature(m_aNovosCrystalInfo[i].m_channelGuid); if (pCaster && pTarget) pCaster->CastSpell(pTarget, SPELL_BEAM_CHANNEL, false); m_aNovosCrystalInfo[i].m_bWasUsed = false; } // Achievement related m_bNovosAddGrounded = false; } else if (uiData == SPECIAL) { // Achievement related m_bNovosAddGrounded = true; } else if (uiData == FAIL) { // Interrupt casted spells for (uint8 i = 0; i < MAX_CRYSTALS; ++i) { Creature* pDummy = instance->GetCreature(m_aNovosCrystalInfo[i].m_channelGuid); if (pDummy) pDummy->InterruptNonMeleeSpells(false); // And reset used crystals if (m_aNovosCrystalInfo[i].m_bWasUsed) DoUseDoorOrButton(m_aNovosCrystalInfo[i].m_crystalGuid); } } m_auiEncounter[uiType] = uiData; break; case TYPE_KING_DRED: if (uiData == IN_PROGRESS) m_uiDreadAddsKilled = 0; m_auiEncounter[uiType] = uiData; break; case TYPE_THARONJA: 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 SetData(uint32 uiType, uint32 uiData) { switch(uiType) { case TYPE_MAGTHERIDON_EVENT: m_auiEncounter[0] = uiData; if (uiData == NOT_STARTED) m_uiRespawnTimer = 10000; if (uiData != IN_PROGRESS) { if (GameObject* pDoor = instance->GetGameObject(m_uiDoorGUID)) pDoor->SetGoState(GO_STATE_ACTIVE); } break; case TYPE_CHANNELER_EVENT: switch(uiData) { case NOT_STARTED: // Reset all channelers once one is reset. if (m_auiEncounter[1] != NOT_STARTED) { m_auiEncounter[1] = NOT_STARTED; if (ChannelerGUID.empty()) { debug_log("½Å±¾¿â£º Instance Magtheridon: Channeler GUID list are empty."); break; } for(std::set<uint64>::iterator i = ChannelerGUID.begin(); i != ChannelerGUID.end(); ++i) { if (Creature* pChanneler = instance->GetCreature(*i)) { if (pChanneler->isAlive()) pChanneler->AI()->EnterEvadeMode(); else pChanneler->Respawn(); } } m_uiCageTimer = 0; if (GameObject* pDoor = instance->GetGameObject(m_uiDoorGUID)) pDoor->SetGoState(GO_STATE_ACTIVE); } break; case IN_PROGRESS: // Event start. if (m_auiEncounter[1] != IN_PROGRESS) { m_auiEncounter[1] = IN_PROGRESS; // Let all five channelers aggro. for(std::set<uint64>::iterator i = ChannelerGUID.begin(); i != ChannelerGUID.end(); ++i) { Creature* pChanneler = instance->GetCreature(*i); if (pChanneler && pChanneler->isAlive()) AttackNearestTarget(pChanneler); } // Magtheridon breaks free after two minutes. Creature* pMagtheridon = instance->GetCreature(m_uiMagtheridonGUID); if (pMagtheridon && pMagtheridon->isAlive()) m_uiCageTimer = 120000; if (GameObject* pDoor = instance->GetGameObject(m_uiDoorGUID)) pDoor->SetGoState(GO_STATE_READY); } break; case DONE: // Add buff and check if all channelers are dead. for(std::set<uint64>::iterator i = ChannelerGUID.begin(); i != ChannelerGUID.end(); ++i) { Creature* pChanneler = instance->GetCreature(*i); if (pChanneler && pChanneler->isAlive()) { //Channeler->InterruptNonMeleeSpells(false); //Channeler->CastSpell(Channeler, SPELL_SOUL_TRANSFER, false); uiData = IN_PROGRESS; break; } } break; } m_auiEncounter[1] = uiData; break; case TYPE_HALL_COLLAPSE: // IN_PROGRESS - collapse / NOT_STARTED - reset for(std::set<uint64>::iterator i = ColumnGUID.begin(); i != ColumnGUID.end(); ++i) { DoUseDoorOrButton(*i); } break; } }
void SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_ATTUMEN: m_auiEncounter[0] = uiData; break; case TYPE_MOROES: if (m_auiEncounter[1] != DONE) m_auiEncounter[1] = uiData; break; case TYPE_MAIDEN: m_auiEncounter[2] = uiData; break; case TYPE_OPTIONAL_BOSS: m_auiEncounter[3] = uiData; break; case TYPE_OPERA: m_auiEncounter[4] = uiData; if (uiData == DONE) { DoUseDoorOrButton(m_uiStageDoorLeftGUID); DoUseDoorOrButton(m_uiStageDoorRightGUID); if (GameObject* pSideEntrance = instance->GetGameObject(m_uiSideEntranceDoor)) pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); } break; case TYPE_CURATOR: m_auiEncounter[5] = uiData; break; case TYPE_ARAN: m_auiEncounter[6] = uiData; if (uiData != IN_PROGRESS) DoUseDoorOrButton(m_uiLibraryDoor); break; case TYPE_TERESTIAN: m_auiEncounter[7] = uiData; break; case TYPE_NETHERSPITE: m_auiEncounter[8] = uiData; DoUseDoorOrButton(m_uiMassiveDoor); break; case TYPE_CHESS: if (uiData == DONE) DoRespawnGameObject(m_uiDustCoveredChest,DAY); m_auiEncounter[9] = uiData; break; case TYPE_MALCHEZZAR: m_auiEncounter[10] = uiData; break; case TYPE_NIGHTBANE: m_auiEncounter[11] = uiData; break; case DATA_OPERA_OZ_DEATHCOUNT: if (uiData == SPECIAL) ++m_uiOzDeathCount; else if (uiData == IN_PROGRESS) m_uiOzDeathCount = 0; 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]; strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void SetData(uint32 uiType, uint32 uiData) { switch(uiType) { case TYPE_ANUB_REKHAN: m_auiEncounter[0] = uiData; DoUseDoorOrButton(m_uiAnubDoorGUID); if (uiData == DONE) DoUseDoorOrButton(m_uiAnubGateGUID); break; case TYPE_FAERLINA: m_auiEncounter[1] = uiData; DoUseDoorOrButton(m_uiFaerWebGUID); if (uiData == DONE) { DoUseDoorOrButton(m_uiFaerDoorGUID); DoUseDoorOrButton(m_uiMaexOuterGUID); } break; case TYPE_MAEXXNA: m_auiEncounter[2] = uiData; DoUseDoorOrButton(m_uiMaexInnerGUID, uiData); if (uiData == DONE) { DoUseDoorOrButton(m_uiAracEyeRampGUID); DoRespawnGameObject(m_uiAracPortalGUID, 30*MINUTE); } break; case TYPE_NOTH: m_auiEncounter[3] = uiData; DoUseDoorOrButton(m_uiNothEntryDoorGUID); if (uiData == DONE) { DoUseDoorOrButton(m_uiNothExitDoorGUID); DoUseDoorOrButton(m_uiHeigEntryDoorGUID); } break; case TYPE_HEIGAN: m_auiEncounter[4] = uiData; DoUseDoorOrButton(m_uiHeigEntryDoorGUID); if (uiData == DONE) DoUseDoorOrButton(m_uiHeigExitDoorGUID); break; case TYPE_LOATHEB: m_auiEncounter[5] = uiData; DoUseDoorOrButton(m_uiLoathebDoorGUID); if (uiData == DONE) { DoUseDoorOrButton(m_uiPlagEyeRampGUID); DoRespawnGameObject(m_uiPlagPortalGUID, 30*MINUTE); } break; case TYPE_RAZUVIOUS: m_auiEncounter[6] = uiData; if (uiData == DONE) DoUseDoorOrButton(m_uiGothikEntryDoorGUID); break; case TYPE_GOTHIK: m_auiEncounter[7] = uiData; DoUseDoorOrButton(m_uiGothikEntryDoorGUID); if (uiData == DONE) { DoUseDoorOrButton(m_uiGothikExitDoorGUID); DoUseDoorOrButton(m_uiHorsemenDoorGUID); } break; case TYPE_FOUR_HORSEMEN: m_auiEncounter[8] = uiData; DoUseDoorOrButton(m_uiHorsemenDoorGUID); if (uiData == DONE) { DoUseDoorOrButton(m_uiMiliEyeRampGUID); DoRespawnGameObject(m_uiMiliPortalGUID, 30*MINUTE); DoRespawnGameObject(m_uiHorsemenChestGUID, 30*MINUTE); } break; case TYPE_PATCHWERK: m_auiEncounter[9] = uiData; if (uiData == DONE) DoUseDoorOrButton(m_uiPathExitDoorGUID); break; case TYPE_GROBBULUS: m_auiEncounter[10] = uiData; break; case TYPE_GLUTH: m_auiEncounter[11] = uiData; if (uiData == DONE) { DoUseDoorOrButton(m_uiGlutExitDoorGUID); DoUseDoorOrButton(m_uiThadDoorGUID); } break; case TYPE_THADDIUS: m_auiEncounter[12] = uiData; DoUseDoorOrButton(m_uiThadDoorGUID, uiData); if (uiData == DONE) { DoUseDoorOrButton(m_uiConsEyeRampGUID); DoRespawnGameObject(m_uiConsPortalGUID, 30*MINUTE); } break; case TYPE_SAPPHIRON: m_auiEncounter[13] = uiData; if (uiData == DONE) DoUseDoorOrButton(m_uiKelthuzadDoorGUID); break; case TYPE_KELTHUZAD: m_auiEncounter[14] = 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]; strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_blackrock_depths::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_RING_OF_LAW: // If finished the arena event after theldren fight if (uiData == DONE && m_auiEncounter[0] == SPECIAL) DoRespawnGameObject(GO_ARENA_SPOILS, HOUR); else if (uiData == DONE) { for (GuidSet::const_iterator itr = m_sArenaCrowdNpcGuids.begin(); itr != m_sArenaCrowdNpcGuids.end(); ++itr) { if (Creature* pSpectator = instance->GetCreature(*itr)) pSpectator->SetFactionTemporary(FACTION_ARENA_NEUTRAL, TEMPFACTION_RESTORE_RESPAWN); } } m_auiEncounter[0] = uiData; break; case TYPE_VAULT: if (uiData == SPECIAL) { ++m_uiCofferDoorsOpened; if (m_uiCofferDoorsOpened == MAX_RELIC_DOORS) { SetData(TYPE_VAULT, IN_PROGRESS); Creature* pConstruct = NULL; // Activate vault constructs for (GuidSet::const_iterator itr = m_sVaultNpcGuids.begin(); itr != m_sVaultNpcGuids.end(); ++itr) { pConstruct = instance->GetCreature(*itr); if (pConstruct) pConstruct->RemoveAurasDueToSpell(SPELL_STONED); } if (!pConstruct) return; // Summon doomgrip pConstruct->SummonCreature(NPC_WATCHER_DOOMGRIP, aVaultPositions[0], aVaultPositions[1], aVaultPositions[2], aVaultPositions[3], TEMPSUMMON_DEAD_DESPAWN, 0); } // No need to store in this case return; } if (uiData == DONE) { DoUseDoorOrButton(GO_SECRET_DOOR); DoToggleGameObjectFlags(GO_SECRET_SAFE, GO_FLAG_NO_INTERACT, false); } m_auiEncounter[1] = uiData; break; case TYPE_BAR: if (uiData == SPECIAL) ++m_uiBarAleCount; else m_auiEncounter[2] = uiData; break; case TYPE_TOMB_OF_SEVEN: // Don't set the same data twice if (uiData == m_auiEncounter[3]) break; // Combat door DoUseDoorOrButton(GO_TOMB_ENTER); // Start the event if (uiData == IN_PROGRESS) DoCallNextDwarf(); if (uiData == FAIL) { // Reset dwarfes for (uint8 i = 0; i < MAX_DWARFS; ++i) { if (Creature* pDwarf = GetSingleCreatureFromStorage(aTombDwarfes[i])) { if (!pDwarf->isAlive()) pDwarf->Respawn(); } } m_uiDwarfRound = 0; m_uiDwarfFightTimer = 0; } if (uiData == DONE) { DoRespawnGameObject(GO_CHEST_SEVEN, HOUR); DoUseDoorOrButton(GO_TOMB_EXIT); } m_auiEncounter[3] = uiData; break; case TYPE_LYCEUM: if (uiData == DONE) { DoUseDoorOrButton(GO_GOLEM_ROOM_N); DoUseDoorOrButton(GO_GOLEM_ROOM_S); } m_auiEncounter[4] = uiData; break; case TYPE_IRON_HALL: switch (uiData) { case IN_PROGRESS: DoUseDoorOrButton(GO_GOLEM_ROOM_N); DoUseDoorOrButton(GO_GOLEM_ROOM_S); break; case FAIL: DoUseDoorOrButton(GO_GOLEM_ROOM_N); DoUseDoorOrButton(GO_GOLEM_ROOM_S); break; case DONE: DoUseDoorOrButton(GO_GOLEM_ROOM_N); DoUseDoorOrButton(GO_GOLEM_ROOM_S); DoUseDoorOrButton(GO_THRONE_ROOM); break; } m_auiEncounter[5] = uiData; break; case TYPE_QUEST_JAIL_BREAK: m_auiEncounter[6] = uiData; return; case TYPE_FLAMELASH: for (int i = 0; i < MAX_DWARF_RUNES; ++i) DoUseDoorOrButton(GO_DWARFRUNE_A01 + i); 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_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_karazhan::DoFinishChessEvent() { // 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, TRIGGERED_OLD_TRIGGERED); pMedivh->CastSpell(pMedivh, SPELL_GAME_OVER, TRIGGERED_OLD_TRIGGERED); pMedivh->CastSpell(pMedivh, SPELL_CLEAR_BOARD, TRIGGERED_OLD_TRIGGERED); } // remove silence debuff Map::PlayerList const& players = instance->GetPlayers(); for (const auto& player : players) { if (Player* pPlayer = player.getSource()) pPlayer->RemoveAurasDueToSpell(SPELL_GAME_IN_SESSION); } // chess figures stop attacking for (ObjectGuid guid : m_lChessPiecesAlliance) { if (Creature* pTemp = instance->GetCreature(guid)) { pTemp->RemoveAurasDueToSpell(32226); // remove attack timer if (Unit* player = pTemp->GetCharmer()) { player->RemoveAurasDueToSpell(30019); // remove charm effect on game end/fail } } } for (ObjectGuid guid : m_lChessPiecesHorde) { if (Creature* pTemp = instance->GetCreature(guid)) { pTemp->RemoveAurasDueToSpell(32226); if (Unit* player = pTemp->GetCharmer()) { player->RemoveAurasDueToSpell(30019); } } } for (ObjectGuid guid : m_vChessSquares) { if (Creature* square = instance->GetCreature(guid)) { square->RemoveAurasDueToSpell(32745); // remove occupied square spells square->RemoveAurasDueToSpell(39400); } } m_bFriendlyGame = false; m_uiChessResetTimer = 35000; m_uiChessEndingTimer = 30000; }
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 = GetSingleCreatureFromStorage(NPC_OLD_IRONBARK)) { DoScriptText(SAY_IRONBARK_REDEEM, pIronbark); pIronbark->UpdateEntry(NPC_IRONBARK_REDEEMED); } } m_auiEncounter[uiType] = uiData; break; case TYPE_IRONBARK: 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(GO_CRUMBLE_WALL); m_bWallDestroyed = true; } DoUseDoorOrButton(GO_CORRUPT_VINE); if (!m_lFelvineShardGUIDs.empty()) { for(GUIDList::const_iterator i = m_lFelvineShardGUIDs.begin(); i != m_lFelvineShardGUIDs.end(); ++i) DoRespawnGameObject(*i); } } else if (uiData == SPECIAL && !m_bWallDestroyed) { DoUseDoorOrButton(GO_CRUMBLE_WALL); m_bWallDestroyed = true; } m_auiEncounter[uiType] = uiData; break; // West case TYPE_IMMOLTHAR: if (uiData == DONE) { if (Creature* pPrince = GetSingleCreatureFromStorage(NPC_PRINCE_TORTHELDRIN)) { DoScriptText(SAY_FREE_IMMOLTHAR, pPrince); pPrince->setFaction(FACTION_HOSTILE); // Despawn Chest-Aura if (GameObject* pChestAura = GetSingleGameObjectFromStorage(GO_PRINCES_CHEST_AURA)) 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_aCrystalGeneratorGuid[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_auiEncounter[9] << " " << m_auiEncounter[10]; m_strInstData = 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; // Baron ultimatum starts: summon Ysida in the cage if (Creature* pBaron = GetSingleCreatureFromStorage(NPC_BARON)) { DoOrSimulateScriptTextForThisInstance(SAY_ANNOUNCE_RUN_START, NPC_BARON); pBaron->SummonCreature(NPC_YSIDA, aStratholmeLocation[7].m_fX, aStratholmeLocation[7].m_fY, aStratholmeLocation[7].m_fZ, aStratholmeLocation[7].m_fO, TEMPSUMMON_DEAD_DESPAWN, 0); } 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_zigguratStorage[uiType - TYPE_BARONESS].m_doorGuid); } 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(GO_PORT_GAUNTLET); } uint32 uiCount = m_sAbomnationGUID.size(); for (GuidSet::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 GO_ZIGGURAT_DOOR_4 door after 10 secs, but it doesn't. skipping it for now. // However looks like that this door is no more closed DoUseDoorOrButton(GO_ZIGGURAT_DOOR_4); // No more handlng of Abomnations m_uiSlaugtherSquareTimer = 0; if (Creature* pBaron = GetSingleCreatureFromStorage(NPC_BARON)) { DoScriptText(SAY_ANNOUNCE_RAMSTEIN, pBaron); if (Creature* pRamstein = pBaron->SummonCreature(NPC_RAMSTEIN, aStratholmeLocation[2].m_fX, aStratholmeLocation[2].m_fY, aStratholmeLocation[2].m_fZ, aStratholmeLocation[2].m_fO, TEMPSUMMON_DEAD_DESPAWN, 0)) pRamstein->GetMotionMaster()->MovePoint(0, aStratholmeLocation[3].m_fX, aStratholmeLocation[3].m_fY, aStratholmeLocation[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(GO_PORT_GAUNTLET); if (uiData == DONE) { // Open side gate and start summoning skeletons DoUseDoorOrButton(GO_PORT_SLAUGHTER_GATE); // 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 = GetSingleCreatureFromStorage(NPC_BARON)) { for (uint8 i = 0; i < 5; ++i) { float fX, fY, fZ; pBaron->GetRandomPoint(aStratholmeLocation[6].m_fX, aStratholmeLocation[6].m_fY, aStratholmeLocation[6].m_fZ, 5.0f, fX, fY, fZ); if (Creature* pTemp = pBaron->SummonCreature(NPC_BLACK_GUARD, aStratholmeLocation[6].m_fX, aStratholmeLocation[6].m_fY, aStratholmeLocation[6].m_fZ, aStratholmeLocation[6].m_fO, TEMPSUMMON_DEAD_DESPAWN, 0)) m_luiGuardGUIDs.push_back(pTemp->GetObjectGuid()); } debug_log("SD2: Instance Stratholme - Slaugther event: Summoned 5 guards."); } } // Open Door again and stop Abomnation if (uiData == FAIL && m_auiEncounter[uiType] != FAIL) { DoUseDoorOrButton(GO_PORT_GAUNTLET); m_uiSlaugtherSquareTimer = 0; // Let already moving Abomnations stop for (GuidSet::const_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) { // Close Slaughterhouse door if needed if (m_auiEncounter[uiType] == FAIL) DoUseDoorOrButton(GO_PORT_GAUNTLET); // If Aurius was given the medaillon wait 5s before summoning him if (m_auiEncounter[TYPE_AURIUS] == SPECIAL) m_uiAuriusSummonTimer = 5000; } if (uiData == DONE) { // Players successfully engaged Baron within the time-limit of his ultimatum // Note: UpdateAI() prevents TYPE_BARON_RUN to be marked as FAILED if the // Baron is already engaged (in progress) when the ultimatum timer expires if (m_auiEncounter[TYPE_BARON_RUN] == IN_PROGRESS) { SetData(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); // Argent Dawn reputation reward pPlayer->CastSpell(pPlayer, SPELL_YSIDA_FREED, true); } } // Open cage, finish rescue event if (Creature* pYsida = GetSingleCreatureFromStorage(NPC_YSIDA)) { DoScriptText(SAY_EPILOGUE, pYsida); DoUseDoorOrButton(GO_YSIDA_CAGE); pYsida->GetMotionMaster()->MovePoint(0, aStratholmeLocation[8].m_fX, aStratholmeLocation[8].m_fY, aStratholmeLocation[8].m_fZ, aStratholmeLocation[8].m_fO); } } // If Aurius was spawned to help fight the Baron, mark that event as DONE if (m_auiEncounter[TYPE_AURIUS] == IN_PROGRESS) SetData(TYPE_AURIUS, DONE); // Open Slaughterhouse door again DoUseDoorOrButton(GO_PORT_GAUNTLET); } if (uiData == FAIL) DoUseDoorOrButton(GO_PORT_GAUNTLET); m_auiEncounter[uiType] = uiData; break; case TYPE_BARTHILAS_RUN: if (uiData == IN_PROGRESS) { Creature* pBarthilas = GetSingleCreatureFromStorage(NPC_BARTHILAS); if (pBarthilas && pBarthilas->isAlive() && !pBarthilas->isInCombat()) { DoScriptText(SAY_WARN_BARON, pBarthilas); pBarthilas->SetWalk(false); pBarthilas->GetMotionMaster()->MovePoint(0, aStratholmeLocation[0].m_fX, aStratholmeLocation[0].m_fY, aStratholmeLocation[0].m_fZ); m_uiBarthilasRunTimer = 8000; } } m_auiEncounter[uiType] = uiData; break; case TYPE_BLACK_GUARDS: // Prevent double action if (m_auiEncounter[uiType] == uiData) return; // Restart after failure, close Gauntlet if (uiData == IN_PROGRESS && m_auiEncounter[uiType] == FAIL) DoUseDoorOrButton(GO_PORT_GAUNTLET); // Wipe case - open gauntlet if (uiData == FAIL) DoUseDoorOrButton(GO_PORT_GAUNTLET); if (uiData == DONE) { if (Creature* pBaron = GetSingleCreatureFromStorage(NPC_BARON)) DoScriptText(SAY_UNDEAD_DEFEAT, pBaron); DoUseDoorOrButton(GO_ZIGGURAT_DOOR_5); } m_auiEncounter[uiType] = uiData; // No need to save anything here, so return return; case TYPE_POSTMASTER: m_auiEncounter[uiType] = uiData; if (uiData == IN_PROGRESS) { ++m_uiPostboxesUsed; // After the second post box prepare to spawn the Post Master if (m_uiPostboxesUsed == 2) SetData(TYPE_POSTMASTER, SPECIAL); } // No need to save anything here, so return return; case TYPE_AURIUS: m_auiEncounter[uiType] = uiData; // Prevent further players to complete the quest in that instance // or autocomplete the follow-up quest // the flag will be set back if event is succeed if (uiData == SPECIAL) { if (Creature* pAurius = GetSingleCreatureFromStorage(NPC_AURIUS)) pAurius->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); break; } // Baron killed and Aurius is alive: give him his NPC Flags back // So players can complete the quest // Fake his death if (uiData == DONE) { if (Creature* pAurius = GetSingleCreatureFromStorage(NPC_AURIUS)) { DoScriptText(SAY_AURIUS_DEATH, pAurius); pAurius->StopMoving(); pAurius->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); pAurius->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); pAurius->InterruptNonMeleeSpells(true); pAurius->SetHealth(1); pAurius->GetMotionMaster()->MovementExpired(); pAurius->GetMotionMaster()->MoveIdle(); pAurius->RemoveAllAurasOnDeath(); pAurius->SetStandState(UNIT_STAND_STATE_DEAD); } break; } if (uiData == IN_PROGRESS) { // Despawn Aurius in the Chapel and spawn it in the Slaughter House to engage Baron if (Creature* pAurius_original = GetSingleCreatureFromStorage(NPC_AURIUS)) pAurius_original->ForcedDespawn(); if (Creature* pBaron = GetSingleCreatureFromStorage(NPC_BARON)) { float fX, fY, fZ, fPosX, fPosY, fPosZ; fX = pBaron->GetPositionX(); fY = pBaron->GetPositionY(); fZ = pBaron->GetPositionZ(); pBaron->GetRandomPoint(fX, fY, fZ, 4.0f, fPosX, fPosY, fPosZ); if (Creature* pAurius = pBaron->SummonCreature(NPC_AURIUS, fPosX, fPosY, fPosZ, 0, TEMPSUMMON_DEAD_DESPAWN, 0)) { DoScriptText(YELL_AURIUS_AGGRO, pAurius); pAurius->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); pAurius->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); pAurius->AI()->AttackStart(pBaron); } } } if (uiData == FAIL) { // Baron encounter failed and Aurius is spawned: kill him if (Creature* pAurius = GetSingleCreatureFromStorage(NPC_AURIUS)) { if (pAurius->isAlive()) { DoScriptText(SAY_AURIUS_DEATH, pAurius); pAurius->DealDamage(pAurius, pAurius->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NONE, nullptr, 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] << " " << m_auiEncounter[7]; m_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_sunken_temple::SetData(uint32 uiType, uint32 uiData) { switch(uiType) { case TYPE_ATALARION: if (uiData == SPECIAL) DoSpawnAtalarionIfCan(); m_auiEncounter[0] = uiData; break; case TYPE_PROTECTORS: if (uiData == DONE) { --m_uiProtectorsRemaining; if (!m_uiProtectorsRemaining) { m_auiEncounter[1] = uiData; DoUseDoorOrButton(GO_JAMMALAN_BARRIER); // Intro yell DoOrSimulateScriptTextForThisInstance(SAY_JAMMALAN_INTRO, NPC_JAMMALAN); } } break; case TYPE_JAMMALAN: m_auiEncounter[2] = uiData; break; case TYPE_MALFURION: m_auiEncounter[3] = uiData; break; case TYPE_AVATAR: if (uiData == SPECIAL) { ++m_uiFlameCounter; Creature* pShade = GetSingleCreatureFromStorage(NPC_SHADE_OF_HAKKAR); if (!pShade) return; switch (m_uiFlameCounter) { // Yells on each flame // TODO It might be possible that these yells should be ordered randomly, however this is the seen state case 1: DoScriptText(SAY_AVATAR_BRAZIER_1, pShade); break; case 2: DoScriptText(SAY_AVATAR_BRAZIER_2, pShade); break; case 3: DoScriptText(SAY_AVATAR_BRAZIER_3, pShade); break; // Summon the avatar of all flames are used case MAX_FLAMES: DoScriptText(SAY_AVATAR_BRAZIER_4, pShade); pShade->CastSpell(pShade, SPELL_SUMMON_AVATAR, true); m_uiAvatarSummonTimer = 0; m_uiSupressorTimer = 0; break; } // Summon the suppressors only after the flames are doused // Summon timer is confusing random; timers were: 13, 39 and 52 secs; if (m_uiFlameCounter != MAX_FLAMES) m_uiSupressorTimer = urand(15000, 45000); return; } // Prevent double processing if (m_auiEncounter[4] == uiData) return; if (uiData == IN_PROGRESS) { m_uiSupressorTimer = 0; DoUpdateFlamesFlags(false); // Summon timer; use a small delay m_uiAvatarSummonTimer = 3000; m_bIsFirstHakkarWave = true; // Summon the shade Player* pPlayer = GetPlayerInMap(); if (!pPlayer) return; if (Creature* pShade = pPlayer->SummonCreature(NPC_SHADE_OF_HAKKAR, aSunkenTempleLocation[1].m_fX, aSunkenTempleLocation[1].m_fY, aSunkenTempleLocation[1].m_fZ, aSunkenTempleLocation[1].m_fO, TEMPSUMMON_MANUAL_DESPAWN, 0)) { m_mNpcEntryGuidStore[NPC_SHADE_OF_HAKKAR] = pShade->GetObjectGuid(); pShade->SetRespawnDelay(DAY); } // Respawn circles for (GUIDVector::const_iterator itr = m_vuiCircleGUIDs.begin(); itr != m_vuiCircleGUIDs.end(); ++itr) DoRespawnGameObject(*itr, 30*MINUTE); } else if (uiData == FAIL) { // In case of wipe during the summoning ritual the shade is despawned // The trash mobs stay in place, they are not despawned; the avatar is not sure if it's despawned or not but most likely he'll stay in place // Despawn the shade and the avatar if needed -- TODO, avatar really? if (Creature* pShade = GetSingleCreatureFromStorage(NPC_SHADE_OF_HAKKAR)) pShade->ForcedDespawn(); // Reset flames DoUpdateFlamesFlags(true); } // Use combat doors DoUseDoorOrButton(GO_HAKKAR_DOOR_1); DoUseDoorOrButton(GO_HAKKAR_DOOR_2); m_auiEncounter[4] = 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_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(m_uiAnubDoorGUID); if (uiData == DONE) DoUseDoorOrButton(m_uiAnubGateGUID); break; case TYPE_FAERLINA: DoUseDoorOrButton(m_uiFaerWebGUID); if (uiData == DONE) { DoUseDoorOrButton(m_uiFaerDoorGUID); DoUseDoorOrButton(m_uiMaexOuterGUID); } if (uiData == FAIL) { for (GUIDList::const_iterator itr = m_lFaerlinaAddGUIDs.begin(); itr != m_lFaerlinaAddGUIDs.end(); ++itr) { Creature* pAdd = instance->GetCreature(*itr); if (pAdd && !pAdd->isAlive()) pAdd->Respawn(); } } m_auiEncounter[uiType] = uiData; break; case TYPE_MAEXXNA: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(m_uiMaexInnerGUID, uiData); if (uiData == DONE) { DoUseDoorOrButton(m_uiAracEyeRampGUID); DoRespawnGameObject(m_uiAracPortalGUID, 30*MINUTE); DoTaunt(); } break; case TYPE_NOTH: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(m_uiNothEntryDoorGUID); if (uiData == DONE) { DoUseDoorOrButton(m_uiNothExitDoorGUID); DoUseDoorOrButton(m_uiHeigEntryDoorGUID); } break; case TYPE_HEIGAN: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(m_uiHeigEntryDoorGUID); if (uiData == DONE) DoUseDoorOrButton(m_uiHeigExitDoorGUID); break; case TYPE_LOATHEB: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(m_uiLoathebDoorGUID); if (uiData == DONE) { DoUseDoorOrButton(m_uiPlagEyeRampGUID); DoRespawnGameObject(m_uiPlagPortalGUID, 30*MINUTE); DoTaunt(); } break; case TYPE_RAZUVIOUS: m_auiEncounter[uiType] = uiData; break; case TYPE_GOTHIK: switch(uiData) { case IN_PROGRESS: DoUseDoorOrButton(m_uiGothikEntryDoorGUID); DoUseDoorOrButton(m_uiGothCombatGateGUID); break; case SPECIAL: DoUseDoorOrButton(m_uiGothCombatGateGUID); break; case FAIL: if (m_auiEncounter[uiType] == IN_PROGRESS) DoUseDoorOrButton(m_uiGothCombatGateGUID); DoUseDoorOrButton(m_uiGothikEntryDoorGUID); break; case DONE: DoUseDoorOrButton(m_uiGothikEntryDoorGUID); DoUseDoorOrButton(m_uiGothikExitDoorGUID); DoUseDoorOrButton(m_uiHorsemenDoorGUID); break; } m_auiEncounter[uiType] = uiData; break; case TYPE_FOUR_HORSEMEN: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(m_uiHorsemenDoorGUID); if (uiData == DONE) { DoUseDoorOrButton(m_uiMiliEyeRampGUID); DoRespawnGameObject(m_uiMiliPortalGUID, 30*MINUTE); DoRespawnGameObject(m_uiHorsemenChestGUID, 30*MINUTE); DoTaunt(); } break; case TYPE_PATCHWERK: m_auiEncounter[uiType] = uiData; if (uiData == DONE) DoUseDoorOrButton(m_uiPathExitDoorGUID); break; case TYPE_GROBBULUS: m_auiEncounter[uiType] = uiData; break; case TYPE_GLUTH: m_auiEncounter[uiType] = uiData; if (uiData == DONE) { DoUseDoorOrButton(m_uiGlutExitDoorGUID); DoUseDoorOrButton(m_uiThadDoorGUID); } break; case TYPE_THADDIUS: // Only process real changes here if (m_auiEncounter[uiType] == uiData) return; m_auiEncounter[uiType] = uiData; if (uiData != SPECIAL) DoUseDoorOrButton(m_uiThadDoorGUID, uiData); if (uiData == DONE) { DoUseDoorOrButton(m_uiConsEyeRampGUID); DoRespawnGameObject(m_uiConsPortalGUID, 30*MINUTE); DoTaunt(); } break; case TYPE_SAPPHIRON: m_auiEncounter[uiType] = uiData; if (uiData == DONE) DoUseDoorOrButton(m_uiKelthuzadDoorGUID); break; case TYPE_KELTHUZAD: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(m_uiKelthuzadExitDoorGUID); 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 instance_pinnacle::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_SVALA: if (uiData == IN_PROGRESS || uiData == FAIL) SetSpecialAchievementCriteria(TYPE_ACHIEV_INCREDIBLE_HULK, false); m_auiEncounter[uiType] = uiData; break; case TYPE_GORTOK: if (uiData == IN_PROGRESS) { if (Creature* pOrb = instance->GetCreature(m_gortokEventTriggerGuid)) { pOrb->SetLevitate(true); pOrb->CastSpell(pOrb, SPELL_ORB_VISUAL, true); pOrb->GetMotionMaster()->MovePoint(0, aOrbPositions[0][0], aOrbPositions[0][1], aOrbPositions[0][2]); m_uiGortokOrbTimer = 2000; } } if (uiData == FAIL) { if (Creature* pOrb = instance->GetCreature(m_gortokEventTriggerGuid)) { if (!pOrb->isAlive()) pOrb->Respawn(); else pOrb->RemoveAllAuras(); // For some reasone the Orb doesn't evade automatically pOrb->GetMotionMaster()->MoveTargetedHome(); } for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) { // Reset each miniboss if (Creature* pTemp = GetSingleCreatureFromStorage(aGortokMiniBosses[i])) { if (!pTemp->isAlive()) pTemp->Respawn(); pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } } m_uiGortokOrbPhase = 0; } m_auiEncounter[uiType] = uiData; break; case TYPE_SKADI: if (uiData == IN_PROGRESS) { DoStartTimedAchievement(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, ACHIEV_START_SKADI_ID); } if (uiData == DONE) DoUseDoorOrButton(GO_DOOR_SKADI); m_auiEncounter[uiType] = uiData; break; case TYPE_YMIRON: if (uiData == DONE) DoUseDoorOrButton(GO_DOOR_YMIRON); if (uiData == IN_PROGRESS) SetSpecialAchievementCriteria(TYPE_ACHIEV_KINGS_BANE, true); if (uiData == SPECIAL) SetSpecialAchievementCriteria(TYPE_ACHIEV_KINGS_BANE, false); m_auiEncounter[uiType] = uiData; break; default: script_error_log("Instance Pinnacle: SetData = %u for type %u does not exist/not implemented.", uiType, uiData); return; } // Saving also SPECIAL for this instance if (uiData == DONE || uiData == SPECIAL) { 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_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); 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 == 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); 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) { 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(instance->IsRegularDifficulty() ? GO_CHEST_HORSEMEN_NORM : GO_CHEST_HORSEMEN_HERO, 30 * MINUTE); m_uiTauntTimer = 5000; } 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); 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; // 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(NPC_KELTHUZAD); } 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 instance_blackrock_depths::HandleBarPatrol(uint8 uiStep) { if (GetData(TYPE_BAR) == DONE) return; switch (uiStep) { case 0: if (Creature* pPlugger = GetSingleCreatureFromStorage(NPC_PLUGGER_SPAZZRING)) { // if relevant, open the bar door and tell the instance it is open if (!m_bIsBarDoorOpen) { DoUseDoorOrButton(GO_BAR_DOOR); SetBarDoorIsOpen(); } // One Fireguard Destroyer and two Anvilrage Officers are spawned for (uint8 i = 0; i < 3; ++i) { float fX, fY, fZ; // spawn them behind the bar door pPlugger->GetRandomPoint(aBarPatrolPositions[0][0], aBarPatrolPositions[0][1], aBarPatrolPositions[0][2], 2.0f, fX, fY, fZ); if (Creature* pSummoned = pPlugger->SummonCreature(aBarPatrolId[i], fX, fY, fZ, aBarPatrolPositions[0][3], TEMPSUMMON_DEAD_DESPAWN, 0)) { m_sBarPatrolGuids.insert(pSummoned->GetObjectGuid()); // move them to the Grim Guzzler pPlugger->GetRandomPoint(aBarPatrolPositions[1][0], aBarPatrolPositions[1][1], aBarPatrolPositions[1][2], 2.0f, fX, fY, fZ); pSummoned->GetMotionMaster()->MoveIdle(); pSummoned->GetMotionMaster()->MovePoint(0,fX, fY, fZ); } } // start timer to handle the yells m_uiPatrolTimer = 4000; break; } case 1: for (GuidSet::const_iterator itr = m_sBarPatrolGuids.begin(); itr != m_sBarPatrolGuids.end(); ++itr) { if (Creature* pTmp = instance->GetCreature(*itr)) { if (pTmp->GetEntry() == NPC_FIREGUARD_DESTROYER) { DoScriptText(YELL_PATROL_1, pTmp); SetData(TYPE_BAR, SPECIAL); // temporary set the status to special before the next yell: event will then be complete m_uiPatrolTimer = 2000; break; } } } break; case 2: for (GuidSet::const_iterator itr = m_sBarPatrolGuids.begin(); itr != m_sBarPatrolGuids.end(); ++itr) { if (Creature* pTmp = instance->GetCreature(*itr)) { if (pTmp->GetEntry() == NPC_FIREGUARD_DESTROYER) { DoScriptText(YELL_PATROL_2, pTmp); SetData(TYPE_BAR, DONE); m_uiPatrolTimer = 0; break; } } } break; } }
void instance_halls_of_stone::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_TRIBUNAL: m_auiEncounter[uiType] = uiData; switch (uiData) { case IN_PROGRESS: SortFaces(); break; case DONE: // Cast achiev check spell - Note: it's not clear who casts this spell, but for the moment we'll use Abedneum if (Creature* pEye = instance->GetCreature(m_aFaces[1].m_leftEyeGuid)) pEye->CastSpell(pEye, SPELL_ACHIEVEMENT_CHECK, true); // Spawn the loot DoRespawnGameObject(instance->IsRegularDifficulty() ? GO_TRIBUNAL_CHEST : GO_TRIBUNAL_CHEST_H, 30 * MINUTE); DoToggleGameObjectFlags(instance->IsRegularDifficulty() ? GO_TRIBUNAL_CHEST : GO_TRIBUNAL_CHEST_H, GO_FLAG_NO_INTERACT, false); // Door workaround because of the missing Bran event DoUseDoorOrButton(GO_DOOR_SJONNIR); break; case FAIL: for (uint8 i = 0; i < MAX_FACES; ++i) { // Shut down the faces if (m_aFaces[i].m_bIsActive) DoUseDoorOrButton(m_aFaces[i].m_goFaceGuid); m_aFaces[i].m_bIsActive = false; m_aFaces[i].m_uiTimer = 1000; } break; case SPECIAL: for (uint8 i = 0; i < MAX_FACES; ++i) { m_aFaces[i].m_bIsActive = false; m_aFaces[i].m_uiTimer = 1000; // TODO - Check which stay red and how long (also find out how they get red..) // Cleanup when finished if (Creature* pEye = instance->GetCreature(m_aFaces[i].m_leftEyeGuid)) pEye->CastSpell(pEye, SPELL_KILL_TRIBUNAL_ADD, true); if (Creature* pEye = instance->GetCreature(m_aFaces[i].m_rightEyeGuid)) pEye->CastSpell(pEye, SPELL_KILL_TRIBUNAL_ADD, true); } break; } break; case TYPE_MAIDEN: m_auiEncounter[uiType] = uiData; if (uiData == IN_PROGRESS) DoStartTimedAchievement(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, ACHIEV_START_MAIDEN_ID); break; case TYPE_KRYSTALLUS: m_auiEncounter[uiType] = uiData; break; case TYPE_SJONNIR: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_DOOR_SJONNIR); if (uiData == IN_PROGRESS) m_uiIronSludgeKilled = 0; 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_stratholme::Update(uint32 uiDiff) { if (m_uiBarthilasRunTimer) { if (m_uiBarthilasRunTimer <= uiDiff) { Creature* pBarthilas = GetSingleCreatureFromStorage(NPC_BARTHILAS); if (pBarthilas && pBarthilas->isAlive() && !pBarthilas->isInCombat()) pBarthilas->NearTeleportTo(aStratholmeLocation[1].m_fX, aStratholmeLocation[1].m_fY, aStratholmeLocation[1].m_fZ, aStratholmeLocation[1].m_fO); SetData(TYPE_BARTHILAS_RUN, DONE); m_uiBarthilasRunTimer = 0; } else m_uiBarthilasRunTimer -= uiDiff; } // Timer to summon Aurius into the Slaughter House once Baron is engaged if (m_uiAuriusSummonTimer) { if (m_uiAuriusSummonTimer <= uiDiff) { SetData(TYPE_AURIUS, IN_PROGRESS); m_uiAuriusSummonTimer = 0; } else m_uiAuriusSummonTimer -= uiDiff; } // Check changes for Baron ultimatum timer only if Baron is not already in combat if (m_uiBaronRunTimer && GetData(TYPE_BARON) != IN_PROGRESS) { if (m_uiYellCounter == 0 && m_uiBaronRunTimer <= 10 * MINUTE * IN_MILLISECONDS) { DoOrSimulateScriptTextForThisInstance(SAY_ANNOUNCE_RUN_10_MIN, NPC_BARON); ++m_uiYellCounter; } else if (m_uiYellCounter == 1 && m_uiBaronRunTimer <= 5 * MINUTE * IN_MILLISECONDS) { DoOrSimulateScriptTextForThisInstance(SAY_ANNOUNCE_RUN_5_MIN, NPC_BARON); ++m_uiYellCounter; } // Used to create a delay of 10s between Baron speech and Ysida's answer else if (m_uiYellCounter == 2 && m_uiBaronRunTimer <= (5 * MINUTE - 10) * IN_MILLISECONDS) { DoOrSimulateScriptTextForThisInstance(YSIDA_SAY_RUN_5_MIN, NPC_YSIDA); ++m_uiYellCounter; } if (m_uiBaronRunTimer <= uiDiff) { if (GetData(TYPE_BARON_RUN) != FAIL) { SetData(TYPE_BARON_RUN, FAIL); // Open the cage and let Ysida face her doom if (Creature* pYsida = GetSingleCreatureFromStorage(NPC_YSIDA)) { pYsida->GetMotionMaster()->MovePoint(0, aStratholmeLocation[8].m_fX, aStratholmeLocation[8].m_fY, aStratholmeLocation[8].m_fZ, aStratholmeLocation[8].m_fO); DoUseDoorOrButton(GO_YSIDA_CAGE); } DoOrSimulateScriptTextForThisInstance(SAY_ANNOUNCE_RUN_FAIL, NPC_BARON); m_uiBaronRunTimer = 8000; // We reset the timer so the speech of Ysida is not said at the same time than the Baron's one } else { // Baron ultimatum failed: let the Baron kill her if (Creature* pYsida = GetSingleCreatureFromStorage(NPC_YSIDA)) if (Creature* pBaron = GetSingleCreatureFromStorage(NPC_BARON)) pBaron->CastSpell(pYsida, SPELL_BARON_SOUL_DRAIN, true); DoOrSimulateScriptTextForThisInstance(YSIDA_SAY_RUN_FAIL, NPC_YSIDA); m_uiBaronRunTimer = 0; // event done for good, no more speech debug_log("SD2: Instance Stratholme: Baron run event reached end. Event has state %u.", GetData(TYPE_BARON_RUN)); } } else m_uiBaronRunTimer -= uiDiff; } if (m_uiMindlessSummonTimer) { if (m_uiMindlessCount < 30) { if (m_uiMindlessSummonTimer <= uiDiff) { if (Creature* pBaron = GetSingleCreatureFromStorage(NPC_BARON)) { // Summon mindless skeletons and move them to random point in the center of the square if (Creature* pTemp = pBaron->SummonCreature(NPC_MINDLESS_UNDEAD, aStratholmeLocation[4].m_fX, aStratholmeLocation[4].m_fY, aStratholmeLocation[4].m_fZ, aStratholmeLocation[4].m_fO, TEMPSUMMON_DEAD_DESPAWN, 0)) { float fX, fY, fZ; pBaron->GetRandomPoint(aStratholmeLocation[5].m_fX, aStratholmeLocation[5].m_fY, aStratholmeLocation[5].m_fZ, 20.0f, fX, fY, fZ); pTemp->GetMotionMaster()->MovePoint(0, fX, fY, fZ); m_luiUndeadGUIDs.push_back(pTemp->GetObjectGuid()); ++m_uiMindlessCount; } } m_uiMindlessSummonTimer = 400; } else m_uiMindlessSummonTimer -= uiDiff; } else m_uiMindlessSummonTimer = 0; } if (m_uiSlaugtherSquareTimer) { if (m_uiSlaugtherSquareTimer <= uiDiff) { // Call next Abomnations for (GuidSet::const_iterator itr = m_sAbomnationGUID.begin(); itr != m_sAbomnationGUID.end(); ++itr) { Creature* pAbom = instance->GetCreature(*itr); // Skip killed and already walking Abomnations if (!pAbom || !pAbom->isAlive() || pAbom->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE) continue; // Let Move to somewhere in the middle if (!pAbom->isInCombat()) { if (GameObject* pDoor = GetSingleGameObjectFromStorage(GO_PORT_SLAUGTHER)) { float fX, fY, fZ; pAbom->GetRandomPoint(pDoor->GetPositionX(), pDoor->GetPositionY(), pDoor->GetPositionZ(), 10.0f, fX, fY, fZ); pAbom->GetMotionMaster()->MovePoint(0, fX, fY, fZ); } } break; } // TODO - how fast are they called? m_uiSlaugtherSquareTimer = urand(15000, 30000); } else m_uiSlaugtherSquareTimer -= uiDiff; } }
void SetData(uint32 type, uint32 data) { switch (type) { case DATA_MAGTHERIDON_EVENT: m_auiEncounter[0] = data; if (data == NOT_STARTED) RespawnTimer = 10000; if (data != IN_PROGRESS) HandleGameObject(DoorGUID, true); break; case DATA_CHANNELER_EVENT: switch (data) { case NOT_STARTED: // Reset all channelers once one is reset. if (m_auiEncounter[1] != NOT_STARTED) { m_auiEncounter[1] = NOT_STARTED; for (std::set<uint64>::const_iterator i = ChannelerGUID.begin(); i != ChannelerGUID.end(); ++i) { if (Creature* Channeler = instance->GetCreature(*i)) { if (Channeler->isAlive()) Channeler->AI()->EnterEvadeMode(); else Channeler->Respawn(); } } CageTimer = 0; HandleGameObject(DoorGUID, true); } break; case IN_PROGRESS: // Event start. if (m_auiEncounter[1] != IN_PROGRESS) { m_auiEncounter[1] = IN_PROGRESS; // Let all five channelers aggro. for (std::set<uint64>::const_iterator i = ChannelerGUID.begin(); i != ChannelerGUID.end(); ++i) { Creature* Channeler = instance->GetCreature(*i); if (Channeler && Channeler->isAlive()) Channeler->AI()->AttackStart(Channeler->SelectNearestTarget(999)); } // Release Magtheridon after two minutes. Creature* Magtheridon = instance->GetCreature(MagtheridonGUID); if (Magtheridon && Magtheridon->isAlive()) { Magtheridon->MonsterTextEmote(EMOTE_BONDS_WEAKEN, 0); CageTimer = 120000; } HandleGameObject(DoorGUID, false); } break; case DONE: // Add buff and check if all channelers are dead. for (std::set<uint64>::const_iterator i = ChannelerGUID.begin(); i != ChannelerGUID.end(); ++i) { Creature* Channeler = instance->GetCreature(*i); if (Channeler && Channeler->isAlive()) { //Channeler->CastSpell(Channeler, SPELL_SOUL_TRANSFER, true); data = IN_PROGRESS; break; } } break; } m_auiEncounter[1] = data; break; case DATA_COLLAPSE: // true - collapse / false - reset for (std::set<uint64>::const_iterator i = ColumnGUID.begin(); i != ColumnGUID.end(); ++i) DoUseDoorOrButton(*i); break; default: break; } }
void instance_violet_hold::SetData(uint32 uiType, uint32 uiData) { debug_log("SD2: instance_violet_hold: SetData got type % u, data %u.", uiType, uiData); switch (uiType) { case TYPE_MAIN: { if (uiData == m_auiEncounter[uiType]) return; if (m_auiEncounter[uiType] == DONE) return; switch(uiData) { case NOT_STARTED: ResetAll(); break; case IN_PROGRESS: DoUseDoorOrButton(GO_PRISON_SEAL_DOOR); UpdateWorldState(); m_uiPortalId = urand(0, 2); m_uiPortalTimer = 15000; break; case FAIL: if (Creature* pSinclari = GetSingleCreatureFromStorage(NPC_SINCLARI)) pSinclari->Respawn(); break; case DONE: UpdateWorldState(false); break; case SPECIAL: break; } m_auiEncounter[uiType] = uiData; break; } case TYPE_SEAL: m_auiEncounter[uiType] = uiData; break; case TYPE_PORTAL: { switch (uiData) { case SPECIAL: // timer to next m_uiPortalTimer = 90000; break; case DONE: // portal done, set timer to 5 secs m_uiPortalTimer = 5000; break; } m_auiEncounter[uiType] = uiData; break; } case TYPE_LAVANTHOR: case TYPE_MORAGG: case TYPE_EREKEM: case TYPE_ICHORON: case TYPE_XEVOZZ: case TYPE_ZURAMAT: if (uiData == DONE) m_uiPortalTimer = 35000; if (m_auiEncounter[uiType] != DONE) // Keep the DONE-information stored m_auiEncounter[uiType] = uiData; break; case TYPE_CYANIGOSA: if (uiData == DONE) SetData(TYPE_MAIN, DONE); m_auiEncounter[uiType] = uiData; break; default: 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_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
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 == FAIL) { DoUseDoorOrButton(GO_STAGE_DOOR_LEFT); } if (uiData == DONE) { DoUseDoorOrButton(GO_STAGE_DOOR_LEFT); DoUseDoorOrButton(GO_STAGE_DOOR_RIGHT); DoToggleGameObjectFlags(GO_SERVANTS_ACCESS_DOOR, GO_FLAG_LOCKED, false); 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) DoFinishChessEvent(); else if (uiData == FAIL) DoFailChessEvent(); 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); 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 SetData(uint32 uiType, uint32 uiData) { switch(uiType) { case TYPE_EVENT: if (uiData == IN_PROGRESS) { Clear(); InitWorldState(); } else if (uiData == FAIL || uiData == DONE) { DoUpdateWorldState(WORLD_STATE_VH, 0); DoUseDoorOrButton(m_uiSealDoorGUID); if (Creature* pSinclari = instance->GetCreature(m_uiSinclariGUID)) {pSinclari->ForcedDespawn(1000);}} m_auiEncounter[0] = uiData; break; case TYPE_EREKEM: m_auiEncounter[2] = uiData; if (uiData == IN_PROGRESS) bIsInBoss = true; break; case TYPE_MORAGG: m_auiEncounter[3] = uiData; if (uiData == IN_PROGRESS) bIsInBoss = true; break; case TYPE_ICHORON: m_auiEncounter[4] = uiData; if (uiData == IN_PROGRESS) bIsInBoss = true; break; case TYPE_XEVOZZ: m_auiEncounter[5] = uiData; if (uiData == IN_PROGRESS) bIsInBoss = true; break; case TYPE_LAVANTHOR: m_auiEncounter[6] = uiData; if (uiData == IN_PROGRESS) bIsInBoss = true; break; case TYPE_ZURAMAT: m_auiEncounter[7] = uiData; if (uiData == IN_PROGRESS) bIsInBoss = true; break; case TYPE_CYANIGOSA: m_auiEncounter[8] = uiData; if (uiData == IN_PROGRESS) bIsInBoss = true; break; case TYPE_PORTAL6: m_auiEncounter[9] = uiData; break; case TYPE_PORTAL12: m_auiEncounter[10] = uiData; break; case TYPE_RIFT: if (uiData == FAIL) DoUseDoorOrButton(m_uiSealDoorGUID); m_auiEncounter[1] = uiData; break; case TYPE_DOOR: if (uiData == SPECIAL) { m_uiShieldPercent = m_uiShieldPercent - 5; if(m_uiShieldPercent > 0) DoUpdateWorldState(WORLD_STATE_VH_PRISON, m_uiShieldPercent); else { DoUpdateWorldState(WORLD_STATE_VH, 0); DoUseDoorOrButton(m_uiSealDoorGUID); m_auiEncounter[0] = FAIL; } } break; case TYPE_DISRUPTIONS: m_uiDisruptions = uiData; // DoUpdateWorldState(WORLD_STATE_VH_PRISON, 100-m_uiDisruptions*5); break; case TYPE_LASTBOSS_ID: m_uiLastBossIDConst = uiData; break; } if (uiData == DONE) { bIsInBoss = false; 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 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_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 SetData(uint32 id, uint32 data) { switch (id) { case DATA_KALECGOS_EVENT: { if (data == NOT_STARTED || data == DONE) { HandleGameObject(ForceField, true); HandleGameObject(KalecgosWall[0], true); HandleGameObject(KalecgosWall[1], true); } else if (data == IN_PROGRESS) { HandleGameObject(ForceField, false); HandleGameObject(KalecgosWall[0], false); HandleGameObject(KalecgosWall[1], false); } m_auiEncounter[0] = data; } break; case DATA_BRUTALLUS_EVENT: if (data == SPECIAL) DoUseDoorOrButton(IceBarrier, MINUTE); m_auiEncounter[1] = data; break; case DATA_FELMYST_EVENT: if (data == DONE) HandleGameObject(FireBarrier, true); m_auiEncounter[2] = data; break; case DATA_ACTIVATE_NORTH_TO_LEFT: for (std::vector<uint64>::iterator itr = northList.begin(); itr != northList.end(); itr++) { if (Creature *trigger = instance->GetCreature(*itr)) { if (trigger->GetPositionY() > data) trigger->CastSpell(trigger, 45582, true); } } break; case DATA_ACTIVATE_CENTER_TO_LEFT: for (std::vector<uint64>::iterator itr = centerList.begin(); itr != centerList.end(); itr++) { if (Creature *trigger = instance->GetCreature(*itr)) { if (trigger->GetPositionY() > data) trigger->CastSpell(trigger, 45582, true); } } break; case DATA_ACTIVATE_SOUTH_TO_LEFT: for (std::vector<uint64>::iterator itr = southList.begin(); itr != southList.end(); itr++) { if (Creature *trigger = instance->GetCreature(*itr)) { if (trigger->GetPositionY() > data) trigger->CastSpell(trigger, 45582, true); } } break; case DATA_ACTIVATE_NORTH_TO_RIGHT: for (std::vector<uint64>::iterator itr = northList.begin(); itr != northList.end(); itr++) { if (Creature *trigger = instance->GetCreature(*itr)) { if (trigger->GetPositionY() < data) trigger->CastSpell(trigger, 45582, true); } } break; case DATA_ACTIVATE_CENTER_TO_RIGHT: for (std::vector<uint64>::iterator itr = centerList.begin(); itr != centerList.end(); itr++) { if (Creature *trigger = instance->GetCreature(*itr)) { if (trigger->GetPositionY() < data) trigger->CastSpell(trigger, 45582, true); } } break; case DATA_ACTIVATE_SOUTH_TO_RIGHT: for (std::vector<uint64>::iterator itr = southList.begin(); itr != southList.end(); itr++) { if (Creature *trigger = instance->GetCreature(*itr)) { if (trigger->GetPositionY() < data) trigger->CastSpell(trigger, 45582, true); } } break; case DATA_EREDAR_TWINS_EVENT: m_auiEncounter[3] = data; break; case DATA_MURU_EVENT: switch (data) { case DONE: HandleGameObject(MurusGate[0], true); HandleGameObject(MurusGate[1], true); break; case IN_PROGRESS: HandleGameObject(MurusGate[0], false); HandleGameObject(MurusGate[1], false); break; case NOT_STARTED: HandleGameObject(MurusGate[0], true); HandleGameObject(MurusGate[1], false); break; } m_auiEncounter[4] = data; break; case DATA_OUTRO_KJ: m_outro_kj = data; break; case DATA_KILJAEDEN_EVENT: switch (data) { case DONE: SetData(DATA_OUTRO_KJ, POINT_KILJAEDEN_DIE); m_Outrotimer = 0; break; } m_auiEncounter[5] = data; break; } if (data == DONE) SaveToDB(); }
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 == FAIL) { m_uiKalecRespawnTimer = 20000; if (Creature* pKalecDragon = GetSingleCreatureFromStorage(NPC_KALECGOS_DRAGON)) pKalecDragon->ForcedDespawn(); if (Creature* pKalecHuman = GetSingleCreatureFromStorage(NPC_KALECGOS_HUMAN)) pKalecHuman->ForcedDespawn(); if (Creature* pSathrovarr = GetSingleCreatureFromStorage(NPC_SATHROVARR)) pSathrovarr->AI()->EnterEvadeMode(); } break; case TYPE_BRUTALLUS: m_auiEncounter[uiType] = uiData; // Temporary - until spells 46609 and 46637 are properly fixed if (uiData == SPECIAL) DoUseDoorOrButton(GO_ICE_BARRIER, MINUTE); break; case TYPE_FELMYST: m_auiEncounter[uiType] = uiData; if (uiData == DONE) { StartNextDialogueText(NPC_KALECGOS); // Temporary - until spell 46650 is properly fixed 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); } else if (uiData == IN_PROGRESS) m_uiMuruBerserkTimer = 10*MINUTE*IN_MILLISECONDS; break; case TYPE_KILJAEDEN: m_auiEncounter[uiType] = uiData; // When event fails the deceivers are respawned so restart the counter if (uiData == FAIL) m_uiDeceiversKilled = 0; 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 uiData) { switch (type) { case TYPE_HELLMAW: m_auiEncounter[0] = uiData; break; case TYPE_OVERSEER: if (uiData != DONE) { sLog->outError(LOG_FILTER_TSCR, "Shadow Labyrinth: TYPE_OVERSEER did not expect other data than DONE"); return; } if (m_uiFelOverseerCount) { --m_uiFelOverseerCount; if (m_uiFelOverseerCount) sLog->outDebug(LOG_FILTER_TSCR, "Shadow Labyrinth: %u Fel Overseers left to kill.", m_uiFelOverseerCount); else { m_auiEncounter[1] = DONE; sLog->outDebug(LOG_FILTER_TSCR, "Shadow Labyrinth: TYPE_OVERSEER == DONE"); } } break; case DATA_BLACKHEARTTHEINCITEREVENT: if (uiData == DONE) DoUseDoorOrButton(m_uiRefectoryDoorGUID); m_auiEncounter[2] = uiData; break; case DATA_GRANDMASTERVORPILEVENT: if (uiData == DONE) DoUseDoorOrButton(m_uiScreamingHallDoorGUID); m_auiEncounter[3] = uiData; break; case DATA_MURMUREVENT: m_auiEncounter[4] = uiData; break; } if (uiData == DONE) { if (type == 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]; str_data = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_blackwing_lair::SetData(uint32 uiType, uint32 uiData) { switch(uiType) { case TYPE_RAZORGORE: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_DOOR_RAZORGORE_ENTER); if (uiData == DONE) DoUseDoorOrButton(GO_DOOR_RAZORGORE_EXIT); else if (uiData == FAIL) { // Reset the Orb of Domination and the eggs DoToggleGameObjectFlags(GO_ORB_OF_DOMINATION, GO_FLAG_NO_INTERACT, true); // ToDo: reset the Dragon Eggs } break; case TYPE_VAELASTRASZ: m_auiEncounter[uiType] = uiData; // Prevent the players from running back to the first room; use if the encounter is not special if (uiData != SPECIAL) DoUseDoorOrButton(GO_DOOR_RAZORGORE_EXIT); if (uiData == DONE) DoUseDoorOrButton(GO_DOOR_VAELASTRASZ); break; case TYPE_LASHLAYER: m_auiEncounter[uiType] = uiData; if (uiData == DONE) DoUseDoorOrButton(GO_DOOR_LASHLAYER); break; case TYPE_FIREMAW: case TYPE_EBONROC: case TYPE_FLAMEGOR: m_auiEncounter[uiType] = uiData; break; case TYPE_CHROMAGGUS: m_auiEncounter[uiType] = uiData; if (uiData == DONE) DoUseDoorOrButton(GO_DOOR_CHROMAGGUS_EXIT); break; case TYPE_NEFARIAN: // Don't store the same thing twice if (m_auiEncounter[uiType] == uiData) break; if (uiData == SPECIAL) { //handle missing spell 23362 Creature* pNefarius = GetSingleCreatureFromStorage(NPC_LORD_VICTOR_NEFARIUS); if (!pNefarius) break; for (GUIDList::const_iterator itr = m_lDrakonidBonesGuids.begin(); itr != m_lDrakonidBonesGuids.end(); ++itr) { // The Go script will handle the missing spell 23361 if (GameObject* pGo = instance->GetGameObject(*itr)) pGo->Use(pNefarius); } // Don't store special data break; } m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_DOOR_NEFARIAN); // Cleanup the drakonid bones if (uiData == FAIL) { for (GUIDList::const_iterator itr = m_lDrakonidBonesGuids.begin(); itr != m_lDrakonidBonesGuids.end(); ++itr) { if (GameObject* pGo = instance->GetGameObject(*itr)) pGo->SetLootState(GO_JUST_DEACTIVATED); } m_lDrakonidBonesGuids.clear(); } 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_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_blackwing_lair::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_RAZORGORE: m_auiEncounter[uiType] = uiData; if (uiData != SPECIAL) DoUseDoorOrButton(GO_DOOR_RAZORGORE_ENTER); if (uiData == DONE) DoUseDoorOrButton(GO_DOOR_RAZORGORE_EXIT); else if (uiData == FAIL) { m_uiResetTimer = 30000; // Reset the Orb of Domination and the eggs DoToggleGameObjectFlags(GO_ORB_OF_DOMINATION, GO_FLAG_NO_INTERACT, true); if (Creature* pOrb = GetSingleCreatureFromStorage(NPC_BLACKWING_ORB_TRIGGER)) { if (pOrb->isAlive()) pOrb->AI()->EnterEvadeMode(); } // Reset defenders for (GuidList::const_iterator itr = m_lDefendersGuids.begin(); itr != m_lDefendersGuids.end(); ++itr) { if (Creature* pDefender = instance->GetCreature(*itr)) pDefender->ForcedDespawn(); } m_lUsedEggsGuids.clear(); m_lDefendersGuids.clear(); m_uiBlackwingDefCount = 0; m_uiDragonspawnCount = 0; } break; case TYPE_VAELASTRASZ: m_auiEncounter[uiType] = uiData; // Prevent the players from running back to the first room; use if the encounter is not special if (uiData != SPECIAL) DoUseDoorOrButton(GO_DOOR_RAZORGORE_EXIT); if (uiData == DONE) DoUseDoorOrButton(GO_DOOR_VAELASTRASZ); break; case TYPE_LASHLAYER: m_auiEncounter[uiType] = uiData; if (uiData == DONE) DoUseDoorOrButton(GO_DOOR_LASHLAYER); break; case TYPE_FIREMAW: case TYPE_EBONROC: case TYPE_FLAMEGOR: m_auiEncounter[uiType] = uiData; break; case TYPE_CHROMAGGUS: m_auiEncounter[uiType] = uiData; if (uiData == DONE) DoUseDoorOrButton(GO_DOOR_CHROMAGGUS_EXIT); break; case TYPE_NEFARIAN: // If epic quest for Scepter of the Shifting Sands is in progress when Nefarian is defeated mark it as complete if (uiData == DONE && GetData(TYPE_QUEST_SCEPTER) == IN_PROGRESS) SetData(TYPE_QUEST_SCEPTER, DONE); // Don't store the same thing twice if (m_auiEncounter[uiType] == uiData) break; if (uiData == SPECIAL) { // handle missing spell 23362 Creature* pNefarius = GetSingleCreatureFromStorage(NPC_LORD_VICTOR_NEFARIUS); if (!pNefarius) break; for (GuidList::const_iterator itr = m_lDrakonidBonesGuids.begin(); itr != m_lDrakonidBonesGuids.end(); ++itr) { // The Go script will handle the missing spell 23361 if (GameObject* pGo = instance->GetGameObject(*itr)) pGo->Use(pNefarius); } // Don't store special data break; } m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_DOOR_NEFARIAN); // Cleanup the drakonid bones if (uiData == FAIL) { for (GuidList::const_iterator itr = m_lDrakonidBonesGuids.begin(); itr != m_lDrakonidBonesGuids.end(); ++itr) { if (GameObject* pGo = instance->GetGameObject(*itr)) pGo->SetLootState(GO_JUST_DEACTIVATED); } m_lDrakonidBonesGuids.clear(); } break; case TYPE_QUEST_SCEPTER: m_auiEncounter[uiType] = uiData; // Start 5 hours timer (various steps are handled in Update() if (uiData == IN_PROGRESS) { m_uiScepterEpicTimer = 2000; m_uiScepterQuestStep = 0; } // Stop timer if (uiData == DONE) m_uiScepterEpicTimer = 0; 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 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; } DoOrSimulateScriptTextForThisInstance(SAY_ANNOUNCE_RUN_START, NPC_BARON); 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_zigguratStorage[uiType - TYPE_BARONESS].m_doorGuid); } 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(GO_PORT_GAUNTLET); } uint32 uiCount = m_sAbomnationGUID.size(); for (GuidSet::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 GO_ZIGGURAT_DOOR_4 door after 10 secs, but it doesn't. skipping it for now. // However looks like that this door is no more closed DoUseDoorOrButton(GO_ZIGGURAT_DOOR_4); // No more handlng of Abomnations m_uiSlaugtherSquareTimer = 0; if (Creature* pBaron = GetSingleCreatureFromStorage(NPC_BARON)) { DoScriptText(SAY_ANNOUNCE_RAMSTEIN, pBaron); if (Creature* pRamstein = pBaron->SummonCreature(NPC_RAMSTEIN, aStratholmeLocation[2].m_fX, aStratholmeLocation[2].m_fY, aStratholmeLocation[2].m_fZ, aStratholmeLocation[2].m_fO, TEMPSUMMON_DEAD_DESPAWN, 0)) { pRamstein->GetMotionMaster()->MovePoint(0, aStratholmeLocation[3].m_fX, aStratholmeLocation[3].m_fY, aStratholmeLocation[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(GO_PORT_GAUNTLET); } if (uiData == DONE) { // Open side gate and start summoning skeletons DoUseDoorOrButton(GO_PORT_SLAUGHTER_GATE); // 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 = GetSingleCreatureFromStorage(NPC_BARON)) { for (uint8 i = 0; i < 5; ++i) { float fX, fY, fZ; pBaron->GetRandomPoint(aStratholmeLocation[6].m_fX, aStratholmeLocation[6].m_fY, aStratholmeLocation[6].m_fZ, 5.0f, fX, fY, fZ); if (Creature* pTemp = pBaron->SummonCreature(NPC_BLACK_GUARD, aStratholmeLocation[6].m_fX, aStratholmeLocation[6].m_fY, aStratholmeLocation[6].m_fZ, aStratholmeLocation[6].m_fO, TEMPSUMMON_DEAD_DESPAWN, 0)) { m_luiGuardGUIDs.push_back(pTemp->GetObjectGuid()); } } debug_log("SD2: Instance Stratholme - Slaugther event: Summoned 5 guards."); } } // Open Door again and stop Abomnation if (uiData == FAIL && m_auiEncounter[uiType] != FAIL) { DoUseDoorOrButton(GO_PORT_GAUNTLET); m_uiSlaugtherSquareTimer = 0; // Let already moving Abomnations stop for (GuidSet::const_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_auiEncounter[uiType] == FAIL) { DoUseDoorOrButton(GO_PORT_GAUNTLET); } } 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 = GetSingleCreatureFromStorage(NPC_YSIDA_TRIGGER)) { 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, aStratholmeLocation[7].m_fX, aStratholmeLocation[7].m_fY, aStratholmeLocation[7].m_fZ); } DoUseDoorOrButton(GO_YSIDA_CAGE); } } // Open Slaughterhouse door again DoUseDoorOrButton(GO_PORT_GAUNTLET); } if (uiData == FAIL) { DoUseDoorOrButton(GO_PORT_GAUNTLET); } m_auiEncounter[uiType] = uiData; break; case TYPE_BARTHILAS_RUN: if (uiData == IN_PROGRESS) { Creature* pBarthilas = GetSingleCreatureFromStorage(NPC_BARTHILAS); if (pBarthilas && pBarthilas->IsAlive() && !pBarthilas->IsInCombat()) { DoScriptText(SAY_WARN_BARON, pBarthilas); pBarthilas->SetWalk(false); pBarthilas->GetMotionMaster()->MovePoint(0, aStratholmeLocation[0].m_fX, aStratholmeLocation[0].m_fY, aStratholmeLocation[0].m_fZ); m_uiBarthilasRunTimer = 8000; } } m_auiEncounter[uiType] = uiData; break; case TYPE_BLACK_GUARDS: // Prevent double action if (m_auiEncounter[uiType] == uiData) { return; } // Restart after failure, close Gauntlet if (uiData == IN_PROGRESS && m_auiEncounter[uiType] == FAIL) { DoUseDoorOrButton(GO_PORT_GAUNTLET); } // Wipe case - open gauntlet if (uiData == FAIL) { DoUseDoorOrButton(GO_PORT_GAUNTLET); } if (uiData == DONE) { if (Creature* pBaron = GetSingleCreatureFromStorage(NPC_BARON)) { DoScriptText(SAY_UNDEAD_DEFEAT, pBaron); } DoUseDoorOrButton(GO_ZIGGURAT_DOOR_5); } m_auiEncounter[uiType] = uiData; // No need to save anything here, so return return; case TYPE_POSTMASTER: m_auiEncounter[uiType] = uiData; if (uiData == IN_PROGRESS) { ++m_uiPostboxesUsed; // After the second post box prepare to spawn the Post Master if (m_uiPostboxesUsed == 2) { SetData(TYPE_POSTMASTER, SPECIAL); } } // No need to save anything here, so return return; case TYPE_TRUE_MASTERS: m_auiEncounter[uiType] = uiData; if (uiData == SPECIAL) { ++m_uiSilverHandKilled; // When the 5th paladin is killed set data to DONE in order to give the quest credit for the last paladin if (m_uiSilverHandKilled == MAX_SILVERHAND) { SetData(TYPE_TRUE_MASTERS, DONE); } } // No need to save anything here, so return 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_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_zulgurub::SetData(uint32 uiType, uint32 uiData) { switch (uiType) { case TYPE_JEKLIK: case TYPE_VENOXIS: case TYPE_THEKAL: m_auiEncounter[uiType] = uiData; if (uiData == DONE) DoLowerHakkarHitPoints(); break; case TYPE_MARLI: m_auiEncounter[uiType] = uiData; if (uiData == DONE) DoLowerHakkarHitPoints(); if (uiData == FAIL) { for (GuidList::const_iterator itr = m_lSpiderEggGUIDList.begin(); itr != m_lSpiderEggGUIDList.end(); ++itr) { if (GameObject* pEgg = instance->GetGameObject(*itr)) { // Note: this type of Gameobject needs to be respawned manually pEgg->SetRespawnTime(2 * DAY); pEgg->Respawn(); } } } break; case TYPE_ARLOKK: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_FORCEFIELD); if (uiData == DONE) DoLowerHakkarHitPoints(); if (uiData == FAIL) { // Note: this gameobject should change flags - currently it despawns which isn't correct if (GameObject* pGong = GetSingleGameObjectFromStorage(GO_GONG_OF_BETHEKK)) { pGong->SetRespawnTime(2 * DAY); pGong->Respawn(); } } break; case TYPE_OHGAN: // Note: SPECIAL instance data is set via ACID! if (uiData == SPECIAL) { if (Creature* pMandokir = GetSingleCreatureFromStorage(NPC_BLOODLORD_MANDOKIR)) { pMandokir->SetWalk(false); pMandokir->GetMotionMaster()->MovePoint(1, aMandokirDownstairsPos[0], aMandokirDownstairsPos[1], aMandokirDownstairsPos[2]); } } m_auiEncounter[uiType] = uiData; break; case TYPE_LORKHAN: case TYPE_ZATH: 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_strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }