|
15 | 15 | * with this program. If not, see <http://www.gnu.org/licenses/>. |
16 | 16 | */ |
17 | 17 |
|
| 18 | +/* |
| 19 | + * Timers requires to be revisited |
| 20 | + */ |
| 21 | + |
18 | 22 | #include "ScriptMgr.h" |
19 | 23 | #include "karazhan.h" |
20 | 24 | #include "ScriptedCreature.h" |
| 25 | +#include "SpellInfo.h" |
21 | 26 |
|
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 |
32 | 28 | { |
33 | 29 | SAY_AGGRO = 0, |
34 | 30 | SAY_SLAY = 1, |
35 | 31 | SAY_REPENTANCE = 2, |
36 | 32 | SAY_DEATH = 3 |
37 | 33 | }; |
38 | 34 |
|
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 |
40 | 45 | { |
41 | 46 | EVENT_REPENTANCE = 1, |
42 | | - EVENT_HOLYFIRE = 2, |
43 | | - EVENT_HOLYWRATH = 3, |
44 | | - EVENT_ENRAGE = 4 |
| 47 | + EVENT_HOLYFIRE, |
| 48 | + EVENT_HOLYWRATH, |
| 49 | + EVENT_BERSERK |
45 | 50 | }; |
46 | 51 |
|
47 | | -class boss_maiden_of_virtue : public CreatureScript |
| 52 | +// 16457 - Maiden of Virtue |
| 53 | +struct boss_maiden_of_virtue : public BossAI |
48 | 54 | { |
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) { } |
51 | 56 |
|
52 | | - struct boss_maiden_of_virtueAI : public BossAI |
| 57 | + void JustEngagedWith(Unit* who) override |
53 | 58 | { |
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 | + } |
55 | 68 |
|
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 | + } |
61 | 74 |
|
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 | + } |
67 | 80 |
|
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 | + } |
79 | 86 |
|
80 | | - void UpdateAI(uint32 diff) override |
81 | | - { |
82 | | - if (!UpdateVictim()) |
83 | | - return; |
| 87 | + void UpdateAI(uint32 diff) override |
| 88 | + { |
| 89 | + if (!UpdateVictim()) |
| 90 | + return; |
84 | 91 |
|
85 | | - events.Update(diff); |
| 92 | + events.Update(diff); |
86 | 93 |
|
87 | | - if (me->HasUnitState(UNIT_STATE_CASTING)) |
88 | | - return; |
| 94 | + if (me->HasUnitState(UNIT_STATE_CASTING)) |
| 95 | + return; |
89 | 96 |
|
90 | | - while (uint32 eventId = events.ExecuteEvent()) |
| 97 | + while (uint32 eventId = events.ExecuteEvent()) |
| 98 | + { |
| 99 | + switch (eventId) |
91 | 100 | { |
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; |
118 | 120 | } |
119 | 121 |
|
120 | | - DoMeleeAttackIfReady(); |
| 122 | + if (me->HasUnitState(UNIT_STATE_CASTING)) |
| 123 | + return; |
121 | 124 | } |
122 | | - }; |
123 | 125 |
|
124 | | - CreatureAI* GetAI(Creature* creature) const override |
125 | | - { |
126 | | - return GetKarazhanAI<boss_maiden_of_virtueAI>(creature); |
| 126 | + DoMeleeAttackIfReady(); |
127 | 127 | } |
128 | 128 | }; |
129 | 129 |
|
130 | 130 | void AddSC_boss_maiden_of_virtue() |
131 | 131 | { |
132 | | - new boss_maiden_of_virtue(); |
| 132 | + RegisterKarazhanCreatureAI(boss_maiden_of_virtue); |
133 | 133 | } |
0 commit comments