using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Core.Logging.Interpolation; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using HarmonyLib; using Il2CppInterop.Runtime.Injection; using Il2CppInterop.Runtime.InteropTypes; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSystem.Collections.Generic; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("BigWok")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("BigWok")] [assembly: AssemblyTitle("BigWok")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace bigwok { public static class MyPluginInfo { public const string PLUGIN_GUID = "BigWok"; public const string PLUGIN_NAME = "BigWok"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace BigWok { public enum BodyPartType { Nose, Foot } [BepInPlugin("deck.bigwalk.bigwok", "BigWok", "1.0.0")] public class Plugin : BasePlugin { public const string Guid = "deck.bigwalk.bigwok"; public const string Name = "BigWok"; public const string Version = "1.0.0"; public static ManualLogSource Log; public static ConfigEntry Enabled; public static ConfigEntry ObjFile; public static ConfigEntry InvertFaces; public static ConfigEntry ReplaceNose; public static ConfigEntry ReplaceFeet; public static ConfigEntry AutoFit; public static ConfigEntry FlipDirection; public static ConfigEntry Scale; public static ConfigEntry ScaleX; public static ConfigEntry ScaleY; public static ConfigEntry ScaleZ; public static ConfigEntry RotX; public static ConfigEntry RotY; public static ConfigEntry RotZ; public static ConfigEntry FootRotX; public static ConfigEntry FootRotY; public static ConfigEntry FootOffsetY; public static ConfigEntry FootOffsetZ; public static ConfigEntry OffsetX; public static ConfigEntry OffsetY; public static ConfigEntry OffsetZ; public static ConfigEntry DumpHierarchy; public override void Load() { //IL_0328: Unknown result type (might be due to invalid IL or missing references) //IL_032d: Unknown result type (might be due to invalid IL or missing references) //IL_0337: Expected O, but got Unknown Log = ((BasePlugin)this).Log; Enabled = ((BasePlugin)this).Config.Bind("General", "Enabled", true, "Master toggle to enable or disable BIG WOK."); ObjFile = ((BasePlugin)this).Config.Bind("General", "ObjFile", "wok.obj", "Wavefront .obj file to load for the replacement mesh."); InvertFaces = ((BasePlugin)this).Config.Bind("General", "InvertFaces", false, "Invert triangle face winding if model renders inside-out."); ReplaceNose = ((BasePlugin)this).Config.Bind("Body Parts", "ReplaceNose", true, "Replace the character's nose with a wok."); ReplaceFeet = ((BasePlugin)this).Config.Bind("Body Parts", "ReplaceFeet", true, "Replace the character's feet with woks."); AutoFit = ((BasePlugin)this).Config.Bind("Transform", "AutoFit", true, "Automatically scale the wok to fit target mesh bounds."); FlipDirection = ((BasePlugin)this).Config.Bind("Transform", "FlipDirection", true, "Flip model orientation end-for-end."); Scale = ((BasePlugin)this).Config.Bind("Transform", "Scale", 1f, "Global scale multiplier."); ScaleX = ((BasePlugin)this).Config.Bind("Transform", "ScaleX", 1f, "Scale factor along X axis."); ScaleY = ((BasePlugin)this).Config.Bind("Transform", "ScaleY", 1f, "Scale factor along Y axis."); ScaleZ = ((BasePlugin)this).Config.Bind("Transform", "ScaleZ", 1f, "Scale factor along Z axis."); RotX = ((BasePlugin)this).Config.Bind("Transform", "RotationX", 0f, "Rotation offset around X axis in degrees."); RotY = ((BasePlugin)this).Config.Bind("Transform", "RotationY", 0f, "Rotation offset around Y axis in degrees."); RotZ = ((BasePlugin)this).Config.Bind("Transform", "RotationZ", -90f, "Rotation offset around Z axis in degrees."); FootRotX = ((BasePlugin)this).Config.Bind("Transform", "FootRotationX", -20f, "X-axis tilt correction to keep feet flat when knees bend."); FootRotY = ((BasePlugin)this).Config.Bind("Transform", "FootRotationY", 90f, "Extra Y-axis rotation offset applied specifically to feet to face forward."); FootOffsetY = ((BasePlugin)this).Config.Bind("Transform", "FootOffsetY", 0.18f, "Vertical position nudge to lift woks clear of the ground."); FootOffsetZ = ((BasePlugin)this).Config.Bind("Transform", "FootOffsetZ", 0.02f, "Forward/backward position nudge for feet."); OffsetX = ((BasePlugin)this).Config.Bind("Transform", "OffsetX", 0f, "Local position offset nudge along X."); OffsetY = ((BasePlugin)this).Config.Bind("Transform", "OffsetY", 0f, "Local position offset nudge along Y."); OffsetZ = ((BasePlugin)this).Config.Bind("Transform", "OffsetZ", 0f, "Local position offset nudge along Z."); DumpHierarchy = ((BasePlugin)this).Config.Bind("Debug", "DumpHierarchy", false, "Dump full transform hierarchy tree into BepInEx logs."); Harmony.CreateAndPatchAll(typeof(WokPatches), "deck.bigwalk.bigwok"); ClassInjector.RegisterTypeInIl2Cpp(); GameObject val = new GameObject("BigWokRuntime") { hideFlags = (HideFlags)61 }; Object.DontDestroyOnLoad((Object)(object)val); val.AddComponent(); Log.LogInfo((object)"BIG WOK plugin initialized successfully."); } } [HarmonyPatch] internal static class WokPatches { [HarmonyPostfix] [HarmonyPatch(typeof(PlayerLips), "Initialize")] private static void OnLipsInitialized(PlayerLips __instance) { if (!Plugin.Enabled.Value || __instance == null) { return; } Component val = ((Il2CppObjectBase)__instance).Cast(); if ((Object)(object)val != (Object)null && (Object)(object)val.gameObject != (Object)null) { PlayerCharacter componentInParent = val.gameObject.GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null) { WokRuntime.Queue(componentInParent); } } } } public class WokRuntime : MonoBehaviour { private static readonly List Pending = new List(); private bool _loaded; private float _nextSweep; public WokRuntime(IntPtr ptr) : base(ptr) { } public static void Queue(PlayerCharacter character) { lock (Pending) { Pending.Add(character); } } private void Update() { if (!_loaded) { _loaded = true; WokSwapper.LoadModel(); } if (Pending.Count > 0) { PlayerCharacter[] array; lock (Pending) { array = Pending.ToArray(); Pending.Clear(); } PlayerCharacter[] array2 = array; foreach (PlayerCharacter val in array2) { if ((Object)(object)val != (Object)null) { WokSwapper.ApplyCharacter(val); } } } if (Time.unscaledTime >= _nextSweep) { _nextSweep = Time.unscaledTime + 3f; SweepNow(); } } private static void SweepNow() { if (!Plugin.Enabled.Value) { return; } try { List allPlayerCharacters = PlayerCharacter.allPlayerCharacters; if (allPlayerCharacters == null) { return; } for (int i = 0; i < allPlayerCharacters.Count; i++) { PlayerCharacter val = allPlayerCharacters[i]; if ((Object)(object)val != (Object)null) { WokSwapper.ApplyCharacter(val); } } } catch { } } } internal static class WokSwapper { private static Mesh _source; private static readonly Dictionary Originals = new Dictionary(); private static readonly Dictionary Fitted = new Dictionary(); public static bool LoadModel() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Expected O, but got Unknown string text = ResolveModelPath(Plugin.ObjFile.Value); bool flag = default(bool); if (text == null) { ManualLogSource log = Plugin.Log; BepInExErrorLogInterpolatedStringHandler val = new BepInExErrorLogInterpolatedStringHandler(43, 2, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Model '"); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(Plugin.ObjFile.Value); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("' not found next to plugin or under "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(Paths.PluginPath); } log.LogError(val); return false; } string error; Mesh val2 = ObjMesh.Load(text, Plugin.InvertFaces.Value, out error); if ((Object)(object)val2 == (Object)null) { ManualLogSource log2 = Plugin.Log; BepInExErrorLogInterpolatedStringHandler val = new BepInExErrorLogInterpolatedStringHandler(17, 2, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Failed to read "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(Path.GetFileName(text)); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(": "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(error); } log2.LogError(val); return false; } ((Object)val2).hideFlags = (HideFlags)61; _source = val2; Fitted.Clear(); ManualLogSource log3 = Plugin.Log; BepInExInfoLogInterpolatedStringHandler val3 = new BepInExInfoLogInterpolatedStringHandler(20, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("Successfully loaded "); ((BepInExLogInterpolatedStringHandler)val3).AppendFormatted(Path.GetFileName(text)); } log3.LogInfo(val3); return true; } private static string ResolveModelPath(string file) { if (string.IsNullOrEmpty(file)) { return null; } if (Path.IsPathRooted(file) && File.Exists(file)) { return file; } string directoryName = Path.GetDirectoryName(typeof(WokSwapper).Assembly.Location); if (!string.IsNullOrEmpty(directoryName)) { string text = Path.Combine(directoryName, file); if (File.Exists(text)) { return text; } } try { if (!string.IsNullOrEmpty(Paths.PluginPath) && Directory.Exists(Paths.PluginPath)) { string[] files = Directory.GetFiles(Paths.PluginPath, Path.GetFileName(file), SearchOption.AllDirectories); if (files.Length != 0) { return files[0]; } } } catch { } return null; } public static void ApplyCharacter(PlayerCharacter character) { if (!((Object)(object)character == (Object)null) && !((Object)(object)_source == (Object)null)) { if (Plugin.ReplaceNose.Value) { ApplyPart(character, BodyPartType.Nose); } if (Plugin.ReplaceFeet.Value) { ApplyPart(character, BodyPartType.Foot); } } } private static void ApplyPart(PlayerCharacter character, BodyPartType part) { List list = FindRenderersForPart(character, part); foreach (Renderer item in list) { if (!((Object)(object)item == (Object)null)) { int instanceID = ((Object)item).GetInstanceID(); Mesh mesh = GetMesh(item); if ((Object)(object)mesh != (Object)null && !Originals.ContainsKey(instanceID)) { Originals[instanceID] = mesh; } Mesh val = (Originals.ContainsKey(instanceID) ? Originals[instanceID] : mesh); if ((Object)(object)val != (Object)null) { SetMesh(item, BuildFitted(val, item, part), part); } } } } private static List FindRenderersForPart(PlayerCharacter character, BodyPartType part) { List list = new List(); if (part == BodyPartType.Nose && character.lips != null) { try { Transform lipTransform = character.lips.lipTransform; if ((Object)(object)lipTransform != (Object)null) { Renderer[] array = Il2CppArrayBase.op_Implicit(((Component)lipTransform).GetComponentsInChildren(true)); Renderer[] array2 = array; foreach (Renderer val in array2) { if ((Object)(object)val != (Object)null) { list.Add(val); } } } } catch { } if (list.Count > 0) { return list; } } Renderer[] array3 = Il2CppArrayBase.op_Implicit(((Component)character).GetComponentsInChildren(true)); Renderer[] array4 = array3; foreach (Renderer val2 in array4) { if (!((Object)(object)val2 == (Object)null)) { string text = ((Object)((Component)val2).gameObject).name.ToLower(); if (part == BodyPartType.Foot && (text.Contains("foot") || text.Contains("ankle") || text.Contains("toe"))) { list.Add(val2); } } } return list; } private static Mesh GetMesh(Renderer r) { SkinnedMeshRenderer val = ((Il2CppObjectBase)r).TryCast(); if ((Object)(object)val != (Object)null) { return val.sharedMesh; } MeshFilter component = ((Component)r).GetComponent(); return ((Object)(object)component != (Object)null) ? component.sharedMesh : null; } private static void SetMesh(Renderer r, Mesh mesh, BodyPartType part) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Expected O, but got Unknown //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)mesh == (Object)null) { return; } SkinnedMeshRenderer val = ((Il2CppObjectBase)r).TryCast(); if ((Object)(object)val != (Object)null) { ((Renderer)val).enabled = false; Transform transform = ((Component)val).transform; Transform val2 = transform.Find("WokFootInstance"); if ((Object)(object)val2 == (Object)null) { GameObject val3 = new GameObject("WokFootInstance"); val3.transform.SetParent(transform, false); val2 = val3.transform; } if (part == BodyPartType.Foot) { val2.localPosition = new Vector3(0f, Plugin.FootOffsetY.Value + 0.35f, Plugin.FootOffsetZ.Value - 0.1f); val2.localRotation = Quaternion.Euler(90f + Plugin.FootRotX.Value, 0f + Plugin.FootRotY.Value, 0f); val2.localRotation = Quaternion.Euler(45f + Plugin.FootRotX.Value, Plugin.FootRotY.Value, 0f); } MeshFilter val4 = ((Component)val2).gameObject.GetComponent() ?? ((Component)val2).gameObject.AddComponent(); MeshRenderer val5 = ((Component)val2).gameObject.GetComponent() ?? ((Component)val2).gameObject.AddComponent(); val4.sharedMesh = mesh; ((Renderer)val5).sharedMaterials = ((Renderer)val).sharedMaterials; } else { MeshFilter component = ((Component)r).GetComponent(); if ((Object)(object)component != (Object)null) { component.sharedMesh = mesh; } } } private static Mesh BuildFitted(Mesh original, Renderer renderer, BodyPartType part) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0157: 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_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018c: 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_0198: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Expected O, but got Unknown //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0068: 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_0086: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: 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_00bd: 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_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) int instanceID = ((Object)original).GetInstanceID(); if (Fitted.TryGetValue(instanceID, out var value) && (Object)(object)value != (Object)null) { return value; } Vector3 val = Vector3.zero; Quaternion identity = Quaternion.identity; float num = 1f; if (Plugin.AutoFit.Value) { Bounds bounds = original.bounds; float num2 = Mathf.Max(new float[3] { ((Bounds)(ref bounds)).size.x, ((Bounds)(ref bounds)).size.y, ((Bounds)(ref bounds)).size.z }); Bounds bounds2 = _source.bounds; float num3 = Mathf.Max(new float[3] { ((Bounds)(ref bounds2)).size.x, ((Bounds)(ref bounds2)).size.y, ((Bounds)(ref bounds2)).size.z }); num = num2 / Mathf.Max(num3, 0.0001f); val = ((Bounds)(ref bounds)).center; } Vector3 val2 = new Vector3(Plugin.ScaleX.Value, Plugin.ScaleY.Value, Plugin.ScaleZ.Value) * (Plugin.Scale.Value * num); Vector3 val3 = default(Vector3); ((Vector3)(ref val3))..ctor(Plugin.RotX.Value, Plugin.RotY.Value, Plugin.RotZ.Value); Quaternion val4 = identity * Quaternion.Euler(val3); Vector3 val5 = val + new Vector3(Plugin.OffsetX.Value, Plugin.OffsetY.Value, Plugin.OffsetZ.Value); Bounds bounds3 = _source.bounds; Matrix4x4 val6 = Matrix4x4.Translate(new Vector3(0f - ((Bounds)(ref bounds3)).center.x, 0f - ((Bounds)(ref bounds3)).center.y, 0f - ((Bounds)(ref bounds3)).min.z)); Matrix4x4 val7 = Matrix4x4.TRS(val5, val4, val2) * val6; Mesh val8 = new Mesh { name = ((Object)_source).name + "_fitted", hideFlags = (HideFlags)61 }; Il2CppStructArray vertices = _source.vertices; Il2CppStructArray val9 = new Il2CppStructArray((long)((Il2CppArrayBase)(object)vertices).Length); for (int i = 0; i < ((Il2CppArrayBase)(object)vertices).Length; i++) { ((Il2CppArrayBase)(object)val9)[i] = ((Matrix4x4)(ref val7)).MultiplyPoint3x4(((Il2CppArrayBase)(object)vertices)[i]); } val8.vertices = val9; if (_source.uv != null && ((Il2CppArrayBase)(object)_source.uv).Length == ((Il2CppArrayBase)(object)vertices).Length) { val8.uv = _source.uv; } val8.triangles = _source.triangles; val8.RecalculateNormals(); val8.RecalculateTangents(); val8.RecalculateBounds(); Fitted[instanceID] = val8; return val8; } } internal static class ObjMesh { private static readonly char[] Sep = new char[2] { ' ', '\t' }; public static Mesh Load(string path, bool invert, out string error) { //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0264: Expected O, but got Unknown //IL_027e: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: 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_02db: Unknown result type (might be due to invalid IL or missing references) error = null; try { List list = new List(); List list2 = new List(); Dictionary remap = new Dictionary(); List list3 = new List(); List list4 = new List(); List list5 = new List(); string[] array = File.ReadAllLines(path); for (int i = 0; i < array.Length; i++) { string text = array[i].Trim(); if (text.Length == 0 || text[0] == '#') { continue; } string[] array2 = text.Split(Sep, StringSplitOptions.RemoveEmptyEntries); if (array2.Length == 0) { continue; } switch (array2[0]) { case "v": if (array2.Length >= 4) { list.Add(new Vector3(0f - F(array2[1]), F(array2[2]), F(array2[3]))); } break; case "vt": if (array2.Length >= 3) { list2.Add(new Vector2(F(array2[1]), F(array2[2]))); } break; case "f": { if (array2.Length < 4) { break; } int[] array3 = new int[array2.Length - 1]; for (int j = 1; j < array2.Length; j++) { array3[j - 1] = Corner(array2[j], list, list2, remap, list3, list4); } for (int k = 1; k < array3.Length - 1; k++) { list5.Add(array3[0]); if (invert) { list5.Add(array3[k]); list5.Add(array3[k + 1]); } else { list5.Add(array3[k + 1]); list5.Add(array3[k]); } } break; } } } if (list3.Count == 0 || list5.Count == 0) { error = "no geometry found in " + Path.GetFileName(path); return null; } Mesh val = new Mesh { name = "BigWok_" + Path.GetFileNameWithoutExtension(path) }; Il2CppStructArray val2 = new Il2CppStructArray((long)list3.Count); for (int l = 0; l < list3.Count; l++) { ((Il2CppArrayBase)(object)val2)[l] = list3[l]; } val.vertices = val2; if (list4.Count == list3.Count) { Il2CppStructArray val3 = new Il2CppStructArray((long)list4.Count); for (int m = 0; m < list4.Count; m++) { ((Il2CppArrayBase)(object)val3)[m] = list4[m]; } val.uv = val3; } Il2CppStructArray val4 = new Il2CppStructArray((long)list5.Count); for (int n = 0; n < list5.Count; n++) { ((Il2CppArrayBase)(object)val4)[n] = list5[n]; } val.triangles = val4; val.RecalculateNormals(); val.RecalculateTangents(); val.RecalculateBounds(); return val; } catch (Exception ex) { error = ex.Message; return null; } } private static int Corner(string token, List positions, List texcoords, Dictionary remap, List verts, List uvs) { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) if (remap.TryGetValue(token, out var value)) { return value; } string[] array = token.Split('/'); int num = Index(array[0], positions.Count); int num2 = ((array.Length > 1 && array[1].Length > 0) ? Index(array[1], texcoords.Count) : (-1)); verts.Add((num >= 0) ? positions[num] : Vector3.zero); uvs.Add((num2 >= 0) ? texcoords[num2] : Vector2.zero); return remap[token] = verts.Count - 1; } private static int Index(string s, int count) { if (!int.TryParse(s, NumberStyles.Integer, CultureInfo.InvariantCulture, out var result)) { return -1; } if (result > 0) { return result - 1; } if (result < 0) { return count + result; } return -1; } private static float F(string s) { if (!float.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out var result)) { return 0f; } return result; } } }