Advertisement
Guest User

DuelArena.java

a guest
Aug 23rd, 2014
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 30.49 KB | None | 0 0
  1. package com.rs.game.minigames.duel;
  2.  
  3. import com.rs.cache.loaders.ItemDefinitions;
  4. import com.rs.game.Animation;
  5. import com.rs.game.Entity;
  6. import com.rs.game.ForceTalk;
  7. import com.rs.game.World;
  8. import com.rs.game.WorldObject;
  9. import com.rs.game.WorldTile;
  10. import com.rs.game.item.Item;
  11. import com.rs.game.player.Player;
  12. import com.rs.game.player.actions.PlayerCombat;
  13. import com.rs.game.player.content.Foods.Food;
  14. import com.rs.game.player.content.ItemConstants;
  15. import com.rs.game.player.content.Pots.Pot;
  16. import com.rs.game.player.controlers.Controler;
  17. import com.rs.game.tasks.WorldTask;
  18. import com.rs.game.tasks.WorldTasksManager;
  19. import com.rs.net.decoders.WorldPacketsDecoder;
  20. import com.rs.net.decoders.handlers.ButtonHandler;
  21. import com.rs.utils.Utils;
  22.  
  23. public class DuelArena extends Controler {
  24.  
  25. private Player target;
  26. private boolean ifFriendly, isDueling;
  27.  
  28. private final Item[] FUN_WEAPONS = {new Item(4566)};
  29.  
  30. private final WorldTile[] LOBBY_TELEPORTS = { new WorldTile(3367, 3275, 0),
  31. new WorldTile(3360, 3275, 0), new WorldTile(3358, 3270, 0),
  32. new WorldTile(3363, 3268, 0), new WorldTile(3370, 3268, 0),
  33. new WorldTile(3367, 3267, 0), new WorldTile(3376, 3275, 0),
  34. new WorldTile(3377, 3271, 0), new WorldTile(3375, 3269, 0),
  35. new WorldTile(3381, 3277, 0) };
  36.  
  37. @Override
  38. public void start() {
  39. this.target = (Player) getArguments()[0];
  40. ifFriendly = (boolean) getArguments()[1];
  41. openDuelScreen(target, ifFriendly);
  42. }
  43.  
  44. private void openDuelScreen(Player target, boolean ifFriendly) {
  45. if (!ifFriendly) {
  46. sendOptions(player);
  47. player.getLastDuelRules().getStake().clear();
  48. }
  49. player.getTemporaryAttributtes().put("acceptedDuel", false);
  50. player.getPackets().sendItems(134, false, player.getLastDuelRules().getStake());
  51. player.getPackets().sendItems(134, true, player.getLastDuelRules().getStake());
  52. player.getPackets().sendIComponentText(ifFriendly ? 637 : 631, ifFriendly ? 16 : 38, " " + Utils.formatPlayerNameForDisplay(target.getUsername()));
  53. player.getPackets().sendIComponentText(ifFriendly ? 637 : 631, ifFriendly ? 18 : 40, "" + (target.getSkills().getCombatLevel()));
  54. player.getPackets().sendConfig(286, 0);
  55. player.getTemporaryAttributtes().put("firstScreen", true);
  56. player.getInterfaceManager().sendInterface(ifFriendly ? 637 : 631);
  57. refreshScreenMessage(true, ifFriendly);
  58. player.setCloseInterfacesEvent(new Runnable() {
  59. @Override
  60. public void run() {
  61. closeDuelInteraction(true, DuelStage.DECLINED);
  62. }
  63. });
  64. }
  65.  
  66. private void accept(boolean firstStage) {
  67. if(!hasTarget())
  68. return;
  69. boolean accepted = (Boolean) player.getTemporaryAttributtes().get("acceptedDuel");
  70. boolean targetAccepted = (Boolean) target.getTemporaryAttributtes().get("acceptedDuel");
  71. DuelRules rules = player.getLastDuelRules();
  72. if (!rules.canAccept(player.getLastDuelRules().getStake()))
  73. return;
  74. if(accepted && targetAccepted) {
  75. if(firstStage) {
  76. if(nextStage())
  77. ((DuelArena) target.getControlerManager().getControler()).nextStage();
  78. } else {
  79. player.setCloseInterfacesEvent(null);
  80. player.closeInterfaces();
  81. closeDuelInteraction(true, DuelStage.DONE);
  82. }
  83. return;
  84. }
  85. player.getTemporaryAttributtes().put("acceptedDuel", true);
  86. refreshScreenMessages(firstStage, ifFriendly);
  87. }
  88.  
  89. protected void closeDuelInteraction(boolean started, DuelStage duelStage) {
  90. Player oldTarget = target;
  91. if(duelStage != DuelStage.DONE) {
  92. target = null;
  93. WorldTasksManager.schedule(new WorldTask() {
  94.  
  95. @Override
  96. public void run() {
  97. player.getControlerManager().startControler("DuelControler");
  98. }
  99. });
  100. player.getInventory().getItems().addAll(player.getLastDuelRules().getStake());
  101. player.getInventory().init();
  102. player.getLastDuelRules().getStake().clear();
  103. } else {
  104. removeEquipment();
  105. beginBattle(started);
  106. }
  107. Controler controler = oldTarget.getControlerManager().getControler();
  108. if (controler == null)
  109. return;
  110. DuelArena targetConfiguration = (DuelArena) controler;
  111. if (controler instanceof DuelArena) {
  112. if (targetConfiguration.hasTarget()) {
  113. oldTarget.setCloseInterfacesEvent(null);
  114. oldTarget.closeInterfaces();
  115. if (duelStage != DuelStage.DONE)
  116. player.getControlerManager().removeControlerWithoutCheck();
  117. if (started)
  118. targetConfiguration.closeDuelInteraction(false, duelStage);
  119. if (duelStage == DuelStage.DONE)
  120. player.getPackets().sendGameMessage("Your battle will begin shortly.");
  121. else if (duelStage == DuelStage.SECOND)
  122. player.getPackets().sendGameMessage("<col=ff0000>Please check if these settings are correct.");
  123. else if (duelStage == DuelStage.DECLINED)
  124. oldTarget.getPackets().sendGameMessage("<col=ff0000>Other player declined the duel!");
  125. else if (duelStage == DuelStage.DECLINED) {
  126. oldTarget.getPackets().sendGameMessage("You do not have enough space to continue!");
  127. oldTarget.getPackets().sendGameMessage("Other player does not have enough space to continue!");
  128. }
  129. }
  130. }
  131. }
  132.  
  133. public void addItem(int slot, int amount) {
  134. if(!hasTarget())
  135. return;
  136. Item item = player.getInventory().getItem(slot);
  137. if (item == null)
  138. return;
  139. if (!ItemConstants.isTradeable(item)) {
  140. player.getPackets().sendGameMessage("That item cannot be staked!");
  141. return;
  142. }
  143. Item[] itemsBefore = player.getLastDuelRules().getStake().getItemsCopy();
  144. int maxAmount = player.getInventory().getItems().getNumberOf(item);
  145. if (amount < maxAmount)
  146. item = new Item(item.getId(), amount);
  147. else
  148. item = new Item(item.getId(), maxAmount);
  149. player.getLastDuelRules().getStake().add(item);
  150. refreshItems(itemsBefore);
  151. player.getInventory().deleteItem(slot, item);
  152. cancelAccepted();
  153. }
  154.  
  155. public void removeItem(final int slot, int amount) {
  156. if(!hasTarget())
  157. return;
  158. Item item = player.getLastDuelRules().getStake().get(slot);
  159. if (item == null)
  160. return;
  161. Item[] itemsBefore = player.getLastDuelRules().getStake().getItemsCopy();
  162. int maxAmount = player.getLastDuelRules().getStake().getNumberOf(item);
  163. if (amount < maxAmount)
  164. item = new Item(item.getId(), amount);
  165. else
  166. item = new Item(item.getId(), maxAmount);
  167. player.getLastDuelRules().getStake().remove(slot, item);
  168. player.getInventory().addItem(item);
  169. refreshItems(itemsBefore);
  170. cancelAccepted();
  171. }
  172.  
  173. private void refreshItems(Item[] itemsBefore) {
  174. int[] changedSlots = new int[itemsBefore.length];
  175. int count = 0;
  176. for (int index = 0; index < itemsBefore.length; index++) {
  177. Item item = player.getLastDuelRules().getStake().getItems()[index];
  178. if (item != null)
  179. if (itemsBefore[index] != item) {
  180. changedSlots[count++] = index;
  181. }
  182. }
  183. int[] finalChangedSlots = new int[count];
  184. System.arraycopy(changedSlots, 0, finalChangedSlots, 0, count);
  185. refresh(finalChangedSlots);
  186. }
  187.  
  188. private void refresh(int... slots) {
  189. player.getPackets().sendUpdateItems(134, player.getLastDuelRules().getStake(), slots);
  190. target.getPackets().sendUpdateItems(134, true, player.getLastDuelRules().getStake().getItems(), slots);
  191. }
  192.  
  193. public void cancelAccepted() {
  194. boolean canceled = false;
  195. if((Boolean) player.getTemporaryAttributtes().get("acceptedDuel")) {
  196. player.getTemporaryAttributtes().put("acceptedDuel", false);
  197. canceled = true;
  198. }
  199. if((Boolean) target.getTemporaryAttributtes().get("acceptedDuel")) {
  200. target.getTemporaryAttributtes().put("acceptedDuel", false);
  201. canceled = true;
  202. }
  203. if(canceled)
  204. refreshScreenMessages(canceled, ifFriendly);
  205. }
  206.  
  207. private void openConfirmationScreen(boolean ifFriendly) {
  208. player.getInterfaceManager().sendInterface(ifFriendly ? 639 : 626);
  209. refreshScreenMessage(false, ifFriendly);
  210. }
  211.  
  212. private void refreshScreenMessages(boolean firstStage, boolean ifFriendly) {
  213. refreshScreenMessage(firstStage, ifFriendly);
  214. ((DuelArena) target.getControlerManager().getControler()).refreshScreenMessage(firstStage, ifFriendly);
  215. }
  216.  
  217. private void refreshScreenMessage(boolean firstStage, boolean ifFriendly) {
  218. player.getPackets().sendIComponentText(firstStage ? (ifFriendly ? 637 : 631) : (ifFriendly ? 639 : 626), firstStage ? (ifFriendly ? 20 : 41) : (ifFriendly ? 23 : 35), "<col=ff0000>"+getAcceptMessage(firstStage));
  219. }
  220.  
  221. private String getAcceptMessage(boolean firstStage) {
  222. if (target.getTemporaryAttributtes().get("acceptedDuel") == Boolean.TRUE)
  223. return "Other player has accepted.";
  224. else if (player.getTemporaryAttributtes().get("acceptedDuel") == Boolean.TRUE)
  225. return "Waiting for other player...";
  226. return firstStage ? "" : "Please look over the agreements to the duel.";
  227. }
  228.  
  229. public boolean nextStage() {
  230. if(!hasTarget())
  231. return false;
  232. if(player.getInventory().getItems().getUsedSlots() + target.getLastDuelRules().getStake().getUsedSlots() > 28) {
  233. player.setCloseInterfacesEvent(null);
  234. player.closeInterfaces();
  235. closeDuelInteraction(true, DuelStage.NO_SPACE);
  236. return false;
  237. }
  238. player.getTemporaryAttributtes().put("acceptedDuel", false);
  239. openConfirmationScreen(false);
  240. player.getInterfaceManager().closeInventoryInterface();
  241. return true;
  242. }
  243.  
  244. private void sendOptions(Player player) {
  245. player.getInterfaceManager().sendInventoryInterface(628);
  246. player.getPackets().sendUnlockIComponentOptionSlots(628, 0, 0, 27, 0, 1, 2, 3, 4, 5);
  247. player.getPackets().sendInterSetItemsOptionsScript(628, 0, 93, 4, 7, "Stake 1", "Stake 5", "Stake 10", "Stake All", "Examine");
  248. player.getPackets().sendUnlockIComponentOptionSlots(631, 47, 0, 27, 0, 1, 2, 3, 4, 5);
  249. player.getPackets().sendInterSetItemsOptionsScript(631, 0, 120, 4, 7, "Remove 1", "Remove 5", "Remove 10", "Remove All", "Examine");
  250. }
  251.  
  252. public void endDuel(Player victor, Player loser) {
  253. endDuel(victor, loser, true);
  254. }
  255.  
  256. public void endDuel(final Player victor, final Player loser, boolean removeLoserControler) { if (isDueling) {
  257. for (Item item : player.getLastDuelRules().getStake().getItems()) {
  258. if (item == null) continue;
  259. victor.getInventory().addItem(item);
  260. loser.getInventory().deleteItem(item);
  261. }
  262. for (Item item : target.getLastDuelRules().getStake().getItems()) {
  263. if (item == null) continue;
  264. victor.getInventory().addItem(item);
  265. loser.getInventory().deleteItem(item);
  266. }
  267. isDueling = false;
  268. victor.getPackets().sendGameMessage("Congradulations! You easily defeated "+loser.getDisplayName()+".");
  269. startEndingTeleport(victor);
  270. loser.getPackets().sendGameMessage("Oh dear, it seems you have lost to "+victor.getDisplayName()+".");
  271. startEndingTeleport(loser);
  272. }
  273. if (loser.getControlerManager().getControler() != null && removeLoserControler)
  274. loser.getControlerManager().removeControlerWithoutCheck();
  275. loser.setCanPvp(false);
  276. loser.getHintIconsManager().removeUnsavedHintIcon();
  277. loser.reset();
  278. loser.closeInterfaces();
  279. if (victor.getControlerManager().getControler() != null)
  280. victor.getControlerManager().removeControlerWithoutCheck();
  281. victor.setCanPvp(false);
  282. victor.getHintIconsManager().removeUnsavedHintIcon();
  283. victor.reset();
  284. victor.closeInterfaces();
  285. WorldTasksManager.schedule(new WorldTask() {
  286.  
  287.  
  288. @Override
  289. public void run() {
  290. victor.getControlerManager().startControler("DuelControler");
  291. loser.getControlerManager().startControler("DuelControler");
  292. }
  293. }, 2);
  294. }
  295.  
  296. private void startEndingTeleport(Player player) {
  297. WorldTile tile = LOBBY_TELEPORTS[Utils.random(LOBBY_TELEPORTS.length)];
  298. WorldTile teleTile = tile;
  299. for (int trycount = 0; trycount < 10; trycount++) {
  300. teleTile = new WorldTile(tile, 2);
  301. if (World.canMoveNPC(tile.getPlane(), teleTile.getX(),
  302. teleTile.getY(), player.getSize()))
  303. break;
  304. teleTile = tile;
  305. }
  306. player.setNextWorldTile(teleTile);
  307. }
  308.  
  309. private void removeEquipment() {
  310. int slot = 0;
  311. for (int i = 10; i < 23; i++) {
  312. if (i == 14) {
  313. if (player.getEquipment().hasTwoHandedWeapon())
  314. ButtonHandler.sendRemove(target, 3);
  315. }
  316. if (player.getLastDuelRules().getRule(i)) {
  317. slot = i - 10;
  318. ButtonHandler.sendRemove(player, slot);
  319. }
  320. }
  321. }
  322.  
  323. private void beginBattle(boolean started) {
  324. if (started) {
  325. WorldTile[] teleports = getPossibleWorldTiles();
  326. int random = Utils.getRandom(1);
  327. player.setNextWorldTile(random == 0 ? teleports[0] : teleports[1]);
  328. target.setNextWorldTile(random == 0 ? teleports[1] : teleports[0]);
  329. }
  330. player.stopAll();
  331. player.lock(2); // fixes mass click steps
  332. player.reset();
  333. isDueling = true;
  334. player.getTemporaryAttributtes().put("startedDuel", true);
  335. player.getTemporaryAttributtes().put("canFight", false);
  336. player.setCanPvp(true);
  337. player.getHintIconsManager().addHintIcon(target, 1, -1, false);
  338. WorldTasksManager.schedule(new WorldTask() {
  339. int count = 3;
  340.  
  341. @Override
  342. public void run() {
  343. if (count > 0)
  344. player.setNextForceTalk(new ForceTalk("" + count));
  345. if (count == 0) {
  346. player.getTemporaryAttributtes().put("canFight", true);
  347. player.setNextForceTalk(new ForceTalk("FIGHT!"));
  348. this.stop();
  349. }
  350. count--;
  351. }
  352. }, 0, 2);
  353. }
  354.  
  355. @Override
  356. public boolean canEat(Food food) {
  357. if (player.getLastDuelRules().getRule(4) && isDueling) {
  358. player.getPackets().sendGameMessage("You cannot eat during this duel.", true);
  359. return false;
  360. }
  361. return true;
  362. }
  363.  
  364. @Override
  365. public boolean canPot(Pot pot) {
  366. if (player.getLastDuelRules().getRule(3) && isDueling) {
  367. player.getPackets().sendGameMessage("You cannot drink during this duel.", true);
  368. return false;
  369. }
  370. return true;
  371. }
  372.  
  373. @Override
  374. public boolean canMove(int dir) {
  375. if (player.getLastDuelRules().getRule(25) && isDueling) {
  376. player.getPackets().sendGameMessage("You cannot move during this duel!", true);
  377. return false;
  378. }
  379. return true;
  380. }
  381.  
  382. @Override
  383. public boolean canSummonFamiliar() {
  384. if (player.getLastDuelRules().getRule(24) && isDueling)
  385. return true;
  386. player.getPackets().sendGameMessage("Summoning has been disabled during this duel!");
  387. return false;
  388. }
  389.  
  390. @Override
  391. public boolean processMagicTeleport(WorldTile toTile) {
  392. player.getDialogueManager().startDialogue("SimpleMessage", "A magical force prevents you from teleporting from the arena.");
  393. return false;
  394. }
  395.  
  396. @Override
  397. public boolean processItemTeleport(WorldTile toTile) {
  398. player.getDialogueManager().startDialogue("SimpleMessage","A magical force prevents you from teleporting from the arena.");
  399. return false;
  400. }
  401.  
  402. @Override
  403. public void magicTeleported(int type) {
  404. if (type != -1)
  405. return;
  406. }
  407.  
  408. @Override
  409. public boolean processObjectClick1(WorldObject object) {
  410. player.getDialogueManager().startDialogue("ForfeitDialouge");
  411. return true;
  412. }
  413.  
  414. @Override
  415. public boolean sendDeath() {
  416. player.lock(7);
  417. WorldTasksManager.schedule(new WorldTask() {
  418. int loop;
  419.  
  420. @Override
  421. public void run() {
  422. player.stopAll();
  423. if (loop == 0) {
  424. player.setNextAnimation(new Animation(836));
  425. } else if (loop == 1) {
  426. player.getPackets().sendGameMessage(
  427. "Oh dear, you have died.");
  428. } else if (loop == 3) {
  429. player.setNextAnimation(new Animation(-1));
  430. endDuel(target, player);
  431. this.stop();
  432. }
  433. loop++;
  434. }
  435. }, 0, 1);
  436. return false;
  437. }
  438.  
  439. @Override
  440. public boolean login() {
  441. startEndingTeleport(player);
  442. removeControler();
  443. return true;
  444. }
  445.  
  446. @Override
  447. public boolean logout() {
  448. if (isDueling)
  449. endDuel(target, player, false);
  450. else
  451. closeDuelInteraction(true, DuelStage.DECLINED);
  452. return isDueling ? false : true;
  453. }
  454.  
  455. @Override
  456. public boolean keepCombating(Entity victim) {
  457. DuelRules rules = player.getLastDuelRules();
  458. boolean isRanging = PlayerCombat.isRanging(player) != 0;
  459. if (player.getTemporaryAttributtes().get("canFight") == Boolean.FALSE) {
  460. player.getPackets().sendGameMessage("The duel hasn't started yet.", true);
  461. return false;
  462. }
  463. if (target != victim)
  464. return false;
  465. if (player.getCombatDefinitions().getSpellId() > 0 && rules.getRule(2) && isDueling) {
  466. player.getPackets().sendGameMessage("You cannot use Magic in this duel!", true);
  467. return false;
  468. } else if (isRanging && rules.getRule(0) && isDueling) {
  469. player.getPackets().sendGameMessage("You cannot use Range in this duel!", true);
  470. return false;
  471. } else if (!isRanging && rules.getRule(1) && player.getCombatDefinitions().getSpellId() <= 0 && isDueling) {
  472. player.getPackets().sendGameMessage("You cannot use Melee in this duel!", true);
  473. return false;
  474. } else {
  475. for (Item item : FUN_WEAPONS) {
  476. if (rules.getRule(8) && !player.getInventory().containsItem(item.getId(), item.getAmount())) {
  477. player.getPackets().sendGameMessage("You can only use fun weapons in this duel!");
  478. return false;
  479. }
  480. }
  481. }
  482. return true;
  483. }
  484.  
  485. @Override
  486. public boolean canEquip(int slotId, int itemId) {
  487. DuelRules rules = player.getLastDuelRules();
  488. if (isDueling) {
  489. if (rules.getRule(10 + slotId)) {
  490. player.getPackets().sendGameMessage("You can't equip " + ItemDefinitions.getItemDefinitions(itemId).getName().toLowerCase() + " during this duel.");
  491. return false;
  492. }
  493. if (slotId == 3 && player.getEquipment().hasTwoHandedWeapon() && rules.getRule(15)) {
  494. player.getPackets().sendGameMessage("You can't equip "+ ItemDefinitions.getItemDefinitions(itemId).getName().toLowerCase() + " during this duel.");
  495. return false;
  496. }
  497. }
  498. return true;
  499. }
  500.  
  501. private WorldTile[] getPossibleWorldTiles() {
  502. final int arenaChoice = Utils.getRandom(2);
  503. WorldTile[] locations = new WorldTile[2];
  504. int[] arenaBoundariesX = { 3337, 3367, 3336 };
  505. int[] arenaBoundariesY = { 3246, 3227, 3208 };
  506. int[] maxOffsetX = { 14, 14, 16 };
  507. int[] maxOffsetY = { 10, 10, 10 };
  508. int finalX = arenaBoundariesX[arenaChoice]
  509. + Utils.getRandom(maxOffsetX[arenaChoice]);
  510. int finalY = arenaBoundariesY[arenaChoice]
  511. + Utils.getRandom(maxOffsetY[arenaChoice]);
  512. locations[0] = (new WorldTile(finalX, finalY, 0));
  513. if (player.getLastDuelRules().getRule(25)) {
  514. int direction = Utils.getRandom(1);
  515. if (direction == 0) {
  516. finalX--;
  517. } else {
  518. finalY++;
  519. }
  520. } else {
  521. finalX = arenaBoundariesX[arenaChoice]
  522. + Utils.getRandom(maxOffsetX[arenaChoice]);
  523. finalY = arenaBoundariesY[arenaChoice]
  524. + Utils.getRandom(maxOffsetY[arenaChoice]);
  525. }
  526. locations[1] = (new WorldTile(finalX, finalY, 0));
  527. return locations;
  528. }
  529.  
  530. @Override
  531. public boolean processButtonClick(int interfaceId, int componentId, int slotId, int packetId) {
  532. synchronized (this) {
  533. synchronized (target.getControlerManager().getControler()) {
  534. DuelRules rules = player.getLastDuelRules();
  535. switch (interfaceId) {
  536. case 271:
  537. if (rules.getRule(5) && isDueling) {
  538. player.getPackets().sendGameMessage("You can't use prayers in this duel.");
  539. return false;
  540. }
  541. return true;
  542. case 193:
  543. case 430:
  544. case 192:
  545. if (rules.getRule(2) && isDueling)
  546. return false;
  547. return true;
  548. case 884:
  549. if (componentId == 4) {
  550. if (rules.getRule(9) && isDueling) {
  551. player.getPackets().sendGameMessage("You can't use special attacks in this duel.");
  552. return false;
  553. }
  554. }
  555. return true;
  556. case 631:
  557. switch (componentId) {
  558. case 56: // no range
  559. rules.setRules(0);
  560. return false;
  561. case 57: // no melee
  562. rules.setRules(1);
  563. return false;
  564. case 58: // no magic
  565. rules.setRules(2);
  566. return false;
  567. case 59: // fun wep
  568. rules.setRules(8);
  569. return false;
  570. case 60: // no forfiet
  571. rules.setRules(7);
  572. return false;
  573. case 61: // no drinks
  574. rules.setRules(3);
  575. return false;
  576. case 62: // no food
  577. rules.setRules(4);
  578. return false;
  579. case 63: // no prayer
  580. rules.setRules(5);
  581. return false;
  582. case 64: // no movement
  583. rules.setRules(25);
  584. if (rules.getRule(6)) {
  585. rules.setRule(6, false);
  586. player.getPackets().sendGameMessage(
  587. "You can't have movement without obstacles.");
  588. }
  589. return false;
  590. case 65: // obstacles
  591. rules.setRules(6);
  592. if (rules.getRule(25)) {
  593. rules.setRule(25, false);
  594. player.getPackets().sendGameMessage(
  595. "You can't have obstacles without movement.");
  596. }
  597. return false;
  598. case 66: // enable summoning
  599. rules.setRules(24);
  600. return false;
  601. case 67:// no spec
  602. rules.setRules(9);
  603. return false;
  604. case 21:// no helm
  605. rules.setRules(10);
  606. return false;
  607. case 22:// no cape
  608. rules.setRules(11);
  609. return false;
  610. case 23:// no ammy
  611. rules.setRules(12);
  612. return false;
  613. case 31:// arrows
  614. rules.setRules(23);
  615. return false;
  616. case 24:// weapon
  617. rules.setRules(13);
  618. return false;
  619. case 25:// body
  620. rules.setRules(14);
  621. return false;
  622. case 26:// shield
  623. rules.setRules(15);
  624. return false;
  625. case 27:// legs
  626. rules.setRules(17);
  627. return false;
  628. case 28:// ring
  629. rules.setRules(19);
  630. return false;
  631. case 29: // bots
  632. rules.setRules(20);
  633. return false;
  634. case 30: // gloves
  635. rules.setRules(22);
  636. return false;
  637. case 107:
  638. closeDuelInteraction(true, DuelStage.DECLINED);
  639. return false;
  640. case 46:
  641. accept(true);
  642. return false;
  643. case 47:
  644. switch (packetId) {
  645. case WorldPacketsDecoder.ACTION_BUTTON1_PACKET:
  646. removeItem(slotId, 1);
  647. return false;
  648. case WorldPacketsDecoder.ACTION_BUTTON2_PACKET:
  649. removeItem(slotId, 5);
  650. return false;
  651. case WorldPacketsDecoder.ACTION_BUTTON3_PACKET:
  652. removeItem(slotId, 10);
  653. return false;
  654. case WorldPacketsDecoder.ACTION_BUTTON4_PACKET:
  655. Item item = player.getInventory().getItems().get(slotId);
  656. if (item == null)
  657. return false;
  658. removeItem(slotId, player.getInventory().getItems().getNumberOf(item));
  659. return false;
  660. case WorldPacketsDecoder.ACTION_BUTTON5_PACKET:
  661. player.getInventory().sendExamine(slotId);
  662. return false;
  663. }
  664. return false;
  665. }
  666. case 628:
  667. switch (packetId) {
  668. case WorldPacketsDecoder.ACTION_BUTTON1_PACKET:
  669. addItem(slotId, 1);
  670. return false;
  671. case WorldPacketsDecoder.ACTION_BUTTON2_PACKET:
  672. addItem(slotId, 5);
  673. return false;
  674. case WorldPacketsDecoder.ACTION_BUTTON3_PACKET:
  675. addItem(slotId, 10);
  676. return false;
  677. case WorldPacketsDecoder.ACTION_BUTTON4_PACKET:
  678. Item item = player.getInventory().getItems().get(slotId);
  679. if (item == null)
  680. return false;
  681. addItem(slotId, player.getInventory().getItems().getNumberOf(item));
  682. return false;
  683. case WorldPacketsDecoder.ACTION_BUTTON5_PACKET:
  684. player.getInventory().sendExamine(slotId);
  685. return false;
  686. }
  687. case 626:
  688. switch (componentId) {
  689. case 43:
  690. accept(false);
  691. return false;
  692. }
  693. case 637: // friendly
  694. switch (componentId) {
  695. case 25: // no range
  696. rules.setRules(0);
  697. return false;
  698. case 26: // no melee
  699. rules.setRules(1);
  700. return false;
  701. case 27: // no magic
  702. rules.setRules(2);
  703. return false;
  704. case 28: // fun wep
  705. rules.setRules(8);
  706. return false;
  707. case 29: // no forfiet
  708. rules.setRules(7);
  709. return false;
  710. case 30: // no drinks
  711. rules.setRules(3);
  712. return false;
  713. case 31: // no food
  714. rules.setRules(4);
  715. return false;
  716. case 32: // no prayer
  717. rules.setRules(5);
  718. return false;
  719. case 33: // no movement
  720. rules.setRules(25);
  721. if (rules.getRule(6)) {
  722. rules.setRule(6, false);
  723. player.getPackets().sendGameMessage(
  724. "You can't have movement without obstacles.");
  725. }
  726. return false;
  727. case 34: // obstacles
  728. rules.setRules(6);
  729. if (rules.getRule(25)) {
  730. rules.setRule(25, false);
  731. player.getPackets().sendGameMessage("You can't have obstacles without movement.");
  732. }
  733. return false;
  734. case 35: // enable summoning
  735. rules.setRules(24);
  736. return false;
  737. case 36:// no spec
  738. rules.setRules(9);
  739. return false;
  740. case 43:// no helm
  741. rules.setRules(10);
  742. return false;
  743. case 44:// no cape
  744. rules.setRules(11);
  745. return false;
  746. case 45:// no ammy
  747. rules.setRules(12);
  748. return false;
  749. case 53:// arrows
  750. rules.setRules(23);
  751. return false;
  752. case 46:// weapon
  753. rules.setRules(13);
  754. return false;
  755. case 47:// body
  756. rules.setRules(14);
  757. return false;
  758. case 48:// shield
  759. rules.setRules(15);
  760. return false;
  761. case 49:// legs
  762. rules.setRules(17);
  763. return false;
  764. case 50:// ring
  765. rules.setRules(19);
  766. return false;
  767. case 51: // bots
  768. rules.setRules(20);
  769. return false;
  770. case 52: // gloves
  771. rules.setRules(22);
  772. return false;
  773. case 86:
  774. closeDuelInteraction(true, DuelStage.DECLINED);
  775. return false;
  776. case 21:
  777. accept(true);
  778. return false;
  779. }
  780. case 639:
  781. switch (componentId) {
  782. case 25:
  783. accept(false);
  784. return false;
  785. }
  786. }
  787. }
  788. }
  789. return true;
  790. }
  791.  
  792. public boolean isDueling() {
  793. return isDueling;
  794. }
  795.  
  796. public boolean hasTarget() {
  797. return target != null;
  798. }
  799.  
  800. public Entity getTarget() {
  801. if (hasTarget())
  802. return target;
  803. return null;
  804. }
  805.  
  806. enum DuelStage {
  807. DECLINED, NO_SPACE, SECOND, DONE
  808. }
  809. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement