Proposal:Sync worlds

From Multi Theft Auto: Wiki
Revision as of 01:59, 27 December 2010 by EAi (talk | contribs)
Jump to navigation Jump to search

Currently we sync pretty much everything to everyone. We do reduce the quality of the sync somewhat for distant players, but often this isn't relevant.

Here's a proposed solution someone might like to implement to greatly reduce the bandwidth and CPU usage of servers and clients, when servers are configured to support it.

Solution

  • Add the concept of 'sync worlds' (need a better name).
  • These can work alongside dimensions.
  • Each dimension is in exactly one sync world (there's one by default that all dimensions are in).
  • Players in a sync world receive updates from all the elements that change in that sync world.
  • Elements not in the sync world the player is in aren't synced.
  • When a player switches between two sync worlds, all the elements that have been modified since they were last in that sync world are sent to that client.
  • During the 'resync', a loading screen or indicator is shown.
  • The default behaviour would not use this new feature.

Technically

  • Add a list that stores 'sync world id' and a timestamp to the player class. This stores the last time a player was sent information about an element in that particular sync world.
  • Add a timestamp to each element that stores the last time that element was updated
  • When we modify an element, update the timestamp
  • Need to consider the variety of ways that elements are synced - keysync, packets, RPC etc.
  • Add a function, e.g. 'setDimensionSyncWorld' to specify the sync world a dimension belongs in.