datastorage={} datastorage["!registered_players"]={} datastorage.save_data = function(table_pointer) local data = minetest.serialize( datastorage[table_pointer] ) local path = minetest.get_worldpath().."/datastorage_"..table_pointer..".data" local file = io.open( path, "w" ) if( file ) then file:write( data ) file:close() return true else return nil end end datastorage.load_data = function(table_pointer) local path = minetest.get_worldpath().."/datastorage_"..table_pointer..".data" local file = io.open( path, "r" ) if( file ) then local data = file:read("*all") datastorage[table_pointer] = minetest.deserialize( data ) file:close() return true else return nil end end datastorage.get_container = function (player, key) local player_name = player:get_player_name() local container = datastorage[player_name] if container[key] == nil then container[key] = {} end datastorage.save_data(player_name) return container[key] end -- forced save of all player's data datastorage.save_container = function (player) local player_name = player:get_player_name() datastorage.save_data(player_name) end -- Init if datastorage.load_data("!registered_players") == nil then datastorage["!registered_players"]={} datastorage.save_data("!registered_players") end minetest.register_on_joinplayer(function(player) local player_name = player:get_player_name() local registered = nil for __,tab in ipairs(datastorage["!registered_players"]) do if tab["player_name"] == player_name then registered = true break end end if registered == nil then local new={} new["player_name"]=player_name table.insert(datastorage["!registered_players"],new) datastorage[player_name]={} datastorage.save_data("!registered_players") datastorage.save_data(player_name) else datastorage.load_data(player_name) end end ) minetest.register_on_leaveplayer(function(player) local player_name = player:get_player_name() datastorage.save_data(player_name) datastorage[player_name] = nil end ) minetest.register_on_shutdown(function() for __,tab in ipairs(datastorage["!registered_players"]) do if datastorage[tab["player_name"]] == nil then break end datastorage.save_data(tab["player_name"]) end end )