forked from Simnation/Main
310 lines
No EOL
12 KiB
Lua
310 lines
No EOL
12 KiB
Lua
-- Initialize config(s)
|
|
local shared = require 'config.shared'
|
|
|
|
-- Display a notification
|
|
--- @param message string
|
|
--- @param type string
|
|
function ShowNotification(message, type)
|
|
if shared.setup.notify == 'lation_ui' then
|
|
exports.lation_ui:notify({ title = 'Convenience Store', message = message, type = type, icon = 'fas fa-store' })
|
|
elseif shared.setup.notify == 'ox_lib' then
|
|
lib.notify({ description = message, type = type, icon = 'fas fa-store' })
|
|
elseif shared.setup.notify == 'esx' then
|
|
ESX.ShowNotification(message)
|
|
elseif shared.setup.notify == 'qb' then
|
|
QBCore.Functions.Notify(message, type)
|
|
elseif shared.setup.notify == 'okok' then
|
|
exports['okokNotify']:Alert('Convenience Store', message, 5000, type, false)
|
|
elseif shared.setup.notify == 'sd-notify' then
|
|
exports['sd-notify']:Notify('Convenience Store', message, type)
|
|
elseif shared.setup.notify == 'wasabi_notify' then
|
|
exports.wasabi_notify:notify('Convenience Store', message, 5000, type, false, 'fas fa-store')
|
|
elseif shared.setup.notify == 'custom' then
|
|
-- Add custom notification export/event here
|
|
end
|
|
end
|
|
|
|
-- Display a notification from server
|
|
--- @param message string
|
|
--- @param type string
|
|
RegisterNetEvent('lation_247robbery:Notify', function(message, type)
|
|
ShowNotification(message, type)
|
|
end)
|
|
|
|
-- Display a minigame
|
|
--- @param data table
|
|
function Minigame(data)
|
|
if shared.setup.minigame == 'lation_ui' then
|
|
if exports.lation_ui:skillCheck(nil, data.difficulty, data.inputs) then
|
|
return true
|
|
end
|
|
return false
|
|
elseif shared.setup.minigame == 'ox_lib' then
|
|
if lib.skillCheck(data.difficulty, data.inputs) then
|
|
return true
|
|
end
|
|
return false
|
|
elseif shared.setup.minigame == 'custom' then
|
|
-- Add your custom minigame here
|
|
end
|
|
return false
|
|
end
|
|
|
|
-- Display a progress bar
|
|
--- @param data table
|
|
function ProgressBar(data)
|
|
if shared.setup.progress == 'lation_ui' then
|
|
if exports.lation_ui:progressBar({
|
|
label = data.label,
|
|
description = data.description or nil,
|
|
icon = data.icon or nil,
|
|
duration = data.duration,
|
|
useWhileDead = data.useWhileDead,
|
|
canCancel = data.canCancel,
|
|
disable = data.disable,
|
|
anim = {
|
|
dict = data.anim.dict or nil,
|
|
clip = data.anim.clip or nil,
|
|
flag = data.anim.flag or nil
|
|
},
|
|
prop = {
|
|
model = data.prop.model or nil,
|
|
bone = data.prop.bone or nil,
|
|
pos = data.prop.pos or nil,
|
|
rot = data.prop.rot or nil
|
|
}
|
|
}) then
|
|
return true
|
|
end
|
|
return false
|
|
elseif shared.setup.progress == 'ox_lib' then
|
|
-- Want to use ox_lib's progress circle instead of bar?
|
|
-- Change "progressBar" to "progressCircle" below & done!
|
|
if lib.progressBar({
|
|
label = data.label,
|
|
duration = data.duration,
|
|
position = data.position or 'bottom',
|
|
useWhileDead = data.useWhileDead,
|
|
canCancel = data.canCancel,
|
|
disable = data.disable,
|
|
anim = {
|
|
dict = data.anim.dict or nil,
|
|
clip = data.anim.clip or nil,
|
|
flag = data.anim.flag or nil
|
|
},
|
|
prop = {
|
|
model = data.prop.model or nil,
|
|
bone = data.prop.bone or nil,
|
|
pos = data.prop.pos or nil,
|
|
rot = data.prop.rot or nil
|
|
}
|
|
}) then
|
|
return true
|
|
end
|
|
return false
|
|
elseif shared.setup.progress == 'qbcore' then
|
|
local p = promise.new()
|
|
QBCore.Functions.Progressbar(data.label, data.label, data.duration, data.useWhileDead, data.canCancel, {
|
|
disableMovement = data.disable.move,
|
|
disableCarMovement = data.disable.car,
|
|
disableMouse = false,
|
|
disableCombat = data.disable.combat
|
|
}, {
|
|
animDict = data.anim.dict or nil,
|
|
anim = data.anim.clip or nil,
|
|
flags = data.anim.flag or nil
|
|
}, {
|
|
model = data.prop.model or nil,
|
|
bone = data.prop.bone or nil,
|
|
coords = data.prop.pos or nil,
|
|
rotation = data.prop.rot or nil
|
|
}, {},
|
|
function()
|
|
p:resolve(true)
|
|
end,
|
|
function()
|
|
p:resolve(false)
|
|
end)
|
|
return Citizen.Await(p)
|
|
else
|
|
-- Add 'custom' progress bar here
|
|
end
|
|
end
|
|
|
|
-- Display an alert dialog
|
|
--- @param data table
|
|
function ShowAlert(data)
|
|
if shared.setup.dialogs == 'lation_ui' then
|
|
return exports.lation_ui:alert(data)
|
|
elseif shared.setup.dialogs == 'ox_lib' then
|
|
return lib.alertDialog(data)
|
|
elseif shared.setup.dialogs == 'custom' then
|
|
-- Add your custom alert dialog here
|
|
end
|
|
end
|
|
|
|
function ShowInput(data)
|
|
if shared.setup.dialogs == 'lation_ui' then
|
|
return exports.lation_ui:input({
|
|
title = data.title,
|
|
subtitle = data.subtitle,
|
|
submitText = data.submitText,
|
|
cancelText = data.cancelText,
|
|
type = data.type,
|
|
options = data.options
|
|
})
|
|
elseif shared.setup.dialogs == 'ox_lib' then
|
|
return lib.inputDialog(data.title, data.options)
|
|
elseif shared.setup.dialogs == 'custom' then
|
|
-- Add your custom input dialog here
|
|
end
|
|
end
|
|
|
|
-- Send police dispatch message
|
|
--- @param data table data.coords, data.street
|
|
function PoliceDispatch(data)
|
|
if not data then print('^1[ERROR]: Failed to retrieve dispatch data, cannot proceed^0') return end
|
|
if shared.police.dispatch == 'cd_dispatch' then
|
|
local playerData = exports['cd_dispatch']:GetPlayerInfo()
|
|
if not playerData then
|
|
print('^1[ERROR]: cd_dispatch failed to return playerData, cannot proceed^0')
|
|
return
|
|
end
|
|
TriggerServerEvent('cd_dispatch:AddNotification', {
|
|
job_table = shared.police.jobs,
|
|
coords = playerData.coords,
|
|
title = '10-88 - Store Robbery',
|
|
message = 'An alarm has been triggered at 24/7 on ' ..playerData.street,
|
|
flash = 0,
|
|
unique_id = playerData.unique_id,
|
|
sound = 1,
|
|
blip = {
|
|
sprite = 52,
|
|
scale = 1.0,
|
|
colour = 1,
|
|
flashes = false,
|
|
text = '10-88 - Store Robbery',
|
|
time = 5,
|
|
radius = 0,
|
|
}
|
|
})
|
|
elseif shared.police.dispatch == 'ps-dispatch' then
|
|
local alert = {
|
|
coords = data.coords,
|
|
message = 'An alarm has been triggered at 24/7 on ' ..data.street,
|
|
dispatchCode = '10-88',
|
|
description = 'Store Robbery',
|
|
radius = 0,
|
|
sprite = 52,
|
|
color = 1,
|
|
scale = 1.0,
|
|
length = 3
|
|
}
|
|
exports["ps-dispatch"]:CustomAlert(alert)
|
|
elseif shared.police.dispatch == 'qs-dispatch' then
|
|
local playerData = exports['qs-dispatch']:GetPlayerInfo()
|
|
if not playerData then
|
|
print('^1[ERROR]: qs-dispatch failed to return playerData, cannot proceed^0')
|
|
return
|
|
end
|
|
exports['qs-dispatch']:getSSURL(function(image)
|
|
TriggerServerEvent('qs-dispatch:server:CreateDispatchCall', {
|
|
job = shared.police.jobs,
|
|
callLocation = playerData.coords,
|
|
callCode = { code = '10-88', snippet = 'Store Robbery' },
|
|
message = 'An alarm has been triggered at 24/7 on ' ..playerData.street_1,
|
|
flashes = false,
|
|
image = image or nil,
|
|
blip = {
|
|
sprite = 52,
|
|
scale = 1.0,
|
|
colour = 1,
|
|
flashes = false,
|
|
text = '10-88 - Store Robbery',
|
|
time = (30 * 1000),
|
|
}
|
|
})
|
|
end)
|
|
elseif shared.police.dispatch == 'core_dispatch' then
|
|
local gender = IsPedMale(cache.ped) and 'male' or 'female'
|
|
TriggerServerEvent('core_dispatch:addCall', '10-88', 'Potential Store Robbery',
|
|
{{icon = 'fa-venus-mars', info = gender}},
|
|
{data.coords.x, data.coords.y, data.coords.z},
|
|
'police', 30000, 52, 1, false)
|
|
elseif shared.police.dispatch == 'rcore_dispatch' then
|
|
local playerData = exports['rcore_dispatch']:GetPlayerData()
|
|
if not playerData then
|
|
print('^1[ERROR]: rcore_dispatch failed to return playerData, cannot proceed^0')
|
|
return
|
|
end
|
|
local alert = {
|
|
code = '10-88 - Store Robbery',
|
|
default_priority = 'low',
|
|
coords = playerData.coords,
|
|
job = shared.police.jobs,
|
|
text = 'An alarm has been triggered at 24/7 on ' ..playerData.street_1,
|
|
type = 'alerts',
|
|
blip_time = 30,
|
|
blip = {
|
|
sprite = 52,
|
|
colour = 1,
|
|
scale = 1.0,
|
|
text = '10-88 - Store Robbery',
|
|
flashes = false,
|
|
radius = 0,
|
|
}
|
|
}
|
|
TriggerServerEvent('rcore_dispatch:server:sendAlert', alert)
|
|
elseif shared.police.dispatch == 'aty_dispatch' then
|
|
TriggerEvent('aty_dispatch:SendDispatch', 'Potential Store Robbery', '10-88', 52, shared.police.jobs)
|
|
elseif shared.police.dispatch == 'op-dispatch' then
|
|
local job = 'police'
|
|
local text = 'An alarm has been triggered at 24/7 on ' ..data.street
|
|
local coords = data.coords
|
|
local id = cache.serverId
|
|
local title = '10-88 - Store Robbery'
|
|
local panic = false
|
|
TriggerServerEvent('Opto_dispatch:Server:SendAlert', job, title, text, coords, panic, id)
|
|
elseif shared.police.dispatch == 'origen_police' then
|
|
local alert = {
|
|
coords = data.coords,
|
|
title = '10-88 - Store Robbery',
|
|
type = 'GENERAL',
|
|
message = 'An alarm has been triggered at 24/7 on ' ..data.street,
|
|
job = 'police',
|
|
}
|
|
TriggerServerEvent("SendAlert:police", alert)
|
|
elseif shared.police.dispatch == 'emergencydispatch' then
|
|
TriggerServerEvent('emergencydispatch:emergencycall:new', 'police', '10-88 | Potential Store Robbery', data.coords, true)
|
|
elseif shared.police.dispatch == 'custom' then
|
|
-- Add your custom dispatch system here
|
|
else
|
|
print('^1[ERROR]: No dispatch system was detected - please visit config/shared.lua "police" section^0')
|
|
end
|
|
end
|
|
|
|
-- Add circle target zones
|
|
--- @param data table
|
|
function AddCircleZone(data)
|
|
if shared.setup.interact == 'ox_target' then
|
|
exports.ox_target:addSphereZone(data)
|
|
elseif shared.setup.interact == 'qb-target' then
|
|
exports['qb-target']:AddCircleZone(data.name, data.coords, data.radius, {
|
|
name = data.name,
|
|
debugPoly = shared.setup.debug}, {
|
|
options = data.options,
|
|
distance = 2,
|
|
})
|
|
elseif shared.setup.interact == 'interact' then
|
|
exports.interact:AddInteraction({
|
|
coords = data.coords,
|
|
interactDst = 2.0,
|
|
id = data.name,
|
|
options = data.options
|
|
})
|
|
elseif shared.setup.interact == 'custom' then
|
|
-- Add support for a custom target system here
|
|
else
|
|
print('^1[ERROR]: No interaction system was detected - please visit config/shared "setup" section^0')
|
|
end
|
|
end |