Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
instance_blackfathom_deeps.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/* ScriptData
7SDName: Instance_Blackfathom_Deeps
8SD%Complete: 50
9SDComment:
10SDCategory: Blackfathom Deeps
11EndScriptData */
12
13#include "ScriptMgr.h"
14#include "InstanceScript.h"
15#include "blackfathom_deeps.h"
16
17#define MAX_ENCOUNTER 4
18
19/* Encounter 0 = Gelihast
20 Encounter 1 = Twilight Lord Kelris
21 Encounter 2 = Shrine event
22 Encounter 3 = Aku'Mai
23 */
24
26{
27 { -458.500610f, -38.343079f, -33.474445f, 0.0f },
28 { -469.423615f, -88.400513f, -39.265102f, 0.0f },
29 { -622.354980f, -10.350100f, -22.777000f, 0.0f },
30 { -759.640564f, 16.658913f, -29.159529f, 0.0f }
31};
32
34{
35 {-775.431f, -153.853f, -25.871f, 3.207f},
36 {-775.404f, -174.132f, -25.871f, 3.185f},
37 {-862.430f, -154.937f, -25.871f, 0.060f},
38 {-862.193f, -174.251f, -25.871f, 6.182f},
39 {-863.895f, -458.899f, -33.891f, 5.637f}
40};
41
43{
44public:
45 instance_blackfathom_deeps() : InstanceMapScript("instance_blackfathom_deeps", 48) { }
46
51
53 {
55
64
68
70 {
71 memset(&encounter, 0, sizeof(encounter));
72
74 shrine1GUID = 0;
75 shrine2GUID = 0;
76 shrine3GUID = 0;
77 shrine4GUID = 0;
80 mainDoorGUID = 0;
81 countFires = 0;
82 deathTimes = 0;
83 }
84
86 {
87 switch (creature->GetEntry())
88 {
90 twilightLordKelrisGUID = creature->GetGUID();
91 break;
92 case NPC_LORGUS_JETT:
93 creature->SetHomePosition(LorgusPosition[std::rand() % 3]);
94 break;
95 }
96 }
97
99 {
100 switch (go->GetEntry())
101 {
103 shrine1GUID = go->GetGUID();
104 break;
106 shrine2GUID = go->GetGUID();
107 break;
109 shrine3GUID = go->GetGUID();
110 break;
112 shrine4GUID = go->GetGUID();
113 break;
115 shrineOfGelihastGUID = go->GetGUID();
116 if (encounter[0] != DONE)
118 break;
120 altarOfTheDeepsGUID = go->GetGUID();
121 if (encounter[3] != DONE)
123 break;
124 case GO_AKU_MAI_DOOR:
125 if (encounter[2] == DONE)
126 HandleGameObject(0, true, go);
127 mainDoorGUID = go->GetGUID();
128 break;
129 }
130 }
131
132 void SetData(uint32 type, uint32 data) OVERRIDE
133 {
134 switch (type)
135 {
136 case TYPE_GELIHAST:
137 encounter[0] = data;
138 if (data == DONE)
139 if (GameObject* go = instance->GetGameObject(shrineOfGelihastGUID))
141 break;
142 case TYPE_AKU_MAI:
143 encounter[3] = data;
144 if (data == DONE)
145 if (GameObject* go = instance->GetGameObject(altarOfTheDeepsGUID))
146 {
149 }
150 break;
151 case DATA_FIRE:
152 countFires = data;
153 switch (countFires)
154 {
155 case 1:
156 if (GameObject* go = instance->GetGameObject(shrine1GUID))
157 {
162 }
163 break;
164 case 2:
165 if (GameObject* go = instance->GetGameObject(shrine1GUID))
166 {
167 for (uint8 i = 0; i < 2; ++i)
168 {
173 }
174 }
175 break;
176 case 3:
177 if (GameObject* go = instance->GetGameObject(shrine1GUID))
178 {
181 }
182 break;
183 case 4:
184 if (GameObject* go = instance->GetGameObject(shrine1GUID))
185 {
190 }
191 break;
192 }
193 break;
194 case DATA_EVENT:
195 deathTimes = data;
196 if (deathTimes == 18)
198 break;
199 }
200 }
201
203 {
204 switch (type)
205 {
206 case TYPE_GELIHAST:
207 return encounter[0];
208 case TYPE_KELRIS:
209 return encounter[1];
210 case TYPE_SHRINE:
211 return encounter[2];
212 case TYPE_AKU_MAI:
213 return encounter[3];
214 case DATA_FIRE:
215 return countFires;
216 case DATA_EVENT:
217 return deathTimes;
218 }
219
220 return 0;
221 }
222
224 {
225 switch (data)
226 {
229 case DATA_SHRINE1:
230 return shrine1GUID;
231 case DATA_SHRINE2:
232 return shrine2GUID;
233 case DATA_SHRINE3:
234 return shrine3GUID;
235 case DATA_SHRINE4:
236 return shrine4GUID;
239 case DATA_MAINDOOR:
240 return mainDoorGUID;
241 }
242
243 return 0;
244 }
245 };
246};
247
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
@ DONE
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
Definition Object.h:73
@ GO_FLAG_NOT_SELECTABLE
@ GAMEOBJECT_FIELD_FLAGS
@ DATA_SHRINE1
@ DATA_TWILIGHT_LORD_KELRIS
@ DATA_SHRINE2
@ DATA_SHRINE3
@ DATA_SHRINE4
@ DATA_SHRINE_OF_GELIHAST
@ DATA_MAINDOOR
@ GO_FIRE_OF_AKU_MAI_3
@ GO_FIRE_OF_AKU_MAI_4
@ GO_ALTAR_OF_THE_DEEPS
@ GO_FIRE_OF_AKU_MAI_1
@ GO_AKU_MAI_DOOR
@ GO_FIRE_OF_AKU_MAI_2
@ GO_SHRINE_OF_GELIHAST
@ NPC_LORGUS_JETT
@ NPC_BARBED_CRUSTACEAN
@ NPC_AKU_MAI_SERVANT
@ NPC_MORRIDUNE
@ NPC_MURKSHALLOW_SOFTSHELL
@ NPC_AKU_MAI_SNAPJAW
@ NPC_TWILIGHT_LORD_KELRIS
@ TYPE_AKU_MAI
@ TYPE_KELRIS
@ DATA_EVENT
@ TYPE_GELIHAST
@ DATA_FIRE
@ TYPE_SHRINE
InstanceMapScript(const char *name, uint32 mapId)
InstanceScript(Map *map)
void HandleGameObject(uint64 guid, bool open, GameObject *go=NULL)
Definition Map.h:238
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
const Position SpawnsLocation[]
void AddSC_instance_blackfathom_deeps()
const Position LorgusPosition[4]
#define MAX_ENCOUNTER