I was trying to get a manager workorder to use only rock nuts for paste-making to avoid running low on hemp seeds, so I tried to copy "job_item" of a workshop job I'd adjusted with `job item-material`, and add it to the the workorder's "items" element (which happens to be nil for that specific order). Dunno if it'd even work, but I saw that for many work orders, items is a vector with "job_item" elements in it, so I thought it'd be worth a shot.
That was also before I learned of gui/workorder-details, since I've been using DFHack version 0.47.05-r5.
local help = [====[
======================
]====]
utils = require('utils')
--debug.setmetatable(nil, {__index = function()end})
function findworkorder(workorder_id)
-- does something like this exist? df.global.world.manager_orders.find(workorder_id)
for _, mgr_order in ipairs(df.global.world.manager_orders) do
if mgr_order.id == workorder_id then
return mgr_order
end
end
qerror('not found')
end
function processworkorder(workorder_id)
--df.global.world.manager_orders
local workorder
local job
local mode = 1 -- for quickly switching between different approaches to the problem
local workorder_jobitems = {}
if pcall(findworkorder, workorder_id) then
workorder = findworkorder(workorder_id)
else
qerror('Work order not found')
end
job = dfhack.gui.getSelectedJob(true) or qerror('No job selected')
print("test")
if mode == 1 then
table.remove(workorder,'items')
workorder['items'] = workorder_jobitems
workorder.items = utils.clone(job.job_items, true)
else
--workorder.items = {}
workorder['items'] = workorder_jobitems
for _, copy_job_item in ipairs(job.job_items) do
--workorder.items:insert('#', copy_job_item)
table.insert(workorder.items, copy_job_item)
end
end
end
-- main script
local opt = ...
if opt and opt ~= "" then
if tonumber(opt) then
if tonumber(opt) >= 0 then
processworkorder(math.floor(tonumber(opt)))
else
print("The number should be non-negative.")
end
return
else
print(help)
end
else
print("No work order provided, here's a list of existing work orders:")
for _, mgr_order in ipairs(df.global.world.manager_orders) do
if mgr_order.reaction_name ~= nil and mgr_order.reaction_name ~= "" then
print(mgr_order.id .. ": " .. df.job_type[mgr_order.job_type] .. " (" .. mgr_order.reaction_name .. ")")
else
print(mgr_order.id .. ": " .. df.job_type[mgr_order.job_type])
end
end
end