fly esp and more
Key RequiredUniversal

fly esp and more

Universal ScriptGALXYGALXY 352 views 9 executesUpdated Mar 31, 2026
Unrated
00
Lua Script•844 lines (27805 chars)
-- Galaxy V0.1 | Execut
or Script | Fixed Billboard ESP
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")

local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
local humanoid = character:WaitForChild("Humanoid")

local flying = false
local flySpeed = 50
local flyConnection
local bv, bg
local espEnabled = false
local espHighlights = {}
local espBillboards = {}
local bbUpdateConn

player.CharacterAdded:Connect(function(char)
	character = char
	humanoidRootPart = char:WaitForChild("HumanoidRootPart")
	humanoid = char:WaitForChild("Humanoid")
	if flying then
		flying = false
		if flyConnection then flyConnection:Disconnect() flyConnection = nil end
		if bv and bv.Parent then bv:Destroy() end
		if bg and bg.Parent then bg:Destroy() end
	end
end)

-- ==================== GUI PARENT ====================

local guiParent
local ok, hui = pcall(function() return gethui() end)
guiParent = ok and hui or game:GetService("CoreGui")
local old = guiParent:FindFirstChild("GalaxyGUI")
if old then old:Destroy() end

local screenGui = Instance.new("ScreenGui")
screenGui.Name = "GalaxyGUI"
screenGui.ResetOnSpawn = false
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
screenGui.Parent = guiParent

-- ==================== THEME ====================

local C = {
	bg        = Color3.fromRGB(11, 11, 17),
	panel     = Color3.fromRGB(18, 18, 26),
	row       = Color3.fromRGB(24, 24, 34),
	rowHov    = Color3.fromRGB(32, 32, 46),
	border    = Color3.fromRGB(50, 100, 255),
	borderDim = Color3.fromRGB(30, 60, 160),
	blue      = Color3.fromRGB(50, 100, 255),
	gray      = Color3.fromRGB(48, 50, 62),
	white     = Color3.fromRGB(255, 255, 255),
	muted     = Color3.fromRGB(120, 125, 155),
	dim       = Color3.fromRGB(70, 73, 95),
	green     = Color3.fromRGB(30, 165, 70),
	accent    = Color3.fromRGB(90, 135, 255),
}

local TWEEN_FAST = TweenInfo.new(0.15, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local TWEEN_MED  = TweenInfo.new(0.25, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local TWEEN_SLOW = TweenInfo.new(0.35, Enum.EasingStyle.Quart, Enum.EasingDirection.Out)

local function tw(obj, props, info)
	TweenService:Create(obj, info or TWEEN_MED, props):Play()
end
local function corner(p, r)
	local c = Instance.new("UICorner", p)
	c.CornerRadius = r or UDim.new(0, 8)
	return c
end
local function mkStroke(p, col, thick, trans)
	local s = Instance.new("UIStroke", p)
	s.Color = col or C.border
	s.Thickness = thick or 1
	s.Transparency = trans or 0
	return s
end
local function lbl(parent, text, size, color, font, xa)
	local l = Instance.new("TextLabel", parent)
	l.BackgroundTransparency = 1
	l.Text = text
	l.TextSize = size or 12
	l.TextColor3 = color or C.white
	l.Font = font or Enum.Font.Gotham
	l.TextXAlignment = xa or Enum.TextXAlignment.Left
	return l
end
local function addHover(btn, normalBg, hoverBg)
	btn.MouseEnter:Connect(function() tw(btn, {BackgroundColor3 = hoverBg}, TWEEN_FAST) end)
	btn.MouseLeave:Connect(function() tw(btn, {BackgroundColor3 = normalBg}, TWEEN_FAST) end)
	btn.MouseButton1Down:Connect(function() tw(btn, {BackgroundColor3 = C.border}, TWEEN_FAST) end)
	btn.MouseButton1Up:Connect(function() tw(btn, {BackgroundColor3 = hoverBg}, TWEEN_FAST) end)
end

-- ==================== MAIN WINDOW ====================

local mainScroll = Instance.new("ScrollingFrame", screenGui)
mainScroll.Size = UDim2.new(0, 264, 0, 500)
mainScroll.Position = UDim2.new(0, 24, 0.05, 0)
mainScroll.BackgroundTransparency = 1
mainScroll.BorderSizePixel = 0
mainScroll.ScrollBarThickness = 0
mainScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
mainScroll.Active = true

local win = Instance.new("Frame", mainScroll)
win.Size = UDim2.new(1, 0, 0, 36)
win.BackgroundColor3 = C.bg
win.BorderSizePixel = 0
win.Active = true
win.ClipsDescendants = false
corner(win, UDim.new(0, 12))
local winStroke = mkStroke(win, C.border, 1.5)

local pulseUp = true
task.spawn(function()
	while true do
		tw(winStroke, {Transparency = pulseUp and 0.3 or 0.65}, TweenInfo.new(1.5, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut))
		task.wait(1.5)
		pulseUp = not pulseUp
	end
end)

local titleBar = Instance.new("Frame", win)
titleBar.Size = UDim2.new(1, 0, 0, 36)
titleBar.BackgroundColor3 = C.panel
titleBar.BorderSizePixel = 0
corner(titleBar, UDim.new(0, 12))

local titleFix = Instance.new("Frame", titleBar)
titleFix.Size = UDim2.new(1, 0, 0.5, 0)
titleFix.Position = UDim2.new(0, 0, 0.5, 0)
titleFix.BackgroundColor3 = C.panel
titleFix.BorderSizePixel = 0

local titleAccent = Instance.new("Frame", titleBar)
titleAccent.Size = UDim2.new(0, 3, 0, 18)
titleAccent.Position = UDim2.new(0, 10, 0.5, -9)
titleAccent.BackgroundColor3 = C.border
titleAccent.BorderSizePixel = 0
corner(titleAccent, UDim.new(0, 2))

local titleTxt = lbl(titleBar, "   Galaxy V0.1", 13, C.white, Enum.Font.GothamBold)
titleTxt.Size = UDim2.new(1, -50, 1, 0)
titleTxt.Position = UDim2.new(0, 10, 0, 0)

local minBtn = Instance.new("TextButton", titleBar)
minBtn.Size = UDim2.new(0, 26, 0, 20)
minBtn.Position = UDim2.new(1, -32, 0.5, -10)
minBtn.BackgroundColor3 = C.gray
minBtn.BorderSizePixel = 0
minBtn.Text = "—"
minBtn.TextColor3 = C.muted
minBtn.TextSize = 11
minBtn.Font = Enum.Font.GothamBold
corner(minBtn, UDim.new(0, 5))
addHover(minBtn, C.gray, C.rowHov)

local titleLine = Instance.new("Frame", win)
titleLine.Size = UDim2.new(1, -20, 0, 1)
titleLine.Position = UDim2.new(0, 10, 0, 36)
titleLine.BackgroundColor3 = C.border
titleLine.BorderSizePixel = 0
titleLine.BackgroundTransparency = 0.65

local body = Instance.new("Frame", win)
body.Size = UDim2.new(1, 0, 0, 0)
body.Position = UDim2.new(0, 0, 0, 40)
body.BackgroundTransparency = 1
body.BorderSizePixel = 0
body.ClipsDescendants = false

local bodyLayout = Instance.new("UIListLayout", body)
bodyLayout.SortOrder = Enum.SortOrder.LayoutOrder
bodyLayout.Padding = UDim.new(0, 2)

local bodyPad = Instance.new("UIPadding", body)
bodyPad.PaddingLeft = UDim.new(0, 8)
bodyPad.PaddingRight = UDim.new(0, 8)
bodyPad.PaddingTop = UDim.new(0, 6)
bodyPad.PaddingBottom = UDim.new(0, 10)

local function resizeWin()
	local h = bodyLayout.AbsoluteContentSize.Y + 22
	body.Size = UDim2.new(1, 0, 0, h)
	tw(win, {Size = UDim2.new(1, 0, 0, 40 + h)}, TWEEN_SLOW)
	mainScroll.CanvasSize = UDim2.new(0, 0, 0, 40 + h)
	mainScroll.Size = UDim2.new(0, 264, 0, math.min(40 + h, 580))
end

local draggingWin, dragStart, startPos = false, nil, nil
titleBar.InputBegan:Connect(function(i)
	if i.UserInputType == Enum.UserInputType.MouseButton1 then
		draggingWin = true dragStart = i.Position startPos = mainScroll.Position
	end
end)
titleBar.InputEnded:Connect(function(i)
	if i.UserInputType == Enum.UserInputType.MouseButton1 then draggingWin = false end
end)
UserInputService.InputChanged:Connect(function(i)
	if draggingWin and i.UserInputType == Enum.UserInputType.MouseMovement then
		local d = i.Position - dragStart
		mainScroll.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + d.X, startPos.Y.Scale, startPos.Y.Offset + d.Y)
	end
end)

local minimized = false
minBtn.MouseButton1Click:Connect(function()
	minimized = not minimized
	body.Visible = not minimized
	minBtn.Text = minimized and "+" or "—"
	if minimized then
		tw(win, {Size = UDim2.new(1, 0, 0, 36)}, TWEEN_SLOW)
		mainScroll.Size = UDim2.new(0, 264, 0, 36)
	else
		resizeWin()
	end
end)

-- ==================== SECTION BUILDER ====================

local function makeSection(title, order)
	local sec = Instance.new("Frame", body)
	sec.BackgroundTransparency = 1
	sec.BorderSizePixel = 0
	sec.LayoutOrder = order
	sec.ClipsDescendants = false
	sec.Size = UDim2.new(1, 0, 0, 10)
	local secLayout = Instance.new("UIListLayout", sec)
	secLayout.SortOrder = Enum.SortOrder.LayoutOrder
	secLayout.Padding = UDim.new(0, 4)
	local hdr = Instance.new("Frame", sec)
	hdr.Size = UDim2.new(1, 0, 0, 24)
	hdr.BackgroundTransparency = 1
	hdr.LayoutOrder = 0
	local ab = Instance.new("Frame", hdr)
	ab.Size = UDim2.new(0, 2, 0, 14)
	ab.Position = UDim2.new(0, 0, 0.5, -7)
	ab.BackgroundColor3 = C.border
	ab.BorderSizePixel = 0
	corner(ab, UDim.new(0, 1))
	local hl = lbl(hdr, title, 10, C.accent, Enum.Font.GothamBold)
	hl.Size = UDim2.new(1, -10, 1, 0)
	hl.Position = UDim2.new(0, 8, 0, 0)
	local line = Instance.new("Frame", hdr)
	line.Size = UDim2.new(1, 0, 0, 1)
	line.Position = UDim2.new(0, 0, 1, -1)
	line.BackgroundColor3 = C.border
	line.BorderSizePixel = 0
	line.BackgroundTransparency = 0.72
	local function autoSize()
		sec.Size = UDim2.new(1, 0, 0, secLayout.AbsoluteContentSize.Y)
		resizeWin()
	end
	secLayout.Changed:Connect(autoSize)
	return sec, autoSize
end

local function makeToggleRow(parent, text, keyDefault, order)
	local row = Instance.new("Frame", parent)
	row.Size = UDim2.new(1, 0, 0, 36)
	row.BackgroundColor3 = C.row
	row.BorderSizePixel = 0
	row.LayoutOrder = order
	corner(row, UDim.new(0, 8))
	local ra = Instance.new("Frame", row)
	ra.Size = UDim2.new(0, 2, 0, 20)
	ra.Position = UDim2.new(0, 0, 0.5, -10)
	ra.BackgroundColor3 = C.borderDim
	ra.BorderSizePixel = 0
	corner(ra, UDim.new(0, 1))
	local rl = lbl(row, text, 11, C.white, Enum.Font.Gotham)
	rl.Size = UDim2.new(1, -106, 1, 0)
	rl.Position = UDim2.new(0, 10, 0, 0)
	rl.TextTruncate = Enum.TextTruncate.AtEnd
	local keyBtn = Instance.new("TextButton", row)
	keyBtn.Size = UDim2.new(0, 34, 0, 22)
	keyBtn.Position = UDim2.new(1, -82, 0.5, -11)
	keyBtn.BackgroundColor3 = C.gray
	keyBtn.BorderSizePixel = 0
	keyBtn.Text = keyDefault
	keyBtn.TextColor3 = C.muted
	keyBtn.TextSize = 10
	keyBtn.Font = Enum.Font.GothamBold
	corner(keyBtn, UDim.new(0, 5))
	addHover(keyBtn, C.gray, C.rowHov)
	local togBtn = Instance.new("TextButton", row)
	togBtn.Size = UDim2.new(0, 44, 0, 22)
	togBtn.Position = UDim2.new(1, -44, 0.5, -11)
	togBtn.BackgroundColor3 = C.gray
	togBtn.BorderSizePixel = 0
	togBtn.Text = "OFF"
	togBtn.TextColor3 = C.muted
	togBtn.TextSize = 10
	togBtn.Font = Enum.Font.GothamBold
	corner(togBtn, UDim.new(0, 5))
	return row, togBtn, keyBtn, ra
end

-- ==================== MOVEMENT ====================

local movSec, movResize = makeSection("MOVEMENT", 1)
local _, flyTog, flyKey, flyAccent = makeToggleRow(movSec, "✈  Fly", "F", 1)

local spdRow = Instance.new("Frame", movSec)
spdRow.Size = UDim2.new(1, 0, 0, 32)
spdRow.BackgroundColor3 = C.row
spdRow.BorderSizePixel = 0
spdRow.LayoutOrder = 2
corner(spdRow, UDim.new(0, 8))
local spdA = Instance.new("Frame", spdRow)
spdA.Size = UDim2.new(0, 2, 0, 16)
spdA.Position = UDim2.new(0, 0, 0.5, -8)
spdA.BackgroundColor3 = C.borderDim
spdA.BorderSizePixel = 0
corner(spdA, UDim.new(0, 1))
local spdLbl = lbl(spdRow, "Speed  50", 11, C.muted, Enum.Font.Gotham)
spdLbl.Size = UDim2.new(0, 74, 1, 0)
spdLbl.Position = UDim2.new(0, 10, 0, 0)
local sliderBg = Instance.new("Frame", spdRow)
sliderBg.Size = UDim2.new(1, -92, 0, 5)
sliderBg.Position = UDim2.new(0, 84, 0.5, -2)
sliderBg.BackgroundColor3 = C.gray
sliderBg.BorderSizePixel = 0
corner(sliderBg, UDim.new(0, 3))
mkStroke(sliderBg, C.border, 1, 0.75)
local sliderFill = Instance.new("Frame", sliderBg)
sliderFill.Size = UDim2.new(0.5, 0, 1, 0)
sliderFill.BackgroundColor3 = C.blue
sliderFill.BorderSizePixel = 0
corner(sliderFill, UDim.new(0, 3))
local sliderThumb = Instance.new("Frame", sliderBg)
sliderThumb.Size = UDim2.new(0, 10, 0, 10)
sliderThumb.Position = UDim2.new(0.5, -5, 0.5, -5)
sliderThumb.BackgroundColor3 = C.white
sliderThumb.BorderSizePixel = 0
corner(sliderThumb, UDim.new(0, 5))
mkStroke(sliderThumb, C.border, 1.5, 0)
movResize()

-- ==================== VISUALS ====================

local visSec, visResize = makeSection("VISUALS", 2)
local _, espTog, espKey, espAccent = makeToggleRow(visSec, "👁  Player ESP", "C", 1)
visResize()

-- ==================== TELEPORT ====================

local tpSec, tpResize = makeSection("TELEPORT", 3)
local dropBtn = Instance.new("TextButton", tpSec)
dropBtn.Size = UDim2.new(1, 0, 0, 34)
dropBtn.BackgroundColor3 = C.row
dropBtn.BorderSizePixel = 0
dropBtn.Text = "  Select Player ▾"
dropBtn.TextColor3 = C.muted
dropBtn.TextSize = 11
dropBtn.Font = Enum.Font.Gotham
dropBtn.TextXAlignment = Enum.TextXAlignment.Left
dropBtn.LayoutOrder = 1
corner(dropBtn, UDim.new(0, 8))
mkStroke(dropBtn, C.border, 1, 0.7)
addHover(dropBtn, C.row, C.rowHov)

local dropContainer = Instance.new("Frame", tpSec)
dropContainer.Size = UDim2.new(1, 0, 0, 0)
dropContainer.BackgroundColor3 = C.panel
dropContainer.BorderSizePixel = 0
dropContainer.ClipsDescendants = true
dropContainer.Visible = false
dropContainer.LayoutOrder = 2
corner(dropContainer, UDim.new(0, 8))
mkStroke(dropContainer, C.border, 1, 0.5)

local dropScroll = Instance.new("ScrollingFrame", dropContainer)
dropScroll.Size = UDim2.new(1, 0, 1, 0)
dropScroll.BackgroundTransparency = 1
dropScroll.BorderSizePixel = 0
dropScroll.ScrollBarThickness = 3
dropScroll.ScrollBarImageColor3 = C.blue
dropScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
local dropLayout = Instance.new("UIListLayout", dropScroll)
dropLayout.SortOrder = Enum.SortOrder.LayoutOrder
dropLayout.Padding = UDim.new(0, 1)
dropLayout.Changed:Connect(function()
	dropScroll.CanvasSize = UDim2.new(0, 0, 0, dropLayout.AbsoluteContentSize.Y)
end)

local tpExecBtn = Instance.new("TextButton", tpSec)
tpExecBtn.Size = UDim2.new(1, 0, 0, 34)
tpExecBtn.BackgroundColor3 = C.row
tpExecBtn.BorderSizePixel = 0
tpExecBtn.Text = "Teleport  [T]"
tpExecBtn.TextColor3 = C.white
tpExecBtn.TextSize = 11
tpExecBtn.Font = Enum.Font.GothamBold
tpExecBtn.LayoutOrder = 3
corner(tpExecBtn, UDim.new(0, 8))
mkStroke(tpExecBtn, C.blue, 1, 0.4)
addHover(tpExecBtn, C.row, C.rowHov)
tpResize()

-- ==================== FLY ====================

local function stopFly()
	flying = false
	if flyConnection then flyConnection:Disconnect() flyConnection = nil end
	if bv and bv.Parent then bv:Destroy() end
	if bg and bg.Parent then bg:Destroy() end
	if humanoid then humanoid.PlatformStand = false end
	tw(flyTog, {BackgroundColor3 = C.gray}, TWEEN_MED)
	tw(flyAccent, {BackgroundColor3 = C.borderDim}, TWEEN_MED)
	flyTog.Text = "OFF" flyTog.TextColor3 = C.muted
end

local function startFly()
	if not character or not humanoidRootPart then return end
	humanoid.PlatformStand = true
	bv = Instance.new("BodyVelocity", humanoidRootPart)
	bv.MaxForce = Vector3.new(1e5, 1e5, 1e5)
	bv.Velocity = Vector3.zero
	bg = Instance.new("BodyGyro", humanoidRootPart)
	bg.MaxTorque = Vector3.new(1e5, 1e5, 1e5)
	bg.P = 1e4
	bg.CFrame = humanoidRootPart.CFrame
	flyConnection = RunService.RenderStepped:Connect(function()
		if not flying then return end
		local cam = workspace.CurrentCamera
		local moveDir = Vector3.zero
		if UserInputService:IsKeyDown(Enum.KeyCode.W) then moveDir += cam.CFrame.LookVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.S) then moveDir -= cam.CFrame.LookVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.A) then moveDir -= cam.CFrame.RightVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.D) then moveDir += cam.CFrame.RightVector end
		if UserInputService:IsKeyDown(Enum.KeyCode.Space) then moveDir += Vector3.new(0,1,0) end
		if UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) then moveDir -= Vector3.new(0,1,0) end
		bv.Velocity = moveDir.Magnitude > 0 and moveDir.Unit * flySpeed or Vector3.zero
		bg.CFrame = cam.CFrame
	end)
	tw(flyTog, {BackgroundColor3 = C.green}, TWEEN_MED)
	tw(flyAccent, {BackgroundColor3 = C.green}, TWEEN_MED)
	flyTog.Text = "ON" flyTog.TextColor3 = C.white
end

flyTog.MouseButton1Click:Connect(function()
	flying = not flying
	if flying then startFly() else stopFly() end
end)

-- ==================== SLIDER ====================

local sliderDragging = false
local function updateSlider(rel)
	rel = math.clamp(rel, 0, 1)
	tw(sliderFill, {Size = UDim2.new(rel, 0, 1, 0)}, TWEEN_FAST)
	tw(sliderThumb, {Position = UDim2.new(rel, -5, 0.5, -5)}, TWEEN_FAST)
	flySpeed = math.floor(rel * 190 + 10)
	spdLbl.Text = "Speed  " .. flySpeed
end
sliderBg.InputBegan:Connect(function(i)
	if i.UserInputType == Enum.UserInputType.MouseButton1 then
		sliderDragging = true
		tw(sliderThumb, {Size = UDim2.new(0, 13, 0, 13)}, TWEEN_FAST)
		updateSlider((i.Position.X - sliderBg.AbsolutePosition.X) / sliderBg.AbsoluteSize.X)
	end
end)
UserInputService.InputEnded:Connect(function(i)
	if i.UserInputType == Enum.UserInputType.MouseButton1 then
		sliderDragging = false
		tw(sliderThumb, {Size = UDim2.new(0, 10, 0, 10)}, TWEEN_FAST)
	end
end)
UserInputService.InputChanged:Connect(function(i)
	if sliderDragging and i.UserInputType == Enum.UserInputType.MouseMovement then
		updateSlider((i.Position.X - sliderBg.AbsolutePosition.X) / sliderBg.AbsoluteSize.X)
	end
end)

