Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
instance_magtheridons_lair.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_Magtheridons_Lair
8
SD%Complete: 100
9
SDComment:
10
SDCategory: Hellfire Citadel, Magtheridon's lair
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
ScriptedCreature.h
"
15
#include "
InstanceScript.h
"
16
#include "
magtheridons_lair.h
"
17
18
enum
Spells
19
{
20
SPELL_SOUL_TRANSFER
= 30531,
// core bug, does not support target 7
21
SPELL_BLAZE_TARGET
= 30541,
// core bug, does not support target 7
22
};
23
24
#define CHAMBER_CENTER_X -15.14
25
#define CHAMBER_CENTER_Y 1.8
26
#define CHAMBER_CENTER_Z -0.4
27
28
#define MAX_ENCOUNTER 2
29
30
#define EMOTE_BONDS_WEAKEN "'s bonds begin to weaken!"
31
32
class
instance_magtheridons_lair
:
public
InstanceMapScript
33
{
34
public
:
35
instance_magtheridons_lair
()
36
:
InstanceMapScript
(
"instance_magtheridons_lair"
, 544)
37
{
38
}
39
40
struct
instance_magtheridons_lair_InstanceMapScript
:
public
InstanceScript
41
{
42
instance_magtheridons_lair_InstanceMapScript
(
Map
* map) :
InstanceScript
(map)
43
{
44
}
45
46
uint32
m_auiEncounter
[
MAX_ENCOUNTER
];
47
48
uint64
MagtheridonGUID
;
49
std::set<uint64>
ChannelerGUID
;
50
uint64
DoorGUID
;
51
std::set<uint64>
ColumnGUID
;
52
53
uint32
CageTimer
;
54
uint32
RespawnTimer
;
55
56
void
Initialize
()
OVERRIDE
57
{
58
memset(&
m_auiEncounter
, 0,
sizeof
(
m_auiEncounter
));
59
60
MagtheridonGUID
= 0;
61
ChannelerGUID
.clear();
62
DoorGUID
= 0;
63
ColumnGUID
.clear();
64
65
CageTimer
= 0;
66
RespawnTimer
= 0;
67
}
68
69
bool
IsEncounterInProgress
() const
OVERRIDE
70
{
71
for
(
uint8
i = 0; i <
MAX_ENCOUNTER
; ++i)
72
if
(
m_auiEncounter
[i] ==
IN_PROGRESS
)
73
return
true
;
74
75
return
false
;
76
}
77
78
void
OnCreatureCreate
(
Creature
* creature)
OVERRIDE
79
{
80
switch
(creature->GetEntry())
81
{
82
case
17257:
83
MagtheridonGUID
= creature->GetGUID();
84
break
;
85
case
17256:
86
ChannelerGUID
.insert(creature->GetGUID());
87
break
;
88
}
89
}
90
91
void
OnGameObjectCreate
(
GameObject
* go)
OVERRIDE
92
{
93
switch
(go->GetEntry())
94
{
95
case
181713:
96
go->SetUInt32Value(
GAMEOBJECT_FIELD_FLAGS
, 0);
97
break
;
98
case
183847:
99
DoorGUID
= go->GetGUID();
100
break
;
101
case
184653:
// hall
102
case
184634:
// six columns
103
case
184635:
104
case
184636:
105
case
184637:
106
case
184638:
107
case
184639:
108
ColumnGUID
.insert(go->GetGUID());
109
break
;
110
}
111
}
112
113
uint64
GetData64
(
uint32
type)
const
OVERRIDE
114
{
115
switch
(type)
116
{
117
case
DATA_MAGTHERIDON
:
118
return
MagtheridonGUID
;
119
}
120
return
0;
121
}
122
123
void
SetData
(
uint32
type,
uint32
data)
OVERRIDE
124
{
125
switch
(type)
126
{
127
case
DATA_MAGTHERIDON_EVENT
:
128
m_auiEncounter
[0] = data;
129
if
(data ==
NOT_STARTED
)
130
RespawnTimer
= 10000;
131
if
(data !=
IN_PROGRESS
)
132
HandleGameObject
(
DoorGUID
,
true
);
133
break
;
134
case
DATA_CHANNELER_EVENT
:
135
switch
(data)
136
{
137
case
NOT_STARTED
:
// Reset all channelers once one is reset.
138
if
(
m_auiEncounter
[1] !=
NOT_STARTED
)
139
{
140
m_auiEncounter
[1] =
NOT_STARTED
;
141
for
(std::set<uint64>::const_iterator i =
ChannelerGUID
.begin(); i !=
ChannelerGUID
.end(); ++i)
142
{
143
if
(
Creature
* Channeler =
instance
->GetCreature(*i))
144
{
145
if
(Channeler->IsAlive())
146
Channeler->AI()->EnterEvadeMode();
147
else
148
Channeler->Respawn();
149
}
150
}
151
CageTimer
= 0;
152
HandleGameObject
(
DoorGUID
,
true
);
153
}
154
break
;
155
case
IN_PROGRESS
:
// Event start.
156
if
(
m_auiEncounter
[1] !=
IN_PROGRESS
)
157
{
158
m_auiEncounter
[1] =
IN_PROGRESS
;
159
// Let all five channelers aggro.
160
for
(std::set<uint64>::const_iterator i =
ChannelerGUID
.begin(); i !=
ChannelerGUID
.end(); ++i)
161
{
162
Creature
* Channeler =
instance
->GetCreature(*i);
163
if
(Channeler && Channeler->
IsAlive
())
164
Channeler->
AI
()->
AttackStart
(Channeler->
SelectNearestTarget
(999));
165
}
166
// Release Magtheridon after two minutes.
167
Creature
* Magtheridon =
instance
->GetCreature(
MagtheridonGUID
);
168
if
(Magtheridon && Magtheridon->
IsAlive
())
169
{
170
Magtheridon->
MonsterTextEmote
(
EMOTE_BONDS_WEAKEN
, 0);
171
CageTimer
= 120000;
172
}
173
HandleGameObject
(
DoorGUID
,
false
);
174
}
175
break
;
176
case
DONE
:
// Add buff and check if all channelers are dead.
177
for
(std::set<uint64>::const_iterator i =
ChannelerGUID
.begin(); i !=
ChannelerGUID
.end(); ++i)
178
{
179
Creature
* Channeler =
instance
->GetCreature(*i);
180
if
(Channeler && Channeler->
IsAlive
())
181
{
182
//Channeler->CastSpell(Channeler, SPELL_SOUL_TRANSFER, true);
183
data =
IN_PROGRESS
;
184
break
;
185
}
186
}
187
break
;
188
}
189
m_auiEncounter
[1] = data;
190
break
;
191
case
DATA_COLLAPSE
:
192
// true - collapse / false - reset
193
for
(std::set<uint64>::const_iterator i =
ColumnGUID
.begin(); i !=
ColumnGUID
.end(); ++i)
194
DoUseDoorOrButton
(*i);
195
break
;
196
default
:
197
break
;
198
}
199
}
200
201
uint32
GetData
(
uint32
type)
const
OVERRIDE
202
{
203
if
(type ==
DATA_MAGTHERIDON_EVENT
)
204
return
m_auiEncounter
[0];
205
return
0;
206
}
207
208
void
Update
(
uint32
diff)
OVERRIDE
209
{
210
if
(
CageTimer
)
211
{
212
if
(
CageTimer
<= diff)
213
{
214
Creature
* Magtheridon =
instance
->GetCreature(
MagtheridonGUID
);
215
if
(Magtheridon && Magtheridon->
IsAlive
())
216
{
217
Magtheridon->
ClearUnitState
(
UNIT_STATE_STUNNED
);
218
Magtheridon->
AI
()->
AttackStart
(Magtheridon->
SelectNearestTarget
(999));
219
}
220
CageTimer
= 0;
221
}
else
CageTimer
-= diff;
222
}
223
224
if
(
RespawnTimer
)
225
{
226
if
(
RespawnTimer
<= diff)
227
{
228
for
(std::set<uint64>::const_iterator i =
ChannelerGUID
.begin(); i !=
ChannelerGUID
.end(); ++i)
229
{
230
if
(
Creature
* Channeler =
instance
->GetCreature(*i))
231
{
232
if
(Channeler->IsAlive())
233
Channeler->AI()->EnterEvadeMode();
234
else
235
Channeler->Respawn();
236
}
237
}
238
RespawnTimer
= 0;
239
}
else
RespawnTimer
-= diff;
240
}
241
}
242
};
243
244
InstanceScript
*
GetInstanceScript
(
InstanceMap
* map)
const
OVERRIDE
245
{
246
return
new
instance_magtheridons_lair_InstanceMapScript
(map);
247
}
248
};
249
250
void
AddSC_instance_magtheridons_lair
()
251
{
252
new
instance_magtheridons_lair
();
253
}
254
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
InstanceScript.h
IN_PROGRESS
@ IN_PROGRESS
Definition
InstanceScript.h:47
DONE
@ DONE
Definition
InstanceScript.h:49
NOT_STARTED
@ NOT_STARTED
Definition
InstanceScript.h:46
ScriptMgr.h
ScriptedCreature.h
UNIT_STATE_STUNNED
@ UNIT_STATE_STUNNED
Definition
Unit.h:515
GAMEOBJECT_FIELD_FLAGS
@ GAMEOBJECT_FIELD_FLAGS
Definition
UpdateFields.h:250
SPELL_SOUL_TRANSFER
@ SPELL_SOUL_TRANSFER
Definition
boss_magtheridon.cpp:68
SPELL_BLAZE_TARGET
@ SPELL_BLAZE_TARGET
Definition
boss_magtheridon.cpp:51
Creature
Definition
Creature.h:427
Creature::SelectNearestTarget
Unit * SelectNearestTarget(float dist=0, bool playerOnly=false) const
Definition
Creature.cpp:1752
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::HandleGameObject
void HandleGameObject(uint64 guid, bool open, GameObject *go=NULL)
Definition
InstanceScript.cpp:33
Map
Definition
Map.h:238
UnitAI::AttackStart
virtual void AttackStart(Unit *)
Definition
UnitAI.cpp:16
Unit::ClearUnitState
void ClearUnitState(uint32 f)
Definition
Unit.h:1489
Unit::IsAlive
bool IsAlive() const
Definition
Unit.h:2032
WorldObject::MonsterTextEmote
void MonsterTextEmote(const char *text, WorldObject const *target, bool IsBossEmote=false)
Definition
Object.cpp:2440
instance_magtheridons_lair
Definition
instance_magtheridons_lair.cpp:33
instance_magtheridons_lair::GetInstanceScript
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
Definition
instance_magtheridons_lair.cpp:244
instance_magtheridons_lair::instance_magtheridons_lair
instance_magtheridons_lair()
Definition
instance_magtheridons_lair.cpp:35
AddSC_instance_magtheridons_lair
void AddSC_instance_magtheridons_lair()
Definition
instance_magtheridons_lair.cpp:250
EMOTE_BONDS_WEAKEN
#define EMOTE_BONDS_WEAKEN
Definition
instance_magtheridons_lair.cpp:30
MAX_ENCOUNTER
#define MAX_ENCOUNTER
Definition
instance_magtheridons_lair.cpp:28
magtheridons_lair.h
DATA_CHANNELER_EVENT
@ DATA_CHANNELER_EVENT
Definition
magtheridons_lair.h:13
DATA_COLLAPSE
@ DATA_COLLAPSE
Definition
magtheridons_lair.h:14
DATA_MAGTHERIDON
@ DATA_MAGTHERIDON
Definition
magtheridons_lair.h:12
DATA_MAGTHERIDON_EVENT
@ DATA_MAGTHERIDON_EVENT
Definition
magtheridons_lair.h:11
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript
Definition
instance_magtheridons_lair.cpp:41
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::instance_magtheridons_lair_InstanceMapScript
instance_magtheridons_lair_InstanceMapScript(Map *map)
Definition
instance_magtheridons_lair.cpp:42
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::GetData
uint32 GetData(uint32 type) const OVERRIDE
Definition
instance_magtheridons_lair.cpp:201
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::GetData64
uint64 GetData64(uint32 type) const OVERRIDE
Definition
instance_magtheridons_lair.cpp:113
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::DoorGUID
uint64 DoorGUID
Definition
instance_magtheridons_lair.cpp:50
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::m_auiEncounter
uint32 m_auiEncounter[MAX_ENCOUNTER]
Definition
instance_magtheridons_lair.cpp:46
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::MagtheridonGUID
uint64 MagtheridonGUID
Definition
instance_magtheridons_lair.cpp:48
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::ColumnGUID
std::set< uint64 > ColumnGUID
Definition
instance_magtheridons_lair.cpp:51
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::ChannelerGUID
std::set< uint64 > ChannelerGUID
Definition
instance_magtheridons_lair.cpp:49
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::CageTimer
uint32 CageTimer
Definition
instance_magtheridons_lair.cpp:53
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::SetData
void SetData(uint32 type, uint32 data) OVERRIDE
Definition
instance_magtheridons_lair.cpp:123
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::OnGameObjectCreate
void OnGameObjectCreate(GameObject *go) OVERRIDE
Definition
instance_magtheridons_lair.cpp:91
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::RespawnTimer
uint32 RespawnTimer
Definition
instance_magtheridons_lair.cpp:54
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::Update
void Update(uint32 diff) OVERRIDE
Definition
instance_magtheridons_lair.cpp:208
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::Initialize
void Initialize() OVERRIDE
Definition
instance_magtheridons_lair.cpp:56
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::IsEncounterInProgress
bool IsEncounterInProgress() const OVERRIDE
Definition
instance_magtheridons_lair.cpp:69
instance_magtheridons_lair::instance_magtheridons_lair_InstanceMapScript::OnCreatureCreate
void OnCreatureCreate(Creature *creature) OVERRIDE
Definition
instance_magtheridons_lair.cpp:78
src
server
scripts
Outland
HellfireCitadel
MagtheridonsLair
instance_magtheridons_lair.cpp
Generated on
for Project SkyFire Core by
1.17.0