Skip to content

Commit 3a964bc

Browse files
authored
Scripts/Karazhan: Update Maiden of Virtue (#31165)
1 parent 54f42db commit 3a964bc

File tree

2 files changed

+82
-80
lines changed

2 files changed

+82
-80
lines changed

src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp

Lines changed: 80 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -15,119 +15,119 @@
1515
* with this program. If not, see <http://www.gnu.org/licenses/>.
1616
*/
1717

18+
/*
19+
* Timers requires to be revisited
20+
*/
21+
1822
#include "ScriptMgr.h"
1923
#include "karazhan.h"
2024
#include "ScriptedCreature.h"
25+
#include "SpellInfo.h"
2126

22-
enum Spells
23-
{
24-
SPELL_REPENTANCE = 29511,
25-
SPELL_HOLYFIRE = 29522,
26-
SPELL_HOLYWRATH = 32445,
27-
SPELL_HOLYGROUND = 29523,
28-
SPELL_BERSERK = 26662
29-
};
30-
31-
enum Yells
27+
enum MaidenOfVirtueTexts
3228
{
3329
SAY_AGGRO = 0,
3430
SAY_SLAY = 1,
3531
SAY_REPENTANCE = 2,
3632
SAY_DEATH = 3
3733
};
3834

39-
enum Events
35+
enum MaidenOfVirtueSpells
36+
{
37+
SPELL_HOLYGROUND = 29523,
38+
SPELL_REPENTANCE = 29511,
39+
SPELL_HOLYFIRE = 29522,
40+
SPELL_HOLYWRATH = 32445,
41+
SPELL_BERSERK = 26662
42+
};
43+
44+
enum MaidenOfVirtueEvents
4045
{
4146
EVENT_REPENTANCE = 1,
42-
EVENT_HOLYFIRE = 2,
43-
EVENT_HOLYWRATH = 3,
44-
EVENT_ENRAGE = 4
47+
EVENT_HOLYFIRE,
48+
EVENT_HOLYWRATH,
49+
EVENT_BERSERK
4550
};
4651

47-
class boss_maiden_of_virtue : public CreatureScript
52+
// 16457 - Maiden of Virtue
53+
struct boss_maiden_of_virtue : public BossAI
4854
{
49-
public:
50-
boss_maiden_of_virtue() : CreatureScript("boss_maiden_of_virtue") { }
55+
boss_maiden_of_virtue(Creature* creature) : BossAI(creature, DATA_MAIDEN_OF_VIRTUE) { }
5156

52-
struct boss_maiden_of_virtueAI : public BossAI
57+
void JustEngagedWith(Unit* who) override
5358
{
54-
boss_maiden_of_virtueAI(Creature* creature) : BossAI(creature, DATA_MAIDEN_OF_VIRTUE) { }
59+
BossAI::JustEngagedWith(who);
60+
Talk(SAY_AGGRO);
61+
62+
DoCastSelf(SPELL_HOLYGROUND, true);
63+
events.ScheduleEvent(EVENT_REPENTANCE, 33s, 45s);
64+
events.ScheduleEvent(EVENT_HOLYFIRE, 8s);
65+
events.ScheduleEvent(EVENT_HOLYWRATH, 15s, 25s);
66+
events.ScheduleEvent(EVENT_BERSERK, 10min);
67+
}
5568

56-
void KilledUnit(Unit* /*Victim*/) override
57-
{
58-
if (roll_chance_i(50))
59-
Talk(SAY_SLAY);
60-
}
69+
void OnSpellCast(SpellInfo const* spell) override
70+
{
71+
if (spell->Id == SPELL_REPENTANCE)
72+
Talk(SAY_REPENTANCE);
73+
}
6174

62-
void JustDied(Unit* /*killer*/) override
63-
{
64-
Talk(SAY_DEATH);
65-
_JustDied();
66-
}
75+
void KilledUnit(Unit* /*victim*/) override
76+
{
77+
if (roll_chance_i(50))
78+
Talk(SAY_SLAY);
79+
}
6780

68-
void JustEngagedWith(Unit* who) override
69-
{
70-
BossAI::JustEngagedWith(who);
71-
Talk(SAY_AGGRO);
72-
73-
DoCastSelf(SPELL_HOLYGROUND, true);
74-
events.ScheduleEvent(EVENT_REPENTANCE, 33s, 45s);
75-
events.ScheduleEvent(EVENT_HOLYFIRE, 8s);
76-
events.ScheduleEvent(EVENT_HOLYWRATH, 15s, 25s);
77-
events.ScheduleEvent(EVENT_ENRAGE, 10min);
78-
}
81+
void JustDied(Unit* /*killer*/) override
82+
{
83+
Talk(SAY_DEATH);
84+
_JustDied();
85+
}
7986

80-
void UpdateAI(uint32 diff) override
81-
{
82-
if (!UpdateVictim())
83-
return;
87+
void UpdateAI(uint32 diff) override
88+
{
89+
if (!UpdateVictim())
90+
return;
8491

85-
events.Update(diff);
92+
events.Update(diff);
8693

87-
if (me->HasUnitState(UNIT_STATE_CASTING))
88-
return;
94+
if (me->HasUnitState(UNIT_STATE_CASTING))
95+
return;
8996

90-
while (uint32 eventId = events.ExecuteEvent())
97+
while (uint32 eventId = events.ExecuteEvent())
98+
{
99+
switch (eventId)
91100
{
92-
switch (eventId)
93-
{
94-
case EVENT_REPENTANCE:
95-
DoCastVictim(SPELL_REPENTANCE);
96-
Talk(SAY_REPENTANCE);
97-
events.Repeat(Seconds(35));
98-
break;
99-
case EVENT_HOLYFIRE:
100-
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50, true))
101-
DoCast(target, SPELL_HOLYFIRE);
102-
events.Repeat(Seconds(8), Seconds(19));
103-
break;
104-
case EVENT_HOLYWRATH:
105-
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 80, true))
106-
DoCast(target, SPELL_HOLYWRATH);
107-
events.Repeat(Seconds(15), Seconds(25));
108-
break;
109-
case EVENT_ENRAGE:
110-
DoCastSelf(SPELL_BERSERK, true);
111-
break;
112-
default:
113-
break;
114-
}
115-
116-
if (me->HasUnitState(UNIT_STATE_CASTING))
117-
return;
101+
case EVENT_REPENTANCE:
102+
DoCastVictim(SPELL_REPENTANCE);
103+
events.Repeat(35s);
104+
break;
105+
case EVENT_HOLYFIRE:
106+
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50, true))
107+
DoCast(target, SPELL_HOLYFIRE);
108+
events.Repeat(8s, 19s);
109+
break;
110+
case EVENT_HOLYWRATH:
111+
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 80, true))
112+
DoCast(target, SPELL_HOLYWRATH);
113+
events.Repeat(15s, 25s);
114+
break;
115+
case EVENT_BERSERK:
116+
DoCastSelf(SPELL_BERSERK);
117+
break;
118+
default:
119+
break;
118120
}
119121

120-
DoMeleeAttackIfReady();
122+
if (me->HasUnitState(UNIT_STATE_CASTING))
123+
return;
121124
}
122-
};
123125

124-
CreatureAI* GetAI(Creature* creature) const override
125-
{
126-
return GetKarazhanAI<boss_maiden_of_virtueAI>(creature);
126+
DoMeleeAttackIfReady();
127127
}
128128
};
129129

130130
void AddSC_boss_maiden_of_virtue()
131131
{
132-
new boss_maiden_of_virtue();
132+
RegisterKarazhanCreatureAI(boss_maiden_of_virtue);
133133
}

src/server/scripts/EasternKingdoms/Karazhan/karazhan.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,6 @@ inline AI* GetKarazhanAI(T* obj)
118118
return GetInstanceAI<AI>(obj, KZScriptName);
119119
}
120120

121+
#define RegisterKarazhanCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetKarazhanAI)
122+
121123
#endif

0 commit comments

Comments
 (0)