public void TakeItem(InventoryData inventory, Item item) { if (item != null && !character.IsDoingAction() && inventory.CanTakeItem(item.data.id, item.quantity)) { character.FaceTorward(item.transform.position); if (onTakeItem != null) { onTakeItem.Invoke(item); } character.TriggerAction(0.4f, () => { //Make sure wasnt destroyed during the 0.4 sec if (item != null && inventory.CanTakeItem(item.data.id, item.quantity)) { PlayerData pdata = PlayerData.Get(); DroppedItemData dropped_item = pdata.GetDroppedItem(item.GetUID()); float durability = dropped_item != null ? dropped_item.durability : item.data.durability; int slot = inventory.AddItem(item.data.id, item.quantity, durability, item.GetUID()); //Add to inventory ItemTakeFX.DoTakeFX(item.transform.position, item.data, inventory.type, slot); item.TakeItem(); //Destroy item } }); } }
//------- Items ---------- //Take an Item on the floor public void TakeItem(Item item) { if (BagData != null && !InventoryData.CanTakeItem(item.data.id, item.quantity)) { TakeItem(BagData, item); //Take into bag } else { TakeItem(InventoryData, item); //Take into main inventory } }
public void GainItem(ItemData item, int quantity, Vector3 source_pos) { if (BagData != null && !InventoryData.CanTakeItem(item.id, quantity)) { GainItem(BagData, item, quantity, source_pos); //Gain into bag } else { GainItem(InventoryData, item, quantity, source_pos); //Gain into main inventory } }
//Return inventory that can take item (main one first, then bag) public InventoryData GetValidInventory(ItemData item, int quantity) { if (InventoryData.CanTakeItem(item.id, quantity)) { return(InventoryData); } else if (BagData != null && BagData.CanTakeItem(item.id, quantity)) { return(BagData); } return(null); }
public void AutoTakeItem(InventoryData inventory, Item item) { if (item != null && !character.IsDoingAction() && inventory.CanTakeItem(item.data.id, item.quantity)) { PlayerData pdata = PlayerData.Get(); DroppedItemData dropped_item = pdata.GetDroppedItem(item.GetUID()); float durability = dropped_item != null ? dropped_item.durability : item.data.durability; int slot = inventory.AddItem(item.data.id, item.quantity, durability, item.GetUID()); //Add to inventory ItemTakeFX.DoTakeFX(item.transform.position, item.data, inventory.type, slot); item.TakeItem(); //Destroy item } }
public override void DoAction(PlayerCharacter character, ItemSlot slot) { int half = slot.GetQuantity() / 2; ItemData item = slot.GetItem(); InventoryData inventory = slot.GetInventory(); InventoryItemData item_data = inventory.GetItem(slot.index); inventory.RemoveItemAt(slot.index, half); bool can_take = inventory.CanTakeItem(item.id, half); InventoryData ninventory = can_take ? inventory : character.Inventory.GetValidInventory(item, half); //If cant take, find a valid one int new_slot = ninventory.GetFirstEmptySlot(); ninventory.AddItemAt(item.id, new_slot, half, item_data.durability, UniqueID.GenerateUniqueID()); }
public void UnequipItem(EquipSlot eslot) { InventoryItemData invdata = EquipData.GetEquippedItem(eslot); if (invdata != null && InventoryData.CanTakeItem(invdata.item_id, 1)) { EquipData.UnequipItem(eslot); InventoryData.AddItem(invdata.item_id, 1, invdata.durability, invdata.uid); } else if (invdata != null && BagData != null && BagData.CanTakeItem(invdata.item_id, 1)) { EquipData.UnequipItem(eslot); BagData.AddItem(invdata.item_id, 1, invdata.durability, invdata.uid); } }
public void GainItem(InventoryData inventory, ItemData item, int quantity, Vector3 source_pos) { if (item != null) { if (inventory.CanTakeItem(item.id, quantity)) { if (inventory.type == InventoryType.Equipment) { EquipData.EquipItem(item.equip_slot, item.id, item.durability, UniqueID.GenerateUniqueID()); ItemTakeFX.DoTakeFX(source_pos, item, inventory.type, (int)item.equip_slot); } else { int islot = inventory.AddItem(item.id, quantity, item.durability, UniqueID.GenerateUniqueID()); ItemTakeFX.DoTakeFX(source_pos, item, inventory.type, islot); } } else { Item.Create(item, character.GetPosition(), quantity); } } }
//Check both bag and inventory public bool CanTakeItem(ItemData item, int quantity = 1) { return(item != null && (InventoryData.CanTakeItem(item.id, quantity) || (BagData != null && BagData.CanTakeItem(item.id, quantity)))); }