private bool AddItemToEmptySlotInCrate(StorageCrate lCrate, ItemBase lItem)
    {
        int i = 0;

        while (i < lCrate.mItems.Length)
        {
            if (lCrate.mItems[i] == null)
            {
                int maxStackSize     = ItemManager.GetMaxStackSize(lItem);
                int currentStackSize = ItemManager.GetCurrentStackSize(lItem);
                if (currentStackSize > maxStackSize)
                {
                    ItemBase item = ItemManager.CloneItem(lItem);
                    ItemManager.SetItemCount(lItem, currentStackSize - maxStackSize);
                    ItemManager.SetItemCount(item, maxStackSize);
                    StorageCrateWindow.SetSlotAndSendNetworkUpdate(WorldScript.mLocalPlayer, lCrate, i, item);
                    return(true);
                }
                StorageCrateWindow.SetSlotAndSendNetworkUpdate(WorldScript.mLocalPlayer, lCrate, i, lItem);
                this.RemoveItem(lItem, null);
                return(true);
            }
            else
            {
                i++;
            }
        }
        return(false);
    }
 private bool AttemptToStackIntoCrate(StorageCrate lCrate, ItemBase lItem)
 {
     for (int i = 0; i < lCrate.mItems.Length; i++)
     {
         if (lCrate.mItems[i] != null)
         {
             if (ItemManager.AreItemsTheSame(lItem, lCrate.mItems[i]))
             {
                 ItemBase itemBase = ItemManager.CloneItem(lItem);
                 if (ItemManager.StackWholeItems(itemBase, lCrate.mItems[i], true))
                 {
                     int currentStackSize  = ItemManager.GetCurrentStackSize(lCrate.mItems[i]);
                     int currentStackSize2 = ItemManager.GetCurrentStackSize(itemBase);
                     StorageCrateWindow.SetSlotAndSendNetworkUpdate(WorldScript.mLocalPlayer, lCrate, i, itemBase);
                     int num = currentStackSize2 - currentStackSize;
                     this.RemoveItem(lItem, null);
                     UIManager.instance.SetInfoText(string.Concat(new object[]
                     {
                         "Stacked ",
                         num,
                         "x ",
                         ItemManager.GetItemName(itemBase)
                     }), 3f, true);
                     return(true);
                 }
                 return(false);
             }
         }
     }
     return(false);
 }
    private bool DoCtrlClick(bool isPressed)
    {
        if (!isPressed)
        {
            return(false);
        }
        ItemBase item = this.target.GetItem(this.cachedGameObject.name);

        if (item == null)
        {
            Debug.LogWarning("User shift-clicked on empty inventory slot!");
            return(false);
        }
        Debug.LogWarning("User is attempting to auto-remove  " + item.ToString());
        if (UIManager.instance.mGenericMachinePanel.currentWindow == null)
        {
            Debug.LogWarning("No window open for shift-click action!");
            return(false);
        }
        if (!(UIManager.instance.mGenericMachinePanel.currentWindow is StorageCrateWindow))
        {
            Debug.LogWarning("We couldn't convert this to a StorageCrateWindow" + UIManager.instance.mGenericMachinePanel.currentWindow.ToString());
            return(false);
        }
        StorageCrateWindow storageCrateWindow = UIManager.instance.mGenericMachinePanel.currentWindow as StorageCrateWindow;

        Debug.LogWarning("Got an SCW ok!");
        if (item.mType == ItemType.ItemCubeStack || item.mType == ItemType.ItemStack)
        {
            if (this.AttemptToStackIntoCrate(storageCrateWindow.mCrateCentre, item))
            {
                return(true);
            }
            for (int i = 0; i < storageCrateWindow.mCrateCentre.mConnectedCrates.Count; i++)
            {
                StorageCrate lCrate = storageCrateWindow.mCrateCentre.mConnectedCrates[i];
                if (this.AttemptToStackIntoCrate(lCrate, item))
                {
                    return(true);
                }
            }
            if (this.AddItemToEmptySlotInCrate(storageCrateWindow.mCrateCentre, item))
            {
                UIManager.instance.SetInfoText("Stored " + item.ToString() + " in empty slot", 3f, true);
                return(true);
            }
            for (int j = 0; j < storageCrateWindow.mCrateCentre.mConnectedCrates.Count; j++)
            {
                StorageCrate lCrate2 = storageCrateWindow.mCrateCentre.mConnectedCrates[j];
                if (this.AddItemToEmptySlotInCrate(lCrate2, item))
                {
                    UIManager.instance.SetInfoText("Stored " + item.ToString() + " in empty slot", 3f, true);
                    return(true);
                }
            }
        }
        else
        {
            if (this.AddItemToEmptySlotInCrate(storageCrateWindow.mCrateCentre, item))
            {
                UIManager.instance.SetInfoText("Stored " + item.ToString() + " in empty slot", 3f, true);
                return(true);
            }
            for (int k = 0; k < storageCrateWindow.mCrateCentre.mConnectedCrates.Count; k++)
            {
                StorageCrate lCrate3 = storageCrateWindow.mCrateCentre.mConnectedCrates[k];
                if (this.AddItemToEmptySlotInCrate(lCrate3, item))
                {
                    UIManager.instance.SetInfoText("Stored " + item.ToString() + " in empty slot", 3f, true);
                    return(true);
                }
            }
        }
        return(false);
    }