-- Export a top-down plan of the PA area as JSON-ish text so it can be -- plotted offline, and measure the median-barrier opening properly by -- looking for gaps along the mainline centreline near each junction. local ws = game:GetService("Workspace") local map = ws:FindFirstChild("Map") local PA = Vector3.new(-4124, 46, -7470) local RANGE = 2600 -- studs around the PA to export local buckets = { EntryTrunk = {}, EntryNear = {}, ExitTrunk = {}, ExitNear = {}, Road = {}, Barrier = {}, Ring = {}, } for _, d in ipairs(map:GetDescendants()) do if d:IsA("BasePart") then local p = d.Position if math.abs(p.X - PA.X) < RANGE and math.abs(p.Z - PA.Z) < RANGE then local nm = d.Name local key if nm:sub(1, 18) == "PAEntryRampTrunk_" or nm:sub(1, 17) == "PAEntryRampTrunk_" then key = "EntryTrunk" elseif nm:sub(1, 16) == "PAEntryRampNear_" then key = "EntryNear" elseif nm:sub(1, 16) == "PAExitRampTrunk_" then key = "ExitTrunk" elseif nm:sub(1, 15) == "PAExitRampNear_" then key = "ExitNear" elseif nm:gsub("_?%d+$", "") == "Road" then key = "Road" elseif nm:gsub("_?%d+$", "") == "Barrier" then key = "Barrier" elseif nm:find("PARing") then key = "Ring" end if key then table.insert(buckets[key], ("%d,%d,%d"):format(math.floor(p.X), math.floor(p.Z), math.floor(p.Y))) end end end end local out = {} for k, v in pairs(buckets) do table.insert(out, "#" .. k .. "#" .. table.concat(v, ";")) end return table.concat(out, "\n")