OP ADMIN KICK EXPLODE AND MORE
Key Required

OP ADMIN KICK EXPLODE AND MORE

Speed's Wall Hop ObbyFlipflopFlipflop 8.8K views 25.3K executesUpdated Mar 3, 2026
4.5/ 5(10 votes)
9190% Positive
Lua Script•542 lines (21506 chars)
-- Admin Commands Script with GUI, Loop Commands, and Draggable Buttons Panel
-- Press [ to toggle main GUI, ; to auto-focus and type

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local MarketplaceService = game:GetService("MarketplaceService")
local UserInputService = game:GetService("UserInputService")

local localPlayer = Players.LocalPlayer
local PlayerGui = localPlayer:WaitForChild("PlayerGui")

local Remotes = ReplicatedStorage:WaitForChild("Remotes")
local TrollRemote = Remotes:WaitForChild("Troll")

local SetSkipperRemotes = {}
for _, child in pairs(ReplicatedStorage:GetChildren()) do
    if child.Name == "SetSkipper" and child:IsA("RemoteEvent") then
        table.insert(SetSkipperRemotes, child)
    end
end

local devProductIds = {
    Kill = 3366469408,
    Freeze = 3366469411,
    Explode = 3366469414,
    Kick = 3346104134,
    Fling = 3366469412,
    Flashbang = 3397573126,
    GiftSkip = 3397585585
}

local commandHistory = {}
local historyIndex = 0

local activeLoops = {
    kill = {},
    freeze = {},
    explode = {},
    kick = {},
    fling = {},
    flashbang = {},
    skip = {}
}

local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "AdminCommandsGUI"
ScreenGui.ResetOnSpawn = false
ScreenGui.Parent = PlayerGui

local MainFrame = Instance.new("Frame")
MainFrame.Size = UDim2.new(0, 350, 0, 50)
MainFrame.Position = UDim2.new(0.5, -175, 1, -100)
MainFrame.BackgroundTransparency = 1
MainFrame.Parent = ScreenGui

local InputContainer = Instance.new("Frame")
InputContainer.Size = UDim2.new(1, 0, 1, 0)
InputContainer.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
InputContainer.BackgroundTransparency = 0.3
InputContainer.BorderSizePixel = 2
InputContainer.BorderColor3 = Color3.fromRGB(255, 255, 255)
InputContainer.Parent = MainFrame

local InputCorner = Instance.new("UICorner")
InputCorner.CornerRadius = UDim.new(0, 8)
InputCorner.Parent = InputContainer

local CommandTextBox = Instance.new("TextBox")
CommandTextBox.Size = UDim2.new(1, -60, 1, 0)
CommandTextBox.Position = UDim2.new(0, 10, 0, 0)
CommandTextBox.BackgroundTransparency = 1
CommandTextBox.Font = Enum.Font.GothamBold
CommandTextBox.TextSize = 16
CommandTextBox.TextColor3 = Color3.fromRGB(255, 255, 255)
CommandTextBox.TextXAlignment = Enum.TextXAlignment.Left
CommandTextBox.PlaceholderText = "Type command..."
CommandTextBox.PlaceholderColor3 = Color3.fromRGB(150, 150, 150)
CommandTextBox.Text = ""
CommandTextBox.ClearTextOnFocus = false
CommandTextBox.Parent = InputContainer

local ExecuteButton = Instance.new("TextButton")
ExecuteButton.Size = UDim2.new(0, 40, 0, 40)
ExecuteButton.Position = UDim2.new(1, -45, 0.5, -20)
ExecuteButton.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
ExecuteButton.BorderSizePixel = 0
ExecuteButton.Font = Enum.Font.GothamBold
ExecuteButton.Text = "→"
ExecuteButton.TextSize = 24
ExecuteButton.TextColor3 = Color3.fromRGB(255, 255, 255)
ExecuteButton.Parent = InputContainer

local ButtonCorner = Instance.new("UICorner")
ButtonCorner.CornerRadius = UDim.new(0, 6)
ButtonCorner.Parent = ExecuteButton

local AutofillFrame = Instance.new("ScrollingFrame")
AutofillFrame.Size = UDim2.new(1, 0, 0, 0)
AutofillFrame.Position = UDim2.new(0, 0, 1, 5)
AutofillFrame.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
AutofillFrame.BackgroundTransparency = 0.2
AutofillFrame.BorderSizePixel = 2
AutofillFrame.BorderColor3 = Color3.fromRGB(255, 255, 255)
AutofillFrame.Visible = false
AutofillFrame.ScrollBarThickness = 6
AutofillFrame.Parent = MainFrame

local AutofillCorner = Instance.new("UICorner")
AutofillCorner.CornerRadius = UDim.new(0, 8)
AutofillCorner.Parent = AutofillFrame

local AutofillLayout = Instance.new("UIListLayout")
AutofillLayout.SortOrder = Enum.SortOrder.LayoutOrder
AutofillLayout.Padding = UDim.new(0, 2)
AutofillLayout.Parent = AutofillFrame

local dragging, dragInput, mousePos, framePos = false, nil, nil, nil

CommandTextBox.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 then
        dragging, mousePos, framePos = true, input.Position, MainFrame.Position
        input.Changed:Connect(function()
            if input.UserInputState == Enum.UserInputState.End then dragging = false end
        end)
    end
end)

CommandTextBox.InputChanged:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseMovement then dragInput = input end
end)

UserInputService.InputChanged:Connect(function(input)
    if input == dragInput and dragging then
        local delta = input.Position - mousePos
        MainFrame.Position = UDim2.new(framePos.X.Scale, framePos.X.Offset + delta.X, framePos.Y.Scale, framePos.Y.Offset + delta.Y)
    end
end)

local isTypingInChat, manualSemicolon = false, false

UserInputService.TextBoxFocused:Connect(function(textbox)
    if textbox.Name == "ChatBar" or textbox:IsDescendantOf(game:GetService("Chat")) then isTypingInChat = true end
end)

UserInputService.TextBoxFocusReleased:Connect(function(textbox)
    if textbox.Name == "ChatBar" or textbox:IsDescendantOf(game:GetService("Chat")) then isTypingInChat = false end
end)

UserInputService.InputBegan:Connect(function(input, gameProcessed)
    if input.KeyCode == Enum.KeyCode.LeftBracket and not isTypingInChat and not gameProcessed then
        MainFrame.Visible = not MainFrame.Visible
        if MainFrame.Visible then CommandTextBox:CaptureFocus() end
    end
    if input.KeyCode == Enum.KeyCode.Semicolon and not isTypingInChat and MainFrame.Visible and not CommandTextBox:IsFocused() then
        manualSemicolon = true
        CommandTextBox:CaptureFocus()
        task.wait()
        CommandTextBox.Text, CommandTextBox.CursorPosition = ";", 2
    end
end)

local function getPlayer(partialName)
    if not partialName or partialName == "" then return nil end
    partialName = partialName:lower()
    for _, player in pairs(Players:GetPlayers()) do
        if player.Name:lower():find(partialName) or player.DisplayName:lower():find(partialName) then return player end
    end
end

local function promptDevProduct(productId)
    if not productId then warn("[Admin] Dev Product ID is nil!") return end
    pcall(function() game:GetService("MarketplaceService"):SignalPromptProductPurchaseFinished(localPlayer.UserId, productId, true) end)
end

local function fireTrollCommand(username, productId)
    if not productId then warn("[Admin] Dev Product ID is nil!") return end
    pcall(function() TrollRemote:FireServer(username, productId) end)
end

local function handleSkip(targetPlayer)
    for _, remote in ipairs(SetSkipperRemotes) do pcall(function() remote:FireServer(targetPlayer.Name) end) end
    task.wait(0.1)
    promptDevProduct(devProductIds.GiftSkip)
end

local commands = {}

