InsertService should not be a replicating container

As @Seranok has mentioned before, InsertService is a replicating container. Anything and everything is replicated to clients, even if inserted on the server. This is problematic because assets that aren’t even visible begin to be downloaded by the client, clogging the queue if there are a lot of assets in the inserted model. It also exposes content that is meant to be server-exclusive.

For instance, imagine the loadout screen for Phantom Forces: players are in that sort of room between matches, but they can customize it with various items, and there are a lot of assets to choose from so generally the rooms are unique. Other players can’t see these rooms, but they still have to download all the assets if they’re inserted serverside. Inserting clientside just asks the server to insert serverside.

The only way to insert something to the server without replicating to all clients is to require a published module by ID, but because MainModules can be required by anyone, this isn’t necessarily secure. InsertService should just not replicate in the first place – if I want inserted objects to replicate, I’ll parent them to a replicating container explicitly.

6 Likes

Better idea: don’t add inserted assets to the game tree at all. Does nothing but create unintended side-effects.

9 Likes