Legit Wallhop V2
Key RequiredUniversal

Legit Wallhop V2

Universal Scriptiliapashov378iliapashov378 3.6K views 8.4K executesUpdated Jan 5, 2026
Unrated
00
Lua Script•116 lines (3327 chars)
-- 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)

Features & Information

Hi

Community Comments (1)

StewBradarStewBradarJan 6, 2026

ai

More Scripts for Universal Scripts