-- SERVICES local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Workspace = game:GetService("Workspace") -- REFERENCES local LocalPlayer = Players.LocalPlayer local Camera = Workspace.CurrentCamera -- CREATE GUI local ScreenGui = Instance.new("ScreenGui", LocalPlayer:WaitForChild("PlayerGui")) ScreenGui.Name = "WallhopUI" ScreenGui.ResetOnSpawn = false local Frame = Instance.new("Frame", ScreenGui) Frame.Size = UDim2.new(0, 200, 0, 200) Frame.Position = UDim2.new(0.5, -100, 0.5, -100) Frame.BackgroundColor3 = Color3.new(1, 1, 1) Frame.Active = true Frame.Draggable = true local Button = Instance.new("TextButton", Frame) Button.Size = UDim2.new(1, -20, 0, 50) Button.Position = UDim2.new(0, 10, 0, 10) Button.Text = "Wallhop OFF ❌" Button.Font = Enum.Font.SourceSansBold Button.TextSize = 22 Button.BackgroundColor3 = Color3.fromRGB(230, 230, 230) Button.TextColor3 = Color3.fromRGB(255, 0, 0) -- STATE VARIABLES local wallhopEnabled = false local lastCamX = Camera.CFrame.LookVector.X local jumpCooldown = 0 -- TOGGLE BUTTON Button.MouseButton1Click:Connect(function() wallhopEnabled = not wallhopEnabled if wallhopEnabled then Button.Text = "Wallhop ON ✅" Button.TextColor3 = Color3.fromRGB(0, 255, 0) else Button.Text = "Wallhop OFF ❌" Button.TextColor3 = Color3.fromRGB(255, 0, 0) end end) -- JUMP FUNCTION local function forceJump() local char = LocalPlayer.Character if not char then return end local humanoid = char:FindFirstChildOfClass("Humanoid") if humanoid and humanoid:GetState() ~= Enum.HumanoidStateType.Seated then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end end -- WALL DETECTION local function isNearWall() local char = LocalPlayer.Character if not char then return false end local root = char:FindFirstChild("HumanoidRootPart") if not root then return false end local rayParams = RaycastParams.new() rayParams.FilterDescendantsInstances = {char} rayParams.FilterType = Enum.RaycastFilterType.Blacklist local direction = root.CFrame.LookVector * 3 local result = Workspace:Raycast(root.Position, direction, rayParams) return result and result.Instance and result.Instance.CanCollide and result.Instance:IsA("BasePart") end -- RAINBOW COLOR FUNCTION local function hsvToRgb(h, s, v) local r, g, b local i = math.floor(h * 6) local f = h * 6 - i local p = v * (1 - s) local q = v * (1 - f * s) local t = v * (1 - (1 - f) * s) i = i % 6 if i == 0 then r, g, b = v, t, p elseif i == 1 then r, g, b = q, v, p elseif i == 2 then r, g, b = p, v, t elseif i == 3 then r, g, b = p, q, v elseif i == 4 then r, g, b = t, p, v elseif i == 5 then r, g, b = v, p, q end return Color3.new(r, g, b) end -- MAIN LOOP local hue = 0 RunService.RenderStepped:Connect(function(dt) -- Rainbow background hue = (hue + 0.005) % 1 Frame.BackgroundColor3 = hsvToRgb(hue, 1, 1) if not wallhopEnabled then return end if tick() < jumpCooldown then return end local currentCamX = Camera.CFrame.LookVector.X local camDiff = currentCamX - lastCamX lastCamX = currentCamX local char = LocalPlayer.Character if not char then return end -- Only do if turning hard right and near wall if camDiff > 0.15 and isNearWall() then jumpCooldown = tick() + 0.05 -- 20 jumps per second max forceJump() end end)