-- ==================== ESP ====================

-- KEY FIX: attach billboard to Head, not HumanoidRootPart
-- Use ExtentsOffsetWorldSpace so it sits above the head regardless of camera angle
local function makeBillboard(p)
	local char = p.Character
	if not char then return end
	local head = char:FindFirstChild("Head")
	local hum  = char:FindFirstChildOfClass("Humanoid")
	if not head or not hum then return end
	if head:FindFirstChild("_GalaxyBB") then return end

	local bb = Instance.new("BillboardGui")
	bb.Name = "_GalaxyBB"
	bb.Size = UDim2.new(0, 130, 0, 52)
	-- ExtentsOffsetWorldSpace keeps it above the head in world space at ANY camera angle
	bb.ExtentsOffsetWorldSpace = Vector3.new(0, 0.6, 0)
	bb.AlwaysOnTop = true
	bb.LightInfluence = 0
	bb.MaxDistance = 500
	bb.ResetOnSpawn = false
	bb.Adornee = head
	bb.Parent = head

	-- Name
	local nameTag = Instance.new("TextLabel", bb)
	nameTag.Name = "NameTag"
	nameTag.Size = UDim2.new(1, 0, 0, 18)
	nameTag.Position = UDim2.new(0, 0, 0, 0)
	nameTag.BackgroundTransparency = 1
	nameTag.Text = p.Name
	nameTag.TextColor3 = Color3.fromRGB(255, 255, 255)
	nameTag.TextSize = 13
	nameTag.Font = Enum.Font.GothamBold
	nameTag.TextStrokeTransparency = 0.2
	nameTag.TextXAlignment = Enum.TextXAlignment.Center

	-- Distance
	local distTag = Instance.new("TextLabel", bb)
	distTag.Name = "DistTag"
	distTag.Size = UDim2.new(1, 0, 0, 13)
	distTag.Position = UDim2.new(0, 0, 0, 19)
	distTag.BackgroundTransparency = 1
	distTag.Text = "0m"
	distTag.TextColor3 = Color3.fromRGB(140, 185, 255)
	distTag.TextSize = 10
	distTag.Font = Enum.Font.Gotham
	distTag.TextStrokeTransparency = 0.3
	distTag.TextXAlignment = Enum.TextXAlignment.Center

	-- HP bar background
	local hpBg = Instance.new("Frame", bb)
	hpBg.Name = "HPBg"
	hpBg.Size = UDim2.new(0.85, 0, 0, 5)
	hpBg.Position = UDim2.new(0.075, 0, 0, 35)
	hpBg.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
	hpBg.BorderSizePixel = 0
	corner(hpBg, UDim.new(0, 3))

	local hpFill = Instance.new("Frame", hpBg)
	hpFill.Name = "HPFill"
	hpFill.Size = UDim2.new(1, 0, 1, 0)
	hpFill.BackgroundColor3 = Color3.fromRGB(30, 200, 80)
	hpFill.BorderSizePixel = 0
	corner(hpFill, UDim.new(0, 3))

	-- HP number
	local hpNum = Instance.new("TextLabel", bb)
	hpNum.Name = "HPNum"
	hpNum.Size = UDim2.new(1, 0, 0, 11)
	hpNum.Position = UDim2.new(0, 0, 0, 41)
	hpNum.BackgroundTransparency = 1
	hpNum.Text = "100hp"
	hpNum.TextColor3 = Color3.fromRGB(190, 190, 190)
	hpNum.TextSize = 9
	hpNum.Font = Enum.Font.Gotham
	hpNum.TextStrokeTransparency = 0.4
	hpNum.TextXAlignment = Enum.TextXAlignment.Center

	table.insert(espBillboards, bb)
