eurn/api.lua

232 lines
8.2 KiB
Lua
Raw Normal View History

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[<candidatename>] = <when> | 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
2024-02-18 18:06:19 -03:00
modEUrn.getPresidentName = function()
if type(modEUrn.handler.elected.president.name)~="nil"
and modEUrn.handler.elected.president.name ~= ""
then
return modEUrn.handler.elected.president.name
end
end
modEUrn.doPresident = function(playername, candidatename)
if minetest.player_exists(candidatename) then
local now = os.time() --Em milisegundos
--modEUrn.handler.elected
if modEUrn.handler.elected==nil then
modEUrn.handler.elected = { }
end
if modEUrn.handler.elected.president==nil then
modEUrn.handler.elected.president = { }
end
modEUrn.handler.elected.president.name = candidatename
modEUrn.handler.elected.president.when = now
--modEUrn.handler.candidates
if modEUrn.handler.candidates==nil then
modEUrn.handler.candidates = { }
end
if modEUrn.handler.candidates.president==nil then
modEUrn.handler.candidates.president = { }
end
if modEUrn.handler.candidates.president[candidatename]==nil then
modEUrn.handler.candidates.president[candidatename] = { }
end
if modEUrn.handler.candidates.president[candidatename].political_campaign==nil then
modEUrn.handler.candidates.president[candidatename].political_campaign = "There are no campaign data about this political candidate."
end
if modEUrn.handler.candidates.president[candidatename].voters==nil then
modEUrn.handler.candidates.president[candidatename].voters = { }
end
for _, iCandPresident in ipairs(modEUrn.handler.candidates.president) do
if type(modEUrn.handler.candidates.president[iCandPresident].voters[playername])~="nil" then
modEUrn.handler.candidates.president[iCandPresident].voters[playername] = nil
end
end
modEUrn.handler.candidates.president[candidatename].voters[playername] = now
return true
else
minetest.chat_send_player(
playername,
--os.date("%Y-%m-%d %Hh:%Mm:%Ss", now) ..
core.colorize("#FF0000", "[E-URN]").." "
..modEUrn.translate("The name '%s' is not the player name registered on the server!"):format(candidatename)
)
end
return false
end
modEUrn.doPresidentCandidate = function(playername, candidatename, political_campaign)
if minetest.player_exists(candidatename) then
local now = os.time() --Em milisegundos
if type(political_campaign)~="string"
or political_campaign == ""
then
political_campaign = "There are no campaign data about this political candidate."
end
--modEUrn.handler.candidates
if modEUrn.handler.candidates==nil then
modEUrn.handler.candidates = { }
end
if modEUrn.handler.candidates.president==nil then
modEUrn.handler.candidates.president = { }
end
if modEUrn.handler.candidates.president[candidatename]==nil then
modEUrn.handler.candidates.president[candidatename] = { }
end
modEUrn.handler.candidates.president[candidatename].political_campaign = political_campaign
if modEUrn.handler.candidates.president[candidatename].voters==nil then
modEUrn.handler.candidates.president[candidatename].voters = { }
end
return true
else
minetest.chat_send_player(
playername,
--os.date("%Y-%m-%d %Hh:%Mm:%Ss", now) ..
core.colorize("#FF0000", "[E-URN]").." "
..modEUrn.translate("The name '%s' is not the player name registered on the server!"):format(candidatename)
)
end
return false
end
modEUrn.getPresCandCampaign = function(candidatename)
local political_campaign = "There are no campaign data about this political candidate."
if type(modEUrn.handler.candidates.president[candidatename].political_campaign)=="string"
and modEUrn.handler.candidates.president[candidatename].political_campaign ~= ""
then
political_campaign =modEUrn.handler.candidates.president[candidatename].political_campaign
end
return political_campaign
end
modEUrn.getPresidentCandidates = function()
local cands = { }
for iCandPresName, iCandPresValue in pairs(modEUrn.handler.candidates.president) do
table.insert(cands, iCandPresName)
--cands:insert(iCandPresName)
end
return cands
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)
2024-02-16 21:28:25 -03:00
local playername = player:get_player_name()
--minetest.disconnect_player(name, [reason])
minetest.disconnect_player(playername)
end
end
modEUrn.doSave()
2023-07-21 01:58:24 -03:00
--minetest.log('action',"[E-URN] "..modEUrn.translate("Saving the database from all players in the file '%s'!"):format(modEUrn.urlTabela))
end)