I just solved this issue myself, no need to answer it.
Grammar note: I would've tabbed my paragraphs, but then ScriptingHelpers shows it as a code block
So, a few months ago I made a gun system so I could make FE guns and sell them, like usual. Then I decided to make a dedicated gun system for my dev team. It's the same exact setup for all the welds and everything, just how the system reads animation data. That's the only difference. Yet, for some reason, it acts in an entirely different way.
The method is simply something that changes a tool's grip from the right hand to the left hand, that way you can move the right hand freely without moving the tool, but when you move the left hand, the tool moves.
TL;DR: A method I made that switches which hand you hold the gun with is going insane
Here's the method in action (Focus on the part of the reload animation where he chambers the rifle)
Here's the method in complete insanity
Here's the code snippet in BOTH SYSTEMS
local LeftGrip = false
function SwitchHands()
local Grip = RArm:FindFirstChild("RightGrip")
if LeftGrip == false then
Grip.Part1 = nil
LeftGrip = Weld(LArm, Handle)
else
LeftGrip:Destroy()
LeftGrip = false
Grip.Part1 = Handle
end
end
What the heck is going on here? I'm so confused!

2 comments
My problem with this is, I'm moving the gun with the left hand, that and if you sprint while reloading, the gun will float there while the arms reload and go into sprint position
Perhaps consider animating based on dynamic positions. So that arm would always reach for certain part on a gun, instead of a hardcoded offset from torso or sort of like that.