NO KEY ESP SPEED IMMORTALITY AND MORE pa hub
Key Required

NO KEY ESP SPEED IMMORTALITY AND MORE pa hub

Experience AbstractionUserscritUserscrit 112 views 1.2K executesUpdated Jul 25, 2026
Unrated
00
Lua Script•588 lines (20564 chars)
-- =======================================================
-- PA HUB (GATEWAY & MAIN SYSTEM) - PUBLIC ENGLISH EDITION
-- =======================================================
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local SoundService = game:GetService("SoundService")
local HttpService = game:GetService("HttpService")
local UserInputService = game:GetService("UserInputService")
local ProximityPromptService = game:GetService("ProximityPromptService")
local TextChatService = game:GetService("TextChatService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local CoreGui = game:GetService("CoreGui")

local player = Players.LocalPlayer
local Camera = workspace.CurrentCamera

-- CLEANUP PREVIOUS INTERFACES
if CoreGui:FindFirstChild("FabiHUD") then CoreGui.FabiHUD:Destroy() end
if CoreGui:FindFirstChild("PaHubGateway") then CoreGui.PaHubGateway:Destroy() end

-- =======================================================
-- GATEWAY SCREEN (YOUTUBE SUBSCRIPTION VERIFICATION)
-- =======================================================
local GatewayGui = Instance.new("ScreenGui", CoreGui)
GatewayGui.Name = "PaHubGateway"
GatewayGui.ResetOnSpawn = false

local GatewayFrame = Instance.new("Frame", GatewayGui)
GatewayFrame.Size = UDim2.new(0, 340, 0, 220)
GatewayFrame.Position = UDim2.new(0.5, -170, 0.5, -110)
GatewayFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
GatewayFrame.BorderSizePixel = 0
GatewayFrame.Active = true
GatewayFrame.Draggable = true

local GatewayCorner = Instance.new("UICorner", GatewayFrame)
GatewayCorner.CornerRadius = UDim.new(0, 8)

local GatewayTitle = Instance.new("TextLabel", GatewayFrame)
GatewayTitle.Size = UDim2.new(1, 0, 0, 45)
GatewayTitle.Text = "PA HUB - Verification Required"
GatewayTitle.TextColor3 = Color3.fromRGB(240, 240, 240)
GatewayTitle.TextSize = 16
GatewayTitle.Font = Enum.Font.SourceSansBold
GatewayTitle.BackgroundTransparency = 1

local GatewayDesc = Instance.new("TextLabel", GatewayFrame)
GatewayDesc.Size = UDim2.new(0.9, 0, 0, 35)
GatewayDesc.Position = UDim2.new(0.05, 0, 0.22, 0)
GatewayDesc.Text = "Click 'Go to YouTube Channel' first to copy the link and start the unlock timer."
GatewayDesc.TextColor3 = Color3.fromRGB(180, 180, 180)
GatewayDesc.TextSize = 13
GatewayDesc.Font = Enum.Font.SourceSans
GatewayDesc.BackgroundTransparency = 1
GatewayDesc.TextWrapped = true

local YTBtn = Instance.new("TextButton", GatewayFrame)
YTBtn.Size = UDim2.new(0.85, 0, 0, 35)
YTBtn.Position = UDim2.new(0.075, 0, 0.42, 0)
YTBtn.BackgroundColor3 = Color3.fromRGB(180, 40, 40)
YTBtn.Text = "Go to YouTube Channel"
YTBtn.TextColor3 = Color3.fromRGB(240, 240, 240)
YTBtn.TextSize = 15
YTBtn.Font = Enum.Font.SourceSansBold
Instance.new("UICorner", YTBtn).CornerRadius = UDim.new(0, 6)

local AccessBtn = Instance.new("TextButton", GatewayFrame)
AccessBtn.Size = UDim2.new(0.85, 0, 0, 40)
AccessBtn.Position = UDim2.new(0.075, 0, 0.68, 0)
AccessBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
AccessBtn.Text = "Click YouTube Link First..."
AccessBtn.TextColor3 = Color3.fromRGB(170, 170, 170)
AccessBtn.TextSize = 15
AccessBtn.Font = Enum.Font.SourceSansBold
AccessBtn.AutoButtonColor = false
Instance.new("UICorner", AccessBtn).CornerRadius = UDim.new(0, 6)

local verified = false
local timerStarted = false

YTBtn.MouseButton1Click:Connect(function()
    local ytLink = "https://youtube.com/@albiroja_edit?si=GN4T0zn8U-ZvVDzK"
    if setclipboard then
        setclipboard(ytLink)
        YTBtn.Text = "Link Copied! Go Subscribe!"
    else
        YTBtn.Text = "Link: youtube.com/@albiroja_edit"
    end

    if not timerStarted then
        timerStarted = true
        task.spawn(function()
            for i = 10, 1, -1 do
                AccessBtn.Text = "Wait " .. i .. " seconds..."
                task.wait(1)
            end
            AccessBtn.Text = "Unlock Pa Hub"
            AccessBtn.BackgroundColor3 = Color3.fromRGB(35, 160, 70)
            AccessBtn.TextColor3 = Color3.fromRGB(240, 240, 240)
            AccessBtn.AutoButtonColor = true
            verified = true
        end)
    end
end)

AccessBtn.MouseButton1Click:Connect(function()
    if verified then
        GatewayGui:Destroy()
        LoadMainPaHub()
    end
end)

-- =======================================================
-- MAIN PA HUB INITIALIZATION FUNCTION
-- =======================================================
function LoadMainPaHub()

-- Global State Variables
_G.Speed = 16
_G.Insta = false
_G.Jump = false
_G.ESPActive = false
_G.SavedPosition = nil

-- Circus Coordinates for Immortality
local CoordsInmortal = Vector3.new(-153.576538, 169.695557, -267.119263)

-- Audio Variables
local CurrentSound = nil

-- CONFIG FOLDER
local CONFIG_FOLDER = "PaHubConfigs"
if makefolder and not isfolder(CONFIG_FOLDER) then 
    pcall(function() makefolder(CONFIG_FOLDER) end) 
end

-- =======================================================
-- RAYFIELD GUI INTERFACE
-- =======================================================
local Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))()

local Window = Rayfield:CreateWindow({
   Name = "Pa Hub",
   LoadingTitle = "Loading Pa Hub...", 
   LoadingSubtitle = "Experience / Abstraction",
   Theme = "Default",
   DisableRayfieldPrompts = true,
   DisableBuildWarnings = true,
   ConfigurationSaving = {
      Enabled = true,
      FolderName = "PaHubConfigs",
      FileName = "LastSession"
   },
   Discord = { Enabled = false }
})

Rayfield:Notify({
   Title = "Pa Hub Loaded!",
   Content = "No Key System, No Ads. Enjoy the Hub!",
   Duration = 4
})

-- =======================================================
-- TAB 1: MAIN MOVEMENT, ESP & SPECTATE
-- =======================================================
local TabMain = Window:CreateTab("Main", nil)

TabMain:CreateSection("Movement & Interactions", true)

-- WalkSpeed
local S_Speed = TabMain:CreateSlider({
   Name = "WalkSpeed", 
   Range = {16, 200}, 
   Increment = 1, 
   CurrentValue = 16, 
   Callback = function(v) _G.Speed = v end
})

-- Infinite Jump
local T_Jump = TabMain:CreateToggle({
   Name = "Infinite Jump", 
   CurrentValue = false, 
   Callback = function(v) _G.Jump = v end
})

-- Instant Interact
local T_Insta = TabMain:CreateToggle({
   Name = "Instant Interact (Manual)", 
   CurrentValue = false, 
   Callback = function(v) _G.Insta = v end
})

TabMain:CreateSection("Visuals & ESP", true)

-- ESP Toggle (Green with Chams)
local T_ESP = TabMain:CreateToggle({
   Name = "ESP Player Names & Chams (Green)",
   CurrentValue = false,
   Callback = function(v)
      _G.ESPActive = v
      if not v then
         for _, p in pairs(Players:GetPlayers()) do
            if p.Character then
               if p.Character:FindFirstChild("GreenChams") then
                  p.Character.GreenChams:Destroy()
               end
               if p.Character:FindFirstChild("Head") and p.Character.Head:FindFirstChild("NameESP") then
                  p.Character.Head.NameESP:Destroy()
               end
            end
         end
      end
   end
})

TabMain:CreateSection("Player Spectate", true)

local function GetPlayerList()
    local list = {"None (Reset)"}
    for _, p in pairs(Players:GetPlayers()) do
        if p ~= player then
            table.insert(list, p.Name)
        end
    end
    return list
end

local DropdownSpectate = TabMain:CreateDropdown({
   Name = "Spectate Player",
   Options = GetPlayerList(),
   CurrentOption = {"None (Reset)"},
   MultipleOptions = false,
   Callback = function(Option)
      local targetName = Option[1]
      if targetName == "None (Reset)" or not targetName then
          if player.Character and player.Character:FindFirstChild("Humanoid") then
              Camera.CameraSubject = player.Character.Humanoid
          end
      else
          local targetPlayer = Players:FindFirstChild(targetName)
          if targetPlayer and targetPlayer.Character and targetPlayer.Character:FindFirstChild("Humanoid") then
              Camera.CameraSubject = targetPlayer.Character.Humanoid
          end
      end
   end,
})

-- =======================================================
-- TAB 2: SURVIVOR, WAYPOINTS & CAINE
-- =======================================================
local TabInmortal = Window:CreateTab("Survivor", nil)

TabInmortal:CreateSection("Immortality Process", true)

TabInmortal:CreateParagraph({
   Title = "Immortality Guide",
   Content = "First you have to get distracted, then you have to make Caine send you to the basement, then activate the immortality option, you will be teleported to the circus and now you will be immortal."
})

TabInmortal:CreateButton({
   Name = "Immortality (Teleport to Circus)",
   Callback = function()
      local char = player.Character
      local root = char and char:FindFirstChild("HumanoidRootPart")
      if root then
          root.CFrame = CFrame.new(CoordsInmortal)
          Rayfield:Notify({Title = "Immortality", Content = "Teleported to the Circus successfully!", Duration = 3})
      end
   end
})

TabInmortal:CreateSection("Saved Waypoint System", true)

TabInmortal:CreateButton({
   Name = "Save Current Position",
   Callback = function()
      local char = player.Character
      local root = char and char:FindFirstChild("HumanoidRootPart")
      if root then
          _G.SavedPosition = root.CFrame
          Rayfield:Notify({Title = "Saved", Content = "New position saved successfully.", Duration = 3})
      end
   end
})

TabInmortal:CreateButton({
   Name = "Teleport to Point",
   Callback = function()
      local char = player.Character
      local root = char and char:FindFirstChild("HumanoidRootPart")
      if root then
          if _G.SavedPosition then
              root.CFrame = _G.SavedPosition
              Rayfield:Notify({Title = "Teleport", Content = "Returned to saved point!", Duration = 3})
          else
              Rayfield:Notify({Title = "No Position", Content = "Please save a position first.", Duration = 3})
          end
      end
   end
})

local T_TpBtn = TabInmortal:CreateToggle({
   Name = "Floating Teleport Button",
   CurrentValue = false,
   Callback = function(v)
      if _G.TpBtn then
          _G.TpBtn.Visible = v
      end
   end
})

TabInmortal:CreateSection("Call Caine (Floating Button)", true)

TabInmortal:CreateParagraph({
   Title = "Caine Summoner",
   Content = "It creates a floating button that, when pressed, will automatically call Caine, typing \"caine\" automatically in the chat."
})

local T_CaineBtn = TabInmortal:CreateToggle({
   Name = "Toggle Caine Button",
   CurrentValue = false,
   Callback = function(v)
      if _G.CaineBtn then
          _G.CaineBtn.Visible = v
      end
   end
})

-- =======================================================
-- TAB 3: MUSIC PLAYER
-- =======================================================
local TabMusic = Window:CreateTab("Music Player", nil)
TabMusic:CreateSection("Audio Settings", true)

local InputAudioID = "124956832051872"
TabMusic:CreateInput({
   Name = "Enter Music ID",
   PlaceholderText = "124956832051872",
   RemoveTextAfterFocusLost = false,
   Callback = function(text) 
      if text and text ~= "" then
         InputAudioID = text 
      end
   end,
})

TabMusic:CreateButton({
   Name = "Play Music",
   Callback = function()
      if CurrentSound then CurrentSound:Stop(); CurrentSound:Destroy(); CurrentSound = nil end
      local success, err = pcall(function()
         CurrentSound = Instance.new("Sound")
         CurrentSound.SoundId = "rbxassetid://" .. InputAudioID
         CurrentSound.Volume = 1
         CurrentSound.Looped = true
         CurrentSound.Parent = SoundService
         CurrentSound:Play()
      end)
      if success then
          Rayfield:Notify({Title = "Audio Playing...", Content = "Playing ID: " .. InputAudioID, Duration = 3})
      else
          Rayfield:Notify({Title = "Audio Error", Content = "Invalid ID.", Duration = 3})
      end
   end
})

TabMusic:CreateButton({
   Name = "Stop Music", 
   Callback = function() 
      if CurrentSound then CurrentSound:Stop(); CurrentSound:Destroy(); CurrentSound = nil end 
   end
})

-- =======================================================
-- TAB 4: CONFIGS
-- =======================================================
local TabConfigs = Window:CreateTab("Settings", nil)
TabConfigs:CreateSection("Custom Configuration", true)

local ConfigNameInput = "default"
TabConfigs:CreateInput({
   Name = "Config Name",
   PlaceholderText = "Type a name...",
   RemoveTextAfterFocusLost = false,
   Callback = function(text) ConfigNameInput = text end,
})

TabConfigs:CreateButton({
   Name = "Save Current Settings",
   Callback = function()
      if writefile then
          local data = {
              Speed = _G.Speed,
              Insta = _G.Insta,
              Jump = _G.Jump
          }
          local success = pcall(function()
              writefile(CONFIG_FOLDER .. "/" .. ConfigNameInput .. ".json", HttpService:JSONEncode(data))
          end)
          if success then
              Rayfield:Notify({Title = "Saved", Content = "Configuration saved successfully.", Duration = 3})
          else
              Rayfield:Notify({Title = "Error", Content = "Could not save settings.", Duration = 3})
          end
      end
   end
})

TabConfigs:CreateButton({
   Name = "Load Settings",
   Callback = function()
      if readfile and isfile then
          local path = CONFIG_FOLDER .. "/" .. ConfigNameInput .. ".json"
          if isfile(path) then
              local success, content = pcall(function() return readfile(path) end)
              if success then
                  local decoded = HttpService:JSONDecode(content)
                  if decoded.Speed ~= nil then S_Speed:Set(decoded.Speed); _G.Speed = decoded.Speed end
                  if decoded.Insta ~= nil then T_Insta:Set(decoded.Insta); _G.Insta = decoded.Insta end
                  if decoded.Jump ~= nil then T_Jump:Set(decoded.Jump); _G.Jump = decoded.Jump end
                  Rayfield:Notify({Title = "Loaded", Content = "Settings applied successfully.", Duration = 3})
              end
          else
              Rayfield:Notify({Title = "Not Found", Content = "Configuration file does not exist.", Duration = 3})
          end
      end
   end
})

-- =======================================================
-- FLOATING BUTTONS (CLEAN STYLE, MATCHING FONTS)
-- =======================================================
local ScreenGui = Instance.new("ScreenGui", CoreGui)
ScreenGui.Name = "FabiHUD"
ScreenGui.ResetOnSpawn = false

-- 1. FLOATING CAINE BUTTON
local function EnviarMensajeCaineDirecto()
    pcall(function()
        if TextChatService.ChatVersion == Enum.ChatVersion.TextChatService then
            local textChannel = TextChatService.TextChannels.RBXGeneral
            if textChannel then textChannel:SendAsync("caine") end
        else
            ReplicatedStorage.DefaultChatSystemChatEvents.SayMessageRequest:FireServer("caine", "All")
        end
    end)
end

local CaineBtn = Instance.new("TextButton", ScreenGui)
CaineBtn.Name = "CaineBtn"
CaineBtn.Size = UDim2.new(0, 55, 0, 55)
CaineBtn.Position = UDim2.new(0.85, 0, 0.4, 0)
CaineBtn.BackgroundColor3 = Color3.fromRGB(180, 40, 40)
CaineBtn.BackgroundTransparency = 0.15
CaineBtn.Text = "Caine"
CaineBtn.TextSize = 14
CaineBtn.TextColor3 = Color3.fromRGB(240, 240, 240)
CaineBtn.Font = Enum.Font.SourceSansBold
CaineBtn.Visible = false 
CaineBtn.Active = true
CaineBtn.Draggable = true 

Instance.new("UICorner", CaineBtn).CornerRadius = UDim.new(1, 0)
_G.CaineBtn = CaineBtn

CaineBtn.MouseButton1Click:Connect(function()
    CaineBtn.BackgroundColor3 = Color3.fromRGB(35, 160, 70)
    task.delay(0.4, function() CaineBtn.BackgroundColor3 = Color3.fromRGB(180, 40, 40) end)
    EnviarMensajeCaineDirecto()
end)

-- 2. FLOATING TELEPORT BUTTON
local function TeletransportarAPuntoGuardado()
    local char = player.Character
    local root = char and char:FindFirstChild("HumanoidRootPart")
    if root then
        if _G.SavedPosition then
            root.CFrame = _G.SavedPosition
            Rayfield:Notify({Title = "Teleport", Content = "Teleported!", Duration = 2})
        else
            Rayfield:Notify({Title = "No Position", Content = "Save a position first.", Duration = 2})
        end
    end
end

local TpBtn = Instance.new("TextButton", ScreenGui)
TpBtn.Name = "TpBtn"
TpBtn.Size = UDim2.new(0, 55, 0, 55)
TpBtn.Position = UDim2.new(0.85, 0, 0.52, 0)
TpBtn.BackgroundColor3 = Color3.fromRGB(40, 100, 180)
TpBtn.BackgroundTransparency = 0.15
TpBtn.Text = "TP"
TpBtn.TextSize = 16
TpBtn.TextColor3 = Color3.fromRGB(240, 240, 240)
TpBtn.Font = Enum.Font.SourceSansBold
TpBtn.Visible = false 
TpBtn.Active = true
TpBtn.Draggable = true 

Instance.new("UICorner", TpBtn).CornerRadius = UDim.new(1, 0)
_G.TpBtn = TpBtn

TpBtn.MouseButton1Click:Connect(function()
    TpBtn.BackgroundColor3 = Color3.fromRGB(35, 160, 70)
    task.delay(0.3, function() TpBtn.BackgroundColor3 = Color3.fromRGB(40, 100, 180) end)
    TeletransportarAPuntoGuardado()
end)

-- =======================================================
-- MOTORS (OPTIMIZED LOOPS EVERY 5 SECONDS)
-- =======================================================
ProximityPromptService.PromptShown:Connect(function(prompt)
    if _G.Insta then prompt.HoldDuration = 0 end
end)

task.spawn(function()
    while task.wait(5) do
        if _G.Insta then
            for _, prompt in pairs(workspace:GetDescendants()) do
                if prompt:IsA("ProximityPrompt") and prompt.HoldDuration > 0 then
                    prompt.HoldDuration = 0
                end
            end
        end
    end
end)

task.spawn(function()
    while task.wait(5) do
        if _G.ESPActive then
            for _, p in pairs(Players:GetPlayers()) do
                if p ~= player and p.Character then
                    local char = p.Character
                    local head = char:FindFirstChild("Head")
                    local hum = char:FindFirstChildOfClass("Humanoid")
                    
                    if head and hum and hum.Health > 0 then
                        if not char:FindFirstChild("GreenChams") then
                            local highlight = Instance.new("Highlight")
                            highlight.Name = "GreenChams"
                            highlight.Adornee = char
                            highlight.FillColor = Color3.fromRGB(0, 255, 100)
                            highlight.FillTransparency = 0.5
                            highlight.OutlineColor = Color3.fromRGB(240, 240, 240)
                            highlight.OutlineTransparency = 0.2
                            highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
                            highlight.Parent = char
                        end

                        if not head:FindFirstChild("NameESP") then
                            local billboard = Instance.new("BillboardGui")
                            billboard.Name = "NameESP"
                            billboard.AlwaysOnTop = true
                            billboard.Size = UDim2.new(0, 80, 0, 20)
                            billboard.StudsOffset = Vector3.new(0, 2, 0)
                            billboard.Parent = head

                            local text = Instance.new("TextLabel")
                            text.Parent = billboard
                            text.BackgroundTransparency = 1
                            text.Size = UDim2.new(1, 0, 1, 0)
                            text.Text = p.DisplayName
                            text.TextColor3 = Color3.fromRGB(50, 255, 100)
                            text.TextStrokeTransparency = 0
                            text.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
                            text.TextScaled = true
                            text.Font = Enum.Font.SourceSansBold
                         end
                    end
                end
            end
        end
    end
end)

UserInputService.JumpRequest:Connect(function() 
    if _G.Jump and player.Character and player.Character:FindFirstChildOfClass("Humanoid") then 
        player.Character:FindFirstChildOfClass("Humanoid"):ChangeState(Enum.HumanoidStateType.Jumping) 
    end 
end)

RunService.RenderStepped:Connect(function()
    local char = player.Character; if not char then return end
    local hum = char:FindFirstChildOfClass("Humanoid")
    if hum then hum.WalkSpeed = _G.Speed end
end)

end

Features & Information

Walk speed ESP IMMORTALITY AUTOMATICALLY CALL CAINE
#Delta

Community Comments (0)

No comments yet for this script.

More Scripts for Experience Abstraction