Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 79.48 KB | None | 0 0
  1. package com.elvarg.world.entity.combat.magic;
  2.  
  3. import java.util.Arrays;
  4. import java.util.Optional;
  5.  
  6. import com.elvarg.engine.task.impl.CombatPoisonEffect.PoisonType;
  7. import com.elvarg.world.content.PrayerHandler;
  8. import com.elvarg.world.entity.combat.CombatFactory;
  9. import com.elvarg.world.entity.impl.Character;
  10. import com.elvarg.world.entity.impl.player.Player;
  11. import com.elvarg.world.model.Animation;
  12. import com.elvarg.world.model.EffectTimer;
  13. import com.elvarg.world.model.Graphic;
  14. import com.elvarg.world.model.GraphicHeight;
  15. import com.elvarg.world.model.Item;
  16. import com.elvarg.world.model.MagicSpellbook;
  17. import com.elvarg.world.model.Projectile;
  18. import com.elvarg.world.model.Skill;
  19.  
  20. public enum CombatSpells {
  21. WIND_STRIKE(new CombatNormalSpell() {
  22. @Override
  23. public Optional<Animation> castAnimation() {
  24. return Optional.of(new Animation(711));
  25. }
  26.  
  27. @Override
  28. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  29. return Optional.of(new Projectile(cast, castOn, 91, 0, 20, 43, 31, 0));
  30. }
  31.  
  32. @Override
  33. public Optional<Graphic> endGraphic() {
  34. return Optional.of(new Graphic(92, GraphicHeight.HIGH));
  35. }
  36.  
  37. @Override
  38. public int maximumHit() {
  39. return 2;
  40. }
  41.  
  42. @Override
  43. public Optional<Graphic> startGraphic() {
  44. return Optional.of(new Graphic(90, GraphicHeight.HIGH));
  45. }
  46.  
  47. @Override
  48. public int baseExperience() {
  49. return 5;
  50. }
  51.  
  52. @Override
  53. public Optional<Item[]> equipmentRequired(Player player) {
  54. return Optional.empty();
  55. }
  56.  
  57. @Override
  58. public Optional<Item[]> itemsRequired(Player player) {
  59. return Optional.of(new Item[] { new Item(556), new Item(558) });
  60. }
  61.  
  62. @Override
  63. public int levelRequired() {
  64. return 1;
  65. }
  66.  
  67. @Override
  68. public int spellId() {
  69. return 1152;
  70. }
  71. }),
  72. CONFUSE(new CombatEffectSpell() {
  73. @Override
  74. public Optional<Animation> castAnimation() {
  75. return Optional.of(new Animation(716));
  76. }
  77.  
  78. @Override
  79. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  80. return Optional.of(new Projectile(cast, castOn, 103, 0, 20, 43, 31, 0));
  81. }
  82.  
  83. @Override
  84. public void spellEffect(Character cast, Character castOn) {
  85. if (castOn.isPlayer()) {
  86. Player player = (Player) castOn;
  87.  
  88. if (player.getSkillManager().getCurrentLevel(Skill.ATTACK) < player.getSkillManager().getMaxLevel(Skill.ATTACK)) {
  89. if (cast.isPlayer()) {
  90. ((Player) cast).getPacketSender().sendMessage(
  91. "The spell has no effect because the player has already been weakened.");
  92. }
  93. return;
  94. }
  95. int decrease = (int) (0.05 * (player.getSkillManager().getCurrentLevel(Skill.ATTACK)));
  96. player.getSkillManager().setCurrentLevel(Skill.ATTACK, player.getSkillManager().getCurrentLevel(Skill.ATTACK) - decrease);
  97. player.getSkillManager().updateSkill(Skill.ATTACK);
  98.  
  99. player.getPacketSender().sendMessage(
  100. "You feel slightly weakened.");
  101. } /*else if (castOn.isNpc()) {
  102. NPC npc = (NPC) castOn;
  103.  
  104. if (npc.getDefenceWeakened()[0] || npc.getStrengthWeakened()[0]) {
  105. if (cast.isPlayer()) {
  106. ((Player) cast).getPacketSender().sendMessage(
  107. "The spell has no effect because the NPC has already been weakened.");
  108. }
  109. return;
  110. }
  111.  
  112. npc.getDefenceWeakened()[0] = true;
  113. }*/
  114. }
  115.  
  116. @Override
  117. public Optional<Graphic> endGraphic() {
  118. return Optional.of(new Graphic(104, GraphicHeight.HIGH));
  119. }
  120.  
  121. @Override
  122. public Optional<Graphic> startGraphic() {
  123. return Optional.of(new Graphic(102, GraphicHeight.HIGH));
  124. }
  125.  
  126. @Override
  127. public int baseExperience() {
  128. return 13;
  129. }
  130.  
  131. @Override
  132. public Optional<Item[]> itemsRequired(Player player) {
  133. return Optional.of(new Item[] { new Item(555, 3), new Item(557, 2), new Item(559) });
  134. }
  135.  
  136. @Override
  137. public int levelRequired() {
  138. return 3;
  139. }
  140.  
  141. @Override
  142. public int spellId() {
  143. return 1153;
  144. }
  145. }),
  146. WATER_STRIKE(new CombatNormalSpell() {
  147. @Override
  148. public Optional<Animation> castAnimation() {
  149. return Optional.of(new Animation(711));
  150. }
  151.  
  152. @Override
  153. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  154. return Optional.of(new Projectile(cast, castOn, 94, 0, 20, 43, 31, 0));
  155. }
  156.  
  157. @Override
  158. public Optional<Graphic> endGraphic() {
  159. return Optional.of(new Graphic(95, GraphicHeight.HIGH));
  160. }
  161.  
  162. @Override
  163. public int maximumHit() {
  164. return 4;
  165. }
  166.  
  167. @Override
  168. public Optional<Graphic> startGraphic() {
  169. return Optional.of(new Graphic(93, GraphicHeight.HIGH));
  170. }
  171.  
  172. @Override
  173. public int baseExperience() {
  174. return 7;
  175. }
  176.  
  177. @Override
  178. public Optional<Item[]> equipmentRequired(Player player) {
  179. return Optional.empty();
  180. }
  181.  
  182. @Override
  183. public Optional<Item[]> itemsRequired(Player player) {
  184. return Optional.of(new Item[] { new Item(555), new Item(556), new Item(558) });
  185. }
  186.  
  187. @Override
  188. public int levelRequired() {
  189. return 5;
  190. }
  191.  
  192. @Override
  193. public int spellId() {
  194. return 1154;
  195. }
  196. }),
  197. EARTH_STRIKE(new CombatNormalSpell() {
  198. @Override
  199. public Optional<Animation> castAnimation() {
  200. return Optional.of(new Animation(711));
  201. }
  202.  
  203. @Override
  204. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  205. return Optional.of(new Projectile(cast, castOn, 97, 0, 20, 43, 31, 0));
  206. }
  207.  
  208. @Override
  209. public Optional<Graphic> endGraphic() {
  210. return Optional.of(new Graphic(98, GraphicHeight.HIGH));
  211. }
  212.  
  213. @Override
  214. public int maximumHit() {
  215. return 6;
  216. }
  217.  
  218. @Override
  219. public Optional<Graphic> startGraphic() {
  220. return Optional.of(new Graphic(96, GraphicHeight.HIGH));
  221. }
  222.  
  223. @Override
  224. public int baseExperience() {
  225. return 9;
  226. }
  227.  
  228. @Override
  229. public Optional<Item[]> equipmentRequired(Player player) {
  230. return Optional.empty();
  231. }
  232.  
  233. @Override
  234. public Optional<Item[]> itemsRequired(Player player) {
  235. return Optional.of(new Item[] { new Item(556, 1), new Item(558, 1), new Item(557, 2) });
  236. }
  237.  
  238. @Override
  239. public int levelRequired() {
  240. return 9;
  241. }
  242.  
  243. @Override
  244. public int spellId() {
  245. return 1156;
  246. }
  247. }),
  248. WEAKEN(new CombatEffectSpell() {
  249. @Override
  250. public Optional<Animation> castAnimation() {
  251. return Optional.of(new Animation(716));
  252. }
  253.  
  254. @Override
  255. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  256. return Optional.of(new Projectile(cast, castOn, 106, 0, 20, 43, 31, 0));
  257. }
  258.  
  259. @Override
  260. public void spellEffect(Character cast, Character castOn) {
  261. if (castOn.isPlayer()) {
  262. Player player = (Player) castOn;
  263.  
  264. if (player.getSkillManager().getCurrentLevel(Skill.STRENGTH) < player.getSkillManager().getMaxLevel(Skill.STRENGTH)) {
  265. if (cast.isPlayer()) {
  266. ((Player) cast).getPacketSender().sendMessage(
  267. "The spell has no effect because the player has already been weakened.");
  268. }
  269. return;
  270. }
  271.  
  272. int decrease = (int) (0.05 * (player.getSkillManager().getCurrentLevel(Skill.STRENGTH)));
  273. player.getSkillManager().setCurrentLevel(Skill.STRENGTH, player.getSkillManager().getCurrentLevel(Skill.STRENGTH) - decrease);
  274. player.getSkillManager().updateSkill(Skill.STRENGTH);
  275. player.getPacketSender().sendMessage(
  276. "You feel slightly weakened.");
  277. } /*else if (castOn.isNpc()) {
  278. NPC npc = (NPC) castOn;
  279.  
  280. if (npc.getDefenceWeakened()[1] || npc.getStrengthWeakened()[1]) {
  281. if (cast.isPlayer()) {
  282. ((Player) cast).getPacketSender().sendMessage(
  283. "The spell has no effect because the NPC has already been weakened.");
  284. }
  285. return;
  286. }
  287.  
  288. npc.getDefenceWeakened()[1] = true;
  289. }*/
  290. }
  291.  
  292. @Override
  293. public Optional<Graphic> endGraphic() {
  294. return Optional.of(new Graphic(107, GraphicHeight.HIGH));
  295. }
  296.  
  297. @Override
  298. public Optional<Graphic> startGraphic() {
  299. return Optional.of(new Graphic(105, GraphicHeight.HIGH));
  300. }
  301.  
  302. @Override
  303. public int baseExperience() {
  304. return 21;
  305. }
  306.  
  307. @Override
  308. public Optional<Item[]> itemsRequired(Player player) {
  309. return Optional.of(new Item[] { new Item(555, 3), new Item(557, 2), new Item(559, 1) });
  310. }
  311.  
  312. @Override
  313. public int levelRequired() {
  314. return 11;
  315. }
  316.  
  317. @Override
  318. public int spellId() {
  319. return 1157;
  320. }
  321.  
  322. @Override
  323. public MagicSpellbook getSpellbook() {
  324. return null;
  325. }
  326. }),
  327. FIRE_STRIKE(new CombatNormalSpell() {
  328. @Override
  329. public Optional<Animation> castAnimation() {
  330. return Optional.of(new Animation(711));
  331. }
  332.  
  333. @Override
  334. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  335. return Optional.of(new Projectile(cast, castOn, 100, 0, 20, 43, 31, 0));
  336. }
  337.  
  338. @Override
  339. public Optional<Graphic> endGraphic() {
  340. return Optional.of(new Graphic(101, GraphicHeight.HIGH));
  341. }
  342.  
  343. @Override
  344. public int maximumHit() {
  345. return 8;
  346. }
  347.  
  348. @Override
  349. public Optional<Graphic> startGraphic() {
  350. return Optional.of(new Graphic(99, GraphicHeight.HIGH));
  351. }
  352.  
  353. @Override
  354. public int baseExperience() {
  355. return 11;
  356. }
  357.  
  358. @Override
  359. public Optional<Item[]> equipmentRequired(Player player) {
  360. return Optional.empty();
  361. }
  362.  
  363. @Override
  364. public Optional<Item[]> itemsRequired(Player player) {
  365. return Optional.of(new Item[] { new Item(556, 1), new Item(558, 1), new Item(554, 3) });
  366. }
  367.  
  368. @Override
  369. public int levelRequired() {
  370. return 13;
  371. }
  372.  
  373. @Override
  374. public int spellId() {
  375. return 1158;
  376. }
  377. }),
  378. WIND_BOLT(new CombatNormalSpell() {
  379. @Override
  380. public Optional<Animation> castAnimation() {
  381. return Optional.of(new Animation(711));
  382. }
  383.  
  384. @Override
  385. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  386. return Optional.of(new Projectile(cast, castOn, 118, 0, 20, 43, 31, 0));
  387. }
  388.  
  389. @Override
  390. public Optional<Graphic> endGraphic() {
  391. return Optional.of(new Graphic(119, GraphicHeight.HIGH));
  392. }
  393.  
  394. @Override
  395. public int maximumHit() {
  396. return 9;
  397. }
  398.  
  399. @Override
  400. public Optional<Graphic> startGraphic() {
  401. return Optional.of(new Graphic(117, GraphicHeight.HIGH));
  402. }
  403.  
  404. @Override
  405. public int baseExperience() {
  406. return 13;
  407. }
  408.  
  409. @Override
  410. public Optional<Item[]> equipmentRequired(Player player) {
  411. return Optional.empty();
  412. }
  413.  
  414. @Override
  415. public Optional<Item[]> itemsRequired(Player player) {
  416. return Optional.of(new Item[] { new Item(556, 2), new Item(562, 1) });
  417. }
  418.  
  419. @Override
  420. public int levelRequired() {
  421. return 17;
  422. }
  423.  
  424. @Override
  425. public int spellId() {
  426. return 1160;
  427. }
  428. }),
  429. CURSE(new CombatEffectSpell() {
  430. @Override
  431. public Optional<Animation> castAnimation() {
  432. return Optional.of(new Animation(710));
  433. }
  434.  
  435. @Override
  436. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  437. return Optional.of(new Projectile(cast, castOn, 109, 0, 20, 43, 31, 0));
  438. }
  439.  
  440. @Override
  441. public void spellEffect(Character cast, Character castOn) {
  442. if (castOn.isPlayer()) {
  443. Player player = (Player) castOn;
  444.  
  445. if (player.getSkillManager().getCurrentLevel(Skill.DEFENCE) < player.getSkillManager().getMaxLevel(Skill.DEFENCE)) {
  446. if (cast.isPlayer()) {
  447. ((Player) cast).getPacketSender().sendMessage(
  448. "The spell has no effect because the player has already been weakened.");
  449. }
  450. return;
  451. }
  452.  
  453. int decrease = (int) (0.05 * (player.getSkillManager().getCurrentLevel(Skill.DEFENCE)));
  454. player.getSkillManager().setCurrentLevel(Skill.DEFENCE, player.getSkillManager().getCurrentLevel(Skill.DEFENCE) - decrease);
  455. player.getSkillManager().updateSkill(Skill.DEFENCE);
  456.  
  457. player.getPacketSender().sendMessage(
  458. "You feel slightly weakened.");
  459. }/* else if (castOn.isNpc()) {
  460. NPC npc = (NPC) castOn;
  461.  
  462. if (npc.getDefenceWeakened()[2] || npc.getStrengthWeakened()[2]) {
  463. if (cast.isPlayer()) {
  464. ((Player) cast).getPacketSender().sendMessage(
  465. "The spell has no effect because the NPC has already been weakened.");
  466. }
  467. return;
  468. }
  469.  
  470. npc.getDefenceWeakened()[2] = true;
  471. }*/
  472. }
  473.  
  474. @Override
  475. public Optional<Graphic> endGraphic() {
  476. return Optional.of(new Graphic(110, GraphicHeight.HIGH));
  477. }
  478.  
  479. @Override
  480. public Optional<Graphic> startGraphic() {
  481. return Optional.of(new Graphic(108, GraphicHeight.HIGH));
  482. }
  483.  
  484. @Override
  485. public int baseExperience() {
  486. return 29;
  487. }
  488.  
  489. @Override
  490. public Optional<Item[]> itemsRequired(Player player) {
  491. return Optional.of(new Item[] { new Item(555, 2), new Item(557, 3), new Item(559, 1) });
  492. }
  493.  
  494. @Override
  495. public int levelRequired() {
  496. return 19;
  497. }
  498.  
  499. @Override
  500. public int spellId() {
  501. return 1161;
  502. }
  503. }),
  504. BIND(new CombatEffectSpell() {
  505. @Override
  506. public Optional<Animation> castAnimation() {
  507. return Optional.of(new Animation(710));
  508. }
  509.  
  510. @Override
  511. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  512. return Optional.of(new Projectile(cast, castOn, 178, 0, 20, 43, 31, 0));
  513. }
  514.  
  515. @Override
  516. public void spellEffect(Character cast, Character castOn) {
  517. if (!castOn.getCombat().getFreezeTimer().finished()) {
  518. if (cast.isPlayer()) {
  519. ((Player) cast).getPacketSender().sendMessage(
  520. "The spell has no effect because they are already frozen.");
  521. }
  522. return;
  523. }
  524.  
  525. CombatFactory.freeze(castOn, 5);
  526. }
  527.  
  528. @Override
  529. public Optional<Graphic> endGraphic() {
  530. return Optional.of(new Graphic(181, GraphicHeight.HIGH));
  531. }
  532.  
  533. @Override
  534. public Optional<Graphic> startGraphic() {
  535. return Optional.of(new Graphic(177, GraphicHeight.HIGH));
  536. }
  537.  
  538. @Override
  539. public int baseExperience() {
  540. return 30;
  541. }
  542.  
  543. @Override
  544. public Optional<Item[]> itemsRequired(Player player) {
  545. return Optional.of(new Item[] { new Item(555, 3), new Item(557, 3), new Item(561, 2) });
  546. }
  547.  
  548. @Override
  549. public int levelRequired() {
  550. return 20;
  551. }
  552.  
  553. @Override
  554. public int spellId() {
  555. return 1572;
  556. }
  557. }),
  558. WATER_BOLT(new CombatNormalSpell() {
  559. @Override
  560. public Optional<Animation> castAnimation() {
  561. return Optional.of(new Animation(711));
  562. }
  563.  
  564. @Override
  565. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  566. return Optional.of(new Projectile(cast, castOn, 121, 0, 20, 43, 31, 0));
  567. }
  568.  
  569. @Override
  570. public Optional<Graphic> endGraphic() {
  571. return Optional.of(new Graphic(122, GraphicHeight.HIGH));
  572. }
  573.  
  574. @Override
  575. public int maximumHit() {
  576. return 10;
  577. }
  578.  
  579. @Override
  580. public Optional<Graphic> startGraphic() {
  581. return Optional.of(new Graphic(120, GraphicHeight.HIGH));
  582. }
  583.  
  584. @Override
  585. public int baseExperience() {
  586. return 16;
  587. }
  588.  
  589. @Override
  590. public Optional<Item[]> equipmentRequired(Player player) {
  591. return Optional.empty();
  592. }
  593.  
  594. @Override
  595. public Optional<Item[]> itemsRequired(Player player) {
  596. return Optional.of(new Item[] { new Item(556, 2), new Item(562, 1), new Item(555, 2) });
  597. }
  598.  
  599. @Override
  600. public int levelRequired() {
  601. return 23;
  602. }
  603.  
  604. @Override
  605. public int spellId() {
  606. return 1163;
  607. }
  608. }),
  609. EARTH_BOLT(new CombatNormalSpell() {
  610. @Override
  611. public Optional<Animation> castAnimation() {
  612. return Optional.of(new Animation(711));
  613. }
  614.  
  615. @Override
  616. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  617. return Optional.of(new Projectile(cast, castOn, 124, 0, 20, 43, 31, 0));
  618. }
  619.  
  620. @Override
  621. public Optional<Graphic> endGraphic() {
  622. return Optional.of(new Graphic(125, GraphicHeight.HIGH));
  623. }
  624.  
  625. @Override
  626. public int maximumHit() {
  627. return 11;
  628. }
  629.  
  630. @Override
  631. public Optional<Graphic> startGraphic() {
  632. return Optional.of(new Graphic(123, GraphicHeight.HIGH));
  633. }
  634.  
  635. @Override
  636. public int baseExperience() {
  637. return 19;
  638. }
  639.  
  640. @Override
  641. public Optional<Item[]> equipmentRequired(Player player) {
  642. return Optional.empty();
  643. }
  644.  
  645. @Override
  646. public Optional<Item[]> itemsRequired(Player player) {
  647. return Optional.of(new Item[] { new Item(556, 2), new Item(562, 1), new Item(557, 3) });
  648. }
  649.  
  650. @Override
  651. public int levelRequired() {
  652. return 29;
  653. }
  654.  
  655. @Override
  656. public int spellId() {
  657. return 1166;
  658. }
  659. }),
  660. FIRE_BOLT(new CombatNormalSpell() {
  661. @Override
  662. public Optional<Animation> castAnimation() {
  663. return Optional.of(new Animation(711));
  664. }
  665.  
  666. @Override
  667. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  668. return Optional.of(new Projectile(cast, castOn, 127, 0, 20, 43, 31, 0));
  669. }
  670.  
  671. @Override
  672. public Optional<Graphic> endGraphic() {
  673. return Optional.of(new Graphic(128, GraphicHeight.HIGH));
  674. }
  675.  
  676. @Override
  677. public int maximumHit() {
  678. return 12;
  679. }
  680.  
  681. @Override
  682. public Optional<Graphic> startGraphic() {
  683. return Optional.of(new Graphic(126, GraphicHeight.HIGH));
  684. }
  685.  
  686. @Override
  687. public int baseExperience() {
  688. return 22;
  689. }
  690.  
  691. @Override
  692. public Optional<Item[]> equipmentRequired(Player player) {
  693. return Optional.empty();
  694. }
  695.  
  696. @Override
  697. public Optional<Item[]> itemsRequired(Player player) {
  698. return Optional.of(new Item[] { new Item(556, 3), new Item(562, 1), new Item(554, 4) });
  699. }
  700.  
  701. @Override
  702. public int levelRequired() {
  703. return 35;
  704. }
  705.  
  706. @Override
  707. public int spellId() {
  708. return 1169;
  709. }
  710. }),
  711. CRUMBLE_UNDEAD(new CombatNormalSpell() {
  712. @Override
  713. public Optional<Animation> castAnimation() {
  714. return Optional.of(new Animation(724));
  715. }
  716.  
  717. @Override
  718. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  719. return Optional.of(new Projectile(cast, castOn, 146, 0, 20, 43, 31, 0));
  720. }
  721.  
  722. @Override
  723. public Optional<Graphic> endGraphic() {
  724. return Optional.of(new Graphic(147));
  725. }
  726.  
  727. @Override
  728. public int maximumHit() {
  729. return 15;
  730. }
  731.  
  732. @Override
  733. public Optional<Graphic> startGraphic() {
  734. return Optional.of(new Graphic(145, 6553600));
  735. }
  736.  
  737. @Override
  738. public int baseExperience() {
  739. return 24;
  740. }
  741.  
  742. @Override
  743. public Optional<Item[]> equipmentRequired(Player player) {
  744. return Optional.empty();
  745. }
  746.  
  747. @Override
  748. public Optional<Item[]> itemsRequired(Player player) {
  749. return Optional.of(new Item[] { new Item(556, 2), new Item(562, 1), new Item(557, 2) });
  750. }
  751.  
  752. @Override
  753. public int levelRequired() {
  754. return 39;
  755. }
  756.  
  757. @Override
  758. public int spellId() {
  759. return 1171;
  760. }
  761. }),
  762. WIND_BLAST(new CombatNormalSpell() {
  763. @Override
  764. public Optional<Animation> castAnimation() {
  765. return Optional.of(new Animation(711));
  766. }
  767.  
  768. @Override
  769. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  770. return Optional.of(new Projectile(cast, castOn, 133, 0, 20, 43, 31, 0));
  771. }
  772.  
  773. @Override
  774. public Optional<Graphic> endGraphic() {
  775. return Optional.of(new Graphic(134, GraphicHeight.HIGH));
  776. }
  777.  
  778. @Override
  779. public int maximumHit() {
  780. return 13;
  781. }
  782.  
  783. @Override
  784. public Optional<Graphic> startGraphic() {
  785. return Optional.of(new Graphic(132, GraphicHeight.HIGH));
  786. }
  787.  
  788. @Override
  789. public int baseExperience() {
  790. return 25;
  791. }
  792.  
  793. @Override
  794. public Optional<Item[]> equipmentRequired(Player player) {
  795. return Optional.empty();
  796. }
  797.  
  798. @Override
  799. public Optional<Item[]> itemsRequired(Player player) {
  800. return Optional.of(new Item[] { new Item(556, 3), new Item(560, 1) });
  801. }
  802.  
  803. @Override
  804. public int levelRequired() {
  805. return 41;
  806. }
  807.  
  808. @Override
  809. public int spellId() {
  810. return 1172;
  811. }
  812. }),
  813. WATER_BLAST(new CombatNormalSpell() {
  814. @Override
  815. public Optional<Animation> castAnimation() {
  816. return Optional.of(new Animation(711));
  817. }
  818.  
  819. @Override
  820. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  821. return Optional.of(new Projectile(cast, castOn, 136, 0, 20, 43, 31, 0));
  822. }
  823.  
  824. @Override
  825. public Optional<Graphic> endGraphic() {
  826. return Optional.of(new Graphic(137, GraphicHeight.HIGH));
  827. }
  828.  
  829. @Override
  830. public int maximumHit() {
  831. return 14;
  832. }
  833.  
  834. @Override
  835. public Optional<Graphic> startGraphic() {
  836. return Optional.of(new Graphic(135, GraphicHeight.HIGH));
  837. }
  838.  
  839. @Override
  840. public int baseExperience() {
  841. return 28;
  842. }
  843.  
  844. @Override
  845. public Optional<Item[]> equipmentRequired(Player player) {
  846. return Optional.empty();
  847. }
  848.  
  849. @Override
  850. public Optional<Item[]> itemsRequired(Player player) {
  851. return Optional.of(new Item[] { new Item(555, 3), new Item(556, 3), new Item(560, 1) });
  852. }
  853.  
  854. @Override
  855. public int levelRequired() {
  856. return 47;
  857. }
  858.  
  859. @Override
  860. public int spellId() {
  861. return 1175;
  862. }
  863. }),
  864. IBAN_BLAST(new CombatNormalSpell() {
  865. @Override
  866. public Optional<Animation> castAnimation() {
  867. return Optional.of(new Animation(708));
  868. }
  869.  
  870. @Override
  871. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  872. return Optional.of(new Projectile(cast, castOn, 88, 0, 20, 43, 31, 0));
  873. }
  874.  
  875. @Override
  876. public Optional<Graphic> endGraphic() {
  877. return Optional.of(new Graphic(89));
  878. }
  879.  
  880. @Override
  881. public int maximumHit() {
  882. return 25;
  883. }
  884.  
  885. @Override
  886. public Optional<Graphic> startGraphic() {
  887. return Optional.of(new Graphic(87, 6553600));
  888. }
  889.  
  890. @Override
  891. public int baseExperience() {
  892. return 30;
  893. }
  894.  
  895. @Override
  896. public Optional<Item[]> equipmentRequired(Player player) {
  897. return Optional.of(new Item[] { new Item(1409) });
  898. }
  899.  
  900. @Override
  901. public Optional<Item[]> itemsRequired(Player player) {
  902. return Optional.of(new Item[] { new Item(560, 1), new Item(554, 5) });
  903. }
  904.  
  905. @Override
  906. public int levelRequired() {
  907. return 50;
  908. }
  909.  
  910. @Override
  911. public int spellId() {
  912. return 1539;
  913. }
  914. }),
  915. SNARE(new CombatEffectSpell() {
  916. @Override
  917. public Optional<Animation> castAnimation() {
  918. return Optional.of(new Animation(710));
  919. }
  920.  
  921. @Override
  922. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  923. return Optional.of(new Projectile(cast, castOn, 178, 0, 20, 43, 31, 0));
  924. }
  925.  
  926. @Override
  927. public void spellEffect(Character cast, Character castOn) {
  928. if (!castOn.getCombat().getFreezeTimer().finished()) {
  929. if (cast.isPlayer()) {
  930. ((Player) cast).getPacketSender().sendMessage(
  931. "The spell has no effect because they are already frozen.");
  932. }
  933. return;
  934. }
  935.  
  936. CombatFactory.freeze(castOn, 10);
  937. }
  938.  
  939. @Override
  940. public Optional<Graphic> endGraphic() {
  941. return Optional.of(new Graphic(180, GraphicHeight.HIGH));
  942. }
  943.  
  944. @Override
  945. public Optional<Graphic> startGraphic() {
  946. return Optional.of(new Graphic(177, GraphicHeight.HIGH));
  947. }
  948.  
  949. @Override
  950. public int baseExperience() {
  951. return 60;
  952. }
  953.  
  954. @Override
  955. public Optional<Item[]> itemsRequired(Player player) {
  956. return Optional.of(new Item[] { new Item(555, 3), new Item(557, 4), new Item(561, 3) });
  957. }
  958.  
  959. @Override
  960. public int levelRequired() {
  961. return 50;
  962. }
  963.  
  964. @Override
  965. public int spellId() {
  966. return 1582;
  967. }
  968. }),
  969. MAGIC_DART(new CombatNormalSpell() {
  970. @Override
  971. public Optional<Animation> castAnimation() {
  972. return Optional.of(new Animation(1576));
  973. }
  974.  
  975. @Override
  976. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  977. return Optional.of(new Projectile(cast, castOn, 328, 0, 20, 43, 31, 0));
  978. }
  979.  
  980. @Override
  981. public Optional<Graphic> endGraphic() {
  982. return Optional.of(new Graphic(329));
  983. }
  984.  
  985. @Override
  986. public int maximumHit() {
  987. return 19;
  988. }
  989.  
  990. @Override
  991. public Optional<Graphic> startGraphic() {
  992. return Optional.of(new Graphic(327, 6553600));
  993. }
  994.  
  995. @Override
  996. public int baseExperience() {
  997. return 30;
  998. }
  999.  
  1000. @Override
  1001. public Optional<Item[]> equipmentRequired(Player player) {
  1002. return Optional.of(new Item[] { new Item(4170) });
  1003. }
  1004.  
  1005. @Override
  1006. public Optional<Item[]> itemsRequired(Player player) {
  1007. return Optional.of(new Item[] { new Item(558, 4), new Item(560, 1) });
  1008. }
  1009.  
  1010. @Override
  1011. public int levelRequired() {
  1012. return 50;
  1013. }
  1014.  
  1015. @Override
  1016. public int spellId() {
  1017. return 12037;
  1018. }
  1019. }),
  1020. EARTH_BLAST(new CombatNormalSpell() {
  1021. @Override
  1022. public Optional<Animation> castAnimation() {
  1023. return Optional.of(new Animation(711));
  1024. }
  1025.  
  1026. @Override
  1027. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1028. return Optional.of(new Projectile(cast, castOn, 139, 0, 20, 43, 31, 0));
  1029. }
  1030.  
  1031. @Override
  1032. public Optional<Graphic> endGraphic() {
  1033. return Optional.of(new Graphic(140, GraphicHeight.HIGH));
  1034. }
  1035.  
  1036. @Override
  1037. public int maximumHit() {
  1038. return 15;
  1039. }
  1040.  
  1041. @Override
  1042. public Optional<Graphic> startGraphic() {
  1043. return Optional.of(new Graphic(138, GraphicHeight.HIGH));
  1044. }
  1045.  
  1046. @Override
  1047. public int baseExperience() {
  1048. return 31;
  1049. }
  1050.  
  1051. @Override
  1052. public Optional<Item[]> equipmentRequired(Player player) {
  1053. return Optional.empty();
  1054. }
  1055.  
  1056. @Override
  1057. public Optional<Item[]> itemsRequired(Player player) {
  1058. return Optional.of(new Item[] { new Item(556, 3), new Item(560, 1), new Item(557, 4) });
  1059. }
  1060.  
  1061. @Override
  1062. public int levelRequired() {
  1063. return 53;
  1064. }
  1065.  
  1066. @Override
  1067. public int spellId() {
  1068. return 1177;
  1069. }
  1070. }),
  1071. FIRE_BLAST(new CombatNormalSpell() {
  1072. @Override
  1073. public Optional<Animation> castAnimation() {
  1074. return Optional.of(new Animation(711));
  1075. }
  1076.  
  1077. @Override
  1078. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1079. return Optional.of(new Projectile(cast, castOn, 130, 0, 20, 43, 31, 0));
  1080. }
  1081.  
  1082. @Override
  1083. public Optional<Graphic> endGraphic() {
  1084. return Optional.of(new Graphic(131, GraphicHeight.HIGH));
  1085. }
  1086.  
  1087. @Override
  1088. public int maximumHit() {
  1089. return 16;
  1090. }
  1091.  
  1092. @Override
  1093. public Optional<Graphic> startGraphic() {
  1094. return Optional.of(new Graphic(129, GraphicHeight.HIGH));
  1095. }
  1096.  
  1097. @Override
  1098. public int baseExperience() {
  1099. return 34;
  1100. }
  1101.  
  1102. @Override
  1103. public Optional<Item[]> equipmentRequired(Player player) {
  1104. return Optional.empty();
  1105. }
  1106.  
  1107. @Override
  1108. public Optional<Item[]> itemsRequired(Player player) {
  1109. return Optional.of(new Item[] { new Item(556, 4), new Item(560, 1), new Item(554, 5) });
  1110. }
  1111.  
  1112. @Override
  1113. public int levelRequired() {
  1114. return 59;
  1115. }
  1116.  
  1117. @Override
  1118. public int spellId() {
  1119. return 1181;
  1120. }
  1121. }),
  1122. SARADOMIN_STRIKE(new CombatNormalSpell() {
  1123. @Override
  1124. public Optional<Animation> castAnimation() {
  1125. return Optional.of(new Animation(811));
  1126. }
  1127.  
  1128. @Override
  1129. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1130. return Optional.empty();
  1131. }
  1132.  
  1133. @Override
  1134. public Optional<Graphic> endGraphic() {
  1135. return Optional.of(new Graphic(76));
  1136. }
  1137.  
  1138. @Override
  1139. public int maximumHit() {
  1140. return 20;
  1141. }
  1142.  
  1143. @Override
  1144. public Optional<Graphic> startGraphic() {
  1145. return Optional.empty();
  1146. }
  1147.  
  1148. @Override
  1149. public int baseExperience() {
  1150. return 35;
  1151. }
  1152.  
  1153. @Override
  1154. public Optional<Item[]> equipmentRequired(Player player) {
  1155. return Optional.of(new Item[] { new Item(2415) });
  1156. }
  1157.  
  1158. @Override
  1159. public Optional<Item[]> itemsRequired(Player player) {
  1160. return Optional.of(new Item[] { new Item(556, 4), new Item(565, 2), new Item(554, 2) });
  1161. }
  1162.  
  1163. @Override
  1164. public int levelRequired() {
  1165. return 60;
  1166. }
  1167.  
  1168. @Override
  1169. public int spellId() {
  1170. return 1190;
  1171. }
  1172. }),
  1173. CLAWS_OF_GUTHIX(new CombatNormalSpell() {
  1174. @Override
  1175. public Optional<Animation> castAnimation() {
  1176. return Optional.of(new Animation(811));
  1177. }
  1178.  
  1179. @Override
  1180. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1181. return Optional.empty();
  1182. }
  1183.  
  1184. @Override
  1185. public Optional<Graphic> endGraphic() {
  1186. return Optional.of(new Graphic(77));
  1187. }
  1188.  
  1189. @Override
  1190. public int maximumHit() {
  1191. return 20;
  1192. }
  1193.  
  1194. @Override
  1195. public Optional<Graphic> startGraphic() {
  1196. return Optional.empty();
  1197. }
  1198.  
  1199. @Override
  1200. public int baseExperience() {
  1201. return 35;
  1202. }
  1203.  
  1204. @Override
  1205. public Optional<Item[]> equipmentRequired(Player player) {
  1206. return Optional.of(new Item[] { new Item(2416) });
  1207. }
  1208.  
  1209. @Override
  1210. public Optional<Item[]> itemsRequired(Player player) {
  1211. return Optional.of(new Item[] { new Item(556, 4), new Item(565, 2), new Item(554, 2) });
  1212. }
  1213.  
  1214. @Override
  1215. public int levelRequired() {
  1216. return 60;
  1217. }
  1218.  
  1219. @Override
  1220. public int spellId() {
  1221. return 1191;
  1222. }
  1223. }),
  1224. FLAMES_OF_ZAMORAK(new CombatNormalSpell() {
  1225. @Override
  1226. public Optional<Animation> castAnimation() {
  1227. return Optional.of(new Animation(811));
  1228. }
  1229.  
  1230. @Override
  1231. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1232. return Optional.empty();
  1233. }
  1234.  
  1235. @Override
  1236. public Optional<Graphic> endGraphic() {
  1237. return Optional.of(new Graphic(78));
  1238. }
  1239.  
  1240. @Override
  1241. public int maximumHit() {
  1242. return 20;
  1243. }
  1244.  
  1245. @Override
  1246. public Optional<Graphic> startGraphic() {
  1247. return Optional.empty();
  1248. }
  1249.  
  1250. @Override
  1251. public int baseExperience() {
  1252. return 35;
  1253. }
  1254.  
  1255. @Override
  1256. public Optional<Item[]> equipmentRequired(Player player) {
  1257. return Optional.of(new Item[] { new Item(2417) });
  1258. }
  1259.  
  1260. @Override
  1261. public Optional<Item[]> itemsRequired(Player player) {
  1262. return Optional.of(new Item[] { new Item(556, 4), new Item(565, 2), new Item(554, 2) });
  1263. }
  1264.  
  1265. @Override
  1266. public int levelRequired() {
  1267. return 60;
  1268. }
  1269.  
  1270. @Override
  1271. public int spellId() {
  1272. return 1192;
  1273. }
  1274. }),
  1275. WIND_WAVE(new CombatNormalSpell() {
  1276. @Override
  1277. public Optional<Animation> castAnimation() {
  1278. return Optional.of(new Animation(711));
  1279. }
  1280.  
  1281. @Override
  1282. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1283. return Optional.of(new Projectile(cast, castOn, 159, 0, 20, 43, 31, 0));
  1284. }
  1285.  
  1286. @Override
  1287. public Optional<Graphic> endGraphic() {
  1288. return Optional.of(new Graphic(160, GraphicHeight.HIGH));
  1289. }
  1290.  
  1291. @Override
  1292. public int maximumHit() {
  1293. return 17;
  1294. }
  1295.  
  1296. @Override
  1297. public Optional<Graphic> startGraphic() {
  1298. return Optional.of(new Graphic(158, GraphicHeight.MIDDLE));
  1299. }
  1300.  
  1301. @Override
  1302. public int baseExperience() {
  1303. return 36;
  1304. }
  1305.  
  1306. @Override
  1307. public Optional<Item[]> equipmentRequired(Player player) {
  1308. return Optional.empty();
  1309. }
  1310.  
  1311. @Override
  1312. public Optional<Item[]> itemsRequired(Player player) {
  1313. return Optional.of(new Item[] { new Item(556, 5), new Item(565, 1) });
  1314. }
  1315.  
  1316. @Override
  1317. public int levelRequired() {
  1318. return 62;
  1319. }
  1320.  
  1321. @Override
  1322. public int spellId() {
  1323. return 1183;
  1324. }
  1325. }),
  1326. WATER_WAVE(new CombatNormalSpell() {
  1327. @Override
  1328. public Optional<Animation> castAnimation() {
  1329. return Optional.of(new Animation(711));
  1330. }
  1331.  
  1332. @Override
  1333. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1334. return Optional.of(new Projectile(cast, castOn, 162, 0, 20, 43, 31, 0));
  1335. }
  1336.  
  1337. @Override
  1338. public Optional<Graphic> endGraphic() {
  1339. return Optional.of(new Graphic(163, GraphicHeight.HIGH));
  1340. }
  1341.  
  1342. @Override
  1343. public int maximumHit() {
  1344. return 18;
  1345. }
  1346.  
  1347. @Override
  1348. public Optional<Graphic> startGraphic() {
  1349. return Optional.of(new Graphic(161, GraphicHeight.MIDDLE));
  1350. }
  1351.  
  1352. @Override
  1353. public int baseExperience() {
  1354. return 37;
  1355. }
  1356.  
  1357. @Override
  1358. public Optional<Item[]> equipmentRequired(Player player) {
  1359. return Optional.empty();
  1360. }
  1361.  
  1362. @Override
  1363. public Optional<Item[]> itemsRequired(Player player) {
  1364. return Optional.of(new Item[] { new Item(556, 5), new Item(565, 1), new Item(555, 7) });
  1365. }
  1366.  
  1367. @Override
  1368. public int levelRequired() {
  1369. return 65;
  1370. }
  1371.  
  1372. @Override
  1373. public int spellId() {
  1374. return 1185;
  1375. }
  1376. }),
  1377. VULNERABILITY(new CombatEffectSpell() {
  1378. @Override
  1379. public Optional<Animation> castAnimation() {
  1380. return Optional.of(new Animation(729));
  1381. }
  1382.  
  1383. @Override
  1384. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1385. return Optional.of(new Projectile(cast, castOn, 168, 0, 20, 43, 31, 0));
  1386. }
  1387.  
  1388. @Override
  1389. public void spellEffect(Character cast, Character castOn) {
  1390. if (castOn.isPlayer()) {
  1391. Player player = (Player) castOn;
  1392.  
  1393. if (player.getSkillManager().getCurrentLevel(Skill.DEFENCE) < player.getSkillManager().getMaxLevel(Skill.DEFENCE)) {
  1394. if (cast.isPlayer()) {
  1395. ((Player) cast).getPacketSender().sendMessage(
  1396. "The spell has no effect because the player is already weakened.");
  1397. }
  1398. return;
  1399. }
  1400.  
  1401. int decrease = (int) (0.10 * (player.getSkillManager().getCurrentLevel(Skill.DEFENCE)));
  1402. player.getSkillManager().setCurrentLevel(Skill.DEFENCE, player.getSkillManager().getCurrentLevel(Skill.DEFENCE) - decrease);
  1403. player.getSkillManager().updateSkill(Skill.DEFENCE);
  1404. player.getPacketSender().sendMessage(
  1405. "You feel slightly weakened.");
  1406. }/* else if (castOn.isNpc()) {
  1407. NPC npc = (NPC) castOn;
  1408.  
  1409. if (npc.getDefenceWeakened()[2] || npc.getStrengthWeakened()[2]) {
  1410. if (cast.isPlayer()) {
  1411. ((Player) cast).getPacketSender().sendMessage(
  1412. "The spell has no effect because the NPC is already weakened.");
  1413. }
  1414. return;
  1415. }
  1416.  
  1417. npc.getStrengthWeakened()[2] = true;
  1418. }*/
  1419. }
  1420.  
  1421. @Override
  1422. public Optional<Graphic> endGraphic() {
  1423. return Optional.of(new Graphic(169));
  1424. }
  1425.  
  1426. @Override
  1427. public Optional<Graphic> startGraphic() {
  1428. return Optional.of(new Graphic(167, 6553600));
  1429. }
  1430.  
  1431. @Override
  1432. public int baseExperience() {
  1433. return 76;
  1434. }
  1435.  
  1436. @Override
  1437. public Optional<Item[]> itemsRequired(Player player) {
  1438. return Optional.of(new Item[] { new Item(557, 5), new Item(555, 5), new Item(566, 1) });
  1439. }
  1440.  
  1441. @Override
  1442. public int levelRequired() {
  1443. return 66;
  1444. }
  1445.  
  1446. @Override
  1447. public int spellId() {
  1448. return 1542;
  1449. }
  1450. }),
  1451. EARTH_WAVE(new CombatNormalSpell() {
  1452. @Override
  1453. public Optional<Animation> castAnimation() {
  1454. return Optional.of(new Animation(711));
  1455. }
  1456.  
  1457. @Override
  1458. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1459. return Optional.of(new Projectile(cast, castOn, 165, 0, 20, 43, 31, 0));
  1460. }
  1461.  
  1462. @Override
  1463. public Optional<Graphic> endGraphic() {
  1464. return Optional.of(new Graphic(166, GraphicHeight.HIGH));
  1465. }
  1466.  
  1467. @Override
  1468. public int maximumHit() {
  1469. return 19;
  1470. }
  1471.  
  1472. @Override
  1473. public Optional<Graphic> startGraphic() {
  1474. return Optional.of(new Graphic(164, GraphicHeight.MIDDLE));
  1475. }
  1476.  
  1477. @Override
  1478. public int baseExperience() {
  1479. return 40;
  1480. }
  1481.  
  1482. @Override
  1483. public Optional<Item[]> equipmentRequired(Player player) {
  1484. return Optional.empty();
  1485. }
  1486.  
  1487. @Override
  1488. public Optional<Item[]> itemsRequired(Player player) {
  1489. return Optional.of(new Item[] { new Item(556, 5), new Item(565, 1), new Item(557, 7) });
  1490. }
  1491.  
  1492. @Override
  1493. public int levelRequired() {
  1494. return 70;
  1495. }
  1496.  
  1497. @Override
  1498. public int spellId() {
  1499. return 1188;
  1500. }
  1501. }),
  1502. ENFEEBLE(new CombatEffectSpell() {
  1503. @Override
  1504. public Optional<Animation> castAnimation() {
  1505. return Optional.of(new Animation(729));
  1506. }
  1507.  
  1508. @Override
  1509. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1510. return Optional.of(new Projectile(cast, castOn, 171, 0, 20, 43, 31, 0));
  1511. }
  1512.  
  1513. @Override
  1514. public void spellEffect(Character cast, Character castOn) {
  1515. if (castOn.isPlayer()) {
  1516. Player player = (Player) castOn;
  1517.  
  1518. if (player.getSkillManager().getCurrentLevel(Skill.STRENGTH) < player.getSkillManager().getMaxLevel(Skill.STRENGTH)) {
  1519. if (cast.isPlayer()) {
  1520. ((Player) cast).getPacketSender().sendMessage(
  1521. "The spell has no effect because the player is already weakened.");
  1522. }
  1523. return;
  1524. }
  1525.  
  1526. int decrease = (int) (0.10 * (player.getSkillManager().getCurrentLevel(Skill.STRENGTH)));
  1527. player.getSkillManager().setCurrentLevel(Skill.STRENGTH, player.getSkillManager().getCurrentLevel(Skill.STRENGTH) - decrease);
  1528. player.getSkillManager().updateSkill(Skill.STRENGTH);
  1529.  
  1530. player.getPacketSender().sendMessage(
  1531. "You feel slightly weakened.");
  1532. } /*else if (castOn.isNpc()) {
  1533. NPC npc = (NPC) castOn;
  1534.  
  1535. if (npc.getDefenceWeakened()[1] || npc.getStrengthWeakened()[1]) {
  1536. if (cast.isPlayer()) {
  1537. ((Player) cast).getPacketSender().sendMessage(
  1538. "The spell has no effect because the NPC is already weakened.");
  1539. }
  1540. return;
  1541. }
  1542.  
  1543. npc.getStrengthWeakened()[1] = true;
  1544. }*/
  1545. }
  1546.  
  1547. @Override
  1548. public Optional<Graphic> endGraphic() {
  1549. return Optional.of(new Graphic(172));
  1550. }
  1551.  
  1552. @Override
  1553. public Optional<Graphic> startGraphic() {
  1554. return Optional.of(new Graphic(170, 6553600));
  1555. }
  1556.  
  1557. @Override
  1558. public int baseExperience() {
  1559. return 83;
  1560. }
  1561.  
  1562. @Override
  1563. public Optional<Item[]> itemsRequired(Player player) {
  1564. return Optional.of(new Item[] { new Item(557, 8), new Item(555, 8), new Item(566, 1) });
  1565. }
  1566.  
  1567. @Override
  1568. public int levelRequired() {
  1569. return 73;
  1570. }
  1571.  
  1572. @Override
  1573. public int spellId() {
  1574. return 1543;
  1575. }
  1576. }),
  1577. FIRE_WAVE(new CombatNormalSpell() {
  1578. @Override
  1579. public Optional<Animation> castAnimation() {
  1580. return Optional.of(new Animation(711));
  1581. }
  1582.  
  1583. @Override
  1584. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1585. return Optional.of(new Projectile(cast, castOn, 156, 0, 20, 43, 31, 0));
  1586. }
  1587.  
  1588. @Override
  1589. public Optional<Graphic> endGraphic() {
  1590. return Optional.of(new Graphic(157, GraphicHeight.HIGH));
  1591. }
  1592.  
  1593. @Override
  1594. public int maximumHit() {
  1595. return 20;
  1596. }
  1597.  
  1598. @Override
  1599. public Optional<Graphic> startGraphic() {
  1600. return Optional.of(new Graphic(155, GraphicHeight.MIDDLE));
  1601. }
  1602.  
  1603. @Override
  1604. public int baseExperience() {
  1605. return 42;
  1606. }
  1607.  
  1608. @Override
  1609. public Optional<Item[]> equipmentRequired(Player player) {
  1610. return Optional.empty();
  1611. }
  1612.  
  1613. @Override
  1614. public Optional<Item[]> itemsRequired(Player player) {
  1615. return Optional.of(new Item[] { new Item(556, 5), new Item(565, 1), new Item(554, 7) });
  1616. }
  1617.  
  1618. @Override
  1619. public int levelRequired() {
  1620. return 75;
  1621. }
  1622.  
  1623. @Override
  1624. public int spellId() {
  1625. return 1189;
  1626. }
  1627. }),
  1628. ENTANGLE(new CombatEffectSpell() {
  1629. @Override
  1630. public Optional<Animation> castAnimation() {
  1631. return Optional.of(new Animation(710));
  1632. }
  1633.  
  1634. @Override
  1635. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1636. return Optional.of(new Projectile(cast, castOn, 178, 0, 20, 43, 31, 0));
  1637. }
  1638.  
  1639. @Override
  1640. public void spellEffect(Character cast, Character castOn) {
  1641. if (!castOn.getCombat().getFreezeTimer().finished()) {
  1642. if (cast.isPlayer()) {
  1643. ((Player) cast).getPacketSender().sendMessage(
  1644. "The spell has no effect because they are already frozen.");
  1645. }
  1646. return;
  1647. }
  1648.  
  1649. CombatFactory.freeze(castOn, 15);
  1650. }
  1651.  
  1652. @Override
  1653. public Optional<Graphic> endGraphic() {
  1654. return Optional.of(new Graphic(179, GraphicHeight.HIGH));
  1655. }
  1656.  
  1657. @Override
  1658. public Optional<Graphic> startGraphic() {
  1659. return Optional.of(new Graphic(177, GraphicHeight.HIGH));
  1660. }
  1661.  
  1662. @Override
  1663. public int baseExperience() {
  1664. return 91;
  1665. }
  1666.  
  1667. @Override
  1668. public Optional<Item[]> itemsRequired(Player player) {
  1669. return Optional.of(new Item[] { new Item(555, 5), new Item(557, 5), new Item(561, 4) });
  1670. }
  1671.  
  1672. @Override
  1673. public int levelRequired() {
  1674. return 79;
  1675. }
  1676.  
  1677. @Override
  1678. public int spellId() {
  1679. return 1592;
  1680. }
  1681. }),
  1682. STUN(new CombatEffectSpell() {
  1683. @Override
  1684. public Optional<Animation> castAnimation() {
  1685. return Optional.of(new Animation(729));
  1686. }
  1687.  
  1688. @Override
  1689. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1690. return Optional.of(new Projectile(cast, castOn, 174, 0, 20, 43, 31, 0));
  1691. }
  1692.  
  1693. @Override
  1694. public void spellEffect(Character cast, Character castOn) {
  1695. if (castOn.isPlayer()) {
  1696. Player player = (Player) castOn;
  1697.  
  1698. if (player.getSkillManager().getCurrentLevel(Skill.ATTACK) < player.getSkillManager().getMaxLevel(Skill.ATTACK)) {
  1699. if (cast.isPlayer()) {
  1700. ((Player) cast).getPacketSender().sendMessage(
  1701. "The spell has no effect because the player is already weakened.");
  1702. }
  1703. return;
  1704. }
  1705.  
  1706. int decrease = (int) (0.10 * (player.getSkillManager().getCurrentLevel(Skill.ATTACK)));
  1707. player.getSkillManager().setCurrentLevel(Skill.ATTACK, player.getSkillManager().getCurrentLevel(Skill.ATTACK) - decrease);
  1708. player.getSkillManager().updateSkill(Skill.ATTACK);
  1709. player.getPacketSender().sendMessage(
  1710. "You feel slightly weakened.");
  1711. }/* else if (castOn.isNpc()) {
  1712. NPC npc = (NPC) castOn;
  1713.  
  1714. if (npc.getDefenceWeakened()[0] || npc.getStrengthWeakened()[0]) {
  1715. if (cast.isPlayer()) {
  1716. ((Player) cast).getPacketSender().sendMessage(
  1717. "The spell has no effect because the NPC is already weakened.");
  1718. }
  1719. return;
  1720. }
  1721.  
  1722. npc.getStrengthWeakened()[0] = true;
  1723. }*/
  1724. }
  1725.  
  1726. @Override
  1727. public Optional<Graphic> endGraphic() {
  1728. return Optional.of(new Graphic(107));
  1729. }
  1730.  
  1731. @Override
  1732. public Optional<Graphic> startGraphic() {
  1733. return Optional.of(new Graphic(173, 6553600));
  1734. }
  1735.  
  1736. @Override
  1737. public int baseExperience() {
  1738. return 90;
  1739. }
  1740.  
  1741. @Override
  1742. public Optional<Item[]> itemsRequired(Player player) {
  1743. return Optional.of(new Item[] { new Item(557, 12), new Item(555, 12), new Item(556, 1) });
  1744. }
  1745.  
  1746. @Override
  1747. public int levelRequired() {
  1748. return 80;
  1749. }
  1750.  
  1751. @Override
  1752. public int spellId() {
  1753. return 1562;
  1754. }
  1755. }),
  1756. TELEBLOCK(new CombatEffectSpell() {
  1757. @Override
  1758. public Optional<Animation> castAnimation() {
  1759. return Optional.of(new Animation(1819));
  1760. }
  1761.  
  1762. @Override
  1763. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1764. return Optional.of(new Projectile(cast, castOn, 344, 0, 20, 43, 31, 0));
  1765. }
  1766.  
  1767. @Override
  1768. public void spellEffect(Character cast, Character castOn) {
  1769. if (castOn.isPlayer()) {
  1770. Player player = (Player) castOn;
  1771.  
  1772. if (!player.getCombat().getTeleBlockTimer().finished()) {
  1773. if (cast.isPlayer()) {
  1774. ((Player) cast).getPacketSender().sendMessage(
  1775. "The spell has no effect because the player is already teleblocked.");
  1776. }
  1777. return;
  1778. }
  1779.  
  1780. final int seconds = player.getPrayerActive()[PrayerHandler.PROTECT_FROM_MAGIC] ? 300 : 600;
  1781.  
  1782. player.getCombat().getTeleBlockTimer().start(seconds);
  1783. player.getPacketSender().sendEffectTimer(seconds, EffectTimer.TELE_BLOCK)
  1784. .sendMessage("You have just been teleblocked!");
  1785.  
  1786. } else if (castOn.isNpc()) {
  1787. if (cast.isPlayer()) {
  1788. ((Player) cast).getPacketSender().sendMessage(
  1789. "Your spell has no effect on this target.");
  1790. }
  1791. }
  1792. }
  1793.  
  1794. @Override
  1795. public Optional<Graphic> endGraphic() {
  1796. return Optional.of(new Graphic(345));
  1797. }
  1798.  
  1799. @Override
  1800. public Optional<Graphic> startGraphic() {
  1801. return Optional.empty();
  1802. }
  1803.  
  1804. @Override
  1805. public int baseExperience() {
  1806. return 65;
  1807. }
  1808.  
  1809. @Override
  1810. public Optional<Item[]> itemsRequired(Player player) {
  1811. return Optional.of(new Item[] { new Item(563, 1), new Item(562, 1), new Item(560, 1) });
  1812. }
  1813.  
  1814. @Override
  1815. public int levelRequired() {
  1816. return 85;
  1817. }
  1818.  
  1819. @Override
  1820. public int spellId() {
  1821. return 12445;
  1822. }
  1823. }),
  1824. SMOKE_RUSH(new CombatAncientSpell() {
  1825.  
  1826. @Override
  1827. public void spellEffect(Character cast, Character castOn, int damage) {
  1828. CombatFactory.poisonEntity(castOn, PoisonType.MILD);
  1829. }
  1830.  
  1831. @Override
  1832. public int spellRadius() {
  1833. return 0;
  1834. }
  1835.  
  1836. @Override
  1837. public Optional<Animation> castAnimation() {
  1838. return Optional.of(new Animation(1978));
  1839. }
  1840.  
  1841. @Override
  1842. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1843. return Optional.of(new Projectile(cast, castOn, 384, 0, 20, 43, 31, 0));
  1844. }
  1845.  
  1846. @Override
  1847. public Optional<Graphic> endGraphic() {
  1848. return Optional.of(new Graphic(385));
  1849. }
  1850.  
  1851. @Override
  1852. public int maximumHit() {
  1853. return 13;
  1854. }
  1855.  
  1856. @Override
  1857. public Optional<Graphic> startGraphic() {
  1858. return Optional.empty();
  1859. }
  1860.  
  1861. @Override
  1862. public int baseExperience() {
  1863. return 30;
  1864. }
  1865.  
  1866. @Override
  1867. public Optional<Item[]> itemsRequired(Player player) {
  1868. return Optional.of(new Item[] { new Item(556, 1), new Item(554, 1), new Item(562, 2), new Item(560, 2) });
  1869. }
  1870.  
  1871. @Override
  1872. public int levelRequired() {
  1873. return 50;
  1874. }
  1875.  
  1876. @Override
  1877. public int spellId() {
  1878. return 12939;
  1879. }
  1880. }),
  1881. SHADOW_RUSH(new CombatAncientSpell() {
  1882. @Override
  1883. public void spellEffect(Character cast, Character castOn, int damage) {
  1884. if (castOn.isPlayer()) {
  1885. Player player = (Player) castOn;
  1886.  
  1887. if (player.getSkillManager().getCurrentLevel(Skill.ATTACK) < player.getSkillManager().getMaxLevel(Skill.ATTACK)) {
  1888. return;
  1889. }
  1890.  
  1891. int decrease = (int) (0.1 * (player.getSkillManager().getCurrentLevel(Skill.ATTACK)));
  1892. player.getSkillManager().setCurrentLevel(Skill.ATTACK, player.getSkillManager().getCurrentLevel(Skill.ATTACK) - decrease);
  1893. player.getSkillManager().updateSkill(Skill.ATTACK);
  1894. }
  1895. }
  1896.  
  1897. @Override
  1898. public int spellRadius() {
  1899. return 0;
  1900. }
  1901.  
  1902. @Override
  1903. public Optional<Animation> castAnimation() {
  1904. return Optional.of(new Animation(1978));
  1905. }
  1906.  
  1907. @Override
  1908. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1909. return Optional.of(new Projectile(cast, castOn, 378, 0, 20, 43, 31, 0));
  1910. }
  1911.  
  1912. @Override
  1913. public Optional<Graphic> endGraphic() {
  1914. return Optional.of(new Graphic(379));
  1915. }
  1916.  
  1917. @Override
  1918. public int maximumHit() {
  1919. return 14;
  1920. }
  1921.  
  1922. @Override
  1923. public Optional<Graphic> startGraphic() {
  1924. return Optional.empty();
  1925. }
  1926.  
  1927. @Override
  1928. public int baseExperience() {
  1929. return 31;
  1930. }
  1931.  
  1932. @Override
  1933. public Optional<Item[]> itemsRequired(Player player) {
  1934. return Optional.of(new Item[] { new Item(556, 1), new Item(566, 1), new Item(562, 2), new Item(560, 2) });
  1935. }
  1936.  
  1937. @Override
  1938. public int levelRequired() {
  1939. return 52;
  1940. }
  1941.  
  1942. @Override
  1943. public int spellId() {
  1944. return 12987;
  1945. }
  1946. }),
  1947. BLOOD_RUSH(new CombatAncientSpell() {
  1948. @Override
  1949. public void spellEffect(Character cast, Character castOn, int damage) {
  1950. cast.heal((int) (damage * 0.10));
  1951. }
  1952.  
  1953. @Override
  1954. public int spellRadius() {
  1955. return 0;
  1956. }
  1957.  
  1958. @Override
  1959. public Optional<Animation> castAnimation() {
  1960. return Optional.of(new Animation(1978));
  1961. }
  1962.  
  1963. @Override
  1964. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  1965. return Optional.of(new Projectile(cast, castOn, 372, 0, 20, 43, 31, 0));
  1966. }
  1967.  
  1968. @Override
  1969. public Optional<Graphic> endGraphic() {
  1970. return Optional.of(new Graphic(373));
  1971. }
  1972.  
  1973. @Override
  1974. public int maximumHit() {
  1975. return 15;
  1976. }
  1977.  
  1978. @Override
  1979. public Optional<Graphic> startGraphic() {
  1980. return Optional.empty();
  1981. }
  1982.  
  1983. @Override
  1984. public int baseExperience() {
  1985. return 33;
  1986. }
  1987.  
  1988. @Override
  1989. public Optional<Item[]> itemsRequired(Player player) {
  1990. return Optional.of(new Item[] { new Item(565, 1), new Item(562, 2), new Item(560, 2) });
  1991. }
  1992.  
  1993. @Override
  1994. public int levelRequired() {
  1995. return 56;
  1996. }
  1997.  
  1998. @Override
  1999. public int spellId() {
  2000. return 12901;
  2001. }
  2002. }),
  2003. ICE_RUSH(new CombatAncientSpell() {
  2004. @Override
  2005. public void spellEffect(Character cast, Character castOn, int damage) {
  2006. CombatFactory.freeze(castOn, 5);
  2007. }
  2008.  
  2009. @Override
  2010. public int spellRadius() {
  2011. return 0;
  2012. }
  2013.  
  2014. @Override
  2015. public Optional<Animation> castAnimation() {
  2016. return Optional.of(new Animation(1978));
  2017. }
  2018.  
  2019. @Override
  2020. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2021. return Optional.of(new Projectile(cast, castOn, 360, 0, 20, 43, 31, 0));
  2022. }
  2023.  
  2024. @Override
  2025. public Optional<Graphic> endGraphic() {
  2026. return Optional.of(new Graphic(361));
  2027. }
  2028.  
  2029. @Override
  2030. public int maximumHit() {
  2031. return 18;
  2032. }
  2033.  
  2034. @Override
  2035. public Optional<Graphic> startGraphic() {
  2036. return Optional.empty();
  2037. }
  2038.  
  2039. @Override
  2040. public int baseExperience() {
  2041. return 34;
  2042. }
  2043.  
  2044. @Override
  2045. public Optional<Item[]> itemsRequired(Player player) {
  2046. return Optional.of(new Item[] { new Item(555, 2), new Item(562, 2), new Item(560, 2) });
  2047. }
  2048.  
  2049. @Override
  2050. public int levelRequired() {
  2051. return 58;
  2052. }
  2053.  
  2054. @Override
  2055. public int spellId() {
  2056. return 12861;
  2057. }
  2058. }),
  2059. SMOKE_BURST(new CombatAncientSpell() {
  2060. @Override
  2061. public void spellEffect(Character cast, Character castOn, int damage) {
  2062. CombatFactory.poisonEntity(castOn, PoisonType.MILD);
  2063. }
  2064.  
  2065. @Override
  2066. public int spellRadius() {
  2067. return 1;
  2068. }
  2069.  
  2070. @Override
  2071. public Optional<Animation> castAnimation() {
  2072. return Optional.of(new Animation(1979));
  2073. }
  2074.  
  2075. @Override
  2076. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2077. return Optional.empty();
  2078. }
  2079.  
  2080. @Override
  2081. public Optional<Graphic> endGraphic() {
  2082. return Optional.of(new Graphic(389));
  2083. }
  2084.  
  2085. @Override
  2086. public int maximumHit() {
  2087. return 13;
  2088. }
  2089.  
  2090. @Override
  2091. public Optional<Graphic> startGraphic() {
  2092. return Optional.empty();
  2093. }
  2094.  
  2095. @Override
  2096. public int baseExperience() {
  2097. return 36;
  2098. }
  2099.  
  2100. @Override
  2101. public Optional<Item[]> itemsRequired(Player player) {
  2102. return Optional.of(new Item[] { new Item(556, 2), new Item(554, 2), new Item(562, 4), new Item(560, 2) });
  2103. }
  2104.  
  2105. @Override
  2106. public int levelRequired() {
  2107. return 62;
  2108. }
  2109.  
  2110. @Override
  2111. public int spellId() {
  2112. return 12963;
  2113. }
  2114. }),
  2115. SHADOW_BURST(new CombatAncientSpell() {
  2116. @Override
  2117. public void spellEffect(Character cast, Character castOn, int damage) {
  2118. if (castOn.isPlayer()) {
  2119. Player player = (Player) castOn;
  2120.  
  2121. if (player.getSkillManager().getCurrentLevel(Skill.ATTACK) < player.getSkillManager().getMaxLevel(Skill.ATTACK)) {
  2122. return;
  2123. }
  2124.  
  2125. int decrease = (int) (0.1 * (player.getSkillManager().getCurrentLevel(Skill.ATTACK)));
  2126. player.getSkillManager().setCurrentLevel(Skill.ATTACK, player.getSkillManager().getCurrentLevel(Skill.ATTACK) - decrease);
  2127. player.getSkillManager().updateSkill(Skill.ATTACK);
  2128. }
  2129. }
  2130.  
  2131. @Override
  2132. public int spellRadius() {
  2133. return 1;
  2134. }
  2135.  
  2136. @Override
  2137. public Optional<Animation> castAnimation() {
  2138. return Optional.of(new Animation(1979));
  2139. }
  2140.  
  2141. @Override
  2142. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2143. return Optional.empty();
  2144. }
  2145.  
  2146. @Override
  2147. public Optional<Graphic> endGraphic() {
  2148. return Optional.of(new Graphic(382));
  2149. }
  2150.  
  2151. @Override
  2152. public int maximumHit() {
  2153. return 18;
  2154. }
  2155.  
  2156. @Override
  2157. public Optional<Graphic> startGraphic() {
  2158. return Optional.empty();
  2159. }
  2160.  
  2161. @Override
  2162. public int baseExperience() {
  2163. return 37;
  2164. }
  2165.  
  2166. @Override
  2167. public Optional<Item[]> itemsRequired(Player player) {
  2168. return Optional.of(new Item[] { new Item(556, 1), new Item(566, 2), new Item(562, 4), new Item(560, 2) });
  2169. }
  2170.  
  2171. @Override
  2172. public int levelRequired() {
  2173. return 64;
  2174. }
  2175.  
  2176. @Override
  2177. public int spellId() {
  2178. return 13011;
  2179. }
  2180. }),
  2181. BLOOD_BURST(new CombatAncientSpell() {
  2182. @Override
  2183. public void spellEffect(Character cast, Character castOn, int damage) {
  2184. cast.heal((int) (damage * 0.15));
  2185. }
  2186.  
  2187. @Override
  2188. public int spellRadius() {
  2189. return 1;
  2190. }
  2191.  
  2192. @Override
  2193. public Optional<Animation> castAnimation() {
  2194. return Optional.of(new Animation(1979));
  2195. }
  2196.  
  2197. @Override
  2198. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2199. return Optional.empty();
  2200. }
  2201.  
  2202. @Override
  2203. public Optional<Graphic> endGraphic() {
  2204. return Optional.of(new Graphic(376));
  2205. }
  2206.  
  2207. @Override
  2208. public int maximumHit() {
  2209. return 21;
  2210. }
  2211.  
  2212. @Override
  2213. public Optional<Graphic> startGraphic() {
  2214. return Optional.empty();
  2215. }
  2216.  
  2217. @Override
  2218. public int baseExperience() {
  2219. return 39;
  2220. }
  2221.  
  2222. @Override
  2223. public Optional<Item[]> itemsRequired(Player player) {
  2224. return Optional.of(new Item[] { new Item(565, 2), new Item(562, 4), new Item(560, 2) });
  2225. }
  2226.  
  2227. @Override
  2228. public int levelRequired() {
  2229. return 68;
  2230. }
  2231.  
  2232. @Override
  2233. public int spellId() {
  2234. return 12919;
  2235. }
  2236. }),
  2237. ICE_BURST(new CombatAncientSpell() {
  2238. @Override
  2239. public void spellEffect(Character cast, Character castOn, int damage) {
  2240. CombatFactory.freeze(castOn, 10);
  2241. }
  2242.  
  2243. @Override
  2244. public int spellRadius() {
  2245. return 1;
  2246. }
  2247.  
  2248. @Override
  2249. public Optional<Animation> castAnimation() {
  2250. return Optional.of(new Animation(1979));
  2251. }
  2252.  
  2253. @Override
  2254. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2255. return Optional.empty();
  2256. }
  2257.  
  2258. @Override
  2259. public Optional<Graphic> endGraphic() {
  2260. return Optional.of(new Graphic(363));
  2261. }
  2262.  
  2263. @Override
  2264. public int maximumHit() {
  2265. return 22;
  2266. }
  2267.  
  2268. @Override
  2269. public Optional<Graphic> startGraphic() {
  2270. return Optional.empty();
  2271. }
  2272.  
  2273. @Override
  2274. public int baseExperience() {
  2275. return 40;
  2276. }
  2277.  
  2278. @Override
  2279. public Optional<Item[]> itemsRequired(Player player) {
  2280. return Optional.of(new Item[] { new Item(555, 4), new Item(562, 4), new Item(560, 2) });
  2281. }
  2282.  
  2283. @Override
  2284. public int levelRequired() {
  2285. return 70;
  2286. }
  2287.  
  2288. @Override
  2289. public int spellId() {
  2290. return 12881;
  2291. }
  2292. }),
  2293. SMOKE_BLITZ(new CombatAncientSpell() {
  2294. @Override
  2295. public void spellEffect(Character cast, Character castOn, int damage) {
  2296. CombatFactory.poisonEntity(castOn, PoisonType.EXTRA);
  2297. }
  2298.  
  2299. @Override
  2300. public int spellRadius() {
  2301. return 0;
  2302. }
  2303.  
  2304. @Override
  2305. public Optional<Animation> castAnimation() {
  2306. return Optional.of(new Animation(1978));
  2307. }
  2308.  
  2309. @Override
  2310. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2311. return Optional.of(new Projectile(cast, castOn, 386, 0, 20, 43, 31, 0));
  2312. }
  2313.  
  2314. @Override
  2315. public Optional<Graphic> endGraphic() {
  2316. return Optional.of(new Graphic(387));
  2317. }
  2318.  
  2319. @Override
  2320. public int maximumHit() {
  2321. return 23;
  2322. }
  2323.  
  2324. @Override
  2325. public Optional<Graphic> startGraphic() {
  2326. return Optional.empty();
  2327. }
  2328.  
  2329. @Override
  2330. public int baseExperience() {
  2331. return 42;
  2332. }
  2333.  
  2334. @Override
  2335. public Optional<Item[]> itemsRequired(Player player) {
  2336. return Optional.of(new Item[] { new Item(556, 2), new Item(554, 2), new Item(565, 2), new Item(560, 2) });
  2337. }
  2338.  
  2339. @Override
  2340. public int levelRequired() {
  2341. return 74;
  2342. }
  2343.  
  2344. @Override
  2345. public int spellId() {
  2346. return 12951;
  2347. }
  2348. }),
  2349. SHADOW_BLITZ(new CombatAncientSpell() {
  2350. @Override
  2351. public void spellEffect(Character cast, Character castOn, int damage) {
  2352. if (castOn.isPlayer()) {
  2353. Player player = (Player) castOn;
  2354.  
  2355. if (player.getSkillManager().getCurrentLevel(Skill.ATTACK) < player.getSkillManager().getMaxLevel(Skill.ATTACK)) {
  2356. return;
  2357. }
  2358.  
  2359. int decrease = (int) (0.15 * (player.getSkillManager().getCurrentLevel(Skill.ATTACK)));
  2360. player.getSkillManager().setCurrentLevel(Skill.ATTACK, player.getSkillManager().getCurrentLevel(Skill.ATTACK) - decrease);
  2361. player.getSkillManager().updateSkill(Skill.ATTACK);
  2362. }
  2363. }
  2364.  
  2365. @Override
  2366. public int spellRadius() {
  2367. return 0;
  2368. }
  2369.  
  2370. @Override
  2371. public Optional<Animation> castAnimation() {
  2372. return Optional.of(new Animation(1978));
  2373. }
  2374.  
  2375. @Override
  2376. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2377. return Optional.of(new Projectile(cast, castOn, 380, 0, 20, 43, 31, 0));
  2378. }
  2379.  
  2380. @Override
  2381. public Optional<Graphic> endGraphic() {
  2382. return Optional.of(new Graphic(381));
  2383. }
  2384.  
  2385. @Override
  2386. public int maximumHit() {
  2387. return 24;
  2388. }
  2389.  
  2390. @Override
  2391. public Optional<Graphic> startGraphic() {
  2392. return Optional.empty();
  2393. }
  2394.  
  2395. @Override
  2396. public int baseExperience() {
  2397. return 43;
  2398. }
  2399.  
  2400. @Override
  2401. public Optional<Item[]> itemsRequired(Player player) {
  2402. return Optional.of(new Item[] { new Item(556, 2), new Item(566, 2), new Item(565, 2), new Item(560, 2) });
  2403. }
  2404.  
  2405. @Override
  2406. public int levelRequired() {
  2407. return 76;
  2408. }
  2409.  
  2410. @Override
  2411. public int spellId() {
  2412. return 12999;
  2413. }
  2414. }),
  2415. BLOOD_BLITZ(new CombatAncientSpell() {
  2416. @Override
  2417. public void spellEffect(Character cast, Character castOn, int damage) {
  2418. cast.heal((int) (damage * 0.20));
  2419. }
  2420.  
  2421. @Override
  2422. public int spellRadius() {
  2423. return 0;
  2424. }
  2425.  
  2426. @Override
  2427. public Optional<Animation> castAnimation() {
  2428. return Optional.of(new Animation(1978));
  2429. }
  2430.  
  2431. @Override
  2432. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2433. return Optional.of(new Projectile(cast, castOn, 374, 0, 20, 43, 31, 0));
  2434. }
  2435.  
  2436. @Override
  2437. public Optional<Graphic> endGraphic() {
  2438. return Optional.of(new Graphic(375));
  2439. }
  2440.  
  2441. @Override
  2442. public int maximumHit() {
  2443. return 25;
  2444. }
  2445.  
  2446. @Override
  2447. public Optional<Graphic> startGraphic() {
  2448. return Optional.empty();
  2449. }
  2450.  
  2451. @Override
  2452. public int baseExperience() {
  2453. return 45;
  2454. }
  2455.  
  2456. @Override
  2457. public Optional<Item[]> itemsRequired(Player player) {
  2458. return Optional.of(new Item[] { new Item(565, 4), new Item(560, 2) });
  2459. }
  2460.  
  2461. @Override
  2462. public int levelRequired() {
  2463. return 80;
  2464. }
  2465.  
  2466. @Override
  2467. public int spellId() {
  2468. return 12911;
  2469. }
  2470. }),
  2471. ICE_BLITZ(new CombatAncientSpell() {
  2472. @Override
  2473. public void spellEffect(Character cast, Character castOn, int damage) {
  2474. CombatFactory.freeze(castOn, 15);
  2475. }
  2476.  
  2477. @Override
  2478. public int spellRadius() {
  2479. return 0;
  2480. }
  2481.  
  2482. @Override
  2483. public Optional<Animation> castAnimation() {
  2484. return Optional.of(new Animation(1978));
  2485. }
  2486.  
  2487. @Override
  2488. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2489. return Optional.empty();
  2490. }
  2491.  
  2492. @Override
  2493. public Optional<Graphic> endGraphic() {
  2494. return Optional.of(new Graphic(367));
  2495. }
  2496.  
  2497. @Override
  2498. public int maximumHit() {
  2499. return 26;
  2500. }
  2501.  
  2502. @Override
  2503. public Optional<Graphic> startGraphic() {
  2504. return Optional.of(new Graphic(366, 6553600));
  2505. }
  2506.  
  2507. @Override
  2508. public int baseExperience() {
  2509. return 46;
  2510. }
  2511.  
  2512. @Override
  2513. public Optional<Item[]> itemsRequired(Player player) {
  2514. return Optional.of(new Item[] { new Item(555, 3), new Item(565, 2), new Item(560, 2) });
  2515. }
  2516.  
  2517. @Override
  2518. public int levelRequired() {
  2519. return 82;
  2520. }
  2521.  
  2522. @Override
  2523. public int spellId() {
  2524. return 12871;
  2525. }
  2526. }),
  2527. SMOKE_BARRAGE(new CombatAncientSpell() {
  2528. @Override
  2529. public void spellEffect(Character cast, Character castOn, int damage) {
  2530. CombatFactory.poisonEntity(castOn, PoisonType.SUPER);
  2531. }
  2532.  
  2533. @Override
  2534. public int spellRadius() {
  2535. return 1;
  2536. }
  2537.  
  2538. @Override
  2539. public Optional<Animation> castAnimation() {
  2540. return Optional.of(new Animation(1979));
  2541. }
  2542.  
  2543. @Override
  2544. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2545. return Optional.empty();
  2546. }
  2547.  
  2548. @Override
  2549. public Optional<Graphic> endGraphic() {
  2550. return Optional.of(new Graphic(391));
  2551. }
  2552.  
  2553. @Override
  2554. public int maximumHit() {
  2555. return 27;
  2556. }
  2557.  
  2558. @Override
  2559. public Optional<Graphic> startGraphic() {
  2560. return Optional.empty();
  2561. }
  2562.  
  2563. @Override
  2564. public int baseExperience() {
  2565. return 48;
  2566. }
  2567.  
  2568. @Override
  2569. public Optional<Item[]> itemsRequired(Player player) {
  2570. return Optional.of(new Item[] { new Item(556, 4), new Item(554, 4), new Item(565, 2), new Item(560, 4) });
  2571. }
  2572.  
  2573. @Override
  2574. public int levelRequired() {
  2575. return 86;
  2576. }
  2577.  
  2578. @Override
  2579. public int spellId() {
  2580. return 12975;
  2581. }
  2582. }),
  2583. SHADOW_BARRAGE(new CombatAncientSpell() {
  2584. @Override
  2585. public void spellEffect(Character cast, Character castOn, int damage) {
  2586. if (castOn.isPlayer()) {
  2587. Player player = (Player) castOn;
  2588.  
  2589. if (player.getSkillManager().getCurrentLevel(Skill.ATTACK) < player.getSkillManager().getMaxLevel(Skill.ATTACK)) {
  2590. return;
  2591. }
  2592.  
  2593. int decrease = (int) (0.15 * (player.getSkillManager().getCurrentLevel(Skill.ATTACK)));
  2594. player.getSkillManager().setCurrentLevel(Skill.ATTACK, player.getSkillManager().getCurrentLevel(Skill.ATTACK) - decrease);
  2595. player.getSkillManager().updateSkill(Skill.ATTACK);
  2596. }
  2597. }
  2598.  
  2599. @Override
  2600. public int spellRadius() {
  2601. return 1;
  2602. }
  2603.  
  2604. @Override
  2605. public Optional<Animation> castAnimation() {
  2606. return Optional.of(new Animation(1979));
  2607. }
  2608.  
  2609. @Override
  2610. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2611. return Optional.empty();
  2612. }
  2613.  
  2614. @Override
  2615. public Optional<Graphic> endGraphic() {
  2616. return Optional.of(new Graphic(383));
  2617. }
  2618.  
  2619. @Override
  2620. public int maximumHit() {
  2621. return 28;
  2622. }
  2623.  
  2624. @Override
  2625. public Optional<Graphic> startGraphic() {
  2626. return Optional.empty();
  2627. }
  2628.  
  2629. @Override
  2630. public int baseExperience() {
  2631. return 49;
  2632. }
  2633.  
  2634. @Override
  2635. public Optional<Item[]> itemsRequired(Player player) {
  2636. return Optional.of(new Item[] { new Item(556, 4), new Item(566, 3), new Item(565, 2), new Item(560, 4) });
  2637. }
  2638.  
  2639. @Override
  2640. public int levelRequired() {
  2641. return 88;
  2642. }
  2643.  
  2644. @Override
  2645. public int spellId() {
  2646. return 13023;
  2647. }
  2648. }),
  2649. BLOOD_BARRAGE(new CombatAncientSpell() {
  2650. @Override
  2651. public void spellEffect(Character cast, Character castOn, int damage) {
  2652. cast.heal((int) (damage * 0.20));
  2653. }
  2654.  
  2655. @Override
  2656. public int spellRadius() {
  2657. return 1;
  2658. }
  2659.  
  2660. @Override
  2661. public Optional<Animation> castAnimation() {
  2662. return Optional.of(new Animation(1979));
  2663. }
  2664.  
  2665. @Override
  2666. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2667. return Optional.empty();
  2668. }
  2669.  
  2670. @Override
  2671. public Optional<Graphic> endGraphic() {
  2672. return Optional.of(new Graphic(377));
  2673. }
  2674.  
  2675. @Override
  2676. public int maximumHit() {
  2677. return 29;
  2678. }
  2679.  
  2680. @Override
  2681. public Optional<Graphic> startGraphic() {
  2682. return Optional.empty();
  2683. }
  2684.  
  2685. @Override
  2686. public int baseExperience() {
  2687. return 51;
  2688. }
  2689.  
  2690. @Override
  2691. public Optional<Item[]> itemsRequired(Player player) {
  2692. return Optional.of(new Item[] { new Item(560, 4), new Item(566, 1), new Item(565, 4) });
  2693. }
  2694.  
  2695. @Override
  2696. public int levelRequired() {
  2697. return 92;
  2698. }
  2699.  
  2700. @Override
  2701. public int spellId() {
  2702. return 12929;
  2703. }
  2704. }),
  2705. ICE_BARRAGE(new CombatAncientSpell() {
  2706. @Override
  2707. public void spellEffect(Character cast, Character castOn, int damage) {
  2708. CombatFactory.freeze(castOn, 20);
  2709. }
  2710.  
  2711. @Override
  2712. public int spellRadius() {
  2713. return 1;
  2714. }
  2715.  
  2716. @Override
  2717. public Optional<Animation> castAnimation() {
  2718. return Optional.of(new Animation(1979));
  2719. }
  2720.  
  2721. @Override
  2722. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2723. return Optional.empty();
  2724. }
  2725.  
  2726. @Override
  2727. public Optional<Graphic> endGraphic() {
  2728. return Optional.of(new Graphic(369));
  2729. }
  2730.  
  2731. @Override
  2732. public int maximumHit() {
  2733. return 30;
  2734. }
  2735.  
  2736. @Override
  2737. public Optional<Graphic> startGraphic() {
  2738. return Optional.empty();
  2739. }
  2740.  
  2741. @Override
  2742. public int baseExperience() {
  2743. return 52;
  2744. }
  2745.  
  2746. @Override
  2747. public Optional<Item[]> itemsRequired(Player player) {
  2748. return Optional.of(new Item[] { new Item(555, 6), new Item(565, 2), new Item(560, 4) });
  2749. }
  2750.  
  2751. @Override
  2752. public int levelRequired() {
  2753. return 94;
  2754. }
  2755.  
  2756. @Override
  2757. public int spellId() {
  2758. return 12891;
  2759. }
  2760. }),
  2761. TRIDENT_OF_THE_SEAS(new CombatNormalSpell() {
  2762. @Override
  2763. public Optional<Animation> castAnimation() {
  2764. return Optional.of(new Animation(1167));
  2765. }
  2766.  
  2767. @Override
  2768. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2769. return Optional.of(new Projectile(cast, castOn, 1252, 0, 20, 43, 31, 0));
  2770. }
  2771.  
  2772. @Override
  2773. public Optional<Graphic> endGraphic() {
  2774. return Optional.of(new Graphic(1253));
  2775. }
  2776.  
  2777. @Override
  2778. public int maximumHit() {
  2779. return 20;
  2780. }
  2781.  
  2782. @Override
  2783. public Optional<Graphic> startGraphic() {
  2784. return Optional.of(new Graphic(1251, GraphicHeight.HIGH));
  2785. }
  2786.  
  2787. @Override
  2788. public int baseExperience() {
  2789. return 50;
  2790. }
  2791.  
  2792. @Override
  2793. public Optional<Item[]> equipmentRequired(Player player) {
  2794. return Optional.empty();
  2795. }
  2796.  
  2797. @Override
  2798. public Optional<Item[]> itemsRequired(Player player) {
  2799. return Optional.empty();
  2800. }
  2801.  
  2802. @Override
  2803. public int levelRequired() {
  2804. return 75;
  2805. }
  2806.  
  2807. @Override
  2808. public int spellId() {
  2809. return 1;
  2810. }
  2811. }),
  2812. TRIDENT_OF_THE_SWAMP(new CombatNormalSpell() {
  2813. @Override
  2814. public Optional<Animation> castAnimation() {
  2815. return Optional.of(new Animation(1167));
  2816. }
  2817.  
  2818. @Override
  2819. public Optional<Projectile> castProjectile(Character cast, Character castOn) {
  2820. return Optional.of(new Projectile(cast, castOn, 1040, 0, 20, 43, 31, 0));
  2821. }
  2822.  
  2823. @Override
  2824. public Optional<Graphic> endGraphic() {
  2825. return Optional.of(new Graphic(1042));
  2826. }
  2827.  
  2828. @Override
  2829. public int maximumHit() {
  2830. return 20;
  2831. }
  2832.  
  2833. @Override
  2834. public Optional<Graphic> startGraphic() {
  2835. return Optional.of(new Graphic(665, GraphicHeight.HIGH));
  2836. }
  2837.  
  2838. @Override
  2839. public int baseExperience() {
  2840. return 50;
  2841. }
  2842.  
  2843. @Override
  2844. public Optional<Item[]> equipmentRequired(Player player) {
  2845. return Optional.empty();
  2846. }
  2847.  
  2848. @Override
  2849. public Optional<Item[]> itemsRequired(Player player) {
  2850. return Optional.empty();
  2851. }
  2852.  
  2853. @Override
  2854. public int levelRequired() {
  2855. return 75;
  2856. }
  2857.  
  2858. @Override
  2859. public int spellId() {
  2860. return 1;
  2861. }
  2862. });
  2863.  
  2864. /**
  2865. * The spell attached to this element.
  2866. */
  2867. private final CombatSpell spell;
  2868.  
  2869. /**
  2870. * Creates a new {@link CombatSpells}.
  2871. *
  2872. * @param spell
  2873. * the spell attached to this element.
  2874. */
  2875. private CombatSpells(CombatSpell spell) {
  2876. this.spell = spell;
  2877. }
  2878.  
  2879. /**
  2880. * Gets the spell attached to this element.
  2881. *
  2882. * @return the spell.
  2883. */
  2884. public final CombatSpell getSpell() {
  2885. return spell;
  2886. }
  2887.  
  2888. /**
  2889. * Gets the spell with a {@link CombatSpell#spellId()} of {@code id}.
  2890. *
  2891. * @param id
  2892. * the identification of the combat spell.
  2893. * @return the combat spell with that identification.
  2894. */
  2895. public static Optional<CombatSpells> getCombatSpells(int id) {
  2896. return Arrays.stream(CombatSpells.values()).filter(s -> s != null && s.getSpell().spellId() == id).findFirst();
  2897. }
  2898.  
  2899. public static CombatSpell getCombatSpell(int spellId) {
  2900. Optional<CombatSpells> spell = getCombatSpells(spellId);
  2901. if(spell.isPresent()) {
  2902. return spell.get().getSpell();
  2903. }
  2904. return null;
  2905. }
  2906. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement