Troll Hub
Key RequiredUniversal

Troll Hub

Universal Scriptbuchaciczbuchacicz 1.7K views 20K executesUpdated Oct 6, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•1215 lines (42068 chars)
--[[
    RPYF TROLL SCRIPT - COMPLETE FIXED VERSION
    Features: Fling, Aimbot with FOV, Fly, Car Throwing, Backshots
    
    WARNING: This script is for educational purposes only.
    Using exploits in Roblox violates Terms of Service and can result in account bans.
    Use at your own risk.
]]

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local LocalPlayer = Players.LocalPlayer
local Camera = workspace.CurrentCamera

-- Configuration
local Config = {
    FlingPower = 500,
    AimbotEnabled = false,
    AimbotFOV = 200,
    AimbotTarget = "Head", -- Head, Body, Legs+Body, Body+Head, All
    FlyEnabled = false,
    FlySpeed = 100,
    ThrowPower = 300,
    FlingAllRadius = 50,
    BackshotsEnabled = false,
    BackshotsSpeed = 0.3,
    BackshotsDistance = 3,
}

-- Keybind Configuration (customizable)
local Keybinds = {
    Aimbot = Enum.KeyCode.G,
    Fly = Enum.KeyCode.H,
    FlingNearest = Enum.KeyCode.F,
    FlingAll = Enum.KeyCode.R,
    ThrowCar = Enum.KeyCode.T,
    Backshots = Enum.KeyCode.B,
}

local KeybindNames = {
    [Enum.KeyCode.G] = "G",
    [Enum.KeyCode.H] = "H",
    [Enum.KeyCode.F] = "F",
    [Enum.KeyCode.R] = "R",
    [Enum.KeyCode.T] = "T",
    [Enum.KeyCode.B] = "B",
    [Enum.KeyCode.Q] = "Q",
    [Enum.KeyCode.E] = "E",
    [Enum.KeyCode.Z] = "Z",
    [Enum.KeyCode.X] = "X",
    [Enum.KeyCode.C] = "C",
    [Enum.KeyCode.V] = "V",
    [Enum.KeyCode.Y] = "Y",
    [Enum.KeyCode.U] = "U",
    [Enum.KeyCode.I] = "I",
    [Enum.KeyCode.O] = "O",
    [Enum.KeyCode.P] = "P",
    [Enum.KeyCode.K] = "K",
    [Enum.KeyCode.L] = "L",
    [Enum.KeyCode.N] = "N",
    [Enum.KeyCode.M] = "M",
}

-- GUI Setup with modern design
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "RpyfTrollGui"
ScreenGui.ResetOnSpawn = false
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
ScreenGui.Parent = game.CoreGui

-- Main Frame with gradient
local MainFrame = Instance.new("Frame")
MainFrame.Size = UDim2.new(0, 380, 0, 520)
MainFrame.Position = UDim2.new(0.5, -190, 0.5, -260)
MainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
MainFrame.BorderSizePixel = 0
MainFrame.Active = true
MainFrame.Draggable = true
MainFrame.Parent = ScreenGui

local MainCorner = Instance.new("UICorner")
MainCorner.CornerRadius = UDim.new(0, 12)
MainCorner.Parent = MainFrame

-- Shadow effect
local Shadow = Instance.new("ImageLabel")
Shadow.Name = "Shadow"
Shadow.Size = UDim2.new(1, 30, 1, 30)
Shadow.Position = UDim2.new(0, -15, 0, -15)
Shadow.BackgroundTransparency = 1
Shadow.Image = "rbxasset://textures/ui/GuiImagePlaceholder.png"
Shadow.ImageColor3 = Color3.fromRGB(0, 0, 0)
Shadow.ImageTransparency = 0.7
Shadow.ZIndex = 0
Shadow.Parent = MainFrame

-- Gradient background
local Gradient = Instance.new("UIGradient")
Gradient.Color = ColorSequence.new{
    ColorSequenceKeypoint.new(0, Color3.fromRGB(30, 30, 45)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(20, 20, 30))
}
Gradient.Rotation = 45
Gradient.Parent = MainFrame

-- Title Bar
local TitleBar = Instance.new("Frame")
TitleBar.Size = UDim2.new(1, 0, 0, 50)
TitleBar.BackgroundColor3 = Color3.fromRGB(40, 40, 60)
TitleBar.BorderSizePixel = 0
TitleBar.Parent = MainFrame

local TitleCorner = Instance.new("UICorner")
TitleCorner.CornerRadius = UDim.new(0, 12)
TitleCorner.Parent = TitleBar

local TitleGradient = Instance.new("UIGradient")
TitleGradient.Color = ColorSequence.new{
    ColorSequenceKeypoint.new(0, Color3.fromRGB(138, 43, 226)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(75, 0, 130))
}
TitleGradient.Rotation = 90
TitleGradient.Parent = TitleBar

local Title = Instance.new("TextLabel")
Title.Size = UDim2.new(1, -100, 1, 0)
Title.Position = UDim2.new(0, 15, 0, 0)
Title.BackgroundTransparency = 1
Title.Text = "😈 Rpyf Troll"
Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Title.TextSize = 22
Title.Font = Enum.Font.GothamBold
Title.TextXAlignment = Enum.TextXAlignment.Left
Title.Parent = TitleBar

-- Close Button
local CloseButton = Instance.new("TextButton")
CloseButton.Size = UDim2.new(0, 40, 0, 40)
CloseButton.Position = UDim2.new(1, -45, 0, 5)
CloseButton.BackgroundColor3 = Color3.fromRGB(220, 53, 69)
CloseButton.BorderSizePixel = 0
CloseButton.Text = "āœ•"
CloseButton.TextColor3 = Color3.fromRGB(255, 255, 255)
CloseButton.TextSize = 20
CloseButton.Font = Enum.Font.GothamBold
CloseButton.Parent = TitleBar

