Decompiled source of TF2Emotes v1.3.0

TitanFall2Emotes.dll

Decompiled 4 months 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 BepInEx;
using BepInEx.Configuration;
using EmotesAPI;
using Microsoft.CodeAnalysis;
using R2API;
using R2API.Networking;
using R2API.Networking.Interfaces;
using R2API.Utils;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;

[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("TitanFall2Emotes")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+236c1eb710febc01513bb47af860b0406a555218")]
[assembly: AssemblyProduct("TitanFall2Emotes")]
[assembly: AssemblyTitle("TitanFall2Emotes")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.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.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace TitanFall2Emotes
{
	public static class Assets
	{
		private enum ResourceType
		{
			AssetBundle,
			SoundBank,
			DisplayRuleSetOverride,
			Other
		}

		private static readonly string[] KnownExtensions = new string[5] { "png", "exe", "txt", "xcf", "bat" };

		private static readonly List<AssetBundle> AssetBundles = new List<AssetBundle>();

		private static readonly Dictionary<string, int> AssetIndices = new Dictionary<string, int>();

		private static readonly List<string> SoundBanksToLoad = new List<string>();

		private static readonly List<string> FoundSoundBanks = new List<string>();

		private static readonly Dictionary<string, string> DisplayRuleSetOverrides = new Dictionary<string, string>();

		private static Material _prefab;

		public static Material LoadMaterial(string texture)
		{
			Material val = Object.Instantiate<Material>(Assets.Load<Material>("general/basehgstandard.mat"));
			val.SetTexture("_MainTex", Assets.Load<Texture>(texture));
			((Object)val).name = texture;
			return val;
		}

		public static Material RobloxMaterial(string texture)
		{
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)_prefab))
			{
				_prefab = Object.Instantiate<Material>(((Renderer)Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Golem/GolemBody.prefab").WaitForCompletion().GetComponentInChildren<SkinnedMeshRenderer>()).material);
			}
			Material val = Object.Instantiate<Material>(_prefab);
			val.mainTexture = Assets.Load<Texture>(texture);
			val.SetColor("_Color", Color.white);
			val.SetFloat("_EmPower", 0f);
			val.SetColor("_EmColor", Color.white);
			val.SetTexture("_EmTex", (Texture)null);
			val.SetTexture("_FresnelRamp", (Texture)null);
			val.SetFloat("_NormalStrength", 0.5f);
			val.SetTexture("_NormalTex", (Texture)null);
			((Object)val).name = texture;
			return val;
		}

		public static Material CopyMaterial(Texture texture)
		{
			//IL_0051: 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_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)_prefab))
			{
				_prefab = Object.Instantiate<Material>(((Renderer)Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/CommandoBody.prefab").WaitForCompletion().GetComponentInChildren<SkinnedMeshRenderer>()).material);
			}
			Material val = Object.Instantiate<Material>(_prefab);
			val.mainTexture = texture;
			val.SetColor("_Color", Color.white);
			val.SetFloat("_EmPower", 0f);
			val.SetColor("_EmColor", Color.white);
			val.SetTexture("_EmTex", (Texture)null);
			val.SetFloat("_NormalStrength", 0.5f);
			val.SetTexture("_NormalTex", (Texture)null);
			return val;
		}

		internal static void PopulateAssets()
		{
			string[] manifestResourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames();
			string[] array = manifestResourceNames;
			foreach (string text in array)
			{
				switch (GetResourceType(text))
				{
				case ResourceType.AssetBundle:
					LoadAssetBundle(text);
					break;
				case ResourceType.SoundBank:
					FoundSoundBanks.Add(text);
					break;
				case ResourceType.DisplayRuleSetOverride:
					DisplayRuleSetOverrides.Add(GetFileName(text).Split('.')[0], text);
					break;
				}
			}
		}

		internal static void LoadSoundBanks()
		{
			foreach (string foundSoundBank in FoundSoundBanks)
			{
				int num = SoundBanksToLoad.IndexOf(GetFileName(foundSoundBank));
				if (num >= 0)
				{
					LoadSoundBank(foundSoundBank);
					SoundBanksToLoad.RemoveAt(num);
				}
			}
		}

		private static string GetFileName(string resource)
		{
			string[] array = resource.Split('.');
			return array[^2] + "." + array[^1];
		}

		internal static void AddSoundBank(string name)
		{
			SoundBanksToLoad.Add(name ?? "");
		}

		private static ResourceType GetResourceType(string resourceName)
		{
			string[] array = resourceName.Split('.');
			if (array.Length == 0)
			{
				throw new Exception("Invalid asset found: " + resourceName);
			}
			string text = array[^1];
			if (text == "bnk")
			{
				return ResourceType.SoundBank;
			}
			if (text == "drso")
			{
				return ResourceType.DisplayRuleSetOverride;
			}
			if (Array.IndexOf(KnownExtensions, text) >= 0)
			{
				return ResourceType.Other;
			}
			return ResourceType.AssetBundle;
		}

		private static void LoadAssetBundle(string location)
		{
			using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(location);
			AssetBundle val = AssetBundle.LoadFromStream(stream);
			int count = AssetBundles.Count;
			AssetBundles.Add(val);
			string[] allAssetNames = val.GetAllAssetNames();
			foreach (string text in allAssetNames)
			{
				string text2 = text.ToLowerInvariant();
				if (text2.StartsWith("assets/"))
				{
					text2 = text2.Remove(0, "assets/".Length);
				}
				AssetIndices[text2] = count;
			}
			DebugClass.Log((object)("Loaded AssetBundle: " + location));
		}

		private static void LoadSoundBank(string location)
		{
			using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(location);
			byte[] array = new byte[stream.Length];
			stream.Read(array, 0, array.Length);
			SoundBanks.Add(array);
			DebugClass.Log((object)("Loaded SoundBank: " + location));
		}

		[Obsolete("AssetBundles are loaded automatically, calling this does literally nothing")]
		public static void AddBundle(string assetBundleLocation)
		{
		}

		public static T Load<T>(string assetName) where T : Object
		{
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			if (assetName.Contains(":"))
			{
				string[] array = assetName.Split(':');
				assetName = array[1].ToLowerInvariant();
			}
			if (assetName.ToLowerInvariant().StartsWith("assets/"))
			{
				assetName = assetName.Remove(0, "assets/".Length);
			}
			int index = AssetIndices[assetName.ToLowerInvariant()];
			T val = AssetBundles[index].LoadAsset<T>("assets/" + assetName);
			object obj = val;
			Material val2 = (Material)((obj is Material) ? obj : null);
			if (val2 != null && ((Object)val2.shader).name.StartsWith("MoistToolkit/StubbedShader"))
			{
				val2.shader = Addressables.LoadAssetAsync<Shader>((object)("RoR2/Base/Shaders/" + ((Object)val2.shader).name.Substring(27) + ".shader")).WaitForCompletion();
			}
			return val;
		}

		public static Stream LoadDisplayRuleSetOverride(string overrideName)
		{
			string name = DisplayRuleSetOverrides[overrideName];
			return Assembly.GetExecutingAssembly().GetManifestResourceStream(name);
		}
	}
	internal class ChairHandler : MonoBehaviour
	{
		internal GameObject chair;

		private bool check = true;

		internal Vector3 pos;

		internal Vector3 rot;

		internal Vector3 scal;

		private bool check2 = false;

		private bool check3 = false;

		internal BoneMapper mapper;

		private float timer = 0f;

		private int whenToEmote = 0;

		private void Start()
		{
			Material[] materials = ((Renderer)((Component)this).GetComponentInChildren<SkinnedMeshRenderer>()).materials;
			foreach (Material val in materials)
			{
				val.shader = TF2Plugin.defaultShader;
				val.shaderKeywords = new string[1] { "DITHER" };
			}
			whenToEmote = Random.Range(15, 25);
		}

		private void Update()
		{
			//IL_0224: Unknown result type (might be due to invalid IL or missing references)
			//IL_023b: 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_025f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0269: Unknown result type (might be due to invalid IL or missing references)
			//IL_026e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02be: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0304: Unknown result type (might be due to invalid IL or missing references)
			//IL_030a: Unknown result type (might be due to invalid IL or missing references)
			//IL_031a: Unknown result type (might be due to invalid IL or missing references)
			if (check)
			{
				timer += Time.deltaTime;
			}
			if (timer > (float)whenToEmote)
			{
				timer = 0f;
				whenToEmote = Random.Range(15, 25);
				switch (Random.Range(0, 3))
				{
				case 0:
					mapper.preserveParent = true;
					mapper.preserveProps = true;
					DebugClass.Log((object)"burp");
					mapper.PlayAnim("engiRanchoBurp", 0);
					AkSoundEngine.PostEvent("Play_RanchoBurp", ((Component)mapper).gameObject);
					break;
				case 1:
					mapper.preserveParent = true;
					mapper.preserveProps = true;
					DebugClass.Log((object)"bigDrink");
					mapper.PlayAnim("engiRanchoBigDrink", 0);
					AkSoundEngine.PostEvent("Play_RanchoLong", ((Component)mapper).gameObject);
					((Component)this).GetComponentInChildren<Animator>().SetBool("BigDrink", true);
					break;
				case 2:
					mapper.preserveParent = true;
					mapper.preserveProps = true;
					DebugClass.Log((object)"quickDrink");
					mapper.PlayAnim("engiRanchoQuickDrink", 0);
					AkSoundEngine.PostEvent("Play_RanchoQuick", ((Component)mapper).gameObject);
					((Component)this).GetComponentInChildren<Animator>().SetBool("SmallDrink", true);
					break;
				}
			}
			else if (timer > 3f)
			{
				((Component)this).GetComponentInChildren<Animator>().SetBool("BigDrink", false);
				((Component)this).GetComponentInChildren<Animator>().SetBool("SmallDrink", false);
			}
			if (check && !Object.op_Implicit((Object)(object)chair))
			{
				check = false;
				((MonoBehaviour)this).StartCoroutine(spinThenDestroy());
				((Component)this).GetComponentInChildren<Animator>().SetBool("Breaking", true);
				((Component)this).gameObject.transform.SetParent((Transform)null);
				((Component)this).gameObject.transform.position = pos;
				((Component)this).gameObject.transform.localEulerAngles = rot;
				((Component)this).gameObject.transform.localScale = scal;
				scal *= 1.333f;
				AkSoundEngine.PostEvent("Stop_Rancho", ((Component)mapper).gameObject);
				AkSoundEngine.PostEvent("Play_RanchoClose", ((Component)this).gameObject);
			}
			if (check3)
			{
				((Component)this).gameObject.transform.localScale = Vector3.Slerp(((Component)this).gameObject.transform.localScale, Vector3.zero, Time.deltaTime * 5f);
			}
			else if (check2)
			{
				((Component)this).gameObject.transform.localScale = Vector3.Slerp(((Component)this).gameObject.transform.localScale, scal, Time.deltaTime * 30f);
			}
		}

		private IEnumerator spinThenDestroy()
		{
			yield return (object)new WaitForSeconds(3.5f);
			check2 = true;
			yield return (object)new WaitForSeconds(0.15f);
			check3 = true;
			yield return (object)new WaitForSeconds(1f);
			Object.Destroy((Object)(object)((Component)this).gameObject);
		}
	}
	internal class Conga : MonoBehaviour
	{
		public string akSound;

		public static void StartConga(BoneMapper joinerMapper, int spot)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			joinerMapper.PlayAnim(TF2Plugin.Conga_Emotes[spot], 0);
			GameObject val = new GameObject();
			val.transform.parent = ((Component)joinerMapper).gameObject.transform;
			val.transform.localPosition = Vector3.zero;
			string text = "";
			switch (spot)
			{
			case 0:
				text = "Conga_Demo";
				break;
			case 1:
				text = "Conga_Engi";
				break;
			case 2:
				text = "Conga_Heavy";
				break;
			case 3:
				text = "Conga_Medic";
				break;
			case 4:
				text = "Conga_Pyro";
				break;
			case 5:
				text = "Conga_Scout";
				break;
			case 6:
				text = "Conga_Sniper";
				break;
			case 7:
				text = "Conga_Soldier";
				break;
			case 8:
				text = "Conga_Spy";
				break;
			}
			val.AddComponent<Conga>().akSound = text;
			joinerMapper.props.Add(val);
			joinerMapper.SetAutoWalk(1.2f, true);
		}

		private void Start()
		{
			AkSoundEngine.PostEvent(akSound, ((Component)this).gameObject);
		}

		private void OnDestroy()
		{
			AkSoundEngine.StopAll(((Component)this).gameObject);
		}
	}
	internal class Flip : MonoBehaviour
	{
		public int charType;

		public static void FlipWait(BoneMapper joinerMapper, int spot)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Expected O, but got Unknown
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//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)
			joinerMapper.PlayAnim(TF2Plugin.Flip_Wait_Emotes[spot], 0);
			joinerMapper.props.Add(new GameObject());
			joinerMapper.props[0].AddComponent<Flip>().charType = spot;
			GameObject val = new GameObject();
			((Object)val).name = "Flip_WaitProp";
			joinerMapper.props.Add(val);
			val.transform.localPosition = ((Component)joinerMapper).transform.position;
			val.transform.localEulerAngles = ((Component)joinerMapper).transform.eulerAngles;
			val.transform.localScale = Vector3.one;
			joinerMapper.AssignParentGameObject(val, true, true, true, true, false);
		}

		public static void Flip_Flip(BoneMapper joinerMapper, int spot, BoneMapper hostJoinerMapper)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: 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_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: 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_00da: Unknown result type (might be due to invalid IL or missing references)
			joinerMapper.PlayAnim(TF2Plugin.Flip_Flip_Emotes[spot], 0);
			GameObject val = new GameObject();
			((Object)val).name = "Flip_FlipProp";
			joinerMapper.props.Add(val);
			Vector3 localScale = ((Component)hostJoinerMapper).transform.parent.localScale;
			((Component)hostJoinerMapper).transform.parent.localScale = Vector3.one;
			val.transform.SetParent(((Component)hostJoinerMapper).transform.parent);
			val.transform.localPosition = new Vector3(0f, 0f, 1.95f);
			val.transform.localEulerAngles = new Vector3(0f, 180f, 0f);
			val.transform.localScale = Vector3.one;
			val.transform.SetParent((Transform)null);
			((Component)hostJoinerMapper).transform.parent.localScale = localScale;
			joinerMapper.AssignParentGameObject(val, true, true, true, true, true);
		}

		public static void Flip_Throw(BoneMapper joinerMapper, int spot, BoneMapper hostJoinerMapper)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			joinerMapper.PlayAnim(TF2Plugin.Flip_Throw_Emotes[spot], 0);
			GameObject val = new GameObject();
			((Object)val).name = "Flip_ThrowProp";
			joinerMapper.props.Add(val);
			val.transform.localPosition = ((Component)joinerMapper).transform.position;
			val.transform.localEulerAngles = ((Component)joinerMapper).transform.eulerAngles;
			val.transform.localScale = Vector3.one;
			joinerMapper.AssignParentGameObject(val, true, true, true, true, false);
		}
	}
	internal class Kazotsky : MonoBehaviour
	{
		public static void StartKazotsky(BoneMapper joinerMapper, int spot)
		{
			joinerMapper.PlayAnim(TF2Plugin.KazotskyKick_Emotes[spot], 0);
			joinerMapper.SetAutoWalk(2f, true, false);
		}
	}
	internal class Laugh : MonoBehaviour
	{
		public static void PlayLaugh(BoneMapper joinerMapper, int spot)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			joinerMapper.PlayAnim(TF2Plugin.Laugh_Emotes[spot], 0);
			GameObject val = new GameObject();
			((Object)val).name = "Laugh_HaltProp";
			joinerMapper.props.Add(val);
			val.transform.localPosition = ((Component)joinerMapper).transform.position;
			val.transform.localEulerAngles = ((Component)joinerMapper).transform.eulerAngles;
			val.transform.localScale = Vector3.one;
			joinerMapper.AssignParentGameObject(val, true, true, true, true, false);
		}
	}
	internal class RockPaperScissors : MonoBehaviour
	{
		public int charType;

		public static void RPSStart(BoneMapper joinerMapper, int spot)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Expected O, but got Unknown
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//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)
			joinerMapper.PlayAnim(TF2Plugin.RPS_Start_Emotes[spot], 0);
			joinerMapper.props.Add(new GameObject());
			joinerMapper.props[0].AddComponent<RockPaperScissors>().charType = spot;
			GameObject val = new GameObject();
			((Object)val).name = "RPS_StartProp";
			joinerMapper.props.Add(val);
			val.transform.localPosition = ((Component)joinerMapper).transform.position;
			val.transform.localEulerAngles = ((Component)joinerMapper).transform.eulerAngles;
			val.transform.localScale = Vector3.one;
			joinerMapper.AssignParentGameObject(val, true, true, false, false, false);
		}

		public static void RPSWin(BoneMapper joinerMapper, int spot, BoneMapper hostJoinerMapper, TeamIndex joinerIndex, TeamIndex hostIndex)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: 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_0253: Unknown result type (might be due to invalid IL or missing references)
			//IL_0263: Unknown result type (might be due to invalid IL or missing references)
			joinerMapper.PlayAnim(TF2Plugin.RPS_Win_Emotes[spot], 0);
			GameObject val = new GameObject();
			((Object)val).name = "RPS_WinProp";
			joinerMapper.props.Add(val);
			if ((Object)(object)hostJoinerMapper != (Object)(object)joinerMapper)
			{
				val.transform.SetParent(((Component)hostJoinerMapper).transform);
				Vector3 lossyScale = ((Component)hostJoinerMapper).transform.lossyScale;
				val.transform.localPosition = new Vector3(0f, 0f, 2.5f / lossyScale.z);
				val.transform.localEulerAngles = new Vector3(0f, 180f, 0f);
				val.transform.localScale = Vector3.one;
				joinerMapper.AssignParentGameObject(val, true, true, false, false, true);
			}
			else
			{
				val.transform.localPosition = ((Component)joinerMapper).transform.position;
				val.transform.localEulerAngles = ((Component)joinerMapper).transform.eulerAngles;
				val.transform.localScale = Vector3.one;
				joinerMapper.AssignParentGameObject(val, true, true, false, false, false);
			}
			string text = "Red";
			if (joinerIndex != hostIndex)
			{
				text = "Blu";
				TF2Plugin.Instance.KillAfterSecondsNotIEnumerator(hostJoinerMapper, 6.5f);
			}
			int count = joinerMapper.props.Count;
			switch (spot % 3)
			{
			case 0:
				joinerMapper.props.Add(Object.Instantiate<GameObject>(Assets.Load<GameObject>("@BadAssEmotes_badassemotes:Assets/RPS/" + text + "_Rock_Win.prefab")));
				break;
			case 1:
				joinerMapper.props.Add(Object.Instantiate<GameObject>(Assets.Load<GameObject>("@BadAssEmotes_badassemotes:Assets/RPS/" + text + "_Paper_Win.prefab")));
				break;
			case 2:
				joinerMapper.props.Add(Object.Instantiate<GameObject>(Assets.Load<GameObject>("@BadAssEmotes_badassemotes:Assets/RPS/" + text + "_Scissors_Win.prefab")));
				break;
			}
			joinerMapper.props[count].transform.SetParent(joinerMapper.parentGameObject.transform);
			joinerMapper.props[count].transform.localEulerAngles = Vector3.zero;
			joinerMapper.props[count].transform.localPosition = new Vector3(0f, 2.5f * joinerMapper.props[count].transform.lossyScale.y, 0f);
			joinerMapper.ScaleProps();
		}

		public static void RPSLose(BoneMapper joinerMapper, int spot, BoneMapper hostJoinerMapper, TeamIndex joinerIndex, TeamIndex hostIndex)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: 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_0253: Unknown result type (might be due to invalid IL or missing references)
			//IL_0263: Unknown result type (might be due to invalid IL or missing references)
			joinerMapper.PlayAnim(TF2Plugin.RPS_Loss_Emotes[spot], 0);
			GameObject val = new GameObject();
			((Object)val).name = "RPS_LossProp";
			joinerMapper.props.Add(val);
			if ((Object)(object)hostJoinerMapper != (Object)(object)joinerMapper)
			{
				val.transform.SetParent(((Component)hostJoinerMapper).transform);
				Vector3 lossyScale = ((Component)hostJoinerMapper).transform.lossyScale;
				val.transform.localPosition = new Vector3(0f, 0f, 2.5f / lossyScale.z);
				val.transform.localEulerAngles = new Vector3(0f, 180f, 0f);
				val.transform.localScale = Vector3.one;
				joinerMapper.AssignParentGameObject(val, true, true, false, false, true);
			}
			else
			{
				val.transform.localPosition = ((Component)joinerMapper).transform.position;
				val.transform.localEulerAngles = ((Component)joinerMapper).transform.eulerAngles;
				val.transform.localScale = Vector3.one;
				joinerMapper.AssignParentGameObject(val, true, true, false, false, false);
			}
			string text = "Red";
			if (joinerIndex != hostIndex)
			{
				text = "Blu";
				TF2Plugin.Instance.KillAfterSecondsNotIEnumerator(joinerMapper, 6.5f);
			}
			int count = joinerMapper.props.Count;
			switch (spot % 3)
			{
			case 0:
				joinerMapper.props.Add(Object.Instantiate<GameObject>(Assets.Load<GameObject>("@BadAssEmotes_badassemotes:Assets/RPS/" + text + "_Rock_Lose.prefab")));
				break;
			case 1:
				joinerMapper.props.Add(Object.Instantiate<GameObject>(Assets.Load<GameObject>("@BadAssEmotes_badassemotes:Assets/RPS/" + text + "_Paper_Lose.prefab")));
				break;
			case 2:
				joinerMapper.props.Add(Object.Instantiate<GameObject>(Assets.Load<GameObject>("@BadAssEmotes_badassemotes:Assets/RPS/" + text + "_Scissors_Lose.prefab")));
				break;
			}
			joinerMapper.props[count].transform.SetParent(joinerMapper.parentGameObject.transform);
			joinerMapper.props[count].transform.localEulerAngles = Vector3.zero;
			joinerMapper.props[count].transform.localPosition = new Vector3(0f, 2.5f * joinerMapper.props[count].transform.lossyScale.y, 0f);
			joinerMapper.ScaleProps();
		}
	}
	public static class Settings
	{
		public static ConfigEntry<bool> RPSisAccurate;

		internal static void SetupConfig()
		{
			ModSettingsManager.SetModIcon(Assets.Load<Sprite>("@ExampleEmotePlugin_example_emotes:assets/icon.png"));
			RPSisAccurate = ((BaseUnityPlugin)TF2Plugin.Instance).Config.Bind<bool>("Gameplay Altering Stuff", "Lore Accurate Rock Paper Scissors", true, "bottom text");
		}

		internal static void SetupROO()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Expected O, but got Unknown
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(RPSisAccurate, new CheckBoxConfig
			{
				restartRequired = false
			}));
		}
	}
	internal class SyncRandomEmoteToClient : INetMessage, ISerializableObject
	{
		private NetworkInstanceId netId;

		private string name;

		private int spot;

		private NetworkInstanceId secondaryNetId;

		public SyncRandomEmoteToClient()
		{
		}

		public SyncRandomEmoteToClient(NetworkInstanceId netId, string name, int spot, NetworkInstanceId secondaryNetId)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: 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_0020: Unknown result type (might be due to invalid IL or missing references)
			this.netId = netId;
			this.name = name;
			this.spot = spot;
			this.secondaryNetId = secondaryNetId;
		}

		public void Deserialize(NetworkReader reader)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: 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)
			netId = reader.ReadNetworkId();
			name = reader.ReadString();
			spot = reader.ReadInt32();
			secondaryNetId = reader.ReadNetworkId();
		}

		public void OnReceived()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01da: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = Util.FindNetworkObject(netId);
			BoneMapper componentInChildren = ((Component)val.GetComponent<ModelLocator>().modelTransform).GetComponentInChildren<BoneMapper>();
			GameObject val2 = Util.FindNetworkObject(secondaryNetId);
			BoneMapper componentInChildren2 = ((Component)val2.GetComponent<ModelLocator>().modelTransform).GetComponentInChildren<BoneMapper>();
			TeamIndex teamIndex = val.GetComponent<TeamComponent>().teamIndex;
			TeamIndex teamIndex2 = val2.GetComponent<TeamComponent>().teamIndex;
			string text = name;
			string text2 = text;
			if (text2 == null)
			{
				return;
			}
			switch (text2.Length)
			{
			case 9:
				switch (text2[5])
				{
				case 't':
					if (text2 == "RPS_Start")
					{
						RockPaperScissors.RPSStart(componentInChildren, spot);
					}
					break;
				case 'W':
					if (text2 == "Flip_Wait")
					{
						Flip.FlipWait(componentInChildren, spot);
					}
					break;
				case 'F':
					if (text2 == "Flip_Flip")
					{
						Flip.Flip_Flip(componentInChildren, spot, componentInChildren2);
					}
					break;
				}
				break;
			case 11:
				switch (text2[0])
				{
				case 'C':
					if (text2 == "Conga_Start")
					{
						Conga.StartConga(componentInChildren, spot);
					}
					break;
				case 'L':
					if (text2 == "Laugh_Start")
					{
						Laugh.PlayLaugh(componentInChildren, spot);
					}
					break;
				}
				break;
			case 7:
				if (text2 == "RPS_Win")
				{
					RockPaperScissors.RPSWin(componentInChildren, spot, componentInChildren2, teamIndex, teamIndex2);
				}
				break;
			case 8:
				if (text2 == "RPS_Loss")
				{
					RockPaperScissors.RPSLose(componentInChildren, spot, componentInChildren2, teamIndex, teamIndex2);
				}
				break;
			case 10:
				if (text2 == "Flip_Throw")
				{
					Flip.Flip_Throw(componentInChildren, spot, componentInChildren2);
				}
				break;
			case 14:
				if (text2 == "Kazotsky_Start")
				{
					Kazotsky.StartKazotsky(componentInChildren, spot);
				}
				break;
			case 12:
			case 13:
				break;
			}
		}

		public void Serialize(NetworkWriter writer)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			writer.Write(netId);
			writer.Write(name);
			writer.Write(spot);
			writer.Write(secondaryNetId);
		}
	}
	internal class SyncRandomEmoteToHost : INetMessage, ISerializableObject
	{
		private NetworkInstanceId netId;

		private string name;

		private int spot;

		private NetworkInstanceId secondaryNetId;

		public SyncRandomEmoteToHost()
		{
		}

		public SyncRandomEmoteToHost(NetworkInstanceId netId, string name, int spot, NetworkInstanceId secondaryNetId)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: 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_0020: Unknown result type (might be due to invalid IL or missing references)
			this.netId = netId;
			this.name = name;
			this.spot = spot;
			this.secondaryNetId = secondaryNetId;
		}

		public void Deserialize(NetworkReader reader)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: 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)
			netId = reader.ReadNetworkId();
			name = reader.ReadString();
			spot = reader.ReadInt32();
			secondaryNetId = reader.ReadNetworkId();
		}

		public void OnReceived()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			NetMessageExtensions.Send((INetMessage)(object)new SyncRandomEmoteToClient(netId, name, spot, secondaryNetId), (NetworkDestination)1);
		}

		public void Serialize(NetworkWriter writer)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			writer.Write(netId);
			writer.Write(name);
			writer.Write(spot);
			writer.Write(secondaryNetId);
		}
	}
	internal class TF2EmoteTracker : MonoBehaviour
	{
		public string currentAnimation = "cumblaster69";

		public bool ignoreNextAnim = false;
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.weliveinasociety.teamfortress2emotes", "TF2Emotes", "1.3.0")]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	[R2APISubmoduleDependency(new string[] { "SoundAPI", "PrefabAPI", "CommandHelper", "ResourcesAPI" })]
	public class TF2Plugin : BaseUnityPlugin
	{
		public static TF2Plugin Instance;

		public const string PluginGUID = "com.weliveinasociety.teamfortress2emotes";

		public const string PluginAuthor = "Nunchuk";

		public const string PluginName = "TF2Emotes";

		public const string PluginVersion = "1.3.0";

		internal static List<string> Conga_Emotes = new List<string>();

		internal static List<string> KazotskyKick_Emotes = new List<string>();

		internal static List<string> RPS_Start_Emotes = new List<string>();

		internal static List<string> RPS_Loss_Emotes = new List<string>();

		internal static List<string> RPS_Win_Emotes = new List<string>();

		internal static List<string> Flip_Wait_Emotes = new List<string>();

		internal static List<string> Flip_Flip_Emotes = new List<string>();

		internal static List<string> Flip_Throw_Emotes = new List<string>();

		internal static List<string> Laugh_Emotes = new List<string>();

		internal static Shader defaultShader = ((Renderer)Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/CommandoBody.prefab").WaitForCompletion().GetComponentInChildren<SkinnedMeshRenderer>()).material.shader;

		public void Awake()
		{
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: 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
			Instance = this;
			Assets.PopulateAssets();
			Settings.SetupConfig();
			Settings.SetupROO();
			Assets.AddSoundBank("tf2.bnk");
			Assets.LoadSoundBanks();
			Rancho();
			RPS();
			Conga();
			Flip();
			KazotskyKick();
			Laugh();
			Register();
			CustomEmotesAPI.animJoined += new AnimationJoined(CustomEmotesAPI_animJoined);
			CustomEmotesAPI.animChanged += new AnimationChanged(CustomEmotesAPI_animChanged);
			CustomEmotesAPI.emoteSpotJoined_Body += new JoinedEmoteSpotBody(CustomEmotesAPI_emoteSpotJoined_Body);
		}

		private void CustomEmotesAPI_animJoined(string joinedAnimation, BoneMapper joiner, BoneMapper host)
		{
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			if (joinedAnimation.EndsWith("_Conga"))
			{
				int spot = Random.Range(0, Conga_Emotes.Count);
				NetMessageExtensions.Send((INetMessage)(object)new SyncRandomEmoteToHost(((Component)((Component)((Component)joiner).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId, "Conga_Start", spot, ((Component)((Component)((Component)joiner).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId), (NetworkDestination)2);
			}
			if (joinedAnimation.StartsWith("Kazotsky_"))
			{
				NetMessageExtensions.Send((INetMessage)(object)new SyncRandomEmoteToHost(((Component)((Component)((Component)joiner).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId, "Kazotsky_Start", Random.Range(0, KazotskyKick_Emotes.Count), ((Component)((Component)((Component)joiner).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId), (NetworkDestination)2);
			}
		}

		private void Register()
		{
			NetworkingAPI.RegisterMessageType<SyncRandomEmoteToClient>();
			NetworkingAPI.RegisterMessageType<SyncRandomEmoteToHost>();
		}

		public void Rancho()
		{
			AddAnimation("Engi/Rancho/RanchoRelaxo", "Rancho", "Engi/Rancho/engiRanchoPassive", dimAudio: false, sync: false);
			AddAnimation("Engi/Rancho/engiRanchoBurp", "", "Engi/Rancho/engiRanchoPassive", dimAudio: false, sync: false, visibility: false);
			AddAnimation("Engi/Rancho/engiRanchoBigDrink", "", "Engi/Rancho/engiRanchoPassive", dimAudio: false, sync: false, visibility: false);
			AddAnimation("Engi/Rancho/engiRanchoQuickDrink", "", "Engi/Rancho/engiRanchoPassive", dimAudio: false, sync: false, visibility: false);
		}

		public void Laugh()
		{
			CustomEmotesAPI.AddNonAnimatingEmote("Schadenfreude", true);
			CustomEmotesAPI.BlackListEmote("Schadenfreude");
			string item = AddHiddenAnimation(new string[1] { "Engi/Laugh/Engi_Laugh" }, new string[1] { "Engi_Laugh" }, "Laugh");
			Laugh_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Scout/Laugh/Scout_Laugh" }, new string[1] { "Scout_Laugh" }, "Laugh");
			Laugh_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Demo/Laugh/Demo_Laugh" }, new string[1] { "Demo_Laugh" }, "Laugh");
			Laugh_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Soldier/Laugh/Soldier_Laugh" }, new string[1] { "Soldier_Laugh" }, "Laugh");
			Laugh_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Pyro/Laugh/Pyro_Laugh" }, new string[1] { "Pyro_Laugh" }, "Laugh");
			Laugh_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Heavy/Laugh/Heavy_Laugh" }, new string[1] { "Heavy_Laugh" }, "Laugh");
			Laugh_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Medic/Laugh/Medic_Laugh" }, new string[1] { "Medic_Laugh" }, "Laugh");
			Laugh_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Sniper/Laugh/Sniper_Laugh" }, new string[1] { "Sniper_Laugh" }, "Laugh");
			Laugh_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Spy/Laugh/Spy_Laugh" }, new string[1] { "Spy_Laugh" }, "Laugh");
			Laugh_Emotes.Add(item);
		}

		public void Flip()
		{
			//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_006e: 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_013e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: 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_0213: Unknown result type (might be due to invalid IL or missing references)
			//IL_0218: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_048d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0492: Unknown result type (might be due to invalid IL or missing references)
			//IL_0497: Unknown result type (might be due to invalid IL or missing references)
			//IL_0562: Unknown result type (might be due to invalid IL or missing references)
			//IL_0567: Unknown result type (might be due to invalid IL or missing references)
			//IL_056c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0637: Unknown result type (might be due to invalid IL or missing references)
			//IL_063c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0641: Unknown result type (might be due to invalid IL or missing references)
			//IL_070c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0711: Unknown result type (might be due to invalid IL or missing references)
			//IL_0716: Unknown result type (might be due to invalid IL or missing references)
			CustomEmotesAPI.AddNonAnimatingEmote("Flippin' Awesome", true);
			CustomEmotesAPI.BlackListEmote("Flippin' Awesome");
			string item = AddHiddenAnimation(new string[1] { "Demo/Flip/Demo_Flip_Start" }, new string[1] { "Demo/Flip/Demo_Flip_Wait" }, new string[1] { "Demo_Flip_Waiting" }, "Flip", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("FlipJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			Flip_Wait_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Demo/Flip/Demo_Flip_Throw" }, new string[1] { "Demo_Flip_Throw" }, "");
			Flip_Throw_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Demo/Flip/Demo_Flip_Flip" }, new string[1] { "Demo_Flip_Flip" }, "");
			Flip_Flip_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Engi/Flip/Engi_Flip_Start" }, new string[1] { "Engi/Flip/Engi_Flip_Wait" }, new string[1] { "Engi_Flip_Waiting" }, "Flip", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("FlipJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			Flip_Wait_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Engi/Flip/Engi_Flip_Throw" }, new string[1] { "Engi_Flip_Throw" }, "");
			Flip_Throw_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Engi/Flip/Engi_Flip_Flip" }, new string[1] { "Engi_Flip_Flip" }, "");
			Flip_Flip_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Medic/Flip/Medic_Flip_Start" }, new string[1] { "Medic/Flip/Medic_Flip_Wait" }, new string[1] { "Medic_Flip_Waiting" }, "Flip", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("FlipJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			Flip_Wait_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Medic/Flip/Medic_Flip_Throw" }, new string[1] { "Medic_Flip_Throw" }, "");
			Flip_Throw_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Medic/Flip/Medic_Flip_Flip" }, new string[1] { "Medic_Flip_Flip" }, "");
			Flip_Flip_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Heavy/Flip/Heavy_Flip_Start" }, new string[1] { "Heavy/Flip/Heavy_Flip_Wait" }, new string[1] { "Heavy_Flip_Waiting" }, "Flip", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("FlipJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			Flip_Wait_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Heavy/Flip/Heavy_Flip_Throw" }, new string[1] { "Heavy_Flip_Throw" }, "");
			Flip_Throw_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Heavy/Flip/Heavy_Flip_Flip" }, new string[1] { "Heavy_Flip_Flip" }, "");
			Flip_Flip_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Pyro/Flip/Pyro_Flip_Start" }, new string[1] { "Pyro/Flip/Pyro_Flip_Wait" }, new string[1] { "Pyro_Flip_Waiting" }, "Flip", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("FlipJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			Flip_Wait_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Pyro/Flip/Pyro_Flip_Throw" }, new string[1] { "Pyro_Flip_Throw" }, "");
			Flip_Throw_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Pyro/Flip/Pyro_Flip_Flip" }, new string[1] { "Pyro_Flip_Flip" }, "");
			Flip_Flip_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Scout/Flip/Scout_Flip_Start" }, new string[1] { "Scout/Flip/Scout_Flip_Wait" }, new string[1] { "Scout_Flip_Waiting" }, "Flip", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("FlipJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			Flip_Wait_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Scout/Flip/Scout_Flip_Throw" }, new string[1] { "Scout_Flip_Throw" }, "");
			Flip_Throw_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Scout/Flip/Scout_Flip_Flip" }, new string[1] { "Scout_Flip_Flip" }, "");
			Flip_Flip_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Sniper/Flip/Sniper_Flip_Start" }, new string[1] { "Sniper/Flip/Sniper_Flip_Wait" }, new string[1] { "Sniper_Flip_Waiting" }, "Flip", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("FlipJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			Flip_Wait_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Sniper/Flip/Sniper_Flip_Throw" }, new string[1] { "Sniper_Flip_Throw" }, "");
			Flip_Throw_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Sniper/Flip/Sniper_Flip_Flip" }, new string[1] { "Sniper_Flip_Flip" }, "");
			Flip_Flip_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Soldier/Flip/Soldier_Flip_Start" }, new string[1] { "Soldier/Flip/Soldier_Flip_Wait" }, new string[1] { "Soldier_Flip_Waiting" }, "Flip", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("FlipJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			Flip_Wait_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Soldier/Flip/Soldier_Flip_Throw" }, new string[1] { "Soldier_Flip_Throw" }, "");
			Flip_Throw_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Soldier/Flip/Soldier_Flip_Flip" }, new string[1] { "Soldier_Flip_Flip" }, "");
			Flip_Flip_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Spy/Flip/Spy_Flip_Start" }, new string[1] { "Spy/Flip/Spy_Flip_Wait" }, new string[1] { "Spy_Flip_Waiting" }, "Flip", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("FlipJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			Flip_Wait_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Spy/Flip/Spy_Flip_Throw" }, new string[1] { "Spy_Flip_Throw" }, "");
			Flip_Throw_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Spy/Flip/Spy_Flip_Flip" }, new string[1] { "Spy_Flip_Flip" }, "");
			Flip_Flip_Emotes.Add(item);
		}

		public void RPS()
		{
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0232: 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_03d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0577: Unknown result type (might be due to invalid IL or missing references)
			//IL_057c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0581: Unknown result type (might be due to invalid IL or missing references)
			//IL_071c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0721: Unknown result type (might be due to invalid IL or missing references)
			//IL_0726: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_08cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a66: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a6b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a70: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c0b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c10: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c15: Unknown result type (might be due to invalid IL or missing references)
			//IL_0db0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0db5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dba: Unknown result type (might be due to invalid IL or missing references)
			CustomEmotesAPI.AddNonAnimatingEmote("Rock Paper Scissors", true);
			CustomEmotesAPI.BlackListEmote("Rock Paper Scissors");
			CustomEmotesAPI.AddNonAnimatingEmote("Rock", false);
			CustomEmotesAPI.AddNonAnimatingEmote("Paper", false);
			CustomEmotesAPI.AddNonAnimatingEmote("Scissors", false);
			string item = AddHiddenAnimation(new string[1] { "Engi/RPS/EngiRPSStart" }, new string[1] { "Engi/RPS/EngiRPSLoop" }, new string[1] { "RPS_Engi_Initiate" }, "RPS", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("RPSJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			RPS_Start_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Engi/RPS/EngiRPS_RWin" }, new string[1] { "RPS_Engi_WinRock" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Engi/RPS/EngiRPS_RLose" }, new string[1] { "RPS_Engi_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Engi/RPS/EngiRPS_PWin" }, new string[1] { "RPS_Engi_WinPaper" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Engi/RPS/EngiRPS_PLose" }, new string[1] { "RPS_Engi_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Engi/RPS/EngiRPS_SWin" }, new string[1] { "RPS_Engi_WinScissors" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Engi/RPS/EngiRPS_SLose" }, new string[1] { "RPS_Engi_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Demo/RPS/DemoRPS_Start" }, new string[1] { "Demo/RPS/DemoRPS_Loop" }, new string[1] { "RPS_Demo_Initiate" }, "RPS", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("RPSJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			RPS_Start_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Demo/RPS/DemoRPS_RWin" }, new string[1] { "RPS_Demo_WinRock" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Demo/RPS/DemoRPS_RLose" }, new string[1] { "RPS_Demo_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Demo/RPS/DemoRPS_PWin" }, new string[1] { "RPS_Demo_WinPaper" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Demo/RPS/DemoRPS_PLose" }, new string[1] { "RPS_Demo_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Demo/RPS/DemoRPS_SWin" }, new string[1] { "RPS_Demo_WinScissors" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Demo/RPS/DemoRPS_SLose" }, new string[1] { "RPS_Demo_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Soldier/RPS/SoldierRPS_Start" }, new string[1] { "Soldier/RPS/SoldierRPS_Loop" }, new string[1] { "RPS_Soldier_Initiate" }, "RPS", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("RPSJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			RPS_Start_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Soldier/RPS/SoldierRPS_RWin" }, new string[1] { "RPS_Soldier_WinRock" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Soldier/RPS/SoldierRPS_RLose" }, new string[1] { "RPS_Soldier_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Soldier/RPS/SoldierRPS_PWin" }, new string[1] { "RPS_Soldier_WinPaper" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Soldier/RPS/SoldierRPS_PLose" }, new string[1] { "RPS_Soldier_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Soldier/RPS/SoldierRPS_SWin" }, new string[1] { "RPS_Soldier_WinScissors" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Soldier/RPS/SoldierRPS_SLose" }, new string[1] { "RPS_Soldier_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Heavy/RPS/HeavyRPS_Start" }, new string[1] { "Heavy/RPS/HeavyRPS_Loop" }, new string[1] { "RPS_Heavy_Initiate" }, "RPS", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("RPSJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			RPS_Start_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Heavy/RPS/HeavyRPS_RWin" }, new string[1] { "RPS_Heavy_WinRock" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Heavy/RPS/HeavyRPS_RLose" }, new string[1] { "RPS_Heavy_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Heavy/RPS/HeavyRPS_PWin" }, new string[1] { "RPS_Heavy_WinPaper" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Heavy/RPS/HeavyRPS_PLose" }, new string[1] { "RPS_Heavy_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Heavy/RPS/HeavyRPS_SWin" }, new string[1] { "RPS_Heavy_WinScissors" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Heavy/RPS/HeavyRPS_SLose" }, new string[1] { "RPS_Heavy_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Medic/RPS/MedicRPS_Start" }, new string[1] { "Medic/RPS/MedicRPS_Loop" }, new string[1] { "RPS_Medic_Initiate" }, "RPS", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("RPSJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			RPS_Start_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Medic/RPS/MedicRPS_RWin" }, new string[1] { "RPS_Medic_WinRock" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Medic/RPS/MedicRPS_RLose" }, new string[1] { "RPS_Medic_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Medic/RPS/MedicRPS_PWin" }, new string[1] { "RPS_Medic_WinPaper" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Medic/RPS/MedicRPS_PLose" }, new string[1] { "RPS_Medic_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Medic/RPS/MedicRPS_SWin" }, new string[1] { "RPS_Medic_WinScissors" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Medic/RPS/MedicRPS_SLose" }, new string[1] { "RPS_Medic_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Pyro/RPS/PyroRPS_Start" }, new string[1] { "Pyro/RPS/PyroRPS_Loop" }, new string[1] { "RPS_Pyro_Initiate" }, "RPS", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("RPSJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			RPS_Start_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Pyro/RPS/PyroRPS_RWin" }, new string[1] { "RPS_Pyro_WinRock" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Pyro/RPS/PyroRPS_RLose" }, new string[1] { "RPS_Pyro_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Pyro/RPS/PyroRPS_PWin" }, new string[1] { "RPS_Pyro_WinPaper" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Pyro/RPS/PyroRPS_PLose" }, new string[1] { "RPS_Pyro_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Pyro/RPS/PyroRPS_SWin" }, new string[1] { "RPS_Pyro_WinScissors" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Pyro/RPS/PyroRPS_SLose" }, new string[1] { "RPS_Pyro_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Scout/RPS/ScoutRPS_Start" }, new string[1] { "Scout/RPS/ScoutRPS_Loop" }, new string[1] { "RPS_Scout_Initiate" }, "RPS", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("RPSJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			RPS_Start_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Scout/RPS/ScoutRPS_RWin" }, new string[1] { "RPS_Scout_WinRock" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Scout/RPS/ScoutRPS_RLose" }, new string[1] { "RPS_Scout_LossRock" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Scout/RPS/ScoutRPS_PWin" }, new string[1] { "RPS_Scout_WinPaper" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Scout/RPS/ScoutRPS_PLose" }, new string[1] { "RPS_Scout_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Scout/RPS/ScoutRPS_SWin" }, new string[1] { "RPS_Scout_WinScissors" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Scout/RPS/ScoutRPS_SLose" }, new string[1] { "RPS_Scout_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Sniper/RPS/SniperRPS_Start" }, new string[1] { "Sniper/RPS/SniperRPS_Loop" }, new string[1] { "RPS_Sniper_Initiate" }, "RPS", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("RPSJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			RPS_Start_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Sniper/RPS/SniperRPS_RWin" }, new string[1] { "RPS_Sniper_WinRock" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Sniper/RPS/SniperRPS_RLose" }, new string[1] { "RPS_Sniper_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Sniper/RPS/SniperRPS_PWin" }, new string[1] { "RPS_Sniper_WinPaper" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Sniper/RPS/SniperRPS_PLose" }, new string[1] { "RPS_Sniper_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Sniper/RPS/SniperRPS_SWin" }, new string[1] { "RPS_Sniper_WinScissors" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Sniper/RPS/SniperRPS_SLose" }, new string[1] { "RPS_Sniper_Loss" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Spy/RPS/SpyRPS_Start" }, new string[1] { "Spy/RPS/SpyRPS_Loop" }, new string[1] { "RPS_Spy_Initiate" }, "RPS", (JoinSpot[])(object)new JoinSpot[1]
			{
				new JoinSpot("RPSJoinSpot", new Vector3(0f, 0f, 1.5f))
			});
			RPS_Start_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Spy/RPS/SpyRPS_RWin" }, new string[1] { "RPS_Spy_WinRock" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Spy/RPS/SpyRPS_RLose" }, new string[1] { "RPS_Spy_LossRock" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Spy/RPS/SpyRPS_PWin" }, new string[1] { "RPS_Spy_WinPaper" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Spy/RPS/SpyRPS_PLose" }, new string[1] { "RPS_Spy_LossPaper" }, "");
			RPS_Loss_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Spy/RPS/SpyRPS_SWin" }, new string[1] { "RPS_Spy_WinScissors" }, "");
			RPS_Win_Emotes.Add(item);
			item = AddHiddenAnimation(new string[1] { "Spy/RPS/SpyRPS_SLose" }, new string[1] { "RPS_Spy_LossScissors" }, "");
			RPS_Loss_Emotes.Add(item);
		}

		public void KazotskyKick()
		{
			CustomEmotesAPI.AddNonAnimatingEmote("Kazotsky Kick", true);
			CustomEmotesAPI.BlackListEmote("Kazotsky Kick");
			string text = AddHiddenAnimation(new string[1] { "KazotskyKick/Kazotsky_Demo_Start" }, new string[1] { "Kazotsky" }, "Kazotsky", sync: true, new string[1] { "KazotskyKick/Kazotsky_Demo_Loop" });
			KazotskyKick_Emotes.Add(text);
			int syncPos = BoneMapper.animClips[text].syncPos;
			text = AddHiddenAnimation(new string[1] { "KazotskyKick/Kazotsky_Engi_Start" }, new string[1] { "Kazotsky" }, "Kazotsky", sync: true, new string[1] { "KazotskyKick/Kazotsky_Engi_Loop" });
			KazotskyKick_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
			text = AddHiddenAnimation(new string[1] { "KazotskyKick/Kazotsky_Heavy_Start" }, new string[1] { "Kazotsky" }, "Kazotsky", sync: true, new string[1] { "KazotskyKick/Kazotsky_Heavy_Loop" });
			KazotskyKick_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
			text = AddHiddenAnimation(new string[1] { "KazotskyKick/Kazotsky_Medic_Start" }, new string[1] { "Kazotsky" }, "Kazotsky", sync: true, new string[1] { "KazotskyKick/Kazotsky_Medic_Loop" });
			KazotskyKick_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
			text = AddHiddenAnimation(new string[1] { "KazotskyKick/Kazotsky_Pyro_Start" }, new string[1] { "Kazotsky" }, "Kazotsky", sync: true, new string[1] { "KazotskyKick/Kazotsky_Pyro_Loop" });
			KazotskyKick_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
			text = AddHiddenAnimation(new string[1] { "KazotskyKick/Kazotsky_Scout_Start" }, new string[1] { "Kazotsky" }, "Kazotsky", sync: true, new string[1] { "KazotskyKick/Kazotsky_Scout_Loop" });
			KazotskyKick_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
			text = AddHiddenAnimation(new string[1] { "KazotskyKick/Kazotsky_Sniper_Start" }, new string[1] { "Kazotsky" }, "Kazotsky", sync: true, new string[1] { "KazotskyKick/Kazotsky_Sniper_Loop" });
			KazotskyKick_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
			text = AddHiddenAnimation(new string[1] { "KazotskyKick/Kazotsky_Soldier_Start" }, new string[1] { "Kazotsky" }, "Kazotsky", sync: true, new string[1] { "KazotskyKick/Kazotsky_Soldier_Loop" });
			KazotskyKick_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
			text = AddHiddenAnimation(new string[1] { "KazotskyKick/Kazotsky_Spy_Start" }, new string[1] { "Kazotsky" }, "Kazotsky", sync: true, new string[1] { "KazotskyKick/Kazotsky_Spy_Loop" });
			KazotskyKick_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
		}

		public void Conga()
		{
			CustomEmotesAPI.AddNonAnimatingEmote("Conga", true);
			CustomEmotesAPI.BlackListEmote("Conga");
			string text = AddHiddenAnimation(new string[1] { "Conga/Demo_Conga" }, new string[1] { "Conga" }, "Conga", sync: true);
			Conga_Emotes.Add(text);
			int syncPos = BoneMapper.animClips[text].syncPos;
			text = AddHiddenAnimation(new string[1] { "Conga/Engi_Conga" }, new string[1] { "Conga" }, "Conga", sync: true);
			Conga_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
			text = AddHiddenAnimation(new string[1] { "Conga/Heavy_Conga" }, new string[1] { "Conga" }, "Conga", sync: true);
			Conga_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
			text = AddHiddenAnimation(new string[1] { "Conga/Medic_Conga" }, new string[1] { "Conga" }, "Conga", sync: true);
			Conga_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
			text = AddHiddenAnimation(new string[1] { "Conga/Pyro_Conga" }, new string[1] { "Conga" }, "Conga", sync: true);
			Conga_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
			text = AddHiddenAnimation(new string[1] { "Conga/Scout_Conga" }, new string[1] { "Conga" }, "Conga", sync: true);
			Conga_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
			text = AddHiddenAnimation(new string[1] { "Conga/Sniper_Conga" }, new string[1] { "Conga" }, "Conga", sync: true);
			Conga_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
			text = AddHiddenAnimation(new string[1] { "Conga/Soldier_Conga" }, new string[1] { "Conga" }, "Conga", sync: true);
			Conga_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
			text = AddHiddenAnimation(new string[1] { "Conga/Spy_Conga" }, new string[1] { "Conga" }, "Conga", sync: true);
			Conga_Emotes.Add(text);
			BoneMapper.animClips[text].syncPos = syncPos;
		}

		private void CustomEmotesAPI_emoteSpotJoined_Body(GameObject emoteSpot, BoneMapper joiner, BoneMapper host)
		{
			//IL_0278: Unknown result type (might be due to invalid IL or missing references)
			//IL_029e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ef: 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_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			string name = ((Object)emoteSpot).name;
			if (name == "RPSJoinSpot")
			{
				if (NetworkServer.active)
				{
					int num = Random.Range(0, 2);
					int num2 = Random.Range(0, 3);
					int num3 = ((num != 0) ? (num2 + 1) : (num2 - 1));
					if (num3 > 2)
					{
						num3 -= 3;
					}
					if (num3 < 0)
					{
						num3 += 3;
					}
					num2 += host.props[0].GetComponent<RockPaperScissors>().charType * 3;
					num3 += Random.Range(0, RPS_Start_Emotes.Count) * 3;
					if (num == 0)
					{
						NetMessageExtensions.Send((INetMessage)(object)new SyncRandomEmoteToHost(((Component)((Component)((Component)host).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId, "RPS_Win", num2, ((Component)((Component)((Component)host).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId), (NetworkDestination)2);
						NetMessageExtensions.Send((INetMessage)(object)new SyncRandomEmoteToHost(((Component)((Component)((Component)joiner).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId, "RPS_Loss", num3, ((Component)((Component)((Component)host).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId), (NetworkDestination)2);
					}
					else
					{
						NetMessageExtensions.Send((INetMessage)(object)new SyncRandomEmoteToHost(((Component)((Component)((Component)host).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId, "RPS_Loss", num2, ((Component)((Component)((Component)host).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId), (NetworkDestination)2);
						NetMessageExtensions.Send((INetMessage)(object)new SyncRandomEmoteToHost(((Component)((Component)((Component)joiner).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId, "RPS_Win", num3, ((Component)((Component)((Component)host).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId), (NetworkDestination)2);
					}
				}
			}
			else if (name == "FlipJoinSpot" && NetworkServer.active)
			{
				int charType = host.props[0].GetComponent<Flip>().charType;
				int spot = Random.Range(0, Flip_Flip_Emotes.Count);
				NetMessageExtensions.Send((INetMessage)(object)new SyncRandomEmoteToHost(((Component)((Component)((Component)host).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId, "Flip_Throw", charType, ((Component)((Component)((Component)host).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId), (NetworkDestination)2);
				NetMessageExtensions.Send((INetMessage)(object)new SyncRandomEmoteToHost(((Component)((Component)((Component)joiner).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId, "Flip_Flip", spot, ((Component)((Component)((Component)host).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId), (NetworkDestination)2);
			}
		}

		private void CustomEmotesAPI_animChanged(string newAnimation, BoneMapper mapper)
		{
			//IL_0073: 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_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: Expected O, but got Unknown
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0152: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_023a: Unknown result type (might be due to invalid IL or missing references)
			//IL_026e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0305: Unknown result type (might be due to invalid IL or missing references)
			//IL_0368: 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)
			//IL_03ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0433: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)((Component)mapper).gameObject.GetComponent<TF2EmoteTracker>()))
			{
				((Component)mapper).gameObject.AddComponent<TF2EmoteTracker>();
			}
			if (newAnimation == "RanchoRelaxo")
			{
				GameObject val = Object.Instantiate<GameObject>(Assets.Load<GameObject>("@BadAssEmotes_badassemotes:Assets/Engi/Rancho/RanchoRelaxo.prefab"));
				mapper.props.Add(val);
				val.transform.SetParent(((Component)mapper).transform.parent);
				val.transform.localEulerAngles = Vector3.one;
				val.transform.localPosition = Vector3.zero;
				val.transform.localScale = new Vector3(1.175f, 1.175f, 1.175f);
				mapper.ScaleProps();
				mapper.props.RemoveAt(mapper.props.Count - 1);
				ChairHandler chairHandler = val.AddComponent<ChairHandler>();
				chairHandler.pos = val.transform.position;
				chairHandler.rot = val.transform.eulerAngles;
				chairHandler.scal = val.transform.lossyScale;
				chairHandler.mapper = mapper;
				val = new GameObject();
				((Object)val).name = "RanchoRelaxoProp";
				mapper.props.Add(val);
				val.transform.localPosition = ((Component)mapper).transform.position;
				val.transform.localEulerAngles = ((Component)mapper).transform.eulerAngles;
				val.transform.localScale = Vector3.one;
				mapper.AssignParentGameObject(val, true, true, true, false, false);
				chairHandler.chair = val;
			}
			if (newAnimation == "Rock Paper Scissors" && NetworkServer.active)
			{
				NetMessageExtensions.Send((INetMessage)(object)new SyncRandomEmoteToHost(((Component)((Component)((Component)mapper).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId, "RPS_Start", Random.Range(0, RPS_Start_Emotes.Count), ((Component)((Component)((Component)mapper).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId), (NetworkDestination)2);
			}
			if (newAnimation == "Flippin' Awesome" && NetworkServer.active)
			{
				NetMessageExtensions.Send((INetMessage)(object)new SyncRandomEmoteToHost(((Component)((Component)((Component)mapper).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId, "Flip_Wait", Random.Range(0, Flip_Wait_Emotes.Count), ((Component)((Component)((Component)mapper).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId), (NetworkDestination)2);
			}
			if (newAnimation == "Conga" && NetworkServer.active)
			{
				((Component)mapper).gameObject.GetComponent<TF2EmoteTracker>().currentAnimation = "Medic_Conga";
				NetMessageExtensions.Send((INetMessage)(object)new SyncRandomEmoteToHost(((Component)((Component)((Component)mapper).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId, "Conga_Start", Random.Range(0, Conga_Emotes.Count), ((Component)((Component)((Component)mapper).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId), (NetworkDestination)2);
			}
			if (newAnimation == "Kazotsky Kick" && NetworkServer.active)
			{
				((Component)mapper).gameObject.GetComponent<TF2EmoteTracker>().currentAnimation = "Medic_Kazotsky";
				NetMessageExtensions.Send((INetMessage)(object)new SyncRandomEmoteToHost(((Component)((Component)((Component)mapper).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId, "Kazotsky_Start", Random.Range(0, KazotskyKick_Emotes.Count), ((Component)((Component)((Component)mapper).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId), (NetworkDestination)2);
			}
			if (newAnimation == "Schadenfreude" && NetworkServer.active)
			{
				((Component)mapper).gameObject.GetComponent<TF2EmoteTracker>().currentAnimation = "Medic_Laugh";
				NetMessageExtensions.Send((INetMessage)(object)new SyncRandomEmoteToHost(((Component)((Component)((Component)mapper).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId, "Laugh_Start", Random.Range(0, Laugh_Emotes.Count), ((Component)((Component)((Component)mapper).transform.parent).GetComponent<CharacterModel>().body).GetComponent<NetworkIdentity>().netId), (NetworkDestination)2);
			}
			((Component)mapper).gameObject.GetComponent<TF2EmoteTracker>().currentAnimation = newAnimation;
		}

		private void Update()
		{
		}

		internal void PlayAfterSecondsNotIEnumerator(BoneMapper mapper, string animName, float seconds)
		{
			((MonoBehaviour)this).StartCoroutine(PlayAfterSeconds(mapper, animName, seconds));
		}

		internal IEnumerator PlayAfterSeconds(BoneMapper mapper, string animName, float seconds)
		{
			yield return (object)new WaitForSeconds(seconds);
			CustomEmotesAPI.PlayAnimation(animName, mapper, -2);
		}

		internal void KillAfterSecondsNotIEnumerator(BoneMapper mapper, float seconds)
		{
			((MonoBehaviour)this).StartCoroutine(KillAfterSeconds(mapper, seconds));
		}

		internal IEnumerator KillAfterSeconds(BoneMapper mapper, float seconds)
		{
			yield return (object)new WaitForSeconds(seconds);
			((Component)mapper).GetComponentInParent<CharacterModel>().body.healthComponent.Suicide((GameObject)null, (GameObject)null, default(DamageTypeCombo));
		}

		internal void AddAnimation(string AnimClip, string wwise, bool looping, bool dimAudio, bool sync)
		{
			CustomEmotesAPI.AddCustomAnimation(Assets.Load<AnimationClip>("@ExampleEmotePlugin_badassemotes:assets/" + AnimClip + ".anim"), looping, "Play_" + wwise, "Stop_" + wwise, (HumanBodyBones[])null, (HumanBodyBones[])null, (AnimationClip)null, dimAudio, false, false, true, sync, sync);
			string key = AnimClip.Split('/')[AnimClip.Split('/').Length - 1];
			BoneMapper.animClips[key].vulnerableEmote = true;
		}

		internal void AddAnimation(string AnimClip, string wwise, string AnimClip2ElectricBoogaloo, bool dimAudio, bool sync)
		{
			CustomEmotesAPI.AddCustomAnimation(Assets.Load<AnimationClip>("@ExampleEmotePlugin_badassemotes:assets/" + AnimClip + ".anim"), true, "Play_" + wwise, "Stop_" + wwise, (HumanBodyBones[])null, (HumanBodyBones[])null, Assets.Load<AnimationClip>("@ExampleEmotePlugin_badassemotes:assets/" + AnimClip2ElectricBoogaloo + ".anim"), dimAudio, false, false, true, sync, sync);
			string text = AnimClip.Split('/')[AnimClip.Split('/').Length - 1];
			CustomEmotesAPI.BlackListEmote(text);
			BoneMapper.animClips[text].vulnerableEmote = true;
		}

		internal void AddAnimation(string AnimClip, string wwise, string AnimClip2ElectricBoogaloo, bool dimAudio, bool sync, bool visibility)
		{
			AnimationClip obj = Assets.Load<AnimationClip>("@ExampleEmotePlugin_badassemotes:assets/" + AnimClip + ".anim");
			string text = "Play_" + wwise;
			string text2 = "Stop_" + wwise;
			AnimationClip obj2 = Assets.Load<AnimationClip>("@ExampleEmotePlugin_badassemotes:assets/" + AnimClip2ElectricBoogaloo + ".anim");
			bool flag = sync;
			bool flag2 = sync;
			CustomEmotesAPI.AddCustomAnimation(obj, true, text, text2, (HumanBodyBones[])null, (HumanBodyBones[])null, obj2, dimAudio, false, false, visibility, flag, flag2);
			string key = AnimClip.Split('/')[AnimClip.Split('/').Length - 1];
			BoneMapper.animClips[key].vulnerableEmote = true;
		}

		internal string AddHiddenAnimation(string[] AnimClip, string[] AnimClip2ElectricBoogaloo, string[] wwise, string stopWwise, JoinSpot[] joinSpots)
		{
			List<string> list = new List<string>();
			foreach (string text in wwise)
			{
				list.Add("Stop_" + stopWwise);
			}
			List<AnimationClip> list2 = new List<AnimationClip>();
			foreach (string text2 in AnimClip)
			{
				list2.Add(Assets.Load<AnimationClip>("@ExampleEmotePlugin_badassemotes:assets/" + text2 + ".anim"));
			}
			List<AnimationClip> list3 = new List<AnimationClip>();
			foreach (string text3 in AnimClip2ElectricBoogaloo)
			{
				list3.Add(Assets.Load<AnimationClip>("@ExampleEmotePlugin_badassemotes:assets/" + text3 + ".anim"));
			}
			string text4 = AnimClip[0].Split('/')[AnimClip[0].Split('/').Length - 1];
			CustomEmotesAPI.AddCustomAnimation(list2.ToArray(), true, wwise, list.ToArray(), (HumanBodyBones[])null, (HumanBodyBones[])null, list3.ToArray(), false, false, false, false, false, false, -1, -1, joinSpots);
			BoneMapper.animClips[text4].vulnerableEmote = true;
			return text4;
		}

		internal string AddHiddenAnimation(string[] AnimClip, string[] wwise, string stopWwise)
		{
			List<string> list = new List<string>();
			foreach (string text in wwise)
			{
				list.Add("Stop_" + stopWwise);
			}
			List<AnimationClip> list2 = new List<AnimationClip>();
			foreach (string text2 in AnimClip)
			{
				list2.Add(Assets.Load<AnimationClip>("@ExampleEmotePlugin_badassemotes:assets/" + text2 + ".anim"));
			}
			string text3 = AnimClip[0].Split('/')[AnimClip[0].Split('/').Length - 1];
			CustomEmotesAPI.AddCustomAnimation(list2.ToArray(), false, wwise, list.ToArray(), (HumanBodyBones[])null, (HumanBodyBones[])null, (AnimationClip[])null, false, false, false, false, false, false, -1, -1, (JoinSpot[])null);
			BoneMapper.animClips[text3].vulnerableEmote = true;
			return text3;
		}

		internal string AddHiddenAnimation(string[] AnimClip, string[] wwise, string stopWwise, bool sync)
		{
			List<string> list = new List<string>();
			foreach (string text in wwise)
			{
				list.Add("Stop_" + stopWwise);
			}
			List<AnimationClip> list2 = new List<AnimationClip>();
			foreach (string text2 in AnimClip)
			{
				list2.Add(Assets.Load<AnimationClip>("@ExampleEmotePlugin_badassemotes:assets/" + text2 + ".anim"));
			}
			string text3 = AnimClip[0].Split('/')[AnimClip[0].Split('/').Length - 1];
			CustomEmotesAPI.AddCustomAnimation(list2.ToArray(), true, wwise, list.ToArray(), (HumanBodyBones[])null, (HumanBodyBones[])null, (AnimationClip[])null, false, false, false, false, false, sync, -1, -1, (JoinSpot[])null);
			BoneMapper.animClips[text3].vulnerableEmote = true;
			return text3;
		}

		internal string AddHiddenAnimation(string[] AnimClip, string[] wwise, string stopWwise, bool sync, string[] AnimClip2)
		{
			List<string> list = new List<string>();
			foreach (string text in wwise)
			{
				list.Add("Stop_" + stopWwise);
			}
			List<AnimationClip> list2 = new List<AnimationClip>();
			foreach (string text2 in AnimClip)
			{
				list2.Add(Assets.Load<AnimationClip>("@ExampleEmotePlugin_badassemotes:assets/" + text2 + ".anim"));
			}
			List<AnimationClip> list3 = new List<AnimationClip>();
			foreach (string text3 in AnimClip2)
			{
				list3.Add(Assets.Load<AnimationClip>("@ExampleEmotePlugin_badassemotes:assets/" + text3 + ".anim"));
			}
			string text4 = AnimClip[0].Split('/')[AnimClip[0].Split('/').Length - 1];
			AnimationClip[] array = list2.ToArray();
			string[] array2 = list.ToArray();
			bool flag = sync;
			CustomEmotesAPI.AddCustomAnimation(array, false, wwise, array2, (HumanBodyBones[])null, (HumanBodyBones[])null, list3.ToArray(), false, false, false, false, false, flag, -1, -1, (JoinSpot[])null);
			BoneMapper.animClips[text4].vulnerableEmote = true;
			return text4;
		}

		private IEnumerator SpawnEnemies()
		{
			Console.instance.SubmitCmd(NetworkUser.readOnlyLocalPlayersList[0], "spawn_body BeetleQueen", false);
			yield return (object)new WaitForSeconds(0.75f);
			Console.instance.SubmitCmd(NetworkUser.readOnlyLocalPlayersList[0], "spawn_body Larva", false);
			yield return (object)new WaitForSeconds(0.75f);
			Console.instance.SubmitCmd(NetworkUser.readOnlyLocalPlayersList[0], "spawn_body BeetleGuard", false);
			yield return (object)new WaitForSeconds(0.75f);
			Console.instance.SubmitCmd(NetworkUser.readOnlyLocalPlayersList[0], "spawn_body Mithrix", false);
			yield return (object)new WaitForSeconds(0.75f);
			Console.instance.SubmitCmd(NetworkUser.readOnlyLocalPlayersList[0], "spawn_body ClayTemplar", false);
			yield return (object)new WaitForSeconds(0.75f);
			Console.instance.SubmitCmd(NetworkUser.readOnlyLocalPlayersList[0], "spawn_body Aurelionite", false);
		}
	}
}