Advertisement
Rushor

Untitled

Aug 16th, 2014
433
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.98 KB | None | 0 0
  1. /*#####
  2. ## npc_fhwoor
  3. #####*/
  4.  
  5. enum
  6. {
  7. SAY_ESCORT_START = -1000995,
  8. SAY_PREPARE = -1000996,
  9. SAY_CAMP_ENTER = -1000997,
  10. SAY_AMBUSH = -1000998,
  11. SAY_AMBUSH_CLEARED = -1000999,
  12. SAY_ESCORT_COMPLETE = -1001000,
  13.  
  14. SPELL_STOMP = 31277,
  15. SPELL_THUNDERSHOCK = 31964,
  16.  
  17. NPC_ENCHANTRESS = 18088,
  18. NPC_SLAVEDRIVER = 18089,
  19. NPC_SSSLITH = 18154,
  20.  
  21. GO_ARK_OF_SSSLITH = 182082,
  22.  
  23. QUEST_ID_FHWOOR_SMASH = 9729,
  24. };
  25.  
  26. struct MANGOS_DLL_DECL npc_fhwoorAI : public npc_escortAI
  27. {
  28. npc_fhwoorAI(Creature* pCreature) : npc_escortAI(pCreature) { Reset(); }
  29.  
  30. uint32 m_uiStompTimer;
  31. uint32 m_uiShockTimer;
  32.  
  33. bool m_bIsAmbush;
  34.  
  35. void Reset() override
  36. {
  37. m_uiStompTimer = urand(3000, 7000);
  38. m_uiShockTimer = urand(7000, 11000);
  39. m_bIsAmbush = false;
  40. }
  41.  
  42. void ReceiveAIEvent(AIEventType eventType, Creature* /*pSender*/, Unit* pInvoker, uint32 uiMiscValue) override
  43. {
  44. if (eventType == AI_EVENT_START_ESCORT && pInvoker->GetTypeId() == TYPEID_PLAYER)
  45. {
  46. DoScriptText(SAY_ESCORT_START, m_creature, pInvoker);
  47. m_creature->SetFactionTemporary(FACTION_ESCORT_N_NEUTRAL_ACTIVE, TEMPFACTION_RESTORE_RESPAWN);
  48. Start(true, (Player*)pInvoker, GetQuestTemplateStore(uiMiscValue), true);
  49. }
  50. }
  51.  
  52. void JustSummoned(Creature* pSummoned) override
  53. {
  54. // move summoned towards the creature
  55. if (m_bIsAmbush)
  56. {
  57. float fX, fY, fZ;
  58. m_creature->GetContactPoint(pSummoned, fX, fY, fZ);
  59. pSummoned->GetMotionMaster()->MovePoint(0, fX, fY, fZ);
  60. }
  61. }
  62.  
  63. void SummonedCreatureJustDied(Creature* pSummoned) override
  64. {
  65. // resume escort
  66. if (pSummoned->GetEntry() == NPC_SSSLITH)
  67. SetEscortPaused(false);
  68. }
  69.  
  70. void WaypointReached(uint32 uiPointId) override
  71. {
  72. switch (uiPointId)
  73. {
  74. case 24:
  75. DoScriptText(SAY_PREPARE, m_creature);
  76. break;
  77. case 25:
  78. DoScriptText(SAY_CAMP_ENTER, m_creature);
  79. SetRun(false);
  80. break;
  81. case 46:
  82. // despawn the Ark
  83. if (GameObject* pArk = GetClosestGameObjectWithEntry(m_creature, GO_ARK_OF_SSSLITH, 10.0f))
  84. pArk->SetLootState(GO_JUST_DEACTIVATED);
  85. // spawn npcs
  86. m_creature->SummonCreature(NPC_ENCHANTRESS, 526.12f, 8136.96f, 21.64f, 0.57f, TEMPSUMMON_TIMED_OOC_OR_DEAD_DESPAWN, 60000);
  87. m_creature->SummonCreature(NPC_SLAVEDRIVER, 524.09f, 8138.67f, 21.49f, 0.58f, TEMPSUMMON_TIMED_OOC_OR_DEAD_DESPAWN, 60000);
  88. m_creature->SummonCreature(NPC_SLAVEDRIVER, 526.93f, 8133.88f, 21.56f, 0.58f, TEMPSUMMON_TIMED_OOC_OR_DEAD_DESPAWN, 60000);
  89. break;
  90. case 70:
  91. DoScriptText(SAY_AMBUSH, m_creature);
  92. // spawn npcs
  93. m_bIsAmbush = true;
  94. m_creature->SummonCreature(NPC_SSSLITH, 162.91f, 8192.08f, 22.55f, 5.98f, TEMPSUMMON_TIMED_OOC_OR_DEAD_DESPAWN, 60000);
  95. m_creature->SummonCreature(NPC_ENCHANTRESS, 162.34f, 8193.99f, 22.85f, 5.98f, TEMPSUMMON_TIMED_OOC_OR_DEAD_DESPAWN, 60000);
  96. m_creature->SummonCreature(NPC_SLAVEDRIVER, 163.07f, 8187.04f, 22.71f, 0.10f, TEMPSUMMON_TIMED_OOC_OR_DEAD_DESPAWN, 60000);
  97. SetEscortPaused(true);
  98. break;
  99. case 71:
  100. DoScriptText(SAY_AMBUSH_CLEARED, m_creature);
  101. SetRun();
  102. break;
  103. case 92:
  104. SetRun(false);
  105. break;
  106. case 93:
  107. DoScriptText(SAY_ESCORT_COMPLETE, m_creature);
  108. if (Player* pPlayer = GetPlayerForEscort())
  109. pPlayer->GroupEventHappens(QUEST_ID_FHWOOR_SMASH, m_creature);
  110. break;
  111. }
  112. }
  113.  
  114. void UpdateEscortAI(const uint32 uiDiff) override
  115. {
  116. if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
  117. return;
  118.  
  119. if (m_uiStompTimer < uiDiff)
  120. {
  121. if (DoCastSpellIfCan(m_creature, SPELL_STOMP) == CAST_OK)
  122. m_uiStompTimer = urand(9000, 15000);
  123. }
  124. else
  125. m_uiStompTimer -= uiDiff;
  126.  
  127. if (m_uiShockTimer < uiDiff)
  128. {
  129. if (DoCastSpellIfCan(m_creature, SPELL_THUNDERSHOCK) == CAST_OK)
  130. m_uiShockTimer = urand(15000, 20000);
  131. }
  132. else
  133. m_uiShockTimer -= uiDiff;
  134.  
  135. DoMeleeAttackIfReady();
  136. }
  137. };
  138.  
  139. CreatureAI* GetAI_npc_fhwoor(Creature* pCreature)
  140. {
  141. return new npc_fhwoorAI(pCreature);
  142. }
  143.  
  144. bool QuestAccept_npc_fhwoor(Player* pPlayer, Creature* pCreature, const Quest* pQuest)
  145. {
  146. if (pQuest->GetQuestId() == QUEST_ID_FHWOOR_SMASH)
  147. {
  148. pCreature->AI()->SendAIEvent(AI_EVENT_START_ESCORT, pPlayer, pCreature, pQuest->GetQuestId());
  149. return true;
  150. }
  151.  
  152. return false;
  153. }
  154.  
  155. INSERT INTO `script_waypoint` VALUES (17877, 0, 231.403, 8479.94, 17.928, 3000, '');
  156. INSERT INTO `script_waypoint` VALUES (17877, 1, 214.645, 8469.64, 23.121, 0, '');
  157. INSERT INTO `script_waypoint` VALUES (17877, 2, 208.538, 8463.48, 24.738, 0, '');
  158. INSERT INTO `script_waypoint` VALUES (17877, 3, 196.524, 8446.08, 24.814, 0, '');
  159. INSERT INTO `script_waypoint` VALUES (17877, 4, 188.186, 8431.67, 22.625, 0, '');
  160. INSERT INTO `script_waypoint` VALUES (17877, 5, 181.196, 8420.15, 23.73, 0, '');
  161. INSERT INTO `script_waypoint` VALUES (17877, 6, 171.919, 8406.29, 21.844, 0, '');
  162. INSERT INTO `script_waypoint` VALUES (17877, 7, 166.613, 8396.48, 23.585, 0, '');
  163. INSERT INTO `script_waypoint` VALUES (17877, 8, 167.237, 8386.69, 21.546, 0, '');
  164. INSERT INTO `script_waypoint` VALUES (17877, 9, 169.401, 8372.67, 19.599, 0, '');
  165. INSERT INTO `script_waypoint` VALUES (17877, 10, 174.148, 8342.33, 20.409, 0, '');
  166. INSERT INTO `script_waypoint` VALUES (17877, 11, 173.195, 8324.18, 21.126, 0, '');
  167. INSERT INTO `script_waypoint` VALUES (17877, 12, 172.415, 8310.29, 21.702, 0, '');
  168. INSERT INTO `script_waypoint` VALUES (17877, 13, 173.233, 8298.75, 19.564, 0, '');
  169. INSERT INTO `script_waypoint` VALUES (17877, 14, 173.984, 8287.92, 18.839, 0, '');
  170. INSERT INTO `script_waypoint` VALUES (17877, 15, 189.984, 8266.26, 18.5, 0, '');
  171. INSERT INTO `script_waypoint` VALUES (17877, 16, 204.057, 8256.02, 19.701, 0, '');
  172. INSERT INTO `script_waypoint` VALUES (17877, 17, 212.95, 8248.74, 21.583, 0, '');
  173. INSERT INTO `script_waypoint` VALUES (17877, 18, 223.152, 8240.16, 20.001, 0, '');
  174. INSERT INTO `script_waypoint` VALUES (17877, 19, 230.73, 8232.99, 18.99, 0, '');
  175. INSERT INTO `script_waypoint` VALUES (17877, 20, 238.261, 8223.8, 20.72, 0, '');
  176. INSERT INTO `script_waypoint` VALUES (17877, 21, 247.651, 8214.21, 19.146, 0, '');
  177. INSERT INTO `script_waypoint` VALUES (17877, 22, 259.231, 8207.8, 19.278, 0, '');
  178. INSERT INTO `script_waypoint` VALUES (17877, 23, 272.36, 8204.75, 19.98, 0, '');
  179. INSERT INTO `script_waypoint` VALUES (17877, 24, 282.211, 8202.09, 22.09, 20000, 'SAY_PREPARE');
  180. INSERT INTO `script_waypoint` VALUES (17877, 25, 282.211, 8202.09, 22.09, 0, 'SAY_CAMP_ENTER');
  181. INSERT INTO `script_waypoint` VALUES (17877, 26, 296.006, 8191.64, 21.68, 0, '');
  182. INSERT INTO `script_waypoint` VALUES (17877, 27, 304.472, 8188.05, 20.707, 0, '');
  183. INSERT INTO `script_waypoint` VALUES (17877, 28, 317.574, 8182.04, 18.296, 0, '');
  184. INSERT INTO `script_waypoint` VALUES (17877, 29, 340.046, 8178.78, 17.937, 0, '');
  185. INSERT INTO `script_waypoint` VALUES (17877, 30, 353.799, 8181.22, 18.557, 0, '');
  186. INSERT INTO `script_waypoint` VALUES (17877, 31, 368.231, 8186.32, 22.45, 0, '');
  187. INSERT INTO `script_waypoint` VALUES (17877, 32, 375.737, 8187.03, 23.916, 0, '');
  188. INSERT INTO `script_waypoint` VALUES (17877, 33, 390.067, 8186.64, 21.19, 0, '');
  189. INSERT INTO `script_waypoint` VALUES (17877, 34, 398.699, 8181.82, 18.648, 0, '');
  190. INSERT INTO `script_waypoint` VALUES (17877, 35, 412.325, 8172.61, 17.927, 0, '');
  191. INSERT INTO `script_waypoint` VALUES (17877, 36, 424.541, 8161.96, 19.575, 0, '');
  192. INSERT INTO `script_waypoint` VALUES (17877, 37, 436.9, 8157.41, 22.115, 0, '');
  193. INSERT INTO `script_waypoint` VALUES (17877, 38, 444.548, 8155.41, 23.553, 0, '');
  194. INSERT INTO `script_waypoint` VALUES (17877, 39, 457.201, 8154.23, 23.429, 0, '');
  195. INSERT INTO `script_waypoint` VALUES (17877, 40, 470.989, 8154.14, 21.65, 0, '');
  196. INSERT INTO `script_waypoint` VALUES (17877, 41, 483.435, 8154.15, 20.706, 0, '');
  197. INSERT INTO `script_waypoint` VALUES (17877, 42, 507.558, 8157.52, 21.729, 0, '');
  198. INSERT INTO `script_waypoint` VALUES (17877, 43, 528.036, 8162.03, 22.795, 0, '');
  199. INSERT INTO `script_waypoint` VALUES (17877, 44, 542.402, 8161.1, 22.914, 0, '');
  200. INSERT INTO `script_waypoint` VALUES (17877, 45, 557.286, 8160.27, 23.708, 13000, '');
  201. INSERT INTO `script_waypoint` VALUES (17877, 46, 557.286, 8160.27, 23.708, 0, 'take the Ark');
  202. INSERT INTO `script_waypoint` VALUES (17877, 47, 539.767, 8144.84, 22.217, 0, '');
  203. INSERT INTO `script_waypoint` VALUES (17877, 48, 531.296, 8139.48, 22.146, 0, '');
  204. INSERT INTO `script_waypoint` VALUES (17877, 49, 509.056, 8139.26, 20.705, 0, '');
  205. INSERT INTO `script_waypoint` VALUES (17877, 50, 499.975, 8136.23, 20.408, 0, '');
  206. INSERT INTO `script_waypoint` VALUES (17877, 51, 485.511, 8129.39, 22.01, 0, '');
  207. INSERT INTO `script_waypoint` VALUES (17877, 52, 474.371, 8128.53, 22.657, 0, '');
  208. INSERT INTO `script_waypoint` VALUES (17877, 53, 460.708, 8130.12, 20.946, 0, '');
  209. INSERT INTO `script_waypoint` VALUES (17877, 54, 449.248, 8129.27, 21.033, 0, '');
  210. INSERT INTO `script_waypoint` VALUES (17877, 55, 433.67, 8125.06, 18.44, 0, '');
  211. INSERT INTO `script_waypoint` VALUES (17877, 56, 412.822, 8121.58, 17.603, 0, '');
  212. INSERT INTO `script_waypoint` VALUES (17877, 57, 391.15, 8117.81, 17.736, 0, '');
  213. INSERT INTO `script_waypoint` VALUES (17877, 58, 379.024, 8114.19, 17.889, 0, '');
  214. INSERT INTO `script_waypoint` VALUES (17877, 59, 365.11, 8106.99, 18.22, 0, '');
  215. INSERT INTO `script_waypoint` VALUES (17877, 60, 352.531, 8108.94, 17.932, 0, '');
  216. INSERT INTO `script_waypoint` VALUES (17877, 61, 340.894, 8120.64, 17.374, 0, '');
  217. INSERT INTO `script_waypoint` VALUES (17877, 62, 328.48, 8134.93, 18.112, 0, '');
  218. INSERT INTO `script_waypoint` VALUES (17877, 63, 317.573, 8143.25, 20.604, 0, '');
  219. INSERT INTO `script_waypoint` VALUES (17877, 64, 311.146, 8146.8, 21.097, 0, '');
  220. INSERT INTO `script_waypoint` VALUES (17877, 65, 299.359, 8152.58, 18.676, 0, '');
  221. INSERT INTO `script_waypoint` VALUES (17877, 66, 276.115, 8160.44, 17.735, 0, '');
  222. INSERT INTO `script_waypoint` VALUES (17877, 67, 262.704, 8170.51, 17.478, 0, '');
  223. INSERT INTO `script_waypoint` VALUES (17877, 68, 243.755, 8177.75, 17.744, 0, '');
  224. INSERT INTO `script_waypoint` VALUES (17877, 69, 233.496, 8178.43, 17.528, 0, '');
  225. INSERT INTO `script_waypoint` VALUES (17877, 70, 219.874, 8182.55, 19.637, 0, 'SAY_AMBUSH - escort paused');
  226. INSERT INTO `script_waypoint` VALUES (17877, 71, 219.874, 8182.55, 19.637, 20000, 'SAY_AMBUSH_CLEARED');
  227. INSERT INTO `script_waypoint` VALUES (17877, 72, 210.978, 8193.98, 20.777, 0, '');
  228. INSERT INTO `script_waypoint` VALUES (17877, 73, 203.699, 8213.04, 22.768, 0, '');
  229. INSERT INTO `script_waypoint` VALUES (17877, 74, 199.246, 8225.54, 24.847, 0, '');
  230. INSERT INTO `script_waypoint` VALUES (17877, 75, 195.064, 8239.91, 22.64, 0, '');
  231. INSERT INTO `script_waypoint` VALUES (17877, 76, 193.198, 8253.62, 20.083, 0, '');
  232. INSERT INTO `script_waypoint` VALUES (17877, 77, 189.151, 8264.83, 18.714, 0, '');
  233. INSERT INTO `script_waypoint` VALUES (17877, 78, 178.814, 8281.04, 19.07, 0, '');
  234. INSERT INTO `script_waypoint` VALUES (17877, 79, 173.952, 8293.24, 18.533, 0, '');
  235. INSERT INTO `script_waypoint` VALUES (17877, 80, 174.399, 8305.46, 21.006, 0, '');
  236. INSERT INTO `script_waypoint` VALUES (17877, 81, 175.124, 8319.51, 21.626, 0, '');
  237. INSERT INTO `script_waypoint` VALUES (17877, 82, 175.69, 8339.65, 20.375, 0, '');
  238. INSERT INTO `script_waypoint` VALUES (17877, 83, 172.754, 8362.67, 19.181, 0, '');
  239. INSERT INTO `script_waypoint` VALUES (17877, 84, 176.465, 8379.8, 18.445, 0, '');
  240. INSERT INTO `script_waypoint` VALUES (17877, 85, 186.433, 8393.13, 18.933, 0, '');
  241. INSERT INTO `script_waypoint` VALUES (17877, 86, 199.438, 8407.83, 18.763, 0, '');
  242. INSERT INTO `script_waypoint` VALUES (17877, 87, 211.874, 8422.38, 18.785, 0, '');
  243. INSERT INTO `script_waypoint` VALUES (17877, 88, 219.9, 8436.26, 21.927, 0, '');
  244. INSERT INTO `script_waypoint` VALUES (17877, 89, 225.062, 8450.57, 22.832, 0, '');
  245. INSERT INTO `script_waypoint` VALUES (17877, 90, 226.942, 8464.41, 19.822, 0, '');
  246. INSERT INTO `script_waypoint` VALUES (17877, 91, 231.403, 8479.94, 17.928, 0, '');
  247. INSERT INTO `script_waypoint` VALUES (17877, 92, 247.625, 8483.8, 22.464, 13000, '');
  248. INSERT INTO `script_waypoint` VALUES (17877, 93, 231.403, 8479.94, 17.928, 10000, 'SAY_ESCORT_COMPLETE');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement