/* * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that * it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If * not, see <http://www.gnu.org/licenses/>. */ package silentium.gameserver.model.actor.instance; import java.util.Calendar; import java.util.List; import java.util.Map; import java.util.StringTokenizer; import javolution.util.FastMap; import silentium.gameserver.data.html.StaticHtmPath; import silentium.gameserver.data.xml.MapRegionData; import silentium.gameserver.instancemanager.AuctionManager; import silentium.gameserver.instancemanager.ClanHallManager; import silentium.gameserver.model.L2Clan; import silentium.gameserver.model.entity.Auction; import silentium.gameserver.model.entity.Auction.Bidder; import silentium.gameserver.network.SystemMessageId; import silentium.gameserver.network.serverpackets.NpcHtmlMessage; import silentium.gameserver.templates.chars.L2NpcTemplate; import silentium.gameserver.utils.Util; public final class L2AuctioneerInstance extends L2NpcInstance { private static final int COND_ALL_FALSE = 0; private static final int COND_BUSY_BECAUSE_OF_SIEGE = 1; private static final int COND_REGULAR = 3; private final Map<Integer, Auction> _pendingAuctions = new FastMap<>(); public L2AuctioneerInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } @Override public void onBypassFeedback(L2PcInstance player, String command) { int condition = validateCondition(player); if (condition <= COND_ALL_FALSE) return; else if (condition == COND_BUSY_BECAUSE_OF_SIEGE) { String filename = StaticHtmPath.AuctionHtmPath + "auction-busy.htm"; NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile(filename, player); html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); return; } else if (condition == COND_REGULAR) { StringTokenizer st = new StringTokenizer(command, " "); String actualCommand = st.nextToken(); String val = ""; if (st.countTokens() >= 1) val = st.nextToken(); /* Only a few actions are possible for clanless people. */ if (actualCommand.equalsIgnoreCase("list")) showAuctionsList(val, player); else if (actualCommand.equalsIgnoreCase("bidding")) { if (val.isEmpty()) return; _log.debug("Auction: bidding show is successful."); try { int auctionId = Integer.parseInt(val); _log.debug("Auction: auction has started."); String filename = StaticHtmPath.AuctionHtmPath + "AgitAuctionInfo.htm"; Auction a = AuctionManager.getInstance().getAuction(auctionId); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename, player); if (a != null) { html.replace("%AGIT_NAME%", a.getItemName()); html.replace("%OWNER_PLEDGE_NAME%", a.getSellerClanName()); html.replace("%OWNER_PLEDGE_MASTER%", a.getSellerName()); html.replace("%AGIT_SIZE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(a.getItemId()).getGrade() * 10)); html.replace("%AGIT_LEASE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(a.getItemId()).getLease())); html.replace("%AGIT_LOCATION%", ClanHallManager.getInstance().getClanHallById(a.getItemId()).getLocation()); html.replace("%AGIT_AUCTION_END%", Util.formatDate(a.getEndDate(), "dd/MM/yyyy HH:mm")); html.replace("%AGIT_AUCTION_REMAIN%", String.valueOf((a.getEndDate() - System.currentTimeMillis()) / 3600000) + " hours " + String.valueOf((((a.getEndDate() - System.currentTimeMillis()) / 60000) % 60)) + " minutes"); html.replace("%AGIT_AUCTION_MINBID%", String.valueOf(a.getStartingBid())); html.replace("%AGIT_AUCTION_COUNT%", String.valueOf(a.getBidders().size())); html.replace("%AGIT_AUCTION_DESC%", ClanHallManager.getInstance().getClanHallById(a.getItemId()).getDesc()); html.replace("%AGIT_LINK_BACK%", "bypass -h npc_" + getObjectId() + "_list"); html.replace("%AGIT_LINK_BIDLIST%", "bypass -h npc_" + getObjectId() + "_bidlist " + a.getId()); html.replace("%AGIT_LINK_RE%", "bypass -h npc_" + getObjectId() + "_bid1 " + a.getId()); } else _log.warn("Auctioneer Auction null for AuctionId : " + auctionId); player.sendPacket(html); } catch (Exception e) { } return; } else if (actualCommand.equalsIgnoreCase("location")) { NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(StaticHtmPath.AuctionHtmPath + "location.htm", player); html.replace("%location%", MapRegionData.getInstance().getClosestTownName(player)); html.replace("%LOCATION%", getPictureName(player)); html.replace("%AGIT_LINK_BACK%", "bypass -h npc_" + getObjectId() + "_start"); player.sendPacket(html); return; } else if (actualCommand.equalsIgnoreCase("start")) { showChatWindow(player); return; } /* Clanless or clan members without enough power are kicked directly. */ else { if (player.getClan() == null || !((player.getClanPrivileges() & L2Clan.CP_CH_AUCTION) == L2Clan.CP_CH_AUCTION)) { showAuctionsList("1", player); // Force to display page 1. player.sendPacket(SystemMessageId.CANNOT_PARTICIPATE_IN_AUCTION); return; } if (actualCommand.equalsIgnoreCase("bid")) { if (val.isEmpty()) return; try { int auctionId = Integer.parseInt(val); try { int bid = 0; if (st.countTokens() >= 1) bid = Math.min(Integer.parseInt(st.nextToken()), Integer.MAX_VALUE); AuctionManager.getInstance().getAuction(auctionId).setBid(player, bid); } catch (Exception e) { } } catch (Exception e) { } return; } else if (actualCommand.equalsIgnoreCase("bid1")) { if (val.isEmpty()) return; if (player.getClan() == null || player.getClan().getLevel() < 2) { showAuctionsList("1", player); // Force to display page 1. player.sendPacket(SystemMessageId.AUCTION_ONLY_CLAN_LEVEL_2_HIGHER); return; } if (player.getClan().hasHideout()) { showAuctionsList("1", player); // Force to display page 1. player.sendPacket(SystemMessageId.CANNOT_PARTICIPATE_IN_AUCTION); return; } if ((player.getClan().getAuctionBiddedAt() > 0 && player.getClan().getAuctionBiddedAt() != Integer.parseInt(val))) { showAuctionsList("1", player); // Force to display page 1. player.sendPacket(SystemMessageId.ALREADY_SUBMITTED_BID); return; } try { String filename = StaticHtmPath.AuctionHtmPath + "AgitBid1.htm"; int minimumBid = AuctionManager.getInstance().getAuction(Integer.parseInt(val)).getHighestBidderMaxBid(); if (minimumBid == 0) minimumBid = AuctionManager.getInstance().getAuction(Integer.parseInt(val)).getStartingBid(); NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename, player); html.replace("%AGIT_LINK_BACK%", "bypass -h npc_" + getObjectId() + "_bidding " + val); html.replace("%PLEDGE_ADENA%", String.valueOf(player.getClan().getWarehouse().getAdena())); html.replace("%AGIT_AUCTION_MINBID%", String.valueOf(minimumBid)); html.replace("npc_%objectId%_bid", "npc_" + getObjectId() + "_bid " + val); player.sendPacket(html); return; } catch (Exception e) { } return; } else if (actualCommand.equalsIgnoreCase("bidlist")) { int auctionId = 0; if (val.isEmpty()) { if (player.getClan().getAuctionBiddedAt() <= 0) return; auctionId = player.getClan().getAuctionBiddedAt(); } else auctionId = Integer.parseInt(val); _log.debug("Auction: command bidlist has started."); String biders = ""; final Map<Integer, Bidder> bidders = AuctionManager.getInstance().getAuction(auctionId).getBidders(); for (Bidder b : bidders.values()) { biders += "<tr>" + "<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>" + "</tr>"; } String filename = StaticHtmPath.AuctionHtmPath + "AgitBidderList.htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename, player); html.replace("%AGIT_LIST%", biders); html.replace("%AGIT_LINK_BACK%", "bypass -h npc_" + getObjectId() + "_bidding " + val); html.replace("%x%", val); html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); return; } else if (actualCommand.equalsIgnoreCase("selectedItems")) { showSelectedItems(player); } else if (actualCommand.equalsIgnoreCase("cancelBid")) { int bid = AuctionManager.getInstance().getAuction(player.getClan().getAuctionBiddedAt()).getBidders().get(player.getClanId()).getBid(); String filename = StaticHtmPath.AuctionHtmPath + "AgitBidCancel.htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename, player); html.replace("%AGIT_BID%", String.valueOf(bid)); html.replace("%AGIT_BID_REMAIN%", String.valueOf((int) (bid * 0.9))); html.replace("%AGIT_LINK_BACK%", "bypass -h npc_" + getObjectId() + "_selectedItems"); html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); return; } else if (actualCommand.equalsIgnoreCase("doCancelBid")) { if (AuctionManager.getInstance().getAuction(player.getClan().getAuctionBiddedAt()) != null) { AuctionManager.getInstance().getAuction(player.getClan().getAuctionBiddedAt()).cancelBid(player.getClanId()); player.sendPacket(SystemMessageId.CANCELED_BID); } return; } else if (actualCommand.equalsIgnoreCase("cancelAuction")) { String filename = StaticHtmPath.AuctionHtmPath + "AgitSaleCancel.htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename, player); html.replace("%AGIT_DEPOSIT%", String.valueOf(ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getLease())); html.replace("%AGIT_LINK_BACK%", "bypass -h npc_" + getObjectId() + "_selectedItems"); html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); return; } else if (actualCommand.equalsIgnoreCase("doCancelAuction")) { if (AuctionManager.getInstance().getAuction(player.getClan().getHideoutId()) != null) { AuctionManager.getInstance().getAuction(player.getClan().getHideoutId()).cancelAuction(); player.sendPacket(SystemMessageId.CANCELED_BID); } showChatWindow(player); return; } else if (actualCommand.equalsIgnoreCase("sale")) { String filename = StaticHtmPath.AuctionHtmPath + "AgitSale1.htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename, player); html.replace("%AGIT_DEPOSIT%", String.valueOf(ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getLease())); html.replace("%AGIT_PLEDGE_ADENA%", String.valueOf(player.getClan().getWarehouse().getAdena())); html.replace("%AGIT_LINK_BACK%", "bypass -h npc_" + getObjectId() + "_selectedItems"); html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); return; } else if (actualCommand.equalsIgnoreCase("rebid")) { try { String filename = StaticHtmPath.AuctionHtmPath + "AgitBid2.htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename, player); Auction a = AuctionManager.getInstance().getAuction(player.getClan().getAuctionBiddedAt()); if (a != null) { html.replace("%AGIT_AUCTION_BID%", String.valueOf(a.getBidders().get(player.getClanId()).getBid())); html.replace("%AGIT_AUCTION_MINBID%", String.valueOf(a.getStartingBid())); html.replace("%AGIT_AUCTION_END%", Util.formatDate(a.getEndDate(), "dd/MM/yyyy HH:mm")); html.replace("%AGIT_LINK_BACK%", "bypass -h npc_" + getObjectId() + "_selectedItems"); html.replace("npc_%objectId%_bid1", "npc_" + getObjectId() + "_bid1 " + a.getId()); } else _log.warn("Auctioneer Auction null for AuctionBiddedAt : " + player.getClan().getAuctionBiddedAt()); player.sendPacket(html); } catch (Exception e) { } return; } /* Those bypasses check if CWH got enough adenas (case of sale auction type) */ else { if (player.getClan().getWarehouse().getAdena() < ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getLease()) { showSelectedItems(player); player.sendPacket(SystemMessageId.NOT_ENOUGH_ADENA_IN_CWH); return; } if (actualCommand.equalsIgnoreCase("auction")) { if (val.isEmpty()) return; try { int days = Integer.parseInt(val); try { int bid = 0; if (st.countTokens() >= 1) bid = Math.min(Integer.parseInt(st.nextToken()), Integer.MAX_VALUE); Auction a = new Auction(player.getClan().getHideoutId(), player.getClan(), days * 86400000L, bid, ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getName()); if (_pendingAuctions.get(a.getId()) != null) _pendingAuctions.remove(a.getId()); _pendingAuctions.put(a.getId(), a); String filename = StaticHtmPath.AuctionHtmPath + "AgitSale3.htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename, player); html.replace("%x%", val); html.replace("%AGIT_AUCTION_END%", Util.formatDate(a.getEndDate(), "dd/MM/yyyy HH:mm")); html.replace("%AGIT_AUCTION_MINBID%", String.valueOf(a.getStartingBid())); html.replace("%AGIT_AUCTION_MIN%", String.valueOf(a.getStartingBid())); html.replace("%AGIT_AUCTION_DESC%", ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getDesc()); html.replace("%AGIT_LINK_BACK%", "bypass -h npc_" + getObjectId() + "_sale2"); html.replace("%objectId%", String.valueOf((getObjectId()))); player.sendPacket(html); } catch (Exception e) { } } catch (Exception e) { } return; } else if (actualCommand.equalsIgnoreCase("confirmAuction")) { int chId = player.getClan().getHideoutId(); if (chId <= 0) return; Auction auction = _pendingAuctions.get(chId); if (auction == null) return; if (Auction.takeItem(player, ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getLease())) { auction.confirmAuction(); _pendingAuctions.remove(chId); showSelectedItems(player); player.sendPacket(SystemMessageId.REGISTERED_FOR_CLANHALL); } return; } else if (actualCommand.equalsIgnoreCase("sale2")) { String filename = StaticHtmPath.AuctionHtmPath + "AgitSale2.htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename, player); html.replace("%AGIT_LAST_PRICE%", String.valueOf(ClanHallManager.getInstance().getClanHallByOwner(player.getClan()).getLease())); html.replace("%AGIT_LINK_BACK%", "bypass -h npc_" + getObjectId() + "_sale"); html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); return; } } } } super.onBypassFeedback(player, command); } @Override public void showChatWindow(L2PcInstance player) { String filename = StaticHtmPath.AuctionHtmPath + "auction-no.htm"; int condition = validateCondition(player); if (condition == COND_BUSY_BECAUSE_OF_SIEGE) filename = StaticHtmPath.AuctionHtmPath + "auction-busy.htm"; else filename = StaticHtmPath.AuctionHtmPath + "auction.htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename, player); html.replace("%objectId%", String.valueOf(getObjectId())); html.replace("%npcId%", String.valueOf(getNpcId())); html.replace("%npcname%", getName()); player.sendPacket(html); } @Override public void showChatWindow(L2PcInstance player, int val) { if (val == 0) return; super.showChatWindow(player, val); } private int validateCondition(L2PcInstance player) { if (getCastle() != null && getCastle().getCastleId() > 0) { if (getCastle().getSiege().getIsInProgress()) return COND_BUSY_BECAUSE_OF_SIEGE; return COND_REGULAR; } return COND_ALL_FALSE; } private void showAuctionsList(String val, L2PcInstance player) { List<Auction> auctions = AuctionManager.getInstance().getAuctions(); int limit = 15; // Limit to prevent client crash int start; int i = 1; double npage = Math.ceil((float) auctions.size() / limit); if (val.isEmpty()) start = 1; else { start = limit * (Integer.parseInt(val) - 1) + 1; limit *= Integer.parseInt(val); } _log.debug("Auction: list command has started."); StringBuilder items = new StringBuilder(); items.append("<table width=280 border=0><tr>"); for (int j = 1; j <= npage; j++) { items.append("<td><center><a action=\"bypass -h npc_"); items.append(getObjectId()); items.append("_list "); items.append(j); items.append("\"> Page "); items.append(j); items.append(" </a></center></td>"); } items.append("</tr></table>"); items.append("<table width=280 border=0>"); for (Auction a : auctions) { if (a == null) continue; if (i > limit) break; else if (i < start) { i++; continue; } else i++; items.append("<tr>"); items.append("<td><font color=\"aaaaff\">"); items.append(ClanHallManager.getInstance().getClanHallById(a.getItemId()).getLocation()); items.append("</font></td>"); items.append("<td><font color=\"ffffaa\"><a action=\"bypass -h npc_"); items.append(getObjectId()); items.append("_bidding "); items.append(a.getId()); items.append("\">"); items.append(a.getItemName()); items.append(" ["); items.append(a.getBidders().size()); items.append("]</a></font></td>"); items.append("<td>").append(Util.formatDate(a.getEndDate(), "yy/MM/dd")); items.append("</td>"); items.append("<td><font color=\"aaffff\">"); items.append(a.getStartingBid()); items.append("</font></td>"); items.append("</tr>"); } items.append("</table>"); String filename = StaticHtmPath.AuctionHtmPath + "AgitAuctionList.htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename, player); html.replace("%AGIT_LINK_BACK%", "bypass -h npc_" + getObjectId() + "_start"); html.replace("%itemsField%", items.toString()); player.sendPacket(html); return; } private void showSelectedItems(L2PcInstance player) { final L2Clan clan = player.getClan(); if (clan == null) return; if (!clan.hasHideout() && clan.getAuctionBiddedAt() > 0) { String filename = StaticHtmPath.AuctionHtmPath + "AgitBidInfo.htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename, player); Auction a = AuctionManager.getInstance().getAuction(clan.getAuctionBiddedAt()); if (a != null) { html.replace("%AGIT_NAME%", a.getItemName()); html.replace("%OWNER_PLEDGE_NAME%", a.getSellerClanName()); html.replace("%OWNER_PLEDGE_MASTER%", a.getSellerName()); html.replace("%AGIT_SIZE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(a.getItemId()).getGrade() * 10)); html.replace("%AGIT_LEASE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(a.getItemId()).getLease())); html.replace("%AGIT_LOCATION%", ClanHallManager.getInstance().getClanHallById(a.getItemId()).getLocation()); html.replace("%AGIT_AUCTION_END%", Util.formatDate(a.getEndDate(), "dd/MM/yyyy HH:mm")); html.replace("%AGIT_AUCTION_REMAIN%", String.valueOf((a.getEndDate() - System.currentTimeMillis()) / 3600000) + " hours " + String.valueOf((((a.getEndDate() - System.currentTimeMillis()) / 60000) % 60)) + " minutes"); html.replace("%AGIT_AUCTION_MINBID%", String.valueOf(a.getStartingBid())); html.replace("%AGIT_AUCTION_MYBID%", String.valueOf(a.getBidders().get(player.getClanId()).getBid())); html.replace("%AGIT_AUCTION_DESC%", ClanHallManager.getInstance().getClanHallById(a.getItemId()).getDesc()); html.replace("%objectId%", String.valueOf(getObjectId())); html.replace("%AGIT_LINK_BACK%", "bypass -h npc_" + getObjectId() + "_start"); } else _log.warn("Auctioneer Auction null for AuctionBiddedAt : " + clan.getAuctionBiddedAt()); player.sendPacket(html); return; } else if (AuctionManager.getInstance().getAuction(clan.getHideoutId()) != null) { String filename = StaticHtmPath.AuctionHtmPath + "AgitSaleInfo.htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename, player); Auction a = AuctionManager.getInstance().getAuction(clan.getHideoutId()); if (a != null) { html.replace("%AGIT_NAME%", a.getItemName()); html.replace("%AGIT_OWNER_PLEDGE_NAME%", a.getSellerClanName()); html.replace("%OWNER_PLEDGE_MASTER%", a.getSellerName()); html.replace("%AGIT_SIZE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(a.getItemId()).getGrade() * 10)); html.replace("%AGIT_LEASE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(a.getItemId()).getLease())); html.replace("%AGIT_LOCATION%", ClanHallManager.getInstance().getClanHallById(a.getItemId()).getLocation()); html.replace("%AGIT_AUCTION_END%", Util.formatDate(a.getEndDate(), "dd/MM/yyyy HH:mm")); html.replace("%AGIT_AUCTION_REMAIN%", String.valueOf((a.getEndDate() - System.currentTimeMillis()) / 3600000) + " hours " + String.valueOf((((a.getEndDate() - System.currentTimeMillis()) / 60000) % 60)) + " minutes"); html.replace("%AGIT_AUCTION_MINBID%", String.valueOf(a.getStartingBid())); html.replace("%AGIT_AUCTION_BIDCOUNT%", String.valueOf(a.getBidders().size())); html.replace("%AGIT_AUCTION_DESC%", ClanHallManager.getInstance().getClanHallById(a.getItemId()).getDesc()); html.replace("%AGIT_LINK_BACK%", "bypass -h npc_" + getObjectId() + "_start"); html.replace("%id%", String.valueOf(a.getId())); html.replace("%objectId%", String.valueOf(getObjectId())); } else _log.warn("Auctioneer Auction null for getHasHideout : " + clan.getHideoutId()); player.sendPacket(html); return; } else if (clan.hasHideout()) { int ItemId = clan.getHideoutId(); String filename = StaticHtmPath.AuctionHtmPath + "AgitInfo.htm"; NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(filename, player); if (ClanHallManager.getInstance().getClanHallById(ItemId) != null) { html.replace("%AGIT_NAME%", ClanHallManager.getInstance().getClanHallById(ItemId).getName()); html.replace("%AGIT_OWNER_PLEDGE_NAME%", clan.getName()); html.replace("%OWNER_PLEDGE_MASTER%", clan.getLeaderName()); html.replace("%AGIT_SIZE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(ItemId).getGrade() * 10)); html.replace("%AGIT_LEASE%", String.valueOf(ClanHallManager.getInstance().getClanHallById(ItemId).getLease())); html.replace("%AGIT_LOCATION%", ClanHallManager.getInstance().getClanHallById(ItemId).getLocation()); html.replace("%AGIT_LINK_BACK%", "bypass -h npc_" + getObjectId() + "_start"); html.replace("%objectId%", String.valueOf(getObjectId())); } else _log.warn("Clan Hall ID NULL : " + ItemId + " Can be caused by concurent write in ClanHallManager"); player.sendPacket(html); return; } else if (!clan.hasHideout()) { showAuctionsList("1", player); // Force to display page 1. player.sendPacket(SystemMessageId.NO_OFFERINGS_OWN_OR_MADE_BID_FOR); return; } } private static String getPictureName(L2PcInstance plyr) { int nearestTownId = MapRegionData.getInstance().getMapRegion(plyr.getX(), plyr.getY()); String nearestTown; switch (nearestTownId) { case 5: nearestTown = "GLUDIO"; break; case 6: nearestTown = "GLUDIN"; break; case 7: nearestTown = "DION"; break; case 8: nearestTown = "GIRAN"; break; case 14: nearestTown = "RUNE"; break; case 15: nearestTown = "GODARD"; break; case 16: nearestTown = "SCHUTTGART"; break; default: nearestTown = "ADEN"; break; } return nearestTown; } }