void UpdateAI(const uint32 diff) { if (!UpdateVictim()) return; if (!Light && !HealthAbovePct(100)) { if(Asphyxiate_Timer <= diff) { DoCastToAllHostilePlayers(IsHeroic() ? SPELL_ASPHYXIATE_H : SPELL_ASPHYXIATE); Asphyxiate_Timer = 30000; }else Asphyxiate_Timer -= diff; if(PainAndSuffering_Timer <= diff) { if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0)) DoCast(pTarget, IsHeroic() ? SPELL_PAINANDSUFFERING_H : SPELL_PAINANDSUFFERING); PainAndSuffering_Timer = 12000; }else PainAndSuffering_Timer -= diff; if(StayOfExecution_Timer <= diff) { DoCastToAllHostilePlayers(IsHeroic() ? SPELL_STAYOFEXECUTION_H : SPELL_STAYOFEXECUTION); StayOfExecution_Timer = 36200; }else StayOfExecution_Timer -= diff; if(WrackingPain_Timer <= diff) { if (IsHeroic()) { DoCast(SPELL_WRACKINGPAIN); WrackingPain_Timer = 20000; }else WrackingPain_Timer -= diff; Light = true; Dark = false; } } if (!Dark && !HealthAbovePct(26)) { if (IsHeroic()) { Position pos; me->GetPosition(&pos); SetCombatMovement(false); me->MonsterYell(SAY_DARKANGEL, LANG_UNIVERSAL, NULL); DoCast(me, SPELL_ARCHANGELFORM); DoCast(SPELL_CALAMITY); Dark = true; Light = false; } DoMeleeAttackIfReady(); } }
void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; _events.Update(diff); while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) { case EVENT_POISON_NOVA: DoCastAOE(SPELL_POISON_NOVA); _events.ScheduleEvent(EVENT_TOXIC_WASTE, 30000); break; case EVENT_TOXIC_WASTE: DoCastToAllHostilePlayers(SPELL_TOXIC_WASTE); _events.ScheduleEvent(EVENT_TOXIC_WASTE, 45000); break; case EVENT_ENRAGE: Talk(SAY_RANDOM); DoCast(SPELL_ENRAGE); break; case EVENT_RAIN_OF_FIRE: me->FinishSpell(CURRENT_CHANNELED_SPELL, true); DoCastToAllHostilePlayers(SPELL_RAIN_OF_FIRE); _events.ScheduleEvent(EVENT_RAIN_OF_FIRE, 10000); break; case EVENT_FLAME_BURST: Talk(SAY_BERSERK); DoCast(me, SPELL_FLAME_BURST); _events.ScheduleEvent(EVENT_FLAME_BURST, 12000); break; case EVENT_SUMMONS: Talk(SAY_HELP); me->SummonCreature(NPC_PUSTELIGER_SCHRECKEN, me->GetPositionX() + 5, me->GetPositionY(), me->GetPositionZ() + 5, 0, TEMPSUMMON_CORPSE_DESPAWN, 12000); me->SummonCreature(NPC_PUSTELIGER_SCHRECKEN, me->GetPositionX() + 5, me->GetPositionY(), me->GetPositionZ() + 5, 0, TEMPSUMMON_CORPSE_DESPAWN, 12000); me->SummonCreature(NPC_PUSTELIGER_SCHRECKEN, me->GetPositionX() + 5, me->GetPositionY(), me->GetPositionZ() + 5, 0, TEMPSUMMON_CORPSE_DESPAWN, 12000); _events.ScheduleEvent(EVENT_SUMMONS, 60000); break; case EVENT_ARCANE_BOMB: Talk(SAY_ENRAGE); DoCastToAllHostilePlayers(SPELL_ARCANE_BOMB); _events.ScheduleEvent(EVENT_ARCANE_BOMB, 15000); break; case EVENT_SPALTEN: DoCastToAllHostilePlayers(SPELL_SPALTEN); _events.ScheduleEvent(EVENT_SPALTEN, 30000); break; case EVENT_BURN: DoCastVictim(SPELL_BURN); _events.ScheduleEvent(EVENT_BURN, 5000); break; case EVENT_BREATH: if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO,0)){ DoCast(target,SPELL_FLAME_BREATH); } _events.ScheduleEvent(EVENT_BREATH, 35000); break; default: break; } } DoMeleeAttackIfReady(); }
void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; _events.Update(diff); while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) { case EVENT_ALPTRAUM: DoCastToAllHostilePlayers(SPELL_ALPTRAUM); _events.ScheduleEvent(EVENT_ALPTRAUM, 10000); break; case EVENT_ENRAGE: DoCastToAllHostilePlayers(SPELL_ENRAGE); break; case EVENT_ARKANE_AUFLADUNG: DoCastToAllHostilePlayers(SPELL_ARKANE_AUFLADUNG); _events.ScheduleEvent(EVENT_BLIZZARD, 15000); break; case EVENT_FEUERBALL: DoCastToAllHostilePlayers(SPELL_FEUERBALL); _events.ScheduleEvent(EVENT_SEUCHENBOMBE, 10000); break; case EVENT_BLITZENTLADUNG: DoCastToAllHostilePlayers(SPELL_BLITZENTLADUNG); _events.ScheduleEvent(EVENT_BLITZENTLADUNG, 12000); break; case EVENT_BLIZZARD: Talk(SAY_BLIZZARD); DoCastToAllHostilePlayers(SPELL_BLIZZARD); _events.ScheduleEvent(EVENT_ARKANE_AUFLADUNG, 25000); break; case EVENT_BLUTGERUCH: DoCastToAllHostilePlayers(SPELL_BLUTGERUCH); _events.ScheduleEvent(EVENT_BLUTGERUCH, 18000); break; case EVENT_BRECHENDE_WELLE: DoCastVictim(SPELL_BRECHENDE_WELLE); _events.ScheduleEvent(EVENT_BRECHENDE_WELLE, 12000); break; case EVENT_DEGENERATION: DoCast(SPELL_DEGENERATION); _events.ScheduleEvent(EVENT_DEGENERATION, 20000,1); break; case EVENT_DURCHDRINGENDE_KAELTE: DoCastToAllHostilePlayers(SPELL_DURCHDRINGENDE_KAELTE); _events.ScheduleEvent(EVENT_DURCHDRINGENDE_KAELTE, 12000); break; case EVENT_EISBLITZ: DoCastToAllHostilePlayers(SPELL_EISBLITZ); _events.ScheduleEvent(EVENT_ERNEUERUNG, 25000); break; case EVENT_ERNEUERUNG: DoCast(me,SPELL_ERNEUERUNG); _events.ScheduleEvent(EVENT_EISBLITZ, 25000); break; case EVENT_SEUCHENBOMBE: DoCast(me, SPELL_SEUCHENBOMBE); _events.ScheduleEvent(EVENT_SEUCHENBOMBE, 25000); break; default: break; } } DoMeleeAttackIfReady(); }
void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; _events.Update(diff); while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) { case EVENT_HEX: DoCastVictim(SPELL_HEX); _events.ScheduleEvent(EVENT_HEX, 1000); break; case EVENT_SHEEP: DoCastVictim(SPELL_SHEEP); _events.ScheduleEvent(EVENT_SHEEP, 1000); break; case EVENT_FLUCH_DER_PEIN: DoCastVictim(SPELL_FLUCH_DER_PEIN); _events.ScheduleEvent(EVENT_FLUCH_DER_PEIN, 8000); break; case EVENT_SPALTEN: DoCastVictim(SPELL_SPALTEN); _events.ScheduleEvent(EVENT_SPALTEN, 10000); break; case EVENT_SCHATTENWORT_SCHMERZ: DoCastToAllHostilePlayers(SPELL_SCHATTENWORT_SCHMERZ); _events.ScheduleEvent(EVENT_SCHATTENWORT_SCHMERZ, 20000); break; case EVENT_RUESTUNG_ZERREISSEN: DoCastVictim(SPELL_RUESTUNG_ZERREISSEN); _events.ScheduleEvent(EVENT_RUESTUNG_ZERREISSEN, 1000); break; case EVENT_VERDERBNIS: DoCastVictim(SPELL_VERDERBNIS); _events.ScheduleEvent(EVENT_VERDERBNIS, 1000); break; case EVENT_FLEISCH_EINAESCHERN: DoCastVictim(SPELL_FLEISCH_EINAESCHERN); _events.ScheduleEvent(EVENT_FLEISCH_EINAESCHERN, 2000); break; case EVENT_INSTABILES_GEBRECHEN: DoCastVictim(SPELL_INSTABILES_GEBRECHEN); _events.ScheduleEvent(EVENT_INSTABILES_GEBRECHEN, 3000); break; case EVENT_WIRBELWIND: DoCastVictim(SPELL_WIRBELWIND); _events.ScheduleEvent(EVENT_WIRBELWIND, 2000); break; case EVENT_VERDERBENDE_SEUCHE: DoCastVictim(SPELL_VERDERBENDE_SEUCHE); _events.ScheduleEvent(EVENT_VERDERBENDE_SEUCHE, 800); break; case EVENT_WUNDGIFT: DoCastVictim(SPELL_WUNDGIFT); _events.ScheduleEvent(EVENT_WUNDGIFT, 1000); break; case EVENT_HAMMER_DER_GERECHTIGKEIT: DoCastVictim(SPELL_HAMMER_DER_GERECHTIGKEIT); _events.ScheduleEvent(EVENT_HAMMER_DER_GERECHTIGKEIT, 1000); break; case EVENT_GOETTLICHER_STURM: DoCastVictim(SPELL_GOETTLICHER_STURM); _events.ScheduleEvent(EVENT_GOETTLICHER_STURM, 1000); break; case EVENT_ZAUBERSCHILD: DoCast(me, SPELL_ZAUBERSCHILD); _events.ScheduleEvent(EVENT_ZAUBERSCHILD, 4000); break; default: break; } } DoMeleeAttackIfReady(); }
void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; _events.Update(diff); while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) { case EVENT_NECROTIC_AURA: DoCast(me, SPELL_NECROTIC_AURA); break; case EVENT_BRAIN_LINK_DAMAGE: DoCastVictim(SPELL_BRAIN_LINK_DAMAGE); _events.ScheduleEvent(EVENT_BRAIN_LINK_DAMAGE, 8000); break; case EVENT_MANA_DESTRUCTION: Talk(SAY_RANDOM); DoCast(SPELL_MANA_DESTRUCTION); _events.ScheduleEvent(EVENT_MANA_DESTRUCTION, 1000); break; case EVENT_CRYSTAL_CHAINS: DoCastVictim(SPELL_CRYSTAL_CHAINS); _events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, 30000); break; case EVENT_NECROTIC_POISON: Talk(SAY_BERSERK); DoCast(me, SPELL_NECROTIC_POISON); _events.ScheduleEvent(EVENT_NECROTIC_POISON, 120000); break; case EVENT_MANGLING_SLASH: Talk(SAY_ENRAGE); DoCast(me, SPELL_MANGLING_SLASH); _events.ScheduleEvent(EVENT_MANGLING_SLASH, 10000); break; case EVENT_PIERCING_SLASH: DoCastToAllHostilePlayers(SPELL_PIERCING_SLASH); _events.ScheduleEvent(EVENT_PIERCING_SLASH, 15000); break; case EVENT_BLOOD_MIRROR_DAMAGE: DoCast(SPELL_BLOOD_MIRROR_DAMAGE); _events.ScheduleEvent(EVENT_BLOOD_MIRROR_DAMAGE, 18000); break; case EVENT_ANNOYING_YIPPING: DoCastToAllHostilePlayers(SPELL_ANNOYING_YIPPING); _events.ScheduleEvent(EVENT_ANNOYING_YIPPING, 25000); break; case EVENT_SARGERAS: DoCastToAllHostilePlayers(SPELL_SARGERAS); _events.ScheduleEvent(EVENT_SARGERAS, 5000); break; case EVENT_BURN: DoCastToAllHostilePlayers(SPELL_BURN); _events.ScheduleEvent(EVENT_BURN, 35000); break; default: break; } } DoMeleeAttackIfReady(); }
void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; _events.Update(diff); while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) { case EVENT_SUMMONS: Talk(SAY_HELP); me->SummonCreature(NPC_ADD, me->GetPositionX() + 5, me->GetPositionY() + 5, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000); _events.ScheduleEvent(EVENT_SUMMONS, 30000); break; case EVENT_NECROTIC_AURA: DoCast(me->GetVictim(), SPELL_NECROTIC_AURA); break; case EVENT_BRAIN_LINK_DAMAGE: DoCastVictim(SPELL_BRAIN_LINK_DAMAGE); _events.ScheduleEvent(EVENT_BRAIN_LINK_DAMAGE, 8000); break; case EVENT_MANA_DESTRUCTION: Talk(SAY_RANDOM); DoCastVictim(SPELL_MANA_DESTRUCTION); _events.ScheduleEvent(EVENT_MANA_DESTRUCTION, 1000); break; case EVENT_CRYSTAL_CHAINS: DoCastVictim(SPELL_CRYSTAL_CHAINS); _events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, 30000); break; case EVENT_NECROTIC_POISON: Talk(SAY_BERSERK); DoCast(me->GetVictim(), SPELL_NECROTIC_POISON); _events.ScheduleEvent(EVENT_NECROTIC_POISON, 120000); break; case EVENT_MANGLING_SLASH: Talk(SAY_ENRAGE); DoCast(me, SPELL_MANGLING_SLASH); _events.ScheduleEvent(EVENT_MANGLING_SLASH, 10000); break; case EVENT_PIERCING_SLASH: DoCastToAllHostilePlayers(SPELL_PIERCING_SLASH); _events.ScheduleEvent(EVENT_PIERCING_SLASH, 15000); break; case EVENT_BLOOD_MIRROR_DAMAGE: DoCast(me->GetVictim(), SPELL_BLOOD_MIRROR_DAMAGE); _events.ScheduleEvent(EVENT_BLOOD_MIRROR_DAMAGE, 18000); break; case EVENT_ANNOYING_YIPPING: DoCastToAllHostilePlayers(SPELL_ANNOYING_YIPPING); _events.ScheduleEvent(EVENT_ANNOYING_YIPPING, 25000); break; case EVENT_SARGERAS: DoCastToAllHostilePlayers(SPELL_SARGERAS); _events.ScheduleEvent(EVENT_SARGERAS, 5000); break; case EVENT_BURN: DoCastVictim(SPELL_BURN); _events.ScheduleEvent(EVENT_BURN, 35000); break; case EVENT_TAIL_LASH: DoCast(me->GetVictim(), SPELL_TAIL_LASH); _events.ScheduleEvent(EVENT_BURN, 5000); break; default: break; } } DoMeleeAttackIfReady(); }
void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; _events.Update(diff); while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) { case EVENT_ALPTRAUM: DoCastToAllHostilePlayers(SPELL_ALPTRAUM); _events.ScheduleEvent(EVENT_ALPTRAUM, 10000); break; case EVENT_ENRAGE: DoCastToAllHostilePlayers(SPELL_ENRAGE); break; case EVENT_ARKANE_AUFLADUNG: DoCastToAllHostilePlayers(SPELL_ARKANE_AUFLADUNG); _events.ScheduleEvent(EVENT_BLIZZARD, 15000); break; case EVENT_FEUERBALL: DoCastToAllHostilePlayers(SPELL_FEUERBALL); _events.ScheduleEvent(EVENT_SEUCHENBOMBE, 10000); break; case EVENT_BLITZENTLADUNG: DoCastToAllHostilePlayers(SPELL_BLITZENTLADUNG); _events.ScheduleEvent(EVENT_BLITZENTLADUNG, 12000); break; case EVENT_BLIZZARD: Talk(SAY_BLIZZARD); DoCastToAllHostilePlayers(SPELL_BLIZZARD); _events.ScheduleEvent(EVENT_ARKANE_AUFLADUNG, 25000); break; case EVENT_BLUTGERUCH: DoCastToAllHostilePlayers(SPELL_BLUTGERUCH); _events.ScheduleEvent(EVENT_BLUTGERUCH, 18000); break; case EVENT_BRECHENDE_WELLE: DoCastVictim(SPELL_BRECHENDE_WELLE); _events.ScheduleEvent(EVENT_BRECHENDE_WELLE, 12000); break; case EVENT_DEGENERATION: DoCast(SPELL_DEGENERATION); _events.ScheduleEvent(EVENT_DEGENERATION, 20000, 1); break; case EVENT_DURCHDRINGENDE_KAELTE: DoCastToAllHostilePlayers(SPELL_DURCHDRINGENDE_KAELTE); _events.ScheduleEvent(EVENT_DURCHDRINGENDE_KAELTE, 12000); break; case EVENT_EISBLITZ: DoCastToAllHostilePlayers(SPELL_EISBLITZ); _events.ScheduleEvent(EVENT_ERNEUERUNG, 25000); break; case EVENT_ERNEUERUNG: DoCast(me, SPELL_ERNEUERUNG); _events.ScheduleEvent(EVENT_EISBLITZ, 25000); break; case EVENT_SEUCHENBOMBE: DoCast(me, SPELL_SEUCHENBOMBE); _events.ScheduleEvent(EVENT_SEUCHENBOMBE, 25000); break; case EVENT_TOXIC_WASTE: DoCastToAllHostilePlayers(SPELL_TOXIC_WASTE); _events.ScheduleEvent(EVENT_TOXIC_WASTE, 15000); break; case EVENT_SPALTEN: DoCastVictim(SPELL_SPALTEN); _events.ScheduleEvent(EVENT_SPALTEN, 10000); break; case EVENT_ARMY_OF_DEAD: DoCast(SPELL_ARMY_OF_DEAD); break; case EVENT_SUMMONS_HARD: me->SummonCreature(NPC_SCHMORSCHUPPEN, me->GetPositionX() + 5, me->GetPositionY(), me->GetPositionZ() + 5, 0, TEMPSUMMON_CORPSE_DESPAWN, 600000); me->SummonCreature(NPC_SCHMORSCHUPPEN, me->GetPositionX() + 5, me->GetPositionY(), me->GetPositionZ() + 5, 0, TEMPSUMMON_CORPSE_DESPAWN, 600000); break; case EVENT_SUMMONS: me->SummonCreature(NPC_SCHMORSCHUPPEN, me->GetPositionX() + 5, me->GetPositionY(), me->GetPositionZ() + 5, 0, TEMPSUMMON_CORPSE_DESPAWN, 600000); break; default: break; } } DoMeleeAttackIfReady(); }
void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; _events.Update(diff); while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) { case EVENT_CURRUPTION: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1)){ DoCast(target, SPELL_CORRUPTION); } _events.ScheduleEvent(EVENT_CURRUPTION, 10000); break; case EVENT_ENRAGE: DoCastToAllHostilePlayers(SPELL_ENRAGE); break; case EVENT_CRIPPLE: Talk(SAY_RANDOM); DoCastToAllHostilePlayers(SPELL_CRIPPLE); _events.ScheduleEvent(EVENT_CRIPPLE, 25000); break; case EVENT_ARCANE_BARRAGE: DoCastToAllHostilePlayers(SPELL_ARCANE_BARRAGE); _events.ScheduleEvent(EVENT_ARCANE_BARRAGE, 5000); break; case EVENT_SUMMONS: Talk(SAY_HELP); me->SummonCreature(NPC_TOLREOSADD, me->GetPositionX() + 5, me->GetPositionY(), me->GetPositionZ() + 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000); _events.ScheduleEvent(EVENT_SUMMONS, 45000); break; case EVENT_EARTH: Talk(SAY_ENRAGE); if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0)){ DoCast(target, SPELL_EARTH); } _events.ScheduleEvent(EVENT_EARTH, 10000); break; case EVENT_PSYCHOSIS: if (Unit* target = SelectTarget(SELECT_TARGET_BOTTOMAGGRO,0)){ DoCast(target, SPELL_PSYCHOSIS); } _events.ScheduleEvent(EVENT_PSYCHOSIS, 18000); break; case EVENT_HEX: if (Unit* target = SelectTarget(SELECT_TARGET_FARTHEST, 0)){ DoCast(target,SPELL_HEX); } _events.ScheduleEvent(EVENT_HEX, 10000); break; case EVENT_ARCANE_DEVASTION: DoCastVictim(SPELL_ARCANE_DEVASTION); _events.ScheduleEvent(EVENT_ARCANE_DEVASTION, 12000); break; case EVENT_ARMY_OF_DEAD: me->Yell("Kommt mir zur Hilfe!", LANG_UNIVERSAL, nullptr); DoCastToAllHostilePlayers(SPELL_ARMY_OF_DEAD); _events.ScheduleEvent(EVENT_ARMY_OF_DEAD, 20000); break; default: break; } } DoMeleeAttackIfReady(); }