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;
        }
Exemple #3
0
        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;
        }
Exemple #4
0
        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;
        }
Exemple #5
0
        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"));
        }