Implement selective sussing
This commit is contained in:
		@@ -349,45 +349,71 @@ end
 | 
				
			|||||||
local function buildItemTree(inventory, itemTree, iter)
 | 
					local function buildItemTree(inventory, itemTree, iter)
 | 
				
			||||||
    iter = iter or 0
 | 
					    iter = iter or 0
 | 
				
			||||||
    itemTree = itemTree or {}
 | 
					    itemTree = itemTree or {}
 | 
				
			||||||
    if not inventory or not inventory.slots then return itemTree end
 | 
					    if not inventory or not inventory.slots then
 | 
				
			||||||
 | 
					        debugPrint("Inventory is nil or has no slots, returning empty itemTree")
 | 
				
			||||||
 | 
					        return itemTree
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    -- One slot can have one item but multiple of it
 | 
					    -- One slot can have one item but multiple of it
 | 
				
			||||||
    -- The number of an item in a slot is #slot.items
 | 
					    -- The number of an item in a slot is #slot.items
 | 
				
			||||||
    for slotIndex, slot in ipairs(inventory.slots) do
 | 
					    for slotIndex, slot in ipairs(inventory.slots) do
 | 
				
			||||||
        -- This iteration shit is done only to skip the player inventory as a potential destination
 | 
					        -- This iteration is done only to skip the player inventory as a potential destination
 | 
				
			||||||
        -- Since it will always be 0th iteration and there's no point stacking
 | 
					        -- Since it will always be 0th iteration and there's no point stacking
 | 
				
			||||||
        -- Items from the player inventory to itself
 | 
					        -- Items from the player inventory to itself
 | 
				
			||||||
 | 
					        debugPrint("Building item tree for inventory at iteration: " .. iter .. ", slot index: " .. slotIndex)
 | 
				
			||||||
 | 
					        debugPrint("Slot " .. slotIndex .. " has " .. #slot.items .. " items")
 | 
				
			||||||
        if iter > 0 then
 | 
					        if iter > 0 then
 | 
				
			||||||
            if #slot.items == 0 then
 | 
					            if #slot.items == 0 then
 | 
				
			||||||
 | 
					                debugPrint("Slot " .. slotIndex .. " is empty, adding to itemTree as 'empty'")
 | 
				
			||||||
                itemTree['empty'] = itemTree['empty'] or {}
 | 
					                itemTree['empty'] = itemTree['empty'] or {}
 | 
				
			||||||
                itemTree['empty'][#itemTree['empty'] + 1] = {
 | 
					                itemTree['empty'][#itemTree['empty'] + 1] = {
 | 
				
			||||||
                    inventory = inventory,
 | 
					                    inventory = inventory,
 | 
				
			||||||
                    slotIndex = slotIndex,
 | 
					                    slotIndex = slotIndex,
 | 
				
			||||||
                    maxFits = 60
 | 
					                    maxFits = 60
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                debugPrint("Added empty slot to itemTree at index: " .. slotIndex)
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
                ---@type Barotrauma.Item
 | 
					                ---@type Barotrauma.Item
 | 
				
			||||||
                local item = slot.items[1]
 | 
					                local item = slot.items[1]
 | 
				
			||||||
                local maxStackSize = item.Prefab.MaxStackSize or 60
 | 
					 | 
				
			||||||
                local identifier = item.Prefab.Identifier.Value
 | 
					                local identifier = item.Prefab.Identifier.Value
 | 
				
			||||||
 | 
					                debugPrint("Found item: " ..
 | 
				
			||||||
 | 
					                    item.Name .. " with identifier: " .. identifier .. ", max stack size: " .. maxStackSize)
 | 
				
			||||||
                itemTree[identifier] = itemTree[identifier] or {}
 | 
					                itemTree[identifier] = itemTree[identifier] or {}
 | 
				
			||||||
 | 
					                -- We DO want even slots with maxFits = 0
 | 
				
			||||||
 | 
					                -- Because that indicates that we DO HAVE the item
 | 
				
			||||||
 | 
					                -- At all
 | 
				
			||||||
 | 
					                -- And based on that we decide to move it
 | 
				
			||||||
                itemTree[identifier][#itemTree[identifier] + 1] = {
 | 
					                itemTree[identifier][#itemTree[identifier] + 1] = {
 | 
				
			||||||
                    inventory = inventory,
 | 
					                    inventory = inventory,
 | 
				
			||||||
                    slotIndex = slotIndex,
 | 
					                    slotIndex = slotIndex,
 | 
				
			||||||
                    maxFits = maxStackSize - #slot.items
 | 
					                    maxFits = slot.HowManyCanBePut(item.Prefab)
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                debugPrint("Added item to itemTree under identifier: " ..
 | 
				
			||||||
 | 
					                    identifier .. ", available fits: " .. (maxStackSize - #slot.items))
 | 
				
			||||||
            end
 | 
					            end
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if #slot.items > 1 then
 | 
					
 | 
				
			||||||
 | 
					        if #slot.items > 0 then
 | 
				
			||||||
 | 
					            ---@type Barotrauma.Item
 | 
				
			||||||
            local item = slot.items[1]
 | 
					            local item = slot.items[1]
 | 
				
			||||||
            if item.OwnInventory then
 | 
					            local tags = item.Prefab.Tags
 | 
				
			||||||
                print("Searching inside " .. item.Name .. " for nested containers")
 | 
					            local shouldSuss = false
 | 
				
			||||||
 | 
					            for tag in tags do
 | 
				
			||||||
 | 
					                if tag.value:find("container") then
 | 
				
			||||||
 | 
					                    shouldSuss = true
 | 
				
			||||||
 | 
					                    break
 | 
				
			||||||
 | 
					                end
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if shouldSuss then
 | 
				
			||||||
 | 
					                debugPrint("Searching inside " .. item.Name .. " for nested containers")
 | 
				
			||||||
                buildItemTree(item.OwnInventory, itemTree, iter + 1)
 | 
					                buildItemTree(item.OwnInventory, itemTree, iter + 1)
 | 
				
			||||||
            end
 | 
					            end
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    debugPrint("Completed building item tree for current inventory iteration: " .. iter)
 | 
				
			||||||
    return itemTree
 | 
					    return itemTree
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user