So I have a script that merges smoke parts (balls) to prevent lag. When I run it, it works fine at first, but then it quickly grows exponentially and makes some of the parts larger than the map. I think it might be due to the script firing in both of the colliding parts, but I'm not sure, and I don't know how to fix it. Here is the code:
repeat wait() until script.Parent.Name == "Smoke" script.Parent.Touched:Connect(function(part) if part.Name == "Smoke" then local smoke = Instance.new("Part",game.Workspace) smoke.Shape = Enum.PartType.Ball local volume1 = ((script.Parent.Size.X/2)^3)*math.pi*4/3 local volume2 = ((part.Size.X/2)^3)*math.pi*4/3 local diameter = ((((volume1+volume2)*3)/(4*math.pi))^(1/3))*2 smoke.Size = Vector3.new(diameter,diameter,diameter) smoke.Position = ((script.Parent.Position+part.Position)/2)-Vector3.new(0,(script.Parent.Size+part.Size)/2,0) smoke.Name = "Smoke" smoke.BrickColor = BrickColor.new("Smoky grey") local BodyForce = Instance.new("BodyForce",smoke) BodyForce.Force = Vector3.new(0,600*((smoke.Size.X/2)^3)*4/3*math.pi,0) smoke.TopSurface = Enum.SurfaceType.Smooth smoke.BottomSurface = Enum.SurfaceType.Smooth smoke.Transparency = 0.25 local SmokeColorScript = game.Workspace.SmokeColorScript:Clone() SmokeColorScript.Parent = smoke local SmokeCollisionScript = game.Workspace.SmokeCollisionScript:Clone() SmokeCollisionScript.Parent = smoke local StopSmokeScript = game.Workspace.StopSmokeScript:Clone() StopSmokeScript.Parent = smoke part:Destroy() script.Parent:Destroy() end end)