Advertisement
Guest User

Untitled

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