- aether-medical: Stationen/Belegung, Intensivstation, Blutbank, Fuhrpark, Nachrichten/Aushänge, Berichte und Textbausteine (server + NUI) - aether-admin: vollständiges Server-Admin-Panel als echtes FiveM-Resource, an aether-core gekoppelt (Rechte über aether_users.admin_group), mit WebRTC-Live-Kameras (Bildschirmfreigabe) und separatem Media-Server (SFU) - Prototypen admin/ vervollständigt - SQL-Schema aether_admin.sql - Docker-Compose mit MariaDB und idempotenter Auto-Migration (schema_migrations) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
32 lines
1.2 KiB
Lua
32 lines
1.2 KiB
Lua
-- =====================================================================
|
|
-- aether-admin / Modul: Weltkarte
|
|
--
|
|
-- Live-Standorte aller Spieler. Die Positionen stammen aus dem
|
|
-- Positions-Cache, den die Clients regelmäßig melden (siehe main.lua).
|
|
-- =====================================================================
|
|
|
|
Admin = Admin or {}
|
|
Admin.Live = Admin.Live or { pos = {}, god = {}, frozen = {}, muted = {} }
|
|
|
|
Admin.Kern.Registriere('weltkarte', 'laden', function(handelnder, daten)
|
|
local alle = exports['aether-core']:HoleAlleSpieler() or {}
|
|
local liste = {}
|
|
|
|
for serverId, d in pairs(alle) do
|
|
local sid = tonumber(serverId)
|
|
local pos = Admin.Live.pos[sid] or d.position
|
|
liste[#liste + 1] = {
|
|
id = sid,
|
|
name = (d.vorname or '?') .. ' ' .. (d.nachname or ''),
|
|
fraktion = d.fraktion,
|
|
ping = GetPlayerPing(sid) or 0,
|
|
tot = d.istTot and true or false,
|
|
x = pos and pos.x or 0.0,
|
|
y = pos and pos.y or 0.0,
|
|
}
|
|
end
|
|
|
|
table.sort(liste, function(a, b) return a.id < b.id end)
|
|
return { spieler = liste, rechte = Admin.Kern.RechteAbbild(handelnder.quelle) }
|
|
end)
|