local Players = game:GetService("Players") local LP = Players.LocalPlayer local cam = workspace.CurrentCamera print("camera children:", #cam:GetChildren()) for _, c in ipairs(cam:GetChildren()) do print(" cam", c.ClassName, c.Name) end local aim = Vector2.new(cam.ViewportSize.X / 2, cam.ViewportSize.Y / 2) local ray = cam:ViewportPointToRay(aim.X, aim.Y) local params = RaycastParams.new() params.FilterType = Enum.RaycastFilterType.Exclude params.RespectCanCollide = false params.FilterDescendantsInstances = { LP.Character } local res = workspace:Raycast(ray.Origin, ray.Direction * 500, params) print("centre ray hit:", res and res.Instance:GetFullName() or "nil", res and string.format("dist=%.2f", (res.Position - ray.Origin).Magnitude) or "") for _, name in ipairs({ "Head", "HumanoidRootPart" }) do for _, p in ipairs(Players:GetPlayers()) do if p ~= LP and p.Character then local pt = p.Character:FindFirstChild(name) local h = p.Character:FindFirstChildOfClass("Humanoid") if pt and h and h.Health > 0 then local d = pt.Position - cam.CFrame.Position local r2 = workspace:Raycast(cam.CFrame.Position, d, params) print(string.format(" %-18s hp=%s blockedBy=%s", p.Name, tostring(math.floor(h.Health)), r2 and (r2.Instance:GetFullName() .. string.format(" @%.1f", (r2.Position - cam.CFrame.Position).Magnitude)) or "clear")) end end end end