-- ======================================================= -- 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