Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ObjectMgr.h"
- #include "ScriptMgr.h"
- #include "ScriptedCreature.h"
- #include "SpellScript.h"
- #include "SpellAuraEffects.h"
- #include "icecrown_citadel.h"
- #define GOSSIP_MENU 10600
- //#define GOSSIP_MENU "This is the moment of reckoning, heroes! Are you prepared to bring the Lich King to justice?"
- #define GOSSIP_START_EVENT "We are ready, Tirion!"
- enum Yells
- {
- SAY_INTRO_1_KING = -1810001,
- SAY_INTRO_2_TIRION = -1810002,
- SAY_INTRO_3_KING = -1810003,
- SAY_INTRO_4_TIRION = -1810004,
- SAY_INTRO_5_KING = -1810005,
- SAY_AGGRO = -1810006,
- SAY_ENDING_1_KING = -1810013,
- SAY_ENDING_2_KING = -1810014,
- SAY_ENDING_3_KING = -1810015,
- SAY_ENDING_4_KING = -1810016,
- SAY_ENDING_5_TIRION = -1810017,
- SAY_ENDING_6_KING = -1810018,
- SAY_ENDING_8_TIRION = -1810020,
- SAY_ENDING_9_FATHER = -1810021,
- SAY_ENDING_10_TIRION = -1810022,
- SAY_ENDING_11_FATHER = -1810023,
- SAY_ENDING_12_KING = -1810024,
- SAY_DEATH_KING = -1810025,
- };
- enum Spells
- {
- SPELL_SUMMON_BROKEN_FROSTMOURNE = 72406,
- SPELL_CHANNEL_KING = 71769,
- SPELL_BROKEN_FROSTMOURNE = 72398,
- SPELL_BOOM_VISUAL = 72726,
- SPELL_ICEBLOCK_TRIGGER = 71614,
- SPELL_TIRION_LIGHT = 71797,
- SPELL_FROSTMOURNE_TRIGGER = 72405,
- SPELL_REVIVE = 72429,
- SPELL_REVIVE_EFFECT = 72423,
- SPELL_REMOVE_WEAPON = 72399,
- SPELL_DROP_FROSTMOURNE = 73017,
- SPELL_SUMMON_FROSTMOURNE_TRIGGER = 72407,
- SPELL_PLAY_MOVIE = 73159,
- SPELL_SUMMON_MENETHIL = 72420,
- SPELL_MENETHIL_VISUAL = 72372,
- SPELL_EMOTE_SHOUT = 73213,
- SPELL_TIRION_JUMP = 71811,
- SPELL_CANT_RESSURECT_AURA = 72431,
- SPELL_FROSTMOURNE_DESPAWN = 72726,
- SPELL_SUMMON_FROSTMOURNE = 74081,
- SPELL_SOUL_EFFECT = 72305,
- SPELL_LIGHT_EFFECT = 71773,
- };
- enum Events
- {
- EVENT_INTRO_1_KING
- EVENT_INTRO_2_TIRION
- EVENT_INTRO_3_KING
- EVENT_INTRO_4_TIRION
- EVENT_ICEBLOCK_TRIGGER
- EVENT_INTRO_5_KING
- EVENT_COMBAT_START
- EVENT_ENDING_1_KING
- EVENT_ENDING_2_KING
- EVENT_ENDING_3_KING
- EVENT_ENDING_4_KING
- EVENT_ENDING_5_TIRION
- EVENT_TIRION_LIGHT
- EVENT_TIRION_MOVE_3
- EVENT_TIRION_JUMP
- EVENT_CHANNEL_KING
- EVENT_DROP_FROSTMOURNE
- EVENT_ENDING_6_KING
- EVENT_FROSTMOURNE_TRIGGER
- EVENT_ENDING_8_TIRION
- EVENT_SUMMON_MENETHIL
- EVENT_ENDING_11_FATHER
- EVENT_REVIVE
- EVENT_ENDING_10_TIRION
- EVENT_ENDING_12_KING
- };
- enum Phases
- {
- PHASE_NONE
- PHASE_INTRO
- PHASE_COMBAT
- PHASE_ENDING
- };
- enum Actions
- {
- ACTION_START_EVENT
- ACTION_START_OUTRO
- };
- enum Points
- {
- POINT_START_EVENT_1 = 3899500,
- POINT_START_EVENT_2 = 3659700,
- POINT_START_EVENT_3 = 3899501,
- POINT_START_EVENT_4 = 3659701,
- POINT_START_EVENT_5 = 999999,
- POINT_START_EVENT_6 = 999999,
- };
- struct Position MovePos[7]=
- {
- {489.297f, -2124.84f, 1040.857f, 0.0f}, // tirionstart
- {462.835f, -2123.67f, 1040.908f, 0.0f}, // lichstart
- {490.110f, -2124.98f, 1040.860f, 0.0f}, // tirionstarticeblock
- {493.628f, -2124.56f, 1040.856f, 0.0f}, // tirionoutro
- {503.156f, -2124.51f, 1040.860f, 0.0f},
- {498.004f, 2201.57f, 1046.093f, 0.0f},
- {508.989f, -2124.55f, 1045.3564f, 0.0f}
- };
- class boss_the_lich_king : public CreatureScript
- {
- public:
- boss_the_lich_king() : CreatureScript("boss_the_lich_king") { }
- struct boss_the_lich_kingAI : public BossAI
- {
- boss_the_lich_kingAI(Creature* creature) : BossAI(creature, DATA_THE_LICH_KING), summons(me)
- {
- instance = me->GetInstanceScript();
- }
- void Reset() //before intro phase
- {
- events.Reset();
- events.SetPhase(PHASE_NONE);
- me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- instance->SetBossState(DATA_THE_LICH_KING, NOT_STARTED);
- }
- void DoAction(const int32 actionId) //outro
- {
- if (actionId == ACTION_START_OUTRO && HealthBelowPct(11))
- {
- events.SetPhase(PHASE_ENDING);
- events.ScheduleEvent(EVENT_ENDING_1_KING, 10000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_ENDING_2_KING, 16000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_ENDING_3_KING, 22000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_ENDING_4_KING, 28000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_ENDING_5_TIRION, 34000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_TIRION_LIGHT, 40000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_TIRION_MOVE_3, 46000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_TIRION_JUMP, 52000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_CHANNEL_KING, 55000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_ENDING_6_KING, 60000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_FROSTMOURNE_TRIGGER, 64000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_ENDING_8_TIRION, 70000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_SUMMON_MENETHIL, 75000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_ENDING_11_FATHER, 80000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_REVIVE, 85000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_ENDING_10_TIRION, 94000, 0, PHASE_ENDING);
- events.ScheduleEvent(EVENT_ENDING_12_KING, 100000, 0, PHASE_ENDING);
- }
- }
- void UpdateAI(const uint32 diff)
- {
- if (!UpdateVictim() && !(events.GetPhaseMask() & ( <<PHASE_ENDING NUMBER HERE)))
- return;
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_ENDING_1_KING:
- DoScriptText(SAY_ENDING_1_KING, me);
- me->GetMotionMaster()->MoveIdle();
- me->SetReactState(REACT_PASSIVE);
- me->AttackStop();
- me->CastStop();
- break;
- case EVENT_ENDING_2_KING:
- DoScriptText(SAY_ENDING_2_KING, me);
- me->GetMotionMaster()->MovePoint(0, MovePos[4]);
- break;
- case EVENT_ENDING_3_KING:
- DoScriptText(SAY_ENDING_3_KING, me);
- DoCast(me, SPELL_CHANNEL_KING);
- break;
- case EVENT_ENDING_4_KING:
- DoScriptText(SAY_ENDING_4_KING, me);
- break;
- case EVENT_ENDING_5_TIRION:
- if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
- DoScriptText(SAY_ENDING_5_TIRION, tirion);
- break;
- case EVENT_TIRION_LIGHT:
- if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
- tirion->CastSpell(tirion, SPELL_TIRION_LIGHT, true);
- break;
- case EVENT_TIRION_MOVE_3:
- if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
- tirion->GetMotionMaster()->MovePoint(0, MovePos[3]);
- break;
- case EVENT_TIRION_JUMP:
- if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
- tirion->CastSpell(tirion, SPELL_TIRION_JUMP, true);
- break;
- case EVENT_CHANNEL_KING:
- me->RemoveAura(SPELL_CHANNEL_KING);
- DoCast(me, SPELL_SUMMON_FROSTMOURNE);
- DoCast(me, SPELL_SUMMON_BROKEN_FROSTMOURNE);
- break;
- case EVENT_ENDING_6_KING:
- DoCast(me, SPELL_DROP_FROSTMOURNE);
- DoCast(me, SPELL_SOUL_EFFECT);
- DoScriptText(SAY_ENDING_6_KING, me);
- break;
- case EVENT_FROSTMOURNE_TRIGGER:
- DoCast(me, SPELL_SUMMON_FROSTMOURNE_TRIGGER);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 473);
- break;
- case EVENT_ENDING_8_TIRION:
- if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
- DoScriptText(SAY_ENDING_8_TIRION, tirion);
- break;
- case EVENT_SUMMON_MENETHIL:
- if(Creature* frostmourne = me->FindNearestCreature(NPC_FROSTMOURNE_TRIGGER, 25.0f, true))
- frostmourne->CastSpell(frostmourne, SPELL_SUMMON_MENETHIL, true);
- break;
- case EVENT_ENDING_11_FATHER:
- if(Creature* father = me->FindNearestCreature(NPC_MENETHIL, 25.0f, true))
- DoScriptText(SAY_ENDING_11_FATHER, father);
- break;
- case EVENT_REVIVE:
- if(Creature* father = me->FindNearestCreature(NPC_MENETHIL, 25.0f, true))
- father->CastSpell(father, SPELL_REVIVE, true);
- if(spell->Id == SPELL_REVIVE)
- DoCast(father, SPELL_REVIVE_EFFECT);
- break;
- case EVENT_ENDING_10_TIRION:
- if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
- DoScriptText(SAY_ENDING_10_TIRION, tirion);
- break;
- case EVENT_ENDING_12_KING:
- DoScriptText(SAY_ENDING_12_KING, me);
- me->GetMotionMaster()->MovePoint(0, MovePos[6]);
- if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
- tirion->AI()->AttackStart(me);
- if(Creature* father = me->FindNearestCreature(NPC_MENETHIL, 25.0f, true))
- father->AI()->AttackStart(me);
- break;
- }
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement