mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-06 00:23:49 +02:00
76 lines
2.6 KiB
Lua
76 lines
2.6 KiB
Lua
--this script provides a way to keep track of player data across multiple play sessions
|
|
--playtime or other data can be saved in /script-output in the factorio folder
|
|
--to update the stats for the next game session:
|
|
--move the ../factorio/script-output files to ../factorio/scenarios/**SCENARIONAME**/session_data/
|
|
--and add the names of the new files after "local index = {" in the session_data.lua
|
|
|
|
local Event = require 'utils.event'
|
|
local play_sessions = require 'session_data'
|
|
|
|
function write_session_file()
|
|
if global.file_name_found then
|
|
game.remove_path(global.file_name)
|
|
game.write_file(global.file_name, "local playsession = {\n" , true)
|
|
for x = 1, #game.players, 1 do
|
|
local p = game.players[x]
|
|
local str = ""
|
|
if game.players[x+1] then str = "," end
|
|
game.write_file(global.file_name, '\t{"' .. p.name .. '", {' .. p.online_time .. '}}' .. str .. '\n' , true)
|
|
end
|
|
game.write_file(global.file_name, "}\nreturn playsession" , true)
|
|
end
|
|
end
|
|
|
|
local function on_player_changed_position(event)
|
|
if not global.file_name_found then
|
|
if global.movement_done < global.movement_amount_required then
|
|
local player = game.players[event.player_index]
|
|
global.movement_done = global.movement_done + 1
|
|
else
|
|
if string.len(global.file_name) < 16 then
|
|
if math.random(1,2) == 1 then
|
|
global.file_name = global.file_name .. string.char(math.random(97,122))
|
|
else
|
|
global.file_name = global.file_name .. string.char(math.random(65,90))
|
|
end
|
|
global.movement_done = 0
|
|
end
|
|
end
|
|
if string.len(global.file_name) == 16 then
|
|
global.file_name = global.file_name .. ".lua"
|
|
--game.print("Session data will be saved as " .. global.file_name,{r = 0.9, g = 0.9, b = 0.9})
|
|
global.file_name_found = true
|
|
end
|
|
end
|
|
end
|
|
|
|
local function on_player_joined_game(event)
|
|
if not global.tracker_init_done then
|
|
global.movement_done = 0
|
|
global.file_name = ""
|
|
global.movement_amount_required = 16
|
|
global.player_totals = {}
|
|
for _, session in pairs(play_sessions) do
|
|
for _, player_data in pairs(session) do
|
|
if not global.player_totals[player_data[1]] then
|
|
global.player_totals[player_data[1]] = {player_data[2][1]}
|
|
else
|
|
global.player_totals[player_data[1]] = {global.player_totals[player_data[1]][1] + player_data[2][1]}
|
|
end
|
|
end
|
|
end
|
|
global.tracker_init_done = true
|
|
end
|
|
end
|
|
|
|
local function on_tick()
|
|
if global.file_name_found then
|
|
if game.tick % 36000 == 0 then
|
|
write_session_file()
|
|
end
|
|
end
|
|
end
|
|
|
|
Event.add(defines.events.on_tick, on_tick)
|
|
Event.add(defines.events.on_player_changed_position, on_player_changed_position)
|
|
Event.add(defines.events.on_player_joined_game, on_player_joined_game) |