123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 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
- )
|