end

local function clearAllESP()
	for _, h in ipairs(espHighlights) do
		if h and h.Parent then h:Destroy() end
	end
	espHighlights = {}
	for _, bb in ipairs(espBillboards) do
		if bb and bb.Parent then bb:Destroy() end
	end
	espBillboards = {}
	for _, p in ipairs(Players:GetPlayers()) do
		if p ~= player and p.Character then
			local head = p.Character:FindFirstChild("Head")
			if head then
				local bb = head:FindFirstChild("_GalaxyBB")
				if bb then bb:Destroy() end
			end
			local h = p.Character:FindFirstChild("_GalaxyESP")
			if h then h:Destroy() end
		end
	end
	if bbUpdateConn then bbUpdateConn:Disconnect() bbUpdateConn = nil end
end

local function applyHighlight(char)
	if not char or char:FindFirstChild("_GalaxyESP") then return end
	local h = Instance.new("Highlight")
	h.Name = "_GalaxyESP"
	h.FillColor = Color3.fromRGB(140, 0, 255)
	h.OutlineColor = Color3.fromRGB(180, 80, 255)
	h.FillTransparency = 0.55
	h.OutlineTransparency = 0
	h.Adornee = char
	h.Parent = char
	table.insert(espHighlights, h)
end

local function enableFullESP()
	clearAllESP()
	for _, p in ipairs(Players:GetPlayers()) do
		if p ~= player then
			applyHighlight(p.Character)
			makeBillboard(p)
			p.CharacterAdded:Connect(function(char)
				if not espEnabled then return end
				task.wait(0.5)
				applyHighlight(char)
				makeBillboard(p)
			end)
		end
	end
	Players.PlayerAdded:Connect(function(p)
		p.CharacterAdded:Connect(function(char)
			if not espEnabled then return end
			task.wait(0.5)
			applyHighlight(char)
			makeBillboard(p)
		end)
	end)

	-- Update distance + health every frame
	bbUpdateConn = RunService.RenderStepped:Connect(function()
		local myHRP = character and character:FindFirstChild("HumanoidRootPart")
		for _, p in ipairs(Players:GetPlayers()) do
			if p == player then continue end
			local char2 = p.Character
			if not char2 then continue end
			local head2 = char2:FindFirstChild("Head")
			local hrp2  = char2:FindFirstChild("HumanoidRootPart")
			local hum2  = char2:FindFirstChildOfClass("Humanoid")
			if not head2 or not hrp2 or not hum2 then continue end

			local bb = head2:FindFirstChild("_GalaxyBB")
			if not bb then
				makeBillboard(p)
				bb = head2:FindFirstChild("_GalaxyBB")
				if not bb then continue end
			end

			-- Distance from our HRP to theirs
			local dist = myHRP and math.floor((myHRP.Position - hrp2.Position).Magnitude) or 0
			local distTag = bb:FindFirstChild("DistTag")
			if distTag then distTag.Text = dist .. "m" end

			-- Health bar smooth update
			local maxHp = hum2.MaxHealth > 0 and hum2.MaxHealth or 100
			local pct = math.clamp(hum2.Health / maxHp, 0, 1)
			local hpBg   = bb:FindFirstChild("HPBg")
			local hpFill = hpBg and hpBg:FindFirstChild("HPFill")
			local hpNum  = bb:FindFirstChild("HPNum")

			if hpFill then
				TweenService:Create(hpFill, TWEEN_FAST, {
					Size = UDim2.new(pct, 0, 1, 0),
					BackgroundColor3 = Color3.fromRGB(
						math.floor(255 * (1 - pct)),
						math.floor(220 * pct),
						40
					)
				}):Play()
			end
			if hpNum then
				hpNum.Text = math.floor(hum2.Health) .. "hp"
			end
		end
	end)