-- Helper function to create troll commands
local function createTrollCommand(cmdName, productKey)
    commands[cmdName] = function(args)
        local target = args[1]
        if target == "all" then
            for _, p in pairs(Players:GetPlayers()) do if p ~= localPlayer then fireTrollCommand(p.Name, devProductIds[productKey]) task.wait(0.05) end end
            fireTrollCommand(localPlayer.Name, devProductIds[productKey])
        elseif target == "others" then
            for _, p in pairs(Players:GetPlayers()) do if p ~= localPlayer then fireTrollCommand(p.Name, devProductIds[productKey]) task.wait(0.05) end end
        else
            local p = getPlayer(target)
            if p then fireTrollCommand(p.Name, devProductIds[productKey]) end
        end
    end
    
    commands["loop"..cmdName] = function(args)
        local target = args[1]
        if target == "all" then
            if activeLoops[cmdName].all then return end
            activeLoops[cmdName].all = true
            task.spawn(function()
                while activeLoops[cmdName].all do
                    for _, p in pairs(Players:GetPlayers()) do if p ~= localPlayer then fireTrollCommand(p.Name, devProductIds[productKey]) end end
                    fireTrollCommand(localPlayer.Name, devProductIds[productKey])
                    task.wait(0.5)
                end
            end)
        elseif target == "others" then
            if activeLoops[cmdName].others then return end
            activeLoops[cmdName].others = true
            task.spawn(function()
                while activeLoops[cmdName].others do
                    for _, p in pairs(Players:GetPlayers()) do if p ~= localPlayer then fireTrollCommand(p.Name, devProductIds[productKey]) end end
                    task.wait(0.5)
                end
            end)
        else
            local p = getPlayer(target)
            if p then
                if activeLoops[cmdName][p.UserId] then return end
                activeLoops[cmdName][p.UserId] = true
                task.spawn(function()
                    while activeLoops[cmdName][p.UserId] and p.Parent do
                        fireTrollCommand(p.Name, devProductIds[productKey])
                        task.wait(0.5)
                    end
                    activeLoops[cmdName][p.UserId] = nil
                end)
            end
        end
    end
    
    commands["unloop"..cmdName] = function(args)
        local target = args[1]
        if target == "all" then activeLoops[cmdName] = {}
        elseif target == "others" then activeLoops[cmdName].others = false
        else
            local p = getPlayer(target)
            if p then activeLoops[cmdName][p.UserId] = false end
        end
    end
end

createTrollCommand("kill", "Kill")
createTrollCommand("freeze", "Freeze")
createTrollCommand("explode", "Explode")
createTrollCommand("kick", "Kick")
createTrollCommand("fling", "Fling")
createTrollCommand("flashbang", "Flashbang")

commands.skip = function(args)
    local target = args[1]
    if target == "me" then
        promptDevProduct(devProductIds.GiftSkip)
    elseif target == "all" then
        for _, p in pairs(Players:GetPlayers()) do if p ~= localPlayer then handleSkip(p) task.wait(0.1) end end
        handleSkip(localPlayer)
    elseif target == "others" then
        for _, p in pairs(Players:GetPlayers()) do if p ~= localPlayer then handleSkip(p) task.wait(0.1) end end
    else
        local p = getPlayer(target)
        if p then handleSkip(p) end
    end
end

commands.loopskip = function(args)
    local target = args[1]
    if target == "all" then
        if activeLoops.skip.all then return end
        activeLoops.skip.all = true
        task.spawn(function()
            while activeLoops.skip.all do
                for _, p in pairs(Players:GetPlayers()) do if p ~= localPlayer then handleSkip(p) end end
                handleSkip(localPlayer)
                task.wait(0.5)
            end
        end)
    elseif target == "others" then
        if activeLoops.skip.others then return end
        activeLoops.skip.others = true
        task.spawn(function()
            while activeLoops.skip.others do
                for _, p in pairs(Players:GetPlayers()) do if p ~= localPlayer then handleSkip(p) end end
                task.wait(0.5)
            end
        end)
    else
        local p = getPlayer(target)
        if p then
            if activeLoops.skip[p.UserId] then return end
            activeLoops.skip[p.UserId] = true
            task.spawn(function()
                while activeLoops.skip[p.UserId] and p.Parent do
                    handleSkip(p)
                    task.wait(0.5)
                end
                activeLoops.skip[p.UserId] = nil
            end)
        end
    end
