Hi! I was thinking perhaps using Replicated Storage might do the trick here, since every client will have a copy of the items from Replicated Storage, and I believe you can still access parts through the client through the client’s copy of Replicated Storage. This shouldn’t affect the server since it is all client sided, but if you need to update the server, you can always utilize Remote Events to update the server. Additionally, I am pretty sure the client has their own copy of workspace as well, where clients can make changes as they please, which shouldn’t affect the server either. In terms of replicating client actions so other clients can see is something you would need to do server side. Hope this helps!
But I was thinking of storing ALL the parts inside ServerStorage and then writing that code in a LocalScript
game.Players.PlayerAdded:Connect(function(player)
for _, v in pairs(game.ServerStorage:GetChildren()) do
if v:IsA("Part") then
v.Parent = workspace
end
end
end)
Glad to hear it helped! Unfortunately, I don’t think you can access ServerStorage through the Client, so in case you want the Client to access the parts, its best to keep them in Replicated Storage.
However!
You can also make a serverscript to clone the parts into workspace, then I believe you can manipulate the parts without affecting the server or other clients. Because in that case, the LocalScript can access the Client’s workspace.
game.Players.PlayerAdded:Connect(function(player)
for i, v in pairs(game.ReplicatedStorage:GetChildren()) do
if v:IsA("Part") then
local AllParts = v:Clone()
AllParts.Parent = workspace
end
end
end)
Pretty Close! I would remove the game.Players.PlayerAdded:Connect(function() end) since, I believe Client scripts execute automatically, so the script should run no problem and just keep the for loop.