using System; using System.Collections.Generic; using HarmonyLib; using Process; using Util; namespace AquaMai.Fix { /** * Fix character selection crashing due to missing character data */ public class FixCharaCrash { // Check if the return is null. If it is, make up a color [HarmonyPostfix] [HarmonyPatch(typeof(CharacterSelectProces), "GetMapColorData")] public static void GetMapColorData(ref CharacterSelectProces __instance, ref CharacterMapColorData __result) { if (__result != null) return; // 1 is a color that definitely exists if (MapMaster.GetSlotData(1) == null) { MapMaster.GetSlotData(1).Load(); } __result = MapMaster.GetSlotData(1); } // This is called when loading the music selection screen, to display characters on the top screen [HarmonyPrefix] [HarmonyPatch(typeof(Monitor.CommonMonitor), "SetCharacterSlot", new Type[] { typeof(MessageCharactorInfomationData) })] public static bool SetCharacterSlot(ref MessageCharactorInfomationData data, Dictionary ____characterSlotData) { // Some characters are not found in this dictionary. We simply skip loading those characters if (!____characterSlotData.ContainsKey(data.MapKey)) { Console.Log($"Could not get CharacterSlotData for character [Index={data.Index}, MapKey={data.MapKey}], ignoring..."); return false; } return true; } } }