end

commands.unloopskip = function(args)
    local target = args[1]
    if target == "all" then activeLoops.skip = {}
    elseif target == "others" then activeLoops.skip.others = false
    else
        local p = getPlayer(target)
        if p then activeLoops.skip[p.UserId] = false end
    end
end

-- ================================================
-- NEW: ;buttons command logic
-- ================================================
local buttonsPanel = nil

commands.buttons = function(args)
    -- Toggle behavior: destroy if panel already exists
    if buttonsPanel then
        buttonsPanel:Destroy()
        buttonsPanel = nil
        return
    end

    local target = args[1] or "all"

    -- Create floating panel
    buttonsPanel = Instance.new("Frame")
    buttonsPanel.Name = "DraggableButtonsPanel"
    buttonsPanel.Size = UDim2.new(0, 160, 0, 275)
    buttonsPanel.Position = UDim2.new(0.05, 0, 0.35, 0)
    buttonsPanel.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
    buttonsPanel.BackgroundTransparency = 0.3
    buttonsPanel.BorderSizePixel = 2
    buttonsPanel.BorderColor3 = Color3.fromRGB(255, 255, 255)
    buttonsPanel.Parent = ScreenGui

    local panelCorner = Instance.new("UICorner")
    panelCorner.CornerRadius = UDim.new(0, 8)
    panelCorner.Parent = buttonsPanel

    local titleLabel = Instance.new("TextLabel")
    titleLabel.Size = UDim2.new(1, 0, 0, 30)
    titleLabel.BackgroundTransparency = 1
    titleLabel.Font = Enum.Font.GothamBold
    titleLabel.Text = "Target: " .. target
    titleLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
    titleLabel.TextSize = 13
    titleLabel.LayoutOrder = 0
    titleLabel.Parent = buttonsPanel

    local panelLayout = Instance.new("UIListLayout")
    panelLayout.SortOrder = Enum.SortOrder.LayoutOrder
    panelLayout.Padding = UDim.new(0, 4)
    panelLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
    panelLayout.Parent = buttonsPanel

    local panelPadding = Instance.new("UIPadding")
    panelPadding.PaddingTop = UDim.new(0, 4)
    panelPadding.PaddingBottom = UDim.new(0, 4)
    panelPadding.Parent = buttonsPanel

    -- Make the buttons panel draggable
    local panelDragging, panelDragInput, panelMousePos, panelFramePos = false, nil, nil, nil

    buttonsPanel.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            panelDragging = true
            panelMousePos = input.Position
            panelFramePos = buttonsPanel.Position
            input.Changed:Connect(function()
                if input.UserInputState == Enum.UserInputState.End then
                    panelDragging = false
                end
            end)
        end
    end)

    buttonsPanel.InputChanged:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
            panelDragInput = input
        end
    end)

    UserInputService.InputChanged:Connect(function(input)
        if input == panelDragInput and panelDragging and buttonsPanel then
            local delta = input.Position - panelMousePos
            buttonsPanel.Position = UDim2.new(panelFramePos.X.Scale, panelFramePos.X.Offset + delta.X, panelFramePos.Y.Scale, panelFramePos.Y.Offset + delta.Y)
        end
    end)

    -- Spawn command buttons
    local buttonCmds = {"kill", "freeze", "explode", "kick", "fling", "flashbang", "skip"}

    for i, cmdName in ipairs(buttonCmds) do
        local btn = Instance.new("TextButton")
        btn.Size = UDim2.new(0.9, 0, 0, 28)
        btn.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
        btn.BorderSizePixel = 0
        btn.Font = Enum.Font.GothamBold
        btn.Text = cmdName:upper()
        btn.TextColor3 = Color3.fromRGB(255, 255, 255)
        btn.TextSize = 12
        btn.LayoutOrder = i
        btn.Parent = buttonsPanel

        local btnCorner = Instance.new("UICorner")
        btnCorner.CornerRadius = UDim.new(0, 6)
        btnCorner.Parent = btn

        btn.MouseButton1Click:Connect(function()
            if commands[cmdName] then
                commands[cmdName]({target})
            end
        end)

        btn.MouseEnter:Connect(function() btn.BackgroundColor3 = Color3.fromRGB(40, 40, 40) end)
        btn.MouseLeave:Connect(function() btn.BackgroundColor3 = Color3.fromRGB(20, 20, 20) end)
    end
