mirror of
https://github.com/Refactorio/RedMew.git
synced 2024-12-12 10:04:40 +02:00
26e1c28dc0
* Init Factorio 2.0 update * add credits * fix test module * I know luackeck, I know * Fixes * Fix bad event.player_index handling * Hotfixes * Remove all filter inserters * Migrate removed items * Deprecating spidertron control and landfill features
299 lines
7.6 KiB
Lua
299 lines
7.6 KiB
Lua
local Server = require 'features.server'
|
|
local Token = require 'utils.token'
|
|
local Command = require 'utils.command'
|
|
local Global = require 'utils.global'
|
|
local Ranks = require 'resources.ranks'
|
|
local table = require 'utils.table'
|
|
|
|
local primitives = {
|
|
copy = nil,
|
|
delete = nil,
|
|
new_dataset = nil,
|
|
lockout = nil
|
|
}
|
|
|
|
Global.register(
|
|
{
|
|
primitives = primitives
|
|
},
|
|
function(tbl)
|
|
primitives = tbl.primitives
|
|
end
|
|
)
|
|
|
|
--- Clears primitives
|
|
local function clear_primitives()
|
|
primitives.copy = nil
|
|
primitives.delete = nil
|
|
primitives.new_dataset = nil
|
|
primitives.lockout = nil
|
|
end
|
|
|
|
--- Writes entries to datasets
|
|
local function write_dataset(dataset, entries)
|
|
if not dataset or not entries then
|
|
game.print('Empty entries or dataset (This is usually due to calling the wrong data_set)')
|
|
clear_primitives()
|
|
return
|
|
end
|
|
|
|
for k, v in pairs(entries) do
|
|
Server.set_data(dataset, k, v)
|
|
end
|
|
end
|
|
|
|
--- Nils a dataset
|
|
local function nil_dataset(dataset, entries)
|
|
if not dataset or not entries then
|
|
game.print('Empty entries or dataset (This is usually due to calling the wrong data_set)')
|
|
clear_primitives()
|
|
return
|
|
end
|
|
|
|
for k in pairs(entries) do
|
|
Server.set_data(dataset, k, nil)
|
|
end
|
|
end
|
|
|
|
--- Callback token
|
|
local data_callback =
|
|
Token.register(
|
|
function(data)
|
|
local old_dataset = data.data_set
|
|
if not old_dataset then
|
|
game.print('Empty entries (This is usually due to calling the wrong data_set)')
|
|
clear_primitives()
|
|
return
|
|
end
|
|
|
|
local entries = data.entries
|
|
if not entries then
|
|
game.print('Empty entries (This is usually due to calling the wrong data_set)')
|
|
clear_primitives()
|
|
return
|
|
end
|
|
|
|
if primitives.copy then
|
|
write_dataset(primitives.new_dataset, entries)
|
|
end
|
|
|
|
if primitives.delete then
|
|
nil_dataset(old_dataset, entries)
|
|
end
|
|
|
|
clear_primitives()
|
|
game.print('Dataset operation complete.')
|
|
end
|
|
)
|
|
|
|
--- Sets parameters to have a dataset copied
|
|
local function copy_dataset(args)
|
|
if primitives.lockout then
|
|
game.print('Data processing already in progress.')
|
|
return
|
|
end
|
|
|
|
local dataset = args.dataset
|
|
local destination = args.destination
|
|
game.print('Copying: ' .. dataset .. ' to ' .. destination)
|
|
|
|
primitives.new_dataset = destination
|
|
primitives.copy = true
|
|
primitives.delete = false
|
|
primitives.lockout = true
|
|
|
|
Server.try_get_all_data(dataset, data_callback)
|
|
end
|
|
|
|
--- Sets parameters to have a dataset moved
|
|
local function move_dataset(args)
|
|
if primitives.lockout then
|
|
game.print('Data processing already in progress.')
|
|
return
|
|
end
|
|
|
|
local dataset = args.dataset
|
|
local destination = args.destination
|
|
game.print('Moving: ' .. dataset .. ' to ' .. destination)
|
|
|
|
primitives.new_dataset = destination
|
|
primitives.copy = true
|
|
primitives.delete = true
|
|
primitives.lockout = true
|
|
|
|
Server.try_get_all_data(dataset, data_callback)
|
|
end
|
|
|
|
--- Sets parameters to have a dataset deleted
|
|
local function delete_dataset(args)
|
|
if primitives.lockout then
|
|
game.print('Data processing already in progress.')
|
|
return
|
|
end
|
|
|
|
local dataset = args.dataset
|
|
game.print('Deleting: ' .. dataset)
|
|
|
|
primitives.new_dataset = nil
|
|
primitives.copy = false
|
|
primitives.delete = true
|
|
primitives.lockout = true
|
|
|
|
Server.try_get_all_data(dataset, data_callback)
|
|
end
|
|
|
|
Command.add(
|
|
'dataset-copy',
|
|
{
|
|
description = {'command_description.dataset_copy'},
|
|
arguments = {'dataset', 'destination'},
|
|
required_rank = Ranks.admin,
|
|
debug_only = true,
|
|
allowed_by_server = true
|
|
},
|
|
copy_dataset
|
|
)
|
|
|
|
Command.add(
|
|
'dataset-move',
|
|
{
|
|
description = {'command_description.dataset_move'},
|
|
arguments = {'dataset', 'destination'},
|
|
required_rank = Ranks.admin,
|
|
debug_only = true,
|
|
allowed_by_server = true
|
|
},
|
|
move_dataset
|
|
)
|
|
|
|
Command.add(
|
|
'dataset-delete',
|
|
{
|
|
description = {'command_description.dataset_delete'},
|
|
arguments = {'dataset'},
|
|
required_rank = Ranks.admin,
|
|
debug_only = true,
|
|
allowed_by_server = true
|
|
},
|
|
delete_dataset
|
|
)
|
|
|
|
--- Callback token
|
|
local transform_callback =
|
|
Token.register(
|
|
function(data)
|
|
local entries = data.entries
|
|
if not entries then
|
|
game.print('Empty entries (This is usually due to calling the wrong data_set)')
|
|
clear_primitives()
|
|
return
|
|
end
|
|
|
|
local returned_entries = storage.transform_function(entries)
|
|
|
|
write_dataset(primitives.new_dataset, returned_entries)
|
|
|
|
clear_primitives()
|
|
game.print('Transform complete.')
|
|
end
|
|
)
|
|
|
|
--- Takes a data set, transforms it, then copies it.
|
|
local function transform_data(args)
|
|
if primitives.lockout then
|
|
game.print('Data processing already in progress.')
|
|
clear_primitives()
|
|
return
|
|
end
|
|
|
|
local transform_function = storage.transform_function
|
|
if not transform_function then
|
|
game.print('No transform function set')
|
|
clear_primitives()
|
|
return
|
|
end
|
|
|
|
if type(transform_function) ~= 'function' then
|
|
game.print('storage.transform_function does not contain a function')
|
|
clear_primitives()
|
|
return
|
|
end
|
|
|
|
local destination = args.destination
|
|
local dataset = args.dataset
|
|
if destination == dataset then
|
|
game.print('For transforms, you must copy the output to a different dataset')
|
|
clear_primitives()
|
|
return
|
|
end
|
|
|
|
game.print('Beginning transform...')
|
|
primitives.new_dataset = args.destination
|
|
primitives.lockout = true
|
|
Server.try_get_all_data(args.dataset, transform_callback)
|
|
end
|
|
|
|
local transform_test_callback =
|
|
Token.register(
|
|
function(data)
|
|
local entries = data.entries
|
|
if not entries then
|
|
game.print('Empty entries (This is usually due to calling the wrong data_set).')
|
|
clear_primitives()
|
|
return
|
|
end
|
|
|
|
local transform_function = storage.transform_function
|
|
if not transform_function then
|
|
game.print('No transform function set.')
|
|
clear_primitives()
|
|
return
|
|
end
|
|
|
|
if type(transform_function) ~= 'function' then
|
|
game.print('storage.transform_function does not contain a function.')
|
|
clear_primitives()
|
|
return
|
|
end
|
|
|
|
local returned_entries = storage.transform_function(entries)
|
|
|
|
clear_primitives()
|
|
|
|
storage.transform_results = returned_entries
|
|
local result_str = table.inspect(returned_entries)
|
|
game.print(result_str)
|
|
log(result_str)
|
|
game.print('Test complete. The results can be better seen in the log or in storage.transform_results')
|
|
end
|
|
)
|
|
|
|
local function transform_data_test(args)
|
|
game.print('Testing transform...')
|
|
Server.try_get_all_data(args.dataset, transform_test_callback)
|
|
end
|
|
|
|
Command.add(
|
|
'dataset-transform',
|
|
{
|
|
description = {'command_description.dataset_transform'},
|
|
arguments = {'dataset', 'destination'},
|
|
required_rank = Ranks.admin,
|
|
debug_only = true,
|
|
allowed_by_server = true
|
|
},
|
|
transform_data
|
|
)
|
|
|
|
Command.add(
|
|
'dataset-transform-test',
|
|
{
|
|
description = {'command_description.dataset_transform_test'},
|
|
arguments = {'dataset'},
|
|
required_rank = Ranks.admin,
|
|
debug_only = true,
|
|
allowed_by_server = true
|
|
},
|
|
transform_data_test
|
|
)
|