I made a gun system for a FilteringEnabled game I'm making. Something's not right, however. The gun is welded perfectly fine in StarterPack. However, when you get a gun from the shop (The Shop uses ReplicatedStorage) The only part that's in the right position is the handle, everything else is a mess. Here's my weld script:

local PartsThatMove = {}
local StopWeld = false

function Weld(x, y)
	for i,v in pairs(PartsThatMove) do
		if y.Name == v then
			local oldweld = script.Parent.Handle:FindFirstChild(y.Name.."Weld")
			if oldweld then
				StopWeld = true
			end
			break
		end
	end
	if StopWeld then return end
	local W = Instance.new("Weld")
	W.Name = y.Name.."Weld"
	W.Part0 = x
	W.Part1 = y
	local CJ = CFrame.new(x.Position)
	local C0 = x.CFrame:inverse()*CJ
	local C1 = y.CFrame:inverse()*CJ
	W.C0 = C0
	W.C1 = C1
	W.Parent = x
	local CFValue = Instance.new("CFrameValue", script.Parent.Bin.MPW)
	CFValue.Value = W.C1
	CFValue.Name = y.Name.."C1"
end

function Get(A)
	if A:IsA("BasePart") and A.Name ~= "Handle" then
		Weld(script.Parent:WaitForChild("Handle"), A)
		print("Welded")
		StopWeld = false
		A.Anchored = false
		A.CanCollide = false
	elseif not A:IsA("BasePart") then
		local C = A:GetChildren()
		for i=1, #C do
		Get(C[i])
		end
	elseif A.Name == "Handle" then
		A.Anchored = false
		A.CanCollide = false
	end
end

function Finale()
	Get(script.Parent)
end

script.Parent.Equipped:connect(Finale)
script.Parent.Unequipped:connect(Finale)
Finale()

I just added in the print("Welded") part. I'm about to test it