[feat] Adicionando interface gráfica!

This commit is contained in:
Lunovox 2024-02-20 23:03:09 -03:00
parent e5684c5747
commit 9c63aa9b40
3 changed files with 292 additions and 121 deletions

142
api.lua
View file

@ -3,6 +3,65 @@ minetest.register_privilege("electoraljudge", {
give_to_singleplayer=false,
})
modEUrn.debug = function(text, playername)
if text ~= nil
and type(text) == "string"
and text ~= ""
then
if minetest.settings:get_bool("eurn.debug") then
if playername ~= nil
and type(playername) == "string"
and playername ~= ""
then
local player = minetest.get_player_by_name(playername)
if player ~=nil and player:is_player() then
minetest.chat_send_player(
playername, text
)
minetest.log('action',"["..modEUrn.modname:upper()..":DEBUG:"..playername.."] "..text)
else
minetest.log('error',
"["..modEUrn.modname:upper()..":DEBUG] "
..modEUrn.translate(
"Unable to address debug for player '%s'."
):format(dump(playername))
)
minetest.log('action',"["..modEUrn.modname:upper()..":DEBUG] "..text)
end
else
minetest.chat_send_all(text)
minetest.log('action',"["..modEUrn.modname:upper()..":DEBUG] "..text)
end
end
end
end
modEUrn.unsortTableByValue = function(tbl)
if type(tbl)~="table" then
tbl = {}
end
--modEUrn.debug("modEUrn.unsortTableByValue(): tbl = "..dump(tbl))
table.sort(tbl, function(a, b)
local aaa = "a(%s) > b(%s)"
aaa = aaa:format(dump(a), dump(b))
modEUrn.debug(aaa)
return a >= b
end)
--modEUrn.debug("modEUrn.unsortTableByValue(): tbl = "..dump(tbl))
return tbl
end
modEUrn.sortTableLenght = function(t)
local count = 0
--modEUrn.debug("t = "..dump(t))
for _ in pairs(t) do
count = count + 1
end
return count
end
modEUrn.handler = {
elected = {
president = {
@ -71,6 +130,7 @@ modEUrn.getPresidentName = function()
then
return modEUrn.handler.elected.president.name
end
return ""
end
modEUrn.doPresident = function(playername, candidatename)
@ -161,10 +221,12 @@ 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"
--modEUrn.debug("candidatename="..dump(candidatename))
if type(modEUrn.handler.candidates.president[candidatename])=="table"
and 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
political_campaign = modEUrn.handler.candidates.president[candidatename].political_campaign
end
return political_campaign
end
@ -178,6 +240,63 @@ modEUrn.getPresidentCandidates = function()
return cands
end
modEUrn.showPresCandCampaign = function(playername, candidatename)
if type(candidatename)=="string" and candidatename ~= "" then --Se o nome do candidato foi dito
if minetest.player_exists(candidatename) then --Se existe algum jogador o nome que foi dito
if type(modEUrn.handler.candidates.president[candidatename])=="table" then --Se foi algum candidato registrado.
local player = minetest.get_player_by_name(playername)
if player:is_player() then --verifica se o jogador está online ou por terminal
modEUrn.FormSpecs.showFormInfoCampaign(playername, candidatename)
else
minetest.chat_send_player(
playername,
core.colorize("#00FF00", "[E-URN]").." "
..core.colorize("#888888",
modEUrn.translate("Candidate Name")..": "
)
..core.colorize("#00FF00", candidatename)
)
local Campaign = modEUrn.getPresCandCampaign(candidatename)
if type(Campaign)=="string" and Campaign~="" then
minetest.chat_send_player(
playername,
core.colorize("#00FF00", "[E-URN]").." "
..core.colorize("#888888",
modEUrn.translate("Candidate Campaign")..": "
)
..Campaign
)
end
end
else
minetest.chat_send_player(
playername,
core.colorize("#FF0000", "[E-URN]").." "
..modEUrn.translate("Player %s is not registered as a candidate for president!"):format(candidatename)
)
end
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
else
minetest.chat_send_player(
playername,
--os.date("%Y-%m-%d %Hh:%Mm:%Ss", now) ..
core.colorize("#FF0000", "[E-URN]").." "
..modEUrn.translate("Please enter the name of the candidate you wish to display the campaign!").."\n"
..core.colorize("#888888", "Syntaxe: ")
..core.colorize("#00FFFF",
"/campaign <"..modEUrn.translate("candidate_name")..">"
)
)
end
end
modEUrn.doCheckPresident = function()
--Verifica registra quem será o presidente pela maioria de voto do candidato.
if #modEUrn.handler.candidates.president >= 1 then
@ -261,23 +380,10 @@ minetest.register_on_shutdown(function()
--minetest.log('action',"[E-URN] "..modEUrn.translate("Saving the database from all players in the file '%s'!"):format(modEUrn.urlTabela))
end)
minetest.register_on_player_receive_fields(function(player, formname, fields)
if type(formname)~="string" and formname == "eurn" then
local playername = player:get_player_name()
if type(fields.txtCampaign)=="string"
and (
type(fields.key_enter) ~= "nil"
or type(fields.btnSave) ~= "nil"
)
then
modEUrn.doPresidentCandidate(playername, playername, fields.txtCampaign)
end
end
end)
minetest.after(3.5, function()
minetest.register_globalstep(function(dtime)
local presname = modEUrn.handler.elected.president.name
--local presname = modEUrn.handler.elected.president.name
local presname = modEUrn.getPresidentName()
if type(presname)=="string" and presname~="" then
local mesAtual = os.date("%m", os.time())
local mesChecked = os.date("%m", tonumber(modEUrn.handler.elected.president.when) or os.time())
@ -287,3 +393,5 @@ minetest.after(3.5, function()
end
end)
end)

View file

@ -75,16 +75,22 @@ modEUrn.getPropCommCandidateMe = function()
params = "[<".. modEUrn.translate("political campaign")..">]",
description = modEUrn.translate("Register your campaign to run for server president."),
func = function(playername, political_campaign)
local candidatename = playername
if modEUrn.doPresidentCandidate(playername, candidatename, political_campaign) then
modEUrn.doSave()
minetest.chat_send_player(
playername,
--os.date("%Y-%m-%d %Hh:%Mm:%Ss", now) ..
core.colorize("#00FF00", "[E-URN]").." "
..modEUrn.translate("Player %s has been registered to run as a candidate for president of this server!"):format(dump(candidatename))
)
end
local player = minetest.get_player_by_name(playername)
if player and player:is_player() then
--modEUrn.debug("playername='"..playername.."' | political_campaign='"..political_campaign.."'")
modEUrn.FormSpecs.showFormRegCampaign(playername, political_campaign)
else
local candidatename = playername
if modEUrn.doPresidentCandidate(playername, candidatename, political_campaign) then
modEUrn.doSave()
minetest.chat_send_player(
playername,
--os.date("%Y-%m-%d %Hh:%Mm:%Ss", now) ..
core.colorize("#00FF00", "[E-URN]").." "
..modEUrn.translate("Player %s has been registered to run as a candidate for president of this server!"):format(dump(candidatename))
)
end
end
end,
}
end
@ -156,56 +162,7 @@ modEUrn.getPropCommCandCampaign = function()
params = "<".. modEUrn.translate("candidate_name")..">",
description = modEUrn.translate("Show the Campaign of candidate for president."),
func = function(playername, candidatename)
if type(candidatename)=="string" and candidatename ~= "" then
if minetest.player_exists(candidatename) then
if type(modEUrn.handler.candidates.president[candidatename])=="table" then
minetest.chat_send_player(
playername,
core.colorize("#00FF00", "[E-URN]").." "
..core.colorize("#888888",
modEUrn.translate("Candidate Name: ")
)
..core.colorize("#00FF00", candidatename)
)
local Campaign = modEUrn.getPresCandCampaign(candidatename)
if type(Campaign)=="string" and Campaign~="" then
minetest.chat_send_player(
playername,
core.colorize("#00FF00", "[E-URN]").." "
..core.colorize("#888888",
modEUrn.translate("Candidate Campaign: ")
)
..Campaign
)
end
else
minetest.chat_send_player(
playername,
core.colorize("#FF0000", "[E-URN]").." "
..modEUrn.translate("Player %s is not registered as a candidate for president!"):format(candidatename)
)
end
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
else
minetest.chat_send_player(
playername,
--os.date("%Y-%m-%d %Hh:%Mm:%Ss", now) ..
core.colorize("#FF0000", "[E-URN]").." "
..modEUrn.translate("Please enter the name of the candidate you wish to display the campaign!").."\n"
..core.colorize("#888888", "Syntaxe: ")
..core.colorize("#00FFFF",
"/campaign <"..modEUrn.translate("candidate_name")..">"
)
)
end
modEUrn.showPresCandCampaign(playername, candidatename)
end,
}
end
@ -238,7 +195,10 @@ modEUrn.getPropCommCandVote = function()
--modEUrn.handler.voters[playername].times.played
for iCandPresName, _ in pairs(modEUrn.handler.candidates.president) do
--modEUrn.debug("iCandPresName = "..iCandPresName)
if type(modEUrn.handler.candidates.president[iCandPresName].voters[playername])~="nil" then
--modEUrn.debug("modEUrn.handler.candidates.president["..iCandPresName.."].voters = "..dump(modEUrn.handler.candidates.president[iCandPresName].voters))
modEUrn.handler.candidates.president[iCandPresName].voters[playername] = nil
break
end
end
@ -255,7 +215,7 @@ modEUrn.getPropCommCandVote = function()
minetest.chat_send_player(
playername,
core.colorize("#FF0000", "[E-URN]").." "
..modEUrn.translate("Player %s is not registered as a candidate for president!"):format(candidatename)
..modEUrn.translate("Player '%s' is not registered as a candidate for president!"):format(candidatename)
)
end
else
@ -299,6 +259,71 @@ minetest.register_chatcommand(
modEUrn.getPropCommCandVote()
)
--############################################################################
modEUrn.getPropCommVotes = function()
return {
privs = {electoraljudge=true},
--params = "<".. modEUrn.translate("candidate_name")..">",
description = modEUrn.translate("Displays the number of votes for each candidate!"),
func = function(playername, candidatename)
--modEUrn.debug("modEUrn.handler.candidates.president = "..dump(modEUrn.handler.candidates.president))
--modEUrn.debug("modEUrn.sortTableLenght(modEUrn.handler.candidates.president) = "..modEUrn.sortTableLenght(modEUrn.handler.candidates.president))
if type(modEUrn.handler.candidates.president)=="table" then
local votes = {}
for iCandPresName, iCandPresTable in pairs(modEUrn.handler.candidates.president) do
local num = modEUrn.sortTableLenght(iCandPresTable.voters)
if type(iCandPresTable.voters)=="table" and num >= 1 then
votes[iCandPresName] = num
--modEUrn.debug("num = "..num)
end
end
if modEUrn.sortTableLenght(votes) >= 1 then
--modEUrn.debug(dump(votes))
votes = modEUrn.unsortTableByValue(votes)
--modEUrn.debug(dump(votes))
local strVotes = ""
for iCandPresName, iCandPresVotes in pairs(votes) do
--modEUrn.debug("modEUrn.getPropCommVotes(): iCandPresName = "..dump(iCandPresName).." | iCandPresVotes = "..dump(iCandPresVotes))
if strVotes=="" then
strVotes = modEUrn.translate(" * %s : %02d votes"):format(iCandPresName, iCandPresVotes)
else
strVotes = strVotes.."\n"..modEUrn.translate(" * %s : %02d votes"):format(iCandPresName, iCandPresVotes)
end
end
minetest.chat_send_player(
playername,
core.colorize("#00FF00", "[E-URN]").." "
..modEUrn.translate("Voting list for presidential election: ").."\n"..strVotes
)
--]]
else
minetest.chat_send_player(
playername,
core.colorize("#FF0000", "[E-URN]").." "
..modEUrn.translate("No one has voted in the presidential election yet!")
--..core.colorize("#00FF00", candidatename)
)
end
else
minetest.chat_send_player(
playername,
core.colorize("#FF0000", "[E-URN]").." "
..modEUrn.translate("There is no registered candidate for the presidential election!")
--..core.colorize("#00FF00", candidatename)
)
end
end,
}
end
minetest.register_chatcommand(
"votes",
modEUrn.getPropCommVotes()
)
--############################################################################
@ -326,4 +351,4 @@ minetest.register_chatcommand(
end,
}
)
--]]
--]]

