115 lines
2.6 KiB
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
|
|
|