void instance_naxxramas::Update(uint32 uiDiff) { if (m_uiTauntTimer) { if (m_uiTauntTimer <= uiDiff) { DoTaunt(); m_uiTauntTimer = 0; } else m_uiTauntTimer -= uiDiff; } if (m_uiSapphSpawnTimer) { if (m_uiSapphSpawnTimer <= uiDiff) { if (Player* pPlayer = GetPlayerInMap()) pPlayer->SummonCreature(NPC_SAPPHIRON, aSapphPositions[0], aSapphPositions[1], aSapphPositions[2], aSapphPositions[3], TEMPSUMMON_DEAD_DESPAWN, 0); m_uiSapphSpawnTimer = 0; } else m_uiSapphSpawnTimer -= uiDiff; } m_dialogueHelper.DialogueUpdate(uiDiff); }
void instance_naxxramas::Update(uint32 uiDiff) { if (m_uiTauntTimer) { if (m_uiTauntTimer <= uiDiff) { DoTaunt(); m_uiTauntTimer = 0; } else m_uiTauntTimer -= uiDiff; } m_dialogueHelper.DialogueUpdate(uiDiff); }
void instance_naxxramas::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); DoTaunt(); } 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); DoTaunt(); } break; case TYPE_RAZUVIOUS: m_auiEncounter[6] = 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[7] == IN_PROGRESS) DoUseDoorOrButton(m_uiGothCombatGateGUID); DoUseDoorOrButton(m_uiGothikEntryDoorGUID); break; case DONE: DoUseDoorOrButton(m_uiGothikEntryDoorGUID); DoUseDoorOrButton(m_uiGothikExitDoorGUID); DoUseDoorOrButton(m_uiHorsemenDoorGUID); break; } m_auiEncounter[7] = uiData; 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); DoTaunt(); } 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); DoTaunt(); } break; case TYPE_SAPPHIRON: m_auiEncounter[13] = uiData; if (uiData == DONE) DoUseDoorOrButton(m_uiKelthuzadDoorGUID); break; case TYPE_KELTHUZAD: m_auiEncounter[14] = 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]; 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[0] = uiData; DoUseDoorOrButton(m_uiAnubDoorGUID); if (uiData == DONE) DoUseDoorOrButton(m_uiAnubGateGUID); break; case TYPE_FAERLINA: DoUseDoorOrButton(m_uiFaerWebGUID); if (uiData == IN_PROGRESS) SetSpecialAchievementCriteria(TYPE_ACHIEV_KNOCK_YOU_OUT, true); if (uiData == DONE) { DoUseDoorOrButton(m_uiFaerDoorGUID); DoUseDoorOrButton(m_uiMaexOuterGUID); } if (uiData == FAIL) { for (std::list<uint64>::const_iterator itr = m_lFaerlinaAddGUIDs.begin(); itr != m_lFaerlinaAddGUIDs.end(); ++itr) { Creature* pAdd = instance->GetCreature(*itr); if (pAdd && !pAdd->isAlive()) pAdd->Respawn(); } } m_auiEncounter[1] = uiData; break; case TYPE_MAEXXNA: m_auiEncounter[2] = uiData; DoUseDoorOrButton(m_uiMaexInnerGUID, uiData); if (uiData == DONE) { DoUseDoorOrButton(m_uiAracEyeRampGUID); DoRespawnGameObject(m_uiAracPortalGUID, 30*MINUTE); DoTaunt(); } 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); // uncomment when eruption is implemented //if (uiData == IN_PROGRESS) // SetSpecialAchievementCriteria(TYPE_ACHIEV_SAFETY_DANCE, true); if (uiData == DONE) DoUseDoorOrButton(m_uiHeigExitDoorGUID); break; case TYPE_LOATHEB: m_auiEncounter[5] = uiData; DoUseDoorOrButton(m_uiLoathebDoorGUID); if (uiData == IN_PROGRESS) SetSpecialAchievementCriteria(TYPE_ACHIEV_SPORE_LOSER, true); if (uiData == DONE) { DoUseDoorOrButton(m_uiPlagEyeRampGUID); DoRespawnGameObject(m_uiPlagPortalGUID, 30*MINUTE); DoTaunt(); } break; case TYPE_RAZUVIOUS: m_auiEncounter[6] = 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[7] == IN_PROGRESS) DoUseDoorOrButton(m_uiGothCombatGateGUID); DoUseDoorOrButton(m_uiGothikEntryDoorGUID); break; case DONE: DoUseDoorOrButton(m_uiGothikEntryDoorGUID); DoUseDoorOrButton(m_uiGothikExitDoorGUID); DoUseDoorOrButton(m_uiHorsemenDoorGUID); break; } m_auiEncounter[7] = uiData; 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); DoTaunt(); } 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: // Only process real changes here if (m_auiEncounter[12] == uiData) return; m_auiEncounter[12] = uiData; if (uiData != SPECIAL) DoUseDoorOrButton(m_uiThadDoorGUID, uiData); // Uncomment when this achievement is implemented //if (uiData == IN_PROGRESS) // SetSpecialAchievementCriteria(TYPE_ACHIEV_SHOCKING, true); if (uiData == DONE) { DoUseDoorOrButton(m_uiConsEyeRampGUID); DoRespawnGameObject(m_uiConsPortalGUID, 30*MINUTE); DoTaunt(); } break; case TYPE_SAPPHIRON: m_auiEncounter[13] = uiData; // Uncomment when achiev check implemented //if (uiData == IN_PROGRESS) // SetSpecialAchievementCriteria(TYPE_ACHIEV_HUNDRED_CLUB, true); if (uiData == DONE) DoUseDoorOrButton(m_uiKelthuzadDoorGUID); break; case TYPE_KELTHUZAD: m_auiEncounter[14] = uiData; DoUseDoorOrButton(m_uiKelthuzadExitDoorGUID); if (uiData == IN_PROGRESS) SetSpecialAchievementCriteria(TYPE_ACHIEV_GET_ENOUGH, false); break; case TYPE_UNDYING_FAILED: m_auiEncounter[15] = 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]; 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[0] = uiData; DoUseDoorOrButton(m_uiAnubDoorGUID); if (uiData == DONE) { OpenDoor(m_uiAnubGateGUID); m_uiArachnofobiaTimer = 0; m_bIsArachnofobia = true; } break; case TYPE_FAERLINA: m_auiEncounter[1] = uiData; DoUseDoorOrButton(m_uiFaerWebGUID); if (uiData == DONE) { OpenDoor(m_uiFaerDoorGUID); OpenDoor(m_uiMaexOuterGUID); } break; case TYPE_MAEXXNA: m_auiEncounter[2] = uiData; DoUseDoorOrButton(m_uiMaexInnerGUID, uiData); if (uiData == DONE) { DoUseDoorOrButton(m_uiAracEyeRampGUID); DoUseDoorOrButton(m_uiAracEyeGUID); DoRespawnGameObject(m_uiAracPortalGUID, 30*MINUTE); Immortal(); DoTaunt(); // Arachnofobia if(m_uiArachnofobiaTimer <= 20 * 60000 && m_bIsArachnofobia) { Arachnofobia(); m_bIsArachnofobia = false; } } break; case TYPE_NOTH: m_auiEncounter[3] = uiData; DoUseDoorOrButton(m_uiNothEntryDoorGUID); if (uiData == DONE) { OpenDoor(m_uiNothExitDoorGUID); OpenDoor(m_uiHeigEntryDoorGUID); } break; case TYPE_HEIGAN: m_auiEncounter[4] = uiData; DoUseDoorOrButton(m_uiHeigEntryDoorGUID); if (uiData == DONE) { OpenDoor(m_uiHeigExitDoorGUID); OpenDoor(m_uiLoathebDoorGUID); } break; case TYPE_LOATHEB: m_auiEncounter[5] = uiData; DoUseDoorOrButton(m_uiLoathebDoorGUID); if (uiData == DONE) { DoUseDoorOrButton(m_uiPlagEyeRampGUID); DoUseDoorOrButton(m_uiPlagEyeGUID); DoRespawnGameObject(m_uiPlagPortalGUID, 30*MINUTE); DoTaunt(); Immortal(); } break; case TYPE_RAZUVIOUS: m_auiEncounter[6] = uiData; if (uiData == DONE) OpenDoor(m_uiGothikEntryDoorGUID); 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[7] == IN_PROGRESS) DoUseDoorOrButton(m_uiGothCombatGateGUID); DoUseDoorOrButton(m_uiGothikEntryDoorGUID); break; case DONE: OpenDoor(m_uiGothikEntryDoorGUID); OpenDoor(m_uiGothikExitDoorGUID); OpenDoor(m_uiHorsemenDoorGUID); OpenDoor(m_uiGothCombatGateGUID); break; } m_auiEncounter[7] = uiData; break; case TYPE_FOUR_HORSEMEN: m_auiEncounter[8] = uiData; DoUseDoorOrButton(m_uiHorsemenDoorGUID); if (uiData == DONE) { DoUseDoorOrButton(m_uiMiliEyeRampGUID); DoUseDoorOrButton(m_uiMiliEyeGUID); DoRespawnGameObject(m_uiMiliPortalGUID, 30*MINUTE); DoRespawnGameObject(m_uiHorsemenChestGUID, 30*MINUTE); DoTaunt(); Immortal(); } break; case TYPE_PATCHWERK: m_auiEncounter[9] = uiData; if (uiData == DONE) OpenDoor(m_uiPathExitDoorGUID); break; case TYPE_GROBBULUS: m_auiEncounter[10] = uiData; break; case TYPE_GLUTH: m_auiEncounter[11] = uiData; if (uiData == DONE) { OpenDoor(m_uiGlutExitDoorGUID); OpenDoor(m_uiThadDoorGUID); } break; case TYPE_THADDIUS: m_auiEncounter[12] = uiData; if(uiData != SPECIAL) DoUseDoorOrButton(m_uiThadDoorGUID, uiData); if(uiData == FAIL) OpenDoor(m_uiThadDoorGUID); if (uiData == DONE) { DoUseDoorOrButton(m_uiConsEyeRampGUID); DoUseDoorOrButton(m_uiConsEyeGUID); DoRespawnGameObject(m_uiConsPortalGUID, 30*MINUTE); DoTaunt(); Immortal(); } break; case TYPE_SAPPHIRON: m_auiEncounter[13] = uiData; if (uiData == DONE) DoUseDoorOrButton(m_uiKelthuzadDoorGUID); break; case TYPE_KELTHUZAD: m_auiEncounter[14] = uiData; DoUseDoorOrButton(m_uiKelthuzadExitDoorGUID); if(uiData == DONE) Immortal(); break; case TYPE_IMMORTAL: m_auiEncounter[15] = uiData; break; //Four Horsemen Chest case TYPE_BLAUMEAUX: if (uiData == DONE) { BlaumeuxDead = true; UpdateCheck = true; Horseman(); } break; case TYPE_RIVENDARE: if (uiData == DONE) { RivendareDead = true; UpdateCheck = true; Horseman(); } break; case TYPE_ZELIEK: if (uiData == DONE) { ZeliekDead = true; UpdateCheck = true; Horseman(); } break; case TYPE_KORTHAZZ: if (uiData == DONE) { KorthazzDead = true; UpdateCheck = true; Horseman(); } break; case TYPE_STALAGG: m_auiStalaggEncounter = uiData; break; case TYPE_FEUGEN: m_auiFeugenEncouter = 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]; 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[0] = uiData; DoUseDoorOrButton(m_uiAnubDoorGUID); if (uiData == DONE) DoUseDoorOrButton(m_uiAnubGateGUID); break; case DATA_HEIGAN_ERUPT: HeiganErupt(uiData); break; case TYPE_ENR_FAERLINA: if(Creature* Faerlina = instance->GetCreature(GetData64(NPC_FAERLINA))) { Faerlina->RemoveAurasDueToSpell(54100); Faerlina->RemoveAurasDueToSpell(28798); Faerlina->CastSpell(Faerlina,28732,false); break; } case TYPE_FAERLINA: if (uiData == SPECIAL) // Used to inform about failed special achievement { return; } DoUseDoorOrButton(m_uiFaerWebGUID); if (uiData == DONE) { DoUseDoorOrButton(m_uiFaerDoorGUID); DoUseDoorOrButton(m_uiMaexOuterGUID); } if (uiData == FAIL) { for (std::list<uint64>::const_iterator itr = m_lFaerlinaAddGUIDs.begin(); itr != m_lFaerlinaAddGUIDs.end(); ++itr) { Creature* pAdd = instance->GetCreature(*itr); if (pAdd && !pAdd->isAlive()) pAdd->Respawn(); } } m_auiEncounter[1] = uiData; break; case TYPE_MAEXXNA: m_auiEncounter[2] = uiData; DoUseDoorOrButton(m_uiMaexInnerGUID, uiData); if (uiData == DONE) { DoUseDoorOrButton(m_uiAracEyeRampGUID); DoRespawnGameObject(m_uiAracPortalGUID, 30*MINUTE); DoTaunt(); } 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); DoTaunt(); } break; case TYPE_RAZUVIOUS: m_auiEncounter[6] = 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[7] == IN_PROGRESS) DoUseDoorOrButton(m_uiGothCombatGateGUID); DoUseDoorOrButton(m_uiGothikEntryDoorGUID); break; case DONE: DoUseDoorOrButton(m_uiGothikEntryDoorGUID); DoUseDoorOrButton(m_uiGothikExitDoorGUID); DoUseDoorOrButton(m_uiHorsemenDoorGUID); break; } m_auiEncounter[7] = uiData; 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); DoTaunt(); } 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); DoTaunt(); } break; case TYPE_SAPPHIRON: m_auiEncounter[13] = uiData; if (uiData == DONE) DoUseDoorOrButton(m_uiKelthuzadDoorGUID); break; case TYPE_KELTHUZAD: m_auiEncounter[14] = 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]; strInstData = saveStream.str(); SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; } }
void instance_naxxramas::Update(uint32 uiDiff) { // Handle the continuous spawning of Living Poison blobs in Patchwerk corridor if (m_uiLivingPoisonTimer) { if (m_uiLivingPoisonTimer <= uiDiff) { if (Player* pPlayer = GetPlayerInMap()) { // Spawn 3 living poisons every 5 secs and make them cross the corridor and then despawn, for ever and ever for (uint8 i = 0; i < 3; i++) if (Creature* pPoison = pPlayer->SummonCreature(NPC_LIVING_POISON, aLivingPoisonPositions[i].m_fX, aLivingPoisonPositions[i].m_fY, aLivingPoisonPositions[i].m_fZ, aLivingPoisonPositions[i].m_fO, TEMPSPAWN_DEAD_DESPAWN, 0)) { pPoison->GetMotionMaster()->MovePoint(0, aLivingPoisonPositions[i + 3].m_fX, aLivingPoisonPositions[i + 3].m_fY, aLivingPoisonPositions[i + 3].m_fZ); pPoison->ForcedDespawn(15000); } } m_uiLivingPoisonTimer = 5000; } else m_uiLivingPoisonTimer -= uiDiff; } if (m_uiScreamsTimer && m_auiEncounter[TYPE_THADDIUS] != DONE) { if (m_uiScreamsTimer <= uiDiff) { if (Player* pPlayer = GetPlayerInMap()) pPlayer->GetMap()->PlayDirectSoundToMap(SOUND_SCREAM1 + urand(0,3)); m_uiScreamsTimer = (2 * MINUTE + urand(0, 30)) * IN_MILLISECONDS; } else m_uiScreamsTimer -= uiDiff; } if (m_uiTauntTimer) { if (m_uiTauntTimer <= uiDiff) { DoTaunt(); m_uiTauntTimer = 0; } else m_uiTauntTimer -= uiDiff; } if (m_uiSapphSpawnTimer) { if (m_uiSapphSpawnTimer <= uiDiff) { if (Player* pPlayer = GetPlayerInMap()) pPlayer->SummonCreature(NPC_SAPPHIRON, aSapphPositions[0], aSapphPositions[1], aSapphPositions[2], aSapphPositions[3], TEMPSPAWN_DEAD_DESPAWN, 0); m_uiSapphSpawnTimer = 0; } else m_uiSapphSpawnTimer -= uiDiff; } m_dialogueHelper.DialogueUpdate(uiDiff); }
bool SetBossState(uint32 type, EncounterState state) { if (!InstanceScript::SetBossState(type, state)) return false; switch (type) { case DATA_ANUBREKHAN: case DATA_FAERLINA: case DATA_NOTH: case DATA_PATCHWERK: case DATA_GROBBULUS: case DATA_GLUTH: case DATA_RAZUVIOUS: case DATA_GOTHIK: case DATA_KELTHUZAD: break; case DATA_SAPPHIRON: if (state == DONE) { Step=1; StepTimer = 100; Event(); } break; case DATA_MAEXXNA: { if (state == DONE) DoTaunt(); break; } case DATA_HEIGAN: if (state == NOT_STARTED) HeiganPlayerDeathCount = 0; break; case DATA_LOATHEB: { if (state == DONE) DoTaunt(); break; } case DATA_THADDIUS: { if (state == DONE) DoTaunt(); break; } case DATA_HORSEMEN: { if (state == DONE) { if (GameObject* HorsemenChest = instance->GetGameObject(HorsemenChestGUID)) HorsemenChest->SetRespawnTime(HorsemenChest->GetRespawnDelay()); DoTaunt(); } break; } default: break; } return true; }
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 == IN_PROGRESS) SetSpecialAchievementCriteria(TYPE_ACHIEV_KNOCK_YOU_OUT, true); if (uiData == DONE) { DoUseDoorOrButton(GO_ARAC_FAER_DOOR); DoUseDoorOrButton(GO_ARAC_MAEX_OUTER_DOOR); } 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(GO_ARAC_MAEX_INNER_DOOR, uiData); if (uiData == DONE) { DoUseDoorOrButton(GO_ARAC_EYE_RAMP); DoRespawnGameObject(GO_ARAC_PORTAL, 30*MINUTE); DoTaunt(); } 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); // not used, achievement handled by heigan script //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); DoTaunt(); } 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: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_MILI_HORSEMEN_DOOR); 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); DoTaunt(); } 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: m_auiEncounter[uiType] = uiData; if (uiData != SPECIAL) DoUseDoorOrButton(GO_CONS_THAD_DOOR, uiData); // Uncomment when Thaddius (and 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); DoTaunt(); } 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); break; case TYPE_KELTHUZAD: m_auiEncounter[uiType] = uiData; DoUseDoorOrButton(GO_KELTHUZAD_EXIT_DOOR); if (uiData == DONE) { DoUseDoorOrButton(GO_KELTHUZAD_WINDOW_1); DoUseDoorOrButton(GO_KELTHUZAD_WINDOW_2); DoUseDoorOrButton(GO_KELTHUZAD_WINDOW_3); DoUseDoorOrButton(GO_KELTHUZAD_WINDOW_4); } else 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_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; } }