Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- include "blackwing_descent.h"
- #include "ScriptPCH.h"
- #include"WorldPacket.h"
- enum Spells
- {
- _10_SPELL_LAVA_SPEW = 77690,
- _25_SPELL_LAVA_SPEW = 91919,
- H_10_SPELL_LAVA_SPEW = 91931,
- H_25_SPELL_LAVA_SPEW = 91932,
- //
- _10_SPELL_MAGMA_SPIT = 78068,
- H_10_SPELL_MAGMA_SPIT = 91927,
- _25_SPELL_MAGMA_SPIT = 91917,
- H_25_SPELL_MAGMA_SPIT = 91928,
- // eat tank
- _10_SPELL_MANGLE = 89773,
- H_10_SPELL_MANGLE = 94616,
- _25_SPELL_MANGLE = 91912,
- H_25_SPELL_MANGLE = 94617,
- SPELL_BERSERK = 26662,
- SPELL_MOLTEN_TANTRUM = 78403,
- SPELL_PILLAR_OF_FLAME = 78006,
- };
- enum Event
- {
- EVENT_LAVA_SPEW, // every 30 sec to radom range DPS
- EVENT_MAGMA_SPIT, // cast at 3 random target every 10 sec
- //don't work yet
- EVENT_MANGLE, // eat tank
- EVENT_MOLTEN_TANTRUM,
- EVENT_PILLAR_OF_FLAME,
- EVENT_BERSERK,
- };
- class boss_magmaw : public CreatureScript
- {
- public:
- boss_magmaw() : CreatureScript("magmaw") { }
- CreatureAI* GetAI(Creature* pCreature) const
- {
- return new boss_magmawAI (pCreature);
- }
- struct boss_magmawAI : public BossAI
- {
- boss_magmawAI(Creature* pCreature) : BossAI(pCreature, 41570)
- {
- pInstance = pCreature->GetInstanceScript();
- }
- InstanceScript* pInstance;
- EventMap events;
- uint32 bsk;
- bool bsk_flag;
- bool check_in;
- void Reset()
- {
- bsk = 20*IN_MILLISECONDS; // 20 min Berserk Timer
- events.Reset();
- if (pInstance && (pInstance->GetData(DATA_MAGMAW) != DONE && !check_in))
- pInstance->SetData(DATA_MAGMAW, NOT_STARTED);
- bsk_flag = false;
- check_in = false;
- }
- void EnterCombat(Unit* /*Ent*/)
- {
- DoZoneInCombat();
- events.RescheduleEvent(EVENT_LAVA_SPEW, 30*IN_MILLISECONDS);
- events.RescheduleEvent(EVENT_BERSERK, 20*MINUTE);
- if (pInstance)
- pInstance->SetData(DATA_MAGMAW, IN_PROGRESS);
- }
- void JustDied(Unit* /*Kill*/)
- {
- if (pInstance)
- {
- pInstance->SetData(DATA_MAGMAW, DONE);
- int32 income = Is25ManRaid() ? 10500 : 7500;
- pInstance->DoUpdateCurrency(CURRENCY_TYPE_VALOR_POINTS, income);
- }
- }
- void UpdateAI(const uint32 uiDiff)
- {
- if (!UpdateVictim())
- return;
- events.Update(uiDiff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch(eventId)
- {
- case EVENT_LAVA_SPEW:
- if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
- DoCast(pTarget, RAID_MODE(_10_SPELL_LAVA_SPEW, _25_SPELL_LAVA_SPEW,H_10_SPELL_LAVA_SPEW,
- _25_SPELL_LAVA_SPEW));
- events.ScheduleEvent(EVENT_LAVA_SPEW, 30*IN_MILLISECONDS);
- break;
- case EVENT_MAGMA_SPIT
- {
- RAID_MODE
- }
- break;
- case EVENT_BERSERK:
- if (!bsk_flag && bsk <= uiDiff)
- {
- DoCast(me, SPELL_BERSERK);
- bsk_flag = true;
- events.ScheduleEvent(EVENT_BERSERK, 20*MINUTE);
- }
- else
- bsk -= uiDiff;
- break;
- }
- }
- DoMeleeAttackIfReady();
- };
- };
- };
- void AddSC_boss_magmaw()
- {
- new boss_magmaw();
- }
Add Comment
Please, Sign In to add comment