public void UnequipItemTo(InventoryData inventory, EquipSlot eslot, int islot) { InventoryItemData invt_slot = inventory.GetItem(islot); InventoryItemData invt_equip = EquipData.GetEquippedItem(eslot); ItemData idata = ItemData.Get(invt_slot?.item_id); ItemData edata = ItemData.Get(invt_equip?.item_id); if (edata != null && inventory != EquipData && inventory.uid != invt_equip.uid) { bool same_item = idata != null && invt_slot != null && invt_slot.quantity > 0 && idata.id == edata.id && invt_slot.quantity < idata.inventory_max; bool slot_empty = invt_slot == null || invt_slot.quantity <= 0; if (same_item || slot_empty) { //Unequip EquipData.UnequipItem(eslot); inventory.AddItemAt(edata.id, islot, 1, invt_equip.durability, invt_equip.uid); } else if (idata != null && invt_slot != null && !same_item && idata.type == ItemType.Equipment && idata.equip_slot == edata.equip_slot && invt_slot.quantity == 1) { //swap inventory.RemoveItemAt(islot, 1); EquipData.UnequipItem(eslot); EquipData.EquipItem(eslot, idata.id, invt_slot.durability, invt_slot.uid); inventory.AddItemAt(edata.id, islot, 1, invt_equip.durability, invt_equip.uid); } } }
public override void DoAction(PlayerCharacter character, ItemSlot slot) { ItemData item = slot.GetItem(); InventoryData inventory = slot.GetInventory(); if (item != null && item.construction_data != null) { character.Crafting.CraftConstructionBuildMode(item.construction_data, false, (Buildable build) => { InventoryItemData invdata = inventory.GetItem(slot.index); inventory.RemoveItemAt(slot.index, 1); BuiltConstructionData constru = PlayerData.Get().GetConstructed(build.GetUID()); if (invdata != null && constru != null && item.HasDurability()) { constru.durability = invdata.durability; //Save durability } }); TheAudio.Get().PlaySFX("craft", item.craft_sound); } if (item != null && item.character_data != null) { character.Crafting.CraftCharacterBuildMode(item.character_data, false, (Buildable build) => { InventoryItemData invdata = inventory.GetItem(slot.index); inventory.RemoveItemAt(slot.index, 1); }); TheAudio.Get().PlaySFX("craft", item.craft_sound); } }
public void EquipItemTo(InventoryData inventory, int islot, EquipSlot eslot) { InventoryItemData invt_slot = inventory.GetItem(islot); InventoryItemData invt_equip = EquipData.GetEquippedItem(eslot); ItemData idata = ItemData.Get(invt_slot?.item_id); ItemData edata = ItemData.Get(invt_equip?.item_id); if (invt_slot != null && inventory != EquipData && invt_slot.quantity > 0 && idata != null && eslot > 0) { if (edata == null) { //Equip only EquipData.EquipItem(eslot, idata.id, invt_slot.durability, invt_slot.uid); inventory.RemoveItemAt(islot, 1); } else if (invt_slot.quantity == 1 && idata.type == ItemType.Equipment) { //Swap inventory.RemoveItemAt(islot, 1); EquipData.UnequipItem(eslot); EquipData.EquipItem(eslot, idata.id, invt_slot.durability, invt_slot.uid); inventory.AddItemAt(edata.id, islot, 1, invt_equip.durability, invt_equip.uid); } } }
public void DropItem(InventoryData inventory, int slot) { InventoryItemData invdata = inventory?.GetItem(slot); ItemData idata = ItemData.Get(invdata?.item_id); if (invdata != null && idata != null && invdata.quantity > 0) { if (idata.CanBeDropped()) { inventory.RemoveItemAt(slot, invdata.quantity); Item iitem = Item.Create(idata, character.GetPosition(), invdata.quantity, invdata.durability, invdata.uid); PlayerUI.Get(character.player_id)?.CancelSelection(); if (onDropItem != null) { onDropItem.Invoke(iitem); } } else if (idata.CanBeBuilt()) { BuildItem(inventory, slot); } } }
public override bool CanDoAction(PlayerCharacter character, ItemSlot slot) { ItemData item = slot.GetItem(); InventoryData inventory = slot.GetInventory(); return(item != null && inventory != null && slot.GetQuantity() > 1 && character.Inventory.HasEmptySlot()); }
public override void DoAction(PlayerCharacter character, ItemSlot slot1, ItemSlot slot2) { InventoryData inventory = slot1.GetInventory(); inventory.RemoveItemAt(slot1.index, 1); character.Inventory.GainItem(cut_item, 1); }
public void EatItem(InventoryData inventory, int slot) { InventoryItemData idata = inventory.GetItem(slot); ItemData item = ItemData.Get(idata?.item_id); if (item != null && item.type == ItemType.Consumable) { if (inventory.IsItemIn(item.id, slot)) { inventory.RemoveItemAt(slot, 1); if (item.container_data) { inventory.AddItem(item.container_data.id, 1, item.container_data.durability, UniqueID.GenerateUniqueID()); } character.StopSleep(); character.Attributes.AddAttribute(AttributeType.Health, item.eat_hp); character.Attributes.AddAttribute(AttributeType.Hunger, item.eat_hunger); character.Attributes.AddAttribute(AttributeType.Thirst, item.eat_thirst); character.Attributes.AddAttribute(AttributeType.Happiness, item.eat_happiness); foreach (BonusEffectData bonus in item.eat_bonus) { character.Data.AddTimedBonus(bonus.type, bonus.value, item.eat_bonus_duration); } } } }
private void Start() { //Add starting items if (!string.IsNullOrEmpty(unique_id.unique_id)) { bool has_inventory = InventoryData.Exists(unique_id.unique_id); if (!has_inventory) { InventoryData invdata = InventoryData.Get(InventoryType.Storage, unique_id.unique_id); foreach (ItemDataValue item in starting_items_quantity) { if (item.item != null) { invdata.AddItem(item.item.id, item.quantity, item.item.durability, UniqueID.GenerateUniqueID()); } } foreach (ItemData item in starting_items) { if (item != null) { invdata.AddItem(item.id, 1, item.durability, UniqueID.GenerateUniqueID()); } } foreach (CraftDataRandom item in starting_items_random) { if (item.item != null && Random.value < item.probability) { ItemData idata = (ItemData)item.item; invdata.AddItem(idata.id, 1, idata.durability, UniqueID.GenerateUniqueID()); } } } } }
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 } }); } }
public override void DoAction(PlayerCharacter character, Selectable select) { PlayerData pdata = PlayerData.Get(); Construction construction = select.GetComponent <Construction>(); if (construction != null) { ItemData take_item = construction.data.take_item_data; InventoryData inv_data = character.Inventory.GetValidInventory(take_item, 1); if (take_item != null && inv_data != null) { BuiltConstructionData bdata = pdata.GetConstructed(construction.GetUID()); float durability = bdata != null ? bdata.durability : take_item.durability; inv_data.AddItem(take_item.id, 1, durability, select.GetUID()); select.Destroy(); } } Character acharacter = select.GetComponent <Character>(); if (acharacter != null) { ItemData take_item = acharacter.data.take_item_data; InventoryData inv_data = character.Inventory.GetValidInventory(take_item, 1); if (take_item != null && inv_data != null) { TrainedCharacterData cdata = pdata.GetCharacter(acharacter.GetUID()); inv_data.AddItem(take_item.id, 1, take_item.durability, select.GetUID()); select.Destroy(); } } }
protected override void RefreshPanel() { InventoryData inventory = GetInventory(); if (inventory != null) { for (int i = 0; i < slots.Length; i++) { EquipSlotUI slot = (EquipSlotUI)slots[i]; if (slot != null) { InventoryItemData invdata = inventory.GetItem((int)slot.equip_slot); ItemData idata = ItemData.Get(invdata?.item_id); if (invdata != null && idata != null) { slot.SetSlot(idata, invdata.quantity, selected_slot == slot.index || selected_right_slot == slot.index); slot.SetDurability(idata.GetDurabilityPercent(invdata.durability), ShouldShowDurability(idata, invdata.durability)); slot.SetFilter(GetFilterLevel(idata, invdata.durability)); } else { slot.SetSlot(null, 0, false); } } } } }
public void SetOneItem(ItemSlot slot_select, ItemSlot slot_target) { InventoryData inventory1 = slot_select.GetInventory(); InventoryData inventory2 = slot_target.GetInventory(); if (current_player != null && inventory1 != null && inventory2 != null) { InventoryItemData invdata = inventory1.GetItem(slot_select.index); if (invdata != null && invdata.quantity > 0 && slot_target.GetItem() == null) { if (inventory2.type == InventoryType.Equipment) { current_player.Inventory.EquipItem(inventory1, slot_select.index); } else if (inventory1.type == InventoryType.Equipment && slot_select is EquipSlotUI) { EquipSlotUI eslot = (EquipSlotUI)slot_select; current_player.Inventory.UnequipItemTo(inventory2, eslot.equip_slot, slot_target.index); } else { string uid = invdata.quantity > 1 ? UniqueID.GenerateUniqueID() : invdata.uid; inventory1.RemoveItemAt(slot_select.index, 1); inventory2.AddItemAt(invdata.item_id, slot_target.index, 1, invdata.durability, uid); } if (invdata.quantity <= 1) { CancelPlayerSelection(); } } } }
public void StopAutoMove() { auto_move = false; auto_move_select = null; auto_move_attack = null; auto_move_drop_inventory = null; }
public override bool CanDoAction(PlayerCharacter character, ItemSlot slot, Selectable select) { Furnace furnace = select.GetComponent <Furnace>(); InventoryData inventory = slot.GetInventory(); InventoryItemData iidata = inventory?.GetItem(slot.index); return(furnace != null && iidata != null && furnace.CountItemSpace() > 0 && melt_item_quantity > 0); }
//Merge action public override void DoAction(PlayerCharacter character, ItemSlot slot, Selectable select) { if (select.HasGroup(merge_target)) { InventoryData inventory = slot.GetInventory(); inventory.RemoveItemAt(slot.index, 1); character.Inventory.GainItem(inventory, filled_item, 1); } }
public void UseItem(ItemSlot slot, int quantity = 1) { InventoryData inventory1 = slot.GetInventory(); if (current_player != null && inventory1 != null) { inventory1.RemoveItemAt(slot.index, quantity); } }
public void EquipItem(InventoryData inventory, int islot) { InventoryItemData item = inventory.GetItem(islot); ItemData idata = ItemData.Get(item?.item_id); if (idata != null && idata.type == ItemType.Equipment) { EquipItemTo(inventory, islot, idata.equip_slot); } }
//Merge action public override void DoAction(PlayerCharacter character, ItemSlot slot, Selectable select) { character.TriggerAnim("Craft", select.transform.position); character.TriggerProgressAction(duration, () => { InventoryData inventory = slot.GetInventory(); inventory.RemoveItemAt(slot.index, 1); character.Inventory.GainItem(cooked_item, 1); }); }
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 } }
//Remove item in one inventory, keeping its container public void UseItem(InventoryData inventory, ItemData item, int quantity = 1) { if (item != null) { inventory.RemoveItem(item.id, quantity); if (item.container_data) { inventory.AddItem(item.container_data.id, quantity, item.container_data.durability, UniqueID.GenerateUniqueID()); } } }
//Merge action public override void DoAction(PlayerCharacter character, ItemSlot slot, Selectable select) { Firepit fire = select.GetComponent <Firepit>(); InventoryData inventory = slot.GetInventory(); if (fire != null && slot.GetItem() && inventory.HasItem(slot.GetItem().id)) { fire.AddFuel(fire.wood_add_fuel); inventory.RemoveItemAt(slot.index, 1); } }
public void CombineInventoryItems(InventoryData inventory1, int slot1, InventoryData inventory2, int slot2) { InventoryItemData invt_slot1 = inventory1.GetItem(slot1); InventoryItemData invt_slot2 = inventory2.GetItem(slot2); if (invt_slot1.item_id == invt_slot2.item_id) { inventory1.RemoveItemAt(slot1, invt_slot1.quantity); inventory2.AddItemAt(invt_slot1.item_id, slot2, invt_slot1.quantity, invt_slot1.durability, invt_slot1.uid); } }
public void CombineItems(ItemSlot slot1, ItemSlot slot2) { InventoryData inventory1 = slot1.GetInventory(); InventoryData inventory2 = slot2.GetInventory(); if (current_player != null && inventory1 != null && inventory2 != null && inventory1.type != InventoryType.Equipment && inventory2.type != InventoryType.Equipment) { current_player.Inventory.CombineItems(inventory1, slot1.index, inventory2, slot2.index); CancelPlayerSelection(); } }
public void CombineItems(InventoryData inventory_data1, int slot1, InventoryData inventory_data2, int slot2) { InventoryItemData invdata1 = inventory_data1?.GetItem(slot1); InventoryItemData invdata2 = inventory_data2?.GetItem(slot2); ItemData idata1 = ItemData.Get(invdata1?.item_id); if (idata1 != null && invdata1.item_id == invdata2.item_id && (invdata1.quantity + invdata2.quantity) < idata1.inventory_max) { PlayerData.Get().CombineInventoryItems(inventory_data1, slot1, inventory_data2, slot2); } }
//------- 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 } }
//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 UpdateMoveTo(Vector3 pos) { //Meant to be called every frame, for this reason don't do navmesh auto_move = true; auto_move_target = pos; auto_move_target_next = pos; path_found = false; calculating_path = false; auto_move_select = null; auto_move_attack = null; auto_move_drop = -1; auto_move_drop_inventory = null; }
public override void DoAction(PlayerCharacter character, ItemSlot slot, Selectable select) { if (select.HasGroup(merge_target)) { ItemProvider provider = select.GetComponent <ItemProvider>(); InventoryData inventory = slot.GetInventory(); provider.RemoveItem(); provider.PlayTakeSound(); inventory.RemoveItemAt(slot.index, 1); character.Inventory.GainItem(inventory, filled_item, 1); } }
public override void DoAction(PlayerCharacter character, ItemSlot slot) { InventoryData inventory = slot.GetInventory(); inventory.RemoveItemAt(slot.index, 1); foreach (ItemData item in items) { if (item != null) { character.Inventory.GainItem(item, 1); } } }
public void SetInventory(InventoryType type, string uid, int size) { inventory_type = type; inventory_uid = uid; inventory_size = size; InventoryData idata = InventoryData.Get(type, uid); if (idata != null) { idata.size = size; } }