internal static void SavePrefix() { Dictionary <string, object> ExtendedData = new Dictionary <string, object>(); List <StudioResolveInfo> ObjectResolutionInfo = new List <StudioResolveInfo>(); Dictionary <int, ObjectInfo> ObjectList = FindObjectInfoAndOrder(SearchType.All, typeof(OIItemInfo), out Dictionary <int, int> ItemOrder); Dictionary <int, int> LightOrder = FindObjectInfoOrder(SearchType.All, typeof(OILightInfo)); foreach (ObjectInfo oi in ObjectList.Where(x => x.Value is OIItemInfo || x.Value is OILightInfo).Select(x => x.Value)) { if (oi is OIItemInfo Item && Item.no >= BaseSlotID) { StudioResolveInfo extResolve = LoadedStudioResolutionInfo.Where(x => x.LocalSlot == Item.no).FirstOrDefault(); if (extResolve != null) { StudioResolveInfo intResolve = new StudioResolveInfo { GUID = extResolve.GUID, Slot = extResolve.Slot, LocalSlot = extResolve.LocalSlot, DicKey = Item.dicKey, ObjectOrder = ItemOrder[Item.dicKey] }; ObjectResolutionInfo.Add(intResolve); //set item ID back to default if (Sideloader.DebugLogging.Value) { Sideloader.Logger.LogDebug($"Setting [{Item.dicKey}] ID:{Item.no}->{extResolve.Slot}"); } Traverse.Create(Item).Property("no").SetValue(extResolve.Slot); } }
public static void ShowGUIDError(string guid) { if (LoadedResolutionInfo.Any(x => x.GUID == guid)) { //we have the GUID loaded, so the user has an outdated mod Sideloader.Logger.Log(LogLevel.Warning | (Sideloader.MissingModWarning.Value ? LogLevel.Message : LogLevel.None), $"[UAR] WARNING! Outdated mod detected! [{guid}]"); } #if KK else if (LoadedStudioResolutionInfo.Any(x => x.GUID == guid)) { //we have the GUID loaded, so the user has an outdated mod Sideloader.Logger.Log(LogLevel.Warning | (Sideloader.MissingModWarning.Value ? LogLevel.Message : LogLevel.None), $"[UAR] WARNING! Outdated mod detected! [{guid}]"); } #endif else { //did not find a match, we don't have the mod Sideloader.Logger.Log(LogLevel.Warning | (Sideloader.MissingModWarning.Value ? LogLevel.Message : LogLevel.None), $"[UAR] WARNING! Missing mod detected! [{guid}]"); } }
private static void SavePrefix() { Dictionary <string, object> ExtendedData = new Dictionary <string, object>(); List <StudioResolveInfo> ObjectResolutionInfo = new List <StudioResolveInfo>(); List <StudioPatternResolveInfo> PatternResolutionInfo = new List <StudioPatternResolveInfo>(); Dictionary <int, ObjectInfo> ObjectList = FindObjectInfoAndOrder(SearchType.All, typeof(OIItemInfo), out Dictionary <int, int> ItemOrder); Dictionary <int, int> LightOrder = FindObjectInfoOrder(SearchType.All, typeof(OILightInfo)); Dictionary <int, int> CharOrder = FindObjectInfoOrder(SearchType.All, typeof(OICharInfo)); foreach (ObjectInfo oi in ObjectList.Select(x => x.Value)) { if (oi is OIItemInfo Item) { //Resolve the IDs of any patterns applied to the item StudioPatternResolveInfo studioPatternResolveInfo = new StudioPatternResolveInfo { DicKey = Item.dicKey, ObjectOrder = ItemOrder[Item.dicKey], ObjectPatternInfo = new Dictionary <int, StudioPatternResolveInfo.PatternInfo>() }; #if KK for (int i = 0; i < Item.pattern.Length; i++) { if (Item.pattern[i].key >= BaseSlotID) { var intResolve = TryGetResolutionInfo(ChaListDefine.CategoryNo.mt_pattern, Item.pattern[i].key); if (intResolve != null) { studioPatternResolveInfo.ObjectPatternInfo[i] = new StudioPatternResolveInfo.PatternInfo { GUID = intResolve.GUID, Slot = intResolve.Slot, LocalSlot = Item.pattern[i].key }; //Set pattern ID back to original non-resolved ID if (Sideloader.DebugLogging.Value) { Sideloader.Logger.LogDebug($"Setting [{Item.dicKey}] ID:{Item.pattern[i].key}->{intResolve.Slot}"); } Item.pattern[i].key = intResolve.Slot; } } } #elif AI || HS2 for (int i = 0; i < Item.colors.Length; i++) { if (Item.colors[i].pattern.key >= BaseSlotID) { var intResolve = TryGetResolutionInfo(AIChara.ChaListDefine.CategoryNo.st_pattern, Item.colors[i].pattern.key); if (intResolve != null) { studioPatternResolveInfo.ObjectPatternInfo[i] = new StudioPatternResolveInfo.PatternInfo { GUID = intResolve.GUID, Slot = intResolve.Slot, LocalSlot = Item.colors[i].pattern.key }; //Set pattern ID back to original non-resolved ID if (Sideloader.DebugLogging.Value) { Sideloader.Logger.LogDebug($"Setting [{Item.dicKey}] ID:{Item.colors[i].pattern.key}->{intResolve.Slot}"); } Item.colors[i].pattern.key = intResolve.Slot; } } } #endif if (studioPatternResolveInfo.ObjectPatternInfo.Count > 0) { PatternResolutionInfo.Add(studioPatternResolveInfo); } if (Item.no >= BaseSlotID) { StudioResolveInfo extResolve = LoadedStudioResolutionInfo.Where(x => x.LocalSlot == Item.no).FirstOrDefault(); if (extResolve != null) { StudioResolveInfo intResolve = new StudioResolveInfo { GUID = extResolve.GUID, Slot = extResolve.Slot, LocalSlot = extResolve.LocalSlot, DicKey = Item.dicKey, ObjectOrder = ItemOrder[Item.dicKey] }; ObjectResolutionInfo.Add(intResolve); //Set item ID back to original non-resolved ID if (Sideloader.DebugLogging.Value) { Sideloader.Logger.LogDebug($"Setting [{Item.dicKey}] ID:{Item.no}->{extResolve.Slot}"); } Traverse.Create(Item).Property("no").SetValue(extResolve.Slot); } } } else if (oi is OILightInfo Light && Light.no >= BaseSlotID) { StudioResolveInfo extResolve = LoadedStudioResolutionInfo.Where(x => x.LocalSlot == Light.no).FirstOrDefault(); if (extResolve != null) { StudioResolveInfo intResolve = new StudioResolveInfo { GUID = extResolve.GUID, Slot = extResolve.Slot, LocalSlot = extResolve.LocalSlot, DicKey = Light.dicKey, ObjectOrder = LightOrder[Light.dicKey] }; ObjectResolutionInfo.Add(intResolve); //Set item ID back to original non-resolved ID if (Sideloader.DebugLogging.Value) { Sideloader.Logger.LogDebug($"Setting [{Light.dicKey}] ID:{Light.no}->{extResolve.Slot}"); } Traverse.Create(Light).Property("no").SetValue(extResolve.Slot); } }