Please disclose if your mod was created primarily 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 cultist armor v1.0.7
plugins/BalrondCultistArmor.dll
Decompiled 2 years 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 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("ValheimReforgedWeapons")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ValheimReforgedWeapons")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("108df065-3a24-4888-8a60-cf793a69379c")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace BalrondCultistArmor; [BepInPlugin("balrond.astafaraios.BalrondCultistArmor", "BalrondCultistArmor", "1.0.7")] public class Launch : BaseUnityPlugin { [HarmonyPatch(typeof(ZNetScene), "Awake")] public static class ZNetScene_Awake_Path { public static void Prefix(ZNetScene __instance) { //IL_0172: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)__instance == (Object)null) { return; } foreach (GameObject newPrefab2 in vfxList) { if (!Object.op_Implicit((Object)(object)__instance.m_prefabs.Find((GameObject x) => ((Object)x).name == ((Object)newPrefab2).name))) { __instance.m_prefabs.Add(newPrefab2); } } foreach (GameObject newPrefab in prefabs) { if (!Object.op_Implicit((Object)(object)__instance.m_prefabs.Find((GameObject x) => ((Object)x).name == ((Object)newPrefab).name))) { __instance.m_prefabs.Add(newPrefab); } } if (!hasSpawned) { GameObject val = createUlvMInion(__instance); GameObject val2 = vfxList.Find((GameObject x) => ((Object)x).name == "staff_ulv_spawn"); val2.GetComponent<SpawnAbility>().m_spawnPrefab[0] = val; setIronHook(__instance); monsterManager.setupMonsters(__instance.m_prefabs, __instance.m_prefabs); if (!new ZNet().IsDedicated()) { ShaderReplacment.runMaterialFix(); hasSpawned = true; } } } } [HarmonyPatch(typeof(ObjectDB), "CopyOtherDB")] public static class Object_CopyOtherDB_Path { public static void Postfix() { if (!IsObjectDBValid()) { return; } foreach (StatusEffect statusEffect in statusEffects) { AddStatus(statusEffect); } foreach (GameObject prefab in prefabs) { AddNewPrefab(prefab); } } } [HarmonyPatch(typeof(ObjectDB), "Awake")] public static class Object_Awake_Path { public static void Postfix() { if (!IsObjectDBValid()) { return; } foreach (StatusEffect statusEffect in statusEffects) { AddStatus(statusEffect); } foreach (GameObject prefab in prefabs) { AddNewPrefab(prefab); } recipes.AddRange(recipeBuilder.createRecipes(ObjectDB.instance.m_items, prefabs)); foreach (Recipe recipe in recipes) { AddRecipe(recipe); } } } private readonly Harmony harmony = new Harmony("balrond.astafaraios.BalrondCultistArmor"); public const string PluginGUID = "balrond.astafaraios.BalrondCultistArmor"; public const string PluginName = "BalrondCultistArmor"; public const string PluginVersion = "1.0.7"; private static AssetBundle assetBundle; private static readonly string bundleName = "cultistset"; private static List<GameObject> prefabs = new List<GameObject>(); private static List<GameObject> buildPieces = new List<GameObject>(); private static List<GameObject> vfxList = new List<GameObject>(); private static List<StatusEffect> statusEffects = new List<StatusEffect>(); public static RecipeBuilder recipeBuilder = new RecipeBuilder(); public static MonsterManager monsterManager = new MonsterManager(); public static List<Recipe> recipes = new List<Recipe>(); public static GameObject RootObject; public static GameObject PrefabContainer; public static bool hasSpawned = false; private static readonly string[] prefabNames = new string[5] { "ArmorCultistChest", "ArmorCultistLegs", "CapeCultist", "CursedHand", "HelmetCultist" }; private static readonly string[] resourceNames = new string[4] { "CultInsygnia", "CorruptedEitr", "FenringMeat", "FenringMeatCooked" }; private static readonly string[] vfxNames = new string[1] { "staff_ulv_spawn" }; public static Sprite iconSpirit = null; public static void createPrefabContainer() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown RootObject = new GameObject("_ValheimReforgedRoot"); Object.DontDestroyOnLoad((Object)(object)RootObject); PrefabContainer = new GameObject("Prefabs"); PrefabContainer.transform.parent = RootObject.transform; PrefabContainer.SetActive(false); } public static GameObject cloneMe(GameObject source, string name) { GameObject val = Object.Instantiate<GameObject>(source, PrefabContainer.transform); ((Object)val).name = name; val = fixMaterials(val, source); val.SetActive(true); return val; } public static GameObject fixMaterials(GameObject clone, GameObject source) { MeshRenderer[] componentsInChildren = source.GetComponentsInChildren<MeshRenderer>(); foreach (MeshRenderer val in componentsInChildren) { MeshRenderer[] componentsInChildren2 = clone.GetComponentsInChildren<MeshRenderer>(); foreach (MeshRenderer val2 in componentsInChildren2) { if (((Object)val).name == ((Object)val2).name) { ((Renderer)val2).materials = ((Renderer)val).sharedMaterials; ((Renderer)val2).sharedMaterials = ((Renderer)val).sharedMaterials; break; } } } return clone; } private void Awake() { init(); } private void init() { createPrefabContainer(); LoadAllAssetBundles(); harmony.PatchAll(); } private void OnDestroy() { harmony.UnpatchSelf(); } public static void LoadAllAssetBundles() { assetBundle = GetAssetBundleFromResources(bundleName); LoadPrefabs(assetBundle); } public static 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); } private static void LoadPrefabs(AssetBundle assetBundle) { iconSpirit = assetBundle.LoadAsset<Sprite>("Assets/Custom/BalrondFenringCultist/ico/spiritburn1.png"); string[] array = vfxNames; foreach (string text in array) { GameObject val = assetBundle.LoadAsset<GameObject>("Assets/Custom/BalrondFenringCultist/" + text + ".prefab"); val.SetActive(true); ShaderReplacment.Replace(val); vfxList.Add(val); } string[] array2 = resourceNames; foreach (string text2 in array2) { GameObject val2 = assetBundle.LoadAsset<GameObject>("Assets/Custom/BalrondFenringCultist/" + text2 + ".prefab"); val2.SetActive(true); ShaderReplacment.Replace(val2); prefabs.Add(val2); } string[] array3 = prefabNames; foreach (string text3 in array3) { GameObject val3 = assetBundle.LoadAsset<GameObject>("Assets/Custom/BalrondFenringCultist/" + text3 + ".prefab"); if (((Object)val3).name == "HelmetCultist") { val3.GetComponent<ItemDrop>().m_itemData.m_shared.m_name = "Cultist Hood"; } val3.SetActive(true); ShaderReplacment.Replace(val3); prefabs.Add(val3); } ItemDrop component = prefabs.Find((GameObject x) => ((Object)x).name == "CapeCultist").GetComponent<ItemDrop>(); statusEffects.Add(component.m_itemData.m_shared.m_setStatusEffect); } public static void setIronHook(ZNetScene zNetScene) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown GameObject val = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "piece_cookingstation_iron"); ItemConversion val2 = new ItemConversion(); val2.m_from = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "FenringMeat").GetComponent<ItemDrop>(); val2.m_to = zNetScene.m_prefabs.Find((GameObject x) => ((Object)x).name == "FenringMeatCooked").GetComponent<ItemDrop>(); val2.m_cookTime = 40f; if ((Object)(object)val != (Object)null) { CookingStation component = val.GetComponent<CookingStation>(); component.m_conversion.Add(val2); } } public static void addConsumeFood(MonsterAI monsterAI, ZNetScene __instance, string name) { monsterAI.m_consumeItems.Add(__instance.m_prefabs.Find((GameObject x) => ((Object)x).name == "BugMeat").GetComponent<ItemDrop>()); } public static GameObject createUlvMInion(ZNetScene __instance) { //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) GameObject val = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == "Ulv"); GameObject val2 = cloneMe(val, "Ulv_minion"); GameObject val3 = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == "Skeleton_Friendly"); MonsterAI component = val.GetComponent<MonsterAI>(); addConsumeFood(component, __instance, "BugMeat"); addConsumeFood(component, __instance, "ChickenMeat"); addConsumeFood(component, __instance, "CookedBugMeat"); addConsumeFood(component, __instance, "CookedChickenMeat"); addConsumeFood(component, __instance, "CookedDeerMeat"); addConsumeFood(component, __instance, "CookedMeat"); addConsumeFood(component, __instance, "DeerMeat"); addConsumeFood(component, __instance, "CookedWolfMeat"); addConsumeFood(component, __instance, "CookedHareMeat"); addConsumeFood(component, __instance, "CookedLoxMeat"); addConsumeFood(component, __instance, "HareMeat"); addConsumeFood(component, __instance, "LoxMeat"); ((Character)val.GetComponent<Humanoid>()).m_health = 300f; Tameable val4 = val2.AddComponent<Tameable>(); Tameable component2 = val3.GetComponent<Tameable>(); val4.m_commandable = true; val4.m_startsTamed = true; val4.m_fedDuration = component2.m_fedDuration; val4.m_petEffect = component2.m_petEffect; val4.m_sootheEffect = component2.m_sootheEffect; val4.m_tamedEffect = component2.m_tamedEffect; val4.m_unsummonDistance = component2.m_unsummonDistance; val4.m_unSummonEffect = component2.m_unSummonEffect; val4.m_tamingTime = component2.m_tamingTime; val4.m_unsummonOnOwnerLogoutSeconds = component2.m_unsummonOnOwnerLogoutSeconds; val4.m_levelUpOwnerSkill = component2.m_levelUpOwnerSkill; val4.m_levelUpFactor = component2.m_levelUpFactor; Object.Destroy((Object)(object)val2.GetComponent<CharacterDrop>()); __instance.m_prefabs.Add(val2); return val2; } private static 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 static void AddRecipe(Recipe recipe) { int num = ObjectDB.instance.m_recipes.RemoveAll((Recipe x) => ((Object)x).name == ((Object)recipe).name); if (num > 0) { Debug.Log((object)$"Recipe ({((Object)recipe).name}): {num} instances removed."); } ObjectDB.instance.m_recipes.Add(recipe); Debug.Log((object)("Recipe (" + ((Object)recipe).name + ") added.")); } private static void AddNewPrefab(GameObject newPrefab) { 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[StringExtensionMethods.GetStableHashCode(((Object)newPrefab).name)] = newPrefab; Debug.Log((object)(((Object)newPrefab).name + " - Added to the Game")); } else { Debug.LogWarning((object)(((Object)newPrefab).name + " - ItemDrop already exists")); } } else { Debug.LogError((object)(((Object)newPrefab).name + " - ItemDrop not found on prefab")); } } private static 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); Debug.Log((object)(((Object)status).name + " - Status Added to the Game")); } } else { Debug.LogError((object)(((Object)status).name + " - Status not found")); } } } public class MonsterManager { private List<GameObject> monsters; private List<GameObject> list; private List<GameObject> list2; private string[] names = new string[0]; private string[] thiefName = new string[14] { "Greyling", "Greydwarf", "Greydwarf_Elite", "Draugr", "Draugr_Elite", "Draugr_Ranged", "Skeleton", "Skeleton_NoArcher", "Skeleton_Poison", "Forsaken", "GoblinBrute", "GoblinArcher", "Goblin", "GoblinShaman" }; public void setPlayerResistance(GameObject player) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) Humanoid component = player.GetComponent<Humanoid>(); ((Character)component).m_damageModifiers.m_spirit = (DamageModifier)0; } public void setupMonsters(List<GameObject> list, List<GameObject> newItemList) { if (list == null) { Debug.LogWarning((object)"I DID NOT FOUND PREFAB LIST!"); return; } this.list = list; list2 = newItemList; monsters = list.FindAll((GameObject x) => (Object)(object)x.GetComponent<MonsterAI>() != (Object)null); if (monsters == null) { Debug.LogWarning((object)"I DID NOT FOUND ANY MONSTERS!"); } else { changeMonsterDrops(); } } private void changeMonsterDrops() { string[] array = new string[3] { "Ulv", "Fenring", "Fenring_Cultist" }; string[] array2 = array; foreach (string name in array2) { GameObject val = monsters.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val != (Object)null) { monsterLootChange(val); } } } private void monsterLootChange(GameObject monster) { switch (((Object)monster).name) { case "Ulv": addItemToLootTable(monster, "FenringMeat", 1, 1, 0.15f); addItemToLootTable(monster, "WolfHairBundle", 1, 1, 0.25f); addItemToLootTable(monster, "WolfClaw", 1, 1, 0.15f); break; case "Fenring": addItemToLootTable(monster, "FenringMeat", 1, 1, 0.33f); addItemToLootTable(monster, "CultInsygnia", 1, 1, 0.05f); addItemToLootTable(monster, "CorruptedEitr", 1, 2, 0.15f); addItemToLootTable(monster, "WolfHairBundle", 1, 1, 0.2f); addItemToLootTable(monster, "WolfClaw", 1, 1, 0.2f); break; case "Fenring_Cultist": addItemToLootTable(monster, "FenringMeat", 1, 1, 0.33f); addItemToLootTable(monster, "CorruptedEitr", 2, 5, 0.7f); addItemToLootTable(monster, "CultInsygnia", 1, 2, 0.1f); addItemToLootTable(monster, "WolfHairBundle", 1, 1, 0.2f); break; } } private void addItemToLootTable(GameObject monster, string itemName, int amountMin, int amountMax, float chance) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown CharacterDrop component = monster.GetComponent<CharacterDrop>(); Drop val = new Drop(); val.m_amountMin = amountMin; val.m_amountMax = amountMax; val.m_chance = chance; val.m_levelMultiplier = false; GameObject prefab = FindItem(itemName); val.m_prefab = prefab; component.m_drops.Add(val); } private void changeMonsterResistance() { foreach (GameObject monster in monsters) { Humanoid component = monster.GetComponent<Humanoid>(); if ((Object)(object)component != (Object)null) { changeResistanceForException(component); } } } private GameObject FindItem(string name) { GameObject val = list.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val == (Object)null) { val = list2.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val != (Object)null) { return val; } Debug.LogWarning((object)("Item Not Found - " + name + ", Replaced With Wood")); return list.Find((GameObject x) => ((Object)x).name == "Wood"); } if ((Object)(object)val != (Object)null) { return val; } Debug.LogWarning((object)("Item Not Found - " + name + ", Replaced With Wood")); return list.Find((GameObject x) => ((Object)x).name == "Wood"); } private CraftingStation FindStation(string name) { GameObject val = FindItem(name); if ((Object)(object)val != (Object)null) { return val.GetComponent<CraftingStation>(); } return null; } private void changeSpiritResistance(Humanoid humanoid) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected I4, but got Unknown //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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) Faction faction = ((Character)humanoid).m_faction; Faction val = faction; switch (val - 1) { case 0: ((Character)humanoid).m_damageModifiers.m_spirit = (DamageModifier)0; break; case 1: ((Character)humanoid).m_damageModifiers.m_spirit = (DamageModifier)1; break; case 5: ((Character)humanoid).m_damageModifiers.m_spirit = (DamageModifier)5; break; case 2: ((Character)humanoid).m_damageModifiers.m_spirit = (DamageModifier)2; break; case 3: ((Character)humanoid).m_damageModifiers.m_spirit = (DamageModifier)2; break; case 6: ((Character)humanoid).m_damageModifiers.m_spirit = (DamageModifier)1; break; case 4: ((Character)humanoid).m_damageModifiers.m_spirit = (DamageModifier)5; break; case 8: ((Character)humanoid).m_damageModifiers.m_spirit = (DamageModifier)5; break; case 7: break; } } private void changeResistanceForException(Humanoid humanoid) { changeSpiritResistance(humanoid); } } 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 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) { 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 RecipeBuilder { private List<GameObject> pieces; private List<GameObject> items; private List<GameObject> newItems; public List<Recipe> recipes; private string[] toRecipe = new string[6] { "ArmorCultistChest", "ArmorCultistLegs", "CapeCultist", "CursedHand", "HelmetCultist", "CultInsygnia" }; private string[] itemEditNames = new string[18] { "SeekerAspic", "YggdrasilPorridge", "MagicallyStuffedShroom", "MushroomOmelette", "draugr_sword", "draugr_bow", "draugr_axe", "skeleton_bow", "skeleton_mace", "skeleton_sword2", "skeleton_bow2", "skeleton_sword2", "imp_fireball_attack", "Ghost_attack", "gd_king_shoot", "Greydwarf_shaman_attack", "GoblinKing_Beam", "GoblinShaman_attack_fireball" }; private void editItems() { string[] array = itemEditNames; foreach (string text in array) { GameObject val = FindItem(text); if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)("Could not find: " + text)); } else { CheckStats(val); } } } private void CheckStats(GameObject gameObject) { switch (((Object)gameObject).name) { case "SeekerAspic": editFoodStat(gameObject, 125, 60, 150); break; case "YggdrasilPorridge": editFoodStat(gameObject, 120, 120, 150); break; case "StuffedMmushroom": editFoodStat(gameObject, 110, 80, 150); break; case "MushroomOmlette": editFoodStat(gameObject, 85, 150, 150); break; case "draugr_sword": editSpiritDamageStat(gameObject, 25); break; case "draugr_bow": editSpiritDamageStat(gameObject, 15); break; case "draugr_axe": editSpiritDamageStat(gameObject, 15); break; case "skeleton_bow": case "skeleton_sword": case "Ghost_attack": editSpiritDamageStat(gameObject, 10); break; case "skeleton_bow2": case "skeleton_mace": case "skeleton_sword2": case "gd_king_shoot": case "Greydwarf_shaman_attack": case "GoblinKing_Beam": case "GoblinShaman_attack_fireball": editSpiritDamageStat(gameObject, 20); break; case "imp_fireball_attack": editSpiritDamageStat(gameObject, 10); break; } } private void editSpiritDamageStat(GameObject gameObject, int spiritDamage) { ItemDrop component = gameObject.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_damages.m_spirit = spiritDamage; if (((Object)gameObject).name == "skeleton_mace" || ((Object)gameObject).name == "imp_fireball_attack") { component.m_itemData.m_shared.m_damages.m_blunt += spiritDamage; } } private void editFoodStat(GameObject gameObject, int hp, int stam, int eitr) { ItemDrop component = gameObject.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_food = hp; component.m_itemData.m_shared.m_foodStamina = stam; component.m_itemData.m_shared.m_foodEitr = eitr; } public List<Recipe> createRecipes(List<GameObject> items, List<GameObject> newItems) { this.items = items; this.newItems = newItems; pieces = items.Find((GameObject x) => ((Object)x).name == "Hammer").GetComponent<ItemDrop>().m_itemData.m_shared.m_buildPieces.m_pieces; List<Recipe> list = new List<Recipe>(); CraftingStation component = pieces.Find((GameObject x) => ((Object)x).name == "forge").GetComponent<CraftingStation>(); int minStationLevel = 3; foreach (GameObject newItem in newItems) { if (toRecipe.Contains(((Object)newItem).name)) { Recipe val = ScriptableObject.CreateInstance<Recipe>(); val.m_craftingStation = component; val.m_repairStation = component; val.m_minStationLevel = minStationLevel; val = createResources(newItem, val); list.Add(val); } } list.Add(createCorruptedEitrRecipe()); return list; } private Recipe createCorruptedEitrRecipe() { Recipe val = ScriptableObject.CreateInstance<Recipe>(); val.m_craftingStation = FindStation(pieces, "piece_magetable"); ((Object)val).name = "Recipe_CorruptedEitr"; val.m_repairStation = val.m_craftingStation; val.m_enabled = true; val.m_amount = 3; val.m_minStationLevel = 1; val.m_item = FindItem("Eitr").GetComponent<ItemDrop>(); List<Requirement> list = new List<Requirement>(); list.Add(createReq("Thistle", 2, 0)); list.Add(createReq("DragonTear", 1, 0)); list.Add(createReq("CorruptedEitr", 5, 0)); val.m_resources = list.ToArray(); return val; } private Recipe createResources(GameObject item, Recipe newRecipe) { ((Object)newRecipe).name = "Recipe_" + ((Object)item).name; newRecipe.m_item = item.GetComponent<ItemDrop>(); newRecipe.m_amount = 1; newRecipe.m_enabled = true; List<Requirement> list = new List<Requirement>(); CraftingStation craftingStation = FindStation(pieces, "piece_workbench"); switch (((Object)item).name) { case "ArmorCultistChest": newRecipe.m_craftingStation = craftingStation; newRecipe.m_minStationLevel = 2; list.Add(createReq("JuteRed", 4, 2)); list.Add(createReq("WolfPelt", 3, 2)); list.Add(createReq("CultInsygnia", 5, 3)); list.Add(createReq("LeatherScraps", 20, 10)); break; case "ArmorCultistLegs": newRecipe.m_craftingStation = craftingStation; newRecipe.m_minStationLevel = 2; list.Add(createReq("JuteRed", 4, 2)); list.Add(createReq("CultInsygnia", 5, 1)); list.Add(createReq("WolfPelt", 5, 2)); list.Add(createReq("LeatherScraps", 20, 10)); break; case "CapeCultist": newRecipe.m_craftingStation = craftingStation; newRecipe.m_minStationLevel = 2; list.Add(createReq("JuteRed", 3, 3)); list.Add(createReq("WolfPelt", 5, 2)); list.Add(createReq("LeatherScraps", 0, 12)); list.Add(createReq("TrophyUlv", 2, 1)); break; case "CursedHand": newRecipe.m_craftingStation = craftingStation; newRecipe.m_minStationLevel = 2; list.Add(createReq("CorruptedEitr", 4, 2)); list.Add(createReq("CultInsygnia", 2, 1)); list.Add(createReq("TrophyFenring", 1, 1)); list.Add(createReq("TrophyUlv", 2, 1)); break; case "CultInsygnia": newRecipe.m_craftingStation = craftingStation; newRecipe.m_minStationLevel = 2; list.Add(createReq("WolfClaw", 2, 0)); list.Add(createReq("WolfFang", 2, 0)); list.Add(createReq("Iron", 2, 0)); list.Add(createReq("WolfHairBundle", 1, 0)); break; case "HelmetCultist": newRecipe.m_craftingStation = craftingStation; newRecipe.m_minStationLevel = 2; list.Add(createReq("TrophyCultist", 1, 1)); list.Add(createReq("JuteRed", 3, 2)); list.Add(createReq("CultInsygnia", 2, 1)); list.Add(createReq("CorruptedEitr", 4, 2)); break; } newRecipe.m_resources = list.ToArray(); return newRecipe; } private Requirement createReq(string name, int amount, int amountPerLevel) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown Requirement val = new Requirement(); val.m_recover = true; ItemDrop component = items.Find((GameObject x) => ((Object)x).name == name).GetComponent<ItemDrop>(); val.m_resItem = component; val.m_amount = amount; val.m_amountPerLevel = amountPerLevel; return val; } private GameObject FindItem(string name) { GameObject val = items.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val == (Object)null) { val = newItems.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val != (Object)null) { return val; } Debug.LogWarning((object)("Item Not Found - " + name + ", Replaced With Wood")); return items.Find((GameObject x) => ((Object)x).name == "Wood"); } if ((Object)(object)val != (Object)null) { return val; } Debug.LogWarning((object)("Item Not Found - " + name + ", Replaced With Wood")); return items.Find((GameObject x) => ((Object)x).name == "Wood"); } private CraftingStation FindStation(List<GameObject> list, string name) { GameObject val = list.Find((GameObject x) => ((Object)x).name == name); if ((Object)(object)val != (Object)null) { return val.GetComponent<CraftingStation>(); } return null; } }