- 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>
33 lines
1.2 KiB
Lua
33 lines
1.2 KiB
Lua
-- =====================================================================
|
|
-- aether-admin / Modul: Ankündigungen
|
|
--
|
|
-- Eine Nachricht an den ganzen Server. Sie wird verschickt und der
|
|
-- Verlauf bleibt nachlesbar.
|
|
-- =====================================================================
|
|
|
|
Admin = Admin or {}
|
|
|
|
Admin.Kern.Registriere('broadcast', 'laden', function(handelnder, daten)
|
|
return {
|
|
verlauf = MySQL.query.await([[
|
|
SELECT typ, nachricht, admin_name, erstellt_am
|
|
FROM aether_admin_broadcasts ORDER BY id DESC LIMIT 30
|
|
]]) or {},
|
|
}
|
|
end)
|
|
|
|
Admin.Kern.Registriere('broadcast', 'senden', function(handelnder, daten)
|
|
local typ = tostring(daten.typ or 'info')
|
|
local text = tostring(daten.nachricht or ''):sub(1, 512)
|
|
if #text < 2 then return nil, 'Bitte eine Nachricht eingeben.' end
|
|
|
|
MySQL.insert.await([[
|
|
INSERT INTO aether_admin_broadcasts (typ, nachricht, admin_name)
|
|
VALUES (?, ?, ?)
|
|
]], { typ, text, handelnder.name })
|
|
|
|
TriggerClientEvent('aether-admin:client:broadcast', -1, { typ = typ, text = text })
|
|
Admin.Log.Schreibe(handelnder, 'Ankündigung', typ, text:sub(1, 80))
|
|
return { ok = true }
|
|
end)
|