void PrepareSummonPlaces() { CreatureList lSummonList; m_pInstance->GetGothSummonPointCreatures(lSummonList, true); if (lSummonList.empty()) return; // Trainees and Rider uint8 index = 0; uint8 uiTraineeCount = 3; lSummonList.sort(ObjectDistanceOrder(m_creature)); for (auto& itr : lSummonList) { if (itr) { if (uiTraineeCount == 0) break; if (index == 1) m_lRiderSummonPosGuids.push_back(itr->GetObjectGuid()); else { m_lTraineeSummonPosGuids.push_back(itr->GetObjectGuid()); --uiTraineeCount; } index++; } } // DeathKnights uint8 uiDeathKnightCount = 2; lSummonList.sort(ObjectDistanceOrderReversed(m_creature)); for (auto& itr : lSummonList) { if (itr) { if (uiDeathKnightCount == 0) break; m_lDeathKnightSummonPosGuids.push_back(itr->GetObjectGuid()); --uiDeathKnightCount; } } }
Creature* instance_uldaman::GetClosestDwarfNotInCombat(Creature* pSearcher) { CreatureList lTemp; for (GuidList::const_iterator itr = m_lWardens.begin(); itr != m_lWardens.end(); ++itr) { Creature* pTemp = instance->GetCreature(*itr); if (pTemp && pTemp->isAlive() && !pTemp->getVictim()) lTemp.push_back(pTemp); } if (lTemp.empty()) return nullptr; lTemp.sort(ObjectDistanceOrder(pSearcher)); return lTemp.front(); }
void instance_karazhan::DoPrepareChessEvent() { // Allow all the chess pieces to init start position for (GuidList::const_iterator itr = m_lChessPiecesAlliance.begin(); itr != m_lChessPiecesAlliance.end(); ++itr) { if (Creature* pChessPiece = instance->GetCreature(*itr)) { Creature* pSquare = GetClosestCreatureWithEntry(pChessPiece, NPC_SQUARE_BLACK, 2.0f); if (!pSquare) pSquare = GetClosestCreatureWithEntry(pChessPiece, NPC_SQUARE_WHITE, 2.0f); if (!pSquare) { script_error_log("Instance Karazhan: ERROR Failed to properly load the Chess square for %s.", pChessPiece->GetGuidStr().c_str()); return; } // send event which will prepare the current square pChessPiece->AI()->SendAIEvent(AI_EVENT_CUSTOM_B, pSquare, pChessPiece); } } for (GuidList::const_iterator itr = m_lChessPiecesHorde.begin(); itr != m_lChessPiecesHorde.end(); ++itr) { if (Creature* pChessPiece = instance->GetCreature(*itr)) { Creature* pSquare = GetClosestCreatureWithEntry(pChessPiece, NPC_SQUARE_BLACK, 2.0f); if (!pSquare) pSquare = GetClosestCreatureWithEntry(pChessPiece, NPC_SQUARE_WHITE, 2.0f); if (!pSquare) { script_error_log("Instance Karazhan: ERROR Failed to properly load the Chess square for %s.", pChessPiece->GetGuidStr().c_str()); return; } // send event which will prepare the current square pChessPiece->AI()->SendAIEvent(AI_EVENT_CUSTOM_B, pSquare, pChessPiece); } } // add silence debuff Map::PlayerList const& players = instance->GetPlayers(); for (const auto& player : players) { if (Player* pPlayer = player.getSource()) pPlayer->CastSpell(pPlayer, SPELL_GAME_IN_SESSION, TRIGGERED_OLD_TRIGGERED); } m_uiAllianceStalkerCount = 0; m_uiHordeStalkerCount = 0; m_vHordeStalkers.clear(); m_vAllianceStalkers.clear(); // sort stalkers depending on side CreatureList lStalkers; for (GuidList::const_iterator itr = m_lChessHordeStalkerList.begin(); itr != m_lChessHordeStalkerList.end(); ++itr) { if (Creature* pTemp = instance->GetCreature(*itr)) lStalkers.push_back(pTemp); } if (lStalkers.empty()) { script_error_log("Instance Karazhan: ERROR Failed to properly load the horde side stalkers for the Chess Event."); return; } // get the proper statusBar npc Creature* pStatusBar = instance->GetCreature(m_HordeStatusGuid); if (!pStatusBar) return; lStalkers.sort(ObjectDistanceOrder(pStatusBar)); for (CreatureList::const_iterator itr = lStalkers.begin(); itr != lStalkers.end(); ++itr) m_vHordeStalkers.push_back((*itr)->GetObjectGuid()); lStalkers.clear(); for (GuidList::const_iterator itr = m_lChessAllianceStalkerList.begin(); itr != m_lChessAllianceStalkerList.end(); ++itr) { if (Creature* pTemp = instance->GetCreature(*itr)) lStalkers.push_back(pTemp); } if (lStalkers.empty()) { script_error_log("Instance Karazhan: ERROR Failed to properly load the alliance side stalkers for the Chess Event."); return; } // get the proper statusBar npc pStatusBar = instance->GetCreature(m_AllianceStatusGuid); if (!pStatusBar) return; lStalkers.sort(ObjectDistanceOrder(pStatusBar)); for (CreatureList::const_iterator itr = lStalkers.begin(); itr != lStalkers.end(); ++itr) m_vAllianceStalkers.push_back((*itr)->GetObjectGuid()); }