Guest User

Bank pins

a guest
Jul 3rd, 2015
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.02 KB | None | 0 0
  1. ############# BANK PINS ##################
  2. Player.java
  3. public boolean hasPin;
  4. public boolean enteredPin;
  5. public int bankpin;
  6.  
  7. public int getPin() {
  8. return bankpin;
  9. }
  10. public void setPin(int bankpin) {
  11. this.bankpin = bankpin;
  12. }
  13. ( put this in the run() method)
  14. enteredPin = false; // on login the boolean will set to false so if they want to bank they have to re-enter
  15.  
  16. Command.java
  17. case "removepin":
  18. if (player.hasPin) {
  19. player.getPackets().sendRunScript(108, new Object[] { "Please enter your 4 digit bank pin." });
  20. player.getTemporaryAttributtes().put("Remove_pin", Boolean.TRUE);
  21. }
  22. else {
  23. player.getPackets().sendGameMessage("You have no pin.");
  24. }
  25. return true;
  26. case "checkpin":
  27. if (player.hasPin) {
  28. player.getPackets().sendGameMessage("Your pin is "+player.getPin());
  29. }
  30. else {
  31. player.getPackets().sendGameMessage("Please set a pin via ;;setpin (digits)");
  32. }
  33. return true;
  34. case "setpin":
  35. if (cmd.length < 2) {
  36. player.getPackets().sendGameMessage("To set pin use, ::setpin (digits)");
  37. return true;
  38. }
  39. try {
  40. player.hasPin = true;
  41. player.enteredPin = true;
  42. player.setPin(Integer.valueOf(cmd[1]));
  43. player.getPackets().sendGameMessage("Your pin is "+player.getPin());
  44. } catch (NumberFormatException e) {
  45. player.getPackets().sendGameMessage("Pin failed to set.");
  46. }
  47. return true;
  48.  
  49. WorldPacketsDecoder.java
  50. ( in the ENTER_INTEGER_PACKET )
  51. } else if (player.getTemporaryAttributtes().get("Write_pin") == Boolean.TRUE) {
  52. player.getTemporaryAttributtes().put("Write_pin", Boolean.FALSE);
  53. Bank.WritePin(player, value, true);
  54. } else if (player.getTemporaryAttributtes().get("Remove_pin") == Boolean.TRUE) {
  55. player.getTemporaryAttributtes().put("Remove_pin", Boolean.FALSE);
  56. Bank.RemovePin(player, value, true);
  57. }
  58.  
  59. replace your bank.java with this
  60. package com.rs.game.player;
  61.  
  62. import java.io.Serializable;
  63.  
  64. import com.rs.Settings;
  65. import com.rs.cache.loaders.ItemDefinitions;
  66. import com.rs.game.item.Item;
  67. import com.rs.game.npc.familiar.Familiar;
  68. import com.rs.utils.ItemExamines;
  69. import com.rs.utils.Utils;
  70.  
  71. public class Bank implements Serializable {
  72.  
  73. /**
  74. *
  75. */
  76. private static final long serialVersionUID = 1551246756081236625L;
  77.  
  78. //tab, items
  79. private Item[][] bankTabs;
  80. @SuppressWarnings("unused")
  81. private short bankPin;
  82. private int lastX;
  83.  
  84. @SuppressWarnings("unused")
  85. private long recoveryDelay, activatedTime, lockPunishment;
  86. private byte[] actualPin, requestedPin;
  87. private transient byte stage;
  88.  
  89. private transient Player player;
  90. private transient int currentTab;
  91. private transient Item[] lastContainerCopy;
  92. private transient boolean withdrawNotes;
  93. private transient boolean insertItems;
  94.  
  95. private static final long MAX_BANK_SIZE = 506;
  96.  
  97. public Bank() {
  98. bankTabs = new Item[1][0];
  99. }
  100.  
  101. public void openPlayerBank(Player victim) {
  102. if (victim == null) {
  103. return;
  104. }
  105. player.getInterfaceManager().sendInterface(762);
  106. player.getInterfaceManager().sendInventoryInterface(763);
  107. player.getPackets().sendItems(95, victim.getBank().getContainerCopy());
  108. refreshViewingTab();
  109. refreshTabs();
  110. unlockButtons();
  111. }
  112.  
  113. @SuppressWarnings("unused")
  114. private void checkPinStatus() {
  115. if (recoveryDelay < Utils.currentTimeMillis()) {
  116. if (requestedPin != null) {
  117. actualPin = requestedPin;
  118. requestedPin = null;
  119. } else
  120. actualPin = null;
  121. } else {
  122. player.getInterfaceManager().sendInterface(14); //TODO this interface.
  123. player.setCloseInterfacesEvent(new Runnable() {
  124.  
  125. @Override
  126. public void run() {
  127. if (actualPin != null)
  128. openPin();
  129. }
  130. });
  131. }
  132. }
  133.  
  134. public void openPinSettings() {
  135.  
  136. }
  137.  
  138. public void openPin() {
  139. player.getPackets().sendGlobalConfig(98, 1);
  140. player.getVarBitManager().sendVarBit(1010, -1);
  141. player.getInterfaceManager().sendInterface(13);
  142. //player.getInterfaceManager().setInterface(false, 13, 5, 759);
  143. for (int i = 0; i < 40; i += 4) {
  144. player.getPackets().sendUnlockIComponentOptionSlots(759, i, 0, 100, true, 0, 1, 2);
  145. }
  146. if (recoveryDelay >= Utils.currentTimeMillis()) {
  147. int days = (int) (recoveryDelay / 86400000);
  148. int hours = days / 24;
  149. player.getPackets().sendIComponentText(13, 27, actualPin != null ? "Your bankpin will be set in " + days + " days and " + hours + " hours." : "Your bankpin will be deleted in " + days + " days and " + hours + " hours.");
  150. } else
  151. player.getPackets().sendIComponentText(13, 27, "Bank of " + Settings.SERVER_NAME);
  152. }
  153.  
  154. public void checkPinInput(boolean isConfirmation, int componentId) {
  155. setRequestedPin((byte) ((componentId - 4) / 4));
  156. if (stage++ == 4) {
  157. byte[] requestedPin = getRequestedPin();
  158. if (actualPin == null || requestedPin != actualPin) { //either wrong or switching/adding pin
  159. if (isConfirmation) { // switch / adding pin
  160. this.requestedPin = requestedPin;
  161. recoveryDelay += (86400000 * 3); // three days
  162. StringBuilder builder = new StringBuilder();
  163. builder.append("Your PIN has been set, the personal identification number is : ");
  164. for (int pinNumber : requestedPin)
  165. builder.append(pinNumber + " - ");
  166. player.getPackets().sendGameMessage(builder.toString());
  167. } else {
  168. player.getPackets().sendGameMessage("The PIN you have put is incorrect.");
  169. }
  170. player.closeInterfaces();
  171. } else if (requestedPin == actualPin) { // pin is correct.
  172. player.getPackets().sendGameMessage("Successfully entered your PIN number.");
  173. player.getBank().openBank();
  174. activatedTime += (3600000 * 6); // six hours
  175. } else {
  176. player.getPackets().sendGameMessage("The PIN you have selected is in the same sequence your currently have. Please pick different numbers or sequences.");
  177. }
  178. }
  179. }
  180.  
  181. private byte[] getRequestedPin() {
  182. byte[] pin = (byte[]) player.getTemporaryAttributtes().get("temporary_pin");
  183. if (pin == null)
  184. return (byte[]) player.getTemporaryAttributtes().put("temporary_pin", new byte[4]);
  185. return pin;
  186. }
  187.  
  188. private void setRequestedPin(byte value) {
  189. byte[] pin = (byte[]) player.getTemporaryAttributtes().get("temporary_pin");
  190. if (pin == null)
  191. pin = new byte[5];
  192. pin[stage] = value;
  193. player.getTemporaryAttributtes().put("temporary_pin", pin);
  194. }
  195.  
  196.  
  197.  
  198. public void removeItem(int id) {
  199. if(bankTabs != null) {
  200. for(int i = 0; i < bankTabs.length; i++) {
  201. for(int i2 = 0; i2 < bankTabs[i].length; i2++) {
  202. if(bankTabs[i][i2].getId() == id)
  203. bankTabs[i][i2].setId(0); //dwarf remains
  204. }
  205. }
  206. }
  207. }
  208.  
  209.  
  210. public void setPlayer(Player player) {
  211. this.player = player;
  212. if(bankTabs == null || bankTabs.length == 0)
  213. bankTabs = new Item[1][0];
  214. }
  215.  
  216. @SuppressWarnings("null")
  217. public void setItem(int slotId, int amt) {
  218. Item item = getItem(slotId);
  219. if (item == null) {
  220. item.setAmount(amt);
  221. refreshItems();
  222. refreshTabs();
  223. refreshViewingTab();
  224. }
  225. }
  226.  
  227. public void refreshTabs() {
  228. for(int slot = 1; slot < 9; slot++)
  229. refreshTab(slot);
  230. }
  231.  
  232. public int getTabSize(int slot) {
  233. if(slot >= bankTabs.length)
  234. return 0;
  235. return bankTabs[slot].length;
  236. }
  237.  
  238. public void withdrawLastAmount(int bankSlot) {
  239. withdrawItem(bankSlot, lastX);
  240. }
  241.  
  242. public void withdrawItemButOne(int fakeSlot) {
  243. int[] fromRealSlot = getRealSlot(fakeSlot);
  244. Item item = getItem(fromRealSlot);
  245. if (item == null)
  246. return;
  247. if (item.getAmount() <= 1) {
  248. player.getPackets().sendGameMessage("You only have one of this item in your bank");
  249. return;
  250. }
  251. withdrawItem(fakeSlot, item.getAmount() - 1);
  252. }
  253.  
  254. public void depositLastAmount(int bankSlot) {
  255. depositItem(bankSlot, lastX, true);
  256. }
  257.  
  258. public void depositAllInventory(boolean banking) {
  259. if(Bank.MAX_BANK_SIZE - getBankSize() < player.getInventory().getItems().getSize()) {
  260. player.getPackets().sendGameMessage("Not enough space in your bank.");
  261. return;
  262. }
  263. for(int i = 0; i < 28; i++)
  264. depositItem(i, Integer.MAX_VALUE, false);
  265. refreshTab(currentTab);
  266. refreshItems();
  267. }
  268.  
  269. public void depositAllBob(boolean banking) {
  270. Familiar familiar = player.getFamiliar();
  271. if(familiar == null || familiar.getBob() == null)
  272. return;
  273. int space = addItems(familiar.getBob().getBeastItems().getItems(), banking);
  274. if(space != 0) {
  275. for(int i = 0; i < space; i++)
  276. familiar.getBob().getBeastItems().set(i, null);
  277. familiar.getBob().sendInterItems();
  278. }
  279. if(space < familiar.getBob().getBeastItems().getSize()) {
  280. player.getPackets().sendGameMessage("Not enough space in your bank.");
  281. return;
  282. }
  283. }
  284.  
  285. public void depositAllEquipment(boolean banking) {
  286. int space = addItems(player.getEquipment().getItems().getItems(), banking);
  287. if(space != 0) {
  288. for(int i = 0; i < space; i++)
  289. player.getEquipment().getItems().set(i, null);
  290. player.getEquipment().init();
  291. player.getAppearence().loadAppearanceBlock();
  292. }
  293. if(space < player.getEquipment().getItems().getSize()) {
  294. player.getPackets().sendGameMessage("Not enough space in your bank.");
  295. return;
  296. }
  297. }
  298.  
  299.  
  300. public void collapse(int tabId) {
  301. if(tabId == 0 || tabId >= bankTabs.length)
  302. return;
  303. Item[] items = bankTabs[tabId];
  304. for(Item item : items)
  305. removeItem(getItemSlot(item.getId()), item.getAmount(), false, true);
  306. for(Item item : items)
  307. addItem(item.getId(), item.getAmount(), 0, false);
  308. refreshTabs();
  309. refreshItems();
  310. }
  311.  
  312.  
  313. public void depositAllMoneyPouch(boolean bank) {
  314. int coins = player.getMoneyPouch().getCoinsAmount();
  315. int space = 0;
  316. if (coins != 0)
  317. space = addItems(new Item[] { new Item(995, coins) }, bank);
  318. if (space != 0) {
  319. if (space < 1) {
  320. player.getPackets().sendGameMessage("Not enough space in your bank.");
  321. return;
  322. }
  323. player.getMoneyPouch().sendAddOrRemove(coins, true, 1);
  324. }
  325. }
  326.  
  327.  
  328. public void switchItem(int fromSlot, int toSlot, int fromComponentId,int toComponentId) {
  329. if(toSlot == 65535) {
  330. int toTab = toComponentId >= 76 ? 8 - (84 - toComponentId) : 9 - ((toComponentId-46) / 2);
  331. if(toTab < 0 || toTab > 9)
  332. return;
  333. if(bankTabs.length == toTab) {
  334. int[] fromRealSlot = getRealSlot(fromSlot);
  335. if(fromRealSlot == null)
  336. return;
  337. if(toTab == fromRealSlot[0]) {
  338. switchItem(fromSlot, getStartSlot(toTab));
  339. return;
  340. }
  341. Item item = getItem(fromRealSlot);
  342. if(item == null)
  343. return;
  344. removeItem(fromSlot, item.getAmount(), false, true);
  345. createTab();
  346. bankTabs[bankTabs.length-1] = new Item[] {item};
  347. refreshTab(fromRealSlot[0]);
  348. refreshTab(toTab);
  349. refreshItems();
  350. }else if(bankTabs.length > toTab) {
  351. int[] fromRealSlot = getRealSlot(fromSlot);
  352. if(fromRealSlot == null)
  353. return;
  354. if(toTab == fromRealSlot[0]) {
  355. switchItem(fromSlot, getStartSlot(toTab));
  356. return;
  357. }
  358. Item item = getItem(fromRealSlot);
  359. if(item == null)
  360. return;
  361. boolean removed = removeItem(fromSlot, item.getAmount(), false, true);
  362. if(!removed)
  363. refreshTab(fromRealSlot[0]);
  364. else if(fromRealSlot[0] != 0 && toTab >= fromRealSlot[0])
  365. toTab -= 1;
  366. refreshTab(fromRealSlot[0]);
  367. addItem(item.getId(), item.getAmount(), toTab, true);
  368. }
  369. }else
  370. switchItem(fromSlot, toSlot);
  371. }
  372.  
  373. public void switchItem(int fromSlot, int toSlot) {
  374. int[] fromRealSlot = getRealSlot(fromSlot);
  375. Item fromItem = getItem(fromRealSlot);
  376. if(fromItem == null)
  377. return;
  378. int[] toRealSlot = getRealSlot(toSlot);
  379. Item toItem = getItem(toRealSlot);
  380. if(toItem == null)
  381. return;
  382. bankTabs[fromRealSlot[0]][fromRealSlot[1]] = toItem;
  383. bankTabs[toRealSlot[0]][toRealSlot[1]] = fromItem;
  384. refreshTab(fromRealSlot[0]);
  385. if(fromRealSlot[0] != toRealSlot[0])
  386. refreshTab(toRealSlot[0]);
  387. refreshItems();
  388. }
  389.  
  390. public void openSetPin() { // TODO
  391.  
  392. }
  393.  
  394. public void openDepositBox() {
  395. player.getInterfaceManager().sendInterface(11);
  396. player.getInterfaceManager().closeInventory();
  397. player.getInterfaceManager().closeEquipment();
  398. final int lastGameTab = player.getInterfaceManager().openGameTab(9); // friends
  399. // tab
  400. sendBoxInterItems();
  401. player.getPackets().sendIComponentText(11, 13,
  402. "Bank Of " + Settings.SERVER_NAME + " - Deposit Box");
  403. player.setCloseInterfacesEvent(new Runnable() {
  404. @Override
  405. public void run() {
  406. player.getInterfaceManager().sendInventory();
  407. player.getInventory().unlockInventoryOptions();
  408. player.getInterfaceManager().sendEquipment();
  409. player.getInterfaceManager().openGameTab(lastGameTab);
  410. }
  411. });
  412. }
  413.  
  414. public void sendBoxInterItems() {
  415. player.getPackets().sendInterSetItemsOptionsScript(11, 17,
  416. 93, 6, 5, "Deposit-1", "Deposit-5",
  417. "Deposit-10", "Deposit-All", "Deposit-X", "Examine");
  418. player.getPackets().sendUnlockIComponentOptionSlots(11, 17, 0, 27, 0,
  419. 1, 2, 3, 4, 5);
  420. }
  421. public static void RemovePin(Player player, int value, boolean haspin) {
  422. if (haspin) {
  423. if (player.getPin() != value) {
  424. player.getDialogueManager().startDialogue("SimpleMessage", "You failed to correctly enter your current bank pin.");
  425. }
  426. else {
  427. if (player.getPin() == value) {
  428. player.getDialogueManager().startDialogue("SimpleMessage", "You remove your bank pin.");
  429. player.hasPin = false;
  430. player.enteredPin = false;
  431. }
  432. }
  433. }
  434. }
  435. public static void WritePin(Player player, int value, boolean pinned) {
  436. if (pinned) {
  437. if (player.getPin() != value) {
  438. player.getDialogueManager().startDialogue("SimpleMessage", "You failed to correctly enter your pin.");
  439. }
  440. else {
  441. if (player.getPin() == value) {
  442. player.getDialogueManager().startDialogue("SimpleMessage", "You correctly enter your bank pin, please re-open your bank.");
  443. player.enteredPin = true;
  444. }
  445. }
  446. }
  447. }
  448. public void openBank() {
  449. if (player.hasPin && !player.enteredPin) {
  450. player.getPackets().sendRunScript(108, new Object[] { "Please enter your 4 digit bank pin." });
  451. player.getTemporaryAttributtes().put("Write_pin", Boolean.TRUE);
  452. }
  453. else {
  454. player.getInterfaceManager().sendInterface(762);
  455. player.getInterfaceManager().sendInventoryInterface(763);
  456. refreshViewingTab();
  457. refreshTabs();
  458. unlockButtons();
  459. sendItems();
  460. refreshLastX();
  461. }
  462. if (!player.hasPin) {
  463. player.getPackets().sendGameMessage("Please consider setting yourself a bankpin via ;;setpin (digits)");
  464. }
  465. }
  466.  
  467. public void refreshLastX() {
  468. player.getPackets().sendConfig(1249, lastX);
  469. }
  470.  
  471. public void createTab() {
  472. int slot = bankTabs.length;
  473. Item[][] tabs = new Item[slot+1][];
  474. System.arraycopy(bankTabs, 0, tabs, 0, slot);
  475. tabs[slot] = new Item[0];
  476. bankTabs = tabs;
  477. }
  478.  
  479. public void destroyTab(int slot) {
  480. Item[][] tabs = new Item[bankTabs.length-1][];
  481. System.arraycopy(bankTabs, 0, tabs, 0, slot);
  482. System.arraycopy(bankTabs, slot+1, tabs, slot, bankTabs.length - slot - 1);
  483. bankTabs = tabs;
  484. if(currentTab != 0 && currentTab >= slot)
  485. currentTab--;
  486. }
  487.  
  488. public boolean hasBankSpace() {
  489. return getBankSize() < MAX_BANK_SIZE;
  490. }
  491. public void withdrawItem(int bankSlot, int quantity) {
  492. if (quantity < 1)
  493. return;
  494. Item item = getItem(getRealSlot(bankSlot));
  495. if (item == null)
  496. return;
  497. if (item.getAmount() < quantity)
  498. item = new Item(item.getId(), item.getAmount());
  499. else
  500. item = new Item(item.getId(), quantity);
  501. boolean noted = false;
  502. ItemDefinitions defs = item.getDefinitions();
  503. if (withdrawNotes) {
  504. if (!defs.isNoted() && defs.getCertId() != -1) {
  505. item.setId(defs.getCertId());
  506. noted = true;
  507. } else
  508. player.getPackets().sendGameMessage("You cannot withdraw this item as a note.");
  509. }
  510. if (noted || defs.isStackable()) {
  511. if(player.getInventory().getItems().containsOne(item)) {
  512. int slot = player.getInventory().getItems().getThisItemSlot(item);
  513. Item invItem = player.getInventory().getItems().get(slot);
  514. if(invItem.getAmount() + item.getAmount() <= 0) {
  515. item.setAmount(Integer.MAX_VALUE - invItem.getAmount());
  516. player.getPackets().sendGameMessage("Not enough space in your inventory.");
  517. }
  518. }else if (!player.getInventory().hasFreeSlots()) {
  519. player.getPackets().sendGameMessage("Not enough space in your inventory.");
  520. return;
  521. }
  522. }else{
  523. int freeSlots = player.getInventory().getFreeSlots();
  524. if(freeSlots == 0) {
  525. player.getPackets().sendGameMessage("Not enough space in your inventory.");
  526. return;
  527. }
  528. if(freeSlots < item.getAmount()) {
  529. item.setAmount(freeSlots);
  530. player.getPackets().sendGameMessage("Not enough space in your inventory.");
  531. }
  532. }
  533. removeItem(bankSlot, item.getAmount(), true, false);
  534. player.getInventory().addItem(item);
  535. }
  536.  
  537. public void sendExamine(int fakeSlot) {
  538. int[] slot = getRealSlot(fakeSlot);
  539. if(slot == null)
  540. return;
  541. Item item = bankTabs[slot[0]][slot[1]];
  542. player.getPackets().sendGameMessage(ItemExamines.getExamine(item));
  543. }
  544.  
  545. public void depositItem(int invSlot, int quantity, boolean refresh) {
  546. if (quantity < 1 || invSlot < 0 || invSlot > 27)
  547. return;
  548. Item item = player.getInventory().getItem(invSlot);
  549. if (item == null)
  550. return;
  551. int amt = player.getInventory().getItems().getNumberOf(item);
  552. if (amt < quantity)
  553. item = new Item(item.getId(), amt);
  554. else
  555. item = new Item(item.getId(), quantity);
  556. ItemDefinitions defs = item.getDefinitions();
  557. int originalId = item.getId();
  558. if (defs.isNoted() && defs.getCertId() != -1)
  559. item.setId(defs.getCertId());
  560. Item bankedItem = getItem(item.getId());
  561. if(bankedItem != null) {
  562. if(bankedItem.getAmount() + item.getAmount() <= 0) {
  563. item.setAmount(Integer.MAX_VALUE - bankedItem.getAmount());
  564. player.getPackets().sendGameMessage("Not enough space in your bank.");
  565. }
  566. }else if(!hasBankSpace()) {
  567. player.getPackets().sendGameMessage("Not enough space in your bank.");
  568. return;
  569. }
  570. player.getInventory().deleteItem(invSlot, new Item(originalId, item.getAmount()));
  571. addItem(item, refresh);
  572. }
  573.  
  574. private void addItem(Item item, boolean refresh) {
  575. addItem(item.getId(), item.getAmount(), refresh);
  576. }
  577.  
  578. public int addItems(Item[] items, boolean refresh) {
  579. int space = (int) (MAX_BANK_SIZE - getBankSize());
  580. if(space != 0) {
  581. space = (space < items.length ? space : items.length);
  582. for(int i = 0; i < space; i++) {
  583. if(items[i] == null)
  584. continue;
  585. addItem(items[i], false);
  586. }
  587. if(refresh) {
  588. refreshTabs();
  589. refreshItems();
  590. }
  591. }
  592. return space;
  593. }
  594.  
  595. public void addItem(int id, int quantity, boolean refresh) {
  596. addItem(id, quantity, currentTab, refresh);
  597. }
  598.  
  599. public void addItem(int id, int quantity, int creationTab, boolean refresh) {
  600. int[] slotInfo = getItemSlot(id);
  601. if(slotInfo == null) {
  602. if(creationTab >= bankTabs.length)
  603. creationTab = bankTabs.length-1;
  604. if (creationTab < 0) //fixed now, alex
  605. creationTab = 0;
  606. int slot = bankTabs[creationTab].length;
  607. Item[] tab = new Item[slot+1];
  608. System.arraycopy(bankTabs[creationTab], 0, tab, 0, slot);
  609. tab[slot] = new Item(id, quantity);
  610. bankTabs[creationTab] = tab;
  611. if(refresh)
  612. refreshTab(creationTab);
  613. }else {
  614. Item item = bankTabs[slotInfo[0]][slotInfo[1]];
  615. bankTabs[slotInfo[0]][slotInfo[1]] = new Item(item.getId(), item.getAmount() + quantity);
  616. }
  617. if(refresh)
  618. refreshItems();
  619. }
  620.  
  621. public boolean removeItem(int fakeSlot, int quantity, boolean refresh, boolean forceDestroy) {
  622. return removeItem(getRealSlot(fakeSlot), quantity, refresh, forceDestroy);
  623. }
  624.  
  625. public boolean removeItem(int[] slot, int quantity, boolean refresh, boolean forceDestroy) {
  626. if(slot == null)
  627. return false;
  628. Item item = bankTabs[slot[0]][slot[1]];
  629. boolean destroyed = false;
  630. if(quantity >= item.getAmount()) {
  631. if(bankTabs[slot[0]].length == 1 && (forceDestroy || bankTabs.length != 1)) {
  632. destroyTab(slot[0]);
  633. if (refresh)
  634. refreshTabs();
  635. destroyed = true;
  636. }else{
  637. Item[] tab = new Item[bankTabs[slot[0]].length-1];
  638. System.arraycopy(bankTabs[slot[0]], 0, tab, 0, slot[1]);
  639. System.arraycopy(bankTabs[slot[0]], slot[1]+1, tab, slot[1], bankTabs[slot[0]].length - slot[1] - 1);
  640. bankTabs[slot[0]] = tab;
  641. if(refresh)
  642. refreshTab(slot[0]);
  643. }
  644. }else
  645. bankTabs[slot[0]][slot[1]] = new Item(item.getId(), item.getAmount() - quantity);
  646. if(refresh)
  647. refreshItems();
  648. return destroyed;
  649. }
  650.  
  651. public Item getItem(int id) {
  652. for(int slot = 0; slot < bankTabs.length; slot++) {
  653. for(Item item : bankTabs[slot])
  654. if(item.getId() == id)
  655. return item;
  656. }
  657. return null;
  658. }
  659.  
  660. public int[] getItemSlot(int id) {
  661. for(int tab = 0; tab < bankTabs.length; tab++) {
  662. for(int slot = 0; slot < bankTabs[tab].length; slot++)
  663. if(bankTabs[tab][slot].getId() == id)
  664. return new int[]{tab, slot};
  665. }
  666. return null;
  667. }
  668.  
  669. public Item getItem(int[] slot) {
  670. if(slot == null)
  671. return null;
  672. return bankTabs[slot[0]][slot[1]];
  673. }
  674.  
  675. public int getStartSlot(int tabId) {
  676. int slotId = 0;
  677. for(int tab = 1; tab < (tabId == 0 ? bankTabs.length : tabId); tab++)
  678. slotId += bankTabs[tab].length;
  679.  
  680. return slotId;
  681.  
  682. }
  683.  
  684. public int[] getRealSlot(int slot) {
  685. for(int tab = 1; tab < bankTabs.length; tab++) {
  686. if(slot >= bankTabs[tab].length)
  687. slot -= bankTabs[tab].length;
  688. else
  689. return new int[] {tab, slot};
  690. }
  691. if(slot >= bankTabs[0].length)
  692. return null;
  693. return new int[] {0, slot};
  694. }
  695.  
  696. public void refreshViewingTab() {
  697. player.getPackets().sendConfigByFile(4893, currentTab+1);
  698. }
  699.  
  700. public void refreshTab(int slot) {
  701. if(slot == 0)
  702. return;
  703. player.getPackets().sendConfigByFile(4885 + (slot-1), getTabSize(slot));
  704. }
  705.  
  706. public void sendItems() {
  707. player.getPackets().sendItems(95, getContainerCopy());
  708. }
  709.  
  710. public void refreshItems(int[] slots) {
  711. player.getPackets().sendUpdateItems(95, getContainerCopy(), slots);
  712. }
  713.  
  714. public Item[] getContainerCopy() {
  715. if(lastContainerCopy == null)
  716. lastContainerCopy = generateContainer();
  717. return lastContainerCopy;
  718. }
  719.  
  720. public void refreshItems() {
  721. refreshItems(generateContainer(), getContainerCopy());
  722. }
  723.  
  724. public void refreshItems(Item[] itemsAfter, Item[] itemsBefore) {
  725. if(itemsBefore.length != itemsAfter.length) {
  726. lastContainerCopy = itemsAfter;
  727. sendItems();
  728. return;
  729. }
  730. int[] changedSlots = new int[itemsAfter.length];
  731. int count = 0;
  732. for (int index = 0; index < itemsAfter.length; index++) {
  733. if (itemsBefore[index] != itemsAfter[index])
  734. changedSlots[count++] = index;
  735. }
  736. int[] finalChangedSlots = new int[count];
  737. System.arraycopy(changedSlots, 0, finalChangedSlots, 0, count);
  738. lastContainerCopy = itemsAfter;
  739. refreshItems(finalChangedSlots);
  740. }
  741.  
  742. public int getBankSize() {
  743. int size = 0;
  744. for(int i = 0; i < bankTabs.length; i++)
  745. size += bankTabs[i].length;
  746. return size;
  747. }
  748.  
  749. public Item[] generateContainer() {
  750. Item[] container = new Item[getBankSize()];
  751. int count = 0;
  752. for(int slot = 1; slot < bankTabs.length; slot++) {
  753. System.arraycopy(bankTabs[slot], 0, container, count, bankTabs[slot].length);
  754. count += bankTabs[slot].length;
  755. }
  756. System.arraycopy(bankTabs[0], 0, container, count, bankTabs[0].length);
  757. return container;
  758. }
  759.  
  760. public void unlockButtons() {
  761. // unlock bank inter all options
  762. player.getPackets().sendIComponentSettings(762, 95, 0, 516, 2622718);
  763. // unlock bank inv all options
  764. player.getPackets().sendIComponentSettings(763, 0, 0, 27, 2425982);
  765. }
  766.  
  767. public void switchWithdrawNotes() {
  768. withdrawNotes = !withdrawNotes;
  769. }
  770.  
  771. public void switchInsertItems() {
  772. insertItems = !insertItems;
  773. player.getPackets().sendConfig(305, insertItems ? 1 : 0);
  774. }
  775.  
  776. public void setCurrentTab(int currentTab) {
  777. if(currentTab >= bankTabs.length)
  778. return;
  779. this.currentTab = currentTab;
  780. }
  781.  
  782. public int getLastX() {
  783. return lastX;
  784. }
  785.  
  786. public void setLastX(int lastX) {
  787. this.lastX = lastX;
  788. }
  789. }
Add Comment
Please, Sign In to add comment