Implement finding items for fabricator

This commit is contained in:
2025-03-30 00:41:02 +01:00
parent abf2f008b9
commit 5f7a30fce1

View File

@@ -338,12 +338,6 @@ local function quickStackItems(character)
return
end
-- for i, slot in ipairs(inventory.slots) do
-- if slot.items and #slot.items > 0 then
-- print(string.format("Item at slot %d is %s", i, slot.items[1].Prefab.Identifier.Value))
-- end
-- end
local itemTree, err = tryBuildItemTree(inventory)
if err then
debugPrint(string.format("Error building item tree: %s", err))
@@ -352,13 +346,13 @@ local function quickStackItems(character)
itemTree = sortItemtreeBySlots(itemTree)
local toMove = {}
for i, slot in ipairs(inventory.slots) do
if #slot.items > 0 then
local item = slot.items[1]
local identifier = item.Prefab.Identifier.Value
print(string.format("Item at slot %d is %s", i, identifier))
end
end
-- for i, slot in ipairs(inventory.slots) do
-- if #slot.items > 0 then
-- local item = slot.items[1]
-- local identifier = item.Prefab.Identifier.Value
-- print(string.format("Item at slot %d is %s", i, identifier))
-- end
-- end
for _, slotid in ipairs(inventorySlotsToStack) do
debugPrint(string.format("Processing inventory slot: %d", slotid))
@@ -496,8 +490,36 @@ end
Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptable)
if not PlayerInput.KeyHit(CONFIG.FABRICATOR_KEY) then return end
-- TODO: Maybe get items from entire sub...?
-- There's no point getting recipes if we don't have all of this bullshit
---@type Barotrauma.Character
local character = instance
if not character then return end
if not character then
debugPrint("Character instance is nil.")
return
end
---@type Barotrauma.CharacterInventory
local inventory = character.Inventory
if not inventory then
debugPrint("Character inventory is nil.")
return
end
---@type Barotrauma.ItemInventory.Slot
local bagSlot = inventory.slots[BAG_SLOT]
if not bagSlot then
debugPrint("Bag slot not found.")
return
end
if #bagSlot.items == 0 then
debugPrint("Bag slot is empty.")
return
end
---@type Barotrauma.Item
local bagItem = bagSlot.items[1]
if not bagItem then
debugPrint("Bag item not found.")
return
end
local fabricator, err = getOpenFabricator()
if err then
@@ -514,9 +536,14 @@ Hook.Patch("Barotrauma.Character", "ControlLocalPlayer", function(instance, ptab
local toGet = recipe.requiredItems
---@type fun(item: Barotrauma.Item): boolean
local filter = function(item)
return true
if item.Prefab.Identifier == recipe.targetItem.identifier then
return true
end
return false
end
local items = enqueueInventory(character.inventory.slots[BAG_SLOT], {}, filter)
local items = enqueueInventory(bagItem.OwnInventory, {}, filter)
DumpTable(items)
end, Hook.HookMethodType.After)