public void Update() { Multiplayer.session?.netClient?.PollEvents(); queue.RunQueue(); if (SteamManager.Initialized) { SteamIntegration.UpdateRichPresence(); } if (Multiplayer.Client == null) { return; } UpdateSync(); if (!Multiplayer.arbiterInstance && Application.isFocused && Time.realtimeSinceStartup - lastCursorSend > 0.05f && TickPatch.skipTo < 0) { lastCursorSend = Time.realtimeSinceStartup; SendCursor(); } if (Multiplayer.Client is SteamBaseConn steamConn && SteamManager.Initialized) { foreach (var packet in SteamIntegration.ReadPackets()) { if (steamConn.remoteId == packet.remote) { Multiplayer.HandleReceive(packet.data, packet.reliable); } } } }
public void Update() { Multiplayer.session?.netClient?.PollEvents(); queue.RunQueue(); if (SteamManager.Initialized) { SteamIntegration.UpdateRichPresence(); } if (Multiplayer.Client == null) { return; } UpdateSync(); if (!Multiplayer.arbiterInstance && Application.isFocused && !TickPatch.Skipping && !Multiplayer.session.desynced) { SendVisuals(); } if (Multiplayer.Client is SteamBaseConn steamConn && SteamManager.Initialized) { foreach (var packet in SteamIntegration.ReadPackets()) { if (steamConn.remoteId == packet.remote) { Multiplayer.HandleReceive(packet.data, packet.reliable); } } } }
static MultiplayerStatic() { Native.InitLmfPtr(); // UnityEngine.Debug.Log instead of Verse.Log.Message because the server runs on its own thread ServerLog.info = str => UnityEngine.Debug.Log($"MpServerLog: {str}"); ServerLog.error = str => UnityEngine.Debug.Log($"MpServerLog Error: {str}"); NetDebug.Logger = new ServerLog(); SetUsername(); if (SteamManager.Initialized) { SteamIntegration.InitCallbacks(); } Log.Message($"Multiplayer version {MpVersion.Version}"); Log.Message($"Player's username: {Multiplayer.username}"); var persistentObj = new GameObject(); persistentObj.AddComponent <OnMainThread>(); UnityEngine.Object.DontDestroyOnLoad(persistentObj); MpConnectionState.SetImplementation(ConnectionStateEnum.ClientSteam, typeof(ClientSteamState)); MpConnectionState.SetImplementation(ConnectionStateEnum.ClientJoining, typeof(ClientJoiningState)); MpConnectionState.SetImplementation(ConnectionStateEnum.ClientPlaying, typeof(ClientPlayingState)); MultiplayerData.CollectCursorIcons(); PersistentDialog.BindAll(typeof(Multiplayer).Assembly); using (DeepProfilerWrapper.Section("Multiplayer MpPatches")) Multiplayer.harmony.DoAllMpPatches(); using (DeepProfilerWrapper.Section("Multiplayer patches")) DoPatches(); Log.messageQueue.maxMessages = 1000; DoubleLongEvent(() => { MultiplayerData.CollectDefInfos(); Sync.PostInitHandlers(); }, "Loading"); // Right before the events from HandleCommandLine HandleRestartConnect(); HandleCommandLine(); if (Multiplayer.arbiterInstance) { RuntimeHelpers.RunClassConstructor(typeof(Text).TypeHandle); } using (DeepProfilerWrapper.Section("Multiplayer TakeModDataSnapshot")) JoinData.TakeModDataSnapshot(); using (DeepProfilerWrapper.Section("MultiplayerData PrecacheMods")) MultiplayerData.PrecacheMods(); if (GenCommandLine.CommandLineArgPassed("profiler")) { SimpleProfiler.Print("mp_prof_out.txt"); } }