if Config.Framework ~= 'standalone' then return end local RequestId = 0 local serverRequests = {} local clientCallbacks = {} ---@param eventName string ---@param callback function ---@param ... any TriggerServerCallback = function(eventName, callback, ...) serverRequests[RequestId] = callback TriggerServerEvent('houses:triggerServerCallback', eventName, RequestId, GetInvokingResource() or 'unknown', ...) RequestId = RequestId + 1 end exports('TriggerServerCallback', TriggerServerCallback) RegisterNetEvent('houses:serverCallback', function(requestId, invoker, ...) if not serverRequests[requestId] then return print(('[^1ERROR^7] Server Callback with requestId ^5%s^7 Was Called by ^5%s^7 but does not exist.'):format(requestId, invoker)) end serverRequests[requestId](...) serverRequests[requestId] = nil end) ---@param eventName string ---@param callback function _RegisterClientCallback = function(eventName, callback) clientCallbacks[eventName] = callback end RegisterNetEvent('houses:triggerClientCallback', function(eventName, requestId, invoker, ...) if not clientCallbacks[eventName] then return print(('[^1ERROR^7] Client Callback not registered, name: ^5%s^7, invoker resource: ^5%s^7'):format(eventName, invoker)) end clientCallbacks[eventName](function(...) TriggerServerEvent('houses:clientCallback', requestId, invoker, ...) end, ...) end) function GetPlayerData() Error('GetPlayerData is not implemented in standalone framework') return {} end local playerIdentifier = nil function GetIdentifier() if playerIdentifier then return playerIdentifier end local identifier = TriggerServerCallbackSync('houses:GetIdentifier') if identifier then playerIdentifier = identifier end return identifier end function GetJobName() Error('GetJobName is used with standalone') return 'police' end function GetPlayers() return TriggerServerCallbackSync('houses:GetPlayers') end function ShowHelpNotification(msg) BeginTextCommandDisplayHelp('STRING') AddTextComponentSubstringPlayerName(msg) EndTextCommandDisplayHelp(0, false, true, -1) end local texts = {} if GetResourceState('qs-textui') == 'started' then function DrawText3D(x, y, z, text, id, key) local _id = id if not texts[_id] then CreateThread(function() texts[_id] = 5 while texts[_id] > 0 do texts[_id] = texts[_id] - 1 Wait(0) end texts[_id] = nil exports['qs-textui']:DeleteDrawText3D(id) Debug('Deleted text', id) end) TriggerEvent('textui:DrawText3D', x, y, z, text, id, key) end texts[_id] = 5 end else function DrawText3D(x, y, z, text) SetTextScale(0.35, 0.35) SetTextFont(4) SetTextProportional(1) SetTextColour(255, 255, 255, 215) SetTextEntry('STRING') SetTextCentre(true) AddTextComponentString(text) SetDrawOrigin(x, y, z, 0) DrawText(0.0, 0.0) local factor = text:len() / 370 DrawRect(0.0, 0.0 + 0.0125, 0.017 + factor, 0.03, 0, 0, 0, 75) ClearDrawOrigin() end end function DrawText3Ds(x, y, z, text) SetTextScale(0.35, 0.35) SetTextFont(4) SetTextProportional(1) SetTextColour(255, 255, 255, 215) SetTextEntry('STRING') SetTextCentre(true) AddTextComponentString(text) SetDrawOrigin(x, y, z, 0) DrawText(0.0, 0.0) local factor = text:len() / 370 DrawRect(0.0, 0.0 + 0.0125, 0.017 + factor, 0.03, 0, 0, 0, 75) ClearDrawOrigin() end function DrawTextBoard(x, y, z, text) SetTextScale(0.45, 0.45) SetTextFont(1) SetTextProportional(1) SetTextColour(0, 0, 0, 215) SetTextEntry('STRING') SetTextCentre(true) AddTextComponentString(text) SetDrawOrigin(x, y, z, 0) DrawText(0.0, 0.0) ClearDrawOrigin() end function DrawGenericText(text) SetTextColour(186, 186, 186, 255) SetTextFont(4) SetTextScale(0.5, 0.5) SetTextWrap(0.0, 1.0) SetTextCentre(false) SetTextDropshadow(0, 0, 0, 0, 255) SetTextEdge(1, 0, 0, 0, 205) SetTextEntry('STRING') AddTextComponentString(text) DrawText(0.40, 0.00) end function Notification(msg, type) if GetResourceState('qs-interface') == 'started' then if type == 'inform' then exports['qs-interface']:AddNotify(msg, 'Inform', 2500, 'fas fa-file') elseif type == 'error' then exports['qs-interface']:AddNotify(msg, 'Error', 2500, 'fas fa-bug') elseif type == 'success' then exports['qs-interface']:AddNotify(msg, 'Success', 2500, 'fas fa-thumbs-up') end return end if type == 'inform' then lib.notify({ title = 'Housing', description = msg, type = 'inform' }) elseif type == 'error' then lib.notify({ title = 'Housing', description = msg, type = 'error' }) elseif type == 'success' then lib.notify({ title = 'Housing', description = msg, type = 'success' }) end end function ToggleHud(bool) if bool then Debug('Event to show the hud [client/custom/framework/esx.lua line 189]') -- DisplayRadar(false) -- You can enable or disable mini-map here if GetResourceState('qs-interface') == 'started' then exports['qs-interface']:ToggleHud(false) end else Debug('Event to hide the hud [client/custom/framework/esx.lua line 189]') -- DisplayRadar(true) -- You can enable or disable mini-map here if GetResourceState('qs-interface') == 'started' then exports['qs-interface']:ToggleHud(true) end end end