diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp | 135 |
1 files changed, 67 insertions, 68 deletions
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp index 04b58af2a4a..90306913534 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -16,28 +15,34 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* ScriptData -SDName: Boss_Maiden_of_Virtue -SD%Complete: 100 -SDComment: -SDCategory: Karazhan -EndScriptData */ - #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "karazhan.h" + +enum Spells +{ + SPELL_REPENTANCE = 29511, + SPELL_HOLYFIRE = 29522, + SPELL_HOLYWRATH = 32445, + SPELL_HOLYGROUND = 29512, + SPELL_BERSERK = 26662 +}; -enum MaidenOfVirtue +enum Yells { - SAY_AGGRO = 0, - SAY_SLAY = 1, - SAY_REPENTANCE = 2, - SAY_DEATH = 3, - - SPELL_REPENTANCE = 29511, - SPELL_HOLYFIRE = 29522, - SPELL_HOLYWRATH = 32445, - SPELL_HOLYGROUND = 29512, - SPELL_BERSERK = 26662, + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_REPENTANCE = 2, + SAY_DEATH = 3 +}; + +enum Events +{ + EVENT_REPENTANCE = 1, + EVENT_HOLYFIRE = 2, + EVENT_HOLYWRATH = 3, + EVENT_HOLYGROUND = 4, + EVENT_ENRAGE = 5 }; class boss_maiden_of_virtue : public CreatureScript @@ -50,27 +55,13 @@ public: return new boss_maiden_of_virtueAI(creature); } - struct boss_maiden_of_virtueAI : public ScriptedAI + struct boss_maiden_of_virtueAI : public BossAI { - boss_maiden_of_virtueAI(Creature* creature) : ScriptedAI(creature) { } - - uint32 Repentance_Timer; - uint32 Holyfire_Timer; - uint32 Holywrath_Timer; - uint32 Holyground_Timer; - uint32 Enrage_Timer; - - bool Enraged; + boss_maiden_of_virtueAI(Creature* creature) : BossAI(creature, TYPE_MAIDEN) { } void Reset() override { - Repentance_Timer = 25000 + (rand32() % 15000); - Holyfire_Timer = 8000 + (rand32() % 17000); - Holywrath_Timer = 15000 + (rand32() % 10000); - Holyground_Timer = 3000; - Enrage_Timer = 600000; - - Enraged = false; + _Reset(); } void KilledUnit(Unit* /*Victim*/) override @@ -82,11 +73,19 @@ public: void JustDied(Unit* /*killer*/) override { Talk(SAY_DEATH); + _JustDied(); } void EnterCombat(Unit* /*who*/) override { + _EnterCombat(); Talk(SAY_AGGRO); + + events.ScheduleEvent(EVENT_REPENTANCE, urand(33, 45) * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_HOLYFIRE, 12 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_HOLYWRATH, urand(15, 25) * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_HOLYGROUND, 3 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_ENRAGE, 600 * IN_MILLISECONDS); } void UpdateAI(uint32 diff) override @@ -94,41 +93,41 @@ public: if (!UpdateVictim()) return; - if (Enrage_Timer < diff && !Enraged) - { - DoCast(me, SPELL_BERSERK, true); - Enraged = true; - } else Enrage_Timer -= diff; - - if (Holyground_Timer <= diff) - { - DoCast(me, SPELL_HOLYGROUND, true); //Triggered so it doesn't interrupt her at all - Holyground_Timer = 3000; - } else Holyground_Timer -= diff; - - if (Repentance_Timer <= diff) - { - DoCastVictim(SPELL_REPENTANCE); - Talk(SAY_REPENTANCE); + events.Update(diff); - Repentance_Timer = urand(25000, 35000); //A little randomness on that spell - } else Repentance_Timer -= diff; - - if (Holyfire_Timer <= diff) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_HOLYFIRE); - - Holyfire_Timer = urand(8000, 23000); //Anywhere from 8 to 23 seconds, good luck having several of those in a row! - } else Holyfire_Timer -= diff; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - if (Holywrath_Timer <= diff) + while (uint32 eventId = events.ExecuteEvent()) { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_HOLYWRATH); - - Holywrath_Timer = urand(20000, 25000); //20-30 secs sounds nice - } else Holywrath_Timer -= diff; + switch (eventId) + { + case EVENT_REPENTANCE: + DoCastVictim(SPELL_REPENTANCE); + Talk(SAY_REPENTANCE); + events.ScheduleEvent(EVENT_REPENTANCE, urand(33, 45) * IN_MILLISECONDS); + break; + case EVENT_HOLYFIRE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50, true)) + DoCast(target, SPELL_HOLYFIRE); + events.ScheduleEvent(EVENT_HOLYFIRE, 12 * IN_MILLISECONDS); + break; + case EVENT_HOLYWRATH: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 80, true)) + DoCast(target, SPELL_HOLYWRATH); + events.ScheduleEvent(EVENT_HOLYWRATH, urand(15, 25) * IN_MILLISECONDS); + break; + case EVENT_HOLYGROUND: + DoCast(me, SPELL_HOLYGROUND, true); + events.ScheduleEvent(EVENT_HOLYGROUND, 3 * IN_MILLISECONDS); + break; + case EVENT_ENRAGE: + DoCast(me, SPELL_BERSERK, true); + break; + default: + break; + } + } DoMeleeAttackIfReady(); } |