--[[
TP TOOL v8 | Silent AC Bypass + Pixel Font + Pixel Icons + Keybind Menu + Mobile
[MB3] = TP to mouse position
[X] = Toggle TP on/off
[P] = Open player TP menu
[B] = Set waypoint
[N] = TP to waypoint
[DELETE] = Clear waypoint
[COMMA] = Open keybind settings
]]
------------------------------------------------------------------------
-- CLEANUP OLD INSTANCE
------------------------------------------------------------------------
pcall(function()
local pg = game:GetService("Players").LocalPlayer.PlayerGui
for _, g in pairs(pg:GetChildren()) do
if g.Name == "TPToolGui_v8" then g:Destroy() end
end
end)
pcall(function()
if _G._TPv8Conns then
for _, c in pairs(_G._TPv8Conns) do
pcall(function() c:Disconnect() end)
end
end
end)
_G._TPv8Conns = {}
local function conn(c) table.insert(_G._TPv8Conns, c) return c end
------------------------------------------------------------------------
-- SERVICES
------------------------------------------------------------------------
local plrs = game:GetService("Players")
local uis = game:GetService("UserInputService")
local rs = game:GetService("RunService")
local ts = game:GetService("TweenService")
local lp = plrs.LocalPlayer
local mouse = lp:GetMouse()
local char, hmn, hrp
local function grab()
char = lp.Character
if not char then return false end
hmn = char:FindFirstChildOfClass("Humanoid")
hrp = char:FindFirstChild("HumanoidRootPart")
return hrp ~= nil and hmn ~= nil
end
grab()
conn(lp.CharacterAdded:Connect(function(c)
c:WaitForChild("HumanoidRootPart")
task.wait(0.2)
grab()
end))
local enabled = true
local waypoint = nil
local playerListOpen = false
local bypassing = false
local settingsOpen = false
local rebinding = nil -- which action is being rebound
------------------------------------------------------------------------
-- KEYBINDS (editable)
------------------------------------------------------------------------
local Keybinds = {
toggle = {type = "key", code = Enum.KeyCode.X, name = "X"},
players = {type = "key", code = Enum.KeyCode.P, name = "P"},
setWP = {type = "key", code = Enum.KeyCode.B, name = "B"},
goWP = {type = "key", code = Enum.KeyCode.N, name = "N"},
clearWP = {type = "key", code = Enum.KeyCode.Delete, name = "DEL"},
teleport = {type = "mouse", code = Enum.UserInputType.MouseButton3, name = "MB3"},
settings = {type = "key", code = Enum.KeyCode.Comma, name = ","},
}
-- Restore saved keybinds from _G if re-executing
if _G._TPv8Keybinds then
for k, v in pairs(_G._TPv8Keybinds) do
if Keybinds[k] then
Keybinds[k] = v
end
end
end
-- Action display names
local ACTION_NAMES = {
teleport = "TELEPORT",
toggle = "TOGGLE",
players = "PLAYERS",
setWP = "SET WP",
goWP = "GO WP",
clearWP = "CLR WP",
settings = "SETTINGS",
}
-- Order for display
local ACTION_ORDER = {"teleport","toggle","players","setWP","goWP","clearWP","settings"}
-- Get friendly name for a key/mouse input
local function GetInputName(inputType, keyCode)
if inputType == "mouse" then
if keyCode == Enum.UserInputType.MouseButton1 then return "MB1" end
if keyCode == Enum.UserInputType.MouseButton2 then return "MB2" end
if keyCode == Enum.UserInputType.MouseButton3 then return "MB3" end
return "MOUSE"
else
local name = keyCode.Name
-- Clean up common names
if name == "LeftShift" then return "LSHIFT" end
if name == "RightShift" then return "RSHIFT" end
if name == "LeftControl" then return "LCTRL" end
if name == "RightControl" then return "RCTRL" end
if name == "LeftAlt" then return "LALT" end
if name == "RightAlt" then return "RALT" end
if name == "Delete" then return "DEL" end
if name == "Backspace" then return "BKSP" end
if name == "Return" then return "ENTER" end
if name == "Escape" then return "ESC" end
if name == "Space" then return "SPACE" end
if name == "Comma" then return "," end
if name == "Period" then return "." end
if name == "Slash" then return "/" end
if name == "Semicolon" then return ";" end
if name == "BackSlash" then return "\\" end
if name == "Minus" then return "-" end
if name == "Equals" then return "=" end
if #name == 4 and name:sub(1,3) == "Key" then return name:sub(4,4) end -- "KeyQ" -> "Q"
if #name <= 4 then return name:upper() end
return name:upper():sub(1, 5)
end
end
------------------------------------------------------------------------
-- COLORS
------------------------------------------------------------------------
local C = {
bg = Color3.fromRGB(24, 24, 32),
panel = Color3.fromRGB(32, 32, 44),
inner = Color3.fromRGB(40, 40, 56),
border = Color3.fromRGB(80, 60, 200),
accent = Color3.fromRGB(120, 90, 255),
gold = Color3.fromRGB(255, 210, 60),
green = Color3.fromRGB(50, 255, 120),
red = Color3.fromRGB(255, 70, 70),
purple = Color3.fromRGB(180, 100, 255),
yellow = Color3.fromRGB(255, 240, 80),
gray = Color3.fromRGB(160, 160, 180),
dimgray = Color3.fromRGB(100, 100, 120),
white = Color3.fromRGB(230, 230, 240),
btn = Color3.fromRGB(45, 45, 62),
btnhov = Color3.fromRGB(65, 55, 100),
btnact = Color3.fromRGB(90, 50, 150),
flash = Color3.fromRGB(120, 80, 255),
orange = Color3.fromRGB(255, 170, 50),
}
------------------------------------------------------------------------
-- PIXEL FONT
------------------------------------------------------------------------
local PX = 2
local CW = 5
local CH = 7
local SP = 1
local GLYPHS = {
A={"01110","10001","10001","11111","10001","10001","10001"},
B={"11110","10001","10001","11110","10001","10001","11110"},
C={"01110","10001","10000","10000","10000","10001","01110"},
D={"11100","10010","10001","10001","10001","10010","11100"},
E={"11111","10000","10000","11110","10000","10000","11111"},
F={"11111","10000","10000","11110","10000","10000","10000"},
G={"01110","10001","10000","10111","10001","10001","01110"},
H={"10001","10001","10001","11111","10001","10001","10001"},
I={"11111","00100","00100","00100","00100","00100","11111"},
J={"00111","00010","00010","00010","00010","10010","01100"},
K={"10001","10010","10100","11000","10100","10010","10001"},
L={"10000","10000","10000","10000","10000","10000","11111"},
M={"10001","11011","10101","10101","10001","10001","10001"},
N={"10001","11001","10101","10011","10001","10001","10001"},
O={"01110","10001","10001","10001","10001","10001","01110"},
P={"11110","10001","10001","11110","10000","10000","10000"},
Q={"01110","10001","10001","10001","10101","10010","01101"},
R={"11110","10001","10001","11110","10100","10010","10001"},
S={"01111","10000","10000","01110","00001","00001","11110"},
T={"11111","00100","00100","00100","00100","00100","00100"},
U={"10001","10001","10001","10001","10001","10001","01110"},
V={"10001","10001","10001","10001","01010","01010","00100"},
W={"10001","10001","10001","10101","10101","11011","10001"},
X={"10001","10001","01010","00100","01010","10001","10001"},
Y={"10001","10001","01010","00100","00100","00100","00100"},
Z={"11111","00001","00010","00100","01000","10000","11111"},
["0"]={"01110","10011","10101","10101","10101","11001","01110"},
["1"]={"00100","01100","00100","00100","00100","00100","01110"},
["2"]={"01110","10001","00001","00110","01000","10000","11111"},
["3"]={"01110","10001","00001","00110","00001","10001","01110"},
["4"]={"00010","00110","01010","10010","11111","00010","00010"},
["5"]={"11111","10000","11110","00001","00001","10001","01110"},
["6"]={"00110","01000","10000","11110","10001","10001","01110"},
["7"]={"11111","00001","00010","00100","01000","01000","01000"},
["8"]={"01110","10001","10001","01110","10001","10001","01110"},
["9"]={"01110","10001","10001","01111","00001","00010","01100"},
[":"]={"00000","00100","00100","00000","00100","00100","00000"},
[","]={"00000","00000","00000","00000","00000","00100","01000"},
["-"]={"00000","00000","00000","11111","00000","00000","00000"},
["."]={"00000","00000","00000","00000","00000","00000","00100"},
["!"]={"00100","00100","00100","00100","00100","00000","00100"},
["?"]={"01110","10001","00001","00110","00100","00000","00100"},
["="]={"00000","00000","11111","00000","11111","00000","00000"},
["+"]={"00000","00100","00100","11111","00100","00100","00000"},
["/"]={"00001","00010","00010","00100","01000","01000","10000"},
["("]={"00010","00100","01000","01000","01000","00100","00010"},
[")"]={"01000","00100","00010","00010","00010","00100","01000"},
["["]={"01110","01000","01000","01000","01000","01000","01110"},
["]"]={"01110","00010","00010","00010","00010","00010","01110"},
[">"]={"10000","01000","00100","00010","00100","01000","10000"},
["<"]={"00010","00100","01000","10000","01000","00100","00010"},
["|"]={"00100","00100","00100","00100","00100","00100","00100"},
["@"]={"01110","10001","10101","10111","10000","10001","01110"},
[" "]={"00000","00000","00000","00000","00000","00000","00000"},
["\\"]={"10000","01000","01000","00100","00010","00010","00001"},
[";"]={"00000","00100","00100","00000","00100","00100","01000"},
}
local function RenderPixelText(parent, text, color, scale)
scale = scale or 1
local ps = PX * scale
local container = Instance.new("Frame")
container.BackgroundTransparency = 1
container.BorderSizePixel = 0
container.Parent = parent
container:SetAttribute("_txt", text)
container:SetAttribute("_col", tostring(color))
local totalW = 0
local up = string.upper(text)
for i = 1, #up do
local ch = up:sub(i, i)
local g = GLYPHS[ch]
if not g then
totalW = totalW + (CW + SP) * ps
else
for row = 1, CH do
local rd = g[row]
if rd then
for col = 1, CW do
if rd:sub(col, col) == "1" then
local px = Instance.new("Frame")
px.Size = UDim2.new(0, ps, 0, ps)
px.Position = UDim2.new(0, totalW + (col-1)*ps, 0, (row-1)*ps)
px.BackgroundColor3 = color
px.BorderSizePixel = 0
px.Parent = container
end
end
end
end
totalW = totalW + (CW + SP) * ps
end
end
container.Size = UDim2.new(0, totalW, 0, CH * ps)
return container
end
local function UpdatePixelText(container, text, color, scale)
local oldTxt = container:GetAttribute("_txt")
local oldCol = container:GetAttribute("_col")
local newCol = tostring(color)
if oldTxt == text and oldCol == newCol then return end
for _, c in pairs(container:GetChildren()) do
if c:IsA("Frame") then c:Destroy() end
end
container:SetAttribute("_txt", text)
container:SetAttribute("_col", newCol)
scale = scale or 1
local ps = PX * scale
local totalW = 0
local up = string.upper(text)
for i = 1, #up do
local ch = up:sub(i, i)
local g = GLYPHS[ch]
if not g then
totalW = totalW + (CW + SP) * ps
else
for row = 1, CH do
local rd = g[row]
if rd then
for col = 1, CW do
if rd:sub(col, col) == "1" then
local px = Instance.new("Frame")
px.Size = UDim2.new(0, ps, 0, ps)
px.Position = UDim2.new(0, totalW + (col-1)*ps, 0, (row-1)*ps)
px.BackgroundColor3 = color
px.BorderSizePixel = 0
px.Parent = container
end
end
end
end
totalW = totalW + (CW + SP) * ps
end
end
container.Size = UDim2.new(0, totalW, 0, CH * ps)
end
------------------------------------------------------------------------
-- PIXEL ICONS (7x7)
------------------------------------------------------------------------
local ICON_DATA = {
crosshair = {
"0010100","0000000","1000001","0000000","1000001","0000000","0010100",
},
shield = {
"0111110","1111111","1111111","1111111","0111110","0011100","0001000",
},
toggle = {
"0001000","0001000","0110110","1000001","1000001","1000001","0111110",
},
flag = {
"1111100","1111100","1111100","1000000","1000000","1000000","1000000",
},
people = {
"0100010","1110111","0100010","0100010","0000000","0000000","0000000",
},
star = {
"0001000","0001000","0111110","1111111","0111110","0010100","0100010",
},
arrow = {
"0001000","0011100","0101010","1001001","0001000","0001000","0001000",
},
gear = {
"0101010","1110111","0100010","1100011","0100010","1110111","0101010",
},
}
local function BuildPixelIcon(parent, iconName, size, pos, color)
local data = ICON_DATA[iconName]
if not data then return nil end
local frame = Instance.new("Frame")
frame.Size = size or UDim2.new(0, 14, 0, 14)
frame.Position = pos or UDim2.new(0, 0, 0, 0)
frame.BackgroundTransparency = 1
frame.BorderSizePixel = 0
frame.Parent = parent
local ipx = 2
for row = 1, 7 do
local rd = data[row]
if rd then
for col = 1, 7 do
if rd:sub(col, col) == "1" then
local px = Instance.new("Frame")
px.Size = UDim2.new(0, ipx, 0, ipx)
px.Position = UDim2.new(0, (col-1)*ipx, 0, (row-1)*ipx)
px.BackgroundColor3 = color or C.white
px.BorderSizePixel = 0
px.Parent = frame
end
end
end
end
return frame
end
local function RecolorIcon(iconFrame, color)
if not iconFrame then return end
for _, px in pairs(iconFrame:GetChildren()) do
if px:IsA("Frame") then px.BackgroundColor3 = color end
end
end
------------------------------------------------------------------------
-- ANTICHEAT BYPASS
------------------------------------------------------------------------
local AC = {}
AC.noclipParts = {}
AC.origWS = 16
AC.origJP = 50
function AC.enableNoclip()
if not grab() then return end
AC.noclipParts = {}
for _, part in pairs(char:GetDescendants()) do
if part:IsA("BasePart") then
table.insert(AC.noclipParts, {part = part, cc = part.CanCollide})
part.CanCollide = false
end
end
end
function AC.disableNoclip()
for _, data in pairs(AC.noclipParts) do
pcall(function() data.part.CanCollide = data.cc end)
end
AC.noclipParts = {}
end
function AC.zeroVelocity()
if not grab() then return end
pcall(function()
hrp.Velocity = Vector3.new(0, 0, 0)
hrp.AssemblyLinearVelocity = Vector3.new(0, 0, 0)
hrp.AssemblyAngularVelocity = Vector3.new(0, 0, 0)
end)
end
function AC.silentTP(targetPos)
if not grab() then return end
local startPos = hrp.Position
local diff = targetPos - startPos
local dist = diff.Magnitude
if dist < 60 then
hrp.CFrame = CFrame.new(targetPos)
AC.zeroVelocity()
return
end
local stepSize = 50
local steps = math.ceil(dist / stepSize)
local dir = diff.Unit
AC.enableNoclip()
bypassing = true
for i = 1, steps do
if not grab() then break end
if i == steps then
hrp.CFrame = CFrame.new(targetPos)
else
hrp.CFrame = CFrame.new(startPos + dir * (stepSize * i))
end
AC.zeroVelocity()
rs.RenderStepped:Wait()
end
bypassing = false
AC.disableNoclip()
AC.zeroVelocity()
end
function AC.spoofHumanoid()
if not grab() or not hmn then return end
pcall(function()
AC.origWS = hmn.WalkSpeed
AC.origJP = hmn.JumpPower
end)
end
function AC.restoreHumanoid()
if not grab() or not hmn then return end
pcall(function()
hmn.WalkSpeed = AC.origWS
hmn.JumpPower = AC.origJP
end)
end
------------------------------------------------------------------------
-- DRAGGABLE
------------------------------------------------------------------------
local function MakeDraggable(frame, handle)
handle = handle or frame
local dragging = false
local dragStart, startPos
conn(handle.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or
input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = frame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end))
conn(uis.InputChanged:Connect(function(input)
if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or
input.UserInputType == Enum.UserInputType.Touch) then
local delta = input.Position - dragStart
frame.Position = UDim2.new(
startPos.X.Scale, startPos.X.Offset + delta.X,
startPos.Y.Scale, startPos.Y.Offset + delta.Y
)
end
end))
end
------------------------------------------------------------------------
-- GUI
------------------------------------------------------------------------
local gui = Instance.new("ScreenGui")
gui.Name = "TPToolGui_v8"
gui.ResetOnSpawn = false
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.Parent = lp.PlayerGui
-- Main panel
local panel = Instance.new("Frame")
panel.Size = UDim2.new(0, 370, 0, 160)
panel.Position = UDim2.new(0.5, -185, 1, -180)
panel.BackgroundColor3 = C.panel
panel.BorderSizePixel = 0
panel.Parent = gui
Instance.new("UICorner", panel).CornerRadius = UDim.new(0, 8)
local ps1 = Instance.new("UIStroke", panel)
ps1.Thickness = 2
ps1.Color = C.border
ps1.Transparency = 0.3
-- Title bar
local titleBar = Instance.new("Frame")
titleBar.Size = UDim2.new(1, 0, 0, 26)
titleBar.BackgroundColor3 = C.bg
titleBar.BackgroundTransparency = 0.2
titleBar.BorderSizePixel = 0
titleBar.Parent = panel
Instance.new("UICorner", titleBar).CornerRadius = UDim.new(0, 8)
local tbFix = Instance.new("Frame")
tbFix.Size = UDim2.new(1, 0, 0, 8)
tbFix.Position = UDim2.new(0, 0, 1, -8)
tbFix.BackgroundColor3 = C.bg
tbFix.BackgroundTransparency = 0.2
tbFix.BorderSizePixel = 0
tbFix.Parent = titleBar
MakeDraggable(panel, titleBar)
BuildPixelIcon(titleBar, "star", UDim2.new(0, 14, 0, 14), UDim2.new(0, 8, 0, 6), C.gold)
local titleTC = Instance.new("Frame")
titleTC.Size = UDim2.new(0, 200, 0, 14)
titleTC.Position = UDim2.new(0, 28, 0, 6)
titleTC.BackgroundTransparency = 1
titleTC.Parent = titleBar
RenderPixelText(titleTC, "TP TOOL V8", C.gold, 1)
-- AC badge
local acBadge = Instance.new("Frame")
acBadge.Size = UDim2.new(0, 80, 0, 16)
acBadge.Position = UDim2.new(1, -88, 0, 5)
acBadge.BackgroundColor3 = C.green
acBadge.BackgroundTransparency = 0.85
acBadge.BorderSizePixel = 0
acBadge.Parent = titleBar
Instance.new("UICorner", acBadge).CornerRadius = UDim.new(0, 4)
BuildPixelIcon(acBadge, "shield", UDim2.new(0, 14, 0, 14), UDim2.new(0, 3, 0, 1), C.green)
local acBTC = Instance.new("Frame")
acBTC.Size = UDim2.new(0, 55, 0, 14)
acBTC.Position = UDim2.new(0, 18, 0, 1)
acBTC.BackgroundTransparency = 1
acBTC.Parent = acBadge
RenderPixelText(acBTC, "SILENT", C.green, 1)
-- Content
local content = Instance.new("Frame")
content.Size = UDim2.new(1, -12, 1, -34)
content.Position = UDim2.new(0, 6, 0, 30)
content.BackgroundColor3 = C.inner
content.BackgroundTransparency = 0.5
content.BorderSizePixel = 0
content.Parent = panel
Instance.new("UICorner", content).CornerRadius = UDim.new(0, 6)
-- Helper to build a row
local function MakeRow(parent, yOff, iconName, iconColor)
local r = Instance.new("Frame")
r.Size = UDim2.new(1, -12, 0, 18)
r.Position = UDim2.new(0, 6, 0, yOff)
r.BackgroundTransparency = 1
r.Parent = parent
local icon = BuildPixelIcon(r, iconName, UDim2.new(0, 14, 0, 14), UDim2.new(0, 0, 0, 2), iconColor)
local tc = Instance.new("Frame")
tc.Size = UDim2.new(0, 330, 0, 14)
tc.Position = UDim2.new(0, 18, 0, 2)
tc.BackgroundTransparency = 1
tc.Parent = r
return r, icon, tc
end
local r1, statusIconF, statusC = MakeRow(content, 6, "toggle", C.green)
local statusText = RenderPixelText(statusC, "TP ON MB3=TP X=TOG", C.green, 1)
local r2, _, coordsC = MakeRow(content, 28, "arrow", C.gray)
local coordsText = RenderPixelText(coordsC, "POS 0 0 0", C.gray, 1)
local r3, targetIconF, targetC = MakeRow(content, 50, "crosshair", C.yellow)
local targetText = RenderPixelText(targetC, "TARGET ...", C.yellow, 1)
local r4, wpIconF, wpC = MakeRow(content, 72, "flag", C.dimgray)
local wpText = RenderPixelText(wpC, "WP NONE B=SET N=GO", C.dimgray, 1)
local r5, acIconF, acC = MakeRow(content, 94, "shield", C.accent)
local acText = RenderPixelText(acC, "AC ACTIVE ,=BINDS", C.accent, 1)
------------------------------------------------------------------------
-- CROSSHAIR
------------------------------------------------------------------------
local crossFrame = Instance.new("Frame")
crossFrame.Size = UDim2.new(0, 14, 0, 14)
crossFrame.Position = UDim2.new(0.5, -7, 0.5, -7)
crossFrame.BackgroundTransparency = 1
crossFrame.Parent = gui
for _, pos in pairs({
{6,0},{6,2},{6,4},{6,10},{6,12},
{0,6},{2,6},{4,6},{10,6},{12,6},
}) do
local px = Instance.new("Frame")
px.Size = UDim2.new(0, 2, 0, 2)
px.Position = UDim2.new(0, pos[1], 0, pos[2])
px.BackgroundColor3 = C.purple
px.BorderSizePixel = 0
px.Parent = crossFrame
end
local cDot = Instance.new("Frame")
cDot.Size = UDim2.new(0, 2, 0, 2)
cDot.Position = UDim2.new(0, 6, 0, 6)
cDot.BackgroundColor3 = C.accent
cDot.BorderSizePixel = 0
cDot.Parent = crossFrame
-- Flash
local flash = Instance.new("Frame")
flash.Size = UDim2.new(1, 0, 1, 0)
flash.BackgroundColor3 = C.flash
flash.BackgroundTransparency = 1
flash.BorderSizePixel = 0
flash.ZIndex = 10
flash.Parent = gui
------------------------------------------------------------------------
-- KEYBIND SETTINGS PANEL
------------------------------------------------------------------------
local settingsPanel = Instance.new("Frame")
settingsPanel.Size = UDim2.new(0, 260, 0, 230)
settingsPanel.Position = UDim2.new(1, -275, 0.5, -115)
settingsPanel.BackgroundColor3 = C.panel
settingsPanel.BorderSizePixel = 0
settingsPanel.Visible = false
settingsPanel.ZIndex = 5
settingsPanel.Parent = gui
Instance.new("UICorner", settingsPanel).CornerRadius = UDim.new(0, 8)
local ss1 = Instance.new("UIStroke", settingsPanel)
ss1.Thickness = 2
ss1.Color = C.orange
ss1.Transparency = 0.3
-- Settings title bar
local sTB = Instance.new("Frame")
sTB.Size = UDim2.new(1, 0, 0, 26)
sTB.BackgroundColor3 = C.bg
sTB.BackgroundTransparency = 0.2
sTB.BorderSizePixel = 0
sTB.ZIndex = 5
sTB.Parent = settingsPanel
Instance.new("UICorner", sTB).CornerRadius = UDim.new(0, 8)
local sTBFix = Instance.new("Frame")
sTBFix.Size = UDim2.new(1, 0, 0, 8)
sTBFix.Position = UDim2.new(0, 0, 1, -8)
sTBFix.BackgroundColor3 = C.bg
sTBFix.BackgroundTransparency = 0.2
sTBFix.BorderSizePixel = 0
sTBFix.ZIndex = 5
sTBFix.Parent = sTB
MakeDraggable(settingsPanel, sTB)
BuildPixelIcon(sTB, "gear", UDim2.new(0, 14, 0, 14), UDim2.new(0, 8, 0, 6), C.orange).ZIndex = 6
local sTitleC = Instance.new("Frame")
sTitleC.Size = UDim2.new(0, 150, 0, 14)
sTitleC.Position = UDim2.new(0, 28, 0, 6)
sTitleC.BackgroundTransparency = 1
sTitleC.ZIndex = 5
sTitleC.Parent = sTB
RenderPixelText(sTitleC, "KEYBINDS", C.orange, 1)
-- Settings content
local sContent = Instance.new("Frame")
sContent.Size = UDim2.new(1, -12, 1, -34)
sContent.Position = UDim2.new(0, 6, 0, 30)
sContent.BackgroundColor3 = C.inner
sContent.BackgroundTransparency = 0.5
sContent.BorderSizePixel = 0
sContent.ZIndex = 5
sContent.Parent = settingsPanel
Instance.new("UICorner", sContent).CornerRadius = UDim.new(0, 6)
-- Hint text
local hintC = Instance.new("Frame")
hintC.Size = UDim2.new(0, 230, 0, 14)
hintC.Position = UDim2.new(0, 6, 1, -20)
hintC.BackgroundTransparency = 1
hintC.ZIndex = 5
hintC.Parent = sContent
RenderPixelText(hintC, "CLICK TO REBIND", C.dimgray, 1)
-- Build keybind rows
local bindButtons = {} -- action -> {btn, labelC}
local yPos = 4
for _, action in pairs(ACTION_ORDER) do
local row = Instance.new("Frame")
row.Size = UDim2.new(1, -12, 0, 22)
row.Position = UDim2.new(0, 6, 0, yPos)
row.BackgroundTransparency = 1
row.ZIndex = 5
row.Parent = sContent
-- Action name
local nameC = Instance.new("Frame")
nameC.Size = UDim2.new(0, 100, 0, 14)
nameC.Position = UDim2.new(0, 0, 0, 4)
nameC.BackgroundTransparency = 1
nameC.ZIndex = 5
nameC.Parent = row
RenderPixelText(nameC, ACTION_NAMES[action], C.gray, 1)
-- Bind button
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0, 90, 0, 20)
btn.Position = UDim2.new(1, -94, 0, 1)
btn.BackgroundColor3 = C.btn
btn.BorderSizePixel = 0
btn.Text = ""
btn.AutoButtonColor = false
btn.ZIndex = 6
btn.Parent = row
Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 4)
local btnStroke = Instance.new("UIStroke", btn)
btnStroke.Color = C.border
btnStroke.Transparency = 0.5
-- Key label inside button
local keyC = Instance.new("Frame")
keyC.Size = UDim2.new(0, 80, 0, 14)
keyC.Position = UDim2.new(0.5, -40, 0.5, -7)
keyC.BackgroundTransparency = 1
keyC.ZIndex = 7
keyC.Parent = btn
RenderPixelText(keyC, Keybinds[action].name, C.white, 1)
btn.MouseEnter:Connect(function()
if rebinding ~= action then
btn.BackgroundColor3 = C.btnhov
end
end)
btn.MouseLeave:Connect(function()
if rebinding ~= action then
btn.BackgroundColor3 = C.btn
end
end)
btn.MouseButton1Click:Connect(function()
-- Start rebinding this action
if rebinding then
-- Cancel previous rebind
local prev = bindButtons[rebinding]
if prev then
prev.btn.BackgroundColor3 = C.btn
UpdatePixelText(prev.keyC, Keybinds[rebinding].name, C.white, 1)
end
end
rebinding = action
btn.BackgroundColor3 = C.btnact
UpdatePixelText(keyC, "...", C.orange, 1)
end)
bindButtons[action] = {btn = btn, keyC = keyC}
yPos = yPos + 25
end
-- Function to update status text with current keybinds
local function refreshStatusText()
local tpKey = Keybinds.teleport.name
local togKey = Keybinds.toggle.name
if enabled then
UpdatePixelText(statusC, "TP ON " .. tpKey .. "=TP " .. togKey .. "=TOG", C.green, 1)
else
UpdatePixelText(statusC, "TP OFF " .. tpKey .. "=TP " .. togKey .. "=TOG", C.red, 1)
end
local wpKey = Keybinds.setWP.name
local goKey = Keybinds.goWP.name
if waypoint then
local w = waypoint
UpdatePixelText(wpC, string.format("WP %d %d %d %s=GO", math.floor(w.X), math.floor(w.Y), math.floor(w.Z), goKey), C.green, 1)
else
UpdatePixelText(wpC, "WP NONE " .. wpKey .. "=SET " .. goKey .. "=GO", C.dimgray, 1)
end
local setKey = Keybinds.settings.name
UpdatePixelText(acC, "AC ACTIVE " .. setKey .. "=BINDS", C.accent, 1)
end
------------------------------------------------------------------------
-- PLAYER LIST
------------------------------------------------------------------------
local plrPanel = Instance.new("Frame")
plrPanel.Size = UDim2.new(0, 220, 0, 220)
plrPanel.Position = UDim2.new(0, 12, 0.5, -110)
plrPanel.BackgroundColor3 = C.panel
plrPanel.BorderSizePixel = 0
plrPanel.Visible = false
plrPanel.Parent = gui
Instance.new("UICorner", plrPanel).CornerRadius = UDim.new(0, 8)
local pls1 = Instance.new("UIStroke", plrPanel)
pls1.Thickness = 2
pls1.Color = C.border
pls1.Transparency = 0.3
local plrTB = Instance.new("Frame")
plrTB.Size = UDim2.new(1, 0, 0, 24)
plrTB.BackgroundColor3 = C.bg
plrTB.BackgroundTransparency = 0.2
plrTB.BorderSizePixel = 0
plrTB.Parent = plrPanel
Instance.new("UICorner", plrTB).CornerRadius = UDim.new(0, 8)
MakeDraggable(plrPanel, plrTB)
BuildPixelIcon(plrTB, "people", UDim2.new(0, 14, 0, 14), UDim2.new(0, 6, 0, 5), C.purple)
local plrTitleC = Instance.new("Frame")
plrTitleC.Size = UDim2.new(0, 120, 0, 14)
plrTitleC.Position = UDim2.new(0, 24, 0, 5)
plrTitleC.BackgroundTransparency = 1
plrTitleC.Parent = plrTB
RenderPixelText(plrTitleC, "PLAYERS", C.purple, 1)
local plrScroll = Instance.new("ScrollingFrame")
plrScroll.Size = UDim2.new(1, -12, 1, -32)
plrScroll.Position = UDim2.new(0, 6, 0, 28)
plrScroll.BackgroundColor3 = C.inner
plrScroll.BackgroundTransparency = 0.5
plrScroll.BorderSizePixel = 0
plrScroll.ScrollBarThickness = 3
plrScroll.ScrollBarImageColor3 = C.accent
plrScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
plrScroll.Parent = plrPanel
Instance.new("UICorner", plrScroll).CornerRadius = UDim.new(0, 6)
local plrLayout = Instance.new("UIListLayout", plrScroll)
plrLayout.Padding = UDim.new(0, 3)
plrLayout.SortOrder = Enum.SortOrder.LayoutOrder
local function refreshPlrList()
for _, c in pairs(plrScroll:GetChildren()) do
if c:IsA("TextButton") then c:Destroy() end
end
local count = 0
for _, p in pairs(plrs:GetPlayers()) do
if p ~= lp then
count = count + 1
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1, -6, 0, 22)
btn.BackgroundColor3 = C.btn
btn.BorderSizePixel = 0
btn.AutoButtonColor = false
btn.Text = ""
btn.Parent = plrScroll
Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 4)
BuildPixelIcon(btn, "people", UDim2.new(0, 14, 0, 14), UDim2.new(0, 4, 0, 4), C.gray)
local nc = Instance.new("Frame")
nc.Size = UDim2.new(0, 160, 0, 14)
nc.Position = UDim2.new(0, 22, 0, 4)
nc.BackgroundTransparency = 1
nc.Parent = btn
RenderPixelText(nc, p.DisplayName, C.white, 1)
btn.MouseEnter:Connect(function() btn.BackgroundColor3 = C.btnhov end)
btn.MouseLeave:Connect(function() btn.BackgroundColor3 = C.btn end)
btn.MouseButton1Click:Connect(function()
if not grab() then return end
local tc = p.Character
if tc and tc:FindFirstChild("HumanoidRootPart") then
doTP(tc.HumanoidRootPart.Position + Vector3.new(0, 3, 0))
end
end)
end
end
plrScroll.CanvasSize = UDim2.new(0, 0, 0, count * 25)
end
------------------------------------------------------------------------
-- TP FUNCTION
------------------------------------------------------------------------
function doTP(pos)
if not grab() then return end
flash.BackgroundTransparency = 0.35
ts:Create(flash, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
BackgroundTransparency = 1
}):Play()
AC.spoofHumanoid()
AC.silentTP(pos + Vector3.new(0, 0.5, 0))
AC.restoreHumanoid()
UpdatePixelText(acC, "AC CLEAN", C.green, 1)
RecolorIcon(acIconF, C.green)
task.delay(2, function()
refreshStatusText()
RecolorIcon(acIconF, C.accent)
end)
end
------------------------------------------------------------------------
-- INPUT HANDLING (with rebind support)
------------------------------------------------------------------------
local function checkBind(action, inputObj)
local bind = Keybinds[action]
if not bind or bind.type == "none" then return false end
if bind.type == "key" then
return inputObj.KeyCode == bind.code
elseif bind.type == "mouse" then
return inputObj.UserInputType == bind.code
end
return false
end
conn(uis.InputBegan:Connect(function(inp, gpe)
-- REBIND MODE: capture next input
if rebinding then
local action = rebinding
local bd = bindButtons[action]
-- Determine if key or mouse
if inp.UserInputType == Enum.UserInputType.Keyboard then
local name = GetInputName("key", inp.KeyCode)
Keybinds[action] = {type = "key", code = inp.KeyCode, name = name}
elseif inp.UserInputType == Enum.UserInputType.MouseButton1 then
-- MB1 click on button starts rebind, don't bind MB1
-- Only bind if not clicking inside settings panel
return
elseif inp.UserInputType == Enum.UserInputType.MouseButton2 then
Keybinds[action] = {type = "mouse", code = Enum.UserInputType.MouseButton2, name = "MB2"}
elseif inp.UserInputType == Enum.UserInputType.MouseButton3 then
Keybinds[action] = {type = "mouse", code = Enum.UserInputType.MouseButton3, name = "MB3"}
else
return
end
-- Remove this key from any OTHER action (exclusive keybinds)
local newBind = Keybinds[action]
for _, otherAction in pairs(ACTION_ORDER) do
if otherAction ~= action then
local ob = Keybinds[otherAction]
if ob.type == newBind.type and ob.code == newBind.code then
Keybinds[otherAction] = {type = "none", code = nil, name = "---"}
local oBd = bindButtons[otherAction]
if oBd then
UpdatePixelText(oBd.keyC, "---", C.red, 1)
end
end
end
end
-- Update button display
UpdatePixelText(bd.keyC, Keybinds[action].name, C.white, 1)
bd.btn.BackgroundColor3 = C.btn
rebinding = nil
-- Save to _G for persistence across re-executes
_G._TPv8Keybinds = Keybinds
-- Refresh status text to show new keybinds
refreshStatusText()
return
end
if gpe then return end
-- Toggle
if checkBind("toggle", inp) then
enabled = not enabled
if enabled then
RecolorIcon(statusIconF, C.green)
else
RecolorIcon(statusIconF, C.red)
end
refreshStatusText()
end
-- Players
if checkBind("players", inp) then
playerListOpen = not playerListOpen
plrPanel.Visible = playerListOpen
if playerListOpen then refreshPlrList() end
end
-- Set waypoint
if checkBind("setWP", inp) then
if grab() then
waypoint = hrp.Position
RecolorIcon(wpIconF, C.green)
refreshStatusText()
end
end
-- Go waypoint
if checkBind("goWP", inp) then
if waypoint then doTP(waypoint) end
end
-- Clear waypoint
if checkBind("clearWP", inp) then
waypoint = nil
RecolorIcon(wpIconF, C.dimgray)
refreshStatusText()
end
-- Settings
if checkBind("settings", inp) then
settingsOpen = not settingsOpen
settingsPanel.Visible = settingsOpen
if not settingsOpen and rebinding then
-- Cancel any active rebind
local bd = bindButtons[rebinding]
if bd then
bd.btn.BackgroundColor3 = C.btn
UpdatePixelText(bd.keyC, Keybinds[rebinding].name, C.white, 1)
end
rebinding = nil
end
end
-- Teleport (mouse buttons handled here too)
if checkBind("teleport", inp) then
if enabled then
local hit = mouse.Hit
if hit then
doTP(hit.Position)
local p = hit.Position
UpdatePixelText(targetC, string.format("TP! %d %d %d", math.floor(p.X), math.floor(p.Y), math.floor(p.Z)), C.purple, 1)
RecolorIcon(targetIconF, C.purple)
end
end
end
end))
-- Mouse button handlers removed (InputBegan handles all binds exclusively)
------------------------------------------------------------------------
-- MOBILE SUPPORT
------------------------------------------------------------------------
local isMobile = uis.TouchEnabled and not uis.KeyboardEnabled
if isMobile then
-- Mobile button bar at bottom-left
local mobileBar = Instance.new("Frame")
mobileBar.Size = UDim2.new(0, 320, 0, 52)
mobileBar.Position = UDim2.new(0, 10, 1, -65)
mobileBar.BackgroundColor3 = C.bg
mobileBar.BackgroundTransparency = 0.3
mobileBar.BorderSizePixel = 0
mobileBar.Parent = gui
Instance.new("UICorner", mobileBar).CornerRadius = UDim.new(0, 8)
Instance.new("UIStroke", mobileBar).Color = C.border
local mButtons = {
{label = "TP", icon = "crosshair", color = C.purple, action = "teleport_touch"},
{label = "TOG", icon = "toggle", color = C.green, action = "toggle"},
{label = "PLR", icon = "people", color = C.accent, action = "players"},
{label = "WP+", icon = "flag", color = C.orange, action = "setWP"},
{label = "GO", icon = "arrow", color = C.yellow, action = "goWP"},
{label = "SET", icon = "gear", color = C.gray, action = "settings"},
}
for idx, info in pairs(mButtons) do
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0, 48, 0, 44)
btn.Position = UDim2.new(0, 6 + (idx - 1) * 52, 0, 4)
btn.BackgroundColor3 = C.btn
btn.BorderSizePixel = 0
btn.Text = ""
btn.AutoButtonColor = false
btn.ZIndex = 8
btn.Parent = mobileBar
Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 6)
BuildPixelIcon(btn, info.icon, UDim2.new(0, 14, 0, 14), UDim2.new(0.5, -7, 0, 3), info.color).ZIndex = 9
local lc = Instance.new("Frame")
lc.Size = UDim2.new(0, 40, 0, 14)
lc.Position = UDim2.new(0.5, -20, 0, 22)
lc.BackgroundTransparency = 1
lc.ZIndex = 9
lc.Parent = btn
RenderPixelText(lc, info.label, info.color, 1)
btn.MouseEnter:Connect(function() btn.BackgroundColor3 = C.btnhov end)
btn.MouseLeave:Connect(function() btn.BackgroundColor3 = C.btn end)
btn.MouseButton1Click:Connect(function()
if info.action == "teleport_touch" then
if enabled and grab() then
local hit = mouse.Hit
if hit then
doTP(hit.Position)
local p = hit.Position
UpdatePixelText(targetC, string.format("TP! %d %d %d", math.floor(p.X), math.floor(p.Y), math.floor(p.Z)), C.purple, 1)
RecolorIcon(targetIconF, C.purple)
end
end
elseif info.action == "toggle" then
enabled = not enabled
if enabled then
RecolorIcon(statusIconF, C.green)
else
RecolorIcon(statusIconF, C.red)
end
refreshStatusText()
elseif info.action == "players" then
playerListOpen = not playerListOpen
plrPanel.Visible = playerListOpen
if playerListOpen then refreshPlrList() end
elseif info.action == "setWP" then
if grab() then
waypoint = hrp.Position
RecolorIcon(wpIconF, C.green)
refreshStatusText()
end
elseif info.action == "goWP" then
if waypoint then doTP(waypoint) end
elseif info.action == "settings" then
settingsOpen = not settingsOpen
settingsPanel.Visible = settingsOpen
if not settingsOpen and rebinding then
local bd = bindButtons[rebinding]
if bd then
bd.btn.BackgroundColor3 = C.btn
UpdatePixelText(bd.keyC, Keybinds[rebinding].name, C.white, 1)
end
rebinding = nil
end
end
end)
end
-- Adjust main panel position for mobile
panel.Position = UDim2.new(0.5, -185, 1, -130)
end
------------------------------------------------------------------------
-- RENDER LOOP
------------------------------------------------------------------------
local elapsed = 0
conn(rs.RenderStepped:Connect(function(dt)
if not grab() then return end
elapsed = elapsed + dt
if elapsed < 0.2 then return end
elapsed = 0
local p = hrp.Position
UpdatePixelText(coordsC, string.format("POS %d %d %d", math.floor(p.X), math.floor(p.Y), math.floor(p.Z)), C.gray, 1)
if enabled and not bypassing then
local mh = mouse.Hit
if mh then
local mp = mh.Position
local dist = math.floor((mp - p).Magnitude)
UpdatePixelText(targetC, string.format("AIM %d %d %d D=%d", math.floor(mp.X), math.floor(mp.Y), math.floor(mp.Z), dist), C.yellow, 1)
RecolorIcon(targetIconF, C.yellow)
end
end
end))
-- Initial status refresh
refreshStatusText()
print("[TP TOOL v8] Loaded! Silent AC + Pixel UI + Keybind Settings")
print(" Press COMMA to open keybind settings")
print(" MB3=TP | X=Toggle | P=Players | B=WP | N=GoWP | DEL=ClearWP")