Advertisement
Guest User

AuctionManager

a guest
Feb 16th, 2021
446
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.23 KB | None | 0 0
  1. package net.sf.l2j.gameserver.model.actor.instance;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Map;
  5. import java.util.concurrent.ConcurrentHashMap;
  6.  
  7. import net.sf.l2j.commons.lang.StringUtil;
  8. import net.sf.l2j.gameserver.data.sql.AuctionTable;
  9. import net.sf.l2j.gameserver.data.xml.ItemData;
  10. import net.sf.l2j.gameserver.model.AuctionItem;
  11. import net.sf.l2j.gameserver.model.World;
  12. import net.sf.l2j.gameserver.model.actor.Player;
  13. import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
  14. import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
  15. import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
  16. import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
  17.  
  18. /**
  19. * @author Anarchy
  20. *
  21. */
  22. public class AuctionManager extends Folk
  23. {
  24. public AuctionManager(int objectId, NpcTemplate template)
  25. {
  26. super(objectId, template);
  27. }
  28.  
  29. @Override
  30. public void onBypassFeedback(Player player, String command)
  31. {
  32. if (command.startsWith("auction"))
  33. {
  34. try
  35. {
  36. String[] data = command.substring(8).split(" - ");
  37. int page = Integer.parseInt(data[0]);
  38. String search = data[1];
  39. showAuction(player, page, search);
  40. }
  41. catch (Exception e)
  42. {
  43. showChatWindow(player);
  44. player.sendMessage("Invalid input. Please try again.");
  45. return;
  46. }
  47. }
  48. else if (command.startsWith("buy"))
  49. {
  50. int auctionId = Integer.parseInt(command.substring(4));
  51. AuctionItem item = AuctionTable.getInstance().getItem(auctionId);
  52.  
  53. if (item == null)
  54. {
  55. showChatWindow(player);
  56. player.sendMessage("Invalid choice. Please try again.");
  57. return;
  58. }
  59.  
  60. if (player.getInventory().getItemByItemId(item.getCostId()) == null || player.getInventory().getItemByItemId(item.getCostId()).getCount() < item.getCostCount())
  61. {
  62. showChatWindow(player);
  63. player.sendMessage("Incorrect item count.");
  64. return;
  65. }
  66.  
  67. player.destroyItemByItemId("auction", item.getCostId(), item.getCostCount(), this, true);
  68.  
  69. final Player owner = World.getInstance().getPlayer(item.getOwnerId());
  70. if (owner != null && owner.isOnline())
  71. {
  72. owner.addItem("auction", item.getCostId(), item.getCostCount(), null, true);
  73. owner.sendMessage("You have sold an item in the Auction Shop.");
  74. }
  75. else
  76. player.addItemToOffline(item.getOwnerId(), item.getCostId(), item.getCostCount());
  77.  
  78. ItemInstance i = player.addItem("auction", item.getItemId(), item.getCount(), this, true);
  79. i.setEnchantLevel(item.getEnchant());
  80. player.sendPacket(new InventoryUpdate());
  81. player.sendMessage("You have purchased an item from the Auction Shop.");
  82.  
  83. AuctionTable.getInstance().deleteItem(item);
  84.  
  85. showChatWindow(player);
  86. }
  87. else if (command.startsWith("addpanel"))
  88. {
  89. int page = Integer.parseInt(command.substring(9));
  90.  
  91. showAddPanel(player, page);
  92. }
  93. else if (command.startsWith("additem"))
  94. {
  95. int itemId = Integer.parseInt(command.substring(8));
  96.  
  97. if (player.getInventory().getItemByObjectId(itemId) == null)
  98. {
  99. showChatWindow(player);
  100. player.sendMessage("Invalid item. Please try again.");
  101. return;
  102. }
  103.  
  104. showAddPanel2(player, itemId);
  105. }
  106. else if (command.startsWith("addit2"))
  107. {
  108. try
  109. {
  110. String[] data = command.substring(7).split(" ");
  111. int itemId = Integer.parseInt(data[0]);
  112. String costitemtype = data[1];
  113. int costCount = Integer.parseInt(data[2]);
  114. int itemAmount = Integer.parseInt(data[3]);
  115.  
  116. if (player.getInventory().getItemByObjectId(itemId) == null)
  117. {
  118. showChatWindow(player);
  119. player.sendMessage("Invalid item. Please try again.");
  120. return;
  121. }
  122. if (player.getInventory().getItemByObjectId(itemId).getCount() < itemAmount)
  123. {
  124. showChatWindow(player);
  125. player.sendMessage("Invalid item. Please try again.");
  126. return;
  127. }
  128. if (!player.getInventory().getItemByObjectId(itemId).isTradable())
  129. {
  130. showChatWindow(player);
  131. player.sendMessage("Invalid item. Please try again.");
  132. return;
  133. }
  134.  
  135. int costId = 0;
  136. if (costitemtype.equals("Adena"))
  137. costId = 57;
  138.  
  139. AuctionTable.getInstance().addItem(new AuctionItem(AuctionTable.getInstance().getNextAuctionId(), player.getObjectId(), player.getInventory().getItemByObjectId(itemId).getItemId(), itemAmount, player.getInventory().getItemByObjectId(itemId).getEnchantLevel(), costId, costCount));
  140.  
  141. player.destroyItem("auction", itemId, itemAmount, this, true);
  142. player.sendPacket(new InventoryUpdate());
  143. player.sendMessage("You have added an item for sale in the Auction Shop.");
  144. showChatWindow(player);
  145. }
  146. catch (Exception e)
  147. {
  148. showChatWindow(player);
  149. player.sendMessage("Invalid input. Please try again.");
  150. return;
  151. }
  152. }
  153. else if (command.startsWith("myitems"))
  154. {
  155. int page = Integer.parseInt(command.substring(8));
  156. showMyItems(player, page);
  157. }
  158. else if (command.startsWith("remove"))
  159. {
  160. int auctionId = Integer.parseInt(command.substring(7));
  161. AuctionItem item = AuctionTable.getInstance().getItem(auctionId);
  162.  
  163. if (item == null)
  164. {
  165. showChatWindow(player);
  166. player.sendMessage("Invalid choice. Please try again.");
  167. return;
  168. }
  169.  
  170. AuctionTable.getInstance().deleteItem(item);
  171.  
  172. ItemInstance i = player.addItem("auction", item.getItemId(), item.getCount(), this, true);
  173. i.setEnchantLevel(item.getEnchant());
  174. player.sendPacket(new InventoryUpdate());
  175. player.sendMessage("You have removed an item from the Auction Shop.");
  176. showChatWindow(player);
  177. }
  178.  
  179. super.onBypassFeedback(player, command);
  180. }
  181.  
  182. private void showMyItems(Player player, int page)
  183. {
  184. Map<Integer, ArrayList<AuctionItem>> items = new ConcurrentHashMap<>();
  185.  
  186. int curr = 1;
  187. int counter = 0;
  188.  
  189. ArrayList<AuctionItem> temp = new ArrayList<>();
  190. for (AuctionItem entry : AuctionTable.getInstance().getItems())
  191. {
  192. if (entry.getOwnerId() == player.getObjectId())
  193. {
  194. temp.add(entry);
  195.  
  196. counter++;
  197.  
  198. if (counter == 10)
  199. {
  200. items.put(curr, temp);
  201. temp = new ArrayList<>();
  202. curr++;
  203. counter = 0;
  204. }
  205. }
  206. }
  207. items.put(curr, temp);
  208.  
  209. if (!items.containsKey(page))
  210. {
  211. showChatWindow(player);
  212. player.sendMessage("Invalid page. Please try again.");
  213. return;
  214. }
  215.  
  216. final StringBuilder sb = new StringBuilder();
  217. StringUtil.append(sb, "<html><title>Auction Shop</title><body><center><br1>");
  218. StringUtil.append(sb, "<table width=310 bgcolor=000000 border=1>");
  219. StringUtil.append(sb, "<tr><td>Item</td><td>Cost</td><td></td></tr>");
  220. for (AuctionItem item : items.get(page))
  221. {
  222. StringUtil.append(sb, "<tr>");
  223. StringUtil.append(sb, "<td><img src=\""+ItemData.getInstance().getTemplate(item.getItemId()).getIcon()+"\" width=32 height=32 align=center></td>");
  224. StringUtil.append(sb, "<td>Item: "+(item.getEnchant() > 0 ? "+"+item.getEnchant()+" "+ItemData.getInstance().getTemplate(item.getItemId()).getName()+" - "+item.getCount() : ItemData.getInstance().getTemplate(item.getItemId()).getName()+" - "+item.getCount()));
  225. StringUtil.append(sb, "<br1>Cost: "+StringUtil.formatNumber(item.getCostCount())+" "+ItemData.getInstance().getTemplate(item.getCostId()).getName());
  226. StringUtil.append(sb, "</td>");
  227. StringUtil.append(sb, "<td fixwidth=71><button value=\"Remove\" action=\"bypass -h npc_"+getObjectId()+"_remove "+item.getAuctionId()+"\" width=70 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\">");
  228. StringUtil.append(sb, "</td></tr>");
  229. }
  230. StringUtil.append(sb, "</table><br><br>");
  231.  
  232. StringUtil.append(sb, "Page: "+page);
  233. StringUtil.append(sb, "<br1>");
  234.  
  235. if (items.keySet().size() > 1)
  236. {
  237. if (page > 1)
  238. StringUtil.append(sb, "<a action=\"bypass -h npc_"+getObjectId()+"_myitems "+(page-1)+"\"><- Prev</a>");
  239.  
  240. if (items.keySet().size() > page)
  241. StringUtil.append(sb, "<a action=\"bypass -h npc_"+getObjectId()+"_myitems "+(page+1)+"\">Next -></a>");
  242. }
  243.  
  244. StringUtil.append(sb, "</center></body></html>");
  245.  
  246. NpcHtmlMessage htm = new NpcHtmlMessage(getObjectId());
  247. htm.setHtml(sb.toString());
  248. player.sendPacket(htm);
  249. }
  250.  
  251. private void showAddPanel2(Player player, int itemId)
  252. {
  253. ItemInstance item = player.getInventory().getItemByObjectId(itemId);
  254.  
  255. final StringBuilder sb = new StringBuilder();
  256. StringUtil.append(sb, "<html><title>Auction Shop</title><body><center><br1>");
  257. StringUtil.append(sb, "<img src=\""+ItemData.getInstance().getTemplate(item.getItemId()).getIcon() +"\" width=32 height=32 align=center>");
  258. StringUtil.append(sb, "Item: "+(item.getEnchantLevel() > 0 ? "+"+item.getEnchantLevel()+" "+item.getName() : item.getName()));
  259.  
  260. if (item.isStackable())
  261. {
  262. StringUtil.append(sb, "<br>Set amount of items to sell:");
  263. StringUtil.append(sb, "<edit var=amm type=number width=120 height=17>");
  264. }
  265.  
  266. StringUtil.append(sb, "<br>Select price:");
  267. StringUtil.append(sb, "<br><combobox width=120 height=17 var=ebox list=Adena;>");
  268. StringUtil.append(sb, "<br><edit var=count type=number width=120 height=17>");
  269. StringUtil.append(sb, "<br><button value=\"Add item\" action=\"bypass -h npc_"+getObjectId()+"_addit2 "+itemId+" $ebox $count "+(item.isStackable() ? "$amm" : "1")+"\" width=70 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\">");
  270. StringUtil.append(sb, "</center></body></html>");
  271.  
  272. final NpcHtmlMessage htm = new NpcHtmlMessage(getObjectId());
  273. htm.setHtml(sb.toString());
  274. player.sendPacket(htm);
  275. }
  276.  
  277. private void showAddPanel(Player player, int page)
  278. {
  279. Map<Integer, ArrayList<ItemInstance>> items = new ConcurrentHashMap<>();
  280. int curr = 1;
  281. int counter = 0;
  282.  
  283. ArrayList<ItemInstance> temp = new ArrayList<>();
  284. for (ItemInstance item : player.getInventory().getItems())
  285. {
  286. if (item.getItemId() != 57 && item.isTradable())
  287. {
  288. temp.add(item);
  289.  
  290. counter++;
  291.  
  292. if (counter == 10)
  293. {
  294. items.put(curr, temp);
  295. temp = new ArrayList<>();
  296. curr++;
  297. counter = 0;
  298. }
  299. }
  300. }
  301. items.put(curr, temp);
  302.  
  303. if (!items.containsKey(page))
  304. {
  305. showChatWindow(player);
  306. player.sendMessage("Invalid page. Please try again.");
  307. return;
  308. }
  309.  
  310. final StringBuilder sb = new StringBuilder();
  311. StringUtil.append(sb, "<html><title>Auction Shop</title><body><center><br1>");
  312. StringUtil.append(sb, "Select item:");
  313. StringUtil.append(sb, "<br><table width=310 bgcolor=000000 border=1>");
  314.  
  315. for (ItemInstance item : items.get(page))
  316. {
  317. StringUtil.append(sb, "<tr>");
  318. StringUtil.append(sb, "<td>");
  319. StringUtil.append(sb, "<img src=\""+ItemData.getInstance().getTemplate(item.getItemId()).getIcon()+"\" width=32 height=32 align=center></td>");
  320. StringUtil.append(sb, "<td>"+(item.getEnchantLevel() > 0 ? "+"+item.getEnchantLevel()+" "+item.getName() : item.getName()));
  321. StringUtil.append(sb, "</td>");
  322. StringUtil.append(sb, "<td><button value=\"Select\" action=\"bypass -h npc_"+getObjectId()+"_additem "+item.getObjectId()+"\" width=70 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\">");
  323. StringUtil.append(sb, "</td>");
  324. StringUtil.append(sb, "</tr>");
  325. }
  326. StringUtil.append(sb, "</table><br><br>");
  327.  
  328. StringUtil.append(sb, "Page: "+page);
  329. StringUtil.append(sb, "<br1>");
  330.  
  331. if (items.keySet().size() > 1)
  332. {
  333. if (page > 1)
  334. StringUtil.append(sb, "<a action=\"bypass -h npc_"+getObjectId()+"_addpanel "+(page-1)+"\"><- Prev</a>");
  335.  
  336. if (items.keySet().size() > page)
  337. StringUtil.append(sb, "<a action=\"bypass -h npc_"+getObjectId()+"_addpanel "+(page+1)+"\">Next -></a>");
  338. }
  339.  
  340. StringUtil.append(sb, "</center></body></html>");
  341.  
  342. NpcHtmlMessage htm = new NpcHtmlMessage(getObjectId());
  343. htm.setHtml(sb.toString());
  344. player.sendPacket(htm);
  345. }
  346.  
  347. private void showAuction(Player player, int page, String search)
  348. {
  349. boolean src = !search.equals("*null*");
  350.  
  351. Map<Integer, ArrayList<AuctionItem>> items = new ConcurrentHashMap<>();
  352. int curr = 1;
  353. int counter = 0;
  354.  
  355. ArrayList<AuctionItem> temp = new ArrayList<>();
  356. for (AuctionItem entry : AuctionTable.getInstance().getItems())
  357. {
  358. if (entry.getOwnerId() != player.getObjectId() && (!src || (src && ItemData.getInstance().getTemplate(entry.getItemId()).getName().contains(search))))
  359. {
  360. temp.add(entry);
  361.  
  362. counter++;
  363.  
  364. if (counter == 10)
  365. {
  366. items.put(curr, temp);
  367. temp = new ArrayList<>();
  368. curr++;
  369. counter = 0;
  370. }
  371. }
  372. }
  373. items.put(curr, temp);
  374.  
  375. if (!items.containsKey(page))
  376. {
  377. showChatWindow(player);
  378. player.sendMessage("Invalid page. Please try again.");
  379. return;
  380. }
  381.  
  382. final StringBuilder sb = new StringBuilder();
  383. StringUtil.append(sb, "<html><title>Auction Shop</title><body><center><br1>");
  384. StringUtil.append(sb, "<multiedit var=srch width=150 height=20><br1>");
  385. StringUtil.append(sb, "<button value=\"Search\" action=\"bypass -h npc_"+getObjectId()+"_auction 1 - $srch\" width=70 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\">");
  386. StringUtil.append(sb, "<br><table width=310 bgcolor=000000 border=1>");
  387. StringUtil.append(sb, "<tr><td>Item</td><td>Cost</td><td></td></tr>");
  388. for (AuctionItem item : items.get(page))
  389. {
  390. StringUtil.append(sb, "<tr>");
  391. StringUtil.append(sb, "<td><img src=\""+ ItemData.getInstance().getTemplate(item.getItemId()).getIcon() +"\" width=32 height=32 align=center></td>");
  392. StringUtil.append(sb, "<td>Item: "+(item.getEnchant() > 0 ? "+"+item.getEnchant()+" "+ItemData.getInstance().getTemplate(item.getItemId()).getName()+" - "+item.getCount() : ItemData.getInstance().getTemplate(item.getItemId()).getName()+" - "+item.getCount()));
  393. StringUtil.append(sb, "<br1>Cost: "+StringUtil.formatNumber(item.getCostCount())+" "+ItemData.getInstance().getTemplate(item.getCostId()).getName());
  394. StringUtil.append(sb, "</td>");
  395. StringUtil.append(sb, "<td fixwidth=71><button value=\"Buy\" action=\"bypass -h npc_"+getObjectId()+"_buy "+item.getAuctionId()+"\" width=70 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\">");
  396. StringUtil.append(sb, "</td></tr>");
  397. }
  398. StringUtil.append(sb, "</table><br><br>");
  399.  
  400. StringUtil.append(sb, "Page: "+ page);
  401. StringUtil.append(sb, "<br1>");
  402.  
  403. if (items.keySet().size() > 1)
  404. {
  405. if (page > 1)
  406. StringUtil.append(sb, "<a action=\"bypass -h npc_"+getObjectId()+"_auction "+(page-1)+" - "+search+"\"><- Prev</a>");
  407.  
  408. if (items.keySet().size() > page)
  409. StringUtil.append(sb, "<a action=\"bypass -h npc_"+getObjectId()+"_auction "+(page+1)+" - "+search+"\">Next -></a>");
  410. }
  411.  
  412. StringUtil.append(sb, "</center></body></html>");
  413.  
  414. final NpcHtmlMessage htm = new NpcHtmlMessage(getObjectId());
  415. htm.setHtml(sb.toString());
  416. player.sendPacket(htm);
  417. }
  418.  
  419. @Override
  420. public void showChatWindow(Player player, int val)
  421. {
  422. String name = "data/html/mods/auction/" + getNpcId() + ".htm";
  423. if (val != 0)
  424. name = "data/html/mods/auction/" + getNpcId() + "-" + val + ".htm";
  425.  
  426. final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  427. html.setFile(name);
  428. html.replace("%objectId%", getObjectId());
  429. html.replace("%npcName%", getName());
  430. player.sendPacket(html);
  431. }
  432. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement