public override void OnStopClient() // Called on the client when closing connection { DebugLog.DebugWrite("OnStopClient", MessageType.Info); DebugLog.ToConsole("Disconnecting from server...", MessageType.Info); Destroy(GetComponent <RespawnOnDeath>()); Destroy(GetComponent <ServerStateManager>()); Destroy(GetComponent <ClientStateManager>()); QSBPlayerManager.PlayerList.ForEach(player => player.HudMarker?.Remove()); QSBWorldSync.RemoveWorldObjects(); if (WakeUpSync.LocalInstance != null) { WakeUpSync.LocalInstance.OnDisconnect(); } if (_everConnected) { var specificType = QSBCore.IsHost ? QSBPatchTypes.OnServerClientConnect : QSBPatchTypes.OnNonServerClientConnect; QSBPatchManager.DoUnpatchType(specificType); QSBPatchManager.DoUnpatchType(QSBPatchTypes.OnClientConnect); } _everConnected = false; }
public override void OnClientConnect() // Called on the client when connecting to a server { DebugLog.DebugWrite("OnClientConnect", MessageType.Info); base.OnClientConnect(); OnClientConnected?.SafeInvoke(); QSBMessageManager.Init(); gameObject.AddComponent <RespawnOnDeath>(); gameObject.AddComponent <ServerStateManager>(); gameObject.AddComponent <ClientStateManager>(); if (QSBSceneManager.IsInUniverse) { QSBWorldSync.BuildWorldObjects(QSBSceneManager.CurrentScene).Forget(); } var specificType = QSBCore.IsHost ? QSBPatchTypes.OnServerClientConnect : QSBPatchTypes.OnNonServerClientConnect; QSBPatchManager.DoPatchType(specificType); QSBPatchManager.DoPatchType(QSBPatchTypes.OnClientConnect); Delay.RunWhen(() => PlayerTransformSync.LocalInstance, () => new PlayerJoinMessage(PlayerName).Send()); if (!QSBCore.IsHost) { Delay.RunWhen(() => PlayerTransformSync.LocalInstance, () => new RequestStateResyncMessage().Send()); } _everConnected = true; }
public override void OnStopClient() // Called on the client when closing connection { DebugLog.DebugWrite("OnStopClient", MessageType.Info); DebugLog.ToConsole("Disconnecting from server...", MessageType.Info); Destroy(GetComponent <RespawnOnDeath>()); QSBEventManager.Reset(); QSBPlayerManager.PlayerList.ForEach(player => player.HudMarker?.Remove()); RemoveWorldObjects(); QSBWorldSync.OrbSyncList.Clear(); QSBWorldSync.OldDialogueTrees.Clear(); if (_everConnected) { var specificType = QNetworkServer.active ? QSBPatchTypes.OnServerClientConnect : QSBPatchTypes.OnNonServerClientConnect; QSBPatchManager.DoUnpatchType(specificType); QSBPatchManager.DoUnpatchType(QSBPatchTypes.OnClientConnect); } _lobby.CanEditName = true; QSBCore.HasWokenUp = false; IsReady = false; _everConnected = false; }
public override void OnClientConnect(QNetworkConnection connection) // Called on the client when connecting to a server { DebugLog.DebugWrite("OnClientConnect", MessageType.Info); base.OnClientConnect(connection); QSBEventManager.Init(); gameObject.AddComponent <RespawnOnDeath>(); if (QSBSceneManager.IsInUniverse) { WorldObjectManager.Rebuild(QSBSceneManager.CurrentScene); } var specificType = QNetworkServer.active ? QSBPatchTypes.OnServerClientConnect : QSBPatchTypes.OnNonServerClientConnect; QSBPatchManager.DoPatchType(specificType); QSBPatchManager.DoPatchType(QSBPatchTypes.OnClientConnect); _lobby.CanEditName = false; OnNetworkManagerReady?.SafeInvoke(); IsReady = true; QSBCore.UnityEvents.RunWhen(() => QSBEventManager.Ready && PlayerTransformSync.LocalInstance != null, () => QSBEventManager.FireEvent(EventNames.QSBPlayerJoin, _lobby.PlayerName)); if (!QSBCore.IsServer) { QSBCore.UnityEvents.RunWhen(() => QSBEventManager.Ready && PlayerTransformSync.LocalInstance != null, () => QSBEventManager.FireEvent(EventNames.QSBPlayerStatesRequest)); } _everConnected = true; }
public override void OnReceiveRemote() { DebugLog.DebugWrite($" ~~~~ END LOOP - all players are dead ~~~~ "); if (ServerStateManager.Instance.GetServerState() == ServerState.WaitingForAllPlayersToDie) { return; } QSBPatchManager.DoUnpatchType(QSBPatchTypes.RespawnTime); Locator.GetDeathManager().KillPlayer(DeathType.TimeLoop); if (QSBCore.IsHost) { new ServerStateMessage(ServerState.WaitingForAllPlayersToDie).Send(); } }
public void Start() { Helper = ModHelper; DebugLog.ToConsole($"* Start of QSB version {Helper.Manifest.Version} - authored by {Helper.Manifest.Author}", MessageType.Info); NetworkAssetBundle = Helper.Assets.LoadBundle("assets/network"); InstrumentAssetBundle = Helper.Assets.LoadBundle("assets/instruments"); ConversationAssetBundle = Helper.Assets.LoadBundle("assets/conversation"); QSBPatchManager.Init(); gameObject.AddComponent <QSBNetworkManager>(); gameObject.AddComponent <QNetworkManagerHUD>(); gameObject.AddComponent <DebugActions>(); gameObject.AddComponent <ConversationManager>(); gameObject.AddComponent <QSBInputManager>(); gameObject.AddComponent <TimeSyncUI>(); gameObject.AddComponent <RepeatingManager>(); gameObject.AddComponent <PlayerEntanglementWatcher>(); // WorldObject managers gameObject.AddComponent <QuantumManager>(); gameObject.AddComponent <SpiralManager>(); gameObject.AddComponent <ElevatorManager>(); gameObject.AddComponent <GeyserManager>(); gameObject.AddComponent <OrbManager>(); gameObject.AddComponent <QSBSectorManager>(); gameObject.AddComponent <ItemManager>(); gameObject.AddComponent <StatueManager>(); gameObject.AddComponent <PoolManager>(); gameObject.AddComponent <CampfireManager>(); DebugBoxManager.Init(); // Stop players being able to pause Helper.HarmonyHelper.EmptyMethod(typeof(OWTime).GetMethod("Pause")); }