--[[
TP TOOL v3 | Advanced Executor Teleport
Custom pixel font (no Roblox fonts), draggable UI
[RIGHT CLICK] = TP to mouse position
[X] = Toggle TP on/off
[P] = Open player TP menu
[B] = Set waypoint
[N] = TP to waypoint
[DELETE] = Clear waypoint
]]
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()
lp.CharacterAdded:Connect(function(c)
c:WaitForChild("HumanoidRootPart")
task.wait(0.2)
grab()
end)
local enabled = true
local waypoint = nil
local playerListOpen = false
------------------------------------------------------------------------
-- PIXEL FONT (5x7 grid per character, Minecraft-style blocky)
------------------------------------------------------------------------
local PIXEL_SIZE = 2
local CHAR_W = 5
local CHAR_H = 7
local SPACING = 1
-- Each char is a 7-row string of 5 bits (1=pixel, 0=empty)
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"},
["["] = {"01110","01000","01000","01000","01000","01000","01110"},
["]"] = {"01110","00010","00010","00010","00010","00010","01110"},
["="] = {"00000","00000","11111","00000","11111","00000","00000"},
[">"] = {"10000","01000","00100","00010","00100","01000","10000"},
["<"] = {"00010","00100","01000","10000","01000","00100","00010"},
[" "] = {"00000","00000","00000","00000","00000","00000","00000"},
["+"] = {"00000","00100","00100","11111","00100","00100","00000"},
["@"] = {"01110","10001","10101","10111","10000","10001","01110"},
["("] = {"00010","00100","01000","01000","01000","00100","00010"},
[")"] = {"01000","00100","00010","00010","00010","00100","01000"},
["/"] = {"00001","00010","00010","00100","01000","01000","10000"},
["!"] = {"00100","00100","00100","00100","00100","00000","00100"},
["?"] = {"01110","10001","00001","00110","00100","00000","00100"},
}
-- Render pixel text into a parent frame, returns the frame
local function RenderPixelText(parent, text, color, scale)
scale = scale or 1
local ps = PIXEL_SIZE * scale
local container = Instance.new("Frame")
container.BackgroundTransparency = 1
container.BorderSizePixel = 0
container.Parent = parent
local totalW = 0
local upText = string.upper(text)
for i = 1, #upText do
local ch = upText:sub(i, i)
local glyph = GLYPHS[ch]
if not glyph then
-- unknown char = space
totalW = totalW + (CHAR_W + SPACING) * ps
continue
end
for row = 1, CHAR_H do
local rowData = glyph[row]
if not rowData then continue end
for col = 1, CHAR_W do
if rowData: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
totalW = totalW + (CHAR_W + SPACING) * ps
end
container.Size = UDim2.new(0, totalW, 0, CHAR_H * ps)
return container
end
-- Update existing pixel text (destroy + recreate)
local function UpdatePixelText(container, text, color, scale)
for _, c in ipairs(container:GetChildren()) do
c:Destroy()
end
scale = scale or 1
local ps = PIXEL_SIZE * scale
local totalW = 0
local upText = string.upper(text)
for i = 1, #upText do
local ch = upText:sub(i, i)
local glyph = GLYPHS[ch]
if not glyph then
totalW = totalW + (CHAR_W + SPACING) * ps
continue
end
for row = 1, CHAR_H do
local rowData = glyph[row]
if not rowData then continue end
for col = 1, CHAR_W do
if rowData: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
totalW = totalW + (CHAR_W + SPACING) * ps
end
container.Size = UDim2.new(0, totalW, 0, CHAR_H * ps)
end
------------------------------------------------------------------------
-- DRAGGABLE HANDLER
------------------------------------------------------------------------
local function MakeDraggable(frame, handle)
handle = handle or frame
local dragging = false
local dragStart, startPos
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)
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 old = lp.PlayerGui:FindFirstChild("TPGui")
if old then old:Destroy() end
local gui = Instance.new("ScreenGui")
gui.Name = "TPGui"
gui.ResetOnSpawn = false
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.Parent = lp.PlayerGui
-- main panel
local panel = Instance.new("Frame")
panel.Size = UDim2.new(0, 310, 0, 110)
panel.Position = UDim2.new(0.5, -155, 1, -130)
panel.BackgroundColor3 = Color3.fromRGB(60, 40, 20)
panel.BorderSizePixel = 0
panel.Parent = gui
-- MC-style layered border
local border1 = Instance.new("UIStroke")
border1.Thickness = 4
border1.Color = Color3.fromRGB(20, 12, 5)
border1.Parent = panel
-- inner
local inner = Instance.new("Frame")
inner.Size = UDim2.new(1, -8, 1, -8)
inner.Position = UDim2.new(0, 4, 0, 4)
inner.BackgroundColor3 = Color3.fromRGB(80, 55, 30)
inner.BorderSizePixel = 0
inner.Parent = panel
local innerStroke = Instance.new("UIStroke")
innerStroke.Thickness = 2
innerStroke.Color = Color3.fromRGB(110, 80, 45)
innerStroke.Parent = inner
-- darkened content area
local content = Instance.new("Frame")
content.Size = UDim2.new(1, -8, 1, -24)
content.Position = UDim2.new(0, 4, 0, 20)
content.BackgroundColor3 = Color3.fromRGB(30, 20, 10)
content.BackgroundTransparency = 0.3
content.BorderSizePixel = 0
content.Parent = inner
-- drag handle (title bar area)
local dragBar = Instance.new("Frame")
dragBar.Size = UDim2.new(1, 0, 0, 20)
dragBar.BackgroundTransparency = 1
dragBar.BorderSizePixel = 0
dragBar.Parent = inner
MakeDraggable(panel, dragBar)
-- title pixel text
local titleContainer = Instance.new("Frame")
titleContainer.Size = UDim2.new(0, 200, 0, 14)
titleContainer.Position = UDim2.new(0, 8, 0, 3)
titleContainer.BackgroundTransparency = 1
titleContainer.Parent = inner
local titleText = RenderPixelText(titleContainer, "TP TOOL", Color3.fromRGB(255, 200, 60), 1)
titleText.Position = UDim2.new(0, 0, 0, 0)
-- status row
local statusContainer = Instance.new("Frame")
statusContainer.Name = "StatusRow"
statusContainer.Size = UDim2.new(0, 280, 0, 14)
statusContainer.Position = UDim2.new(0, 6, 0, 4)
statusContainer.BackgroundTransparency = 1
statusContainer.Parent = content
local statusText = RenderPixelText(statusContainer, "TP ON RCLICK=TP X=TOGGLE", Color3.fromRGB(85, 255, 85), 1)
-- coords row
local coordsContainer = Instance.new("Frame")
coordsContainer.Name = "CoordsRow"
coordsContainer.Size = UDim2.new(0, 280, 0, 14)
coordsContainer.Position = UDim2.new(0, 6, 0, 22)
coordsContainer.BackgroundTransparency = 1
coordsContainer.Parent = content
local coordsText = RenderPixelText(coordsContainer, "POS 0 0 0", Color3.fromRGB(180, 180, 180), 1)
-- target row
local targetContainer = Instance.new("Frame")
targetContainer.Name = "TargetRow"
targetContainer.Size = UDim2.new(0, 280, 0, 14)
targetContainer.Position = UDim2.new(0, 6, 0, 40)
targetContainer.BackgroundTransparency = 1
targetContainer.Parent = content
local targetText = RenderPixelText(targetContainer, "TARGET ...", Color3.fromRGB(255, 255, 85), 1)
-- waypoint row
local wpContainer = Instance.new("Frame")
wpContainer.Name = "WPRow"
wpContainer.Size = UDim2.new(0, 280, 0, 14)
wpContainer.Position = UDim2.new(0, 6, 0, 58)
wpContainer.BackgroundTransparency = 1
wpContainer.Parent = content
local wpText = RenderPixelText(wpContainer, "WP NONE B=SET N=GO", Color3.fromRGB(130, 130, 130), 1)
-- crosshair (pixel-built)
local crossFrame = Instance.new("Frame")
crossFrame.Size = UDim2.new(0, 12, 0, 12)
crossFrame.Position = UDim2.new(0.5, -6, 0.5, -6)
crossFrame.BackgroundTransparency = 1
crossFrame.Parent = gui
-- Build pixel crosshair
local cColor = Color3.fromRGB(200, 120, 255)
for _, pos in ipairs({
{5,0},{5,2},{5,4},{5,6},{5,8},{5,10},
{0,5},{2,5},{4,5},{6,5},{8,5},{10,5},
}) 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 = cColor
px.BorderSizePixel = 0
px.Parent = crossFrame
end
-- flash overlay
local flash = Instance.new("Frame")
flash.Size = UDim2.new(1, 0, 1, 0)
flash.BackgroundColor3 = Color3.fromRGB(140, 80, 255)
flash.BackgroundTransparency = 1
flash.BorderSizePixel = 0
flash.ZIndex = 10
flash.Parent = gui
------------------------------------------------------------------------
-- PLAYER LIST (P key)
------------------------------------------------------------------------
local plrPanel = Instance.new("Frame")
plrPanel.Size = UDim2.new(0, 210, 0, 200)
plrPanel.Position = UDim2.new(0, 12, 0.5, -100)
plrPanel.BackgroundColor3 = Color3.fromRGB(60, 40, 20)
plrPanel.BorderSizePixel = 0
plrPanel.Visible = false
plrPanel.Parent = gui
Instance.new("UIStroke", plrPanel).Color = Color3.fromRGB(20, 12, 5)
local plrInner = Instance.new("Frame")
plrInner.Size = UDim2.new(1, -8, 1, -8)
plrInner.Position = UDim2.new(0, 4, 0, 4)
plrInner.BackgroundColor3 = Color3.fromRGB(80, 55, 30)
plrInner.BorderSizePixel = 0
plrInner.ClipsDescendants = true
plrInner.Parent = plrPanel
local plrDrag = Instance.new("Frame")
plrDrag.Size = UDim2.new(1, 0, 0, 20)
plrDrag.BackgroundTransparency = 1
plrDrag.Parent = plrInner
MakeDraggable(plrPanel, plrDrag)
local plrTitleC = Instance.new("Frame")
plrTitleC.Size = UDim2.new(0, 150, 0, 14)
plrTitleC.Position = UDim2.new(0, 6, 0, 3)
plrTitleC.BackgroundTransparency = 1
plrTitleC.Parent = plrInner
RenderPixelText(plrTitleC, "PLAYERS", Color3.fromRGB(200, 120, 255), 1)
local plrScroll = Instance.new("ScrollingFrame")
plrScroll.Size = UDim2.new(1, -8, 1, -24)
plrScroll.Position = UDim2.new(0, 4, 0, 22)
plrScroll.BackgroundColor3 = Color3.fromRGB(30, 20, 10)
plrScroll.BackgroundTransparency = 0.3
plrScroll.BorderSizePixel = 0
plrScroll.ScrollBarThickness = 4
plrScroll.ScrollBarImageColor3 = Color3.fromRGB(110, 80, 45)
plrScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
plrScroll.Parent = plrInner
local plrLayout = Instance.new("UIListLayout", plrScroll)
plrLayout.Padding = UDim.new(0, 3)
local function refreshPlrList()
for _, c in ipairs(plrScroll:GetChildren()) do
if c:IsA("TextButton") then c:Destroy() end
end
local count = 0
for _, p in ipairs(plrs:GetPlayers()) do
if p ~= lp then
count += 1
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1, -6, 0, 20)
btn.BackgroundColor3 = Color3.fromRGB(50, 35, 18)
btn.BorderSizePixel = 0
btn.Text = ""
btn.Parent = plrScroll
Instance.new("UIStroke", btn).Color = Color3.fromRGB(70, 50, 28)
-- pixel name
local nc = Instance.new("Frame")
nc.Size = UDim2.new(1, 0, 0, 14)
nc.Position = UDim2.new(0, 4, 0, 3)
nc.BackgroundTransparency = 1
nc.Parent = btn
RenderPixelText(nc, p.DisplayName, Color3.fromRGB(200, 200, 200), 1)
btn.MouseEnter:Connect(function()
btn.BackgroundColor3 = Color3.fromRGB(90, 55, 25)
end)
btn.MouseLeave:Connect(function()
btn.BackgroundColor3 = Color3.fromRGB(50, 35, 18)
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 * 23)
end
------------------------------------------------------------------------
-- TP
------------------------------------------------------------------------
function doTP(pos)
if not grab() then return end
flash.BackgroundTransparency = 0.4
ts:Create(flash, TweenInfo.new(0.35, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
BackgroundTransparency = 1
}):Play()
hrp.CFrame = CFrame.new(pos + Vector3.new(0, 0.5, 0))
end
------------------------------------------------------------------------
-- INPUT
------------------------------------------------------------------------
uis.InputBegan:Connect(function(inp, gpe)
if gpe then return end
if inp.KeyCode == Enum.KeyCode.X then
enabled = not enabled
if enabled then
UpdatePixelText(statusContainer, "TP ON RCLICK=TP X=TOGGLE", Color3.fromRGB(85, 255, 85), 1)
else
UpdatePixelText(statusContainer, "TP OFF RCLICK=TP X=TOGGLE", Color3.fromRGB(255, 85, 85), 1)
end
end
if inp.KeyCode == Enum.KeyCode.P then
playerListOpen = not playerListOpen
plrPanel.Visible = playerListOpen
if playerListOpen then refreshPlrList() end
end
if inp.KeyCode == Enum.KeyCode.B then
if grab() then
waypoint = hrp.Position
local w = waypoint
UpdatePixelText(wpContainer, string.format("WP %d %d %d N=GO", math.floor(w.X), math.floor(w.Y), math.floor(w.Z)), Color3.fromRGB(85, 255, 85), 1)
end
end
if inp.KeyCode == Enum.KeyCode.N then
if waypoint then doTP(waypoint) end
end
if inp.KeyCode == Enum.KeyCode.Delete then
waypoint = nil
UpdatePixelText(wpContainer, "WP NONE B=SET N=GO", Color3.fromRGB(130, 130, 130), 1)
end
end)
mouse.Button2Down:Connect(function()
if not enabled then return end
local hit = mouse.Hit
if hit then
doTP(hit.Position)
local p = hit.Position
UpdatePixelText(targetContainer, string.format("TP! %d %d %d", math.floor(p.X), math.floor(p.Y), math.floor(p.Z)), Color3.fromRGB(200, 120, 255), 1)
end
end)
------------------------------------------------------------------------
-- UPDATE LOOP
------------------------------------------------------------------------
local tick2 = 0
rs.RenderStepped:Connect(function(dt)
if not grab() then return end
tick2 += dt
-- throttle pixel text updates (heavy) to 5 fps
if tick2 < 0.2 then return end
tick2 = 0
local p = hrp.Position
UpdatePixelText(coordsContainer, string.format("POS %d %d %d", math.floor(p.X), math.floor(p.Y), math.floor(p.Z)), Color3.fromRGB(180, 180, 180), 1)
if enabled then
local mh = mouse.Hit
if mh then
local mp = mh.Position
local dist = math.floor((mp - p).Magnitude)
UpdatePixelText(targetContainer, string.format("AIM %d %d %d D=%d", math.floor(mp.X), math.floor(mp.Y), math.floor(mp.Z), dist), Color3.fromRGB(255, 255, 85), 1)
end
end
end)
print("[TP v3] Loaded! RClick=TP X=Toggle P=Players B=WP N=GoWP")