Decompiled source of Nagisa Captain v1.0.0

KirifujiCaptain.dll

Decompiled a day ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using MonoMod.RuntimeDetour.HookGen;
using MwSkinAdditions;
using RoR2;
using RoR2.ContentManagement;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Rendering;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("KirifujiCaptain")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("KirifujiCaptain")]
[assembly: AssemblyTitle("KirifujiCaptain")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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 KirifujiCaptain
{
	[BepInPlugin("com.VanillaVitamins.KirifujiCaptain", "KirifujiCaptain", "1.0.0")]
	public class KirifujiCaptainPlugin : BaseUnityPlugin
	{
		private static AssetBundle assetBundle;

		private static readonly List<Material> materialsWithRoRShader = new List<Material>();

		private static EventSub eventSub;

		private static SkinDef[] skins = (SkinDef[])(object)new SkinDef[2];

		internal static KirifujiCaptainPlugin Instance { get; private set; }

		internal static ManualLogSource InstanceLogger
		{
			get
			{
				KirifujiCaptainPlugin instance = Instance;
				return (instance != null) ? ((BaseUnityPlugin)instance).Logger : null;
			}
		}

		private void Start()
		{
			Instance = this;
			using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("KirifujiCaptain.vanillavitaminskirifujicaptain"))
			{
				assetBundle = AssetBundle.LoadFromStream(stream);
			}
			((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)BodyCatalogInit);
			HookEndpointManager.Add((MethodBase)typeof(Language).GetMethod("LoadStrings"), (Delegate)new Action<Action<Language>, Language>(LanguageLoadStrings));
			ReplaceShaders();
		}

		private static void AfterBodyCatalogInit()
		{
			eventSub.skinDefs = skins;
			eventSub.Init();
		}

		private static void ReplaceShaders()
		{
			LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGStandard.shader", "Assets/SkinAssets/KirifujiCaptain/matKirifujiBody.mat", "Assets/SkinAssets/KirifujiCaptain/matKirifujiPistol.mat");
		}

		private static void LoadMaterialsWithReplacedShader(string shaderPath, params string[] materialPaths)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			Shader shader = Addressables.LoadAssetAsync<Shader>((object)shaderPath).WaitForCompletion();
			foreach (string text in materialPaths)
			{
				Material val = assetBundle.LoadAsset<Material>(text);
				val.shader = shader;
				materialsWithRoRShader.Add(val);
			}
		}

		private static void LanguageLoadStrings(Action<Language> orig, Language self)
		{
			orig(self);
			self.SetStringByToken("VANILLAVITAMINS_SKIN_DEFKIRIFUJICAPTAIN_NAME", "Kirifuji Nagisa");
		}

		private static void BodyCatalogInit()
		{
			AddCaptainBodyDefKirifujiCaptainSkin();
			AfterBodyCatalogInit();
		}

		private static void CaptainBodyDefKirifujiCaptainSkinAdded(SkinDef skinDef, GameObject bodyPrefab)
		{
			skins[0] = skinDef;
		}

		private static SkinDef CreateCaptainBodyDefKirifujiCaptainSkin(GameObject mdl, ModelSkinController skinController)
		{
			Renderer[] renderers = mdl.GetComponentsInChildren<Renderer>(true);
			Light[] componentsInChildren = mdl.GetComponentsInChildren<Light>(true);
			List<string> skinnedRendererPaths = new List<string>();
			Renderer[] array = renderers;
			foreach (Renderer val in array)
			{
				if (val is SkinnedMeshRenderer)
				{
					skinnedRendererPaths.Add(Util.BuildPrefabTransformPath(mdl.transform, ((Component)val).transform, false, false));
				}
			}
			SkinDef skin = ScriptableObject.CreateInstance<SkinDef>();
			SkinDefParams skinParams = ScriptableObject.CreateInstance<SkinDefParams>();
			skin.skinDefParams = skinParams;
			((Object)skin).name = "DefKirifujiCaptain";
			skin.nameToken = "VANILLAVITAMINS_SKIN_DEFKIRIFUJICAPTAIN_NAME";
			skin.rootObject = mdl;
			Helpers.TryCatchThrow("Icon", delegate
			{
				skin.icon = assetBundle.LoadAsset<Sprite>("Assets\\SkinMods\\KirifujiCaptain\\Icons\\DefKirifujiCaptainIcon.png");
			});
			Helpers.TryCatchThrow("Unlockable Name", delegate
			{
				skin.unlockableDef = null;
			});
			Helpers.TryCatchThrow("Base Skins", delegate
			{
				skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { Helpers.ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) };
			});
			Helpers.TryCatchThrow("Game Object Activations", delegate
			{
				//IL_0011: Unknown result type (might be due to invalid IL or missing references)
				//IL_0064: Unknown result type (might be due to invalid IL or missing references)
				//IL_0069: Unknown result type (might be due to invalid IL or missing references)
				//IL_007f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0084: Unknown result type (might be due to invalid IL or missing references)
				//IL_009a: Unknown result type (might be due to invalid IL or missing references)
				//IL_009f: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
				//IL_0140: Unknown result type (might be due to invalid IL or missing references)
				//IL_0145: Unknown result type (might be due to invalid IL or missing references)
				//IL_015b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0160: Unknown result type (might be due to invalid IL or missing references)
				//IL_0176: Unknown result type (might be due to invalid IL or missing references)
				//IL_017b: Unknown result type (might be due to invalid IL or missing references)
				//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
				//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
				//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
				//IL_021c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0221: Unknown result type (might be due to invalid IL or missing references)
				//IL_0237: Unknown result type (might be due to invalid IL or missing references)
				//IL_023c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0252: Unknown result type (might be due to invalid IL or missing references)
				//IL_0257: Unknown result type (might be due to invalid IL or missing references)
				//IL_029b: Unknown result type (might be due to invalid IL or missing references)
				//IL_029c: Unknown result type (might be due to invalid IL or missing references)
				//IL_02a5: Unknown result type (might be due to invalid IL or missing references)
				//IL_02f8: Unknown result type (might be due to invalid IL or missing references)
				//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
				//IL_0313: Unknown result type (might be due to invalid IL or missing references)
				//IL_0318: Unknown result type (might be due to invalid IL or missing references)
				//IL_032e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0333: Unknown result type (might be due to invalid IL or missing references)
				//IL_039b: Unknown result type (might be due to invalid IL or missing references)
				//IL_039c: Unknown result type (might be due to invalid IL or missing references)
				skinParams.gameObjectActivations = (GameObjectActivation[])(object)new GameObjectActivation[4]
				{
					new GameObjectActivation
					{
						gameObject = ((Component)Helpers.ThrowIfNull<Transform>(0, "There is no renderer at path \"CaptainArmature/ROOT/base/pelvis/thigh.l\"", mdl.transform.Find("CaptainArmature/ROOT/base/pelvis/thigh.l"))).gameObject,
						shouldActivate = false,
						spawnPrefabOnModelObject = true,
						localPosition = new Vector3(-0.01283071f, -0.08559629f, -0.01453274f),
						localRotation = new Vector3(358.9364f, 0.3742724f, 180.7073f),
						localScale = new Vector3(1f, 0.9999999f, 1f),
						prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/SkinAssets/KirifujiCaptain/Prefabs/ThighLAdditions.prefab")).WithComponent<InsertBones>((Action<InsertBones>)delegate(InsertBones c)
						{
							c.rendererPaths.AddRange(skinnedRendererPaths);
							c.afterPath = "CaptainArmature/ROOT/base/pelvis/thigh.l/calf.l/foot.l/toe.l";
							Transform transform = ((Component)c).transform;
							c.newBones.Add(transform);
							c.newBones.Add(transform.GetChild(0, out var child));
							c.newBones.Add(child.GetChild(0, out var child2));
							c.newBones.Add(child2.GetChild(0, out var child3));
							c.newBones.Add(child3.GetChild(0, out var child4));
							c.newBones.Add(child4.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(1, out var child6));
							c.newBones.Add(child6.GetChild(0, out var child7));
							c.newBones.Add(child7.GetChild(0, out var child8));
							c.newBones.Add(child8.GetChild(0, out var child9));
							c.newBones.Add(child9.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(2, out var child11));
							c.newBones.Add(child11.GetChild(0, out var child12));
							c.newBones.Add(child12.GetChild(0, out var child13));
							c.newBones.Add(child13.GetChild(0, out var child14));
							c.newBones.Add(child14.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(3, out var child16));
							c.newBones.Add(child16.GetChild(0, out var child17));
							c.newBones.Add(child17.GetChild(0, out var child18));
							c.newBones.Add(child18.GetChild(0, out var child19));
							c.newBones.Add(child19.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(4, out var child21));
							c.newBones.Add(child21.GetChild(0, out var child22));
							c.newBones.Add(child22.GetChild(0, out var child23));
							c.newBones.Add(child23.GetChild(0, out var child24));
							c.newBones.Add(child24.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(5, out var child26));
							c.newBones.Add(child26.GetChild(0, out var child27));
							c.newBones.Add(child27.GetChild(0, out var child28));
							c.newBones.Add(child28.GetChild(0, out var child29));
							c.newBones.Add(child29.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(6, out var child31));
							c.newBones.Add(child31.GetChild(0, out var child32));
							c.newBones.Add(child32.GetChild(0, out var child33));
							c.newBones.Add(child33.GetChild(0, out var child34));
							c.newBones.Add(child34.GetChild(0, out var _));
						})
					},
					new GameObjectActivation
					{
						gameObject = ((Component)Helpers.ThrowIfNull<Transform>(1, "There is no renderer at path \"CaptainArmature/ROOT/base/pelvis/thigh.r\"", mdl.transform.Find("CaptainArmature/ROOT/base/pelvis/thigh.r"))).gameObject,
						shouldActivate = false,
						spawnPrefabOnModelObject = true,
						localPosition = new Vector3(0.0133885f, -0.08560316f, -0.01452898f),
						localRotation = new Vector3(358.9364f, 359.6257f, 179.2927f),
						localScale = new Vector3(1f, 1f, 1f),
						prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/SkinAssets/KirifujiCaptain/Prefabs/ThighRAdditions.prefab")).WithComponent<InsertBones>((Action<InsertBones>)delegate(InsertBones c)
						{
							c.rendererPaths.AddRange(skinnedRendererPaths);
							c.afterPath = "CaptainArmature/ROOT/base/pelvis/thigh.r/calf.r/foot.r/toe.r";
							Transform transform = ((Component)c).transform;
							c.newBones.Add(transform);
							c.newBones.Add(transform.GetChild(0, out var child));
							c.newBones.Add(child.GetChild(0, out var child2));
							c.newBones.Add(child2.GetChild(0, out var child3));
							c.newBones.Add(child3.GetChild(0, out var child4));
							c.newBones.Add(child4.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(1, out var child6));
							c.newBones.Add(child6.GetChild(0, out var child7));
							c.newBones.Add(child7.GetChild(0, out var child8));
							c.newBones.Add(child8.GetChild(0, out var child9));
							c.newBones.Add(child9.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(2, out var child11));
							c.newBones.Add(child11.GetChild(0, out var child12));
							c.newBones.Add(child12.GetChild(0, out var child13));
							c.newBones.Add(child13.GetChild(0, out var child14));
							c.newBones.Add(child14.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(3, out var child16));
							c.newBones.Add(child16.GetChild(0, out var child17));
							c.newBones.Add(child17.GetChild(0, out var child18));
							c.newBones.Add(child18.GetChild(0, out var child19));
							c.newBones.Add(child19.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(4, out var child21));
							c.newBones.Add(child21.GetChild(0, out var child22));
							c.newBones.Add(child22.GetChild(0, out var child23));
							c.newBones.Add(child23.GetChild(0, out var child24));
							c.newBones.Add(child24.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(5, out var child26));
							c.newBones.Add(child26.GetChild(0, out var child27));
							c.newBones.Add(child27.GetChild(0, out var child28));
							c.newBones.Add(child28.GetChild(0, out var child29));
							c.newBones.Add(child29.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(6, out var child31));
							c.newBones.Add(child31.GetChild(0, out var child32));
							c.newBones.Add(child32.GetChild(0, out var child33));
							c.newBones.Add(child33.GetChild(0, out var child34));
							c.newBones.Add(child34.GetChild(0, out var _));
						})
					},
					new GameObjectActivation
					{
						gameObject = ((Component)Helpers.ThrowIfNull<Transform>(2, "There is no renderer at path \"CaptainArmature/ROOT/base/stomach/chest\"", mdl.transform.Find("CaptainArmature/ROOT/base/stomach/chest"))).gameObject,
						shouldActivate = false,
						spawnPrefabOnModelObject = true,
						localPosition = new Vector3(8.226686E-05f, 0.04040649f, 0.01558462f),
						localRotation = new Vector3(2.688303f, 359.7136f, 0.05474183f),
						localScale = new Vector3(1f, 0.9999999f, 0.9999999f),
						prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/SkinAssets/KirifujiCaptain/Prefabs/ChestAdditions.prefab")).WithComponent<InsertBones>((Action<InsertBones>)delegate(InsertBones c)
						{
							c.rendererPaths.AddRange(skinnedRendererPaths);
							c.afterPath = "CaptainArmature/ROOT/base/stomach/chest/clavicle.r/upper_arm.r/lower_arm.r/hand.r/GripControl.r/thumbIKTarget.r";
							Transform transform = ((Component)c).transform;
							c.newBones.Add(transform);
							c.newBones.Add(transform.GetChild(0, out var child));
							c.newBones.Add(child.GetChild(0, out var child2));
							c.newBones.Add(child2.GetChild(0, out var _));
							c.newBones.Add(child.GetChild(1, out var child4));
							c.newBones.Add(child4.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(1, out var child6));
							c.newBones.Add(child6.GetChild(0, out var child7));
							c.newBones.Add(child7.GetChild(0, out var _));
							c.newBones.Add(child6.GetChild(1, out var child9));
							c.newBones.Add(child9.GetChild(0, out var _));
							c.newBones.Add(child6.GetChild(3, out var child11));
							c.newBones.Add(child11.GetChild(0, out var child12));
							c.newBones.Add(child12.GetChild(0, out var child13));
							c.newBones.Add(child13.GetChild(0, out var child14));
							c.newBones.Add(child14.GetChild(0, out var _));
							c.newBones.Add(child12.GetChild(1, out var child16));
							c.newBones.Add(child16.GetChild(0, out var _));
							c.newBones.Add(child6.GetChild(2, out var child18));
							c.newBones.Add(child18.GetChild(0, out var child19));
							c.newBones.Add(child19.GetChild(0, out var child20));
							c.newBones.Add(child20.GetChild(0, out var child21));
							c.newBones.Add(child21.GetChild(0, out var _));
							c.newBones.Add(child19.GetChild(1, out var child23));
							c.newBones.Add(child23.GetChild(0, out var _));
						})
					},
					new GameObjectActivation
					{
						gameObject = ((Component)Helpers.ThrowIfNull<Transform>(3, "There is no renderer at path \"CaptainArmature/ROOT/base/stomach/chest/neck/head\"", mdl.transform.Find("CaptainArmature/ROOT/base/stomach/chest/neck/head"))).gameObject,
						shouldActivate = false,
						spawnPrefabOnModelObject = true,
						localPosition = new Vector3(0.0002130426f, -0.002195761f, -6.524287E-05f),
						localRotation = new Vector3(359.6333f, -0.002011681f, 0.3552296f),
						localScale = new Vector3(1f, 1f, 0.9999999f),
						prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/SkinAssets/KirifujiCaptain/Prefabs/HeadAdditions.prefab")).WithComponent<InsertBones>((Action<InsertBones>)delegate(InsertBones c)
						{
							c.rendererPaths.AddRange(skinnedRendererPaths);
							c.afterPath = "CaptainArmature/ROOT/base/stomach/chest/neck/head/antenna.2.r";
							Transform transform = ((Component)c).transform;
							c.newBones.Add(transform);
							c.newBones.Add(transform.GetChild(1, out var child));
							c.newBones.Add(child.GetChild(0, out var child2));
							c.newBones.Add(child2.GetChild(0, out var _));
							c.newBones.Add(child.GetChild(2, out var child4));
							c.newBones.Add(child4.GetChild(0, out var _));
							c.newBones.Add(child.GetChild(1, out var child6));
							c.newBones.Add(child6.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(2, out var child8));
							c.newBones.Add(child8.GetChild(1, out var child9));
							c.newBones.Add(child9.GetChild(0, out var _));
							c.newBones.Add(child8.GetChild(0, out var child11));
							c.newBones.Add(child11.GetChild(0, out var _));
							c.newBones.Add(child8.GetChild(2, out var child13));
							c.newBones.Add(child13.GetChild(0, out var _));
							c.newBones.Add(child8.GetChild(3, out var child15));
							c.newBones.Add(child15.GetChild(1, out var child16));
							c.newBones.Add(child16.GetChild(0, out var _));
							c.newBones.Add(child15.GetChild(0, out var child18));
							c.newBones.Add(child18.GetChild(0, out var _));
							c.newBones.Add(child15.GetChild(2, out var child20));
							c.newBones.Add(child20.GetChild(0, out var _));
							c.newBones.Add(child8.GetChild(4, out var child22));
							c.newBones.Add(child22.GetChild(0, out var _));
							c.newBones.Add(child8.GetChild(5, out var child24));
							c.newBones.Add(child24.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(0, out var child26));
							c.newBones.Add(child26.GetChild(0, out var child27));
							c.newBones.Add(child27.GetChild(0, out var child28));
							c.newBones.Add(child28.GetChild(0, out var child29));
							c.newBones.Add(child29.GetChild(0, out var child30));
							c.newBones.Add(child30.GetChild(0, out var child31));
							c.newBones.Add(child31.GetChild(0, out var child32));
							c.newBones.Add(child32.GetChild(0, out var child33));
							c.newBones.Add(child33.GetChild(0, out var child34));
							c.newBones.Add(child34.GetChild(0, out var child35));
							c.newBones.Add(child35.GetChild(0, out var child36));
							c.newBones.Add(child36.GetChild(0, out var _));
							c.newBones.Add(child26.GetChild(1, out var child38));
							c.newBones.Add(child38.GetChild(0, out var child39));
							c.newBones.Add(child39.GetChild(0, out var child40));
							c.newBones.Add(child40.GetChild(0, out var child41));
							c.newBones.Add(child41.GetChild(0, out var child42));
							c.newBones.Add(child42.GetChild(0, out var child43));
							c.newBones.Add(child43.GetChild(0, out var child44));
							c.newBones.Add(child44.GetChild(0, out var child45));
							c.newBones.Add(child45.GetChild(0, out var child46));
							c.newBones.Add(child46.GetChild(0, out var child47));
							c.newBones.Add(child47.GetChild(0, out var _));
							c.newBones.Add(child26.GetChild(2, out var child49));
							c.newBones.Add(child49.GetChild(0, out var child50));
							c.newBones.Add(child50.GetChild(0, out var child51));
							c.newBones.Add(child51.GetChild(0, out var child52));
							c.newBones.Add(child52.GetChild(0, out var child53));
							c.newBones.Add(child53.GetChild(0, out var child54));
							c.newBones.Add(child54.GetChild(0, out var child55));
							c.newBones.Add(child55.GetChild(0, out var child56));
							c.newBones.Add(child56.GetChild(0, out var child57));
							c.newBones.Add(child57.GetChild(0, out var child58));
							c.newBones.Add(child58.GetChild(0, out var _));
							c.newBones.Add(child26.GetChild(3, out var child60));
							c.newBones.Add(child60.GetChild(0, out var child61));
							c.newBones.Add(child61.GetChild(0, out var child62));
							c.newBones.Add(child62.GetChild(0, out var child63));
							c.newBones.Add(child63.GetChild(0, out var child64));
							c.newBones.Add(child64.GetChild(0, out var child65));
							c.newBones.Add(child65.GetChild(0, out var child66));
							c.newBones.Add(child66.GetChild(0, out var child67));
							c.newBones.Add(child67.GetChild(0, out var child68));
							c.newBones.Add(child68.GetChild(0, out var child69));
							c.newBones.Add(child69.GetChild(0, out var _));
							c.newBones.Add(child26.GetChild(4, out var child71));
							c.newBones.Add(child71.GetChild(0, out var child72));
							c.newBones.Add(child72.GetChild(0, out var child73));
							c.newBones.Add(child73.GetChild(0, out var child74));
							c.newBones.Add(child74.GetChild(0, out var child75));
							c.newBones.Add(child75.GetChild(0, out var child76));
							c.newBones.Add(child76.GetChild(0, out var child77));
							c.newBones.Add(child77.GetChild(0, out var child78));
							c.newBones.Add(child78.GetChild(0, out var child79));
							c.newBones.Add(child79.GetChild(0, out var child80));
							c.newBones.Add(child80.GetChild(0, out var _));
							c.newBones.Add(child26.GetChild(5, out var child82));
							c.newBones.Add(child82.GetChild(0, out var child83));
							c.newBones.Add(child83.GetChild(0, out var child84));
							c.newBones.Add(child84.GetChild(0, out var child85));
							c.newBones.Add(child85.GetChild(0, out var child86));
							c.newBones.Add(child86.GetChild(0, out var child87));
							c.newBones.Add(child87.GetChild(0, out var child88));
							c.newBones.Add(child88.GetChild(0, out var child89));
							c.newBones.Add(child89.GetChild(0, out var child90));
							c.newBones.Add(child90.GetChild(0, out var child91));
							c.newBones.Add(child91.GetChild(0, out var _));
							c.newBones.Add(child26.GetChild(7, out var child93));
							c.newBones.Add(child93.GetChild(0, out var child94));
							c.newBones.Add(child94.GetChild(0, out var child95));
							c.newBones.Add(child95.GetChild(0, out var child96));
							c.newBones.Add(child96.GetChild(0, out var child97));
							c.newBones.Add(child97.GetChild(0, out var child98));
							c.newBones.Add(child98.GetChild(0, out var child99));
							c.newBones.Add(child99.GetChild(0, out var child100));
							c.newBones.Add(child100.GetChild(0, out var child101));
							c.newBones.Add(child101.GetChild(0, out var child102));
							c.newBones.Add(child102.GetChild(0, out var _));
							c.newBones.Add(child26.GetChild(6, out var child104));
							c.newBones.Add(child104.GetChild(0, out var child105));
							c.newBones.Add(child105.GetChild(0, out var child106));
							c.newBones.Add(child106.GetChild(0, out var child107));
							c.newBones.Add(child107.GetChild(0, out var child108));
							c.newBones.Add(child108.GetChild(0, out var child109));
							c.newBones.Add(child109.GetChild(0, out var child110));
							c.newBones.Add(child110.GetChild(0, out var child111));
							c.newBones.Add(child111.GetChild(0, out var child112));
							c.newBones.Add(child112.GetChild(0, out var child113));
							c.newBones.Add(child113.GetChild(0, out var _));
							c.newBones.Add(transform.GetChild(3, out var child115));
							c.newBones.Add(child115.GetChild(0, out var child116));
							c.newBones.Add(child116.GetChild(0, out var child117));
							c.newBones.Add(child117.GetChild(0, out var child118));
							c.newBones.Add(child118.GetChild(0, out var child119));
							c.newBones.Add(child119.GetChild(0, out var _));
						}).WithComponent<AddDynamicColliders>((Action<AddDynamicColliders>)delegate(AddDynamicColliders c)
						{
							c.pathPairs.Add(new PathPair
							{
								path1 = "hairback",
								path2 = "CaptainArmature/ROOT/base/stomach/chest/ChestAdditions"
							});
						})
					}
				};
			});
			Helpers.TryCatchThrow("Renderer Infos", delegate
			{
				//IL_0011: Unknown result type (might be due to invalid IL or missing references)
				//IL_0030: Unknown result type (might be due to invalid IL or missing references)
				//IL_0089: Unknown result type (might be due to invalid IL or missing references)
				//IL_008a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0093: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
				//IL_010b: Unknown result type (might be due to invalid IL or missing references)
				//IL_010c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0115: Unknown result type (might be due to invalid IL or missing references)
				//IL_0126: Unknown result type (might be due to invalid IL or missing references)
				//IL_017f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0180: Unknown result type (might be due to invalid IL or missing references)
				//IL_0189: Unknown result type (might be due to invalid IL or missing references)
				//IL_019a: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f3: 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_01fd: Unknown result type (might be due to invalid IL or missing references)
				//IL_020e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0267: Unknown result type (might be due to invalid IL or missing references)
				//IL_0268: Unknown result type (might be due to invalid IL or missing references)
				//IL_0271: Unknown result type (might be due to invalid IL or missing references)
				//IL_0282: Unknown result type (might be due to invalid IL or missing references)
				//IL_02db: Unknown result type (might be due to invalid IL or missing references)
				//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
				//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
				//IL_02f6: Unknown result type (might be due to invalid IL or missing references)
				//IL_034f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0350: Unknown result type (might be due to invalid IL or missing references)
				skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[7]
				{
					new RendererInfo
					{
						defaultMaterial = assetBundle.LoadAsset<Material>("Assets/SkinAssets/KirifujiCaptain/matKirifujiBody.mat"),
						defaultShadowCastingMode = (ShadowCastingMode)1,
						ignoreOverlays = false,
						renderer = Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"Captain\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "Captain"))),
						hideOnDeath = false,
						ignoresMaterialOverrides = false
					},
					new RendererInfo
					{
						defaultMaterial = assetBundle.LoadAsset<Material>("Assets/SkinAssets/KirifujiCaptain/matKirifujiPistol.mat"),
						defaultShadowCastingMode = (ShadowCastingMode)1,
						ignoreOverlays = false,
						renderer = Helpers.ThrowIfNull<Renderer>(1, "There is no renderer with the name \"CaptainGunArm\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "CaptainGunArm"))),
						hideOnDeath = false,
						ignoresMaterialOverrides = false
					},
					new RendererInfo
					{
						defaultMaterial = null,
						defaultShadowCastingMode = (ShadowCastingMode)1,
						ignoreOverlays = false,
						renderer = Helpers.ThrowIfNull<Renderer>(2, "There is no renderer with the name \"CaptainHat\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "CaptainHat"))),
						hideOnDeath = false,
						ignoresMaterialOverrides = false
					},
					new RendererInfo
					{
						defaultMaterial = null,
						defaultShadowCastingMode = (ShadowCastingMode)1,
						ignoreOverlays = false,
						renderer = Helpers.ThrowIfNull<Renderer>(3, "There is no renderer with the name \"CaptainChestArmor\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "CaptainChestArmor"))),
						hideOnDeath = false,
						ignoresMaterialOverrides = false
					},
					new RendererInfo
					{
						defaultMaterial = null,
						defaultShadowCastingMode = (ShadowCastingMode)1,
						ignoreOverlays = false,
						renderer = Helpers.ThrowIfNull<Renderer>(4, "There is no renderer with the name \"CaptainCoat\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "CaptainCoat"))),
						hideOnDeath = false,
						ignoresMaterialOverrides = false
					},
					new RendererInfo
					{
						defaultMaterial = null,
						defaultShadowCastingMode = (ShadowCastingMode)1,
						ignoreOverlays = false,
						renderer = Helpers.ThrowIfNull<Renderer>(5, "There is no renderer with the name \"CaptainHead\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "CaptainHead"))),
						hideOnDeath = false,
						ignoresMaterialOverrides = false
					},
					new RendererInfo
					{
						defaultMaterial = null,
						defaultShadowCastingMode = (ShadowCastingMode)1,
						ignoreOverlays = false,
						renderer = Helpers.ThrowIfNull<Renderer>(6, "There is no renderer with the name \"CaptainUndercoat\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "CaptainUndercoat"))),
						hideOnDeath = false,
						ignoresMaterialOverrides = false
					}
				};
			});
			Helpers.TryCatchThrow("MeshReplacements", delegate
			{
				//IL_0011: Unknown result type (might be due to invalid IL or missing references)
				//IL_0069: Unknown result type (might be due to invalid IL or missing references)
				//IL_006a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0073: 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_00cc: Unknown result type (might be due to invalid IL or missing references)
				skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[2]
				{
					new MeshReplacement
					{
						mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\KirifujiCaptain\\Meshes\\Nagisa_mesh.mesh"),
						renderer = Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"Captain\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "Captain")))
					},
					new MeshReplacement
					{
						mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\KirifujiCaptain\\Meshes\\Nagisa_Original_Weapon.mesh"),
						renderer = Helpers.ThrowIfNull<Renderer>(1, "There is no renderer with the name \"CaptainGunArm\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "CaptainGunArm")))
					}
				};
			});
			Helpers.TryCatchThrow("Light Infos", delegate
			{
				skinParams.lightReplacements = Array.Empty<LightInfo>();
			});
			Helpers.TryCatchThrow("Minion Skin Replacements", delegate
			{
				skinParams.minionSkinReplacements = Array.Empty<MinionSkinReplacement>();
			});
			Helpers.TryCatchThrow("Projectile Ghost Replacements", delegate
			{
				skinParams.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>();
			});
			return skin;
		}

		private static void CaptainBodyDefKirifujiCaptainLobbySkinAdded(SkinDef skinDef, GameObject displayPrefab)
		{
			skins[1] = skinDef;
		}

		private static void AddCaptainBodyDefKirifujiCaptainSkin()
		{
			string text = "CaptainBody";
			string text2 = "DefKirifujiCaptain";
			GameObject bodyPrefab = BodyCatalog.FindBodyPrefab(text);
			if (!Object.op_Implicit((Object)(object)bodyPrefab))
			{
				InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist"));
				return;
			}
			try
			{
				ModelLocator component = bodyPrefab.GetComponent<ModelLocator>();
				if (!Object.op_Implicit((Object)(object)component))
				{
					InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component"));
					return;
				}
				GameObject gameObject = ((Component)component.modelTransform).gameObject;
				ModelSkinController val = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent<ModelSkinController>() : null);
				if (!Object.op_Implicit((Object)(object)val))
				{
					InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component"));
					return;
				}
				SkinDef val2 = CreateCaptainBodyDefKirifujiCaptainSkin(gameObject, val);
				Array.Resize(ref val.skins, val.skins.Length + 1);
				val.skins[val.skins.Length - 1] = val2;
				CaptainBodyDefKirifujiCaptainSkinAdded(val2, bodyPrefab);
			}
			catch (FieldException ex)
			{
				if (ex.InnerException is ElementException ex2)
				{
					InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\""));
					InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}");
					InstanceLogger.LogWarning((object)ex2.Message);
					InstanceLogger.LogError((object)ex.InnerException);
				}
				else
				{
					InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\""));
					InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message));
					InstanceLogger.LogError((object)ex.InnerException);
				}
			}
			catch (Exception ex3)
			{
				InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\""));
				InstanceLogger.LogError((object)ex3);
			}
			try
			{
				SurvivorDef val3 = ((IEnumerable<SurvivorDef>)ContentManager.survivorDefs).FirstOrDefault((Func<SurvivorDef, bool>)((SurvivorDef d) => (Object)(object)d.bodyPrefab == (Object)(object)bodyPrefab));
				if (!Object.op_Implicit((Object)(object)val3))
				{
					InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" lobby skin to \"" + text + "\" because SurvivorDef doesn't exist"));
					return;
				}
				GameObject displayPrefab = val3.displayPrefab;
				ModelSkinController componentInChildren = displayPrefab.GetComponentInChildren<ModelSkinController>();
				if (!Object.op_Implicit((Object)(object)componentInChildren))
				{
					InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" lobby skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component"));
				}
				else
				{
					GameObject gameObject2 = ((Component)componentInChildren).gameObject;
					SkinDef val4 = CreateCaptainBodyDefKirifujiCaptainSkin(gameObject2, componentInChildren);
					Array.Resize(ref componentInChildren.skins, componentInChildren.skins.Length + 1);
					componentInChildren.skins[^1] = val4;
					CaptainBodyDefKirifujiCaptainLobbySkinAdded(val4, displayPrefab);
				}
			}
			catch (FieldException ex4)
			{
				if (ex4.InnerException is ElementException ex5)
				{
					InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" lobby skin to \"" + text + "\""));
					InstanceLogger.LogWarning((object)$"Field causing issue: {ex4.Message}, element: {ex5.Index}");
					InstanceLogger.LogWarning((object)ex5.Message);
					InstanceLogger.LogError((object)ex4.InnerException);
				}
				else
				{
					InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" lobby skin to \"" + text + "\""));
					InstanceLogger.LogWarning((object)("Field causing issue: " + ex4.Message));
					InstanceLogger.LogError((object)ex4.InnerException);
				}
			}
			catch (Exception ex6)
			{
				InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" lobby skin to \"" + text + "\""));
				InstanceLogger.LogError((object)ex6);
			}
		}

		private void Awake()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Expected O, but got Unknown
			eventSub = new EventSub();
			BoneTransformations.Init(eventSub);
			Expressions.Init(eventSub);
		}
	}
	public static class BoneTransformations
	{
		public static void Init(EventSub eventSub)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Expected O, but got Unknown
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: 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_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Expected O, but got Unknown
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Expected O, but got Unknown
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Expected O, but got Unknown
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: 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_00df: Expected O, but got Unknown
			eventSub.options.boneTransformations = (BoneTransformation[])(object)new BoneTransformation[5]
			{
				new BoneTransformation("CaptainArmature/ROOT/base/stomach/chest/clavicle.l", Vector3.one * 0.68f, new Vector3(0f, -0.1f, 0.05f), (string)null),
				new BoneTransformation("CaptainArmature/ROOT/base/stomach/chest/clavicle.r", Vector3.one * 0.68f, new Vector3(0f, -0.2f, 0.05f), (string)null),
				new BoneTransformation("CaptainArmature/ROOT/base/pelvis/thigh.l", Vector3.one, new Vector3(-0.03f, 0f, 0f), (string)null),
				new BoneTransformation("CaptainArmature/ROOT/base/pelvis/thigh.r", Vector3.one, new Vector3(0.03f, 0f, 0f), (string)null),
				new BoneTransformation("CaptainArmature/ROOT", Vector3.one * 0.85f, Vector3.zero, (string)null)
			};
		}
	}
	public static class Expressions
	{
		public static void Init(EventSub eventSub)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Expected O, but got Unknown
			eventSub.options.blinkAnimations = (BlendShapeAnimation[])(object)new BlendShapeAnimation[1] { (BlendShapeAnimation)new BlinkBlendShapeAnimation("Captain", "LowBlink", -1, 0, 0.1f, 0f, 0.1f, false) };
			eventSub.options.useAnimations = true;
			eventSub.TakeDamage = (Action<GameObject, DamageReport>)Delegate.Combine(eventSub.TakeDamage, new Action<GameObject, DamageReport>(ExpressionOnHit));
			eventSub.Death = (Action<GameObject>)Delegate.Combine(eventSub.Death, new Action<GameObject>(ExpressionOnDeath));
		}

		private static void ExpressionOnHit(GameObject body, DamageReport damageReport)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Expected O, but got Unknown
			ExpressionController val = default(ExpressionController);
			if (body.TryGetComponent<ExpressionController>(ref val))
			{
				val.TryPlayAnimation(new BlendShapeAnimation("Captain", "LowBlink", 0, 0, 0.05f, 0.3f, 0.2f, true));
				val.TryPlayAnimation(new BlendShapeAnimation("Captain", "MouthWince", 2, 0, 0.05f, 0.3f, 0.2f, false));
			}
		}

		private static void ExpressionOnDeath(GameObject body)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Expected O, but got Unknown
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Expected O, but got Unknown
			ExpressionController val = default(ExpressionController);
			if (body.TryGetComponent<ExpressionController>(ref val))
			{
				val.TryPlayAnimation(new BlendShapeAnimation("Captain", "LowBlink", 0, 2, 0.2f, float.PositiveInfinity, 0.2f, true));
				val.TryPlayAnimation(new BlendShapeAnimation("Captain", "BrowLower", 1, 0, 0.2f, float.PositiveInfinity, 0.2f, false));
				val.TryPlayAnimation(new BlendShapeAnimation("Captain", "MouthWince", 2, 2, 0.2f, float.PositiveInfinity, 0.2f, false));
			}
		}
	}
	public static class Helpers
	{
		private static GameObject prefabHolder;

		public static GameObject ClonePrefab(GameObject gameObject)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			if (!Object.op_Implicit((Object)(object)prefabHolder))
			{
				prefabHolder = new GameObject("PrefabHolder");
				Object.DontDestroyOnLoad((Object)(object)prefabHolder);
				prefabHolder.SetActive(false);
			}
			GameObject val = Object.Instantiate<GameObject>(gameObject, prefabHolder.transform);
			val.AddComponent<RemoveClone>();
			((Object)val).name = ((Object)gameObject).name;
			return val;
		}

		public static Transform GetChild(this Transform transform, int index, out Transform child)
		{
			return child = transform.GetChild(index);
		}

		public static GameObject WithComponent<T>(this GameObject gameObject, Action<T> modifier = null) where T : Component
		{
			T obj = gameObject.AddComponent<T>();
			modifier?.Invoke(obj);
			return gameObject;
		}

		public static GameObject WithTryComponent<T>(this GameObject gameObject, Action<T> modifier = null) where T : Component
		{
			if (Object.op_Implicit((Object)(object)gameObject) && !Object.op_Implicit((Object)(object)gameObject.GetComponent<T>()))
			{
				T obj = gameObject.AddComponent<T>();
				modifier?.Invoke(obj);
			}
			return gameObject;
		}

		public static T ThrowIfEquals<T>(int index, string message, T value, T expected) where T : Enum
		{
			if (value.Equals(expected))
			{
				throw new ElementException(index, message);
			}
			return value;
		}

		public static T ThrowIfOutOfBounds<T>(int index, string message, T[] array, int elementIndex) where T : class
		{
			if (array == null || array.Length <= elementIndex)
			{
				throw new ElementException(index, message);
			}
			return array[elementIndex];
		}

		public static T ThrowIfNull<T>(int index, string message, T value) where T : class
		{
			if (value == null)
			{
				throw new ElementException(index, message);
			}
			return value;
		}

		public static void TryCatchThrow(string message, Action action)
		{
			try
			{
				action?.Invoke();
			}
			catch (Exception innerException)
			{
				throw new FieldException(message, innerException);
			}
		}
	}
	public class RemoveClone : MonoBehaviour
	{
		public void Awake()
		{
			string name = ((Object)this).name;
			((Object)this).name = name.Substring(0, name.Length - 7);
		}
	}
	public class FieldException : Exception
	{
		public FieldException(string message, Exception innerException)
			: base(message, innerException)
		{
		}
	}
	public class ElementException : Exception
	{
		public int Index { get; }

		public ElementException(int index, string message)
			: base(message)
		{
			Index = index;
		}
	}
	public class InsertBones : MonoBehaviour
	{
		private readonly List<SkinnedMeshRenderer> modifiedRenderers = new List<SkinnedMeshRenderer>();

		public List<string> rendererPaths = new List<string>();

		public List<Transform> newBones = new List<Transform>();

		public string afterPath;

		public void Awake()
		{
			Transform transform = ((Component)((Component)this).GetComponentInParent<ModelSkinController>()).transform;
			Transform value = ((Component)transform).transform.Find(afterPath);
			foreach (string rendererPath in rendererPaths)
			{
				Transform obj = transform.Find(rendererPath);
				SkinnedMeshRenderer val = ((obj != null) ? ((Component)obj).GetComponent<SkinnedMeshRenderer>() : null);
				if (Object.op_Implicit((Object)(object)val))
				{
					Transform[] array = val.bones;
					int num = Array.IndexOf(array, value) + 1;
					if (num != 0)
					{
						Array.Resize(ref array, array.Length + newBones.Count);
						Array.Copy(array, num, array, num + newBones.Count, array.Length - newBones.Count - num);
						newBones.CopyTo(array, num);
						val.bones = array;
						modifiedRenderers.Add(val);
					}
				}
			}
		}

		public void OnDestroy()
		{
			foreach (SkinnedMeshRenderer modifiedRenderer in modifiedRenderers)
			{
				if (Object.op_Implicit((Object)(object)modifiedRenderer))
				{
					Transform[] array = modifiedRenderer.bones;
					int num = Array.IndexOf(array, ((Component)this).transform);
					Array.Copy(array, num + newBones.Count, array, num, array.Length - num - newBones.Count);
					Array.Resize(ref array, array.Length - newBones.Count);
					modifiedRenderer.bones = array;
				}
			}
			modifiedRenderers.Clear();
		}
	}
	public class AddDynamicColliders : MonoBehaviour
	{
		public List<PathPair> pathPairs = new List<PathPair>();

		public void Awake()
		{
			Transform transform = ((Component)((Component)this).GetComponentInParent<ModelSkinController>()).transform;
			DynamicBone val3 = default(DynamicBone);
			DynamicBoneCollider item = default(DynamicBoneCollider);
			foreach (PathPair pathPair in pathPairs)
			{
				Transform val = ((pathPair.path1 == string.Empty) ? ((Component)this).transform : ((Component)this).transform.Find(pathPair.path1));
				Transform val2 = transform.Find(pathPair.path2);
				if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val2) && ((Component)val).TryGetComponent<DynamicBone>(ref val3) && ((Component)val2).TryGetComponent<DynamicBoneCollider>(ref item))
				{
					val3.m_Colliders.Add(item);
				}
			}
		}
	}
	[Serializable]
	public struct PathPair
	{
		public string path1;

		public string path2;
	}
}

