forked from Simnation/Main
396 lines
12 KiB
Lua
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
|
|
|