Exemplo n.º 1
0
            void UpdateAI(uint32 diff)
            {
                if (!UpdateVictim() || !CheckInRoom())
                    return;

                events.Update(diff);

                while (uint32 eventId = events.ExecuteEvent())
                {
                    switch (eventId)
                    {
                        case EVENT_DISRUPT:
                            DoCastAOE(SPELL_SPELL_DISRUPTION);
                            events.ScheduleEvent(EVENT_DISRUPT, urand(5000, 10000));
                            break;
                        case EVENT_FEVER:
                            DoCastAOE(SPELL_DECREPIT_FEVER);
                            events.ScheduleEvent(EVENT_FEVER, urand(20000, 25000));
                            break;
                        case EVENT_PHASE1:
                            TalkToMap(EMOTE_TELEPORT2);
                            me->SetReactState(REACT_AGGRESSIVE);
                            me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
                            DoZoneInCombat();
                            events.Reset();
                            eruptSection = 3;
                            events.ScheduleEvent(EVENT_DISRUPT, urand(10000, 25000));
                            events.ScheduleEvent(EVENT_FEVER, urand(15000, 20000));
                            events.ScheduleEvent(EVENT_PHASE2, 90000);
                            events.ScheduleEvent(EVENT_ERUPT, 15000);
                            phase = PHASE_1;
                            break;
                        case EVENT_PHASE2:
                            TalkToMap(SAY_PHASE);
                            TalkToMap(EMOTE_TELEPORT1);
                            me->SetReactState(REACT_PASSIVE);
                            me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
                            me->AttackStop();
                            me->RemoveAllAuras();
                            DoCast(SPELL_TELEPORT_SELF);
                            DoCastAOE(SPELL_PLAGUE_CLOUD);
                            events.Reset();
                            events.ScheduleEvent(EVENT_PHASE1, 45000);
                            events.ScheduleEvent(EVENT_ERUPT, 8000);
                            phase = PHASE_2;
                            break;
                        case EVENT_ERUPT:
                            instance->SetData(DATA_HEIGAN_ERUPT, eruptSection);
                            TeleportCheaters();
                            if (eruptSection == 0)
                                eruptDirection = true;
                            else if (eruptSection == 3)
                                eruptDirection = false;
                            eruptDirection ? ++eruptSection : --eruptSection;
                            events.ScheduleEvent(EVENT_ERUPT, EVENT_PHASE1 ? 10000 : 3000);
                            break;
                    }
                }
                DoMeleeAttackIfReady();
            }
Exemplo n.º 2
0
            void UpdateAI(uint32 diff)
            {
                if (!UpdateVictim() || !CheckInRoom())
                    return;

                if (!enraged && HealthBelowPct(30))
                {
                    enraged = true;
                    events.ScheduleEvent(EVENT_FRENZY, 0);
                }

                events.Update(diff);

                while (uint32 eventId = events.ExecuteEvent())
                {
                    switch (eventId)
                    {
                        case EVENT_WRAP:
                            TalkToMap(EMOTE_WRAP);
                            for (uint8 i = 0; i < RAID_MODE(1, 2); ++i)
                            {
                                if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0, true, -SPELL_WEB_WRAP))
                                {
                                    target->RemoveAura(SPELL_WEB_SPRAY);
                                    uint8 pos = rand()%MAX_POS_WRAP;
                                    target->GetMotionMaster()->MoveJump(PosWrap[pos].GetPositionX(), PosWrap[pos].GetPositionY(), PosWrap[pos].GetPositionZ(), 20, 20);
                                    if (Creature* wrap = DoSummon(MOB_WEB_WRAP, PosWrap[pos], 0, TEMPSUMMON_CORPSE_DESPAWN))
                                        wrap->AI()->SetGUID(target->GetGUID());
                                }
                            }
                            events.ScheduleEvent(EVENT_WRAP, 40000);
                            break;
                        case EVENT_SPRAY:
                            DoCastAOE(SPELL_WEB_SPRAY);
                            events.ScheduleEvent(EVENT_SPRAY, 40000);
                            break;
                        case EVENT_SHOCK:
                            DoCastAOE(SPELL_POISON_SHOCK);
                            events.ScheduleEvent(EVENT_SHOCK, urand(10000, 20000));
                            break;
                        case EVENT_POISON:
                            DoCast(me->getVictim(), SPELL_NECROTIC_POISON);
                            events.ScheduleEvent(EVENT_POISON, urand(10000, 20000));
                            break;
                        case EVENT_FRENZY:
                            DoCast(me, SPELL_FRENZY, true);
                            events.ScheduleEvent(EVENT_FRENZY, 600000);
                            break;
                        case EVENT_SUMMON:
                            TalkToMap(EMOTE_SPIDER);
                            uint8 amount = urand(8, 10);
                            for (uint8 i = 0; i < amount; ++i)
                                DoSummon(MOB_SPIDERLING, me, 0, TEMPSUMMON_CORPSE_DESPAWN);
                            events.ScheduleEvent(EVENT_SUMMON, 40000);
                            break;
                    }
                }
                DoMeleeAttackIfReady();
        }
