コード例 #1
0
  private static void storeItem(PcInstance pc, ItemInstance item) {
    LsimulatorInventory inventory;

    if (pc.getInventory().checkAddItem(item, item.getCount()) == LsimulatorInventory.OK) {
      inventory = pc.getInventory();
    } else {
      // 持てない場合は地面に落とす 処理のキャンセルはしない(不正防止)
      inventory = LsimulatorWorld.getInstance().getInventory(pc.getLocation());
    }
    inventory.storeItem(item);
    pc.sendPackets(new S_ServerMessage(403, item.getLogName())); // %0を手に入れました。
  }
コード例 #2
0
  /**
   * TreasureBoxを開けるPCにアイテムを入手させる。PCがアイテムを持ちきれなかった場合は アイテムは地面に落ちる。
   *
   * @param pc - TreasureBoxを開けるPC
   * @return 開封した結果何らかのアイテムが出てきた場合はtrueを返す。 持ちきれず地面に落ちた場合もtrueになる。
   */
  public boolean open(PcInstance pc) {
    ItemInstance item = null;

    if (getType().equals(TYPE.SPECIFIC)) {
      // 出るアイテムが決まっているもの
      for (Item each : getItems()) {
        item = ItemTable.getInstance().createItem(each.getItemId());
        item.setEnchantLevel(each.getEnchant()); // Enchant Feature for treasure_box
        if (item != null) {
          item.setCount(each.getCount());
          storeItem(pc, item);
        }
      }

    } else if (getType().equals(TYPE.RANDOM)) {
      // 出るアイテムがランダムに決まるもの
      int chance = 0;

      int r = Random.nextInt(getTotalChance());

      for (Item each : getItems()) {
        chance += each.getChance();

        if (r < chance) {
          item = ItemTable.getInstance().createItem(each.getItemId());
          item.setEnchantLevel(each.getEnchant()); // Enchant Feature for treasure_box
          if (item != null) {
            item.setCount(each.getCount());
            storeItem(pc, item);
          }
          break;
        }
      }
    }

    if (item == null) {
      return false;
    } else {
      int itemId = getBoxId();

      // 魂の結晶の破片、魔族のスクロール、ブラックエントの実
      if ((itemId == 40576)
          || (itemId == 40577)
          || (itemId == 40578)
          || (itemId == 40411)
          || (itemId == 49013)) {
        pc.death(null); // キャラクターを死亡させる
      }

      // 多魯嘉之袋
      if ((itemId == 46000)) {
        ItemInstance box = pc.getInventory().findItemId(itemId);
        box.setChargeCount(box.getChargeCount() - 1);
        pc.getInventory().updateItem(box, LsimulatorPcInventory.COL_CHARGE_COUNT);
        if (box.getChargeCount() < 1) {
          pc.getInventory().removeItem(box, 1);
        }
      }

      return true;
    }
  }