Exemplo n.º 1
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 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);
                    }
                }
            }
        }
        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();
                }
            }
        }
 //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());
         }
     }
 }
        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 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);
            }
        }
        private void Start()
        {
            bool has_inventory = PlayerData.Get().HasInventory(character.player_id);

            InventoryData.size = inventory_size; //This will also create the inventory
            EquipData.size     = 99;             //Create the inventory, size doesnt matter for equip

            //If new game, add starting items
            if (!has_inventory)
            {
                InventoryData invdata = InventoryData.Get(InventoryType.Inventory, character.player_id);
                foreach (ItemData item in starting_items)
                {
                    invdata.AddItem(item.id, 1, item.durability, UniqueID.GenerateUniqueID());
                }
            }
        }
 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);
         }
     }
 }