Exemplo n.º 3
0
 void KilledUnit(Unit* victim)
 {
     if (!(rand()%5))
         if (victim->GetTypeId() == TYPEID_PLAYER)
             victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCARABS_PLR, true, 0, 0, me->GetGUID());
     TalkToMap(EMOTE_CORPSE_SCARAB);
     TalkToMap(SAY_SLAY);
 }
Exemplo n.º 4
0
            void UpdateAI(uint32 diff)
            {
                if (!UpdateVictimWithGaze() || !CheckInRoom())
                    return;

                events.Update(diff);

                while (uint32 eventId = events.ExecuteEvent())
                {
                    switch (eventId)
                    {
                        case EVENT_WOUND:
                            DoCast(me->GetVictim(), SPELL_MORTAL_WOUND);
                            events.ScheduleEvent(EVENT_WOUND, 10000);
                            break;
                        case EVENT_ENRAGE:
                            TalkToMap(EMOTE_ENRAGE);
                            DoCast(me, SPELL_ENRAGE);
                            events.ScheduleEvent(EVENT_ENRAGE, 15000);
                            break;
                        case EVENT_DECIMATE:
                            TalkToMap(EMOTE_DECIMATE);
                            DoCastAOE(SPELL_DECIMATE);
                            events.ScheduleEvent(EVENT_DECIMATE, 105000);
                            break;
                        case EVENT_BERSERK:
                            DoCast(me, SPELL_BERSERK);
                            events.ScheduleEvent(EVENT_BERSERK, 300000);
                            break;
                        case EVENT_SUMMON:
                            for (int32 i = 0; i < RAID_MODE(1, 2); ++i)
                               DoSummon(MOB_ZOMBIE, PosSummon[rand() % RAID_MODE(1, 3)]);
                            events.ScheduleEvent(EVENT_SUMMON, 10000);
                            break;
                    }
                }

                if (me->GetVictim() && me->GetVictim()->GetEntry() == MOB_ZOMBIE)
                {
                    if (me->IsWithinMeleeRange(me->GetVictim()))
                    {
                        me->Kill(me->GetVictim());
                        me->ModifyHealth(int32(me->CountPctFromMaxHealth(5)));
                    }
                }
                else
                    DoMeleeAttackIfReady();
            }
Exemplo n.º 5
0
 void EnterCombat(Unit* /*who*/)
 {
     _EnterCombat();
     TalkToMap(SAY_AGGRO);
     EnterPhaseFight();
     safetyDance = true;
 }
Exemplo n.º 6
0
 void MoveInLineOfSight(Unit* who)
 {
     if (who->GetEntry() == MOB_ZOMBIE && me->IsWithinDistInMap(who, 7))
     {
         SetGazeOn(who);
         TalkToMap(EMOTE_NEARBY);
     }
     else
         BossAI::MoveInLineOfSight(who);
 }
