Decompiled source of LCUtils v1.0.5

plugins/LCUtils.dll

Decompiled a day ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using LethalConfig;
using LethalConfig.ConfigItems;
using Microsoft.CodeAnalysis;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: IgnoresAccessChecksTo("LethalConfig")]
[assembly: AssemblyCompany("DBJ")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("A compilation of utils specific to Lethal Company")]
[assembly: AssemblyFileVersion("1.0.5.0")]
[assembly: AssemblyInformationalVersion("1.0.5+92c067e7d6109daa8a8b8c70a36ccd7ce203f329")]
[assembly: AssemblyProduct("LCUtils")]
[assembly: AssemblyTitle("com.github.decibillyjoel.LCUtils")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/DecibillyJoel/LCUtils")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.5.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;
		}
	}
}
internal static class BepPluginInfo
{
	public const string PLUGIN_GUID = "com.github.decibillyjoel.LCUtils";

	public const string PLUGIN_NAME = "LCUtils";

	public const string PLUGIN_TS_TEAM = "DBJ";

	public const string PLUGIN_VERSION = "1.0.5";
}
namespace LCUtils
{
	public class BlendedRandom : Random
	{
		private readonly Random _random1;

		private readonly Random _random2;

		private readonly double _blendFactor;

		private readonly double _blendFactorInv;

		public BlendedRandom(Random? random1, Random? random2, double blendFactor)
		{
			if (blendFactor < 0.0 || blendFactor > 1.0)
			{
				throw new ArgumentOutOfRangeException("blendFactor", "blendFactor must be between 0.0 and 1.0.");
			}
			_random1 = random1 ?? new Random();
			_random2 = random2 ?? new Random();
			_blendFactor = blendFactor;
			_blendFactorInv = 1.0 - blendFactor;
		}

		public override double NextDouble()
		{
			return (_random1.NextDouble() * _blendFactor + _random2.NextDouble() * _blendFactorInv) % 1.0;
		}

		public override int Next()
		{
			return Next(0, int.MaxValue);
		}

		public override int Next(int maxValue)
		{
			if (maxValue <= 0)
			{
				throw new ArgumentOutOfRangeException("maxValue", "maxValue must be greater than 0.");
			}
			return Next(0, maxValue);
		}

		public override int Next(int minValue, int maxValue)
		{
			if (maxValue < minValue)
			{
				throw new ArgumentOutOfRangeException("maxValue", "maxValue must be greater than minValue.");
			}
			return (int)(NextDouble() * (double)(maxValue - minValue) + (double)minValue);
		}
	}
	public static class LethalConfigNicerizer
	{
		internal const string LethalConfig_GUID = "ainavt.lc.lethalconfig";

		public static bool CanHasNicerizationPlease => Chainloader.PluginInfos.ContainsKey("ainavt.lc.lethalconfig");

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static ConfigEntry<T> Nicerize<T>(ConfigEntry<T> entry, bool restartRequired = false, Assembly? callingAssembly = null)
		{
			if (entry is ConfigEntry<int>)
			{
				if (CanHasNicerizationPlease)
				{
					AddConfigItem(entry as ConfigEntry<int>, restartRequired, callingAssembly ?? Assembly.GetCallingAssembly());
				}
			}
			else if (entry is ConfigEntry<float>)
			{
				if (CanHasNicerizationPlease)
				{
					AddConfigItem(entry as ConfigEntry<float>, restartRequired, callingAssembly ?? Assembly.GetCallingAssembly());
				}
			}
			else if (entry is ConfigEntry<bool>)
			{
				if (CanHasNicerizationPlease)
				{
					AddConfigItem(entry as ConfigEntry<bool>, restartRequired, callingAssembly ?? Assembly.GetCallingAssembly());
				}
			}
			else if (entry is ConfigEntry<string>)
			{
				if (CanHasNicerizationPlease)
				{
					AddConfigItem(entry as ConfigEntry<string>, restartRequired, callingAssembly ?? Assembly.GetCallingAssembly());
				}
			}
			else
			{
				if (!(entry is ConfigEntry<Enum>))
				{
					throw new ArgumentException($"[LCUtils.LethalConfigNicerizer.Nicerize] Cannot Nicerize ConfigEntry<{typeof(T)}>!");
				}
				if (CanHasNicerizationPlease)
				{
					AddConfigItem(entry as ConfigEntry<Enum>, restartRequired, callingAssembly ?? Assembly.GetCallingAssembly());
				}
			}
			return entry;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void AddConfigItem(ConfigEntry<int> entry, bool restartRequired = false, Assembly? callingAssembly = null)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			if (((ConfigEntryBase)entry).Description.AcceptableValues != null)
			{
				LethalConfigManager.AddConfigItem((BaseConfigItem)new IntSliderConfigItem(entry, restartRequired), callingAssembly);
			}
			else
			{
				LethalConfigManager.AddConfigItem((BaseConfigItem)new IntInputFieldConfigItem(entry, restartRequired), callingAssembly);
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void AddConfigItem(ConfigEntry<float> entry, bool restartRequired = false, Assembly? callingAssembly = null)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			if (((ConfigEntryBase)entry).Description.AcceptableValues != null)
			{
				LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatSliderConfigItem(entry, restartRequired), callingAssembly);
			}
			else
			{
				LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatInputFieldConfigItem(entry, restartRequired), callingAssembly);
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void AddConfigItem(ConfigEntry<bool> entry, bool restartRequired = false, Assembly? callingAssembly = null)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(entry, restartRequired), callingAssembly);
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void AddConfigItem(ConfigEntry<string> entry, bool restartRequired = false, Assembly? callingAssembly = null)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			if (((ConfigEntryBase)entry).Description.AcceptableValues != null)
			{
				LethalConfigManager.AddConfigItem((BaseConfigItem)new TextDropDownConfigItem(entry, restartRequired), callingAssembly);
			}
			else
			{
				LethalConfigManager.AddConfigItem((BaseConfigItem)new TextInputFieldConfigItem(entry, restartRequired), callingAssembly);
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void AddConfigItem(ConfigEntry<Enum> entry, bool restartRequired = false, Assembly? callingAssembly = null)
		{
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)new EnumDropDownConfigItem<Enum>(entry, restartRequired), callingAssembly);
		}
	}
	[BepInPlugin("com.github.decibillyjoel.LCUtils", "DBJ.LCUtils", "1.0.5")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		public const string PLUGIN_GUID = "com.github.decibillyjoel.LCUtils";

		public const string PLUGIN_NAME = "LCUtils";

		public const string PLUGIN_VERSION = "1.0.5";

		public const string PLUGIN_TS_TEAM = "DBJ";

		public static ManualLogSource PluginLogger;

		public static void Log(LogLevel logLevel, string logMessage)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			PluginLogger.Log(logLevel, (object)(logMessage ?? ""));
		}

		public static void Log(string logMessage)
		{
			Log((LogLevel)16, logMessage);
		}

		private void Awake()
		{
			PluginLogger = ((BaseUnityPlugin)this).Logger;
			Log("[v1.0.5] Finished loading!");
		}
	}
	public static class Probability
	{
		public static int GetRandomWeightedIndex(List<double> weights, Random? randomSeed = null)
		{
			if (weights == null || weights.Count == 0)
			{
				Plugin.Log((LogLevel)4, "[libs.Probability.GetRandomWeightedIndex] Could not get random weighted index; list is empty or null.");
				return -1;
			}
			if (weights.Any((double weight) => weight < 0.0))
			{
				Plugin.Log((LogLevel)4, "[libs.Probability.GetRandomWeightedIndex] Could not get random weighted index; list contains negative weights.");
				return -1;
			}
			if (randomSeed == null)
			{
				randomSeed = new Random();
			}
			double num = weights.Sum();
			if (num <= 0.0)
			{
				return randomSeed.Next(0, weights.Count);
			}
			double randomValue = randomSeed.NextDouble() * weights.Sum();
			double accumulatedValue = 0.0;
			return weights.FindIndex((double weight) => (accumulatedValue += weight) > randomValue);
		}

		public static int GetRandomWeightedIndex(List<int> weights, Random? randomSeed = null)
		{
			if (weights == null || weights.Count == 0)
			{
				Plugin.Log((LogLevel)4, "[libs.Probability.GetRandomWeightedIndex] Could not get random weighted index; list is empty or null.");
				return -1;
			}
			if (weights.Any((int weight) => weight < 0))
			{
				Plugin.Log((LogLevel)4, "[libs.Probability.GetRandomWeightedIndex] Could not get random weighted index; list contains negative weights.");
				return -1;
			}
			if (randomSeed == null)
			{
				randomSeed = new Random();
			}
			int num = weights.Sum();
			if (num <= 0)
			{
				return randomSeed.Next(0, weights.Count);
			}
			int randomValue = randomSeed.Next(0, num);
			int accumulatedValue = 0;
			return weights.FindIndex((int weight) => (accumulatedValue += weight) > randomValue);
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}