
KeylessUniversal

-- server position shower from client
-- i recommend using it 3-5 times and getting a ms that isnt constantly changing
-- for example 500 and then 502 or 550 on the next test is fine but 500 to 600 or 400 is bad
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local Stats = game:GetService("Stats")
local CoreGui = game:GetService("CoreGui")
local LocalPlayer = Players.LocalPlayer
local mouse = LocalPlayer:GetMouse()
-- Variables
local showingGhost = false
local ghostClone = nil
local positionHistory = {} -- Stores past positions and timestamps
local baseDelayOffset = 0 -- Manual delay offset (seconds)
local calculatedPhysicsPing = 0 -- Total round-trip from the tool
-- GUI Setup
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "ServerGhostGUI"
ScreenGui.ResetOnSpawn = false
local success, uiParent = pcall(function() return gethui() or CoreGui end)
if not success then uiParent = LocalPlayer:WaitForChild("PlayerGui") end
ScreenGui.Parent = uiParent
local MainFrame = Instance.new("Frame")
MainFrame.Size = UDim2.new(0, 200, 0, 190)
MainFrame.Position = UDim2.new(0.5, -100, 0.5, -95)
MainFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
MainFrame.BorderSizePixel = 0
MainFrame.Parent = ScreenGui
local UICorner = Instance.new("UICorner")
UICorner.CornerRadius = UDim.new(0, 8)
UICorner.Parent = MainFrame
local Title = Instance.new("TextLabel")
Title.Size = UDim2.new(1, 0, 0, 30)
Title.BackgroundTransparency = 1
Title.Text = "Server Ghost"
Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Title.Font = Enum.Font.GothamBold
Title.TextSize = 14
Title.Parent = MainFrame
-- Delay Offset Input
local DelayBox = Instance.new("TextBox")
DelayBox.Size = UDim2.new(0.9, 0, 0, 30)
DelayBox.Position = UDim2.new(0.05, 0, 0, 40)
DelayBox.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
DelayBox.TextColor3 = Color3.fromRGB(255, 255, 255)
DelayBox.PlaceholderText = "Manual Offset (e.g. 0)"
DelayBox.Text = "0"
DelayBox.Font = Enum.Font.Gotham
DelayBox.TextSize = 14
DelayBox.Parent = MainFrame
-- Ghost Toggle Button
local GhostButton = Instance.new("TextButton")
GhostButton.Size = UDim2.new(0.9, 0, 0, 35)
GhostButton.Position = UDim2.new(0.05, 0, 0, 85)
GhostButton.BackgroundColor3 = Color3.fromRGB(0, 150, 255)
GhostButton.TextColor3 = Color3.fromRGB(255, 255, 255)
GhostButton.Text = "Show Server Ghost"
GhostButton.Font = Enum.Font.GothamBold
GhostButton.TextSize = 14
GhostButton.Parent = MainFrame
-- Ping Checker Button
local PingButton = Instance.new("TextButton")
PingButton.Size = UDim2.new(0.9, 0, 0, 35)
PingButton.Position = UDim2.new(0.05, 0, 0, 135)
PingButton.BackgroundColor3 = Color3.fromRGB(255, 100, 100)
PingButton.TextColor3 = Color3.fromRGB(255, 255, 255)
PingButton.Text = "Get Ping Tool"
PingButton.Font = Enum.Font.GothamBold
PingButton.TextSize = 14
PingButton.Parent = MainFrame
-- Make GUI Draggable
local dragging, dragInput, dragStart, startPos
MainFrame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = true
dragStart = input.Position
startPos = MainFrame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then dragging = false end
end)
end
end)
MainFrame.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement then dragInput = input end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragging then
local delta = input.Position - dragStart
MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
end)
-- Update Offset manually
DelayBox.FocusLost:Connect(function()
local val = tonumber(DelayBox.Text)
if val then
baseDelayOffset = val
else
DelayBox.Text = tostring(baseDelayOffset)
end
end)
-- Safely get Network Ping actively
local function getNetworkPing()
local activePing = 0
local success, result = pcall(function()
local label = CoreGui.RobloxGui.PerformanceStats:GetChildren()[6].StatsMiniTextPanelClass.ValueLabel
return label.Text
end)
if success and type(result) == "string" then
local numStr = string.match(result, "[%d%.]+")
if numStr then return tonumber(numStr) end
end
local statSuccess, statResult = pcall(function()
return Stats.Network.ServerStatsItem["Data Ping"]:GetValue()
end)
if statSuccess and type(statResult) == "number" then
return statResult
end
return activePing
end
-- Create Ghost Function
local function createGhost()
if ghostClone then ghostClone:Destroy() end
local char = LocalPlayer.Character
if not char then return end
char.Archivable = true
local clone = char:Clone()
char.Archivable = false
clone.Name = "ServerGhost"
-- Fixes the sinking bug by explicitly locking the center of the model to the HRP
clone.PrimaryPart = clone:FindFirstChild("HumanoidRootPart")
for _, v in ipairs(clone:GetDescendants()) do
if v:IsA("Script") or v:IsA("LocalScript") then
v:Destroy()
elseif v:IsA("BasePart") then
-- Strip completely of physics
v.CanCollide = false
v.CanTouch = false
v.CanQuery = false
v.Massless = true
v.Anchored = true
v.Material = Enum.Material.ForceField
v.Color = Color3.fromRGB(0, 255, 255) -- Cyan color
v.CastShadow = false
if v.Name == "HumanoidRootPart" then
v.Transparency = 1
else
v.Transparency = 0
end
elseif v:IsA("Decal") or v:IsA("Texture") then
v:Destroy()
end
end
-- Paralyze the ghost's Humanoid so it doesn't force collision states
local hum = clone:FindFirstChild("Humanoid")
if hum then
hum.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
hum.HealthDisplayType = Enum.HumanoidHealthDisplayType.AlwaysOff
hum.PlatformStand = true
for _, state in pairs(Enum.HumanoidStateType:GetEnumItems()) do
pcall(function() hum:SetStateEnabled(state, false) end)
end
end
clone.Parent = workspace
ghostClone = clone
end
-- Toggle Logic
GhostButton.MouseButton1Click:Connect(function()
showingGhost = not showingGhost
if showingGhost then
createGhost()
GhostButton.Text = "Hide Server Ghost"
GhostButton.BackgroundColor3 = Color3.fromRGB(255, 50, 50)
else
if ghostClone then
ghostClone:Destroy()
ghostClone = nil
end
GhostButton.Text = "Show Server Ghost"
GhostButton.BackgroundColor3 = Color3.fromRGB(0, 150, 255)
Title.Text = "Server Ghost"
end
end)
-- Re-create ghost if character respawns while enabled
LocalPlayer.CharacterAdded:Connect(function()
positionHistory = {} -- clear history
if showingGhost then
task.wait(0.5)
createGhost()
end
end)
-- Loop: Record History & Update Ghost
RunService.Heartbeat:Connect(function()
local char = LocalPlayer.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if not hrp then return end
-- 1. Log Current Position
table.insert(positionHistory, {
t = os.clock(),
cf = hrp.CFrame
})
-- 2. Clean up history older than 3 seconds (prevent memory leaks)
while #positionHistory > 0 and (os.clock() - positionHistory[1].t) > 3 do
table.remove(positionHistory, 1)
end
-- 3. Update Ghost if toggled
if showingGhost and ghostClone and ghostClone.PrimaryPart then
-- OVERRIDE ENFORCER: Absolutely ensure Roblox didn't turn collisions back on
for _, v in ipairs(ghostClone:GetDescendants()) do
if v:IsA("BasePart") and v.CanCollide then
v.CanCollide = false
end
end
local currentNetPing = getNetworkPing()
local delayMs = currentNetPing -- Default to raw network ping
-- Use our Physics test minus Network ping if available
if calculatedPhysicsPing > 0 then
delayMs = math.max(0, calculatedPhysicsPing - currentNetPing)
end
Title.Text = string.format("Delaying by %dms", delayMs)
-- Target time we want to show (current time minus delay)
local targetDelaySeconds = (delayMs / 1000) + baseDelayOffset
local targetTime = os.clock() - targetDelaySeconds
local targetCFrame = hrp.CFrame
-- Interpolate to find exact CFrame in the past
if #positionHistory >= 2 then
for i = #positionHistory, 2, -1 do
local current = positionHistory[i]
local previous = positionHistory[i-1]
if current.t >= targetTime and previous.t <= targetTime then
local alpha = (targetTime - previous.t) / (current.t - previous.t)
targetCFrame = previous.cf:Lerp(current.cf, alpha)
break
elseif i == 2 and targetTime < previous.t then
targetCFrame = previous.cf
end
end
end
-- Pivot directly to the calculated CFrame (safe from ground-sinking due to PrimaryPart lock)
ghostClone:PivotTo(targetCFrame)
end
end)
-- Ping Checker Script Implementation
PingButton.MouseButton1Click:Connect(function()
if LocalPlayer.Backpack:FindFirstChild("PingCheck") then
PingButton.Text = "Already have Tool!"
task.wait(1)
PingButton.Text = "Get Ping Tool"
return
end
local tool = Instance.new("Tool")
tool.Name = "PingCheck"
tool.RequiresHandle = false
tool.Parent = LocalPlayer.Backpack
local function getHRP(p)
local c = p and p.Character
return c and c:FindFirstChild("HumanoidRootPart")
end
local function noCollide(c)
for _, d in ipairs(c:GetDescendants()) do
if d:IsA("BasePart") then d.CanCollide = false end
end
end
local function slide(part, goal, dur)
local tw = TweenService:Create(part, TweenInfo.new(dur, Enum.EasingStyle.Linear), { CFrame = goal })
tw:Play()
tw.Completed:Wait()
end
local function run(target)
local th = getHRP(target)
local mh = getHRP(LocalPlayer)
if not th or not mh then return end
noCollide(LocalPlayer.Character)
task.wait(0.2)
local last = th.Position
local still = 0
while still < 30 do
RunService.Heartbeat:Wait()
th = getHRP(target) or th
local p = th.Position
if (p - last).Magnitude > 0.15 then still = 0 else still += 1 end
last = p
end
mh = getHRP(LocalPlayer) or mh
th = getHRP(target) or th
slide(mh, th.CFrame * CFrame.new(0, 0, 10), 1.2)
task.wait(0.5)
local t0 = nil
local p0 = nil
local moved = false
local ms = 0
local done = false
local endT = nil
task.spawn(function()
local m = getHRP(LocalPlayer) or mh
local t = getHRP(target) or th
slide(m, t.CFrame * CFrame.new(0, 0, -10), 1.2)
done = true
endT = os.clock()
end)
while not moved do
RunService.Heartbeat:Wait()
mh = getHRP(LocalPlayer) or mh
th = getHRP(target) or th
if not t0 then
if (mh.Position - th.Position).Magnitude <= 3 then
t0 = os.clock()
p0 = th.Position
elseif done and endT and (os.clock() - endT) > 5 then
break
end
else
ms = (os.clock() - t0) * 1000
if (th.Position - p0).Magnitude > 0.05 then
moved = true
elseif ms > 5000 then
break
end
end
end
if moved then
print(string.format("Calculated Physics Ping: %.6f ms", ms))
-- Sync it with the ghost script
calculatedPhysicsPing = ms
end
end
tool.Activated:Connect(function()
local hit = mouse.Target
if not hit then return end
local model = hit:FindFirstAncestorOfClass("Model")
if not model then return end
local plr = Players:GetPlayerFromCharacter(model)
if plr and plr ~= LocalPlayer then
run(plr)
end
end)
PingButton.Text = "Tool Given!"
task.wait(1)
PingButton.Text = "Get Ping Tool"
end)



so uh? It checks ur server position? What's the purpose of- no. why would someone want that?
@ppppppppppppppppppp i use it for prediction it can help in some aimbots and most visual or welding scripts or just advantage of knowing where others see u also stop using reddit grammar noone uses . or - like son sybau
Chill broskito just asking
@ppppppppppppppppppp ok