Decompiled source of BigFellowship v1.0.0

plugins/BW-Fellowship.dll

Decompiled 3 days ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using BW_Fellowship.Patches;
using BepInEx;
using BepInEx.Unity.IL2CPP;
using BepInEx.Unity.IL2CPP.UnityEngine;
using HarmonyLib;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem;
using Il2CppSystem.Collections.Generic;
using Il2CppSystem.IO;
using Mirror;
using UnityEngine;
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: AssemblyTitle("BW-Fellowship")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("BW-Fellowship")]
[assembly: AssemblyCopyright("Copyright ©  2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("3da00a99-50d3-46fc-83f4-08ef12cb5d65")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace BW_Fellowship
{
	[BepInPlugin("O1Ryan.BigFellowship", "BigFellowship", "1.0.0")]
	public class FellowshipBase : BasePlugin
	{
		private const string PLUGIN_GUID = "O1Ryan.BigFellowship";

		private const string PLUGIN_NAME = "BigFellowship";

		private const string PLUGIN_VERSION = "1.0.0";

		private readonly Harmony harmony = new Harmony("O1Ryan.BigFellowship");

		public static FellowshipBase Instance;

		public static string modFolder = Path.Combine(Paths.PluginPath, "O1Ryan-BigFellowship");

		public static string modelsFolder = Path.Combine(modFolder, "Models");

		public override void Load()
		{
			if (Instance == null)
			{
				Instance = this;
			}
			harmony.PatchAll(typeof(FellowshipBase));
			harmony.PatchAll(typeof(PlayerCharacterPatch));
			harmony.PatchAll(typeof(RingSpawnerPatch));
			harmony.PatchAll(typeof(LooksMessageInterceptorPatch));
			((BasePlugin)this).Log.LogInfo((object)"Plugin BigFellowship is loaded!");
		}
	}
}
namespace BW_Fellowship.Patches
{
	[HarmonyPatch]
	internal static class LooksMessageInterceptorPatch
	{
		[HarmonyPrefix]
		[HarmonyPatch(typeof(TextChatSource), "AddMessage")]
		public static bool LooksInterceptorPatch(ref TextChatMessage message)
		{
			((BasePlugin)FellowshipBase.Instance).Log.LogInfo((object)("Message to display: " + message.message));
			if (message.message.ToCharArray().ToList().FindAll((char x) => x == '_')
				.Count == 2)
			{
				ProcessLookChange(message.message.Split(new char[1] { '_' }));
				return false;
			}
			return true;
		}

		private static void ProcessLookChange(string[] args)
		{
			((BasePlugin)FellowshipBase.Instance).Log.LogInfo((object)("Change to: " + GeneralExtensions.Join<string>((IEnumerable<string>)args, (Func<string, string>)null, ", ")));
			foreach (PlayerDataStruct playerStruct in PlayerCharacterPatch.playerStructs)
			{
				if (((NetworkBehaviour)playerStruct.pc).netId.ToString() == args[0])
				{
					int.TryParse(args[1], out var result);
					ApplyBodyMode(playerStruct, result);
					int.TryParse(args[2], out var result2);
					ApplyCostume(playerStruct, result, result2);
					break;
				}
			}
		}

		public static void ApplyBodyMode(PlayerDataStruct ps, int mode)
		{
			switch (mode)
			{
			case 1:
				PlayerCharacterPatch.ChangeBodyToElf(ps);
				break;
			case 2:
				PlayerCharacterPatch.ChangeBodyToHobbit(ps);
				break;
			case 3:
				PlayerCharacterPatch.ChangeBodyToHuman(ps);
				break;
			case 4:
				PlayerCharacterPatch.ChangeBodyToDwarf(ps);
				break;
			}
		}

		public static void ApplyCostume(PlayerDataStruct ps, int mode, int costume)
		{
			PlayerCharacterPatch.DisableAllCostumes(ps);
			switch (mode)
			{
			case 1:
				PlayerCharacterPatch.cycleElfCostumes(ps, costume);
				break;
			case 2:
				PlayerCharacterPatch.cycleHobbitCostumes(ps, costume);
				break;
			case 3:
				PlayerCharacterPatch.cycleHumanCostumes(ps, costume);
				break;
			case 4:
				PlayerCharacterPatch.cycleDwarfCostumes(ps, costume);
				break;
			}
		}
	}
	public static class ObjMeshLoader
	{
		public static Mesh LoadObjFile(string filePath)
		{
			//IL_030b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0312: Expected O, but got Unknown
			//IL_011b: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_021f: Unknown result type (might be due to invalid IL or missing references)
			//IL_026a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0259: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b6: 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)
			if (!File.Exists(filePath))
			{
				Debug.LogError(Object.op_Implicit("[ObjLoader] File not found at: " + filePath));
				return null;
			}
			List<Vector3> list = new List<Vector3>();
			List<Vector2> list2 = new List<Vector2>();
			List<Vector3> list3 = new List<Vector3>();
			List<Vector3> list4 = new List<Vector3>();
			List<Vector2> list5 = new List<Vector2>();
			List<Vector3> list6 = new List<Vector3>();
			List<int> list7 = new List<int>();
			Dictionary<string, int> dictionary = new Dictionary<string, int>();
			string[] array = File.ReadAllLines(filePath);
			string[] array2 = array;
			foreach (string text in array2)
			{
				string text2 = text.Trim();
				if (string.IsNullOrEmpty(text2) || text2.StartsWith("#"))
				{
					continue;
				}
				string[] array3 = text2.Split(new char[1] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
				if (array3.Length == 0)
				{
					continue;
				}
				switch (array3[0].ToLower())
				{
				case "v":
					list.Add(new Vector3(float.Parse(array3[1], CultureInfo.InvariantCulture), float.Parse(array3[2], CultureInfo.InvariantCulture), float.Parse(array3[3], CultureInfo.InvariantCulture)));
					break;
				case "vt":
					list2.Add(new Vector2(float.Parse(array3[1], CultureInfo.InvariantCulture), float.Parse(array3[2], CultureInfo.InvariantCulture)));
					break;
				case "vn":
					list3.Add(new Vector3(float.Parse(array3[1], CultureInfo.InvariantCulture), float.Parse(array3[2], CultureInfo.InvariantCulture), float.Parse(array3[3], CultureInfo.InvariantCulture)));
					break;
				case "f":
				{
					for (int j = 1; j < 4; j++)
					{
						string text3 = array3[j];
						if (!dictionary.TryGetValue(text3, out var value))
						{
							string[] array4 = text3.Split(new char[1] { '/' });
							int index = int.Parse(array4[0]) - 1;
							list4.Add(list[index]);
							if (array4.Length > 1 && !string.IsNullOrEmpty(array4[1]))
							{
								int index2 = int.Parse(array4[1]) - 1;
								list5.Add(list2[index2]);
							}
							else
							{
								list5.Add(Vector2.zero);
							}
							if (array4.Length > 2 && !string.IsNullOrEmpty(array4[2]))
							{
								int index3 = int.Parse(array4[2]) - 1;
								list6.Add(list3[index3]);
							}
							else
							{
								list6.Add(Vector3.up);
							}
							value = (dictionary[text3] = list4.Count - 1);
						}
						list7.Add(value);
					}
					break;
				}
				}
			}
			Mesh val = new Mesh();
			((Object)val).name = Path.GetFileNameWithoutExtension(filePath);
			val.vertices = new Il2CppStructArray<Vector3>(list4.ToArray());
			val.triangles = new Il2CppStructArray<int>(list7.ToArray());
			val.uv = new Il2CppStructArray<Vector2>(list5.ToArray());
			val.normals = new Il2CppStructArray<Vector3>(list6.ToArray());
			val.RecalculateBounds();
			return val;
		}
	}
	internal class PlayerData : NetworkBehaviour
	{
		public static void SendLooks(string id, int mode, int costume)
		{
			Enumerator<PlayerCharacter> enumerator = PlayerCharacter.allPlayerCharacters.GetEnumerator();
			while (enumerator.MoveNext())
			{
				PlayerCharacter current = enumerator.Current;
				string text = id + "_" + mode + "_" + costume;
				((BasePlugin)FellowshipBase.Instance).Log.LogInfo((object)("Sending looks: " + text));
				bool flag = false;
				current.texter.CompleteInput(text, ref flag);
			}
		}
	}
	public class PlayerDataStruct
	{
		public PlayerCharacter pc;

		public Transform armature;

		public Dictionary<string, Transform> meshes;

		public Vector3[] originalScales;

		public int costume;

		public List<GameObject> activeCostumes = new List<GameObject>();

		public void FindArmature(PlayerCharacter character)
		{
			pc = character;
			armature = FindChild(((Component)((Component)character).transform.root).gameObject.transform, "Armature");
		}

		public void FindMeshes()
		{
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//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_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: 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_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_023d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0242: Unknown result type (might be due to invalid IL or missing references)
			meshes = new Dictionary<string, Transform>();
			Transform[] array = (Transform[])(object)new Transform[7]
			{
				FindChild(armature, "head_mesh"),
				FindChild(armature, "torso_mesh"),
				FindChild(armature, "bottom_mesh"),
				FindChild(armature, "left_foot_mesh"),
				FindChild(armature, "right_foot_mesh"),
				FindChild(armature, "left_hand_mesh"),
				FindChild(armature, "right_hand_mesh")
			};
			meshes.Add("head", array[0]);
			meshes.Add("torso", array[1]);
			meshes.Add("bottom", array[2]);
			meshes.Add("footL", array[3]);
			meshes.Add("footR", array[4]);
			meshes.Add("handL", array[5]);
			meshes.Add("handR", array[6]);
			originalScales = (Vector3[])(object)new Vector3[8]
			{
				armature.localScale,
				((Component)meshes["head"]).transform.parent.localScale,
				((Component)meshes["torso"]).transform.parent.localScale,
				((Component)meshes["bottom"]).transform.parent.localScale,
				((Component)meshes["footL"]).transform.parent.localScale,
				((Component)meshes["footR"]).transform.parent.localScale,
				((Component)meshes["handL"]).transform.parent.localScale,
				((Component)meshes["handR"]).transform.parent.localScale
			};
		}

		public static Transform FindChild(Transform parent, string childName)
		{
			Transform result = null;
			foreach (Transform componentsInChild in ((Component)parent).GetComponentsInChildren<Transform>())
			{
				if (((Object)componentsInChild).name == childName)
				{
					result = componentsInChild;
					break;
				}
			}
			return result;
		}
	}
	[HarmonyPatch]
	internal static class RingSpawnerPatch
	{
		public static bool alreadySpawned;

		[HarmonyPostfix]
		[HarmonyPatch(typeof(PlayerCharacter), "Start")]
		private static void ResetRingSpawn(PlayerCharacter __instance)
		{
			if (((NetworkBehaviour)__instance).isLocalPlayer)
			{
				alreadySpawned = false;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(PlayerCharacter), "LateUpdate")]
		private static void SpawnRingPatch(PlayerCharacter __instance)
		{
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Expected O, but got Unknown
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			if (alreadySpawned)
			{
				return;
			}
			string filePath = Path.Combine(FellowshipBase.modelsFolder, "ring.obj");
			Mesh val = ObjMeshLoader.LoadObjFile(filePath);
			if ((Object)(object)val == (Object)null)
			{
				return;
			}
			GameObject val2 = GameObject.Find("FootyProp");
			if ((Object)(object)val2 == (Object)null)
			{
				return;
			}
			MeshFilter componentInChildren = val2.GetComponentInChildren<MeshFilter>();
			MeshRenderer componentInChildren2 = val2.GetComponentInChildren<MeshRenderer>();
			componentInChildren.mesh = val;
			if ((Object)(object)componentInChildren2 != (Object)null)
			{
				Material val3 = new Material(Shader.Find("Universal Render Pipeline/Lit"));
				val3.color = new Color(1f, 0.88f, 0f, 1f);
				val3.SetFloat("_Metallic", 0.96f);
				val3.SetFloat("_Smoothness", 0.58f);
				((Renderer)componentInChildren2).material = val3;
				GC.KeepAlive(val3);
			}
			Transform val4 = FindChild(val2.transform, "footy");
			Collider val5 = null;
			foreach (Collider component in ((Component)val4).GetComponents<Collider>())
			{
				component.enabled = false;
				val5 = component;
			}
			CapsuleCollider val6 = ((Component)val4).gameObject.AddComponent<CapsuleCollider>();
			val6.height = 0.5f;
			val6.radius = 0.1f;
			val6.direction = 0;
			((Collider)val6).material = val5.material;
			CapsuleCollider val7 = ((Component)val4).gameObject.AddComponent<CapsuleCollider>();
			val7.height = 0.5f;
			val7.radius = 0.1f;
			val7.direction = 2;
			((Collider)val7).material = val5.material;
			Transform transform = ((Component)Object.Instantiate<Transform>(val4, val4)).transform;
			((Component)transform).GetComponent<MeshFilter>().sharedMesh = null;
			transform.localRotation = Quaternion.Euler(0f, 45f, 0f);
			alreadySpawned = true;
		}

		public static Transform FindChild(Transform parent, string childName)
		{
			Transform result = null;
			foreach (Transform componentsInChild in ((Component)parent).GetComponentsInChildren<Transform>())
			{
				if (((Object)componentsInChild).name == childName)
				{
					result = componentsInChild;
					break;
				}
			}
			return result;
		}
	}
	[HarmonyPatch]
	internal static class PlayerCharacterPatch
	{
		public static int mode = 3;

		public static int costume = 0;

		public static Vector3[] originalScales;

		public static Vector3 cameraPos;

		public static GameObject player;

		public static Transform armature;

		public static Dictionary<string, Transform> meshes;

		public static List<GameObject> activeCostumes = new List<GameObject>();

		public static bool wasTabPressed;

		public static bool changed;

		public static PlayerData myPlayerData;

		public static PlayerCharacter myPlayerChar;

		public static List<PlayerDataStruct> playerStructs = new List<PlayerDataStruct>();

		public static PlayerDataStruct myPlayerStruct;

		[HarmonyPostfix]
		[HarmonyPatch(typeof(PlayerCharacter), "LateUpdate")]
		private static void resizeHeightPatch(PlayerCharacter __instance)
		{
			//IL_004a: 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_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: 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)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_018e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_019d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
			if (!((NetworkBehaviour)__instance).isLocalPlayer)
			{
				return;
			}
			if (Input.GetKeyInt((KeyCode)49) && mode != 1)
			{
				((BasePlugin)FellowshipBase.Instance).Log.LogInfo((object)"ELF");
				__instance.cameraTransform.localPosition = cameraPos + Vector3.up * 0.1f;
				ChangeBodyToElf(myPlayerStruct);
				mode = 1;
				changed = true;
			}
			else if (Input.GetKeyInt((KeyCode)50) && mode != 2)
			{
				((BasePlugin)FellowshipBase.Instance).Log.LogInfo((object)"HOBBIT");
				__instance.cameraTransform.localPosition = cameraPos + Vector3.down * 0.35f;
				ChangeBodyToHobbit(myPlayerStruct);
				mode = 2;
				changed = true;
			}
			else if (Input.GetKeyInt((KeyCode)51) && mode != 3)
			{
				((BasePlugin)FellowshipBase.Instance).Log.LogInfo((object)"HUMAN");
				__instance.cameraTransform.localPosition = cameraPos;
				ChangeBodyToHuman(myPlayerStruct);
				mode = 3;
				changed = true;
			}
			else if (Input.GetKeyInt((KeyCode)52) && mode != 4)
			{
				((BasePlugin)FellowshipBase.Instance).Log.LogInfo((object)"DWARF");
				__instance.cameraTransform.localPosition = cameraPos + Vector3.down * 0.4f;
				ChangeBodyToDwarf(myPlayerStruct);
				mode = 4;
				changed = true;
			}
			if (Input.GetKeyInt((KeyCode)9) && !wasTabPressed)
			{
				costume++;
				costume %= 4;
				DisableAllCostumes(myPlayerStruct);
				switch (mode)
				{
				case 1:
					cycleElfCostumes(myPlayerStruct, costume);
					break;
				case 2:
					cycleHobbitCostumes(myPlayerStruct, costume);
					break;
				case 3:
					cycleHumanCostumes(myPlayerStruct, costume);
					break;
				case 4:
					cycleDwarfCostumes(myPlayerStruct, costume);
					break;
				}
				changed = true;
			}
			if (changed)
			{
				changed = false;
				((BasePlugin)FellowshipBase.Instance).Log.LogInfo((object)"REFRESH");
				PlayerData.SendLooks(((NetworkBehaviour)__instance).netId.ToString(), mode, costume);
			}
			wasTabPressed = Input.GetKeyInt((KeyCode)9);
		}

		public static void ChangeBodyToElf(PlayerDataStruct ps)
		{
			//IL_004c: 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_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: 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_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: 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)
			ps.armature.localScale = new Vector3(ps.originalScales[0].x * 0.9f, ps.originalScales[0].y * 0.9f, ps.originalScales[0].z * 1.2f);
			((Component)ps.meshes["head"]).transform.parent.localScale = ps.originalScales[1] * 0.85f;
			((Component)ps.meshes["torso"]).transform.parent.localScale = ps.originalScales[2] * 1f;
			((Component)ps.meshes["bottom"]).transform.parent.localScale = ps.originalScales[3] * 0.85f;
			((Component)ps.meshes["footL"]).transform.parent.localScale = ps.originalScales[4] * 0.65f;
			((Component)ps.meshes["footR"]).transform.parent.localScale = ps.originalScales[5] * 0.65f;
			((Component)ps.meshes["handL"]).transform.parent.localScale = ps.originalScales[6] * 1f;
			((Component)ps.meshes["handR"]).transform.parent.localScale = ps.originalScales[7] * 1f;
			ps.costume = 0;
		}

		public static void ChangeBodyToHobbit(PlayerDataStruct ps)
		{
			//IL_004c: 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_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: 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_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: 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)
			ps.armature.localScale = new Vector3(ps.originalScales[0].x * 0.75f, ps.originalScales[0].y * 0.75f, ps.originalScales[0].z * 0.75f);
			((Component)ps.meshes["head"]).transform.parent.localScale = ps.originalScales[1] * 1f;
			((Component)ps.meshes["torso"]).transform.parent.localScale = ps.originalScales[2] * 1f;
			((Component)ps.meshes["bottom"]).transform.parent.localScale = ps.originalScales[3] * 1.2f;
			((Component)ps.meshes["footL"]).transform.parent.localScale = ps.originalScales[4] * 1.85f;
			((Component)ps.meshes["footR"]).transform.parent.localScale = ps.originalScales[5] * 1.85f;
			((Component)ps.meshes["handL"]).transform.parent.localScale = ps.originalScales[6] * 1f;
			((Component)ps.meshes["handR"]).transform.parent.localScale = ps.originalScales[7] * 1f;
			ps.costume = 0;
		}

		public static void ChangeBodyToHuman(PlayerDataStruct ps)
		{
			//IL_004c: 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_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: 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_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: 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)
			ps.armature.localScale = new Vector3(ps.originalScales[0].x * 1f, ps.originalScales[0].y * 1f, ps.originalScales[0].z * 1f);
			((Component)ps.meshes["head"]).transform.parent.localScale = ps.originalScales[1] * 1f;
			((Component)ps.meshes["torso"]).transform.parent.localScale = ps.originalScales[2] * 1f;
			((Component)ps.meshes["bottom"]).transform.parent.localScale = ps.originalScales[3] * 1f;
			((Component)ps.meshes["footL"]).transform.parent.localScale = ps.originalScales[4] * 1f;
			((Component)ps.meshes["footR"]).transform.parent.localScale = ps.originalScales[5] * 1f;
			((Component)ps.meshes["handL"]).transform.parent.localScale = ps.originalScales[6] * 1f;
			((Component)ps.meshes["handR"]).transform.parent.localScale = ps.originalScales[7] * 1f;
			ps.costume = 0;
		}

		public static void ChangeBodyToDwarf(PlayerDataStruct ps)
		{
			//IL_004c: 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_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: 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_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: 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)
			ps.armature.localScale = new Vector3(ps.originalScales[0].x * 0.8f, ps.originalScales[0].y * 0.8f, ps.originalScales[0].z * 0.7f);
			((Component)ps.meshes["head"]).transform.parent.localScale = ps.originalScales[1] * 1f;
			((Component)ps.meshes["torso"]).transform.parent.localScale = ps.originalScales[2] * 1.2f;
			((Component)ps.meshes["bottom"]).transform.parent.localScale = ps.originalScales[3] * 1.1f;
			((Component)ps.meshes["footL"]).transform.parent.localScale = ps.originalScales[4] * 1.5f;
			((Component)ps.meshes["footR"]).transform.parent.localScale = ps.originalScales[5] * 1.5f;
			((Component)ps.meshes["handL"]).transform.parent.localScale = ps.originalScales[6] * 1.3f;
			((Component)ps.meshes["handR"]).transform.parent.localScale = ps.originalScales[7] * 1.3f;
			ps.costume = 0;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(PlayerCharacter), "Start")]
		private static void InitializeDataPatch(PlayerCharacter __instance)
		{
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: 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_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			if (((NetworkBehaviour)__instance).isLocalPlayer)
			{
				playerStructs = new List<PlayerDataStruct>();
			}
			PlayerDataStruct playerDataStruct = new PlayerDataStruct();
			playerDataStruct.FindArmature(__instance);
			playerDataStruct.FindMeshes();
			playerStructs.Add(playerDataStruct);
			Enumerator<PlayerCharacter> enumerator = PlayerCharacter.allPlayerCharacters.GetEnumerator();
			while (enumerator.MoveNext())
			{
				PlayerCharacter pc = enumerator.Current;
				if (playerStructs.Find((PlayerDataStruct x) => (Object)(object)x.pc == (Object)(object)pc) == null)
				{
					PlayerDataStruct playerDataStruct2 = new PlayerDataStruct();
					playerDataStruct2.FindArmature(pc);
					playerDataStruct2.FindMeshes();
					playerStructs.Add(playerDataStruct2);
				}
			}
			if (!((NetworkBehaviour)__instance).isLocalPlayer)
			{
				return;
			}
			myPlayerStruct = playerDataStruct;
			player = ((Component)((Component)__instance).transform.root).gameObject;
			cameraPos = __instance.cameraTransform.localPosition;
			Transform val = Object.Instantiate<Transform>(GameObject.Find("MirrorCamera").transform.parent, __instance.cameraTransform.position + __instance.cameraTransform.forward * 2f, Quaternion.identity);
			val.LookAt(__instance.cameraTransform.position);
			foreach (Renderer componentsInChild in ((Component)val).GetComponentsInChildren<Renderer>())
			{
				componentsInChild.enabled = true;
			}
			myPlayerData = new PlayerData();
			myPlayerChar = __instance;
			PlayerData.SendLooks(((NetworkBehaviour)__instance).netId.ToString(), mode, costume);
		}

		public static void DisableAllCostumes(PlayerDataStruct ps)
		{
			if (ps.activeCostumes.Count <= 0)
			{
				return;
			}
			foreach (GameObject costume in ps.activeCostumes)
			{
				List<LooksRenderer> list = ((IEnumerable<LooksRenderer>)ps.pc.looks.headRenderers).ToList();
				list.RemoveAll((LooksRenderer x) => (Object)(object)((Component)x.renderer).gameObject == (Object)(object)costume);
				ps.pc.looks.headRenderers = new Il2CppReferenceArray<LooksRenderer>(list.ToArray());
				List<LooksRenderer> list2 = ((IEnumerable<LooksRenderer>)ps.pc.looks.torsoRenderers).ToList();
				list2.RemoveAll((LooksRenderer x) => (Object)(object)((Component)x.renderer).gameObject == (Object)(object)costume);
				ps.pc.looks.torsoRenderers = new Il2CppReferenceArray<LooksRenderer>(list2.ToArray());
				List<LooksRenderer> list3 = ((IEnumerable<LooksRenderer>)ps.pc.looks.legsRenderers).ToList();
				list3.RemoveAll((LooksRenderer x) => (Object)(object)((Component)x.renderer).gameObject == (Object)(object)costume);
				ps.pc.looks.legsRenderers = new Il2CppReferenceArray<LooksRenderer>(list3.ToArray());
				Object.Destroy((Object)(object)costume);
			}
		}

		public static void cycleHobbitCostumes(PlayerDataStruct ps, int idx)
		{
			//IL_001e: 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_003a: 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_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			switch (idx)
			{
			case 0:
				EnableCloak(ps, Color.darkOliveGreen);
				break;
			case 1:
				EnableCloak(ps, Color.saddleBrown);
				break;
			case 2:
				EnableCloak(ps, Color.tan);
				EnableSmokePipe(ps, Color.saddleBrown);
				break;
			case 3:
				EnableCloak(ps, Color.maroon);
				EnableSmokePipe(ps, Color.saddleBrown);
				break;
			}
		}

		public static void EnableCloak(PlayerDataStruct ps, Color color)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Expected O, but got Unknown
			//IL_017d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Expected O, but got Unknown
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			string filePath = Path.Combine(FellowshipBase.modelsFolder, "cloak.obj");
			Mesh val = ObjMeshLoader.LoadObjFile(filePath);
			if (!((Object)(object)val == (Object)null))
			{
				GameObject val2 = new GameObject("Cloak");
				val2.transform.parent = ((Component)ps.meshes["torso"]).transform.parent;
				val2.transform.localPosition = Vector3.zero;
				val2.transform.localRotation = Quaternion.Euler(Vector3.zero);
				val2.layer = LayerMask.NameToLayer("Player");
				MeshFilter val3 = val2.AddComponent<MeshFilter>();
				MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
				((Renderer)val4).castShadows = false;
				((Renderer)val4).shadowCastingMode = (ShadowCastingMode)1;
				val3.sharedMesh = val;
				LooksRenderer val5 = new LooksRenderer();
				val5.renderer = (Renderer)(object)val4;
				val5.SetLocal(true);
				val5.remote = true;
				if (!((NetworkBehaviour)ps.pc).isLocalPlayer)
				{
					val5.SetRemote();
				}
				Il2CppReferenceArray<LooksRenderer> torsoRenderers = ps.pc.looks.torsoRenderers;
				List<LooksRenderer> list = ((IEnumerable<LooksRenderer>)torsoRenderers).ToList();
				if (list[list.Count - 1] == null)
				{
					list[list.Count - 1] = val5;
				}
				else
				{
					list.Add(val5);
				}
				ps.pc.looks.torsoRenderers = new Il2CppReferenceArray<LooksRenderer>(list.ToArray());
				GC.KeepAlive(val5);
				Material val6 = new Material(Shader.Find("Universal Render Pipeline/Lit"));
				val6.color = color;
				val6.SetFloat("_Metallic", 0f);
				val6.SetFloat("_Smoothness", 0f);
				((Renderer)val4).material = val6;
				GC.KeepAlive(val6);
				ps.activeCostumes.Add(val2);
			}
		}

		public static void EnableSmokePipe(PlayerDataStruct ps, Color color)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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_0089: 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_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Expected O, but got Unknown
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Expected O, but got Unknown
			//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
			string filePath = Path.Combine(FellowshipBase.modelsFolder, "smoke-pipe.obj");
			Mesh val = ObjMeshLoader.LoadObjFile(filePath);
			if (!((Object)(object)val == (Object)null))
			{
				GameObject val2 = new GameObject("SmokePipe");
				val2.transform.parent = ((Component)ps.meshes["head"]).transform.parent;
				val2.transform.localPosition = Vector3.zero;
				val2.transform.localRotation = Quaternion.Euler(Vector3.zero);
				Transform transform = val2.transform;
				transform.localScale *= 0.35f;
				val2.layer = LayerMask.NameToLayer("Player");
				MeshFilter val3 = val2.AddComponent<MeshFilter>();
				MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
				((Renderer)val4).castShadows = false;
				((Renderer)val4).shadowCastingMode = (ShadowCastingMode)1;
				val3.sharedMesh = val;
				LooksRenderer val5 = new LooksRenderer();
				val5.renderer = (Renderer)(object)val4;
				val5.SetLocal(true);
				val5.remote = true;
				if (!((NetworkBehaviour)ps.pc).isLocalPlayer)
				{
					val5.SetRemote();
				}
				Il2CppReferenceArray<LooksRenderer> headRenderers = ps.pc.looks.headRenderers;
				List<LooksRenderer> list = ((IEnumerable<LooksRenderer>)headRenderers).ToList();
				if (list[list.Count - 1] == null)
				{
					list[list.Count - 1] = val5;
				}
				else
				{
					list.Add(val5);
				}
				ps.pc.looks.headRenderers = new Il2CppReferenceArray<LooksRenderer>(list.ToArray());
				GC.KeepAlive(val5);
				Material val6 = new Material(Shader.Find("Universal Render Pipeline/Lit"));
				val6.color = color;
				val6.SetFloat("_Metallic", 0f);
				val6.SetFloat("_Smoothness", 0f);
				((Renderer)val4).material = val6;
				GC.KeepAlive(val6);
				ps.activeCostumes.Add(val2);
			}
		}

		public static void cycleElfCostumes(PlayerDataStruct ps, int idx)
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: 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_0064: Unknown result type (might be due to invalid IL or missing references)
			switch (idx)
			{
			case 0:
				EnableEars(ps);
				EnableElfCloak(ps, Color.darkOliveGreen);
				break;
			case 1:
				EnableEars(ps);
				EnableElfCloak(ps, Color.darkSeaGreen);
				break;
			case 2:
				EnableEars(ps);
				EnableElfCloak(ps, Color.floralWhite);
				break;
			case 3:
				EnableEars(ps);
				EnableElfCloak(ps, Color.maroon);
				break;
			}
		}

		public static void EnableEars(PlayerDataStruct ps)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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_0089: 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_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Expected O, but got Unknown
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Expected O, but got Unknown
			//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
			string filePath = Path.Combine(FellowshipBase.modelsFolder, "ears.obj");
			Mesh val = ObjMeshLoader.LoadObjFile(filePath);
			if (!((Object)(object)val == (Object)null))
			{
				GameObject val2 = new GameObject("Ears");
				val2.transform.parent = ((Component)ps.meshes["head"]).transform.parent;
				val2.transform.localPosition = Vector3.zero;
				val2.transform.localRotation = Quaternion.Euler(Vector3.zero);
				Transform transform = val2.transform;
				transform.localScale *= 0.2f;
				val2.layer = LayerMask.NameToLayer("Player");
				MeshFilter val3 = val2.AddComponent<MeshFilter>();
				MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
				((Renderer)val4).castShadows = false;
				((Renderer)val4).shadowCastingMode = (ShadowCastingMode)1;
				val3.sharedMesh = val;
				LooksRenderer val5 = new LooksRenderer();
				val5.renderer = (Renderer)(object)val4;
				val5.SetLocal(true);
				val5.remote = true;
				if (!((NetworkBehaviour)ps.pc).isLocalPlayer)
				{
					val5.SetRemote();
				}
				Il2CppReferenceArray<LooksRenderer> headRenderers = ps.pc.looks.headRenderers;
				List<LooksRenderer> list = ((IEnumerable<LooksRenderer>)headRenderers).ToList();
				if (list[list.Count - 1] == null)
				{
					list[list.Count - 1] = val5;
				}
				else
				{
					list.Add(val5);
				}
				ps.pc.looks.headRenderers = new Il2CppReferenceArray<LooksRenderer>(list.ToArray());
				GC.KeepAlive(val5);
				Material val6 = new Material(Shader.Find("Universal Render Pipeline/Lit"));
				val6.color = Color.sandyBrown;
				val6.SetFloat("_Metallic", 0f);
				val6.SetFloat("_Smoothness", 0f);
				((Renderer)val4).material = val6;
				GC.KeepAlive(val6);
				ps.activeCostumes.Add(val2);
			}
		}

		public static void EnableElfCloak(PlayerDataStruct ps, Color color)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Expected O, but got Unknown
			//IL_017d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Expected O, but got Unknown
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			string filePath = Path.Combine(FellowshipBase.modelsFolder, "elf-cloak.obj");
			Mesh val = ObjMeshLoader.LoadObjFile(filePath);
			if (!((Object)(object)val == (Object)null))
			{
				GameObject val2 = new GameObject("ElfCloak");
				val2.transform.parent = ((Component)ps.meshes["torso"]).transform.parent;
				val2.transform.localPosition = Vector3.zero;
				val2.transform.localRotation = Quaternion.Euler(Vector3.zero);
				val2.layer = LayerMask.NameToLayer("Player");
				MeshFilter val3 = val2.AddComponent<MeshFilter>();
				MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
				((Renderer)val4).castShadows = false;
				((Renderer)val4).shadowCastingMode = (ShadowCastingMode)1;
				val3.sharedMesh = val;
				LooksRenderer val5 = new LooksRenderer();
				val5.renderer = (Renderer)(object)val4;
				val5.SetLocal(true);
				val5.remote = true;
				if (!((NetworkBehaviour)ps.pc).isLocalPlayer)
				{
					val5.SetRemote();
				}
				Il2CppReferenceArray<LooksRenderer> torsoRenderers = ps.pc.looks.torsoRenderers;
				List<LooksRenderer> list = ((IEnumerable<LooksRenderer>)torsoRenderers).ToList();
				if (list[list.Count - 1] == null)
				{
					list[list.Count - 1] = val5;
				}
				else
				{
					list.Add(val5);
				}
				ps.pc.looks.torsoRenderers = new Il2CppReferenceArray<LooksRenderer>(list.ToArray());
				GC.KeepAlive(val5);
				Material val6 = new Material(Shader.Find("Universal Render Pipeline/Lit"));
				val6.color = color;
				val6.SetFloat("_Metallic", 0f);
				val6.SetFloat("_Smoothness", 0f);
				((Renderer)val4).material = val6;
				GC.KeepAlive(val6);
				ps.activeCostumes.Add(val2);
			}
		}

		public static void cycleHumanCostumes(PlayerDataStruct ps, int idx)
		{
			//IL_0020: 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_003a: 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_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: 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)
			switch (idx)
			{
			case 0:
				break;
			case 1:
				EnableWizardHat(ps, Color.darkSlateBlue);
				EnableLongBeard(ps, Color.floralWhite);
				break;
			case 2:
				EnableWizardHat(ps, Color.darkSlateGray);
				EnableLongBeard(ps, Color.floralWhite);
				EnableSmokePipe(ps, Color.saddleBrown);
				break;
			case 3:
				EnableWizardHat(ps, Color.floralWhite);
				EnableLongBeard(ps, Color.whiteSmoke);
				EnableSmokePipe(ps, Color.saddleBrown);
				break;
			}
		}

		public static void EnableWizardHat(PlayerDataStruct ps, Color color)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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_0089: 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_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Expected O, but got Unknown
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Expected O, but got Unknown
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			string filePath = Path.Combine(FellowshipBase.modelsFolder, "wizard-hat.obj");
			Mesh val = ObjMeshLoader.LoadObjFile(filePath);
			if (!((Object)(object)val == (Object)null))
			{
				GameObject val2 = new GameObject("WizardHat");
				val2.transform.parent = ((Component)ps.meshes["head"]).transform.parent;
				val2.transform.localPosition = Vector3.zero;
				val2.transform.localRotation = Quaternion.Euler(Vector3.zero);
				Transform transform = val2.transform;
				transform.localScale *= 0.55f;
				Transform transform2 = val2.transform;
				transform2.position += Vector3.up * 0.08f;
				val2.layer = LayerMask.NameToLayer("Player");
				MeshFilter val3 = val2.AddComponent<MeshFilter>();
				MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
				((Renderer)val4).castShadows = false;
				((Renderer)val4).shadowCastingMode = (ShadowCastingMode)1;
				val3.sharedMesh = val;
				LooksRenderer val5 = new LooksRenderer();
				val5.renderer = (Renderer)(object)val4;
				val5.SetLocal(true);
				val5.remote = true;
				if (!((NetworkBehaviour)ps.pc).isLocalPlayer)
				{
					val5.SetRemote();
				}
				Il2CppReferenceArray<LooksRenderer> headRenderers = ps.pc.looks.headRenderers;
				List<LooksRenderer> list = ((IEnumerable<LooksRenderer>)headRenderers).ToList();
				if (list[list.Count - 1] == null)
				{
					list[list.Count - 1] = val5;
				}
				else
				{
					list.Add(val5);
				}
				ps.pc.looks.headRenderers = new Il2CppReferenceArray<LooksRenderer>(list.ToArray());
				GC.KeepAlive(val5);
				Material val6 = new Material(Shader.Find("Universal Render Pipeline/Lit"));
				val6.color = color;
				val6.SetFloat("_Metallic", 0f);
				val6.SetFloat("_Smoothness", 0f);
				((Renderer)val4).material = val6;
				GC.KeepAlive(val6);
				ps.activeCostumes.Add(val2);
			}
		}

		public static void EnableLongBeard(PlayerDataStruct ps, Color color)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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_0089: 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_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Expected O, but got Unknown
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Expected O, but got Unknown
			//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
			string filePath = Path.Combine(FellowshipBase.modelsFolder, "long-beard.obj");
			Mesh val = ObjMeshLoader.LoadObjFile(filePath);
			if (!((Object)(object)val == (Object)null))
			{
				GameObject val2 = new GameObject("LongBeard");
				val2.transform.parent = ((Component)ps.meshes["head"]).transform.parent;
				val2.transform.localPosition = Vector3.zero;
				val2.transform.localRotation = Quaternion.Euler(Vector3.zero);
				Transform transform = val2.transform;
				transform.localScale *= 0.35f;
				val2.layer = LayerMask.NameToLayer("Player");
				MeshFilter val3 = val2.AddComponent<MeshFilter>();
				MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
				((Renderer)val4).castShadows = false;
				((Renderer)val4).shadowCastingMode = (ShadowCastingMode)1;
				val3.sharedMesh = val;
				LooksRenderer val5 = new LooksRenderer();
				val5.renderer = (Renderer)(object)val4;
				val5.SetLocal(true);
				val5.remote = true;
				if (!((NetworkBehaviour)ps.pc).isLocalPlayer)
				{
					val5.SetRemote();
				}
				Il2CppReferenceArray<LooksRenderer> headRenderers = ps.pc.looks.headRenderers;
				List<LooksRenderer> list = ((IEnumerable<LooksRenderer>)headRenderers).ToList();
				if (list[list.Count - 1] == null)
				{
					list[list.Count - 1] = val5;
				}
				else
				{
					list.Add(val5);
				}
				ps.pc.looks.headRenderers = new Il2CppReferenceArray<LooksRenderer>(list.ToArray());
				GC.KeepAlive(val5);
				Material val6 = new Material(Shader.Find("Universal Render Pipeline/Lit"));
				val6.color = color;
				val6.SetFloat("_Metallic", 0f);
				val6.SetFloat("_Smoothness", 0f);
				((Renderer)val4).material = val6;
				GC.KeepAlive(val6);
				ps.activeCostumes.Add(val2);
			}
		}

		public static void cycleDwarfCostumes(PlayerDataStruct ps, int idx)
		{
			//IL_001e: 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_0038: 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_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: 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_0084: Unknown result type (might be due to invalid IL or missing references)
			switch (idx)
			{
			case 0:
				EnableDwarfHelm(ps, Color.darkGray);
				break;
			case 1:
				EnableDwarfHelm(ps, Color.darkGray);
				EnableMustache(ps, Color.saddleBrown);
				break;
			case 2:
				EnableDwarfHelm(ps, Color.darkGray);
				EnableMustache(ps, Color.saddleBrown);
				EnableBeard(ps, Color.saddleBrown);
				break;
			case 3:
				EnableDwarfHelm(ps, Color.darkGoldenRod);
				EnableMustache(ps, Color.floralWhite);
				EnableBeard(ps, Color.floralWhite);
				break;
			}
		}

		public static void EnableDwarfHelm(PlayerDataStruct ps, Color color)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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_0089: 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_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Expected O, but got Unknown
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Expected O, but got Unknown
			//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
			string filePath = Path.Combine(FellowshipBase.modelsFolder, "dwarf-helm.obj");
			Mesh val = ObjMeshLoader.LoadObjFile(filePath);
			if (!((Object)(object)val == (Object)null))
			{
				GameObject val2 = new GameObject("DwarfHelm");
				val2.transform.parent = ((Component)ps.meshes["head"]).transform.parent;
				val2.transform.localPosition = Vector3.zero;
				val2.transform.localRotation = Quaternion.Euler(Vector3.zero);
				Transform transform = val2.transform;
				transform.localScale *= 0.35f;
				val2.layer = LayerMask.NameToLayer("Player");
				MeshFilter val3 = val2.AddComponent<MeshFilter>();
				MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
				((Renderer)val4).castShadows = false;
				((Renderer)val4).shadowCastingMode = (ShadowCastingMode)1;
				val3.sharedMesh = val;
				LooksRenderer val5 = new LooksRenderer();
				val5.renderer = (Renderer)(object)val4;
				val5.SetLocal(true);
				val5.remote = true;
				if (!((NetworkBehaviour)ps.pc).isLocalPlayer)
				{
					val5.SetRemote();
				}
				Il2CppReferenceArray<LooksRenderer> headRenderers = ps.pc.looks.headRenderers;
				List<LooksRenderer> list = ((IEnumerable<LooksRenderer>)headRenderers).ToList();
				if (list[list.Count - 1] == null)
				{
					list[list.Count - 1] = val5;
				}
				else
				{
					list.Add(val5);
				}
				ps.pc.looks.headRenderers = new Il2CppReferenceArray<LooksRenderer>(list.ToArray());
				GC.KeepAlive(val5);
				Material val6 = new Material(Shader.Find("Universal Render Pipeline/Lit"));
				val6.color = color;
				val6.SetFloat("_Metallic", 0f);
				val6.SetFloat("_Smoothness", 0f);
				((Renderer)val4).material = val6;
				GC.KeepAlive(val6);
				ps.activeCostumes.Add(val2);
			}
		}

		public static void EnableMustache(PlayerDataStruct ps, Color color)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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_0089: 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_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Expected O, but got Unknown
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Expected O, but got Unknown
			//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
			string filePath = Path.Combine(FellowshipBase.modelsFolder, "mustache.obj");
			Mesh val = ObjMeshLoader.LoadObjFile(filePath);
			if (!((Object)(object)val == (Object)null))
			{
				GameObject val2 = new GameObject("Mustache");
				val2.transform.parent = ((Component)ps.meshes["head"]).transform.parent;
				val2.transform.localPosition = Vector3.zero;
				val2.transform.localRotation = Quaternion.Euler(Vector3.zero);
				Transform transform = val2.transform;
				transform.localScale *= 0.35f;
				val2.layer = LayerMask.NameToLayer("Player");
				MeshFilter val3 = val2.AddComponent<MeshFilter>();
				MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
				((Renderer)val4).castShadows = false;
				((Renderer)val4).shadowCastingMode = (ShadowCastingMode)1;
				val3.sharedMesh = val;
				LooksRenderer val5 = new LooksRenderer();
				val5.renderer = (Renderer)(object)val4;
				val5.SetLocal(true);
				val5.remote = true;
				if (!((NetworkBehaviour)ps.pc).isLocalPlayer)
				{
					val5.SetRemote();
				}
				Il2CppReferenceArray<LooksRenderer> headRenderers = ps.pc.looks.headRenderers;
				List<LooksRenderer> list = ((IEnumerable<LooksRenderer>)headRenderers).ToList();
				if (list[list.Count - 1] == null)
				{
					list[list.Count - 1] = val5;
				}
				else
				{
					list.Add(val5);
				}
				ps.pc.looks.headRenderers = new Il2CppReferenceArray<LooksRenderer>(list.ToArray());
				GC.KeepAlive(val5);
				Material val6 = new Material(Shader.Find("Universal Render Pipeline/Lit"));
				val6.color = color;
				val6.SetFloat("_Metallic", 0f);
				val6.SetFloat("_Smoothness", 0f);
				((Renderer)val4).material = val6;
				GC.KeepAlive(val6);
				ps.activeCostumes.Add(val2);
			}
		}

		public static void EnableBeard(PlayerDataStruct ps, Color color)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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_0089: 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_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Expected O, but got Unknown
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Expected O, but got Unknown
			//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
			string filePath = Path.Combine(FellowshipBase.modelsFolder, "beard.obj");
			Mesh val = ObjMeshLoader.LoadObjFile(filePath);
			if (!((Object)(object)val == (Object)null))
			{
				GameObject val2 = new GameObject("Beard");
				val2.transform.parent = ((Component)ps.meshes["head"]).transform.parent;
				val2.transform.localPosition = Vector3.zero;
				val2.transform.localRotation = Quaternion.Euler(Vector3.zero);
				Transform transform = val2.transform;
				transform.localScale *= 0.35f;
				val2.layer = LayerMask.NameToLayer("Player");
				MeshFilter val3 = val2.AddComponent<MeshFilter>();
				MeshRenderer val4 = val2.AddComponent<MeshRenderer>();
				((Renderer)val4).castShadows = false;
				((Renderer)val4).shadowCastingMode = (ShadowCastingMode)1;
				val3.sharedMesh = val;
				LooksRenderer val5 = new LooksRenderer();
				val5.renderer = (Renderer)(object)val4;
				val5.SetLocal(true);
				val5.remote = true;
				if (!((NetworkBehaviour)ps.pc).isLocalPlayer)
				{
					val5.SetRemote();
				}
				Il2CppReferenceArray<LooksRenderer> headRenderers = ps.pc.looks.headRenderers;
				List<LooksRenderer> list = ((IEnumerable<LooksRenderer>)headRenderers).ToList();
				if (list[list.Count - 1] == null)
				{
					list[list.Count - 1] = val5;
				}
				else
				{
					list.Add(val5);
				}
				ps.pc.looks.headRenderers = new Il2CppReferenceArray<LooksRenderer>(list.ToArray());
				GC.KeepAlive(val5);
				Material val6 = new Material(Shader.Find("Universal Render Pipeline/Lit"));
				val6.color = color;
				val6.SetFloat("_Metallic", 0f);
				val6.SetFloat("_Smoothness", 0f);
				((Renderer)val4).material = val6;
				GC.KeepAlive(val6);
				ps.activeCostumes.Add(val2);
			}
		}

		public static Transform FindChild(Transform parent, string childName)
		{
			Transform result = null;
			foreach (Transform componentsInChild in ((Component)parent).GetComponentsInChildren<Transform>())
			{
				if (((Object)componentsInChild).name == childName)
				{
					result = componentsInChild;
					break;
				}
			}
			return result;
		}

		public static string AllLayersToString()
		{
			string[] value = (from i in Enumerable.Range(0, 32)
				select LayerMask.LayerToName(i) into name
				where !string.IsNullOrEmpty(name)
				select name).ToArray();
			return string.Join(", ", value);
		}

		public static string HierarchyToString(GameObject target, string indent = "")
		{
			StringBuilder stringBuilder = new StringBuilder();
			GetHierarchyString(target.transform, indent, stringBuilder, 0);
			return stringBuilder.ToString();
		}

		private static void GetHierarchyString(Transform current, string indent, StringBuilder sb, int level)
		{
			sb.AppendLine(indent + "└── " + ((Object)current).name);
			int num = level + 1;
			if (num >= 3)
			{
				return;
			}
			foreach (Transform componentsInChild in ((Component)current).GetComponentsInChildren<Transform>())
			{
				GetHierarchyString(componentsInChild, indent + "    ", sb, num);
			}
		}
	}
}