AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
instance_trial_of_the_crusader Struct Reference
Inheritance diagram for instance_trial_of_the_crusader:
InstanceScript ZoneScript

Public Member Functions

 instance_trial_of_the_crusader (Map *map)
 
void Initialize () override
 
void OnCreatureCreate (Creature *creature) override
 
void OnGameObjectCreate (GameObject *go) override
 
void OnPlayerEnter (Player *player) override
 
void OnUnitDeath (Unit *unit) override
 
void SetData (uint32 type, uint32 data) override
 
uint32 GetData (uint32 type) const override
 
bool SetBossState (uint32 type, EncounterState state) override
 
void Update (uint32 diff) override
 
void ReadSaveDataMore (std::istringstream &data) override
 
void WriteSaveDataMore (std::ostringstream &data) override
 
bool CheckAchievementCriteriaMeet (uint32 criteriaId, Player const *, Unit const *, uint32) override
 
- Public Member Functions inherited from InstanceScript
 InstanceScript (Map *map)
 
 ~InstanceScript () override
 
virtual void Load (char const *data)
 
virtual void CreatureLooted (Creature *, LootType)
 
virtual std::string GetSaveData ()
 
void SaveToDB ()
 
virtual bool IsEncounterInProgress () const
 
void OnCreatureCreate (Creature *creature) override
 
void OnCreatureRemove (Creature *creature) override
 
void OnGameObjectCreate (GameObject *go) override
 
void OnGameObjectRemove (GameObject *go) override
 
ObjectGuid GetObjectGuid (uint32 type) const
 
ObjectGuid GetGuidData (uint32 type) const override
 
Creature * GetCreature (uint32 type)
 
GameObject * GetGameObject (uint32 type)
 
virtual void OnPlayerLeave (Player *)
 
virtual void OnPlayerAreaUpdate (Player *, uint32, uint32)
 
virtual void OnPlayerInWaterStateUpdate (Player *, bool)
 
void HandleGameObject (ObjectGuid guid, bool open, GameObject *go=nullptr)
 Open or close a GameObject by GUID.
 
void HandleGameObject (uint32 type, bool open)
 Open or close a GameObject registered via LoadObjectData.
 
void DoUseDoorOrButton (ObjectGuid guid, uint32 withRestoreTime=0, bool useAlternativeState=false)
 
void DoRespawnGameObject (ObjectGuid guid, uint32 timeToDespawn=MINUTE)
 
void DoRespawnGameObject (uint32 type)
 
void DoRespawnCreature (ObjectGuid guid, bool force=false)
 
void DoRespawnCreature (uint32 type, bool force=false)
 
void DoUpdateWorldState (uint32 worldstateId, uint32 worldstateValue)
 
void DoSendNotifyToInstance (char const *format,...)
 
void DoUpdateAchievementCriteria (AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, Unit *unit=nullptr)
 
void DoStartTimedAchievement (AchievementCriteriaTimedTypes type, uint32 entry)
 
void DoStopTimedAchievement (AchievementCriteriaTimedTypes type, uint32 entry)
 
void DoRemoveAurasDueToSpellOnPlayers (uint32 spell)
 
void DoCastSpellOnPlayers (uint32 spell)
 
void DoCastSpellOnPlayer (Player *player, uint32 spell, bool includePets, bool includeControlled)
 
bool ServerAllowsTwoSideGroups ()
 
EncounterState GetBossState (uint32 id) const
 
void RegisterBossSpawn (ObjectGuid::LowType spawnId, uint32 bossId)
 
bool IsBossSpawnDone (ObjectGuid::LowType spawnId) const
 
CreatureBoundary const * GetBossBoundary (uint32 id) const
 
BossInfo const * GetBossInfo (uint32 id) const
 
uint32 GetPersistentData (uint32 index) const
 
void StorePersistentData (uint32 index, uint32 data)
 
virtual bool CheckRequiredBosses (uint32, Player const *=nullptr) const
 
bool _SkipCheckRequiredBosses (Player const *player=nullptr) const
 
void SetCompletedEncountersMask (uint32 newMask, bool save)
 
uint32 GetCompletedEncounterMask () const
 
void SendEncounterUnit (uint32 type, Unit *unit=nullptr, uint8 param1=0, uint8 param2=0)
 
virtual void FillInitialWorldStates (WorldPackets::WorldState::InitWorldStates &)
 
uint32 GetEncounterCount () const
 
void MarkAreaTriggerDone (uint32 id)
 
void ResetAreaTriggerDone (uint32 id)
 
bool IsAreaTriggerDone (uint32 id) const
 
virtual void DoAction (int32)
 
void DoForAllMinions (uint32 id, std::function< void(Creature *)> exec)
 
void StoreGameObjectState (ObjectGuid::LowType spawnId, uint8 state)
 
uint8 GetStoredGameObjectState (ObjectGuid::LowType spawnId) const
 
void LoadInstanceSavedGameobjectStateData ()
 
bool IsBossDone (uint32 bossId) const
 
bool AllBossesDone () const
 
bool AllBossesDone (std::initializer_list< uint32 > bossIds) const
 
TeamId GetTeamIdInInstance () const
 
void SetTeamIdInInstance (TeamId teamId)
 
bool IsTwoFactionInstance () const
 
- Public Member Functions inherited from ZoneScript
 ZoneScript ()
 
virtual ~ZoneScript ()
 
virtual uint32 GetCreatureEntry (ObjectGuid::LowType, CreatureData const *data)
 
virtual uint32 GetGameObjectEntry (ObjectGuid::LowType, uint32 entry)
 
virtual void OnCreatureEvade (Creature *)
 
virtual void SetGuidData (uint32, ObjectGuid)
 
virtual uint64 GetData64 (uint32) const
 
virtual void SetData64 (uint32, uint64)
 
virtual void ProcessEvent (WorldObject *, uint32)
 

Private Member Functions

void CreatureTalk (uint32 type, uint8 textId)
 
void StartAttack (uint32 type)
 
bool SetBeastDead (uint8 beastMask)
 
uint32 GetBarrettEntry () const
 
void SummonBarrett ()
 
void SpawnAnubArak ()
 
void SummonFactionChampions ()
 
uint32 GetCrusadersCacheEntry () const
 
uint32 GetTributeChestEntry () const
 
template<typename Predicate >
std::size_t CountCreaturesNearTirion (uint32 entry, Predicate &&predicate)
 
bool IsValidDedicatedInsanityItem (ItemTemplate const *item) const
 
void DoCheckDedicatedInsanity ()
 
void DespawnChampionPets ()
 
void DespawnBeastsCombatStalker ()
 
void SetSnoboldCarrier (Player *player, bool apply)
 
void SetSnoboldCarriers (bool apply)
 
bool DoNeedCleanup (Player *ignoredPlayer=nullptr)
 
void InstanceCleanup (bool fromFailed=false)
 

Private Attributes

bool _cleaned
 
uint32 _instanceProgress
 
uint32 _attemptsLeft
 
uint8 _killCounter
 
uint8 _northrendBeastsMask
 
Seconds _achievementTimer
 
bool _dedicatedInsanity
 
bool _checkDedicatedInsanity
 
bool _noOneDied
 
EventMap _events
 
GuidVector _championGUIDs
 
GuidVector _championPetGUIDs
 
ObjectGuid _purpleGroundGUID
 
ObjectGuid _portalGUID
 

Additional Inherited Members

- Static Public Member Functions inherited from InstanceScript
static std::string GetBossStateName (uint8 state)
 
- Public Attributes inherited from InstanceScript
Map * instance
 
TaskScheduler scheduler
 
- Protected Member Functions inherited from InstanceScript
void SetHeaders (std::string const &dataHeaders)
 
void SetBossNumber (uint32 number)
 
void SetPersistentDataCount (uint32 number)
 
void LoadBossBoundaries (BossBoundaryData const &data)
 
void LoadDoorData (DoorData const *data)
 
void LoadMinionData (MinionData const *data)
 
void LoadObjectData (ObjectData const *creatureData, ObjectData const *gameObjectData)
 
void LoadSummonData (ObjectData const *data)
 
void SetSummoner (Creature *creature)
 
void AddObject (Creature *obj, bool add=true)
 
void RemoveObject (Creature *obj)
 
void AddObject (GameObject *obj, bool add=true)
 
void RemoveObject (GameObject *obj)
 
void AddObject (WorldObject *obj, uint32 type, bool add=true)
 
void RemoveObject (WorldObject *obj, uint32 type)
 
void AddDoor (GameObject *door, bool add=true)
 
void RemoveDoor (GameObject *door)
 
void AddMinion (Creature *minion, bool add=true)
 
void RemoveMinion (Creature *minion)
 
void UpdateDoorState (GameObject *door)
 
void UpdateMinionState (Creature *minion, EncounterState state)
 
bool ReadSaveDataHeaders (std::istringstream &data)
 
void ReadSaveDataBossStates (std::istringstream &data)
 
void ReadSavePersistentData (std::istringstream &data)
 
void WriteSaveDataHeaders (std::ostringstream &data)
 
void WriteSaveDataBossStates (std::ostringstream &data)
 
void WritePersistentData (std::ostringstream &data)
 

Detailed Description

Constructor & Destructor Documentation

◆ instance_trial_of_the_crusader()

instance_trial_of_the_crusader::instance_trial_of_the_crusader ( Map *  map)
inline
115 : InstanceScript(map)
116 {
120 Initialize();
121 }
#define DataHeader
Definition blackrock_depths.h:23
Definition InstanceScript.h:143
void SetBossNumber(uint32 number)
Definition InstanceScript.h:311
void SetHeaders(std::string const &dataHeaders)
Definition InstanceScript.cpp:169
void LoadObjectData(ObjectData const *creatureData, ObjectData const *gameObjectData)
Definition InstanceScript.cpp:204
@ MAX_ENCOUNTERS
Definition deadmines.h:30
ObjectData const gameObjectData[]
Definition instance_trial_of_the_crusader.cpp:104
ObjectData const creatureData[]
Definition instance_trial_of_the_crusader.cpp:79
void Initialize() override
Definition instance_trial_of_the_crusader.cpp:123

References creatureData, DataHeader, gameObjectData, Initialize(), InstanceScript::LoadObjectData(), MAX_ENCOUNTERS, InstanceScript::SetBossNumber(), and InstanceScript::SetHeaders().

Member Function Documentation

◆ CheckAchievementCriteriaMeet()

bool instance_trial_of_the_crusader::CheckAchievementCriteriaMeet ( uint32  criteriaId,
Player const *  ,
Unit const *  ,
uint32   
)
inlineoverridevirtual

Reimplemented from InstanceScript.

950 {
951 switch (criteriaId)
952 {
955 return CountCreaturesNearTirion(NPC_SNOBOLD_VASSAL, [](Creature const* snobold) { return snobold->GetVehicle() != nullptr; }) >= 2;
958 return CountCreaturesNearTirion(NPC_SNOBOLD_VASSAL, [](Creature const* snobold) { return snobold->GetVehicle() != nullptr; }) >= 4;
963 return CountCreaturesNearTirion(NPC_MISTRESS_OF_PAIN, [](Creature const* mistress) { return mistress->IsAlive(); }) >= 2;
966 return _attemptsLeft >= 25;
969 return _attemptsLeft >= 45;
973 return _attemptsLeft == MAX_ATTEMPTS;
979 default:
980 return false;
981 }
982 }
Definition Creature.h:47
Vehicle * GetVehicle() const
Definition Unit.h:1948
bool IsAlive() const
Definition Unit.h:1812
@ MAX_ATTEMPTS
Definition instance_trial_of_the_crusader.cpp:37
bool _dedicatedInsanity
Definition instance_trial_of_the_crusader.cpp:1407
std::size_t CountCreaturesNearTirion(uint32 entry, Predicate &&predicate)
Definition instance_trial_of_the_crusader.cpp:1176
uint32 _attemptsLeft
Definition instance_trial_of_the_crusader.cpp:1403
bool _noOneDied
Definition instance_trial_of_the_crusader.cpp:1409
@ NPC_MISTRESS_OF_PAIN
Definition trial_of_the_crusader.h:191
@ NPC_SNOBOLD_VASSAL
Definition trial_of_the_crusader.h:185
@ ACHIEV_CRITERIA_THREE_SIXTY_PAIN_SPIKE_25_H
Definition trial_of_the_crusader.h:438
@ ACHIEV_CRITERIA_A_TRIBUTE_TO_SKILL_10_PLAYER
Definition trial_of_the_crusader.h:440
@ ACHIEV_CRITERIA_UPPER_BACK_PAIN_25_H
Definition trial_of_the_crusader.h:434
@ ACHIEV_CRITERIA_A_TRIBUTE_TO_INSANITY_10_PLAYER
Definition trial_of_the_crusader.h:444
@ ACHIEV_CRITERIA_A_TRIBUTE_TO_INSANITY_25_PLAYER
Definition trial_of_the_crusader.h:445
@ ACHIEV_CRITERIA_A_TRIBUTE_TO_DEDICATED_INSANITY
Definition trial_of_the_crusader.h:448
@ ACHIEV_CRITERIA_A_TRIBUTE_TO_IMMORTALITY_ALLIANCE
Definition trial_of_the_crusader.h:447
@ ACHIEV_CRITERIA_REALM_FIRST_GRAND_CRUSADER
Definition trial_of_the_crusader.h:449
@ ACHIEV_CRITERIA_A_TRIBUTE_TO_SKILL_25_PLAYER
Definition trial_of_the_crusader.h:441
@ ACHIEV_CRITERIA_A_TRIBUTE_TO_MAD_SKILL_25_PLAYER
Definition trial_of_the_crusader.h:443
@ ACHIEV_CRITERIA_A_TRIBUTE_TO_MAD_SKILL_10_PLAYER
Definition trial_of_the_crusader.h:442
@ ACHIEV_CRITERIA_THREE_SIXTY_PAIN_SPIKE_25_N
Definition trial_of_the_crusader.h:437
@ ACHIEV_CRITERIA_UPPER_BACK_PAIN_10_N
Definition trial_of_the_crusader.h:431
@ ACHIEV_CRITERIA_THREE_SIXTY_PAIN_SPIKE_10_H
Definition trial_of_the_crusader.h:436
@ ACHIEV_CRITERIA_THREE_SIXTY_PAIN_SPIKE_10_N
Definition trial_of_the_crusader.h:435
@ ACHIEV_CRITERIA_UPPER_BACK_PAIN_25_N
Definition trial_of_the_crusader.h:433
@ ACHIEV_CRITERIA_UPPER_BACK_PAIN_10_H
Definition trial_of_the_crusader.h:432
@ ACHIEV_CRITERIA_A_TRIBUTE_TO_IMMORTALITY_HORDE
Definition trial_of_the_crusader.h:446

