Ok so i am making a animation pack and i need to know when the player stops walking this is what i have so far
local Players = game:GetService("Players") local player = Players.LocalPlayer local RS = game:GetService("ReplicatedStorage") local RStop = RS.RStoppedWalking local Player = game.Players.LocalPlayer local PlayerC = Player:GetChildren() local Character = PlayerC.Character local Humanoid = PlayerC:WaitForChild("Humanoid") local VectorZero = Vector3.new(0, 0, 0) local Walking = false while true do wait() print("looping") if Humanoid.MoveDirection ~= VectorZero then Walking = true else Walking = false end end if Walking == false then print("If walk = false") RStop:FireServer(Walking) end
it is returning a error that says nil value ik its something to do with humanoid and i cant figure it out my discord is bily117#5405 if u know anything please dm me or comment or awnser the question
The error you're getting is because you're getting the Character incorrectly. You don't need to get the player's children to get the character because the character isn't a child of the player, it's a property that contains a reference to the character model which is parented to the workspace. So, you can just do Player.Character
.
Also, your code is not going to work properly because your if statement is outside of the loop and is not being constantly checked by anything. Also, because you have a while loop, it's never actually going to get to the if statement because it's looping indefinitely.
You don't need a while loop for this though, you can use the function GetPropertyChangedSignal to detect when the MoveDirection
property has changed. This is a lot better way of doing this because it won't constantly use resources when nothing is being changed.
I also find Attributes to be very helpful in these types of situations because attributes, unlike variables, you can detect when a specific attribute has changed by using the function GetAttributeChangedSignal.
local Player = game.Players.LocalPlayer local Character = Player.Character or Player.CharacterAdded:Wait() local Humanoid = Character:WaitForChild("Humanoid") local VectorZero = Vector3.new(0, 0, 0) Character:GetAttributeChangedSignal("Walking"):Connect(function() if Character:GetAttribute("Walking") then print("Player is walking") else print("Player has stopped") end end) Humanoid:GetPropertyChangedSignal("MoveDirection"):Connect(function() if Humanoid.MoveDirection ~= Vector3.new(0,0,0) then Character:SetAttribute("Walking", true) else Character:SetAttribute("Walking", false) end end)
You could also try using the Humanoid.Running event which does exactly the same as the code above. This event has a parameter which is the speed the character is moving at, which you could use to detect when they're standing still, running, etc...
Example
local Player = game.Players.LocalPlayer local Character = Player.Character or Player.CharacterAdded:Wait() local Humanoid = Character:WaitForChild("Humanoid") Humanoid.Running:Connect(function(Speed) if Speed > 0 then print("Player is moving") else print("Player has stopped") end end)
There is a very simple and easy way to detect if a player is moving or not. It's called Magnitude and it's located in the humanoid. For example, I use Magnitude in my run scripts.
local UIS = game:GetService('UserInputService') local Player = game.Players.LocalPlayer local Character = game.Players.LocalPlayer.Character UIS.InputBegan:Connect(function(input)--When a player has pressed LeftShift it will play the animation and it will set the normal walking speed (16) to 35. if input.KeyCode == Enum.KeyCode.LeftShift then **if Character.Humanoid.MoveDirection.Magnitude > 0 then** Character.Humanoid.WalkSpeed = 26 local Anim = Instance.new('Animation') Anim.AnimationId = 'rbxassetid://7162914367' PlayAnim = Character.Humanoid:LoadAnimation(Anim) PlayAnim:Play() else print("The player is not moving.") end end end) UIS.InputEnded:connect(function(input) if input.KeyCode == Enum.KeyCode.LeftShift then Character.Humanoid.WalkSpeed = 16 PlayAnim:Stop() end end)
In your script, It could be...
local Character = game.Players.LocalPlayer.Character local RS = game:GetService("ReplicatedStorage") local RStop = RS.RStoppedWalking if Character.Humanoid.MoveDirection.Magnitude > 0 then RStop:FireServer(Walking) end)