/* * 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.StringTokenizer; import silentium.gameserver.TradeController; import silentium.gameserver.data.html.StaticHtmPath; import silentium.gameserver.model.L2Clan; import silentium.gameserver.model.L2TradeList; import silentium.gameserver.network.serverpackets.BuyList; import silentium.gameserver.network.serverpackets.NpcHtmlMessage; import silentium.gameserver.templates.chars.L2NpcTemplate; public final class L2MercManagerInstance 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_OWNER = 2; public L2MercManagerInstance(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; if (condition == COND_BUSY_BECAUSE_OF_SIEGE) return; else if (condition == COND_OWNER) { StringTokenizer st = new StringTokenizer(command, " "); String actualCommand = st.nextToken(); // Get actual command String val = ""; if (st.countTokens() >= 1) val = st.nextToken(); if (actualCommand.equalsIgnoreCase("hire")) { if (val.isEmpty()) return; showBuyWindow(player, Integer.parseInt(val)); return; } } super.onBypassFeedback(player, command); } private void showBuyWindow(L2PcInstance player, int val) { player.tempInventoryDisable(); _log.trace("Showing buylist"); L2TradeList list = TradeController.getInstance().getBuyList(val); if ((list != null) && (list.getNpcId().equals(String.valueOf(getNpcId())))) { BuyList bl = new BuyList(list, player.getAdena(), 0); player.sendPacket(bl); } } @Override public void showChatWindow(L2PcInstance player) { String filename = StaticHtmPath.MercManagerHtmPath + "mercmanager-no.htm"; int condition = validateCondition(player); if (condition == COND_BUSY_BECAUSE_OF_SIEGE) filename = StaticHtmPath.MercManagerHtmPath + "mercmanager-busy.htm"; // Busy because of siege else if (condition == COND_OWNER) // Clan owns castle filename = StaticHtmPath.MercManagerHtmPath + "mercmanager.htm"; // Owner message window NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile(filename, player); html.replace("%objectId%", String.valueOf(getObjectId())); html.replace("%npcId%", String.valueOf(getNpcId())); html.replace("%npcname%", getName()); player.sendPacket(html); } private int validateCondition(L2PcInstance player) { if (getCastle() != null && getCastle().getCastleId() > 0) { if (player.getClan() != null) { if (getCastle().getSiege().getIsInProgress()) return COND_BUSY_BECAUSE_OF_SIEGE; // Busy because of siege else if (getCastle().getOwnerId() == player.getClanId()) // Clan owns castle { if ((player.getClanPrivileges() & L2Clan.CP_CS_MERCENARIES) == L2Clan.CP_CS_MERCENARIES) return COND_OWNER; } } } return COND_ALL_FALSE; } }