There's not a maximum number of parts. Several years ago, you generally wanted to avoid more than 4000 parts in a place because of the time it took to launch the game and the power required behind to run the graphics of it. Now, it's considerably more.
What you have will work as a beginning, although is designed poorly (in the sense of "good code" vs "bad code")
The "good" version of this would look like this:
function scan(check)
return #check:GetChildren();
end
print(scan(workspace));
This change lets us use scan for other things other than just the first thing that came to mind (printing). Also note that we use GetChildren instead of children now, just because that is the modern version of it. As far as I know there is no functional difference.
However, this will only count the children of the Workspace. If we have a group model of parts, that will contribute only 1 to the count of parts. We need to use a recursive approach. Specifically:
number of objects in model = number of children in model + number of objects in each child
We can write that like this:
function count(model)
local number = 0;
local children = model:GetChildren();
for _,child in pairs(children) do
number = number + count(child) + 1;
end
return number;
end
Note that this counts all objects, not just parts; including models, decals, meshes, scripts, lights, etc. If we only wanted to count parts we could do this:
function count(model)
local number = 0;
if model:IsA("BasePart") then
number = 1;
end
local children = model:GetChildren();
for _,child in pairs(children) do
number = number + count(child);
end
return number;
end
Alternatively, you can use (via command line only) this built in method to do it. (and game:ClearMessage() to wipe it away)