diff --git a/scripts/spawnunit.lua b/scripts/spawnunit.lua new file mode 100644 index 000000000..1c2964936 --- /dev/null +++ b/scripts/spawnunit.lua @@ -0,0 +1,57 @@ +-- create unit at pointer or given location +-- wraps modtools/create-unit.lua + +usage = [[Usage: +- spawnunit RACE CASTE +- spawnunit RACE CASTE NAME +- spawnunit RACE CASTE NAME x y z +- spawnunit RACE CASTE [NAME] [additional arguments] + Create a unit +- spawnunit -help + Display this help message +- spawnunit -command ARGUMENTS + Display the command used to invoke modtools/create-unit + +additional arguments are passed to modtools/create-unit - +see "modtools/create-unit -help" for more information. +]] + +function extend(tbl, tbl2) + for _, v in pairs(tbl2) do + table.insert(tbl, v) + end +end + +local show_command = false +local args = {...} +local first_arg = (args[1] or ''):gsub('^-*', '') +if first_arg == 'help' or #args < 2 then + print(usage) + return +elseif first_arg == 'command' then + show_command = true + table.remove(args, 1) +end + +local new_args = {'-race', args[1], '-caste', args[2]} +if #args == 3 then + extend(new_args, {'-nick', args[3]}) +elseif #args == 6 then + if tonumber(args[4]) and tonumber(args[5]) and tonumber(args[6]) then + extend(new_args, {'-nick', args[3], '-location', '[', args[4], args[5], args[6], ']'}) + end +else + local start = 3 + if #args >= 3 and args[3]:sub(1, 1) ~= '-' then + extend(new_args, {'-nick', args[3]}) + start = 4 + end + for i = start, #args do + table.insert(new_args, args[i]) + end +end +if show_command then + print('modtools/create-unit ' .. table.concat(new_args, ' ')) + return +end +dfhack.run_script('modtools/create-unit', table.unpack(new_args))