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

Disable jumping on connect?

Asked by 3 years ago
Edited 3 years ago

I need help. I made a script that plays a sound when you enter an object and it ends the sound ontouch end. Since touch end is glitchy the sound starts over when you jump. I need a fix to disable jumping onconnect with a part but I don't know how. Can someone help? This is what I have so far.

debounce = false

script.Parent.Touched:connect(
    function(hit)
        if debounce == false then
            debounce = true
            if (hit.Parent:FindFirstChild("Humanoid") ~= nil) then
                local player = game.Players:GetPlayerFromCharacter(hit.Parent)
                local sound = script.Parent.Sound:Clone()
                sound.Parent = player.PlayerGui
                sound:Play()
                sound.Ended:wait()
                debounce = false          
            end
        end
    end
)
script.Parent.TouchEnded:Connect(
    function(hit)
            debounce = false
            local playergui = game.Players:GetPlayerFromCharacter(hit.Parent).PlayerGui
            if playergui.Sound then
                local sound = playergui.Sound
                sound:Destroy()
        end
    end
)

2 answers

Log in to vote
0
Answered by
raid6n 2196 Moderation Voter Community Moderator
3 years ago
Edited 3 years ago

You could use Humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false).

When set to false the player is unable to jump, when true they have the ability to jump.

debounce = false

script.Parent.Touched:connect(
    function(hit)
        if debounce == false then
            debounce = true
            if (hit.Parent:FindFirstChild("Humanoid") ~= nil) then
                local Humanoid = hit.Parent.Humanoid
                Humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false) -- makes player unable to jump
                local player = game.Players:GetPlayerFromCharacter(hit.Parent)
                local sound = script.Parent.Sound:Clone()
                sound.Parent = player.PlayerGui
                sound:Play()
                sound.Ended:wait()
                debounce = false
            end
        end
    end
)
script.Parent.TouchEnded:Connect(
    function(hit)
        debounce = false
        local Humanoid = hit.Parent.Humanoid
        Humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, true) -- makes player able to jump
        local playergui = game.Players:GetPlayerFromCharacter(hit.Parent).PlayerGui
        if playergui.Sound then
            local sound = playergui.Sound
            sound:Destroy()
        end
    end
)


More information: https://developer.roblox.com/en-us/api-reference/function/Humanoid/SetStateEnabled

Ad
Log in to vote
0
Answered by
sleazel 1287 Moderation Voter
3 years ago
Edited 3 years ago

You do not need to disable jumping. You do not need crappy TouchEnded.. What you really need is a reliable way to tell when player has left the area, and when to "reset" the trigger. Best way to achieve that is combination of both Touched and magnitude.

local register = {}

script.Parent.Touched:connect(function(hit)

    local root = hit.Parent:FindFirstChild("HumanoidRootPart")
    if not root then
        return -- touch by non-humanoid
    end

    local player = game.Players:GetPlayerFromCharacter(hit.Parent)
    if not player then
        return --could it be NPC?
    end

    if register[player] then
        return -- this player is already registered
    end

    register[player] = true
    local sound = script.Parent.Sound:Clone()
    sound.Parent = player.PlayerGui
    sound.Looped = true --auto sound looping
    sound:Play()

    --keep player in register until he/she leaves
    --i will put leave distance at 10 studs, but feel free to adjust
    --it should be slightly larger than the trigger part radius
    while hit.Parent and (root.Position - script.Parent.Position).magnitude < 10 do
        wait(1)
    end

    --player has left, destroy sound and remove from register
    sound:Destroy()
    register[player] = nil  

end)

If you do not like this solution (why?) then use

local humanoid = hit.Parent.Humanoid
humanoid.JumpPower = 0

and in touch ended

local humanoid = hit.Parent.Humanoid
humanoid.JumpPower = 50 --default

0
didnt work alialan626 25 — 3y
0
sorry alialan626 25 — 3y

Answer this question