/**
   * TreasureBoxを開けるPCにアイテムを入手させる。PCがアイテムを持ちきれなかった場合は アイテムは地面に落ちる。
   *
   * @param pc - TreasureBoxを開けるPC
   * @return 開封した結果何らかのアイテムが出てきた場合はtrueを返す。 持ちきれず地面に落ちた場合もtrueになる。
   */
  public boolean open(L1PcInstance pc) {
    L1ItemInstance item = null;

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

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

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

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

        if (r < chance) {
          item = ItemTable.getInstance().createItem(each.getItemId());
          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); // キャラクターを死亡させる
      }
      return true;
    }
  }
예제 #2
0
 // 일반티 생성
 private boolean createNewItemR(L1PcInstance pc, int item_id, int count, int enchant) {
   L1ItemInstance item = ItemTable.getInstance().createItem(item_id);
   item.setCount(count);
   item.setIdentified(true);
   item.setEnchantLevel(enchant);
   if (item != null) {
     if (pc.getInventory().checkAddItem(item, count) == L1Inventory.OK) {
       pc.getInventory().storeItem(item);
       pc.sendPackets(new S_ServerMessage(403, item.getLogName()));
     } else {
       L1World.getInstance().getInventory(pc.getX(), pc.getY(), pc.getMapId()).storeItem(item);
     }
     return true;
   } else {
     return false;
   }
 }
예제 #3
0
 public L1ItemInstance(L1Item item, int count) {
   this();
   setItem(item);
   setCount(count);
 }