Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
instance_culling_of_stratholme.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 "CreatureTextMgr.h"
10#include "Player.h"
11#include "TemporarySummon.h"
12#include "SpellInfo.h"
13
14#define MAX_ENCOUNTER 5
15
16/* Culling of Stratholme encounters:
170 - Meathook
181 - Salramm the Fleshcrafter
192 - Chrono-Lord Epoch
203 - Mal'Ganis
214 - Infinite Corruptor (Heroic only)
22*/
23
25{
27};
28
29Position const ChromieSummonPos = {1813.298f, 1283.578f, 142.3258f, 3.878161f};
30
32{
33 public:
34 instance_culling_of_stratholme() : InstanceMapScript("instance_culling_of_stratholme", 595) { }
35
40
42 {
60
62 {
63 for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
65 return true;
66
67 return false;
68 }
69
71 {
72 builder.AppendState(WORLDSTATE_SHOW_CRATES, 1);
73 builder.AppendState(WORLDSTATE_CRATES_REVEALED, _crateCount);
74 builder.AppendState(WORLDSTATE_WAVE_COUNT, 0);
75 builder.AppendState(WORLDSTATE_TIME_GUARDIAN, 25);
76 builder.AppendState(WORLDSTATE_TIME_GUARDIAN_SHOW, 0);
77 }
78
80 {
81 switch (creature->GetEntry())
82 {
83 case NPC_ARTHAS:
84 _arthasGUID = creature->GetGUID();
85 break;
86 case NPC_MEATHOOK:
87 _meathookGUID = creature->GetGUID();
88 break;
89 case NPC_SALRAMM:
90 _salrammGUID = creature->GetGUID();
91 break;
92 case NPC_EPOCH:
93 _epochGUID = creature->GetGUID();
94 break;
95 case NPC_MAL_GANIS:
96 _malGanisGUID = creature->GetGUID();
97 break;
98 case NPC_INFINITE:
99 _infiniteGUID = creature->GetGUID();
100 break;
102 _genericBunnyGUID = creature->GetGUID();
103 break;
104 }
105 }
106
108 {
109 switch (go->GetEntry())
110 {
111 case GO_SHKAF_GATE:
112 _shkafGateGUID = go->GetGUID();
113 break;
115 _malGanisGate1GUID = go->GetGUID();
116 break;
118 _malGanisGate2GUID = go->GetGUID();
119 break;
120 case GO_EXIT_GATE:
121 _exitGateGUID = go->GetGUID();
122 if (_encounterState[3] == DONE)
124 break;
127 _malGanisChestGUID = go->GetGUID();
128 if (_encounterState[3] == DONE)
130 break;
131 }
132 }
133
134 void SetData(uint32 type, uint32 data) OVERRIDE
135 {
136 switch (type)
137 {
139 _encounterState[0] = data;
140 break;
142 _encounterState[1] = data;
143 break;
144 case DATA_EPOCH_EVENT:
145 _encounterState[2] = data;
146 break;
148 _encounterState[3] = data;
149
150 switch (_encounterState[3])
151 {
152 case NOT_STARTED:
154 break;
155 case IN_PROGRESS:
157 break;
158 case DONE:
160 if (GameObject* go = instance->GetGameObject(_malGanisChestGUID))
162 break;
163 }
164 break;
166 _encounterState[4] = data;
167 break;
168 case DATA_CRATE_COUNT:
169 _crateCount = data;
170 if (_crateCount == 5)
171 {
172 if (Creature* bunny = instance->GetCreature(_genericBunnyGUID))
173 bunny->CastSpell(bunny, SPELL_CRATES_CREDIT, true);
174
175 // Summon Chromie and global whisper
176 if (Creature* chromie = instance->SummonCreature(NPC_CHROMIE_2, ChromieSummonPos))
177 if (!instance->GetPlayers().isEmpty())
178 if (Player* player = instance->GetPlayers().getFirst()->GetSource())
180 }
182 break;
183 }
184
185 if (data == DONE)
186 SaveToDB();
187 }
188
190 {
191 switch (type)
192 {
194 return _encounterState[0];
196 return _encounterState[1];
197 case DATA_EPOCH_EVENT:
198 return _encounterState[2];
200 return _encounterState[3];
202 return _encounterState[4];
203 case DATA_CRATE_COUNT:
204 return _crateCount;
205 }
206 return 0;
207 }
208
209 uint64 GetData64(uint32 identifier) const OVERRIDE
210 {
211 switch (identifier)
212 {
213 case DATA_ARTHAS:
214 return _arthasGUID;
215 case DATA_MEATHOOK:
216 return _meathookGUID;
217 case DATA_SALRAMM:
218 return _salrammGUID;
219 case DATA_EPOCH:
220 return _epochGUID;
221 case DATA_MAL_GANIS:
222 return _malGanisGUID;
223 case DATA_INFINITE:
224 return _infiniteGUID;
225 case DATA_SHKAF_GATE:
226 return _shkafGateGUID;
228 return _malGanisGate1GUID;
230 return _malGanisGate2GUID;
231 case DATA_EXIT_GATE:
232 return _exitGateGUID;
234 return _malGanisChestGUID;
235 }
236 return 0;
237 }
238
239 std::string GetSaveData() OVERRIDE
240 {
242
243 std::ostringstream saveStream;
244 saveStream << "C S " << _encounterState[0] << ' ' << _encounterState[1] << ' '
245 << _encounterState[2] << ' ' << _encounterState[3] << ' ' << _encounterState[4];
246
248 return saveStream.str();
249 }
250
251 void Load(const char* in) OVERRIDE
252 {
253 if (!in)
254 {
256 return;
257 }
258
260
261 char dataHead1, dataHead2;
262 uint16 data0, data1, data2, data3, data4;
263
264 std::istringstream loadStream(in);
265 loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3 >> data4;
266
267 if (dataHead1 == 'C' && dataHead2 == 'S')
268 {
269 _encounterState[0] = data0;
270 _encounterState[1] = data1;
271 _encounterState[2] = data2;
272 _encounterState[3] = data3;
273 _encounterState[4] = data4;
274
275 for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
278 }
279 else
281
283 }
284
285 private:
300 };
301};
302
#define sCreatureTextMgr
@ TEXT_RANGE_MAP
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
std::uint16_t uint16
Definition Define.h:78
#define OUT_LOAD_INST_DATA_FAIL
@ IN_PROGRESS
@ DONE
@ 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)
@ GO_FLAG_INTERACT_COND
@ GAMEOBJECT_FIELD_FLAGS
InstanceMapScript(const char *name, uint32 mapId)
InstanceScript(Map *map)
void HandleGameObject(uint64 guid, bool open, GameObject *go=NULL)
void DoUpdateWorldState(uint32 worldstateId, uint32 worldstateValue)
Definition Map.h:238
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
@ GO_MALGANIS_GATE_1
@ GO_SHKAF_GATE
@ GO_MALGANIS_GATE_2
@ GO_MALGANIS_CHEST_N
@ GO_MALGANIS_CHEST_H
@ NPC_CHROMIE_2
@ NPC_GENERIC_BUNNY
@ NPC_MAL_GANIS
@ DATA_MAL_GANIS_CHEST
@ DATA_MAL_GANIS_GATE_2
@ DATA_SHKAF_GATE
@ DATA_MEATHOOK
@ DATA_MAL_GANIS
@ DATA_INFINITE
@ DATA_EXIT_GATE
@ DATA_MAL_GANIS_GATE_1
@ WORLDSTATE_SHOW_CRATES
@ WORLDSTATE_WAVE_COUNT
@ WORLDSTATE_CRATES_REVEALED
@ WORLDSTATE_TIME_GUARDIAN
@ WORLDSTATE_TIME_GUARDIAN_SHOW
@ SPELL_CRATES_CREDIT
@ DATA_MEATHOOK_EVENT
@ DATA_INFINITE_EVENT
@ DATA_CRATE_COUNT
@ DATA_SALRAMM_EVENT
@ DATA_EPOCH_EVENT
@ DATA_MAL_GANIS_EVENT
Position const ChromieSummonPos
void AddSC_instance_culling_of_stratholme()