Advertisement
Guest User

Untitled

a guest
May 5th, 2018
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.37 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 ru.catssoftware.gameserver.model.actor.instance;
  16.  
  17. import java.text.SimpleDateFormat;
  18. import java.util.Calendar;
  19. import java.util.List;
  20. import java.util.Map;
  21. import java.util.StringTokenizer;
  22.  
  23. import javolution.util.FastMap;
  24.  
  25.  
  26. import org.apache.log4j.Logger;
  27.  
  28.  
  29. import ru.catssoftware.Config;
  30. import ru.catssoftware.Message;
  31. import ru.catssoftware.gameserver.ai.CtrlIntention;
  32. import ru.catssoftware.gameserver.instancemanager.AuctionManager;
  33. import ru.catssoftware.gameserver.instancemanager.ClanHallManager;
  34. import ru.catssoftware.gameserver.instancemanager.TownManager;
  35. import ru.catssoftware.gameserver.model.L2Clan;
  36. import ru.catssoftware.gameserver.model.entity.Auction;
  37. import ru.catssoftware.gameserver.model.entity.ClanHall;
  38. import ru.catssoftware.gameserver.model.entity.Town;
  39. import ru.catssoftware.gameserver.model.entity.Auction.Bidder;
  40. import ru.catssoftware.gameserver.network.SystemMessageId;
  41. import ru.catssoftware.gameserver.network.serverpackets.ActionFailed;
  42. import ru.catssoftware.gameserver.network.serverpackets.MyTargetSelected;
  43. import ru.catssoftware.gameserver.network.serverpackets.NpcHtmlMessage;
  44. import ru.catssoftware.gameserver.network.serverpackets.ValidateLocation;
  45. import ru.catssoftware.gameserver.templates.chars.L2NpcTemplate;
  46.  
  47. public final class L2AuctioneerInstance extends L2FolkInstance
  48. {
  49. private final static Logger _log = Logger.getLogger(L2AuctioneerInstance.class.getName());
  50.  
  51. private static final int COND_ALL_FALSE = 0;
  52. private static final int COND_BUSY_BECAUSE_OF_SIEGE = 1;
  53. private static final int COND_REGULAR = 3;
  54.  
  55. private Map<Integer, Auction> _pendingAuctions = new FastMap<Integer, Auction>();
  56.  
  57. public L2AuctioneerInstance(int objectId, L2NpcTemplate template)
  58. {
  59. super(objectId, template);
  60. }
  61.  
  62. @Override
  63. public void onAction(L2PcInstance player)
  64. {
  65. if (!canTarget(player)) return;
  66.  
  67. player.setLastFolkNPC(this);
  68.  
  69. // Check if the L2PcInstance already target the L2NpcInstance
  70. if (this != player.getTarget())
  71. {
  72. // Set the target of the L2PcInstance player
  73. player.setTarget(this);
  74.  
  75. // Send a Server->Client packet MyTargetSelected to the L2PcInstance player
  76. MyTargetSelected my = new MyTargetSelected(getObjectId(), 0);
  77. player.sendPacket(my);
  78.  
  79. // Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
  80. player.sendPacket(new ValidateLocation(this));
  81. }
  82. else
  83. {
  84. // Calculate the distance between the L2PcInstance and the L2NpcInstance
  85. if (!canInteract(player))
  86. // Notify the L2PcInstance AI with AI_INTENTION_INTERACT
  87. player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
  88. else
  89. showMessageWindow(player);
  90. }
  91. // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
  92. player.sendPacket(ActionFailed.STATIC_PACKET);
  93. }
  94.  
  95. @Override
  96. public void onBypassFeedback(L2PcInstance player, String command)
  97. {
  98. int condition = validateCondition(player);
  99. if (condition == COND_ALL_FALSE)
  100. {
  101. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_CLAN_AUTO_REGISTERED));
  102. return;
  103. }
  104. if (condition == COND_BUSY_BECAUSE_OF_SIEGE)
  105. {
  106. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_BYSE_BECOUSE_SIEGE));
  107. return;
  108. }
  109. else if (condition == COND_REGULAR)
  110. {
  111. StringTokenizer st = new StringTokenizer(command, " ");
  112. String actualCommand = st.nextToken(); // Get actual command
  113.  
  114. String val = "";
  115. if (st.countTokens() >= 1)
  116. {
  117. val = st.nextToken();
  118. }
  119.  
  120. if (actualCommand.equalsIgnoreCase("auction"))
  121. {
  122. if (val.isEmpty())
  123. return;
  124.  
  125. try
  126. {
  127. int days = Integer.parseInt(val);
  128. try
  129. {
  130. SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm");
  131. int bid = 0;
  132. if (st.countTokens() >= 1)
  133. bid = Integer.parseInt(st.nextToken());
  134.  
  135. Auction a = new Auction(player.getClan().getHasHideout(), player.getClan(), days*86400000L, bid, ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getName());
  136. if (_pendingAuctions.get(a.getId()) != null)
  137. _pendingAuctions.remove(a.getId());
  138.  
  139. _pendingAuctions.put(a.getId(), a);
  140.  
  141. String filename = "data/html/auction/AgitSale3.htm";
  142. NpcHtmlMessage html = new NpcHtmlMessage(1);
  143. html.setFile(filename);
  144. html.replace("%x%", val);
  145. html.replace("%AGIT_AUCTION_END%", String.valueOf(format.format(a.getEndDate())));
  146. html.replace("%AGIT_AUCTION_MINBID%", String.valueOf(a.getStartingBid()));
  147. html.replace("%AGIT_AUCTION_MIN%", String.valueOf(a.getStartingBid()));
  148. html.replace("%AGIT_AUCTION_DESC%", ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getDesc());
  149. html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_sale2");
  150. html.replace("%objectId%", String.valueOf((getObjectId())));
  151. player.sendPacket(html);
  152. }
  153. catch (Exception e)
  154. {
  155. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_AUCTION_ERROR));
  156. _log.error("Acutioneer: Error with auction ",e);
  157. }
  158. }
  159. catch (Exception e)
  160. {
  161. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_AUCTION_TIME_END));
  162.  
  163. }
  164. return;
  165. }
  166. if (actualCommand.equalsIgnoreCase("confirmAuction"))
  167. {
  168. try
  169. {
  170. Auction a = _pendingAuctions.get(player.getClan().getHasHideout());
  171. a.confirmAuction();
  172. _pendingAuctions.remove(player.getClan().getHasHideout());
  173. }
  174. catch (Exception e)
  175. {
  176. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_AUCTION_ERROR));
  177. _log.error("Acutioneer: Error with auction ",e);
  178. }
  179. return;
  180. }
  181. else if (actualCommand.equalsIgnoreCase("bidding"))
  182. {
  183. if (val.isEmpty())
  184. return;
  185.  
  186. try
  187. {
  188. SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm");
  189. int auctionId = Integer.parseInt(val);
  190. if (_log.isDebugEnabled())
  191. _log.warn("auction test started");
  192. String filename = "data/html/auction/AgitAuctionInfo.htm";
  193. Auction a = AuctionManager.getInstance().getAuction(auctionId);
  194.  
  195. NpcHtmlMessage html = new NpcHtmlMessage(1);
  196. html.setFile(filename);
  197. if (a != null)
  198. {
  199. html.replace("%AGIT_NAME%", a.getItemName());
  200. html.replace("%OWNER_PLEDGE_NAME%", a.getSellerClanName());
  201. html.replace("%OWNER_PLEDGE_MASTER%", a.getSellerName());
  202. html.replace("%AGIT_SIZE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(a.getItemId()).getGrade()*10));
  203. html.replace("%AGIT_LEASE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(a.getItemId()).getLease()));
  204. html.replace("%AGIT_LOCATION%", ClanHallManager.getInstance().getClanHallById(a.getItemId()).getLocation());
  205. html.replace("%AGIT_AUCTION_END%", String.valueOf(format.format(a.getEndDate())));
  206. html.replace("%AGIT_AUCTION_REMAIN%", String.valueOf((a.getEndDate()- System.currentTimeMillis())/3600000)+" часов "+String.valueOf((((a.getEndDate() - System.currentTimeMillis()) / 60000) % 60))+" минут");
  207. html.replace("%AGIT_AUCTION_MINBID%", String.valueOf(a.getStartingBid()));
  208. html.replace("%AGIT_AUCTION_COUNT%", String.valueOf(a.getBidders().size()));
  209. html.replace("%AGIT_AUCTION_DESC%", ClanHallManager.getInstance().getClanHallById(a.getItemId()).getDesc());
  210. html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_list");
  211. html.replace("%AGIT_LINK_BIDLIST%", "bypass -h npc_"+getObjectId()+"_bidlist "+a.getId());
  212. html.replace("%AGIT_LINK_RE%", "bypass -h npc_"+getObjectId()+"_bid1 "+a.getId());
  213. }
  214. else
  215. {
  216. _log.warn("Auctioneer Auction null for AuctionId : " + auctionId);
  217. }
  218. player.sendPacket(html);
  219. }
  220. catch (Exception e)
  221. {
  222. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_AUCTION_ERROR));
  223. _log.error("Acutioneer: Error with auction ",e);
  224. }
  225.  
  226. return;
  227. }
  228. else if (actualCommand.equalsIgnoreCase("bid"))
  229. {
  230. if (val.isEmpty())
  231. return;
  232.  
  233. try
  234. {
  235. int auctionId = Integer.parseInt(val);
  236. try
  237. {
  238. int bid = 0;
  239. if (st.countTokens() >= 1)
  240. bid = Integer.parseInt(st.nextToken());
  241.  
  242. AuctionManager.getInstance().getAuction(auctionId).setBid(player, bid);
  243. }
  244. catch (Exception e)
  245. {
  246. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_AUCTION_ERROR));
  247. _log.error("Acutioneer: Error with auction ",e);
  248. }
  249. }
  250. catch (Exception e)
  251. {
  252. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_AUCTION_ERROR));
  253. _log.error("Acutioneer: Error with auction ",e);
  254. }
  255.  
  256. return;
  257. }
  258. else if (actualCommand.equalsIgnoreCase("bid1"))
  259. {
  260. if (player.getClan() == null || player.getClan().getLevel() < Config.MIN_CLAN_LEVEL_FOR_USE_AUCTION)
  261. {
  262. player.sendMessage(String.format(Message.getMessage(player, Message.MessageId.MSG_LOW_CLAN_LEVEL),Config.MIN_CLAN_LEVEL_FOR_USE_AUCTION));
  263. return;
  264. }
  265.  
  266. if (val.isEmpty())
  267. return;
  268. if ((player.getClan().getAuctionBiddedAt() > 0 && player.getClan().getAuctionBiddedAt() != Integer.parseInt(val)) || player.getClan().getHasHideout() > 0)
  269. {
  270. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_NO_MORE_BID));
  271. return;
  272. }
  273.  
  274. try
  275. {
  276. String filename = "data/html/auction/AgitBid1.htm";
  277.  
  278. int minimumBid = AuctionManager.getInstance().getAuction(Integer.parseInt(val)).getHighestBidderMaxBid();
  279. if (minimumBid == 0)
  280. minimumBid = AuctionManager.getInstance().getAuction(Integer.parseInt(val)).getStartingBid();
  281.  
  282. NpcHtmlMessage html = new NpcHtmlMessage(1);
  283. html.setFile(filename);
  284. html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_bidding "+val);
  285. try {
  286. html.replace("%PLEDGE_ADENA%", String.valueOf(player.getClan().getWarehouse().getItemByItemId(Config.AUCTION_ITEM_ID).getCount()));
  287. } catch(NullPointerException npe) {
  288. html.replace("%PLEDGE_ADENA%", String.valueOf(player.getClan().getWarehouse().getAdena()));
  289. }
  290. html.replace("%AGIT_AUCTION_MINBID%", String.valueOf(minimumBid));
  291. html.replace("npc_%objectId%_bid", "npc_"+getObjectId()+"_bid "+val);
  292. player.sendPacket(html);
  293. return;
  294. }
  295. catch (Exception e)
  296. {
  297. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_AUCTION_ERROR));
  298. _log.error("Acutioneer: Error with auction ",e);
  299. }
  300. return;
  301. }
  302. else if (actualCommand.equalsIgnoreCase("list"))
  303. {
  304. List<Auction> auctions =AuctionManager.getInstance().getAuctions();
  305. SimpleDateFormat format = new SimpleDateFormat("yy/MM/dd");
  306. /** Limit for make new page, prevent client crash **/
  307. int limit = 15;
  308. int start;
  309. int i = 1;
  310. double npage = Math.ceil((float)auctions.size() / limit);
  311. if (val.isEmpty())
  312. start = 1;
  313. else
  314. {
  315. start = limit * (Integer.parseInt(val) - 1) + 1;
  316. limit *= Integer.parseInt(val);
  317. }
  318. String items = "";
  319. items += "<table width=280 border=0><tr>";
  320. for (int j = 1; j <= npage; j++)
  321. items+= "<td><center><a action=\"bypass -h npc_"+getObjectId()+"_list "+j+"\"> Страница "+j+" </a></center></td>";
  322. items += "</tr></table>" +
  323. "<table width=280 border=0>";
  324. for (Auction a : auctions)
  325. {
  326. if (i > limit)
  327. break;
  328. else if (i < start)
  329. {
  330. i++;
  331. continue;
  332. }
  333. else
  334. i++;
  335. items+="<tr>" +
  336. "<td>"+ClanHallManager.getInstance().getClanHallById(a.getItemId()).getLocation()+"</td>" +
  337. "<td><a action=\"bypass -h npc_"+getObjectId()+"_bidding "+a.getId()+"\">"+a.getItemName()+"</a></td>" +
  338. "<td>"+format.format(a.getEndDate())+"</td>" +
  339. "<td>"+a.getStartingBid()+"</td>" +
  340. "</tr>";
  341.  
  342. }
  343. items+= "</table>";
  344. String filename = "data/html/auction/AgitAuctionList.htm";
  345.  
  346. NpcHtmlMessage html = new NpcHtmlMessage(1);
  347. html.setFile(filename);
  348. html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_start");
  349. html.replace("%itemsField%", items);
  350. player.sendPacket(html);
  351. return;
  352. }
  353. else if (actualCommand.equalsIgnoreCase("bidlist"))
  354. {
  355. int auctionId = 0;
  356. if (val.isEmpty())
  357. {
  358. if (player.getClan().getAuctionBiddedAt() <= 0)
  359. return;
  360.  
  361. auctionId = player.getClan().getAuctionBiddedAt();
  362. }
  363. else
  364. auctionId = Integer.parseInt(val);
  365. String biders = "";
  366. Map<Integer, Bidder> bidders = AuctionManager.getInstance().getAuction(auctionId).getBidders();
  367. for (Bidder b : bidders.values())
  368. {
  369. biders+="<tr>" +
  370. "<td>"+b.getClanName()+"</td><td>"+b.getName()+"</td><td>"+b.getTimeBid().get(Calendar.YEAR)+"/"+(b.getTimeBid().get(Calendar.MONTH)+1)+"/"+b.getTimeBid().get(Calendar.DATE)+"</td><td>"+b.getBid()+"</td>" +
  371. "</tr>";
  372. }
  373. String filename = "data/html/auction/AgitBidderList.htm";
  374.  
  375. NpcHtmlMessage html = new NpcHtmlMessage(1);
  376. html.setFile(filename);
  377. html.replace("%AGIT_LIST%", biders);
  378. html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_selectedItems");
  379. html.replace("%x%", val);
  380. html.replace("%objectId%", String.valueOf(getObjectId()));
  381. player.sendPacket(html);
  382. return;
  383. }
  384. else if (actualCommand.equalsIgnoreCase("selectedItems"))
  385. {
  386. if (player.getClan() != null && player.getClan().getHasHideout() == 0 && player.getClan().getAuctionBiddedAt() > 0)
  387. {
  388. SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm");
  389. String filename = "data/html/auction/AgitBidInfo.htm";
  390. NpcHtmlMessage html = new NpcHtmlMessage(1);
  391. html.setFile(filename);
  392. Auction a = AuctionManager.getInstance().getAuction(player.getClan().getAuctionBiddedAt());
  393. if (a != null)
  394. {
  395. html.replace("%AGIT_NAME%", a.getItemName());
  396. html.replace("%OWNER_PLEDGE_NAME%", a.getSellerClanName());
  397. html.replace("%OWNER_PLEDGE_MASTER%", a.getSellerName());
  398. html.replace("%AGIT_SIZE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(a.getItemId()).getGrade()*10));
  399. html.replace("%AGIT_LEASE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(a.getItemId()).getLease()));
  400. html.replace("%AGIT_LOCATION%", ClanHallManager.getInstance().getClanHallById(a.getItemId()).getLocation());
  401. html.replace("%AGIT_AUCTION_END%", String.valueOf(format.format(a.getEndDate())));
  402. html.replace("%AGIT_AUCTION_REMAIN%", String.valueOf((a.getEndDate()-System.currentTimeMillis()) / 3600000)+" часов "+String.valueOf((((a.getEndDate()-System.currentTimeMillis()) / 60000) % 60))+" минут");
  403. html.replace("%AGIT_AUCTION_MINBID%", String.valueOf(a.getStartingBid()));
  404. html.replace("%AGIT_AUCTION_MYBID%", String.valueOf(a.getBidders().get(player.getClanId()).getBid()));
  405. html.replace("%AGIT_AUCTION_DESC%", ClanHallManager.getInstance().getClanHallById(a.getItemId()).getDesc());
  406. html.replace("%objectId%", String.valueOf(getObjectId()));
  407. html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_start");
  408. }
  409. else
  410. _log.warn("Auctioneer Auction null for AuctionBiddedAt : " + player.getClan().getAuctionBiddedAt());
  411. player.sendPacket(html);
  412. return;
  413. }
  414. else if (player.getClan() != null && AuctionManager.getInstance().getAuction(player.getClan().getHasHideout()) != null)
  415. {
  416. SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm");
  417. String filename = "data/html/auction/AgitSaleInfo.htm";
  418. NpcHtmlMessage html = new NpcHtmlMessage(1);
  419. html.setFile(filename);
  420. Auction a = AuctionManager.getInstance().getAuction(player.getClan().getHasHideout());
  421. if (a != null)
  422. {
  423. html.replace("%AGIT_NAME%", a.getItemName());
  424. html.replace("%AGIT_OWNER_PLEDGE_NAME%", a.getSellerClanName());
  425. html.replace("%OWNER_PLEDGE_MASTER%", a.getSellerName());
  426. html.replace("%AGIT_SIZE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(a.getItemId()).getGrade()*10));
  427. html.replace("%AGIT_LEASE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(a.getItemId()).getLease()));
  428. html.replace("%AGIT_LOCATION%", ClanHallManager.getInstance().getClanHallById(a.getItemId()).getLocation());
  429. html.replace("%AGIT_AUCTION_END%", String.valueOf(format.format(a.getEndDate())));
  430. html.replace("%AGIT_AUCTION_REMAIN%", String.valueOf((a.getEndDate()-System.currentTimeMillis()) / 3600000)+" часов "+String.valueOf((((a.getEndDate()-System.currentTimeMillis()) / 60000) % 60))+" минут");
  431. html.replace("%AGIT_AUCTION_MINBID%", String.valueOf(a.getStartingBid()));
  432. html.replace("%AGIT_AUCTION_BIDCOUNT%", String.valueOf(a.getBidders().size()));
  433. html.replace("%AGIT_AUCTION_DESC%", ClanHallManager.getInstance().getClanHallById(a.getItemId()).getDesc());
  434. html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_start");
  435. html.replace("%id%", String.valueOf(a.getId()));
  436. html.replace("%objectId%", String.valueOf(getObjectId()));
  437. }
  438. else
  439. _log.warn("Auctioneer Auction null for getHasHideout : " + player.getClan().getHasHideout());
  440. player.sendPacket(html);
  441. return;
  442. }
  443. else if (player.getClan() != null && player.getClan().getHasHideout() != 0)
  444. {
  445. int ItemId = player.getClan().getHasHideout();
  446. String filename = "data/html/auction/AgitInfo.htm";
  447. NpcHtmlMessage html = new NpcHtmlMessage(1);
  448. html.setFile(filename);
  449. ClanHall clanHall = ClanHallManager.getInstance().getClanHallById(ItemId);
  450. if (clanHall != null)
  451. {
  452. if (clanHall.getLease()>0)
  453. {
  454. html.replace("%AGIT_NAME%", ClanHallManager.getInstance().getClanHallById(ItemId).getName());
  455. html.replace("%AGIT_OWNER_PLEDGE_NAME%", player.getClan().getName());
  456. html.replace("%OWNER_PLEDGE_MASTER%", player.getClan().getLeaderName());
  457. html.replace("%AGIT_SIZE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(ItemId).getGrade()*10));
  458. html.replace("%AGIT_LEASE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(ItemId).getLease()));
  459. html.replace("%AGIT_LOCATION%", ClanHallManager.getInstance().getClanHallById(ItemId).getLocation());
  460. html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_start");
  461. html.replace("%objectId%", String.valueOf(getObjectId()));
  462. player.sendPacket(html);
  463. return;
  464. }
  465. }
  466. else
  467. _log.warn("Clan Hall ID NULL : " + ItemId + " Can be caused by concurent write in ClanHallManager");
  468. }
  469. player.sendPacket(SystemMessageId.CANNOT_PARTICIPATE_IN_AN_AUCTION);
  470. String filename = "data/html/auction/auction.htm";
  471. NpcHtmlMessage html = new NpcHtmlMessage(1);
  472. html.setFile(filename);
  473. html.replace("%objectId%", String.valueOf(getObjectId()));
  474. player.sendPacket(html);
  475. return;
  476. }
  477. else if (actualCommand.equalsIgnoreCase("cancelBid"))
  478. {
  479. if (!((player.getClanPrivileges() & L2Clan.CP_CH_AUCTION) == L2Clan.CP_CH_AUCTION))
  480. {
  481. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_INSUFFICIENT_RIGHT));
  482. return;
  483. }
  484. int bid = AuctionManager.getInstance().getAuction(player.getClan().getAuctionBiddedAt()).getBidders().get(player.getClanId()).getBid();
  485. String filename = "data/html/auction/AgitBidCancel.htm";
  486. NpcHtmlMessage html = new NpcHtmlMessage(1);
  487. html.setFile(filename);
  488. html.replace("%AGIT_BID%", String.valueOf(bid));
  489. html.replace("%AGIT_BID_REMAIN%", String.valueOf((int)(bid*0.9)));
  490. html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_selectedItems");
  491. html.replace("%objectId%", String.valueOf(getObjectId()));
  492. player.sendPacket(html);
  493. return;
  494. }
  495. else if (actualCommand.equalsIgnoreCase("doCancelBid"))
  496. {
  497. if (!((player.getClanPrivileges() & L2Clan.CP_CH_AUCTION) == L2Clan.CP_CH_AUCTION))
  498. {
  499. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_INSUFFICIENT_RIGHT));
  500. return;
  501. }
  502. if (AuctionManager.getInstance().getAuction(player.getClan().getAuctionBiddedAt()) != null)
  503. {
  504. AuctionManager.getInstance().getAuction(player.getClan().getAuctionBiddedAt()).cancelBid(player.getClanId());
  505. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_CANCEL_AUCTION));
  506. }
  507. return;
  508. }
  509. else if (actualCommand.equalsIgnoreCase("cancelAuction"))
  510. {
  511. if (!((player.getClanPrivileges() & L2Clan.CP_CH_AUCTION) == L2Clan.CP_CH_AUCTION))
  512. {
  513. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_INSUFFICIENT_RIGHT));
  514. return;
  515. }
  516. String filename = "data/html/auction/AgitSaleCancel.htm";
  517. NpcHtmlMessage html = new NpcHtmlMessage(1);
  518. html.setFile(filename);
  519. html.replace("%AGIT_DEPOSIT%", String.valueOf(ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getLease()));
  520. html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_selectedItems");
  521. html.replace("%objectId%", String.valueOf(getObjectId()));
  522. player.sendPacket(html);
  523. return;
  524. }
  525. else if (actualCommand.equalsIgnoreCase("doCancelAuction"))
  526. {
  527. if (AuctionManager.getInstance().getAuction(player.getClan().getHasHideout()) != null)
  528. {
  529. AuctionManager.getInstance().getAuction(player.getClan().getHasHideout()).cancelAuction();
  530. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_CANCEL_AUCTION));
  531. }
  532. return;
  533. }
  534. else if (actualCommand.equalsIgnoreCase("sale2"))
  535. {
  536. String filename = "data/html/auction/AgitSale2.htm";
  537. NpcHtmlMessage html = new NpcHtmlMessage(1);
  538. html.setFile(filename);
  539. html.replace("%AGIT_LAST_PRICE%", String.valueOf(ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getLease()));
  540. html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_sale");
  541. html.replace("%objectId%", String.valueOf(getObjectId()));
  542. player.sendPacket(html);
  543. return;
  544. }
  545. else if (actualCommand.equalsIgnoreCase("sale"))
  546. {
  547. if (!((player.getClanPrivileges() & L2Clan.CP_CH_AUCTION) == L2Clan.CP_CH_AUCTION))
  548. {
  549. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_INSUFFICIENT_RIGHT));
  550. return;
  551. }
  552. String filename = "data/html/auction/AgitSale1.htm";
  553. NpcHtmlMessage html = new NpcHtmlMessage(1);
  554. html.setFile(filename);
  555. html.replace("%AGIT_DEPOSIT%", String.valueOf(ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getLease()));
  556. try {
  557. html.replace("%AGIT_PLEDGE_ADENA%", String.valueOf(player.getClan().getWarehouse().getItemByItemId(Config.AUCTION_ITEM_ID).getCount()));
  558. } catch(NullPointerException npe) {
  559. html.replace("%AGIT_PLEDGE_ADENA%", String.valueOf(player.getClan().getWarehouse().getAdena()));
  560. }
  561. html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_selectedItems");
  562. html.replace("%objectId%", String.valueOf(getObjectId()));
  563. player.sendPacket(html);
  564. return;
  565. }
  566. else if (actualCommand.equalsIgnoreCase("rebid"))
  567. {
  568. SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm");
  569. if (!((player.getClanPrivileges() & L2Clan.CP_CH_AUCTION) == L2Clan.CP_CH_AUCTION))
  570. {
  571. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_INSUFFICIENT_RIGHT));
  572. return;
  573. }
  574. try
  575. {
  576. String filename = "data/html/auction/AgitBid2.htm";
  577. NpcHtmlMessage html = new NpcHtmlMessage(1);
  578. html.setFile(filename);
  579. Auction a = AuctionManager.getInstance().getAuction(player.getClan().getAuctionBiddedAt());
  580. if (a != null)
  581. {
  582. html.replace("%AGIT_AUCTION_BID%", String.valueOf(a.getBidders().get(player.getClanId()).getBid()));
  583. html.replace("%AGIT_AUCTION_MINBID%", String.valueOf(a.getStartingBid()));
  584. html.replace("%AGIT_AUCTION_END%",String.valueOf(format.format(a.getEndDate())));
  585. html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_selectedItems");
  586. html.replace("npc_%objectId%_bid1", "npc_"+getObjectId()+"_bid1 "+a.getId());
  587. }
  588. else
  589. _log.warn("Auctioneer Auction null for AuctionBiddedAt : "+player.getClan().getAuctionBiddedAt());
  590. player.sendPacket(html);
  591. }
  592. catch (Exception e)
  593. {
  594. player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_AUCTION_ERROR));
  595. _log.error("Acutioneer: Error with auction ",e);
  596. }
  597. return;
  598. }
  599. else if (actualCommand.equalsIgnoreCase("location"))
  600. {
  601. NpcHtmlMessage html = new NpcHtmlMessage(1);
  602. html.setFile("data/html/auction/location.htm");
  603. html.replace("%location%", TownManager.getInstance().getClosestTownName(player));
  604. html.replace("%LOCATION%", getPictureName(player));
  605. html.replace("%AGIT_LINK_BACK%", "bypass -h npc_"+getObjectId()+"_start");
  606. player.sendPacket(html);
  607. return;
  608. }
  609. else if (actualCommand.equalsIgnoreCase("start"))
  610. {
  611. showMessageWindow(player);
  612. return;
  613. }
  614. }
  615. super.onBypassFeedback(player, command);
  616. }
  617.  
  618. public void showMessageWindow(L2PcInstance player)
  619. {
  620. String filename = "data/html/auction/auction-no.htm";
  621.  
  622. int condition = validateCondition(player);
  623. if (condition == COND_BUSY_BECAUSE_OF_SIEGE)
  624. filename = "data/html/auction/auction-busy.htm"; // Busy because of siege
  625. else
  626. filename = "data/html/auction/auction.htm";
  627.  
  628. NpcHtmlMessage html = new NpcHtmlMessage(1);
  629. html.setFile(filename);
  630. html.replace("%objectId%", String.valueOf(getObjectId()));
  631. html.replace("%npcId%", String.valueOf(getNpcId()));
  632. html.replace("%npcname%", getName());
  633. player.sendPacket(html);
  634. }
  635.  
  636. /**
  637. * @param player
  638. */
  639. private int validateCondition(L2PcInstance player)
  640. {
  641. if (getCastle() != null && getCastle().getCastleId() > 0)
  642. {
  643. if (getCastle().getSiege().getIsInProgress())
  644. return COND_BUSY_BECAUSE_OF_SIEGE; // Busy because of siege
  645.  
  646. return COND_REGULAR;
  647. }
  648.  
  649. return COND_ALL_FALSE;
  650. }
  651.  
  652. private String getPictureName(L2PcInstance activeChar)
  653. {
  654. Town town = TownManager.getInstance().getClosestTown(activeChar);
  655.  
  656. int nearestTownId = town.getTownId();
  657. String nearestTown;
  658.  
  659. switch (nearestTownId)
  660. {
  661. case 5:
  662. nearestTown = "GLUDIO";
  663. break;
  664. case 6:
  665. nearestTown = "GLUDIN";
  666. break;
  667. case 7:
  668. nearestTown = "DION";
  669. break;
  670. case 8:
  671. nearestTown = "GIRAN";
  672. break;
  673. case 14:
  674. nearestTown = "RUNE";
  675. break;
  676. case 15:
  677. nearestTown = "GODARD";
  678. break;
  679. case 16:
  680. nearestTown = "SCHUTTGART";
  681. break;
  682. default:
  683. nearestTown = "ADEN";
  684. break;
  685. }
  686.  
  687. return nearestTown;
  688. }
  689. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement