Guest User

Untitled

a guest
Jun 24th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 34.34 KB | None | 0 0
  1. [quote]#include "ScriptPCH.h"
  2. #include "icecrown_citadel.h"
  3. #include "MapManager.h"
  4. #include "Transport.h"
  5.  
  6. // Fusileros
  7. #define NPC_ZAFOD_BOOMBOX 37184
  8. #define ITEM_GOBLIN_ROCKET_PACK 49278
  9.  
  10. const Position SpawnZafodAlliance = {0.0f, 0.0f, 0.0f, 0.0f};
  11. const Position SpawnZafodHorde = {0.0f, 0.0f, 0.0f, 0.0f};
  12.  
  13. #define ZAFOD_BOOMBOX_GOSSIP_GET 1000
  14. #define ZAFOD_BOOMBOX_GOSSIP_CANCEL 1001
  15.  
  16. // Do_Action
  17. #define DO_ACTION_START_GUNSHIP_BATTLE 0
  18. #define DO_ACTION_FINISH_GUNSHIP_BATTLE 1
  19.  
  20. // tp de fin
  21. const Position DeathbringerRise = { -549.80548f, 2211.19238f, 539.29119f, 6.27718f};
  22.  
  23. // Spawns de NPCs
  24. #define SPAWN_SERGEANT 0
  25. #define SPAWN_DISTANCE_0 1 // Soldado con Mortero o Lanza Cohetes
  26. #define SPAWN_CAC 2 // Infante de marina o Saqueador
  27. #define SPAWN_CAST 3 // Hechizero o Mago de batalla
  28. #define SPAWN_DISTANCE_1 4 // Fusileros o Lanzadores de hachas
  29.  
  30. // Zonas de Spawns
  31. const Position SpawnPosAlliance[] =
  32. {
  33. {0.0f, 0.0f, 0.0f, 0.0f},
  34. {0.0f, 0.0f, 0.0f, 0.0f},
  35. {0.0f, 0.0f, 0.0f, 0.0f},
  36. {0.0f, 0.0f, 0.0f, 0.0f},
  37. {0.0f, 0.0f, 0.0f, 0.0f}
  38. };
  39. const Position SpawnPosHorde[] =
  40. {
  41. {0.0f, 0.0f, 0.0f, 0.0f},
  42. {0.0f, 0.0f, 0.0f, 0.0f},
  43. {0.0f, 0.0f, 0.0f, 0.0f},
  44. {0.0f, 0.0f, 0.0f, 0.0f},
  45. {0.0f, 0.0f, 0.0f, 0.0f}
  46. };
  47.  
  48. //-----------------------------------------------------------------------
  49. // Alianza :
  50. #define GO_SKYBREAKER 192242
  51. #define GO_GUNSHIP_STAIRS_ALLIANCE 201709 // Acceso innecesario, imposible
  52. #define GO_ALLIANCE_GUNSHIP_PORTAL 195371 // z Útiles ?
  53. #define NPC_GUNSHIP_CANNON_ALLIANCE 34929
  54.  
  55. #define SKYBREAKER_X 0
  56. #define SKYBREAKER_Y 0
  57. #define SKYBREAKER_Z 0
  58. #define SKYBREAKER_RAYON 0
  59.  
  60. #define NPC_MURADIN_BRONZEBEARD 36948
  61.  
  62. // Dialogos
  63. #define ALLIANCE_GOSSIP_ACTION_START 10875
  64. #define ALLIANCE_GOSSIP_ACTION_CANCEL 1001
  65. #define ALLIANCE_GOSSIP_ACTION_TP 1002
  66.  
  67. const Position PosMuradinBronzebeard[]=
  68. {
  69. {-472.596f, 2466.8701f, 190.7371f, 6.204f}, // Primera posicion
  70. {0.0f, 0.0f, 0.0f, 0.0f} // Segunda posicion
  71. };
  72.  
  73. #define NPC_SKYBREAKER_SERGEANT 36961
  74. #define NPC_SKYBREAKER_MORTAR_SOLDIER 36978
  75. #define NPC_SKYBREAKER_MARINE 36950
  76. #define NPC_SKYBREAKER_SORCERER 37026
  77. #define NPC_SKYBREAKER_RIFLEMAN 36969
  78.  
  79. #define AURA_ON_SKYBREAKER 70120
  80.  
  81. //-----------------------------------------------------------------------
  82.  
  83. //-----------------------------------------------------------------------
  84. // HORDA :
  85. #define GO_OGRIM_HAMMER 192241
  86. #define GO_GUNSHIP_STAIRS_HORDE 202211 // Innecesario.
  87. #define GO_HORDE_GUNSHIP_PORTAL 196413 // z Útil ?
  88. #define NPC_GUNSHIP_CANNON_HORDE 34935
  89.  
  90. #define OGRIM_HAMMER_X 0
  91. #define OGRIM_HAMMER_Y 0
  92. #define OGRIM_HAMMER_Z 0
  93. #define OGRIM_HAMMER_RAYON 0
  94.  
  95. #define NPC_HIGH_OVERLORD_VAROK_SAURFANG 36939
  96.  
  97. // Dialogos
  98. #define HORDE_GOSSIP_ACTION_START 10876
  99. #define HORDE_GOSSIP_ACTION_CANCEL 1004
  100. #define HORDE_GOSSIP_ACTION_TP 1005
  101.  
  102. const Position PosHighOverlordVarokSaurfang[]=
  103. {
  104. {0.0f, 0.0f, 0.0f, 0.0f}, // Primera posicion
  105. {0.0f, 0.0f, 0.0f, 0.0f} // Segunda posicion
  106. };
  107.  
  108. #define NPC_KORKRON_SERGEANT 36960
  109. #define NPC_KORKRON_ROCKETEER 36982
  110. #define NPC_KORKRON_REAVER 36957
  111. #define NPC_KORKRON_BATTLE_MAGE 37117
  112. #define NPC_KORKRON_AXETHROWER 36968
  113.  
  114. #define AURA_ON_OGRIM_HAMMER 70121
  115.  
  116. //-----------------------------------------------------------------------
  117.  
  118. // CANON_GUNSHIP
  119. #define SPELL_CANNON_BLAST 69400
  120. #define SPELL_INCINERATING_BLAST 69402
  121.  
  122. // MURADIN BARBABRONCE// ALTO_SENOR_SUPREMO_COLMILLOSAURIO
  123. #define SPELL_CLEAVE 15284
  124. #define SPELL_RENDING_THROW 70309
  125. #define SPELL_TASTE_OF_BLOOD 69634
  126.  
  127. #define AURA_BATTLE_FURY_10 72306
  128. #define AURA_BATTLE_FURY_25 72307
  129.  
  130. // TODOS LOS ENEMIGOS TIENEN ESTE HECHIZO EXCEPTO LOS COMANDANTES
  131. #define SPELL_BURNING_PITCH 71335
  132.  
  133. // HECHICERO // MAGO_DE_BATALLA
  134. #define SPELL_BELOW_ZERO 69705
  135.  
  136. // SOLDADO_CON_MORTERO // LANZACOHETES
  137. #define SPELL_ROCKET_ARTILLERY 69679
  138. #define SPELL_EXPLOSION 69680 // Efecto, cuando el cohete explosiona en el suelo.
  139.  
  140. // SARGENTO
  141. #define SPELL_BLADESTORM 69652
  142. #define SPELL_BLADESTORM_TRIGGER 69653 // Uso innecesario SPELL_BLADESTORM
  143. #define SPELL_DESPERATE_RESOLVE_10_NM 69647
  144. #define SPELL_DESPERATE_RESOLVE_10_HM 72537
  145. #define SPELL_DESPERATE_RESOLVE_25_NM 72536
  146. #define SPELL_DESPERATE_RESOLVE_25_HM 72538
  147. #define SPELL_WOUNDING_STRIKE_10_NM 69651
  148. #define SPELL_WOUNDING_STRIKE_10_HM 72570
  149. #define SPELL_WOUNDING_STRIKE_25_NM 72569
  150. #define SPELL_WOUNDING_STRIKE_25_HM 72571
  151.  
  152. // FUSILEROS
  153. #define SPELL_SHOOT_10_NM 70162
  154. #define SPELL_SHOOT_10_HM 72567
  155. #define SPELL_SHOOT_25_NM 72566
  156. #define SPELL_SHOOT_25_HM 72568
  157.  
  158. // LANZADORES_DE_HACHAS
  159. #define SPELL_HURL_AXE_10_NM 70161
  160. #define SPELL_HURL_AXE_10_HM 72540
  161. #define SPELL_HURL_AXE_25_NM 72539
  162. #define SPELL_HURL_AXE_25_HM 72541
  163.  
  164. // BUFFOS_DE_EXPERIENCIA
  165. #define SPELL_EXPERIENCED 71188
  166. #define SPELL_VETERAN 71193
  167. #define SPELL_ELITE 71195
  168.  
  169. //-----------------------------------------------------------------------
  170. //------------------------------ GRITOS ----------------------------------
  171. //-----------------------------------------------------------------------
  172. // HORDA ----------------------------------------------------------------
  173. //-----------------------------------------------------------------------
  174. // PRIMERA_ESCUADRA_ASISTIDA
  175. #define SAY_KORKRON_FIRST_SQUAD_0 "Thank the spirits for you, brothers and sisters. The Skybreaker has already left. Quickly now, to Orgrim's Hammer! If you leave soon, you may be able to catch them."
  176. #define SAY_KORKRON_FIRST_SQUAD_1 "This should be helpin'ya!"
  177.  
  178. // SEGUNDA_ESCUADRA_ASISTIDA
  179. #define SAY_KORKRON_SECOND_SQUAD_0 "Aka'Magosh, brave warriors. The alliance is in great number here."
  180. #define SAY_KORKRON_SECOND_SQUAD_1 "Captain Saurfang will be pleased to see you aboard Orgrim's Hammer. Make haste, we will secure the area until you are ready for take-off."
  181.  
  182. // COMIENZA_EL_EVENTO
  183. #define YELL_EVENT_BEGIN_HORDE_HIGH_OVERLORD_SAURFANG_0 "Rise up, sons and daughters of the Horde! Today we battle a hated enemy of the Horde! LOK'TAR OGAR! Kor'kron, take us out!"
  184. #define YELL_EVENT_BEGIN_HORDE_HIGH_OVERLORD_SAURFANG_1 "What is that?! Something approaching in the distance!"
  185. #define YELL_EVENT_BEGIN_HORDE_HIGH_OVERLORD_SAURFANG_2 "ALLIANCE GUNSHIP! ALL HANDS ON DECK!"
  186. #define YELL_EVENT_BEGIN_HORDE_MURADIN_BRONZEBEARD_0 "Move yer jalopy or we'll blow it out of the sky, orc! The Horde's got no business here!"
  187. #define YELL_EVENT_BEGIN_HORDE_HIGH_OVERLORD_SAURFANG_3 "You will know our business soon! KOR'KRON, ANNIHILATE THEM!"
  188.  
  189. // EMBARQUE AL MARTILLO ORGRIMMAR
  190. #define YELL_BOARDING_ORGRIM_S_HAMMER_MURADIN_BRONZEBEARD_0 "Marines, Sergeants, attack!"
  191. #define YELL_BOARDING_ORGRIM_S_HAMMER_HIGH_OVERLORD_SAURFANG_0 "You DARE board my ship? Your death will come swiftly."
  192.  
  193. // NUEVO_FUSILERO
  194. #define YELL_NEW_RIFLEMEN_MURADIN "Riflemen, shoot faster!"
  195. // NUEVO_EQUIPO_DE_MORTERO
  196. #define YELL_NEW_MORTAR_TEAM_MURADIN "Mortar team, reload!"
  197. // NUEVO_MAGO
  198. #define YELL_NEW_MAGE_MURADIN "We're taking hull damage, get a sorcerer out here to shut down those cannons!"
  199. // VICTORIA_HORDA
  200. #define YELL_HORDE_VICTORY_SAURFANG "The Alliance falter. Onward to the Lich King!"
  201. // DERROTA_HORDA
  202. #define YELL_HORDE_DEFEAT_SAURFANG "Damage control! Put those fires out! You haven't seen the last of the Horde!"
  203.  
  204. // ALIANZA -------------------------------------------------------------
  205. //-----------------------------------------------------------------------
  206. // PRIMERA_ESCUADRA_ASISTIDA
  207. #define SAY_SKYBREAKER_FIRST_SQUAD_0 "Thank goodness you arrived when you did, heroes. Orgrim's Hammer has already left. Quickly now, to The Skybreaker! If you leave soon, you may be able to catch them."
  208. #define SAY_SKYBREAKER_FIRST_SQUAD_1 "This ought to help!"
  209.  
  210. // SEGUNDA_ESCUADRA_ASISTIDA
  211. #define SAY_SKYBREAKER_SECOND_SQUAD_0 "You have my thanks. We were outnumbered until you arrived."
  212. #define SAY_SKYBREAKER_SECOND_SQUAD_1 "Captain Muradin is waiting aboard The Skybreaker. We'll secure the area until you are ready for take off."
  213. #define SAY_SKYBREAKER_SECOND_SQUAD_2 "Skybreaker infantry, hold position!"
  214.  
  215. // COMIENZA_EL_EVENTO
  216. #define YELL_EVENT_BEGIN_ALLIANCE_MURADIN_BRONZEBEARD_0 "Fire up the engines! We got a meetin' with destiny, lads!"
  217. #define YELL_EVENT_BEGIN_ALLIANCE_MURADIN_BRONZEBEARD_1 "Hold on to yer hats!"
  218. #define YELL_EVENT_BEGIN_ALLIANCE_MURADIN_BRONZEBEARD_2 "What in the world is that? Grab me spyglass, crewman!"
  219. #define YELL_EVENT_BEGIN_ALLIANCE_MURADIN_BRONZEBEARD_3 "By me own beard! HORDE SAILIN' IN FAST 'N HOT!"
  220. #define YELL_EVENT_BEGIN_ALLIANCE_MURADIN_BRONZEBEARD_4 "EVASIVE ACTION! MAN THE GUNS!"
  221. #define YELL_EVENT_BEGIN_ALLIANCE_MURADIN_BRONZEBEARD_5 "Cowardly dogs! Ye blindsided us!"
  222. #define YELL_EVENT_BEGIN_ALLIANCE_HIGH_OVERLORD_SAURFANG_0 "This is not your battle, dwarf. Back down or we will be forced to destroy your ship."
  223. #define YELL_EVENT_BEGIN_ALLIANCE_MURADIN_BRONZEBEARD_6 "Not me battle? I dunnae who ye? think ye are, mister, but I got a score to settle with Arthas and yer not gettin' in me way! FIRE ALL GUNS! FIRE! FIRE!"
  224.  
  225. // EMBARCANDO_EL_ROMPECIELOS
  226. #define YELL_BOARDING_THE_SKYBREAKER_HIGH_OVERLORD_SAURFANG_0 "Reavers, Sergeants, attack!"
  227. #define YELL_BOARDING_THE_SKYBREAKER_MURADIN_BRONZEBEARD_0 "What's this then?! Ye won't be takin' this son o' Ironforge's vessel without a fight!."
  228.  
  229. // NUEVO_LANZAHACHAS
  230. #define YELL_NEW_AXETHROWERS_HIGH_OVERLORD_SAURFANG_0 "Axethrowers, hurl faster!"
  231.  
  232. // NUEVO_FUSILEROS
  233. #define YELL_NEW_ROCKETEERS_HIGH_OVERLORD_SAURFANG_0 "Rocketeers, reload!"
  234.  
  235. // NUEVO_MAGO_DE_BATALLA
  236. #define YELL_NEW_BATTLE_MAGE_HIGH_OVERLORD_SAURFANG_0 "We're taking hull damage, get a battle-mage out here to shut down those cannons!"
  237.  
  238. // VICTORIA_ALIANZA
  239. #define YELL_ALLIANCE_VICTORY_MURADIN_BRONZEBEARD_0 "Don't say I didn't warn ya, scoundrels! Onward, brothers and sisters!"
  240.  
  241. // DERROTA_ALIANZA
  242. #define YELL_ALLIANCE_DEFEAT_MURADIN_BRONZEBEARD_0 "Captain Bartlett, get us out of here! We're taken too much damage to stay afloat!"
  243.  
  244.  
  245. //-----------------------------------------------------------------------
  246. #define SPELL_ACHIEVEMENT 72959
  247.  
  248. //-----------------------------------------------------------------------
  249. #define PHASE_NOT_STARTED 0
  250. #define PHASE_DISTANCE 1
  251. #define PHASE_BOARDING 2
  252. #define PHASE_END 3
  253.  
  254. #define EXP_NULL 0
  255. #define EXP_EXPERIENCED 20000
  256. #define EXP_VETERAN 40000
  257. #define EXP_ELITE 80000
  258.  
  259. //-----------------------------------------------------------------------
  260.  
  261. void buffExp( ScriptedAI * _script, uint32 timer_Spawn)
  262. {
  263. if( timer_Spawn < EXP_EXPERIENCED)
  264. return;
  265. if( timer_Spawn > EXP_EXPERIENCED && timer_Spawn < EXP_VETERAN) {
  266. _script->DoCast( _script->me, SPELL_EXPERIENCED);
  267. return;
  268. }
  269. if( timer_Spawn > EXP_VETERAN && timer_Spawn < EXP_ELITE) {
  270. _script->DoCast( _script->me, SPELL_VETERAN);
  271. return;
  272. }
  273. if( timer_Spawn > EXP_ELITE) {
  274. _script->DoCast( _script->me, SPELL_ELITE);
  275. return;
  276. }
  277. }
  278.  
  279. class npc_zafod_boombox : public CreatureScript
  280. {
  281. public:
  282. npc_zafod_boombox() : CreatureScript("npc_zafod_boombox") { }
  283.  
  284. struct npc_zafod_boomboxAI : public ScriptedAI
  285. {
  286. npc_zafod_boomboxAI(Creature* pCreature) : ScriptedAI(pCreature)
  287. { pInstance = me->GetInstanceScript(); }
  288.  
  289. void UpdateAI( const uint32 diff) { }
  290.  
  291. InstanceScript* pInstance;
  292. };
  293.  
  294. bool OnGossipHello(Player* pPlayer, Creature* pCreature)
  295. {
  296. if ( pCreature->GetInstanceScript()->GetBossState(DATA_GUNSHIP_BATTLE_EVENT) == NOT_STARTED ||
  297. pCreature->GetInstanceScript()->GetBossState(DATA_GUNSHIP_BATTLE_EVENT) == DONE)
  298. return false;
  299.  
  300. pPlayer->ADD_GOSSIP_ITEM(49278, "Dame una de estas maquinas", 1000, ZAFOD_BOOMBOX_GOSSIP_GET);
  301. pPlayer->ADD_GOSSIP_ITEM(0, "Tal vez, mas tarde", 1001, ZAFOD_BOOMBOX_GOSSIP_CANCEL);
  302. pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
  303.  
  304. return true;
  305. }
  306.  
  307. bool OnGossipSelect(Player* player, Creature* pCreature, uint32 /*sender*/, uint32 action)
  308. {
  309. player->PlayerTalkClass->ClearMenus();
  310. player->CLOSE_GOSSIP_MENU();
  311.  
  312. switch( action) {
  313. case ALLIANCE_GOSSIP_ACTION_START :
  314. pCreature->AI()->DoAction( DO_ACTION_START_GUNSHIP_BATTLE); // lancement de la cannonicre !
  315. return true;
  316. case ALLIANCE_GOSSIP_ACTION_TP :
  317. pCreature->AI()->DoAction( DO_ACTION_FINISH_GUNSHIP_BATTLE); // aprcs fin de la cannonicre !
  318. return true;
  319. case ALLIANCE_GOSSIP_ACTION_CANCEL :
  320. return true;
  321. };
  322.  
  323. return false;
  324. }
  325.  
  326. CreatureAI* GetAI(Creature* pCreature) const
  327. {
  328. return new npc_zafod_boomboxAI(pCreature);
  329. }
  330. };
  331.  
  332. class boss_muradin_bronzebeard : public CreatureScript
  333. {
  334. public:
  335. boss_muradin_bronzebeard() : CreatureScript("boss_muradin_bronzebeard") { }
  336.  
  337. struct boss_muradin_bronzebardAI : public BossAI
  338. {
  339. boss_muradin_bronzebardAI(Creature* pCreature) : BossAI(pCreature, DATA_GUNSHIP_BATTLE_EVENT)
  340. {
  341. instance->SetBossState( DATA_GUNSHIP_BATTLE_EVENT, NOT_STARTED);
  342.  
  343. instance->SetData( DATA_GUNSHIP_BATTLE, PHASE_NOT_STARTED);
  344.  
  345. bDialog = false;
  346. dialogID = 0;
  347. dialogTimer = 0;
  348. }
  349.  
  350. void Reset()
  351. {
  352. timer_Cleave = urand( 8000, 10000);
  353. timer_RendingThrow = urand( 10000, 12000);
  354. timer_TasteOfBlood = 0; // -40%
  355.  
  356. bDialog = false;
  357. dialogID = 0;
  358. dialogTimer = 0;
  359. }
  360.  
  361. void DamageTaken(Unit* /*done_by*/, uint32& damage)
  362. {
  363. if( !bBattleStart)
  364. damage = 0;
  365. }
  366.  
  367. void EnterCombat(Unit* /*who*/)
  368. {
  369. }
  370.  
  371. void Spawn( uint32 code)
  372. {
  373. uint8 spawn = floor( (long double) urand( 0, 5));
  374. switch( code) {
  375. case SPAWN_SERGEANT :
  376. lSummons.push_back( DoSpawnCreature( NPC_KORKRON_SERGEANT, SpawnPosHorde[spawn].GetPositionX(), SpawnPosHorde[spawn].GetPositionY(), SpawnPosHorde[spawn].GetPositionZ(), SpawnPosHorde[spawn].GetOrientation(), TEMPSUMMON_DEAD_DESPAWN,0));
  377. break;
  378. case SPAWN_DISTANCE_0 :
  379. lSummons.push_back( DoSpawnCreature( NPC_KORKRON_ROCKETEER, SpawnPosHorde[spawn].GetPositionX(), SpawnPosHorde[spawn].GetPositionY(), SpawnPosHorde[spawn].GetPositionZ(), SpawnPosHorde[spawn].GetOrientation(), TEMPSUMMON_DEAD_DESPAWN,0));
  380. break;
  381. case SPAWN_CAC :
  382. lSummons.push_back( DoSpawnCreature( NPC_KORKRON_REAVER, SpawnPosHorde[spawn].GetPositionX(), SpawnPosHorde[spawn].GetPositionY(), SpawnPosHorde[spawn].GetPositionZ(), SpawnPosHorde[spawn].GetOrientation(), TEMPSUMMON_DEAD_DESPAWN,0));
  383. break;
  384. case SPAWN_CAST :
  385. lSummons.push_back( DoSpawnCreature( NPC_KORKRON_BATTLE_MAGE, SpawnPosHorde[spawn].GetPositionX(), SpawnPosHorde[spawn].GetPositionY(), SpawnPosHorde[spawn].GetPositionZ(), SpawnPosHorde[spawn].GetOrientation(), TEMPSUMMON_DEAD_DESPAWN,0));
  386. break;
  387. case SPAWN_DISTANCE_1 :
  388. lSummons.push_back( DoSpawnCreature( NPC_KORKRON_AXETHROWER, SpawnPosHorde[spawn].GetPositionX(), SpawnPosHorde[spawn].GetPositionY(), SpawnPosHorde[spawn].GetPositionZ(), SpawnPosHorde[spawn].GetOrientation(), TEMPSUMMON_DEAD_DESPAWN,0));
  389. break;
  390. };
  391. }
  392.  
  393. void Start()
  394. {
  395. //zafodBoombox = DoSpawnCreature( NPC_ZAFOD_BOOMBOX, SpawnPosHorde[spawn].GetPositionX(), SpawnPosHorde[spawn].GetPositionY(), SpawnPosHorde[spawn].GetPositionZ(), SpawnPosHorde[spawn].GetOrientation(), TEMPSUMMON_DEAD_DESPAWN,0)
  396.  
  397. }
  398.  
  399. void UpdateAI( const uint32 diff)
  400. {
  401. if( bDialog) {
  402. if( dialogTimer <= diff) {
  403. switch( dialogID) {
  404.  
  405. // START_EVENT
  406. case 0 :
  407. me->MonsterYell( YELL_EVENT_BEGIN_ALLIANCE_MURADIN_BRONZEBEARD_0, LANG_UNIVERSAL, 0);
  408. dialogID = 1;
  409. dialogTimer = 2000;
  410. break;
  411. case 1 :
  412. me->MonsterYell( YELL_EVENT_BEGIN_ALLIANCE_MURADIN_BRONZEBEARD_1, LANG_UNIVERSAL, 0);
  413. dialogID = 2;
  414. dialogTimer = 2000;
  415. break;
  416. case 2 :
  417. me->MonsterYell( YELL_EVENT_BEGIN_ALLIANCE_MURADIN_BRONZEBEARD_2, LANG_UNIVERSAL, 0);
  418. dialogID = 3;
  419. dialogTimer = 2000;
  420. break;
  421. case 3 :
  422. me->MonsterYell( YELL_EVENT_BEGIN_ALLIANCE_MURADIN_BRONZEBEARD_3, LANG_UNIVERSAL, 0);
  423. dialogID = 4;
  424. dialogTimer = 2000;
  425. break;
  426. case 4 :
  427. me->MonsterYell( YELL_EVENT_BEGIN_ALLIANCE_MURADIN_BRONZEBEARD_4, LANG_UNIVERSAL, 0);
  428. dialogID = 5;
  429. dialogTimer = 2000;
  430. break;
  431. case 5 :
  432. me->MonsterYell( YELL_EVENT_BEGIN_ALLIANCE_MURADIN_BRONZEBEARD_5, LANG_UNIVERSAL, 0);
  433. dialogID = 6;
  434. dialogTimer = 2000;
  435. break;
  436. case 6 :
  437. if( Creature* pHighOverlordSaurfang = Unit::GetCreature(*me, instance->GetData64( NPC_HIGH_OVERLORD_VAROK_SAURFANG))) {
  438. pHighOverlordSaurfang->MonsterYell( YELL_EVENT_BEGIN_ALLIANCE_HIGH_OVERLORD_SAURFANG_0, LANG_UNIVERSAL, 0);
  439. dialogID = 7;
  440. dialogTimer = 2000;
  441. }
  442. break;
  443. case 7 :
  444. me->MonsterYell( YELL_EVENT_BEGIN_ALLIANCE_MURADIN_BRONZEBEARD_6, LANG_UNIVERSAL, 0);
  445. dialogID = 8;
  446. dialogTimer = 2000;
  447. break;
  448. case 8 :
  449. {
  450. Position tp = PosMuradinBronzebeard[1];
  451. Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
  452. if( !PlayerList.isEmpty()) {
  453. for(Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) {
  454. if( Player *pCurrent = i->getSource()) {
  455. if( me->GetDistance(pCurrent) <= 100.0f)
  456. DoTeleportPlayer( pCurrent, tp.GetPositionX(), tp.GetPositionY(), tp.GetPositionZ(), tp.GetOrientation());
  457. }
  458. }
  459. }
  460.  
  461. me->SetPosition( tp, true);
  462. dialogID = 9;
  463. dialogTimer = 10000;
  464. }
  465. break;
  466.  
  467. // EMBARQUE_EVENTO
  468. case 9 :
  469. if( Creature* pHighOverlordSaurfang = Unit::GetCreature(*me, instance->GetData64( NPC_HIGH_OVERLORD_VAROK_SAURFANG))) {
  470. pHighOverlordSaurfang->MonsterYell( YELL_BOARDING_ORGRIM_S_HAMMER_HIGH_OVERLORD_SAURFANG_0, LANG_UNIVERSAL, 0);
  471. dialogID = 10;
  472. dialogTimer = 2000;
  473. }
  474. break;
  475. case 10 :
  476. me->MonsterYell( YELL_BOARDING_ORGRIM_S_HAMMER_MURADIN_BRONZEBEARD_0, LANG_UNIVERSAL, 0);
  477. dialogID = 11;
  478. dialogTimer = 2000;
  479. break;
  480. case 11 :
  481. // ? COMIENZO DE LA BATALLA DE LOS CANONES !
  482. this->Start();
  483. break;
  484. };
  485. } else dialogTimer -= diff;
  486. } else
  487.  
  488. if( bBattleStart) {
  489. if (!UpdateVictim())
  490. return;
  491.  
  492. if( ( me->GetHealth() / me->GetMaxHealth()) <= 0.4) {
  493. if( timer_TasteOfBlood <= diff) {
  494. DoCast( me, SPELL_TASTE_OF_BLOOD);
  495. timer_TasteOfBlood = 120000;
  496. } else timer_TasteOfBlood -= diff;
  497. }
  498.  
  499. if( timer_Cleave <= diff) {
  500. DoCastVictim( SPELL_CLEAVE);
  501. timer_Cleave = urand( 8000, 10000);
  502. } else timer_Cleave -= diff;
  503.  
  504. if( timer_RendingThrow <= diff) {
  505. DoCastVictim( SPELL_RENDING_THROW);
  506. timer_RendingThrow = urand( 10000, 12000);
  507. } else timer_RendingThrow -= diff;
  508.  
  509. DoMeleeAttackIfReady();
  510. }
  511. }
  512.  
  513. void DoAction(const int32 param)
  514. {
  515. switch( param) {
  516. case DO_ACTION_START_GUNSHIP_BATTLE :
  517. health_theSkybreaker = RAID_MODE( 600000, 1200000);
  518. health_ogrimsHammer = RAID_MODE( 600000, 1200000);
  519.  
  520. instance->SetBossState( DATA_GUNSHIP_BATTLE_EVENT, NOT_STARTED);
  521. instance->SetData( DATA_GUNSHIP_BATTLE, PHASE_NOT_STARTED);
  522.  
  523. bDialog = true;
  524. dialogID = 0;
  525. dialogTimer = 0;
  526. break;
  527.  
  528. case DO_ACTION_FINISH_GUNSHIP_BATTLE :
  529. Position tp = DeathbringerRise;
  530. Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
  531. if( !PlayerList.isEmpty()) {
  532. for(Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) {
  533. if( Player *pCurrent = i->getSource()) {
  534. if( me->GetDistance(pCurrent) <= 100.0f)
  535. DoTeleportPlayer( pCurrent, tp.GetPositionX(), tp.GetPositionY(), tp.GetPositionZ(), tp.GetOrientation());
  536. }
  537. }
  538. }
  539. break;
  540. };
  541. }
  542.  
  543. uint32 health_theSkybreaker;
  544. uint32 health_ogrimsHammer;
  545.  
  546. std::list<Creature*> lSummons;
  547. Creature* zafodBoombox;
  548.  
  549. uint32 timer_Cleave;
  550. uint32 timer_RendingThrow;
  551. uint32 timer_TasteOfBlood;
  552.  
  553. bool bBattleStart;
  554. bool bDialog;
  555. uint32 dialogID;
  556. uint32 dialogTimer;
  557. };
  558.  
  559. bool OnGossipHello(Player* pPlayer, Creature* pCreature)
  560. {
  561. if ( pPlayer->GetTeamId() == TEAM_ALLIANCE)
  562. return false;
  563.  
  564. InstanceScript* pInstance = pCreature->GetInstanceScript();
  565. if (pInstance && pInstance->GetBossState(DATA_GUNSHIP_BATTLE_EVENT) == NOT_STARTED)
  566. {
  567. pPlayer->ADD_GOSSIP_ITEM(0, "Mis aliados estan en buen estado, Muradin, Adelante", 10875, ALLIANCE_GOSSIP_ACTION_START);
  568. pPlayer->ADD_GOSSIP_ITEM(0, "Volveremos más adelante", 631, ALLIANCE_GOSSIP_ACTION_CANCEL);
  569. pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
  570.  
  571. return true;
  572. }
  573.  
  574. if (pInstance && pInstance->GetBossState(DATA_GUNSHIP_BATTLE_EVENT) == DONE)
  575. {
  576. pPlayer->ADD_GOSSIP_ITEM(0, "Vamos a la parte superior del Libramorte", 10876, ALLIANCE_GOSSIP_ACTION_TP);
  577. pPlayer->ADD_GOSSIP_ITEM(0, "Volveremos mas adelante", 631, ALLIANCE_GOSSIP_ACTION_CANCEL);
  578. pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
  579.  
  580. return true;
  581. }
  582. return false;
  583. }
  584.  
  585. bool OnGossipSelect(Player* player, Creature* pCreature, uint32 /*sender*/, uint32 action)
  586. {
  587. player->PlayerTalkClass->ClearMenus();
  588. player->CLOSE_GOSSIP_MENU();
  589.  
  590. switch( action) {
  591. case ALLIANCE_GOSSIP_ACTION_START :
  592. pCreature->AI()->DoAction( DO_ACTION_START_GUNSHIP_BATTLE); // ? Lanzamiento de los Canones !
  593. return true;
  594. case ALLIANCE_GOSSIP_ACTION_TP :
  595. pCreature->AI()->DoAction( DO_ACTION_FINISH_GUNSHIP_BATTLE); // ? Fin de los canones !
  596. return true;
  597. case ALLIANCE_GOSSIP_ACTION_CANCEL :
  598. return true;
  599. };
  600.  
  601. return false;
  602. }
  603.  
  604. CreatureAI* GetAI(Creature* pCreature) const
  605. {
  606. return new boss_muradin_bronzebardAI(pCreature);
  607. }
  608. };
  609.  
  610. class boss_high_overlord_varok_saurfang : public CreatureScript
  611. {
  612. public:
  613. boss_high_overlord_varok_saurfang() : CreatureScript("boss_high_overlord_varok_saurfang") { }
  614.  
  615. struct boss_high_overlord_varok_saurfangAI : public BossAI
  616. {
  617. boss_high_overlord_varok_saurfangAI(Creature* pCreature) : BossAI(pCreature, DATA_GUNSHIP_BATTLE_EVENT)
  618. {
  619. instance->SetBossState( DATA_GUNSHIP_BATTLE_EVENT, NOT_STARTED);
  620.  
  621. instance->SetData( DATA_GUNSHIP_BATTLE, PHASE_NOT_STARTED);
  622.  
  623. bDialog = false;
  624. dialogID = 0;
  625. dialogTimer = 0;
  626. }
  627.  
  628. void Reset()
  629. {
  630. timer_Cleave = urand( 8000, 10000);
  631. timer_RendingThrow = urand( 10000, 12000);
  632. timer_TasteOfBlood = 0; // -40%
  633.  
  634. bDialog = false;
  635. dialogID = 0;
  636. dialogTimer = 0;
  637. }
  638.  
  639. void DamageTaken(Unit* /*done_by*/, uint32& damage)
  640. {
  641. if( !bBattleStart)
  642. damage = 0;
  643. }
  644.  
  645. void EnterCombat(Unit* /*who*/)
  646. {
  647. }
  648.  
  649. void Spawn( uint32 code)
  650. {
  651. uint8 spawn = floor( (long double) urand( 0, 5));
  652. switch( code) {
  653. case SPAWN_SERGEANT :
  654. lSummons.push_back( DoSpawnCreature( NPC_SKYBREAKER_SERGEANT, SpawnPosAlliance[spawn].GetPositionX(), SpawnPosAlliance[spawn].GetPositionY(), SpawnPosAlliance[spawn].GetPositionZ(), SpawnPosAlliance[spawn].GetOrientation(), TEMPSUMMON_DEAD_DESPAWN,0));
  655. break;
  656. case SPAWN_DISTANCE_0 :
  657. lSummons.push_back( DoSpawnCreature( NPC_SKYBREAKER_MORTAR_SOLDIER, SpawnPosAlliance[spawn].GetPositionX(), SpawnPosAlliance[spawn].GetPositionY(), SpawnPosAlliance[spawn].GetPositionZ(), SpawnPosAlliance[spawn].GetOrientation(), TEMPSUMMON_DEAD_DESPAWN,0));
  658. break;
  659. case SPAWN_CAC :
  660. lSummons.push_back( DoSpawnCreature( NPC_SKYBREAKER_MARINE, SpawnPosAlliance[spawn].GetPositionX(), SpawnPosAlliance[spawn].GetPositionY(), SpawnPosAlliance[spawn].GetPositionZ(), SpawnPosAlliance[spawn].GetOrientation(), TEMPSUMMON_DEAD_DESPAWN,0));
  661. break;
  662. case SPAWN_CAST :
  663. lSummons.push_back( DoSpawnCreature( NPC_SKYBREAKER_SORCERER, SpawnPosAlliance[spawn].GetPositionX(), SpawnPosAlliance[spawn].GetPositionY(), SpawnPosAlliance[spawn].GetPositionZ(), SpawnPosAlliance[spawn].GetOrientation(), TEMPSUMMON_DEAD_DESPAWN,0));
  664. break;
  665. case SPAWN_DISTANCE_1 :
  666. lSummons.push_back( DoSpawnCreature( NPC_SKYBREAKER_RIFLEMAN, SpawnPosAlliance[spawn].GetPositionX(), SpawnPosAlliance[spawn].GetPositionY(), SpawnPosAlliance[spawn].GetPositionZ(), SpawnPosAlliance[spawn].GetOrientation(), TEMPSUMMON_DEAD_DESPAWN,0));
  667. break;
  668. };
  669. }
  670.  
  671. void UpdateAI( const uint32 diff)
  672. {
  673. if( bDialog) {
  674. if( dialogTimer <= diff) {
  675. switch( dialogID) {
  676.  
  677. // COMIENZA_EL_EVENTO
  678. case 0 :
  679. me->MonsterYell( YELL_EVENT_BEGIN_HORDE_HIGH_OVERLORD_SAURFANG_0, LANG_UNIVERSAL, 0);
  680. dialogID = 1;
  681. dialogTimer = 2000;
  682. break;
  683. case 1 :
  684. me->MonsterYell( YELL_EVENT_BEGIN_HORDE_HIGH_OVERLORD_SAURFANG_1, LANG_UNIVERSAL, 0);
  685. dialogID = 2;
  686. dialogTimer = 2000;
  687. break;
  688. case 2 :
  689. me->MonsterYell( YELL_EVENT_BEGIN_HORDE_HIGH_OVERLORD_SAURFANG_2, LANG_UNIVERSAL, 0);
  690. dialogID = 3;
  691. dialogTimer = 2000;
  692. break;
  693. case 3 :
  694. if( Creature* pMuradinBronzebeard = Unit::GetCreature(*me, instance->GetData64( NPC_MURADIN_BRONZEBEARD))) {
  695. pMuradinBronzebeard->MonsterYell( YELL_EVENT_BEGIN_HORDE_MURADIN_BRONZEBEARD_0, LANG_UNIVERSAL, 0);
  696. dialogID = 4;
  697. dialogTimer = 2000;
  698. }
  699. break;
  700. case 4 :
  701. me->MonsterYell( YELL_EVENT_BEGIN_HORDE_HIGH_OVERLORD_SAURFANG_3, LANG_UNIVERSAL, 0);
  702. dialogID = 5;
  703. dialogTimer = 2000;
  704. break;
  705. case 5 :
  706. {
  707. Position tp = PosHighOverlordVarokSaurfang[1];
  708. Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
  709. if( !PlayerList.isEmpty()) {
  710. for(Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) {
  711. if( Player *pCurrent = i->getSource()) {
  712. if( me->GetDistance(pCurrent) <= 100.0f)
  713. DoTeleportPlayer( pCurrent, tp.GetPositionX(), tp.GetPositionY(), tp.GetPositionZ(), tp.GetOrientation());
  714. }
  715. }
  716. }
  717.  
  718. me->SetPosition( tp, true);
  719. dialogID = 6;
  720. dialogTimer = 10000;
  721. }
  722. break;
  723.  
  724. // EMBARQUE_EVENTO
  725. case 6 :
  726. if( Creature* pMuradinBronzebeard = Unit::GetCreature(*me, instance->GetData64( NPC_MURADIN_BRONZEBEARD))) {
  727. pMuradinBronzebeard->MonsterYell( YELL_BOARDING_ORGRIM_S_HAMMER_MURADIN_BRONZEBEARD_0, LANG_UNIVERSAL, 0);
  728. dialogID = 7;
  729. dialogTimer = 2000;
  730. }
  731. break;
  732. case 7 :
  733. me->MonsterYell( YELL_BOARDING_ORGRIM_S_HAMMER_HIGH_OVERLORD_SAURFANG_0, LANG_UNIVERSAL, 0);
  734. dialogID = 8;
  735. dialogTimer = 2000;
  736. break;
  737. case 8 :
  738. // ? COMIENZO DE LA BATALLA DE LOS CANONES !
  739.  
  740.  
  741. break;
  742. };
  743. } else dialogTimer -= diff;
  744. }
  745.  
  746. if( bBattleStart) {
  747. if (!UpdateVictim())
  748. return;
  749.  
  750. if( ( me->GetHealth() / me->GetMaxHealth()) <= 0.4) {
  751. if( timer_TasteOfBlood <= diff) {
  752. DoCast( me, SPELL_TASTE_OF_BLOOD);
  753. timer_TasteOfBlood = 120000;
  754. } else timer_TasteOfBlood -= diff;
  755. }
  756.  
  757. if( timer_Cleave <= diff) {
  758. DoCastVictim( SPELL_CLEAVE);
  759. timer_Cleave = urand( 8000, 10000);
  760. } else timer_Cleave -= diff;
  761.  
  762. if( timer_RendingThrow <= diff) {
  763. DoCastVictim( SPELL_RENDING_THROW);
  764. timer_RendingThrow = urand( 10000, 12000);
  765. } else timer_RendingThrow -= diff;
  766.  
  767. DoMeleeAttackIfReady();
  768. }
  769. }
  770.  
  771. void DoAction(const int32 param)
  772. {
  773. switch( param) {
  774. case DO_ACTION_START_GUNSHIP_BATTLE :
  775. health_theSkybreaker = RAID_MODE( 600000, 1200000);
  776. health_ogrimsHammer = RAID_MODE( 600000, 1200000);
  777.  
  778. instance->SetBossState( DATA_GUNSHIP_BATTLE_EVENT, NOT_STARTED);
  779. instance->SetData( DATA_GUNSHIP_BATTLE, PHASE_NOT_STARTED);
  780.  
  781. bDialog = true;
  782. dialogID = 0;
  783. dialogTimer = 0;
  784. break;
  785.  
  786. case DO_ACTION_FINISH_GUNSHIP_BATTLE :
  787. Position tp = DeathbringerRise;
  788. Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
  789. if( !PlayerList.isEmpty()) {
  790. for(Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) {
  791. if( Player *pCurrent = i->getSource()) {
  792. if( me->GetDistance(pCurrent) <= 100.0f)
  793. DoTeleportPlayer( pCurrent, tp.GetPositionX(), tp.GetPositionY(), tp.GetPositionZ(), tp.GetOrientation());
  794. }
  795. }
  796. }
  797. break;
  798. };
  799. }
  800.  
  801. uint32 health_theSkybreaker;
  802. uint32 health_ogrimsHammer;
  803.  
  804. std::list<Creature*> lSummons;
  805.  
  806. uint32 timer_Cleave;
  807. uint32 timer_RendingThrow;
  808. uint32 timer_TasteOfBlood;
  809.  
  810. bool bBattleStart;
  811. bool bDialog;
  812. uint32 dialogID;
  813. uint32 dialogTimer;
  814. };
  815.  
  816. bool OnGossipHello(Player* pPlayer, Creature* pCreature)
  817. {
  818. if ( pPlayer->GetTeamId() == TEAM_HORDE)
  819. return false;
  820.  
  821. InstanceScript* pInstance = pCreature->GetInstanceScript();
  822. if (pInstance && pInstance->GetBossState(DATA_GUNSHIP_BATTLE_EVENT) == NOT_STARTED)
  823. {
  824. pPlayer->ADD_GOSSIP_ITEM(0, "Listos para la batalla", 631, HORDE_GOSSIP_ACTION_START);
  825. pPlayer->ADD_GOSSIP_ITEM(0, "Volveremos más adelante", 631, HORDE_GOSSIP_ACTION_CANCEL);
  826. pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
  827.  
  828. return true;
  829. }
  830.  
  831. if (pInstance && pInstance->GetBossState(DATA_GUNSHIP_BATTLE_EVENT) == DONE)
  832. {
  833. pPlayer->ADD_GOSSIP_ITEM(0, "Vamos a la parte superior del Libramorte", 631, HORDE_GOSSIP_ACTION_TP);
  834. pPlayer->ADD_GOSSIP_ITEM(0, "Volveremos más adelante", 631, HORDE_GOSSIP_ACTION_CANCEL);
  835. pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
  836.  
  837. return true;
  838. }
  839. return false;
  840. }
  841.  
  842. bool OnGossipSelect(Player* player, Creature* pCreature, uint32 /*sender*/, uint32 action)
  843. {
  844. player->PlayerTalkClass->ClearMenus();
  845. player->CLOSE_GOSSIP_MENU();
  846.  
  847. switch( action) {
  848. case HORDE_GOSSIP_ACTION_START :
  849. pCreature->AI()->DoAction( DO_ACTION_START_GUNSHIP_BATTLE); // Comienzo !
  850. return true;
  851. case HORDE_GOSSIP_ACTION_TP :
  852. pCreature->AI()->DoAction( DO_ACTION_FINISH_GUNSHIP_BATTLE); // Fin !
  853. return true;
  854. case HORDE_GOSSIP_ACTION_CANCEL :
  855. return true;
  856. };
  857.  
  858. return false;
  859. }
  860.  
  861. CreatureAI* GetAI(Creature* pCreature) const
  862. {
  863. return new boss_high_overlord_varok_saurfangAI(pCreature);
  864. }
  865. };
  866.  
  867. class npc_sergeant : public CreatureScript
  868. {
  869. public:
  870. npc_sergeant() : CreatureScript("npc_sergeant") { }
  871.  
  872. struct npc_sergeantAI : public ScriptedAI
  873. {
  874. npc_sergeantAI(Creature* pCreature) : ScriptedAI(pCreature)
  875. { pInstance = me->GetInstanceScript(); }
  876.  
  877. void Reset()
  878. {
  879. timer_Spawn = 0;
  880.  
  881. timer_Bladestorm = 7000;
  882. timer_WoundingStrike = urand( 10000, 12000);
  883. timer_BurningPitch = 60000;
  884. timer_DesperateResolve = 0; // -40% de Vida
  885. }
  886.  
  887. void UpdateAI( const uint32 diff)
  888. {
  889. timer_Spawn += diff;
  890. buffExp( this, timer_Spawn);
  891. if (!UpdateVictim())
  892. return;
  893.  
  894. if( ( me->GetHealth() / me->GetMaxHealth()) <= 0.4) {
  895. if( timer_DesperateResolve <= diff) {
  896. DoCast( me, RAID_MODE( SPELL_DESPERATE_RESOLVE_10_NM, SPELL_DESPERATE_RESOLVE_25_NM, SPELL_DESPERATE_RESOLVE_10_HM, SPELL_DESPERATE_RESOLVE_25_HM));
  897. timer_DesperateResolve = 120000;
  898. } else timer_DesperateResolve -= diff;
  899. }
  900.  
  901. if( timer_Bladestorm <= diff) {
  902. DoCast( me, SPELL_BLADESTORM);
  903. timer_Bladestorm = 7000;
  904. } else timer_Bladestorm -= diff;
  905.  
  906. if( timer_BurningPitch <= diff) {
  907. if( Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 10000, true)) {
  908. DoCast( pTarget, SPELL_BURNING_PITCH);
  909. timer_BurningPitch = 60000;
  910. }
  911. } else timer_BurningPitch -= diff;
  912.  
  913. if( timer_WoundingStrike <= diff) {
  914. DoCastVictim( RAID_MODE( SPELL_WOUNDING_STRIKE_10_NM, SPELL_WOUNDING_STRIKE_25_NM, SPELL_WOUNDING_STRIKE_10_HM, SPELL_WOUNDING_STRIKE_25_HM));
  915. timer_WoundingStrike = urand( 10000, 12000);
  916. } else timer_WoundingStrike -= diff;
  917.  
  918. DoMeleeAttackIfReady();
  919. }
  920.  
  921. uint32 timer_Bladestorm;
  922. uint32 timer_WoundingStrike;
  923. uint32 timer_DesperateResolve;
  924. uint32 timer_BurningPitch;
  925.  
  926. uint32 timer_Spawn;
  927. InstanceScript* pInstance;
  928. };
  929.  
  930. CreatureAI* GetAI(Creature* pCreature) const
  931. {
  932. return new npc_sergeantAI(pCreature);
  933. }
  934. };
  935.  
  936. class npc_skybreaker_rifleman : public CreatureScript
  937. {
  938. public:
  939. npc_skybreaker_rifleman() : CreatureScript("npc_skybreaker_rifleman") { }
  940.  
  941. struct npc_skybreaker_riflemanAI : public ScriptedAI
  942. {
  943. npc_skybreaker_riflemanAI(Creature* pCreature) : ScriptedAI(pCreature)
  944. { pInstance = me->GetInstanceScript(); }
  945.  
  946. void Reset()
  947. {
  948. timer_Spawn = 0;
  949.  
  950. timer_Shoot = urand( 2000, 4000);
  951. timer_BurningPitch = 60000;
  952. }
  953.  
  954. void UpdateAI( const uint32 diff)
  955. {
  956. timer_Spawn += diff;
  957. buffExp( this, timer_Spawn);
  958. if (!UpdateVictim())
  959. return;
  960.  
  961. if( timer_BurningPitch <= diff) {
  962. if( Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 10000, true)) {
  963. DoCast( pTarget, SPELL_BURNING_PITCH);
  964. timer_BurningPitch = 60000;
  965. }
  966. } else timer_BurningPitch -= diff;
  967.  
  968. if( timer_Shoot <= diff) {
  969. DoCastVictim( RAID_MODE( SPELL_SHOOT_10_NM, SPELL_SHOOT_25_NM, SPELL_SHOOT_10_HM, SPELL_SHOOT_25_HM));
  970. timer_Shoot = urand( 2000, 4000);
  971. } else timer_Shoot -= diff;
  972. }
  973.  
  974. uint32 timer_Shoot;
  975. uint32 timer_BurningPitch;
  976.  
  977. uint32 timer_Spawn;
  978. InstanceScript* pInstance;
  979. };
  980.  
  981. CreatureAI* GetAI(Creature* pCreature) const
  982. {
  983. return new npc_skybreaker_riflemanAI(pCreature);
  984. }
  985. };
  986.  
  987. class npc_korkron_axethrower : public CreatureScript
  988. {
  989. public:
  990. npc_korkron_axethrower() : CreatureScript("npc_korkron_axethrower") { }
  991.  
  992. struct npc_korkron_axethrowerAI : public ScriptedAI
  993. {
  994. npc_korkron_axethrowerAI(Creature* pCreature) : ScriptedAI(pCreature)
  995. { pInstance = me->GetInstanceScript(); }
  996.  
  997. void Reset()
  998. {
  999. timer_Spawn = 0;
  1000.  
  1001. timer_HurlAxe = urand( 2000, 4000);
  1002. timer_BurningPitch = 60000;
  1003. }
  1004.  
  1005. void UpdateAI( const uint32 diff)
  1006. {
  1007. timer_Spawn += diff;
  1008. buffExp( this, timer_Spawn);
  1009. if (!UpdateVictim())
  1010. return;
  1011.  
  1012. if( timer_BurningPitch <= diff) {
  1013. if( Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 10000, true)) {
  1014. DoCast( pTarget, SPELL_BURNING_PITCH);
  1015. timer_BurningPitch = 60000;
  1016. }
  1017. } else timer_BurningPitch -= diff;
  1018.  
  1019. if( timer_HurlAxe <= diff) {
  1020. DoCastVictim( RAID_MODE( SPELL_HURL_AXE_10_NM, SPELL_HURL_AXE_25_NM, SPELL_HURL_AXE_10_HM, SPELL_HURL_AXE_25_HM));
  1021. timer_HurlAxe = urand( 2000, 4000);
  1022. } else timer_HurlAxe -= diff;
  1023. }
  1024.  
  1025. uint32 timer_HurlAxe;
  1026. uint32 timer_BurningPitch;
  1027.  
  1028. uint32 timer_Spawn;
  1029. InstanceScript* pInstance;
  1030. };
  1031.  
  1032. CreatureAI* GetAI(Creature* pCreature) const
  1033. {
  1034. return new npc_korkron_axethrowerAI(pCreature);
  1035. }
  1036. };
  1037.  
  1038. class npc_marine_or_reaver : public CreatureScript
  1039. {
  1040. public:
  1041. npc_marine_or_reaver() : CreatureScript("npc_marine_or_reaver") { }
  1042.  
  1043. struct npc_marine_or_reaverAI : public ScriptedAI
  1044. {
  1045. npc_marine_or_reaverAI(Creature* pCreature) : ScriptedAI(pCreature)
  1046. { pInstance = me->GetInstanceScript(); }
  1047.  
  1048. void Reset()
  1049. {
  1050. timer_Spawn = 0;
  1051.  
  1052. timer_BurningPitch = 60000;
  1053. timer_DesperateResolve = 0; // -40% de Vida
  1054. }
  1055.  
  1056. void UpdateAI( const uint32 diff)
  1057. {
  1058. timer_Spawn += diff;
  1059. buffExp( this, timer_Spawn);
  1060. if (!UpdateVictim())
  1061. return;
  1062.  
  1063. if( ( me->GetHealth() / me->GetMaxHealth()) <= 0.4) {
  1064. if( timer_DesperateResolve <= diff) {
  1065. DoCast( me, RAID_MODE( SPELL_DESPERATE_RESOLVE_10_NM, SPELL_DESPERATE_RESOLVE_25_NM, SPELL_DESPERATE_RESOLVE_10_HM, SPELL_DESPERATE_RESOLVE_25_HM));
  1066. timer_DesperateResolve = 120000;
  1067. } else timer_DesperateResolve -= diff;
  1068. }
  1069.  
  1070. if( timer_BurningPitch <= diff) {
  1071. if( Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 10000, true)) {
  1072. DoCast( pTarget, SPELL_BURNING_PITCH);
  1073. timer_BurningPitch = 60000;
  1074. }
  1075. } else timer_BurningPitch -= diff;
  1076.  
  1077. DoMeleeAttackIfReady();
  1078. }
  1079.  
  1080. uint32 timer_DesperateResolve;
  1081. uint32 timer_BurningPitch;
  1082.  
  1083. uint32 timer_Spawn;
  1084. InstanceScript* pInstance;
  1085. };
  1086.  
  1087. CreatureAI* GetAI(Creature* pCreature) const
  1088. {
  1089. return new npc_marine_or_reaverAI(pCreature);
  1090. }
  1091. };
  1092.  
  1093. class npc_mortar_soldier_or_rocketeer : public CreatureScript
  1094. {
  1095. public:
  1096. npc_mortar_soldier_or_rocketeer() : CreatureScript("npc_mortar_soldier_or_rocketeer") { }
  1097.  
  1098. struct npc_mortar_soldier_or_rocketeerAI : public ScriptedAI
  1099. {
  1100. npc_mortar_soldier_or_rocketeerAI(Creature* pCreature) : ScriptedAI(pCreature)
  1101. { pInstance = me->GetInstanceScript(); }
  1102.  
  1103. void Reset()
  1104. {
  1105. timer_Spawn = 0;
  1106.  
  1107. timer_RocketArtillery = urand( 10000, 15000);
  1108. timer_BurningPitch = 60000;
  1109. }
  1110.  
  1111. void UpdateAI( const uint32 diff)
  1112. {
  1113. timer_Spawn += diff;
  1114. buffExp( this, timer_Spawn);
  1115. if (!UpdateVictim())
  1116. return;
  1117.  
  1118. if( timer_BurningPitch <= diff) {
  1119. if( Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 10000, true)) {
  1120. DoCast( pTarget, SPELL_BURNING_PITCH);
  1121. timer_BurningPitch = 60000;
  1122. }
  1123. } else timer_BurningPitch -= diff;
  1124.  
  1125. if( timer_RocketArtillery <= diff) {
  1126. if( Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 10000, true)) {
  1127. DoCast( pTarget, SPELL_ROCKET_ARTILLERY);
  1128. timer_Rocke
Add Comment
Please, Sign In to add comment