/* * 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.configs.NPCConfig; import silentium.gameserver.data.html.StaticHtmPath; import silentium.gameserver.model.entity.sevensigns.SevenSigns; import silentium.gameserver.network.SystemMessageId; import silentium.gameserver.network.serverpackets.ActionFailed; import silentium.gameserver.network.serverpackets.NpcHtmlMessage; import silentium.gameserver.templates.chars.L2NpcTemplate; /** * This instance leads the behavior of Wyvern Managers.<br> * Those NPCs allow Castle Lords to mount a wyvern in return for B Crystals.<br> * Three configs exist so far :<br> * <ul> * <li>WYVERN_ALLOW_UPGRADER : spawn instances of Wyvern Manager through the world, or no;</li> * <li>WYVERN_REQUIRED_LEVEL : the strider's required level;</li> * <li>WYVERN_REQUIRED_CRYSTALS : the B-crystals' required amount;</li> * </ul> * * @author Tryskell */ public class L2WyvernManagerInstance extends L2CastleChamberlainInstance { final private int neededCrystals = NPCConfig.WYVERN_REQUIRED_CRYSTALS; final private int requiredLevel = NPCConfig.WYVERN_REQUIRED_LEVEL; public L2WyvernManagerInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } @Override public void onBypassFeedback(L2PcInstance player, String command) { if (player.getCurrentFolkNPC().getObjectId() != getObjectId()) return; if (command.startsWith("RideWyvern")) { String val = "2"; if (player.isClanLeader()) { // Verify if Dusk own Seal of Strife (if true, CLs can't mount wyvern). if (SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_STRIFE) == SevenSigns.CABAL_DUSK) val = "3"; // If player is mounted on a strider else if (player.isMounted() && (player.getMountNpcId() == 12526 || player.getMountNpcId() == 12527 || player.getMountNpcId() == 12528)) { // Check for strider level if (player.getMountLevel() < requiredLevel) val = "6"; // Check for items consumption else if (player.destroyItemByItemId("Wyvern", 1460, neededCrystals, player, true)) { player.dismount(); if (player.mount(12621, 0, true)) val = "4"; } else val = "5"; } else { player.sendPacket(SystemMessageId.YOU_MAY_ONLY_RIDE_WYVERN_WHILE_RIDING_STRIDER); val = "1"; } } sendHtm(player, val); } else if (command.startsWith("Chat")) { String val = "1"; // Default send you to error HTM. try { val = command.substring(5); } catch (IndexOutOfBoundsException ioobe) { } sendHtm(player, val); } else super.onBypassFeedback(player, command); } @Override public void showChatWindow(L2PcInstance player) { String val = "0a"; // Default value : player's clan doesn't own castle. int condition = validateCondition(player); if (condition > COND_ALL_FALSE) { if (condition == COND_OWNER) // Clan owns castle && player is CL ; send the good HTM. { if (player.isFlying()) // Already mounted on Wyvern val = "4"; else val = "0"; // Initial screen } else if (condition == COND_CLAN_MEMBER) // Good clan, but player isn't a CL. val = "2"; } sendHtm(player, val); } private void sendHtm(L2PcInstance player, String val) { NpcHtmlMessage html = new NpcHtmlMessage(1); html.setFile(StaticHtmPath.WyvernManagerHtmPath + "wyvernmanager-" + val + ".htm", player); html.replace("%objectId%", String.valueOf(getObjectId())); html.replace("%npcname%", getName()); html.replace("%wyvern_level%", String.valueOf(requiredLevel)); html.replace("%needed_crystals%", String.valueOf(neededCrystals)); player.sendPacket(html); player.sendPacket(ActionFailed.STATIC_PACKET); } }