/* * 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 silentium.gameserver.data.html.StaticHtmPath; import silentium.gameserver.model.actor.L2Character; import silentium.gameserver.model.entity.TvTEvent; import silentium.gameserver.model.entity.sevensigns.SevenSigns; import silentium.gameserver.network.serverpackets.ActionFailed; import silentium.gameserver.network.serverpackets.NpcHtmlMessage; import silentium.gameserver.templates.chars.L2NpcTemplate; import silentium.gameserver.templates.skills.L2EffectType; /** * @author Kerberos | ZaKaX */ public class L2CastleMagicianInstance 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 L2CastleMagicianInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } @Override public void showChatWindow(L2PcInstance player, int val) { player.sendPacket(ActionFailed.STATIC_PACKET); String filename = StaticHtmPath.CastleMagicanHtmPath + "magician-no.htm"; int condition = validateCondition(player); if (condition > COND_ALL_FALSE) { if (condition == COND_BUSY_BECAUSE_OF_SIEGE) filename = StaticHtmPath.CastleMagicanHtmPath + "magician-busy.htm"; // Busy because of siege else if (condition == COND_OWNER) // Clan owns castle { if (val == 0) filename = StaticHtmPath.CastleMagicanHtmPath + "magician.htm"; else filename = StaticHtmPath.CastleMagicanHtmPath + "magician-" + val + ".htm"; } } NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile(filename, player); html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); } @Override public void onBypassFeedback(L2PcInstance player, String command) { if (command.startsWith("Chat")) { int val = 0; try { val = Integer.parseInt(command.substring(5)); } catch (IndexOutOfBoundsException ioobe) { } catch (NumberFormatException nfe) { } showChatWindow(player, val); return; } else if (command.equals("gotoleader")) { if (player.getClan() != null) { L2PcInstance clanLeader = player.getClan().getLeader().getPlayerInstance(); if (clanLeader == null) return; if (clanLeader.getFirstEffect(L2EffectType.CLAN_GATE) != null) { if (!validateGateCondition(clanLeader, player)) return; player.teleToLocation(clanLeader.getX(), clanLeader.getY(), clanLeader.getZ(), false); return; } String filename = StaticHtmPath.CastleMagicanHtmPath + "magician-nogate.htm"; showChatWindow(player, filename); } return; } else super.onBypassFeedback(player, command); } protected int validateCondition(L2PcInstance player) { if (getCastle() != null && getCastle().getCastleId() > 0) { if (player.getClan() != null) { if (getCastle().getZone().isActive()) return COND_BUSY_BECAUSE_OF_SIEGE; // Busy because of siege else if (getCastle().getOwnerId() == player.getClanId()) // Clan owns castle return COND_OWNER; } } return COND_ALL_FALSE; } private static final boolean validateGateCondition(L2PcInstance clanLeader, L2PcInstance player) { if (clanLeader.isAlikeDead() || clanLeader.isInStoreMode() || clanLeader.isRooted() || clanLeader.isInCombat() || clanLeader.isInOlympiadMode() || clanLeader.isFestivalParticipant() || clanLeader.inObserverMode() || clanLeader.isInsideZone(L2Character.ZONE_NOSUMMONFRIEND)) { player.sendMessage("Couldn't teleport to clan leader. The requirements was not meet."); return false; } if (player.isIn7sDungeon()) { final int targetCabal = SevenSigns.getInstance().getPlayerCabal(clanLeader.getObjectId()); if (SevenSigns.getInstance().isSealValidationPeriod()) { if (targetCabal != SevenSigns.getInstance().getCabalHighestScore()) { player.sendMessage("Couldn't teleport to clan leader. The requirements was not meet."); return false; } } else { if (targetCabal == SevenSigns.CABAL_NULL) { player.sendMessage("Couldn't teleport to clan leader. The requirements was not meet."); return false; } } } if (!TvTEvent.onEscapeUse(player.getObjectId())) { player.sendMessage("You on TvT Event, teleporting disabled."); return false; } if (!TvTEvent.onEscapeUse(clanLeader.getObjectId())) { // TODO: Need retail message if there's one. player.sendMessage("Couldn't teleport to clan leader. The requirements was not meet."); return false; } return true; } }