aether-framework/resources/[aether]/aether-admin/server/module/weltkarte.lua
Jerrit Fritzsche e4b82dd685 Aether-Framework: Fachmodule, Admin-Panel und Docker-Datenbank
- 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>
2026-07-27 18:55:32 +02:00

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)