Advertisement
Guest User

Untitled

a guest
Jan 7th, 2012
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 65.93 KB | None | 0 0
  1. package server.model.items;
  2.  
  3. import server.Config;
  4. import server.Server;
  5. import server.model.players.Client;
  6. import server.util.Misc;
  7.  
  8. public class ItemAssistant {
  9.  
  10. private Client c;
  11.  
  12. public ItemAssistant(Client client) {
  13. this.c = client;
  14. }
  15.  
  16. /**
  17. Items
  18. **/
  19.  
  20. public int[][] brokenBarrows = {{4708,4860},{4710,4866},{4712,4872},{4714,4878},{4716,4884},
  21. {4720,4896},{4718,4890},{4720,4896},{4722,4902},{4732,4932},{4734,4938},{4736,4944},{4738,4950},
  22. {4724,4908},{4726,4914},{4728,4920},{4730,4926},{4745,4956},{4747,4926},{4749,4968},{4751,4794},
  23. {4753,4980},{4755,4986},{4757,4992},{4759,4998}};
  24.  
  25. public void resetItems(int WriteFrame) {
  26. synchronized(c) {
  27. if(c.getOutStream() != null && c != null) {
  28. c.getOutStream().createFrameVarSizeWord(53);
  29. c.getOutStream().writeWord(WriteFrame);
  30. c.getOutStream().writeWord(c.playerItems.length);
  31. for (int i = 0; i < c.playerItems.length; i++) {
  32. if(c.playerItemsN[i] > 254) {
  33. c.getOutStream().writeByte(255);
  34. c.getOutStream().writeDWord_v2(c.playerItemsN[i]);
  35. } else {
  36. c.getOutStream().writeByte(c.playerItemsN[i]);
  37. }
  38. c.getOutStream().writeWordBigEndianA(c.playerItems[i]);
  39. }
  40. c.getOutStream().endFrameVarSizeWord();
  41. c.flushOutStream();
  42. }
  43. }
  44. }
  45.  
  46. public int getItemCount(int itemID) {
  47. int count = 0;
  48. for (int j = 0; j < c.playerItems.length; j++) {
  49. if (c.playerItems[j] == itemID + 1) {
  50. count += c.playerItemsN[j];
  51. }
  52. }
  53. return count;
  54. }
  55.  
  56. public void writeBonus() {
  57. int offset = 0;
  58. String send = "";
  59. for (int i = 0; i < c.playerBonus.length; i++) {
  60. if (c.playerBonus[i] >= 0) {
  61. send = BONUS_NAMES[i]+": +"+c.playerBonus[i];
  62. } else {
  63. send = BONUS_NAMES[i]+": -"+java.lang.Math.abs(c.playerBonus[i]);
  64. }
  65.  
  66. if (i == 10) {
  67. offset = 1;
  68. }
  69. c.getPA().sendFrame126(send, (1675+i+offset));
  70. }
  71.  
  72. }
  73.  
  74. public int getTotalCount(int itemID) {
  75. int count = 0;
  76. for (int j = 0; j < c.playerItems.length; j++) {
  77. if (Item.itemIsNote[itemID+1]) {
  78. if (itemID+2 == c.playerItems[j])
  79. count += c.playerItemsN[j];
  80. }
  81. if (!Item.itemIsNote[itemID+1]) {
  82. if (itemID+1 == c.playerItems[j]) {
  83. count += c.playerItemsN[j];
  84. }
  85. }
  86. }
  87. for (int j = 0; j < c.bankItems.length; j++) {
  88. if (c.bankItems[j] == itemID + 1) {
  89. count += c.bankItemsN[j];
  90. }
  91. }
  92. return count;
  93. }
  94.  
  95. public void sendItemsKept() {
  96. synchronized(c) {
  97. if(c.getOutStream() != null && c != null ) {
  98. c.getOutStream().createFrameVarSizeWord(53);
  99. c.getOutStream().writeWord(6963);
  100. c.getOutStream().writeWord(c.itemKeptId.length);
  101. for (int i = 0; i < c.itemKeptId.length; i++) {
  102. if(c.playerItemsN[i] > 254) {
  103. c.getOutStream().writeByte(255);
  104. c.getOutStream().writeDWord_v2(1);
  105. } else {
  106. c.getOutStream().writeByte(1);
  107. }
  108. if(c.itemKeptId[i] > 0) {
  109. c.getOutStream().writeWordBigEndianA(c.itemKeptId[i]+1);
  110. } else {
  111. c.getOutStream().writeWordBigEndianA(0);
  112. }
  113. }
  114. c.getOutStream().endFrameVarSizeWord();
  115. c.flushOutStream();
  116. }
  117. }
  118. }
  119.  
  120.  
  121. /**
  122. * Item kept on death
  123. **/
  124.  
  125. public void keepItem(int keepItem, boolean deleteItem) {
  126. int value = 0;
  127. int item = 0;
  128. int slotId = 0;
  129. boolean itemInInventory = false;
  130. for(int i = 0; i < c.playerItems.length; i++) {
  131. if(c.playerItems[i]-1 > 0) {
  132. int inventoryItemValue = c.getShops().getItemShopValue(c.playerItems[i] - 1);
  133. if(inventoryItemValue > value && (!c.invSlot[i])) {
  134. value = inventoryItemValue;
  135. item = c.playerItems[i] - 1;
  136. slotId = i;
  137. itemInInventory = true;
  138. }
  139. }
  140. }
  141. for(int i1 = 0; i1 < c.playerEquipment.length; i1++) {
  142. if(c.playerEquipment[i1] > 0) {
  143. int equipmentItemValue = c.getShops().getItemShopValue(c.playerEquipment[i1]);
  144. if(equipmentItemValue > value && (!c.equipSlot[i1])) {
  145. value = equipmentItemValue;
  146. item = c.playerEquipment[i1];
  147. slotId = i1;
  148. itemInInventory = false;
  149. }
  150. }
  151. }
  152. if(itemInInventory) {
  153. c.invSlot[slotId] = true;
  154. if(deleteItem) {
  155. deleteItem(c.playerItems[slotId]-1, getItemSlot(c.playerItems[slotId]-1), 1);
  156. }
  157. } else {
  158. c.equipSlot[slotId] = true;
  159. if(deleteItem) {
  160. deleteEquipment(item, slotId);
  161. }
  162. }
  163. c.itemKeptId[keepItem] = item;
  164. }
  165.  
  166. /**
  167. * Reset items kept on death
  168. **/
  169.  
  170. public void resetKeepItems() {
  171. for(int i = 0; i < c.itemKeptId.length; i++) {
  172. c.itemKeptId[i] = -1;
  173. }
  174. for(int i1 = 0; i1 < c.invSlot.length; i1++) {
  175. c.invSlot[i1] = false;
  176. }
  177. for(int i2 = 0; i2 < c.equipSlot.length; i2++) {
  178. c.equipSlot[i2] = false;
  179. }
  180. }
  181.  
  182. /**
  183. * delete all items
  184. **/
  185.  
  186. public void deleteAllItems() {
  187. for(int i1 = 0; i1 < c.playerEquipment.length; i1++) {
  188. deleteEquipment(c.playerEquipment[i1], i1);
  189. }
  190. for(int i = 0; i < c.playerItems.length; i++) {
  191. deleteItem(c.playerItems[i]-1, getItemSlot(c.playerItems[i]-1), c.playerItemsN[i]);
  192. }
  193. }
  194.  
  195.  
  196. /**
  197. * Drop all items for your killer
  198. **/
  199.  
  200. public void dropAllItems() {
  201. Client o = (Client) Server.playerHandler.players[c.killerId];
  202.  
  203. for(int i = 0; i < c.playerItems.length; i++) {
  204. if(o != null) {
  205. if (tradeable(c.playerItems[i] - 1)) {
  206. Server.itemHandler.createGroundItem(o, c.playerItems[i] -1, c.getX(), c.getY(), c.playerItemsN[i], c.killerId);
  207. } else {
  208. if (specialCase(c.playerItems[i] - 1))
  209. Server.itemHandler.createGroundItem(o, 995, c.getX(), c.getY(), getUntradePrice(c.playerItems[i]-1), c.killerId);
  210. Server.itemHandler.createGroundItem(c, c.playerItems[i] -1, c.getX(), c.getY(), c.playerItemsN[i], c.playerId);
  211. }
  212. } else {
  213. Server.itemHandler.createGroundItem(c, c.playerItems[i] -1, c.getX(), c.getY(), c.playerItemsN[i], c.playerId);
  214. }
  215. }
  216. for(int e = 0; e < c.playerEquipment.length; e++) {
  217. if(o != null) {
  218. if (tradeable(c.playerEquipment[e])) {
  219. Server.itemHandler.createGroundItem(o, c.playerEquipment[e], c.getX(), c.getY(), c.playerEquipmentN[e], c.killerId);
  220. } else {
  221. if (specialCase(c.playerEquipment[e]))
  222. Server.itemHandler.createGroundItem(o, 995, c.getX(), c.getY(), getUntradePrice(c.playerEquipment[e]), c.killerId);
  223. Server.itemHandler.createGroundItem(c, c.playerEquipment[e], c.getX(), c.getY(), c.playerEquipmentN[e], c.playerId);
  224. }
  225. } else {
  226. Server.itemHandler.createGroundItem(c, c.playerEquipment[e], c.getX(), c.getY(), c.playerEquipmentN[e], c.playerId);
  227. }
  228. }
  229. if(o != null) {
  230. Server.itemHandler.createGroundItem(o, 526, c.getX(), c.getY(), 1, c.killerId);
  231. }
  232. }
  233.  
  234. public int getUntradePrice(int item) {
  235. switch (item) {
  236. case 2518:
  237. case 2524:
  238. case 2526:
  239. return 100000;
  240. case 2520:
  241. case 2522:
  242. return 150000;
  243. }
  244. return 0;
  245. }
  246.  
  247. public boolean specialCase(int itemId) {
  248. switch (itemId) {
  249. case 2518:
  250. case 2520:
  251. case 2522:
  252. case 2524:
  253. case 2526:
  254. return true;
  255. }
  256. return false;
  257. }
  258.  
  259. public void handleSpecialPickup(int itemId) {
  260. //c.sendMessage("My " + getItemName(itemId) + " has been recovered. I should talk to the void knights to get it back.");
  261. //c.getItems().addToVoidList(itemId);
  262. }
  263.  
  264. public void addToVoidList(int itemId) {
  265. switch (itemId) {
  266. case 2518:
  267. c.voidStatus[0]++;
  268. break;
  269. case 2520:
  270. c.voidStatus[1]++;
  271. break;
  272. case 2522:
  273. c.voidStatus[2]++;
  274. break;
  275. case 2524:
  276. c.voidStatus[3]++;
  277. break;
  278. case 2526:
  279. c.voidStatus[4]++;
  280. break;
  281. }
  282. }
  283.  
  284. public boolean tradeable(int itemId) {
  285. for (int j = 0; j < Config.ITEM_TRADEABLE.length; j++) {
  286. if (itemId == Config.ITEM_TRADEABLE[j])
  287. return false;
  288. }
  289. return true;
  290. }
  291.  
  292. /**
  293. *Add Item
  294. **/
  295. public boolean addItem(int item, int amount) {
  296. synchronized(c) {
  297. if (amount < 1) {
  298. amount = 1;
  299. }
  300. if(item <= 0) {
  301. return false;
  302. }
  303. if ((((freeSlots() >= 1) || playerHasItem(item, 1)) && Item.itemStackable[item]) || ((freeSlots() > 0) && !Item.itemStackable[item])) {
  304. for (int i = 0; i < c.playerItems.length; i++) {
  305. if ((c.playerItems[i] == (item + 1)) && Item.itemStackable[item]
  306. && (c.playerItems[i] > 0)) {
  307. c.playerItems[i] = (item + 1);
  308. if (((c.playerItemsN[i] + amount) < Config.MAXITEM_AMOUNT)
  309. && ((c.playerItemsN[i] + amount) > -1)) {
  310. c.playerItemsN[i] += amount;
  311. } else {
  312. c.playerItemsN[i] = Config.MAXITEM_AMOUNT;
  313. }
  314. if(c.getOutStream() != null && c != null ) {
  315. c.getOutStream().createFrameVarSizeWord(34);
  316. c.getOutStream().writeWord(3214);
  317. c.getOutStream().writeByte(i);
  318. c.getOutStream().writeWord(c.playerItems[i]);
  319. if (c.playerItemsN[i] > 254) {
  320. c.getOutStream().writeByte(255);
  321. c.getOutStream().writeDWord(c.playerItemsN[i]);
  322. } else {
  323. c.getOutStream().writeByte(c.playerItemsN[i]);
  324. }
  325. c.getOutStream().endFrameVarSizeWord();
  326. c.flushOutStream();
  327. }
  328. i = 30;
  329. return true;
  330. }
  331. }
  332. for (int i = 0; i < c.playerItems.length; i++) {
  333. if (c.playerItems[i] <= 0) {
  334. c.playerItems[i] = item + 1;
  335. if ((amount < Config.MAXITEM_AMOUNT) && (amount > -1)) {
  336. c.playerItemsN[i] = 1;
  337. if (amount > 1) {
  338. c.getItems().addItem(item, amount - 1);
  339. return true;
  340. }
  341. } else {
  342. c.playerItemsN[i] = Config.MAXITEM_AMOUNT;
  343. }
  344. /*if(c.getOutStream() != null && c != null ) {
  345. c.getOutStream().createFrameVarSizeWord(34);
  346. c.getOutStream().writeWord(3214);
  347. c.getOutStream().writeByte(i);
  348. c.getOutStream().writeWord(c.playerItems[i]);
  349. if (c.playerItemsN[i] > 254) {
  350. c.getOutStream().writeByte(255);
  351. c.getOutStream().writeDWord(c.playerItemsN[i]);
  352. } else {
  353. c.getOutStream().writeByte(c.playerItemsN[i]);
  354. }
  355. c.getOutStream().endFrameVarSizeWord();
  356. c.flushOutStream();
  357. }*/
  358. resetItems(3214);
  359. i = 30;
  360. return true;
  361. }
  362. }
  363. return false;
  364. } else {
  365. resetItems(3214);
  366. c.sendMessage("Not enough space in your inventory.");
  367. return false;
  368. }
  369. }
  370. }
  371.  
  372. public String itemType(int item) {
  373. for (int i=0; i < Item.capes.length;i++) {
  374. if(item == Item.capes[i])
  375. return "cape";
  376. }
  377. for (int i=0; i < Item.hats.length;i++) {
  378. if(item == Item.hats[i])
  379. return "hat";
  380. }
  381. for (int i=0; i< Item.boots.length;i++) {
  382. if(item == Item.boots[i])
  383. return "boots";
  384. }
  385. for (int i=0; i< Item.gloves.length;i++) {
  386. if(item == Item.gloves[i])
  387. return "gloves";
  388. }
  389. for (int i=0; i< Item.shields.length;i++) {
  390. if(item == Item.shields[i])
  391. return "shield";
  392. }
  393. for (int i=0; i< Item.amulets.length;i++) {
  394. if(item == Item.amulets[i])
  395. return "amulet";
  396. }
  397. for (int i=0; i< Item.arrows.length;i++) {
  398. if(item == Item.arrows[i])
  399. return "arrows";
  400. }
  401. for (int i=0; i< Item.rings.length;i++) {
  402. if(item == Item.rings[i])
  403. return "ring";
  404. }
  405. for (int i=0; i< Item.body.length;i++) {
  406. if(item == Item.body[i])
  407. return "body";
  408. }
  409. for (int i=0; i< Item.legs.length;i++) {
  410. if(item == Item.legs[i])
  411. return "legs";
  412. }
  413. return "weapon";
  414. }
  415.  
  416. /**
  417. *Bonuses
  418. **/
  419.  
  420. public final String[] BONUS_NAMES = {
  421. "Stab", "Slash", "Crush", "Magic", "Range", "Stab", "Slash",
  422. "Crush", "Magic", "Range", "Strength", "Prayer"
  423. };
  424. public void resetBonus() {
  425. for (int i = 0; i < c.playerBonus.length; i++) {
  426. c.playerBonus[i] = 0;
  427. }
  428. }
  429. public void getBonus() {
  430. for (int i = 0; i < c.playerEquipment.length; i++) {
  431. if (c.playerEquipment[i] > -1) {
  432. for (int j = 0; j < Config.ITEM_LIMIT; j++) {
  433. if (Server.itemHandler.ItemList[j] != null){
  434. if (Server.itemHandler.ItemList[j].itemId == c.playerEquipment[i]) {
  435. for (int k = 0; k < c.playerBonus.length; k++) {
  436. c.playerBonus[k] += Server.itemHandler.ItemList[j].Bonuses[k];
  437. }
  438. break;
  439. }
  440. }
  441. }
  442. }
  443. }
  444. }
  445.  
  446.  
  447. /**
  448. *Wear Item
  449. **/
  450.  
  451. public void sendWeapon(int Weapon, String WeaponName) {
  452. String WeaponName2 = WeaponName.replaceAll("Bronze", "");
  453. WeaponName2 = WeaponName2.replaceAll("Iron", "");
  454. WeaponName2 = WeaponName2.replaceAll("Steel", "");
  455. WeaponName2 = WeaponName2.replaceAll("Black", "");
  456. WeaponName2 = WeaponName2.replaceAll("Mithril", "");
  457. WeaponName2 = WeaponName2.replaceAll("Adamant", "");
  458. WeaponName2 = WeaponName2.replaceAll("Rune", "");
  459. WeaponName2 = WeaponName2.replaceAll("Granite", "");
  460. WeaponName2 = WeaponName2.replaceAll("Dragon", "");
  461. WeaponName2 = WeaponName2.replaceAll("Drag", "");
  462. WeaponName2 = WeaponName2.replaceAll("Crystal", "");
  463. WeaponName2 = WeaponName2.trim();
  464. if (WeaponName.equals("Unarmed")) {
  465. c.setSidebarInterface(0, 5855); //punch, kick, block
  466. c.getPA().sendFrame126(WeaponName, 5857);
  467. } else if (WeaponName.endsWith("whip")) {
  468. c.setSidebarInterface(0, 12290); //flick, lash, deflect
  469. c.getPA().sendFrame246(12291, 200, Weapon);
  470. c.getPA().sendFrame126(WeaponName, 12293);
  471. } else if (WeaponName.endsWith("bow") || WeaponName.endsWith("10")|| WeaponName.endsWith("full") || WeaponName.startsWith("seercull")) {
  472. c.setSidebarInterface(0, 1764); //accurate, rapid, longrange
  473. c.getPA().sendFrame246(1765, 200, Weapon);
  474. c.getPA().sendFrame126(WeaponName, 1767);
  475. } else if (WeaponName.startsWith("Staff") || WeaponName.endsWith("staff") || WeaponName.endsWith("wand")) {
  476. c.setSidebarInterface(0, 328); //spike, impale, smash, block
  477. c.getPA().sendFrame246(329, 200, Weapon);
  478. c.getPA().sendFrame126(WeaponName, 331);
  479. } else if (WeaponName2.startsWith("dart") || WeaponName2.startsWith("knife") || WeaponName2.startsWith("javelin") || WeaponName.equalsIgnoreCase("toktz-xil-ul")) {
  480. c.setSidebarInterface(0, 4446); //accurate, rapid, longrange
  481. c.getPA().sendFrame246(4447, 200, Weapon);
  482. c.getPA().sendFrame126(WeaponName, 4449);
  483. } else if (WeaponName2.startsWith("dagger") || WeaponName2.contains("sword")) {
  484. c.setSidebarInterface(0, 2276); //stab, lunge, slash, block
  485. c.getPA().sendFrame246(2277, 200, Weapon);
  486. c.getPA().sendFrame126(WeaponName, 2279);
  487. } else if (WeaponName2.startsWith("pickaxe")) {
  488. c.setSidebarInterface(0, 5570); //spike, impale, smash, block
  489. c.getPA().sendFrame246(5571, 200, Weapon);
  490. c.getPA().sendFrame126(WeaponName, 5573);
  491. } else if (WeaponName2.startsWith("axe") || WeaponName2.startsWith("battleaxe")) {
  492. c.setSidebarInterface(0, 1698); //chop, hack, smash, block
  493. c.getPA().sendFrame246(1699, 200, Weapon);
  494. c.getPA().sendFrame126(WeaponName, 1701);
  495. } else if (WeaponName2.startsWith("halberd")) {
  496. c.setSidebarInterface(0, 8460); //jab, swipe, fend
  497. c.getPA().sendFrame246(8461, 200, Weapon);
  498. c.getPA().sendFrame126(WeaponName, 8463);
  499. } else if (WeaponName2.startsWith("Scythe")) {
  500. c.setSidebarInterface(0, 8460); //jab, swipe, fend
  501. c.getPA().sendFrame246(8461, 200, Weapon);
  502. c.getPA().sendFrame126(WeaponName, 8463);
  503. } else if (WeaponName2.startsWith("spear")) {
  504. c.setSidebarInterface(0, 4679); //lunge, swipe, pound, block
  505. c.getPA().sendFrame246(4680, 200, Weapon);
  506. c.getPA().sendFrame126(WeaponName, 4682);
  507. } else if (WeaponName2.toLowerCase().contains("mace")){
  508. c.setSidebarInterface(0, 3796);
  509. c.getPA().sendFrame246(3797, 200, Weapon);
  510. c.getPA().sendFrame126(WeaponName, 3799);
  511. } else if (c.playerEquipment[c.playerWeapon] == 14484) {
  512. c.setSidebarInterface(0, 7762); //claws
  513. c.getPA().sendFrame246(7763, 200, Weapon);
  514. c.getPA().sendFrame126(WeaponName, 7765);
  515.  
  516. } else if (c.playerEquipment[c.playerWeapon] == 4153) {
  517. c.setSidebarInterface(0, 425); //war hamer equip.
  518. c.getPA().sendFrame246(426, 200, Weapon);
  519. c.getPA().sendFrame126(WeaponName, 428);
  520. } else {
  521. c.setSidebarInterface(0, 2423); //chop, slash, lunge, block
  522. c.getPA().sendFrame246(2424, 200, Weapon);
  523. c.getPA().sendFrame126(WeaponName, 2426);
  524. }
  525.  
  526. }
  527.  
  528.  
  529. /**
  530. *Weapon Requirements
  531. **/
  532.  
  533. public void getRequirements(String itemName, int itemId) {
  534. c.attackLevelReq = c.defenceLevelReq = c.strengthLevelReq = c.rangeLevelReq = c.magicLevelReq = 0;
  535. if(itemName.contains("mystic") || itemName.contains("nchanted")) {
  536. if(itemName.contains("staff")) {
  537. c.magicLevelReq = 20;
  538. c.attackLevelReq = 40;
  539. } else {
  540. c.magicLevelReq = 20;
  541. c.defenceLevelReq = 20;
  542. }
  543. }
  544. if (itemName.contains("infinity")) {
  545. c.magicLevelReq = 50;
  546. c.defenceLevelReq = 25;
  547. }
  548. if(itemName.contains("splitbark")) {
  549. c.magicLevelReq = 40;
  550. c.defenceLevelReq = 40;
  551. }
  552. if(itemName.contains("Green")) {
  553. if(itemName.contains("hide")) {
  554. c.rangeLevelReq = 40;
  555. if (itemName.contains("body"))
  556. c.defenceLevelReq = 40;
  557. return;
  558. }
  559. }
  560. if(itemName.contains("Blue")) {
  561. if(itemName.contains("hide")) {
  562. c.rangeLevelReq = 50;
  563. if (itemName.contains("body"))
  564. c.defenceLevelReq = 40;
  565. return;
  566. }
  567. }
  568. if(itemName.contains("Red")) {
  569. if(itemName.contains("hide")) {
  570. c.rangeLevelReq = 60;
  571. if (itemName.contains("body"))
  572. c.defenceLevelReq = 40;
  573. return;
  574. }
  575. }
  576. if(itemName.contains("Black")) {
  577. if(itemName.contains("hide")) {
  578. c.rangeLevelReq = 70;
  579. if (itemName.contains("body"))
  580. c.defenceLevelReq = 40;
  581. return;
  582. }
  583. }
  584. if(itemName.contains("bronze")) {
  585. if(!itemName.contains("knife") && !itemName.contains("dart") && !itemName.contains("javelin") && !itemName.contains("thrownaxe")) {
  586. c.attackLevelReq = c.defenceLevelReq = 1;
  587. }
  588. return;
  589. }
  590. if(itemName.contains("iron")) {
  591. if(!itemName.contains("knife") && !itemName.contains("dart") && !itemName.contains("javelin") && !itemName.contains("thrownaxe")) {
  592. c.attackLevelReq = c.defenceLevelReq = 1;
  593. }
  594. return;
  595. }
  596. if(itemName.contains("steel")) {
  597. if(!itemName.contains("knife") && !itemName.contains("dart") && !itemName.contains("javelin") && !itemName.contains("thrownaxe")) {
  598. c.attackLevelReq = c.defenceLevelReq = 5;
  599. }
  600. return;
  601. }
  602. if(itemName.contains("black")) {
  603. if(!itemName.contains("knife") && !itemName.contains("dart") && !itemName.contains("javelin") && !itemName.contains("thrownaxe") && !itemName.contains("vamb") && !itemName.contains("chap")) {
  604. c.attackLevelReq = c.defenceLevelReq = 10;
  605. }
  606. return;
  607. }
  608. if(itemName.contains("mithril")) {
  609. if(!itemName.contains("knife") && !itemName.contains("dart") && !itemName.contains("javelin") && !itemName.contains("thrownaxe")) {
  610. c.attackLevelReq = c.defenceLevelReq = 20;
  611. }
  612. return;
  613. }
  614. if(itemName.contains("adamant")) {
  615. if(!itemName.contains("knife") && !itemName.contains("dart") && !itemName.contains("javelin") && !itemName.contains("thrownaxe")) {
  616. c.attackLevelReq = c.defenceLevelReq = 30;
  617. }
  618. return;
  619. }
  620. if(itemName.contains("rune")) {
  621. if(!itemName.contains("knife") && !itemName.contains("dart") && !itemName.contains("javelin") && !itemName.contains("thrownaxe") && !itemName.contains("'bow")) {
  622. c.attackLevelReq = c.defenceLevelReq = 40;
  623. }
  624. return;
  625. }
  626. if(itemName.contains("dragon")) {
  627. if (!itemName.contains("nti-") && !itemName.contains("fire")) {
  628. c.attackLevelReq = c.defenceLevelReq = 60;
  629. return;
  630. }
  631. }
  632. if(itemName.contains("crystal")) {
  633. if(itemName.contains("shield")) {
  634. c.defenceLevelReq = 70;
  635. } else {
  636. c.rangeLevelReq = 70;
  637. }
  638. return;
  639. }
  640. if(itemName.contains("ahrim")) {
  641. if(itemName.contains("staff")) {
  642. c.magicLevelReq = 70;
  643. c.attackLevelReq = 70;
  644. } else {
  645. c.magicLevelReq = 70;
  646. c.defenceLevelReq = 70;
  647. }
  648. }
  649. if(itemName.contains("karil")) {
  650. if(itemName.contains("crossbow")) {
  651. c.rangeLevelReq = 70;
  652. } else {
  653. c.rangeLevelReq = 70;
  654. c.defenceLevelReq = 70;
  655. }
  656. }
  657. if(itemName.contains("godsword")) {
  658. c.attackLevelReq = 75;
  659. }
  660. if (itemName.contains("3rd age") && !itemName.contains("amulet")) {
  661. c.defenceLevelReq = 60;
  662. }
  663. if (itemName.contains("Initiate")) {
  664. c.defenceLevelReq = 20;
  665. }
  666. if(itemName.contains("verac") || itemName.contains("guthan") || itemName.contains("dharok") || itemName.contains("torag")) {
  667.  
  668. if(itemName.contains("hammers")) {
  669. c.attackLevelReq = 70;
  670. c.strengthLevelReq = 70;
  671. } else if(itemName.contains("axe")) {
  672. c.attackLevelReq = 70;
  673. c.strengthLevelReq = 70;
  674. } else if(itemName.contains("warspear")) {
  675. c.attackLevelReq = 70;
  676. c.strengthLevelReq = 70;
  677. } else if(itemName.contains("flail")) {
  678. c.attackLevelReq = 70;
  679. c.strengthLevelReq = 70;
  680. } else {
  681. c.defenceLevelReq = 70;
  682. }
  683. }
  684.  
  685. switch(itemId) {
  686. case 8839:
  687. case 8840:
  688. case 8842:
  689. case 11663:
  690. case 11664:
  691. case 11665:
  692. c.attackLevelReq = 42;
  693. c.rangeLevelReq = 42;
  694. c.strengthLevelReq = 42;
  695. c.magicLevelReq = 42;
  696. c.defenceLevelReq = 42;
  697. return;
  698. case 10551:
  699. case 2503:
  700. case 2501:
  701. case 2499:
  702. case 1135:
  703. c.defenceLevelReq = 40;
  704. return;
  705. case 11235:
  706. case 6522:
  707. c.rangeLevelReq = 60;
  708. break;
  709. case 6524:
  710. c.defenceLevelReq = 60;
  711. break;
  712. case 11284:
  713. c.defenceLevelReq = 75;
  714. return;
  715. case 6889:
  716. case 6914:
  717. c.magicLevelReq = 60;
  718. break;
  719. case 861:
  720. c.rangeLevelReq = 50;
  721. break;
  722. case 10828:
  723. c.defenceLevelReq = 55;
  724. break;
  725. case 11724:
  726. case 11726:
  727. case 11728:
  728. c.defenceLevelReq = 65;
  729. break;
  730. case 3751:
  731. case 3749:
  732. case 3755:
  733. c.defenceLevelReq = 40;
  734. break;
  735.  
  736. case 7462:
  737. case 7461:
  738. c.defenceLevelReq = 40;
  739. break;
  740. case 8846:
  741. c.defenceLevelReq = 5;
  742. break;
  743. case 8847:
  744. c.defenceLevelReq = 10;
  745. break;
  746. case 8848:
  747. c.defenceLevelReq = 20;
  748. break;
  749. case 8849:
  750. c.defenceLevelReq = 30;
  751. break;
  752. case 8850:
  753. c.defenceLevelReq = 40;
  754. break;
  755.  
  756. case 7460:
  757. c.defenceLevelReq = 40;
  758. break;
  759.  
  760.  
  761. case 837:
  762. c.rangeLevelReq = 61;
  763. break;
  764.  
  765. case 4151: // if you don't want to use names
  766. c.attackLevelReq = 70;
  767. return;
  768. case 14484: // dclaw
  769. c.attackLevelReq = 60;
  770. return;
  771.  
  772. case 6724: // seercull
  773. c.rangeLevelReq = 60; // idk if that is correct
  774. return;
  775. case 4153:
  776. c.attackLevelReq = 50;
  777. c.strengthLevelReq = 50;
  778. return;
  779. }
  780. }
  781.  
  782. /**
  783. *two handed weapon check
  784. **/
  785. public boolean is2handed(String itemName, int itemId) {
  786. if(itemName.contains("ahrim") || itemName.contains("karil") || itemName.contains("verac") || itemName.contains("guthan") || itemName.contains("dharok") || itemName.contains("torag")) {
  787. return true;
  788. }
  789. if(itemName.contains("longbow") || itemName.contains("shortbow") || itemName.contains("ark bow")) {
  790. return true;
  791. }
  792. if(itemName.contains("crystal")) {
  793. return true;
  794. }
  795. if (itemName.contains("godsword") || itemName.contains("claws") || itemName.contains("aradomin sword") || itemName.contains("2h") || itemName.contains("spear")){
  796. return true;
  797. }
  798. switch(itemId) {
  799. case 6724: // seercull
  800. case 11730:
  801. case 4153:
  802. case 6528:
  803. case 14484:
  804. return true;
  805. }
  806. return false;
  807. }
  808.  
  809. /**
  810. * Weapons special bar, adds the spec bars to weapons that require them
  811. * and removes the spec bars from weapons which don't require them
  812. **/
  813.  
  814. public void addSpecialBar(int weapon) {
  815. switch(weapon) {
  816.  
  817. case 4151: // whip
  818. c.getPA().sendFrame171(0, 12323);
  819. specialAmount(weapon, c.specAmount, 12335);
  820. break;
  821.  
  822. case 859: // magic bows
  823. case 861:
  824. case 11235:
  825. c.getPA().sendFrame171(0, 7549);
  826. specialAmount(weapon, c.specAmount, 7561);
  827. break;
  828.  
  829. case 4587: // dscimmy
  830. c.getPA().sendFrame171(0, 7599);
  831. specialAmount(weapon, c.specAmount, 7611);
  832. break;
  833.  
  834. case 14484: //dragon claws
  835. c.getPA().sendFrame171(0, 7800);
  836. specialAmount(weapon, c.specAmount, 7812);
  837. break;
  838.  
  839. case 3204: // d hally
  840. c.getPA().sendFrame171(0, 8493);
  841. specialAmount(weapon, c.specAmount, 8505);
  842. break;
  843.  
  844. case 1377: // d battleaxe
  845. c.getPA().sendFrame171(0, 7499);
  846. specialAmount(weapon, c.specAmount, 7511);
  847. break;
  848.  
  849. case 4153: // gmaul
  850. c.getPA().sendFrame171(0, 7474);
  851. specialAmount(weapon, c.specAmount, 7486);
  852. break;
  853.  
  854. case 1249: //dspear
  855. c.getPA().sendFrame171(0, 7674);
  856. specialAmount(weapon, c.specAmount, 7686);
  857. break;
  858.  
  859.  
  860. case 1215:// dragon dagger
  861. case 1231:
  862. case 5680:
  863. case 5698:
  864. case 1305: // dragon long
  865. case 11694:
  866. case 11698:
  867. case 11700:
  868. case 11730:
  869. case 11696:
  870. c.getPA().sendFrame171(0, 7574);
  871. specialAmount(weapon, c.specAmount, 7586);
  872. break;
  873.  
  874. case 1434: // dragon mace
  875. c.getPA().sendFrame171(0, 7624);
  876. specialAmount(weapon, c.specAmount, 7636);
  877. break;
  878.  
  879. default:
  880. c.getPA().sendFrame171(1, 7624); // mace interface
  881. c.getPA().sendFrame171(1, 7474); // hammer, gmaul
  882. c.getPA().sendFrame171(1, 7499); // axe
  883. c.getPA().sendFrame171(1, 7549); // bow interface
  884. c.getPA().sendFrame171(1, 7574); // sword interface
  885. c.getPA().sendFrame171(1, 7599); // scimmy sword interface, for most swords
  886. c.getPA().sendFrame171(1, 8493);
  887. c.getPA().sendFrame171(1, 12323); // whip interface
  888. break;
  889. }
  890. }
  891.  
  892. /**
  893. * Specials bar filling amount
  894. **/
  895.  
  896. public void specialAmount(int weapon, double specAmount, int barId) {
  897. c.specBarId = barId;
  898. c.getPA().sendFrame70(specAmount >= 10 ? 500 : 0, 0, (--barId));
  899. c.getPA().sendFrame70(specAmount >= 9 ? 500 : 0, 0, (--barId));
  900. c.getPA().sendFrame70(specAmount >= 8 ? 500 : 0, 0, (--barId));
  901. c.getPA().sendFrame70(specAmount >= 7 ? 500 : 0, 0, (--barId));
  902. c.getPA().sendFrame70(specAmount >= 6 ? 500 : 0, 0, (--barId));
  903. c.getPA().sendFrame70(specAmount >= 5 ? 500 : 0, 0, (--barId));
  904. c.getPA().sendFrame70(specAmount >= 4 ? 500 : 0, 0, (--barId));
  905. c.getPA().sendFrame70(specAmount >= 3 ? 500 : 0, 0, (--barId));
  906. c.getPA().sendFrame70(specAmount >= 2 ? 500 : 0, 0, (--barId));
  907. c.getPA().sendFrame70(specAmount >= 1 ? 500 : 0, 0, (--barId));
  908. updateSpecialBar();
  909. sendWeapon(weapon, getItemName(weapon));
  910. }
  911.  
  912. /**
  913. * Special attack text and what to highlight or blackout
  914. **/
  915.  
  916. public void updateSpecialBar() {
  917. if(c.usingSpecial) {
  918. c.getPA().sendFrame126(
  919. ""+(c.specAmount >= 2 ? "@yel@S P" : "@bla@S P")
  920. +""+(c.specAmount >= 3 ? "@yel@ E" : "@bla@ E")
  921. +""+(c.specAmount >= 4 ? "@yel@ C I" : "@bla@ C I")
  922. +""+(c.specAmount >= 5 ? "@yel@ A L" : "@bla@ A L")
  923. +""+(c.specAmount >= 6 ? "@yel@ A" : "@bla@ A")
  924. +""+(c.specAmount >= 7 ? "@yel@ T T" : "@bla@ T T")
  925. +""+(c.specAmount >= 8 ? "@yel@ A" : "@bla@ A")
  926. +""+(c.specAmount >= 9 ? "@yel@ C" : "@bla@ C")
  927. +""+(c.specAmount >= 10 ? "@yel@ K" : "@bla@ K") , c.specBarId);
  928. } else {
  929. c.getPA().sendFrame126("@bla@S P E C I A L A T T A C K", c.specBarId);
  930. }
  931. }
  932.  
  933.  
  934. /**
  935. *Wear Item
  936. **/
  937.  
  938. public boolean wearItem(int wearID, int slot, String itemName) {
  939. if (!c.getItems().playerHasItem(wearID, 1, slot)) {
  940. //add a method here for logging cheaters(If you want)
  941. return false;
  942. }
  943. synchronized(c) {
  944. int targetSlot=0;
  945. boolean canWearItem = true;
  946. if(c.playerItems[slot] == (wearID+1)) {
  947. getRequirements(getItemName(wearID).toLowerCase(), wearID);
  948. targetSlot = Item.targetSlots[wearID];
  949. if(itemName.contains("cape") || itemName.contains("Cape") || itemName.contains("cloak") || itemName.contains("Cloak")) {
  950. targetSlot=1;
  951. } else if(itemName.contains("sallet") || itemName.contains("Sallet") || itemName.contains("Hat") || itemName.contains("hat") || itemName.contains("helm") || itemName.contains("Helm") || itemName.contains("hood") || itemName.contains("Hood")) {
  952. targetSlot=0;
  953. } else if(itemName.contains("Amulet") || itemName.contains("amulet")) {
  954. targetSlot=2;
  955. } else if(itemType(wearID).equalsIgnoreCase("arrows") && !itemName.contains("morrigan")) {
  956. targetSlot=13;
  957. } else if(itemName.contains("Torso") || itemName.contains("platebody") || itemName.contains("chest") || itemName.contains("Platebody") || itemName.contains("chain") || itemName.contains("Chain") || itemName.contains("Top") || itemName.contains("Hauberk") || itemName.contains("hauberk") || itemName.contains("top") || itemName.contains("torso") || itemName.contains("shirt") || itemName.contains("Shirt") || itemName.contains("body") || itemName.contains("Body")) {
  958. targetSlot=4;
  959. } else if(itemName.contains("Shield") || itemName.contains("shield") || itemName.contains("defender") || itemName.contains("Defender")) {
  960. targetSlot=5;
  961. } else if(itemName.contains("Cuisse") || itemName.contains("cuisse") || itemName.contains("chaps") || itemName.contains("Chaps") || itemName.contains("legs") || itemName.contains("Legs") || itemName.contains("Bottom") || itemName.contains("bottom") || itemName.contains("skirt") || itemName.contains("Skirt") || itemName.contains("shorts") || itemName.contains("Shorts") || itemName.contains("blouse") || itemName.contains("Blouse") || itemName.contains("tasset") || itemName.contains("Tasset") || itemName.contains("leg") || itemName.contains("Leg")) {
  962. targetSlot=7;
  963. } else if(itemName.contains("Gloves") || itemName.contains("gloves") || itemName.contains("vamb") || itemName.contains("Vamb")) {
  964. targetSlot=9;
  965. } else if(itemName.contains("Boots") || itemName.contains("boots")) {
  966. targetSlot=10;
  967. } else if(itemName.contains("ring") || itemName.contains("Ring")) {
  968. targetSlot=12;
  969. } else {
  970. targetSlot = 3;
  971. }
  972.  
  973. if(c.duelRule[11] && targetSlot == 0) {
  974. c.sendMessage("Wearing hats has been disabled in this duel!");
  975. return false;
  976. }
  977. if(c.duelRule[12] && targetSlot == 1) {
  978. c.sendMessage("Wearing capes has been disabled in this duel!");
  979. return false;
  980. }
  981. if(c.duelRule[13] && targetSlot == 2) {
  982. c.sendMessage("Wearing amulets has been disabled in this duel!");
  983. return false;
  984. }
  985. if(c.duelRule[14] && targetSlot == 3) {
  986. c.sendMessage("Wielding weapons has been disabled in this duel!");
  987. return false;
  988. }
  989. if(c.duelRule[15] && targetSlot == 4) {
  990. c.sendMessage("Wearing bodies has been disabled in this duel!");
  991. return false;
  992. }
  993. if((c.duelRule[16] && targetSlot == 5) || (c.duelRule[16] && is2handed(getItemName(wearID).toLowerCase(), wearID))) {
  994. c.sendMessage("Wearing shield has been disabled in this duel!");
  995. return false;
  996. }
  997. if(c.duelRule[17] && targetSlot == 7) {
  998. c.sendMessage("Wearing legs has been disabled in this duel!");
  999. return false;
  1000. }
  1001. if(c.duelRule[18] && targetSlot == 9) {
  1002. c.sendMessage("Wearing gloves has been disabled in this duel!");
  1003. return false;
  1004. }
  1005. if(c.duelRule[19] && targetSlot == 10) {
  1006. c.sendMessage("Wearing boots has been disabled in this duel!");
  1007. return false;
  1008. }
  1009. if(c.duelRule[20] && targetSlot == 12) {
  1010. c.sendMessage("Wearing rings has been disabled in this duel!");
  1011. return false;
  1012. }
  1013. if(c.duelRule[21] && targetSlot == 13) {
  1014. c.sendMessage("Wearing arrows has been disabled in this duel!");
  1015. return false;
  1016. }
  1017.  
  1018. if(Config.itemRequirements) {
  1019. if(targetSlot == 10 || targetSlot == 7 || targetSlot == 5 || targetSlot == 4 || targetSlot == 0 || targetSlot == 9 || targetSlot == 10) {
  1020. if(c.defenceLevelReq > 0) {
  1021. if(c.getPA().getLevelForXP(c.playerXP[1]) < c.defenceLevelReq) {
  1022. c.sendMessage("You need a defence level of "+c.defenceLevelReq+" to wear this item.");
  1023. canWearItem = false;
  1024. }
  1025. }
  1026. if(c.rangeLevelReq > 0) {
  1027. if(c.getPA().getLevelForXP(c.playerXP[4]) < c.rangeLevelReq) {
  1028. c.sendMessage("You need a range level of "+c.rangeLevelReq+" to wear this item.");
  1029. canWearItem = false;
  1030. }
  1031. }
  1032. if(c.magicLevelReq > 0) {
  1033. if(c.getPA().getLevelForXP(c.playerXP[6]) < c.magicLevelReq) {
  1034. c.sendMessage("You need a magic level of "+c.magicLevelReq+" to wear this item.");
  1035. canWearItem = false;
  1036. }
  1037. }
  1038. }
  1039. if(targetSlot == 3) {
  1040. if(c.attackLevelReq > 0) {
  1041. if(c.getPA().getLevelForXP(c.playerXP[0]) < c.attackLevelReq) {
  1042. c.sendMessage("You need an attack level of "+c.attackLevelReq+" to wield this weapon.");
  1043. canWearItem = false;
  1044. }
  1045. }
  1046. if(c.rangeLevelReq > 0) {
  1047. if(c.getPA().getLevelForXP(c.playerXP[4]) < c.rangeLevelReq) {
  1048. c.sendMessage("You need a range level of "+c.rangeLevelReq+" to wield this weapon.");
  1049. canWearItem = false;
  1050. }
  1051. }
  1052. if(c.magicLevelReq > 0) {
  1053. if(c.getPA().getLevelForXP(c.playerXP[6]) < c.magicLevelReq) {
  1054. c.sendMessage("You need a magic level of "+c.magicLevelReq+" to wield this weapon.");
  1055. canWearItem = false;
  1056. }
  1057. }
  1058. }
  1059. }
  1060.  
  1061. if(!canWearItem) {
  1062. return false;
  1063. }
  1064.  
  1065. int wearAmount = c.playerItemsN[slot];
  1066. if (wearAmount < 1) {
  1067. return false;
  1068. }
  1069.  
  1070. if (targetSlot == c.playerWeapon) {
  1071. c.autocasting = false;
  1072. c.autocastId = 0;
  1073. c.getPA().sendFrame36(108, 0);
  1074. }
  1075.  
  1076. if(slot >= 0 && wearID >= 0) {
  1077. int toEquip = c.playerItems[slot];
  1078. int toEquipN = c.playerItemsN[slot];
  1079. int toRemove = c.playerEquipment[targetSlot];
  1080. int toRemoveN = c.playerEquipmentN[targetSlot];
  1081. if (toEquip == toRemove + 1 && Item.itemStackable[toRemove]) {
  1082. deleteItem(toRemove, getItemSlot(toRemove), toEquipN);
  1083. c.playerEquipmentN[targetSlot] += toEquipN;
  1084. } else if (targetSlot != 5 && targetSlot != 3) {
  1085. c.playerItems[slot] = toRemove + 1;
  1086. c.playerItemsN[slot] = toRemoveN;
  1087. c.playerEquipment[targetSlot] = toEquip - 1;
  1088. c.playerEquipmentN[targetSlot] = toEquipN;
  1089. } else if (targetSlot == 5) {
  1090. boolean wearing2h = is2handed(getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase(), c.playerEquipment[c.playerWeapon]);
  1091. boolean wearingShield = c.playerEquipment[c.playerShield] > 0;
  1092. if (wearing2h) {
  1093. toRemove = c.playerEquipment[c.playerWeapon];
  1094. toRemoveN = c.playerEquipmentN[c.playerWeapon];
  1095. c.playerEquipment[c.playerWeapon] = -1;
  1096. c.playerEquipmentN[c.playerWeapon] = 0;
  1097. updateSlot(c.playerWeapon);
  1098. }
  1099. c.playerItems[slot] = toRemove + 1;
  1100. c.playerItemsN[slot] = toRemoveN;
  1101. c.playerEquipment[targetSlot] = toEquip - 1;
  1102. c.playerEquipmentN[targetSlot] = toEquipN;
  1103. } else if (targetSlot == 3) {
  1104. boolean is2h = is2handed(getItemName(wearID).toLowerCase(), wearID);
  1105. boolean wearingShield = c.playerEquipment[c.playerShield] > 0;
  1106. boolean wearingWeapon = c.playerEquipment[c.playerWeapon] > 0;
  1107. if (is2h) {
  1108. if (wearingShield && wearingWeapon) {
  1109. if (freeSlots() > 0) {
  1110. c.playerItems[slot] = toRemove + 1;
  1111. c.playerItemsN[slot] = toRemoveN;
  1112. c.playerEquipment[targetSlot] = toEquip - 1;
  1113. c.playerEquipmentN[targetSlot] = toEquipN;
  1114. removeItem(c.playerEquipment[c.playerShield], c.playerShield);
  1115. } else {
  1116. c.sendMessage("You do not have enough inventory space to do this.");
  1117. return false;
  1118. }
  1119. } else if (wearingShield && !wearingWeapon) {
  1120. c.playerItems[slot] = c.playerEquipment[c.playerShield] + 1;
  1121. c.playerItemsN[slot] = c.playerEquipmentN[c.playerShield];
  1122. c.playerEquipment[targetSlot] = toEquip - 1;
  1123. c.playerEquipmentN[targetSlot] = toEquipN;
  1124. c.playerEquipment[c.playerShield] = -1;
  1125. c.playerEquipmentN[c.playerShield] = 0;
  1126. updateSlot(c.playerShield);
  1127. } else {
  1128. c.playerItems[slot] = toRemove + 1;
  1129. c.playerItemsN[slot] = toRemoveN;
  1130. c.playerEquipment[targetSlot] = toEquip - 1;
  1131. c.playerEquipmentN[targetSlot] = toEquipN;
  1132. }
  1133. } else {
  1134. c.playerItems[slot] = toRemove + 1;
  1135. c.playerItemsN[slot] = toRemoveN;
  1136. c.playerEquipment[targetSlot] = toEquip - 1;
  1137. c.playerEquipmentN[targetSlot] = toEquipN;
  1138. }
  1139. }
  1140. resetItems(3214);
  1141. }
  1142. if(targetSlot == 3) {
  1143. c.usingSpecial = false;
  1144. addSpecialBar(wearID);
  1145. }
  1146. if(c.getOutStream() != null && c != null ) {
  1147. c.getOutStream().createFrameVarSizeWord(34);
  1148. c.getOutStream().writeWord(1688);
  1149. c.getOutStream().writeByte(targetSlot);
  1150. c.getOutStream().writeWord(wearID+1);
  1151.  
  1152. if (c.playerEquipmentN[targetSlot] > 254) {
  1153. c.getOutStream().writeByte(255);
  1154. c.getOutStream().writeDWord(c.playerEquipmentN[targetSlot]);
  1155. } else {
  1156. c.getOutStream().writeByte(c.playerEquipmentN[targetSlot]);
  1157. }
  1158.  
  1159. c.getOutStream().endFrameVarSizeWord();
  1160. c.flushOutStream();
  1161. }
  1162. sendWeapon(c.playerEquipment[c.playerWeapon], getItemName(c.playerEquipment[c.playerWeapon]));
  1163. resetBonus();
  1164. getBonus();
  1165. writeBonus();
  1166. c.getCombat().getPlayerAnimIndex(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  1167. c.getPA().requestUpdates();
  1168. return true;
  1169. } else {
  1170. return false;
  1171. }
  1172. }
  1173. }
  1174.  
  1175.  
  1176. public void wearItem(int wearID, int wearAmount, int targetSlot) {
  1177. synchronized(c) {
  1178. if(c.getOutStream() != null && c != null ) {
  1179. c.getOutStream().createFrameVarSizeWord(34);
  1180. c.getOutStream().writeWord(1688);
  1181. c.getOutStream().writeByte(targetSlot);
  1182. c.getOutStream().writeWord(wearID+1);
  1183.  
  1184. if (wearAmount > 254) {
  1185. c.getOutStream().writeByte(255);
  1186. c.getOutStream().writeDWord(wearAmount);
  1187. } else {
  1188. c.getOutStream().writeByte(wearAmount);
  1189. }
  1190. c.getOutStream().endFrameVarSizeWord();
  1191. c.flushOutStream();
  1192. c.playerEquipment[targetSlot]=wearID;
  1193. c.playerEquipmentN[targetSlot]=wearAmount;
  1194. c.getItems().sendWeapon(c.playerEquipment[c.playerWeapon], c.getItems().getItemName(c.playerEquipment[c.playerWeapon]));
  1195. c.getItems().resetBonus();
  1196. c.getItems().getBonus();
  1197. c.getItems().writeBonus();
  1198. c.getCombat().getPlayerAnimIndex(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  1199. c.updateRequired = true;
  1200. c.setAppearanceUpdateRequired(true);
  1201. }
  1202. }
  1203. }
  1204.  
  1205. public void updateSlot(int slot) {
  1206. synchronized(c) {
  1207. if(c.getOutStream() != null && c != null ) {
  1208. c.getOutStream().createFrameVarSizeWord(34);
  1209. c.getOutStream().writeWord(1688);
  1210. c.getOutStream().writeByte(slot);
  1211. c.getOutStream().writeWord(c.playerEquipment[slot] + 1);
  1212. if (c.playerEquipmentN[slot] > 254) {
  1213. c.getOutStream().writeByte(255);
  1214. c.getOutStream().writeDWord(c.playerEquipmentN[slot]);
  1215. } else {
  1216. c.getOutStream().writeByte(c.playerEquipmentN[slot]);
  1217. }
  1218. c.getOutStream().endFrameVarSizeWord();
  1219. c.flushOutStream();
  1220. }
  1221. }
  1222.  
  1223. }
  1224.  
  1225. /**
  1226. *Remove Item
  1227. **/
  1228. public void removeItem(int wearID, int slot) {
  1229. synchronized(c) {
  1230. if(c.getOutStream() != null && c != null) {
  1231. if(c.playerEquipment[slot] > -1){
  1232. if(addItem(c.playerEquipment[slot], c.playerEquipmentN[slot])) {
  1233. c.playerEquipment[slot]=-1;
  1234. c.playerEquipmentN[slot]=0;
  1235. sendWeapon(c.playerEquipment[c.playerWeapon], getItemName(c.playerEquipment[c.playerWeapon]));
  1236. resetBonus();
  1237. getBonus();
  1238. writeBonus();
  1239. c.getCombat().getPlayerAnimIndex(c.getItems().getItemName(c.playerEquipment[c.playerWeapon]).toLowerCase());
  1240. c.getOutStream().createFrame(34);
  1241. c.getOutStream().writeWord(6);
  1242. c.getOutStream().writeWord(1688);
  1243. c.getOutStream().writeByte(slot);
  1244. c.getOutStream().writeWord(0);
  1245. c.getOutStream().writeByte(0);
  1246. c.flushOutStream();
  1247. c.updateRequired = true;
  1248. c.setAppearanceUpdateRequired(true);
  1249. }
  1250. }
  1251. }
  1252. }
  1253. }
  1254.  
  1255. /**
  1256. *BANK
  1257. */
  1258.  
  1259. public void rearrangeBank() {
  1260. int totalItems = 0;
  1261. int highestSlot = 0;
  1262. for (int i = 0; i < Config.BANK_SIZE; i++) {
  1263. if (c.bankItems[i] != 0) {
  1264. totalItems ++;
  1265. if (highestSlot <= i) {
  1266. highestSlot = i;
  1267. }
  1268. }
  1269. }
  1270.  
  1271. for (int i = 0; i <= highestSlot; i++) {
  1272. if (c.bankItems[i] == 0) {
  1273. boolean stop = false;
  1274.  
  1275. for (int k = i; k <= highestSlot; k++) {
  1276. if (c.bankItems[k] != 0 && !stop) {
  1277. int spots = k - i;
  1278. for (int j = k; j <= highestSlot; j++) {
  1279. c.bankItems[j-spots] = c.bankItems[j];
  1280. c.bankItemsN[j-spots] = c.bankItemsN[j];
  1281. stop = true;
  1282. c.bankItems[j] = 0; c.bankItemsN[j] = 0;
  1283. }
  1284. }
  1285. }
  1286. }
  1287. }
  1288.  
  1289. int totalItemsAfter = 0;
  1290. for (int i = 0; i < Config.BANK_SIZE; i++) {
  1291. if (c.bankItems[i] != 0) {
  1292. totalItemsAfter ++;
  1293. }
  1294. }
  1295.  
  1296. if (totalItems != totalItemsAfter)
  1297. c.disconnected = true;
  1298. }
  1299.  
  1300.  
  1301. public void itemOnInterface(int id, int amount) {
  1302. synchronized(c) {
  1303. c.getOutStream().createFrameVarSizeWord(53);
  1304. c.getOutStream().writeWord(2274);
  1305. c.getOutStream().writeWord(1);
  1306. if (amount > 254){
  1307. c.getOutStream().writeByte(255);
  1308. c.getOutStream().writeDWord_v2(amount);
  1309. } else {
  1310. c.getOutStream().writeByte(amount);
  1311. }
  1312. c.getOutStream().writeWordBigEndianA(id);
  1313. c.getOutStream().endFrameVarSizeWord();
  1314. c.flushOutStream();
  1315. }
  1316. }
  1317.  
  1318. public void resetBank(){
  1319. synchronized(c) {
  1320. c.getOutStream().createFrameVarSizeWord(53);
  1321. c.getOutStream().writeWord(5382); // bank
  1322. c.getOutStream().writeWord(Config.BANK_SIZE);
  1323. for (int i=0; i<Config.BANK_SIZE; i++){
  1324. if (c.bankItemsN[i] > 254){
  1325. c.getOutStream().writeByte(255);
  1326. c.getOutStream().writeDWord_v2(c.bankItemsN[i]);
  1327. } else {
  1328. c.getOutStream().writeByte(c.bankItemsN[i]);
  1329. }
  1330. if (c.bankItemsN[i] < 1) {
  1331. c.bankItems[i] = 0;
  1332. }
  1333. if (c.bankItems[i] > Config.ITEM_LIMIT || c.bankItems[i] < 0) {
  1334. c.bankItems[i] = Config.ITEM_LIMIT;
  1335. }
  1336. c.getOutStream().writeWordBigEndianA(c.bankItems[i]);
  1337. }
  1338. c.getOutStream().endFrameVarSizeWord();
  1339. c.flushOutStream();
  1340. }
  1341. }
  1342.  
  1343.  
  1344. public void resetTempItems(){
  1345. synchronized(c) {
  1346. int itemCount = 0;
  1347. for (int i = 0; i < c.playerItems.length; i++) {
  1348. if (c.playerItems[i] > -1) {
  1349. itemCount=i;
  1350. }
  1351. }
  1352. c.getOutStream().createFrameVarSizeWord(53);
  1353. c.getOutStream().writeWord(5064);
  1354. c.getOutStream().writeWord(itemCount+1);
  1355. for (int i = 0; i < itemCount+1; i++) {
  1356. if (c.playerItemsN[i] > 254) {
  1357. c.getOutStream().writeByte(255);
  1358. c.getOutStream().writeDWord_v2(c.playerItemsN[i]);
  1359. } else {
  1360. c.getOutStream().writeByte(c.playerItemsN[i]);
  1361. }
  1362. if (c.playerItems[i] > Config.ITEM_LIMIT || c.playerItems[i] < 0) {
  1363. c.playerItems[i] = Config.ITEM_LIMIT;
  1364. }
  1365. c.getOutStream().writeWordBigEndianA(c.playerItems[i]);
  1366. }
  1367. c.getOutStream().endFrameVarSizeWord();
  1368. c.flushOutStream();
  1369. }
  1370. }
  1371.  
  1372.  
  1373. public boolean bankItem(int itemID, int fromSlot, int amount){
  1374. if(c.inTrade) {
  1375. c.sendMessage("You can't store items while trading!");
  1376. return false;
  1377. }
  1378. if (c.playerItemsN[fromSlot] <= 0){
  1379. return false;
  1380. }
  1381. if (!Item.itemIsNote[c.playerItems[fromSlot]-1]) {
  1382. if (c.playerItems[fromSlot] <= 0) {
  1383. return false;
  1384. }
  1385. if (Item.itemStackable[c.playerItems[fromSlot]-1] || c.playerItemsN[fromSlot] > 1) {
  1386. int toBankSlot = 0;
  1387. boolean alreadyInBank=false;
  1388. for (int i=0; i< Config.BANK_SIZE; i++) {
  1389. if (c.bankItems[i] == c.playerItems[fromSlot]) {
  1390. if (c.playerItemsN[fromSlot]<amount)
  1391. amount = c.playerItemsN[fromSlot];
  1392. alreadyInBank = true;
  1393. toBankSlot = i;
  1394. i=Config.BANK_SIZE+1;
  1395. }
  1396. }
  1397.  
  1398. if (!alreadyInBank && freeBankSlots() > 0) {
  1399. for (int i=0; i<Config.BANK_SIZE; i++) {
  1400. if (c.bankItems[i] <= 0) {
  1401. toBankSlot = i;
  1402. i=Config.BANK_SIZE+1;
  1403. }
  1404. }
  1405. c.bankItems[toBankSlot] = c.playerItems[fromSlot];
  1406. if (c.playerItemsN[fromSlot]<amount){
  1407. amount = c.playerItemsN[fromSlot];
  1408. }
  1409. if ((c.bankItemsN[toBankSlot] + amount) <= Config.MAXITEM_AMOUNT && (c.bankItemsN[toBankSlot] + amount) > -1) {
  1410. c.bankItemsN[toBankSlot] += amount;
  1411. } else {
  1412. c.sendMessage("Bank full!");
  1413. return false;
  1414. }
  1415. deleteItem((c.playerItems[fromSlot]-1), fromSlot, amount);
  1416. resetTempItems();
  1417. resetBank();
  1418. return true;
  1419. }
  1420. else if (alreadyInBank) {
  1421. if ((c.bankItemsN[toBankSlot] + amount) <= Config.MAXITEM_AMOUNT && (c.bankItemsN[toBankSlot] + amount) > -1) {
  1422. c.bankItemsN[toBankSlot] += amount;
  1423. } else {
  1424. c.sendMessage("Bank full!");
  1425. return false;
  1426. }
  1427. deleteItem((c.playerItems[fromSlot]-1), fromSlot, amount);
  1428. resetTempItems();
  1429. resetBank();
  1430. return true;
  1431. } else {
  1432. c.sendMessage("Bank full!");
  1433. return false;
  1434. }
  1435. } else {
  1436. itemID = c.playerItems[fromSlot];
  1437. int toBankSlot = 0;
  1438. boolean alreadyInBank=false;
  1439. for (int i=0; i<Config.BANK_SIZE; i++) {
  1440. if (c.bankItems[i] == c.playerItems[fromSlot]) {
  1441. alreadyInBank = true;
  1442. toBankSlot = i;
  1443. i=Config.BANK_SIZE+1;
  1444. }
  1445. }
  1446. if (!alreadyInBank && freeBankSlots() > 0) {
  1447. for (int i=0; i<Config.BANK_SIZE; i++) {
  1448. if (c.bankItems[i] <= 0) {
  1449. toBankSlot = i;
  1450. i=Config.BANK_SIZE+1;
  1451. }
  1452. }
  1453. int firstPossibleSlot=0;
  1454. boolean itemExists = false;
  1455. while (amount > 0) {
  1456. itemExists = false;
  1457. for (int i=firstPossibleSlot; i<c.playerItems.length; i++) {
  1458. if ((c.playerItems[i]) == itemID) {
  1459. firstPossibleSlot = i;
  1460. itemExists = true;
  1461. i=30;
  1462. }
  1463. }
  1464. if (itemExists) {
  1465. c.bankItems[toBankSlot] = c.playerItems[firstPossibleSlot];
  1466. c.bankItemsN[toBankSlot] += 1;
  1467. deleteItem((c.playerItems[firstPossibleSlot]-1), firstPossibleSlot, 1);
  1468. amount--;
  1469. } else {
  1470. amount=0;
  1471. }
  1472. }
  1473. resetTempItems();
  1474. resetBank();
  1475. return true;
  1476. } else if (alreadyInBank) {
  1477. int firstPossibleSlot=0;
  1478. boolean itemExists = false;
  1479. while (amount > 0) {
  1480. itemExists = false;
  1481. for (int i=firstPossibleSlot; i<c.playerItems.length; i++) {
  1482. if ((c.playerItems[i]) == itemID) {
  1483. firstPossibleSlot = i;
  1484. itemExists = true;
  1485. i=30;
  1486. }
  1487. }
  1488. if (itemExists) {
  1489. c.bankItemsN[toBankSlot] += 1;
  1490. deleteItem((c.playerItems[firstPossibleSlot]-1), firstPossibleSlot, 1);
  1491. amount--;
  1492. } else {
  1493. amount=0;
  1494. }
  1495. }
  1496. resetTempItems();
  1497. resetBank();
  1498. return true;
  1499. } else {
  1500. c.sendMessage("Bank full!");
  1501. return false;
  1502. }
  1503. }
  1504. }
  1505. else if (Item.itemIsNote[c.playerItems[fromSlot]-1] && !Item.itemIsNote[c.playerItems[fromSlot]-2]) {
  1506. if (c.playerItems[fromSlot] <= 0) {
  1507. return false;
  1508. }
  1509. if (Item.itemStackable[c.playerItems[fromSlot]-1] || c.playerItemsN[fromSlot] > 1) {
  1510. int toBankSlot = 0;
  1511. boolean alreadyInBank=false;
  1512. for (int i=0; i<Config.BANK_SIZE; i++) {
  1513. if (c.bankItems[i] == (c.playerItems[fromSlot]-1)) {
  1514. if (c.playerItemsN[fromSlot]<amount)
  1515. amount = c.playerItemsN[fromSlot];
  1516. alreadyInBank = true;
  1517. toBankSlot = i;
  1518. i=Config.BANK_SIZE+1;
  1519. }
  1520. }
  1521.  
  1522. if (!alreadyInBank && freeBankSlots() > 0) {
  1523. for (int i=0; i<Config.BANK_SIZE; i++) {
  1524. if (c.bankItems[i] <= 0) {
  1525. toBankSlot = i;
  1526. i=Config.BANK_SIZE+1;
  1527. }
  1528. }
  1529. c.bankItems[toBankSlot] = (c.playerItems[fromSlot]-1);
  1530. if (c.playerItemsN[fromSlot]<amount){
  1531. amount = c.playerItemsN[fromSlot];
  1532. }
  1533. if ((c.bankItemsN[toBankSlot] + amount) <= Config.MAXITEM_AMOUNT && (c.bankItemsN[toBankSlot] + amount) > -1) {
  1534. c.bankItemsN[toBankSlot] += amount;
  1535. } else {
  1536. return false;
  1537. }
  1538. deleteItem((c.playerItems[fromSlot]-1), fromSlot, amount);
  1539. resetTempItems();
  1540. resetBank();
  1541. return true;
  1542. }
  1543. else if (alreadyInBank) {
  1544. if ((c.bankItemsN[toBankSlot] + amount) <= Config.MAXITEM_AMOUNT && (c.bankItemsN[toBankSlot] + amount) > -1) {
  1545. c.bankItemsN[toBankSlot] += amount;
  1546. } else {
  1547. return false;
  1548. }
  1549. deleteItem((c.playerItems[fromSlot]-1), fromSlot, amount);
  1550. resetTempItems();
  1551. resetBank();
  1552. return true;
  1553. } else {
  1554. c.sendMessage("Bank full!");
  1555. return false;
  1556. }
  1557. } else {
  1558. itemID = c.playerItems[fromSlot];
  1559. int toBankSlot = 0;
  1560. boolean alreadyInBank=false;
  1561. for (int i=0; i<Config.BANK_SIZE; i++) {
  1562. if (c.bankItems[i] == (c.playerItems[fromSlot]-1)) {
  1563. alreadyInBank = true;
  1564. toBankSlot = i;
  1565. i=Config.BANK_SIZE+1;
  1566. }
  1567. }
  1568. if (!alreadyInBank && freeBankSlots() > 0) {
  1569. for (int i=0; i<Config.BANK_SIZE; i++) {
  1570. if (c.bankItems[i] <= 0){
  1571. toBankSlot = i;
  1572. i=Config.BANK_SIZE+1;
  1573. }
  1574. }
  1575. int firstPossibleSlot=0;
  1576. boolean itemExists = false;
  1577. while (amount > 0) {
  1578. itemExists = false;
  1579. for (int i=firstPossibleSlot; i<c.playerItems.length; i++) {
  1580. if ((c.playerItems[i]) == itemID) {
  1581. firstPossibleSlot = i;
  1582. itemExists = true;
  1583. i=30;
  1584. }
  1585. }
  1586. if (itemExists) {
  1587. c.bankItems[toBankSlot] = (c.playerItems[firstPossibleSlot]-1);
  1588. c.bankItemsN[toBankSlot] += 1;
  1589. deleteItem((c.playerItems[firstPossibleSlot]-1), firstPossibleSlot, 1);
  1590. amount--;
  1591. } else {
  1592. amount=0;
  1593. }
  1594. }
  1595. resetTempItems();
  1596. resetBank();
  1597. return true;
  1598. }
  1599. else if (alreadyInBank) {
  1600. int firstPossibleSlot=0;
  1601. boolean itemExists = false;
  1602. while (amount > 0) {
  1603. itemExists = false;
  1604. for (int i=firstPossibleSlot; i<c.playerItems.length; i++) {
  1605. if ((c.playerItems[i]) == itemID) {
  1606. firstPossibleSlot = i;
  1607. itemExists = true;
  1608. i=30;
  1609. }
  1610. }
  1611. if (itemExists) {
  1612. c.bankItemsN[toBankSlot] += 1;
  1613. deleteItem((c.playerItems[firstPossibleSlot]-1), firstPossibleSlot, 1);
  1614. amount--;
  1615. } else {
  1616. amount=0;
  1617. }
  1618. }
  1619. resetTempItems();
  1620. resetBank();
  1621. return true;
  1622. } else {
  1623. c.sendMessage("Bank full!");
  1624. return false;
  1625. }
  1626. }
  1627. } else {
  1628. c.sendMessage("Item not supported "+(c.playerItems[fromSlot]-1));
  1629. return false;
  1630. }
  1631. }
  1632.  
  1633.  
  1634. public int freeBankSlots(){
  1635. int freeS=0;
  1636. for (int i=0; i < Config.BANK_SIZE; i++) {
  1637. if (c.bankItems[i] <= 0) {
  1638. freeS++;
  1639. }
  1640. }
  1641. return freeS;
  1642. }
  1643.  
  1644.  
  1645. public void fromBank(int itemID, int fromSlot, int amount) {
  1646. if (amount > 0) {
  1647. if (c.bankItems[fromSlot] > 0) {
  1648. if (!c.takeAsNote) {
  1649. if (Item.itemStackable[c.bankItems[fromSlot]-1]) {
  1650. if (c.bankItemsN[fromSlot] > amount) {
  1651. if (addItem((c.bankItems[fromSlot]-1), amount)) {
  1652. c.bankItemsN[fromSlot] -= amount;
  1653. resetBank();
  1654. c.getItems().resetItems(5064);
  1655. }
  1656. } else {
  1657. if (addItem((c.bankItems[fromSlot]-1), c.bankItemsN[fromSlot])) {
  1658. c.bankItems[fromSlot] = 0;
  1659. c.bankItemsN[fromSlot] = 0;
  1660. resetBank();
  1661. c.getItems().resetItems(5064);
  1662. }
  1663. }
  1664. } else {
  1665. while (amount > 0) {
  1666. if (c.bankItemsN[fromSlot] > 0) {
  1667. if (addItem((c.bankItems[fromSlot]-1), 1)) {
  1668. c.bankItemsN[fromSlot] += -1;
  1669. amount--;
  1670. } else {
  1671. amount = 0;
  1672. }
  1673. } else {
  1674. amount = 0;
  1675. }
  1676. }
  1677. resetBank();
  1678. c.getItems().resetItems(5064);
  1679. }
  1680. } else if (c.takeAsNote && Item.itemIsNote[c.bankItems[fromSlot]]) {
  1681. if (c.bankItemsN[fromSlot] > amount) {
  1682. if (addItem(c.bankItems[fromSlot], amount)) {
  1683. c.bankItemsN[fromSlot] -= amount;
  1684. resetBank();
  1685. c.getItems().resetItems(5064);
  1686. }
  1687. } else {
  1688. if (addItem(c.bankItems[fromSlot], c.bankItemsN[fromSlot])) {
  1689. c.bankItems[fromSlot] = 0;
  1690. c.bankItemsN[fromSlot] = 0;
  1691. resetBank();
  1692. c.getItems().resetItems(5064);
  1693. }
  1694. }
  1695. } else {
  1696. c.sendMessage("This item can't be withdrawn as a note.");
  1697. if (Item.itemStackable[c.bankItems[fromSlot]-1]) {
  1698. if (c.bankItemsN[fromSlot] > amount) {
  1699. if (addItem((c.bankItems[fromSlot]-1), amount)) {
  1700. c.bankItemsN[fromSlot] -= amount;
  1701. resetBank();
  1702. c.getItems().resetItems(5064);
  1703. }
  1704. } else {
  1705. if (addItem((c.bankItems[fromSlot]-1), c.bankItemsN[fromSlot])) {
  1706. c.bankItems[fromSlot] = 0;
  1707. c.bankItemsN[fromSlot] = 0;
  1708. resetBank();
  1709. c.getItems().resetItems(5064);
  1710. }
  1711. }
  1712. } else {
  1713. while (amount > 0) {
  1714. if (c.bankItemsN[fromSlot] > 0) {
  1715. if (addItem((c.bankItems[fromSlot]-1), 1)) {
  1716. c.bankItemsN[fromSlot] += -1;
  1717. amount--;
  1718. } else {
  1719. amount = 0;
  1720. }
  1721. } else {
  1722. amount = 0;
  1723. }
  1724. }
  1725. resetBank();
  1726. c.getItems().resetItems(5064);
  1727. }
  1728. }
  1729. }
  1730. }
  1731. }
  1732.  
  1733. public int itemAmount(int itemID){
  1734. int tempAmount=0;
  1735. for (int i=0; i < c.playerItems.length; i++) {
  1736. if (c.playerItems[i] == itemID) {
  1737. tempAmount+=c.playerItemsN[i];
  1738. }
  1739. }
  1740. return tempAmount;
  1741. }
  1742.  
  1743. public boolean isStackable(int itemID) {
  1744. return Item.itemStackable[itemID];
  1745. }
  1746.  
  1747.  
  1748. /**
  1749. *Update Equip tab
  1750. **/
  1751.  
  1752.  
  1753. public void setEquipment(int wearID, int amount, int targetSlot) {
  1754. synchronized(c) {
  1755. c.getOutStream().createFrameVarSizeWord(34);
  1756. c.getOutStream().writeWord(1688);
  1757. c.getOutStream().writeByte(targetSlot);
  1758. c.getOutStream().writeWord(wearID+1);
  1759. if (amount > 254) {
  1760. c.getOutStream().writeByte(255);
  1761. c.getOutStream().writeDWord(amount);
  1762. } else {
  1763. c.getOutStream().writeByte(amount);
  1764. }
  1765. c.getOutStream().endFrameVarSizeWord();
  1766. c.flushOutStream();
  1767. c.playerEquipment[targetSlot]=wearID;
  1768. c.playerEquipmentN[targetSlot]=amount;
  1769. c.updateRequired = true;
  1770. c.setAppearanceUpdateRequired(true);
  1771. }
  1772. }
  1773.  
  1774.  
  1775. /**
  1776. *Move Items
  1777. **/
  1778.  
  1779. public void moveItems(int from, int to, int moveWindow) {
  1780. if (moveWindow == 3724) {
  1781. int tempI;
  1782. int tempN;
  1783. tempI = c.playerItems[from];
  1784. tempN = c.playerItemsN[from];
  1785.  
  1786. c.playerItems[from] = c.playerItems[to];
  1787. c.playerItemsN[from] = c.playerItemsN[to];
  1788. c.playerItems[to] = tempI;
  1789. c.playerItemsN[to] = tempN;
  1790. }
  1791.  
  1792. if (moveWindow == 34453 && from >= 0 && to >= 0 && from < Config.BANK_SIZE && to < Config.BANK_SIZE && to < Config.BANK_SIZE) {
  1793. int tempI;
  1794. int tempN;
  1795. tempI = c.bankItems[from];
  1796. tempN = c.bankItemsN[from];
  1797.  
  1798. c.bankItems[from] = c.bankItems[to];
  1799. c.bankItemsN[from] = c.bankItemsN[to];
  1800. c.bankItems[to] = tempI;
  1801. c.bankItemsN[to] = tempN;
  1802. }
  1803.  
  1804. if (moveWindow == 34453) {
  1805. resetBank();
  1806. }
  1807. if (moveWindow == 18579) {
  1808. int tempI;
  1809. int tempN;
  1810. tempI = c.playerItems[from];
  1811. tempN = c.playerItemsN[from];
  1812.  
  1813. c.playerItems[from] = c.playerItems[to];
  1814. c.playerItemsN[from] = c.playerItemsN[to];
  1815. c.playerItems[to] = tempI;
  1816. c.playerItemsN[to] = tempN;
  1817. resetItems(3214);
  1818. }
  1819. resetTempItems();
  1820. if (moveWindow == 3724) {
  1821. resetItems(3214);
  1822. }
  1823.  
  1824. }
  1825.  
  1826. /**
  1827. *delete Item
  1828. **/
  1829.  
  1830. public void deleteEquipment(int i, int j) {
  1831. synchronized(c) {
  1832. if(Server.playerHandler.players[c.playerId] == null) {
  1833. return;
  1834. }
  1835. if(i < 0) {
  1836. return;
  1837. }
  1838.  
  1839. c.playerEquipment[j] = -1;
  1840. c.playerEquipmentN[j] = c.playerEquipmentN[j] - 1;
  1841. c.getOutStream().createFrame(34);
  1842. c.getOutStream().writeWord(6);
  1843. c.getOutStream().writeWord(1688);
  1844. c.getOutStream().writeByte(j);
  1845. c.getOutStream().writeWord(0);
  1846. c.getOutStream().writeByte(0);
  1847. getBonus();
  1848. if(j == c.playerWeapon) {
  1849. sendWeapon(-1, "Unarmed");
  1850. }
  1851. resetBonus();
  1852. getBonus();
  1853. writeBonus();
  1854. c.updateRequired = true;
  1855. c.setAppearanceUpdateRequired(true);
  1856. }
  1857. }
  1858.  
  1859. public void deleteItem(int id, int amount) {
  1860. if(id <= 0)
  1861. return;
  1862. for (int j = 0; j < c.playerItems.length; j++) {
  1863. if (amount <= 0)
  1864. break;
  1865. if (c.playerItems[j] == id+1) {
  1866. c.playerItems[j] = 0;
  1867. c.playerItemsN[j] = 0;
  1868. amount--;
  1869. }
  1870. }
  1871. resetItems(3214);
  1872. }
  1873.  
  1874. public void deleteItem(int id, int slot, int amount) {
  1875. if(id <= 0 || slot < 0) {
  1876. return;
  1877. }
  1878. if (c.playerItems[slot] == (id+1)) {
  1879. if (c.playerItemsN[slot] > amount) {
  1880. c.playerItemsN[slot] -= amount;
  1881. } else {
  1882. c.playerItemsN[slot] = 0;
  1883. c.playerItems[slot] = 0;
  1884. }
  1885. resetItems(3214);
  1886. }
  1887. }
  1888. public void deleteItem2(int id, int amount) {
  1889. int am = amount;
  1890. for (int i = 0; i < c.playerItems.length; i++) {
  1891. if (am == 0) {
  1892. break;
  1893. }
  1894. if (c.playerItems[i] == (id+1)) {
  1895. if (c.playerItemsN[i] > amount) {
  1896. c.playerItemsN[i] -= amount;
  1897. break;
  1898. }
  1899. else {
  1900. c.playerItems[i] = 0;
  1901. c.playerItemsN[i] = 0;
  1902. am--;
  1903. }
  1904. }
  1905. }
  1906. resetItems(3214);
  1907. }
  1908.  
  1909. /**
  1910. * Delete Arrows
  1911. **/
  1912. public void deleteArrow() {
  1913. synchronized(c) {
  1914. if (c.playerEquipment[c.playerCape] == 10499 && Misc.random(5) != 1 && c.playerEquipment[c.playerArrows] != 4740)
  1915. return;
  1916. if(c.playerEquipmentN[c.playerArrows] == 1) {
  1917. c.getItems().deleteEquipment(c.playerEquipment[c.playerArrows], c.playerArrows);
  1918. }
  1919. if(c.playerEquipmentN[c.playerArrows] != 0) {
  1920. c.getOutStream().createFrameVarSizeWord(34);
  1921. c.getOutStream().writeWord(1688);
  1922. c.getOutStream().writeByte(c.playerArrows);
  1923. c.getOutStream().writeWord(c.playerEquipment[c.playerArrows]+1);
  1924. if (c.playerEquipmentN[c.playerArrows] -1 > 254) {
  1925. c.getOutStream().writeByte(255);
  1926. c.getOutStream().writeDWord(c.playerEquipmentN[c.playerArrows] -1);
  1927. } else {
  1928. c.getOutStream().writeByte(c.playerEquipmentN[c.playerArrows] -1);
  1929. }
  1930. c.getOutStream().endFrameVarSizeWord();
  1931. c.flushOutStream();
  1932. c.playerEquipmentN[c.playerArrows] -= 1;
  1933. }
  1934. c.updateRequired = true;
  1935. c.setAppearanceUpdateRequired(true);
  1936. }
  1937. }
  1938.  
  1939. public void deleteEquipment() {
  1940. synchronized(c) {
  1941. if(c.playerEquipmentN[c.playerWeapon] == 1) {
  1942. c.getItems().deleteEquipment(c.playerEquipment[c.playerWeapon], c.playerWeapon);
  1943. }
  1944. if(c.playerEquipmentN[c.playerWeapon] != 0) {
  1945. c.getOutStream().createFrameVarSizeWord(34);
  1946. c.getOutStream().writeWord(1688);
  1947. c.getOutStream().writeByte(c.playerWeapon);
  1948. c.getOutStream().writeWord(c.playerEquipment[c.playerWeapon]+1);
  1949. if (c.playerEquipmentN[c.playerWeapon] -1 > 254) {
  1950. c.getOutStream().writeByte(255);
  1951. c.getOutStream().writeDWord(c.playerEquipmentN[c.playerWeapon] -1);
  1952. } else {
  1953. c.getOutStream().writeByte(c.playerEquipmentN[c.playerWeapon] -1);
  1954. }
  1955. c.getOutStream().endFrameVarSizeWord();
  1956. c.flushOutStream();
  1957. c.playerEquipmentN[c.playerWeapon] -= 1;
  1958. }
  1959. c.updateRequired = true;
  1960. c.setAppearanceUpdateRequired(true);
  1961. }
  1962. }
  1963.  
  1964. /**
  1965. * Dropping Arrows
  1966. **/
  1967.  
  1968.  
  1969. public void dropArrowNpc() {
  1970. if (c.playerEquipment[c.playerCape] == 10499)
  1971. return;
  1972. int enemyX = Server.npcHandler.npcs[c.oldNpcIndex].getX();
  1973. int enemyY = Server.npcHandler.npcs[c.oldNpcIndex].getY();
  1974. if(Misc.random(10) >= 4) {
  1975. if (Server.itemHandler.itemAmount(c.rangeItemUsed, enemyX, enemyY) == 0) {
  1976. Server.itemHandler.createGroundItem(c, c.rangeItemUsed, enemyX, enemyY, 1, c.getId());
  1977. } else if (Server.itemHandler.itemAmount(c.rangeItemUsed, enemyX, enemyY) != 0) {
  1978. int amount = Server.itemHandler.itemAmount(c.rangeItemUsed, enemyX, enemyY);
  1979. Server.itemHandler.removeGroundItem(c, c.rangeItemUsed, enemyX, enemyY, false);
  1980. Server.itemHandler.createGroundItem(c, c.rangeItemUsed, enemyX, enemyY, amount+1, c.getId());
  1981. }
  1982. }
  1983. }
  1984.  
  1985. public void dropArrowPlayer() {
  1986. int enemyX = Server.playerHandler.players[c.oldPlayerIndex].getX();
  1987. int enemyY = Server.playerHandler.players[c.oldPlayerIndex].getY();
  1988. if (c.playerEquipment[c.playerCape] == 10499)
  1989. return;
  1990. if(Misc.random(10) >= 4) {
  1991. if (Server.itemHandler.itemAmount(c.rangeItemUsed, enemyX, enemyY) == 0) {
  1992. Server.itemHandler.createGroundItem(c, c.rangeItemUsed, enemyX, enemyY, 1, c.getId());
  1993. } else if (Server.itemHandler.itemAmount(c.rangeItemUsed, enemyX, enemyY) != 0) {
  1994. int amount = Server.itemHandler.itemAmount(c.rangeItemUsed, enemyX, enemyY);
  1995. Server.itemHandler.removeGroundItem(c, c.rangeItemUsed, enemyX, enemyY, false);
  1996. Server.itemHandler.createGroundItem(c, c.rangeItemUsed, enemyX, enemyY, amount+1, c.getId());
  1997. }
  1998. }
  1999. }
  2000.  
  2001.  
  2002. public void removeAllItems() {
  2003. for (int i = 0; i < c.playerItems.length; i++) {
  2004. c.playerItems[i] = 0;
  2005. }
  2006. for (int i = 0; i < c.playerItemsN.length; i++) {
  2007. c.playerItemsN[i] = 0;
  2008. }
  2009. resetItems(3214);
  2010. }
  2011.  
  2012. public int freeSlots(){
  2013. int freeS = 0;
  2014. for (int i=0; i < c.playerItems.length; i++){
  2015. if (c.playerItems[i] <= 0){
  2016. freeS++;
  2017. }
  2018. }
  2019. return freeS;
  2020. }
  2021.  
  2022. public int findItem(int id, int[] items, int[] amounts) {
  2023. for (int i = 0; i < c.playerItems.length; i++) {
  2024. if (((items[i] - 1) == id) && (amounts[i] > 0)) {
  2025. return i;
  2026. }
  2027. }
  2028. return -1;
  2029. }
  2030.  
  2031. public String getItemName(int ItemID) {
  2032. for (int i = 0; i < Config.ITEM_LIMIT; i++) {
  2033. if (Server.itemHandler.ItemList[i] != null) {
  2034. if (Server.itemHandler.ItemList[i].itemId == ItemID) {
  2035. return Server.itemHandler.ItemList[i].itemName;
  2036. }
  2037. }
  2038. }
  2039. return "Unarmed";
  2040. }
  2041.  
  2042. public int getItemId(String itemName) {
  2043. for (int i = 0; i < Config.ITEM_LIMIT; i++) {
  2044. if (Server.itemHandler.ItemList[i] != null) {
  2045. if (Server.itemHandler.ItemList[i].itemName.equalsIgnoreCase(itemName)) {
  2046. return Server.itemHandler.ItemList[i].itemId;
  2047. }
  2048. }
  2049. }
  2050. return -1;
  2051. }
  2052.  
  2053. public int getItemSlot(int ItemID) {
  2054. for (int i = 0; i < c.playerItems.length; i++) {
  2055. if((c.playerItems[i] - 1) == ItemID){
  2056. return i;
  2057. }
  2058. }
  2059. return -1;
  2060. }
  2061.  
  2062. public int getItemAmount(int ItemID) {
  2063. int itemCount = 0;
  2064. for (int i = 0; i < c.playerItems.length; i++) {
  2065. if((c.playerItems[i] - 1) == ItemID) {
  2066. itemCount += c.playerItemsN[i];
  2067. }
  2068. }
  2069. return itemCount;
  2070. }
  2071.  
  2072.  
  2073. public boolean playerHasItem(int itemID, int amt, int slot) {
  2074. itemID++;
  2075. int found = 0;
  2076. if (c.playerItems[slot] == (itemID)) {
  2077. for (int i = 0; i < c.playerItems.length; i++) {
  2078. if (c.playerItems[i] == itemID) {
  2079. if(c.playerItemsN[i] >= amt) {
  2080. return true;
  2081. } else {
  2082. found++;
  2083. }
  2084. }
  2085. }
  2086. if(found >= amt) {
  2087. return true;
  2088. }
  2089. return false;
  2090. }
  2091. return false;
  2092. }
  2093.  
  2094. public boolean playerHasItem(int itemID) {
  2095. itemID++;
  2096. for (int i = 0; i < c.playerItems.length; i++) {
  2097. if (c.playerItems[i] == itemID)
  2098. return true;
  2099. }
  2100. return false;
  2101. }
  2102.  
  2103.  
  2104. public boolean playerHasItem(int itemID, int amt) {
  2105. itemID++;
  2106. int found = 0;
  2107. for (int i = 0; i < c.playerItems.length; i++) {
  2108. if (c.playerItems[i] == itemID) {
  2109. if(c.playerItemsN[i] >= amt){
  2110. return true;
  2111. } else{
  2112. found++;
  2113. }
  2114. }
  2115. }
  2116. if(found >= amt) {
  2117. return true;
  2118. }
  2119. return false;
  2120. }
  2121.  
  2122. public int getUnnotedItem(int ItemID) {
  2123. int NewID = ItemID - 1;
  2124. String NotedName = "";
  2125. for (int i = 0; i < Config.ITEM_LIMIT; i++) {
  2126. if (Server.itemHandler.ItemList[i] != null) {
  2127. if (Server.itemHandler.ItemList[i].itemId == ItemID) {
  2128. NotedName = Server.itemHandler.ItemList[i].itemName;
  2129. }
  2130. }
  2131. }
  2132. for (int i = 0; i < Config.ITEM_LIMIT; i++) {
  2133. if (Server.itemHandler.ItemList[i] != null) {
  2134. if (Server.itemHandler.ItemList[i].itemName == NotedName) {
  2135. if (Server.itemHandler.ItemList[i].itemDescription.startsWith("Swap this note at any bank for a") == false) {
  2136. NewID = Server.itemHandler.ItemList[i].itemId;
  2137. break;
  2138. }
  2139. }
  2140. }
  2141. }
  2142. return NewID;
  2143. }
  2144.  
  2145.  
  2146. /**
  2147. *Drop Item
  2148. **/
  2149.  
  2150. public void createGroundItem(int itemID, int itemX, int itemY, int itemAmount) {
  2151. synchronized(c) {
  2152. c.getOutStream().createFrame(85);
  2153. c.getOutStream().writeByteC((itemY - 8 * c.mapRegionY));
  2154. c.getOutStream().writeByteC((itemX - 8 * c.mapRegionX));
  2155. c.getOutStream().createFrame(44);
  2156. c.getOutStream().writeWordBigEndianA(itemID);
  2157. c.getOutStream().writeWord(itemAmount);
  2158. c.getOutStream().writeByte(0);
  2159. c.flushOutStream();
  2160. }
  2161. }
  2162.  
  2163. /**
  2164. *Pickup Item
  2165. **/
  2166.  
  2167. public void removeGroundItem(int itemID, int itemX, int itemY, int Amount) {
  2168. synchronized(c) {
  2169. c.getOutStream().createFrame(85);
  2170. c.getOutStream().writeByteC((itemY - 8 * c.mapRegionY));
  2171. c.getOutStream().writeByteC((itemX - 8 * c.mapRegionX));
  2172. c.getOutStream().createFrame(156);
  2173. c.getOutStream().writeByteS(0);
  2174. c.getOutStream().writeWord(itemID);
  2175. c.flushOutStream();
  2176. }
  2177. }
  2178.  
  2179. public boolean ownsCape() {
  2180. if (c.getItems().playerHasItem(2412,1) || c.getItems().playerHasItem(2413,1) || c.getItems().playerHasItem(2414,1))
  2181. return true;
  2182. for (int j = 0; j < Config.BANK_SIZE; j++) {
  2183. if (c.bankItems[j] == 2412 || c.bankItems[j] == 2413 || c.bankItems[j] == 2414)
  2184. return true;
  2185. }
  2186. if (c.playerEquipment[c.playerCape] == 2413 || c.playerEquipment[c.playerCape] == 2414 || c.playerEquipment[c.playerCape] == 2415)
  2187. return true;
  2188. return false;
  2189. }
  2190.  
  2191. public boolean hasAllShards() {
  2192. return playerHasItem(11712,1) && playerHasItem(11712,1) && playerHasItem(11714,1);
  2193. }
  2194.  
  2195. public void makeBlade() {
  2196. deleteItem(11710,1);
  2197. deleteItem(11712,1);
  2198. deleteItem(11714,1);
  2199. addItem(11690,1);
  2200. c.sendMessage("You combine the shards to make a blade.");
  2201. }
  2202.  
  2203. public void makeGodsword(int i) {
  2204. int godsword = i - 8;
  2205. if (playerHasItem(11690) && playerHasItem(i)) {
  2206. deleteItem(11690,1);
  2207. deleteItem(i,1);
  2208. addItem(i - 8, 1);
  2209. c.sendMessage("You combine the hilt and the blade to make a godsword.");
  2210. }
  2211. }
  2212.  
  2213. public boolean isHilt(int i) {
  2214. return i >= 11702 && i <= 11708 && i%2 == 0;
  2215. }
  2216.  
  2217.  
  2218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement