Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
instance_zulaman.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#include "ScriptMgr.h"
7#include "InstanceScript.h"
8#include "ScriptedCreature.h"
9#include "zulaman.h"
10
12{
13 public:
15
17 {
34
36 {
37 builder.AppendState(WORLD_STATE_ZULAMAN_TIMER_ENABLED, ZulAmanState ? 1 : 0);
38 builder.AppendState(WORLD_STATE_ZULAMAN_TIMER, SpeedRunTimer);
39 }
40
42 {
43 switch (creature->GetEntry())
44 {
45 case NPC_AKILZON:
46 AkilzonGUID = creature->GetGUID();
47 break;
48 case NPC_NALORAKK:
49 NalorakkGUID = creature->GetGUID();
50 break;
51 case NPC_JANALAI:
52 JanalaiGUID = creature->GetGUID();
53 break;
54 case NPC_HALAZZI:
55 HalazziGUID = creature->GetGUID();
56 break;
57 case NPC_HEXLORD:
58 HexLordMalacrassGUID = creature->GetGUID();
59 break;
60 case NPC_DAAKARA:
61 DaakaraGUID = creature->GetGUID();
62 break;
63 case NPC_VOLJIN:
64 VoljinGUID = creature->GetGUID();
65 break;
67 HexLordTriggerGUID = creature->GetGUID();
68 break;
69 default:
70 break;
71 }
72 }
73
75 {
76 switch (go->GetEntry())
77 {
78 case GO_STRANGE_GONG:
79 StrangeGongGUID = go->GetGUID();
80 break;
81 case GO_MASSIVE_GATE:
82 MasiveGateGUID = go->GetGUID();
83 AddDoor(go, true);
85 go->SetGoState(GO_STATE_ACTIVE);
86 break;
87 default:
88 break;
89 }
90 }
91
93 {
94 switch (go->GetEntry())
95 {
96 case GO_MASSIVE_GATE:
97 AddDoor(go, false);
98 break;
99 default:
100 break;
101 }
102 }
103
105 {
106 switch (type)
107 {
108 case DATA_AKILZON:
109 return AkilzonGUID;
110 case DATA_NALORAKK:
111 return NalorakkGUID;
112 case DATA_JANALAI:
113 return JanalaiGUID;
114 case DATA_HALAZZI:
115 return HalazziGUID;
116 case DATA_HEXLORD:
118 case DATA_DAAKARA:
119 return DaakaraGUID;
121 return HexLordTriggerGUID;
123 return StrangeGongGUID;
125 return MasiveGateGUID;
126 default:
127 break;
128 }
129
130 return 0;
131 }
132
133 void SetData(uint32 type, uint32 data) OVERRIDE
134 {
135 switch (type)
136 {
138 {
139 if (data == IN_PROGRESS)
140 {
143 events.ScheduleEvent(EVENT_UPDATE_ZULAMAN_TIMER, 60000);
144 SpeedRunTimer = 15;
145 ZulAmanState = data;
146 SaveToDB();
147 }
148 break;
149 }
150 default:
151 break;
152 }
153 }
154
156 {
157 switch (type)
158 {
160 return ZulAmanState;
161 default:
162 break;
163 }
164
165 return 0;
166 }
167
169 {
170 if (!InstanceScript::SetBossState(type, state))
171 return false;
172
173 if (state == DONE)
174 {
176 {
178
179 if (ZulAmanBossCount < 2)
180 {
183 }
184 else if (ZulAmanBossCount == 4)
185 {
189 }
190 }
191 }
192
193 switch (type)
194 {
195 case DATA_AKILZON:
196 break;
197 case DATA_NALORAKK:
198 break;
199 case DATA_JANALAI:
200 break;
201 case DATA_HALAZZI:
202 case DATA_HEXLORD:
203 case DATA_DAAKARA:
204 break;
205 default:
206 break;
207 }
208
209 return true;
210 }
211
212 void ProcessEvent(WorldObject* /*obj*/, uint32 eventId) OVERRIDE
213 {
214 switch (eventId)
215 {
217 if (Creature* voljin = instance->GetCreature(VoljinGUID))
218 {
219 if (voljin->IsAIEnabled)
220 voljin->AI()->DoAction(ACTION_START_ZULAMAN);
221 }
222 break;
223 default:
224 break;
225 }
226 }
227
228 void Update(uint32 diff)
229 {
230 if (events.Empty())
231 return;
232
233 events.Update(diff);
234
235 while (uint32 eventId = events.ExecuteEvent())
236 {
237 switch (eventId)
238 {
240 SaveToDB();
242 if (SpeedRunTimer)
243 events.ScheduleEvent(EVENT_UPDATE_ZULAMAN_TIMER, 60000);
244 else
245 {
249 }
250 break;
251 default:
252 break;
253 }
254 }
255 }
256
257 std::string GetSaveData() OVERRIDE
258 {
260
261 std::ostringstream saveStream;
262 saveStream << "Z A " << GetBossSaveData() << ZulAmanState
263 << ' ' << SpeedRunTimer << ' ' << ZulAmanBossCount;
264
266 return saveStream.str();
267 }
268
269 void Load(char const* str) OVERRIDE
270 {
271 if (!str)
272 {
274 return;
275 }
276
278
279 char dataHead1, dataHead2;
280
281 std::istringstream loadStream(str);
282 loadStream >> dataHead1 >> dataHead2;
283
284 if (dataHead1 == 'Z' && dataHead2 == 'A')
285 {
286 for (uint8 i = 0; i < EncounterCount; ++i)
287 {
288 uint32 tmpState;
289 loadStream >> tmpState;
290 if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
291 tmpState = NOT_STARTED;
292
293 SetBossState(i, EncounterState(tmpState));
294 }
295
296 loadStream >> ZulAmanState;
297 loadStream >> SpeedRunTimer;
298 loadStream >> ZulAmanBossCount;
299
301 {
302 events.ScheduleEvent(EVENT_UPDATE_ZULAMAN_TIMER, 60000);
305 }
306 }
307 else
309
311 }
312
313 protected:
328 };
329
334};
335
337{
338 new instance_zulaman();
339}
std::uint8_t uint8
Definition Define.h:79
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
#define OUT_LOAD_INST_DATA_FAIL
EncounterState
@ IN_PROGRESS
@ FAIL
@ DONE
@ SPECIAL
@ NOT_STARTED
#define OUT_SAVE_INST_DATA_COMPLETE
#define OUT_LOAD_INST_DATA_COMPLETE
#define OUT_SAVE_INST_DATA
#define OUT_LOAD_INST_DATA(a)
uint32 const EncounterCount
InstanceMapScript(const char *name, uint32 mapId)
InstanceScript(Map *map)
void SetBossNumber(uint32 number)
virtual bool SetBossState(uint32 id, EncounterState state)
std::string GetBossSaveData()
void AddDoor(GameObject *door, bool add)
void DoUpdateWorldState(uint32 worldstateId, uint32 worldstateValue)
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
void AddSC_instance_zulaman()
void SetData(uint32 type, uint32 data) OVERRIDE
void ProcessEvent(WorldObject *, uint32 eventId) OVERRIDE
bool SetBossState(uint32 type, EncounterState state) OVERRIDE
void FillInitialWorldStates(WorldStateBuilder &builder) OVERRIDE
void OnCreatureCreate(Creature *creature) OVERRIDE
@ WORLD_STATE_ZULAMAN_TIMER_ENABLED
Definition zulaman.h:64
@ WORLD_STATE_ZULAMAN_TIMER
Definition zulaman.h:65
@ GO_STRANGE_GONG
Definition zulaman.h:47
@ GO_MASSIVE_GATE
Definition zulaman.h:48
@ ACTION_START_ZULAMAN
Definition zulaman.h:59
@ NPC_HEXLORD_TRIGGER
Definition zulaman.h:42
@ NPC_AKILZON
Definition zulaman.h:34
@ NPC_JANALAI
Definition zulaman.h:36
@ NPC_NALORAKK
Definition zulaman.h:35
@ NPC_DAAKARA
Definition zulaman.h:39
@ NPC_HALAZZI
Definition zulaman.h:37
@ NPC_VOLJIN
Definition zulaman.h:41
@ NPC_HEXLORD
Definition zulaman.h:38
@ EVENT_UPDATE_ZULAMAN_TIMER
Definition zulaman.h:54
@ EVENT_START_ZULAMAN
Definition zulaman.h:53
#define ZulAmanScriptName
Definition zulaman.h:10
@ DATA_AKILZON
Definition zulaman.h:15
@ DATA_STRANGE_GONG
Definition zulaman.h:25
@ DATA_ZULAMAN_STATE
Definition zulaman.h:29
@ DATA_NALORAKK
Definition zulaman.h:16
@ DATA_DAAKARA
Definition zulaman.h:20
@ DATA_HEXLORD
Definition zulaman.h:19
@ DATA_MASSIVE_GATE
Definition zulaman.h:26
@ DATA_JANALAI
Definition zulaman.h:17
@ DATA_HALAZZI
Definition zulaman.h:18
@ DATA_HEXLORD_TRIGGER
Definition zulaman.h:23