예제 #1
0
        private void Process(ServerJoinInfo msg)
        {
            Log.InGame("Joining server.");

            self.id   = msg.id;
            self.seed = msg.seed;
            Main.Patch();

            StartCoroutine(LaunchGameAsync(msg));
        }
예제 #2
0
파일: State.cs 프로젝트: senlace/shinkai
        public State()
        {
            gameTime = new GameTime();
            history  = new History();

            var random = new System.Random();

            serverInfo                = new ServerJoinInfo();
            serverInfo.seed           = random.Next();
            serverInfo.spawnPosition  = new UnityEngine.Vector3(6.6f, 1.9f, 89.6f);
            serverInfo.globalRootGuid = GetGuid();
            serverInfo.escapePodGuid  = GetGuid();
            serverInfo.fabricatorGuid = GetGuid();
            serverInfo.medkitGuid     = GetGuid();
            serverInfo.radioGuid      = GetGuid();

            timeUpdate           = new ServerTimeUpdate();
            timeUpdate.timestamp = gameTime.GetCurrentTime();
        }
예제 #3
0
        private IEnumerator LaunchGameAsync(ServerJoinInfo info)
        {
            uGUI_MainMenu.main.OnButtonSurvival();

            yield return(new WaitUntil(() => LargeWorldStreamer.main != null));

            yield return(new WaitUntil(() => LargeWorldStreamer.main.IsReady() || LargeWorldStreamer.main.IsWorldSettled()));

            yield return(new WaitUntil(() => !PAXTerrainController.main.isWorking));

            uGUI.main?.intro?.Stop(true);

            GuidHelper.Set(LargeWorldStreamer.main.globalRoot, info.globalRootGuid);
            GuidHelper.Set(Inventory.main.gameObject, info.equipmentGuid);

            var escapePod = EscapePod.main;

            if (escapePod != null)
            {
                escapePod.StartAtPosition(info.spawnPosition);

                var gameObject = escapePod.gameObject;
                GuidHelper.Set(gameObject, info.escapePodGuid);
                GuidHelper.Set(gameObject.GetComponentInChildren <Fabricator>(true)?.gameObject, info.fabricatorGuid);
                GuidHelper.Set(gameObject.GetComponentInChildren <MedicalCabinet>(true)?.gameObject, info.medkitGuid);
                GuidHelper.Set(gameObject.GetComponentInChildren <Radio>(true)?.gameObject, info.radioGuid);
            }

            UpdateServerTime(info.timestamp);

            Log.Info("Game loaded.");

            RemotePlayer.Initialize();

            self.loaded  = true;
            this.blocked = false;

            DevConsole.disableConsole = true;
            DevConsole.RegisterConsoleCommand(this, "mpdump", false, false);
            DevConsole.RegisterConsoleCommand(this, "mpsave", false, false);
            DevConsole.RegisterConsoleCommand(this, "mpsync", false, false);

            // Since I never got around to synchronizing door state, this is a hack to avoid
            // having to save progress for using ion cubes to open doors.
            foreach (var obj in UnityEngine.Object.FindObjectsOfType <PrecursorTeleporter>())
            {
                obj.isOpen = true;
                obj.ToggleDoor(true);
            }

            //Uncomment for developing.
            //DevConsole.disableConsole = false;
            //GameModeUtils.ActivateCheat(GameModeOption.NoCost);
            //GameModeUtils.ActivateCheat(GameModeOption.NoOxygen);
            //GameModeUtils.ActivateCheat(GameModeOption.NoSurvival);
            //CraftData.AddToInventory(TechType.Builder, 1, false, true);

            Send(new ClientGameReload());

            yield break;
        }