Your Filebase for Games like Return to Castle Wolfenstein , Enemy Territory and more ...
-- votepoll.lua by x0rnn -- usage: !votemap (vote_cmd) or !voteresults filename = "votemap.log" vote_cmd = "!votemap" banner = "^7[^1!!!^7]^1H^7irntot vote system options" banner2 = "^3Do you want to see custom maps on Hirntot? Vote here" max_choices = 2 -- max votes per GUID enable_custom_votes = 1 -- 0 = off; enables voting for maps/choices not on the list, e.g. !votemap new baserace (spaces don't work, "mlb temple" will be saved as "mlb") no_change = "No custom maps" -- 0 choices = { "adlernest", -- 1 "braundorf_b4", -- 2 "bremen_b3", -- 3 "et_beach", -- 4 "et_ice", -- 5 "frostbite", -- 6 "sos_secret_weapon", -- 7 "sp_delivery_te", -- 8 "supply", -- 9 "tc_base" -- 10 } choice_cnt = 0 for index in pairs(choices) do choice_cnt = choice_cnt + 1 end function et_InitGame(levelTime, randomSeed, restart) et.RegisterModname("votepoll.lua "..et.FindSelf()) end function voteresults(id) fd,len = et.trap_FS_FOpenFile(filename, et.FS_READ) if len ~= -1 then filestr = et.trap_FS_Read(fd, len) et.trap_FS_FCloseFile(fd) i = 1 choices_tbl = {} for _,v in string.gfind(filestr, "(%w+)\t([^\n]+)") do choices_tbl[i] = v i = i + 1 end choice_freq = {} for k,v in pairs(choices_tbl) do choice_freq[v] = freq(v, choices_tbl) end sortedKeys = getKeysSortedByValue(choice_freq, function(a, b) return a > b end) output_tbl = {} i = 1 for _, key in pairs(sortedKeys) do if output_tbl[i] == nil then output_tbl[i] = key .. " ^2" .. choice_freq[key] else if string.len(output_tbl[i] .. "^7, " .. key .. " ^2" .. choice_freq[key]) <= 256 then output_tbl[i] = output_tbl[i] .. "^7, " .. key .. " ^2" .. choice_freq[key] else i = i + 1 output_tbl[i] = key .. " ^2" .. choice_freq[key] end end end tbl_cnt = 0 for index in pairs(output_tbl) do tbl_cnt = tbl_cnt + 1 end for j = 1, tbl_cnt do et.trap_SendServerCommand(-1, "chat \"" .. output_tbl[j] .. "\"") end filestr = nil else et.trap_FS_FCloseFile(fd) et.trap_SendServerCommand(id, "chat \"^7" .. filename .. " ^7not found.\"\n") end end function vote(id, choice) cl_guid = et.Info_ValueForKey(et.trap_GetUserinfo(id), "cl_guid") name = et.Info_ValueForKey(et.trap_GetUserinfo(id), "name") if tonumber(choice) then if choice >= 0 and choice <= choice_cnt then if choice == 0 then flag = false flag2 = false fd,len = et.trap_FS_FOpenFile(filename, et.FS_READ) if len ~= -1 then filestr = et.trap_FS_Read(fd, len) et.trap_FS_FCloseFile(fd) i = 1 for v in string.gfind(filestr, cl_guid .. "\t([^\n]+)") do i = i + 1 if i == max_choices + 1 then flag = true break end if v == no_change then flag2 = true break end end if flag2 == false then if flag == false then fd,len = et.trap_FS_FOpenFile(filename, et.FS_APPEND) count = et.trap_FS_Write(cl_guid .. " " .. no_change .. "\n", string.len(cl_guid .. " " .. no_change .. "\n"), fd) et.trap_FS_FCloseFile(fd) votes_left = max_choices - i if votes_left ~= 0 then et.trap_SendServerCommand(id, "chat \"You have " .. votes_left .. " votes left.\"\n") end et.trap_SendServerCommand(-1, "chat \"" .. name .. " ^7voted for: ^3" .. no_change .. "^7. Type ^3" .. vote_cmd .. " ^7or ^3!voteresults ^7for more info.\"\n") voteresults(id) else et.trap_SendServerCommand(id, "chat \"You have already voted " .. max_choices .. " times.\"\n") end else et.trap_SendServerCommand(id, "chat \"You have already voted for ^3" .. no_change .. "\"\n") end filestr = nil else et.trap_FS_FCloseFile(fd) fd,len = et.trap_FS_FOpenFile(filename, et.FS_WRITE) count = et.trap_FS_Write(cl_guid .. " " .. no_change .. "\n", string.len(cl_guid .. " " .. no_change .. "\n"), fd) et.trap_FS_FCloseFile(fd) if max_choices - 1 ~= 0 then et.trap_SendServerCommand(id, "chat \"You have " .. max_choices - 1 .. " votes left.\"\n") end et.trap_SendServerCommand(-1, "chat \"" .. name .. " ^7voted for: ^3" .. no_change .. "^7. Type ^3" .. vote_cmd .. " ^7or ^3!voteresults ^7for more info.\"\n") voteresults(id) end else flag = false flag2 = false fd,len = et.trap_FS_FOpenFile(filename, et.FS_READ) if len ~= -1 then filestr = et.trap_FS_Read(fd, len) et.trap_FS_FCloseFile(fd) i = 1 for v in string.gfind(filestr, cl_guid .. "\t([^\n]+)") do i = i + 1 if i == max_choices + 1 then flag = true break end if v == choices[choice] then flag2 = true break end end if flag2 == false then if flag == false then fd,len = et.trap_FS_FOpenFile(filename, et.FS_APPEND) count = et.trap_FS_Write(cl_guid .. " " .. choices[choice] .. "\n", string.len(cl_guid .. " " .. choices[choice] .. "\n"), fd) et.trap_FS_FCloseFile(fd) votes_left = max_choices - i if votes_left ~= 0 then et.trap_SendServerCommand(id, "chat \"You have " .. votes_left .. " votes left.\"\n") end et.trap_SendServerCommand(-1, "chat \"" .. name .. " ^7voted for: ^3" .. choices[choice] .. "^7. Type ^3" .. vote_cmd .. " ^7or ^3!voteresults ^7for more info.\"\n") voteresults(id) else et.trap_SendServerCommand(id, "chat \"You have already voted " .. max_choices .. " times.\"\n") end else et.trap_SendServerCommand(id, "chat \"You have already voted for ^3" .. choices[choice] .. "\"\n") end filestr = nil else et.trap_FS_FCloseFile(fd) fd,len = et.trap_FS_FOpenFile(filename, et.FS_WRITE) count = et.trap_FS_Write(cl_guid .. " " .. choices[choice] .. "\n", string.len(cl_guid .. " " .. choices[choice] .. "\n"), fd) et.trap_FS_FCloseFile(fd) if max_choices - 1 ~= 0 then et.trap_SendServerCommand(id, "chat \"You have " .. max_choices - 1 .. " votes left.\"\n") end et.trap_SendServerCommand(-1, "chat \"" .. name .. " ^7voted for: ^3" .. choices[choice] .. "^7. Type ^3" .. vote_cmd .. " ^7or ^3!voteresults ^7for more info.\"\n") voteresults(id) end end else et.trap_SendServerCommand(id, "chat \"Invalid voting number.\"\n") end else flag = false flag2 = false fd,len = et.trap_FS_FOpenFile(filename, et.FS_READ) if len ~= -1 then filestr = et.trap_FS_Read(fd, len) et.trap_FS_FCloseFile(fd) i = 1 for v in string.gfind(filestr, cl_guid .. "\t([^\n]+)") do i = i + 1 if i == 4 then flag = true break end if v == choice then flag2 = true break end end if flag2 == false then if flag == false then fd,len = et.trap_FS_FOpenFile(filename, et.FS_APPEND) count = et.trap_FS_Write(cl_guid .. " " .. choice .. "\n", string.len(cl_guid .. " " .. choice .. "\n"), fd) et.trap_FS_FCloseFile(fd) votes_left = 3 - i if votes_left ~= 0 then et.trap_SendServerCommand(id, "chat \"You have " .. votes_left .. " votes left.\"\n") end et.trap_SendServerCommand(-1, "chat \"" .. name .. " ^7voted for: ^3" .. choice .. "^7. Type ^3" .. vote_cmd .. " ^7or ^3!voteresults ^7for more info.\"\n") voteresults(id) else et.trap_SendServerCommand(id, "chat \"You have already voted " .. max_choices .. " times.\"\n") end else et.trap_SendServerCommand(id, "chat \"You have already voted for ^3" .. choice .. "\"\n") end filestr = nil else et.trap_FS_FCloseFile(fd) fd,len = et.trap_FS_FOpenFile(filename, et.FS_WRITE) count = et.trap_FS_Write(cl_guid .. " " .. choice .. "\n", string.len(cl_guid .. " " .. choice .. "\n"), fd) et.trap_FS_FCloseFile(fd) if max_choices - 1 ~= 0 then et.trap_SendServerCommand(id, "chat \"You have " .. max_choices - 1 .. " votes left.\"\n") end et.trap_SendServerCommand(-1, "chat \"" .. name .. " ^7voted for: ^3" .. choice .. "^7. Type ^3" .. vote_cmd .. " ^7or ^3!voteresults ^7for more info.\"\n") voteresults(id) end end end function freq(ele, t) cnt = 0 for k,v in pairs(t) do if ele == t[k] then cnt = cnt + 1 end end return cnt end function getKeysSortedByValue(tbl, sortFunction) local keys = {} for key in pairs(tbl) do table.insert(keys, key) end table.sort(keys, function(a, b) return sortFunction(tbl[a], tbl[b]) end) return keys end function et_ClientCommand(id, command) if et.trap_Argv(0) == "say" then if et.trap_Argv(1) == vote_cmd then et.trap_SendServerCommand(id, "chat \"" .. banner.. ":\"\n") et.trap_SendServerCommand(id, "chat \"" .. banner2.. ":\"\n") et.trap_SendServerCommand(id, "chat \"^50^7: " .. no_change .. "\"\n") for n = 1, choice_cnt do et.trap_SendServerCommand(id, "chat \"^5" .. n .. "^7: " .. choices[n] .. "\"\n") end if et.trap_Argc() ~= 3 and et.trap_Argc() ~= 4 then if enable_custom_votes == 1 then et.trap_SendServerCommand(id, "chat \"Usage: ^5" .. vote_cmd .. " ^7<^3#^7> (^2IN CONSOLE!^7)\"\n") et.trap_SendServerCommand(id, "chat \"Usage for choices not on the list: ^5" .. vote_cmd .. " new ^7<^3choice^7> (^1no spaces^7) (^2IN CONSOLE!^7)\"\n") et.trap_SendServerCommand(id, "chat \"Example 1: to vote for ^3supply^7, type ^3" .. vote_cmd .. " 9^7 (^2IN CONSOLE!^7)\"\n") et.trap_SendServerCommand(id, "chat \"Example 2: to vote for ^3baserace^7, type ^3" .. vote_cmd .. " new baserace ^7(^1no spaces^7) ^7(^2IN CONSOLE!^7)\"\n") else et.trap_SendServerCommand(id, "chat \"Usage: ^5" .. vote_cmd .. " ^7<^3#^7> (^2IN CONSOLE!^7)\"\n") et.trap_SendServerCommand(id, "chat \"Example: to vote for ^3supply^7, type ^3" .. vote_cmd .. " 9^7 (^2IN CONSOLE!^7)\"\n") end et.trap_SendServerCommand(id, "chat \"^3!voteresults ^7to show vote results.\"\n") elseif et.trap_Argc() == 3 then num = tonumber(et.trap_Argv(2)) if num then if num >= 0 and num <= choice_cnt then vote(id, num) else et.trap_SendServerCommand(id, "chat \"Invalid voting number.\"\n") end else if enable_custom_votes == 1 then et.trap_SendServerCommand(id, "chat \"Usage: ^5" .. vote_cmd .. " ^7<^3#^7> (^2IN CONSOLE!^7)\"\n") et.trap_SendServerCommand(id, "chat \"Usage for choices not on the list: ^5" .. vote_cmd .. " new ^7<^3choice^7> (^1no spaces^7) (^2IN CONSOLE!^7)\"\n") else et.trap_SendServerCommand(id, "chat \"Usage: ^5" .. vote_cmd .. " ^7<^3#^7> (^2IN CONSOLE!^7)\"\n") end end elseif et.trap_Argc() == 4 then if enable_custom_votes == 1 then if et.trap_Argv(2) == "new" then vote(id, et.trap_Argv(3)) else et.trap_SendServerCommand(id, "chat \"Usage: ^5" .. vote_cmd .. " ^7<^3#^7> (^2IN CONSOLE!^7)\"\n") et.trap_SendServerCommand(id, "chat \"Usage for choices not on the list: ^5" .. vote_cmd .. " new ^7<^3choice^7> (^1no spaces^7) (^2IN CONSOLE!^7)\"\n") end else et.trap_SendServerCommand(id, "chat \"Usage: " .. vote_cmd .. " <^3#^7> (^2IN CONSOLE!^7)\"\n") end end elseif et.trap_Argv(1) == "!voteresults" then voteresults(id) end end return(0) end
File size: 0 MB