From 65275185ba73780dc2d69be07f83de12a4f01d18 Mon Sep 17 00:00:00 2001 From: ClobberXD Date: Fri, 3 Aug 2018 17:08:34 +0530 Subject: [PATCH] Deprecate /rankings me, always show player in rankings - Deprecate `/rankings me`, `/rankings` is used to check own stats too. - On `/rankings`, the league table is displayed with caller's stats highlighted in yellow. - If in top 50, stats are highlighted as-is. - If not in top 50, stats are appended to the bottom of the list. --- mods/ctf_stats/gui.lua | 123 ++++++++++++++++++++++------------ mods/random_messages/init.lua | 8 +-- 2 files changed, 85 insertions(+), 46 deletions(-) diff --git a/mods/ctf_stats/gui.lua b/mods/ctf_stats/gui.lua index 58611d9..f7ec1c3 100644 --- a/mods/ctf_stats/gui.lua +++ b/mods/ctf_stats/gui.lua @@ -76,14 +76,14 @@ function ctf_stats.get_formspec_match_summary(stats, winner_team, winner_player, return ret end -function ctf_stats.get_formspec(title, players, header) +function ctf_stats.get_formspec(title, players, header, hlt_name) table.sort(players, function(one, two) return one.score > two.score end) - local ret = "size[12,"..6.5+header.."]" + local ret = "size[12," .. 6.5 + header .. "]" ret = ret .. default.gui_bg .. default.gui_bg_img - ret = ret .. "container[0,"..header.."]" + ret = ret .. "container[0," .. header .. "]" ret = ret .. "vertlabel[0,0;" .. title .. "]" ret = ret .. "tablecolumns[color;text;text;text;text;text;text;text;text;text]" @@ -91,27 +91,60 @@ function ctf_stats.get_formspec(title, players, header) ret = ret .. "table[0.5,0;11.25,6;scores;" ret = ret .. "#ffffff,,Player,Kills,Deaths,K/D ratio,Bounty kills,Captures,Attempts,Score" - for i = 1, #players do + local player_in_top_50 = false + + for i = 1, math.min(#players, 50) do local pstat = players[i] - local color = pstat.color or "#ffffff" + local color + if hlt_name and pstat.name == hlt_name then + color = "#ffff00" + player_in_top_50 = true + else + color = pstat.color or "#ffffff" + end local kd = pstat.kills - if pstat.deaths > 0 then + if pstat.deaths > 1 then kd = kd / pstat.deaths end ret = ret .. - "," .. string.gsub(color, "0x", "#") .. - "," .. i .. - "," .. pstat.name .. - "," .. pstat.kills .. - "," .. pstat.deaths .. - "," .. math.floor(kd*10)/10 .. - "," .. pstat.bounty_kills .. - "," .. pstat.captures .. - "," .. pstat.attempts .. - "," .. math.floor(pstat.score*10)/10 - if i > 49 then - break + "," .. string.gsub(color, "0x", "#") .. + "," .. i .. + "," .. pstat.name .. + "," .. pstat.kills .. + "," .. pstat.deaths .. + "," .. math.floor(kd * 10) / 10 .. + "," .. pstat.bounty_kills .. + "," .. pstat.captures .. + "," .. pstat.attempts .. + "," .. math.floor(pstat.score * 10) / 10 + end + + if hlt_name and not player_in_top_50 then + local hlt_player, hlt_rank, hlt_kd + + for i = 1, #players do + if players[i].name == hlt_name then + hlt_player = players[i] + hlt_rank = i + break + end end + + hlt_kd = hlt_player.kills + if hlt_player.deaths > 1 then + hlt_kd = hlt_kd / hlt_player.deaths + end + ret = ret .. + "," .. "#ffff00" .. + "," .. hlt_rank .. + "," .. hlt_player.name .. + "," .. hlt_player.kills .. + "," .. hlt_player.deaths .. + "," .. math.floor(hlt_kd * 10) / 10 .. + "," .. hlt_player.bounty_kills .. + "," .. hlt_player.captures .. + "," .. hlt_player.attempts .. + "," .. math.floor(hlt_player.score * 10) / 10 end ret = ret .. ";-1]" @@ -128,18 +161,19 @@ function ctf_stats.get_html(title, players) local ret = "

" .. title .. "

