private void Process(ServerJoinInfo msg) { Log.InGame("Joining server."); self.id = msg.id; self.seed = msg.seed; Main.Patch(); StartCoroutine(LaunchGameAsync(msg)); }
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(); }
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; }