Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.08 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. SPELL_LIGHT_EFFECT = 71773,
  59. };
  60.  
  61. enum Events
  62. {
  63. EVENT_INTRO_1_KING
  64. EVENT_INTRO_2_TIRION
  65. EVENT_INTRO_3_KING
  66. EVENT_INTRO_4_TIRION
  67. EVENT_ICEBLOCK_TRIGGER
  68. EVENT_INTRO_5_KING
  69. EVENT_COMBAT_START
  70. EVENT_ENDING_1_KING
  71. EVENT_ENDING_2_KING
  72. EVENT_ENDING_3_KING
  73. EVENT_ENDING_4_KING
  74. EVENT_ENDING_5_TIRION
  75. EVENT_TIRION_LIGHT
  76. EVENT_TIRION_MOVE_3
  77. EVENT_TIRION_JUMP
  78. EVENT_CHANNEL_KING
  79. EVENT_DROP_FROSTMOURNE
  80. EVENT_ENDING_6_KING
  81. EVENT_FROSTMOURNE_TRIGGER
  82. EVENT_ENDING_8_TIRION
  83. EVENT_SUMMON_MENETHIL
  84. EVENT_ENDING_11_FATHER
  85. EVENT_REVIVE
  86. EVENT_ENDING_10_TIRION
  87. EVENT_ENDING_12_KING
  88. };
  89.  
  90. enum Phases
  91. {
  92. PHASE_NONE
  93. PHASE_INTRO
  94. PHASE_COMBAT
  95. PHASE_ENDING
  96. };
  97.  
  98.  
  99. enum Actions
  100. {
  101. ACTION_START_EVENT
  102. ACTION_START_OUTRO
  103. };
  104.  
  105. enum Points
  106. {
  107. POINT_START_EVENT_1 = 3899500,
  108. POINT_START_EVENT_2 = 3659700,
  109. POINT_START_EVENT_3 = 3899501,
  110. POINT_START_EVENT_4 = 3659701,
  111. POINT_START_EVENT_5 = 999999,
  112. POINT_START_EVENT_6 = 999999,
  113. };
  114.  
  115. struct Position MovePos[7]=
  116. {
  117. {489.297f, -2124.84f, 1040.857f, 0.0f}, // tirionstart
  118. {462.835f, -2123.67f, 1040.908f, 0.0f}, // lichstart
  119. {490.110f, -2124.98f, 1040.860f, 0.0f}, // tirionstarticeblock
  120. {493.628f, -2124.56f, 1040.856f, 0.0f}, // tirionoutro
  121. {503.156f, -2124.51f, 1040.860f, 0.0f},
  122. {498.004f, 2201.57f, 1046.093f, 0.0f},
  123. {508.989f, -2124.55f, 1045.3564f, 0.0f}
  124. };
  125.  
  126. class boss_the_lich_king : public CreatureScript
  127. {
  128. public:
  129. boss_the_lich_king() : CreatureScript("boss_the_lich_king") { }
  130.  
  131. struct boss_the_lich_kingAI : public BossAI
  132. {
  133. boss_the_lich_kingAI(Creature* creature) : BossAI(creature, DATA_THE_LICH_KING), summons(me)
  134. {
  135. instance = me->GetInstanceScript();
  136. }
  137.  
  138. void Reset() //before intro phase
  139. {
  140. events.Reset();
  141. events.SetPhase(PHASE_NONE);
  142. me->SetReactState(REACT_PASSIVE);
  143. me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
  144. instance->SetBossState(DATA_THE_LICH_KING, NOT_STARTED);
  145. }
  146.  
  147. void DoAction(const int32 actionId) //outro
  148. {
  149. if (actionId == ACTION_START_OUTRO && HealthBelowPct(11))
  150. {
  151. events.SetPhase(PHASE_ENDING);
  152. events.ScheduleEvent(EVENT_ENDING_1_KING, 10000, 0, PHASE_ENDING);
  153. events.ScheduleEvent(EVENT_ENDING_2_KING, 16000, 0, PHASE_ENDING);
  154. events.ScheduleEvent(EVENT_ENDING_3_KING, 22000, 0, PHASE_ENDING);
  155. events.ScheduleEvent(EVENT_ENDING_4_KING, 28000, 0, PHASE_ENDING);
  156. events.ScheduleEvent(EVENT_ENDING_5_TIRION, 34000, 0, PHASE_ENDING);
  157. events.ScheduleEvent(EVENT_TIRION_LIGHT, 40000, 0, PHASE_ENDING);
  158. events.ScheduleEvent(EVENT_TIRION_MOVE_3, 46000, 0, PHASE_ENDING);
  159. events.ScheduleEvent(EVENT_TIRION_JUMP, 52000, 0, PHASE_ENDING);
  160. events.ScheduleEvent(EVENT_CHANNEL_KING, 55000, 0, PHASE_ENDING);
  161. events.ScheduleEvent(EVENT_ENDING_6_KING, 60000, 0, PHASE_ENDING);
  162. events.ScheduleEvent(EVENT_FROSTMOURNE_TRIGGER, 64000, 0, PHASE_ENDING);
  163. events.ScheduleEvent(EVENT_ENDING_8_TIRION, 70000, 0, PHASE_ENDING);
  164. events.ScheduleEvent(EVENT_SUMMON_MENETHIL, 75000, 0, PHASE_ENDING);
  165. events.ScheduleEvent(EVENT_ENDING_11_FATHER, 80000, 0, PHASE_ENDING);
  166. events.ScheduleEvent(EVENT_REVIVE, 85000, 0, PHASE_ENDING);
  167. events.ScheduleEvent(EVENT_ENDING_10_TIRION, 94000, 0, PHASE_ENDING);
  168. events.ScheduleEvent(EVENT_ENDING_12_KING, 100000, 0, PHASE_ENDING);
  169. }
  170. }
  171.  
  172. void UpdateAI(const uint32 diff)
  173. {
  174. if (!UpdateVictim() && !(events.GetPhaseMask() & ( <<PHASE_ENDING NUMBER HERE)))
  175. return;
  176.  
  177. events.Update(diff);
  178.  
  179. while (uint32 eventId = events.ExecuteEvent())
  180. {
  181. switch (eventId)
  182. {
  183. case EVENT_ENDING_1_KING:
  184. DoScriptText(SAY_ENDING_1_KING, me);
  185. me->GetMotionMaster()->MoveIdle();
  186. me->SetReactState(REACT_PASSIVE);
  187. me->AttackStop();
  188. me->CastStop();
  189. break;
  190. case EVENT_ENDING_2_KING:
  191. DoScriptText(SAY_ENDING_2_KING, me);
  192. me->GetMotionMaster()->MovePoint(0, MovePos[4]);
  193. break;
  194. case EVENT_ENDING_3_KING:
  195. DoScriptText(SAY_ENDING_3_KING, me);
  196. DoCast(me, SPELL_CHANNEL_KING);
  197. break;
  198. case EVENT_ENDING_4_KING:
  199. DoScriptText(SAY_ENDING_4_KING, me);
  200. break;
  201. case EVENT_ENDING_5_TIRION:
  202. if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
  203. DoScriptText(SAY_ENDING_5_TIRION, tirion);
  204. break;
  205. case EVENT_TIRION_LIGHT:
  206. if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
  207. tirion->CastSpell(tirion, SPELL_TIRION_LIGHT, true);
  208. break;
  209. case EVENT_TIRION_MOVE_3:
  210. if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
  211. tirion->GetMotionMaster()->MovePoint(0, MovePos[3]);
  212. break;
  213. case EVENT_TIRION_JUMP:
  214. if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
  215. tirion->CastSpell(tirion, SPELL_TIRION_JUMP, true);
  216. break;
  217. case EVENT_CHANNEL_KING:
  218. me->RemoveAura(SPELL_CHANNEL_KING);
  219. DoCast(me, SPELL_SUMMON_FROSTMOURNE);
  220. DoCast(me, SPELL_SUMMON_BROKEN_FROSTMOURNE);
  221. break;
  222. case EVENT_ENDING_6_KING:
  223. DoCast(me, SPELL_DROP_FROSTMOURNE);
  224. DoCast(me, SPELL_SOUL_EFFECT);
  225. DoScriptText(SAY_ENDING_6_KING, me);
  226. break;
  227. case EVENT_FROSTMOURNE_TRIGGER:
  228. DoCast(me, SPELL_SUMMON_FROSTMOURNE_TRIGGER);
  229. me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 473);
  230. break;
  231. case EVENT_ENDING_8_TIRION:
  232. if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
  233. DoScriptText(SAY_ENDING_8_TIRION, tirion);
  234. break;
  235. case EVENT_SUMMON_MENETHIL:
  236. if(Creature* frostmourne = me->FindNearestCreature(NPC_FROSTMOURNE_TRIGGER, 25.0f, true))
  237. frostmourne->CastSpell(frostmourne, SPELL_SUMMON_MENETHIL, true);
  238. break;
  239. case EVENT_ENDING_11_FATHER:
  240. if(Creature* father = me->FindNearestCreature(NPC_MENETHIL, 25.0f, true))
  241. DoScriptText(SAY_ENDING_11_FATHER, father);
  242. break;
  243. case EVENT_REVIVE:
  244. if(Creature* father = me->FindNearestCreature(NPC_MENETHIL, 25.0f, true))
  245. father->CastSpell(father, SPELL_REVIVE, true);
  246. if(spell->Id == SPELL_REVIVE)
  247. DoCast(father, SPELL_REVIVE_EFFECT);
  248. break;
  249. case EVENT_ENDING_10_TIRION:
  250. if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
  251. DoScriptText(SAY_ENDING_10_TIRION, tirion);
  252. break;
  253. case EVENT_ENDING_12_KING:
  254. DoScriptText(SAY_ENDING_12_KING, me);
  255. me->GetMotionMaster()->MovePoint(0, MovePos[6]);
  256. if(Creature* tirion = Unit::GetCreature(*me, tirionGUID))
  257. tirion->AI()->AttackStart(me);
  258. if(Creature* father = me->FindNearestCreature(NPC_MENETHIL, 25.0f, true))
  259. father->AI()->AttackStart(me);
  260. break;
  261. }
  262. }
  263. }
  264.  
  265. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement