Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of MadVeteran Skinpack v1.5.3
Skins/MadVeteran_Acolyte.dll
Decompiled a day agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using MadVeteran_Core; using MonoMod.RuntimeDetour.HookGen; using RoR2; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace MadVeteran_Acolyte; public class BeetleGuard_AcolyteWingController : MonoBehaviour { private float FullOpenWingValue = 30f; private float MaxWingSpeedValue = 60f; private Animator animator; private CharacterBody characterBody; private void Start() { if (!CorePlugin.Acolyte_MarkedCarapase_Enabled.Value) { ((Behaviour)this).enabled = false; } animator = ((Component)this).GetComponent<Animator>(); CharacterModel componentInParent = ((Component)this).GetComponentInParent<CharacterModel>(); if (Object.op_Implicit((Object)(object)componentInParent) && Object.op_Implicit((Object)(object)componentInParent.body)) { characterBody = componentInParent.body; FullOpenWingValue = CorePlugin.Acolyte_MarkedCarapase_OpenWing.Value; MaxWingSpeedValue = CorePlugin.Acolyte_MarkedCarapase_FlapWing.Value; } } private void FixedUpdate() { if (Object.op_Implicit((Object)(object)characterBody) && Object.op_Implicit((Object)(object)animator)) { float magnitude = ((Vector3)(ref characterBody.characterMotor.velocity)).magnitude; float num = Mathf.InverseLerp(0f, FullOpenWingValue, magnitude); float num2 = Mathf.InverseLerp(FullOpenWingValue, MaxWingSpeedValue, magnitude); animator.SetFloat("Velocity", num); animator.SetLayerWeight(1, num2); } } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.KrononConpsirator.MadVeteran_Acolyte", "MadVeteran_Acolyte", "1.0.0")] public class MadVeteran_AcolytePlugin : BaseUnityPlugin { public static AssetBundle assetBundle; private static readonly List<Material> materialsWithRoRShader = new List<Material>(); internal static MadVeteran_AcolytePlugin Instance { get; private set; } internal static ManualLogSource InstanceLogger { get { MadVeteran_AcolytePlugin instance = Instance; if (instance == null) { return null; } return ((BaseUnityPlugin)instance).Logger; } } private void Start() { Instance = this; using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MadVeteran_Acolyte.krononconpsiratormadveteran_acolyte")) { assetBundle = AssetBundle.LoadFromStream(stream); } ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)BodyCatalogInit); HookEndpointManager.Add((MethodBase)typeof(Language).GetMethod("LoadStrings"), (Delegate)new Action<Action<Language>, Language>(LanguageLoadStrings)); ReplaceShaders(); } private static void ReplaceShaders() { LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGStandard.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoAcolyte/BugboiLimbMat.mat", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoAcolyte/BugboiTorsoMat.mat", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoAcolyte/BugboiWingMat.mat"); LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGCloudRemap.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoAcolyte/BugboiElytraMat.mat"); } private static void LoadMaterialsWithReplacedShader(string shaderPath, params string[] materialPaths) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Shader shader = Addressables.LoadAssetAsync<Shader>((object)shaderPath).WaitForCompletion(); foreach (string text in materialPaths) { Material val = assetBundle.LoadAsset<Material>(text); val.shader = shader; materialsWithRoRShader.Add(val); } } private static void LanguageLoadStrings(Action<Language> orig, Language self) { orig(self); self.SetStringByToken("KRONONCONPSIRATOR_SKIN_BUGBOIACOLYTESKINDEF_NAME", "Marked Carapace "); } private static void BodyCatalogInit() { AddAcolyteBodyBugBoiAcolyteSkinDefSkin(); } private static SkinDef CreateAcolyteBodyBugBoiAcolyteSkinDefSkin(GameObject mdl, ModelSkinController skinController) { Renderer[] renderers = mdl.GetComponentsInChildren<Renderer>(true); mdl.GetComponentsInChildren<Light>(true); SkinDef skin = ScriptableObject.CreateInstance<SkinDef>(); SkinDefParams skinParams = ScriptableObject.CreateInstance<SkinDefParams>(); skin.skinDefParams = skinParams; ((Object)skin).name = "BugBoiAcolyteSkinDef"; skin.nameToken = "KRONONCONPSIRATOR_SKIN_BUGBOIACOLYTESKINDEF_NAME"; skin.rootObject = mdl; Helpers.TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset<Sprite>("Assets\\SkinMods\\MadVeteran_Acolyte\\Icons\\BugBoiAcolyteSkinDefIcon.png"); }); Helpers.TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); Helpers.TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { Helpers.ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); Helpers.TryCatchThrow("Game Object Activations", delegate { //IL_0010: 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_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: 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_00ba: Unknown result type (might be due to invalid IL or missing references) skinParams.gameObjectActivations = (GameObjectActivation[])(object)new GameObjectActivation[1] { new GameObjectActivation { gameObject = Helpers.ThrowIfNull<GameObject>(0, "There is no renderer at path \"chest\"", Helpers.GetChildGameObject(mdl, "chest")).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(0f, 0f, 0f), localRotation = new Vector3(270f, 0f, 0f), localScale = new Vector3(1f, 1f, 1f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoAcolyte/WingPrefab.prefab")) } }; }); Helpers.TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: 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_010b: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[2] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoAcolyte/BugboiLimbMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"acolyte_eyes\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "acolyte_eyes"))), hideOnDeath = false, ignoresMaterialOverrides = false }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoAcolyte/BugboiTorsoMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = Helpers.ThrowIfNull<Renderer>(1, "There is no renderer with the name \"acolyte_geo\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "acolyte_geo"))), hideOnDeath = false, ignoresMaterialOverrides = false } }; }); Helpers.TryCatchThrow("MeshReplacements", delegate { //IL_0010: 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_0069: 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_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[2] { new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Acolyte\\Meshes\\BugBoi_Limbs.mesh"), renderer = Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"acolyte_eyes\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "acolyte_eyes"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Acolyte\\Meshes\\BugBoi_Torso.mesh"), renderer = Helpers.ThrowIfNull<Renderer>(1, "There is no renderer with the name \"acolyte_geo\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "acolyte_geo"))) } }; }); Helpers.TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = Array.Empty<LightInfo>(); }); Helpers.TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty<MinionSkinReplacement>(); }); Helpers.TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>(); }); return skin; } private static void AddAcolyteBodyBugBoiAcolyteSkinDefSkin() { string text = "AcolyteBody"; string text2 = "BugBoiAcolyteSkinDef"; GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } try { ModelLocator component = val.GetComponent<ModelLocator>(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController val2 = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent<ModelSkinController>() : null); if (!Object.op_Implicit((Object)(object)val2)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); } else { SkinDef val3 = CreateAcolyteBodyBugBoiAcolyteSkinDefSkin(gameObject, val2); Array.Resize(ref val2.skins, val2.skins.Length + 1); val2.skins[val2.skins.Length - 1] = val3; } } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } } public class MeshActivator : MonoBehaviour { [Serializable] public struct CustomRendererInfo { public Material material; public string addressableMaterialPath; public bool ignoreOverlays; public ShadowCastingMode shadowCastingMode; } [Header("Reference Settings")] [Tooltip("Name of the in-game original mesh object.")] public string referenceObjectName; [Tooltip("Copy Bone Data From Reference Object.")] public bool CopyBoneData = true; [Tooltip("Active state applied once registered.")] public bool initialActiveState = true; [Tooltip("Custom configuration for the renderer info applied to the CharacterModel.")] public CustomRendererInfo customRendererInfo = new CustomRendererInfo { shadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false }; private CharacterModel characterModel; private SkinnedMeshRenderer ownRenderer; private bool registered; private IEnumerator Start() { for (int i = 0; i < 5; i++) { yield return null; } Register(); } private void Register() { //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) if (registered) { return; } ownRenderer = ((Component)this).GetComponent<SkinnedMeshRenderer>(); if (!Object.op_Implicit((Object)(object)ownRenderer)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "' has no SkinnedMeshRenderer."), (Object)(object)this); return; } Transform val = FindReference(); if (!Object.op_Implicit((Object)(object)val)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "': '" + referenceObjectName + "'not found in its hierarchy."), (Object)(object)this); return; } characterModel = ((Component)val).GetComponentInParent<CharacterModel>(); if (!Object.op_Implicit((Object)(object)characterModel)) { characterModel = ((Component)this).GetComponentInParent<CharacterModel>(); } if (!Object.op_Implicit((Object)(object)characterModel)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "': no CharacterModel found above '" + ((Object)val).name + "'"), (Object)(object)this); return; } if (CopyBoneData) { SkinnedMeshRenderer val2 = ((Component)val).GetComponent<SkinnedMeshRenderer>(); if (!Object.op_Implicit((Object)(object)val2)) { val2 = ((Component)val).GetComponentInChildren<SkinnedMeshRenderer>(true); } if (Object.op_Implicit((Object)(object)val2)) { ownRenderer.rootBone = val2.rootBone; ownRenderer.bones = val2.bones; } else { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)val).name + "' has no SkinnedMeshRenderer to copy bones from."), (Object)(object)this); } } Material val3 = customRendererInfo.material; if (!Object.op_Implicit((Object)(object)val3) && !string.IsNullOrEmpty(customRendererInfo.addressableMaterialPath)) { val3 = Addressables.LoadAssetAsync<Material>((object)customRendererInfo.addressableMaterialPath).WaitForCompletion(); if (!Object.op_Implicit((Object)(object)val3)) { Debug.LogWarning((object)("[MeshActivator] Failed to load material via Addressables path: '" + customRendererInfo.addressableMaterialPath + "'. Falling back to sharedMaterial."), (Object)(object)this); } } if (!Object.op_Implicit((Object)(object)val3)) { val3 = ((Renderer)ownRenderer).sharedMaterial; } RendererInfo val4 = new RendererInfo { renderer = (Renderer)(object)ownRenderer, defaultMaterial = val3, defaultShadowCastingMode = customRendererInfo.shadowCastingMode, ignoreOverlays = customRendererInfo.ignoreOverlays }; RendererInfo[] baseRendererInfos = characterModel.baseRendererInfos; int num = -1; for (int i = 0; i < baseRendererInfos.Length; i++) { if ((Object)(object)baseRendererInfos[i].renderer == (Object)(object)ownRenderer) { num = i; break; } } if (num >= 0) { baseRendererInfos[num] = val4; } else { Array.Resize(ref characterModel.baseRendererInfos, baseRendererInfos.Length + 1); characterModel.baseRendererInfos[characterModel.baseRendererInfos.Length - 1] = val4; } registered = true; characterModel.UpdateMaterials(); ((Component)this).gameObject.SetActive(initialActiveState); } private Transform FindReference() { if (string.IsNullOrEmpty(referenceObjectName)) { return null; } Transform parent = ((Component)this).transform.parent; while (Object.op_Implicit((Object)(object)parent)) { if (((Object)parent).name == referenceObjectName) { return parent; } Transform[] componentsInChildren = ((Component)parent).GetComponentsInChildren<Transform>(true); foreach (Transform val in componentsInChildren) { if (!((Object)(object)val == (Object)(object)((Component)this).transform) && !val.IsChildOf(((Component)this).transform) && ((Object)val).name == referenceObjectName) { return val; } } parent = parent.parent; } return null; } } public static class Helpers { private static GameObject prefabHolder; public static GameObject ClonePrefab(GameObject gameObject) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown if (!Object.op_Implicit((Object)(object)prefabHolder)) { prefabHolder = new GameObject("PrefabHolder"); Object.DontDestroyOnLoad((Object)(object)prefabHolder); prefabHolder.SetActive(false); } GameObject obj = Object.Instantiate<GameObject>(gameObject, prefabHolder.transform); obj.AddComponent<RemoveClone>(); ((Object)obj).name = ((Object)gameObject).name; return obj; } public static GameObject GetChildGameObject(GameObject fromGameObject, string withName) { Transform[] componentsInChildren = fromGameObject.GetComponentsInChildren<Transform>(); foreach (Transform val in componentsInChildren) { if (((Object)val).name.StartsWith(withName)) { return ((Component)val).gameObject; } } return null; } public static Transform GetChild(this Transform transform, int index, out Transform child) { return child = transform.GetChild(index); } public static GameObject WithComponent<T>(this GameObject gameObject, Action<T> modifier = null) where T : Component { T obj = gameObject.AddComponent<T>(); modifier?.Invoke(obj); return gameObject; } public static GameObject WithTryComponent<T>(this GameObject gameObject, Action<T> modifier = null) where T : Component { if (Object.op_Implicit((Object)(object)gameObject) && !Object.op_Implicit((Object)(object)gameObject.GetComponent<T>())) { T obj = gameObject.AddComponent<T>(); modifier?.Invoke(obj); } return gameObject; } public static T ThrowIfEquals<T>(int index, string message, T value, T expected) where T : Enum { if (value.Equals(expected)) { throw new ElementException(index, message); } return value; } public static T ThrowIfOutOfBounds<T>(int index, string message, T[] array, int elementIndex) where T : class { if (array == null || array.Length <= elementIndex) { throw new ElementException(index, message); } return array[elementIndex]; } public static T ThrowIfNull<T>(int index, string message, T value) where T : class { if (value == null) { throw new ElementException(index, message); } return value; } public static void TryCatchThrow(string message, Action action) { try { action?.Invoke(); } catch (Exception innerException) { throw new FieldException(message, innerException); } } } public class RemoveClone : MonoBehaviour { public void Awake() { ((Object)this).name = ((Object)this).name[..^7]; } } public class FieldException : Exception { public FieldException(string message, Exception innerException) : base(message, innerException) { } } public class ElementException : Exception { public int Index { get; } public ElementException(int index, string message) : base(message) { Index = index; } } public class InsertBones : MonoBehaviour { private readonly List<SkinnedMeshRenderer> modifiedRenderers = new List<SkinnedMeshRenderer>(); public List<string> rendererPaths = new List<string>(); public List<Transform> newBones = new List<Transform>(); public string afterPath; public void Awake() { Transform transform = ((Component)((Component)this).GetComponentInParent<ModelSkinController>()).transform; Transform value = ((Component)transform).transform.Find(afterPath); foreach (string rendererPath in rendererPaths) { Transform obj = transform.Find(rendererPath); SkinnedMeshRenderer val = ((obj != null) ? ((Component)obj).GetComponent<SkinnedMeshRenderer>() : null); if (Object.op_Implicit((Object)(object)val)) { Transform[] array = val.bones; int num = Array.IndexOf(array, value) + 1; if (num != 0) { Array.Resize(ref array, array.Length + newBones.Count); Array.Copy(array, num, array, num + newBones.Count, array.Length - newBones.Count - num); newBones.CopyTo(array, num); val.bones = array; modifiedRenderers.Add(val); } } } } public void OnDestroy() { foreach (SkinnedMeshRenderer modifiedRenderer in modifiedRenderers) { if (Object.op_Implicit((Object)(object)modifiedRenderer)) { Transform[] array = modifiedRenderer.bones; int num = Array.IndexOf(array, ((Component)this).transform); Array.Copy(array, num + newBones.Count, array, num, array.Length - num - newBones.Count); Array.Resize(ref array, array.Length - newBones.Count); modifiedRenderer.bones = array; } } modifiedRenderers.Clear(); } } public class AddDynamicColliders : MonoBehaviour { public List<string> paths = new List<string>(); public void Awake() { Transform transform = ((Component)((Component)this).GetComponentInParent<ModelSkinController>()).transform; List<DynamicBoneCollider> list = new List<DynamicBoneCollider>(); foreach (string path in paths) { Transform val = transform.Find(path); if (Object.op_Implicit((Object)(object)val)) { list.AddRange(((Component)val).GetComponents<DynamicBoneCollider>()); } } DynamicBone[] components = ((Component)this).GetComponents<DynamicBone>(); for (int i = 0; i < components.Length; i++) { components[i].m_Colliders.AddRange(list); } } }
Skins/MadVeteran_Acrid.dll
Decompiled a day agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using MadVeteran_Core; using MonoMod.RuntimeDetour.HookGen; using On.RoR2; using RoR2; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace MadVeteran_Acrid; public class MadVetAcrid_BileController : MonoBehaviour { private string GlowMatPath = "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoAcrid/AcridNeo2GlowMat.mat"; public TemporaryOverlayInstance BileGlowOverlay; private CharacterModel characterModel; private bool ConsoleDebug; private CharacterBody charBody; private Material CloneGlowMat; public Material InstancedCloneMat; [Header("Bile Offset Values")] [SerializeField] private float greenMin = -1f; [SerializeField] private float greenMax = 0.25f; [SerializeField] private float whiteMin = 0.16f; [SerializeField] private float whiteMax = 0.56f; [Header("Transition Settings")] public float holdDuration = 1.5f; private float transitionProgress = 1f; private float transitionDuration = 0.25f; private float holdTimer = 20f; private bool isHolding; private float currentGreen; private float baseGreen; private float targetGreen; private float currentWhite; private float baseWhite; private float targetWhite; private const string PropGreen = "_Heat2offset"; private const string PropWhite = "_Heat3offset"; private IEnumerator Start() { for (int i = 0; i < 15; i++) { yield return null; } characterModel = ((Component)this).GetComponentInParent<CharacterModel>(); SetVariableFromConfig(); Register(); if (!CorePlugin.Acrid_AshenOne_Enabled.Value) { ((Behaviour)this).enabled = false; } ConsoleDebug = CorePlugin.ConsoleDebug_Enabled.Value; if (Object.op_Implicit((Object)(object)characterModel) && (Object)(object)characterModel.body != (Object)null) { charBody = characterModel.body; for (int i = 0; i < 15; i++) { yield return null; } InstancedCloneMat = GetInstancedMat(); if (Object.op_Implicit((Object)(object)InstancedCloneMat)) { InstancedCloneMat.SetColor("_Heat2Color", CorePlugin.Acrid_AshenOne_PoisonColor.Value); CharacterBody.OnSkillActivated += new hook_OnSkillActivated(OnSkillActivated); } else { MadVeteran_AcridPlugin.InstanceLogger.LogError((object)"MadVeteranAcrid_BileController: Failed to find instanced material"); } } } private void SetVariableFromConfig() { holdDuration = CorePlugin.Acrid_AshenOne_PoisonHold_Duration.Value; whiteMin = CorePlugin.Acrid_AshenOne_WhiteGradient_Min.Value; whiteMax = CorePlugin.Acrid_AshenOne_WhiteGradient_Max.Value; greenMin = CorePlugin.Acrid_AshenOne_PoisonGradient_Min.Value; greenMax = CorePlugin.Acrid_AshenOne_PoisonGradient_Max.Value; } private void Register() { //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Expected O, but got Unknown Material val = MadVeteran_AcridPlugin.assetBundle.LoadAsset<Material>(GlowMatPath); if ((Object)(object)val == (Object)null) { MadVeteran_AcridPlugin.InstanceLogger.LogError((object)("MadVeteranAcrid_BileController: Failed to load material at " + GlowMatPath)); return; } if (ConsoleDebug) { MadVeteran_AcridPlugin.InstanceLogger.LogWarning((object)"Mat Glow Obtained"); } currentGreen = greenMin; baseGreen = greenMin; targetGreen = greenMin; currentWhite = whiteMin; baseWhite = whiteMin; targetWhite = whiteMin; CloneGlowMat = new Material(val); ((Object)CloneGlowMat).name = ((Object)CloneGlowMat).name + " (Instance)"; if (CloneGlowMat.HasProperty("_Heat2offset")) { CloneGlowMat.SetFloat("_Heat2offset", currentGreen); } if (CloneGlowMat.HasProperty("_Heat3offset")) { CloneGlowMat.SetFloat("_Heat3offset", currentWhite); } if (BileGlowOverlay == null) { TemporaryOverlayInstance val2 = TemporaryOverlayManager.AddOverlay(((Component)characterModel).gameObject); val2.originalMaterial = CloneGlowMat; val2.inspectorCharacterModel = characterModel; val2.assignedCharacterModel = characterModel; val2.AddToCharacterModel(characterModel); BileGlowOverlay = val2; if (ConsoleDebug) { MadVeteran_AcridPlugin.InstanceLogger.LogWarning((object)"Mat Overlay On"); } } } private Material GetInstancedMat() { return BileGlowOverlay.materialInstance; } private void OnSkillActivated(orig_OnSkillActivated orig, CharacterBody self, GenericSkill skill) { orig.Invoke(self, skill); if ((Object)(object)characterModel != (Object)null && (Object)(object)characterModel.body == (Object)(object)self) { TriggerBileGlow(); } } public void TriggerBileGlow() { baseGreen = currentGreen; baseWhite = currentWhite; targetGreen = greenMax; targetWhite = whiteMax; transitionDuration = 0.15f; transitionProgress = 0f; isHolding = true; holdTimer = holdDuration; } private void FixedUpdate() { if (transitionProgress < 1f) { transitionProgress += Time.deltaTime / transitionDuration; float num = Mathf.Clamp01(transitionProgress); currentGreen = Mathf.Lerp(baseGreen, targetGreen, num); currentWhite = Mathf.Lerp(baseWhite, targetWhite, num); if (InstancedCloneMat.HasProperty("_Heat2offset")) { InstancedCloneMat.SetFloat("_Heat2offset", currentGreen); } if (InstancedCloneMat.HasProperty("_Heat3offset")) { InstancedCloneMat.SetFloat("_Heat3offset", currentWhite); } } if (isHolding && charBody.characterMotor.isGrounded) { holdTimer -= Time.deltaTime; if (holdTimer <= 0f) { baseGreen = currentGreen; baseWhite = currentWhite; targetGreen = greenMin; targetWhite = whiteMin; transitionDuration = 0.5f; transitionProgress = 0f; isHolding = false; } } } private void OnDestroy() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown CharacterBody.OnSkillActivated -= new hook_OnSkillActivated(OnSkillActivated); if ((Object)(object)CloneGlowMat != (Object)null) { Object.Destroy((Object)(object)CloneGlowMat); } if ((Object)(object)InstancedCloneMat != (Object)null) { Object.Destroy((Object)(object)InstancedCloneMat); } } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.KrononConpsirator.MadVeteran_Acrid", "MadVeteran_Acrid", "1.0.0")] public class MadVeteran_AcridPlugin : BaseUnityPlugin { public static AssetBundle assetBundle; private static readonly List<Material> materialsWithRoRShader = new List<Material>(); internal static MadVeteran_AcridPlugin Instance { get; private set; } internal static ManualLogSource InstanceLogger { get { MadVeteran_AcridPlugin instance = Instance; if (instance == null) { return null; } return ((BaseUnityPlugin)instance).Logger; } } private void Start() { Instance = this; using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MadVeteran_Acrid.krononconpsiratormadveteran_acrid")) { assetBundle = AssetBundle.LoadFromStream(stream); } ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)BodyCatalogInit); HookEndpointManager.Add((MethodBase)typeof(Language).GetMethod("LoadStrings"), (Delegate)new Action<Action<Language>, Language>(LanguageLoadStrings)); ReplaceShaders(); } private static void ReplaceShaders() { LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGStandard.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoAcrid/AcridNeoPureBlackMat.mat", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoAcrid/AcridNeoBoneMat.mat"); } private static void LoadMaterialsWithReplacedShader(string shaderPath, params string[] materialPaths) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Shader shader = Addressables.LoadAssetAsync<Shader>((object)shaderPath).WaitForCompletion(); foreach (string text in materialPaths) { Material val = assetBundle.LoadAsset<Material>(text); val.shader = shader; materialsWithRoRShader.Add(val); } } private static void LanguageLoadStrings(Action<Language> orig, Language self) { orig(self); self.SetStringByToken("KRONONCONPSIRATOR_SKIN_MADVETACRIDSKINDEF_NAME", "Ashen Rat"); } private static void BodyCatalogInit() { AddCrocoBodyMadVetAcridSkinDefSkin(); } private static SkinDef CreateCrocoBodyMadVetAcridSkinDefSkin(GameObject mdl, ModelSkinController skinController) { Renderer[] renderers = mdl.GetComponentsInChildren<Renderer>(true); mdl.GetComponentsInChildren<Light>(true); List<string> skinnedRendererPaths = new List<string>(); Renderer[] array = renderers; foreach (Renderer val in array) { if (val is SkinnedMeshRenderer) { skinnedRendererPaths.Add(Util.BuildPrefabTransformPath(mdl.transform, ((Component)val).transform, false, false)); } } SkinDef skin = ScriptableObject.CreateInstance<SkinDef>(); SkinDefParams skinParams = ScriptableObject.CreateInstance<SkinDefParams>(); skin.skinDefParams = skinParams; ((Object)skin).name = "MadVetAcridSkinDef"; skin.nameToken = "KRONONCONPSIRATOR_SKIN_MADVETACRIDSKINDEF_NAME"; skin.rootObject = mdl; Helpers.TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset<Sprite>("Assets\\SkinMods\\MadVeteran_Acrid\\Icons\\MadVetAcridSkinDefIcon.png"); }); Helpers.TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); Helpers.TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { Helpers.ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); Helpers.TryCatchThrow("Game Object Activations", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: 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_011b: 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_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: 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_01f7: Unknown result type (might be due to invalid IL or missing references) skinParams.gameObjectActivations = (GameObjectActivation[])(object)new GameObjectActivation[3] { new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"CrocoSpineMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "CrocoSpineMesh")))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = false }, new GameObjectActivation { gameObject = Helpers.ThrowIfNull<GameObject>(1, "There is no renderer at path \"base\"", Helpers.GetChildGameObject(mdl, "base")).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(0f, 0f, 0f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(1f, 1f, 1f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoAcrid/CrocoNeoAddon.prefab")) }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Transform>(2, "There is no renderer at path \"CrocoArmature/ROOT/base/hip\"", mdl.transform.Find("CrocoArmature/ROOT/base/hip"))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(-1.554312E-15f, 2.701385f, 2.384186E-07f), localRotation = new Vector3(11.941f, 180f, 180f), localScale = new Vector3(1f, 1f, 0.9999933f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoAcrid/TailAddon.prefab")).WithComponent<InsertBones>((Action<InsertBones>)delegate(InsertBones c) { c.rendererPaths.AddRange(skinnedRendererPaths); c.afterPath = "CrocoArmature/ROOT/base/hip/thigh.r/calf.r/foot.r/heelToBall.r/ballToToe.r/toe3.r"; Transform transform = ((Component)c).transform; c.newBones.Add(transform); c.newBones.Add(transform.GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); }) } }; }); Helpers.TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[1] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoAcrid/AcridNeoPureBlackMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = true, renderer = Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"CrocoMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "CrocoMesh"))), hideOnDeath = true, ignoresMaterialOverrides = false } }; }); Helpers.TryCatchThrow("MeshReplacements", delegate { //IL_0010: 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_0069: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[1] { new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Acrid\\Meshes\\CrocoBodyMesh.mesh"), renderer = Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"CrocoMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "CrocoMesh"))) } }; }); Helpers.TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = Array.Empty<LightInfo>(); }); Helpers.TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty<MinionSkinReplacement>(); }); Helpers.TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>(); }); return skin; } private static void AddCrocoBodyMadVetAcridSkinDefSkin() { string text = "CrocoBody"; string text2 = "MadVetAcridSkinDef"; GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } try { ModelLocator component = val.GetComponent<ModelLocator>(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController val2 = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent<ModelSkinController>() : null); if (!Object.op_Implicit((Object)(object)val2)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); } else { SkinDef val3 = CreateCrocoBodyMadVetAcridSkinDefSkin(gameObject, val2); Array.Resize(ref val2.skins, val2.skins.Length + 1); val2.skins[val2.skins.Length - 1] = val3; } } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } } public class MeshActivator : MonoBehaviour { [Serializable] public struct CustomRendererInfo { public Material material; public string addressableMaterialPath; public bool ignoreOverlays; public ShadowCastingMode shadowCastingMode; } [Header("Reference Settings")] [Tooltip("Name of the in-game original mesh object.")] public string referenceObjectName; [Tooltip("Copy Bone Data From Reference Object.")] public bool CopyBoneData = true; [Tooltip("Active state applied once registered.")] public bool initialActiveState = true; [Tooltip("Custom configuration for the renderer info applied to the CharacterModel.")] public CustomRendererInfo customRendererInfo = new CustomRendererInfo { shadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false }; private CharacterModel characterModel; private bool registered; private IEnumerator Start() { for (int i = 0; i < 2; i++) { yield return null; } Register(); } private void Register() { //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0212: 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_0293: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) if (registered) { return; } Renderer component = ((Component)this).GetComponent<Renderer>(); if (!Object.op_Implicit((Object)(object)component)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "' has no Renderer."), (Object)(object)this); return; } Transform val = FindReference(); if (!Object.op_Implicit((Object)(object)val)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "': '" + referenceObjectName + "' not found in its hierarchy."), (Object)(object)this); return; } characterModel = ((Component)val).GetComponentInParent<CharacterModel>(); if (!Object.op_Implicit((Object)(object)characterModel)) { characterModel = ((Component)this).GetComponentInParent<CharacterModel>(); } if (!Object.op_Implicit((Object)(object)characterModel)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "': no CharacterModel found above '" + ((Object)val).name + "'"), (Object)(object)this); return; } if (CopyBoneData) { SkinnedMeshRenderer val2 = ((Component)val).GetComponent<SkinnedMeshRenderer>(); if (!Object.op_Implicit((Object)(object)val2)) { val2 = ((Component)val).GetComponentInChildren<SkinnedMeshRenderer>(true); } if (Object.op_Implicit((Object)(object)val2)) { SkinnedMeshRenderer val3 = (SkinnedMeshRenderer)(object)((component is SkinnedMeshRenderer) ? component : null); if (val3 != null) { val3.rootBone = val2.rootBone; val3.bones = val2.bones; goto IL_015d; } } Debug.LogWarning((object)("[MeshActivator] '" + ((Object)val).name + "' has no SkinnedMeshRenderer to copy bones from."), (Object)(object)this); } goto IL_015d; IL_015d: Material val4 = customRendererInfo.material; if (!Object.op_Implicit((Object)(object)val4) && !string.IsNullOrEmpty(customRendererInfo.addressableMaterialPath)) { val4 = Addressables.LoadAssetAsync<Material>((object)customRendererInfo.addressableMaterialPath).WaitForCompletion(); if (!Object.op_Implicit((Object)(object)val4)) { Debug.LogWarning((object)("[MeshActivator] Failed to load material via Addressables path: '" + customRendererInfo.addressableMaterialPath + "'. Falling back to sharedMaterial."), (Object)(object)this); } } if (!Object.op_Implicit((Object)(object)val4)) { val4 = component.sharedMaterial; } RendererInfo val5 = new RendererInfo { renderer = component, defaultMaterial = val4, defaultShadowCastingMode = customRendererInfo.shadowCastingMode, ignoreOverlays = customRendererInfo.ignoreOverlays }; RendererInfo[] baseRendererInfos = characterModel.baseRendererInfos; int num = -1; for (int i = 0; i < baseRendererInfos.Length; i++) { if ((Object)(object)baseRendererInfos[i].renderer == (Object)(object)component) { num = i; break; } } if (num >= 0) { baseRendererInfos[num] = val5; } else { Array.Resize(ref characterModel.baseRendererInfos, baseRendererInfos.Length + 1); characterModel.baseRendererInfos[characterModel.baseRendererInfos.Length - 1] = val5; } registered = true; characterModel.UpdateMaterials(); ((Component)this).gameObject.SetActive(initialActiveState); } private Transform FindReference() { if (string.IsNullOrEmpty(referenceObjectName)) { return null; } Transform parent = ((Component)this).transform.parent; while (Object.op_Implicit((Object)(object)parent)) { if (((Object)parent).name == referenceObjectName) { return parent; } Transform[] componentsInChildren = ((Component)parent).GetComponentsInChildren<Transform>(true); foreach (Transform val in componentsInChildren) { if (!((Object)(object)val == (Object)(object)((Component)this).transform) && !val.IsChildOf(((Component)this).transform) && ((Object)val).name == referenceObjectName) { return val; } } parent = parent.parent; } return null; } } public static class Helpers { private static GameObject prefabHolder; public static GameObject ClonePrefab(GameObject gameObject) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown if (!Object.op_Implicit((Object)(object)prefabHolder)) { prefabHolder = new GameObject("PrefabHolder"); Object.DontDestroyOnLoad((Object)(object)prefabHolder); prefabHolder.SetActive(false); } GameObject obj = Object.Instantiate<GameObject>(gameObject, prefabHolder.transform); obj.AddComponent<RemoveClone>(); ((Object)obj).name = ((Object)gameObject).name; return obj; } public static GameObject GetChildGameObject(GameObject fromGameObject, string withName) { Transform[] componentsInChildren = fromGameObject.GetComponentsInChildren<Transform>(); foreach (Transform val in componentsInChildren) { if (((Object)val).name.StartsWith(withName)) { return ((Component)val).gameObject; } } return null; } public static Transform GetChild(this Transform transform, int index, out Transform child) { return child = transform.GetChild(index); } public static GameObject WithComponent<T>(this GameObject gameObject, Action<T> modifier = null) where T : Component { T obj = gameObject.AddComponent<T>(); modifier?.Invoke(obj); return gameObject; } public static GameObject WithTryComponent<T>(this GameObject gameObject, Action<T> modifier = null) where T : Component { if (Object.op_Implicit((Object)(object)gameObject) && !Object.op_Implicit((Object)(object)gameObject.GetComponent<T>())) { T obj = gameObject.AddComponent<T>(); modifier?.Invoke(obj); } return gameObject; } public static T ThrowIfEquals<T>(int index, string message, T value, T expected) where T : Enum { if (value.Equals(expected)) { throw new ElementException(index, message); } return value; } public static T ThrowIfOutOfBounds<T>(int index, string message, T[] array, int elementIndex) where T : class { if (array == null || array.Length <= elementIndex) { throw new ElementException(index, message); } return array[elementIndex]; } public static T ThrowIfNull<T>(int index, string message, T value) where T : class { if (value == null) { throw new ElementException(index, message); } return value; } public static void TryCatchThrow(string message, Action action) { try { action?.Invoke(); } catch (Exception innerException) { throw new FieldException(message, innerException); } } } public class RemoveClone : MonoBehaviour { public void Awake() { ((Object)this).name = ((Object)this).name[..^7]; } } public class FieldException : Exception { public FieldException(string message, Exception innerException) : base(message, innerException) { } } public class ElementException : Exception { public int Index { get; } public ElementException(int index, string message) : base(message) { Index = index; } } public class InsertBones : MonoBehaviour { private readonly List<SkinnedMeshRenderer> modifiedRenderers = new List<SkinnedMeshRenderer>(); public List<string> rendererPaths = new List<string>(); public List<Transform> newBones = new List<Transform>(); public string afterPath; public void Awake() { Transform transform = ((Component)((Component)this).GetComponentInParent<ModelSkinController>()).transform; Transform value = ((Component)transform).transform.Find(afterPath); foreach (string rendererPath in rendererPaths) { Transform obj = transform.Find(rendererPath); SkinnedMeshRenderer val = ((obj != null) ? ((Component)obj).GetComponent<SkinnedMeshRenderer>() : null); if (Object.op_Implicit((Object)(object)val)) { Transform[] array = val.bones; int num = Array.IndexOf(array, value) + 1; if (num != 0) { Array.Resize(ref array, array.Length + newBones.Count); Array.Copy(array, num, array, num + newBones.Count, array.Length - newBones.Count - num); newBones.CopyTo(array, num); val.bones = array; modifiedRenderers.Add(val); } } } } public void OnDestroy() { foreach (SkinnedMeshRenderer modifiedRenderer in modifiedRenderers) { if (Object.op_Implicit((Object)(object)modifiedRenderer)) { Transform[] array = modifiedRenderer.bones; int num = Array.IndexOf(array, ((Component)this).transform); Array.Copy(array, num + newBones.Count, array, num, array.Length - num - newBones.Count); Array.Resize(ref array, array.Length - newBones.Count); modifiedRenderer.bones = array; } } modifiedRenderers.Clear(); } } public class AddDynamicColliders : MonoBehaviour { public List<string> paths = new List<string>(); public void Awake() { Transform transform = ((Component)((Component)this).GetComponentInParent<ModelSkinController>()).transform; List<DynamicBoneCollider> list = new List<DynamicBoneCollider>(); foreach (string path in paths) { Transform val = transform.Find(path); if (Object.op_Implicit((Object)(object)val)) { list.AddRange(((Component)val).GetComponents<DynamicBoneCollider>()); } } DynamicBone[] components = ((Component)this).GetComponents<DynamicBone>(); for (int i = 0; i < components.Length; i++) { components[i].m_Colliders.AddRange(list); } } }
Skins/MadVeteran_Artificer.dll
Decompiled a day agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using MonoMod.RuntimeDetour.HookGen; using RoR2; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace MadVeteran_Artificer; [BepInPlugin("com.KrononConpsirator.MadVeteran_Artificer", "MadVeteran_Artificer", "1.0.0")] public class MadVeteran_ArtificerPlugin : BaseUnityPlugin { private class FieldException : Exception { public FieldException(string message, Exception innerException) : base(message, innerException) { } } private class ElementException : Exception { public int Index { get; } public ElementException(int index, string message) : base(message) { Index = index; } } private static AssetBundle assetBundle; private static readonly List<Material> materialsWithRoRShader = new List<Material>(); internal static MadVeteran_ArtificerPlugin Instance { get; private set; } internal static ManualLogSource InstanceLogger { get { MadVeteran_ArtificerPlugin instance = Instance; if (instance == null) { return null; } return ((BaseUnityPlugin)instance).Logger; } } private void Start() { Instance = this; using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MadVeteran_Artificer.krononconpsiratormadveteran_artificer")) { assetBundle = AssetBundle.LoadFromStream(stream); } ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)BodyCatalogInit); HookEndpointManager.Add((MethodBase)typeof(Language).GetMethod("LoadStrings"), (Delegate)new Action<Action<Language>, Language>(LanguageLoadStrings)); ReplaceShaders(); } private static void ReplaceShaders() { LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGStandard.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti/NeoArtiMat.mat"); } private static void LoadMaterialsWithReplacedShader(string shaderPath, params string[] materialPaths) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Shader shader = Addressables.LoadAssetAsync<Shader>((object)shaderPath).WaitForCompletion(); foreach (string text in materialPaths) { Material val = assetBundle.LoadAsset<Material>(text); val.shader = shader; materialsWithRoRShader.Add(val); } } private static void LanguageLoadStrings(Action<Language> orig, Language self) { orig(self); self.SetStringByToken("KRONONCONPSIRATOR_SKIN_MADVETARTIFICERSKINDEF_NAME", "Star Witch"); } private static void BodyCatalogInit() { AddMageBodyMadVetArtificerSkinDefSkin(); } private static void AddMageBodyMadVetArtificerSkinDefSkin() { if (!((BaseUnityPlugin)Instance).Config.Bind<bool>("MadVetArtificerSkinDef", "Enabled", false, (ConfigDescription)null).Value) { return; } string text = "MageBody"; string text2 = "MadVetArtificerSkinDef"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent<ModelLocator>(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject mdl = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)mdl) ? mdl.GetComponent<ModelSkinController>() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = mdl.GetComponentsInChildren<Renderer>(true); mdl.GetComponentsInChildren<Light>(true); SkinDef skin = ScriptableObject.CreateInstance<SkinDef>(); SkinDefParams skinParams = ScriptableObject.CreateInstance<SkinDefParams>(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset<Sprite>("Assets\\SkinMods\\MadVeteran_Artificer\\Icons\\MadVetArtificerSkinDefIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "KRONONCONPSIRATOR_SKIN_MADVETARTIFICERSKINDEF_NAME"; skin.rootObject = mdl; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); TryCatchThrow("Game Object Activations", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0063: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) skinParams.gameObjectActivations = (GameObjectActivation[])(object)new GameObjectActivation[1] { new GameObjectActivation { gameObject = ((Component)ThrowIfNull<Transform>(0, "There is no renderer at path \"MageArmature\"", mdl.transform.Find("MageArmature"))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(0f, 0f, 0f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(1f, 1f, 1f), prefab = assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti/MageNeoAddon.prefab") } }; }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: 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_0079: 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_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: 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) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[2] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti/NeoArtiMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull<Renderer>(0, "There is no renderer with the name \"MageCapeMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "MageCapeMesh"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti/NeoArtiMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull<Renderer>(1, "There is no renderer with the name \"MageMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "MageMesh"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: 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_0069: 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_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[2] { new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Artificer\\Meshes\\MageNeoBody.mesh"), renderer = ThrowIfNull<Renderer>(0, "There is no renderer with the name \"MageCapeMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "MageCapeMesh"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Artificer\\Meshes\\MageNeoHat.mesh"), renderer = ThrowIfNull<Renderer>(1, "There is no renderer with the name \"MageMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "MageMesh"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty<MinionSkinReplacement>(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static T ThrowIfEquals<T>(int index, string message, T value, T expected) where T : Enum { if (value.Equals(expected)) { throw new ElementException(index, message); } return value; } private static T ThrowIfOutOfBounds<T>(int index, string message, T[] array, int elementIndex) where T : class { if (array == null || array.Length <= elementIndex) { throw new ElementException(index, message); } return array[elementIndex]; } private static T ThrowIfNull<T>(int index, string message, T value) where T : class { if (value == null) { throw new ElementException(index, message); } return value; } private static void TryCatchThrow(string message, Action action) { try { action?.Invoke(); } catch (Exception innerException) { throw new FieldException(message, innerException); } } private static void TryAddComponent<T>(GameObject obj) where T : Component { if (Object.op_Implicit((Object)(object)obj) && !Object.op_Implicit((Object)(object)obj.GetComponent<T>())) { obj.AddComponent<T>(); } } private static GameObject GetChildGameObject(GameObject fromGameObject, string withName) { Transform[] componentsInChildren = fromGameObject.GetComponentsInChildren<Transform>(); foreach (Transform val in componentsInChildren) { if (((Object)val).name.StartsWith(withName)) { return ((Component)val).gameObject; } } return null; } } public class MeshActivator : MonoBehaviour { [Serializable] public struct CustomRendererInfo { public Material material; public string addressableMaterialPath; public bool ignoreOverlays; public ShadowCastingMode shadowCastingMode; } [Header("Reference Settings")] [Tooltip("Name of the in-game original mesh object.")] public string referenceObjectName; [Tooltip("Copy Bone Data From Reference Object.")] public bool CopyBoneData = true; [Tooltip("Active state applied once registered.")] public bool initialActiveState = true; [Tooltip("Custom configuration for the renderer info applied to the CharacterModel.")] public CustomRendererInfo customRendererInfo = new CustomRendererInfo { shadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false }; private CharacterModel characterModel; private SkinnedMeshRenderer ownRenderer; private bool registered; private IEnumerator Start() { for (int i = 0; i < 5; i++) { yield return null; } Register(); } private void Register() { //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) if (registered) { return; } ownRenderer = ((Component)this).GetComponent<SkinnedMeshRenderer>(); if (!Object.op_Implicit((Object)(object)ownRenderer)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "' has no SkinnedMeshRenderer."), (Object)(object)this); return; } Transform val = FindReference(); if (!Object.op_Implicit((Object)(object)val)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "': '" + referenceObjectName + "'not found in its hierarchy."), (Object)(object)this); return; } characterModel = ((Component)val).GetComponentInParent<CharacterModel>(); if (!Object.op_Implicit((Object)(object)characterModel)) { characterModel = ((Component)this).GetComponentInParent<CharacterModel>(); } if (!Object.op_Implicit((Object)(object)characterModel)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "': no CharacterModel found above '" + ((Object)val).name + "'"), (Object)(object)this); return; } if (CopyBoneData) { SkinnedMeshRenderer val2 = ((Component)val).GetComponent<SkinnedMeshRenderer>(); if (!Object.op_Implicit((Object)(object)val2)) { val2 = ((Component)val).GetComponentInChildren<SkinnedMeshRenderer>(true); } if (Object.op_Implicit((Object)(object)val2)) { ownRenderer.rootBone = val2.rootBone; ownRenderer.bones = val2.bones; } else { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)val).name + "' has no SkinnedMeshRenderer to copy bones from."), (Object)(object)this); } } Material val3 = customRendererInfo.material; if (!Object.op_Implicit((Object)(object)val3) && !string.IsNullOrEmpty(customRendererInfo.addressableMaterialPath)) { val3 = Addressables.LoadAssetAsync<Material>((object)customRendererInfo.addressableMaterialPath).WaitForCompletion(); if (!Object.op_Implicit((Object)(object)val3)) { Debug.LogWarning((object)("[MeshActivator] Failed to load material via Addressables path: '" + customRendererInfo.addressableMaterialPath + "'. Falling back to sharedMaterial."), (Object)(object)this); } } if (!Object.op_Implicit((Object)(object)val3)) { val3 = ((Renderer)ownRenderer).sharedMaterial; } RendererInfo val4 = new RendererInfo { renderer = (Renderer)(object)ownRenderer, defaultMaterial = val3, defaultShadowCastingMode = customRendererInfo.shadowCastingMode, ignoreOverlays = customRendererInfo.ignoreOverlays }; RendererInfo[] baseRendererInfos = characterModel.baseRendererInfos; int num = -1; for (int i = 0; i < baseRendererInfos.Length; i++) { if ((Object)(object)baseRendererInfos[i].renderer == (Object)(object)ownRenderer) { num = i; break; } } if (num >= 0) { baseRendererInfos[num] = val4; } else { Array.Resize(ref characterModel.baseRendererInfos, baseRendererInfos.Length + 1); characterModel.baseRendererInfos[characterModel.baseRendererInfos.Length - 1] = val4; } registered = true; characterModel.UpdateMaterials(); ((Component)this).gameObject.SetActive(initialActiveState); } private Transform FindReference() { if (string.IsNullOrEmpty(referenceObjectName)) { return null; } Transform parent = ((Component)this).transform.parent; while (Object.op_Implicit((Object)(object)parent)) { if (((Object)parent).name == referenceObjectName) { return parent; } Transform[] componentsInChildren = ((Component)parent).GetComponentsInChildren<Transform>(true); foreach (Transform val in componentsInChildren) { if (!((Object)(object)val == (Object)(object)((Component)this).transform) && !val.IsChildOf(((Component)this).transform) && ((Object)val).name == referenceObjectName) { return val; } } parent = parent.parent; } return null; } }
Skins/MadVeteran_Artificer2.dll
Decompiled a day agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using MadVeteran_Core; using MonoMod.RuntimeDetour.HookGen; using On.RoR2; using RoR2; using RoR2.ContentManagement; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace MadVeteran_Artificer2; public class Arti2_ColorController : MonoBehaviour { private class ManagedMaterial { public Material material; public string propertyName; public Color baseColor = Color.white; public Color defaultColor = Color.white; public Color currentColor = Color.white; public Color targetColor = Color.white; } private CharacterModel characterModel; private bool ConsoleDebug; private List<ManagedMaterial> managedMaterials = new List<ManagedMaterial>(); private List<Material> instantiatedMaterials = new List<Material>(); [Header("Transition Settings")] public float holdDuration = 1.5f; private float transitionProgress = 1f; private float transitionDuration = 0.25f; private float holdTimer = 20f; private bool isHolding; private (string Keyword, Color Cloth, Color Crystal)[] ElementRules; private IEnumerator Start() { for (int i = 0; i < 15; i++) { yield return null; } if (!CorePlugin.Artificer_AstroDeus_Enabled.Value) { ((Behaviour)this).enabled = false; } ConsoleDebug = CorePlugin.ConsoleDebug_Enabled.Value; characterModel = ((Component)this).GetComponentInParent<CharacterModel>(); if (Object.op_Implicit((Object)(object)characterModel) && (Object)(object)characterModel.body != (Object)null) { SetupAndDuplicateMaterials(); ElementRules = CorePlugin.GetArtificerElementRules(); CharacterBody.OnSkillActivated += new hook_OnSkillActivated(OnSkillActivated); } } private void OnSkillActivated(orig_OnSkillActivated orig, CharacterBody self, GenericSkill skill) { //IL_0077: 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) orig.Invoke(self, skill); if (!((Object)(object)characterModel.body == (Object)(object)self) || !((Object)(object)skill.skillDef != (Object)null)) { return; } string skillNameToken = skill.skillDef.skillNameToken; if (ConsoleDebug) { MadVeteran_Artificer2Plugin.InstanceLogger.LogWarning((object)("Skill Token Is: " + skillNameToken)); } (string, Color, Color)[] elementRules = ElementRules; for (int i = 0; i < elementRules.Length; i++) { (string, Color, Color) tuple = elementRules[i]; if (skillNameToken.IndexOf(tuple.Item1, StringComparison.OrdinalIgnoreCase) >= 0) { TriggerSkillColors(tuple.Item2, tuple.Item3, 0.15f); break; } } } private void SetupAndDuplicateMaterials() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001b: 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_0072: 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_007f: Expected O, but got Unknown //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) RendererInfo[] baseRendererInfos = characterModel.baseRendererInfos; for (int i = 0; i < baseRendererInfos.Length; i++) { RendererInfo val = baseRendererInfos[i]; if (!((Object)(object)val.defaultMaterial != (Object)null)) { continue; } string text = ((Object)val.defaultMaterial).name.Replace(" (Instance)", ""); string text2 = null; if (text.Contains("MadVetArti2Cloth") || text.Contains("MadVetArti2Crystal")) { text2 = "_Color"; } if (text2 != null) { Material val2 = new Material(val.defaultMaterial); instantiatedMaterials.Add(val2); baseRendererInfos[i].defaultMaterial = val2; if (Object.op_Implicit((Object)(object)val.renderer)) { val.renderer.material = val2; } Color val3 = (val2.HasProperty(text2) ? val2.GetColor(text2) : Color.white); managedMaterials.Add(new ManagedMaterial { material = val2, propertyName = text2, defaultColor = val3, baseColor = val3, currentColor = val3, targetColor = val3 }); } } } public void TriggerSkillColors(Color clothColor, Color crystalColor, float duration) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: 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_003b: 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_005b: Unknown result type (might be due to invalid IL or missing references) foreach (ManagedMaterial managedMaterial in managedMaterials) { managedMaterial.baseColor = managedMaterial.currentColor; if (((Object)managedMaterial.material).name.Contains("MadVetArti2Cloth")) { managedMaterial.targetColor = clothColor; } else if (((Object)managedMaterial.material).name.Contains("MadVetArti2Crystal")) { managedMaterial.targetColor = crystalColor; } } transitionDuration = duration; transitionProgress = 0f; isHolding = true; holdTimer = holdDuration; } private void FixedUpdate() { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) if (transitionProgress < 1f) { transitionProgress += Time.deltaTime / transitionDuration; float num = Mathf.Clamp01(transitionProgress); foreach (ManagedMaterial managedMaterial in managedMaterials) { managedMaterial.currentColor = Color.Lerp(managedMaterial.baseColor, managedMaterial.targetColor, num); if (managedMaterial.material.HasProperty(managedMaterial.propertyName)) { managedMaterial.material.SetColor(managedMaterial.propertyName, managedMaterial.currentColor); } } } if (!isHolding) { return; } holdTimer -= Time.deltaTime; if (!(holdTimer <= 0f)) { return; } foreach (ManagedMaterial managedMaterial2 in managedMaterials) { managedMaterial2.baseColor = managedMaterial2.currentColor; managedMaterial2.targetColor = managedMaterial2.defaultColor; } transitionDuration = 0.5f; transitionProgress = 0f; isHolding = false; } private void OnDestroy() { foreach (Material instantiatedMaterial in instantiatedMaterials) { if ((Object)(object)instantiatedMaterial != (Object)null) { Object.Destroy((Object)(object)instantiatedMaterial); } } instantiatedMaterials.Clear(); managedMaterials.Clear(); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.KrononConpsirator.MadVeteran_Artificer2", "MadVeteran_Artificer2", "1.0.0")] public class MadVeteran_Artificer2Plugin : BaseUnityPlugin { public class SkinAddedArgs : EventArgs { public SkinDef skinDef { get; } public GameObject bodyPrefab { get; } public SkinAddedArgs(SkinDef newSkinDef, GameObject newGameObject) { skinDef = newSkinDef; bodyPrefab = newGameObject; } } public class MaterialDuplicatorExtension { internal void BeforeStart() { } internal void AfterStart() { try { MadVetArti2Crystal(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogWarning((object)("MaterialDuplicator entry 0 failed: " + ex)); } } try { MadVetArti2JetFlame(); } catch (Exception ex2) { ManualLogSource instanceLogger2 = InstanceLogger; if (instanceLogger2 != null) { instanceLogger2.LogWarning((object)("MaterialDuplicator entry 1 failed: " + ex2)); } } } internal void BeforeBodyCatalogInit() { } internal void AfterBodyCatalogInit() { } private void MadVetArti2Crystal() { //IL_009c: Unknown result type (might be due to invalid IL or missing references) Material val = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/MadVetArti2Crystal.mat"); if ((Object)(object)val == (Object)null) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogWarning((object)"MaterialDuplicator: material not found in bundle: Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/MadVetArti2Crystal.mat"); } return; } Material val2 = MaterialDuplicator_LoadAddressable<Material>("RoR2/Base/Mage/matMageIce.mat"); if ((Object)(object)val2 == (Object)null) { ManualLogSource instanceLogger2 = InstanceLogger; if (instanceLogger2 != null) { instanceLogger2.LogWarning((object)"MaterialDuplicator: reference material missing, skipping MadVetArti2Crystal"); } } else { val.shader = val2.shader; val.CopyPropertiesFromMaterial(val2); val.shaderKeywords = val2.shaderKeywords; val.renderQueue = val2.renderQueue; val.SetColor("_Color", new Color(1f, 1f, 1f, 1f)); } } private void MadVetArti2JetFlame() { Material val = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/MadVetArti2JetFlame.mat"); if ((Object)(object)val == (Object)null) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogWarning((object)"MaterialDuplicator: material not found in bundle: Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/MadVetArti2JetFlame.mat"); } return; } Material val2 = MaterialDuplicator_LoadAddressable<Material>("RoR2/Base/Common/VFX/mageMageFireStarburst.mat"); if ((Object)(object)val2 == (Object)null) { ManualLogSource instanceLogger2 = InstanceLogger; if (instanceLogger2 != null) { instanceLogger2.LogWarning((object)"MaterialDuplicator: reference material missing, skipping MadVetArti2JetFlame"); } return; } val.shader = val2.shader; val.CopyPropertiesFromMaterial(val2); val.shaderKeywords = val2.shaderKeywords; val.renderQueue = val2.renderQueue; Texture val3 = assetBundle.LoadAsset<Texture>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/texRampCamuflage.png"); if ((Object)(object)val3 == (Object)null) { ManualLogSource instanceLogger3 = InstanceLogger; if (instanceLogger3 != null) { instanceLogger3.LogWarning((object)"MaterialDuplicator: texture for _RemapTex could not be loaded."); } } else { val.SetTexture("_RemapTex", val3); } val.SetFloat("_AlphaBoost", 0.8232449f); } private static T MaterialDuplicator_LoadAddressable<T>(string key) where T : Object { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) try { return Addressables.LoadAssetAsync<T>((object)key).WaitForCompletion(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogWarning((object)("MaterialDuplicator: could not load addressable '" + key + "': " + ex.Message)); } return default(T); } } } private static MaterialDuplicatorExtension _MaterialDuplicatorExtension = new MaterialDuplicatorExtension(); public static AssetBundle assetBundle; private static readonly List<Material> materialsWithRoRShader = new List<Material>(); internal static MadVeteran_Artificer2Plugin Instance { get; private set; } internal static ManualLogSource InstanceLogger { get { MadVeteran_Artificer2Plugin instance = Instance; if (instance == null) { return null; } return ((BaseUnityPlugin)instance).Logger; } } private static event EventHandler<SkinAddedArgs> MageBodyMadVetArtificer2SkinDefSkinAddedEvent; private void Start() { Instance = this; BeforeStart(); using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MadVeteran_Artificer2.krononconpsiratormadveteran_artificer2")) { assetBundle = AssetBundle.LoadFromStream(stream); } ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)BodyCatalogInit); HookEndpointManager.Add((MethodBase)typeof(Language).GetMethod("LoadStrings"), (Delegate)new Action<Action<Language>, Language>(LanguageLoadStrings)); ReplaceShaders(); AfterStart(); } private void BeforeStart() { try { _MaterialDuplicatorExtension.BeforeStart(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogError((object)("MaterialDuplicator BeforeStart failed: " + ex)); } } } private void AfterStart() { try { _MaterialDuplicatorExtension.AfterStart(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogError((object)("MaterialDuplicator AfterStart failed: " + ex)); } } } private static void BeforeBodyCatalogInit() { try { _MaterialDuplicatorExtension.BeforeBodyCatalogInit(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogError((object)("MaterialDuplicator BeforeBodyCatalogInit failed: " + ex)); } } } private static void AfterBodyCatalogInit() { try { _MaterialDuplicatorExtension.AfterBodyCatalogInit(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogError((object)("MaterialDuplicator AfterBodyCatalogInit failed: " + ex)); } } } private static void ReplaceShaders() { LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGStandard.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/MadVetArti2Crystal.mat", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/MadVetArti2Cloth.mat", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/MadVetArti2BodyMat.mat"); LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGOpaqueCloudRemap.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/MadVetArti2StarCloth.mat"); LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGCloudRemap.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/MadVetArti2JetFlame.mat"); } private static void LoadMaterialsWithReplacedShader(string shaderPath, params string[] materialPaths) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Shader shader = Addressables.LoadAssetAsync<Shader>((object)shaderPath).WaitForCompletion(); foreach (string text in materialPaths) { Material val = assetBundle.LoadAsset<Material>(text); val.shader = shader; materialsWithRoRShader.Add(val); } } private static void LanguageLoadStrings(Action<Language> orig, Language self) { orig(self); self.SetStringByToken("KRONONCONPSIRATOR_SKIN_MADVETARTIFICER2SKINDEF_NAME", "Astro Deus"); } private static void BodyCatalogInit() { BeforeBodyCatalogInit(); AddMageBodyMadVetArtificer2SkinDefSkin(); AfterBodyCatalogInit(); } private static void MageBodyMadVetArtificer2SkinDefSkinAdded(SkinDef skinDef, GameObject bodyPrefab) { MadVeteran_Artificer2Plugin.MageBodyMadVetArtificer2SkinDefSkinAddedEvent?.Invoke(Instance, new SkinAddedArgs(skinDef, bodyPrefab)); } private static SkinDef CreateMageBodyMadVetArtificer2SkinDefSkin(GameObject mdl, ModelSkinController skinController) { Renderer[] renderers = mdl.GetComponentsInChildren<Renderer>(true); mdl.GetComponentsInChildren<Light>(true); List<string> skinnedRendererPaths = new List<string>(); Renderer[] array = renderers; foreach (Renderer val in array) { if (val is SkinnedMeshRenderer) { skinnedRendererPaths.Add(Util.BuildPrefabTransformPath(mdl.transform, ((Component)val).transform, false, false)); } } SkinDef skin = ScriptableObject.CreateInstance<SkinDef>(); SkinDefParams skinParams = ScriptableObject.CreateInstance<SkinDefParams>(); skin.skinDefParams = skinParams; ((Object)skin).name = "MadVetArtificer2SkinDef"; skin.nameToken = "KRONONCONPSIRATOR_SKIN_MADVETARTIFICER2SKINDEF_NAME"; skin.rootObject = mdl; Helpers.TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset<Sprite>("Assets\\SkinMods\\MadVeteran_Artificer2\\Icons\\MadVetArtificer2SkinDefIcon.png"); }); Helpers.TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); Helpers.TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { Helpers.ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); Helpers.TryCatchThrow("Game Object Activations", delegate { //IL_0011: 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_0069: 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_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0134: 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_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) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_026b: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_02ed: Unknown result type (might be due to invalid IL or missing references) //IL_02f2: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_030d: Unknown result type (might be due to invalid IL or missing references) //IL_0323: Unknown result type (might be due to invalid IL or missing references) //IL_0328: Unknown result type (might be due to invalid IL or missing references) //IL_0390: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Unknown result type (might be due to invalid IL or missing references) //IL_039a: Unknown result type (might be due to invalid IL or missing references) //IL_03ed: Unknown result type (might be due to invalid IL or missing references) //IL_03f2: Unknown result type (might be due to invalid IL or missing references) //IL_0408: Unknown result type (might be due to invalid IL or missing references) //IL_040d: Unknown result type (might be due to invalid IL or missing references) //IL_0423: Unknown result type (might be due to invalid IL or missing references) //IL_0428: Unknown result type (might be due to invalid IL or missing references) //IL_046c: Unknown result type (might be due to invalid IL or missing references) //IL_046d: Unknown result type (might be due to invalid IL or missing references) //IL_0476: Unknown result type (might be due to invalid IL or missing references) //IL_04cd: Unknown result type (might be due to invalid IL or missing references) //IL_04ce: Unknown result type (might be due to invalid IL or missing references) //IL_04d7: Unknown result type (might be due to invalid IL or missing references) //IL_052e: Unknown result type (might be due to invalid IL or missing references) //IL_052f: Unknown result type (might be due to invalid IL or missing references) skinParams.gameObjectActivations = (GameObjectActivation[])(object)new GameObjectActivation[9] { new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"JetsL\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "JetsL")))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = false }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Renderer>(1, "There is no renderer with the name \"JetsR\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "JetsR")))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = false }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Renderer>(2, "There is no renderer with the name \"MageCapeMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "MageCapeMesh")))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = false }, new GameObjectActivation { gameObject = Helpers.ThrowIfNull<GameObject>(3, "There is no renderer at path \"MageArmature\"", Helpers.GetChildGameObject(mdl, "MageArmature")).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(0f, 0f, 0f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(1f, 1f, 1f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/MageClothAdd.prefab")) }, new GameObjectActivation { gameObject = Helpers.ThrowIfNull<GameObject>(4, "There is no renderer at path \"pelvis\"", Helpers.GetChildGameObject(mdl, "pelvis")).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(0f, 0f, 0f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(1f, 1f, 1f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/Prefab/PelvisAddon.prefab")) }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Transform>(5, "There is no renderer at path \"MageArmature/ROOT/base/stomach/chest\"", mdl.transform.Find("MageArmature/ROOT/base/stomach/chest"))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(-2.182787E-10f, 1.424923E-07f, 7.435119E-11f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(1f, 1f, 1f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/Prefab/ChestCloakAddon.prefab")).WithComponent<InsertBones>((Action<InsertBones>)delegate(InsertBones c) { c.rendererPaths.AddRange(skinnedRendererPaths); c.afterPath = "MageArmature/ROOT/base/stomach/chest/clavicle.r/upper_arm.r/lower_arm.r/hand.r/GripControl.r/thumbIKTarget.r"; Transform transform = ((Component)c).transform; c.newBones.Add(transform); c.newBones.Add(transform.GetChild(4)); c.newBones.Add(transform.GetChild(4).GetChild(0)); c.newBones.Add(transform.GetChild(4).GetChild(0).GetChild(0)); c.newBones.Add(transform.GetChild(4).GetChild(0).GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(4).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(4).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(4).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(4).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(3)); c.newBones.Add(transform.GetChild(3).GetChild(0)); c.newBones.Add(transform.GetChild(3).GetChild(0).GetChild(0)); c.newBones.Add(transform.GetChild(3).GetChild(0).GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(3).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(3).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(3).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(3).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(2)); c.newBones.Add(transform.GetChild(2).GetChild(0)); c.newBones.Add(transform.GetChild(2).GetChild(0).GetChild(0)); c.newBones.Add(transform.GetChild(2).GetChild(0).GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(2).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(2).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(2).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(2).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(1)); c.newBones.Add(transform.GetChild(1).GetChild(0)); c.newBones.Add(transform.GetChild(1).GetChild(0).GetChild(0)); c.newBones.Add(transform.GetChild(1).GetChild(0).GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(1).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(1).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(1).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(1).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); }).WithComponent<AddDynamicColliders>((Action<AddDynamicColliders>)delegate(AddDynamicColliders c) { c.paths.Add("MageArmature/ROOT/base/pelvis/PelvisAddon"); }) }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Transform>(6, "There is no renderer at path \"MageArmature/ROOT/base/stomach/chest/neck/head\"", mdl.transform.Find("MageArmature/ROOT/base/stomach/chest/neck/head"))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(-0.0009054426f, 0.1722583f, -0.000690011f), localRotation = new Vector3(323.763f, -0.003991133f, 359.9f), localScale = new Vector3(0.9999999f, 0.9999999f, 0.9999999f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/Prefab/HatBone.prefab")).WithComponent<InsertBones>((Action<InsertBones>)delegate(InsertBones c) { c.rendererPaths.AddRange(skinnedRendererPaths); c.afterPath = "MageArmature/ROOT/base/stomach/chest/neck/head"; Transform transform = ((Component)c).transform; c.newBones.Add(transform); c.newBones.Add(transform.GetChild(1)); c.newBones.Add(transform.GetChild(1).GetChild(0)); }) }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Renderer>(7, "There is no renderer with the name \"Fire\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "Fire")))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = false }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Renderer>(8, "There is no renderer with the name \"FireRing\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "FireRing")))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = false } }; }); Helpers.TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[1] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/MadVetArti2Crystal.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"MageMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "MageMesh"))), hideOnDeath = false, ignoresMaterialOverrides = false } }; }); Helpers.TryCatchThrow("MeshReplacements", delegate { //IL_0010: 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_0069: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[1] { new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Artificer2\\Meshes\\MageNeoCrystal.mesh"), renderer = Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"MageMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "MageMesh"))) } }; }); Helpers.TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = Array.Empty<LightInfo>(); }); Helpers.TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty<MinionSkinReplacement>(); }); Helpers.TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>(); }); return skin; } private static SkinDef CreateMageBodyMadVetArtificer2SkinDefLobbySkin(GameObject mdl, ModelSkinController skinController) { Renderer[] renderers = mdl.GetComponentsInChildren<Renderer>(true); mdl.GetComponentsInChildren<Light>(true); List<string> skinnedRendererPaths = new List<string>(); Renderer[] array = renderers; foreach (Renderer val in array) { if (val is SkinnedMeshRenderer) { skinnedRendererPaths.Add(Util.BuildPrefabTransformPath(mdl.transform, ((Component)val).transform, false, false)); } } SkinDef skin = ScriptableObject.CreateInstance<SkinDef>(); SkinDefParams skinParams = ScriptableObject.CreateInstance<SkinDefParams>(); skin.skinDefParams = skinParams; ((Object)skin).name = "MadVetArtificer2SkinDef"; skin.nameToken = "KRONONCONPSIRATOR_SKIN_MADVETARTIFICER2SKINDEF_NAME"; skin.rootObject = mdl; Helpers.TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset<Sprite>("Assets\\SkinMods\\MadVeteran_Artificer2\\Icons\\MadVetArtificer2SkinDefIcon.png"); }); Helpers.TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); Helpers.TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { Helpers.ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); Helpers.TryCatchThrow("Game Object Activations", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: 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_011b: 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_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: 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_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_0260: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_02cd: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_02d7: Unknown result type (might be due to invalid IL or missing references) //IL_032a: Unknown result type (might be due to invalid IL or missing references) //IL_032f: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) //IL_034a: Unknown result type (might be due to invalid IL or missing references) //IL_0360: Unknown result type (might be due to invalid IL or missing references) //IL_0365: Unknown result type (might be due to invalid IL or missing references) //IL_03a9: Unknown result type (might be due to invalid IL or missing references) //IL_03aa: Unknown result type (might be due to invalid IL or missing references) skinParams.gameObjectActivations = (GameObjectActivation[])(object)new GameObjectActivation[5] { new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"MageCapeMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "MageCapeMesh")))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = false }, new GameObjectActivation { gameObject = Helpers.ThrowIfNull<GameObject>(1, "There is no renderer at path \"MageArmature\"", Helpers.GetChildGameObject(mdl, "MageArmature")).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(0f, 0f, 0f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(1f, 1f, 1f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/MageClothAdd.prefab")) }, new GameObjectActivation { gameObject = Helpers.ThrowIfNull<GameObject>(2, "There is no renderer at path \"pelvis\"", Helpers.GetChildGameObject(mdl, "pelvis")).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(0f, 0f, 0f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(1f, 1f, 1f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/Prefab/PelvisAddon.prefab")) }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Transform>(3, "There is no renderer at path \"MageArmature/ROOT/base/stomach/chest\"", mdl.transform.Find("MageArmature/ROOT/base/stomach/chest"))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(-2.182787E-10f, 1.424923E-07f, 7.435119E-11f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(1f, 1f, 1f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/Prefab/ChestCloakAddon.prefab")).WithComponent<InsertBones>((Action<InsertBones>)delegate(InsertBones c) { c.rendererPaths.AddRange(skinnedRendererPaths); c.afterPath = "MageArmature/ROOT/base/stomach/chest/clavicle.r/upper_arm.r/lower_arm.r/hand.r/GripControl.r/thumbIKTarget.r"; Transform transform = ((Component)c).transform; c.newBones.Add(transform); c.newBones.Add(transform.GetChild(4)); c.newBones.Add(transform.GetChild(4).GetChild(0)); c.newBones.Add(transform.GetChild(4).GetChild(0).GetChild(0)); c.newBones.Add(transform.GetChild(4).GetChild(0).GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(4).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(4).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(4).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(4).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(3)); c.newBones.Add(transform.GetChild(3).GetChild(0)); c.newBones.Add(transform.GetChild(3).GetChild(0).GetChild(0)); c.newBones.Add(transform.GetChild(3).GetChild(0).GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(3).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(3).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(3).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(3).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(2)); c.newBones.Add(transform.GetChild(2).GetChild(0)); c.newBones.Add(transform.GetChild(2).GetChild(0).GetChild(0)); c.newBones.Add(transform.GetChild(2).GetChild(0).GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(2).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(2).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(2).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(2).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(1)); c.newBones.Add(transform.GetChild(1).GetChild(0)); c.newBones.Add(transform.GetChild(1).GetChild(0).GetChild(0)); c.newBones.Add(transform.GetChild(1).GetChild(0).GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(1).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(1).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(1).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(1).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); c.newBones.Add(transform.GetChild(0).GetChild(0).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0)); }).WithComponent<AddDynamicColliders>((Action<AddDynamicColliders>)delegate(AddDynamicColliders c) { c.paths.Add("MageArmature/ROOT/base/pelvis/PelvisAddon"); }) }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Transform>(4, "There is no renderer at path \"MageArmature/ROOT/base/stomach/chest/neck/head\"", mdl.transform.Find("MageArmature/ROOT/base/stomach/chest/neck/head"))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(-0.0009054426f, 0.1722583f, -0.000690011f), localRotation = new Vector3(323.763f, -0.003991133f, 359.9f), localScale = new Vector3(0.9999999f, 0.9999999f, 0.9999999f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/Prefab/HatBone.prefab")).WithComponent<InsertBones>((Action<InsertBones>)delegate(InsertBones c) { c.rendererPaths.AddRange(skinnedRendererPaths); c.afterPath = "MageArmature/ROOT/base/stomach/chest/neck/head"; Transform transform = ((Component)c).transform; c.newBones.Add(transform); c.newBones.Add(transform.GetChild(1)); c.newBones.Add(transform.GetChild(1).GetChild(0)); }) } }; }); Helpers.TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[1] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoArti2/MadVetArti2Crystal.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"MageMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "MageMesh"))), hideOnDeath = false, ignoresMaterialOverrides = false } }; }); Helpers.TryCatchThrow("MeshReplacements", delegate { //IL_0010: 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_0069: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[1] { new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Artificer2\\Meshes\\MageNeoCrystal.mesh"), renderer = Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"MageMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "MageMesh"))) } }; }); Helpers.TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = Array.Empty<LightInfo>(); }); Helpers.TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty<MinionSkinReplacement>(); }); Helpers.TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>(); }); return skin; } private static void AddMageBodyMadVetArtificer2SkinDefSkin() { string text = "MageBody"; string text2 = "MadVetArtificer2SkinDef"; GameObject bodyPrefab = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)bodyPrefab)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } try { ModelLocator component = bodyPrefab.GetComponent<ModelLocator>(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController val = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent<ModelSkinController>() : null); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } SkinDef val2 = CreateMageBodyMadVetArtificer2SkinDefSkin(gameObject, val); Array.Resize(ref val.skins, val.skins.Length + 1); val.skins[val.skins.Length - 1] = val2; MageBodyMadVetArtificer2SkinDefSkinAdded(val2, bodyPrefab); } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } try { SurvivorDef val3 = ((IEnumerable<SurvivorDef>)ContentManager.survivorDefs).FirstOrDefault((Func<SurvivorDef, bool>)((SurvivorDef d) => (Object)(object)d.bodyPrefab == (Object)(object)bodyPrefab)); if (!Object.op_Implicit((Object)(object)val3)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" lobby skin to \"" + text + "\" because SurvivorDef doesn't exist")); return; } ModelSkinController componentInChildren = val3.displayPrefab.GetComponentInChildren<ModelSkinController>(); if (!Object.op_Implicit((Object)(object)componentInChildren)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" lobby skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); } else { SkinDef val4 = CreateMageBodyMadVetArtificer2SkinDefLobbySkin(((Component)componentInChildren).gameObject, componentInChildren); Array.Resize(ref componentInChildren.skins, componentInChildren.skins.Length + 1); componentInChildren.skins[^1] = val4; } } catch (FieldException ex4) { if (ex4.InnerException is ElementException ex5) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" lobby skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex4.Message}, element: {ex5.Index}"); InstanceLogger.LogWarning((object)ex5.Message); InstanceLogger.LogError((object)ex4.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" lobby skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex4.Message)); InstanceLogger.LogError((object)ex4.InnerException); } } catch (Exception ex6) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" lobby skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex6); } } } public class MeshActivator : MonoBehaviour { [Serializable] public struct CustomRendererInfo { public Material material; public string addressableMaterialPath; public bool ignoreOverlays; public ShadowCastingMode shadowCastingMode; } [Header("Reference Settings")] [Tooltip("Name of the in-game original mesh object.")] public string referenceObjectName; [Tooltip("Copy Bone Data From Reference Object.")] public bool CopyBoneData = true; [Tooltip("Active state applied once registered.")] public bool initialActiveState = true; [Tooltip("Custom configuration for the renderer info applied to the CharacterModel.")] public CustomRendererInfo customRendererInfo = new CustomRendererInfo { shadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false }; private CharacterModel characterModel; private bool registered; private IEnumerator Start() { for (int i = 0; i < 5; i++) { yield return null; } Register(); } private void Register() { //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0212: 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_0293: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) if (registered) { return; } Renderer component = ((Component)this).GetComponent<Renderer>(); if (!Object.op_Implicit((Object)(object)component)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "' has no Renderer."), (Object)(object)this); return; } Transform val = FindReference(); if (!Object.op_Implicit((Object)(object)val)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "': '" + referenceObjectName + "' not found in its hierarchy."), (Object)(object)this); return; } characterModel = ((Component)val).GetComponentInParent<CharacterModel>(); if (!Object.op_Implicit((Object)(object)characterModel)) { characterModel = ((Component)this).GetComponentInParent<CharacterModel>(); } if (!Object.op_Implicit((Object)(object)characterModel)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "': no CharacterModel found above '" + ((Object)val).name + "'"), (Object)(object)this); return; } if (CopyBoneData) { SkinnedMeshRenderer val2 = ((Component)val).GetComponent<SkinnedMeshRenderer>(); if (!Object.op_Implicit((Object)(object)val2)) { val2 = ((Component)val).GetComponentInChildren<SkinnedMeshRenderer>(true); } if (Object.op_Implicit((Object)(object)val2)) { SkinnedMeshRenderer val3 = (SkinnedMeshRenderer)(object)((component is SkinnedMeshRenderer) ? component : null); if (val3 != null) { val3.rootBone = val2.rootBone; val3.bones = val2.bones; goto IL_015d; } } Debug.LogWarning((object)("[MeshActivator] '" + ((Object)val).name + "' has no SkinnedMeshRenderer to copy bones from."), (Object)(object)this); } goto IL_015d; IL_015d: Material val4 = customRendererInfo.material; if (!Object.op_Implicit((Object)(object)val4) && !string.IsNullOrEmpty(customRendererInfo.addressableMaterialPath)) { val4 = Addressables.LoadAssetAsync<Material>((object)customRendererInfo.addressableMaterialPath).WaitForCompletion(); if (!Object.op_Implicit((Object)(object)val4)) { Debug.LogWarning((object)("[MeshActivator] Failed to load material via Addressables path: '" + customRendererInfo.addressableMaterialPath + "'. Falling back to sharedMaterial."), (Object)(object)this); } } if (!Object.op_Implicit((Object)(object)val4)) { val4 = component.sharedMaterial; } RendererInfo val5 = new RendererInfo { renderer = component, defaultMaterial = val4, defaultShadowCastingMode = customRendererInfo.shadowCastingMode, ignoreOverlays = customRendererInfo.ignoreOverlays }; RendererInfo[] baseRendererInfos = characterModel.baseRendererInfos; int num = -1; for (int i = 0; i < baseRendererInfos.Length; i++) { if ((Object)(object)baseRendererInfos[i].renderer == (Object)(object)component) { num = i; break; } } if (num >= 0) { baseRendererInfos[num] = val5; } else { Array.Resize(ref characterModel.baseRendererInfos, baseRendererInfos.Length + 1); characterModel.baseRendererInfos[characterModel.baseRendererInfos.Length - 1] = val5; } registered = true; characterModel.UpdateMaterials(); ((Component)this).gameObject.SetActive(initialActiveState); } private Transform FindReference() { if (string.IsNullOrEmpty(referenceObjectName)) { return null; } Transform parent = ((Component)this).transform.parent; while (Object.op_Implicit((Object)(object)parent)) { if (((Object)parent).name == referenceObjectName) { return parent; } Transform[] componentsInChildren = ((Component)parent).GetComponentsInChildren<Transform>(true); foreach (Transform val in componentsInChildren) { if (!((Object)(object)val == (Object)(object)((Component)this).transform) && !val.IsChildOf(((Component)this).transform) && ((Object)val).name == referenceObjectName) { return val; } } parent = parent.parent; } return null; } } public static class Helpers { private static GameObject prefabHolder; public static GameObject ClonePrefab(GameObject gameObject) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown if (!Object.op_Implicit((Object)(object)prefabHolder)) { prefabHolder = new GameObject("PrefabHolder"); Object.DontDestroyOnLoad((Object)(object)prefabHolder); prefabHolder.SetActive(false); } GameObject obj = Object.Instantiate<GameObject>(gameObject, prefabHolder.transform); obj.AddComponent<RemoveClone>(); ((Object)obj).name = ((Object)gameObject).name; return obj; } public static GameObject GetChildGameObject(GameObject fromGameObject, string withName) { Transform[] componentsInChildren = fromGameObject.GetComponentsInChildren<Transform>(); foreach (Transform val in componentsInChildren) { if (((Object)val).name.StartsWith(withName)) { return ((Component)val).gameObject; } } return null; } public static Transform GetChild(this Transform transform, int index, out Transform child) { return child = transform.GetChild(index); } public static GameObject WithComponent<T>(this GameObject gameObject, Action<T> modifier = null) where T : Component { T obj = gameObject.AddComponent<T>(); modifier?.Invoke(obj); return gameObject; } public static GameObject WithTryComponent<T>(this GameObject gameObject, Action<T> modifier = null) where T : Component { if (Object.op_Implicit((Object)(object)gameObject) && !Object.op_Implicit((Object)(object)gameObject.GetComponent<T>())) { T obj = gameObject.AddComponent<T>(); modifier?.Invoke(obj); } return gameObject; } public static T ThrowIfEquals<T>(int index, string message, T value, T expected) where T : Enum { if (value.Equals(expected)) { throw new ElementException(index, message); } return value; } public static T ThrowIfOutOfBounds<T>(int index, string message, T[] array, int elementIndex) where T : class { if (array == null || array.Length <= elementIndex) { throw new ElementException(index, message); } return array[elementIndex]; } public static T ThrowIfNull<T>(int index, string message, T value) where T : class { if (value == null) { throw new ElementException(index, message); } return value; } public static void TryCatchThrow(string message, Action action) { try { action?.Invoke(); } catch (Exception innerException) { throw new FieldException(message, innerException); } } } public class RemoveClone : MonoBehaviour { public void Awake() { ((Object)this).name = ((Object)this).name[..^7]; } } public class FieldException : Exception { public FieldException(string message, Exception innerException) : base(message, innerException) { } } public class ElementException : Exception { public int Index { get; } public ElementException(int index, string message) : base(message) { Index = index; } } public class InsertBones : MonoBehaviour { private readonly List<SkinnedMeshRenderer> modifiedRenderers = new List<SkinnedMeshRenderer>(); public List<string> rendererPaths = new List<string>(); public List<Transform> newBones = new List<Transform>(); public string afterPath; public void Awake() { Transform transform = ((Component)((Component)this).GetComponentInParent<ModelSkinController>()).transform; Transform value = ((Component)transform).transform.Find(afterPath); foreach (string rendererPath in rendererPaths) { Transform obj = transform.Find(rendererPath); SkinnedMeshRenderer val = ((obj != null) ? ((Component)obj).GetComponent<SkinnedMeshRenderer>() : null); if (Object.op_Implicit((Object)(object)val)) { Transform[] array = val.bones; int num = Array.IndexOf(array, value) + 1; if (num != 0) { Array.Resize(ref array, array.Length + newBones.Count); Array.Copy(array, num, array, num + newBones.Count, array.Length - newBones.Count - num); newBones.CopyTo(array, num); val.bones = array; modifiedRenderers.Add(val); } } } } public void OnDestroy() { foreach (SkinnedMeshRenderer modifiedRenderer in modifiedRenderers) { if (Object.op_Implicit((Object)(object)modifiedRenderer)) { Transform[] array = modifiedRenderer.bones; int num = Array.IndexOf(array, ((Component)this).transform); Array.Copy(array, num + newBones.Count, array, num, array.Length - num - newBones.Count); Array.Resize(ref array, array.Length - newBones.Count); modifiedRenderer.bones = array; } } modifiedRenderers.Clear(); } } public class AddDynamicColliders : MonoBehaviour { public List<string> paths = new List<string>(); public void Awake() { Transform transform = ((Component)((Component)this).GetComponentInParent<ModelSkinController>()).transform; List<DynamicBoneCollider> list = new List<DynamicBoneCollider>(); foreach (string path in paths) { Transform val = transform.Find(path); if (Object.op_Implicit((Object)(object)val)) { list.AddRange(((Component)val).GetComponents<DynamicBoneCollider>()); } } DynamicBone[] components = ((Component)this).GetComponents<DynamicBone>(); for (int i = 0; i < components.Length; i++) { components[i].m_Colliders.AddRange(list); } } }
Skins/MadVeteran_Commando.dll
Decompiled a day agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using MonoMod.RuntimeDetour.HookGen; using RoR2; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace MadVeteran_Commando; [BepInPlugin("com.KrononConpsirator.MadVeteran_Commando", "MadVeteran_Commando", "1.0.0")] public class MadVeteran_CommandoPlugin : BaseUnityPlugin { private class FieldException : Exception { public FieldException(string message, Exception innerException) : base(message, innerException) { } } private class ElementException : Exception { public int Index { get; } public ElementException(int index, string message) : base(message) { Index = index; } } private static AssetBundle assetBundle; private static readonly List<Material> materialsWithRoRShader = new List<Material>(); internal static MadVeteran_CommandoPlugin Instance { get; private set; } internal static ManualLogSource InstanceLogger { get { MadVeteran_CommandoPlugin instance = Instance; if (instance == null) { return null; } return ((BaseUnityPlugin)instance).Logger; } } private void Start() { Instance = this; using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MadVeteran_Commando.krononconpsiratormadveteran_commando")) { assetBundle = AssetBundle.LoadFromStream(stream); } ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)BodyCatalogInit); HookEndpointManager.Add((MethodBase)typeof(Language).GetMethod("LoadStrings"), (Delegate)new Action<Action<Language>, Language>(LanguageLoadStrings)); ReplaceShaders(); } private static void ReplaceShaders() { LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGStandard.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMando/NeoMandoMat.mat"); } private static void LoadMaterialsWithReplacedShader(string shaderPath, params string[] materialPaths) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Shader shader = Addressables.LoadAssetAsync<Shader>((object)shaderPath).WaitForCompletion(); foreach (string text in materialPaths) { Material val = assetBundle.LoadAsset<Material>(text); val.shader = shader; materialsWithRoRShader.Add(val); } } private static void LanguageLoadStrings(Action<Language> orig, Language self) { orig(self); self.SetStringByToken("KRONONCONPSIRATOR_SKIN_MADVETMANDOSKINDEF_NAME", "Refined Junkie"); } private static void BodyCatalogInit() { AddCommandoBodyMadVetmandoSkinDefSkin(); } private static void AddCommandoBodyMadVetmandoSkinDefSkin() { string text = "CommandoBody"; string text2 = "MadVetmandoSkinDef"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent<ModelLocator>(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController val2 = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent<ModelSkinController>() : null); if (!Object.op_Implicit((Object)(object)val2)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren<Renderer>(true); gameObject.GetComponentsInChildren<Light>(true); SkinDef skin = ScriptableObject.CreateInstance<SkinDef>(); SkinDefParams skinParams = ScriptableObject.CreateInstance<SkinDefParams>(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset<Sprite>("Assets\\SkinMods\\MadVeteran_Commando\\Icons\\MadVetmandoSkinDefIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "KRONONCONPSIRATOR_SKIN_MADVETMANDOSKINDEF_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = Array.Empty<SkinDef>(); }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty<GameObjectActivation>(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: 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_0079: 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_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: 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_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0113: 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_015d: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[3] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMando/NeoMandoMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull<Renderer>(0, "There is no renderer with the name \"CommandoMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "CommandoMesh"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMando/NeoMandoMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = true, renderer = ThrowIfNull<Renderer>(1, "There is no renderer with the name \"GunMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "GunMesh"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMando/NeoMandoMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = true, renderer = ThrowIfNull<Renderer>(2, "There is no renderer with the name \"GunMesh.001\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "GunMesh.001"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: 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_0069: 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_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_012c: 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) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[3] { new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Commando\\Meshes\\CommandoMesh.mesh"), renderer = ThrowIfNull<Renderer>(0, "There is no renderer with the name \"CommandoMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "CommandoMesh"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Commando\\Meshes\\GunMesh.mesh"), renderer = ThrowIfNull<Renderer>(1, "There is no renderer with the name \"GunMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "GunMesh"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Commando\\Meshes\\GunMesh.001.mesh"), renderer = ThrowIfNull<Renderer>(2, "There is no renderer with the name \"GunMesh.001\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "GunMesh.001"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty<MinionSkinReplacement>(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>(); }); Array.Resize(ref val2.skins, val2.skins.Length + 1); val2.skins[val2.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static T ThrowIfEquals<T>(int index, string message, T value, T expected) where T : Enum { if (value.Equals(expected)) { throw new ElementException(index, message); } return value; } private static T ThrowIfOutOfBounds<T>(int index, string message, T[] array, int elementIndex) where T : class { if (array == null || array.Length <= elementIndex) { throw new ElementException(index, message); } return array[elementIndex]; } private static T ThrowIfNull<T>(int index, string message, T value) where T : class { if (value == null) { throw new ElementException(index, message); } return value; } private static void TryCatchThrow(string message, Action action) { try { action?.Invoke(); } catch (Exception innerException) { throw new FieldException(message, innerException); } } private static void TryAddComponent<T>(GameObject obj) where T : Component { if (Object.op_Implicit((Object)(object)obj) && !Object.op_Implicit((Object)(object)obj.GetComponent<T>())) { obj.AddComponent<T>(); } } private static GameObject GetChildGameObject(GameObject fromGameObject, string withName) { Transform[] componentsInChildren = fromGameObject.GetComponentsInChildren<Transform>(); foreach (Transform val in componentsInChildren) { if (((Object)val).name.StartsWith(withName)) { return ((Component)val).gameObject; } } return null; } }
Skins/MadVeteran_Core.dll
Decompiled a day agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; 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: AssemblyVersion("0.0.0.0")] namespace MadVeteran_Core; [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.KrononConpsirator.MadVeteran_Core", "MadVeteran_Core", "1.0.0")] public class CorePlugin : BaseUnityPlugin { public static CorePlugin Instance { get; private set; } public static ConfigEntry<bool> ConsoleDebug_Enabled { get; private set; } public static ConfigEntry<bool> Artificer_AstroDeus_Enabled { get; private set; } public static ConfigEntry<string> Artificer_AstroDeus_FireToken { get; private set; } public static ConfigEntry<Color> Artificer_AstroDeus_FireColorCloth { get; private set; } public static ConfigEntry<Color> Artificer_AstroDeus_FireColorCrystal { get; private set; } public static ConfigEntry<string> Artificer_AstroDeus_IceToken { get; private set; } public static ConfigEntry<Color> Artificer_AstroDeus_IceColorCloth { get; private set; } public static ConfigEntry<Color> Artificer_AstroDeus_IceColorCrystal { get; private set; } public static ConfigEntry<string> Artificer_AstroDeus_ThunderToken { get; private set; } public static ConfigEntry<Color> Artificer_AstroDeus_ThunderColorCloth { get; private set; } public static ConfigEntry<Color> Artificer_AstroDeus_ThunderColorCrystal { get; private set; } public static ConfigEntry<string> Artificer_AstroDeus_RockToken { get; private set; } public static ConfigEntry<Color> Artificer_AstroDeus_RockColorCloth { get; private set; } public static ConfigEntry<Color> Artificer_AstroDeus_RockColorCrystal { get; private set; } public static ConfigEntry<string> Artificer_AstroDeus_BloodToken { get; private set; } public static ConfigEntry<Color> Artificer_AstroDeus_BloodColorCloth { get; private set; } public static ConfigEntry<Color> Artificer_AstroDeus_BloodColorCrystal { get; private set; } public static ConfigEntry<string> Artificer_AstroDeus_WaterToken { get; private set; } public static ConfigEntry<Color> Artificer_AstroDeus_WaterColorCloth { get; private set; } public static ConfigEntry<Color> Artificer_AstroDeus_WaterColorCrystal { get; private set; } public static ConfigEntry<bool> Acolyte_MarkedCarapase_Enabled { get; private set; } public static ConfigEntry<float> Acolyte_MarkedCarapase_OpenWing { get; private set; } public static ConfigEntry<float> Acolyte_MarkedCarapase_FlapWing { get; private set; } public static ConfigEntry<bool> Engi_AgentBungus_WungusEnabled { get; private set; } public static ConfigEntry<bool> Engi_AgentBungus_ParticleEnabled { get; private set; } public static ConfigEntry<bool> Acrid_AshenOne_Enabled { get; private set; } public static ConfigEntry<Color> Acrid_AshenOne_PoisonColor { get; private set; } public static ConfigEntry<float> Acrid_AshenOne_PoisonHold_Duration { get; private set; } public static ConfigEntry<float> Acrid_AshenOne_WhiteGradient_Min { get; private set; } public static ConfigEntry<float> Acrid_AshenOne_WhiteGradient_Max { get; private set; } public static ConfigEntry<float> Acrid_AshenOne_PoisonGradient_Min { get; private set; } public static ConfigEntry<float> Acrid_AshenOne_PoisonGradient_Max { get; private set; } public static ConfigEntry<bool> Merc_NullPointer_MeshSwapperEnabled { get; private set; } public static ConfigEntry<bool> Merc_NullPointer_ParticleEnabled { get; private set; } private void Awake() { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown Instance = this; Artificer_AstroDeus(); Acolyte_MarkedCarapase(); Acrid_AshenOne(); Merc_NullPointer(); ConsoleDebug_Enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Misc.", "Console Debug", false, "Toggles Debug Console Output during of Skin Usage"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ConsoleDebug_Enabled)); ModSettingsManager.SetModDescription("Skin Config options for MadVeteran Skinpack"); ModSettingsManager.SetModIcon(LoadEmbeddedSprite("Assets.SkinMods.MadVeteran_Config.sprite.MadVeteran_icon.png")); } private void Artificer_AstroDeus() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_0076: 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_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Expected O, but got Unknown //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Expected O, but got Unknown //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Expected O, but got Unknown //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Expected O, but got Unknown //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Expected O, but got Unknown //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Expected O, but got Unknown //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Expected O, but got Unknown //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Expected O, but got Unknown //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Expected O, but got Unknown //IL_02ad: Unknown result type (might be due to invalid IL or missing references) //IL_02e1: Unknown result type (might be due to invalid IL or missing references) //IL_02fb: Unknown result type (might be due to invalid IL or missing references) //IL_0305: Expected O, but got Unknown //IL_030b: Unknown result type (might be due to invalid IL or missing references) //IL_0315: Expected O, but got Unknown //IL_031b: Unknown result type (might be due to invalid IL or missing references) //IL_0325: Expected O, but got Unknown //IL_036a: Unknown result type (might be due to invalid IL or missing references) //IL_039e: Unknown result type (might be due to invalid IL or missing references) //IL_03b8: Unknown result type (might be due to invalid IL or missing references) //IL_03c2: Expected O, but got Unknown //IL_03c8: Unknown result type (might be due to invalid IL or missing references) //IL_03d2: Expected O, but got Unknown //IL_03d8: Unknown result type (might be due to invalid IL or missing references) //IL_03e2: Expected O, but got Unknown //IL_0427: Unknown result type (might be due to invalid IL or missing references) //IL_045b: Unknown result type (might be due to invalid IL or missing references) //IL_0475: Unknown result type (might be due to invalid IL or missing references) //IL_047f: Expected O, but got Unknown //IL_0485: Unknown result type (might be due to invalid IL or missing references) //IL_048f: Expected O, but got Unknown //IL_0495: Unknown result type (might be due to invalid IL or missing references) //IL_049f: Expected O, but got Unknown Artificer_AstroDeus_Enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Artificer_AstroDeus", "Skill Color Swapper", true, "Toggles AstroDeus uses the Skill Element color swapper"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Artificer_AstroDeus_Enabled)); Artificer_AstroDeus_FireToken = ((BaseUnityPlugin)this).Config.Bind<string>("Artificer_AstroDeus", "Fire Token", "_FIRE,_MAGEFLAME", "Element Indicator in SkillNameToken. its the widest Net for compat with modded stuff."); Artificer_AstroDeus_FireColorCloth = ((BaseUnityPlugin)this).Config.Bind<Color>("Artificer_AstroDeus", "Fire : Cloth", new Color(0.678f, 0.227f, 0.067f), "A color option."); Artificer_AstroDeus_FireColorCrystal = ((BaseUnityPlugin)this).Config.Bind<Color>("Artificer_AstroDeus", "Fire : Crystal", new Color(0.839f, 0.192f, 0.082f), "A color option."); ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(Artificer_AstroDeus_FireToken)); ModSettingsManager.AddOption((BaseOption)new ColorOption(Artificer_AstroDeus_FireColorCloth)); ModSettingsManager.AddOption((BaseOption)new ColorOption(Artificer_AstroDeus_FireColorCrystal)); Artificer_AstroDeus_IceToken = ((BaseUnityPlugin)this).Config.Bind<string>("Artificer_AstroDeus", "Ice Token", "_ICE,_MAGEICE", "Element Indicator in SkillNameToken. its the widest Net for compat with modded stuff."); Artificer_AstroDeus_IceColorCloth = ((BaseUnityPlugin)this).Config.Bind<Color>("Artificer_AstroDeus", "Ice : Cloth", new Color(0.239f, 0.341f, 0.337f), "A color option."); Artificer_AstroDeus_IceColorCrystal = ((BaseUnityPlugin)this).Config.Bind<Color>("Artificer_AstroDeus", "Ice : Crystal", new Color(0.51f, 0.8f, 0.839f), "A color option."); ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(Artificer_AstroDeus_IceToken)); ModSettingsManager.AddOption((BaseOption)new ColorOption(Artificer_AstroDeus_IceColorCloth)); ModSettingsManager.AddOption((BaseOption)new ColorOption(Artificer_AstroDeus_IceColorCrystal)); Artificer_AstroDeus_ThunderToken = ((BaseUnityPlugin)this).Config.Bind<string>("Artificer_AstroDeus", "Lightning Token", "_LIGHTNING", "Element Indicator in SkillNameToken. its the widest Net for compat with modded stuff."); Artificer_AstroDeus_ThunderColorCloth = ((BaseUnityPlugin)this).Config.Bind<Color>("Artificer_AstroDeus", "Lightning : Cloth", new Color(0.173f, 0.2f, 0.298f), "A color option."); Artificer_AstroDeus_ThunderColorCrystal = ((BaseUnityPlugin)this).Config.Bind<Color>("Artificer_AstroDeus", "Lightning : Crystal", new Color(0.204f, 0.208f, 0.376f), "A color option."); ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(Artificer_AstroDeus_ThunderToken)); ModSettingsManager.AddOption((BaseOption)new ColorOption(Artificer_AstroDeus_ThunderColorCloth)); ModSettingsManager.AddOption((BaseOption)new ColorOption(Artificer_AstroDeus_ThunderColorCrystal)); Artificer_AstroDeus_RockToken = ((BaseUnityPlugin)this).Config.Bind<string>("Artificer_AstroDeus", "Earth Token", "_ALT,_ROCK", "Element Indicator in SkillNameToken. its the widest Net for compat with modded stuff."); Artificer_AstroDeus_RockColorCloth = ((BaseUnityPlugin)this).Config.Bind<Color>("Artificer_AstroDeus", "Earth : Cloth", new Color(0.424f, 0.278f, 0.2f), "A color option."); Artificer_AstroDeus_RockColorCrystal = ((BaseUnityPlugin)this).Config.Bind<Color>("Artificer_AstroDeus", "Earth : Crystal", new Color(0.62f, 0.329f, 0.169f), "A color option."); ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(Artificer_AstroDeus_RockToken)); ModSettingsManager.AddOption((BaseOption)new ColorOption(Artificer_AstroDeus_RockColorCloth)); ModSettingsManager.AddOption((BaseOption)new ColorOption(Artificer_AstroDeus_RockColorCrystal)); Artificer_AstroDeus_WaterToken = ((BaseUnityPlugin)this).Config.Bind<string>("Artificer_AstroDeus", "Water Token", "_WATER", "Element Indicator in SkillNameToken. its the widest Net for compat with modded stuff.[Modded Element]"); Artificer_AstroDeus_WaterColorCloth = ((BaseUnityPlugin)this).Config.Bind<Color>("Artificer_AstroDeus", "Water : Cloth", new Color(0.694f, 0.82f, 0.808f), "A color option."); Artificer_AstroDeus_WaterColorCrystal = ((BaseUnityPlugin)this).Config.Bind<Color>("Artificer_AstroDeus", "Water : Crystal", new Color(0.482f, 0.576f, 0.584f), "A color option."); ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(Artificer_AstroDeus_WaterToken)); ModSettingsManager.AddOption((BaseOption)new ColorOption(Artificer_AstroDeus_WaterColorCloth)); ModSettingsManager.AddOption((BaseOption)new ColorOption(Artificer_AstroDeus_WaterColorCrystal)); Artificer_AstroDeus_BloodToken = ((BaseUnityPlugin)this).Config.Bind<string>("Artificer_AstroDeus", "Blood Token", "_MAGEBLOOD", "Element Indicator in SkillNameToken. its the widest Net for compat with modded stuff. [Modded Element]"); Artificer_AstroDeus_BloodColorCloth = ((BaseUnityPlugin)this).Config.Bind<Color>("Artificer_AstroDeus", "Blood : Cloth", new Color(0.275f, 0f, 0.004f), "A color option."); Artificer_AstroDeus_BloodColorCrystal = ((BaseUnityPlugin)this).Config.Bind<Color>("Artificer_AstroDeus", "Blood : Crystal", new Color(0.792f, 0.2f, 0.216f), "A color option."); ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(Artificer_AstroDeus_BloodToken)); ModSettingsManager.AddOption((BaseOption)new ColorOption(Artificer_AstroDeus_BloodColorCloth)); ModSettingsManager.AddOption((BaseOption)new ColorOption(Artificer_AstroDeus_BloodColorCrystal)); } private void Acolyte_MarkedCarapase() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Expected O, but got Unknown //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Expected O, but got Unknown Acolyte_MarkedCarapase_Enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Acolyte_MarkedCarapase", "Wing Animation", true, "Toggle if Marked Carapase Skin Wings Animate during Movement"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Acolyte_MarkedCarapase_Enabled)); Acolyte_MarkedCarapase_OpenWing = ((BaseUnityPlugin)this).Config.Bind<float>("Acolyte_MarkedCarapase", "Open Wing Speed", 30f, "Max Velocity to Open Shell & Elytra"); Acolyte_MarkedCarapase_FlapWing = ((BaseUnityPlugin)this).Config.Bind<float>("Acolyte_MarkedCarapase", "Start Wing Flap Speed", 60f, "Max Velocity to Start Flapping Elytra"); ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(Acolyte_MarkedCarapase_OpenWing)); ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(Acolyte_MarkedCarapase_FlapWing)); } private void Engi_AgentBungus() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Expected O, but got Unknown Engi_AgentBungus_WungusEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Engineer_AgentBungus", "Wungus Mode", true, "Toggles ability change form on Wungus Pickup"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Engi_AgentBungus_WungusEnabled)); Engi_AgentBungus_ParticleEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Engineer_AgentBungus", "Mushroom Particles", true, "Toggles Passive Mushroom Particle Emission when using AgentBungus"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Engi_AgentBungus_ParticleEnabled)); } private void Acrid_AshenOne() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Expected O, but got Unknown //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Expected O, but got Unknown //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Expected O, but got Unknown //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Expected O, but got Unknown //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Expected O, but got Unknown //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Expected O, but got Unknown //IL_018b: 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_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Expected O, but got Unknown //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Expected O, but got Unknown //IL_01e6: 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) //IL_01f6: 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_0211: Expected O, but got Unknown //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Expected O, but got Unknown Acrid_AshenOne_Enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Acrid_AshenOne", "Bile Radiation", true, "Toggle if AshenOne Changes Color On Skill Use"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Acrid_AshenOne_Enabled)); Acrid_AshenOne_PoisonColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Acrid_AshenOne", "Poison Color", new Color(0.259f, 1f, 0f), "A color option during Poison State"); ModSettingsManager.AddOption((BaseOption)new ColorOption(Acrid_AshenOne_PoisonColor)); Acrid_AshenOne_PoisonHold_Duration = ((BaseUnityPlugin)this).Config.Bind<float>("Acrid_AshenOne", "Poison Hold Duration", 1.5f, " Duration of Time That the Poison State Last until going back to default"); ModSettingsManager.AddOption((BaseOption)new FloatFieldOption(Acrid_AshenOne_PoisonHold_Duration)); Acrid_AshenOne_WhiteGradient_Min = ((BaseUnityPlugin)this).Config.Bind<float>("Acrid_AshenOne", "White Offset at Default", 0.16f, ""); ModSettingsManager.AddOption((BaseOption)new StepSliderOption(Acrid_AshenOne_WhiteGradient_Min, new StepSliderConfig { min = -3f, max = 3f, increment = 0.01f })); Acrid_AshenOne_PoisonGradient_Min = ((BaseUnityPlugin)this).Config.Bind<float>("Acrid_AshenOne", "Poison Offset at Default", -1f, ""); ModSettingsManager.AddOption((BaseOption)new StepSliderOption(Acrid_AshenOne_PoisonGradient_Min, new StepSliderConfig { min = -3f, max = 3f, increment = 0.01f })); Acrid_AshenOne_WhiteGradient_Max = ((BaseUnityPlugin)this).Config.Bind<float>("Acrid_AshenOne", "White Offset in Poison State", 0.56f, ""); ModSettingsManager.AddOption((BaseOption)new StepSliderOption(Acrid_AshenOne_WhiteGradient_Max, new StepSliderConfig { min = -3f, max = 3f, increment = 0.01f })); Acrid_AshenOne_PoisonGradient_Max = ((BaseUnityPlugin)this).Config.Bind<float>("Acrid_AshenOne", "Poison Offset in Poison State", 0.25f, ""); ModSettingsManager.AddOption((BaseOption)new StepSliderOption(Acrid_AshenOne_PoisonGradient_Max, new StepSliderConfig { min = -3f, max = 3f, increment = 0.01f })); } private void Merc_NullPointer() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Expected O, but got Unknown Merc_NullPointer_MeshSwapperEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Merc_NullPointer", "MeshSwapper", true, "Toggles NullPointer Ability to Swaps Meshes"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Merc_NullPointer_MeshSwapperEnabled)); Merc_NullPointer_ParticleEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Merc_NullPointer", "Glitch Particles", true, "Toggles NullPointer to have Extra Glitch Particles"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Merc_NullPointer_ParticleEnabled)); } public static (string Keyword, Color Cloth, Color Crystal)[] GetArtificerElementRules() { List<(string Keyword, Color Cloth, Color Crystal)> rules = new List<(string, Color, Color)>(); ParseAndAdd(Artificer_AstroDeus_FireToken, Artificer_AstroDeus_FireColorCloth, Artificer_AstroDeus_FireColorCrystal); ParseAndAdd(Artificer_AstroDeus_IceToken, Artificer_AstroDeus_IceColorCloth, Artificer_AstroDeus_IceColorCrystal); ParseAndAdd(Artificer_AstroDeus_ThunderToken, Artificer_AstroDeus_ThunderColorCloth, Artificer_AstroDeus_ThunderColorCrystal); ParseAndAdd(Artificer_AstroDeus_RockToken, Artificer_AstroDeus_RockColorCloth, Artificer_AstroDeus_RockColorCrystal); ParseAndAdd(Artificer_AstroDeus_WaterToken, Artificer_AstroDeus_WaterColorCloth, Artificer_AstroDeus_WaterColorCrystal); ParseAndAdd(Artificer_AstroDeus_BloodToken, Artificer_AstroDeus_BloodColorCloth, Artificer_AstroDeus_BloodColorCrystal); return rules.ToArray(); void ParseAndAdd(ConfigEntry<string> tokenConfig, ConfigEntry<Color> clothConfig, ConfigEntry<Color> crystalConfig) { //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) if (tokenConfig != null && !string.IsNullOrWhiteSpace(tokenConfig.Value)) { string[] array = tokenConfig.Value.Split(new char[1] { ',' }, StringSplitOptions.RemoveEmptyEntries); string[] array2 = array; foreach (string text in array2) { string text2 = text.Trim(); if (!string.IsNullOrEmpty(text2)) { rules.Add((text2, clothConfig.Value, crystalConfig.Value)); } } } } } private Sprite LoadEmbeddedSprite(string resourceName) { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Expected O, but got Unknown //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) Assembly executingAssembly = Assembly.GetExecutingAssembly(); using Stream stream = executingAssembly.GetManifestResourceStream(resourceName); if (stream == null) { ((BaseUnityPlugin)this).Logger.LogError((object)("Embedded resource '" + resourceName + "' not found!")); return null; } byte[] array = new byte[stream.Length]; stream.Read(array, 0, array.Length); Texture2D val = new Texture2D(2, 2); ImageConversion.LoadImage(val, array); return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f)); } }
Skins/MadVeteran_Engineer.dll
Decompiled a day agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using MonoMod.RuntimeDetour.HookGen; using RoR2; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace MadVeteran_Engineer; [BepInPlugin("com.KrononConpsirator.MadVeteran_Engineer", "MadVeteran_Engineer", "1.0.0")] public class MadVeteran_EngineerPlugin : BaseUnityPlugin { private class FieldException : Exception { public FieldException(string message, Exception innerException) : base(message, innerException) { } } private class ElementException : Exception { public int Index { get; } public ElementException(int index, string message) : base(message) { Index = index; } } private static AssetBundle assetBundle; private static readonly List<Material> materialsWithRoRShader = new List<Material>(); internal static MadVeteran_EngineerPlugin Instance { get; private set; } internal static ManualLogSource InstanceLogger { get { MadVeteran_EngineerPlugin instance = Instance; if (instance == null) { return null; } return ((BaseUnityPlugin)instance).Logger; } } private void Start() { Instance = this; using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MadVeteran_Engineer.krononconpsiratormadveteran_engineer")) { assetBundle = AssetBundle.LoadFromStream(stream); } ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)BodyCatalogInit); HookEndpointManager.Add((MethodBase)typeof(Language).GetMethod("LoadStrings"), (Delegate)new Action<Action<Language>, Language>(LanguageLoadStrings)); ReplaceShaders(); } private static void ReplaceShaders() { LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGStandard.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoEngi/EngiNeoMat.mat"); } private static void LoadMaterialsWithReplacedShader(string shaderPath, params string[] materialPaths) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Shader shader = Addressables.LoadAssetAsync<Shader>((object)shaderPath).WaitForCompletion(); foreach (string text in materialPaths) { Material val = assetBundle.LoadAsset<Material>(text); val.shader = shader; materialsWithRoRShader.Add(val); } } private static void LanguageLoadStrings(Action<Language> orig, Language self) { orig(self); self.SetStringByToken("KRONONCONPSIRATOR_SKIN_MADVETENGITURRETSKINDEF_NAME", "Bungus Machine"); self.SetStringByToken("KRONONCONPSIRATOR_SKIN_MADVETENGITURRETWALKERSKINDEF_NAME", "Bungus Cultivator"); self.SetStringByToken("KRONONCONPSIRATOR_SKIN_MADVETENGISKINDEF_NAME", "Agent Bungus"); } private static void BodyCatalogInit() { AddEngiTurretBodyMadVetEngiTurretSkinDefSkin(); AddEngiWalkerTurretBodyMadVetEngiTurretWalkerSkinDefSkin(); AddEngiBodyMadVetEngiSkinDefSkin(); } private static void AddEngiTurretBodyMadVetEngiTurretSkinDefSkin() { string text = "EngiTurretBody"; string text2 = "MadVetEngiTurretSkinDef"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent<ModelLocator>(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent<ModelSkinController>() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren<Renderer>(true); gameObject.GetComponentsInChildren<Light>(true); SkinDef skin = ScriptableObject.CreateInstance<SkinDef>(); SkinDefParams skinParams = ScriptableObject.CreateInstance<SkinDefParams>(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = null; }); ((Object)skin).name = text2; skin.nameToken = "KRONONCONPSIRATOR_SKIN_MADVETENGITURRETSKINDEF_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty<GameObjectActivation>(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: 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_0079: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[1] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoEngi/EngiNeoMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull<Renderer>(0, "There is no renderer with the name \"EngiTurretMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "EngiTurretMesh"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: 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_0069: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[1] { new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Engineer\\Meshes\\EngiTurretMesh.mesh"), renderer = ThrowIfNull<Renderer>(0, "There is no renderer with the name \"EngiTurretMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "EngiTurretMesh"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty<MinionSkinReplacement>(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static void AddEngiWalkerTurretBodyMadVetEngiTurretWalkerSkinDefSkin() { string text = "EngiWalkerTurretBody"; string text2 = "MadVetEngiTurretWalkerSkinDef"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent<ModelLocator>(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent<ModelSkinController>() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren<Renderer>(true); gameObject.GetComponentsInChildren<Light>(true); SkinDef skin = ScriptableObject.CreateInstance<SkinDef>(); SkinDefParams skinParams = ScriptableObject.CreateInstance<SkinDefParams>(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = null; }); ((Object)skin).name = text2; skin.nameToken = "KRONONCONPSIRATOR_SKIN_MADVETENGITURRETWALKERSKINDEF_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty<GameObjectActivation>(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: 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_0079: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[1] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoEngi/EngiNeoMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull<Renderer>(0, "There is no renderer with the name \"EngiWalkerTurretMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "EngiWalkerTurretMesh"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: 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_0069: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[1] { new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Engineer\\Meshes\\EngiWalkerTurretMesh.mesh"), renderer = ThrowIfNull<Renderer>(0, "There is no renderer with the name \"EngiWalkerTurretMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "EngiWalkerTurretMesh"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty<MinionSkinReplacement>(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static void AddEngiBodyMadVetEngiSkinDefSkin() { string text = "EngiBody"; string text2 = "MadVetEngiSkinDef"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent<ModelLocator>(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent<ModelSkinController>() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren<Renderer>(true); gameObject.GetComponentsInChildren<Light>(true); SkinDef skin = ScriptableObject.CreateInstance<SkinDef>(); SkinDefParams skinParams = ScriptableObject.CreateInstance<SkinDefParams>(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset<Sprite>("Assets\\SkinMods\\MadVeteran_Engineer\\Icons\\MadVetEngiSkinDefIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "KRONONCONPSIRATOR_SKIN_MADVETENGISKINDEF_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty<GameObjectActivation>(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: 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_0079: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[1] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoEngi/EngiNeoMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull<Renderer>(0, "There is no renderer with the name \"EngiMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "EngiMesh"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: 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_0069: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[1] { new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Engineer\\Meshes\\EngiMesh.mesh"), renderer = ThrowIfNull<Renderer>(0, "There is no renderer with the name \"EngiMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "EngiMesh"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { //IL_0010: 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_0040: 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_0079: 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_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: 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) skinParams.minionSkinReplacements = (MinionSkinReplacement[])(object)new MinionSkinReplacement[2] { new MinionSkinReplacement { minionBodyPrefab = BodyCatalog.FindBodyPrefab("EngiTurretBody"), minionSkin = ThrowIfNull<SkinDef>(0, "There is no skin with the name \"MadVetEngiTurretSkinDef\" for body \"EngiTurretBody\"", ((IEnumerable<SkinDef>)SkinCatalog.FindSkinsForBody(ThrowIfEquals<BodyIndex>(0, "Body \"EngiTurretBody\" doesn't exist", BodyCatalog.FindBodyIndex("EngiTurretBody"), (BodyIndex)(-1)))).FirstOrDefault((Func<SkinDef, bool>)((SkinDef s) => ((Object)s).name == "MadVetEngiTurretSkinDef"))) }, new MinionSkinReplacement { minionBodyPrefab = BodyCatalog.FindBodyPrefab("EngiWalkerTurretBody"), minionSkin = ThrowIfNull<SkinDef>(1, "There is no skin with the name \"MadVetEngiTurretWalkerSkinDef\" for body \"EngiWalkerTurretBody\"", ((IEnumerable<SkinDef>)SkinCatalog.FindSkinsForBody(ThrowIfEquals<BodyIndex>(1, "Body \"EngiWalkerTurretBody\" doesn't exist", BodyCatalog.FindBodyIndex("EngiWalkerTurretBody"), (BodyIndex)(-1)))).FirstOrDefault((Func<SkinDef, bool>)((SkinDef s) => ((Object)s).name == "MadVetEngiTurretWalkerSkinDef"))) } }; }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static T ThrowIfEquals<T>(int index, string message, T value, T expected) where T : Enum { if (value.Equals(expected)) { throw new ElementException(index, message); } return value; } private static T ThrowIfOutOfBounds<T>(int index, string message, T[] array, int elementIndex) where T : class { if (array == null || array.Length <= elementIndex) { throw new ElementException(index, message); } return array[elementIndex]; } private static T ThrowIfNull<T>(int index, string message, T value) where T : class { if (value == null) { throw new ElementException(index, message); } return value; } private static void TryCatchThrow(string message, Action action) { try { action?.Invoke(); } catch (Exception innerException) { throw new FieldException(message, innerException); } } private static void TryAddComponent<T>(GameObject obj) where T : Component { if (Object.op_Implicit((Object)(object)obj) && !Object.op_Implicit((Object)(object)obj.GetComponent<T>())) { obj.AddComponent<T>(); } } private static GameObject GetChildGameObject(GameObject fromGameObject, string withName) { Transform[] componentsInChildren = fromGameObject.GetComponentsInChildren<Transform>(); foreach (Transform val in componentsInChildren) { if (((Object)val).name.StartsWith(withName)) { return ((Component)val).gameObject; } } return null; } }
Skins/MadVeteran_Huntress.dll
Decompiled a day agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using MonoMod.RuntimeDetour.HookGen; using RoR2; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace MadVeteran_Huntress; [BepInPlugin("com.KrononConspirator.MadVeteran_Huntress", "MadVeteran_Huntress", "2.0.0")] public class MadVeteran_HuntressPlugin : BaseUnityPlugin { public class MaterialDuplicatorExtension { internal void BeforeStart() { } internal void AfterStart() { try { HuntNeoCrowbar(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogWarning((object)("MaterialDuplicator entry 0 failed: " + ex)); } } } internal void BeforeBodyCatalogInit() { } internal void AfterBodyCatalogInit() { } private void HuntNeoCrowbar() { //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) Material val = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoHuntress/HuntNeoCrowbar.mat"); if ((Object)(object)val == (Object)null) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogWarning((object)"MaterialDuplicator: material not found in bundle: Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoHuntress/HuntNeoCrowbar.mat"); } return; } Material val2 = MaterialDuplicator_LoadAddressable<Material>("RoR2/Base/Huntress/matHuntressArrow.mat"); if ((Object)(object)val2 == (Object)null) { ManualLogSource instanceLogger2 = InstanceLogger; if (instanceLogger2 != null) { instanceLogger2.LogWarning((object)"MaterialDuplicator: reference material missing, skipping HuntNeoCrowbar"); } return; } val.shader = val2.shader; val.CopyPropertiesFromMaterial(val2); val.shaderKeywords = val2.shaderKeywords; val.renderQueue = val2.renderQueue; val.SetFloat("_Boost", 4f); val.SetFloat("_AlphaBoost", 5f); Texture val3 = MaterialDuplicator_LoadAddressable<Texture>("RoR2/Base/Huntress/texHuntressArrowBigMask.png"); if ((Object)(object)val3 == (Object)null) { ManualLogSource instanceLogger3 = InstanceLogger; if (instanceLogger3 != null) { instanceLogger3.LogWarning((object)"MaterialDuplicator: texture for _MainTex could not be loaded."); } } else { val.SetTexture("_MainTex", val3); } val.SetTextureScale("_MainTex", new Vector2(1f, 2f)); val.SetTextureOffset("_MainTex", new Vector2(0.5f, -1f)); } private static T MaterialDuplicator_LoadAddressable<T>(string key) where T : Object { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) try { return Addressables.LoadAssetAsync<T>((object)key).WaitForCompletion(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogWarning((object)("MaterialDuplicator: could not load addressable '" + key + "': " + ex.Message)); } return default(T); } } } private static MaterialDuplicatorExtension _MaterialDuplicatorExtension = new MaterialDuplicatorExtension(); public static AssetBundle assetBundle; private static readonly List<Material> materialsWithRoRShader = new List<Material>(); internal static MadVeteran_HuntressPlugin Instance { get; private set; } internal static ManualLogSource InstanceLogger { get { MadVeteran_HuntressPlugin instance = Instance; if (instance == null) { return null; } return ((BaseUnityPlugin)instance).Logger; } } private void Start() { Instance = this; BeforeStart(); using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MadVeteran_Huntress.krononconspiratormadveteran_huntress")) { assetBundle = AssetBundle.LoadFromStream(stream); } ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)BodyCatalogInit); HookEndpointManager.Add((MethodBase)typeof(Language).GetMethod("LoadStrings"), (Delegate)new Action<Action<Language>, Language>(LanguageLoadStrings)); ReplaceShaders(); AfterStart(); } private void BeforeStart() { try { _MaterialDuplicatorExtension.BeforeStart(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogError((object)("MaterialDuplicator BeforeStart failed: " + ex)); } } } private void AfterStart() { try { _MaterialDuplicatorExtension.AfterStart(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogError((object)("MaterialDuplicator AfterStart failed: " + ex)); } } } private static void BeforeBodyCatalogInit() { try { _MaterialDuplicatorExtension.BeforeBodyCatalogInit(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogError((object)("MaterialDuplicator BeforeBodyCatalogInit failed: " + ex)); } } } private static void AfterBodyCatalogInit() { try { _MaterialDuplicatorExtension.AfterBodyCatalogInit(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogError((object)("MaterialDuplicator AfterBodyCatalogInit failed: " + ex)); } } } private static void ReplaceShaders() { LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGStandard.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoHuntress/HuntNeo2Mat.mat"); LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGCloudRemap.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoHuntress/HuntNeoCrowbar.mat"); } private static void LoadMaterialsWithReplacedShader(string shaderPath, params string[] materialPaths) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Shader shader = Addressables.LoadAssetAsync<Shader>((object)shaderPath).WaitForCompletion(); foreach (string text in materialPaths) { Material val = assetBundle.LoadAsset<Material>(text); val.shader = shader; materialsWithRoRShader.Add(val); } } private static void LanguageLoadStrings(Action<Language> orig, Language self) { orig(self); self.SetStringByToken("KRONONCONSPIRATOR_SKIN_MADVETHUNTRESSSKINDEF_NAME", "Casual"); } private static void BodyCatalogInit() { BeforeBodyCatalogInit(); AddHuntressBodyMadVetHuntressSkinDefSkin(); AfterBodyCatalogInit(); } private static SkinDef CreateHuntressBodyMadVetHuntressSkinDefSkin(GameObject mdl, ModelSkinController skinController) { Renderer[] renderers = mdl.GetComponentsInChildren<Renderer>(true); mdl.GetComponentsInChildren<Light>(true); SkinDef skin = ScriptableObject.CreateInstance<SkinDef>(); SkinDefParams skinParams = ScriptableObject.CreateInstance<SkinDefParams>(); skin.skinDefParams = skinParams; ((Object)skin).name = "MadVetHuntressSkinDef"; skin.nameToken = "KRONONCONSPIRATOR_SKIN_MADVETHUNTRESSSKINDEF_NAME"; skin.rootObject = mdl; Helpers.TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset<Sprite>("Assets\\SkinMods\\MadVeteran_Huntress\\Icons\\MadVetHuntressSkinDefIcon.png"); }); Helpers.TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); Helpers.TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { Helpers.ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); Helpers.TryCatchThrow("Game Object Activations", delegate { //IL_0010: 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_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: 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_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_0111: 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_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0176: 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_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) skinParams.gameObjectActivations = (GameObjectActivation[])(object)new GameObjectActivation[4] { new GameObjectActivation { gameObject = Helpers.ThrowIfNull<GameObject>(0, "There is no renderer at path \"HuntressArmature\"", Helpers.GetChildGameObject(mdl, "HuntressArmature")).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(0f, 0f, 0f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(1f, 1f, 1f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoHuntress/HuntNeo_Accesories.prefab")) }, new GameObjectActivation { gameObject = Helpers.ThrowIfNull<GameObject>(1, "There is no renderer at path \"ROOT\"", Helpers.GetChildGameObject(mdl, "ROOT")).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(0f, 0f, 0f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(1f, 1f, 1f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoHuntress/HuntNeo_Outfit.prefab")) }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Renderer>(2, "There is no renderer with the name \"Quad 2\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "Quad 2")))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = false }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Renderer>(3, "There is no renderer with the name \"HuntressScarfMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "HuntressScarfMesh")))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = false } }; }); Helpers.TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: 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_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0133: 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_018d: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[3] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoHuntress/HuntNeo2Mat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"HuntressMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "HuntressMesh"))), hideOnDeath = false, ignoresMaterialOverrides = false }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoHuntress/HuntNeo2Mat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = Helpers.ThrowIfNull<Renderer>(1, "There is no renderer with the name \"BowMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "BowMesh"))), hideOnDeath = false, ignoresMaterialOverrides = false }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoHuntress/HuntNeoCrowbar.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = Helpers.ThrowIfNull<Renderer>(2, "There is no renderer with the name \"Quad 1\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "Quad 1"))), hideOnDeath = false, ignoresMaterialOverrides = false } }; }); Helpers.TryCatchThrow("MeshReplacements", delegate { //IL_0010: 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_0069: 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_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_012c: 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) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[3] { new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Huntress\\Meshes\\HuntNeo_Body.mesh"), renderer = Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"HuntressMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "HuntressMesh"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Huntress\\Meshes\\HuntNeo_Bow.mesh"), renderer = Helpers.ThrowIfNull<Renderer>(1, "There is no renderer with the name \"BowMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "BowMesh"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Huntress\\Meshes\\HuntNeo_Crowbar.mesh"), renderer = Helpers.ThrowIfNull<Renderer>(2, "There is no renderer with the name \"Quad 1\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "Quad 1"))) } }; }); Helpers.TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = Array.Empty<LightInfo>(); }); Helpers.TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty<MinionSkinReplacement>(); }); Helpers.TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>(); }); return skin; } private static void AddHuntressBodyMadVetHuntressSkinDefSkin() { string text = "HuntressBody"; string text2 = "MadVetHuntressSkinDef"; GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } try { ModelLocator component = val.GetComponent<ModelLocator>(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController val2 = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent<ModelSkinController>() : null); if (!Object.op_Implicit((Object)(object)val2)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); } else { SkinDef val3 = CreateHuntressBodyMadVetHuntressSkinDefSkin(gameObject, val2); Array.Resize(ref val2.skins, val2.skins.Length + 1); val2.skins[val2.skins.Length - 1] = val3; } } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } } public class MeshActivator : MonoBehaviour { [Serializable] public struct CustomRendererInfo { [Tooltip("Direct material asset reference from your asset bundle or project.")] public Material material; [Tooltip("Addressable path to load an in-game vanilla material (e.g., 'RoR2/Base/Mage/matMage.mat'). Takes precedence if specified.")] public string addressableMaterialPath; [Tooltip("Whether this renderer ignores visual status overlays (e.g., stealth, low health red tint).")] public bool ignoreOverlays; [Tooltip("Shadow casting mode for this renderer.")] public ShadowCastingMode shadowCastingMode; } [Header("Reference Settings")] [Tooltip("Name of the in-game original mesh object to look for, e.g. 'MageMesh' or 'MageCapeMesh'.")] public string referenceObjectName = "MageMesh"; [Tooltip("Active state applied once the mesh has been registered.")] public bool initialActiveState = true; [Header("Renderer & Material Configuration")] [Tooltip("Custom configuration for the renderer info applied to the CharacterModel.")] public CustomRendererInfo customRendererInfo = new CustomRendererInfo { shadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false }; private CharacterModel characterModel; private SkinnedMeshRenderer ownRenderer; private bool registered; private IEnumerator Start() { for (int i = 0; i < 5; i++) { yield return null; } Register(); } private void Register() { //IL_01d3: 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_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_0214: 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_018b: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_0263: Unknown result type (might be due to invalid IL or missing references) if (registered) { return; } ownRenderer = ((Component)this).GetComponent<SkinnedMeshRenderer>(); if (!Object.op_Implicit((Object)(object)ownRenderer)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "' has no SkinnedMeshRenderer."), (Object)(object)this); return; } Transform val = FindReference(); if (!Object.op_Implicit((Object)(object)val)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "': no object named '" + referenceObjectName + "' found in its hierarchy."), (Object)(object)this); return; } characterModel = ((Component)val).GetComponentInParent<CharacterModel>(); if (!Object.op_Implicit((Object)(object)characterModel)) { characterModel = ((Component)this).GetComponentInParent<CharacterModel>(); } if (!Object.op_Implicit((Object)(object)characterModel)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "': no CharacterModel found above '" + ((Object)val).name + "'."), (Object)(object)this); return; } SkinnedMeshRenderer val2 = ((Component)val).GetComponent<SkinnedMeshRenderer>(); if (!Object.op_Implicit((Object)(object)val2)) { val2 = ((Component)val).GetComponentInChildren<SkinnedMeshRenderer>(true); } if (Object.op_Implicit((Object)(object)val2)) { ownRenderer.rootBone = val2.rootBone; ownRenderer.bones = val2.bones; } else { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)val).name + "' has no SkinnedMeshRenderer to copy bones from."), (Object)(object)this); } Material val3 = customRendererInfo.material; if (!Object.op_Implicit((Object)(object)val3) && !string.IsNullOrEmpty(customRendererInfo.addressableMaterialPath)) { val3 = Addressables.LoadAssetAsync<Material>((object)customRendererInfo.addressableMaterialPath).WaitForCompletion(); if (!Object.op_Implicit((Object)(object)val3)) { Debug.LogWarning((object)("[MeshActivator] Failed to load material via Addressables path: '" + customRendererInfo.addressableMaterialPath + "'. Falling back to sharedMaterial."), (Object)(object)this); } } if (!Object.op_Implicit((Object)(object)val3)) { val3 = ((Renderer)ownRenderer).sharedMaterial; } RendererInfo val4 = new RendererInfo { renderer = (Renderer)(object)ownRenderer, defaultMaterial = val3, defaultShadowCastingMode = customRendererInfo.shadowCastingMode, ignoreOverlays = customRendererInfo.ignoreOverlays }; RendererInfo[] baseRendererInfos = characterModel.baseRendererInfos; int num = -1; for (int i = 0; i < baseRendererInfos.Length; i++) { if ((Object)(object)baseRendererInfos[i].renderer == (Object)(object)ownRenderer) { num = i; break; } } if (num >= 0) { baseRendererInfos[num] = val4; } else { Array.Resize(ref characterModel.baseRendererInfos, baseRendererInfos.Length + 1); characterModel.baseRendererInfos[characterModel.baseRendererInfos.Length - 1] = val4; } registered = true; characterModel.UpdateMaterials(); ((Component)this).gameObject.SetActive(initialActiveState); } private Transform FindReference() { if (string.IsNullOrEmpty(referenceObjectName)) { return null; } Transform parent = ((Component)this).transform.parent; while (Object.op_Implicit((Object)(object)parent)) { if (((Object)parent).name == referenceObjectName) { return parent; } Transform[] componentsInChildren = ((Component)parent).GetComponentsInChildren<Transform>(true); foreach (Transform val in componentsInChildren) { if (!((Object)(object)val == (Object)(object)((Component)this).transform) && !val.IsChildOf(((Component)this).transform) && ((Object)val).name == referenceObjectName) { return val; } } parent = parent.parent; } return null; } } public static class Helpers { private static GameObject prefabHolder; public static GameObject ClonePrefab(GameObject gameObject) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown if (!Object.op_Implicit((Object)(object)prefabHolder)) { prefabHolder = new GameObject("PrefabHolder"); Object.DontDestroyOnLoad((Object)(object)prefabHolder); prefabHolder.SetActive(false); } GameObject obj = Object.Instantiate<GameObject>(gameObject, prefabHolder.transform); obj.AddComponent<RemoveClone>(); ((Object)obj).name = ((Object)gameObject).name; return obj; } public static GameObject GetChildGameObject(GameObject fromGameObject, string withName) { Transform[] componentsInChildren = fromGameObject.GetComponentsInChildren<Transform>(); foreach (Transform val in componentsInChildren) { if (((Object)val).name.StartsWith(withName)) { return ((Component)val).gameObject; } } return null; } public static Transform GetChild(this Transform transform, int index, out Transform child) { return child = transform.GetChild(index); } public static GameObject WithComponent<T>(this GameObject gameObject, Action<T> modifier = null) where T : Component { T obj = gameObject.AddComponent<T>(); modifier?.Invoke(obj); return gameObject; } public static GameObject WithTryComponent<T>(this GameObject gameObject, Action<T> modifier = null) where T : Component { if (Object.op_Implicit((Object)(object)gameObject) && !Object.op_Implicit((Object)(object)gameObject.GetComponent<T>())) { T obj = gameObject.AddComponent<T>(); modifier?.Invoke(obj); } return gameObject; } public static T ThrowIfEquals<T>(int index, string message, T value, T expected) where T : Enum { if (value.Equals(expected)) { throw new ElementException(index, message); } return value; } public static T ThrowIfOutOfBounds<T>(int index, string message, T[] array, int elementIndex) where T : class { if (array == null || array.Length <= elementIndex) { throw new ElementException(index, message); } return array[elementIndex]; } public static T ThrowIfNull<T>(int index, string message, T value) where T : class { if (value == null) { throw new ElementException(index, message); } return value; } public static void TryCatchThrow(string message, Action action) { try { action?.Invoke(); } catch (Exception innerException) { throw new FieldException(message, innerException); } } } public class RemoveClone : MonoBehaviour { public void Awake() { ((Object)this).name = ((Object)this).name[..^7]; } } public class FieldException : Exception { public FieldException(string message, Exception innerException) : base(message, innerException) { } } public class ElementException : Exception { public int Index { get; } public ElementException(int index, string message) : base(message) { Index = index; } } public class InsertBones : MonoBehaviour { private readonly List<SkinnedMeshRenderer> modifiedRenderers = new List<SkinnedMeshRenderer>(); public List<string> rendererPaths = new List<string>(); public List<Transform> newBones = new List<Transform>(); public string afterPath; public void Awake() { Transform transform = ((Component)((Component)this).GetComponentInParent<ModelSkinController>()).transform; Transform value = ((Component)transform).transform.Find(afterPath); foreach (string rendererPath in rendererPaths) { Transform obj = transform.Find(rendererPath); SkinnedMeshRenderer val = ((obj != null) ? ((Component)obj).GetComponent<SkinnedMeshRenderer>() : null); if (Object.op_Implicit((Object)(object)val)) { Transform[] array = val.bones; int num = Array.IndexOf(array, value) + 1; if (num != 0) { Array.Resize(ref array, array.Length + newBones.Count); Array.Copy(array, num, array, num + newBones.Count, array.Length - newBones.Count - num); newBones.CopyTo(array, num); val.bones = array; modifiedRenderers.Add(val); } } } } public void OnDestroy() { foreach (SkinnedMeshRenderer modifiedRenderer in modifiedRenderers) { if (Object.op_Implicit((Object)(object)modifiedRenderer)) { Transform[] array = modifiedRenderer.bones; int num = Array.IndexOf(array, ((Component)this).transform); Array.Copy(array, num + newBones.Count, array, num, array.Length - num - newBones.Count); Array.Resize(ref array, array.Length - newBones.Count); modifiedRenderer.bones = array; } } modifiedRenderers.Clear(); } } public class AddDynamicColliders : MonoBehaviour { public List<string> paths = new List<string>(); public void Awake() { Transform transform = ((Component)((Component)this).GetComponentInParent<ModelSkinController>()).transform; List<DynamicBoneCollider> list = new List<DynamicBoneCollider>(); foreach (string path in paths) { Transform val = transform.Find(path); if (Object.op_Implicit((Object)(object)val)) { list.AddRange(((Component)val).GetComponents<DynamicBoneCollider>()); } } DynamicBone[] components = ((Component)this).GetComponents<DynamicBone>(); for (int i = 0; i < components.Length; i++) { components[i].m_Colliders.AddRange(list); } } }
Skins/MadVeteran_Merc.dll
Decompiled a day agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using MadVeteran_Core; using MonoMod.RuntimeDetour.HookGen; using RoR2; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace MadVeteran_Merc; public class CoreConfigToggle : MonoBehaviour { private void Start() { if (!CorePlugin.Merc_NullPointer_ParticleEnabled.Value) { ((Component)this).gameObject.SetActive(false); } } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.KrononConpsirator.MadVeteran_Merc", "MadVeteran_Merc", "1.0.0")] public class MadVeteran_MercPlugin : BaseUnityPlugin { public class MaterialDuplicatorExtension { internal void BeforeStart() { } internal void AfterStart() { try { MercNeoWireframeMat(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogWarning((object)("MaterialDuplicator entry 0 failed: " + ex)); } } try { MercNeoGllitchPixelMat(); } catch (Exception ex2) { ManualLogSource instanceLogger2 = InstanceLogger; if (instanceLogger2 != null) { instanceLogger2.LogWarning((object)("MaterialDuplicator entry 1 failed: " + ex2)); } } try { MercNeoWireframeHeadMat(); } catch (Exception ex3) { ManualLogSource instanceLogger3 = InstanceLogger; if (instanceLogger3 != null) { instanceLogger3.LogWarning((object)("MaterialDuplicator entry 2 failed: " + ex3)); } } } internal void BeforeBodyCatalogInit() { } internal void AfterBodyCatalogInit() { } private void MercNeoWireframeMat() { //IL_00a8: 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_0130: Unknown result type (might be due to invalid IL or missing references) Material val = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/MercNeoWireframeMat.mat"); if ((Object)(object)val == (Object)null) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogWarning((object)"MaterialDuplicator: material not found in bundle: Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/MercNeoWireframeMat.mat"); } return; } Material val2 = MaterialDuplicator_LoadAddressable<Material>("RoR2/Base/Loader/matLoaderAltSolus.mat"); if ((Object)(object)val2 == (Object)null) { ManualLogSource instanceLogger2 = InstanceLogger; if (instanceLogger2 != null) { instanceLogger2.LogWarning((object)"MaterialDuplicator: reference material missing, skipping MercNeoWireframeMat"); } return; } val.shader = val2.shader; val.CopyPropertiesFromMaterial(val2); val.shaderKeywords = val2.shaderKeywords; val.renderQueue = val2.renderQueue; val.SetTexture("_MainTex", (Texture)null); val.SetColor("_Color", new Color(1f / 51f, 1f / 51f, 1f / 51f, 1f)); val.SetColor("_VertColor", new Color(46f / 85f, 0.9254902f, 1f, 1f)); val.SetFloat("_EmPower", 0.4f); val.SetFloat("_EmBoost", 30f); val.SetFloat("_GradientWidth", 1.26f); val.SetFloat("_GradientSmoothness", 3f); val.SetColor("_EmColor", new Color(1f / 85f, 2f / 85f, 0.07450981f, 1f)); } private void MercNeoGllitchPixelMat() { Material val = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/MercNeoGllitchPixelMat.mat"); if ((Object)(object)val == (Object)null) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogWarning((object)"MaterialDuplicator: material not found in bundle: Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/MercNeoGllitchPixelMat.mat"); } return; } Material val2 = MaterialDuplicator_LoadAddressable<Material>("RoR2/DLC3/Items/SharedSuffering/matSharedSufferingGlitch.mat"); if ((Object)(object)val2 == (Object)null) { ManualLogSource instanceLogger2 = InstanceLogger; if (instanceLogger2 != null) { instanceLogger2.LogWarning((object)"MaterialDuplicator: reference material missing, skipping MercNeoGllitchPixelMat"); } return; } val.shader = val2.shader; val.CopyPropertiesFromMaterial(val2); val.shaderKeywords = val2.shaderKeywords; val.renderQueue = val2.renderQueue; Texture val3 = assetBundle.LoadAsset<Texture>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/Tex/PixelParticleDistort.png"); if ((Object)(object)val3 == (Object)null) { ManualLogSource instanceLogger3 = InstanceLogger; if (instanceLogger3 != null) { instanceLogger3.LogWarning((object)"MaterialDuplicator: texture for _MainTex could not be loaded."); } } else { val.SetTexture("_MainTex", val3); } } private void MercNeoWireframeHeadMat() { //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: 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) Material val = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/MercNeoWireframeHeadMat.mat"); if ((Object)(object)val == (Object)null) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogWarning((object)"MaterialDuplicator: material not found in bundle: Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/MercNeoWireframeHeadMat.mat"); } return; } Material val2 = MaterialDuplicator_LoadAddressable<Material>("RoR2/Base/Loader/matLoaderAltSolus.mat"); if ((Object)(object)val2 == (Object)null) { ManualLogSource instanceLogger2 = InstanceLogger; if (instanceLogger2 != null) { instanceLogger2.LogWarning((object)"MaterialDuplicator: reference material missing, skipping MercNeoWireframeHeadMat"); } return; } val.shader = val2.shader; val.CopyPropertiesFromMaterial(val2); val.shaderKeywords = val2.shaderKeywords; val.renderQueue = val2.renderQueue; val.SetColor("_Color", new Color(1f / 51f, 1f / 51f, 1f / 51f, 1f)); val.SetColor("_VertColor", new Color(46f / 85f, 0.9254902f, 1f, 1f)); val.SetFloat("_EmPower", 0.4f); val.SetFloat("_EmBoost", 30f); val.SetFloat("_GradientWidth", 3.45f); val.SetFloat("_GradientSmoothness", 0.5f); val.SetColor("_EmColor", new Color(1f / 85f, 2f / 85f, 0.07450981f, 1f)); } private static T MaterialDuplicator_LoadAddressable<T>(string key) where T : Object { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) try { return Addressables.LoadAssetAsync<T>((object)key).WaitForCompletion(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogWarning((object)("MaterialDuplicator: could not load addressable '" + key + "': " + ex.Message)); } return default(T); } } } private static MaterialDuplicatorExtension _MaterialDuplicatorExtension = new MaterialDuplicatorExtension(); public static AssetBundle assetBundle; private static readonly List<Material> materialsWithRoRShader = new List<Material>(); internal static MadVeteran_MercPlugin Instance { get; private set; } internal static ManualLogSource InstanceLogger { get { MadVeteran_MercPlugin instance = Instance; if (instance == null) { return null; } return ((BaseUnityPlugin)instance).Logger; } } private void Start() { Instance = this; BeforeStart(); using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MadVeteran_Merc.krononconpsiratormadveteran_merc")) { assetBundle = AssetBundle.LoadFromStream(stream); } ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)BodyCatalogInit); HookEndpointManager.Add((MethodBase)typeof(Language).GetMethod("LoadStrings"), (Delegate)new Action<Action<Language>, Language>(LanguageLoadStrings)); ReplaceShaders(); AfterStart(); } private void BeforeStart() { try { _MaterialDuplicatorExtension.BeforeStart(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogError((object)("MaterialDuplicator BeforeStart failed: " + ex)); } } } private void AfterStart() { try { _MaterialDuplicatorExtension.AfterStart(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogError((object)("MaterialDuplicator AfterStart failed: " + ex)); } } } private static void BeforeBodyCatalogInit() { try { _MaterialDuplicatorExtension.BeforeBodyCatalogInit(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogError((object)("MaterialDuplicator BeforeBodyCatalogInit failed: " + ex)); } } } private static void AfterBodyCatalogInit() { try { _MaterialDuplicatorExtension.AfterBodyCatalogInit(); } catch (Exception ex) { ManualLogSource instanceLogger = InstanceLogger; if (instanceLogger != null) { instanceLogger.LogError((object)("MaterialDuplicator AfterBodyCatalogInit failed: " + ex)); } } } private static void ReplaceShaders() { LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGStandard.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/MercNeoMat.mat"); LoadMaterialsWithReplacedShader("RoR2/DLC3/TransparentTextureScrolling.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/MercNeoWireframeMat.mat", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/MercNeoWireframeHeadMat.mat"); LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGDistortion.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/MercNeoGlitchDistortionMat.mat"); LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGCloudRemap.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/MercNeoGllitchPixelMat.mat"); } private static void LoadMaterialsWithReplacedShader(string shaderPath, params string[] materialPaths) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Shader shader = Addressables.LoadAssetAsync<Shader>((object)shaderPath).WaitForCompletion(); foreach (string text in materialPaths) { Material val = assetBundle.LoadAsset<Material>(text); val.shader = shader; materialsWithRoRShader.Add(val); } } private static void LanguageLoadStrings(Action<Language> orig, Language self) { orig(self); self.SetStringByToken("KRONONCONPSIRATOR_SKIN_MADVETMERCSKINDEF_NAME", "Null Pointer"); } private static void BodyCatalogInit() { BeforeBodyCatalogInit(); AddMercBodyMadVetMercSkinDefSkin(); AfterBodyCatalogInit(); } private static SkinDef CreateMercBodyMadVetMercSkinDefSkin(GameObject mdl, ModelSkinController skinController) { Renderer[] renderers = mdl.GetComponentsInChildren<Renderer>(true); mdl.GetComponentsInChildren<Light>(true); SkinDef skin = ScriptableObject.CreateInstance<SkinDef>(); SkinDefParams skinParams = ScriptableObject.CreateInstance<SkinDefParams>(); skin.skinDefParams = skinParams; ((Object)skin).name = "MadVetMercSkinDef"; skin.nameToken = "KRONONCONPSIRATOR_SKIN_MADVETMERCSKINDEF_NAME"; skin.rootObject = mdl; Helpers.TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset<Sprite>("Assets\\SkinMods\\MadVeteran_Merc\\Icons\\MadVetMercSkinDefIcon.png"); }); Helpers.TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); Helpers.TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { Helpers.ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); Helpers.TryCatchThrow("Game Object Activations", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0063: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0136: 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) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_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_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_020e: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_0299: Unknown result type (might be due to invalid IL or missing references) //IL_02ec: Unknown result type (might be due to invalid IL or missing references) //IL_02f1: Unknown result type (might be due to invalid IL or missing references) //IL_0307: Unknown result type (might be due to invalid IL or missing references) //IL_030c: Unknown result type (might be due to invalid IL or missing references) //IL_0322: Unknown result type (might be due to invalid IL or missing references) //IL_0327: Unknown result type (might be due to invalid IL or missing references) //IL_0347: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Unknown result type (might be due to invalid IL or missing references) //IL_0351: Unknown result type (might be due to invalid IL or missing references) //IL_03a4: Unknown result type (might be due to invalid IL or missing references) //IL_03a9: Unknown result type (might be due to invalid IL or missing references) //IL_03bf: Unknown result type (might be due to invalid IL or missing references) //IL_03c4: Unknown result type (might be due to invalid IL or missing references) //IL_03da: Unknown result type (might be due to invalid IL or missing references) //IL_03df: Unknown result type (might be due to invalid IL or missing references) //IL_03ff: Unknown result type (might be due to invalid IL or missing references) //IL_0400: Unknown result type (might be due to invalid IL or missing references) skinParams.gameObjectActivations = (GameObjectActivation[])(object)new GameObjectActivation[6] { new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Transform>(0, "There is no renderer at path \"MercArmature\"", mdl.transform.Find("MercArmature"))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(0f, 0f, 0f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(1f, 1f, 1f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/Prefab/MercBaseAddon.prefab")) }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Transform>(1, "There is no renderer at path \"MercArmature/ROOT\"", mdl.transform.Find("MercArmature/ROOT"))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(0f, 0f, 0f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(1f, 1f, 1f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/Prefab/MercHeadPrefab.prefab")) }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Transform>(2, "There is no renderer at path \"MercArmature/ROOT/base\"", mdl.transform.Find("MercArmature/ROOT/base"))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(0f, 0f, 0f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(1f, 1f, 1f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/Prefab/MercSwordsPrefab.prefab")) }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Renderer>(3, "There is no renderer with the name \"MercSwordMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "MercSwordMesh")))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = false }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Transform>(4, "There is no renderer at path \"MercArmature/ROOT/base/stomach/chest/neck/head\"", mdl.transform.Find("MercArmature/ROOT/base/stomach/chest/neck/head"))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(0f, 0.102f, 0f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(0.01f, 0.01f, 0.01f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/Prefab/MercHeadParticles.prefab")) }, new GameObjectActivation { gameObject = ((Component)Helpers.ThrowIfNull<Transform>(5, "There is no renderer at path \"MercArmature/ROOT/base/stomach/chest/SwingCenter/SwordBase/SwordLength.1\"", mdl.transform.Find("MercArmature/ROOT/base/stomach/chest/SwingCenter/SwordBase/SwordLength.1"))).gameObject, shouldActivate = false, spawnPrefabOnModelObject = true, localPosition = new Vector3(0f, 0f, 0f), localRotation = new Vector3(0f, 0f, 0f), localScale = new Vector3(0.01f, 0.01f, 0.01f), prefab = Helpers.ClonePrefab(assetBundle.LoadAsset<GameObject>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/Prefab/MercSwordParticles.prefab")) } }; }); Helpers.TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[1] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMerc/MercNeoMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"MercMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "MercMesh"))), hideOnDeath = false, ignoresMaterialOverrides = false } }; }); Helpers.TryCatchThrow("MeshReplacements", delegate { //IL_0010: 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_0069: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[1] { new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Merc\\Meshes\\NeoMercBody.mesh"), renderer = Helpers.ThrowIfNull<Renderer>(0, "There is no renderer with the name \"MercMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "MercMesh"))) } }; }); Helpers.TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = Array.Empty<LightInfo>(); }); Helpers.TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty<MinionSkinReplacement>(); }); Helpers.TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>(); }); return skin; } private static void AddMercBodyMadVetMercSkinDefSkin() { string text = "MercBody"; string text2 = "MadVetMercSkinDef"; GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } try { ModelLocator component = val.GetComponent<ModelLocator>(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController val2 = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent<ModelSkinController>() : null); if (!Object.op_Implicit((Object)(object)val2)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); } else { SkinDef val3 = CreateMercBodyMadVetMercSkinDefSkin(gameObject, val2); Array.Resize(ref val2.skins, val2.skins.Length + 1); val2.skins[val2.skins.Length - 1] = val3; } } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } } public class MadVetMercRandomToggler : MonoBehaviour { [Header("Settings")] [SerializeField] private float toggleInterval = 3f; [Header("References")] [SerializeField] private Mesh[] AltMeshes; private SkinnedMeshRenderer ContainedRenderer; private int oldindex = -1; private int currentIndex = -1; private IEnumerator Start() { for (int i = 0; i < 8; i++) { yield return null; } if (!CorePlugin.Merc_NullPointer_MeshSwapperEnabled.Value) { ((Behaviour)this).enabled = false; yield break; } GameObject gameObject = ((Component)((Component)this).transform.GetChild(0)).gameObject; ContainedRenderer = gameObject.GetComponent<SkinnedMeshRenderer>(); ((MonoBehaviour)this).StartCoroutine(RandomToggleRoutine()); } private IEnumerator RandomToggleRoutine() { while (true) { if (AltMeshes.Length > 1) { int num; do { num = Random.Range(0, AltMeshes.Length); } while (num == currentIndex || num == oldindex); oldindex = currentIndex; currentIndex = num; ContainedRenderer.sharedMesh = AltMeshes[currentIndex]; } yield return (object)new WaitForSeconds(toggleInterval); } } } public class MeshActivator : MonoBehaviour { [Serializable] public struct CustomRendererInfo { public Material material; public string addressableMaterialPath; public bool ignoreOverlays; public ShadowCastingMode shadowCastingMode; } [Header("Reference Settings")] [Tooltip("Name of the in-game original mesh object.")] public string referenceObjectName; [Tooltip("Copy Bone Data From Reference Object.")] public bool CopyBoneData = true; [Tooltip("Active state applied once registered.")] public bool initialActiveState = true; [Tooltip("Custom configuration for the renderer info applied to the CharacterModel.")] public CustomRendererInfo customRendererInfo = new CustomRendererInfo { shadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false }; private CharacterModel characterModel; private bool registered; private IEnumerator Start() { for (int i = 0; i < 5; i++) { yield return null; } Register(); } private void Register() { //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0212: 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_0293: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) if (registered) { return; } Renderer component = ((Component)this).GetComponent<Renderer>(); if (!Object.op_Implicit((Object)(object)component)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "' has no Renderer."), (Object)(object)this); return; } Transform val = FindReference(); if (!Object.op_Implicit((Object)(object)val)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "': '" + referenceObjectName + "' not found in its hierarchy."), (Object)(object)this); return; } characterModel = ((Component)val).GetComponentInParent<CharacterModel>(); if (!Object.op_Implicit((Object)(object)characterModel)) { characterModel = ((Component)this).GetComponentInParent<CharacterModel>(); } if (!Object.op_Implicit((Object)(object)characterModel)) { Debug.LogWarning((object)("[MeshActivator] '" + ((Object)this).name + "': no CharacterModel found above '" + ((Object)val).name + "'"), (Object)(object)this); return; } if (CopyBoneData) { SkinnedMeshRenderer val2 = ((Component)val).GetComponent<SkinnedMeshRenderer>(); if (!Object.op_Implicit((Object)(object)val2)) { val2 = ((Component)val).GetComponentInChildren<SkinnedMeshRenderer>(true); } if (Object.op_Implicit((Object)(object)val2)) { SkinnedMeshRenderer val3 = (SkinnedMeshRenderer)(object)((component is SkinnedMeshRenderer) ? component : null); if (val3 != null) { val3.rootBone = val2.rootBone; val3.bones = val2.bones; goto IL_015d; } } Debug.LogWarning((object)("[MeshActivator] '" + ((Object)val).name + "' has no SkinnedMeshRenderer to copy bones from."), (Object)(object)this); } goto IL_015d; IL_015d: Material val4 = customRendererInfo.material; if (!Object.op_Implicit((Object)(object)val4) && !string.IsNullOrEmpty(customRendererInfo.addressableMaterialPath)) { val4 = Addressables.LoadAssetAsync<Material>((object)customRendererInfo.addressableMaterialPath).WaitForCompletion(); if (!Object.op_Implicit((Object)(object)val4)) { Debug.LogWarning((object)("[MeshActivator] Failed to load material via Addressables path: '" + customRendererInfo.addressableMaterialPath + "'. Falling back to sharedMaterial."), (Object)(object)this); } } if (!Object.op_Implicit((Object)(object)val4)) { val4 = component.sharedMaterial; } RendererInfo val5 = new RendererInfo { renderer = component, defaultMaterial = val4, defaultShadowCastingMode = customRendererInfo.shadowCastingMode, ignoreOverlays = customRendererInfo.ignoreOverlays }; RendererInfo[] baseRendererInfos = characterModel.baseRendererInfos; int num = -1; for (int i = 0; i < baseRendererInfos.Length; i++) { if ((Object)(object)baseRendererInfos[i].renderer == (Object)(object)component) { num = i; break; } } if (num >= 0) { baseRendererInfos[num] = val5; } else { Array.Resize(ref characterModel.baseRendererInfos, baseRendererInfos.Length + 1); characterModel.baseRendererInfos[characterModel.baseRendererInfos.Length - 1] = val5; } registered = true; characterModel.UpdateMaterials(); ((Component)this).gameObject.SetActive(initialActiveState); } private Transform FindReference() { if (string.IsNullOrEmpty(referenceObjectName)) { return null; } Transform parent = ((Component)this).transform.parent; while (Object.op_Implicit((Object)(object)parent)) { if (((Object)parent).name == referenceObjectName) { return parent; } Transform[] componentsInChildren = ((Component)parent).GetComponentsInChildren<Transform>(true); foreach (Transform val in componentsInChildren) { if (!((Object)(object)val == (Object)(object)((Component)this).transform) && !val.IsChildOf(((Component)this).transform) && ((Object)val).name == referenceObjectName) { return val; } } parent = parent.parent; } return null; } } public static class Helpers { private static GameObject prefabHolder; public static GameObject ClonePrefab(GameObject gameObject) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown if (!Object.op_Implicit((Object)(object)prefabHolder)) { prefabHolder = new GameObject("PrefabHolder"); Object.DontDestroyOnLoad((Object)(object)prefabHolder); prefabHolder.SetActive(false); } GameObject obj = Object.Instantiate<GameObject>(gameObject, prefabHolder.transform); obj.AddComponent<RemoveClone>(); ((Object)obj).name = ((Object)gameObject).name; return obj; } public static GameObject GetChildGameObject(GameObject fromGameObject, string withName) { Transform[] componentsInChildren = fromGameObject.GetComponentsInChildren<Transform>(); foreach (Transform val in componentsInChildren) { if (((Object)val).name.StartsWith(withName)) { return ((Component)val).gameObject; } } return null; } public static Transform GetChild(this Transform transform, int index, out Transform child) { return child = transform.GetChild(index); } public static GameObject WithComponent<T>(this GameObject gameObject, Action<T> modifier = null) where T : Component { T obj = gameObject.AddComponent<T>(); modifier?.Invoke(obj); return gameObject; } public static GameObject WithTryComponent<T>(this GameObject gameObject, Action<T> modifier = null) where T : Component { if (Object.op_Implicit((Object)(object)gameObject) && !Object.op_Implicit((Object)(object)gameObject.GetComponent<T>())) { T obj = gameObject.AddComponent<T>(); modifier?.Invoke(obj); } return gameObject; } public static T ThrowIfEquals<T>(int index, string message, T value, T expected) where T : Enum { if (value.Equals(expected)) { throw new ElementException(index, message); } return value; } public static T ThrowIfOutOfBounds<T>(int index, string message, T[] array, int elementIndex) where T : class { if (array == null || array.Length <= elementIndex) { throw new ElementException(index, message); } return array[elementIndex]; } public static T ThrowIfNull<T>(int index, string message, T value) where T : class { if (value == null) { throw new ElementException(index, message); } return value; } public static void TryCatchThrow(string message, Action action) { try { action?.Invoke(); } catch (Exception innerException) { throw new FieldException(message, innerException); } } } public class RemoveClone : MonoBehaviour { public void Awake() { ((Object)this).name = ((Object)this).name[..^7]; } } public class FieldException : Exception { public FieldException(string message, Exception innerException) : base(message, innerException) { } } public class ElementException : Exception { public int Index { get; } public ElementException(int index, string message) : base(message) { Index = index; } } public class InsertBones : MonoBehaviour { private readonly List<SkinnedMeshRenderer> modifiedRenderers = new List<SkinnedMeshRenderer>(); public List<string> rendererPaths = new List<string>(); public List<Transform> newBones = new List<Transform>(); public string afterPath; public void Awake() { Transform transform = ((Component)((Component)this).GetComponentInParent<ModelSkinController>()).transform; Transform value = ((Component)transform).transform.Find(afterPath); foreach (string rendererPath in rendererPaths) { Transform obj = transform.Find(rendererPath); SkinnedMeshRenderer val = ((obj != null) ? ((Component)obj).GetComponent<SkinnedMeshRenderer>() : null); if (Object.op_Implicit((Object)(object)val)) { Transform[] array = val.bones; int num = Array.IndexOf(array, value) + 1; if (num != 0) { Array.Resize(ref array, array.Length + newBones.Count); Array.Copy(array, num, array, num + newBones.Count, array.Length - newBones.Count - num); newBones.CopyTo(array, num); val.bones = array; modifiedRenderers.Add(val); } } } } public void OnDestroy() { foreach (SkinnedMeshRenderer modifiedRenderer in modifiedRenderers) { if (Object.op_Implicit((Object)(object)modifiedRenderer)) { Transform[] array = modifiedRenderer.bones; int num = Array.IndexOf(array, ((Component)this).transform); Array.Copy(array, num + newBones.Count, array, num, array.Length - num - newBones.Count); Array.Resize(ref array, array.Length - newBones.Count); modifiedRenderer.bones = array; } } modifiedRenderers.Clear(); } } public class AddDynamicColliders : MonoBehaviour { public List<string> paths = new List<string>(); public void Awake() { Transform transform = ((Component)((Component)this).GetComponentInParent<ModelSkinController>()).transform; List<DynamicBoneCollider> list = new List<DynamicBoneCollider>(); foreach (string path in paths) { Transform val = transform.Find(path); if (Object.op_Implicit((Object)(object)val)) { list.AddRange(((Component)val).GetComponents<DynamicBoneCollider>()); } } DynamicBone[] components = ((Component)this).GetComponents<DynamicBone>(); for (int i = 0; i < components.Length; i++) { components[i].m_Colliders.AddRange(list); } } }
Skins/MadVeteran_MulT.dll
Decompiled a day agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using MonoMod.RuntimeDetour.HookGen; using RoR2; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace MadVeteran_MulT; [BepInPlugin("com.KrononConpsirator.MadVeteran_MulT", "MadVeteran_MulT", "1.0.0")] public class MadVeteran_MulTPlugin : BaseUnityPlugin { private class FieldException : Exception { public FieldException(string message, Exception innerException) : base(message, innerException) { } } private class ElementException : Exception { public int Index { get; } public ElementException(int index, string message) : base(message) { Index = index; } } private static AssetBundle assetBundle; private static readonly List<Material> materialsWithRoRShader = new List<Material>(); internal static MadVeteran_MulTPlugin Instance { get; private set; } internal static ManualLogSource InstanceLogger { get { MadVeteran_MulTPlugin instance = Instance; if (instance == null) { return null; } return ((BaseUnityPlugin)instance).Logger; } } private void Start() { Instance = this; using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MadVeteran_MulT.krononconpsiratormadveteran_mult")) { assetBundle = AssetBundle.LoadFromStream(stream); } ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)BodyCatalogInit); HookEndpointManager.Add((MethodBase)typeof(Language).GetMethod("LoadStrings"), (Delegate)new Action<Action<Language>, Language>(LanguageLoadStrings)); ReplaceShaders(); } private static void ReplaceShaders() { LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGStandard.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMulT/MulTNeoMat.mat"); } private static void LoadMaterialsWithReplacedShader(string shaderPath, params string[] materialPaths) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Shader shader = Addressables.LoadAssetAsync<Shader>((object)shaderPath).WaitForCompletion(); foreach (string text in materialPaths) { Material val = assetBundle.LoadAsset<Material>(text); val.shader = shader; materialsWithRoRShader.Add(val); } } private static void LanguageLoadStrings(Action<Language> orig, Language self) { orig(self); self.SetStringByToken("KRONONCONPSIRATOR_SKIN_MADVETMULTSKINDEF_NAME", "Tank-E"); } private static void BodyCatalogInit() { AddToolbotBodyMadVetMulTSkinDefSkin(); } private static void AddToolbotBodyMadVetMulTSkinDefSkin() { string text = "ToolbotBody"; string text2 = "MadVetMulTSkinDef"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent<ModelLocator>(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent<ModelSkinController>() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren<Renderer>(true); gameObject.GetComponentsInChildren<Light>(true); SkinDef skin = ScriptableObject.CreateInstance<SkinDef>(); SkinDefParams skinParams = ScriptableObject.CreateInstance<SkinDefParams>(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset<Sprite>("Assets\\SkinMods\\MadVeteran_MulT\\Icons\\MadVetMulTSkinDefIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "KRONONCONPSIRATOR_SKIN_MADVETMULTSKINDEF_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty<GameObjectActivation>(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: 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_0079: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[1] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoMulT/MulTNeoMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = ThrowIfNull<Renderer>(0, "There is no renderer with the name \"ToolbotMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "ToolbotMesh"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: 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_0069: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[1] { new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_MulT\\Meshes\\ToolbotMesh.mesh"), renderer = ThrowIfNull<Renderer>(0, "There is no renderer with the name \"ToolbotMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "ToolbotMesh"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty<MinionSkinReplacement>(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static T ThrowIfEquals<T>(int index, string message, T value, T expected) where T : Enum { if (value.Equals(expected)) { throw new ElementException(index, message); } return value; } private static T ThrowIfOutOfBounds<T>(int index, string message, T[] array, int elementIndex) where T : class { if (array == null || array.Length <= elementIndex) { throw new ElementException(index, message); } return array[elementIndex]; } private static T ThrowIfNull<T>(int index, string message, T value) where T : class { if (value == null) { throw new ElementException(index, message); } return value; } private static void TryCatchThrow(string message, Action action) { try { action?.Invoke(); } catch (Exception innerException) { throw new FieldException(message, innerException); } } private static void TryAddComponent<T>(GameObject obj) where T : Component { if (Object.op_Implicit((Object)(object)obj) && !Object.op_Implicit((Object)(object)obj.GetComponent<T>())) { obj.AddComponent<T>(); } } private static GameObject GetChildGameObject(GameObject fromGameObject, string withName) { Transform[] componentsInChildren = fromGameObject.GetComponentsInChildren<Transform>(); foreach (Transform val in componentsInChildren) { if (((Object)val).name.StartsWith(withName)) { return ((Component)val).gameObject; } } return null; } }
Skins/MadVeteran_Rex.dll
Decompiled a day agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using MonoMod.RuntimeDetour.HookGen; using RoR2; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace MadVeteran_Rex; [BepInPlugin("com.KrononConpsirator.MadVeteran_Rex", "MadVeteran_Rex", "1.0.0")] public class MadVeteran_RexPlugin : BaseUnityPlugin { private class FieldException : Exception { public FieldException(string message, Exception innerException) : base(message, innerException) { } } private class ElementException : Exception { public int Index { get; } public ElementException(int index, string message) : base(message) { Index = index; } } private static AssetBundle assetBundle; private static readonly List<Material> materialsWithRoRShader = new List<Material>(); internal static MadVeteran_RexPlugin Instance { get; private set; } internal static ManualLogSource InstanceLogger { get { MadVeteran_RexPlugin instance = Instance; if (instance == null) { return null; } return ((BaseUnityPlugin)instance).Logger; } } private void Start() { Instance = this; using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MadVeteran_Rex.krononconpsiratormadveteran_rex")) { assetBundle = AssetBundle.LoadFromStream(stream); } ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)BodyCatalogInit); HookEndpointManager.Add((MethodBase)typeof(Language).GetMethod("LoadStrings"), (Delegate)new Action<Action<Language>, Language>(LanguageLoadStrings)); ReplaceShaders(); } private static void ReplaceShaders() { LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGStandard.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoRex/BioRexPlantMat.mat", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoRex/BioRexSteelMat.mat"); LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGCloudRemap.shader", "Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoRex/BioRexGlassMat.mat"); } private static void LoadMaterialsWithReplacedShader(string shaderPath, params string[] materialPaths) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Shader shader = Addressables.LoadAssetAsync<Shader>((object)shaderPath).WaitForCompletion(); foreach (string text in materialPaths) { Material val = assetBundle.LoadAsset<Material>(text); val.shader = shader; materialsWithRoRShader.Add(val); } } private static void LanguageLoadStrings(Action<Language> orig, Language self) { orig(self); self.SetStringByToken("KRONONCONPSIRATOR_SKIN_MADVETREXSKINDEF_NAME", "Synergized"); } private static void BodyCatalogInit() { AddTreebotBodyMadVetRexSkinDefSkin(); } private static void AddTreebotBodyMadVetRexSkinDefSkin() { string text = "TreebotBody"; string text2 = "MadVetRexSkinDef"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent<ModelLocator>(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent<ModelSkinController>() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren<Renderer>(true); gameObject.GetComponentsInChildren<Light>(true); SkinDef skin = ScriptableObject.CreateInstance<SkinDef>(); SkinDefParams skinParams = ScriptableObject.CreateInstance<SkinDefParams>(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset<Sprite>("Assets\\SkinMods\\MadVeteran_Rex\\Icons\\MadVetRexSkinDefIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "KRONONCONPSIRATOR_SKIN_MADVETREXSKINDEF_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty<GameObjectActivation>(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: 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_0079: 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_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: 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_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0113: 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_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: 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) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[4] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoRex/BioRexPlantMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = true, renderer = ThrowIfNull<Renderer>(0, "There is no renderer with the name \"TreebotBotMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "TreebotBotMesh"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoRex/BioRexSteelMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull<Renderer>(1, "There is no renderer with the name \"TreebotFlowerMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "TreebotFlowerMesh"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoRex/BioRexGlassMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull<Renderer>(2, "There is no renderer with the name \"TreebotLeafletMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "TreebotLeafletMesh"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset<Material>("Assets/Skins/SkinAsset/Vanilla/MadVeteran/NeoRex/BioRexPlantMat.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = true, renderer = ThrowIfNull<Renderer>(3, "There is no renderer with the name \"TreebotRootMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "TreebotRootMesh"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: 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_0069: 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_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_012c: 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_0136: 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_018f: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[4] { new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Rex\\Meshes\\BioBarklegsMesh.mesh"), renderer = ThrowIfNull<Renderer>(0, "There is no renderer with the name \"TreebotBotMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "TreebotBotMesh"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Rex\\Meshes\\BioBotMesh.mesh"), renderer = ThrowIfNull<Renderer>(1, "There is no renderer with the name \"TreebotFlowerMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "TreebotFlowerMesh"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Rex\\Meshes\\BioGlassBotMesh.mesh"), renderer = ThrowIfNull<Renderer>(2, "There is no renderer with the name \"TreebotLeafletMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "TreebotLeafletMesh"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset<Mesh>("Assets\\SkinMods\\MadVeteran_Rex\\Meshes\\BioplantMesh.mesh"), renderer = ThrowIfNull<Renderer>(3, "There is no renderer with the name \"TreebotRootMesh\"", ((IEnumerable<Renderer>)renderers).FirstOrDefault((Func<Renderer, bool>)((Renderer r) => ((Object)r).name == "TreebotRootMesh"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty<MinionSkinReplacement>(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty<ProjectileGhostReplacement>(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static T ThrowIfEquals<T>(int index, string message, T value, T expected) where T : Enum { if (value.Equals(expected)) { throw new ElementException(index, message); } return value; } private static T ThrowIfOutOfBounds<T>(int index, string message, T[] array, int elementIndex) where T : class { if (array == null || array.Length <= elementIndex) { throw new ElementException(index, message); } return array[elementIndex]; } private static T ThrowIfNull<T>(int index, string message, T value) where T : class { if (value == null) { throw new ElementException(index, message); } return value; } private static void TryCatchThrow(string message, Action action) { try { action?.Invoke(); } catch (Exception innerException) { throw new FieldException(message, innerException); } } private static void TryAddComponent<T>(GameObject obj) where T : Component { if (Object.op_Implicit((Object)(object)obj) && !Object.op_Implicit((Object)(object)obj.GetComponent<T>())) { obj.AddComponent<T>(); } } private static GameObject GetChildGameObject(GameObject fromGameObject, string withName) { Transform[] componentsInChildren = fromGameObject.GetComponentsInChildren<Transform>(); foreach (Transform val in componentsInChildren) { if (((Object)val).name.StartsWith(withName)) { return ((Component)val).gameObject; } } return null; } }