So. I have made a Morph which has a model, a script, parts and unions and a script that should add it to the player. But, I keep getting the error:
15:42:08.307 - bad cast 15:42:08.308 - Script 'Workspace.Model.Model.Spawn.Torso', Line 13 -- suitw.Part1 = G[i] 15:42:08.309 - Stack End
function onTouch(hit) if hit.Parent:findFirstChild("Humanoid") ~= nil and hit.Parent:findFirstChild("BTorso") == nil then local suit = game.ServerStorage["BTorso"]:clone() suit.Parent = hit.Parent local G = suit:getChildren() for i=1, #G do if G[i].className == "Part" or "Unionoperation" or "Model" or "Script" then local suitW = Instance.new("Weld") suitW.Part0 = suit.MainPart suitW.Part1 = G[i] local autoW = CFrame.new(suit.MainPart.Position) suitW.C0 = suit.MainPart.CFrame:inverse()*autoW suitW.C1 = G[i].CFrame:inverse()*autoW suitW.Parent = suit.MainPart end local bpW = Instance.new("Weld") bpW.Part0 = hit.Parent["Torso"] bpW.Part1 = suit.MainPart bpW.C0 = CFrame.new(0, 0, 0) bpW.Parent = suit.MainPart end local c = suit:getChildren() for i=1, #c do c[i].Anchored = false c[i].CanCollide = false end end end script.Parent.Touched:connect(onTouch)
The Error
bad cast refers to an error on the C side of Lua where an object does not inherit a certain class. Since you are working with Part1 of a Weld object you are required to use a BasePart or something that inherits it, like a Part, WedgePart, Seat, or UnionOperation. Models and Scripts however do not inherit BasePart.
The Cause
Line 8 in your supplied code is causing G[i] to not always inherit BasePart when being set to Part1. Due to how you are using the or
operator the if
statement will always run. This is how Lua interprets that line:
if (G[i].className == "Part") or ("Unionoperation") or ("Model") or ("Script") then
To use the or
operator correctly you'd have to do this:
if G[i].className == "Part" or G[i].className == "Unionoperation" or G[i].className == "Model" or G[i].className == "Script" then
The Solution
Since you only have to check if G[i]
inherits BasePart, you can use the :IsA()
method.
if G[i]:IsA("BasePart") then