Decompiled source of Auto Initiative v1.2.1

AutoInitiative.dll

Decompiled a week ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using AutoInitiative.Patches;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using Bounce.ManagedCollections;
using Bounce.Unmanaged;
using Dice;
using GameChat.UI;
using HarmonyLib;
using PluginUtilities;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Auto Initiative")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("HolloFox")]
[assembly: AssemblyProduct("MFC")]
[assembly: AssemblyCopyright("Copyright ©  2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("4e4deb5e-97f9-4901-bf67-6748a9c1229a")]
[assembly: AssemblyFileVersion("1.2.1.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.2.1.0")]
namespace AutoInitiative
{
	[BepInPlugin("org.hollofox.plugins.AutoInitiative", "Auto Initiative Plugin", "1.2.1.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class AutoInitiativePlugin : DependencyUnityPlugin
	{
		public const string Guid = "org.hollofox.plugins.AutoInitiative";

		internal const string Version = "1.2.1.0";

		public const string Name = "Auto Initiative Plugin";

		internal static ConfigEntry<string> InitiativeText;

		internal static ManualLogSource logger;

		private Harmony harmony;

		protected override void OnAwake()
		{
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Expected O, but got Unknown
			logger = ((BaseUnityPlugin)this).Logger;
			((BaseUnityPlugin)this).Logger.LogDebug((object)"Auto Initiative loaded");
			InitiativeText = ((BaseUnityPlugin)this).Config.Bind<string>("Initiative", "Required Text", "Initiative", (ConfigDescription)null);
			try
			{
				harmony = new Harmony("org.hollofox.plugins.AutoInitiative");
				harmony.PatchAll();
			}
			catch (Exception ex)
			{
				logger.LogError((object)ex.Message);
			}
		}

		protected override void OnDestroyed()
		{
			harmony.UnpatchSelf();
			InitUtils.ClearInitiatives();
		}
	}
}
namespace AutoInitiative.Properties
{
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	internal class Resources
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					resourceMan = new ResourceManager("AutoInitiative.Properties.Resources", typeof(Resources).Assembly);
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal Resources()
		{
		}
	}
}
namespace AutoInitiative.Patches
{
	internal static class InitUtils
	{
		internal static bool EditIsOpen = false;

		internal static Dictionary<CreatureGuid, (int, int)> Initiatives = new Dictionary<CreatureGuid, (int, int)>();

		internal static void ClearInitiatives()
		{
			Initiatives.Clear();
			AutoInitiativePlugin.logger.LogInfo((object)"Cleared Tracked Initiatives");
		}

		internal static void SetInitiatives()
		{
			InitiativeManager.SetEditQueue((from entry in Initiatives
				orderby entry.Value.Item1 descending, entry.Value.Item2 descending
				select entry).Select(delegate(KeyValuePair<CreatureGuid, (int, int)> entry)
			{
				//IL_0018: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Unknown result type (might be due to invalid IL or missing references)
				AutoInitiativePlugin.logger.LogInfo((object)$"{entry.Value}: {entry.Key}");
				return entry.Key;
			}).Select((Func<CreatureGuid, QueueElement>)((CreatureGuid e) => new QueueElement((ElementType)0, e))).ToArray());
		}
	}
	[HarmonyPatch(typeof(InitiativeManager), "RemoveElementFromEditQueue")]
	public class InitiativeManagerRemoveCreatureFromEditQueuePatch
	{
		private static void Postfix(QueueElement element)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			if ((int)element.Type == 0 && InitUtils.Initiatives.ContainsKey(element.CreatureGuid))
			{
				InitUtils.Initiatives.Remove(element.CreatureGuid);
				AutoInitiativePlugin.logger.LogInfo((object)$"Removed {element.CreatureGuid} from Initiative");
			}
		}
	}
	[HarmonyPatch(typeof(InitiativeManager), "ReleaseElement", new Type[] { typeof(QueueElement) })]
	public class InitiativeManagerReleaseCreaturePatch
	{
		private static void Postfix(QueueElement queueElement)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			if ((int)queueElement.Type == 0 && InitUtils.Initiatives.ContainsKey(queueElement.CreatureGuid))
			{
				InitUtils.Initiatives.Remove(queueElement.CreatureGuid);
				AutoInitiativePlugin.logger.LogInfo((object)$"Removed {queueElement.CreatureGuid} from Initiative");
			}
		}
	}
	[HarmonyPatch(typeof(UI_InitativeManager), "ClearEdit")]
	public class InitiativeManagerClearPatch
	{
		private static void Prefix()
		{
			InitUtils.ClearInitiatives();
			AutoInitiativePlugin.logger.LogInfo((object)"Initiatives cleared");
		}
	}
	[HarmonyPatch(typeof(UI_InitativeManager), "OpenEdit")]
	public class InitiativeManagerApplyEditPatch
	{
		private static void Prefix(bool value)
		{
			InitUtils.EditIsOpen = value;
			AutoInitiativePlugin.logger.LogInfo((object)$"Initiative Manager is open: {value}");
		}
	}
	[HarmonyPatch(typeof(DiceRollManager), "OnResults")]
	public class ReceiveDiceRolledPatch
	{
		private static void Postfix(ClientGuid clientId, RollResults rollResults, bool isGmRoll, bool showResult, ResultsOrigin resultsOrigin, NGuid optionalSymbioteInteropId)
		{
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0197: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a7: 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_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: 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)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_0202: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_014b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_0244: Unknown result type (might be due to invalid IL or missing references)
			//IL_0249: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Invalid comparison between Unknown and I4
			//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
			if (!LocalClient.IsInGmMode || !InitUtils.EditIsOpen)
			{
				return;
			}
			bool flag = false;
			int num = 0;
			int num2 = 0;
			num2 = 0;
			int num3 = 0;
			Enumerator<RollGroup> enumerator = rollResults.ResultsGroups.GetEnumerator();
			try
			{
				RollOperation val = default(RollOperation);
				RollResult val2 = default(RollResult);
				RollValue val3 = default(RollValue);
				while (enumerator.MoveNext())
				{
					RollGroup current = enumerator.Current;
					num = 0;
					if (current.Name != null && Convert.ToString(current.Name).Trim() != "" && current.Name.Contains(AutoInitiativePlugin.InitiativeText.Value, StringComparison.OrdinalIgnoreCase))
					{
						flag = true;
					}
					if (!flag)
					{
						continue;
					}
					Which val4 = ((RollOperand)(ref current.Result)).Get(ref val, ref val2, ref val3);
					if (!((Enum)val4).HasFlag((Enum)(object)(Which)0))
					{
						continue;
					}
					num = 1;
					try
					{
						num = (((int)val.Operator != 1) ? 1 : (-1));
					}
					catch (Exception)
					{
					}
					if (val.Operands != null)
					{
						Enumerator<RollOperand> enumerator2 = val.Operands.GetEnumerator();
						try
						{
							while (enumerator2.MoveNext())
							{
								RollOperand current2 = enumerator2.Current;
								((RollOperand)(ref current2)).Get(ref val, ref val2, ref val3);
								if (((DieKind)(ref val2.Kind)).RegisteredName == "<unknown>")
								{
									int num4 = val3.Value * num;
									num2 += num4;
									num3 += num4;
									AutoInitiativePlugin.logger.LogInfo((object)("Initiative Modifier: " + num3));
									continue;
								}
								Enumerator<short> enumerator3 = val2.Results.GetEnumerator();
								try
								{
									while (enumerator3.MoveNext())
									{
										short current3 = enumerator3.Current;
										num2 += current3;
									}
								}
								finally
								{
									((IDisposable)enumerator3).Dispose();
								}
							}
						}
						finally
						{
							((IDisposable)enumerator2).Dispose();
						}
					}
					else
					{
						if (val2.Results == null)
						{
							continue;
						}
						Enumerator<short> enumerator3 = val2.Results.GetEnumerator();
						try
						{
							while (enumerator3.MoveNext())
							{
								short current4 = enumerator3.Current;
								num2 += current4;
							}
						}
						finally
						{
							((IDisposable)enumerator3).Dispose();
						}
					}
				}
			}
			finally
			{
				((IDisposable)enumerator).Dispose();
			}
			if (!flag)
			{
				return;
			}
			CreatureGuid[] array = (CreatureGuid[])(object)new CreatureGuid[0];
			CreatureGuid[] array2 = default(CreatureGuid[]);
			if (clientId == LocalClient.Id && LocalClient.HasLassoedCreatures && LocalClient.LassoedCount > 0 && LocalClient.TryGetLassoedCreatureIds(ref array2))
			{
				AutoInitiativePlugin.logger.LogInfo((object)"Using Initiative for Lassoed Creatures");
				array = array2;
			}
			else
			{
				array = (CreatureGuid[])(object)new CreatureGuid[1] { BoardSessionManager.GetLastSelectedCreatureGuid(clientId) };
			}
			array = array.Where((CreatureGuid c) => c != default(CreatureGuid)).ToArray();
			if (array.Count() == 0)
			{
				AutoInitiativePlugin.logger.LogInfo((object)"No Creature Selected");
				return;
			}
			CreatureGuid[] array3 = array;
			for (int i = 0; i < array3.Length; i++)
			{
				CreatureGuid key = array3[i];
				AutoInitiativePlugin.logger.LogInfo((object)("Creature " + ((object)(CreatureGuid)(ref key)).ToString() + " rolled " + num2));
				InitUtils.Initiatives[key] = (num2, num3);
			}
			InitUtils.SetInitiatives();
		}
	}
}