Advertisement
Guest User

Tradeandduel

a guest
Aug 10th, 2012
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.42 KB | None | 0 0
  1. package server.game.players;
  2.  
  3. import java.util.concurrent.CopyOnWriteArrayList;
  4.  
  5. import server.Config;
  6. import server.Server;
  7. import server.game.items.GameItem;
  8. import server.game.items.Item;
  9. import server.util.Misc;
  10.  
  11. public class TradeAndDuel {
  12.  
  13. private Client c;
  14.  
  15. public TradeAndDuel(Client Client) {
  16. this.c = Client;
  17. }
  18.  
  19. /**
  20. * Trading
  21. **/
  22.  
  23. public CopyOnWriteArrayList<GameItem> offeredItems = new CopyOnWriteArrayList<GameItem>();
  24.  
  25. public void requestTrade(int id) {
  26. try {
  27. Client o = (Client) PlayerHandler.players[id];
  28. if (id == c.playerId)
  29. return;
  30. c.tradeWith = id;
  31. if (!c.inTrade && o.tradeRequested && o.tradeWith == c.playerId) {
  32. c.getTradeAndDuel().openTrade();
  33. o.getTradeAndDuel().openTrade();
  34. } else if (!c.inTrade) {
  35.  
  36. c.tradeRequested = true;
  37. c.sendMessage("Sending trade request...");
  38. o.sendMessage(c.playerName + ":tradereq:");
  39. }
  40. } catch (Exception e) {
  41. Misc.println("Error requesting trade.");
  42. }
  43. }
  44.  
  45. public void openTrade() {
  46. Client o = (Client) PlayerHandler.players[c.tradeWith];
  47. if (o == null) {
  48. return;
  49. }
  50. c.inTrade = true;
  51. c.canOffer = true;
  52. c.tradeStatus = 1;
  53. c.tradeRequested = false;
  54. c.getItems().resetItems(3322);
  55. resetTItems(3415);
  56. resetOTItems(3416);
  57. String out = o.playerName;
  58.  
  59. if (o.playerRights == 1) {
  60. out = "@cr1@" + out;
  61. } else if (o.playerRights == 2) {
  62. out = "@cr2@" + out;
  63. }
  64. c.getPA().sendFrame126(
  65. "Trading with: " + o.playerName + " who has @gre@"
  66. + o.getItems().freeSlots() + " free slots", 3417);
  67. c.getPA().sendFrame126("", 3431);
  68. c.getPA().sendFrame126("Are you sure you want to make this trade?",
  69. 3535);
  70. c.getPA().sendFrame248(3323, 3321);
  71. }
  72.  
  73. public void resetTItems(int WriteFrame) {
  74. synchronized (c) {
  75. c.getOutStream().createFrameVarSizeWord(53);
  76. c.getOutStream().writeWord(WriteFrame);
  77. int len = offeredItems.toArray().length;
  78. int current = 0;
  79. c.getOutStream().writeWord(len);
  80. for (GameItem item : offeredItems) {
  81. if (item.amount > 254) {
  82. c.getOutStream().writeByte(255);
  83. c.getOutStream().writeDWord_v2(item.amount);
  84. } else {
  85. c.getOutStream().writeByte(item.amount);
  86. }
  87. c.getOutStream().writeWordBigEndianA(item.id + 1);
  88. current++;
  89. }
  90. if (current < 27) {
  91. for (int i = current; i < 28; i++) {
  92. c.getOutStream().writeByte(1);
  93. c.getOutStream().writeWordBigEndianA(-1);
  94. }
  95. }
  96. c.getOutStream().endFrameVarSizeWord();
  97. c.flushOutStream();
  98. }
  99. }
  100.  
  101. public boolean fromTrade(int itemID, int fromSlot, int amount) {
  102. Client o = (Client) PlayerHandler.players[c.tradeWith];
  103. if (o == null) {
  104. return false;
  105. }
  106. try {
  107. if (!c.inTrade || !c.canOffer) {
  108. declineTrade();
  109. return false;
  110. }
  111. c.tradeConfirmed = false;
  112. o.tradeConfirmed = false;
  113. if (!Item.itemStackable[itemID]) {
  114. for (int a = 0; a < amount; a++) {
  115. for (GameItem item : offeredItems) {
  116. if (item.id == itemID) {
  117. if (!item.stackable) {
  118. offeredItems.remove(item);
  119. c.getItems().addItem(itemID, 1);
  120. o.getPA().sendFrame126(
  121. "Trading with: " + c.playerName
  122. + " who has @gre@"
  123. + c.getItems().freeSlots()
  124. + " free slots", 3417);
  125. } else {
  126. if (item.amount > amount) {
  127. item.amount -= amount;
  128. c.getItems().addItem(itemID, amount);
  129. o.getPA().sendFrame126(
  130. "Trading with: " + c.playerName
  131. + " who has @gre@"
  132. + c.getItems().freeSlots()
  133. + " free slots", 3417);
  134. } else {
  135. amount = item.amount;
  136. offeredItems.remove(item);
  137. c.getItems().addItem(itemID, amount);
  138. o.getPA().sendFrame126(
  139. "Trading with: " + c.playerName
  140. + " who has @gre@"
  141. + c.getItems().freeSlots()
  142. + " free slots", 3417);
  143. }
  144. }
  145. break;
  146. }
  147. o.getPA().sendFrame126(
  148. "Trading with: " + c.playerName
  149. + " who has @gre@"
  150. + c.getItems().freeSlots()
  151. + " free slots", 3417);
  152. c.tradeConfirmed = false;
  153. o.tradeConfirmed = false;
  154. c.getItems().resetItems(3322);
  155. resetTItems(3415);
  156. o.getTradeAndDuel().resetOTItems(3416);
  157. c.getPA().sendFrame126("", 3431);
  158. o.getPA().sendFrame126("", 3431);
  159. }
  160. }
  161. }
  162. for (GameItem item : offeredItems) {
  163. if (item.id == itemID) {
  164. if (!item.stackable) {
  165. } else {
  166. if (item.amount > amount) {
  167. item.amount -= amount;
  168. c.getItems().addItem(itemID, amount);
  169. o.getPA().sendFrame126(
  170. "Trading with: " + c.playerName
  171. + " who has @gre@"
  172. + c.getItems().freeSlots()
  173. + " free slots", 3417);
  174. } else {
  175. amount = item.amount;
  176. offeredItems.remove(item);
  177. c.getItems().addItem(itemID, amount);
  178. o.getPA().sendFrame126(
  179. "Trading with: " + c.playerName
  180. + " who has @gre@"
  181. + c.getItems().freeSlots()
  182. + " free slots", 3417);
  183. }
  184. }
  185. break;
  186. }
  187. }
  188.  
  189. o.getPA().sendFrame126(
  190. "Trading with: " + c.playerName + " who has @gre@"
  191. + c.getItems().freeSlots() + " free slots", 3417);
  192. c.tradeConfirmed = false;
  193. o.tradeConfirmed = false;
  194. c.getItems().resetItems(3322);
  195. resetTItems(3415);
  196. o.getTradeAndDuel().resetOTItems(3416);
  197. c.getPA().sendFrame126("", 3431);
  198. o.getPA().sendFrame126("", 3431);
  199. } catch (Exception e) {
  200. }
  201. return true;
  202. }
  203.  
  204. public boolean tradeItem(int itemID, int fromSlot, int amount) {
  205. Client o = (Client) PlayerHandler.players[c.tradeWith];
  206. if (o == null) {
  207. return false;
  208. }
  209.  
  210. for (int i : Config.ITEM_TRADEABLE) {
  211. if (i == itemID) {
  212. c.sendMessage("You can't trade this item.");
  213. return false;
  214. }
  215. }
  216. if (!((c.playerItems[fromSlot] == itemID + 1) && (c.playerItemsN[fromSlot] >= amount))) {
  217. c.sendMessage("You don't have that amount!");
  218. return false;
  219. }
  220. c.tradeConfirmed = false;
  221. o.tradeConfirmed = false;
  222. if (!Item.itemStackable[itemID] && !Item.itemIsNote[itemID]) {
  223. for (int a = 0; a < amount && a < 28; a++) {
  224. if (c.getItems().playerHasItem(itemID, 1)) {
  225. offeredItems.add(new GameItem(itemID, 1));
  226. c.getItems().deleteItem(itemID,
  227. c.getItems().getItemSlot(itemID), 1);
  228. o.getPA().sendFrame126(
  229. "Trading with: " + c.playerName + " who has @gre@"
  230. + c.getItems().freeSlots() + " free slots",
  231. 3417);
  232. }
  233. }
  234. o.getPA().sendFrame126(
  235. "Trading with: " + c.playerName + " who has @gre@"
  236. + c.getItems().freeSlots() + " free slots", 3417);
  237. c.getItems().resetItems(3322);
  238. resetTItems(3415);
  239. o.getTradeAndDuel().resetOTItems(3416);
  240. c.getPA().sendFrame126("", 3431);
  241. o.getPA().sendFrame126("", 3431);
  242. }
  243. if (c.getItems().getItemCount(itemID) < amount) {
  244. amount = c.getItems().getItemCount(itemID);
  245. if (amount == 0)
  246. return false;
  247. }
  248. if (!c.inTrade || !c.canOffer) {
  249. declineTrade();
  250. return false;
  251. }
  252.  
  253. if (Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
  254. boolean inTrade = false;
  255. for (GameItem item : offeredItems) {
  256. if (item.id == itemID) {
  257. inTrade = true;
  258. item.amount += amount;
  259. c.getItems().deleteItem2(itemID, amount);
  260. o.getPA().sendFrame126(
  261. "Trading with: " + c.playerName + " who has @gre@"
  262. + c.getItems().freeSlots() + " free slots",
  263. 3417);
  264. break;
  265. }
  266. }
  267.  
  268. if(!inTrade) {
  269. offeredItems.add(new GameItem(itemID, amount));
  270. c.getItems().deleteItem2(itemID, amount);
  271. o.getPA().sendFrame126("Trading with: " + c.playerName+" who has @gre@"+c.getItems().freeSlots()+" free slots" ,3417);
  272. }
  273. o.getPA().sendFrame126(
  274. "Trading with: " + c.playerName + " who has @gre@"
  275. + c.getItems().freeSlots() + " free slots", 3417);
  276. c.getItems().resetItems(3322);
  277. resetTItems(3415);
  278. o.getTradeAndDuel().resetOTItems(3416);
  279. c.getPA().sendFrame126("", 3431);
  280. o.getPA().sendFrame126("", 3431);
  281. return true;
  282. }
  283. return false;
  284. }
  285.  
  286. public void resetTrade() {
  287. offeredItems.clear();
  288. c.inTrade = false;
  289. c.tradeWith = 0;
  290. c.canOffer = true;
  291. c.tradeConfirmed = false;
  292. c.tradeConfirmed2 = false;
  293. c.acceptedTrade = false;
  294. c.getPA().removeAllWindows();
  295. c.tradeResetNeeded = false;
  296. c.getPA().sendFrame126("Are you sure you want to make this trade?",
  297. 3535);
  298. }
  299.  
  300. public void declineTrade() {
  301. Client o = (Client) PlayerHandler.players[c.tradeWith];
  302. c.tradeStatus = 0;
  303. declineTrade(true);
  304. c.sendMessage("Trade was declined.");
  305. o.sendMessage("Trade was declined.");
  306. }
  307.  
  308. public void declineTrade(boolean tellOther) {
  309. c.getPA().removeAllWindows();
  310. Client o = (Client) PlayerHandler.players[c.tradeWith];
  311. if (o == null) {
  312. return;
  313. }
  314.  
  315. if (tellOther) {
  316. o.getTradeAndDuel().declineTrade(false);
  317. o.getTradeAndDuel().c.getPA().removeAllWindows();
  318. }
  319.  
  320. for (GameItem item : offeredItems) {
  321. if (item.amount < 1) {
  322. continue;
  323. }
  324. if (item.stackable) {
  325. c.getItems().addItem(item.id, item.amount);
  326. } else {
  327. for (int i = 0; i < item.amount; i++) {
  328. c.getItems().addItem(item.id, 1);
  329. }
  330. }
  331. }
  332. c.canOffer = true;
  333. c.tradeConfirmed = false;
  334. c.tradeConfirmed2 = false;
  335. offeredItems.clear();
  336. c.inTrade = false;
  337. c.tradeWith = 0;
  338. }
  339.  
  340. public void resetOTItems(int WriteFrame) {
  341. synchronized (c) {
  342. Client o = (Client) PlayerHandler.players[c.tradeWith];
  343. if (o == null) {
  344. return;
  345. }
  346. c.getOutStream().createFrameVarSizeWord(53);
  347. c.getOutStream().writeWord(WriteFrame);
  348. int len = o.getTradeAndDuel().offeredItems.toArray().length;
  349. int current = 0;
  350. c.getOutStream().writeWord(len);
  351. for (GameItem item : o.getTradeAndDuel().offeredItems) {
  352. if (item.amount > 254) {
  353. c.getOutStream().writeByte(255); // item's stack count. if
  354. // over 254, write byte
  355. // 255
  356. c.getOutStream().writeDWord_v2(item.amount);
  357. } else {
  358. c.getOutStream().writeByte(item.amount);
  359. }
  360. c.getOutStream().writeWordBigEndianA(item.id + 1); // item id
  361. current++;
  362. }
  363. if (current < 27) {
  364. for (int i = current; i < 28; i++) {
  365. c.getOutStream().writeByte(1);
  366. c.getOutStream().writeWordBigEndianA(-1);
  367. }
  368. }
  369. c.getOutStream().endFrameVarSizeWord();
  370. c.flushOutStream();
  371. }
  372. }
  373.  
  374. public void confirmScreen() {
  375. Client o = (Client) PlayerHandler.players[c.tradeWith];
  376. if (o == null) {
  377. return;
  378. }
  379. c.canOffer = false;
  380. c.getItems().resetItems(3214);
  381. String SendTrade = "Absolutely nothing!";
  382. String SendAmount = "";
  383. int Count = 0;
  384. for (GameItem item : offeredItems) {
  385. if (item.id > 0) {
  386. if (item.amount >= 1000 && item.amount < 1000000) {
  387. SendAmount = "@cya@" + (item.amount / 1000) + "K @whi@("
  388. + Misc.format(item.amount) + ")";
  389. } else if (item.amount >= 1000000) {
  390. SendAmount = "@gre@" + (item.amount / 1000000)
  391. + " million @whi@(" + Misc.format(item.amount)
  392. + ")";
  393. } else {
  394. SendAmount = "" + Misc.format(item.amount);
  395. }
  396.  
  397. if (Count == 0) {
  398. SendTrade = c.getItems().getItemName(item.id);
  399. } else {
  400. SendTrade = SendTrade + "\\n"
  401. + c.getItems().getItemName(item.id);
  402. }
  403.  
  404. if (item.stackable) {
  405. SendTrade = SendTrade + " x " + SendAmount;
  406. }
  407. Count++;
  408. }
  409. }
  410.  
  411. c.getPA().sendFrame126(SendTrade, 3557);
  412. SendTrade = "Absolutely nothing!";
  413. SendAmount = "";
  414. Count = 0;
  415.  
  416. for (GameItem item : o.getTradeAndDuel().offeredItems) {
  417. if (item.id > 0) {
  418. if (item.amount >= 1000 && item.amount < 1000000) {
  419. SendAmount = "@cya@" + (item.amount / 1000) + "K @whi@("
  420. + Misc.format(item.amount) + ")";
  421. } else if (item.amount >= 1000000) {
  422. SendAmount = "@gre@" + (item.amount / 1000000)
  423. + " million @whi@(" + Misc.format(item.amount)
  424. + ")";
  425. } else {
  426. SendAmount = "" + Misc.format(item.amount);
  427. }
  428.  
  429. if (Count == 0) {
  430. SendTrade = c.getItems().getItemName(item.id);
  431. } else {
  432. SendTrade = SendTrade + "\\n"
  433. + c.getItems().getItemName(item.id);
  434. }
  435. if (item.stackable) {
  436. SendTrade = SendTrade + " x " + SendAmount;
  437. }
  438. Count++;
  439. }
  440. }
  441. c.getPA().sendFrame126(SendTrade, 3558);
  442. // TODO: find out what 197 does eee 3213
  443. c.getPA().sendFrame248(3443, 197);
  444. }
  445.  
  446. public void giveItems() {
  447. Client o = (Client) PlayerHandler.players[c.tradeWith];
  448. if (o == null) {
  449. return;
  450. }
  451. try {
  452. for (GameItem item : o.getTradeAndDuel().offeredItems) {
  453. if (item.id > 0) {
  454. c.getItems().addItem(item.id, item.amount);
  455. }
  456. }
  457.  
  458. c.getPA().removeAllWindows();
  459. c.tradeResetNeeded = true;
  460. } catch (Exception e) {
  461. }
  462. }
  463.  
  464. /**
  465. * Dueling
  466. **/
  467.  
  468. public CopyOnWriteArrayList<GameItem> otherStakedItems = new CopyOnWriteArrayList<GameItem>();
  469. public CopyOnWriteArrayList<GameItem> stakedItems = new CopyOnWriteArrayList<GameItem>();
  470.  
  471. public void requestDuel(int id) {
  472. try {
  473. if (id == c.playerId)
  474. return;
  475. resetDuel();
  476. resetDuelItems();
  477. c.duelingWith = id;
  478. Client o = (Client) PlayerHandler.players[id];
  479. if (o == null) {
  480. return;
  481. }
  482. c.duelRequested = true;
  483. if (c.duelStatus == 0 && o.duelStatus == 0 && c.duelRequested
  484. && o.duelRequested && c.duelingWith == o.getId()
  485. && o.duelingWith == c.getId()) {
  486. if (c.goodDistance(c.getX(), c.getY(), o.getX(), o.getY(), 1)) {
  487. c.getTradeAndDuel().openDuel();
  488. o.getTradeAndDuel().openDuel();
  489. } else {
  490. c.sendMessage("You need to get closer to your opponent to start the duel.");
  491. }
  492.  
  493. } else {
  494. c.sendMessage("Sending duel request...");
  495. o.sendMessage(c.playerName + ":duelreq:");
  496. }
  497. } catch (Exception e) {
  498. Misc.println("Error requesting duel.");
  499. }
  500. }
  501.  
  502. public void openDuel() {
  503. Client o = (Client) PlayerHandler.players[c.duelingWith];
  504. if (o == null) {
  505. return;
  506. }
  507. c.duelStatus = 1;
  508. c.openDuel = true;
  509. o.openDuel = true;
  510. refreshduelRules();
  511. refreshDuelScreen();
  512. c.canOffer = true;
  513. for (int i = 0; i < c.playerEquipment.length; i++) {
  514. sendDuelEquipment(c.playerEquipment[i], c.playerEquipmentN[i], i);
  515. }
  516. c.getPA().sendFrame126(
  517. "Dueling with: " + o.playerName + " (level-" + o.combatLevel
  518. + ")", 6671);
  519. c.getPA().sendFrame126("", 6684);
  520. c.getPA().sendFrame248(6575, 3321);
  521. c.getItems().resetItems(3322);
  522. }
  523.  
  524. public void sendDuelEquipment(int itemId, int amount, int slot) {
  525. synchronized (c) {
  526. if (itemId != 0) {
  527. c.getOutStream().createFrameVarSizeWord(34);
  528. c.getOutStream().writeWord(13824);
  529. c.getOutStream().writeByte(slot);
  530. c.getOutStream().writeWord(itemId + 1);
  531.  
  532. if (amount > 254) {
  533. c.getOutStream().writeByte(255);
  534. c.getOutStream().writeDWord(amount);
  535. } else {
  536. c.getOutStream().writeByte(amount);
  537. }
  538. c.getOutStream().endFrameVarSizeWord();
  539. c.flushOutStream();
  540. }
  541. }
  542. }
  543.  
  544. public void refreshduelRules() {
  545. for (int i = 0; i < c.duelRule.length; i++) {
  546. c.duelRule[i] = false;
  547. }
  548. c.getPA().sendFrame87(286, 0);
  549. c.duelOption = 0;
  550. }
  551.  
  552. public void refreshDuelScreen() {
  553. synchronized (c) {
  554. Client o = (Client) PlayerHandler.players[c.duelingWith];
  555. if (o == null) {
  556. return;
  557. }
  558. c.getOutStream().createFrameVarSizeWord(53);
  559. c.getOutStream().writeWord(6669);
  560. c.getOutStream().writeWord(stakedItems.toArray().length);
  561. int current = 0;
  562. for (GameItem item : stakedItems) {
  563. if (item.amount > 254) {
  564. c.getOutStream().writeByte(255);
  565. c.getOutStream().writeDWord_v2(item.amount);
  566. } else {
  567. c.getOutStream().writeByte(item.amount);
  568. }
  569. if (item.id > Config.ITEM_LIMIT || item.id < 0) {
  570. item.id = Config.ITEM_LIMIT;
  571. }
  572. c.getOutStream().writeWordBigEndianA(item.id + 1);
  573.  
  574. current++;
  575. }
  576.  
  577. if (current < 27) {
  578. for (int i = current; i < 28; i++) {
  579. c.getOutStream().writeByte(1);
  580. c.getOutStream().writeWordBigEndianA(-1);
  581. }
  582. }
  583. c.getOutStream().endFrameVarSizeWord();
  584. c.flushOutStream();
  585.  
  586. c.getOutStream().createFrameVarSizeWord(53);
  587. c.getOutStream().writeWord(6670);
  588. c.getOutStream().writeWord(
  589. o.getTradeAndDuel().stakedItems.toArray().length);
  590. current = 0;
  591. for (GameItem item : o.getTradeAndDuel().stakedItems) {
  592. if (item.amount > 254) {
  593. c.getOutStream().writeByte(255);
  594. c.getOutStream().writeDWord_v2(item.amount);
  595. } else {
  596. c.getOutStream().writeByte(item.amount);
  597. }
  598. if (item.id > Config.ITEM_LIMIT || item.id < 0) {
  599. item.id = Config.ITEM_LIMIT;
  600. }
  601. c.getOutStream().writeWordBigEndianA(item.id + 1);
  602. current++;
  603. }
  604.  
  605. if (current < 27) {
  606. for (int i = current; i < 28; i++) {
  607. c.getOutStream().writeByte(1);
  608. c.getOutStream().writeWordBigEndianA(-1);
  609. }
  610. }
  611. c.getOutStream().endFrameVarSizeWord();
  612. c.flushOutStream();
  613. }
  614. }
  615.  
  616. public boolean stakeItem(int itemID, int fromSlot, int amount) {
  617.  
  618. for (int i : Config.ITEM_TRADEABLE) {
  619. if (i == itemID) {
  620. c.sendMessage("You can't stake this item.");
  621. return false;
  622. }
  623. }
  624. if (amount <= 0)
  625. return false;
  626. Client o = (Client) PlayerHandler.players[c.duelingWith];
  627. if (o == null) {
  628. declineDuel();
  629. return false;
  630. }
  631. if (o.duelStatus <= 0 || c.duelStatus <= 0) {
  632. declineDuel();
  633. o.getTradeAndDuel().declineDuel();
  634. return false;
  635. }
  636. if (!c.canOffer) {
  637. return false;
  638. }
  639. changeDuelStuff();
  640. if (!Item.itemStackable[itemID]) {
  641. for (int a = 0; a < amount; a++) {
  642. if (c.getItems().playerHasItem(itemID, 1)) {
  643. stakedItems.add(new GameItem(itemID, 1));
  644. c.getItems().deleteItem(itemID,
  645. c.getItems().getItemSlot(itemID), 1);
  646. }
  647. }
  648. c.getItems().resetItems(3214);
  649. c.getItems().resetItems(3322);
  650. o.getItems().resetItems(3214);
  651. o.getItems().resetItems(3322);
  652. refreshDuelScreen();
  653. o.getTradeAndDuel().refreshDuelScreen();
  654. c.getPA().sendFrame126("", 6684);
  655. o.getPA().sendFrame126("", 6684);
  656. }
  657.  
  658. if (!c.getItems().playerHasItem(itemID, amount)) {
  659. return false;
  660. }
  661. if (Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
  662. boolean found = false;
  663. for (GameItem item : stakedItems) {
  664. if (item.id == itemID) {
  665. found = true;
  666. item.amount += amount;
  667. c.getItems().deleteItem2(itemID, amount);
  668. break;
  669. }
  670. }
  671. if (!found) {
  672. c.getItems().deleteItem(itemID, fromSlot, amount);
  673. stakedItems.add(new GameItem(itemID, amount));
  674. }
  675. }
  676.  
  677. c.getItems().resetItems(3214);
  678. c.getItems().resetItems(3322);
  679. o.getItems().resetItems(3214);
  680. o.getItems().resetItems(3322);
  681. refreshDuelScreen();
  682. o.getTradeAndDuel().refreshDuelScreen();
  683. c.getPA().sendFrame126("", 6684);
  684. o.getPA().sendFrame126("", 6684);
  685. return true;
  686. }
  687.  
  688. public boolean fromDuel(int itemID, int fromSlot, int amount) {
  689. Client o = (Client) PlayerHandler.players[c.duelingWith];
  690. if (o == null) {
  691. declineDuel();
  692. return false;
  693. }
  694. if (o.duelStatus <= 0 || c.duelStatus <= 0) {
  695. declineDuel();
  696. o.getTradeAndDuel().declineDuel();
  697. return false;
  698. }
  699. if (Item.itemStackable[itemID]) {
  700. if (c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
  701. c.sendMessage("You have too many rules set to remove that item.");
  702. return false;
  703. }
  704. }
  705.  
  706. if (!c.canOffer) {
  707. return false;
  708. }
  709.  
  710. changeDuelStuff();
  711. boolean goodSpace = true;
  712. if (!Item.itemStackable[itemID]) {
  713. for (int a = 0; a < amount; a++) {
  714. for (GameItem item : stakedItems) {
  715. if (item.id == itemID) {
  716. if (!item.stackable) {
  717. if (c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
  718. goodSpace = false;
  719. break;
  720. }
  721. stakedItems.remove(item);
  722. c.getItems().addItem(itemID, 1);
  723. } else {
  724. if (c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
  725. goodSpace = false;
  726. break;
  727. }
  728. if (item.amount > amount) {
  729. item.amount -= amount;
  730. c.getItems().addItem(itemID, amount);
  731. } else {
  732. if (c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
  733. goodSpace = false;
  734. break;
  735. }
  736. amount = item.amount;
  737. stakedItems.remove(item);
  738. c.getItems().addItem(itemID, amount);
  739. }
  740. }
  741. break;
  742. }
  743. o.duelStatus = 1;
  744. c.duelStatus = 1;
  745. c.getItems().resetItems(3214);
  746. c.getItems().resetItems(3322);
  747. o.getItems().resetItems(3214);
  748. o.getItems().resetItems(3322);
  749. c.getTradeAndDuel().refreshDuelScreen();
  750. o.getTradeAndDuel().refreshDuelScreen();
  751. o.getPA().sendFrame126("", 6684);
  752. }
  753. }
  754. }
  755.  
  756. for (GameItem item : stakedItems) {
  757. if (item.id == itemID) {
  758. if (!item.stackable) {
  759. } else {
  760. if (item.amount > amount) {
  761. item.amount -= amount;
  762. c.getItems().addItem(itemID, amount);
  763. } else {
  764. amount = item.amount;
  765. stakedItems.remove(item);
  766. c.getItems().addItem(itemID, amount);
  767. }
  768. }
  769. break;
  770. }
  771. }
  772. o.duelStatus = 1;
  773. c.duelStatus = 1;
  774. c.getItems().resetItems(3214);
  775. c.getItems().resetItems(3322);
  776. o.getItems().resetItems(3214);
  777. o.getItems().resetItems(3322);
  778. c.getTradeAndDuel().refreshDuelScreen();
  779. o.getTradeAndDuel().refreshDuelScreen();
  780. o.getPA().sendFrame126("", 6684);
  781. if (!goodSpace) {
  782. c.sendMessage("You have too many rules set to remove that item.");
  783. return true;
  784. }
  785. return true;
  786. }
  787.  
  788. public void confirmDuel() {
  789. Client o = (Client) PlayerHandler.players[c.duelingWith];
  790. if (o == null) {
  791. declineDuel();
  792. return;
  793. }
  794. String itemId = "";
  795. for (GameItem item : stakedItems) {
  796. if (Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
  797. itemId += c.getItems().getItemName(item.id) + " x "
  798. + Misc.format(item.amount) + "\\n";
  799. } else {
  800. itemId += c.getItems().getItemName(item.id) + "\\n";
  801. }
  802. }
  803. c.getPA().sendFrame126(itemId, 6516);
  804. itemId = "";
  805. for (GameItem item : o.getTradeAndDuel().stakedItems) {
  806. if (Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
  807. itemId += c.getItems().getItemName(item.id) + " x "
  808. + Misc.format(item.amount) + "\\n";
  809. } else {
  810. itemId += c.getItems().getItemName(item.id) + "\\n";
  811. }
  812. }
  813. c.getPA().sendFrame126(itemId, 6517);
  814. c.getPA().sendFrame126("", 8242);
  815. for (int i = 8238; i <= 8253; i++) {
  816. c.getPA().sendFrame126("", i);
  817. }
  818. c.getPA().sendFrame126("Hitpoints will be restored.", 8250);
  819. c.getPA().sendFrame126("Boosted stats will be restored.", 8238);
  820. if (c.duelRule[8]) {
  821. c.getPA().sendFrame126("There will be obstacles in the arena.",
  822. 8239);
  823. }
  824. c.getPA().sendFrame126("", 8240);
  825. c.getPA().sendFrame126("", 8241);
  826.  
  827. String[] rulesOption = { "Players cannot forfeit!",
  828. "Players cannot move.", "Players cannot use range.",
  829. "Players cannot use melee.", "Players cannot use magic.",
  830. "Players cannot drink pots.", "Players cannot eat food.",
  831. "Players cannot use prayer." };
  832.  
  833. int lineNumber = 8242;
  834. for (int i = 0; i < 8; i++) {
  835. if (c.duelRule[i]) {
  836. c.getPA().sendFrame126("" + rulesOption[i], lineNumber);
  837. lineNumber++;
  838. }
  839. }
  840. c.getPA().sendFrame126("", 6571);
  841. c.getPA().sendFrame248(6412, 197);
  842. // c.getPA().showInterface(6412);
  843. }
  844.  
  845. public void startDuel() {
  846. Client o = (Client) PlayerHandler.players[c.duelingWith];
  847. if (o == null) {
  848. duelVictory();
  849. }
  850. c.headIconHints = 2;
  851.  
  852. if (c.duelRule[7]) {
  853. for (int p = 0; p < c.PRAYER.length; p++) { // reset prayer glows
  854. c.prayerActive[p] = false;
  855. c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);
  856. }
  857. c.headIcon = -1;
  858. c.getPA().requestUpdates();
  859. }
  860. if (c.duelRule[11]) {
  861. c.getItems().removeItem(c.playerEquipment[0], 0);
  862. }
  863. if (c.duelRule[12]) {
  864. c.getItems().removeItem(c.playerEquipment[1], 1);
  865. }
  866. if (c.duelRule[13]) {
  867. c.getItems().removeItem(c.playerEquipment[2], 2);
  868. }
  869. if (c.duelRule[14]) {
  870. c.getItems().removeItem(c.playerEquipment[3], 3);
  871. }
  872. if (c.duelRule[15]) {
  873. c.getItems().removeItem(c.playerEquipment[4], 4);
  874. }
  875. if (c.duelRule[16]) {
  876. c.getItems().removeItem(c.playerEquipment[5], 5);
  877. }
  878. if (c.duelRule[17]) {
  879. c.getItems().removeItem(c.playerEquipment[7], 7);
  880. }
  881. if (c.duelRule[18]) {
  882. c.getItems().removeItem(c.playerEquipment[9], 9);
  883. }
  884. if (c.duelRule[19]) {
  885. c.getItems().removeItem(c.playerEquipment[10], 10);
  886. }
  887. if (c.duelRule[20]) {
  888. c.getItems().removeItem(c.playerEquipment[12], 12);
  889. }
  890. if (c.duelRule[21]) {
  891. c.getItems().removeItem(c.playerEquipment[13], 13);
  892. }
  893. c.duelStatus = 5;
  894. c.getPA().removeAllWindows();
  895. c.specAmount = 10;
  896. c.getItems().addSpecialBar(c.playerEquipment[Player.playerWeapon]);
  897.  
  898. if (c.duelRule[8]) {
  899. if (c.duelRule[1]) {
  900. c.getPA().movePlayer(c.duelTeleX, c.duelTeleY, 0);
  901. } else {
  902. c.getPA().movePlayer(3366 + Misc.random(12),
  903. 3246 + Misc.random(6), 0);
  904. }
  905. } else {
  906. if (c.duelRule[1]) {
  907. c.getPA().movePlayer(c.duelTeleX, c.duelTeleY, 0);
  908. } else {
  909. c.getPA().movePlayer(3335 + Misc.random(12),
  910. 3246 + Misc.random(6), 0);
  911. }
  912. }
  913.  
  914. c.getPA().createPlayerHints(10, o.playerId);
  915. c.getPA().showOption(3, 0, "Attack", 1);
  916. for (int i = 0; i < 20; i++) {
  917. c.playerLevel[i] = c.getPA().getLevelForXP(c.playerXP[i]);
  918. c.getPA().refreshSkill(i);
  919. }
  920. for (GameItem item : o.getTradeAndDuel().stakedItems) {
  921. otherStakedItems.add(new GameItem(item.id, item.amount));
  922. }
  923. c.getPA().requestUpdates();
  924. }
  925.  
  926. public void duelVictory() {
  927. Client o = (Client) PlayerHandler.players[c.duelingWith];
  928. if (o != null) {
  929. c.getPA().sendFrame126("" + o.combatLevel, 6839);
  930. c.getPA().sendFrame126(o.playerName, 6840);
  931. o.duelStatus = 0;
  932. } else {
  933. c.getPA().sendFrame126("", 6839);
  934. c.getPA().sendFrame126("", 6840);
  935. }
  936. c.duelStatus = 6;
  937. c.getCombat().resetPrayers();
  938. for (int i = 0; i < 20; i++) {
  939. c.playerLevel[i] = c.getPA().getLevelForXP(c.playerXP[i]);
  940. c.getPA().refreshSkill(i);
  941. }
  942. c.getPA().refreshSkill(3);
  943. duelRewardInterface();
  944. c.getPA().showInterface(6733);
  945. c.getPA().movePlayer(
  946. Config.DUELING_RESPAWN_X
  947. + (Misc.random(Config.RANDOM_DUELING_RESPAWN)),
  948. Config.DUELING_RESPAWN_Y
  949. + (Misc.random(Config.RANDOM_DUELING_RESPAWN)), 0);
  950. c.getPA().requestUpdates();
  951. c.getPA().showOption(3, 0, "Challenge", 3);
  952. c.getPA().createPlayerHints(10, -1);
  953. c.canOffer = true;
  954. c.duelSpaceReq = 0;
  955. c.duelingWith = 0;
  956. c.getCombat().resetPlayerAttack();
  957. c.duelRequested = false;
  958. }
  959.  
  960. public void duelRewardInterface() {
  961. synchronized (c) {
  962. c.getOutStream().createFrameVarSizeWord(53);
  963. c.getOutStream().writeWord(6822);
  964. c.getOutStream().writeWord(otherStakedItems.toArray().length);
  965. for (GameItem item : otherStakedItems) {
  966. if (item.amount > 254) {
  967. c.getOutStream().writeByte(255);
  968. c.getOutStream().writeDWord_v2(item.amount);
  969. } else {
  970. c.getOutStream().writeByte(item.amount);
  971. }
  972. if (item.id > Config.ITEM_LIMIT || item.id < 0) {
  973. item.id = Config.ITEM_LIMIT;
  974. }
  975. c.getOutStream().writeWordBigEndianA(item.id + 1);
  976. }
  977. c.getOutStream().endFrameVarSizeWord();
  978. c.flushOutStream();
  979. }
  980. }
  981.  
  982. public void claimStakedItems() {
  983. for (GameItem item : otherStakedItems) {
  984. if (item.id > 0 && item.amount > 0) {
  985. if (Item.itemStackable[item.id]) {
  986. if (!c.getItems().addItem(item.id, item.amount)) {
  987. Server.itemHandler.createGroundItem(c, item.id,
  988. c.getX(), c.getY(), item.amount, c.getId());
  989. }
  990. } else {
  991. int amount = item.amount;
  992. for (int a = 1; a <= amount; a++) {
  993. if (!c.getItems().addItem(item.id, 1)) {
  994. Server.itemHandler.createGroundItem(c, item.id,
  995. c.getX(), c.getY(), 1, c.getId());
  996. }
  997. }
  998. }
  999. }
  1000. }
  1001. for (GameItem item : stakedItems) {
  1002. if (item.id > 0 && item.amount > 0) {
  1003. if (Item.itemStackable[item.id]) {
  1004. if (!c.getItems().addItem(item.id, item.amount)) {
  1005. Server.itemHandler.createGroundItem(c, item.id,
  1006. c.getX(), c.getY(), item.amount, c.getId());
  1007. }
  1008. } else {
  1009. int amount = item.amount;
  1010. for (int a = 1; a <= amount; a++) {
  1011. if (!c.getItems().addItem(item.id, 1)) {
  1012. Server.itemHandler.createGroundItem(c, item.id,
  1013. c.getX(), c.getY(), 1, c.getId());
  1014. }
  1015. }
  1016. }
  1017. }
  1018. }
  1019. resetDuel();
  1020. resetDuelItems();
  1021. c.duelStatus = 0;
  1022. }
  1023.  
  1024. public void declineDuel() {
  1025. c.getPA().removeAllWindows();
  1026. c.canOffer = true;
  1027. c.duelStatus = 0;
  1028. c.duelingWith = 0;
  1029. c.duelSpaceReq = 0;
  1030. c.duelRequested = false;
  1031. for (GameItem item : stakedItems) {
  1032. if (item.amount < 1)
  1033. continue;
  1034. if (Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
  1035. c.getItems().addItem(item.id, item.amount);
  1036. } else {
  1037. c.getItems().addItem(item.id, 1);
  1038. }
  1039. }
  1040. stakedItems.clear();
  1041. for (int i = 0; i < c.duelRule.length; i++) {
  1042. c.duelRule[i] = false;
  1043. }
  1044. }
  1045.  
  1046. public void resetDuel() {
  1047. c.getPA().showOption(3, 0, "Challenge", 3);
  1048. c.headIconHints = 0;
  1049. for (int i = 0; i < c.duelRule.length; i++) {
  1050. c.duelRule[i] = false;
  1051. }
  1052. c.getPA().createPlayerHints(10, -1);
  1053. c.duelStatus = 0;
  1054. c.canOffer = true;
  1055. c.duelSpaceReq = 0;
  1056. c.duelingWith = 0;
  1057. c.getPA().requestUpdates();
  1058. c.getCombat().resetPlayerAttack();
  1059. c.duelRequested = false;
  1060. }
  1061.  
  1062. public void resetDuelItems() {
  1063. stakedItems.clear();
  1064. otherStakedItems.clear();
  1065. }
  1066.  
  1067. public void changeDuelStuff() {
  1068. Client o = (Client) PlayerHandler.players[c.duelingWith];
  1069. if (o == null) {
  1070. return;
  1071. }
  1072. o.duelStatus = 1;
  1073. c.duelStatus = 1;
  1074. o.getPA().sendFrame126("", 6684);
  1075. c.getPA().sendFrame126("", 6684);
  1076. }
  1077.  
  1078. public void selectRule(int i) { // rules
  1079. Client o = (Client) PlayerHandler.players[c.duelingWith];
  1080. if (o == null) {
  1081. return;
  1082. }
  1083. if (!c.canOffer)
  1084. return;
  1085. changeDuelStuff();
  1086. o.duelSlot = c.duelSlot;
  1087. if (i >= 11 && c.duelSlot > -1) {
  1088. if (c.playerEquipment[c.duelSlot] > 0) {
  1089. if (!c.duelRule[i]) {
  1090. c.duelSpaceReq++;
  1091. } else {
  1092. c.duelSpaceReq--;
  1093. }
  1094. }
  1095. if (o.playerEquipment[o.duelSlot] > 0) {
  1096. if (!o.duelRule[i]) {
  1097. o.duelSpaceReq++;
  1098. } else {
  1099. o.duelSpaceReq--;
  1100. }
  1101. }
  1102. }
  1103.  
  1104. if (i >= 11) {
  1105. if (c.getItems().freeSlots() < (c.duelSpaceReq)
  1106. || o.getItems().freeSlots() < (o.duelSpaceReq)) {
  1107. c.sendMessage("You or your opponent don't have the required space to set this rule.");
  1108. if (c.playerEquipment[c.duelSlot] > 0) {
  1109. c.duelSpaceReq--;
  1110. }
  1111. if (o.playerEquipment[o.duelSlot] > 0) {
  1112. o.duelSpaceReq--;
  1113. }
  1114. return;
  1115. }
  1116. }
  1117.  
  1118. if (!c.duelRule[i]) {
  1119. c.duelRule[i] = true;
  1120. c.duelOption += c.DUEL_RULE_ID[i];
  1121. } else {
  1122. c.duelRule[i] = false;
  1123. c.duelOption -= c.DUEL_RULE_ID[i];
  1124. }
  1125.  
  1126. c.getPA().sendFrame87(286, c.duelOption);
  1127. o.duelOption = c.duelOption;
  1128. o.duelRule[i] = c.duelRule[i];
  1129. o.getPA().sendFrame87(286, o.duelOption);
  1130.  
  1131. if (c.duelRule[8]) {
  1132. if (c.duelRule[1]) {
  1133. c.duelTeleX = 3366 + Misc.random(12);
  1134. o.duelTeleX = c.duelTeleX - 1;
  1135. c.duelTeleY = 3246 + Misc.random(6);
  1136. o.duelTeleY = c.duelTeleY;
  1137. }
  1138. } else {
  1139. if (c.duelRule[1]) {
  1140. c.duelTeleX = 3335 + Misc.random(12);
  1141. o.duelTeleX = c.duelTeleX - 1;
  1142. c.duelTeleY = 3246 + Misc.random(6);
  1143. o.duelTeleY = c.duelTeleY;
  1144. }
  1145. }
  1146.  
  1147. }
  1148.  
  1149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement