138 lines
4.3 KiB
Lua
138 lines
4.3 KiB
Lua
|
-- reaction-trigger-transition.lua
|
||
|
-- author expwnent
|
||
|
-- prints useful things to the console and a file to help modders transition from autoSyndrome to reaction-trigger
|
||
|
-- this script is basically an apology for breaking backward compatibiility
|
||
|
|
||
|
local function maybeQuote(str)
|
||
|
if str == '' or string.find(str,' ') then
|
||
|
return ('"' .. str .. '"')
|
||
|
else
|
||
|
return str
|
||
|
end
|
||
|
end
|
||
|
|
||
|
warnings = ''
|
||
|
output = ''
|
||
|
for _,reaction in ipairs(df.global.world.raws.reactions) do
|
||
|
local function foreachProduct(product)
|
||
|
local prodType = product:getType()
|
||
|
if prodType ~= df.reaction_product_type.item then
|
||
|
return
|
||
|
end
|
||
|
if product.item_type ~= df.item_type.BOULDER then
|
||
|
return
|
||
|
end
|
||
|
if product.mat_index < 0 then
|
||
|
return
|
||
|
end
|
||
|
local inorganic = df.global.world.raws.inorganics[product.mat_index]
|
||
|
local didInorganicName
|
||
|
for _,syndrome in ipairs(inorganic.material.syndrome) do
|
||
|
local workerOnly = true
|
||
|
local allowMultipleTargets = false;
|
||
|
local command
|
||
|
local commandStr
|
||
|
local destroyRock = true;
|
||
|
local foundAutoSyndrome = false;
|
||
|
local resetPolicy;
|
||
|
for i,synclass in ipairs(syndrome.syn_class) do
|
||
|
synclass = synclass.value
|
||
|
if false then
|
||
|
elseif synclass == '\\AUTO_SYNDROME' then
|
||
|
foundAutoSyndrome = true
|
||
|
elseif synclass == '\\ALLOW_NONWORKER_TARGETS' then
|
||
|
workerOnly = false
|
||
|
elseif synclass == '\\ALLOW_MULTIPLE_TARGETS' then
|
||
|
allowMultipleTargets = true
|
||
|
elseif synclass == '\\PRESERVE_ROCK' then
|
||
|
destroyRock = false
|
||
|
elseif synclass == '\\RESET_POLICY DoNothing' then
|
||
|
resetPolicy = 'DoNothing'
|
||
|
elseif synclass == '\\RESET_POLICY ResetDuration' then
|
||
|
resetPolicy = 'ResetDuration'
|
||
|
elseif synclass == '\\RESET_POLICY AddDuration' then
|
||
|
resetPolicy = 'AddDuration'
|
||
|
elseif synclass == '\\RESET_POLICY NewInstance' then
|
||
|
resetPolicy = 'NewInstance'
|
||
|
elseif synclass == '\\COMMAND' then
|
||
|
command = ''
|
||
|
elseif command then
|
||
|
if synclass == '\\LOCATION' then
|
||
|
command = command .. '\\LOCATION '
|
||
|
elseif synclass == '\\WORKER_ID' then
|
||
|
command = command .. '\\WORKER_ID '
|
||
|
elseif synclass == '\\REACTION_INDEX' then
|
||
|
warnings = warnings .. ('Warning: \\REACTION_INDEX is deprecated. Use \\REACTION_NAME instead.\n')
|
||
|
command = command .. '\\REACTION_NAME '
|
||
|
else
|
||
|
commandStr = true
|
||
|
command = command .. maybeQuote(synclass) .. ' '
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
if foundAutoSyndrome then
|
||
|
if destroyRock then
|
||
|
warnings = warnings .. ('Warning: instead of destroying the rock, do not produce it in the first place.\n')
|
||
|
end
|
||
|
if workerOnly then
|
||
|
workerOnly = 'true'
|
||
|
else
|
||
|
workerOnly = 'false'
|
||
|
end
|
||
|
if allowMultipleTargets then
|
||
|
allowMultipleTargets = 'true'
|
||
|
else
|
||
|
allowMultipleTargets = 'false'
|
||
|
end
|
||
|
local reactionTriggerStr = 'modtools/reaction-trigger -reactionName ' .. maybeQuote(reaction.code) --.. '"'
|
||
|
if workerOnly ~= 'true' then
|
||
|
reactionTriggerStr = reactionTriggerStr .. ' -workerOnly ' .. workerOnly
|
||
|
end
|
||
|
if allowMultipleTargets ~= 'false' then
|
||
|
reactionTriggerStr = reactionTriggerStr .. ' -allowMultipleTargets ' .. allowMultipleTargets
|
||
|
end
|
||
|
if resetPolicy and resetPolicy ~= 'NewInstance' then
|
||
|
reactionTriggerStr = reactionTriggerStr .. ' -resetPolicy ' .. resetPolicy
|
||
|
end
|
||
|
if #syndrome.ce > 0 then
|
||
|
if syndrome.syn_name == '' then
|
||
|
warnings = warnings .. ('Warning: give this syndrome a name!\n')
|
||
|
end
|
||
|
reactionTriggerStr = reactionTriggerStr .. ' -syndrome ' .. maybeQuote(syndrome.syn_name) .. ''
|
||
|
end
|
||
|
if command and commandStr then
|
||
|
reactionTriggerStr = reactionTriggerStr .. ' -command ' .. command
|
||
|
end
|
||
|
if (not command or command == '') and (not syndrome.syn_name or syndrome.syn_name == '') then
|
||
|
--output = output .. '#'
|
||
|
else
|
||
|
if not didInorganicName then
|
||
|
-- output = output .. '# ' .. (inorganic.id) .. '\n'
|
||
|
didInorganicName = true
|
||
|
end
|
||
|
output = output .. (reactionTriggerStr) .. '\n'
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
for _,product in ipairs(reaction.products) do
|
||
|
foreachProduct(product)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
print(warnings)
|
||
|
print('\n\n\n\n')
|
||
|
print(output)
|
||
|
local file = io.open('reaction-trigger-transition.txt', 'w+')
|
||
|
--io.output(file)
|
||
|
--file:write(warnings)
|
||
|
--file:write('\n\n\n\n')
|
||
|
file:write(output)
|
||
|
file:flush()
|
||
|
--io.flush(file)
|
||
|
io.close(file)
|
||
|
--io.output()
|
||
|
print('transition information written to reaction-trigger-transition.txt')
|
||
|
|
||
|
|