From 9c63aa9b408be37d0e9e5f658ed0d439adf61e1d Mon Sep 17 00:00:00 2001 From: Lunovox Date: Tue, 20 Feb 2024 23:03:09 -0300 Subject: [PATCH] =?UTF-8?q?[feat]=20Adicionando=20interface=20gr=C3=A1fica?= =?UTF-8?q?!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api.lua | 142 +++++++++++++++++++++++++++++++++++++++++------ commands.lua | 149 +++++++++++++++++++++++++++++--------------------- formspecs.lua | 122 +++++++++++++++++++++++++++-------------- 3 files changed, 292 insertions(+), 121 deletions(-) diff --git a/api.lua b/api.lua index 316952d..41e00c5 100644 --- a/api.lua +++ b/api.lua @@ -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) + + diff --git a/commands.lua b/commands.lua index 6bff34b..f48e17b 100644 --- a/commands.lua +++ b/commands.lua @@ -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, } ) ---]] \ No newline at end of file +--]] diff --git a/formspecs.lua b/formspecs.lua index 18d31af..a56efce 100644 --- a/formspecs.lua +++ b/formspecs.lua @@ -1,48 +1,58 @@ -local body = [[ - - -
- - -
- -Esse é um Exemplo de Link em formato hyperlink. (Não é funcional!) - - - - - - - - - - - - - - - - - - - - - - - - - - -
--= Fim =- -=D -
- -]] - 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[,;,;;]" 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) +