-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --[[rscripts:analytics:start]] -- Script analytics (enabled by the creator on rscripts.net). -- Runs in its own thread and cannot affect the script below. task.spawn(function() pcall(function() loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6af26926e77af1a4c8ff4fce"))() end) end) --[[rscripts:analytics:end]] local AIRFLOW_URL = "https://raw.githubusercontent.com/kni-fe/free-products/main/AirFlowLibrary.luau" local success, Library = pcall(function() local source = game:HttpGet(AIRFLOW_URL) return loadstring(source)() end) if not success or type(Library) ~= "table" or type(Library.CreateWindow) ~= "function" then error("[AirFlow Template] Failed to load library: " .. tostring(Library)) end getgenv().AirFlow = Library getgenv().Library = Library local plrs = game:GetService("Players") local rs = game:GetService("RunService") local plr = plrs.LocalPlayer local mouse = plr:GetMouse() local camera = workspace.CurrentCamera local worldToViewportPoint = camera.worldToViewportPoint local Drawingnew = Drawing.new local Color3fromRGB = Color3.fromRGB local Vector3new = Vector3.new local Vector2new = Vector2.new local mathfloor = math.floor local mathceil = math.ceil local esp = { players = {}, objects = {}, enabled = true, teamcheck = false, fontsize = 13, font = 2, maxdist = 0, settings = { name = {enabled = true, outline = true, displaynames = true, color = Color3fromRGB(255, 255, 255)}, box = {enabled = true, outline = true, color = Color3fromRGB(255, 255, 255)}, filledbox = {enabled = true, outline = true, transparency = 0.5, color = Color3fromRGB(255, 255, 255)}, healthbar = {enabled = true, size = 3, outline = true}, healthtext = {enabled = true, outline = true, color = Color3fromRGB(255, 255, 255)}, distance = {enabled = true, outline = true, color = Color3fromRGB(255, 255, 255)}, viewangle = {enabled = true, size = 10, color = Color3fromRGB(255, 255, 255)}, weapon = {enabled = true, outline = true, color = Color3fromRGB(255, 255, 255)} }, settings_chams = { enabled = false, teamcheck = false, outline = false, fill_color = Color3fromRGB(255, 255, 255), outline_color = Color3fromRGB(0, 0, 0), fill_transparency = 0, outline_transparency = 0, autocolor = false, visible_Color = Color3fromRGB(0, 255, 0), invisible_Color = Color3fromRGB(255, 0, 0), } } esp.NewDrawing = function(type, properties) local newDrawing = Drawingnew(type) for i,v in next, properties or {} do newDrawing[i] = v end return newDrawing end esp.NewCham = function(properties) local newCham = Instance.new("Highlight", game.CoreGui) for i,v in next, properties or {} do newCham[i] = v end return newCham end esp.WallCheck = function(v) local ray = Ray.new(camera.CFrame.p, (v.Position - camera.CFrame.p).Unit * 300) local part, position = game:GetService("Workspace"):FindPartOnRayWithIgnoreList(ray, {plr.Character, camera}, false, true) if part then local hum = part.Parent:FindFirstChildOfClass("Humanoid") if not hum then hum = part.Parent.Parent:FindFirstChildOfClass("Humanoid") end if hum and v and hum.Parent == v.Parent then local Vector, Visible = camera:WorldToScreenPoint(v.Position) if Visible then return true end end end end esp.TeamCheck = function(v) if plr.TeamColor == v.TeamColor then return false end return true end esp.NewPlayer = function(v) esp.players[v] = { name = esp.NewDrawing("Text", {Color = Color3fromRGB(255, 255, 255), Outline = true, Center = true, Size = 13, Font = 2}), filledbox = esp.NewDrawing("Square", {Color = Color3fromRGB(255, 255, 255), Thickness = 1, Filled = true}), boxOutline = esp.NewDrawing("Square", {Color = Color3fromRGB(0, 0, 0), Thickness = 3}), box = esp.NewDrawing("Square", {Color = Color3fromRGB(255, 255, 255), Thickness = 1}), healthBarOutline = esp.NewDrawing("Line", {Color = Color3fromRGB(0, 0, 0), Thickness = 3}), healthBar = esp.NewDrawing("Line", {Color = Color3fromRGB(255, 255, 255), Thickness = 1}), healthText = esp.NewDrawing("Text", {Color = Color3fromRGB(255, 255, 255), Outline = true, Center = true, Size = 13, Font = 2}), distance = esp.NewDrawing("Text", {Color = Color3fromRGB(255, 255, 255), Outline = true, Center = true, Size = 13, Font = 2}), viewAngle = esp.NewDrawing("Line", {Color = Color3fromRGB(255, 255, 255), Thickness = 1}), weapon = esp.NewDrawing("Text", {Color = Color3fromRGB(255, 255, 255), Outline = true, Center = true, Size = 13, Font = 2}), cham = esp.NewCham({FillColor = esp.settings_chams.fill_color, OutlineColor = esp.settings_chams.outline_color, FillTransparency = esp.settings_chams.fill_transparency, OutlineTransparency = esp.settings_chams.outline_transparency}) } end for _,v in ipairs(plrs:GetPlayers()) do if v ~= plr then esp.NewPlayer(v) end end plrs.ChildAdded:Connect(function(v) esp.NewPlayer(v) end) plrs.PlayerRemoving:Connect(function(v) for i2,v2 in pairs(esp.players[v]) do pcall(function() v2:Remove() v2:Destroy() end) end esp.players[v] = nil end) local ESP_Loop ESP_Loop = rs.RenderStepped:Connect(function() for i,v in pairs(esp.players) do if i.Character and i.Character:FindFirstChild("Humanoid") and i.Character:FindFirstChild("HumanoidRootPart") and i.Character:FindFirstChild("Head") and i.Character:FindFirstChild("Humanoid").Health > 0 and (esp.maxdist == 0 or (i.Character.HumanoidRootPart.Position - plr.Character.HumanoidRootPart.Position).Magnitude < esp.maxdist) then local hum = i.Character.Humanoid local hrp = i.Character.HumanoidRootPart local head = i.Character.Head local Vector, onScreen = camera:WorldToViewportPoint(i.Character.HumanoidRootPart.Position) local Size = (camera:WorldToViewportPoint(hrp.Position - Vector3new(0, 3, 0)).Y - camera:WorldToViewportPoint(hrp.Position + Vector3new(0, 2.6, 0)).Y) / 2 local BoxSize = Vector2new(mathfloor(Size * 1.5), mathfloor(Size * 1.9)) local BoxPos = Vector2new(mathfloor(Vector.X - Size * 1.5 / 2), mathfloor(Vector.Y - Size * 1.6 / 2)) local BottomOffset = BoxSize.Y + BoxPos.Y + 1 if onScreen and esp.settings_chams.enabled then v.cham.Adornee = i.Character v.cham.Enabled = esp.settings_chams.enabled v.cham.OutlineTransparency = esp.settings_chams.outline and esp.settings_chams.outline_transparency or 1 v.cham.OutlineColor = esp.settings_chams.autocolor and esp.settings_chams.autocolor_outline and esp.WallCheck(i.Character.Head) and esp.settings_chams.visible_Color or esp.settings_chams.autocolor and esp.settings_chams.autocolor_outline and not esp.WallCheck(i.Character.Head) and esp.settings_chams.invisible_Color or esp.settings_chams.outline_color v.cham.FillColor = esp.settings_chams.autocolor and esp.WallCheck(i.Character.Head) and esp.settings_chams.visible_Color or esp.settings_chams.autocolor and not esp.WallCheck(i.Character.Head) and esp.settings_chams.invisible_Color or esp.settings_chams.fill_color v.cham.FillTransparency = esp.settings_chams.fill_transparency if esp.settings_chams.teamcheck then if not esp.TeamCheck(i) then v.cham.Enabled = false end end else v.cham.Enabled = false end if onScreen and esp.enabled then if esp.settings.name.enabled then v.name.Position = Vector2new(BoxSize.X / 2 + BoxPos.X, BoxPos.Y - 16) v.name.Outline = esp.settings.name.outline v.name.Color = esp.settings.name.color v.name.Font = esp.font v.name.Size = esp.fontsize if esp.settings.name.displaynames then v.name.Text = i.DisplayName else v.name.Text = i.Name end v.name.Visible = true else v.name.Visible = false end if esp.settings.distance.enabled and plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") then v.distance.Position = Vector2new(BoxSize.X / 2 + BoxPos.X, BottomOffset) v.distance.Outline = esp.settings.distance.outline v.distance.Text = "[" .. mathfloor((hrp.Position - plr.Character.HumanoidRootPart.Position).Magnitude) .. "m]" v.distance.Color = esp.settings.distance.color BottomOffset = BottomOffset + 15 v.distance.Font = esp.font v.distance.Size = esp.fontsize v.distance.Visible = true else v.distance.Visible = false end if esp.settings.filledbox.enabled then v.filledbox.Size = BoxSize + Vector2.new(-2, -2) v.filledbox.Position = BoxPos + Vector2.new(1, 1) v.filledbox.Color = esp.settings.filledbox.color v.filledbox.Transparency = esp.settings.filledbox.transparency v.filledbox.Visible = true else v.filledbox.Visible = false end if esp.settings.box.enabled then v.boxOutline.Size = BoxSize v.boxOutline.Position = BoxPos v.boxOutline.Visible = esp.settings.box.outline v.box.Size = BoxSize v.box.Position = BoxPos v.box.Color = esp.settings.box.color v.box.Visible = true else v.boxOutline.Visible = false v.box.Visible = false end if esp.settings.healthbar.enabled then v.healthBar.From = Vector2new((BoxPos.X - 5), BoxPos.Y + BoxSize.Y) v.healthBar.To = Vector2new(v.healthBar.From.X, v.healthBar.From.Y - (hum.Health / hum.MaxHealth) * BoxSize.Y) v.healthBar.Color = Color3fromRGB(255 - 255 / (hum["MaxHealth"] / hum["Health"]), 255 / (hum["MaxHealth"] / hum["Health"]), 0) v.healthBar.Visible = true v.healthBar.Thickness = esp.settings.healthbar.size v.healthBarOutline.From = Vector2new(v.healthBar.From.X, BoxPos.Y + BoxSize.Y + 1) v.healthBarOutline.To = Vector2new(v.healthBar.From.X, (v.healthBar.From.Y - 1 * BoxSize.Y) -1) v.healthBarOutline.Visible = esp.settings.healthbar.outline v.healthBarOutline.Thickness = esp.settings.healthbar.size + 2 else v.healthBarOutline.Visible = false v.healthBar.Visible = false end if esp.settings.healthtext.enabled then v.healthText.Text = tostring(mathfloor((hum.Health / hum.MaxHealth) * 100 + 0.5)) v.healthText.Position = Vector2new((BoxPos.X - 20), (BoxPos.Y + BoxSize.Y - 1 * BoxSize.Y) -1) v.healthText.Color = esp.settings.healthtext.color v.healthText.Outline = esp.settings.healthtext.outline v.healthText.Font = esp.font v.healthText.Size = esp.fontsize v.healthText.Visible = true else v.healthText.Visible = false end if esp.settings.viewangle.enabled and head and head.CFrame then v.viewAngle.From = Vector2new(camera:worldToViewportPoint(head.CFrame.p).X, camera:worldToViewportPoint(head.CFrame.p).Y) v.viewAngle.To = Vector2new(camera:worldToViewportPoint((head.CFrame + (head.CFrame.lookVector * esp.settings.viewangle.size)).p).X, camera:worldToViewportPoint((head.CFrame + (head.CFrame.lookVector * esp.settings.viewangle.size)).p).Y) v.viewAngle.Color = esp.settings.viewangle.color v.viewAngle.Visible = true else v.viewAngle.Visible = false end if esp.settings.weapon.enabled then v.weapon.Visible = true v.weapon.Position = Vector2new(BoxSize.X + BoxPos.X + v.weapon.TextBounds.X / 2 + 3, BoxPos.Y - 3) v.weapon.Outline = esp.settings.name.outline v.weapon.Color = esp.settings.name.color v.weapon.Font = esp.font v.weapon.Size = esp.fontsize v.weapon.Text = (i.Character:FindFirstChildOfClass("Tool") and tostring(i.Character:FindFirstChildOfClass("Tool"))) or "Hands" else v.weapon.Visible = false end if esp.teamcheck then if esp.TeamCheck(i) then v.name.Visible = esp.settings.name.enabled v.box.Visible = esp.settings.box.enabled v.filledbox.Visible = esp.settings.box.enabled v.healthBar.Visible = esp.settings.healthbar.enabled v.healthText.Visible = esp.settings.healthtext.enabled v.distance.Visible = esp.settings.distance.enabled v.viewAngle.Visible = esp.settings.viewangle.enabled v.weapon.Visible = esp.settings.weapon.enabled else v.name.Visible = false v.boxOutline.Visible = false v.box.Visible = false v.filledbox.Visible = false v.healthBarOutline.Visible = false v.healthBar.Visible = false v.healthText.Visible = false v.distance.Visible = false v.viewAngle.Visible = false v.weapon.Visible = false end end else v.name.Visible = false v.boxOutline.Visible = false v.box.Visible = false v.filledbox.Visible = false v.healthBarOutline.Visible = false v.healthBar.Visible = false v.healthText.Visible = false v.distance.Visible = false v.viewAngle.Visible = false v.weapon.Visible = false end else v.name.Visible = false v.boxOutline.Visible = false v.box.Visible = false v.filledbox.Visible = false v.healthBarOutline.Visible = false v.healthBar.Visible = false v.healthText.Visible = false v.distance.Visible = false v.viewAngle.Visible = false v.cham.Enabled = false v.weapon.Visible = false end end end) esp.Unload = function() if ESP_Loop then ESP_Loop:Disconnect() ESP_Loop = nil end for i,v in pairs(esp.players) do for i2, v2 in pairs(v) do if v2 == "cham" then v2:Destroy() else v2:Remove() end end end table.clear(esp) esp = nil end getgenv().esp = esp local Window = Library:CreateWindow({ Title = "Universal ESP", Subtitle = "AirFlow Port", Size = UDim2.fromOffset(500, 400), ToggleKey = Enum.KeyCode.RightShift, }) local HomeTab = Window:CreateTab("Home", 4483362458) local VisualsTab = Window:CreateTab("Visuals", 4483362458) HomeTab:CreateSection("Welcome") HomeTab:CreateButton({ Name = "Unload Script", Callback = function() if getgenv().esp and getgenv().esp.Unload then getgenv().esp.Unload() end if Library.Unload then Library:Unload() end end, }) VisualsTab:CreateSection("Master Settings") VisualsTab:CreateToggle({ Name = "Enable ESP Master", CurrentValue = true, Flag = "ESP_Master", Callback = function(Value) if getgenv().esp then getgenv().esp.enabled = Value end end, }) VisualsTab:CreateToggle({ Name = "Team Check", CurrentValue = false, Flag = "ESP_TeamCheck", Callback = function(Value) if getgenv().esp then getgenv().esp.teamcheck = Value end end, }) VisualsTab:CreateSlider({ Name = "Max Distance", Range = {0, 5000}, Increment = 50, Suffix = " studs", CurrentValue = 0, Flag = "ESP_MaxDist", Callback = function(Value) if getgenv().esp then getgenv().esp.maxdist = Value end end, }) VisualsTab:CreateSlider({ Name = "Font Size", Range = {8, 24}, Increment = 1, Suffix = "px", CurrentValue = 13, Flag = "ESP_FontSize", Callback = function(Value) if getgenv().esp then getgenv().esp.fontsize = Value end end, }) VisualsTab:CreateSection("Box ESP") VisualsTab:CreateToggle({ Name = "Enable Boxes", CurrentValue = true, Flag = "ESP_BoxesEnabled", Callback = function(Value) if getgenv().esp then getgenv().esp.settings.box.enabled = Value end end, }) VisualsTab:CreateToggle({ Name = "Box Outline", CurrentValue = true, Flag = "ESP_BoxesOutline", Callback = function(Value) if getgenv().esp then getgenv().esp.settings.box.outline = Value end end, }) VisualsTab:CreateToggle({ Name = "Filled Box", CurrentValue = true, Flag = "ESP_FilledBox", Callback = function(Value) if getgenv().esp then getgenv().esp.settings.filledbox.enabled = Value end end, }) VisualsTab:CreateSlider({ Name = "Filled Box Transparency", Range = {0, 1}, Increment = 0.05, CurrentValue = 0.5, Flag = "ESP_FillTrans", Callback = function(Value) if getgenv().esp then getgenv().esp.settings.filledbox.transparency = Value end end, }) VisualsTab:CreateSection("Info & Health") VisualsTab:CreateToggle({ Name = "Enable Names", CurrentValue = true, Flag = "ESP_Names", Callback = function(Value) if getgenv().esp then getgenv().esp.settings.name.enabled = Value end end, }) VisualsTab:CreateToggle({ Name = "Use Display Names", CurrentValue = true, Flag = "ESP_DisplayNames", Callback = function(Value) if getgenv().esp then getgenv().esp.settings.name.displaynames = Value end end, }) VisualsTab:CreateToggle({ Name = "Enable Distance", CurrentValue = true, Flag = "ESP_Distance", Callback = function(Value) if getgenv().esp then getgenv().esp.settings.distance.enabled = Value end end, }) VisualsTab:CreateToggle({ Name = "Enable Health Bar", CurrentValue = true, Flag = "ESP_HealthBar", Callback = function(Value) if getgenv().esp then getgenv().esp.settings.healthbar.enabled = Value end end, }) VisualsTab:CreateToggle({ Name = "Enable Health Text", CurrentValue = true, Flag = "ESP_HealthText", Callback = function(Value) if getgenv().esp then getgenv().esp.settings.healthtext.enabled = Value end end, }) VisualsTab:CreateToggle({ Name = "Enable Weapon Name", CurrentValue = true, Flag = "ESP_Weapon", Callback = function(Value) if getgenv().esp then getgenv().esp.settings.weapon.enabled = Value end end, }) VisualsTab:CreateToggle({ Name = "Enable View Angle", CurrentValue = true, Flag = "ESP_ViewAngle", Callback = function(Value) if getgenv().esp then getgenv().esp.settings.viewangle.enabled = Value end end, }) VisualsTab:CreateSection("Chams") VisualsTab:CreateToggle({ Name = "Enable Chams", CurrentValue = false, Flag = "ESP_Chams", Callback = function(Value) if getgenv().esp then getgenv().esp.settings_chams.enabled = Value end end, }) VisualsTab:CreateToggle({ Name = "Chams Team Check", CurrentValue = false, Flag = "ESP_ChamsTeam", Callback = function(Value) if getgenv().esp then getgenv().esp.settings_chams.teamcheck = Value end end, }) VisualsTab:CreateToggle({ Name = "Chams Outline", CurrentValue = false, Flag = "ESP_ChamsOutline", Callback = function(Value) if getgenv().esp then getgenv().esp.settings_chams.outline = Value end end, })