
KeylessUniversal

-- // DEV TROLL MENU V7 - PERSISTS AFTER DEATH // --
local player = game.Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local userInput = game:GetService("UserInputService")
local runService = game:GetService("RunService")
local lighting = game:GetService("Lighting")
local workspace = game:GetService("Workspace")
local replicatedStorage = game:GetService("ReplicatedStorage")
-- Variables
local char = player.Character or player.CharacterAdded:Wait()
local humanoid = char:WaitForChild("Humanoid")
local rootPart = char:WaitForChild("HumanoidRootPart")
-- Active connections storage
local activeConnections = {}
local activeFlags = {
flying = false,
noclip = false,
infHealth = false,
spinActive = false,
xrayActive = false
}
-- Spawn Point Variables
local customSpawnPoint = nil
local multiSpawns = {}
-- Helper to refresh character
local function refreshChar()
char = player.Character
if not char then return end
humanoid = char:FindFirstChild("Humanoid")
rootPart = char:FindFirstChild("HumanoidRootPart")
end
-- REAPPLY TOGGLES AFTER RESPAWN (THIS KEEPS THEM ACTIVE)
local function onCharacterAdded(newChar)
char = newChar
humanoid = char:WaitForChild("Humanoid")
rootPart = char:WaitForChild("HumanoidRootPart")
-- Re-apply any active features after respawn
if activeFlags.infHealth then
startInfHealth()
end
if activeFlags.flying then
startFly()
end
if activeFlags.noclip then
startNoclip()
end
if activeFlags.xrayActive then
startXray()
end
if activeFlags.spinActive then
startSpin()
end
-- Re-apply speed/jump if they were modified
if humanoid and savedWalkSpeed and savedWalkSpeed > 0 then
humanoid.WalkSpeed = savedWalkSpeed
end
if humanoid and savedJumpPower and savedJumpPower > 0 then
humanoid.JumpPower = savedJumpPower
end
end
-- Store saved speeds
local savedWalkSpeed = 0
local savedJumpPower = 0
player.CharacterAdded:Connect(onCharacterAdded)
-- Helper to send chat message
local function sendChatMessage(message)
if message == "" then return end
local chat = replicatedStorage:FindFirstChild("DefaultChatSystemChatEvents")
if chat and chat:FindFirstChild("SayMessageRequest") then
chat.SayMessageRequest:FireServer(message, "All")
end
end
-- // UI Creation // (Parented to playerGui - SURVIVES DEATH)
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "DevMenu"
screenGui.Parent = playerGui
screenGui.ResetOnSpawn = false -- THIS IS KEY - prevents reset on death
-- Main Frame
local mainFrame = Instance.new("Frame")
mainFrame.Size = UDim2.new(0, 420, 0, 680)
mainFrame.Position = UDim2.new(0.5, -210, 0.5, -340)
mainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
mainFrame.BackgroundTransparency = 0.05
mainFrame.BorderSizePixel = 0
mainFrame.ClipsDescendants = true
mainFrame.Parent = screenGui
local corners = Instance.new("UICorner")
corners.CornerRadius = UDim.new(0, 12)
corners.Parent = mainFrame
-- Title Bar
local titleBar = Instance.new("Frame")
titleBar.Size = UDim2.new(1, 0, 0, 50)
titleBar.BackgroundColor3 = Color3.fromRGB(35, 35, 45)
titleBar.BorderSizePixel = 0
titleBar.Parent = mainFrame
local titleCorners = Instance.new("UICorner")
titleCorners.CornerRadius = UDim.new(0, 12)
titleCorners.Parent = titleBar
local titleText = Instance.new("TextLabel")
titleText.Size = UDim2.new(1, 0, 1, 0)
titleText.BackgroundTransparency = 1
titleText.Text = "π₯ TROLL TOOLBOX v7"
titleText.TextColor3 = Color3.fromRGB(255, 80, 80)
titleText.TextSize = 18
titleText.Font = Enum.Font.GothamBold
titleText.TextXAlignment = Enum.TextXAlignment.Left
titleText.Position = UDim2.new(0, 15, 0, 0)
titleText.Parent = titleBar
-- Close Button
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 35, 1, -10)
closeBtn.Position = UDim2.new(1, -42, 0, 5)
closeBtn.Text = "β"
closeBtn.TextColor3 = Color3.fromRGB(255, 80, 80)
closeBtn.TextSize = 20
closeBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 75)
closeBtn.BorderSizePixel = 0
closeBtn.Parent = titleBar
local closeCorners = Instance.new("UICorner")
closeCorners.CornerRadius = UDim.new(0, 6)
closeCorners.Parent = closeBtn
closeBtn.MouseButton1Click:Connect(function()
screenGui:Destroy()
for _, conn in pairs(activeConnections) do
if conn then conn:Disconnect() end
end
end)
-- Tab Buttons
local tabBar = Instance.new("Frame")
tabBar.Size = UDim2.new(1, 0, 0, 50)
tabBar.Position = UDim2.new(0, 0, 0, 50)
tabBar.BackgroundColor3 = Color3.fromRGB(25, 25, 30)
tabBar.BorderSizePixel = 0
tabBar.Parent = mainFrame
local tabs = {"MOVEMENT", "VISUALS", "CRAZY", "LIGHTING", "FAKE TXT", "IMPERSONATE", "INVENTORY", "SPAWN"}
local tabButtons = {}
local currentTab = "MOVEMENT"
-- Content Frame
local contentFrame = Instance.new("Frame")
contentFrame.Size = UDim2.new(1, -15, 1, -120)
contentFrame.Position = UDim2.new(0, 8, 0, 110)
contentFrame.BackgroundTransparency = 1
contentFrame.Parent = mainFrame
local function switchTab(tabName)
currentTab = tabName
for _, child in ipairs(contentFrame:GetChildren()) do
if child:IsA("ScrollingFrame") then
child.Visible = (child.Name == tabName)
end
end
for i, btn in ipairs(tabButtons) do
btn.BackgroundColor3 = (tabs[i] == tabName) and Color3.fromRGB(255, 80, 80) or Color3.fromRGB(45, 45, 55)
btn.TextColor3 = (tabs[i] == tabName) and Color3.fromRGB(255, 255, 255) or Color3.fromRGB(180, 180, 200)
end
end
for i, tabName in ipairs(tabs) do
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1/#tabs, 0, 1, 0)
btn.Position = UDim2.new((i-1)/#tabs, 0, 0, 0)
btn.Text = tabName
btn.TextColor3 = Color3.fromRGB(180, 180, 200)
btn.TextSize = 9
btn.Font = Enum.Font.GothamSemibold
btn.BackgroundColor3 = Color3.fromRGB(45, 45, 55)
btn.BorderSizePixel = 0
btn.Parent = tabBar
table.insert(tabButtons, btn)
btn.MouseButton1Click:Connect(function()
switchTab(tabName)
end)
end
-- Helper: Create scrolling frame
local function createScrollingTab(tabName)
local scroll = Instance.new("ScrollingFrame")
scroll.Name = tabName
scroll.Size = UDim2.new(1, 0, 1, 0)
scroll.BackgroundTransparency = 1
scroll.ScrollBarThickness = 5
scroll.ScrollBarImageColor3 = Color3.fromRGB(255, 80, 80)
scroll.CanvasSize = UDim2.new(0, 0, 0, 0)
scroll.Parent = contentFrame
scroll.Visible = (tabName == currentTab)
local layout = Instance.new("UIListLayout")
layout.Padding = UDim.new(0, 6)
layout.SortOrder = Enum.SortOrder.LayoutOrder
layout.Parent = scroll
layout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
scroll.CanvasSize = UDim2.new(0, 0, 0, layout.AbsoluteContentSize.Y + 10)
end)
return scroll
end
-- Helper: Add button
local function addButton(parent, text, color, callback)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1, -10, 0, 40)
btn.Text = text
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.TextSize = 13
btn.Font = Enum.Font.Gotham
btn.BackgroundColor3 = color or Color3.fromRGB(55, 55, 65)
btn.BorderSizePixel = 0
btn.Parent = parent
local btnCorners = Instance.new("UICorner")
btnCorners.CornerRadius = UDim.new(0, 8)
btnCorners.Parent = btn
btn.MouseButton1Click:Connect(callback)
return btn
end
-- Helper: Add toggle button
local function addToggle(parent, text, color, onToggle)
local state = false
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1, -10, 0, 40)
btn.Text = text .. " β"
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.TextSize = 13
btn.Font = Enum.Font.Gotham
btn.BackgroundColor3 = color or Color3.fromRGB(55, 55, 65)
btn.BorderSizePixel = 0
btn.Parent = parent
local btnCorners = Instance.new("UICorner")
btnCorners.CornerRadius = UDim.new(0, 8)
btnCorners.Parent = btn
local function updateButton()
btn.Text = text .. (state and " β
" or " β")
btn.BackgroundColor3 = state and Color3.fromRGB(80, 50, 50) or (color or Color3.fromRGB(55, 55, 65))
end
updateButton()
btn.MouseButton1Click:Connect(function()
state = not state
updateButton()
if onToggle then onToggle(state) end
end)
return btn, function() return state end
end
-- ========== FLY SYSTEM ==========
local flyBodyVelocity = nil
local flyConnection = nil
local function startFly()
refreshChar()
if not humanoid then return end
humanoid.PlatformStand = true
flyBodyVelocity = Instance.new("BodyVelocity")
flyBodyVelocity.MaxForce = Vector3.new(1e6, 1e6, 1e6)
flyBodyVelocity.Velocity = Vector3.new(0, 0, 0)
if rootPart then
flyBodyVelocity.Parent = rootPart
end
if flyConnection then flyConnection:Disconnect() end
flyConnection = userInput.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed or not activeFlags.flying then return end
if not flyBodyVelocity or flyBodyVelocity.Parent == nil then return end
if not rootPart then return end
local currentVel = flyBodyVelocity.Velocity
if input.KeyCode == Enum.KeyCode.W then
flyBodyVelocity.Velocity = currentVel + Vector3.new(0, 0, -60)
elseif input.KeyCode == Enum.KeyCode.S then
flyBodyVelocity.Velocity = currentVel + Vector3.new(0, 0, 60)
elseif input.KeyCode == Enum.KeyCode.A then
flyBodyVelocity.Velocity = currentVel + Vector3.new(-60, 0, 0)
elseif input.KeyCode == Enum.KeyCode.D then
flyBodyVelocity.Velocity = currentVel + Vector3.new(60, 0, 0)
elseif input.KeyCode == Enum.KeyCode.Space then
flyBodyVelocity.Velocity = currentVel + Vector3.new(0, 60, 0)
elseif input.KeyCode == Enum.KeyCode.LeftShift then
flyBodyVelocity.Velocity = currentVel + Vector3.new(0, -60, 0)
end
end)
end
local function stopFly()
if flyBodyVelocity then flyBodyVelocity:Destroy() end
if flyConnection then flyConnection:Disconnect() end
flyBodyVelocity = nil
flyConnection = nil
refreshChar()
if humanoid then
humanoid.PlatformStand = false
end
end
-- ========== NOCLIP SYSTEM ==========
local noclipConnection = nil
local function startNoclip()
if noclipConnection then noclipConnection:Disconnect() end
noclipConnection = runService.Stepped:Connect(function()
if activeFlags.noclip and player.Character then
for _, part in ipairs(player.Character:GetDescendants()) do
if part:IsA("BasePart") then
part.CanCollide = false
end
end
end
end)
end
local function stopNoclip()
if noclipConnection then noclipConnection:Disconnect() end
noclipConnection = nil
if player.Character then
for _, part in ipairs(player.Character:GetDescendants()) do
if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
part.CanCollide = true
end
end
end
end
-- ========== INFINITE HEALTH ==========
local healthConnection = nil
local function startInfHealth()
if healthConnection then healthConnection:Disconnect() end
healthConnection = runService.Heartbeat:Connect(function()
if player.Character and player.Character:FindFirstChild("Humanoid") then
local hum = player.Character.Humanoid
if hum.Health < hum.MaxHealth then
hum.Health = hum.MaxHealth
end
end
end)
end
local function stopInfHealth()
if healthConnection then healthConnection:Disconnect() end
healthConnection = nil
end
-- ========== X-RAY (NO LAG) ==========
local xrayConnection = nil
local xrayParts = {}
local function startXray()
local function updateXray()
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("BasePart") and obj.Transparency < 0.9 and not obj:IsDescendantOf(player.Character) then
if not xrayParts[obj] then
xrayParts[obj] = true
obj.LocalTransparencyModifier = 0.5
end
end
end
end
updateXray()
if xrayConnection then xrayConnection:Disconnect() end
xrayConnection = workspace.DescendantAdded:Connect(function(desc)
if desc:IsA("BasePart") and not desc:IsDescendantOf(player.Character) then
desc.LocalTransparencyModifier = 0.5
xrayParts[desc] = true
end
end)
end
local function stopXray()
if xrayConnection then xrayConnection:Disconnect() end
xrayConnection = nil
for part in pairs(xrayParts) do
if part and part.Parent then
part.LocalTransparencyModifier = 0
end
end
xrayParts = {}
end
-- ========== SPIN SYSTEM ==========
local spinConnection = nil
local function startSpin()
if spinConnection then spinConnection:Disconnect() end
spinConnection = runService.Stepped:Connect(function()
if activeFlags.spinActive and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
local hrp = player.Character.HumanoidRootPart
hrp.CFrame = hrp.CFrame * CFrame.Angles(0, math.rad(25), 0)
end
end)
end
local function stopSpin()
if spinConnection then spinConnection:Disconnect() end
spinConnection = nil
end
-- ========== MOVEMENT TAB ==========
local moveScroll = createScrollingTab("MOVEMENT")
addToggle(moveScroll, "ποΈ FLY MODE (WASD + Space/Shift)", Color3.fromRGB(70, 50, 90), function(state)
if state then
activeFlags.flying = true
startFly()
else
activeFlags.flying = false
stopFly()
end
end)
addToggle(moveScroll, "πͺ NOCLIP (Walk through walls)", Color3.fromRGB(70, 50, 90), function(state)
if state then
activeFlags.noclip = true
startNoclip()
else
activeFlags.noclip = false
stopNoclip()
end
end)
addButton(moveScroll, "π€ SPECTATE NEXT PLAYER", Color3.fromRGB(55, 55, 85), function()
local players = game.Players:GetPlayers()
for _, p in ipairs(players) do
if p ~= player and p.Character and p.Character:FindFirstChild("Humanoid") then
workspace.CurrentCamera.CameraSubject = p.Character.Humanoid
break
end
end
end)
addButton(moveScroll, "π― STOP SPECTATE", Color3.fromRGB(65, 55, 55), function()
if player.Character and player.Character:FindFirstChild("Humanoid") then
workspace.CurrentCamera.CameraSubject = player.Character.Humanoid
end
end)
addButton(moveScroll, "π SPEED 50", Color3.fromRGB(55, 55, 65), function()
refreshChar()
if humanoid then
savedWalkSpeed = 50
humanoid.WalkSpeed = 50
end
end)
addButton(moveScroll, "β‘ SPEED 200", Color3.fromRGB(55, 55, 65), function()
refreshChar()
if humanoid then
savedWalkSpeed = 200
humanoid.WalkSpeed = 200
end
end)
addButton(moveScroll, "π¨ SPEED 500", Color3.fromRGB(55, 55, 65), function()
refreshChar()
if humanoid then
savedWalkSpeed = 500
humanoid.WalkSpeed = 500
end
end)
addButton(moveScroll, "π¦ JUMP 100", Color3.fromRGB(55, 55, 65), function()
refreshChar()
if humanoid then
savedJumpPower = 100
humanoid.JumpPower = 100
end
end)
addButton(moveScroll, "π JUMP 500", Color3.fromRGB(55, 55, 65), function()
refreshChar()
if humanoid then
savedJumpPower = 500
humanoid.JumpPower = 500
end
end)
addButton(moveScroll, "π§ RESET SPEED/JUMP", Color3.fromRGB(65, 55, 55), function()
refreshChar()
if humanoid then
savedWalkSpeed = 16
savedJumpPower = 50
humanoid.WalkSpeed = 16
humanoid.JumpPower = 50
end
end)
-- ========== VISUALS TAB ==========
local visScroll = createScrollingTab("VISUALS")
addToggle(visScroll, "β€οΈ INFINITE HEALTH", Color3.fromRGB(70, 40, 40), function(state)
if state then
activeFlags.infHealth = true
startInfHealth()
else
activeFlags.infHealth = false
stopInfHealth()
end
end)
addToggle(visScroll, "ποΈ X-RAY VISION (No Lag)", Color3.fromRGB(40, 50, 70), function(state)
if state then
activeFlags.xrayActive = true
startXray()
else
activeFlags.xrayActive = false
stopXray()
end
end)
-- ========== CRAZY TAB ==========
local crazyScroll = createScrollingTab("CRAZY")
addToggle(crazyScroll, "π HELICOPTER SPIN", Color3.fromRGB(90, 50, 50), function(state)
if state then
activeFlags.spinActive = true
startSpin()
else
activeFlags.spinActive = false
stopSpin()
end
end)
addButton(crazyScroll, "π RAGDOLL", Color3.fromRGB(90, 50, 50), function()
refreshChar()
if humanoid then
humanoid.PlatformStand = false
humanoid:BreakJoints()
task.wait(0.1)
humanoid.PlatformStand = true
end
end)
addButton(crazyScroll, "π FIX RAGDOLL (Stand Up)", Color3.fromRGB(65, 55, 65), function()
refreshChar()
if humanoid then
humanoid.PlatformStand = false
humanoid.Health = 0
end
end)
addButton(crazyScroll, "π CRAZY SPIN (5 seconds)", Color3.fromRGB(90, 50, 50), function()
local startTime = tick()
local spinConn = runService.Stepped:Connect(function()
if tick() - startTime > 5 then
spinConn:Disconnect()
return
end
if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
local hrp = player.Character.HumanoidRootPart
hrp.CFrame = hrp.CFrame * CFrame.Angles(math.rad(20), math.rad(20), math.rad(20))
end
end)
end)
addButton(crazyScroll, "π GIANT MODE", Color3.fromRGB(90, 50, 50), function()
refreshChar()
if char then
for _, part in ipairs(char:GetChildren()) do
if part:IsA("BasePart") then
part.Size = part.Size * 2
end
end
end
end)
addButton(crazyScroll, "π TINY MODE", Color3.fromRGB(90, 50, 50), function()
refreshChar()
if char then
for _, part in ipairs(char:GetChildren()) do
if part:IsA("BasePart") then
part.Size = part.Size * 0.5
end
end
end
end)
-- ========== LIGHTING TAB ==========
local lightScroll = createScrollingTab("LIGHTING")
addButton(lightScroll, "π DARK MODE", Color3.fromRGB(55, 55, 65), function()
lighting.Brightness = 0.2
lighting.OutdoorAmbient = Color3.fromRGB(30, 30, 40)
lighting.Ambient = Color3.fromRGB(20, 20, 30)
lighting.ClockTime = 0
end)
addButton(lightScroll, "π NEON RAVE", Color3.fromRGB(55, 55, 65), function()
lighting.ClockTime = 0
spawn(function()
for i = 1, 100 do
lighting.Ambient = Color3.fromHSV((tick() % 1), 1, 1)
lighting.OutdoorAmbient = Color3.fromHSV((tick() % 1), 0.8, 0.8)
wait(0.05)
end
end)
end)
addButton(lightScroll, "π RESET LIGHTING", Color3.fromRGB(65, 55, 55), function()
lighting.Brightness = 2
lighting.OutdoorAmbient = Color3.fromRGB(127, 127, 127)
lighting.Ambient = Color3.fromRGB(127, 127, 127)
lighting.ClockTime = 14
end)
-- ========== FAKE TEXT TAB ==========
local fakeScroll = createScrollingTab("FAKE TXT")
local fakeMessageBox = Instance.new("TextBox")
fakeMessageBox.Size = UDim2.new(1, -10, 0, 50)
fakeMessageBox.PlaceholderText = "Type your fake message here..."
fakeMessageBox.Text = ""
fakeMessageBox.TextColor3 = Color3.fromRGB(255, 255, 255)
fakeMessageBox.TextSize = 13
fakeMessageBox.BackgroundColor3 = Color3.fromRGB(45, 45, 55)
fakeMessageBox.BorderSizePixel = 0
fakeMessageBox.ClearTextOnFocus = false
fakeMessageBox.Parent = fakeScroll
local currentFakeMessage = ""
fakeMessageBox:GetPropertyChangedSignal("Text"):Connect(function()
currentFakeMessage = fakeMessageBox.Text
end)
addButton(fakeScroll, "π’ FAKE SYSTEM MSG", Color3.fromRGB(70, 50, 90), function()
local msg = currentFakeMessage
if msg == "" then msg = "[SYSTEM] Server maintenance in 30 seconds" end
sendChatMessage(msg)
end)
addButton(fakeScroll, "π FAKE ADMIN MSG", Color3.fromRGB(90, 50, 70), function()
local msg = currentFakeMessage
if msg == "" then msg = "[ADMIN] " .. player.Name .. " has been warned" end
sendChatMessage(msg)
end)
addButton(fakeScroll, "π¨ FAKE BAN MSG", Color3.fromRGB(90, 40, 40), function()
local msg = currentFakeMessage
if msg == "" then msg = "π¨ " .. player.Name .. " was BANNED for exploiting" end
sendChatMessage(msg)
end)
addButton(fakeScroll, "π’ FAKE KICK MSG", Color3.fromRGB(90, 60, 40), function()
local msg = currentFakeMessage
if msg == "" then msg = "π’ " .. player.Name .. " was kicked from the game" end
sendChatMessage(msg)
end)
addButton(fakeScroll, "β οΈ FAKE SHUTDOWN", Color3.fromRGB(80, 60, 40), function()
local msg = currentFakeMessage
if msg == "" then msg = "β οΈ SERVER SHUTTING DOWN in 10 seconds! β οΈ" end
sendChatMessage(msg)
end)
-- ========== IMPERSONATE TAB ==========
local impScroll = createScrollingTab("IMPERSONATE")
local impInstructions = Instance.new("TextLabel")
impInstructions.Size = UDim2.new(1, -10, 0, 55)
impInstructions.Text = "β οΈ Type a message below, then click a player to make them SAY it!"
impInstructions.TextColor3 = Color3.fromRGB(200, 200, 150)
impInstructions.TextSize = 11
impInstructions.TextWrapped = true
impInstructions.BackgroundColor3 = Color3.fromRGB(40, 40, 50)
impInstructions.BorderSizePixel = 0
impInstructions.Parent = impScroll
local impMessageBox = Instance.new("TextBox")
impMessageBox.Size = UDim2.new(1, -10, 0, 45)
impMessageBox.PlaceholderText = "Message to impersonate..."
impMessageBox.Text = ""
impMessageBox.TextColor3 = Color3.fromRGB(255, 255, 255)
impMessageBox.TextSize = 13
impMessageBox.BackgroundColor3 = Color3.fromRGB(45, 45, 55)
impMessageBox.BorderSizePixel = 0
impMessageBox.ClearTextOnFocus = false
impMessageBox.Parent = impScroll
local currentImpMessage = ""
impMessageBox:GetPropertyChangedSignal("Text"):Connect(function()
currentImpMessage = impMessageBox.Text
end)
local impPlayerFrame = Instance.new("Frame")
impPlayerFrame.Size = UDim2.new(1, -10, 0, 200)
impPlayerFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 40)
impPlayerFrame.BorderSizePixel = 0
impPlayerFrame.Parent = impScroll
local impPlayerScroll = Instance.new("ScrollingFrame")
impPlayerScroll.Size = UDim2.new(1, -10, 1, -10)
impPlayerScroll.Position = UDim2.new(0, 5, 0, 5)
impPlayerScroll.BackgroundTransparency = 1
impPlayerScroll.ScrollBarThickness = 4
impPlayerScroll.Parent = impPlayerFrame
local impPlayerLayout = Instance.new("UIListLayout")
impPlayerLayout.Padding = UDim.new(0, 5)
impPlayerLayout.Parent = impPlayerScroll
local function refreshImpersonateList()
for _, child in ipairs(impPlayerScroll:GetChildren()) do
if child:IsA("TextButton") then
child:Destroy()
end
end
for _, plr in ipairs(game.Players:GetPlayers()) do
if plr ~= player then
local plrBtn = Instance.new("TextButton")
plrBtn.Size = UDim2.new(1, -10, 0, 40)
plrBtn.Text = "π " .. plr.Name
plrBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
plrBtn.TextSize = 12
plrBtn.TextXAlignment = Enum.TextXAlignment.Left
plrBtn.BackgroundColor3 = Color3.fromRGB(55, 55, 75)
plrBtn.BorderSizePixel = 0
plrBtn.Parent = impPlayerScroll
plrBtn.MouseButton1Click:Connect(function()
local fakeMessage = currentImpMessage
if fakeMessage == "" then
fakeMessage = "I'm a hacker!"
end
sendChatMessage(fakeMessage)
end)
end
end
end
refreshImpersonateList()
game.Players.PlayerAdded:Connect(refreshImpersonateList)
game.Players.PlayerRemoving:Connect(refreshImpersonateList)
-- ========== INVENTORY TAB ==========
local invScroll = createScrollingTab("INVENTORY")
local selectedTarget = player
local dropdownOpen = false
local dropdownList = nil
local function updateInventoryDisplay(targetPlayer)
for _, child in ipairs(invScroll:GetChildren()) do
if child ~= dropdownBtn and child ~= refreshInvBtn and child:IsA("TextButton") then
child:Destroy()
end
if child:IsA("TextLabel") and child ~= dropdownBtn and child ~= refreshInvBtn then
child:Destroy()
end
end
local titleLabel = Instance.new("TextLabel")
titleLabel.Size = UDim2.new(1, -10, 0, 35)
titleLabel.Text = "π " .. targetPlayer.Name .. "'s Inventory"
titleLabel.TextColor3 = Color3.fromRGB(255, 200, 100)
titleLabel.TextSize = 14
titleLabel.Font = Enum.Font.GothamBold
titleLabel.BackgroundColor3 = Color3.fromRGB(40, 40, 50)
titleLabel.BorderSizePixel = 0
titleLabel.Parent = invScroll
local backpackTitle = Instance.new("TextLabel")
backpackTitle.Size = UDim2.new(1, -10, 0, 25)
backpackTitle.Text = "π¦ BACKPACK"
backpackTitle.TextColor3 = Color3.fromRGB(150, 150, 200)
backpackTitle.TextSize = 12
backpackTitle.Font = Enum.Font.GothamBold
backpackTitle.BackgroundTransparency = 1
backpackTitle.Parent = invScroll
local hasItems = false
if targetPlayer.Backpack then
for _, tool in ipairs(targetPlayer.Backpack:GetChildren()) do
if tool:IsA("Tool") then
hasItems = true
local itemBtn = Instance.new("TextButton")
itemBtn.Size = UDim2.new(1, -20, 0, 35)
itemBtn.Text = "π§ " .. tool.Name
itemBtn.TextColor3 = Color3.fromRGB(220, 220, 220)
itemBtn.TextSize = 12
itemBtn.TextXAlignment = Enum.TextXAlignment.Left
itemBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 65)
itemBtn.BorderSizePixel = 0
itemBtn.Parent = invScroll
itemBtn.MouseButton1Click:Connect(function()
local newTool = tool:Clone()
newTool.Parent = player.Backpack
updateInventoryDisplay(selectedTarget)
end)
end
end
end
if not hasItems then
local emptyLabel = Instance.new("TextLabel")
emptyLabel.Size = UDim2.new(1, -20, 0, 30)
emptyLabel.Text = " π Empty"
emptyLabel.TextColor3 = Color3.fromRGB(150, 150, 150)
emptyLabel.TextSize = 12
emptyLabel.TextXAlignment = Enum.TextXAlignment.Left
emptyLabel.BackgroundTransparency = 1
emptyLabel.Parent = invScroll
end
local equippedTitle = Instance.new("TextLabel")
equippedTitle.Size = UDim2.new(1, -10, 0, 25)
equippedTitle.Text = "βοΈ EQUIPPED"
equippedTitle.TextColor3 = Color3.fromRGB(150, 150, 200)
equippedTitle.TextSize = 12
equippedTitle.Font = Enum.Font.GothamBold
equippedTitle.BackgroundTransparency = 1
equippedTitle.Parent = invScroll
local hasEquipped = false
if targetPlayer.Character then
for _, child in ipairs(targetPlayer.Character:GetChildren()) do
if child:IsA("Tool") then
hasEquipped = true
local itemBtn = Instance.new("TextButton")
itemBtn.Size = UDim2.new(1, -20, 0, 35)
itemBtn.Text = "βοΈ " .. child.Name
itemBtn.TextColor3 = Color3.fromRGB(255, 200, 100)
itemBtn.TextSize = 12
itemBtn.TextXAlignment = Enum.TextXAlignment.Left
itemBtn.BackgroundColor3 = Color3.fromRGB(65, 50, 40)
itemBtn.BorderSizePixel = 0
itemBtn.Parent = invScroll
end
end
end
if not hasEquipped then
local emptyLabel = Instance.new("TextLabel")
emptyLabel.Size = UDim2.new(1, -20, 0, 30)
emptyLabel.Text = " β¨ Nothing equipped"
emptyLabel.TextColor3 = Color3.fromRGB(150, 150, 150)
emptyLabel.TextSize = 12
emptyLabel.TextXAlignment = Enum.TextXAlignment.Left
emptyLabel.BackgroundTransparency = 1
emptyLabel.Parent = invScroll
end
end
local dropdownBtn = Instance.new("TextButton")
dropdownBtn.Size = UDim2.new(1, -10, 0, 42)
dropdownBtn.Text = "π SELECT PLAYER: " .. player.Name
dropdownBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
dropdownBtn.TextSize = 13
dropdownBtn.Font = Enum.Font.GothamSemibold
dropdownBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 75)
dropdownBtn.BorderSizePixel = 0
dropdownBtn.Parent = invScroll
local function closeDropdown()
if dropdownList then dropdownList:Destroy() end
dropdownList = nil
dropdownOpen = false
end
dropdownBtn.MouseButton1Click:Connect(function()
if dropdownOpen then closeDropdown() return end
dropdownOpen = true
dropdownList = Instance.new("Frame")
dropdownList.Size = UDim2.new(1, -10, 0, 160)
dropdownList.Position = UDim2.new(0, 5, 0, 45)
dropdownList.BackgroundColor3 = Color3.fromRGB(30, 30, 40)
dropdownList.BorderSizePixel = 0
dropdownList.Parent = invScroll
local scroll = Instance.new("ScrollingFrame")
scroll.Size = UDim2.new(1, 0, 1, 0)
scroll.BackgroundTransparency = 1
scroll.ScrollBarThickness = 4
scroll.Parent = dropdownList
local layout = Instance.new("UIListLayout")
layout.Padding = UDim.new(0, 4)
layout.Parent = scroll
for _, plr in ipairs(game.Players:GetPlayers()) do
local plrBtn = Instance.new("TextButton")
plrBtn.Size = UDim2.new(1, -10, 0, 38)
plrBtn.Text = "π€ " .. plr.Name
plrBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
plrBtn.TextSize = 12
plrBtn.BackgroundColor3 = Color3.fromRGB(55, 55, 70)
plrBtn.BorderSizePixel = 0
plrBtn.Parent = scroll
plrBtn.MouseButton1Click:Connect(function()
selectedTarget = plr
dropdownBtn.Text = "π SELECT PLAYER: " .. plr.Name
closeDropdown()
updateInventoryDisplay(selectedTarget)
end)
end
end)
local refreshInvBtn = Instance.new("TextButton")
refreshInvBtn.Size = UDim2.new(1, -10, 0, 40)
refreshInvBtn.Text = "π REFRESH INVENTORY"
refreshInvBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
refreshInvBtn.TextSize = 13
refreshInvBtn.BackgroundColor3 = Color3.fromRGB(55, 75, 55)
refreshInvBtn.BorderSizePixel = 0
refreshInvBtn.Parent = invScroll
refreshInvBtn.MouseButton1Click:Connect(function()
updateInventoryDisplay(selectedTarget)
end)
updateInventoryDisplay(player)
-- ========== SPAWN POINT TAB ==========
local spawnScroll = createScrollingTab("SPAWN")
local spawnInstructions = Instance.new("TextLabel")
spawnInstructions.Size = UDim2.new(1, -10, 0, 70)
spawnInstructions.Text = "π SPAWN POINT SYSTEM\n\n1. Go anywhere\n2. Click 'SET SPAWN POINT'\n3. Click 'TELEPORT TO SPAWN' to return!"
spawnInstructions.TextColor3 = Color3.fromRGB(200, 200, 150)
spawnInstructions.TextSize = 11
spawnInstructions.TextWrapped = true
spawnInstructions.BackgroundColor3 = Color3.fromRGB(40, 40, 50)
spawnInstructions.BorderSizePixel = 0
spawnInstructions.Parent = spawnScroll
local spawnDisplay = Instance.new("TextLabel")
spawnDisplay.Size = UDim2.new(1, -10, 0, 35)
spawnDisplay.Text = "π No spawn point set yet"
spawnDisplay.TextColor3 = Color3.fromRGB(255, 200, 100)
spawnDisplay.TextSize = 12
spawnDisplay.Font = Enum.Font.GothamBold
spawnDisplay.BackgroundColor3 = Color3.fromRGB(35, 35, 45)
spawnDisplay.BorderSizePixel = 0
spawnDisplay.Parent = spawnScroll
local spawnNameBox = Instance.new("TextBox")
spawnNameBox.Size = UDim2.new(1, -10, 0, 40)
spawnNameBox.PlaceholderText = "Spawn name (optional)..."
spawnNameBox.Text = ""
spawnNameBox.TextColor3 = Color3.fromRGB(255, 255, 255)
spawnNameBox.TextSize = 13
spawnNameBox.BackgroundColor3 = Color3.fromRGB(45, 45, 55)
spawnNameBox.BorderSizePixel = 0
spawnNameBox.Parent = spawnScroll
local currentSpawnName = ""
spawnNameBox:GetPropertyChangedSignal("Text"):Connect(function()
currentSpawnName = spawnNameBox.Text
end)
addButton(spawnScroll, "π SET SPAWN POINT", Color3.fromRGB(55, 75, 55), function()
refreshChar()
if rootPart then
customSpawnPoint = rootPart.CFrame
local name = currentSpawnName
if name == "" then name = "Main Spawn" end
spawnDisplay.Text = "β
Spawn set: " .. name
spawnDisplay.BackgroundColor3 = Color3.fromRGB(45, 65, 45)
end
end)
addButton(spawnScroll, "π TELEPORT TO SPAWN", Color3.fromRGB(55, 55, 85), function()
if customSpawnPoint then
refreshChar()
if rootPart then
rootPart.CFrame = customSpawnPoint
rootPart.Velocity = Vector3.new(0, 0, 0)
spawnDisplay.Text = "β¨ Teleported!"
task.wait(1)
spawnDisplay.Text = "β
Spawn ready"
end
else
spawnDisplay.Text = "β οΈ No spawn point set!"
spawnDisplay.BackgroundColor3 = Color3.fromRGB(65, 45, 45)
task.wait(1.5)
spawnDisplay.Text = "π No spawn point set yet"
spawnDisplay.BackgroundColor3 = Color3.fromRGB(35, 35, 45)
end
end)
addButton(spawnScroll, "ποΈ CLEAR SPAWN", Color3.fromRGB(90, 50, 50), function()
customSpawnPoint = nil
spawnDisplay.Text = "π Spawn cleared"
task.wait(1)
spawnDisplay.Text = "π No spawn point set yet"
end)
-- Make frame draggable
local dragging = false
local dragStart, startPos
titleBar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = true
dragStart = input.Position
startPos = mainFrame.Position
end
end)
titleBar.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement and dragging then
local delta = input.Position - dragStart
mainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
end)
titleBar.InputEnded:Connect(function()
dragging = false
end)
switchTab("MOVEMENT")
print("β
Troll Menu v7 Loaded - Menu persists after death!")



Gd job
@Rauledwardsjs thanks i will be posting the better version soon