Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of balrond furRandomizer v1.0.7
plugins/BalrondFurRandomizer.dll
Decompiled 2 weeks agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("ProjectAshlands")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ProjectAshlands")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("f405ea1c-ac25-47a3-9aa2-a8f56c14bfd6")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace BalrondFurRandomizer; public class FxReplacment { private List<GameObject> allPrefabs; private string projectName = "[BalrondFurRandomizer]"; public void setInstance(List<GameObject> gameObjects) { allPrefabs = gameObjects; } public void ReplaceOnObject(GameObject gameObject) { if ((Object)(object)gameObject == (Object)null) { return; } SpawnArea component = gameObject.GetComponent<SpawnArea>(); if ((Object)(object)component != (Object)null) { EffectList spawnEffects = component.m_spawnEffects; if (spawnEffects != null) { findEffectsAndChange(spawnEffects.m_effectPrefabs); } } Destructible component2 = gameObject.GetComponent<Destructible>(); if ((Object)(object)component2 != (Object)null) { EffectList hitEffect = component2.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs); } EffectList destroyedEffect = component2.m_destroyedEffect; if (destroyedEffect != null) { findEffectsAndChange(destroyedEffect.m_effectPrefabs); } } Projectile component3 = gameObject.GetComponent<Projectile>(); if ((Object)(object)component3 != (Object)null) { EffectList hitEffects = component3.m_hitEffects; if (hitEffects != null) { findEffectsAndChange(hitEffects.m_effectPrefabs); } EffectList hitWaterEffects = component3.m_hitWaterEffects; if (hitWaterEffects != null) { findEffectsAndChange(hitWaterEffects.m_effectPrefabs); } EffectList spawnOnHitEffects = component3.m_spawnOnHitEffects; if (spawnOnHitEffects != null) { findEffectsAndChange(spawnOnHitEffects.m_effectPrefabs); } } } public void ReplaceOnVegetation(GameObject gameObject) { Pickable component = gameObject.GetComponent<Pickable>(); if ((Object)(object)component != (Object)null) { fixPlant(component); } Destructible component2 = gameObject.GetComponent<Destructible>(); if ((Object)(object)component2 != (Object)null) { fixPDestructable(component2); } MineRock5 component3 = gameObject.GetComponent<MineRock5>(); if ((Object)(object)component3 != (Object)null) { fixMineRock5(component3); } MineRock component4 = gameObject.GetComponent<MineRock>(); if ((Object)(object)component4 != (Object)null) { fixMineRock(component4); } } private void fixPlant(Pickable pickable) { EffectList pickEffector = pickable.m_pickEffector; if (pickEffector != null) { findEffectsAndChange(pickEffector.m_effectPrefabs); } } private void fixPDestructable(Destructible minerock5) { EffectList hitEffect = minerock5.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs); } EffectList destroyedEffect = minerock5.m_destroyedEffect; if (destroyedEffect != null) { findEffectsAndChange(destroyedEffect.m_effectPrefabs); } } private void fixMineRock5(MineRock5 minerock5) { EffectList hitEffect = minerock5.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs); } EffectList destroyedEffect = minerock5.m_destroyedEffect; if (destroyedEffect != null) { findEffectsAndChange(destroyedEffect.m_effectPrefabs); } } private void fixMineRock(MineRock minerock5) { EffectList hitEffect = minerock5.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs); } EffectList destroyedEffect = minerock5.m_destroyedEffect; if (destroyedEffect != null) { findEffectsAndChange(destroyedEffect.m_effectPrefabs); } } public void ReplaceOnMonster(GameObject gameObject) { if ((Object)(object)gameObject == (Object)null) { Debug.LogWarning((object)(projectName + ":: GameObject not found")); return; } Humanoid component = gameObject.GetComponent<Humanoid>(); if ((Object)(object)component == (Object)null) { Debug.LogWarning((object)(projectName + ":: GameObject not found")); return; } EffectList dropEffects = component.m_dropEffects; if (dropEffects != null) { findEffectsAndChange(dropEffects.m_effectPrefabs); } EffectList backstabHitEffects = ((Character)component).m_backstabHitEffects; if (backstabHitEffects != null) { findEffectsAndChange(backstabHitEffects.m_effectPrefabs); } EffectList consumeItemEffects = component.m_consumeItemEffects; if (consumeItemEffects != null) { findEffectsAndChange(consumeItemEffects.m_effectPrefabs); } EffectList critHitEffects = ((Character)component).m_critHitEffects; if (critHitEffects != null) { findEffectsAndChange(critHitEffects.m_effectPrefabs); } EffectList deathEffects = ((Character)component).m_deathEffects; if (deathEffects != null) { findEffectsAndChange(deathEffects.m_effectPrefabs); } EffectList hitEffects = ((Character)component).m_hitEffects; if (hitEffects != null) { findEffectsAndChange(hitEffects.m_effectPrefabs); } EffectList jumpEffects = ((Character)component).m_jumpEffects; if (jumpEffects != null) { findEffectsAndChange(jumpEffects.m_effectPrefabs); } EffectList perfectBlockEffect = component.m_perfectBlockEffect; if (perfectBlockEffect != null) { findEffectsAndChange(perfectBlockEffect.m_effectPrefabs); } EffectList pickupEffects = component.m_pickupEffects; if (pickupEffects != null) { findEffectsAndChange(pickupEffects.m_effectPrefabs); } EffectList slideEffects = ((Character)component).m_slideEffects; if (slideEffects != null) { findEffectsAndChange(slideEffects.m_effectPrefabs); } EffectList tarEffects = ((Character)component).m_tarEffects; if (tarEffects != null) { findEffectsAndChange(tarEffects.m_effectPrefabs); } EffectList waterEffects = ((Character)component).m_waterEffects; if (waterEffects != null) { findEffectsAndChange(waterEffects.m_effectPrefabs); } FootStep component2 = gameObject.GetComponent<FootStep>(); if (!((Object)(object)component2 != (Object)null)) { return; } List<StepEffect> effects = component2.m_effects; foreach (StepEffect item in effects) { GameObject[] effectPrefabs = item.m_effectPrefabs; List<GameObject> list = new List<GameObject>(); list.AddRange(effectPrefabs); for (int i = 0; i < list.Count; i++) { if ((Object)(object)list[i] != (Object)null) { string name = ((Object)list[i]).name; GameObject val = allPrefabs.Find((GameObject x) => ((Object)x).name == name); if (!((Object)(object)val == (Object)null)) { list[i] = val; } } } } } public void ReplaceOnItem(GameObject gameObject) { if ((Object)(object)gameObject == (Object)null) { return; } ItemDrop component = gameObject.GetComponent<ItemDrop>(); if (!((Object)(object)component == (Object)null)) { EffectList hitEffect = component.m_itemData.m_shared.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs); } EffectList hitTerrainEffect = component.m_itemData.m_shared.m_hitTerrainEffect; if (hitTerrainEffect != null) { findEffectsAndChange(hitTerrainEffect.m_effectPrefabs); } EffectList holdStartEffect = component.m_itemData.m_shared.m_holdStartEffect; if (holdStartEffect != null) { findEffectsAndChange(holdStartEffect.m_effectPrefabs); } EffectList trailStartEffect = component.m_itemData.m_shared.m_trailStartEffect; if (trailStartEffect != null) { findEffectsAndChange(trailStartEffect.m_effectPrefabs); } EffectList blockEffect = component.m_itemData.m_shared.m_blockEffect; if (blockEffect != null) { findEffectsAndChange(blockEffect.m_effectPrefabs); } } } public void ReplaceFxOnPiece(GameObject gameObject) { if ((Object)(object)gameObject == (Object)null) { return; } Piece component = gameObject.GetComponent<Piece>(); if ((Object)(object)component != (Object)null) { EffectList placeEffect = component.m_placeEffect; if (placeEffect != null) { findEffectsAndChange(placeEffect.m_effectPrefabs); } } WearNTear component2 = gameObject.GetComponent<WearNTear>(); if ((Object)(object)component2 != (Object)null) { EffectList hitEffect = component2.m_hitEffect; if (hitEffect != null) { findEffectsAndChange(hitEffect.m_effectPrefabs); } } } private void findEffectsAndChange(EffectData[] effects) { if (effects == null || effects.Length == 0) { return; } foreach (EffectData val in effects) { if ((Object)(object)val.m_prefab != (Object)null) { string name = ((Object)val.m_prefab).name; GameObject val2 = allPrefabs.Find((GameObject x) => ((Object)x).name == name); if (!((Object)(object)val2 == (Object)null)) { val.m_prefab = val2; } } } } } public class ShaderReplacment { public static List<GameObject> prefabsToReplaceShader = new List<GameObject>(); public static List<Material> materialsInPrefabs = new List<Material>(); public string[] shaderlist = new string[49] { "Custom/AlphaParticle", "Custom/Blob", "Custom/Bonemass", "Custom/Clouds", "Custom/Creature", "Custom/Decal", "Custom/Distortion", "Custom/Flow", "Custom/FlowOpaque", "Custom/Grass", "Custom/GuiScroll", "Custom/Heightmap", "Custom/icon", "Custom/InteriorSide", "Custom/LitGui", "Custom/LitParticles", "Custom/mapshader", "Custom/ParticleDecal", "Custom/Piece", "Custom/Player", "Custom/Rug", "Custom/ShadowBlob", "Custom/SkyboxProcedural", "Custom/SkyObject", "Custom/StaticRock", "Custom/Tar", "Custom/Trilinearmap", "Custom/UI/BGBlur", "Custom/Vegetation", "Custom/Water", "Custom/WaterBottom", "Custom/WaterMask", "Custom/Yggdrasil", "Custom/Yggdrasil/root", "Hidden/BlitCopyHDRTonemap", "Hidden/Dof/DepthOfFieldHdr", "Hidden/Dof/DX11Dof", "Hidden/Internal-Loading", "Hidden/Internal-UIRDefaultWorld", "Hidden/SimpleClear", "Hidden/SunShaftsComposite", "Lux Lit Particles/ Bumped", "Lux Lit Particles/ Tess Bumped", "Particles/Standard Surface2", "Particles/Standard Unlit2", "Standard TwoSided", "ToonDeferredShading2017", "Unlit/DepthWrite", "Unlit/Lighting" }; public static List<Shader> shaders = new List<Shader>(); private static readonly HashSet<Shader> CachedShaders = new HashSet<Shader>(); public static bool debug = true; public static Shader findShader(string name) { Shader[] array = Resources.FindObjectsOfTypeAll<Shader>(); if (array.Length == 0) { Debug.LogWarning((object)"SHADER LIST IS EMPTY!"); return null; } if (debug) { } return shaders.Find((Shader x) => ((Object)x).name == name); } public static void ReplaceMaterial(Material material) { if ((Object)(object)material == (Object)null) { Debug.LogWarning((object)"Material is empty !"); } else { materialsInPrefabs.Add(material); } } public static Shader GetShaderByName(string name) { return shaders.Find((Shader x) => ((Object)x).name == name.Trim()); } public static void debugShaderList(List<Shader> shadersRes) { foreach (Shader shadersRe in shadersRes) { Debug.LogWarning((object)("SHADER NAME IS: " + ((Object)shadersRe).name)); } debug = false; } public static void Replace(GameObject gameObject) { prefabsToReplaceShader.Add(gameObject); GetMaterialsInPrefab(gameObject); } public static void GetMaterialsInPrefab(GameObject gameObject) { Renderer[] componentsInChildren = gameObject.GetComponentsInChildren<Renderer>(true); Renderer[] array = componentsInChildren; foreach (Renderer val in array) { Material[] sharedMaterials = val.sharedMaterials; if (sharedMaterials == null || sharedMaterials.Length == 0) { continue; } Material[] array2 = sharedMaterials; foreach (Material val2 in array2) { if ((Object)(object)val2 != (Object)null) { materialsInPrefabs.Add(val2); } } } } public static void getMeShaders() { AssetBundle[] array = Resources.FindObjectsOfTypeAll<AssetBundle>(); AssetBundle[] array2 = array; foreach (AssetBundle val in array2) { IEnumerable<Shader> enumerable3; try { IEnumerable<Shader> enumerable2; if (!val.isStreamedSceneAssetBundle || !Object.op_Implicit((Object)(object)val)) { IEnumerable<Shader> enumerable = val.LoadAllAssets<Shader>(); enumerable2 = enumerable; } else { enumerable2 = from shader in ((IEnumerable<string>)val.GetAllAssetNames()).Select((Func<string, Shader>)val.LoadAsset<Shader>) where (Object)(object)shader != (Object)null select shader; } enumerable3 = enumerable2; } catch (Exception) { continue; } if (enumerable3 == null) { continue; } foreach (Shader item in enumerable3) { CachedShaders.Add(item); } } } public static void runMaterialFix() { getMeShaders(); shaders.AddRange(CachedShaders); foreach (Material materialsInPrefab in materialsInPrefabs) { if ((Object)(object)materialsInPrefab == (Object)null) { Debug.Log((object)"I had a null in list"); continue; } Shader shader = materialsInPrefab.shader; if (!((Object)(object)shader == (Object)null)) { string name = ((Object)shader).name; if (!(name == "Standard") && name.Contains("Balrond")) { setProperValue(materialsInPrefab, name); } } } } private static void setProperValue(Material material, string shaderName) { string name = shaderName.Replace("Balrond", "Custom"); name = checkNaming(name); Shader shaderByName = GetShaderByName(name); if ((Object)(object)shaderByName == (Object)null) { Debug.LogWarning((object)("Shader not found " + name)); } else { material.shader = shaderByName; } } private static string checkNaming(string name) { string result = name; if (name.Contains("Bumped")) { result = name.Replace("Custom", "Lux Lit Particles"); } if (name.Contains("Tess Bumped")) { result = name.Replace("Custom", "Lux Lit Particles"); } if (name.Contains("Standard Surface")) { result = name.Replace("Custom", "Particles"); result = result.Replace("Standard Surface2", "Standard Surface"); } if (name.Contains("Standard Unlit")) { result = name.Replace("Custom", "Particles"); result = result.Replace("Standard Unlit", "Standard Unlit2"); result = result.Replace("Standard Unlit22", "Standard Unlit2"); } return result; } } public class BaseLevelEffectSetupValue { public float scale = 1.1f; public float saturation = 0.5f; public float hue = -0.1f; public float value = -0.1f; public LevelSetup setup = null; public GameObject enabledObject = null; public GameObject enabledObjectLevel2 = null; public GameObject enabledObjectLevel3 = null; public bool setEmmisive = false; public Color emissive = Color.white; public float sumValue = 0.05f; public void getSetup(LevelEffects levelEffects) { //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)levelEffects == (Object)null) { Debug.LogWarning((object)"I should not be here i am null"); return; } int num = 0; if (levelEffects.m_levelSetups != null && levelEffects.m_levelSetups.Count > 0) { num = levelEffects.m_levelSetups.Count; setup = levelEffects.m_levelSetups.Last(); } if (num != 0 && setup != null) { scale = setup.m_scale; saturation = setup.m_saturation; hue = setup.m_hue; value = setup.m_value; enabledObject = setup.m_enableObject; emissive = setup.m_emissiveColor; setEmmisive = setup.m_setEmissiveColor; enabledObjectLevel2 = enabledObject; enabledObjectLevel3 = enabledObject; } else { setValues(num, levelEffects); } if ((Object)(object)levelEffects.m_character != (Object)null) { if (((Object)((Component)levelEffects.m_character).gameObject).name == "Deer") { EditDeer(levelEffects); } if (((Object)((Component)levelEffects.m_character).gameObject).name == "Boar") { EditBoar(levelEffects); } } } private void EditDeer(LevelEffects levelEffects) { GameObject enableObject = levelEffects.m_levelSetups[0].m_enableObject; GameObject enableObject2 = levelEffects.m_levelSetups[1].m_enableObject; enabledObjectLevel2 = enableObject; enabledObjectLevel3 = enableObject2; Transform parent = enableObject.transform.parent; GameObject enableObject3 = (enabledObject = ((Component)parent.Find("Antler1")).gameObject); levelEffects.m_levelSetups[0].m_enableObject = enableObject3; levelEffects.m_levelSetups[1].m_enableObject = enableObject3; } private void EditBoar(LevelEffects gameObject) { } private void setValues(int levels, LevelEffects levelEffects) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) float y = ((Component)levelEffects).transform.localScale.y; if (levels == 0) { scale = y; saturation = 0f; hue = 0f; value = 0f; } if (levels == 1) { scale = y + 0.05f; saturation = 0.5f; hue = -0.05f; value = -0.05f; } if (levels == 2) { scale = y + 0.1f; saturation = 0.5f; hue = -0.1f; value = -0.1f; } } } public class ItemSetBuilder { public List<ItemSet> itemSets = new List<ItemSet>(); public List<GameObject> prefabs = new List<GameObject>(); public ModResourceLoader modResourceLoader; public static readonly List<MaterialPack> materialPacks = new List<MaterialPack>(); public void Setup(List<GameObject> prefabs) { this.prefabs = prefabs ?? new List<GameObject>(); } public void CreateMaterialPacks(ModResourceLoader loader) { if (loader == null) { Debug.LogWarning((object)"ModResourceLoader is null"); return; } modResourceLoader = loader; if (materialPacks.Count <= 0) { BuildPack(loader.loxFace_Default, loader.loxtBody_Default, loader.loxFur_Default, "Lox", "Default"); BuildPack(loader.loxFace_Albino, loader.loxtBody_Albino, loader.loxFur_Albino, "Lox", "Albino"); BuildPack(loader.loxFace_Black, loader.loxtBody_Black, loader.loxFur_Black, "Lox", "Black"); BuildPack(loader.loxFace_Blond, loader.loxtBody_Blond, loader.loxFur_Blond, "Lox", "Blond"); BuildPack(loader.loxFace_DarkBrown, loader.loxtBody_DarkBrown, loader.loxFur_DarkBrown, "Lox", "Brown"); BuildPack(loader.loxFace_Ginger, loader.loxtBody_Ginger, loader.loxFur_Ginger, "Lox", "Ginger"); BuildPack(loader.wolfBody_Default, loader.wolfBody_Default, loader.wolfBody_Default, "Wolf", "Default"); BuildPack(loader.wolfBody_Albino, loader.wolfBody_Albino, loader.wolfBody_Albino, "Wolf", "Albino"); BuildPack(loader.wolfBody_Black, loader.wolfBody_Black, loader.wolfBody_Black, "Wolf", "Black"); BuildPack(loader.wolfBody_DarkBrown, loader.wolfBody_DarkBrown, loader.wolfBody_DarkBrown, "Wolf", "Brown"); BuildPack(loader.wolfBody_Grey, loader.wolfBody_Grey, loader.wolfBody_Grey, "Wolf", "Grey"); BuildPack(loader.deerBody_Default, loader.deerBody_Default, loader.deerBody_Default, "Deer", "Default"); BuildPack(loader.deerBody_Albino, loader.deerBody_Albino, loader.deerBody_Albino, "Deer", "Albino"); BuildPack(loader.deerBody_Red, loader.deerBody_Red, loader.deerBody_Red, "Deer", "Red"); BuildPack(loader.deerBody_DarkBrown, loader.deerBody_DarkBrown, loader.deerBody_DarkBrown, "Deer", "Brown"); BuildPack(loader.deerBody_Grey, loader.deerBody_Grey, loader.deerBody_Grey, "Deer", "Grey"); BuildPack(loader.boarBody_Default, loader.boarBody_Default, loader.boarBody_Default, "Boar", "Default"); BuildPack(loader.boarBody_Grey, loader.boarBody_Grey, loader.boarBody_Grey, "Boar", "Grey"); BuildPack(loader.boarBody_Black, loader.boarBody_Black, loader.boarBody_Black, "Boar", "Black"); BuildPack(loader.boarBody_DarkBrown, loader.boarBody_DarkBrown, loader.boarBody_DarkBrown, "Boar", "Brown"); BuildPack(loader.boarBody_LightBrown, loader.boarBody_LightBrown, loader.boarBody_LightBrown, "Boar", "Brown2"); BuildPack(loader.neckBody_Default, loader.neckBody_Default, loader.neckBody_Default, "Neck", "Default"); BuildPack(loader.neckBody_Albino, loader.neckBody_Albino, loader.neckBody_Albino, "Neck", "Albino"); BuildPack(loader.neckBody_DarkBlue, loader.neckBody_DarkBlue, loader.neckBody_DarkBlue, "Neck", "Dark"); BuildPack(loader.neckBody_DarkGreen, loader.neckBody_DarkGreen, loader.neckBody_DarkGreen, "Neck", "Green"); BuildPack(loader.neckBody_Blue, loader.neckBody_Blue, loader.neckBody_Blue, "Neck", "Blue"); BuildPack(loader.askvinBody_Default, loader.askvinBody_Default, loader.askvinBody_Default, "Asksvin", "Default"); BuildPack(loader.askvinBody_Albino, loader.askvinBody_Albino, loader.askvinBody_Albino, "Asksvin", "Albino"); BuildPack(loader.askvinBody_Black, loader.askvinBody_Black, loader.askvinBody_Black, "Asksvin", "Dark"); BuildPack(loader.askvinBody_Purple, loader.askvinBody_Purple, loader.askvinBody_Purple, "Asksvin", "Purple"); BuildPack(loader.askvinBody_Grey, loader.askvinBody_Grey, loader.askvinBody_Grey, "Asksvin", "Grey"); BuildPack(loader.hareBody_Default, loader.hareBody_Default, loader.hareBody_Default, "Hare", "Default"); BuildPack(loader.hareBody_Albino, loader.hareBody_Albino, loader.hareBody_Albino, "Hare", "Albino"); BuildPack(loader.hareBody_Black, loader.hareBody_Black, loader.hareBody_Black, "Hare", "Black"); BuildPack(loader.hareBody_DarkBlue, loader.hareBody_DarkBlue, loader.hareBody_DarkBlue, "Hare", "Blue"); BuildPack(loader.hareBody_Ginger, loader.hareBody_Ginger, loader.hareBody_Ginger, "Hare", "Ginger"); BuildPack(loader.drakeBody_Default, loader.drakeBody_Default, loader.drakeBody_Default, "Hatchling", "Default"); BuildPack(loader.drakeBody_Red, loader.drakeBody_Red, loader.drakeBody_Red, "Hatchling", "Albino"); BuildPack(loader.drakeBody_DarkBlue, loader.drakeBody_DarkBlue, loader.drakeBody_DarkBlue, "Hatchling", "Blue"); BuildPack(loader.drakeBody_IceBlue, loader.drakeBody_IceBlue, loader.drakeBody_IceBlue, "Hatchling", "Ice"); BuildPack(loader.drakeBody_Purple, loader.drakeBody_Purple, loader.drakeBody_Purple, "Hatchling", "Purple"); BuildPack(loader.serpentBody_Default, loader.serpentBody_Default, loader.serpentBody_Default, "Serpent", "Default"); BuildPack(loader.serpentBody_Albino, loader.serpentBody_Albino, loader.serpentBody_Albino, "Serpent", "Albino"); BuildPack(loader.serpentBody_Black, loader.serpentBody_Black, loader.serpentBody_Black, "Serpent", "Black"); BuildPack(loader.serpentBody_Blue, loader.serpentBody_Blue, loader.serpentBody_Blue, "Serpent", "Blue"); BuildPack(loader.serpentBody_Green, loader.serpentBody_Green, loader.serpentBody_Green, "Serpent", "Green"); BuildPack(loader.serpentBody_Red, loader.serpentBody_Red, loader.serpentBody_Red, "Serpent", "Red"); } } private void BuildPack(Material face, Material body, Material body2, string name, string skin) { if ((Object)(object)face == (Object)null || (Object)(object)body == (Object)null || (Object)(object)body2 == (Object)null) { Debug.LogWarning((object)("Skipping null material pack: " + name + " / " + skin)); } else { materialPacks.Add(new MaterialPack(face, body, body2, name, skin)); } } public void SetupFurRandomizerForMonster(GameObject monster) { if ((Object)(object)monster == (Object)null) { Debug.LogWarning((object)"Monster not found"); } else if ((Object)(object)monster.GetComponent<FurRandomizer>() == (Object)null) { monster.AddComponent<FurRandomizer>(); } } } [Serializable] public class FurRandomizer : MonoBehaviour { private static readonly string[] ModelsToChange = new string[9] { "Wolf", "Lox", "Serpent", "Neck", "Hatchling", "Hare", "Boar", "Deer", "Asksvin" }; private ZNetView m_zview; private MonsterAI m_monsterAI; private AnimalAI m_animalAI; private Humanoid m_humanoid; public List<MaterialPack> m_materials = new List<MaterialPack>(); private string skinName; private MaterialPack m_materialPack; public SkinnedMeshRenderer face; public SkinnedMeshRenderer body; public SkinnedMeshRenderer fur; public static ModResourceLoader modResourceLoader = Launch.modResourceLoader; private readonly List<MaterialPack> materialPacks = ItemSetBuilder.materialPacks; private const string ZdoSetKey = "furRandomizerSet"; private const string ZdoActiveKey = "furRandomizerSetActive"; private void Awake() { if (!ValidatePrefab()) { Debug.LogWarning((object)("I should not be randomized: " + ((Object)((Component)this).gameObject).name)); return; } if (modResourceLoader == null) { Debug.LogWarning((object)"ModResourceLoader is null"); return; } if ((Object)(object)modResourceLoader.drakeBody_DarkBlue == (Object)null) { Debug.LogWarning((object)"Nothing loaded"); } m_zview = ((Component)this).GetComponent<ZNetView>(); m_monsterAI = ((Component)this).GetComponent<MonsterAI>(); m_animalAI = ((Component)this).GetComponent<AnimalAI>(); m_humanoid = ((Component)this).GetComponent<Humanoid>(); if ((Object)(object)m_zview == (Object)null || m_zview.m_zdo == null) { Debug.LogWarning((object)("Missing ZNetView or ZDO on " + ((Object)((Component)this).gameObject).name)); return; } CreateMaterialPacksOnce(); if (SetupFurRandomizerForMonster()) { if (m_materials == null || m_materials.Count == 0) { Debug.LogWarning((object)("Material list is empty for " + ((Object)((Component)this).gameObject).name)); return; } bool @bool = m_zview.m_zdo.GetBool("furRandomizerSetActive", false); PickRandomSet(@bool); } } private bool ValidatePrefab() { string value = EditZnetName(((Object)((Component)this).gameObject).name); return ModelsToChange.Contains(value); } private string EditZnetName(string name) { name = name.Replace("(Clone)", ""); int num = name.IndexOf("("); if (num >= 0) { name = name.Substring(0, num); } return name.Trim(); } private void PickRandomSet(bool chosen = false) { if (m_materials == null || m_materials.Count == 0) { Debug.LogWarning((object)("No material packs available for " + ((Object)((Component)this).gameObject).name)); return; } int num = -1; if (chosen) { num = m_zview.m_zdo.GetInt("furRandomizerSet", 0); } if (!chosen || num < 0 || num >= m_materials.Count) { num = Random.Range(0, m_materials.Count); } m_zview.m_zdo.Set("furRandomizerSet", num); m_zview.m_zdo.Set("furRandomizerSetActive", true); MaterialPack materialPack = m_materials[num]; skinName = materialPack.skin; m_materialPack = materialPack; SetSkin(materialPack); } private void SetSkin(MaterialPack pack) { switch (EditZnetName(((Object)((Component)this).gameObject).name)) { case "Lox": ApplyLoxMaterials(pack); break; case "Hare": case "Serpent": case "Neck": case "Wolf": case "Boar": case "Deer": case "Asksvin": ApplySingleRendererMaterial(body, pack.face); break; case "Hatchling": ApplyHatchlingMaterials(pack); break; } } private void ApplyLoxMaterials(MaterialPack pack) { //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Expected O, but got Unknown //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Expected O, but got Unknown //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Expected O, but got Unknown //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Expected O, but got Unknown //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Expected O, but got Unknown if ((Object)(object)face == (Object)null || (Object)(object)body == (Object)null || (Object)(object)fur == (Object)null) { Debug.LogWarning((object)("Lox renderers missing on " + ((Object)((Component)this).gameObject).name)); return; } Material[] materials = ((Renderer)face).materials; if (materials.Length != 0) { materials[0] = new Material(pack.body); ((Renderer)face).materials = materials; } Material[] materials2 = ((Renderer)body).materials; if (materials2.Length != 0) { materials2[0] = new Material(pack.body); ((Renderer)body).materials = materials2; } Material[] materials3 = ((Renderer)fur).materials; if (materials3.Length != 0) { materials3[0] = new Material(pack.body2); ((Renderer)fur).materials = materials3; } Material[] sharedMaterials = ((Renderer)face).sharedMaterials; if (sharedMaterials.Length > 1) { sharedMaterials[1] = new Material(pack.face); ((Renderer)face).sharedMaterials = sharedMaterials; } Material[] sharedMaterials2 = ((Renderer)body).sharedMaterials; if (sharedMaterials2.Length != 0) { sharedMaterials2[0] = new Material(pack.body); ((Renderer)body).sharedMaterials = sharedMaterials2; } Material[] sharedMaterials3 = ((Renderer)fur).sharedMaterials; if (sharedMaterials3.Length != 0) { sharedMaterials3[0] = new Material(pack.body2); ((Renderer)fur).sharedMaterials = sharedMaterials3; } } private void ApplyHatchlingMaterials(MaterialPack pack) { //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected O, but got Unknown if ((Object)(object)face == (Object)null || (Object)(object)body == (Object)null || (Object)(object)fur == (Object)null) { Debug.LogWarning((object)("Hatchling renderers missing on " + ((Object)((Component)this).gameObject).name)); return; } Material[] materials = ((Renderer)face).materials; if (materials.Length != 0) { materials[0] = new Material(pack.body); } ((Renderer)face).materials = materials; ((Renderer)body).materials = materials; ((Renderer)fur).materials = materials; ((Renderer)face).sharedMaterials = materials; ((Renderer)body).sharedMaterials = materials; ((Renderer)fur).sharedMaterials = materials; } private void ApplySingleRendererMaterial(SkinnedMeshRenderer renderer, Material source) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown if ((Object)(object)renderer == (Object)null || (Object)(object)source == (Object)null) { Debug.LogWarning((object)("Renderer or source material missing on " + ((Object)((Component)this).gameObject).name)); return; } ((Renderer)renderer).sharedMaterial = new Material(source); ((Renderer)renderer).material = new Material(source); } private void CreateMaterialPacksOnce() { if (materialPacks == null) { Debug.LogWarning((object)"materialPacks list is null"); } else if (materialPacks.Count <= 0) { BuildPack(modResourceLoader.loxFace_Default, modResourceLoader.loxtBody_Default, modResourceLoader.loxFur_Default, "Lox", "Default"); BuildPack(modResourceLoader.loxFace_Albino, modResourceLoader.loxtBody_Albino, modResourceLoader.loxFur_Albino, "Lox", "Albino"); BuildPack(modResourceLoader.loxFace_Black, modResourceLoader.loxtBody_Black, modResourceLoader.loxFur_Black, "Lox", "Black"); BuildPack(modResourceLoader.loxFace_Blond, modResourceLoader.loxtBody_Blond, modResourceLoader.loxFur_Blond, "Lox", "Blond"); BuildPack(modResourceLoader.loxFace_DarkBrown, modResourceLoader.loxtBody_DarkBrown, modResourceLoader.loxFur_DarkBrown, "Lox", "Brown"); BuildPack(modResourceLoader.loxFace_Ginger, modResourceLoader.loxtBody_Ginger, modResourceLoader.loxFur_Ginger, "Lox", "Ginger"); BuildPack(modResourceLoader.wolfBody_Default, modResourceLoader.wolfBody_Default, modResourceLoader.wolfBody_Default, "Wolf", "Default"); BuildPack(modResourceLoader.wolfBody_Albino, modResourceLoader.wolfBody_Albino, modResourceLoader.wolfBody_Albino, "Wolf", "Albino"); BuildPack(modResourceLoader.wolfBody_Black, modResourceLoader.wolfBody_Black, modResourceLoader.wolfBody_Black, "Wolf", "Black"); BuildPack(modResourceLoader.wolfBody_DarkBrown, modResourceLoader.wolfBody_DarkBrown, modResourceLoader.wolfBody_DarkBrown, "Wolf", "Brown"); BuildPack(modResourceLoader.wolfBody_Grey, modResourceLoader.wolfBody_Grey, modResourceLoader.wolfBody_Grey, "Wolf", "Grey"); BuildPack(modResourceLoader.neckBody_Default, modResourceLoader.neckBody_Default, modResourceLoader.neckBody_Default, "Neck", "Default"); BuildPack(modResourceLoader.neckBody_Albino, modResourceLoader.neckBody_Albino, modResourceLoader.neckBody_Albino, "Neck", "Albino"); BuildPack(modResourceLoader.neckBody_DarkBlue, modResourceLoader.neckBody_DarkBlue, modResourceLoader.neckBody_DarkBlue, "Neck", "Dark"); BuildPack(modResourceLoader.neckBody_DarkGreen, modResourceLoader.neckBody_DarkGreen, modResourceLoader.neckBody_DarkGreen, "Neck", "Green"); BuildPack(modResourceLoader.neckBody_Blue, modResourceLoader.neckBody_Blue, modResourceLoader.neckBody_Blue, "Neck", "Blue"); BuildPack(modResourceLoader.hareBody_Default, modResourceLoader.hareBody_Default, modResourceLoader.hareBody_Default, "Hare", "Default"); BuildPack(modResourceLoader.hareBody_Albino, modResourceLoader.hareBody_Albino, modResourceLoader.hareBody_Albino, "Hare", "Albino"); BuildPack(modResourceLoader.hareBody_Black, modResourceLoader.hareBody_Black, modResourceLoader.hareBody_Black, "Hare", "Black"); BuildPack(modResourceLoader.hareBody_DarkBlue, modResourceLoader.hareBody_DarkBlue, modResourceLoader.hareBody_DarkBlue, "Hare", "Blue"); BuildPack(modResourceLoader.hareBody_Ginger, modResourceLoader.hareBody_Ginger, modResourceLoader.hareBody_Ginger, "Hare", "Ginger"); BuildPack(modResourceLoader.drakeBody_Default, modResourceLoader.drakeBody_Default, modResourceLoader.drakeBody_Default, "Hatchling", "Default"); BuildPack(modResourceLoader.drakeBody_Red, modResourceLoader.drakeBody_Red, modResourceLoader.drakeBody_Red, "Hatchling", "Albino"); BuildPack(modResourceLoader.drakeBody_DarkBlue, modResourceLoader.drakeBody_DarkBlue, modResourceLoader.drakeBody_DarkBlue, "Hatchling", "Blue"); BuildPack(modResourceLoader.drakeBody_IceBlue, modResourceLoader.drakeBody_IceBlue, modResourceLoader.drakeBody_IceBlue, "Hatchling", "Ice"); BuildPack(modResourceLoader.drakeBody_Purple, modResourceLoader.drakeBody_Purple, modResourceLoader.drakeBody_Purple, "Hatchling", "Purple"); BuildPack(modResourceLoader.serpentBody_Default, modResourceLoader.serpentBody_Default, modResourceLoader.serpentBody_Default, "Serpent", "Default"); BuildPack(modResourceLoader.serpentBody_Albino, modResourceLoader.serpentBody_Albino, modResourceLoader.serpentBody_Albino, "Serpent", "Albino"); BuildPack(modResourceLoader.serpentBody_Black, modResourceLoader.serpentBody_Black, modResourceLoader.serpentBody_Black, "Serpent", "Black"); BuildPack(modResourceLoader.serpentBody_Blue, modResourceLoader.serpentBody_Blue, modResourceLoader.serpentBody_Blue, "Serpent", "Blue"); BuildPack(modResourceLoader.serpentBody_Green, modResourceLoader.serpentBody_Green, modResourceLoader.serpentBody_Green, "Serpent", "Green"); BuildPack(modResourceLoader.serpentBody_Red, modResourceLoader.serpentBody_Red, modResourceLoader.serpentBody_Red, "Serpent", "Red"); BuildPack(modResourceLoader.askvinBody_Default, modResourceLoader.askvinBody_Default, modResourceLoader.askvinBody_Default, "Asksvin", "Default"); BuildPack(modResourceLoader.askvinBody_Albino, modResourceLoader.askvinBody_Albino, modResourceLoader.askvinBody_Albino, "Asksvin", "Albino"); BuildPack(modResourceLoader.askvinBody_Black, modResourceLoader.askvinBody_Black, modResourceLoader.askvinBody_Black, "Asksvin", "Dark"); BuildPack(modResourceLoader.askvinBody_Purple, modResourceLoader.askvinBody_Purple, modResourceLoader.askvinBody_Purple, "Asksvin", "Purple"); BuildPack(modResourceLoader.askvinBody_Grey, modResourceLoader.askvinBody_Grey, modResourceLoader.askvinBody_Grey, "Asksvin", "Grey"); BuildPack(modResourceLoader.deerBody_Default, modResourceLoader.deerBody_Default, modResourceLoader.deerBody_Default, "Deer", "Default"); BuildPack(modResourceLoader.deerBody_Albino, modResourceLoader.deerBody_Albino, modResourceLoader.deerBody_Albino, "Deer", "Albino"); BuildPack(modResourceLoader.deerBody_Red, modResourceLoader.deerBody_Red, modResourceLoader.deerBody_Red, "Deer", "Red"); BuildPack(modResourceLoader.deerBody_DarkBrown, modResourceLoader.deerBody_DarkBrown, modResourceLoader.deerBody_DarkBrown, "Deer", "Brown"); BuildPack(modResourceLoader.deerBody_Grey, modResourceLoader.deerBody_Grey, modResourceLoader.deerBody_Grey, "Deer", "Grey"); BuildPack(modResourceLoader.boarBody_Default, modResourceLoader.boarBody_Default, modResourceLoader.boarBody_Default, "Boar", "Default"); BuildPack(modResourceLoader.boarBody_Grey, modResourceLoader.boarBody_Grey, modResourceLoader.boarBody_Grey, "Boar", "Grey"); BuildPack(modResourceLoader.boarBody_Black, modResourceLoader.boarBody_Black, modResourceLoader.boarBody_Black, "Boar", "Black"); BuildPack(modResourceLoader.boarBody_DarkBrown, modResourceLoader.boarBody_DarkBrown, modResourceLoader.boarBody_DarkBrown, "Boar", "Brown"); BuildPack(modResourceLoader.boarBody_LightBrown, modResourceLoader.boarBody_LightBrown, modResourceLoader.boarBody_LightBrown, "Boar", "Brown2"); } } private void BuildPack(Material face, Material body, Material body2, string name, string skin) { if ((Object)(object)face == (Object)null || (Object)(object)body == (Object)null || (Object)(object)body2 == (Object)null) { Debug.LogWarning((object)("Skipping null material pack: " + name + " / " + skin)); } else { materialPacks.Add(new MaterialPack(face, body, body2, name, skin)); } } private bool SetupFurRandomizerForMonster() { string name = EditZnetName(((Object)((Component)this).gameObject).name); m_materials = materialPacks.FindAll((MaterialPack x) => x.animal == name); switch (name) { case "Lox": { Transform[] componentsInChildren4 = ((Component)this).gameObject.GetComponentsInChildren<Transform>(true); foreach (Transform val4 in componentsInChildren4) { if (((Object)((Component)val4).gameObject).name == "Body") { SkinnedMeshRenderer component4 = ((Component)val4).GetComponent<SkinnedMeshRenderer>(); if ((Object)(object)component4 != (Object)null) { face = component4; body = component4; } } else if (((Object)((Component)val4).gameObject).name == "Furr1") { SkinnedMeshRenderer component5 = ((Component)val4).GetComponent<SkinnedMeshRenderer>(); if ((Object)(object)component5 != (Object)null) { fur = component5; } } } break; } case "Hatchling": { Transform[] componentsInChildren2 = ((Component)this).gameObject.GetComponentsInChildren<Transform>(true); foreach (Transform val2 in componentsInChildren2) { if (((Object)((Component)val2).gameObject).name == "Hatchling") { SkinnedMeshRenderer component = ((Component)val2).GetComponent<SkinnedMeshRenderer>(); if ((Object)(object)component != (Object)null) { body = component; face = ((Component)this).gameObject.GetComponentInChildren<SkinnedMeshRenderer>(true); } } else if (((Object)((Component)val2).gameObject).name == "Hatchling.001") { SkinnedMeshRenderer component2 = ((Component)val2).GetComponent<SkinnedMeshRenderer>(); if ((Object)(object)component2 != (Object)null) { fur = component2; } } } break; } case "Neck": { Transform[] componentsInChildren3 = ((Component)this).gameObject.GetComponentsInChildren<Transform>(true); foreach (Transform val3 in componentsInChildren3) { if (((Object)((Component)val3).gameObject).name == "Body") { SkinnedMeshRenderer component3 = ((Component)val3).GetComponent<SkinnedMeshRenderer>(); if ((Object)(object)component3 != (Object)null) { face = component3; body = component3; fur = component3; } } } break; } case "Boar": { SkinnedMeshRenderer[] componentsInChildren = ((Component)this).gameObject.GetComponentsInChildren<SkinnedMeshRenderer>(true); foreach (SkinnedMeshRenderer val in componentsInChildren) { if (((Object)val).name == "Poly Art Boar") { face = val; body = val; fur = val; break; } } break; } case "Asksvin": case "Deer": case "Serpent": case "Wolf": case "Hare": fur = (body = (face = ((Component)this).gameObject.GetComponentInChildren<SkinnedMeshRenderer>(true))); break; } if ((Object)(object)face == (Object)null || (Object)(object)body == (Object)null || (Object)(object)fur == (Object)null) { Debug.LogWarning((object)("Couldn't find renderers for " + ((Object)((Component)this).gameObject).name)); return false; } return true; } } public class LevelEffectGenerator { private BaseLevelEffectSetupValue baseLevelEffectSetupValue = new BaseLevelEffectSetupValue(); public void CreateVisuals(LevelEffects levelEffects) { //IL_0072: Unknown result type (might be due to invalid IL or missing references) baseLevelEffectSetupValue.getSetup(levelEffects); int num = 0; if (levelEffects.m_levelSetups != null) { num = levelEffects.m_levelSetups.Count; } int num2 = 6 - num; for (int i = 0; i < num2; i++) { LevelSetup item = createSetup(baseLevelEffectSetupValue.scale, baseLevelEffectSetupValue.saturation, baseLevelEffectSetupValue.hue, baseLevelEffectSetupValue.value, baseLevelEffectSetupValue.setEmmisive, baseLevelEffectSetupValue.emissive, baseLevelEffectSetupValue.sumValue * (float)(i + 1), num2, i + 1); levelEffects.m_levelSetups.Add(item); } } public LevelEffects CreateLevelEffectAt(Transform visual, SkinnedMeshRenderer meshRenderer) { if ((Object)(object)meshRenderer == (Object)null) { return null; } if ((Object)(object)meshRenderer != (Object)null) { LevelEffects val = ((Component)visual).gameObject.AddComponent<LevelEffects>(); val.m_mainRender = (Renderer)(object)meshRenderer; val.m_character = (Character)(object)((Component)visual.parent).gameObject.GetComponent<Humanoid>(); return val; } return null; } public LevelEffects CreateLevelEffectComponent(Transform visual) { SkinnedMeshRenderer[] componentsInChildren = ((Component)visual).GetComponentsInChildren<SkinnedMeshRenderer>(); if (componentsInChildren.Length > 1) { Debug.LogWarning((object)("To many renderers to create Visual Effects:" + ((Object)visual.parent).name)); return null; } if (componentsInChildren.Length == 1) { LevelEffects val = ((Component)visual).gameObject.AddComponent<LevelEffects>(); val.m_mainRender = (Renderer)(object)componentsInChildren[0]; val.m_character = (Character)(object)((Component)visual.parent).gameObject.GetComponent<Humanoid>(); return val; } return null; } private LevelSetup createSetup(float scale, float saturation, float hue, float value, bool isEmmisive, Color emission, float changeValue, int maxAmount, int lvl) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) LevelSetup val = new LevelSetup(); val.m_scale = scale + changeValue; val.m_saturation = saturation + changeValue; val.m_hue = hue + changeValue; val.m_value = value + changeValue; val.m_enableObject = pickEnabledObject(maxAmount, lvl); val.m_setEmissiveColor = isEmmisive; val.m_emissiveColor = new Color(emission.r + changeValue, emission.g + changeValue, emission.b + changeValue, emission.a); return val; } private GameObject pickEnabledObject(int maxAmount, int lvl) { if (maxAmount == 6) { if (lvl > 4) { return baseLevelEffectSetupValue.enabledObjectLevel3; } if (lvl > 2) { return baseLevelEffectSetupValue.enabledObjectLevel2; } } if (maxAmount == 3) { if (lvl > 3) { return baseLevelEffectSetupValue.enabledObjectLevel3; } if (lvl > 2) { return baseLevelEffectSetupValue.enabledObjectLevel2; } } if (maxAmount < 3) { switch (lvl) { case 2: return baseLevelEffectSetupValue.enabledObjectLevel3; case 1: return baseLevelEffectSetupValue.enabledObjectLevel2; } } return baseLevelEffectSetupValue.enabledObject; } } [Serializable] public class MaterialPack { public Material face; public Material body; public Material body2; public string animal; public string skin; public MaterialPack(Material body, Material body2, Material face, string monsterName, string skinName) { animal = monsterName; this.face = face; this.body = body; this.body2 = body2; skin = skinName; } } public class DatabaseAddMethods { public void AddItems(List<GameObject> items) { foreach (GameObject item in items) { AddItem(item); } } public void AddRecipes(List<Recipe> recipes) { foreach (Recipe recipe in recipes) { AddRecipe(recipe); } } public void AddStatuseffects(List<StatusEffect> statusEffects) { foreach (StatusEffect statusEffect in statusEffects) { AddStatus(statusEffect); } } private bool IsObjectDBValid() { return (Object)(object)ObjectDB.instance != (Object)null && ObjectDB.instance.m_items.Count != 0 && ObjectDB.instance.m_recipes.Count != 0 && (Object)(object)ObjectDB.instance.GetItemPrefab("Amber") != (Object)null; } private void AddStatus(StatusEffect status) { if (!IsObjectDBValid()) { return; } if ((Object)(object)status != (Object)null) { if ((Object)(object)ObjectDB.instance.GetStatusEffect(((object)status).GetHashCode()) == (Object)null) { ObjectDB.instance.m_StatusEffects.Add(status); } } else { Debug.LogError((object)("BalrondFurRandomizer: " + ((Object)status).name + " - Status not found")); } } private void AddRecipe(Recipe recipe) { if (!IsObjectDBValid()) { return; } if ((Object)(object)recipe != (Object)null) { if ((Object)(object)ObjectDB.instance.GetRecipe(recipe.m_item.m_itemData) == (Object)null) { ObjectDB.instance.m_recipes.Add(recipe); } } else { Debug.LogError((object)("BalrondFurRandomizer: " + ((Object)recipe).name + " - Recipe not found")); } } private void AddItem(GameObject newPrefab) { if (!IsObjectDBValid()) { return; } ItemDrop component = newPrefab.GetComponent<ItemDrop>(); if ((Object)(object)component != (Object)null) { if ((Object)(object)ObjectDB.instance.GetItemPrefab(((Object)newPrefab).name) == (Object)null) { ObjectDB.instance.m_items.Add(newPrefab); Dictionary<int, GameObject> dictionary = (Dictionary<int, GameObject>)typeof(ObjectDB).GetField("m_itemByHash", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(ObjectDB.instance); dictionary[((Object)newPrefab).name.GetHashCode()] = newPrefab; } } else { Debug.LogError((object)("BalrondFurRandomizer: " + ((Object)newPrefab).name + " - ItemDrop not found on prefab")); } } } [BepInPlugin("balrond.astafaraios.BalrondFurRandomizer", "BalrondFurRandomizer", "1.0.7")] public class Launch : BaseUnityPlugin { [HarmonyPatch(typeof(Game), "Awake")] public static class Game_Awake_Patch { public static void Prefix() { ZNetScene_Awake_Patch.hasSpawned = false; } } [HarmonyPatch(typeof(ObjectDB), "CopyOtherDB")] public static class ObjectDB_CopyOtherDB_Patch { public static void Postfix() { if (IsObjectDBValid()) { } } } [HarmonyPatch(typeof(ObjectDB), "Awake")] public static class ObjectDB_Awake_Patch { public static void Postfix() { if (IsObjectDBValid()) { } } } [HarmonyPatch(typeof(Character), "OnDeath")] public static class Character_OnDeath_Patch { public static void Prefix(Character __instance) { if ((Object)(object)__instance == (Object)null) { Debug.LogWarning((object)"Character instance does not exist yet"); } else { if (__instance.m_deathEffects == null || __instance.m_deathEffects.m_effectPrefabs == null) { return; } LevelEffects componentInChildren = ((Component)__instance).GetComponentInChildren<LevelEffects>(); if ((Object)(object)componentInChildren == (Object)null || (Object)(object)componentInChildren.m_mainRender == (Object)null) { return; } Material[] sharedMaterials = componentInChildren.m_mainRender.sharedMaterials; if (sharedMaterials == null || sharedMaterials.Length == 0) { return; } EffectData[] effectPrefabs = __instance.m_deathEffects.m_effectPrefabs; foreach (EffectData val in effectPrefabs) { if (val != null && !((Object)(object)val.m_prefab == (Object)null)) { Ragdoll component = val.m_prefab.GetComponent<Ragdoll>(); if ((Object)(object)component != (Object)null && (Object)(object)component.m_mainModel != (Object)null) { component.m_mainModel.sharedMaterials = sharedMaterials; } } } } } } [HarmonyPatch(typeof(LevelEffects), "SetupLevelVisualization")] public static class LevelEffects_SetupLevelVisualization_Patch { public static bool Prefix(LevelEffects __instance, int level) { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Expected O, but got Unknown //IL_010f: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)__instance == (Object)null) { return false; } if (level <= 1 || __instance.m_levelSetups.Count < level - 1) { return false; } LevelSetup val = __instance.m_levelSetups[level - 2]; ((Component)__instance).transform.localScale = new Vector3(val.m_scale, val.m_scale, val.m_scale); if ((Object)(object)__instance.m_mainRender != (Object)null) { Material[] sharedMaterials = __instance.m_mainRender.sharedMaterials; if (sharedMaterials != null && sharedMaterials.Length != 0 && (Object)(object)sharedMaterials[0] != (Object)null) { sharedMaterials[0] = new Material(sharedMaterials[0]); sharedMaterials[0].SetFloat("_Hue", val.m_hue); sharedMaterials[0].SetFloat("_Saturation", val.m_saturation); sharedMaterials[0].SetFloat("_Value", val.m_value); if (val.m_setEmissiveColor) { sharedMaterials[0].SetColor("_EmissionColor", val.m_emissiveColor); } __instance.m_mainRender.sharedMaterials = sharedMaterials; if ((Object)(object)__instance.m_character != (Object)null) { string key = Utils.GetPrefabName(((Component)__instance.m_character).gameObject) + level; LevelEffects.m_materials[key] = sharedMaterials[0]; } } } if ((Object)(object)__instance.m_baseEnableObject != (Object)null) { __instance.m_baseEnableObject.SetActive(false); } if ((Object)(object)val.m_enableObject != (Object)null) { val.m_enableObject.SetActive(true); } return false; } } [HarmonyPatch(typeof(ZNetScene), "Awake")] public static class ZNetScene_Awake_Patch { public static bool hasSpawned; public static void Prefix(ZNetScene __instance) { if ((Object)(object)__instance == (Object)null) { Debug.LogWarning((object)"BalrondFurRandomizer: No ZNetScene found"); } else if (!hasSpawned) { itemSetBuilder.CreateMaterialPacks(modResourceLoader); SetupFurRandomizers(__instance.m_prefabs); if ((Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsDedicated()) { hasSpawned = true; return; } ShaderReplacment.runMaterialFix(); hasSpawned = true; } } private static void SetupFurRandomizers(List<GameObject> prefabs) { if (prefabs == null || prefabs.Count == 0) { Debug.LogWarning((object)"BalrondFurRandomizer: Prefab list is empty"); return; } string[] array = new string[9] { "Wolf", "Neck", "Hare", "Serpent", "Hatchling", "Lox", "Deer", "Boar", "Asksvin" }; string[] array2 = array; foreach (string targetName in array2) { GameObject monster = prefabs.Find((GameObject x) => (Object)(object)x != (Object)null && ((Object)x).name == targetName); itemSetBuilder.SetupFurRandomizerForMonster(monster); } } } private readonly Harmony harmony = new Harmony("balrond.astafaraios.BalrondFurRandomizer"); public const string PluginGUID = "balrond.astafaraios.BalrondFurRandomizer"; public const string PluginName = "BalrondFurRandomizer"; public const string PluginVersion = "1.0.7"; public static ModResourceLoader modResourceLoader = new ModResourceLoader(); public static DatabaseAddMethods databaseAddMethods = new DatabaseAddMethods(); public static MonsterManager monsterManager = new MonsterManager(); public static ItemSetBuilder itemSetBuilder = new ItemSetBuilder(); public static GameObject gui; public static GameObject gui2; public static GameObject RootObject; public static GameObject PrefabContainer; private void Awake() { CreatePrefabContainer(); modResourceLoader.loadAssets(); harmony.PatchAll(); } private void OnDestroy() { harmony.UnpatchSelf(); } public void CreatePrefabContainer() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown if (!((Object)(object)RootObject != (Object)null) || !((Object)(object)PrefabContainer != (Object)null)) { RootObject = new GameObject("_ValheimReforgedRoot"); Object.DontDestroyOnLoad((Object)(object)RootObject); PrefabContainer = new GameObject("Prefabs"); PrefabContainer.transform.SetParent(RootObject.transform, false); PrefabContainer.SetActive(false); } } public static GameObject CloneMe(GameObject source, string name) { if ((Object)(object)source == (Object)null) { Debug.LogWarning((object)"BalrondFurRandomizer: CloneMe source is null"); return null; } if ((Object)(object)PrefabContainer == (Object)null) { Debug.LogWarning((object)"BalrondFurRandomizer: PrefabContainer is null"); return null; } GameObject val = Object.Instantiate<GameObject>(source, PrefabContainer.transform); ((Object)val).name = name; return val; } private static bool IsObjectDBValid() { return (Object)(object)ObjectDB.instance != (Object)null && ObjectDB.instance.m_items != null && ObjectDB.instance.m_recipes != null && ObjectDB.instance.m_items.Count != 0 && ObjectDB.instance.m_recipes.Count != 0 && (Object)(object)ObjectDB.instance.GetItemPrefab("Amber") != (Object)null; } public static void AddStatusToAttackField(GameObject gameObject, StatusEffect statusEffect) { if (!((Object)(object)gameObject == (Object)null) && !((Object)(object)statusEffect == (Object)null)) { ItemDrop component = gameObject.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { Debug.LogWarning((object)("BalrondFurRandomizer: ItemDrop not found on " + ((Object)gameObject).name)); } else { component.m_itemData.m_shared.m_attackStatusEffect = statusEffect; } } } } public class ModResourceLoader { public AssetBundle assetBundle; public Material loxFace_Default; public Material loxtBody_Default; public Material loxFur_Default; public Material loxFace_Albino; public Material loxtBody_Albino; public Material loxFur_Albino; public Material loxFace_Black; public Material loxtBody_Black; public Material loxFur_Black; public Material loxFace_Blond; public Material loxtBody_Blond; public Material loxFur_Blond; public Material loxFace_DarkBrown; public Material loxtBody_DarkBrown; public Material loxFur_DarkBrown; public Material loxFace_Ginger; public Material loxtBody_Ginger; public Material loxFur_Ginger; public Material wolfBody_Default; public Material wolfBody_Albino; public Material wolfBody_Black; public Material wolfBody_DarkBrown; public Material wolfBody_Grey; public Material boarBody_Default; public Material boarBody_Grey; public Material boarBody_Black; public Material boarBody_DarkBrown; public Material boarBody_LightBrown; public Material askvinBody_Default; public Material askvinBody_Albino; public Material askvinBody_Purple; public Material askvinBody_Black; public Material askvinBody_Grey; public Material deerBody_Default; public Material deerBody_Albino; public Material deerBody_Red; public Material deerBody_DarkBrown; public Material deerBody_Grey; public Material neckBody_Default; public Material neckBody_Albino; public Material neckBody_Blue; public Material neckBody_DarkBlue; public Material neckBody_DarkGreen; public Material hareBody_Default; public Material hareBody_Albino; public Material hareBody_Black; public Material hareBody_DarkBlue; public Material hareBody_Ginger; public Material drakeBody_Default; public Material drakeBody_DarkBlue; public Material drakeBody_IceBlue; public Material drakeBody_Purple; public Material drakeBody_Red; public Material serpentBody_Default; public Material serpentBody_Albino; public Material serpentBody_Black; public Material serpentBody_Blue; public Material serpentBody_Green; public Material serpentBody_Red; public void loadAssets() { assetBundle = GetAssetBundleFromResources("furrandomizer"); string text = "Assets/BalrondFurRandomizer/"; Material temp = assetBundle.LoadAsset<Material>(text + "Lox/Default/lox_face.mat"); CreateLoxMaterial(temp, text); CreateWolfMaterial(temp, text); CreateNeckMaterial(temp, text); CreateHareMaterial(temp, text); CreateDrakeMaterial(temp, text); CreateSerpentMaterials(temp, text); CreateAskvinMaterial(temp, text); CreateBoarMaterial(temp, text); CreateDeerMaterial(temp, text); } private void CreateLoxMaterial(Material temp, string mainPath) { ShaderReplacment.ReplaceMaterial(temp); loxFace_Default = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/Default/lox_body1.mat"); ShaderReplacment.ReplaceMaterial(temp); loxtBody_Default = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/Default/lox_fur1.mat"); ShaderReplacment.ReplaceMaterial(temp); loxFur_Default = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/Albino/lox_face.mat"); ShaderReplacment.ReplaceMaterial(temp); loxFace_Albino = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/Albino/lox_body1.mat"); ShaderReplacment.ReplaceMaterial(temp); loxtBody_Albino = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/Albino/lox_fur1.mat"); ShaderReplacment.ReplaceMaterial(temp); loxFur_Albino = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/Black/lox_face.mat"); ShaderReplacment.ReplaceMaterial(temp); loxFace_Black = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/Black/lox_body1.mat"); ShaderReplacment.ReplaceMaterial(temp); loxtBody_Black = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/Black/lox_fur1.mat"); ShaderReplacment.ReplaceMaterial(temp); loxFur_Black = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/Blonde/lox_face.mat"); ShaderReplacment.ReplaceMaterial(temp); loxFace_Blond = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/Blonde/lox_body1.mat"); ShaderReplacment.ReplaceMaterial(temp); loxtBody_Blond = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/Blonde/lox_fur1.mat"); ShaderReplacment.ReplaceMaterial(temp); loxFur_Blond = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/DarkBrown/lox_face.mat"); ShaderReplacment.ReplaceMaterial(temp); loxFace_DarkBrown = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/DarkBrown/lox_body1.mat"); ShaderReplacment.ReplaceMaterial(temp); loxtBody_DarkBrown = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/DarkBrown/lox_fur1.mat"); ShaderReplacment.ReplaceMaterial(temp); loxFur_DarkBrown = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/Ginger/lox_face.mat"); ShaderReplacment.ReplaceMaterial(temp); loxFace_Ginger = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/Ginger/lox_body1.mat"); ShaderReplacment.ReplaceMaterial(temp); loxtBody_Ginger = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Lox/Ginger/lox_fur1.mat"); ShaderReplacment.ReplaceMaterial(temp); loxFur_Ginger = temp; } private void CreateWolfMaterial(Material temp, string mainPath) { temp = assetBundle.LoadAsset<Material>(mainPath + "Wolf/Default/wolfMat.mat"); ShaderReplacment.ReplaceMaterial(temp); wolfBody_Default = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Wolf/Albino/wolfMat.mat"); ShaderReplacment.ReplaceMaterial(temp); wolfBody_Albino = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Wolf/Black/wolfMat.mat"); ShaderReplacment.ReplaceMaterial(temp); wolfBody_Black = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Wolf/DarkBrown/wolfMat.mat"); ShaderReplacment.ReplaceMaterial(temp); wolfBody_DarkBrown = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Wolf/Grey/wolfMat.mat"); ShaderReplacment.ReplaceMaterial(temp); wolfBody_Grey = temp; } private void CreateBoarMaterial(Material temp, string mainPath) { temp = assetBundle.LoadAsset<Material>(mainPath + "Boar/Default/Material_default.mat"); ShaderReplacment.ReplaceMaterial(temp); boarBody_Default = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Boar/Grey/Material_grey.mat"); ShaderReplacment.ReplaceMaterial(temp); boarBody_Grey = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Boar/Black/Material_black.mat"); ShaderReplacment.ReplaceMaterial(temp); boarBody_Black = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Boar/DarkBrown/Material_darkBrown.mat"); ShaderReplacment.ReplaceMaterial(temp); boarBody_DarkBrown = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Boar/Young/Material_young.mat"); ShaderReplacment.ReplaceMaterial(temp); boarBody_LightBrown = temp; } private void CreateDeerMaterial(Material temp, string mainPath) { temp = assetBundle.LoadAsset<Material>(mainPath + "Deer/Default/Deer_default.mat"); ShaderReplacment.ReplaceMaterial(temp); deerBody_Default = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Deer/Albino/Deer_albino.mat"); ShaderReplacment.ReplaceMaterial(temp); deerBody_Albino = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Deer/Red/Deer_red.mat"); ShaderReplacment.ReplaceMaterial(temp); deerBody_Red = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Deer/LightBrown/Deer_brown.mat"); ShaderReplacment.ReplaceMaterial(temp); deerBody_DarkBrown = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Deer/Grey/Deer_gray.mat"); ShaderReplacment.ReplaceMaterial(temp); deerBody_Grey = temp; } private void CreateAskvinMaterial(Material temp, string mainPath) { temp = assetBundle.LoadAsset<Material>(mainPath + "Askvin/Default/asksvin_Mat_default.mat"); ShaderReplacment.ReplaceMaterial(temp); askvinBody_Default = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Askvin/Albino/asksvin_Mat_albino.mat"); ShaderReplacment.ReplaceMaterial(temp); askvinBody_Albino = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Askvin/Purple/asksvin_Mat_purple.mat"); ShaderReplacment.ReplaceMaterial(temp); askvinBody_Purple = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Askvin/Black/asksvin_Mat_black.mat"); ShaderReplacment.ReplaceMaterial(temp); askvinBody_Black = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Askvin/Young/asksvincub_Mat_young.mat"); ShaderReplacment.ReplaceMaterial(temp); askvinBody_Grey = temp; } private void CreateNeckMaterial(Material temp, string mainPath) { temp = assetBundle.LoadAsset<Material>(mainPath + "Neck/Default/neck1.mat"); ShaderReplacment.ReplaceMaterial(temp); neckBody_Default = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Neck/Albino/neck1.mat"); ShaderReplacment.ReplaceMaterial(temp); neckBody_Albino = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Neck/Blue/neck1.mat"); ShaderReplacment.ReplaceMaterial(temp); neckBody_Blue = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Neck/DarkBlue/neck1.mat"); ShaderReplacment.ReplaceMaterial(temp); neckBody_DarkBlue = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Neck/DarkGreen/neck1.mat"); ShaderReplacment.ReplaceMaterial(temp); neckBody_DarkGreen = temp; } private void CreateHareMaterial(Material temp, string mainPath) { temp = assetBundle.LoadAsset<Material>(mainPath + "Hare/Default/Hare_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); hareBody_Default = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Hare/Albino/Hare_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); hareBody_Albino = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Hare/Black/Hare_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); hareBody_Black = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Hare/DarkBlue/Hare_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); hareBody_DarkBlue = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Hare/Ginger/Hare_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); hareBody_Ginger = temp; } private void CreateDrakeMaterial(Material temp, string mainPath) { temp = assetBundle.LoadAsset<Material>(mainPath + "Drake/Default/Hatchling_mountain_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); drakeBody_Default = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Drake/DarkBlue/Hatchling_mountain_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); drakeBody_DarkBlue = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Drake/IceBlue/Hatchling_mountain_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); drakeBody_IceBlue = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Drake/Purple/Hatchling_mountain_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); drakeBody_Purple = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Drake/Red/Hatchling_mountain_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); drakeBody_Red = temp; } private void CreateSerpentMaterials(Material temp, string mainPath) { temp = assetBundle.LoadAsset<Material>(mainPath + "Serpent/Default/SeaSerpent_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); serpentBody_Default = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Serpent/Albino/SeaSerpent_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); serpentBody_Albino = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Serpent/Black/SeaSerpent_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); serpentBody_Black = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Serpent/Blue/SeaSerpent_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); serpentBody_Blue = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Serpent/Green/SeaSerpent_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); serpentBody_Green = temp; temp = assetBundle.LoadAsset<Material>(mainPath + "Serpent/Red/SeaSerpent_mat1.mat"); ShaderReplacment.ReplaceMaterial(temp); serpentBody_Red = temp; } private AssetBundle GetAssetBundleFromResources(string filename) { Assembly executingAssembly = Assembly.GetExecutingAssembly(); string name = executingAssembly.GetManifestResourceNames().Single((string str) => str.EndsWith(filename)); using Stream stream = executingAssembly.GetManifestResourceStream(name); return AssetBundle.LoadFromStream(stream); } } public class MonsterManager { private readonly LevelEffectGenerator levelEffectGenerator = new LevelEffectGenerator(); private List<GameObject> monsters = new List<GameObject>(); private static readonly HashSet<string> VisualNames = new HashSet<string> { "Lox", "Wraith", "TentaRoot", "TheHive", "Hatchling", "GoblinKing", "Eikthyr", "Bonemass", "Frog", "Haugbui", "Greydwarf_Mystic", "Varsvin", "Varsvin_Brute", "Varsvin_Hunter", "SeekerQueen" }; private static readonly HashSet<string> SkipNames = new HashSet<string> { "TheHive", "Haugbui", "Greydwarf_Mystic" }; public void SetupMonsterList(List<GameObject> list) { if (list == null) { Debug.LogWarning((object)"I DID NOT FIND PREFAB LIST!"); monsters = new List<GameObject>(); } else { monsters = list.FindAll((GameObject x) => (Object)(object)x != (Object)null && (Object)(object)x.GetComponent<MonsterAI>() != (Object)null); } } public void ChangeMonsterResistance() { if (monsters == null || monsters.Count == 0) { Debug.LogWarning((object)"I DID NOT FIND ANY MONSTERS!"); return; } foreach (GameObject monster in monsters) { if (!((Object)(object)monster == (Object)null)) { SetupLevelVisual(monster); } } } private void SetupLevelVisual(GameObject gameObject) { if ((Object)(object)gameObject == (Object)null || SkipNames.Contains(((Object)gameObject).name)) { return; } Transform val = gameObject.transform.Find("Visual"); if ((Object)(object)val == (Object)null) { return; } LevelEffects val2 = gameObject.GetComponentInChildren<LevelEffects>(); if (VisualNames.Contains(((Object)gameObject).name)) { Transform val3 = FindSpecialBodyTransform(gameObject); if ((Object)(object)val3 == (Object)null) { return; } SkinnedMeshRenderer component = ((Component)val3).GetComponent<SkinnedMeshRenderer>(); if ((Object)(object)component == (Object)null) { return; } val2 = levelEffectGenerator.CreateLevelEffectAt(val, component); } else if ((Object)(object)val2 == (Object)null) { val2 = levelEffectGenerator.CreateLevelEffectComponent(val); } if ((Object)(object)val2 != (Object)null) { levelEffectGenerator.CreateVisuals(val2); } } private Transform FindSpecialBodyTransform(GameObject gameObject) { switch (((Object)gameObject).name) { case "Lox": return gameObject.transform.Find("Visual/offset/Body"); case "Wraith": return gameObject.transform.Find("Visual/wraith/wraith"); case "TentaRoot": return gameObject.transform.Find("Visual/Tentaroots/Cube.001"); case "Hatchling": return gameObject.transform.Find("Visual/Hatchling_mountain/Hatchling"); case "GoblinKing": return gameObject.transform.Find("Visual/Yagluth"); case "Eikthyr": return gameObject.transform.Find("Visual/Deer"); case "Bonemass": return gameObject.transform.Find("Visual/model/bonemass"); case "Varsvin": case "Varsvin_Brute": case "Varsvin_Hunter": return gameObject.transform.Find("Visual/Body"); case "Frog": return gameObject.transform.Find("Visual/Frog2_mesh"); case "SeekerQueen": return gameObject.transform.Find("Visual/Cube"); default: return null; } } }