diff options
author | megamage <none@none> | 2009-06-13 13:29:08 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-06-13 13:29:08 -0500 |
commit | e3080b3306dfd6da6a932eeded7dc59b0a7a49fc (patch) | |
tree | a406aa129772f3cf933ded7f6c16ea33adf69cc7 /src | |
parent | 4aa530e48f5d999a6b78483e7edbc4b8d89658b8 (diff) |
*Add a simple script of razorscale
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_razorscale.cpp | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_razorscale.cpp b/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_razorscale.cpp index a736b2db12a..8f257d9a37c 100644 --- a/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_razorscale.cpp +++ b/src/bindings/scripts/scripts/zone/ulduar/ulduar/boss_razorscale.cpp @@ -18,3 +18,97 @@ #include "precompiled.h" #include "def_ulduar.h" + +#define SPELL_FLAME_BUFFET HEROIC(64016,64023) +#define SPELL_WING_BUFFET 62666 +#define SPELL_FUSE_ARMOR 64821 +#define SPELL_FLAME_BREATH HEROIC(63317,64021) +#define SPELL_DEVOURING_FLAME HEROIC(63014,63816) +#define SPELL_BERSERK 47008 + +enum Events +{ + EVENT_BUFFET = 1, + EVENT_WING, + EVENT_FUSE, + EVENT_BREATH, + EVENT_DEVOUR, + EVENT_BERSERK, +}; + +struct TRINITY_DLL_DECL boss_razorscaleAI : public BossAI +{ + boss_razorscaleAI(Creature *c) : BossAI(c, BOSS_RAZORSCALE) {} + + void EnterCombat(Unit *who) + { + _EnterCombat(); + events.ScheduleEvent(EVENT_BERSERK, 7*60000); + events.ScheduleEvent(EVENT_BUFFET, 10000+rand()%5000); + events.ScheduleEvent(EVENT_WING, 30000+rand()%30000); + events.ScheduleEvent(EVENT_FUSE, 10000); + events.ScheduleEvent(EVENT_BREATH, 15000); + events.ScheduleEvent(EVENT_DEVOUR, 10000); + } + + void UpdateAI(const uint32 diff) + { + if(!UpdateVictim()) + return; + + events.Update(diff); + + if(me->hasUnitState(UNIT_STAT_CASTING)) + return; + + if(uint32 eventId = events.GetEvent()) + { + switch(eventId) + { + case EVENT_BERSERK: + DoCast(me, SPELL_BERSERK); + return; + case EVENT_BUFFET: + DoCastAOE(SPELL_FLAME_BUFFET); + events.RepeatEvent(10000+rand()%5000); + return; + case EVENT_WING: + DoCastAOE(SPELL_WING_BUFFET); + events.RepeatEvent(30000+rand()%30000); + return; + case EVENT_BREATH: + DoCastAOE(SPELL_FLAME_BREATH); + events.RepeatEvent(15000); + return; + case EVENT_FUSE: + DoCast(me->getVictim(), SPELL_FUSE_ARMOR); + events.RepeatEvent(10000); + return; + case EVENT_DEVOUR: + if(Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0, true)) + DoCast(target, SPELL_DEVOURING_FLAME); + events.RepeatEvent(10000); + return; + default: + events.PopEvent(); + break; + } + } + + DoMeleeAttackIfReady(); + } +}; + +CreatureAI* GetAI_boss_razorscale(Creature *_Creature) +{ + return new boss_razorscaleAI (_Creature); +} + +void AddSC_boss_razorscale() +{ + Script *newscript; + newscript = new Script; + newscript->Name="boss_razorscale"; + newscript->GetAI = &GetAI_boss_razorscale; + newscript->RegisterSelf(); +} |