-- // 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!")