package net.sf.l2j.gameserver.model; import java.util.StringTokenizer; import java.util.logging.Logger; import net.sf.l2j.gameserver.ItemTable; import net.sf.l2j.gameserver.serverpackets.ActionFailed; import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage; import net.sf.l2j.gameserver.templates.L2NpcTemplate; public class L2CastleChamberlainInstance extends L2NpcInstance { private static Logger _log = Logger.getLogger(L2CastleChamberlainInstance.class.getName()); private static int _castle = -1; // chamberlain castle public L2CastleChamberlainInstance(int objectId, L2NpcTemplate template) { super(objectId, template); switch(template.npcId) { case 12255: _castle = 5; // aden break; case 12252: _castle = 2; // gludio default: } } public void onBypassFeedback(L2PcInstance player, String command) { // normally, we shouldn't recive 'bypass' if talker != castle owner // only castle owner allowed to talk with chamberlain if(player.getClan().getHasCastle() != _castle) { _log.info("Player "+player.getName()+" trying to exploit castle chamberlain, ban this player!"); return; } //TODO: remove 'chat' handler, not requires overriding if (command.startsWith("Chat")) { int val = Integer.parseInt(command.substring(5)); showChatWindow(player, val); } else if(command.startsWith("manor")) // manor control { StringTokenizer st = new StringTokenizer(command); int val = Integer.parseInt(st.nextToken().substring(6)); switch(val) { case 1: // view/edit manor stats //showChatWindow(player,L2Manor.getInstance().getCropReward(_castle)); NpcHtmlMessage msg = new NpcHtmlMessage(1); msg.setHtml(L2World.getInstance().getCastle(_castle).getRewards().replace("%objectId%",String.valueOf(getObjectId()))); player.sendPacket(msg); player.sendPacket(new ActionFailed()); break; case 2: // set reward type int cropId = Integer.parseInt(st.nextToken()); int reward = Integer.parseInt(st.nextToken()); L2World.getInstance().getCastle(_castle).setRewardType(cropId,reward); break; case 3: // edit reward int crop = Integer.parseInt(st.nextToken()); int currentReward = Integer.parseInt(st.nextToken()); msg = new NpcHtmlMessage(1); msg.setHtml(pageEditManor(crop,currentReward)); player.sendPacket(msg); player.sendPacket(new ActionFailed()); break; default: _log.info("Invalid bypass "+command+" by "+player.getName()+", hack?"); } } else if(command.startsWith("tax")) // tax rates control { StringTokenizer st = new StringTokenizer(command); int val = Integer.parseInt(st.nextToken().substring(4)); switch(val) { case 1: // show current tax rates int currentRate = L2World.getInstance().getCastle(_castle).getTaxRate(); NpcHtmlMessage msg = new NpcHtmlMessage(1); msg.setHtml("Current tax rate: "+currentRate+""); player.sendPacket(msg); player.sendPacket(new ActionFailed()); break; case 2: // adjust tax rates int newRate = Integer.parseInt(st.nextToken()); L2World.getInstance().getCastle(_castle).setTaxRate(newRate); break; default: _log.info("Invalid bypass "+command+" by "+player.getName()+", hack?"); } } else if(command.startsWith("move_out")) // move guests out of castle { } } public String getHtmlPath(int npcId, int val) { if(val !=0 ) return "data/html/chamberlain/" + npcId + "-" + val + ".htm"; else return "data/html/chamberlain/" + npcId + ".htm"; } public String pageEditManor(int crop, int current) { String text = ""; text += ""; text += "
CropType I rewardType II reward
"; String cropName = ItemTable.getInstance().getTemplate(crop).getName(); String reward1Name = ItemTable.getInstance().getTemplate(L2Manor.getInstance().getRewardItem(crop,1)).getName(); String reward2Name = ItemTable.getInstance().getTemplate(L2Manor.getInstance().getRewardItem(crop,2)).getName(); int reward1Amount = L2Manor.getInstance().getRewardAmount(crop,1); int reward2Amount = L2Manor.getInstance().getRewardAmount(crop,2); text += ""; text += "
"+cropName+""+reward1Name+"/"+reward1Amount+""+reward2Name+"/"+reward2Amount+"
"; return text; } }