Ejemplo n.º 1
0
 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();
     }
   }
 }
Ejemplo n.º 2
0
  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);
  }
Ejemplo n.º 3
0
  @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;
  }
Ejemplo n.º 4
0
 @Override
 public synchronized void deleteMe() {
   _master.getFollowerList().remove(getId());
   getMap().setPassable(getLocation(), true);
   super.deleteMe();
 }