TrinityCore
Loading...
Searching...
No Matches
instance_shattered_halls.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_Shattered_Halls
20SD%Complete: 50
21SDComment: instance not complete
22SDCategory: Hellfire Citadel, Shattered Halls
23EndScriptData */
24
25#include "ScriptMgr.h"
26#include "InstanceScript.h"
27#include "Map.h"
28#include "Player.h"
29#include "ScriptedCreature.h"
30#include "shattered_halls.h"
31#include "SpellAuras.h"
32
38
45
46static constexpr DungeonEncounterData encounters[] =
47{
48 { DATA_NETHEKURSE, {{ 1936 }} },
49 { DATA_PORUNG, {{ 1935 }} },
50 { DATA_OMROGG, {{ 1937 }} },
51 { DATA_KARGATH, {{ 1938 }} },
52};
53
55{
56 public:
58
63
65 {
76
77 void OnPlayerEnter(Player* player) override
78 {
79 Aura* ex = nullptr;
80
81 player->CastSpell(player, SPELL_REMOVE_KARGATH_EXECUTIONER, true);
82
84 return;
85
86 switch (executed)
87 {
88 case 0:
89 ex = player->AddAura(SPELL_KARGATH_EXECUTIONER_1, player);
90 break;
91 case 1:
92 ex = player->AddAura(SPELL_KARGATH_EXECUTIONER_2, player);
93 break;
94 case 2:
95 ex = player->AddAura(SPELL_KARGATH_EXECUTIONER_3, player);
96 break;
97 default:
98 break;
99 }
100
101 if (ex)
103 }
104
105 void OnCreatureCreate(Creature* creature) override
106 {
108
109 switch (creature->GetEntry())
110 {
112 kargathGUID = creature->GetGUID();
113 break;
116 creature->UpdateEntry(NPC_DRISELLA);
117 break;
121 executionerGUID = creature->GetGUID();
122 break;
125 victimsGUID[0] = creature->GetGUID();
126 break;
129 victimsGUID[1] = creature->GetGUID();
130 break;
133 victimsGUID[2] = creature->GetGUID();
134 break;
135 }
136 }
137
138 void OnUnitDeath(Unit* unit) override
139 {
140 if (unit->GetEntry() == NPC_BLOOD_GUARD_PORUNG)
142 }
143
144 bool SetBossState(uint32 type, EncounterState state) override
145 {
146 if (!InstanceScript::SetBossState(type, state))
147 return false;
148
149 switch (type)
150 {
152 if (state == DONE)
153 {
155 executionTimer = 0;
156 }
157 break;
158 case DATA_KARGATH:
159 if (Creature* executioner = instance->GetCreature(executionerGUID))
160 executioner->AI()->Reset(); // trigger removal of IMMUNE_TO_PC flag
161 break;
162 case DATA_OMROGG:
163 break;
164 }
165 return true;
166 }
167
168 ObjectGuid GetGuidData(uint32 data) const override
169 {
170 switch (data)
171 {
173 return kargathGUID;
175 return executionerGUID;
179 return victimsGUID[data - DATA_FIRST_PRISONER];
180 default:
181 return ObjectGuid::Empty;
182 }
183 }
184
185 void AfterDataLoad() override
186 {
187 // timed events are not resumable after reset/crash
189 executionTimer = 0;
190 }
191
192 uint32 GetData(uint32 type) const override
193 {
194 switch (type)
195 {
197 return executed;
199 return instance->GetTeamInInstance();
200 default:
201 return 0;
202 }
203 }
204
205 void Update(uint32 diff) override
206 {
207 if (!executionTimer)
208 return;
209
210 if (executionTimer <= diff)
211 {
213 switch (++executed)
214 {
215 case 1:
218 break;
219 case 2:
222 break;
223 default:
224 executionTimer = 0;
225 break;
226 }
227
228 if (Creature* executioner = instance->GetCreature(executionerGUID))
229 executioner->AI()->SetData(DATA_PRISONERS_EXECUTED, executed);
230 }
231 else
232 executionTimer -= diff;
233 }
234
235 private:
239
242 };
243};
244
@ IN_MILLISECONDS
Definition Common.h:38
@ MINUTE
Definition Common.h:32
uint8_t uint8
Definition Define.h:156
uint32_t uint32
Definition Define.h:154
EncounterState
@ DONE
@ HORDE
#define DataHeader
uint32 const EncounterCount
void SetDuration(int32 duration, bool withMods=false)
ObjectGuid const & GetGUID() const
Definition BaseEntity.h:163
bool UpdateEntry(uint32 entry, CreatureData const *data=nullptr, bool updateLevel=true)
Definition Creature.cpp:591
Team GetTeamInInstance() const
Definition Map.h:908
void SetBossNumber(uint32 number)
virtual bool SetBossState(uint32 id, EncounterState state)
virtual void OnCreatureCreate(Creature *creature) override
void DoCastSpellOnPlayers(uint32 spell, bool includePets=false, bool includeControlled=false)
void LoadObjectData(std::span< ObjectData const > creatureData, std::span< ObjectData const > gameObjectData)
InstanceMap * instance
void SetHeaders(std::string_view dataHeaders)
void LoadDungeonEncounterData(std::span< DungeonEncounterData const > encounters)
void LoadDoorData(std::span< DoorData const > data)
Creature * GetCreature(ObjectGuid const &guid)
Definition Map.cpp:3578
static ObjectGuid const Empty
Definition ObjectGuid.h:314
bool IsEmpty() const
Definition ObjectGuid.h:362
uint32 GetEntry() const
Definition Object.h:89
Definition Unit.h:647
Aura * AddAura(uint32 spellId, Unit *target)
Definition Unit.cpp:12344
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2222
InstanceScript * GetInstanceScript(InstanceMap *map) const override
@ DATA_TEAM_IN_INSTANCE
static constexpr ObjectData creatureData[]
void AddSC_instance_shattered_halls()
static constexpr DoorData doorData[]
static constexpr DungeonEncounterData encounters[]
#define SHScriptName
@ DATA_PORUNG
@ DATA_KARGATH
@ DATA_OMROGG
@ DATA_SHATTERED_EXECUTIONER
@ DATA_SECOND_PRISONER
@ DATA_RIGHT_HEAD
@ DATA_PRISONERS_EXECUTED
@ DATA_NETHEKURSE
@ DATA_THIRD_PRISONER
@ DATA_FIRST_PRISONER
@ DATA_LEFT_HEAD
@ NPC_ALLIANCE_VICTIM_1
@ NPC_HORDE_VICTIM_2
@ NPC_LEFT_HEAD
@ NPC_BLOOD_GUARD_PORUNG
@ NPC_CAPTAIN_ALINA
@ NPC_ALLIANCE_VICTIM_2
@ NPC_RIGHT_HEAD
@ NPC_SHATTERED_EXECUTIONER
@ NPC_DRISELLA
@ NPC_GRAND_WARLOCK_NETHEKURSE
@ NPC_RANDY_WHIZZLESPROCKET
@ NPC_HORDE_VICTIM_1
@ NPC_KARGATH_BLADEFIST
@ NPC_CAPTAIN_BONESHATTER
@ GO_GRAND_WARLOCK_CHAMBER_DOOR_1
@ GO_GRAND_WARLOCK_CHAMBER_DOOR_2
@ SPELL_KARGATH_EXECUTIONER_2
@ SPELL_KARGATH_EXECUTIONER_3
@ SPELL_REMOVE_KARGATH_EXECUTIONER
@ SPELL_KARGATH_EXECUTIONER_1
uint32 const VictimCount