public void spawn(int npcId, int X, int Y, int H, short Map) { L1Npc l1npc = NpcTable.getInstance().getTemplate(npcId); if (l1npc != null) { L1NpcInstance mob = null; try { String implementationName = l1npc.getImpl(); Constructor<?> _constructor = Class.forName( (new StringBuilder()) .append("l1j.server.server.model.Instance.") .append(implementationName) .append("Instance") .toString()) .getConstructors()[0]; mob = (L1NpcInstance) _constructor.newInstance(new Object[] {l1npc}); mob.setId(IdFactory.getInstance().nextId()); mob.setX(X); mob.setY(Y); mob.setHomeX(X); mob.setHomeY(Y); mob.setMap(Map); mob.setHeading(H); L1World.getInstance().storeObject(mob); L1World.getInstance().addVisibleObject(mob); L1Object object = L1World.getInstance().findObject(mob.getId()); L1QuestInstance newnpc = (L1QuestInstance) object; newnpc.onNpcAI(); newnpc.turnOnOffLight(); newnpc.startChat(L1NpcInstance.CHAT_TIMING_APPEARANCE); // チャット開始 } catch (Exception e) { e.printStackTrace(); } } }
public L1FollowerInstance(L1Npc template, L1NpcInstance target, L1Character master) { super(template); _master = master; setId(IdFactory.getInstance().nextId()); setMaster(master); setX(target.getX()); setY(target.getY()); setMap(target.getMapId()); setHeading(target.getHeading()); setLightSize(target.getLightSize()); target.setParalyzed(true); target.setDead(true); target.deleteMe(); L1World.getInstance().storeObject(this); L1World.getInstance().addVisibleObject(this); for (L1PcInstance pc : L1World.getInstance().getRecognizePlayer(this)) { onPerceive(pc); } startAI(); master.addFollower(this); }
@Override public boolean noTarget() { for (L1Object object : L1World.getInstance().getVisibleObjects(this)) { if (object instanceof L1NpcInstance) { L1NpcInstance npc = (L1NpcInstance) object; if ((npc.getNpcTemplate().get_npcId() == 70740 // ディカルデンソルジャー ) && (getNpcTemplate().get_npcId() == 71093)) { // 調査員 setParalyzed(true); L1PcInstance pc = (L1PcInstance) _master; if (!pc.getInventory().checkItem(40593)) { createNewItem(pc, 40593, 1); } deleteMe(); return true; } else if ((npc.getNpcTemplate().get_npcId() == 70811 // 萊拉 ) && (getNpcTemplate().get_npcId() == 71094)) { // 安迪亞 setParalyzed(true); L1PcInstance pc = (L1PcInstance) _master; if (!pc.getInventory().checkItem(40582) && !pc.getInventory().checkItem(40583)) { // 身上無安迪亞之袋、安迪亞之信 createNewItem(pc, 40582, 1); } deleteMe(); return true; } else if ((npc.getNpcTemplate().get_npcId() == 71061 // カドモス ) && (getNpcTemplate().get_npcId() == 71062)) { // カミット if (getLocation().getTileLineDistance(_master.getLocation()) < 3) { L1PcInstance pc = (L1PcInstance) _master; if (((pc.getX() >= 32448) && (pc.getX() <= 32452)) // カドモス周辺座標 && ((pc.getY() >= 33048) && (pc.getY() <= 33052)) && (pc.getMapId() == 440)) { setParalyzed(true); if (!pc.getInventory().checkItem(40711)) { createNewItem(pc, 40711, 1); pc.getQuest().set_step(L1Quest.QUEST_CADMUS, 3); } deleteMe(); return true; } } } else if ((npc.getNpcTemplate().get_npcId() == 71074 // リザードマンの長老 ) && (getNpcTemplate().get_npcId() == 71075)) { // 疲れ果てたリザードマンファイター if (getLocation().getTileLineDistance(_master.getLocation()) < 3) { L1PcInstance pc = (L1PcInstance) _master; if (((pc.getX() >= 32731) && (pc.getX() <= 32735)) // リザードマン長老周辺座標 && ((pc.getY() >= 32854) && (pc.getY() <= 32858)) && (pc.getMapId() == 480)) { setParalyzed(true); if (!pc.getInventory().checkItem(40633)) { createNewItem(pc, 40633, 1); pc.getQuest().set_step(L1Quest.QUEST_LIZARD, 2); } deleteMe(); return true; } } } else if ((npc.getNpcTemplate().get_npcId() == 70964 // バッシュ ) && (getNpcTemplate().get_npcId() == 70957)) { // ロイ if (getLocation().getTileLineDistance(_master.getLocation()) < 3) { L1PcInstance pc = (L1PcInstance) _master; if (((pc.getX() >= 32917) && (pc.getX() <= 32921)) // バッシュ周辺座標 && ((pc.getY() >= 32974) && (pc.getY() <= 32978)) && (pc.getMapId() == 410)) { setParalyzed(true); createNewItem(pc, 41003, 1); pc.getQuest().set_step(L1Quest.QUEST_ROI, 0); deleteMe(); return true; } } } else if ((npc.getNpcTemplate().get_npcId() == 71114) && (getNpcTemplate().get_npcId() == 81350)) { // 迪嘉勒廷的女間諜 if (getLocation().getTileLineDistance(_master.getLocation()) < 15) { L1PcInstance pc = (L1PcInstance) _master; if (((pc.getX() >= 32542) && (pc.getX() <= 32585)) && ((pc.getY() >= 32656) && (pc.getY() <= 32698)) && (pc.getMapId() == 400)) { setParalyzed(true); createNewItem(pc, 49163, 1); pc.getQuest().set_step(4, 4); deleteMe(); return true; } } } } } if (_master.isDead() || (getLocation().getTileLineDistance(_master.getLocation()) > 10)) { setParalyzed(true); spawn(getNpcTemplate().get_npcId(), getX(), getY(), getHeading(), getMapId()); deleteMe(); return true; } else if ((_master != null) && (_master.getMapId() == getMapId())) { if (getLocation().getTileLineDistance(_master.getLocation()) > 2) { setDirectionMove(moveDirection(_master.getX(), _master.getY())); setSleepTime(calcSleepTime(getPassispeed(), MOVE_SPEED)); } } return false; }
@Override public synchronized void deleteMe() { _master.getFollowerList().remove(getId()); getMap().setPassable(getLocation(), true); super.deleteMe(); }