Guest User

Untitled

a guest
Aug 7th, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.58 KB | None | 0 0
  1. public class TradeHandler {
  2. private Client client;
  3. private Trade currentTrade = null;
  4.  
  5. public void tradeItem(int itemID, int fromSlot, int amount) {
  6. if (stage != 1 || fromSlot < 0 || itemID < 0) {
  7. return;
  8. }
  9. for (int id : Config.ITEM_TRADEABLE) {
  10. if (itemID == id) {
  11. client.sendMessage("You can't trade this item.");
  12. return;
  13. }
  14. }
  15. if (amount > client.playerItemsN[fromSlot]) {// if amount greater than amount in slot.
  16. amount = client.playerItemsN[fromSlot];
  17. }
  18. if (amount < 0 || itemID == (client.playerItems[fromSlot] - 1)) {// if no amount or item isn't in slot
  19. return;
  20. }
  21. boolean isInTrade = false; // checking for item in trade
  22. for (int i = 0; i < offer.length; i++) {// scan the offer list
  23. if (offer[i] == client.playerItems[fromSlot] &&// add the check if item in slot is above -1 *before* the two arrays.
  24. (Item.itemStackable[(client.playerItems[fromSlot] - 1)] || Item.itemIsNote[(client.playerItems[fromSlot] - 1)])) {//checks for notes/stackables.
  25. // I combined the two if statements as there was no need for them to be seperate
  26. offerN[i] += amount;
  27. isInTrade = true; // item is in trade
  28. System.out.println(offerN + "");
  29. break;
  30. }
  31. }
  32. if (!isInTrade) {
  33. for (int i = 0; i < offer.length; i++) {
  34. if (offer[i] <= 0) {
  35. offer[i] = client.playerItems[fromSlot];
  36. offerN[i] = amount;
  37. break;
  38. }
  39. }
  40. }
  41. client.playerItemsN[fromSlot] -= amount;
  42. if (client.playerItemsN[fromSlot] < 1) {
  43. client.playerItems[fromSlot] = 0;
  44. }
  45. resetMyItems(3415);
  46. Client other = getOther();
  47. if (other != null) {
  48. other.getTradeHandler().resetOtherItems(3416);
  49. }
  50. if (accepted || other.getTradeHandler().accepted()) {
  51. accepted = false;
  52. other.getTradeHandler().setAccepted(false);
  53. client.getPA().sendFrame126("", 3431);
  54. if (other != null) {
  55. other.getPA().sendFrame126("", 3431);
  56. }
  57. }
  58. client.getItems().resetItems(3322);
  59. }
  60.  
  61. public void fromTrade(int itemID, int fromSlot, int amount) {
  62. if (stage == 2)
  63. return;
  64. if (amount > 0 && (itemID + 1) == offer[fromSlot]) {
  65. if (amount > offerN[fromSlot]) {
  66. amount = offerN[fromSlot];
  67. }
  68. client.getItems().addItem(offer[fromSlot] - 1, amount);
  69. if (amount == offerN[fromSlot]) {
  70. offer[fromSlot] = 0;
  71. }
  72. offerN[fromSlot] -= amount;
  73. resetMyItems(3415);
  74. Client other = getOther();
  75. if (other != null) {
  76. other.getTradeHandler().resetOtherItems(3416);
  77. }
  78. if (accepted || other.getTradeHandler().accepted()) {
  79. accepted = false;
  80. other.getTradeHandler().setAccepted(false);
  81. client.getPA().sendFrame126("", 3431);
  82. if (other != null) {
  83. other.getPA().sendFrame126("", 3431);
  84. }
  85. }
  86. client.getItems().resetItems(3322);
  87. }
  88. }
  89.  
  90. public TradeHandler(Client client) {
  91. this.client = client;
  92. }
  93.  
  94. public void requestTrade(Client otherClient) {
  95. if (Server.UpdateServer) {
  96. client.sendMessage("You can't trade right now, the server is about to update.");
  97. return;
  98. }
  99. if (client.duelSafety) {
  100. client.sendMessage("Please re-log before doing this.");
  101. return;
  102. }
  103. if (client.distanceToPoint(otherClient.getX(), otherClient.getY()) > 2) {
  104. client.sendMessage("Please move closer to the person you are trying to trade.");
  105. return;
  106. }
  107. if (otherClient.getTradeHandler().getCurrentTrade() != null) {
  108. if (otherClient.getTradeHandler().getCurrentTrade().isOpen()) {
  109. client.sendMessage(otherClient.playerName + " is busy right now.");
  110. return;
  111. }
  112. }
  113.  
  114. //if (client.connectedFrom.equals(otherClient.connectedFrom)) {
  115. //client.sendMessage("You can't trade a person on your own network.");
  116. //return;
  117. //}
  118.  
  119. if (currentTrade != null) {
  120. if (currentTrade.getEstablisher() == otherClient) {
  121. answerTrade(otherClient);
  122. return;
  123. } else {
  124. cancelCurrentTrade();
  125. }
  126. }
  127. currentTrade = new Trade(client, otherClient);
  128. otherClient.getTradeHandler().setCurrentTrade(currentTrade);
  129. otherClient.sendMessage(client.playerName + ":tradereq:");
  130. client.sendMessage("Sending trade request...");
  131. }
  132.  
  133. public int stage = 0;
  134. public boolean accepted = false;
  135.  
  136. public void answerTrade(Client otherClient) {
  137. if (Server.UpdateServer) {
  138. client.sendMessage("You can't trade when the server is about to update.");
  139. return;
  140. }
  141. if (!client.withinDistance(otherClient)) {
  142. return;
  143. }
  144. if (currentTrade == null) {
  145. requestTrade(otherClient);
  146. } else {
  147. if (currentTrade.isOpen()) {
  148. cancelCurrentTrade();
  149. requestTrade(otherClient);
  150. } else {
  151. currentTrade.setOpen(true);
  152. client.getPA().sendFrame248(3323, 3321);
  153. client.getItems().resetItems(3322);
  154. resetMyItems(3415);
  155. resetOtherItems(3416);
  156. client.getPA().sendFrame126("TradeHandler With: " + otherClient.playerName, 3417);
  157. client.getPA().sendFrame126("", 3431);
  158. otherClient.getPA().sendFrame248(3323, 3321);
  159. otherClient.getItems().resetItems(3322);
  160. otherClient.getTradeHandler().resetMyItems(3415);
  161. otherClient.getTradeHandler().resetOtherItems(3416);
  162. otherClient.getPA().sendFrame126("TradeHandler With: " + client.playerName, 3417);
  163. otherClient.getPA().sendFrame126("", 3431);
  164. accepted = false;
  165. PlayerSave.saveGame((Client) client);
  166. PlayerSave.saveGame((Client) otherClient);
  167. client.getTradeHandler().stage = 1;
  168. otherClient.getTradeHandler().stage = 1;
  169.  
  170. }
  171. }
  172. }
  173.  
  174. private int[] offer = new int[28];
  175. private int[] offerN = new int[28];
  176.  
  177. public void resetMyItems(int frame) {
  178. client.outStream.createFrameVarSizeWord(53);
  179. client.outStream.writeWord(frame);
  180. client.outStream.writeWord(offer.length);
  181. for (int i = 0; i < offer.length; i++) {
  182. if (offerN[i] > 254) {
  183. client.outStream.writeByte(255);
  184. client.outStream.writeDWord_v2(offerN[i]);
  185. } else {
  186. client.outStream.writeByte(offerN[i]);
  187. }
  188. client.outStream.writeWordBigEndianA(offer[i]);
  189. }
  190. client.outStream.endFrameVarSizeWord();
  191. }
  192.  
  193. public Client getOther() {
  194. if (currentTrade == null) {
  195. return null;
  196. }
  197. Client other = null;
  198. ;
  199. if (currentTrade.getReceiver() != client) {
  200. other = currentTrade.getReceiver();
  201. }
  202. if (currentTrade.getEstablisher() != client) {
  203. other = currentTrade.getEstablisher();
  204. }
  205. return other;
  206. }
  207.  
  208. public void resetOtherItems(int frame) {
  209. Client other = getOther();
  210. if (other == null)
  211. return;
  212. int[] offer = other.getTradeHandler().getOffer();
  213. int[] offerN = other.getTradeHandler().getOfferN();
  214. client.outStream.createFrameVarSizeWord(53);
  215. client.outStream.writeWord(frame);
  216. client.outStream.writeWord(offer.length);
  217. for (int i = 0; i < offer.length; i++) {
  218. if (offerN[i] > 254) {
  219. client.outStream.writeByte(255);
  220. client.outStream.writeDWord_v2(offerN[i]);
  221. } else {
  222. client.outStream.writeByte(offerN[i]);
  223. }
  224. client.outStream.writeWordBigEndianA(offer[i]);
  225. }
  226. client.outStream.endFrameVarSizeWord();
  227. }
  228.  
  229. public int[] getOffer() {
  230. return offer;
  231. }
  232.  
  233. public int[] getOfferN() {
  234. return offerN;
  235. }
  236.  
  237. public void decline() {
  238. Client other = getOther();
  239. if (other != null) {
  240. other.sendMessage(client.playerName + " has declined the trade.");
  241. other.getTradeHandler().setStage(0);
  242. }
  243. client.sendMessage("You decline the trade.");
  244. client.getTradeHandler().setStage(0);
  245. cancelCurrentTrade();
  246. }
  247.  
  248. public void cancelCurrentTrade() {
  249. if (currentTrade.isOpen()) {
  250. currentTrade.getReceiver().getPA().removeAllWindows();
  251. currentTrade.getEstablisher().getPA().removeAllWindows();
  252. currentTrade.getReceiver().getTradeHandler().transferOfferToInventory();
  253. currentTrade.getEstablisher().getTradeHandler().transferOfferToInventory();
  254. }
  255. if (currentTrade.getReceiver() != client) {
  256. currentTrade.getReceiver().getTradeHandler().setCurrentTrade(null);
  257. currentTrade.getReceiver().getTradeHandler().setAccepted(false);
  258. }
  259. if (currentTrade.getEstablisher() != client) {
  260. currentTrade.getEstablisher().getTradeHandler().setCurrentTrade(null);
  261. currentTrade.getEstablisher().getTradeHandler().setAccepted(false);
  262. }
  263. if (currentTrade.getReceiver().getTradeHandler().client != null) {
  264. currentTrade.getReceiver().getTradeHandler().setStage(0);
  265. }
  266. if (currentTrade.getEstablisher().getTradeHandler().client != null) {
  267. currentTrade.getEstablisher().getTradeHandler().setStage(0);
  268. }
  269.  
  270. currentTrade = null;
  271. accepted = false;
  272. }
  273.  
  274. public void transferOfferToInventory() {
  275. Client other = getOther();
  276. if (other == null) {
  277. return;
  278. }
  279. for (int i = 0; i < offer.length; i++) {
  280. if (offer[i] == 0)
  281. continue;
  282.  
  283. client.getItems().addItem(offer[i] - 1, offerN[i]);
  284. offer[i] = 0;
  285. offerN[i] = 0;
  286. }
  287. }
  288.  
  289. public Trade getCurrentTrade() {
  290. return currentTrade;
  291. }
  292.  
  293. public void setCurrentTrade(Trade currentTrade) {
  294. this.currentTrade = currentTrade;
  295. }
  296.  
  297. public int itemsTraded() {
  298. int itemsTraded = 0;
  299. for (int i = 0; i < offer.length; i++) {
  300. if (offer[i] != 0)
  301. itemsTraded++;
  302. }
  303. return itemsTraded;
  304. }
  305.  
  306. public void acceptStage1() {
  307. if (stage != 1)
  308. return;
  309. if (currentTrade != null && currentTrade.isOpen()) {
  310. Client other = getOther();
  311. if (other == null)
  312. return;
  313. if (itemsTraded() > other.getItems().freeSlots()) {
  314. client.sendMessage("The other player doesn't have enough space left in their inventory.");
  315. return;
  316. }
  317. if (other.getTradeHandler().itemsTraded() > client.getItems().freeSlots()) {
  318. client.sendMessage("There is not enough space in your inventory.");
  319. return;
  320. }
  321. accepted = true;
  322.  
  323. if (!other.getTradeHandler().accepted()) {
  324. client.getPA().sendFrame126("Waiting for other player...", 3431);
  325. other.getPA().sendFrame126("Other player accepted.", 3431);
  326. } else {
  327. client.getPA().sendFrame248(3443, 3213);
  328. client.getItems().resetItems(3214);
  329. other.getPA().sendFrame248(3443, 3213);
  330. other.getItems().resetItems(3214);
  331. accepted = false;
  332. client.getTradeHandler().setStage(2);
  333. other.getTradeHandler().setStage(2);
  334. other.getTradeHandler().setAccepted(false);
  335. client.getPA().sendFrame126("Are you sure you want to accept this trade?", 3535);
  336. other.getPA().sendFrame126("Are you sure you want to accept this trade?", 3535);
  337. sendOffer2();
  338. sendOtherOffer2();
  339. other.getTradeHandler().sendOffer2();
  340. other.getTradeHandler().sendOtherOffer2();
  341. }
  342. }
  343. }
  344.  
  345. public void sendOffer2() {
  346. StringBuilder trade = new StringBuilder();
  347. boolean empty = true;
  348. for (int i = 0; i < offer.length; i++) {
  349. String prefix = "";
  350. if (offer[i] > 0) {
  351. empty = false;
  352. if (offerN[i] >= 100 && offerN[i] < 1000000) {
  353. prefix = "@cya@" + (offerN[i] / 1000) + "K @whi@(" + offerN[i] + ")";
  354. } else if (offerN[i] >= 1000000) {
  355. prefix = "@gre@" + (offerN[i] / 1000000) + " million @whi@(" + offerN[i] + ")";
  356. } else {
  357. prefix = "" + offerN[i];
  358. }
  359. trade.append(client.getItems().getItemName(offer[i] - 1));
  360. trade.append(" x ");
  361. trade.append(prefix);
  362. trade.append("\\n");
  363. }
  364. }
  365. if (empty) {
  366. trade.append("Absolutely nothing!");
  367. }
  368. client.getPA().sendFrame126(trade.toString(), 3557);
  369. }
  370.  
  371. public void sendOtherOffer2() {
  372. Client other = getOther();
  373. if (other == null)
  374. return;
  375. int[] offer = other.getTradeHandler().getOffer();
  376. int[] offerN = other.getTradeHandler().getOfferN();
  377. StringBuilder trade = new StringBuilder();
  378. boolean empty = true;
  379. for (int i = 0; i < offer.length; i++) {
  380. String prefix = "";
  381. if (offer[i] > 0) {
  382. empty = false;
  383. if (offerN[i] >= 100 && offerN[i] < 1000000) {
  384. prefix = "@cya@" + (offerN[i] / 1000) + "K @whi@(" + offerN[i] + ")";
  385. } else if (offerN[i] >= 1000000) {
  386. prefix = "@gre@" + (offerN[i] / 1000000) + " million @whi@(" + offerN[i] + ")";
  387. } else {
  388. prefix = "" + offerN[i];
  389. }
  390. trade.append(client.getItems().getItemName((offer[i] - 1)));
  391. trade.append(" x ");
  392. trade.append(prefix);
  393. trade.append("\\n");
  394. }
  395. }
  396. if (empty) {
  397. trade.append("Absolutely nothing!");
  398. }
  399. client.getPA().sendFrame126(trade.toString(), 3558);
  400. }
  401.  
  402. public void acceptStage2() {
  403. if (stage != 2)
  404. return;
  405. if (currentTrade != null && currentTrade.isOpen()) {
  406. Client other = getOther();
  407. if (other == null)
  408. return;
  409.  
  410. if (!other.getTradeHandler().accepted()) {
  411. client.getPA().sendFrame126("Waiting for other player...", 3535);
  412. other.getPA().sendFrame126("Other player accepted.", 3535);
  413. accepted = true;
  414. } else {
  415. for (int i = 0; i < offer.length; i++) {
  416. if (offer[i] == 0)
  417. continue;
  418. other.getItems().addItem(offer[i] - 1, offerN[i]);
  419. offer[i] = 0;
  420. offerN[i] = 0;
  421. }
  422. int[] offer = other.getTradeHandler().getOffer();
  423. int[] offerN = other.getTradeHandler().getOfferN();
  424. for (int i = 0; i < offer.length; i++) {
  425. if (offer[i] == 0)
  426. continue;
  427. client.getItems().addItem(offer[i] - 1, offerN[i]);
  428. offer[i] = 0;
  429. offerN[i] = 0;
  430. }
  431. cancelCurrentTrade();
  432. }
  433. }
  434. }
  435.  
  436. public boolean accepted() {
  437. return accepted;
  438. }
  439.  
  440. public void setAccepted(boolean accepted) {
  441. this.accepted = accepted;
  442. }
  443.  
  444. public int getStage() {
  445. return this.stage;
  446. }
  447.  
  448. public void setStage(int stage) {
  449. this.stage = stage;
  450. }
  451. }
Advertisement
Add Comment
Please, Sign In to add comment