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);
}
}
}
}