Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
instance_halls_of_stone.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 "WorldSession.h"
9#include "halls_of_stone.h"
10#include <Player.h>
11
17
19{
20 public:
22
24 {
46
48 {
49 switch (creature->GetEntry())
50 {
51 case NPC_KRYSTALLUS:
52 KrystallusGUID = creature->GetGUID();
53 break;
54 case NPC_MAIDEN:
55 MaidenOfGriefGUID = creature->GetGUID();
56 break;
57 case NPC_SJONNIR:
58 SjonnirGUID = creature->GetGUID();
59 break;
60 case NPC_MARNAK:
61 MarnakGUID = creature->GetGUID();
62 break;
63 case NPC_KADDRAK:
64 KaddrakGUID = creature->GetGUID();
65 break;
66 case NPC_ABEDNEUM:
67 AbedneumGUID = creature->GetGUID();
68 break;
69 case NPC_BRANN:
70 BrannGUID = creature->GetGUID();
71 break;
72 default:
73 break;
74 }
75 }
76
78 {
79 switch (go->GetEntry())
80 {
81 case GO_ABEDNEUM:
82 AbedneumGoGUID = go->GetGUID();
83 break;
84 case GO_MARNAK:
85 MarnakGoGUID = go->GetGUID();
86 break;
87 case GO_KADDRAK:
88 KaddrakGoGUID = go->GetGUID();
89 break;
91 TribunalConsoleGUID = go->GetGUID();
92 break;
95 TribunalChestGUID = go->GetGUID();
98 break;
100 TribunalSkyFloorGUID = go->GetGUID();
101 break;
102 case GO_SJONNIR_DOOR:
103 AddDoor(go, true);
104 break;
105 default:
106 break;
107 }
108 }
109
111 {
112 switch (go->GetEntry())
113 {
114 case GO_SJONNIR_DOOR:
115 AddDoor(go, false);
116 break;
117 default:
118 break;
119 }
120 }
121
123 {
124 switch (type)
125 {
127 return MaidenOfGriefGUID;
128 case DATA_KRYSTALLUS:
129 return KrystallusGUID;
130 case DATA_SJONNIR:
131 return SjonnirGUID;
132 case DATA_KADDRAK:
133 return KaddrakGUID;
134 case DATA_MARNAK:
135 return MarnakGUID;
136 case DATA_ABEDNEUM:
137 return AbedneumGUID;
139 return TribunalConsoleGUID;
140 case DATA_GO_KADDRAK:
141 return KaddrakGoGUID;
142 case DATA_GO_ABEDNEUM:
143 return AbedneumGoGUID;
144 case DATA_GO_MARNAK:
145 return MarnakGoGUID;
148 default:
149 break;
150 }
151
152 return 0;
153 }
154
156 {
157 if (!InstanceScript::SetBossState(type, state))
158 return false;
159
160 switch (type)
161 {
162 case DATA_BRANN_EVENT:
163 if (state == DONE)
164 {
165 if (GameObject* go = instance->GetGameObject(TribunalChestGUID))
167 }
168 break;
169 default:
170 break;
171 }
172
173 return true;
174 }
175
176 bool CheckRequiredBosses(uint32 bossId, Player const* player /*= NULL*/) const OVERRIDE
177 {
178 if (player && player->GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES))
179 return true;
180
181 switch (bossId)
182 {
183 case DATA_SJONNIR:
185 return false;
186 break;
187 default:
188 break;
189 }
190
191 return true;
192 }
193
194 std::string GetSaveData() OVERRIDE
195 {
197
198 std::ostringstream saveStream;
199 saveStream << "H S " << GetBossSaveData();
200
202 return saveStream.str();
203 }
204
205 void Load(char const* str) OVERRIDE
206 {
207 if (!str)
208 {
210 return;
211 }
212
214
215 char dataHead1, dataHead2;
216
217 std::istringstream loadStream(str);
218 loadStream >> dataHead1 >> dataHead2;
219
220 if (dataHead1 == 'H' && dataHead2 == 'S')
221 {
222 for (uint32 i = 0; i < EncounterCount; ++i)
223 {
224 uint32 tmpState;
225 loadStream >> tmpState;
226 if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
227 tmpState = NOT_STARTED;
228 SetBossState(i, EncounterState(tmpState));
229 }
230 }
231 else
233
235 }
236
237 protected:
241
246
253 };
254
259};
260
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
@ 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
@ GO_FLAG_INTERACT_COND
@ GAMEOBJECT_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)
Definition Map.h:238
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
@ GO_ABEDNEUM
@ GO_KADDRAK
@ GO_TRIBUNAL_SKY_FLOOR
@ GO_TRIBUNAL_CHEST
@ GO_TRIBUNAL_CHEST_HERO
@ GO_TRIBUNAL_CONSOLE
@ GO_SJONNIR_DOOR
@ GO_MARNAK
#define HoSScriptName
@ NPC_KADDRAK
@ NPC_MAIDEN
@ NPC_BRANN
@ NPC_KRYSTALLUS
@ NPC_MARNAK
@ NPC_SJONNIR
@ NPC_ABEDNEUM
@ DATA_GO_SKY_FLOOR
@ DATA_GO_MARNAK
@ DATA_MARNAK
@ DATA_MAIDEN_OF_GRIEF
@ DATA_GO_KADDRAK
@ DATA_BRANN_EVENT
@ DATA_KRYSTALLUS
@ DATA_ABEDNEUM
@ DATA_GO_ABEDNEUM
@ DATA_GO_TRIBUNAL_CONSOLE
@ DATA_SJONNIR
@ DATA_KADDRAK
DoorData const doorData[]
DoorData const doorData[]
void AddSC_instance_halls_of_stone()
@ RBAC_PERM_SKIP_CHECK_INSTANCE_REQUIRED_BOSSES
Definition RBAC.h:53
bool CheckRequiredBosses(uint32 bossId, Player const *player) const OVERRIDE