Advertisement
Guest User

l2auctionmanagerinstance

a guest
Jan 24th, 2017
1,153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.22 KB | None | 0 0
  1. /*
  2. * This program is free software: you can redistribute it and/or modify it under
  3. * the terms of the GNU General Public License as published by the Free Software
  4. * Foundation, either version 3 of the License, or (at your option) any later
  5. * version.
  6. *
  7. * This program is distributed in the hope that it will be useful, but WITHOUT
  8. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9. * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10. * details.
  11. *
  12. * You should have received a copy of the GNU General Public License along with
  13. * this program. If not, see <http://www.gnu.org/licenses/>.
  14. */
  15. package net.sf.l2j.gameserver.model.actor.instance;
  16.  
  17. import java.sql.Connection;
  18. import java.sql.PreparedStatement;
  19. import java.sql.ResultSet;
  20. import java.util.ArrayList;
  21. import java.util.HashMap;
  22. import java.util.Map;
  23.  
  24. import net.sf.l2j.commons.lang.StringUtil;
  25.  
  26. import net.sf.l2j.L2DatabaseFactory;
  27. import net.sf.l2j.gameserver.datatables.ItemTable;
  28. import net.sf.l2j.gameserver.idfactory.IdFactory;
  29. import net.sf.l2j.gameserver.l2spike.auction.AuctionItem;
  30. import net.sf.l2j.gameserver.l2spike.datatables.AuctionTable;
  31. import net.sf.l2j.gameserver.l2spike.datatables.IconTable;
  32. import net.sf.l2j.gameserver.model.World;
  33. import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
  34. import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
  35. import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
  36. import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
  37.  
  38. /**
  39. * @author Anarchy
  40. *
  41. */
  42. public class L2AuctionManagerInstance extends L2NpcInstance
  43. {
  44. public L2AuctionManagerInstance(int objectId, NpcTemplate template)
  45. {
  46. super(objectId, template);
  47. }
  48.  
  49. @Override
  50. public void onBypassFeedback(L2PcInstance player, String command)
  51. {
  52. if (command.startsWith("auction"))
  53. {
  54. try
  55. {
  56. String[] data = command.substring(8).split(" - ");
  57. int page = Integer.parseInt(data[0]);
  58. String search = data[1];
  59. showAuction(player, page, search);
  60. }
  61. catch (Exception e)
  62. {
  63. showChatWindow(player);
  64. player.sendMessage("Invalid input. Please try again.");
  65. return;
  66. }
  67. }
  68. else if (command.startsWith("buy"))
  69. {
  70. int auctionId = Integer.parseInt(command.substring(4));
  71. AuctionItem item = AuctionTable.getInstance().getItem(auctionId);
  72.  
  73. if (item == null)
  74. {
  75. showChatWindow(player);
  76. player.sendMessage("Invalid choice. Please try again.");
  77. return;
  78. }
  79.  
  80. if (player.getInventory().getItemByItemId(item.getCostId()) == null || player.getInventory().getItemByItemId(item.getCostId()).getCount() < item.getCostCount())
  81. {
  82. showChatWindow(player);
  83. player.sendMessage("Incorrect item count.");
  84. return;
  85. }
  86.  
  87. player.destroyItemByItemId("auction", item.getCostId(), item.getCostCount(), this, true);
  88.  
  89. L2PcInstance owner = World.getInstance().getPlayer(item.getOwnerId());
  90. if (owner != null && owner.isOnline())
  91. {
  92. owner.addItem("auction", item.getCostId(), item.getCostCount(), null, true);
  93. owner.sendMessage("You have sold an item in the Auction Shop.");
  94. }
  95. else
  96. {
  97. addItemToOffline(item.getOwnerId(), item.getCostId(), item.getCostCount());
  98. }
  99.  
  100. ItemInstance i = player.addItem("auction", item.getItemId(), item.getCount(), this, true);
  101. i.setEnchantLevel(item.getEnchant());
  102. player.sendPacket(new InventoryUpdate());
  103. player.sendMessage("You have purchased an item from the Auction Shop.");
  104.  
  105. AuctionTable.getInstance().deleteItem(item);
  106.  
  107. showChatWindow(player);
  108. }
  109. else if (command.startsWith("addpanel"))
  110. {
  111. int page = Integer.parseInt(command.substring(9));
  112.  
  113. showAddPanel(player, page);
  114. }
  115. else if (command.startsWith("additem"))
  116. {
  117. int itemId = Integer.parseInt(command.substring(8));
  118.  
  119. if (player.getInventory().getItemByObjectId(itemId) == null)
  120. {
  121. showChatWindow(player);
  122. player.sendMessage("Invalid item. Please try again.");
  123. return;
  124. }
  125.  
  126. showAddPanel2(player, itemId);
  127. }
  128. else if (command.startsWith("addit2"))
  129. {
  130. try
  131. {
  132. String[] data = command.substring(7).split(" ");
  133. int itemId = Integer.parseInt(data[0]);
  134. String costitemtype = data[1];
  135. int costCount = Integer.parseInt(data[2]);
  136. int itemAmount = Integer.parseInt(data[3]);
  137.  
  138. if (player.getInventory().getItemByObjectId(itemId) == null)
  139. {
  140. showChatWindow(player);
  141. player.sendMessage("Invalid item. Please try again.");
  142. return;
  143. }
  144. if (player.getInventory().getItemByObjectId(itemId).getCount() < itemAmount)
  145. {
  146. showChatWindow(player);
  147. player.sendMessage("Invalid item. Please try again.");
  148. return;
  149. }
  150. if (!player.getInventory().getItemByObjectId(itemId).isTradable())
  151. {
  152. showChatWindow(player);
  153. player.sendMessage("Invalid item. Please try again.");
  154. return;
  155. }
  156.  
  157. int costId = 0;
  158. if (costitemtype.equals("Adena"))
  159. {
  160. costId = 57;
  161. }
  162.  
  163. AuctionTable.getInstance().addItem(new AuctionItem(AuctionTable.getInstance().getNextAuctionId(), player.getObjectId(), player.getInventory().getItemByObjectId(itemId).getItemId(), itemAmount, player.getInventory().getItemByObjectId(itemId).getEnchantLevel(), costId, costCount));
  164.  
  165. player.destroyItem("auction", itemId, itemAmount, this, true);
  166. player.sendPacket(new InventoryUpdate());
  167. player.sendMessage("You have added an item for sale in the Auction Shop.");
  168. showChatWindow(player);
  169. }
  170. catch (Exception e)
  171. {
  172. showChatWindow(player);
  173. player.sendMessage("Invalid input. Please try again.");
  174. return;
  175. }
  176. }
  177. else if (command.startsWith("myitems"))
  178. {
  179. int page = Integer.parseInt(command.substring(8));
  180. showMyItems(player, page);
  181. }
  182. else if (command.startsWith("remove"))
  183. {
  184. int auctionId = Integer.parseInt(command.substring(7));
  185. AuctionItem item = AuctionTable.getInstance().getItem(auctionId);
  186.  
  187. if (item == null)
  188. {
  189. showChatWindow(player);
  190. player.sendMessage("Invalid choice. Please try again.");
  191. return;
  192. }
  193.  
  194. AuctionTable.getInstance().deleteItem(item);
  195.  
  196. ItemInstance i = player.addItem("auction", item.getItemId(), item.getCount(), this, true);
  197. i.setEnchantLevel(item.getEnchant());
  198. player.sendPacket(new InventoryUpdate());
  199. player.sendMessage("You have removed an item from the Auction Shop.");
  200. showChatWindow(player);
  201. }
  202. else
  203. {
  204. super.onBypassFeedback(player, command);
  205. }
  206. }
  207.  
  208. private void showMyItems(L2PcInstance player, int page)
  209. {
  210. HashMap<Integer, ArrayList<AuctionItem>> items = new HashMap<>();
  211. int curr = 1;
  212. int counter = 0;
  213.  
  214. ArrayList<AuctionItem> temp = new ArrayList<>();
  215. for (Map.Entry<Integer, AuctionItem> entry : AuctionTable.getInstance().getItems().entrySet())
  216. {
  217. if (entry.getValue().getOwnerId() == player.getObjectId())
  218. {
  219. temp.add(entry.getValue());
  220.  
  221. counter++;
  222.  
  223. if (counter == 10)
  224. {
  225. items.put(curr, temp);
  226. temp = new ArrayList<>();
  227. curr++;
  228. counter = 0;
  229. }
  230. }
  231. }
  232. items.put(curr, temp);
  233.  
  234. if (!items.containsKey(page))
  235. {
  236. showChatWindow(player);
  237. player.sendMessage("Invalid page. Please try again.");
  238. return;
  239. }
  240.  
  241. String html = "";
  242. html += "<html><title>Auction Shop</title><body><center><br1>";
  243. html += "<table width=310 bgcolor=000000 border=1>";
  244. html += "<tr><td>Item</td><td>Cost</td><td></td></tr>";
  245. for (AuctionItem item : items.get(page))
  246. {
  247. html += "<tr>";
  248. html += "<td><img src=\""+IconTable.getInstance().getIcon(item.getItemId())+"\" width=32 height=32 align=center></td>";
  249. html += "<td>Item: "+(item.getEnchant() > 0 ? "+"+item.getEnchant()+" "+ItemTable.getInstance().getTemplate(item.getItemId()).getName()+" - "+item.getCount() : ItemTable.getInstance().getTemplate(item.getItemId()).getName()+" - "+item.getCount());
  250. html += "<br1>Cost: "+StringUtil.formatNumber(item.getCostCount())+" "+ItemTable.getInstance().getTemplate(item.getCostId()).getName();
  251. html += "</td>";
  252. html += "<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\">";
  253. html += "</td></tr>";
  254. }
  255. html += "</table><br><br>";
  256.  
  257. html += "Page: "+page;
  258. html += "<br1>";
  259.  
  260. if (items.keySet().size() > 1)
  261. {
  262. if (page > 1)
  263. html += "<a action=\"bypass -h npc_"+getObjectId()+"_myitems "+(page-1)+"\"><- Prev</a>";
  264.  
  265. if (items.keySet().size() > page)
  266. html += "<a action=\"bypass -h npc_"+getObjectId()+"_myitems "+(page+1)+"\">Next -></a>";
  267. }
  268.  
  269. html += "</center></body></html>";
  270.  
  271. NpcHtmlMessage htm = new NpcHtmlMessage(getObjectId());
  272. htm.setHtml(html);
  273. player.sendPacket(htm);
  274. }
  275.  
  276. private void showAddPanel2(L2PcInstance player, int itemId)
  277. {
  278. ItemInstance item = player.getInventory().getItemByObjectId(itemId);
  279.  
  280. String html = "";
  281. html += "<html><title>Auction Shop</title><body><center><br1>";
  282. html += "<img src=\""+IconTable.getInstance().getIcon(item.getItemId())+"\" width=32 height=32 align=center>";
  283. html += "Item: "+(item.getEnchantLevel() > 0 ? "+"+item.getEnchantLevel()+" "+item.getName() : item.getName());
  284.  
  285. if (item.isStackable())
  286. {
  287. html += "<br>Set amount of items to sell:";
  288. html += "<edit var=amm type=number width=120 height=17>";
  289. }
  290.  
  291. html += "<br>Select price:";
  292. html += "<br><combobox width=120 height=17 var=ebox list=Adena;>";
  293. html += "<br><edit var=count type=number width=120 height=17>";
  294. html += "<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\">";
  295. html += "</center></body></html>";
  296.  
  297. NpcHtmlMessage htm = new NpcHtmlMessage(getObjectId());
  298. htm.setHtml(html);
  299. player.sendPacket(htm);
  300. }
  301.  
  302. private void showAddPanel(L2PcInstance player, int page)
  303. {
  304. HashMap<Integer, ArrayList<ItemInstance>> items = new HashMap<>();
  305. int curr = 1;
  306. int counter = 0;
  307.  
  308. ArrayList<ItemInstance> temp = new ArrayList<>();
  309. for (ItemInstance item : player.getInventory().getItems())
  310. {
  311. if (item.getItemId() != 57 && item.isTradable())
  312. {
  313. temp.add(item);
  314.  
  315. counter++;
  316.  
  317. if (counter == 10)
  318. {
  319. items.put(curr, temp);
  320. temp = new ArrayList<>();
  321. curr++;
  322. counter = 0;
  323. }
  324. }
  325. }
  326. items.put(curr, temp);
  327.  
  328. if (!items.containsKey(page))
  329. {
  330. showChatWindow(player);
  331. player.sendMessage("Invalid page. Please try again.");
  332. return;
  333. }
  334.  
  335. String html = "";
  336. html += "<html><title>Auction Shop</title><body><center><br1>";
  337. html += "Select item:";
  338. html += "<br><table width=310 bgcolor=000000 border=1>";
  339.  
  340. for (ItemInstance item : items.get(page))
  341. {
  342. html += "<tr>";
  343. html += "<td>";
  344. html += "<img src=\""+IconTable.getInstance().getIcon(item.getItemId())+"\" width=32 height=32 align=center></td>";
  345. html += "<td>"+(item.getEnchantLevel() > 0 ? "+"+item.getEnchantLevel()+" "+item.getName() : item.getName());
  346. html += "</td>";
  347. html += "<td><button value=\"Select\" action=\"bypass -h npc_"+getObjectId()+"_additem "+item.getObjectId()+"\" width=70 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\">";
  348. html += "</td>";
  349. html += "</tr>";
  350. }
  351. html += "</table><br><br>";
  352.  
  353. html += "Page: "+page;
  354. html += "<br1>";
  355.  
  356. if (items.keySet().size() > 1)
  357. {
  358. if (page > 1)
  359. html += "<a action=\"bypass -h npc_"+getObjectId()+"_addpanel "+(page-1)+"\"><- Prev</a>";
  360.  
  361. if (items.keySet().size() > page)
  362. html += "<a action=\"bypass -h npc_"+getObjectId()+"_addpanel "+(page+1)+"\">Next -></a>";
  363. }
  364.  
  365. html += "</center></body></html>";
  366.  
  367. NpcHtmlMessage htm = new NpcHtmlMessage(getObjectId());
  368. htm.setHtml(html);
  369. player.sendPacket(htm);
  370. }
  371.  
  372. @SuppressWarnings("resource")
  373. private static void addItemToOffline(int playerId, int itemId, int count)
  374. {
  375. try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  376. {
  377. PreparedStatement stm = con.prepareStatement("SELECT count FROM items WHERE owner_id=? AND item_id=?");
  378. stm.setInt(1, playerId);
  379. stm.setInt(2, itemId);
  380. ResultSet rset = stm.executeQuery();
  381.  
  382. if (rset.next())
  383. {
  384. stm = con.prepareStatement("UPDATE items SET count=? WHERE owner_id=? AND item_id=?");
  385. stm.setInt(1, rset.getInt("count") + count);
  386. stm.setInt(2, playerId);
  387. stm.setInt(3, itemId);
  388.  
  389. stm.execute();
  390. }
  391. else
  392. {
  393. stm = con.prepareStatement("INSERT INTO items VALUES (?,?,?,?,?,?,?,?,?,?,?,?)");
  394. stm.setInt(1, playerId);
  395. stm.setInt(2, IdFactory.getInstance().getNextId());
  396. stm.setInt(3, itemId);
  397. stm.setInt(4, count);
  398. stm.setInt(5, 0);
  399. stm.setString(6, "INVENTORY");
  400. stm.setInt(7, 0);
  401. stm.setInt(8, 0);
  402. stm.setInt(9, 0);
  403. stm.setInt(10, 0);
  404. stm.setInt(11, -1);
  405. stm.setInt(12, 0);
  406.  
  407. stm.execute();
  408. }
  409.  
  410. rset.close();
  411. stm.close();
  412. }
  413. catch (Exception e)
  414. {
  415. e.printStackTrace();
  416. }
  417. }
  418.  
  419. private void showAuction(L2PcInstance player, int page, String search)
  420. {
  421. boolean src = !search.equals("*null*");
  422.  
  423. HashMap<Integer, ArrayList<AuctionItem>> items = new HashMap<>();
  424. int curr = 1;
  425. int counter = 0;
  426.  
  427. ArrayList<AuctionItem> temp = new ArrayList<>();
  428. for (Map.Entry<Integer, AuctionItem> entry : AuctionTable.getInstance().getItems().entrySet())
  429. {
  430. if (entry.getValue().getOwnerId() != player.getObjectId() && (!src || (src && ItemTable.getInstance().getTemplate(entry.getValue().getItemId()).getName().contains(search))))
  431. {
  432. temp.add(entry.getValue());
  433.  
  434. counter++;
  435.  
  436. if (counter == 10)
  437. {
  438. items.put(curr, temp);
  439. temp = new ArrayList<>();
  440. curr++;
  441. counter = 0;
  442. }
  443. }
  444. }
  445. items.put(curr, temp);
  446.  
  447. if (!items.containsKey(page))
  448. {
  449. showChatWindow(player);
  450. player.sendMessage("Invalid page. Please try again.");
  451. return;
  452. }
  453.  
  454. String html = "<html><title>Auction Shop</title><body><center><br1>";
  455. html += "<multiedit var=srch width=150 height=20><br1>";
  456. html += "<button value=\"Search\" action=\"bypass -h npc_"+getObjectId()+"_auction 1 - $srch\" width=70 height=21 back=\"L2UI.DefaultButton_click\" fore=\"L2UI.DefaultButton\">";
  457. html += "<br><table width=310 bgcolor=000000 border=1>";
  458. html += "<tr><td>Item</td><td>Cost</td><td></td></tr>";
  459. for (AuctionItem item : items.get(page))
  460. {
  461. html += "<tr>";
  462. html += "<td><img src=\""+IconTable.getInstance().getIcon(item.getItemId())+"\" width=32 height=32 align=center></td>";
  463. html += "<td>Item: "+(item.getEnchant() > 0 ? "+"+item.getEnchant()+" "+ItemTable.getInstance().getTemplate(item.getItemId()).getName()+" - "+item.getCount() : ItemTable.getInstance().getTemplate(item.getItemId()).getName()+" - "+item.getCount());
  464. html += "<br1>Cost: "+StringUtil.formatNumber(item.getCostCount())+" "+ItemTable.getInstance().getTemplate(item.getCostId()).getName();
  465. html += "</td>";
  466. html += "<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\">";
  467. html += "</td></tr>";
  468. }
  469. html += "</table><br><br>";
  470.  
  471. html += "Page: "+page;
  472. html += "<br1>";
  473.  
  474. if (items.keySet().size() > 1)
  475. {
  476. if (page > 1)
  477. html += "<a action=\"bypass -h npc_"+getObjectId()+"_auction "+(page-1)+" - "+search+"\"><- Prev</a>";
  478.  
  479. if (items.keySet().size() > page)
  480. html += "<a action=\"bypass -h npc_"+getObjectId()+"_auction "+(page+1)+" - "+search+"\">Next -></a>";
  481. }
  482.  
  483. html += "</center></body></html>";
  484.  
  485. NpcHtmlMessage htm = new NpcHtmlMessage(getObjectId());
  486. htm.setHtml(html);
  487. player.sendPacket(htm);
  488. }
  489.  
  490. @Override
  491. public String getHtmlPath(int npcId, int val)
  492. {
  493. String pom = "";
  494. if (val == 0)
  495. pom = "" + npcId;
  496. else
  497. pom = npcId + "-" + val;
  498.  
  499. return "data/html/l2spike/auction/" + pom + ".htm";
  500. }
  501. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement