--[[
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")
Comments
No comments yet
Be the first to share your thoughts!