-- ===================================================================== -- aether-admin — Server-Schnittstelle -- -- Ein einziges Netz-Event bedient das ganze Panel. Jede Anfrage -- durchläuft die Rechteprüfung im Kern, bevor sie ein Modul erreicht. -- ===================================================================== Admin = Admin or {} Admin.Live = Admin.Live or { pos = {}, god = {}, frozen = {}, muted = {} } -- --------------------------------------------------------------------- -- Panel öffnen -- --------------------------------------------------------------------- RegisterNetEvent('aether-admin:oeffnen', function() local quelle = source if not Admin.Auth.DarfOeffnen(quelle) then TriggerClientEvent('aether-admin:verweigert', quelle, 'Du hast keinen Zugriff auf das Admin-Panel.') return end local gruppe = Admin.Auth.Gruppe(quelle) TriggerClientEvent('aether-admin:zeige', quelle, { admin = { name = Admin.Auth.Name(quelle), gruppe = gruppe }, sektionen = Admin.Kern.SichtbareSektionen(quelle), rechte = Admin.Kern.RechteAbbild(quelle), serverName = GetConvar('sv_hostname', 'Aether RP'), media = { aktiv = AdminConfig.Media.aktiv }, }) Admin.Log.Schreibe(Admin.Auth.Handelnder(quelle), 'Panel geöffnet') end) -- --------------------------------------------------------------------- -- Zentraler Aufruf: die Oberfläche fragt, ein Modul antwortet -- --------------------------------------------------------------------- RegisterNetEvent('aether-admin:aufruf', function(modul, aktion, daten, ruf) local quelle = source local ergebnis, fehler = Admin.Kern.FuehreAus( quelle, tostring(modul or ''), tostring(aktion or ''), daten or {}) TriggerClientEvent('aether-admin:antwort', quelle, ruf, ergebnis, fehler) end) -- --------------------------------------------------------------------- -- Positions-Cache (für Weltkarte, Teleport, Spectate) -- --------------------------------------------------------------------- RegisterNetEvent('aether-admin:pos', function(pos) if type(pos) == 'table' and pos.x then Admin.Live.pos[source] = { x = pos.x + 0.0, y = pos.y + 0.0, z = pos.z + 0.0 } end end) -- --------------------------------------------------------------------- -- Spieler-Report aus dem Spiel (/report) -- --------------------------------------------------------------------- RegisterNetEvent('aether-admin:report', function(betreff, nachricht) local quelle = source if type(betreff) ~= 'string' or #betreff < 2 then return end Admin.ErstelleReport(quelle, betreff:sub(1, 160), nachricht) TriggerClientEvent('aether-admin:client:hinweis', quelle, '✅ Dein Report wurde an das Team übermittelt.') end) -- --------------------------------------------------------------------- -- Neuen Spielern den aktuellen Weltzustand mitgeben -- --------------------------------------------------------------------- AddEventHandler('aether:server:spielerGeladen', function(quelle) if Admin.SendeWelt then Admin.SendeWelt(quelle) end end) -- --------------------------------------------------------------------- -- Aufräumen -- --------------------------------------------------------------------- AddEventHandler('playerDropped', function() local weg = source Admin.Live.pos[weg] = nil Admin.Live.god[weg] = nil Admin.Live.frozen[weg] = nil Admin.Live.muted[weg] = nil end)