From b470d8f5165af33426959e2e4b07f41c7a217588 Mon Sep 17 00:00:00 2001 From: MoNTE48 Date: Tue, 4 Jan 2022 00:09:40 +0100 Subject: [PATCH] Minor update HUD --- hud.lua | 68 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/hud.lua b/hud.lua index dc47e52..136ecd4 100644 --- a/hud.lua +++ b/hud.lua @@ -17,41 +17,43 @@ hud.register("areas", { number = 0xFFFFFF }) +local function update_hud(player, name, pos) + local areaStrings = { + S("Areas:") + } + + for id, area in pairs(areas:getAreasAtPos(pos)) do + areaStrings[#areaStrings + 1] = ("%s [%u] (%s)%s%s") + :format(area.name, id, area.owner, + area.open and (" [" .. S("Open") .. "]") or "", + area.canPvP and (" [" .. S("PvP enabled") .. "]") or "") + end + + local str = "" + for _, area in pairs(areas:getExternalHudEntries(pos)) do + if area.name then str = area.name .. " " end + if area.id then str = str .. "[" .. area.id .. "] " end + if area.owner then str = str .. "(" .. area.owner .. ")" end + areaStrings[#areaStrings + 1] = str + end + + -- "Areas:" text has index 1 + local areaString = #areaStrings > 1 and tconcat(areaStrings, "\n") or "" + + local phud = areas.hud[name] or {} + if not phud.oldAreas or phud.oldAreas ~= areaString then + hud.change_item(player, "areas", {text = areaString}) + phud.oldAreas = areaString + end +end + minetest.register_playerstep(function(_, playernames) - for _, name in pairs(playernames) do + for _, name in ipairs(playernames) do local player = minetest.get_player_by_name(name) - if not player or not player:is_player() then return end - local pos = vround(player:get_pos()) - if minetest.is_valid_pos(pos) then - local areaStrings = {} - - for id, area in pairs(areas:getAreasAtPos(pos)) do - areaStrings[#areaStrings+1] = ("%s [%u] (%s)%s%s%s") - :format(area.name, id, area.owner, - area.open and (" " .. S("Open")) or "", - (area.open and area.canPvP and " | " or ""), -- shitcode detected XD - area.canPvP and (" " .. S("PvP enabled")) or "") - end - - local str = "" - for _, area in pairs(areas:getExternalHudEntries(pos)) do - if area.name then str = area.name .. " " end - if area.id then str = str .. "[" .. area.id .. "] " end - if area.owner then str = str .. "(" .. area.owner .. ")" end - areaStrings[#areaStrings+1] = str - end - - local areaString = "" - if #areaStrings > 0 then - areaString = S("Areas:") - areaString = areaString .. "\n" .. - tconcat(areaStrings, "\n") - end - - local phud = areas.hud[name] or {} - if not phud.oldAreas or phud.oldAreas ~= areaString then - hud.change_item(player, "areas", {text = areaString}) - phud.oldAreas = areaString + if player and player:is_player() then + local pos = vround(player:get_pos()) + if minetest.is_valid_pos(pos) then + update_hud(player, name, pos) end end end