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