dfhack/scripts/repeat.lua

76 lines
2.0 KiB
Lua

-- repeat.lua
-- repeatedly calls a lua script, eg "repeat -time 1 months -command cleanowned"; to disable "repeat -cancel cleanowned"
-- repeat -help for details
-- author expwnent
-- vaguely based on a script by Putnam
local repeatUtil = require 'plugins.repeatUtil'
local args = {...}
if args[1] == '-cancel' then
repeatUtil.cancel(args[2])
return
elseif args[1] == '-help' then
print([[repeat.lua
repeat -help
print this help message
repeat -cancel bob
cancels the repetition with the name bob
repeat -name jim -time delay timeUnits -printResult true -command printArgs 3 1 2
except for -command, arguments can go in any order
-name sets the name for the purposes of cancelling and making sure you don't schedule the same repeating event twice
if not specified, it's set to the first argument after -command
-time delay timeUnits
delay is some positive integer
timeUnits is some valid time unit for dfhack.timeout(delay,timeUnits,function)
-printResult true
print the results of the command
-printResult false
suppress the results of the command
-command ...
specify the command to be run
]])
end
local name=nil
local time
local timeUnits
local i=1
local command={}
local printResult=true
while i <= #args do
if args[i] == '-name' then
name = args[i+1]
i = i + 2
elseif args[i] == '-time' then
time = tonumber(args[i+1])
timeUnits = args[i+2]
i = i+3
elseif args[i] == '-command' then
name = name or args[i+1]
for j=i+1,#args,1 do
table.insert(command,args[j])
end
break
elseif args[i] == '-printResult' then
if args[i+1] == "true" then
printOutput = true
elseif args[i+1] == "false" then
printOutput = false
else
qerror("repeat -printResult " .. args[i+1] .. ": expected true or false")
end
i = i+2
else
qerror('Improper arguments to repeat.')
end
end
repeatUtil.scheduleEvery(name,time,timeUnits,function()
result = dfhack.run_command(table.unpack(command))
if printResult then
print(result)
end
end)