local CloseCorner = Instance.new("UICorner")
CloseCorner.CornerRadius = UDim.new(0, 8)
CloseCorner.Parent = CloseButton

CloseButton.MouseButton1Click:Connect(function()
    ScreenGui:Destroy()
end)

-- Tabs Container
local TabContainer = Instance.new("Frame")
TabContainer.Size = UDim2.new(1, -20, 0, 40)
TabContainer.Position = UDim2.new(0, 10, 0, 60)
TabContainer.BackgroundTransparency = 1
TabContainer.Parent = MainFrame

-- Content Frame
local ContentFrame = Instance.new("ScrollingFrame")
ContentFrame.Size = UDim2.new(1, -20, 1, -120)
ContentFrame.Position = UDim2.new(0, 10, 0, 110)
ContentFrame.BackgroundTransparency = 1
ContentFrame.BorderSizePixel = 0
ContentFrame.ScrollBarThickness = 4
ContentFrame.CanvasSize = UDim2.new(0, 0, 0, 0)
ContentFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y
ContentFrame.Parent = MainFrame

local ContentLayout = Instance.new("UIListLayout")
ContentLayout.Padding = UDim.new(0, 8)
ContentLayout.SortOrder = Enum.SortOrder.LayoutOrder
ContentLayout.Parent = ContentFrame

-- Keybind Change Popup
local KeybindPopup = Instance.new("Frame")
KeybindPopup.Size = UDim2.new(0, 300, 0, 150)
KeybindPopup.Position = UDim2.new(0.5, -150, 0.5, -75)
KeybindPopup.BackgroundColor3 = Color3.fromRGB(35, 35, 50)
KeybindPopup.BorderSizePixel = 0
KeybindPopup.Visible = false
KeybindPopup.ZIndex = 100
KeybindPopup.Parent = ScreenGui

local PopupCorner = Instance.new("UICorner")
PopupCorner.CornerRadius = UDim.new(0, 12)
PopupCorner.Parent = KeybindPopup

local PopupTitle = Instance.new("TextLabel")
PopupTitle.Size = UDim2.new(1, -20, 0, 40)
PopupTitle.Position = UDim2.new(0, 10, 0, 10)
PopupTitle.BackgroundTransparency = 1
PopupTitle.Text = "Press any key..."
PopupTitle.TextColor3 = Color3.fromRGB(255, 255, 255)
PopupTitle.TextSize = 16
PopupTitle.Font = Enum.Font.GothamBold
PopupTitle.Parent = KeybindPopup

local PopupSubtitle = Instance.new("TextLabel")
PopupSubtitle.Size = UDim2.new(1, -20, 0, 60)
PopupSubtitle.Position = UDim2.new(0, 10, 0, 50)
PopupSubtitle.BackgroundTransparency = 1
PopupSubtitle.Text = "Press ESC to cancel"
PopupSubtitle.TextColor3 = Color3.fromRGB(180, 180, 180)
PopupSubtitle.TextSize = 12
PopupSubtitle.Font = Enum.Font.Gotham
PopupSubtitle.TextWrapped = true
PopupSubtitle.Parent = KeybindPopup

local PopupCancel = Instance.new("TextButton")
PopupCancel.Size = UDim2.new(0, 100, 0, 35)
PopupCancel.Position = UDim2.new(0.5, -50, 1, -45)
PopupCancel.BackgroundColor3 = Color3.fromRGB(220, 53, 69)
PopupCancel.BorderSizePixel = 0
PopupCancel.Text = "Cancel"
PopupCancel.TextColor3 = Color3.fromRGB(255, 255, 255)
PopupCancel.TextSize = 14
PopupCancel.Font = Enum.Font.GothamBold
PopupCancel.Parent = KeybindPopup

local CancelCorner = Instance.new("UICorner")
CancelCorner.CornerRadius = UDim.new(0, 8)
CancelCorner.Parent = PopupCancel

-- Helper Functions
local function createTab(text, icon, layoutOrder)
    local Tab = Instance.new("TextButton")
    Tab.Size = UDim2.new(0.32, -5, 1, 0)
    Tab.Position = UDim2.new((layoutOrder - 1) * 0.33, 0, 0, 0)
    Tab.BackgroundColor3 = Color3.fromRGB(45, 45, 65)
    Tab.BorderSizePixel = 0
    Tab.Text = icon .. " " .. text
    Tab.TextColor3 = Color3.fromRGB(200, 200, 200)
    Tab.TextSize = 14
    Tab.Font = Enum.Font.GothamSemibold
    Tab.Parent = TabContainer
    
    local TabCorner = Instance.new("UICorner")
    TabCorner.CornerRadius = UDim.new(0, 8)
    TabCorner.Parent = Tab
    
    return Tab
end

local currentKeybindChanging = nil

local function openKeybindChanger(keybindName, currentKey, callback)
    currentKeybindChanging = keybindName
    KeybindPopup.Visible = true
    PopupTitle.Text = "Change " .. keybindName .. " Keybind"
    PopupSubtitle.Text = "Current: " .. (KeybindNames[currentKey] or "Unknown") .. "\nPress any key to change or ESC to cancel"
    
    local connection
    connection = UserInputService.InputBegan:Connect(function(input, gameProcessed)
        if input.UserInputType ~= Enum.UserInputType.Keyboard then return end
        
        if input.KeyCode == Enum.KeyCode.Escape then
            KeybindPopup.Visible = false
            currentKeybindChanging = nil
            connection:Disconnect()
            return
        end
        
        -- Update keybind
        callback(input.KeyCode)
        KeybindPopup.Visible = false
        currentKeybindChanging = nil
        connection:Disconnect()
    end)
end

PopupCancel.MouseButton1Click:Connect(function()
    KeybindPopup.Visible = false
    currentKeybindChanging = nil
end)

