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を手に入れました。 }
/** * 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; } }