local weld = workspace.Weld
local connection
connection = weld.Part0:GetPropertyChangedSignal("Parent"):Connect(function()
if not weld.Part0.Parent then
weld:Destroy()
connection:Disconnect()
end
end)
local connection2
connection2 = weld.Part1:GetPropertyChangedSignal("Parent"):Connect(function()
if not weld.Part1.Parent then
weld:Destroy()
connection2:Disconnect()
end
end)
Welds have an Active property, which (from my testing) is only true when the weld is actually, well, active. This doesn’t fire any signals whenever it’s changed though (neither .Changed or :GetPropertyChangedSignal("Active") gets fired), so you’ll have to poll it in a loop.
It sucks, but it’s authoritative. Less complicated that checking if the parents of the three have changed, for sure.