1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2024-12-30 23:17:53 +02:00
ComfyFactorio/utils/scenariohandler.lua
2021-03-24 20:14:55 +01:00

137 lines
3.8 KiB
Lua

local Server = require 'utils.server'
local Global = require 'utils.globals'
local mapkeeper = '[color=blue]Mapkeeper:[/color]'
local Public = {}
local this = {
scenarioname = '',
reset_are_you_sure = false,
restart = false,
soft_reset = false,
shutdown = false,
accepted_params = {
['restart'] = true,
['resetnow'] = true,
['shutdown'] = true,
['restartnow'] = true
}
}
Global.register(
this,
function(t)
this = t
end
)
commands.add_command(
'scenario',
'Usable only for admins - controls the scenario!',
function(cmd)
local p
local player = game.player
if not player or not player.valid then
p = log
else
p = player.print
if not player.admin then
return
end
end
local param = cmd.parameter
if this.accepted_params[param] then
goto continue
else
p('[ERROR] Arguments was invalid.')
return
end
::continue::
if not this.reset_are_you_sure then
this.reset_are_you_sure = true
p('[WARNING] This command will disable the soft-reset feature, run this command again if you really want to do this!')
return
end
if param == 'restart' then
if this.restart then
this.reset_are_you_sure = nil
this.restart = false
this.soft_reset = true
p('[SUCCESS] Soft-reset is once again enabled.')
return
else
this.reset_are_you_sure = nil
this.restart = true
this.soft_reset = false
if this.shutdown then
this.shutdown = false
end
p('[WARNING] Soft-reset is disabled! Server will restart from scenario to load new changes.')
return
end
elseif param == 'restartnow' then
this.reset_are_you_sure = nil
p(player.name .. ' restarted the game.')
Server.start_scenario(this.scenarioname)
return
elseif param == 'shutdown' then
if this.shutdown then
this.reset_are_you_sure = nil
this.shutdown = false
this.soft_reset = true
p('[SUCCESS] Soft-reset is once again enabled.')
return
else
this.reset_are_you_sure = nil
this.shutdown = true
this.soft_reset = false
if this.restart then
this.restart = false
end
p('[WARNING] Soft-reset is disabled! Server will shutdown. Most likely because of updates.')
return
end
elseif param == 'reset' then
this.reset_are_you_sure = nil
if player and player.valid then
game.print(mapkeeper .. ' ' .. player.name .. ', has reset the game!', {r = 0.98, g = 0.66, b = 0.22})
else
game.print(mapkeeper .. ' server, has reset the game!', {r = 0.98, g = 0.66, b = 0.22})
end
-- reset_map()
p('[WARNING] Game has been reset!')
return
end
end
)
function Public.map_reset_callback(data, callback)
if not data then
return
end
if not callback then
return
end
if not string.find(callback, '%s') and not string.find(callback, 'return') then
callback = 'return ' .. callback
end
if type(callback) == 'function' then
local success, err = pcall(callback, data)
return success, err
else
local success, err = pcall(loadstring(callback), data)
return success, err
end
end
return Public