TrinityCore
Loading...
Searching...
No Matches
trial_of_the_crusader.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 "GameObject.h"
20#include "InstanceScript.h"
21#include "Map.h"
22#include "MotionMaster.h"
23#include "ObjectAccessor.h"
24#include "Player.h"
25#include "ScriptedCreature.h"
26#include "ScriptedGossip.h"
27#include "SpellInfo.h"
28#include "SpellScript.h"
29#include "TemporarySummon.h"
31#include "Weather.h"
32
89
100
141
150
151Position const BarretSpawnPosition = { 559.1528f, 90.55729f, 395.2734f, 5.078908f };
152Position const WilfredSpawnPosition = { 563.6007f, 208.5278f, 395.2696f, 4.729842f };
153Position const JaraxxusSpawnPosition = { 563.8264f, 140.6563f, 393.9861f, 4.694936f };
154Position const PortalTargetSpawnPosition = { 563.6597f, 139.7569f, 399.2507f, 4.712389f };
155Position const PurpleGroundSpawnPosition = { 563.6858f, 139.4323f, 393.9862f, 4.694936f };
156Position const ArthasPortalSpawnPosition = { 563.6996f, 175.9826f, 394.5042f, 4.694936f };
157Position const LichKingSpawnPosition = { 563.5712f, 174.8351f, 394.4954f, 4.712389f };
158Position const CorpseTeleportPosition = { 631.9390f, 136.5040f, 142.5540f, 0.803332f };
159
161{
162 { 563.9358f, 229.8299f, 394.8061f, 4.694936f }, // Gormok \ Icehowl
163 { 564.2802f, 233.1322f, 394.7897f, 1.621917f }, // Dreadscale
164};
165
167{
168 { 783.9305f, 132.9722f, 142.6711f, 3.141593f }, // 0 - Anub'arak Spawn Location (sniffed)
169 { 695.240051f, 137.834824f, 142.200000f, 0 }, // 1 - Anub'arak move point location
170 { 694.886353f, 102.484665f, 142.119614f, 0 }, // 3 - Nerub Spawn
171 { 694.500671f, 185.363968f, 142.117905f, 0 }, // 5 - Nerub Spawn
172 { 731.987244f, 83.3824690f, 142.119614f, 0 }, // 2 - Nerub Spawn
173 { 740.184509f, 193.443390f, 142.117584f, 0 } // 4 - Nerub Spawn
174};
175
177{
178 { 648.9167f, 131.0208f, 141.6161f, 0.f }, // 0 - Highlord Tirion Fordring
179 { 649.1614f, 142.0399f, 141.3057f, 0.f }, // 1 - Argent Mage
180 { 644.6250f, 149.2743f, 140.6015f, 5.f } // 2 - Portal to Dalaran
181};
182
183// ToDo: Remove it in nexts rewrites
185{
186 { 559.257996f, 90.266197f, 395.122986f, 0.0f }, // 0 Barrent
187 { 563.672974f, 139.57100f, 393.837006f, 0.0f }, // 1 Center
188 { 563.833008f, 187.244995f, 394.50000f, 0.0f }, // 2 Backdoor
189 { 577.347839f, 195.338888f, 395.14000f, 0.0f }, // 3 - Right
190 { 550.955933f, 195.338888f, 395.14000f, 0.0f }, // 4 - Left
191 { 563.833008f, 195.244995f, 394.585561f, 0.0f }, // 5 - Center
192 { 573.500000f, 180.500000f, 395.14f, 0.0f }, // 6 Move 0 Right
193 { 553.5f, 180.5f, 400.5521f, 0 }, // 7 Move 0 Left
194 { 573.0f, 170.0f, 400.5521f, 0 }, // 8 Move 1 Right
195 { 549.5139f, 170.1389f, 394.7965f, 5.009095f }, // 9 Move 1 Left
196 { 563.8f, 216.1f, 395.1f, 0 }, // 10 Behind the door
197
198 { 575.042358f, 195.260727f, 395.137146f, 0 }, // 5
199 { 552.248901f, 195.331955f, 395.132658f, 0 }, // 6
200 { 573.342285f, 195.515823f, 395.135956f, 0 }, // 7
201 { 554.239929f, 195.825577f, 395.137909f, 0 }, // 8
202 { 571.042358f, 195.260727f, 395.137146f, 0 }, // 9
203 { 556.720581f, 195.015472f, 395.132658f, 0 }, // 10
204 { 569.534119f, 195.214478f, 395.139526f, 0 }, // 11
205 { 569.231201f, 195.941071f, 395.139526f, 0 }, // 12
206 { 558.811610f, 195.985779f, 394.671661f, 0 }, // 13
207 { 567.641724f, 195.351501f, 394.659943f, 0 }, // 14
208 { 560.633972f, 195.391708f, 395.137543f, 0 }, // 15
209 { 565.816956f, 195.477921f, 395.136810f, 0 } // 16
210};
211
213{
214public:
215 ArthasPortalEvent(Unit* owner) : BasicEvent(), _owner(owner) { }
216
217 bool Execute(uint64 /*eventTime*/, uint32 /*diff*/) override
218 {
221 return true;
222 }
223
224private:
226};
227
229{
230 npc_barrett_toc(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
231
233 {
235 fordring->AI()->DoAction(action);
238 }
239
240 bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
241 {
242 switch (menuId)
243 {
245 if (gossipListId == GOSSIPID_FAIL)
247 else
249 break;
250 case MENUID_JARAXXUS:
251 if (gossipListId == GOSSIPID_FAIL)
252 {
254 jaraxxus->AI()->DoAction(ACTION_JARAXXUS_ENGAGE);
256 CloseGossipMenuFor(player);
257 return true;
258 }
259 else
261 break;
263 if (gossipListId == GOSSIPID_FAIL)
265 else
267 break;
268 case MENUID_VALKYR:
269 if (gossipListId == GOSSIPID_FAIL)
271 else
273 break;
274 case MENUID_LK:
276 break;
277 default:
278 return false;
279 }
280
281 CloseGossipMenuFor(player);
282 return true;
283 }
284
285 void MovementInform(uint32 type, uint32 pointId) override
286 {
287 if (type != SPLINE_CHAIN_MOTION_TYPE)
288 return;
289
290 if (pointId == POINT_BARRETT_DESPAWN)
292 }
293
294private:
296};
297
299{
300 boss_lich_king_toc(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
301
308
309 void MovementInform(uint32 type, uint32 pointId) override
310 {
311 if (type != SPLINE_CHAIN_MOTION_TYPE)
312 return;
313
314 if (pointId == POINT_MIDDLE)
316 }
317
318 void UpdateAI(uint32 diff) override
319 {
320 _events.Update(diff);
321
322 while (uint32 eventId = _events.ExecuteEvent())
323 {
324 switch (eventId)
325 {
326 case EVENT_START_MOVE:
328 break;
334 fordring->AI()->DoAction(ACTION_LK_EVENT_FINISHED);
336 floor->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
338 break;
339 case EVENT_EMOTE_TALK:
343 break;
347 break;
350 break;
351 case EVENT_START_TALK:
355 break;
356 default:
357 break;
358 }
359 }
360 }
361
362private:
365};
366
368{
369 npc_tirion_toc(Creature* creature) : ScriptedAI(creature), _instance (creature->GetInstanceScript()), _factionLeaderData(0), _summons(me),
370 _jormungarsSummoned(false), _icehowlSummoned(false) { }
371
380
381 void JustSummoned(Creature* summoned) override
382 {
383 _summons.Summon(summoned);
384 }
385
405
406 void DoAction(int32 action) override
407 {
408 switch (action)
409 {
413 break;
416 break;
419 return;
420 _jormungarsSummoned = true;
425 break;
428 return;
429 _icehowlSummoned = true;
434 break;
436 _jormungarsSummoned = false;
437 _icehowlSummoned = false;
440 break;
445 break;
448 break;
451 break;
454 break;
456 {
459 if (Creature* otherFactionLeader = _instance->GetCreature(data))
460 otherFactionLeader->AI()->DoAction(ACTION_START_CHAMPIONS);
462 break;
463 }
466 break;
468 {
470 if (Creature* otherFactionLeader = _instance->GetCreature(data))
471 otherFactionLeader->AI()->DoAction(ACTION_START_CHAMPIONS_ENGAGE);
473 break;
474 }
477 break;
480 break;
483 break;
487 break;
492 break;
495 if (Creature* factionLeader = _instance->GetCreature(_factionLeaderData))
496 factionLeader->AI()->DoAction(ACTION_VALKYR_DEFEATED);
499 break;
503 break;
509 break;
512 break;
513 default:
514 break;
515 }
516 }
517
518 void EnterEvadeMode(EvadeReason /*why*/) override
519 {
520 // Needed when using hotswap
522 }
523
524 void UpdateAI(uint32 diff) override
525 {
526 _events.Update(diff);
527
528 while (uint32 eventId = _events.ExecuteEvent())
529 {
530 switch(eventId)
531 {
534 if (Creature* factionLeader = _instance->GetCreature(_factionLeaderData))
535 factionLeader->AI()->DoAction(ACTION_START_GORMOK);
537 break;
541 break;
545 break;
548 break;
551 break;
555 break;
559 break;
563 break;
566 break;
570 varian->AI()->DoAction(ACTION_JARAXXUS_DEFEATED);
572 garrosh->AI()->DoAction(ACTION_JARAXXUS_DEFEATED);
574 break;
578 break;
582 break;
586 break;
590 break;
591 case EVENT_OPEN_GATE:
593 break;
594 case EVENT_SAY_ARTHAS:
596 break;
599 lkVoice->AI()->Talk(LK_VOICE_SAY_CHALLENGE);
601 arthasPortal->m_Events.AddEventAtOffset(new ArthasPortalEvent(arthasPortal), 3s);
603 break;
606 lkVoice->AI()->Talk(LK_VOICE_SAY_SOULS_WILL_BE_MINE);
607 break;
610 break;
612 if (Creature* factitonController = me->SummonCreature(NPC_CHAMPIONS_CONTROLLER, ToCCommonLoc[1]))
613 factitonController->AI()->SetData(0, _instance->GetData(DATA_TEAM)); // will be changed to DoAction soon
615 break;
617 if (Creature* factitonController = _instance->GetCreature(DATA_FACTION_CRUSADERS))
618 factitonController->AI()->SetData(1, NOT_STARTED); // will be changed to DoAction soon
619 break;
620 default:
621 break;
622 }
623 }
624 }
625
626private:
633};
634
636{
638
639 void Reset() override
640 {
643 me->SetDisableGravity(true);
644 }
645
646 void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
647 {
648 if (spellInfo->Id == SPELL_OPEN_PORTAL)
649 {
650 _scheduler.Schedule(2s, [this](TaskContext /*wilfredPortal*/)
651 {
654 });
655 }
656 }
657
658 void UpdateAI(uint32 diff) override
659 {
660 _scheduler.Update(diff);
661 }
662
663private:
665};
666
668{
669 npc_fizzlebang_toc(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
670
671 void Reset() override
672 {
674 _events.Reset();
676 }
677
689
690 void UpdateAI(uint32 diff) override
691 {
692 _events.Update(diff);
693
694 while (uint32 eventId = _events.ExecuteEvent())
695 {
696 switch (eventId)
697 {
698 case EVENT_START_MOVE:
700 break;
701 case EVENT_OBLIVION:
707 break;
710 fordring->AI()->DoAction(ACTION_SUMMON_JARAXXUS);
715 break;
716 case EVENT_SET_TARGET:
718 me->SetTarget(jaraxxus->GetGUID());
720 break;
724 break;
725 case EVENT_LAST_TALK:
728 fordring->AI()->DoAction(ACTION_KILL_JARAXXUS);
729 break;
730 case EVENT_EMOTE_TALK:
732 break;
735 break;
736 default:
737 break;
738 }
739 }
740 }
741
742private:
745};
746
748{
749 npc_garrosh_toc(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
750
751 void DoAction(int32 action) override
752 {
753 switch (action)
754 {
757 break;
760 break;
763 break;
766 break;
769 break;
772 break;
775 break;
776 default:
777 break;
778 }
779 }
780
781 void UpdateAI(uint32 diff) override
782 {
783 _events.Update(diff);
784
785 while (uint32 eventId = _events.ExecuteEvent())
786 {
787 switch (eventId)
788 {
791 break;
794 break;
798 break;
799 case EVENT_NO_MERCY:
801 break;
804 break;
805 default:
806 break;
807 }
808 }
809 }
810
811private:
814};
815
817{
818 npc_varian_toc(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
819
820 void DoAction(int32 action) override
821 {
822 switch (action)
823 {
826 break;
829 break;
832 break;
835 break;
838 break;
841 break;
844 break;
845 default:
846 break;
847 }
848 }
849
850 void UpdateAI(uint32 diff) override
851 {
852 _events.Update(diff);
853
854 while (uint32 eventId = _events.ExecuteEvent())
855 {
856 switch (eventId)
857 {
860 break;
861 case EVENT_COME_PIGS:
863 break;
867 break;
868 case EVENT_NO_MERCY:
870 break;
873 break;
874 default:
875 break;
876 }
877 }
878 }
879
880private:
883};
884
885// 69016 - Corpse Teleport
900
int32_t int32
Definition Define.h:129
uint64_t uint64
Definition Define.h:132
uint32_t uint32
Definition Define.h:133
@ IN_PROGRESS
@ FAIL
@ DONE
@ NOT_STARTED
@ SPLINE_CHAIN_MOTION_TYPE
@ TEMPSUMMON_DEAD_DESPAWN
@ TEMPSUMMON_TIMED_DESPAWN
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
#define RegisterSpellScript(spell_script)
Definition ScriptMgr.h:1128
void CloseGossipMenuFor(Player *player)
SpellEffIndex
@ EFFECT_0
@ SPELL_EFFECT_DUMMY
@ EMOTE_ONESHOT_KNEEL
@ EMOTE_ONESHOT_EXCLAMATION
@ EMOTE_STATE_TALK
@ EMOTE_ONESHOT_NONE
@ EMOTE_ONESHOT_TALK_NO_SHEATHE
@ GO_DESTRUCTIBLE_DAMAGED
@ ALLIANCE
#define SpellEffectFn(F, I, N)
@ REACT_PASSIVE
@ UNIT_NPC_FLAG_GOSSIP
@ SPELL_OPEN_PORTAL
Definition boss_muru.cpp:62
Yells
bool Execute(uint64, uint32) override
Creature *const me
Definition CreatureAI.h:82
void SetReactState(ReactStates st)
Definition Creature.h:119
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void SetTarget(ObjectGuid guid) override
CreatureAI * AI() const
Definition Creature.h:154
void Update(uint32 time)
Definition EventMap.h:67
EventId ExecuteEvent()
Definition EventMap.cpp:73
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:36
void Reset()
Definition EventMap.cpp:21
virtual bool SetBossState(uint32 id, EncounterState state)
Creature * GetCreature(uint32 type)
virtual ObjectGuid GetGuidData(uint32 type) const override
void DoUseDoorOrButton(ObjectGuid guid, uint32 withRestoreTime=0, bool useAlternativeState=false)
EncounterState GetBossState(uint32 id) const
GameObject * GetGameObject(uint32 type)
void SetZoneWeather(uint32 zoneId, WeatherState weatherId, float intensity)
Definition Map.cpp:4789
void MoveAlongSplineChain(uint32 pointId, uint16 dbChainId, bool walk)
uint32 Id
Definition SpellInfo.h:289
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
void DespawnEntry(uint32 entry)
void Summon(Creature const *summon)
TaskScheduler & CancelAll()
TaskScheduler & Schedule(std::chrono::duration< _Rep, _Period > const &time, task_handler_t const &task)
TaskScheduler & Update(success_t const &callback=EmptyCallback)
virtual void SetData(uint32, uint32)
Definition UnitAI.h:156
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.h:241
Definition Unit.h:769
MotionMaster * GetMotionMaster()
Definition Unit.h:1667
void RemoveNpcFlag(NPCFlags flags)
Definition Unit.h:1098
bool SetDisableGravity(bool disable, bool updateAnimTier=true)
Definition Unit.cpp:13286
void SetEmoteState(Emote emote)
Definition Unit.h:967
void NearTeleportTo(Position const &pos, bool casting=false)
Definition Unit.cpp:12832
void HandleEmoteCommand(Emote emoteId)
Definition Unit.cpp:1568
Map * GetMap() const
Definition Object.h:449
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2832
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
Definition Object.cpp:1992
void SummonCreatureGroup(uint8 group, std::list< TempSummon * > *list=nullptr)
Definition Object.cpp:2082
virtual uint32 GetData(uint32) const
Definition ZoneScript.h:55
PrepareSpellScript(spell_lich_king_teleport_corpse)
@ WEATHER_STATE_MEDIUM_SNOW
Definition Weather.h:55
@ WEATHER_STATE_LIGHT_SNOW
Definition Weather.h:54
@ WEATHER_STATE_FOG
Definition Weather.h:49
bool IsHeroic() const
boss_lich_king_toc(Creature *creature)
void MovementInform(uint32 type, uint32 pointId) override
void UpdateAI(uint32 diff) override
bool OnGossipSelect(Player *player, uint32 menuId, uint32 gossipListId) override
InstanceScript * _instance
void SendActionToTirion(uint32 action)
void MovementInform(uint32 type, uint32 pointId) override
npc_barrett_toc(Creature *creature)
void MovementInform(uint32 type, uint32 pointId) override
npc_fizzlebang_toc(Creature *creature)
void UpdateAI(uint32 diff) override
npc_garrosh_toc(Creature *creature)
void DoAction(int32 action) override
void UpdateAI(uint32 diff) override
InstanceScript * _instance
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
void UpdateAI(uint32 diff) override
npc_open_portal_target_toc(Creature *creature)
void UpdateAI(uint32 diff) override
InstanceScript * _instance
void JustSummoned(Creature *summoned) override
void EnterEvadeMode(EvadeReason) override
npc_tirion_toc(Creature *creature)
void DoAction(int32 action) override
npc_varian_toc(Creature *creature)
void DoAction(int32 action) override
void UpdateAI(uint32 diff) override
InstanceScript * _instance
@ DATA_MAIN_GATE
Position const BarretSpawnPosition
Position const LichKingSpawnPosition
@ GARROSH_SAY_FACTION_DEAD
@ VARIAN_SAY_COME_PIGS
@ VARIAN_SAY_FACTION_DEAD
@ WILFRED_SAY_OBLIVION
@ TIRION_SAY_WORK_TOGETHER
@ LK_VOICE_SAY_SOULS_WILL_BE_MINE
@ TIRION_SAY_BEASTS_WIPE
@ VARIAN_SAY_FIGHT_GLORY
@ TIRION_SAY_KILL_JARAXXUS
@ TIRION_SAY_ICEHOWL
@ VARIAN_SAY_BEASTS
@ GARROSH_SAY_NO_MERCY
@ GARROSH_SAY_VALKYR_DEAD
@ GARROSH_SAY_ALLIANCE_DOGS
@ TIRION_SAY_BEASTS_DONE
@ TIRION_SAY_UNITED
@ TIRION_SAY_WILFRED
@ TIRION_SAY_ALLOW_COMBAT
@ GARROSH_SAY_BEASTS
@ TIRION_SAY_JORMUNGARS
@ TIRION_SAY_WELCOME
@ GARROSH_SAY_DEMAND_JUSTICE
@ VARIAN_SAY_DEMAND_JUSTICE
@ TIRION_SAY_CALM_DOWN
@ LK_VOICE_SAY_CHALLENGE
@ TIRION_SAY_TRAGIC_VICTORY
@ TIRION_SAY_CHAMPIONS
@ VARIAN_SAY_VALKYR_DEAD
@ WILFRED_SAY_MASTER
@ TIRION_SAY_GAME_BEGIN
@ TIRION_SAY_ARTHAS
@ TIRION_SAY_LAMENT
@ GARROSH_SAY_KILLED
@ VARIAN_SAY_KILLED
@ WILFRED_SAY_INTRO
@ TIRION_SAY_GORMOK
@ MENUID_FACTION_CHAMPIONS
@ MENUID_NORTHREND_BEASTS
Position const CorpseTeleportPosition
@ AREA_TRIAL_OF_THE_CRUSADER
@ POINT_BARRETT_DESPAWN
@ SPLINE_INITIAL_MOVEMENT
Position const ArthasPortalSpawnPosition
Position const ToCCommonLoc[]
Position const WilfredSpawnPosition
Position const NorthrendBeastsSpawnPositions[]
Position const PortalTargetSpawnPosition
void AddSC_trial_of_the_crusader()
Position const JaraxxusSpawnPosition
Position const AnubarakLoc[]
@ EVENT_SUMMON_BARRET
@ EVENT_SUMMON_CHAMPIONS
@ EVENT_BREAK_PLATFORM
@ EVENT_EMOTE_SHEATHE
@ EVENT_KILL_JARAXXUS
@ EVENT_TIRION_LAMENT
@ EVENT_GORMOK_EXCLAMATION
@ EVENT_TRAGIC_VICTORY
@ EVENT_START_CALL_WILFRED
@ EVENT_ALLIANCE_DOGS
@ EVENT_START_CHAMPIONS
@ EVENT_SUMMON_VALKYR
@ EVENT_DEMAND_JUSTICE
@ EVENT_REMOVE_EMOTE_TALK
@ EVENT_LICH_KING_SAY_CHALLENGE
@ EVENT_LICH_KING_SAY_SOULS
@ EVENT_TIRION_CALM_DOWN
@ EVENT_EMOTE_EXCLAMATION
@ EVENT_SUMMON_JARAXXUS
@ EVENT_SUMMON_WILFRED
@ EVENT_SUMMON_LICH_KING
Position const EndSpawnLoc[]
Position const PurpleGroundSpawnPosition
@ NPC_CHAMPIONS_CONTROLLER
@ NPC_PURPLE_GROUND
@ NPC_WILFRED_PORTAL
@ NPC_LIGHT_ESSENCE
@ NPC_DARK_ESSENCE
@ NPC_BARRETT_JARAXXUS
@ NPC_BARRETT_VALKYR
@ NPC_ARTHAS_PORTAL
@ NPC_BARRETT_BEASTS
@ NPC_BARRETT_FACTION
@ NPC_BARRETT_BEASTS_HC
@ SPELL_ARTHAS_PORTAL
@ SPELL_DESTROY_FLOOR_KNOCKUP
@ SPELL_LK_FROST_NOVA
@ SPELL_CORPSE_TELEPORT
@ SPELL_WILFRED_PORTAL
@ ACTION_START_JORMUNGARS
@ ACTION_START_CHAMPIONS_ENGAGE
@ ACTION_FACTION_WIPE
@ ACTION_JARAXXUS_WIPE
@ ACTION_SAY_KILLED_PLAYER
@ ACTION_NORTHREND_BEASTS_DEFEATED
@ ACTION_START_JARAXXUS_EVENT
@ ACTION_START_VALKYR_ENGAGE
@ ACTION_NORTHREND_BEASTS_WIPE
@ ACTION_SUMMON_JARAXXUS
@ ACTION_JARAXXUS_DEFEATED
@ ACTION_JARAXXUS_ENGAGE
@ ACTION_START_GORMOK
@ ACTION_LK_EVENT_FINISHED
@ ACTION_START_LK_EVENT
@ ACTION_START_VALKYR
@ ACTION_CHAMPIONS_DEFEATED
@ ACTION_START_GORMOK_FAIL
@ ACTION_START_ICEHOWL
@ ACTION_VALKYR_DEFEATED
@ ACTION_KILL_JARAXXUS
@ ACTION_VALKYR_WIPE
@ ACTION_START_CHAMPIONS
@ DATA_TWIN_VALKIRIES
@ DATA_COLISEUM_FLOOR
@ DATA_JARAXXUS
@ DATA_NORTHREND_BEASTS
@ DATA_LICH_KING
@ DATA_FACTION_CRUSADERS
@ DATA_FORDRING
@ DATA_LICH_KING_VOICE
#define RegisterTrialOfTheCrusaderCreatureAI(ai_name)