Advertisement
Rushor

Untitled

Aug 28th, 2014
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.00 KB | None | 0 0
  1. /*######
  2. ## npc_anchorite_barada
  3. ######*/
  4. enum
  5. {
  6. SAY_EXORCISM_1 = 0,
  7. SAY_EXORCISM_2 = 1,
  8. SAY_EXORCISM_3 = 2,
  9. SAY_EXORCISM_4 = 3,
  10. SAY_EXORCISM_5 = 4,
  11. SAY_EXORCISM_6 = 5,
  12. ANCHORITE_TEXTS = 6,
  13. CONEL_TEXTS = 7,
  14. SPELL_BARADA_COMMANDS = 39277,
  15. SPELL_BARADA_FALTERS = 39278,
  16. SPELL_JULES_THREATENS = 39284,
  17. SPELL_JULES_GOES_UPRIGHT = 39294,
  18. SPELL_JULES_VOMITS = 39295,
  19. SPELL_JULES_RELEASE_DARKNESS = 39306, // periodic trigger missing spell 39305
  20. NPC_ANCHORITE_BARADA = 22431,
  21. NPC_COLONEL_JULES = 22432,
  22. NPC_DARKNESS_RELEASED = 22507, // summoned by missing spell 39305
  23. QUEST_ID_EXORCISM = 10935,
  24. TEXT_ID_CLEANSED = 10706,
  25. TEXT_ID_POSSESSED = 10707,
  26. TEXT_ID_ANCHORITE = 10683,
  27. EVENT_SAY_EXORCISM_1 = 1,
  28. EVENT_SAY_EXORCISM_2 = 2,
  29. EVENT_QUEST_ID_EXORCISM = 3,
  30. EVENT_KNEEL_DOWN = 5,
  31. EVENT_SAY_EXORCISM_3 = 6,
  32. EVENT_SPELL_BARADA_COMMANDS = 7,
  33. EVENT_SAY_EXORCISM_4 = 8,
  34. EVENT_SAY_EXORCISM_5 = 9,
  35. EVENT_SPELL_BARADA_FALTERS = 10,
  36. EVENT_SPELL_JULES_THREATENS = 11,
  37. EVENT_NPC_COLONEL_JULES1 = 12,
  38. EVENT_NPC_ANCHORITE_BARADA1 = 13,
  39. EVENT_NPC_COLONEL_JULES2 = 14,
  40. EVENT_NPC_ANCHORITE_BARADA2 = 15,
  41. EVENT_SPELL_JULES_GOES_UPRIGHT = 16,
  42. EVENT_SPELL_JULES_VOMITS = 17,
  43. EVENT_NPC_COLONEL_JULES3 = 18,
  44. EVENT_NPC_ANCHORITE_BARADA3 = 19,
  45. EVENT_NPC_COLONEL_JULES4 = 20,
  46. EVENT_NPC_ANCHORITE_BARADA4 = 21,
  47. EVENT_NPC_COLONEL_JULES5 = 22,
  48. EVENT_NPC_ANCHORITE_BARADA5 = 23,
  49. EVENT_NPC_COLONEL_JULES6 = 24,
  50. EVENT_NPC_ANCHORITE_BARADA6 = 25,
  51. EVENT_NPC_DARKNESS_RELEASED = 26,
  52. EVENT_SAY_EXORCISM_6 = 27,
  53. EVENT_TEXT_ID_CLEANSED = 28,
  54. ACTION_START_EVENT = 0
  55.  
  56. };
  57.  
  58. class npc_anchorite_barada : public CreatureScript
  59. {
  60. public:
  61. npc_anchorite_barada() : CreatureScript("npc_anchorite_barada") { }
  62.  
  63. struct npc_anchorite_baradaAI : public ScriptedAI
  64. {
  65. npc_anchorite_baradaAI(Creature* creature) : ScriptedAI(creature)
  66. {
  67. Reset();
  68. }
  69.  
  70. void Reset()
  71. {
  72. me->SetReactState(REACT_PASSIVE);
  73. me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
  74. me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
  75. events.Reset();
  76. }
  77.  
  78. void sGossipSelect(Player* player, uint32 sender, uint32 action)
  79. {
  80. if (player->GetQuestStatus(QUEST_ID_EXORCISM) == QUEST_STATUS_INCOMPLETE)
  81. {
  82. if (me->GetCreatureTemplate()->GossipMenuId == sender && !action)
  83. {
  84. me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
  85. me->SetStandState(UNIT_STAND_STATE_STAND);
  86. me->AI()->DoAction(ACTION_START_EVENT);
  87. me->setActive(true);
  88. }
  89. }
  90. }
  91.  
  92. void DoAction(int32 action)
  93. {
  94. if (action == ACTION_START_EVENT)
  95. {
  96. events.ScheduleEvent(EVENT_SAY_EXORCISM_1, 2*IN_MILLISECONDS);
  97. }
  98. }
  99.  
  100. void UpdateAI(uint32 diff)
  101. {
  102. events.Update(diff);
  103.  
  104. while (uint32 eventId = events.ExecuteEvent())
  105. {
  106. switch (eventId)
  107. {
  108. case EVENT_SAY_EXORCISM_1:
  109. Talk(SAY_EXORCISM_1);
  110. events.ScheduleEvent(EVENT_SAY_EXORCISM_2, 3*IN_MILLISECONDS);
  111. events.CancelEvent(EVENT_SAY_EXORCISM_1);
  112. break;
  113. case EVENT_SAY_EXORCISM_2:
  114. Talk(SAY_EXORCISM_2);
  115. events.ScheduleEvent(EVENT_QUEST_ID_EXORCISM, 2*IN_MILLISECONDS);
  116. events.CancelEvent(EVENT_SAY_EXORCISM_2);
  117. break;
  118. case EVENT_QUEST_ID_EXORCISM:
  119. me->GetMotionMaster()->MovePath(NPC_ANCHORITE_BARADA * 10, false);
  120. events.ScheduleEvent(EVENT_KNEEL_DOWN, 5*IN_MILLISECONDS);
  121. events.CancelEvent(EVENT_QUEST_ID_EXORCISM);
  122. break;
  123. case EVENT_KNEEL_DOWN:
  124. me->SetStandState(UNIT_STAND_STATE_KNEEL);
  125. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  126. {
  127. me->SetFacingToObject(Colonel);
  128. }
  129. events.ScheduleEvent(EVENT_SAY_EXORCISM_3, 1*IN_MILLISECONDS);
  130. events.CancelEvent(EVENT_KNEEL_DOWN);
  131. break;
  132. case EVENT_SAY_EXORCISM_3:
  133. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  134. {
  135. Colonel->AI()->Talk(SAY_EXORCISM_3);
  136. }
  137. events.ScheduleEvent(EVENT_SPELL_BARADA_COMMANDS, 3*IN_MILLISECONDS);
  138. break;
  139. case EVENT_SPELL_BARADA_COMMANDS:
  140. DoCast(me, SPELL_BARADA_COMMANDS, true);
  141. events.ScheduleEvent(EVENT_SAY_EXORCISM_4, 10*IN_MILLISECONDS);
  142. break;
  143. case EVENT_SAY_EXORCISM_4:
  144. Talk(SAY_EXORCISM_4);
  145. events.ScheduleEvent(EVENT_SAY_EXORCISM_5, 10*IN_MILLISECONDS);
  146. break;
  147. case EVENT_SAY_EXORCISM_5:
  148. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  149. {
  150. Colonel->AI()->Talk(SAY_EXORCISM_5);
  151. }
  152. events.ScheduleEvent(EVENT_SPELL_BARADA_FALTERS, 10*IN_MILLISECONDS);
  153. break;
  154. case EVENT_SPELL_BARADA_FALTERS:
  155. DoCast(me, SPELL_BARADA_FALTERS, true);
  156. // start levitating
  157. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  158. {
  159. Colonel->SetCanFly(true);
  160. Colonel->SetDisableGravity(true);
  161. Colonel->GetMotionMaster()->MovePoint(0, Colonel->GetPositionX(), Colonel->GetPositionY(), Colonel->GetPositionZ() + 2.0f);
  162. }
  163. events.ScheduleEvent(EVENT_SPELL_JULES_THREATENS, 2*IN_MILLISECONDS);
  164. break;
  165. case EVENT_SPELL_JULES_THREATENS:
  166. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  167. {
  168. Colonel->CastSpell(Colonel, SPELL_JULES_THREATENS, true);
  169. Colonel->CastSpell(Colonel, SPELL_JULES_RELEASE_DARKNESS, true);
  170. Colonel->SetFacingTo(0);
  171. }
  172. events.ScheduleEvent(EVENT_NPC_COLONEL_JULES1, 15*IN_MILLISECONDS);
  173. break;
  174. case EVENT_NPC_COLONEL_JULES1:
  175. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  176. {
  177. Colonel->AI()->Talk(CONEL_TEXTS);
  178. }
  179. events.ScheduleEvent(EVENT_NPC_ANCHORITE_BARADA1, 15*IN_MILLISECONDS);
  180. break;
  181. case EVENT_NPC_ANCHORITE_BARADA1:
  182. Talk(ANCHORITE_TEXTS);
  183. events.ScheduleEvent(EVENT_NPC_COLONEL_JULES2, 15*IN_MILLISECONDS);
  184. break;
  185. case EVENT_NPC_COLONEL_JULES2:
  186. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  187. {
  188. Colonel->AI()->Talk(CONEL_TEXTS);
  189. }
  190. events.ScheduleEvent(EVENT_NPC_ANCHORITE_BARADA2, 15*IN_MILLISECONDS);
  191. break;
  192. case EVENT_NPC_ANCHORITE_BARADA2:
  193. Talk(ANCHORITE_TEXTS);
  194. events.ScheduleEvent(EVENT_SPELL_JULES_GOES_UPRIGHT, 15*IN_MILLISECONDS);
  195. break;
  196. case EVENT_SPELL_JULES_GOES_UPRIGHT:
  197. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  198. {
  199. Colonel->InterruptNonMeleeSpells(false);
  200. Colonel->CastSpell(Colonel, SPELL_JULES_GOES_UPRIGHT, false);
  201. }
  202. events.ScheduleEvent(EVENT_SPELL_JULES_VOMITS, 3*IN_MILLISECONDS);
  203. break;
  204. case EVENT_SPELL_JULES_VOMITS:
  205. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  206. {
  207. Colonel->CastSpell(Colonel, SPELL_JULES_VOMITS, true);
  208. Colonel->GetMotionMaster()->MovePath(NPC_COLONEL_JULES * 10, true);
  209. }
  210. events.ScheduleEvent(EVENT_NPC_COLONEL_JULES3, 7*IN_MILLISECONDS);
  211. break;
  212. case EVENT_NPC_COLONEL_JULES3:
  213. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  214. {
  215. Colonel->AI()->Talk(CONEL_TEXTS);
  216. }
  217. events.ScheduleEvent(EVENT_NPC_ANCHORITE_BARADA3, 10*IN_MILLISECONDS);
  218. break;
  219. case EVENT_NPC_ANCHORITE_BARADA3:
  220. Talk(ANCHORITE_TEXTS);
  221. events.ScheduleEvent(EVENT_NPC_COLONEL_JULES4, 10*IN_MILLISECONDS);
  222. break;
  223. case EVENT_NPC_COLONEL_JULES4:
  224. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  225. {
  226. Colonel->AI()->Talk(CONEL_TEXTS);
  227. }
  228. events.ScheduleEvent(EVENT_NPC_ANCHORITE_BARADA4, 10*IN_MILLISECONDS);
  229. break;
  230. case EVENT_NPC_ANCHORITE_BARADA4:
  231. Talk(ANCHORITE_TEXTS);
  232. events.ScheduleEvent(EVENT_NPC_COLONEL_JULES5, 10*IN_MILLISECONDS);
  233. break;
  234. case EVENT_NPC_COLONEL_JULES5:
  235. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  236. {
  237. Colonel->AI()->Talk(CONEL_TEXTS);
  238. }
  239. events.ScheduleEvent(EVENT_NPC_ANCHORITE_BARADA5, 10*IN_MILLISECONDS);
  240. break;
  241. case EVENT_NPC_ANCHORITE_BARADA5:
  242. Talk(ANCHORITE_TEXTS);
  243. events.ScheduleEvent(EVENT_NPC_COLONEL_JULES6, 10*IN_MILLISECONDS);
  244. break;
  245. case EVENT_NPC_COLONEL_JULES6:
  246. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  247. {
  248. Colonel->AI()->Talk(CONEL_TEXTS);
  249. }
  250. events.ScheduleEvent(EVENT_NPC_ANCHORITE_BARADA6, 10*IN_MILLISECONDS);
  251. break;
  252. case EVENT_NPC_ANCHORITE_BARADA6:
  253. Talk(ANCHORITE_TEXTS);
  254. events.ScheduleEvent(EVENT_NPC_DARKNESS_RELEASED, 10*IN_MILLISECONDS);
  255. break;
  256. case EVENT_NPC_DARKNESS_RELEASED:
  257. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  258. {
  259. Colonel->RemoveAurasDueToSpell(SPELL_JULES_THREATENS);
  260. Colonel->RemoveAurasDueToSpell(SPELL_JULES_RELEASE_DARKNESS);
  261. Colonel->RemoveAurasDueToSpell(SPELL_JULES_VOMITS);
  262. Colonel->GetMotionMaster()->MoveTargetedHome();
  263. Colonel->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
  264. }
  265. events.ScheduleEvent(EVENT_SAY_EXORCISM_6, 5*IN_MILLISECONDS);
  266. break;
  267. case EVENT_SAY_EXORCISM_6:
  268. Talk(SAY_EXORCISM_6);
  269. events.ScheduleEvent(EVENT_TEXT_ID_CLEANSED, 3*IN_MILLISECONDS);
  270. break;
  271. case EVENT_TEXT_ID_CLEANSED:
  272. if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
  273. {
  274. Colonel->RemoveAurasDueToSpell(SPELL_JULES_GOES_UPRIGHT);
  275. Colonel->SetCanFly(false);
  276. Colonel->SetDisableGravity(false);
  277. }
  278. // resume wp movemnet
  279. me->RemoveAllAuras();
  280. me->SetStandState(UNIT_STAND_STATE_STAND);
  281. break;
  282. default:
  283. break;
  284. }
  285. }
  286. // does not melee
  287. }
  288. private:
  289. EventMap events;
  290. };
  291.  
  292. CreatureAI* GetAI(Creature* creature) const
  293. {
  294. return new npc_anchorite_baradaAI(creature);
  295. }
  296. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement