124 lines
3.0 KiB
Lua
124 lines
3.0 KiB
Lua
--================================--
|
|
-- FIRE SCRIPT v1.6.3 --
|
|
-- by GIMI (+ foregz, Albo1125) --
|
|
-- License: GNU GPL 3.0 --
|
|
--================================--
|
|
|
|
Dispatch = {
|
|
lastCall = nil,
|
|
blips = {},
|
|
__index = self,
|
|
init = function(o)
|
|
o = o or {active = {}, removed = {}}
|
|
setmetatable(o, self)
|
|
self.__index = self
|
|
return o
|
|
end
|
|
}
|
|
|
|
function Dispatch:renderRoute(coords)
|
|
ClearGpsMultiRoute()
|
|
|
|
StartGpsMultiRoute(6, true, true)
|
|
AddPointToGpsMultiRoute(table.unpack(coords))
|
|
SetGpsMultiRouteRender(true)
|
|
end
|
|
|
|
function Dispatch:create(dispatchNumber, coords)
|
|
if not (dispatchNumber and coords) then
|
|
return
|
|
end
|
|
|
|
-- Create a fire blip
|
|
local blip = AddBlipForCoord(table.unpack(coords))
|
|
SetBlipSprite(blip, 436)
|
|
SetBlipDisplay(blip, 4)
|
|
SetBlipScale(blip, 1.5)
|
|
SetBlipColour(blip, 1)
|
|
SetBlipAsShortRange(blip, false)
|
|
BeginTextCommandSetBlipName("STRING")
|
|
AddTextComponentString("Fire #" .. dispatchNumber)
|
|
EndTextCommandSetBlipName(blip)
|
|
|
|
self.blips[dispatchNumber] = {
|
|
coords = coords,
|
|
blip = blip
|
|
}
|
|
|
|
self:renderRoute(coords)
|
|
|
|
if Config.Dispatch.playSound then
|
|
Citizen.CreateThread(
|
|
function()
|
|
for i = 1, 3 do
|
|
PlaySoundFromEntity(-1, "IDLE_BEEP", GetPlayerPed(-1), "EPSILONISM_04_SOUNDSET", 0)
|
|
Citizen.Wait(300)
|
|
end
|
|
end
|
|
)
|
|
end
|
|
|
|
FlashMinimapDisplay()
|
|
|
|
Citizen.SetTimeout(
|
|
Config.Dispatch.removeBlipTimeout,
|
|
function()
|
|
if self.blips[dispatchNumber] and self.blips[dispatchNumber].blip then
|
|
RemoveBlip(blip)
|
|
self.blips[dispatchNumber].blip = false
|
|
end
|
|
if self.lastCall == dispatchNumber then
|
|
ClearGpsMultiRoute()
|
|
end
|
|
end
|
|
)
|
|
|
|
-- Only store the last 'Config.Dispatch.storeLast' dispatches' data.
|
|
if countElements(self.blips) > Config.Dispatch.storeLast then
|
|
local order = {}
|
|
|
|
for k, v in pairs(self.blips) do
|
|
table.insert(order, k)
|
|
end
|
|
|
|
table.sort(order)
|
|
self.blips[order[1]] = nil
|
|
end
|
|
|
|
self.lastCall = dispatchNumber
|
|
end
|
|
|
|
function Dispatch:clear(dispatchNumber)
|
|
ClearGpsMultiRoute()
|
|
|
|
if dispatchNumber and self.blips[dispatchNumber] and self.blips[dispatchNumber].blip then
|
|
RemoveBlip(self.blips[dispatchNumber].blip)
|
|
self.blips[dispatchNumber].blip = false
|
|
end
|
|
end
|
|
|
|
function Dispatch:remind(dispatchNumber)
|
|
if self.blips[dispatchNumber] then
|
|
SetNewWaypoint(table.unpack(self.blips[dispatchNumber].coords.xy))
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
--================================--
|
|
-- DISPATCH ROUTE REMOVAL --
|
|
--================================--
|
|
|
|
if Config.Dispatch.clearGpsRadius and tonumber(Config.Dispatch.clearGpsRadius) then
|
|
Citizen.CreateThread(
|
|
function()
|
|
while true do
|
|
Citizen.Wait(5000)
|
|
if Dispatch.lastCall and Dispatch.blips[Dispatch.lastCall] and Dispatch.blips[Dispatch.lastCall].blip and #(Dispatch.blips[Dispatch.lastCall].coords - GetEntityCoords(GetPlayerPed(-1))) < Config.Dispatch.clearGpsRadius then
|
|
ClearGpsMultiRoute()
|
|
end
|
|
end
|
|
end
|
|
)
|
|
end |