internal static void XMLWritePrefix(Control __instance, ref int __state) { __state = -1; foreach (Data data in __instance.Datas) { if (data is Config.EtceteraSystem etceteraSystem) { if (etceteraSystem.rampId >= BaseSlotID) { ResolveInfo RampResolveInfo = LoadedResolutionInfo.FirstOrDefault(x => x.Property == "Ramp" && x.LocalSlot == etceteraSystem.rampId); if (RampResolveInfo == null) { //ID is a sideloader ID but no resolve info found, set it to the default __state = 1; etceteraSystem.rampId = 1; } else { //Switch out the resolved ID for the original __state = etceteraSystem.rampId; etceteraSystem.rampId = RampResolveInfo.Slot; } } } } }
internal static void XMLReadPostfix(Control __instance) { foreach (Data data in __instance.Datas) { if (data is Config.EtceteraSystem etceteraSystem) { if (etceteraSystem.rampId >= BaseSlotID) //Saved with a resolved ID, reset it to default { etceteraSystem.rampId = 1; } else { var xmlDoc = XDocument.Load("UserData/config/system.xml"); string rampGUID = xmlDoc.Element("System").Element("Etc").Element("rampGUID")?.Value; if (!rampGUID.IsNullOrWhiteSpace()) { ResolveInfo RampResolveInfo = LoadedResolutionInfo.FirstOrDefault(x => x.Property == "Ramp" && x.GUID == rampGUID && x.Slot == etceteraSystem.rampId); if (RampResolveInfo == null) //Missing mod, reset ID to default { etceteraSystem.rampId = 1; } else //Restore the resolved ID { etceteraSystem.rampId = RampResolveInfo.LocalSlot; } } } } } }
internal static void ResolveStudioRamp(ExtensibleSaveFormat.PluginData extData, ResolveType resolveType) { #if KK //Set ramp ID to the resolved ID int rampID = Studio.Studio.Instance.sceneInfo.rampG; if (extData != null && extData.data.ContainsKey("rampInfoGUID")) { string rampGUID = (string)extData.data["rampInfoGUID"]; ResolveInfo intResolve = LoadedResolutionInfo.FirstOrDefault(x => x.Property == "Ramp" && x.GUID == rampGUID && x.Slot == rampID); if (intResolve != null) { if (resolveType == ResolveType.Load && Sideloader.DebugLogging.Value) { Sideloader.Logger.LogDebug($"Resolving (Studio Ramp) [{rampID}] {rampID}->{intResolve.LocalSlot}"); } Studio.Studio.Instance.sceneInfo.rampG = intResolve.LocalSlot; } else { ShowGUIDError(rampGUID); } } else if (resolveType == ResolveType.Load) { if (!Lists.InternalDataList[ChaListDefine.CategoryNo.mt_ramp].ContainsKey(rampID)) { //Ramp ID saved to the scene doesn't exist in the items list, try compatibility resolving ResolveInfo intResolve = LoadedResolutionInfo.FirstOrDefault(x => x.Property == "Ramp" && x.Slot == rampID); if (intResolve != null) { //Found a matching sideloader mod if (Sideloader.DebugLogging.Value) { Sideloader.Logger.LogDebug($"Compatibility resolving (Studio Ramp) {rampID}->{intResolve.LocalSlot}"); } Studio.Studio.Instance.sceneInfo.rampG = intResolve.LocalSlot; } else { Sideloader.Logger.Log(BepInEx.Logging.LogLevel.Warning | BepInEx.Logging.LogLevel.Message, $"[UAR] Compatibility resolving (Studio Ramp) failed, no match found for ID {rampID}"); } } } #endif }
internal static void SceneInfoInit(SceneInfo __instance) { var xmlDoc = XDocument.Load("UserData/config/system.xml"); string rampGUID = xmlDoc.Element("System").Element("Etc").Element("rampGUID")?.Value; string rampIDXML = xmlDoc.Element("System").Element("Etc").Element("rampId")?.Value; if (!rampGUID.IsNullOrWhiteSpace() && !rampIDXML.IsNullOrWhiteSpace() && int.TryParse(rampIDXML, out int rampID)) { ResolveInfo RampResolveInfo = LoadedResolutionInfo.FirstOrDefault(x => x.Property == "Ramp" && x.GUID == rampGUID && x.Slot == rampID); if (RampResolveInfo == null) //Missing mod, reset ID to default { __instance.rampG = 1; } else //Restore the resolved ID { __instance.rampG = RampResolveInfo.LocalSlot; } } }
internal static void XMLWritePostfix(Control __instance, ref int __state) { int rampId = __state; if (rampId >= BaseSlotID) { foreach (Data data in __instance.Datas) { if (data is Config.EtceteraSystem etceteraSystem) { ResolveInfo RampResolveInfo = LoadedResolutionInfo.FirstOrDefault(x => x.Property == "Ramp" && x.LocalSlot == rampId); if (RampResolveInfo != null) { //Restore the resolved ID etceteraSystem.rampId = RampResolveInfo.LocalSlot; var xmlDoc = XDocument.Load("UserData/config/system.xml"); xmlDoc.Element("System").Element("Etc").Element("rampId").AddAfterSelf(new XElement("rampGUID", RampResolveInfo.GUID)); xmlDoc.Save("UserData/config/system.xml"); } } } } }