References _attemptsLeft, _dedicatedInsanity, _noOneDied, ACHIEV_CRITERIA_A_TRIBUTE_TO_DEDICATED_INSANITY, ACHIEV_CRITERIA_A_TRIBUTE_TO_IMMORTALITY_ALLIANCE, ACHIEV_CRITERIA_A_TRIBUTE_TO_IMMORTALITY_HORDE, ACHIEV_CRITERIA_A_TRIBUTE_TO_INSANITY_10_PLAYER, ACHIEV_CRITERIA_A_TRIBUTE_TO_INSANITY_25_PLAYER, ACHIEV_CRITERIA_A_TRIBUTE_TO_MAD_SKILL_10_PLAYER, ACHIEV_CRITERIA_A_TRIBUTE_TO_MAD_SKILL_25_PLAYER, ACHIEV_CRITERIA_A_TRIBUTE_TO_SKILL_10_PLAYER, ACHIEV_CRITERIA_A_TRIBUTE_TO_SKILL_25_PLAYER, ACHIEV_CRITERIA_REALM_FIRST_GRAND_CRUSADER, ACHIEV_CRITERIA_THREE_SIXTY_PAIN_SPIKE_10_H, ACHIEV_CRITERIA_THREE_SIXTY_PAIN_SPIKE_10_N, ACHIEV_CRITERIA_THREE_SIXTY_PAIN_SPIKE_25_H, ACHIEV_CRITERIA_THREE_SIXTY_PAIN_SPIKE_25_N, ACHIEV_CRITERIA_UPPER_BACK_PAIN_10_H, ACHIEV_CRITERIA_UPPER_BACK_PAIN_10_N, ACHIEV_CRITERIA_UPPER_BACK_PAIN_25_H, ACHIEV_CRITERIA_UPPER_BACK_PAIN_25_N, CountCreaturesNearTirion(), Unit::GetVehicle(), Unit::IsAlive(), MAX_ATTEMPTS, NPC_MISTRESS_OF_PAIN, and NPC_SNOBOLD_VASSAL.

◆ CountCreaturesNearTirion()

template<typename Predicate >
std::size_t instance_trial_of_the_crusader::CountCreaturesNearTirion ( uint32  entry,
Predicate &&  predicate 
)
inlineprivate
1177 {
1178 Creature* tirion = GetCreature(DATA_TIRION);
1179 if (!tirion)
1180 return 0;
1181
1182 std::list<Creature*> creatures;
1183 tirion->GetCreaturesWithEntryInRange(creatures, 200.0f, entry);
1184 return static_cast<std::size_t>(std::count_if(creatures.begin(), creatures.end(), predicate));
1185 }
creatures
Definition boss_prince_malchezaar.cpp:51
Creature * GetCreature(uint32 type)
Definition InstanceScript.cpp:126
void GetCreaturesWithEntryInRange(std::list< Creature * > &creatureList, float radius, uint32 entry)
Definition Object.cpp:3127
@ DATA_TIRION
Definition trial_of_the_crusader.h:59

References DATA_TIRION, InstanceScript::GetCreature(), and WorldObject::GetCreaturesWithEntryInRange().

Referenced by CheckAchievementCriteriaMeet().

◆ CreatureTalk()

void instance_trial_of_the_crusader::CreatureTalk ( uint32  type,
uint8  textId 
)
inlineprivate
986 {
987 if (Creature* creature = GetCreature(type))
988 creature->AI()->Talk(textId);
989 }

References InstanceScript::GetCreature().

Referenced by SetData(), and Update().

◆ DespawnBeastsCombatStalker()

void instance_trial_of_the_crusader::DespawnBeastsCombatStalker ( )
inlineprivate
1237 {
1239 stalker->DespawnOrUnsummon();
1240 }
@ DATA_BEASTS_COMBAT_STALKER
Definition trial_of_the_crusader.h:67

References DATA_BEASTS_COMBAT_STALKER, and InstanceScript::GetCreature().

Referenced by InstanceCleanup(), and SetBossState().

◆ DespawnChampionPets()

void instance_trial_of_the_crusader::DespawnChampionPets ( )
inlineprivate
1229 {
1230 for (ObjectGuid const& guid : _championPetGUIDs)
1231 if (Creature* pet = instance->GetCreature(guid))
1232 pet->DespawnOrUnsummon();
1233 _championPetGUIDs.clear();
1234 }
Map * instance
Definition InstanceScript.h:149
Definition ObjectGuid.h:121
GuidVector _championPetGUIDs
Definition instance_trial_of_the_crusader.cpp:1414

References _championPetGUIDs, Map::GetCreature(), and InstanceScript::instance.

Referenced by InstanceCleanup(), and SetBossState().

◆ DoCheckDedicatedInsanity()

void instance_trial_of_the_crusader::DoCheckDedicatedInsanity ( )
inlineprivate
1204 {
1205 if (!_dedicatedInsanity || _attemptsLeft < MAX_ATTEMPTS || instance->GetDifficulty() != RAID_DIFFICULTY_10MAN_HEROIC)
1206 return;
1207
1208 for (auto const& itr : instance->GetPlayers())
1209 {
1210 // Out of combat players are skipped to keep the periodic scan cheap
1211 Player* player = itr.GetSource();
1212 if (!player || player->IsGameMaster() || !player->IsInCombat())
1213 continue;
1214
1215 for (uint8 slot = EQUIPMENT_SLOT_START; slot < EQUIPMENT_SLOT_END; ++slot)
1216 {
1217 Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot);
1218 if (item && !IsValidDedicatedInsanityItem(item->GetTemplate()))
1219 {
1220 _dedicatedInsanity = false;
1221 SaveToDB();
1222 return;
1223 }
1224 }
1225 }
1226 }
@ RAID_DIFFICULTY_10MAN_HEROIC
Definition DBCEnums.h:275
std::uint8_t uint8
Definition Define.h:109
@ EQUIPMENT_SLOT_END
Definition Player.h:681
@ EQUIPMENT_SLOT_START
Definition Player.h:661
#define INVENTORY_SLOT_BAG_0
Definition Player.h:657
void SaveToDB()
Definition InstanceScript.cpp:43
Definition Item.h:220
ItemTemplate const * GetTemplate() const
Definition Item.cpp:538
Definition Player.h:1086
Item * GetItemByPos(uint16 pos) const
Definition PlayerStorage.cpp:445
bool IsGameMaster() const
Definition Player.h:1178
bool IsInCombat() const
Definition Unit.h:949
HashMapHolder< Player >::MapType const & GetPlayers()
Definition ObjectAccessor.cpp:99
bool IsValidDedicatedInsanityItem(ItemTemplate const *item) const
Definition instance_trial_of_the_crusader.cpp:1187

References _dedicatedInsanity, EQUIPMENT_SLOT_END, EQUIPMENT_SLOT_START, Player::GetItemByPos(), Map::GetPlayers(), Item::GetTemplate(), InstanceScript::instance, INVENTORY_SLOT_BAG_0, Player::IsGameMaster(), Unit::IsInCombat(), IsValidDedicatedInsanityItem(), RAID_DIFFICULTY_10MAN_HEROIC, and InstanceScript::SaveToDB().

Referenced by Update().

◆ DoNeedCleanup()

bool instance_trial_of_the_crusader::DoNeedCleanup ( Player *  ignoredPlayer = nullptr)
inlineprivate
1282 {
1283 for (auto const& itr : instance->GetPlayers())
1284 {
1285 Player* player = itr.GetSource();
1286 if (player && player != ignoredPlayer && player->IsAlive() && !player->IsGameMaster())
1287 {
1288 _cleaned = false;
1289 return false;
1290 }
1291 }
1292
1293 return true;
1294 }
bool _cleaned
Definition instance_trial_of_the_crusader.cpp:1401

References _cleaned, Map::GetPlayers(), InstanceScript::instance, Unit::IsAlive(), and Player::IsGameMaster().

Referenced by OnPlayerEnter(), and Update().

◆ GetBarrettEntry()

uint32 instance_trial_of_the_crusader::GetBarrettEntry ( ) const
inlineprivate
1018 {
1019 switch (_instanceProgress)
1020 {
1026 return NPC_BARRETT_JARAXXUS;
1030 return NPC_BARRETT_VALKYR;
1032 return NPC_BARRETT_LICH_KING;
1033 default:
1034 return 0;
1035 }
1036 }
bool IsHeroic() const
Definition Map.h:303
uint32 _instanceProgress
Definition instance_trial_of_the_crusader.cpp:1402
@ INSTANCE_PROGRESS_INITIAL
Definition trial_of_the_champion.h:52
@ NPC_BARRETT_FACTION_CHAMPIONS
Definition trial_of_the_crusader.h:171
@ NPC_BARRETT_JARAXXUS
Definition trial_of_the_crusader.h:170
@ NPC_BARRETT_VALKYR
Definition trial_of_the_crusader.h:172
@ NPC_BARRETT_BEASTS
Definition trial_of_the_crusader.h:168
@ NPC_BARRETT_LICH_KING
Definition trial_of_the_crusader.h:173
@ NPC_BARRETT_BEASTS_HC
Definition trial_of_the_crusader.h:169
@ INSTANCE_PROGRESS_INTRO_DONE
Definition trial_of_the_crusader.h:84
@ INSTANCE_PROGRESS_BEASTS_DEAD
Definition trial_of_the_crusader.h:85
@ INSTANCE_PROGRESS_VALKYR_DEAD
Definition trial_of_the_crusader.h:89
@ INSTANCE_PROGRESS_JARAXXUS_DEAD
Definition trial_of_the_crusader.h:87
@ INSTANCE_PROGRESS_FACTION_CHAMPIONS_DEAD
Definition trial_of_the_crusader.h:88
@ INSTANCE_PROGRESS_JARAXXUS_INTRO_DONE
Definition trial_of_the_crusader.h:86

References _instanceProgress, InstanceScript::instance, INSTANCE_PROGRESS_BEASTS_DEAD, INSTANCE_PROGRESS_FACTION_CHAMPIONS_DEAD, INSTANCE_PROGRESS_INITIAL, INSTANCE_PROGRESS_INTRO_DONE, INSTANCE_PROGRESS_JARAXXUS_DEAD, INSTANCE_PROGRESS_JARAXXUS_INTRO_DONE, INSTANCE_PROGRESS_VALKYR_DEAD, Map::IsHeroic(), NPC_BARRETT_BEASTS, NPC_BARRETT_BEASTS_HC, NPC_BARRETT_FACTION_CHAMPIONS, NPC_BARRETT_JARAXXUS, NPC_BARRETT_LICH_KING, and NPC_BARRETT_VALKYR.

Referenced by SummonBarrett().

◆ GetCrusadersCacheEntry()

uint32 instance_trial_of_the_crusader::GetCrusadersCacheEntry ( ) const
inlineprivate
1144 {
1145 switch (instance->GetDifficulty())
1146 {
1148 return GO_CRUSADERS_CACHE_10;
1150 return GO_CRUSADERS_CACHE_25;
1155 default:
1156 return 0;
1157 }
1158 }
@ RAID_DIFFICULTY_25MAN_HEROIC
Definition DBCEnums.h:276
@ RAID_DIFFICULTY_10MAN_NORMAL
Definition DBCEnums.h:273
@ RAID_DIFFICULTY_25MAN_NORMAL
Definition DBCEnums.h:274
Difficulty GetDifficulty() const
Definition Map.h:294
@ GO_CRUSADERS_CACHE_10_H
Definition trial_of_the_crusader.h:247
@ GO_CRUSADERS_CACHE_10
Definition trial_of_the_crusader.h:245
@ GO_CRUSADERS_CACHE_25_H
Definition trial_of_the_crusader.h:248
@ GO_CRUSADERS_CACHE_25
Definition trial_of_the_crusader.h:246

References Map::GetDifficulty(), GO_CRUSADERS_CACHE_10, GO_CRUSADERS_CACHE_10_H, GO_CRUSADERS_CACHE_25, GO_CRUSADERS_CACHE_25_H, InstanceScript::instance, RAID_DIFFICULTY_10MAN_HEROIC, RAID_DIFFICULTY_10MAN_NORMAL, RAID_DIFFICULTY_25MAN_HEROIC, and RAID_DIFFICULTY_25MAN_NORMAL.

Referenced by SetBossState().

◆ GetData()

uint32 instance_trial_of_the_crusader::GetData ( uint32  type) const
inlineoverridevirtual

Reimplemented from ZoneScript.

316 {
317 if (type == TYPE_INSTANCE_PROGRESS)
318 return _instanceProgress;
319
320 return 0;
321 }
@ TYPE_INSTANCE_PROGRESS
Definition trial_of_the_crusader.h:42

References _instanceProgress, and TYPE_INSTANCE_PROGRESS.

◆ GetTributeChestEntry()

uint32 instance_trial_of_the_crusader::GetTributeChestEntry ( ) const
inlineprivate
1161 {
1162 if (!instance->IsHeroic())
1163 return 0;
1164
1165 bool const is25Man = instance->Is25ManRaid();
1168 if (_attemptsLeft >= 45)
1170 if (_attemptsLeft >= 25)
1173 }
bool Is25ManRaid() const
Definition Map.h:304
@ GO_TRIBUTE_CHEST_10H_99
Definition trial_of_the_crusader.h:254
@ GO_TRIBUTE_CHEST_25H_25
Definition trial_of_the_crusader.h:255
@ GO_TRIBUTE_CHEST_25H_99
Definition trial_of_the_crusader.h:258
@ GO_TRIBUTE_CHEST_25H_45
Definition trial_of_the_crusader.h:256
@ GO_TRIBUTE_CHEST_10H_45
Definition trial_of_the_crusader.h:252
@ GO_TRIBUTE_CHEST_25H_50
Definition trial_of_the_crusader.h:257
@ GO_TRIBUTE_CHEST_10H_25
Definition trial_of_the_crusader.h:251
@ GO_TRIBUTE_CHEST_10H_50
Definition trial_of_the_crusader.h:253