NagisaCaptainVoiceover.dll

Decompiled a day ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BaseVoiceoverLib;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using Microsoft.CodeAnalysis;
using NagisaCaptainVoiceover.Components;
using NagisaCaptainVoiceover.Modules;
using R2API;
using RiskOfOptions;
using RiskOfOptions.Options;
using RoR2;
using RoR2.ContentManagement;
using UnityEngine;
using UnityEngine.AddressableAssets;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("NagisaCaptainVoiceover")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+0c02c393d391d22e2bf07ff5f7efb1157eb39d6b")]
[assembly: AssemblyProduct("NagisaCaptainVoiceover")]
[assembly: AssemblyTitle("NagisaCaptainVoiceover")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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]
	[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;
		}
	}
}
namespace NagisaCaptainVoiceover
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.Schale.NagisaCaptainVoiceover", "NagisaCaptainVoiceover", "1.0.0")]
	public class NagisaCaptainVoiceoverPlugin : BaseUnityPlugin
	{
		public class NSEInfo
		{
			public NetworkSoundEventDef nse;

			public uint akId = 0u;

			public string eventName = string.Empty;

			public NSEInfo(NetworkSoundEventDef source)
			{
				nse = source;
				akId = source.akId;
				eventName = source.eventName;
			}

			private void DisableSound()
			{
				nse.akId = 0u;
				nse.eventName = string.Empty;
			}

			private void EnableSound()
			{
				nse.akId = akId;
				nse.eventName = eventName;
			}

			public void ValidateParams()
			{
				if (akId == 0)
				{
					akId = nse.akId;
				}
				if (eventName == string.Empty)
				{
					eventName = nse.eventName;
				}
				if (!enableVoicelines.Value)
				{
					DisableSound();
				}
				else
				{
					EnableSound();
				}
			}
		}

		public static ConfigEntry<bool> enableVoicelines;

		public static bool playedSeasonalVoiceline = false;

		public static AssetBundle assetBundle;

		public static SurvivorDef survivorDef = Addressables.LoadAssetAsync<SurvivorDef>((object)"RoR2/Base/Captain/Captain.asset").WaitForCompletion();

		public static ConfigEntry<KeyboardShortcut> btnPeroro;

		public static ConfigEntry<KeyboardShortcut> btnGokigenyou;

		public static ConfigEntry<KeyboardShortcut> btnHurt;

		public static ConfigEntry<KeyboardShortcut> btnLaugh;

		public static ConfigEntry<KeyboardShortcut> btnSneeze;

		public static ConfigEntry<KeyboardShortcut> btnEx1;

		public static ConfigEntry<KeyboardShortcut> btnEx2;

		public static ConfigEntry<KeyboardShortcut> btnEx3;

		public static ConfigEntry<KeyboardShortcut> btnExLv1;

		public static ConfigEntry<KeyboardShortcut> btnExLv2;

		public static ConfigEntry<KeyboardShortcut> btnExLv3;

		public static ConfigEntry<KeyboardShortcut> btnThanks;

		public static ConfigEntry<KeyboardShortcut> btnTitle;

		public static ConfigEntry<KeyboardShortcut> btnCommon;

		public static ConfigEntry<KeyboardShortcut> btnYawn;

		public static List<NSEInfo> nseList = new List<NSEInfo>();

		public void Awake()
		{
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: Expected O, but got Unknown
			//IL_0099: Expected O, but got Unknown
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Expected O, but got Unknown
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Expected O, but got Unknown
			//IL_010f: 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_011f: Expected O, but got Unknown
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Expected O, but got Unknown
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0169: Expected O, but got Unknown
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0183: Unknown result type (might be due to invalid IL or missing references)
			//IL_018e: Expected O, but got Unknown
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b3: Expected O, but got Unknown
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d8: Expected O, but got Unknown
			//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fd: Expected O, but got Unknown
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_0222: Expected O, but got Unknown
			//IL_0237: Unknown result type (might be due to invalid IL or missing references)
			//IL_023c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0247: Expected O, but got Unknown
			//IL_025c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0261: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: Expected O, but got Unknown
			//IL_0281: Unknown result type (might be due to invalid IL or missing references)
			//IL_0286: Unknown result type (might be due to invalid IL or missing references)
			//IL_0291: Expected O, but got Unknown
			//IL_02a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b6: Expected O, but got Unknown
			//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_02db: Expected O, but got Unknown
			Files.PluginInfo = ((BaseUnityPlugin)this).Info;
			RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(OnLoad));
			new Content().Initialize();
			using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("NagisaCaptainVoiceover.nagisacaptainvoiceoverbundle"))
			{
				assetBundle = AssetBundle.LoadFromStream(stream);
			}
			SoundBanks.Init();
			InitNSE();
			enableVoicelines = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Settings", "Enable Voicelines"), true, new ConfigDescription("Enable voicelines when using the Nagisa Captain Skin.", (AcceptableValueBase)null, Array.Empty<object>()));
			enableVoicelines.SettingChanged += EnableVoicelines_SettingChanged;
			btnHurt = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "Hurt"), KeyboardShortcut.Empty, (ConfigDescription)null);
			btnThanks = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "Thanks"), KeyboardShortcut.Empty, (ConfigDescription)null);
			btnCommon = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "Common Skill"), KeyboardShortcut.Empty, (ConfigDescription)null);
			btnSneeze = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "Sneeze"), KeyboardShortcut.Empty, (ConfigDescription)null);
			btnLaugh = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "Laugh"), KeyboardShortcut.Empty, (ConfigDescription)null);
			btnYawn = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "Yawn"), KeyboardShortcut.Empty, (ConfigDescription)null);
			btnGokigenyou = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "Gokigenyou"), KeyboardShortcut.Empty, (ConfigDescription)null);
			btnTitle = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "Blue Archive"), KeyboardShortcut.Empty, (ConfigDescription)null);
			btnEx1 = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "EX 1"), KeyboardShortcut.Empty, (ConfigDescription)null);
			btnEx2 = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "EX 2"), KeyboardShortcut.Empty, (ConfigDescription)null);
			btnEx3 = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "EX 3"), KeyboardShortcut.Empty, (ConfigDescription)null);
			btnExLv1 = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "EX Level 1"), KeyboardShortcut.Empty, (ConfigDescription)null);
			btnExLv2 = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "EX Level 2"), KeyboardShortcut.Empty, (ConfigDescription)null);
			btnExLv3 = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "EX Level 3"), KeyboardShortcut.Empty, (ConfigDescription)null);
			btnPeroro = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>(new ConfigDefinition("Keybinds", "Peroro"), KeyboardShortcut.Empty, (ConfigDescription)null);
			if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"))
			{
				RiskOfOptionsCompat();
			}
		}

		private void OnLoad()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Expected O, but got Unknown
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Expected O, but got Unknown
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Expected O, but got Unknown
			SkinDef val = null;
			SkinDef[] array = SkinCatalog.FindSkinsForBody(BodyCatalog.FindBodyIndex("CaptainBody"));
			SkinDef[] array2 = array;
			foreach (SkinDef val2 in array2)
			{
				if (((Object)val2).name == "DefKirifujiCaptain")
				{
					val = val2;
					break;
				}
			}
			if (!Object.op_Implicit((Object)(object)val))
			{
				Debug.LogError((object)"NagisaCaptainVoiceover: Nagisa Captain SkinDef not found. Voicelines will not work!");
			}
			else
			{
				VoiceoverInfo val3 = new VoiceoverInfo(typeof(NagisaCaptainVoiceoverComponent), val, "CaptainBody");
				val3.selectActions = (LobbySelectActions)Delegate.Combine((Delegate?)(object)val3.selectActions, (Delegate?)new LobbySelectActions(NagisaCaptainSelect));
			}
			RefreshNSE();
		}

		private void NagisaCaptainSelect(GameObject mannequinObject)
		{
			if (!enableVoicelines.Value)
			{
				return;
			}
			bool flag = false;
			if (!playedSeasonalVoiceline)
			{
				if ((DateTime.Today.Month == 1 && DateTime.Today.Day == 1) || (DateTime.Today.Month == 12 && DateTime.Today.Day == 31))
				{
					Util.PlaySound("Play_NagisaCaptain_Lobby_Newyear", mannequinObject);
					flag = true;
				}
				else if (DateTime.Today.Month == 7 && DateTime.Today.Day == 4)
				{
					Util.PlaySound("Play_NagisaCaptain_Lobby_bday", mannequinObject);
					flag = true;
				}
				else if (DateTime.Today.Month == 10 && (DateTime.Today.Day == 30 || DateTime.Today.Day == 31))
				{
					Util.PlaySound("Play_NagisaCaptain_Lobby_Halloween", mannequinObject);
					flag = true;
				}
				else if (DateTime.Today.Month == 12 && (DateTime.Today.Day == 24 || DateTime.Today.Day == 25))
				{
					Util.PlaySound("Play_NagisaCaptain_Lobby_xmas", mannequinObject);
					flag = true;
				}
				if (flag)
				{
					playedSeasonalVoiceline = true;
				}
			}
			if (!flag)
			{
				if (Util.CheckRoll(5f, 0f, (CharacterMaster)null))
				{
					Util.PlaySound("Play_NagisaCaptain_Title", mannequinObject);
				}
				else
				{
					Util.PlaySound("Play_NagisaCaptain_Lobby", mannequinObject);
				}
			}
		}

		private void EnableVoicelines_SettingChanged(object sender, EventArgs e)
		{
			RefreshNSE();
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		private void RiskOfOptionsCompat()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Expected O, but got Unknown
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Expected O, but got Unknown
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Expected O, but got Unknown
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Expected O, but got Unknown
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Expected O, but got Unknown
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Expected O, but got Unknown
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Expected O, but got Unknown
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Expected O, but got Unknown
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Expected O, but got Unknown
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Expected O, but got Unknown
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Expected O, but got Unknown
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Expected O, but got Unknown
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Expected O, but got Unknown
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Expected O, but got Unknown
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Expected O, but got Unknown
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(enableVoicelines));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnTitle));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnThanks));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnHurt));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnLaugh));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnSneeze));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnYawn));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnGokigenyou));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnPeroro));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnCommon));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnEx1));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnEx2));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnEx3));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnExLv1));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnExLv2));
			ModSettingsManager.AddOption((BaseOption)new KeyBindOption(btnExLv3));
			ModSettingsManager.SetModIcon(assetBundle.LoadAsset<Sprite>("Nagisa"));
		}

		private void InitNSE()
		{
			NagisaCaptainVoiceoverComponent.nseTitle = RegisterNSE("Play_NagisaCaptain_Title");
			NagisaCaptainVoiceoverComponent.nseLaugh = RegisterNSE("Play_NagisaCaptain_Laugh");
			NagisaCaptainVoiceoverComponent.nseSneeze = RegisterNSE("Play_NagisaCaptain_Sneeze");
			NagisaCaptainVoiceoverComponent.nseGokigenyou = RegisterNSE("Play_NagisaCaptain_Gokigenyou");
			NagisaCaptainVoiceoverComponent.nseCommon = RegisterNSE("Play_NagisaCaptain_CommonSkill");
			NagisaCaptainVoiceoverComponent.nseCommon2 = RegisterNSE("Play_NagisaCaptain_CommonSkill_2");
			NagisaCaptainVoiceoverComponent.nseEx1 = RegisterNSE("Play_NagisaCaptain_Ex_1");
			NagisaCaptainVoiceoverComponent.nseEx2 = RegisterNSE("Play_NagisaCaptain_Ex_2");
			NagisaCaptainVoiceoverComponent.nseEx3 = RegisterNSE("Play_NagisaCaptain_Ex_3");
			NagisaCaptainVoiceoverComponent.nseExLv1 = RegisterNSE("Play_NagisaCaptain_Ex_Lv_1");
			NagisaCaptainVoiceoverComponent.nseExLv2 = RegisterNSE("Play_NagisaCaptain_Ex_Lv_2");
			NagisaCaptainVoiceoverComponent.nseExLv3 = RegisterNSE("Play_NagisaCaptain_Ex_Lv_3");
			NagisaCaptainVoiceoverComponent.nsePeroro = RegisterNSE("Play_NagisaCaptain_Peroro");
			NagisaCaptainVoiceoverComponent.nseThanks = RegisterNSE("Play_NagisaCaptain_Thanks");
			NagisaCaptainVoiceoverComponent.nseHurt = RegisterNSE("Play_NagisaCaptain_Pain");
			NagisaCaptainVoiceoverComponent.nseYawn = RegisterNSE("Play_NagisaCaptain_Yawn");
		}

		private NetworkSoundEventDef RegisterNSE(string eventName)
		{
			NetworkSoundEventDef val = ScriptableObject.CreateInstance<NetworkSoundEventDef>();
			val.eventName = eventName;
			Content.networkSoundEventDefs.Add(val);
			nseList.Add(new NSEInfo(val));
			return val;
		}

		public void RefreshNSE()
		{
			foreach (NSEInfo nse in nseList)
			{
				nse.ValidateParams();
			}
		}
	}
}
namespace NagisaCaptainVoiceover.Modules
{
	public class Content : IContentPackProvider
	{
		internal ContentPack contentPack = new ContentPack();

		public static List<NetworkSoundEventDef> networkSoundEventDefs = new List<NetworkSoundEventDef>();

		public string identifier => "com.Schale.NagisaCaptainVoiceover";

		public void Initialize()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders);
		}

		private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider)
		{
			addContentPackProvider.Invoke((IContentPackProvider)(object)this);
		}

		public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args)
		{
			contentPack.identifier = identifier;
			contentPack.networkSoundEventDefs.Add(networkSoundEventDefs.ToArray());
			args.ReportProgress(1f);
			yield break;
		}

		public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args)
		{
			ContentPack.Copy(contentPack, args.output);
			args.ReportProgress(1f);
			yield break;
		}

		public IEnumerator FinalizeAsync(FinalizeAsyncArgs args)
		{
			args.ReportProgress(1f);
			yield break;
		}
	}
	public static class Files
	{
		public static PluginInfo PluginInfo;

		internal static string assemblyDir => Path.GetDirectoryName(PluginInfo.Location);

		internal static void Init(PluginInfo info)
		{
			PluginInfo = info;
		}

		internal static string GetPathToFile(string folderName, string fileName)
		{
			return Path.Combine(assemblyDir, folderName, fileName);
		}
	}
	public static class SoundBanks
	{
		private static bool initialized;

		public static string SoundBankDirectory => Files.assemblyDir;

		public static void Init()
		{
			if (initialized)
			{
				return;
			}
			initialized = true;
			using Stream stream = new FileStream(SoundBankDirectory + "\\NagisaCaptainSoundbank.bnk", FileMode.Open);
			byte[] array = new byte[stream.Length];
			stream.Read(array, 0, array.Length);
			SoundBanks.Add(array);
		}
	}
}
namespace NagisaCaptainVoiceover.Components
{
	public class NagisaCaptainVoiceoverComponent : BaseVoiceoverComponent
	{
		public static NetworkSoundEventDef nseExLv1;

