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

How would I make my Stand play an animation when the player is walking? [SOLVED]

Asked by 3 years ago
Edited 3 years ago

I have searched the internet for over an hour now and, sadly, I still cant find a solution.

I am working on a game and I have to create a stand, this stand is a machine. That is why I need it to run with the player!

I have attempted to use MoveDirection (if humanoid.MoveDirection ~= Vector3.new(0,0,0) then) but if the player switches directions the animation plays again. I have tried humanoid.Running but this fires it multiple times, and, of course, also plays again.

What do I mean by play again? Well, while its playing the run animation, it immediately skips to the beginning.

I have a Server Script and Local Script.

Local Script:

local Player = game.Players.LocalPlayer

local rp = game:GetService("ReplicatedStorage")
local Stand = rp:WaitForChild("Stand5Remotes"):WaitForChild("Stand")

local UIS = game:GetService("UserInputService")

local debounce = false
local active = false

UIS.InputBegan:Connect(function(input,isTyping)
    if isTyping then
        return
    elseif input.KeyCode == Enum.KeyCode.Q then
        if debounce == false and active == false then
            debounce = true

            Stand:FireServer(active)
        end
    end
end)

UIS.InputBegan:Connect(function(input,isTyping)
    if isTyping then
        return
    elseif input.KeyCode == Enum.KeyCode.Q then
        if debounce == true and active == false then
            active = true

            Stand:FireServer(active)
        end
    end
end)

Stand.OnClientEvent:Connect(function()
    wait(1)
    debounce = false
    active = false
end)

Server Script:

local rp = game:GetService("ReplicatedStorage")
local Stand = rp:WaitForChild("Stand5Remotes"):WaitForChild("Stand")
local TweenService = game:GetService("TweenService")

Stand.OnServerEvent:Connect(function(player,active)
    if active == false then
        local Character = player.Character
        local Humanoid = Character:WaitForChild("Humanoid")
        local HumanoidRP = Character:WaitForChild("HumanoidRootPart")

        local Folder = Instance.new("Folder",workspace)
        Folder.Name = player.Name.." Stand"

        local Mystand = script:WaitForChild("Dummy"):Clone()
        Mystand.Parent = Folder
        for _, i in pairs(Mystand:GetDescendants()) do
            if i.Name == "Window" and i:IsA("BasePart") then
                i.Transparency = 0.85
            else
                if i:IsA("BasePart") then
                    i.Transparency = 1
                    TweenService:Create(i,TweenInfo.new(.5,Enum.EasingStyle.Linear,Enum.EasingDirection.In,0,false,0),{Transparency = 0}):Play()
                end 
            end
        end

        Mystand:WaitForChild("Root").CFrame = HumanoidRP.CFrame * CFrame.new(0,7,0)

        local animControl = Mystand:WaitForChild("AnimControl")
        local idle = animControl.Animator:LoadAnimation(script:WaitForChild("Idle"))
        idle:Play()
        local plridle = Humanoid.Animator:LoadAnimation(script:WaitForChild("PlrIdle"))
        plridle:Play(.4)

        local run = animControl:LoadAnimation(script:WaitForChild("Run"))


        local weld = Instance.new("ManualWeld")
        weld.Name = "Stand Weld"
        weld.Part0 = Mystand:WaitForChild("Root")
        weld.Part1 = HumanoidRP
        weld.C0 = Mystand:WaitForChild("Root").CFrame:inverse() * HumanoidRP.CFrame
        weld.Parent = weld.Part0

        Humanoid.Died:Connect(function()
            Folder:Destroy()
        end)

        Humanoid.Changed:Connect(function()
            if Humanoid.MoveDirection ~= Vector3.new(0,0,0) then
                run:Play()
            else
                run:Stop()
            end
        end)

    end
end)

Stand.OnServerEvent:Connect(function(player,active)
    if active == true then
        local Character = player.Character
        local HumanoidRP = Character:WaitForChild("HumanoidRootPart")
        local Humanoid = Character:WaitForChild("Humanoid")

        local myStand = workspace:WaitForChild(player.Name.." Stand")

        for _, i in pairs(myStand:GetDescendants()) do
            if i:IsA("BasePart") then
                local Tween = TweenService:Create(i,TweenInfo.new(.5,Enum.EasingStyle.Linear,Enum.EasingDirection.In,0,false,0),{Transparency = 1})
                Tween:Play()
                Tween.Completed:Connect(function()
                    myStand:Destroy()
                end)
            end
        end

        for _, i in pairs(Humanoid:GetPlayingAnimationTracks()) do
            i:Stop(.4)
        end

        Stand:FireClient(player)
    end
end)

Thank you for your time. As always, ask for any more information, and I will reply as soon as possible.

Edit: I have managed to fix it! I used the ROBLOX animation script so it will detect when the player moves!

Answer this question