Exemplo n.º 1
0
        public static Vector2 CalcSize(MyObjectBuilder_Checkpoint checkpoint)
        {
            float width  = checkpoint == null ? 0.9f : 0.65f;
            float height = checkpoint == null ? 0.97f : 0.95f;

            return(new Vector2(width, height));
        }
        private void PrepareComponents(MyObjectBuilder_Checkpoint checkpoint)
        {
            ScriptManager.Init(checkpoint.ScriptManagerData);

            MyDefinitionManager.Static.LoadData(checkpoint.Mods);

            LoadGameDefinition(checkpoint);

            if (!MyDefinitionManager.Static.TryGetDefinition <MyScenarioDefinition>(checkpoint.Scenario, out Static.Scenario))
            {
                Static.Scenario = MyDefinitionManager.Static.GetScenarioDefinitions().FirstOrDefault();
            }
            FixIncorrectSettings(Static.Settings);
            Static.WorldBoundaries = checkpoint.WorldBoundaries;

            // Use whatever setting is in scenario if there was nothing in the file (0 min and max).
            // SE scenarios have nothing while ME scenarios have size defined.
            if (Static.WorldBoundaries.Min == Vector3D.Zero &&
                Static.WorldBoundaries.Max == Vector3D.Zero)
            {
                Static.WorldBoundaries = Static.Scenario.WorldBoundaries;
            }

            LoadDataComponents();
            LoadObjectBuildersComponents(checkpoint.SessionComponents);
        }
Exemplo n.º 3
0
 public virtual void FixSessionComponentObjectBuilders(MyObjectBuilder_Checkpoint checkpoint, MyObjectBuilder_Sector sector)
 {
     if (checkpoint.ScriptManagerData == null)
     {
         checkpoint.ScriptManagerData = (MyObjectBuilder_ScriptManager)checkpoint.SessionComponents.FirstOrDefault(x => x is MyObjectBuilder_ScriptManager);
     }
 }
Exemplo n.º 4
0
#pragma warning restore 649

        private void DoLoadSession(string sessionPath)
        {
            if (!Path.IsPathRooted(sessionPath))
            {
                sessionPath = Path.Combine(MyFileSystem.SavesPath, sessionPath);
            }

            if (!Sandbox.Engine.Platform.Game.IsDedicated)
            {
                MySessionLoader.LoadSingleplayerSession(sessionPath);
                return;
            }
            ulong checkpointSize;
            MyObjectBuilder_Checkpoint checkpoint = MyLocalCache.LoadCheckpoint(sessionPath, out checkpointSize);

            if (MySession.IsCompatibleVersion(checkpoint))
            {
                if (MySteamWorkshop.DownloadWorldModsBlocking(checkpoint.Mods).Success)
                {
                    // MySpaceAnalytics.Instance.SetEntry(MyGameEntryEnum.Load);
                    MySession.Load(sessionPath, checkpoint, checkpointSize);
                    _hostServerForSession(MySession.Static, MyMultiplayer.Static);
                }
                else
                {
                    MyLog.Default.WriteLineAndConsole("Unable to download mods");
                }
            }
            else
            {
                MyLog.Default.WriteLineAndConsole(MyTexts.Get(MyCommonTexts.DialogTextIncompatibleWorldVersion)
                                                  .ToString());
            }
        }
Exemplo n.º 5
0
        private void saveConfigButton_Click(object sender, EventArgs e)
        {
            SaveConfiguration();

            if (!string.IsNullOrEmpty(MySandboxGame.ConfigDedicated.LoadWorld) && !MySandboxGame.ConfigDedicated.SessionSettings.Battle)
            {
                ulong sizeInBytes;
                var   path = MySandboxGame.ConfigDedicated.LoadWorld;

                MyObjectBuilder_Checkpoint checkpoint = MyLocalCache.LoadCheckpoint(path, out sizeInBytes);

                if (!string.IsNullOrWhiteSpace(MySandboxGame.ConfigDedicated.WorldName))
                {
                    checkpoint.SessionName = MySandboxGame.ConfigDedicated.WorldName;
                }

                checkpoint.Settings = m_selectedSessionSettings;

                checkpoint.Mods.Clear();
                foreach (ulong publishedFileId in MySandboxGame.ConfigDedicated.Mods)
                {
                    checkpoint.Mods.Add(new MyObjectBuilder_Checkpoint.ModItem(publishedFileId));
                }

                MyLocalCache.SaveCheckpoint(checkpoint, path);
            }
        }
Exemplo n.º 6
0
        private void gamesListBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (gamesListBox.SelectedIndex != -1)
            {
                ulong sizeInBytes;

                WorldItem worldItem = (WorldItem)gamesListBox.Items[gamesListBox.SelectedIndex];
                ((MyConfigDedicated <MyObjectBuilder_SessionSettings>)MySandboxGame.ConfigDedicated).LoadWorld = worldItem.SessionPath;

                var loadPath = worldItem.SessionPath;
                MyObjectBuilder_Checkpoint checkpoint = MyLocalCache.LoadCheckpoint(loadPath, out sizeInBytes);

                m_selectedSessionSettings = checkpoint.Settings;

                MySandboxGame.ConfigDedicated.Mods.Clear();
                foreach (var mod in checkpoint.Mods)
                {
                    if (mod.PublishedFileId != 0)
                    {
                        MySandboxGame.ConfigDedicated.Mods.Add(mod.PublishedFileId);
                    }
                }

                modIdsTextBox.Text = string.Join(Environment.NewLine, MySandboxGame.ConfigDedicated.Mods.ToArray());

                FillSessionSettingsItems();
            }
        }
Exemplo n.º 7
0
        // Edit game constructor
        public MyGuiScreenWorldSettings(MyObjectBuilder_Checkpoint checkpoint, string path)
            : base(new Vector2(0.5f, 0.5f), MyGuiConstants.SCREEN_BACKGROUND_COLOR, CalcSize(checkpoint))
        {
            MySandboxGame.Log.WriteLine("MyGuiScreenWorldSettings.ctor START");
            EnabledBackgroundFade = true;
            Static = this;

            m_checkpoint = checkpoint;
            if (checkpoint == null || checkpoint.Mods == null)
            {
                m_mods = new List <MyObjectBuilder_Checkpoint.ModItem>();
            }
            else
            {
                m_mods = checkpoint.Mods;
            }
            m_sessionPath = path;
            m_isNewGame   = (checkpoint == null);

            RecreateControls(true);

            // If this screen is loaded from "Saved Games" it should not use the EnvironmentHostility logic
            m_isHostilityChanged = !m_isNewGame;

            MySandboxGame.Log.WriteLine("MyGuiScreenWorldSettings.ctor END");
        }
        public void InitFromCheckpoint(MyObjectBuilder_Checkpoint checkpoint)
        {
            var cooldowns = checkpoint.RespawnCooldowns;

            m_lastUpdate = MySandboxGame.TotalGamePlayTimeInMilliseconds;
            m_globalRespawnTimesMs.Clear();

            if (cooldowns == null)
            {
                return;
            }

            foreach (var item in cooldowns)
            {
                var controllerId = new MyPlayer.PlayerId()
                {
                    SteamId = item.PlayerSteamId, SerialId = item.PlayerSerialId
                };
                var key = new RespawnKey()
                {
                    ControllerId = controllerId, RespawnShipId = item.RespawnShipId
                };
                m_globalRespawnTimesMs.Add(key, item.Cooldown + m_lastUpdate, immediate: true);
            }
        }
        private void PrepareBaseSession(MyObjectBuilder_Checkpoint checkpoint, MyObjectBuilder_Sector sector)
        {
            ScriptManager.Init(checkpoint.ScriptManagerData);
            MyDefinitionManager.Static.LoadData(checkpoint.Mods);

            LoadGameDefinition(checkpoint);

            MyDefinitionManager.Static.TryGetDefinition <MyScenarioDefinition>(checkpoint.Scenario, out Scenario);

            WorldBoundaries = checkpoint.WorldBoundaries;

            FixIncorrectSettings(Settings);

            // Use whatever setting is in scenario if there was nothing in the file (0 min and max).
            // SE scenarios have nothing while ME scenarios have size defined.
            if (!WorldBoundaries.HasValue && Scenario != null)
            {
                WorldBoundaries = Scenario.WorldBoundaries;
            }

            MySector.InitEnvironmentSettings(sector.Environment);

            LoadDataComponents();
            LoadObjectBuildersComponents(checkpoint.SessionComponents);
        }
Exemplo n.º 10
0
 public void SaveGpss(MyObjectBuilder_Checkpoint checkpoint)
 {
     if (MyFakes.ENABLE_GPS)
     {
         DiscardOld();
         if (checkpoint.Gps == null)
         {
             checkpoint.Gps = new SerializableDictionary <long, MyObjectBuilder_Gps>();
         }
         foreach (var item in m_playerGpss)
         {
             MyObjectBuilder_Gps bGps;
             if (!checkpoint.Gps.Dictionary.TryGetValue(item.Key, out bGps))
             {
                 bGps = MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_Gps>();
             }
             if (bGps.Entries == null)
             {
                 bGps.Entries = new List <MyObjectBuilder_Gps.Entry>();
             }
             foreach (var gps in item.Value)
             {
                 bGps.Entries.Add(GetObjectBuilderEntry(gps.Value));
             }
             checkpoint.Gps.Dictionary.Add(item.Key, bGps);
         }
     }
 }
