コード例 #1
0
        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();
                    }
                }
            }
        }
コード例 #2
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());
                 }
             }
         }
     }
 }
コード例 #3
0
        public TrainedCharacterData AddCharacter(string character_id, string scene, Vector3 pos, Quaternion rot)
        {
            TrainedCharacterData citem = new TrainedCharacterData();

            citem.uid                     = UniqueID.GenerateUniqueID();
            citem.character_id            = character_id;
            citem.scene                   = scene;
            citem.pos                     = pos;
            citem.rot                     = rot;
            trained_characters[citem.uid] = citem;
            return(citem);
        }
コード例 #4
0
        public SowedPlantData AddPlant(string plant_id, string scene, Vector3 pos, Quaternion rot, int stage)
        {
            SowedPlantData citem = new SowedPlantData();

            citem.uid               = UniqueID.GenerateUniqueID();
            citem.plant_id          = plant_id;
            citem.scene             = scene;
            citem.pos               = pos;
            citem.rot               = rot;
            citem.growth_stage      = stage;
            sowed_plants[citem.uid] = citem;
            return(citem);
        }
コード例 #5
0
        //---- Constructions and Plants and Characters

        public BuiltConstructionData AddConstruction(string construct_id, string scene, Vector3 pos, Quaternion rot, float durability)
        {
            BuiltConstructionData citem = new BuiltConstructionData();

            citem.uid                      = UniqueID.GenerateUniqueID();
            citem.construction_id          = construct_id;
            citem.scene                    = scene;
            citem.pos                      = pos;
            citem.rot                      = rot;
            citem.durability               = durability;
            built_constructions[citem.uid] = citem;
            return(citem);
        }
コード例 #6
0
        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());
        }
コード例 #7
0
        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());
                }
            }
        }
コード例 #8
0
        public static void GenerateAll(UniqueID[] objs)
        {
            HashSet <string> existing_ids = new HashSet <string>();

            foreach (UniqueID uid_obj in objs)
            {
                if (uid_obj.unique_id != "")
                {
                    if (existing_ids.Contains(uid_obj.unique_id))
                    {
                        uid_obj.unique_id = "";
                    }
                    else
                    {
                        existing_ids.Add(uid_obj.unique_id);
                    }
                }
            }

            foreach (UniqueID uid_obj in objs)
            {
                if (uid_obj.unique_id == "")
                {
                    //Generate new ID
                    string new_id = "";
                    while (new_id == "" || existing_ids.Contains(new_id))
                    {
                        new_id = UniqueID.GenerateUniqueID();
                    }

                    //Add new id
                    uid_obj.unique_id = uid_obj.uid_prefix + new_id;
                    existing_ids.Add(new_id);

#if UNITY_EDITOR
                    if (Application.isEditor && !Application.isPlaying)
                    {
                        UnityEditor.EditorUtility.SetDirty(uid_obj);
                    }
#endif
                }
            }
        }
コード例 #9
0
        //-------- Dropped items --------

        public DroppedItemData AddDroppedItem(string item_id, string scene, Vector3 pos, int quantity, float durability)
        {
            string uid = UniqueID.GenerateUniqueID();

            return(AddDroppedItem(item_id, scene, pos, quantity, durability, uid));
        }
コード例 #10
0
        public void RemoveEquipItem(EquipSlot eslot)
        {
            InventoryItemData invtem = EquipData.GetEquippedItem(eslot);
            ItemData          idata  = ItemData.Get(invtem?.item_id);

            if (idata != null)
            {
                EquipData.UnequipItem(eslot);
                if (idata.container_data)
                {
                    EquipData.EquipItem(eslot, idata.container_data.id, idata.container_data.durability, UniqueID.GenerateUniqueID());
                }
            }
        }
コード例 #11
0
 //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());
         }
     }
 }
コード例 #12
0
        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);
                    }
                }
            }
        }
コード例 #13
0
 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);
         }
     }
 }
コード例 #14
0
        public void UpdateAllDurability(float game_speed)
        {
            List <int> remove_items = new List <int>();

            foreach (KeyValuePair <int, InventoryItemData> pair in items)
            {
                InventoryItemData invdata = pair.Value;
                ItemData          idata   = ItemData.Get(invdata?.item_id);

                if (idata != null && invdata != null)
                {
                    if (idata.durability_type == DurabilityType.Spoilage)
                    {
                        invdata.durability -= game_speed * Time.deltaTime;
                    }
                    if (idata.durability_type == DurabilityType.UsageTime && type == InventoryType.Equipment)
                    {
                        invdata.durability -= game_speed * Time.deltaTime;
                    }
                }

                if (idata != null && invdata != null && idata.HasDurability() && invdata.durability <= 0f)
                {
                    remove_items.Add(pair.Key);
                }
            }

            foreach (int slot in remove_items)
            {
                InventoryItemData invdata = GetItem(slot);
                ItemData          idata   = ItemData.Get(invdata?.item_id);
                RemoveItemAt(slot, invdata.quantity);
                if (idata.container_data)
                {
                    AddItemAt(idata.container_data.id, slot, invdata.quantity, idata.container_data.durability, UniqueID.GenerateUniqueID());
                }
            }
            remove_items.Clear();
        }