References _attemptsLeft, GO_TRIBUTE_CHEST_10H_25, GO_TRIBUTE_CHEST_10H_45, GO_TRIBUTE_CHEST_10H_50, GO_TRIBUTE_CHEST_10H_99, GO_TRIBUTE_CHEST_25H_25, GO_TRIBUTE_CHEST_25H_45, GO_TRIBUTE_CHEST_25H_50, GO_TRIBUTE_CHEST_25H_99, InstanceScript::instance, Map::Is25ManRaid(), Map::IsHeroic(), and MAX_ATTEMPTS.

Referenced by Update().

◆ Initialize()

void instance_trial_of_the_crusader::Initialize ( )
inlineoverridevirtual

Reimplemented from InstanceScript.

124 {
125 _cleaned = false;
128 _killCounter = 0;
131 _dedicatedInsanity = true;
133 _noOneDied = true;
134 _events.Reset();
136
137 _championGUIDs.clear();
138 _championPetGUIDs.clear();
139 }
void RescheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:70
void Reset()
Definition EventMap.cpp:21
uint8 _killCounter
Definition instance_trial_of_the_crusader.cpp:1404
GuidVector _championGUIDs
Definition instance_trial_of_the_crusader.cpp:1412
uint8 _northrendBeastsMask
Definition instance_trial_of_the_crusader.cpp:1405
Seconds _achievementTimer
Definition instance_trial_of_the_crusader.cpp:1406
EventMap _events
Definition instance_trial_of_the_crusader.cpp:1410
bool _checkDedicatedInsanity
Definition instance_trial_of_the_crusader.cpp:1408
@ EVENT_CHECK_PLAYERS
Definition trial_of_the_champion.h:67

References _achievementTimer, _attemptsLeft, _championGUIDs, _championPetGUIDs, _checkDedicatedInsanity, _cleaned, _dedicatedInsanity, _events, _instanceProgress, _killCounter, _noOneDied, _northrendBeastsMask, EVENT_CHECK_PLAYERS, INSTANCE_PROGRESS_INITIAL, MAX_ATTEMPTS, EventMap::RescheduleEvent(), and EventMap::Reset().

Referenced by instance_trial_of_the_crusader().

◆ InstanceCleanup()

