Decompiled source of Death Messages v0.0.2

plugins/Nyan.LC.DeathMessages.dll

Decompiled a year ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Nyan.LC.DeathMessages")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("This is a description")]
[assembly: AssemblyFileVersion("0.0.2.0")]
[assembly: AssemblyInformationalVersion("0.0.2+cd928ea4d2517f38e38897cb11c63d7e0817c4ba")]
[assembly: AssemblyProduct("Nyan.LC.DeathMessages")]
[assembly: AssemblyTitle("Nyan.LC.DeathMessages")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.2.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
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;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace LCDeathMessages
{
	public static class DeathMessages
	{
		private static List<string> Unknown { get; } = new List<string>(10) { "$$ was slain.", "$$'s soul left their body.", "$$ was murdered.", "$$ passed.", "$$ heart stopped.", "$$ went offline.", "$$'s life support was unplugged.", "$$ turned blue.", "$$'s incompetence was put on display.", "$$ expired." };


		private static List<string> Bludgeoning { get; } = new List<string>(8) { "$$ experienced skull crushing defeat.", "$$'s bones were shattered.", "$$ was whacked in the head.", "$$ was bludgeoned out of their misery.", "$$ was on the wrong end of an object.", "$$ found themselves before a hard place.", "$$'s neck was pulverised.", "$$ suffered a fatal blow." };


		private static List<string> Gravity { get; } = new List<string>(9) { "$$ didn't bounce.", "$$ tripped.", "$$ discovered gravity.", "$$ thought they could fly.", "$$ left a small crater.", "$$ left an average crater.", "$$ left a massive crater.", "$$ forgot to walk on solid ground.", "$$ splattered." };


		private static List<string> Blast { get; } = new List<string>(8) { "$$ went boom!", "$$ went everywhere.", "$$ went out with a bang.", "$$ was blown to smithereens.", "$$ detonated.", "$$ became a cloud of dust.", "$$ was ripped piece by piece in an explosion.", "$$ was reduced to atoms." };


		private static List<string> Strangulation { get; } = new List<string>(6) { "$$'s neck was tied up with a nice bow.", "$$ was choked out.", "$$ was throttled.", "$$ had their breath taken away.", "$$ lost their breathing privileges.", "$$'s neck was held in high regard." };


		private static List<string> Suffocation { get; } = new List<string>(9) { "$$ couldn't breathe.", "$$ ran out of air.", "$$'s lungs were empty.", "$$ took their last breath.", "$$ suffocated in the dark", "$$'s last breath was wasted.", "$$ asphyxiated.", "$$ experienced hypoxia.", "$$'s breath left them." };


		private static List<string> Mauling => new List<string>(10)
		{
			"$$ was slain.",
			"$$ was eviscerated.",
			"$$ was murdered.",
			"$$'s face was torn off.",
			"$$'s entrails were ripped out.",
			"$$ got massacred.",
			"$$ was torn in half.",
			"$$'s body was mangled.",
			"$$'s vital organs were ruptured.",
			"$$ was removed from " + ((Object)Plugin.RoundData.currentLevel).name + "."
		};

		private static List<string> Gunshots { get; } = new List<string>(9) { "$$ was given some extra holes.", "$$ became partly see-through.", "$$ had lead forcefully implanted.", "$$ was target practice.", "$$ didn't hear the gunshots.", "$$ wasn't Neo.", "$$ found out that bullets hurt.", "$$ was shot down.", "$$ walked into a training range." };


		private static List<string> Crushing { get; } = new List<string>(6) { "$$ found crushing defeat.", "$$ couldn't handle the pressure.", "$$'s life was crushed.", "$$ found too much weight upon them.", "$$ suffered under pressure.", "$$ discovered that gravity doesn't just make them fall." };


		private static List<string> Drowning { get; } = new List<string>(7) { "$$ is shark food.", "$$ is sleeping with the fish.", "$$ drowned.", "$$ tried to drink a lake.", "$$ discovered Atlantis.", "$$ drank water the wrong way.", "$$ didn't have gills." };


		private static List<string> Abandoned { get; } = new List<string>(6) { "$$ was left behind.", "$$ was forgotten.", "$$ wasn't important.", "$$ decided to stay home.", "$$ lost track of time.", "$$ forgot the last part of the mission." };


		private static List<string> Electrocution { get; } = new List<string>(8) { "$$ couldn't figure out watt happened.", "$$ couldn't contain the watts.", "$$ was turned into a battery.", "$$ became a lightning rod.", "$$'s positive life force became negative.", "$$ was zapped.", "$$ touched the wrong wire.", "$$ is no longer live." };


		public static string Get(CauseOfDeath cause, string username)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Expected I4, but got Unknown
			Random random = new Random();
			return ((int)cause switch
			{
				0 => Unknown[random.Next(0, Unknown.Count)], 
				1 => Bludgeoning[random.Next(0, Bludgeoning.Count)], 
				2 => Gravity[random.Next(0, Gravity.Count)], 
				3 => Blast[random.Next(0, Blast.Count)], 
				4 => Strangulation[random.Next(0, Strangulation.Count)], 
				5 => Suffocation[random.Next(0, Suffocation.Count)], 
				6 => Mauling[random.Next(0, Mauling.Count)], 
				7 => Gunshots[random.Next(0, Gunshots.Count)], 
				8 => Crushing[random.Next(0, Crushing.Count)], 
				9 => Drowning[random.Next(0, Drowning.Count)], 
				10 => Abandoned[random.Next(0, Abandoned.Count)], 
				11 => Electrocution[random.Next(0, Electrocution.Count)], 
				_ => string.Empty, 
			}).Replace("$$", username);
		}
	}
	[BepInPlugin("Nyan.LC.DeathMessages", "Nyan.LC.DeathMessages", "0.0.2")]
	public class Plugin : BaseUnityPlugin
	{
		public static Plugin? Instance;

		private readonly Harmony _harmony = new Harmony("Nyan.LC.DeathMessages");

		public static StartOfRound RoundData => StartOfRound.Instance;

		public static ManualLogSource? Log
		{
			[return: NotNull]
			get;
			private set; }

		private void Awake()
		{
			if (Instance == null)
			{
				Instance = this;
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Started Death Messages Plugin Successfully.");
			_harmony.PatchAll(typeof(Plugin));
			Log = ((BaseUnityPlugin)this).Logger;
		}

		[HarmonyPatch(typeof(PlayerControllerB), "KillPlayer")]
		[HarmonyPostfix]
		private static void SendDeathMessage(PlayerControllerB __instance)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			if (__instance.isPlayerDead)
			{
				string text = DeathMessages.Get(__instance.causeOfDeath, __instance.playerUsername);
				string text2 = "<color=#E11919>" + text + "</color>";
				HUDManager.Instance.AddTextToChatOnServer(text2, -1);
			}
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "Nyan.LC.DeathMessages";

		public const string PLUGIN_NAME = "Nyan.LC.DeathMessages";

		public const string PLUGIN_VERSION = "0.0.2";
	}
}