|
|
|
@ -381,8 +381,13 @@ end
|
|
|
|
|
local internal = dfhack.internal
|
|
|
|
|
|
|
|
|
|
internal.scripts = internal.scripts or {}
|
|
|
|
|
internal.scriptPath = internal.scriptPath or {}
|
|
|
|
|
internal.scriptMtime = internal.scriptMtime or {}
|
|
|
|
|
|
|
|
|
|
local scripts = internal.scripts
|
|
|
|
|
local scriptPath = internal.scriptPath
|
|
|
|
|
local scriptMtime = internal.scriptMtime
|
|
|
|
|
|
|
|
|
|
local hack_path = dfhack.getHackPath()
|
|
|
|
|
|
|
|
|
|
function dfhack.findScript(name)
|
|
|
|
@ -420,6 +425,13 @@ function dfhack.run_script_with_env(envVars,name,...)
|
|
|
|
|
if not file then
|
|
|
|
|
error('Could not find script ' .. name)
|
|
|
|
|
end
|
|
|
|
|
if scriptPath[name] and scriptPath[name] ~= file then
|
|
|
|
|
--new file path: must have loaded a different save or unloaded
|
|
|
|
|
scriptPath[name] = file
|
|
|
|
|
scriptMtime[file] = dfhack.filesystem.mtime(file)
|
|
|
|
|
--it is the responsibility of the script to clear its own data on unload so it's safe for us to not delete it here
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local env = scripts[file]
|
|
|
|
|
if env == nil then
|
|
|
|
|
env = {}
|
|
|
|
@ -428,12 +440,26 @@ function dfhack.run_script_with_env(envVars,name,...)
|
|
|
|
|
for x,y in pairs(envVars or {}) do
|
|
|
|
|
env[x] = y
|
|
|
|
|
end
|
|
|
|
|
local f,perr = loadfile(file, 't', env)
|
|
|
|
|
if f then
|
|
|
|
|
scripts[file] = env
|
|
|
|
|
return f(...), env
|
|
|
|
|
local f
|
|
|
|
|
local perr
|
|
|
|
|
local time = dfhack.filesystem.mtime(file)
|
|
|
|
|
if time == scriptMtime[file] then
|
|
|
|
|
f = scripts[file].runScript
|
|
|
|
|
else
|
|
|
|
|
env = {}
|
|
|
|
|
setmetatable(env, { __index = base_env })
|
|
|
|
|
for x,y in pairs(envVars or {}) do
|
|
|
|
|
env[x] = y
|
|
|
|
|
end
|
|
|
|
|
--reload
|
|
|
|
|
f,perr = loadfile(file, 't', env)
|
|
|
|
|
if not f then
|
|
|
|
|
error(perr)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
scripts[file] = env
|
|
|
|
|
env.runScript = f
|
|
|
|
|
return f(...), env
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function _run_command(...)
|
|
|
|
|