FilteringEnabled Improvements

This was posted by Radioaktiivinen and I thought it needed more attention. It explains all the problems I have with FilteringEnabled that haven’t really been formally addressed.

The problem with FilteringEnabled is that it forces the developer to deal with all that prediction/interpolation/extrapolation that ‘real’ developers spend a lot of time with, and they have more control than us.

The problem why we have trouble doing those things properly is that roblox only gives us partial control over networking.

Primarily, we cant easily make server-local parts. FilteringEnabled is just a hacky all-or-nothing way to make client stuff local, and it even throws a warning if you use it to do localparts, and the parts stop being local if you turn the feature off.
A ‘Replicates’ checkbox would be more flexible. Using one, EVERY machine could have its own representation of a particular object (lets say a tool). The local player can have a local, smooth version of the tool. The server can have a simplified single block version. The other clients can render the tool if you are close enough.

Lets take another example, a car. The only way to make it smooth to the client, is to have the client car be 100% local. But we also need a server car. We cant have both currently because server overrides client. The client then would tell the server ‘I drove here’ and if it doesnt seem too crazy, the server agrees and directs the car to drive there the same route.

Even better would be selective replication. So only the local player would have a local version of the tool. The local player would tell the server about the tool, and the server makes it own version, and replicates it to all but the local player. Less work.

-A ‘Replicates’ checkbox
-A ‘IgnoreNetworkChanges’ checkbox that allows you to prevent the server from affecting some object locally? (eg the tool you are holding so the server side tool affects all other clients but not you.)?[/quote]

EDIT: Original post.

I’d also like to point out that using :Destroy() on a weld that is a descendant of the character completely bypasses FilteringEnabled and updates the change on the server as well. It only behaves this way if the weld is in the character though – I had to group server welds outside of the character in the workspace so that they could be replaced by the client for smoother animations.

How I make smooth vehicles with filtering is:

  1. Having the vehicle be completely local.
  2. Every frame send position and orientation to Server via Remote Event
  3. On the Server, Creates an invisible 1x1x1 part for each Client and moves it with a bodygyro and bodyposition to location received by Client
  4. On Clients, Create a local vehicle for every 1x1x1 part on the server, but your own, and weld it to the 1x1x1 part on the server
  5. ???
  6. Profit

An example place can be found here.

if the place is closed it’s because my BC runs out in 7 hours and I haven’t renewed yet.