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 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); } }