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();
}
}
}