-- Create ScreenGui local screenGui = Instance.new("ScreenGui") screenGui.Parent = game.Players.LocalPlayer:WaitForChild("PlayerGui") screenGui.ResetOnSpawn = false -- Services local UserInputService = game:GetService("UserInputService") local Players = game:GetService("Players") local Workspace = game:GetService("Workspace") local RunService = game:GetService("RunService") -- Player specific local player = Players.LocalPlayer local mouse = player:GetMouse() -- Create Frame (GUI 1) - Height expanded to 415 to comfortably fit all three sliders local frame = Instance.new("Frame") frame.Parent = screenGui frame.BackgroundColor3 = Color3.fromRGB(255, 255, 255) frame.Size = UDim2.new(0, 200, 0, 415) frame.Position = UDim2.new(0.5, -100, 0.5, -207) frame.Active = true frame.ClipsDescendants = false -- ============================================================== -- -- Smooth Dragging Implementation -- ============================================================== -- local dragging local dragInput local dragStart local startPosition local function update(input) local delta = input.Position - dragStart frame.Position = UDim2.new(startPosition.X.Scale, startPosition.X.Offset + delta.X, startPosition.Y.Scale, startPosition.Y.Offset + delta.Y) end frame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPosition = frame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) frame.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then update(input) end end) -- ============================================================== -- -- Calculate button positions (Top row) local frameWidth = frame.Size.X.Offset local buttonWidth = 60 local totalButtonWidth = buttonWidth * 3 local totalSpacing = frameWidth - totalButtonWidth local spacing = totalSpacing / 4 local onButtonX = spacing local additionButtonX = spacing + buttonWidth + spacing local offButtonX = spacing + buttonWidth + spacing + buttonWidth + spacing -- Create On Button local onButton = Instance.new("TextButton") onButton.Parent = frame onButton.BackgroundColor3 = Color3.fromRGB(0, 255, 0) onButton.Size = UDim2.new(0, buttonWidth, 0, 30) onButton.Position = UDim2.new(0, onButtonX, 0, 20) onButton.Text = "On" onButton.TextScaled = true -- Create Addition Button local additionButton = Instance.new("TextButton") additionButton.Parent = frame additionButton.BackgroundColor3 = Color3.fromRGB(255, 0, 0) additionButton.Size = UDim2.new(0, buttonWidth, 0, 30) additionButton.Position = UDim2.new(0, additionButtonX, 0, 20) additionButton.Text = "Addition" additionButton.TextScaled = true local additionToggle = false local additionalFrame = nil local jumpButtonInAddition = nil -- Create Off Button local offButton = Instance.new("TextButton") offButton.Parent = frame offButton.BackgroundColor3 = Color3.fromRGB(255, 0, 0) offButton.Size = UDim2.new(0, buttonWidth, 0, 30) offButton.Position = UDim2.new(0, offButtonX, 0, 20) offButton.Text = "Off" offButton.TextScaled = true -- Create Destroy Button local destroyButton = Instance.new("TextButton") destroyButton.Parent = frame destroyButton.BackgroundColor3 = Color3.fromRGB(255, 255, 255) destroyButton.Size = UDim2.new(0, 160, 0, 30) destroyButton.Position = UDim2.new(0, 20, 0, 60) destroyButton.Text = "Destroy" destroyButton.TextScaled = true -- Create Auto Button local autoButton = Instance.new("TextButton") autoButton.Parent = frame autoButton.BackgroundColor3 = Color3.fromRGB(255, 0, 0) -- Start Red (Off) autoButton.Size = UDim2.new(0, 160, 0, 30) autoButton.Position = UDim2.new(0, 20, 0, 100) autoButton.Text = "Auto" autoButton.TextScaled = true local autoToggle = false -- Create Auto Jump Button local autoJumpButton = Instance.new("TextButton") autoJumpButton.Parent = frame autoJumpButton.BackgroundColor3 = Color3.fromRGB(255, 0, 0) -- Start Red (Off) autoJumpButton.Size = UDim2.new(0, 160, 0, 30) autoJumpButton.Position = UDim2.new(0, 20, 0, 140) autoJumpButton.Text = "Auto Jump" autoJumpButton.TextScaled = true local autoJumpToggle = false -- Create Downforce Toggle Button local downforceButton = Instance.new("TextButton") downforceButton.Parent = frame downforceButton.BackgroundColor3 = Color3.fromRGB(255, 0, 0) -- Start Red (Off) downforceButton.Size = UDim2.new(0, 160, 0, 30) downforceButton.Position = UDim2.new(0, 20, 0, 180) downforceButton.Text = "Downforce" downforceButton.TextScaled = true local downforceToggle = false -- ============================================================== -- -- Flick Speed Slider Implementation -- ============================================================== -- local sliderLabel = Instance.new("TextLabel") sliderLabel.Parent = frame sliderLabel.BackgroundTransparency = 1 sliderLabel.Size = UDim2.new(0, 160, 0, 15) sliderLabel.Position = UDim2.new(0, 20, 0, 220) sliderLabel.Text = "Flick Speed: 0.45" sliderLabel.TextColor3 = Color3.fromRGB(0, 0, 0) sliderLabel.TextSize = 12 sliderLabel.Font = Enum.Font.SourceSans local sliderBackground = Instance.new("Frame") sliderBackground.Parent = frame sliderBackground.BackgroundColor3 = Color3.fromRGB(200, 200, 200) sliderBackground.Size = UDim2.new(0, 160, 0, 10) sliderBackground.Position = UDim2.new(0, 20, 0, 240) sliderBackground.BorderSizePixel = 0 local sliderButton = Instance.new("TextButton") sliderButton.Parent = sliderBackground sliderButton.BackgroundColor3 = Color3.fromRGB(0, 150, 255) sliderButton.Size = UDim2.new(0, 14, 0, 20) sliderButton.Position = UDim2.new(0.5, -7, 0.5, -10) sliderButton.Text = "" sliderButton.BorderSizePixel = 0 local flickSpeed = 0.45 local sliderActive = false sliderButton.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then sliderActive = true end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then sliderActive = false end end) local function updateSlider(input) local absoluteX = sliderBackground.AbsolutePosition.X local absoluteWidth = sliderBackground.AbsoluteSize.X local inputX = input.Position.X local scale = math.clamp((inputX - absoluteX) / absoluteWidth, 0, 1) flickSpeed = 0.1 + (scale * 0.7) sliderButton.Position = UDim2.new(scale, -7, 0.5, -10) sliderLabel.Text = string.format("Flick Speed: %.2f", flickSpeed) end UserInputService.InputChanged:Connect(function(input) if sliderActive and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then updateSlider(input) end end) -- ============================================================== -- -- Downforce Slider Implementation -- ============================================================== -- local downforceValue = 0.45 local dfSliderActive = false local dfSliderLabel = Instance.new("TextLabel") dfSliderLabel.Parent = frame dfSliderLabel.BackgroundTransparency = 1 dfSliderLabel.Size = UDim2.new(0, 160, 0, 15) dfSliderLabel.Position = UDim2.new(0, 20, 0, 275) dfSliderLabel.Text = "Downforce Mult: 0.45" dfSliderLabel.TextColor3 = Color3.fromRGB(0, 0, 0) dfSliderLabel.TextSize = 12 dfSliderLabel.Font = Enum.Font.SourceSans local dfSliderBackground = Instance.new("Frame") dfSliderBackground.Parent = frame dfSliderBackground.BackgroundColor3 = Color3.fromRGB(200, 200, 200) dfSliderBackground.Size = UDim2.new(0, 160, 0, 10) dfSliderBackground.Position = UDim2.new(0, 20, 0, 295) dfSliderBackground.BorderSizePixel = 0 local dfSliderButton = Instance.new("TextButton") dfSliderButton.Parent = dfSliderBackground dfSliderButton.BackgroundColor3 = Color3.fromRGB(0, 150, 255) dfSliderButton.Size = UDim2.new(0, 14, 0, 20) dfSliderButton.Position = UDim2.new(0.45, -7, 0.5, -10) dfSliderButton.Text = "" dfSliderButton.BorderSizePixel = 0 dfSliderButton.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dfSliderActive = true end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dfSliderActive = false end end) local function updateDfSlider(input) local absoluteX = dfSliderBackground.AbsolutePosition.X local absoluteWidth = dfSliderBackground.AbsoluteSize.X local inputX = input.Position.X local scale = math.clamp((inputX - absoluteX) / absoluteWidth, 0, 1) downforceValue = scale dfSliderButton.Position = UDim2.new(scale, -7, 0.5, -10) dfSliderLabel.Text = string.format("Downforce Mult: %.2f", downforceValue) end UserInputService.InputChanged:Connect(function(input) if dfSliderActive and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then updateDfSlider(input) end end) -- ============================================================== -- -- Angle Selector Slider Implementation -- ============================================================== -- local flickAngleDegrees = 50 local angleSliderActive = false local angleSliderLabel = Instance.new("TextLabel") angleSliderLabel.Parent = frame angleSliderLabel.BackgroundTransparency = 1 angleSliderLabel.Size = UDim2.new(0, 160, 0, 15) angleSliderLabel.Position = UDim2.new(0, 20, 0, 330) angleSliderLabel.Text = "Flick Angle: 50°" angleSliderLabel.TextColor3 = Color3.fromRGB(0, 0, 0) angleSliderLabel.TextSize = 12 angleSliderLabel.Font = Enum.Font.SourceSans local angleSliderBackground = Instance.new("Frame") angleSliderBackground.Parent = frame angleSliderBackground.BackgroundColor3 = Color3.fromRGB(200, 200, 200) angleSliderBackground.Size = UDim2.new(0, 160, 0, 10) angleSliderBackground.Position = UDim2.new(0, 20, 0, 350) angleSliderBackground.BorderSizePixel = 0 local angleSliderButton = Instance.new("TextButton") angleSliderButton.Parent = angleSliderBackground angleSliderButton.BackgroundColor3 = Color3.fromRGB(0, 150, 255) angleSliderButton.Size = UDim2.new(0, 14, 0, 20) angleSliderButton.Position = UDim2.new(50/180, -7, 0.5, -10) angleSliderButton.Text = "" angleSliderButton.BorderSizePixel = 0 angleSliderButton.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then angleSliderActive = true end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then angleSliderActive = false end end) local function updateAngleSlider(input) local absoluteX = angleSliderBackground.AbsolutePosition.X local absoluteWidth = angleSliderBackground.AbsoluteSize.X local inputX = input.Position.X local scale = math.clamp((inputX - absoluteX) / absoluteWidth, 0, 1) flickAngleDegrees = math.round(scale * 180) angleSliderButton.Position = UDim2.new(scale, -7, 0.5, -10) angleSliderLabel.Text = string.format("Flick Angle: %d°", flickAngleDegrees) end UserInputService.InputChanged:Connect(function(input) if angleSliderActive and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then updateAngleSlider(input) end end) -- ============================================================== -- -- Create Status Indicator local statusLabel = Instance.new("TextLabel") statusLabel.Parent = frame statusLabel.BackgroundColor3 = Color3.fromRGB(255, 255, 255) statusLabel.Size = UDim2.new(0, 200, 0, 30) statusLabel.Position = UDim2.new(0, 0, 0, -30) statusLabel.Text = "WallHop V5: Off" statusLabel.TextColor3 = Color3.fromRGB(255, 0, 0) statusLabel.TextScaled = true -- Create Plus Button local plusButton = Instance.new("TextButton") plusButton.Parent = frame plusButton.BackgroundColor3 = Color3.fromRGB(255, 0, 0) plusButton.Size = UDim2.new(0, 30, 0, 30) plusButton.Position = UDim2.new(0, -35, 0, -30) plusButton.Text = "+" plusButton.TextColor3 = Color3.fromRGB(255, 255, 255) plusButton.TextScaled = true local plusButtonToggle = false local plusFrame = nil local selectButtonInPlusFrame = nil local selectModeActive = false local colorListLabelInPlusFrame = nil local mouseClickConnection = nil local selectedBrickColor = nil -- Variables for Wallhop Functionality local wallhopToggle = false local InfiniteJumpEnabled = true local raycastParams = RaycastParams.new() raycastParams.FilterType = Enum.RaycastFilterType.Blacklist local jumpConnection = nil local autoJumpConnection = nil local wallTouchJumpConnection = nil local alignConnection = nil -- ============================================================== -- -- Precise wall detection function (Humanoid Filtered) -- ============================================================== -- local function getWallRaycastResult() local character = player.Character if not character then return nil end local humanoidRootPart = character:FindFirstChild("HumanoidRootPart") if not humanoidRootPart then return nil end raycastParams.FilterDescendantsInstances = {character} local detectionDistance = 2.5 local closestHit = nil local minDistance = detectionDistance + 1 local hrpCF = humanoidRootPart.CFrame local function isAHumanoid(instance) if not instance then return false end local model = instance:FindFirstAncestorOfClass("Model") if model and model:FindFirstChildOfClass("Humanoid") then return true end return false end for i = 0, 7 do local angle = math.rad(i * 45) local direction = (hrpCF * CFrame.Angles(0, angle, 0)).LookVector local ray = Workspace:Raycast(humanoidRootPart.Position, direction * detectionDistance, raycastParams) if ray and ray.Instance and not isAHumanoid(ray.Instance) and ray.Distance < minDistance then minDistance = ray.Distance closestHit = ray end end local blockCastSize = Vector3.new(1.5, 1, 0.5) local blockCastOffset = CFrame.new(0, -1, -0.5) local blockCastOriginCF = hrpCF * blockCastOffset local blockCastDirection = hrpCF.LookVector local blockCastDistance = 1.5 local blockResult = Workspace:Blockcast(blockCastOriginCF, blockCastSize, blockCastDirection * blockCastDistance, raycastParams) if blockResult and blockResult.Instance and not isAHumanoid(blockResult.Instance) and blockResult.Distance < minDistance then minDistance = blockResult.Distance closestHit = blockResult end return closestHit end -- ============================================================== -- -- Auto-Align Assist Function -- ============================================================== -- local function alignToNearestWall() if not wallhopToggle then return end local character = player.Character local rootPart = character and character:FindFirstChild("HumanoidRootPart") if not rootPart then return end local wallRayResult = getWallRaycastResult() if wallRayResult then local wallNormal = wallRayResult.Normal local targetLookDirection = -Vector3.new(wallNormal.X, 0, wallNormal.Z).Unit if targetLookDirection.Magnitude > 0.1 then rootPart.CFrame = CFrame.lookAt(rootPart.Position, rootPart.Position + targetLookDirection) print("Auto-Align: Squared up to wall surface.") end end end -- ======================================================================== -- -- Core Wall Jump Execution Function (Visual Flips and Snaps Removed) -- ======================================================================== -- local function executeWallJump(wallRayResult, jumpType) if jumpType ~= "Button" and not InfiniteJumpEnabled then return end local character = player.Character local humanoid = character and character:FindFirstChildOfClass("Humanoid") local rootPart = character and character:FindFirstChild("HumanoidRootPart") local camera = Workspace.CurrentCamera if not (humanoid and rootPart and camera and humanoid:GetState() ~= Enum.HumanoidStateType.Dead and wallRayResult) then return end if jumpType ~= "Button" then InfiniteJumpEnabled = false end local maxInfluenceAngleRight = math.rad(20) local maxInfluenceAngleLeft = math.rad(-100) local wallNormal = wallRayResult.Normal local baseDirectionAwayFromWall = Vector3.new(wallNormal.X, 0, wallNormal.Z).Unit if baseDirectionAwayFromWall.Magnitude < 0.1 then local dirToHit = (wallRayResult.Position - rootPart.Position) * Vector3.new(1,0,1) baseDirectionAwayFromWall = -dirToHit.Unit if baseDirectionAwayFromWall.Magnitude < 0.1 then baseDirectionAwayFromWall = -rootPart.CFrame.LookVector * Vector3.new(1, 0, 1) if baseDirectionAwayFromWall.Magnitude > 0.1 then baseDirectionAwayFromWall = baseDirectionAwayFromWall.Unit end if baseDirectionAwayFromWall.Magnitude < 0.1 then baseDirectionAwayFromWall = Vector3.new(0,0,1) end end end baseDirectionAwayFromWall = Vector3.new(baseDirectionAwayFromWall.X, 0, baseDirectionAwayFromWall.Z).Unit if baseDirectionAwayFromWall.Magnitude < 0.1 then baseDirectionAwayFromWall = Vector3.new(0,0,1) end local cameraLook = camera.CFrame.LookVector local horizontalCameraLook = Vector3.new(cameraLook.X, 0, cameraLook.Z).Unit if horizontalCameraLook.Magnitude < 0.1 then horizontalCameraLook = baseDirectionAwayFromWall end local dot = math.clamp(baseDirectionAwayFromWall:Dot(horizontalCameraLook), -1, 1) local angleBetween = math.acos(dot) local cross = baseDirectionAwayFromWall:Cross(horizontalCameraLook) local rotationSign = -math.sign(cross.Y) if rotationSign == 0 then angleBetween = 0 end local actualInfluenceAngle if rotationSign == 1 then actualInfluenceAngle = math.min(angleBetween, maxInfluenceAngleRight) elseif rotationSign == -1 then actualInfluenceAngle = math.min(angleBetween, maxInfluenceAngleLeft) else actualInfluenceAngle = 0 end local adjustmentRotation = CFrame.Angles(0, actualInfluenceAngle * rotationSign, 0) local initialTargetLookDirection = adjustmentRotation * baseDirectionAwayFromWall -- Line up orientation seamlessly rootPart.CFrame = CFrame.lookAt(rootPart.Position, rootPart.Position + initialTargetLookDirection) RunService.Heartbeat:Wait() if humanoid and humanoid:GetState() ~= Enum.HumanoidStateType.Dead then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) -- --- SEPARATE DOWNFORCE FEATURE --- if downforceToggle then task.spawn(function() RunService.Heartbeat:Wait() if rootPart and rootPart.Velocity.Y > 0 then rootPart.AssemblyLinearVelocity = Vector3.new(rootPart.AssemblyLinearVelocity.X, rootPart.AssemblyLinearVelocity.Y * downforceValue, rootPart.AssemblyLinearVelocity.Z) end end) end -- --- DYNAMIC FLICK CALCULATION --- -- Camera flick outward only activates if slider angle is greater than 0 if flickAngleDegrees > 0 then local originalCamCF = camera.CFrame local flickAngle = math.rad(flickAngleDegrees) local dynamicSign = (math.random() > 0.5) and 1 or -1 local flickCF = originalCamCF * CFrame.Angles(0, flickAngle * dynamicSign, 0) for t = 0, 1, flickSpeed do camera.CFrame = originalCamCF:Lerp(flickCF, t) RunService.Heartbeat:Wait() end end end if jumpType ~= "Button" then task.wait(0.1) InfiniteJumpEnabled = true end end -- Function for the "Jump" button in GUI 2 local function performFaceWallJump() local wallRayResult = getWallRaycastResult() if wallRayResult then executeWallJump(wallRayResult, "Button") else print("No nearby wall found for wall jump (Button).") end end -- Button Functions onButton.MouseButton1Click:Connect(function() statusLabel.Text = "WallHop V5: On" statusLabel.TextColor3 = Color3.fromRGB(0, 255, 0) wallhopToggle = true end) offButton.MouseButton1Click:Connect(function() statusLabel.Text = "WallHop V5: Off" statusLabel.TextColor3 = Color3.fromRGB(255, 0, 0) wallhopToggle = false end) -- Addition Button Functionality (Creates/Destroys GUI 2) additionButton.MouseButton1Click:Connect(function() additionToggle = not additionToggle if additionToggle then if not additionalFrame then additionButton.BackgroundColor3 = Color3.fromRGB(0, 255, 0) additionalFrame = Instance.new("Frame") additionalFrame.Name = "AdditionalWallHopFrame" additionalFrame.Parent = frame additionalFrame.BackgroundColor3 = Color3.fromRGB(200, 200, 200) additionalFrame.Size = UDim2.new(0, 200, 0, 100) additionalFrame.Position = UDim2.new(0, 0, 1, 0) additionalFrame.Active = false; additionalFrame.Draggable = false; additionalFrame.BorderSizePixel = 1 jumpButtonInAddition = Instance.new("TextButton") jumpButtonInAddition.Name = "FaceWallJumpButton"; jumpButtonInAddition.Parent = additionalFrame jumpButtonInAddition.BackgroundColor3 = Color3.fromRGB(0, 150, 255) jumpButtonInAddition.Size = UDim2.new(0.8, 0, 0.4, 0) jumpButtonInAddition.Position = UDim2.new(0.1, 0, 0.3, 0) jumpButtonInAddition.Text = "Jump"; jumpButtonInAddition.TextColor3 = Color3.fromRGB(255,255,255) jumpButtonInAddition.TextScaled = true; jumpButtonInAddition.Active = true jumpButtonInAddition.MouseButton1Click:Connect(performFaceWallJump) end else if additionalFrame then additionButton.BackgroundColor3 = Color3.fromRGB(255, 0, 0) additionalFrame:Destroy(); additionalFrame = nil; jumpButtonInAddition = nil end end end) -- Auto Button Toggle Functionality autoButton.MouseButton1Click:Connect(function() local desiredState = not autoToggle if desiredState == true then if selectedBrickColor then autoToggle = true autoButton.BackgroundColor3 = Color3.fromRGB(0, 255, 0) print("Auto toggled ON") else autoToggle = false autoButton.BackgroundColor3 = Color3.fromRGB(255, 0, 0) print("Auto toggle FAILED: No color selected in GUI 3 yet.") local currentStatusText = statusLabel.Text local currentStatusColor = statusLabel.TextColor3 statusLabel.Text = "Auto requires color selection!" statusLabel.TextColor3 = Color3.fromRGB(255,100,0) task.wait(2) statusLabel.Text = currentStatusText statusLabel.TextColor3 = currentStatusColor end else autoToggle = false autoButton.BackgroundColor3 = Color3.fromRGB(255, 0, 0) print("Auto toggled OFF") end end) -- Auto Jump Button Toggle Functionality autoJumpButton.MouseButton1Click:Connect(function() autoJumpToggle = not autoJumpToggle if autoJumpToggle then autoJumpButton.BackgroundColor3 = Color3.fromRGB(0, 255, 0) print("Auto Jump toggled ON") else autoJumpButton.BackgroundColor3 = Color3.fromRGB(255, 0, 0) print("Auto Jump toggled OFF") end end) -- Downforce Toggle Button Functionality downforceButton.MouseButton1Click:Connect(function() downforceToggle = not downforceToggle if downforceToggle then downforceButton.BackgroundColor3 = Color3.fromRGB(0, 255, 0) print("Downforce toggled ON") else downforceButton.BackgroundColor3 = Color3.fromRGB(255, 0, 0) print("Downforce toggled OFF") end end) -- Plus Button Functionality plusButton.MouseButton1Click:Connect(function() plusButtonToggle = not plusButtonToggle if plusButtonToggle then plusButton.BackgroundColor3 = Color3.fromRGB(0, 255, 0) if not plusFrame then print("Plus Button: Creating GUI 3") plusFrame = Instance.new("Frame") plusFrame.Name = "PlusFrame"; plusFrame.Parent = frame plusFrame.BackgroundColor3 = Color3.fromRGB(200, 200, 200) plusFrame.Size = UDim2.new(0, 200, 0, 100); plusFrame.Position = UDim2.new(0, -205, 0, 0) plusFrame.Active = false; plusFrame.Draggable = false; plusFrame.BorderSizePixel = 1 plusFrame.Visible = true selectButtonInPlusFrame = Instance.new("TextButton") selectButtonInPlusFrame.Name = "SelectPlatformButton"; selectButtonInPlusFrame.Parent = plusFrame selectButtonInPlusFrame.BackgroundColor3 = Color3.fromRGB(255, 0, 0) selectButtonInPlusFrame.Size = UDim2.new(0, 80, 0, 30); selectButtonInPlusFrame.Position = UDim2.new(0, 10, 0, 10) selectButtonInPlusFrame.Text = "Select"; selectButtonInPlusFrame.TextScaled = true; selectButtonInPlusFrame.TextColor3 = Color3.fromRGB(255, 255, 255) colorListLabelInPlusFrame = Instance.new("TextLabel") colorListLabelInPlusFrame.Name = "ColorDisplayLabel"; colorListLabelInPlusFrame.Parent = plusFrame colorListLabelInPlusFrame.BackgroundColor3 = Color3.fromRGB(200, 200, 200); colorListLabelInPlusFrame.BackgroundTransparency = 0 colorListLabelInPlusFrame.Size = UDim2.new(0, 180, 0, 50); colorListLabelInPlusFrame.Position = UDim2.new(0, 10, 0, 45) colorListLabelInPlusFrame.Text = "Click a part to detect color"; colorListLabelInPlusFrame.TextColor3 = Color3.new(1, 1, 1) colorListLabelInPlusFrame.TextScaled = true; colorListLabelInPlusFrame.BorderSizePixel = 1; colorListLabelInPlusFrame.BorderColor3 = Color3.new(0,0,0) selectButtonInPlusFrame.MouseButton1Click:Connect(function() selectModeActive = not selectModeActive if selectModeActive then selectButtonInPlusFrame.BackgroundColor3 = Color3.fromRGB(0, 255, 0) colorListLabelInPlusFrame.Text = "Click any part in the world" print("Select Mode Activated") if mouseClickConnection then mouseClickConnection:Disconnect(); mouseClickConnection = nil end mouseClickConnection = mouse.Button1Down:Connect(function() local target = mouse.Target if target and target:IsA("BasePart") then local part = target local bColor = part.BrickColor local colorValue = part.Color selectedBrickColor = bColor print("Stored selected BrickColor:", selectedBrickColor.Name) colorListLabelInPlusFrame.Text = "Color: " .. bColor.Name colorListLabelInPlusFrame.TextColor3 = colorValue print("Detected Part:", part.Name, "Color:", bColor.Name) else print("Clicked invalid target or empty space.") end end) else selectButtonInPlusFrame.BackgroundColor3 = Color3.fromRGB(255, 0, 0) print("Select Mode Deactivated") if mouseClickConnection then mouseClickConnection:Disconnect(); mouseClickConnection = nil end end end) else print("Plus Button: Showing existing GUI 3") plusFrame.Visible = true end else plusButton.BackgroundColor3 = Color3.fromRGB(255, 0, 0) if plusFrame then print("Plus Button: Hiding GUI 3") plusFrame.Visible = false if selectModeActive then selectModeActive = false if selectButtonInPlusFrame then selectButtonInPlusFrame.BackgroundColor3 = Color3.fromRGB(255, 0, 0) end if mouseClickConnection then mouseClickConnection:Disconnect(); mouseClickConnection = nil end end end end end) -- Auto Jump Heartbeat Loop autoJumpConnection = RunService.Heartbeat:Connect(function(deltaTime) if not autoToggle then return end if not selectedBrickColor then return end if not wallhopToggle then return end local character = player.Character local humanoid = character and character:FindFirstChildOfClass("Humanoid") if not (humanoid and humanoid:GetState() ~= Enum.HumanoidStateType.Dead) then return end local wallRayResult = getWallRaycastResult() if wallRayResult and wallRayResult.Instance then local hitPart = wallRayResult.Instance if hitPart:IsA("BasePart") and hitPart.BrickColor == selectedBrickColor then executeWallJump(wallRayResult, "Auto") end end end) -- General "Auto Jump when touching a wall" Heartbeat Loop wallTouchJumpConnection = RunService.Heartbeat:Connect(function() if not autoJumpToggle then return end local character = player.Character local humanoid = character and character:FindFirstChildOfClass("Humanoid") if not (humanoid and humanoid:GetState() ~= Enum.HumanoidStateType.Dead) then return end local wallRayResult = getWallRaycastResult() if wallRayResult and wallRayResult.Instance then humanoid.Jump = true end end) -- Listen for Auto-Align Key (Left Control) alignConnection = UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end if input.KeyCode == Enum.KeyCode.LeftControl then alignToNearestWall() end end) -- Destroy Button Functionality destroyButton.MouseButton1Click:Connect(function() if jumpConnection then jumpConnection:Disconnect(); jumpConnection = nil end if autoJumpConnection then autoJumpConnection:Disconnect(); autoJumpConnection = nil end if wallTouchJumpConnection then wallTouchJumpConnection:Disconnect(); wallTouchJumpConnection = nil end if mouseClickConnection then mouseClickConnection:Disconnect(); mouseClickConnection = nil end if alignConnection then alignConnection:Disconnect(); alignConnection = nil end if additionalFrame and additionalFrame.Parent then additionalFrame:Destroy() end if plusFrame and plusFrame.Parent then plusFrame:Destroy() end wallhopToggle = false; autoToggle = false; autoJumpToggle = false; downforceToggle = false; plusButtonToggle = false; additionToggle = false; selectModeActive = false selectedBrickColor = nil if screenGui and screenGui.Parent then screenGui:Destroy() end additionalFrame = nil; jumpButtonInAddition = nil; plusFrame = nil; selectButtonInPlusFrame = nil; colorListLabelInPlusFrame = nil; plusButton = nil; frame = nil; screenGui = nil; mouseClickConnection = nil; autoJumpConnection = nil; wallTouchJumpConnection = nil; alignConnection = nil print("GUI Destroyed.") end) -- Main Wallhop Function (Spacebar) jumpConnection = UserInputService.JumpRequest:Connect(function() if not wallhopToggle then return end local wallRayResult = getWallRaycastResult() if wallRayResult then executeWallJump(wallRayResult, "Manual") end end)