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 = [[ - - -