84 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			84 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)
 |