end

espTog.MouseButton1Click:Connect(function()
	espEnabled = not espEnabled
	if espEnabled then
		enableFullESP()
		tw(espTog, {BackgroundColor3 = C.green}, TWEEN_MED)
		tw(espAccent, {BackgroundColor3 = C.green}, TWEEN_MED)
		espTog.Text = "ON" espTog.TextColor3 = C.white
	else
		clearAllESP()
		tw(espTog, {BackgroundColor3 = C.gray}, TWEEN_MED)
		tw(espAccent, {BackgroundColor3 = C.borderDim}, TWEEN_MED)
		espTog.Text = "OFF" espTog.TextColor3 = C.muted
	end
end)

-- ==================== TELEPORT ====================

local selectedPlayer = nil
local dropOpen = false
local ROW_H = 32
local MAX_ROWS = 5

local function closeDropdown()
	dropOpen = false
	tw(dropContainer, {Size = UDim2.new(1, 0, 0, 0)}, TWEEN_MED)
	task.delay(0.25, function()
		dropContainer.Visible = false
		tpResize()
	end)
	dropBtn.Text = selectedPlayer and ("  " .. selectedPlayer.Name .. " ▾") or "  Select Player ▾"
end

local function refreshDrop()
	for _, c in ipairs(dropScroll:GetChildren()) do
		if c:IsA("TextButton") or c:IsA("TextLabel") then c:Destroy() end
	end
	local others = {}
	for _, p in ipairs(Players:GetPlayers()) do
		if p ~= player then table.insert(others, p) end
	end
	if #others == 0 then
		local none = Instance.new("TextLabel", dropScroll)
		none.Size = UDim2.new(1, 0, 0, ROW_H)
		none.BackgroundTransparency = 1
		none.Text = "  No other players"
		none.TextColor3 = C.dim
		none.TextSize = 11
		none.Font = Enum.Font.Gotham
		none.TextXAlignment = Enum.TextXAlignment.Left
	else
		for i, p in ipairs(others) do
			local btn = Instance.new("TextButton", dropScroll)
			btn.Size = UDim2.new(1, 0, 0, ROW_H)
			btn.BackgroundTransparency = 1
			btn.BorderSizePixel = 0
			btn.Text = "  " .. p.Name
			btn.TextColor3 = C.white
			btn.TextSize = 11
			btn.Font = Enum.Font.Gotham
			btn.TextXAlignment = Enum.TextXAlignment.Left
			btn.LayoutOrder = i
			btn.MouseEnter:Connect(function()
				tw(btn, {BackgroundColor3 = C.rowHov}, TWEEN_FAST)
				btn.BackgroundTransparency = 0
			end)
			btn.MouseLeave:Connect(function()
				btn.BackgroundTransparency = 1
			end)
			btn.MouseButton1Click:Connect(function()
				selectedPlayer = p
				closeDropdown()
			end)
		end
	end
	local count = math.max(#others, 1)
	local targetH = math.min(count, MAX_ROWS) * ROW_H + 4
	dropContainer.Size = UDim2.new(1, 0, 0, 0)
	dropContainer.Visible = true
	tw(dropContainer, {Size = UDim2.new(1, 0, 0, targetH)}, TWEEN_MED)
	tpResize()
end

dropBtn.MouseButton1Click:Connect(function()
	dropOpen = not dropOpen
	if dropOpen then refreshDrop() else closeDropdown() end
end)

local function doTeleport()
	if not selectedPlayer then
		tpExecBtn.Text = "Pick a player first!"
		tw(tpExecBtn, {BackgroundColor3 = Color3.fromRGB(140, 30, 30)}, TWEEN_FAST)
		task.delay(1.5, function()
			tpExecBtn.Text = "Teleport  [T]"
			tw(tpExecBtn, {BackgroundColor3 = C.row}, TWEEN_MED)
		end)
		return
	end
	local tc = selectedPlayer.Character
	if tc and tc:FindFirstChild("HumanoidRootPart") then
		humanoidRootPart.CFrame = tc.HumanoidRootPart.CFrame + Vector3.new(3, 0, 0)
		tpExecBtn.Text = "✅ Teleported!"
		tw(tpExecBtn, {BackgroundColor3 = C.green}, TWEEN_FAST)
	else
		tpExecBtn.Text = "❌ Not found"
		tw(tpExecBtn, {BackgroundColor3 = Color3.fromRGB(140, 30, 30)}, TWEEN_FAST)
	end
	task.delay(1.5, function()
		tpExecBtn.Text = "Teleport  [T]"
		tw(tpExecBtn, {BackgroundColor3 = C.row}, TWEEN_MED)
	end)
end

tpExecBtn.MouseButton1Click:Connect(doTeleport)

-- ==================== KEYBINDS ====================

local bindingFly, bindingESP = false, false
local flyKeyCode = Enum.KeyCode.F
local espKeyCode = Enum.KeyCode.C

flyKey.MouseButton1Click:Connect(function()
	bindingFly = true
	flyKey.Text = "..."
	tw(flyKey, {BackgroundColor3 = C.blue}, TWEEN_FAST)
	flyKey.TextColor3 = C.white
end)
espKey.MouseButton1Click:Connect(function()
	bindingESP = true
	espKey.Text = "..."
	tw(espKey, {BackgroundColor3 = C.blue}, TWEEN_FAST)
	espKey.TextColor3 = C.white
end)

UserInputService.InputBegan:Connect(function(input, gpe)
	if input.UserInputType ~= Enum.UserInputType.Keyboard then return end
	if bindingFly then
		flyKeyCode = input.KeyCode
		flyKey.Text = input.KeyCode.Name:sub(1, 3)
		tw(flyKey, {BackgroundColor3 = C.gray}, TWEEN_FAST)
		flyKey.TextColor3 = C.muted
		bindingFly = false return
	end
	if bindingESP then
		espKeyCode = input.KeyCode
		espKey.Text = input.KeyCode.Name:sub(1, 3)
		tw(espKey, {BackgroundColor3 = C.gray}, TWEEN_FAST)
		espKey.TextColor3 = C.muted
		bindingESP = false return
	end
	if gpe then return end
	if input.KeyCode == flyKeyCode then
		flying = not flying
		if flying then startFly() else stopFly() end
	end
	if input.KeyCode == espKeyCode then
		espEnabled = not espEnabled
		if espEnabled then
			enableFullESP()
			tw(espTog, {BackgroundColor3 = C.green}, TWEEN_MED)
			tw(espAccent, {BackgroundColor3 = C.green}, TWEEN_MED)
			espTog.Text = "ON" espTog.TextColor3 = C.white
		else
			clearAllESP()
			tw(espTog, {BackgroundColor3 = C.gray}, TWEEN_MED)
			tw(espAccent, {BackgroundColor3 = C.borderDim}, TWEEN_MED)
			espTog.Text = "OFF" espTog.TextColor3 = C.muted
		end
	end
	if input.KeyCode == Enum.KeyCode.T then doTeleport() end
end)

print("✅ Galaxy V0.1 loaded!")

Features & Information

fly esp and more

Community Comments (2)

CycleOfWisdomCycleOfWisdomMar 31, 2026

Ima try

CycleOfWisdomCycleOfWisdomMar 31, 2026

Patched, would try if you fix it..

More Scripts for Universal Scripts