Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of CavePrinceCompat v1.0.0
BepInEx/patchers/REPOMapRepair.BluePrincePatcher.dll
Decompiled 6 hours agousing System.Collections.Generic; using System.IO; using System.Reflection; using BepInEx; using Mono.Cecil; [assembly: AssemblyVersion("0.3.0.0")] namespace REPOMapRepair.BluePrincePatcher; public static class BluePrinceCompatibilityPatcher { public static IEnumerable<string> TargetDLLs => new string[0]; public static void Initialize() { string[] files = Directory.GetFiles(Paths.PluginPath, "BluePrince.dll", SearchOption.AllDirectories); foreach (string path in files) { byte[] array = File.ReadAllBytes(path); if (array.Length == 41472 && array[10320] == 1 && array[10321] == 0 && array[10322] == 16 && array[10323] == 0) { array[10320] = 129; File.WriteAllBytes(path, array); } } } public static void Patch(AssemblyDefinition P_0) { } }
BepInEx/plugins/CavePrinceCompat/REPOMapRepair.dll
Decompiled 6 hours agousing System; using System.Collections; using System.Collections.Generic; using System.Reflection; using System.Runtime.CompilerServices; using BepInEx; using BepInEx.Logging; using HarmonyLib; using REPOLib.Modules; using REPOLib.Objects.Sdk; using UnityEngine; [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: AssemblyVersion("0.0.0.0")] namespace REPOMapRepair; [BepInPlugin("chatgpt.repo.maprepair", "REPO Map Repair", "0.3.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public sealed class Plugin : BaseUnityPlugin { internal static ManualLogSource Log; private Harmony _harmony; private void Awake() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; _harmony = new Harmony("chatgpt.repo.maprepair.v020"); MethodInfo methodInfo = AccessTools.Method(typeof(Levels), "RegisterLevel", new Type[1] { typeof(LevelContent) }, (Type[])null); if (methodInfo == null) { ((BaseUnityPlugin)this).Logger.LogError((object)"[MapRepair] REPOLib Levels.RegisterLevel(LevelContent) introuvable."); return; } MethodInfo methodInfo2 = AccessTools.Method(typeof(LevelRegisterPatch), "Prefix", (Type[])null, (Type[])null); _harmony.Patch((MethodBase)methodInfo, new HarmonyMethod(methodInfo2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); MethodInfo methodInfo3 = AccessTools.Method(typeof(ExtractionPoint), "Start", (Type[])null, (Type[])null); MethodInfo methodInfo4 = AccessTools.Method(typeof(UndergroundExtractionPatch), "Prefix", (Type[])null, (Type[])null); if (methodInfo3 != null && methodInfo4 != null) { _harmony.Patch((MethodBase)methodInfo3, new HarmonyMethod(methodInfo4), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); ((BaseUnityPlugin)this).Logger.LogInfo((object)"[MapRepair] Underground Cave extraction compatibility patch active."); } else { ((BaseUnityPlugin)this).Logger.LogWarning((object)"[MapRepair] ExtractionPoint.Start patch could not be installed."); } ((BaseUnityPlugin)this).Logger.LogInfo((object)"REPO Map Repair 0.3.0 loaded - Underground Cave + BluePrince patch."); } } internal static class UndergroundExtractionPatch { private static readonly FieldInfo ExtractionAreaField = AccessTools.Field(typeof(ExtractionPoint), "extractionArea"); private static readonly FieldInfo GrossUpField = AccessTools.Field(typeof(ExtractionPoint), "grossUp"); internal static void Prefix(ExtractionPoint __instance) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Expected O, but got Unknown if ((Object)(object)__instance == (Object)null) { return; } try { if (IsUndergroundCave(__instance)) { int num = 0; if (ExtractionAreaField != null && ExtractionAreaField.GetValue(__instance) == null) { GameObject val = new GameObject("REPOMapRepair_ExtractionArea"); val.transform.SetParent(((Component)__instance).transform, false); ExtractionAreaField.SetValue(__instance, val); num++; } if (GrossUpField != null && GrossUpField.GetValue(__instance) == null) { GameObject val2 = new GameObject("REPOMapRepair_GrossUp"); val2.transform.SetParent(((Component)__instance).transform, false); GrossUpField.SetValue(__instance, val2); num++; } if (num > 0) { Plugin.Log.LogInfo((object)("[MapRepair] UNDERGROUND EXTRACTION repaired " + num + " missing field(s) on " + GetPath(((Component)__instance).transform) + ".")); } } } catch (Exception ex) { Plugin.Log.LogError((object)("[MapRepair] Underground ExtractionPoint.Start repair failed: " + ex)); } } private static bool IsUndergroundCave(ExtractionPoint point) { try { if ((Object)(object)RunManager.instance != (Object)null && (Object)(object)RunManager.instance.levelCurrent != (Object)null) { string a = ((Object)RunManager.instance.levelCurrent).name ?? ""; if (string.Equals(a, "Level - Underground Cave", StringComparison.OrdinalIgnoreCase)) { return true; } } } catch { } Transform val = ((Component)point).transform; while ((Object)(object)val != (Object)null) { string text = ((Object)val).name ?? ""; if (text.StartsWith("Module - Custom - ", StringComparison.Ordinal) || text.StartsWith("Start Room - Custom - Lobby", StringComparison.Ordinal)) { return true; } val = val.parent; } return false; } private static string GetPath(Transform t) { if ((Object)(object)t == (Object)null) { return "<null>"; } string text = ((Object)t).name; Transform parent = t.parent; while ((Object)(object)parent != (Object)null) { text = ((Object)parent).name + "/" + text; parent = parent.parent; } return text; } } internal static class LevelRegisterPatch { private static readonly FieldInfo LevelField = AccessTools.Field(typeof(LevelContent), "_level"); private static readonly Dictionary<string, string[]> UndergroundMap = new Dictionary<string, string[]> { { "_startRooms", new string[1] { "Start Room - Custom - Lobby" } }, { "_modulesNormal1", new string[4] { "Module - Custom - N - 1", "Module - Custom - N - 2", "Module - Custom - N - 3", "Module - Custom - N - 4" } }, { "_modulesNormal2", new string[4] { "Module - Custom - N - 1", "Module - Custom - N - 2", "Module - Custom - N - 3", "Module - Custom - N - 4" } }, { "_modulesNormal3", new string[4] { "Module - Custom - N - 1", "Module - Custom - N - 2", "Module - Custom - N - 3", "Module - Custom - N - 4" } }, { "_modulesPassage1", new string[4] { "Module - Custom - P - 1", "Module - Custom - P - 2", "Module - Custom - P - 3", "Module - Custom - P - 4" } }, { "_modulesPassage2", new string[4] { "Module - Custom - P - 1", "Module - Custom - P - 2", "Module - Custom - P - 3", "Module - Custom - P - 4" } }, { "_modulesPassage3", new string[4] { "Module - Custom - P - 1", "Module - Custom - P - 2", "Module - Custom - P - 3", "Module - Custom - P - 4" } }, { "_modulesDeadEnd1", new string[2] { "Module - Custom - DE - 1", "Module - Custom - DE - 2" } }, { "_modulesDeadEnd2", new string[2] { "Module - Custom - DE - 1", "Module - Custom - DE - 2" } }, { "_modulesDeadEnd3", new string[2] { "Module - Custom - DE - 1", "Module - Custom - DE - 2" } }, { "_modulesExtraction1", new string[2] { "Module - Custom - E - 1", "Module - Custom - E - 2" } }, { "_modulesExtraction2", new string[2] { "Module - Custom - E - 1", "Module - Custom - E - 2" } }, { "_modulesExtraction3", new string[2] { "Module - Custom - E - 1", "Module - Custom - E - 2" } } }; internal static void Prefix(LevelContent levelContent) { if ((Object)(object)levelContent == (Object)null || LevelField == null) { return; } try { object? value = LevelField.GetValue(levelContent); Object val = (Object)((value is Object) ? value : null); if (!(val == (Object)null)) { string text = val.name ?? ""; string a = (text.StartsWith("Level - ", StringComparison.Ordinal) ? text.Substring("Level - ".Length) : text); if (string.Equals(a, "Underground Cave", StringComparison.OrdinalIgnoreCase)) { RepairUnderground(levelContent); } } } catch (Exception ex) { Plugin.Log.LogError((object)("[MapRepair] RegisterLevel diagnostic/repair failed: " + ex)); } } private static void RepairUnderground(LevelContent content) { IList list = GetList(content, "_startRooms"); if (list != null && list.Count > 0) { Plugin.Log.LogInfo((object)("[MapRepair] Underground Cave: StartRooms already populated (" + list.Count + "); repair not needed.")); return; } HashSet<string> hashSet = new HashSet<string>(StringComparer.Ordinal); foreach (KeyValuePair<string, string[]> item in UndergroundMap) { for (int i = 0; i < item.Value.Length; i++) { hashSet.Add(item.Value[i]); } } Dictionary<string, GameObject> dictionary = new Dictionary<string, GameObject>(StringComparer.Ordinal); GameObject[] array = Resources.FindObjectsOfTypeAll<GameObject>(); foreach (GameObject val in array) { if (!((Object)(object)val == (Object)null)) { string name = ((Object)val).name; if (hashSet.Contains(name) && !dictionary.ContainsKey(name)) { dictionary.Add(name, val); } } } int num = 0; int num2 = 0; foreach (KeyValuePair<string, string[]> item2 in UndergroundMap) { IList list2 = GetList(content, item2.Key); if (list2 == null) { Plugin.Log.LogWarning((object)("[MapRepair] Underground Cave: LevelContent field missing: " + item2.Key)); num += item2.Value.Length; continue; } for (int k = 0; k < item2.Value.Length; k++) { string text = item2.Value[k]; num++; if (!dictionary.TryGetValue(text, out var value) || (Object)(object)value == (Object)null) { Plugin.Log.LogWarning((object)("[MapRepair] Underground Cave: prefab not found: " + text)); continue; } bool flag = false; for (int l = 0; l < list2.Count; l++) { if (object.ReferenceEquals(list2[l], value)) { flag = true; break; } } if (!flag) { list2.Add(value); } num2++; } } Plugin.Log.LogInfo((object)("[MapRepair] UNDERGROUND RELINK complete: " + num2 + "/" + num + " module references restored; StartRooms=" + Count(content, "_startRooms") + ", N1=" + Count(content, "_modulesNormal1") + ", P1=" + Count(content, "_modulesPassage1") + ", DE1=" + Count(content, "_modulesDeadEnd1") + ", E1=" + Count(content, "_modulesExtraction1") + ".")); } private static IList GetList(LevelContent content, string fieldName) { FieldInfo fieldInfo = AccessTools.Field(typeof(LevelContent), fieldName); if (!(fieldInfo != null)) { return null; } return fieldInfo.GetValue(content) as IList; } private static int Count(LevelContent content, string fieldName) { return GetList(content, fieldName)?.Count ?? (-1); } }