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(); } } } }
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 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); }
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); }
//---- 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); }
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()); }
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 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 } } }
//-------- 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)); }
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()); } } }
//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 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 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); } } }
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(); }