Creature* GetRandomEgg() { // I know that this is looking strange but it works! ^^ std::list<Creature*> creatures; GetCreatureListWithEntryInGrid(creatures, me, NPC_ALEXSTRASZAS_EGG, 300.0f); if (creatures.empty()) return GetNextEgg(); uint32 c = 0; uint32 r = urand(0, creatures.size()); for (std::list<Creature*>::iterator iter = creatures.begin(); iter != creatures.end(); ++iter) { if (c == r) return (*iter); c++; } return GetNextEgg(); }
void UpdateAI(const uint32 diff) { if (pTarget == NULL || !isAtAnEgg || me->HasUnitState(UNIT_STAT_CASTING)) return; events.Update(diff); while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_CAST_SHIELD_OF_NIGHTMARE_DELAY: DoCast(me, SPELL_SHIELD_OF_NIGHTMARE, true); break; default: break; } } if(isCastingUmbraMending) { // If the Egg is Death and Umbra Mending was casted go to the next Egg pTarget = GetNextEgg(); if(pTarget != NULL) // Solves Crashes if the Faceless killed all eggs me->GetMotionMaster()->MovePoint(POINT_FACELESS_IS_AT_AN_EGG,pTarget->GetPositionX(),pTarget->GetPositionY(),pTarget->GetPositionZ()); isAtAnEgg = false; isCastingUmbraMending = false; return; } if(pTarget->isDead()) { if(Unit* pErudax = me->FindNearestCreature(BOSS_ERUDAX,1000.0f, true)) DoCast(pErudax, SPELL_UMBRAL_MENDING,false); isCastingUmbraMending = true; return; } pTarget->AI()->DoZoneInCombat(); DoCast(pTarget,SPELL_TWILIGHT_CORRUPTION_DOT,true); DoCast(pTarget,SPELL_TWILIGHT_CORRUPTION_VISUAL,true); }