OK, ReadyPlayerSelections DOES need to be a ulong UserID. NetworkUsers don't always arrive on the client before the game mode deserialize. Easier to store a userID than to find the actual user object immediately and try to guarantee the order.
Removed all static events, variables and methods from GameClientInternet and refactored all references so that we can use multiple instances of it going forward.
Added a temporary InternetClientProxy static class that redirects everything to a GameClientInternet instance, because everything expects a valid reference at startup.
Added an editor preview action for CustomisationItemView.
Separated confetti cannon particle effects into a prefab.
Confetti cannon now creates the effect from an animation event.
Set confetti cannon cooldown and enabled delayed destroy on the effect.