local Blips = {} local client = client local function ShowBlip(blipConfig, blip) if blip.job and blip.job ~= client.job.name then return false elseif blip.gang and blip.gang ~= client.gang.name then return false end if Config.RCoreTattoosCompatibility and blip.type == "tattoo" then return false end return (blipConfig.Show and blip.showBlip == nil) or blip.showBlip end local function CreateBlip(blipConfig, coords) local blip = AddBlipForCoord(coords.x, coords.y, coords.z) SetBlipSprite(blip, blipConfig.Sprite) SetBlipColour(blip, blipConfig.Color) SetBlipScale(blip, blipConfig.Scale) SetBlipAsShortRange(blip, true) BeginTextCommandSetBlipName("STRING") AddTextComponentString(blipConfig.Name) EndTextCommandSetBlipName(blip) return blip end local function SetupBlips() for k, _ in pairs(Config.Stores) do local blipConfig = Config.Blips[Config.Stores[k].type] if ShowBlip(blipConfig, Config.Stores[k]) then local blip = CreateBlip(blipConfig, Config.Stores[k].coords) Blips[#Blips + 1] = blip end end end function ResetBlips() if Config.ShowNearestShopOnly then return end for i = 1, #Blips do RemoveBlip(Blips[i]) end Blips = {} SetupBlips() end local function ShowNearestShopBlip() for k in pairs(Config.Blips) do Blips[k] = 0 end while true do local coords = GetEntityCoords(cache.ped) for shopType, blipConfig in pairs(Config.Blips) do local closest = 1000000 local closestCoords for _, shop in pairs(Config.Stores) do if shop.type == shopType and ShowBlip(blipConfig, shop) then local dist = #(coords - vector3(shop.coords.xyz)) if dist < closest then closest = dist closestCoords = shop.coords end end end if DoesBlipExist(Blips[shopType]) then RemoveBlip(Blips[shopType]) end if closestCoords then Blips[shopType] = CreateBlip(blipConfig, closestCoords) end end Wait(Config.NearestShopBlipUpdateDelay) end end if Config.ShowNearestShopOnly then CreateThread(ShowNearestShopBlip) end