Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
instance_magisters_terrace.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_Magisters_Terrace
8SD%Complete: 60
9SDComment: Designed only for Selin Fireheart
10SDCategory: Magister's Terrace
11EndScriptData */
12
13#include "ScriptMgr.h"
14#include "InstanceScript.h"
15#include "magisters_terrace.h"
16
17#define MAX_ENCOUNTER 4
18
19/*
200 - Selin Fireheart
211 - Vexallus
222 - Priestess Delrissa
233 - Kael'thas Sunstrider
24*/
25
27{
28 NPC_SELIN = 24723,
29 NPC_DELRISSA = 24560,
31};
32
44
46{
47public:
48 instance_magisters_terrace() : InstanceMapScript("instance_magisters_terrace", 585) { }
49
51 {
53 {
55 SelinGUID = 0;
56 DelrissaGUID = 0;
58 SelinDoorGUID = 0;
61 KaelDoorGUID = 0;
62 EscapeOrbGUID = 0;
63 StatuesState = 0;
65
66 memset(&Encounter, 0, sizeof(Encounter));
67 FelCrystals.clear();
68 KaelStatue[0] = 0;
69 KaelStatue[1] = 0;
70 }
71
73 {
74 for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
75 if (Encounter[i] == IN_PROGRESS)
76 return true;
77 return false;
78 }
79
80 uint32 GetData(uint32 identifier) const OVERRIDE
81 {
82 switch (identifier)
83 {
85 return Encounter[0];
87 return Encounter[1];
89 return Encounter[2];
91 return Encounter[3];
93 return DelrissaDeathCount;
95 return FelCrystals.size();
96 }
97 return 0;
98 }
99
100 void SetData(uint32 identifier, uint32 data) OVERRIDE
101 {
102 switch (identifier)
103 {
104 case DATA_SELIN_EVENT:
105 if (data == DONE)
106 {
109 }
110 else if (data == IN_PROGRESS)
112 else if (data == NOT_STARTED)
114
115 Encounter[0] = data;
116 break;
118 if (data == DONE)
120 Encounter[1] = data;
121 break;
123 if (data == DONE)
125 if (data == IN_PROGRESS)
127 Encounter[2] = data;
128 break;
130 if (data == NOT_STARTED || data == DONE)
132 else if (data == IN_PROGRESS)
134 Encounter[3] = data;
135 break;
137 if (data == SPECIAL)
139 else
141 break;
145 StatuesState = data;
146 break;
147 }
148
149 SaveToDB();
150 }
151
153 {
154 switch (creature->GetEntry())
155 {
156 case NPC_SELIN:
157 SelinGUID = creature->GetGUID();
158 break;
159 case NPC_DELRISSA:
160 DelrissaGUID = creature->GetGUID();
161 break;
162 case NPC_FELCRYSTALS:
163 FelCrystals.push_back(creature->GetGUID());
164 break;
165 }
166 }
167
169 {
170 switch (go->GetEntry())
171 {
172 case GO_VEXALLUS_DOOR:
173 VexallusDoorGUID = go->GetGUID();
174 break;
175 case GO_SELIN_DOOR:
176 SelinDoorGUID = go->GetGUID();
177 break;
179 SelinEncounterDoorGUID = go->GetGUID();
180 break;
181 case GO_DELRISSA_DOOR:
182 DelrissaDoorGUID = go->GetGUID();
183 break;
184 case GO_KAEL_DOOR:
185 KaelDoorGUID = go->GetGUID();
186 break;
187 case GO_KAEL_STATUE_1:
188 KaelStatue[0] = go->GetGUID();
189 break;
190 case GO_KAEL_STATUE_2:
191 KaelStatue[1] = go->GetGUID();
192 break;
193 case GO_ESCAPE_ORB:
194 EscapeOrbGUID = go->GetGUID();
195 break;
196 }
197 }
198
199 std::string GetSaveData() OVERRIDE
200 {
202
203 std::ostringstream saveStream;
204 saveStream << Encounter[0] << ' ' << Encounter[1] << ' ' << Encounter[2] << ' ' << Encounter[3] << ' ' << StatuesState;
205
207 return saveStream.str();
208 }
209
210 void Load(const char* str) OVERRIDE
211 {
212 if (!str)
213 {
215 return;
216 }
217
219
220 std::istringstream loadStream(str);
221
222 for (uint32 i = 0; i < MAX_ENCOUNTER; ++i)
223 {
224 uint32 tmpState;
225 loadStream >> tmpState;
226 if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
227 tmpState = NOT_STARTED;
228 SetData(i, tmpState);
229 }
230
231 loadStream >> StatuesState;
233
235 }
236
237 uint64 GetData64(uint32 identifier) const OVERRIDE
238 {
239 switch (identifier)
240 {
241 case DATA_SELIN:
242 return SelinGUID;
243 case DATA_DELRISSA:
244 return DelrissaGUID;
246 return VexallusDoorGUID;
248 return DelrissaDoorGUID;
249 case DATA_KAEL_DOOR:
250 return KaelDoorGUID;
252 return KaelStatue[0];
254 return KaelStatue[1];
255 case DATA_ESCAPE_ORB:
256 return EscapeOrbGUID;
257 case DATA_FEL_CRYSTAL:
258 if (FelCrystals.size() < felCristalIndex)
259 {
260 SF_LOG_ERROR("scripts", "Magisters Terrace: No Fel Crystals loaded in Inst Data");
261 return 0;
262 }
263
264 return FelCrystals.at(felCristalIndex);
265 }
266 return 0;
267 }
268
269 void SetData64(uint32 identifier, uint64 value) OVERRIDE
270 {
271 if (identifier == DATA_FEL_CRYSTAL)
272 felCristalIndex = value;
273 }
274
275 private:
278
279 std::vector<uint64> FelCrystals;
280
292 };
293
298};
299
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
@ 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)
#define SF_LOG_ERROR(filterType__,...)
Definition Log.h:143
Creatures
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
void AddSC_instance_magisters_terrace()
#define MAX_ENCOUNTER
@ DATA_KAEL_STATUE_RIGHT
@ DATA_DELRISSA_DEATH_COUNT
@ DATA_ESCAPE_ORB
@ DATA_KAEL_DOOR
@ DATA_SELIN
@ DATA_FEL_CRYSTAL_SIZE
@ DATA_VEXALLUS_EVENT
@ DATA_DELRISSA_DOOR
@ DATA_KAEL_STATUE_LEFT
@ DATA_FEL_CRYSTAL
@ DATA_VEXALLUS_DOOR
@ DATA_KAELTHAS_EVENT
@ DATA_DELRISSA_EVENT
@ DATA_KAELTHAS_STATUES
@ DATA_SELIN_EVENT
@ DATA_DELRISSA