Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_koralon.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "ScriptMgr.h"
7#include "ScriptedCreature.h"
8#include "SpellAuraEffects.h"
9#include "SpellScript.h"
10#include "vault_of_archavon.h"
11
24
26{
27 // Spells Koralon
31 SPELL_FLAME_CINDER_B = 66681, // don't know the real relation to SPELL_FLAME_CINDER_A atm.
34
35 // Spells Flame Warder
39};
40
42{
43 public:
44 boss_koralon() : CreatureScript("boss_koralon") { }
45
46 struct boss_koralonAI : public BossAI
47 {
49 {
50 }
51
52 void EnterCombat(Unit* /*who*/) OVERRIDE
53 {
55
56 events.ScheduleEvent(EVENT_BURNING_FURY, 20000);
57 events.ScheduleEvent(EVENT_BURNING_BREATH, 15000); // 1st after 15sec, then every 45sec
58 events.ScheduleEvent(EVENT_METEOR_FISTS, 75000); // 1st after 75sec, then every 45sec
59 events.ScheduleEvent(EVENT_FLAME_CINDER, 30000);
60
62 }
63
65 {
66 if (!UpdateVictim())
67 return;
68
69 events.Update(diff);
70
71 if (me->HasUnitState(UNIT_STATE_CASTING))
72 return;
73
74 while (uint32 eventId = events.ExecuteEvent())
75 {
76 switch (eventId)
77 {
80 events.ScheduleEvent(EVENT_BURNING_FURY, 20000);
81 break;
84 events.ScheduleEvent(EVENT_BURNING_BREATH, 45000);
85 break;
88 events.ScheduleEvent(EVENT_METEOR_FISTS, 45000);
89 break;
92 events.ScheduleEvent(EVENT_FLAME_CINDER, 30000);
93 break;
94 default:
95 break;
96 }
97 }
98
100 }
101 };
102
104 {
105 return new boss_koralonAI(creature);
106 }
107};
108
109/*######
110## Npc Flame Warder
111######*/
113{
114 public:
115 npc_flame_warder() : CreatureScript("npc_flame_warder") { }
116
118 {
120 {
121 }
122
124 {
125 events.Reset();
126 }
127
128 void EnterCombat(Unit* /*who*/) OVERRIDE
129 {
131
132 events.ScheduleEvent(EVENT_FW_LAVA_BIRST, 5000);
133 events.ScheduleEvent(EVENT_FW_METEOR_FISTS, 10000);
134 }
135
137 {
138 if (!UpdateVictim())
139 return;
140
141 events.Update(diff);
142
143 while (uint32 eventId = events.ExecuteEvent())
144 {
145 switch (eventId)
146 {
149 events.ScheduleEvent(EVENT_FW_LAVA_BIRST, 15000);
150 break;
153 events.ScheduleEvent(EVENT_FW_METEOR_FISTS, 20000);
154 break;
155 default:
156 break;
157 }
158 }
159
161 }
162
163 private:
165 };
166
168 {
169 return new npc_flame_warderAI(creature);
170 }
171};
172
174{
175 public:
176 spell_koralon_meteor_fists() : SpellScriptLoader("spell_koralon_meteor_fists") { }
177
179 {
181
182 bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
183 {
184 if (!sSpellMgr->GetSpellInfo(SPELL_METEOR_FISTS_DAMAGE))
185 return false;
186 return true;
187 }
188
189 void TriggerFists(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
190 {
192 GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_METEOR_FISTS_DAMAGE, true, NULL, aurEff);
193 }
194
199 };
200
205};
206
248
250{
251 public:
252 spell_flame_warder_meteor_fists() : SpellScriptLoader("spell_flame_warder_meteor_fists") { }
253
255 {
257
258 bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
259 {
260 if (!sSpellMgr->GetSpellInfo(SPELL_FW_METEOR_FISTS_DAMAGE))
261 return false;
262 return true;
263 }
264
265 void TriggerFists(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
266 {
268 GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_FW_METEOR_FISTS_DAMAGE, true, NULL, aurEff);
269 }
270
275 };
276
281};
282
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ EFFECT_0
@ TARGET_UNIT_TARGET_ENEMY
@ SPELL_AURA_DUMMY
#define sSpellMgr
Definition SpellMgr.h:744
#define AuraEffectProcFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define SpellHitFn(F)
@ UNIT_STATE_CASTING
Definition Unit.h:527
@ SPELL_METEOR_FISTS_DAMAGE
@ SPELL_BURNING_FURY
@ SPELL_FLAME_CINDER_A
@ SPELL_FLAME_CINDER_B
@ SPELL_METEOR_FISTS
@ SPELL_FW_LAVA_BIRST
@ SPELL_FW_METEOR_FISTS_DAMAGE
@ SPELL_BURNING_BREATH
@ SPELL_FW_METEOR_FISTS
void AddSC_boss_koralon()
@ EVENT_FLAME_CINDER
@ EVENT_FW_LAVA_BIRST
@ EVENT_BURNING_BREATH
@ EVENT_METEOR_FISTS
@ EVENT_FW_METEOR_FISTS
@ EVENT_BURNING_FURY
void PreventDefaultAction()
Unit * GetTarget() const
HookList< EffectProcHandler > OnEffectProc
EventMap events
BossAI(Creature *creature, uint32 bossId)
void _EnterCombat()
void DoZoneInCombat(Creature *creature=NULL, float maxRangeToNearestTarget=50.0f)
bool UpdateVictim()
CreatureScript(const char *name)
Unit * GetProcTarget() const
Definition Unit.h:974
HookList< HitHandler > OnHit
void SetHitDamage(int32 damage)
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
int32 GetHitDamage()
SpellScriptLoader(const char *name)
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCast(uint32 spellId)
Definition UnitAI.cpp:110
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:168
Definition Unit.h:1367
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
void TriggerFists(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
AuraScript * GetAuraScript() const OVERRIDE
PrepareAuraScript(spell_koralon_meteor_fists_AuraScript)
void TriggerFists(AuraEffect const *aurEff, ProcEventInfo &eventInfo)
SpellScript * GetSpellScript() const OVERRIDE
AuraScript * GetAuraScript() const OVERRIDE
Creature * me
ScriptedAI(Creature *creature)
boss_koralonAI(Creature *creature)
void EnterCombat(Unit *) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
@ DATA_KORALON