Skip to content

Commit fc3e300

Browse files
committed
confirm: rework order-remove description generation
Handle possibly out-of-bounds order index. Factor out call to material description generation.
1 parent ded125a commit fc3e300

File tree

1 file changed

+32
-20
lines changed

1 file changed

+32
-20
lines changed

internal/confirm/specs.lua

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ ConfirmSpec{
431431
end,
432432
}
433433

434-
local function make_order_desc(order, noun)
434+
local function make_order_material_desc(order, noun)
435435
local desc = ''
436436
if order.mat_type >= 0 then
437437
local matinfo = dfhack.matinfo.decode(order.mat_type, order.mat_index)
@@ -452,6 +452,34 @@ end
452452
local orders = df.global.world.manager_orders.all
453453
local itemdefs = df.global.world.raws.itemdefs
454454
local reactions = df.global.world.raws.reactions.reactions
455+
456+
local function make_order_desc(order)
457+
if order.job_type == df.job_type.CustomReaction then
458+
for _, reaction in ipairs(reactions) do
459+
if reaction.code == order.reaction_name then
460+
return reaction.name
461+
end
462+
end
463+
return ''
464+
end
465+
local noun
466+
if order.job_type == df.job_type.MakeArmor then
467+
noun = itemdefs.armor[order.item_subtype].name
468+
elseif order.job_type == df.job_type.MakeWeapon then
469+
noun = itemdefs.weapons[order.item_subtype].name
470+
elseif order.job_type == df.job_type.MakePants then
471+
noun = itemdefs.pants[order.item_subtype].name
472+
elseif order.job_type == df.job_type.MakeTool then
473+
noun = itemdefs.tools[order.item_subtype].name
474+
elseif order.job_type == df.job_type.SmeltOre then
475+
noun = 'ore'
476+
else
477+
-- caption is usually "verb noun(-phrase)"
478+
noun = df.job_type.attrs[order.job_type].caption
479+
end
480+
return make_order_material_desc(order, noun)
481+
end
482+
455483
ConfirmSpec{
456484
id='order-remove',
457485
title='Remove manger order',
@@ -471,25 +499,9 @@ ConfirmSpec{
471499
local _, y = dfhack.screen.getMousePos()
472500
if y then
473501
local order_idx = scroll_pos + (y - y_offset) // 3
474-
local order = orders[order_idx]
475-
if order.job_type == df.job_type.CustomReaction then
476-
for _, reaction in ipairs(reactions) do
477-
if reaction.code == order.reaction_name then
478-
order_desc = reaction.name
479-
end
480-
end
481-
elseif order.job_type == df.job_type.MakeArmor then
482-
order_desc = make_order_desc(order, itemdefs.armor[order.item_subtype].name)
483-
elseif order.job_type == df.job_type.MakeWeapon then
484-
order_desc = make_order_desc(order, itemdefs.weapons[order.item_subtype].name)
485-
elseif order.job_type == df.job_type.MakePants then
486-
order_desc = make_order_desc(order, itemdefs.pants[order.item_subtype].name)
487-
elseif order.job_type == df.job_type.SmeltOre then
488-
order_desc = make_order_desc(order, 'ore')
489-
elseif order.job_type == df.job_type.MakeTool then
490-
order_desc = make_order_desc(order, itemdefs.tools[order.item_subtype].name)
491-
else
492-
order_desc = make_order_desc(order, df.job_type.attrs[order.job_type].caption)
502+
local order = safe_index(orders, order_idx)
503+
if order then
504+
order_desc = make_order_desc(order)
493505
end
494506
end
495507
return ('Are you sure you want to remove this manager order?\n\n%s'):format(dfhack.capitalizeStringWords(order_desc))

0 commit comments

Comments
 (0)