end

local function executeCommand(commandText)
    if not commandText or commandText == "" or commandText:sub(1,1) ~= ";" then return end
    if commandText ~= commandHistory[#commandHistory] then
        table.insert(commandHistory, commandText)
        if #commandHistory > 50 then table.remove(commandHistory, 1) end
    end
    historyIndex = #commandHistory + 1
    local parts = {}
    for word in commandText:sub(2):gmatch("%S+") do table.insert(parts, word:lower()) end
    if #parts == 0 then return end
    local commandName, args = parts[1], {}
    for i = 2, #parts do table.insert(args, parts[i]) end
    if commands[commandName] then commands[commandName](args) end
end

local function getAutofillSuggestions(text)
    local suggestions = {}
    if not text or text == "" or not text:find(";") then return suggestions end
    local parts = {}
    for word in text:sub(2):gmatch("%S+") do table.insert(parts, word:lower()) end
    if #parts < 1 then return suggestions end
    local commandName, searchTerm = parts[1], parts[2] or ""
    if not commands[commandName] then return suggestions end
    if commandName ~= "skip" and not commandName:find("skip") then
        if searchTerm == "" or string.find("all", searchTerm, 1, true) then table.insert(suggestions, {display = "all", value = "all"}) end
        if searchTerm == "" or string.find("others", searchTerm, 1, true) then table.insert(suggestions, {display = "others", value = "others"}) end
    end
    if (commandName == "skip" or commandName:find("skip")) and (searchTerm == "" or string.find("me", searchTerm, 1, true)) then
        table.insert(suggestions, {display = "me", value = "me"})
    end
    for _, player in pairs(Players:GetPlayers()) do
        if #suggestions >= 10 then break end
        if searchTerm == "" or player.Name:lower():find(searchTerm) or player.DisplayName:lower():find(searchTerm) then
            table.insert(suggestions, {display = player.DisplayName .. " (" .. player.Name .. ")", value = player.Name})
        end
    end
    return suggestions
end

local function updateAutofill()
    for _, child in pairs(AutofillFrame:GetChildren()) do if child:IsA("TextButton") then child:Destroy() end end
    local suggestions = getAutofillSuggestions(CommandTextBox.Text)
    if #suggestions == 0 then AutofillFrame.Visible = false return end
    AutofillFrame.Visible = true
    local maxHeight = math.min(#suggestions * 32, 300)
    AutofillFrame.CanvasSize = UDim2.new(0, 0, 0, #suggestions * 32)
    AutofillFrame.Size = UDim2.new(1, 0, 0, maxHeight)
    local screenSize = workspace.CurrentCamera.ViewportSize
    local spaceBelow = screenSize.Y - (MainFrame.AbsolutePosition.Y + MainFrame.AbsoluteSize.Y)
    local spaceAbove = MainFrame.AbsolutePosition.Y
    AutofillFrame.Position = (spaceBelow < maxHeight + 10 and spaceAbove > spaceBelow) and UDim2.new(0, 0, 0, -(maxHeight + 5)) or UDim2.new(0, 0, 1, 5)
    for i, sug in ipairs(suggestions) do
        local btn = Instance.new("TextButton")
        btn.Size = UDim2.new(1, -10, 0, 30)
        btn.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
        btn.BackgroundTransparency = 0.3
        btn.BorderSizePixel = 0
        btn.Font = Enum.Font.Gotham
        btn.TextSize = 14
        btn.TextColor3 = Color3.fromRGB(255, 255, 255)
        btn.TextXAlignment = Enum.TextXAlignment.Left
        btn.Text = "  " .. sug.display
        btn.LayoutOrder = i
        btn.Parent = AutofillFrame
        btn.MouseButton1Click:Connect(function()
            local parts = {}
            for word in CommandTextBox.Text:sub(2):gmatch("%S+") do table.insert(parts, word) end
            parts[2] = sug.value
            CommandTextBox.Text = ";" .. table.concat(parts, " ")
            AutofillFrame.Visible = false
            CommandTextBox:CaptureFocus()
        end)
        btn.MouseEnter:Connect(function() btn.BackgroundTransparency = 0.1 end)
        btn.MouseLeave:Connect(function() btn.BackgroundTransparency = 0.3 end)
    end
end

CommandTextBox:GetPropertyChangedSignal("Text"):Connect(function()
    if manualSemicolon and CommandTextBox.Text == ";;" then
        CommandTextBox.Text, CommandTextBox.CursorPosition, manualSemicolon = ";", 2, false
    end
    updateAutofill()
end)

CommandTextBox.FocusLost:Connect(function(enterPressed)
    if enterPressed then executeCommand(CommandTextBox.Text) CommandTextBox.Text = "" AutofillFrame.Visible = false end
end)

UserInputService.InputBegan:Connect(function(input)
    if CommandTextBox:IsFocused() then
        if input.KeyCode == Enum.KeyCode.Up then
            historyIndex = math.max(1, historyIndex - 1)
            CommandTextBox.Text = commandHistory[historyIndex] or ""
        elseif input.KeyCode == Enum.KeyCode.Down then
            historyIndex = math.min(#commandHistory + 1, historyIndex + 1)
            CommandTextBox.Text = commandHistory[historyIndex] or ""
        end
    end
end)

ExecuteButton.MouseButton1Click:Connect(function()
    executeCommand(CommandTextBox.Text)
    CommandTextBox.Text = ""
    AutofillFrame.Visible = false
end)

localPlayer.Chatted:Connect(executeCommand)
MainFrame.Visible = false

print("GUI loaded! Press [ to toggle, ; to focus")
print("Commands: kill, freeze, explode, kick, fling, flashbang, skip, buttons")
print("Loop: loopkill, loopfreeze, loopexplode, loopkick, loopfling, loopflashbang, loopskip")
print("Unloop: unloopkill, unloopfreeze, unloopexplode, unloopkick, unloopfling, unloopflashbang, unloopskip")

Features & Information

Well.. I did try to warn the devs of the exploit but they didnt do anything so I want YOU guys to cause chaos in the game until they fix this. Tested only on velocity. and also if your gonna make a video on this credit me like bro like Press [ to toggle GUI, ; to type in the command bar and type while having the GUI open. can be typed in chat for example ;kill (player/all/others) Commands: kill, freeze, explode, kick, fling, flashbang, skip Loop: loopkill, loopfreeze, loopexplode, loopkick, loopfling, loopflashbang, loopskip Unloop: unloopkill, unloopfreeze, unloopexplode, unloopkick, unloopfling, unloopflashbang, unloopskip New update: ;buttons (all,others,player)

Community Comments (7)

work?

Replying to @momentouswolverine1
FlipflopFlipflopMar 3, 2026

@momentouswolverine1 Yes

kenaprttykenaprttyMar 3, 2026

does it work on delta?

Replying to @kenaprtty
FlipflopFlipflopMar 3, 2026

@kenaprtty Dont know, didnt test.

The_scripter0The_scripter0Mar 15, 2026

Dosent work maybe patched

ScUnknowscScUnknowscApr 5, 2026(edited)

This is patched it ban you after use 15 time in the chat

roscoiumarian266roscoiumarian266Apr 5, 2026

Patched

More Scripts for Speed's Wall Hop Obby