/* * Copyright (C) 2004-2015 L2J DataPack * * This file is part of L2J DataPack. * * L2J DataPack 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. * * L2J DataPack 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 . */ package ai.npc.WyvernManager; import java.util.HashMap; import java.util.Map; import ai.npc.AbstractNpcAI; import com.l2jserver.Config; import com.l2jserver.gameserver.SevenSigns; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.entity.Fort; import com.l2jserver.gameserver.model.entity.clanhall.SiegableHall; import com.l2jserver.gameserver.util.Util; /** * Wyvern Manager * @author xban1x */ public final class WyvernManager extends AbstractNpcAI { private enum ManagerType { CASTLE, CLAN_HALL, FORT, } // Misc private static final int CRYSTAL_B_GRADE = 1460; private static final int WYVERN = 12621; private static final int WYVERN_FEE = 25; private static final int STRIDER_LVL = 55; private static final int[] STRIDERS = { 12526, 12527, 12528, 16038, 16039, 16040, 16068, 13197 }; // NPCS private static final Map MANAGERS = new HashMap<>(); static { MANAGERS.put(35101, ManagerType.CASTLE); MANAGERS.put(35143, ManagerType.CASTLE); MANAGERS.put(35185, ManagerType.CASTLE); MANAGERS.put(35227, ManagerType.CASTLE); MANAGERS.put(35275, ManagerType.CASTLE); MANAGERS.put(35317, ManagerType.CASTLE); MANAGERS.put(35364, ManagerType.CASTLE); MANAGERS.put(35510, ManagerType.CASTLE); MANAGERS.put(35536, ManagerType.CASTLE); MANAGERS.put(35419, ManagerType.CLAN_HALL); MANAGERS.put(35638, ManagerType.CLAN_HALL); MANAGERS.put(36457, ManagerType.FORT); MANAGERS.put(36458, ManagerType.FORT); MANAGERS.put(36459, ManagerType.FORT); MANAGERS.put(36460, ManagerType.FORT); MANAGERS.put(36461, ManagerType.FORT); MANAGERS.put(36462, ManagerType.FORT); MANAGERS.put(36463, ManagerType.FORT); MANAGERS.put(36464, ManagerType.FORT); MANAGERS.put(36465, ManagerType.FORT); MANAGERS.put(36466, ManagerType.FORT); MANAGERS.put(36467, ManagerType.FORT); MANAGERS.put(36468, ManagerType.FORT); MANAGERS.put(36469, ManagerType.FORT); MANAGERS.put(36470, ManagerType.FORT); MANAGERS.put(36471, ManagerType.FORT); MANAGERS.put(36472, ManagerType.FORT); MANAGERS.put(36473, ManagerType.FORT); MANAGERS.put(36474, ManagerType.FORT); MANAGERS.put(36475, ManagerType.FORT); MANAGERS.put(36476, ManagerType.FORT); MANAGERS.put(36477, ManagerType.FORT); } private WyvernManager() { super(WyvernManager.class.getSimpleName(), "ai/npc"); addStartNpc(MANAGERS.keySet()); addTalkId(MANAGERS.keySet()); addFirstTalkId(MANAGERS.keySet()); } private String mountWyvern(L2Npc npc, L2PcInstance player) { if (player.isMounted() && (player.getMountLevel() >= STRIDER_LVL) && Util.contains(STRIDERS, player.getMountNpcId())) { if (isOwnerClan(npc, player) && (getQuestItemsCount(player, CRYSTAL_B_GRADE) >= WYVERN_FEE)) { takeItems(player, CRYSTAL_B_GRADE, WYVERN_FEE); player.dismount(); player.mount(WYVERN, 0, true); return "wyvernmanager-04.html"; } return replacePart(player.getHtmlPrefix(), "wyvernmanager-06.html"); } return replacePart(player.getHtmlPrefix(), "wyvernmanager-05.html"); } private boolean isOwnerClan(L2Npc npc, L2PcInstance player) { if (!player.isClanLeader()) { return false; } switch (MANAGERS.get(npc.getId())) { case CASTLE: { if (npc.getCastle() != null) { return player.getClanId() == npc.getCastle().getOwnerId(); } return false; } case CLAN_HALL: { if (npc.getConquerableHall() != null) { return player.getClanId() == npc.getConquerableHall().getOwnerId(); } return false; } case FORT: { final Fort fort = npc.getFort(); if ((fort != null) && (fort.getOwnerClan() != null)) { return player.getClanId() == npc.getFort().getOwnerClan().getId(); } return false; } default: { return false; } } } private boolean isInSiege(L2Npc npc) { switch (MANAGERS.get(npc.getId())) { case CASTLE: { return npc.getCastle().getZone().isActive(); } case CLAN_HALL: { SiegableHall hall = npc.getConquerableHall(); return (hall != null) ? hall.isInSiege() : npc.getCastle().getSiege().isInProgress(); } case FORT: { return npc.getFort().getZone().isActive(); } default: { return false; } } } private String getResidenceName(L2Npc npc) { switch (MANAGERS.get(npc.getId())) { case CASTLE: { return npc.getCastle().getName(); } case CLAN_HALL: { return npc.getConquerableHall().getName(); } case FORT: { return npc.getFort().getName(); } default: { return null; } } } private String replaceAll(L2Npc npc, String htmlPrefix) { return replacePart(htmlPrefix, "wyvernmanager-01.html").replace("%residence_name%", getResidenceName(npc)); } private String replacePart(String htmlPrefix, String htmlFile) { return getHtm(htmlPrefix, htmlFile).replace("%wyvern_fee%", String.valueOf(WYVERN_FEE)).replace("%strider_level%", String.valueOf(STRIDER_LVL)); } @Override public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { String htmltext = null; switch (event) { case "Return": { if (!isOwnerClan(npc, player)) { htmltext = "wyvernmanager-02.html"; } else if (Config.ALLOW_WYVERN_ALWAYS) { htmltext = replaceAll(npc, player.getHtmlPrefix()); } else if ((MANAGERS.get(npc.getId()) == ManagerType.CASTLE) && SevenSigns.getInstance().isSealValidationPeriod() && (SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_STRIFE) == SevenSigns.CABAL_DUSK)) { htmltext = "wyvernmanager-dusk.html"; } else { htmltext = replaceAll(npc, player.getHtmlPrefix()); } break; } case "Help": { htmltext = MANAGERS.get(npc.getId()) == ManagerType.CASTLE ? replacePart(player.getHtmlPrefix(), "wyvernmanager-03.html") : replacePart(player.getHtmlPrefix(), "wyvernmanager-03b.html"); break; } case "RideWyvern": { if (!Config.ALLOW_WYVERN_ALWAYS) { if (!Config.ALLOW_WYVERN_DURING_SIEGE && (isInSiege(npc) || player.isInSiege())) { player.sendMessage("You cannot summon wyvern while in siege."); return null; } if ((MANAGERS.get(npc.getId()) == ManagerType.CASTLE) && SevenSigns.getInstance().isSealValidationPeriod() && ((SevenSigns.getInstance()).getSealOwner(SevenSigns.SEAL_STRIFE) == SevenSigns.CABAL_DUSK)) { htmltext = "wyvernmanager-dusk.html"; } else { htmltext = mountWyvern(npc, player); } } else { htmltext = mountWyvern(npc, player); } break; } } return htmltext; } @Override public String onFirstTalk(L2Npc npc, L2PcInstance player) { String htmltext = null; if (!isOwnerClan(npc, player)) { htmltext = "wyvernmanager-02.html"; } else { if (Config.ALLOW_WYVERN_ALWAYS) { htmltext = replaceAll(npc, player.getHtmlPrefix()); } else { if ((MANAGERS.get(npc.getId()) == ManagerType.CASTLE) && SevenSigns.getInstance().isSealValidationPeriod() && (SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_STRIFE) == SevenSigns.CABAL_DUSK)) { htmltext = "wyvernmanager-dusk.html"; } else { htmltext = replaceAll(npc, player.getHtmlPrefix()); } } } return htmltext; } public static void main(String[] args) { new WyvernManager(); } }