Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
instance_shadowfang_keep.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_Shadowfang_Keep
8
SD%Complete: 90
9
SDComment:
10
SDCategory: Shadowfang Keep
11
EndScriptData */
12
13
#include "
ScriptedCreature.h
"
14
#include "
ScriptMgr.h
"
15
#include "
InstanceScript.h
"
16
#include "
shadowfang_keep.h
"
17
#include "
TemporarySummon.h
"
18
19
#define MAX_ENCOUNTER 4
20
21
enum
Yells
22
{
23
SAY_BOSS_DIE_AD
= 4,
24
SAY_BOSS_DIE_AS
= 3,
25
SAY_ARCHMAGE
= 0
26
};
27
28
enum
Creatures
29
{
30
NPC_ASH
= 3850,
31
NPC_ADA
= 3849,
32
NPC_ARCHMAGE_ARUGAL
= 4275,
33
NPC_ARUGAL_VOIDWALKER
= 4627
34
};
35
36
enum
GameObjects
37
{
38
GO_COURTYARD_DOOR
= 18895,
//door to open when talking to NPC's
39
GO_SORCERER_DOOR
= 18972,
//door to open when Fenrus the Devourer
40
GO_ARUGAL_DOOR
= 18971
//door to open when Wolf Master Nandos
41
};
42
43
enum
Spells
44
{
45
SPELL_ASHCROMBE_TELEPORT
= 15742
46
};
47
48
const
Position
SpawnLocation
[] =
49
{
50
{-148.199f, 2165.647f, 128.448f, 1.026f},
51
{-153.110f, 2168.620f, 128.448f, 1.026f},
52
{-145.905f, 2180.520f, 128.448f, 4.183f},
53
{-140.794f, 2178.037f, 128.448f, 4.090f},
54
{-138.640f, 2170.159f, 136.577f, 2.737f}
55
};
56
class
instance_shadowfang_keep
:
public
InstanceMapScript
57
{
58
public
:
59
instance_shadowfang_keep
() :
InstanceMapScript
(
"instance_shadowfang_keep"
, 33) { }
60
61
InstanceScript
*
GetInstanceScript
(
InstanceMap
* map)
const
OVERRIDE
62
{
63
return
new
instance_shadowfang_keep_InstanceMapScript
(map);
64
}
65
66
struct
instance_shadowfang_keep_InstanceMapScript
:
public
InstanceScript
67
{
68
instance_shadowfang_keep_InstanceMapScript
(
Map
* map) :
InstanceScript
(map) { }
69
70
uint32
m_auiEncounter
[
MAX_ENCOUNTER
];
71
std::string
str_data
;
72
73
uint64
uiAshGUID
;
74
uint64
uiAdaGUID
;
75
uint64
uiArchmageArugalGUID
;
76
77
uint64
DoorCourtyardGUID
;
78
uint64
DoorSorcererGUID
;
79
uint64
DoorArugalGUID
;
80
81
uint8
uiPhase
;
82
uint16
uiTimer
;
83
84
void
Initialize
()
OVERRIDE
85
{
86
memset(&
m_auiEncounter
, 0,
sizeof
(
m_auiEncounter
));
87
88
uiAshGUID
= 0;
89
uiAdaGUID
= 0;
90
uiArchmageArugalGUID
= 0;
91
92
DoorCourtyardGUID
= 0;
93
DoorSorcererGUID
= 0;
94
DoorArugalGUID
= 0;
95
96
uiPhase
= 0;
97
uiTimer
= 0;
98
}
99
100
void
OnCreatureCreate
(
Creature
* creature)
OVERRIDE
101
{
102
switch
(creature->GetEntry())
103
{
104
case
NPC_ASH
:
uiAshGUID
= creature->GetGUID();
break
;
105
case
NPC_ADA
:
uiAdaGUID
= creature->GetGUID();
break
;
106
case
NPC_ARCHMAGE_ARUGAL
:
uiArchmageArugalGUID
= creature->GetGUID();
break
;
107
}
108
}
109
110
void
OnGameObjectCreate
(
GameObject
* go)
OVERRIDE
111
{
112
switch
(go->GetEntry())
113
{
114
case
GO_COURTYARD_DOOR
:
115
DoorCourtyardGUID
= go->GetGUID();
116
if
(
m_auiEncounter
[0] ==
DONE
)
117
HandleGameObject
(0,
true
, go);
118
break
;
119
case
GO_SORCERER_DOOR
:
120
DoorSorcererGUID
= go->GetGUID();
121
if
(
m_auiEncounter
[2] ==
DONE
)
122
HandleGameObject
(0,
true
, go);
123
break
;
124
case
GO_ARUGAL_DOOR
:
125
DoorArugalGUID
= go->GetGUID();
126
if
(
m_auiEncounter
[3] ==
DONE
)
127
HandleGameObject
(0,
true
, go);
128
break
;
129
}
130
}
131
132
void
DoSpeech
()
133
{
134
Creature
* pAda =
instance
->GetCreature(
uiAdaGUID
);
135
Creature
* pAsh =
instance
->GetCreature(
uiAshGUID
);
136
137
if
(pAda && pAda->
IsAlive
() && pAsh && pAsh->
IsAlive
())
138
{
139
pAda->
AI
()->
Talk
(
SAY_BOSS_DIE_AD
);
140
pAsh->
AI
()->
Talk
(
SAY_BOSS_DIE_AS
);
141
}
142
}
143
144
void
SetData
(
uint32
type,
uint32
data)
OVERRIDE
145
{
146
switch
(type)
147
{
148
case
TYPE_FREE_NPC
:
149
if
(data ==
DONE
)
150
DoUseDoorOrButton
(
DoorCourtyardGUID
);
151
m_auiEncounter
[0] = data;
152
break
;
153
case
TYPE_RETHILGORE
:
154
if
(data ==
DONE
)
155
DoSpeech
();
156
m_auiEncounter
[1] = data;
157
break
;
158
case
TYPE_FENRUS
:
159
switch
(data)
160
{
161
case
DONE
:
162
uiTimer
= 1000;
163
uiPhase
= 1;
164
break
;
165
case
7:
166
DoUseDoorOrButton
(
DoorSorcererGUID
);
167
break
;
168
}
169
m_auiEncounter
[2] = data;
170
break
;
171
case
TYPE_NANDOS
:
172
if
(data ==
DONE
)
173
DoUseDoorOrButton
(
DoorArugalGUID
);
174
m_auiEncounter
[3] = data;
175
break
;
176
}
177
178
if
(data ==
DONE
)
179
{
180
OUT_SAVE_INST_DATA
;
181
182
std::ostringstream saveStream;
183
saveStream <<
m_auiEncounter
[0] <<
' '
<<
m_auiEncounter
[1] <<
' '
<<
m_auiEncounter
[2] <<
' '
<<
m_auiEncounter
[3];
184
185
str_data
= saveStream.str();
186
187
SaveToDB
();
188
OUT_SAVE_INST_DATA_COMPLETE
;
189
}
190
}
191
192
uint32
GetData
(
uint32
type)
const
OVERRIDE
193
{
194
switch
(type)
195
{
196
case
TYPE_FREE_NPC
:
197
return
m_auiEncounter
[0];
198
case
TYPE_RETHILGORE
:
199
return
m_auiEncounter
[1];
200
case
TYPE_FENRUS
:
201
return
m_auiEncounter
[2];
202
case
TYPE_NANDOS
:
203
return
m_auiEncounter
[3];
204
}
205
return
0;
206
}
207
208
std::string
GetSaveData
()
OVERRIDE
209
{
210
return
str_data
;
211
}
212
213
void
Load
(
const
char
* in)
OVERRIDE
214
{
215
if
(!in)
216
{
217
OUT_LOAD_INST_DATA_FAIL
;
218
return
;
219
}
220
221
OUT_LOAD_INST_DATA
(in);
222
223
std::istringstream loadStream(in);
224
loadStream >>
m_auiEncounter
[0] >>
m_auiEncounter
[1] >>
m_auiEncounter
[2] >>
m_auiEncounter
[3];
225
226
for
(
uint8
i = 0; i <
MAX_ENCOUNTER
; ++i)
227
{
228
if
(
m_auiEncounter
[i] ==
IN_PROGRESS
)
229
m_auiEncounter
[i] =
NOT_STARTED
;
230
}
231
232
OUT_LOAD_INST_DATA_COMPLETE
;
233
}
234
235
void
Update
(
uint32
uiDiff)
236
{
237
if
(
GetData
(
TYPE_FENRUS
) !=
DONE
)
238
return
;
239
240
Creature
* pArchmage =
instance
->GetCreature(
uiArchmageArugalGUID
);
241
242
if
(!pArchmage || !pArchmage->
IsAlive
())
243
return
;
244
245
if
(
uiPhase
)
246
{
247
if
(
uiTimer
<= uiDiff)
248
{
249
switch
(
uiPhase
)
250
{
251
case
1:
252
{
253
Creature
* summon = pArchmage->
SummonCreature
(pArchmage->
GetEntry
(),
SpawnLocation
[4],
TEMPSUMMON_TIMED_DESPAWN
, 10000);
254
summon->
SetFlag
(
UNIT_FIELD_FLAGS
,
UNIT_FLAG_IMMUNE_TO_PC
);
255
summon->
SetReactState
(
REACT_DEFENSIVE
);
256
summon->
CastSpell
(summon,
SPELL_ASHCROMBE_TELEPORT
,
true
);
257
summon->
AI
()->
Talk
(
SAY_ARCHMAGE
);
258
uiTimer
= 2000;
259
uiPhase
= 2;
260
break
;
261
}
262
case
2:
263
{
264
pArchmage->
SummonCreature
(
NPC_ARUGAL_VOIDWALKER
,
SpawnLocation
[0],
TEMPSUMMON_CORPSE_TIMED_DESPAWN
, 60000);
265
pArchmage->
SummonCreature
(
NPC_ARUGAL_VOIDWALKER
,
SpawnLocation
[1],
TEMPSUMMON_CORPSE_TIMED_DESPAWN
, 60000);
266
pArchmage->
SummonCreature
(
NPC_ARUGAL_VOIDWALKER
,
SpawnLocation
[2],
TEMPSUMMON_CORPSE_TIMED_DESPAWN
, 60000);
267
pArchmage->
SummonCreature
(
NPC_ARUGAL_VOIDWALKER
,
SpawnLocation
[3],
TEMPSUMMON_CORPSE_TIMED_DESPAWN
, 60000);
268
uiPhase
= 0;
269
break
;
270
}
271
272
}
273
}
else
uiTimer
-= uiDiff;
274
}
275
}
276
};
277
278
};
279
280
void
AddSC_instance_shadowfang_keep
()
281
{
282
new
instance_shadowfang_keep
();
283
}
Spells
Spells
Definition
BattlegroundIC.h:645
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
uint16
std::uint16_t uint16
Definition
Define.h:78
TEMPSUMMON_TIMED_DESPAWN
static constexpr TempSummonType TEMPSUMMON_TIMED_DESPAWN
Definition
ElunaCompatibility.h:27
TEMPSUMMON_CORPSE_TIMED_DESPAWN
static constexpr TempSummonType TEMPSUMMON_CORPSE_TIMED_DESPAWN
Definition
ElunaCompatibility.h:30
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
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
ScriptMgr.h
ScriptedCreature.h
TemporarySummon.h
REACT_DEFENSIVE
@ REACT_DEFENSIVE
Definition
Unit.h:1157
UNIT_FLAG_IMMUNE_TO_PC
@ UNIT_FLAG_IMMUNE_TO_PC
Definition
Unit.h:633
UNIT_FIELD_FLAGS
@ UNIT_FIELD_FLAGS
Definition
UpdateFields.h:82
Creatures
Creatures
Definition
alterac_valley.cpp:28
CreatureAI::Talk
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
Definition
CreatureAI.cpp:28
Creature
Definition
Creature.h:427
Creature::SetReactState
void SetReactState(ReactStates st)
Definition
Creature.h:460
Creature::AI
CreatureAI * AI() const
Definition
Creature.h:483
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::DoUseDoorOrButton
void DoUseDoorOrButton(uint64 guid, uint32 withRestoreTime=0, bool useAlternativeState=false)
Definition
InstanceScript.cpp:247
InstanceScript::instance
Map * instance
Definition
InstanceScript.h:129
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
Object::SetFlag
void SetFlag(uint16 index, uint32 newFlag)
Definition
Object.cpp:1261
Object::GetEntry
uint32 GetEntry() const
Definition
Object.h:125
Unit::CastSpell
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
Definition
UnitCombat.cpp:324
Unit::IsAlive
bool IsAlive() const
Definition
Unit.h:2032
WorldObject::SummonCreature
TempSummon * SummonCreature(uint32 id, Position const &pos, TempSummonType spwtype=TempSummonType::TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0) const
Definition
Object.cpp:2703
instance_shadowfang_keep
Definition
instance_shadowfang_keep.cpp:57
instance_shadowfang_keep::GetInstanceScript
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
Definition
instance_shadowfang_keep.cpp:61
instance_shadowfang_keep::instance_shadowfang_keep
instance_shadowfang_keep()
Definition
instance_shadowfang_keep.cpp:59
GameObjects
GameObjects
Definition
instance_blackrock_depths.cpp:30
GO_COURTYARD_DOOR
@ GO_COURTYARD_DOOR
Definition
instance_shadowfang_keep.cpp:38
GO_SORCERER_DOOR
@ GO_SORCERER_DOOR
Definition
instance_shadowfang_keep.cpp:39
GO_ARUGAL_DOOR
@ GO_ARUGAL_DOOR
Definition
instance_shadowfang_keep.cpp:40
SpawnLocation
const Position SpawnLocation[]
Definition
instance_shadowfang_keep.cpp:48
NPC_ADA
@ NPC_ADA
Definition
instance_shadowfang_keep.cpp:31
NPC_ARCHMAGE_ARUGAL
@ NPC_ARCHMAGE_ARUGAL
Definition
instance_shadowfang_keep.cpp:32
NPC_ARUGAL_VOIDWALKER
@ NPC_ARUGAL_VOIDWALKER
Definition
instance_shadowfang_keep.cpp:33
NPC_ASH
@ NPC_ASH
Definition
instance_shadowfang_keep.cpp:30
SAY_ARCHMAGE
@ SAY_ARCHMAGE
Definition
instance_shadowfang_keep.cpp:25
SAY_BOSS_DIE_AD
@ SAY_BOSS_DIE_AD
Definition
instance_shadowfang_keep.cpp:23
SAY_BOSS_DIE_AS
@ SAY_BOSS_DIE_AS
Definition
instance_shadowfang_keep.cpp:24
SPELL_ASHCROMBE_TELEPORT
@ SPELL_ASHCROMBE_TELEPORT
Definition
instance_shadowfang_keep.cpp:45
AddSC_instance_shadowfang_keep
void AddSC_instance_shadowfang_keep()
Definition
instance_shadowfang_keep.cpp:280
MAX_ENCOUNTER
#define MAX_ENCOUNTER
Definition
instance_shadowfang_keep.cpp:19
shadowfang_keep.h
TYPE_NANDOS
@ TYPE_NANDOS
Definition
shadowfang_keep.h:14
TYPE_FENRUS
@ TYPE_FENRUS
Definition
shadowfang_keep.h:13
TYPE_RETHILGORE
@ TYPE_RETHILGORE
Definition
shadowfang_keep.h:12
TYPE_FREE_NPC
@ TYPE_FREE_NPC
Definition
shadowfang_keep.h:11
Position
Definition
Object.h:274
Yells
Definition
boss_illidan.cpp:256
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript
Definition
instance_shadowfang_keep.cpp:67
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::GetSaveData
std::string GetSaveData() OVERRIDE
Definition
instance_shadowfang_keep.cpp:208
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::DoorCourtyardGUID
uint64 DoorCourtyardGUID
Definition
instance_shadowfang_keep.cpp:77
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::Initialize
void Initialize() OVERRIDE
Definition
instance_shadowfang_keep.cpp:84
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::uiAshGUID
uint64 uiAshGUID
Definition
instance_shadowfang_keep.cpp:73
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::m_auiEncounter
uint32 m_auiEncounter[MAX_ENCOUNTER]
Definition
instance_shadowfang_keep.cpp:70
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::Update
void Update(uint32 uiDiff)
Definition
instance_shadowfang_keep.cpp:235
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::uiArchmageArugalGUID
uint64 uiArchmageArugalGUID
Definition
instance_shadowfang_keep.cpp:75
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::uiAdaGUID
uint64 uiAdaGUID
Definition
instance_shadowfang_keep.cpp:74
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::SetData
void SetData(uint32 type, uint32 data) OVERRIDE
Definition
instance_shadowfang_keep.cpp:144
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::DoorSorcererGUID
uint64 DoorSorcererGUID
Definition
instance_shadowfang_keep.cpp:78
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::OnGameObjectCreate
void OnGameObjectCreate(GameObject *go) OVERRIDE
Definition
instance_shadowfang_keep.cpp:110
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::instance_shadowfang_keep_InstanceMapScript
instance_shadowfang_keep_InstanceMapScript(Map *map)
Definition
instance_shadowfang_keep.cpp:68
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::GetData
uint32 GetData(uint32 type) const OVERRIDE
Definition
instance_shadowfang_keep.cpp:192
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::Load
void Load(const char *in) OVERRIDE
Definition
instance_shadowfang_keep.cpp:213
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::DoorArugalGUID
uint64 DoorArugalGUID
Definition
instance_shadowfang_keep.cpp:79
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::uiTimer
uint16 uiTimer
Definition
instance_shadowfang_keep.cpp:82
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::OnCreatureCreate
void OnCreatureCreate(Creature *creature) OVERRIDE
Definition
instance_shadowfang_keep.cpp:100
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::str_data
std::string str_data
Definition
instance_shadowfang_keep.cpp:71
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::DoSpeech
void DoSpeech()
Definition
instance_shadowfang_keep.cpp:132
instance_shadowfang_keep::instance_shadowfang_keep_InstanceMapScript::uiPhase
uint8 uiPhase
Definition
instance_shadowfang_keep.cpp:81
src
server
scripts
EasternKingdoms
ShadowfangKeep
instance_shadowfang_keep.cpp
Generated on
for Project SkyFire Core by
1.17.0