
Key RequiredUniversal

local TeleportService = game:GetService("TeleportService")
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterPack = game:GetService("StarterPack")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local CoreGuiService = game:GetService("CoreGui")
local TweenService = game:GetService("TweenService")
local CoreGui = type(cloneref) == "function" and cloneref(CoreGuiService) or CoreGuiService
local NameCache = {}
local selected, currentKeybind, isDraggable, settingsFrame, inventoryConnection, isSettingKey = nil, Enum.KeyCode.Y, false, nil, nil, false
local keybindButton = nil
local activeESP = {}
local activeDistance = {}
local backButton = nil
local currentTab = "Tools"
local function generateName()
local name = NameCache[#NameCache] or string.char(math.random(65,90))..string.char(math.random(97,122))..tostring(math.random(100,999))
table.insert(NameCache, name)
return name
end
local gui = Instance.new("ScreenGui", CoreGui)
gui.Name = generateName()
gui.IgnoreGuiInset = true
gui.DisplayOrder = 1000
local isMobile = UserInputService.TouchEnabled
local pcSize, pcPos = UDim2.new(0, 400, 0, 450), UDim2.new(0, 20, 0.5, -225)
local mobSize, mobPos = UDim2.new(0, 240, 0, 230), UDim2.new(0, 17, 0.5, -115)
local frame = Instance.new("Frame", gui)
frame.Name = generateName()
frame.Size = isMobile and mobSize or pcSize
frame.Position = isMobile and mobPos or pcPos
frame.BackgroundColor3 = Color3.fromRGB(15, 15, 25)
frame.ClipsDescendants = true
Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 15)
local stroke = Instance.new("UIStroke", frame)
stroke.Color = Color3.fromRGB(80, 60, 200)
stroke.Thickness = 2
local gradient = Instance.new("UIGradient", frame)
gradient.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(20, 15, 35)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(5, 5, 15))
})
local header = Instance.new("Frame", frame)
header.Size = UDim2.new(1, 0, 0, 40)
header.BackgroundColor3 = Color3.fromRGB(25, 20, 40)
local headerCorner = Instance.new("UICorner", header)
headerCorner.CornerRadius = UDim.new(0, 15)
local headerMask = Instance.new("Frame", header)
headerMask.Size = UDim2.new(1, 0, 0, 20)
headerMask.Position = UDim2.new(0, 0, 1, -20)
headerMask.BackgroundColor3 = Color3.fromRGB(25, 20, 40)
headerMask.BorderSizePixel = 0
local settingsButton = Instance.new("ImageButton", header)
settingsButton.Size = UDim2.new(0, 30, 0, 30)
settingsButton.Position = UDim2.new(0, 8, 0.5, -15)
settingsButton.Image = "rbxassetid://4859271243"
settingsButton.BackgroundTransparency = 1
settingsButton.ImageColor3 = Color3.fromRGB(200, 200, 255)
local title = Instance.new("TextLabel", header)
title.Font = Enum.Font.GothamBold
title.TextSize = 15
title.TextScaled = true
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.Size = UDim2.new(1, -120, 1, 0)
title.Position = UDim2.new(0.5, -10, 0, 0)
title.AnchorPoint = Vector2.new(0.5, 0)
title.BackgroundTransparency = 1
title.Text = "Select Player"
local close = Instance.new("TextButton", header)
close.Size = UDim2.new(0, 35, 0, 35)
close.Position = UDim2.new(1, -43, 0.5, -17.5)
close.Text = "X"
close.Font = Enum.Font.GothamBold
close.TextSize = 25
close.TextColor3 = Color3.fromRGB(255, 100, 100)
close.BackgroundColor3 = Color3.fromRGB(50, 25, 40)
Instance.new("UICorner", close).CornerRadius = UDim.new(0, 8)
local scroll = Instance.new("ScrollingFrame", frame)
scroll.Size = UDim2.new(1, -20, 1, -60)
scroll.Position = UDim2.new(0, 10, 0, 50)
scroll.BackgroundTransparency = 1
scroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
scroll.ScrollBarThickness = 8
scroll.ScrollBarImageColor3 = Color3.fromRGB(100, 80, 200)
local layout = Instance.new("UIListLayout", scroll)
layout.SortOrder = Enum.SortOrder.LayoutOrder
layout.Padding = UDim.new(0, 8)
local function getToolTexture(tool)
if not tool then return "rbxassetid://4483345998" end
if typeof(tool.TextureId) == "string" and tool.TextureId ~= "" then return tool.TextureId end
if tool:GetAttribute("ImageId") then return tool:GetAttribute("ImageId") end
local handle = tool:FindFirstChild("Handle")
if handle then
if handle:IsA("MeshPart") and handle.TextureID ~= "" then return handle.TextureID end
for _, decal in ipairs(handle:GetChildren()) do
if decal:IsA("Decal") and decal.Texture ~= "" then return decal.Texture end
end
end
return "rbxassetid://4483345998"
end
local function getRarityColor(rarity)
local colors = {
Common = Color3.fromRGB(0, 255, 0),
Rare = Color3.fromRGB(0, 0, 255),
Epic = Color3.fromRGB(128, 0, 128),
Legendary = Color3.fromRGB(255, 215, 0),
Uncommon = Color3.fromRGB(128, 128, 128)
}
return colors[rarity] or Color3.fromRGB(128, 128, 128)
end
local function matchToolName(tool)
if not tool then return "Unknown", getToolTexture(nil) end
local handle = tool:FindFirstChild("Handle")
if not handle then return tool.Name, getToolTexture(tool) end
local names = {}
for _, child in ipairs(handle:GetChildren()) do names[child.Name] = true end
for _, source in ipairs({ReplicatedStorage:FindFirstChild("Items"), StarterPack}) do
if source then
for _, item in ipairs(source:GetDescendants()) do
if item:IsA("Tool") and item:FindFirstChild("Handle") then
local matches = true
for name in pairs(names) do
if not item.Handle:FindFirstChild(name) then matches = false break end
end
if matches then return item.Name, getToolTexture(item) end
end
end
end
end
return tool.Name, getToolTexture(tool)
end
local function getPlayerTools(player)
local tools = {}
if not player then return tools end
for _, container in ipairs({player.Backpack, player.Character}) do
if container then
for _, tool in ipairs(container:GetChildren()) do
if tool:IsA("Tool") then
table.insert(tools, tool)
end
end
end
end
return tools
end
local function clearScrollContent()
for _, child in ipairs(scroll:GetChildren()) do
if child:IsA("GuiObject") and child ~= layout then child:Destroy() end
end
end
local function createESP(player)
if not player then return end
local character = player.Character
if not character then return end
local head = character:FindFirstChild("Head")
if not head then return end
local billboard = Instance.new("BillboardGui", head)
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.StudsOffset = Vector3.new(0, 2, 0)
billboard.AlwaysOnTop = true
billboard.Name = "UsernameESP"
local background = Instance.new("Frame", billboard)
background.Size = UDim2.new(0, 0, 0, 25)
background.Position = UDim2.new(0.5, 0, 0.5, 0)
background.AnchorPoint = Vector2.new(0.5, 0.5)
background.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
background.BackgroundTransparency = 0.3
Instance.new("UICorner", background).CornerRadius = UDim.new(0, 5)
local label = Instance.new("TextLabel", background)
label.Size = UDim2.new(1, -10, 1, 0)
label.Position = UDim2.new(0, 5, 0, 0)
label.BackgroundTransparency = 1
label.Font = Enum.Font.GothamBold
label.TextSize = 14
label.TextColor3 = Color3.fromRGB(255, 255, 255)
label.Text = player.DisplayName
label.TextXAlignment = Enum.TextXAlignment.Center
local textSize = game:GetService("TextService"):GetTextSize(player.DisplayName, 14, Enum.Font.GothamBold, Vector2.new(200, 25))
background.Size = UDim2.new(0, textSize.X + 20, 0, 25)
activeESP[player.Name] = billboard
end
local function createDistanceDisplay(player)
if not player then return end
local character = player.Character
if not character then return end
local rootPart = character:FindFirstChild("HumanoidRootPart")
if not rootPart then return end
local billboard = Instance.new("BillboardGui", rootPart)
billboard.Size = UDim2.new(0, 200, 0, 30)
billboard.StudsOffset = Vector3.new(0, -3, 0)
billboard.AlwaysOnTop = true
billboard.Name = "DistanceESP"
local background = Instance.new("Frame", billboard)
background.Size = UDim2.new(0, 0, 0, 20)
background.Position = UDim2.new(0.5, 0, 0.5, 0)
background.AnchorPoint = Vector2.new(0.5, 0.5)
background.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
background.BackgroundTransparency = 0.3
Instance.new("UICorner", background).CornerRadius = UDim.new(0, 5)
local label = Instance.new("TextLabel", background)
label.Size = UDim2.new(1, -10, 1, 0)
label.Position = UDim2.new(0, 5, 0, 0)
label.BackgroundTransparency = 1
label.Font = Enum.Font.GothamBold
label.TextSize = 12
label.TextColor3 = Color3.fromRGB(255, 255, 255)
label.Text = "0 studs"
label.TextXAlignment = Enum.TextXAlignment.Center
local connection
connection = RunService.Heartbeat:Connect(function()
local localPlayer = Players.LocalPlayer
if not localPlayer.Character or not localPlayer.Character:FindFirstChild("HumanoidRootPart") or not character.Parent or not rootPart.Parent then
billboard:Destroy()
connection:Disconnect()
activeDistance[player.Name] = nil
return
end
local distance = (localPlayer.Character.HumanoidRootPart.Position - rootPart.Position).Magnitude
label.Text = string.format("%.1f studs", distance)
local textSize = game:GetService("TextService"):GetTextSize(label.Text, 12, Enum.Font.GothamBold, Vector2.new(200, 20))
background.Size = UDim2.new(0, textSize.X + 20, 0, 20)
end)
activeDistance[player.Name] = billboard
end
local function toggleUsernameESP(player, enable)
if not player then return end
if enable then
if activeESP[player.Name] then return end
if player.Character then createESP(player) end
player.CharacterAdded:Connect(function() createESP(player) end)
else
if activeESP[player.Name] then
activeESP[player.Name]:Destroy()
activeESP[player.Name] = nil
end
end
end
local function toggleDistanceDisplay(player, enable)
if not player then return end
if enable then
if activeDistance[player.Name] then return end
if player.Character then createDistanceDisplay(player) end
player.CharacterAdded:Connect(function() createDistanceDisplay(player) end)
else
if activeDistance[player.Name] then
activeDistance[player.Name]:Destroy()
activeDistance[player.Name] = nil
end
end
end
local function createKeybindSettings()
if settingsFrame then settingsFrame:Destroy() end
settingsFrame = Instance.new("Frame", frame)
settingsFrame.Size = UDim2.new(1, -20, 0, 150)
settingsFrame.Position = UDim2.new(0, 10, 0, 50)
settingsFrame.BackgroundColor3 = Color3.fromRGB(20, 15, 30)
settingsFrame.Visible = false
Instance.new("UICorner", settingsFrame).CornerRadius = UDim.new(0, 10)
local keybindLabel = Instance.new("TextLabel", settingsFrame)
keybindLabel.Size = UDim2.new(1, -20, 0, 25)
keybindLabel.Position = UDim2.new(0, 10, 0, 10)
keybindLabel.BackgroundTransparency = 1
keybindLabel.Font = Enum.Font.Gotham
keybindLabel.TextSize = 14
keybindLabel.TextColor3 = Color3.fromRGB(200, 200, 255)
keybindLabel.Text = "Keybind: " .. currentKeybind.Name
keybindLabel.TextXAlignment = Enum.TextXAlignment.Left
keybindButton = Instance.new("TextButton", settingsFrame)
keybindButton.Size = UDim2.new(0, 120, 0, 30)
keybindButton.Position = UDim2.new(0, 10, 0, 40)
keybindButton.BackgroundColor3 = Color3.fromRGB(60, 40, 120)
keybindButton.Font = Enum.Font.Gotham
keybindButton.TextSize = 14
keybindButton.TextColor3 = Color3.fromRGB(255, 255, 255)
keybindButton.Text = "Change Keybind"
Instance.new("UICorner", keybindButton).CornerRadius = UDim.new(0, 8)
local dragLabel = Instance.new("TextLabel", settingsFrame)
dragLabel.Size = UDim2.new(1, -20, 0, 25)
dragLabel.Position = UDim2.new(0, 10, 0, 90)
dragLabel.BackgroundTransparency = 1
dragLabel.Font = Enum.Font.Gotham
dragLabel.TextSize = 14
dragLabel.TextColor3 = Color3.fromRGB(200, 200, 255)
dragLabel.Text = "Drag UI: " .. (isDraggable and "ON" or "OFF")
dragLabel.TextXAlignment = Enum.TextXAlignment.Left
local dragToggleButton = Instance.new("TextButton", settingsFrame)
dragToggleButton.Size = UDim2.new(0, 50, 0, 25)
dragToggleButton.Position = UDim2.new(1, -60, 0, 90)
dragToggleButton.BackgroundColor3 = Color3.fromRGB(40, 40, 60)
dragToggleButton.Text = ""
dragToggleButton.AutoButtonColor = false
Instance.new("UICorner", dragToggleButton).CornerRadius = UDim.new(0, 12)
local dragToggleInner = Instance.new("Frame", dragToggleButton)
dragToggleInner.Size = UDim2.new(0, 21, 0, 21)
dragToggleInner.Position = isDraggable and UDim2.new(1, -23, 0.5, -10.5) or UDim2.new(0, 2, 0.5, -10.5)
dragToggleInner.BackgroundColor3 = isDraggable and Color3.fromRGB(100, 255, 100) or Color3.fromRGB(255, 255, 255)
dragToggleInner.BorderSizePixel = 0
Instance.new("UICorner", dragToggleInner).CornerRadius = UDim.new(0, 10)
dragToggleButton.MouseButton1Click:Connect(function()
isDraggable = not isDraggable
dragLabel.Text = "Drag UI: " .. (isDraggable and "ON" or "OFF")
TweenService:Create(dragToggleInner, TweenInfo.new(0.2, Enum.EasingStyle.Quad), {
Position = isDraggable and UDim2.new(1, -23, 0.5, -10.5) or UDim2.new(0, 2, 0.5, -10.5),
BackgroundColor3 = isDraggable and Color3.fromRGB(100, 255, 100) or Color3.fromRGB(255, 255, 255)
}):Play()
end)
local function updateKeybindButton()
if isSettingKey then
keybindButton.Text = "Press key..."
local dots = 0
local dotAnimation
dotAnimation = RunService.Heartbeat:Connect(function()
if not isSettingKey then dotAnimation:Disconnect() return end
dots = (dots + 0.1) % 4
keybindButton.Text = "Press key" .. string.rep(".", math.floor(dots))
end)
else
keybindButton.Text = "Change Keybind"
keybindLabel.Text = "Keybind: " .. currentKeybind.Name
end
end
keybindButton.MouseButton1Click:Connect(function()
if isSettingKey then return end
isSettingKey = true
updateKeybindButton()
end)
UserInputService.InputBegan:Connect(function(input)
if isSettingKey and input.UserInputType == Enum.UserInputType.Keyboard then
currentKeybind = input.KeyCode
isSettingKey = false
updateKeybindButton()
end
end)
end
local function renderTools(player, contentFrame, contentLayout)
if not contentFrame or not contentLayout then return end
for _, child in ipairs(contentFrame:GetChildren()) do
if child ~= contentLayout then child:Destroy() end
end
local tools = getPlayerTools(player)
if #tools == 0 then
local noTools = Instance.new("TextLabel", contentFrame)
noTools.Size = UDim2.new(1, 0, 0, 50)
noTools.BackgroundTransparency = 1
noTools.Font = Enum.Font.GothamBold
noTools.TextSize = 14
noTools.TextColor3 = Color3.fromRGB(200, 200, 200)
noTools.Text = "No tools found"
noTools.TextYAlignment = Enum.TextYAlignment.Center
return
end
for i, tool in ipairs(tools) do
local toolName, toolImage = matchToolName(tool)
local toolFrame = Instance.new("Frame", contentFrame)
toolFrame.Size = UDim2.new(1, 0, 0, 70)
toolFrame.BackgroundColor3 = Color3.fromRGB(30, 25, 45)
toolFrame.LayoutOrder = i
Instance.new("UICorner", toolFrame).CornerRadius = UDim.new(0, 10)
local toolIcon = Instance.new("ImageLabel", toolFrame)
toolIcon.Size = UDim2.new(0, 60, 0, 60)
toolIcon.Position = UDim2.new(0, 5, 0, 5)
toolIcon.BackgroundTransparency = 1
toolIcon.Image = toolImage
toolIcon.ImageColor3 = Color3.fromRGB(200, 200, 255)
Instance.new("UICorner", toolIcon).CornerRadius = UDim.new(0, 8)
local toolLabel = Instance.new("TextLabel", toolFrame)
toolLabel.Size = UDim2.new(1, -75, 1, 0)
toolLabel.Position = UDim2.new(0, 75, 0, 0)
toolLabel.BackgroundTransparency = 1
toolLabel.Font = Enum.Font.GothamBold
toolLabel.TextSize = 16
toolLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
toolLabel.Text = toolName
toolLabel.TextXAlignment = Enum.TextXAlignment.Left
local rarity = tool:GetAttribute("RarityName") or "Unknown"
local rarityLabel = Instance.new("TextLabel", toolFrame)
rarityLabel.Size = UDim2.new(0, 80, 0, 20)
rarityLabel.Position = UDim2.new(1, -85, 0, 45)
rarityLabel.BackgroundColor3 = Color3.fromRGB(40, 40, 60)
rarityLabel.Font = Enum.Font.GothamBold
rarityLabel.TextSize = 10
rarityLabel.TextColor3 = getRarityColor(rarity)
rarityLabel.Text = rarity:upper()
rarityLabel.TextXAlignment = Enum.TextXAlignment.Center
Instance.new("UICorner", rarityLabel).CornerRadius = UDim.new(0, 5)
if player and player.Character and tool.Parent == player.Character then
local equippedLabel = Instance.new("TextLabel", toolFrame)
equippedLabel.Size = UDim2.new(0, 80, 0, 20)
equippedLabel.Position = UDim2.new(1, -85, 0, 5)
equippedLabel.BackgroundColor3 = Color3.fromRGB(40, 120, 60)
equippedLabel.Font = Enum.Font.GothamBold
equippedLabel.TextSize = 10
equippedLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
equippedLabel.Text = "EQUIPPED"
equippedLabel.TextXAlignment = Enum.TextXAlignment.Center
Instance.new("UICorner", equippedLabel).CornerRadius = UDim.new(0, 5)
end
end
contentFrame.Size = UDim2.new(1, 0, 0, math.max(300, #tools * 78))
end
local function renderVisuals(player, contentFrame, contentLayout)
if not contentFrame or not contentLayout then return end
for _, child in ipairs(contentFrame:GetChildren()) do
if child ~= contentLayout then child:Destroy() end
end
local espFrame = Instance.new("Frame", contentFrame)
espFrame.Size = UDim2.new(1, 0, 0, 60)
espFrame.BackgroundColor3 = Color3.fromRGB(30, 25, 45)
espFrame.LayoutOrder = 1
Instance.new("UICorner", espFrame).CornerRadius = UDim.new(0, 10)
local espLabel = Instance.new("TextLabel", espFrame)
espLabel.Size = UDim2.new(1, -120, 1, 0)
espLabel.Position = UDim2.new(0, 15, 0, 0)
espLabel.BackgroundTransparency = 1
espLabel.Font = Enum.Font.GothamBold
espLabel.TextSize = 14
espLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
espLabel.Text = "Username ESP"
espLabel.TextXAlignment = Enum.TextXAlignment.Left
local espToggleButton = Instance.new("TextButton", espFrame)
espToggleButton.Size = UDim2.new(0, 50, 0, 25)
espToggleButton.Position = UDim2.new(1, -60, 0.5, -12.5)
espToggleButton.BackgroundColor3 = Color3.fromRGB(40, 40, 60)
espToggleButton.Text = ""
espToggleButton.AutoButtonColor = false
Instance.new("UICorner", espToggleButton).CornerRadius = UDim.new(0, 12)
local espToggleInner = Instance.new("Frame", espToggleButton)
espToggleInner.Size = UDim2.new(0, 21, 0, 21)
espToggleInner.Position = activeESP[player and player.Name] and UDim2.new(1, -23, 0.5, -10.5) or UDim2.new(0, 2, 0.5, -10.5)
espToggleInner.BackgroundColor3 = activeESP[player and player.Name] and Color3.fromRGB(100, 255, 100) or Color3.fromRGB(255, 255, 255)
espToggleInner.BorderSizePixel = 0
Instance.new("UICorner", espToggleInner).CornerRadius = UDim.new(0, 10)
espToggleButton.MouseButton1Click:Connect(function()
local isActive = activeESP[player and player.Name] ~= nil
toggleUsernameESP(player, not isActive)
TweenService:Create(espToggleInner, TweenInfo.new(0.2, Enum.EasingStyle.Quad), {
Position = not isActive and UDim2.new(1, -23, 0.5, -10.5) or UDim2.new(0, 2, 0.5, -10.5),
BackgroundColor3 = not isActive and Color3.fromRGB(100, 255, 100) or Color3.fromRGB(255, 255, 255)
}):Play()
end)
local distanceFrame = Instance.new("Frame", contentFrame)
distanceFrame.Size = UDim2.new(1, 0, 0, 60)
distanceFrame.BackgroundColor3 = Color3.fromRGB(30, 25, 45)
distanceFrame.LayoutOrder = 2
Instance.new("UICorner", distanceFrame).CornerRadius = UDim.new(0, 10)
local distanceLabel = Instance.new("TextLabel", distanceFrame)
distanceLabel.Size = UDim2.new(1, -120, 1, 0)
distanceLabel.Position = UDim2.new(0, 15, 0, 0)
distanceLabel.BackgroundTransparency = 1
distanceLabel.Font = Enum.Font.GothamBold
distanceLabel.TextSize = 14
distanceLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
distanceLabel.Text = "Distance Display"
distanceLabel.TextXAlignment = Enum.TextXAlignment.Left
local distanceToggleButton = Instance.new("TextButton", distanceFrame)
distanceToggleButton.Size = UDim2.new(0, 50, 0, 25)
distanceToggleButton.Position = UDim2.new(1, -60, 0.5, -12.5)
distanceToggleButton.BackgroundColor3 = Color3.fromRGB(40, 40, 60)
distanceToggleButton.Text = ""
distanceToggleButton.AutoButtonColor = false
Instance.new("UICorner", distanceToggleButton).CornerRadius = UDim.new(0, 12)
local distanceToggleInner = Instance.new("Frame", distanceToggleButton)
distanceToggleInner.Size = UDim2.new(0, 21, 0, 21)
distanceToggleInner.Position = activeDistance[player and player.Name] and UDim2.new(1, -23, 0.5, -10.5) or UDim2.new(0, 2, 0.5, -10.5)
distanceToggleInner.BackgroundColor3 = activeDistance[player and player.Name] and Color3.fromRGB(100, 255, 100) or Color3.fromRGB(255, 255, 255)
distanceToggleInner.BorderSizePixel = 0
Instance.new("UICorner", distanceToggleInner).CornerRadius = UDim.new(0, 10)
distanceToggleButton.MouseButton1Click:Connect(function()
local isActive = activeDistance[player and player.Name] ~= nil
toggleDistanceDisplay(player, not isActive)
TweenService:Create(distanceToggleInner, TweenInfo.new(0.2, Enum.EasingStyle.Quad), {
Position = not isActive and UDim2.new(1, -23, 0.5, -10.5) or UDim2.new(0, 2, 0.5, -10.5),
BackgroundColor3 = not isActive and Color3.fromRGB(100, 255, 100) or Color3.fromRGB(255, 255, 255)
}):Play()
end)
contentFrame.Size = UDim2.new(1, 0, 0, 128)
end
local function showPlayerInventory(player)
if not player then return end
if inventoryConnection then
inventoryConnection:Disconnect()
inventoryConnection = nil
end
selected = player
title.Text = player.DisplayName .. "'s Inventory"
scroll.CanvasPosition = Vector2.new(0, 0)
clearScrollContent()
local tabContainer = Instance.new("Frame", scroll)
tabContainer.Size = UDim2.new(1, 0, 0, 40)
tabContainer.BackgroundTransparency = 1
tabContainer.LayoutOrder = 1
local toolsTab = Instance.new("TextButton", tabContainer)
toolsTab.Size = UDim2.new(0.5, -4, 1, 0)
toolsTab.Position = UDim2.new(0, 0, 0, 0)
toolsTab.Text = "Tools"
toolsTab.Font = Enum.Font.GothamBold
toolsTab.TextSize = 15
toolsTab.TextColor3 = Color3.fromRGB(255, 255, 255)
toolsTab.BackgroundColor3 = Color3.fromRGB(80, 60, 200)
Instance.new("UICorner", toolsTab).CornerRadius = UDim.new(0, 8)
local visualsTab = Instance.new("TextButton", tabContainer)
visualsTab.Size = UDim2.new(0.5, -4, 1, 0)
visualsTab.Position = UDim2.new(0.5, 4, 0, 0)
visualsTab.Text = "Visuals"
visualsTab.Font = Enum.Font.GothamBold
visualsTab.TextSize = 15
visualsTab.TextColor3 = Color3.fromRGB(200, 200, 200)
visualsTab.BackgroundColor3 = Color3.fromRGB(40, 30, 60)
Instance.new("UICorner", visualsTab).CornerRadius = UDim.new(0, 8)
local indicator = Instance.new("Frame", tabContainer)
indicator.Size = UDim2.new(0.5, -4, 0, 4)
indicator.Position = UDim2.new(0, 0, 1, -4)
indicator.BackgroundColor3 = Color3.fromRGB(120, 100, 255)
Instance.new("UICorner", indicator).CornerRadius = UDim.new(0, 2)
local contentFrame = Instance.new("Frame", scroll)
contentFrame.Size = UDim2.new(1, 0, 0, 300)
contentFrame.Position = UDim2.new(0, 0, 0, 0)
contentFrame.BackgroundTransparency = 1
contentFrame.LayoutOrder = 2
local contentLayout = Instance.new("UIListLayout", contentFrame)
contentLayout.SortOrder = Enum.SortOrder.LayoutOrder
contentLayout.Padding = UDim.new(0, 8)
local function animateTab(tab, otherTab, indicatorPos)
if not tab or not otherTab or not indicator then return end
TweenService:Create(tab, TweenInfo.new(0.2, Enum.EasingStyle.Quad), {
BackgroundColor3 = Color3.fromRGB(80, 60, 200),
TextColor3 = Color3.fromRGB(255, 255, 255)
}):Play()
TweenService:Create(otherTab, TweenInfo.new(0.2, Enum.EasingStyle.Quad), {
BackgroundColor3 = Color3.fromRGB(40, 30, 60),
TextColor3 = Color3.fromRGB(200, 200, 200)
}):Play()
TweenService:Create(indicator, TweenInfo.new(0.2, Enum.EasingStyle.Quad), {
Position = indicatorPos
}):Play()
end
local function showToolsTab()
currentTab = "Tools"
animateTab(toolsTab, visualsTab, UDim2.new(0, 0, 1, -4))
if inventoryConnection then
inventoryConnection:Disconnect()
inventoryConnection = nil
end
renderTools(player, contentFrame, contentLayout)
inventoryConnection = RunService.Heartbeat:Connect(function()
if currentTab == "Tools" then
renderTools(player, contentFrame, contentLayout)
end
end)
end
toolsTab.MouseButton1Click:Connect(showToolsTab)
visualsTab.MouseButton1Click:Connect(function()
currentTab = "Visuals"
animateTab(visualsTab, toolsTab, UDim2.new(0.5, 4, 1, -4))
if inventoryConnection then
inventoryConnection:Disconnect()
inventoryConnection = nil
end
renderVisuals(player, contentFrame, contentLayout)
end)
showToolsTab()
if backButton then backButton:Destroy() end
backButton = Instance.new("TextButton", frame)
backButton.Name = generateName()
backButton.Size = UDim2.new(0, 100, 0, 30)
backButton.Position = UDim2.new(0, 10, 1, -40)
backButton.Text = "<-- Back"
backButton.Font = Enum.Font.GothamBold
backButton.TextSize = 14
backButton.TextColor3 = Color3.fromRGB(255, 255, 255)
backButton.BackgroundColor3 = Color3.fromRGB(80, 60, 200)
Instance.new("UICorner", backButton).CornerRadius = UDim.new(0, 8)
backButton.MouseButton1Click:Connect(function()
if inventoryConnection then
inventoryConnection:Disconnect()
inventoryConnection = nil
end
clearScrollContent()
renderPlayerList()
title.Text = "Select Player"
if backButton then
backButton:Destroy()
backButton = nil
end
end)
end
function renderPlayerList()
clearScrollContent()
local playerCount = 0
for _, player in ipairs(Players:GetPlayers()) do
if player ~= Players.LocalPlayer then
playerCount = playerCount + 1
local playerButton = Instance.new("TextButton", scroll)
playerButton.Size = UDim2.new(1, 0, 0, 50)
playerButton.BackgroundColor3 = Color3.fromRGB(40, 30, 60)
playerButton.Font = Enum.Font.GothamBold
playerButton.TextSize = 15
playerButton.TextColor3 = Color3.fromRGB(255, 255, 255)
playerButton.Text = player.DisplayName
playerButton.LayoutOrder = playerCount
Instance.new("UICorner", playerButton).CornerRadius = UDim.new(0, 10)
local hoverTween = TweenService:Create(playerButton, TweenInfo.new(0.2, Enum.EasingStyle.Quad), {
BackgroundColor3 = Color3.fromRGB(60, 45, 90)
})
local normalTween = TweenService:Create(playerButton, TweenInfo.new(0.2, Enum.EasingStyle.Quad), {
BackgroundColor3 = Color3.fromRGB(40, 30, 60)
})
playerButton.MouseEnter:Connect(function() hoverTween:Play() end)
playerButton.MouseLeave:Connect(function() normalTween:Play() end)
playerButton.MouseButton1Click:Connect(function() showPlayerInventory(player) end)
end
end
end
local function makeDraggable(uiElement)
local dragging = false
local dragInput, dragStart, startPos
local function update(input)
local delta = input.Position - dragStart
uiElement.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
uiElement.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = uiElement.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
uiElement.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragging and isDraggable then
update(input)
end
end)
end
createKeybindSettings()
settingsButton.MouseButton1Click:Connect(function()
settingsFrame.Visible = not settingsFrame.Visible
scroll.Visible = not settingsFrame.Visible
end)
close.MouseButton1Click:Connect(function()
gui:Destroy()
end)
Players.PlayerRemoving:Connect(function(player)
if player == selected then
title.Text = "Player Left!"
end
if activeESP[player.Name] then
activeESP[player.Name]:Destroy()
activeESP[player.Name] = nil
end
if activeDistance[player.Name] then
activeDistance[player.Name]:Destroy()
activeDistance[player.Name] = nil
end
end)
Players.PlayerAdded:Connect(renderPlayerList)
renderPlayerList()
UserInputService.InputBegan:Connect(function(input)
if input.KeyCode == currentKeybind and not isSettingKey then
gui.Enabled = not gui.Enabled
end
end)
makeDraggable(frame)No comments yet for this script.



