local frag = getgenv().fragESP local cam = workspace.CurrentCamera local Vp = cam.ViewportSize local oldOnly, newOnly, both, neither = 0, 0, 0, 0 local newPlayers = {} for _, p in ipairs(game:GetService("Players"):GetChildren()) do if p ~= game:GetService("Players").LocalPlayer and p.Character and p.Character:FindFirstChild("HumanoidRootPart") and p.Character:FindFirstChild("Humanoid") and p.Character.Humanoid.Health > 0 then local cf, sz = p.Character:GetBoundingBox() local hp = cam:WorldToScreenPoint(cf.Position + Vector3.yAxis * (sz.Y / 2)) local fp = cam:WorldToScreenPoint(cf.Position - Vector3.yAxis * (sz.Y / 2)) local wp = cam:WorldToScreenPoint(cf.Position + cam.CFrame.RightVector * (math.max(sz.X, sz.Z) * 0.5)) local rootS, rootOn = cam:WorldToScreenPoint(p.Character.HumanoidRootPart.Position) local d = (cf.Position - cam.CFrame.Position).Magnitude if hp.Z > 0.1 and fp.Z > 0.1 and wp.Z > 0.1 and d <= frag.config.maxdist then local cx = (hp.X + fp.X) / 2 local hw = math.max(math.abs(wp.X - cx) + 1.5, 3) local top = math.min(hp.Y, fp.Y) - 1 local bh = math.max(math.abs(fp.Y - hp.Y) - 1, 21) local l, r, b = cx - hw, cx + hw, top + bh local M = 150 local newOk = r > -M and l < Vp.X + M and b > -M and top < Vp.Y + M if rootOn and newOk then both += 1 elseif rootOn and not newOk then oldOnly += 1 elseif newOk and not rootOn then newOnly += 1; table.insert(newPlayers, string.format("%s(d=%d, root %d,%d)", p.Name, math.floor(d), rootS.X, rootS.Y)) else neither += 1 end end end end print(string.format("root-on-screen and footprint: %d | root-only: %d | footprint-only (NEW, was invisible before): %d | neither: %d", both, oldOnly, newOnly, neither)) print("newly covered:", #newPlayers, table.concat(newPlayers, " | ")) local holder = frag.holder local missing = 0 local counts = {} for _, v in ipairs(holder:GetChildren()) do local p = v:GetAttribute("fragPlayer") if p then counts[p] = (counts[p] or 0) + 1 end end for _, n in pairs(counts) do if n ~= 14 then missing += 1 end end print("per-player element sets:", (function() local n = 0 for _ in pairs(counts) do n += 1 end return n end)(), "| malformed sets:", missing)