aether-framework/resources/[aether]/aether-core/shared/utils.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

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