From 34fd5119706f4bd92c748288618451badd3b7026 Mon Sep 17 00:00:00 2001 From: Gerkiz Date: Sat, 6 Jul 2019 23:44:27 +0200 Subject: [PATCH] Minor changes Instead of player tables, the values are stored as numbers inside playersession. Added also if player is playing singleplayer then create the player.name is directly on player_join created in the playsession table. --- player_list.lua | 4 +-- utils/session_data.lua | 79 ++++++++++++++++-------------------------- 2 files changed, 32 insertions(+), 51 deletions(-) diff --git a/player_list.lua b/player_list.lua index e0920e59..960fe135 100644 --- a/player_list.lua +++ b/player_list.lua @@ -87,7 +87,7 @@ end local function get_rank(player) local play_table = play_time.get_session_table() - local t = play_table[player.name][1] + local t = play_table[player.name] local m = (player.online_time + t) / 3600 @@ -138,7 +138,7 @@ local function get_sorted_list(sort_by) player_list[i].name = player.name - t = play_table[player.name][1] + t = play_table[player.name] player_list[i].total_played_time = get_formatted_playtime(t + player.online_time) player_list[i].total_played_ticks = t + player.online_time diff --git a/utils/session_data.lua b/utils/session_data.lua index a3d516b9..cfdcbb9d 100644 --- a/utils/session_data.lua +++ b/utils/session_data.lua @@ -9,7 +9,7 @@ local table = require 'utils.table' local Print = require('utils.print_override') local raw_print = Print.raw_print -local session_data_set = 'player_session' +local session_data_set = 'sessions' local playsession = {} local done_fetching = nil local set_data = Server.set_data @@ -36,7 +36,7 @@ printinfo = end --- Sends back data to data.key with data.value -local callback = +local store = Token.register( function(data) local p_name = data.key @@ -45,46 +45,44 @@ local callback = local change = player.online_time local value = data.value if value then - set_data(session_data_set, name, {value[1] + change}) + set_data(session_data_set, name, value + change) else - set_data(session_data_set, name, {change}) + set_data(session_data_set, name, change) end end ) ---- Writes the data called back from the server into the session table -local sync_session_callback = + +local retrieve = Token.register( function(data) - for k, v in pairs(data.entries) do - playsession[k] = v + 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 - raw_print("[DATA-TRACKED] Done fetching all data.") - done_fetching = true end ) local function tick() for _, p in pairs(game.connected_players) do - local session = playsession[p.name] - - if session then - Public.update(p.name) - else - Public.set(p.name, {p.online_time}) - end + Public.update(p.name) end end --- Tries to get data from the webpanel and updates the dataset with values. function Public.update(key) - try_get_data(session_data_set, key, callback) + try_get_data(session_data_set, key, store) end ---- Stores data in the webpanel --- @param set(key, value) -function Public.set(key, value) - set_data(session_data_set, key, value) +--- Tries to get data from the webpanel and updates the local table with values. +function Public.fetch(key) + try_get_data(session_data_set, key, retrieve) end --- Checks if a player exists within the table @@ -94,11 +92,6 @@ function Public.exists(player_name) return playsession[player_name] ~= nil end ---- Signals the server to retrieve the session data-set -function Public.sync_session() - Server.try_get_all_data(session_data_set, sync_session_callback) -end - --- Prints a list of all players in the player_session table. function Public.print_sessions() local result = {} @@ -117,12 +110,6 @@ function Public.get_session_table() return playsession end -Event.add( - Server.events.on_server_started, - function() - Public.sync_session() - end -) Event.add( defines.events.on_player_joined_game, function(event) @@ -130,11 +117,13 @@ Event.add( if not player then return end - - local session = playsession[player.name] - - if not session then - playsession[player.name] = {player.online_time} return end + if game.is_multiplayer() then + if not playsession[player.name] then + Public.fetch(player.name) + end + else + playsession[player.name] = player.online_time + end end ) @@ -145,17 +134,9 @@ Event.add( if not player then return end - - local session = playsession[player.name] - - if done_fetching then - if session then - Public.update(player.name) - else - Public.set(player.name, {player.online_time}) - end + if game.is_multiplayer() then + Public.update(player.name) end - end ) @@ -168,4 +149,4 @@ Server.on_data_set_changed( end ) -return Public +return Public \ No newline at end of file