void instance_trial_of_the_crusader::InstanceCleanup ( bool  fromFailed = false)
inlineprivate
1297 {
1298 if (_cleaned)
1299 return;
1300 _cleaned = true;
1301
1302 // Read before the switch: the Jaraxxus respawned below sets his boss state back to NOT_STARTED in Reset()
1303 bool const encounterInProgress = IsEncounterInProgress();
1304
1305 switch (_instanceProgress)
1306 {
1308 if (Creature* gormok = GetCreature(DATA_GORMOK))
1309 {
1310 gormok->AI()->DoAction(ACTION_DESPAWN_SUMMONS);
1311 gormok->DespawnOrUnsummon();
1312 }
1314 if (Creature* beast = GetCreature(type))
1315 beast->DespawnOrUnsummon();
1318 SetSnoboldCarriers(false);
1319 break;
1321 for (uint32 type : { DATA_FIZZLEBANG, DATA_JARAXXUS })
1322 if (Creature* creature = GetCreature(type))
1323 creature->DespawnOrUnsummon();
1324 if (Creature* purpleGround = instance->GetCreature(_purpleGroundGUID))
1325 purpleGround->DespawnOrUnsummon();
1327 if (Creature* portal = instance->GetCreature(_portalGUID))
1328 portal->DespawnOrUnsummon();
1330 break;
1332 if (Creature* jaraxxus = GetCreature(DATA_JARAXXUS))
1333 jaraxxus->DespawnOrUnsummon();
1334 // Stays chained and unattackable until Barrett's gossip starts the retry
1335 if (Creature* tirion = GetCreature(DATA_TIRION))
1337 jaraxxus->CastSpell(jaraxxus, SPELL_JARAXXUS_CHAINS, true);
1338 // His Reset() has just set the state back to NOT_STARTED
1340 break;
1342 for (ObjectGuid const& guid : _championGUIDs)
1343 if (Creature* champion = instance->GetCreature(guid))
1344 champion->DespawnOrUnsummon();
1345 _championGUIDs.clear();
1347 break;
1349 for (uint32 type : { DATA_DARKBANE, DATA_LIGHTBANE })
1350 {
1351 if (Creature* valkyr = GetCreature(type))
1352 {
1353 valkyr->AI()->DoAction(ACTION_DESPAWN_SUMMONS);
1354 valkyr->DespawnOrUnsummon();
1355 }
1356 }
1357 break;
1360 if (Creature* tirion = GetCreature(DATA_TIRION))
1361 if (Creature* trigger = tirion->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f, true))
1362 trigger->DespawnOrUnsummon();
1363 if (Creature* lichKing = GetCreature(DATA_LICH_KING))
1364 lichKing->DespawnOrUnsummon();
1365
1366 if (Creature* anubarak = GetCreature(DATA_ANUBARAK))
1367 {
1368 anubarak->AI()->DoAction(ACTION_DESPAWN_SUMMONS);
1369 anubarak->DespawnOrUnsummon();
1370 // The removal is deferred; free the slot now so SpawnAnubArak() in OnPlayerEnter can resummon him
1371 RemoveObject(anubarak, DATA_ANUBARAK);
1372 }
1373 break;
1375 if (GameObject* floor = GetGameObject(DATA_FLOOR))
1376 floor->SetDestructibleState(GO_DESTRUCTIBLE_REBUILDING, nullptr, true);
1377 break;
1378 default:
1379 break;
1380 }
1381
1382 if (instance->IsHeroic() && _attemptsLeft > 0 && !fromFailed && encounterInProgress)
1383 {
1384 --_attemptsLeft;
1386 }
1387
1391 _killCounter = 0;
1392 // Barrett's gossip shows the retry text and options for encounters left at FAIL
1393 for (uint32 bossId = 0; bossId < MAX_ENCOUNTERS; ++bossId)
1394 if (GetBossState(bossId) == IN_PROGRESS)
1395 SetBossState(bossId, FAIL);
1396 SummonBarrett();
1397 _events.Reset();
1399 }
std::uint32_t uint32
Definition Define.h:107
@ IN_PROGRESS
Definition InstanceScript.h:59
@ FAIL
Definition InstanceScript.h:60
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
Definition Object.h:55
@ GO_DESTRUCTIBLE_REBUILDING
Definition SharedDefines.h:1634
@ WORLD_STATE_TRIAL_OF_THE_CRUSADER_UI_COUNT
Definition WorldStateDefines.h:596
@ DATA_ANUBARAK
Definition azjol_nerub.h:31
Definition GameObject.h:125
void HandleGameObject(ObjectGuid guid, bool open, GameObject *go=nullptr)
Open or close a GameObject by GUID.
Definition InstanceScript.cpp:136
void RemoveObject(Creature *obj)
Definition InstanceScript.cpp:307
EncounterState GetBossState(uint32 id) const
Definition InstanceScript.h:252
virtual bool IsEncounterInProgress() const
Definition InstanceScript.cpp:153
GameObject * GetGameObject(uint32 type)
Definition InstanceScript.cpp:131
void DoUpdateWorldState(uint32 worldstateId, uint32 worldstateValue)
Definition InstanceScript.cpp:645
Creature * GetCreature(ObjectGuid const &guid)
Definition Map.cpp:2442
void Clear()
Definition ObjectGuid.h:141
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition Object.cpp:2565
TempSummon * SummonCreature(uint32 id, Position const &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
Definition Object.cpp:2460
void SetSnoboldCarriers(bool apply)
Definition instance_trial_of_the_crusader.cpp:1273
void SummonBarrett()
Definition instance_trial_of_the_crusader.cpp:1039
ObjectGuid _portalGUID
Definition instance_trial_of_the_crusader.cpp:1416
void DespawnChampionPets()
Definition instance_trial_of_the_crusader.cpp:1228
void DespawnBeastsCombatStalker()
Definition instance_trial_of_the_crusader.cpp:1236
bool SetBossState(uint32 type, EncounterState state) override
Definition instance_trial_of_the_crusader.cpp:323
ObjectGuid _purpleGroundGUID
Definition instance_trial_of_the_crusader.cpp:1415
@ BOSS_JARAXXUS
Definition trial_of_the_crusader.h:32
@ DATA_WEB_DOOR
Definition trial_of_the_crusader.h:77
@ DATA_MAIN_GATE
Definition trial_of_the_crusader.h:75
@ DATA_DREADSCALE
Definition trial_of_the_crusader.h:64
@ DATA_LIGHTBANE
Definition trial_of_the_crusader.h:69
@ DATA_JARAXXUS
Definition trial_of_the_crusader.h:68
@ DATA_FLOOR
Definition trial_of_the_crusader.h:78
@ DATA_ACIDMAW
Definition trial_of_the_crusader.h:65
@ DATA_LICH_KING
Definition trial_of_the_crusader.h:71
@ DATA_ENTER_GATE
Definition trial_of_the_crusader.h:76
@ DATA_ICEHOWL
Definition trial_of_the_crusader.h:66
@ DATA_GORMOK
Definition trial_of_the_crusader.h:63
@ DATA_FIZZLEBANG
Definition trial_of_the_crusader.h:60
@ DATA_DARKBANE
Definition trial_of_the_crusader.h:70
@ LOC_CENTER
Definition trial_of_the_crusader.h:353
@ NPC_JARAXXUS
Definition trial_of_the_crusader.h:190
@ ACTION_DESPAWN_SUMMONS
Definition trial_of_the_crusader.h:383
@ SPELL_JARAXXUS_CHAINS
Definition trial_of_the_crusader.h:426
Position const Locs[]
Definition trial_of_the_crusader.h:320
@ INSTANCE_PROGRESS_DONE
Definition trial_of_the_crusader.h:91
@ INSTANCE_PROGRESS_ANUB_ARAK
Definition trial_of_the_crusader.h:90
@ NPC_WORLD_TRIGGER
Definition zulaman.cpp:725

References _attemptsLeft, _championGUIDs, _cleaned, _events, _instanceProgress, _killCounter, _northrendBeastsMask, _portalGUID, _purpleGroundGUID, ACTION_DESPAWN_SUMMONS, BOSS_JARAXXUS, ObjectGuid::Clear(), DATA_ACIDMAW, DATA_ANUBARAK, DATA_DARKBANE, DATA_DREADSCALE, DATA_ENTER_GATE, DATA_FIZZLEBANG, DATA_FLOOR, DATA_GORMOK, DATA_ICEHOWL, DATA_JARAXXUS, DATA_LICH_KING, DATA_LIGHTBANE, DATA_MAIN_GATE, DATA_TIRION, DATA_WEB_DOOR, DespawnBeastsCombatStalker(), DespawnChampionPets(), InstanceScript::DoUpdateWorldState(), EVENT_CHECK_PLAYERS, FAIL, WorldObject::FindNearestCreature(), InstanceScript::GetBossState(), Map::GetCreature(), InstanceScript::GetCreature(), InstanceScript::GetGameObject(), GO_DESTRUCTIBLE_REBUILDING, InstanceScript::HandleGameObject(), IN_PROGRESS, InstanceScript::instance, INSTANCE_PROGRESS_ANUB_ARAK, INSTANCE_PROGRESS_BEASTS_DEAD, INSTANCE_PROGRESS_DONE, INSTANCE_PROGRESS_FACTION_CHAMPIONS_DEAD, INSTANCE_PROGRESS_INTRO_DONE, INSTANCE_PROGRESS_JARAXXUS_DEAD, INSTANCE_PROGRESS_JARAXXUS_INTRO_DONE, INSTANCE_PROGRESS_VALKYR_DEAD, InstanceScript::IsEncounterInProgress(), Map::IsHeroic(), LOC_CENTER, Locs, MAX_ENCOUNTERS, NPC_JARAXXUS, NPC_WORLD_TRIGGER, InstanceScript::RemoveObject(), EventMap::RescheduleEvent(), EventMap::Reset(), SetBossState(), SetSnoboldCarriers(), SPELL_JARAXXUS_CHAINS, SummonBarrett(), WorldObject::SummonCreature(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, and WORLD_STATE_TRIAL_OF_THE_CRUSADER_UI_COUNT.

Referenced by OnPlayerEnter(), SetData(), and Update().

◆ IsValidDedicatedInsanityItem()

bool instance_trial_of_the_crusader::IsValidDedicatedInsanityItem ( ItemTemplate const *  item) const
inlineprivate
1188 {
1189 if (!item) // should not happen, but checked in GetAverageItemLevel()
1190 return true;
1191 if (item->ItemLevel < DEDICATED_INSANITY_ITEM_LEVEL)
1192 return true;
1193 // Too powerful to allow despite its item level
1194 if (item->ItemId == ITEM_VALANYR)
1195 return false;
1196 // Also covers the items crafted from patterns that drop in ToC 10 normal/heroic
1197 if (item->ItemLevel == DEDICATED_INSANITY_ITEM_LEVEL && item->Bonding == BIND_WHEN_EQUIPPED)
1198 return true;
1199
1200 return std::binary_search(DedicatedInsanityItems.begin(), DedicatedInsanityItems.end(), item->ItemId);
1201 }
@ BIND_WHEN_EQUIPPED
Definition ItemTemplate.h:97
@ ITEM_VALANYR
Definition instance_trial_of_the_crusader.cpp:36
@ DEDICATED_INSANITY_ITEM_LEVEL
Definition instance_trial_of_the_crusader.cpp:38
constexpr std::array< uint32, 405 > DedicatedInsanityItems
Definition instance_trial_of_the_crusader.cpp:61

References BIND_WHEN_EQUIPPED, ItemTemplate::Bonding, DEDICATED_INSANITY_ITEM_LEVEL, DedicatedInsanityItems, ITEM_VALANYR, ItemTemplate::ItemId, and ItemTemplate::ItemLevel.

Referenced by DoCheckDedicatedInsanity().

◆ OnCreatureCreate()

void instance_trial_of_the_crusader::OnCreatureCreate ( Creature *  creature)
inlineoverridevirtual

Reimplemented from ZoneScript.

142 {
144
145 switch (creature->GetEntry())
146 {
147 case NPC_ZHAAGRYM:
148 case NPC_CAT:
149 _championPetGUIDs.push_back(creature->GetGUID());
150 break;
151 default:
152 break;
153 }
154 }
void OnCreatureCreate(Creature *creature) override
Definition InstanceScript.cpp:75
uint32 GetEntry() const
Definition Object.h:123
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:120
@ NPC_CAT
Definition trial_of_the_crusader.h:228
@ NPC_ZHAAGRYM
Definition trial_of_the_crusader.h:227

References _championPetGUIDs, Object::GetEntry(), Object::GetGUID(), NPC_CAT, NPC_ZHAAGRYM, and InstanceScript::OnCreatureCreate().

◆ OnGameObjectCreate()

void instance_trial_of_the_crusader::OnGameObjectCreate ( GameObject *  go)
inlineoverridevirtual

Reimplemented from ZoneScript.

157 {
159
160 switch (go->GetEntry())
161 {
166 break;
167 case GO_WEB_DOOR:
170 break;
174 break;
175 default:
176 break;
177 }
178 }
@ GO_DESTRUCTIBLE_DAMAGED
Definition SharedDefines.h:1632
void SetDestructibleState(GameObjectDestructibleState state, Player *eventInvoker=nullptr, bool setHealth=false)
Definition GameObject.cpp:2445
void OnGameObjectCreate(GameObject *go) override
Definition InstanceScript.cpp:96
static ObjectGuid const Empty
Definition ObjectGuid.h:123
@ GO_SOUTH_PORTCULLIS
Definition trial_of_the_champion.h:170
@ GO_EAST_PORTCULLIS
Definition trial_of_the_champion.h:171
@ GO_NORTH_PORTCULLIS
Definition trial_of_the_champion.h:172
@ GO_ARGENT_COLISEUM_FLOOR
Definition trial_of_the_crusader.h:238
@ GO_MAIN_GATE_DOOR
Definition trial_of_the_crusader.h:239
@ GO_WEB_DOOR
Definition trial_of_the_crusader.h:240

References _instanceProgress, ObjectGuid::Empty, Object::GetEntry(), GO_ARGENT_COLISEUM_FLOOR, GO_DESTRUCTIBLE_DAMAGED, GO_EAST_PORTCULLIS, GO_MAIN_GATE_DOOR, GO_NORTH_PORTCULLIS, GO_SOUTH_PORTCULLIS, GO_WEB_DOOR, InstanceScript::HandleGameObject(), INSTANCE_PROGRESS_ANUB_ARAK, InstanceScript::OnGameObjectCreate(), and GameObject::SetDestructibleState().

◆ OnPlayerEnter()

void instance_trial_of_the_crusader::OnPlayerEnter ( Player *  player)
inlineoverridevirtual

Reimplemented from InstanceScript.

181 {
183
185 if (instance->IsHeroic())
187
188 if (DoNeedCleanup(player))
190
192 SetSnoboldCarrier(player, true);
193
194 // if missing spawn anub'arak
196
198 }
@ WORLD_STATE_TRIAL_OF_THE_CRUSADER_UI_SHOW
Definition WorldStateDefines.h:597
virtual void OnPlayerEnter(Player *)
Definition InstanceScript.cpp:63
void SendUpdateWorldState(uint32 variable, uint32 value) const
Definition PlayerUpdates.cpp:2298
void SpawnAnubArak()
Definition instance_trial_of_the_crusader.cpp:1054
bool DoNeedCleanup(Player *ignoredPlayer=nullptr)
Definition instance_trial_of_the_crusader.cpp:1281
void SetSnoboldCarrier(Player *player, bool apply)
Definition instance_trial_of_the_crusader.cpp:1243
void InstanceCleanup(bool fromFailed=false)
Definition instance_trial_of_the_crusader.cpp:1296
@ BOSS_NORTHREND_BEASTS
Definition trial_of_the_crusader.h:31

References _attemptsLeft, _events, BOSS_NORTHREND_BEASTS, DoNeedCleanup(), EVENT_CHECK_PLAYERS, InstanceScript::GetBossState(), IN_PROGRESS, InstanceScript::instance, InstanceCleanup(), Map::IsHeroic(), InstanceScript::OnPlayerEnter(), EventMap::RescheduleEvent(), Player::SendUpdateWorldState(), SetSnoboldCarrier(), SpawnAnubArak(), WORLD_STATE_TRIAL_OF_THE_CRUSADER_UI_COUNT, and WORLD_STATE_TRIAL_OF_THE_CRUSADER_UI_SHOW.

◆ OnUnitDeath()

void instance_trial_of_the_crusader::OnUnitDeath ( Unit *  unit)
inlineoverridevirtual

Reimplemented from ZoneScript.

201 {
202 if (_noOneDied && unit->IsPlayer())
203 {
204 _noOneDied = false;
205 SaveToDB();
206 }
207 }
bool IsPlayer() const
Definition Object.h:207

References _noOneDied, Object::IsPlayer(), and InstanceScript::SaveToDB().

◆ ReadSaveDataMore()

void instance_trial_of_the_crusader::ReadSaveDataMore ( std::istringstream &  data)
inlineoverridevirtual

Reimplemented from InstanceScript.

923 {
924 data >> _instanceProgress;
925
926 if (instance->IsHeroic())
927 {
928 uint32 dedicatedInsanity = 0;
929 uint32 noOneDied = 0;
930 data >> _attemptsLeft >> dedicatedInsanity >> noOneDied;
931 _dedicatedInsanity = dedicatedInsanity != 0;
932 _noOneDied = noOneDied != 0;
933 }
934 }

References _attemptsLeft, _dedicatedInsanity, _instanceProgress, _noOneDied, InstanceScript::instance, and Map::IsHeroic().

◆ SetBeastDead()

bool instance_trial_of_the_crusader::SetBeastDead ( uint8  beastMask)
inlineprivate
1008 {
1009 _northrendBeastsMask |= beastMask;
1011 return false;
1012
1014 return true;
1015 }
@ DONE
Definition InstanceScript.h:61
@ BEASTS_MASK_ALL_DEAD
Definition instance_trial_of_the_crusader.cpp:54

References _northrendBeastsMask, BEASTS_MASK_ALL_DEAD, BOSS_NORTHREND_BEASTS, DONE, and SetBossState().

Referenced by SetData().

◆ SetBossState()

bool instance_trial_of_the_crusader::SetBossState ( uint32  type,
EncounterState  state 
)
inlineoverridevirtual

Reimplemented from InstanceScript.

324 {
325 if (!InstanceScript::SetBossState(type, state))
326 return false;
327
328 switch (type)
329 {
331 if (state == DONE)
332 {
335 SetSnoboldCarriers(false);
340 SaveToDB();
341 }
342 break;
343 case BOSS_JARAXXUS:
344 if (state == IN_PROGRESS)
346 else if (state == DONE)
347 {
351 SaveToDB();
352 }
353 break;
355 if (state == DONE)
356 {
357 if (Creature* tirion = GetCreature(DATA_TIRION))
358 tirion->CastSpell(tirion, SPELL_FACTION_CHAMPIONS_KILL_CREDIT, true);
361
362 for (ObjectGuid const& guid : _championGUIDs)
363 if (Creature* champion = instance->GetCreature(guid))
364 champion->DespawnOrUnsummon(15s);
365 _championGUIDs.clear();
367
368 if (Creature* tirion = GetCreature(DATA_TIRION))
369 {
370 Position const& center = Locs[LOC_CENTER];
371 if (GameObject* cache = tirion->SummonGameObject(GetCrusadersCacheEntry(), center.GetPositionX(), center.GetPositionY(), center.GetPositionZ(), center.GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 630000000))
372 cache->SetLootRecipient(instance);
373 }
374
376
380
381 SaveToDB();
382 }
383 break;
384 case BOSS_TWIN_VALKYR:
385 if (state == DONE)
386 {
392 SaveToDB();
393 }
394 break;
395 case BOSS_ANUBARAK:
396 if (state == IN_PROGRESS)
398 else if (state == DONE)
399 {
403 SaveToDB();
404
405 if (Creature* tirion = GetCreature(DATA_TIRION))
406 {
407 tirion->UpdatePosition(Locs[LOC_TIRION_FINAL], true);
408 tirion->StopMovingOnCurrentPos();
409 tirion->SetFacingTo(Locs[LOC_TIRION_FINAL].GetOrientation());
411 }
412 if (GameObject* floor = GetGameObject(DATA_FLOOR))
413 floor->SetDestructibleState(GO_DESTRUCTIBLE_REBUILDING, nullptr, true);
414 }
415 break;
416 default:
417 break;
418 }
419
420 return true;
421 }
@ ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET
Definition DBCEnums.h:142
@ ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE
Definition DBCEnums.h:122
void CancelEvent(EventId eventId)
Definition EventMap.cpp:160
virtual bool SetBossState(uint32 id, EncounterState state)
Definition InstanceScript.cpp:406
void DoUpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, Unit *unit=nullptr)
Definition InstanceScript.cpp:680
GameObject * SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime, bool checkTransport=true, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
Definition Object.cpp:2474
Seconds GetGameTime()
Definition GameTime.cpp:39
Definition Position.h:27
float GetPositionZ() const
Definition Position.h:123
float GetOrientation() const
Definition Position.h:124
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122
uint32 GetCrusadersCacheEntry() const
Definition instance_trial_of_the_crusader.cpp:1143
@ BOSS_FACTION_CHAMPIONS
Definition trial_of_the_crusader.h:33
@ BOSS_TWIN_VALKYR
Definition trial_of_the_crusader.h:34
@ BOSS_ANUBARAK
Definition trial_of_the_crusader.h:35
@ LOC_TIRION_FINAL
Definition trial_of_the_crusader.h:367
@ NPC_LIGHTBANE
Definition trial_of_the_crusader.h:230
@ NPC_DARKBANE
Definition trial_of_the_crusader.h:231
@ SPELL_FACTION_CHAMPIONS_KILL_CREDIT
Definition trial_of_the_crusader.h:422
@ SPELL_RESILIENCE_WILL_FIX_IT_CREDIT
Definition trial_of_the_crusader.h:423
@ EVENT_SCENE_501
Definition trial_of_the_crusader.h:162
@ EVENT_SCENE_BEASTS_DONE
Definition trial_of_the_crusader.h:114
@ EVENT_SCENE_VALKYR_DEAD
Definition trial_of_the_crusader.h:149
@ EVENT_NORTHREND_BEASTS_ENRAGE
Definition trial_of_the_crusader.h:115
@ EVENT_SCENE_110
Definition trial_of_the_crusader.h:130
@ EVENT_SCENE_FACTION_CHAMPIONS_DEAD
Definition trial_of_the_crusader.h:142

References _achievementTimer, _championGUIDs, _events, _instanceProgress, _northrendBeastsMask, ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, BOSS_ANUBARAK, BOSS_FACTION_CHAMPIONS, BOSS_JARAXXUS, BOSS_NORTHREND_BEASTS, BOSS_TWIN_VALKYR, EventMap::CancelEvent(), DATA_ENTER_GATE, DATA_FLOOR, DATA_TIRION, DATA_WEB_DOOR, DespawnBeastsCombatStalker(), DespawnChampionPets(), DONE, InstanceScript::DoUpdateAchievementCriteria(), EVENT_NORTHREND_BEASTS_ENRAGE, EVENT_SCENE_110, EVENT_SCENE_501, EVENT_SCENE_BEASTS_DONE, EVENT_SCENE_FACTION_CHAMPIONS_DEAD, EVENT_SCENE_VALKYR_DEAD, Map::GetCreature(), InstanceScript::GetCreature(), GetCrusadersCacheEntry(), InstanceScript::GetGameObject(), GameTime::GetGameTime(), Position::GetOrientation(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), GO_DESTRUCTIBLE_REBUILDING, InstanceScript::HandleGameObject(), IN_PROGRESS, InstanceScript::instance, INSTANCE_PROGRESS_BEASTS_DEAD, INSTANCE_PROGRESS_DONE, INSTANCE_PROGRESS_FACTION_CHAMPIONS_DEAD, INSTANCE_PROGRESS_JARAXXUS_DEAD, INSTANCE_PROGRESS_VALKYR_DEAD, LOC_CENTER, LOC_TIRION_FINAL, Locs, NPC_DARKBANE, NPC_LIGHTBANE, EventMap::RescheduleEvent(), InstanceScript::SaveToDB(), InstanceScript::SetBossState(), SetSnoboldCarriers(), SPELL_FACTION_CHAMPIONS_KILL_CREDIT, SPELL_RESILIENCE_WILL_FIX_IT_CREDIT, and WorldObject::SummonGameObject().

Referenced by InstanceCleanup(), SetBeastDead(), SetData(), and Update().

◆ SetData()

void instance_trial_of_the_crusader::SetData ( uint32  type,
uint32  data 
)
inlineoverridevirtual

Reimplemented from ZoneScript.

210 {
211 switch (type)
212 {
213 case TYPE_FAILED:
214 if (instance->IsHeroic() && !_cleaned)
215 {
216 if (_attemptsLeft > 0)
219 }
220 InstanceCleanup(true);
221 SaveToDB();
222 break;
225 break;
226
227 switch (_instanceProgress)
228 {
231 break;
234 break;
237 break;
240 break;
243 break;
246 break;
249 break;
250 default:
251 break;
252 }
253 break;
254 case TYPE_GORMOK:
257 break;
258 case TYPE_JORMUNGAR:
259 if (data == DONE)
260 {
261 if (++_killCounter == 2)
262 {
263 if (Creature* acidmaw = GetCreature(DATA_ACIDMAW))
264 acidmaw->DespawnOrUnsummon(10s);
265 if (Creature* dreadscale = GetCreature(DATA_DREADSCALE))
266 dreadscale->DespawnOrUnsummon(10s);
270
273 }
274 else // first one died, start timer for achievement
276 }
277 else
279 break;
280 case TYPE_ICEHOWL:
281 if (data == DONE)
283 break;
285 if (data == DONE)
286 {
287 if (++_killCounter >= _championGUIDs.size())
289 else if (_killCounter == 1)
291 }
292 break;
295 for (ObjectGuid const& guid : _championGUIDs)
296 if (Creature* champion = instance->GetCreature(guid))
297 if (!champion->IsInCombat())
298 if (Unit* target = champion->SelectNearestTarget(200.0f))
299 champion->AI()->AttackStart(target);
300 break;
302 if (urand(0, 2) == 0)
303 {
306 else
308 }
309 break;
310 default:
311 break;
312 }
313 }
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
@ TEAM_HORDE
Definition SharedDefines.h:749
TeamId GetTeamIdInInstance() const
Definition InstanceScript.h:304
Definition Unit.h:670
@ BEASTS_MASK_JORMUNGARS_DEAD
Definition instance_trial_of_the_crusader.cpp:52
@ BEASTS_MASK_ICEHOWL_DEAD
Definition instance_trial_of_the_crusader.cpp:53
@ BEASTS_MASK_JORMUNGARS_RELEASED
Definition instance_trial_of_the_crusader.cpp:56
@ BEASTS_MASK_GORMOK_DEAD
Definition instance_trial_of_the_crusader.cpp:51
@ BEASTS_MASK_ICEHOWL_RELEASED
Definition instance_trial_of_the_crusader.cpp:57
void CreatureTalk(uint32 type, uint8 textId)
Definition instance_trial_of_the_crusader.cpp:985
bool SetBeastDead(uint8 beastMask)
Definition instance_trial_of_the_crusader.cpp:1007
@ DATA_VARIAN
Definition trial_of_the_crusader.h:62
@ DATA_GARROSH
Definition trial_of_the_crusader.h:61
@ SAY_GARROSH_KILL_ALLIANCE_PLAYER_1
Definition trial_of_the_crusader.h:298
@ SAY_VARIAN_KILL_HORDE_PLAYER_1
Definition trial_of_the_crusader.h:289
@ SPELL_JORMUNGAR_ACHIEV
Definition trial_of_the_crusader.h:421
@ EVENT_SCENE_005
Definition trial_of_the_crusader.h:106
@ EVENT_SCENE_101
Definition trial_of_the_crusader.h:118
@ EVENT_SCENE_201
Definition trial_of_the_crusader.h:135
@ EVENT_SCENE_401
Definition trial_of_the_crusader.h:151
@ EVENT_SCENE_301
Definition trial_of_the_crusader.h:144
@ EVENT_SCENE_001
Definition trial_of_the_crusader.h:100
@ EVENT_JARAXXUS_ATTACK
Definition trial_of_the_crusader.h:129
@ EVENT_SCENE_004
Definition trial_of_the_crusader.h:103
@ EVENT_SCENE_006
Definition trial_of_the_crusader.h:111
@ TYPE_ANNOUNCER_GOSSIP_SELECT
Definition trial_of_the_crusader.h:43
@ TYPE_ICEHOWL
Definition trial_of_the_crusader.h:48
@ TYPE_FAILED
Definition trial_of_the_crusader.h:44
@ TYPE_FACTION_CHAMPIONS
Definition trial_of_the_crusader.h:49
@ TYPE_FACTION_CHAMPIONS_PLAYER_DIED
Definition trial_of_the_crusader.h:50
@ TYPE_FACTION_CHAMPIONS_START
Definition trial_of_the_crusader.h:52
@ TYPE_GORMOK
Definition trial_of_the_crusader.h:46
@ TYPE_JORMUNGAR
Definition trial_of_the_crusader.h:47

References _achievementTimer, _attemptsLeft, _championGUIDs, _cleaned, _events, _instanceProgress, _killCounter, _northrendBeastsMask, ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, BEASTS_MASK_GORMOK_DEAD, BEASTS_MASK_ICEHOWL_DEAD, BEASTS_MASK_ICEHOWL_RELEASED, BEASTS_MASK_JORMUNGARS_DEAD, BEASTS_MASK_JORMUNGARS_RELEASED, BOSS_FACTION_CHAMPIONS, CreatureTalk(), DATA_ACIDMAW, DATA_DREADSCALE, DATA_GARROSH, DATA_VARIAN, DONE, InstanceScript::DoUpdateAchievementCriteria(), InstanceScript::DoUpdateWorldState(), EVENT_JARAXXUS_ATTACK, EVENT_SCENE_001, EVENT_SCENE_004, EVENT_SCENE_005, EVENT_SCENE_006, EVENT_SCENE_101, EVENT_SCENE_201, EVENT_SCENE_301, EVENT_SCENE_401, Map::GetCreature(), InstanceScript::GetCreature(), GameTime::GetGameTime(), InstanceScript::GetTeamIdInInstance(), InstanceScript::instance, INSTANCE_PROGRESS_BEASTS_DEAD, INSTANCE_PROGRESS_FACTION_CHAMPIONS_DEAD, INSTANCE_PROGRESS_INITIAL, INSTANCE_PROGRESS_INTRO_DONE, INSTANCE_PROGRESS_JARAXXUS_DEAD, INSTANCE_PROGRESS_JARAXXUS_INTRO_DONE, INSTANCE_PROGRESS_VALKYR_DEAD, InstanceCleanup(), Map::IsHeroic(), EventMap::RescheduleEvent(), InstanceScript::SaveToDB(), SAY_GARROSH_KILL_ALLIANCE_PLAYER_1, SAY_VARIAN_KILL_HORDE_PLAYER_1, SetBeastDead(), SetBossState(), SPELL_JORMUNGAR_ACHIEV, TEAM_HORDE, TYPE_ANNOUNCER_GOSSIP_SELECT, TYPE_FACTION_CHAMPIONS, TYPE_FACTION_CHAMPIONS_PLAYER_DIED, TYPE_FACTION_CHAMPIONS_START, TYPE_FAILED, TYPE_GORMOK, TYPE_ICEHOWL, TYPE_JORMUNGAR, urand(), and WORLD_STATE_TRIAL_OF_THE_CRUSADER_UI_COUNT.

◆ SetSnoboldCarrier()

void instance_trial_of_the_crusader::SetSnoboldCarrier ( Player *  player,
bool  apply 
)
inlineprivate
1244 {
1245 Vehicle* kit = player->GetVehicleKit();
1246 if (apply)
1247 {
1248 if (kit || !player->CreateVehicleKit(VEHICLE_SNOBOLD_CARRIER, 0))
1249 return;
1250
1251 player->GetVehicleKit()->SetBoardableByPlayers(false);
1252 }
1253 else
1254 {
1255 if (!kit || kit->GetVehicleInfo()->m_ID != VEHICLE_SNOBOLD_CARRIER)
1256 return;
1257
1258 player->RemoveVehicleKit();
1259 }
1260
1262 data << player->GetPackGUID();
1263 data << uint32(apply ? VEHICLE_SNOBOLD_CARRIER : 0);
1264 player->SendMessageToSet(&data, true);
1265
1266 if (apply)
1267 {
1269 player->SendDirectMessage(&data);
1270 }
1271 }
PackedGuid const & GetPackGUID() const
Definition Object.h:122
std::size_t size() const
Definition ObjectGuid.h:278
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5886
void SendMessageToSet(WorldPacket const *data, bool self) const override
Definition Player.cpp:5863
void RemoveVehicleKit()
Definition Unit.cpp:14689
bool CreateVehicleKit(uint32 id, uint32 creatureEntry)
Returns the transport this unit is on directly (if on vehicle and transport, return vehicle)
Definition Unit.cpp:14677
Vehicle * GetVehicleKit() const
Definition Unit.h:1947
Definition Vehicle.h:28
VehicleEntry const * GetVehicleInfo() const
Definition Vehicle.h:38
void SetBoardableByPlayers(bool boardable)
Definition Vehicle.cpp:165
Definition WorldPacket.h:26
@ SMSG_PLAYER_VEHICLE_DATA
Definition Opcodes.h:1221
@ SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA
Definition Opcodes.h:1211
@ VEHICLE_SNOBOLD_CARRIER
Definition instance_trial_of_the_crusader.cpp:34
uint32 m_ID
Definition DBCStructure.h:2064

References Unit::CreateVehicleKit(), Object::GetPackGUID(), Vehicle::GetVehicleInfo(), Unit::GetVehicleKit(), WorldPacket::Initialize(), VehicleEntry::m_ID, Unit::RemoveVehicleKit(), Player::SendDirectMessage(), Player::SendMessageToSet(), Vehicle::SetBoardableByPlayers(), PackedGuid::size(), SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, SMSG_PLAYER_VEHICLE_DATA, and VEHICLE_SNOBOLD_CARRIER.

Referenced by OnPlayerEnter(), and SetSnoboldCarriers().

◆ SetSnoboldCarriers()

void instance_trial_of_the_crusader::SetSnoboldCarriers ( bool  apply)
inlineprivate
1274 {
1275 instance->DoForAllPlayers([this, apply](Player* player)
1276 {
1277 SetSnoboldCarrier(player, apply);
1278 });
1279 }
void DoForAllPlayers(std::function< void(Player *)> exec)
Definition Map.cpp:3364

References Map::DoForAllPlayers(), InstanceScript::instance, and SetSnoboldCarrier().

Referenced by InstanceCleanup(), SetBossState(), and Update().

◆ SpawnAnubArak()

void instance_trial_of_the_crusader::SpawnAnubArak ( )
inlineprivate
1055 {
1057 return;
1058
1060 if (Creature* tirion = GetCreature(DATA_TIRION))
1061 tirion->SummonCreature(NPC_ANUBARAK, Locs[LOC_ANUB], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 630000000);
1062
1063 // Corpses keep their loot, so they are moved down to Anub'arak's chamber instead of despawned
1064 std::pair<uint32, Position> const corpses[] =
1065 {
1066 { DATA_ICEHOWL, { 626.57f, 162.8f, 140.25f, 4.44f } },
1067 { DATA_JARAXXUS, { 603.92f, 102.61f, 141.85f, 1.4f } },
1068 { DATA_LIGHTBANE, { 634.58f, 147.16f, 140.5f, 3.02f } },
1069 { DATA_DARKBANE, { 630.88f, 131.39f, 140.8f, 3.02f } },
1070 };
1071
1072 for (auto const& [type, pos] : corpses)
1073 {
1074 if (Creature* corpse = GetCreature(type))
1075 {
1076 corpse->UpdatePosition(pos, true);
1077 corpse->StopMovingOnCurrentPos();
1078 corpse->DestroyForVisiblePlayers();
1079 }
1080 }
1081 }
@ NPC_ANUBARAK
Definition azjol_nerub.h:51
@ LOC_ANUB
Definition trial_of_the_crusader.h:366

References _attemptsLeft, _instanceProgress, DATA_ANUBARAK, DATA_DARKBANE, DATA_ICEHOWL, DATA_JARAXXUS, DATA_LIGHTBANE, DATA_TIRION, InstanceScript::GetCreature(), INSTANCE_PROGRESS_ANUB_ARAK, LOC_ANUB, Locs, NPC_ANUBARAK, and TEMPSUMMON_CORPSE_TIMED_DESPAWN.

Referenced by OnPlayerEnter(), and Update().

◆ StartAttack()

void instance_trial_of_the_crusader::StartAttack ( uint32  type)
inlineprivate
992 {
993 if (Creature* creature = GetCreature(type))
994 {
995 creature->SetReactState(REACT_AGGRESSIVE);
996 creature->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
997 creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
998 if (Unit* target = creature->SelectNearestTarget(200.0f))
999 {
1000 creature->AI()->AttackStart(target);
1001 creature->AI()->DoZoneInCombat();
1002 }
1003 }
1004 }
@ MOVEMENTFLAG_WALKING
Definition UnitDefines.h:380
@ UNIT_FLAG_NON_ATTACKABLE
Definition UnitDefines.h:258
@ REACT_AGGRESSIVE
Definition Unit.h:576

References InstanceScript::GetCreature(), MOVEMENTFLAG_WALKING, REACT_AGGRESSIVE, and UNIT_FLAG_NON_ATTACKABLE.

Referenced by Update().

◆ SummonBarrett()

void instance_trial_of_the_crusader::SummonBarrett ( )
inlineprivate
1040 {
1041 uint32 entry = (instance->IsHeroic() && !_attemptsLeft) ? 0 : GetBarrettEntry();
1042 if (Creature* barrett = GetCreature(DATA_BARRETT))
1043 {
1044 if (barrett->GetEntry() == entry && barrett->HasNpcFlag(UNIT_NPC_FLAG_GOSSIP))
1045 return;
1046
1047 barrett->DespawnOrUnsummon();
1048 }
1049
1050 if (entry)
1052 }
@ UNIT_NPC_FLAG_GOSSIP
Definition UnitDefines.h:322
TempSummon * SummonCreature(uint32 entry, Position const &pos, SummonPropertiesEntry const *properties=nullptr, uint32 duration=0, WorldObject *summoner=nullptr, uint32 spellId=0, uint32 vehId=0, bool visibleBySummonerOnly=false)
Definition Object.cpp:2253
uint32 GetBarrettEntry() const
Definition instance_trial_of_the_crusader.cpp:1017
@ DATA_BARRETT
Definition trial_of_the_crusader.h:58
@ LOC_BARRETT
Definition trial_of_the_crusader.h:370

References _attemptsLeft, DATA_BARRETT, GetBarrettEntry(), InstanceScript::GetCreature(), InstanceScript::instance, Map::IsHeroic(), LOC_BARRETT, Locs, Map::SummonCreature(), and UNIT_NPC_FLAG_GOSSIP.

Referenced by InstanceCleanup(), and Update().

◆ SummonFactionChampions()

void instance_trial_of_the_crusader::SummonFactionChampions ( )
inlineprivate
1084 {
1085 bool const isAllianceRaid = GetTeamIdInInstance() == TEAM_ALLIANCE;
1086
1087 // Each healer paired with the damage spec of the same class that replaces it
1088 std::vector<std::pair<uint32, uint32>> healers = isAllianceRaid ? std::vector<std::pair<uint32, uint32>>
1089 {
1094 } : std::vector<std::pair<uint32, uint32>>
1095 {
1100 };
1101
1102 std::vector<uint32> champions = isAllianceRaid ? std::vector<uint32>
1103 {
1105 } : std::vector<uint32>
1106 {
1108 };
1109
1110 // 10 man fights 2 healers and 4 damage dealers, 25 man 3 healers and 7 damage dealers
1112 std::size_t const replacedHealers = instance->Is25ManRaid() ? 1 : 2;
1113 for (std::size_t i = 0; i < replacedHealers; ++i)
1114 {
1115 champions.push_back(healers.back().second);
1116 healers.pop_back();
1117 }
1118
1119 if (!instance->Is25ManRaid())
1120 Acore::Containers::RandomResize(champions, champions.size() - 4);
1121
1122 for (auto const& healer : healers)
1123 champions.push_back(healer.first);
1124
1125 // _killCounter can still hold the Jormungar kill count from the Northrend Beasts
1126 _killCounter = 0;
1127 uint8 finalPosIndex = 10;
1128 for (uint32 entry : champions)
1129 {
1130 if (Creature* champion = instance->SummonCreature(entry, FactionChampionLoc[urand(0, 4) + (isAllianceRaid ? 0 : 5)]))
1131 {
1132 _championGUIDs.push_back(champion->GetGUID());
1133 // Horde raids get the final positions mirrored across the arena center
1134 Position const& finalPos = FactionChampionLoc[finalPosIndex];
1135 float const x = isAllianceRaid ? finalPos.GetPositionX() : Locs[LOC_CENTER].GetPositionX() * 2 - finalPos.GetPositionX();
1136 champion->SetHomePosition(x, finalPos.GetPositionY(), finalPos.GetPositionZ(), 0.0f);
1137 champion->GetMotionMaster()->MoveJump(x, finalPos.GetPositionY(), finalPos.GetPositionZ(), 20.0f, 20.0f);
1138 }
1139 ++finalPosIndex;
1140 }
1141 }
@ TEAM_ALLIANCE
Definition SharedDefines.h:748
Position const finalPos
Definition boss_deathbringer_saurfang.cpp:291
void RandomShuffle(C &container)
Definition Containers.h:230
void RandomResize(C &container, std::size_t requestedSize)
Definition Containers.h:79
Position const FactionChampionLoc[]
Definition trial_of_the_crusader.h:391
@ NPC_ALLIANCE_SHAMAN_RESTORATION
Definition trial_of_the_crusader.h:208
@ NPC_ALLIANCE_MAGE
Definition trial_of_the_crusader.h:201
@ NPC_ALLIANCE_PALADIN_HOLY
Definition trial_of_the_crusader.h:202
@ NPC_HORDE_SHAMAN_RESTORATION
Definition trial_of_the_crusader.h:223
@ NPC_ALLIANCE_DRUID_RESTORATION
Definition trial_of_the_crusader.h:199
@ NPC_ALLIANCE_DRUID_BALANCE
Definition trial_of_the_crusader.h:198
@ NPC_ALLIANCE_HUNTER
Definition trial_of_the_crusader.h:200
@ NPC_HORDE_ROGUE
Definition trial_of_the_crusader.h:221
@ NPC_HORDE_HUNTER
Definition trial_of_the_crusader.h:215
@ NPC_HORDE_PRIEST_SHADOW
Definition trial_of_the_crusader.h:220
@ NPC_HORDE_WARLOCK
Definition trial_of_the_crusader.h:224
@ NPC_ALLIANCE_ROGUE
Definition trial_of_the_crusader.h:206
@ NPC_HORDE_PALADIN_RETRIBUTION
Definition trial_of_the_crusader.h:218
@ NPC_ALLIANCE_WARRIOR
Definition trial_of_the_crusader.h:210
@ NPC_HORDE_DRUID_RESTORATION
Definition trial_of_the_crusader.h:214
@ NPC_HORDE_DEATH_KNIGHT
Definition trial_of_the_crusader.h:212
@ NPC_ALLIANCE_PALADIN_RETRIBUTION
Definition trial_of_the_crusader.h:203
@ NPC_HORDE_DRUID_BALANCE
Definition trial_of_the_crusader.h:213
@ NPC_HORDE_WARRIOR
Definition trial_of_the_crusader.h:225
@ NPC_HORDE_MAGE
Definition trial_of_the_crusader.h:216
@ NPC_HORDE_SHAMAN_ENHANCEMENT
Definition trial_of_the_crusader.h:222
@ NPC_ALLIANCE_PRIEST_DISCIPLINE
Definition trial_of_the_crusader.h:204
@ NPC_HORDE_PRIEST_DISCIPLINE
Definition trial_of_the_crusader.h:219
@ NPC_ALLIANCE_DEATH_KNIGHT
Definition trial_of_the_crusader.h:197
@ NPC_ALLIANCE_SHAMAN_ENHANCEMENT
Definition trial_of_the_crusader.h:207
@ NPC_ALLIANCE_WARLOCK
Definition trial_of_the_crusader.h:209
@ NPC_HORDE_PALADIN_HOLY
Definition trial_of_the_crusader.h:217
@ NPC_ALLIANCE_PRIEST_SHADOW
Definition trial_of_the_crusader.h:205

References _championGUIDs, _killCounter, FactionChampionLoc, finalPos, Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), InstanceScript::GetTeamIdInInstance(), InstanceScript::instance, Map::Is25ManRaid(), LOC_CENTER, Locs, NPC_ALLIANCE_DEATH_KNIGHT, NPC_ALLIANCE_DRUID_BALANCE, NPC_ALLIANCE_DRUID_RESTORATION, NPC_ALLIANCE_HUNTER, NPC_ALLIANCE_MAGE, NPC_ALLIANCE_PALADIN_HOLY, NPC_ALLIANCE_PALADIN_RETRIBUTION, NPC_ALLIANCE_PRIEST_DISCIPLINE, NPC_ALLIANCE_PRIEST_SHADOW, NPC_ALLIANCE_ROGUE, NPC_ALLIANCE_SHAMAN_ENHANCEMENT, NPC_ALLIANCE_SHAMAN_RESTORATION, NPC_ALLIANCE_WARLOCK, NPC_ALLIANCE_WARRIOR, NPC_HORDE_DEATH_KNIGHT, NPC_HORDE_DRUID_BALANCE, NPC_HORDE_DRUID_RESTORATION, NPC_HORDE_HUNTER, NPC_HORDE_MAGE, NPC_HORDE_PALADIN_HOLY, NPC_HORDE_PALADIN_RETRIBUTION, NPC_HORDE_PRIEST_DISCIPLINE, NPC_HORDE_PRIEST_SHADOW, NPC_HORDE_ROGUE, NPC_HORDE_SHAMAN_ENHANCEMENT, NPC_HORDE_SHAMAN_RESTORATION, NPC_HORDE_WARLOCK, NPC_HORDE_WARRIOR, Acore::Containers::RandomResize(), Acore::Containers::RandomShuffle(), Map::SummonCreature(), TEAM_ALLIANCE, and urand().