local function createButton(text, icon, callback)
    local Button = Instance.new("TextButton")
    Button.Size = UDim2.new(1, 0, 0, 45)
    Button.BackgroundColor3 = Color3.fromRGB(45, 45, 65)
    Button.BorderSizePixel = 0
    Button.Text = ""
    Button.AutoButtonColor = false
    Button.Parent = ContentFrame
    
    local ButtonCorner = Instance.new("UICorner")
    ButtonCorner.CornerRadius = UDim.new(0, 8)
    ButtonCorner.Parent = Button
    
    local IconLabel = Instance.new("TextLabel")
    IconLabel.Size = UDim2.new(0, 40, 1, 0)
    IconLabel.BackgroundTransparency = 1
    IconLabel.Text = icon
    IconLabel.TextSize = 20
    IconLabel.Font = Enum.Font.GothamBold
    IconLabel.TextColor3 = Color3.fromRGB(138, 43, 226)
    IconLabel.Parent = Button
    
    local TextLabel = Instance.new("TextLabel")
    TextLabel.Size = UDim2.new(1, -50, 1, 0)
    TextLabel.Position = UDim2.new(0, 45, 0, 0)
    TextLabel.BackgroundTransparency = 1
    TextLabel.Text = text
    TextLabel.TextColor3 = Color3.fromRGB(220, 220, 220)
    TextLabel.TextSize = 14
    TextLabel.Font = Enum.Font.Gotham
    TextLabel.TextXAlignment = Enum.TextXAlignment.Left
    TextLabel.Parent = Button
    
    local StatusIndicator = Instance.new("Frame")
    StatusIndicator.Size = UDim2.new(0, 10, 0, 10)
    StatusIndicator.Position = UDim2.new(1, -20, 0.5, -5)
    StatusIndicator.BackgroundColor3 = Color3.fromRGB(100, 100, 100)
    StatusIndicator.BorderSizePixel = 0
    StatusIndicator.Parent = Button
    
    local IndicatorCorner = Instance.new("UICorner")
    IndicatorCorner.CornerRadius = UDim.new(1, 0)
    IndicatorCorner.Parent = StatusIndicator
    
    Button.MouseEnter:Connect(function()
        TweenService:Create(Button, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(55, 55, 75)}):Play()
    end)
    
    Button.MouseLeave:Connect(function()
        TweenService:Create(Button, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(45, 45, 65)}):Play()
    end)
    
    Button.MouseButton1Click:Connect(callback)
    
    return Button, StatusIndicator, TextLabel
end

local function createButtonWithKeybind(text, icon, keybindName, callback)
    local Button, StatusIndicator, TextLabel = createButton(text, icon, callback)
    
    -- Add keybind button
    local KeybindButton = Instance.new("TextButton")
    KeybindButton.Size = UDim2.new(0, 60, 0, 25)
    KeybindButton.Position = UDim2.new(1, -90, 0.5, -12.5)
    KeybindButton.BackgroundColor3 = Color3.fromRGB(60, 60, 80)
    KeybindButton.BorderSizePixel = 0
    KeybindButton.Text = KeybindNames[Keybinds[keybindName]] or "?"
    KeybindButton.TextColor3 = Color3.fromRGB(255, 255, 255)
    KeybindButton.TextSize = 12
    KeybindButton.Font = Enum.Font.GothamBold
    KeybindButton.ZIndex = 2
    KeybindButton.Parent = Button
    
    local KeybindCorner = Instance.new("UICorner")
    KeybindCorner.CornerRadius = UDim.new(0, 6)
    KeybindCorner.Parent = KeybindButton
    
    KeybindButton.MouseButton1Click:Connect(function()
        openKeybindChanger(keybindName, Keybinds[keybindName], function(newKey)
            Keybinds[keybindName] = newKey
            KeybindButton.Text = KeybindNames[newKey] or "?"
            print("āœ… " .. keybindName .. " keybind changed to: " .. (KeybindNames[newKey] or "Unknown"))
        end)
    end)
    
    KeybindButton.MouseEnter:Connect(function()
        TweenService:Create(KeybindButton, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(80, 80, 100)}):Play()
    end)
    
    KeybindButton.MouseLeave:Connect(function()
        TweenService:Create(KeybindButton, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(60, 60, 80)}):Play()
    end)
    
    return Button, StatusIndicator, KeybindButton
end

local function createToggle(text, icon, callback)
    local Button, StatusIndicator = createButton(text, icon, function() end)
    local isActive = false
    
    Button.MouseButton1Click:Connect(function()
        isActive = not isActive
        if isActive then
            TweenService:Create(StatusIndicator, TweenInfo.new(0.3), {BackgroundColor3 = Color3.fromRGB(0, 255, 127)}):Play()
            TweenService:Create(Button, TweenInfo.new(0.3), {BackgroundColor3 = Color3.fromRGB(50, 65, 55)}):Play()
        else
            TweenService:Create(StatusIndicator, TweenInfo.new(0.3), {BackgroundColor3 = Color3.fromRGB(100, 100, 100)}):Play()
            TweenService:Create(Button, TweenInfo.new(0.3), {BackgroundColor3 = Color3.fromRGB(45, 45, 65)}):Play()
        end
        callback(isActive)
    end)
    
    return Button, StatusIndicator
end

local function createToggleWithKeybind(text, icon, keybindName, callback)
    local Button, StatusIndicator, TextLabel = createButton(text, icon, function() end)
    local isActive = false
    
    -- Add keybind button
    local KeybindButton = Instance.new("TextButton")
    KeybindButton.Size = UDim2.new(0, 60, 0, 25)
    KeybindButton.Position = UDim2.new(1, -90, 0.5, -12.5)
    KeybindButton.BackgroundColor3 = Color3.fromRGB(60, 60, 80)
    KeybindButton.BorderSizePixel = 0
    KeybindButton.Text = KeybindNames[Keybinds[keybindName]] or "?"
    KeybindButton.TextColor3 = Color3.fromRGB(255, 255, 255)
    KeybindButton.TextSize = 12
    KeybindButton.Font = Enum.Font.GothamBold
    KeybindButton.ZIndex = 2
    KeybindButton.Parent = Button
    
    local KeybindCorner = Instance.new("UICorner")
    KeybindCorner.CornerRadius = UDim.new(0, 6)
    KeybindCorner.Parent = KeybindButton
    
    KeybindButton.MouseButton1Click:Connect(function()
        openKeybindChanger(keybindName, Keybinds[keybindName], function(newKey)
            Keybinds[keybindName] = newKey
            KeybindButton.Text = KeybindNames[newKey] or "?"
            print("āœ… " .. keybindName .. " keybind changed to: " .. (KeybindNames[newKey] or "Unknown"))
        end)
    end)
    
    KeybindButton.MouseEnter:Connect(function()
        TweenService:Create(KeybindButton, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(80, 80, 100)}):Play()
    end)
    
    KeybindButton.MouseLeave:Connect(function()
        TweenService:Create(KeybindButton, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(60, 60, 80)}):Play()
    end)
    
    Button.MouseButton1Click:Connect(function()
        isActive = not isActive
        if isActive then
            TweenService:Create(StatusIndicator, TweenInfo.new(0.3), {BackgroundColor3 = Color3.fromRGB(0, 255, 127)}):Play()
            TweenService:Create(Button, TweenInfo.new(0.3), {BackgroundColor3 = Color3.fromRGB(50, 65, 55)}):Play()
        else
            TweenService:Create(StatusIndicator, TweenInfo.new(0.3), {BackgroundColor3 = Color3.fromRGB(100, 100, 100)}):Play()
            TweenService:Create(Button, TweenInfo.new(0.3), {BackgroundColor3 = Color3.fromRGB(45, 45, 65)}):Play()
        end
        callback(isActive)
    end)
    
    return Button, StatusIndicator, KeybindButton
end

local function createSlider(text, min, max, default, callback)
    local Container = Instance.new("Frame")
    Container.Size = UDim2.new(1, 0, 0, 60)
    Container.BackgroundColor3 = Color3.fromRGB(45, 45, 65)
    Container.BorderSizePixel = 0
    Container.Parent = ContentFrame
    
    local ContainerCorner = Instance.new("UICorner")
    ContainerCorner.CornerRadius = UDim.new(0, 8)
    ContainerCorner.Parent = Container
    
    local Label = Instance.new("TextLabel")
    Label.Size = UDim2.new(1, -20, 0, 25)
    Label.Position = UDim2.new(0, 10, 0, 5)
    Label.BackgroundTransparency = 1
    Label.Text = text .. ": " .. default
    Label.TextColor3 = Color3.fromRGB(220, 220, 220)
    Label.TextSize = 13
    Label.Font = Enum.Font.Gotham
    Label.TextXAlignment = Enum.TextXAlignment.Left
    Label.Parent = Container
    
    local SliderBack = Instance.new("Frame")
    SliderBack.Size = UDim2.new(1, -20, 0, 6)
    SliderBack.Position = UDim2.new(0, 10, 1, -15)
    SliderBack.BackgroundColor3 = Color3.fromRGB(30, 30, 45)
    SliderBack.BorderSizePixel = 0
    SliderBack.Parent = Container
    
    local SliderCorner = Instance.new("UICorner")
    SliderCorner.CornerRadius = UDim.new(1, 0)
    SliderCorner.Parent = SliderBack
    
    local SliderFill = Instance.new("Frame")
    SliderFill.Size = UDim2.new((default - min) / (max - min), 0, 1, 0)
    SliderFill.BackgroundColor3 = Color3.fromRGB(138, 43, 226)
    SliderFill.BorderSizePixel = 0
    SliderFill.Parent = SliderBack
    
    local FillCorner = Instance.new("UICorner")
    FillCorner.CornerRadius = UDim.new(1, 0)
    FillCorner.Parent = SliderFill
    
    local SliderButton = Instance.new("TextButton")
    SliderButton.Size = UDim2.new(1, 0, 1, 0)
    SliderButton.BackgroundTransparency = 1
    SliderButton.Text = ""
    SliderButton.Parent = SliderBack
    
    local dragging = false
    
    SliderButton.MouseButton1Down:Connect(function()
        dragging = true
    end)
    
    UserInputService.InputEnded:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = false
        end
    end)
    
    RunService.RenderStepped:Connect(function()
        if dragging then
            local mousePos = UserInputService:GetMouseLocation()
            local relativePos = mousePos.X - SliderBack.AbsolutePosition.X
            local percentage = math.clamp(relativePos / SliderBack.AbsoluteSize.X, 0, 1)
            local value = math.floor(min + (max - min) * percentage)
            
            SliderFill.Size = UDim2.new(percentage, 0, 1, 0)
            Label.Text = text .. ": " .. value
            callback(value)
        end
    end)
    
    return Container
end

