Pjv hub (V-2.1)
Key RequiredUniversal

Pjv hub (V-2.1)

Universal Scriptpjvhubpjvhub 624 views 216 executesUpdated Jan 21, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•282 lines (10388 chars)
-- MASTER UI SCRIPT: SHOOTER + GENERAL + CREDITS
-- Features: Camera Follow, Landing Prediction, ESP, Fly, Spin, Noclip (walls-only), Click Fling, Anti-AFK, Tabs, Minimized UI

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local UIS = game:GetService("UserInputService")
local Workspace = game:GetService("Workspace")
local Debris = game:GetService("Debris")

local player = Players.LocalPlayer
local camera = Workspace.CurrentCamera
local gravity = Workspace.Gravity

-- ===== SETTINGS =====
local MASTER = true
local CAMERA_ENABLED = true
local PREDICTION_ENABLED = true
local ARC_ENABLED = true
local FOV_ENABLED = true
local TEXT_ENABLED = true

local CAMERA_FOV_RADIUS = 180
local PREDICTION_FOV_RADIUS = 220
local CAMERA_SMOOTHNESS = 0.12
local MAX_DISTANCE = 600
local ARC_POINTS = 12
local ARC_FADE_TIME = 0.8

-- General toggles default values
local flyEnabled, flySpeed = false, 50
local noclipEnabled = false
local spinEnabled, spinSpeed = false, 100
local clickFlingEnabled = false
local antiAfkEnabled = false

-- ===== GUI =====
local gui = Instance.new("ScreenGui", player.PlayerGui)
gui.Name = "MasterUI"

-- Main Panel
local panel = Instance.new("Frame", gui)
panel.Size = UDim2.new(0, 350, 0, 400)
panel.Position = UDim2.new(0, 50, 0, 50)
panel.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
panel.Active = true
panel.Draggable = true

-- Tabs buttons
local tabs = {"Shooter","General","Credits"}
local currentTab = "Shooter"
local tabButtons = {}

local function createTabButton(name, x)
    local btn = Instance.new("TextButton", panel)
    btn.Size = UDim2.new(0,100,0,30)
    btn.Position = UDim2.new(0, x, 0, 10)
    btn.Text = name
    btn.Font = Enum.Font.GothamBold
    btn.TextScaled = true
    btn.BackgroundColor3 = Color3.fromRGB(50,50,50)
    btn.TextColor3 = Color3.new(1,1,1)
    btn.BorderSizePixel = 0
    return btn
end

for i, t in ipairs(tabs) do
    tabButtons[t] = createTabButton(t, (i-1)*110)
    tabButtons[t].MouseButton1Click:Connect(function()
        currentTab = t
        updateContent()
    end)
end

-- Content frame
local contentFrame = Instance.new("Frame", panel)
contentFrame.Size = UDim2.new(1,-20,1,-50)
contentFrame.Position = UDim2.new(0,10,0,50)
contentFrame.BackgroundTransparency = 1

