Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How could I fix this script so Unions can be welded?

Asked by
cboyce1 40
10 years ago

Where it says, if A.className == "UnionOperation" then and so forth, is what I have tried to edit. I'm trying to get a union part to weld, but it won't. How can I fix this?

function Weld(x,y)
    local W = Instance.new("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
end

function Get(A)
**  if A.className == "Part" then
        Weld(script.Parent.Handle, A)
        A.Anchored = false
    if A.className == "UnionOperation" then
        Weld(script.Parent.Handle, A)
        A.Anchored = false**
    else
        local C = A:GetChildren()
        for i=1, #C do
        Get(C[i])
        end
    end
end

function Finale()
    Get(script.Parent)
end

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

1 answer

Log in to vote
2
Answered by
BlueTaslem 18071 Moderation Voter Administrator Community Moderator Super Administrator
10 years ago

When joining multiple conditions together, you need to use elseif for the later ones.

...
    if A.className == "Part" then
        Weld(script.Parent.Handle, A)
        A.Anchored = false
    elseif A.className == "UnionOperation" then
        Weld(script.Parent.Handle, A)
        A.Anchored = false**
    else
        local C = A:GetChildren()
...

In this case, though, this is redundant. The operation done on it is the same. Let's just use or and a single if:

...
    if A.className == "Part" or A.className == "UnionOperation" then
        Weld(script.Parent.Handle, A)
        A.Anchored = false
    else
        local C = A:GetChildren()
...

Let's be more general. UnionOperations and Parts are both BaseParts.

We can test if something is a BasePart using the :IsA method:

...
    if A:IsA("BasePart") then
        Weld(script.Parent.Handle, A)
        A.Anchored = false
    else
        local C = A:GetChildren()
...

Much shorter, cleaner, and more intuitive.

0
It worked! Thank you so much!!!! cboyce1 40 — 10y
Ad

Answer this question