1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-02-01 13:08:05 +02:00

Minor change

Fixed an error: 
player time could be abused by reconnecting.
This commit is contained in:
Gerkiz 2019-07-07 02:07:50 +02:00
parent bca457e0ed
commit 4af6aa4be7

View File

@ -10,16 +10,19 @@ local Print = require('utils.print_override')
local raw_print = Print.raw_print local raw_print = Print.raw_print
local session_data_set = 'sessions' local session_data_set = 'sessions'
local playsession = {} local session = {}
local online_track = {}
local set_data = Server.set_data local set_data = Server.set_data
local try_get_data = Server.try_get_data local try_get_data = Server.try_get_data
local concat = table.concat local concat = table.concat
local nth_tick = 54001 -- nearest prime to 15 minutes in ticks local nth_tick = 54001 -- nearest prime to 15 minutes in ticks
Global.register( Global.register({
playsession, session=session,
online_track=online_track},
function(tbl) function(tbl)
playsession = tbl session = tbl.session
online_track = tbl.online_track
end end
) )
@ -34,68 +37,57 @@ printinfo =
) )
end end
--- Sends back data to data.key with data.value local fetch =
local store =
Token.register( Token.register(
function(data) function(data)
local p_name = data.key local key = data.key
local player = game.get_player(p_name)
local name = player.name
local change = player.online_time
local value = data.value local value = data.value
if value then if value then
set_data(session_data_set, name, value + change) session[key] = value
else else
set_data(session_data_set, name, change) session[key] = 0
end
end
)
local retrieve =
Token.register(
function(data)
local p_name = data.key
local player = game.get_player(p_name)
local name = player.name
local change = player.online_time
local value = data.value
if value then
playsession[name] = value
else
playsession[name] = change
end end
end end
) )
local function tick() local function tick()
for _, p in pairs(game.connected_players) do for _, p in pairs(game.connected_players) do
Public.update(p.name) Public.send(p, p.name)
end end
end end
--- Tries to get data from the webpanel and updates the dataset with values. --- Tries to get data from the webpanel and updates the dataset with values.
function Public.update(key) -- @param player name
try_get_data(session_data_set, key, store) function Public.send(player, name)
if not online_track[name] then
online_track[name] = 0
end
if session[name] then
local old_time = session[name]
local new_time = old_time + player.online_time - online_track[name]
set_data(session_data_set, name, new_time)
online_track[name] = player.online_time
end
end end
--- Tries to get data from the webpanel and updates the local table with values. --- Tries to get data from the webpanel and updates the local table with values.
-- @param data_set player token
function Public.fetch(key) function Public.fetch(key)
try_get_data(session_data_set, key, retrieve) try_get_data(session_data_set, key, fetch)
end end
--- Checks if a player exists within the table --- Checks if a player exists within the table
-- @param player_name <string> -- @param player_name <string>
-- @return <boolean> -- @return <boolean>
function Public.exists(player_name) function Public.exists(player_name)
return playsession[player_name] ~= nil return session[player_name] ~= nil
end end
--- Prints a list of all players in the player_session table. --- Prints a list of all players in the player_session table.
function Public.print_sessions() function Public.print_sessions()
local result = {} local result = {}
for k, _ in pairs(playsession) do for k, _ in pairs(session) do
result[#result + 1] = k result[#result + 1] = k
end end
@ -103,10 +95,16 @@ function Public.print_sessions()
Game.player_print(result) Game.player_print(result)
end end
--- Returns the table of player_session --- Returns the table of session
-- @return <table> -- @return <table>
function Public.get_session_table() function Public.get_session_table()
return playsession return session
end
--- Returns the table of online_track
-- @return <table>
function Public.get_tracker_table()
return online_track
end end
Event.add( Event.add(
@ -117,11 +115,10 @@ Event.add(
return return
end end
if game.is_multiplayer() then if game.is_multiplayer() then
if not playsession[player.name] then Public.fetch(player.name)
Public.fetch(player.name) Public.send(player, player.name)
end
else else
playsession[player.name] = player.online_time session[player.name] = player.online_time
end end
end end
) )
@ -134,7 +131,7 @@ Event.add(
return return
end end
if game.is_multiplayer() then if game.is_multiplayer() then
Public.update(player.name) Public.send(player, player.name)
end end
end end
) )
@ -144,8 +141,8 @@ Event.on_nth_tick(nth_tick, tick)
Server.on_data_set_changed( Server.on_data_set_changed(
session_data_set, session_data_set,
function(data) function(data)
playsession[data.key] = data.value session[data.key] = data.value
end end
) )
return Public return Public