Referenced by Update().

◆ Update()

void instance_trial_of_the_crusader::Update ( uint32  diff)
inlineoverridevirtual

Reimplemented from InstanceScript.

424 {
425 _events.Update(diff);
426 switch (_events.ExecuteEvent())
427 {
429 // Dedicated Insanity is checked on every other tick
433
434 if (DoNeedCleanup())
436
437 // Entering mounted loses the kit: the mount removal on arrival dismounts, which drops vehicle kits
439 SetSnoboldCarriers(true);
440
441 _events.Repeat(5s);
442 break;
443 case EVENT_OPEN_GATE:
445 break;
446 case EVENT_CLOSE_GATE:
448 break;
449 case EVENT_SCENE_001:
452 break;
453 case EVENT_SCENE_002:
456 break;
457 case EVENT_SCENE_003:
460 break;
461 case EVENT_SCENE_004:
464
468
469 // Keeps the raid in combat from the gate opening until the last beast dies
471 {
472 stalker->SetCombatPulseDelay(5);
473 stalker->AI()->DoZoneInCombat();
474 }
475
477 if (instance->IsHeroic())
478 {
482 }
483 break;
486 if (Creature* beast = GetCreature(type))
487 if (beast->IsAlive())
488 beast->CastSpell(beast, SPELL_BERSERK, true);
489 break;
491 SetSnoboldCarriers(true);
492 if (Creature* tirion = GetCreature(DATA_TIRION))
494 gormok->GetMotionMaster()->MovePoint(0, Locs[LOC_GATE_FRONT].GetPositionX(), Locs[LOC_GATE_FRONT].GetPositionY(), Locs[LOC_GATE_FRONT].GetPositionZ());
495
498 break;
502 break;
503 case EVENT_SCENE_005:
508 break;
510 if (Creature* tirion = GetCreature(DATA_TIRION))
512 dreadscale->GetMotionMaster()->MovePoint(0, Locs[LOC_BEHIND_GATE].GetPositionX(), Locs[LOC_BEHIND_GATE].GetPositionY() - 25.0f, Locs[LOC_BEHIND_GATE].GetPositionZ());
513
515 break;
517 if (Creature* tirion = GetCreature(DATA_TIRION))
518 tirion->SummonCreature(NPC_ACIDMAW, Locs[LOC_ACIDMAW], TEMPSUMMON_MANUAL_DESPAWN);
519 break;
521 if (Creature* dreadscale = GetCreature(DATA_DREADSCALE))
522 dreadscale->GetMotionMaster()->MovePoint(0, Locs[LOC_DREADSCALE].GetPositionX(), Locs[LOC_DREADSCALE].GetPositionY(), Locs[LOC_DREADSCALE].GetPositionZ());
523
526 break;
531 break;
532 case EVENT_SCENE_006:
537 break;
539 if (Creature* tirion = GetCreature(DATA_TIRION))
541 icehowl->GetMotionMaster()->MovePoint(0, Locs[LOC_GATE_FRONT].GetPositionX(), Locs[LOC_GATE_FRONT].GetPositionY(), Locs[LOC_GATE_FRONT].GetPositionZ());
542
545 break;
548 break;
552 break;
555 break;
556 case EVENT_SCENE_101:
557 if (Creature* tirion = GetCreature(DATA_TIRION))
558 {
560 tirion->AI()->Talk(SAY_STAGE_1_01);
562 {
563 fizzlebang->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
564 fizzlebang->GetMotionMaster()->MovePoint(0, Locs[LOC_BEHIND_GATE].GetPositionX(), Locs[LOC_BEHIND_GATE].GetPositionY() - 65.0f, Locs[LOC_BEHIND_GATE].GetPositionZ() - 1.0f);
565 }
567
568 // move Icehowl to side, can't remove corpse because of loot!
569 if (Creature* icehowl = GetCreature(DATA_ICEHOWL))
570 {
571 icehowl->UpdatePosition(513.19f, 139.48f, 395.22f, 3 * M_PI / 2, true);
572 icehowl->StopMovingOnCurrentPos();
573 icehowl->DestroyForVisiblePlayers();
574 }
575 }
576 break;
577 case EVENT_SCENE_102:
583 break;
585 if (Creature* fizzlebang = GetCreature(DATA_FIZZLEBANG))
586 fizzlebang->SetEmoteState(EMOTE_STATE_TALK);
587 break;
589 if (Creature* fizzlebang = GetCreature(DATA_FIZZLEBANG))
590 fizzlebang->SetEmoteState(EMOTE_ONESHOT_NONE);
591 break;
592 case EVENT_SCENE_103:
593 if (Creature* fizzlebang = GetCreature(DATA_FIZZLEBANG))
594 {
595 fizzlebang->AI()->Talk(SAY_STAGE_1_03);
597 _purpleGroundGUID = trigger->GetGUID();
599 _portalGUID = portal->GetGUID();
600 fizzlebang->CastSpell(fizzlebang, SPELL_OPEN_PORTAL);
601 }
602
604 break;
606 if (Creature* fizzlebang = GetCreature(DATA_FIZZLEBANG))
607 {
608 if (Creature* jaraxxus = fizzlebang->SummonCreature(NPC_JARAXXUS, Locs[LOC_CENTER], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 630000000))
609 jaraxxus->GetMotionMaster()->MovePoint(0, Locs[LOC_CENTER].GetPositionX(), Locs[LOC_CENTER].GetPositionY() - 10.0f, Locs[LOC_CENTER].GetPositionZ());
610 fizzlebang->AI()->Talk(SAY_STAGE_1_04);
611 }
612
616 break;
617 case EVENT_SCENE_105:
618 if (Creature* jaraxxus = GetCreature(DATA_JARAXXUS))
619 jaraxxus->SetFacingTo(M_PI / 2);
621 break;
622 case EVENT_SCENE_106:
625 break;
626 case EVENT_SCENE_107:
628 if (Creature* purpleGround = instance->GetCreature(_purpleGroundGUID))
629 purpleGround->DespawnOrUnsummon();
631
633 break;
634 case EVENT_SCENE_108:
635 if (Creature* jaraxxus = GetCreature(DATA_JARAXXUS))
636 {
637 jaraxxus->AI()->Talk(SAY_STAGE_1_06_1);
638 if (Creature* fizzlebang = GetCreature(DATA_FIZZLEBANG))
639 {
640 jaraxxus->CastSpell(fizzlebang, SPELL_FEL_LIGHTNING, true);
641 Unit::Kill(fizzlebang, fizzlebang);
642 }
643 }
644
646 break;
647 case EVENT_SCENE_109:
648 if (Creature* jaraxxus = GetCreature(DATA_JARAXXUS))
649 jaraxxus->SetFacingTo(3 * M_PI / 2);
652 break;
656 break;
657 case EVENT_SCENE_110:
660 break;
661 case EVENT_SCENE_111:
664 break;
665 case EVENT_SCENE_112:
668 break;
669 case EVENT_SCENE_113:
672 break;
673 case EVENT_SCENE_201:
674 // move Jaraxxus to side, can't remove corpse because of loot!
675 if (Creature* jaraxxus = GetCreature(DATA_JARAXXUS))
676 {
677 jaraxxus->UpdatePosition(613.83f, 139.5f, 395.22f, 3 * M_PI / 2, true);
678 jaraxxus->StopMovingOnCurrentPos();
679 jaraxxus->DestroyForVisiblePlayers();
680 }
681
684 break;
685 case EVENT_SCENE_202:
687 {
690 }
691 else
692 {
695 }
696 break;
697 case EVENT_SCENE_203:
700 break;
701 case EVENT_SCENE_204:
703 {
706 }
707 else
708 {
711 }
712
714 break;
715 case EVENT_SCENE_205:
718 else
720 break;
725 break;
727 for (ObjectGuid const& guid : _championGUIDs)
728 {
729 if (Creature* champion = instance->GetCreature(guid))
730 {
731 champion->SetReactState(REACT_AGGRESSIVE);
732 champion->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
733 champion->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
734 }
735 }
736 instance->DoForAllPlayers([](Player* player)
737 {
739 });
741 break;
745 break;
746 case EVENT_SCENE_301:
749 break;
750 case EVENT_SCENE_302:
753 break;
754 case EVENT_SCENE_303:
756 if (Creature* tirion = GetCreature(DATA_TIRION))
757 {
760 lightbane->GetMotionMaster()->MovePoint(0, Locs[LOC_VALKYR_DEST_RIGHT].GetPositionX(), Locs[LOC_VALKYR_DEST_RIGHT].GetPositionY(), Locs[LOC_VALKYR_DEST_RIGHT].GetPositionZ());
762 darkbane->GetMotionMaster()->MovePoint(0, Locs[LOC_VALKYR_DEST_LEFT].GetPositionX(), Locs[LOC_VALKYR_DEST_LEFT].GetPositionY(), Locs[LOC_VALKYR_DEST_LEFT].GetPositionZ());
763 }
764
766 break;
767 case EVENT_SCENE_304:
770 if (Creature* lightbane = GetCreature(DATA_LIGHTBANE))
771 lightbane->GetMotionMaster()->MovePoint(0, Locs[LOC_VALKYR_DEST_2_RIGHT].GetPositionX(), Locs[LOC_VALKYR_DEST_2_RIGHT].GetPositionY(), Locs[LOC_VALKYR_DEST_2_RIGHT].GetPositionZ());
772 if (Creature* darkbane = GetCreature(DATA_DARKBANE))
773 darkbane->GetMotionMaster()->MovePoint(0, Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionX(), Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionY(), Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionZ());
774
776 break;
778 for (uint32 type : { DATA_LIGHTBANE, DATA_DARKBANE })
779 {
780 if (Creature* valkyr = GetCreature(type))
781 {
782 valkyr->SetReactState(REACT_AGGRESSIVE);
783 valkyr->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
784 }
785 }
786 break;
790 else
793
795 break;
796 case EVENT_SCENE_401:
797 if (Creature* barrett = GetCreature(DATA_BARRETT))
798 barrett->AI()->DoAction(ACTION_BARRETT_LEAVE);
801 break;
802 case EVENT_SCENE_402:
804 if (Creature* tirion = GetCreature(DATA_TIRION))
805 {
807 {
808 lichKing->SetReactState(REACT_PASSIVE);
809 lichKing->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
810 lichKing->SetDisplayId(MODEL_INVISIBLE_STALKER);
811 lichKing->AI()->Talk(SAY_STAGE_4_02);
812 lichKing->SetVisible(false);
813 }
814 }
815
817 break;
818 case EVENT_SCENE_403:
819 if (Creature* tirion = GetCreature(DATA_TIRION))
820 {
822 {
823 trigger->SetReactState(REACT_PASSIVE);
824 trigger->CastSpell(trigger, SPELL_ARTHAS_PORTAL, true);
825 }
826 }
827
829 break;
830 case EVENT_SCENE_404:
831 if (Creature* lichKing = GetCreature(DATA_LICH_KING))
832 {
833 lichKing->SetDisplayId(lichKing->GetNativeDisplayId());
834 lichKing->SetVisible(true);
835 lichKing->GetMotionMaster()->MovePoint(0, Locs[LOC_ARTHAS]);
836 }
837
839 break;
840 case EVENT_SCENE_405:
843 break;
844 case EVENT_SCENE_406:
845 if (Creature* lichKing = GetCreature(DATA_LICH_KING))
846 {
847 lichKing->AI()->Talk(SAY_STAGE_4_04);
848 lichKing->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH);
849 }
850
853 break;
855 if (Creature* lichKing = GetCreature(DATA_LICH_KING))
856 lichKing->SetEmoteState(EMOTE_STATE_TALK);
857 break;
858 case EVENT_SCENE_407:
859 if (Creature* lichKing = GetCreature(DATA_LICH_KING))
860 lichKing->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
862 break;
863 case EVENT_SCENE_408:
864 if (Creature* lichKing = GetCreature(DATA_LICH_KING))
865 lichKing->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL);
867 break;
868 case EVENT_SCENE_409:
869 if (Creature* lichKing = GetCreature(DATA_LICH_KING))
870 {
871 if (GameObject* floor = GetGameObject(DATA_FLOOR))
872 floor->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
873 lichKing->CastSpell(static_cast<Unit*>(nullptr), SPELL_DESTROY_FLOOR_KNOCKUP, true);
874 lichKing->SetVisible(false);
875 lichKing->SetDisplayId(MODEL_INVISIBLE_STALKER);
876 if (Creature* trigger = lichKing->FindNearestCreature(NPC_WORLD_TRIGGER, 500.0f, true))
877 trigger->DespawnOrUnsummon();
878
881 }
882
884 break;
885 case EVENT_SCENE_410:
886 if (Creature* lichKing = GetCreature(DATA_LICH_KING))
887 {
888 lichKing->SetVisible(true);
889 lichKing->AI()->Talk(SAY_STAGE_4_05);
890 lichKing->DespawnOrUnsummon(0ms);
891 }
892 break;
893 case EVENT_SCENE_501:
894 if (Creature* tirion = GetCreature(DATA_TIRION))
895 {
896 tirion->AI()->Talk(SAY_STAGE_4_06);
897 tirion->SummonCreature(NPC_ARGENT_MAGE, Locs[LOC_MAGE]);
898 tirion->SummonGameObject(GO_PORTAL_TO_DALARAN, 668.15f, 134.57f, 142.12f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 630000000);
899 }
900
902 break;
903 case EVENT_SCENE_502:
904 if (uint32 tributeChest = GetTributeChestEntry())
905 {
906 if (Creature* tirion = GetCreature(DATA_TIRION))
907 {
908 tirion->AI()->Talk(SAY_STAGE_4_07);
909 if (GameObject* chest = tirion->SummonGameObject(tributeChest, 665.12f, 143.78f, 142.12f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 90000000))
910 {
911 chest->SetRespawnTime(chest->GetRespawnDelay());
912 chest->SetLootRecipient(instance);
913 }
914 }
915 }
916 break;
917 default:
918 break;
919 }
920 }
@ TEMPSUMMON_MANUAL_DESPAWN
Definition Object.h:57
@ TEMPSUMMON_TIMED_DESPAWN
Definition Object.h:52
@ NOTIFY_AI_RELOCATION
Definition Object.h:71
@ EMOTE_ONESHOT_KNEEL
Definition SharedDefines.h:1912
@ EMOTE_ONESHOT_EXCLAMATION
Definition SharedDefines.h:1903
@ EMOTE_STATE_TALK
Definition SharedDefines.h:1977
@ EMOTE_ONESHOT_LAUGH
Definition SharedDefines.h:1907
@ EMOTE_ONESHOT_NONE
Definition SharedDefines.h:1898
@ REACT_PASSIVE
Definition Unit.h:574
void Update(uint32 time)
Definition EventMap.h:67
void Repeat(Milliseconds time)
Definition EventMap.cpp:76
EventId ExecuteEvent()
Definition EventMap.cpp:86
static void Kill(Unit *killer, Unit *victim, bool durabilityLoss=true, WeaponAttackType attackType=BASE_ATTACK, SpellInfo const *spellProto=nullptr, Spell const *spell=nullptr)
Definition Unit.cpp:13651
void AddToNotify(uint16 f)
Definition Object.cpp:3086
@ GO_PORTAL_TO_DALARAN
Definition instance_trial_of_the_crusader.cpp:35
@ SPELL_ARTHAS_PORTAL
Definition instance_trial_of_the_crusader.cpp:45
@ SPELL_DESTROY_FLOOR_KNOCKUP
Definition instance_trial_of_the_crusader.cpp:46
@ SPELL_FEL_LIGHTNING
Definition instance_trial_of_the_crusader.cpp:44
@ SPELL_BERSERK
Definition instance_trial_of_the_crusader.cpp:43
void SummonFactionChampions()
Definition instance_trial_of_the_crusader.cpp:1083
uint32 GetTributeChestEntry() const
Definition instance_trial_of_the_crusader.cpp:1160
void DoCheckDedicatedInsanity()
Definition instance_trial_of_the_crusader.cpp:1203
void StartAttack(uint32 type)
Definition instance_trial_of_the_crusader.cpp:991
@ EVENT_CLOSE_GATE
Definition trial_of_the_champion.h:68
@ ACTION_BARRETT_LEAVE
Definition trial_of_the_crusader.h:377
@ SAY_STAGE_4_07
Definition trial_of_the_crusader.h:317
@ SAY_STAGE_1_03
Definition trial_of_the_crusader.h:302
@ SAY_STAGE_1_08
Definition trial_of_the_crusader.h:272
@ SAY_STAGE_0_06
Definition trial_of_the_crusader.h:268
@ SAY_STAGE_2_02h
Definition trial_of_the_crusader.h:294
@ SAY_STAGE_0_02
Definition trial_of_the_crusader.h:265
@ SAY_STAGE_0_01
Definition trial_of_the_crusader.h:264
@ SAY_STAGE_4_01
Definition trial_of_the_crusader.h:279
@ SAY_STAGE_1_10
Definition trial_of_the_crusader.h:284
@ SAY_STAGE_4_02
Definition trial_of_the_crusader.h:311
@ SAY_STAGE_4_06
Definition trial_of_the_crusader.h:316
@ SAY_STAGE_4_04
Definition trial_of_the_crusader.h:313
@ SAY_STAGE_0_03a
Definition trial_of_the_crusader.h:283
@ SAY_STAGE_4_05
Definition trial_of_the_crusader.h:312
@ SAY_STAGE_4_03
Definition trial_of_the_crusader.h:280
@ SAY_STAGE_0_03h
Definition trial_of_the_crusader.h:292
@ SAY_STAGE_1_07
Definition trial_of_the_crusader.h:271
@ SAY_STAGE_1_11
Definition trial_of_the_crusader.h:273
@ SAY_STAGE_2_04a
Definition trial_of_the_crusader.h:286
@ SAY_STAGE_1_06_1
Definition trial_of_the_crusader.h:308
@ SAY_STAGE_2_02a
Definition trial_of_the_crusader.h:285
@ SAY_STAGE_1_05
Definition trial_of_the_crusader.h:307
@ SAY_STAGE_1_01
Definition trial_of_the_crusader.h:270
@ SAY_STAGE_2_01
Definition trial_of_the_crusader.h:274
@ SAY_STAGE_0_05
Definition trial_of_the_crusader.h:267
@ SAY_STAGE_3_03a
Definition trial_of_the_crusader.h:288
@ SAY_STAGE_1_06
Definition trial_of_the_crusader.h:304
@ SAY_STAGE_1_04
Definition trial_of_the_crusader.h:303
@ SAY_STAGE_0_04
Definition trial_of_the_crusader.h:266
@ SAY_STAGE_1_02
Definition trial_of_the_crusader.h:301
@ SAY_STAGE_3_01
Definition trial_of_the_crusader.h:277
@ SAY_STAGE_2_06
Definition trial_of_the_crusader.h:276
@ SAY_STAGE_2_05h
Definition trial_of_the_crusader.h:296
@ SAY_STAGE_3_03h
Definition trial_of_the_crusader.h:297
@ SAY_STAGE_3_02
Definition trial_of_the_crusader.h:278
@ SAY_STAGE_2_04h
Definition trial_of_the_crusader.h:295
@ SAY_STAGE_2_05a
Definition trial_of_the_crusader.h:287
@ SAY_STAGE_1_09
Definition trial_of_the_crusader.h:293
@ SAY_STAGE_2_03
Definition trial_of_the_crusader.h:275
@ LOC_OPEN_PORTAL_TARGET
Definition trial_of_the_crusader.h:369
@ LOC_VALKYR_DEST_2_LEFT
Definition trial_of_the_crusader.h:359
@ LOC_VALKYR_RIGHT
Definition trial_of_the_crusader.h:354
@ LOC_BEHIND_GATE
Definition trial_of_the_crusader.h:349
@ LOC_VALKYR_LEFT
Definition trial_of_the_crusader.h:355
@ LOC_GATE_FRONT
Definition trial_of_the_crusader.h:350
@ LOC_DREADSCALE
Definition trial_of_the_crusader.h:351
@ LOC_MAGE
Definition trial_of_the_crusader.h:368
@ LOC_BEASTS_COMBAT_STALKER
Definition trial_of_the_crusader.h:371
@ LOC_ARTHAS_PORTAL
Definition trial_of_the_crusader.h:360
@ LOC_ARTHAS
Definition trial_of_the_crusader.h:361
@ LOC_VALKYR_DEST_LEFT
Definition trial_of_the_crusader.h:357
@ LOC_ACIDMAW
Definition trial_of_the_crusader.h:352
@ LOC_VALKYR_DEST_2_RIGHT
Definition trial_of_the_crusader.h:358
@ LOC_VALKYR_DEST_RIGHT
Definition trial_of_the_crusader.h:356
@ NPC_PURPLE_GROUND
Definition trial_of_the_crusader.h:193
@ NPC_DREADSCALE
Definition trial_of_the_crusader.h:186
@ NPC_ARGENT_MAGE
Definition trial_of_the_crusader.h:179
@ NPC_OPEN_PORTAL_TARGET
Definition trial_of_the_crusader.h:194
@ NPC_ICEHOWL
Definition trial_of_the_crusader.h:188
@ NPC_BEASTS_COMBAT_STALKER
Definition trial_of_the_crusader.h:189
@ NPC_ACIDMAW
Definition trial_of_the_crusader.h:187
@ NPC_LICH_KING
Definition trial_of_the_crusader.h:182
@ NPC_FIZZLEBANG
Definition trial_of_the_crusader.h:181
@ NPC_GORMOK
Definition trial_of_the_crusader.h:184
@ SPELL_OPEN_PORTAL
Definition trial_of_the_crusader.h:419
@ EVENT_SUMMON_CHAMPIONS
Definition trial_of_the_crusader.h:140
@ EVENT_SUMMON_ACIDMAW
Definition trial_of_the_crusader.h:109
@ EVENT_SCENE_409
Definition trial_of_the_crusader.h:160
@ EVENT_SCENE_404
Definition trial_of_the_crusader.h:154
@ EVENT_SCENE_402
Definition trial_of_the_crusader.h:152
@ EVENT_SCENE_002
Definition trial_of_the_crusader.h:101
@ EVENT_SCENE_410
Definition trial_of_the_crusader.h:161
@ EVENT_SCENE_406_2
Definition trial_of_the_crusader.h:157
@ EVENT_SCENE_407
Definition trial_of_the_crusader.h:158
@ EVENT_CHAMPIONS_ATTACK
Definition trial_of_the_crusader.h:141
@ EVENT_ACIDMAW_AND_DREADSCALE_ATTACK
Definition trial_of_the_crusader.h:110
@ EVENT_GORMOK_ATTACK
Definition trial_of_the_crusader.h:105
@ EVENT_SCENE_113
Definition trial_of_the_crusader.h:133
@ EVENT_SUMMON_ICEHOWL
Definition trial_of_the_crusader.h:112
@ EVENT_SCENE_204
Definition trial_of_the_crusader.h:138
@ EVENT_SCENE_005_2
Definition trial_of_the_crusader.h:107
@ EVENT_SCENE_502
Definition trial_of_the_crusader.h:163
@ EVENT_SCENE_103
Definition trial_of_the_crusader.h:120
@ EVENT_SCENE_202
Definition trial_of_the_crusader.h:136
@ EVENT_SCENE_405
Definition trial_of_the_crusader.h:155
@ EVENT_SCENE_106
Definition trial_of_the_crusader.h:125
@ EVENT_OPEN_GATE
Definition trial_of_the_crusader.h:97
@ EVENT_ICEHOWL_ATTACK
Definition trial_of_the_crusader.h:113
@ EVENT_SCENE_303
Definition trial_of_the_crusader.h:146
@ EVENT_WILFRED_TALK_EMOTE
Definition trial_of_the_crusader.h:121
@ EVENT_SCENE_205
Definition trial_of_the_crusader.h:139
@ EVENT_SUMMON_GORMOK
Definition trial_of_the_crusader.h:104
@ EVENT_SCENE_403
Definition trial_of_the_crusader.h:153
@ EVENT_SCENE_302
Definition trial_of_the_crusader.h:145
@ EVENT_SCENE_406
Definition trial_of_the_crusader.h:156
@ EVENT_SCENE_108
Definition trial_of_the_crusader.h:127
@ EVENT_SCENE_408
Definition trial_of_the_crusader.h:159
@ EVENT_SCENE_203
Definition trial_of_the_crusader.h:137
@ EVENT_SCENE_003
Definition trial_of_the_crusader.h:102
@ EVENT_WILFRED_STOP_TALK_EMOTE
Definition trial_of_the_crusader.h:122
@ EVENT_SCENE_107
Definition trial_of_the_crusader.h:126
@ EVENT_SCENE_304
Definition trial_of_the_crusader.h:147
@ EVENT_SCENE_111
Definition trial_of_the_crusader.h:131
@ EVENT_SUMMON_DREADSCALE
Definition trial_of_the_crusader.h:108
@ EVENT_SUMMON_JARAXXUS
Definition trial_of_the_crusader.h:123
@ EVENT_SUMMON_BARRETT
Definition trial_of_the_crusader.h:116
@ EVENT_VALKYRIES_ATTACK
Definition trial_of_the_crusader.h:148
@ EVENT_SCENE_109
Definition trial_of_the_crusader.h:128
@ EVENT_SCENE_105
Definition trial_of_the_crusader.h:124
@ EVENT_SCENE_112
Definition trial_of_the_crusader.h:132
@ EVENT_SCENE_102
Definition trial_of_the_crusader.h:119
@ MODEL_INVISIBLE_STALKER
Definition trial_of_the_crusader.h:388

