dfhack/scripts/modtools/add-syndrome.lua

115 lines
2.6 KiB
Lua

--modtools/add-syndrome.lua
--author expwnent
--[[=begin
modtools/add-syndrome
=====================
This allows adding and removing syndromes from units.
=end]]
local syndromeUtil = require 'syndrome-util'
local utils = require 'utils'
validArgs = validArgs or utils.invert({
'help',
'syndrome',
'resetPolicy',
'erase',
'eraseOldest',
'eraseAll',
'target',
'skipImmunities',
'eraseClass'
})
local args = utils.processArgs({...}, validArgs)
if args.help then
print([[scripts/modtools/add-syndrome usage:
arguments:
-help
print this help message
-syndrome name
the name of the syndrome to operate on
examples:
"gila monster bite"
-resetPolicy policy
specify a policy of what to do if the unit already has an instance of the syndrome
examples:
NewInstance
default behavior: create a new instance of the syndrome
DoNothing
ResetDuration
AddDuration
-erase
instead of adding an instance of the syndrome, erase one
-eraseAll
erase every instance of the syndrome
-eraseClass SYN_CLASS
erase every instance of every syndrome with the given SYN_CLASS
-target id
the unit id of the target unit
examples:
0
28
-skipImmunities
add the syndrome to the target regardless of whether it is immune to the syndrome
]])
return
end
if not args.target then
error 'Specify a target.'
end
local targ = df.unit.find(tonumber(args.target))
if not targ then
error ('Could not find target: ' .. args.target)
end
args.target = targ
if args.eraseClass then
local count = syndromeUtil.eraseSyndromeClass(args.target, args.eraseClass)
--print('deleted ' .. tostring(count) .. ' syndromes')
return
end
if args.resetPolicy then
args.resetPolicy = syndromeUtil.ResetPolicy[args.resetPolicy]
if not args.resetPolicy then
error ('Invalid reset policy.')
end
end
if not args.syndrome then
error 'Specify a syndrome name.'
end
local syndrome
for _,syn in ipairs(df.global.world.raws.syndromes.all) do
if syn.syn_name == args.syndrome then
syndrome = syn
break
end
end
if not syndrome then
error ('Invalid syndrome: ' .. args.syndrome)
end
args.syndrome = syndrome
if args.erase then
syndromeUtil.eraseSyndrome(args.target,args.syndrome.id,args.eraseOldest)
return
end
if args.eraseAll then
syndromeUtil.eraseSyndromes(args.target,args.syndrome.id)
return
end
if skipImmunities then
syndromeUtil.infectWithSyndrome(args.target,args.syndrome,args.resetPolicy)
else
syndromeUtil.infectWithSyndromeIfValidTarget(args.target,args.syndrome,args.resetPolicy)
end