Advertisement
Guest User

Listing

a guest
Sep 19th, 2019
471
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.62 KB | None | 0 0
  1. package ethos.model.content.tradingpost;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.File;
  6. import java.io.FileReader;
  7. import java.io.FileWriter;
  8. import java.io.IOException;
  9. import java.util.ArrayList;
  10. import java.util.LinkedList;
  11. import java.util.List;
  12.  
  13. import ethos.Config;
  14. import ethos.Server;
  15. import ethos.model.items.Item;
  16. import ethos.model.items.ItemAssistant;
  17. import ethos.model.items.ItemDefinition;
  18. import ethos.model.items.ItemList;
  19. import ethos.model.players.Player;
  20. import ethos.model.players.PlayerHandler;
  21. import ethos.model.players.PlayerSave;
  22. import ethos.util.Misc;
  23.  
  24. /**
  25. *
  26. * @author Nighel
  27. * @credits Nicholas
  28. *
  29. */
  30.  
  31. public class Listing {
  32.  
  33. // make true to preload all sales and keep them all in the cache
  34. private static final boolean PRELOAD_ALL = false;
  35.  
  36. // the next ID to be assigned to a sale, increment every time someone makes a new sale
  37. private static int NEXT_SALE_ID = 1;
  38.  
  39. // Number of sales to keep in memory, irrelevant if PRELOAD_SALES is true
  40. private static int CACHE_SIZE = 100;
  41.  
  42. // recently read sales kept in memory for faster access
  43. private static LinkedList<Sale> cache = new LinkedList<Sale>();
  44.  
  45.  
  46. /**
  47. * Loads the total sales on load of server
  48. */
  49.  
  50. public static void loadNextSale() {
  51. getFile("./data/tradingpost/sales/");
  52. }
  53.  
  54. /**
  55. * Counts how much sales there are
  56. * @param dirPath
  57. */
  58.  
  59. private static void getFile(String dirPath) {
  60. File f = new File(dirPath);
  61. File[] files = f.listFiles();
  62.  
  63. if (files != null)
  64. for (int i = 0; i < files.length; i++) {
  65. NEXT_SALE_ID = files.length+1;
  66. File file = files[i];
  67.  
  68. if (file.isDirectory()) {
  69. getFile(file.getAbsolutePath());
  70. }
  71. }
  72. }
  73.  
  74. /**
  75. * Loads the sales via player name
  76. * @param playerName - player his username
  77. * @return
  78. */
  79.  
  80. public static List<Sale> getSales(String playerName) {
  81. String line = "";
  82. LinkedList<Sale> sales = new LinkedList<Sale>();
  83. // read text file at /players/playerName.txt
  84. try {
  85. BufferedReader br = new BufferedReader(new FileReader("./Data/tradingpost/players/"+playerName+".txt"));
  86.  
  87. while((line = br.readLine()) != null) {
  88. int id = Integer.parseInt(line);
  89. if(sales != null)
  90. sales.add(getSale(id));
  91. }
  92.  
  93. br.close();
  94.  
  95. return sales;
  96. } catch(Exception e) {
  97. e.printStackTrace();
  98. return new LinkedList<Sale>();
  99. }
  100. }
  101.  
  102. /**
  103. * Loads the sales via item id
  104. * @param itemId
  105. * @return
  106. */
  107.  
  108. public static List<Sale> getSales(int itemId) {
  109. String line = "";
  110. LinkedList<Sale> sales = new LinkedList<Sale>();
  111. // read text file at /players/playerName.txt
  112. try {
  113. BufferedReader br = new BufferedReader(new FileReader("./Data/tradingpost/items/"+itemId+".txt"));
  114.  
  115. while((line = br.readLine()) != null) {
  116. int id = Integer.parseInt(line);
  117. if(sales != null)
  118. sales.add(getSale(id));
  119. }
  120.  
  121. br.close();
  122.  
  123. return sales;
  124. } catch(Exception e) {
  125. e.printStackTrace();
  126. return new LinkedList<Sale>();
  127. }
  128. }
  129.  
  130. /**
  131. * Gets the sale via the id
  132. * @param saleId - id of the sale
  133. * @return
  134. */
  135.  
  136. public static Sale getSale(int saleId) {
  137. String[] split;
  138. // Check cache for this sale
  139. for(Sale sale : cache)
  140. if(sale.getSaleId() == saleId)
  141. return sale;
  142.  
  143. // read text file at /sale/saleId.txt
  144. try {
  145. BufferedReader br = new BufferedReader(new FileReader("./data/tradingpost/sales/"+saleId+".txt"));
  146.  
  147. // read information
  148. split = br.readLine().split("\t");
  149. Sale sale = new Sale(saleId, split[0], Integer.parseInt(split[1]), Integer.parseInt(split[2]), Integer.parseInt(split[3]), Integer.parseInt(split[4]), Integer.parseInt(split[5]), Boolean.parseBoolean(split[6]));
  150.  
  151. // If the cache is full, remove the last Sale. Add this one to the beginning either way.
  152. if(!PRELOAD_ALL && cache.size() == CACHE_SIZE)
  153. cache.removeLast();
  154. cache.addFirst(sale);
  155.  
  156. br.close();
  157.  
  158. return sale;
  159. } catch(Exception e) {
  160. e.printStackTrace();
  161. return null;
  162. }
  163. }
  164.  
  165. /**
  166. * Opens up the first interface for the trading post.
  167. * And then loading all the data thats needed.
  168. * @param c
  169. */
  170.  
  171. public static void openPost(Player c, boolean soldItem, boolean openFirst) {
  172. if (!c.getMode().isTradingPermitted()) {
  173. c.sendMessage("You are not permitted to make use of this.");
  174. return;
  175. }
  176. resetEverything(c);
  177. emptyInterface(c, openFirst);
  178. c.getPA().showInterface(48600);
  179. if(soldItem) {
  180. String each = c.quantity > 1 ? "each" : "";
  181. c.sendMessage("[@red@Trading Post@bla@] You successfully list "+c.quantity+"x "+ItemAssistant.getItemName(c.item)+" for "+Misc.format(c.price)+" GP " + each);
  182. c.item = -1;
  183. c.uneditItem = -1;
  184. c.quantity = -1;
  185. c.price = -1;
  186. }
  187. loadPlayersListings(c);
  188. c.insidePost = true;
  189. loadHistory(c);
  190. }
  191.  
  192. /**
  193. * Makes all the listings show up for the player.
  194. * @param c
  195. */
  196.  
  197. public static void loadPlayersListings(Player c) {
  198. int start = 48788, id = 0, moneyCollectable = 0;
  199.  
  200. LinkedList<Sale> sales = (LinkedList<Sale>) getSales(c.playerName);
  201.  
  202. for(Sale sale : sales) {
  203. c.getPA().sendTradingPost(48847, sale.getId(), id, sale.getQuantity());
  204. id++;
  205. c.getPA().sendFrame126(ItemAssistant.getItemName(sale.getId()), start);
  206. start++;
  207. c.getPA().sendFrame126("" + zerosintomills(sale.getPrice()), start);
  208. start++;
  209. c.getPA().sendFrame126(sale.getTotalSold() + " / " + sale.getQuantity() , start);
  210. start += 2;
  211. moneyCollectable += (sale.getPrice() * sale.getLastCollectedAmount());
  212. }
  213. c.getPA().sendFrame126(Misc.format(moneyCollectable) + " GP", 48610);
  214. for (int k = id; k < 15; k++) {
  215. c.getPA().sendTradingPost(48847, -1, k, -1);
  216. }
  217. for(int i = start; i < 48850; i++) {
  218. c.getPA().sendFrame126("", i);
  219. }
  220. }
  221.  
  222. /**
  223. * Shows the last 10 latest sales you have done.
  224. * @param c
  225. */
  226.  
  227. public static void loadHistory(Player c) {
  228. for(int i = 0, start1 = 48636, start2 = 48637; i < c.saleItems.size(); i++) {
  229. //System.out.println("salesItems - " + c.saleItems.get(i).intValue());
  230. //System.out.println("saleAmount - " + c.saleAmount.get(i).intValue());
  231. //System.out.println("salePrice - " + c.salePrice.get(i).intValue());
  232. if(c.saleItems.get(i).intValue() > 0 && c.saleAmount.get(i).intValue() > 0 && c.salePrice.get(i).intValue() > 0) {
  233. String each = c.saleAmount.get(i).intValue() > 1 ? "each" : "coins";
  234. c.getPA().sendFrame126(c.saleAmount.get(i).intValue() + " x " + ItemAssistant.getItemName(c.saleItems.get(i).intValue()), start1);
  235. c.getPA().sendFrame126("sold for "+zerosintomills(c.salePrice.get(i).intValue())+" " + each, start2);
  236. start1 += 2;
  237. start2 += 2;
  238. }
  239. }
  240. }
  241.  
  242. /**
  243. * Opens up the selected item using offer 1/5/10/all/x
  244. * @param c
  245. * @param itemId
  246. * @param amount
  247. * @param p
  248. */
  249.  
  250. @SuppressWarnings("unused")
  251. public static void openSelectedItem(Player c, int itemId, int amount, int p) {
  252. //System.out.println("");
  253. if (!c.getItems().playerHasItem(itemId, amount)) {
  254. c.sendMessage("[@red@Trading Post@bla@] You don't have that many "+ItemAssistant.getItemName(itemId) + (amount > 1 ? "s" : "")+".");
  255. return;
  256. }
  257. if (ItemDefinition.forId(itemId) != null) {
  258. if (!ItemDefinition.forId(itemId).isTradable()) {
  259. c.sendMessage("[@red@Trading Post@bla@] You can't sell that item");
  260. return;
  261. }
  262. }
  263. for(int item : Config.NOT_SHAREABLE) {
  264. if(item == itemId) {
  265. c.sendMessage("[@red@Trading Post@bla@] You can't sell that item");
  266. return;
  267. }
  268. }
  269. if(itemId == 995) {
  270. c.sendMessage("[@red@Trading Post@bla@] You can't sell that item");
  271. return;
  272. }
  273. //if(c.uneditItem <= 0) - Caused a dupe if you changed items
  274. c.uneditItem = itemId;
  275. //Config.trade
  276. c.item = -1;
  277.  
  278. c.inSelecting = false;
  279. c.isListing = true;
  280. boolean noted = Item.itemIsNote[itemId];
  281. //boolean noted = ItemDefinition.forId(itemId).isNoteable();
  282. if(noted)
  283. itemId--;
  284.  
  285. c.item = itemId;
  286. c.quantity = amount;
  287. ItemList itemList = Server.itemHandler.ItemList[c.item];
  288. //c.price = p >= 1 ? p : (int) itemList.ShopValue; //c.getInventory().getItemshopValue(c.item);
  289. c.price = p >= 1 ? p : (int) ItemDefinition.forId(itemId).getValue();
  290. c.getPA().showInterface(48598);
  291. c.getPA().sendTradingPost(48962, itemId, 0, amount);
  292. c.getPA().sendFrame126(ItemAssistant.getItemName(itemId), 48963); //item name
  293. c.getPA().sendFrame126("Price (each): "+Misc.format(c.price)+"", 48964); //price each
  294. c.getPA().sendFrame126("Quantity: " + amount, 48965); //quantity
  295. //c.getPA().sendFrame(s, 48966); //guide
  296. //c.getPA().sendFrame(s, 48967); //listings
  297. }
  298.  
  299. /**
  300. * Writes every thing the the proper files.
  301. * @param c
  302. */
  303.  
  304. public static void confirmListing(Player c) {
  305.  
  306. if (c.uneditItem == -1) {
  307. if (c.debugMessage)
  308. c.sendMessage("Stopped");
  309. return;
  310. }
  311.  
  312. BufferedWriter sale_id;
  313. BufferedWriter item_id;
  314. BufferedWriter name;
  315. try {
  316. sale_id = new BufferedWriter(new FileWriter("./Data/tradingpost/sales/"+NEXT_SALE_ID+".txt", true));
  317. item_id = new BufferedWriter(new FileWriter("./Data/tradingpost/items/"+c.item+".txt", true));
  318. name = new BufferedWriter(new FileWriter("./Data/tradingpost/players/"+c.playerName+".txt", true));
  319.  
  320. sale_id.write(c.playerName + "\t" + c.item + "\t" + c.quantity + "\t0\t" + c.price + "\t0\t" + "false");
  321. sale_id.newLine();
  322.  
  323. item_id.write("" + NEXT_SALE_ID);
  324. item_id.newLine();
  325.  
  326. name.write("" + NEXT_SALE_ID);
  327. name.newLine();
  328.  
  329. //try {
  330. //CreateListing.getSingleton().createListing(NEXT_SALE_ID, c.item, c.getPA().getItemName(c.item), c.quantity, c.price, c.playerName, 0);
  331. //} catch (Exception e) {
  332. // e.printStackTrace();
  333. //}
  334. Sale sale = new Sale(NEXT_SALE_ID, c.playerName, c.item, c.quantity, 0, c.price, 0, false);
  335.  
  336. ++NEXT_SALE_ID;
  337.  
  338. if(!PRELOAD_ALL && cache.size() == CACHE_SIZE)
  339. cache.removeLast();
  340. cache.addFirst(sale);
  341.  
  342. sale_id.close();
  343. item_id.close();
  344. name.close();
  345. } catch (IOException e) {
  346. e.printStackTrace();
  347. }
  348. if (c.debugMessage)
  349. c.sendMessage("uneditedItem "+c.uneditItem+" - c.item "+c.item+" - quantity: "+c.quantity);
  350.  
  351. c.getItems().deleteItem2(c.uneditItem, c.quantity);
  352. openPost(c, true, false);
  353. PlayerSave.save(c);
  354. }
  355.  
  356. /**
  357. * Cancel a listing via its sale id
  358. * @param c
  359. * @param saleId
  360. */
  361.  
  362. public static void cancelListing(Player c, int id, int itemId) {
  363. if (id < 0 || itemId < 0)
  364. return;
  365. Sale sales = getSales(c.playerName).get(id);
  366. int leftOver = sales.getQuantity() - sales.getTotalSold(), saleItem = sales.getId();
  367. boolean stackable = Item.itemStackable[saleItem];
  368. boolean isNoted = Item.itemIsNote[saleItem];
  369. if(!stackable && !isNoted && leftOver > 1) {
  370. saleItem++;
  371. }
  372. if(sales.getId() == itemId) { //gg
  373. sales.setHasSold(true);
  374. save(sales);
  375. updateHistory(c, sales.getId(), sales.getTotalSold(), sales.getPrice());
  376. if(leftOver > 0) {
  377. if ((((c.getItems().freeSlots() >= 1) || c.getItems().playerHasItem(saleItem, 1)) && Item.itemIsNote[saleItem]) || ((c.getItems().freeSlots() > 0) && !Item.itemStackable[saleItem])) {
  378. c.getItems().addItem(saleItem, leftOver);
  379. c.sendMessage("[@red@Trading Post@bla@] You succesfully cancel the offer for "+leftOver+"x "+ItemAssistant.getItemName(sales.getId())+".");
  380. } else {// If inventory is full!
  381. c.getItems().addItemToBank(saleItem, leftOver);
  382. c.sendMessage("[@red@Trading Post@bla@] You succesfully cancel the offer for "+leftOver+"x "+ItemAssistant.getItemName(sales.getId())+".");
  383. c.sendMessage("[@red@Trading Post@bla@] You had no room so your "+leftOver+"x "+ItemAssistant.getItemName(sales.getId())+" was sent to your bank.");
  384. }
  385. }
  386. loadPlayersListings(c);
  387. PlayerSave.save(c);
  388. }
  389. }
  390.  
  391. /**
  392. * Collecting your money via the button
  393. * @param c
  394. */
  395.  
  396. public static void collectMoney(Player c) {
  397. LinkedList<Sale> sales = (LinkedList<Sale>) getSales(c.playerName);
  398. int moneyCollectable = 0;
  399. for(Sale sale : sales) {
  400. moneyCollectable += (sale.getPrice() * sale.getLastCollectedAmount());
  401. sale.setLastCollectedSold(0);
  402. save(sale);
  403. }
  404. c.getItems().addItem(995, moneyCollectable);
  405. c.sendMessage("[@red@Trading Post@bla@] You successfully collect "+Misc.format(moneyCollectable)+" coins from your coffer.");
  406. moneyCollectable = 0;
  407. c.getPA().sendFrame126(Misc.format(moneyCollectable) + " GP", 48610);
  408. PlayerSave.save(c);
  409. }
  410.  
  411. public static void save(Sale sale) {
  412. String line;
  413. String newLine = "";
  414. try {
  415. BufferedWriter writer = new BufferedWriter(new FileWriter("./data/tradingpost/sales/"+sale.getSaleId()+".txt"));
  416. writer.write(sale.getName() + "\t" + sale.getId() + "\t" + sale.getQuantity() + "\t" + sale.getTotalSold() + "\t" + sale.getPrice() + "\t" + sale.getLastCollectedAmount() + "\t" + sale.hasSold());
  417. writer.close();
  418. } catch (IOException e) {
  419. e.printStackTrace();
  420. }
  421.  
  422. if(sale.hasSold()) {
  423. if(sale.getLastCollectedAmount() > 0) {
  424. Player c = (Player) PlayerHandler.players[PlayerHandler.getPlayerID(sale.getName())];
  425. c.getItems().addItem(995, sale.getLastCollectedAmount() * sale.getPrice());
  426. sale.setLastCollectedSold(0);
  427. }
  428. try {
  429. /*try {
  430. if(sale.getTotalSold() != sale.getQuantity())
  431. CreateListing.getSingleton().updateListing(sale.getSaleId(), sale.getQuantity(), false);
  432. else
  433. CreateListing.getSingleton().updateListing(sale.getSaleId(), sale.getQuantity(), true);
  434. } catch (SQLException e) {
  435. e.printStackTrace();
  436. }*/
  437. BufferedReader read = new BufferedReader(new FileReader("./Data/tradingpost/players/"+sale.getName()+".txt"));
  438. while((line = read.readLine()) != null) {
  439. if(line.equals(Integer.toString(sale.getSaleId())))
  440. continue;
  441. newLine += line + System.getProperty("line.separator");
  442. }
  443. read.close();
  444. BufferedWriter write = new BufferedWriter(new FileWriter("./Data/tradingpost/players/"+sale.getName()+".txt"));
  445. write.write(newLine);
  446. write.close();
  447. newLine = "";
  448. read = new BufferedReader(new FileReader("./Data/tradingpost/items/"+sale.getId()+".txt"));
  449. while((line = read.readLine()) != null) {
  450. if(line.equals(Integer.toString(sale.getSaleId()))) continue;
  451. newLine += line + System.getProperty("line.separator");
  452. }
  453. read.close();
  454. write = new BufferedWriter(new FileWriter("./data/tradingpost/items/"+sale.getId()+".txt"));
  455. write.write(newLine);
  456. write.close();
  457. newLine = "";
  458. write = new BufferedWriter(new FileWriter("./data/tradingpost/sales/"+sale.getSaleId()+".txt"));
  459. newLine = sale.getName() + "\t" + sale.getId() + "\t" + sale.getQuantity() + "\t" + sale.getTotalSold() + "\t" + sale.getPrice() + "\t" + sale.getLastCollectedAmount() + "\t" + sale.hasSold();
  460. write.write(newLine);
  461. write.close();
  462. } catch (IOException e) {
  463. e.printStackTrace();
  464. }
  465. }
  466. }
  467.  
  468. /**
  469. * Displays the 6 sales based on pages and item name/player name and recent
  470. * @param sales
  471. * @param c
  472. */
  473.  
  474. public static void displayResults(List<Sale> sales, Player c) {
  475. List<Integer> result = new ArrayList<Integer>();
  476. int total = 0, skipped = 0, start = 48022;
  477. for(Sale sale : sales) {
  478. if(sale.hasSold() || sale.getTotalSold() == sale.getQuantity())
  479. continue;
  480. if(skipped < (c.pageId - 1) * 6) {
  481. skipped++;
  482. continue;
  483. }
  484. result.add(sale.getSaleId());
  485. c.getPA().sendTradingPost(48021, sale.getId(), total, sale.getQuantity() - sale.getTotalSold());
  486. c.getPA().sendFrame126(ItemAssistant.getItemName(sale.getId()), start);
  487. start++;
  488. String each = sale.getQuantity() - sale.getTotalSold() > 1 ? " each" : "";
  489. c.getPA().sendFrame126(Misc.format(sale.getPrice()) + each, start);
  490. start++;
  491. c.getPA().sendFrame126(sale.getName(), start);
  492. start++;
  493. c.getPA().sendFrame126(Integer.toString(sale.getTotalSold()), start);
  494. start++;
  495. total++;
  496. if(total == 6) {
  497. //System.out.println("Reached 6 recent sales");
  498. break;
  499. }
  500. }
  501. for (int k = total; k < 6; k++) {
  502. c.getPA().sendTradingPost(48021, -1, k, -1);
  503. }
  504. for(int i = start; i < 48046; i++) {
  505. c.getPA().sendFrame126("", i);
  506. }
  507. c.saleResults = result;
  508. }
  509.  
  510. /**
  511. * Loads the recent sales
  512. * @param c
  513. */
  514.  
  515. public static void loadRecent(Player c) {
  516. c.pageId = 0;
  517. c.searchId = 3;
  518. c.getPA().sendFrame126("Trading Post - Recent listings", 48019);
  519. c.getPA().showInterface(48000);
  520. List<Sale> sales = new LinkedList<Sale>();
  521. int total = 0;
  522.  
  523. for(int i = NEXT_SALE_ID - 1; i > 0; i--) {
  524. Sale sale = getSale(i);
  525. if(sale.hasSold())
  526. continue;
  527. total++;
  528. sales.add(sale);
  529. if(total == 60)
  530. break;
  531. }
  532. displayResults(sales, c);
  533. }
  534.  
  535. public static void buyListing(Player c, int slot, int amount) {
  536.  
  537. Sale sales = getSale(c.saleResults.get(slot));
  538.  
  539. if(sales.getQuantity() == sales.getTotalSold())
  540. return;
  541.  
  542. if(/*amount > sales.getQuantity() || */ (amount > sales.getQuantity() - sales.getTotalSold())) {
  543. c.sendMessage("[@red@Trading Post@bla@] There is not enough available to purchase this amount.");
  544. return;
  545. }
  546.  
  547.  
  548.  
  549. //if(sales.getQuantity() == sales.getTotalSold())
  550. //return;
  551.  
  552. if(sales.getName().equalsIgnoreCase(c.playerName)) {
  553. c.sendMessage("[@red@Trading Post@bla@] You cannot buy your own listings.");
  554. return;
  555. }
  556.  
  557. // if(amount > sales.getQuantity()) {
  558. // c.sendMessage("[@red@Trading Post@bla@] There is not enough available to purchase this amount.");
  559. // return;
  560. //}
  561. //amount = sales.getQuantity();
  562.  
  563. if(!c.getItems().playerHasItem(995, sales.getPrice() * amount)) {
  564. c.sendMessage("[@red@Trading Post@bla@] You need atleast "+Misc.format(sales.getPrice() * amount)+" coins to buy the "+amount+"x "+ItemAssistant.getItemName(sales.getId())+".");
  565. return;
  566. }
  567. int slotsNeeded = amount;
  568.  
  569. int saleItem = sales.getId();
  570.  
  571. if(amount > 1 && Item.itemIsNote[sales.getId()+1]) {
  572. saleItem++;
  573. }
  574.  
  575. if(c.getItems().freeSlots() < slotsNeeded && (!Item.itemIsNote[sales.getId()+1] && !Item.itemStackable[sales.getId()])) {
  576. c.sendMessage("[@red@Trading Post@bla@] You need atleast "+ slotsNeeded +" free slots to buy this.");
  577. return;
  578. }
  579.  
  580. c.getItems().deleteItem(995, sales.getPrice() * amount);
  581. c.getItems().addItem(saleItem, amount);
  582. c.sendMessage("[@red@Trading Post@bla@] You succesfully purchase "+ amount +"x "+ItemAssistant.getItemName(sales.getId())+".");
  583. c.getItems().resetItems(3214);
  584. PlayerSave.save(c);
  585.  
  586. c.sendMessage("saleId: " + sales.getSaleId());
  587.  
  588. c.sendMessage("collect: " + sales.getLastCollectedAmount());
  589. c.sendMessage("total sold: " + sales.getTotalSold());
  590.  
  591. sales.setLastCollectedSold(sales.getLastCollectedAmount() + amount);
  592. sales.setTotalSold(sales.getTotalSold() + amount);
  593.  
  594. c.sendMessage("collect 2: " + sales.getLastCollectedAmount());
  595. c.sendMessage("total sold 2: " + sales.getTotalSold());
  596. save(sales);
  597.  
  598. if(PlayerHandler.getPlayerID(sales.getName()) != -1) {
  599. Player seller = (Player) PlayerHandler.players[PlayerHandler.getPlayerID(sales.getName())];
  600. if(seller != null) {
  601. if(seller.playerName.equalsIgnoreCase(sales.getName())) {
  602. if(sales.getTotalSold() < sales.getQuantity())
  603. seller.sendMessage("[@red@Trading Post@bla@] You succesfully sold "+ amount +"x of your "+ItemAssistant.getItemName(sales.getId())+".");
  604. else
  605. seller.sendMessage("[@red@Trading Post@bla@] Finished selling your "+ItemAssistant.getItemName(sales.getId())+".");
  606.  
  607. PlayerSave.save(seller);
  608. if(seller.isListing) {
  609. loadPlayersListings(seller);
  610. }
  611. }
  612. }
  613. }
  614. loadRecent(c);
  615. }
  616.  
  617. /**
  618. * Loads the sales via playerName
  619. * @param c
  620. * @param playerName
  621. */
  622.  
  623. public static void loadPlayerName(Player c, String playerName) {
  624. c.lookup = playerName;
  625. c.searchId = 2;
  626. c.getPA().showInterface(48000);
  627. c.getPA().sendFrame126("Trading Post - Searching for player: " + playerName, 48019);
  628.  
  629. List<Sale> sales = new LinkedList<Sale>();
  630.  
  631. for(String s : new File("./Data/tradingpost/players/").list()) {
  632. s = s.substring(0, s.indexOf(".")).toLowerCase();
  633. if(s.contains(playerName.toLowerCase()))
  634. sales.addAll(getSales(s));
  635. }
  636.  
  637. displayResults(sales, c);
  638. }
  639.  
  640. /**
  641. * Loads the sales via itemName
  642. * @param c
  643. * @param itemName
  644. */
  645.  
  646. public static void loadItemName(Player c, String itemName) {
  647. c.lookup = itemName;
  648. itemName = itemName.replace("_"," ");
  649. c.searchId = 1;
  650. c.getPA().showInterface(48000);
  651. c.getPA().sendFrame126("Trading Post - Searching for item: " + itemName, 48019);
  652.  
  653. List<Integer> items = new LinkedList<Integer>();
  654. List<Sale> sales = new LinkedList<Sale>();
  655.  
  656. for(String s : new File("./data/tradingpost/items/").list())
  657. items.add(Integer.parseInt(s.substring(0, s.indexOf("."))));
  658.  
  659. for(int item : items) {
  660. //System.out.println("item: "+ItemAssistant.getItemName(item)+", itemName: " + itemName);
  661. if(ItemAssistant.getItemName(item).toLowerCase().contains(itemName.toLowerCase())) {
  662. sales.addAll(getSales(item));
  663. }
  664. }
  665.  
  666. displayResults(sales, c);
  667. }
  668.  
  669. /**
  670. * Resets all the necessary stuff;
  671. * @param c
  672. */
  673.  
  674. public static void resetEverything(Player c) {
  675. c.inSelecting = false;
  676. c.isListing = true;
  677. c.insidePost = false;
  678. c.setSidebarInterface(3, 3213);
  679. }
  680.  
  681. /**
  682. * Handles the opening of the interface for offering an item
  683. * @param c
  684. */
  685.  
  686. public static void openNewListing(Player c) {
  687. c.getPA().showInterface(48599);
  688. c.setSidebarInterface(3, 48500); // backpack tab
  689. for (int k = 0; k < 28; k++) {
  690. c.getPA().sendTradingPost(48501, c.playerItems[k]-1, k, c.playerItemsN[k]);
  691. }
  692. }
  693.  
  694. /*
  695. *
  696. * Handles the buttons of the interfaces
  697. *
  698. */
  699.  
  700. public static void postButtons(Player c, int button) {
  701. switch(button) {
  702. case 189237:
  703. if (!c.getMode().isTradingPermitted()) {
  704. c.sendMessage("You are not permitted to make use of this.");
  705. return;
  706. }
  707. int total = 0;
  708. LinkedList<Sale> sales = (LinkedList<Sale>) getSales(c.playerName);
  709.  
  710. for(@SuppressWarnings("unused") Sale sale : sales)
  711. total++;
  712. /* if(c.amDonated <= 9 && total >= 6) {
  713. c.sendMessage("[@red@Trading Post@bla@] You cannot have more then 6 listings as a regular player.");
  714. return;
  715. } else if(c.amDonated >= 10 && c.amDonated <= 149 && total >= 10) {
  716. c.sendMessage("[@red@Trading Post@bla@] You cannot have more then 10 listings as a low tier donator.");
  717. return;
  718. } else if(c.amDonated >= 150 && total >= 15) {
  719. c.sendMessage("[@red@Trading Post@bla@] You cannot have more then 15 listings.");
  720. return;
  721. }*/
  722. if(!c.inSelecting) {
  723. openNewListing(c);
  724. c.inSelecting = true;
  725. c.getPA().sendFrame106(3);
  726. } else {
  727. resetEverything(c);
  728. c.getPA().showInterface(48600);
  729. c.getPA().sendFrame106(3);
  730. }
  731. break;
  732.  
  733. case 59229: //Close
  734. case 187130:
  735. case 189218:
  736. c.getPA().closeAllWindows();
  737. resetEverything(c);
  738. break;
  739.  
  740. case 187227:
  741. loadRecent(c);
  742. break;
  743.  
  744. case 191072:
  745. if (!c.getMode().isTradingPermitted()) {
  746. c.sendMessage("You are not permitted to make use of this.");
  747. return;
  748. }
  749. synchronized (c) {
  750. c.outStream.createFrame(191);
  751. }
  752. c.xInterfaceId = 191072;
  753. break;
  754.  
  755. case 191075: // Removed quantity button
  756. if (!c.getMode().isTradingPermitted()) {
  757. c.sendMessage("You are not permitted to make use of this.");
  758. return;
  759. }
  760. synchronized (c) {
  761. c.outStream.createFrame(192);
  762. }
  763. c.xInterfaceId = 191075;
  764. break;
  765.  
  766. case 191078:
  767. if (!c.getMode().isTradingPermitted()) {
  768. c.sendMessage("You are not permitted to make use of this.");
  769. return;
  770. }
  771. confirmListing(c);
  772. break;
  773.  
  774. case 189223:
  775. if (!c.getMode().isTradingPermitted()) {
  776. c.sendMessage("You are not permitted to make use of this.");
  777. return;
  778. }
  779. collectMoney(c);
  780. break;
  781.  
  782. case 189234:
  783. if (!c.getMode().isTradingPermitted()) {
  784. c.sendMessage("You are not permitted to make use of this.");
  785. return;
  786. }
  787. loadRecent(c);
  788. break;
  789.  
  790. case 187133:
  791. if (!c.getMode().isTradingPermitted()) {
  792. c.sendMessage("You are not permitted to make use of this.");
  793. return;
  794. }
  795. openPost(c, false, false);
  796. break;
  797.  
  798. case 187136:
  799. if (!c.getMode().isTradingPermitted()) {
  800. c.sendMessage("You are not permitted to make use of this.");
  801. return;
  802. }
  803. if(c.pageId > 1)
  804. c.pageId--;
  805. //System.out.println("id: "+c.searchId+" lookup: " + c.lookup);
  806. switch(c.searchId) {
  807. case 1:
  808. loadItemName(c, c.lookup);
  809. break;
  810. case 2:
  811. loadPlayerName(c, c.lookup);
  812. break;
  813. case 3:
  814. loadRecent(c);
  815. break;
  816. }
  817. break;
  818.  
  819. case 187139:
  820. if (!c.getMode().isTradingPermitted()) {
  821. c.sendMessage("You are not permitted to make use of this.");
  822. return;
  823. }
  824. c.pageId++;
  825. //System.out.println("id: "+c.searchId+" lookup: " + c.lookup);
  826. switch(c.searchId) {
  827. case 1:
  828. loadItemName(c, c.lookup);
  829. break;
  830. case 2:
  831. loadPlayerName(c, c.lookup);
  832. break;
  833. case 3:
  834. loadRecent(c);
  835. break;
  836. }
  837. break;
  838. }
  839. }
  840.  
  841. /*
  842. *
  843. * This method makes it so it cleans out the history and my offers.
  844. * Incase you had a diffrent account with more listings.
  845. *
  846. */
  847.  
  848. public static void emptyInterface(Player c, boolean b) {
  849. for(int i = 0; i < 15; i++) {
  850. c.getPA().sendTradingPost(48847, -1, i, -1);
  851. }
  852. if(b) {
  853. for(int i = 48636; i < 48656; i++) {
  854. c.getPA().sendFrame126("", i);
  855. }
  856. }
  857. for(int i = 48787; i < 48847; i++) {
  858. c.getPA().sendFrame126("", i);
  859. }
  860. }
  861.  
  862. /*
  863. *
  864. * Turns the 100,000,000 into 100m etc.
  865. *
  866. */
  867.  
  868. private static String zerosintomills(int j) {
  869. if(j >= 0 && j < 1000)
  870. return String.valueOf(j);
  871. if(j >= 1000 && j < 10000000)
  872. return j / 1000 + "K";
  873. if(j >= 10000000 && j < 2147483647)
  874. return j / 1000000 + "M";
  875. return String.valueOf(j);
  876. }
  877.  
  878. private static void updateHistory(Player c, int itemId, int amount, int price) {
  879. //System.out.println("itemId - " + itemId);
  880. //System.out.println("amount - " + amount);
  881. //System.out.println("price - " + price);
  882. c.saleItems.add(0, itemId);
  883. c.saleItems.remove(c.saleItems.size()-1);
  884. c.saleAmount.add(0, amount);
  885. c.saleAmount.remove(c.saleAmount.size()-1);
  886. c.salePrice.add(0, price);
  887. c.salePrice.remove(c.salePrice.size()-1);
  888. loadHistory(c);
  889. }
  890.  
  891. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement