private void doFinalAction(L1PcInstance pc, String action) { int objid = getId(); int npcid = getNpcTemplate().getNpcId(); String htmlid = null; boolean isTeleport = true; if (npcid == 50014) { // ディロン if (!pc.getInventory().checkItem(40581)) { // アンデッドのキー isTeleport = false; htmlid = "dilongn"; } } else if (npcid == 50043) { // ラムダ if (_isNowDely) { // テレポートディレイ中 isTeleport = false; } } else if (npcid == 50625) { // 古代人(Lv50クエスト古代の空間2F) if (_isNowDely) { // テレポートディレイ中 isTeleport = false; } } if (isTeleport) { // テレポート実行 try { // ミュータントアントダンジョン(君主Lv30クエスト) if (action.equalsIgnoreCase("teleport mutant-dungen")) { // 3マス以内のPc for (L1PcInstance otherPc : L1World.getInstance().getVisiblePlayer(pc, 3)) { if (otherPc.getClanId() == pc.getClanId() && otherPc.getId() != pc.getId()) { L1Teleport.teleport(otherPc, 32740, 32800, (short) 217, 5, true); } } L1Teleport.teleport(pc, 32740, 32800, (short) 217, 5, true); } // 試練のダンジョン(ウィザードLv30クエスト) else if (action.equalsIgnoreCase("teleport mage-quest-dungen")) { L1Teleport.teleport(pc, 32791, 32788, (short) 201, 5, true); } else if (action.equalsIgnoreCase("teleport 29")) { // ラムダ L1PcInstance kni = null; L1PcInstance elf = null; L1PcInstance wiz = null; // 3マス以内のPc for (L1PcInstance otherPc : L1World.getInstance().getVisiblePlayer(pc, 3)) { L1Quest quest = otherPc.getQuest(); if (otherPc.isKnight() // ナイト && quest.getStep(L1Quest.QUEST_LEVEL50) == 1) { // ディガルディン同意済み if (kni == null) { kni = otherPc; } } else if (otherPc.isElf() // エルフ && quest.getStep(L1Quest.QUEST_LEVEL50) == 1) { // ディガルディン同意済み if (elf == null) { elf = otherPc; } } else if (otherPc.isWizard() // ウィザード && quest.getStep(L1Quest.QUEST_LEVEL50) == 1) { // ディガルディン同意済み if (wiz == null) { wiz = otherPc; } } } if (kni != null && elf != null && wiz != null) { // 全クラス揃っている L1Teleport.teleport(pc, 32723, 32850, (short) 2000, 2, true); L1Teleport.teleport(kni, 32750, 32851, (short) 2000, 6, true); L1Teleport.teleport(elf, 32878, 32980, (short) 2000, 6, true); L1Teleport.teleport(wiz, 32876, 33003, (short) 2000, 0, true); TeleportDelyTimer timer = new TeleportDelyTimer(); GeneralThreadPool.getInstance().execute(timer); } } else if (action.equalsIgnoreCase("teleport barlog")) { // 古代人(Lv50クエスト古代の空間2F) L1Teleport.teleport(pc, 32755, 32844, (short) 2002, 5, true); TeleportDelyTimer timer = new TeleportDelyTimer(); GeneralThreadPool.getInstance().execute(timer); } } catch (Exception e) { } } if (htmlid != null) { // 表示するhtmlがある場合 pc.sendPackets(new S_NpcTalkReturn(objid, htmlid)); } }
@Override public void onTalkAction(L1PcInstance pc) { int objid = getId(); L1NpcTalkData talking = NpcTalkDataTable.getInstance().getTemplate(getNpcTemplate().getNpcId()); int npcid = getNpcTemplate().getNpcId(); L1Quest quest = pc.getQuest(); String htmlid = null; if (talking != null) { if (npcid == 50014) { // ディロン if (pc.isWizard()) { // ウィザード if (quest.getStep(L1Quest.QUEST_LEVEL30) == 1 && !pc.getInventory().checkItem(40579)) { // アンデッドの骨 htmlid = "dilong1"; } else { htmlid = "dilong3"; } } } else if (npcid == 70779) { // ゲートアント if (pc.getTempCharGfx() == 1037 || pc.getTempCharGfx() == 2437) { // ジャイアントアント変身 htmlid = "ants3"; } else if (pc.getTempCharGfx() == 1039 || pc.getTempCharGfx() == 2438) { // ジャイアントアントソルジャー変身 if (pc.isCrown()) { // 君主 if (quest.getStep(L1Quest.QUEST_LEVEL30) == 1) { if (pc.getInventory().checkItem(40547)) { // 住民たちの遺品 htmlid = "antsn"; } else { htmlid = "ants1"; } } else { // Step1以外 htmlid = "antsn"; } } else { // 君主以外 htmlid = "antsn"; } } } else if (npcid == 70853) { // フェアリープリンセス if (pc.isElf()) { // エルフ if (quest.getStep(L1Quest.QUEST_LEVEL30) == 1) { if (!pc.getInventory().checkItem(40592)) { // 呪われた精霊書 RandomGenerator random = RandomGeneratorFactory.getSharedRandom(); if (random.nextInt(100) < 50) { // 50%でダークマールダンジョン htmlid = "fairyp2"; } else { // ダークエルフダンジョン htmlid = "fairyp1"; } } } } } else if (npcid == 50031) { // セピア if (pc.isElf()) { // エルフ if (quest.getStep(L1Quest.QUEST_LEVEL45) == 2) { if (!pc.getInventory().checkItem(40602)) { // ブルーフルート htmlid = "sepia1"; } } } } else if (npcid == 50043) { // ラムダ if (quest.getStep(L1Quest.QUEST_LEVEL50) == L1Quest.QUEST_END) { htmlid = "ramuda2"; } else if (quest.getStep(L1Quest.QUEST_LEVEL50) == 1) { // ディガルディン同意済み if (pc.isCrown()) { // 君主 if (_isNowDely) { // テレポートディレイ中 htmlid = "ramuda4"; } else { htmlid = "ramudap1"; } } else { // 君主以外 htmlid = "ramuda1"; } } else { htmlid = "ramuda3"; } } // 歌う島のテレポーター else if (npcid == 50082) { if (pc.getLevel() < 13) { htmlid = "en0221"; } else { if (pc.isElf()) { htmlid = "en0222e"; } else if (pc.isDarkelf()) { htmlid = "en0222d"; } else { htmlid = "en0222"; } } } // バルニア else if (npcid == 50001) { if (pc.isElf()) { htmlid = "barnia3"; } else if (pc.isKnight() || pc.isCrown()) { htmlid = "barnia2"; } else if (pc.isWizard() || pc.isDarkelf()) { htmlid = "barnia1"; } } // デジェネレイト ソウル else if (npcid == 71095) { if (pc.isDarkelf()) { if (pc.getLevel() >= 50) { int lv50_step = quest.getStep(L1Quest.QUEST_LEVEL50); if (lv50_step == L1Quest.QUEST_END) { htmlid = "csoulq3"; } else if (lv50_step >= 3) { boolean find = false; for (Object objs : L1World.getInstance().getVisibleObjects(306).values()) { if (objs instanceof L1PcInstance) { L1PcInstance _pc = (L1PcInstance) objs; if (_pc != null) { // 思念のダンジョン内に他PCがいる場合 find = true; htmlid = "csoulqn"; // おまえの邪念はまだ満たされてない。 break; } } } if (!find) { htmlid = "csoulq1"; } else { htmlid = "csoulqn"; } } } } } // カレン else if (npcid == 71013) { if (pc.isDarkelf()) { if (pc.getLevel() < 13) { htmlid = "karen1"; } else { htmlid = "karen4"; } } else { htmlid = "karen2"; } } // シルベリアテレポーター イリュージョニストアシャ else if (npcid == 80173) { if (pc.isIllusionist()) { htmlid = "asha1"; } else { htmlid = "asha2"; } } // ベヒモステレポーター ドラゴンナイトピエナ else if (npcid == 80174) { if (pc.isDragonKnight()) { htmlid = "feaena1"; } else { htmlid = "feaena2"; } } // html表示 if (htmlid != null) { // htmlidが指定されている場合 pc.sendPackets(new S_NpcTalkReturn(objid, htmlid)); } else { if (pc.getLawful() < -1000) { // プレイヤーがカオティック pc.sendPackets(new S_NpcTalkReturn(talking, objid, 2)); } else { pc.sendPackets(new S_NpcTalkReturn(talking, objid, 1)); } } } else { _log.finest( (new StringBuilder()).append("No actions for npc id : ").append(objid).toString()); } }