diff --git a/api.lua b/api.lua index c0f1a41..107b903 100644 --- a/api.lua +++ b/api.lua @@ -242,6 +242,18 @@ modEUrn.getPresidentCandidates = function() return cands end +modEUrn.getVoterPlayedTime = function(playername) + if type(playername)=="string" + and playername~="" + and type(modEUrn.handler.voters)=="table" + and type(modEUrn.handler.voters[playername])=="table" + and type(modEUrn.handler.voters[playername].times)=="table" + and type(modEUrn.handler.voters[playername].times.played)=="number" + then + return modEUrn.handler.voters[playername].times.played --in secounds + end +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 @@ -314,8 +326,11 @@ end --[[ ]] modEUrn.doVote = function(playername, candidatename) - if type(modEUrn.handler.voters[playername])=="table" then - local voterTimePlayed = modEUrn.handler.voters[playername].times.played --in secounds + local voterTimePlayed = modEUrn.getVoterPlayedTime(playername) + --modEUrn.debug("modEUrn.doVote(): voterTimePlayed = "..dump(voterTimePlayed)) + if type(voterTimePlayed)=="number" then + --if type(modEUrn.handler.voters[playername])=="table" then + --local voterTimePlayed = modEUrn.handler.voters[playername].times.played --in secounds if voterTimePlayed >= modEUrn.MinPlayedHours * (60*60) then if type(candidatename)=="string" and candidatename ~= "" then if minetest.player_exists(candidatename) then diff --git a/commands.lua b/commands.lua index 33c6aae..f53e56d 100644 --- a/commands.lua +++ b/commands.lua @@ -204,6 +204,9 @@ modEUrn.getPropCommCandVote = function() local color = "#FF0000" if resulte then color = "#00FF00" + minetest.sound_play("sfx_eurn_confirm", {to_player=playername, max_hear_distance=5.0,}) + else + minetest.sound_play("sfx_failure", {to_player=playername, max_hear_distance=5.0,}) end minetest.chat_send_player( playername, diff --git a/formspecs.lua b/formspecs.lua index 76ca6c6..e07bfc0 100644 --- a/formspecs.lua +++ b/formspecs.lua @@ -26,6 +26,68 @@ modEUrn.FormSpecs = { .."button[2.15,3.65;7.55,1;btnBack;"..modEUrn.translate("BACK").."]" minetest.sound_play("sfx_eurn_button", {to_player=playername, max_hear_distance=5.0,}) minetest.show_formspec(playername, "frmEUrnPresElection", myFormSpec) + end, + showFormPresCands = function(playername, candidatename) + local cands = modEUrn.getPresidentCandidates() + local candList = "" + local candCount = 0 + local selected = 0 + --minetest.chat_send_all("Numero de Candidatos: "..#modEUrn.handler.candidates.president) + for _, iCandPresName in ipairs(cands) do + candCount = candCount + 1 + if candList == "" then + candList = minetest.formspec_escape(iCandPresName) + else + candList = candList..","..minetest.formspec_escape(iCandPresName) + end + if type(candidatename)=="string" and candidatename==iCandPresName then + selected = candCount + end + 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.5;16.5,8.5;#00110088]" + .."textlist[0.5,0.5;3,7;lstCands;"..candList..";"..selected..";true]" + + if selected >= 1 then + local Campaign = modEUrn.getPresCandCampaign(candidatename) + local body = [[ + +
+ + %s +
+%s + ]] + myFormSpec = myFormSpec + .."hypertext[4.0,0.5;11.25,6.00;htmPanel;" + --..minetest.formspec_escape("") + .."" + .."" + .."" + .."" + .."" + ..minetest.formspec_escape(body:format(cands[selected], Campaign)) + .."]" -- Fim de hypertext[] + + local voterTimePlayed = modEUrn.getVoterPlayedTime(playername) + if type(voterTimePlayed)=="number" and voterTimePlayed >= modEUrn.MinPlayedHours * (60*60) then + myFormSpec = myFormSpec + .."style[btnPresVote;bgimg=;bgimg_pressed=;border=;bgcolor=green]" + .."button[4.0,6.75;8.75,1;btnPresVote;"..modEUrn.translate("VOTE").."]" + end + end + + myFormSpec = myFormSpec + .."style[btnBack;bgimg=;bgimg_pressed=;border=;bgcolor=red]" + .."button[12.85,6.75;2.55,1;btnBack;"..modEUrn.translate("BACK").."]" + minetest.sound_play("sfx_eurn_button", {to_player=playername, max_hear_distance=5.0,}) + minetest.show_formspec(playername, "frmEUrnPresCands", myFormSpec) end, showFormRegCampaign = function(playername, political_campaign) local Campaign = modEUrn.getPresCandCampaign(playername) @@ -126,9 +188,52 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) minetest.sound_play("sfx_eurn_button", {to_player=playername, max_hear_distance=5.0,}) end elseif type(formname)=="string" and formname == "frmEUrnPresElection" then - if type(fields.btnBack) ~= "nil" then + if type(fields.btnPresCandidates) ~= "nil" then + modEUrn.FormSpecs.showFormPresCands(playername, nil) + elseif type(fields.btnBack) ~= "nil" then modEUrn.FormSpecs.showFormMain(playername) end + elseif type(formname)=="string" and formname == "frmEUrnPresCands" then + if type(modEUrn.selCand)~="table" then + modEUrn.selCand = {} + end + if type(fields.lstCands) ~= "nil" then + local lstCands = minetest.explode_textlist_event(fields.lstCands) + if type(lstCands.index)=="number" and lstCands.index>=1 then + local cands = modEUrn.getPresidentCandidates() + modEUrn.selCand[playername] = cands[lstCands.index] + local cands = modEUrn.getPresidentCandidates() + modEUrn.FormSpecs.showFormPresCands(playername, cands[lstCands.index]) + end + elseif type(fields.btnPresVote) ~= "nil" then + if type(modEUrn.selCand[playername])=="string" and modEUrn.selCand[playername]~="" then + local voterTimePlayed = modEUrn.getVoterPlayedTime(playername) + if type(voterTimePlayed)=="number" and voterTimePlayed >= modEUrn.MinPlayedHours * (60*60) then + local resulte, cause = modEUrn.doVote(playername, modEUrn.selCand[playername]) + local color = "#FF0000" + if resulte then + color = "#00FF00" + minetest.sound_play("sfx_eurn_confirm", {to_player=playername, max_hear_distance=5.0,}) + else + minetest.sound_play("sfx_failure", {to_player=playername, max_hear_distance=5.0,}) + end + minetest.chat_send_player( + playername, + core.colorize(color, "[E-URN]").." "..cause + ) + modEUrn.FormSpecs.showFormPresElection(playername) + else + minetest.sound_play("sfx_failure", {to_player=playername, max_hear_distance=5.0,}) + minetest.chat_send_player( + playername, + core.colorize("#FF0000", "[E-URN]").." " + ..modEUrn.translate("You have not yet played the minimum number of hours to become a presidential voter. (Minimum %02d hours)"):format(modEUrn.MinPlayedHours) + ) + end + end + elseif type(fields.btnBack) ~= "nil" then + modEUrn.FormSpecs.showFormPresElection(playername) + end elseif 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)..")") diff --git a/sounds/sfx_failure.ogg b/sounds/sfx_failure.ogg new file mode 100644 index 0000000..ddc5daf Binary files /dev/null and b/sounds/sfx_failure.ogg differ diff --git a/textures/text_candidate_face.png b/textures/text_candidate_face.png new file mode 100644 index 0000000..6bb40f4 Binary files /dev/null and b/textures/text_candidate_face.png differ