References _championGUIDs, _checkDedicatedInsanity, _events, _instanceProgress, _northrendBeastsMask, _portalGUID, _purpleGroundGUID, ACTION_BARRETT_LEAVE, WorldObject::AddToNotify(), BEASTS_MASK_ICEHOWL_RELEASED, BEASTS_MASK_JORMUNGARS_RELEASED, BOSS_FACTION_CHAMPIONS, BOSS_NORTHREND_BEASTS, BOSS_TWIN_VALKYR, ObjectGuid::Clear(), CreatureTalk(), DATA_ACIDMAW, DATA_BARRETT, DATA_DARKBANE, DATA_DREADSCALE, DATA_ENTER_GATE, DATA_FIZZLEBANG, DATA_FLOOR, DATA_GARROSH, DATA_GORMOK, DATA_ICEHOWL, DATA_JARAXXUS, DATA_LICH_KING, DATA_LIGHTBANE, DATA_MAIN_GATE, DATA_TIRION, DATA_VARIAN, DoCheckDedicatedInsanity(), Map::DoForAllPlayers(), DoNeedCleanup(), EMOTE_ONESHOT_EXCLAMATION, EMOTE_ONESHOT_KNEEL, EMOTE_ONESHOT_LAUGH, EMOTE_ONESHOT_NONE, EMOTE_STATE_TALK, EVENT_ACIDMAW_AND_DREADSCALE_ATTACK, EVENT_CHAMPIONS_ATTACK, EVENT_CHECK_PLAYERS, EVENT_CLOSE_GATE, EVENT_GORMOK_ATTACK, EVENT_ICEHOWL_ATTACK, EVENT_JARAXXUS_ATTACK, EVENT_NORTHREND_BEASTS_ENRAGE, EVENT_OPEN_GATE, EVENT_SCENE_001, EVENT_SCENE_002, EVENT_SCENE_003, EVENT_SCENE_004, EVENT_SCENE_005, EVENT_SCENE_005_2, EVENT_SCENE_006, EVENT_SCENE_101, EVENT_SCENE_102, EVENT_SCENE_103, EVENT_SCENE_105, EVENT_SCENE_106, EVENT_SCENE_107, EVENT_SCENE_108, EVENT_SCENE_109, EVENT_SCENE_110, EVENT_SCENE_111, EVENT_SCENE_112, EVENT_SCENE_113, EVENT_SCENE_201, EVENT_SCENE_202, EVENT_SCENE_203, EVENT_SCENE_204, EVENT_SCENE_205, EVENT_SCENE_301, EVENT_SCENE_302, EVENT_SCENE_303, EVENT_SCENE_304, EVENT_SCENE_401, EVENT_SCENE_402, EVENT_SCENE_403, EVENT_SCENE_404, EVENT_SCENE_405, EVENT_SCENE_406, EVENT_SCENE_406_2, EVENT_SCENE_407, EVENT_SCENE_408, EVENT_SCENE_409, EVENT_SCENE_410, EVENT_SCENE_501, EVENT_SCENE_502, EVENT_SCENE_BEASTS_DONE, EVENT_SCENE_FACTION_CHAMPIONS_DEAD, EVENT_SCENE_VALKYR_DEAD, EVENT_SUMMON_ACIDMAW, EVENT_SUMMON_BARRETT, EVENT_SUMMON_CHAMPIONS, EVENT_SUMMON_DREADSCALE, EVENT_SUMMON_GORMOK, EVENT_SUMMON_ICEHOWL, EVENT_SUMMON_JARAXXUS, EVENT_VALKYRIES_ATTACK, EVENT_WILFRED_STOP_TALK_EMOTE, EVENT_WILFRED_TALK_EMOTE, EventMap::ExecuteEvent(), WorldObject::FindNearestCreature(), InstanceScript::GetBossState(), Map::GetCreature(), InstanceScript::GetCreature(), InstanceScript::GetGameObject(), InstanceScript::GetTeamIdInInstance(), GetTributeChestEntry(), GO_DESTRUCTIBLE_DAMAGED, GO_PORTAL_TO_DALARAN, InstanceScript::HandleGameObject(), IN_PROGRESS, InstanceScript::instance, INSTANCE_PROGRESS_ANUB_ARAK, INSTANCE_PROGRESS_INTRO_DONE, INSTANCE_PROGRESS_JARAXXUS_INTRO_DONE, InstanceCleanup(), Map::IsHeroic(), Unit::Kill(), LOC_ACIDMAW, LOC_ARTHAS, LOC_ARTHAS_PORTAL, LOC_BEASTS_COMBAT_STALKER, LOC_BEHIND_GATE, LOC_CENTER, LOC_DREADSCALE, LOC_GATE_FRONT, LOC_MAGE, LOC_OPEN_PORTAL_TARGET, LOC_VALKYR_DEST_2_LEFT, LOC_VALKYR_DEST_2_RIGHT, LOC_VALKYR_DEST_LEFT, LOC_VALKYR_DEST_RIGHT, LOC_VALKYR_LEFT, LOC_VALKYR_RIGHT, Locs, MODEL_INVISIBLE_STALKER, MOVEMENTFLAG_WALKING, NOTIFY_AI_RELOCATION, NPC_ACIDMAW, NPC_ARGENT_MAGE, NPC_BEASTS_COMBAT_STALKER, NPC_DARKBANE, NPC_DREADSCALE, NPC_FIZZLEBANG, NPC_GORMOK, NPC_ICEHOWL, NPC_JARAXXUS, NPC_LICH_KING, NPC_LIGHTBANE, NPC_OPEN_PORTAL_TARGET, NPC_PURPLE_GROUND, NPC_WORLD_TRIGGER, REACT_AGGRESSIVE, REACT_PASSIVE, EventMap::Repeat(), EventMap::RescheduleEvent(), SAY_STAGE_0_01, SAY_STAGE_0_02, SAY_STAGE_0_03a, SAY_STAGE_0_03h, SAY_STAGE_0_04, SAY_STAGE_0_05, SAY_STAGE_0_06, SAY_STAGE_1_01, SAY_STAGE_1_02, SAY_STAGE_1_03, SAY_STAGE_1_04, SAY_STAGE_1_05, SAY_STAGE_1_06, SAY_STAGE_1_06_1, SAY_STAGE_1_07, SAY_STAGE_1_08, SAY_STAGE_1_09, SAY_STAGE_1_10, SAY_STAGE_1_11, SAY_STAGE_2_01, SAY_STAGE_2_02a, SAY_STAGE_2_02h, SAY_STAGE_2_03, SAY_STAGE_2_04a, SAY_STAGE_2_04h, SAY_STAGE_2_05a, SAY_STAGE_2_05h, SAY_STAGE_2_06, SAY_STAGE_3_01, SAY_STAGE_3_02, SAY_STAGE_3_03a, SAY_STAGE_3_03h, SAY_STAGE_4_01, SAY_STAGE_4_02, SAY_STAGE_4_03, SAY_STAGE_4_04, SAY_STAGE_4_05, SAY_STAGE_4_06, SAY_STAGE_4_07, SetBossState(), SetSnoboldCarriers(), SpawnAnubArak(), SPELL_ARTHAS_PORTAL, SPELL_BERSERK, SPELL_DESTROY_FLOOR_KNOCKUP, SPELL_FEL_LIGHTNING, SPELL_OPEN_PORTAL, StartAttack(), SummonBarrett(), Map::SummonCreature(), WorldObject::SummonCreature(), SummonFactionChampions(), WorldObject::SummonGameObject(), TEAM_ALLIANCE, TEMPSUMMON_CORPSE_TIMED_DESPAWN, TEMPSUMMON_MANUAL_DESPAWN, TEMPSUMMON_TIMED_DESPAWN, UNIT_FLAG_NON_ATTACKABLE, and EventMap::Update().