local function createDropdown(text, options, default, callback)
    local Container = Instance.new("Frame")
    Container.Size = UDim2.new(1, 0, 0, 45)
    Container.BackgroundColor3 = Color3.fromRGB(45, 45, 65)
    Container.BorderSizePixel = 0
    Container.Parent = ContentFrame
    
    local ContainerCorner = Instance.new("UICorner")
    ContainerCorner.CornerRadius = UDim.new(0, 8)
    ContainerCorner.Parent = Container
    
    local Label = Instance.new("TextLabel")
    Label.Size = UDim2.new(0.5, -10, 1, 0)
    Label.Position = UDim2.new(0, 10, 0, 0)
    Label.BackgroundTransparency = 1
    Label.Text = text
    Label.TextColor3 = Color3.fromRGB(220, 220, 220)
    Label.TextSize = 13
    Label.Font = Enum.Font.Gotham
    Label.TextXAlignment = Enum.TextXAlignment.Left
    Label.Parent = Container
    
    local DropButton = Instance.new("TextButton")
    DropButton.Size = UDim2.new(0.5, -10, 0, 30)
    DropButton.Position = UDim2.new(0.5, 0, 0.5, -15)
    DropButton.BackgroundColor3 = Color3.fromRGB(35, 35, 50)
    DropButton.BorderSizePixel = 0
    DropButton.Text = default .. " ā–¼"
    DropButton.TextColor3 = Color3.fromRGB(220, 220, 220)
    DropButton.TextSize = 12
    DropButton.Font = Enum.Font.Gotham
    DropButton.Parent = Container
    
    local DropCorner = Instance.new("UICorner")
    DropCorner.CornerRadius = UDim.new(0, 6)
    DropCorner.Parent = DropButton
    
    local DropList = Instance.new("Frame")
    DropList.Size = UDim2.new(0.5, -10, 0, #options * 30)
    DropList.Position = UDim2.new(0.5, 0, 1, 5)
    DropList.BackgroundColor3 = Color3.fromRGB(35, 35, 50)
    DropList.BorderSizePixel = 0
    DropList.Visible = false
    DropList.ZIndex = 10
    DropList.Parent = Container
    
    local ListCorner = Instance.new("UICorner")
    ListCorner.CornerRadius = UDim.new(0, 6)
    ListCorner.Parent = DropList
    
    local ListLayout = Instance.new("UIListLayout")
    ListLayout.SortOrder = Enum.SortOrder.LayoutOrder
    ListLayout.Parent = DropList
    
    DropButton.MouseButton1Click:Connect(function()
        DropList.Visible = not DropList.Visible
        Container.Size = UDim2.new(1, 0, 0, DropList.Visible and (45 + #options * 30 + 5) or 45)
    end)
    
    for i, option in ipairs(options) do
        local OptionButton = Instance.new("TextButton")
        OptionButton.Size = UDim2.new(1, 0, 0, 30)
        OptionButton.BackgroundColor3 = Color3.fromRGB(35, 35, 50)
        OptionButton.BorderSizePixel = 0
        OptionButton.Text = option
        OptionButton.TextColor3 = Color3.fromRGB(200, 200, 200)
        OptionButton.TextSize = 11
        OptionButton.Font = Enum.Font.Gotham
        OptionButton.Parent = DropList
        
        OptionButton.MouseButton1Click:Connect(function()
            DropButton.Text = option .. " ā–¼"
            DropList.Visible = false
            Container.Size = UDim2.new(1, 0, 0, 45)
            callback(option)
        end)
    end
    
    return Container
end

-- FOV Circle for Aimbot (Single RGB circle)
local FOVCircle = Drawing.new("Circle")
FOVCircle.Thickness = 2
FOVCircle.NumSides = 100
FOVCircle.Radius = Config.AimbotFOV
FOVCircle.Color = Color3.fromRGB(255, 0, 0)
FOVCircle.Visible = false
FOVCircle.Filled = false
FOVCircle.Transparency = 1

-- RGB Animation values
local rgbHue = 0

-- Game Functions
local function getCharacter()
    return LocalPlayer.Character
end

local function getHumanoidRootPart()
    local char = getCharacter()
    return char and char:FindFirstChild("HumanoidRootPart")
end

local function getTargetPart(player)
    if not player.Character then return nil end
    
    if Config.AimbotTarget == "Head" then
        return player.Character:FindFirstChild("Head")
    elseif Config.AimbotTarget == "Body" then
        return player.Character:FindFirstChild("Torso") or player.Character:FindFirstChild("UpperTorso")
    elseif Config.AimbotTarget == "Legs+Body" then
        return player.Character:FindFirstChild("HumanoidRootPart")
    elseif Config.AimbotTarget == "Body+Head" then
        local head = player.Character:FindFirstChild("Head")
        local torso = player.Character:FindFirstChild("Torso") or player.Character:FindFirstChild("UpperTorso")
        return head or torso
    elseif Config.AimbotTarget == "All" then
        return player.Character:FindFirstChild("HumanoidRootPart")
    end
end

local function isInFOV(targetPos)
    local viewportSize = Camera.ViewportSize
    local screenCenter = Vector2.new(viewportSize.X / 2, viewportSize.Y / 2)
    
    local screenPos, onScreen = Camera:WorldToViewportPoint(targetPos)
    if not onScreen then return false end
    
    local screenPosition = Vector2.new(screenPos.X, screenPos.Y)
    local distance = (screenPosition - screenCenter).Magnitude
    
    return distance <= Config.AimbotFOV
end

local function getNearestPlayerInFOV()
    local nearestPlayer = nil
    local shortestDistance = math.huge
    local viewportSize = Camera.ViewportSize
    local screenCenter = Vector2.new(viewportSize.X / 2, viewportSize.Y / 2)
    
    for _, player in pairs(Players:GetPlayers()) do
        if player ~= LocalPlayer and player.Character then
            local targetPart = getTargetPart(player)
            if targetPart then
                local screenPos, onScreen = Camera:WorldToViewportPoint(targetPart.Position)
                if onScreen and isInFOV(targetPart.Position) then
                    local screenPosition = Vector2.new(screenPos.X, screenPos.Y)
                    local distance = (screenPosition - screenCenter).Magnitude
                    if distance < shortestDistance then
                        shortestDistance = distance
                        nearestPlayer = player
                    end
                end
            end
        end
    end
    
    return nearestPlayer
end

local function getNearestPlayer()
    local nearestPlayer = nil
    local shortestDistance = math.huge
    local myRootPart = getHumanoidRootPart()
    
    if not myRootPart then return nil end
    
    for _, player in pairs(Players:GetPlayers()) do
        if player ~= LocalPlayer and player.Character then
            local theirRootPart = player.Character:FindFirstChild("HumanoidRootPart")
            if theirRootPart then
                local distance = (myRootPart.Position - theirRootPart.Position).Magnitude
                if distance < shortestDistance then
                    shortestDistance = distance
                    nearestPlayer = player
                end
            end
        end
    end
    
    return nearestPlayer
end

local function getNearestCar()
    local nearestCar = nil
    local shortestDistance = math.huge
    local myRootPart = getHumanoidRootPart()
    
    if not myRootPart then return nil end
    
    for _, obj in pairs(workspace:GetDescendants()) do
        if obj:IsA("VehicleSeat") or (obj:IsA("Model") and obj:FindFirstChild("VehicleSeat")) then
            local model = obj:IsA("Model") and obj or obj.Parent
            local primaryPart = model.PrimaryPart or model:FindFirstChildWhichIsA("BasePart")
            
            if primaryPart then
                local distance = (myRootPart.Position - primaryPart.Position).Magnitude
                if distance < shortestDistance and distance < 100 then
                    shortestDistance = distance
                    nearestCar = model
                end
            end
        end
    end
    
    return nearestCar
end

local function getAllNearbyPlayers(radius)
    local nearbyPlayers = {}
    local myRootPart = getHumanoidRootPart()
    
    if not myRootPart then return nearbyPlayers end
    
    for _, player in pairs(Players:GetPlayers()) do
        if player ~= LocalPlayer and player.Character then
            local theirRootPart = player.Character:FindFirstChild("HumanoidRootPart")
            if theirRootPart then
                local distance = (myRootPart.Position - theirRootPart.Position).Magnitude
                if distance <= radius then
                    table.insert(nearbyPlayers, player)
                end
            end
        end
    end
    
    return nearbyPlayers
end

-- Feature Functions
local function flingPlayer(targetPlayer)
    local char = getCharacter()
    local myRootPart = getHumanoidRootPart()
    
    if not char or not myRootPart then return end
    if not targetPlayer or not targetPlayer.Character then return end
    
    local targetRootPart = targetPlayer.Character:FindFirstChild("HumanoidRootPart")
    if not targetRootPart then return end
    
    local bodyVelocity = Instance.new("BodyVelocity")
    bodyVelocity.Velocity = Vector3.new(0, Config.FlingPower, 0)
    bodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
    bodyVelocity.Parent = myRootPart
    
    myRootPart.CFrame = targetRootPart.CFrame
    
    wait(0.1)
    
    bodyVelocity:Destroy()
    myRootPart.CFrame = myRootPart.CFrame + Vector3.new(0, 5, 0)
end

local function flingNearestPlayer()
    local target = getNearestPlayer()
    if target then
        flingPlayer(target)
        print("šŸŽÆ Flinging: " .. target.Name)
    else
        print("āŒ No nearby players found")
    end
end

local function flingAllNearby()
    local nearbyPlayers = getAllNearbyPlayers(Config.FlingAllRadius)
    
    if #nearbyPlayers == 0 then
        print("āŒ No nearby players found")
        return
    end
    
    print("šŸ’„ Flinging " .. #nearbyPlayers .. " nearby players")
    
    for _, player in pairs(nearbyPlayers) do
        spawn(function()
            flingPlayer(player)
        end)
        wait(0.5)
    end
end

-- Aimbot (FIXED - Single RGB circle, only locks players in front)
local aimbotConnection = nil
local fovUpdateConnection = nil

local function startAimbot()
    Config.AimbotEnabled = true
    
    -- Separate connection for FOV circle updates with RGB animation
    fovUpdateConnection = RunService.RenderStepped:Connect(function()
        local viewportSize = Camera.ViewportSize
        local screenCenter = Vector2.new(viewportSize.X / 2, viewportSize.Y / 2)
        
        -- Update circle position and radius
        FOVCircle.Position = screenCenter
        FOVCircle.Radius = Config.AimbotFOV
        FOVCircle.Visible = true
        
        -- RGB color animation
        rgbHue = rgbHue + 0.01
        if rgbHue >= 1 then
            rgbHue = 0
        end
        FOVCircle.Color = Color3.fromHSV(rgbHue, 1, 1)
    end)
    
    -- Main aimbot logic
    aimbotConnection = RunService.RenderStepped:Connect(function()
        if not Config.AimbotEnabled then return end
        
        -- Only target players within the FOV circle and in front
        local target = getNearestPlayerInFOV()
        if not target or not target.Character then return end
        
        local targetPart = getTargetPart(target)
        if not targetPart then return end
        
        -- Verify target is in front of camera (not behind)
        local cameraLookVector = Camera.CFrame.LookVector
        local targetDirection = (targetPart.Position - Camera.CFrame.Position).Unit
        local dotProduct = cameraLookVector:Dot(targetDirection)
        
        -- Only lock if target is in front (dot product > 0)
        if dotProduct <= 0 then return end
        
        -- Double check if target is still in FOV
        if not isInFOV(targetPart.Position) then return end
        
        -- Smoothly aim at target
        Camera.CFrame = CFrame.new(Camera.CFrame.Position, targetPart.Position)
    end)
    
    print("šŸŽÆ Aimbot enabled (RGB circle, only targets players in FOV)")
end

local function stopAimbot()
    Config.AimbotEnabled = false
    FOVCircle.Visible = false
    
    if aimbotConnection then
        aimbotConnection:Disconnect()
        aimbotConnection = nil
    end
    
    if fovUpdateConnection then
        fovUpdateConnection:Disconnect()
        fovUpdateConnection = nil
    end
    
    print("āŒ Aimbot disabled")
end

-- Fly
local flyConnection = nil
local flyBodyVelocity = nil
local flyBodyGyro = nil

local function startFly()
    local char = getCharacter()
    local myRootPart = getHumanoidRootPart()
    
    if not char or not myRootPart then return end
    
    Config.FlyEnabled = true
    
    flyBodyVelocity = Instance.new("BodyVelocity")
    flyBodyVelocity.Velocity = Vector3.new(0, 0, 0)
    flyBodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
    flyBodyVelocity.Parent = myRootPart
    
    flyBodyGyro = Instance.new("BodyGyro")
    flyBodyGyro.MaxTorque = Vector3.new(math.huge, math.huge, math.huge)
    flyBodyGyro.P = 9000
    flyBodyGyro.Parent = myRootPart
    
    flyConnection = RunService.RenderStepped:Connect(function()
        if not Config.FlyEnabled then return end
        
        local myRootPart = getHumanoidRootPart()
        if not myRootPart then return end
        
        local moveDirection = Vector3.new(0, 0, 0)
        
        if UserInputService:IsKeyDown(Enum.KeyCode.W) then
            moveDirection = moveDirection + Camera.CFrame.LookVector
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.S) then
            moveDirection = moveDirection - Camera.CFrame.LookVector
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.A) then
            moveDirection = moveDirection - Camera.CFrame.RightVector
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.D) then
            moveDirection = moveDirection + Camera.CFrame.RightVector
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.Space) then
            moveDirection = moveDirection + Vector3.new(0, 1, 0)
        end
        if UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) then
            moveDirection = moveDirection - Vector3.new(0, 1, 0)
        end
        
        flyBodyVelocity.Velocity = moveDirection * Config.FlySpeed
        flyBodyGyro.CFrame = Camera.CFrame
    end)
    
    print("āœˆļø Fly enabled")
