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 AdditionalContentFramework v1.0.3
plugins/AdditionalContentFramework.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("AdditionalContentFramework")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("AdditionalContentFramework")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("a49abfd9-fde7-4c8d-9798-d9cbe51418e3")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace AdditionalContentFramework; [Serializable] public class AdditionalSuitDef { public string suitID; public string suitName; public string suitTexture; } [Serializable] public class AdditionalContentModule { public string resourceFolder; public List<AdditionalSuitDef> suitDefList = new List<AdditionalSuitDef>(); public AdditionalContentModule(string folder) { resourceFolder = folder; } } [BepInPlugin("ACS.AdditionalContentFramework", "AdditionalContentFramework", "1.0.3")] public class AdditionalContentFrameworkBase : BaseUnityPlugin { [HarmonyPatch(typeof(StartOfRound))] internal class acgAdditionalContentPatch { [HarmonyPatch("Start")] [HarmonyPrefix] private static void acsAdditionalContentPatch(StartOfRound __instance) { try { if (IsContentLoaded) { return; } AddLog("finding suit prefab..."); for (int i = 0; i < __instance.unlockablesList.unlockables.Count; i++) { UnlockableItem val = __instance.unlockablesList.unlockables[i]; if ((Object)(object)val.suitMaterial != (Object)null && val.alreadyUnlocked) { PrefabUnlockableSuit = val; AddLog("found suit prefab!"); break; } } if (PrefabUnlockableSuit == null) { AddLog("ERROR: suit prefab was not found!"); return; } AddLog("loading content modules..."); string directoryName = Path.GetDirectoryName(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); string[] directories = Directory.GetDirectories(directoryName); string[] array = directories; foreach (string path in array) { string[] directories2 = Directory.GetDirectories(path); string[] array2 = directories2; foreach (string path2 in array2) { DirectoryInfo directoryInfo = new DirectoryInfo(path2); if (directoryInfo.Name.StartsWith("res")) { LoadContentModule(path2); } } DirectoryInfo directoryInfo2 = new DirectoryInfo(path); if (directoryInfo2.Name.StartsWith("res")) { LoadContentModule(path); } } AddLog("loaded content modules! (count=" + ContentModules.Count + ")"); AddLog("applying content modules..."); foreach (AdditionalContentModule contentModule in ContentModules) { ApplyContentModule(__instance, contentModule); } AddLog("applied content modules!"); IsContentLoaded = true; } catch (Exception ex) { AddLog("failed to load suits into lobby!\nERROR: " + ex); } } } private static AdditionalContentFrameworkBase Instance; private const string modGUID = "ACS.AdditionalContentFramework"; private const string modName = "AdditionalContentFramework"; private const string modVersion = "1.0.3"; private readonly Harmony harmony = new Harmony("ACS.AdditionalContentFramework"); private static ManualLogSource mls; public static bool IsContentLoaded = false; public static UnlockableItem PrefabUnlockableSuit = null; public static List<AdditionalContentModule> ContentModules = new List<AdditionalContentModule>(); public string ModGUID => "ACS.AdditionalContentFramework"; public string ModName => "AdditionalContentFramework"; public string ModVersion => "1.0.3"; public static void AddLog(string log) { mls.LogInfo((object)("AdditionalContentFramework - " + log)); } private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } mls = Logger.CreateLogSource("ACS.AdditionalContentFramework"); AddLog("initializing..."); harmony.PatchAll(); AddLog("initialized!"); } public static AdditionalSuitDef LoadContentPiece_Suit(string defStr) { try { return JsonUtility.FromJson<AdditionalSuitDef>(defStr); } catch (Exception ex) { AddLog("failed to load content module piece (suitDef='" + defStr + "')!\nERROR: " + ex); return null; } } public static void LoadContentModule(string path) { try { AddLog("attempting to load suits from path:" + path); string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), path); string text2 = Path.Combine(text, "suit-defs.json"); AddLog("attempting to parse json file: " + text2); string text3 = File.ReadAllText(text2); if (text3 == null) { AddLog("ERROR: json file was not found or invalid"); return; } AdditionalContentModule additionalContentModule = new AdditionalContentModule(text); string[] array = text3.Split(new char[1] { '[' }); array = array[1].Split(new char[1] { ']' }); array = array[0].Split(new char[1] { '{' }); for (int i = 1; i < array.Length; i++) { string text4 = "{" + array[i].Trim(); if (i != array.Length - 1) { text4 = text4.Substring(0, text4.Length - 1); } try { AdditionalSuitDef additionalSuitDef = JsonUtility.FromJson<AdditionalSuitDef>(text4); if (additionalSuitDef != null) { additionalContentModule.suitDefList.Add(additionalSuitDef); AddLog("\tloaded suit def: " + additionalSuitDef.suitName); } } catch (Exception ex) { AddLog("failed to load content module piece (json='" + text4 + "')!\nERROR: " + ex); } } ContentModules.Add(additionalContentModule); AddLog("finished loading suits from path:" + path); } catch (Exception ex2) { AddLog("failed to load content module!\nERROR: " + ex2); } } public static void ApplyContentModule(StartOfRound __instance, AdditionalContentModule suitDefManifest) { AddLog("applying additional content module from: " + suitDefManifest.resourceFolder + "..."); foreach (AdditionalSuitDef suitDef in suitDefManifest.suitDefList) { AddSuitToRack(__instance, suitDef, suitDefManifest.resourceFolder); } AddLog("applyed additional content module from: " + suitDefManifest.resourceFolder + "!"); } public static void AddSuitToRack(StartOfRound __instance, AdditionalSuitDef suitDef, string resourcePath) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown AddLog("adding suit to rack {id=" + suitDef.suitID + ", name=" + suitDef.suitName + "}..."); UnlockableItem val = JsonUtility.FromJson<UnlockableItem>(JsonUtility.ToJson((object)PrefabUnlockableSuit)); Texture2D val2 = new Texture2D(2, 2); ImageConversion.LoadImage(val2, File.ReadAllBytes(Path.Combine(resourcePath, suitDef.suitTexture))); Material val3 = Object.Instantiate<Material>(val.suitMaterial); val3.mainTexture = (Texture)(object)val2; val.suitMaterial = val3; val.unlockableName = suitDef.suitName; __instance.unlockablesList.unlockables.Add(val); AddLog("added suit to rack {id=" + suitDef.suitID + ", name=" + suitDef.suitName + "}! (new unlockable count is " + __instance.unlockablesList.unlockables.Count + ")"); } }