예제 #1
0
  public C_PetMenu(byte abyte0[], LineageClient clientthread) throws Exception {
    super(abyte0);

    int petId = readD();

    L1PetInstance pet = (L1PetInstance) L1World.getInstance().findObject(petId);
    L1PcInstance pc = clientthread.getActiveChar();

    if (pet != null && pc != null) {
      pc.sendPackets(new S_PetInventory(pet));
    }
  }
예제 #2
0
  public C_SoldierGive(byte abyte0[], LineageClient clientthread) {
    super(abyte0);

    // SoldierGiveSelect.java 여야 하지만 길어서 셀렉트는 생략.
    int objid = readD(); // 말 건 npc id
    int type = readH(); // 선택

    L1PcInstance pc = clientthread.getActiveChar();
    if (pc == null) {
      return;
    }
    int castle_id = pc.getClan().getCastleId();
    L1Soldier soldier = SoldierTable.getInstance().getSoldierTable(castle_id);

    int count = 0;

    switch (type) {
      case 0:
        if (soldier.getSoldier1() <= 0) {
          return;
        } else {
          count = soldier.getSoldier1();
        }
        break;
      case 1:
        if (soldier.getSoldier2() <= 0) {
          return;
        } else {
          count = soldier.getSoldier2();
        }
        break;
      case 2:
        if (soldier.getSoldier3() <= 0) {
          return;
        } else {
          count = soldier.getSoldier3();
        }
        break;
      case 3:
        if (soldier.getSoldier4() <= 0) {
          return;
        } else {
          count = soldier.getSoldier4();
        }
        break;
      default:
        break;
    }

    for (L1Object obj : L1World.getInstance().getVisibleObjects(pc, 1)) {
      if (obj instanceof L1PcInstance) {
        int sumX = pc.getX() - obj.getX();
        int sumY = pc.getY() - obj.getY();

        L1PcInstance target = (L1PcInstance) obj;
        if (sumX == 1 && sumY == -2) {
          send(pc, target, objid, type, count);
          break;
        } else if (sumX == 0 && sumY == -1) {
          send(pc, target, objid, type, count);
          break;
        } else if (sumX == -1 && sumY == -1) {
          send(pc, target, objid, type, count);
          break;
        } else {
          send(pc, pc, objid, type, count);
        }
      } else {
        send(pc, pc, objid, type, count);
      }
    }
  }
  public C_DeleteInventoryItem(byte[] decrypt, LineageClient client) {
    super(decrypt);
    if (client == null) {
      return;
    }
    int itemObjectId = readD();
    int count = readD(); // 추가
    L1PcInstance pc = client.getActiveChar();
    L1ItemInstance item = pc.getInventory().getItem(itemObjectId);

    // 삭제하려고 한 아이템이 서버상에 없는 경우
    if (item == null) {
      return;
    }
    if (item.getItem().isCantDelete()) {
      pc.sendPackets(new S_ServerMessage(125));
      return;
    }
    if (item.isEquipped()) {
      // \f1삭제할 수 없는 아이템이나 장비 하고 있는 아이템은 버릴 수 없습니다.
      pc.sendPackets(new S_ServerMessage(125));
      return;
    }
    if (!pc.isGm()
        && (item.getItemId() >= 0
            && (item.getItemId() == 46115 // 마빈
                || item.getItemId() == 46116 // 구슬조각
                || item.getItemId() == 46118 // 구슬조각
                || item.getItemId() == 4500011 // 서버정보
                || item.getItemId() == 41159 // 서버정보
                || item.getItemId() == 46193))) { // 생존외침
      pc.sendPackets(new S_ServerMessage(210, item.getItem().getName()));
      return;
    }
    // if (item.getBless() >= 128) {//봉인템삭제가능
    // pc.sendPackets(new S_ServerMessage(210, item.getItem().getName())); // \f1%0은
    // 버리거나
    // 또는
    // 타인에게
    // 양일을
    // 할 수
    // 없습니다.
    // return;
    // }

    Object[] petlist = pc.getPetList().values().toArray();
    L1PetInstance pet = null;
    for (Object petObject : petlist) {
      if (petObject instanceof L1PetInstance) {
        pet = (L1PetInstance) petObject;
        if (item.getId() == pet.getItemObjId()) {
          // \f1%0은 버리거나 또는 타인에게 양일을 할 수 없습니다.
          pc.sendPackets(new S_ServerMessage(210, item.getItem().getName()));
          return;
        }
      }
    }
    CodeLogger.getInstance().oblog("인벤삭제", pc.getName(), item, item.getCount());
    // eva.LogObserverAppend("템삭제","<"+pc.getName()+">"+item.getName()
    // +"(+"+item.getEnchantLevel()+")"+"[갯수]"+" ("+item.getCount()+")"); // 추가
    eva.LogObserverAppend("템삭제", pc.getName(), item, item.getCount(), itemObjectId);
    if (count == 0) count = item.getCount();
    pc.getInventory().removeItem(item, count);
    pc.getLight().turnOnOffLight();
  }