end

local function stopFly()
    Config.FlyEnabled = false
    
    if flyConnection then
        flyConnection:Disconnect()
        flyConnection = nil
    end
    
    if flyBodyVelocity then
        flyBodyVelocity:Destroy()
        flyBodyVelocity = nil
    end
    
    if flyBodyGyro then
        flyBodyGyro:Destroy()
        flyBodyGyro = nil
    end
    
    print("āŒ Fly disabled")
end

-- Car Throwing
local function throwCar()
    local nearestCar = getNearestCar()
    local myRootPart = getHumanoidRootPart()
    
    if not nearestCar then
        print("āŒ No nearby car found")
        return
    end
    
    if not myRootPart then return end
    
    print("šŸš— Throwing car: " .. nearestCar.Name)
    
    for _, part in pairs(nearestCar:GetDescendants()) do
        if part:IsA("BasePart") then
            part.Anchored = false
            
            local bodyVelocity = Instance.new("BodyVelocity")
            bodyVelocity.Velocity = Camera.CFrame.LookVector * Config.ThrowPower + Vector3.new(0, 50, 0)
            bodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
            bodyVelocity.Parent = part
            
            game:GetService("Debris"):AddItem(bodyVelocity, 0.5)
        end
    end
end

-- Backshots Feature (Realistic back and forth motion)
local backshotsConnection = nil
local backshotsTarget = nil
local backshotsCurrentDistance = 0
local backshotsMovingForward = true

