diff options
author | Nyeriah <sarah.trysan@live.com> | 2014-09-20 02:58:08 -0300 |
---|---|---|
committer | Nyeriah <sarah.trysan@live.com> | 2014-09-20 02:58:08 -0300 |
commit | 2c2d3a8ffcc0d8fff679f1214971463e19227286 (patch) | |
tree | 0786f1b4a8d0ea9841cffed9b9cce88d3a1df15b /src | |
parent | cabaf3eb5bf3230ca77b694910d358c61b68bcc3 (diff) |
Scripts/Auchindoun: Darkweaver Syth
- Despawn minions on death/reset
- Misc clean up
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp | 227 |
1 files changed, 124 insertions, 103 deletions
diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp index 098d35a292e..e6ffa3f8979 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp @@ -71,14 +71,22 @@ public: struct boss_darkweaver_sythAI : public BossAI { - boss_darkweaver_sythAI(Creature* creature) : BossAI(creature, DATA_DARKWEAVER_SYTH) { } + boss_darkweaver_sythAI(Creature* creature) : BossAI(creature, DATA_DARKWEAVER_SYTH) + { + Initialize(); + } + + void Initialize() + { + _summon90 = false; + _summon50 = false; + _summon10 = false; + } void Reset() override { + Initialize(); _Reset(); - summon90 = false; - summon50 = false; - summon10 = false; } void EnterCombat(Unit* /*who*/) override @@ -109,6 +117,29 @@ public: { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) summoned->AI()->AttackStart(target); + + summons.Summon(summoned); + } + + void DamageTaken(Unit* /*attacker*/, uint32& damage) override + { + if (me->HealthBelowPctDamaged(90, damage) && !_summon90) + { + SythSummoning(); + _summon90 = true; + } + + if (me->HealthBelowPctDamaged(50, damage) && !_summon50) + { + SythSummoning(); + _summon50 = true; + } + + if (me->HealthBelowPctDamaged(10, damage) && !_summon10) + { + SythSummoning(); + _summon10 = true; + } } void SythSummoning() @@ -124,72 +155,44 @@ public: DoCast(me, SPELL_SUMMON_SYTH_SHADOW, true); //right } - void UpdateAI(uint32 diff) override + void ExecuteEvent(uint32 eventId) override { - if (!UpdateVictim()) - return; - - events.Update(diff); - - while (uint32 eventId = events.ExecuteEvent()) + switch (eventId) { - switch (eventId) - { - case EVENT_FLAME_SHOCK: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_FLAME_SHOCK); - events.ScheduleEvent(EVENT_FLAME_SHOCK, urand(10000, 15000)); - break; - case EVENT_ARCANE_SHOCK: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_ARCANE_SHOCK); - events.ScheduleEvent(EVENT_ARCANE_SHOCK, urand(10000, 15000)); - break; - case EVENT_FROST_SHOCK: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_FROST_SHOCK); - events.ScheduleEvent(EVENT_FROST_SHOCK, urand(10000, 15000)); - break; - case EVENT_SHADOW_SHOCK: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_SHADOW_SHOCK); - events.ScheduleEvent(EVENT_SHADOW_SHOCK, urand(10000, 15000)); - break; - case EVENT_CHAIN_LIGHTNING: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_CHAIN_LIGHTNING); - events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 25000); - break; - default: - break; - } + case EVENT_FLAME_SHOCK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_FLAME_SHOCK); + events.ScheduleEvent(EVENT_FLAME_SHOCK, urand(10000, 15000)); + break; + case EVENT_ARCANE_SHOCK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_ARCANE_SHOCK); + events.ScheduleEvent(EVENT_ARCANE_SHOCK, urand(10000, 15000)); + break; + case EVENT_FROST_SHOCK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_FROST_SHOCK); + events.ScheduleEvent(EVENT_FROST_SHOCK, urand(10000, 15000)); + break; + case EVENT_SHADOW_SHOCK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_SHADOW_SHOCK); + events.ScheduleEvent(EVENT_SHADOW_SHOCK, urand(10000, 15000)); + break; + case EVENT_CHAIN_LIGHTNING: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_CHAIN_LIGHTNING); + events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 25000); + break; + default: + break; } - - if (HealthBelowPct(90) && !summon90) - { - SythSummoning(); - summon90 = true; - } - - if (HealthBelowPct(50) && !summon50) - { - SythSummoning(); - summon50 = true; - } - - if (HealthBelowPct(10) && !summon10) - { - SythSummoning(); - summon10 = true; - } - - DoMeleeAttackIfReady(); } private: - bool summon90; - bool summon50; - bool summon10; + bool _summon90; + bool _summon50; + bool _summon10; }; CreatureAI* GetAI(Creature* creature) const override @@ -208,19 +211,20 @@ public: { npc_syth_fireAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); } - uint32 flameshock_timer; - uint32 flamebuffet_timer; - - void Reset() override + void Initialize() { - me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true); flameshock_timer = 2500; flamebuffet_timer = 5000; } - void EnterCombat(Unit* /*who*/) override { } + void Reset() override + { + Initialize(); + me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true); + } void UpdateAI(uint32 diff) override { @@ -245,6 +249,10 @@ public: DoMeleeAttackIfReady(); } + + private: + uint32 flameshock_timer; + uint32 flamebuffet_timer; }; CreatureAI* GetAI(Creature* creature) const override @@ -258,28 +266,24 @@ class npc_syth_arcane : public CreatureScript public: npc_syth_arcane() : CreatureScript("npc_syth_arcane") { } - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_syth_arcaneAI(creature); - } - struct npc_syth_arcaneAI : public ScriptedAI { npc_syth_arcaneAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); } - uint32 arcaneshock_timer; - uint32 arcanebuffet_timer; - - void Reset() override + void Initialize() { - me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, true); arcaneshock_timer = 2500; arcanebuffet_timer = 5000; } - void EnterCombat(Unit* /*who*/) override { } + void Reset() override + { + Initialize(); + me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, true); + } void UpdateAI(uint32 diff) override { @@ -304,7 +308,16 @@ public: DoMeleeAttackIfReady(); } + + private: + uint32 arcaneshock_timer; + uint32 arcanebuffet_timer; }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_syth_arcaneAI(creature); + } }; class npc_syth_frost : public CreatureScript @@ -312,28 +325,24 @@ class npc_syth_frost : public CreatureScript public: npc_syth_frost() : CreatureScript("npc_syth_frost") { } - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_syth_frostAI(creature); - } - struct npc_syth_frostAI : public ScriptedAI { npc_syth_frostAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); } - uint32 frostshock_timer; - uint32 frostbuffet_timer; - - void Reset() override + void Initialize() { - me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true); frostshock_timer = 2500; frostbuffet_timer = 5000; } - void EnterCombat(Unit* /*who*/) override { } + void Reset() override + { + Initialize(); + me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true); + } void UpdateAI(uint32 diff) override { @@ -358,8 +367,16 @@ public: DoMeleeAttackIfReady(); } + + private: + uint32 frostshock_timer; + uint32 frostbuffet_timer; }; + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_syth_frostAI(creature); + } }; class npc_syth_shadow : public CreatureScript @@ -367,28 +384,24 @@ class npc_syth_shadow : public CreatureScript public: npc_syth_shadow() : CreatureScript("npc_syth_shadow") { } - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_syth_shadowAI(creature); - } - struct npc_syth_shadowAI : public ScriptedAI { npc_syth_shadowAI(Creature* creature) : ScriptedAI(creature) { + Initialize(); } - uint32 shadowshock_timer; - uint32 shadowbuffet_timer; - - void Reset() override + void Initialize() { - me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, true); shadowshock_timer = 2500; shadowbuffet_timer = 5000; } - void EnterCombat(Unit* /*who*/) override { } + void Reset() override + { + Initialize(); + me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, true); + } void UpdateAI(uint32 diff) override { @@ -413,8 +426,16 @@ public: DoMeleeAttackIfReady(); } + + private: + uint32 shadowshock_timer; + uint32 shadowbuffet_timer; }; + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_syth_shadowAI(creature); + } }; void AddSC_boss_darkweaver_syth() |