local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local SoundService = game:GetService("SoundService") local lp = Players.LocalPlayer local playerGui = lp:WaitForChild("PlayerGui") if playerGui:FindFirstChild("CarESP_GUI") then playerGui.CarESP_GUI:Destroy() end local screenGui = Instance.new("ScreenGui") screenGui.Name = "CarESP_GUI" screenGui.ResetOnSpawn = false screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling screenGui.IgnoreGuiInset = true screenGui.Parent = playerGui -- ══════════════════════════════════════════ -- THEME -- ══════════════════════════════════════════ local C = { bg0 = Color3.fromRGB(8,8,14), bg1 = Color3.fromRGB(14,14,22), bg2 = Color3.fromRGB(22,20,36), accent = Color3.fromRGB(255,180,0), accent2 = Color3.fromRGB(200,130,255), green = Color3.fromRGB(0,220,100), blue = Color3.fromRGB(80,180,255), red = Color3.fromRGB(255,60,60), gold = Color3.fromRGB(255,215,0), text = Color3.fromRGB(230,230,240), subtext = Color3.fromRGB(140,140,160), white = Color3.fromRGB(255,255,255), plateGreen = Color3.fromRGB(0,130,62), plateDark = Color3.fromRGB(10,30,10), plateGold = Color3.fromRGB(220,180,0), purple = Color3.fromRGB(140,60,255), orange = Color3.fromRGB(255,120,0), } local function glassFrame(parent, size, pos, alpha, radius) local f = Instance.new("Frame", parent) f.Size = size f.Position = pos f.BackgroundColor3 = C.bg1 f.BackgroundTransparency = alpha or 0.82 f.BorderSizePixel = 0 Instance.new("UICorner", f).CornerRadius = UDim.new(0, radius or 14) return f end local function makeStroke(parent, color, thickness, transparency) local s = Instance.new("UIStroke", parent) s.Color = color or C.accent s.Thickness = thickness or 1.5 s.Transparency = transparency or 0 return s end local function makeLabel(parent, text, color, font, size, xa, ya) local l = Instance.new("TextLabel", parent) l.Text = text l.TextColor3 = color or C.text l.Font = font or Enum.Font.GothamBold l.TextSize = size or 14 l.TextScaled = not size l.BackgroundTransparency = 1 l.BorderSizePixel = 0 l.TextXAlignment = xa or Enum.TextXAlignment.Left l.TextYAlignment = ya or Enum.TextYAlignment.Center return l end local function makeButton(parent, text, bg, tc, radius) local b = Instance.new("TextButton", parent) b.Text = text b.BackgroundColor3 = bg or C.bg2 b.TextColor3 = tc or C.white b.Font = Enum.Font.GothamBold b.TextScaled = true b.BorderSizePixel = 0 b.AutoButtonColor = false Instance.new("UICorner", b).CornerRadius = UDim.new(0, radius or 8) return b end local function addHover(btn, n, h) btn.MouseEnter:Connect(function() btn.BackgroundColor3 = h end) btn.MouseLeave:Connect(function() btn.BackgroundColor3 = n end) end -- ══════════════════════════════════════════ -- STATE -- ══════════════════════════════════════════ local lang = "EN" local espEnabled = true local scanning = false local stopRequested = false local minimized = false local sortMode = "score" local persistedData = {} -- Feature states local alertPlate = "" -- plate string to watch for local alertTriggered = {} -- track which plates already alerted this session local autoBuyEnabled = false -- auto-buy toggle local autoBuyThreshold = 80 -- score needed to trigger auto-buy local autoRescanEnabled = false local autoRescanMins = 5 local autoRescanTimer = 0 -- counts up in heartbeat local filters = { maxPrice=nil, maxMiles=nil, dealOnly=false, dealThreshold=70 } local PRICE_GREAT = 80000 local MILES_BAD = 150000 local T_TABLE = { EN = { title="🚗 Car Sales 2 ESP v5", scan="▶ SCAN ALL CARS", rescan="🔄 RESCAN", scanning="Scanning", done="Done!", scanned="scanned", cars="cars", plate="Plate", noOwner="No Owner", pressToScan="Press SCAN to begin", stop="⏹ STOP", bestDeal="🏆 BEST DEAL", dealFound="deals found!", copied="✓ Copied!", justNow="just now", minsAgo="m ago", alertSection="🔔 PLATE ALERT", alertPlaceholder="e.g. BGS 183", autoBuySection="🎯 AUTO-BUY", autoRescanSection="⏰ AUTO-RESCAN", rescanEvery="Rescan every (mins):", minScore="Min score to buy:", autoBuyOff="AUTO-BUY: OFF", autoBuyOn="AUTO-BUY: ON", autoRescanOff="RESCAN: OFF", autoRescanOn="RESCAN: ON", alertHit="🔔 ALERT: Plate found!", autoBought="🎯 Auto-bought!", nextRescan="Next rescan in:", }, AR = { title="🚗 ESP السيارات v5", scan="▶ فحص الكل", rescan="🔄 إعادة", scanning="جاري الفحص", done="تم!", scanned="تم فحصها", cars="سيارات", plate="اللوحة", noOwner="بدون مالك", pressToScan="اضغط فحص للبدء", stop="⏹ إيقاف", bestDeal="🏆 أفضل صفقة", dealFound="صفقات!", copied="✓ نسخ!", justNow="الآن", minsAgo="د", alertSection="🔔 تنبيه لوحة", alertPlaceholder="مثال: BGS 183", autoBuySection="🎯 شراء تلقائي", autoRescanSection="⏰ إعادة فحص تلقائي", rescanEvery="إعادة كل (دقائق):", minScore="أدنى نقاط:", autoBuyOff="شراء: إيقاف", autoBuyOn="شراء: تشغيل", autoRescanOff="فحص: إيقاف", autoRescanOn="فحص: تشغيل", alertHit="🔔 تنبيه: تم العثور على اللوحة!", autoBought="🎯 تم الشراء!", nextRescan="الفحص التالي خلال:", } } local function T(k) return T_TABLE[lang][k] or k end -- ══════════════════════════════════════════ -- HELPERS -- ══════════════════════════════════════════ local function dealScore(price, mile) if not price or not mile then return nil end local p = tonumber(tostring(price):gsub("[^%d]","")) or 0 local m = tonumber(tostring(mile):gsub("[^%d]","")) or 0 return math.floor(math.clamp(1-(m/MILES_BAD),0,1)*60 + math.clamp(p/PRICE_GREAT,0,1)*40) end local function getDealColor(score) if score >= 85 then return C.gold elseif score >= 70 then return C.green elseif score >= 50 then return C.blue else return C.subtext end end local function fmt(n) if not n then return "---" end local clean = tostring(n):gsub("[^%d]","") if clean=="" then return "---" end local s = tostring(math.floor(tonumber(clean) or 0)) return s:reverse():gsub("(%d%d%d)","%1,"):reverse():gsub("^,","") end local function timeSince(ts) if not ts then return "---" end local diff = math.floor(os.clock()-ts) if diff < 60 then return T("justNow") else return math.floor(diff/60)..T("minsAgo") end end local function passesFilter(data) local price = tonumber(tostring(data.price or ""):gsub("[^%d]","")) local mile = tonumber(tostring(data.mile or ""):gsub("[^%d]","")) if filters.maxPrice and price and price > filters.maxPrice then return false end if filters.maxMiles and mile and mile > filters.maxMiles then return false end if filters.dealOnly then local sc = dealScore(data.price,data.mile) if not sc or sc < filters.dealThreshold then return false end end return true end -- ══════════════════════════════════════════ -- SAUDI PLATE BUILDER -- ══════════════════════════════════════════ local function parsePlate(plateData) local en = plateData and plateData.en or "???" local ar = plateData and plateData.ar or "" local letters,numbers = en:match("^(%a+)%s*(%d+)$") if not letters then letters=en numbers="" end local arLetters = ar:match("^(.-)%s*%d") or ar return letters,numbers,arLetters end local function buildSaudiPlate(parent, plateData, isBig) for _,c in ipairs(parent:GetChildren()) do c:Destroy() end local letters,numbers,arLetters = parsePlate(plateData) local bg = Instance.new("Frame",parent) bg.Size=UDim2.new(1,0,1,0) bg.BackgroundColor3=Color3.fromRGB(255,255,255) bg.BorderSizePixel=0 Instance.new("UICorner",bg).CornerRadius=UDim.new(0,isBig and 7 or 4) local pb=Instance.new("UIStroke",bg) pb.Color=Color3.fromRGB(200,200,200) pb.Thickness=1 local stripe=Instance.new("Frame",bg) stripe.Size=UDim2.new(0.18,0,1,0) stripe.BackgroundColor3=C.plateGreen stripe.BorderSizePixel=0 Instance.new("UICorner",stripe).CornerRadius=UDim.new(0,isBig and 7 or 4) local sf=Instance.new("Frame",stripe) sf.Size=UDim2.new(0.5,0,1,0) sf.Position=UDim2.new(0.5,0,0,0) sf.BackgroundColor3=C.plateGreen sf.BorderSizePixel=0 local ksaL=Instance.new("TextLabel",stripe) ksaL.Size=UDim2.new(1,0,0.45,0) ksaL.Position=UDim2.new(0,0,0.04,0) ksaL.BackgroundTransparency=1 ksaL.TextColor3=C.white ksaL.TextScaled=true ksaL.Font=Enum.Font.GothamBold ksaL.Text="KSA" local iconL=Instance.new("TextLabel",stripe) iconL.Size=UDim2.new(1,0,0.4,0) iconL.Position=UDim2.new(0,0,0.52,0) iconL.BackgroundTransparency=1 iconL.TextColor3=C.plateGold iconL.TextScaled=true iconL.Font=Enum.Font.GothamBold iconL.Text="🌴" local content=Instance.new("Frame",bg) content.Size=UDim2.new(0.80,0,1,0) content.Position=UDim2.new(0.20,0,0,0) content.BackgroundTransparency=1 content.BorderSizePixel=0 local arL=Instance.new("TextLabel",content) arL.Size=UDim2.new(1,-4,0.45,0) arL.Position=UDim2.new(0,2,0,0) arL.BackgroundTransparency=1 arL.TextColor3=C.plateDark arL.TextScaled=true arL.Font=Enum.Font.GothamBold arL.TextXAlignment=Enum.TextXAlignment.Right arL.Text=(arLetters~="" and arLetters~="???") and arLetters or letters local numL=Instance.new("TextLabel",content) numL.Size=UDim2.new(0.55,-2,0.48,0) numL.Position=UDim2.new(0,2,0.52,0) numL.BackgroundTransparency=1 numL.TextColor3=C.plateDark numL.TextScaled=true numL.Font=Enum.Font.GothamBold numL.TextXAlignment=Enum.TextXAlignment.Left numL.Text=numbers local enL=Instance.new("TextLabel",content) enL.Size=UDim2.new(0.43,-2,0.48,0) enL.Position=UDim2.new(0.57,0,0.52,0) enL.BackgroundTransparency=1 enL.TextColor3=C.plateDark enL.TextScaled=true enL.Font=Enum.Font.GothamBold enL.TextXAlignment=Enum.TextXAlignment.Right enL.Text=letters end -- ══════════════════════════════════════════ -- ALERTS & SOUNDS -- ══════════════════════════════════════════ local function playSound(id, vol) local snd=Instance.new("Sound",SoundService) snd.SoundId="rbxassetid://"..tostring(id) snd.Volume=vol or 0.6 snd:Play() game:GetService("Debris"):AddItem(snd,4) end local function flashScreen(color, times, alpha) local flash=Instance.new("Frame",screenGui) flash.Size=UDim2.new(1,0,1,0) flash.BackgroundColor3=color flash.BackgroundTransparency=alpha or 0.5 flash.BorderSizePixel=0 flash.ZIndex=100 for i=1,times or 4 do flash.BackgroundTransparency=(alpha or 0.5)+(i*0.12) task.wait(0.07) end flash:Destroy() end local function playDealAlert() task.spawn(function() flashScreen(C.gold,4,0.5) end) playSound(4612359885, 0.6) end -- 🔔 Plate alert — fires when a specific plate text is detected local function checkPlateAlert(name, data) if alertPlate=="" then return end if alertTriggered[name] then return end local en = data.plate and data.plate.en:lower() or "" local ar = data.plate and data.plate.ar:lower() or "" local query = alertPlate:lower() if en:find(query,1,true) or ar:find(query,1,true) then alertTriggered[name]=true task.spawn(function() flashScreen(C.accent2,6,0.35) playSound(4612359885,0.8) playSound(4612359885,0.8) end) -- Toast notification local toast=Instance.new("Frame",screenGui) toast.Size=UDim2.new(0,320,0,60) toast.BackgroundColor3=Color3.fromRGB(60,0,120) toast.BackgroundTransparency=0.1 toast.BorderSizePixel=0 toast.ZIndex=200 toast.Position=UDim2.new(0.5,-160,0,-70) Instance.new("UICorner",toast).CornerRadius=UDim.new(0,12) makeStroke(toast,C.accent2,2) local tl=makeLabel(toast,T("alertHit").." → "..( data.plate and data.plate.en or ""),C.white,Enum.Font.GothamBold,nil,Enum.TextXAlignment.Center) tl.Size=UDim2.new(1,0,0.5,0) tl.Position=UDim2.new(0,0,0,4) tl.ZIndex=201 local tl2=makeLabel(toast,"Score: "..(dealScore(data.price,data.mile) and tostring(dealScore(data.price,data.mile)) or "?").."/100 | "..( data.price and ("$"..fmt(data.price)) or "?"),C.accent2,Enum.Font.Gotham,nil,Enum.TextXAlignment.Center) tl2.Size=UDim2.new(1,0,0.5,0) tl2.Position=UDim2.new(0,0,0.5,0) tl2.ZIndex=201 -- Slide in local goal=UDim2.new(0.5,-160,0,10) toast.Position=UDim2.new(0.5,-160,0,-70) local t0=tick() local conn RunService.Heartbeat:Connect(function() local p=math.min((tick()-t0)/0.3,1) toast.Position=UDim2.new(0.5,-160,0,-70+(80*p)) if p>=1 then conn:Disconnect() end end) task.wait(4) toast:Destroy() end end -- 🎯 Auto-buy a car (teleport + fire buy prompt) local function tryAutoBuy(car, slot) if not autoBuyEnabled then return end local data = require ~= nil and nil or nil -- placeholder reset -- find data for this car local cdata for _,d in pairs(require ~= nil and {} or {}) do end -- unused -- direct lookup for name,d in pairs(carData or {}) do if d.car==car then cdata=d break end end if not cdata then return end local score=dealScore(cdata.price,cdata.mile) if not score or score=3 then price=t end end if not mile and (n:find("mile") or n:find("odometer") or n:find("km")) then local t=lbl.Text:gsub("[^%d]","") if t~="" then mile=t end end end end end end local saleUI=playerGui:FindFirstChild("SaleUI") if saleUI and saleUI.Enabled and not mile then local ml=saleUI:FindFirstChild("Mileage",true) if ml and ml:IsA("TextLabel") then local t=ml.Text:gsub("[^%d]","") if t~="" then mile=t end end end local saleUI2=playerGui:FindFirstChild("SaleUI2") if saleUI2 and saleUI2.Enabled then if not price then local sp=saleUI2:FindFirstChild("SellPrice",true) if sp and sp:IsA("TextLabel") then local t=sp.Text:gsub("[^%d]","") if t~="" then price=t end end end if not mile then local ml2=saleUI2:FindFirstChild("Mileage",true) if ml2 and ml2:IsA("TextLabel") then local t=ml2.Text:gsub("[^%d]","") if t~="" then mile=t end end end end return price,mile end -- ══════════════════════════════════════════ -- SETUP CARS -- ══════════════════════════════════════════ local slots=workspace:WaitForChild("Slots",10) local slotList={} if slots then for _,slot in ipairs(slots:GetChildren()) do table.insert(slotList,slot) for _,car in ipairs(slot:GetChildren()) do if car:IsA("Model") and car.Name:match("Car$") then local pd=getPlate(car) local saved=persistedData[car.Name] makeBillboard(car,pd) makeEntry(car.Name,pd) carData[car.Name]={car=car,price=saved and saved.price,mile=saved and saved.mile,plate=pd,slot=slot,timestamp=saved and saved.timestamp} end end slot.ChildAdded:Connect(function(car) task.wait(0.5) if car:IsA("Model") and car.Name:match("Car$") then local pd=getPlate(car) local saved=persistedData[car.Name] makeBillboard(car,pd) makeEntry(car.Name,pd) carData[car.Name]={car=car,price=saved and saved.price,mile=saved and saved.mile,plate=pd,slot=slot,timestamp=saved and saved.timestamp} end end) end end local function applyEspVisibility() for _,data in pairs(carData) do local car=data.car if car and car.Parent then local root=car.PrimaryPart or car:FindFirstChildWhichIsA("BasePart") if root then local tag=root:FindFirstChild("ESP_Tag") if tag then tag.Enabled=espEnabled end end end end end espToggleBtn.MouseButton1Click:Connect(function() espEnabled=not espEnabled espToggleBtn.Text=espEnabled and "ESP✓" or "ESP✗" espToggleBtn.BackgroundColor3=espEnabled and Color3.fromRGB(0,150,60) or Color3.fromRGB(120,30,30) applyEspVisibility() end) local function updateLanguage() titleLabel.Text=T("title") scanBtn.Text=T("scan") langBtn.Text=lang=="EN" and "AR" or "EN" alertBox.PlaceholderText=T("alertPlaceholder") for name,data in pairs(carData) do if data.plate then local entry=scroll:FindFirstChild(name) if entry then local pc=entry:FindFirstChild("PlateContainer") if pc then buildSaudiPlate(pc,data.plate,false) end end local car=data.car if car and car.Parent then local root=car.PrimaryPart or car:FindFirstChildWhichIsA("BasePart") if root then local tag=root:FindFirstChild("ESP_Tag") if tag then local ph=tag:FindFirstChild("PlateHolder",true) if ph then buildSaudiPlate(ph,data.plate,true) end end end end end end end langBtn.MouseButton1Click:Connect(function() lang=lang=="EN" and "AR" or "EN" updateLanguage() end) local function getClosestCar() local char=lp.Character if not char or not char:FindFirstChild("HumanoidRootPart") then return nil end local hrp=char.HumanoidRootPart local closest,closestDist=nil,25 for name,data in pairs(carData) do local car=data.car if car and car.Parent then local root=car.PrimaryPart or car:FindFirstChildWhichIsA("BasePart") if root then local dist=(hrp.Position-root.Position).Magnitude if dist=SCAN_WAIT or stopRequested if price or mile then scanned=scanned+1 if price then carData[car.Name].price=price persistedData[car.Name]=persistedData[car.Name] or {} persistedData[car.Name].price=price end if mile then carData[car.Name].mile=mile persistedData[car.Name]=persistedData[car.Name] or {} persistedData[car.Name].mile=mile end carData[car.Name].timestamp=os.clock() if persistedData[car.Name] then persistedData[car.Name].timestamp=os.clock() end if entry then entry.BackgroundColor3=Color3.fromRGB(6,20,8) local es=entry:FindFirstChild("EntryStroke") if es then es.Color=C.green es.Thickness=1.5 end end -- 🔔 Plate alert check checkPlateAlert(car.Name,carData[car.Name]) -- 🎯 Auto-buy check if autoBuyEnabled then task.spawn(function() tryAutoBuy(car,slot) end) end else if entry then entry.BackgroundColor3=Color3.fromRGB(22,6,6) local es=entry:FindFirstChild("EntryStroke") if es then es.Color=C.red end end end closeAllSaleUIs() task.wait(0.5) end pcall(function() hrp.CFrame=origPos end) scanning=false stopRequested=false stopBtn.Visible=false scanGrad.Color=ColorSequence.new({ ColorSequenceKeypoint.new(0,Color3.fromRGB(0,210,80)), ColorSequenceKeypoint.new(1,Color3.fromRGB(0,140,50)) }) scanBtn.BackgroundColor3=Color3.fromRGB(0,170,60) scanBtn.Text=T("rescan") local dealCount=0 local bestScore,bestName=0,nil for name,data in pairs(carData) do local sc=dealScore(data.price,data.mile) if sc and sc>=filters.dealThreshold then dealCount=dealCount+1 end if sc and sc>bestScore then bestScore=sc bestName=name end end statsLabel.Text=T("done").." "..scanned.."/"..total.." "..T("scanned") if dealCount>0 then dealBadge.Visible=true dealBadgeLbl.Text="🔥 "..dealCount.." "..T("dealFound") if bestScore>=80 then playDealAlert() end end if bestName and bestScore>0 then bestDealCarName=bestName buildSaudiPlate(bannerPlateHolder,carData[bestName].plate,false) bannerScore.Text="Score: "..bestScore.."/100" bannerScore.TextColor3=getDealColor(bestScore) bestDealBanner.Visible=true end -- Reset auto-rescan timer autoRescanTimer=0 end scanBtn.MouseButton1Click:Connect(function() runScan(false) end) -- ══════════════════════════════════════════ -- HEARTBEAT -- ══════════════════════════════════════════ local hbDelta=0 RunService.Heartbeat:Connect(function(dt) -- Auto-rescan timer if autoRescanEnabled and not scanning then autoRescanTimer=autoRescanTimer+dt local totalSecs=autoRescanMins*60 local remaining=math.max(0,math.ceil(totalSecs-autoRescanTimer)) local mins=math.floor(remaining/60) local secs=remaining%60 arCountdown.Text=T("nextRescan").." "..string.format("%d:%02d",mins,secs) if autoRescanTimer>=totalSecs then autoRescanTimer=0 task.spawn(function() runScan(true) end) end else if not autoRescanEnabled then arCountdown.Text="" end end -- Passive data grab local price,mile=readSaleData() if price or mile then local closest=getClosestCar() if closest and carData[closest] then if price then carData[closest].price=price persistedData[closest]=persistedData[closest] or {} persistedData[closest].price=price end if mile then carData[closest].mile=mile persistedData[closest]=persistedData[closest] or {} persistedData[closest].mile=mile end if not carData[closest].timestamp then carData[closest].timestamp=os.clock() if persistedData[closest] then persistedData[closest].timestamp=os.clock() end end checkPlateAlert(closest,carData[closest]) end end local count,scannedCount=0,0 for name,data in pairs(carData) do count=count+1 if data.price then scannedCount=scannedCount+1 end if data.car and data.car.Parent then local newPlate=getPlate(data.car) if newPlate.en~=(data.plate and data.plate.en) then data.plate=newPlate local entry=scroll:FindFirstChild(name) if entry then local pc=entry:FindFirstChild("PlateContainer") if pc then buildSaudiPlate(pc,newPlate,false) end end local root=data.car.PrimaryPart or data.car:FindFirstChildWhichIsA("BasePart") if root then local tag=root:FindFirstChild("ESP_Tag") if tag then local ph=tag:FindFirstChild("PlateHolder",true) if ph then buildSaudiPlate(ph,newPlate,true) end end end end end local score=dealScore(data.price,data.mile) local isDeal=score and score>=filters.dealThreshold local visible=passesFilter(data) local order if sortMode=="score" then order=score and (1000-score) or 2000 elseif sortMode=="name" then local en=data.plate and data.plate.en or "zzz" order=0 for i=1,math.min(#en,4) do order=order+string.byte(en,i)*(256^(4-i)) end elseif sortMode=="price" then local p=tonumber(tostring(data.price or ""):gsub("[^%d]","")) or 0 order=10000000-p end local entry=scroll:FindFirstChild(name) if entry then entry.Visible=visible entry.LayoutOrder=(order or 2000)+1 local dL=entry:FindFirstChild("Deal") local es=entry:FindFirstChild("EntryStroke") if dL then if score then dL.Text=tostring(score) dL.TextColor3=getDealColor(score) else dL.Text="-" dL.TextColor3=C.subtext end end if not scanning and es then if isDeal and score>=85 then es.Color=C.gold es.Thickness=2 entry.BackgroundColor3=Color3.fromRGB(28,20,4) elseif isDeal then es.Color=C.green es.Thickness=1.5 entry.BackgroundColor3=Color3.fromRGB(6,20,8) end end end local car=data.car if car and car.Parent then local root=car.PrimaryPart or car:FindFirstChildWhichIsA("BasePart") if root then local tag=root:FindFirstChild("ESP_Tag") if tag then tag.Enabled=espEnabled local p=tag:FindFirstChild("P",true) local m=tag:FindFirstChild("M",true) local o=tag:FindFirstChild("O",true) local dl=tag:FindFirstChild("DealL",true) local bs=tag:FindFirstChild("BillStroke",true) if p then p.Text=data.price and ("💰$"..fmt(data.price)) or "💰---" end if m then m.Text=data.mile and ("🛣️"..fmt(data.mile)) or "🛣️---" end if o then local owner=car:GetAttribute("Owner") o.Text="👤 "..(owner and owner~="" and owner or T("noOwner")) end if dl then if score then dl.Text=(score>=85 and "🔥 DEAL " or score>=70 and "⭐ " or "").."Score: "..score.."/100" dl.TextColor3=getDealColor(score) else dl.Text="" end end if bs then if isDeal and score>=85 then bs.Color=C.gold bs.Thickness=2.5 elseif isDeal then bs.Color=C.green bs.Thickness=2 else bs.Color=C.accent bs.Thickness=1.5 end end end end end end if popup.Visible and popupCurrentCar then local d=popupCurrentCar local score=dealScore(d.price,d.mile) popPrice.Text="💰 Price: "..(d.price and ("$"..fmt(d.price)) or "---") popMiles.Text="🛣️ Miles: "..(d.mile and fmt(d.mile) or "---") if score then popScore.Text="⭐ Deal: "..score.."/100" popScore.TextColor3=getDealColor(score) else popScore.Text="⭐ Deal: ---" popScore.TextColor3=C.subtext end local owner=d.car and d.car:GetAttribute("Owner") popOwner.Text="👤 Owner: "..(owner and owner~="" and owner or T("noOwner")) popTime.Text ="🕐 Scanned: "..timeSince(d.timestamp) end if not scanning then statsLabel.Text="🚗 "..count.." "..T("cars").." | ✅ "..scannedCount.." "..T("scanned") end end) print("✅ ESP v5 Loaded! — Plate Alert + Auto-Buy + Auto-Rescan active")