Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Custom rig double jumping?

Asked by 4 years ago
Edited 4 years ago

Any ideas as to why this is occurring?

It's kinda hard to tell but the character does a slight double jump before touching the ground.

I'd image it's related to the humanoid hip height but I've changed it many times now and the only time it stops doing it is when the character is too low with it's legs sticking through the floor.

EDIT: If anyone stumbles upon this with the same issue, I fixed it by making the HumanoidRootPart the length of the entire rig, originally it was only the size of the Torso but I extended it down to the feet

1 answer

Log in to vote
0
Answered by 4 years ago

Try this.

local UserInputService = game:GetService("UserInputService")
local localPlayer = game.Players.LocalPlayer
local character
local humanoid

local canDoubleJump = false
local hasDoubleJumped = false
local oldPowerlocal TIME_BETWEEN_JUMPS = 0.1
local DOUBLE_JUMP_POWER_MULTIPLIER = 1.5

function onJumpRequest()
    if not character or not humanoid or not character:IsDescendantOf(workspace) or
     humanoid:GetState() == Enum.HumanoidStateType.Dead then
        return
    end

    if canDoubleJump and not hasDoubleJumped then
        hasDoubleJumped = true
        humanoid.JumpPower = oldPower * DOUBLE_JUMP_POWER_MULTIPLIER        humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
    end
end

local function characterAdded(newCharacter)
    character = newCharacter
    humanoid = newCharacter:WaitForChild("Humanoid")
    hasDoubleJumped = false
    canDoubleJump = false
    oldPower = humanoid.JumpPower 
    humanoid.StateChanged:connect(function(old, new)
        if new == Enum.HumanoidStateType.Landed then
            canDoubleJump = false
            hasDoubleJumped = false
            humanoid.JumpPower = oldPower       elseif new == Enum.HumanoidStateType.Freefall then
            wait(TIME_BETWEEN_JUMPS)            canDoubleJump = true
        end
    end)
end

if localPlayer.Character then
    characterAdded(localPlayer.Character)
end

localPlayer.CharacterAdded:connect(characterAdded)
UserInputService.JumpRequest:connect(onJumpRequest)
0
Literally copied from the wiki :/ Kriscross102 118 — 4y
Ad

Answer this question