TrinityCore
Loading...
Searching...
No Matches
instance_sunken_temple.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18/* ScriptData
19SDName: Instance_Sunken_Temple
20SD%Complete: 100
21SDComment:Place Holder
22SDCategory: Sunken Temple
23EndScriptData */
24
25#include "ScriptMgr.h"
26#include "Creature.h"
27#include "GameObject.h"
28#include "InstanceScript.h"
29#include "Map.h"
30#include "sunken_temple.h"
31
32static constexpr DoorData doorData[] =
33{
35 { 0, 0, DOOR_TYPE_ROOM } // END
36};
37
48
49static Position const atalalarianPos = { -466.5134f, 95.19822f, -189.6463f, 0.03490658f };
50static uint8 const nStatues = 6;
52{
53 { -515.553f, 95.25821f, -173.707f, 0.0f },
54 { -419.8487f, 94.48368f, -173.707f, 0.0f },
55 { -491.4003f, 135.9698f, -173.707f, 0.0f },
56 { -491.4909f, 53.48179f, -173.707f, 0.0f },
57 { -443.8549f, 136.1007f, -173.707f, 0.0f },
58 { -443.4171f, 53.83124f, -173.707f, 0.0f }
59};
60
62{
63public:
65
67 {
69 }
70
72 {
74 {
79 State = 0;
80
81 s1 = false;
82 s2 = false;
83 s3 = false;
84 s4 = false;
85 s5 = false;
86 s6 = false;
88 }
89
93
95
96 bool s1;
97 bool s2;
98 bool s3;
99 bool s4;
100 bool s5;
101 bool s6;
102
103 void OnUnitDeath(Unit* unit) override
104 {
105 switch (unit->GetEntry())
106 {
115 case NPC_ZOLO:
116 case NPC_GASHER:
117 case NPC_LORO:
118 case NPC_HUKKU:
119 case NPC_ZUL_LOR:
121 default: break;
122 }
123 }
124
125 void OnCreatureCreate(Creature* creature) override
126 {
128
129 switch (creature->GetEntry())
130 {
132 JammalAnTheProphetGUID = creature->GetGUID();
134 {
135 creature->SetImmuneToPC(true);
136 creature->CastSpell(creature, SPELL_GREEN_CHANNELING);
137 }
138 break;
140 ShadeOfEranikusGUID = creature->GetGUID();
142 creature->SetImmuneToAll(true);
143 break;
144 default:
145 break;
146 }
147 }
148
149 virtual void Update(uint32 /*diff*/) override // correct order goes form 1-6
150 {
151 switch (State)
152 {
154 if (!s1 && !s2 && !s3 && !s4 && !s5 && !s6)
155 {
156 if (GameObject* pAtalaiStatue1 = GetGameObject(GO_ATALAI_STATUE1))
157 UseStatue(pAtalaiStatue1);
158 s1 = true;
159 State = 0;
160 }
161 break;
163 if (s1 && !s2 && !s3 && !s4 && !s5 && !s6)
164 {
165 if (GameObject* pAtalaiStatue2 = GetGameObject(GO_ATALAI_STATUE2))
166 UseStatue(pAtalaiStatue2);
167 s2 = true;
168 State = 0;
169 }
170 break;
172 if (s1 && s2 && !s3 && !s4 && !s5 && !s6)
173 {
174 if (GameObject* pAtalaiStatue3 = GetGameObject(GO_ATALAI_STATUE3))
175 UseStatue(pAtalaiStatue3);
176 s3 = true;
177 State = 0;
178 }
179 break;
181 if (s1 && s2 && s3 && !s4 && !s5 && !s6)
182 {
183 if (GameObject* pAtalaiStatue4 = GetGameObject(GO_ATALAI_STATUE4))
184 UseStatue(pAtalaiStatue4);
185 s4 = true;
186 State = 0;
187 }
188 break;
190 if (s1 && s2 && s3 && s4 && !s5 && !s6)
191 {
192 if (GameObject* pAtalaiStatue5 = GetGameObject(GO_ATALAI_STATUE5))
193 UseStatue(pAtalaiStatue5);
194 s5 = true;
195 State = 0;
196 }
197 break;
199 if (s1 && s2 && s3 && s4 && s5 && !s6)
200 {
201 if (GameObject* pAtalaiStatue6 = GetGameObject(GO_ATALAI_STATUE6))
202 {
203 UseStatue(pAtalaiStatue6);
204 UseLastStatue(pAtalaiStatue6);
205 }
206 s6 = true;
207 State = 0;
208 }
209 break;
210 }
211 }
212
218
226
227 bool SetBossState(uint32 type, EncounterState state) override
228 {
229 if (!InstanceScript::SetBossState(type, state))
230 return false;
231
232 switch (type)
233 {
235 if (state == DONE)
237 creature->SetImmuneToAll(false);
238 break;
239 default:
240 break;
241 }
242 return true;
243 }
244
245 void SetData(uint32 type, uint32 data) override
246 {
247 switch (type)
248 {
249 case EVENT_STATE:
250 State = data;
251 break;
253 EliteTrollsKilled = data;
254 if (EliteTrollsKilled == 6)
255 {
257 jammal->SetImmuneToPC(false);
259 }
260 SaveToDB();
261 break;
262 default:
263 break;
264 }
265 }
266
267 uint32 GetData(uint32 type) const override
268 {
269 switch (type)
270 {
271 case EVENT_STATE:
272 return State;
274 return EliteTrollsKilled;
275 default:
276 break;
277 }
278 return 0;
279 }
280
281 void ReadSaveDataMore(std::istringstream& data) override
282 {
283 data >> EliteTrollsKilled;
284 }
285
286 void WriteSaveDataMore(std::ostringstream& data) override
287 {
288 data << EliteTrollsKilled;
289 }
290 };
291};
292
uint8_t uint8
Definition Define.h:135
uint32_t uint32
Definition Define.h:133
EncounterState
@ DONE
@ DOOR_TYPE_ROOM
@ DOOR_TYPE_PASSAGE
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
@ GO_FLAG_INTERACT_COND
#define DataHeader
void SetImmuneToPC(bool apply) override
Definition Creature.h:129
void SetImmuneToAll(bool apply) override
Definition Creature.h:126
void SetFlag(GameObjectFlags flags)
Definition GameObject.h:171
void SetBossNumber(uint32 number)
virtual bool SetBossState(uint32 id, EncounterState state)
virtual void OnCreatureCreate(Creature *creature) override
InstanceMap * instance
EncounterState GetBossState(uint32 id) const
void LoadDoorData(DoorData const *data)
GameObject * GetGameObject(uint32 type)
void SetHeaders(std::string const &dataHeaders)
void LoadObjectData(ObjectData const *creatureData, ObjectData const *gameObjectData)
Creature * GetCreature(ObjectGuid const &guid)
Definition Map.cpp:4397
uint32 GetEntry() const
Definition Object.h:81
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:78
Definition Unit.h:769
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2832
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
Definition Object.cpp:1992
GameObject * SummonGameObject(uint32 entry, Position const &pos, QuaternionData const &rot, Seconds respawnTime, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
Definition Object.cpp:2015
InstanceScript * GetInstanceScript(InstanceMap *map) const override
@ EVENT_STATE
Definition deadmines.h:50
#define MAX_ENCOUNTER
static Position const statuePositions[nStatues]
static Position const atalalarianPos
static uint8 const nStatues
static constexpr DoorData doorData[]
static constexpr ObjectData gameObjects[]
void AddSC_instance_sunken_temple()
bool SetBossState(uint32 type, EncounterState state) override
#define STScriptName
@ NPC_ZUL_LOR
@ NPC_DREAMSCYTHE
@ NPC_JAMMALAN_THE_PROPHET
@ NPC_ATALALARION
@ NPC_SHADE_OF_ERANIKUS
@ NPC_ZOLO
@ NPC_AVATAR_OF_HAKKAR
@ NPC_HAZZAS
@ NPC_MORPHAZ
@ NPC_HUKKU
@ NPC_GASHER
@ NPC_MIJAN
@ NPC_WEAVER
@ NPC_LORO
@ SPELL_GREEN_CHANNELING
@ GO_ATALAI_STATUE6
@ GO_ATALAI_LIGHT1
@ GO_ATALAI_STATUE5
@ GO_ATALAI_STATUE4
@ GO_ATALAI_STATUE2
@ GO_ATALAI_STATUE3
@ GO_ATALAI_LIGHT2
@ GO_FORCEFIELD
@ GO_ATALAI_STATUE1
@ BOSS_MORPHAZ
@ BOSS_JAMMALAN_THE_PROPHET
@ BOSS_HAZZAS
@ BOSS_ATALALARION
@ BOSS_WEAVER
@ BOSS_DREAMSCYTHE
@ BOSS_AVATAR_OF_HAKKAR
@ BOSS_SHADE_OF_ERANIKUS
@ BOSS_EVENT_ELITE_TROLLS