Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_archavon.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 "SpellScript.h"
9#include "vault_of_archavon.h"
10
12{
14 EMOTE_LEAP = 1 // Not in use
15};
16
18{
19 // Spells Archavon
26 SPELL_STOMP = 58663,
27 SPELL_IMPALE = 58666,
29
30 // Archavon Warders
34};
35
37{
39};
40
42{
43 // Archavon
44 EVENT_ROCK_SHARDS = 1, // 15s cd
45 EVENT_CHOKING_CLOUD = 2, // 30s cd
46 EVENT_STOMP = 3, // 45s cd
48 EVENT_BERSERK = 5, // 300s cd
49
50 //mob
51 EVENT_ROCK_SHOWER = 6, // set = 20s cd, unkown cd
52 EVENT_SHIELD_CRUSH = 7, // set = 30s cd
53 EVENT_WHIRL = 8, // set= 10s cd
54};
55
57{
58 public:
59 boss_archavon() : CreatureScript("boss_archavon") { }
60
61 struct boss_archavonAI : public BossAI
62 {
64 {
65 }
66
67 void EnterCombat(Unit* /*who*/) OVERRIDE
68 {
69 events.ScheduleEvent(EVENT_ROCK_SHARDS, 15000);
70 events.ScheduleEvent(EVENT_CHOKING_CLOUD, 30000);
71 events.ScheduleEvent(EVENT_STOMP, 45000);
72 events.ScheduleEvent(EVENT_BERSERK, 300000);
73
75 }
76
77 // Below UpdateAI may need review/debug.
79 {
80 if (!UpdateVictim())
81 return;
82
83 events.Update(diff);
84
85 if (me->HasUnitState(UNIT_STATE_CASTING))
86 return;
87
88 while (uint32 eventId = events.ExecuteEvent())
89 {
90 switch (eventId)
91 {
93 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
95 events.ScheduleEvent(EVENT_ROCK_SHARDS, 15000);
96 break;
98 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
99 DoCast(target, SPELL_CRUSHING_LEAP, true); //10y~80y, ignore range
100 events.ScheduleEvent(EVENT_CHOKING_CLOUD, 30000);
101 break;
102 case EVENT_STOMP:
104 events.ScheduleEvent(EVENT_IMPALE, 3000);
105 events.ScheduleEvent(EVENT_STOMP, 45000);
106 break;
107 case EVENT_IMPALE:
109 break;
110 case EVENT_BERSERK:
113 break;
114 default:
115 break;
116 }
117 }
118
120 }
121 };
122
124 {
125 return new boss_archavonAI(creature);
126 }
127};
128
129/*######
130## Mob Archavon Warder
131######*/
133{
134 public:
135 npc_archavon_warder() : CreatureScript("npc_archavon_warder") { }
136
137 struct npc_archavon_warderAI : public ScriptedAI //npc 32353
138 {
140 {
141 }
142
144
146 {
147 events.Reset();
148 events.ScheduleEvent(EVENT_ROCK_SHOWER, 2000);
149 events.ScheduleEvent(EVENT_SHIELD_CRUSH, 20000);
150 events.ScheduleEvent(EVENT_WHIRL, 7500);
151 }
152
153 void EnterCombat(Unit* /*who*/) OVERRIDE
154 {
156 }
157
159 {
160 if (!UpdateVictim())
161 return;
162
163 events.Update(diff);
164
165 if (me->HasUnitState(UNIT_STATE_CASTING))
166 return;
167
168 while (uint32 eventId = events.ExecuteEvent())
169 {
170 switch (eventId)
171 {
173 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
174 DoCast(target, SPELL_ROCK_SHOWER);
175 events.ScheduleEvent(EVENT_ROCK_SHARDS, 6000);
176 break;
179 events.ScheduleEvent(EVENT_SHIELD_CRUSH, 20000);
180 break;
181 case EVENT_WHIRL:
183 events.ScheduleEvent(EVENT_WHIRL, 8000);
184 break;
185 default:
186 break;
187 }
188 }
189
191 }
192 };
193
195 {
196 return new npc_archavon_warderAI(creature);
197 }
198};
199
200// 58941 - Rock Shards
202{
203 public:
204 spell_archavon_rock_shards() : SpellScriptLoader("spell_archavon_rock_shards") { }
205
207 {
209
210 bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
211 {
212 if (!sSpellMgr->GetSpellInfo(SPELL_ROCK_SHARDS_VISUAL_L)
213 || !sSpellMgr->GetSpellInfo(SPELL_ROCK_SHARDS_VISUAL_R)
214 || !sSpellMgr->GetSpellInfo(SPELL_ROCK_SHARDS_DAMAGE_L)
215 || !sSpellMgr->GetSpellInfo(SPELL_ROCK_SHARDS_DAMAGE_R))
216 return false;
217 return true;
218 }
219
220 void HandleScript(SpellEffIndex /*effIndex*/)
221 {
222 Unit* caster = GetCaster();
223
224 for (uint8 i = 0; i < 3; ++i)
225 {
226 caster->CastSpell((Unit*)NULL, SPELL_ROCK_SHARDS_VISUAL_L, true);
227 caster->CastSpell((Unit*)NULL, SPELL_ROCK_SHARDS_VISUAL_R, true);
228 }
229
230 caster->CastSpell((Unit*)NULL, SPELL_ROCK_SHARDS_DAMAGE_L, true);
231 caster->CastSpell((Unit*)NULL, SPELL_ROCK_SHARDS_DAMAGE_R, true);
232 }
233
238 };
239
244};
245
247{
248 new boss_archavon();
251}
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
SpellEffIndex
@ EFFECT_0
@ SPELL_EFFECT_SCRIPT_EFFECT
#define sSpellMgr
Definition SpellMgr.h:744
#define SpellEffectFn(F, I, N)
@ UNIT_STATE_CASTING
Definition Unit.h:527
@ SELECT_TARGET_RANDOM
Definition UnitAI.h:23
Creatures
@ NPC_ARCHAVON_WARDER
@ EMOTE_LEAP
@ EMOTE_BERSERK
@ SPELL_STOMP
@ SPELL_ROCK_SHARDS
@ SPELL_ROCK_SHARDS_DAMAGE_R
@ SPELL_ROCK_SHOWER
@ SPELL_ROCK_SHARDS_VISUAL_R
@ SPELL_SHIELD_CRUSH
@ SPELL_ROCK_SHARDS_VISUAL_L
@ SPELL_WHIRL
@ SPELL_BERSERK
@ SPELL_CRUSHING_LEAP
@ SPELL_ROCK_SHARDS_DAMAGE_L
@ SPELL_IMPALE
void AddSC_boss_archavon()
@ EVENT_SHIELD_CRUSH
@ EVENT_WHIRL
@ EVENT_ROCK_SHOWER
@ EVENT_BERSERK
@ EVENT_ROCK_SHARDS
@ EVENT_STOMP
@ EVENT_IMPALE
@ EVENT_CHOKING_CLOUD
#define SPELL_BERSERK
@ EMOTE_BERSERK
@ EVENT_BERSERK
@ EVENT_STOMP
@ SPELL_STOMP
Definition chapter5.cpp:158
EventMap events
BossAI(Creature *creature, uint32 bossId)
void _EnterCombat()
void DoZoneInCombat(Creature *creature=NULL, float maxRangeToNearestTarget=50.0f)
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
CreatureScript(const char *name)
HookList< EffectHandler > OnEffectHit
Unit * GetCaster()
SpellScriptLoader(const char *name)
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCast(uint32 spellId)
Definition UnitAI.cpp:110
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition UnitAI.cpp:66
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
PrepareSpellScript(spell_archavon_rock_shards_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
Creature * me
ScriptedAI(Creature *creature)
boss_archavonAI(Creature *creature)
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void EnterCombat(Unit *) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
@ DATA_ARCHAVON