		public static NetworkSoundEventDef nseExLv2;

		public static NetworkSoundEventDef nseExLv3;

		public static NetworkSoundEventDef nseCommon;

		public static NetworkSoundEventDef nseCommon2;

		public static NetworkSoundEventDef nseEx1;

		public static NetworkSoundEventDef nseEx2;

		public static NetworkSoundEventDef nseEx3;

		public static NetworkSoundEventDef nseGokigenyou;

		public static NetworkSoundEventDef nseLaugh;

		public static NetworkSoundEventDef nseSneeze;

		public static NetworkSoundEventDef nseHurt;

		public static NetworkSoundEventDef nseTitle;

		public static NetworkSoundEventDef nsePeroro;

		public static NetworkSoundEventDef nseThanks;

		public static NetworkSoundEventDef nseYawn;

		private float levelCooldown = 0f;

		private float specialCooldown = 0f;

		private float utilityCooldown = 0f;

		private float secondaryCooldown = 0f;

		private bool acquiredScepter = false;

		protected override void Start()
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			((BaseVoiceoverComponent)this).Start();
			if (Object.op_Implicit((Object)(object)base.inventory) && base.inventory.GetItemCountEffective(BaseVoiceoverComponent.scepterIndex) > 0)
			{
				acquiredScepter = true;
			}
		}

		protected override void FixedUpdate()
		{
			((BaseVoiceoverComponent)this).FixedUpdate();
			if (levelCooldown > 0f)
			{
				levelCooldown -= Time.fixedDeltaTime;
			}
			if (secondaryCooldown > 0f)
			{
				secondaryCooldown -= Time.fixedDeltaTime;
			}
			if (utilityCooldown > 0f)
			{
				utilityCooldown -= Time.fixedDeltaTime;
			}
			if (specialCooldown > 0f)
			{
				specialCooldown -= Time.fixedDeltaTime;
			}
		}

		public override void PlayDeath()
		{
			((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Sneeze", 1f, true);
		}

		public override void PlayHurt(float percentHPLost)
		{
			if (percentHPLost >= 0.1f)
			{
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Pain", 0f, false);
			}
		}

		public override void PlayLevelUp()
		{
			if (!(levelCooldown > 0f))
			{
				bool flag = false;
				if (Random.Range(0, 4) switch
				{
					0 => ((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_LevelUp_1", 3.75f, false), 
					1 => ((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_LevelUp_2", 6.8f, false), 
					2 => ((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_LevelUp_3", 2.9f, false), 
					_ => ((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_LevelUp_4", 4.6f, false), 
				})
				{
					levelCooldown = 60f;
				}
			}
		}

		public override void PlaySpawn()
		{
			switch (Random.Range(0, 3))
			{
			case 0:
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Formation_1", 5.3f, true);
				break;
			case 1:
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Formation_2", 2.5f, true);
				break;
			default:
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Formation_3", 3.1f, true);
				break;
			}
		}

		public override void PlayTeleporterFinish()
		{
			switch (Random.Range(0, 3))
			{
			case 0:
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_TP_Clear_1", 3.1f, false);
				break;
			case 1:
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_TP_Clear_2", 2.95f, false);
				break;
			default:
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_TP_Clear_3", 2f, false);
				break;
			}
		}

		public override void PlayTeleporterStart()
		{
			switch (Random.Range(0, 3))
			{
			case 0:
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Ex_1", 3.35f, false);
				break;
			case 1:
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Ex_2", 4.9f, false);
				break;
			default:
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Ex_3", 3f, false);
				break;
			}
		}

		public override void PlayUtilityAuthority(GenericSkill skill)
		{
			if (!(utilityCooldown > 0f))
			{
				bool flag = false;
				if (Random.Range(0, 3) switch
				{
					0 => ((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseExLv1, 1.45f, false), 
					1 => ((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseExLv2, 2.7f, false), 
					_ => ((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseExLv3, 2.6f, false), 
				})
				{
					utilityCooldown = 30f;
				}
			}
		}

		public override void PlayVictory()
		{
			((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Victory", 9.5f, true);
		}

		protected override void Inventory_onItemAddedClient(ItemIndex itemIndex)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Invalid comparison between Unknown and I4
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Invalid comparison between Unknown and I4
			((BaseVoiceoverComponent)this).Inventory_onItemAddedClient(itemIndex);
			if ((int)BaseVoiceoverComponent.scepterIndex != -1 && itemIndex == BaseVoiceoverComponent.scepterIndex)
			{
				PlayAcquireScepter();
				return;
			}
			ItemDef itemDef = ItemCatalog.GetItemDef(itemIndex);
			if ((Object)(object)itemDef == (Object)(object)Items.AttackSpeedAndMoveSpeed)
			{
				PlayCoffee();
			}
			else if ((Object)(object)itemDef == (Object)(object)Items.JumpBoost)
			{
				PlayPeroro();
			}
			else if (Object.op_Implicit((Object)(object)itemDef) && (int)itemDef.deprecatedTier == 2)
			{
				PlayAcquireLegendary();
			}
		}

		public override void PlaySecondaryAuthority(GenericSkill skill)
		{
			if (!(secondaryCooldown > 0f))
			{
				if (skill.skillName.Contains("SupplyDrop"))
				{
					Debug.Log((object)"Suppressed Beacon");
				}
				else if (((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseCommon2, 0.9f, false))
				{
					secondaryCooldown = 30f;
				}
			}
		}

		public override void PlaySpecialAuthority(GenericSkill skill)
		{
			if (!(specialCooldown > 0f) && ((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseCommon, 1.9f, false))
			{
				specialCooldown = 30f;
			}
		}

		public void PlayAcquireScepter()
		{
			if (!acquiredScepter)
			{
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_ExWeapon_Get", 20.5f, true);
				acquiredScepter = true;
			}
		}

		public void PlayCoffee()
		{
			((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Coffee", 4.5f, false);
		}

		public void PlayPeroro()
		{
			((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Peroro", 6.5f, false);
		}

		public void PlayAcquireLegendary()
		{
			switch (Random.Range(0, 4))
			{
			case 0:
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Relationship_1", 8.9f, false);
				break;
			case 1:
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Relationship_2", 7.05f, false);
				break;
			case 2:
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Relationship_3", 5.55f, false);
				break;
			default:
				((BaseVoiceoverComponent)this).TryPlaySound("Play_NagisaCaptain_Relationship_4", 8.05f, false);
				break;
			}
		}

		protected override void CheckInputs()
		{
			if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnTitle))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseTitle, 1.6f, false);
			}
			else if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnThanks))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseThanks, 1.1f, false);
			}
			else if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnHurt))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseHurt, 0.1f, false);
			}
			else if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnLaugh))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseLaugh, 1.1f, false);
			}
			else if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnSneeze))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseSneeze, 2.2f, false);
			}
			else if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnPeroro))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nsePeroro, 6.5f, false);
			}
			else if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnGokigenyou))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseGokigenyou, 0.7f, false);
			}
			else if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnEx1))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseEx1, 3.35f, false);
			}
			else if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnEx2))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseEx2, 4.9f, false);
			}
			else if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnEx3))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseEx3, 3f, false);
			}
			else if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnExLv1))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseExLv1, 1.45f, false);
			}
			else if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnExLv2))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseExLv2, 2.7f, false);
			}
			else if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnExLv3))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseExLv3, 2.6f, false);
			}
			else if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnCommon))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseCommon, 1.9f, false);
			}
			else if (Utils.GetKeyPressed(NagisaCaptainVoiceoverPlugin.btnYawn))
			{
				((BaseVoiceoverComponent)this).TryPlayNetworkSound(nseYawn, 5.2f, false);
			}
		}

		public override bool ComponentEnableVoicelines()
		{
			return NagisaCaptainVoiceoverPlugin.enableVoicelines.Value;
		}
	}
}