Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.94 KB | None | 0 0
  1. #include "ObjectMgr.h"
  2. #include "ScriptMgr.h"
  3. #include "ScriptedCreature.h"
  4. #include "SpellScript.h"
  5. #include "SpellAuraEffects.h"
  6. #include "icecrown_citadel.h"
  7.  
  8. #define GOSSIP_MENU 10600
  9. //#define GOSSIP_MENU "This is the moment of reckoning, heroes! Are you prepared to bring the Lich King to justice?"
  10. #define GOSSIP_START_EVENT "We are ready, Tirion!"
  11.  
  12.  
  13. enum Yells
  14. {
  15. SAY_INTRO_1_KING = -1810001,
  16. SAY_INTRO_2_TIRION = -1810002,
  17. SAY_INTRO_3_KING = -1810003,
  18. SAY_INTRO_4_TIRION = -1810004,
  19. SAY_INTRO_5_KING = -1810005,
  20. SAY_AGGRO = -1810006,
  21. SAY_ENDING_1_KING = -1810013,
  22. SAY_ENDING_2_KING = -1810014,
  23. SAY_ENDING_3_KING = -1810015,
  24. SAY_ENDING_4_KING = -1810016,
  25. SAY_ENDING_5_TIRION = -1810017,
  26. SAY_ENDING_6_KING = -1810018,
  27. SAY_ENDING_8_TIRION = -1810020,
  28. SAY_ENDING_9_FATHER = -1810021,
  29. SAY_ENDING_10_TIRION = -1810022,
  30. SAY_ENDING_11_FATHER = -1810023,
  31. SAY_ENDING_12_KING = -1810024,
  32. SAY_DEATH_KING = -1810025,
  33. };
  34.  
  35. enum Spells
  36. {
  37. SPELL_SUMMON_BROKEN_FROSTMOURNE = 72406,
  38. SPELL_CHANNEL_KING = 71769,
  39. SPELL_BROKEN_FROSTMOURNE = 72398,
  40. SPELL_BOOM_VISUAL = 72726,
  41. SPELL_ICEBLOCK_TRIGGER = 71614,
  42. SPELL_TIRION_LIGHT = 71797,
  43. SPELL_FROSTMOURNE_TRIGGER = 72405,
  44. SPELL_REVIVE = 72429,
  45. SPELL_REVIVE_EFFECT = 72423,
  46. SPELL_REMOVE_WEAPON = 72399,
  47. SPELL_DROP_FROSTMOURNE = 73017,
  48. SPELL_SUMMON_FROSTMOURNE_TRIGGER = 72407,
  49. SPELL_PLAY_MOVIE = 73159,
  50. SPELL_SUMMON_MENETHIL = 72420,
  51. SPELL_MENETHIL_VISUAL = 72372,
  52. SPELL_EMOTE_SHOUT = 73213,
  53. SPELL_TIRION_JUMP = 71811,
  54. SPELL_CANT_RESSURECT_AURA = 72431,
  55. SPELL_FROSTMOURNE_DESPAWN = 72726,
  56. SPELL_SUMMON_FROSTMOURNE = 74081,
  57. SPELL_SOUL_EFFECT = 72305,
  58. };
  59.  
  60. enum Events
  61. {
  62. EVENT_INTRO_1_KING
  63. EVENT_INTRO_2_TIRION
  64. EVENT_INTRO_3_KING
  65. EVENT_INTRO_4_TIRION
  66. EVENT_ICEBLOCK_TRIGGER
  67. EVENT_INTRO_5_KING
  68. EVENT_COMBAT_START
  69. EVENT_ENDING_1_KING
  70. EVENT_ENDING_2_KING
  71. EVENT_ENDING_3_KING
  72. EVENT_ENDING_4_KING
  73. EVENT_ENDING_5_TIRION
  74. EVENT_TIRION_LIGHT
  75. EVENT_TIRION_MOVE_3
  76. EVENT_TIRION_JUMP
  77. EVENT_CHANNEL_KING
  78. EVENT_DROP_FROSTMOURNE
  79. EVENT_ENDING_6_KING
  80. EVENT_FROSTMOURNE_TRIGGER
  81. EVENT_ENDING_8_TIRION
  82. EVENT_SUMMON_MENETHIL
  83. EVENT_ENDING_11_FATHER
  84. EVENT_REVIVE
  85. EVENT_ENDING_10_TIRION
  86. EVENT_ENDING_12_KING
  87. };
  88.  
  89. enum Phases
  90. {
  91. PHASE_NONE
  92. PHASE_INTRO
  93. PHASE_COMBAT
  94. PHASE_ENDING
  95. };
  96.  
  97.  
  98. enum Actions
  99. {
  100. ACTION_START_EVENT
  101. ACTION_START_OUTRO
  102. };
  103.  
  104. enum Points
  105. {
  106. POINT_START_EVENT_1 = 3899500,
  107. POINT_START_EVENT_2 = 3659700,
  108. POINT_START_EVENT_3 = 3899501,
  109. POINT_START_EVENT_4 = 3659701,
  110. POINT_START_EVENT_5 = 999999,
  111. POINT_START_EVENT_6 = 999999,
  112. };
  113.  
  114. struct Position MovePos[7]=
  115. {
  116. {489.297f, -2124.84f, 1040.857f, 0.0f}, // tirionstart
  117. {462.835f, -2123.67f, 1040.908f, 0.0f}, // lichstart
  118. {490.110f, -2124.98f, 1040.860f, 0.0f}, // tirionstarticeblock
  119. {493.628f, -2124.56f, 1040.856f, 0.0f}, // tirionoutro
  120. {503.156f, -2124.51f, 1040.860f, 0.0f},
  121. {498.004f, 2201.57f, 1046.093f, 0.0f},
  122. {508.989f, -2124.55f, 1045.3564f, 0.0f}
  123. };
  124.  
  125. class boss_the_lich_king : public CreatureScript
  126. {
  127. public:
  128. boss_the_lich_king() : CreatureScript("boss_the_lich_king") { }
  129.  
  130. struct boss_the_lich_kingAI : public BossAI
  131. {
  132. boss_the_lich_kingAI(Creature* creature) : BossAI(creature, DATA_THE_LICH_KING), summons(me)
  133. {
  134. instance = me->GetInstanceScript();
  135. }
  136.  
  137. void Reset() //before intro phase
  138. {
  139. events.Reset();
  140. events.SetPhase(PHASE_NONE);
  141. me->SetReactState(REACT_PASSIVE);
  142. me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
  143. instance->SetBossState(DATA_THE_LICH_KING, NOT_STARTED);
  144. }
  145.  
  146. void DoAction(const int32 actionId) //outro
  147. {
  148. if (actionId == ACTION_START_OUTRO && HealthBelowPct(11))
  149. {
  150. events.SetPhase(PHASE_ENDING);
  151. events.ScheduleEvent(EVENT_ENDING_1_KING, 10000, 0, PHASE_ENDING);
  152. events.ScheduleEvent(EVENT_ENDING_2_KING, 16000, 0, PHASE_ENDING);
  153. events.ScheduleEvent(EVENT_ENDING_3_KING, 22000, 0, PHASE_ENDING);
  154. events.ScheduleEvent(EVENT_ENDING_4_KING, 28000, 0, PHASE_ENDING);
  155. events.ScheduleEvent(EVENT_ENDING_5_TIRION, 34000, 0, PHASE_ENDING);
  156. events.ScheduleEvent(EVENT_TIRION_LIGHT, 40000, 0, PHASE_ENDING);
  157. events.ScheduleEvent(EVENT_TIRION_MOVE_3, 46000, 0, PHASE_ENDING);
  158. events.ScheduleEvent(EVENT_TIRION_JUMP, 52000, 0, PHASE_ENDING);
  159. events.ScheduleEvent(EVENT_CHANNEL_KING, 55000, 0, PHASE_ENDING);
  160. events.ScheduleEvent(EVENT_ENDING_6_KING, 60000, 0, PHASE_ENDING);
  161. events.ScheduleEvent(EVENT_FROSTMOURNE_TRIGGER, 64000, 0, PHASE_ENDING);
  162. events.ScheduleEvent(EVENT_ENDING_8_TIRION, 70000, 0, PHASE_ENDING);
  163. events.ScheduleEvent(EVENT_SUMMON_MENETHIL, 75000, 0, PHASE_ENDING);
  164. events.ScheduleEvent(EVENT_ENDING_11_FATHER, 80000, 0, PHASE_ENDING);
  165. events.ScheduleEvent(EVENT_REVIVE, 85000, 0, PHASE_ENDING);
  166. events.ScheduleEvent(EVENT_ENDING_10_TIRION, 94000, 0, PHASE_ENDING);
  167. events.ScheduleEvent(EVENT_ENDING_12_KING, 100000, 0, PHASE_ENDING);
  168. }
  169. }
  170.  
  171. void UpdateAI(const uint32 diff)
  172. {
  173. if (!UpdateVictim() && !(events.GetPhaseMask() & ( <<PHASE_ENDING NUMBER HERE)))
  174. return;
  175.  
  176. events.Update(diff);
  177.  
  178. while (uint32 eventId = events.ExecuteEvent())
  179. {
  180. switch (eventId)
  181. {
  182. case EVENT_ENDING_1_KING:
  183. DoScriptText(SAY_ENDING_1_KING, me);
  184. me->GetMotionMaster()->MoveIdle();
  185. me->SetReactState(REACT_PASSIVE);
  186. me->AttackStop();
  187. me->CastStop();
  188. break;
  189. case EVENT_ENDING_2_KING:
  190. DoScriptText(SAY_ENDING_2_KING, me);
  191. me->GetMotionMaster()->MovePoint(0, MovePos[4]);
  192. break;
  193. case EVENT_ENDING_3_KING:
  194. DoScriptText(SAY_ENDING_3_KING, me);
  195. DoCast(me, SPELL_CHANNEL_KING);
  196. break;
  197. case EVENT_ENDING_4_KING:
  198. DoScriptText(SAY_ENDING_4_KING, me);
  199. break;
  200. case EVENT_ENDING_5_TIRION:
  201. if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
  202. DoScriptText(SAY_ENDING_5_TIRION, tirion);
  203. break;
  204. case EVENT_TIRION_LIGHT:
  205. if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
  206. tirion->CastSpell(tirion, SPELL_TIRION_LIGHT, true);
  207. break;
  208. case EVENT_TIRION_MOVE_3:
  209. if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
  210. tirion->GetMotionMaster()->MovePoint(0, MovePos[3]);
  211. break;
  212. case EVENT_TIRION_JUMP:
  213. if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
  214. tirion->CastSpell(tirion, SPELL_TIRION_JUMP, true);
  215. break;
  216. case EVENT_CHANNEL_KING:
  217. me->RemoveAura(SPELL_CHANNEL_KING);
  218. DoCast(me, SPELL_SUMMON_FROSTMOURNE);
  219. DoCast(me, SPELL_SUMMON_BROKEN_FROSTMOURNE);
  220. break;
  221. case EVENT_ENDING_6_KING:
  222. DoCast(me, SPELL_DROP_FROSTMOURNE);
  223. DoCast(me, SPELL_SOUL_EFFECT);
  224. DoScriptText(SAY_ENDING_6_KING, me);
  225. break;
  226. case EVENT_FROSTMOURNE_TRIGGER:
  227. DoCast(me, SPELL_SUMMON_FROSTMOURNE_TRIGGER);
  228. me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 473);
  229. break;
  230. case EVENT_ENDING_8_TIRION:
  231. if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
  232. DoScriptText(SAY_ENDING_8_TIRION, tirion);
  233. break;
  234. case EVENT_SUMMON_MENETHIL:
  235. if(Creature* frostmourne = me->FindNearestCreature(NPC_FROSTMOURNE_TRIGGER, 25.0f, true))
  236. frostmourne->CastSpell(frostmourne, SPELL_SUMMON_MENETHIL, true);
  237. break;
  238. case EVENT_ENDING_11_FATHER:
  239. if(Creature* father = me->FindNearestCreature(NPC_MENETHIL, 25.0f, true))
  240. DoScriptText(SAY_ENDING_11_FATHER, father);
  241. break;
  242. case EVENT_REVIVE:
  243. if(Creature* father = me->FindNearestCreature(NPC_MENETHIL, 25.0f, true))
  244. father->CastSpell(me, SPELL_REVIVE, true);
  245. break;
  246. case EVENT_ENDING_10_TIRION:
  247. if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
  248. DoScriptText(SAY_ENDING_10_TIRION, tirion);
  249. break;
  250. case EVENT_ENDING_12_KING:
  251. DoScriptText(SAY_ENDING_12_KING, me);
  252. me->GetMotionMaster()->MovePoint(0, MovePos[6]);
  253. if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
  254. tirion->AI()->AttackStart(me);
  255. if(Creature* father = me->FindNearestCreature(NPC_MENETHIL, 25.0f, true))
  256. father->AI()->AttackStart(me);
  257. break;
  258. }
  259. }
  260. }
  261. DoMeleeAttackIfReady();
  262. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement