using 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 + ")");
}
}