using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using ModdingTales; using Unity.Mathematics; 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("EnhancedAssetsPlugin")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Nth Dimension")] [assembly: AssemblyProduct("EnhancedAssetsPlugin")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("EnhancedAssetsPlugin")] [assembly: ComVisible(false)] [assembly: Guid("c303405d-e66c-4316-9cdb-4e3ca15c6360")] [assembly: AssemblyFileVersion("2.0.1.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("2.0.1.0")] namespace LordAshes; [BepInPlugin("org.lordashes.plugins.spawnparty", "Spawn Party Plugin", "2.0.1.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class SpawnPartyPlugin : BaseUnityPlugin { public static class PatcheCreaturePresenterOnCreatureAdded { public static void Postfix(in object __0) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown LoggingPlugin.LogDebug("CreaturePresenter.OnCreatureAdded Fired"); Generic val = new Generic(_CreatureData, __0); if (val != null && val.Instance() != null) { if (val.Get("Alias") == "Party") { LoggingPlugin.LogDebug("Spawned Party Pointer. Replacing with party minis."); ((MonoBehaviour)_self).StartCoroutine(SpawnParty(val.Get("CreatureId"))); } } else { LoggingPlugin.LogTrace("Null CreatureData. Ignoring"); } } } public static class PatcheCreatureBoardAssetOnCreatureDataChanged { public static void Postfix(object __instance, in object __0) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown LoggingPlugin.LogDebug("CreatureBoardAsset.OnCreatureDataChanged Fired"); Generic val = new Generic(_CreatureBoardAsset, __instance); Generic value = new Generic(_CreatureData, __0); if (val != null && val.Instance() != null) { if (partyMembers.ContainsKey(val.Get("CreatureId"))) { LoggingPlugin.LogDebug("Updating Stored CreatureData For Creature " + val.Get("CreatureId")); partyMembers[val.Get("CreatureId")] = value; } else { LoggingPlugin.LogTrace("Non-Party Member. Ignoring"); } } else { LoggingPlugin.LogTrace("Null Creature. Ignoring"); } } } public static class Utility { public static void PostOnMainPage(BaseUnityPlugin plugin) { string text = "Lord Ashes" + ("Lord Ashes".ToUpper().EndsWith("S") ? "'" : "'s"); ModdingUtils.AddPluginToMenuList((BaseUnityPlugin)(object)_self, text); } } [CompilerGenerated] private sealed class d__19 : IEnumerator, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public object[] creatures; public SpawnPartyPlugin <>4__this; private object[] <>s__1; private int <>s__2; private object 5__3; private object[] <>s__4; private int <>s__5; private object 5__6; private object[] <>s__7; private int <>s__8; private object 5__9; private object[] <>s__10; private int <>s__11; private object 5__12; private object[] <>s__13; private int <>s__14; private object 5__15; private object[] <>s__16; private int <>s__17; private object 5__18; private object[] <>s__19; private int <>s__20; private object 5__21; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__19(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>s__1 = null; 5__3 = null; <>s__4 = null; 5__6 = null; <>s__7 = null; 5__9 = null; <>s__10 = null; 5__12 = null; <>s__13 = null; 5__15 = null; <>s__16 = null; 5__18 = null; <>s__19 = null; 5__21 = null; <>1__state = -2; } private bool MoveNext() { //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Expected O, but got Unknown //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Expected O, but got Unknown //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Expected O, but got Unknown //IL_02b7: Unknown result type (might be due to invalid IL or missing references) //IL_02c1: Expected O, but got Unknown //IL_0356: Unknown result type (might be due to invalid IL or missing references) //IL_0360: Expected O, but got Unknown //IL_03f5: Unknown result type (might be due to invalid IL or missing references) //IL_03ff: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>s__1 = creatures; for (<>s__2 = 0; <>s__2 < <>s__1.Length; <>s__2++) { 5__3 = <>s__1[<>s__2]; _CreatureManager.Invoke("SetCreatureExplicitHideState", new object[2] { 5__3, false }); 5__3 = null; } <>s__1 = null; <>2__current = (object)new WaitForSeconds(0.25f); <>1__state = 1; return true; case 1: <>1__state = -1; <>s__4 = creatures; for (<>s__5 = 0; <>s__5 < <>s__4.Length; <>s__5++) { 5__6 = <>s__4[<>s__5]; _CreatureManager.Invoke("SetCreatureExplicitHideState", new object[2] { 5__6, true }); 5__6 = null; } <>s__4 = null; <>2__current = (object)new WaitForSeconds(0.25f); <>1__state = 2; return true; case 2: <>1__state = -1; <>s__7 = creatures; for (<>s__8 = 0; <>s__8 < <>s__7.Length; <>s__8++) { 5__9 = <>s__7[<>s__8]; _CreatureManager.Invoke("SetCreatureExplicitHideState", new object[2] { 5__9, false }); 5__9 = null; } <>s__7 = null; <>2__current = (object)new WaitForSeconds(0.25f); <>1__state = 3; return true; case 3: <>1__state = -1; <>s__10 = creatures; for (<>s__11 = 0; <>s__11 < <>s__10.Length; <>s__11++) { 5__12 = <>s__10[<>s__11]; _CreatureManager.Invoke("SetCreatureExplicitHideState", new object[2] { 5__12, true }); 5__12 = null; } <>s__10 = null; <>2__current = (object)new WaitForSeconds(0.25f); <>1__state = 4; return true; case 4: <>1__state = -1; <>s__13 = creatures; for (<>s__14 = 0; <>s__14 < <>s__13.Length; <>s__14++) { 5__15 = <>s__13[<>s__14]; _CreatureManager.Invoke("SetCreatureExplicitHideState", new object[2] { 5__15, false }); 5__15 = null; } <>s__13 = null; <>2__current = (object)new WaitForSeconds(0.25f); <>1__state = 5; return true; case 5: <>1__state = -1; <>s__16 = creatures; for (<>s__17 = 0; <>s__17 < <>s__16.Length; <>s__17++) { 5__18 = <>s__16[<>s__17]; _CreatureManager.Invoke("SetCreatureExplicitHideState", new object[2] { 5__18, true }); 5__18 = null; } <>s__16 = null; <>2__current = (object)new WaitForSeconds(0.25f); <>1__state = 6; return true; case 6: <>1__state = -1; <>s__19 = creatures; for (<>s__20 = 0; <>s__20 < <>s__19.Length; <>s__20++) { 5__21 = <>s__19[<>s__20]; _CreatureManager.Invoke("SetCreatureExplicitHideState", new object[2] { 5__21, false }); 5__21 = null; } <>s__19 = null; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class d__20 : IEnumerator, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public object partyPointerCid; private object 5__1; private Generic 5__2; private Transform 5__3; private float3 5__4; private quaternion 5__5; private Dictionary.ValueCollection.Enumerator <>s__6; private Generic 5__7; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__20(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { 5__1 = null; 5__2 = null; 5__3 = null; <>s__6 = default(Dictionary.ValueCollection.Enumerator); 5__7 = null; <>1__state = -2; } private bool MoveNext() { //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Expected O, but got Unknown //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Expected O, but got Unknown //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02b4: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_030d: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; LoggingPlugin.LogDebug("Spawning Party"); LoggingPlugin.LogDebug("Party Pointed Cid: " + partyPointerCid.ToString()); 5__1 = null; break; case 1: <>1__state = -1; break; } while (5__1 == null) { try { 5__1 = _CreaturePresenter.Invoke("TryGetAsset", new object[2] { partyPointerCid, null })[1]; } catch { } LoggingPlugin.LogTrace("Asset Obj: " + ((5__1 != null) ? 5__1.ToString() : "Null")); if (5__1 == null) { <>2__current = (object)new WaitForSeconds(1f); <>1__state = 1; return true; } } 5__2 = new Generic(_CreatureBoardAsset, 5__1); LoggingPlugin.LogTrace("Party Pointer Reference Obtained To " + 5__2.Get("Name")); 5__3 = 5__2.Get("Transform"); 5__4 = new float3(5__3.position.x, 5__3.position.y, 5__3.position.z); 5__5 = new quaternion(Quaternion.identity.x, Quaternion.identity.y, Quaternion.identity.z, Quaternion.identity.w); LoggingPlugin.LogTrace("Target Transform Reference Obtained To " + 5__2.Get("Name")); LoggingPlugin.LogDebug("Party Member Count " + partyMembers.Values.Count); <>s__6 = partyMembers.Values.GetEnumerator(); try { while (<>s__6.MoveNext()) { 5__7 = <>s__6.Current; if (5__7 != null && 5__7.Instance() != null) { LoggingPlugin.LogDebug("Party Member CreatureId Is: " + 5__7.Get("CreatureId")); _CreatureManager.Invoke("TryCreateAndAddNewCreature", new object[6] { 5__7.Instance(), 5__4, 5__5, false, false, true }); 5__4 = new float3(5__4.x + 1f, 5__4.y, 5__4.z); } else { LoggingPlugin.LogWarning("Party Member Data Is Null"); } 5__7 = null; } } finally { ((IDisposable)<>s__6).Dispose(); } <>s__6 = default(Dictionary.ValueCollection.Enumerator); LoggingPlugin.LogDebug("Removing Party Pointer Creature " + 5__2.Get("CreatureId")); _CreatureManager.Invoke("DeleteCreature", new object[3] { 5__2.Get("CreatureId"), null, false }); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public const string Name = "Spawn Party Plugin"; public const string Guid = "org.lordashes.plugins.spawnparty"; public const string Version = "2.0.1.0"; public const string Author = "Lord Ashes"; public static KeyboardShortcut setTrigger; public static SpawnPartyPlugin _self = null; public static Generic _CreatureGuid = new Generic("CreatureGuid", (object)null); public static Generic _CreatureData = new Generic("CreatureDataV4", (object)null); public static Generic _LocalClient = new Generic("LocalClient", (object)null); public static Generic _CreaturePresenter = new Generic("CreaturePresenter", (object)null); public static Generic _CreatureManager = new Generic("CreatureManager", (object)null); public static Generic _CreatureBoardAsset = new Generic("CreatureBoardAsset", (string[])null, (object)null); public static Dictionary partyMembers = new Dictionary(); public static void ApplyPatches() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Expected O, but got Unknown LoggingPlugin.LogDebug("Harmony Patching"); Harmony val = new Harmony("org.lordashes.plugins.spawnparty"); LoggingPlugin.LogDebug("Patching CreaturePresenter.OnCreatureAdded"); MethodInfo methodInfo = _CreaturePresenter.Method("OnCreatureAdded"); MethodInfo method = typeof(PatcheCreaturePresenterOnCreatureAdded).GetMethod("Postfix"); val.Patch((MethodBase)methodInfo, (HarmonyMethod)null, new HarmonyMethod(method), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); LoggingPlugin.LogDebug("Patching CreatureBoardAsset.OnCreatureDataChanged"); MethodInfo methodInfo2 = _CreatureBoardAsset.Method("OnCreatureDataChanged"); MethodInfo method2 = typeof(PatcheCreatureBoardAssetOnCreatureDataChanged).GetMethod("Postfix"); val.Patch((MethodBase)methodInfo, (HarmonyMethod)null, new HarmonyMethod(method2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); LoggingPlugin.LogDebug("Patching Complete"); } private void Awake() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) _self = this; LoggingPlugin.SetLogLevel(((BaseUnityPlugin)this).Config.Bind("Settings", "Diagnostic Level", (DiagnosticLevel)3, (ConfigDescription)null).Value); string? assemblyQualifiedName = ((object)this).GetType().AssemblyQualifiedName; DiagnosticLevel logLevel = LoggingPlugin.GetLogLevel(); LoggingPlugin.LogInfo(assemblyQualifiedName + ": Active. (Diagnostic Mode = " + ((object)(DiagnosticLevel)(ref logLevel)).ToString() + ")"); setTrigger = ((BaseUnityPlugin)this).Config.Bind("Hotkeys", "Trigger To Save Selected Minis As Party Members", new KeyboardShortcut((KeyCode)277, (KeyCode[])(object)new KeyCode[1] { (KeyCode)305 }), (ConfigDescription)null).Value; ApplyPatches(); Utility.PostOnMainPage((BaseUnityPlugin)(object)this); } private void Update() { //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Expected O, but got Unknown if (!((KeyboardShortcut)(ref setTrigger)).IsUp()) { return; } LoggingPlugin.LogDebug("Adding Selected Minis To Party"); partyMembers.Clear(); try { object obj = _LocalClient.Invoke("TryGetLassoedCreatureIds", new string[1] { "CreatureGuid[]&" }, new object[1])[1]; foreach (object item in (IEnumerable)obj) { LoggingPlugin.LogTrace("Adding Creature " + item?.ToString() + " To The Party"); object obj2 = _CreatureManager.Invoke("TryGetCreatureData", new object[2] { item, null })[1]; Generic.Info(_CreatureData.Type(), obj2); partyMembers.Add(item, new Generic(_CreatureData, obj2)); } ((MonoBehaviour)_self).StartCoroutine(BaseIndicatorBlink(partyMembers.Keys.ToArray())); } catch (Exception ex) { LoggingPlugin.LogDebug("Exception Getting Selected Minis: " + ex.Message); } } [IteratorStateMachine(typeof(d__19))] private IEnumerator BaseIndicatorBlink(object[] creatures) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__19(0) { <>4__this = this, creatures = creatures }; } [IteratorStateMachine(typeof(d__20))] private static IEnumerator SpawnParty(object partyPointerCid) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__20(0) { partyPointerCid = partyPointerCid }; } }