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);
                    }
                }
            }
        }
Example #8
0
 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;
 }
Example #14
0
        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);
        }
Example #15
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);
            }
        }
Example #18
0
 //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;
 }
Example #28
0
        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);
            }
        }
Example #29
0
        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;
            }
        }