Pjv hub V3
Key RequiredUniversal

Pjv hub V3

Universal Scriptpjvhubpjvhub 557 views 24 executesUpdated Jan 22, 2026
Unrated
00
Lua Script•443 lines (12606 chars)
--==========================
-- PJV HUB (XENO OPTIMIZED) FULL SCRIPT WITH SERVER-VISIBLE FLY
--==========================

-- SERVICES
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local VirtualUser = game:GetService("VirtualUser")
local Workspace = game:GetService("Workspace")
local CoreGui = game:GetService("CoreGui")

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

--==========================
-- STATE
--==========================
local flyEnabled = false
local noclipEnabled = false
local spinEnabled = false
local camFollow = false
local antiAFKEnabled = false

local spectating = false
local spectateTarget = nil

local targetFPS = 60

local espEnabled = true
local aimAssistEnabled = true

local flySpeed = 50
local spinSpeed = 120

local playerESPToggles = {}

--==========================
-- LOADING SCREEN (~7 seconds)
--==========================
local loadingGui = Instance.new("ScreenGui")
loadingGui.Name = "PJVLoading"
loadingGui.Parent = CoreGui
loadingGui.ResetOnSpawn = false

local bg = Instance.new("Frame", loadingGui)
bg.Size = UDim2.new(1,0,1,0)
bg.BackgroundColor3 = Color3.fromRGB(20,20,20)
bg.BorderSizePixel = 0

local title = Instance.new("TextLabel", bg)
title.Size = UDim2.new(1,0,0,50)
title.Position = UDim2.new(0,0,0.4,0)
title.BackgroundTransparency = 1
title.Text = "Loading PJV Hub..."
title.TextScaled = true
title.TextColor3 = Color3.fromRGB(255,255,255)

local barFrame = Instance.new("Frame", bg)
barFrame.Size = UDim2.new(0.6,0,0,25)
barFrame.Position = UDim2.new(0.2,0,0.55,0)
barFrame.BackgroundColor3 = Color3.fromRGB(50,50,50)
barFrame.BorderSizePixel = 0

local bar = Instance.new("Frame", barFrame)
bar.Size = UDim2.new(0,0,1,0)
bar.BackgroundColor3 = Color3.fromRGB(0,170,255)
bar.BorderSizePixel = 0

--==========================
-- MAIN GUI (HIDDEN DURING LOADING)
--==========================
local gui = Instance.new("ScreenGui")
gui.Name = "DeltaPracticeUI"
gui.Parent = CoreGui
gui.ResetOnSpawn = false
gui.Enabled = false -- hidden until loading finishes

local panel = Instance.new("Frame", gui)
panel.Size = UDim2.new(0,280,0,420)
panel.Position = UDim2.new(0,40,0,40)
panel.BackgroundColor3 = Color3.fromRGB(0,0,0)
panel.BorderSizePixel = 0
panel.Active = true
panel.Draggable = true

-- Minimize
local minimized = false
local minBtn = Instance.new("TextButton", panel)
minBtn.Size = UDim2.new(0,30,0,30)
minBtn.Position = UDim2.new(1,-35,0,5)
minBtn.Text = "-"
minBtn.TextScaled = true
minBtn.BackgroundColor3 = Color3.fromRGB(40,40,40)

--==========================
-- TABS
--==========================
local tabs = {}
local content = Instance.new("Frame", panel)
content.Size = UDim2.new(1,-10,1,-50)
content.Position = UDim2.new(0,5,0,45)
content.BackgroundTransparency = 1

local function makeTab(name, x)
	local b = Instance.new("TextButton", panel)
	b.Size = UDim2.new(0,80,0,30)
	b.Position = UDim2.new(0,x,0,5)
	b.Text = name
	b.TextScaled = true
	b.BackgroundColor3 = Color3.fromRGB(50,50,50)
	b.TextColor3 = Color3.new(1,1,1)
	tabs[name] = b
	return b
end