Exemplo n.º 11
0
        public void LoadGpss(MyObjectBuilder_Checkpoint checkpoint)
        {
            if (MyFakes.ENABLE_GPS && checkpoint.Gps != null)
            {
                foreach (var entry in checkpoint.Gps.Dictionary)//identity
                {
                    foreach (var gpsEntry in entry.Value.Entries)
                    {
                        MyGps gps = new MyGps(gpsEntry);
                        Dictionary <int, MyGps> playersGpss;
                        if (!m_playerGpss.TryGetValue(entry.Key, out playersGpss))
                        {
                            playersGpss = new Dictionary <int, MyGps>();
                            m_playerGpss.Add(entry.Key, playersGpss);
                        }
                        if (!playersGpss.ContainsKey(gps.GetHashCode()))
                        {
                            playersGpss.Add(gps.GetHashCode(), gps);

                            if (gps.ShowOnHud && entry.Key == MySession.Static.LocalPlayerId && MySession.Static.LocalPlayerId != 0)// LocalPlayerId=0 => loading MP game and not yet initialized. Or server, which does not matter
                            {
                                MyHud.GpsMarkers.RegisterMarker(gps);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 12
0
        private void SetupWorldGeneratorSettings(MyObjectBuilder_Checkpoint checkpoint)
        {
            switch ((MyGuiScreenWorldGeneratorSettings.AsteroidAmountEnum)AsteroidAmount)
            {
            case MyGuiScreenWorldGeneratorSettings.AsteroidAmountEnum.ProceduralLow:
                checkpoint.Settings.ProceduralDensity = 0.25f;
                break;

            case MyGuiScreenWorldGeneratorSettings.AsteroidAmountEnum.ProceduralNormal:
                checkpoint.Settings.ProceduralDensity = 0.35f;
                break;

            case MyGuiScreenWorldGeneratorSettings.AsteroidAmountEnum.ProceduralHigh:
                checkpoint.Settings.ProceduralDensity = 0.50f;
                break;

            case MyGuiScreenWorldGeneratorSettings.AsteroidAmountEnum.ProceduralNone:
                checkpoint.Settings.ProceduralDensity = 0.0f;
                break;

            default:
                throw new InvalidBranchException();
                break;
            }
        }
Exemplo n.º 13
0
        public static void LoadMission(string sessionPath, bool multiplayer, MyOnlineModeEnum onlineMode, short maxPlayers,
                                       MyGameModeEnum gameMode, MyObjectBuilder_Checkpoint checkpoint, ulong checkpointSizeInBytes)
        {
            var persistentEditMode = checkpoint.Settings.ScenarioEditMode;

            checkpoint.Settings.OnlineMode       = onlineMode;
            checkpoint.Settings.MaxPlayers       = maxPlayers;
            checkpoint.Settings.Scenario         = true;
            checkpoint.Settings.GameMode         = gameMode;
            checkpoint.Settings.ScenarioEditMode = false;

            if (!MySession.IsCompatibleVersion(checkpoint))
            {
                MyLog.Default.WriteLine(MyTexts.Get(MyCommonTexts.DialogTextIncompatibleWorldVersion).ToString());
                MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox(
                                           messageCaption: MyTexts.Get(MyCommonTexts.MessageBoxCaptionError),
                                           messageText: MyTexts.Get(MyCommonTexts.DialogTextIncompatibleWorldVersion),
                                           buttonType: MyMessageBoxButtonsType.OK));
                MyLog.Default.WriteLine("LoadSession() - End");
                return;
            }

            if (!MySteamWorkshop.CheckLocalModsAllowed(checkpoint.Mods, checkpoint.Settings.OnlineMode == MyOnlineModeEnum.OFFLINE))
            {
                MyLog.Default.WriteLine(MyTexts.Get(MyCommonTexts.DialogTextLocalModsDisabledInMultiplayer).ToString());
                MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox(
                                           messageCaption: MyTexts.Get(MyCommonTexts.MessageBoxCaptionError),
                                           messageText: MyTexts.Get(MyCommonTexts.DialogTextLocalModsDisabledInMultiplayer),
                                           buttonType: MyMessageBoxButtonsType.OK));
                MyLog.Default.WriteLine("LoadSession() - End");
                return;
            }

            m_checkpointData = new CheckpointData()
            {
                Checkpoint         = checkpoint,
                CheckpointSize     = checkpointSizeInBytes,
                PersistentEditMode = persistentEditMode,
                SessionPath        = sessionPath,
            };

            if (checkpoint.BriefingVideo != null && checkpoint.BriefingVideo.Length > 0 && !MyFakes.XBOX_PREVIEW)
            {
                MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox(
                                           messageCaption: MyTexts.Get(MySpaceTexts.MessageBoxCaptionVideo),
                                           messageText: MyTexts.Get(MySpaceTexts.MessageBoxTextWatchVideo),
                                           buttonType: MyMessageBoxButtonsType.YES_NO,
                                           callback: OnVideoMessageBox));
            }
            else
            {
                var checkpointData = m_checkpointData.Value;
                m_checkpointData = null;
                LoadMission(checkpointData);
            }
        }
        private static Vector2 CalcSize(MyObjectBuilder_Checkpoint checkpoint)//TODO optimize
        {
            float width = checkpoint == null ? 0.9f : 0.65f;
            float height = checkpoint == null ? 1.24f : 0.97f;
            if (checkpoint != null)
                height -= 0.05f;
            height -= 0.27f;

            return new Vector2(width, height);
        }
Exemplo n.º 15
0
        public override void FixSessionObjectBuilders(MyObjectBuilder_Checkpoint checkpoint, MyObjectBuilder_Sector sector)
        {
            base.FixSessionObjectBuilders(checkpoint, sector);

            if (sector.AppVersion == 0)
            {
                HashSet <String> previouslyColored = new HashSet <String>();
                previouslyColored.Add("LargeBlockArmorBlock");
                previouslyColored.Add("LargeBlockArmorSlope");
                previouslyColored.Add("LargeBlockArmorCorner");
                previouslyColored.Add("LargeBlockArmorCornerInv");
                previouslyColored.Add("LargeRoundArmor_Slope");
                previouslyColored.Add("LargeRoundArmor_Corner");
                previouslyColored.Add("LargeRoundArmor_CornerInv");
                previouslyColored.Add("LargeHeavyBlockArmorBlock");
                previouslyColored.Add("LargeHeavyBlockArmorSlope");
                previouslyColored.Add("LargeHeavyBlockArmorCorner");
                previouslyColored.Add("LargeHeavyBlockArmorCornerInv");
                previouslyColored.Add("SmallBlockArmorBlock");
                previouslyColored.Add("SmallBlockArmorSlope");
                previouslyColored.Add("SmallBlockArmorCorner");
                previouslyColored.Add("SmallBlockArmorCornerInv");
                previouslyColored.Add("SmallHeavyBlockArmorBlock");
                previouslyColored.Add("SmallHeavyBlockArmorSlope");
                previouslyColored.Add("SmallHeavyBlockArmorCorner");
                previouslyColored.Add("SmallHeavyBlockArmorCornerInv");
                previouslyColored.Add("LargeBlockInteriorWall");

                foreach (var obj in sector.SectorObjects)
                {
                    var grid = obj as MyObjectBuilder_CubeGrid;
                    if (grid == null)
                    {
                        continue;
                    }

                    foreach (var block in grid.CubeBlocks)
                    {
                        if (block.TypeId != typeof(MyObjectBuilder_CubeBlock) || !previouslyColored.Contains(block.SubtypeName))
                        {
                            block.ColorMaskHSV = MyRenderComponentBase.OldGrayToHSV;
                        }
                    }
                }
            }

            if (sector.AppVersion <= 01100001)
            {
                CheckOxygenContainers(sector);
            }

            // TODO: this is disabled now because replication of MyEntity with components is not resolved, when you enable it make sure that corresponding
            // definitions are also changed (InventoryBagDefinition/.... to EntityBase/...)
            //CheckInventoryBagEntity(sector);
        }
        private static Vector2 CalcSize(MyObjectBuilder_Checkpoint checkpoint)//TODO optimize
        {
            float width = checkpoint == null ? 0.9f : 0.65f;
            float height = checkpoint == null ? 1.24f : 0.97f;
            if (checkpoint != null)
                height -= 0.05f;
            if (MyFakes.OCTOBER_RELEASE_HIDE_WORLD_PARAMS)
                height -= 0.27f;

            return new Vector2(width, height);
        }
Exemplo n.º 17
0
        public void SaveCameraCollection(MyObjectBuilder_Checkpoint checkpoint)
        {
            MyDebug.AssertDebug(checkpoint.AllPlayersData != null, "Players data not initialized!");
            if (checkpoint.AllPlayersData == null)
            {
                return;
            }

            foreach (var playerData in checkpoint.AllPlayersData.Dictionary)
            {
                PlayerId pid = new PlayerId(playerData.Key.ClientId, playerData.Key.SerialId);
                playerData.Value.EntityCameraData = new List <CameraControllerSettings>();

                if (!m_entityCameraSettings.ContainsKey(pid))
                {
                    continue;
                }

                m_entitiesToRemove.Clear();
                foreach (var cameraSetting in m_entityCameraSettings[pid])
                {
                    if (MyEntities.EntityExists(cameraSetting.Key))
                    {
                        CameraControllerSettings settings = new CameraControllerSettings()
                        {
                            Distance      = cameraSetting.Value.Distance,
                            IsFirstPerson = cameraSetting.Value.IsFirstPerson,
                            HeadAngle     = cameraSetting.Value.HeadAngle,
                            EntityId      = cameraSetting.Key,
                        };
                        playerData.Value.EntityCameraData.Add(settings);
                    }
                    else
                    {
                        m_entitiesToRemove.Add(cameraSetting.Key);
                    }
                }

                foreach (long entityId in m_entitiesToRemove)
                {
                    m_entityCameraSettings[pid].Remove(entityId);
                }

                if (m_characterCameraSettings != null)
                {
                    playerData.Value.CharacterCameraData = new CameraControllerSettings()
                    {
                        Distance      = m_characterCameraSettings.Distance,
                        IsFirstPerson = m_characterCameraSettings.IsFirstPerson,
                        HeadAngle     = m_characterCameraSettings.HeadAngle,
                    };
                }
            }
        }
		public override void FixSessionObjectBuilders(MyObjectBuilder_Checkpoint checkpoint, MyObjectBuilder_Sector sector)
		{
            base.FixSessionObjectBuilders(checkpoint, sector);

			if (sector.AppVersion == 0)
			{
				HashSet<String> previouslyColored = new HashSet<String>();
				previouslyColored.Add("LargeBlockArmorBlock");
				previouslyColored.Add("LargeBlockArmorSlope");
				previouslyColored.Add("LargeBlockArmorCorner");
				previouslyColored.Add("LargeBlockArmorCornerInv");
				previouslyColored.Add("LargeRoundArmor_Slope");
				previouslyColored.Add("LargeRoundArmor_Corner");
				previouslyColored.Add("LargeRoundArmor_CornerInv");
				previouslyColored.Add("LargeHeavyBlockArmorBlock");
				previouslyColored.Add("LargeHeavyBlockArmorSlope");
				previouslyColored.Add("LargeHeavyBlockArmorCorner");
				previouslyColored.Add("LargeHeavyBlockArmorCornerInv");
				previouslyColored.Add("SmallBlockArmorBlock");
				previouslyColored.Add("SmallBlockArmorSlope");
				previouslyColored.Add("SmallBlockArmorCorner");
				previouslyColored.Add("SmallBlockArmorCornerInv");
				previouslyColored.Add("SmallHeavyBlockArmorBlock");
				previouslyColored.Add("SmallHeavyBlockArmorSlope");
				previouslyColored.Add("SmallHeavyBlockArmorCorner");
				previouslyColored.Add("SmallHeavyBlockArmorCornerInv");
				previouslyColored.Add("LargeBlockInteriorWall");

				foreach (var obj in sector.SectorObjects)
				{
					var grid = obj as MyObjectBuilder_CubeGrid;
					if (grid == null)
						continue;

					foreach (var block in grid.CubeBlocks)
					{
						if (block.TypeId != typeof(MyObjectBuilder_CubeBlock) || !previouslyColored.Contains(block.SubtypeName))
						{
							block.ColorMaskHSV = MyRenderComponentBase.OldGrayToHSV;
						}
					}
				}
			}

			if (sector.AppVersion <= 01100001)
			{
				CheckOxygenContainers(sector);
			}

            // TODO: this is disabled now because replication of MyEntity with components is not resolved, when you enable it make sure that corresponding 
            // definitions are also changed (InventoryBagDefinition/.... to EntityBase/...)
            //CheckInventoryBagEntity(sector);
		}
Exemplo n.º 19
0
        public static Vector2 CalcSize(MyObjectBuilder_Checkpoint checkpoint)
        {
            float width  = checkpoint == null ? 0.9f : 0.65f;
            float height = checkpoint == null ? 1.24f : 1.00f;

            if (checkpoint != null)
            {
                height -= 0.05f;
            }
            height -= 0.27f;

            return(new Vector2(width, height));
        }
Exemplo n.º 20
0
 public void LoadToolbars(MyObjectBuilder_Checkpoint checkpoint)
 {
     if (checkpoint.AllPlayersData != null)
     {
         foreach (var item in checkpoint.AllPlayersData.Dictionary)
         {
             var playerId = new PlayerId(item.Key.ClientId, item.Key.SerialId);
             var toolbar  = new MyToolbar(MyToolbarType.Character);
             toolbar.Init(item.Value.Toolbar, null, true);
             AddPlayerToolbar(playerId, toolbar);
         }
     }
 }
Exemplo n.º 21
0
        private static void CheckDx11AndLoad(MyObjectBuilder_Checkpoint checkpoint, string sessionPath, ulong checkpointSizeInBytes)
        {
            bool needsDx11 = checkpoint.RequiresDX >= 11;

            if (!needsDx11 || MySandboxGame.IsDirectX11)
            {
                LoadSingleplayerSession(checkpoint, sessionPath, checkpointSizeInBytes);
            }
            else
            {
                MyJoinGameHelper.HandleDx11Needed();
            }
        }
Exemplo n.º 22
0
 private static void CheckDx11AndLoad(string sessionPath, bool multiplayer, MyOnlineModeEnum onlineMode, short maxPlayers,
     MyGameModeEnum gameMode, MyObjectBuilder_Checkpoint checkpoint, ulong checkpointSizeInBytes)
 {
     bool needsDx11 = checkpoint.RequiresDX>=11;
     if (!needsDx11 || MySandboxGame.IsDirectX11)
     {
         LoadMission(sessionPath, multiplayer, onlineMode, maxPlayers, gameMode, checkpoint, checkpointSizeInBytes);
     }
     else
     {
         MyJoinGameHelper.HandleDx11Needed();
     }
 }
        public static Vector2 CalcSize(MyObjectBuilder_Checkpoint checkpoint)
        {
            float width  = checkpoint == null ? 0.9f : 0.65f;
            float height = checkpoint == null ? 1.24f : 0.95f;

            if (MyFakes.ENABLE_NEW_SOUNDS)
            {
                height += 0.05f;
            }
            height -= 0.27f;

            return(new Vector2(width, height));
        }
        private static Vector2 CalcSize(MyObjectBuilder_Checkpoint checkpoint)//TODO optimize
        {
            float width  = checkpoint == null ? 0.9f : 0.65f;
            float height = checkpoint == null ? 1.24f : 0.97f;

            if (checkpoint != null)
            {
                height -= 0.05f;
            }
            height -= 0.27f;

            return(new Vector2(width, height));
        }
Exemplo n.º 25
0
        //public SerializableDictionary<MyObjectBuilder_Checkpoint.PlayerId, MyObjectBuilder_Toolbar> GetSerDictionary()
        //{
        //    var ret = new SerializableDictionary<MyObjectBuilder_Checkpoint.PlayerId, MyObjectBuilder_Toolbar>();
        //    foreach (var item in m_playerToolbars)
        //    {
        //        var pid = new MyObjectBuilder_Checkpoint.PlayerId(item.Key.SteamId);
        //        pid.SerialId = item.Key.SerialId;

        //        var ob = item.Value.GetObjectBuilder();
        //        ret.Dictionary.Add(pid, ob);
        //    }
        //    return ret;
        //}

        public void SaveToolbars(MyObjectBuilder_Checkpoint checkpoint)
        {
            Dictionary <MyObjectBuilder_Checkpoint.PlayerId, MyObjectBuilder_Player> checkpointData = checkpoint.AllPlayersData.Dictionary;

            foreach (var toolbar in m_playerToolbars)
            {
                var pid = new MyObjectBuilder_Checkpoint.PlayerId(toolbar.Key.SteamId);
                pid.SerialId = toolbar.Key.SerialId;
                if (checkpointData.ContainsKey(pid))
                {
                    checkpointData[pid].Toolbar = toolbar.Value.GetObjectBuilder();
                }
            }
        }
Exemplo n.º 26
0
        public override void FixSessionObjectBuilders(MyObjectBuilder_Checkpoint checkpoint, MyObjectBuilder_Sector sector)
        {
            if (sector.AppVersion == 0)
            {
                HashSet <String> previouslyColored = new HashSet <String>();
                previouslyColored.Add("LargeBlockArmorBlock");
                previouslyColored.Add("LargeBlockArmorSlope");
                previouslyColored.Add("LargeBlockArmorCorner");
                previouslyColored.Add("LargeBlockArmorCornerInv");
                previouslyColored.Add("LargeRoundArmor_Slope");
                previouslyColored.Add("LargeRoundArmor_Corner");
                previouslyColored.Add("LargeRoundArmor_CornerInv");
                previouslyColored.Add("LargeHeavyBlockArmorBlock");
                previouslyColored.Add("LargeHeavyBlockArmorSlope");
                previouslyColored.Add("LargeHeavyBlockArmorCorner");
                previouslyColored.Add("LargeHeavyBlockArmorCornerInv");
                previouslyColored.Add("SmallBlockArmorBlock");
                previouslyColored.Add("SmallBlockArmorSlope");
                previouslyColored.Add("SmallBlockArmorCorner");
                previouslyColored.Add("SmallBlockArmorCornerInv");
                previouslyColored.Add("SmallHeavyBlockArmorBlock");
                previouslyColored.Add("SmallHeavyBlockArmorSlope");
                previouslyColored.Add("SmallHeavyBlockArmorCorner");
                previouslyColored.Add("SmallHeavyBlockArmorCornerInv");
                previouslyColored.Add("LargeBlockInteriorWall");

                foreach (var obj in sector.SectorObjects)
                {
                    var grid = obj as MyObjectBuilder_CubeGrid;
                    if (grid == null)
                    {
                        continue;
                    }

                    foreach (var block in grid.CubeBlocks)
                    {
                        if (block.TypeId != typeof(MyObjectBuilder_CubeBlock) || !previouslyColored.Contains(block.SubtypeName))
                        {
                            block.ColorMaskHSV = MyRenderComponentBase.OldGrayToHSV;
                        }
                    }
                }
            }

            if (sector.AppVersion <= 01100001)
            {
                CheckOxygenContainers(sector);
            }
        }
Exemplo n.º 27
0
        private void QuickstartScenario(string scenarioName)
        {
            string path        = "CustomWorlds";
            string sessionPath = Path.Combine(MyFileSystem.ContentPath, path, scenarioName);
            ulong  sizeInBytes;
            MyObjectBuilder_Checkpoint checkpoint = MyLocalCache.LoadCheckpoint(sessionPath, out sizeInBytes);

            if (checkpoint != null)
            {
                MySessionLoader.LoadSingleplayerSession(checkpoint, sessionPath, sizeInBytes, delegate
                {
                    MyAsyncSaving.Start(null, Path.Combine(MyFileSystem.SavesPath, checkpoint.SessionName.Replace(':', '-')));
                });
            }
        }
        public static Vector2 CalcSize(MyObjectBuilder_Checkpoint checkpoint)
        {
            float width  = checkpoint == null ? 0.9f : 0.65f;
            float height = checkpoint == null ? 1.24f : 0.97f;

            if (checkpoint != null)
            {
                height -= 0.05f;
            }
            if (MyFakes.OCTOBER_RELEASE_HIDE_WORLD_PARAMS)
            {
                height -= 0.27f;
            }

            return(new Vector2(width, height));
        }
		public override void FixSessionObjectBuilders(MyObjectBuilder_Checkpoint checkpoint, MyObjectBuilder_Sector sector)
		{
			if (sector.AppVersion == 0)
			{
				HashSet<String> previouslyColored = new HashSet<String>();
				previouslyColored.Add("LargeBlockArmorBlock");
				previouslyColored.Add("LargeBlockArmorSlope");
				previouslyColored.Add("LargeBlockArmorCorner");
				previouslyColored.Add("LargeBlockArmorCornerInv");
				previouslyColored.Add("LargeRoundArmor_Slope");
				previouslyColored.Add("LargeRoundArmor_Corner");
				previouslyColored.Add("LargeRoundArmor_CornerInv");
				previouslyColored.Add("LargeHeavyBlockArmorBlock");
				previouslyColored.Add("LargeHeavyBlockArmorSlope");
				previouslyColored.Add("LargeHeavyBlockArmorCorner");
				previouslyColored.Add("LargeHeavyBlockArmorCornerInv");
				previouslyColored.Add("SmallBlockArmorBlock");
				previouslyColored.Add("SmallBlockArmorSlope");
				previouslyColored.Add("SmallBlockArmorCorner");
				previouslyColored.Add("SmallBlockArmorCornerInv");
				previouslyColored.Add("SmallHeavyBlockArmorBlock");
				previouslyColored.Add("SmallHeavyBlockArmorSlope");
				previouslyColored.Add("SmallHeavyBlockArmorCorner");
				previouslyColored.Add("SmallHeavyBlockArmorCornerInv");
				previouslyColored.Add("LargeBlockInteriorWall");

				foreach (var obj in sector.SectorObjects)
				{
					var grid = obj as MyObjectBuilder_CubeGrid;
					if (grid == null)
						continue;

					foreach (var block in grid.CubeBlocks)
					{
						if (block.TypeId != typeof(MyObjectBuilder_CubeBlock) || !previouslyColored.Contains(block.SubtypeName))
						{
							block.ColorMaskHSV = MyRenderComponentBase.OldGrayToHSV;
						}
					}
				}
			}

			if (sector.AppVersion <= 01100001)
			{
				CheckOxygenContainers(sector);
			}
		}
Exemplo n.º 30
0
        private static void LoadOnlinePlayers(MyObjectBuilder_Checkpoint checkpoint)
        {
            //Get This players ID
            MyPlayer.PlayerId?savingPlayerId = new MyPlayer.PlayerId(Sync.MyId);
            if (!savingPlayerId.HasValue)
            {
                SeamlessClient.TryShow("SavingPlayerID is null! Creating Default!");
                savingPlayerId = new MyPlayer.PlayerId(Sync.MyId);
            }

            SeamlessClient.TryShow("Saving PlayerID: " + savingPlayerId.ToString());


            SeamlessClient.TryShow("Checkpoint.AllPlayers: " + checkpoint.AllPlayers.Count);
            //These both are null/empty. Server doesnt need to send them to the client
            //SeamlessClient.TryShow("Checkpoint.ConnectedPlayers: " + checkpoint.ConnectedPlayers.Dictionary.Count);
            //SeamlessClient.TryShow("Checkpoint.DisconnectedPlayers: " + checkpoint.DisconnectedPlayers.Dictionary.Count);
            SeamlessClient.TryShow("Checkpoint.AllPlayersData: " + checkpoint.AllPlayersData.Dictionary.Count);


            foreach (KeyValuePair <MyObjectBuilder_Checkpoint.PlayerId, MyObjectBuilder_Player> item3 in checkpoint.AllPlayersData.Dictionary)
            {
                MyPlayer.PlayerId playerId5 = new MyPlayer.PlayerId(item3.Key.GetClientId(), item3.Key.SerialId);
                if (savingPlayerId.HasValue && playerId5.SteamId == savingPlayerId.Value.SteamId)
                {
                    playerId5 = new MyPlayer.PlayerId(Sync.MyId, playerId5.SerialId);
                }

                LoadPlayerInternal.Invoke(MySession.Static.Players, new object[] { playerId5, item3.Value, false });
                ConcurrentDictionary <MyPlayer.PlayerId, MyPlayer> Players = (ConcurrentDictionary <MyPlayer.PlayerId, MyPlayer>)MPlayerGPSCollection.GetValue(MySession.Static.Players);
                //LoadPlayerInternal(ref playerId5, item3.Value);
                if (Players.TryGetValue(playerId5, out MyPlayer myPlayer))
                {
                    List <Vector3> value2 = null;
                    if (checkpoint.AllPlayersColors != null && checkpoint.AllPlayersColors.Dictionary.TryGetValue(item3.Key, out value2))
                    {
                        myPlayer.SetBuildColorSlots(value2);
                    }
                    else if (checkpoint.CharacterToolbar != null && checkpoint.CharacterToolbar.ColorMaskHSVList != null && checkpoint.CharacterToolbar.ColorMaskHSVList.Count > 0)
                    {
                        myPlayer.SetBuildColorSlots(checkpoint.CharacterToolbar.ColorMaskHSVList);
                    }
                }
            }
        }
Exemplo n.º 31
0
        public void UpdateSessionSettings( )
        {
            MyConfigDedicatedData <MyObjectBuilder_SessionSettings> config = Server.Instance.LoadServerConfig( );

            ApplicationLog.BaseLog.Info("Loading Session Settings");
            try
            {
                string worldPath = config.LoadWorld;

                ulong fileSize;
                m_checkPoint = LoadSandbox(worldPath, out fileSize);

                if (m_checkPoint == null)
                {
                    return;
                }

                m_checkPoint.Settings = config.SessionSettings;
                m_checkPoint.Scenario = config.Scenario;

                m_checkPoint.Mods.Clear( );
                foreach (ulong modid in config.Mods)
                {
                    m_checkPoint.Mods.Add(new MyObjectBuilder_Checkpoint.ModItem(modid));
                }

                File.Copy(Path.Combine(worldPath, "Sandbox.sbc"), Path.Combine(worldPath, "Sandbox.sbc.bak"), true);

                SaveSandbox(m_checkPoint, worldPath, out fileSize);

                ApplicationLog.BaseLog.Info("{0}Max Players: {1}", Environment.NewLine, m_checkPoint.Settings.MaxPlayers);
                ApplicationLog.BaseLog.Info("OnlineMode: {0}", m_checkPoint.Settings.OnlineMode);
                ApplicationLog.BaseLog.Info("GameMode: {0}", m_checkPoint.Settings.GameMode);
                ApplicationLog.BaseLog.Info("Scenario: {0}", m_checkPoint.Scenario.SubtypeId);
                ApplicationLog.BaseLog.Info("World Size: {0}{1}", m_checkPoint.Settings.WorldSizeKm, Environment.NewLine);
            }
            catch (Exception ex)
            {
                if (ExtenderOptions.IsDebugging)
                {
                    ApplicationLog.BaseLog.Error(ex, "Session Manager Exception: {0}");
                }
            }
        }
        public void UpdateSessionSettings()
        {
            ulong fileSize = 0UL;

            MyConfigDedicatedData config = Server.Instance.LoadServerConfig();

            Console.WriteLine("Loading Session Settings");
            try
            {
                var worldPath = config.LoadWorld;

                m_checkPoint = LoadSandbox(worldPath, out fileSize);

                if (m_checkPoint == null)
                {
                    return;
                }

                m_checkPoint.Settings = config.SessionSettings;
                m_checkPoint.Scenario = config.Scenario;

                m_checkPoint.Mods.Clear();
                foreach (ulong modid in config.Mods)
                {
                    m_checkPoint.Mods.Add(new MyObjectBuilder_Checkpoint.ModItem(modid));
                }

                File.Copy(worldPath + "\\Sandbox.sbc", worldPath + "\\Sandbox.sbc.bak", true);

                SaveSandbox(m_checkPoint, worldPath, out fileSize);

                Console.WriteLine(Environment.NewLine + "Max Players: " + m_checkPoint.Settings.MaxPlayers);
                Console.WriteLine("OnlineMode: " + m_checkPoint.Settings.OnlineMode);
                Console.WriteLine("GameMode: " + m_checkPoint.Settings.GameMode);
                Console.WriteLine("Scenario: " + m_checkPoint.Scenario.SubtypeId);
                Console.WriteLine("World Size: " + m_checkPoint.Settings.WorldSizeKm + Environment.NewLine);
            }
            catch (Exception ex)
            {
                LogManager.ErrorLog.WriteLineAndConsole("Session Manager Exception: " + ex.ToString());
                return;
            }
        }
Exemplo n.º 33
0
        public static MyObjectBuilder_Checkpoint LoadCheckpoint(string sessionPath, out ulong sizeInBytes)
        {
            sizeInBytes = 0;
            var checkpointFile = Path.Combine(sessionPath, CHECKPOINT_FILE);

            if (!File.Exists(checkpointFile))
            {
                return(null);
            }

            MyObjectBuilder_Checkpoint result = null;

            Sandbox.Common.ObjectBuilders.Serializer.MyObjectBuilderSerializer.DeserializeXML(checkpointFile, out result, out sizeInBytes);
            if (result != null && string.IsNullOrEmpty(result.SessionName))
            {
                result.SessionName = Path.GetFileNameWithoutExtension(checkpointFile);
            }

            return(result);
        }
        public void SaveToCheckpoint(MyObjectBuilder_Checkpoint checkpoint)
        {
            var cooldowns = checkpoint.RespawnCooldowns;

            foreach (var pair in m_globalRespawnTimesMs)
            {
                int cooldown = pair.Value - m_lastUpdate;
                if (cooldown <= 0)
                {
                    continue;
                }

                var item = new Sandbox.Common.ObjectBuilders.MyObjectBuilder_Checkpoint.RespawnCooldownItem();
                item.PlayerSteamId  = pair.Key.ControllerId.SteamId;
                item.PlayerSerialId = pair.Key.ControllerId.SerialId;
                item.RespawnShipId  = pair.Key.RespawnShipId;
                item.Cooldown       = cooldown;

                cooldowns.Add(item);
            }
        }
Exemplo n.º 35
0
        public void UpdateSessionSettings( )
        {
            MyConfigDedicatedData<MyObjectBuilder_SessionSettings> config = Server.Instance.LoadServerConfig( );

            ApplicationLog.BaseLog.Info( "Loading Session Settings" );
            try
            {
                string worldPath = config.LoadWorld;

                ulong fileSize;
                m_checkPoint = LoadSandbox(worldPath, out fileSize);

                if (m_checkPoint == null)
                    return;

                m_checkPoint.Settings = config.SessionSettings;
                m_checkPoint.Scenario = config.Scenario;

                m_checkPoint.Mods.Clear( );
                foreach ( ulong modid in config.Mods )
                    m_checkPoint.Mods.Add( new MyObjectBuilder_Checkpoint.ModItem( modid ) );

                File.Copy( Path.Combine( worldPath, "Sandbox.sbc" ), Path.Combine( worldPath, "Sandbox.sbc.bak" ), true );

                SaveSandbox(m_checkPoint, worldPath, out fileSize);

                ApplicationLog.BaseLog.Info( "{0}Max Players: {1}", Environment.NewLine, m_checkPoint.Settings.MaxPlayers );
                ApplicationLog.BaseLog.Info( "OnlineMode: {0}", m_checkPoint.Settings.OnlineMode );
                ApplicationLog.BaseLog.Info( "GameMode: {0}", m_checkPoint.Settings.GameMode );
                ApplicationLog.BaseLog.Info( "Scenario: {0}", m_checkPoint.Scenario.SubtypeId );
                ApplicationLog.BaseLog.Info( "World Size: {0}{1}", m_checkPoint.Settings.WorldSizeKm, Environment.NewLine );
            }
            catch (Exception ex)
            {
                if ( ExtenderOptions.IsDebugging )
                    ApplicationLog.BaseLog.Error( ex, "Session Manager Exception: {0}" );
            }
        }
        public void SavePlayers(MyObjectBuilder_Checkpoint checkpoint)
        {
            checkpoint.ConnectedPlayers = new SerializableDictionary<MyObjectBuilder_Checkpoint.PlayerId, MyObjectBuilder_Player>();
            checkpoint.DisconnectedPlayers = new SerializableDictionary<MyObjectBuilder_Checkpoint.PlayerId, long>();
            checkpoint.AllPlayersData = new SerializableDictionary<MyObjectBuilder_Checkpoint.PlayerId, MyObjectBuilder_Player>();

            foreach (var player in m_players.Values)
            {
                var id = new MyObjectBuilder_Checkpoint.PlayerId() { ClientId = player.Id.SteamId, SerialId = player.Id.SerialId };

                MyObjectBuilder_Player playerOb = new MyObjectBuilder_Player();
                playerOb.DisplayName = player.DisplayName;
                playerOb.IdentityId = player.Identity.IdentityId;
                playerOb.Connected = true;

                checkpoint.AllPlayersData.Dictionary.Add(id, playerOb);
            }

            foreach (var entry in m_playerIdentityIds)
            {
                if (m_players.ContainsKey(entry.Key) || entry.Key.SerialId != 0) continue;

                var id = new MyObjectBuilder_Checkpoint.PlayerId() { ClientId = entry.Key.SteamId, SerialId = entry.Key.SerialId };
                MyObjectBuilder_Player playerOb = new MyObjectBuilder_Player();
                playerOb.Connected = false;
                playerOb.IdentityId = entry.Value;
                var identity = TryGetIdentity(entry.Value);
                playerOb.DisplayName = identity != null ? identity.DisplayName : null;

                checkpoint.AllPlayersData.Dictionary.Add(id, playerOb);
            }

            //foreach (var entry in m_playerIdentityIds)
            //{
            //    // Skip connected players
            //    if (m_players.ContainsKey(entry.Key)) continue;

            //    var id = new MyObjectBuilder_Checkpoint.PlayerId() { ClientId = entry.Key.SteamId, SerialId = entry.Key.SerialId };

            //    checkpoint.DisconnectedPlayers.Dictionary.Add(id, entry.Value);
            //}
        }
        public void LoadCameraCollection(MyObjectBuilder_Checkpoint checkpoint)
        {
            m_entityCameraSettings = new Dictionary<PlayerId, Dictionary<long, MyEntityCameraSettings>>();
            
            var allPlayers = checkpoint.AllPlayersData;
            if (allPlayers != null)
            {
                foreach (var playerData in allPlayers.Dictionary)
                {
                    PlayerId pid = new PlayerId(playerData.Key.ClientId, playerData.Key.SerialId);
                    m_entityCameraSettings[pid] = new Dictionary<long, MyEntityCameraSettings>();
                    foreach (var cameraSettings in playerData.Value.EntityCameraData)
                    {
                        MyEntityCameraSettings data = new MyEntityCameraSettings()
                        {
                            Distance = cameraSettings.Distance,
                            HeadAngle = (Vector2?)cameraSettings.HeadAngle,
                            IsFirstPerson = cameraSettings.IsFirstPerson
                        };

                        m_entityCameraSettings[pid][cameraSettings.EntityId] = data;
                    }

                    if (playerData.Value.CharacterCameraData != null)
                    {
                        m_characterCameraSettings = new MyEntityCameraSettings()
                        {
                           Distance =  playerData.Value.CharacterCameraData.Distance,
                            HeadAngle = playerData.Value.CharacterCameraData.HeadAngle,
                            IsFirstPerson = playerData.Value.CharacterCameraData.IsFirstPerson
                        };
                    }
                }
            }
        }
Exemplo n.º 38
0
        private void LoadWorld(MyObjectBuilder_Checkpoint checkpoint, MyObjectBuilder_Sector sector)
        {
            // Run compatibility helper.
            MySandboxGame.Static.SessionCompatHelper.FixSessionObjectBuilders(checkpoint, sector);

            //MyAudio.Static.Mute = true
            MyEntities.MemoryLimitAddFailureReset();

            ElapsedGameTime = new TimeSpan(checkpoint.ElapsedGameTime);
            InGameTime = checkpoint.InGameTime;
            Name = checkpoint.SessionName;
            Description = checkpoint.Description;
            PromotedUsers = new HashSet<ulong>(checkpoint.PromotedUsers ?? Enumerable.Empty<ulong>());
            Briefing = checkpoint.Briefing;
            BriefingVideo = checkpoint.BriefingVideo;
            WorkshopId = checkpoint.WorkshopId;
            Password = checkpoint.Password;
            PreviousEnvironmentHostility = checkpoint.PreviousEnvironmentHostility;
            RequiresDX = checkpoint.RequiresDX;
            FixIncorrectSettings(Settings);

            AppVersionFromSave = checkpoint.AppVersion;

            if (MyFakes.ENABLE_BATTLE_SYSTEM)
            {
                VoxelHandVolumeChanged = sector.VoxelHandVolumeChanged;
            }

            MyToolbarComponent.InitCharacterToolbar(checkpoint.CharacterToolbar);

            LoadCameraControllerSettings(checkpoint);;

            Sync.Players.RespawnComponent.InitFromCheckpoint(checkpoint);

            MyPlayer.PlayerId savingPlayer = new MyPlayer.PlayerId();
            MyPlayer.PlayerId? savingPlayerNullable = null;
            bool reuseSavingPlayerIdentity = TryFindSavingPlayerId(checkpoint.ControlledEntities, checkpoint.ControlledObject, out savingPlayer);
            if (reuseSavingPlayerIdentity && !(IsScenario && Static.OnlineMode != MyOnlineModeEnum.OFFLINE))
                savingPlayerNullable = savingPlayer;

            // Identities have to be loaded before entities (because of ownership)
            if (Sync.IsServer || (!Battle && MyPerGameSettings.Game == GameEnum.ME_GAME) || (!IsScenario && MyPerGameSettings.Game == GameEnum.SE_GAME)
                || (!IsScenario && MyPerGameSettings.Game == GameEnum.VRS_GAME))
                Sync.Players.LoadIdentities(checkpoint, savingPlayerNullable);

            Toolbars.LoadToolbars(checkpoint);

            if (!MyEntities.Load(sector.SectorObjects))
            {
                ShowLoadingError();
            }
            MySandboxGame.Static.SessionCompatHelper.AfterEntitiesLoad(sector.AppVersion);

            if (checkpoint.Factions != null && (Sync.IsServer || (!Battle && MyPerGameSettings.Game == GameEnum.ME_GAME) || (!IsScenario && MyPerGameSettings.Game == GameEnum.SE_GAME)))
            {
                Static.Factions.Init(checkpoint.Factions);
            }

            MyGlobalEvents.LoadEvents(sector.SectorEvents);
            // Regenerate default events if they are empty (i.e. we are loading an old save)

            // Initialize Spectator light
            MySpectatorCameraController.Static.InitLight(checkpoint.SpectatorIsLightOn);

            // MySpectator.Static.SpectatorCameraMovement = checkpoint.SpectatorCameraMovement;
            MySpectatorCameraController.Static.SetViewMatrix(MatrixD.Invert(checkpoint.SpectatorPosition.GetMatrix()));

            if (MyPerGameSettings.Game == GameEnum.UNKNOWN_GAME || ((!Battle && MyPerGameSettings.Game == GameEnum.ME_GAME) || ((!IsScenario || Static.OnlineMode == MyOnlineModeEnum.OFFLINE) && MyPerGameSettings.Game == GameEnum.SE_GAME)
                || ((!IsScenario || Static.OnlineMode == MyOnlineModeEnum.OFFLINE) && MyPerGameSettings.Game == GameEnum.VRS_GAME)))
            {
                if (!(Static.IsScenario && Static.Settings.StartInRespawnScreen))
                {
                    Sync.Players.LoadConnectedPlayers(checkpoint, savingPlayerNullable);
                    Sync.Players.LoadControlledEntities(checkpoint.ControlledEntities, checkpoint.ControlledObject, savingPlayerNullable);
                }
            }
            LoadCamera(checkpoint);

            //fix: saved in survival with dead player, changed to creative, loaded game, no character with no way to respawn
            if (CreativeMode && !Engine.Platform.Game.IsDedicated && LocalHumanPlayer != null && LocalHumanPlayer.Character != null && LocalHumanPlayer.Character.IsDead)
                MyPlayerCollection.RequestLocalRespawn();

            if (MyMultiplayer.Static != null && !Sync.IsServer)
            {
                Sync.Layer.TransportLayer.SendMessage(MyMessageId.CLIENT_READY, null, true, new EndpointId(Sync.ServerId));
                ((MyReplicationClient)MyMultiplayer.Static.ReplicationLayer).OnLocalClientReady();
            }

            // Create the player if he/she does not exist (on clients and server)
            if (!Engine.Platform.Game.IsDedicated && LocalHumanPlayer == null)
            {
                Sync.Players.RequestNewPlayer(0, MySteam.UserName, null);
            }
            // Fix missing controlled entity. This should be needed only on the server.
            // On the client, it will be done in reaction to new player creation (see "Create the player" above)
            else if (ControlledEntity == null && Sync.IsServer && !Engine.Platform.Game.IsDedicated)
            {
                MyLog.Default.WriteLine("ControlledObject was null, respawning character");
                m_cameraAwaitingEntity = true;
                MyPlayerCollection.RequestLocalRespawn();
            }

            if (!Engine.Platform.Game.IsDedicated)
            {
                var playerId = new MyPlayer.PlayerId(Sync.MyId, 0);
                var toolbar = Toolbars.TryGetPlayerToolbar(playerId);
                if (toolbar == null)
                {
                    MyToolBarCollection.RequestCreateToolbar(playerId);
                    MyToolbarComponent.InitCharacterToolbar(Scenario.DefaultToolbar);
                }
                else
                {
                    MyToolbarComponent.InitCharacterToolbar(toolbar.GetObjectBuilder());
                }
            }

            Gpss.LoadGpss(checkpoint);

            LoadChatHistory(checkpoint);

            if (MyFakes.ENABLE_MISSION_TRIGGERS)
                MySessionComponentMissionTriggers.Static.Load(checkpoint.MissionTriggers);

            MyEncounterGenerator.Load(sector.Encounters);
            MyRenderProxy.RebuildCullingStructure();

            Settings.ResetOwnership = false;

            if (MyFinalBuildConstants.IS_OFFICIAL && !CreativeMode)
                MyDebugDrawSettings.DEBUG_DRAW_PHYSICS = false;

            MyRenderProxy.CollectGarbage();
        }
 public virtual void FixSessionObjectBuilders(MyObjectBuilder_Checkpoint checkpoint, MyObjectBuilder_Sector sector)
 { }
        public void LoadIdentities(MyObjectBuilder_Checkpoint checkpoint, MyPlayer.PlayerId? savingPlayerId = null)
        {
            if (checkpoint.NonPlayerIdentities != null)
            {
                LoadNpcIdentities(checkpoint.NonPlayerIdentities);
            }

            //checkpoint.Identities or checkpoint.AllPlayers will never be null, because it's a .NET bug :-(
            if (checkpoint.AllPlayers.Count != 0)
            {
                Debug.Assert(checkpoint.Identities.Count == 0, "Both AllPlayers and Identities were present in checkpoint object builder!");
                LoadIdentitiesObsolete(checkpoint.AllPlayers, savingPlayerId);
            }
            else
            {
                LoadIdentities(checkpoint.Identities);
            }
        }
Exemplo n.º 41
0
 public abstract void SaveToCheckpoint(MyObjectBuilder_Checkpoint checkpoint);
Exemplo n.º 42
0
        private void LoadGameDefinition(MyObjectBuilder_Checkpoint checkpoint)
        {
            if (checkpoint.GameDefinition.IsNull())
            {
                LoadGameDefinition();
                return;
            }

            Static.GameDefinition = MyDefinitionManager.Static.GetDefinition<MyGameDefinition>(checkpoint.GameDefinition);

            SessionComponentDisabled = checkpoint.SessionComponentDisabled;
            SessionComponentEnabled = checkpoint.SessionComponentEnabled;

            RegisterComponentsFromAssemblies();
        }
Exemplo n.º 43
0
 public static bool IsCompatibleVersion(MyObjectBuilder_Checkpoint checkpoint)
 {
     if (checkpoint == null)
         return false;
     return checkpoint.AppVersion <= MyFinalBuildConstants.APP_VERSION;
 }
Exemplo n.º 44
0
 private void SaveSessionComponentObjectBuilders(MyObjectBuilder_Checkpoint checkpoint)
 {
     checkpoint.SessionComponents = new List<MyObjectBuilder_SessionComponent>();
     foreach (var comp in m_sessionComponents.Values)
     {
         var ob = comp.GetObjectBuilder();
         if (ob != null)
             checkpoint.SessionComponents.Add(ob);
     }
 }
Exemplo n.º 45
0
 private void SaveChatHistory(MyObjectBuilder_Checkpoint checkpoint)
 {
     if (MyFakes.ENABLE_COMMUNICATION)
     {
         checkpoint.ChatHistory = new List<MyObjectBuilder_ChatHistory>(ChatHistory.Keys.Count);
         foreach (var chatHistory in ChatHistory)
         {
             var chatHistoryBuilder = chatHistory.Value.GetObjectBuilder();
             checkpoint.ChatHistory.Add(chatHistoryBuilder);
         }
         checkpoint.FactionChatHistory = new List<MyObjectBuilder_FactionChatHistory>(FactionChatHistory.Count);
         foreach (var factionChatHistory in FactionChatHistory)
         {
             var factionChatHistoryBuilder = factionChatHistory.GetObjectBuilder();
             checkpoint.FactionChatHistory.Add(factionChatHistoryBuilder);
         }
     }
 }
Exemplo n.º 46
0
        private void LoadCameraControllerSettings(MyObjectBuilder_Checkpoint checkpoint)
        {
            //m_cameraControllerSettings.Clear();

            //// Backwards compatibility section
            //if (checkpoint.Players != null)
            //{
            //    MyObjectBuilder_Player playerOb;
            //    if (checkpoint.Players.Dictionary.TryGetValue(Sync.Clients.LocalClient.SteamUserId, out playerOb))
            //    {
            //        foreach (var cameraController in playerOb.CameraData.Dictionary)
            //        {
            //         //   m_cameraControllerSettings.Add(cameraController.Key, cameraController.Value);
            //        }
            //    }
            //}
            //// End backwards compatibility section
            //else
            //{
            //    #warning load camera settings from a new object builder
            //}
            Cameras.LoadCameraCollection(checkpoint);
        }
Exemplo n.º 47
0
        private void LoadCamera(MyObjectBuilder_Checkpoint checkpoint)
        {
            if (checkpoint.SpectatorDistance > 0)
            {
                MyThirdPersonSpectator.Static.UpdateAfterSimulation();
                MyThirdPersonSpectator.Static.ResetViewerDistance(checkpoint.SpectatorDistance);
            }

            MySandboxGame.Log.WriteLine("Checkpoint.CameraAttachedTo: " + checkpoint.CameraEntity);

            IMyEntity cameraEntity = null;
            var cameraControllerToSet = checkpoint.CameraController;
            if (Static.Enable3RdPersonView == false && cameraControllerToSet == MyCameraControllerEnum.ThirdPersonSpectator)
            {
                cameraControllerToSet = checkpoint.CameraController = MyCameraControllerEnum.Entity;
            }

            if (checkpoint.CameraEntity == 0 && ControlledEntity != null)
            {
                cameraEntity = ControlledEntity as MyEntity;
                if (cameraEntity != null)
                {
                    Debug.Assert(ControlledEntity is IMyCameraController, "Controlled entity is not a camera controller");
                    if (!(ControlledEntity is IMyCameraController))
                    {
                        cameraEntity = null;
                        cameraControllerToSet = MyCameraControllerEnum.Spectator;
                    }
                }
            }
            else
            {
                if (!MyEntities.EntityExists(checkpoint.CameraEntity))
                {
                    cameraEntity = ControlledEntity as MyEntity;
                    if (cameraEntity != null)
                    {
                        cameraControllerToSet = MyCameraControllerEnum.Entity;
                        Debug.Assert(ControlledEntity is IMyCameraController, "Controlled entity is not a camera controller");
                        if (!(ControlledEntity is IMyCameraController))
                        {
                            cameraEntity = null;
                            cameraControllerToSet = MyCameraControllerEnum.Spectator;
                        }
                    }
                    else
                    {
                        MyLog.Default.WriteLine("ERROR: Camera entity from checkpoint does not exists!");
                        cameraControllerToSet = MyCameraControllerEnum.Spectator;
                    }
                }
                else
                    cameraEntity = MyEntities.GetEntityById(checkpoint.CameraEntity);
            }

            if (cameraControllerToSet == MyCameraControllerEnum.Spectator && MyFinalBuildConstants.IS_OFFICIAL && cameraEntity != null)
                cameraControllerToSet = MyCameraControllerEnum.Entity;

            MyEntityCameraSettings settings = null;
            bool resetThirdPersonPosition = false;
            if (!Engine.Platform.Game.IsDedicated)
            {
                if ((cameraControllerToSet == MyCameraControllerEnum.Entity
                    || cameraControllerToSet == MyCameraControllerEnum.ThirdPersonSpectator)
                    && cameraEntity != null)
                {
                    MyPlayer.PlayerId pid = LocalHumanPlayer == null ? new MyPlayer.PlayerId(Sync.MyId, 0) : LocalHumanPlayer.Id;
                    if (Static.Cameras.TryGetCameraSettings(pid, cameraEntity.EntityId, out settings))
                    {
                        if (!settings.IsFirstPerson)
                        {
                            cameraControllerToSet = MyCameraControllerEnum.ThirdPersonSpectator;
                            resetThirdPersonPosition = true;
                        }
                    }
                }
            }

            Static.IsCameraAwaitingEntity = false;
            SetCameraController(cameraControllerToSet, cameraEntity);

            if (resetThirdPersonPosition)
            {
                MyThirdPersonSpectator.Static.ResetViewerAngle(settings.HeadAngle);
                MyThirdPersonSpectator.Static.ResetViewerDistance(settings.Distance);
            }
        }
Exemplo n.º 48
0
 private void LoadChatHistory(MyObjectBuilder_Checkpoint checkpoint)
 {
     if (MyFakes.ENABLE_COMMUNICATION)
     {
         foreach (var chatHistory in checkpoint.ChatHistory)
         {
             var newChatHistory = new MyChatHistory(chatHistory);
             ChatHistory.Add(chatHistory.IdentityId, newChatHistory);
         }
         foreach (var chatHistory in checkpoint.FactionChatHistory)
         {
             FactionChatHistory.Add(new MyFactionChatHistory(chatHistory));
         }
     }
 }
Exemplo n.º 49
0
        private void AddMod(bool active, StringBuilder title, StringBuilder toolTip, StringBuilder modState, MyGuiHighlightTexture? icon, MyObjectBuilder_Checkpoint.ModItem mod, Color? textColor = null)
        {
            var row = new MyGuiControlTable.Row(mod);
            row.AddCell(new MyGuiControlTable.Cell(text: String.Empty, toolTip: modState.ToString(), icon: icon));
            row.AddCell(new MyGuiControlTable.Cell(text: title, toolTip: toolTip.ToString(), textColor: textColor));

            if (active)
                m_modsTableEnabled.Insert(0, row);
            else
                m_modsTableDisabled.Insert(0, row);
        }
Exemplo n.º 50
0
 public static void LoadMission(string sessionPath, MyObjectBuilder_Checkpoint checkpoint, ulong checkpointSizeInBytes, bool persistentEditMode)
 {
     LoadMission(sessionPath, checkpoint, checkpointSizeInBytes, checkpoint.SessionName, checkpoint.Description);
     Static.PersistentEditMode = persistentEditMode;
     Static.LoadedAsMission = true;
 }
        public void LoadConnectedPlayers(MyObjectBuilder_Checkpoint checkpoint, MyPlayer.PlayerId? savingPlayerId = null)
        {
            #warning TODO: Probably not needed? If not, remove the method
            //long identityId = FindLocalIdentityId(checkpoint);

            // Backward compatibility
            if (checkpoint.AllPlayers != null && checkpoint.AllPlayers.Count != 0)
            {
                foreach (var playerItem in checkpoint.AllPlayers)
                {
                    long identityId = playerItem.PlayerId;

                    var playerOb = new MyObjectBuilder_Player();
                    playerOb.Connected = true;
                    playerOb.DisplayName = playerItem.Name;
                    playerOb.IdentityId = identityId;

                    var playerId = new PlayerId(playerItem.SteamId, 0);
                    if (savingPlayerId != null && playerId == savingPlayerId)
                    {
                        playerId = new PlayerId(MySteam.UserId);
                        ChangeDisplayNameOfPlayerAndIdentity(playerOb, MySteam.UserName);
                    }

                    LoadPlayerInternal(ref playerId, playerOb, obsolete: true);
                }
            }
            // Backward compatibility
            else if (checkpoint.ConnectedPlayers != null && checkpoint.ConnectedPlayers.Dictionary.Count != 0)
            {
                Debug.Assert(checkpoint.DisconnectedPlayers != null, "Inconsistency in save! ConnectedPlayers were present, but DisconnectedPlayers not!");
                foreach (var playerItem in checkpoint.ConnectedPlayers.Dictionary)
                {
                    var playerId = new PlayerId(playerItem.Key.ClientId, playerItem.Key.SerialId);
                    if (savingPlayerId != null && playerId == savingPlayerId)
                    {
                        playerId = new PlayerId(MySteam.UserId);
                        ChangeDisplayNameOfPlayerAndIdentity(playerItem.Value, MySteam.UserName);
                    }

                    playerItem.Value.Connected = true;
                    LoadPlayerInternal(ref playerId, playerItem.Value, obsolete: false);
                }

                foreach (var playerItem in checkpoint.DisconnectedPlayers.Dictionary)
                {
                    var playerId = new PlayerId(playerItem.Key.ClientId, playerItem.Key.SerialId);
                    
                    var playerOb = new MyObjectBuilder_Player();
                    playerOb.Connected = false;
                    playerOb.IdentityId = playerItem.Value;
                    playerOb.DisplayName = null;

                    if (savingPlayerId != null && playerId == savingPlayerId)
                    {
                        playerId = new PlayerId(MySteam.UserId);
                        ChangeDisplayNameOfPlayerAndIdentity(playerOb, MySteam.UserName);
                    }

                    LoadPlayerInternal(ref playerId, playerOb, obsolete: false);
                }

                //LoadDisconnectedPlayers(checkpoint.DisconnectedPlayers.Dictionary);
            }
            else if (checkpoint.AllPlayersData != null)
            {
                foreach (var playerItem in checkpoint.AllPlayersData.Dictionary)
                {
                    var playerId = new MyPlayer.PlayerId(playerItem.Key.ClientId, playerItem.Key.SerialId);
                    if (savingPlayerId != null && playerId == savingPlayerId)
                    {
                        playerId = new PlayerId(MySteam.UserId);
                        ChangeDisplayNameOfPlayerAndIdentity(playerItem.Value, MySteam.UserName);
                    }

                    LoadPlayerInternal(ref playerId, playerItem.Value, obsolete: false);
                }
            }

            /*long identityId = FindLocalIdentityId(checkpoint);

            //Player was saved in death state or there is no player
            if (identityId == 0)
            {
                checkpoint.ControlledObject = 0;  //This will lead to RequestRespawn
                checkpoint.CameraController = MyCameraControllerEnum.Entity;
                IsCameraAwaitingEntity = true;
            }
            else
            {
                // TODO: Refactor this later
                MyEntity controlledObject = null;
                if (checkpoint.ControlledObject != -1)
                {
                    MyEntities.TryGetEntityById(checkpoint.ControlledObject, out controlledObject);

                    System.Diagnostics.Debug.Assert(controlledObject != null);

                    if (controlledObject is IMyControllableEntity)
                    {
                        var cockpit = controlledObject as MyCockpit;
                        if (cockpit != null)
                        {
                            var pilot = cockpit.Pilot;
                            if (pilot == null)
                            {
                                Debug.Fail("Creating new pilot for cockpit, because saved cockpit was controlled and had no pilot sitting in it.");
                                MySandboxGame.Log.WriteLine("Creating new pilot for cockpit, because saved cockpit was controlled and had no pilot sitting in it.");
                                var characterOb = MyCharacter.Random();
                                characterOb.Battery = new MyObjectBuilder_Battery() { CurrentCapacity = MyEnergyConstants.BATTERY_MAX_CAPACITY };
                                pilot = (MyCharacter)MyEntityFactory.CreateEntity(characterOb);
                                pilot.Init(characterOb);
                                MyWorldGenerator.InitInventoryWithDefaults(pilot.GetInventory());
                                cockpit.RequestUse(UseActionEnum.Manipulate, pilot);
                            }
                            MySession.Player.Init(pilot, null, identityId);
                        }
                        else if (controlledObject.Parent is MyCockpit)
                        {
                            MySession.Player.Init((MyCharacter)controlledObject, null, identityId);
                            controlledObject = controlledObject.Parent;
                        }
                        else
                        {
                            if (!MySandboxGame.IsDedicated)
                            {
                                if (controlledObject is MyCharacter)
                                {
                                    MySession.Player.Init((MyCharacter)controlledObject, null, identityId);
                                }
                            }
                        }

                        if (!MySandboxGame.IsDedicated)
                            MySession.Player.Controller.TakeControl((IMyControllableEntity)controlledObject);
                    }
                }

                if (checkpoint.Players != null)
                {
                    foreach (var playerIt in checkpoint.Players.Dictionary)
                    {
                        if (playerIt.Key == Player.SteamUserId)
                        {
                            Player.PlayerId = identityId;
                            if (string.IsNullOrEmpty(Player.Model))
                            {
                                if (!string.IsNullOrEmpty(playerIt.Value.PlayerModel))
                                    Player.Model = playerIt.Value.PlayerModel;
                                else
                                    Player.Model = MyCharacter.DefaultModel;
                            }
                        }

                        MyPlayer player;
                        if (Sync.Controllers.TryGetPlayer(playerIt.Key, out player))
                        {
                            MyCharacter playerEntity;
                            if (MyEntities.TryGetEntityById<MyCharacter>(playerIt.Value.PlayerEntity, out playerEntity))
                            {
                                player.Init(playerEntity, playerIt.Value.PlayerModel, playerIt.Key == Player.SteamUserId ? identityId : playerIt.Value.PlayerId);
                            }
                        }
                    }
                }
            }*/
        }
        // Edit game constructor
        public MyGuiScreenWorldSettings(MyObjectBuilder_Checkpoint checkpoint, string path)
            : base(new Vector2(0.5f, 0.5f), MyGuiConstants.SCREEN_BACKGROUND_COLOR, CalcSize(checkpoint))
        {
            MySandboxGame.Log.WriteLine("MyGuiScreenWorldSettings.ctor START");
            EnabledBackgroundFade = true;
            Static = this;

            m_checkpoint = checkpoint;
            if (checkpoint == null || checkpoint.Mods == null)
                m_mods = new List<MyObjectBuilder_Checkpoint.ModItem>();
            else
                m_mods = checkpoint.Mods;
            m_sessionPath = path;
            m_isNewGame = (checkpoint == null);

            RecreateControls(true);

            // If this screen is loaded from "Saved Games" it should not use the EnvironmentHostility logic 
            m_isHostilityChanged = !m_isNewGame;

            MySandboxGame.Log.WriteLine("MyGuiScreenWorldSettings.ctor END");
        }
Exemplo n.º 53
0
 public abstract void InitFromCheckpoint(MyObjectBuilder_Checkpoint checkpoint);
        public static Vector2 CalcSize(MyObjectBuilder_Checkpoint checkpoint)
        {
            float width = checkpoint == null ? 0.9f : 0.65f;
            float height = checkpoint == null ? 1.24f : 1.00f;
            if (MyFakes.ENABLE_NEW_SOUNDS)
                height += 0.05f;
            if (checkpoint != null)
                height -= 0.05f;
            height -= 0.27f;

            return new Vector2(width, height);
        }
        private long FindLocalIdentityId(MyObjectBuilder_Checkpoint checkpoint)
        {
            long playerId = 0;

            playerId = TryGetIdentityId(MySteam.UserId);
            if (playerId != 0)
                return playerId;

            // Backward compatibility:
            if (checkpoint.Players != null)
            {
                if (checkpoint.Players.Dictionary.ContainsKey(MySteam.UserId))
                    playerId = checkpoint.Players[MySteam.UserId].PlayerId != 0 ? checkpoint.Players[MySteam.UserId].PlayerId : playerId;
            }
            if (checkpoint.AllPlayers != null)
            {
                foreach (var player in checkpoint.AllPlayers)
                {
                    if (player.SteamId == MySteam.UserId && !player.IsDead)
                    {
                        playerId = player.PlayerId;
                        break;
                    }

                    if (player.SteamId == MySteam.UserId && playerId == player.PlayerId && player.IsDead)
                    {
                        playerId = 0;
                        break;
                    }
                }
            }

            return playerId;
        }
Exemplo n.º 56
0
        public static void LoadBattle(string sessionPath, MyObjectBuilder_Checkpoint checkpoint, ulong checkpointSizeInBytes, MyObjectBuilder_SessionSettings settings)
        {
            MyLog.Default.WriteLine("Loading battle session: " + sessionPath);

            MyAnalyticsHelper.SetEntry(MyGameEntryEnum.Load);
            Load(sessionPath, checkpoint, checkpointSizeInBytes);
            Static.Settings = settings;
            Debug.Assert(Static.Settings.Battle = true);
        }
Exemplo n.º 57
0
        //public SerializableDictionary<MyObjectBuilder_Checkpoint.PlayerId, MyObjectBuilder_Toolbar> GetSerDictionary()
        //{ 
        //    var ret = new SerializableDictionary<MyObjectBuilder_Checkpoint.PlayerId, MyObjectBuilder_Toolbar>();
        //    foreach (var item in m_playerToolbars)
        //    {
        //        var pid = new MyObjectBuilder_Checkpoint.PlayerId(item.Key.SteamId);
        //        pid.SerialId = item.Key.SerialId;

        //        var ob = item.Value.GetObjectBuilder();
        //        ret.Dictionary.Add(pid, ob);
        //    }
        //    return ret;
        //}

        public void SaveToolbars(MyObjectBuilder_Checkpoint checkpoint)
        {
            Dictionary<MyObjectBuilder_Checkpoint.PlayerId, MyObjectBuilder_Player> checkpointData = checkpoint.AllPlayersData.Dictionary;
            foreach (var toolbar in m_playerToolbars)
            {
                var pid = new MyObjectBuilder_Checkpoint.PlayerId(toolbar.Key.SteamId);
                pid.SerialId = toolbar.Key.SerialId;
                if (checkpointData.ContainsKey(pid))
                {
                    checkpointData[pid].Toolbar = toolbar.Value.GetObjectBuilder();
                }
            }
        }
Exemplo n.º 58
0
 public static void LoadMission(string sessionPath, MyObjectBuilder_Checkpoint checkpoint, ulong checkpointSizeInBytes, string name, string description)
 {
     MyAnalyticsHelper.SetEntry(MyGameEntryEnum.Load);
     Load(sessionPath, checkpoint, checkpointSizeInBytes);
     Static.Name = name;
     Static.Description = description;
     string safeName = MyUtils.StripInvalidChars(checkpoint.SessionName);
     Static.CurrentPath = MyLocalCache.GetSessionSavesPath(safeName, false, false);
     while (Directory.Exists(Static.CurrentPath))
     {
         Static.CurrentPath = MyLocalCache.GetSessionSavesPath(safeName + MyUtils.GetRandomInt(int.MaxValue).ToString("########"), false, false);
     };
 }
        public void SaveCameraCollection(MyObjectBuilder_Checkpoint checkpoint)
        {
            MyDebug.AssertDebug(checkpoint.AllPlayersData != null, "Players data not initialized!");
            if (checkpoint.AllPlayersData == null)
                return;

            foreach (var playerData in checkpoint.AllPlayersData.Dictionary)
            {
                PlayerId pid = new PlayerId(playerData.Key.ClientId, playerData.Key.SerialId);
                playerData.Value.EntityCameraData = new List<CameraControllerSettings>();
                
                if (!m_entityCameraSettings.ContainsKey(pid))
                    continue;

                m_entitiesToRemove.Clear();
                foreach (var cameraSetting in m_entityCameraSettings[pid])
                {
                    if (MyEntities.EntityExists(cameraSetting.Key))
                    {
                        CameraControllerSettings settings = new CameraControllerSettings()
                        {
                            Distance = cameraSetting.Value.Distance,
                            IsFirstPerson = cameraSetting.Value.IsFirstPerson,
                            HeadAngle = cameraSetting.Value.HeadAngle,
                            EntityId = cameraSetting.Key,
                        };
                        playerData.Value.EntityCameraData.Add(settings);
                    }
                    else
                    {
                        m_entitiesToRemove.Add(cameraSetting.Key);
                    }
                }

                foreach (long entityId in m_entitiesToRemove)
                    m_entityCameraSettings[pid].Remove(entityId);

                if (m_characterCameraSettings != null)
                {
                    playerData.Value.CharacterCameraData = new CameraControllerSettings()
                    {
                        Distance = m_characterCameraSettings.Distance,
                        IsFirstPerson = m_characterCameraSettings.IsFirstPerson,
                        HeadAngle = m_characterCameraSettings.HeadAngle,
                    };
                }
            }
        }
Exemplo n.º 60
0
        public static void Load(string sessionPath, MyObjectBuilder_Checkpoint checkpoint, ulong checkpointSizeInBytes)
        {
            ProfilerShort.Begin("MySession.Static.Load");

            MyLog.Default.WriteLineAndConsole("Loading session: " + sessionPath);

            //MyAudio.Static.Mute = true;

            MyLocalCache.SaveLastLoadedTime(sessionPath, DateTime.Now);

            MyEntityIdentifier.Reset();

            ulong sectorSizeInBytes;
            ProfilerShort.Begin("MyLocalCache.LoadSector");

            var sector = MyLocalCache.LoadSector(sessionPath, checkpoint.CurrentSector, out sectorSizeInBytes);
            ProfilerShort.End();
            if (sector == null)
            {
                //TODO:  If game - show error messagebox and return to menu
                //       If DS console - write error to console and exit DS
                //       If DS service - pop up silent exception (dont send report)
                throw new ApplicationException("Sector could not be loaded");
            }

            ulong voxelsSizeInBytes = GetVoxelsSizeInBytes(sessionPath);

#if false
            if ( MyFakes.DEBUG_AVOID_RANDOM_AI )
                MyBBSetSampler.ResetRandomSeed();
#endif

            MyCubeGrid.Preload();

            Static = new MySession();

            Static.Mods = checkpoint.Mods;
            Static.Settings = checkpoint.Settings;
            Static.CurrentPath = sessionPath;
            
            if (Static.OnlineMode != MyOnlineModeEnum.OFFLINE)
                StartServerRequest();

            MySandboxGame.Static.SessionCompatHelper.FixSessionComponentObjectBuilders(checkpoint, sector);

            Static.PrepareBaseSession(checkpoint, sector);

            ProfilerShort.Begin("MySession.Static.LoadWorld");
            Static.LoadWorld(checkpoint, sector);
            ProfilerShort.End();

            if (Sync.IsServer)
            {
                Static.InitializeFactions();
            }

            Static.WorldSizeInBytes = checkpointSizeInBytes + sectorSizeInBytes + voxelsSizeInBytes;

            // CH: I don't think it's needed. If there are problems with missing characters, look at it
            //FixMissingCharacter();

            MyLocalCache.SaveLastSessionInfo(sessionPath);

            Static.SendSessionStartStats();
            Static.LogSettings();

            MyHud.Notifications.Get(MyNotificationSingletons.WorldLoaded).SetTextFormatArguments(Static.Name);
            MyHud.Notifications.Add(MyNotificationSingletons.WorldLoaded);

            if (MyFakes.LOAD_UNCONTROLLED_CHARACTERS == false)
                Static.RemoveUncontrolledCharacters();

            MyNetworkStats.Static.ClearStats();
            Sync.Layer.TransportLayer.ClearStats();

            Static.BeforeStartComponents();
            
            MyLog.Default.WriteLineAndConsole("Session loaded");
            ProfilerShort.End();
        }