
Key Required
KeysEsp CameraUnlock Fly Xray Teleport Ect
Lua Script•2276 lines (55042 chars)
--[[
piggy 100 players
Created by: Endermaterx
Credit: Endermaterx created and owns this menu script, UI style, object names, and branding.
]]
--// Services
local Players = game:GetService("Players")
local StarterGui = game:GetService("StarterGui")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local CollectionService = game:GetService("CollectionService")
--// Player
local localPlayer = Players.LocalPlayer
local playerGui = localPlayer:WaitForChild("PlayerGui")
--// Config
local CREATOR_NAME = "Endermaterx"
local CREDIT_TEXT = "Created by: " .. CREATOR_NAME
local SCRIPT_TITLE = "piggy 100 players (Created by: " .. CREATOR_NAME .. ")"
local OBJECT_PREFIX = CREATOR_NAME .. "Piggy100Players"
local UI_TOGGLE_KEY = Enum.KeyCode.RightShift
local LOCAL_CAMERA_LOCK = OBJECT_PREFIX .. "LocalCameraLock"
local MENU_DEFAULT_WIDTH = 380
local MENU_DEFAULT_HEIGHT = 520
local MENU_MIN_WIDTH = 330
local MENU_MIN_HEIGHT = 310
local MENU_MAX_WIDTH = 760
local MENU_MAX_HEIGHT = 720
local LOW_GRAVITY = 45
local FORCE_JUMP_POWER = 34
local FORCE_JUMP_HEIGHT = 5.4
local TELEPORT_OFFSET = CFrame.new(0, 2.5, 4.5)
local COLORS = {
Background = Color3.fromRGB(24, 13, 38),
BackgroundDeep = Color3.fromRGB(13, 7, 23),
Panel = Color3.fromRGB(42, 24, 65),
PanelDeep = Color3.fromRGB(30, 17, 49),
Track = Color3.fromRGB(73, 43, 105),
Accent = Color3.fromRGB(178, 105, 255),
AccentDark = Color3.fromRGB(125, 68, 196),
AccentOn = Color3.fromRGB(211, 151, 255),
AccentSoft = Color3.fromRGB(238, 220, 255),
ItemRed = Color3.fromRGB(255, 45, 45),
Text = Color3.fromRGB(250, 244, 255),
TextMuted = Color3.fromRGB(224, 207, 245),
Warning = Color3.fromRGB(198, 82, 224)
}
local TWEENS = {
Fast = TweenInfo.new(0.1, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
Smooth = TweenInfo.new(0.18, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
Pop = TweenInfo.new(0.22, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
Window = TweenInfo.new(0.26, Enum.EasingStyle.Quart, Enum.EasingDirection.Out)
}
local ITEM_NAME_KEYWORDS = {
"key",
"card",
"coin",
"token",
"gem",
"collect",
"pickup",
"item",
"tool",
"gear",
"battery",
"hammer",
"wrench",
"plank",
"board",
"ammo",
"gun",
"weapon",
"crossbow",
"carrot",
"apple",
"grass",
"bone",
"gas",
"gasoline",
"torch",
"screwdriver",
"scissors",
"mop",
"book",
"code",
"dynamite",
"candle",
"potion",
"extinguisher",
"crowbar",
"whitekey",
"redkey",
"bluekey",
"greenkey",
"yellowkey",
"purplekey",
"orangekey"
}
local ITEM_BLOCKED_NAME_KEYWORDS = {
"door",
"gate",
"wall",
"floor",
"ceiling",
"roof",
"window",
"vent",
"ladder",
"stairs",
"stair",
"elevator",
"portal",
"barrier",
"fence",
"safe",
"locker",
"drawer",
"cabinet",
"button",
"lever",
"switch",
"pad",
"plate",
"spawn",
"checkpoint",
"trigger",
"zone",
"hitbox",
"collision",
"invisible",
"map",
"building",
"house",
"wallpart",
"escape"
}
local ITEM_ATTRIBUTE_NAMES = {
"Collectible",
"Grabbable",
"Pickup",
"PickUp",
"Item",
"IsItem",
"CanPickup",
"CanPickUp",
"PiggyItem"
}
local ITEM_COLLECTION_TAGS = {
"Collectible",
"Grabbable",
"Pickup",
"Item",
"PiggyItem",
"KeyItem"
}
local ITEM_MAX_LONGEST_SIDE = 11
local ITEM_MAX_TOTAL_VOLUME = 450
--// Reset older copies
pcall(function()
script.Name = SCRIPT_TITLE
script:SetAttribute("CreatedBy", CREATOR_NAME)
script:SetAttribute("Credit", CREDIT_TEXT)
script:SetAttribute("Brand", "Endermaterx Piggy 100 Players")
end)
pcall(function()
RunService:UnbindFromRenderStep(LOCAL_CAMERA_LOCK)
end)
for _, guiName in ipairs({ "OneScriptPlayerMenu", "EndermaterxPiggyPlayerMenu", SCRIPT_TITLE }) do
local oldGui = playerGui:FindFirstChild(guiName)
if oldGui then
oldGui:Destroy()
end
end
--// State
local State = {
character = nil,
humanoid = nil,
root = nil,
speed = 16,
noclip = false,
showPlayer = false,
lowGravity = false,
forceJump = false,
fly = false,
flySpeed = 60,
xray = false,
highlightItems = false,
piggySpectateTarget = nil,
hideUi = false,
menuVisible = true,
minimized = false
}
local Runtime = {
normalGravity = Workspace.Gravity,
originalCollision = {},
originalJumpPower = nil,
originalJumpHeight = nil,
originalUseJumpPower = nil,
descendantConnection = nil,
flyVelocity = nil,
flyGyro = nil,
xrayObjects = {},
xrayConnections = {},
itemHighlights = {},
itemConnections = {},
hiddenScreenGuiStates = {},
hiddenCoreGuiStates = {},
coreGuiSnapshotTaken = false
}
local UI = {
buttons = {},
buttonBaseColors = {},
actionLogs = {}
}
--// Small helpers
local function create(className, properties, parent)
local object = Instance.new(className)
for key, value in pairs(properties or {}) do
object[key] = value
end
object.Parent = parent
return object
end
local function tween(object, tweenInfo, properties)
local animation = TweenService:Create(object, tweenInfo, properties)
animation:Play()
return animation
end
local function addCorner(object, radius)
return create("UICorner", {
CornerRadius = UDim.new(0, radius)
}, object)
end
local function addStroke(object, color, thickness, transparency)
return create("UIStroke", {
Color = color,
Thickness = thickness,
Transparency = transparency or 0
}, object)
end
local function disconnectAll(connections)
for _, connection in ipairs(connections) do
connection:Disconnect()
end
end
local function getCharacterParts(targetCharacter)
local parts = {}
if not targetCharacter then
return parts
end
for _, item in ipairs(targetCharacter:GetDescendants()) do
if item:IsA("BasePart") then
table.insert(parts, item)
end
end
return parts
end
local function getPlayerRoot(targetPlayer)
local targetCharacter = targetPlayer and targetPlayer.Character
if not targetCharacter then
return nil
end
return targetCharacter:FindFirstChild("HumanoidRootPart")
end
local function getPlayerLabel(targetPlayer)
if not targetPlayer then
return "None"
end
return targetPlayer.DisplayName .. " @" .. targetPlayer.Name
end
local function getPlayerDistanceText(targetPlayer)
local targetRoot = getPlayerRoot(targetPlayer)
if not State.root or not targetRoot then
return ""
end
local distance = math.floor((State.root.Position - targetRoot.Position).Magnitude + 0.5)
return " [" .. distance .. " studs]"
end
local function getLocalLogName()
return localPlayer.DisplayName ~= "" and localPlayer.DisplayName or localPlayer.Name
end
local function getPlayerFromCameraSubject(cameraSubject)
if not cameraSubject then
return nil
end
local subjectInstance = cameraSubject
if cameraSubject:IsA("Humanoid") then
subjectInstance = cameraSubject.Parent
end
for _, targetPlayer in ipairs(Players:GetPlayers()) do
local targetCharacter = targetPlayer.Character
if targetPlayer ~= localPlayer and targetCharacter then
if subjectInstance == targetCharacter or subjectInstance:IsDescendantOf(targetCharacter) then
return targetPlayer
end
end
end
return nil
end
local function getTeamColor(targetPlayer)
if targetPlayer and targetPlayer.Team then
return targetPlayer.Team.TeamColor.Color
end
if targetPlayer and targetPlayer.TeamColor then
return targetPlayer.TeamColor.Color
end
return COLORS.Accent
end
local function setStatus(text)
if UI.statusLabel then
table.insert(UI.actionLogs, 1, getLocalLogName() .. ": " .. text)
while #UI.actionLogs > 4 do
table.remove(UI.actionLogs)
end
UI.statusLabel.Text = table.concat(UI.actionLogs, "\n")
end
end
local function setButtonVisual(button, enabled, onText, offText)
if not button then
return
end
button.Text = enabled and onText or offText
local color = enabled and COLORS.AccentOn or COLORS.AccentDark
UI.buttonBaseColors[button] = color
tween(button, TWEENS.Smooth, {
BackgroundColor3 = color
})
end
local function refreshHeader()
if UI.statusLabel and #UI.actionLogs == 0 then
UI.statusLabel.Text = "No actions yet."
end
end
--// Camera and UI hiding
local function snapCameraToLocalPlayer()
local camera = Workspace.CurrentCamera
if not camera or not State.humanoid then
return
end
localPlayer.CameraMode = Enum.CameraMode.Classic
camera.CameraType = Enum.CameraType.Custom
camera.CameraSubject = State.humanoid
end
local function hideCoreGui()
if not Runtime.coreGuiSnapshotTaken then
Runtime.hiddenCoreGuiStates = {}
for _, coreType in ipairs(Enum.CoreGuiType:GetEnumItems()) do
if coreType ~= Enum.CoreGuiType.All then
local ok, enabled = pcall(function()
return StarterGui:GetCoreGuiEnabled(coreType)
end)
if ok then
Runtime.hiddenCoreGuiStates[coreType] = enabled
end
end
end
Runtime.coreGuiSnapshotTaken = true
end
pcall(function()
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.All, false)
end)
for _, coreType in ipairs(Enum.CoreGuiType:GetEnumItems()) do
if coreType ~= Enum.CoreGuiType.All then
pcall(function()
StarterGui:SetCoreGuiEnabled(coreType, false)
end)
end
end
end
local function restoreCoreGui()
if not Runtime.coreGuiSnapshotTaken then
pcall(function()
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.All, true)
end)
return
end
for coreType, enabled in pairs(Runtime.hiddenCoreGuiStates) do
pcall(function()
StarterGui:SetCoreGuiEnabled(coreType, enabled)
end)
end
Runtime.hiddenCoreGuiStates = {}
Runtime.coreGuiSnapshotTaken = false
end
local function protectHiddenUi()
if not State.hideUi or not UI.gui then
return
end
hideCoreGui()
for _, child in ipairs(playerGui:GetChildren()) do
if child:IsA("ScreenGui") then
if child == UI.gui then
child.Enabled = true
else
if Runtime.hiddenScreenGuiStates[child] == nil then
Runtime.hiddenScreenGuiStates[child] = child.Enabled
end
child.Enabled = false
end
end
end
end
local function hideEverythingExceptMenu()
State.hideUi = true
State.menuVisible = true
Runtime.hiddenScreenGuiStates = {}
protectHiddenUi()
end
local function restoreHiddenUi()
State.hideUi = false
State.menuVisible = true
for screenGui, wasEnabled in pairs(Runtime.hiddenScreenGuiStates) do
if screenGui and screenGui.Parent then
screenGui.Enabled = wasEnabled
end
end
Runtime.hiddenScreenGuiStates = {}
restoreCoreGui()
if UI.gui then
UI.gui.Enabled = true
end
end
local function setOwnMenuVisible(visible)
State.menuVisible = visible
UI.gui.Enabled = true
if visible then
if UI.menu then
UI.menu.Visible = true
end
if UI.shadow then
UI.shadow.Visible = true
end
if UI.menuScale then
UI.menuScale.Scale = 0.96
tween(UI.menuScale, TWEENS.Pop, {
Scale = 1
})
end
if UI.shadow then
UI.shadow.BackgroundTransparency = 1
tween(UI.shadow, TWEENS.Window, {
BackgroundTransparency = 0.74
})
end
else
if UI.menuScale then
tween(UI.menuScale, TWEENS.Fast, {
Scale = 0.96
})
end
if UI.shadow then
tween(UI.shadow, TWEENS.Fast, {
BackgroundTransparency = 1
})
end
task.delay(0.12, function()
if not State.menuVisible then
if UI.menu then
UI.menu.Visible = false
end
if UI.shadow then
UI.shadow.Visible = false
end
end
end)
end
end
local function setShowPlayer(enabled)
State.showPlayer = enabled
if enabled then
hideEverythingExceptMenu()
setOwnMenuVisible(true)
snapCameraToLocalPlayer()
setStatus("turned ShowPlayer on")
else
restoreHiddenUi()
setStatus("turned ShowPlayer off")
end
setButtonVisual(UI.buttons.showPlayer, State.showPlayer, "ShowPlayer: ON", "ShowPlayer: OFF")
refreshHeader()
end
--// Movement
local function rememberCollision(part)
if Runtime.originalCollision[part] == nil then
Runtime.originalCollision[part] = part.CanCollide
end
end
local function restoreCollision()
if not State.character then
return
end
for _, part in ipairs(getCharacterParts(State.character)) do
rememberCollision(part)
part.CanCollide = Runtime.originalCollision[part]
end
end
local function setNoclip(enabled)
State.noclip = enabled
if not enabled then
restoreCollision()
end
setButtonVisual(UI.buttons.noclip, State.noclip, "Noclip: ON", "Noclip: OFF")
setStatus("turned noclip " .. (State.noclip and "on" or "off"))
end
local function setLowGravity(enabled)
State.lowGravity = enabled
Workspace.Gravity = enabled and LOW_GRAVITY or Runtime.normalGravity
setButtonVisual(UI.buttons.lowGravity, State.lowGravity, "Low Gravity: ON", "Low Gravity: OFF")
setStatus("turned low gravity " .. (State.lowGravity and "on" or "off"))
end
local function applyForceJump()
if not State.humanoid then
return
end
pcall(function()
State.humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, true)
end)
pcall(function()
State.humanoid:SetStateEnabled(Enum.HumanoidStateType.Freefall, true)
end)
if State.humanoid.UseJumpPower then
State.humanoid.JumpPower = FORCE_JUMP_POWER
else
State.humanoid.JumpHeight = FORCE_JUMP_HEIGHT
end
end
local function restoreJump()
if not State.humanoid then
return
end
if Runtime.originalUseJumpPower ~= nil then
State.humanoid.UseJumpPower = Runtime.originalUseJumpPower
end
if Runtime.originalJumpPower ~= nil then
State.humanoid.JumpPower = Runtime.originalJumpPower
end
if Runtime.originalJumpHeight ~= nil then
State.humanoid.JumpHeight = Runtime.originalJumpHeight
end
end
local function setForceJump(enabled)
State.forceJump = enabled
if enabled then
applyForceJump()
else
restoreJump()
end
setButtonVisual(UI.buttons.forceJump, State.forceJump, "Force Jump: ON", "Force Jump: OFF")
setStatus("turned force jump " .. (State.forceJump and "on" or "off"))
end
local function destroyFlyForces()
if Runtime.flyVelocity then
Runtime.flyVelocity:Destroy()
Runtime.flyVelocity = nil
end
if Runtime.flyGyro then
Runtime.flyGyro:Destroy()
Runtime.flyGyro = nil
end
end
local function createFlyForces()
if not State.root then
return
end
if Runtime.flyVelocity and Runtime.flyVelocity.Parent == State.root and Runtime.flyGyro and Runtime.flyGyro.Parent == State.root then
return
end
destroyFlyForces()
Runtime.flyVelocity = create("BodyVelocity", {
Name = OBJECT_PREFIX .. "FlyVelocity",
MaxForce = Vector3.new(100000, 100000, 100000),
P = 15000,
Velocity = Vector3.zero
}, State.root)
Runtime.flyGyro = create("BodyGyro", {
Name = OBJECT_PREFIX .. "FlyGyro",
MaxTorque = Vector3.new(100000, 100000, 100000),
P = 15000,
D = 650,
CFrame = State.root.CFrame
}, State.root)
end
local function setFly(enabled)
State.fly = enabled
if enabled then
createFlyForces()
if State.humanoid then
State.humanoid.PlatformStand = true
State.humanoid:ChangeState(Enum.HumanoidStateType.Physics)
end
else
destroyFlyForces()
if State.humanoid then
State.humanoid.PlatformStand = false
State.humanoid:ChangeState(Enum.HumanoidStateType.Running)
end
end
setButtonVisual(UI.buttons.fly, State.fly, "Fly: ON", "Fly: OFF")
setStatus("turned fly " .. (State.fly and "on" or "off"))
end
local function updateFlyMovement()
if not State.fly then
return
end
if not State.root or not State.humanoid then
setFly(false)
return
end
createFlyForces()
local camera = Workspace.CurrentCamera
if not camera or not Runtime.flyVelocity or not Runtime.flyGyro then
return
end
if UserInputService:GetFocusedTextBox() then
Runtime.flyVelocity.Velocity = Vector3.zero
return
end
local direction = Vector3.zero
local cameraCFrame = camera.CFrame
if UserInputService:IsKeyDown(Enum.KeyCode.W) then
direction = direction + cameraCFrame.LookVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.S) then
direction = direction - cameraCFrame.LookVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.D) then
direction = direction + cameraCFrame.RightVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.A) then
direction = direction - cameraCFrame.RightVector
end
if UserInputService:IsKeyDown(Enum.KeyCode.Space) or UserInputService:IsKeyDown(Enum.KeyCode.E) then
direction = direction + Vector3.new(0, 1, 0)
end
if UserInputService:IsKeyDown(Enum.KeyCode.LeftControl) or UserInputService:IsKeyDown(Enum.KeyCode.Q) then
direction = direction - Vector3.new(0, 1, 0)
end
Runtime.flyVelocity.Velocity = direction.Magnitude > 0 and direction.Unit * State.flySpeed or Vector3.zero
Runtime.flyGyro.CFrame = cameraCFrame
State.humanoid.PlatformStand = true
end
--// Endermaterx click-to-teleport
local function teleportToPlayer(targetPlayer)
if not targetPlayer then
setStatus("teleport failed because the player was not found")
return false
end
if not State.root then
setStatus("teleport failed because your character is not ready")
return false
end
local targetRoot = getPlayerRoot(targetPlayer)
if not targetRoot then
setStatus("teleport failed because " .. targetPlayer.DisplayName .. " has no character")
return false
end
State.root.AssemblyLinearVelocity = Vector3.zero
State.root.AssemblyAngularVelocity = Vector3.zero
State.root.CFrame = targetRoot.CFrame * TELEPORT_OFFSET
setStatus("teleported to " .. targetPlayer.DisplayName)
return true
end
--// Player xray
local function clearXrayForPlayer(targetPlayer)
local bundle = Runtime.xrayObjects[targetPlayer]
if not bundle then
return
end
for _, object in pairs(bundle) do
if typeof(object) == "Instance" and object.Parent then
object:Destroy()
end
end
Runtime.xrayObjects[targetPlayer] = nil
end
local function updateXrayForPlayer(targetPlayer)
if targetPlayer == localPlayer then
return
end
clearXrayForPlayer(targetPlayer)
if not State.xray then
return
end
local targetCharacter = targetPlayer.Character
if not targetCharacter then
return
end
local targetHead = targetCharacter:FindFirstChild("Head")
local teamColor = getTeamColor(targetPlayer)
local highlight = create("Highlight", {
Name = OBJECT_PREFIX .. "XrayHighlight",
Adornee = targetCharacter,
DepthMode = Enum.HighlightDepthMode.AlwaysOnTop,
FillColor = teamColor,
OutlineColor = teamColor:Lerp(Color3.new(1, 1, 1), 0.35),
FillTransparency = 0.72,
OutlineTransparency = 0.06
}, targetCharacter)
local billboard
local label
if targetHead then
billboard = create("BillboardGui", {
Name = OBJECT_PREFIX .. "XrayNameLabel",
Adornee = targetHead,
AlwaysOnTop = true,
Size = UDim2.fromOffset(190, 42),
StudsOffset = Vector3.new(0, 3.2, 0),
MaxDistance = 900
}, playerGui)
label = create("TextLabel", {
Size = UDim2.new(1, 0, 1, 0),
BackgroundColor3 = COLORS.BackgroundDeep,
BackgroundTransparency = 0.22,
BorderSizePixel = 0,
Text = targetPlayer.DisplayName,
TextColor3 = teamColor:Lerp(Color3.new(1, 1, 1), 0.55),
TextStrokeColor3 = COLORS.BackgroundDeep,
TextStrokeTransparency = 0.25,
TextSize = 13,
Font = Enum.Font.GothamBold,
TextTruncate = Enum.TextTruncate.AtEnd
}, billboard)
addCorner(label, 8)
addStroke(label, teamColor, 1, 0.25)
end
Runtime.xrayObjects[targetPlayer] = {
Highlight = highlight,
Billboard = billboard,
Label = label
}
end
local function refreshXray()
for targetPlayer in pairs(Runtime.xrayObjects) do
clearXrayForPlayer(targetPlayer)
end
if not State.xray then
return
end
for _, targetPlayer in ipairs(Players:GetPlayers()) do
updateXrayForPlayer(targetPlayer)
end
end
local function trackXrayPlayer(targetPlayer)
if Runtime.xrayConnections[targetPlayer] then
return
end
local connections = {}
Runtime.xrayConnections[targetPlayer] = connections
table.insert(connections, targetPlayer.CharacterAdded:Connect(function()
task.wait(0.35)
updateXrayForPlayer(targetPlayer)
end))
table.insert(connections, targetPlayer:GetPropertyChangedSignal("Team"):Connect(function()
updateXrayForPlayer(targetPlayer)
end))
table.insert(connections, targetPlayer:GetPropertyChangedSignal("TeamColor"):Connect(function()
updateXrayForPlayer(targetPlayer)
end))
end
local function untrackXrayPlayer(targetPlayer)
clearXrayForPlayer(targetPlayer)
local connections = Runtime.xrayConnections[targetPlayer]
if connections then
disconnectAll(connections)
end
Runtime.xrayConnections[targetPlayer] = nil
end
local function setXray(enabled)
State.xray = enabled
refreshXray()
setButtonVisual(UI.buttons.xray, State.xray, "Xray: ON", "Xray: OFF")
setStatus("turned xray " .. (State.xray and "on" or "off"))
end
--// Item highlighter
local function lowerContainsAny(text, keywords)
local lowerText = string.lower(text)
for _, keyword in ipairs(keywords) do
if string.find(lowerText, keyword, 1, true) then
return true
end
end
return false
end
local function isPlayerCharacter(instance)
if not instance then
return false
end
for _, targetPlayer in ipairs(Players:GetPlayers()) do
if targetPlayer.Character and instance:IsDescendantOf(targetPlayer.Character) then
return true
end
end
return false
end
local function hasItemAttribute(instance)
for _, attributeName in ipairs(ITEM_ATTRIBUTE_NAMES) do
if instance:GetAttribute(attributeName) then
return true
end
end
return false
end
local function hasItemTag(instance)
for _, tagName in ipairs(ITEM_COLLECTION_TAGS) do
if CollectionService:HasTag(instance, tagName) then
return true
end
end
return false
end
local function nameLooksLikeItem(instance)
local current = instance
while current and current ~= Workspace do
if lowerContainsAny(current.Name, ITEM_NAME_KEYWORDS) then
return true
end
if current:IsA("Folder") or current:IsA("WorldModel") then
break
end
current = current.Parent
end
return false
end
local function hasBlockedItemName(instance)
local current = instance
while current and current ~= Workspace do
if lowerContainsAny(current.Name, ITEM_BLOCKED_NAME_KEYWORDS) then
return true
end
if current:IsA("Folder") or current:IsA("WorldModel") then
break
end
current = current.Parent
end
return false
end
local function getItemSizeInfo(instance)
if instance:IsA("BasePart") then
return instance.Size, instance.Size.X * instance.Size.Y * instance.Size.Z
end
local minPoint
local maxPoint
local totalVolume = 0
for _, descendant in ipairs(instance:GetDescendants()) do
if descendant:IsA("BasePart") then
local size = descendant.Size
local halfSize = size * 0.5
local position = descendant.Position
local partMin = position - halfSize
local partMax = position + halfSize
totalVolume = totalVolume + (size.X * size.Y * size.Z)
if not minPoint then
minPoint = partMin
maxPoint = partMax
else
minPoint = Vector3.new(
math.min(minPoint.X, partMin.X),
math.min(minPoint.Y, partMin.Y),
math.min(minPoint.Z, partMin.Z)
)
maxPoint = Vector3.new(
math.max(maxPoint.X, partMax.X),
math.max(maxPoint.Y, partMax.Y),
math.max(maxPoint.Z, partMax.Z)
)
end
end
end
if not minPoint or not maxPoint then
return nil, 0
end
return maxPoint - minPoint, totalVolume
end
local function isSmallPickupSized(instance)
local size, totalVolume = getItemSizeInfo(instance)
if not size then
return false
end
local longestSide = math.max(size.X, size.Y, size.Z)
return longestSide <= ITEM_MAX_LONGEST_SIDE and totalVolume <= ITEM_MAX_TOTAL_VOLUME
end
local function containsPickupInteraction(instance)
if instance:IsA("ClickDetector") or instance:IsA("ProximityPrompt") then
return true
end
return instance:FindFirstChildWhichIsA("ClickDetector", true) ~= nil or instance:FindFirstChildWhichIsA("ProximityPrompt", true) ~= nil
end
local function canHighlightItemAdornee(adornee)
if not adornee or not adornee:IsDescendantOf(Workspace) or isPlayerCharacter(adornee) then
return false
end
local looksImportant = hasItemAttribute(adornee) or hasItemTag(adornee) or nameLooksLikeItem(adornee) or containsPickupInteraction(adornee)
if not looksImportant then
return false
end
if not isSmallPickupSized(adornee) then
return false
end
if hasBlockedItemName(adornee) and not nameLooksLikeItem(adornee) then
return false
end
return true
end
local function findItemAdornee(instance)
if not instance or not instance:IsDescendantOf(Workspace) or isPlayerCharacter(instance) then
return nil
end
local tool = instance:FindFirstAncestorWhichIsA("Tool")
if tool and canHighlightItemAdornee(tool) then
return tool
end
if instance:IsA("Tool") and canHighlightItemAdornee(instance) then
return instance
end
local model = instance:FindFirstAncestorWhichIsA("Model")
if model and model ~= Workspace and not model:FindFirstChildWhichIsA("Humanoid") and canHighlightItemAdornee(model) then
return model
end
if instance:IsA("BasePart") and canHighlightItemAdornee(instance) then
return instance
end
if containsPickupInteraction(instance) then
local part = instance:FindFirstAncestorWhichIsA("BasePart")
if part and canHighlightItemAdornee(part) then
return part
end
end
return nil
end
local function clearItemHighlights()
for adornee, highlight in pairs(Runtime.itemHighlights) do
if highlight and highlight.Parent then
highlight:Destroy()
end
Runtime.itemHighlights[adornee] = nil
end
end
local function addItemHighlight(adornee)
if not adornee or Runtime.itemHighlights[adornee] then
return
end
Runtime.itemHighlights[adornee] = create("Highlight", {
Name = OBJECT_PREFIX .. "ItemHighlight",
Adornee = adornee,
DepthMode = Enum.HighlightDepthMode.AlwaysOnTop,
FillColor = COLORS.ItemRed,
OutlineColor = Color3.fromRGB(255, 225, 225),
FillTransparency = 0.58,
OutlineTransparency = 0
}, adornee)
end
local function scanForItemHighlight(instance)
if not State.highlightItems then
return
end
local adornee = findItemAdornee(instance)
if adornee then
addItemHighlight(adornee)
end
end
local function refreshItemHighlights()
clearItemHighlights()
if not State.highlightItems then
return
end
for _, instance in ipairs(Workspace:GetDescendants()) do
scanForItemHighlight(instance)
end
end
local function setHighlightItems(enabled)
State.highlightItems = enabled
if enabled then
refreshItemHighlights()
else
clearItemHighlights()
end
setButtonVisual(UI.buttons.highlightItems, State.highlightItems, "Highlight Items: ON", "Highlight Items: OFF")
setStatus("turned item highlights " .. (State.highlightItems and "on" or "off"))
end
--// Character binding
local function bindCharacter(newCharacter)
destroyFlyForces()
State.character = newCharacter
State.humanoid = newCharacter:WaitForChild("Humanoid")
State.root = newCharacter:WaitForChild("HumanoidRootPart")
Runtime.originalCollision = {}
Runtime.originalJumpPower = State.humanoid.JumpPower
Runtime.originalJumpHeight = State.humanoid.JumpHeight
Runtime.originalUseJumpPower = State.humanoid.UseJumpPower
if Runtime.descendantConnection then
Runtime.descendantConnection:Disconnect()
end
for _, part in ipairs(getCharacterParts(newCharacter)) do
rememberCollision(part)
end
Runtime.descendantConnection = newCharacter.DescendantAdded:Connect(function(item)
if item:IsA("BasePart") then
rememberCollision(item)
if State.noclip then
item.CanCollide = false
end
end
end)
State.humanoid.WalkSpeed = State.speed
if State.forceJump then
applyForceJump()
end
if State.fly then
setFly(true)
end
if State.showPlayer then
snapCameraToLocalPlayer()
end
end
if localPlayer.Character then
bindCharacter(localPlayer.Character)
end
localPlayer.CharacterAdded:Connect(bindCharacter)
--// UI building
UI.gui = create("ScreenGui", {
Name = SCRIPT_TITLE,
ResetOnSpawn = false,
IgnoreGuiInset = true,
ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
DisplayOrder = 100,
Enabled = true
}, playerGui)
UI.piggySpectateTeleportButton = create("TextButton", {
Name = OBJECT_PREFIX .. "PiggySpectateTeleportButton",
AnchorPoint = Vector2.new(1, 0.5),
Size = UDim2.fromOffset(180, 74),
Position = UDim2.new(1, -28, 0.5, 0),
BackgroundColor3 = COLORS.AccentOn,
Text = "Teleport",
TextColor3 = COLORS.BackgroundDeep,
TextSize = 24,
Font = Enum.Font.GothamBlack,
BorderSizePixel = 0,
AutoButtonColor = false,
Visible = false,
ZIndex = 80
}, UI.gui)
addCorner(UI.piggySpectateTeleportButton, 14)
addStroke(UI.piggySpectateTeleportButton, COLORS.AccentSoft, 2, 0.1)
create("UIGradient", {
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, COLORS.AccentSoft),
ColorSequenceKeypoint.new(1, COLORS.Accent)
}),
Rotation = 90
}, UI.piggySpectateTeleportButton)
local spectateTeleportScale = create("UIScale", {
Scale = 1
}, UI.piggySpectateTeleportButton)
UI.piggySpectateTeleportButton.MouseEnter:Connect(function()
tween(spectateTeleportScale, TWEENS.Fast, {
Scale = 1.06
})
end)
UI.piggySpectateTeleportButton.MouseLeave:Connect(function()
tween(spectateTeleportScale, TWEENS.Smooth, {
Scale = 1
})
end)
UI.piggySpectateTeleportButton.Activated:Connect(function()
teleportToPlayer(State.piggySpectateTarget)
end)
local function updatePiggySpectateTeleportButton()
local camera = Workspace.CurrentCamera
local targetPlayer
if camera and not State.showPlayer then
targetPlayer = getPlayerFromCameraSubject(camera.CameraSubject)
end
State.piggySpectateTarget = targetPlayer
if not UI.piggySpectateTeleportButton then
return
end
if targetPlayer then
if not UI.piggySpectateTeleportButton.Visible then
UI.piggySpectateTeleportButton.Visible = true
spectateTeleportScale.Scale = 0.86
tween(spectateTeleportScale, TWEENS.Pop, {
Scale = 1
})
end
else
if UI.piggySpectateTeleportButton.Visible then
tween(spectateTeleportScale, TWEENS.Fast, {
Scale = 0.86
})
task.delay(0.11, function()
if not State.piggySpectateTarget and UI.piggySpectateTeleportButton then
UI.piggySpectateTeleportButton.Visible = false
spectateTeleportScale.Scale = 1
end
end)
end
end
end
UI.shadow = create("Frame", {
Name = OBJECT_PREFIX .. "Shadow",
Size = UDim2.fromOffset(MENU_DEFAULT_WIDTH + 18, MENU_DEFAULT_HEIGHT + 18),
Position = UDim2.fromOffset(43, 101),
BackgroundColor3 = COLORS.Accent,
BackgroundTransparency = 0.74,
BorderSizePixel = 0,
ZIndex = 0
}, UI.gui)
addCorner(UI.shadow, 18)
create("UIGradient", {
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, COLORS.AccentSoft),
ColorSequenceKeypoint.new(1, COLORS.BackgroundDeep)
}),
Rotation = 90,
Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.12),
NumberSequenceKeypoint.new(1, 0.5)
})
}, UI.shadow)
UI.menu = create("Frame", {
Name = OBJECT_PREFIX .. "Window",
Size = UDim2.fromOffset(MENU_DEFAULT_WIDTH, MENU_DEFAULT_HEIGHT),
Position = UDim2.fromOffset(34, 92),
BackgroundColor3 = COLORS.Background,
BorderSizePixel = 0,
ClipsDescendants = true,
Active = true,
ZIndex = 2
}, UI.gui)
addCorner(UI.menu, 14)
UI.menuStroke = addStroke(UI.menu, COLORS.Accent, 2, 0.12)
UI.menuScale = create("UIScale", {
Scale = 0.96
}, UI.menu)
create("UIGradient", {
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, COLORS.Panel),
ColorSequenceKeypoint.new(1, COLORS.BackgroundDeep)
}),
Rotation = 90
}, UI.menu)
local function syncShadow(animated)
if not UI.menu or not UI.shadow then
return
end
local targetSize = UDim2.fromOffset(UI.menu.AbsoluteSize.X + 18, UI.menu.AbsoluteSize.Y + 18)
local targetPosition = UDim2.new(
UI.menu.Position.X.Scale,
UI.menu.Position.X.Offset + 9,
UI.menu.Position.Y.Scale,
UI.menu.Position.Y.Offset + 9
)
if animated then
tween(UI.shadow, TWEENS.Window, {
Size = targetSize,
Position = targetPosition
})
else
UI.shadow.Size = targetSize
UI.shadow.Position = targetPosition
end
end
UI.topBar = create("Frame", {
Name = OBJECT_PREFIX .. "TopBar",
Size = UDim2.new(1, 0, 0, 52),
BackgroundColor3 = COLORS.Panel,
BorderSizePixel = 0,
Active = true,
ZIndex = 4
}, UI.menu)
addCorner(UI.topBar, 14)
UI.titleLabel = create("TextLabel", {
Name = OBJECT_PREFIX .. "Title",
Size = UDim2.new(1, -74, 1, 0),
Position = UDim2.fromOffset(16, 0),
BackgroundTransparency = 1,
Text = SCRIPT_TITLE,
TextColor3 = COLORS.Text,
TextSize = 14,
Font = Enum.Font.GothamBold,
TextXAlignment = Enum.TextXAlignment.Left,
TextTruncate = Enum.TextTruncate.AtEnd,
ZIndex = 5
}, UI.topBar)
UI.titleGlow = create("Frame", {
Name = OBJECT_PREFIX .. "TitleGlow",
Size = UDim2.new(1, -24, 0, 2),
Position = UDim2.new(0, 12, 1, -3),
BackgroundColor3 = COLORS.Accent,
BackgroundTransparency = 0.15,
BorderSizePixel = 0,
ZIndex = 5
}, UI.topBar)
addCorner(UI.titleGlow, 999)
create("UIGradient", {
Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, COLORS.AccentDark),
ColorSequenceKeypoint.new(0.5, COLORS.AccentSoft),
ColorSequenceKeypoint.new(1, COLORS.AccentDark)
}),
Transparency = NumberSequence.new({
NumberSequenceKeypoint.new(0, 0.65),
NumberSequenceKeypoint.new(0.5, 0),
NumberSequenceKeypoint.new(1, 0.65)
})
}, UI.titleGlow)
UI.minimizeButton = create("TextButton", {
Name = OBJECT_PREFIX .. "MinimizeButton",
Size = UDim2.fromOffset(36, 30),
Position = UDim2.new(1, -54, 0, 11),
BackgroundColor3 = COLORS.Warning,
Text = "-",
TextColor3 = COLORS.Text,
TextSize = 20,
Font = Enum.Font.GothamBold,
BorderSizePixel = 0,
AutoButtonColor = false,
ZIndex = 6
}, UI.topBar)
addCorner(UI.minimizeButton, 8)
local minimizeScale = create("UIScale", {
Scale = 1
}, UI.minimizeButton)
UI.content = create("ScrollingFrame", {
Name = OBJECT_PREFIX .. "Content",
Size = UDim2.new(1, -28, 1, -68),
Position = UDim2.fromOffset(14, 60),
BackgroundTransparency = 1,
BorderSizePixel = 0,
CanvasSize = UDim2.fromOffset(0, 0),
AutomaticCanvasSize = Enum.AutomaticSize.Y,
ScrollBarThickness = 4,
ScrollBarImageColor3 = COLORS.Accent,
ScrollBarImageTransparency = 0.2,
ScrollingDirection = Enum.ScrollingDirection.Y,
ClipsDescendants = true,
ZIndex = 3
}, UI.menu)
create("UIPadding", {
PaddingTop = UDim.new(0, 2),
PaddingBottom = UDim.new(0, 14),
PaddingLeft = UDim.new(0, 1),
PaddingRight = UDim.new(0, 6)
}, UI.content)
local contentLayout = create("UIListLayout", {
Padding = UDim.new(0, 10),
SortOrder = Enum.SortOrder.LayoutOrder
}, UI.content)
contentLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
UI.content.CanvasSize = UDim2.fromOffset(0, contentLayout.AbsoluteContentSize.Y + 22)
end)
local function makeSection(title)
local section = create("Frame", {
Name = OBJECT_PREFIX .. title:gsub("%W", ""),
Size = UDim2.new(1, 0, 0, 0),
AutomaticSize = Enum.AutomaticSize.Y,
BackgroundColor3 = COLORS.PanelDeep,
BorderSizePixel = 0,
ClipsDescendants = true,
ZIndex = 4
}, UI.content)
addCorner(section, 10)
addStroke(section, COLORS.AccentSoft, 1, 0.86)
create("UIPadding", {
PaddingTop = UDim.new(0, 10),
PaddingBottom = UDim.new(0, 10),
PaddingLeft = UDim.new(0, 10),
PaddingRight = UDim.new(0, 10)
}, section)
create("UIListLayout", {
Padding = UDim.new(0, 8),
SortOrder = Enum.SortOrder.LayoutOrder
}, section)
create("TextLabel", {
Size = UDim2.new(1, 0, 0, 22),
BackgroundTransparency = 1,
Text = title,
TextColor3 = COLORS.TextMuted,
TextSize = 14,
Font = Enum.Font.GothamBold,
TextXAlignment = Enum.TextXAlignment.Left,
TextTruncate = Enum.TextTruncate.AtEnd,
ZIndex = 5
}, section)
return section
end
local function makeButton(parent, text, color, callback)
local button = create("TextButton", {
Name = OBJECT_PREFIX .. text:gsub("%W", "") .. "Button",
Size = UDim2.new(1, 0, 0, 38),
BackgroundColor3 = color,
Text = text,
TextColor3 = COLORS.Text,
TextSize = 14,
Font = Enum.Font.GothamBold,
BorderSizePixel = 0,
AutoButtonColor = false,
TextTruncate = Enum.TextTruncate.AtEnd,
ZIndex = 5
}, parent)
addCorner(button, 9)
local buttonStroke = addStroke(button, COLORS.AccentSoft, 1, 0.82)
local buttonScale = create("UIScale", {
Scale = 1
}, button)
UI.buttonBaseColors[button] = color
button.MouseEnter:Connect(function()
local baseColor = UI.buttonBaseColors[button] or color
tween(button, TWEENS.Fast, {
BackgroundColor3 = baseColor:Lerp(COLORS.AccentSoft, 0.16)
})
tween(buttonStroke, TWEENS.Fast, {
Transparency = 0.42
})
tween(buttonScale, TWEENS.Fast, {
Scale = 1.012
})
end)
button.MouseLeave:Connect(function()
local baseColor = UI.buttonBaseColors[button] or color
tween(button, TWEENS.Smooth, {
BackgroundColor3 = baseColor
})
tween(buttonStroke, TWEENS.Smooth, {
Transparency = 0.82
})
tween(buttonScale, TWEENS.Smooth, {
Scale = 1
})
end)
button.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
tween(buttonScale, TWEENS.Fast, {
Scale = 0.982
})
tween(buttonStroke, TWEENS.Fast, {
Transparency = 0.18
})
end
end)
button.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
tween(buttonScale, TWEENS.Pop, {
Scale = 1
})
end
end)
button.Activated:Connect(callback)
return button
end
local function makeSlider(parent, name, minValue, maxValue, defaultValue, displayFunction, callback)
local holder = create("Frame", {
Name = OBJECT_PREFIX .. name:gsub("%W", "") .. "Slider",
Size = UDim2.new(1, 0, 0, 66),
BackgroundColor3 = COLORS.BackgroundDeep,
BorderSizePixel = 0,
ClipsDescendants = false,
ZIndex = 5
}, parent)
addCorner(holder, 10)
local holderStroke = addStroke(holder, COLORS.AccentSoft, 1, 0.86)
local label = create("TextLabel", {
Size = UDim2.new(1, -20, 0, 24),
Position = UDim2.fromOffset(10, 7),
BackgroundTransparency = 1,
TextColor3 = COLORS.TextMuted,
TextSize = 14,
Font = Enum.Font.GothamMedium,
TextXAlignment = Enum.TextXAlignment.Left,
TextTruncate = Enum.TextTruncate.AtEnd,
ZIndex = 6
}, holder)
local track = create("TextButton", {
Size = UDim2.new(1, -22, 0, 12),
Position = UDim2.fromOffset(11, 42),
BackgroundColor3 = COLORS.Track,
Text = "",
BorderSizePixel = 0,
AutoButtonColor = false,
ZIndex = 6
}, holder)
addCorner(track, 999)
local fill = create("Frame", {
Size = UDim2.fromScale(0, 1),
BackgroundColor3 = COLORS.Accent,
BorderSizePixel = 0,
ZIndex = 7
}, track)
addCorner(fill, 999)
local knob = create("TextButton", {
Size = UDim2.fromOffset(24, 24),
Position = UDim2.fromOffset(-12, -6),
BackgroundColor3 = COLORS.AccentSoft,
Text = "",
BorderSizePixel = 0,
AutoButtonColor = false,
ZIndex = 8
}, track)
addCorner(knob, 999)
local knobStroke = addStroke(knob, COLORS.Accent, 2, 0)
local knobScale = create("UIScale", {
Scale = 1
}, knob)
local dragging = false
local function setPercent(percent)
percent = math.clamp(percent, 0, 1)
local rawValue = minValue + ((maxValue - minValue) * percent)
local value = math.floor(rawValue + 0.5)
tween(fill, TWEENS.Fast, {
Size = UDim2.fromScale(percent, 1)
})
tween(knob, TWEENS.Fast, {
Position = UDim2.new(percent, -12, 0, -6)
})
label.Text = name .. ": " .. displayFunction(value, percent)
callback(value, percent)
end
local function updateFromInput(input)
local percent = (input.Position.X - track.AbsolutePosition.X) / track.AbsoluteSize.X
setPercent(percent)
end
local function beginDrag(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
tween(holderStroke, TWEENS.Fast, {
Transparency = 0.42
})
tween(knobScale, TWEENS.Fast, {
Scale = 1.16
})
tween(knobStroke, TWEENS.Fast, {
Transparency = 0
})
updateFromInput(input)
end
end
track.InputBegan:Connect(beginDrag)
knob.InputBegan:Connect(beginDrag)
holder.MouseEnter:Connect(function()
tween(holder, TWEENS.Smooth, {
BackgroundColor3 = COLORS.Panel
})
end)
holder.MouseLeave:Connect(function()
if not dragging then
tween(holder, TWEENS.Smooth, {
BackgroundColor3 = COLORS.BackgroundDeep
})
tween(holderStroke, TWEENS.Smooth, {
Transparency = 0.86
})
end
end)
UserInputService.InputChanged:Connect(function(input)
if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
updateFromInput(input)
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = false
tween(holder, TWEENS.Smooth, {
BackgroundColor3 = COLORS.BackgroundDeep
})
tween(holderStroke, TWEENS.Smooth, {
Transparency = 0.86
})
tween(knobScale, TWEENS.Pop, {
Scale = 1
})
end
end)
setPercent((defaultValue - minValue) / (maxValue - minValue))
return holder
end
--// Header section
local headerSection = makeSection("Status")
UI.statusLabel = create("TextLabel", {
Name = OBJECT_PREFIX .. "StatusLabel",
Size = UDim2.new(1, 0, 0, 72),
BackgroundTransparency = 1,
Text = "No actions yet.",
TextColor3 = COLORS.Text,
TextSize = 12,
Font = Enum.Font.GothamMedium,
TextXAlignment = Enum.TextXAlignment.Left,
TextYAlignment = Enum.TextYAlignment.Top,
TextWrapped = true,
ZIndex = 5
}, headerSection)
--// Movement section
local movementSection = makeSection("Movement")
makeSlider(movementSection, "Speed", 16, 150, State.speed, function(value)
return tostring(value)
end, function(value)
State.speed = value
if State.humanoid then
State.humanoid.WalkSpeed = State.speed
end
end)
UI.buttons.noclip = makeButton(movementSection, "Noclip: OFF", COLORS.AccentDark, function()
setNoclip(not State.noclip)
end)
UI.buttons.lowGravity = makeButton(movementSection, "Low Gravity: OFF", COLORS.AccentDark, function()
setLowGravity(not State.lowGravity)
end)
UI.buttons.forceJump = makeButton(movementSection, "Force Jump: OFF", COLORS.AccentDark, function()
setForceJump(not State.forceJump)
end)
UI.buttons.fly = makeButton(movementSection, "Fly: OFF", COLORS.AccentDark, function()
setFly(not State.fly)
end)
makeSlider(movementSection, "Fly Speed", 20, 180, State.flySpeed, function(value)
return tostring(value)
end, function(value)
State.flySpeed = value
end)
--// Camera section
local cameraSection = makeSection("Camera")
UI.buttons.showPlayer = makeButton(cameraSection, "ShowPlayer: OFF", COLORS.AccentDark, function()
setShowPlayer(not State.showPlayer)
end)
--// Vision section
local visionSection = makeSection("Vision And Items")
UI.buttons.xray = makeButton(visionSection, "Xray: OFF", COLORS.AccentDark, function()
setXray(not State.xray)
end)
UI.buttons.highlightItems = makeButton(visionSection, "Highlight Items: OFF", COLORS.AccentDark, function()
setHighlightItems(not State.highlightItems)
end)
--// Player list section
local playerSection = makeSection("Players")
local refreshPlayerButton = makeButton(playerSection, "Refresh Player List", COLORS.Track, function()
if UI.refreshPlayerList then
UI.refreshPlayerList()
end
end)
UI.buttonBaseColors[refreshPlayerButton] = COLORS.Track
UI.playerList = create("ScrollingFrame", {
Name = OBJECT_PREFIX .. "PlayerTeleportList",
Size = UDim2.new(1, 0, 0, 178),
BackgroundColor3 = COLORS.BackgroundDeep,
BorderSizePixel = 0,
CanvasSize = UDim2.fromOffset(0, 0),
AutomaticCanvasSize = Enum.AutomaticSize.Y,
ScrollBarThickness = 4,
ScrollBarImageColor3 = COLORS.Accent,
ScrollBarImageTransparency = 0.2,
ScrollingDirection = Enum.ScrollingDirection.Y,
ClipsDescendants = true,
ZIndex = 5
}, playerSection)
addCorner(UI.playerList, 8)
create("UIPadding", {
PaddingTop = UDim.new(0, 7),
PaddingBottom = UDim.new(0, 7),
PaddingLeft = UDim.new(0, 7),
PaddingRight = UDim.new(0, 7)
}, UI.playerList)
local playerListLayout = create("UIListLayout", {
Padding = UDim.new(0, 6),
SortOrder = Enum.SortOrder.LayoutOrder
}, UI.playerList)
playerListLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
UI.playerList.CanvasSize = UDim2.fromOffset(0, playerListLayout.AbsoluteContentSize.Y + 16)
end)
local function clearPlayerList()
for _, child in ipairs(UI.playerList:GetChildren()) do
if child:IsA("TextButton") or child:IsA("TextLabel") or child:IsA("Frame") then
child:Destroy()
end
end
end
local function makeEmptyPlayerRow(text)
local row = create("TextLabel", {
Name = OBJECT_PREFIX .. "EmptyPlayerRow",
Size = UDim2.new(1, -4, 0, 34),
BackgroundColor3 = COLORS.Panel,
Text = text,
TextColor3 = COLORS.TextMuted,
TextSize = 13,
Font = Enum.Font.GothamMedium,
BorderSizePixel = 0,
TextTruncate = Enum.TextTruncate.AtEnd,
ZIndex = 6
}, UI.playerList)
addCorner(row, 8)
end
local function makePlayerRow(targetPlayer)
local row = create("TextButton", {
Name = OBJECT_PREFIX .. "TeleportRow_" .. targetPlayer.Name,
Size = UDim2.new(1, -4, 0, 38),
BackgroundColor3 = COLORS.Panel,
Text = getPlayerLabel(targetPlayer) .. getPlayerDistanceText(targetPlayer),
TextColor3 = COLORS.Text,
TextSize = 13,
Font = Enum.Font.GothamMedium,
TextXAlignment = Enum.TextXAlignment.Left,
TextTruncate = Enum.TextTruncate.AtEnd,
BorderSizePixel = 0,
AutoButtonColor = false,
ZIndex = 6
}, UI.playerList)
addCorner(row, 8)
local rowStroke = addStroke(row, COLORS.AccentSoft, 1, 0.88)
create("UIPadding", {
PaddingLeft = UDim.new(0, 8),
PaddingRight = UDim.new(0, 6)
}, row)
row.MouseEnter:Connect(function()
tween(row, TWEENS.Fast, {
BackgroundColor3 = COLORS.AccentDark
})
tween(rowStroke, TWEENS.Fast, {
Transparency = 0.42
})
end)
row.MouseLeave:Connect(function()
tween(row, TWEENS.Smooth, {
BackgroundColor3 = COLORS.Panel
})
tween(rowStroke, TWEENS.Smooth, {
Transparency = 0.88
})
end)
row.Activated:Connect(function()
teleportToPlayer(targetPlayer)
if UI.refreshPlayerList then
UI.refreshPlayerList()
end
end)
end
UI.refreshPlayerList = function()
clearPlayerList()
local playerList = {}
for _, targetPlayer in ipairs(Players:GetPlayers()) do
if targetPlayer ~= localPlayer then
table.insert(playerList, targetPlayer)
end
end
table.sort(playerList, function(firstPlayer, secondPlayer)
return string.lower(firstPlayer.DisplayName) < string.lower(secondPlayer.DisplayName)
end)
if #playerList == 0 then
makeEmptyPlayerRow("No other players found")
else
for _, targetPlayer in ipairs(playerList) do
makePlayerRow(targetPlayer)
end
end
refreshHeader()
end
--// Window movement and resize
local expandedMenuSize = UDim2.fromOffset(MENU_DEFAULT_WIDTH, MENU_DEFAULT_HEIGHT)
local draggingMenu = false
local dragStart
local menuStart
local resizingMenu = false
local resizeStart
local resizeStartSize
local resizeStartPosition
local resizeDirectionX = 0
local resizeDirectionY = 0
local function makeResizeHandle(name, anchorPoint, position, directionX, directionY)
local handle = create("TextButton", {
Name = name,
AnchorPoint = anchorPoint,
Position = position,
Size = UDim2.fromOffset(28, 28),
BackgroundTransparency = 1,
Text = "",
BorderSizePixel = 0,
AutoButtonColor = false,
ZIndex = 20
}, UI.menu)
handle.InputBegan:Connect(function(input)
if State.minimized then
return
end
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
resizingMenu = true
resizeStart = input.Position
resizeStartSize = UI.menu.AbsoluteSize
resizeStartPosition = UI.menu.Position
resizeDirectionX = directionX
resizeDirectionY = directionY
end
end)
end
makeResizeHandle("TopLeftResize", Vector2.new(0, 0), UDim2.fromOffset(0, 0), -1, -1)
makeResizeHandle("TopRightResize", Vector2.new(1, 0), UDim2.new(1, 0, 0, 0), 1, -1)
makeResizeHandle("BottomLeftResize", Vector2.new(0, 1), UDim2.new(0, 0, 1, 0), -1, 1)
makeResizeHandle("BottomRightResize", Vector2.new(1, 1), UDim2.new(1, 0, 1, 0), 1, 1)
UI.topBar.InputBegan:Connect(function(input)
if resizingMenu then
return
end
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
draggingMenu = true
dragStart = input.Position
menuStart = UI.menu.Position
end
end)
UserInputService.InputChanged:Connect(function(input)
if resizingMenu and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local delta = input.Position - resizeStart
local startWidth = resizeStartSize.X
local startHeight = resizeStartSize.Y
local newWidth = math.clamp(startWidth + (delta.X * resizeDirectionX), MENU_MIN_WIDTH, MENU_MAX_WIDTH)
local newHeight = math.clamp(startHeight + (delta.Y * resizeDirectionY), MENU_MIN_HEIGHT, MENU_MAX_HEIGHT)
local positionXOffset = resizeStartPosition.X.Offset
local positionYOffset = resizeStartPosition.Y.Offset
if resizeDirectionX < 0 then
positionXOffset = resizeStartPosition.X.Offset + (startWidth - newWidth)
end
if resizeDirectionY < 0 then
positionYOffset = resizeStartPosition.Y.Offset + (startHeight - newHeight)
end
UI.menu.Size = UDim2.fromOffset(newWidth, newHeight)
expandedMenuSize = UI.menu.Size
UI.menu.Position = UDim2.new(
resizeStartPosition.X.Scale,
positionXOffset,
resizeStartPosition.Y.Scale,
positionYOffset
)
syncShadow(false)
return
end
if draggingMenu and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local delta = input.Position - dragStart
UI.menu.Position = UDim2.new(
menuStart.X.Scale,
menuStart.X.Offset + delta.X,
menuStart.Y.Scale,
menuStart.Y.Offset + delta.Y
)
syncShadow(false)
end
end)
UserInputService.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
draggingMenu = false
resizingMenu = false
end
end)
--// UI animations and controls
UI.topBar.MouseEnter:Connect(function()
tween(UI.menuStroke, TWEENS.Smooth, {
Transparency = 0
})
end)
UI.topBar.MouseLeave:Connect(function()
tween(UI.menuStroke, TWEENS.Smooth, {
Transparency = 0.02
})
end)
UI.minimizeButton.MouseEnter:Connect(function()
tween(minimizeScale, TWEENS.Fast, {
Scale = 1.08
})
tween(UI.minimizeButton, TWEENS.Fast, {
BackgroundColor3 = COLORS.AccentOn
})
end)
UI.minimizeButton.MouseLeave:Connect(function()
tween(minimizeScale, TWEENS.Smooth, {
Scale = 1
})
tween(UI.minimizeButton, TWEENS.Smooth, {
BackgroundColor3 = State.minimized and COLORS.AccentDark or COLORS.Warning
})
end)
UI.minimizeButton.Activated:Connect(function()
State.minimized = not State.minimized
if State.minimized then
expandedMenuSize = UI.menu.Size
UI.content.Visible = false
tween(UI.menu, TWEENS.Window, {
Size = UDim2.fromOffset(UI.menu.AbsoluteSize.X, 52)
})
tween(UI.shadow, TWEENS.Window, {
Size = UDim2.fromOffset(UI.menu.AbsoluteSize.X + 18, 70)
})
UI.minimizeButton.Text = "+"
tween(UI.minimizeButton, TWEENS.Smooth, {
BackgroundColor3 = COLORS.AccentDark
})
else
UI.content.Visible = true
tween(UI.menu, TWEENS.Window, {
Size = expandedMenuSize
})
tween(UI.shadow, TWEENS.Window, {
Size = UDim2.fromOffset(expandedMenuSize.X.Offset + 18, expandedMenuSize.Y.Offset + 18)
})
UI.minimizeButton.Text = "-"
tween(UI.minimizeButton, TWEENS.Smooth, {
BackgroundColor3 = COLORS.Warning
})
end
end)
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed or input.KeyCode ~= UI_TOGGLE_KEY then
return
end
setOwnMenuVisible(not State.menuVisible)
end)
UserInputService.JumpRequest:Connect(function()
if not State.forceJump or not State.humanoid then
return
end
applyForceJump()
State.humanoid.Jump = true
State.humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end)
local titleHue = 0
RunService.RenderStepped:Connect(function(deltaTime)
titleHue = (titleHue + (deltaTime * 2.8)) % 1
UI.titleLabel.TextColor3 = Color3.fromHSV(titleHue, 0.8, 1)
UI.titleGlow.BackgroundColor3 = Color3.fromHSV((titleHue + 0.12) % 1, 0.75, 1)
end)
TweenService:Create(UI.titleGlow, TweenInfo.new(1.6, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, -1, true), {
BackgroundTransparency = 0.48
}):Play()
task.defer(function()
tween(UI.menuScale, TWEENS.Pop, {
Scale = 1
})
tween(UI.menuStroke, TWEENS.Window, {
Transparency = 0.02
})
end)
--// Live game hooks
UI.refreshPlayerList()
for _, targetPlayer in ipairs(Players:GetPlayers()) do
trackXrayPlayer(targetPlayer)
end
Players.PlayerAdded:Connect(function(targetPlayer)
trackXrayPlayer(targetPlayer)
updateXrayForPlayer(targetPlayer)
if UI.refreshPlayerList then
UI.refreshPlayerList()
end
end)
Players.PlayerRemoving:Connect(function(targetPlayer)
untrackXrayPlayer(targetPlayer)
if UI.refreshPlayerList then
UI.refreshPlayerList()
end
end)
table.insert(Runtime.itemConnections, Workspace.DescendantAdded:Connect(function(instance)
if State.highlightItems then
task.defer(function()
scanForItemHighlight(instance)
end)
end
end))
table.insert(Runtime.itemConnections, Workspace.DescendantRemoving:Connect(function(instance)
local adornee = findItemAdornee(instance) or instance
local highlight = Runtime.itemHighlights[adornee]
if highlight then
highlight:Destroy()
Runtime.itemHighlights[adornee] = nil
end
end))
playerGui.ChildAdded:Connect(function(child)
if State.hideUi and child:IsA("ScreenGui") then
task.defer(protectHiddenUi)
end
end)
RunService.Stepped:Connect(function()
if State.noclip and State.character then
for _, part in ipairs(getCharacterParts(State.character)) do
rememberCollision(part)
part.CanCollide = false
end
end
end)
RunService.Heartbeat:Connect(function()
if State.humanoid and State.humanoid.Parent and State.humanoid.WalkSpeed ~= State.speed then
State.humanoid.WalkSpeed = State.speed
end
if State.lowGravity and Workspace.Gravity ~= LOW_GRAVITY then
Workspace.Gravity = LOW_GRAVITY
end
if State.forceJump then
applyForceJump()
end
if State.fly then
updateFlyMovement()
end
if State.hideUi then
protectHiddenUi()
end
updatePiggySpectateTeleportButton()
end)
RunService:BindToRenderStep(LOCAL_CAMERA_LOCK, Enum.RenderPriority.Camera.Value - 1, function()
local camera = Workspace.CurrentCamera
if not camera then
return
end
if State.showPlayer and State.humanoid then
if localPlayer.CameraMode ~= Enum.CameraMode.Classic then
localPlayer.CameraMode = Enum.CameraMode.Classic
end
if camera.CameraType ~= Enum.CameraType.Custom then
camera.CameraType = Enum.CameraType.Custom
end
if camera.CameraSubject ~= State.humanoid then
camera.CameraSubject = State.humanoid
end
end
end)
refreshHeader()Features & Information
It has speed, noclip, low gravity, force jump, fly, teleport to player, player xray, and item highlights for things like keys.
The menu can move, resize, minimize, and has animated buttons and sliders.

this script does not even work when I try to load it doesn't work :(
I haven't tried it so I'll try it now