makeTab("Shooter",10)
makeTab("General",95)
makeTab("Credits",180)
makeTab("Funny",265)

local frames = {}
local function makeFrame(name)
	local f = Instance.new("Frame", content)
	f.Name = name
	f.Size = UDim2.new(1,0,1,0)
	f.BackgroundTransparency = 1
	frames[name] = f
	return f
end

local shooterFrame = makeFrame("Shooter")
local generalFrame = makeFrame("General")
local creditsFrame = makeFrame("Credits")
local funnyFrame = makeFrame("Funny")

local function switch(tab)
	for n,f in pairs(frames) do
		f.Visible = (n==tab)
	end
end
switch("Shooter")

for n,b in pairs(tabs) do
	b.MouseButton1Click:Connect(function()
		switch(n)
	end)
end

--==========================
-- GENERAL TAB (Fly/Noclip/Spin/AntiAFK/Spectate)
--==========================
local function toggleBtn(txt,y,callback)
	local b = Instance.new("TextButton", generalFrame)
	b.Size = UDim2.new(1,-20,0,35)
	b.Position = UDim2.new(0,10,0,y)
	b.Text = txt..": OFF"
	b.TextScaled = true
	b.BackgroundColor3 = Color3.fromRGB(0,170,255)
	b.MouseButton1Click:Connect(function()
		callback(b)
	end)
end

toggleBtn("Fly",10,function(b)
	flyEnabled = not flyEnabled
	if not flyEnabled then
		pcall(function()
			local char = player.Character
			if char and char:FindFirstChild("Humanoid") then
				char.Humanoid.PlatformStand = false
			end
		end)
	end
	b.Text = "Fly: "..(flyEnabled and "ON" or "OFF")
end)

toggleBtn("Noclip",55,function(b)
	noclipEnabled = not noclipEnabled
	b.Text = "Noclip: "..(noclipEnabled and "ON" or "OFF")
end)

toggleBtn("Spin",100,function(b)
	spinEnabled = not spinEnabled
	b.Text = "Spin: "..(spinEnabled and "ON" or "OFF")
end)

toggleBtn("Anti-AFK",145,function(b)
	antiAFKEnabled = not antiAFKEnabled
	b.Text = "Anti-AFK: "..(antiAFKEnabled and "ON" or "OFF")
end)

-- Spectate / Teleport
local stopSpec = Instance.new("TextButton", generalFrame)
stopSpec.Position = UDim2.new(0,10,0,185)
stopSpec.Size = UDim2.new(1,-20,0,30)
stopSpec.Text = "STOP SPECTATING"
stopSpec.TextScaled = true
stopSpec.BackgroundColor3 = Color3.fromRGB(170,0,0)

stopSpec.MouseButton1Click:Connect(function()
	spectating = false
	spectateTarget = nil
	if player.Character and player.Character:FindFirstChild("Humanoid") then
		camera.CameraSubject = player.Character.Humanoid
	end
end)

local listHolder = Instance.new("Frame", generalFrame)
listHolder.Position = UDim2.new(0,10,0,225)
listHolder.Size = UDim2.new(1,-20,1,-235)
listHolder.BackgroundTransparency = 1

local layout = Instance.new("UIListLayout", listHolder)
layout.Padding = UDim.new(0,6)

-- Refresh Spectate list function
local function refreshSpectateList()
	for _,v in pairs(listHolder:GetChildren()) do
		if v:IsA("Frame") then v:Destroy() end
	end
	for _,plr in ipairs(Players:GetPlayers()) do
		if plr ~= player then
			local row = Instance.new("Frame", listHolder)
			row.Size = UDim2.new(1,0,0,42)
			row.BackgroundColor3 = Color3.fromRGB(40,40,40)
			row.BorderSizePixel = 0

			local img = Instance.new("ImageLabel", row)
			img.Size = UDim2.new(0,36,0,36)
			img.Position = UDim2.new(0,3,0,3)
			img.BackgroundTransparency = 1
			img.Image = "rbxthumb://type=AvatarHeadShot&id="..plr.UserId.."&w=150&h=150"

			local nameBtn = Instance.new("TextButton", row)
			nameBtn.Position = UDim2.new(0,45,0,0)
			nameBtn.Size = UDim2.new(1,-95,1,0)
			nameBtn.Text = plr.Name
			nameBtn.TextScaled = true
			nameBtn.BackgroundTransparency = 1
			nameBtn.TextColor3 = Color3.new(1,1,1)

			nameBtn.MouseButton1Click:Connect(function()
				pcall(function()
					if plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") then
						player.Character.HumanoidRootPart.CFrame =
							plr.Character.HumanoidRootPart.CFrame * CFrame.new(0,0,-3)
					end
				end)
			end)

			local eye = Instance.new("TextButton", row)
			eye.Size = UDim2.new(0,36,0,36)
			eye.Position = UDim2.new(1,-40,0,3)
			eye.Text = "👁"
			eye.TextScaled = true
			eye.BackgroundColor3 = Color3.fromRGB(0,170,255)

			eye.MouseButton1Click:Connect(function()
				spectating = true
				spectateTarget = plr
				camera.CameraType = Enum.CameraType.Custom
			end)
		end
	end
end

refreshSpectateList()
Players.PlayerAdded:Connect(refreshSpectateList)
Players.PlayerRemoving:Connect(refreshSpectateList)

--==========================
-- SERVER-VISIBLE FLY
--==========================
RunService.Stepped:Connect(function()
	pcall(function()
		if not flyEnabled then return end
		local char = player.Character
		if not char or not char:FindFirstChild("HumanoidRootPart") or not char:FindFirstChild("Humanoid") then return end
		local hrp = char.HumanoidRootPart
		local hum = char.Humanoid

		local moveDir = Vector3.zero
		if UIS:IsKeyDown(Enum.KeyCode.W) then moveDir += camera.CFrame.LookVector end
		if UIS:IsKeyDown(Enum.KeyCode.S) then moveDir -= camera.CFrame.LookVector end
		if UIS:IsKeyDown(Enum.KeyCode.A) then moveDir -= camera.CFrame.RightVector end
		if UIS:IsKeyDown(Enum.KeyCode.D) then moveDir += camera.CFrame.RightVector end
		if UIS:IsKeyDown(Enum.KeyCode.Space) then moveDir += Vector3.new(0,1,0) end
		if UIS:IsKeyDown(Enum.KeyCode.LeftShift) then moveDir -= Vector3.new(0,1,0) end

		if moveDir.Magnitude > 0 then
			moveDir = moveDir.Unit * flySpeed * RunService.RenderStepped:Wait()
			hrp.CFrame = hrp.CFrame + moveDir
		end

		hum.PlatformStand = true
	end)
end)

--==========================
-- MINIMIZE
--==========================
minBtn.MouseButton1Click:Connect(function()
	minimized = not minimized
	content.Visible = not minimized
	panel.Size = minimized and UDim2.new(0,280,0,40) or UDim2.new(0,280,0,420)
end)

