-- LocalScript for Roblox Delta Mobile - Franco ESP -- UI Library: Rayfield (Mobile Optimized) -- Features: Advanced ESP (Box, Tracer, Name, Health, Distance), Player Tags (No Randomization), Update Tab -- Place in StarterPlayerScripts local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Camera = workspace.CurrentCamera local LocalPlayer = Players.LocalPlayer -- Load Rayfield UI local Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))() -- Create Window local Window = Rayfield:CreateWindow({ Name = "Franco ESP", LoadingTitle = "Franco ESP - Delta Mobile", LoadingSubtitle = "Premium ESP System", ConfigurationSaving = { Enabled = true, FolderName = "FrancoESPConfig", FileName = "Settings" }, KeySystem = false }) -- ESP Settings local ESP = { Enabled = false, Box = true, Tracer = true, Name = true, Health = true, Distance = true, TeamCheck = true, MaxDistance = 1500, Thickness = 1.8, Transparency = 0.75, TextSize = 14, Font = Drawing.Fonts.UI, Color = Color3.fromRGB(0, 255, 255), -- Default Cyan HealthLow = Color3.fromRGB(255, 50, 50), HealthHigh = Color3.fromRGB(50, 255, 50) } -- Player Tags (Fixed Roles - No Randomization) local TaggedPlayers = { ["Lefyoij"] = { Role = "Lead Developer", Color = Color3.fromRGB(255, 215, 0), -- Gold Tag = "DEV" }, ["IRSPOZ"] = { Role = "Security Analyst", Color = Color3.fromRGB(255, 50, 50), -- Red Tag = "SEC" }, ["Shyoppz"] = { Role = "UI Designer", Color = Color3.fromRGB(100, 255, 255), -- Light Cyan Tag = "UIX" }, ["GrindingTDS24H"] = { Role = "Playtester Pro", Color = Color3.fromRGB(50, 255, 50), -- Green Tag = "TST" }, ["ControlledMovesBot"] = { Role = "Automation Engineer", Color = Color3.fromRGB(180, 50, 255), -- Purple Tag = "BOT" } } -- ESP Storage local ESPObjects = {} -- Create ESP for Player local function CreateESP(player) if player == LocalPlayer or ESPObjects[player] then return end local Box = Drawing.new("Square") Box.Visible = false Box.Color = ESP.Color Box.Thickness = ESP.Thickness Box.Transparency = ESP.Transparency Box.Filled = false local Tracer = Drawing.new("Line") Tracer.Visible = false Tracer.Color = ESP.Color Tracer.Thickness = ESP.Thickness Tracer.Transparency = ESP.Transparency local NameLabel = Drawing.new("Text") NameLabel.Visible = false NameLabel.Color = Color3.fromRGB(255, 255, 255) NameLabel.Size = ESP.TextSize NameLabel.Center = true NameLabel.Outline = true NameLabel.Font = ESP.Font local HealthLabel = Drawing.new("Text") HealthLabel.Visible = false HealthLabel.Size = ESP.TextSize - 1 HealthLabel.Center = true HealthLabel.Outline = true HealthLabel.Font = ESP.Font local DistanceLabel = Drawing.new("Text") DistanceLabel.Visible = false DistanceLabel.Color = Color3.fromRGB(255, 255, 100) DistanceLabel.Size = ESP.TextSize - 2 DistanceLabel.Center = true DistanceLabel.Outline = true DistanceLabel.Font = ESP.Font local TagLabel = Drawing.new("Text") TagLabel.Visible = false TagLabel.Size = ESP.TextSize + 2 TagLabel.Center = true TagLabel.Outline = true TagLabel.Font = ESP.Font TagLabel.Color = Color3.fromRGB(255, 255, 255) ESPObjects[player] = { Box = Box, Tracer = Tracer, NameLabel = NameLabel, HealthLabel = HealthLabel, DistanceLabel = DistanceLabel, TagLabel = TagLabel } end -- Remove ESP local function RemoveESP(player) if ESPObjects[player] then for _, obj in pairs(ESPObjects[player]) do if obj and obj.Remove then obj:Remove() end end ESPObjects[player] = nil end end -- Update ESP Loop local function UpdateESP() if not ESP.Enabled then for _, objs in pairs(ESPObjects) do for _, obj in pairs(objs) do if obj and obj.Visible ~= nil then obj.Visible = false end end end return end for player, objs in pairs(ESPObjects) do local char = player.Character local hum = char and char:FindFirstChild("Humanoid") local root = char and char:FindFirstChild("HumanoidRootPart") local head = char and char:FindFirstChild("Head") if char and hum and root and head and hum.Health > 0 then local screenPos, onScreen = Camera:WorldToViewportPoint(root.Position) local distance = (LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")) and (LocalPlayer.Character.HumanoidRootPart.Position - root.Position).Magnitude or 0 local isTagged = TaggedPlayers[player.Name] local tagColor = isTagged and isTagged.Color or ESP.Color if onScreen and distance <= ESP.MaxDistance then if ESP.TeamCheck and player.Team == LocalPlayer.Team then for _, obj in pairs(objs) do obj.Visible = false end continue end -- Box if ESP.Box then local scale = 1000 / (Camera:WorldToViewportPoint(root.Position).Z + 500) local size = Vector2.new(4 * scale, 6 * scale) local pos = Vector2.new(screenPos.X - size.X/2, screenPos.Y - size.Y/2) objs.Box.Size = size objs.Box.Position = pos objs.Box.Color = tagColor objs.Box.Visible = true else objs.Box.Visible = false end -- Tracer if ESP.Tracer then objs.Tracer.From = Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y) objs.Tracer.To = Vector2.new(screenPos.X, screenPos.Y + (objs.Box.Size.Y/2)) objs.Tracer.Color = tagColor objs.Tracer.Visible = true else objs.Tracer.Visible = false end -- Name + Tag if ESP.Name then local display = player.DisplayName if isTagged then display = string.format("[%s] %s", isTagged.Tag, player.DisplayName) end objs.NameLabel.Text = display objs.NameLabel.Position = Vector2.new(screenPos.X, screenPos.Y - objs.Box.Size.Y/2 - 25) objs.NameLabel.Color = tagColor objs.NameLabel.Visible = true -- Role Tag (Small) if isTagged then objs.TagLabel.Text = isTagged.Role objs.TagLabel.Position = Vector2.new(screenPos.X, screenPos.Y - objs.Box.Size.Y/2 - 40) objs.TagLabel.Color = tagColor objs.TagLabel.Visible = true else objs.TagLabel.Visible = false end else objs.NameLabel.Visible = false objs.TagLabel.Visible = false end -- Health if ESP.Health then local hp = math.floor(hum.Health) local max = hum.MaxHealth local pct = hp / max local healthCol = ESP.HealthLow:lerp(ESP.HealthHigh, pct) objs.HealthLabel.Text = string.format("%d%%", math.floor(pct * 100)) objs.HealthLabel.Position = Vector2.new(screenPos.X, screenPos.Y + objs.Box.Size.Y/2 + 5) objs.HealthLabel.Color = healthCol objs.HealthLabel.Visible = true else objs.HealthLabel.Visible = false end -- Distance if ESP.Distance then objs.DistanceLabel.Text = string.format("%.0f studs", distance) objs.DistanceLabel.Position = Vector2.new(screenPos.X, screenPos.Y + objs.Box.Size.Y/2 + 20) objs.DistanceLabel.Visible = true else objs.DistanceLabel.Visible = false end else for _, obj in pairs(objs) do obj.Visible = false end end else for _, obj in pairs(objs) do obj.Visible = false end end end end -- Player Handling Players.PlayerAdded:Connect(function(plr) plr.CharacterAdded:Connect(function() task.wait(1.5) CreateESP(plr) end) end) Players.PlayerRemoving:Connect(RemoveESP) for _, plr in ipairs(Players:GetPlayers()) do if plr ~= LocalPlayer and plr.Character then task.spawn(function() task.wait(1) CreateESP(plr) end) end end RunService.RenderStepped:Connect(UpdateESP) -- === UI TABS === -- ESP Tab local ESPTab = Window:CreateTab("ESP Controls", 4483362458) ESPTab:CreateToggle({ Name = "Enable Franco ESP", CurrentValue = ESP.Enabled, Callback = function(v) ESP.Enabled = v end }) ESPTab:CreateSection("Visual Options") ESPTab:CreateToggle({ Name = "Box", CurrentValue = ESP.Box, Callback = function(v) ESP.Box = v end }) ESPTab:CreateToggle({ Name = "Tracer", CurrentValue = ESP.Tracer, Callback = function(v) ESP.Tracer = v end }) ESPTab:CreateToggle({ Name = "Name", CurrentValue = ESP.Name, Callback = function(v) ESP.Name = v end }) ESPTab:CreateToggle({ Name = "Health %", CurrentValue = ESP.Health, Callback = function(v) ESP.Health = v end }) ESPTab:CreateToggle({ Name = "Distance", CurrentValue = ESP.Distance, Callback = function(v) ESP.Distance = v end }) ESPTab:CreateToggle({ Name = "Team Check", CurrentValue = ESP.TeamCheck, Callback = function(v) ESP.TeamCheck = v end }) ESPTab:CreateSlider({ Name = "Max Distance", Range = {100, 5000}, Increment = 100, CurrentValue = ESP.MaxDistance, Callback = function(v) ESP.MaxDistance = v end }) ESPTab:CreateColorPicker({ Name = "Default ESP Color", Color = ESP.Color, Callback = function(c) ESP.Color = c end }) -- Player Tags Tab local TagsTab = Window:CreateTab("Player Tags", 4483367579) TagsTab:CreateSection("Verified Players") for name, data in pairs(TaggedPlayers) do TagsTab:CreateLabel(string.format("✪ %s | %s | %s", name, data.Tag, data.Role)) end TagsTab:CreateParagraph({ Title = "About Tags", Content = "These users have verified roles in the Franco ESP system. Tags are permanent and updated manually." }) -- Update Tab local UpdateTab = Window:CreateTab("Update Log", 4484672509) UpdateTab:CreateSection("Franco ESP - Monthly Updates") UpdateTab:CreateParagraph({ Title = "Last Update: November 2025", Content = "• Improved mobile performance\n• Fixed ESP flickering on low-end devices\n• Enhanced tag system with role display\n• Added health percentage\n• Optimized drawing system" }) UpdateTab:CreateParagraph({ Title = "Next Update: December 2025", Content = "Planned features:\n• Aimbot (Silent & Visual)\n• Player Chams\n• Anti-AFK\n• Config Cloud Sync" }) UpdateTab:CreateLabel("Update every Month") UpdateTab:CreateLabel("Developed for Delta Mobile Users") UpdateTab:CreateButton({ Name = "Check for Update", Callback = function() Rayfield:Notify({ Title = "Update Check", Content = "You're on the latest version! (Nov 2025)", Duration = 4 }) end }) -- Mobile Notice if UserInputService.TouchEnabled then Rayfield:Notify({ Title = "Franco ESP Mobile", Content = "Optimized for Delta Executor. Tap UI carefully.", Duration = 6 }) end -- Load Notification Rayfield:Notify({ Title = "Franco ESP Loaded", Content = "Premium ESP System Active. Use wisely.", Duration = 7 })