Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
instance_blackwing_lair.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 "InstanceScript.h"
8#include "ScriptedCreature.h"
9#include "PassiveAI.h"
10#include "blackwing_lair.h"
11#include "Player.h"
12
13/*
14Blackwing Lair Encounter:
151 - boss_razorgore.cpp
162 - boss_vaelastrasz.cpp
173 - boss_broodlord_lashlayer.cpp
184 - boss_firemaw.cpp
195 - boss_ebonroc.cpp
206 - boss_flamegor.cpp
217 - boss_chromaggus.cpp
228 - boss_nefarian.cpp
23*/
24
26{
27 {-7661.207520f, -1043.268188f, 407.199554f, 6.280452f},
28 {-7644.145020f, -1065.628052f, 407.204956f, 0.501492f},
29 {-7624.260742f, -1095.196899f, 407.205017f, 0.544694f},
30 {-7608.501953f, -1116.077271f, 407.199921f, 0.816443f},
31 {-7531.841797f, -1063.765381f, 407.199615f, 2.874187f},
32 {-7547.319336f, -1040.971924f, 407.205078f, 3.789175f},
33 {-7568.547852f, -1013.112488f, 407.204926f, 3.773467f},
34 {-7584.175781f, -989.6691289f, 407.199585f, 4.527447f},
35};
36
37uint32 const Entry[5] = {12422, 12458, 12416, 12420, 12459};
38
40{
41public:
43
45 {
47 {
49
50 // Razorgore
51 EggCount = 0;
52 EggEvent = 0;
55 EggList.clear();
56 // Vaelastrasz the Corrupt
59 // Broodlord Lashlayer
62 // 3 Dragons
63 FiremawGUID = 0;
64 EbonrocGUID = 0;
65 FlamegorGUID = 0;
67 // Chormaggus
70 // Nefarian
72 NefarianGUID = 0;
73 }
74
76 {
77 switch (creature->GetEntry())
78 {
79 case NPC_RAZORGORE:
80 RazorgoreTheUntamedGUID = creature->GetGUID();
81 break;
86 if (Creature* razor = instance->GetCreature(RazorgoreTheUntamedGUID))
87 razor->AI()->JustSummoned(creature);
88 break;
89 case NPC_VAELASTRAZ:
90 VaelastraszTheCorruptGUID = creature->GetGUID();
91 break;
92 case NPC_BROODLORD:
93 BroodlordLashlayerGUID = creature->GetGUID();
94 break;
95 case NPC_FIRENAW:
96 FiremawGUID = creature->GetGUID();
97 break;
98 case NPC_EBONROC:
99 EbonrocGUID = creature->GetGUID();
100 break;
101 case NPC_FLAMEGOR:
102 FlamegorGUID = creature->GetGUID();
103 break;
104 case NPC_CHROMAGGUS:
105 ChromaggusGUID = creature->GetGUID();
106 break;
108 LordVictorNefariusGUID = creature->GetGUID();
109 break;
110 case NPC_NEFARIAN:
111 NefarianGUID = creature->GetGUID();
112 break;
113 }
114 }
115
117 {
118 switch (go->GetEntry())
119 {
120 case 177807: // Egg
122 go->SetPhaseMask(2, true);
123 else
124 EggList.push_back(go->GetGUID());
125 break;
126 case 175946: // Door
127 RazorgoreDoorGUID = go->GetGUID();
129 break;
130 case 175185: // Door
131 VaelastraszDoorGUID = go->GetGUID();
133 break;
134 case 180424: // Door
135 BroodlordDoorGUID = go->GetGUID();
137 break;
138 case 185483: // Door
139 ChrommagusDoorGUID = go->GetGUID();
141 break;
142 case 181125: // Door
143 NefarianDoorGUID = go->GetGUID();
145 break;
146 }
147 }
148
150 {
151 if (go->GetEntry() == 177807) // Egg
152 EggList.remove(go->GetGUID());
153 }
154
156 {
157 if (!InstanceScript::SetBossState(type, state))
158 return false;
159
160 switch (type)
161 {
162 case BOSS_RAZORGORE:
164 if (state == DONE)
165 {
166 for (std::list<uint64>::const_iterator itr = EggList.begin(); itr != EggList.end(); ++itr)
167 if (GameObject* egg = instance->GetGameObject((*itr)))
168 egg->SetPhaseMask(2, true);
169 }
171 break;
172 case BOSS_VAELASTRAZ:
174 break;
175 case BOSS_BROODLORD:
177 break;
178 case BOSS_FIREMAW:
179 case BOSS_EBONROC:
180 case BOSS_FLAMEGOR:
182 break;
183 case BOSS_CHROMAGGUS:
185 break;
186 case BOSS_NEFARIAN:
187 switch (state)
188 {
189 case NOT_STARTED:
190 if (Creature* nefarian = instance->GetCreature(NefarianGUID))
191 nefarian->DespawnOrUnsummon();
192 break;
193 case FAIL:
196 break;
197 default:
198 break;
199 }
200 break;
201 }
202 return true;
203 }
204
206 {
207 switch (id)
208 {
212 case DATA_FIRENAW: return FiremawGUID;
213 case DATA_EBONROC: return EbonrocGUID;
214 case DATA_FLAMEGOR: return FlamegorGUID;
215 case DATA_CHROMAGGUS: return ChromaggusGUID;
217 case DATA_NEFARIAN: return NefarianGUID;
218 }
219
220 return 0;
221 }
222
223 void SetData(uint32 type, uint32 data) OVERRIDE
224 {
225 if (type == DATA_EGG_EVENT)
226 {
227 switch (data)
228 {
229 case IN_PROGRESS:
230 _events.ScheduleEvent(EVENT_RAZOR_SPAWN, 45*IN_MILLISECONDS);
231 EggEvent = data;
232 EggCount = 0;
233 break;
234 case NOT_STARTED:
235 _events.CancelEvent(EVENT_RAZOR_SPAWN);
236 EggEvent = data;
237 EggCount = 0;
238 break;
239 case SPECIAL:
240 if (++EggCount == 15)
241 {
242 if (Creature* razor = instance->GetCreature(RazorgoreTheUntamedGUID))
243 {
245 razor->RemoveAurasDueToSpell(42013); // MindControl
247 }
249 _events.CancelEvent(EVENT_RAZOR_SPAWN);
250 }
251 if (EggEvent == NOT_STARTED)
253 break;
254 }
255 }
256 }
257
259 {
261 if (unit->GetEntry() == NPC_RAZORGORE && GetBossState(BOSS_RAZORGORE) != DONE)
263 }
264
266 {
267 if (_events.Empty())
268 return;
269
270 _events.Update(diff);
271
272 while (uint32 eventId = _events.ExecuteEvent())
273 {
274 switch (eventId)
275 {
277 for (uint8 i = std::rand() % 5 + 2; i > 0 ; --i)
278 if (Creature* summon = instance->SummonCreature(Entry[std::rand() % 4], SummonPosition[std::rand() % 7]))
279 summon->SetInCombatWithZone();
280 _events.ScheduleEvent(EVENT_RAZOR_SPAWN, std::rand() % (17 * IN_MILLISECONDS) + (12 * IN_MILLISECONDS));
281 break;
283 _events.CancelEvent(EVENT_RAZOR_SPAWN);
284 if (Creature* razor = instance->GetCreature(RazorgoreTheUntamedGUID))
285 razor->AI()->DoAction(ACTION_PHASE_TWO);
286 break;
288 if (Creature* nefarius = instance->GetCreature(LordVictorNefariusGUID))
289 {
290 nefarius->SetPhaseMask(1, true);
291 nefarius->setActive(true);
292 nefarius->Respawn();
293 nefarius->GetMotionMaster()->MoveTargetedHome();
294 }
295 break;
296 }
297 }
298 }
299
300 protected:
301 // Misc
303 // Razorgore
308 std::list<uint64> EggList;
309
310 // Vaelastrasz the Corrupt
313
314 // Broodlord Lashlayer
317
318 // 3 Dragons
323
324 // Chormaggus
327
328 // Nefarian
331 };
332
337};
338
@ IN_MILLISECONDS
Definition Common.h:125
@ MINUTE
Definition Common.h:119
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
std::uint64_t uint64
Definition Define.h:76
EncounterState
@ IN_PROGRESS
@ FAIL
@ DONE
@ SPECIAL
@ NOT_STARTED
@ NPC_BROODLORD
uint32 const EncounterCount
@ EVENT_RAZOR_PHASE_TWO
@ EVENT_RAZOR_SPAWN
@ EVENT_RESPAWN_NEFARIUS
@ DATA_EGG_EVENT
@ ACTION_PHASE_TWO
@ DATA_VAELASTRAZ_THE_CORRUPT
@ DATA_FLAMEGOR
@ DATA_LORD_VICTOR_NEFARIUS
@ DATA_CHROMAGGUS
@ DATA_NEFARIAN
@ DATA_FIRENAW
@ DATA_EBONROC
@ DATA_BROODLORD_LASHLAYER
@ DATA_RAZORGORE_THE_UNTAMED
#define BRLScriptName
@ NPC_VICTOR_NEFARIUS
@ NPC_BLACKWING_DRAGON
@ NPC_FIRENAW
@ NPC_CHROMAGGUS
@ NPC_EBONROC
@ NPC_BLACKWING_TASKMASTER
@ NPC_RAZORGORE
@ NPC_BLACKWING_LEGIONAIRE
@ NPC_BLACKWING_WARLOCK
@ NPC_VAELASTRAZ
@ NPC_FLAMEGOR
@ NPC_NEFARIAN
@ BOSS_FLAMEGOR
@ BOSS_NEFARIAN
@ BOSS_RAZORGORE
@ BOSS_FIREMAW
@ BOSS_BROODLORD
@ BOSS_VAELASTRAZ
@ BOSS_CHROMAGGUS
@ BOSS_EBONROC
InstanceMapScript(const char *name, uint32 mapId)
InstanceScript(Map *map)
void SetBossNumber(uint32 number)
virtual bool SetBossState(uint32 id, EncounterState state)
void DoRemoveAurasDueToSpellOnPlayers(uint32 spell)
EncounterState GetBossState(uint32 id) const
void HandleGameObject(uint64 guid, bool open, GameObject *go=NULL)
Definition Map.h:238
Definition Unit.h:1367
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
Position const SummonPosition[8]
uint32 const Entry[5]
void AddSC_instance_blackwing_lair()