void DoSpawnNextCrystal() { if (!m_pInstance) return; Creature* pOssirianTrigger = nullptr; if (m_uiCrystalPosition == 0) { // Respawn static spawned crystal trigger pOssirianTrigger = m_pInstance->GetSingleCreatureFromStorage(NPC_OSSIRIAN_TRIGGER); if (pOssirianTrigger && !pOssirianTrigger->isAlive()) pOssirianTrigger->Respawn(); } else { // Summon a new crystal trigger at some position depending on m_uiCrystalPosition // Note: the summon points seem to be very random; requires additional research float fX, fY, fZ; m_creature->GetRandomPoint(aCrystalSpawnPos[0], aCrystalSpawnPos[1], aCrystalSpawnPos[2], 100.0f, fX, fY, fZ); m_creature->SummonCreature(NPC_OSSIRIAN_TRIGGER, fX, fY, fZ, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); } if (!pOssirianTrigger) return; // Respawn GO near crystal trigger if (GameObject* pCrystal = GetClosestGameObjectWithEntry(pOssirianTrigger, GO_OSSIRIAN_CRYSTAL, 10.0f)) m_pInstance->DoRespawnGameObject(pCrystal->GetObjectGuid(), 5 * MINUTE); // Increase position ++m_uiCrystalPosition %= MAX_CRYSTAL_POSITIONS; }
void DoSpawnNextCrystal() { if (!m_pInstance) return; Creature* pOssirianTrigger = NULL; if (m_uiCrystalPosition == 0) { // Respawn static spawned crystal trigger pOssirianTrigger = m_pInstance->GetSingleCreatureFromStorage(NPC_OSSIRIAN_TRIGGER); if (pOssirianTrigger && !pOssirianTrigger->isAlive()) pOssirianTrigger->Respawn(); } else { // Summon a new crystal trigger at some position depending on m_uiCrystalPosition } if (!pOssirianTrigger) return; // Respawn GO near crystal trigger if (GameObject* pCrystal = GetClosestGameObjectWithEntry(pOssirianTrigger, GO_OSSIRIAN_CRYSTAL, 10.0f)) m_pInstance->DoRespawnGameObject(pCrystal->GetObjectGuid(), 5*MINUTE); // Increase position ++m_uiCrystalPosition %= MAX_CRYSTAL_POSITIONS; }
void JustDidDialogueStep(int32 iEntry) override { // Start the event when the dialogue is finished if (iEntry == SAY_ANDOROV_ATTACK_START) { if (m_pInstance) m_pInstance->SetData(TYPE_RAJAXX, IN_PROGRESS); } }
void MoveInLineOfSight(Unit* pWho) override { // don't attack anything during the Ayamiss encounter if (m_pInstance) { if (m_pInstance->GetData(TYPE_AYAMISS) == IN_PROGRESS) return; } ScriptedAI::MoveInLineOfSight(pWho); }
void JustDied(Unit* pKiller) override { if (pKiller->GetEntry() != NPC_RAJAXX) return; // Yell when killed by Rajaxx if (m_pInstance) { if (Creature* pRajaxx = m_pInstance->GetSingleCreatureFromStorage(NPC_RAJAXX)) DoScriptText(SAY_KILLS_ANDOROV, pRajaxx); } }
void UpdateAI(const uint32 /*uiDiff*/) override { if (m_pInstance) { if (m_pInstance->GetData(TYPE_AYAMISS) == IN_PROGRESS) return; } if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) return; DoMeleeAttackIfReady(); }
// Wrapper to start initialize Kaldorei followers void DoInitializeFollowers() { if (!m_pInstance) return; GuidList m_lKaldoreiGuids; m_pInstance->GetKaldoreiGuidList(m_lKaldoreiGuids); for (GuidList::const_iterator itr = m_lKaldoreiGuids.begin(); itr != m_lKaldoreiGuids.end(); ++itr) { if (Creature* pKaldorei = m_creature->GetMap()->GetCreature(*itr)) pKaldorei->GetMotionMaster()->MoveFollow(m_creature, pKaldorei->GetDistance(m_creature), pKaldorei->GetAngle(m_creature)); } }