commit 22a2a50ccdcfa50e286f6afb9b12bf43404b29c8 Author: RealBadAngel Date: Fri Jan 24 04:51:20 2014 +0100 Initial upload diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/depends.txt @@ -0,0 +1 @@ + diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..f361e84 --- /dev/null +++ b/init.lua @@ -0,0 +1,99 @@ +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 (mod_name, player) + local player_name = player:get_player_name() + local container = datastorage[player_name] + if container[mod_name] == nil then + container[mod_name] = {} + end + datastorage.save_data(player_name) + return container[mod_name] +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 + print("creating new one") + 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 + print("loading containers") + datastorage.load_data(player_name) + end + + +-- TEST AREA: +local test_container = datastorage.get_container("dupa",player) +test_container["var1"] = 1.23 +test_container["table1"] = {} +test_container["table1"]["var2"] = "nowa" +test_container["table1"]["var3"] = "a string" + +print("Testing:") +print(dump(test_container)) +--datastorage.save_container(player) +-- END OF TEST AREA + +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 +)