aether-framework/resources/[aether]/aether-documents/client/main.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

130 lines
4.0 KiB
Lua

-- =====================================================================
-- Aether Documents — Clientlogik
-- Öffnet die Börse und zeigt vorgezeigte Dokumente anderer Personen an.
-- =====================================================================
local istOffen = false
local istGeladen = false
-- Taste zum Oeffnen der Boerse (F2)
local TASTE_BOERSE = 289
--- Schickt eine Nachricht an die Oberflaeche
local function SendeAnNui(nachricht)
SendNuiMessage(json.encode(nachricht))
end
--- Zeigt eine Meldung oben links im Spiel
local function ZeigeSpielmeldung(text)
if not text or text == '' then return end
BeginTextCommandThefeedPost('STRING')
AddTextComponentSubstringPlayerName(text)
EndTextCommandThefeedPostTicker(false, true)
end
--- Schliesst die Boerse
local function Schliessen()
if not istOffen then return end
istOffen = false
SetNuiFocus(false, false)
SendeAnNui({ aktion = 'schliessen' })
pcall(function() exports['aether-hud']:SetzeSichtbar(true) end)
end
-- ---------------------------------------------------------------------
-- Ereignisse
-- ---------------------------------------------------------------------
AddEventHandler('aether:client:bereit', function()
istGeladen = true
end)
--- Server schickt den Zustand und moechte, dass wir oeffnen
RegisterNetEvent('aether:documents:zeige', function(zustand)
istOffen = true
SetNuiFocus(true, true)
pcall(function() exports['aether-hud']:SetzeSichtbar(false) end)
zustand.aktion = 'oeffnen'
zustand.typen = Dokumente.Typen
SendeAnNui(zustand)
end)
--- Aktualisierter Zustand nach einer Aktion
RegisterNetEvent('aether:documents:zustand', function(zustand)
if not istOffen then
ZeigeSpielmeldung(zustand.hinweis)
return
end
zustand.aktion = 'zustand'
zustand.typen = Dokumente.Typen
SendeAnNui(zustand)
end)
--- Ablehnung einer Aktion
RegisterNetEvent('aether:documents:fehler', function(text)
if istOffen then
SendeAnNui({ aktion = 'fehler', text = text })
else
ZeigeSpielmeldung(text)
end
end)
--- Erfolgsmeldung
RegisterNetEvent('aether:documents:erfolg', function(text)
if istOffen then
SendeAnNui({ aktion = 'hinweis', text = text })
else
ZeigeSpielmeldung(text)
end
end)
--- Jemand zeigt uns ein Dokument: als Vollbild-Ansicht einblenden
RegisterNetEvent('aether:documents:gezeigt', function(dokument)
SetNuiFocus(false, false)
SendeAnNui({ aktion = 'vorgezeigt', dokument = dokument })
end)
-- ---------------------------------------------------------------------
-- Oeffnen per Taste
-- ---------------------------------------------------------------------
CreateThread(function()
while true do
Wait(0)
if istGeladen and not istOffen and IsControlJustReleased(0, TASTE_BOERSE) then
if not IsEntityDead(PlayerPedId()) then
TriggerServerEvent('aether:documents:oeffnen')
end
end
end
end)
-- ---------------------------------------------------------------------
-- NUI-Callbacks
-- ---------------------------------------------------------------------
RegisterNUICallback('schliessen', function(_, rueckgabe)
Schliessen()
rueckgabe({ ok = true })
end)
RegisterNUICallback('verschieben', function(daten, rueckgabe)
TriggerServerEvent('aether:documents:verschieben', daten.dokumentId, daten.zielBoerse)
rueckgabe({ ok = true })
end)
RegisterNUICallback('vorzeigen', function(daten, rueckgabe)
TriggerServerEvent('aether:documents:vorzeigen', daten.dokumentId, daten.zielId)
rueckgabe({ ok = true })
end)
RegisterNUICallback('verlieren', function(daten, rueckgabe)
TriggerServerEvent('aether:documents:verlieren', daten.dokumentId)
rueckgabe({ ok = true })
end)
-- ---------------------------------------------------------------------
-- Aufraeumen
-- ---------------------------------------------------------------------
AddEventHandler('onResourceStop', function(ressource)
if ressource ~= GetCurrentResourceName() then return end
SetNuiFocus(false, false)
end)