Decompiled source of Auto Kill Plugin v1.0.2

AutoKill.dll

Decompiled 4 days 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 AutoKill;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using ModdingTales;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Auto Kill")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("HolloFox")]
[assembly: AssemblyProduct("AKP")]
[assembly: AssemblyCopyright("Copyright ©  2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("4e4deb5e-97f9-4901-bf67-6748a9c1229a")]
[assembly: AssemblyFileVersion("1.0.2.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.2.0")]
namespace AutoKillPlugin.Patches
{
	[HarmonyPatch(typeof(UI_InitativeManager), "OnTurnSwitch")]
	public class InitiativeManagerReleaseCreaturePatch
	{
		private static void Postfix(QueueElement element)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: 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)
			if (AutoKill.AutoKillPlugin.creaturesToDelete.ContainsKey(element.CreatureGuid))
			{
				AutoKill.AutoKillPlugin.creaturesPendingDeletion.AddFirst((AutoKill.AutoKillPlugin.creaturesToDelete[element.CreatureGuid], DateTimeOffset.Now));
				AutoKill.AutoKillPlugin.creaturesToDelete.Remove(element.CreatureGuid);
			}
		}
	}
}
namespace AutoKill
{
	[BepInPlugin("org.hollofox.plugins.AutoKillPlugin", "Auto Kill Plugin", "1.0.2.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class AutoKillPlugin : BaseUnityPlugin
	{
		public const string Guid = "org.hollofox.plugins.AutoKillPlugin";

		public const string Name = "Auto Kill Plugin";

		public const string Version = "1.0.2.0";

		private ConfigEntry<KeyboardShortcut> trigger;

		private ConfigEntry<int> ttl;

		internal static Dictionary<CreatureGuid, CreatureBoardAsset> creaturesToDelete = new Dictionary<CreatureGuid, CreatureBoardAsset>();

		internal static LinkedList<(CreatureBoardAsset, DateTimeOffset)> creaturesPendingDeletion = new LinkedList<(CreatureBoardAsset, DateTimeOffset)>();

		internal static ActionTimeline knockedDownAction;

		private void Awake()
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"Auto Kill loaded");
			trigger = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Hotkeys", "Delete Asset", new KeyboardShortcut((KeyCode)127, (KeyCode[])(object)new KeyCode[1] { (KeyCode)305 }), (ConfigDescription)null);
			ttl = ((BaseUnityPlugin)this).Config.Bind<int>("Timer", "Time To Live", 30, (ConfigDescription)null);
			ModdingUtils.AddPluginToMenuList((BaseUnityPlugin)(object)this);
			new Harmony("org.hollofox.plugins.AutoKillPlugin").PatchAll();
			SingletonStateMBehaviour<PlayMode, State>.OnStateChange += delegate(State mode)
			{
				//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
				//IL_002d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0045: Unknown result type (might be due to invalid IL or missing references)
				//IL_0050: Unknown result type (might be due to invalid IL or missing references)
				//IL_0055: Unknown result type (might be due to invalid IL or missing references)
				//IL_0064: Unknown result type (might be due to invalid IL or missing references)
				//IL_0069: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0074: 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)
				if (((BaseState<PlayMode, State>)(object)mode).Is<TurnBased>())
				{
					while (creaturesPendingDeletion.Count > 0)
					{
						CreatureBoardAsset item = creaturesPendingDeletion.First().Item1;
						creaturesPendingDeletion.RemoveFirst();
						creaturesToDelete.Add(item.CreatureId, item);
					}
					_ = InitiativeManager.CurrentTurnElement;
					if (creaturesToDelete.ContainsKey(InitiativeManager.CurrentTurnElement.CreatureGuid))
					{
						CreatureGuid creatureGuid = InitiativeManager.CurrentTurnElement.CreatureGuid;
						CreatureBoardAsset item2 = creaturesToDelete[creatureGuid];
						creaturesPendingDeletion.AddFirst((item2, DateTimeOffset.Now));
						creaturesToDelete.Remove(creatureGuid);
					}
				}
				else
				{
					CreatureGuid[] array = creaturesToDelete.Keys.ToArray();
					foreach (CreatureGuid key in array)
					{
						CreatureBoardAsset item3 = creaturesToDelete[key];
						creaturesPendingDeletion.AddFirst((item3, DateTimeOffset.Now.AddSeconds(ttl.Value)));
						creaturesToDelete.Remove(key);
					}
				}
			};
			knockedDownAction = ActionTimelineDatabase.GetActionPrefab("TLA_Action_Knockdown");
		}

		private void Update()
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			if (LocalClient.IsInGmMode)
			{
				if (StrictKeyCheck(trigger.Value))
				{
					DeleteCreatures();
				}
				if (creaturesPendingDeletion.Count > 0 && creaturesPendingDeletion.First().Item2 < DateTimeOffset.Now)
				{
					CreatureBoardAsset item = creaturesPendingDeletion.First().Item1;
					creaturesPendingDeletion.RemoveFirst();
					item.RequestDelete();
				}
			}
		}

		public bool StrictKeyCheck(KeyboardShortcut check)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: 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)
			if (!((KeyboardShortcut)(ref check)).IsUp())
			{
				return false;
			}
			KeyCode[] array = new KeyCode[6];
			RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
			KeyCode[] array2 = (KeyCode[])(object)array;
			foreach (KeyCode val in array2)
			{
				if (Input.GetKey(val) != ((KeyboardShortcut)(ref check)).Modifiers.Contains(val))
				{
					return false;
				}
			}
			return true;
		}

		private void DeleteCreatures()
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0176: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0182: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: 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_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: 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_00f5: Unknown result type (might be due to invalid IL or missing references)
			CreatureGuid[] array = default(CreatureGuid[]);
			if (LocalClient.HasLassoedCreatures)
			{
				LocalClient.TryGetLassoedCreatureIds(ref array);
			}
			else
			{
				array = (CreatureGuid[])(object)new CreatureGuid[1] { LocalClient.SelectedCreatureId };
			}
			if (array.Any((CreatureGuid c) => !creaturesToDelete.ContainsKey(c)))
			{
				CreatureBoardAsset val = default(CreatureBoardAsset);
				foreach (CreatureGuid item in array.Where((CreatureGuid c) => !creaturesToDelete.ContainsKey(c)))
				{
					if (CreaturePresenter.TryGetAsset(item, ref val))
					{
						if (!val.IsPersistantEmoteEnabled(knockedDownAction.ActionTimelineId))
						{
							val.ToggleStatusEmote(knockedDownAction);
						}
						if (((BaseState<PlayMode, State>)(object)((StateMBehaviour<PlayMode, State>)(object)SingletonStateMBehaviour<PlayMode, State>.Instance).CurrentState).Is<TurnBased>())
						{
							_ = InitiativeManager.CurrentTurnElement;
							if (InitiativeManager.CurrentTurnElement.CreatureGuid == item)
							{
								creaturesPendingDeletion.AddFirst((val, DateTimeOffset.Now));
							}
							else
							{
								creaturesToDelete.Add(item, val);
							}
						}
						else
						{
							creaturesPendingDeletion.AddFirst((val, DateTimeOffset.Now.AddSeconds(ttl.Value)));
						}
					}
				}
				return;
			}
			if (!array.All((CreatureGuid c) => creaturesToDelete.ContainsKey(c)))
			{
				return;
			}
			CreatureGuid[] array2 = array;
			foreach (CreatureGuid key in array2)
			{
				CreatureBoardAsset val2 = creaturesToDelete[key];
				if (val2.IsPersistantEmoteEnabled(knockedDownAction.ActionTimelineId))
				{
					val2.ToggleStatusEmote(knockedDownAction);
				}
				creaturesToDelete.Remove(key);
			}
		}
	}
}
namespace AutoKill.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("AutoKill.Properties.Resources", typeof(Resources).Assembly);
				}
				return resourceMan;
			}
		}

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

		internal Resources()
		{
		}
	}
}