Exemplo n.º 7
0
            void EnterCombat(Unit* /*who*/)
            {
                _EnterCombat();
                TalkToMap(SAY_AGGRO);
                events.ScheduleEvent(EVENT_IMPALE, urand(10000, 20000));
                events.ScheduleEvent(EVENT_LOCUST, 90000);
                events.ScheduleEvent(EVENT_BERSERK, 600000);

                if (GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL)
                    events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, urand(15000, 20000));
            }
Exemplo n.º 8
0
 void DoAction(int32 action)
 {
     switch (action)
     {
         case ACTION_INTRO:
             if (!_introDone)
             {
                 TalkToMap(SAY_GREET);
                _introDone = true;
             }
             break;
     }
 }
Exemplo n.º 9
0
            void UpdateAI(uint32 diff)
            {
                if (!UpdateVictim() || !CheckInRoom())
                    return;

                events.Update(diff);

                while (uint32 eventId = events.ExecuteEvent())
                {
                    switch (eventId)
                    {
                        case EVENT_IMPALE:
                            if (!me->HasAura(SPELL_LOCUST_SWARM))
                                if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
                                    DoCast(target, SPELL_IMPALE);
                            events.ScheduleEvent(EVENT_IMPALE, urand(10000, 20000));
                            break;
                        case EVENT_LOCUST:
                            TalkToMap(EMOTE_LOCUST);
                            DoCast(me, SPELL_LOCUST_SWARM);
                            me->SummonCreature(NPC_CRYPT_GUARD, GuardSummonPos, TEMPSUMMON_CORPSE_DESPAWN, 5000);
                            events.ScheduleEvent(EVENT_LOCUST, 90000);
                            events.RescheduleEvent(EVENT_IMPALE, 20000);
                            break;
                        case EVENT_SUMMON_GUARDIAN:
                            TalkToMap(EMOTE_CRYPT);
                            me->SummonCreature(NPC_CRYPT_GUARD, GuardSummonPos, TEMPSUMMON_CORPSE_DESPAWN, 5000);
                            break;
                        case EVENT_BERSERK:
                            DoCastAOE(SPELL_BERSERK);
                            events.ScheduleEvent(EVENT_BERSERK, 600000);
                            break;
                    }
                }
                DoMeleeAttackIfReady();
            }
Exemplo n.º 10
0
            void UpdateAI(uint32 diff)
            {
                if (!UpdateVictim())
                    return;

                events.Update(diff);

                while (uint32 eventId = events.ExecuteEvent())
                {
                    switch (eventId)
                    {
                        case EVENT_NECROTIC_AURA:
                            DoCastAOE(SPELL_NECROTIC_AURA);
                            DoCast(me, SPELL_WARN_NECROTIC_AURA);
                            events.ScheduleEvent(EVENT_NECROTIC_AURA, 20000);
                            events.ScheduleEvent(EVENT_NECROTIC_AURA_FADING, 14000);
                            break;
                        case EVENT_DEATHBLOOM:
                            DoCastAOE(SPELL_DEATHBLOOM);
                            events.ScheduleEvent(EVENT_DEATHBLOOM, 30000);
                            break;
                        case EVENT_INEVITABLE_DOOM:
                            _doomCounter++;
                            DoCastAOE(SPELL_INEVITABLE_DOOM);
                            events.ScheduleEvent(EVENT_INEVITABLE_DOOM, std::max(120000 - _doomCounter * 15000, 15000)); // needs to be confirmed
                            break;
                        case EVENT_SPORE:
                            DoCast(me, SPELL_SUMMON_SPORE, false);
                            events.ScheduleEvent(EVENT_SPORE, IsHeroic() ? 18000 : 36000);
                            break;
                        case EVENT_NECROTIC_AURA_FADING:
                            TalkToMap(SAY_NECROTIC_AURA_FADING);
                            break;
                        default:
                            break;
                    }
                }

                DoMeleeAttackIfReady();
            }
Exemplo n.º 11
0
 void JustDied(Unit* /*killer*/)
 {
     _JustDied();
     TalkToMap(SAY_DEATH);
 }
Exemplo n.º 12
0
 void KilledUnit(Unit* who)
 {
     TalkToMap(SAY_SLAY);
     if (who->GetTypeId() == TYPEID_PLAYER)
         safetyDance = false;
 }