- 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>
98 lines
3.3 KiB
Lua
98 lines
3.3 KiB
Lua
-- =====================================================================
|
|
-- Aether Core — Hilfsfunktionen (Client und Server)
|
|
-- Global als `Aether` verfuegbar.
|
|
-- =====================================================================
|
|
|
|
Aether = Aether or {}
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Konsolenausgaben mit einheitlichem Praefix
|
|
-- ---------------------------------------------------------------------
|
|
|
|
--- Gibt eine Debug-Meldung aus (nur wenn Config.Debug aktiv ist)
|
|
--- @param nachricht string Auszugebender Text
|
|
function Aether.Debug(nachricht)
|
|
if not Config.Debug then return end
|
|
print(('^5[Aether]^7 %s'):format(nachricht))
|
|
end
|
|
|
|
--- Gibt eine Informationsmeldung aus
|
|
--- @param nachricht string Auszugebender Text
|
|
function Aether.Info(nachricht)
|
|
print(('^2[Aether]^7 %s'):format(nachricht))
|
|
end
|
|
|
|
--- Gibt eine Fehlermeldung aus
|
|
--- @param nachricht string Auszugebender Text
|
|
function Aether.Fehler(nachricht)
|
|
print(('^1[Aether FEHLER]^7 %s'):format(nachricht))
|
|
end
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Allgemeine Helfer
|
|
-- ---------------------------------------------------------------------
|
|
|
|
--- Begrenzt einen Wert auf einen Bereich
|
|
--- @param wert number Eingabewert
|
|
--- @param minimum number Untere Grenze
|
|
--- @param maximum number Obere Grenze
|
|
--- @return number
|
|
function Aether.Begrenze(wert, minimum, maximum)
|
|
if wert < minimum then return minimum end
|
|
if wert > maximum then return maximum end
|
|
return wert
|
|
end
|
|
|
|
--- Rundet eine Zahl auf eine bestimmte Anzahl Nachkommastellen
|
|
--- @param wert number Eingabewert
|
|
--- @param stellen number|nil Nachkommastellen (Standard 0)
|
|
--- @return number
|
|
function Aether.Runde(wert, stellen)
|
|
local faktor = 10 ^ (stellen or 0)
|
|
return math.floor(wert * faktor + 0.5) / faktor
|
|
end
|
|
|
|
--- Erzeugt eine zufaellige Zeichenkette nach einem Muster
|
|
--- A = Grossbuchstabe, 1 = Ziffer, alles andere bleibt stehen
|
|
--- @param muster string z. B. 'AA-1111'
|
|
--- @return string
|
|
function Aether.ZufallsText(muster)
|
|
local buchstaben = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
|
return (muster:gsub('.', function(zeichen)
|
|
if zeichen == 'A' then
|
|
local pos = math.random(#buchstaben)
|
|
return buchstaben:sub(pos, pos)
|
|
elseif zeichen == '1' then
|
|
return tostring(math.random(0, 9))
|
|
end
|
|
return zeichen
|
|
end))
|
|
end
|
|
|
|
--- Erzeugt eine IBAN-artige Kontonummer fuer das Bank-Modul
|
|
--- @return string
|
|
function Aether.ErzeugeIban()
|
|
return Aether.ZufallsText('DE11 1111 1111 11')
|
|
end
|
|
|
|
--- Formatiert einen Betrag als Euro-Text
|
|
--- @param betrag number Betrag
|
|
--- @return string
|
|
function Aether.Euro(betrag)
|
|
local text = tostring(math.floor(betrag or 0))
|
|
-- Tausenderpunkte von hinten einfuegen
|
|
local formatiert = text:reverse():gsub('(%d%d%d)', '%1.'):reverse()
|
|
formatiert = formatiert:gsub('^%.', '')
|
|
return formatiert .. ' €'
|
|
end
|
|
|
|
--- Prueft, ob eine Rechtegruppe mindestens die geforderte Stufe hat
|
|
--- @param gruppe string Gruppe des Spielers
|
|
--- @param benoetigt string Geforderte Gruppe
|
|
--- @return boolean
|
|
function Aether.HatRecht(gruppe, benoetigt)
|
|
local eigene = Config.AdminGruppen[gruppe or 'user'] or 0
|
|
local noetig = Config.AdminGruppen[benoetigt or 'user'] or 0
|
|
return eigene >= noetig
|
|
end
|