Equipping tool with constraint flings me back to its previous position

Equipping a tool with a constraint in it (i.e HingeConstraint, RopeConstraint…) pulls me toward wherever the constraint was when last equipped. A player travelling a good distance would then be pulled back to wherever they were last when they equipped it. So far facing this with both a RopeConstraint and a HingeConstraint and not been able to find any guidance online on this. No solution found and workarounds I’ve tried haven’t worked. Got two examples:

HingeConstraint
I have a compass tool with a needle that is attached to its case with a HingeConstraint; this will then calculate an angle between the compass and north and apply that as a TargetAngle (tried to do this first with CFrame… got nowhere really).

Equipping it by the spawn + walking a distance and you’ll see my character float back + the needle shooting towards it. Setting the Position of the needle to an offset of the case while the tool is in the backpack doesn’t work.

RopeConstraint
Another instance with a fishing rod that uses a RopeConstraint. The float is first welded to the tool. The player then does a mouse click, when the weld is disabled and the rope extends by increments until hitting the sea level. Then what the player is meant to do is wait until a fish appears, they click, the rope retracts and welds itself back to the tool. Of course, players may just unequip without having clicked and walk away, which will then do this if they equip it a distance away (–on Unequipped() the weld is enabled once again but that doesn’t seem to do anything):

function Unequipped()
	if cloneMesh ~= nil then
		cloneMesh:Destroy()
	end
	for partIndex = 1, #floatTextures  do
		floatTextures[partIndex].Transparency = 0
	end		
	Caught = false
	FP1.Enabled = false
	FP2.Enabled = false
	FP3.Enabled = false
	Float.CanCollide = false
	Float.RopeConstraint.Length = 1 --lengthening the rope back to 1
	Float.WeldConstraint.Enabled = true --welding it back even when unequipped does not work
	Humanoid.JumpPower = 50
	Humanoid.WalkSpeed = 16
	Fishing = false
end

I’ve also tried to set the CFrame.Position of the needle to be a constant offset off of the handle when it’s in the backpack like this:

while backpackFlag and wait() do
	tool.Needle.Position = tool.Handle.Position + tool.Needle.Position
end

Also doesn’t fix the issue and instead glitches out (needle just disappears).

No idea how to solve this. Hoping for some sort of solution rather than changing the use of constraints as I much prefer them to working with CFrame and the like. Anyone else experienced this + figured out some workarounds/ideas?

2 Likes

I noticed that when walking with the tool in my backpack, the handle doesn’t update position. Same thing is happening with me.

Was a solution ever found? Returned to this project and not been able to find anything.

I don’t think so, but, you may be able to delete a constraint when unequipping a tool, and then create a new constraint when equipping a tool.