1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-06 00:23:49 +02:00
ComfyFactorio/session_tracker.lua
2018-09-30 18:16:08 +02:00

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)