local function startBackshots()
    Config.BackshotsEnabled = true
    backshotsTarget = getNearestPlayer()
    backshotsCurrentDistance = Config.BackshotsDistance
    backshotsMovingForward = true
    
    if not backshotsTarget then
        print("āŒ No player found for backshots")
        Config.BackshotsEnabled = false
        return
    end
    
    print("😈 Backshots activated on: " .. backshotsTarget.Name)
    
    backshotsConnection = RunService.RenderStepped:Connect(function()
        if not Config.BackshotsEnabled then return end
        
        local myRootPart = getHumanoidRootPart()
        if not myRootPart then return end
        
        if not backshotsTarget or not backshotsTarget.Character then
            Config.BackshotsEnabled = false
            return
        end
        
        local targetRootPart = backshotsTarget.Character:FindFirstChild("HumanoidRootPart")
        if not targetRootPart then return end
        
        -- Animate back and forth movement
        if backshotsMovingForward then
            backshotsCurrentDistance = backshotsCurrentDistance - (Config.BackshotsSpeed * 0.1)
            if backshotsCurrentDistance <= 0.5 then
                backshotsMovingForward = false
            end
        else
            backshotsCurrentDistance = backshotsCurrentDistance + (Config.BackshotsSpeed * 0.1)
            if backshotsCurrentDistance >= Config.BackshotsDistance then
                backshotsMovingForward = true
            end
        end
        
        -- Position behind the target with animated distance
        local behindPosition = targetRootPart.CFrame * CFrame.new(0, 0, backshotsCurrentDistance)
        
        -- Keep character facing the target's back
        local lookAtTarget = CFrame.new(behindPosition.Position, targetRootPart.Position)
        
        myRootPart.CFrame = lookAtTarget
        
        -- Lock camera to view from behind and slightly above
        local cameraOffset = targetRootPart.CFrame * CFrame.new(0, 3, Config.BackshotsDistance + 2)
        Camera.CFrame = CFrame.new(cameraOffset.Position, targetRootPart.Position)
    end)
end

local function stopBackshots()
    Config.BackshotsEnabled = false
    backshotsTarget = nil
    backshotsCurrentDistance = 0
    backshotsMovingForward = true
    
    if backshotsConnection then
        backshotsConnection:Disconnect()
        backshotsConnection = nil
    end
    
    print("āŒ Backshots disabled")
end

-- Create Tabs
local combatTab = createTab("Combat", "āš”ļø", 1)
local movementTab = createTab("Movement", "šŸƒ", 2)
local trollTab = createTab("Troll", "😈", 3)

local currentTab = "Combat"

