local pendingCallbacks = {} local callbackCounter = 0 local resourceName = GetCurrentResourceName() local responseEvent = ('devx_core:client:callback:%s'):format(resourceName) function DevXTriggerCallback(name, payload, callback) assert(type(name) == 'string' and name:match('^[%w_%-]+:[%w_%-]+$'), 'Callbackname ist ungültig.') assert(type(callback) == 'function', 'Clientcallback muss eine Funktion sein.') callbackCounter = callbackCounter + 1 local requestId = ('%s:%s:%s'):format(resourceName, GetGameTimer(), callbackCounter) pendingCallbacks[requestId] = callback TriggerServerEvent( ('devx_core:server:callback:%s:%s'):format(resourceName, name), requestId, payload or {} ) SetTimeout(22000, function() local pending = pendingCallbacks[requestId] if not pending then return end pendingCallbacks[requestId] = nil pending({ ok = false, error = ('Keine Antwort auf %s. Prüfe die txAdmin- und F8-Konsole.'):format(name) }) end) end RegisterNetEvent(responseEvent) AddEventHandler(responseEvent, function(requestId, result) local callback = pendingCallbacks[requestId] if not callback then return end pendingCallbacks[requestId] = nil callback(result or { ok = false, error = 'Leere Serverantwort.' }) end)