void UpdateAI(uint32 diff) { if (ghost) { if (instance && instance->GetData(DATA_SKARVALD_DALRONN_EVENT) != IN_PROGRESS) me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); } if (!UpdateVictim()) return; if (!ghost) { if (Check_Timer) { if (Check_Timer <= diff) { Check_Timer = 5000; Unit* dalronn = Unit::GetUnit(*me, instance ? instance->GetData64(DATA_DALRONN) : 0); if (dalronn && dalronn->isDead()) { Dalronn_isDead = true; Response_Timer = 2000; Check_Timer = 0; } } else Check_Timer -= diff; } if (Response_Timer && Dalronn_isDead) { if (Response_Timer <= diff) { Talk(YELL_SKARVALD_DAL_DIEDFIRST); Response_Timer = 0; } else Response_Timer -= diff; } } if (Charge_Timer <= diff) { DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, SkarvaldChargePredicate(me)), SPELL_CHARGE); Charge_Timer = 5000+rand()%5000; } else Charge_Timer -= diff; if (StoneStrike_Timer <= diff) { DoCastVictim(SPELL_STONE_STRIKE); StoneStrike_Timer = 5000+rand()%5000; } else StoneStrike_Timer -= diff; if (!me->HasUnitState(UNIT_STATE_CASTING)) DoMeleeAttackIfReady(); }
void ExecuteEvent(uint32 eventId) override { switch (eventId) { case EVENT_SKARVALD_CHARGE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, SkarvaldChargePredicate(me))) DoCast(target, SPELL_CHARGE); events.ScheduleEvent(EVENT_CHARGE, urand(5000, 10000)); break; case EVENT_STONE_STRIKE: DoCastVictim(SPELL_STONE_STRIKE); events.ScheduleEvent(EVENT_STONE_STRIKE, urand(5000, 10000)); break; default: generic_boss_controllerAI::ExecuteEvent(eventId); break; } }