--==========================
-- SHOOTER TAB: ESP + AIM ASSIST
--==========================
RunService.RenderStepped:Connect(function()
	pcall(function()
		local closest = nil
		local closestDist = math.huge

		for _,plr in ipairs(Players:GetPlayers()) do
			if plr ~= player and plr.Character and plr.Character:FindFirstChild("HumanoidRootPart") then
				local hrp = plr.Character.HumanoidRootPart

				if playerESPToggles[plr] == nil then playerESPToggles[plr] = true end

				if playerESPToggles[plr] and espEnabled then
					local ray = Workspace:Raycast(camera.CFrame.Position, (hrp.Position - camera.CFrame.Position), {player.Character})
					local color = ray and ray.Instance ~= hrp and Color3.fromRGB(255,0,0) or Color3.fromRGB(0,255,0)

					if not hrp:FindFirstChild("ESPBox") then
						local box = Instance.new("BillboardGui", hrp)
						box.Name = "ESPBox"
						box.Adornee = hrp
						box.Size = UDim2.new(0,50,0,50)
						box.AlwaysOnTop = true

						local frame = Instance.new("Frame", box)
						frame.Size = UDim2.new(1,0,1,0)
						frame.BorderSizePixel = 2
						frame.BackgroundTransparency = 1
						frame.BorderColor3 = color
					else
						hrp.ESPBox.Frame.BorderColor3 = color
					end

				else
					if hrp:FindFirstChild("ESPBox") then hrp.ESPBox:Destroy() end
				end

				if aimAssistEnabled then
					local dist = (hrp.Position - camera.CFrame.Position).Magnitude
					if dist < closestDist then
						closestDist = dist
						closest = plr
					end
				end
			end
		end

		if aimAssistEnabled and closest and closest.Character and closest.Character:FindFirstChild("HumanoidRootPart") then
			camera.CFrame = CFrame.new(camera.CFrame.Position, closest.Character.HumanoidRootPart.Position)
		end
	end)
end)

--==========================
-- FUNNY TAB: FPS LIMITER
--==========================
local fpsFrame = Instance.new("Frame", funnyFrame)
fpsFrame.Size = UDim2.new(1,-20,0,50)
fpsFrame.Position = UDim2.new(0,10,0,10)
fpsFrame.BackgroundColor3 = Color3.fromRGB(30,30,30)

local fpsLabel = Instance.new("TextLabel", fpsFrame)
fpsLabel.Size = UDim2.new(0.6,0,1,0)
fpsLabel.Position = UDim2.new(0,5,0,0)
fpsLabel.Text = "FPS: "..targetFPS
fpsLabel.TextScaled = true
fpsLabel.BackgroundTransparency = 1
fpsLabel.TextColor3 = Color3.new(1,1,1)

local fpsInput = Instance.new("TextBox", fpsFrame)
fpsInput.Size = UDim2.new(0.35,0,0.6,0)
fpsInput.Position = UDim2.new(0.6,0,0.2,0)
fpsInput.PlaceholderText = "4-999"
fpsInput.Text = tostring(targetFPS)
fpsInput.ClearTextOnFocus = false
fpsInput.TextScaled = true

fpsInput.FocusLost:Connect(function(enterPressed)
	local value = tonumber(fpsInput.Text)
	if value and value >=4 and value <=999 then
		targetFPS = value
		fpsLabel.Text = "FPS: "..targetFPS
	else
		fpsInput.Text = tostring(targetFPS)
	end
end)

task.spawn(function()
	while true do
		task.wait(1/targetFPS)
	end
end)

--==========================
-- ANTI AFK
--==========================
player.Idled:Connect(function()
	if antiAFKEnabled then
		pcall(function()
			VirtualUser:Button2Down(Vector2.new(),camera.CFrame)
			task.wait(1.2)
			VirtualUser:Button2Up(Vector2.new(),camera.CFrame)
		end)
	end
end)

--==========================
-- CREDITS
--==========================
local cr = Instance.new("TextLabel", creditsFrame)
cr.Size = UDim2.new(1,0,1,0)
cr.Text = "Credits: PJV"
cr.TextScaled = true
cr.BackgroundTransparency = 1
cr.TextColor3 = Color3.new(1,1,1)

--==========================
-- FINISH LOADING
--==========================
local loadTime = 7
local startTime = tick()
task.spawn(function()
	while tick() - startTime < loadTime do
		local progress = (tick() - startTime)/loadTime
		bar.Size = UDim2.new(progress,0,1,0)
		task.wait(0.03)
	end
	bar.Size = UDim2.new(1,0,1,0)
	task.wait(0.2)
	loadingGui:Destroy()
	gui.Enabled = true
end)

Features & Information

This hub lets you Fly Noclip Fling Aimbot And much more
#free#Hub

Community Comments (1)

pjvhubpjvhubJan 22, 2026

Pls tell me if there is any bugs and this is mostly for xeno executor

More Scripts for Universal Scripts