-- ===== TAB UPDATE FUNCTION =====
local function updateContent()
    for _,c in pairs(contentFrame:GetChildren()) do
        c:Destroy()
    end
    if currentTab == "Shooter" then
        -- Shooter Features UI
        local shooterLabel = Instance.new("TextLabel", contentFrame)
        shooterLabel.Size = UDim2.new(1,0,0,30)
        shooterLabel.Position = UDim2.new(0,0,0,0)
        shooterLabel.BackgroundTransparency = 1
        shooterLabel.Text = "Shooter Features Enabled"
        shooterLabel.TextColor3 = Color3.new(1,1,1)
        shooterLabel.Font = Enum.Font.GothamBold
        shooterLabel.TextScaled = true
    elseif currentTab == "General" then
        -- General toggles
        local generalToggles = {}

        local function makeGeneralToggle(name, y, callback)
            local btn = Instance.new("TextButton", contentFrame)
            btn.Size = UDim2.new(1,-20,0,40)
            btn.Position = UDim2.new(0,10,0,y)
            btn.Text = name..": OFF"
            btn.Font = Enum.Font.GothamBold
            btn.TextScaled = true
            btn.BackgroundColor3 = Color3.fromRGB(0,170,255)
            btn.MouseButton1Click:Connect(callback)
            return btn
        end

        -- Fly
        local flyBtn = makeGeneralToggle("Fly",10,function()
            flyEnabled = not flyEnabled
            flyBtn.Text = "Fly: "..(flyEnabled and "ON" or "OFF")
        end)
        table.insert(generalToggles, flyBtn)

        -- Noclip
        local noclipBtn = makeGeneralToggle("Noclip",60,function()
            noclipEnabled = not noclipEnabled
            noclipBtn.Text = "Noclip: "..(noclipEnabled and "ON" or "OFF")
        end)
        table.insert(generalToggles,noclipBtn)

        -- Spin
        local spinBtn = makeGeneralToggle("Spin",110,function()
            spinEnabled = not spinEnabled
            spinBtn.Text = "Spin: "..(spinEnabled and "ON" or "OFF")
        end)
        table.insert(generalToggles,spinBtn)

        -- Click Fling
        local clickFlingBtn = makeGeneralToggle("Click Fling",160,function()
            clickFlingEnabled = not clickFlingEnabled
            clickFlingBtn.Text = "Click Fling: "..(clickFlingEnabled and "ON" or "OFF")
        end)
        table.insert(generalToggles,clickFlingBtn)

        -- Anti-AFK
        local antiAfkBtn = makeGeneralToggle("Anti-AFK",210,function()
            antiAfkEnabled = not antiAfkEnabled
            antiAfkBtn.Text = "Anti-AFK: "..(antiAfkEnabled and "ON" or "OFF")
        end)
        table.insert(generalToggles, antiAfkBtn)

        -- Sliders
        local function makeSlider(labelText, y, maxVal, default)
            local label = Instance.new("TextLabel", contentFrame)
            label.Size = UDim2.new(1,-20,0,30)
            label.Position = UDim2.new(0,10,0,y)
            label.BackgroundTransparency = 1
            label.TextColor3 = Color3.new(1,1,1)
            label.Font = Enum.Font.GothamBold
            label.TextScaled = true
            label.Text = labelText..": "..default

            local slider = Instance.new("Frame", contentFrame)
            slider.Size = UDim2.new(1,-40,0,20)
            slider.Position = UDim2.new(0,20,0,y+30)
            slider.BackgroundColor3 = Color3.fromRGB(50,50,50)

            local knob = Instance.new("Frame", slider)
            knob.Size = UDim2.new(default/maxVal,0,1,0)
            knob.Position = UDim2.new(0,0,0,0)
            knob.BackgroundColor3 = Color3.fromRGB(0,170,255)

            local dragging = false
            knob.InputBegan:Connect(function(input)
                if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
                    dragging = true
                end
            end)
            knob.InputEnded:Connect(function(input)
                dragging = false
            end)
            UIS.InputChanged:Connect(function(input)
                if dragging then
                    local relX = math.clamp(input.Position.X - slider.AbsolutePosition.X, 0, slider.AbsoluteSize.X)
                    knob.Size = UDim2.new(relX/slider.AbsoluteSize.X,0,1,0)
                    label.Text = labelText..": "..math.floor((relX/slider.AbsoluteSize.X)*maxVal)
                    if labelText == "Spin Speed" then spinSpeed = math.floor((relX/slider.AbsoluteSize.X)*maxVal) end
                    if labelText == "Fly Speed" then flySpeed = math.floor((relX/slider.AbsoluteSize.X)*maxVal) end
                end
            end)
        end

        makeSlider("Spin Speed", 260, 200, spinSpeed)
        makeSlider("Fly Speed", 300, 100, flySpeed)

    elseif currentTab == "Credits" then
        local creditsLabel = Instance.new("TextLabel", contentFrame)
        creditsLabel.Size = UDim2.new(1,0,1,0)
        creditsLabel.BackgroundTransparency = 1
        creditsLabel.TextColor3 = Color3.new(1,1,1)
        creditsLabel.TextScaled = true
        creditsLabel.Font = Enum.Font.GothamBold
        creditsLabel.Text = "Credits to PJV"
    end
