135 lines
3.1 KiB
Lua
135 lines
3.1 KiB
Lua
--scripts/modtools/create-item.lua
|
|
--author expwnent
|
|
--creates an item of a given type and material
|
|
|
|
local utils = require 'utils'
|
|
|
|
validArgs = --[[validArgs or--]] utils.invert({
|
|
'help',
|
|
'creator',
|
|
'material',
|
|
'item',
|
|
-- 'creature',
|
|
-- 'caste',
|
|
'leftHand',
|
|
'rightHand',
|
|
'quality'
|
|
})
|
|
|
|
organicTypes = organicTypes or utils.invert({
|
|
df.item_type.REMAINS,
|
|
df.item_type.FISH,
|
|
df.item_type.FISH_RAW,
|
|
df.item_type.VERMIN,
|
|
df.item_type.PET,
|
|
df.item_type.EGG,
|
|
})
|
|
|
|
badTypes = badTypes or utils.invert({
|
|
df.item_type.CORPSE,
|
|
df.item_type.CORPSEPIECE,
|
|
df.item_type.FOOD,
|
|
})
|
|
|
|
function createItem(creatorID, item, material, leftHand, rightHand, quality)
|
|
local itemQuality = quality and df.item_quality[quality]
|
|
print(itemQuality)
|
|
|
|
local creator = df.unit.find(creatorID)
|
|
if not creator then
|
|
error 'Invalid creator.'
|
|
end
|
|
|
|
if not item then
|
|
error 'Invalid item.'
|
|
end
|
|
local itemType = dfhack.items.findType(item)
|
|
if itemType == -1 then
|
|
error 'Invalid item.'
|
|
end
|
|
local itemSubtype = dfhack.items.findSubtype(item)
|
|
|
|
if organicTypes[itemType] then
|
|
--TODO: look up creature and caste
|
|
error 'Not yet supported.'
|
|
end
|
|
|
|
if badTypes[itemType] then
|
|
error 'Not supported.'
|
|
end
|
|
|
|
if not material then
|
|
error 'Invalid material.'
|
|
end
|
|
local materialInfo = dfhack.matinfo.find(material)
|
|
if not materialInfo then
|
|
error 'Invalid material.'
|
|
end
|
|
|
|
local item1 = dfhack.items.createItem(itemType, itemSubtype, materialInfo['type'], materialInfo.index, creator)
|
|
local item = df.item.find(item1)
|
|
if leftHand then
|
|
item:setGloveHandedness(2)
|
|
elseif rightHand then
|
|
item:setGloveHandedness(1)
|
|
end
|
|
|
|
if itemQuality then
|
|
item:setQuality(itemQuality)
|
|
end
|
|
--[[if matchingGloves or matchingShoes then
|
|
if matchingGloves then
|
|
item1 = df.item.find(item1)
|
|
item1:setGloveHandedness(1);
|
|
end
|
|
local item2 = dfhack.items.createItem(itemType, itemSubtype, materialInfo['type'], materialInfo.index, creator)
|
|
if matchingGloves then
|
|
item2 = df.item.find(item2)
|
|
item2:setGloveHandedness(2);
|
|
end
|
|
end --]]
|
|
return item1
|
|
end
|
|
|
|
if moduleMode then
|
|
return
|
|
end
|
|
|
|
local args = utils.processArgs({...}, validArgs)
|
|
|
|
if args.help then
|
|
print(
|
|
[[scripts/modtools/create-item.lua
|
|
arguments:
|
|
-help
|
|
print this help message
|
|
-creator id
|
|
specify the id of the unit who will create the item, or \\LAST to indicate the unit with id df.global.unit_next_id-1
|
|
examples:
|
|
0
|
|
2
|
|
\\LAST
|
|
-material matstring
|
|
specify the material of the item to be created
|
|
examples:
|
|
INORGANIC:IRON
|
|
CREATURE_MAT:DWARF:BRAIN
|
|
PLANT_MAT:MUSHROOM_HELMET_PLUMP:DRINK
|
|
-item itemstr
|
|
specify the itemdef of the item to be created
|
|
examples:
|
|
WEAPON:ITEM_WEAPON_PICK
|
|
-matchingShoes
|
|
create two of this item
|
|
-matchingGloves
|
|
create two of this item, and set handedness appropriately
|
|
]])
|
|
return
|
|
end
|
|
|
|
if args.creator == '\\LAST' then
|
|
args.creator = tostring(df.global.unit_next_id-1)
|
|
end
|
|
|
|
createItem(tonumber(args.creator), args.item, args.material, args.leftHand, args.rightHand, args.quality)
|