mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-06 08:59:11 +01:00
Scripts/Karazhan: Boss Maiden of Virtue - rewrite to events and timer adjustments
Closes #12513 (PR) Signed-off-by: DDuarte <dnpd.dd@gmail.com>
This commit is contained in:
@@ -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 MaidenOfVirtue
|
||||
enum Spells
|
||||
{
|
||||
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
|
||||
};
|
||||
|
||||
SPELL_REPENTANCE = 29511,
|
||||
SPELL_HOLYFIRE = 29522,
|
||||
SPELL_HOLYWRATH = 32445,
|
||||
SPELL_HOLYGROUND = 29512,
|
||||
SPELL_BERSERK = 26662,
|
||||
enum Yells
|
||||
{
|
||||
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)
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
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);
|
||||
|
||||
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 (Holywrath_Timer <= diff)
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user