dfhack/scripts/modtools/create-item.lua

142 lines
3.2 KiB
Lua

--scripts/modtools/create-item.lua
--author expwnent
--creates an item of a given type and material
--[[=begin
modtools/create-item
====================
Replaces the `createitem` plugin, with standard
arguments. The other versions will be phased out in a later version.
=end]]
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)