end

updateContent()

-- ===== FOV CIRCLE =====
local fov = Instance.new("Frame", gui)
fov.Size = UDim2.new(0,PREDICTION_FOV_RADIUS*2,0,PREDICTION_FOV_RADIUS*2)
fov.Position = UDim2.new(0.5,-PREDICTION_FOV_RADIUS,0.5,-PREDICTION_FOV_RADIUS)
fov.BackgroundTransparency = 1
Instance.new("UICorner", fov).CornerRadius = UDim.new(1,0)
local stroke = Instance.new("UIStroke", fov)
stroke.Thickness = 2
stroke.Transparency = 0.3
stroke.Color = Color3.fromRGB(0,170,255)

-- ===== Helper Functions =====
local colors = {}
local function getColor(p)
    colors[p] = colors[p] or Color3.fromHSV(math.random(),1,1)
    return colors[p]
end

local function inFOV(pos)
    local s, vis = camera:WorldToViewportPoint(pos)
    if not vis then return false end
    local c = camera.ViewportSize/2
    return (Vector2.new(s.X,s.Y)-c).Magnitude <= PREDICTION_FOV_RADIUS
end

-- ===== Anti-AFK Logic =====
local VirtualUser = game:GetService("VirtualUser")
player.Idled:Connect(function()
    if antiAfkEnabled then
        VirtualUser:Button2Down(Vector2.new(0,0), camera.CFrame)
        wait(1)
        VirtualUser:Button2Up(Vector2.new(0,0), camera.CFrame)
    end
end)

-- ===== Main Loop =====
RunService.RenderStepped:Connect(function()
    -- Fly
    if flyEnabled then
        local hrp = player.Character and player.Character:FindFirstChild("HumanoidRootPart")
        local hum = player.Character and player.Character:FindFirstChildOfClass("Humanoid")
        if hrp and hum then
            local moveDir = Vector3.new(0,0,0)
            if UIS:IsKeyDown(Enum.KeyCode.W) then moveDir = moveDir + camera.CFrame.LookVector end
            if UIS:IsKeyDown(Enum.KeyCode.S) then moveDir = moveDir - camera.CFrame.LookVector end
            if UIS:IsKeyDown(Enum.KeyCode.A) then moveDir = moveDir - camera.CFrame.RightVector end
            if UIS:IsKeyDown(Enum.KeyCode.D) then moveDir = moveDir + camera.CFrame.RightVector end
            hrp.Velocity = moveDir.Unit * flySpeed
            hum.PlatformStand = true
        end
    else
        if player.Character and player.Character:FindFirstChildOfClass("Humanoid") then
            player.Character:FindFirstChildOfClass("Humanoid").PlatformStand = false
        end
    end

    -- Spin
    if spinEnabled and player.Character then
        local hrp = player.Character:FindFirstChild("HumanoidRootPart")
        if hrp then
            hrp.CFrame = hrp.CFrame * CFrame.Angles(0,math.rad(spinSpeed),0)
        end
    end

    -- Noclip walls only
    if noclipEnabled and player.Character then
        for _,part in ipairs(player.Character:GetDescendants()) do
            if part:IsA("BasePart") and part.CanCollide then
                part.Touched:Connect(function(hit)
                    if hit.CanCollide and hit.Position.Y > part.Position.Y then
                        part.CanCollide = false
                        wait(0.1)
                        part.CanCollide = true
                    end
                end)
            end
        end
    end
end)

Features & Information

this script was made by me shooter tab it has aimbot (does not shoot for you) it can predict enime landing spot general tab fly on/off noclip on/off spin on/off click to fling on/off anti afk on/off
#free#nub#bestscript

Community Comments (4)

pjvhubpjvhubJan 21, 2026

pls tell me if has bugs or works

keuuoikeuuoiJan 21, 2026

ok

Replying to @keuuoi
pjvhubpjvhubJan 21, 2026

@eop77 tell me when your done

pjvhubpjvhubJan 22, 2026

The fly did not work in V1 but know it does pls ask me for changes and updates

More Scripts for Universal Scripts