Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
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
7
SDName: Instance_Magisters_Terrace
8
SD%Complete: 60
9
SDComment: Designed only for Selin Fireheart
10
SDCategory: Magister's Terrace
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
InstanceScript.h
"
15
#include "
magisters_terrace.h
"
16
17
#define MAX_ENCOUNTER 4
18
19
/*
20
0 - Selin Fireheart
21
1 - Vexallus
22
2 - Priestess Delrissa
23
3 - Kael'thas Sunstrider
24
*/
25
26
enum
Creatures
27
{
28
NPC_SELIN
= 24723,
29
NPC_DELRISSA
= 24560,
30
NPC_FELCRYSTALS
= 24722
31
};
32
33
enum
GameObjects
34
{
35
GO_VEXALLUS_DOOR
= 187896,
36
GO_SELIN_DOOR
= 187979,
37
GO_SELIN_ENCOUNTER_DOOR
= 188065,
38
GO_DELRISSA_DOOR
= 187770,
39
GO_KAEL_DOOR
= 188064,
40
GO_KAEL_STATUE_1
= 188165,
41
GO_KAEL_STATUE_2
= 188166,
42
GO_ESCAPE_ORB
= 188173
43
};
44
45
class
instance_magisters_terrace
:
public
InstanceMapScript
46
{
47
public
:
48
instance_magisters_terrace
() :
InstanceMapScript
(
"instance_magisters_terrace"
, 585) { }
49
50
struct
instance_magisters_terrace_InstanceMapScript
:
public
InstanceScript
51
{
52
instance_magisters_terrace_InstanceMapScript
(
Map
* map) :
InstanceScript
(map)
53
{
54
DelrissaDeathCount
= 0;
55
SelinGUID
= 0;
56
DelrissaGUID
= 0;
57
VexallusDoorGUID
= 0;
58
SelinDoorGUID
= 0;
59
SelinEncounterDoorGUID
= 0;
60
DelrissaDoorGUID
= 0;
61
KaelDoorGUID
= 0;
62
EscapeOrbGUID
= 0;
63
StatuesState
= 0;
64
felCristalIndex
= 0;
65
66
memset(&
Encounter
, 0,
sizeof
(
Encounter
));
67
FelCrystals
.clear();
68
KaelStatue
[0] = 0;
69
KaelStatue
[1] = 0;
70
}
71
72
bool
IsEncounterInProgress
() const
OVERRIDE
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
{
84
case
DATA_SELIN_EVENT
:
85
return
Encounter
[0];
86
case
DATA_VEXALLUS_EVENT
:
87
return
Encounter
[1];
88
case
DATA_DELRISSA_EVENT
:
89
return
Encounter
[2];
90
case
DATA_KAELTHAS_EVENT
:
91
return
Encounter
[3];
92
case
DATA_DELRISSA_DEATH_COUNT
:
93
return
DelrissaDeathCount
;
94
case
DATA_FEL_CRYSTAL_SIZE
:
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
{
107
HandleGameObject
(
SelinEncounterDoorGUID
,
true
);
108
HandleGameObject
(
SelinDoorGUID
,
true
);
109
}
110
else
if
(data ==
IN_PROGRESS
)
111
HandleGameObject
(
SelinEncounterDoorGUID
,
false
);
112
else
if
(data ==
NOT_STARTED
)
113
HandleGameObject
(
SelinEncounterDoorGUID
,
true
);
114
115
Encounter
[0] = data;
116
break
;
117
case
DATA_VEXALLUS_EVENT
:
118
if
(data ==
DONE
)
119
HandleGameObject
(
VexallusDoorGUID
,
true
);
120
Encounter
[1] = data;
121
break
;
122
case
DATA_DELRISSA_EVENT
:
123
if
(data ==
DONE
)
124
HandleGameObject
(
DelrissaDoorGUID
,
true
);
125
if
(data ==
IN_PROGRESS
)
126
DelrissaDeathCount
= 0;
127
Encounter
[2] = data;
128
break
;
129
case
DATA_KAELTHAS_EVENT
:
130
if
(data ==
NOT_STARTED
|| data ==
DONE
)
131
HandleGameObject
(
KaelDoorGUID
,
true
);
132
else
if
(data ==
IN_PROGRESS
)
133
HandleGameObject
(
KaelDoorGUID
,
false
);
134
Encounter
[3] = data;
135
break
;
136
case
DATA_DELRISSA_DEATH_COUNT
:
137
if
(data ==
SPECIAL
)
138
++
DelrissaDeathCount
;
139
else
140
DelrissaDeathCount
= 0;
141
break
;
142
case
DATA_KAELTHAS_STATUES
:
143
HandleGameObject
(
KaelStatue
[0], data);
144
HandleGameObject
(
KaelStatue
[1], data);
145
StatuesState
= data;
146
break
;
147
}
148
149
SaveToDB
();
150
}
151
152
void
OnCreatureCreate
(
Creature
* creature)
OVERRIDE
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
168
void
OnGameObjectCreate
(
GameObject
* go)
OVERRIDE
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
;
178
case
GO_SELIN_ENCOUNTER_DOOR
:
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
{
201
OUT_SAVE_INST_DATA
;
202
203
std::ostringstream saveStream;
204
saveStream <<
Encounter
[0] <<
' '
<<
Encounter
[1] <<
' '
<<
Encounter
[2] <<
' '
<<
Encounter
[3] <<
' '
<<
StatuesState
;
205
206
OUT_SAVE_INST_DATA_COMPLETE
;
207
return
saveStream.str();
208
}
209
210
void
Load
(
const
char
* str)
OVERRIDE
211
{
212
if
(!str)
213
{
214
OUT_LOAD_INST_DATA_FAIL
;
215
return
;
216
}
217
218
OUT_LOAD_INST_DATA
(str);
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
;
232
SetData
(
DATA_KAELTHAS_STATUES
,
StatuesState
);
233
234
OUT_LOAD_INST_DATA_COMPLETE
;
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
;
245
case
DATA_VEXALLUS_DOOR
:
246
return
VexallusDoorGUID
;
247
case
DATA_DELRISSA_DOOR
:
248
return
DelrissaDoorGUID
;
249
case
DATA_KAEL_DOOR
:
250
return
KaelDoorGUID
;
251
case
DATA_KAEL_STATUE_LEFT
:
252
return
KaelStatue
[0];
253
case
DATA_KAEL_STATUE_RIGHT
:
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
:
276
uint32
Encounter
[
MAX_ENCOUNTER
];
277
uint32
DelrissaDeathCount
;
278
279
std::vector<uint64>
FelCrystals
;
280
281
uint64
SelinGUID
;
282
uint64
DelrissaGUID
;
283
uint64
VexallusDoorGUID
;
284
uint64
SelinDoorGUID
;
285
uint64
SelinEncounterDoorGUID
;
286
uint64
DelrissaDoorGUID
;
287
uint64
KaelDoorGUID
;
288
uint64
KaelStatue
[2];
289
uint64
EscapeOrbGUID
;
290
uint32
StatuesState
;
291
uint8
felCristalIndex
;
292
};
293
294
InstanceScript
*
GetInstanceScript
(
InstanceMap
* map)
const
OVERRIDE
295
{
296
return
new
instance_magisters_terrace_InstanceMapScript
(map);
297
}
298
};
299
300
void
AddSC_instance_magisters_terrace
()
301
{
302
new
instance_magisters_terrace
();
303
}
uint8
std::uint8_t uint8
Definition
Define.h:79
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
uint64
std::uint64_t uint64
Definition
Define.h:76
InstanceScript.h
OUT_LOAD_INST_DATA_FAIL
#define OUT_LOAD_INST_DATA_FAIL
Definition
InstanceScript.h:18
IN_PROGRESS
@ IN_PROGRESS
Definition
InstanceScript.h:47
DONE
@ DONE
Definition
InstanceScript.h:49
SPECIAL
@ SPECIAL
Definition
InstanceScript.h:50
NOT_STARTED
@ NOT_STARTED
Definition
InstanceScript.h:46
OUT_SAVE_INST_DATA_COMPLETE
#define OUT_SAVE_INST_DATA_COMPLETE
Definition
InstanceScript.h:15
OUT_LOAD_INST_DATA_COMPLETE
#define OUT_LOAD_INST_DATA_COMPLETE
Definition
InstanceScript.h:17
OUT_SAVE_INST_DATA
#define OUT_SAVE_INST_DATA
Definition
InstanceScript.h:14
OUT_LOAD_INST_DATA
#define OUT_LOAD_INST_DATA(a)
Definition
InstanceScript.h:16
SF_LOG_ERROR
#define SF_LOG_ERROR(filterType__,...)
Definition
Log.h:143
ScriptMgr.h
Creatures
Creatures
Definition
alterac_valley.cpp:28
SetData
SetData
Definition
boss_shade_of_akama.cpp:85
Creature
Definition
Creature.h:427
GameObject
Definition
GameObject.h:629
InstanceMap
Definition
Map.h:637
InstanceMapScript::InstanceMapScript
InstanceMapScript(const char *name, uint32 mapId)
Definition
ScriptMgr.cpp:1412
InstanceScript
Definition
InstanceScript.h:123
InstanceScript::InstanceScript
InstanceScript(Map *map)
Definition
InstanceScript.h:125
InstanceScript::SaveToDB
void SaveToDB()
Definition
InstanceScript.cpp:20
InstanceScript::HandleGameObject
void HandleGameObject(uint64 guid, bool open, GameObject *go=NULL)
Definition
InstanceScript.cpp:33
Map
Definition
Map.h:238
instance_magisters_terrace
Definition
instance_magisters_terrace.cpp:46
instance_magisters_terrace::instance_magisters_terrace
instance_magisters_terrace()
Definition
instance_magisters_terrace.cpp:48
instance_magisters_terrace::GetInstanceScript
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
Definition
instance_magisters_terrace.cpp:294
GameObjects
GameObjects
Definition
instance_blackrock_depths.cpp:30
GO_KAEL_STATUE_2
@ GO_KAEL_STATUE_2
Definition
instance_magisters_terrace.cpp:41
GO_DELRISSA_DOOR
@ GO_DELRISSA_DOOR
Definition
instance_magisters_terrace.cpp:38
GO_VEXALLUS_DOOR
@ GO_VEXALLUS_DOOR
Definition
instance_magisters_terrace.cpp:35
GO_KAEL_STATUE_1
@ GO_KAEL_STATUE_1
Definition
instance_magisters_terrace.cpp:40
GO_SELIN_DOOR
@ GO_SELIN_DOOR
Definition
instance_magisters_terrace.cpp:36
GO_SELIN_ENCOUNTER_DOOR
@ GO_SELIN_ENCOUNTER_DOOR
Definition
instance_magisters_terrace.cpp:37
GO_KAEL_DOOR
@ GO_KAEL_DOOR
Definition
instance_magisters_terrace.cpp:39
GO_ESCAPE_ORB
@ GO_ESCAPE_ORB
Definition
instance_magisters_terrace.cpp:42
NPC_DELRISSA
@ NPC_DELRISSA
Definition
instance_magisters_terrace.cpp:29
NPC_SELIN
@ NPC_SELIN
Definition
instance_magisters_terrace.cpp:28
NPC_FELCRYSTALS
@ NPC_FELCRYSTALS
Definition
instance_magisters_terrace.cpp:30
AddSC_instance_magisters_terrace
void AddSC_instance_magisters_terrace()
Definition
instance_magisters_terrace.cpp:300
MAX_ENCOUNTER
#define MAX_ENCOUNTER
Definition
instance_magisters_terrace.cpp:17
magisters_terrace.h
DATA_KAEL_STATUE_RIGHT
@ DATA_KAEL_STATUE_RIGHT
Definition
magisters_terrace.h:28
DATA_DELRISSA_DEATH_COUNT
@ DATA_DELRISSA_DEATH_COUNT
Definition
magisters_terrace.h:30
DATA_ESCAPE_ORB
@ DATA_ESCAPE_ORB
Definition
magisters_terrace.h:32
DATA_KAEL_DOOR
@ DATA_KAEL_DOOR
Definition
magisters_terrace.h:26
DATA_SELIN
@ DATA_SELIN
Definition
magisters_terrace.h:18
DATA_FEL_CRYSTAL_SIZE
@ DATA_FEL_CRYSTAL_SIZE
Definition
magisters_terrace.h:20
DATA_VEXALLUS_EVENT
@ DATA_VEXALLUS_EVENT
Definition
magisters_terrace.h:14
DATA_DELRISSA_DOOR
@ DATA_DELRISSA_DOOR
Definition
magisters_terrace.h:24
DATA_KAEL_STATUE_LEFT
@ DATA_KAEL_STATUE_LEFT
Definition
magisters_terrace.h:27
DATA_FEL_CRYSTAL
@ DATA_FEL_CRYSTAL
Definition
magisters_terrace.h:19
DATA_VEXALLUS_DOOR
@ DATA_VEXALLUS_DOOR
Definition
magisters_terrace.h:22
DATA_KAELTHAS_EVENT
@ DATA_KAELTHAS_EVENT
Definition
magisters_terrace.h:16
DATA_DELRISSA_EVENT
@ DATA_DELRISSA_EVENT
Definition
magisters_terrace.h:15
DATA_KAELTHAS_STATUES
@ DATA_KAELTHAS_STATUES
Definition
magisters_terrace.h:31
DATA_SELIN_EVENT
@ DATA_SELIN_EVENT
Definition
magisters_terrace.h:13
DATA_DELRISSA
@ DATA_DELRISSA
Definition
magisters_terrace.h:23
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript
Definition
instance_magisters_terrace.cpp:51
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::DelrissaDeathCount
uint32 DelrissaDeathCount
Definition
instance_magisters_terrace.cpp:277
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::GetData64
uint64 GetData64(uint32 identifier) const OVERRIDE
Definition
instance_magisters_terrace.cpp:237
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::OnCreatureCreate
void OnCreatureCreate(Creature *creature) OVERRIDE
Definition
instance_magisters_terrace.cpp:152
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::IsEncounterInProgress
bool IsEncounterInProgress() const OVERRIDE
Definition
instance_magisters_terrace.cpp:72
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::SetData
void SetData(uint32 identifier, uint32 data) OVERRIDE
Definition
instance_magisters_terrace.cpp:100
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::GetData
uint32 GetData(uint32 identifier) const OVERRIDE
Definition
instance_magisters_terrace.cpp:80
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::EscapeOrbGUID
uint64 EscapeOrbGUID
Definition
instance_magisters_terrace.cpp:289
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::felCristalIndex
uint8 felCristalIndex
Definition
instance_magisters_terrace.cpp:291
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::KaelDoorGUID
uint64 KaelDoorGUID
Definition
instance_magisters_terrace.cpp:287
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::SelinDoorGUID
uint64 SelinDoorGUID
Definition
instance_magisters_terrace.cpp:284
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::DelrissaGUID
uint64 DelrissaGUID
Definition
instance_magisters_terrace.cpp:282
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::StatuesState
uint32 StatuesState
Definition
instance_magisters_terrace.cpp:290
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::Encounter
uint32 Encounter[MAX_ENCOUNTER]
Definition
instance_magisters_terrace.cpp:276
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::DelrissaDoorGUID
uint64 DelrissaDoorGUID
Definition
instance_magisters_terrace.cpp:286
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::SetData64
void SetData64(uint32 identifier, uint64 value) OVERRIDE
Definition
instance_magisters_terrace.cpp:269
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::SelinEncounterDoorGUID
uint64 SelinEncounterDoorGUID
Definition
instance_magisters_terrace.cpp:285
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::GetSaveData
std::string GetSaveData() OVERRIDE
Definition
instance_magisters_terrace.cpp:199
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::VexallusDoorGUID
uint64 VexallusDoorGUID
Definition
instance_magisters_terrace.cpp:283
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::Load
void Load(const char *str) OVERRIDE
Definition
instance_magisters_terrace.cpp:210
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::KaelStatue
uint64 KaelStatue[2]
Definition
instance_magisters_terrace.cpp:288
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::SelinGUID
uint64 SelinGUID
Definition
instance_magisters_terrace.cpp:281
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::instance_magisters_terrace_InstanceMapScript
instance_magisters_terrace_InstanceMapScript(Map *map)
Definition
instance_magisters_terrace.cpp:52
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::OnGameObjectCreate
void OnGameObjectCreate(GameObject *go) OVERRIDE
Definition
instance_magisters_terrace.cpp:168
instance_magisters_terrace::instance_magisters_terrace_InstanceMapScript::FelCrystals
std::vector< uint64 > FelCrystals
Definition
instance_magisters_terrace.cpp:279
src
server
scripts
EasternKingdoms
MagistersTerrace
instance_magisters_terrace.cpp
Generated on
for Project SkyFire Core by
1.17.0