--[[ Project Zenith V1.1 - Rivals Edition Smoothness Update: Fixed target switching & Lerp logic ]] local Players = game:GetService("Players") local RunService = game:GetService("RunService") local lp = Players.LocalPlayer local cam = workspace.CurrentCamera -- // Configuration local Config = { Enabled = true, TeamCheck = true, TargetPart = "HumanoidRootPart", Fov = 150, ProjectileSpeed = 950, PingCompensation = 0.18, MaxDistance = 1000, -- SMOOTHNESS SETTINGS Smoothing = 0.15, -- [0.01 to 1] LOWER = Smoother/Slower, HIGHER = Snappier/Faster } local function getClosestPlayer() local target = nil local shortestDist = Config.MaxDistance local mousePos = Vector2.new(cam.ViewportSize.X / 2, cam.ViewportSize.Y / 2) for _, v in pairs(Players:GetPlayers()) do if v ~= lp and v.Character and v.Character:FindFirstChild("Humanoid") then if Config.TeamCheck and v.Team == lp.Team then continue end local root = v.Character:FindFirstChild(Config.TargetPart) local hum = v.Character:FindFirstChild("Humanoid") if root and hum.Health > 0 then local screenPos, visible = cam:WorldToViewportPoint(root.Position) if visible then local screenDist = (Vector2.new(screenPos.X, screenPos.Y) - mousePos).Magnitude if screenDist <= Config.Fov then local worldDist = (root.Position - lp.Character.HumanoidRootPart.Position).Magnitude if worldDist < shortestDist then shortestDist = worldDist target = v end end end end end end return target end -- // Main Update Loop RunService:BindToRenderStep("ZenithLock", Enum.RenderPriority.Camera.Value + 1, function() if not Config.Enabled then return end local target = getClosestPlayer() if target and target.Character and lp.Character then local root = target.Character:FindFirstChild(Config.TargetPart) local myRoot = lp.Character:FindFirstChild("HumanoidRootPart") if root and myRoot then -- 1. Prediction Math local velocity = root.AssemblyLinearVelocity local magnitude = (root.Position - myRoot.Position).Magnitude local predictionTime = (magnitude / Config.ProjectileSpeed) + Config.PingCompensation local targetPos = root.Position + (velocity * predictionTime) -- 2. SMOOTH SNAP LOGIC -- We create a CFrame that looks at the target local lookAtCF = CFrame.new(cam.CFrame.Position, targetPos) -- Instead of setting it instantly, we LERP (Linear Interpolation) -- This makes target switching look like a human moving their thumb cam.CFrame = cam.CFrame:Lerp(lookAtCF, Config.Smoothing) end end end) print("Project Zenith V1.1 (Smooth) Loaded")