local QBCore = exports['qb-core']:GetCoreObject() local isInPanel, noNotify = false, false RegisterNUICallback('close', function(data, cb) closeUi() end) function closeUi() isInPanel = false SetNuiFocus(false, false) SetNuiFocusKeepInput(false) SendNUIMessage({type = 'close'}) end RegisterCommand(Config.PanelCommand or 'adminPanel', function(source, args, rawCommand) QBCore.Functions.TriggerCallback('rlo_ticketpanel:callback:isAdmin', function(isAdmin) if isAdmin then if not isInPanel then isInPanel = true SendNUIMessage({type = 'open'}) SetNuiFocus(true, true) if Config.KeepInput then SetNuiFocusKeepInput(true) CreateThread(function() while isInPanel do Wait(0) DisableControlAction(0, 24, true) --INPUT_ATTACK DisableControlAction(0, 45, true) --INPUT_RELOAD DisableControlAction(0, 1, true) --LookLeftRight DisableControlAction(0, 2, true) --LookUpDown DisableControlAction(2, 200, true) --ESC if IsDisabledControlJustReleased(2, 200) then closeUi() end end end) end end else ShowNotification(Translation['no_perms']) end end, source) end) RegisterCommand(Config.NoNotifyCommand or 'noNotify', function(source, args, rawCommand) QBCore.Functions.TriggerCallback('rlo_ticketpanel:callback:isAdmin', function(isAdmin) if not isAdmin then ShowNotification(Translation['no_perms']) return end noNotify = not noNotify local message = noNotify and Translation['nonotify_enable'] or Translation['nonotify_disable'] ShowNotification(message) end, source) end) RegisterNetEvent('rlo_ticketpanel:client:syncRequest', function(activeTickets, newUniqueId) local ticketContent = activeTickets[newUniqueId] if not ticketContent then return end -- Sichere Debug-Ausgabe ohne QBCore.Debug print('Trying to sync, TicketContent:') for k, v in pairs(ticketContent) do print(k, v) end SendNUIMessage({type = 'createTicket', ticketContent = ticketContent}) if not noNotify then print('Notifying!') TriggerEvent('chat:addMessage', { template = '
', args = { '[' .. ticketContent.playerName .. ' - ' .. ticketContent.playerId .. ']', ticketContent.reason } }) if Config.Sound.Enabled then print('Sound is enabled, trying to play sound...') -- Prüfe, ob xSound gestartet ist local xsoundState = GetResourceState('xsound') print('xSound resource state: ' .. xsoundState) if xsoundState ~= 'started' then print('^1Error: xSound resource is not started!^7') else print('^2Attempting to play sound with xSound...^7') print('Sound URL: ' .. Config.Sound.URL) print('Sound Volume: ' .. Config.Sound.Volume) -- Eindeutige Sound-ID für jede Benachrichtigung local soundId = 'ticket_notify_' .. math.random(100000, 999999) -- Direkter Aufruf ohne pcall für bessere Fehlermeldungen print('Trying to play sound with direct method...') exports['xsound']:PlayUrl(soundId, Config.Sound.URL, Config.Sound.Volume, false) -- Sound nach 10 Sekunden stoppen Citizen.SetTimeout(1500, function() if exports['xsound']:soundExists(soundId) then exports['xsound']:Destroy(soundId) print('Sound stopped after 10 seconds timeout') end end) end end end end) RegisterNUICallback('waypoint', function(data) SetNewWaypoint(data.x, data.y) ShowNotification(Translation['set_waypoint']) end) RegisterNUICallback('teleport', function(targetId) QBCore.Functions.TriggerCallback('rlo_ticketpanel:callback:getTargetCoords', function(targetCoords) SetEntityCoords(PlayerPedId(), targetCoords.x, targetCoords.y, targetCoords.z) ShowNotification(Translation['teleported']) end, targetId) end) RegisterNUICallback('syncDelete', function(uniqueId) TriggerServerEvent('rlo_ticketpanel:server:syncDelete', uniqueId) end) RegisterNetEvent('rlo_ticketpanel:client:syncDelete', function(uniqueId) SendNUIMessage({type = 'removeTicket', uniqueId = uniqueId}) end) RegisterNUICallback('syncState', function(ticketContent) -- Sichere Debug-Ausgabe ohne QBCore.Debug print('(Client) syncing this is the ticket content:') for k, v in pairs(ticketContent) do print(k, v) end TriggerServerEvent('rlo_ticketpanel:server:syncState', ticketContent) end) RegisterNetEvent('rlo_ticketpanel:client:syncState', function(ticketContent) SendNUIMessage({type = 'syncState', ticketContent = ticketContent}) end) RegisterNetEvent('rlo_ticketpanel:client:syncOnJoin', function(activeTickets) if not activeTickets then print('Active Tickets is nil') return end print('Active Tickets:') for uniqueId, ticketContent in pairs(activeTickets) do print('uniqueId: ' .. uniqueId) for k, v in pairs(ticketContent) do print(' ' .. k .. ': ' .. tostring(v)) end SendNUIMessage({type = 'createRequest', ticketContent = ticketContent}) end end)