local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera -- ===== RAYFIELD ===== local Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))() local Window = Rayfield:CreateWindow({ Name = "Player Utilities", LoadingTitle = "Player Utilities", LoadingSubtitle = "Loading...", ConfigurationSaving = { Enabled = false }, Discord = { Enabled = false }, KeySystem = false, }) local LockTab = Window:CreateTab("Lock On", nil) local ESPTab = Window:CreateTab("ESP", nil) -- ===== STATE ===== local lockEnabled = false local lockRange = 150 local lockedTarget = nil local lockLoop = nil local espEnabled = false local espData = {} -- ===== UTILITY ===== local function isVisible(targetHead) if not targetHead then return false end local origin = Camera.CFrame.Position local direction = targetHead.Position - origin local rayParams = RaycastParams.new() rayParams.FilterType = Enum.RaycastFilterType.Exclude local excludeList = {} if LocalPlayer.Character then table.insert(excludeList, LocalPlayer.Character) end if targetHead.Parent then table.insert(excludeList, targetHead.Parent) end rayParams.FilterDescendantsInstances = excludeList local result = workspace:Raycast(origin, direction, rayParams) if not result then return true end local hitDist = (result.Position - origin).Magnitude local headDist = direction.Magnitude return hitDist >= headDist - 1 end local function getHealth(player) local char = player.Character if not char then return 0, 100 end local h = char:FindFirstChildOfClass("Humanoid") if not h then return 0, 100 end return h.Health, h.MaxHealth end -- ===== ESP ===== local function buildESP(player) if player == LocalPlayer then return end if espData[player] then return end local function tryAttach() local character = player.Character if not character then return end local highlight = Instance.new("Highlight") highlight.FillColor = Color3.fromRGB(255, 50, 50) highlight.OutlineColor = Color3.fromRGB(255, 255, 255) highlight.FillTransparency = 0.4 highlight.OutlineTransparency = 0 highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop -- shows through walls highlight.Parent = character local head = character:FindFirstChild("Head") local billboard, hpBar, hpFill, nameLbl if head then billboard = Instance.new("BillboardGui") billboard.Name = "ESP_Billboard" billboard.Size = UDim2.new(0, 120, 0, 40) billboard.StudsOffset = Vector3.new(0, 2.5, 0) billboard.AlwaysOnTop = true billboard.Parent = head nameLbl = Instance.new("TextLabel") nameLbl.Size = UDim2.new(1, 0, 0.5, 0) nameLbl.BackgroundTransparency = 1 nameLbl.Text = player.Name nameLbl.TextColor3 = Color3.fromRGB(255, 255, 255) nameLbl.TextStrokeTransparency = 0 nameLbl.Font = Enum.Font.GothamBold nameLbl.TextScaled = true nameLbl.Parent = billboard -- HP bar background hpBar = Instance.new("Frame") hpBar.Size = UDim2.new(1, 0, 0.3, 0) hpBar.Position = UDim2.new(0, 0, 0.65, 0) hpBar.BackgroundColor3 = Color3.fromRGB(50, 50, 50) hpBar.BorderSizePixel = 0 hpBar.Parent = billboard -- HP bar fill hpFill = Instance.new("Frame") hpFill.Size = UDim2.new(1, 0, 1, 0) hpFill.BackgroundColor3 = Color3.fromRGB(80, 255, 80) hpFill.BorderSizePixel = 0 hpFill.Parent = hpBar end espData[player] = { highlight = highlight, billboard = billboard, hpFill = hpFill, nameLbl = nameLbl, } end tryAttach() player.CharacterAdded:Connect(function() task.wait(0.5) -- clean old if espData[player] then if espData[player].highlight then espData[player].highlight:Destroy() end if espData[player].billboard then espData[player].billboard:Destroy() end espData[player] = nil end tryAttach() end) end local function removeESP(player) local data = espData[player] if data then if data.highlight then data.highlight:Destroy() end if data.billboard then data.billboard:Destroy() end espData[player] = nil end end local function refreshAllESP() for _, player in ipairs(Players:GetPlayers()) do if espEnabled then buildESP(player) else removeESP(player) end end end -- update hp bars every frame RunService.RenderStepped:Connect(function() if not espEnabled then return end for player, data in pairs(espData) do if data.hpFill then local hp, maxHp = getHealth(player) local pct = math.clamp(hp / maxHp, 0, 1) data.hpFill.Size = UDim2.new(pct, 0, 1, 0) -- green -> yellow -> red based on hp data.hpFill.BackgroundColor3 = Color3.fromRGB( math.floor(255 * (1 - pct)), math.floor(255 * pct), 0 ) end -- highlight locked target in different color if data.highlight then if lockedTarget == player then data.highlight.FillColor = Color3.fromRGB(255, 200, 0) data.highlight.OutlineColor = Color3.fromRGB(255, 255, 0) else data.highlight.FillColor = Color3.fromRGB(255, 50, 50) data.highlight.OutlineColor = Color3.fromRGB(255, 255, 255) end end end end) Players.PlayerAdded:Connect(function(player) if espEnabled then task.wait(0.5) buildESP(player) end end) Players.PlayerRemoving:Connect(function(player) removeESP(player) end) -- ===== LOCK ON ===== local function findBestTarget() local bestPlayer = nil local bestScore = math.huge local screenCenter = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2) for _, player in ipairs(Players:GetPlayers()) do if player == LocalPlayer then continue end local character = player.Character if not character then continue end local head = character:FindFirstChild("Head") if not head then continue end local humanoid = character:FindFirstChildOfClass("Humanoid") if not humanoid or humanoid.Health <= 0 then continue end local worldDist = (head.Position - Camera.CFrame.Position).Magnitude if worldDist > lockRange then continue end local screenPos, onScreen = Camera:WorldToScreenPoint(head.Position) if not onScreen then continue end if not isVisible(head) then continue end -- score = screen distance from center, weighted slightly by world distance local screenDist = (Vector2.new(screenPos.X, screenPos.Y) - screenCenter).Magnitude local score = screenDist + (worldDist * 0.1) if score < bestScore then bestScore = score bestPlayer = player end end return bestPlayer end local function startLock() if lockLoop then lockLoop:Disconnect() end lockLoop = RunService.RenderStepped:Connect(function() -- validate current target if lockedTarget then local char = lockedTarget.Character local head = char and char:FindFirstChild("Head") local humanoid = char and char:FindFirstChildOfClass("Humanoid") local worldDist = head and (head.Position - Camera.CFrame.Position).Magnitude or math.huge if not head or not humanoid or humanoid.Health <= 0 or worldDist > lockRange or not isVisible(head) then lockedTarget = nil end end -- find new target if none if not lockedTarget then lockedTarget = findBestTarget() end -- lock camera to head if lockedTarget then local char = lockedTarget.Character local head = char and char:FindFirstChild("Head") if head then Camera.CFrame = CFrame.new(Camera.CFrame.Position, head.Position) end end end) end local function stopLock() if lockLoop then lockLoop:Disconnect(); lockLoop = nil end lockedTarget = nil end -- ===== RAYFIELD: LOCK ON TAB ===== LockTab:CreateToggle({ Name = "Lock On (T to toggle)", CurrentValue = false, Flag = "LockToggle", Callback = function(value) lockEnabled = value if value then startLock() else stopLock() end end, }) LockTab:CreateSlider({ Name = "Lock Range", Range = {20, 600}, Increment = 10, Suffix = " studs", CurrentValue = 150, Flag = "LockRange", Callback = function(value) lockRange = value end, }) -- ===== RAYFIELD: ESP TAB ===== ESPTab:CreateToggle({ Name = "Player Highlight (through walls)", CurrentValue = false, Flag = "ESPToggle", Callback = function(value) espEnabled = value refreshAllESP() end, }) -- ===== PC KEYBIND ===== UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end if input.KeyCode == Enum.KeyCode.T then lockEnabled = not lockEnabled if lockEnabled then startLock() else stopLock() end end end) Rayfield:LoadConfiguration()