Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
instance_deadmines.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_Deadmines
8
SD%Complete: 100
9
SDComment:
10
SDCategory: Deadmines
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
InstanceScript.h
"
15
#include "
deadmines.h
"
16
#include "
TemporarySummon.h
"
17
#include "
WorldPacket.h
"
18
#include "
Opcodes.h
"
19
20
enum
Sounds
21
{
22
SOUND_CANNONFIRE
= 1400,
23
SOUND_DESTROYDOOR
= 3079,
24
SOUND_MR_SMITE_ALARM1
= 5775,
25
SOUND_MR_SMITE_ALARM2
= 5777
26
};
27
28
#define SAY_MR_SMITE_ALARM1 "You there, check out that noise!"
29
#define SAY_MR_SMITE_ALARM2 "We're under attack! A vast, ye swabs! Repel the invaders!"
30
31
enum
Misc
32
{
33
DATA_CANNON_BLAST_TIMER
= 3000,
34
DATA_PIRATES_DELAY_TIMER
= 1000
35
};
36
37
class
instance_deadmines
:
public
InstanceMapScript
38
{
39
public
:
40
instance_deadmines
()
41
:
InstanceMapScript
(
"instance_deadmines"
, 36)
42
{
43
}
44
45
struct
instance_deadmines_InstanceMapScript
:
public
InstanceScript
46
{
47
instance_deadmines_InstanceMapScript
(
Map
* map) :
InstanceScript
(map) { }
48
49
uint64
FactoryDoorGUID
;
50
uint64
IronCladDoorGUID
;
51
uint64
DefiasCannonGUID
;
52
uint64
DoorLeverGUID
;
53
uint64
DefiasPirate1GUID
;
54
uint64
DefiasPirate2GUID
;
55
uint64
DefiasCompanionGUID
;
56
57
uint32
State
;
58
uint32
CannonBlast_Timer
;
59
uint32
PiratesDelay_Timer
;
60
uint64
uiSmiteChestGUID
;
61
62
void
Initialize
()
OVERRIDE
63
{
64
FactoryDoorGUID
= 0;
65
IronCladDoorGUID
= 0;
66
DefiasCannonGUID
= 0;
67
DoorLeverGUID
= 0;
68
DefiasPirate1GUID
= 0;
69
DefiasPirate2GUID
= 0;
70
DefiasCompanionGUID
= 0;
71
72
State
=
CANNON_NOT_USED
;
73
uiSmiteChestGUID
= 0;
74
}
75
76
virtual
void
Update
(
uint32
diff)
OVERRIDE
77
{
78
if
(!
IronCladDoorGUID
|| !
DefiasCannonGUID
|| !
DoorLeverGUID
)
79
return
;
80
81
GameObject
* pIronCladDoor =
instance
->GetGameObject(
IronCladDoorGUID
);
82
if
(!pIronCladDoor)
83
return
;
84
85
switch
(
State
)
86
{
87
case
CANNON_GUNPOWDER_USED
:
88
CannonBlast_Timer
=
DATA_CANNON_BLAST_TIMER
;
89
// it's a hack - Mr. Smite should do that but his too far away
90
pIronCladDoor->
SetName
(
"Mr. Smite"
);
91
pIronCladDoor->
MonsterYell
(
SAY_MR_SMITE_ALARM1
,
LANG_UNIVERSAL
, 0);
92
DoPlaySound
(pIronCladDoor,
SOUND_MR_SMITE_ALARM1
);
93
State
=
CANNON_BLAST_INITIATED
;
94
break
;
95
case
CANNON_BLAST_INITIATED
:
96
PiratesDelay_Timer
=
DATA_PIRATES_DELAY_TIMER
;
97
if
(
CannonBlast_Timer
<= diff)
98
{
99
SummonCreatures
();
100
ShootCannon
();
101
BlastOutDoor
();
102
LeverStucked
();
103
pIronCladDoor->
MonsterYell
(
SAY_MR_SMITE_ALARM2
,
LANG_UNIVERSAL
, 0);
104
DoPlaySound
(pIronCladDoor,
SOUND_MR_SMITE_ALARM2
);
105
State
=
PIRATES_ATTACK
;
106
}
else
CannonBlast_Timer
-= diff;
107
break
;
108
case
PIRATES_ATTACK
:
109
if
(
PiratesDelay_Timer
<= diff)
110
{
111
MoveCreaturesInside
();
112
State
=
EVENT_DONE
;
113
}
else
PiratesDelay_Timer
-= diff;
114
break
;
115
}
116
}
117
118
void
SummonCreatures
()
119
{
120
if
(
GameObject
* pIronCladDoor =
instance
->GetGameObject(
IronCladDoorGUID
))
121
{
122
Creature
* DefiasPirate1 = pIronCladDoor->
SummonCreature
(657, pIronCladDoor->GetPositionX() - 2, pIronCladDoor->GetPositionY()-7, pIronCladDoor->GetPositionZ(), 0,
TEMPSUMMON_CORPSE_TIMED_DESPAWN
, 3000);
123
Creature
* DefiasPirate2 = pIronCladDoor->
SummonCreature
(657, pIronCladDoor->GetPositionX() + 3, pIronCladDoor->GetPositionY()-6, pIronCladDoor->GetPositionZ(), 0,
TEMPSUMMON_CORPSE_TIMED_DESPAWN
, 3000);
124
Creature
* DefiasCompanion = pIronCladDoor->
SummonCreature
(3450, pIronCladDoor->GetPositionX() + 2, pIronCladDoor->GetPositionY()-6, pIronCladDoor->GetPositionZ(), 0,
TEMPSUMMON_CORPSE_TIMED_DESPAWN
, 3000);
125
126
DefiasPirate1GUID
= DefiasPirate1->
GetGUID
();
127
DefiasPirate2GUID
= DefiasPirate2->
GetGUID
();
128
DefiasCompanionGUID
= DefiasCompanion->
GetGUID
();
129
}
130
}
131
132
void
MoveCreaturesInside
()
133
{
134
if
(!
DefiasPirate1GUID
|| !
DefiasPirate2GUID
|| !
DefiasCompanionGUID
)
135
return
;
136
137
Creature
* pDefiasPirate1 =
instance
->GetCreature(
DefiasPirate1GUID
);
138
Creature
* pDefiasPirate2 =
instance
->GetCreature(
DefiasPirate2GUID
);
139
Creature
* pDefiasCompanion =
instance
->GetCreature(
DefiasCompanionGUID
);
140
if
(!pDefiasPirate1 || !pDefiasPirate2 || !pDefiasCompanion)
141
return
;
142
143
MoveCreatureInside
(pDefiasPirate1);
144
MoveCreatureInside
(pDefiasPirate2);
145
MoveCreatureInside
(pDefiasCompanion);
146
}
147
148
void
MoveCreatureInside
(
Creature
* creature)
149
{
150
creature->
SetWalk
(
false
);
151
creature->
GetMotionMaster
()->
MovePoint
(0, -102.7f, -655.9f, creature->
GetPositionZ
());
152
}
153
154
void
ShootCannon
()
155
{
156
if
(
GameObject
* pDefiasCannon =
instance
->GetGameObject(
DefiasCannonGUID
))
157
{
158
pDefiasCannon->SetGoState(
GO_STATE_ACTIVE
);
159
DoPlaySound
(pDefiasCannon,
SOUND_CANNONFIRE
);
160
}
161
}
162
163
void
BlastOutDoor
()
164
{
165
if
(
GameObject
* pIronCladDoor =
instance
->GetGameObject(
IronCladDoorGUID
))
166
{
167
pIronCladDoor->SetGoState(
GO_STATE_ACTIVE_ALTERNATIVE
);
168
DoPlaySound
(pIronCladDoor,
SOUND_DESTROYDOOR
);
169
}
170
}
171
172
void
LeverStucked
()
173
{
174
if
(
GameObject
* pDoorLever =
instance
->GetGameObject(
DoorLeverGUID
))
175
pDoorLever->SetUInt32Value(
GAMEOBJECT_FIELD_FLAGS
, 4);
176
}
177
178
void
OnGameObjectCreate
(
GameObject
* go)
OVERRIDE
179
{
180
switch
(go->GetEntry())
181
{
182
case
GO_FACTORY_DOOR
:
FactoryDoorGUID
= go->GetGUID();
break
;
183
case
GO_IRONCLAD_DOOR
:
IronCladDoorGUID
= go->GetGUID();
break
;
184
case
GO_DEFIAS_CANNON
:
DefiasCannonGUID
= go->GetGUID();
break
;
185
case
GO_DOOR_LEVER
:
DoorLeverGUID
= go->GetGUID();
break
;
186
case
GO_MR_SMITE_CHEST
:
uiSmiteChestGUID
= go->GetGUID();
break
;
187
}
188
}
189
190
void
SetData
(
uint32
type,
uint32
data)
OVERRIDE
191
{
192
switch
(type)
193
{
194
case
EVENT_STATE
:
195
if
(
DefiasCannonGUID
&&
IronCladDoorGUID
)
196
State
=data;
197
break
;
198
case
EVENT_RHAHKZOR
:
199
if
(data ==
DONE
)
200
if
(
GameObject
* go =
instance
->GetGameObject(
FactoryDoorGUID
))
201
go->SetGoState(
GO_STATE_ACTIVE
);
202
break
;
203
}
204
}
205
206
uint32
GetData
(
uint32
type)
const
OVERRIDE
207
{
208
switch
(type)
209
{
210
case
EVENT_STATE
:
211
return
State
;
212
}
213
214
return
0;
215
}
216
217
uint64
GetData64
(
uint32
data)
const
OVERRIDE
218
{
219
switch
(data)
220
{
221
case
DATA_SMITE_CHEST
:
222
return
uiSmiteChestGUID
;
223
}
224
225
return
0;
226
}
227
228
void
DoPlaySound
(
GameObject
* unit,
uint32
sound)
229
{
230
ObjectGuid
guid = unit->
GetGUID
();
231
232
WorldPacket
data(
SMSG_PLAY_SOUND
, 4 + 9);
233
data.
WriteBit
(guid[2]);
234
data.
WriteBit
(guid[3]);
235
data.
WriteBit
(guid[7]);
236
data.
WriteBit
(guid[6]);
237
data.
WriteBit
(guid[0]);
238
data.
WriteBit
(guid[5]);
239
data.
WriteBit
(guid[4]);
240
data.
WriteBit
(guid[1]);
241
data <<
uint32
(sound);
242
data.
WriteByteSeq
(guid[3]);
243
data.
WriteByteSeq
(guid[2]);
244
data.
WriteByteSeq
(guid[4]);
245
data.
WriteByteSeq
(guid[7]);
246
data.
WriteByteSeq
(guid[5]);
247
data.
WriteByteSeq
(guid[0]);
248
data.
WriteByteSeq
(guid[6]);
249
data.
WriteByteSeq
(guid[1]);
250
unit->
SendMessageToSet
(&data,
false
);
251
}
252
};
253
254
InstanceScript
*
GetInstanceScript
(
InstanceMap
* map)
const
OVERRIDE
255
{
256
return
new
instance_deadmines_InstanceMapScript
(map);
257
}
258
};
259
260
void
AddSC_instance_deadmines
()
261
{
262
new
instance_deadmines
();
263
}
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
GO_STATE_ACTIVE_ALTERNATIVE
static constexpr GOState GO_STATE_ACTIVE_ALTERNATIVE
Definition
ElunaCompatibility.h:36
GO_STATE_ACTIVE
static constexpr GOState GO_STATE_ACTIVE
Definition
ElunaCompatibility.h:34
TEMPSUMMON_CORPSE_TIMED_DESPAWN
static constexpr TempSummonType TEMPSUMMON_CORPSE_TIMED_DESPAWN
Definition
ElunaCompatibility.h:30
InstanceScript.h
DONE
@ DONE
Definition
InstanceScript.h:49
Opcodes.h
ScriptMgr.h
Language::LANG_UNIVERSAL
@ LANG_UNIVERSAL
Definition
SharedDefines.h:839
TemporarySummon.h
GAMEOBJECT_FIELD_FLAGS
@ GAMEOBJECT_FIELD_FLAGS
Definition
UpdateFields.h:250
WorldPacket.h
Misc
Misc
Definition
boss_occuthar.cpp:37
ByteBuffer::WriteBit
bool WriteBit(uint32 bit)
Definition
ByteBuffer.h:164
ByteBuffer::WriteByteSeq
void WriteByteSeq(uint8 b)
Definition
ByteBuffer.h:227
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::instance
Map * instance
Definition
InstanceScript.h:129
Map
Definition
Map.h:238
MotionMaster::MovePoint
void MovePoint(uint32 id, Position const &pos, bool generatePath=true)
Definition
MotionMaster.h:136
Object::GetGUID
uint64 GetGUID() const
Definition
Object.h:119
Unit::GetMotionMaster
MotionMaster * GetMotionMaster()
Definition
Unit.h:2605
Unit::SetWalk
bool SetWalk(bool enable)
Definition
Unit.cpp:9137
WorldObject::SetName
void SetName(std::string const &newname)
Definition
Object.h:665
WorldObject::MonsterYell
void MonsterYell(const char *text, Language language, WorldObject const *target)
Definition
Object.cpp:2411
WorldObject::SendMessageToSet
virtual void SendMessageToSet(WorldPacket *data, bool self)
Definition
Object.cpp:2485
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
WorldPacket
Definition
WorldPacket.h:16
instance_deadmines
Definition
instance_deadmines.cpp:38
instance_deadmines::instance_deadmines
instance_deadmines()
Definition
instance_deadmines.cpp:40
instance_deadmines::GetInstanceScript
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
Definition
instance_deadmines.cpp:254
deadmines.h
GO_MR_SMITE_CHEST
@ GO_MR_SMITE_CHEST
Definition
deadmines.h:35
GO_DOOR_LEVER
@ GO_DOOR_LEVER
Definition
deadmines.h:34
GO_FACTORY_DOOR
@ GO_FACTORY_DOOR
Definition
deadmines.h:31
GO_IRONCLAD_DOOR
@ GO_IRONCLAD_DOOR
Definition
deadmines.h:32
GO_DEFIAS_CANNON
@ GO_DEFIAS_CANNON
Definition
deadmines.h:33
DATA_SMITE_CHEST
@ DATA_SMITE_CHEST
Definition
deadmines.h:26
PIRATES_ATTACK
@ PIRATES_ATTACK
Definition
deadmines.h:14
CANNON_NOT_USED
@ CANNON_NOT_USED
Definition
deadmines.h:11
EVENT_DONE
@ EVENT_DONE
Definition
deadmines.h:15
CANNON_BLAST_INITIATED
@ CANNON_BLAST_INITIATED
Definition
deadmines.h:13
CANNON_GUNPOWDER_USED
@ CANNON_GUNPOWDER_USED
Definition
deadmines.h:12
EVENT_RHAHKZOR
@ EVENT_RHAHKZOR
Definition
deadmines.h:21
SMSG_PLAY_SOUND
@ SMSG_PLAY_SOUND
Definition
Opcodes.h:883
DATA_CANNON_BLAST_TIMER
@ DATA_CANNON_BLAST_TIMER
Definition
instance_deadmines.cpp:33
DATA_PIRATES_DELAY_TIMER
@ DATA_PIRATES_DELAY_TIMER
Definition
instance_deadmines.cpp:34
Sounds
Sounds
Definition
instance_deadmines.cpp:21
SOUND_MR_SMITE_ALARM2
@ SOUND_MR_SMITE_ALARM2
Definition
instance_deadmines.cpp:25
SOUND_CANNONFIRE
@ SOUND_CANNONFIRE
Definition
instance_deadmines.cpp:22
SOUND_MR_SMITE_ALARM1
@ SOUND_MR_SMITE_ALARM1
Definition
instance_deadmines.cpp:24
SOUND_DESTROYDOOR
@ SOUND_DESTROYDOOR
Definition
instance_deadmines.cpp:23
AddSC_instance_deadmines
void AddSC_instance_deadmines()
Definition
instance_deadmines.cpp:260
SAY_MR_SMITE_ALARM2
#define SAY_MR_SMITE_ALARM2
Definition
instance_deadmines.cpp:29
SAY_MR_SMITE_ALARM1
#define SAY_MR_SMITE_ALARM1
Definition
instance_deadmines.cpp:28
ObjectGuid
Definition
ByteBuffer.h:66
Position::GetPositionZ
float GetPositionZ() const
Definition
Object.h:330
instance_deadmines::instance_deadmines_InstanceMapScript
Definition
instance_deadmines.cpp:46
instance_deadmines::instance_deadmines_InstanceMapScript::DefiasCompanionGUID
uint64 DefiasCompanionGUID
Definition
instance_deadmines.cpp:55
instance_deadmines::instance_deadmines_InstanceMapScript::DefiasPirate2GUID
uint64 DefiasPirate2GUID
Definition
instance_deadmines.cpp:54
instance_deadmines::instance_deadmines_InstanceMapScript::PiratesDelay_Timer
uint32 PiratesDelay_Timer
Definition
instance_deadmines.cpp:59
instance_deadmines::instance_deadmines_InstanceMapScript::State
uint32 State
Definition
instance_deadmines.cpp:57
instance_deadmines::instance_deadmines_InstanceMapScript::DefiasPirate1GUID
uint64 DefiasPirate1GUID
Definition
instance_deadmines.cpp:53
instance_deadmines::instance_deadmines_InstanceMapScript::Initialize
void Initialize() OVERRIDE
Definition
instance_deadmines.cpp:62
instance_deadmines::instance_deadmines_InstanceMapScript::MoveCreatureInside
void MoveCreatureInside(Creature *creature)
Definition
instance_deadmines.cpp:148
instance_deadmines::instance_deadmines_InstanceMapScript::MoveCreaturesInside
void MoveCreaturesInside()
Definition
instance_deadmines.cpp:132
instance_deadmines::instance_deadmines_InstanceMapScript::ShootCannon
void ShootCannon()
Definition
instance_deadmines.cpp:154
instance_deadmines::instance_deadmines_InstanceMapScript::GetData64
uint64 GetData64(uint32 data) const OVERRIDE
Definition
instance_deadmines.cpp:217
instance_deadmines::instance_deadmines_InstanceMapScript::SummonCreatures
void SummonCreatures()
Definition
instance_deadmines.cpp:118
instance_deadmines::instance_deadmines_InstanceMapScript::IronCladDoorGUID
uint64 IronCladDoorGUID
Definition
instance_deadmines.cpp:50
instance_deadmines::instance_deadmines_InstanceMapScript::DoPlaySound
void DoPlaySound(GameObject *unit, uint32 sound)
Definition
instance_deadmines.cpp:228
instance_deadmines::instance_deadmines_InstanceMapScript::FactoryDoorGUID
uint64 FactoryDoorGUID
Definition
instance_deadmines.cpp:49
instance_deadmines::instance_deadmines_InstanceMapScript::CannonBlast_Timer
uint32 CannonBlast_Timer
Definition
instance_deadmines.cpp:58
instance_deadmines::instance_deadmines_InstanceMapScript::BlastOutDoor
void BlastOutDoor()
Definition
instance_deadmines.cpp:163
instance_deadmines::instance_deadmines_InstanceMapScript::DoorLeverGUID
uint64 DoorLeverGUID
Definition
instance_deadmines.cpp:52
instance_deadmines::instance_deadmines_InstanceMapScript::Update
virtual void Update(uint32 diff) OVERRIDE
Definition
instance_deadmines.cpp:76
instance_deadmines::instance_deadmines_InstanceMapScript::GetData
uint32 GetData(uint32 type) const OVERRIDE
Definition
instance_deadmines.cpp:206
instance_deadmines::instance_deadmines_InstanceMapScript::LeverStucked
void LeverStucked()
Definition
instance_deadmines.cpp:172
instance_deadmines::instance_deadmines_InstanceMapScript::DefiasCannonGUID
uint64 DefiasCannonGUID
Definition
instance_deadmines.cpp:51
instance_deadmines::instance_deadmines_InstanceMapScript::SetData
void SetData(uint32 type, uint32 data) OVERRIDE
Definition
instance_deadmines.cpp:190
instance_deadmines::instance_deadmines_InstanceMapScript::OnGameObjectCreate
void OnGameObjectCreate(GameObject *go) OVERRIDE
Definition
instance_deadmines.cpp:178
instance_deadmines::instance_deadmines_InstanceMapScript::uiSmiteChestGUID
uint64 uiSmiteChestGUID
Definition
instance_deadmines.cpp:60
instance_deadmines::instance_deadmines_InstanceMapScript::instance_deadmines_InstanceMapScript
instance_deadmines_InstanceMapScript(Map *map)
Definition
instance_deadmines.cpp:47
EVENT_STATE
#define EVENT_STATE
Definition
sunken_temple.h:21
src
server
scripts
EasternKingdoms
Deadmines
instance_deadmines.cpp
Generated on
for Project SkyFire Core by
1.17.0