" ret = ret .. "" .. "" .. - "" .. - "" .. - "" .. + "" .. + "" .. + "" .. "" .. - "" .. - "" .. - "" + "" .. + "" .. + "" .. + "" - for i = 1, #players do + for i = 1, math.min(#players, 50) do local pstat = players[i] local kd = pstat.kills - if pstat.deaths > 0 then + if pstat.deaths > 1 then kd = kd / pstat.deaths end ret = ret .. @@ -147,13 +181,11 @@ function ctf_stats.get_html(title, players) "" - if i > 49 then - break - end end ret = ret .. "
usernamekillsdeathsPlayerKillsDeathsK/D ratiocapturesattemptsscore
Bounty killsCapturesAttemptsScore
" .. pstat.name .. "" .. pstat.kills .. "" .. pstat.deaths .. - "" .. math.floor(kd*10)/10 .. + "" .. math.floor(kd * 10) / 10 .. + "" .. pstat.bounty_kills .. "" .. pstat.captures .. "" .. pstat.attempts .. "" .. math.floor(pstat.score*10)/10 .. "
\n" @@ -205,16 +237,17 @@ local function send_as_chat_result(to, name) if place < 1 then place = #players + 1 end - local you_are_in = (to == name) and "You are in " or "They are in " - local result = you_are_in .. place .. " place.\n" + local you_are_in = (to == name) and "You are in " or name .. " is in " + local result = you_are_in .. place .. " place." if me then local kd = me.kills - if me.deaths > 0 then + if me.deaths > 1 then kd = kd / me.deaths end result = result .. "Kills: " .. me.kills .. " | Deaths: " .. me.deaths .. - " | K/D: " .. math.floor(kd*10)/10 .. + " | K/D: " .. math.floor(kd * 10) / 10 .. + " | Bounty kills: " .. me.bounty_kills .. " | Captures: " .. me.captures .. " | Attempts: " .. me.attempts .. " | Score: " .. math.floor(me.score) @@ -224,14 +257,20 @@ end minetest.register_chatcommand("rankings", { func = function(name, param) - if param == "me" then - return send_as_chat_result(name, name) - elseif param ~= "" then - if ctf_stats.players[param:trim()] then - return send_as_chat_result(name, param:trim()) + local target + if param ~= "" then + param = param:trim() + if ctf_stats.players[param] then + target = param else - return false, "Can't find player '" .. param:trim() .. "'" + return false, "Can't find player '" .. param .. "'" end + else + target = name + end + + if not minetest.get_player_by_name(name) then + send_as_chat_result(name, target) else local players = {} for pname, pstat in pairs(ctf_stats.players) do @@ -239,8 +278,8 @@ minetest.register_chatcommand("rankings", { pstat.color = nil table.insert(players, pstat) end - local fs = ctf_stats.get_formspec("Player Rankings", players, 0) - fs = fs .. "label[3.5,6.2;Tip: to see where you are, type /rankings me]" + + local fs = ctf_stats.get_formspec("Player Rankings", players, 0, target) minetest.show_formspec(name, "ctf_stats:rankings", fs) end end diff --git a/mods/random_messages/init.lua b/mods/random_messages/init.lua index eb14c52..97bc9e2 100644 --- a/mods/random_messages/init.lua +++ b/mods/random_messages/init.lua @@ -60,12 +60,12 @@ function random_messages.read_messages() "Like CTF? Give feedback using /report, and consider donating at rubenwardy.com/donate", "Map makers needed! Visit ctf.rubenwardy.com to get involved.", "Using limited resources for building structures that don't strengthen your base's defences is discouraged.", - "To report misbehaving players to moderators, please use /report NAME MESSAGE", + "To report misbehaving players to moderators, please use /report ", "Swearing, trolling and being rude will not be tolerated and strict action will be taken.", - "Trapping team mates on purpose is strictly against the rules and you will be kicked / banned immediately.", + "Trapping team mates on purpose is strictly against the rules and you will be kicked immediately.", "Help your team claim victory by storing extra weapons in the team chest, and never taking more than you need.", - "Note: The maximum number of apples in a stack has been reduced from 99 to 30.", - "Excessive spawn-killing is a direct violation of the rules - appropriate punishments will be given." + "Excessive spawn-killing is a direct violation of the rules - appropriate punishments will be given.", + "Check your score and your rank in the league tables using /rankings" } end