TrinityCore
Loading...
Searching...
No Matches
instance_black_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#include "ScriptMgr.h"
19#include "AreaBoundary.h"
20#include "black_temple.h"
21#include "Creature.h"
22#include "CreatureAI.h"
23#include "GameObject.h"
24#include "InstanceScript.h"
25#include "Map.h"
26
42
44{
45 { DATA_HIGH_WARLORD_NAJENTUS, new RectangleBoundary(394.0f, 479.4f, 707.8f, 859.1f) },
46 { DATA_SUPREMUS, new RectangleBoundary(556.1f, 850.2f, 542.0f, 1001.0f) },
47 { DATA_SHADE_OF_AKAMA, new RectangleBoundary(406.8f, 564.0f, 327.9f, 473.5f) },
48 { DATA_TERON_GOREFIEND, new RectangleBoundary(512.5f, 613.3f, 373.2f, 432.0f) },
49 { DATA_TERON_GOREFIEND, new ZRangeBoundary(179.5f, 223.6f) },
50 { DATA_GURTOGG_BLOODBOIL, new RectangleBoundary(720.5f, 864.5f, 159.3f, 316.0f) },
51 { DATA_RELIQUARY_OF_SOULS, new RectangleBoundary(435.9f, 660.3f, 21.2f, 229.6f) },
52 { DATA_RELIQUARY_OF_SOULS, new ZRangeBoundary(81.8f, 148.0f) },
53 { DATA_MOTHER_SHAHRAZ, new RectangleBoundary(903.4f, 982.1f, 92.4f, 313.2f) },
54 { DATA_ILLIDARI_COUNCIL, new EllipseBoundary(Position(696.6f, 305.0f), 70.0f , 85.0f) },
55 { DATA_ILLIDAN_STORMRAGE, new EllipseBoundary(Position(694.8f, 309.0f), 80.0f , 95.0f) }
56};
57
80
87
88static constexpr DungeonEncounterData encounters[] =
89{
90 { DATA_HIGH_WARLORD_NAJENTUS, {{ 601 }} },
91 { DATA_SUPREMUS, {{ 602 }} },
92 { DATA_SHADE_OF_AKAMA, {{ 603 }} },
93 { DATA_TERON_GOREFIEND, {{ 604 }} },
94 { DATA_GURTOGG_BLOODBOIL, {{ 605 }} },
95 { DATA_RELIQUARY_OF_SOULS, {{ 606 }} },
96 { DATA_MOTHER_SHAHRAZ, {{ 607 }} },
97 { DATA_ILLIDARI_COUNCIL, {{ 608 }} },
98 { DATA_ILLIDAN_STORMRAGE, {{ 609 }} }
99};
100
102{
103 public:
105
107 {
119
128
129 void OnCreatureCreate(Creature* creature) override
130 {
132
133 switch (creature->GetEntry())
134 {
141 case NPC_STORM_FURY:
142 AshtongueGUIDs.push_back(creature->GetGUID());
145 break;
146 default:
147 break;
148 }
149 }
150
151 uint32 GetData(uint32 type) const override
152 {
153 switch (type)
154 {
155 case DATA_AKAMA:
156 return AkamaState;
158 return AkamaIllidanIntro;
159 default:
160 return 0;
161 }
162 }
163
164 void SetData(uint32 type, uint32 data) override
165 {
166 switch (type)
167 {
168 case DATA_AKAMA:
169 AkamaState = data;
170 break;
171 case ACTION_OPEN_DOOR:
173 HandleGameObject(ObjectGuid::Empty, true, illidanGate);
174 break;
176 AkamaIllidanIntro = data;
177 break;
178 default:
179 break;
180 }
181 }
182
183 bool SetBossState(uint32 type, EncounterState state) override
184 {
185 if (!InstanceScript::SetBossState(type, state))
186 return false;
187
188 switch (type)
189 {
191 if (state == DONE)
193 trigger->AI()->Talk(EMOTE_HIGH_WARLORD_NAJENTUS_DIED);
194 break;
196 if (state == DONE)
197 for (ObjectGuid ashtongueGuid : AshtongueGUIDs)
198 if (Creature* ashtongue = instance->GetCreature(ashtongueGuid))
199 ashtongue->SetFaction(FACTION_ASHTONGUE_DEATHSWORN);
200 [[fallthrough]];
204 if (state == DONE && CheckDenOfMortalDoor())
205 {
207 trigger->AI()->Talk(EMOTE_DEN_OF_MORTAL_DOOR_OPEN);
208
211 }
212 break;
214 if (state == DONE)
215 if (Creature* akama = GetCreature(DATA_AKAMA))
216 akama->AI()->DoAction(ACTION_ACTIVE_AKAMA_INTRO);
217 break;
218 default:
219 break;
220 }
221
222 return true;
223 }
224
226 {
228 if (GetBossState(boss) != DONE)
229 return false;
230 return true;
231 }
232
233 protected:
237 };
238
240 {
242 }
243};
244
uint8_t uint8
Definition Define.h:156
uint32_t uint32
Definition Define.h:154
EncounterState
@ DONE
std::vector< ObjectGuid > GuidVector
Definition ObjectGuid.h:434
@ FACTION_ASHTONGUE_DEATHSWORN
#define DataHeader
uint32 const EncounterCount
#define BTScriptName
@ EMOTE_DEN_OF_MORTAL_DOOR_OPEN
@ EMOTE_HIGH_WARLORD_NAJENTUS_DIED
BTDataTypes
@ DATA_TERON_GOREFIEND
@ DATA_AKAMA
@ DATA_ILLIDARI_COUNCIL
@ DATA_MOTHER_SHAHRAZ
@ DATA_HIGH_NETHERMANCER_ZEREVOR
@ DATA_SUPREMUS
@ DATA_GATHIOS_THE_SHATTERER
@ DATA_BLOOD_ELF_COUNCIL_VOICE
@ DATA_ILLIDAN_STORMRAGE
@ DATA_VERAS_DARKSHADOW
@ DATA_RELIQUARY_COMBAT_TRIGGER
@ DATA_ILLIDAN_MUSIC_CONTROLLER
@ DATA_AKAMA_SHADE
@ DATA_BLACK_TEMPLE_TRIGGER
@ DATA_LADY_MALANDE
@ DATA_GO_DEN_OF_MORTAL_DOOR
@ DATA_GO_ILLIDAN_GATE
@ DATA_HIGH_WARLORD_NAJENTUS
@ DATA_AKAMA_ILLIDAN_INTRO
@ DATA_SHADE_OF_AKAMA
@ DATA_MAIEV
@ DATA_GURTOGG_BLOODBOIL
@ DATA_RELIQUARY_OF_SOULS
@ NPC_TERON_GOREFIEND
@ NPC_VERAS_DARKSHADOW
@ NPC_ILLIDARI_COUNCIL
@ NPC_GURTOGG_BLOODBOIL
@ NPC_AKAMA
@ NPC_MOTHER_SHAHRAZ
@ NPC_GATHIOS_THE_SHATTERER
@ NPC_HIGH_WARLORD_NAJENTUS
@ NPC_SHADE_OF_AKAMA
@ NPC_ASHTONGUE_PRIMALIST
@ NPC_ILLIDAN_STORMRAGE
@ NPC_RELIQUARY_OF_SOULS
@ NPC_ASHTONGUE_MYSTIC
@ NPC_RELIQUARY_COMBAT_TRIGGER
@ NPC_ASHTONGUE_STORMCALLER
@ NPC_HIGH_NETHERMANCER_ZEREVOR
@ NPC_BLACK_TEMPLE_TRIGGER
@ NPC_LADY_MALANDE
@ NPC_ASHTONGUE_FERAL_SPIRIT
@ NPC_ASHTONGUE_STALKER
@ NPC_BLOOD_ELF_COUNCIL_VOICE
@ NPC_AKAMA_SHADE
@ NPC_ASHTONGUE_BATTLELORD
@ NPC_MAIEV_SHADOWSONG
@ NPC_SUPREMUS
@ NPC_STORM_FURY
@ ACTION_OPEN_DOOR
@ AKAMA_INTRO
@ ACTION_ACTIVE_AKAMA_INTRO
@ GO_ILLIDAN_DOOR_R
@ GO_ILLIDAN_MUSIC_CONTROLLER
@ GO_TERON_DOOR_1
@ GO_TERON_DOOR_2
@ GO_COUNCIL_DOOR_1
@ GO_SHADE_OF_AKAMA_DOOR
@ GO_MOTHER_SHAHRAZ_DOOR
@ GO_GURTOGG_DOOR
@ GO_DEN_OF_MORTAL_DOOR
@ GO_NAJENTUS_GATE
@ GO_ILLIDAN_GATE
@ GO_COUNCIL_DOOR_2
@ GO_SUPREMUS_GATE
@ GO_ILLIDAN_DOOR_L
ObjectGuid const & GetGUID() const
Definition BaseEntity.h:163
void SetBossNumber(uint32 number)
virtual bool SetBossState(uint32 id, EncounterState state)
virtual void OnCreatureCreate(Creature *creature) override
Creature * GetCreature(uint32 type)
void HandleGameObject(ObjectGuid guid, bool open, GameObject *go=nullptr)
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)
EncounterState GetBossState(uint32 id) const
virtual void OnGameObjectCreate(GameObject *go) override
void LoadDoorData(std::span< DoorData const > data)
GameObject * GetGameObject(uint32 type)
void LoadBossBoundaries(BossBoundaryData const &data)
Creature * GetCreature(ObjectGuid const &guid)
Definition Map.cpp:3542
static ObjectGuid const Empty
Definition ObjectGuid.h:314
uint32 GetEntry() const
Definition Object.h:89
void SetFaction(uint32 faction) override
Definition Unit.h:872
InstanceScript * GetInstanceScript(InstanceMap *map) const override
static constexpr ObjectData creatureData[]
void AddSC_instance_black_temple()
static constexpr DoorData doorData[]
BossBoundaryData const boundaries
static constexpr ObjectData gameObjectData[]
static constexpr DungeonEncounterData encounters[]
bool SetBossState(uint32 type, EncounterState state) override