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;
}
}