Hey scriptinghelpers, this is the old ROBLOX animation script for characters script that I've redone. I'm having some problems with only one thing. The slash animation when I'm using swords (the linked sword by ROBLOX to be specific is the one I tested), just doesn't work. It keeps adding a new value every time but, the animation doesn't work. Eventually after clicking so many times it lunges. Below you will find the animate tool function and the whole script. Thanks for the help in advance! I really appreciate it. I'm only here to learn. I say 2010 because, that's the year I first played ROBLOX so I remember it.
The solution to the problem I forgot to say "className" I just put name.
The function from a Local Script inside of a Script inside of ServerScriptStorage
function animateTool() if (toolAnim == "None") then RightShoulder:SetDesiredAngle(1.57) return end if (toolAnim == "Slash") then RightShoulder.MaxVelocity = 0.5 RightShoulder:SetDesiredAngle(0) return end if (toolAnim == "Lunge") then RightShoulder.MaxVelocity = 0.5 LeftShoulder.MaxVelocity = 0.5 RightHip.MaxVelocity = 0.5 LeftHip.MaxVelocity = 0.5 RightShoulder:SetDesiredAngle(1.57) LeftShoulder:SetDesiredAngle(1) RightHip:SetDesiredAngle(1.57) LeftHip:SetDesiredAngle(1) return end end
The full script just incase you need it.
function waitForChild(parent, childName) local child = parent:FindFirstChild(childName) if child then return child end while true do child = parent.ChildAdded:Wait() if child.Name == childName then return child end end end local Figure = script.Parent local Torso = waitForChild(Figure, "Torso") local RightShoulder = waitForChild (Torso, "Right Shoulder") local LeftShoulder = waitForChild (Torso, "Left Shoulder") local RightHip = waitForChild (Torso, "Right Hip") local LeftHip = waitForChild (Torso, "Left Hip") local Neck = waitForChild (Torso, "Neck") local Humanoid = waitForChild (Figure, "Humanoid") local pose = "Standing" local toolAnim = "None" local toolAnimTime = 0 local jumpMaxLimbVelocity = 0.75 function onRunning(speed) if speed > 0 then pose = "Running" else pose = "Standing" end end function onDied() pose = "Dead" end function onJumping() pose = "Jumping" end function onClimbing() pose = "Climbing" end function onGettingUp() pose = "GettingUp" end function onFreeFall() pose = "FreeFall" end function onFallingDown() pose = "FallingDown" end function onSeated() pose = "Seated" end function onPlatformStanding() pose = "PlatformStanding" end function onSwimming(speed) if speed > 0 then pose = "Running" else pose = "Standing" end end function moveJump() RightShoulder.MaxVelocity = jumpMaxLimbVelocity LeftShoulder.MaxVelocity = jumpMaxLimbVelocity RightShoulder:SetDesiredAngle(3.14) LeftShoulder:SetDesiredAngle(-3.14) RightHip:SetDesiredAngle(0) LeftHip:SetDesiredAngle(0) end function moveFreeFall() RightShoulder.MaxVelocity = jumpMaxLimbVelocity LeftShoulder.MaxVelocity = jumpMaxLimbVelocity RightShoulder:SetDesiredAngle(3.14) LeftShoulder:SetDesiredAngle(-3.14) RightHip:SetDesiredAngle(0) LeftHip:SetDesiredAngle(0) end function moveSit() RightShoulder.MaxVelocity = 0.15 LeftShoulder.MaxVelocity = 0.15 RightShoulder:SetDesiredAngle(3.14/2) LeftShoulder:SetDesiredAngle(-3.14/2) RightHip:SetDesiredAngle(3.14/2) LeftHip:SetDesiredAngle(-3.14/2) end function getTool() for _, kid in ipairs(Figure:GetChildren()) do if kid.ClassName == "Tool" then return kid end end return nil end function getToolAnim(tool) for _, c in ipairs (tool:GetChildren()) do if c.Name == "toolanim" and c.className == "StringValue" then return c end end return nil end function animateTool() if (toolAnim == "None") then RightShoulder:SetDesiredAngle(1.57) return end if (toolAnim == "Slash") then RightShoulder.MaxVelocity = 0.5 RightShoulder:SetDesiredAngle(0) return end if (toolAnim == "Lunge") then RightShoulder.MaxVelocity = 0.5 LeftShoulder.MaxVelocity = 0.5 RightHip.MaxVelocity = 0.5 LeftHip.MaxVelocity = 0.5 RightShoulder:SetDesiredAngle(1.57) LeftShoulder:SetDesiredAngle(1) RightHip:SetDesiredAngle(1.57) LeftHip:SetDesiredAngle(1) return end end function move(time) local amplitude local frequency if (pose == "Jumping") then moveJump() return end if (pose == "FreeFall") then moveFreeFall() return end if (pose == "Seated") then moveSit() return end local climbFudge = 0 if (pose == "Running") then if (RightShoulder.CurrentAngle > 1.5 or RightShoulder.CurrentAngle < -1.5) then RightShoulder.MaxVelocity = jumpMaxLimbVelocity else RightShoulder.MaxVelocity = 0.15 end if (LeftShoulder.CurrentAngle > 1.5 or LeftShoulder.CurrentAngle < -1.5) then LeftShoulder.MaxVelocity = jumpMaxLimbVelocity else LeftShoulder.MaxVelocity = 0.15 end amplitude = 1 frequency = 9 elseif (pose == "Climbing") then RightShoulder.MaxVelocity = 0.5 LeftShoulder.MaxVelocity = 0.5 amplitude = 1 frequency = 9 climbFudge = 3.14 else amplitude = 0.1 frequency = 1 end desiredAngle = amplitude * math.sin(time*frequency) RightShoulder:SetDesiredAngle(desiredAngle + climbFudge) LeftShoulder:SetDesiredAngle(desiredAngle - climbFudge) RightHip:SetDesiredAngle(-desiredAngle) LeftHip:SetDesiredAngle(-desiredAngle) local tool = getTool() if tool then animStringValueObject = getToolAnim(tool) if animStringValueObject then toolAnim = animStringValueObject.Value animStringValueObject.Parent = nil toolAnimTime = time + .3 end if time > toolAnimTime then toolAnimTime = 0 toolAnim = "None" end animateTool() else toolAnim = "None" toolAnimTime = 0 end end Humanoid.Died:Connect(onDied) Humanoid.Running:Connect(onRunning) Humanoid.Jumping:Connect(onJumping) Humanoid.Climbing:Connect(onClimbing) Humanoid.GettingUp:Connect(onGettingUp) Humanoid.FreeFalling:Connect(onFreeFall) Humanoid.FallingDown:Connect(onFallingDown) Humanoid.Seated:Connect(onSeated) Humanoid.PlatformStanding:Connect(onPlatformStanding) Humanoid.Swimming:Connect(onSwimming) local runService = game:GetService("RunService"); while Figure.Parent ~= nil do local _, time = wait(0.1) move(time) end