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));
 }
Example #4
0
            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();
            }
Example #5
0
			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();
			}
Example #6
0
            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();
            }
Example #7
0
			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();
			}
Example #8
0
            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;
                }
            }
Example #9
0
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);
            }
Example #11
0
 // 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;
 }
Example #12
0
		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);
		}
Example #13
0
            // 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;
            }
Example #14
0
        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);
                    }
        }
Example #15
0
 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));
     });
 }
Example #16
0
 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();
 }
Example #17
0
		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);
		}
Example #18
0
		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);
		}
Example #19
0
 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();
 }
Example #20
0
		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);
		}
Example #21
0
		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);
		}
Example #22
0
		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);
		}
Example #23
0
		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);
		}
Example #24
0
		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);
		}
Example #25
0
		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);
		}
Example #26
0
		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);
		}
Example #27
0
		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);
		}
Example #28
0
		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);
		}
Example #29
0
        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;
                    }
                }
            }