void JustDied(Unit* killer) override { _JustDied(); Talk(SAY_DEATH); if (Is25ManRaid() && me->HasAura(SPELL_SHADOWS_FATE)) DoCastAOE(SPELL_BLOOD_INFUSION_CREDIT, true); CleanAuras(); // Blah, credit the quest if (_creditBloodQuickening) { instance->SetData(DATA_BLOOD_QUICKENING_STATE, DONE); if (Player* player = killer->ToPlayer()) player->RewardPlayerAndGroupAtEvent(Is25ManRaid() ? NPC_INFILTRATOR_MINCHAR_25 : NPC_INFILTRATOR_MINCHAR_BQ, player); if (Creature* minchar = me->FindNearestCreature(NPC_INFILTRATOR_MINCHAR_BQ, 200.0f)) { minchar->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); minchar->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND); minchar->SetCanFly(false); minchar->RemoveAllAuras(); minchar->GetMotionMaster()->MoveCharge(4629.3711f, 2782.6089f, 401.5301f, SPEED_CHARGE / 3.0f); } } }
void Reset() override { if (!Is25ManRaid()) { me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_BIND, true); me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_CHARM, true); } }
void Reset() { events.ScheduleEvent(EVENT_HEROIC_STRIKE, urand(4000, 8000)); if (Is25ManRaid()) events.ScheduleEvent(EVENT_WHIRLWIND, urand(5000, 10000)); // Due to wowhead, whirlwind is only scheduled in 25-man-raid events.ScheduleEvent(EVENT_BATTLE_SHOUT, urand(15000, 30000)); }
void UpdateAI(uint32 const diff) { if (!UpdateVictim()) return; events.Update(diff); while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_NECROTIC_AURA: DoCastAOE(SPELL_NECROTIC_AURA); events.ScheduleEvent(EVENT_NECROTIC_AURA, 20000); break; case EVENT_DEATHBLOOM: DoCastAOE(SPELL_SUMMON_SPORE, true); DoCastAOE(SPELL_DEATHBLOOM); events.ScheduleEvent(EVENT_DEATHBLOOM, 30000); break; case EVENT_INEVITABLE_DOOM: DoCastAOE(RAID_MODE<uint32>(SPELL_INEVITABLE_DOOM_10, SPELL_INEVITABLE_DOOM_25)); events.ScheduleEvent(EVENT_INEVITABLE_DOOM, events.GetTimer() < 5*60000 ? 30000 : 15000); break; case EVENT_BERSERK: if (Is25ManRaid() && !me->HasAura(SPELL_BERSERK)) DoCast(me, SPELL_BERSERK, true); events.ScheduleEvent(EVENT_BERSERK, 60000); break; } } DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { if (!UpdateVictim()) return; _events.Update(diff); if (me->HasUnitState(UNIT_STAT_CASTING)) return; while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) { case EVENT_FLAME_WAVE: DoCast(me, SPELL_FLAME_WAVE); _events.ScheduleEvent(EVENT_FLAME_WAVE, 25000); break; case EVENT_SCORCH: if (Is25ManRaid()) DoCastVictim(SPELL_SCORCH_25MAN); else DoCastVictim(SPELL_SCORCH); _events.ScheduleEvent(EVENT_SCORCH, 5000); break; } } DoMeleeAttackIfReady(); }
void UpdateAI(uint32 const diff) { if (!UpdateVictim()) return; if (HeroicTimer <= diff) { DoCastVictim(SPELL_HEROIC_STRIKE); HeroicTimer = urand(4000, 6000); } else HeroicTimer -= diff; if (Is25ManRaid()) if (WhirlTimer <= diff) { DoCast(me, SPELL_WHIRLWIND); WhirlTimer = urand(15000, 20000); } else WhirlTimer -= diff; if (ShoutTimer <= diff) { DoCast(me, RAID_MODE<uint32>(SPELL_BATTLE_SHOUT, SPELL_BATTLE_SHOUT_25)); ShoutTimer = urand(30000, 40000); } else ShoutTimer -= diff; DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { if (!UpdateVictim()) return; _events.Update(diff); if (me->HasUnitState(UNIT_STAT_CASTING)) return; while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) { case EVENT_CLEAVE: DoCastVictim(SPELL_CLEAVE); _events.ScheduleEvent(EVENT_CLEAVE, urand(9000, 13000)); break; case EVENT_SHOCKWAVE: if (Is25ManRaid()) DoCastVictim(SPELL_SHOCKWAVE_25MAN); else DoCastVictim(SPELL_SHOCKWAVE); _events.ScheduleEvent(EVENT_SHOCKWAVE, urand(20000, 25000)); break; } } DoMeleeAttackIfReady(); }
void MovementInform(uint32 type, uint32 id) { if (type != POINT_MOTION_TYPE) return; switch (id) { case POINT_CENTER: DoCast(me, SPELL_INCITE_TERROR); events.ScheduleEvent(EVENT_AIR_PHASE, 100000 + uint32(Is25ManRaid() ? 0 : 20000)); events.RescheduleEvent(EVENT_SWARMING_SHADOWS, 30500, EVENT_GROUP_NORMAL); events.RescheduleEvent(EVENT_PACT_OF_THE_DARKFALLEN, 25500, EVENT_GROUP_NORMAL); events.ScheduleEvent(EVENT_AIR_START_FLYING, 5000); break; case POINT_AIR: DoCast(me, SPELL_BLOODBOLT_WHIRL); Talk(SAY_AIR_PHASE); events.ScheduleEvent(EVENT_AIR_FLY_DOWN, 10000); break; case POINT_GROUND: me->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING); me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, 0x01); me->SetFlying(false); me->SetReactState(REACT_AGGRESSIVE); if (Unit *victim = me->SelectVictim()) AttackStart(victim); events.ScheduleEvent(EVENT_BLOOD_MIRROR, 2500, EVENT_GROUP_CANCELLABLE); break; default: break; } }
void BossAI::_JustDied() { events.Reset(); summons.DespawnAll(); if (instance) { instance->SetBossState(_bossId, DONE); instance->SaveToDB(); } /* Award Points For 4.3.4 version: BurningCrusadeRaid = 10 JusticePoints / boss LichKingHeroics = 16 JusticePoints / boss LichKingRaid = 23 JusticePoints / boss CataclysmHeroics = 75 JusticePoints / boss CataclysmRaid 10man = 75 ValorPoints / boss CataclysmRaid 10man = 105 ValorPoints / boss */ if (Map* map = instance->instance) { Map::PlayerList const &PlayerList = map->GetPlayers(); if (!PlayerList.isEmpty()) { for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { if (Player* player = i->GetSource()) { if (map->GetEntry()->Expansion() == 1 && map->GetEntry()->IsRaid()) player->ModifyCurrency(395, 1000); else if (map->GetEntry()->Expansion() == 2 && !map->IsRaid() && map->IsHeroic()) player->ModifyCurrency(395, 1600); else if (map->GetEntry()->Expansion() == 2 && map->IsRaid()) player->ModifyCurrency(395, 2300); else if (map->GetEntry()->Expansion() == 3 && !map->IsRaid() && map->IsHeroic()) player->ModifyCurrency(395, 7500); else if (map->GetEntry()->Expansion() == 3 && map->IsRaid() && !Is25ManRaid()) player->ModifyCurrency(396, 7500); else if (map->GetEntry()->Expansion() == 3 && Is25ManRaid()) player->ModifyCurrency(396, 10500); } } } } }
void EnterCombat(Unit* who) { BossAI::EnterCombat(who); Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_CLEAVE, 9000); events.ScheduleEvent(EVENT_INTIDMDATING_ROAR, 14000); events.ScheduleEvent(EVENT_SUMMON_ADDS1, 18000); if (Is25ManRaid()) events.ScheduleEvent(EVENT_SUMMON_ADDS2, 20000); }
// summoning function for second phase void SummonWaveP2() { if (Is25ManRaid()) { uint8 addIndex = addWaveCounter & 1; _SummonAdd(addEntries[addIndex], addSpawnPos[addIndex*3]); _SummonAdd(addEntries[addIndex ^ 1], addSpawnPos[addIndex*3+1]); _SummonAdd(addEntries[addIndex], addSpawnPos[addIndex*3+2]); } else _SummonAdd(addEntries[urand(0,1)], addSpawnPos[6]); ++addWaveCounter; }
void StartGroundPhase() { me->SetReactState(REACT_AGGRESSIVE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetControlled(false, UNIT_STATE_ROOT); events.Reset(); events.ScheduleEvent(EVENT_MOVE_TO_BALCONY, (totalPhase < 2 ? 110000 : (110000 / totalPhase))); events.ScheduleEvent(EVENT_SPELL_CURSE, 15000); events.ScheduleEvent(EVENT_SUMMON_PLAGUED_WARRIOR_ANNOUNCE, 25000); if (Is25ManRaid()) events.ScheduleEvent(EVENT_SPELL_BLINK, 26000); }
// summoning function for second phase void SummonWaveP2() { if (Is25ManRaid()) { uint8 addIndex = _waveCounter & 1; Summon(SummonEntries[addIndex], SummonPositions[addIndex * 3]); Summon(SummonEntries[addIndex ^ 1], SummonPositions[addIndex * 3 + 1]); Summon(SummonEntries[addIndex], SummonPositions[addIndex * 3+ 2]); } else Summon(SummonEntries[urand(0, 1)], SummonPositions[6]); ++_waveCounter; }
void CastMagmaSpit() { Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); if (!PlayerList.isEmpty()) for (uint8 i = 0; i <= (Is25ManRaid() ? 8 : 2); ++i) if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, i)) { if (!me->IsWithinDistInMap(me->GetVictim(), 15.0f)) // Check tank in range for enrage. DoCast(target, SPELL_MAGMA_SPIT_TANTRUM); else DoCast(target, SPELL_MAGMA_SPIT_N); } }
void EnterCombat(Unit* /*attacker*/) override { scheduler.Schedule(Seconds(5), [this](TaskContext context) { DoCastAOE(SPELL_MAGMA_CONDUIT); if (Is25ManRaid()) DoCastAOE(SPELL_MAGMA_CONDUIT); context.Repeat(Seconds(25)); }); scheduler.Schedule(Milliseconds(12800), [this](TaskContext context) { DoCastAOE(SPELL_EARTHQUAKE); context.Repeat(Milliseconds(32500)); }); }
void Reset() { _Reset(); events.ScheduleEvent(EVENT_BERSERK, 330000); events.ScheduleEvent(EVENT_VAMPIRIC_BITE, 15000); events.ScheduleEvent(EVENT_BLOOD_MIRROR, 2500, EVENT_GROUP_CANCELLABLE); events.ScheduleEvent(EVENT_DELIRIOUS_SLASH, urand(20000, 24000), EVENT_GROUP_NORMAL); events.ScheduleEvent(EVENT_PACT_OF_THE_DARKFALLEN, 15000, EVENT_GROUP_NORMAL); events.ScheduleEvent(EVENT_SWARMING_SHADOWS, 30500, EVENT_GROUP_NORMAL); events.ScheduleEvent(EVENT_TWILIGHT_BLOODBOLT, urand(20000, 25000), EVENT_GROUP_NORMAL); events.ScheduleEvent(EVENT_AIR_PHASE, 124000 + uint32(Is25ManRaid() ? 3000 : 0)); me->SetSpeed(MOVE_FLIGHT, 0.642857f, true); offtank = NULL; vampires.clear(); }
Korthik_ExtremistAI(Creature* creature) : ScriptedAI(creature) { if (Is25ManRaid()) { me->SetMaxHealth(3301009); me->SetHealth(3301009); } else { me->SetMaxHealth(1222596); me->SetHealth(1222596); } me->SetLevel(91); me->setFaction(16); }
coagulated_oozeAI(Creature* creature) : ScriptedAI(creature) { if (Is25ManRaid()) { me->SetMaxHealth(1181823); me->SetHealth(1181823); } else { me->SetMaxHealth(3794328); me->SetHealth(3794328); } me->SetLevel(92); me->setFaction(16); }
void Reset() override { _Reset(); events.ScheduleEvent(EVENT_BERSERK, 330000); events.ScheduleEvent(EVENT_VAMPIRIC_BITE, 15000); events.ScheduleEvent(EVENT_BLOOD_MIRROR, 2500, EVENT_GROUP_CANCELLABLE); events.ScheduleEvent(EVENT_DELIRIOUS_SLASH, urand(20000, 24000), EVENT_GROUP_NORMAL); events.ScheduleEvent(EVENT_PACT_OF_THE_DARKFALLEN, 15000, EVENT_GROUP_NORMAL); events.ScheduleEvent(EVENT_SWARMING_SHADOWS, 30500, EVENT_GROUP_NORMAL); events.ScheduleEvent(EVENT_TWILIGHT_BLOODBOLT, urand(20000, 25000), EVENT_GROUP_NORMAL); events.ScheduleEvent(EVENT_AIR_PHASE, 124000 + uint32(Is25ManRaid() ? 3000 : 0)); CleanAuras(); _vampires.clear(); Initialize(); }
amber_riddenAI(Creature* creature) : ScriptedAI(creature) { if (Is25ManRaid()) { me->SetMaxHealth(22765968); me->SetHealth(22765968); } else { me->SetMaxHealth(8431840); me->SetHealth(8431840); } me->SetLevel(92); me->setFaction(16); }
searstring_AI(Creature* creature) : ScriptedAI(creature) { if (Is25ManRaid()) { me->SetMaxHealth(45531936); me->SetHealth(45531936); } else { me->SetMaxHealth(16863680); me->SetHealth(16863680); } me->SetLevel(92); me->setFaction(16); }
korthik_fleshrenderAI(Creature* creature) : ScriptedAI(creature) { if (Is25ManRaid()) { me->SetMaxHealth(28457460); me->SetHealth(28457460); } else { me->SetMaxHealth(10539800); me->SetHealth(10539800); } me->SetLevel(92); me->setFaction(16); }
pool_tenderAI(Creature* creature) : ScriptedAI(creature) { if (Is25ManRaid()) { me->SetMaxHealth(12647760); me->SetHealth(12647760); } else { me->SetMaxHealth(4215920); me->SetHealth(4215920); } me->SetLevel(92); me->setFaction(16); }
Zephyr_CasterAI(Creature* creature) : ScriptedAI(creature) { if (Is25ManRaid()) { me->SetMaxHealth(17074476); me->SetHealth(17074476); } else { me->SetMaxHealth(6323880); me->SetHealth(6323880); } me->SetLevel(91); me->setFaction(16); }
korthik_swarmguardAI(Creature* creature) : ScriptedAI(creature) { if (Is25ManRaid()) { me->SetMaxHealth(18971640); me->SetHealth(18971640); } else { me->SetMaxHealth(6323880); me->SetHealth(6323880); } me->SetLevel(92); me->setFaction(16); }
SetThik_SwiftBladeAI(Creature* creature) : ScriptedAI(creature) { if (Is25ManRaid()) { me->SetMaxHealth(9485820); me->SetHealth(9485820); } else { me->SetMaxHealth(4215920); me->SetHealth(4215920); } me->setFaction(16); me->SetLevel(92); }
windblade_AI(Creature* creature) : ScriptedAI(creature) { if (Is25ManRaid()) { me->SetMaxHealth(25295520); me->SetHealth(25295520); } else { me->SetMaxHealth(8431840); me->SetHealth(8431840); } me->SetLevel(92); me->setFaction(16); }
augusterAI(Creature* creature) : ScriptedAI(creature) { if (Is25ManRaid()) { me->SetMaxHealth(28457460); me->SetHealth(28457460); } else { me->SetMaxHealth(10118208); me->SetHealth(10118208); } me->SetLevel(92); me->setFaction(16); }
void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); summons.DoZoneInCombat(); events.SetPhase(PHASE_NORMAL); events.ScheduleEvent(EVENT_IMPALE, randtime(Seconds(10), Seconds(20)), 0, PHASE_NORMAL); events.ScheduleEvent(EVENT_SCARABS, randtime(Seconds(20), Seconds(30)), 0, PHASE_NORMAL); events.ScheduleEvent(EVENT_LOCUST, Minutes(1)+randtime(Seconds(40), Seconds(60)), 0, PHASE_NORMAL); events.ScheduleEvent(EVENT_BERSERK, Minutes(10)); if (!Is25ManRaid()) events.ScheduleEvent(EVENT_SPAWN_GUARD, randtime(Seconds(15), Seconds(20))); }
void UpdateAI (uint32 const diff) { _events.Update(diff); while (uint32 _eventId = _events.ExecuteEvent()) { switch (_eventId) { case EVENT_VOID_BLAST: DoCastAOE(Is25ManRaid() ? SPELL_VOID_BLAST_25M : SPELL_VOID_BLAST); me->RemoveAllAuras(); me->Kill(me); break; } } }