using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using MonoMod.RuntimeDetour.HookGen; using RoR2; using RoR2.ContentManagement; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] namespace NauticalNonsense; [BepInPlugin("com.Gorble.NauticalNonsense", "Nautical Nonsense", "0.7.1")] public class NauticalNonsensePlugin : BaseUnityPlugin { private class FieldException : Exception { public FieldException(string message, Exception innerException) : base(message, innerException) { } } private class ElementException : Exception { public int Index { get; } public ElementException(int index, string message) : base(message) { Index = index; } } private static AssetBundle assetBundle; private static readonly List materialsWithRoRShader = new List(); internal static NauticalNonsensePlugin Instance { get; private set; } internal static ManualLogSource InstanceLogger { get { NauticalNonsensePlugin instance = Instance; if (instance == null) { return null; } return ((BaseUnityPlugin)instance).Logger; } } private void Start() { Instance = this; using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("NauticalNonsense.gorblenauticalnonsense")) { assetBundle = AssetBundle.LoadFromStream(stream); } ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)BodyCatalogInit); HookEndpointManager.Add((MethodBase)typeof(Language).GetMethod("LoadStrings"), (Delegate)new Action, Language>(LanguageLoadStrings)); ReplaceShaders(); } private static void ReplaceShaders() { LoadMaterialsWithReplacedShader("RoR2/Base/Shaders/HGStandard.shader", "Assets/Resources/Loader/Prawnterial.mat", "Assets/Resources/Loader/Anomaloterial.mat", "Assets/Resources/Mult/slugterial.mat", "Assets/Resources/Rex/Spiderterial.mat", "Assets/Resources/Rex/Anemoterial.mat", "Assets/Resources/Rex/Orbterial.mat", "Assets/Resources/Merc/Merchurchinterial.mat", "Assets/Resources/Glass 1.mat", "Assets/Resources/Acrid/Lawrenterial.mat", "Assets/Resources/Cap/Capterial.mat", "Assets/Resources/Artisuider/Squiterial.mat", "Assets/Resources/Gamblers/grigorterial.mat", "Assets/Resources/Gamblers/baterial.mat", "Assets/Resources/Gamblers/Securiterial.mat", "Assets/Resources/Gamblers/SecuHandTerial.mat"); } private static void LoadMaterialsWithReplacedShader(string shaderPath, params string[] materialPaths) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Shader shader = Addressables.LoadAssetAsync((object)shaderPath).WaitForCompletion(); foreach (string text in materialPaths) { Material val = assetBundle.LoadAsset(text); val.shader = shader; materialsWithRoRShader.Add(val); } } private static void LanguageLoadStrings(Action orig, Language self) { orig(self); self.SetStringByToken("GORBLE_SKIN_ANOMALOCARISSKINDEF_NAME", "Anomalous"); self.SetStringByToken("GORBLE_SKIN_SLUGCRABSKIN_NAME", "SLU-G"); self.SetStringByToken("GORBLE_SKIN_SPIDERCRABREXSKINDEF_NAME", "Aqueous"); self.SetStringByToken("GORBLE_SKIN_MURCHINARYSKINDEF_NAME", "Spiked"); self.SetStringByToken("GORBLE_SKIN_LOBCRIDSKINDEF_NAME", "Fugued"); self.SetStringByToken("GORBLE_SKIN_CAPTANKSKINDEF_NAME", "Puffed"); self.SetStringByToken("GORBLE_SKIN_ARTISQUIDERSKINDEF_NAME", "Alien"); self.SetStringByToken("GORBLE_SKIN_GRIGORSKINDEF_NAME", "True Gambler"); self.SetStringByToken("GORBLE_SKIN_SECURITYSKIN_NAME", "Mall Cop"); } private static void BodyCatalogInit() { AddLoaderBodyAnomalocarisSkinDefSkin(); AddToolbotBodySlugcrabSkinSkin(); AddTreebotBodySpidercrabRexSkinDefSkin(); AddMercBodyMurchinarySkinDefSkin(); AddCrocoBodyLobcridSkinDefSkin(); AddCaptainBodyCaptankSkinDefSkin(); AddMageBodyArtisquiderSkinDefSkin(); AddFalseSonBodyGrigorSkinDefSkin(); AddCaptainBodySecuritySkinSkin(); } private static void AddLoaderBodyAnomalocarisSkinDefSkin() { string text = "LoaderBody"; string text2 = "AnomalocarisSkinDef"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren(true); gameObject.GetComponentsInChildren(true); SkinDef skin = ScriptableObject.CreateInstance(); SkinDefParams skinParams = ScriptableObject.CreateInstance(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Icons\\AnomalocarisSkinDefIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "GORBLE_SKIN_ANOMALOCARISSKINDEF_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[2] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0), ThrowIfOutOfBounds(1, "Index 2 is out of bounds of skins array", skinController.skins, 2) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = ((IEnumerable)ContentManager.unlockableDefs).FirstOrDefault((Func)((UnlockableDef def) => def.cachedName == "Anomalocaris")); }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[2] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Loader/Prawnterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull(0, "There is no renderer with the name \"LoaderMechMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "LoaderMechMesh"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Loader/Anomaloterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull(1, "There is no renderer with the name \"PilotFemaleMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "PilotFemaleMesh"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: 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_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_011e: 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) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[3] { new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Prawn.mesh"), renderer = ThrowIfNull(0, "There is no renderer with the name \"LoaderMechMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "LoaderMechMesh"))) }, new MeshReplacement { mesh = null, renderer = ThrowIfNull(1, "There is no renderer with the name \"PilotFemaleFoldedOverJumpsuit\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "PilotFemaleFoldedOverJumpsuit"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Amodelocaris.mesh"), renderer = ThrowIfNull(2, "There is no renderer with the name \"PilotFemaleMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "PilotFemaleMesh"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static void AddToolbotBodySlugcrabSkinSkin() { string text = "ToolbotBody"; string text2 = "SlugcrabSkin"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren(true); gameObject.GetComponentsInChildren(true); SkinDef skin = ScriptableObject.CreateInstance(); SkinDefParams skinParams = ScriptableObject.CreateInstance(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Icons\\SlugcrabSkinIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "GORBLE_SKIN_SLUGCRABSKIN_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = null; }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[1] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Mult/slugterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = ThrowIfNull(0, "There is no renderer with the name \"ToolbotMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "ToolbotMesh"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[2] { new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\SlugbotMesh.mesh"), renderer = ThrowIfNull(0, "There is no renderer with the name \"ToolbotMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "ToolbotMesh"))) }, new MeshReplacement { mesh = null, renderer = ThrowIfNull(1, "There is no renderer with the name \"RebarMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "RebarMesh"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static void AddTreebotBodySpidercrabRexSkinDefSkin() { string text = "TreebotBody"; string text2 = "SpidercrabRexSkinDef"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren(true); gameObject.GetComponentsInChildren(true); SkinDef skin = ScriptableObject.CreateInstance(); SkinDefParams skinParams = ScriptableObject.CreateInstance(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Icons\\SpidercrabRexSkinDefIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "GORBLE_SKIN_SPIDERCRABREXSKINDEF_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = ((IEnumerable)ContentManager.unlockableDefs).FirstOrDefault((Func)((UnlockableDef def) => def.cachedName == "Sea Tingy")); }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[3] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Rex/Spiderterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = ThrowIfNull(0, "There is no renderer with the name \"TreebotBotMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "TreebotBotMesh"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Rex/Anemoterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = ThrowIfNull(1, "There is no renderer with the name \"TreebotFlowerMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "TreebotFlowerMesh"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Rex/Orbterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = ThrowIfNull(2, "There is no renderer with the name \"TreebotRootMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "TreebotRootMesh"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[4] { new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Crab.mesh"), renderer = ThrowIfNull(0, "There is no renderer with the name \"TreebotBotMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "TreebotBotMesh"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Anemone.mesh"), renderer = ThrowIfNull(1, "There is no renderer with the name \"TreebotFlowerMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "TreebotFlowerMesh"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Orb.mesh"), renderer = ThrowIfNull(2, "There is no renderer with the name \"TreebotRootMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "TreebotRootMesh"))) }, new MeshReplacement { mesh = null, renderer = ThrowIfNull(3, "There is no renderer with the name \"TreebotLeafletMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "TreebotLeafletMesh"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static void AddMercBodyMurchinarySkinDefSkin() { string text = "MercBody"; string text2 = "MurchinarySkinDef"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren(true); gameObject.GetComponentsInChildren(true); SkinDef skin = ScriptableObject.CreateInstance(); SkinDefParams skinParams = ScriptableObject.CreateInstance(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Icons\\MurchinarySkinDefIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "GORBLE_SKIN_MURCHINARYSKINDEF_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = ((IEnumerable)ContentManager.unlockableDefs).FirstOrDefault((Func)((UnlockableDef def) => def.cachedName == "Murchinary")); }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[2] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Merc/Merchurchinterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = ThrowIfNull(0, "There is no renderer with the name \"MercMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "MercMesh"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Glass 1.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = ThrowIfNull(1, "There is no renderer with the name \"MercSwordMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "MercSwordMesh"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[2] { new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Mech.mesh"), renderer = ThrowIfNull(0, "There is no renderer with the name \"MercMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "MercMesh"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Glass01.mesh"), renderer = ThrowIfNull(1, "There is no renderer with the name \"MercSwordMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "MercSwordMesh"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static void AddCrocoBodyLobcridSkinDefSkin() { string text = "CrocoBody"; string text2 = "LobcridSkinDef"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren(true); gameObject.GetComponentsInChildren(true); SkinDef skin = ScriptableObject.CreateInstance(); SkinDefParams skinParams = ScriptableObject.CreateInstance(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Icons\\LobcridSkinDefIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "GORBLE_SKIN_LOBCRIDSKINDEF_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = ((IEnumerable)ContentManager.unlockableDefs).FirstOrDefault((Func)((UnlockableDef def) => def.cachedName == "Lober")); }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[2] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Acrid/Lawrenterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = ThrowIfNull(0, "There is no renderer with the name \"CrocoMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CrocoMesh"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Glass 1.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = ThrowIfNull(1, "There is no renderer with the name \"CrocoSpineMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CrocoSpineMesh"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[2] { new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Lober.mesh"), renderer = ThrowIfNull(0, "There is no renderer with the name \"CrocoMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CrocoMesh"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Glass.mesh"), renderer = ThrowIfNull(1, "There is no renderer with the name \"CrocoSpineMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CrocoSpineMesh"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static void AddCaptainBodyCaptankSkinDefSkin() { string text = "CaptainBody"; string text2 = "CaptankSkinDef"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren(true); gameObject.GetComponentsInChildren(true); SkinDef skin = ScriptableObject.CreateInstance(); SkinDefParams skinParams = ScriptableObject.CreateInstance(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Icons\\CaptankSkinDefIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "GORBLE_SKIN_CAPTANKSKINDEF_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = ((IEnumerable)ContentManager.unlockableDefs).FirstOrDefault((Func)((UnlockableDef def) => def.cachedName == "Captank")); }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[3] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Cap/Capterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = ThrowIfNull(0, "There is no renderer with the name \"Captain\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "Captain"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Glass 1.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = ThrowIfNull(1, "There is no renderer with the name \"CaptainChestArmor\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainChestArmor"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Cap/Capterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = ThrowIfNull(2, "There is no renderer with the name \"CaptainCoat\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainCoat"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: 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_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_011e: 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_0128: 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_0181: 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) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[7] { new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Body.mesh"), renderer = ThrowIfNull(0, "There is no renderer with the name \"Captain\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "Captain"))) }, new MeshReplacement { mesh = null, renderer = ThrowIfNull(1, "There is no renderer with the name \"CaptainHat\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainHat"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\GlassChestHat.mesh"), renderer = ThrowIfNull(2, "There is no renderer with the name \"CaptainChestArmor\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainChestArmor"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\CapCoat.mesh"), renderer = ThrowIfNull(3, "There is no renderer with the name \"CaptainCoat\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainCoat"))) }, new MeshReplacement { mesh = null, renderer = ThrowIfNull(4, "There is no renderer with the name \"CaptainGunArm\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainGunArm"))) }, new MeshReplacement { mesh = null, renderer = ThrowIfNull(5, "There is no renderer with the name \"CaptainHead\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainHead"))) }, new MeshReplacement { mesh = null, renderer = ThrowIfNull(6, "There is no renderer with the name \"CaptainUndercoat\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainUndercoat"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static void AddMageBodyArtisquiderSkinDefSkin() { string text = "MageBody"; string text2 = "ArtisquiderSkinDef"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren(true); gameObject.GetComponentsInChildren(true); SkinDef skin = ScriptableObject.CreateInstance(); SkinDefParams skinParams = ScriptableObject.CreateInstance(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Icons\\ArtisquiderSkinDefIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "GORBLE_SKIN_ARTISQUIDERSKINDEF_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = ((IEnumerable)ContentManager.unlockableDefs).FirstOrDefault((Func)((UnlockableDef def) => def.cachedName == "Artisquid")); }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[2] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Glass 1.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = ThrowIfNull(0, "There is no renderer with the name \"MageCapeMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "MageCapeMesh"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Artisuider/Squiterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)0, ignoreOverlays = false, renderer = ThrowIfNull(1, "There is no renderer with the name \"MageMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "MageMesh"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[2] { new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Icosphere.mesh"), renderer = ThrowIfNull(0, "There is no renderer with the name \"MageCapeMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "MageCapeMesh"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Squibd.mesh"), renderer = ThrowIfNull(1, "There is no renderer with the name \"MageMesh\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "MageMesh"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static void AddFalseSonBodyGrigorSkinDefSkin() { if (!((BaseUnityPlugin)Instance).Config.Bind("GrigorSkinDef", "Enabled", false, (ConfigDescription)null).Value) { return; } string text = "FalseSonBody"; string text2 = "GrigorSkinDef"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren(true); gameObject.GetComponentsInChildren(true); SkinDef skin = ScriptableObject.CreateInstance(); SkinDefParams skinParams = ScriptableObject.CreateInstance(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Icons\\GrigorSkinDefIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "GORBLE_SKIN_GRIGORSKINDEF_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = ((IEnumerable)ContentManager.unlockableDefs).FirstOrDefault((Func)((UnlockableDef def) => def.cachedName == "True Gambler")); }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[2] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Gamblers/grigorterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull(0, "There is no renderer with the name \"FalseSon_Body\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "FalseSon_Body"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Gamblers/baterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull(1, "There is no renderer with the name \"L_FalseSon_Weapon\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "L_FalseSon_Weapon"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: 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_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_011e: 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) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[3] { new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Grigorstiff.mesh"), renderer = ThrowIfNull(0, "There is no renderer with the name \"FalseSon_Body\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "FalseSon_Body"))) }, new MeshReplacement { mesh = null, renderer = ThrowIfNull(1, "There is no renderer with the name \"FalseSon_Cloth\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "FalseSon_Cloth"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\BaseballBatstiff.mesh"), renderer = ThrowIfNull(2, "There is no renderer with the name \"L_FalseSon_Weapon\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "L_FalseSon_Weapon"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static void AddCaptainBodySecuritySkinSkin() { if (!((BaseUnityPlugin)Instance).Config.Bind("SecuritySkin", "Enabled", false, (ConfigDescription)null).Value) { return; } string text = "CaptainBody"; string text2 = "SecuritySkin"; try { GameObject val = BodyCatalog.FindBodyPrefab(text); if (!Object.op_Implicit((Object)(object)val)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin because \"" + text + "\" doesn't exist")); return; } ModelLocator component = val.GetComponent(); if (!Object.op_Implicit((Object)(object)component)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelLocator\" component")); return; } GameObject gameObject = ((Component)component.modelTransform).gameObject; ModelSkinController skinController = (Object.op_Implicit((Object)(object)gameObject) ? gameObject.GetComponent() : null); if (!Object.op_Implicit((Object)(object)skinController)) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\" because it doesn't have \"ModelSkinController\" component")); return; } Renderer[] renderers = gameObject.GetComponentsInChildren(true); gameObject.GetComponentsInChildren(true); SkinDef skin = ScriptableObject.CreateInstance(); SkinDefParams skinParams = ScriptableObject.CreateInstance(); skin.skinDefParams = skinParams; TryCatchThrow("Icon", delegate { skin.icon = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Icons\\SecuritySkinIcon.png"); }); ((Object)skin).name = text2; skin.nameToken = "GORBLE_SKIN_SECURITYSKIN_NAME"; skin.rootObject = gameObject; TryCatchThrow("Base Skins", delegate { skin.baseSkins = (SkinDef[])(object)new SkinDef[1] { ThrowIfOutOfBounds(0, "Index 0 is out of bounds of skins array", skinController.skins, 0) }; }); TryCatchThrow("Unlockable Name", delegate { skin.unlockableDef = ((IEnumerable)ContentManager.unlockableDefs).FirstOrDefault((Func)((UnlockableDef def) => def.cachedName == "Paul Blart")); }); TryCatchThrow("Game Object Activations", delegate { skinParams.gameObjectActivations = Array.Empty(); }); TryCatchThrow("Renderer Infos", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) skinParams.rendererInfos = (RendererInfo[])(object)new RendererInfo[3] { new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Gamblers/Securiterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull(0, "There is no renderer with the name \"Captain\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "Captain"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Gamblers/SecuHandTerial.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull(1, "There is no renderer with the name \"CaptainGunArm\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainGunArm"))) }, new RendererInfo { defaultMaterial = assetBundle.LoadAsset("Assets/Resources/Gamblers/Securiterial.mat"), defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false, renderer = ThrowIfNull(2, "There is no renderer with the name \"CaptainHead\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainHead"))) } }; }); TryCatchThrow("Mesh Replacements", delegate { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) skinParams.meshReplacements = (MeshReplacement[])(object)new MeshReplacement[7] { new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Security.mesh"), renderer = ThrowIfNull(0, "There is no renderer with the name \"Captain\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "Captain"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Security_Hands.mesh"), renderer = ThrowIfNull(1, "There is no renderer with the name \"CaptainGunArm\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainGunArm"))) }, new MeshReplacement { mesh = assetBundle.LoadAsset("Assets\\SkinMods\\NauticalNonsense\\Meshes\\Security_Head.mesh"), renderer = ThrowIfNull(2, "There is no renderer with the name \"CaptainHead\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainHead"))) }, new MeshReplacement { mesh = null, renderer = ThrowIfNull(3, "There is no renderer with the name \"CaptainChestArmor\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainChestArmor"))) }, new MeshReplacement { mesh = null, renderer = ThrowIfNull(4, "There is no renderer with the name \"CaptainCoat\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainCoat"))) }, new MeshReplacement { mesh = null, renderer = ThrowIfNull(5, "There is no renderer with the name \"CaptainHat\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainHat"))) }, new MeshReplacement { mesh = null, renderer = ThrowIfNull(6, "There is no renderer with the name \"CaptainUndercoat\"", ((IEnumerable)renderers).FirstOrDefault((Func)((Renderer r) => ((Object)r).name == "CaptainUndercoat"))) } }; }); TryCatchThrow("Light Infos", delegate { skinParams.lightReplacements = (LightInfo[])(object)new LightInfo[0]; }); TryCatchThrow("Minion Skin Replacements", delegate { skinParams.minionSkinReplacements = Array.Empty(); }); TryCatchThrow("Projectile Ghost Replacements", delegate { skinParams.projectileGhostReplacements = Array.Empty(); }); Array.Resize(ref skinController.skins, skinController.skins.Length + 1); skinController.skins[skinController.skins.Length - 1] = skin; } catch (FieldException ex) { if (ex.InnerException is ElementException ex2) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)$"Field causing issue: {ex.Message}, element: {ex2.Index}"); InstanceLogger.LogWarning((object)ex2.Message); InstanceLogger.LogError((object)ex.InnerException); } else { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogWarning((object)("Field causing issue: " + ex.Message)); InstanceLogger.LogError((object)ex.InnerException); } } catch (Exception ex3) { InstanceLogger.LogWarning((object)("Failed to add \"" + text2 + "\" skin to \"" + text + "\"")); InstanceLogger.LogError((object)ex3); } } private static T ThrowIfEquals(int index, string message, T value, T expected) where T : Enum { if (value.Equals(expected)) { throw new ElementException(index, message); } return value; } private static T ThrowIfOutOfBounds(int index, string message, T[] array, int elementIndex) where T : class { if (array == null || array.Length <= elementIndex) { throw new ElementException(index, message); } return array[elementIndex]; } private static T ThrowIfNull(int index, string message, T value) where T : class { if (value == null) { throw new ElementException(index, message); } return value; } private static void TryCatchThrow(string message, Action action) { try { action?.Invoke(); } catch (Exception innerException) { throw new FieldException(message, innerException); } } private static void TryAddComponent(GameObject obj) where T : Component { if (Object.op_Implicit((Object)(object)obj) && !Object.op_Implicit((Object)(object)obj.GetComponent())) { obj.AddComponent(); } } }