-- ───────────────────────────────────────────────────────────────────────────── -- NUI bridge – all SendNUIMessage / RegisterNUICallback calls -- ───────────────────────────────────────────────────────────────────────────── NUIBridge = {} local pcOpen = false -- ist der PC gerade offen? (für Interaktionsmodus-Taste) local function Send(action, data) SendNUIMessage({ action = action, data = data or {} }) end -- ── Outbound (Lua -> NUI) ─────────────────────────────────────────────────── function NUIBridge.Boot(sessionData) SetNuiFocus(true, true) pcOpen = true Send("boot", sessionData) end function NUIBridge.SetInstalledApps(apps) Send("setInstalledApps", apps) end function NUIBridge.SetInbox(mails, folders) Send("setInbox", { mails = mails, folders = folders or {} }) end function NUIBridge.MailAddressStatus(hasAddress, address, realms) Send("mailAddressStatus", { hasAddress = hasAddress, address = address, realms = realms or {} }) end function NUIBridge.MailCreateResult(success, err, address) Send("mailCreateResult", { success = success, error = err, address = address }) end function NUIBridge.SetMailContent(mail) Send("setMailContent", mail) end function NUIBridge.MailSent() Send("mailSent") end function NUIBridge.MailDeleted(id) Send("mailDeleted", { id = id }) end function NUIBridge.SetStoreList(apps) Send("setStoreList", apps) end function NUIBridge.NewMailNotify() Send("newMailNotify") end function NUIBridge.Close() SetNuiFocus(false, false) pcOpen = false Send("close") end -- Interaktionsmodus: NUI-Fokus vom PC lösen (Spiel-Interaktion) bzw. zurückholen. RegisterNUICallback('setFocus', function(data, cb) local focus = data and data.focus and true or false SetNuiFocus(focus, focus) if focus then if Interaction and Interaction.ExitInteract then Interaction.ExitInteract() end else if Interaction and Interaction.EnterInteract then Interaction.EnterInteract() end end cb({}) end) -- Taste (Standard: END, in den FiveM-Einstellungen umbelegbar), um aus dem -- Interaktionsmodus wieder zum PC (Fokus) zurückzukehren. RegisterCommand('pclive_refocus', function() if pcOpen then SetNuiFocus(true, true) if Interaction and Interaction.ExitInteract then Interaction.ExitInteract() end Send('exitInteract') end end, false) RegisterKeyMapping('pclive_refocus', 'PC-Live: Zurück zum PC (Fokus)', 'keyboard', 'END') function NUIBridge.SetAccentColor(color) Send("setAccentColor", { color = color }) end -- ── Inbound (NUI -> Lua) ──────────────────────────────────────────────────── RegisterNUICallback('closePC', function(data, cb) NUIBridge.Close() Interaction.OnSessionClose() cb({}) end) -- Mail RegisterNUICallback('checkMailAddress', function(data, cb) TriggerServerEvent('pc-live:server:checkMailAddress') cb({}) end) RegisterNUICallback('createMailAddress', function(data, cb) TriggerServerEvent('pc-live:server:createMailAddress', data.username) cb({}) end) RegisterNUICallback('getInbox', function(data, cb) TriggerServerEvent('pc-live:server:getInbox') cb({}) end) RegisterNUICallback('readMail', function(data, cb) TriggerServerEvent('pc-live:server:readMail', tonumber(data.id)) cb({}) end) RegisterNUICallback('sendMail', function(data, cb) TriggerServerEvent('pc-live:server:sendMail', { to = tostring(data.to or ""), subject = tostring(data.subject or ""), body = tostring(data.body or ""), fromMailbox = tostring(data.fromMailbox or ""), }) cb({}) end) RegisterNUICallback('setSignature', function(data, cb) TriggerServerEvent('pc-live:server:setSignature', tostring(data.address or ""), tostring(data.signature or "")) cb({}) end) RegisterNUICallback('getSharedMailboxes', function(data, cb) TriggerServerEvent('pc-live:server:getSharedMailboxes') cb({}) end) RegisterNUICallback('deleteMail', function(data, cb) TriggerServerEvent('pc-live:server:deleteMail', tonumber(data.id)) cb({}) end) RegisterNUICallback('getSent', function(data, cb) TriggerServerEvent('pc-live:server:getSent') cb({}) end) RegisterNUICallback('getFolders', function(data, cb) TriggerServerEvent('pc-live:server:getFolders', tostring(data.address or "")) cb({}) end) RegisterNUICallback('getFolderMails', function(data, cb) TriggerServerEvent('pc-live:server:getFolderMails', tonumber(data.folderId), tostring(data.address or "")) cb({}) end) RegisterNUICallback('createFolder', function(data, cb) TriggerServerEvent('pc-live:server:createFolder', tostring(data.name or ""), tostring(data.address or "")) cb({}) end) RegisterNUICallback('deleteFolder', function(data, cb) TriggerServerEvent('pc-live:server:deleteFolder', tonumber(data.id), tostring(data.address or "")) cb({}) end) RegisterNUICallback('moveMail', function(data, cb) local folderId = data.folderId ~= nil and tonumber(data.folderId) or nil TriggerServerEvent('pc-live:server:moveMail', tonumber(data.id), folderId, tostring(data.address or "")) cb({}) end) -- Calendar RegisterNUICallback('getCalendar', function(data, cb) TriggerServerEvent('pc-live:server:getCalendar') cb({}) end) RegisterNUICallback('addCalendarEvent', function(data, cb) TriggerServerEvent('pc-live:server:addCalendarEvent', data) cb({}) end) RegisterNUICallback('updateCalendarEvent', function(data, cb) TriggerServerEvent('pc-live:server:updateCalendarEvent', tonumber(data.id), data) cb({}) end) RegisterNUICallback('deleteCalendarEvent', function(data, cb) TriggerServerEvent('pc-live:server:deleteCalendarEvent', tonumber(data.id)) cb({}) end) -- Contacts RegisterNUICallback('getContacts', function(data, cb) TriggerServerEvent('pc-live:server:getContacts') cb({}) end) RegisterNUICallback('addContact', function(data, cb) TriggerServerEvent('pc-live:server:addContact', data) cb({}) end) RegisterNUICallback('updateContact', function(data, cb) TriggerServerEvent('pc-live:server:updateContact', tonumber(data.id), data) cb({}) end) RegisterNUICallback('deleteContact', function(data, cb) TriggerServerEvent('pc-live:server:deleteContact', tonumber(data.id)) cb({}) end) -- Store RegisterNUICallback('getStore', function(data, cb) TriggerServerEvent('pc-live:server:getStore') cb({}) end) RegisterNUICallback('installApp', function(data, cb) TriggerServerEvent('pc-live:server:installApp', tostring(data.appId or "")) cb({}) end) RegisterNUICallback('uninstallApp', function(data, cb) TriggerServerEvent('pc-live:server:uninstallApp', tostring(data.appId or "")) cb({}) end) -- Browser – IC pages fetched locally from config RegisterNUICallback('getBrowserPage', function(data, cb) local slug = tostring(data.slug or "home") local page = Config.ICPages[slug] cb({ found = page ~= nil, page = page, slug = slug }) end) -- ── IC-Verwaltung ──────────────────────────────────────────────────────────── -- Relay messages from ic-verwaltung to pc-live NUI (→ iframe postMessage) AddEventHandler('ic-verwaltung:relayToPC', function(msg) SendNUIMessage({ action = 'ic_verwaltung_relay', data = msg }) end) RegisterNUICallback('openIcVerwaltung', function(data, cb) cb({}) -- Open ic-verwaltung in pcMode: no focus changes, UI relayed via postMessage TriggerEvent('ic-verwaltung:openForPC') end) RegisterNUICallback('closeIcVerwaltung', function(data, cb) cb({}) -- Forward close action into ic-verwaltung (user closed the PC window) TriggerEvent('ic-verwaltung:closeFromPC') end) -- ── Parkuhr Integration ────────────────────────────────────────────────────── local _pendingParkuhrCb = nil -- Antwort vom Parkuhr-Server empfangen und an NUI weiterleiten RegisterNetEvent('parkuhr:panelData', function(payload) if _pendingParkuhrCb then _pendingParkuhrCb(payload or { devices = {}, typeTariffs = {}, currency = "$" }) _pendingParkuhrCb = nil end end) RegisterNUICallback('getParkuhrPanel', function(data, cb) _pendingParkuhrCb = cb TriggerServerEvent('parkuhr:requestPanelData') end) RegisterNUICallback('saveParkuhrTariff', function(data, cb) TriggerServerEvent('parkuhr:saveTariff', tonumber(data.deviceId), tonumber(data.duration), tonumber(data.price) ) cb({}) end) RegisterNUICallback('deleteParkuhrTariff', function(data, cb) TriggerServerEvent('parkuhr:deleteTariff', tonumber(data.deviceId), tonumber(data.duration) ) cb({}) end) -- ── PBS Dashboard ──────────────────────────────────────────────────────────── RegisterNUICallback('getPbsUrl', function(data, cb) cb({ url = GetConvar('pbs_web_url', 'http://localhost:4088') }) end) -- Bleeter laeuft als eigene App im PC (client/bleeter.lua). Der frueher hier -- stehende Callback oeffnete stattdessen Bleeters eigenes Fenster ueber dem PC -- - das nahm dem PC den Fokus und war seit dem Umbau ohne Aufrufer.