◆ WriteSaveDataMore()

void instance_trial_of_the_crusader::WriteSaveDataMore ( std::ostringstream &  data)
inlineoverridevirtual

Reimplemented from InstanceScript.

937 {
938 data << _instanceProgress;
939
940 if (instance->IsHeroic())
941 {
942 data << ' '
943 << _attemptsLeft << ' '
944 << (_dedicatedInsanity ? 1 : 0) << ' '
945 << (_noOneDied ? 1 : 0);
946 }
947 }

References _attemptsLeft, _dedicatedInsanity, _instanceProgress, _noOneDied, InstanceScript::instance, and Map::IsHeroic().

Member Data Documentation

◆ _achievementTimer

Seconds instance_trial_of_the_crusader::_achievementTimer
private

Referenced by Initialize(), SetBossState(), and SetData().

◆ _attemptsLeft

◆ _championGUIDs

GuidVector instance_trial_of_the_crusader::_championGUIDs
private

◆ _championPetGUIDs

GuidVector instance_trial_of_the_crusader::_championPetGUIDs
private

◆ _checkDedicatedInsanity

bool instance_trial_of_the_crusader::_checkDedicatedInsanity
private

Referenced by Initialize(), and Update().

◆ _cleaned

bool instance_trial_of_the_crusader::_cleaned
private

◆ _dedicatedInsanity

bool instance_trial_of_the_crusader::_dedicatedInsanity
private

◆ _events

EventMap instance_trial_of_the_crusader::_events
private

◆ _instanceProgress

◆ _killCounter

uint8 instance_trial_of_the_crusader::_killCounter
private

◆ _noOneDied

bool instance_trial_of_the_crusader::_noOneDied
private

◆ _northrendBeastsMask

uint8 instance_trial_of_the_crusader::_northrendBeastsMask
private

◆ _portalGUID

ObjectGuid instance_trial_of_the_crusader::_portalGUID
private

Referenced by InstanceCleanup(), and Update().

◆ _purpleGroundGUID

ObjectGuid instance_trial_of_the_crusader::_purpleGroundGUID
private

Referenced by InstanceCleanup(), and Update().


The documentation for this struct was generated from the following file: