public bool Remove(GameSession session, long uid, int amount, out Item outItem)
    {
        outItem = null;
        if (!session.Player.Account.BankInventory.Items.Any(x => x is not null && x.Uid == uid))
        {
            return(false);
        }

        int outItemIndex = Array.FindIndex(Items, 0, Items.Length, x => x is not null && x.Uid == uid);

        outItem = Items[outItemIndex];

        if (ItemMetadataStorage.IsTradeDisabledWithinAccount(outItem.Id) && outItem.IsBound() && !outItem.IsSelfBound(session.Player.CharacterId))
        {
            return(false);
        }

        if (amount >= outItem.Amount)
        {
            Items[outItemIndex] = null;
            session.Send(StorageInventoryPacket.Remove(uid));
            return(true);
        }

        if (outItem.TrySplit(amount, out Item splitItem))
        {
            session.Send(StorageInventoryPacket.UpdateItem(outItem));

            outItem = splitItem;
            return(true);
        }

        return(false);
    }