Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_king_dred.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/*
7 * Comment: MAYBE need more improve the "Raptor Call".
8 */
9
10#include "ScriptMgr.h"
11#include "ScriptedCreature.h"
12#include "drak_tharon_keep.h"
13
15{
16 SPELL_BELLOWING_ROAR = 22686, // fears the group, can be resisted/dispelled
18 SPELL_MANGLING_SLASH = 48873, // casted on the current tank, adds debuf
20 SPELL_PIERCING_SLASH = 48878, // debuff --> Armor reduced by 75%
21 SPELL_RAPTOR_CALL = 59416, // dummy
23 SPELL_REND = 13738
24};
25
31
41
43{
44public:
45 boss_king_dred() : CreatureScript("boss_king_dred") { }
46
47 struct boss_king_dredAI : public BossAI
48 {
50 {
51 raptorsKilled = 0;
52 }
53
55 {
56 _Reset();
57 }
58
59 void EnterCombat(Unit* /*who*/) OVERRIDE
60 {
62
63 events.ScheduleEvent(EVENT_BELLOWING_ROAR, 33000);
64 events.ScheduleEvent(EVENT_GRIEVOUS_BITE, 20000);
65 events.ScheduleEvent(EVENT_MANGLING_SLASH, 18500);
66 events.ScheduleEvent(EVENT_FEARSOME_ROAR, std::rand() % 20000 + 10000);
67 events.ScheduleEvent(EVENT_PIERCING_SLASH, 17000);
68 events.ScheduleEvent(EVENT_RAPTOR_CALL, std::rand() % 25000 + 20000);
69 }
70
71 void DoAction(int32 action) OVERRIDE
72 {
73 if (action == ACTION_RAPTOR_KILLED)
75 }
76
78 {
79 if (type == DATA_RAPTORS_KILLED)
80 return raptorsKilled;
81
82 return 0;
83 }
84
85 void JustDied(Unit* /*killer*/) OVERRIDE
86 {
87 _JustDied();
88 }
89
91 {
92 if (!UpdateVictim())
93 return;
94
95 events.Update(diff);
96
97 if (me->HasUnitState(UNIT_STATE_CASTING))
98 return;
99
100 while (uint32 eventId = events.ExecuteEvent())
101 {
102 switch (eventId)
103 {
105 {
107 events.ScheduleEvent(EVENT_BELLOWING_ROAR, 33000);
108 break;
109 }
111 {
113 events.ScheduleEvent(EVENT_GRIEVOUS_BITE, 20000);
114 break;
115 }
117 {
119 events.ScheduleEvent(EVENT_MANGLING_SLASH, 18500);
120 break;
121 }
123 {
125 events.ScheduleEvent(EVENT_FEARSOME_ROAR, std::rand() % 20000 + 10000);
126 break;
127 }
129 {
131 events.ScheduleEvent(EVENT_PIERCING_SLASH, 17000);
132 break;
133 }
135 {
137
138 float x, y, z;
139
140 me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 10.0f);
142 events.ScheduleEvent(EVENT_RAPTOR_CALL, std::rand() % 25000 + 20000);
143 break;
144 }
145 default:
146 break;
147 }
148 }
149
151 }
152
153 private:
155 };
156
158 {
160 }
161};
162
164{
165public:
166 npc_drakkari_gutripper() : CreatureScript("npc_drakkari_gutripper") { }
167
169 {
171 {
172 instance = me->GetInstanceScript();
173 GutRipTimer = 0;
174 }
175
177 {
178 GutRipTimer = std::rand() % 15000 + 10000;
179 }
180
182 {
183 if (!UpdateVictim())
184 return;
185
186 if (GutRipTimer <= diff)
187 {
189 GutRipTimer = std::rand() % 15000 + 10000;
190 }
191 else
192 GutRipTimer -= diff;
193
195 }
196
197 void JustDied(Unit* /*killer*/) OVERRIDE
198 {
200 Dred->AI()->DoAction(ACTION_RAPTOR_KILLED);
201 }
202
203 private:
206 };
207
209 {
211 }
212};
213
215{
216public:
217 npc_drakkari_scytheclaw() : CreatureScript("npc_drakkari_scytheclaw") { }
218
220 {
222 {
223 instance = me->GetInstanceScript();
224 uiRendTimer = 0;
225 }
226
228 {
229 uiRendTimer = std::rand() % 15000 + 10000;
230 }
231
233 {
234 if (!UpdateVictim())
235 return;
236
237 if (uiRendTimer <= diff)
238 {
239 DoCastVictim(SPELL_REND, false);
240 uiRendTimer = std::rand() % 15000 + 10000;
241 }
242 else
243 uiRendTimer -= diff;
244
246 }
247
248 void JustDied(Unit* /*killer*/) OVERRIDE
249 {
251 Dred->AI()->DoAction(ACTION_RAPTOR_KILLED);
252 }
253
254 private:
257 };
258
260 {
262 }
263};
264
266{
267public:
268 achievement_king_dred() : AchievementCriteriaScript("achievement_king_dred") { }
269
270 bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
271 {
272 if (!target)
273 return false;
274
275 if (Creature* Dred = target->ToCreature())
276 if (Dred->AI()->GetData(DATA_RAPTORS_KILLED) >= 6)
277 return true;
278
279 return false;
280 }
281};
282
const T & RAND(const T &v1, const T &v2)
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ TEMPSUMMON_DEAD_DESPAWN
Definition Object.h:74
@ UNIT_STATE_CASTING
Definition Unit.h:527
@ SPELL_REND
void AddSC_boss_king_dred()
@ ACTION_RAPTOR_KILLED
@ DATA_RAPTORS_KILLED
@ SPELL_BELLOWING_ROAR
@ SPELL_MANGLING_SLASH
@ SPELL_GRIEVOUS_BITE
@ SPELL_FEARSOME_ROAR
@ SPELL_PIERCING_SLASH
@ SPELL_REND
@ SPELL_GUT_RIP
@ SPELL_RAPTOR_CALL
@ EVENT_MANGLING_SLASH
@ EVENT_PIERCING_SLASH
@ EVENT_BELLOWING_ROAR
@ EVENT_GRIEVOUS_BITE
@ EVENT_FEARSOME_ROAR
@ EVENT_RAPTOR_CALL
@ SPELL_BELLOWING_ROAR
@ EVENT_BELLOWING_ROAR
AchievementCriteriaScript(const char *name)
EventMap events
BossAI(Creature *creature, uint32 bossId)
void _EnterCombat()
bool UpdateVictim()
CreatureScript(const char *name)
static Creature * GetCreature(WorldObject const &u, uint64 guid)
Creature * ToCreature()
Definition Object.h:207
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:168
void DoCastAOE(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:176
Definition Unit.h:1367
bool OnCheck(Player *, Unit *target) OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
AI * GetDrakTharonKeepAI(Creature *creature)
@ NPC_DRAKKARI_GUTRIPPER
@ NPC_DRAKKARI_SCYTHECLAW
@ DATA_KING_DRED
Creature * me
ScriptedAI(Creature *creature)
uint32 GetData(uint32 type) const OVERRIDE
void DoAction(int32 action) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void EnterCombat(Unit *) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================