Decompiled source of UltraNotifPack v0.3.0

plugins/UltraNotifPack/UltraNotifPack.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
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 Microsoft.CodeAnalysis;
using Notiffy.API;
using PluginConfig.API;
using PluginConfig.API.Decorators;
using PluginConfig.API.Fields;
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("UltraNotifPack")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("UltraNotifPack")]
[assembly: AssemblyCopyright("Copyright ©  2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("bdd19282-1499-46f9-85b8-6cf2de9cb1c0")]
[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 Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
[BepInPlugin("eepynico.ultranotifpack", "UltraNotifPack", "1.0.0")]
public class UltraNotifPack : BaseUnityPlugin
{
	[Serializable]
	[CompilerGenerated]
	private sealed class <>c
	{
		public static readonly <>c <>9 = new <>c();

		public static BoolValueChangeEventDelegate <>9__24_0;

		public static BoolValueChangeEventDelegate <>9__24_1;

		public static BoolValueChangeEventDelegate <>9__24_2;

		public static BoolValueChangeEventDelegate <>9__24_3;

		public static Action<uint, string> <>9__24_4;

		internal void <Awake>b__24_0(BoolValueChangeEvent e)
		{
			if (e.value)
			{
				NotifData testNotifChaosPlayer = Notifications.testNotifChaosPlayer;
				string text = TryGetIconPath();
				if (text != null)
				{
					string summary = testNotifChaosPlayer.Summary;
					string body = testNotifChaosPlayer.Body;
					Dictionary<string, string> actions = testNotifChaosPlayer.Actions;
					NotificationSystem.NotifySend(summary, body, (Sprite)null, text, (Urgency)1, "NotifySend", 0u, actions, -1);
				}
				else
				{
					NotificationSystem.NotifySend(testNotifChaosPlayer.Summary, testNotifChaosPlayer.Body, (Sprite)null, "", (Urgency)1, "NotifySend", 0u, testNotifChaosPlayer.Actions, -1);
				}
				Log.LogInfo((object)"Sent test notification: Chaos + Player");
				e.value = false;
			}
		}

		internal void <Awake>b__24_1(BoolValueChangeEvent e)
		{
			if (e.value)
			{
				NotifData testNotifSpawn = Notifications.testNotifSpawn1;
				string text = TryGetIconPath();
				if (text != null)
				{
					string summary = testNotifSpawn.Summary;
					string body = testNotifSpawn.Body;
					Dictionary<string, string> actions = testNotifSpawn.Actions;
					NotificationSystem.NotifySend(summary, body, (Sprite)null, text, (Urgency)1, "NotifySend", 0u, actions, -1);
				}
				else
				{
					NotificationSystem.NotifySend(testNotifSpawn.Summary, testNotifSpawn.Body, (Sprite)null, "", (Urgency)1, "NotifySend", 0u, testNotifSpawn.Actions, -1);
				}
				Log.LogInfo((object)"Sent test notification: Spawning 1");
				e.value = false;
			}
		}

		internal void <Awake>b__24_2(BoolValueChangeEvent e)
		{
			if (e.value)
			{
				NotifData testNotifSpawn = Notifications.testNotifSpawn2;
				string text = TryGetIconPath();
				if (text != null)
				{
					string summary = testNotifSpawn.Summary;
					string body = testNotifSpawn.Body;
					Dictionary<string, string> actions = testNotifSpawn.Actions;
					NotificationSystem.NotifySend(summary, body, (Sprite)null, text, (Urgency)1, "NotifySend", 0u, actions, -1);
				}
				else
				{
					NotificationSystem.NotifySend(testNotifSpawn.Summary, testNotifSpawn.Body, (Sprite)null, "", (Urgency)1, "NotifySend", 0u, testNotifSpawn.Actions, -1);
				}
				Log.LogInfo((object)"Sent test notification: Spawning 2");
				e.value = false;
			}
		}

		internal void <Awake>b__24_3(BoolValueChangeEvent e)
		{
			if (e.value)
			{
				NotifData testNotifWorld = Notifications.testNotifWorld;
				string text = TryGetIconPath();
				if (text != null)
				{
					string summary = testNotifWorld.Summary;
					string body = testNotifWorld.Body;
					Dictionary<string, string> actions = testNotifWorld.Actions;
					NotificationSystem.NotifySend(summary, body, (Sprite)null, text, (Urgency)1, "NotifySend", 0u, actions, -1);
				}
				else
				{
					NotificationSystem.NotifySend(testNotifWorld.Summary, testNotifWorld.Body, (Sprite)null, "", (Urgency)1, "NotifySend", 0u, testNotifWorld.Actions, -1);
				}
				Log.LogInfo((object)"Sent test notification: World");
				e.value = false;
			}
		}

		internal void <Awake>b__24_4(uint id, string actionIdentifier)
		{
			//IL_0470: Unknown result type (might be due to invalid IL or missing references)
			//IL_047a: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0500: Unknown result type (might be due to invalid IL or missing references)
			//IL_050a: Unknown result type (might be due to invalid IL or missing references)
			Log.LogInfo((object)$"Notification {id} action: {actionIdentifier}");
			switch (actionIdentifier)
			{
			case "explode":
				Spawning.SpawnExplosion();
				Log.LogInfo((object)"Exploding Player");
				break;
			case "bigexplode":
				Spawning.SpawnExplosion(big: true);
				Log.LogInfo((object)"Big Exploding Player");
				break;
			case "spawn10mannequin":
				Spawning.SpawnEnemy("Mannequin", 10);
				Log.LogInfo((object)"Spawned 10 Mannequins");
				break;
			case "spawn1minos":
				Spawning.SpawnEnemy("MinosPrime");
				Log.LogInfo((object)"Spawned Minos");
				break;
			case "spawn10minos":
				Spawning.SpawnEnemy("MinosPrime", 10);
				Log.LogInfo((object)"Spawned 10 Minos");
				break;
			case "spawn5filth":
				Spawning.SpawnEnemy("Filth", 5);
				Log.LogInfo((object)"Spawned 5 Filth");
				break;
			case "spawn1filth":
				Spawning.SpawnEnemy("Filth");
				Log.LogInfo((object)"Spawned 1 Filth");
				break;
			case "spawn1schism":
				Spawning.SpawnEnemy("Schism");
				Log.LogInfo((object)"Spawned Schism");
				break;
			case "spawn1virtue":
				Spawning.SpawnEnemy("Virtue");
				Log.LogInfo((object)"Spawned Virtue");
				break;
			case "spawn1cerberus":
				Spawning.SpawnEnemy("Cerberus");
				Log.LogInfo((object)"Spawned Cerberus");
				break;
			case "spawn1stray":
				Spawning.SpawnEnemy("Stray");
				Log.LogInfo((object)"Spawned Stray");
				break;
			case "spawn1ferryman":
				Spawning.SpawnEnemy("Ferryman");
				Log.LogInfo((object)"Spawned Ferryman");
				break;
			case "spawn1mindflayer":
				Spawning.SpawnEnemy("Mindflayer");
				Log.LogInfo((object)"Spawned Mindflayer");
				break;
			case "heal":
				MonoSingleton<NewMovement>.Instance.ForceAntiHP(0f, false, false, true, false);
				MonoSingleton<NewMovement>.Instance.GetHealth(100, true, false, true);
				Log.LogInfo((object)"Healed Player to 100");
				break;
			case "getrekt":
				MonoSingleton<NewMovement>.Instance.GetHurt(MonoSingleton<NewMovement>.Instance.hp - 1, false, 1f, false, false, 0.35f, false);
				MonoSingleton<NewMovement>.Instance.ForceAntiHP(99f, false, false, true, false);
				Log.LogInfo((object)"hurt the player a bit more neccessary than usual.");
				break;
			case "die":
				MonoSingleton<NewMovement>.Instance.GetHurt(99999, true, 1f, false, false, 0.35f, false);
				Log.LogInfo((object)"Killed Player");
				break;
			case "addstyle":
			{
				int num2 = Random.Range(100, 1000);
				MonoSingleton<StyleHUD>.Instance.AddPoints(num2, "ultranotifpack", (GameObject)null, (EnemyIdentifier)null, 0, "", "");
				Log.LogInfo((object)$"Added {num2} style points");
				break;
			}
			case "takestyle":
			{
				int num = Random.Range(100, 1000);
				MonoSingleton<StyleHUD>.Instance.RemovePoints(num);
				Log.LogInfo((object)$"Took {num} style points");
				break;
			}
			case "flingup":
				MonoSingleton<NewMovement>.Instance.rb.AddForce(Vector3.up * 50f, (ForceMode)2);
				Log.LogInfo((object)"Flung Player Up");
				break;
			case "flingdown":
				MonoSingleton<NewMovement>.Instance.rb.AddForce(Vector3.down * 50f, (ForceMode)2);
				Log.LogInfo((object)"Flung Player Down");
				break;
			case "flingrandom":
				MonoSingleton<NewMovement>.Instance.rb.AddForce(Random.onUnitSphere * 50f, (ForceMode)2);
				Log.LogInfo((object)"Flung Player Randomly");
				break;
			case "placeholder":
				NotificationSystem.NotifySend("Placeholder Notification", "Dummy String", (Sprite)null, "", (Urgency)1, "NotifySend", 0u, (Dictionary<string, string>)null, -1);
				Log.LogInfo((object)"Placeholder Notification");
				break;
			}
		}
	}

	[CompilerGenerated]
	private sealed class <NotifLoop>d__26 : IEnumerator<object>, IDisposable, IEnumerator
	{
		private int <>1__state;

		private object <>2__current;

		public UltraNotifPack <>4__this;

		private float <wait>5__1;

		private NotifData <notif>5__2;

		private string <iconPath>5__3;

		object IEnumerator<object>.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		object IEnumerator.Current
		{
			[DebuggerHidden]
			get
			{
				return <>2__current;
			}
		}

		[DebuggerHidden]
		public <NotifLoop>d__26(int <>1__state)
		{
			this.<>1__state = <>1__state;
		}

		[DebuggerHidden]
		void IDisposable.Dispose()
		{
			<notif>5__2 = null;
			<iconPath>5__3 = null;
			<>1__state = -2;
		}

		private bool MoveNext()
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Expected O, but got Unknown
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Expected O, but got Unknown
			switch (<>1__state)
			{
			default:
				return false;
			case 0:
				<>1__state = -1;
				<>2__current = (object)new WaitForSeconds(5f);
				<>1__state = 1;
				return true;
			case 1:
				<>1__state = -1;
				break;
			case 2:
				<>1__state = -1;
				break;
			}
			if (intervalEnabled.value)
			{
				<notif>5__2 = Notifications.intervalNotifs[Random.Range(0, Notifications.intervalNotifs.Length)];
				<iconPath>5__3 = TryGetIconPath();
				if (<iconPath>5__3 != null)
				{
					string summary = <notif>5__2.Summary;
					string body = <notif>5__2.Body;
					Dictionary<string, string> actions = <notif>5__2.Actions;
					NotificationSystem.NotifySend(summary, body, (Sprite)null, <iconPath>5__3, (Urgency)1, "NotifySend", 0u, actions, -1);
				}
				else
				{
					NotificationSystem.NotifySend(<notif>5__2.Summary, <notif>5__2.Body, (Sprite)null, "", (Urgency)1, "NotifySend", 0u, <notif>5__2.Actions, -1);
				}
				Log.LogInfo((object)"Sending Notification. Type: Interval");
				<notif>5__2 = null;
				<iconPath>5__3 = null;
			}
			<wait>5__1 = Random.Range(intervalMin.value, intervalMax.value);
			<>2__current = (object)new WaitForSeconds(<wait>5__1);
			<>1__state = 2;
			return true;
		}

		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 static UltraNotifPack Instance;

	public static ManualLogSource Log;

	public static string workingDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

	private static PluginConfigurator config;

	private static BoolField intervalEnabled;

	private static IntField intervalMin;

	private static IntField intervalMax;

	public static BoolField actionEnabled;

	public static FloatField notifChance;

	public static BoolField notifDie;

	public static BoolField notifKill;

	public static BoolField notifParry;

	public static BoolField notifHit;

	public static BoolField notifCoin;

	public static BoolField notifDamage;

	public static BoolField notifRank;

	public static BoolField notifStyle;

	private static BoolField iconPackCustom;

	private static BoolField iconPackGame;

	private static BoolField iconPackMeme;

	private static BoolField iconPackJoke;

	private static BoolField iconPackOs;

	private static BoolField iconPackUltrakill;

	private static BoolField iconPackGeneric;

	private void Awake()
	{
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Expected O, but got Unknown
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_008d: Expected O, but got Unknown
		//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ad: Expected O, but got Unknown
		//IL_00be: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: Expected O, but got Unknown
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_0110: Expected O, but got Unknown
		//IL_0121: Unknown result type (might be due to invalid IL or missing references)
		//IL_013c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0146: Expected O, but got Unknown
		//IL_015b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0165: Expected O, but got Unknown
		//IL_017a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0184: Expected O, but got Unknown
		//IL_0199: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a3: Expected O, but got Unknown
		//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d9: Expected O, but got Unknown
		//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f8: Expected O, but got Unknown
		//IL_020d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0217: Expected O, but got Unknown
		//IL_022c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0236: Expected O, but got Unknown
		//IL_024b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0255: Expected O, but got Unknown
		//IL_026a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0274: Expected O, but got Unknown
		//IL_0289: Unknown result type (might be due to invalid IL or missing references)
		//IL_0293: Expected O, but got Unknown
		//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c5: Expected O, but got Unknown
		//IL_0300: Unknown result type (might be due to invalid IL or missing references)
		//IL_0306: Expected O, but got Unknown
		//IL_02da: Unknown result type (might be due to invalid IL or missing references)
		//IL_02df: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e5: Expected O, but got Unknown
		//IL_0341: Unknown result type (might be due to invalid IL or missing references)
		//IL_0347: Expected O, but got Unknown
		//IL_031b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0320: Unknown result type (might be due to invalid IL or missing references)
		//IL_0326: Expected O, but got Unknown
		//IL_0382: Unknown result type (might be due to invalid IL or missing references)
		//IL_0388: Expected O, but got Unknown
		//IL_035c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0361: Unknown result type (might be due to invalid IL or missing references)
		//IL_0367: Expected O, but got Unknown
		//IL_03b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_039d: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_03a8: Expected O, but got Unknown
		Log = ((BaseUnityPlugin)this).Logger;
		Instance = this;
		((BaseUnityPlugin)this).Logger.LogInfo((object)"UltraNotifPack loaded successfully!");
		config = PluginConfigurator.Create("UltraNotifPack", "eepynico.ultranotifpack");
		new ConfigHeader(config.rootPanel, "-- INTERVAL NOTIFICATIONS --", 24);
		intervalEnabled = new BoolField(config.rootPanel, "Enable interval notifications", "intervalEnabled", true);
		intervalMin = new IntField(config.rootPanel, "Min interval (seconds)", "intervalMin", 20);
		intervalMax = new IntField(config.rootPanel, "Max interval (seconds)", "intervalMax", 60);
		new ConfigHeader(config.rootPanel, "-- ACTION NOTIFICATIONS --", 24);
		actionEnabled = new BoolField(config.rootPanel, "Enable action notifications", "actionEnabled", true);
		notifChance = new FloatField(config.rootPanel, "Notification chance (%)", "notifChance", 100f, 0f, 100f);
		new ConfigHeader(config.rootPanel, "Actions", 18);
		notifDie = new BoolField(config.rootPanel, "On death", "notifDie", true);
		notifKill = new BoolField(config.rootPanel, "On kill", "notifKill", true);
		notifParry = new BoolField(config.rootPanel, "On parry", "notifParry", true);
		notifDamage = new BoolField(config.rootPanel, "On damage taken", "notifDamage", true);
		new ConfigHeader(config.rootPanel, "-- ICONS --", 24);
		iconPackCustom = new BoolField(config.rootPanel, "Custom pack", "iconPackCustom", true);
		iconPackGame = new BoolField(config.rootPanel, "Game pack (Celeste, Chess, PEAK)", "iconPackGame", true);
		iconPackMeme = new BoolField(config.rootPanel, "Meme pack", "iconPackMeme", true);
		iconPackJoke = new BoolField(config.rootPanel, "Joke pack", "iconPackJoke", true);
		iconPackOs = new BoolField(config.rootPanel, "OS pack (Windows, Mac, Linux)", "iconPackOs", true);
		iconPackUltrakill = new BoolField(config.rootPanel, "ULTRAKILL pack", "iconPackUltrakill", true);
		iconPackGeneric = new BoolField(config.rootPanel, "Generic pack", "iconPackGeneric", true);
		new ConfigHeader(config.rootPanel, "-- TESTING --", 24);
		BoolField val = new BoolField(config.rootPanel, "Test: Chaos + Player", "testChaosPlayer", false);
		object obj = <>c.<>9__24_0;
		if (obj == null)
		{
			BoolValueChangeEventDelegate val2 = delegate(BoolValueChangeEvent e)
			{
				if (e.value)
				{
					NotifData testNotifChaosPlayer = Notifications.testNotifChaosPlayer;
					string text4 = TryGetIconPath();
					if (text4 != null)
					{
						string summary4 = testNotifChaosPlayer.Summary;
						string body4 = testNotifChaosPlayer.Body;
						Dictionary<string, string> actions4 = testNotifChaosPlayer.Actions;
						NotificationSystem.NotifySend(summary4, body4, (Sprite)null, text4, (Urgency)1, "NotifySend", 0u, actions4, -1);
					}
					else
					{
						NotificationSystem.NotifySend(testNotifChaosPlayer.Summary, testNotifChaosPlayer.Body, (Sprite)null, "", (Urgency)1, "NotifySend", 0u, testNotifChaosPlayer.Actions, -1);
					}
					Log.LogInfo((object)"Sent test notification: Chaos + Player");
					e.value = false;
				}
			};
			<>c.<>9__24_0 = val2;
			obj = (object)val2;
		}
		val.onValueChange += (BoolValueChangeEventDelegate)obj;
		BoolField val3 = new BoolField(config.rootPanel, "Test: Spawning 1", "testSpawn1", false);
		object obj2 = <>c.<>9__24_1;
		if (obj2 == null)
		{
			BoolValueChangeEventDelegate val4 = delegate(BoolValueChangeEvent e)
			{
				if (e.value)
				{
					NotifData testNotifSpawn2 = Notifications.testNotifSpawn1;
					string text3 = TryGetIconPath();
					if (text3 != null)
					{
						string summary3 = testNotifSpawn2.Summary;
						string body3 = testNotifSpawn2.Body;
						Dictionary<string, string> actions3 = testNotifSpawn2.Actions;
						NotificationSystem.NotifySend(summary3, body3, (Sprite)null, text3, (Urgency)1, "NotifySend", 0u, actions3, -1);
					}
					else
					{
						NotificationSystem.NotifySend(testNotifSpawn2.Summary, testNotifSpawn2.Body, (Sprite)null, "", (Urgency)1, "NotifySend", 0u, testNotifSpawn2.Actions, -1);
					}
					Log.LogInfo((object)"Sent test notification: Spawning 1");
					e.value = false;
				}
			};
			<>c.<>9__24_1 = val4;
			obj2 = (object)val4;
		}
		val3.onValueChange += (BoolValueChangeEventDelegate)obj2;
		BoolField val5 = new BoolField(config.rootPanel, "Test: Spawning 2", "testSpawn2", false);
		object obj3 = <>c.<>9__24_2;
		if (obj3 == null)
		{
			BoolValueChangeEventDelegate val6 = delegate(BoolValueChangeEvent e)
			{
				if (e.value)
				{
					NotifData testNotifSpawn = Notifications.testNotifSpawn2;
					string text2 = TryGetIconPath();
					if (text2 != null)
					{
						string summary2 = testNotifSpawn.Summary;
						string body2 = testNotifSpawn.Body;
						Dictionary<string, string> actions2 = testNotifSpawn.Actions;
						NotificationSystem.NotifySend(summary2, body2, (Sprite)null, text2, (Urgency)1, "NotifySend", 0u, actions2, -1);
					}
					else
					{
						NotificationSystem.NotifySend(testNotifSpawn.Summary, testNotifSpawn.Body, (Sprite)null, "", (Urgency)1, "NotifySend", 0u, testNotifSpawn.Actions, -1);
					}
					Log.LogInfo((object)"Sent test notification: Spawning 2");
					e.value = false;
				}
			};
			<>c.<>9__24_2 = val6;
			obj3 = (object)val6;
		}
		val5.onValueChange += (BoolValueChangeEventDelegate)obj3;
		BoolField val7 = new BoolField(config.rootPanel, "Test: World", "testWorld", false);
		object obj4 = <>c.<>9__24_3;
		if (obj4 == null)
		{
			BoolValueChangeEventDelegate val8 = delegate(BoolValueChangeEvent e)
			{
				if (e.value)
				{
					NotifData testNotifWorld = Notifications.testNotifWorld;
					string text = TryGetIconPath();
					if (text != null)
					{
						string summary = testNotifWorld.Summary;
						string body = testNotifWorld.Body;
						Dictionary<string, string> actions = testNotifWorld.Actions;
						NotificationSystem.NotifySend(summary, body, (Sprite)null, text, (Urgency)1, "NotifySend", 0u, actions, -1);
					}
					else
					{
						NotificationSystem.NotifySend(testNotifWorld.Summary, testNotifWorld.Body, (Sprite)null, "", (Urgency)1, "NotifySend", 0u, testNotifWorld.Actions, -1);
					}
					Log.LogInfo((object)"Sent test notification: World");
					e.value = false;
				}
			};
			<>c.<>9__24_3 = val8;
			obj4 = (object)val8;
		}
		val7.onValueChange += (BoolValueChangeEventDelegate)obj4;
		new Harmony("eepynico.ultranotifpack").PatchAll();
		((MonoBehaviour)this).StartCoroutine(NotifLoop());
		NotificationSystem.ActionInvoked += delegate(uint id, string actionIdentifier)
		{
			//IL_0470: Unknown result type (might be due to invalid IL or missing references)
			//IL_047a: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0500: Unknown result type (might be due to invalid IL or missing references)
			//IL_050a: Unknown result type (might be due to invalid IL or missing references)
			Log.LogInfo((object)$"Notification {id} action: {actionIdentifier}");
			switch (actionIdentifier)
			{
			case "explode":
				Spawning.SpawnExplosion();
				Log.LogInfo((object)"Exploding Player");
				break;
			case "bigexplode":
				Spawning.SpawnExplosion(big: true);
				Log.LogInfo((object)"Big Exploding Player");
				break;
			case "spawn10mannequin":
				Spawning.SpawnEnemy("Mannequin", 10);
				Log.LogInfo((object)"Spawned 10 Mannequins");
				break;
			case "spawn1minos":
				Spawning.SpawnEnemy("MinosPrime");
				Log.LogInfo((object)"Spawned Minos");
				break;
			case "spawn10minos":
				Spawning.SpawnEnemy("MinosPrime", 10);
				Log.LogInfo((object)"Spawned 10 Minos");
				break;
			case "spawn5filth":
				Spawning.SpawnEnemy("Filth", 5);
				Log.LogInfo((object)"Spawned 5 Filth");
				break;
			case "spawn1filth":
				Spawning.SpawnEnemy("Filth");
				Log.LogInfo((object)"Spawned 1 Filth");
				break;
			case "spawn1schism":
				Spawning.SpawnEnemy("Schism");
				Log.LogInfo((object)"Spawned Schism");
				break;
			case "spawn1virtue":
				Spawning.SpawnEnemy("Virtue");
				Log.LogInfo((object)"Spawned Virtue");
				break;
			case "spawn1cerberus":
				Spawning.SpawnEnemy("Cerberus");
				Log.LogInfo((object)"Spawned Cerberus");
				break;
			case "spawn1stray":
				Spawning.SpawnEnemy("Stray");
				Log.LogInfo((object)"Spawned Stray");
				break;
			case "spawn1ferryman":
				Spawning.SpawnEnemy("Ferryman");
				Log.LogInfo((object)"Spawned Ferryman");
				break;
			case "spawn1mindflayer":
				Spawning.SpawnEnemy("Mindflayer");
				Log.LogInfo((object)"Spawned Mindflayer");
				break;
			case "heal":
				MonoSingleton<NewMovement>.Instance.ForceAntiHP(0f, false, false, true, false);
				MonoSingleton<NewMovement>.Instance.GetHealth(100, true, false, true);
				Log.LogInfo((object)"Healed Player to 100");
				break;
			case "getrekt":
				MonoSingleton<NewMovement>.Instance.GetHurt(MonoSingleton<NewMovement>.Instance.hp - 1, false, 1f, false, false, 0.35f, false);
				MonoSingleton<NewMovement>.Instance.ForceAntiHP(99f, false, false, true, false);
				Log.LogInfo((object)"hurt the player a bit more neccessary than usual.");
				break;
			case "die":
				MonoSingleton<NewMovement>.Instance.GetHurt(99999, true, 1f, false, false, 0.35f, false);
				Log.LogInfo((object)"Killed Player");
				break;
			case "addstyle":
			{
				int num2 = Random.Range(100, 1000);
				MonoSingleton<StyleHUD>.Instance.AddPoints(num2, "ultranotifpack", (GameObject)null, (EnemyIdentifier)null, 0, "", "");
				Log.LogInfo((object)$"Added {num2} style points");
				break;
			}
			case "takestyle":
			{
				int num = Random.Range(100, 1000);
				MonoSingleton<StyleHUD>.Instance.RemovePoints(num);
				Log.LogInfo((object)$"Took {num} style points");
				break;
			}
			case "flingup":
				MonoSingleton<NewMovement>.Instance.rb.AddForce(Vector3.up * 50f, (ForceMode)2);
				Log.LogInfo((object)"Flung Player Up");
				break;
			case "flingdown":
				MonoSingleton<NewMovement>.Instance.rb.AddForce(Vector3.down * 50f, (ForceMode)2);
				Log.LogInfo((object)"Flung Player Down");
				break;
			case "flingrandom":
				MonoSingleton<NewMovement>.Instance.rb.AddForce(Random.onUnitSphere * 50f, (ForceMode)2);
				Log.LogInfo((object)"Flung Player Randomly");
				break;
			case "placeholder":
				NotificationSystem.NotifySend("Placeholder Notification", "Dummy String", (Sprite)null, "", (Urgency)1, "NotifySend", 0u, (Dictionary<string, string>)null, -1);
				Log.LogInfo((object)"Placeholder Notification");
				break;
			}
		};
	}

	private static string TryGetIconPath()
	{
		string[] array = new string[7]
		{
			iconPackCustom.value ? Path.Combine(workingDir, "icons", "custom") : null,
			iconPackGame.value ? Path.Combine(workingDir, "icons", "game") : null,
			iconPackMeme.value ? Path.Combine(workingDir, "icons", "meme") : null,
			iconPackJoke.value ? Path.Combine(workingDir, "icons", "joke") : null,
			iconPackOs.value ? Path.Combine(workingDir, "icons", "os") : null,
			iconPackUltrakill.value ? Path.Combine(workingDir, "icons", "ultrakill") : null,
			iconPackGeneric.value ? Path.Combine(workingDir, "icons", "generic") : null
		};
		List<string> list = new List<string>();
		string[] array2 = array;
		foreach (string text in array2)
		{
			if (text != null)
			{
				if (!Directory.Exists(text))
				{
					Log.LogWarning((object)("Icon pack folder not found: " + text));
					continue;
				}
				string[] files = Directory.GetFiles(text, "*.png");
				list.AddRange(files);
				Log.LogInfo((object)$"Pack {Path.GetFileName(text)}: found {files.Length} icons");
			}
		}
		if (list.Count == 0)
		{
			Log.LogWarning((object)"No icons found in any enabled pack!");
			return null;
		}
		string text2 = list[Random.Range(0, list.Count)];
		Log.LogInfo((object)("Chose icon: " + text2));
		return text2;
	}

	[IteratorStateMachine(typeof(<NotifLoop>d__26))]
	private IEnumerator NotifLoop()
	{
		//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
		return new <NotifLoop>d__26(0)
		{
			<>4__this = this
		};
	}

	public static void SendRandom(NotifData[] notifs)
	{
		if (Random.Range(0f, 100f) <= notifChance.value)
		{
			NotifData notifData = notifs[Random.Range(0, notifs.Length)];
			string text = TryGetIconPath();
			if (text != null)
			{
				string summary = notifData.Summary;
				string body = notifData.Body;
				Dictionary<string, string> actions = notifData.Actions;
				NotificationSystem.NotifySend(summary, body, (Sprite)null, text, (Urgency)1, "NotifySend", 0u, actions, -1);
			}
			else
			{
				NotificationSystem.NotifySend(notifData.Summary, notifData.Body, (Sprite)null, "", (Urgency)1, "NotifySend", 0u, notifData.Actions, -1);
			}
			Log.LogInfo((object)"Action Notification Sending.");
		}
		else
		{
			Log.LogInfo((object)"Action Notification NOT Sending.");
		}
	}
}
public class NotifData
{
	public string Summary;

	public string Body;

	public Dictionary<string, string> Actions;
}
public static class Notifications
{
	public static NotifData[] intervalNotifs = new NotifData[80]
	{
		new NotifData
		{
			Summary = "System Alert",
			Body = "You may have vibus",
			Actions = new Dictionary<string, string>
			{
				{ "die", "*Die*" },
				{ "bigexplode", "Install AntiVirus" }
			}
		},
		new NotifData
		{
			Summary = "Update Available",
			Body = "ULTRAKILL 2 Is ready to install",
			Actions = new Dictionary<string, string>
			{
				{ "heal", "Install Now" },
				{ "getrekt", "Maybe Later" }
			}
		},
		new NotifData
		{
			Summary = "Hot singles in your area",
			Body = "Hot singles in your area! find them now at https://en.wikipedia.org/wiki/Hot_Singles_in_Your_Area",
			Actions = new Dictionary<string, string>
			{
				{ "idc", "I don't care." },
				{ "wiki", "Is that a wikipedia link?" }
			}
		},
		new NotifData
		{
			Summary = "Congratulations!",
			Body = "You are the FIRST machine chosen to be hells favorite toy!",
			Actions = new Dictionary<string, string>
			{
				{ "explode", "The fuck?" },
				{ "spawn10mannequin", "Earn reward now!" }
			}
		},
		new NotifData
		{
			Summary = "Breaking News",
			Body = "Local machine refuses to listen to reason, continues killing"
		},
		new NotifData
		{
			Summary = "New Friend Request",
			Body = "Minos Prime would like to know your location",
			Actions = new Dictionary<string, string>
			{
				{ "spawn1minos", "Allow" },
				{ "die", "Deny" }
			}
		},
		new NotifData
		{
			Summary = "New sale!",
			Body = "Buy 3 skulls for the price of 2 skulls plus the price of 1!",
			Actions = new Dictionary<string, string>
			{
				{ "spawn1cerberus", "Buy" },
				{ "close", "Close" }
			}
		},
		new NotifData
		{
			Summary = "Recommended Video",
			Body = "\"How to parry your taxes\", Uploaded 3 minutes ago.",
			Actions = new Dictionary<string, string>
			{
				{ "watch", "Watch" },
				{ "Not now", "Later" }
			}
		},
		new NotifData
		{
			Summary = "Filth3274 has sent you a message",
			Body = "\"Check behind you\"",
			Actions = new Dictionary<string, string>
			{
				{ "spawn5filth", "Ignore" },
				{ "spawn1filthd", "Mark As Read" },
				{ "block", "Block" }
			}
		},
		new NotifData
		{
			Summary = "GabrielOfficial has sent you a message",
			Body = "\"Machine, im taking a photo with the funny rock\"",
			Actions = new Dictionary<string, string>
			{
				{ "reply", "Reply" },
				{ "read", "Mark As Read" },
				{ "block", "Block" }
			}
		},
		new NotifData
		{
			Summary = "Anonymous has sent you a message",
			Body = "\"Im Approaching.\"",
			Actions = new Dictionary<string, string>
			{
				{ "reply", "Reply" },
				{ "read", "Mark As Read" },
				{ "block", "Block" }
			}
		},
		new NotifData
		{
			Summary = "LUSTLAYER.XXX has sent you a message",
			Body = "\"Renew Your subscription! you only have EIGHT days left!\"",
			Actions = new Dictionary<string, string>
			{
				{ "renew", "Renew" },
				{ "ignore", "Ignore" },
				{ "block", "Block" }
			}
		},
		new NotifData
		{
			Summary = "PaintEater has sent you a message",
			Body = "\"the progpess of th  r is go n we aofp l ak\"",
			Actions = new Dictionary<string, string>
			{
				{ "reply", "Reply" },
				{ "die", "Mark As Read" },
				{ "block", "Block" }
			}
		},
		new NotifData
		{
			Summary = "GPU Warning",
			Body = "GPU Tempurature approaching the surface of the sun."
		},
		new NotifData
		{
			Summary = "Performance Waring",
			Body = "Blood Consumption exceeds recommended levels."
		},
		new NotifData
		{
			Summary = "Background Process",
			Body = "RECORD_COMBAT.bat is consuming 96.3% CPU.",
			Actions = new Dictionary<string, string>
			{
				{ "close", "Close program" },
				{ "ignore", "Ignore" }
			}
		},
		new NotifData
		{
			Summary = "Security Alert",
			Body = "An unauthorized earthmover has gained access to your file system.",
			Actions = new Dictionary<string, string>
			{
				{ "password", "Change Password" },
				{ "getrekt", "Authorize this" }
			}
		},
		new NotifData
		{
			Summary = "Did you know?",
			Body = "Hells Yelp page reviews: 2.3 stars. according to reviews, you are partially responsible."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Cleopatra lived closer in time to the Moon landing than to the construction of the Great Pyramid."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "There are more possible games of chess than atoms in the observable universe."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Your body contains about 37 trillion cells. Most of them are not human."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "The last woolly mammoths died 1000 years after the pyramids were built."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "You are a LOSER because you dont have CHESS PREMIUM. I bet Hikaru and GothamChess are SO DISSAPOINTED in you.",
			Actions = new Dictionary<string, string>
			{
				{ "die", "Die of Sadness" },
				{ "spawn10minos", "Go through airplane TSA" }
			}
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "The sun will eventually expand and swallow the Earth. Have a great day."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Humans are the only animals that voluntarily delay sleep."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "You share 60% of your DNA with a banana."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "The average person walks past 36 murderers in their lifetime."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Oxford University is older than the Aztec Empire."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "There are more vacant homes in the US than there are homeless people."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "A day on Venus is longer than a year on Venus."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Mammoths were alive when Stonehenge was being built."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "The fax machine was invented before the telephone."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Nintendo was founded when Jack the Ripper was still alive."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "France was still executing people by guillotine when Star Wars came out."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Sharks are older than trees."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "The Bible is the most shoplifted book in the world."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "There are more ways to shuffle a deck of cards than there are atoms on Earth."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Woolly mammoths were alive when the Great Wall of China was being built."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "The human eye can detect a single photon of light in complete darkness."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Vending machines kill more people per year than sharks."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "It would take 1.2 million mosquitoes all sucking at once to drain a human body of blood."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Penguins existed at the same time as T-Rexes. Just different penguins."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "There are more trees on Earth than stars in the Milky Way."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "The first person to survive going over Niagara Falls in a barrel was 63 years old."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Betty White was older than sliced bread."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Hot water freezes faster than cold water and nobody fully understands why."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Your nose can detect over 1 trillion different smells."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Cleopatra lived closer to the founding of Pizza Hut than to the construction of the pyramids."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "There is a planet made mostly of diamond twice the size of Earth."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Humans share 99% of their DNA with other humans. You are basically everyone you hate."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "The word 'set' has 430 different meanings in English. It is the most overloaded word in the language."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Mosquitoes have killed more humans than all wars in history combined."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "The lighter was invented before the match."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "A group of flamingos is called a flamboyance."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "There are more possible IPv6 addresses than grains of sand on Earth."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Humans are the only species known to blush."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "The woolly mammoth was still alive when the last pharaoh ruled Egypt."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Carrots were originally purple."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "The average cloud weighs 1.1 million pounds."
		},
		new NotifData
		{
			Summary = "Fun Fact:",
			Body = "Potatoes have more chromosomes than humans."
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "explode", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "bigexplode", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "spawn10mannequin", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "spawn1minos", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "spawn5filth", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "spawn1filth", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "spawn1schism", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "spawn1virtue", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "spawn1cerberus", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "spawn1stray", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "spawn1ferryman", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "spawn1mindflayer", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "heal", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "getrekt", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "die", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "addstyle", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "takestyle", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "flingup", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "flingdown", "Gimme!" } }
		},
		new NotifData
		{
			Summary = "Amazon",
			Body = "Your Amazon package has arrived!",
			Actions = new Dictionary<string, string> { { "flingrandom", "Gimme!" } }
		}
	};

	public static NotifData[] deathNotifs = new NotifData[19]
	{
		new NotifData
		{
			Summary = "WASTED",
			Body = "Skill issue"
		},
		new NotifData
		{
			Summary = "this game isnt built for idiots",
			Body = "Touch grass"
		},
		new NotifData
		{
			Summary = "My grandma is better than you",
			Body = "Get good"
		},
		new NotifData
		{
			Summary = "ERROR:",
			Body = "Ur trash"
		},
		new NotifData
		{
			Summary = "I smell a loser",
			Body = "Maybe try not dying"
		},
		new NotifData
		{
			Summary = "You died.",
			Body = "Crazy."
		},
		new NotifData
		{
			Summary = "Cause of death:",
			Body = "Stupidity"
		},
		new NotifData
		{
			Summary = "RIP",
			Body = "You will not be missed."
		},
		new NotifData
		{
			Summary = "Game Over",
			Body = "Just kidding. Or am I."
		},
		new NotifData
		{
			Summary = "V1 has left the chat",
			Body = "permanently"
		},
		new NotifData
		{
			Summary = "New achievement unlocked:",
			Body = "Floor inspection"
		},
		new NotifData
		{
			Summary = "Did you mean to do that?",
			Body = "Probably not."
		},
		new NotifData
		{
			Summary = "Wow.",
			Body = "Just... wow."
		},
		new NotifData
		{
			Summary = "Technical difficulty",
			Body = "Please insert coin to continue"
		},
		new NotifData
		{
			Summary = "404",
			Body = "Player not found"
		},
		new NotifData
		{
			Summary = "Skill issue detected",
			Body = "Recommend: touching grass"
		},
		new NotifData
		{
			Summary = "Better luck next time!",
			Body = "There will not be a next time."
		},
		new NotifData
		{
			Summary = "oops",
			Body = "lol"
		},
		new NotifData
		{
			Summary = "The machine has stopped.",
			Body = "Temporarily."
		}
	};

	public static NotifData[] damageNotifs = new NotifData[19]
	{
		new NotifData
		{
			Summary = "Something hit you",
			Body = "Try avoiding that"
		},
		new NotifData
		{
			Summary = "are you serious",
			Body = "Just shoot them dummy"
		},
		new NotifData
		{
			Summary = "You suck",
			Body = "You know this game requires skill, right?"
		},
		new NotifData
		{
			Summary = "Dont die",
			Body = "When your HP reaches 0, something very scary happens."
		},
		new NotifData
		{
			Summary = "Ouch",
			Body = "That looked like it hurt. (It did.)"
		},
		new NotifData
		{
			Summary = "Pain notification",
			Body = "You have received a pain."
		},
		new NotifData
		{
			Summary = "Health Warning",
			Body = "You are running low on not being dead."
		},
		new NotifData
		{
			Summary = "Blood levels critical",
			Body = "Please consume fewer bullets."
		},
		new NotifData
		{
			Summary = "Damage report:",
			Body = "Yeah that was bad."
		},
		new NotifData
		{
			Summary = "Try dodging",
			Body = "It's free."
		},
		new NotifData
		{
			Summary = "Medical alert",
			Body = "Patient is being an idiot."
		},
		new NotifData
		{
			Summary = "That hit",
			Body = "Literally."
		},
		new NotifData
		{
			Summary = "Skill issue",
			Body = "You got hit."
		},
		new NotifData
		{
			Summary = "New voicemail from Hell:",
			Body = "\"Stop getting hit you moron\""
		},
		new NotifData
		{
			Summary = "Warning:",
			Body = "Continued contact with projectiles may cause death."
		},
		new NotifData
		{
			Summary = "Ow.",
			Body = "That's all. Just ow."
		},
		new NotifData
		{
			Summary = "Combat tip:",
			Body = "The bullets are not your friends."
		},
		new NotifData
		{
			Summary = "You missed",
			Body = "Them. They did not miss you."
		},
		new NotifData
		{
			Summary = "ERROR",
			Body = "Skill not found"
		}
	};

	public static NotifData[] parryNotifs = new NotifData[17]
	{
		new NotifData
		{
			Summary = "Deflect that shit",
			Body = "Return to Sender"
		},
		new NotifData
		{
			Summary = "F in the chat",
			Body = "Bonk"
		},
		new NotifData
		{
			Summary = "I dont want it",
			Body = "UltraFisted"
		},
		new NotifData
		{
			Summary = "Your amazon package is here",
			Body = "Contains: 1 projectile"
		},
		new NotifData
		{
			Summary = "Fuck you and your projectiles",
			Body = "Mail it with same-day shipping"
		},
		new NotifData
		{
			Summary = "Not my problem",
			Body = "It is now their problem."
		},
		new NotifData
		{
			Summary = "Ping!",
			Body = "Pong."
		},
		new NotifData
		{
			Summary = "Skill issue",
			Body = "Theirs, not yours."
		},
		new NotifData
		{
			Summary = "Unsubscribed",
			Body = "From their projectile."
		},
		new NotifData
		{
			Summary = "Wrong address",
			Body = "Return to sender. No forwarding."
		},
		new NotifData
		{
			Summary = "Rejected",
			Body = "Application denied."
		},
		new NotifData
		{
			Summary = "That was rude of them",
			Body = "You were ruder."
		},
		new NotifData
		{
			Summary = "Free projectile",
			Body = "Comes with complimentary violence."
		},
		new NotifData
		{
			Summary = "Customer service:",
			Body = "We do not accept returns. You do."
		},
		new NotifData
		{
			Summary = "Heads up!",
			Body = "You gave them one."
		},
		new NotifData
		{
			Summary = "404",
			Body = "Projectile failed to reach destination."
		},
		new NotifData
		{
			Summary = "Speed run strats",
			Body = "Send it back faster."
		}
	};

	public static NotifData[] rankupNotifs = new NotifData[17]
	{
		new NotifData
		{
			Summary = "Number go uppies",
			Body = "Gopro go brrr"
		},
		new NotifData
		{
			Summary = "Epik Nikkon Gameplay",
			Body = "Style on em"
		},
		new NotifData
		{
			Summary = "The fit is peak",
			Body = "Looking good"
		},
		new NotifData
		{
			Summary = "Rank up!",
			Body = "Keep it up."
		},
		new NotifData
		{
			Summary = "Looking good",
			Body = "Don't stop now."
		},
		new NotifData
		{
			Summary = "Nice.",
			Body = "Very nice."
		},
		new NotifData
		{
			Summary = "Stylish.",
			Body = "As expected."
		},
		new NotifData
		{
			Summary = "The crowd goes wild",
			Body = "There is no crowd. Hell is empty."
		},
		new NotifData
		{
			Summary = "GoPro go brrr",
			Body = "Someone is recording this."
		},
		new NotifData
		{
			Summary = "Showoff",
			Body = "Valid."
		},
		new NotifData
		{
			Summary = "Certified fresh",
			Body = "Rotten Tomatoes score: S"
		},
		new NotifData
		{
			Summary = "Getting spicy",
			Body = "Please maintain this energy."
		},
		new NotifData
		{
			Summary = "Hell is watching",
			Body = "Hell is impressed."
		},
		new NotifData
		{
			Summary = "V1 is cooking",
			Body = "Unfortunately the ingredients are enemies."
		},
		new NotifData
		{
			Summary = "Stylish kill",
			Body = "As opposed to all your other kills."
		},
		new NotifData
		{
			Summary = "Dante would be proud",
			Body = "Probably."
		},
		new NotifData
		{
			Summary = "That was clean",
			Body = "Suspiciously clean."
		}
	};

	public static NotifData[] rankdownNotifs = new NotifData[17]
	{
		new NotifData
		{
			Summary = "Lmao",
			Body = "You suck"
		},
		new NotifData
		{
			Summary = "They must be hacking",
			Body = "Metal Pipe Sound Effect"
		},
		new NotifData
		{
			Summary = "Can you gay with me",
			Body = "Get rekt"
		},
		new NotifData
		{
			Summary = "Yikes",
			Body = "That happened."
		},
		new NotifData
		{
			Summary = "Rank down.",
			Body = "Embarrassing."
		},
		new NotifData
		{
			Summary = "Metal pipe sound effect",
			Body = "*clang*"
		},
		new NotifData
		{
			Summary = "The crowd boos",
			Body = "There is no crowd. Hell is disappointed."
		},
		new NotifData
		{
			Summary = "Get it together",
			Body = "Please."
		},
		new NotifData
		{
			Summary = "Certified rotten",
			Body = "Rotten Tomatoes score: D"
		},
		new NotifData
		{
			Summary = "Ouch",
			Body = "Not physically. Spiritually."
		},
		new NotifData
		{
			Summary = "Skill issue",
			Body = "Again."
		},
		new NotifData
		{
			Summary = "Hell is watching",
			Body = "Hell is not impressed."
		},
		new NotifData
		{
			Summary = "V1 is not cooking",
			Body = "V1 burned the kitchen."
		},
		new NotifData
		{
			Summary = "Sad trumpet",
			Body = "Wah wah waaaah."
		},
		new NotifData
		{
			Summary = "That was ugly",
			Body = "We all saw it."
		},
		new NotifData
		{
			Summary = "Dante would not be proud",
			Body = "Probably."
		},
		new NotifData
		{
			Summary = "Come on man",
			Body = "Come on."
		}
	};

	public static NotifData[] styleNotifs = new NotifData[13]
	{
		new NotifData
		{
			Summary = "Showoff",
			Body = "We see you."
		},
		new NotifData
		{
			Summary = "Hit that scrongly",
			Body = "Very scrongly."
		},
		new NotifData
		{
			Summary = "Extra points",
			Body = "For being dramatic."
		},
		new NotifData
		{
			Summary = "Bonus!",
			Body = "You earned it. Barely."
		},
		new NotifData
		{
			Summary = "That was unnecessary",
			Body = "Do it again."
		},
		new NotifData
		{
			Summary = "Style detected",
			Body = "Logging for records."
		},
		new NotifData
		{
			Summary = "Points added",
			Body = "You're welcome."
		},
		new NotifData
		{
			Summary = "Hell rates this",
			Body = "8/10."
		},
		new NotifData
		{
			Summary = "Certified fresh moment",
			Body = "Limited time only."
		},
		new NotifData
		{
			Summary = "Did you practice that?",
			Body = "It showed."
		},
		new NotifData
		{
			Summary = "Unnecessary violence",
			Body = "Maximum points."
		},
		new NotifData
		{
			Summary = "Extra credit",
			Body = "For the explosion."
		},
		new NotifData
		{
			Summary = "Combat log updated:",
			Body = "Entry: absolute cinema"
		}
	};

	public static NotifData[] killNotifs = new NotifData[16]
	{
		new NotifData
		{
			Summary = "Got em",
			Body = "One less problem."
		},
		new NotifData
		{
			Summary = "Another one",
			Body = "Bites the dust."
		},
		new NotifData
		{
			Summary = "Blood for the blood machine",
			Body = "As intended."
		},
		new NotifData
		{
			Summary = "Deleted",
			Body = "Permanently and violently."
		},
		new NotifData
		{
			Summary = "They did not make it",
			Body = "You did."
		},
		new NotifData
		{
			Summary = "Enemy eliminated",
			Body = "Next."
		},
		new NotifData
		{
			Summary = "RIP",
			Body = "Nobody will attend the funeral."
		},
		new NotifData
		{
			Summary = "That one's dead",
			Body = "Onto the next one."
		},
		new NotifData
		{
			Summary = "Skill issue",
			Body = "Theirs."
		},
		new NotifData
		{
			Summary = "Goodbye",
			Body = "They didn't say it. You said it for them. With your fist."
		},
		new NotifData
		{
			Summary = "One down",
			Body = "Several hundred to go."
		},
		new NotifData
		{
			Summary = "Clean.",
			Body = "Well. Not literally."
		},
		new NotifData
		{
			Summary = "FATALITY",
			Body = "Not really. You just shot them a lot."
		},
		new NotifData
		{
			Summary = "Enemy status:",
			Body = "Not an enemy anymore."
		},
		new NotifData
		{
			Summary = "Body count updated",
			Body = "Going up."
		},
		new NotifData
		{
			Summary = "They had it coming",
			Body = "Probably."
		}
	};

	public static NotifData testNotifChaosPlayer = new NotifData
	{
		Summary = "TEST: Chaos + Player",
		Body = "Click a button!",
		Actions = new Dictionary<string, string>
		{
			{ "explode", "explode" },
			{ "bigexplode", "bigexplode" },
			{ "heal", "heal" },
			{ "fullheal", "fullheal" },
			{ "getrekt", "getrekt" },
			{ "die", "die" },
			{ "addstyle", "addstyle" },
			{ "takestyle", "takestyle" },
			{ "flingup", "flingup" },
			{ "flingdown", "flingdown" },
			{ "flingrandom", "flingrandom" },
			{ "rotate", "rotate" },
			{ "placeholder", "placeholder" }
		}
	};

	public static NotifData testNotifSpawn1 = new NotifData
	{
		Summary = "TEST: Spawning 1",
		Body = "Click a button!",
		Actions = new Dictionary<string, string>
		{
			{ "spawn10mannequin", "spawn10mannequin" },
			{ "spawn1minos", "spawn1minos" },
			{ "spawn5filth", "spawn5filth" },
			{ "spawn1filth", "spawn1filth" },
			{ "spawn1sisyphus", "spawn1sisyphus" },
			{ "spawn1husk", "spawn1husk" },
			{ "spawn1schism", "spawn1schism" }
		}
	};

	public static NotifData testNotifSpawn2 = new NotifData
	{
		Summary = "TEST: Spawning 2",
		Body = "Click a button!",
		Actions = new Dictionary<string, string>
		{
			{ "spawn1virtue", "spawn1virtue" },
			{ "spawn1cerberus", "spawn1cerberus" },
			{ "spawn1malicious", "spawn1malicious" },
			{ "spawn1stray", "spawn1stray" },
			{ "spawn1sentry", "spawn1sentry" },
			{ "spawn1ferryman", "spawn1ferryman" },
			{ "spawn1mindflayer", "spawn1mindflayer" }
		}
	};

	public static NotifData testNotifWorld = new NotifData
	{
		Summary = "TEST: World",
		Body = "Click a button!",
		Actions = new Dictionary<string, string>()
	};
}
[HarmonyPatch(typeof(NewMovement), "GetHurt")]
internal class PatchPlayerHurt
{
	private static void Postfix(NewMovement __instance)
	{
		if (__instance.dead)
		{
			if (UltraNotifPack.actionEnabled.value && UltraNotifPack.notifDie.value)
			{
				UltraNotifPack.SendRandom(Notifications.deathNotifs);
				UltraNotifPack.Log.LogInfo((object)"Sending Notification. Type: Death");
			}
		}
		else if (UltraNotifPack.actionEnabled.value && UltraNotifPack.notifDamage.value)
		{
			UltraNotifPack.SendRandom(Notifications.damageNotifs);
			UltraNotifPack.Log.LogInfo((object)"Sending Notification. Type: Damage");
		}
	}
}
[HarmonyPatch(typeof(Punch), "ParryProjectile")]
internal class PatchParry
{
	private static void Postfix()
	{
		if (UltraNotifPack.actionEnabled.value && UltraNotifPack.notifParry.value)
		{
			UltraNotifPack.SendRandom(Notifications.parryNotifs);
			UltraNotifPack.Log.LogInfo((object)"Sending Notification. Type: Parry (Proj)");
		}
	}
}
[HarmonyPatch(typeof(EnemyIdentifier), "Death", new Type[] { })]
internal class PatchEnemyDeath
{
	private static void Prefix(EnemyIdentifier __instance)
	{
		if (!__instance.dead && UltraNotifPack.actionEnabled.value && UltraNotifPack.notifKill.value)
		{
			UltraNotifPack.SendRandom(Notifications.killNotifs);
			UltraNotifPack.Log.LogInfo((object)"Sending Notification. Type: Kill");
		}
	}
}
[HarmonyPatch(typeof(StyleHUD), "AddPoints")]
internal class PatchStyleBonus
{
	private static void Postfix()
	{
		if (UltraNotifPack.actionEnabled.value && UltraNotifPack.notifStyle.value)
		{
			UltraNotifPack.SendRandom(Notifications.styleNotifs);
			UltraNotifPack.Log.LogInfo((object)"Sending Notification. Type: Style");
		}
	}
}
public static class Spawning
{
	public static void SpawnEnemy(string name, int count = 1)
	{
		//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fe: 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_00d2: Expected O, but got Unknown
		//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0105: Unknown result type (might be due to invalid IL or missing references)
		//IL_010a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0114: Unknown result type (might be due to invalid IL or missing references)
		//IL_0119: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Unknown result type (might be due to invalid IL or missing references)
		SpawnMenu instance = MonoSingleton<SpawnMenu>.Instance;
		if ((Object)(object)instance != (Object)null)
		{
			FieldInfo field = typeof(SpawnMenu).GetField("objects", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			if (field != null)
			{
				object value = field.GetValue(instance);
				FieldInfo field2 = value.GetType().GetField("enemies", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				if (field2 != null)
				{
					Array array = (Array)field2.GetValue(value);
					foreach (object item in array)
					{
						FieldInfo field3 = item.GetType().GetField("gameObject", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
						if (field3 == null)
						{
							continue;
						}
						GameObject val = (GameObject)field3.GetValue(item);
						if ((Object)(object)val != (Object)null && ((Object)val).name.Contains(name))
						{
							for (int i = 0; i < count; i++)
							{
								Object.Instantiate<GameObject>(val, ((Component)MonoSingleton<NewMovement>.Instance).transform.position + Random.insideUnitSphere * 5f, Quaternion.identity);
								UltraNotifPack.Log.LogInfo((object)("Spawned " + name + " from SpawnMenu"));
							}
							return;
						}
						UltraNotifPack.Log.LogWarning((object)(name + " not in SpawnMenu"));
					}
				}
			}
		}
		EnemyIdentifier[] array2 = Object.FindObjectsOfType<EnemyIdentifier>();
		EnemyIdentifier[] array3 = array2;
		foreach (EnemyIdentifier val2 in array3)
		{
			if (((Object)((Component)val2).gameObject).name.Contains(name))
			{
				for (int k = 0; k < count; k++)
				{
					Object.Instantiate<GameObject>(((Component)val2).gameObject, ((Component)MonoSingleton<NewMovement>.Instance).transform.position + Random.insideUnitSphere * 5f, Quaternion.identity);
					UltraNotifPack.Log.LogInfo((object)("Spawned " + name + " from scene"));
				}
				return;
			}
			UltraNotifPack.Log.LogWarning((object)(name + " not in scene"));
		}
		GameObject[] array4 = Resources.FindObjectsOfTypeAll<GameObject>();
		GameObject[] array5 = array4;
		foreach (GameObject val3 in array5)
		{
			if (((Object)val3).name == name && (Object)(object)val3.GetComponent<EnemyIdentifier>() != (Object)null)
			{
				for (int m = 0; m < count; m++)
				{
					Object.Instantiate<GameObject>(val3, ((Component)MonoSingleton<NewMovement>.Instance).transform.position + Random.insideUnitSphere * 5f, Quaternion.identity);
					UltraNotifPack.Log.LogInfo((object)("Spawned " + name + " from assets"));
				}
				return;
			}
		}
		UltraNotifPack.Log.LogWarning((object)("Prefab " + name + " not found anywhere!"));
	}

	public static void SpawnObject(string identifier)
	{
		//IL_0126: Unknown result type (might be due to invalid IL or missing references)
		//IL_012d: Expected O, but got Unknown
		//IL_0139: Unknown result type (might be due to invalid IL or missing references)
		//IL_013e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0148: Unknown result type (might be due to invalid IL or missing references)
		//IL_014d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0152: Unknown result type (might be due to invalid IL or missing references)
		SpawnMenu instance = MonoSingleton<SpawnMenu>.Instance;
		if ((Object)(object)instance == (Object)null)
		{
			return;
		}
		FieldInfo field = typeof(SpawnMenu).GetField("objects", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field == null)
		{
			return;
		}
		object value = field.GetValue(instance);
		string[] array = new string[3] { "enemies", "objects", "props" };
		foreach (string name in array)
		{
			FieldInfo field2 = value.GetType().GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			if (field2 == null)
			{
				continue;
			}
			Array array2 = (Array)field2.GetValue(value);
			foreach (object item in array2)
			{
				FieldInfo field3 = item.GetType().GetField("identifier", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				if (field3 == null || !((string)field3.GetValue(item) == identifier))
				{
					continue;
				}
				FieldInfo field4 = item.GetType().GetField("gameObject", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				GameObject val = (GameObject)field4.GetValue(item);
				Object.Instantiate<GameObject>(val, ((Component)MonoSingleton<NewMovement>.Instance).transform.position + Random.insideUnitSphere * 5f, Quaternion.identity);
				UltraNotifPack.Log.LogInfo((object)("Spawned " + identifier));
				return;
			}
		}
		UltraNotifPack.Log.LogWarning((object)("Spawnable " + identifier + " not found!"));
	}

	public static void SpawnExplosion(bool big = false)
	{
		//IL_0038: 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)
		Explosion[] array = Resources.FindObjectsOfTypeAll<Explosion>();
		if (array.Length == 0)
		{
			UltraNotifPack.Log.LogWarning((object)"No explosion found to clone!");
			return;
		}
		GameObject val = Object.Instantiate<GameObject>(((Component)array[0]).gameObject, ((Component)MonoSingleton<NewMovement>.Instance).transform.position, Quaternion.identity);
		if (big)
		{
			Explosion component = val.GetComponent<Explosion>();
			if ((Object)(object)component != (Object)null)
			{
				component.damage = 200;
				component.maxSize = 20f;
				component.speed = 10f;
			}
		}
		UltraNotifPack.Log.LogInfo((object)("Spawned " + (big ? "big " : "") + "explosion"));
	}
}