diff --git a/Torch.Server/Managers/InstanceManager.cs b/Torch.Server/Managers/InstanceManager.cs index aef99e2..6a0e671 100644 --- a/Torch.Server/Managers/InstanceManager.cs +++ b/Torch.Server/Managers/InstanceManager.cs @@ -97,23 +97,31 @@ namespace Torch.Server.Managers if (!File.Exists(sandboxPath)) return; - MyObjectBuilderSerializer.DeserializeXML(sandboxPath, out MyObjectBuilder_Checkpoint checkpoint, out ulong sizeInBytes); - if (checkpoint == null) + try { - Log.Error($"Failed to load {DedicatedConfig.LoadWorld}, checkpoint null ({sizeInBytes} bytes, instance {TorchBase.Instance.Config.InstancePath})"); - return; + MyObjectBuilderSerializer.DeserializeXML(sandboxPath, out MyObjectBuilder_Checkpoint checkpoint, out ulong sizeInBytes); + if (checkpoint == null) + { + Log.Error($"Failed to load {DedicatedConfig.LoadWorld}, checkpoint null ({sizeInBytes} bytes, instance {TorchBase.Instance.Config.InstancePath})"); + return; + } + + var sb = new StringBuilder(); + foreach (var mod in checkpoint.Mods) + sb.AppendLine(mod.PublishedFileId.ToString()); + + DedicatedConfig.Mods = sb.ToString(); + + Log.Info("Loaded mod list from world"); + + if (!modsOnly) + DedicatedConfig.SessionSettings = new SessionSettingsViewModel(checkpoint.Settings); + } + catch (Exception e) + { + Log.Error($"Error loading mod list from world '{DedicatedConfig.LoadWorld}'."); + Log.Error(e); } - - var sb = new StringBuilder(); - foreach (var mod in checkpoint.Mods) - sb.AppendLine(mod.PublishedFileId.ToString()); - - DedicatedConfig.Mods = sb.ToString(); - - Log.Info("Loaded mod list from world"); - - if (!modsOnly) - DedicatedConfig.SessionSettings = new SessionSettingsViewModel(checkpoint.Settings); } public void SaveConfig() diff --git a/Torch.Server/TorchServer.cs b/Torch.Server/TorchServer.cs index 15e9de0..9576ba7 100644 --- a/Torch.Server/TorchServer.cs +++ b/Torch.Server/TorchServer.cs @@ -67,6 +67,7 @@ namespace Torch.Server public override void Init() { Log.Info($"Init server '{Config.InstanceName}' at '{Config.InstancePath}'"); + MyObjectBuilderSerializer.RegisterFromAssembly(typeof(MyObjectBuilder_CheckpointSerializer).Assembly); base.Init(); MyPerGameSettings.SendLogToKeen = false; @@ -77,8 +78,6 @@ namespace Torch.Server MySessionComponentExtDebug.ForceDisable = true; MyPerServerSettings.AppId = 244850; MyFinalBuildConstants.APP_VERSION = MyPerGameSettings.BasicGameInfo.GameVersion; - - MyObjectBuilderSerializer.RegisterFromAssembly(typeof(MyObjectBuilder_CheckpointSerializer).Assembly); InvokeBeforeRun(); MyPlugins.RegisterGameAssemblyFile(MyPerGameSettings.GameModAssembly); @@ -143,6 +142,8 @@ namespace Torch.Server VRage.Service.ExitListenerSTA.OnExit += delegate { MySandboxGame.Static?.Exit(); }; base.Start(); + //Stops RunInternal from calling MyFileSystem.InitUserSpecific(null), we call it in InstanceManager. + MySandboxGame.IsReloading = true; runInternal.Invoke(null, null); MySandboxGame.Log.Close();