package silentium.gameserver.model.actor.instance; import silentium.gameserver.data.html.StaticHtmPath; import silentium.gameserver.model.L2Clan; import silentium.gameserver.network.SystemMessageId; import silentium.gameserver.network.serverpackets.ActionFailed; import silentium.gameserver.network.serverpackets.EnchantResult; import silentium.gameserver.network.serverpackets.NpcHtmlMessage; import silentium.gameserver.network.serverpackets.WareHouseDepositList; import silentium.gameserver.network.serverpackets.WareHouseWithdrawalList; import silentium.gameserver.templates.chars.L2NpcTemplate; /** * @author l3x */ public class L2CastleWarehouseInstance extends L2NpcInstance { protected static final int COND_ALL_FALSE = 0; protected static final int COND_BUSY_BECAUSE_OF_SIEGE = 1; protected static final int COND_OWNER = 2; public L2CastleWarehouseInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } @Override public boolean isWarehouse() { return true; } private static void showRetrieveWindow(L2PcInstance player) { player.sendPacket(ActionFailed.STATIC_PACKET); player.setActiveWarehouse(player.getWarehouse()); if (player.getActiveWarehouse().getSize() == 0) { player.sendPacket(SystemMessageId.NO_ITEM_DEPOSITED_IN_WH); return; } player.sendPacket(new WareHouseWithdrawalList(player, WareHouseWithdrawalList.PRIVATE)); } private static void showDepositWindow(L2PcInstance player) { player.sendPacket(ActionFailed.STATIC_PACKET); player.setActiveWarehouse(player.getWarehouse()); player.tempInventoryDisable(); player.sendPacket(new WareHouseDepositList(player, WareHouseDepositList.PRIVATE)); } private static void showDepositWindowClan(L2PcInstance player) { player.sendPacket(ActionFailed.STATIC_PACKET); if (player.getClan() != null) { if (player.getClan().getLevel() == 0) player.sendPacket(SystemMessageId.ONLY_LEVEL_1_CLAN_OR_HIGHER_CAN_USE_WAREHOUSE); else { if ((player.getClanPrivileges() & L2Clan.CP_CL_VIEW_WAREHOUSE) != L2Clan.CP_CL_VIEW_WAREHOUSE) player.sendPacket(SystemMessageId.ONLY_CLAN_LEADER_CAN_RETRIEVE_ITEMS_FROM_CLAN_WAREHOUSE); player.setActiveWarehouse(player.getClan().getWarehouse()); player.tempInventoryDisable(); player.sendPacket(new WareHouseDepositList(player, WareHouseDepositList.CLAN)); } } } private static void showWithdrawWindowClan(L2PcInstance player) { player.sendPacket(ActionFailed.STATIC_PACKET); if ((player.getClanPrivileges() & L2Clan.CP_CL_VIEW_WAREHOUSE) != L2Clan.CP_CL_VIEW_WAREHOUSE) { player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_USE_CLAN_WAREHOUSE); return; } if (player.getClan().getLevel() == 0) player.sendPacket(SystemMessageId.ONLY_LEVEL_1_CLAN_OR_HIGHER_CAN_USE_WAREHOUSE); else { player.setActiveWarehouse(player.getClan().getWarehouse()); player.sendPacket(new WareHouseWithdrawalList(player, WareHouseWithdrawalList.CLAN)); } } @Override public void onBypassFeedback(L2PcInstance player, String command) { if (player.isProcessingTransaction()) { player.sendPacket(SystemMessageId.ALREADY_TRADING); return; } if (player.getActiveEnchantItem() != null) { player.setActiveEnchantItem(null); player.sendPacket(EnchantResult.CANCELLED); player.sendPacket(SystemMessageId.ENCHANT_SCROLL_CANCELLED); } if (command.startsWith("WithdrawP")) showRetrieveWindow(player); else if (command.equals("DepositP")) showDepositWindow(player); else if (command.equals("WithdrawC")) showWithdrawWindowClan(player); else if (command.equals("DepositC")) showDepositWindowClan(player); else if (command.startsWith("Chat")) { int val = 0; try { val = Integer.parseInt(command.substring(5)); } catch (IndexOutOfBoundsException ioobe) { } catch (NumberFormatException nfe) { } showChatWindow(player, val); } else super.onBypassFeedback(player, command); } @Override public void showChatWindow(L2PcInstance player, int val) { player.sendPacket(ActionFailed.STATIC_PACKET); String filename = StaticHtmPath.CastleWarehouseHtmPath + "castlewarehouse-no.htm"; int condition = validateCondition(player); if (condition > COND_ALL_FALSE) { if (condition == COND_BUSY_BECAUSE_OF_SIEGE) filename = StaticHtmPath.CastleWarehouseHtmPath + "castlewarehouse-busy.htm"; else if (condition == COND_OWNER) { if (val == 0) filename = StaticHtmPath.CastleWarehouseHtmPath + "castlewarehouse.htm"; else filename = StaticHtmPath.CastleWarehouseHtmPath + "castlewarehouse-" + val + ".htm"; } } NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile(filename, player); html.replace("%objectId%", String.valueOf(getObjectId())); html.replace("%npcname%", getName()); player.sendPacket(html); } protected int validateCondition(L2PcInstance player) { if (getCastle() != null && getCastle().getCastleId() > 0) { if (player.getClan() != null) { if (getCastle().getSiege().getIsInProgress()) return COND_BUSY_BECAUSE_OF_SIEGE; else if (getCastle().getOwnerId() == player.getClanId()) return COND_OWNER; } } return COND_ALL_FALSE; } }