Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
instance_ruby_sanctum.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 "ruby_sanctum.h"
9#include "Player.h"
10#include "TemporarySummon.h"
11#include "WorldPacket.h"
12
18
20{
21 public:
23
25 {
47
48 void OnPlayerEnter(Player* /*player*/) OVERRIDE
49 {
51 {
52 instance->LoadGrid(HalionControllerSpawnPos.GetPositionX(), HalionControllerSpawnPos.GetPositionY());
53 if (Creature* halionController = instance->SummonCreature(NPC_HALION_CONTROLLER, HalionControllerSpawnPos))
54 halionController->AI()->DoAction(ACTION_INTRO_HALION);
55 }
56 }
57
59 {
60 switch (creature->GetEntry())
61 {
63 BaltharusTheWarbornGUID = creature->GetGUID();
64 break;
66 GeneralZarithrianGUID = creature->GetGUID();
67 break;
69 SavianaRagefireGUID = creature->GetGUID();
70 break;
71 case NPC_HALION:
72 HalionGUID = creature->GetGUID();
73 break;
75 TwilightHalionGUID = creature->GetGUID();
76 break;
78 HalionControllerGUID = creature->GetGUID();
79 break;
80 case NPC_ORB_CARRIER:
81 OrbCarrierGUID = creature->GetGUID();
82 break;
84 OrbRotationFocusGUID = creature->GetGUID();
85 break;
87 CrystalChannelTargetGUID = creature->GetGUID();
88 break;
89 case NPC_XERESTRASZA:
90 XerestraszaGUID = creature->GetGUID();
91 break;
94 ZarithrianSpawnStalkerGUID[0] = creature->GetGUID();
95 else
96 ZarithrianSpawnStalkerGUID[1] = creature->GetGUID();
97 break;
98 default:
99 break;
100 }
101 }
102
104 {
105 switch (go->GetEntry())
106 {
107 case GO_FIRE_FIELD:
108 AddDoor(go, true);
109 break;
110 case GO_FLAME_WALLS:
111 FlameWallsGUID = go->GetGUID();
114 break;
115 case GO_FLAME_RING:
116 FlameRingGUID = go->GetGUID();
117 break;
119 TwilightFlameRingGUID = go->GetGUID();
120 break;
122 BurningTreeGUID[0] = go->GetGUID();
125 break;
127 BurningTreeGUID[1] = go->GetGUID();
130 break;
132 BurningTreeGUID[2] = go->GetGUID();
135 break;
137 BurningTreeGUID[3] = go->GetGUID();
140 break;
141 default:
142 break;
143 }
144 }
145
147 {
148 switch (go->GetEntry())
149 {
150 case GO_FIRE_FIELD:
151 AddDoor(go, false);
152 break;
153 default:
154 break;
155 }
156 }
157
159 {
160 Creature* creature = unit->ToCreature();
161 if (!creature)
162 return;
163
165 {
166 instance->LoadGrid(HalionControllerSpawnPos.GetPositionX(), HalionControllerSpawnPos.GetPositionY());
167 if (Creature* halionController = instance->SummonCreature(NPC_HALION_CONTROLLER, HalionControllerSpawnPos))
168 halionController->AI()->DoAction(ACTION_INTRO_HALION);
169 }
170 }
171
173 {
174 switch (type)
175 {
180 case DATA_XERESTRASZA:
181 return XerestraszaGUID;
183 return SavianaRagefireGUID;
189 case DATA_HALION:
190 return HalionGUID;
192 return TwilightHalionGUID;
193 case DATA_ORB_CARRIER:
194 return OrbCarrierGUID;
204 case DATA_FLAME_RING:
205 return FlameRingGUID;
208 default:
209 break;
210 }
211
212 return 0;
213 }
214
216 {
217 if (!InstanceScript::SetBossState(type, state))
218 return false;
219
220 switch (type)
221 {
223 {
224 if (state == DONE && GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE)
225 {
227 if (Creature* zarithrian = instance->GetCreature(GeneralZarithrianGUID))
229 }
230 break;
231 }
233 {
235 {
237 if (Creature* zarithrian = instance->GetCreature(GeneralZarithrianGUID))
239 }
240 break;
241 }
243 {
246 break;
247 }
248 case DATA_HALION:
249 {
253
254 // Reopen rings on wipe or success
255 if (state == DONE || state == FAIL)
256 {
259 }
260 break;
261 }
262 default:
263 break;
264 }
265
266 return true;
267 }
268
269 void SetData(uint32 type, uint32 data) OVERRIDE
270 {
272 return;
273
275 }
276
278 {
280 return 0;
281
283 }
284
285 std::string GetSaveData() OVERRIDE
286 {
288
289 std::ostringstream saveStream;
290 saveStream << "R S " << GetBossSaveData();
291
293 return saveStream.str();
294 }
295
297 {
298 builder.AppendState(WORLDSTATE_CORPOREALITY_MATERIAL, 50);
299 builder.AppendState(WORLDSTATE_CORPOREALITY_TWILIGHT, 50);
300 builder.AppendState(WORLDSTATE_CORPOREALITY_TOGGLE, 0);
301 }
302
303 void Load(char const* str) OVERRIDE
304 {
305 if (!str)
306 {
308 return;
309 }
310
312
313 char dataHead1, dataHead2;
314
315 std::istringstream loadStream(str);
316 loadStream >> dataHead1 >> dataHead2;
317
318 if (dataHead1 == 'R' && dataHead2 == 'S')
319 {
320 for (uint8 i = 0; i < EncounterCount; ++i)
321 {
322 uint32 tmpState;
323 loadStream >> tmpState;
324 if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
325 tmpState = NOT_STARTED;
326
327 SetBossState(i, EncounterState(tmpState));
328 }
329 }
330 else
332
334 }
335
336 protected:
352
354 };
355
360};
361
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
#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)
@ DOOR_TYPE_ROOM
@ DOOR_TYPE_PASSAGE
@ BOUNDARY_NONE
@ BOUNDARY_E
@ UNIT_FLAG_NOT_SELECTABLE
Definition Unit.h:650
@ UNIT_FLAG_IMMUNE_TO_PC
Definition Unit.h:633
@ UNIT_FIELD_FLAGS
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()
EncounterState GetBossState(uint32 id) const
void AddDoor(GameObject *door, bool add)
void LoadDoorData(DoorData const *data)
void HandleGameObject(uint64 guid, bool open, GameObject *go=NULL)
void DoUpdateWorldState(uint32 worldstateId, uint32 worldstateValue)
uint32 GetEntry() const
Definition Object.h:125
Creature * ToCreature()
Definition Object.h:207
Definition Unit.h:1367
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
DoorData const doorData[]
DoorData const doorData[]
void AddSC_instance_ruby_sanctum()
@ NPC_HALION_CONTROLLER
@ NPC_SAVIANA_RAGEFIRE
@ NPC_ORB_CARRIER
@ NPC_HALION
@ NPC_BALTHARUS_THE_WARBORN
@ NPC_BALTHARUS_TARGET
@ NPC_ORB_ROTATION_FOCUS
@ NPC_TWILIGHT_HALION
@ NPC_XERESTRASZA
@ NPC_GENERAL_ZARITHRIAN
@ NPC_ZARITHRIAN_SPAWN_STALKER
@ ACTION_INTRO_HALION
@ WORLDSTATE_CORPOREALITY_TOGGLE
@ WORLDSTATE_CORPOREALITY_MATERIAL
@ WORLDSTATE_CORPOREALITY_TWILIGHT
#define RSScriptName
Position const HalionControllerSpawnPos
@ GO_FIRE_FIELD
@ GO_BURNING_TREE_2
@ GO_TWILIGHT_FLAME_RING
@ GO_FLAME_RING
@ GO_BURNING_TREE_1
@ GO_BURNING_TREE_3
@ GO_BURNING_TREE_4
@ GO_FLAME_WALLS
@ DATA_HALION_CONTROLLER
@ DATA_TWILIGHT_FLAME_RING
@ DATA_CRYSTAL_CHANNEL_TARGET
@ DATA_BALTHARUS_SHARED_HEALTH
@ DATA_BURNING_TREE_1
@ DATA_GENERAL_ZARITHRIAN
@ DATA_BURNING_TREE_2
@ DATA_SAVIANA_RAGEFIRE
@ DATA_BURNING_TREE_3
@ DATA_ZARITHRIAN_SPAWN_STALKER_2
@ DATA_BURNING_TREE_4
@ DATA_ZARITHRIAN_SPAWN_STALKER_1
@ DATA_XERESTRASZA
@ DATA_ORB_CARRIER
@ DATA_TWILIGHT_HALION
@ DATA_FLAME_RING
@ DATA_HALION
@ DATA_ORB_ROTATION_FOCUS
@ DATA_BALTHARUS_THE_WARBORN
bool SetBossState(uint32 type, EncounterState state) OVERRIDE