The sword Rotation gets messed up when I try to sheathe it while walking. If I sheathe it standing still it works fine like this

https://gyazo.com/74c616449fd7f56b07722bd07e6e3119

But If I walk then the sword rotation gets messed up like this

https://gyazo.com/a608a3b138a900c9a45a952527bac02a

Code:

equipAnim = script.Parent:WaitForChild("EquipAnim5")
idleAnim = script.Parent:WaitForChild("IdleAnim3")
sheatheAnim = script.Parent:WaitForChild("SheatheAnim")
player = game.Players.LocalPlayer
rootPart = player.Character:FindFirstChild("HumanoidRootPart")
equipped = true

rightArm = player.Character:FindFirstChild("Right Arm")
katana = player.Character.Katana


function drawSword(inputObject, gameProcessedEvent)
	if inputObject.KeyCode == Enum.KeyCode.E then
		if equipped then
			equipped = false
			
			local playEquipAnim = player.Character.Humanoid:LoadAnimation(equipAnim)
			playEquipAnim:Play()
			
			local oldWeld = katana:FindFirstChild("Weld")
			
			if oldWeld then
				oldWeld:Destroy()
			end
			
			katana.CFrame = player.Character:WaitForChild("Right Arm").CFrame * CFrame.new(0, -1, -1.7)
			katana.CFrame = katana.CFrame * CFrame.Angles(59.7, 0, -190)


			local newWeld = Instance.new("Weld")
			newWeld.Name = "Weld"
			newWeld.Part0 = rightArm
			newWeld.C0 = rightArm.CFrame:inverse()
			newWeld.Part1 = katana
			newWeld.C1 = katana.CFrame:inverse()
			newWeld.Parent = katana


			wait(1.1)
			
			playIdleAnim = player.Character.Humanoid:LoadAnimation(idleAnim)
			playIdleAnim:Play()
		end
	end
end

game:GetService("UserInputService").InputBegan:connect(drawSword)

function sheatheSword(inputObject, gameProcessedEvent)
	if inputObject.KeyCode == Enum.KeyCode.E then	
		if equipped == false then
			local playSheatheAnim = player.Character.Humanoid:LoadAnimation(sheatheAnim)
			playSheatheAnim:Play()
			
			wait(1.1)

			local equippedWeld = script.Parent:FindFirstChild("Weld")
			if equippedWeld then
				equippedWeld:Destroy()
			end

			katana.CFrame = player.Character:FindFirstChild("Left Leg").CFrame * CFrame.new(-.6, .2, 1.7)
			katana.CFrame = katana.CFrame * CFrame.Angles(.3, 0, 1.5)
			



			local sheatheWeld = Instance.new("Weld")
			sheatheWeld.Name = "Weld"
			sheatheWeld.Part0 = rootPart
			sheatheWeld.C0 = rootPart.CFrame:inverse()
			sheatheWeld.Part1 = katana
			sheatheWeld.C1 = katana.CFrame:inverse()
			sheatheWeld.Parent = katana
			
			playIdleAnim:Stop()

			equipped = true	
		end			
	end
end

game:GetService("UserInputService").InputBegan:connect(sheatheSword)

How do I make it so the rotation doesn't get messed up when sheathing while walking?

2 comments

0

Should I just make it so the player's walkspeed is 0 when equipping and sheathing?

0

by setting player walkspeed to 0 when sheating sword seems to have fixed it but if anyone knows how to fix it without changing the walkspeed, I'd love to hear it