public static SyncModSettings Load() { var world = false; SyncModSettings settings = null; try { if (MyAPIGateway.Utilities.FileExistsInWorldStorage("ModSettings.xml", typeof(SyncModSettings))) { world = true; using (var reader = MyAPIGateway.Utilities.ReadFileInWorldStorage("ModSettings.xml", typeof(SyncModSettings))) { settings = MyAPIGateway.Utilities.SerializeFromXML <SyncModSettings>(reader.ReadToEnd()); Mod.Log.Write(Logging.Level.Info, "NanobotBuildAndRepairSystemSettings: Loaded from world file."); } } else if (MyAPIGateway.Utilities.FileExistsInLocalStorage("ModSettings.xml", typeof(SyncModSettings))) { using (var reader = MyAPIGateway.Utilities.ReadFileInLocalStorage("ModSettings.xml", typeof(SyncModSettings))) { settings = MyAPIGateway.Utilities.SerializeFromXML <SyncModSettings>(reader.ReadToEnd()); Mod.Log.Write(Logging.Level.Info, "NanobotBuildAndRepairSystemSettings: Loaded from local storage."); Save(settings, true); } } if (settings != null) { var adjusted = false; if (settings.Version < CurrentSettingsVersion) { Mod.Log.Write(Logging.Level.Info, "NanobotBuildAndRepairSystemSettings: Settings have old version: {0} update to {1}", settings.Version, CurrentSettingsVersion); switch (settings.Version) { case 0: settings.LogLevel = Logging.Level.Error; break; } if (settings.Welder.AllowedSearchModes == 0) { settings.Welder.AllowedSearchModes = SearchModes.Grids | SearchModes.BoundingBox; } if (settings.Welder.AllowedWorkModes == 0) { settings.Welder.AllowedWorkModes = WorkModes.WeldBeforeGrind | WorkModes.GrindBeforeWeld | WorkModes.GrindIfWeldGetStuck; } if (settings.Welder.WeldingMultiplier == 0) { settings.Welder.WeldingMultiplier = 1; } if (settings.Welder.GrindingMultiplier == 0) { settings.Welder.GrindingMultiplier = 1; } adjusted = true; settings.Version = CurrentSettingsVersion; } if (settings.Range > NanobotBuildAndRepairSystemBlock.WELDER_RANGE_MAX_IN_M) { settings.Range = NanobotBuildAndRepairSystemBlock.WELDER_RANGE_MAX_IN_M; adjusted = true; } else if (settings.Range < NanobotBuildAndRepairSystemBlock.WELDER_RANGE_MIN_IN_M) { settings.Range = NanobotBuildAndRepairSystemBlock.WELDER_RANGE_MIN_IN_M; adjusted = true; } if (settings.Welder.WeldingMultiplier < NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MIN) { settings.Welder.WeldingMultiplier = NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MIN; adjusted = true; } else if (settings.Welder.WeldingMultiplier >= NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MAX) { settings.Welder.WeldingMultiplier = NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MAX; adjusted = true; } if (settings.Welder.GrindingMultiplier < NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MIN) { settings.Welder.GrindingMultiplier = NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MIN; adjusted = true; } else if (settings.Welder.GrindingMultiplier >= NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MAX) { settings.Welder.GrindingMultiplier = NanobotBuildAndRepairSystemBlock.WELDING_GRINDING_MULTIPLIER_MAX; adjusted = true; } Mod.Log.Write(Logging.Level.Info, "NanobotBuildAndRepairSystemSettings: Settings {0} {1} ", settings.Welder.GrindingMultiplier, settings); if (adjusted) { Save(settings, world); } } else { settings = new SyncModSettings() { Version = CurrentSettingsVersion }; Save(settings, world); } } catch (Exception ex) { Mod.Log.Write(Logging.Level.Error, "NanobotBuildAndRepairSystemSettings: Exception while loading: {0}", ex); } return(settings); }