Your Filebase for Games like Return to Castle Wolfenstein , Enemy Territory and more ...
-- likedislike.lua by x0rnn -- !like or !dislike a map filename = "likedislike.log" mapname = "" results = {} function et_InitGame(levelTime, randomSeed, restart) et.RegisterModname("likedislike.lua "..et.FindSelf()) mapname = et.trap_Cvar_Get("mapname") end function mapresults() 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) like = 0 hate = 0 for m,v in string.gfind(filestr, "[%x]+\t(" .. mapname .. ")\t([^\n]+)") do if v == "like" then like = like + 1 elseif v == "hate" then hate = hate + 1 end end if like == 0 and hate == 0 then et.trap_SendServerCommand(-1, "chat \"^7No opinions about ^3" .. mapname .. "^7 yet.\"\n") else et.trap_SendServerCommand(-1, "chat \"^3" .. mapname .. "^7: likes: ^2" .. like .. "^7, dislikes: ^1" .. hate .. "\"\n") end else et.G_Print("likedislike.lua: no likedislike.log\n") return(0) end end function readLog(filename) local fd,len = et.trap_FS_FOpenFile(filename, et.FS_READ) if len == -1 then et.G_Print("likedislike.lua: no likedislike.log\n") return(0) end local filestr = et.trap_FS_Read(fd, len) et.trap_FS_FCloseFile(fd) local guid_map, opinion for guid_map, opinion in string.gfind(filestr,"([%x]+\t[%_%w]+)\t([^\n]+)") do results[guid_map] = { opinion } end end function writeLog(results) local fd, len = et.trap_FS_FOpenFile(filename, et.FS_WRITE) if len == -1 then et.G_Print("likedislike.lua: no likedislike.log\n") return(0) end table.foreach(results, function (first, arr) local line = first .. " ".. table.concat(arr, " ").."\n" count = et.trap_FS_Write(line, string.len(line), fd) end ) et.trap_FS_FCloseFile(fd) end function vote(id, choice) gamestate = tonumber(et.trap_Cvar_Get("gamestate")) if gamestate ~= 1 and gamestate ~= 2 then cl_guid = et.Info_ValueForKey(et.trap_GetUserinfo(id), "cl_guid") name = et.Info_ValueForKey(et.trap_GetUserinfo(id), "name") readLog(filename) if next(results) ~= nil then if type(results[cl_guid .. " " .. mapname]) ~= "table" then fd,len = et.trap_FS_FOpenFile(filename, et.FS_APPEND) if choice == "like" then count = et.trap_FS_Write(cl_guid .. " " .. mapname .. " like\n", string.len(cl_guid .. " " .. mapname .. " like\n"), fd) et.trap_FS_FCloseFile(fd) et.trap_SendServerCommand(-1, "chat \"" .. name .. " ^3liked ^7" .. mapname .. ". Thanks for your vote.\"\n") elseif choice == "dislike" then count = et.trap_FS_Write(cl_guid .. " " .. mapname .. " hate\n", string.len(cl_guid .. " " .. mapname .. " hate\n"), fd) et.trap_FS_FCloseFile(fd) et.trap_SendServerCommand(-1, "chat \"" .. name .. " ^3disliked ^7" .. mapname .. ". Thanks for your vote.\"\n") end else if results[cl_guid .. " " .. mapname][1] == choice then et.trap_SendServerCommand(id, "chat \"^7You have already " .. choice .. "d ^3" .. mapname .. "^7.\"\n") else if choice == "like" then results[cl_guid .. " " .. mapname][1] = choice elseif choice == "dislike" then results[cl_guid .. " " .. mapname][1] = "hate" end et.trap_SendServerCommand(-1, "chat \"" .. name .. " ^3" .. choice .. "d ^7" .. mapname .. ". Thanks for your vote.\"\n") writeLog(results) end end else fd,len = et.trap_FS_FOpenFile(filename, et.FS_WRITE) if choice == "like" then count = et.trap_FS_Write(cl_guid .. " " .. mapname .. " like\n", string.len(cl_guid .. " " .. mapname .. " like\n"), fd) et.trap_FS_FCloseFile(fd) et.trap_SendServerCommand(-1, "chat \"" .. name .. " ^3liked ^7" .. mapname .. ". Thanks for your vote.\"\n") elseif choice == "dislike" then count = et.trap_FS_Write(cl_guid .. " " .. mapname .. " hate\n", string.len(cl_guid .. " " .. mapname .. " hate\n"), fd) et.trap_FS_FCloseFile(fd) et.trap_SendServerCommand(-1, "chat \"" .. name .. " ^3disliked ^7" .. mapname .. ". Thanks for your vote.\"\n") end end else et.trap_SendServerCommand(id, "chat \"^7To prevent end-of-round intermission votes carrying over to the next map by mistake, you can't vote during warmup.\"\n") end end function et_ClientCommand(id, command) if et.trap_Argv(0) == "say" then if et.trap_Argv(1) == "!like" or et.trap_Argv(1) == "!love" then vote(id, "like") mapresults() elseif et.trap_Argv(1) == "!dislike" or et.trap_Argv(1) == "!hate" then vote(id, "dislike") mapresults() elseif et.trap_Argv(1) == "!mapresults" then mapresults() end end return(0) end
File size: 0 MB