using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using CG.Cloud;
using CG.Cloud.Authenticate;
using CG.Profile;
using Gameplay.Hub;
using Gameplay.Quests;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Newtonsoft.Json;
using ResourceAssets;
using UI;
using UI.Core;
using UI.Core.Audio;
using UnityEngine;
using UnityEngine.UIElements;
using VoidManager;
using VoidManager.MPModChecks;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("fingoldfish")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Provides multiple save slots and allows you to choose which one to restore.")]
[assembly: AssemblyFileVersion("1.0.1.0")]
[assembly: AssemblyInformationalVersion("1.0.1+78b1c2934f8509ca627f39f9dbf5b18636984a9c")]
[assembly: AssemblyProduct("Save Slots")]
[assembly: AssemblyTitle("Provides multiple save slots and allows you to choose which one to restore.")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.1.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace SaveSlots
{
[Serializable]
public class PreservedSessionWithMetadata
{
public PreservedGameSession Session;
public DateTime Timestamp;
public PreservedSessionWithMetadata(PreservedGameSession session, DateTime timestamp)
{
Session = session;
Timestamp = timestamp;
}
}
internal class VoidManagerPlugin : VoidPlugin
{
public override MultiplayerType MPType => (MultiplayerType)8;
}
[BepInPlugin("com.gummyboars.voidcrew.saveslots", "Save Slots", "1.0.1")]
public class SaveSlotsPlugin : BaseUnityPlugin
{
private const string pluginGUID = "com.gummyboars.voidcrew.saveslots";
private const string pluginName = "Save Slots";
private const string pluginVersion = "1.0.1";
private Harmony HarmonyInstance = null;
public static ManualLogSource logger = Logger.CreateLogSource("Save Slots");
private void Awake()
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Expected O, but got Unknown
logger.LogInfo((object)"Loading plugin Save Slots.");
try
{
HarmonyInstance = new Harmony("com.gummyboars.voidcrew.saveslots");
Assembly executingAssembly = Assembly.GetExecutingAssembly();
HarmonyInstance.PatchAll(executingAssembly);
logger.LogInfo((object)"Plugin Save Slots version 1.0.1 loaded.");
ModdingUtils.RegisterLocalMod();
}
catch (Exception arg)
{
logger.LogError((object)string.Format("Could not load plugin {0}: {1}", "Save Slots", arg));
}
}
}
[HarmonyPatch]
public static class SessionSaver
{
public static Dictionary<string, PreservedSessionWithMetadata> Sessions = new Dictionary<string, PreservedSessionWithMetadata>();
public static string SessionsText = null;
public static void Set(PreservedGameSession session)
{
DateTime utcNow = DateTime.UtcNow;
SaveSlotsPlugin.logger.LogInfo((object)$"Saving session with id {session.GameSessionID} at time {utcNow}");
Sessions[session.GameSessionID] = new PreservedSessionWithMetadata(session, utcNow);
}
[HarmonyPostfix]
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
private static void PatchAfterProfileCreation()
{
CloudAuthenticate.OnAuthenticated += LoadPreservedSessions;
}
private static async void LoadPreservedSessions()
{
SessionsText = await CloudSyncController.ReadFromCloud("PreservedSessions");
if (SessionsText == null)
{
SessionsText = "";
}
if (PlayerProfile.IsInitalized)
{
SaveSlotsPlugin.logger.LogInfo((object)"Preserved sessions were loaded after the rest of the profile.");
InitializePreservedSessions();
}
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ProfileDataValidator), "PostSetupValidate")]
private static void PatchAfterProfileLoad()
{
if (SessionsText != null)
{
SaveSlotsPlugin.logger.LogInfo((object)"Profile was loaded after preserved sessions.");
InitializePreservedSessions();
}
}
private static void InitializePreservedSessions()
{
PlayerProfile instance = PlayerProfile.Instance;
CloudLocalProfile val = (CloudLocalProfile)(object)((instance is CloudLocalProfile) ? instance : null);
if (val == null)
{
return;
}
if (string.IsNullOrEmpty(SessionsText))
{
SaveSlotsPlugin.logger.LogInfo((object)"No preserved sessions found");
if (((PlayerProfile)val).PreservedSession.PreservedSession != null && !string.IsNullOrEmpty(((PlayerProfile)val).PreservedSession.PreservedSession.GameSessionID))
{
SaveSlotsPlugin.logger.LogInfo((object)"Populating preserved sessions from preserved session");
Set(((PlayerProfile)val).PreservedSession.PreservedSession);
}
return;
}
Sessions = JsonConvert.DeserializeObject<Dictionary<string, PreservedSessionWithMetadata>>(SessionsText);
SaveSlotsPlugin.logger.LogInfo((object)$"Loaded {Sessions.Count} preserved sessions");
if (((PlayerProfile)val).PreservedSession.PreservedSession != null && !string.IsNullOrEmpty(((PlayerProfile)val).PreservedSession.PreservedSession.GameSessionID) && !Sessions.ContainsKey(((PlayerProfile)val).PreservedSession.PreservedSession.GameSessionID))
{
SaveSlotsPlugin.logger.LogInfo((object)("Preserved session " + ((PlayerProfile)val).PreservedSession.PreservedSession.GameSessionID + " missing from preserved sessions; adding it"));
Set(((PlayerProfile)val).PreservedSession.PreservedSession);
}
}
[HarmonyPrefix]
[HarmonyPatch(typeof(CloudPlayerPreservedSessionSync), "ClearSession")]
private static void PatchBeforeSessionClear(CloudPlayerPreservedSessionSync __instance)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Expected O, but got Unknown
PropertyInfo propertyInfo = AccessTools.Property(typeof(CloudPlayerPreservedSessionSync), "PreservedSession");
PreservedGameSession val = (PreservedGameSession)propertyInfo.GetValue(__instance);
if (val != null && !string.IsNullOrEmpty(val.GameSessionID))
{
SaveSlotsPlugin.logger.LogInfo((object)("Removing session with id " + val.GameSessionID));
Sessions.Remove(val.GameSessionID);
}
}
[HarmonyPostfix]
[HarmonyPatch(typeof(CloudPlayerPreservedSessionSync), "ClearSession")]
private static void PatchAfterSessionClear()
{
CloudSyncController.Instance.Write("PreservedSessions", JsonConvert.SerializeObject((object)Sessions), true, (Action<bool>)null);
SaveSlotsPlugin.logger.LogInfo((object)$"Wrote {Sessions.Count} preserved sessions");
}
[HarmonyPrefix]
[HarmonyPatch(typeof(CloudPlayerPreservedSessionSync), "StoreSession")]
private static void PatchBeforeSessionSave(PreservedGameSession session)
{
if (session != null && !string.IsNullOrEmpty(session.GameSessionID))
{
Set(session);
}
}
[HarmonyPostfix]
[HarmonyPatch(typeof(CloudPlayerPreservedSessionSync), "StoreSession")]
private static void PatchAfterSessionSave()
{
CloudSyncController.Instance.Write("PreservedSessions", JsonConvert.SerializeObject((object)Sessions), true, (Action<bool>)null);
SaveSlotsPlugin.logger.LogInfo((object)$"Wrote {Sessions.Count} preserved sessions");
MethodInfo methodInfo = AccessTools.Method(typeof(PlayerProfileLocalSave), "SaveFile", (Type[])null, (Type[])null);
methodInfo.Invoke(null, new object[2]
{
"PRESERVED_SESSIONS",
JsonConvert.SerializeObject((object)Sessions)
});
}
}
[HarmonyPatch(typeof(GalaxyMapUIController), "UpdateStyles")]
public static class Patch_UpdateStyles
{
private static void Postfix(VisualElement ____mutatorsMenuRoot, GalaxyMapUIController __instance)
{
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Invalid comparison between Unknown and I4
Type type = AccessTools.Inner(typeof(GalaxyMapUIController), "GameModeEntry");
FieldInfo fieldInfo = AccessTools.Field(typeof(GalaxyMapUIController), "_shownGameModeEntry");
FieldInfo fieldInfo2 = AccessTools.Field(type, "GamemodeType");
object value = fieldInfo.GetValue(__instance);
if (value != null)
{
GamemodeType val = (GamemodeType)fieldInfo2.GetValue(value);
if ((int)val == 3)
{
UItoolkitExtensionMethods.SetDisplay(____mutatorsMenuRoot, true);
}
}
}
}
[HarmonyPatch(typeof(GalaxyMapUIController), "UpdateAvailableGamemodes")]
public static class Patch_UpdateAvailableGamemodes
{
private static GalaxyMapUIController Instance;
public static void UpdatePreservedSessionDisplay()
{
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Expected O, but got Unknown
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Invalid comparison between Unknown and I4
if (!((Object)(object)Instance != (Object)null))
{
return;
}
MethodInfo methodInfo = AccessTools.Method(typeof(GalaxyMapUIController), "UpdatePreservedSessionInfo", (Type[])null, (Type[])null);
methodInfo.Invoke(Instance, new object[0]);
PreservedGameSession preservedSession = PlayerProfile.Instance.PreservedSession.PreservedSession;
if (preservedSession != null)
{
FieldInfo fieldInfo = AccessTools.Field(typeof(GalaxyMapUIController), "_includedMutatorsList");
MutatorsElementListVE val = (MutatorsElementListVE)fieldInfo.GetValue(Instance);
UItoolkitExtensionMethods.SetDisplay(((VisualElement)val).parent, preservedSession.Mutators.Count > 0);
val.UpdateMutatorsList(preservedSession.Mutators.AsReadOnly());
if ((int)HubQuestManager.Instance.QuestStartType == 2)
{
HubShipManager.Instance.SelectShip(((GUIDUnion)(ref preservedSession.Ship)).AsIntArray());
MethodInfo methodInfo2 = AccessTools.Method(typeof(HubQuestManager), "NotifyPreservedQuestSelected", (Type[])null, (Type[])null);
methodInfo2.Invoke(HubQuestManager.Instance, new object[0]);
}
}
}
public static void UpdateJustTheMutatorsList()
{
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Expected O, but got Unknown
PreservedGameSession preservedSession = PlayerProfile.Instance.PreservedSession.PreservedSession;
if ((Object)(object)Instance != (Object)null && preservedSession != null)
{
FieldInfo fieldInfo = AccessTools.Field(typeof(GalaxyMapUIController), "_includedMutatorsList");
MutatorsElementListVE val = (MutatorsElementListVE)fieldInfo.GetValue(Instance);
UItoolkitExtensionMethods.SetDisplay(((VisualElement)val).parent, preservedSession.Mutators.Count > 0);
val.UpdateMutatorsList(preservedSession.Mutators.AsReadOnly());
}
}
private static void Prefix()
{
if (PlayerProfile.Instance.PreservedSession.PreservedSession != null && !string.IsNullOrEmpty(PlayerProfile.Instance.PreservedSession.PreservedSession.GameSessionID))
{
return;
}
PreservedSessionWithMetadata preservedSessionWithMetadata = null;
foreach (KeyValuePair<string, PreservedSessionWithMetadata> session in SessionSaver.Sessions)
{
if (preservedSessionWithMetadata == null || preservedSessionWithMetadata.Timestamp.CompareTo(session.Value.Timestamp) <= 0)
{
preservedSessionWithMetadata = session.Value;
}
}
if (preservedSessionWithMetadata != null)
{
SaveSlotsPlugin.logger.LogInfo((object)("Using latest saved session " + preservedSessionWithMetadata.Session.GameSessionID));
PlayerProfile.Instance.PreservedSession.PreservedSession = preservedSessionWithMetadata.Session;
}
}
private static void Postfix(GalaxyMapUIController __instance, MutatorsSelectionMenu ____mutatorsSelectionMenu)
{
Instance = __instance;
FieldInfo fieldInfo = AccessTools.Field(typeof(GalaxyMapUIController), "_gamemodeEntries");
IDictionary dictionary = (IDictionary)fieldInfo.GetValue(__instance);
object obj = dictionary[(object)(GamemodeType)3];
if (obj == null)
{
SaveSlotsPlugin.logger.LogInfo((object)"Preserved game mode entry was null");
return;
}
Type type = AccessTools.Inner(typeof(GalaxyMapUIController), "GameModeEntry");
FieldInfo fieldInfo2 = AccessTools.Field(type, "OnShown");
Action a = (Action)fieldInfo2.GetValue(obj);
a = (Action)Delegate.Combine(a, (Action)delegate
{
____mutatorsSelectionMenu.OnShownQuestChangedInGalaxyMap((QuestAsset)null);
UpdateJustTheMutatorsList();
});
fieldInfo2.SetValue(obj, a);
}
}
[HarmonyPatch(typeof(MutatorsSelectionMenu))]
public static class Patch_MutatorsMenu
{
public static Dictionary<string, Toggle> saves = new Dictionary<string, Toggle>();
public static Label mutatorsDropdownLabel;
public static string origText;
public static string GetSaveText(PreservedSessionWithMetadata session)
{
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
DateTime dateTime = session.Timestamp.ToLocalTime();
string text = dateTime.ToShortDateString() + " " + dateTime.ToShortTimeString();
string text2 = "SAVED SESSION";
ShipLoadoutDataDef val = default(ShipLoadoutDataDef);
if (!((ResourceAssetContainer<ShipLoadoutDataContainer, ShipLoadoutData, ShipLoadoutDataDef>)(object)ResourceAssetContainer<ShipLoadoutDataContainer, ShipLoadoutData, ShipLoadoutDataDef>.Instance).TryGetByGuid(session.Session.Ship, ref val))
{
return (text2 + " " + text).ToUpper();
}
if (Object.op_Implicit((Object)(object)val.ShipContextInfo) && val.ContextInfo != null)
{
text2 = val.ShipContextInfo.HeaderText + ": " + val.ContextInfo.HeaderText;
}
string text3 = (text2 + " " + text).ToUpper();
if (text3.StartsWith("METEM "))
{
text3 = text3.Substring("METEM ".Length);
}
return text3;
}
[HarmonyPrefix]
[HarmonyPatch("UpdateMutatorStates")]
private static void BeforeUpdate(QuestAsset ____shownQuest, Dictionary<GUIDUnion, Toggle> ____mutatorToggles)
{
if ((Object)(object)____shownQuest == (Object)null)
{
return;
}
foreach (KeyValuePair<GUIDUnion, Toggle> ____mutatorToggle in ____mutatorToggles)
{
UItoolkitExtensionMethods.SetDisplay(((VisualElement)____mutatorToggle.Value).parent, true);
}
foreach (KeyValuePair<string, Toggle> safe in saves)
{
UItoolkitExtensionMethods.SetDisplay(((VisualElement)safe.Value).parent, false);
}
}
[HarmonyPostfix]
[HarmonyPatch("UpdateMutatorStates")]
private static void AfterUpdate(QuestAsset ____shownQuest, Dictionary<GUIDUnion, Toggle> ____mutatorToggles, Label ____mutatorsSelectedLabel, Label ____unseenCounter, MutatorsSelectionMenu __instance, MutatorsElementListVE ____selectedMutatorsList)
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Expected O, but got Unknown
mutatorsDropdownLabel = (Label)((VisualElement)____mutatorsSelectedLabel).parent[0];
if ((Object)(object)____shownQuest != (Object)null)
{
if (!string.IsNullOrEmpty(origText))
{
((TextElement)mutatorsDropdownLabel).text = origText;
origText = null;
}
UItoolkitExtensionMethods.SetDisplay(((VisualElement)____selectedMutatorsList).parent, true);
__instance.CheckForUnseenMutators();
return;
}
if (string.IsNullOrEmpty(origText))
{
origText = ((TextElement)mutatorsDropdownLabel).text;
}
string text = "SAVED SESSION";
if (PlayerProfile.Instance.PreservedSession.PreservedSession != null && SessionSaver.Sessions.ContainsKey(PlayerProfile.Instance.PreservedSession.PreservedSession.GameSessionID))
{
text = GetSaveText(SessionSaver.Sessions[PlayerProfile.Instance.PreservedSession.PreservedSession.GameSessionID]);
}
((TextElement)mutatorsDropdownLabel).text = text;
((TextElement)____mutatorsSelectedLabel).text = "";
UItoolkitExtensionMethods.SetDisplay((VisualElement)(object)____unseenCounter, false);
UItoolkitExtensionMethods.SetDisplay(((VisualElement)____selectedMutatorsList).parent, false);
foreach (KeyValuePair<GUIDUnion, Toggle> ____mutatorToggle in ____mutatorToggles)
{
UItoolkitExtensionMethods.SetDisplay(((VisualElement)____mutatorToggle.Value).parent, false);
}
foreach (KeyValuePair<string, Toggle> safe in saves)
{
UItoolkitExtensionMethods.SetDisplay(((VisualElement)safe.Value).parent, true);
}
}
[HarmonyPostfix]
[HarmonyPatch("CheckForUnseenMutators")]
private static void ReUpdateMutatorStates(QuestAsset ____shownQuest, Dictionary<GUIDUnion, Toggle> ____mutatorToggles, Label ____mutatorsSelectedLabel, Label ____unseenCounter, MutatorsSelectionMenu __instance, MutatorsElementListVE ____selectedMutatorsList)
{
if ((Object)(object)____shownQuest == (Object)null)
{
AfterUpdate(____shownQuest, ____mutatorToggles, ____mutatorsSelectedLabel, ____unseenCounter, __instance, ____selectedMutatorsList);
}
}
[HarmonyPostfix]
[HarmonyPatch("UpdateSelectedMutatorsCount")]
private static void ReUpdateMutatorsCount(QuestAsset ____shownQuest, Dictionary<GUIDUnion, Toggle> ____mutatorToggles, Label ____mutatorsSelectedLabel, Label ____unseenCounter, MutatorsSelectionMenu __instance, MutatorsElementListVE ____selectedMutatorsList)
{
if ((Object)(object)____shownQuest == (Object)null)
{
AfterUpdate(____shownQuest, ____mutatorToggles, ____mutatorsSelectedLabel, ____unseenCounter, __instance, ____selectedMutatorsList);
}
}
[HarmonyPrefix]
[HarmonyPatch("FillMutatorsList")]
private static void CreateSaveVisualElements(MutatorsSelectionMenu __instance, ScrollView ____mutatorsView, SelectableVE ____mutatorsMenuToggle)
{
foreach (KeyValuePair<string, Toggle> safe in saves)
{
UItoolkitExtensionMethods.SetDisplay(((VisualElement)safe.Value).parent, false);
}
saves.Clear();
foreach (KeyValuePair<string, PreservedSessionWithMetadata> session in SessionSaver.Sessions)
{
DateTime dateTime = session.Value.Timestamp.ToLocalTime();
string saveText = GetSaveText(session.Value);
Toggle val = MakeSaveEntry(((VisualElement)____mutatorsView).contentContainer, session.Key, saveText, ____mutatorsMenuToggle);
if (PlayerProfile.Instance.PreservedSession.PreservedSession != null && PlayerProfile.Instance.PreservedSession.PreservedSession.GameSessionID == session.Key)
{
((BaseField<bool>)(object)val).SetValueWithoutNotify(true);
}
}
}
private static Toggle MakeSaveEntry(VisualElement parent, string sessionID, string labelText, SelectableVE menuToggle)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Expected O, but got Unknown
SelectableVE val = new SelectableVE();
((VisualElement)val).name = sessionID;
((Focusable)val).focusable = true;
((VisualElement)val).AddToClassList("mutator-entry");
UIAudioProvider.AddSounds((VisualElement)(object)val, "list");
parent.Add((VisualElement)(object)val);
VisualElement val2 = VEFactoryHelper.SetupVE<VisualElement>((VisualElement)(object)val, "Overlays", new string[1] { "mutator-overlays" });
VEFactoryHelper.SetupVE<VisualElement>(val2, "UnseenMarker", new string[1] { "mutator-unseen-marker" });
VEFactoryHelper.SetupVE<VisualElement>(val2, "LockedIcon", new string[1] { "mutator-locked-icon" });
VEFactoryHelper.SetupVE<VisualElement>((VisualElement)(object)val, "MutatorIcon", new string[1] { "mutator-icon" }).style.backgroundImage = new StyleBackground(DataTable<UIHelperData>.Instance.SaveProgressContextInfo.Icon);
Toggle toggle = new Toggle(labelText);
UIAudioProvider.AddSounds((VisualElement)(object)toggle, "list");
((VisualElement)toggle).AddToClassList("metem-toggle");
((VisualElement)toggle).AddToClassList("mutator-toggle");
INotifyValueChangedExtensions.RegisterValueChangedCallback<bool>((INotifyValueChanged<bool>)(object)toggle, (EventCallback<ChangeEvent<bool>>)delegate(ChangeEvent<bool> evt)
{
if (evt.newValue)
{
if (!SessionSaver.Sessions.ContainsKey(sessionID) || string.IsNullOrEmpty(SessionSaver.Sessions[sessionID].Session.GameSessionID))
{
SaveSlotsPlugin.logger.LogError((object)("Tried to select session not in saves: " + sessionID));
((BaseField<bool>)(object)toggle).SetValueWithoutNotify(false);
}
else
{
foreach (KeyValuePair<string, Toggle> safe in saves)
{
if (safe.Key != sessionID)
{
((BaseField<bool>)(object)safe.Value).SetValueWithoutNotify(false);
}
}
SaveSlotsPlugin.logger.LogInfo((object)("Setting profile preserved session to " + sessionID));
PlayerProfile.Instance.PreservedSession.PreservedSession = SessionSaver.Sessions[sessionID].Session;
((TextElement)mutatorsDropdownLabel).text = ((BaseField<bool>)(object)toggle).label;
Patch_UpdateAvailableGamemodes.UpdatePreservedSessionDisplay();
menuToggle.Unselect();
}
}
else
{
string text = null;
foreach (KeyValuePair<string, Toggle> safe2 in saves)
{
if (safe2.Key != sessionID && ((BaseField<bool>)(object)safe2.Value).value)
{
text = safe2.Key;
break;
}
}
if (text == null)
{
SaveSlotsPlugin.logger.LogInfo((object)"Tried to deselect the last session");
((BaseField<bool>)(object)toggle).SetValueWithoutNotify(true);
}
else if (PlayerProfile.Instance.PreservedSession.PreservedSession == null || PlayerProfile.Instance.PreservedSession.PreservedSession.GameSessionID == sessionID)
{
SaveSlotsPlugin.logger.LogInfo((object)("Deselected " + sessionID + ". Setting profile preserved session to " + text));
PlayerProfile.Instance.PreservedSession.PreservedSession = SessionSaver.Sessions[text].Session;
if (saves.ContainsKey(text))
{
((TextElement)mutatorsDropdownLabel).text = ((BaseField<bool>)(object)saves[text]).label;
Patch_UpdateAvailableGamemodes.UpdatePreservedSessionDisplay();
menuToggle.Unselect();
}
}
}
});
((VisualElement)val).Add((VisualElement)(object)toggle);
saves.Add(sessionID, toggle);
return toggle;
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "SaveSlots";
public const string PLUGIN_NAME = "Save Slots";
public const string PLUGIN_VERSION = "1.0.1";
}
}