2121#include " ScriptedCreature.h"
2222#include " SpellScript.h"
2323
24- enum Say
24+ enum AzuregosTexts
2525{
2626 SAY_TELEPORT =0
2727};
2828
29- enum Spells
29+ enum AzuregosSpells
3030{
3131 SPELL_MARK_OF_FROST =23182 ,
3232 SPELL_AURA_OF_FROST =23186 ,
@@ -39,7 +39,7 @@ enum Spells
3939 SPELL_ENRAGE =23537
4040};
4141
42- enum Events
42+ enum AzuregosEvents
4343{
4444 EVENT_MARK_OF_FROST =1 ,
4545 EVENT_MANA_STORM,
@@ -51,114 +51,103 @@ enum Events
5151 EVENT_ENRAGE
5252};
5353
54- class boss_azuregos :public CreatureScript
54+ struct boss_azuregos :public WorldBossAI
5555{
56- public:
57- boss_azuregos () : CreatureScript(" boss_azuregos" ) { }
58-
59- struct boss_azuregosAI :public WorldBossAI
56+ boss_azuregos (Creature* creature) : WorldBossAI(creature)
57+ {
58+ _enraged =false ;
59+ }
60+
61+ void Reset ()override
62+ {
63+ _Reset ();
64+ }
65+
66+ void JustEngagedWith (Unit*/* who*/ )override
67+ {
68+ DoCast (me, SPELL_MARK_OF_FROST_AURA,true );
69+ _enraged =false ;
70+
71+ events.ScheduleEvent (EVENT_MARK_OF_FROST, 35s);
72+ events.ScheduleEvent (EVENT_MANA_STORM, 5s, 17s);
73+ events.ScheduleEvent (EVENT_CHILL, 10s, 30s);
74+ events.ScheduleEvent (EVENT_BREATH, 2s, 8s);
75+ events.ScheduleEvent (EVENT_TELEPORT, 30s);
76+ events.ScheduleEvent (EVENT_REFLECT, 15s, 30s);
77+ events.ScheduleEvent (EVENT_CLEAVE, 7s);
78+ }
79+
80+ void KilledUnit (Unit* who)override
81+ {
82+ if (who->GetTypeId () == TYPEID_PLAYER)
83+ who->CastSpell (who, SPELL_MARK_OF_FROST,true );
84+ }
85+
86+ void UpdateAI (uint32 diff)override
87+ {
88+ if (!UpdateVictim ())
89+ return ;
90+
91+ events.Update (diff);
92+
93+ if (me->HasUnitState (UNIT_STATE_CASTING))
94+ return ;
95+
96+ while (uint32 eventId = events.ExecuteEvent ())
6097 {
61- boss_azuregosAI (Creature* creature) : WorldBossAI(creature)
62- {
63- _enraged =false ;
64- }
65-
66- void Reset ()override
67- {
68- _Reset ();
69- }
70-
71- void JustEngagedWith (Unit*/* who*/ )override
72- {
73- DoCast (me, SPELL_MARK_OF_FROST_AURA,true );
74- _enraged =false ;
75-
76- events.ScheduleEvent (EVENT_MARK_OF_FROST, 35s);
77- events.ScheduleEvent (EVENT_MANA_STORM, 5s, 17s);
78- events.ScheduleEvent (EVENT_CHILL, 10s, 30s);
79- events.ScheduleEvent (EVENT_BREATH, 2s, 8s);
80- events.ScheduleEvent (EVENT_TELEPORT, 30s);
81- events.ScheduleEvent (EVENT_REFLECT, 15s, 30s);
82- events.ScheduleEvent (EVENT_CLEAVE, 7s);
83- }
84-
85- void KilledUnit (Unit* who)override
98+ switch (eventId)
8699 {
87- if (who->GetTypeId () == TYPEID_PLAYER)
88- who->CastSpell (who, SPELL_MARK_OF_FROST,true );
89- }
90-
91- void UpdateAI (uint32 diff)override
92- {
93- if (!UpdateVictim ())
94- return ;
95-
96- events.Update (diff);
97-
98- if (me->HasUnitState (UNIT_STATE_CASTING))
99- return ;
100-
101- while (uint32 eventId = events.ExecuteEvent ())
100+ case EVENT_MANA_STORM:
101+ if (Unit* target =SelectTarget (SelectTargetMethod::Random,0 ,60 .0f ,true ))
102+ DoCast (target, SPELL_MANA_STORM);
103+ events.ScheduleEvent (EVENT_MANA_STORM, 7500ms, 12500ms);
104+ break ;
105+ case EVENT_CHILL:
106+ DoCastVictim (SPELL_CHILL);
107+ events.ScheduleEvent (EVENT_CHILL, 13s, 25s);
108+ break ;
109+ case EVENT_BREATH:
110+ DoCastVictim (SPELL_FROST_BREATH);
111+ events.ScheduleEvent (EVENT_BREATH, 10s, 15s);
112+ break ;
113+ case EVENT_TELEPORT:
102114 {
103- switch (eventId)
104- {
105- case EVENT_MANA_STORM:
106- if (Unit* target =SelectTarget (SelectTargetMethod::Random,0 ,60 .0f ,true ))
107- DoCast (target, SPELL_MANA_STORM);
108- events.ScheduleEvent (EVENT_MANA_STORM, 7500ms, 12500ms);
109- break ;
110- case EVENT_CHILL:
111- DoCastVictim (SPELL_CHILL);
112- events.ScheduleEvent (EVENT_CHILL, 13s, 25s);
113- break ;
114- case EVENT_BREATH:
115- DoCastVictim (SPELL_FROST_BREATH);
116- events.ScheduleEvent (EVENT_BREATH, 10s, 15s);
117- break ;
118- case EVENT_TELEPORT:
119- {
120- Talk (SAY_TELEPORT);
121- for (auto const & pair : me->GetCombatManager ().GetPvECombatRefs ())
122- if (Player* player = pair.second ->GetOther (me)->ToPlayer ())
123- DoTeleportPlayer (player, me->GetPositionX (), me->GetPositionY (), me->GetPositionZ ()+3 , player->GetOrientation ());
124-
125- ResetThreatList ();
126- events.ScheduleEvent (EVENT_TELEPORT, 30s);
127- break ;
128- }
129- case EVENT_REFLECT:
130- DoCast (me, SPELL_REFLECT);
131- events.ScheduleEvent (EVENT_REFLECT, 20s, 35s);
132- break ;
133- case EVENT_CLEAVE:
134- DoCastVictim (SPELL_CLEAVE);
135- events.ScheduleEvent (EVENT_CLEAVE, 7s);
136- break ;
137- default :
138- break ;
139- }
140-
141- if (me->HasUnitState (UNIT_STATE_CASTING))
142- return ;
115+ Talk (SAY_TELEPORT);
116+ for (auto const & pair : me->GetCombatManager ().GetPvECombatRefs ())
117+ if (Player* player = pair.second ->GetOther (me)->ToPlayer ())
118+ DoTeleportPlayer (player, me->GetPositionX (), me->GetPositionY (), me->GetPositionZ ()+3 , player->GetOrientation ());
119+
120+ ResetThreatList ();
121+ events.ScheduleEvent (EVENT_TELEPORT, 30s);
122+ break ;
143123 }
144-
145- if (HealthBelowPct (26 ) && !_enraged)
146- {
147- DoCast (me, SPELL_ENRAGE);
148- _enraged =true ;
149- }
150-
151- DoMeleeAttackIfReady ();
124+ case EVENT_REFLECT:
125+ DoCast (me, SPELL_REFLECT);
126+ events.ScheduleEvent (EVENT_REFLECT, 20s, 35s);
127+ break ;
128+ case EVENT_CLEAVE:
129+ DoCastVictim (SPELL_CLEAVE);
130+ events.ScheduleEvent (EVENT_CLEAVE, 7s);
131+ break ;
132+ default :
133+ break ;
152134 }
153135
154- private:
155- bool _enraged ;
156- };
136+ if (me-> HasUnitState (UNIT_STATE_CASTING))
137+ return ;
138+ }
157139
158- CreatureAI* GetAI (Creature* creature) const override
140+ if ( HealthBelowPct ( 26 ) && !_enraged)
159141 {
160- return new boss_azuregosAI (creature);
142+ DoCast (me, SPELL_ENRAGE);
143+ _enraged =true ;
161144 }
145+
146+ DoMeleeAttackIfReady ();
147+ }
148+
149+ private:
150+ bool _enraged;
162151};
163152
164153class MarkOfFrostTargetSelector
@@ -174,46 +163,35 @@ class MarkOfFrostTargetSelector
174163 }
175164};
176165
177- class spell_mark_of_frost :public SpellScriptLoader
166+ class spell_mark_of_frost :public SpellScript
178167{
179- public:
180- spell_mark_of_frost () : SpellScriptLoader(" spell_mark_of_frost" ) { }
181-
182- class spell_mark_of_frost_SpellScript :public SpellScript
183- {
184- PrepareSpellScript (spell_mark_of_frost_SpellScript);
185-
186- bool Validate (SpellInfoconst */* spellInfo*/ )override
187- {
188- return ValidateSpellInfo ({ SPELL_MARK_OF_FROST, SPELL_AURA_OF_FROST });
189- }
190-
191- void FilterTargets (std::list<WorldObject*>& targets)
192- {
193- targets.remove_if (MarkOfFrostTargetSelector ());
194- }
195-
196- void HandleEffect (SpellEffIndex effIndex)
197- {
198- PreventHitDefaultEffect (effIndex);
199- GetHitUnit ()->CastSpell (GetHitUnit (), SPELL_AURA_OF_FROST,true );
200- }
201-
202- void Register ()override
203- {
204- OnObjectAreaTargetSelect +=SpellObjectAreaTargetSelectFn (spell_mark_of_frost_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
205- OnEffectHitTarget +=SpellEffectFn (spell_mark_of_frost_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
206- }
207- };
208-
209- SpellScript*GetSpellScript ()const override
210- {
211- return new spell_mark_of_frost_SpellScript ();
212- }
168+ PrepareSpellScript (spell_mark_of_frost);
169+
170+ bool Validate (SpellInfoconst */* spellInfo*/ )override
171+ {
172+ return ValidateSpellInfo ({ SPELL_MARK_OF_FROST, SPELL_AURA_OF_FROST });
173+ }
174+
175+ void FilterTargets (std::list<WorldObject*>& targets)
176+ {
177+ targets.remove_if (MarkOfFrostTargetSelector ());
178+ }
179+
180+ void HandleEffect (SpellEffIndex effIndex)
181+ {
182+ PreventHitDefaultEffect (effIndex);
183+ GetHitUnit ()->CastSpell (GetHitUnit (), SPELL_AURA_OF_FROST,true );
184+ }
185+
186+ void Register ()override
187+ {
188+ OnObjectAreaTargetSelect +=SpellObjectAreaTargetSelectFn (spell_mark_of_frost::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
189+ OnEffectHitTarget +=SpellEffectFn (spell_mark_of_frost::HandleEffect, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
190+ }
213191};
214192
215193void AddSC_boss_azuregos ()
216194{
217- new boss_azuregos ( );
218- new spell_mark_of_frost ( );
195+ RegisterCreatureAI (boss_azuregos );
196+ RegisterSpellScript (spell_mark_of_frost );
219197}