armark1ng

Untitled

Jun 25th, 2016
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.22 KB | None | 0 0
  1. package com.rs.game.npc.combat.impl;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.TimerTask;
  6.  
  7. import com.rs.Settings;
  8. import com.rs.cores.CoresManager;
  9. import com.rs.game.Animation;
  10. import com.rs.game.Entity;
  11. import com.rs.game.Graphics;
  12. import com.rs.game.Hit;
  13. import com.rs.game.Hit.HitLook;
  14. import com.rs.game.Projectile;
  15. import com.rs.game.World;
  16. import com.rs.game.WorldTile;
  17. import com.rs.game.map.bossInstance.impl.VoragoInstance;
  18. import com.rs.game.npc.NPC;
  19. import com.rs.game.npc.combat.CombatScript;
  20. import com.rs.game.npc.combat.NPCCombatDefinitions;
  21. import com.rs.game.npc.vorago.Vorago;
  22. import com.rs.game.player.Player;
  23. import com.rs.game.tasks.WorldTask;
  24. import com.rs.game.tasks.WorldTasksManager;
  25. import com.rs.utils.Utils;
  26.  
  27. public class VoragoCombat extends CombatScript {
  28.  
  29. private Vorago vorago;
  30.  
  31. public static int WHITE_BORDER = 0, RED_BORDER = 1;
  32.  
  33. private int bonusAttacks = 0;
  34.  
  35. @Override
  36. public Object[] getKeys() {
  37. return new Object[] { "Vorago" };
  38. }
  39.  
  40. @Override
  41. public int attack(NPC npc, Entity target) {
  42. vorago = (Vorago) npc;
  43. if (Utils.colides(vorago, target)) {
  44. if (Utils.random(10) == 8 && vorago.getTemporaryAttributtes().get("CantBeAttacked") == null)
  45. sendBindAttack();
  46. }
  47. if (vorago.getTemporaryAttributtes().get("BringHimDownClick") != null)
  48. return 0;
  49. else if (vorago.getTemporaryAttributtes().get("VoragoType") != null
  50. && ((int) vorago.getTemporaryAttributtes().get("VoragoType") == 1) && vorago.getPhase() != 5) {
  51. if (Utils.getDistance(vorago, target) > 15) {
  52. vorago.setCantFollowUnderCombat(false);
  53. } else {
  54. vorago.setCantFollowUnderCombat(true);
  55. }
  56. }
  57. if (bonusAttacks > 0) {
  58. bonusAttacks--;
  59. sendBlueBombAttack();
  60. return 7;
  61. }
  62. switch (vorago.getPhase()) {
  63. case 1:// PHASE ONE
  64. if (vorago.getAttackProgress() > 4) // 5 attacks
  65. vorago.setAttackProgress(0);
  66. switch (vorago.getAttackProgress()) {
  67. case 0:
  68. sendRedBombAttack();
  69. break;
  70. default:
  71. int attackStyle = Utils.random(2);
  72. switch (attackStyle) {
  73. case 0:// melee hit if possible
  74. if (Utils.isOnRange(vorago, target, 0))
  75. sendMeleeAttack();
  76. else
  77. sendBlueBombAttack();
  78. break;
  79. case 1:// magic
  80. case 2:
  81. sendBlueBombAttack();
  82. break;
  83. }
  84. break;
  85. }
  86. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  87. break;
  88. case 2:// PHASE 2
  89. if (vorago.getAttackProgress() > 16) // 17 attacks
  90. vorago.setAttackProgress(0);
  91. switch (vorago.getAttackProgress()) {
  92. case 0:// 5 smashes
  93. case 1:
  94. sendSmash();
  95. break;
  96. case 2:
  97. sendBlueBombAttack(false);
  98. case 3:
  99. case 4:
  100. sendSmash();
  101. break;
  102. case 5:// 3 attacks
  103. case 6:
  104. case 7:
  105. int attackStyle = Utils.random(2);
  106. switch (attackStyle) {
  107. case 0:// melee hit if possible
  108. if (Utils.isOnRange(vorago, target, 0))
  109. sendMeleeAttack();
  110. else
  111. sendBlueBombAttack();
  112. break;
  113. case 1:// magic
  114. case 2:
  115. sendBlueBombAttack();
  116. break;
  117. }
  118. break;
  119. case 8:
  120. sendReflectAttack();
  121. sendGravityField();
  122. break;
  123. case 9:// 3attacks then case 12 red bomb
  124. case 10:
  125. case 11:
  126. case 13:// 4attacks
  127. case 14:
  128. case 15:
  129. case 16:
  130. attackStyle = Utils.random(2);
  131. switch (attackStyle) {
  132. case 0:// melee hit if possible
  133. if (Utils.isOnRange(vorago, target, 0))
  134. sendMeleeAttack();
  135. else
  136. sendBlueBombAttack();
  137. break;
  138. case 1:// magic
  139. case 2:
  140. sendBlueBombAttack();
  141. break;
  142. }
  143. break;
  144. case 12:// red Bomb
  145. sendRedBombAttack();
  146. break;
  147. }
  148. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  149. break;
  150. case 3:// PHASE 3
  151. switch (Settings.VORAGO_ROTATION) {
  152. case 0:// Ceiling Collapse
  153. case 4:// Team Split
  154. case 5:// THE END
  155. if (vorago.getAttackProgress() > 16) // 17 attacks
  156. vorago.setAttackProgress(0);
  157. switch (vorago.getAttackProgress()) {
  158. case 0:// 2 Specials
  159. case 8:
  160. switch (Settings.VORAGO_ROTATION) {
  161. case 0:// ceiling
  162. if (!sendCeilingCollapse()) {
  163. int attackStyle = Utils.random(2);
  164. switch (attackStyle) {
  165. case 0:// melee hit if possible
  166. if (Utils.isOnRange(vorago, target, 0))
  167. sendMeleeAttack();
  168. else
  169. sendBlueBombAttack();
  170. break;
  171. case 1:// magic
  172. case 2:
  173. sendBlueBombAttack();
  174. break;
  175. }
  176. break;
  177. }
  178. break;
  179. case 4: // Team Split
  180. sendTeamSplitAttack();
  181. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  182. return 15;
  183. case 5:// ZA END
  184. startTheEnd();
  185. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  186. return 78;
  187. }
  188. break;
  189. case 1:// 3 attacks
  190. case 3:
  191. case 5:// 3 attacks
  192. case 6:
  193. case 7:
  194. case 9:// 3 attacks
  195. case 11:
  196. case 13:// 4 attacks
  197. case 14:
  198. case 15:
  199. case 16:
  200. int attackStyle = Utils.random(2);
  201. switch (attackStyle) {
  202. case 0:// melee hit if possible
  203. if (Utils.isOnRange(vorago, target, 0))
  204. sendMeleeAttack();
  205. else
  206. sendBlueBombAttack();
  207. break;
  208. case 1:// magic
  209. case 2:
  210. sendBlueBombAttack();
  211. break;
  212. }
  213. break;
  214. case 10:
  215. case 2:
  216. sendBlueBombAttack(Settings.VORAGO_ROTATION == 0 ? !vorago.canSendCeilingCollapse() : true);
  217. break;
  218. case 4:// reflect
  219. sendReflectAttack();
  220. break;
  221. case 12:
  222. sendRedBombAttack();
  223. break;
  224. }
  225. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  226. break;
  227. case 1:// Scopulus
  228. switch (vorago.getAttackProgress()) {
  229. case 0:
  230. sendScopuli();
  231. sendBlueBombAttack();
  232. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  233. break;
  234. case 1:
  235. sendBlueBombAttack();
  236. break;
  237. }
  238. break;
  239. case 2:// vitalis
  240. if (vorago.getAttackProgress() > 19)// 20 attacks
  241. vorago.setAttackProgress(0);
  242. switch (vorago.getAttackProgress()) {
  243. case 0:// vitalis orb
  244. case 8:
  245. sendVitalisOrb();
  246. break;
  247. case 1:// 3 attacks
  248. case 2:
  249. case 3:
  250. case 5:
  251. case 6:
  252. case 7:
  253. case 9:
  254. case 10:
  255. case 11:
  256. case 17:
  257. case 18:
  258. case 19:
  259. int attackStyle = Utils.random(2);
  260. switch (attackStyle) {
  261. case 0:// melee hit if possible
  262. if (Utils.isOnRange(vorago, target, 0))
  263. sendMeleeAttack();
  264. else
  265. sendBlueBombAttack();
  266. break;
  267. case 1:// magic
  268. case 2:
  269. sendBlueBombAttack();
  270. break;
  271. }
  272. break;
  273. case 4:
  274. sendReflectAttack();
  275. break;
  276. case 12:
  277. case 13:
  278. sendSmash();
  279. break;
  280. case 14:
  281. sendBlueBombAttack(false);
  282. case 15:
  283. case 16:
  284. sendSmash();
  285. break;
  286. }
  287. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  288. break;
  289. case 3:// GREEN BOMBIE <3
  290. if (vorago.getAttackProgress() > 20)// 21 attacks
  291. vorago.setAttackProgress(0);
  292. switch (vorago.getAttackProgress()) {
  293. case 0:// green bomb
  294. case 10:// seconds green
  295. sendGreenBombAttack();
  296. break;
  297. case 1:// 5 attacks Skips to case 6(reflect) if 10hit
  298. case 2:
  299. case 3:
  300. case 4:
  301. case 5:
  302. case 7:// 3 attacks
  303. case 8:
  304. case 9:
  305. case 11:// 5 attacks
  306. case 12:
  307. case 13:
  308. case 14:
  309. case 15:
  310. case 17:// 4 attacks
  311. case 18:
  312. case 19:
  313. case 20:
  314. int attackStyle = Utils.random(2);
  315. switch (attackStyle) {
  316. case 0:// melee hit if possible
  317. if (Utils.isOnRange(vorago, target, 0))
  318. sendMeleeAttack();
  319. else
  320. sendBlueBombAttack();
  321. break;
  322. case 1:// magic
  323. case 2:
  324. sendBlueBombAttack();
  325. break;
  326. }
  327. break;
  328. case 6:// reflect
  329. sendReflectAttack();
  330. break;
  331. case 16:// red bomb skips to here if attack progress 10
  332. sendRedBombAttack();
  333. break;
  334. }
  335. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  336. break;
  337. }
  338. break;
  339. case 4:// Phase 4
  340. switch (Settings.VORAGO_ROTATION) {
  341. case 5:// purple bomb
  342. if (vorago.getAttackProgress() > 24) // 25 attacks
  343. vorago.setAttackProgress(0);
  344. switch (vorago.getAttackProgress()) {
  345. case 0:// WaterFall
  346. if (vorago.getPhaseProgress() == 3) {// skip to stone clown
  347. int attackStyle = Utils.random(2);
  348. switch (attackStyle) {
  349. case 0:// melee hit if possible
  350. if (Utils.isOnRange(vorago, target, 0))
  351. sendMeleeAttack();
  352. else
  353. sendBlueBombAttack();
  354. break;
  355. case 1:// magic
  356. case 2:
  357. sendBlueBombAttack();
  358. break;
  359. }
  360. vorago.setAttackProgress(vorago.getAttackProgress() + 5);
  361. return 7;
  362. }
  363. sendWaterFallAttack();
  364. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  365. return 19;
  366. case 1:// 3 attacks
  367. case 2:
  368. case 3:
  369. case 5:// 7 attacks
  370. case 6:
  371. case 7:
  372. case 8:
  373. case 9:
  374. case 10:
  375. case 11:
  376. case 13:// 3 attacks after za end
  377. case 14:
  378. case 15:
  379. case 17:// 4 attacks
  380. case 18:
  381. case 19:
  382. case 20:
  383. case 22:// 3 attacks
  384. case 23:
  385. case 24:
  386. int attackStyle = Utils.random(2);
  387. switch (attackStyle) {
  388. case 0:// melee hit if possible
  389. if (Utils.isOnRange(vorago, target, 0))
  390. sendMeleeAttack();
  391. else
  392. sendBlueBombAttack();
  393. break;
  394. case 1:// magic
  395. case 2:
  396. sendBlueBombAttack();
  397. break;
  398. }
  399. break;
  400. case 4:// Clones + attack(1)
  401. attackStyle = Utils.random(2);
  402. switch (attackStyle) {
  403. case 0:// melee hit if possible
  404. if (Utils.isOnRange(vorago, target, 0))
  405. sendMeleeAttack();
  406. else
  407. sendBlueBombAttack();
  408. break;
  409. case 1:// magic
  410. case 2:
  411. sendBlueBombAttack();
  412. break;
  413. }
  414. sendStoneClones();
  415. break;
  416. case 12:// Za End
  417. startTheEnd();
  418. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  419. return 78;
  420. case 16:// red bomb
  421. sendRedBombAttack();
  422. break;
  423. case 21:
  424. sendReflectAttack();
  425. break;
  426. }
  427. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  428. break;
  429. default:// other rotations
  430. if (vorago.getAttackProgress() > 27) // 28 attacks
  431. vorago.setAttackProgress(0);
  432. switch (vorago.getAttackProgress()) {
  433. case 0:// WaterFall
  434. if (vorago.getPhaseProgress() == 3) {// skip to stone clown
  435. int attackStyle = Utils.random(2);
  436. switch (attackStyle) {
  437. case 0:// melee hit if possible
  438. if (Utils.isOnRange(vorago, target, 0))
  439. sendMeleeAttack();
  440. else
  441. sendBlueBombAttack();
  442. break;
  443. case 1:// magic
  444. case 2:
  445. sendBlueBombAttack();
  446. break;
  447. }
  448. vorago.setAttackProgress(vorago.getAttackProgress() + 5);
  449. return 7;
  450. }
  451. sendWaterFallAttack();
  452. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  453. return 19;
  454. case 1:// 3 attacks
  455. case 2:
  456. case 3:
  457. case 5:// 7 attacks
  458. case 6:
  459. case 7:
  460. case 8:
  461. case 9:
  462. case 10:
  463. case 11:
  464. case 13:// 3 attacks
  465. case 15:
  466. case 21:// 3attacks
  467. case 22:
  468. case 23:
  469. case 25:// 3 attacks
  470. case 26:
  471. case 27:
  472. int attackStyle = Utils.random(2);
  473. switch (attackStyle) {
  474. case 0:// melee hit if possible
  475. if (Utils.isOnRange(vorago, target, 0))
  476. sendMeleeAttack();
  477. else
  478. sendBlueBombAttack();
  479. break;
  480. case 1:// magic
  481. case 2:
  482. sendBlueBombAttack();
  483. break;
  484. }
  485. break;
  486. case 4:// Clones + attack(1)
  487. attackStyle = Utils.random(2);
  488. switch (attackStyle) {
  489. case 0:// melee hit if possible
  490. if (Utils.isOnRange(vorago, target, 0))
  491. sendMeleeAttack();
  492. else
  493. sendBlueBombAttack();
  494. break;
  495. case 1:// magic
  496. case 2:
  497. sendBlueBombAttack();
  498. break;
  499. }
  500. sendStoneClones();
  501. break;
  502. case 12:
  503. switch (Settings.VORAGO_ROTATION) {
  504. case 0:// Ceiling
  505. if (!sendCeilingCollapse()) {
  506. attackStyle = Utils.random(2);
  507. switch (attackStyle) {
  508. case 0:// melee hit if possible
  509. if (Utils.isOnRange(vorago, target, 0))
  510. sendMeleeAttack();
  511. else
  512. sendBlueBombAttack();
  513. break;
  514. case 1:// magic
  515. case 2:
  516. sendBlueBombAttack();
  517. break;
  518. }
  519. break;
  520. }
  521. break;
  522. case 1:// Scopulus
  523. sendRedBombAttack();
  524. bonusAttacks++;
  525. break;
  526. case 2:// Vitalis
  527. sendVitalisOrb();
  528. break;
  529. case 3:// Green Bomb
  530. sendGreenBombAttack();
  531. bonusAttacks += 2;
  532. break;
  533. case 4:
  534. sendTeamSplitAttack();
  535. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  536. return 15;
  537. }
  538. break;
  539. case 14:// Special Blue Bomb in some rotations
  540. sendBlueBombAttack(Settings.VORAGO_ROTATION == 0 ? !vorago.canSendCeilingCollapse() : true);
  541. break;
  542. case 16:// 5 smashes
  543. case 17:
  544. sendSmash();
  545. break;
  546. case 18:
  547. sendBlueBombAttack(false);
  548. case 19:
  549. case 20:
  550. sendSmash();
  551. break;
  552. case 24:
  553. sendReflectAttack();
  554. break;
  555. }
  556. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  557. break;
  558. }
  559. break;
  560. case 5:
  561. switch (Settings.VORAGO_ROTATION) {
  562. case 0:// ceiling
  563. case 4:// team split
  564. if (vorago.getAttackProgress() > 13)// 14 attacks not counting
  565. // melee hits
  566. vorago.setAttackProgress(0);
  567. switch (vorago.getAttackProgress()) {
  568. case 0:// team split
  569. sendTeamSplitAttack();
  570. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  571. return 15;
  572. case 1:// 3 blues attacks
  573. case 2:
  574. case 3:
  575. case 5:// 3 blues attacks
  576. case 6:
  577. case 7:
  578. case 11:// 3 attacks
  579. case 12:
  580. case 13:
  581. int attackStyle = Utils.random(2);
  582. switch (attackStyle) {
  583. case 0:// melee hit if possible
  584. if (Utils.isOnRange(vorago, target, 0))
  585. sendMeleeAttack();
  586. else {
  587. sendBlueBombAttack();
  588. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  589. }
  590. break;
  591. case 1:// magic
  592. case 2:
  593. sendBlueBombAttack();
  594. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  595. break;
  596. }
  597. break;
  598. case 4:// reflect
  599. sendReflectAttack();
  600. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  601. break;
  602. case 8:// 3 smashes
  603. case 9:
  604. case 10:
  605. sendSmash();
  606. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  607. break;
  608. }
  609. break;
  610. case 1:// scop
  611. case 3:// green bombiee <33
  612. case 5:// za end <3
  613. if (vorago.getAttackProgress() > 15)
  614. vorago.setAttackProgress(0);
  615. switch (vorago.getAttackProgress()) {
  616. case 0:// special attack
  617. switch (Settings.VORAGO_ROTATION) {
  618. case 1:// za purple bombie <3
  619. case 5:
  620. sendPurpleBombAttack();
  621. break;
  622. case 3:// za green bomb <3333
  623. sendGreenBombAttack();
  624. break;
  625. }
  626. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  627. break;
  628. case 1:// 5 attacks
  629. case 2:
  630. case 3:
  631. case 4:
  632. case 5:
  633. case 7:// 3 attacks
  634. case 8:
  635. case 9:
  636. case 13:// 3 attacks
  637. case 14:
  638. case 15:
  639. int attackStyle = Utils.random(2);
  640. switch (attackStyle) {
  641. case 0:// melee hit if possible
  642. if (Utils.isOnRange(vorago, target, 0))
  643. sendMeleeAttack();
  644. else {
  645. sendBlueBombAttack();
  646. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  647. }
  648. break;
  649. case 1:// magic
  650. case 2:
  651. sendBlueBombAttack();
  652. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  653. break;
  654. }
  655. break;
  656. case 6:// reflect
  657. sendReflectAttack();
  658. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  659. break;
  660. case 10:// 3 smashes
  661. case 11:
  662. case 12:
  663. sendSmash();
  664. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  665. break;
  666. }
  667. break;
  668. case 2:// vitalis
  669. if (vorago.getAttackProgress() > 13)
  670. vorago.setAttackProgress(0);
  671. boolean skippedVitalis = false;
  672. switch (vorago.getAttackProgress()) {
  673. case 0:// vitalis
  674. if (!sendVitalisOrb()) {
  675. sendRedBombAttack();
  676. bonusAttacks++;
  677. skippedVitalis = true;
  678. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  679. break;
  680. }
  681. skippedVitalis = false;
  682. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  683. break;
  684. case 3:// if skipped vitalis this is different
  685. int attackStyle = Utils.random(2);
  686. switch (attackStyle) {
  687. case 0:// melee hit if possible
  688. if (Utils.isOnRange(vorago, target, 0))
  689. sendMeleeAttack();
  690. else {
  691. sendBlueBombAttack();
  692. vorago.setAttackProgress(skippedVitalis ? 8 : (vorago.getAttackProgress() + 1));
  693. }
  694. break;
  695. case 1:// magic
  696. case 2:
  697. sendBlueBombAttack();
  698. vorago.setAttackProgress(skippedVitalis ? 8 : (vorago.getAttackProgress() + 1));
  699. break;
  700. }
  701. break;
  702. case 1:// 3 attacks
  703. case 2:
  704. case 5:// 3 attacks
  705. case 6:
  706. case 7:
  707. case 11:// 3 attacks
  708. case 12:
  709. case 13:
  710. attackStyle = Utils.random(2);
  711. switch (attackStyle) {
  712. case 0:// melee hit if possible
  713. if (Utils.isOnRange(vorago, target, 0))
  714. sendMeleeAttack();
  715. else {
  716. sendBlueBombAttack();
  717. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  718. }
  719. break;
  720. case 1:// magic
  721. case 2:
  722. sendBlueBombAttack();
  723. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  724. break;
  725. }
  726. break;
  727. case 4:// reflect
  728. sendReflectAttack();
  729. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  730. break;
  731. case 8:// 3 smashes
  732. case 9:
  733. case 10:
  734. sendSmash();
  735. vorago.setAttackProgress(vorago.getAttackProgress() + 1);
  736. break;
  737. }
  738. break;
  739. }
  740. break;
  741. }
  742. return 7;
  743. }
  744.  
  745. public void startTheEnd() {
  746. vorago.startTheEnd();
  747. }
  748.  
  749. public void sendPurpleBombAttack() {
  750. vorago.sendPurpleBombAttack();
  751. }
  752.  
  753. public void sendTeamSplitAttack() {
  754. vorago.sendTeamSplit();
  755. }
  756.  
  757. public void sendGreenBombAttack() {
  758. vorago.sendGreenBomb();
  759. }
  760.  
  761. public boolean sendVitalisOrb() {
  762. return vorago.sendVitalisOrb();
  763. }
  764.  
  765. public void sendScopuli() {
  766. vorago.spawnScopuli();
  767. }
  768.  
  769. public void sendStoneClones() {
  770. vorago.getTemporaryAttributtes().put("ReducedDamage", Boolean.TRUE);
  771. WorldTasksManager.schedule(new WorldTask() {
  772. @Override
  773. public void run() {
  774. vorago.getTemporaryAttributtes().remove("ReducedDamage");
  775. }
  776. }, 33);
  777. for (Player player : vorago.getVoragoInstance().getPlayersOnBattle()) {
  778. if (player == null || player.isDead())
  779. continue;
  780. player.getTemporaryAttributtes().remove("RecentlyKilledClone");
  781. }
  782. vorago.spawnStoneClones();
  783. }
  784.  
  785. public void sendWaterFallAttack() {
  786. vorago.sendWaterFallAttack();
  787. }
  788.  
  789. public boolean sendCeilingCollapse() {
  790. return vorago.sendCeilingCollapse();
  791. }
  792.  
  793. public void sendBindAttack() {
  794. Player player = (Player) vorago.getCombat().getTarget();
  795. if (player == null)
  796. return;
  797. delayHit(vorago, 0, player, new Hit(vorago, 300, HitLook.REGULAR_DAMAGE));// TODO
  798. }
  799.  
  800. public void sendMeleeAttack() {
  801. vorago.setNextAnimation(new Animation(20355));
  802. for (Player player : vorago.getVoragoInstance().getPlayersOnBattle()) {
  803. if (player == null || player.isDead() || !Utils.isOnRange(vorago, player, 1))
  804. continue;
  805. delayHit(vorago, 0, player,
  806. getMeleeHit(vorago, getMaxHit(vorago, 400, NPCCombatDefinitions.MELEE, player)));
  807. }
  808. }
  809.  
  810. public void sendBlueBombAttack() {
  811. sendBlueBombAttack(true);
  812. }
  813.  
  814. public void sendBlueBombAttack(boolean sendAnimation) {
  815. Entity target = getFarestTarget(null);
  816. Entity target2 = vorago.getPlayerOnBattleCount() > 10 ? getFarestTarget(target) : null;
  817. if (target == null)// shouldn't happen
  818. return;
  819. if (sendAnimation)
  820. vorago.setNextAnimation(new Animation(20356));
  821. vorago.setNextGraphics(new Graphics(4015));
  822. int numberOfBlues = (target2 == null) ? 1 : 2;
  823. for (int i = 0; i < numberOfBlues; i++) {
  824. Entity target3 = i == 0 ? target : target2;
  825. long startTime = Utils.currentTimeMillis();
  826. long arriveTime = startTime + (15000);// arrives after 3 seconds
  827. double speed = Utils.getProjectileSpeed(vorago, target3, 90, 20, startTime, arriveTime);
  828. Projectile projectile = World.sendProjectileNew(vorago, target3, 4016, 90, 20, 10, speed, 0, 0);
  829. int cycleTime = Utils.projectileTimeToCycles(projectile.getEndTime()) - 1;
  830. CoresManager.fastExecutor.schedule(new TimerTask() {
  831.  
  832. @Override
  833. public void run() {
  834. for (Player player : vorago.getVoragoInstance().getPlayersOnBattle()) {
  835. if (player == null || player.isDead() || Utils.getDistance(target3, player) > 2)
  836. continue;
  837. int damage = getMaxHit(vorago, 500, NPCCombatDefinitions.MAGE, player);
  838. player.setNextGraphics(new Graphics(4017));
  839. delayHit(vorago, 0, player, getMagicHit(vorago, damage));
  840. }
  841. }
  842. }, (cycleTime * 1000) - 950);
  843. }
  844. }
  845.  
  846. public void sendGroundBlueBomb(WorldTile arrivelocation) {
  847. long startTime = Utils.currentTimeMillis();
  848. long arriveTime = startTime + (12000);// arrives after 2.eshi seconds
  849. double speed = Utils.getProjectileSpeed(vorago, arrivelocation, 90, 0, startTime, arriveTime);
  850. Projectile projectile = World.sendProjectileNew(vorago, arrivelocation, 4016, 90, 0, 10, speed, 0, 0);
  851. int cycleTime = Utils.projectileTimeToCycles(projectile.getEndTime()) - 1;
  852. vorago.setNextGraphics(new Graphics(4020));
  853. World.sendGraphics(null, new Graphics(4022), vorago);
  854. CoresManager.fastExecutor.schedule(new TimerTask() {
  855.  
  856. @Override
  857. public void run() {
  858. for (Player player : vorago.getVoragoInstance().getPlayersOnBattle()) {
  859. if (player == null || player.isDead() || Utils.getDistance(arrivelocation, player) > 2)
  860. continue;
  861. int damage = getMaxHit(vorago, 500, NPCCombatDefinitions.MAGE, player);
  862. player.setNextGraphics(new Graphics(4017));
  863. delayHit(vorago, 0, player, getMagicHit(vorago, damage));
  864. }
  865. }
  866. }, (cycleTime * 1000) - 950);
  867. }
  868.  
  869. public void sendRedBombAttack() {
  870. boolean trollRedBombChance = Utils.random(10) == 0;
  871. Player target = trollRedBombChance ? getRandomTarget() : getFarestTarget(null);
  872. if (target == null)// shouldn't happen
  873. return;
  874. sendMessage(target, RED_BORDER, "<col=ff0000>Vorago has sent a bomb after you. Run!</col>");
  875. vorago.setNextAnimation(new Animation(20371));
  876. sendGroundBlueBomb(new WorldTile(target.getX(), target.getY(), target.getPlane()));
  877. long startTime = Utils.currentTimeMillis();
  878. long arriveTime = startTime + (20000);// arrives after 4 seconds
  879. double speed = Utils.getProjectileSpeed(vorago, target, 90, 20, startTime, arriveTime);
  880. Projectile projectile = World.sendProjectileNew(vorago, target, 4023, 90, 20, 10, speed, 0, 0);
  881. int cycleTime = Utils.projectileTimeToCycles(projectile.getEndTime()) - 1;
  882. CoresManager.fastExecutor.schedule(new TimerTask() {
  883.  
  884. @Override
  885. public void run() {
  886. for (Player player : vorago.getVoragoInstance().getPlayersOnBattle()) {
  887. if (player == null || player.isDead() || Utils.getDistance(player, target) > 2)
  888. continue;
  889. int damage = 200 + (getPlayersNearby(target, 3) * 100);
  890. player.setNextGraphics(new Graphics(4024));
  891. World.sendGraphics(null, new Graphics(3522),
  892. new WorldTile(player.getX(), player.getY(), player.getPlane()));
  893. delayHit(vorago, 0, player, new Hit(vorago, damage, HitLook.REGULAR_DAMAGE));
  894. }
  895. }
  896. }, (cycleTime * 1000) - 950);
  897. }
  898.  
  899. public void sendSmash() {// do the bleed
  900. if (vorago.getPhase() != 5) {
  901. vorago.getTemporaryAttributtes().put("VoragoType", 0);
  902. vorago.transform();
  903. }
  904. Entity target = vorago.getPhase() == 5 ? getRandomTarget() : vorago.getCombat().getTarget();
  905. vorago.setNextAnimation(new Animation(20363));
  906. vorago.setNextGraphics(new Graphics(4018));
  907. target.setNextGraphics(new Graphics(4019));
  908. WorldTile pStartTile = new WorldTile(target.getX(), target.getY(), target.getPlane());
  909. }
  910.  
  911. public void sendReflectAttack() {
  912. vorago.setNextAnimation(new Animation(20319));
  913. vorago.setNextGraphics(new Graphics(4011));
  914. vorago.setTargetedPlayer(getRandomTarget());
  915. Player targetedPlayer = vorago.getTargetedPlayer();
  916. if (targetedPlayer == null) {
  917. System.out.println("Couldn't find random player?? shouldn't happen.");
  918. return;
  919. }
  920. for (Player player : vorago.getVoragoInstance().getPlayersOnBattle()) {
  921. if (player == null || player.isDead())
  922. continue;
  923. boolean isTargetedPlayer = player == targetedPlayer;
  924. sendMessage(player, RED_BORDER,
  925. isTargetedPlayer ? "<col=ff0000>Vorago channels incoming damage to you. Beware!</col>"
  926. : "<col=FFFFFF>Vorago reflects incoming damage to surrounding foes!</col>");
  927. }
  928. targetedPlayer.setNextGraphics(new Graphics(4012));
  929. WorldTasksManager.schedule(new WorldTask() {
  930. @Override
  931. public void run() {
  932. if (vorago.getPhase() != 5) {
  933. vorago.getTemporaryAttributtes().put("VoragoType", 1);
  934. vorago.transform();
  935. }
  936. vorago.setTargetedPlayer(null);
  937. if (vorago.getTemporaryAttributtes().get("BringHimDownClick") != null) {
  938. targetedPlayer.getPackets().sendGameMessage("<col=00FF00>Vorago releases his mental link on you.");
  939. } else
  940. sendMessage(targetedPlayer, RED_BORDER, "<col=00FF00>Vorago releases his mental link on you.");
  941. }
  942. }, 20);
  943. }
  944.  
  945. public void sendGravityField() {
  946. vorago.spawnGravityField();
  947. }
  948.  
  949. public int getPlayersNearby(Player target, int withinDistance) {
  950. return vorago.getPlayersNearby(target, withinDistance);
  951. }
  952.  
  953. public void sendMessage(Player player, int border, String message) {
  954. VoragoInstance.sendMessage(player, border, message);
  955.  
  956. }
  957.  
  958. public Player getRandomTarget() {
  959. List<Player> availablePlayers = new ArrayList<Player>();
  960. VoragoInstance instance = vorago.getVoragoInstance();
  961. for (int i = 0; i < instance.getPlayersOnBattle().size(); i++) {
  962. Player player = instance.getPlayersOnBattle().get(i);
  963. if (player == null || player.isDead() || Utils.getDistance(vorago, player) > 24)
  964. continue;
  965. availablePlayers.add(player);
  966. }
  967. return availablePlayers.isEmpty() ? null : availablePlayers.get(Utils.random(availablePlayers.size() - 1));
  968. }
  969.  
  970. public Player getFarestTarget(Entity exception) {
  971. int farestDistance = 0;
  972. int index = 0;
  973. for (int i = 0; i < vorago.getVoragoInstance().getPlayersOnBattle().size(); i++) {
  974. Player player = vorago.getVoragoInstance().getPlayersOnBattle().get(i);
  975. if (player == null || player.isDead() || !Utils.isOnRange(vorago, player, 15)
  976. || (exception != null && player == exception))
  977. continue;
  978. int distance = Utils.getDistance(vorago, player);
  979. if (distance > farestDistance) {
  980. index = i;
  981. farestDistance = distance;
  982. }
  983. }
  984. return vorago.getVoragoInstance().getPlayersOnBattle().get(index);
  985. }
  986. }
Advertisement
Add Comment
Please, Sign In to add comment