local function showTab(tabName)
    for _, child in pairs(ContentFrame:GetChildren()) do
        if child:IsA("GuiObject") then
            child:Destroy()
        end
    end
    
    currentTab = tabName
    
    if tabName == "Combat" then
        combatTab.BackgroundColor3 = Color3.fromRGB(138, 43, 226)
        combatTab.TextColor3 = Color3.fromRGB(255, 255, 255)
        movementTab.BackgroundColor3 = Color3.fromRGB(45, 45, 65)
        movementTab.TextColor3 = Color3.fromRGB(200, 200, 200)
        trollTab.BackgroundColor3 = Color3.fromRGB(45, 45, 65)
        trollTab.TextColor3 = Color3.fromRGB(200, 200, 200)
        
        createToggleWithKeybind("Aimbot", "šŸŽÆ", "Aimbot", function(enabled)
            if enabled then
                startAimbot()
            else
                stopAimbot()
            end
        end)
        
        createDropdown("Aimbot Target", {"Head", "Body", "Legs+Body", "Body+Head", "All"}, "Head", function(value)
            Config.AimbotTarget = value
            print("šŸŽÆ Aimbot target: " .. value)
        end)
        
        createSlider("Aimbot FOV", 50, 500, Config.AimbotFOV, function(value)
            Config.AimbotFOV = value
        end)
        
    elseif tabName == "Movement" then
        combatTab.BackgroundColor3 = Color3.fromRGB(45, 45, 65)
        combatTab.TextColor3 = Color3.fromRGB(200, 200, 200)
        movementTab.BackgroundColor3 = Color3.fromRGB(138, 43, 226)
        movementTab.TextColor3 = Color3.fromRGB(255, 255, 255)
        trollTab.BackgroundColor3 = Color3.fromRGB(45, 45, 65)
        trollTab.TextColor3 = Color3.fromRGB(200, 200, 200)
        
        createToggleWithKeybind("Fly Mode", "āœˆļø", "Fly", function(enabled)
            if enabled then
                startFly()
            else
                stopFly()
            end
        end)
        
        createSlider("Fly Speed", 50, 300, Config.FlySpeed, function(value)
            Config.FlySpeed = value
        end)
        
    elseif tabName == "Troll" then
        combatTab.BackgroundColor3 = Color3.fromRGB(45, 45, 65)
        combatTab.TextColor3 = Color3.fromRGB(200, 200, 200)
        movementTab.BackgroundColor3 = Color3.fromRGB(45, 45, 65)
        movementTab.TextColor3 = Color3.fromRGB(200, 200, 200)
        trollTab.BackgroundColor3 = Color3.fromRGB(138, 43, 226)
        trollTab.TextColor3 = Color3.fromRGB(255, 255, 255)
        
        createToggleWithKeybind("Backshots Mode", "😈", "Backshots", function(enabled)
            if enabled then
                startBackshots()
            else
                stopBackshots()
            end
        end)
        
        createSlider("Backshots Distance", 2, 8, Config.BackshotsDistance, function(value)
            Config.BackshotsDistance = value
        end)
        
        createSlider("Backshots Speed", 0.5, 5, Config.BackshotsSpeed, function(value)
            Config.BackshotsSpeed = value
        end)
        
        createButtonWithKeybind("Fling Nearest", "šŸ’„", "FlingNearest", flingNearestPlayer)
        
        createButtonWithKeybind("Fling All Nearby", "šŸ’«", "FlingAll", flingAllNearby)
        
        createButtonWithKeybind("Throw Car", "šŸš—", "ThrowCar", throwCar)
        
        createSlider("Fling Power", 100, 1000, Config.FlingPower, function(value)
            Config.FlingPower = value
        end)
    end
end

combatTab.MouseButton1Click:Connect(function() showTab("Combat") end)
movementTab.MouseButton1Click:Connect(function() showTab("Movement") end)
trollTab.MouseButton1Click:Connect(function() showTab("Troll") end)

-- Show Combat tab by default
showTab("Combat")

-- Keyboard Shortcuts (using customizable keybinds)
UserInputService.InputBegan:Connect(function(input, gameProcessed)
    if gameProcessed or currentKeybindChanging then return end
    if input.UserInputType ~= Enum.UserInputType.Keyboard then return end
    
    -- Check each keybind dynamically
    for action, keyCode in pairs(Keybinds) do
        if input.KeyCode == keyCode then
            if action == "FlingNearest" then
                flingNearestPlayer()
            elseif action == "Aimbot" then
                if Config.AimbotEnabled then
                    stopAimbot()
                else
                    startAimbot()
                end
            elseif action == "Fly" then
                if Config.FlyEnabled then
                    stopFly()
                else
                    startFly()
                end
            elseif action == "ThrowCar" then
                throwCar()
            elseif action == "FlingAll" then
                flingAllNearby()
            elseif action == "Backshots" then
                if Config.BackshotsEnabled then
                    stopBackshots()
                else
                    startBackshots()
                end
            end
            break
        end
    end
end)

-- Cleanup
LocalPlayer.CharacterAdded:Connect(function()
    stopFly()
    stopAimbot()
    stopBackshots()
end)

print("āœ… Rpyf Troll Script loaded! (COMPLETE FIXED VERSION)")
print("šŸ“‹ Hotkeys (customizable):")
print("F - Fling Nearest | G - Aimbot | H - Fly")
print("T - Throw Car | R - Fling All | B - Backshots")
print("šŸ’” Click the keybind buttons in GUI to customize!")
print("😈 Made by Rpyf")

Features & Information

šŸŽÆ Aimbot šŸŒ€ Fly šŸ’„ Fling Players ⚔ Backshot Speed 😈 Troll šŸ”„ Backshots šŸš€ Speed Boost šŸ‘€ ESP šŸƒ WalkSpeed
#free#keyless#troll#hub#best

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts