1
0
Fork 0
forked from Simnation/Main
Main/resources/[jobs]/[mdt]/myEmergency/client/client.lua
2025-08-14 13:21:51 +02:00

396 lines
12 KiB
Lua

ESX = nil
QBCore = nil
local CurrentActionMsg = ''
local isInFixedSpot = false
local currentMessage = nil
local SystemIsOpen = false
local tabletObject = nil
local NuiIsReady = false
local NotifyOnNuiReady = false
CreateThread(function()
while ESX == nil and QBCore == nil do
if Config.Framework == "ESX" then
ESX = exports["es_extended"]:getSharedObject()
elseif Config.Framework == "QB" then
QBCore = exports['qb-core']:GetCoreObject()
end
Wait(1)
end
end)
function isTabletOpen()
return SystemIsOpen
end
-- draw markers
Citizen.CreateThread(function()
if Config.UseFixedZones then
while true do
Citizen.Wait(1)
local executeSleep = true
local playerCoords = GetEntityCoords(PlayerPedId())
currentMessage = nil
isInFixedSpot = false
if not SystemIsOpen then
for key, spot in pairs(Config.FixedZones) do
local distance = #(playerCoords - spot)
if distance < Config.DrawMarkerDistance then
DrawMarker(
Config.FixesZonesMarkerCfg.type
, spot
, 0.0
, 0.0
, 0.0
, 0.0
, 0.0
, 0.0
, Config.FixesZonesMarkerCfg.x
, Config.FixesZonesMarkerCfg.y
, Config.FixesZonesMarkerCfg.z
, Config.FixesZonesMarkerCfg.r
, Config.FixesZonesMarkerCfg.g
, Config.FixesZonesMarkerCfg.b
, Config.FixesZonesMarkerCfg.a
, false
, false
, 2
, Config.FixesZonesMarkerCfg.rotate
, nil
, nil
, false
)
executeSleep = false
end
if distance <= Config.EnteredMarkerDistance then
isInFixedSpot = true
notify(Config.FixedZonesText[Config.Locale])
executeSleep = false
end
end
end
if executeSleep then
Citizen.Wait(1000)
end
end
end
end)
Citizen.CreateThread(function()
if Config.UseFixedZones then
while true do
Citizen.Wait(1)
if isInFixedSpot then
if not IsPedInAnyVehicle(PlayerPedId()) then
if IsControlJustPressed(0, 51) then
TriggerServerEvent('myEmergency:openSystem')
end
end
end
end
end
end)
function notify(message)
if Config.Framework == "ESX" then
ESX.ShowHelpNotification(message)
else
SetTextComponentFormat('STRING')
AddTextComponentString(message)
DisplayHelpTextFromStringLabel(0, 0, 1, -1)
end
end
RegisterNetEvent("myEmergency:openViaClient")
AddEventHandler("myEmergency:openViaClient", function()
TriggerServerEvent('myEmergency:openSystem')
end)
RegisterNetEvent("myEmergency:notify")
AddEventHandler("myEmergency:notify", function(notificationtext)
SetNotificationTextEntry('STRING')
AddTextComponentString(notificationtext)
DrawNotification(false, false)
end)
--nui callbacks...
RegisterNUICallback('overview', function(uidata, uicb)
if Config.Framework == "ESX" then
ESX.TriggerServerCallback('myEmergency:loadOverview', function(selectedData, cnt, limitDisabled, extraData)
local retdata = {data = selectedData, count=cnt, pageNum=uidata.pageNum, noLimit=limitDisabled, xtraData = extraData}
uicb(retdata)
end, uidata.pageNum, uidata.quicksearch, uidata.load_info)
elseif Config.Framework == "QB" then
QBCore.Functions.TriggerCallback('myEmergency:loadOverview', function(selectedData, cnt, limitDisabled, extraData)
local retdata = {data = selectedData, count=cnt, pageNum=uidata.pageNum, noLimit=limitDisabled, xtraData = extraData}
uicb(retdata)
end, uidata.pageNum, uidata.quicksearch, uidata.load_info)
end
end)
RegisterNUICallback('loadDetails', function(uidata, uicb)
if Config.Framework == "ESX" then
ESX.TriggerServerCallback('myEmergency:loadDetails', function(selectedData)
local retdata = {data = selectedData}
uicb(retdata)
end, uidata.id, uidata.load_info)
elseif Config.Framework == "QB" then
QBCore.Functions.TriggerCallback('myEmergency:loadDetails', function(selectedData)
local retdata = {data = selectedData}
uicb(retdata)
end, uidata.id, uidata.load_info)
end
end)
RegisterNUICallback('custom', function(uidata, uiCallback)
if Config.Framework == "ESX" then
ESX.TriggerServerCallback('myEmergency:loadCustom', function(selectedData)
local retdata = {data = selectedData}
uiCallback(retdata)
end, uidata.load_info, uidata.id)
elseif Config.Framework == "QB" then
QBCore.Functions.TriggerCallback('myEmergency:loadCustom', function(selectedData)
local retdata = {data = selectedData}
uiCallback(retdata)
end, uidata.load_info, uidata.id)
end
end)
RegisterNUICallback('save-data', function(uidata, uicb)
if Config.Framework == "ESX" then
ESX.TriggerServerCallback('myEmergency:save-data', function()
uicb({success = true})
end, uidata.id, uidata.formData, uidata.source)
elseif Config.Framework == "QB" then
QBCore.Functions.TriggerCallback('myEmergency:save-data', function()
uicb({success = true})
end, uidata.id, uidata.formData, uidata.source)
end
end)
RegisterNUICallback('delete-data', function(uidata, uicb)
if Config.Framework == "ESX" then
ESX.TriggerServerCallback('myEmergency:delete-data', function()
uicb({success = true})
end, uidata.id, uidata.source)
elseif Config.Framework == "QB" then
QBCore.Functions.TriggerCallback('myEmergency:delete-data', function()
uicb({success = true})
end, uidata.id, uidata.source)
end
end)
RegisterNUICallback('finish-manhunt', function(uidata, uicb)
if Config.Framework == "ESX" then
ESX.TriggerServerCallback('myEmergency:finish-manhunt', function()
uicb({success = true})
end, uidata.id, uidata.source)
elseif Config.Framework == "QB" then
QBCore.Functions.TriggerCallback('myEmergency:finish-manhunt', function()
uicb({success = true})
end, uidata.id, uidata.source)
end
end)
RegisterNUICallback('takeControlCentre', function(uidata, uicb)
if Config.Framework == "ESX" then
ESX.TriggerServerCallback('myEmergency:takeControlCentre', function()
uicb({success = true})
end, uidata.isReset)
elseif Config.Framework == "QB" then
QBCore.Functions.TriggerCallback('myEmergency:takeControlCentre', function()
uicb({success = true})
end, uidata.isReset)
end
end)
RegisterNUICallback('SetRadioState', function(uidata, uicb)
if Config.Framework == "ESX" then
ESX.TriggerServerCallback('myEmergency:SetRadioState', function()
uicb({success = true})
end, uidata.new_state)
elseif Config.Framework == "QB" then
QBCore.Functions.TriggerCallback('myEmergency:SetRadioState', function()
uicb({success = true})
end, uidata.new_state)
end
end)
RegisterNUICallback('SetVehicle', function(uidata, uicb)
if Config.Framework == "ESX" then
ESX.TriggerServerCallback('myEmergency:SetVehicle', function()
uicb({success = true})
end, uidata.new_state)
elseif Config.Framework == "QB" then
QBCore.Functions.TriggerCallback('myEmergency:SetVehicle', function()
uicb({success = true})
end, uidata.new_state)
end
end)
RegisterNUICallback('filterFilesDropdown', function(uidata, uicb)
if Config.Framework == "ESX" then
ESX.TriggerServerCallback('myEmergency:filterFileDropdown', function(filedata)
uicb({data = filedata})
end, uidata.id, uidata.search)
elseif Config.Framework == "QB" then
QBCore.Functions.TriggerCallback('myEmergency:filterFileDropdown', function(filedata)
uicb({data = filedata})
end, uidata.id, uidata.search)
end
end)
RegisterNUICallback('resetVehicle', function(uidata, uicb)
if Config.Framework == "ESX" then
ESX.TriggerServerCallback('myEmergency:resetVehicle', function()
uicb({success = true})
end, uidata.id)
elseif Config.Framework == "QB" then
QBCore.Functions.TriggerCallback('myEmergency:resetVehicle', function()
uicb({success = true})
end, uidata.id)
end
end)
RegisterNUICallback('resetEmployeeRadio', function(uidata, uicb)
if Config.Framework == "ESX" then
ESX.TriggerServerCallback('myEmergency:resetEmployeeRadio', function()
uicb({success = true})
end, uidata.id)
elseif Config.Framework == "QB" then
QBCore.Functions.TriggerCallback('myEmergency:resetEmployeeRadio', function()
uicb({success = true})
end, uidata.id)
end
end)
RegisterNetEvent("myEmergency:open")
AddEventHandler("myEmergency:open",function(userName, rights, jobname, jobgrade, systemtoshow, job_grades, theme, syncData, syncDataLicenses)
if NuiIsReady then
local SyncData = {LicensesSync = syncDataLicenses.sync, MainSync = {active = syncData.active, types = syncData.Types}}
SendNUIMessage({
message = "show",
username = userName,
rights = rights,
job = jobname,
jobgrade = jobgrade,
currentsystem = systemtoshow,
job_grades = job_grades,
locale = Config.Locale,
Sync=SyncData
,useWeaponRegister=Config.UseWeaponRegister
,useMyImpound=Config.UseMyImpound
,useMySpeedcam=Config.UseMySpeedcam
,theme=theme
,HandleParagraphsAsNumber=Config.HandleParagraphsAsNumber
,UseMotDateFromMyMechanicMDT=Config.UseMotDateFromMyMechanicMDT
,showLastMotDetailFromMyMechanicMDT=Config.showLastMotDetailFromMyMechanicMDT
,showPartAcceptanceFromMyMechanicMDT=Config.showPartAcceptanceFromMyMechanicMDT
,UseMyPrison=Config.UseMyPrison
});
SetNuiFocus(true, true)
SystemIsOpen = true
startAnim()
else
NotifyOnNuiReady = true
TriggerEvent("myEmergency:notify", Config.NuiNotReadyText[Config.Locale])
end
end)
RegisterNetEvent("myEmergency:openRadio")
AddEventHandler("myEmergency:openRadio",function(data, curstate, theme)
if NuiIsReady then
SendNUIMessage({ message = "show-radio-states",locale=Config.Locale, data = data, curstate = curstate, config = Config.RadioHUD, theme=theme});
SetNuiFocus(true, true)
else
NotifyOnNuiReady = true
TriggerEvent("myEmergency:notify", Config.NuiNotReadyText[Config.Locale])
end
end)
RegisterNetEvent("myEmergency:openSystem")
AddEventHandler('myEmergency:openSystem',function()
TriggerServerEvent('myEmergency:openSystem')
end)
RegisterNUICallback('NuiReady', function(uidata, uicb)
SystemIsOpen = false
NuiIsReady = true
if NotifyOnNuiReady then
TriggerEvent("myEmergency:notify", Config.NuiNowReadyText[Config.Locale])
end
uicb({success = true})
end)
RegisterNUICallback('closeWindow', function(uidata, uicb)
SetNuiFocus(false, false)
stopAnim()
SystemIsOpen = false
uicb({success = true})
end)
RegisterNUICallback('GenerateRoute', function(uidata, uicb)
SetNuiFocus(false, false)
stopAnim()
SystemIsOpen = false
uicb({success = true})
SetNewWaypoint(uidata.x, uidata.y)
end)
AddEventHandler('onResourceStop', function(resource)
if resource == GetCurrentResourceName() then
if SystemIsOpen then
SetNuiFocus(false, false)
stopAnim()
SystemIsOpen = false
end
end
end)
--functions
function startAnim()
Citizen.CreateThread(function()
RequestAnimDict("amb@world_human_seat_wall_tablet@female@base")
while not HasAnimDictLoaded("amb@world_human_seat_wall_tablet@female@base") do
Citizen.Wait(0)
end
attachObject()
TaskPlayAnim(GetPlayerPed(-1), "amb@world_human_seat_wall_tablet@female@base", "base" ,8.0, -8.0, -1, 50, 0, false, false, false)
end)
end
function attachObject()
if tabletObject ~= nil then
-- delete tablet object
DeleteObject(tabletObject)
end
--create model of tablet
tabletObject = CreateObject(GetHashKey("prop_cs_tablet"), 0, 0, 0, true, true, true)
AttachEntityToEntity(tabletObject, GetPlayerPed(-1), GetPedBoneIndex(GetPlayerPed(-1), 57005), 0.17, 0.10, -0.13, 20.0, 180.0, 180.0, true, true, false, true, 1, true)
end
function stopAnim()
StopAnimTask(GetPlayerPed(-1), "amb@world_human_seat_wall_tablet@female@base", "base" ,8.0, -8.0, -1, 50, 0, false, false, false)
DeleteEntity(tabletObject)
end