Advertisement
Guest User

Trading.java (2006Redone)

a guest
Jun 29th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.06 KB | None | 0 0
  1. package redone.game.players;
  2.  
  3. import java.util.concurrent.CopyOnWriteArrayList;
  4.  
  5. import redone.Constants;
  6. import redone.event.CycleEvent;
  7. import redone.event.CycleEventContainer;
  8. import redone.event.CycleEventHandler;
  9. import redone.game.content.minigames.castlewars.CastleWars;
  10. import redone.game.items.GameItem;
  11. import redone.game.items.Item;
  12. import redone.game.items.ItemAssistant;
  13. import redone.game.items.impl.RareProtection;
  14. import redone.util.GameLogger;
  15. import redone.util.Misc;
  16.  
  17. public class Trading {
  18.  
  19. private final Player player;
  20.  
  21. public Trading(Player Client) {
  22. player = Client;
  23. }
  24.  
  25. /**
  26. * Trading
  27. **/
  28.  
  29. public CopyOnWriteArrayList<GameItem> offeredItems = new CopyOnWriteArrayList<GameItem>();
  30.  
  31. public void requestTrade(int id) {
  32. try {
  33. Client o = (Client) PlayerHandler.players[id];
  34. if (id == player.playerId) {
  35. return;
  36. }
  37. player.tradeWith = id;
  38. /*if (c.connectedFrom.equals(o.connectedFrom)) {
  39. c.getActionSender().sendMessage("You cannot trade your own IP.");
  40. return;
  41. }*/
  42. if (!CastleWars.deleteCastleWarsItems(player, id)) {
  43. return;
  44. }
  45. if (!player.inTrade && o.tradeRequested && o.tradeWith == player.playerId && player.playerIsBusy() == false && o.playerIsBusy() == false) {
  46. player.getTrading().openTrade();
  47. o.getTrading().openTrade();
  48. } else if (!player.inTrade && player.playerIsBusy() == false && o.playerIsBusy() == false) {
  49.  
  50. player.tradeRequested = true;
  51. player.getActionSender().sendMessage("Sending trade request...");
  52. o.getActionSender()
  53. .sendMessage(player.playerName + ":tradereq:");
  54. } else if (player.playerIsBusy() == false && o.playerIsBusy() == true) {
  55. player.getActionSender().sendMessage("Other player is busy at the moment.");
  56. }
  57. } catch (Exception e) {
  58. Misc.println("Error requesting trade.");
  59. }
  60. }
  61.  
  62. public void openTrade() {
  63. Client o = (Client) PlayerHandler.players[player.tradeWith];
  64.  
  65. if (o == null) {
  66. return;
  67. }
  68. player.inTrade = true;
  69. player.tradeStatus = 1;
  70. player.tradeRequested = false;
  71. player.getItemAssistant().resetItems(3322);
  72. resetTItems(3415);
  73. resetOTItems(3416);
  74. String out = o.playerName;
  75.  
  76. if (o.checkRights(player.MODERATOR)) {
  77. out = "@cr1@" + out;
  78. } else if (o.isStaff(1)) {
  79. out = "@cr2@" + out;
  80. }
  81. player.getPlayerAssistant().sendFrame126(
  82. "Trading with: " + o.playerName + " who has @gre@"
  83. + o.getItemAssistant().freeSlots() + " free slots",
  84. 3417);
  85. player.getPlayerAssistant().sendFrame126("", 3431);
  86. player.getPlayerAssistant().sendFrame126(
  87. "Are you sure you want to make this trade?", 3535);
  88. player.getPlayerAssistant().sendFrame248(3323, 3321);
  89. }
  90.  
  91. public void resetTItems(int WriteFrame) {
  92. player.getOutStream().createFrameVarSizeWord(53);
  93. player.getOutStream().writeWord(WriteFrame);
  94. int len = offeredItems.toArray().length;
  95. int current = 0;
  96. player.getOutStream().writeWord(len);
  97. for (GameItem item : offeredItems) {
  98. if (item.amount > 254) {
  99. player.getOutStream().writeByte(255);
  100. player.getOutStream().writeDWord_v2(item.amount);
  101. } else {
  102. player.getOutStream().writeByte(item.amount);
  103. }
  104. player.getOutStream().writeWordBigEndianA(item.id + 1);
  105. current++;
  106. }
  107. if (current < 27) {
  108. for (int i = current; i < 28; i++) {
  109. player.getOutStream().writeByte(1);
  110. player.getOutStream().writeWordBigEndianA(-1);
  111. }
  112. }
  113. player.getOutStream().endFrameVarSizeWord();
  114. player.flushOutStream();
  115. }
  116.  
  117. public boolean fromTrade(int itemID, int fromSlot, int amount) {
  118. Client o = (Client) PlayerHandler.players[player.tradeWith];
  119. if (o == null) {
  120. return false;
  121. }
  122. try {
  123. if (!player.inTrade) {
  124. declineTrade();
  125. return false;
  126. }
  127. player.tradeConfirmed = false;
  128. o.tradeConfirmed = false;
  129. if (!Item.itemStackable[itemID]) {
  130. for (int a = 0; a < amount; a++) {
  131. for (GameItem item : offeredItems) {
  132. if (item.id == itemID) {
  133. if (!item.stackable) {
  134. offeredItems.remove(item);
  135. player.getItemAssistant().addItem(itemID, 1);
  136. o.getPlayerAssistant().sendFrame126(
  137. "Trading with: "
  138. + player.playerName
  139. + " who has @gre@"
  140. + player.getItemAssistant()
  141. .freeSlots()
  142. + " free slots", 3417);
  143. } else {
  144. if (item.amount > amount) {
  145. item.amount -= amount;
  146. player.getItemAssistant()
  147. .addItem(itemID, amount);
  148. o.getPlayerAssistant().sendFrame126(
  149. "Trading with: "
  150. + player.playerName
  151. + " who has @gre@"
  152. + player.getItemAssistant()
  153. .freeSlots()
  154. + " free slots", 3417);
  155. } else {
  156. amount = item.amount;
  157. offeredItems.remove(item);
  158. player.getItemAssistant()
  159. .addItem(itemID, amount);
  160. o.getPlayerAssistant().sendFrame126(
  161. "Trading with: "
  162. + player.playerName
  163. + " who has @gre@"
  164. + player.getItemAssistant()
  165. .freeSlots()
  166. + " free slots", 3417);
  167. }
  168. }
  169. break;
  170. }
  171. o.getPlayerAssistant().sendFrame126(
  172. "Trading with: " + player.playerName
  173. + " who has @gre@"
  174. + player.getItemAssistant().freeSlots()
  175. + " free slots", 3417);
  176. player.tradeConfirmed = false;
  177. o.tradeConfirmed = false;
  178. player.getItemAssistant().resetItems(3322);
  179. resetTItems(3415);
  180. o.getTrading().resetOTItems(3416);
  181. player.getPlayerAssistant().sendFrame126("", 3431);
  182. o.getPlayerAssistant().sendFrame126("", 3431);
  183. }
  184. }
  185. }
  186. for (GameItem item : offeredItems) {
  187. if (item.id == itemID) {
  188. if (!item.stackable) {
  189. } else {
  190. if (item.amount > amount) {
  191. item.amount -= amount;
  192. player.getItemAssistant().addItem(itemID, amount);
  193. o.getPlayerAssistant().sendFrame126(
  194. "Trading with: " + player.playerName
  195. + " who has @gre@"
  196. + player.getItemAssistant().freeSlots()
  197. + " free slots", 3417);
  198. } else {
  199. amount = item.amount;
  200. offeredItems.remove(item);
  201. player.getItemAssistant().addItem(itemID, amount);
  202. o.getPlayerAssistant().sendFrame126(
  203. "Trading with: " + player.playerName
  204. + " who has @gre@"
  205. + player.getItemAssistant().freeSlots()
  206. + " free slots", 3417);
  207. }
  208. }
  209. break;
  210. }
  211. }
  212.  
  213. o.getPlayerAssistant().sendFrame126(
  214. "Trading with: " + player.playerName + " who has @gre@"
  215. + player.getItemAssistant().freeSlots() + " free slots",
  216. 3417);
  217. player.tradeConfirmed = false;
  218. o.tradeConfirmed = false;
  219. player.getItemAssistant().resetItems(3322);
  220. resetTItems(3415);
  221. o.getTrading().resetOTItems(3416);
  222. player.getPlayerAssistant().sendFrame126("", 3431);
  223. o.getPlayerAssistant().sendFrame126("", 3431);
  224. } catch (Exception e) {
  225. }
  226. return true;
  227. }
  228.  
  229. public boolean tradeItem(int itemID, int fromSlot, int amount) {
  230. Client o = (Client) PlayerHandler.players[player.tradeWith];
  231. if (o == null) {
  232. return false;
  233. }
  234. if (amount >= 1000000000) {
  235. player.getActionSender().sendMessage("You can't possibly have that much of that item!");
  236. player.getItemAssistant().deleteItem(itemID, fromSlot, amount);
  237. return false;
  238. }
  239.  
  240. for (int i : Constants.ITEM_TRADEABLE) {
  241. if (i == itemID && player.isPlayer()) {
  242. player.getActionSender().sendMessage(
  243. "You can't trade this item.");
  244. return false;
  245. }
  246. }
  247. if (!RareProtection.doOtherDupe(player, itemID)) {
  248. return false;
  249. }
  250. player.tradeConfirmed = false;
  251. o.tradeConfirmed = false;
  252. if (!Item.itemStackable[itemID] && !Item.itemIsNote[itemID]) {
  253. for (int a = 0; a < amount && a < 28; a++) {
  254. if (player.getItemAssistant().playerHasItem(itemID, 1)) {
  255. offeredItems.add(new GameItem(itemID, 1));
  256. player.getItemAssistant().deleteItem(itemID,
  257. player.getItemAssistant().getItemSlot(itemID), 1);
  258. o.getPlayerAssistant().sendFrame126(
  259. "Trading with: " + player.playerName + " who has @gre@"
  260. + player.getItemAssistant().freeSlots()
  261. + " free slots", 3417);
  262. }
  263. }
  264. o.getPlayerAssistant().sendFrame126(
  265. "Trading with: " + player.playerName + " who has @gre@"
  266. + player.getItemAssistant().freeSlots() + " free slots",
  267. 3417);
  268. player.getItemAssistant().resetItems(3322);
  269. resetTItems(3415);
  270. o.getTrading().resetOTItems(3416);
  271. player.getPlayerAssistant().sendFrame126("", 3431);
  272. o.getPlayerAssistant().sendFrame126("", 3431);
  273. }
  274. if (player.getItemAssistant().getItemCount(itemID) < amount) {
  275. amount = player.getItemAssistant().getItemCount(itemID);
  276. if (amount == 0) {
  277. return false;
  278. }
  279. }
  280. if (!player.inTrade) {
  281. declineTrade();
  282. return false;
  283. }
  284.  
  285. if (Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
  286. boolean inTrade = false;
  287. for (GameItem item : offeredItems) {
  288. if (item.id == itemID) {
  289. inTrade = true;
  290. item.amount += amount;
  291. player.getItemAssistant().deleteItem2(itemID, amount);
  292. o.getPlayerAssistant().sendFrame126(
  293. "Trading with: " + player.playerName + " who has @gre@"
  294. + player.getItemAssistant().freeSlots()
  295. + " free slots", 3417);
  296. break;
  297. }
  298. }
  299.  
  300. if (!inTrade) {
  301. offeredItems.add(new GameItem(itemID, amount));
  302. player.getItemAssistant().deleteItem2(itemID, amount);
  303. o.getPlayerAssistant().sendFrame126(
  304. "Trading with: " + player.playerName + " who has @gre@"
  305. + player.getItemAssistant().freeSlots()
  306. + " free slots", 3417);
  307. }
  308. }
  309. o.getPlayerAssistant().sendFrame126(
  310. "Trading with: " + player.playerName + " who has @gre@"
  311. + player.getItemAssistant().freeSlots() + " free slots",
  312. 3417);
  313. player.getItemAssistant().resetItems(3322);
  314. resetTItems(3415);
  315. o.getTrading().resetOTItems(3416);
  316. player.getPlayerAssistant().sendFrame126("", 3431);
  317. o.getPlayerAssistant().sendFrame126("", 3431);
  318. return true;
  319. }
  320.  
  321. public void resetTrade() {
  322. offeredItems.clear();
  323. player.inTrade = false;
  324. player.tradeWith = 0;
  325. player.tradeConfirmed = false;
  326. player.tradeConfirmed2 = false;
  327. player.acceptedTrade = false;
  328. player.getPlayerAssistant().removeAllWindows();
  329. player.tradeResetNeeded = false;
  330. player.getPlayerAssistant().sendFrame126(
  331. "Are you sure you want to make this trade?", 3535);
  332. }
  333.  
  334. public void declineTrade() {
  335. player.tradeStatus = 0;
  336. declineTrade(true);
  337. }
  338.  
  339. public void declineTrade(boolean tellOther) {
  340. player.getPlayerAssistant().removeAllWindows();
  341. Client o = (Client) PlayerHandler.players[player.tradeWith];
  342. if (o == null) {
  343. return;
  344. }
  345.  
  346. if (tellOther) {
  347. o.getTrading().declineTrade(false);
  348. o.getTrading().player.getPlayerAssistant().removeAllWindows();
  349. }
  350.  
  351. for (GameItem item : offeredItems) {
  352. if (item.amount < 1) {
  353. continue;
  354. }
  355. if (item.stackable) {
  356. player.getItemAssistant().addItem(item.id, item.amount);
  357. } else {
  358. for (int i = 0; i < item.amount; i++) {
  359. player.getItemAssistant().addItem(item.id, 1);
  360. }
  361. }
  362. }
  363. player.tradeConfirmed = false;
  364. player.tradeConfirmed2 = false;
  365. offeredItems.clear();
  366. player.inTrade = false;
  367. player.tradeWith = 0;
  368. }
  369.  
  370. public void resetOTItems(int WriteFrame) {
  371. Client o = (Client) PlayerHandler.players[player.tradeWith];
  372. if (o == null) {
  373. return;
  374. }
  375. player.getOutStream().createFrameVarSizeWord(53);
  376. player.getOutStream().writeWord(WriteFrame);
  377. int len = o.getTrading().offeredItems.toArray().length;
  378. int current = 0;
  379. player.getOutStream().writeWord(len);
  380. for (GameItem item : o.getTrading().offeredItems) {
  381. if (item.amount > 254) {
  382. player.getOutStream().writeByte(255); // item's stack count. if
  383. // over 254, write byte
  384. // 255
  385. player.getOutStream().writeDWord_v2(item.amount);
  386. } else {
  387. player.getOutStream().writeByte(item.amount);
  388. }
  389. player.getOutStream().writeWordBigEndianA(item.id + 1); // item id
  390. current++;
  391. }
  392. if (current < 27) {
  393. for (int i = current; i < 28; i++) {
  394. player.getOutStream().writeByte(1);
  395. player.getOutStream().writeWordBigEndianA(-1);
  396. }
  397. }
  398. player.getOutStream().endFrameVarSizeWord();
  399. player.flushOutStream();
  400. }
  401.  
  402. public void confirmScreen() {
  403. Client o = (Client) PlayerHandler.players[player.tradeWith];
  404. if (o == null) {
  405. return;
  406. }
  407. if(!player.inTrade) {
  408. declineTrade();
  409. return;
  410. }
  411. player.getItemAssistant().resetItems(3214);
  412. String SendTrade = "Absolutely nothing!";
  413. String SendAmount = "";
  414. int Count = 0;
  415. for (GameItem item : offeredItems) {
  416. if (item.id > 0) {
  417. if (item.amount >= 1000 && item.amount < 1000000) {
  418. SendAmount = "@cya@" + item.amount / 1000 + "K @whi@("
  419. + Misc.format(item.amount) + ")";
  420. } else if (item.amount >= 1000000) {
  421. SendAmount = "@gre@" + item.amount / 1000000
  422. + " million @whi@(" + Misc.format(item.amount)
  423. + ")";
  424. } else {
  425. SendAmount = "" + Misc.format(item.amount);
  426. }
  427.  
  428. if (Count == 0) {
  429. SendTrade = ItemAssistant.getItemName(item.id);
  430. } else {
  431. SendTrade = SendTrade + "\\n"
  432. + ItemAssistant.getItemName(item.id);
  433. }
  434.  
  435. if (item.stackable) {
  436. SendTrade = SendTrade + " x " + SendAmount;
  437. }
  438. Count++;
  439. }
  440. }
  441.  
  442. player.getPlayerAssistant().sendFrame126(SendTrade, 3557);
  443. SendTrade = "Absolutely nothing!";
  444. SendAmount = "";
  445. Count = 0;
  446.  
  447. for (GameItem item : o.getTrading().offeredItems) {
  448. if (item.id > 0) {
  449. if (item.amount >= 1000 && item.amount < 1000000) {
  450. SendAmount = "@cya@" + item.amount / 1000 + "K @whi@("
  451. + Misc.format(item.amount) + ")";
  452. } else if (item.amount >= 1000000) {
  453. SendAmount = "@gre@" + item.amount / 1000000
  454. + " million @whi@(" + Misc.format(item.amount)
  455. + ")";
  456. } else {
  457. SendAmount = "" + Misc.format(item.amount);
  458. }
  459.  
  460. if (Count == 0) {
  461. SendTrade = ItemAssistant.getItemName(item.id);
  462. } else {
  463. SendTrade = SendTrade + "\\n"
  464. + ItemAssistant.getItemName(item.id);
  465. }
  466. if (item.stackable) {
  467. SendTrade = SendTrade + " x " + SendAmount;
  468. }
  469. Count++;
  470. }
  471. }
  472. player.getPlayerAssistant().sendFrame126(SendTrade, 3558);
  473. // TODO: find out what 197 does eee 3213
  474. player.getPlayerAssistant().sendFrame248(3443, 197);
  475. }
  476.  
  477. public void giveItems() {
  478. Client o = (Client) PlayerHandler.players[player.tradeWith];
  479. if (o == null) {
  480. return;
  481. }
  482. try {
  483. for (GameItem item : o.getTrading().offeredItems) {
  484. String itemName = ItemAssistant.getItemName(item.id);
  485. if (item.id > 0) {
  486. player.getItemAssistant().addItem(item.id, item.amount);
  487. if (player.isPlayer()) {
  488. GameLogger.writeLog(o.playerName, "tradesgave", o.playerName + " traded " + player.playerName + " and gave " + item.amount + " " + itemName + "");
  489. }
  490. }
  491. if (player.isPlayer()) {
  492. GameLogger.writeLog(player.playerName, "tradesrecieved", player.playerName + " was traded by " + o.playerName + " and recieved " + item.amount + " " + itemName + "");
  493. }
  494. }
  495. player.getPlayerAssistant().removeAllWindows();
  496. player.tradeResetNeeded = true;
  497. CycleEventHandler.getSingleton().addEvent(player, new CycleEvent() {
  498. @Override
  499. public void execute(CycleEventContainer container) {
  500. if (player.inTrade && player.tradeResetNeeded) {
  501. Client o = (Client) PlayerHandler.players[player.tradeWith];
  502. if (o != null) {
  503. if (o.tradeResetNeeded) {
  504. player.getTrading().resetTrade();
  505. o.getTrading().resetTrade();
  506. container.stop();
  507. } else {
  508. container.stop();
  509. }
  510. } else {
  511. container.stop();
  512. }
  513. } else {
  514. container.stop();
  515. }
  516. }
  517.  
  518. @Override
  519. public void stop() {
  520. player.tradeResetNeeded = false;
  521. }
  522. }, 1);
  523. } catch (Exception e) {
  524. }
  525. }
  526.  
  527. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement