Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
instance_trial_of_the_champion.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/* ScriptData
7SDName: Instance Trial of the Champion
8SDComment:
9SDCategory: Trial Of the Champion
10EndScriptData */
11
12#include "ScriptMgr.h"
13#include "ScriptedCreature.h"
14#include "InstanceScript.h"
16#include "Player.h"
17
18#define MAX_ENCOUNTER 4
19
21{
22public:
23 instance_trial_of_the_champion() : InstanceMapScript("instance_trial_of_the_champion", 650) { }
24
29
31 {
33
35
39
50
51 std::list<uint64> VehicleList;
52
53 std::string str_data;
54
55 bool bDone;
56
80
82 {
83 for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
84 {
86 return true;
87 }
88
89 return false;
90 }
91
93 {
94 Map::PlayerList const &players = instance->GetPlayers();
95 uint32 TeamInInstance = 0;
96
97 if (!players.isEmpty())
98 {
99 if (Player* player = players.begin()->GetSource())
100 TeamInInstance = player->GetTeam();
101 }
102
103 switch (creature->GetEntry())
104 {
105 // Champions
107 if (TeamInInstance == HORDE)
108 creature->UpdateEntry(VEHICLE_MARSHAL_JACOB_ALERIUS_MOUNT, ALLIANCE);
109 break;
111 if (TeamInInstance == HORDE)
112 creature->UpdateEntry(VEHICLE_AMBROSE_BOLTSPARK_MOUNT, ALLIANCE);
113 break;
115 if (TeamInInstance == HORDE)
116 creature->UpdateEntry(VEHICLE_COLOSOS_MOUNT, ALLIANCE);
117 break;
119 if (TeamInInstance == HORDE)
120 creature->UpdateEntry(VEHICLE_EVENSONG_MOUNT, ALLIANCE);
121 break;
123 if (TeamInInstance == HORDE)
124 creature->UpdateEntry(VEHICLE_LANA_STOUTHAMMER_MOUNT, ALLIANCE);
125 break;
126 // Coliseum Announcer || Just NPC_JAEREN must be spawned.
127 case NPC_JAEREN:
128 uiAnnouncerGUID = creature->GetGUID();
129 if (TeamInInstance == ALLIANCE)
130 creature->UpdateEntry(NPC_ARELAS, ALLIANCE);
131 break;
134 VehicleList.push_back(creature->GetGUID());
135 break;
136 case NPC_EADRIC:
137 case NPC_PALETRESS:
138 uiArgentChampionGUID = creature->GetGUID();
139 break;
140 }
141 }
142
144 {
145 switch (go->GetEntry())
146 {
147 case GO_MAIN_GATE:
148 uiMainGateGUID = go->GetGUID();
149 break;
152 uiChampionLootGUID = go->GetGUID();
153 break;
154 }
155 }
156
157 void SetData(uint32 uiType, uint32 uiData) OVERRIDE
158 {
159 switch (uiType)
160 {
162 uiMovementDone = uiData;
163 if (uiMovementDone == 3)
164 {
165 if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID))
166 pAnnouncer->AI()->SetData(DATA_IN_POSITION, 0);
167 }
168 break;
170 m_auiEncounter[0] = uiData;
171 if (uiData == IN_PROGRESS)
172 {
173 for (std::list<uint64>::const_iterator itr = VehicleList.begin(); itr != VehicleList.end(); ++itr)
174 if (Creature* summon = instance->GetCreature(*itr))
175 summon->RemoveFromWorld();
176 }else if (uiData == DONE)
177 {
179 if (uiGrandChampionsDeaths == 3)
180 {
181 if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID))
182 {
183 pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f);
184 pAnnouncer->SetFlag(UNIT_FIELD_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
185 pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_CHAMPIONS_LOOT_H : GO_CHAMPIONS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, 0, 0, 0, 0, 90000000);
186 }
187 }
188 }
189 break;
191 uiArgentSoldierDeaths = uiData;
192 if (uiArgentSoldierDeaths == 9)
193 {
194 if (Creature* pBoss = instance->GetCreature(uiArgentChampionGUID))
195 {
196 pBoss->GetMotionMaster()->MovePoint(0, 746.88f, 618.74f, 411.06f);
197 pBoss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
198 pBoss->SetReactState(REACT_AGGRESSIVE);
199 }
200 }
201 break;
203 m_auiEncounter[1] = uiData;
204 if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID))
205 {
206 pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f);
207 pAnnouncer->SetFlag(UNIT_FIELD_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
208 pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_EADRIC_LOOT_H : GO_EADRIC_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, 0, 0, 0, 0, 90000000);
209 }
210 break;
212 m_auiEncounter[2] = uiData;
213 if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID))
214 {
215 pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f);
216 pAnnouncer->SetFlag(UNIT_FIELD_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
217 pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_PALETRESS_LOOT_H : GO_PALETRESS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, 0, 0, 0, 0, 90000000);
218 }
219 break;
220 }
221
222 if (uiData == DONE)
223 SaveToDB();
224 }
225
227 {
228 switch (uiData)
229 {
230 case BOSS_GRAND_CHAMPIONS: return m_auiEncounter[0];
233 case BOSS_BLACK_KNIGHT: return m_auiEncounter[3];
234
237 }
238
239 return 0;
240 }
241
243 {
244 switch (uiData)
245 {
246 case DATA_ANNOUNCER: return uiAnnouncerGUID;
247 case DATA_MAIN_GATE: return uiMainGateGUID;
248
252 }
253
254 return 0;
255 }
256
257 void SetData64(uint32 uiType, uint64 uiData) OVERRIDE
258 {
259 switch (uiType)
260 {
262 uiGrandChampion1GUID = uiData;
263 break;
265 uiGrandChampion2GUID = uiData;
266 break;
268 uiGrandChampion3GUID = uiData;
269 break;
270 }
271 }
272
273 std::string GetSaveData() OVERRIDE
274 {
276
277 std::ostringstream saveStream;
278
279 saveStream << "T C " << m_auiEncounter[0]
280 << ' ' << m_auiEncounter[1]
281 << ' ' << m_auiEncounter[2]
282 << ' ' << m_auiEncounter[3]
283 << ' ' << uiGrandChampionsDeaths
284 << ' ' << uiMovementDone;
285
286 str_data = saveStream.str();
287
289 return str_data;
290 }
291
292 void Load(const char* in) OVERRIDE
293 {
294 if (!in)
295 {
297 return;
298 }
299
301
302 char dataHead1, dataHead2;
303 uint16 data0, data1, data2, data3, data4, data5;
304
305 std::istringstream loadStream(in);
306 loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3 >> data4 >> data5;
307
308 if (dataHead1 == 'T' && dataHead2 == 'C')
309 {
310 m_auiEncounter[0] = data0;
311 m_auiEncounter[1] = data1;
312 m_auiEncounter[2] = data2;
313 m_auiEncounter[3] = data3;
314
315 for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
316 if (m_auiEncounter[i] == IN_PROGRESS)
318
320 uiMovementDone = data5;
322
324 }
325 };
326};
327
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
std::uint16_t uint16
Definition Define.h:78
#define OUT_LOAD_INST_DATA_FAIL
@ IN_PROGRESS
@ DONE
@ 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)
@ ALLIANCE
@ HORDE
@ UNIT_NPC_FLAG_GOSSIP
Definition Unit.h:687
@ REACT_AGGRESSIVE
Definition Unit.h:1158
@ UNIT_FLAG_NON_ATTACKABLE
Definition Unit.h:626
@ UNIT_FIELD_NPC_FLAGS
@ UNIT_FIELD_FLAGS
InstanceMapScript(const char *name, uint32 mapId)
InstanceScript(Map *map)
bool isEmpty() const
Definition LinkedList.h:86
Definition Map.h:238
MapRefManager PlayerList
Definition Map.h:406
iterator begin()
FROM * GetSource() const
Definition Reference.h:83
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
void AddSC_instance_trial_of_the_champion()
@ GO_PALETRESS_LOOT
@ GO_PALETRESS_LOOT_H
@ GO_CHAMPIONS_LOOT_H
@ GO_EADRIC_LOOT
@ GO_CHAMPIONS_LOOT
@ GO_EADRIC_LOOT_H
@ DATA_MAIN_GATE
@ DATA_GRAND_CHAMPION_2
@ DATA_GRAND_CHAMPION_1
@ DATA_GRAND_CHAMPION_3
@ DATA_ANNOUNCER
@ VEHICLE_LANA_STOUTHAMMER_MOUNT
@ VEHICLE_COLOSOS_MOUNT
@ VEHICLE_MARSHAL_JACOB_ALERIUS_MOUNT
@ VEHICLE_EVENSONG_MOUNT
@ VEHICLE_ARGENT_BATTLEWORG
@ VEHICLE_RUNOK_WILDMANE_MOUNT
@ VEHICLE_ZUL_TORE_MOUNT
@ VEHICLE_DEATHSTALKER_VESCERI_MOUNT
@ VEHICLE_AMBROSE_BOLTSPARK_MOUNT
@ VEHICLE_MOKRA_SKILLCRUSHER_MOUNT
@ VEHICLE_ARGENT_WARHORSE
@ VEHICLE_ERESSEA_DAWNSINGER_MOUNT
@ NPC_PALETRESS
@ BOSS_BLACK_KNIGHT
@ BOSS_GRAND_CHAMPIONS
@ DATA_ARGENT_SOLDIER_DEFEATED
@ DATA_MOVEMENT_DONE
@ BOSS_ARGENT_CHALLENGE_P
@ BOSS_ARGENT_CHALLENGE_E
@ DATA_IN_POSITION