コード例 #1
0
        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);
                }
            }
        }
コード例 #2
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();
                    }
                }
            }
        }
コード例 #3
0
        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);
                }
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
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());
        }