void DoNextBroggokEventPhase() { float dx, dy; GetMovementDistanceForIndex(BroggokEventPhase, dx, dy); if (BroggokEventPhase >= MAX_ORC_WAVES) { DoUseDoorOrButton(Brog2GUID); if (Creature* pBroggok = instance->GetCreature(BroggokGUID)) { pBroggok->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pBroggok->GetMotionMaster()->MovePoint(0, dx, dy, pBroggok->GetPositionZ()); DoorTimer = 5000; } } else { if (!BroggokEvent[BroggokEventPhase].IsCellOpened) DoUseDoorOrButton(BroggokEvent[BroggokEventPhase].CellGuid); BroggokEvent[BroggokEventPhase].IsCellOpened = true; for (std::set<uint64>::const_iterator itr = BroggokEvent[BroggokEventPhase].SortedOrcGuids.begin(); itr != BroggokEvent[BroggokEventPhase].SortedOrcGuids.end(); ++itr) { if (Creature* pOrc = instance->GetCreature(*itr)) { pOrc->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pOrc->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); pOrc->GetMotionMaster()->MovePoint(0, pOrc->GetPositionX() + dx, pOrc->GetPositionY() + dy, pOrc->GetPositionZ()); } } } BroggokEventTimer = 30000; ++BroggokEventPhase; }
void instance_blood_furnace::DoNextBroggokEventPhase() { // Get Movement Position float dx, dy; GetMovementDistanceForIndex(m_uiBroggokEventPhase, dx, dy); // Open door to the final boss now and move boss to the center of the room if (m_uiBroggokEventPhase >= MAX_ORC_WAVES) { DoUseDoorOrButton(GO_DOOR_BROGGOK_REAR); if (Creature* pBroggok = GetSingleCreatureFromStorage(NPC_BROGGOK)) { pBroggok->SetWalk(false); pBroggok->GetMotionMaster()->MovePoint(0, dx, dy, pBroggok->GetPositionZ()); } } else { // Open cage door if (!m_aBroggokEvent[m_uiBroggokEventPhase].m_bIsCellOpened) DoUseDoorOrButton(m_aBroggokEvent[m_uiBroggokEventPhase].m_cellGuid); m_aBroggokEvent[m_uiBroggokEventPhase].m_bIsCellOpened = true; for (GuidSet::const_iterator itr = m_aBroggokEvent[m_uiBroggokEventPhase].m_sSortedOrcGuids.begin(); itr != m_aBroggokEvent[m_uiBroggokEventPhase].m_sSortedOrcGuids.end(); ++itr) { if (Creature* pOrc = instance->GetCreature(*itr)) { // Remove unit flags from npcs pOrc->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pOrc->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); // Move them out of the cages pOrc->SetWalk(false); pOrc->GetMotionMaster()->MovePoint(0, pOrc->GetPositionX() + dx, pOrc->GetPositionY() + dy, pOrc->GetPositionZ()); } } } // Prepare for further handling m_uiBroggokEventTimer = 30000; ++m_uiBroggokEventPhase; }