mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 11:35:22 +09:00
Added Statistics
This commit is contained in:
@@ -391,7 +391,7 @@ self:write_action('save', 'TestKey', 'Foo')
|
||||
function Datastore:write_action(action, key, value)
|
||||
local data = {action, self.name, key}
|
||||
if value ~= nil then
|
||||
data[4] = type(value) == 'table' and game.table_to_json(value) or tostring(value)
|
||||
data[4] = type(value) == 'table' and game.table_to_json(value) or value
|
||||
end
|
||||
game.write_file('ext/datastore.out', table.concat(data, ' ')..'\n', true, 0)
|
||||
end
|
||||
@@ -517,7 +517,7 @@ ExampleData:increment('TestNumber')
|
||||
function Datastore:increment(key, delta)
|
||||
key = self:serialize(key)
|
||||
local value = self:raw_get(key) or 0
|
||||
return Datastore:set(key, value + (delta or 1))
|
||||
return self:set(key, value + (delta or 1))
|
||||
end
|
||||
|
||||
local function update_error(err) error('An error ocurred in datastore update: '..trace(err), 2) end
|
||||
@@ -560,7 +560,7 @@ function Datastore:remove(key)
|
||||
if self.parent and self.parent.auto_save then return self.parent:save(key) end
|
||||
end
|
||||
|
||||
local function filter_error(err) print('An error ocurred in a datastore filter:'..trace(err)) end
|
||||
local function filter_error(err) log('An error ocurred in a datastore filter:'..trace(err)) end
|
||||
--[[-- Internal, Used to filter elements from a table
|
||||
@tparam table tbl The table that will have the filter applied to it
|
||||
@tparam[opt] function callback The function that will be used as a filter, if none giving then the provided table is returned
|
||||
@@ -737,7 +737,7 @@ end
|
||||
----- Events
|
||||
-- @section events
|
||||
|
||||
local function event_error(err) print('An error ocurred in a datastore event handler: '..trace(err)) end
|
||||
local function event_error(err) log('An error ocurred in a datastore event handler: '..trace(err)) end
|
||||
--[[-- Internal, Raise an event on this datastore
|
||||
@tparam string event_name The name of the event to raise for this datastore
|
||||
@tparam string key The key that this event is being raised for
|
||||
|
||||
@@ -83,26 +83,30 @@ end)
|
||||
--- Async function called after 5 seconds with no player data loaded
|
||||
local check_data_loaded = Async.register(function(player)
|
||||
local player_data = PlayerData:get(player)
|
||||
if not player_data then
|
||||
if not player_data or not player_data.valid then
|
||||
player.print{'expcore-data.data-failed'}
|
||||
Datastore.ingest('request', 'PlayerData', player.name, '{"failed_load":true}')
|
||||
Datastore.ingest('request', 'PlayerData', player.name, '{"valid":false}')
|
||||
end
|
||||
end)
|
||||
|
||||
--- When player data loads tell the player if the load had failed previously
|
||||
PlayerData:on_load(function(player_name, player_data)
|
||||
if not player_data or player_data.failed_load then return end
|
||||
if not player_data or not player_data.valid then return end
|
||||
local existing_data = PlayerData:get(player_name)
|
||||
if existing_data and existing_data.failed_load then
|
||||
if existing_data and existing_data.valid == false then
|
||||
game.players[player_name].print{'expcore-data.data-restore'}
|
||||
end
|
||||
player_data.valid = true
|
||||
end)
|
||||
|
||||
--- Remove data that the player doesnt want to have stored
|
||||
PlayerData:on_save(function(player_name, player_data)
|
||||
local dataPreference = DataSavingPreference:get(player_name)
|
||||
dataPreference = PreferenceEnum[dataPreference]
|
||||
if dataPreference == PreferenceEnum.All then return player_data end
|
||||
if dataPreference == PreferenceEnum.All then
|
||||
player_data.valid = nil
|
||||
return player_data
|
||||
end
|
||||
|
||||
local saved_player_data = { PlayerRequired = player_data.PlayerRequired, DataSavingPreference = PreferenceEnum[dataPreference] }
|
||||
if dataPreference <= PreferenceEnum.Settings then saved_player_data.PlayerSettings = player_data.PlayerSettings end
|
||||
@@ -119,17 +123,17 @@ end)
|
||||
--- Load player data when they join
|
||||
Event.add(defines.events.on_player_joined_game, function(event)
|
||||
local player = game.players[event.player_index]
|
||||
PlayerData:request(player)
|
||||
Async.wait(300, check_data_loaded, player)
|
||||
PlayerData:request(player)
|
||||
end)
|
||||
|
||||
--- Unload player data when they leave
|
||||
Event.add(defines.events.on_player_left_game, function(event)
|
||||
local player = game.players[event.player_index]
|
||||
local player_data = PlayerData:get(player)
|
||||
if player_data.failed_load then
|
||||
PlayerData:raw_set(player)
|
||||
else PlayerData:unload(player) end
|
||||
if player_data.valid == true then
|
||||
PlayerData:unload(player)
|
||||
else PlayerData:raw_set(player) end
|
||||
end)
|
||||
|
||||
----- Module Return -----
|
||||
|
||||
Reference in New Issue
Block a user