Advertisement
Zavada

Untitled

Jan 14th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.21 KB | None | 0 0
  1. package com.vencillio.rs2.content.skill.magic;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. import com.vencillio.core.task.Task;
  7. import com.vencillio.core.task.TaskQueue;
  8. import com.vencillio.core.task.impl.TaskIdentifier;
  9. import com.vencillio.core.util.Utility;
  10. import com.vencillio.rs2.content.combat.impl.Attack;
  11. import com.vencillio.rs2.content.skill.Skills;
  12. import com.vencillio.rs2.content.skill.magic.spells.Charge;
  13. import com.vencillio.rs2.content.skill.magic.spells.HighAlchemy;
  14. import com.vencillio.rs2.content.skill.magic.spells.LowAlchemy;
  15. import com.vencillio.rs2.content.skill.magic.spells.SuperHeat;
  16. import com.vencillio.rs2.content.skill.magic.spells.Vengeance;
  17. import com.vencillio.rs2.entity.Animation;
  18. import com.vencillio.rs2.entity.Entity;
  19. import com.vencillio.rs2.entity.Graphic;
  20. import com.vencillio.rs2.entity.Location;
  21. import com.vencillio.rs2.entity.Projectile;
  22. import com.vencillio.rs2.entity.item.Item;
  23. import com.vencillio.rs2.entity.mob.Mob;
  24. import com.vencillio.rs2.entity.player.Player;
  25. import com.vencillio.rs2.entity.player.PlayerConstants;
  26. import com.vencillio.rs2.entity.player.controllers.ControllerManager;
  27. import com.vencillio.rs2.entity.player.net.out.impl.SendMessage;
  28. import com.vencillio.rs2.entity.player.net.out.impl.SendOpenTab;
  29. import com.vencillio.rs2.entity.player.net.out.impl.SendRemoveInterfaces;
  30. import com.vencillio.rs2.entity.player.net.out.impl.SendSidebarInterface;
  31. import com.vencillio.rs2.entity.player.net.out.impl.SendSound;
  32.  
  33. public class MagicSkill {
  34.  
  35. public static enum SpellBookTypes {
  36. MODERN,
  37. ANCIENT,
  38. LUNAR;
  39. }
  40.  
  41. public static enum TeleportTypes {
  42. SPELL_BOOK,
  43. TABLET,
  44. TELE_OTHER,
  45. FOUNTAIN_OF_RUNE,
  46. OBELISK;
  47. }
  48.  
  49. public static final String MAGIC_ITEM_KEY = "magicitem";
  50.  
  51. private final Player player;
  52. private SpellCasting spellCasting;
  53.  
  54. private boolean teleporting = false;
  55.  
  56. private boolean vengeanceActive = false;
  57.  
  58. private boolean ahrimEffectActive = false;
  59.  
  60. private byte dragonFireShieldCharges = 0;
  61.  
  62. private int magicBook = 0;
  63.  
  64. private long lastVengeance = 0L;
  65. private SpellBookTypes spellBookType = SpellBookTypes.MODERN;
  66.  
  67. private boolean dFireShieldEffect = false;
  68.  
  69. private long dFireShieldTime = 0L;
  70.  
  71. public static final int[][] AUTOCAST_BUTTONS = { { 84242, 21746 }, { 50091, 12891 }, { 50129, 12929 }, { 50223, 13023 }, { 50175, 12975 }, { 84241, 21745 }, { 50071, 12871 }, { 50111, 12911 }, { 50199, 12999 }, { 50151, 12951 }, { 86152, 22168 }, { 50081, 12881 }, { 50119, 12919 }, { 50221, 13011 }, { 50163, 12963 }, { 84220, 21744 }, { 50061, 12861 }, { 50101, 12901 }, { 50187, 12987 }, { 50139, 12939 }, { 6056, 1592 }, { 4165, 1189 }, { 4164, 1188 }, { 4161, 1185 }, { 4159, 1183 }, { 4168, 1192 }, { 4167, 1191 }, { 4166, 1190 }, { 4157, 1181 }, { 4153, 1177 }, { 6046, 1582 }, { 4151, 1175 }, { 4148, 1172 }, { 4145, 1169 }, { 4142, 1166 }, { 4139, 1163 }, { 6036, 1572 }, { 4136, 1160 }, { 4134, 1158 }, { 4132, 1156 }, { 4130, 1154 }, { 4128, 1152 } };
  72.  
  73. public MagicSkill(Player player) {
  74. this.player = player;
  75. spellCasting = new SpellCasting(player);
  76. }
  77.  
  78. public void activateVengeance() {
  79. vengeanceActive = true;
  80. lastVengeance = System.currentTimeMillis();
  81. }
  82.  
  83. public boolean canTeleport(TeleportTypes type) {
  84. if (player.isJailed()) {
  85. player.send(new SendMessage("You are jailed and can not do this!"));
  86. return false;
  87. }
  88. if (player.inWilderness() && player.getWildernessLevel() >= 20) {
  89. player.getClient().queueOutgoingPacket(new SendMessage("You can't teleport above level 20 Wilderness."));
  90. return false;
  91. }
  92. if (player.getController().equals(ControllerManager.FIGHT_PITS_CONTROLLER) || player.getController().equals(ControllerManager.FIGHT_PITS_WAITING_CONTROLLER)) {
  93. player.getClient().queueOutgoingPacket(new SendMessage("You can't teleport from here."));
  94. return false;
  95. }
  96. if (player.getController().equals(ControllerManager.PEST_WAITING_ROOM_CONTROLLER)) {
  97. player.getClient().queueOutgoingPacket(new SendMessage("Please Exit the boat via the ladder."));
  98. return false;
  99. } else if (player.getController().equals(ControllerManager.PEST_CONTROLLER)) {
  100. player.getClient().queueOutgoingPacket(new SendMessage("You can't teleport whilst in pest control."));
  101. player.getClient().queueOutgoingPacket(new SendMessage("If you wish to leave speak with the squire back at the boat."));
  102. return false;
  103. }
  104. if (player.inDuelArena() && player.getDueling().isDueling()) {
  105. return false;
  106. }
  107. if (player.isBusyNoInterfaceCheck()) {
  108. player.getClient().queueOutgoingPacket(new SendMessage("You can't teleport right now."));
  109. return false;
  110. }
  111. if (player.isTeleblocked()) {
  112. player.getClient().queueOutgoingPacket(new SendMessage("A magical force blocks you from teleporting."));
  113. return false;
  114. } else if (teleporting) {
  115. return false;
  116. } else if (!player.getController().canTeleport()) {
  117. player.getClient().queueOutgoingPacket(new SendMessage("You can't teleport right now."));
  118. return false;
  119. }
  120. return true;
  121. }
  122.  
  123. public boolean clickMagicButtons(int buttonId) {
  124. if (buttonId == 26010) {
  125. spellCasting.disableAutocast();
  126. Autocast.resetAutoCastInterface(player);
  127. player.updateCombatType();
  128. return true;
  129. }
  130.  
  131. for (int i = 0; i < AUTOCAST_BUTTONS.length; i++) {
  132. if (buttonId == AUTOCAST_BUTTONS[i][0]) {
  133. Autocast.setAutocast(player, AUTOCAST_BUTTONS[i][1]);
  134. return true;
  135. }
  136. }
  137. switch (buttonId) {
  138. case 75008:
  139. player.getClient().queueOutgoingPacket(new SendMessage("You don't have a house to teleport to!"));
  140. return true;
  141. case 4169:
  142. player.getMagic().getSpellCasting().cast(new Charge());
  143. return true;
  144. case 118098:
  145. player.getMagic().getSpellCasting().cast(new Vengeance());
  146. return true;
  147.  
  148. }
  149. return false;
  150. }
  151.  
  152. public boolean clickMagicItems(int id) {
  153. switch (id) {
  154. case 8007:
  155. if (canTeleport(TeleportTypes.TABLET)) {
  156. player.getInventory().remove(id, 1);
  157. teleport(3212, 3424, 0, TeleportTypes.TABLET);
  158. return true;
  159. }
  160. break;
  161. case 8008:
  162. if (canTeleport(TeleportTypes.TABLET)) {
  163. player.getInventory().remove(id, 1);
  164. teleport(3222, 3218, 0, TeleportTypes.TABLET);
  165. return true;
  166. }
  167. break;
  168. case 8009:
  169. if (canTeleport(TeleportTypes.TABLET)) {
  170. player.getInventory().remove(id, 1);
  171. teleport(2964, 3378, 0, TeleportTypes.TABLET);
  172. return true;
  173. }
  174. break;
  175. case 8010:
  176. if (canTeleport(TeleportTypes.TABLET)) {
  177. player.getInventory().remove(id, 1);
  178. teleport(2757, 3477, 0, TeleportTypes.TABLET);
  179. return true;
  180. }
  181. break;
  182. case 8011:
  183. if (canTeleport(TeleportTypes.TABLET)) {
  184. player.getInventory().remove(id, 1);
  185. teleport(2662, 3305, 0, TeleportTypes.TABLET);
  186. return true;
  187. }
  188. break;
  189. case 8012:
  190. if (canTeleport(TeleportTypes.TABLET)) {
  191. player.getInventory().remove(id, 1);
  192. teleport(2549, 3112, 0, TeleportTypes.TABLET);
  193. return true;
  194. }
  195. break;
  196. case 8013:
  197. if (canTeleport(TeleportTypes.TABLET)) {
  198. player.getInventory().remove(id, 1);
  199. teleport(MagicConstants.Teleports.HOME, TeleportTypes.TABLET);
  200. return true;
  201. }
  202. break;
  203. case 8014:
  204. case 8015:
  205.  
  206. int[] bones = {
  207. 526, 528, 530
  208. };
  209.  
  210. int bone = 0;
  211.  
  212. for (int index = 0; index < bones.length; index++) {
  213. if (player.getInventory().hasItemId(bones[index])) {
  214. bone = bones[index];
  215. continue;
  216. }
  217. }
  218.  
  219. int amount = player.getInventory().getItemAmount(bone);
  220.  
  221. if (amount == 0) {
  222. player.send(new SendMessage("You have no bones to do this!"));
  223. return false;
  224. }
  225.  
  226. player.getInventory().remove(id, 1);
  227. player.getInventory().remove(bone, amount);
  228. player.getInventory().add(id == 8014 ? 1963 : 6883, amount);
  229. player.getSkill().addExperience(Skills.MAGIC, id == 8014 ? 25 : 35.5);
  230.  
  231. player.send(new SendMessage("You have converted " + amount + " bones to " + (id == 8014 ? "bananas" : "peaches") + " ."));
  232.  
  233. return true;
  234. }
  235. return false;
  236. }
  237.  
  238. public void deactivateVengeance() {
  239. vengeanceActive = false;
  240. }
  241.  
  242. public void decrDragonFireShieldCharges() {
  243. dragonFireShieldCharges = ((byte) (dragonFireShieldCharges - 1));
  244.  
  245. if (dragonFireShieldCharges == 0)
  246. player.getClient().queueOutgoingPacket(new SendMessage("Your Dragonfire shield is now empty."));
  247. }
  248.  
  249. public void doWildernessTeleport(final int x, final int y, final int z, final TeleportTypes type) {
  250. teleporting = true;
  251. player.setTakeDamage(false);
  252. player.getClient().queueOutgoingPacket(new SendRemoveInterfaces());
  253. player.getController().onTeleport(player);
  254. int delay = 3;
  255. switch (type) {
  256. case OBELISK:
  257. player.getUpdateFlags().sendGraphic(Graphic.highGraphic(342, 0));
  258. player.getUpdateFlags().sendAnimation(new Animation(1816));
  259. TaskQueue.queue(new Task(player, 1, false, Task.StackType.STACK, Task.BreakType.NEVER, TaskIdentifier.CURRENT_ACTION) {
  260. @Override
  261. public void execute() {
  262. stop();
  263. }
  264.  
  265. @Override
  266. public void onStop() {
  267. player.getClient().queueOutgoingPacket(new SendMessage("Ancient magic teleports you somewhere in the wilderness"));
  268. }
  269. });
  270. break;
  271. case TABLET:
  272. player.getUpdateFlags().sendAnimation(MagicConstants.TABLET_BREAK_ANIMATION);
  273. TaskQueue.queue(new Task(player, 1, false, Task.StackType.STACK, Task.BreakType.NEVER, TaskIdentifier.CURRENT_ACTION) {
  274. @Override
  275. public void execute() {
  276. player.getUpdateFlags().sendAnimation(MagicConstants.TABLET_TELEPORT_ANIMATION);
  277. player.getUpdateFlags().sendGraphic(MagicConstants.TABLET_TELEPORT_GRAPHIC);
  278. stop();
  279. }
  280.  
  281. @Override
  282. public void onStop() {
  283. }
  284. });
  285. break;
  286. case TELE_OTHER:
  287. player.getUpdateFlags().sendAnimation(1816, 0);
  288. player.getUpdateFlags().sendGraphic(new Graphic(342, 0, false));
  289. break;
  290. case FOUNTAIN_OF_RUNE:
  291. player.getUpdateFlags().sendAnimation(1816, 0);
  292. player.getUpdateFlags().sendGraphic(new Graphic(342, 0, false));
  293. break;
  294. default:
  295. switch (spellBookType) {
  296. case ANCIENT:
  297. player.getUpdateFlags().sendAnimation(MagicConstants.ANCIENT_TELEPORT_ANIMATION);
  298. player.getUpdateFlags().sendGraphic(MagicConstants.ANCIENT_TELEPORT_GRAPHIC);
  299. delay = 4;
  300. break;
  301. case LUNAR:
  302. player.getUpdateFlags().sendAnimation(9606, 0);
  303. player.getUpdateFlags().sendGraphic(new Graphic(1685, 0, false));
  304. delay = 4;
  305. break;
  306. default:
  307. player.getClient().queueOutgoingPacket(new SendSound(202, 1, 0));
  308. player.getUpdateFlags().sendAnimation(MagicConstants.MODERN_TELEPORT_ANIMATION);
  309. player.getUpdateFlags().sendGraphic(MagicConstants.MODERN_TELEPORT_GRAPHIC);
  310. delay = 4;
  311. }
  312.  
  313. break;
  314. }
  315.  
  316. TaskQueue.queue(new Task(player, delay, false, Task.StackType.STACK, Task.BreakType.NEVER, TaskIdentifier.CURRENT_ACTION) {
  317. @Override
  318. public void execute() {
  319. if (!player.getController().canTeleport()) {
  320. player.setTakeDamage(true);
  321. teleporting = false;
  322. return;
  323. }
  324.  
  325. TaskQueue.onMovement(player);
  326.  
  327. player.teleport(new Location(x, y, z));
  328. player.setTakeDamage(true);
  329. teleporting = false;
  330.  
  331. switch (type) {
  332. case SPELL_BOOK:
  333. player.getUpdateFlags().sendAnimation(MagicConstants.MODERN_TELEPORT_END_ANIMATION);
  334. switch (spellBookType) {
  335. case MODERN:
  336. player.getUpdateFlags().sendGraphic(MagicConstants.MODERN_TELEPORT_END_GRAPHIC);
  337. break;
  338. default:
  339. break;
  340. }
  341. break;
  342. case TABLET:
  343. player.getUpdateFlags().sendAnimation(MagicConstants.TABLET_TELEPORT_END_ANIMATION);
  344. break;
  345. default:
  346. break;
  347. }
  348.  
  349. stop();
  350. }
  351.  
  352. @Override
  353. public void onStop() {
  354. }
  355. });
  356. }
  357.  
  358. public byte getDragonFireShieldCharges() {
  359. return dragonFireShieldCharges;
  360. }
  361.  
  362. public long getLastVengeance() {
  363. return lastVengeance;
  364. }
  365.  
  366. public int getMagicBook() {
  367. return magicBook;
  368. }
  369.  
  370. public SpellBookTypes getSpellBookType() {
  371. return spellBookType;
  372. }
  373.  
  374. public SpellCasting getSpellCasting() {
  375. return spellCasting;
  376. }
  377.  
  378. public int hasRunes(Item[] runes) {
  379. Item[] items = player.getInventory().getItems();
  380. int k;
  381. for (int i = 0; i < runes.length; i++) {
  382. if (runes[i] != null) {
  383. if (!needsRune(runes[i].getId())) {
  384. runes[i] = null;
  385. } else {
  386. for (k = 0; k < items.length; k++)
  387. if (items[k] != null) {
  388. if (items[k].getId() == runes[i].getId()) {
  389. if (items[k].getAmount() < runes[i].getAmount()) {
  390. return items[k].getId();
  391. }
  392. runes[i] = null;
  393. break;
  394. }
  395. }
  396. }
  397. }
  398. }
  399. for (Item item : runes) {
  400. if (item != null) {
  401. return item.getId();
  402. }
  403. }
  404.  
  405. return -1;
  406. }
  407.  
  408. public void incrDragonFireShieldCharges(Mob mob) {
  409. if (dragonFireShieldCharges == 50 || player.isDead() || player.getMagic().isTeleporting()) {
  410. return;
  411. } else if (dragonFireShieldCharges > 50) {
  412. dragonFireShieldCharges = 50;
  413. return;
  414. }
  415. player.face(mob);
  416. player.getUpdateFlags().sendGraphic(new Graphic(1164));
  417. player.getUpdateFlags().sendAnimation(new Animation(6695));
  418. dragonFireShieldCharges = ((byte) (dragonFireShieldCharges + 1));
  419.  
  420. }
  421.  
  422. private void initTeleport(final int x, final int y, final int z, final TeleportTypes type) {
  423. if (Entity.inWilderness(x, y)) {
  424. doWildernessTeleport(x, y, z, type);
  425. return;
  426. }
  427.  
  428. teleporting = true;
  429. player.setTakeDamage(false);
  430. player.getClient().queueOutgoingPacket(new SendRemoveInterfaces());
  431. player.getController().onTeleport(player);
  432. //int delay = 3;
  433. int delay = 3;
  434. switch (type) {
  435. case TABLET:
  436. player.getUpdateFlags().sendAnimation(MagicConstants.TABLET_BREAK_ANIMATION);
  437. TaskQueue.queue(new Task(player, 1, false, Task.StackType.STACK, Task.BreakType.NEVER, TaskIdentifier.CURRENT_ACTION) {
  438. @Override
  439. public void execute() {
  440. player.getUpdateFlags().sendAnimation(MagicConstants.TABLET_TELEPORT_ANIMATION);
  441. player.getUpdateFlags().sendGraphic(MagicConstants.TABLET_TELEPORT_GRAPHIC);
  442. stop();
  443. }
  444.  
  445. @Override
  446. public void onStop() {
  447. }
  448. });
  449. break;
  450. case TELE_OTHER:
  451. player.getUpdateFlags().sendAnimation(1816, 0);
  452. player.getUpdateFlags().sendGraphic(new Graphic(342, 0, false));
  453. break;
  454. case FOUNTAIN_OF_RUNE:
  455. player.getUpdateFlags().sendAnimation(1816, 0);
  456. player.getUpdateFlags().sendGraphic(new Graphic(283, 0, false));
  457. break;
  458. default:
  459. switch (spellBookType) {
  460. case ANCIENT:
  461. player.getUpdateFlags().sendAnimation(MagicConstants.ANCIENT_TELEPORT_ANIMATION);
  462. player.getUpdateFlags().sendGraphic(MagicConstants.ANCIENT_TELEPORT_GRAPHIC);
  463. delay = 4;
  464. break;
  465. case LUNAR:
  466. player.getUpdateFlags().sendAnimation(MagicConstants.MODERN_TELEPORT_ANIMATION);
  467. player.getUpdateFlags().sendGraphic(MagicConstants.MODERN_TELEPORT_GRAPHIC);
  468. delay = 3;
  469. break;
  470. default:
  471. player.getClient().queueOutgoingPacket(new SendSound(202, 1, 0));
  472. player.getUpdateFlags().sendAnimation(MagicConstants.MODERN_TELEPORT_ANIMATION);
  473. player.getUpdateFlags().sendGraphic(MagicConstants.MODERN_TELEPORT_GRAPHIC);
  474. delay = 3;
  475. }
  476.  
  477. break;
  478. }
  479.  
  480. TaskQueue.queue(new Task(player, delay, false, Task.StackType.STACK, Task.BreakType.NEVER, TaskIdentifier.CURRENT_ACTION) {
  481. @Override
  482. public void execute() {
  483. if (!player.getController().canTeleport()) {
  484. player.setTakeDamage(true);
  485. teleporting = false;
  486. return;
  487. }
  488.  
  489. TaskQueue.onMovement(player);
  490.  
  491. player.teleport(new Location(x, y, z));
  492. player.setTakeDamage(true);
  493. teleporting = false;
  494.  
  495. switch (type) {
  496. case SPELL_BOOK:
  497. player.getUpdateFlags().sendAnimation(MagicConstants.MODERN_TELEPORT_END_ANIMATION);
  498. switch (spellBookType) {
  499. case MODERN:
  500. player.getUpdateFlags().sendGraphic(MagicConstants.MODERN_TELEPORT_END_GRAPHIC);
  501. break;
  502. default:
  503. break;
  504. }
  505. break;
  506. case TABLET:
  507. player.getUpdateFlags().sendAnimation(MagicConstants.TABLET_TELEPORT_END_ANIMATION);
  508. break;
  509. default:
  510. break;
  511. }
  512.  
  513. stop();
  514. }
  515.  
  516. @Override
  517. public void onStop() {
  518. if (player.getBossPet() != null) {
  519. player.getBossPet().remove();
  520. final Mob mob = new Mob(player, player.getBossID(), false, false, true, player.getLocation());
  521. mob.getFollowing().setIgnoreDistance(true);
  522. mob.getFollowing().setFollow(player);
  523. player.setBossPet(mob);
  524. }
  525. }
  526. });
  527. }
  528.  
  529. public boolean isAhrimEffectActive() {
  530. return ahrimEffectActive;
  531. }
  532.  
  533. public boolean isDFireShieldEffect() {
  534. return dFireShieldEffect;
  535. }
  536.  
  537. public boolean isTeleporting() {
  538. return teleporting;
  539. }
  540.  
  541. public void setTeleporting(boolean teleporting) {
  542. this.teleporting = teleporting;
  543. }
  544.  
  545.  
  546. public boolean isVengeanceActive() {
  547. return vengeanceActive;
  548. }
  549.  
  550. public boolean needsRune(int runeId) {
  551. Item weapon = player.getEquipment().getItems()[3];
  552. Item shield = player.getEquipment().getItems()[3];
  553.  
  554. if (weapon == null) {
  555. return true;
  556. }
  557.  
  558. int wep = weapon.getId();
  559.  
  560. switch (runeId) {
  561. case 556:
  562. if ((wep == 1381) || (wep == 1397) || (wep == 17293)) {
  563. return false;
  564. }
  565. return true;
  566. case 554:
  567. if ((wep == 1387) || (wep == 1393) || (wep == 17293)) {
  568. return false;
  569. }
  570. return true;
  571. case 555:
  572. if ((wep == 1383) || (wep == 1395) || (wep == 17293) || ((shield != null) && (shield.getId() == 18346))) {
  573. return false;
  574. }
  575. return true;
  576. case 557:
  577. if ((wep == 1385) || (wep == 1399) || (wep == 17293)) {
  578. return false;
  579. }
  580. return true;
  581. }
  582. return true;
  583. }
  584.  
  585. public void onLogin() {
  586.  
  587. }
  588.  
  589. public void onOperateDragonFireShield() {
  590. if (dragonFireShieldCharges == 0) {
  591. player.getClient().queueOutgoingPacket(new SendMessage("You do not have any charges on your shield."));
  592. return;
  593. }
  594. if ((!PlayerConstants.isOwner(player)) && (System.currentTimeMillis() - dFireShieldTime < 300000L)) {
  595. player.getClient().queueOutgoingPacket(new SendMessage("You must let your shield cool down before using it again."));
  596. return;
  597. }
  598. dFireShieldEffect = (!dFireShieldEffect);
  599.  
  600. if (dFireShieldEffect) {
  601. player.getClient().queueOutgoingPacket(new SendMessage("Your Dragonfire shield attack is now active."));
  602.  
  603. Projectile p = new Projectile(1166);
  604.  
  605. p.setStartHeight(25);
  606. p.setEndHeight(25);
  607.  
  608. p.setDelay(40);
  609. p.setCurve(0);
  610.  
  611. player.getCombat().getMagic().setpDelay((byte) 1);
  612.  
  613. if (player.getCombat().getAttacking() == null) {
  614. player.getUpdateFlags().sendAnimation(6695, 0);
  615. }
  616.  
  617. player.getCombat().getMagic().setAttack(new Attack(5, 5), new Animation(6696), new Graphic(1167, 45, true), new Graphic(1167, 0, true), p);
  618. }
  619.  
  620. player.updateCombatType();
  621. }
  622.  
  623. public void removeRunes(Item[] runes) {
  624. for (int i = 0; i < runes.length; i++)
  625. if ((runes[i] != null) && (needsRune(runes[i].getId()))) {
  626. if (runes[i].getId() == 561) {
  627. Item weapon = player.getEquipment().getItems()[3];
  628.  
  629. if ((weapon != null) && (weapon.getId() == 18341) && (Utility.randomNumber(2) != 0))
  630. ;
  631. else
  632. player.getInventory().remove(runes[i]);
  633. } else {
  634. player.getInventory().remove(runes[i]);
  635. }
  636. }
  637. }
  638.  
  639. public void reset() {
  640. dFireShieldEffect = false;
  641. dFireShieldTime = System.currentTimeMillis();
  642. }
  643.  
  644. public void setAhrimEffectActive(boolean ahrimEffectActive) {
  645. this.ahrimEffectActive = ahrimEffectActive;
  646. }
  647.  
  648. public void setDFireShieldEffect(boolean dFireShieldEffect) {
  649. this.dFireShieldEffect = dFireShieldEffect;
  650. }
  651.  
  652. public void setDragonFireShieldCharges(int dragonFireShieldCharges) {
  653. this.dragonFireShieldCharges = ((byte) dragonFireShieldCharges);
  654. }
  655.  
  656. public void setMagicBook(int magicBook) {
  657. this.magicBook = magicBook;
  658. player.getClient().queueOutgoingPacket(new SendSidebarInterface(6, magicBook));
  659.  
  660. if (player.isActive()) {
  661. spellCasting.disableAutocast();
  662. Autocast.resetAutoCastInterface(player);
  663. player.updateCombatType();
  664. }
  665.  
  666. switch (magicBook) {
  667. case 1151:
  668. player.getMagic().setSpellBookType(SpellBookTypes.MODERN);
  669. break;
  670. case 12855:
  671. player.getMagic().setSpellBookType(SpellBookTypes.ANCIENT);
  672. break;
  673. case 29999:
  674. player.getMagic().setSpellBookType(SpellBookTypes.LUNAR);
  675. }
  676. }
  677.  
  678. public void setSpellBookType(SpellBookTypes spellBookType) {
  679. this.spellBookType = spellBookType;
  680. }
  681.  
  682. public void setVengeanceActive(boolean vengeanceActive) {
  683. this.vengeanceActive = vengeanceActive;
  684. }
  685.  
  686. public void teleport(int x, int y, int z, TeleportTypes type) {
  687. if (!canTeleport(type) || player.isDead()) {
  688. player.getClient().queueOutgoingPacket(new SendRemoveInterfaces());
  689. return;
  690. }
  691.  
  692. initTeleport(x, y, z, type);
  693. }
  694.  
  695. public void teleport(Location destination, TeleportTypes type) {
  696.  
  697. if (!canTeleport(type) || player.isDead()) {
  698. player.getClient().queueOutgoingPacket(new SendRemoveInterfaces());
  699. return;
  700. }
  701.  
  702. initTeleport(destination.getX(), destination.getY(), destination.getZ(), type);
  703.  
  704. }
  705.  
  706. public void forceTeleport(Location location, TeleportTypes teleportType) {
  707. teleport(location.getX(), location.getY(), location.getZ(), teleportType);
  708. }
  709.  
  710. public void teleport(MagicConstants.Teleports teleport, TeleportTypes teleportType) {
  711. teleport(teleport.getLocation().getX(), teleport.getLocation().getY(), teleport.getLocation().getZ(), teleportType);
  712. }
  713.  
  714. public void teleportNoWildernessRequirement(int x, int y, int z, TeleportTypes type) {
  715. if (teleporting)
  716. return;
  717. if (player.isTeleblocked()) {
  718. player.getClient().queueOutgoingPacket(new SendMessage("A magical force blocks you from teleporting."));
  719. return;
  720. }
  721. if (!player.getController().canTeleport()) {
  722. player.getClient().queueOutgoingPacket(new SendMessage("You can't teleport right now."));
  723. return;
  724. }
  725.  
  726. if (player.isDead()) {
  727. player.getClient().queueOutgoingPacket(new SendRemoveInterfaces());
  728. return;
  729. }
  730.  
  731. initTeleport(x, y, z, type);
  732. }
  733.  
  734.  
  735. public enum Enchant {
  736.  
  737. SAPPHIRERING(1637, 2550, 7, 18, 719, 114, 1),
  738. SAPPHIREAMULET(1694, 1727, 7, 18, 719, 114, 1),
  739. SAPPHIRENECKLACE(1656, 3853, 7, 18, 719, 114, 1),
  740.  
  741. EMERALDRING(1639, 2552, 27, 37, 719, 114, 2),
  742. EMERALDAMULET(1696, 1729, 27, 37, 719, 114, 2),
  743. EMERALDNECKLACE(1658, 5521, 27, 37, 719, 114, 2),
  744.  
  745. RUBYRING(1641, 2568, 47, 59, 720, 115, 3),
  746. RUBYAMULET(1698, 1725, 47, 59, 720, 115, 3),
  747. RUBYNECKLACE(1660, 11194, 47, 59, 720, 115, 3),
  748.  
  749. DIAMONDRING(1643, 2570, 57, 67, 720, 115, 4),
  750. DIAMONDAMULET(1700, 1731, 57, 67, 720, 115, 4),
  751. DIAMONDNECKLACE(1662, 11090, 57, 67, 720, 115, 4),
  752.  
  753. DRAGONSTONERING(1645, 2572, 68, 78, 721, 116, 5),
  754. DRAGONSTONEAMULET(1702, 1712, 68, 78, 721, 116, 5),
  755. DRAGONSTONENECKLACE(1664, 11105, 68, 78, 721, 116, 5),
  756.  
  757. ONYXRING(6575, 6583, 87, 97, 721, 452, 6),
  758. ONYXAMULET(6581, 6585, 87, 97, 721, 452, 6),
  759. ONYXNECKLACE(6577, 11128, 87, 97, 721, 452, 6);
  760.  
  761. int unenchanted, enchanted, levelReq, xpGiven, anim, gfx, reqEnchantmentLevel;
  762. private Enchant(int unenchanted, int enchanted, int levelReq, int xpGiven, int anim, int gfx, int reqEnchantmentLevel) {
  763. this.unenchanted = unenchanted;
  764. this.enchanted = enchanted;
  765. this.levelReq = levelReq;
  766. this.xpGiven = xpGiven;
  767. this.anim = anim;
  768. this.gfx = gfx;
  769. this.reqEnchantmentLevel = reqEnchantmentLevel;
  770. }
  771.  
  772. public int getUnenchanted() {
  773. return unenchanted;
  774. }
  775.  
  776. public int getEnchanted() {
  777. return enchanted;
  778. }
  779.  
  780. public int getLevelReq() {
  781. return levelReq;
  782. }
  783.  
  784. public int getXp() {
  785. return xpGiven;
  786. }
  787.  
  788. public int getAnim() {
  789. return anim;
  790. }
  791.  
  792. public int getGFX() {
  793. return gfx;
  794. }
  795.  
  796. public int getELevel() {
  797. return reqEnchantmentLevel;
  798. }
  799.  
  800. private static final Map <Integer,Enchant> enc = new HashMap<Integer,Enchant>();
  801.  
  802. public static Enchant forId(int itemID) {
  803. return enc.get(itemID);
  804. }
  805.  
  806. static {
  807. for (Enchant en : Enchant.values()) {
  808. enc.put(en.getUnenchanted(), en);
  809. }
  810. }
  811. }
  812.  
  813. private enum EnchantSpell {
  814.  
  815. SAPPHIRE(1155, 555, 1, 564, 1, -1, 0),
  816. EMERALD(1165, 556, 3, 564, 1, -1, 0),
  817. RUBY(1176, 554, 5, 564, 1, -1, 0),
  818. DIAMOND(1180, 557, 10, 564, 1, -1, 0),
  819. DRAGONSTONE(1187, 555, 15, 557, 15, 564, 1),
  820. ONYX(6003, 557, 20, 554, 20, 564, 1);
  821.  
  822. int spell, reqRune1, reqAmtRune1, reqRune2, reqAmtRune2, reqRune3, reqAmtRune3;
  823. private EnchantSpell(int spell, int reqRune1, int reqAmtRune1, int reqRune2, int reqAmtRune2, int reqRune3, int reqAmtRune3) {
  824. this.spell = spell;
  825. this.reqRune1 = reqRune1;
  826. this.reqAmtRune1 = reqAmtRune1;
  827. this.reqRune2 = reqRune2;
  828. this.reqAmtRune2 = reqAmtRune2;
  829. this.reqRune3 = reqRune3;
  830. this.reqAmtRune3 = reqAmtRune3;
  831. }
  832.  
  833. public int getSpell() {
  834. return spell;
  835. }
  836.  
  837. public int getReq1() {
  838. return reqRune1;
  839. }
  840.  
  841. public int getReqAmt1() {
  842. return reqAmtRune1;
  843. }
  844.  
  845. public int getReq2() {
  846. return reqRune2;
  847. }
  848.  
  849. public int getReqAmt2() {
  850. return reqAmtRune2;
  851. }
  852.  
  853. public int getReq3() {
  854. return reqRune3;
  855. }
  856.  
  857. public int getReqAmt3() {
  858. return reqAmtRune3;
  859. }
  860.  
  861.  
  862. public static final Map<Integer, EnchantSpell> ens = new HashMap<Integer, EnchantSpell>();
  863.  
  864. public static EnchantSpell forId(int id) {
  865. return ens.get(id);
  866. }
  867.  
  868. static {
  869. for (EnchantSpell en : EnchantSpell.values()) {
  870. ens.put(en.getSpell(), en);
  871. }
  872. }
  873.  
  874. }
  875.  
  876. private boolean hasRunes(int spellID) {
  877. EnchantSpell ens = EnchantSpell.forId(spellID);
  878. if (ens.getReq3() == 0) {
  879. return player.getInventory().hasItemAmount(ens.getReq1(), ens.getReqAmt1()) && player.getInventory().hasItemAmount(ens.getReq2(), ens.getReqAmt2()) && player.getInventory().hasItemAmount(ens.getReq3(), ens.getReqAmt3());
  880. } else {
  881. return player.getInventory().hasItemAmount(ens.getReq1(), ens.getReqAmt1()) && player.getInventory().hasItemAmount(ens.getReq2(), ens.getReqAmt2());
  882. }
  883. }
  884.  
  885. private int getEnchantmentLevel(int spellID) {
  886. switch (spellID) {
  887. case 1155: //Lvl-1 enchant sapphire
  888. return 1;
  889. case 1165: //Lvl-2 enchant emerald
  890. return 2;
  891. case 1176: //Lvl-3 enchant ruby
  892. return 3;
  893. case 1180: //Lvl-4 enchant diamond
  894. return 4;
  895. case 1187: //Lvl-5 enchant dragonstone
  896. return 5;
  897. case 6003: //Lvl-6 enchant onyx
  898. return 6;
  899. }
  900. return 0;
  901. }
  902. public void enchantItem(int itemID, int spellID) {
  903. Enchant enc = Enchant.forId(itemID);
  904. EnchantSpell ens = EnchantSpell.forId(spellID);
  905. if (enc == null || ens == null) {
  906. return;
  907. }
  908. if (player.getSkill().getLevels()[Skills.MAGIC] >= enc.getLevelReq()) {
  909. if (player.getInventory().hasItemAmount(enc.getUnenchanted(), 1)) {
  910. if (hasRunes(spellID)) {
  911. if (getEnchantmentLevel(spellID) == enc.getELevel()) {
  912. player.getInventory().remove(enc.getUnenchanted(), 1);
  913. player.getInventory().add(enc.getEnchanted(), 1);
  914. player.getSkill().addExperience(Skills.MAGIC, enc.getXp());
  915. player.getInventory().remove(ens.getReq1(), ens.getReqAmt1());
  916. player.getInventory().remove(ens.getReq2(), ens.getReqAmt2());
  917. player.getUpdateFlags().sendAnimation(new Animation(enc.getAnim()));
  918. player.getUpdateFlags().sendGraphic(new Graphic(enc.getGFX(), true));
  919. if (ens.getReq3() != -1) {
  920. player.getInventory().remove(ens.getReq3(), ens.getReqAmt3());
  921. }
  922. player.send(new SendOpenTab(6));
  923. } else {
  924. player.send(new SendMessage("You can only enchant this jewelry using a level-"+enc.getELevel()+" enchantment spell!"));
  925. }
  926. } else {
  927. player.send(new SendMessage("You do not have enough runes to cast this spell."));
  928. }
  929. }
  930. } else {
  931. player.send(new SendMessage("You need a magic level of at least "+enc.getLevelReq()+" to cast this spell."));
  932. }
  933. }
  934.  
  935. public void useMagicOnItem(int itemId, int spellId) {
  936. switch (spellId) {
  937. case 1162:
  938. spellCasting.cast(new LowAlchemy());
  939. break;
  940. case 1178:
  941. spellCasting.cast(new HighAlchemy());
  942. break;
  943. case 1155: //Lvl-1 enchant sapphire
  944. case 1165: //Lvl-2 enchant emerald
  945. case 1176: //Lvl-3 enchant ruby
  946. case 1180: //Lvl-4 enchant diamond
  947. case 1187: //Lvl-5 enchant dragonstone
  948. case 6003: //Lvl-6 enchant onyx
  949. enchantItem(itemId, spellId);
  950. break;
  951. case 1173:
  952. spellCasting.cast(new SuperHeat());
  953. break;
  954.  
  955.  
  956.  
  957. }
  958. }
  959.  
  960.  
  961. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement