Decompiled source of R2API Skins v1.3.1
plugins/R2API.Skins/R2API.Skins.dll
Decompiled 3 days ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using EntityStates; using HG; using HG.Reflection; using HarmonyLib; using IL.RoR2; using IL.RoR2.Orbs; using Microsoft.CodeAnalysis; using Mono.Cecil; using Mono.Cecil.Cil; using MonoMod.Cil; using On.EntityStates; using On.RoR2; using R2API.AutoVersionGen; using R2API.SkinsAPI.Interop; using R2API.Utils; using RoR2; using RoR2.Orbs; using RoR2.Projectile; using RoR2.Skills; using RoR2.SurvivorMannequins; using RoR2.UI.MainMenu; using Unity.Collections; using Unity.Jobs; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("R2API.Skins")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.3.1.0")] [assembly: AssemblyInformationalVersion("1.3.1+f6a339f2c1be08d270e103e382ff8ef36f532bb6")] [assembly: AssemblyProduct("R2API.Skins")] [assembly: AssemblyTitle("R2API.Skins")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.3.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace System.Diagnostics.CodeAnalysis { [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class MemberNotNullAttribute : Attribute { public string[] Members { get; } public MemberNotNullAttribute(string member) { Members = new string[1] { member }; } public MemberNotNullAttribute(params string[] members) { Members = members; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class MemberNotNullWhenAttribute : Attribute { public bool ReturnValue { get; } public string[] Members { get; } public MemberNotNullWhenAttribute(bool returnValue, string member) { ReturnValue = returnValue; Members = new string[1] { member }; } public MemberNotNullWhenAttribute(bool returnValue, params string[] members) { ReturnValue = returnValue; Members = members; } } } namespace R2API { internal struct IconTexJob : IJobParallelFor { [ReadOnly] public Color32 Top; [ReadOnly] public Color32 Right; [ReadOnly] public Color32 Bottom; [ReadOnly] public Color32 Left; [ReadOnly] public Color32 Line; public NativeArray<Color32> TexOutput; public void Execute(int index) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) int num = index % 128 - 64; int num2 = index / 128 - 64; if (Math.Abs(Math.Abs(num2) - Math.Abs(num)) <= 2) { TexOutput[index] = Line; } else if (num2 > num && num2 > -num) { TexOutput[index] = Top; } else if (num2 < num && num2 < -num) { TexOutput[index] = Bottom; } else if (num2 > num && num2 < -num) { TexOutput[index] = Left; } else if (num2 < num && num2 > -num) { TexOutput[index] = Right; } } } public struct SkinDefParamsInfo { public string Name; public string NameToken; public Sprite? Icon; public UnlockableDef? UnlockableDef; public GameObject? RootObject; public SkinDef?[]? BaseSkins; public SkinDefParams? SkinDefParams; public RendererInfo[]? RendererInfos; public MeshReplacement[]? MeshReplacements; public GameObjectActivation[]? GameObjectActivations; public ProjectileGhostReplacement[]? ProjectileGhostReplacements; public MinionSkinReplacement[]? MinionSkinReplacements; } [Obsolete] public struct SkinDefInfo { [Obsolete] public SkinDef?[]? BaseSkins; [Obsolete] public Sprite? Icon; [Obsolete] public string? NameToken; [Obsolete] public UnlockableDef? UnlockableDef; [Obsolete] public GameObject? RootObject; [Obsolete] public RendererInfo[]? RendererInfos; [Obsolete] public MeshReplacement[]? MeshReplacements; [Obsolete] public GameObjectActivation[]? GameObjectActivations; [Obsolete] public ProjectileGhostReplacement[]? ProjectileGhostReplacements; [Obsolete] public MinionSkinReplacement[]? MinionSkinReplacements; [Obsolete] public string? Name; public static implicit operator SkinDefParamsInfo(SkinDefInfo orig) { //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_012e: 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_0138: 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_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) SkinDefParamsInfo skinDefParamsInfo = default(SkinDefParamsInfo); skinDefParamsInfo.BaseSkins = orig.BaseSkins; skinDefParamsInfo.Icon = orig.Icon; skinDefParamsInfo.NameToken = orig.NameToken; skinDefParamsInfo.UnlockableDef = orig.UnlockableDef; skinDefParamsInfo.RootObject = orig.RootObject; skinDefParamsInfo.RendererInfos = orig.RendererInfos; skinDefParamsInfo.Name = orig.Name; SkinDefParamsInfo result = skinDefParamsInfo; if (orig.GameObjectActivations != null) { result.GameObjectActivations = (GameObjectActivation[]?)(object)new GameObjectActivation[orig.GameObjectActivations.Length]; for (int i = 0; i < orig.GameObjectActivations.Length; i++) { result.GameObjectActivations[i] = GameObjectActivation.op_Implicit(orig.GameObjectActivations[i]); } } if (orig.MeshReplacements != null) { result.MeshReplacements = (MeshReplacement[]?)(object)new MeshReplacement[orig.MeshReplacements.Length]; for (int j = 0; j < orig.MeshReplacements.Length; j++) { result.MeshReplacements[j] = MeshReplacement.op_Implicit(orig.MeshReplacements[j]); } } if (orig.ProjectileGhostReplacements != null) { result.ProjectileGhostReplacements = (ProjectileGhostReplacement[]?)(object)new ProjectileGhostReplacement[orig.ProjectileGhostReplacements.Length]; for (int k = 0; k < orig.ProjectileGhostReplacements.Length; k++) { result.ProjectileGhostReplacements[k] = ProjectileGhostReplacement.op_Implicit(orig.ProjectileGhostReplacements[k]); } } if (orig.MinionSkinReplacements != null) { result.MinionSkinReplacements = (MinionSkinReplacement[]?)(object)new MinionSkinReplacement[orig.MinionSkinReplacements.Length]; for (int l = 0; l < orig.MinionSkinReplacements.Length; l++) { result.MinionSkinReplacements[l] = MinionSkinReplacement.op_Implicit(orig.MinionSkinReplacements[l]); } } return result; } } public static class SkinIDRS { [CompilerGenerated] private static class <>O { public static hook_ApplySkin <0>__SetCustomIDRS; public static Action <1>__SystemInit; } private static readonly Dictionary<SkinDef, ItemDisplayRuleSet> skinToIDRS = new Dictionary<SkinDef, ItemDisplayRuleSet>(); private static readonly Dictionary<SkinDef, Dictionary<Object, DisplayRuleGroup>> skinIDRSOverrides = new Dictionary<SkinDef, Dictionary<Object, DisplayRuleGroup>>(); private static bool hooksSet = false; private static bool initialized = false; internal static void SetHooks() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown if (!hooksSet) { hooksSet = true; object obj = <>O.<0>__SetCustomIDRS; if (obj == null) { hook_ApplySkin val = SetCustomIDRS; <>O.<0>__SetCustomIDRS = val; obj = (object)val; } ModelSkinController.ApplySkin += (hook_ApplySkin)obj; RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(SystemInit)); } } internal static void UnsetHooks() { //IL_0016: 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_0021: Expected O, but got Unknown hooksSet = false; object obj = <>O.<0>__SetCustomIDRS; if (obj == null) { hook_ApplySkin val = SetCustomIDRS; <>O.<0>__SetCustomIDRS = val; obj = (object)val; } ModelSkinController.ApplySkin -= (hook_ApplySkin)obj; RoR2Application.onLoad = (Action)Delegate.Remove(RoR2Application.onLoad, new Action(SystemInit)); } public static bool AddPair(SkinDef skinDef, ItemDisplayRuleSet ruleSet) { SetHooks(); if (initialized) { SkinsPlugin.Logger.LogInfo((object)$"Cannot add pair {skinDef} && {ruleSet} as the SkinIDRS has already initialized."); return false; } if (skinToIDRS.ContainsKey(skinDef)) { SkinsPlugin.Logger.LogInfo((object)$"Cannot add pair {skinDef} && {ruleSet}, the skin {skinDef} already has an entry associated to it."); return false; } skinToIDRS[skinDef] = ruleSet; return true; } public static bool AddGroupOverride(SkinDef skinDef, Object keyAsset, DisplayRuleGroup displayRuleGroup) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) SetHooks(); if (initialized) { SkinsPlugin.Logger.LogInfo((object)"Cannot add group SkinIDRS has already initialized."); return false; } if (!skinIDRSOverrides.TryGetValue(skinDef, out Dictionary<Object, DisplayRuleGroup> value)) { value = (skinIDRSOverrides[skinDef] = new Dictionary<Object, DisplayRuleGroup>()); } value[keyAsset] = displayRuleGroup; return true; } private static void SystemInit() { //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) initialized = true; ModelLocator val = default(ModelLocator); CharacterModel val2 = default(CharacterModel); foreach (CharacterBody allBodyPrefabBodyBodyComponent in BodyCatalog.allBodyPrefabBodyBodyComponents) { if (!Object.op_Implicit((Object)(object)allBodyPrefabBodyBodyComponent) || !((Component)allBodyPrefabBodyBodyComponent).TryGetComponent<ModelLocator>(ref val) || !Object.op_Implicit((Object)(object)val.modelTransform) || !((Component)val.modelTransform).TryGetComponent<CharacterModel>(ref val2)) { continue; } ItemDisplayRuleSet itemDisplayRuleSet = val2.itemDisplayRuleSet; SkinDef[] bodySkinDefs = SkinCatalog.GetBodySkinDefs(allBodyPrefabBodyBodyComponent.bodyIndex); foreach (SkinDef key in bodySkinDefs) { if (!skinIDRSOverrides.TryGetValue(key, out Dictionary<Object, DisplayRuleGroup> value)) { if (!skinToIDRS.ContainsKey(key)) { skinToIDRS[key] = itemDisplayRuleSet; } continue; } if (!skinToIDRS.TryGetValue(key, out ItemDisplayRuleSet value2)) { value2 = (skinToIDRS[key] = (Object.op_Implicit((Object)(object)itemDisplayRuleSet) ? Object.Instantiate<ItemDisplayRuleSet>(itemDisplayRuleSet) : ScriptableObject.CreateInstance<ItemDisplayRuleSet>())); } foreach (KeyValuePair<Object, DisplayRuleGroup> item in value) { value2.SetDisplayRuleGroup(item.Key, item.Value); } IEnumerator enumerator3 = value2.GenerateRuntimeValuesAsync(); while (enumerator3.MoveNext()) { } } } skinIDRSOverrides.Clear(); } private static void SetCustomIDRS(orig_ApplySkin orig, ModelSkinController self, int skinIndex) { orig.Invoke(self, skinIndex); SkinDef safe = ArrayUtils.GetSafe<SkinDef>(self.skins, skinIndex); if (Object.op_Implicit((Object)(object)safe) && skinToIDRS.TryGetValue(safe, out ItemDisplayRuleSet value)) { self.characterModel.itemDisplayRuleSet = value; } } } [AutoVersion] public static class Skins { public const string PluginGUID = "com.bepis.r2api.skins"; public const string PluginName = "R2API.Skins"; private static bool _hooksSet; public const string PluginVersion = "1.3.1"; internal static void SetHooks() { if (!_hooksSet) { _hooksSet = true; MainMenuController.OnMainMenuInitialised += OnMainMenuInitialized; } } internal static void UnsetHooks() { _hooksSet = false; MainMenuController.OnMainMenuInitialised -= OnMainMenuInitialized; } private static void OnMainMenuInitialized() { MainMenuController.OnMainMenuInitialised -= OnMainMenuInitialized; SurvivorDef[] survivorDefs = SurvivorCatalog.survivorDefs; foreach (SurvivorDef val in survivorDefs) { if (!Object.op_Implicit((Object)(object)val)) { continue; } GameObject displayPrefab = val.displayPrefab; GameObject bodyPrefab = val.bodyPrefab; if (!Object.op_Implicit((Object)(object)displayPrefab) || !Object.op_Implicit((Object)(object)bodyPrefab)) { SkinsPlugin.Logger.LogWarning((object)("SurvivorDef " + val.cachedName + " is missing a displayPrefab or bodyPrefab! You need to have this! Skipping...")); continue; } ModelSkinController componentInChildren = bodyPrefab.GetComponentInChildren<ModelSkinController>(); if (!Object.op_Implicit((Object)(object)componentInChildren) || componentInChildren.skins == null || componentInChildren.skins.Length == 0) { SkinsPlugin.Logger.LogWarning((object)("BodyPrefab for " + val.cachedName + " is missing a ModelSkinController on the bodyPrefab! You need to have this! Skipping...")); continue; } CharacterModel componentInChildren2 = displayPrefab.GetComponentInChildren<CharacterModel>(); if (!Object.op_Implicit((Object)(object)componentInChildren2)) { SkinsPlugin.Logger.LogWarning((object)("Display prefab " + ((Object)displayPrefab).name + " is missing the CharacterModel component! You need to have this! Skipping...")); continue; } ModelSkinController val2 = ((Component)componentInChildren2).GetComponent<ModelSkinController>(); if (!Object.op_Implicit((Object)(object)val2)) { SkinsPlugin.Logger.LogWarning((object)("Display prefab " + ((Object)componentInChildren2).name + " is missing a ModelSkinController component!\r\nHighly recommended you set the controller up manually. Adding component...")); val2 = ((Component)componentInChildren2).gameObject.AddComponent<ModelSkinController>(); } ModelSkinController val3 = val2; if (val3.skins == null) { val3.skins = Array.Empty<SkinDef>(); } if (val2.skins.Length != componentInChildren.skins.Length) { SkinsPlugin.Logger.LogWarning((object)("ModelSkinController skins array on the displayPrefab " + ((Object)componentInChildren2).name + " array does not match the one on the bodyPrefab!\r\nHighly recommended you set the controller up manually. Cloning from body prefab...")); val2.skins = ArrayUtils.Clone<SkinDef>(componentInChildren.skins); } } } public static SkinDef CreateNewSkinDef(SkinDefParamsInfo skin) { SetHooks(); SkinDef val = ScriptableObject.CreateInstance<SkinDef>(); ((Object)val).name = skin.Name; val.nameToken = skin.NameToken; val.icon = skin.Icon; val.baseSkins = skin.BaseSkins ?? Array.Empty<SkinDef>(); val.unlockableDef = skin.UnlockableDef; val.rootObject = skin.RootObject; val.skinDefParams = skin.SkinDefParams; if ((Object)(object)val.skinDefParams == (Object)null) { val.skinDefParams = ScriptableObject.CreateInstance<SkinDefParams>(); val.skinDefParams.rendererInfos = skin.RendererInfos ?? Array.Empty<RendererInfo>(); val.skinDefParams.gameObjectActivations = skin.GameObjectActivations ?? Array.Empty<GameObjectActivation>(); val.skinDefParams.meshReplacements = skin.MeshReplacements ?? Array.Empty<MeshReplacement>(); val.skinDefParams.projectileGhostReplacements = skin.ProjectileGhostReplacements ?? Array.Empty<ProjectileGhostReplacement>(); val.skinDefParams.minionSkinReplacements = skin.MinionSkinReplacements ?? Array.Empty<MinionSkinReplacement>(); } return val; } [Obsolete] public static SkinDef CreateNewSkinDef(SkinDefInfo skin) { SetHooks(); SkinDef obj = CreateNewSkinDef((SkinDefParamsInfo)skin); obj.rendererInfos = skin.RendererInfos; obj.gameObjectActivations = skin.GameObjectActivations; obj.meshReplacements = skin.MeshReplacements; obj.projectileGhostReplacements = skin.ProjectileGhostReplacements; obj.minionSkinReplacements = skin.MinionSkinReplacements; return obj; } public static bool AddSkinToCharacter(GameObject? bodyPrefab, SkinDefParamsInfo skin) { SetHooks(); SkinDef skin2 = CreateNewSkinDef(skin); return AddSkinToCharacter(bodyPrefab, skin2); } [Obsolete] public static bool AddSkinToCharacter(GameObject? bodyPrefab, SkinDefInfo skin) { SetHooks(); SkinDef skin2 = CreateNewSkinDef(skin); return AddSkinToCharacter(bodyPrefab, skin2); } public static bool AddSkinToCharacter(GameObject? bodyPrefab, SkinDef? skin) { //IL_01d6: 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_01f5: Unknown result type (might be due to invalid IL or missing references) SetHooks(); if ((Object)(object)bodyPrefab == (Object)null) { SkinsPlugin.Logger.LogError((object)"Tried to add skin to null body prefab."); return false; } if ((Object)(object)skin == (Object)null) { SkinsPlugin.Logger.LogError((object)"Tried to add invalid skin."); return false; } if (string.IsNullOrEmpty(((Object)skin).name) || string.IsNullOrEmpty(skin.nameToken)) { SkinsPlugin.Logger.LogError((object)"Tried to add invalid skin. Please add a name and nameToken."); return false; } ModelLocator val = default(ModelLocator); if (!bodyPrefab.TryGetComponent<ModelLocator>(ref val)) { SkinsPlugin.Logger.LogError((object)"Tried to add skin to invalid body prefab (No ModelLocator)."); return false; } Transform modelTransform = val.modelTransform; if ((Object)(object)modelTransform == (Object)null) { SkinsPlugin.Logger.LogError((object)"Tried to add skin to body prefab with no modelTransform."); return false; } if ((Object)(object)skin.rootObject != (Object)(object)((Component)modelTransform).gameObject) { SkinsPlugin.Logger.LogError((object)"Tried to add skin with improper root object set."); return false; } ModelSkinController val2 = default(ModelSkinController); if (!((Component)modelTransform).TryGetComponent<ModelSkinController>(ref val2)) { SkinsPlugin.Logger.LogWarning((object)(((Object)bodyPrefab).name + " does not have a modelSkinController.\nAdding a new one and attempting to populate the default skin.\nHighly recommended you set the controller up manually.")); CharacterModel val3 = default(CharacterModel); if (!((Component)modelTransform).TryGetComponent<CharacterModel>(ref val3)) { SkinsPlugin.Logger.LogError((object)"Unable to locate CharacterModel, default skin creation aborted."); return false; } SkinnedMeshRenderer mainSkinnedMeshRenderer = val3.mainSkinnedMeshRenderer; if ((Object)(object)mainSkinnedMeshRenderer == (Object)null) { SkinsPlugin.Logger.LogError((object)"CharacterModel did not contain a main SkinnedMeshRenderer, default skin creation aborted."); return false; } RendererInfo[] baseRendererInfos = val3.baseRendererInfos; if (baseRendererInfos == null || baseRendererInfos.Length == 0) { SkinsPlugin.Logger.LogError((object)"CharacterModel rendererInfos are invalid, default skin creation aborted."); return false; } val2 = ((Component)modelTransform).gameObject.AddComponent<ModelSkinController>(); SkinDefParamsInfo skin2 = default(SkinDefParamsInfo); skin2.Icon = CreateDefaultSkinIcon(); skin2.Name = "skin" + ((Object)bodyPrefab).name + "Default"; skin2.NameToken = ((Object)bodyPrefab).name.ToUpper() + "_DEFAULT_SKIN_NAME"; skin2.RootObject = ((Component)modelTransform).gameObject; skin2.UnlockableDef = null; skin2.RendererInfos = ArrayUtils.Clone<RendererInfo>(val3.baseRendererInfos); skin2.MeshReplacements = (MeshReplacement[]?)(object)new MeshReplacement[1] { new MeshReplacement { renderer = (Renderer)(object)mainSkinnedMeshRenderer, mesh = mainSkinnedMeshRenderer.sharedMesh } }; SkinDef val4 = CreateNewSkinDef(skin2); val2.skins = (SkinDef[])(object)new SkinDef[1] { val4 }; } ArrayUtils.ArrayAppend<SkinDef>(ref val2.skins, ref skin); return true; } public static Sprite CreateSkinIcon(Color top, Color right, Color bottom, Color left) { //IL_0005: 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) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) SetHooks(); return CreateSkinIcon(top, right, bottom, left, new Color(0.6f, 0.6f, 0.6f)); } public static Sprite CreateSkinIcon(Color top, Color right, Color bottom, Color left, Color line) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002e: 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_0034: 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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0064: 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_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) //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_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) SetHooks(); Texture2D val = new Texture2D(128, 128, (TextureFormat)4, false); IconTexJob iconTexJob = default(IconTexJob); iconTexJob.Top = Color32.op_Implicit(top); iconTexJob.Bottom = Color32.op_Implicit(bottom); iconTexJob.Right = Color32.op_Implicit(right); iconTexJob.Left = Color32.op_Implicit(left); iconTexJob.Line = Color32.op_Implicit(line); iconTexJob.TexOutput = val.GetRawTextureData<Color32>(); IconTexJob iconTexJob2 = iconTexJob; JobHandle val2 = default(JobHandle); val2 = IJobParallelForExtensions.Schedule<IconTexJob>(iconTexJob2, 16384, 1, val2); ((JobHandle)(ref val2)).Complete(); ((Texture)val).wrapMode = (TextureWrapMode)1; val.Apply(); return Sprite.Create(val, new Rect(0f, 0f, 128f, 128f), new Vector2(0.5f, 0.5f)); } private static Sprite CreateDefaultSkinIcon() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) return CreateSkinIcon(Color.red, Color.green, Color.blue, Color.black); } } public static class SkinSkillVariants { [HarmonyPatch] private class Patches { [HarmonyPatch(/*Could not decode attribute arguments.*/)] [HarmonyILManipulator] private static void SkinDef_RuntimeSkin_ApplyAsync(ILContext il) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Expected O, but got Unknown //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_0501: Unknown result type (might be due to invalid IL or missing references) //IL_050d: Unknown result type (might be due to invalid IL or missing references) //IL_051f: Unknown result type (might be due to invalid IL or missing references) //IL_052c: 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_025b: 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) //IL_030a: Unknown result type (might be due to invalid IL or missing references) //IL_0316: 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_0353: Unknown result type (might be due to invalid IL or missing references) //IL_0382: Unknown result type (might be due to invalid IL or missing references) //IL_03fe: Unknown result type (might be due to invalid IL or missing references) //IL_040a: Unknown result type (might be due to invalid IL or missing references) //IL_0439: Unknown result type (might be due to invalid IL or missing references) //IL_0445: Unknown result type (might be due to invalid IL or missing references) //IL_0454: 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_0484: Unknown result type (might be due to invalid IL or missing references) //IL_0490: Unknown result type (might be due to invalid IL or missing references) //IL_049f: Unknown result type (might be due to invalid IL or missing references) int count = il.Body.Variables.Count; il.Body.Variables.Add(new VariableDefinition(il.Import(typeof(List<SkillDef>)))); il.Body.Variables.Add(new VariableDefinition(il.Import(typeof(Mesh)))); FieldReference fieldReference = null; Instruction val = il.Instrs[il.Instrs.Count - 1]; int i = 0; ILCursor val2 = new ILCursor(il); FieldReference val4 = default(FieldReference); if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[5] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld(x, ref fieldReference), (Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, (MethodBase)Reflection.GetPropertyGetter(typeof(GameObject), "transform")), (Instruction x) => ILPatternMatchingExt.MatchStfld(x, ref val4) })) { val2.Emit(OpCodes.Ldarg_0); val2.Emit(OpCodes.Ldfld, fieldReference); val2.Emit(OpCodes.Ldloc, 1); val2.EmitDelegate<Func<GameObject, RuntimeSkin, List<SkillDef>>>((Func<GameObject, RuntimeSkin, List<SkillDef>>)CacheSkillDefs); val2.Emit(OpCodes.Stloc, count); int num2 = default(int); int num = default(int); MethodReference val3 = default(MethodReference); if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[6] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchLdflda<RuntimeSkin>(x, "rendererInfoTemplates"), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchCall(x, ref val3), (Instruction x) => ILPatternMatchingExt.MatchCall(x, (MethodBase)Reflection.GetPropertyGetter(typeof(RendererInfoTemplate), "rendererInfoData")), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref i) })) { val2.Emit(OpCodes.Ldloca, i); val2.Emit(OpCodes.Ldloc, count); val2.EmitDelegate<<>A{00000001}<RendererInfo, List<SkillDef>>>((<>A{00000001}<RendererInfo, List<SkillDef>>)ApplyRendererInfoSkillVariants); } else { Debug.LogError((object)(((MemberReference)il.Method).Name + " IL Hook 2 failed!")); } if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 8) })) { Instruction prev = val2.Prev; val2.Index -= 2; Instruction next = val2.Next; val2.Emit(OpCodes.Dup); val2.Emit(OpCodes.Ldloc, count); val2.EmitDelegate<<>F{00000001}<LightReplacementTemplate, List<SkillDef>, bool>>((<>F{00000001}<LightReplacementTemplate, List<SkillDef>, bool>)CheckForLightInfoSkillVariants); val2.Emit(OpCodes.Brfalse_S, next); val2.Emit(OpCodes.Ldloc, count); val2.EmitDelegate<<>F{00000001}<LightReplacementTemplate, List<SkillDef>, LightInfo>>((<>F{00000001}<LightReplacementTemplate, List<SkillDef>, LightInfo>)ApplyLightInfoSkillVariants); val2.Emit(OpCodes.Br, prev); } else { Debug.LogError((object)(((MemberReference)il.Method).Name + " IL Hook 3 failed!")); } if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 18) })) { Instruction prev2 = val2.Prev; val2.Index -= 3; Instruction next2 = val2.Next; val2.Emit(OpCodes.Dup); val2.Emit(OpCodes.Ldloc, count); val2.EmitDelegate<<>F{00000001}<MeshReplacementTemplate, List<SkillDef>, Mesh>>((<>F{00000001}<MeshReplacementTemplate, List<SkillDef>, Mesh>)ApplyMeshReplacementSkillVariants); val2.Emit(OpCodes.Dup); val2.Emit(OpCodes.Stloc, count + 1); val2.Emit(OpCodes.Call, (MethodBase)AccessTools.Method(typeof(Object), "op_Implicit", (Type[])null, (Type[])null)); val2.Emit(OpCodes.Brfalse_S, next2); val2.Emit(OpCodes.Pop); val2.Emit(OpCodes.Ldloc, count + 1); val2.Emit(OpCodes.Br, prev2); } else { Debug.LogError((object)(((MemberReference)il.Method).Name + " IL Hook 4 failed!")); } } else { Debug.LogError((object)(((MemberReference)il.Method).Name + " IL Hook 1 failed!")); } val2.Goto(val, (MoveType)0, false); int index = val2.Index; val2.Index = index - 1; val2.Emit(OpCodes.Ldarg_0); val2.Emit(OpCodes.Ldfld, fieldReference); val2.Emit(OpCodes.Ldloc, 1); val2.Emit(OpCodes.Ldloc, count); val2.EmitDelegate<Action<GameObject, RuntimeSkin, List<SkillDef>>>((Action<GameObject, RuntimeSkin, List<SkillDef>>)RunOnSkinApplied); } [HarmonyPatch(/*Could not decode attribute arguments.*/)] [HarmonyILManipulator] private static void SkinCatalog_Init(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); MethodReference val4 = default(MethodReference); if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 1), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 6), (Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, ref val4) })) { val.Emit(OpCodes.Ldloc, 6); val.Emit(OpCodes.Ldloc, 2); val.EmitDelegate<Action<SkinDef, BodyIndex>>((Action<SkinDef, BodyIndex>)AddSkinToBodyDictionary); } else { Debug.LogError((object)(((MemberReference)il.Method).Name + " IL Hook 1 failed!")); } FieldReference val3 = default(FieldReference); ILLabel val2 = default(ILLabel); if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 0), (Instruction x) => ILPatternMatchingExt.MatchStfld(x, ref val3), (Instruction x) => ILPatternMatchingExt.MatchBr(x, ref val2) })) { val.EmitDelegate<Action>((Action)ApplyPendingSkinSkillVariations); } else { Debug.LogError((object)(((MemberReference)il.Method).Name + " IL Hook 2 failed!")); } } [HarmonyPatch(/*Could not decode attribute arguments.*/)] [HarmonyILManipulator] private static void SkinDef_BakeAsync(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 1), (Instruction x) => ILPatternMatchingExt.MatchCall(x, (MethodBase)Reflection.GetPropertyGetter(typeof(SkinDef), "runtimeSkin")) })) { val.Emit(OpCodes.Ldloc, 1); val.EmitDelegate<Action<SkinDef>>((Action<SkinDef>)AddSkinDefToRuntimeSkin); } else { Debug.LogError((object)(((MemberReference)il.Method).Name + " IL Hook failed!")); } } [HarmonyPatch(/*Could not decode attribute arguments.*/)] [HarmonyILManipulator] private static void ModelSkinController_ApplySkinAsync(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown ILCursor val = new ILCursor(il); FieldReference val3 = default(FieldReference); ILLabel val2 = default(ILLabel); if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[5] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld(x, ref val3), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 1), (Instruction x) => ILPatternMatchingExt.MatchCall(x, (MethodBase)Reflection.GetPropertyGetter(typeof(ModelSkinController), "currentSkinIndex")), (Instruction x) => ILPatternMatchingExt.MatchBeq(x, ref val2) })) { val.RemoveRange(5); } else { Debug.LogError((object)(((MemberReference)il.Method).Name + " IL Hook failed!")); } } } public delegate void OnSkinApplied(GameObject gameObject, List<SkillDef> skillDefs); public interface ISkillVariantStruct<T> { bool lowPriority { get; set; } bool NullCheck(); bool Compare(T t); void Add(ref T t); void AddPending(SkinDefParams skinDefParams, T t); void AddPending(ModelSkinController modelSkinController, T t); } [Serializable] public struct RendererInfoSkillVariant : ISkillVariantStruct<RendererInfo> { [PrefabReference] public Renderer renderer; public SkillDef skillDef; public Material material; public ShadowCastingMode defaultShadowCastingMode; public bool ignoreOverlays; public bool hideOnDeath; public bool ignoresMaterialOverrides; private bool _lowPriority; public bool lowPriority { get { return _lowPriority; } set { _lowPriority = value; } } public bool Compare(RendererInfo t) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return (Object)(object)t.renderer == (Object)(object)renderer; } public bool NullCheck() { return (Object)(object)renderer == (Object)null; } public void Add(ref RendererInfo t) { t.AddSkillVariant(this); } public void AddPending(SkinDefParams skinDefParams, RendererInfo t) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) AddPendingSkillVariant(skinDefParams, t, this); } public void AddPending(ModelSkinController modelSkinController, RendererInfo t) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) AddPendingSkillVariant(modelSkinController, t, this); } } [Serializable] public struct MeshReplacementSkillVariant : ISkillVariantStruct<MeshReplacement> { [PrefabReference] public Renderer renderer; public SkillDef skillDef; public Mesh mesh; private bool _lowPriority; public bool lowPriority { get { return _lowPriority; } set { _lowPriority = value; } } public bool Compare(MeshReplacement t) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return (Object)(object)t.renderer == (Object)(object)renderer; } public bool NullCheck() { return (Object)(object)renderer == (Object)null; } public void Add(ref MeshReplacement t) { t.AddSkillVariant(this); } public void AddPending(SkinDefParams skinDefParams, MeshReplacement t) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) AddPendingSkillVariant(skinDefParams, t, this); } public void AddPending(ModelSkinController modelSkinController, MeshReplacement t) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) AddPendingSkillVariant(modelSkinController, t, this); } } [Serializable] public struct LightInfoSkillVariant : ISkillVariantStruct<LightInfo> { [PrefabReference] public Light originalLight; public SkillDef skillDef; public LightInfo lightInfo; private bool _lowPriority; public bool lowPriority { get { return _lowPriority; } set { _lowPriority = value; } } public bool Compare(LightInfo t) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return (Object)(object)t.light == (Object)(object)originalLight; } public bool NullCheck() { return (Object)(object)originalLight == (Object)null; } public void Add(ref LightInfo t) { t.AddSkillVariant(this); } public void AddPending(SkinDefParams skinDefParams, LightInfo t) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) AddPendingSkillVariant(skinDefParams, t, this); } public void AddPending(ModelSkinController modelSkinController, LightInfo t) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) AddPendingSkillVariant(modelSkinController, t, this); } } [Serializable] public struct ProjectileGhostReplacementSkillVariant : ISkillVariantStruct<ProjectileGhostReplacement> { public GameObject projectilePrefab; public SkillDef skillDef; public GameObject projectileGhostReplacementPrefab; private bool _lowPriority; public bool lowPriority { get { return _lowPriority; } set { _lowPriority = value; } } public bool Compare(ProjectileGhostReplacement t) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return (Object)(object)t.projectilePrefab == (Object)(object)projectilePrefab; } public bool NullCheck() { return (Object)(object)projectilePrefab == (Object)null; } public void Add(ref ProjectileGhostReplacement t) { t.AddSkillVariant(this); } public void AddPending(SkinDefParams skinDefParams, ProjectileGhostReplacement t) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) AddPendingSkillVariant(skinDefParams, t, this); } public void AddPending(ModelSkinController modelSkinController, ProjectileGhostReplacement t) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) AddPendingSkillVariant(modelSkinController, t, this); } } [Serializable] public struct MinionSkinReplacementSkillVariant : ISkillVariantStruct<MinionSkinReplacement> { public GameObject minionBodyPrefab; public SkillDef skillDef; public SkinDef minionSkin; private bool _lowPriority; public bool lowPriority { get { return _lowPriority; } set { _lowPriority = value; } } public bool Compare(MinionSkinReplacement t) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return (Object)(object)t.minionBodyPrefab == (Object)(object)minionBodyPrefab; } public bool NullCheck() { return (Object)(object)minionBodyPrefab == (Object)null; } public void Add(ref MinionSkinReplacement t) { t.AddSkillVariant(this); } public void AddPending(SkinDefParams skinDefParams, MinionSkinReplacement t) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) AddPendingSkillVariant(skinDefParams, t, this); } public void AddPending(ModelSkinController modelSkinController, MinionSkinReplacement t) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) AddPendingSkillVariant(modelSkinController, t, this); } } [CompilerGenerated] private static class <>O { public static hook_ctor <0>__MeshReplacementTemplate_ctor; public static hook_ctor <1>__GhostReplacementTemplate_ctor; public static hook_ctor <2>__LightReplacementTemplate_ctor; public static hook_ctor <3>__MinionSkinTemplate_ctor; public static Manipulator <4>__ProjectileGhostReplacementManager_FindProjectileGhostPrefab; public static Manipulator <5>__MasterSummon_Perform; public static Func<CharacterBody, List<SkillDef>> <6>__CollectSkills; public static <>F{00000001}<MinionSkinTemplate, List<SkillDef>, SkinDef> <7>__ApplyMinionSkinVariants; public static Func<GhostReplacementTemplate, CharacterBody, GameObject> <8>__ReplaceProjectileGhost; } public static Dictionary<SkinDef, BodyIndex> skinToBody = new Dictionary<SkinDef, BodyIndex>(); internal static Dictionary<SkinDef, SkinDefParams> skinDefToSkinDefParams = new Dictionary<SkinDef, SkinDefParams>(); internal static Dictionary<SkinDef, SkinDefParams> skinDefToOptimizedSkinDefParams = new Dictionary<SkinDef, SkinDefParams>(); private static bool _hooksSet; private static bool _isLoaded; internal static void SetHooks() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Expected O, but got Unknown //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Expected O, but got Unknown //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Expected O, but got Unknown if (!_hooksSet) { _hooksSet = true; SkinsPlugin.harmonyPatcher.CreateClassProcessor(typeof(Patches)).Patch(); object obj = <>O.<0>__MeshReplacementTemplate_ctor; if (obj == null) { hook_ctor val = MeshReplacementTemplate_ctor; <>O.<0>__MeshReplacementTemplate_ctor = val; obj = (object)val; } MeshReplacementTemplate.ctor += (hook_ctor)obj; object obj2 = <>O.<1>__GhostReplacementTemplate_ctor; if (obj2 == null) { hook_ctor val2 = GhostReplacementTemplate_ctor; <>O.<1>__GhostReplacementTemplate_ctor = val2; obj2 = (object)val2; } GhostReplacementTemplate.ctor += (hook_ctor)obj2; object obj3 = <>O.<2>__LightReplacementTemplate_ctor; if (obj3 == null) { hook_ctor val3 = LightReplacementTemplate_ctor; <>O.<2>__LightReplacementTemplate_ctor = val3; obj3 = (object)val3; } LightReplacementTemplate.ctor += (hook_ctor)obj3; object obj4 = <>O.<3>__MinionSkinTemplate_ctor; if (obj4 == null) { hook_ctor val4 = MinionSkinTemplate_ctor; <>O.<3>__MinionSkinTemplate_ctor = val4; obj4 = (object)val4; } MinionSkinTemplate.ctor += (hook_ctor)obj4; object obj5 = <>O.<4>__ProjectileGhostReplacementManager_FindProjectileGhostPrefab; if (obj5 == null) { Manipulator val5 = ProjectileGhostReplacementManager_FindProjectileGhostPrefab; <>O.<4>__ProjectileGhostReplacementManager_FindProjectileGhostPrefab = val5; obj5 = (object)val5; } ProjectileGhostReplacementManager.FindProjectileGhostPrefab += (Manipulator)obj5; object obj6 = <>O.<5>__MasterSummon_Perform; if (obj6 == null) { Manipulator val6 = MasterSummon_Perform; <>O.<5>__MasterSummon_Perform = val6; obj6 = (object)val6; } MasterSummon.Perform += (Manipulator)obj6; } } internal static void UnsetHooks() { //IL_0016: 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_0021: Expected O, but got Unknown //IL_0036: 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_0041: Expected O, but got Unknown //IL_0056: 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) //IL_0061: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Expected O, but got Unknown //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Expected O, but got Unknown //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Expected O, but got Unknown _hooksSet = false; object obj = <>O.<0>__MeshReplacementTemplate_ctor; if (obj == null) { hook_ctor val = MeshReplacementTemplate_ctor; <>O.<0>__MeshReplacementTemplate_ctor = val; obj = (object)val; } MeshReplacementTemplate.ctor -= (hook_ctor)obj; object obj2 = <>O.<1>__GhostReplacementTemplate_ctor; if (obj2 == null) { hook_ctor val2 = GhostReplacementTemplate_ctor; <>O.<1>__GhostReplacementTemplate_ctor = val2; obj2 = (object)val2; } GhostReplacementTemplate.ctor -= (hook_ctor)obj2; object obj3 = <>O.<2>__LightReplacementTemplate_ctor; if (obj3 == null) { hook_ctor val3 = LightReplacementTemplate_ctor; <>O.<2>__LightReplacementTemplate_ctor = val3; obj3 = (object)val3; } LightReplacementTemplate.ctor -= (hook_ctor)obj3; object obj4 = <>O.<3>__MinionSkinTemplate_ctor; if (obj4 == null) { hook_ctor val4 = MinionSkinTemplate_ctor; <>O.<3>__MinionSkinTemplate_ctor = val4; obj4 = (object)val4; } MinionSkinTemplate.ctor -= (hook_ctor)obj4; object obj5 = <>O.<4>__ProjectileGhostReplacementManager_FindProjectileGhostPrefab; if (obj5 == null) { Manipulator val5 = ProjectileGhostReplacementManager_FindProjectileGhostPrefab; <>O.<4>__ProjectileGhostReplacementManager_FindProjectileGhostPrefab = val5; obj5 = (object)val5; } ProjectileGhostReplacementManager.FindProjectileGhostPrefab -= (Manipulator)obj5; object obj6 = <>O.<5>__MasterSummon_Perform; if (obj6 == null) { Manipulator val6 = MasterSummon_Perform; <>O.<5>__MasterSummon_Perform = val6; obj6 = (object)val6; } MasterSummon.Perform -= (Manipulator)obj6; } private static void MinionSkinTemplate_ctor(orig_ctor orig, ref MinionSkinTemplate self, MinionSkinReplacement minionSkinReplacement) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) self.SetSkillVariants(minionSkinReplacement.GetSkillVariants()); orig.Invoke(ref self, minionSkinReplacement); } private static void MasterSummon_Perform(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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 //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Expected O, but got Unknown //IL_018f: 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_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_0207: 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_0220: 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) ILCursor val = new ILCursor(il); int count = il.Body.Variables.Count; il.Body.Variables.Add(new VariableDefinition(il.Import(typeof(List<SkillDef>)))); il.Body.Variables.Add(new VariableDefinition(il.Import(typeof(SkinDef)))); if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 1), (Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, (MethodBase)Reflection.GetPropertyGetter(typeof(CharacterBody), "master")), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 2) })) { val.Emit(OpCodes.Ldloc_1); val.EmitDelegate<Func<CharacterBody, List<SkillDef>>>((Func<CharacterBody, List<SkillDef>>)CollectSkills); val.Emit(OpCodes.Stloc, count); il.Body.Variables.Add(new VariableDefinition(il.Import(typeof(List<SkillDef>)))); if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<MinionSkinTemplate>(x, "minionSkin") })) { Instruction next = val.Next; Instruction prev = val.Prev; int index = val.Index; val.Index = index - 1; val.Emit(OpCodes.Dup); val.Emit(OpCodes.Ldloc, count); val.EmitDelegate<<>F{00000001}<MinionSkinTemplate, List<SkillDef>, SkinDef>>((<>F{00000001}<MinionSkinTemplate, List<SkillDef>, SkinDef>)ApplyMinionSkinVariants); val.Emit(OpCodes.Dup); val.Emit(OpCodes.Stloc, count + 1); val.Emit(OpCodes.Call, (MethodBase)AccessTools.Method(typeof(Object), "op_Implicit", (Type[])null, (Type[])null)); val.Emit(OpCodes.Brfalse_S, prev); val.Emit(OpCodes.Pop); val.Emit(OpCodes.Ldloc, count + 1); val.Emit(OpCodes.Br, next); } else { Debug.LogError((object)(((MemberReference)il.Method).Name + " IL Hook 2 failed!")); } } else { Debug.LogError((object)(((MemberReference)il.Method).Name + " IL Hook 1 failed!")); } } private static void LightReplacementTemplate_ctor(orig_ctor orig, ref LightReplacementTemplate self, LightInfo source, GameObject rootObject) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) self.SetSkillVariants(source.GetSkillVariants()); orig.Invoke(ref self, source, rootObject); } private static void GhostReplacementTemplate_ctor(orig_ctor orig, ref GhostReplacementTemplate self, ProjectileGhostReplacement projectileGhostReplacement) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) self.SetSkillVariants(projectileGhostReplacement.GetSkillVariants()); orig.Invoke(ref self, projectileGhostReplacement); } private static void ProjectileGhostReplacementManager_FindProjectileGhostPrefab(ILContext il) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); ILLabel iLLabel = null; Instruction val2 = il.Instrs[il.Instrs.Count - 1]; if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[5] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 5), (Instruction x) => ILPatternMatchingExt.MatchLdfld<GhostReplacementTemplate>(x, "projectileIndex"), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<ProjectileController>(x, "catalogIndex"), (Instruction x) => ILPatternMatchingExt.MatchBneUn(x, ref iLLabel) })) { val.Emit(OpCodes.Ldloc, 5); val.Emit(OpCodes.Ldloc, 1); val.EmitDelegate<Func<GhostReplacementTemplate, CharacterBody, GameObject>>((Func<GhostReplacementTemplate, CharacterBody, GameObject>)ReplaceProjectileGhost); val.Emit(OpCodes.Dup); val.Emit(OpCodes.Call, (MethodBase)AccessTools.Method(typeof(Object), "op_Implicit", (Type[])null, (Type[])null)); val.Emit(OpCodes.Brtrue_S, val2); val.Emit(OpCodes.Pop); } else { Debug.LogError((object)(((MemberReference)il.Method).Name + " IL Hook failed!")); } } private static void MeshReplacementTemplate_ctor(orig_ctor orig, ref MeshReplacementTemplate self, MeshReplacement source, GameObject rootObject) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) self.SetSkillVariants(source.GetSkillVariants()); orig.Invoke(ref self, source, rootObject); } private static List<SkillDef> CacheSkillDefs(GameObject gameObject, RuntimeSkin runtimeSkin) { HurtBoxGroup component = gameObject.GetComponent<HurtBoxGroup>(); if ((Object)(object)component == (Object)null) { return CacheSkillDefsInLobby(gameObject, runtimeSkin); } HurtBox mainHurtBox = component.mainHurtBox; if ((Object)(object)mainHurtBox == (Object)null) { return CacheSkillDefsInLobby(gameObject, runtimeSkin); } HealthComponent healthComponent = mainHurtBox.healthComponent; if ((Object)(object)healthComponent == (Object)null) { return CacheSkillDefsInLobby(gameObject, runtimeSkin); } CharacterBody body = healthComponent.body; if ((Object)(object)body == (Object)null) { return null; } return CollectSkills(body); } private static List<SkillDef> CollectSkills(CharacterBody characterBody) { SkillLocator skillLocator = characterBody.skillLocator; if ((Object)(object)skillLocator == (Object)null) { return null; } if (skillLocator.allSkills == null) { return null; } List<SkillDef> list = new List<SkillDef>(); GenericSkill[] allSkills = skillLocator.allSkills; foreach (GenericSkill val in allSkills) { if (!((Object)(object)val == (Object)null) && !((Object)(object)val.baseSkill == (Object)null)) { list.Add(val.baseSkill); } } return list; } private static List<SkillDef> CacheSkillDefsInLobby(GameObject gameObject, RuntimeSkin runtimeSkin) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) BodyIndex val = skinToBody[runtimeSkin.GetSkinDef()]; GameObject bodyPrefab = BodyCatalog.GetBodyPrefab(val); if ((Object)(object)bodyPrefab == (Object)null) { return null; } SurvivorMannequinSlotController componentInParent = gameObject.GetComponentInParent<SurvivorMannequinSlotController>(); if ((Object)(object)componentInParent == (Object)null || (Object)(object)componentInParent.networkUser == (Object)null) { return null; } Loadout val2 = Loadout.RequestInstance(); componentInParent.networkUser.networkLoadout.CopyLoadout(val2); GenericSkill[] components = bodyPrefab.GetComponents<GenericSkill>(); if (components == null || components.Length == 0) { return null; } List<SkillDef> list = new List<SkillDef>(); for (int i = 0; i < components.Length; i++) { GenericSkill val3 = components[i]; if (!((Object)(object)val3 == (Object)null)) { SkillDef skillDef = val3.skillFamily.variants[val2.bodyLoadoutManager.GetSkillVariant(val, i)].skillDef; if (!((Object)(object)skillDef == (Object)null)) { list.Add(skillDef); } } } return list; } private static void ApplyRendererInfoSkillVariants(ref RendererInfo rendererInfoData, List<SkillDef> skillDefs) { //IL_0066: 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) if (skillDefs == null) { return; } object[] skillVariants = rendererInfoData.GetSkillVariants(); if (skillVariants == null) { return; } bool flag = false; object[] array = skillVariants; foreach (object obj in array) { if (obj != null) { RendererInfoSkillVariant rendererInfoSkillVariant = (RendererInfoSkillVariant)obj; SkillDef skillDef = rendererInfoSkillVariant.skillDef; if (!((Object)(object)skillDef == (Object)null) && skillDefs.Contains(skillDef) && (!flag || !rendererInfoSkillVariant.lowPriority)) { rendererInfoData.defaultMaterial = rendererInfoSkillVariant.material; rendererInfoData.defaultShadowCastingMode = rendererInfoSkillVariant.defaultShadowCastingMode; rendererInfoData.ignoreOverlays = rendererInfoSkillVariant.ignoreOverlays; rendererInfoData.hideOnDeath = rendererInfoSkillVariant.hideOnDeath; rendererInfoData.ignoresMaterialOverrides = rendererInfoSkillVariant.ignoresMaterialOverrides; _ = rendererInfoSkillVariant.lowPriority; } } } } private static Mesh ApplyMeshReplacementSkillVariants(ref MeshReplacementTemplate meshReplacementTemplate, List<SkillDef> skillDefs) { Mesh result = null; if (skillDefs == null) { return result; } object[] skillVariants = meshReplacementTemplate.GetSkillVariants(); if (skillVariants == null) { return result; } bool flag = false; object[] array = skillVariants; foreach (object obj in array) { if (obj == null) { continue; } MeshReplacementSkillVariant meshReplacementSkillVariant = (MeshReplacementSkillVariant)obj; SkillDef skillDef = meshReplacementSkillVariant.skillDef; if (!((Object)(object)skillDef == (Object)null) && skillDefs.Contains(skillDef) && (!flag || !meshReplacementSkillVariant.lowPriority)) { result = meshReplacementSkillVariant.mesh; if (!meshReplacementSkillVariant.lowPriority) { flag = true; } } } return result; } private static SkinDef ApplyMinionSkinVariants(ref MinionSkinTemplate minionSkinTemplate, List<SkillDef> skillDefs) { SkinDef minionSkin = minionSkinTemplate.minionSkin; if (skillDefs == null) { return minionSkin; } object[] skillVariants = minionSkinTemplate.GetSkillVariants(); if (skillVariants == null) { return minionSkin; } bool flag = false; object[] array = skillVariants; foreach (object obj in array) { if (obj == null) { continue; } MinionSkinReplacementSkillVariant minionSkinReplacementSkillVariant = (MinionSkinReplacementSkillVariant)obj; SkillDef skillDef = minionSkinReplacementSkillVariant.skillDef; if (!((Object)(object)skillDef == (Object)null) && skillDefs.Contains(skillDef) && (!flag || !minionSkinReplacementSkillVariant.lowPriority)) { minionSkin = minionSkinReplacementSkillVariant.minionSkin; if (minionSkinReplacementSkillVariant.lowPriority) { flag = true; } } } return minionSkin; } private static bool CheckForLightInfoSkillVariants(ref LightReplacementTemplate lightReplacementTemplate, List<SkillDef> skillDefs) { if (skillDefs == null) { return false; } object[] skillVariants = lightReplacementTemplate.GetSkillVariants(); if (skillVariants == null) { return false; } object[] array = skillVariants; foreach (object obj in array) { if (obj != null) { SkillDef skillDef = ((LightInfoSkillVariant)obj).skillDef; if (!((Object)(object)skillDef == (Object)null) && skillDefs.Contains(skillDef)) { return true; } } } return false; } private static LightInfo ApplyLightInfoSkillVariants(ref LightReplacementTemplate lightReplacementTemplate, List<SkillDef> skillDefs) { //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) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0017: 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_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) LightInfo result = lightReplacementTemplate.data; if (skillDefs == null) { return result; } object[] skillVariants = lightReplacementTemplate.GetSkillVariants(); if (skillVariants == null) { return result; } bool flag = false; object[] array = skillVariants; foreach (object obj in array) { if (obj == null) { continue; } LightInfoSkillVariant lightInfoSkillVariant = (LightInfoSkillVariant)obj; SkillDef skillDef = lightInfoSkillVariant.skillDef; if (!((Object)(object)skillDef == (Object)null) && skillDefs.Contains(skillDef) && (!flag || !lightInfoSkillVariant.lowPriority)) { result = lightInfoSkillVariant.lightInfo; if (!lightInfoSkillVariant.lowPriority) { flag = true; } } } return result; } private static void AddSkinToBodyDictionary(SkinDef skinDef, BodyIndex bodyIndex) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) if (!skinToBody.ContainsKey(skinDef)) { skinToBody.Add(skinDef, bodyIndex); } } private static void ApplyPendingSkinSkillVariations() { _isLoaded = true; foreach (SkinSkillVariantsDef pendingSkinSkillVariantsDef in SkinSkillVariantsDef.pendingSkinSkillVariantsDefs) { if (!((Object)(object)pendingSkinSkillVariantsDef == (Object)null)) { pendingSkinSkillVariantsDef.Apply(); } } } private static void AddSkinDefToRuntimeSkin(SkinDef skinDef) { skinDef.runtimeSkin.SetSkinDef(skinDef); } internal static SkinDefParams GetSkinDefParams(SkinDef skinDef) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) SkinDefParams val = skinDef.skinDefParams; if ((Object)(object)val == (Object)null && skinDef.skinDefParamsAddress != null) { val = (SkinDefParams)((!Object.op_Implicit(((AssetReference)skinDef.skinDefParamsAddress).Asset)) ? ((object)skinDef.skinDefParamsAddress.LoadAsset().WaitForCompletion()) : ((object)/*isinst with value type is only supported in some contexts*/)); } return val; } internal static SkinDefParams GetOptimizedSkinDefParams(SkinDef skinDef) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) SkinDefParams val = skinDef.skinDefParams; if ((Object)(object)val == (Object)null && skinDef.optimizedSkinDefParamsAddress != null) { val = (SkinDefParams)((!Object.op_Implicit(((AssetReference)skinDef.optimizedSkinDefParamsAddress).Asset)) ? ((object)skinDef.optimizedSkinDefParamsAddress.LoadAsset().WaitForCompletion()) : ((object)/*isinst with value type is only supported in some contexts*/)); } return val; } private static ref RendererInfo GetRendererInfoByName(SkinDefParams skinDefParams, string rendererName) { RendererInfo[] rendererInfos = skinDefParams.rendererInfos; for (int i = 0; i < rendererInfos.Length; i++) { ref RendererInfo reference = ref rendererInfos[i]; if (!((Object)(object)reference.renderer == (Object)null) && ((Object)reference.renderer).name == rendererName) { return ref reference; } } throw new NullReferenceException($"Couldn't find renderer \"{rendererName}\" for \"{skinDefParams}\""); } private static ref MeshReplacement GetMeshReplacementByName(SkinDefParams skinDefParams, string meshRendererName) { MeshReplacement[] meshReplacements = skinDefParams.meshReplacements; for (int i = 0; i < meshReplacements.Length; i++) { ref MeshReplacement reference = ref meshReplacements[i]; if (!((Object)(object)reference.renderer == (Object)null) && ((Object)reference.renderer).name == meshRendererName) { return ref reference; } } throw new NullReferenceException($"Couldn't find renderer \"{meshRendererName}\" for \"{skinDefParams}\""); } private static ref LightInfo GetLightInfoByName(SkinDefParams skinDefParams, string lightInfoName) { LightInfo[] lightReplacements = skinDefParams.lightReplacements; for (int i = 0; i < lightReplacements.Length; i++) { ref LightInfo reference = ref lightReplacements[i]; if (!((Object)(object)reference.light == (Object)null) && ((Object)reference.light).name == lightInfoName) { return ref reference; } } throw new NullReferenceException($"Couldn't find light \"{lightInfoName}\" for \"{skinDefParams}\""); } private static ref ProjectileGhostReplacement GetProjectileGhostReplacementByName(SkinDefParams skinDefParams, string projectileName) { ProjectileGhostReplacement[] projectileGhostReplacements = skinDefParams.projectileGhostReplacements; for (int i = 0; i < projectileGhostReplacements.Length; i++) { ref ProjectileGhostReplacement reference = ref projectileGhostReplacements[i]; if (!((Object)(object)reference.projectilePrefab == (Object)null) && ((Object)reference.projectilePrefab).name == projectileName) { return ref reference; } } throw new NullReferenceException($"Couldn't find projectile \"{projectileName}\" for \"{skinDefParams}\""); } private static ref ProjectileGhostReplacement GetProjectileGhostReplacementByPrefab(SkinDefParams skinDefParams, GameObject projectilePrefab) { ProjectileGhostReplacement[] projectileGhostReplacements = skinDefParams.projectileGhostReplacements; for (int i = 0; i < projectileGhostReplacements.Length; i++) { ref ProjectileGhostReplacement reference = ref projectileGhostReplacements[i]; if (!((Object)(object)reference.projectilePrefab == (Object)null) && (Object)(object)reference.projectilePrefab == (Object)(object)projectilePrefab) { return ref reference; } } throw new NullReferenceException($"Couldn't find projectile \"{((Object)projectilePrefab).name}\" for \"{skinDefParams}\""); } private static ref MinionSkinReplacement GetMinionSkinReplacementByName(SkinDefParams skinDefParams, string minionBodyName) { MinionSkinReplacement[] minionSkinReplacements = skinDefParams.minionSkinReplacements; for (int i = 0; i < minionSkinReplacements.Length; i++) { ref MinionSkinReplacement reference = ref minionSkinReplacements[i]; if (!((Object)(object)reference.minionBodyPrefab == (Object)null) && ((Object)reference.minionBodyPrefab).name == minionBodyName) { return ref reference; } } throw new NullReferenceException($"Couldn't find minion body \"{minionBodyName}\" for \"{skinDefParams}\""); } private static ref MinionSkinReplacement GetMinionSkinReplacementByPrefab(SkinDefParams skinDefParams, GameObject minionBodyPrefab) { MinionSkinReplacement[] minionSkinReplacements = skinDefParams.minionSkinReplacements; for (int i = 0; i < minionSkinReplacements.Length; i++) { ref MinionSkinReplacement reference = ref minionSkinReplacements[i]; if (!((Object)(object)reference.minionBodyPrefab == (Object)null) && (Object)(object)reference.minionBodyPrefab == (Object)(object)minionBodyPrefab) { return ref reference; } } throw new NullReferenceException($"Couldn't find minion body \"{minionBodyPrefab}\" for \"{skinDefParams}\""); } internal static void AddItemToObjects<T>(ref object[] objects, T t) { if (objects == null) { objects = new object[1] { t }; } else { int num = objects.Length; Array.Resize(ref objects, num + 1); objects[num] = t; } } private static void RunOnSkinApplied(GameObject gameObject, RuntimeSkin runtimeSkin, List<SkillDef> skillDefs) { SkinDef skinDef = runtimeSkin.GetSkinDef(); if (!((Object)(object)skinDef == (Object)null)) { skinDef.GetOnSkinApplied()?.Invoke(gameObject, skillDefs); } } private static GameObject ReplaceProjectileGhost(GhostReplacementTemplate ghostReplacementTemplate, CharacterBody characterBody) { object[] skillVariants = ghostReplacementTemplate.GetSkillVariants(); if (skillVariants == null || skillVariants.Length == 0) { return null; } SkillLocator skillLocator = characterBody.skillLocator; if ((Object)(object)skillLocator == (Object)null) { return null; } GenericSkill[] allSkills = skillLocator.allSkills; if (allSkills == null || allSkills.Length == 0) { return null; } List<SkillDef> list = new List<SkillDef>(); GenericSkill[] array = allSkills; foreach (GenericSkill val in array) { if (!((Object)(object)val == (Object)null) && !((Object)(object)val.baseSkill == (Object)null)) { list.Add(val.baseSkill); } } GameObject result = null; bool flag = false; for (int j = 0; j < skillVariants.Length; j++) { ProjectileGhostReplacementSkillVariant projectileGhostReplacementSkillVariant = (ProjectileGhostReplacementSkillVariant)skillVariants[j]; if (!((Object)(object)projectileGhostReplacementSkillVariant.skillDef == (Object)null) && list.Contains(projectileGhostReplacementSkillVariant.skillDef) && (!flag || !projectileGhostReplacementSkillVariant.lowPriority)) { result = projectileGhostReplacementSkillVariant.projectileGhostReplacementPrefab; if (!projectileGhostReplacementSkillVariant.lowPriority) { flag = true; } } } return result; } private static SkinSkillVariantsDef GetOrCreateSkinSkillVariantsDef(SkinDefParams skinDefParams) { SkinSkillVariantsDef skinSkillVariantsDef = skinDefParams.GetSkinSkillVariantsDef(); if ((Object)(object)skinSkillVariantsDef == (Object)null) { skinSkillVariantsDef = ScriptableObject.CreateInstance<SkinSkillVariantsDef>(); ((Object)skinSkillVariantsDef).name = ((Object)skinDefParams).name; skinSkillVariantsDef.Register(); skinSkillVariantsDef.AddSkinDefParams(skinDefParams); skinDefParams.SetSkinSkillVariantsDef(skinSkillVariantsDef); } return skinSkillVariantsDef; } private static SkinSkillVariantsDef GetOrCreateSkinSkillVariantsDef(ModelSkinController modelSkinController) { SkinSkillVariantsDef skinSkillVariantsDef = modelSkinController.GetSkinSkillVariantsDef(); if ((Object)(object)skinSkillVariantsDef == (Object)null) { skinSkillVariantsDef = ScriptableObject.CreateInstance<SkinSkillVariantsDef>(); ((Object)skinSkillVariantsDef).name = ((Object)modelSkinController).name; skinSkillVariantsDef.Register(); skinSkillVariantsDef.modelSkinController = modelSkinController; modelSkinController.SetSkinSkillVariantsDef(skinSkillVariantsDef); } return skinSkillVariantsDef; } private static void AddPendingSkillVariant(SkinDefParams skinDefParams, RendererInfo rendererInfo, RendererInfoSkillVariant rendererInfoSkillVariant) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) SkinSkillVariantsDef orCreateSkinSkillVariantsDef = GetOrCreateSkinSkillVariantsDef(skinDefParams); rendererInfoSkillVariant.renderer = rendererInfo.renderer; orCreateSkinSkillVariantsDef.AddRendererInfoSkillVariant(rendererInfoSkillVariant); } private static void AddPendingSkillVariant(ModelSkinController modelSkinController, RendererInfo rendererInfo, RendererInfoSkillVariant rendererInfoSkillVariant) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) SkinSkillVariantsDef orCreateSkinSkillVariantsDef = GetOrCreateSkinSkillVariantsDef(modelSkinController); rendererInfoSkillVariant.renderer = rendererInfo.renderer; orCreateSkinSkillVariantsDef.AddRendererInfoSkillVariant(rendererInfoSkillVariant); } private static void AddPendingSkillVariant(SkinDefParams skinDefParams, MeshReplacement meshReplacement, MeshReplacementSkillVariant meshReplacementSkillVariant) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) SkinSkillVariantsDef orCreateSkinSkillVariantsDef = GetOrCreateSkinSkillVariantsDef(skinDefParams); meshReplacementSkillVariant.renderer = meshReplacement.renderer; orCreateSkinSkillVariantsDef.AddMeshReplacementSkillVariant(meshReplacementSkillVariant); } private static void AddPendingSkillVariant(ModelSkinController modelSkinController, MeshReplacement meshReplacement, MeshReplacementSkillVariant meshReplacementSkillVariant) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) SkinSkillVariantsDef orCreateSkinSkillVariantsDef = GetOrCreateSkinSkillVariantsDef(modelSkinController); meshReplacementSkillVariant.renderer = meshReplacement.renderer; orCreateSkinSkillVariantsDef.AddMeshReplacementSkillVariant(meshReplacementSkillVariant); } private static void AddPendingSkillVariant(SkinDefParams skinDefParams, LightInfo lightInfo, LightInfoSkillVariant lightInfoSkillVariant) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) SkinSkillVariantsDef orCreateSkinSkillVariantsDef = GetOrCreateSkinSkillVariantsDef(skinDefParams); lightInfoSkillVariant.originalLight = lightInfo.light; orCreateSkinSkillVariantsDef.AddLightInfoSkillVariant(lightInfoSkillVariant); } private static void AddPendingSkillVariant(ModelSkinController modelSkinController, LightInfo lightInfo, LightInfoSkillVariant lightInfoSkillVariant) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) SkinSkillVariantsDef orCreateSkinSkillVariantsDef = GetOrCreateSkinSkillVariantsDef(modelSkinController); lightInfoSkillVariant.originalLight = lightInfo.light; orCreateSkinSkillVariantsDef.AddLightInfoSkillVariant(lightInfoSkillVariant); } private static void AddPendingSkillVariant(SkinDefParams skinDefParams, ProjectileGhostReplacement projectileGhostReplacement, ProjectileGhostReplacementSkillVariant projectileGhostReplacementSkillVariant) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) SkinSkillVariantsDef orCreateSkinSkillVariantsDef = GetOrCreateSkinSkillVariantsDef(skinDefParams); projectileGhostReplacementSkillVariant.projectilePrefab = projectileGhostReplacement.projectilePrefab; orCreateSkinSkillVariantsDef.AddProjectileGhostReplacementSkillVariant(projectileGhostReplacementSkillVariant); } private static void AddPendingSkillVariant(ModelSkinController modelSkinController, ProjectileGhostReplacement projectileGhostReplacement, ProjectileGhostReplacementSkillVariant projectileGhostReplacementSkillVariant) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) SkinSkillVariantsDef orCreateSkinSkillVariantsDef = GetOrCreateSkinSkillVariantsDef(modelSkinController); projectileGhostReplacementSkillVariant.projectilePrefab = projectileGhostReplacement.projectilePrefab; orCreateSkinSkillVariantsDef.AddProjectileGhostReplacementSkillVariant(projectileGhostReplacementSkillVariant); } private static void AddPendingSkillVariant(SkinDefParams skinDefParams, MinionSkinReplacement minionSkinReplacement, MinionSkinReplacementSkillVariant minionSkinReplacementSkillVariant) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) SkinSkillVariantsDef orCreateSkinSkillVariantsDef = GetOrCreateSkinSkillVariantsDef(skinDefParams); minionSkinReplacementSkillVariant.minionBodyPrefab = minionSkinReplacement.minionBodyPrefab; orCreateSkinSkillVariantsDef.AddMinionSkinReplacementSkillVariant(minionSkinReplacementSkillVariant); } private static void AddPendingSkillVariant(ModelSkinController modelSkinController, MinionSkinReplacement minionSkinReplacement, MinionSkinReplacementSkillVariant minionSkinReplacementSkillVariant) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) SkinSkillVariantsDef orCreateSkinSkillVariantsDef = GetOrCreateSkinSkillVariantsDef(modelSkinController); minionSkinReplacementSkillVariant.minionBodyPrefab = minionSkinReplacement.minionBodyPrefab; orCreateSkinSkillVariantsDef.AddMinionSkinReplacementSkillVariant(minionSkinReplacementSkillVariant); } private static void HandleAddition<T1, T2>(SkinDefParams skinDefParams, T1 t1, ref T2 t2) where T1 : ISkillVariantStruct<T2> { if (_isLoaded) { t1.Add(ref t2); } else { t1.AddPending(skinDefParams, t2); } } private static void HandleAddition<T1, T2>(ModelSkinController modelSkinController, T1 t1, ref T2 t2) where T1 : ISkillVariantStruct<T2> { if (_isLoaded) { t1.Add(ref t2); } else { t1.AddPending(modelSkinController, t2); } } private static ref object[] GetSkillVariants(this ref MeshReplacementTemplate meshReplacementTemplate) { return ref SkinAPIInterop.GetSkillVariants(ref meshReplacementTemplate); } private static void SetSkillVariants(this ref MeshReplacementTemplate meshReplacementTemplate, object[] value) { SkinAPIInterop.SetSkillVariants(ref meshReplacementTemplate, value); } private static ref object[] GetSkillVariants(this ref LightReplacementTemplate lightReplacementTemplate) { return ref SkinAPIInterop.GetSkillVariants(ref lightReplacementTemplate); } private static void SetSkillVariants(this ref LightReplacementTemplate lightReplacementTemplate, object[] value) { SkinAPIInterop.SetSkillVariants(ref lightReplacementTemplate, value); } private static ref object[] GetSkillVariants(this ref GhostReplacementTemplate ghostReplacementTemplate) { return ref SkinAPIInterop.GetSkillVariants(ref ghostReplacementTemplate); } private static void SetSkillVariants(this ref GhostReplacementTemplate ghostReplacementTemplate, object[] value) { SkinAPIInterop.SetSkillVariants(ref ghostReplacementTemplate, value); } private static ref object[] GetSkillVariants(this ref MinionSkinTemplate minionSkinTemplate) { return ref SkinAPIInterop.GetSkillVariants(ref minionSkinTemplate); } private static void SetSkillVariants(this ref MinionSkinTemplate minionSkinTemplate, object[] value) { SkinAPIInterop.SetSkillVariants(ref minionSkinTemplate, value); } private static SkinDef GetSkinDef(this RuntimeSkin runtimeSkin) { return SkinAPIInterop.GetSkinDef(runtimeSkin); } private static void SetSkinDef(this RuntimeSkin runtimeSkin, SkinDef skinDef) { SkinAPIInterop.SetSkinDef(runtimeSkin, skinDef); } internal static SkinSkillVariantsDef GetSkinSkillVariantsDef(this SkinDefParams skinDefParams) { if (SkinAPIInterop.GetSkinSkillVariantsDef(skinDefParams) != null) { return SkinAPIInterop.GetSkinSkillVariantsDef(skinDefParams) as SkinSkillVariantsDef; } return null; } internal static void SetSkinSkillVariantsDef(this SkinDefParams skinDefParams, SkinSkillVariantsDef skinSkillVariantsDef) { SkinAPIInterop.SetSkinSkillVariantsDef(skinDefParams, (object)skinSkillVariantsDef); } internal static SkinSkillVariantsDef GetSkinSkillVariantsDef(this ModelSkinController modelSkinController) { if (SkinAPIInterop.GetSkinSkillVariantsDef(modelSkinController) != null) { return SkinAPIInterop.GetSkinSkillVariantsDef(modelSkinController) as SkinSkillVariantsDef; } return null; } internal static void SetSkinSkillVariantsDef(this ModelSkinController modelSkinController, SkinSkillVariantsDef skinSkillVariantsDef) { SkinAPIInterop.SetSkinSkillVariantsDef(modelSkinController, (object)skinSkillVariantsDef); } public static void AddRenderInfoSkillVariant(this SkinDef skinDef, string rendererName, RendererInfoSkillVariant rendererInfoSkillVariant) { GetSkinDefParams(skinDef).AddRenderInfoSkillVariant(rendererName, rendererInfoSkillVariant); } public static void AddRenderInfoSkillVariant(this SkinDefParams skinDefParams, string rendererName, RendererInfoSkillVariant rendererInfoSkillVariant) { SetHooks(); HandleAddition(skinDefParams, rendererInfoSkillVariant, ref GetRendererInfoByName(skinDefParams, rendererName)); } public static void AddRenderInfoSkillVariant(this ModelSkinController modelSkinController, string rendererName, RendererInfoSkillVariant rendererInfoSkillVariant) { SetHooks(); HandleAddition(modelSkinController, rendererInfoSkillVariant, ref GetRendererInfoByName(GetSkinDefParams(modelSkinController.skins[0]), rendererName)); } public static void AddRenderInfoSkillVariant(this SkinDef skinDef, int index, RendererInfoSkillVariant rendererInfoSkillVariant) { GetSkinDefParams(skinDef).AddRenderInfoSkillVariant(index, rendererInfoSkillVariant); } public static void AddRenderInfoSkillVariant(this SkinDefParams skinDefParams, int index, RendererInfoSkillVariant rendererInfoSkillVariant) { SetHooks(); HandleAddition(skinDefParams, rendererInfoSkillVariant, ref skinDefParams.rendererInfos[index]); } public static void AddRenderInfoSkillVariant(this ModelSkinController modelSkinController, int index, RendererInfoSkillVariant rendererInfoSkillVariant) { SetHooks(); HandleAddition(modelSkinController, rendererInfoSkillVariant, ref GetSkinDefParams(modelSkinController.skins[0]).rendererInfos[index]); } public static void AddSkillVariant(this ref RendererInfo rendererInfo, RendererInfoSkillVariant rendererInfoSkillVariant) { SetHooks(); AddItemToObjects(ref rendererInfo.GetSkillVariants(), rendererInfoSkillVariant); } public static void AddMeshReplacementSkillVariant(this SkinDef skinDef, string meshRendererName, MeshReplacementSkillVariant meshReplacementSkillVariant) { GetSkinDefParams(skinDef).AddMeshReplacementSkillVariant(meshRendererName, meshReplacementSkillVariant); } public static void AddMeshReplacementSkillVariant(this SkinDefParams skinDefParams, string meshRendererName, MeshReplacementSkillVariant meshReplacementSkillVariant) { SetHooks(); HandleAddition(skinDefParams, meshReplacementSkillVariant, ref GetMeshReplacementByName(skinDefParams, meshRendererName)); } public static void AddMeshReplacementSkillVariant(this ModelSkinController modelSkinController, string meshRendererName, MeshReplacementSkillVariant meshReplacementSkillVariant) { SetHooks(); HandleAddition(modelSkinController, meshReplacementSkillVariant, ref GetMeshReplacementByName(GetSkinDefParams(modelSkinController.skins[0]), meshRendererName)); } public static void AddMeshReplacementSkillVariant(this SkinDef skinDef, int index, MeshReplacementSkillVariant meshReplacementSkillVariant) { GetSkinDefParams(skinDef).AddMeshReplacementSkillVariant(index, meshReplacementSkillVariant); } public static void AddMeshReplacementSkillVariant(this SkinDefParams skinDefParams, int index, MeshReplacementSkillVariant meshReplacementSkillVariant) { SetHooks(); HandleAddition(skinDefParams, meshReplacementSkillVariant, ref skinDefParams.meshReplacements[index]); } public static void AddMeshReplacementSkillVariant(this ModelSkinController modelSkinController, int index, MeshReplacementSkillVariant meshReplacementSkillVariant) { SetHooks(); HandleAddition(modelSkinController, meshReplacementSkillVariant, ref GetSkinDefParams(modelSkinController.skins[0]).meshReplacements[index]); } public static void AddSkillVariant(this ref MeshReplacement meshReplacement, MeshReplacementSkillVariant meshReplacementSkillVariant) { SetHooks(); AddItemToObjects(ref meshReplacement.GetSkillVariants(), meshReplacementSkillVariant); } public static void AddLightInfoSkillVariant(this SkinDef skinDef, string lightName, LightInfoSkillVariant lightInfoSkillVariant) { GetSkinDefParams(skinDef).AddLightInfoSkillVariant(lightName, lightInfoSkillVariant); } public static void AddLightInfoSkillVariant(this SkinDefParams skinDefParams, string lightName, LightInfoSkillVariant lightInfoSkillVariant) { SetHooks(); HandleAddition(skinDefParams, lightInfoSkillVariant, ref GetLightInfoByName(skinDefParams, lightName)); } public static void AddLightInfoSkillVariant(this ModelSkinController modelSkinController, string lightName, LightInfoSkillVariant lightInfoSkillVariant) { SetHooks(); HandleAddition(modelSkinController, lightInfoSkillVariant, ref GetLightInfoByName(GetSkinDefParams(modelSkinController.skins[0]), lightName)); } public static void AddLightInfoSkillVariant(this SkinDef skinDef, int index, LightInfoSkillVariant lightInfoSkillVariant) { GetSkinDefParams(skinDef).AddLightInfoSkillVariant(index, lightInfoSkillVariant); } public static void AddLightInfoSkillVariant(this SkinDefParams skinDefParams, int index, LightInfoSkillVariant lightInfoSkillVariant) { SetHooks(); HandleAddition(skinDefParams, lightInfoSkillVariant, ref skinDefParams.lightReplacements[index]); } public static void AddLightInfoSkillVariant(this ModelSkinController modelSkinController, int index, LightInfoSkillVariant lightInfoSkillVariant) { SetHooks(); HandleAddition(modelSkinController, lightInfoSkillVariant, ref GetSkinDefParams(modelSkinController.skins[0]).lightReplacements[index]); } public static void AddSkillVariant(this ref LightInfo lightInfo, LightInfoSkillVariant lightInfoSkillVariant) { SetHooks(); AddItemToObjects(ref lightInfo.GetSkillVariants(), lightInfoSkillVariant); } public static void AddProjectileGhostReplacementSkillVariant(this SkinDef skinDef, string projectileName, ProjectileGhostReplacementSkillVariant projectileGhostReplacementSkillVariant) { GetSkinDefParams(skinDef).AddProjectileGhostReplacementSkillVariant(projectileName, projectileGhostReplacementSkillVariant); } public static void AddProjectileGhostReplacementSkillVariant(this SkinDefParams skinDefParams, string projectileName, ProjectileGhostReplacementSkillVariant projectileGhostReplacementSkillVariant) { SetHooks(); HandleAddition(skinDefParams, projectileGhostReplacementSkillVariant, ref GetProjectileGhostReplacementByName(skinDefParams, projectileName)); } public static void AddProjectileGhostReplacementSkillVariant(this ModelSkinController modelSkinController, string projectileName, ProjectileGhostReplacementSkillVariant projectileGhostReplacementSkillVariant) { SetHooks(); HandleAddition(modelSkinController, projectileGhostReplacementSkillVariant, ref GetProjectileGhostReplacementByName(GetSkinDefParams(modelSkinController.skins[0]), projectileName)); } public static void AddProjectileGhostReplacementSkillVariant(this SkinDef skinDef, GameObject projectilePrefab, ProjectileGhostReplacementSkillVariant projectileGhostReplacementSkillVariant) { GetSkinDefParams(skinDef).AddProjectileGhostReplacementSkillVariant(projectilePrefab, projectileGhostReplacementSkillVariant); } public static void AddProjectileGhostReplacementSkillVariant(this SkinDefParams skinDefParams, GameObject projectilePrefab, ProjectileGhostReplacementSkillVariant projectileGhostReplacementSkillVariant) { SetHooks(); HandleAddition(skinDefParams, projectileGhostReplacementSkillVariant, ref GetProjectileGhostReplacementByPrefab(skinDefParams, projectilePrefab)); } public static void AddProjectileGhostReplacementSkillVariant(this ModelSkinController modelSkinController, GameObject projectilePrefab, ProjectileGhostReplacementSkillVariant projectileGhostReplacementSkillVariant) { SetHooks(); HandleAddition(modelSkinController, projectileGhostReplacementSkillVariant, ref GetProjectileGhostReplacementByPrefab(GetSkinDefParams(modelSkinController.skins[0]), projectilePrefab)); } public static void AddProjectileGhostReplacementSkillVariant(this SkinDef skinDef, int index, ProjectileGhostReplacementSkillVariant projectileGhostReplacementSkillVariant) { GetSkinDefParams(skinDef).AddProjectileGhostReplacementSkillVariant(index, projectileGhostReplacementSkillVariant); } public static void AddProjectileGhostReplacementSkillVariant(this SkinDefParams skinDefParams, int index, ProjectileGhostReplacementSkillVariant projectileGhostReplacementSkillVariant) { SetHooks(); HandleAddition(skinDefParams, projectileGhostReplacementSkillVariant, ref skinDefParams.projectileGhostReplacements[index]); } public static void AddProjectileGhostReplacementSkillVariant(this ModelSkinController modelSkinController, int index, ProjectileGhostReplacementSkillVariant projectileGhostReplacementSkillVariant) { SetHooks(); HandleAddition(modelSkinController, projectileGhostReplacementSkillVariant, ref GetSkinDefParams(modelSkinController.skins[0]).projectileGhostReplacements[index]); } public static void AddSkillVariant(this ref ProjectileGhostReplacement projectileGhostReplacement, ProjectileGhostReplacementSkillVariant projectileGhostReplacementSkillVariant) { SetHooks(); AddItemToObjects(ref projectileGhostReplacement.GetSkillVariants(), projectileGhostReplacementSkillVariant); } public static void AddMinionSkinReplacementSkillVariant(this SkinDef skinDef, string minionBodyName, MinionSkinReplacementSkillVariant minionSkinReplacementSkillVariant) { GetSkinDefParams(skinDef).AddMinionSkinReplacementSkillVariant(minionBodyName, minionSkinReplacementSkillVariant); } public static void AddMinionSkinReplacementSkillVariant(this SkinDefParams skinDefParams, string minionBodyName, MinionSkinReplacementSkillVariant minionSkinReplacementSkillVariant) { SetHooks(); HandleAddition(skinDefParams, minionSkinReplacementSkillVariant, ref GetMinionSkinReplacementByName(skinDefParams, minionBodyName)); } public static void AddMinionSkinReplacementSkillVariant(this ModelSkinController modelSkinController, string minionBodyName, MinionSkinReplacementSkillVariant minionSkinReplacementSkillVariant) { SetHooks(); HandleAddition(modelSkinController, minionSkinReplacementSkillVariant, ref GetMinionSkinReplacementByName(GetSkinDefParams(modelSkinController.skins[0]), minionBodyName)); } public static void AddMinionSkinReplacementSkillVariant(this SkinDef skinDef, GameObject minionBodyPrefab, MinionSkinReplacementSkillVariant minionSkinReplacementSkillVariant) { GetSkinDefParams(skinDef).AddMinionSkinReplacementSkillVariant(minionBodyPrefab, minionSkinReplacementSkillVariant); } public static void AddMinionSkinReplacementSkillVariant(this SkinDefParams skinDefParams, GameObject minionBodyPrefab, MinionSkinReplacementSkillVariant minionSkinReplacementSkillVariant) { SetHooks(); HandleAddition(skinDefParams, minionSkinReplacementSkillVariant, ref GetMinionSkinReplacementByPrefab(skinDefParams, minionBodyPrefab)); } public static void AddMinionSkinReplacementSkillVariant(this ModelSkinController modelSkinController, GameObject minionBodyPrefab, MinionSkinReplacementSkillVariant minionSkinReplacementSkillVariant) { SetHooks(); HandleAddition(modelSkinController, minionSkinReplacementSkillVariant, ref GetMinionSkinReplacementByPrefab(GetSkinDefParams(modelSkinController.skins[0]), minionBodyPrefab)); } public static void AddMinionSkinReplacementSkillVariant(this SkinDef skinDef, int index, MinionSkinReplacementSkillVariant minionSkinReplacementSkillVariant) { GetSkinDefParams(skinDef).AddMinionSkinReplacementSkillVariant(index, minionSkinReplacementSkillVariant); } public static void AddMinionSkinReplacementSkillVariant(this SkinDefParams skinDefParams, int index, MinionSkinReplacementSkillVariant minionSkinReplacementSkillVariant) { SetHooks(); HandleAddition(skinDefParams, minionSkinReplacementSkillVariant, ref skinDefParams.minionSkinReplacements[index]); } public static void AddMinionSkinReplacementSkillVariant(this ModelSkinController modelSkinController, int index, MinionSkinReplacementSkillVariant minionSkinReplacementSkillVariant) { SetHooks(); HandleAddition(modelSkinController, minionSkinReplacementSkillVariant, ref GetSkinDefParams(modelSkinController.skins[0]).minionSkinReplacements[index]); } public static void AddSkillVariant(this ref MinionSkinReplacement minionSkinReplacement, MinionSkinReplacementSkillVariant minionSkinReplacementSkillVariant) { SetHooks(); AddItemToObjects(ref minionSkinReplacement.GetSkillVariants(), minionSkinReplacementSkillVariant); } public static ref object[] GetSkillVariants(this ref RendererInfo rendererInfo) { return ref SkinAPIInterop.GetSkillVariants(ref rendererInfo); } public static void SetSkillVariants(this ref RendererInfo rendererInfo, object[] value) { SkinAPIInterop.SetSkillVariants(ref rendererInfo, value); } public static ref object[] GetSkillVariants(this ref MeshReplacement meshReplacement) { return ref SkinAPIInterop.GetSkillVariants(ref meshReplacement); } public static void SetSkillVariants(this ref MeshReplacement meshReplacement, object[] value) { SkinAPIInterop.SetSkillVariants(ref meshReplacement, value); } public static ref object[] GetSkillVariants(this ref LightInfo lightInfo) { return ref SkinAPIInterop.GetSkillVariants(ref lightInfo); } public static void SetSkillVariants(this ref LightInfo lightInfo, object[] value) { SkinAPIInterop.SetSkillVariants(ref lightInfo, value); } public static ref object[] GetSkillVariants(this ref ProjectileGhostReplacement projectileGhostReplacement) { return ref SkinAPIInterop.GetSkillVariants(ref projectileGhostReplacement); } public static void SetSkillVariants(this ref ProjectileGhostReplacement projectileGhostReplacement, object[] value) { SkinAPIInterop.SetSkillVariants(ref projectileGhostReplacement, value); } public static ref object[] GetSkillVariants(this ref MinionSkinReplacement minionSkinReplacement) { return ref SkinAPIInterop.GetSkillVariants(ref minionSkinReplacement); } public static void SetSkillVariants(this ref MinionSkinReplacement minionSkinReplacement, object[] value) { SkinAPIInterop.SetSkillVariants(ref minionSkinReplacement, value); } public static OnSkinApplied GetOnSkinApplied(this SkinDef skinDef) { if ((object)SkinAPIInterop.GetOnSkinApplied(skinDef) != null) { return SkinAPIInterop.GetOnSkinApplied(skinDef) as OnSkinApplied; } return null; } public static void SetOnSkinApplied(this SkinDef skinDef, OnSkinApplied onSkinApplied) { SkinAPIInterop.SetOnSkinApplied(skinDef, (Delegate)onSkinApplied); } } [CreateAssetMenu(menuName = "R2API/SkinsAPI/SkinSkillVariantsDef")] public class SkinSkillVariantsDef : ScriptableObject { internal static List<SkinSkillVariantsDef> pendingSkinSkillVariantsDefs = new List<SkinSkillVariantsDef>(); [Tooltip("SkinDefParams to apply SkillVariants")] public SkinDefParams[] skinDefParameters = Array.Empty<SkinDefParams>(); [Tooltip("Put ModelSkinController from either the body prefab o
plugins/R2API.Skins/R2API.Skins.Interop.dll
Decompiled 3 days agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using Microsoft.CodeAnalysis; using RoR2; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: InternalsVisibleTo("R2API.Skins")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("R2API.Skins.Interop")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+f6a339f2c1be08d270e103e382ff8ef36f532bb6")] [assembly: AssemblyProduct("R2API.Skins.Interop")] [assembly: AssemblyTitle("R2API.Skins.Interop")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace R2API.SkinsAPI.Interop { public static class SkinAPIInterop { public static ref object[] GetSkillVariants(ref RendererInfo rendererInfo) { return ref rendererInfo.r2api_skillVariants; } public static void SetSkillVariants(ref RendererInfo rendererInfo, object[] value) { rendererInfo.r2api_skillVariants = value; } public static ref object[] GetSkillVariants(ref MeshReplacement meshReplacement) { return ref meshReplacement.r2api_skillVariants; } public static void SetSkillVariants(ref MeshReplacement meshReplacement, object[] value) { meshReplacement.r2api_skillVariants = value; } public static ref object[] GetSkillVariants(ref LightInfo lightInfo) { return ref lightInfo.r2api_skillVariants; } public static void SetSkillVariants(ref LightInfo lightInfo, object[] value) { lightInfo.r2api_skillVariants = value; } public static ref object[] GetSkillVariants(ref ProjectileGhostReplacement projectileGhostReplacement) { return ref projectileGhostReplacement.r2api_skillVariants; } public static void SetSkillVariants(ref ProjectileGhostReplacement projectileGhostReplacement, object[] value) { projectileGhostReplacement.r2api_skillVariants = value; } public static ref object[] GetSkillVariants(ref MinionSkinReplacement minionSkinReplacement) { return ref minionSkinReplacement.r2api_skillVariants; } public static void SetSkillVariants(ref MinionSkinReplacement minionSkinReplacement, object[] value) { minionSkinReplacement.r2api_skillVariants = value; } public static ref object[] GetSkillVariants(ref MeshReplacementTemplate meshReplacementTemplate) { return ref meshReplacementTemplate.r2api_skillVariants; } public static void SetSkillVariants(ref MeshReplacementTemplate meshReplacement, object[] value) { meshReplacement.r2api_skillVariants = value; } public static ref object[] GetSkillVariants(ref LightReplacementTemplate lightReplacementTemplate) { return ref lightReplacementTemplate.r2api_skillVariants; } public static void SetSkillVariants(ref LightReplacementTemplate lightReplacementTemplate, object[] value) { lightReplacementTemplate.r2api_skillVariants = value; } public static ref object[] GetSkillVariants(ref GhostReplacementTemplate ghostReplacementTemplate) { return ref ghostReplacementTemplate.r2api_skillVariants; } public static void SetSkillVariants(ref GhostReplacementTemplate ghostReplacementTemplate, object[] value) { ghostReplacementTemplate.r2api_skillVariants = value; } public static ref object[] GetSkillVariants(ref MinionSkinTemplate minionSkinTemplate) { return ref minionSkinTemplate.r2api_skillVariants; } public static void SetSkillVariants(ref MinionSkinTemplate minionSkinTemplate, object[] value) { minionSkinTemplate.r2api_skillVariants = value; } public static SkinDef GetSkinDef(RuntimeSkin runtimeSkin) { return runtimeSkin.r2api_skinDef; } public static void SetSkinDef(RuntimeSkin runtimeSkin, SkinDef value) { runtimeSkin.r2api_skinDef = value; } public static Delegate GetOnSkinApplied(SkinDef skinDef) { return skinDef.r2api_onSkinApplied; } public static void SetOnSkinApplied(SkinDef skinDef, Delegate value) { skinDef.r2api_onSkinApplied = value; } public static object GetSkinSkillVariantsDef(SkinDefParams skinDefParams) { return skinDefParams.r2api_skinSkillVariantsDef; } public static void SetSkinSkillVariantsDef(SkinDefParams skinDefParams, object value) { skinDefParams.r2api_skinSkillVariantsDef = value; } public static object GetSkinSkillVariantsDef(ModelSkinController modelSkinController) { return modelSkinController.r2api_skinSkillVariantsDef; } public static void SetSkinSkillVariantsDef(ModelSkinController modelSkinController, object value) { modelSkinController.r2api_skinSkillVariantsDef = value; } } }
patchers/R2API.Skins/R2API.Skins.Patcher.dll
Decompiled 3 days agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using Microsoft.CodeAnalysis; using Mono.Cecil; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("R2API.Skins.Patcher")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+f6a339f2c1be08d270e103e382ff8ef36f532bb6")] [assembly: AssemblyProduct("R2API.Skins.Patcher")] [assembly: AssemblyTitle("R2API.Skins.Patcher")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace R2API { internal static class SkinsPatcher { public const string skillVariants = "r2api_skillVariants"; public const string skinSkillVariantsDef = "r2api_skinSkillVariantsDef"; public static IEnumerable<string> TargetDLLs { get { yield return "RoR2.dll"; } } public static void Patch(AssemblyDefinition assembly) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Expected O, but got Unknown //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Expected O, but got Unknown //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Expected O, but got Unknown //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Expected O, but got Unknown //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Expected O, but got Unknown //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Expected O, but got Unknown //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Expected O, but got Unknown //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Expected O, but got Unknown //IL_02ec: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Expected O, but got Unknown //IL_02ac: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Expected O, but got Unknown //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_0335: Expected O, but got Unknown TypeDefinition type = assembly.MainModule.GetType("RoR2.CharacterModel/RendererInfo"); if (type != null) { type.Fields.Add(new FieldDefinition("r2api_skillVariants", (FieldAttributes)6, assembly.MainModule.ImportReference(typeof(object[])))); } TypeDefinition type2 = assembly.MainModule.GetType("RoR2.SkinDefParams/MeshReplacement"); if (type2 != null) { type2.Fields.Add(new FieldDefinition("r2api_skillVariants", (FieldAttributes)6, assembly.MainModule.ImportReference(typeof(object[])))); } TypeDefinition type3 = assembly.MainModule.GetType("RoR2.CharacterModel/LightInfo"); if (type3 != null) { type3.Fields.Add(new FieldDefinition("r2api_skillVariants", (FieldAttributes)6, assembly.MainModule.ImportReference(typeof(object[])))); } TypeDefinition type4 = assembly.MainModule.GetType("RoR2.SkinDefParams/ProjectileGhostReplacement"); if (type4 != null) { type4.Fields.Add(new FieldDefinition("r2api_skillVariants", (FieldAttributes)6, assembly.MainModule.ImportReference(typeof(object[])))); } TypeDefinition type5 = assembly.MainModule.GetType("RoR2.SkinDefParams/MinionSkinReplacement"); if (type5 != null) { type5.Fields.Add(new FieldDefinition("r2api_skillVariants", (FieldAttributes)6, assembly.MainModule.ImportReference(typeof(object[])))); } TypeDefinition type6 = assembly.MainModule.GetType("RoR2.SkinDef/MeshReplacementTemplate"); if (type6 != null) { type6.Fields.Add(new FieldDefinition("r2api_skillVariants", (FieldAttributes)6, assembly.MainModule.ImportReference(typeof(object[])))); } TypeDefinition type7 = assembly.MainModule.GetType("RoR2.SkinDef/LightReplacementTemplate"); if (type7 != null) { type7.Fields.Add(new FieldDefinition("r2api_skillVariants", (FieldAttributes)6, assembly.MainModule.ImportReference(typeof(object[])))); } TypeDefinition type8 = assembly.MainModule.GetType("RoR2.SkinDef/GhostReplacementTemplate"); if (type8 != null) { type8.Fields.Add(new FieldDefinition("r2api_skillVariants", (FieldAttributes)6, assembly.MainModule.ImportReference(typeof(object[])))); } TypeDefinition type9 = assembly.MainModule.GetType("RoR2.SkinDef/MinionSkinTemplate"); if (type9 != null) { type9.Fields.Add(new FieldDefinition("r2api_skillVariants", (FieldAttributes)6, assembly.MainModule.ImportReference(typeof(object[])))); } TypeDefinition type10 = assembly.MainModule.GetType("RoR2.SkinDef"); if (type10 != null) { type10.Fields.Add(new FieldDefinition("r2api_onSkinApplied", (FieldAttributes)6, assembly.MainModule.ImportReference(typeof(Delegate)))); TypeDefinition type11 = assembly.MainModule.GetType("RoR2.SkinDef/RuntimeSkin"); if (type11 != null) { type11.Fields.Add(new FieldDefinition("r2api_skinDef", (FieldAttributes)6, assembly.MainModule.ImportReference((TypeReference)(object)type10))); } } TypeDefinition type12 = assembly.MainModule.GetType("RoR2.SkinDefParams"); if (type12 != null) { type12.Fields.Add(new FieldDefinition("r2api_skinSkillVariantsDef", (FieldAttributes)6, assembly.MainModule.ImportReference(typeof(object)))); } TypeDefinition type13 = assembly.MainModule.GetType("RoR2.ModelSkinController"); if (type13 != null) { type13.Fields.Add(new FieldDefinition("r2api_skinSkillVariantsDef", (FieldAttributes)6, assembly.MainModule.ImportReference(typeof(object)))); } } } }