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