using System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using ModelReplacement; 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(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("RalseiMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("RalseiMod")] [assembly: AssemblyTitle("RalseiMod")] [assembly: AssemblyVersion("1.0.0.0")] namespace RalseiMod; [BepInPlugin("com.yourname.ralseimod", "Ralsei Suit Mod", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public static AssetBundle mainBundle; private void Awake() { string text = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "ralsei_suit"); Debug.Log((object)("[RALSEI] Loading bundle from: " + text)); mainBundle = AssetBundle.LoadFromFile(text); if ((Object)(object)mainBundle == (Object)null) { Debug.LogError((object)"[RALSEI] FAILED TO LOAD BUNDLE. Put 'ralsei_suit' next to RalseiMod.dll"); return; } Debug.Log((object)"[RALSEI] Bundle loaded OK."); ModelReplacementAPI.RegisterSuitModelReplacement("Ralsei", typeof(RalseiReplacement)); Debug.Log((object)"[RALSEI] Registered suit replacement for suit name: Ralsei"); } } public class RalseiReplacement : BodyReplacementBase { private const float MODEL_Y_OFFSET = -2.8f; protected override GameObject LoadAssetsAndReturnModel() { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Expected O, but got Unknown //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)Plugin.mainBundle == (Object)null) { Debug.LogError((object)"[RALSEI] mainBundle is null."); return null; } string[] allAssetNames = Plugin.mainBundle.GetAllAssetNames(); string[] array = allAssetNames; foreach (string text in array) { if (text.EndsWith(".prefab")) { GameObject val = Plugin.mainBundle.LoadAsset(text); if ((Object)(object)val == (Object)null) { Debug.LogError((object)("[RALSEI] Prefab failed to load: " + text)); return null; } Debug.Log((object)("[RALSEI] Loaded prefab: " + text)); GameObject val2 = new GameObject("RalseiRuntimeRoot"); GameObject val3 = Object.Instantiate(val, val2.transform); ((Object)val3).name = "Ralsei2_OffsetModel"; val3.transform.localPosition = new Vector3(0f, -2.8f, 0f); val3.transform.localRotation = Quaternion.identity; val3.transform.localScale = Vector3.one; Debug.Log((object)"[RALSEI] Created runtime root."); Debug.Log((object)("[RALSEI] Child model Y offset: " + -2.8f)); Animator componentInChildren = val2.GetComponentInChildren(true); if ((Object)(object)componentInChildren == (Object)null) { Debug.LogError((object)"[RALSEI] No Animator found anywhere in runtime model."); return val2; } Debug.Log((object)("[RALSEI] Animator found on: " + ((Object)((Component)componentInChildren).gameObject).name)); Debug.Log((object)("[RALSEI] Avatar assigned: " + ((Object)(object)componentInChildren.avatar != (Object)null))); if ((Object)(object)componentInChildren.avatar != (Object)null) { Debug.Log((object)("[RALSEI] Avatar isHuman: " + componentInChildren.avatar.isHuman)); } SkinnedMeshRenderer componentInChildren2 = val2.GetComponentInChildren(true); Debug.Log((object)("[RALSEI] SkinnedMeshRenderer found: " + ((Object)(object)componentInChildren2 != (Object)null))); if ((Object)(object)componentInChildren2 != (Object)null) { Debug.Log((object)("[RALSEI] Mesh object: " + ((Object)((Component)componentInChildren2).gameObject).name)); Debug.Log((object)("[RALSEI] Root bone: " + (((Object)(object)componentInChildren2.rootBone != (Object)null) ? ((Object)componentInChildren2.rootBone).name : "NULL"))); Debug.Log((object)("[RALSEI] Bone count: " + ((componentInChildren2.bones != null) ? componentInChildren2.bones.Length : 0))); } AddOffsetBuilderSafely(((Component)componentInChildren).gameObject); Debug.Log((object)"[RALSEI] Returning runtime root to ModelReplacementAPI."); return val2; } } Debug.LogError((object)"[RALSEI] No prefab found in bundle."); return null; } private void AddOffsetBuilderSafely(GameObject target) { //IL_008d: Unknown result type (might be due to invalid IL or missing references) Type type = FindTypeByName("OffsetBuilder"); if (type == null) { Debug.LogError((object)"[RALSEI] Could not find OffsetBuilder type inside loaded assemblies."); return; } Component component = target.GetComponent(type); if ((Object)(object)component != (Object)null) { Debug.Log((object)"[RALSEI] OffsetBuilder already exists."); return; } Debug.LogWarning((object)"[RALSEI] OffsetBuilder missing. Adding automatically."); Component component2 = target.AddComponent(type); SetBool(component2, "UseNoPostProcessing", value: false); SetBool(component2, "GenerateViewModel", value: false); SetBool(component2, "RemoveHelmet", value: false); SetVector3(component2, "rootScale", Vector3.one); Debug.Log((object)"[RALSEI] OffsetBuilder added."); } private Type FindTypeByName(string typeName) { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly in assemblies) { Type[] types; try { types = assembly.GetTypes(); } catch { continue; } Type[] array = types; foreach (Type type in array) { if (type.Name == typeName) { Debug.Log((object)("[RALSEI] Found type: " + type.FullName)); return type; } } } return null; } private void SetBool(Component component, string name, bool value) { Type type = ((object)component).GetType(); FieldInfo field = type.GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null && field.FieldType == typeof(bool)) { field.SetValue(component, value); return; } PropertyInfo property = type.GetProperty(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (property != null && property.PropertyType == typeof(bool) && property.CanWrite) { property.SetValue(component, value, null); } } private void SetVector3(Component component, string name, Vector3 value) { //IL_003a: 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) Type type = ((object)component).GetType(); FieldInfo field = type.GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null && field.FieldType == typeof(Vector3)) { field.SetValue(component, value); return; } PropertyInfo property = type.GetProperty(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (property != null && property.PropertyType == typeof(Vector3) && property.CanWrite) { property.SetValue(component, value, null); } } }