- 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>
52 lines
2.0 KiB
Lua
52 lines
2.0 KiB
Lua
-- =====================================================================
|
|
-- aether-admin / Modul: Immobilien
|
|
--
|
|
-- Solange kein eigenständiges Immobilien-Resource läuft, verwaltet das
|
|
-- Panel die Objekte. Der Besitzer ist ein Charakter aus aether_characters.
|
|
-- =====================================================================
|
|
|
|
Admin = Admin or {}
|
|
|
|
Admin.Kern.Registriere('immobilien', 'laden', function(handelnder, daten)
|
|
local liste = MySQL.query.await([[
|
|
SELECT i.id, i.name, i.ort, i.preis, i.besitzer,
|
|
CONCAT(c.firstname, ' ', c.lastname) AS besitzerName
|
|
FROM aether_admin_properties i
|
|
LEFT JOIN aether_characters c ON c.id = i.besitzer
|
|
ORDER BY i.id
|
|
]]) or {}
|
|
|
|
-- Online-Charaktere zur Auswahl als Besitzer
|
|
local online = {}
|
|
local alle = exports['aether-core']:HoleAlleSpieler() or {}
|
|
for _, d in pairs(alle) do
|
|
online[#online + 1] = {
|
|
charakterId = d.charakterId,
|
|
name = (d.vorname or '?') .. ' ' .. (d.nachname or ''),
|
|
}
|
|
end
|
|
|
|
return { immobilien = liste, spieler = online,
|
|
rechte = Admin.Kern.RechteAbbild(handelnder.quelle) }
|
|
end)
|
|
|
|
Admin.Kern.Registriere('immobilien', 'zuweisen', function(handelnder, daten)
|
|
local id = tonumber(daten.id)
|
|
if not id then return nil, 'Ungültige Kennung.' end
|
|
local besitzer = tonumber(daten.besitzer) -- nil = frei
|
|
|
|
MySQL.update.await('UPDATE aether_admin_properties SET besitzer = ? WHERE id = ?',
|
|
{ besitzer, id })
|
|
Admin.Log.Schreibe(handelnder, 'Immobilie zugewiesen', 'Objekt #' .. id,
|
|
besitzer and ('Charakter #' .. besitzer) or 'frei')
|
|
return { ok = true }
|
|
end)
|
|
|
|
Admin.Kern.Registriere('immobilien', 'raeumen', function(handelnder, daten)
|
|
local id = tonumber(daten.id)
|
|
if not id then return nil, 'Ungültige Kennung.' end
|
|
MySQL.update.await('UPDATE aether_admin_properties SET besitzer = NULL WHERE id = ?', { id })
|
|
Admin.Log.Schreibe(handelnder, 'Immobilie geräumt', 'Objekt #' .. id)
|
|
return { ok = true }
|
|
end)
|