Project SkyFire Core
SkyFire 5.4.8 server core API documentation
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
7SDName: Instance_Deadmines
8SD%Complete: 100
9SDComment:
10SDCategory: Deadmines
11EndScriptData */
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
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
36
38{
39 public:
41 : InstanceMapScript("instance_deadmines", 36)
42 {
43 }
44
46 {
48
56
61
75
76 virtual void Update(uint32 diff) OVERRIDE
77 {
79 return;
80
81 GameObject* pIronCladDoor = instance->GetGameObject(IronCladDoorGUID);
82 if (!pIronCladDoor)
83 return;
84
85 switch (State)
86 {
89 // it's a hack - Mr. Smite should do that but his too far away
90 pIronCladDoor->SetName("Mr. Smite");
92 DoPlaySound(pIronCladDoor, SOUND_MR_SMITE_ALARM1);
94 break;
97 if (CannonBlast_Timer <= diff)
98 {
100 ShootCannon();
101 BlastOutDoor();
102 LeverStucked();
104 DoPlaySound(pIronCladDoor, SOUND_MR_SMITE_ALARM2);
106 } else CannonBlast_Timer -= diff;
107 break;
108 case PIRATES_ATTACK:
109 if (PiratesDelay_Timer <= diff)
110 {
113 } else PiratesDelay_Timer -= diff;
114 break;
115 }
116 }
117
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
133 {
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
149 {
150 creature->SetWalk(false);
151 creature->GetMotionMaster()->MovePoint(0, -102.7f, -655.9f, creature->GetPositionZ());
152 }
153
155 {
156 if (GameObject* pDefiasCannon = instance->GetGameObject(DefiasCannonGUID))
157 {
158 pDefiasCannon->SetGoState(GO_STATE_ACTIVE);
159 DoPlaySound(pDefiasCannon, SOUND_CANNONFIRE);
160 }
161 }
162
164 {
165 if (GameObject* pIronCladDoor = instance->GetGameObject(IronCladDoorGUID))
166 {
167 pIronCladDoor->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
168 DoPlaySound(pIronCladDoor, SOUND_DESTROYDOOR);
169 }
170 }
171
173 {
174 if (GameObject* pDoorLever = instance->GetGameObject(DoorLeverGUID))
175 pDoorLever->SetUInt32Value(GAMEOBJECT_FIELD_FLAGS, 4);
176 }
177
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:
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
207 {
208 switch (type)
209 {
210 case EVENT_STATE:
211 return State;
212 }
213
214 return 0;
215 }
216
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
258};
259
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
std::uint64_t uint64
Definition Define.h:76
static constexpr GOState GO_STATE_ACTIVE_ALTERNATIVE
static constexpr GOState GO_STATE_ACTIVE
static constexpr TempSummonType TEMPSUMMON_CORPSE_TIMED_DESPAWN
@ DONE
@ GAMEOBJECT_FIELD_FLAGS
bool WriteBit(uint32 bit)
Definition ByteBuffer.h:164
void WriteByteSeq(uint8 b)
Definition ByteBuffer.h:227
InstanceMapScript(const char *name, uint32 mapId)
InstanceScript(Map *map)
Definition Map.h:238
void MovePoint(uint32 id, Position const &pos, bool generatePath=true)
uint64 GetGUID() const
Definition Object.h:119
MotionMaster * GetMotionMaster()
Definition Unit.h:2605
bool SetWalk(bool enable)
Definition Unit.cpp:9137
void SetName(std::string const &newname)
Definition Object.h:665
void MonsterYell(const char *text, Language language, WorldObject const *target)
Definition Object.cpp:2411
virtual void SendMessageToSet(WorldPacket *data, bool self)
Definition Object.cpp:2485
TempSummon * SummonCreature(uint32 id, Position const &pos, TempSummonType spwtype=TempSummonType::TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0) const
Definition Object.cpp:2703
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
@ GO_MR_SMITE_CHEST
Definition deadmines.h:35
@ GO_DOOR_LEVER
Definition deadmines.h:34
@ GO_FACTORY_DOOR
Definition deadmines.h:31
@ GO_IRONCLAD_DOOR
Definition deadmines.h:32
@ GO_DEFIAS_CANNON
Definition deadmines.h:33
@ DATA_SMITE_CHEST
Definition deadmines.h:26
@ PIRATES_ATTACK
Definition deadmines.h:14
@ CANNON_NOT_USED
Definition deadmines.h:11
@ EVENT_DONE
Definition deadmines.h:15
@ CANNON_BLAST_INITIATED
Definition deadmines.h:13
@ CANNON_GUNPOWDER_USED
Definition deadmines.h:12
@ EVENT_RHAHKZOR
Definition deadmines.h:21
@ SMSG_PLAY_SOUND
Definition Opcodes.h:883
@ DATA_CANNON_BLAST_TIMER
@ DATA_PIRATES_DELAY_TIMER
@ SOUND_MR_SMITE_ALARM2
@ SOUND_CANNONFIRE
@ SOUND_MR_SMITE_ALARM1
@ SOUND_DESTROYDOOR
void AddSC_instance_deadmines()
#define SAY_MR_SMITE_ALARM2
#define SAY_MR_SMITE_ALARM1
float GetPositionZ() const
Definition Object.h:330
#define EVENT_STATE