local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local Stats = game:GetService("Stats")
local CoreGui = game:GetService("CoreGui")
local Player = Players.LocalPlayer
local Mouse = Player:GetMouse()
local Camera = workspace.CurrentCamera
for _, old in ipairs(CoreGui:GetChildren()) do
if old.Name == "F3_Final_Fixed" then old:Destroy() end
end
local sg = Instance.new("ScreenGui", CoreGui)
sg.Name = "F3_Final_Fixed"
sg.IgnoreGuiInset = true
local function makeDraggable(obj)
local dragging, dragInput, dragStart, startPos
obj.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = obj.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
obj.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragging then
local delta = input.Position - dragStart
obj.Position = UDim2.new(
startPos.X.Scale,
startPos.X.Offset + delta.X,
startPos.Y.Scale,
startPos.Y.Offset + delta.Y
)
end
end)
end
local btn = Instance.new("TextButton", sg)
btn.Size = UDim2.new(0, 80, 0, 30)
btn.Position = UDim2.new(0, 10, 0, 10)
btn.Text = "F3 MENU"
btn.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
btn.TextColor3 = Color3.new(1, 1, 1)
btn.Font = Enum.Font.SourceSansBold
btn.BorderSizePixel = 0
makeDraggable(btn)
local frame = Instance.new("Frame", sg)
frame.Size = UDim2.new(0, 300, 0, 480)
frame.Position = UDim2.new(0, 10, 0, 50)
frame.BackgroundColor3 = Color3.new(0, 0, 0)
frame.BackgroundTransparency = 0.4
frame.BorderSizePixel = 0
frame.Active = true
makeDraggable(frame)
local info = Instance.new("TextLabel", frame)
info.Size = UDim2.new(1, -20, 0, 200)
info.Position = UDim2.new(0, 10, 0, 10)
info.BackgroundTransparency = 1
info.TextColor3 = Color3.new(1, 1, 1)
info.TextXAlignment = Enum.TextXAlignment.Left
info.TextYAlignment = Enum.TextYAlignment.Top
info.Font = Enum.Font.Code
info.TextSize = 13
info.RichText = true
local function makeGraph(name, yPos, color)
local label = Instance.new("TextLabel", frame)
label.Text = name
label.Size = UDim2.new(1, 0, 0, 15)
label.Position = UDim2.new(0, 10, 0, yPos - 18)
label.TextColor3 = color
label.BackgroundTransparency = 1
label.TextSize = 10
label.Font = Enum.Font.Code
label.TextXAlignment = Enum.TextXAlignment.Left
local gFrame = Instance.new("Frame", frame)
gFrame.Size = UDim2.new(1, -20, 0, 40)
gFrame.Position = UDim2.new(0, 10, 0, yPos)
gFrame.BackgroundColor3 = Color3.new(0, 0, 0)
gFrame.BackgroundTransparency = 0.7
local bars = {}
for i = 1, 30 do
local b = Instance.new("Frame", gFrame)
b.Size = UDim2.new(1/30, -1, 0.1, 0)
b.Position = UDim2.new((i-1)/30, 0, 1, 0)
b.AnchorPoint = Vector2.new(0, 1)
b.BackgroundColor3 = color
b.BorderSizePixel = 0
bars[i] = b
end
return bars
end
local fBars = makeGraph("FPS PERFORMANCE", 250, Color3.new(0, 1, 0))
local tBars = makeGraph("TPS (PHYSICS)", 310, Color3.new(1, 1, 0))
local pBars = makeGraph("NETWORK PING", 370, Color3.new(0, 0.8, 1))
local gizmo = Instance.new("Frame", sg)
gizmo.Size = UDim2.new(0, 80, 0, 80)
gizmo.Position = UDim2.new(1, -100, 0, 20)
gizmo.BackgroundTransparency = 1
local function addAxis(color, name)
local a = Instance.new("Frame", gizmo)
a.Size = UDim2.new(0, 2, 0, 30)
a.BackgroundColor3 = color
a.AnchorPoint = Vector2.new(0.5, 0.5)
local t = Instance.new("TextLabel", a)
t.Text = name; t.TextColor3 = color; t.Size = UDim2.new(0,10,0,10); t.Position = UDim2.new(0,0,0,-12); t.BackgroundTransparency = 1
return a
end
local axX, axY, axZ = addAxis(Color3.new(1,0,0),"X"), addAxis(Color3.new(0,1,0),"Y"), addAxis(Color3.new(0,0,1),"Z")
local fpsH, tpsH, pngH = {}, {}, {}
local lastT = tick()
local fr = 0
RunService.RenderStepped:Connect(function()
if not frame.Visible then return end
fr = fr + 1
if tick() - lastT >= 1 then
local fps = fr
local tps = workspace:GetRealPhysicsFPS()
local png = Stats.Network.ServerStatsItem["Data Ping"]:GetValue()
local function updateH(tab, val, bars, max)
table.insert(tab, val); if #tab > 30 then table.remove(tab, 1) end
for i, v in ipairs(tab) do
if bars[i] then bars[i].Size = UDim2.new(1/30, -1, math.clamp(v/max, 0.1, 1), 0) end
end
end
updateH(fpsH, fps, fBars, 60)
updateH(tpsH, tps, tBars, 60)
updateH(pngH, png, pBars, 300)
fr = 0; lastT = tick()
end
local root = Player.Character and Player.Character:FindFirstChild("HumanoidRootPart")
local hum = Player.Character and Player.Character:FindFirstChild("Humanoid")
local speed = root and (root.Velocity * Vector3.new(1,0,1)).Magnitude * 1.097 or 0
info.Text = string.format(
"[ SYSTEM ]\nFPS: %d | Ping: %s\nTPS: %.1f | Mem: %.1f MB\n\n" ..
"[ PLAYER ]\nXYZ: %.1f, %.1f, %.1f\nSpeed: %.1f km/h\nState: %s\n\n" ..
"[ CURSOR ]\nTarget: %s\nDist: %.1f",
fpsH[#fpsH] or 0, Stats.Network.ServerStatsItem["Data Ping"]:GetValueString(),
workspace:GetRealPhysicsFPS(), Stats:GetTotalMemoryUsageMb(),
root and root.Position.X or 0, root and root.Position.Y or 0, root and root.Position.Z or 0,
speed, hum and tostring(hum:GetState()):gsub("Enum.HumanoidStateType.", "") or "N/A",
Mouse.Target and Mouse.Target.Name:sub(1,15) or "None",
(root and Mouse.Target) and (root.Position - Mouse.Target.Position).Magnitude or 0
)
local cf = Camera.CFrame
local function rot(gui, vec)
local loc = cf:VectorToObjectSpace(vec)
gui.Position = UDim2.new(0.5 + (loc.X * 0.4), 0, 0.5 - (loc.Y * 0.4), 0)
gui.Rotation = math.deg(math.atan2(loc.X, loc.Y))
gui.BackgroundTransparency = loc.Z < 0 and 0 or 0.7
end
rot(axX, Vector3.new(1,0,0)); rot(axY, Vector3.new(0,1,0)); rot(axZ, Vector3.new(0,0,1))
end)
btn.MouseButton1Click:Connect(function()
frame.Visible = not frame.Visible
gizmo.Visible = frame.Visible
end)
UserInputService.InputBegan:Connect(function(i, p)
if not p and i.KeyCode == Enum.KeyCode.F3 then
frame.Visible = not frame.Visible
gizmo.Visible = frame.Visible
end
end)