WALL HOP
Key RequiredUniversal

WALL HOP

Universal ScriptLONELY_HUBLONELY_HUB 597 views 2.8K executesUpdated Oct 7, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•31 lines (4942 chars)
local P,US,RS,TS,WS,CG=game:GetService("Players"),game:GetService("UserInputService"),game:GetService("RunService"),game:GetService("TweenService"),game:GetService("Workspace"),game:GetService("CoreGui")
local plr,en,lck,lJT=P.LocalPlayer,false,false,0
local S={CD=0.33,JV=61,PD=true,VF=true}
pcall(function()CG.WallhopGUI:Destroy()end)pcall(function()plr.PlayerGui.WallhopGUI:Destroy()end)
local sg=Instance.new("ScreenGui",pcall(function()return CG end)and CG or plr.PlayerGui)sg.Name,sg.ResetOnSpawn,sg.ZIndexBehavior,sg.IgnoreGuiInset="WallhopGUI",false,Enum.ZIndexBehavior.Sibling,true
local f=Instance.new("Frame",sg)f.Size,f.Position,f.BackgroundTransparency,f.BorderSizePixel=UDim2.new(0,60,0,60),UDim2.new(0.5,-30,0.2,0),1,0
Instance.new("UICorner",f).CornerRadius=UDim.new(1,0)
local st=Instance.new("UIStroke",f)st.Color,st.Thickness=Color3.new(1,1,1),1.5
local tg=Instance.new("TextButton",f)tg.Size,tg.BackgroundTransparency,tg.Text=UDim2.new(1,0,1,0),1,""
Instance.new("UICorner",tg).CornerRadius=UDim.new(1,0)
local sL=Instance.new("TextLabel",f)sL.Size,sL.BackgroundTransparency,sL.Text,sL.TextColor3,sL.TextSize,sL.Font=UDim2.new(1,0,1,0),1,"OFF",Color3.new(1,1,1),10,Enum.Font.GothamBold
local lB=Instance.new("TextButton",f)lB.Size,lB.Position,lB.BackgroundTransparency,lB.Text,lB.TextColor3,lB.TextSize,lB.Font=UDim2.new(0,18,0,18),UDim2.new(0.5,-9,1,4),1,"×",Color3.new(1,1,1),14,Enum.Font.GothamBold
local tF=Instance.new("Folder",f)tF.Name="CT"local tL={}
local function sCT()
tF:ClearAllChildren()table.clear(tL)local txt,rad,aS="WALL HOP",37,math.rad(11.5)local chars={}for i=1,#txt do chars[i]=txt:sub(i,i)end
local startA=-((#chars-1)/2)*aS
for i,c in ipairs(chars)do if c~=" " then local a=startA+(i-1)*aS local lb=Instance.new("TextLabel",tF)lb.Size,lb.BackgroundTransparency,lb.Text,lb.TextSize,lb.Font,lb.Rotation=UDim2.new(0,12,0,12),1,c,9,Enum.Font.GothamBold,math.deg(a)lb.Position=UDim2.new(0,30+rad*math.sin(a)-6,0,30-rad*math.cos(a)-6)tL[#tL+1]=lb end end
end
sCT()
RS.Heartbeat:Connect(function()local bH=(tick()*0.25)%1 for i,l in ipairs(tL)do l.TextColor3=Color3.fromHSV((bH+i*0.07)%1,1,1)end end)
local dH=Instance.new("TextButton",f)dH.Size,dH.Position,dH.BackgroundTransparency,dH.Text=UDim2.new(0,80,0,40),UDim2.new(0.5,-40,0,-38),1,""
local drg,dS,sP dH.InputBegan:Connect(function(inp)if not lck and(inp.UserInputType==Enum.UserInputType.Touch or inp.UserInputType==Enum.UserInputType.MouseButton1)then drg,dS,sP=true,inp.Position,f.Position inp.Changed:Connect(function()if inp.UserInputState==Enum.UserInputState.End then drg=false end end)end end)
US.InputChanged:Connect(function(inp)if drg and not lck and(inp.UserInputType==Enum.UserInputType.Touch or inp.UserInputType==Enum.UserInputType.MouseMovement)then local d=inp.Position-dS f.Position=UDim2.new(sP.X.Scale,sP.X.Offset+d.X,sP.Y.Scale,sP.Y.Offset+d.Y)end end)
lB.MouseButton1Click:Connect(function()lck=not lck lB.TextColor3=lck and Color3.fromRGB(255,60,60)or Color3.new(1,1,1)end)
tg.MouseButton1Click:Connect(function()en=not en sL.Text=en and"ON"or"OFF"end)
local fFr=Instance.new("Frame",sg)fFr.Size,fFr.BackgroundColor3,fFr.BackgroundTransparency,fFr.ZIndex=UDim2.new(1,0,1,0),Color3.new(1,1,1),1,100
local op=OverlapParams.new()
local function gCC(ch,rt)if not rt then return 0 end op.FilterType,op.FilterDescendantsInstances=Enum.RaycastFilterType.Exclude,{ch}local cnt=0 for _,p in ipairs(WS:GetPartBoundsInBox(rt.CFrame*CFrame.new(0,-1.6,0),Vector3.new(3.8,3.2,3.8),op))do if p.CanCollide then cnt+=1 end end return cnt end
local function gWN(ch,rt)local rp=RaycastParams.new()rp.FilterType,rp.FilterDescendantsInstances,rp.IgnoreWater=Enum.RaycastFilterType.Exclude,{ch},true local dirs={rt.CFrame.RightVector,-rt.CFrame.RightVector,rt.CFrame.LookVector,-rt.CFrame.LookVector}local bN,bD=nil,math.huge for _,d in ipairs(dirs)do local res=WS:Raycast(rt.Position,d*3.5,rp)if res and res.Instance and res.Instance.CanCollide and res.Distance<bD then bD,bN=res.Distance,res.Normal end end return bN end
RS.Heartbeat:Connect(function()if not en then return end local ch=plr.Character local hum,rt=ch and ch:FindFirstChildOfClass("Humanoid"),ch and ch:FindFirstChild("HumanoidRootPart")if not hum or not rt or not hum.Jump or tick()-lJT<S.CD or(S.PD and gCC(ch,rt)<2)then return end local wN=gWN(ch,rt)if not wN then return end lJT=tick()local wD=Vector3.new(-wN.Z,0,wN.X)if wD.Magnitude>=0.01 then wD=wD.Unit local hV=Vector3.new(rt.AssemblyLinearVelocity.X,0,rt.AssemblyLinearVelocity.Z)if hV.Magnitude>0.1 and hV:Dot(wD)<0 then wD=-wD end local hS=math.max(hV.Magnitude,8)rt.AssemblyLinearVelocity=Vector3.new(wD.X*hS,S.JV,wD.Z*hS)rt.CFrame=CFrame.lookAt(rt.Position,rt.Position+wD)if S.VF then TS:Create(fFr,TweenInfo.new(0.08),{BackgroundTransparency=0.92}):Play()task.delay(0.1,function()TS:Create(fFr,TweenInfo.new(0.2),{BackgroundTransparency=1}):Play()end)end end end)
plr.CharacterRemoving:Connect(function()lJT=0 end)

Features & Information

l tried it in several games, especially one that bans you for using a wall hop script, and it is not detectable—at least I think so. It is the best realistic wall hop so far. "It only officially supports mobile since it's a floating bubble with an 'X' to close it. It might work on PC because it just needs the bypass, but I can't say for sure, though I'll repeat that the HUB is quite small."

Community Comments (1)

LONELY_HUBLONELY_HUBOct 13, 2026

Unlike many wall-hop scripts, this one has no jump limits and no wall-detection errors; the only issue is the one I mentioned above. I will keep working on this script to deliver the best and most realistic experience, and the next update will be PC-compatible.

More Scripts for Universal Scripts