forked from Simnation/Main
85 lines
2.5 KiB
Lua
85 lines
2.5 KiB
Lua
![]() |
-- optimizations
|
||
|
local vec = vec
|
||
|
local Wait = Citizen.Wait
|
||
|
local format = string.format
|
||
|
local RemoveBlip = RemoveBlip
|
||
|
local PlayerPedId = PlayerPedId
|
||
|
local IsHudHidden = IsHudHidden
|
||
|
local SetTextFont = SetTextFont
|
||
|
local SetTextScale = SetTextScale
|
||
|
local SetTextOutline = SetTextOutline
|
||
|
local GetEntityCoords = GetEntityCoords
|
||
|
local EndTextCommandDisplayText = EndTextCommandDisplayText
|
||
|
local BeginTextCommandDisplayText = BeginTextCommandDisplayText
|
||
|
local AddTextComponentSubstringPlayerName = AddTextComponentSubstringPlayerName
|
||
|
-- end optimizations
|
||
|
|
||
|
local nearestPostalText = ""
|
||
|
|
||
|
-- recalculate current postal
|
||
|
Citizen.CreateThread(function()
|
||
|
-- wait for postals to load
|
||
|
while postals == nil do Wait(1) end
|
||
|
|
||
|
local delay = math.max(config.updateDelay and tonumber(config.updateDelay) or 300, 50)
|
||
|
if not delay or tonumber(delay) <= 0 then
|
||
|
error("Invalid render delay provided, it must be a number > 0")
|
||
|
end
|
||
|
|
||
|
local postals = postals
|
||
|
local deleteDist = config.blip.distToDelete
|
||
|
local formatTemplate = config.text.format
|
||
|
local _total = #postals
|
||
|
|
||
|
while true do
|
||
|
local coords = GetEntityCoords(PlayerPedId())
|
||
|
local _nearestIndex, _nearestD
|
||
|
coords = vec(coords[1], coords[2])
|
||
|
|
||
|
for i = 1, _total do
|
||
|
local D = #(coords - postals[i][1])
|
||
|
if not _nearestD or D < _nearestD then
|
||
|
_nearestIndex = i
|
||
|
_nearestD = D
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if pBlip and #(pBlip.p[1] - coords) < deleteDist then
|
||
|
TriggerEvent('chat:addMessage', {
|
||
|
color = { 255, 0, 0 },
|
||
|
args = {
|
||
|
'Postals',
|
||
|
"You've reached your postal destination!"
|
||
|
}
|
||
|
})
|
||
|
RemoveBlip(pBlip.hndl)
|
||
|
pBlip = nil
|
||
|
end
|
||
|
|
||
|
local _code = postals[_nearestIndex].code
|
||
|
nearest = { code = _code, dist = _nearestD }
|
||
|
nearestPostalText = format(formatTemplate, _code, _nearestD)
|
||
|
Wait(delay)
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
-- text display thread
|
||
|
Citizen.CreateThread(function()
|
||
|
local posX = config.text.posX
|
||
|
local posY = config.text.posY
|
||
|
local _string = "STRING"
|
||
|
local _scale = 0.42
|
||
|
local _font = 4
|
||
|
while true do
|
||
|
if nearest and not IsHudHidden() then
|
||
|
SetTextScale(_scale, _scale)
|
||
|
SetTextFont(_font)
|
||
|
SetTextOutline()
|
||
|
BeginTextCommandDisplayText(_string)
|
||
|
AddTextComponentSubstringPlayerName(nearestPostalText)
|
||
|
EndTextCommandDisplayText(posX, posY)
|
||
|
end
|
||
|
Wait(0)
|
||
|
end
|
||
|
end)
|