
KeylessUniversal

local autoJumpEnabled = false
local bhopHoldActive = false
local bhopHoldFeature = false
local jumpCooldown = 0.7
local autoJumpType = "Bounce"
local accelerationMethod = "Acceleration"
local groundFriction = -0.5
local AutoAccelerationEnabled = false
local MaxAcceleration = 3
local MinAcceleration = -1
local MaxSpeed = 70
local player = game:GetService("Players").LocalPlayer
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local bhopConnection = nil
local bhopLoaded = false
local Character = nil
local Humanoid = nil
local HumanoidRootPart = nil
local LastJump = 0
local GROUND_CHECK_DISTANCE = 3.5
local MAX_SLOPE_ANGLE = 45
local movementModule = nil
local originalApplyFriction = nil
local function IsOnGround()
if not Character or not HumanoidRootPart or not Humanoid then return false end
local success, result = pcall(function()
local state = Humanoid:GetState()
if state == Enum.HumanoidStateType.Jumping or state == Enum.HumanoidStateType.Freefall or state == Enum.HumanoidStateType.Swimming then
return false
end
local raycastParams = RaycastParams.new()
raycastParams.FilterType = Enum.RaycastFilterType.Exclude
raycastParams.FilterDescendantsInstances = {Character}
local raycastResult = workspace:Raycast(HumanoidRootPart.Position, Vector3.new(0, -GROUND_CHECK_DISTANCE, 0), raycastParams)
if not raycastResult then return false end
local angle = math.deg(math.acos(raycastResult.Normal:Dot(Vector3.new(0, 1, 0))))
return angle <= MAX_SLOPE_ANGLE
end)
return success and result
end
local function updateBhop()
if not bhopLoaded then return end
pcall(function()
if not Character or not Humanoid then return end
local isBhopActive = autoJumpEnabled or bhopHoldActive
if isBhopActive then
local now = tick()
if IsOnGround() and (now - LastJump) > jumpCooldown then
Humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
LastJump = now
end
end
end)
end
local function loadBhop()
if bhopLoaded then return end
bhopLoaded = true
if bhopConnection then bhopConnection:Disconnect() end
bhopConnection = RunService.Heartbeat:Connect(updateBhop)
end
local function unloadBhop()
if not bhopLoaded then return end
bhopLoaded = false
if bhopConnection then
bhopConnection:Disconnect()
bhopConnection = nil
end
bhopHoldActive = false
end
local function checkBhopState()
if autoJumpEnabled or bhopHoldActive then
loadBhop()
else
unloadBhop()
end
end
local function setupBhopJumpBtn()
pcall(function()
local playerGui = player:WaitForChild("PlayerGui", 5)
local touchGui = playerGui:WaitForChild("TouchGui", 5)
local jumpButton = touchGui:FindFirstChild("JumpButton", true)
if not jumpButton then return end
jumpButton.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then
if bhopHoldFeature then
bhopHoldActive = true
checkBhopState()
end
end
end)
jumpButton.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then
bhopHoldActive = false
checkBhopState()
end
end)
end)
end
local function getCurrentSpeed()
if HumanoidRootPart then
return (HumanoidRootPart.Velocity * Vector3.new(1, 0, 1)).Magnitude
end
return 0
end
local function reapplyModifications()
if not movementModule then return end
if not originalApplyFriction then
originalApplyFriction = movementModule.ApplyFriction
end
local isBhopActive = autoJumpEnabled or bhopHoldActive
if isBhopActive then
movementModule.ApplyFriction = function(self, frictionAmount)
local isGrounded = self.a == true
if isGrounded then
if accelerationMethod == "No Acceleration" then
frictionAmount = 0
elseif accelerationMethod == "Ground Acceleration" or accelerationMethod == "Acceleration" then
local finalFriction = groundFriction
if AutoAccelerationEnabled then
local currentSpeed = getCurrentSpeed()
if currentSpeed > MaxSpeed then
finalFriction = MaxAcceleration
elseif currentSpeed < MaxSpeed then
finalFriction = MinAcceleration
end
end
frictionAmount = finalFriction
end
end
return originalApplyFriction(self, frictionAmount)
end
else
movementModule.ApplyFriction = originalApplyFriction
end
end
local function setupModuleWatcher(character)
local movement = character:WaitForChild("Movement")
local function applyToModule()
local success, module = pcall(require, movement)
if success and module then
movementModule = module
reapplyModifications()
end
end
applyToModule()
spawn(function()
while character and character.Parent do
wait(1)
local success, module = pcall(require, movement)
if success and module and module ~= movementModule then
movementModule = module
reapplyModifications()
end
end
end)
end
local function ApplyModifications(character)
setupModuleWatcher(character)
end
if player.Character then
ApplyModifications(player.Character)
end
player.CharacterAdded:Connect(ApplyModifications)
player.CharacterAdded:Connect(function(char)
Character = char
Humanoid = char:WaitForChild("Humanoid")
HumanoidRootPart = char:WaitForChild("HumanoidRootPart")
setupBhopJumpBtn()
checkBhopState()
end)
if player.Character then
Character = player.Character
Humanoid = Character:FindFirstChild("Humanoid")
HumanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
end
RunService.Heartbeat:Connect(function()
if not Character or not Character:IsDescendantOf(workspace) then
Character = player.Character
if Character then
Humanoid = Character:FindFirstChildOfClass("Humanoid")
HumanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
end
end
end)
setupBhopJumpBtn()
checkBhopState()
Tabs.Auto:Section({Title="Bhop"})
BhopToggle = Tabs.Auto:Toggle({
Title = "Bhop",
Flag = "BhopToggle",
Value = false,
Callback = function(state)
autoJumpEnabled = state
checkBhopState()
reapplyModifications()
end
})
BhopHoldToggle = Tabs.Auto:Toggle({
Title = "Bhop Jump button/Space",
Flag = "BhopHoldToggle",
Value = false,
Callback = function(state)
bhopHoldFeature = state
if not state then
bhopHoldActive = false
checkBhopState()
reapplyModifications()
end
end
})
ShowBunnyHopButtonToggle = Tabs.Auto:Toggle({
Title = "Bhop Button",
Flag = "ShowBunnyHopButton",
Value = false,
Callback = function(state)
if _G.DarahubLibBtn and _G.DarahubLibBtn.BunnyHopToggle then
_G.DarahubLibBtn.BunnyHopToggle.Visible = state
end
end
})
AccelerationDropdown = Tabs.Auto:Dropdown({
Title = "Bhop Mode",
Flag = "AccelerationDropdown",
Values = {"No Acceleration", "Ground Acceleration", "Acceleration"},
Value = "Acceleration",
Callback = function(value)
accelerationMethod = value
reapplyModifications()
end
})
AccelerationInput = Tabs.Auto:Input({
Title = "Bhop Acceleration (Negative Only)",
Flag = "AccelerationInput",
Placeholder = "-0.2",
Numeric = true,
Value = "-0.2",
Callback = function(value)
local n = tonumber(value)
if n then
groundFriction = n
reapplyModifications()
end
end
})
AutoJumpTypeDropdown = Tabs.Auto:Dropdown({
Title = "Auto Jump Mode",
Flag = "AutoJumpTypeDropdown",
Values = {"Bounce", "Realistic"},
Value = "Bounce",
Callback = function(value)
autoJumpType = value
end
})
JumpCooldownInput = Tabs.Auto:Input({
Title = "Auto Jump Delay",
Flag = "JumpCooldownInput",
Placeholder = "0.7",
Numeric = true,
Value = "0.7",
Callback = function(value)
local n = tonumber(value)
if n and n > 0 then
jumpCooldown = n
end
end
})
Tabs.Auto:Section({Title="Auto Acceleration (Legit)"})
AutoAccelerationToggle = Tabs.Auto:Toggle({
Title = "Auto Acceleration (Legit)",
Flag = "AutoAccelerationToggle",
Value = false,
Callback = function(state)
AutoAccelerationEnabled = state
reapplyModifications()
end
})
MaxAccelerationInput = Tabs.Auto:Input({
Title = "Max Acceleration",
Flag = "MaxAccelerationInput",
Placeholder = "3",
Numeric = true,
Value = "3",
Callback = function(value)
local n = tonumber(value)
if n then
MaxAcceleration = n
reapplyModifications()
end
end
})
MinAccelerationInput = Tabs.Auto:Input({
Title = "Min Acceleration",
Flag = "MinAccelerationInput",
Placeholder = "-1",
Numeric = true,
Value = "-1",
Callback = function(value)
local n = tonumber(value)
if n then
MinAcceleration = n
reapplyModifications()
end
end
})
MaxSpeedInput = Tabs.Auto:Input({
Title = "Max Speed",
Flag = "MaxSpeedInput",
Placeholder = "70",
Numeric = true,
Value = "70",
Callback = function(value)
local n = tonumber(value)
if n then
MaxSpeed = n
reapplyModifications()
end
end
})
ButtonLib.Create:Toggle({
Text = "Bunny Hop",
Flag = "BunnyHopToggle",
Default = false,
Visible = false,
Callback = function(s)
if BhopToggle then
BhopToggle:Set(s)
end
end
}).Position = UDim2.new(0.5, -125, 0.4, 0)



zammmmm
how to use??
@boboxlol set autoJumpEnabled to true to enable it, if you want easy use, make your own script. use ai if you don't know what you're doing . prompt: "make a ui with this ui element from scratch, disable reset on res* on screen gui"
@ItzPnsdg ok