1
0
mirror of https://github.com/sys4-fr/server-nalc.git synced 2025-02-05 06:30:19 +01:00

[mana] Save and load data individually for each player

This commit is contained in:
LeMagnesium 2016-06-12 17:27:18 +02:00
parent 4f00461c3c
commit 46407b0062

View File

@ -35,6 +35,8 @@ do
end end
minetest.mkdir(minetest.get_worldpath() .. "/mana/")
--[===[ --[===[
API functions API functions
]===] ]===]
@ -157,40 +159,39 @@ end
-- Load the playerlist from a previous session, if available. -- Load the playerlist from a previous session, if available.
function mana.load_file() function mana.load_file(playername)
local filepath = minetest.get_worldpath().."/mana.mt" local filepath = minetest.get_worldpath().."/mana/" .. playername
local file = io.open(filepath, "r") local file = io.open(filepath, "r")
if file then if file then
minetest.log("action", "[mana] mana.mt opened.") minetest.log("action", "[mana] File opened for player " .. playername .. ".")
local string = file:read() local string = file:read()
io.close(file) io.close(file)
if(string ~= nil) then if(string ~= nil) then
local savetable = minetest.deserialize(string) local savetable = minetest.deserialize(string)
if savetable and type(savetable) == "table" and savetable.playerlist and type(savetable.playerlist) == "table" then if savetable and type(savetable) == "table" then
minetest.log("action", "[mana] mana.mt successfully read.") minetest.log("action", "[mana] Data successfully read.")
return savetable.playerlist return savetable
end end
end end
end end
return {} return {}
end end
mana.playerlist = mana.load_file() mana.playerlist = {}
function mana.save_to_file() function mana.save_to_file(playername)
local savetable = {} local savetable = mana.playerlist[playername]
savetable.playerlist = mana.playerlist
local savestring = minetest.serialize(savetable) local savestring = minetest.serialize(savetable)
local filepath = minetest.get_worldpath().."/mana.mt" local filepath = minetest.get_worldpath().."/mana/" .. playername
local file = io.open(filepath, "w") local file = io.open(filepath, "w")
if file then if file then
file:write(savestring) file:write(savestring)
io.close(file) io.close(file)
minetest.log("action", "[mana] Wrote mana data into "..filepath..".") minetest.log("action", "[mana] Wrote mana data for "..playername..".")
else else
minetest.log("error", "[mana] Failed to write mana data into "..filepath..".") minetest.log("error", "[mana] Failed to write mana data for "..playername..".")
end end
end end
@ -207,19 +208,21 @@ minetest.register_on_leaveplayer(function(player)
if not minetest.get_modpath("hudbars") ~= nil then if not minetest.get_modpath("hudbars") ~= nil then
mana.hud_remove(playername) mana.hud_remove(playername)
end end
mana.save_to_file() mana.save_to_file(playername)
end) end)
minetest.register_on_shutdown(function() minetest.register_on_shutdown(function()
minetest.log("action", "[mana] Server shuts down. Rescuing data into mana.mt") minetest.log("action", "[mana] Server shuts down. Rescuing data into mana.mt")
mana.save_to_file() for _, pref in pairs(minetest.get_connected_players()) do
mana.save_to_file(pref:get_player_name())
end
end) end)
minetest.register_on_joinplayer(function(player) minetest.register_on_joinplayer(function(player)
local playername = player:get_player_name() local playername = player:get_player_name()
if mana.playerlist[playername] == nil then mana.playerlist[playername] = mana.load_file(playername)
mana.playerlist[playername] = {} if not mana.playerlist[playername].mana then
mana.playerlist[playername].mana = 0 mana.playerlist[playername].mana = 0
mana.playerlist[playername].maxmana = mana.settings.default_max mana.playerlist[playername].maxmana = mana.settings.default_max
mana.playerlist[playername].regen = mana.settings.default_regen mana.playerlist[playername].regen = mana.settings.default_regen