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

Double Jump script cancels Wall Jump script?

Asked by 5 years ago

This is a really big problem in my game and I really hope someone would solve it, it would be wonderful! So in my game I used a wall jump script that lets a player jump off special walls, and a script that lets players double jump. The problem is that when a player tries to wall jump, the double jump script overrides the wall jump script, and only makes a double jump. What I want here is that it double jumps when it's not against a wall, and when the player is against a wall, don't double jump and wall jump instead.

This is the wall jump script:

local player = game.Players.LocalPlayer

player.CharacterAdded:wait()

local character = player.Character

local torso = character:WaitForChild("LowerTorso")

local mouse = player:GetMouse()

local humanoid = character:WaitForChild("Humanoid")

local ReplicatedStorage = game:GetService("ReplicatedStorage")

p = ReplicatedStorage:FindFirstChild("Kapow")

local tweeninfo = TweenInfo.new(0.85)

local ts = game:GetService("TweenService")

local goal = {}

goal.Size = Vector3.new(11, 11, 11)

goal.Transparency = 1



local lastwall = nil

function onJump()

if humanoid.Jump == true then

local ray = Ray.new(

torso.CFrame.p, torso.CFrame.lookVector *2

)

local hit, position, normal = workspace:FindPartOnRay(ray, character)

if hit then

if hit ~= lastwall then

if hit.Name == "WallJump1" then

local p2 = p:Clone()

local tween = ts:Create(p2, tweeninfo, goal)

p2.Parent = workspace

p2.Position = humanoid.Parent.HumanoidRootPart.Position

tween:Play()

print("walljump")

local animation = humanoid:LoadAnimation(script.Animation)

animation:Play()

script.Sound:Play()

local velo = Instance.new("BodyVelocity",torso)

velo.MaxForce = Vector3.new(400000,400000,400000)

velo.Velocity = -torso.CFrame.lookVector*20 + Vector3.new(0,35,35)

game.Debris:AddItem(velo,0.1)

lastwall = hit

wait(1)

lastwall = nil

elseif hit.Name == "WallJump2" then

print("walljump")

local p2 = p:Clone()

local tween = ts:Create(p2, tweeninfo, goal)

p2.Parent = workspace

p2.Position = humanoid.Parent.HumanoidRootPart.Position

tween:Play()

local animation = humanoid:LoadAnimation(script.Animation)

animation:Play()

script.Sound:Play()

local velo = Instance.new("BodyVelocity",torso)

velo.MaxForce = Vector3.new(400000,400000,400000)

velo.Velocity = -torso.CFrame.lookVector*20 + Vector3.new(0,35,-35)

game.Debris:AddItem(velo,0.1)

lastwall = hit

wait(1)

lastwall = nil

end

end

end

end

end

humanoid.Changed:Connect(onJump)

And this is the double jump script:

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 = 0.6

local ReplicatedStorage = game:GetService("ReplicatedStorage")
p = ReplicatedStorage:FindFirstChild("Twirlpoof")
local tweeninfo = TweenInfo.new(0.85)
local ts = game:GetService("TweenService")
local goal = {}
goal.Size = Vector3.new(12, 3, 12)
goal.Transparency = 1

    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
            local p2 = p:Clone()
            local tween = ts:Create(p2, tweeninfo, goal)
            p2.Parent = workspace
            p2.Position = humanoid.Parent.HumanoidRootPart.Position
            tween:Play()
            local animation = humanoid:LoadAnimation(script.Animation)
            animation:Play()
            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
Just a suggestion; If you have the same variables in two scripts inside of a part, they can override eachother. So maybe try that? I personally don't know what to do, but I've had that happened to me before where my variables caused overriding code in my Studio. Hopefully that helps! BryanFehr 133 — 5y

Answer this question