minetest.register_privilege("electoraljudge", { description=modEUrn.translate("Allows you to configure the Electronic Urn."), give_to_singleplayer=false, }) modEUrn.handler = { --[[ ]] elected = { president = { name = "", --name of the elected candidate. when = 0, --when the candidate was elected. voters = { }, --names of voters who voted for this elected candidate. }, }, candidates = { president = { }, --modEUrn.handler.candidates.president[] = | If the candidate has not updated his candidacy for more than 6 months, he loses his candidacy application. }, --]] voters = { }, --modEUrn.handler.voters[playername] } modEUrn.doSave = function() local file = io.open(modEUrn.urlTabela, "w") if file then file:write(minetest.serialize(modEUrn.handler)) file:close() minetest.log('action',"[E-URN] "..modEUrn.translate("Database saved in file '%s'!"):format(modEUrn.urlTabela)) else minetest.log('error',"[E-URN:ERRO] "..modEUrn.translate("The file '%s' is not in table format!"):format(modEUrn.urlTabela)) end end modEUrn.doLoad = function() local file = io.open(modEUrn.urlTabela, "r") if file then local handler = minetest.deserialize(file:read("*all")) file:close() if not handler or type(handler) ~= "table" then minetest.log('error',"[E-URN:ERRO] "..modEUrn.translate("The file '%s' is not in table format!"):format(modEUrn.urlTabela)) return { } else modEUrn.handler = handler minetest.log('action',"[E-URN] "..modEUrn.translate("Database '%s' loaded!"):format(modEUrn.urlTabela)) end end end modEUrn.on_leaveplayer = function(player) local playername = player:get_player_name() local now = os.time() --Em milisegundos if modEUrn.handler.voters[playername]~=nil and type(modEUrn.handler.voters[playername]) == "table" then if modEUrn.handler.voters[playername].times.login~=nil and type(modEUrn.handler.voters[playername].times.login) == "number" and modEUrn.handler.voters[playername].times.login > 0 then if modEUrn.handler.voters[playername].times.played~=nil and type(modEUrn.handler.voters[playername].times.played) == "number" and modEUrn.handler.voters[playername].times.played > 0 then modEUrn.handler.voters[playername].times.played = modEUrn.handler.voters[playername].times.played + (now - modEUrn.handler.voters[playername].times.login) else modEUrn.handler.voters[playername].times.played = (now - modEUrn.handler.voters[playername].times.login) end modEUrn.handler.voters[playername].times.login = 0 modEUrn.handler.voters[playername].times.logout = now end else minetest.log('error',"[E-URN:ERROR:ONLEAVEPLAYER] "..modEUrn.translate("Impossible to register logout for player '%s' !"):format(dump(player))) end end minetest.register_on_leaveplayer(function(player) modEUrn.on_leaveplayer(player) modEUrn.doSave() end) --[[ minetest.register_on_newplayer(function(player) end) --]] --[[ minetest.register_on_prejoinplayer(function(name, ip) end) --]] minetest.register_on_joinplayer(function(player) local playername = player:get_player_name() local now = os.time() --Em milisegundos if playername~=nil and type(playername)=="string" and playername~="" then if modEUrn.handler.voters[playername]==nil then modEUrn.handler.voters[playername] = { times ={ register = now, played = 0, login = now, logout = 0, }, } end modEUrn.handler.voters[playername].times.login = now modEUrn.handler.voters[playername].times.logout = 0 else minetest.log('error',"[E-URN:ERROR:ONJOINPLAYER] "..modEUrn.translate("Impossible to register login for player '%s' !"):format(dump(player))) end end) minetest.register_on_shutdown(function() local players = minetest.get_connected_players() if #players >= 1 then for _, player in ipairs(players) do modEUrn.on_leaveplayer(player) local playername = player:get_player_name() --minetest.disconnect_player(name, [reason]) minetest.disconnect_player(playername) end end modEUrn.doSave() --minetest.log('action',"[E-URN] "..modEUrn.translate("Saving the database from all players in the file '%s'!"):format(modEUrn.urlTabela)) end)