PlanetPvPGreen/roster.lua
2026-10-16 20:27:02 -05:00

81 lines
3.2 KiB
Lua

local mod_gui = require("__core__.lualib.mod-gui")
local roster = {}
local PLANETS = {"nauvis", "vulcanus", "fulgora", "gleba"}
local function format_playtime(ticks)
local total_seconds = math.floor((ticks or 0) / 60)
local hours = math.floor(total_seconds / 3600)
local minutes = math.floor((total_seconds % 3600) / 60)
return string.format("%d:%02d", hours, minutes)
end
function roster.create_button(player)
if not (player and player.valid) then return end
local flow = mod_gui.get_button_flow(player)
if flow.pvp_roster_button then return end
flow.add{
type = "sprite-button",
name = "pvp_roster_button",
sprite = "entity/character",
tooltip = "Team roster",
}
end
local function build_window(player)
if player.gui.screen.pvp_roster_frame then player.gui.screen.pvp_roster_frame.destroy() end
local frame = player.gui.screen.add{type = "frame", name = "pvp_roster_frame", caption = "TEAM ROSTER", direction = "vertical"}
frame.auto_center = true
local any_team = false
for _, planet in ipairs(PLANETS) do
local force_name = storage.planet_teams and storage.planet_teams[planet]
if force_name then
any_team = true
local color = storage.force_colors and storage.force_colors[force_name]
local header = frame.add{type = "label", caption = force_name .. " (" .. planet .. ")", style = "caption_label"}
if color then header.style.font_color = color end
local found = false
for _, target in pairs(game.players) do
if target.force and target.force.name == force_name then
found = true
local status = target.connected and "" or " (offline)"
local line = frame.add{type = "label", caption = " " .. target.name .. status .. " - " .. format_playtime(target.online_time)}
if color then line.style.font_color = color end
end
end
if not found then frame.add{type = "label", caption = " (no players)"} end
end
end
if not any_team then frame.add{type = "label", caption = "No teams initialized yet."} end
local buttons = frame.add{type = "flow", direction = "horizontal"}
buttons.add{type = "button", name = "pvp_roster_refresh", caption = "Refresh"}
buttons.add{type = "button", name = "pvp_roster_close", caption = "Close"}
end
function roster.on_gui_click(event)
local element = event.element
if not (element and element.valid) then return false end
local player = game.get_player(event.player_index)
if not (player and player.valid) then return false end
if element.name == "pvp_roster_button" then
if player.gui.screen.pvp_roster_frame then
player.gui.screen.pvp_roster_frame.destroy()
else
build_window(player)
end
return true
end
if element.name == "pvp_roster_refresh" then
build_window(player)
return true
end
if element.name == "pvp_roster_close" then
if player.gui.screen.pvp_roster_frame then player.gui.screen.pvp_roster_frame.destroy() end
return true
end
return false
end
return roster