Advertisement
Guest User

Untitled

a guest
Aug 30th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 85.98 KB | None | 0 0
  1. package org.perception.model.items;
  2.  
  3. import java.util.Arrays;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.Objects;
  7. import java.util.Optional;
  8.  
  9. import org.perception.Config;
  10. import org.perception.Server;
  11. import org.perception.model.interaction.MultiplayerSessionType;
  12. import org.perception.model.interaction.duel.DuelSession;
  13. import org.perception.model.interaction.duel.DuelSessionRules.Rule;
  14. import org.perception.model.items.bank.BankItem;
  15. import org.perception.model.items.bank.BankTab;
  16. import org.perception.model.npcs.NPCHandler;
  17. import org.perception.model.players.Boundary;
  18. import org.perception.model.players.Player;
  19. import org.perception.model.players.PlayerHandler;
  20. import org.perception.model.players.PlayerSave;
  21. import org.perception.model.players.Requirement;
  22. import org.perception.model.players.combat.Degrade.DegradableItem;
  23. import org.perception.model.players.combat.range.RangeData;
  24. import org.perception.model.shops.ShopAssistant;
  25. import org.perception.util.Misc;
  26.  
  27. /**
  28. * Indicates Several Usage Of Items
  29. *
  30. * @author Sanity Revised by Shawn Notes by Shawn
  31. */
  32. public class ItemAssistant {
  33.  
  34. private Player c;
  35.  
  36. public ItemAssistant(Player client) {
  37. this.c = client;
  38. }
  39.  
  40. public boolean updateInventory = false;
  41.  
  42. public void updateInventory() {
  43. updateInventory = false;
  44. resetItems(3214);
  45. }
  46.  
  47. public int[] Nests = { 5291, 5292, 5293, 5294, 5295, 5296, 5297, 5298, 5299, 5300, 5301, 5302, 5303, 5304 };
  48.  
  49. public int getWornItemSlot(int itemId) {
  50. for (int i = 0; i < c.playerEquipment.length; i++)
  51. if (c.playerEquipment[i] == itemId)
  52. return i;
  53. return -1;
  54. }
  55.  
  56. public void handleNests(int itemId) {
  57. int reward = Nests[Misc.random(14)];
  58. addItem(reward, 3 + Misc.random(5));
  59. deleteItem(itemId, 1);
  60. c.sendMessage("You search the nest");
  61. }
  62.  
  63. /**
  64. * Sends an item to the bank in any tab possible.
  65. *
  66. * @param itemId
  67. * the item id
  68. * @param amount
  69. * the item amount
  70. */
  71. public void sendItemToAnyTab(int itemId, int amount) {
  72. BankItem item = new BankItem(itemId, amount);
  73. for (BankTab tab : c.getBank().getBankTab()) {
  74. if (tab.freeSlots() > 0 || tab.contains(item)) {
  75. c.getBank().setCurrentBankTab(tab);
  76. addItemToBank(itemId, amount);
  77. return;
  78. }
  79. }
  80. addItemToBank(itemId, amount);
  81. }
  82.  
  83. /**
  84. * Adds an item to the players inventory, bank, or drops it. It will do this
  85. * under any circumstance so if it cannot be added to the inventory it will
  86. * next try to send it to the bank and if it cannot, it will drop it.
  87. *
  88. * @param itemId
  89. * the item
  90. * @param amount
  91. * the amount of said item
  92. */
  93. public void addItemUnderAnyCircumstance(int itemId, int amount) {
  94. if (!addItem(itemId, amount)) {
  95. sendItemToAnyTabOrDrop(new BankItem(itemId, amount), c.getX(), c.getY());
  96. }
  97. }
  98.  
  99. /**
  100. * The x and y represents the possible x and y location of the dropped item
  101. * if in fact it cannot be added to the bank.
  102. *
  103. * @param item
  104. * @param x
  105. * @param y
  106. */
  107. public void sendItemToAnyTabOrDrop(BankItem item, int x, int y) {
  108. item = new BankItem(item.getId() + 1, item.getAmount());
  109. if (bankContains(item.getId() - 2)) {
  110. if (isBankSpaceAvailable(item)) {
  111. sendItemToAnyTab(item.getId() - 1, item.getAmount());
  112. } else {
  113. Server.itemHandler.createGroundItem(c, item.getId() - 1, x, y, c.heightLevel, item.getAmount(),
  114. c.index);
  115. }
  116. } else {
  117. sendItemToAnyTab(item.getId() - 1, item.getAmount());
  118. }
  119. }
  120.  
  121. /**
  122. * Auth all slots and determine whether or not a slot is accompanied by that
  123. * item
  124. */
  125. public boolean isWearingItem(int itemID) {
  126. for (int i = 0; i < c.playerEquipment.length; i++) {
  127. if (c.playerEquipment[i] == itemID) {
  128. return true;
  129. }
  130. }
  131. return false;
  132. }
  133.  
  134. /**
  135. * Auth all slots and determine the amount of said item worn in that slot
  136. */
  137. public int getWornItemAmount(int itemID) {
  138. for (int i = 0; i < c.playerEquipment.length; i++) {
  139. if (c.playerEquipment[i] == itemID) {
  140. return c.playerEquipmentN[i];
  141. }
  142. }
  143. return 0;
  144. }
  145.  
  146. /**
  147. * Trimmed and untrimmed skillcapes.
  148. */
  149. public int[][] skillcapes = { { 9747, 9748 }, // Attack
  150. { 9753, 9754 }, // Defence
  151. { 9750, 9751 }, // Strength
  152. { 9768, 9769 }, // Hitpoints
  153. { 9756, 9757 }, // Range
  154. { 9759, 9760 }, // Prayer
  155. { 9762, 9763 }, // Magic
  156. { 9801, 9802 }, // Cooking
  157. { 9807, 9808 }, // Woodcutting
  158. { 9783, 9784 }, // Fletching
  159. { 9798, 9799 }, // Fishing
  160. { 9804, 9805 }, // FiremakingData
  161. { 9780, 9781 }, // Crafting
  162. { 9795, 9796 }, // Smithing
  163. { 9792, 9793 }, // Mining
  164. { 9774, 9775 }, // Herblore
  165. { 9771, 9772 }, // Agility
  166. { 9777, 9778 }, // Thieving
  167. { 9786, 9787 }, // Slayer
  168. { 9810, 9811 }, // Farming
  169. { 9765, 9766 } // Runecraft
  170. };
  171.  
  172. /**
  173. * Broken barrows items.
  174. */
  175. public int[][] brokenBarrows = { { 4708, 4860 }, { 4710, 4866 }, { 4712, 4872 }, { 4714, 4878 }, { 4716, 4884 },
  176. { 4720, 4896 }, { 4718, 4890 }, { 4720, 4896 }, { 4722, 4902 }, { 4732, 4932 }, { 4734, 4938 },
  177. { 4736, 4944 }, { 4738, 4950 }, { 4724, 4908 }, { 4726, 4914 }, { 4728, 4920 }, { 4730, 4926 },
  178. { 4745, 4956 }, { 4747, 4926 }, { 4749, 4968 }, { 4751, 4794 }, { 4753, 4980 }, { 4755, 4986 },
  179. { 4757, 4992 }, { 4759, 4998 } };
  180.  
  181. /**
  182. * Empties all of (a) player's items.
  183. */
  184. public void resetItems(int WriteFrame) {
  185. // synchronized (c) {
  186. if (c.getOutStream() != null && c != null) {
  187. c.getOutStream().createFrameVarSizeWord(53);
  188. c.getOutStream().writeWord(WriteFrame);
  189. c.getOutStream().writeWord(c.playerItems.length);
  190. for (int i = 0; i < c.playerItems.length; i++) {
  191. if (c.playerItemsN[i] > 254) {
  192. c.getOutStream().writeByte(255);
  193. c.getOutStream().writeDWord_v2(c.playerItemsN[i]);
  194. } else {
  195. c.getOutStream().writeByte(c.playerItemsN[i]);
  196. }
  197. c.getOutStream().writeWordBigEndianA(c.playerItems[i]);
  198. }
  199. c.getOutStream().endFrameVarSizeWord();
  200. c.flushOutStream();
  201. }
  202. // }
  203. }
  204.  
  205. public boolean isNotable(int itemId) {
  206. return ItemDefinition.forId(itemId).isNoted();
  207. }
  208.  
  209. public void addItemToBank(int itemId, int amount) {
  210. BankTab tab = c.getBank().getCurrentBankTab();
  211. BankItem item = new BankItem(itemId + 1, amount);
  212. Iterator<BankTab> iterator = Arrays.asList(c.getBank().getBankTab()).iterator();
  213. while (iterator.hasNext()) {
  214. BankTab t = iterator.next();
  215. if (t != null && t.size() > 0) {
  216. Iterator<BankItem> iterator2 = t.getItems().iterator();
  217. while (iterator2.hasNext()) {
  218. BankItem i = iterator2.next();
  219. if (i.getId() == item.getId() && !isNotable(itemId)) {
  220. if (t.getTabId() != tab.getTabId()) {
  221. tab = t;
  222. }
  223. } else {
  224. if (isNotable(itemId) && i.getId() == item.getId() - 1) {
  225. item = new BankItem(itemId, amount);
  226. if (t.getTabId() != tab.getTabId()) {
  227. tab = t;
  228. }
  229. }
  230. }
  231. }
  232. }
  233. }
  234. if (isNotable(itemId))
  235. item = new BankItem(itemId, amount);
  236. if (tab.freeSlots() == 0) {
  237. c.sendMessage("The item has been dropped on the floor.");
  238. Server.itemHandler.createGroundItem(c, itemId, c.absX, c.absY, c.heightLevel, amount, c.index);
  239. return;
  240. }
  241. long totalAmount = ((long) tab.getItemAmount(item) + (long) item.getAmount());
  242. if (totalAmount >= Integer.MAX_VALUE) {
  243. c.sendMessage("The item has been dropped on the floor.");
  244. Server.itemHandler.createGroundItem(c, itemId, c.absX, c.absY, c.heightLevel, amount, c.index);
  245. return;
  246. }
  247. tab.add(item);
  248. resetTempItems();
  249. if (c.isBanking)
  250. resetBank();
  251. c.sendMessage(getItemName(itemId) + " x" + item.getAmount() + " has been added to your bank.");
  252. }
  253.  
  254. public void addItemToBank1(int itemId, int slot, int amount) {
  255. BankTab tab = c.getBank().getCurrentBankTab();
  256. BankItem item = new BankItem(itemId + 1, amount);
  257. Iterator<BankTab> iterator = Arrays.asList(c.getBank().getBankTab()).iterator();
  258. while (iterator.hasNext()) {
  259. BankTab t = iterator.next();
  260. if (t != null && t.size() > 0) {
  261. Iterator<BankItem> iterator2 = t.getItems().iterator();
  262. while (iterator2.hasNext()) {
  263. BankItem i = iterator2.next();
  264. if (i.getId() == item.getId() && !isNotable(itemId)) {
  265. if (t.getTabId() != tab.getTabId()) {
  266. tab = t;
  267. }
  268. } else {
  269. if (isNotable(itemId) && i.getId() == item.getId() - 1) {
  270. item = new BankItem(itemId, amount);
  271. if (t.getTabId() != tab.getTabId()) {
  272. tab = t;
  273. }
  274. }
  275. }
  276. }
  277. }
  278. }
  279. if (isNotable(itemId))
  280. item = new BankItem(itemId, amount);
  281. if (tab.freeSlots() == 0) {
  282. c.sendMessage("The item has been dropped on the floor.");
  283. Server.itemHandler.createGroundItem(c, itemId, c.absX, c.absY, c.heightLevel, amount, c.index);
  284. return;
  285. }
  286. long totalAmount = ((long) tab.getItemAmount(item) + (long) item.getAmount());
  287. if (totalAmount >= Integer.MAX_VALUE) {
  288. c.sendMessage("The item has been dropped on the floor.");
  289. Server.itemHandler.createGroundItem(c, itemId, c.absX, c.absY, c.heightLevel, amount, c.index);
  290. return;
  291. }
  292. tab.add(item);
  293. resetTempItems();
  294. if (c.isBanking)
  295. resetBank();
  296. c.sendMessage(getItemName(itemId) + " x" + item.getAmount() + " has been added to your bank.");
  297. }
  298.  
  299. /**
  300. * Counts (a) player's items.
  301. *
  302. * @param itemID
  303. * @return count start
  304. */
  305. public int getItemCount(int itemID) {
  306. int count = 0;
  307. for (int j = 0; j < c.playerItems.length; j++) {
  308. if (c.playerItems[j] == itemID + 1) {
  309. count += c.playerItemsN[j];
  310. }
  311. }
  312. return count;
  313. }
  314.  
  315. public void replaceItem(Player c, int i, int l) {
  316. for (int k = 0; k < c.playerItems.length; k++) {
  317. if (playerHasItem(i, 1)) {
  318. deleteItem(i, getItemSlot(i), 1);
  319. addItem(l, 1);
  320. }
  321. }
  322. }
  323.  
  324. /**
  325. * Gets the bonus' of an item.
  326. */
  327. public void writeBonus() {
  328. int offset = 0;
  329. String send = "";
  330. for (int i = 0; i < c.playerBonus.length; i++) {
  331. if (c.playerBonus[i] >= 0) {
  332. send = BONUS_NAMES[i] + ": +" + c.playerBonus[i];
  333. } else {
  334. send = BONUS_NAMES[i] + ": -" + java.lang.Math.abs(c.playerBonus[i]);
  335. }
  336.  
  337. if (i == 10) {
  338. offset = 1;
  339. }
  340. c.getPA().sendFrame126(send, (1675 + i + offset));
  341. }
  342.  
  343. }
  344.  
  345. /**
  346. * Gets the total count of (a) player's items.
  347. *
  348. * @param itemID
  349. * @return
  350. */
  351. public int getTotalCount(int itemID) {
  352. int count = 0;
  353. for (int j = 0; j < c.playerItems.length; j++) {
  354. if (ItemDefinition.forId(itemID + 1).isNoted()) {
  355. if (itemID + 2 == c.playerItems[j])
  356. count += c.playerItemsN[j];
  357. }
  358. if (!ItemDefinition.forId(itemID + 1).isNoted()) {
  359. if (itemID + 1 == c.playerItems[j]) {
  360. count += c.playerItemsN[j];
  361. }
  362. }
  363. }
  364. for (int j = 0; j < c.bankItems.length; j++) {
  365. if (c.bankItems[j] == itemID + 1) {
  366. count += c.bankItemsN[j];
  367. }
  368. }
  369. return count;
  370. }
  371.  
  372. /**
  373. * Send the items kept on death.
  374. */
  375. public void sendItemsKept() {
  376. // synchronized (c) {
  377. if (c.getOutStream() != null && c != null) {
  378. c.getOutStream().createFrameVarSizeWord(53);
  379. c.getOutStream().writeWord(6963);
  380. c.getOutStream().writeWord(c.itemKeptId.length);
  381. for (int i = 0; i < c.itemKeptId.length; i++) {
  382. if (c.playerItemsN[i] > 254) {
  383. c.getOutStream().writeByte(255);
  384. c.getOutStream().writeDWord_v2(1);
  385. } else {
  386. c.getOutStream().writeByte(1);
  387. }
  388. if (c.itemKeptId[i] > 0) {
  389. c.getOutStream().writeWordBigEndianA(c.itemKeptId[i] + 1);
  390. } else {
  391. c.getOutStream().writeWordBigEndianA(0);
  392. }
  393. }
  394. c.getOutStream().endFrameVarSizeWord();
  395. c.flushOutStream();
  396. }
  397. // }
  398. }
  399.  
  400. /**
  401. * Item kept on death
  402. **/
  403. public void keepItem(int keepItem, boolean deleteItem) {
  404. int value = 0;
  405. int item = 0;
  406. int slotId = 0;
  407. boolean itemInInventory = false;
  408. for (int i = 0; i < c.playerItems.length; i++) {
  409. if (c.playerItems[i] - 1 > 0) {
  410. c.getShops();
  411. int inventoryItemValue = ShopAssistant.getItemShopValue(c.playerItems[i] - 1);
  412. if (inventoryItemValue > value && (!c.invSlot[i])) {
  413. value = inventoryItemValue;
  414. item = c.playerItems[i] - 1;
  415. slotId = i;
  416. itemInInventory = true;
  417. }
  418. }
  419. }
  420. for (int i1 = 0; i1 < c.playerEquipment.length; i1++) {
  421. if (c.playerEquipment[i1] > 0) {
  422. c.getShops();
  423. int equipmentItemValue = ShopAssistant.getItemShopValue(c.playerEquipment[i1]);
  424. if (equipmentItemValue > value && (!c.equipSlot[i1])) {
  425. value = equipmentItemValue;
  426. item = c.playerEquipment[i1];
  427. slotId = i1;
  428. itemInInventory = false;
  429. }
  430. }
  431. }
  432. if (itemInInventory) {
  433. c.invSlot[slotId] = true;
  434. if (deleteItem) {
  435. deleteItem(c.playerItems[slotId] - 1, getItemSlot(c.playerItems[slotId] - 1), 1);
  436. }
  437. } else {
  438. c.equipSlot[slotId] = true;
  439. if (deleteItem) {
  440. deleteEquipment(item, slotId);
  441. }
  442. }
  443. c.itemKeptId[keepItem] = item;
  444. }
  445.  
  446. /*
  447. * public void keepItem(int keepItem, boolean deleteItem) { int value = 0;
  448. * int item = 0; int slotId = 0; boolean itemInInventory = false; for (int i
  449. * = 0; i < c.playerItems.length; i++) { if (c.playerItems[i] - 1 > 0) { int
  450. * inventoryItemValue = c.getShops().getPKValue(c.playerItems[i] - 1); if
  451. * (inventoryItemValue > value && (!c.invSlot[i])) { value =
  452. * inventoryItemValue; item = c.playerItems[i] - 1; slotId = i;
  453. * itemInInventory = true; } } } for (int i1 = 0; i1 <
  454. * c.playerEquipment.length; i1++) { if (c.playerEquipment[i1] > 0) { int
  455. * equipmentItemValue = c.getShops().getPKValue(c.playerEquipment[i1]); if
  456. * (equipmentItemValue > value && (!c.equipSlot[i1])) { value =
  457. * equipmentItemValue; item = c.playerEquipment[i1]; slotId = i1;
  458. * itemInInventory = false; } } } if (itemInInventory) { c.invSlot[slotId] =
  459. * true; if (deleteItem) { deleteItem(c.playerItems[slotId] - 1,
  460. * getItemSlot(c.playerItems[slotId] - 1), 1); } } else {
  461. * c.equipSlot[slotId] = true; if (deleteItem) { deleteEquipment(item,
  462. * slotId); } } c.itemKeptId[keepItem] = item; }
  463. */
  464.  
  465. /**
  466. * Reset items kept on death.
  467. **/
  468. public void resetKeepItems() {
  469. for (int i = 0; i < c.itemKeptId.length; i++) {
  470. c.itemKeptId[i] = -1;
  471. }
  472. for (int i1 = 0; i1 < c.invSlot.length; i1++) {
  473. c.invSlot[i1] = false;
  474. }
  475. for (int i2 = 0; i2 < c.equipSlot.length; i2++) {
  476. c.equipSlot[i2] = false;
  477. }
  478. }
  479.  
  480. /**
  481. * Deletes all of a player's items.
  482. **/
  483. public void deleteAllItems() {
  484. if (c.getRights().isOwner()) {
  485. return;
  486. }
  487. for (int i1 = 0; i1 < c.playerEquipment.length; i1++) {
  488. deleteEquipment(c.playerEquipment[i1], i1);
  489. }
  490. for (int i = 0; i < c.playerItems.length; i++) {
  491. deleteItem(c.playerItems[i] - 1, getItemSlot(c.playerItems[i] - 1), c.playerItemsN[i]);
  492. }
  493. }
  494.  
  495. /**
  496. * VDrops all items for a killer.
  497. **/
  498. /*
  499. * public void dropAllItems() { if(c.getRights().isOwner()) { return; }
  500. * Player o = PlayerHandler.getPlayer(c.getKiller()); List<GameItem>
  501. * droppedItems = new ArrayList<>(); for (int i = 0; i <
  502. * c.playerItems.length; i++) { if (c.playerItems[i] == 0) { continue; }
  503. * boolean keepItem = false; for (int item = 0; item <
  504. * Config.ITEMS_KEPT_ON_DEATH.length; item++) { int itemId =
  505. * Config.ITEMS_KEPT_ON_DEATH[item]; if ((c.playerItems[i] - 1) == itemId) {
  506. * keepItem = true; break; } } if (o != null) { if
  507. * (isTradeable(c.playerItems[i] - 1)) {
  508. * Server.itemHandler.createGroundItem(o, c.playerItems[i] - 1, c.getX(),
  509. * c.getY(), c.heightLevel, c.playerItemsN[i], c.killerId);
  510. * addToDroppedItems(droppedItems, new GameItem(c.playerItems[i] - 1,
  511. * c.playerItemsN[i])); } } else { if (!keepItem) {
  512. * Server.itemHandler.createGroundItem(c, c.playerItems[i] - 1, c.getX(),
  513. * c.getY(), c.heightLevel, c.playerItemsN[i], c.index); } } } for (int e =
  514. * 0; e < c.playerEquipment.length; e++) { if (c.playerEquipment[e] < 0) {
  515. * continue; } boolean keepItem = false; for (int item = 0; item <
  516. * Config.ITEMS_KEPT_ON_DEATH.length; item++) { int itemId =
  517. * Config.ITEMS_KEPT_ON_DEATH[item]; if (c.playerEquipment[e] == itemId) {
  518. * keepItem = true; break; } } if (o != null) { if
  519. * (isTradeable(c.playerEquipment[e])) { Server.itemHandler
  520. * .createGroundItem(o, c.playerEquipment[e], c.getX(), c.getY(),
  521. * c.heightLevel, c.playerEquipmentN[e], c.killerId);
  522. * addToDroppedItems(droppedItems, new GameItem(c.playerEquipment[e],
  523. * c.playerEquipmentN[e])); } } else { if (!keepItem) { Server.itemHandler
  524. * .createGroundItem(c, c.playerEquipment[e], c.getX(), c.getY(),
  525. * c.heightLevel, c.playerEquipmentN[e], c.index); } } }
  526. * Server.itemHandler.createGroundItem(o == null ? c : o, 526, c.getX(),
  527. * c.getY(), c.heightLevel, 1, o == null ? c.index : c.killerId); if (o !=
  528. * null) { System.currentTimeMillis();
  529. * //Server.getKillLogHandler().logKill(o, c, droppedItems); } }
  530. */
  531.  
  532. public void dropAllItems() {
  533. if (c.getRights().isOwner()) {
  534. return;
  535. }
  536. Player o = PlayerHandler.getPlayer(c.getKiller());
  537. for (int i = 0; i < c.playerItems.length; i++) {
  538. if (c.playerItems[i] == 0) {
  539. continue;
  540. }
  541. boolean keepItem = false;
  542. for (int item = 0; item < Config.ITEMS_KEPT_ON_DEATH.length; item++) {
  543. int itemId = Config.ITEMS_KEPT_ON_DEATH[item];
  544. if ((c.playerItems[i] - 1) == itemId) {
  545. keepItem = true;
  546. break;
  547. }
  548. }
  549. if (!keepItem) {
  550. if (o != null) {
  551. if (isTradeable(c.playerItems[i] - 1)) {
  552. Server.itemHandler.createGroundItem(o, c.playerItems[i] - 1, c.getX(), c.getY(), c.getHeight(),
  553. c.playerItemsN[i], c.killerId);
  554. }
  555. } else {
  556. Server.itemHandler.createGroundItem(c, c.playerItems[i] - 1, c.getX(), c.getY(), c.getHeight(),
  557. c.playerItemsN[i], c.index);
  558. }
  559. }
  560. }
  561. for (int e = 0; e < c.playerEquipment.length; e++) {
  562. if (c.playerEquipment[e] < 0) {
  563. continue;
  564. }
  565. boolean keepItem = false;
  566. for (int item = 0; item < Config.ITEMS_KEPT_ON_DEATH.length; item++) {
  567. int itemId = Config.ITEMS_KEPT_ON_DEATH[item];
  568. if (c.playerEquipment[e] == itemId) {
  569. keepItem = true;
  570. break;
  571. }
  572. }
  573. if (!keepItem) {
  574. if (o != null) {
  575. if (isTradeable(c.playerEquipment[e])) {
  576. Server.itemHandler.createGroundItem(o, c.playerEquipment[e], c.getX(), c.getY(), c.getHeight(),
  577. c.playerEquipmentN[e], c.killerId);
  578. }
  579. } else {
  580. Server.itemHandler.createGroundItem(c, c.playerEquipment[e], c.getX(), c.getY(), c.getHeight(),
  581. c.playerEquipmentN[e], c.index);
  582. }
  583. }
  584. }
  585. Server.itemHandler.createGroundItem(o == null ? c : o, 526, c.getX(), c.getY(), c.getHeight(), 1,
  586. o == null ? c.index : c.killerId);
  587. if (o != null) {
  588. System.currentTimeMillis();
  589. }
  590. }
  591.  
  592. /**
  593. * Adds an untradeable item to a list if it's not already on the list. If it
  594. * is, it increases the amount of the item.
  595. *
  596. * @param droppedItems
  597. * A list of {@link GameItem}s.
  598. * @param item
  599. * An item which is to be added to the list.
  600. */
  601. private void addToDroppedItems(List<GameItem> droppedItems, GameItem item) {
  602. // if (Server.itemHandler.isSpawnable(item.getId())) {
  603. // return;
  604. // }
  605. for (GameItem listElement : droppedItems) {
  606. if (listElement.getId() == item.getId()) {
  607. int newAmount = listElement.getAmount() + item.getAmount();
  608. listElement.setAmount(newAmount);
  609. return;
  610. }
  611. }
  612. droppedItems.add(item);
  613. }
  614.  
  615. /**
  616. * Untradable items with a special currency. (Tokkel, etc)
  617. *
  618. * @param item
  619. * @return amount
  620. */
  621. public int getUntradePrice(int item) {
  622. switch (item) {
  623. case 2518:
  624. case 2524:
  625. case 2526:
  626. return 100000;
  627. case 2520:
  628. case 2522:
  629. return 150000;
  630. }
  631. return 0;
  632. }
  633.  
  634. /**
  635. * Voided items. (Not void knight items..)
  636. *
  637. * @param itemId
  638. */
  639. public void addToVoidList(int itemId) {
  640. switch (itemId) {
  641. case 2518:
  642. c.voidStatus[0]++;
  643. break;
  644. case 2520:
  645. c.voidStatus[1]++;
  646. break;
  647. case 2522:
  648. c.voidStatus[2]++;
  649. break;
  650. case 2524:
  651. c.voidStatus[3]++;
  652. break;
  653. case 2526:
  654. c.voidStatus[4]++;
  655. break;
  656. }
  657. }
  658.  
  659. /**
  660. * Handles tradable items.
  661. */
  662. public boolean isTradeable(int itemId) {
  663. if (itemId == 12899 && c.getToxicTridentCharge() > 0 || itemId == 11907 && c.getTridentCharge() > 0) {
  664. c.sendMessage("You cannot trade your trident whilst it has a charge.");
  665. return false;
  666. }
  667. for (int j = 0; j < Config.ITEM_TRADEABLE.length; j++) {
  668. if (itemId == Config.ITEM_TRADEABLE[j])
  669. return false;
  670. }
  671. return true;
  672. }
  673.  
  674. /**
  675. * Adds an item to a player's inventory.
  676. **/
  677.  
  678. public boolean addItem(int item, int amount) {
  679. // synchronized(c) {
  680. if (amount < 1) {
  681. amount = 1;
  682. }
  683. if (item <= 0) {
  684. return false;
  685. }
  686. if ((((freeSlots() >= 1) || playerHasItem(item, 1)) && ItemDefinition.forId(item).isStackable()
  687. || ((freeSlots() > 0) && !ItemDefinition.forId(item).isStackable()))) {
  688. for (int i = 0; i < c.playerItems.length; i++) {
  689. if ((c.playerItems[i] == (item + 1)) && ItemDefinition.forId(item).isStackable()
  690. && (c.playerItems[i] > 0)) {
  691. c.playerItems[i] = (item + 1);
  692. if (((c.playerItemsN[i] + amount) < Config.MAXITEM_AMOUNT) && ((c.playerItemsN[i] + amount) > -1)) {
  693. c.playerItemsN[i] += amount;
  694. } else {
  695. c.playerItemsN[i] = Config.MAXITEM_AMOUNT;
  696. }
  697. if (c.getOutStream() != null && c != null) {
  698. c.getOutStream().createFrameVarSizeWord(34);
  699. c.getOutStream().writeWord(3214);
  700. c.getOutStream().writeByte(i);
  701. c.getOutStream().writeWord(c.playerItems[i]);
  702. if (c.playerItemsN[i] > 254) {
  703. c.getOutStream().writeByte(255);
  704. c.getOutStream().writeDWord(c.playerItemsN[i]);
  705. } else {
  706. c.getOutStream().writeByte(c.playerItemsN[i]);
  707. }
  708. c.getOutStream().endFrameVarSizeWord();
  709. c.flushOutStream();
  710. }
  711. i = 30;
  712. return true;
  713. }
  714. }
  715. for (int i = 0; i < c.playerItems.length; i++) {
  716. if (c.playerItems[i] <= 0) {
  717. c.playerItems[i] = item + 1;
  718. if ((amount < Config.MAXITEM_AMOUNT) && (amount > -1)) {
  719. c.playerItemsN[i] = 1;
  720. if (amount > 1) {
  721. c.getItems().addItem(item, amount - 1);
  722. return true;
  723. }
  724. } else {
  725. c.playerItemsN[i] = Config.MAXITEM_AMOUNT;
  726. }
  727. resetItems(3214);
  728. i = 30;
  729. return true;
  730. }
  731. }
  732. return false;
  733. } else {
  734. resetItems(3214);
  735. c.sendMessage("Not enough space in your inventory.");
  736. return false;
  737. }
  738. // }
  739. }
  740.  
  741. /**
  742. * Item bonuses.
  743. **/
  744. public final String[] BONUS_NAMES = { "Stab", "Slash", "Crush", "Magic", "Range", "Stab", "Slash", "Crush", "Magic",
  745. "Range", "Strength", "Prayer" };
  746.  
  747. /**
  748. * Resets item bonuses.
  749. */
  750. public void resetBonus() {
  751. for (int i = 0; i < c.playerBonus.length; i++) {
  752. c.playerBonus[i] = 0;
  753. }
  754. }
  755.  
  756. /**
  757. * Gets the item bonus from the item.cfg.
  758. */
  759. public void getBonus() {
  760. for (int i = 0; i < c.playerEquipment.length; i++) {
  761. if (c.playerEquipment[i] > -1) {
  762. int[] ids = ItemDefinition.forId(c.playerEquipment[i]).getBonus();
  763. for (int k = 0; k < c.playerBonus.length; k++) {
  764. c.playerBonus[k] += ids[k];
  765. }
  766. }
  767. }
  768. if (c.getItems().isWearingItem(12926) && c.getToxicBlowpipeAmmoAmount() > 0 && c.getToxicBlowpipeCharge() > 0) {
  769. int dartStrength = RangeData.getRangeStr(c.getToxicBlowpipeAmmo());
  770. if (dartStrength > 18) {
  771. dartStrength = 18;
  772. }
  773. c.playerBonus[4] += RangeData.getRangeStr(c.getToxicBlowpipeAmmo());
  774. }
  775. if (EquipmentSet.VERAC.isWearingBarrows(c) && isWearingItem(12853)) {
  776. c.playerBonus[11] += 4;
  777. }
  778. }
  779.  
  780. /**
  781. * Weapon type.
  782. **/
  783. public void sendWeapon(int Weapon, String WeaponName) {
  784. String WeaponName2 = WeaponName.replaceAll("Bronze", "");
  785. WeaponName2 = WeaponName2.replaceAll("Iron", "");
  786. WeaponName2 = WeaponName2.replaceAll("Steel", "");
  787. WeaponName2 = WeaponName2.replaceAll("Black", "");
  788. WeaponName2 = WeaponName2.replaceAll("Mithril", "");
  789. WeaponName2 = WeaponName2.replaceAll("Adamant", "");
  790. WeaponName2 = WeaponName2.replaceAll("Rune", "");
  791. WeaponName2 = WeaponName2.replaceAll("Granite", "");
  792. WeaponName2 = WeaponName2.replaceAll("Dragon", "");
  793. WeaponName2 = WeaponName2.replaceAll("Drag", "");
  794. WeaponName2 = WeaponName2.replaceAll("Crystal", "");
  795. WeaponName2 = WeaponName2.trim();
  796. /**
  797. * Attack styles.
  798. */
  799. if (WeaponName.equals("Unarmed")) {
  800. c.setSidebarInterface(0, 5855); // punch, kick, block
  801. c.getPA().sendFrame126(WeaponName, 5857);
  802. } else if (WeaponName.endsWith("whip") || WeaponName.contains("tentacle")) {
  803. c.setSidebarInterface(0, 12290); // flick, lash, deflect
  804. c.getPA().sendFrame246(12291, 200, Weapon);
  805. c.getPA().sendFrame126(WeaponName, 12293);
  806. } else if (WeaponName.endsWith("bow") || WeaponName.contains("shortbow (i)") || WeaponName.endsWith("10")
  807. || WeaponName.endsWith("full") || WeaponName.startsWith("seercull")
  808. || c.playerEquipment[Player.playerWeapon] == 12924 || c.playerEquipment[Player.playerWeapon] == 12926) {
  809. c.setSidebarInterface(0, 1764); // accurate, rapid, longrange
  810. c.getPA().sendFrame246(1765, 200, Weapon);
  811. c.getPA().sendFrame126(WeaponName, 1767);
  812. } else if (WeaponName.contains("Staff") || WeaponName.contains("wand")
  813. || c.playerEquipment[Player.playerWeapon] == 12904 || c.playerEquipment[Player.playerWeapon] == 4675
  814. || c.playerEquipment[Player.playerWeapon] == 6914 || c.playerEquipment[Player.playerWeapon] == 12899
  815. || c.playerEquipment[Player.playerWeapon] == 12900 || c.playerEquipment[Player.playerWeapon] == 12902
  816. || c.playerEquipment[Player.playerWeapon] == 11905 || c.playerEquipment[Player.playerWeapon] == 11907
  817. || c.playerEquipment[Player.playerWeapon] == 11908) {
  818. c.setSidebarInterface(0, 328); // spike, impale, smash, block
  819. c.getPA().sendFrame246(329, 200, Weapon);
  820. c.getPA().sendFrame126(WeaponName, 355);
  821. } else if (WeaponName2.startsWith("dart") || WeaponName2.startsWith("knife")
  822. || WeaponName2.startsWith("javelin") || WeaponName.equalsIgnoreCase("toktz-xil-ul")) {
  823. c.setSidebarInterface(0, 4446); // accurate, rapid, longrange
  824. c.getPA().sendFrame246(4447, 200, Weapon);
  825. c.getPA().sendFrame126(WeaponName, 4449);
  826. } else if (WeaponName2.startsWith("dagger") || WeaponName2.contains("anchor") || WeaponName2.contains("sword")
  827. || c.playerEquipment[Player.playerWeapon] == 13265 || c.playerEquipment[Player.playerWeapon] == 13267
  828. || c.playerEquipment[Player.playerWeapon] == 13269 || c.playerEquipment[Player.playerWeapon] == 13576) {
  829. c.setSidebarInterface(0, 2276); // stab, lunge, slash, block
  830. c.getPA().sendFrame246(2277, 200, Weapon);
  831. c.getPA().sendFrame126(WeaponName, 2279);
  832. } else if (WeaponName2.startsWith("pickaxe")) {
  833. c.setSidebarInterface(0, 5570); // spike, impale, smash, block
  834. c.getPA().sendFrame246(5571, 200, Weapon);
  835. c.getPA().sendFrame126(WeaponName, 5573);
  836. } else if (WeaponName2.startsWith("axe") || WeaponName2.startsWith("battleaxe")) {
  837. c.setSidebarInterface(0, 1698); // chop, hack, smash, block
  838. c.getPA().sendFrame246(1699, 200, Weapon);
  839. c.getPA().sendFrame126(WeaponName, 1701);
  840. } else if (WeaponName2.startsWith("halberd")) {
  841. c.setSidebarInterface(0, 8460); // jab, swipe, fend
  842. c.getPA().sendFrame246(8461, 200, Weapon);
  843. c.getPA().sendFrame126(WeaponName, 8463);
  844. } else if (WeaponName2.startsWith("Scythe")) {
  845. c.setSidebarInterface(0, 8460); // jab, swipe, fend
  846. c.getPA().sendFrame246(8461, 200, Weapon);
  847. c.getPA().sendFrame126(WeaponName, 8463);
  848. } else if (WeaponName2.startsWith("spear") || c.playerEquipment[Player.playerWeapon] == 13905) {
  849. c.setSidebarInterface(0, 4679); // lunge, swipe, pound, block
  850. c.getPA().sendFrame246(4680, 200, Weapon);
  851. c.getPA().sendFrame126(WeaponName, 4682);
  852. } else if (WeaponName2.toLowerCase().contains("mace")) {
  853. c.setSidebarInterface(0, 3796);
  854. c.getPA().sendFrame246(3797, 200, Weapon);
  855. c.getPA().sendFrame126(WeaponName, 3799);
  856. } else if (c.playerEquipment[Player.playerWeapon] == 4153 || c.playerEquipment[Player.playerWeapon] == 12848
  857. || c.playerEquipment[Player.playerWeapon] == 13902) {
  858. c.setSidebarInterface(0, 425); // war hammer equip.
  859. c.getPA().sendFrame246(426, 200, Weapon);
  860. c.getPA().sendFrame126(WeaponName, 428);
  861. } else if (WeaponName2.equals("claws")) {
  862. c.setSidebarInterface(0, 7762);
  863. c.getPA().sendFrame246(7763, 200, Weapon);
  864. c.getPA().sendFrame126(WeaponName, 7765);
  865. } else {
  866. c.setSidebarInterface(0, 2423); // chop, slash, lunge, block
  867. c.getPA().sendFrame246(2424, 200, Weapon);
  868. c.getPA().sendFrame126(WeaponName, 2426);
  869. }
  870. }
  871.  
  872. /**
  873. * Two handed weapon check.
  874. **/
  875. public boolean is2handed(String itemName, int itemId) {
  876. if (itemName.contains("ahrim") || itemName.contains("karil") || itemName.contains("verac")
  877. || itemName.contains("guthan") || itemName.contains("dharok") || itemName.contains("torag")) {
  878. return true;
  879. }
  880. if (itemName.contains("longbow") || itemName.contains("shortbow") || itemName.contains("ark bow")) {
  881. return true;
  882. }
  883. if (itemName.contains("crystal")) {
  884. return true;
  885. }
  886. if (itemName.contains("godsword") || itemName.contains("aradomin sword") || itemName.contains("2h")
  887. || itemName.contains("spear")) {
  888. return true;
  889. }
  890. switch (itemId) {
  891. case 12926:
  892. case 6724:
  893. case 11838:
  894. case 12809:
  895. case 14484:
  896. case 3101:
  897. case 4153:
  898. case 12848:
  899. case 6528:
  900. case 10887:
  901. case 12424:
  902. return true;
  903. }
  904. return false;
  905. }
  906.  
  907. /**
  908. * Adds special attack bar to special attack weapons. Removes special attack
  909. * bar to weapons that do not have special attacks.
  910. **/
  911. public void addSpecialBar(int weapon) {
  912. switch (weapon) {
  913. case 14484:
  914. case 3101:
  915. c.getPA().sendFrame171(0, 7800);
  916. specialAmount(weapon, c.specAmount, 7812);
  917. break;
  918. case 4151: // whip /*working*/
  919. case 12773:
  920. case 12006:
  921. c.getPA().sendFrame171(0, 12323);
  922. specialAmount(weapon, c.specAmount, 12335);
  923. break;
  924.  
  925. case 859: // magic bows /*working*/
  926. case 861:
  927. case 12424:
  928. case 11235:
  929. case 12765:
  930. case 12766:
  931. case 12767:
  932. case 12768:
  933. case 11785:
  934. case 12788:
  935. case 12926:
  936. c.getPA().sendFrame171(0, 7549);
  937. specialAmount(weapon, c.specAmount, 7561);
  938. break;
  939.  
  940. case 4587: // dscimmy working
  941. c.getPA().sendFrame171(0, 7599);
  942. specialAmount(weapon, c.specAmount, 7611);
  943. break;
  944.  
  945. case 3204: // d hally working
  946. c.getPA().sendFrame171(0, 8493);
  947. specialAmount(weapon, c.specAmount, 8505);
  948. break;
  949.  
  950. case 1377: // d battleaxe // working
  951. c.getPA().sendFrame171(0, 7499);
  952. specialAmount(weapon, c.specAmount, 7511);
  953. break;
  954. case 12848: // working
  955. case 4153: // gmaul
  956. c.getPA().sendFrame171(0, 7474);
  957. specialAmount(weapon, c.specAmount, 7486);
  958. break;
  959.  
  960. case 1249: // dspear
  961. case 13905:
  962. c.getPA().sendFrame171(0, 7674);
  963. specialAmount(weapon, c.specAmount, 7686);
  964. break;
  965.  
  966. case 1215:// dragon dagger
  967. case 1231:
  968. case 5680:
  969. case 5698:
  970. case 13269:
  971. case 13576:
  972. case 13265:
  973. case 13267:
  974. case 1305: // dragon long
  975. case 11802:
  976. case 11806:
  977. case 11808:
  978. case 11838:
  979. case 12809:
  980. case 11804:
  981. case 10887:
  982. case 13899:
  983. c.getPA().sendFrame171(0, 7574);
  984. specialAmount(weapon, c.specAmount, 7586);
  985. break;
  986. case 13902: // Statius War
  987. c.getPA().sendFrame171(0, 7474);
  988. specialAmount(weapon, c.specAmount, 7486);
  989. break;
  990. case 1434: // dragon mace
  991. case 11061:
  992. c.getPA().sendFrame171(0, 7624);
  993. specialAmount(weapon, c.specAmount, 7636);
  994. break;
  995.  
  996. default:
  997. c.getPA().sendFrame171(1, 7624); // mace interface
  998. c.getPA().sendFrame171(1, 7474); // hammer, gmaul
  999. c.getPA().sendFrame171(1, 7499); // axe
  1000. c.getPA().sendFrame171(1, 7549); // bow interface
  1001. c.getPA().sendFrame171(1, 7574); // sword interface
  1002. c.getPA().sendFrame171(1, 7599); // scimmy sword interface, for most
  1003. c.getPA().sendFrame171(1, 8493);
  1004. c.getPA().sendFrame171(1, 12323); // whip interface
  1005. break;
  1006. }
  1007. }
  1008.  
  1009. /**
  1010. * Special attack bar filling amount.
  1011. **/
  1012. public void specialAmount(int weapon, double specAmount, int barId) {
  1013. c.specBarId = barId;
  1014. c.getPA().sendFrame70(specAmount >= 10 ? 500 : 0, 0, (--barId));
  1015. c.getPA().sendFrame70(specAmount >= 9 ? 500 : 0, 0, (--barId));
  1016. c.getPA().sendFrame70(specAmount >= 8 ? 500 : 0, 0, (--barId));
  1017. c.getPA().sendFrame70(specAmount >= 7 ? 500 : 0, 0, (--barId));
  1018. c.getPA().sendFrame70(specAmount >= 6 ? 500 : 0, 0, (--barId));
  1019. c.getPA().sendFrame70(specAmount >= 5 ? 500 : 0, 0, (--barId));
  1020. c.getPA().sendFrame70(specAmount >= 4 ? 500 : 0, 0, (--barId));
  1021. c.getPA().sendFrame70(specAmount >= 3 ? 500 : 0, 0, (--barId));
  1022. c.getPA().sendFrame70(specAmount >= 2 ? 500 : 0, 0, (--barId));
  1023. c.getPA().sendFrame70(specAmount >= 1 ? 500 : 0, 0, (--barId));
  1024. updateSpecialBar();
  1025. sendWeapon(weapon, getItemName(weapon));
  1026. }
  1027.  
  1028. /**
  1029. * Special attack text.
  1030. **/
  1031. public void updateSpecialBar() {
  1032. String percent = Double.toString(c.specAmount);
  1033. if (percent.contains(".")) {
  1034. percent = percent.replace(".", "");
  1035. }
  1036. if (percent.startsWith("0") && !percent.equals("00")) {
  1037. percent = percent.replace("0", "");
  1038. }
  1039. if (percent.startsWith("0") && percent.equals("00")) {
  1040. percent = percent.replace("00", "0");
  1041. }
  1042. c.getPA().sendFrame126(
  1043. c.usingSpecial ? "@yel@Special Attack (" + percent + "%)" : "@bla@Special Attack (" + percent + "%)",
  1044. c.specBarId);
  1045. // c.getPA().sendFrame126((int) (c.specAmount * 10)+"", 155);
  1046. }
  1047.  
  1048. public void getRequirements(String itemName, int itemId) {
  1049. c.attackLevelReq = c.defenceLevelReq = c.strengthLevelReq = c.rangeLevelReq = c.magicLevelReq = 0;
  1050. if (itemName.contains("infinity")) {
  1051. c.magicLevelReq = 50;
  1052. c.defenceLevelReq = 25;
  1053. }
  1054. if (itemName.contains("nchanted")) {
  1055. c.magicLevelReq = 40;
  1056. c.defenceLevelReq = 20;
  1057. }
  1058. if (itemName.contains("barrows gloves")) {
  1059. c.defenceLevelReq = 42;
  1060. }
  1061. if (itemName.contains("dragon gloves")) {
  1062. c.defenceLevelReq = 42;
  1063. }
  1064. if (itemName.contains("Black d'hide chaps (t)") || itemName.contains("Black d'hide chaps (g)")) {
  1065. c.defenceLevelReq = 1;
  1066. c.rangeLevelReq = 40;
  1067. }
  1068. if (itemName.contains("adamant gloves")) {
  1069. c.defenceLevelReq = 13;
  1070. }
  1071. if (itemName.contains("iron gloves")
  1072. || (itemName.contains("bronze gloves") || itemName.contains("mithril gloves"))) {
  1073. c.defenceLevelReq = 1;
  1074. }
  1075. if (itemName.contains("rune pl") || (itemName.contains("rune fu") || itemName.contains("torso"))) {
  1076. c.defenceLevelReq = 40;
  1077. }
  1078. if (itemName.contains("adamant pl") || (itemName.contains("adamant fu"))) {
  1079. c.defenceLevelReq = 30;
  1080. }
  1081. if (itemName.contains("dragonfire")) {
  1082. c.defenceLevelReq = 75;
  1083. }
  1084. if (itemName.contains("splitbark")) {
  1085. c.defenceLevelReq = 40;
  1086. c.magicLevelReq = 40;
  1087. }
  1088. }
  1089.  
  1090. /*
  1091. * public boolean canEquip1(Player player, int wearID) { int[] skillIds =
  1092. * {0, 1, 4, 6
  1093. *
  1094. * }; for(int i : skillIds) {
  1095. * player.getItems().getRequirements(player.getItems().getItemName(wearID).
  1096. * toLowerCase(), wearID); if (player.getLevelForXP(player.playerXP[i]) <
  1097. * c.defenceLevelReq) { player.sendMessage("You need a defence level of "
  1098. * +c.defenceLevelReq+" to equip "+getItemName(wearID).toLowerCase()+""); }
  1099. * else
  1100. * player.getItems().getRequirements(player.getItems().getItemName(wearID).
  1101. * toLowerCase(), wearID); if (player.getLevelForXP(player.playerXP[i]) <
  1102. * c.attackLevelReq) { player.sendMessage("You need an attack level of "
  1103. * +c.attackLevelReq+" to equip "+getItemName(wearID).toLowerCase()+""); }
  1104. * else
  1105. * player.getItems().getRequirements(player.getItems().getItemName(wearID).
  1106. * toLowerCase(), wearID); if (player.getLevelForXP(player.playerXP[i]) <
  1107. * c.rangeLevelReq) { player.sendMessage("You need a range level of "
  1108. * +c.rangeLevelReq+" to equip "+getItemName(wearID).toLowerCase()+""); }
  1109. * else
  1110. * player.getItems().getRequirements(player.getItems().getItemName(wearID).
  1111. * toLowerCase(), wearID); if (player.getLevelForXP(player.playerXP[i]) <
  1112. * c.magicLevelReq) { player.sendMessage("You need a magic level of "
  1113. * +c.magicLevelReq+" to equip "+getItemName(wearID).toLowerCase()+"");
  1114. * return false; } } return true; }
  1115. */
  1116.  
  1117. /**
  1118. * Wielding items.
  1119. **/
  1120. public boolean wearItem(int wearID, int slot) {
  1121. // synchronized (c) {
  1122. int targetSlot = 0;
  1123. boolean canWearItem = true;
  1124.  
  1125. if (c.playerItems[slot] == (wearID + 1)) {
  1126. getRequirements(getItemName(wearID).toLowerCase(), wearID);
  1127. ItemDefinition item = ItemDefinition.forId(wearID);
  1128. if (item == null) {
  1129. if (wearID == 15098) {
  1130. c.sendMessage(
  1131. "Please navigate to the designated dicing area in order to roll (South of edge bank)");
  1132. return false;
  1133. }
  1134. c.sendMessage("This item is currently unwearable.");
  1135. return false;
  1136. }
  1137. if (!Requirement.canEquip(c, wearID))
  1138. return false;
  1139. Optional<DegradableItem> degradable = DegradableItem.forId(wearID);
  1140. if (degradable.isPresent()) {
  1141. if (c.claimDegradableItem[degradable.get().ordinal()]) {
  1142. c.sendMessage("A previous item simialr to this has degraded. You must go to the old man");
  1143. c.sendMessage("in edgeville to claim this item.");
  1144. return false;
  1145. }
  1146. }
  1147. /*
  1148. * String i = Item.getItemName(c.wearId); if (!i.contains("staff")
  1149. * && !i.contains("wand") && c.wearSlot == c.playerWeapon) {
  1150. * c.getPA().resetAutocast(); }
  1151. */
  1152. targetSlot = item.getEquipmentSlot();
  1153.  
  1154. if (Boundary.isIn(c, Boundary.DUEL_ARENAS)) {
  1155. DuelSession session = (DuelSession) Server.getMultiplayerSessionListener().getMultiplayerSession(c,
  1156. MultiplayerSessionType.DUEL);
  1157. if (!Objects.isNull(session)) {
  1158. if (targetSlot == Player.playerHat && session.getRules().contains(Rule.NO_HELM)) {
  1159. c.sendMessage("Wearing helmets has been disabled for this duel.");
  1160. return false;
  1161. }
  1162. if (targetSlot == Player.playerAmulet && session.getRules().contains(Rule.NO_AMULET)) {
  1163. c.sendMessage("Wearing amulets has been disabled for this duel.");
  1164. return false;
  1165. }
  1166. if (targetSlot == Player.playerArrows && session.getRules().contains(Rule.NO_ARROWS)) {
  1167. c.sendMessage("Wearing arrows has been disabled for this duel.");
  1168. return false;
  1169. }
  1170. if (targetSlot == Player.playerChest && session.getRules().contains(Rule.NO_BODY)) {
  1171. c.sendMessage("Wearing platebodies has been disabled for this duel.");
  1172. return false;
  1173. }
  1174. if (targetSlot == Player.playerFeet && session.getRules().contains(Rule.NO_BOOTS)) {
  1175. c.sendMessage("Wearing boots has been disabled for this duel.");
  1176. return false;
  1177. }
  1178. if (targetSlot == Player.playerHands && session.getRules().contains(Rule.NO_GLOVES)) {
  1179. c.sendMessage("Wearing gloves has been disabled for this duel.");
  1180. return false;
  1181. }
  1182. if (targetSlot == Player.playerCape && session.getRules().contains(Rule.NO_CAPE)) {
  1183. c.sendMessage("Wearing capes has been disabled for this duel.");
  1184. return false;
  1185. }
  1186. if (targetSlot == Player.playerLegs && session.getRules().contains(Rule.NO_LEGS)) {
  1187. c.sendMessage("Wearing platelegs has been disabled for this duel.");
  1188. return false;
  1189. }
  1190. if (targetSlot == Player.playerRing && session.getRules().contains(Rule.NO_RINGS)) {
  1191. c.sendMessage("Wearing a ring has been disabled for this duel.");
  1192. return false;
  1193. }
  1194. if (targetSlot == Player.playerWeapon && session.getRules().contains(Rule.NO_WEAPON)) {
  1195. c.sendMessage("Wearing weapons has been disabled for this duel.");
  1196. return false;
  1197. }
  1198. if (session.getRules().contains(Rule.NO_SHIELD)) {
  1199. if (targetSlot == Player.playerShield || targetSlot == Player.playerWeapon
  1200. && is2handed(getItemName(wearID).toLowerCase(), wearID)) {
  1201. c.sendMessage("Wearing shields and 2handed weapons has been disabled for this duel.");
  1202. return false;
  1203. }
  1204. }
  1205. }
  1206. }
  1207. if (targetSlot == 3) {
  1208. c.getPA().resetAutocast();
  1209. c.autocasting = false;
  1210. c.autocastId = 0;
  1211. c.getPA().sendFrame36(108, 0);
  1212. c.usingSpecial = false;
  1213. addSpecialBar(wearID);
  1214. if (wearID != 4153 && wearID != 12848) {
  1215. c.getCombat().resetPlayerAttack();
  1216. }
  1217. }
  1218. if (targetSlot == -1 || !item.isWearable()) {
  1219. c.sendMessage("This item cannot be worn.");
  1220. return false;
  1221. }
  1222. if (targetSlot == 10 || targetSlot == 7 || targetSlot == 5 || targetSlot == 4 || targetSlot == 0
  1223. || targetSlot == 9 || targetSlot == 10) {
  1224. if (c.defenceLevelReq > 0) {
  1225. if (c.getPA().getLevelForXP(c.playerXP[1]) < c.defenceLevelReq) {
  1226. c.sendMessage("You need a defence level of " + c.defenceLevelReq + " to wear this item.");
  1227. canWearItem = false;
  1228. return false;
  1229. }
  1230. }
  1231.  
  1232. if (c.rangeLevelReq > 0) {
  1233. if (c.getPA().getLevelForXP(c.playerXP[4]) < c.rangeLevelReq) {
  1234. c.sendMessage("You need a range level of " + c.rangeLevelReq + " to wear this item.");
  1235. canWearItem = false;
  1236. return false;
  1237. }
  1238. }
  1239.  
  1240. if (c.magicLevelReq > 0) {
  1241. if (c.getPA().getLevelForXP(c.playerXP[6]) < c.magicLevelReq) {
  1242. c.sendMessage("You need a magic level of " + c.magicLevelReq + " to wear this item.");
  1243. canWearItem = false;
  1244. return false;
  1245. }
  1246. }
  1247. }
  1248. // }
  1249.  
  1250. if (!canWearItem) {
  1251. return false;
  1252. }
  1253.  
  1254. int wearAmount = c.playerItemsN[slot];
  1255. if (wearAmount < 1) {
  1256. return false;
  1257. }
  1258. if (slot >= 0 && wearID >= 0) {
  1259. int toEquip = c.playerItems[slot];
  1260. int toEquipN = c.playerItemsN[slot];
  1261. int toRemove = c.playerEquipment[targetSlot];
  1262. int toRemoveN = c.playerEquipmentN[targetSlot];
  1263. boolean stackable = false;
  1264. if (getItemName(toRemove).contains("javelin") || getItemName(toRemove).contains("dart")
  1265. || getItemName(toRemove).contains("knife") || getItemName(toRemove).contains("bolt")
  1266. || getItemName(toRemove).contains("arrow") || getItemName(toRemove).contains("Bolt")
  1267. || getItemName(toRemove).contains("bolts") || getItemName(toRemove).contains("thrownaxe")
  1268. || getItemName(toRemove).contains("throwing"))
  1269. stackable = true;
  1270. else
  1271. stackable = false;
  1272. if (toEquip == toRemove + 1 && ItemDefinition.forId(toRemove).isStackable()) {
  1273. deleteItem(toRemove, getItemSlot(toRemove), toEquipN);
  1274. c.playerEquipmentN[targetSlot] += toEquipN;
  1275. } else if (targetSlot != 5 && targetSlot != 3) {
  1276. if (playerHasItem(toRemove, 1) && stackable == true) {
  1277. c.playerItems[slot] = 0;// c.playerItems[slot] =
  1278. // toRemove + 1;
  1279. c.playerItemsN[slot] = 0;// c.playerItemsN[slot] =
  1280. // toRemoveN;
  1281. if (toRemove > 0 && toRemoveN > 0)// c.playerEquipment[targetSlot]
  1282. // = toEquip - 1;
  1283. addItem(toRemove, toRemoveN);// c.playerEquipmentN[targetSlot]
  1284. // = toEquipN;
  1285. } else {
  1286. c.playerItems[slot] = toRemove + 1;
  1287. c.playerItemsN[slot] = toRemoveN;
  1288. }
  1289. c.playerEquipment[targetSlot] = toEquip - 1;
  1290. c.playerEquipmentN[targetSlot] = toEquipN;
  1291. } else if (targetSlot == 5) {
  1292. boolean wearing2h = is2handed(getItemName(c.playerEquipment[Player.playerWeapon]).toLowerCase(),
  1293. c.playerEquipment[Player.playerWeapon]);
  1294. if (wearing2h) {
  1295. toRemove = c.playerEquipment[Player.playerWeapon];
  1296. toRemoveN = c.playerEquipmentN[Player.playerWeapon];
  1297. c.playerEquipment[Player.playerWeapon] = -1;
  1298. c.playerEquipmentN[Player.playerWeapon] = 0;
  1299. updateSlot(Player.playerWeapon);
  1300. }
  1301. c.playerItems[slot] = toRemove + 1;
  1302. c.playerItemsN[slot] = toRemoveN;
  1303. c.playerEquipment[targetSlot] = toEquip - 1;
  1304. c.playerEquipmentN[targetSlot] = toEquipN;
  1305. } else if (targetSlot == 3) {
  1306. boolean is2h = is2handed(getItemName(wearID).toLowerCase(), wearID);
  1307. boolean wearingShield = c.playerEquipment[Player.playerShield] > 0;
  1308. boolean wearingWeapon = c.playerEquipment[Player.playerWeapon] > 0;
  1309. if (is2h) {
  1310. if (wearingShield && wearingWeapon) {
  1311. if (freeSlots() > 0) {
  1312. if (playerHasItem(toRemove, 1) && stackable == true) {
  1313. c.playerItems[slot] = 0;// c.playerItems[slot]
  1314. // = toRemove + 1;
  1315. c.playerItemsN[slot] = 0;// c.playerItemsN[slot]
  1316. // = toRemoveN;
  1317. if (toRemove > 0 && toRemoveN > 0)// c.playerEquipment[targetSlot]
  1318. // =
  1319. // toEquip
  1320. // - 1;
  1321. addItem(toRemove, toRemoveN);// c.playerEquipmentN[targetSlot]
  1322. // =
  1323. // toEquipN;
  1324. } else {
  1325. c.playerItems[slot] = toRemove + 1;
  1326. c.playerItemsN[slot] = toRemoveN;
  1327. }
  1328. c.playerEquipment[targetSlot] = toEquip - 1;
  1329. c.playerEquipmentN[targetSlot] = toEquipN;
  1330. removeItem(c.playerEquipment[Player.playerShield], Player.playerShield);
  1331. } else {
  1332. c.sendMessage("You do not have enough inventory space to do this.");
  1333. return false;
  1334. }
  1335. } else if (wearingShield && !wearingWeapon) {
  1336. c.playerItems[slot] = c.playerEquipment[Player.playerShield] + 1;
  1337. c.playerItemsN[slot] = c.playerEquipmentN[Player.playerShield];
  1338. c.playerEquipment[targetSlot] = toEquip - 1;
  1339. c.playerEquipmentN[targetSlot] = toEquipN;
  1340. c.playerEquipment[Player.playerShield] = -1;
  1341. c.playerEquipmentN[Player.playerShield] = 0;
  1342. updateSlot(Player.playerShield);
  1343. } else {
  1344. if (playerHasItem(toRemove, 1) && stackable == true) {
  1345. c.playerItems[slot] = 0;// c.playerItems[slot] =
  1346. // toRemove + 1;
  1347. c.playerItemsN[slot] = 0;// c.playerItemsN[slot]
  1348. // = toRemoveN;
  1349. if (toRemove > 0 && toRemoveN > 0)// c.playerEquipment[targetSlot]
  1350. // = toEquip
  1351. // - 1;
  1352. addItem(toRemove, toRemoveN);// c.playerEquipmentN[targetSlot]
  1353. // =
  1354. // toEquipN;
  1355. } else {
  1356. c.playerItems[slot] = toRemove + 1;
  1357. c.playerItemsN[slot] = toRemoveN;
  1358. }
  1359. c.playerEquipment[targetSlot] = toEquip - 1;
  1360. c.playerEquipmentN[targetSlot] = toEquipN;
  1361. }
  1362. } else {
  1363. if (playerHasItem(toRemove, 1) && stackable == true) {
  1364. c.playerItems[slot] = 0;// c.playerItems[slot] =
  1365. // toRemove + 1;
  1366. c.playerItemsN[slot] = 0;// c.playerItemsN[slot] =
  1367. // toRemoveN;
  1368. if (toRemove > 0 && toRemoveN > 0)// c.playerEquipment[targetSlot]
  1369. // = toEquip -
  1370. // 1;
  1371. addItem(toRemove, toRemoveN);// c.playerEquipmentN[targetSlot]
  1372. // = toEquipN;
  1373. } else {
  1374. c.playerItems[slot] = toRemove + 1;
  1375. c.playerItemsN[slot] = toRemoveN;
  1376. }
  1377. c.playerEquipment[targetSlot] = toEquip - 1;
  1378. c.playerEquipmentN[targetSlot] = toEquipN;
  1379. }
  1380. }
  1381. resetItems(3214);
  1382. }
  1383. if (c.getOutStream() != null && c != null) {
  1384. c.getOutStream().createFrameVarSizeWord(34);
  1385. c.getOutStream().writeWord(1688);
  1386. c.getOutStream().writeByte(targetSlot);
  1387. c.getOutStream().writeWord(wearID + 1);
  1388.  
  1389. if (c.playerEquipmentN[targetSlot] > 254) {
  1390. c.getOutStream().writeByte(255);
  1391. c.getOutStream().writeDWord(c.playerEquipmentN[targetSlot]);
  1392. } else {
  1393. c.getOutStream().writeByte(c.playerEquipmentN[targetSlot]);
  1394. }
  1395.  
  1396. c.getOutStream().endFrameVarSizeWord();
  1397. c.flushOutStream();
  1398. }
  1399. sendWeapon(c.playerEquipment[Player.playerWeapon], getItemName(c.playerEquipment[Player.playerWeapon]));
  1400. resetBonus();
  1401. getBonus();
  1402. writeBonus();
  1403. c.getCombat()
  1404. .getPlayerAnimIndex(c.getItems().getItemName(c.playerEquipment[Player.playerWeapon]).toLowerCase());
  1405. c.getPA().requestUpdates();
  1406. return true;
  1407. } else {
  1408. return false;
  1409. }
  1410. // }
  1411. }
  1412.  
  1413. /**
  1414. * Indicates the action to wear an item.
  1415. *
  1416. * @param wearID
  1417. * @param wearAmount
  1418. * @param targetSlot
  1419. */
  1420. public void updateItems() {
  1421. resetItems(3214);
  1422. c.updateItems = false;
  1423. }
  1424.  
  1425. public void wearItem(int wearID, int wearAmount, int targetSlot) {
  1426. // synchronized (c) {
  1427. if (c.getOutStream() != null && c != null) {
  1428. c.getOutStream().createFrameVarSizeWord(34);
  1429. c.getOutStream().writeWord(1688);
  1430. c.getOutStream().writeByte(targetSlot);
  1431. c.getOutStream().writeWord(wearID + 1);
  1432. if (wearAmount > 254) {
  1433. c.getOutStream().writeByte(255);
  1434. c.getOutStream().writeDWord(wearAmount);
  1435. } else {
  1436. c.getOutStream().writeByte(wearAmount);
  1437. }
  1438. c.getOutStream().endFrameVarSizeWord();
  1439. c.flushOutStream();
  1440. c.playerEquipment[targetSlot] = wearID;
  1441. c.playerEquipmentN[targetSlot] = wearAmount;
  1442. c.getItems().sendWeapon(c.playerEquipment[Player.playerWeapon],
  1443. c.getItems().getItemName(c.playerEquipment[Player.playerWeapon]));
  1444. c.getItems().resetBonus();
  1445. c.updateItems = true;
  1446. c.getItems().getBonus();
  1447. c.getItems().writeBonus();
  1448. c.getCombat()
  1449. .getPlayerAnimIndex(c.getItems().getItemName(c.playerEquipment[Player.playerWeapon]).toLowerCase());
  1450. c.updateRequired = true;
  1451. c.setAppearanceUpdateRequired(true);
  1452. }
  1453. // }
  1454. }
  1455.  
  1456. /**
  1457. * Updates the slot when wielding an item.
  1458. *
  1459. * @param slot
  1460. */
  1461. public void updateSlot(int slot) {
  1462. // synchronized (c) {
  1463. if (c.getOutStream() != null && c != null) {
  1464. c.getOutStream().createFrameVarSizeWord(34);
  1465. c.getOutStream().writeWord(1688);
  1466. c.getOutStream().writeByte(slot);
  1467. c.getOutStream().writeWord(c.playerEquipment[slot] + 1);
  1468. if (c.playerEquipmentN[slot] > 254) {
  1469. c.getOutStream().writeByte(255);
  1470. c.getOutStream().writeDWord(c.playerEquipmentN[slot]);
  1471. } else {
  1472. c.getOutStream().writeByte(c.playerEquipmentN[slot]);
  1473. }
  1474. c.getOutStream().endFrameVarSizeWord();
  1475. c.flushOutStream();
  1476. }
  1477. // }
  1478.  
  1479. }
  1480.  
  1481. /**
  1482. * Removes a wielded item.
  1483. **/
  1484. public void removeItem(int wearID, int slot) {
  1485. // synchronized(c) {
  1486. if (c.getOutStream() != null && c != null) {
  1487. if (c.playerEquipment[slot] > -1) {
  1488. if (addItem(c.playerEquipment[slot], c.playerEquipmentN[slot])) {
  1489. c.playerEquipment[slot] = -1;
  1490. c.playerEquipmentN[slot] = 0;
  1491. sendWeapon(c.playerEquipment[Player.playerWeapon],
  1492. getItemName(c.playerEquipment[Player.playerWeapon]));
  1493.  
  1494. resetBonus();
  1495. // c.attackLevelReq = c.defenceLevelReq = c.strengthLevelReq
  1496. // = c.rangeLevelReq = c.magicLevelReq = 0;
  1497. getBonus();
  1498. writeBonus();
  1499. c.getCombat().getPlayerAnimIndex(
  1500. c.getItems().getItemName(c.playerEquipment[Player.playerWeapon]).toLowerCase());
  1501. c.getOutStream().createFrame(34);
  1502. c.getOutStream().writeWord(6);
  1503. c.getOutStream().writeWord(1688);
  1504. c.getOutStream().writeByte(slot);
  1505. c.getOutStream().writeWord(0);
  1506. c.getOutStream().writeByte(0);
  1507. c.flushOutStream();
  1508. c.updateRequired = true;
  1509. c.setAppearanceUpdateRequired(true);
  1510. // c.isFullHelm =
  1511. // Item.isFullHelm(c.playerEquipment[c.playerHat]);
  1512. // c.isFullMask =
  1513. // Item.isFullMask(c.playerEquipment[c.playerHat]);
  1514. // c.isFullBody =
  1515. // Item.isFullBody(c.playerEquipment[c.playerChest]);
  1516. }
  1517. }
  1518. }
  1519. // }
  1520. }
  1521.  
  1522. /**
  1523. * Items in your bank.
  1524. */
  1525. public void rearrangeBank() {
  1526. int totalItems = 0;
  1527. int highestSlot = 0;
  1528. for (int i = 0; i < Config.BANK_SIZE; i++) {
  1529. if (c.bankItems[i] != 0) {
  1530. totalItems++;
  1531. if (highestSlot <= i) {
  1532. highestSlot = i;
  1533. }
  1534. }
  1535. }
  1536.  
  1537. for (int i = 0; i <= highestSlot; i++) {
  1538. if (c.bankItems[i] == 0) {
  1539. boolean stop = false;
  1540.  
  1541. for (int k = i; k <= highestSlot; k++) {
  1542. if (c.bankItems[k] != 0 && !stop) {
  1543. int spots = k - i;
  1544. for (int j = k; j <= highestSlot; j++) {
  1545. c.bankItems[j - spots] = c.bankItems[j];
  1546. c.bankItemsN[j - spots] = c.bankItemsN[j];
  1547. stop = true;
  1548. c.bankItems[j] = 0;
  1549. c.bankItemsN[j] = 0;
  1550. }
  1551. }
  1552. }
  1553. }
  1554. }
  1555.  
  1556. int totalItemsAfter = 0;
  1557. for (int i = 0; i < Config.BANK_SIZE; i++) {
  1558. if (c.bankItems[i] != 0) {
  1559. totalItemsAfter++;
  1560. }
  1561. }
  1562.  
  1563. if (totalItems != totalItemsAfter)
  1564. c.disconnected = true;
  1565. }
  1566.  
  1567. /**
  1568. * Items displayed on the armor interface.
  1569. *
  1570. * @param id
  1571. * @param amount
  1572. */
  1573. public void itemOnInterface(int id, int amount) {
  1574. // synchronized (c) {
  1575. c.getOutStream().createFrameVarSizeWord(53);
  1576. c.getOutStream().writeWord(2274);
  1577. c.getOutStream().writeWord(1);
  1578. if (amount > 254) {
  1579. c.getOutStream().writeByte(255);
  1580. c.getOutStream().writeDWord_v2(amount);
  1581. } else {
  1582. c.getOutStream().writeByte(amount);
  1583. }
  1584. c.getOutStream().writeWordBigEndianA(id);
  1585. c.getOutStream().endFrameVarSizeWord();
  1586. c.flushOutStream();
  1587. // }
  1588. }
  1589.  
  1590. /**
  1591. * Reseting your bank.
  1592. */
  1593. public void resetBank() {
  1594. int tabId = c.getBank().getCurrentBankTab().getTabId();
  1595. for (int i = 0; i < c.getBank().getBankTab().length; i++) {
  1596. if (i == 0)
  1597. continue;
  1598. if (i != c.getBank().getBankTab().length - 1 && c.getBank().getBankTab()[i].size() == 0
  1599. && c.getBank().getBankTab()[i + 1].size() > 0) {
  1600. for (BankItem item : c.getBank().getBankTab()[i + 1].getItems()) {
  1601. c.getBank().getBankTab()[i].add(item);
  1602. }
  1603. c.getBank().getBankTab()[i + 1].getItems().clear();
  1604. }
  1605. }
  1606. c.getPA().sendFrame36(700, 0);
  1607. c.getPA().sendFrame34a(58040, -1, 0, 0);
  1608. int newSlot = -1;
  1609. for (int i = 0; i < c.getBank().getBankTab().length; i++) {
  1610. BankTab tab = c.getBank().getBankTab()[i];
  1611. if (i == tabId) {
  1612. c.getPA().sendFrame36(700 + i, 1);
  1613. } else {
  1614. c.getPA().sendFrame36(700 + i, 0);
  1615. }
  1616. if (tab.getTabId() != 0 && tab.size() > 0 && tab.getItem(0) != null) {
  1617. c.getPA().sendFrame171(0, 58050 + i);
  1618. c.getPA().sendFrame34a(58040 + i, c.getBank().getBankTab()[i].getItem(0).getId() - 1, 0,
  1619. c.getBank().getBankTab()[i].getItem(0).getAmount());
  1620. } else if (i != 0) {
  1621. if (newSlot == -1) {
  1622. newSlot = i;
  1623. c.getPA().sendFrame34a(58040 + i, -1, 0, 0);
  1624. c.getPA().sendFrame171(0, 58050 + i);
  1625. continue;
  1626. }
  1627. c.getPA().sendFrame34a(58040 + i, -1, 0, 0);
  1628. c.getPA().sendFrame171(1, 58050 + i);
  1629. }
  1630. }
  1631. c.getOutStream().createFrameVarSizeWord(53);
  1632. c.getOutStream().writeWord(5382); // bank
  1633. c.getOutStream().writeWord(Config.BANK_SIZE);
  1634. BankTab tab = c.getBank().getCurrentBankTab();
  1635. for (int i = 0; i < Config.BANK_SIZE; i++) {
  1636. if (i > tab.size() - 1) {
  1637. c.getOutStream().writeByte(0);
  1638. c.getOutStream().writeWordBigEndianA(0);
  1639. continue;
  1640. }
  1641. BankItem item = tab.getItem(i);
  1642. if (item == null)
  1643. item = new BankItem(-1, 0);
  1644. if (item.getAmount() > 254) {
  1645. c.getOutStream().writeByte(255);
  1646. c.getOutStream().writeDWord_v2(item.getAmount());
  1647. } else {
  1648. c.getOutStream().writeByte(item.getAmount());
  1649. }
  1650. if (item.getAmount() < 1)
  1651. item.setAmount(0);
  1652. if (item.getId() > Config.ITEM_LIMIT || item.getId() < 0)
  1653. item.setId(-1);
  1654. c.getOutStream().writeWordBigEndianA(item.getId());
  1655. }
  1656. c.getOutStream().endFrameVarSizeWord();
  1657. c.flushOutStream();
  1658. c.getPA().sendFrame126("" + c.getBank().getCurrentBankTab().size(), 58061);
  1659. c.getPA().sendFrame126(Integer.toString(tabId), 5292);
  1660. c.getPA().sendFrame126(Misc.capitalize(c.playerName.toLowerCase()) + "'s bank of Turmoil", 58064);
  1661. }
  1662.  
  1663. /**
  1664. * Resets temporary worn items. Used in minigames, etc
  1665. */
  1666. public void resetTempItems() {
  1667. // synchronized (c) {
  1668. int itemCount = 0;
  1669. for (int i = 0; i < c.playerItems.length; i++) {
  1670. if (c.playerItems[i] > -1) {
  1671. itemCount = i;
  1672. }
  1673. }
  1674. c.getOutStream().createFrameVarSizeWord(53);
  1675. c.getOutStream().writeWord(5064);
  1676. c.getOutStream().writeWord(itemCount + 1);
  1677. for (int i = 0; i < itemCount + 1; i++) {
  1678. if (c.playerItemsN[i] > 254) {
  1679. c.getOutStream().writeByte(255);
  1680. c.getOutStream().writeDWord_v2(c.playerItemsN[i]);
  1681. } else {
  1682. c.getOutStream().writeByte(c.playerItemsN[i]);
  1683. }
  1684. if (c.playerItems[i] > Config.ITEM_LIMIT || c.playerItems[i] < 0) {
  1685. c.playerItems[i] = Config.ITEM_LIMIT;
  1686. }
  1687. c.getOutStream().writeWordBigEndianA(c.playerItems[i]);
  1688. }
  1689. c.getOutStream().endFrameVarSizeWord();
  1690. c.flushOutStream();
  1691. // }
  1692. }
  1693.  
  1694. public void bankItemWithouthReq(int itemId, int amount) {
  1695. int toBankSlot = 0;
  1696. boolean alreadyInBank = false;
  1697. for (int i = 0; i < Config.BANK_SIZE; i++) {
  1698. if (c.bankItems[i] == itemId + 1) {
  1699. alreadyInBank = true;
  1700. toBankSlot = i;
  1701. i = Config.BANK_SIZE + 1;
  1702. }
  1703. }
  1704. while (amount > 0) {
  1705. if (alreadyInBank) {
  1706. c.bankItemsN[toBankSlot] += 1;
  1707. amount--;
  1708. } else {
  1709. c.bankItems[toBankSlot] = itemId + 1;
  1710. c.bankItemsN[toBankSlot] += 1;
  1711. amount--;
  1712. }
  1713. }
  1714. resetTempItems();
  1715. resetBank();
  1716. }
  1717.  
  1718. public void addItemToBank1(int itemId, int amount) {
  1719. BankTab tab = c.getBank().getCurrentBankTab();
  1720. BankItem item = new BankItem(itemId + 1, amount);
  1721. Iterator<BankTab> iterator = Arrays.asList(c.getBank().getBankTab()).iterator();
  1722. while (iterator.hasNext()) {
  1723. BankTab t = iterator.next();
  1724. if (t != null && t.size() > 0) {
  1725. Iterator<BankItem> iterator2 = t.getItems().iterator();
  1726. while (iterator2.hasNext()) {
  1727. BankItem i = iterator2.next();
  1728. if (i.getId() == item.getId() && !isNotable(itemId)) {
  1729. if (t.getTabId() != tab.getTabId()) {
  1730. tab = t;
  1731. }
  1732. } else {
  1733. if (isNotable(itemId) && i.getId() == item.getId() - 1) {
  1734. item = new BankItem(itemId, amount);
  1735. if (t.getTabId() != tab.getTabId()) {
  1736. tab = t;
  1737. }
  1738. }
  1739. }
  1740. }
  1741. }
  1742. }
  1743. if (isNotable(itemId))
  1744. item = new BankItem(itemId, amount);
  1745. if (tab.freeSlots() == 0) {
  1746. c.sendMessage("The item has been dropped on the floor.");
  1747. Server.itemHandler.createGroundItem(c, itemId, c.absX, c.absY, c.heightLevel, amount, c.playerIndex);
  1748. return;
  1749. }
  1750. long totalAmount = ((long) tab.getItemAmount(item) + (long) item.getAmount());
  1751. if (totalAmount >= Integer.MAX_VALUE) {
  1752. c.sendMessage("The item has been dropped on the floor.");
  1753. Server.itemHandler.createGroundItem(c, itemId, c.absX, c.absY, c.heightLevel, amount, c.playerIndex);
  1754. return;
  1755. }
  1756. tab.add(item);
  1757. resetTempItems();
  1758. if (c.isBanking)
  1759. resetBank();
  1760. // c.sendMessage(getItemName(itemId) + " x" + item.getAmount() + " has
  1761. // been added to your bank.");
  1762. }
  1763.  
  1764. /**
  1765. * Banking your item.
  1766. *
  1767. * @param itemID
  1768. * @param fromSlot
  1769. * @param amount
  1770. * @return
  1771. */
  1772.  
  1773. public boolean addToBank(int itemID, int amount, boolean updateView) {
  1774. if (c.getPA().viewingOtherBank) {
  1775. c.getPA().resetOtherBank();
  1776. return false;
  1777. }
  1778. if (!c.isBanking)
  1779. return false;
  1780. if (!c.getItems().playerHasItem(itemID))
  1781. return false;
  1782. if (c.getBank().getBankSearch().isSearching()) {
  1783. c.getBank().getBankSearch().reset();
  1784. return false;
  1785. }
  1786. if (c.getBankPin().requiresUnlock()) {
  1787. resetBank();
  1788. c.getBankPin().open(2);
  1789. return false;
  1790. }
  1791. BankTab tab = c.getBank().getCurrentBankTab();
  1792. BankItem item = new BankItem(itemID + 1, amount);
  1793. Iterator<BankTab> iterator = Arrays.asList(c.getBank().getBankTab()).iterator();
  1794. while (iterator.hasNext()) {
  1795. BankTab t = iterator.next();
  1796. if (t != null && t.size() > 0) {
  1797. Iterator<BankItem> iterator2 = t.getItems().iterator();
  1798. while (iterator2.hasNext()) {
  1799. BankItem i = iterator2.next();
  1800. if (i.getId() == item.getId() && !isNotable(itemID)) {
  1801. if (t.getTabId() != tab.getTabId()) {
  1802. tab = t;
  1803. }
  1804. } else {
  1805. if (ItemDefinition.DEFINITIONS[itemID].isNoteable() && i.getId() == item.getId()) {
  1806. item = new BankItem(itemID, amount);
  1807. if (t.getTabId() != tab.getTabId()) {
  1808. tab = t;
  1809. }
  1810. }
  1811. }
  1812. }
  1813. }
  1814. }
  1815. if (isNotable(itemID)) {
  1816. item = new BankItem(itemID, amount);
  1817. }
  1818. if (item.getAmount() > getItemAmount(itemID))
  1819. item.setAmount(getItemAmount(itemID));
  1820. if (tab.getItemAmount(item) == Integer.MAX_VALUE) {
  1821. c.sendMessage("Your bank is already holding the maximum amount of " + getItemName(itemID).toLowerCase()
  1822. + " possible.");
  1823. return false;
  1824. }
  1825. if (tab.freeSlots() == 0 && !tab.contains(item)) {
  1826. c.sendMessage("Your current bank tab is full.");
  1827. return false;
  1828. }
  1829. long totalAmount = ((long) tab.getItemAmount(item) + (long) item.getAmount());
  1830. if (totalAmount >= Integer.MAX_VALUE) {
  1831. int difference = Integer.MAX_VALUE - tab.getItemAmount(item);
  1832. item.setAmount(difference);
  1833. deleteItem2(itemID, difference);
  1834. } else {
  1835. deleteItem2(itemID, item.getAmount());
  1836. }
  1837. tab.add(item);
  1838. if (updateView) {
  1839. resetTempItems();
  1840. resetBank();
  1841. }
  1842. return true;
  1843. }
  1844.  
  1845. /*
  1846. * public boolean addToBank(int itemID, int amount, boolean updateView) { if
  1847. * (c.getPA().viewingOtherBank) { c.getPA().resetOtherBank(); return false;
  1848. * } if (!c.isBanking) return false; if
  1849. * (!c.getItems().playerHasItem(itemID)) return false; if
  1850. * (c.getBank().getBankSearch().isSearching()) {
  1851. * c.getBank().getBankSearch().reset(); return false; } if
  1852. * (c.getBankPin().requiresUnlock()) { resetBank(); c.getBankPin().open(2);
  1853. * return false; } BankTab tab = c.getBank().getCurrentBankTab(); BankItem
  1854. * item = new BankItem(itemID + 1, amount); Iterator<BankTab> iterator =
  1855. * Arrays.asList(c.getBank().getBankTab()).iterator(); while
  1856. * (iterator.hasNext()) { BankTab t = iterator.next(); if (t != null &&
  1857. * t.size() > 0) { Iterator<BankItem> iterator2 = t.getItems().iterator();
  1858. * while (iterator2.hasNext()) { BankItem i = iterator2.next(); if
  1859. * (i.getId() == item.getId() && !isNotable(itemID)) { if (t.getTabId() !=
  1860. * tab.getTabId()) { tab = t; } } else { if
  1861. * (ItemDefinition.DEFINITIONS[itemID].isNoteable() && i.getId() ==
  1862. * item.getId()) { item = new BankItem(itemID, amount); if (t.getTabId() !=
  1863. * tab.getTabId()) { tab = t; } } } } } } if (isNotable(itemID)) { item =
  1864. * new BankItem(itemID, amount); } if (item.getAmount() >
  1865. * getItemAmount(itemID)) item.setAmount(getItemAmount(itemID)); if
  1866. * (tab.getItemAmount(item) == Integer.MAX_VALUE) { c.sendMessage(
  1867. * "Your bank is already holding the maximum amount of " +
  1868. * getItemName(itemID).toLowerCase() + " possible."); return false; } if
  1869. * (tab.freeSlots() == 0 && !tab.contains(item)) { c.sendMessage(
  1870. * "Your current bank tab is full."); return false; } long totalAmount =
  1871. * ((long) tab.getItemAmount(item) + (long) item.getAmount()); if
  1872. * (totalAmount >= Integer.MAX_VALUE) { int difference = Integer.MAX_VALUE -
  1873. * tab.getItemAmount(item); item.setAmount(difference); deleteItem2(itemID,
  1874. * difference); } else { deleteItem2(itemID, item.getAmount()); }
  1875. * tab.add(item); if (updateView) { resetTempItems(); resetBank(); } return
  1876. * true; }
  1877. */
  1878.  
  1879. public boolean bankContains(int itemId) {
  1880. for (BankTab tab : c.getBank().getBankTab())
  1881. if (tab.contains(new BankItem(itemId + 1)))
  1882. return true;
  1883. return false;
  1884. }
  1885.  
  1886. public boolean bankContains(int itemId, int itemAmount) {
  1887. for (BankTab tab : c.getBank().getBankTab()) {
  1888. if (tab.containsAmount(new BankItem(itemId + 1, itemAmount))) {
  1889. return true;
  1890. }
  1891. }
  1892. return false;
  1893. }
  1894.  
  1895. public boolean isBankSpaceAvailable(BankItem item) {
  1896. for (BankTab tab : c.getBank().getBankTab()) {
  1897. if (tab.contains(item)) {
  1898. return tab.spaceAvailable(item);
  1899. }
  1900. }
  1901. return false;
  1902. }
  1903.  
  1904. public boolean removeFromAnyTabWithoutAdding(int itemId, int itemAmount, boolean updateView) {
  1905. if (c.getPA().viewingOtherBank) {
  1906. c.getPA().resetOtherBank();
  1907. }
  1908. BankTab tab = null;
  1909. BankItem item = new BankItem(itemId + 1, itemAmount);
  1910. for (BankTab searchedTab : c.getBank().getBankTab()) {
  1911. if (searchedTab.contains(item)) {
  1912. tab = searchedTab;
  1913. break;
  1914. }
  1915. }
  1916. if (tab == null) {
  1917. return false;
  1918. }
  1919. if (itemAmount <= 0)
  1920. return false;
  1921. if (!tab.contains(item))
  1922. return false;
  1923. if (tab.getItemAmount(item) < itemAmount) {
  1924. item.setAmount(tab.getItemAmount(item));
  1925. }
  1926. if (item.getAmount() < 0)
  1927. item.setAmount(0);
  1928. tab.remove(item);
  1929. if (tab.size() == 0) {
  1930. c.getBank().setCurrentBankTab(c.getBank().getBankTab(0));
  1931. }
  1932. if (updateView) {
  1933. resetBank();
  1934. }
  1935. c.getItems().resetItems(5064);
  1936. return true;
  1937. }
  1938.  
  1939. public void removeFromBank(int itemId, int itemAmount, boolean updateView) {
  1940. BankTab tab = c.getBank().getCurrentBankTab();
  1941. BankItem item = new BankItem(itemId + 1, itemAmount);
  1942. boolean noted = false;
  1943. if (!c.isBanking)
  1944. return;
  1945. if (c.getPA().viewingOtherBank) {
  1946. c.getPA().resetOtherBank();
  1947. return;
  1948. }
  1949. if (itemAmount <= 0)
  1950. return;
  1951. if (c.getBankPin().requiresUnlock()) {
  1952. resetBank();
  1953. c.getBankPin().open(2);
  1954. return;
  1955. }
  1956. if (System.currentTimeMillis() - c.lastBankDeposit < 100)
  1957. return;
  1958. if (Server.getMultiplayerSessionListener().inAnySession(c)) {
  1959. c.getPA().closeAllWindows();
  1960. return;
  1961. }
  1962. if (!tab.contains(item))
  1963. return;
  1964. if (c.takeAsNote) {
  1965. System.out.println(itemId + 1);
  1966. if (ItemDefinition.DEFINITIONS[itemId + 1].isNoted()) {
  1967. noted = true;
  1968. } else
  1969. c.sendMessage("This item cannot be taken out as noted.");
  1970. }
  1971. if (freeSlots() == 0 && !playerHasItem(itemId)) {
  1972. c.sendMessage("There is not enough space in your inventory.");
  1973. return;
  1974. }
  1975. if (getItemAmount(itemId) == Integer.MAX_VALUE) {
  1976. c.sendMessage("Your inventory is already holding the maximum amount of " + getItemName(itemId).toLowerCase()
  1977. + " possible.");
  1978. return;
  1979. }
  1980. if (isStackable(item.getId() - 1) || noted) {
  1981. long totalAmount = (long) getItemAmount(itemId) + (long) itemAmount;
  1982. if (totalAmount > Integer.MAX_VALUE)
  1983. item.setAmount(tab.getItemAmount(item) - getItemAmount(itemId));
  1984. }
  1985. if (tab.getItemAmount(item) < itemAmount) {
  1986. item.setAmount(tab.getItemAmount(item));
  1987. }
  1988. if (!isStackable(item.getId() - 1) && !noted) {
  1989. if (freeSlots() < item.getAmount())
  1990. item.setAmount(freeSlots());
  1991. }
  1992. if (item.getAmount() < 0)
  1993. item.setAmount(0);
  1994. if (!noted)
  1995. addItem(item.getId() - 1, item.getAmount());
  1996. else
  1997. addItem(item.getId(), item.getAmount());
  1998. tab.remove(item);
  1999. if (tab.size() == 0) {
  2000. c.getBank().setCurrentBankTab(c.getBank().getBankTab(0));
  2001. }
  2002. if (updateView) {
  2003. resetBank();
  2004. }
  2005. c.getItems().resetItems(5064);
  2006. }
  2007.  
  2008. public boolean addEquipmentToBank(int itemID, int slot, int amount, boolean updateView) {
  2009. if (c.getPA().viewingOtherBank) {
  2010. c.getPA().resetOtherBank();
  2011. return false;
  2012. }
  2013. if (!c.isBanking)
  2014. return false;
  2015. if (c.playerEquipment[slot] != itemID || c.playerEquipmentN[slot] <= 0)
  2016. return false;
  2017. BankTab tab = c.getBank().getCurrentBankTab();
  2018. BankItem item = new BankItem(itemID + 1, amount);
  2019. Iterator<BankTab> iterator = Arrays.asList(c.getBank().getBankTab()).iterator();
  2020. while (iterator.hasNext()) {
  2021. BankTab t = iterator.next();
  2022. if (t != null && t.size() > 0) {
  2023. Iterator<BankItem> iterator2 = t.getItems().iterator();
  2024. while (iterator2.hasNext()) {
  2025. BankItem i = iterator2.next();
  2026. if (i.getId() == item.getId() && !isNotable(itemID)) {
  2027. if (t.getTabId() != tab.getTabId()) {
  2028. tab = t;
  2029. c.getBank().setCurrentBankTab(tab);
  2030. resetBank();
  2031. }
  2032. } else {
  2033. if (isNotable(itemID) && i.getId() == item.getId() - 1) {
  2034. item = new BankItem(itemID, amount);
  2035. if (t.getTabId() != tab.getTabId()) {
  2036. tab = t;
  2037. c.getBank().setCurrentBankTab(tab);
  2038. resetBank();
  2039. }
  2040. }
  2041. }
  2042. }
  2043. }
  2044. }
  2045. if (isNotable(itemID))
  2046. item = new BankItem(itemID, amount);
  2047. if (item.getAmount() > c.playerEquipmentN[slot])
  2048. item.setAmount(c.playerEquipmentN[slot]);
  2049. if (tab.getItemAmount(item) == Integer.MAX_VALUE) {
  2050. c.sendMessage("Your bank is already holding the maximum amount of " + getItemName(itemID).toLowerCase()
  2051. + " possible.");
  2052. return false;
  2053. }
  2054. if (tab.freeSlots() == 0 && !tab.contains(item)) {
  2055. c.sendMessage("Your current bank tab is full.");
  2056. return false;
  2057. }
  2058. long totalAmount = ((long) tab.getItemAmount(item) + (long) item.getAmount());
  2059. if (totalAmount >= Integer.MAX_VALUE) {
  2060. c.sendMessage("Your bank is already holding the maximum amount of this item.");
  2061. return false;
  2062. } else
  2063. c.playerEquipmentN[slot] -= item.getAmount();
  2064. if (c.playerEquipmentN[slot] <= 0) {
  2065. c.playerEquipmentN[slot] = -1;
  2066. c.playerEquipment[slot] = -1;
  2067. }
  2068. tab.add(item);
  2069. if (updateView) {
  2070. resetTempItems();
  2071. resetBank();
  2072. updateSlot(slot);
  2073. }
  2074. return true;
  2075. }
  2076.  
  2077. /**
  2078. * Checking item amounts.
  2079. *
  2080. * @param itemID
  2081. * @return
  2082. */
  2083. public int itemAmount(int itemID) {
  2084. int tempAmount = 0;
  2085. for (int i = 0; i < c.playerItems.length; i++) {
  2086. if (c.playerItems[i] == itemID) {
  2087. tempAmount += c.playerItemsN[i];
  2088. }
  2089. }
  2090. return tempAmount;
  2091. }
  2092.  
  2093. /**
  2094. * Checks if the item is stackable.
  2095. *
  2096. * @param itemID
  2097. * @return
  2098. */
  2099. public boolean isStackable(int itemID) {
  2100. return ItemDefinition.forId(itemID).isStackable();
  2101. }
  2102.  
  2103. /**
  2104. * Updates the equipment tab.
  2105. **/
  2106. public void setEquipment(int wearID, int amount, int targetSlot) {
  2107. c.isFullHelm = Item.isFullHelm(c.playerEquipment[Player.playerHat]);
  2108. c.isFullMask = Item.isFullMask(c.playerEquipment[Player.playerHat]);
  2109. c.isFullBody = Item.isFullBody(c.playerEquipment[Player.playerChest]);
  2110. // synchronized (c) {
  2111. c.getOutStream().createFrameVarSizeWord(34);
  2112. c.getOutStream().writeWord(1688);
  2113. c.getOutStream().writeByte(targetSlot);
  2114. c.getOutStream().writeWord(wearID + 1);
  2115. if (amount > 254) {
  2116. c.getOutStream().writeByte(255);
  2117. c.getOutStream().writeDWord(amount);
  2118. } else {
  2119. c.getOutStream().writeByte(amount);
  2120. }
  2121. c.getOutStream().endFrameVarSizeWord();
  2122. c.flushOutStream();
  2123. c.playerEquipment[targetSlot] = wearID;
  2124. c.playerEquipmentN[targetSlot] = amount;
  2125. c.updateRequired = true;
  2126. c.setAppearanceUpdateRequired(true);
  2127. // }
  2128. }
  2129.  
  2130. public void swapBankItem(int from, int to) {
  2131. BankItem item = c.getBank().getCurrentBankTab().getItem(from);
  2132. c.getBank().getCurrentBankTab().setItem(from, c.getBank().getCurrentBankTab().getItem(to));
  2133. c.getBank().getCurrentBankTab().setItem(to, item);
  2134. }
  2135.  
  2136. public void moveItems(int from, int to, int moveWindow, boolean insertMode) {
  2137. if (moveWindow == 3214) {
  2138. int tempI;
  2139. int tempN;
  2140. tempI = c.playerItems[from];
  2141. tempN = c.playerItemsN[from];
  2142. c.playerItems[from] = c.playerItems[to];
  2143. c.playerItemsN[from] = c.playerItemsN[to];
  2144. c.playerItems[to] = tempI;
  2145. c.playerItemsN[to] = tempN;
  2146. }
  2147. if (moveWindow == 5382) {
  2148. if (!c.isBanking) {
  2149. c.getPA().removeAllWindows();
  2150. resetBank();
  2151. return;
  2152. }
  2153. if (c.getPA().viewingOtherBank) {
  2154. c.getPA().resetOtherBank();
  2155. return;
  2156. }
  2157. if (c.getBank().getBankSearch().isSearching()) {
  2158. c.getBank().getBankSearch().reset();
  2159. return;
  2160. }
  2161. if (c.getBankPin().requiresUnlock()) {
  2162. resetBank();
  2163. c.isBanking = false;
  2164. c.getBankPin().open(2);
  2165. return;
  2166. }
  2167. if (to > 999) {
  2168. int tabId = to - 1000;
  2169. if (tabId < 0)
  2170. tabId = 0;
  2171. if (tabId == c.getBank().getCurrentBankTab().getTabId()) {
  2172. c.sendMessage("You cannot add an item from it's tab to the same tab.");
  2173. resetBank();
  2174. return;
  2175. }
  2176. if (from > c.getBank().getCurrentBankTab().size()) {
  2177. resetBank();
  2178. return;
  2179. }
  2180. BankItem item = c.getBank().getCurrentBankTab().getItem(from);
  2181. if (item == null) {
  2182. resetBank();
  2183. return;
  2184. }
  2185. c.getBank().getCurrentBankTab().remove(item);
  2186. c.getBank().getBankTab()[tabId].add(item);
  2187. } else {
  2188. if (from > c.getBank().getCurrentBankTab().size() - 1
  2189. || to > c.getBank().getCurrentBankTab().size() - 1) {
  2190. resetBank();
  2191. return;
  2192. }
  2193. if (!insertMode) {
  2194. BankItem item = c.getBank().getCurrentBankTab().getItem(from);
  2195. c.getBank().getCurrentBankTab().setItem(from, c.getBank().getCurrentBankTab().getItem(to));
  2196. c.getBank().getCurrentBankTab().setItem(to, item);
  2197. } else {
  2198. int tempFrom = from;
  2199. for (int tempTo = to; tempFrom != tempTo;)
  2200. if (tempFrom > tempTo) {
  2201. swapBankItem(tempFrom, tempFrom - 1);
  2202. tempFrom--;
  2203. } else if (tempFrom < tempTo) {
  2204. swapBankItem(tempFrom, tempFrom + 1);
  2205. tempFrom++;
  2206. }
  2207. }
  2208. }
  2209. }
  2210. if (moveWindow == 5382) {
  2211. resetBank();
  2212. }
  2213. if (moveWindow == 5064) {
  2214. int tempI;
  2215. int tempN;
  2216. tempI = c.playerItems[from];
  2217. tempN = c.playerItemsN[from];
  2218.  
  2219. c.playerItems[from] = c.playerItems[to];
  2220. c.playerItemsN[from] = c.playerItemsN[to];
  2221. c.playerItems[to] = tempI;
  2222. c.playerItemsN[to] = tempN;
  2223. resetItems(3214);
  2224. }
  2225. resetTempItems();
  2226. if (moveWindow == 3214) {
  2227. resetItems(3214);
  2228. }
  2229.  
  2230. }
  2231.  
  2232. /**
  2233. * Delete item equipment.
  2234. **/
  2235. public void deleteEquipment(int i, int j) {
  2236. // synchronized (c) {
  2237. if (PlayerHandler.players[c.index] == null) {
  2238. return;
  2239. }
  2240. if (i < 0) {
  2241. return;
  2242. }
  2243.  
  2244. c.playerEquipment[j] = -1;
  2245. c.playerEquipmentN[j] = c.playerEquipmentN[j] - 1;
  2246. c.getOutStream().createFrame(34);
  2247. c.getOutStream().writeWord(6);
  2248. c.getOutStream().writeWord(1688);
  2249. c.getOutStream().writeByte(j);
  2250. c.getOutStream().writeWord(0);
  2251. c.getOutStream().writeByte(0);
  2252. getBonus();
  2253. if (j == Player.playerWeapon) {
  2254. sendWeapon(-1, "Unarmed");
  2255. }
  2256. resetBonus();
  2257. getBonus();
  2258. writeBonus();
  2259. c.updateRequired = true;
  2260. c.setAppearanceUpdateRequired(true);
  2261. // }
  2262. }
  2263.  
  2264. /**
  2265. * Delete items.
  2266. *
  2267. * @param id
  2268. * @param amount
  2269. */
  2270. public void deleteItem(int id, int amount) {
  2271. deleteItem(id, getItemSlot(id), amount);
  2272. }
  2273.  
  2274. public void deleteItem(int id, int slot, int amount) {
  2275. if (id <= 0 || slot < 0) {
  2276. return;
  2277. }
  2278. if (c.playerItems[slot] == (id + 1)) {
  2279. if (c.playerItemsN[slot] > amount) {
  2280. c.playerItemsN[slot] -= amount;
  2281. } else {
  2282. c.playerItemsN[slot] = 0;
  2283. c.playerItems[slot] = 0;
  2284. }
  2285. PlayerSave.saveGame(c);
  2286. resetItems(3214);
  2287. }
  2288. }
  2289.  
  2290. public void deleteItem2(int id, int amount) {
  2291. int am = amount;
  2292. for (int i = 0; i < c.playerItems.length; i++) {
  2293. if (am == 0) {
  2294. break;
  2295. }
  2296. if (c.playerItems[i] == (id + 1)) {
  2297. if (c.playerItemsN[i] > amount) {
  2298. c.playerItemsN[i] -= amount;
  2299. break;
  2300. } else {
  2301. c.playerItems[i] = 0;
  2302. c.playerItemsN[i] = 0;
  2303. am--;
  2304. }
  2305. }
  2306. }
  2307. resetItems(3214);
  2308. }
  2309.  
  2310. /**
  2311. * Delete arrows.
  2312. **/
  2313. public void deleteArrow() {
  2314. // synchronized (c) {
  2315. if (c.playerEquipment[Player.playerCape] == 10499 && Misc.random(5) != 1
  2316. && c.playerEquipment[Player.playerArrows] != 4740)
  2317. return;
  2318. if (c.playerEquipmentN[Player.playerArrows] == 1) {
  2319. c.getItems().deleteEquipment(c.playerEquipment[Player.playerArrows], Player.playerArrows);
  2320. }
  2321. if (c.playerEquipmentN[Player.playerArrows] != 0) {
  2322. c.getOutStream().createFrameVarSizeWord(34);
  2323. c.getOutStream().writeWord(1688);
  2324. c.getOutStream().writeByte(Player.playerArrows);
  2325. c.getOutStream().writeWord(c.playerEquipment[Player.playerArrows] + 1);
  2326. if (c.playerEquipmentN[Player.playerArrows] - 1 > 254) {
  2327. c.getOutStream().writeByte(255);
  2328. c.getOutStream().writeDWord(c.playerEquipmentN[Player.playerArrows] - 1);
  2329. } else {
  2330. c.getOutStream().writeByte(c.playerEquipmentN[Player.playerArrows] - 1);
  2331. }
  2332. c.getOutStream().endFrameVarSizeWord();
  2333. c.flushOutStream();
  2334. c.playerEquipmentN[Player.playerArrows] -= 1;
  2335. }
  2336. c.updateRequired = true;
  2337. c.setAppearanceUpdateRequired(true);
  2338. // }
  2339. }
  2340.  
  2341. public void deleteEquipment() {
  2342. // synchronized (c) {
  2343. if (c.playerEquipmentN[Player.playerWeapon] == 1) {
  2344. c.getItems().deleteEquipment(c.playerEquipment[Player.playerWeapon], Player.playerWeapon);
  2345. }
  2346. if (c.playerEquipmentN[Player.playerWeapon] != 0) {
  2347. c.getOutStream().createFrameVarSizeWord(34);
  2348. c.getOutStream().writeWord(1688);
  2349. c.getOutStream().writeByte(Player.playerWeapon);
  2350. c.getOutStream().writeWord(c.playerEquipment[Player.playerWeapon] + 1);
  2351. if (c.playerEquipmentN[Player.playerWeapon] - 1 > 254) {
  2352. c.getOutStream().writeByte(255);
  2353. c.getOutStream().writeDWord(c.playerEquipmentN[Player.playerWeapon] - 1);
  2354. } else {
  2355. c.getOutStream().writeByte(c.playerEquipmentN[Player.playerWeapon] - 1);
  2356. }
  2357. c.getOutStream().endFrameVarSizeWord();
  2358. c.flushOutStream();
  2359. c.playerEquipmentN[Player.playerWeapon] -= 1;
  2360. }
  2361. c.updateRequired = true;
  2362. c.setAppearanceUpdateRequired(true);
  2363. // }
  2364. }
  2365.  
  2366. /**
  2367. * Dropping arrows
  2368. **/
  2369. public void dropArrowNpc() {
  2370. if (c.playerEquipment[Player.playerCape] == 10499)
  2371. return;
  2372. int enemyX = NPCHandler.npcs[c.oldNpcIndex].getX();
  2373. int enemyY = NPCHandler.npcs[c.oldNpcIndex].getY();
  2374. int height = NPCHandler.npcs[c.oldNpcIndex].heightLevel;
  2375. if (Misc.random(10) >= 4) {
  2376. if (Server.itemHandler.itemAmount(c.playerName, c.rangeItemUsed, enemyX, enemyY, height) == 0) {
  2377. Server.itemHandler.createGroundItem(c, c.rangeItemUsed, enemyX, enemyY, height, 1, c.getId());
  2378. } else if (Server.itemHandler.itemAmount(c.playerName, c.rangeItemUsed, enemyX, enemyY, height) != 0) {
  2379. int amount = Server.itemHandler.itemAmount(c.playerName, c.rangeItemUsed, enemyX, enemyY, height);
  2380. Server.itemHandler.removeGroundItem(c, c.rangeItemUsed, enemyX, enemyY, height, false);
  2381. Server.itemHandler.createGroundItem(c, c.rangeItemUsed, enemyX, enemyY, height, amount + 1, c.getId());
  2382. }
  2383. }
  2384. }
  2385.  
  2386. /**
  2387. * Ranging arrows.
  2388. */
  2389. public void dropArrowPlayer() {
  2390. int enemyX = PlayerHandler.players[c.oldPlayerIndex].getX();
  2391. int enemyY = PlayerHandler.players[c.oldPlayerIndex].getY();
  2392. int height = PlayerHandler.players[c.oldPlayerIndex].heightLevel;
  2393. if (c.playerEquipment[Player.playerCape] == 10499)
  2394. return;
  2395. if (Misc.random(10) >= 4) {
  2396. if (Server.itemHandler.itemAmount(c.playerName, c.rangeItemUsed, enemyX, enemyY, height) == 0) {
  2397. Server.itemHandler.createGroundItem(c, c.rangeItemUsed, enemyX, enemyY, height, 1, c.getId());
  2398. } else if (Server.itemHandler.itemAmount(c.playerName, c.rangeItemUsed, enemyX, enemyY, height) != 0) {
  2399. int amount = Server.itemHandler.itemAmount(c.playerName, c.rangeItemUsed, enemyX, enemyY, height);
  2400. Server.itemHandler.removeGroundItem(c, c.rangeItemUsed, enemyX, enemyY, height, false);
  2401. Server.itemHandler.createGroundItem(c, c.rangeItemUsed, enemyX, enemyY, height, amount + 1, c.getId());
  2402. }
  2403. }
  2404. }
  2405.  
  2406. /**
  2407. * Removes all items from player's equipment.
  2408. */
  2409. public void removeAllItems() {
  2410. for (int i = 0; i < c.playerItems.length; i++) {
  2411. c.playerItems[i] = 0;
  2412. c.playerItemsN[i] = 0;
  2413. }
  2414. resetItems(3214);
  2415. }
  2416.  
  2417. /**
  2418. * Checks if you have a free slot.
  2419. *
  2420. * @return
  2421. */
  2422. public int freeSlots() {
  2423. int freeS = 0;
  2424. for (int i = 0; i < c.playerItems.length; i++) {
  2425. if (c.playerItems[i] <= 0) {
  2426. freeS++;
  2427. }
  2428. }
  2429. return freeS;
  2430. }
  2431.  
  2432. public int freeEquipmentSlots() {
  2433. int slots = 0;
  2434. for (int i = 0; i < c.playerEquipment.length; i++) {
  2435. if (c.playerEquipment[i] <= 0) {
  2436. slots++;
  2437. }
  2438. }
  2439. return slots;
  2440. }
  2441.  
  2442. public boolean isWearingItems() {
  2443. return freeEquipmentSlots() < 14;
  2444. }
  2445.  
  2446. /**
  2447. * Finds the item.
  2448. *
  2449. * @param id
  2450. * @param items
  2451. * @param amounts
  2452. * @return
  2453. */
  2454. public int findItem(int id, int[] items, int[] amounts) {
  2455. for (int i = 0; i < c.playerItems.length; i++) {
  2456. if (((items[i] - 1) == id) && (amounts[i] > 0)) {
  2457. return i;
  2458. }
  2459. }
  2460. return -1;
  2461. }
  2462.  
  2463. /**
  2464. * Gets the item name from the item.cfg
  2465. *
  2466. * @param ItemID
  2467. * @return
  2468. */
  2469. public String getItemName(int ItemID) {
  2470. if (ItemID == -1) {
  2471. return "Unarmed";
  2472. }
  2473. if (ItemID == 15573) {
  2474. return "Unarmed";
  2475. }
  2476. return ItemDefinition.forId(ItemID).getName();
  2477. }
  2478.  
  2479. /**
  2480. * Gets the item ID from the item.cfg
  2481. *
  2482. * @param itemName
  2483. * @return
  2484. */
  2485. public int getItemId(String itemName) {
  2486. for (ItemDefinition it : ItemDefinition.DEFINITIONS) {
  2487. if (it == null || it.getName() == null || it.getName().equals("null")) {
  2488. continue;
  2489. }
  2490. if (it.getName().equalsIgnoreCase(itemName)) {
  2491. return it.getId();
  2492. }
  2493. }
  2494. return -1;
  2495. }
  2496.  
  2497. /**
  2498. * Gets the item slot.
  2499. *
  2500. * @param ItemID
  2501. * @return
  2502. */
  2503. public int getItemSlot(int ItemID) {
  2504. for (int i = 0; i < c.playerItems.length; i++) {
  2505. if ((c.playerItems[i] - 1) == ItemID) {
  2506. return i;
  2507. }
  2508. }
  2509. return -1;
  2510. }
  2511.  
  2512. /**
  2513. * Gets the item amount.
  2514. *
  2515. * @param ItemID
  2516. * @return
  2517. */
  2518. public int getItemAmount(int ItemID) {
  2519. int itemCount = 0;
  2520. for (int i = 0; i < c.playerItems.length; i++) {
  2521. if ((c.playerItems[i] - 1) == ItemID) {
  2522. itemCount += c.playerItemsN[i];
  2523. }
  2524. }
  2525. return itemCount;
  2526. }
  2527.  
  2528. /**
  2529. * Checks if the player has the item.
  2530. *
  2531. * @param itemID
  2532. * @param amt
  2533. * @param slot
  2534. * @return
  2535. */
  2536. public boolean playerHasItem(int itemID, int amt, int slot) {
  2537. itemID++;
  2538. int found = 0;
  2539. if (c.playerItems[slot] == (itemID)) {
  2540. for (int i = 0; i < c.playerItems.length; i++) {
  2541. if (c.playerItems[i] == itemID) {
  2542. if (c.playerItemsN[i] >= amt) {
  2543. return true;
  2544. } else {
  2545. found++;
  2546. }
  2547. }
  2548. }
  2549. if (found >= amt) {
  2550. return true;
  2551. }
  2552. return false;
  2553. }
  2554. return false;
  2555. }
  2556.  
  2557. public boolean playerHasItem(int itemID) {
  2558. itemID++;
  2559. for (int i = 0; i < c.playerItems.length; i++) {
  2560. if (c.playerItems[i] == itemID)
  2561. return true;
  2562. }
  2563. return false;
  2564. }
  2565.  
  2566. public boolean playerHasAllItems(int[] items) {
  2567. for (int i = 0; i < items.length; i++) {
  2568. if (!playerHasItem(items[i]))
  2569. return false;
  2570. }
  2571. return true;
  2572. }
  2573.  
  2574. public boolean playerHasItem(int itemID, int amt) {
  2575. itemID++;
  2576. int found = 0;
  2577. for (int i = 0; i < c.playerItems.length; i++) {
  2578. if (c.playerItems[i] == itemID) {
  2579. if (c.playerItemsN[i] >= amt) {
  2580. return true;
  2581. } else {
  2582. found++;
  2583. }
  2584. }
  2585. }
  2586. if (found >= amt) {
  2587. return true;
  2588. }
  2589. return false;
  2590. }
  2591.  
  2592. /**
  2593. * Getting un-noted items.
  2594. *
  2595. * @param ItemID
  2596. * @return
  2597. */
  2598. public int getUnnotedItem(int ItemID) {
  2599. return ItemDefinition.forId(ItemID).getUnnotedId();
  2600. }
  2601.  
  2602. /**
  2603. * Dropping items
  2604. **/
  2605. public void createGroundItem(int itemID, int itemX, int itemY, int itemAmount) {
  2606. c.getOutStream().createFrame(85);
  2607. c.getOutStream().writeByteC((itemY - 8 * c.mapRegionY));
  2608. c.getOutStream().writeByteC((itemX - 8 * c.mapRegionX));
  2609. c.getOutStream().createFrame(44);
  2610. c.getOutStream().writeWordBigEndianA(itemID);
  2611. c.getOutStream().writeWord(itemAmount);
  2612. c.getOutStream().writeByte(0);
  2613. c.flushOutStream();
  2614. }
  2615.  
  2616. /**
  2617. * Pickup items from the ground.
  2618. **/
  2619. public void removeGroundItem(int itemID, int itemX, int itemY, int Amount) {
  2620. // synchronized (c) {
  2621. c.getOutStream().createFrame(85);
  2622. c.getOutStream().writeByteC((itemY - 8 * c.mapRegionY));
  2623. c.getOutStream().writeByteC((itemX - 8 * c.mapRegionX));
  2624. c.getOutStream().createFrame(156);
  2625. c.getOutStream().writeByteS(0);
  2626. c.getOutStream().writeWord(itemID);
  2627. c.flushOutStream();
  2628. // }
  2629. }
  2630.  
  2631. public void createGroundItem(GroundItem item) {
  2632. c.getOutStream().createFrame(85);
  2633. c.getOutStream().writeByteC((item.getY() - 8 * c.mapRegionY));
  2634. c.getOutStream().writeByteC((item.getX() - 8 * c.mapRegionX));
  2635. c.getOutStream().createFrame(44);
  2636. c.getOutStream().writeWordBigEndianA(item.getId());
  2637. c.getOutStream().writeWord(item.getAmount());
  2638. c.getOutStream().writeByte(0);
  2639. c.flushOutStream();
  2640. }
  2641.  
  2642. public void removeGroundItem(GroundItem item) {
  2643. c.getOutStream().createFrame(85);
  2644. c.getOutStream().writeByteC((item.getY() - 8 * c.mapRegionY));
  2645. c.getOutStream().writeByteC((item.getX() - 8 * c.mapRegionX));
  2646. c.getOutStream().createFrame(156);
  2647. c.getOutStream().writeByteS(0);
  2648. c.getOutStream().writeWord(item.getId());
  2649. c.flushOutStream();
  2650. }
  2651.  
  2652. /**
  2653. * Checks if a player owns a cape.
  2654. *
  2655. * @return
  2656. */
  2657. public boolean ownsCape() {
  2658. if (c.getItems().playerHasItem(2412, 1) || c.getItems().playerHasItem(2413, 1)
  2659. || c.getItems().playerHasItem(2414, 1))
  2660. return true;
  2661. for (int j = 0; j < Config.BANK_SIZE; j++) {
  2662. if (c.bankItems[j] == 2412 || c.bankItems[j] == 2413 || c.bankItems[j] == 2414)
  2663. return true;
  2664. }
  2665. if (c.playerEquipment[Player.playerCape] == 2413 || c.playerEquipment[Player.playerCape] == 2414
  2666. || c.playerEquipment[Player.playerCape] == 2415)
  2667. return true;
  2668. return false;
  2669. }
  2670.  
  2671. /**
  2672. * Checks if the player has all the shards.
  2673. *
  2674. * @return
  2675. */
  2676. public boolean hasAllShards() {
  2677. return playerHasItem(11818, 1) && playerHasItem(11820, 1) && playerHasItem(11822, 1);
  2678. }
  2679.  
  2680. /**
  2681. * Makes the godsword blade.
  2682. */
  2683. public void makeBlade() {
  2684. deleteItem(11818, 1);
  2685. deleteItem(11820, 1);
  2686. deleteItem(11822, 1);
  2687. addItem(11798, 1);
  2688. c.getDH().sendStatement("You combine the shards to make a godsword blade.");
  2689. }
  2690.  
  2691. /**
  2692. * Makes the godsword.
  2693. *
  2694. * @param i
  2695. */
  2696. public void makeGodsword(int i) {
  2697. if (playerHasItem(11798) && playerHasItem(i)) {
  2698. deleteItem(11798, 1);
  2699. deleteItem(i, 1);
  2700. addItem(i - 8, 1);
  2701. c.getDH().sendStatement("You combine the hilt and the blade to make a full godsword.");
  2702. }
  2703. }
  2704.  
  2705. public int getTotalRiskedWorth() {
  2706. int worth = getTotalWorth();
  2707. resetKeepItems();
  2708. if (!c.isSkulled) {
  2709. for (int i = 0; i < 3; i++) {
  2710. keepItem(i, false);
  2711. }
  2712. }
  2713. if (c.prayerActive[10] && c.lastProtItem.elapsed(700)) {
  2714. keepItem(3, false);
  2715. }
  2716. for (int i = 0; i < c.itemKeptId.length; i++) {
  2717. worth -= ShopAssistant.getItemShopValue(c.itemKeptId[i]);
  2718. }
  2719. return worth;
  2720. }
  2721.  
  2722. public int getTotalWorth() {
  2723. int worth = 0;
  2724. for (int inventorySlot = 0; inventorySlot < c.playerItems.length; inventorySlot++) {
  2725. int inventoryId = c.playerItems[inventorySlot] - 1;
  2726. int inventoryAmount = c.playerItemsN[inventorySlot];
  2727. int price = ShopAssistant.getItemShopValue(inventoryId);
  2728. if (inventoryId == 996)
  2729. price = 1;
  2730. if (inventoryId > 0 && inventoryAmount > 0) {
  2731. worth += (price * inventoryAmount);
  2732. }
  2733. }
  2734. for (int equipmentSlot = 0; equipmentSlot < c.playerEquipment.length; equipmentSlot++) {
  2735. int equipmentId = c.playerEquipment[equipmentSlot];
  2736. int equipmentAmount = c.playerEquipmentN[equipmentSlot];
  2737. int price = ShopAssistant.getItemShopValue(equipmentId);
  2738. if (equipmentId > 0 && equipmentAmount > 0) {
  2739. worth += (price * equipmentAmount);
  2740. }
  2741. }
  2742. return worth;
  2743. }
  2744.  
  2745. /**
  2746. * Checks if the item is a godsword hilt.
  2747. *
  2748. * @param i
  2749. * @return
  2750. */
  2751. public boolean isHilt(int i) {
  2752. return i >= 11810 && i <= 11816 && i % 2 == 0;
  2753. }
  2754. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement