The items are probably in the inventory of the dead merchants (who are not visible on the map).
There are a couple of DFHack scripts you might try (back up your save first):
dismissmerchants.lua
-- Dismisses bugged merchants.
--[====[
dismissmerchants
=================
]====]
function dismissmerchants ()
for i = 0, #df.global.world.units.active - 1 do
if df.global.world.units.active [i].flags1.merchant then
if df.global.world.units.active [i].flags1.dead and
not df.global.world.units.active [i].flags1.left then
dfhack.println ("Dismissing merchant ")
df.global.world.units.active [i].flags1.left = true
end
end
end
end
dismissmerchants ()
This script has gotten rid of merchants that are stuck in limbo, blocking further caravans from appearing. Has worked sometimes, and sometimes not.
claimmerchantstuff.lua:
function claimmerchantstuff ()
for i = 0, #df.global.world.units.all - 1 do
if df.global.world.units.all [i].flags1.merchant and
df.global.world.units.all [i].flags1.dead and
df.global.world.units.all [i].flags3.scuttle then
dfhack.println ("Scuttling merchant: " .. tostring (i))
for _, v in ipairs (df.global.world.units.all [i].inventory) do
if v.mode == 0 then -- hauled
-- v.item.pos.x = df.global.world.units.all [i].pos.x
-- v.item.pos.y = df.global.world.units.all [i].pos.y
-- v.item.pos.z = df.global.world.units.all [i].pos.z
-- v.item.flags.on_ground = true
-- v.item.flags.in_inventory = false
-- v.item.flags.removed = false
v.item.flags.dump = true
-- v.item.flags.trader = false
end
end
end
end
end
claimmerchantstuff()
Causes the stuff bugged merchants have scuttled to be dump marked. That has caused dorfs to go to the invisible merchants and strip the items from their inventories. I suspect DFHack's script to teleport dump marked items would work as well (after which you can then use the other script to delete the pile of stuff just collected to get rid of it). I don't remember off the top of my head what these to scripts are called, so you'll have to search for them.