Duplicate parts delete

Does anyone here have a good script that can remove duplicate parts based on size, position and orientation?

Like if 2 are duped in a single spot, it would delete 1 dupe, etc?

6 Likes

I’m assuming you’d want to delete duplicates that have the same position as eachother?

local num = 0
local Parts = {

}

for i, v in pairs(game.Workspace:GetDescendants()) do
if v:IsA("BasePart") then
num = num + 1
table.insert(Parts, num, v.Position)
for n, k in pairs(Parts) do
if k == v.Position then
v:Destroy()
end
end
end
end

You can swap out the “Position” property with any other property, for example you want to have only one part with a certain orientation you change the “position” to “orientation”

2 Likes

It may be more prudent to ask why there would be duplicate parts in the same position, and fix whatever is duplicating parts. We can often give you a much higher-quality answer if you also include your use-case.

2 Likes

I thought basepart included all: parts, meshparts and unions? i guess i was wrong i’ll edit my script

1 Like

We just have a huge map with trees and train tracks placed and wanted to confirm no parts of exact size and shape and position are not accidentally CTRL+D and not ever dragged from position.

1 Like

You’re right. BasePart accounts for them all… :laughing: My bad…

2 Likes

I edited my script above to fit your description, check if that would work in a studio run.

1 Like

Didn’t do anything. Part count remained the same.

2 Likes

i wasn’t thinking when i wrote that cause that code is absolute garbage

local num = 0
local Parts = {

}

for i, v in pairs(game.Workspace:GetDescendants()) do
if v:IsA("BasePart") then
num = num + 1
table.insert(Parts, num, v.Position)

end
end

for i, v in pairs(game.Workspace:GetDescendants()) do
if v:IsA("BasePart") then
for n, k in pairs(Parts) do
if k == v.Position and not k == v then
v:Destroy()
end
end
end
end

Just a really quick fix but it should do the job assuming you dont use it during runtime

1 Like

Lost 90% of my City progress, Thanks.
I hope ill find a back up or am able to revert to a very recent version,
this might just have been the better choice

3 Likes

You can quite easily revert if you have at any point published to Roblox, autosaves are also usually created every time you play-test it.

2 Likes

yeah i figured it out already, thanks

1 Like

My fault for that, I forgot one key condition.

if k == v.Position and not k == v then
v:Destroy()
end

You should be able to revert from ‘version history’ or sometimes CTRL + Z works too.
Again, my apologies and thanks for pointing it out.

2 Likes

Youve tried to elp so i cannot be mad at you, you cannot CTRL+Z / Undo for loop actions, instead you would need to use some sort of manual action saver that roblox has, not sure what that is called but you have to manually save the for loop as an undo-able action.

1 Like