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 <>9__24_4; internal void 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 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 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 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 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 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 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 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 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.Instance.ForceAntiHP(0f, false, false, true, false); MonoSingleton.Instance.GetHealth(100, true, false, true); Log.LogInfo((object)"Healed Player to 100"); break; case "getrekt": MonoSingleton.Instance.GetHurt(MonoSingleton.Instance.hp - 1, false, 1f, false, false, 0.35f, false); MonoSingleton.Instance.ForceAntiHP(99f, false, false, true, false); Log.LogInfo((object)"hurt the player a bit more neccessary than usual."); break; case "die": MonoSingleton.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.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.Instance.RemovePoints(num); Log.LogInfo((object)$"Took {num} style points"); break; } case "flingup": MonoSingleton.Instance.rb.AddForce(Vector3.up * 50f, (ForceMode)2); Log.LogInfo((object)"Flung Player Up"); break; case "flingdown": MonoSingleton.Instance.rb.AddForce(Vector3.down * 50f, (ForceMode)2); Log.LogInfo((object)"Flung Player Down"); break; case "flingrandom": MonoSingleton.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)null, -1); Log.LogInfo((object)"Placeholder Notification"); break; } } } [CompilerGenerated] private sealed class d__26 : IEnumerator, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public UltraNotifPack <>4__this; private float 5__1; private NotifData 5__2; private string 5__3; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__26(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { 5__2 = null; 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) { 5__2 = Notifications.intervalNotifs[Random.Range(0, Notifications.intervalNotifs.Length)]; 5__3 = TryGetIconPath(); if (5__3 != null) { string summary = 5__2.Summary; string body = 5__2.Body; Dictionary actions = 5__2.Actions; NotificationSystem.NotifySend(summary, body, (Sprite)null, 5__3, (Urgency)1, "NotifySend", 0u, actions, -1); } else { NotificationSystem.NotifySend(5__2.Summary, 5__2.Body, (Sprite)null, "", (Urgency)1, "NotifySend", 0u, 5__2.Actions, -1); } Log.LogInfo((object)"Sending Notification. Type: Interval"); 5__2 = null; 5__3 = null; } 5__1 = Random.Range(intervalMin.value, intervalMax.value); <>2__current = (object)new WaitForSeconds(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 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 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 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 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.Instance.ForceAntiHP(0f, false, false, true, false); MonoSingleton.Instance.GetHealth(100, true, false, true); Log.LogInfo((object)"Healed Player to 100"); break; case "getrekt": MonoSingleton.Instance.GetHurt(MonoSingleton.Instance.hp - 1, false, 1f, false, false, 0.35f, false); MonoSingleton.Instance.ForceAntiHP(99f, false, false, true, false); Log.LogInfo((object)"hurt the player a bit more neccessary than usual."); break; case "die": MonoSingleton.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.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.Instance.RemovePoints(num); Log.LogInfo((object)$"Took {num} style points"); break; } case "flingup": MonoSingleton.Instance.rb.AddForce(Vector3.up * 50f, (ForceMode)2); Log.LogInfo((object)"Flung Player Up"); break; case "flingdown": MonoSingleton.Instance.rb.AddForce(Vector3.down * 50f, (ForceMode)2); Log.LogInfo((object)"Flung Player Down"); break; case "flingrandom": MonoSingleton.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)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 list = new List(); 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(d__26))] private IEnumerator NotifLoop() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new 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 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 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 { { "die", "*Die*" }, { "bigexplode", "Install AntiVirus" } } }, new NotifData { Summary = "Update Available", Body = "ULTRAKILL 2 Is ready to install", Actions = new Dictionary { { "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 { { "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 { { "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 { { "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 { { "spawn1cerberus", "Buy" }, { "close", "Close" } } }, new NotifData { Summary = "Recommended Video", Body = "\"How to parry your taxes\", Uploaded 3 minutes ago.", Actions = new Dictionary { { "watch", "Watch" }, { "Not now", "Later" } } }, new NotifData { Summary = "Filth3274 has sent you a message", Body = "\"Check behind you\"", Actions = new Dictionary { { "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 { { "reply", "Reply" }, { "read", "Mark As Read" }, { "block", "Block" } } }, new NotifData { Summary = "Anonymous has sent you a message", Body = "\"Im Approaching.\"", Actions = new Dictionary { { "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 { { "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 { { "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 { { "close", "Close program" }, { "ignore", "Ignore" } } }, new NotifData { Summary = "Security Alert", Body = "An unauthorized earthmover has gained access to your file system.", Actions = new Dictionary { { "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 { { "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 { { "explode", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "bigexplode", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "spawn10mannequin", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "spawn1minos", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "spawn5filth", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "spawn1filth", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "spawn1schism", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "spawn1virtue", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "spawn1cerberus", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "spawn1stray", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "spawn1ferryman", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "spawn1mindflayer", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "heal", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "getrekt", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "die", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "addstyle", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "takestyle", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "flingup", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "flingdown", "Gimme!" } } }, new NotifData { Summary = "Amazon", Body = "Your Amazon package has arrived!", Actions = new Dictionary { { "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 { { "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 { { "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 { { "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() }; } [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.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(val, ((Component)MonoSingleton.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[] array3 = array2; foreach (EnemyIdentifier val2 in array3) { if (((Object)((Component)val2).gameObject).name.Contains(name)) { for (int k = 0; k < count; k++) { Object.Instantiate(((Component)val2).gameObject, ((Component)MonoSingleton.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[] array5 = array4; foreach (GameObject val3 in array5) { if (((Object)val3).name == name && (Object)(object)val3.GetComponent() != (Object)null) { for (int m = 0; m < count; m++) { Object.Instantiate(val3, ((Component)MonoSingleton.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.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(val, ((Component)MonoSingleton.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(); if (array.Length == 0) { UltraNotifPack.Log.LogWarning((object)"No explosion found to clone!"); return; } GameObject val = Object.Instantiate(((Component)array[0]).gameObject, ((Component)MonoSingleton.Instance).transform.position, Quaternion.identity); if (big) { Explosion component = val.GetComponent(); if ((Object)(object)component != (Object)null) { component.damage = 200; component.maxSize = 20f; component.speed = 10f; } } UltraNotifPack.Log.LogInfo((object)("Spawned " + (big ? "big " : "") + "explosion")); } }