Weld Disobeying RootPriority

I may sound really stupid right now, and the answer might be obvious, but this problem has been plaguing my development for around 2 hours now. This problem causes the two characters to not be able to move, but i want the first character to be able to move, the second should not be able to move.

I am trying to make a script that takes a second player within range and welds their character to the first player, who activated the tool. I have it look through all parts on the first character holding the tool to set its RootPriority to 10, the second character has it set to one and sets the parts Massless value to true but the weld that is inserted into the first players’ HumanoidRootPart completely ignores the RootPriority

Strange enough when i test the game and set the root priority on the first player to a completely random amount WHILE PLAYING above 1, it randomly works, why?

local function GRAB (Char, PL)
	for i,v in pairs(script.Parent.Parent.Parent:GetChildren()) do
		if v.ClassName == "Part" then
			v.RootPriority = 10
		end
	end
	
	local Weld = Instance.new("Weld")
	Weld.Parent = script.Parent.Parent.Parent:WaitForChild("HumanoidRootPart")
	Weld.Part0 = Weld.Parent
	Weld.Part1 = Char:WaitForChild("Torso")
	Weld.C0 = CFrame.new(0,0,-1)
	
	local Hum = Char:WaitForChild("Humanoid")
	Hum.JumpPower = 0
	Hum.WalkSpeed = 0
	
	for i,v in pairs(Char:GetChildren()) do
		if v.ClassName == "Part" then
			v.RootPriority = 1
			v.Massless = true
		end
	end
	Char.Parent = script.Parent.Parent.Parent
	
	local LocalHum = script.Parent.Parent.Parent:WaitForChild("Humanoid")
	local Animator = LocalHum:FindFirstChildOfClass("Animator")
	if Animator then
		local Animin = Instance.new("Animation")
		Animin.AnimationId = "rbxassetid://9765600980"
		
		local Track = Animator:LoadAnimation(Animin)
		repeat wait(.05) until Track.Length ~= 0
		Track:Play()
		Track.Looped = true
	end
end