Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
instance_pit_of_saron.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 "pit_of_saron.h"
9#include "Player.h"
10
11// positions for Martin Victus (37591) and Gorkun Ironskull (37592)
12Position const SlaveLeaderPos = {689.7158f, -104.8736f, 513.7360f, 0.0f};
13// position for Jaina and Sylvanas
14Position const EventLeaderPos2 = {1054.368f, 107.14620f, 628.4467f, 0.0f};
15
22
24{
25 public:
27
29 {
43
45 {
46 if (!_teamInInstance)
47 _teamInInstance = player->GetTeam();
48 }
49
51 {
52 if (!_teamInInstance)
53 {
54 Map::PlayerList const &players = instance->GetPlayers();
55 if (!players.isEmpty())
56 if (Player* player = players.begin()->GetSource())
57 _teamInInstance = player->GetTeam();
58 }
59
60 switch (creature->GetEntry())
61 {
62 case NPC_GARFROST:
63 _garfrostGUID = creature->GetGUID();
64 break;
65 case NPC_KRICK:
66 _krickGUID = creature->GetGUID();
67 break;
68 case NPC_ICK:
69 _ickGUID = creature->GetGUID();
70 break;
71 case NPC_TYRANNUS:
72 _tyrannusGUID = creature->GetGUID();
73 break;
74 case NPC_RIMEFANG:
75 _rimefangGUID = creature->GetGUID();
76 break;
78 _tyrannusEventGUID = creature->GetGUID();
79 break;
82 creature->UpdateEntry(NPC_JAINA_PART1, ALLIANCE);
83 _jainaOrSylvanas1GUID = creature->GetGUID();
84 break;
87 creature->UpdateEntry(NPC_JAINA_PART2, ALLIANCE);
88 _jainaOrSylvanas2GUID = creature->GetGUID();
89 break;
90 case NPC_KILARA:
92 creature->UpdateEntry(NPC_ELANDRA, ALLIANCE);
93 break;
94 case NPC_KORALEN:
96 creature->UpdateEntry(NPC_KORLAEN, ALLIANCE);
97 break;
100 creature->UpdateEntry(NPC_CHAMPION_1_ALLIANCE, ALLIANCE);
101 break;
104 creature->UpdateEntry(NPC_CHAMPION_2_ALLIANCE, ALLIANCE);
105 break;
106 case NPC_CHAMPION_3_HORDE: // No 3rd set for Alliance?
108 creature->UpdateEntry(NPC_CHAMPION_2_ALLIANCE, ALLIANCE);
109 break;
112 creature->UpdateEntry(NPC_ALLIANCE_SLAVE_1, ALLIANCE);
113 break;
116 creature->UpdateEntry(NPC_ALLIANCE_SLAVE_2, ALLIANCE);
117 break;
120 creature->UpdateEntry(NPC_ALLIANCE_SLAVE_3, ALLIANCE);
121 break;
124 creature->UpdateEntry(NPC_ALLIANCE_SLAVE_4, ALLIANCE);
125 break;
128 creature->UpdateEntry(NPC_FREED_SLAVE_1_ALLIANCE, ALLIANCE);
129 break;
132 creature->UpdateEntry(NPC_FREED_SLAVE_2_ALLIANCE, ALLIANCE);
133 break;
136 creature->UpdateEntry(NPC_FREED_SLAVE_3_ALLIANCE, ALLIANCE);
137 break;
140 creature->UpdateEntry(NPC_RESCUED_SLAVE_ALLIANCE, ALLIANCE);
141 break;
144 creature->UpdateEntry(NPC_MARTIN_VICTUS_1, ALLIANCE);
145 break;
148 creature->UpdateEntry(NPC_MARTIN_VICTUS_2, ALLIANCE);
149 break;
150 default:
151 break;
152 }
153 }
154
156 {
157 switch (go->GetEntry())
158 {
159 case GO_ICE_WALL:
161 AddDoor(go, true);
162 break;
163 }
164 }
165
167 {
168 switch (go->GetEntry())
169 {
170 case GO_ICE_WALL:
172 AddDoor(go, false);
173 break;
174 }
175 }
176
178 {
179 if (!InstanceScript::SetBossState(type, state))
180 return false;
181
182 switch (type)
183 {
184 case DATA_GARFROST:
185 if (state == DONE)
186 {
187 if (Creature* summoner = instance->GetCreature(_garfrostGUID))
188 {
191 else
193 }
194 }
195 break;
196 case DATA_TYRANNUS:
197 if (state == DONE)
198 {
199 if (Creature* summoner = instance->GetCreature(_tyrannusGUID))
200 {
203 else
205 }
206 }
207 break;
208 default:
209 break;
210 }
211
212 return true;
213 }
214
216 {
217 switch (type)
218 {
220 return _teamInInstance;
221 default:
222 break;
223 }
224
225 return 0;
226 }
227
229 {
230 switch (type)
231 {
232 case DATA_GARFROST:
233 return _garfrostGUID;
234 case DATA_KRICK:
235 return _krickGUID;
236 case DATA_ICK:
237 return _ickGUID;
238 case DATA_TYRANNUS:
239 return _tyrannusGUID;
240 case DATA_RIMEFANG:
241 return _rimefangGUID;
243 return _tyrannusEventGUID;
248 default:
249 break;
250 }
251
252 return 0;
253 }
254
255 std::string GetSaveData() OVERRIDE
256 {
258
259 std::ostringstream saveStream;
260 saveStream << "P S " << GetBossSaveData();
261
263 return saveStream.str();
264 }
265
266 void Load(const char* in) OVERRIDE
267 {
268 if (!in)
269 {
271 return;
272 }
273
275
276 char dataHead1, dataHead2;
277
278 std::istringstream loadStream(in);
279 loadStream >> dataHead1 >> dataHead2;
280
281 if (dataHead1 == 'P' && dataHead2 == 'S')
282 {
283 for (uint8 i = 0; i < EncounterCount; ++i)
284 {
285 uint32 tmpState;
286 loadStream >> tmpState;
287 if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
288 tmpState = NOT_STARTED;
289
290 SetBossState(i, EncounterState(tmpState));
291 }
292 }
293 else
295
297 }
298
299 private:
305
309
311 };
312
317};
318
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
#define OUT_LOAD_INST_DATA_FAIL
EncounterState
@ IN_PROGRESS
@ DONE
@ SPECIAL
@ NOT_STARTED
#define OUT_SAVE_INST_DATA_COMPLETE
#define OUT_LOAD_INST_DATA_COMPLETE
#define OUT_SAVE_INST_DATA
#define OUT_LOAD_INST_DATA(a)
@ DOOR_TYPE_PASSAGE
@ BOUNDARY_NONE
@ TEMPSUMMON_MANUAL_DESPAWN
Definition Object.h:75
@ ALLIANCE
uint32 const EncounterCount
InstanceMapScript(const char *name, uint32 mapId)
InstanceScript(Map *map)
void SetBossNumber(uint32 number)
virtual bool SetBossState(uint32 id, EncounterState state)
std::string GetBossSaveData()
void AddDoor(GameObject *door, bool add)
void LoadDoorData(DoorData const *data)
bool isEmpty() const
Definition LinkedList.h:86
Definition Map.h:238
MapRefManager PlayerList
Definition Map.h:406
iterator begin()
FROM * GetSource() const
Definition Reference.h:83
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
@ NPC_JAINA_PART1
@ NPC_CHAMPION_1_ALLIANCE
@ NPC_JAINA_PART2
@ NPC_CHAMPION_1_HORDE
@ NPC_CHAMPION_2_ALLIANCE
@ NPC_SYLVANAS_PART2
@ NPC_ELANDRA
@ NPC_CHAMPION_3_HORDE
@ NPC_CHAMPION_2_HORDE
@ NPC_SYLVANAS_PART1
@ DATA_TEAM_IN_INSTANCE
@ GO_ICE_WALL
void AddSC_instance_pit_of_saron()
Position const EventLeaderPos2
Position const SlaveLeaderPos
DoorData const Doors[]
@ GO_HALLS_OF_REFLECTION_PORTCULLIS
#define PoSScriptName
Definition pit_of_saron.h:9
@ NPC_ICK
@ NPC_FREED_SLAVE_1_ALLIANCE
@ NPC_KORALEN
@ NPC_HORDE_SLAVE_3
@ NPC_RIMEFANG
@ NPC_ALLIANCE_SLAVE_2
@ NPC_FREED_SLAVE_3_HORDE
@ NPC_FREED_SLAVE_3_ALLIANCE
@ NPC_KORLAEN
@ NPC_KILARA
@ NPC_GARFROST
@ NPC_FREED_SLAVE_2_HORDE
@ NPC_HORDE_SLAVE_2
@ NPC_TYRANNUS_EVENTS
@ NPC_HORDE_SLAVE_1
@ NPC_KRICK
@ NPC_GORKUN_IRONSKULL_2
@ NPC_FREED_SLAVE_1_HORDE
@ NPC_RESCUED_SLAVE_HORDE
@ NPC_MARTIN_VICTUS_1
@ NPC_TYRANNUS
@ NPC_ALLIANCE_SLAVE_4
@ NPC_RESCUED_SLAVE_ALLIANCE
@ NPC_MARTIN_VICTUS_2
@ NPC_HORDE_SLAVE_4
@ NPC_ALLIANCE_SLAVE_3
@ NPC_FREED_SLAVE_2_ALLIANCE
@ NPC_ALLIANCE_SLAVE_1
@ DATA_ICK
@ DATA_JAINA_SYLVANAS_2
@ DATA_TYRANNUS_EVENT
@ DATA_RIMEFANG
@ DATA_KRICK
@ DATA_JAINA_SYLVANAS_1
@ DATA_GARFROST
@ DATA_TYRANNUS
bool SetBossState(uint32 type, EncounterState state) OVERRIDE