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)
 | 
