📄 l1inventory.java
字号:
FurnitureSpawnTable.getInstance().deleteFurniture(
furniture);
}
}
}
}
deleteItem(item);
L1World.getInstance().removeObject(item);
} else {
item.setCount(item.getCount() - count);
updateItem(item);
}
return count;
}
// _itemsから指定オブジェクトを削除(L1PcInstance、L1DwarfInstance、L1GroundInstanceでこの部分をオーバライドする)
public void deleteItem(L1ItemInstance item) {
_items.remove(item);
}
// 引数のインベントリにアイテムを移譲
public synchronized L1ItemInstance tradeItem(int objectId, int count,
L1Inventory inventory) {
L1ItemInstance item = getItem(objectId);
return tradeItem(item, count, inventory);
}
public synchronized L1ItemInstance tradeItem(L1ItemInstance item,
int count, L1Inventory inventory) {
if (item == null) {
return null;
}
if (item.getCount() <= 0 || count <= 0) {
return null;
}
if (item.isEquipped()) {
return null;
}
if (!checkItem(item.getItem().getItemId(), count)) {
return null;
}
L1ItemInstance carryItem;
if (item.getCount() <= count) {
deleteItem(item);
carryItem = item;
} else {
item.setCount(item.getCount() - count);
updateItem(item);
carryItem = ItemTable.getInstance().createItem(
item.getItem().getItemId());
carryItem.setCount(count);
carryItem.setEnchantLevel(item.getEnchantLevel());
carryItem.setIdentified(item.isIdentified());
carryItem.set_durability(item.get_durability());
carryItem.setChargeCount(item.getChargeCount());
carryItem.setRemainingTime(item.getRemainingTime());
carryItem.setLastUsed(item.getLastUsed());
}
return inventory.storeTradeItem(carryItem);
}
/*
* アイテムを損傷損耗させる(武器防具も含む) アイテムの場合、損耗なのでマイナスするが 武器防具は損傷度を表すのでプラスにする。
*/
public L1ItemInstance receiveDamage(int objectId) {
L1ItemInstance item = getItem(objectId);
return receiveDamage(item);
}
public L1ItemInstance receiveDamage(L1ItemInstance item) {
return receiveDamage(item, 1);
}
public L1ItemInstance receiveDamage(L1ItemInstance item, int count) {
int itemType = item.getItem().getType2();
int currentDurability = item.get_durability();
if (item == null) {
return null;
}
if ((currentDurability == 0 && itemType == 0) || currentDurability < 0) {
item.set_durability(0);
return null;
}
// 武器防具のみ損傷度をプラス
if (itemType == 0) {
int minDurability = (item.getEnchantLevel() + 5) * -1;
int durability = currentDurability - count;
if (durability < minDurability) {
durability = minDurability;
}
if (currentDurability > durability) {
item.set_durability(durability);
}
} else {
int maxDurability = item.getEnchantLevel() + 5;
int durability = currentDurability + count;
if (durability > maxDurability) {
durability = maxDurability;
}
if (currentDurability < durability) {
item.set_durability(durability);
}
}
updateItem(item, L1PcInventory.COL_DURABILITY);
return item;
}
public L1ItemInstance recoveryDamage(L1ItemInstance item) {
int itemType = item.getItem().getType2();
int durability = item.get_durability();
if (item == null) {
return null;
}
if ((durability == 0 && itemType != 0) || durability < 0) {
item.set_durability(0);
return null;
}
if (itemType == 0) {
// 耐久度をプラスしている。
item.set_durability(durability + 1);
} else {
// 損傷度をマイナスしている。
item.set_durability(durability - 1);
}
updateItem(item, L1PcInventory.COL_DURABILITY);
return item;
}
// アイテムIDから検索
public L1ItemInstance findItemId(int id) {
for (L1ItemInstance item : _items) {
if (item.getItem().getItemId() == id) {
return item;
}
}
return null;
}
public L1ItemInstance[] findItemsId(int id) {
ArrayList<L1ItemInstance> itemList = new ArrayList<L1ItemInstance>();
for (L1ItemInstance item : _items) {
if (item.getItemId() == id) {
itemList.add(item);
}
}
return itemList.toArray(new L1ItemInstance[] {});
}
public L1ItemInstance[] findItemsIdNotEquipped(int id) {
ArrayList<L1ItemInstance> itemList = new ArrayList<L1ItemInstance>();
for (L1ItemInstance item : _items) {
if (item.getItemId() == id) {
if (!item.isEquipped()) {
itemList.add(item);
}
}
}
return itemList.toArray(new L1ItemInstance[] {});
}
// オブジェクトIDから検索
public L1ItemInstance getItem(int objectId) {
for (Object itemObject : _items) {
L1ItemInstance item = (L1ItemInstance) itemObject;
if (item.getId() == objectId) {
return item;
}
}
return null;
}
// 特定のアイテムを指定された數量以上所持しているか確認(矢とか魔石の確認)
public boolean checkItem(int id) {
return checkItem(id, 1);
}
public boolean checkItem(int id, int count) {
if (count == 0) {
return true;
}
if (ItemTable.getInstance().getTemplate(id).isStackable()) {
L1ItemInstance item = findItemId(id);
if (item != null && item.getCount() >= count) {
return true;
}
} else {
Object[] itemList = findItemsId(id);
if (itemList.length >= count) {
return true;
}
}
return false;
}
// 強化された特定のアイテムを指定された數量以上所持しているか確認
// 装備中のアイテムは所持していないと判別する
public boolean checkEnchantItem(int id, int enchant, int count) {
int num = 0;
for (L1ItemInstance item : _items) {
if (item.isEquipped()) { // 装備しているものは該当しない
continue;
}
if (item.getItemId() == id && item.getEnchantLevel() == enchant) {
num ++;
if (num == count) {
return true;
}
}
}
return false;
}
// 強化された特定のアイテムを消費する
// 装備中のアイテムは所持していないと判別する
public boolean consumeEnchantItem(int id, int enchant, int count) {
for (L1ItemInstance item : _items) {
if (item.isEquipped()) { // 装備しているものは該当しない
continue;
}
if (item.getItemId() == id && item.getEnchantLevel() == enchant) {
removeItem(item);
return true;
}
}
return false;
}
// 特定のアイテムを指定された數量以上所持しているか確認
// 装備中のアイテムは所持していないと判別する
public boolean checkItemNotEquipped(int id, int count) {
if (count == 0) {
return true;
}
return count <= countItems(id);
}
// 特定のアイテムを全て必要な數量所持しているか確認(イベントとかで複数のアイテムを所持しているか確認するため)
public boolean checkItem(int[] ids) {
int len = ids.length;
int[] counts = new int[len];
for (int i = 0; i < len; i++) {
counts[i] = 1;
}
return checkItem(ids, counts);
}
public boolean checkItem(int[] ids, int[] counts) {
for (int i = 0; i < ids.length; i++) {
if (!checkItem(ids[i], counts[i])) {
return false;
}
}
return true;
}
/**
* このインベントリ内にある、指定されたIDのアイテムの数を数える。
*
* @return
*/
public int countItems(int id) {
if (ItemTable.getInstance().getTemplate(id).isStackable()) {
L1ItemInstance item = findItemId(id);
if (item != null) {
return item.getCount();
}
} else {
Object[] itemList = findItemsIdNotEquipped(id);
return itemList.length;
}
return 0;
}
public void shuffle() {
Collections.shuffle(_items);
}
// インベントリ内の全てのアイテムを消す(所有者を消すときなど)
public void clearItems() {
for (Object itemObject : _items) {
L1ItemInstance item = (L1ItemInstance) itemObject;
L1World.getInstance().removeObject(item);
}
_items.clear();
}
// オーバーライド用
public void loadItems() {
}
public void insertItem(L1ItemInstance item) {
}
public void updateItem(L1ItemInstance item) {
}
public void updateItem(L1ItemInstance item, int colmn) {
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -