Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
instance_ahnkahet.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 "ScriptedCreature.h"
8#include "InstanceScript.h"
9#include "ahnkahet.h"
10
16
18{
19 public:
21
23 {
45
47 {
48 switch (creature->GetEntry())
49 {
50 case NPC_ELDER_NADOX:
51 ElderNadoxGUID = creature->GetGUID();
52 break;
54 PrinceTaldaramGUID = creature->GetGUID();
55 break;
57 JedogaShadowseekerGUID = creature->GetGUID();
58 break;
59 case NPC_AMANITAR:
60 AmanitarGUID = creature->GetGUID();
61 break;
63 HeraldVolazjGUID = creature->GetGUID();
64 break;
65 case NPC_INITIAND:
66 InitiandGUIDs.insert(creature->GetGUID());
67 break;
68 default:
69 break;
70 }
71 }
72
74 {
75 switch (go->GetEntry())
76 {
78 PrinceTaldaramPlatformGUID = go->GetGUID();
80 HandleGameObject(0, true, go);
81 break;
82 case GO_SPHERE_1:
83 if (SpheresState[0])
84 {
85 go->SetGoState(GOState::GO_STATE_ACTIVE);
87 }
88 else
90 break;
91 case GO_SPHERE_2:
92 if (SpheresState[1])
93 {
94 go->SetGoState(GOState::GO_STATE_ACTIVE);
96 }
97 else
99 break;
101 AddDoor(go, true);
102 break;
103 default:
104 break;
105 }
106 }
107
109 {
110 switch (go->GetEntry())
111 {
113 AddDoor(go, false);
114 break;
115 default:
116 break;
117 }
118 }
119
120 void SetData(uint32 type, uint32 data) OVERRIDE
121 {
122 switch (type)
123 {
124 case DATA_SPHERE_1:
125 case DATA_SPHERE_2:
126 SpheresState[type - DATA_SPHERE_1] = data;
127 break;
129 SwitchTrigger = data;
130 break;
132 for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
133 {
134 if (Creature* creature = instance->GetCreature(*itr))
135 {
136 creature->Respawn();
137 if (!creature->IsInEvadeMode())
138 creature->AI()->EnterEvadeMode();
139 }
140 }
141 break;
142 default:
143 break;
144 }
145 }
146
148 {
149 switch (type)
150 {
151 case DATA_SPHERE_1:
152 case DATA_SPHERE_2:
153 return SpheresState[type - DATA_SPHERE_1];
155 for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
156 {
157 Creature* cr = instance->GetCreature(*itr);
158 if (!cr || cr->IsAlive())
159 return 0;
160 }
161 return 1;
163 return SwitchTrigger;
164 default:
165 break;
166 }
167 return 0;
168 }
169
171 {
172 switch (type)
173 {
175 JedogaSacrifices = data;
176 break;
178 JedogaTarget = data;
179 break;
180 default:
181 break;
182 }
183 }
184
186 {
187 switch (type)
188 {
189 case DATA_ELDER_NADOX:
190 return ElderNadoxGUID;
192 return PrinceTaldaramGUID;
195 case DATA_AMANITAR:
196 return AmanitarGUID;
198 return HeraldVolazjGUID;
202 {
203 std::vector<uint64> vInitiands;
204 vInitiands.clear();
205 for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
206 {
207 Creature* cr = instance->GetCreature(*itr);
208 if (cr && cr->IsAlive())
209 vInitiands.push_back(*itr);
210 }
211 if (vInitiands.empty())
212 return 0;
213
215 }
217 return JedogaSacrifices;
219 return JedogaTarget;
220 default:
221 break;
222 }
223 return 0;
224 }
225
227 {
228 if (!InstanceScript::SetBossState(type, state))
229 return false;
230
231 switch (type)
232 {
234 if (state == DONE)
235 {
236 for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
237 {
238 if (Creature* cr = instance->GetCreature(*itr))
239 cr->DespawnOrUnsummon();
240 }
241 }
242 break;
243 default:
244 break;
245 }
246 return true;
247 }
248
249 std::string GetSaveData() OVERRIDE
250 {
252
253 std::ostringstream saveStream;
254 saveStream << "A K " << GetBossSaveData() << SpheresState[0] << ' ' << SpheresState[1];
255
257 return saveStream.str();
258 }
259
260 void Load(char const* str) OVERRIDE
261 {
262 if (!str)
263 {
265 return;
266 }
267
269
270 char dataHead1, dataHead2;
271
272 std::istringstream loadStream(str);
273 loadStream >> dataHead1 >> dataHead2;
274
275 if (dataHead1 == 'A' && dataHead2 == 'K')
276 {
277 for (uint32 i = 0; i < EncounterCount; ++i)
278 {
279 uint32 tmpState;
280 loadStream >> tmpState;
281 if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
282 tmpState = NOT_STARTED;
283 SetBossState(i, EncounterState(tmpState));
284 }
285
286 loadStream >> SpheresState[0];
287 loadStream >> SpheresState[1];
288 }
289 else
291
293 }
294
295 protected:
301
305
306 std::set<uint64> InitiandGUIDs;
307
310 };
311
316};
317
319{
320 new instance_ahnkahet();
321}
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
@ GO_STATE_ACTIVE
Definition GameObject.h:576
#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_NOT_SELECTABLE
@ GAMEOBJECT_FIELD_FLAGS
#define AhnKahetScriptName
Definition ahnkahet.h:9
@ GO_PRINCE_TALDARAM_GATE
Definition ahnkahet.h:64
@ GO_PRINCE_TALDARAM_PLATFORM
Definition ahnkahet.h:65
@ GO_SPHERE_2
Definition ahnkahet.h:67
@ GO_SPHERE_1
Definition ahnkahet.h:66
@ NPC_AMANITAR
Definition ahnkahet.h:39
@ NPC_HERALD_VOLAZJ
Definition ahnkahet.h:40
@ NPC_JEDOGA_SHADOWSEEKER
Definition ahnkahet.h:38
@ NPC_ELDER_NADOX
Definition ahnkahet.h:36
@ NPC_INITIAND
Definition ahnkahet.h:47
@ NPC_PRINCE_TALDARAM
Definition ahnkahet.h:37
@ DATA_HERALD_VOLAZJ
Definition ahnkahet.h:20
@ DATA_JEDOGA_RESET_INITIANDS
Definition ahnkahet.h:30
@ DATA_PL_JEDOGA_TARGET
Definition ahnkahet.h:26
@ DATA_ALL_INITIAND_DEAD
Definition ahnkahet.h:31
@ DATA_JEDOGA_SHADOWSEEKER
Definition ahnkahet.h:18
@ DATA_JEDOGA_TRIGGER_SWITCH
Definition ahnkahet.h:29
@ DATA_AMANITAR
Definition ahnkahet.h:19
@ DATA_SPHERE_2
Definition ahnkahet.h:24
@ DATA_PRINCE_TALDARAM_PLATFORM
Definition ahnkahet.h:25
@ DATA_ELDER_NADOX
Definition ahnkahet.h:16
@ DATA_ADD_JEDOGA_INITIAND
Definition ahnkahet.h:28
@ DATA_PRINCE_TALDARAM
Definition ahnkahet.h:17
@ DATA_ADD_JEDOGA_OPFER
Definition ahnkahet.h:27
@ DATA_SPHERE_1
Definition ahnkahet.h:23
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)
Definition Map.h:238
bool IsAlive() const
Definition Unit.h:2032
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
void AddSC_instance_ahnkahet()
DoorData const doorData[]
DoorData const doorData[]
C::value_type const & SelectRandomContainerElement(C const &container)
Definition Containers.h:48
void SetData64(uint32 type, uint64 data) OVERRIDE
bool SetBossState(uint32 type, EncounterState state) OVERRIDE
void SetData(uint32 type, uint32 data) OVERRIDE