View file

@ -1,48 +1,58 @@
local body = [[
<center>
<img name=favicon.png float=center width=96 height=96>
<style font=mono color=#FF0000 size=24><b>OLÁ %s!</b></style>
</center>
Esse é um <action name=lnkExemplo1><item name=default:sword_wood valign=middle width=14 height=14> Exemplo de Link</action> em formato hyperlink. (Não é funcional!)
<center>
-= Fim =-
<bigger>=D</bigger>
</center>
]]
modEUrn.FormSpecs = {
showFormRegCampaign = function(playername, political_campaign)
local Campaign = modEUrn.getPresCandCampaign(playername)
if type(political_campaign)~="string" or political_campaign==""then
political_campaign = Campaign
end
local myFormSpec = ""
myFormSpec = myFormSpec
.."formspec_version[6]"
.."size[16,8,false]"
.."background[0,-8;16,16;text_eurn_front.png]"
.."box[0.5,0.75;15,5.75;#000000CC]"
.."textarea[0.5,0.75;15,5.75;txtCampaign;"
..minetest.formspec_escape(
modEUrn.translate("Campanha Política de")..": "..
core.colorize("#00FF00", playername)
)..";"
..minetest.formspec_escape(political_campaign)..
"]"
.."button_exit[0.5,6.75;12.25,1;btnSave;"..modEUrn.translate("REGISTER").."]"
.."button_exit[13.25,6.75;2,1;;"..modEUrn.translate("CANCEL").."]"
minetest.show_formspec(playername, "frmEUrnRegCampaign", myFormSpec)
end,
showFormInfoCampaign = function(playername, candidatename)
local Campaign = modEUrn.getPresCandCampaign(candidatename)
--if type(modEUrn.handler.candidates.president[candidatename])=="nil" then Campaign = "" end
local myFormSpec = ""
myFormSpec = myFormSpec
.."formspec_version[6]"
.."size[16,8,false]"
.."background[0,-8;16,16;text_eurn_front.png]"
.."box[0.5,0.75;15,5.75;#00000088]"
.."textarea[0.5,0.75;15,5.75;;"
..minetest.formspec_escape(
modEUrn.translate("Campanha Política de")..": "..
core.colorize("#00FF00", candidatename)
)..";"
..minetest.formspec_escape(Campaign)..
"]"
--.."button_exit[0.5,6.75;11,1;btnSave;"..modEUrn.translate("REGISTER").."]"
.."button_exit[0.5,6.75;15,1;;"..modEUrn.translate("CLOSE").."]"
minetest.log('action', modEUrn.translate("Player %s is listing campaign data..."):format(playername))
minetest.log('action',modEUrn.translate("Candidate Name")..candidatename)
minetest.log('action',modEUrn.translate("Candidate Campaign")..Campaign)
minetest.show_formspec(playername, "frmEUrnInfoCampaign", myFormSpec)
end,
--[[
showHypertext = function(playername)
--Fonte:
-- * https://minetest.gitlab.io/minetest/formspec/
@ -76,4 +86,32 @@ modEUrn.FormSpecs = {
--"hypertext[<X>,<Y>;<W>,<H>;<name>;<text>]"
minetest.show_formspec(playername, "frmEUrnInit", myFormSpec)
end,
--]]
}
minetest.register_on_player_receive_fields(function(player, formname, fields)
local playername = player:get_player_name()
--[[
modEUrn.debug(
"formname: "..formname.."\n"
.."fields: "..dump(fields),
playername
)
--]]
if type(formname)=="string" and formname == "frmEUrnRegCampaign" then
if type(fields.txtCampaign)~= "nil" and type(fields.btnSave) ~= "nil"
then
--modEUrn.debug("modEUrn.doPresidentCandidate(playername='"..playername.."', playername='"..playername.."', fields.txtCampaign="..dump(fields.txtCampaign)..")")
if modEUrn.doPresidentCandidate(playername, playername, fields.txtCampaign) then
modEUrn.doSave()
minetest.chat_send_player(
playername,
--os.date("%Y-%m-%d %Hh:%Mm:%Ss", now) ..
core.colorize("#00FF00", "[E-URN]").." "
..modEUrn.translate("Player %s has been registered to run as a candidate for president of this server!"):format(dump(playername))
)
end
end
end
end)