Decompiled source of ValheimCuisine v2.1.9
ValheimCuisine.dll
Decompiled a week ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using CreatureManager; using HarmonyLib; using ItemManager; using JetBrains.Annotations; using LocalizationManager; using Microsoft.CodeAnalysis; using PieceManager; using ServerSync; using TMPro; using UnityEngine; using UnityEngine.UI; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Core.Tokens; using YamlDotNet.Helpers; using YamlDotNet.Serialization; using YamlDotNet.Serialization.BufferedDeserialization; using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators; using YamlDotNet.Serialization.Converters; using YamlDotNet.Serialization.EventEmitters; using YamlDotNet.Serialization.NamingConventions; using YamlDotNet.Serialization.NodeDeserializers; using YamlDotNet.Serialization.NodeTypeResolvers; using YamlDotNet.Serialization.ObjectFactories; using YamlDotNet.Serialization.ObjectGraphTraversalStrategies; using YamlDotNet.Serialization.ObjectGraphVisitors; using YamlDotNet.Serialization.Schemas; using YamlDotNet.Serialization.TypeInspectors; using YamlDotNet.Serialization.TypeResolvers; using YamlDotNet.Serialization.Utilities; using YamlDotNet.Serialization.ValueDeserializers; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("ValheimCuisine")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyProduct("ValheimCuisine")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("E0E2F92E-557C-4A05-9D89-AA92A0BD75C4")] [assembly: AssemblyFileVersion("2.1.9")] [assembly: AssemblyCompany("XutzBR")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("2.1.9.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<6af8e642-bf72-4a2b-ad24-b42695e48710>Embedded] internal sealed class <6af8e642-bf72-4a2b-ad24-b42695e48710>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] [<6af8e642-bf72-4a2b-ad24-b42695e48710>Embedded] [CompilerGenerated] internal sealed class <2a4a1169-5495-481c-80ef-84438e1fc47b>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <2a4a1169-5495-481c-80ef-84438e1fc47b>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <2a4a1169-5495-481c-80ef-84438e1fc47b>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] [<6af8e642-bf72-4a2b-ad24-b42695e48710>Embedded] [CompilerGenerated] internal sealed class <9978fd04-0aae-4412-8ace-26389168e076>NullableContextAttribute : Attribute { public readonly byte Flag; public <9978fd04-0aae-4412-8ace-26389168e076>NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace ValheimCuisine { [BepInPlugin("XutzBR.ValheimCuisine", "ValheimCuisine", "2.1.9")] [<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(1)] [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] public class ValheimCuisinePlugin : BaseUnityPlugin { [<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(0)] public enum Toggle { On = 1, Off = 0 } [HarmonyPatch(typeof(ZNetScene), "Awake")] [<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(0)] private static class TheFarmerZNetScene_AwakePost_Patch { [<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(1)] private static void Postfix(ZNetScene __instance) { //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Expected O, but got Unknown //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Expected O, but got Unknown //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Expected O, but got Unknown //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Expected O, but got Unknown //IL_02bf: Unknown result type (might be due to invalid IL or missing references) //IL_02c4: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Unknown result type (might be due to invalid IL or missing references) //IL_02ec: Unknown result type (might be due to invalid IL or missing references) //IL_030e: Expected O, but got Unknown //IL_0349: Unknown result type (might be due to invalid IL or missing references) //IL_034e: Unknown result type (might be due to invalid IL or missing references) //IL_0359: Unknown result type (might be due to invalid IL or missing references) //IL_0376: Unknown result type (might be due to invalid IL or missing references) //IL_0398: Expected O, but got Unknown //IL_03d3: Unknown result type (might be due to invalid IL or missing references) //IL_03d8: Unknown result type (might be due to invalid IL or missing references) //IL_03df: Unknown result type (might be due to invalid IL or missing references) //IL_03fc: Unknown result type (might be due to invalid IL or missing references) //IL_041e: Expected O, but got Unknown if ((Object)(object)__instance == (Object)null) { return; } List<GameObject> prefabs = __instance.m_prefabs; if (prefabs == null || prefabs.Count <= 0) { return; } CookingStation component = __instance.GetPrefab("piece_cookingstation").GetComponent<CookingStation>(); CookingStation component2 = __instance.GetPrefab("piece_cookingstation_iron").GetComponent<CookingStation>(); CookingStation component3 = __instance.GetPrefab("piece_oven").GetComponent<CookingStation>(); Fermenter component4 = __instance.GetPrefab("fermenter").GetComponent<Fermenter>(); foreach (KeyValuePair<GameObject, GameObject> item in VC_Station_Normal) { component.m_conversion.Add(new ItemConversion { m_cookTime = 40f, m_from = __instance.GetPrefab(((Object)item.Key).name).GetComponent<ItemDrop>(), m_to = __instance.GetPrefab(((Object)item.Value).name).GetComponent<ItemDrop>() }); } foreach (KeyValuePair<GameObject, GameObject> item2 in VC_Station_Iron_40) { component2.m_conversion.Add(new ItemConversion { m_cookTime = 40f, m_from = __instance.GetPrefab(((Object)item2.Key).name).GetComponent<ItemDrop>(), m_to = __instance.GetPrefab(((Object)item2.Value).name).GetComponent<ItemDrop>() }); } foreach (KeyValuePair<GameObject, GameObject> item3 in VC_Station_Iron_60) { component2.m_conversion.Add(new ItemConversion { m_cookTime = 60f, m_from = __instance.GetPrefab(((Object)item3.Key).name).GetComponent<ItemDrop>(), m_to = __instance.GetPrefab(((Object)item3.Value).name).GetComponent<ItemDrop>() }); } foreach (KeyValuePair<GameObject, GameObject> item4 in VC_Oven_50) { component3.m_conversion.Add(new ItemConversion { m_cookTime = 50f, m_from = __instance.GetPrefab(((Object)item4.Key).name).GetComponent<ItemDrop>(), m_to = __instance.GetPrefab(((Object)item4.Value).name).GetComponent<ItemDrop>() }); } foreach (KeyValuePair<GameObject, GameObject> item5 in VC_Oven_60) { component3.m_conversion.Add(new ItemConversion { m_cookTime = 60f, m_from = __instance.GetPrefab(((Object)item5.Key).name).GetComponent<ItemDrop>(), m_to = __instance.GetPrefab(((Object)item5.Value).name).GetComponent<ItemDrop>() }); } foreach (KeyValuePair<GameObject, GameObject> item6 in VC_Oven_80) { component3.m_conversion.Add(new ItemConversion { m_cookTime = 80f, m_from = __instance.GetPrefab(((Object)item6.Key).name).GetComponent<ItemDrop>(), m_to = __instance.GetPrefab(((Object)item6.Value).name).GetComponent<ItemDrop>() }); } foreach (KeyValuePair<GameObject, GameObject> item7 in VC_Fermenter) { component4.m_conversion.Add(new ItemConversion { m_producedItems = 6, m_from = __instance.GetPrefab(((Object)item7.Key).name).GetComponent<ItemDrop>(), m_to = __instance.GetPrefab(((Object)item7.Value).name).GetComponent<ItemDrop>() }); } } } [HarmonyPatch(typeof(ZNetScene), "Awake")] [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] public static class GullDropsPatch { public static void Postfix(ZNetScene __instance) { GameObject prefab = __instance.GetPrefab("Seagal"); if ((Object)(object)prefab == (Object)null) { Debug.LogWarning((object)"[BirdDroppings] Seagal prefab not found."); return; } DropOnDestroyed component = prefab.GetComponent<DropOnDestroyed>(); if ((Object)(object)component == (Object)null) { Debug.LogWarning((object)"[BirdDroppings] Seagal has no DropOnDestroyed component."); return; } AddDrop(component, "VC_BirdMeat", 1, 1, 1f); component.m_dropWhenDestroyed.m_dropMin = component.m_dropWhenDestroyed.m_drops.Count; component.m_dropWhenDestroyed.m_dropMax = component.m_dropWhenDestroyed.m_drops.Count; component.m_dropWhenDestroyed.m_oneOfEach = true; Debug.Log((object)$"[BirdDroppings] Seagal will now drop {component.m_dropWhenDestroyed.m_drops.Count} items every time."); } private static void AddDrop(DropOnDestroyed seagalDrop, string itemName, int min, int max, float weight) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(itemName); if ((Object)(object)itemPrefab == (Object)null) { Debug.LogWarning((object)("[BirdDroppings] Item prefab '" + itemName + "' not found.")); return; } DropData val = default(DropData); val.m_item = itemPrefab; val.m_stackMin = min; val.m_stackMax = max; val.m_weight = weight; DropData item = val; seagalDrop.m_dropWhenDestroyed.m_drops.Add(item); Debug.Log((object)$"[BirdDroppings] Added {itemName} x{min}-{max} to Seagal drops."); } } [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] [HarmonyPatch(typeof(ZNetScene), "Awake")] public static class CrowDropsPatch { public static void Postfix(ZNetScene __instance) { GameObject prefab = __instance.GetPrefab("Crow"); if ((Object)(object)prefab == (Object)null) { Debug.LogWarning((object)"[BirdDroppings] Crow prefab not found."); return; } DropOnDestroyed component = prefab.GetComponent<DropOnDestroyed>(); if ((Object)(object)component == (Object)null) { Debug.LogWarning((object)"[BirdDroppings] Crow has no DropOnDestroyed component."); return; } AddDrop(component, "VC_BirdMeat", 1, 1, 1f); component.m_dropWhenDestroyed.m_dropMin = component.m_dropWhenDestroyed.m_drops.Count; component.m_dropWhenDestroyed.m_dropMax = component.m_dropWhenDestroyed.m_drops.Count; component.m_dropWhenDestroyed.m_oneOfEach = true; Debug.Log((object)$"[BirdDroppings] Crow will now drop {component.m_dropWhenDestroyed.m_drops.Count} items every time."); } private static void AddDrop(DropOnDestroyed crowDrop, string itemName, int min, int max, float weight) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(itemName); if ((Object)(object)itemPrefab == (Object)null) { Debug.LogWarning((object)("[BirdDroppings] Item prefab '" + itemName + "' not found.")); return; } DropData val = default(DropData); val.m_item = itemPrefab; val.m_stackMin = min; val.m_stackMax = max; val.m_weight = weight; DropData item = val; crowDrop.m_dropWhenDestroyed.m_drops.Add(item); Debug.Log((object)$"[BirdDroppings] Added {itemName} x{min}-{max} to Crow drops."); } } [HarmonyPatch(typeof(ZNetScene), "Awake")] [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] public static class ashcrowDropsPatch { public static void Postfix(ZNetScene __instance) { GameObject prefab = __instance.GetPrefab("AshCrow"); if ((Object)(object)prefab == (Object)null) { Debug.LogWarning((object)"[BirdDroppings] AshCrow prefab not found."); return; } DropOnDestroyed component = prefab.GetComponent<DropOnDestroyed>(); if ((Object)(object)component == (Object)null) { Debug.LogWarning((object)"[BirdDroppings] AshCrow has no DropOnDestroyed component."); return; } AddDrop(component, "VC_BirdMeat", 1, 1, 1f); component.m_dropWhenDestroyed.m_dropMin = component.m_dropWhenDestroyed.m_drops.Count; component.m_dropWhenDestroyed.m_dropMax = component.m_dropWhenDestroyed.m_drops.Count; component.m_dropWhenDestroyed.m_oneOfEach = true; Debug.Log((object)$"[BirdDroppings] AshCrow will now drop {component.m_dropWhenDestroyed.m_drops.Count} items every time."); } private static void AddDrop(DropOnDestroyed ashcrowDrop, string itemName, int min, int max, float weight) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(itemName); if ((Object)(object)itemPrefab == (Object)null) { Debug.LogWarning((object)("[BirdDroppings] Item prefab '" + itemName + "' not found.")); return; } DropData val = default(DropData); val.m_item = itemPrefab; val.m_stackMin = min; val.m_stackMax = max; val.m_weight = weight; DropData item = val; ashcrowDrop.m_dropWhenDestroyed.m_drops.Add(item); Debug.Log((object)$"[BirdDroppings] Added {itemName} x{min}-{max} to AshCrow drops."); } } [HarmonyPatch(typeof(ZNetScene), "Awake")] [<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(0)] public static class GrimpyPatch { [<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(1)] private static void Postfix(ZNetScene __instance) { if ((Object)(object)__instance == (Object)null) { return; } List<GameObject> prefabs = __instance.m_prefabs; if (prefabs == null || prefabs.Count <= 0) { return; } GameObject prefab = __instance.GetPrefab("VC_VolvaCauldron_ext4"); if ((Object)(object)prefab != (Object)null) { Piece componentInChildren = prefab.GetComponentInChildren<Piece>(); GameObject val = (((Object)(object)componentInChildren != (Object)null) ? ((Component)componentInChildren).gameObject : prefab); if ((Object)(object)val.GetComponent<GrimpyInteraction>() == (Object)null) { val.AddComponent<GrimpyInteraction>(); ValheimCuisineLogger.LogInfo((object)("GrimpyInteraction component added to " + ((Object)val).name)); } if ((Object)(object)val.GetComponent<ZNetView>() == (Object)null) { val.AddComponent<ZNetView>(); ValheimCuisineLogger.LogInfo((object)("ZNetView component added to " + ((Object)val).name)); } } else { ValheimCuisineLogger.LogWarning((object)"Could not find VC_VolvaCauldron_ext4 prefab"); } } } [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] public class GrimpyInteraction : MonoBehaviour, Interactable, Hoverable { private ZNetView m_nview = null; private static ConfigEntry<float> _GrimpyInteractionCooldown = null; private static ConfigEntry<int> _GrimpyMinEctoplasm = null; private static ConfigEntry<int> _GrimpyMaxEctoplasm = null; [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(new byte[] { 1, 0, 1 })] private static readonly List<(string itemName, int minAmount, int maxAmount)> possibleDrops = new List<(string, int, int)> { ("Ectoplasm", 2, 5) }; public static void InitializeConfig(ConfigFile config, ConfigSync configSync) { _GrimpyInteractionCooldown = config.Bind<float>("Grimpy", "Grimpy Cooldown Time", 1800f, "Cooldown time in seconds between Grimpy interactions."); _GrimpyMinEctoplasm = config.Bind<int>("Grimpy", "Min Ectoplasm Amount", 2, "Minimum amount of Ectoplasm that Grimpy can drop."); _GrimpyMaxEctoplasm = config.Bind<int>("Grimpy", "Max Ectoplasm Amount", 5, "Maximum amount of Ectoplasm that Grimpy can drop."); configSync.AddConfigEntry<float>(_GrimpyInteractionCooldown); configSync.AddConfigEntry<int>(_GrimpyMinEctoplasm); configSync.AddConfigEntry<int>(_GrimpyMaxEctoplasm); } private void Awake() { m_nview = ((Component)this).GetComponent<ZNetView>(); if ((Object)(object)m_nview == (Object)null) { m_nview = ((Component)this).gameObject.AddComponent<ZNetView>(); } ValheimCuisineLogger.LogInfo((object)("GrimpyInteraction Awake called on " + ((Object)((Component)this).gameObject).name)); } private string GetPlayerCooldownKey(long playerID) { return $"playerCooldown_{playerID}"; } private float GetPlayerLastInteraction(long playerID) { if ((Object)(object)m_nview == (Object)null || !m_nview.IsValid()) { return 0f; } string playerCooldownKey = GetPlayerCooldownKey(playerID); return m_nview.GetZDO().GetFloat(playerCooldownKey, 0f); } private void SetPlayerLastInteraction(long playerID, float time) { if (!((Object)(object)m_nview == (Object)null) && m_nview.IsValid()) { string playerCooldownKey = GetPlayerCooldownKey(playerID); m_nview.GetZDO().Set(playerCooldownKey, time); } } public bool Interact(Humanoid user, bool hold, bool alt) { ValheimCuisineLogger.LogInfo((object)"Grimpy Interact called!"); if (hold) { return false; } if ((Object)(object)m_nview == (Object)null || !m_nview.IsValid()) { ValheimCuisineLogger.LogWarning((object)"ZNetView is invalid"); return false; } Player val = (Player)(object)((user is Player) ? user : null); if ((Object)(object)val == (Object)null) { ValheimCuisineLogger.LogWarning((object)"User is not a Player"); return false; } long playerID = val.GetPlayerID(); if (playerID == 0) { ValheimCuisineLogger.LogWarning((object)"Could not get player ID"); return false; } float time = Time.time; float num = _GrimpyInteractionCooldown?.Value ?? 1800f; float playerLastInteraction = GetPlayerLastInteraction(playerID); if (time - playerLastInteraction < num) { float num2 = num - (time - playerLastInteraction); ((Character)user).Message((MessageType)2, Localization.instance.Localize("$grimpy_brewing") + $" ({Mathf.CeilToInt(num2)}s)", 0, (Sprite)null); return false; } SpawnRandomItem(user); SetPlayerLastInteraction(playerID, time); return true; } private void SpawnRandomItem(Humanoid user) { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) string item = possibleDrops[Random.Range(0, possibleDrops.Count)].itemName; int num = _GrimpyMinEctoplasm?.Value ?? 2; int num2 = _GrimpyMaxEctoplasm?.Value ?? 5; int stack = Random.Range(num, num2 + 1); GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(item); if ((Object)(object)itemPrefab == (Object)null) { ValheimCuisineLogger.LogWarning((object)("Could not find prefab for " + item)); ((Character)user).Message((MessageType)2, Localization.instance.Localize("$grimpy_mysterious"), 0, (Sprite)null); return; } Vector3 val = ((Component)this).transform.position + Vector3.up * 1.5f; GameObject val2 = Object.Instantiate<GameObject>(itemPrefab, val, Quaternion.identity); ItemDrop component = val2.GetComponent<ItemDrop>(); if ((Object)(object)component != (Object)null && component.m_itemData != null) { component.m_itemData.m_stack = stack; component.Save(); } PlaySpawnEffects(val); ((Character)user).Message((MessageType)2, Localization.instance.Localize("$grimpy_conjures"), 0, (Sprite)null); } private void PlaySpawnEffects(Vector3 position) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) GameObject prefab = ZNetScene.instance.GetPrefab("sfx_build_hammer"); if ((Object)(object)prefab != (Object)null) { Object.Instantiate<GameObject>(prefab, position, Quaternion.identity); } GameObject prefab2 = ZNetScene.instance.GetPrefab("vfx_Place_wood_pole"); if ((Object)(object)prefab2 != (Object)null) { Object.Instantiate<GameObject>(prefab2, position, Quaternion.identity); } } public bool UseItem(Humanoid user, ItemData item) { return false; } public string GetHoverText() { string text = Localization.instance.Localize("$grimpy_name"); if ((Object)(object)m_nview == (Object)null || !m_nview.IsValid()) { return text + "\n[<color=yellow><b>$KEY_Use</b></color>] " + Localization.instance.Localize("$grimpy_conjure"); } Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { return text + "\n[<color=yellow><b>$KEY_Use</b></color>] " + Localization.instance.Localize("$grimpy_conjure"); } long playerID = localPlayer.GetPlayerID(); float time = Time.time; float num = _GrimpyInteractionCooldown?.Value ?? 1800f; float playerLastInteraction = GetPlayerLastInteraction(playerID); float num2 = time - playerLastInteraction; if (num2 < num) { float num3 = num - num2; return string.Format("{0}\n[<color=yellow><b>$KEY_Use</b></color>] {1} ({2}s)", text, Localization.instance.Localize("$grimpy_brewing_short"), Mathf.CeilToInt(num3)); } return text + "\n[<color=yellow><b>$KEY_Use</b></color>] " + Localization.instance.Localize("$grimpy_conjure"); } public string GetHoverName() { return Localization.instance.Localize("$grimpy_name"); } } [HarmonyPatch(typeof(ZNetScene), "Awake")] [<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(0)] public static class RavenPatch { [<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(1)] private static void Postfix(ZNetScene __instance) { if ((Object)(object)__instance == (Object)null) { return; } List<GameObject> prefabs = __instance.m_prefabs; if (prefabs == null || prefabs.Count <= 0) { return; } GameObject prefab = __instance.GetPrefab("VC_Freydis"); if ((Object)(object)prefab != (Object)null) { Piece componentInChildren = prefab.GetComponentInChildren<Piece>(); GameObject val = (((Object)(object)componentInChildren != (Object)null) ? ((Component)componentInChildren).gameObject : prefab); if ((Object)(object)val.GetComponent<RavenInteraction>() == (Object)null) { val.AddComponent<RavenInteraction>(); ValheimCuisineLogger.LogInfo((object)("RavenInteraction component added to " + ((Object)val).name)); } if ((Object)(object)val.GetComponent<ZNetView>() == (Object)null) { val.AddComponent<ZNetView>(); ValheimCuisineLogger.LogInfo((object)("ZNetView component added to " + ((Object)val).name)); } } else { ValheimCuisineLogger.LogWarning((object)"Could not find VC_Freydis prefab"); } } } [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] public class RavenInteraction : MonoBehaviour, Interactable, Hoverable { private ZNetView m_nview = null; [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(new byte[] { 1, 0, 1 })] private static List<(string itemName, int minAmount, int maxAmount, float dropChance)> possibleDrops = new List<(string, int, int, float)>(); private static ConfigEntry<string> _RavenDropTable = null; private static ConfigEntry<float> _RavenInteractionCooldown = null; private static ConfigEntry<float> _RavenDoubleDropChance = null; private static ConfigEntry<float> _RavenTripleDropChance = null; public static void InitializeConfig(ConfigFile config, ConfigSync configSync) { string text = "Dandelion:3:6:100,Pukeberries:3:6:100,Thistle:3:6:80,GreydwarfEye:2:5:80,BoneFragments:2:5:80,MushroomBzerker:1:2:10,FragrantBundle:2:3:20,FreshSeaweed:2:3:20,CuredSquirrelHamstring:2:3:20,PowderedDragonEgg:2:3:15,PungentPebbles:2:3:20,Guck:2:5:60,Root:2:3:50,Bloodbag:2:5:80,Ooze:2:5:80,WolfFang:2:5:80,WolfClaw:2:5:50,FreezeGland:2:5:60,Tar:2:5:60,VC_LandvidiRoots:2:3:50,Sap:2:5:50,Bilebag:1:2:20,GiantBloodSack:2:5:50,Softtissue:2:3:20,CharcoalResin:2:5:20,SulfurStone:2:5:20,ProustitePowder:2:3:20,CharredBone:3:6:50,Charredskull:2:5:10,CelestialFeather:1:1:5"; _RavenDropTable = config.Bind<string>("Raven", "DropTable", text, "Drop table for Raven. Format: ItemName:MinAmount:MaxAmount:DropChance (separate multiple items with commas). Example: Dandelion:3:6:100,Thistle:2:4:50"); _RavenInteractionCooldown = config.Bind<float>("Raven", "Freydis Cooldown Time", 1800f, "Cooldown time in seconds between Freydis interactions."); _RavenDoubleDropChance = config.Bind<float>("Raven", "Double Drop Chance", 50f, "Chance (0-100%) to drop two different item types instead of one."); _RavenTripleDropChance = config.Bind<float>("Raven", "Triple Drop Chance", 25f, "Chance (0-100%) to drop three different item types instead of one."); configSync.AddConfigEntry<string>(_RavenDropTable); configSync.AddConfigEntry<float>(_RavenInteractionCooldown); configSync.AddConfigEntry<float>(_RavenDoubleDropChance); configSync.AddConfigEntry<float>(_RavenTripleDropChance); _RavenDropTable.SettingChanged += [<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(0)] (object _, EventArgs _) => { ParseDropTable(_RavenDropTable.Value); }; ParseDropTable(_RavenDropTable.Value); } private static void ParseDropTable(string dropTableString) { possibleDrops.Clear(); if (string.IsNullOrWhiteSpace(dropTableString)) { ValheimCuisineLogger.LogWarning((object)"Raven drop table is empty!"); return; } string[] array = dropTableString.Split(new char[1] { ',' }); string[] array2 = array; foreach (string text in array2) { string[] array3 = text.Trim().Split(new char[1] { ':' }); if (array3.Length != 4) { ValheimCuisineLogger.LogWarning((object)("Invalid drop entry format: " + text + ". Expected format: ItemName:MinAmount:MaxAmount:DropChance")); continue; } string text2 = array3[0].Trim(); int result2; float result3; if (!int.TryParse(array3[1], out var result)) { ValheimCuisineLogger.LogWarning((object)("Invalid min amount for " + text2 + ": " + array3[1])); } else if (!int.TryParse(array3[2], out result2)) { ValheimCuisineLogger.LogWarning((object)("Invalid max amount for " + text2 + ": " + array3[2])); } else if (!float.TryParse(array3[3], out result3)) { ValheimCuisineLogger.LogWarning((object)("Invalid drop chance for " + text2 + ": " + array3[3])); } else { possibleDrops.Add((text2, result, result2, result3)); } } ValheimCuisineLogger.LogInfo((object)$"Loaded {possibleDrops.Count} items into Raven drop table"); } private void Awake() { m_nview = ((Component)this).GetComponent<ZNetView>(); if ((Object)(object)m_nview == (Object)null) { m_nview = ((Component)this).gameObject.AddComponent<ZNetView>(); } ValheimCuisineLogger.LogInfo((object)("RavenInteraction Awake called on " + ((Object)((Component)this).gameObject).name)); } private string GetPlayerCooldownKey(long playerID) { return $"playerCooldown_{playerID}"; } private float GetPlayerLastInteraction(long playerID) { if ((Object)(object)m_nview == (Object)null || !m_nview.IsValid()) { return 0f; } string playerCooldownKey = GetPlayerCooldownKey(playerID); return m_nview.GetZDO().GetFloat(playerCooldownKey, 0f); } private void SetPlayerLastInteraction(long playerID, float time) { if (!((Object)(object)m_nview == (Object)null) && m_nview.IsValid()) { string playerCooldownKey = GetPlayerCooldownKey(playerID); m_nview.GetZDO().Set(playerCooldownKey, time); } } public bool Interact(Humanoid user, bool hold, bool alt) { ValheimCuisineLogger.LogInfo((object)"Raven Interact called!"); if (hold) { return false; } if ((Object)(object)m_nview == (Object)null || !m_nview.IsValid()) { ValheimCuisineLogger.LogWarning((object)"ZNetView is invalid"); return false; } Player val = (Player)(object)((user is Player) ? user : null); if ((Object)(object)val == (Object)null) { ValheimCuisineLogger.LogWarning((object)"User is not a Player"); return false; } long playerID = val.GetPlayerID(); if (playerID == 0) { ValheimCuisineLogger.LogWarning((object)"Could not get player ID"); return false; } float time = Time.time; float num = _RavenInteractionCooldown?.Value ?? 1800f; float playerLastInteraction = GetPlayerLastInteraction(playerID); if (time - playerLastInteraction < num) { float num2 = num - (time - playerLastInteraction); ((Character)user).Message((MessageType)2, Localization.instance.Localize("$raven_brewing") + $" ({Mathf.CeilToInt(num2)}s)", 0, (Sprite)null); return false; } SpawnRandomItems(user); SetPlayerLastInteraction(playerID, time); return true; } private void SpawnRandomItems(Humanoid user) { //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_02db: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) if (possibleDrops.Count == 0) { ValheimCuisineLogger.LogWarning((object)"No items in drop table!"); ((Character)user).Message((MessageType)2, "No items configured!", 0, (Sprite)null); return; } Vector3 val = ((Component)this).transform.position + Vector3.up * 1.5f; int num = 1; float num2 = Random.Range(0f, 100f); float num3 = _RavenTripleDropChance?.Value ?? 25f; float num4 = _RavenDoubleDropChance?.Value ?? 50f; if (num2 <= num3) { num = 3; ValheimCuisineLogger.LogInfo((object)$"Triple drop! (roll: {num2:F1}% <= {num3}%)"); } else if (num2 <= num3 + num4) { num = 2; ValheimCuisineLogger.LogInfo((object)$"Double drop! (roll: {num2:F1}% <= {num3 + num4}%)"); } else { ValheimCuisineLogger.LogInfo((object)$"Single drop (roll: {num2:F1}% > {num3 + num4}%)"); } List<(int, float)> list = new List<(int, float)>(); for (int i = 0; i < possibleDrops.Count; i++) { list.Add((i, possibleDrops[i].dropChance)); } Vector3 val2 = default(Vector3); for (int j = 0; j < num; j++) { if (list.Count == 0) { break; } int index = SelectWeightedItem(list); (string, int, int, float) tuple = possibleDrops[list[index].Item1]; list.RemoveAt(index); string item = tuple.Item1; int num5 = Random.Range(tuple.Item2, tuple.Item3 + 1); GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(item); if ((Object)(object)itemPrefab == (Object)null) { ValheimCuisineLogger.LogWarning((object)("Could not find prefab for " + item)); continue; } ((Vector3)(ref val2))..ctor(Random.Range(-0.3f, 0.3f), 0f, Random.Range(-0.3f, 0.3f)); Vector3 val3 = val + val2; GameObject val4 = Object.Instantiate<GameObject>(itemPrefab, val3, Quaternion.identity); ItemDrop component = val4.GetComponent<ItemDrop>(); if ((Object)(object)component != (Object)null && component.m_itemData != null) { component.m_itemData.m_stack = num5; component.Save(); } ValheimCuisineLogger.LogInfo((object)$"Spawned {num5}x {item} (weight: {tuple.Item4}%)"); } PlaySpawnEffects(val); ((Character)user).Message((MessageType)2, Localization.instance.Localize("$raven_conjures"), 0, (Sprite)null); } private int SelectWeightedItem([<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(new byte[] { 1, 0 })] List<(int index, float weight)> weightedItems) { float num = 0f; foreach (var weightedItem in weightedItems) { num += weightedItem.weight; } float num2 = Random.Range(0f, num); float num3 = 0f; for (int i = 0; i < weightedItems.Count; i++) { num3 += weightedItems[i].weight; if (num2 <= num3) { return i; } } return weightedItems.Count - 1; } private void PlaySpawnEffects(Vector3 position) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) GameObject prefab = ZNetScene.instance.GetPrefab("VC_sfx_RavenSpeak"); if ((Object)(object)prefab != (Object)null) { Object.Instantiate<GameObject>(prefab, position, Quaternion.identity); } GameObject prefab2 = ZNetScene.instance.GetPrefab("vfx_Place_wood_pole"); if ((Object)(object)prefab2 != (Object)null) { Object.Instantiate<GameObject>(prefab2, position, Quaternion.identity); } } public bool UseItem(Humanoid user, ItemData item) { return false; } public string GetHoverText() { string text = Localization.instance.Localize("$raven_name"); if ((Object)(object)m_nview == (Object)null || !m_nview.IsValid()) { return text + "\n[<color=yellow><b>$KEY_Use</b></color>] " + Localization.instance.Localize("$raven_conjure"); } Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { return text + "\n[<color=yellow><b>$KEY_Use</b></color>] " + Localization.instance.Localize("$raven_conjure"); } long playerID = localPlayer.GetPlayerID(); float time = Time.time; float num = _RavenInteractionCooldown?.Value ?? 1800f; float playerLastInteraction = GetPlayerLastInteraction(playerID); float num2 = time - playerLastInteraction; if (num2 < num) { float num3 = num - num2; return string.Format("{0}\n[<color=yellow><b>$KEY_Use</b></color>] {1} ({2}s)", text, Localization.instance.Localize("$raven_brewing_short"), Mathf.CeilToInt(num3)); } return text + "\n[<color=yellow><b>$KEY_Use</b></color>] " + Localization.instance.Localize("$raven_conjure"); } public string GetHoverName() { return Localization.instance.Localize("$raven_name"); } } [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] [HarmonyPatch(typeof(Player), "Update")] public static class LoxMilkingUpdatePatch { private const string BUCKET_PREFAB_NAME = "VC_MilkinBucket"; private const string MILK_PREFAB_NAME = "VC_LoxMilk"; private const string COOLDOWN_SE_NAME = "SE_LoxMilkedCooldown"; private static float m_lastMilkAttempt; private static void Postfix(Player __instance) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) if (MilkingKey == null || !MilkingKey.Value.IsKeyDown() || Time.time - m_lastMilkAttempt < 0.5f) { return; } m_lastMilkAttempt = Time.time; if (!HasBucketEquipped(__instance)) { return; } GameObject hoverObject = ((Humanoid)__instance).GetHoverObject(); if ((Object)(object)hoverObject == (Object)null) { return; } Tameable componentInParent = hoverObject.GetComponentInParent<Tameable>(); if ((Object)(object)componentInParent == (Object)null) { return; } Character character = componentInParent.m_character; if (!((Object)(object)character == (Object)null) && ((Object)character).name.StartsWith("Lox") && componentInParent.IsTamed() && !(Vector3.Distance(((Component)__instance).transform.position, ((Component)character).transform.position) > 3f)) { if (RequireBreeding != null && RequireBreeding.Value && !HasLoxBred(componentInParent)) { ((Character)__instance).Message((MessageType)2, Localization.instance.Localize("$lox_milking_nobaby"), 0, (Sprite)null); } else if (HasMilkCooldown(character)) { ((Character)__instance).Message((MessageType)2, Localization.instance.Localize("$lox_milking_cooldown"), 0, (Sprite)null); } else { MilkLox(__instance, character, componentInParent); } } } private static bool HasBucketEquipped(Player player) { ItemData rightItem = ((Humanoid)player).GetRightItem(); if (rightItem == null) { return false; } return (Object)(object)rightItem.m_dropPrefab != (Object)null && ((Object)rightItem.m_dropPrefab).name == "VC_MilkinBucket"; } private static bool HasLoxBred(Tameable tameable) { Procreation component = ((Component)tameable).GetComponent<Procreation>(); if ((Object)(object)component == (Object)null) { return false; } ZNetView nview = tameable.m_nview; if ((Object)(object)nview == (Object)null || !nview.IsValid()) { return false; } ZDO zDO = nview.GetZDO(); if (zDO == null) { return false; } int @int = zDO.GetInt("LoxBirthCount", 0); float @float = zDO.GetFloat("pregnant", 0f); return @int > 0 || @float > 0f; } private static bool HasMilkCooldown(Character character) { return character.GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_LoxMilkedCooldown")); } private static void MilkLox(Player player, Character lox, Tameable tameable) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) ApplyCooldown(lox); GiveMilk(player); PlayMilkingEffects(((Component)lox).transform.position); ((Character)player).Message((MessageType)2, Localization.instance.Localize("$lox_milking_success"), 0, (Sprite)null); } private static void ApplyCooldown(Character lox) { StatusEffect statusEffect = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode("SE_LoxMilkedCooldown")); float ttl = CooldownDuration?.Value ?? 1800f; if ((Object)(object)statusEffect != (Object)null) { statusEffect.m_ttl = ttl; lox.GetSEMan().AddStatusEffect(statusEffect, false, 0, 0f); return; } SE_Stats val = ScriptableObject.CreateInstance<SE_Stats>(); ((Object)val).name = "SE_LoxMilkedCooldown"; ((StatusEffect)val).m_name = "Recently Milked"; ((StatusEffect)val).m_ttl = ttl; ((StatusEffect)val).m_tooltip = "This Lox was recently milked"; lox.GetSEMan().AddStatusEffect((StatusEffect)(object)val, true, 0, 0f); } private static void GiveMilk(Player player) { //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) GameObject itemPrefab = ObjectDB.instance.GetItemPrefab("VC_LoxMilk"); if ((Object)(object)itemPrefab == (Object)null) { Debug.LogError((object)"Could not find milk prefab: VC_LoxMilk"); ((Character)player).Message((MessageType)2, Localization.instance.Localize("$lox_milking_error"), 0, (Sprite)null); return; } int num = MilkAmount?.Value ?? 5; ItemDrop component = itemPrefab.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null || component.m_itemData == null) { Debug.LogError((object)"Milk prefab has no ItemDrop component"); return; } ItemData val = component.m_itemData.Clone(); val.m_stack = num; if (!((Humanoid)player).GetInventory().AddItem(val)) { ItemDrop.DropItem(val, num, ((Component)player).transform.position + ((Component)player).transform.forward * 0.5f + Vector3.up * 0.5f, ((Component)player).transform.rotation); ((Character)player).Message((MessageType)2, Localization.instance.Localize("$lox_milking_inventory_full"), 0, (Sprite)null); } } private static void PlayMilkingEffects(Vector3 position) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) GameObject prefab = ZNetScene.instance.GetPrefab("VC_sfx_LoxMilking"); if ((Object)(object)prefab != (Object)null) { Object.Instantiate<GameObject>(prefab, position, Quaternion.identity); } GameObject prefab2 = ZNetScene.instance.GetPrefab("vfx_lootspawn"); if ((Object)(object)prefab2 != (Object)null) { Object.Instantiate<GameObject>(prefab2, position + Vector3.up * 1f, Quaternion.identity); } } } [HarmonyPatch(typeof(Tameable), "GetHoverText")] [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] public static class LoxMilkingHoverTextPatch { private const string BUCKET_PREFAB_NAME = "VC_MilkinBucket"; private const string COOLDOWN_SE_NAME = "SE_LoxMilkedCooldown"; private static void Postfix(Tameable __instance, ref string __result) { //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) if (MilkingKey == null) { return; } Character character = __instance.m_character; if ((Object)(object)character == (Object)null || !((Object)character).name.StartsWith("Lox") || !__instance.IsTamed()) { return; } Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { return; } ItemData rightItem = ((Humanoid)localPlayer).GetRightItem(); if (rightItem == null) { return; } GameObject dropPrefab = rightItem.m_dropPrefab; if (((dropPrefab != null) ? ((Object)dropPrefab).name : null) != "VC_MilkinBucket") { return; } KeyboardShortcut value = MilkingKey.Value; KeyCode mainKey = ((KeyboardShortcut)(ref value)).MainKey; string text = ((object)(KeyCode)(ref mainKey)).ToString(); if (RequireBreeding != null && RequireBreeding.Value) { Procreation component = ((Component)__instance).GetComponent<Procreation>(); if ((Object)(object)component != (Object)null) { ZNetView nview = __instance.m_nview; if ((Object)(object)nview != (Object)null && nview.IsValid()) { ZDO zDO = nview.GetZDO(); if (zDO != null) { int @int = zDO.GetInt("LoxBirthCount", 0); float @float = zDO.GetFloat("pregnant", 0f); if (@int == 0 && @float == 0f) { __result = __result + "\n<color=orange>" + Localization.instance.Localize("$lox_milking_hover_nobaby") + "</color>"; return; } } } } } if (character.GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_LoxMilkedCooldown"))) { __result = __result + "\n<color=orange>" + Localization.instance.Localize("$lox_milking_hover_cooldown") + "</color>"; return; } __result = __result + "\n[<color=yellow><b>" + text + "</b></color>] " + Localization.instance.Localize("$lox_milking_hover_action"); } } [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] [HarmonyPatch(typeof(ZNetScene), "Awake")] public static class SeasonalItemGroupPatch { [CompilerGenerated] private sealed class <>c__DisplayClass4_0 { [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] public string r; [<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(0)] internal bool <DelayedAddSeasonalRecipes>b__3(Recipe x) { return Object.op_Implicit((Object)(object)x) && (((Object)x).name.Equals(r, StringComparison.OrdinalIgnoreCase) || ((Object)x).name.Equals("Recipe_" + r, StringComparison.OrdinalIgnoreCase)); } } [CompilerGenerated] private sealed class <DelayedAddSeasonalRecipes>d__4 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] private object <>2__current; private float <timer>5__1; private bool <allFound>5__2; [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] private Exception <e>5__3; object IEnumerator<object>.Current { [DebuggerHidden] [return: <2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] [return: <2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] get { return <>2__current; } } [DebuggerHidden] public <DelayedAddSeasonalRecipes>d__4(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <e>5__3 = null; <>1__state = -2; } private bool MoveNext() { //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Expected O, but got Unknown //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Expected O, but got Unknown //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitUntil((Func<bool>)(() => Object.op_Implicit((Object)(object)ObjectDB.instance))); <>1__state = 1; return true; case 1: <>1__state = -1; <>2__current = (object)new WaitUntil((Func<bool>)(() => ObjectDB.instance.m_recipes.Count > 0)); <>1__state = 2; return true; case 2: <>1__state = -1; <timer>5__1 = 0f; break; case 3: <>1__state = -1; <timer>5__1 += 1f; break; } if (<timer>5__1 < 10f) { <allFound>5__2 = HalloweenRecipes.All([<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(0)] (string r) => { <>c__DisplayClass4_0 CS$<>8__locals0 = new <>c__DisplayClass4_0 { r = r }; return ObjectDB.instance.m_recipes.Any([<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(0)] (Recipe x) => Object.op_Implicit((Object)(object)x) && (((Object)x).name.Equals(CS$<>8__locals0.r, StringComparison.OrdinalIgnoreCase) || ((Object)x).name.Equals("Recipe_" + CS$<>8__locals0.r, StringComparison.OrdinalIgnoreCase))); }); if (!<allFound>5__2) { <>2__current = (object)new WaitForSeconds(1f); <>1__state = 3; return true; } } ValheimCuisineLogger.LogInfo((object)$"[SeasonalItemGroupPatch] Recipes available in ObjectDB: {ObjectDB.instance.m_recipes.Count}"); try { AddRecipesToGroup("Halloween", HalloweenRecipes); AddRecipesToGroup("Midsummer", MidsummerRecipes); AddRecipesToGroup("Yule", YuleRecipes); } catch (Exception ex) { <e>5__3 = ex; ValheimCuisineLogger.LogError((object)$"[SeasonalItemGroupPatch] Exception adding seasonal recipes: {<e>5__3}"); } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static readonly List<string> HalloweenRecipes = new List<string> { "VC_UnbakedStuffedTurnips_Recipe_PrepTable" }; private static readonly List<string> MidsummerRecipes = new List<string>(); private static readonly List<string> YuleRecipes = new List<string>(); private static void Postfix(ZNetScene __instance) { ((MonoBehaviour)__instance).StartCoroutine(DelayedAddSeasonalRecipes()); } [IteratorStateMachine(typeof(<DelayedAddSeasonalRecipes>d__4))] private static IEnumerator DelayedAddSeasonalRecipes() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DelayedAddSeasonalRecipes>d__4(0); } private static void AddRecipesToGroup(string groupName, List<string> recipeNames) { SeasonalItemGroup val = Resources.FindObjectsOfTypeAll<SeasonalItemGroup>()?.FirstOrDefault((Func<SeasonalItemGroup, bool>)([<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(0)] (SeasonalItemGroup x) => ((Object)x).name == groupName)); if ((Object)(object)val == (Object)null) { ValheimCuisineLogger.LogWarning((object)("[SeasonalItemGroupPatch] Could not find SeasonalItemGroup: " + groupName)); return; } foreach (string name in recipeNames) { Recipe val2 = ((IEnumerable<Recipe>)ObjectDB.instance.m_recipes).FirstOrDefault((Func<Recipe, bool>)([<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(0)] (Recipe r) => Object.op_Implicit((Object)(object)r) && (((Object)r).name.Equals(name, StringComparison.OrdinalIgnoreCase) || ((Object)r).name.Equals("Recipe_" + name, StringComparison.OrdinalIgnoreCase)))); if ((Object)(object)val2 == (Object)null) { ValheimCuisineLogger.LogWarning((object)("[SeasonalItemGroupPatch] Could not find recipe '" + name + "' in ObjectDB.")); } else if (!val.Recipes.Contains(val2)) { val.Recipes.Add(val2); ValheimCuisineLogger.LogInfo((object)("[SeasonalItemGroupPatch] Added '" + ((Object)val2).name + "' to SeasonalItemGroup '" + groupName + "'.")); } } } } [<9978fd04-0aae-4412-8ace-26389168e076>NullableContext(0)] private class ConfigurationManagerAttributes { [UsedImplicitly] public int? Order = null; [UsedImplicitly] public bool? Browsable = null; [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(2)] [UsedImplicitly] public string Category = null; [UsedImplicitly] [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(new byte[] { 2, 1 })] public Action<ConfigEntryBase> CustomDrawer = null; } [<2a4a1169-5495-481c-80ef-84438e1fc47b>Nullable(0)] private class AcceptableShortcuts : AcceptableValueBase { public AcceptableShortcuts() : base(typeof(KeyboardShortcut)) { } public override object Clamp(object value) { return value; } public override bool IsValid(object value) { return true; } public override string ToDescriptionString() { return "# Acceptable values: " + string.Join(", ", UnityInput.Current.SupportedKeyCodes); } } internal const string ModName = "ValheimCuisine"; internal const string ModVersion = "2.1.9"; internal const string Author = "XutzBR"; private const string ModGUID = "XutzBR.ValheimCuisine"; private static string ConfigFileName = "XutzBR.ValheimCuisine.cfg"; private static string ConfigFileFullPath; internal static string ConnectionError; private readonly Harmony _harmony = new Harmony("XutzBR.ValheimCuisine"); public static readonly ManualLogSource ValheimCuisineLogger; private static readonly ConfigSync ConfigSync; public static ConfigEntry<float> CooldownDuration; public static ConfigEntry<int> MilkAmount; public static ConfigEntry<bool> RequireBreeding; public static ConfigEntry<KeyboardShortcut> MilkingKey; private static Dictionary<GameObject, GameObject> VC_Station_Normal; private static Dictionary<GameObject, GameObject> VC_Station_Iron_40; private static Dictionary<GameObject, GameObject> VC_Station_Iron_60; private static Dictionary<GameObject, GameObject> VC_Oven_50; private static Dictionary<GameObject, GameObject> VC_Oven_60; private static Dictionary<GameObject, GameObject> VC_Oven_80; private static Dictionary<GameObject, GameObject> VC_Fermenter; public Texture2D tex = null; private static ConfigEntry<Toggle> _serverConfigLocked; public void Awake() { //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Expected O, but got Unknown //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Expected O, but got Unknown //IL_013e: Unknown result type (might be due to invalid IL or missing references) Localizer.Load(); bool saveOnConfigSet = ((BaseUnityPlugin)this).Config.SaveOnConfigSet; ((BaseUnityPlugin)this).Config.SaveOnConfigSet = false; _serverConfigLocked = config("1 - General", "Lock Configuration", Toggle.On, "If on, the configuration is locked and can be changed by server admins only."); ConfigSync.AddLockingConfigEntry<Toggle>(_serverConfigLocked); CooldownDuration = config("Lox Milking", "CooldownDuration", 1800f, new ConfigDescription("Cooldown duration in seconds before a Lox can be milked again (default: 1800 = 30 minutes)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(60f, 7200f), Array.Empty<object>())); MilkAmount = config("Lox Milking", "MilkAmount", 5, new ConfigDescription("Amount of milk produced per milking", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), Array.Empty<object>())); RequireBreeding = config("Lox Milking", "RequireBreeding", value: true, "Only allow milking from Lox that have already had a baby"); MilkingKey = config<KeyboardShortcut>("Lox Milking", "MilkingKey", new KeyboardShortcut((KeyCode)102, Array.Empty<KeyCode>()), new ConfigDescription("Key to milk the Lox (default: F)", (AcceptableValueBase)(object)new AcceptableShortcuts(), Array.Empty<object>()), synchronizedSetting: false); RavenInteraction.InitializeConfig(((BaseUnityPlugin)this).Config, ConfigSync); GrimpyInteraction.InitializeConfig(((BaseUnityPlugin)this).Config, ConfigSync); Creature creature = new Creature("valheimcuisine", "VC_FrostLeech") { Biome = (Biome)64, SpecificSpawnArea = SpawnArea.Everywhere, RequiredWeather = Weather.None, RequiredGlobalKey = GlobalKey.None, SpecificSpawnTime = SpawnTime.Always, GroupSize = new CreatureManager.Range(2f, 4f), SpawnChance = 80f, CheckSpawnInterval = 300, Maximum = 4, ForestSpawn = Forest.No, CanSpawn = true, CanBeTamed = false, AttackImmediately = true, ConfigurationEnabled = true, CanHaveStars = true, RequiredAltitude = new CreatureManager.Range(-1000f, 0f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f) }; creature.Drops["VC_FrostBloodbag"].Amount = new CreatureManager.Range(1f, 1f); creature.Drops["VC_FrostBloodbag"].DropChance = 100f; creature.Drops["VC_TrophyFrostLeech"].Amount = new CreatureManager.Range(1f, 1f); creature.Drops["VC_TrophyFrostLeech"].DropChance = 20f; GameObject val = ItemManager.PrefabManager.RegisterPrefab("valheimcuisine", "VC_Leech_BiteAttack"); GameObject val2 = ItemManager.PrefabManager.RegisterPrefab("valheimcuisine", "VC_fx_backstab"); GameObject val3 = ItemManager.PrefabManager.RegisterPrefab("valheimcuisine", "VC_fx_crit"); GameObject val4 = ItemManager.PrefabManager.RegisterPrefab("valheimcuisine", "VC_vfx_HitSparks_Leech"); GameObject val5 = ItemManager.PrefabManager.RegisterPrefab("valheimcuisine", "VC_vfx_leech_death"); GameObject val6 = ItemManager.PrefabManager.RegisterPrefab("valheimcuisine", "VC_vfx_leech_hit"); GameObject val7 = ItemManager.PrefabManager.RegisterPrefab("valheimcuisine", "VC_vfx_water_surface"); GameObject val8 = ItemManager.PrefabManager.RegisterPrefab("valheimcuisine", "VC_sfx_leech_alerted"); GameObject val9 = ItemManager.PrefabManager.RegisterPrefab("valheimcuisine", "VC_sfx_leech_attack"); GameObject val10 = ItemManager.PrefabManager.RegisterPrefab("valheimcuisine", "VC_sfx_leech_attack_hit"); GameObject val11 = ItemManager.PrefabManager.RegisterPrefab("valheimcuisine", "VC_sfx_leech_death"); GameObject val12 = ItemManager.PrefabManager.RegisterPrefab("valheimcuisine", "VC_sfx_leech_hit"); GameObject val13 = ItemManager.PrefabManager.RegisterPrefab("valheimcuisine", "VC_sfx_leech_idle"); Item item = new Item("valheimcuisine", "VC_Hammer"); item.Crafting.Add(ItemManager.CraftingTable.Forge, 1); item.RequiredItems.Add("FineWood", 4); item.RequiredItems.Add("Resin", 2); item.RequiredItems.Add("Tin", 2); item.RequiredItems.Add("BronzeNails", 8); item.RequiredUpgradeItems.Add("FineWood", 4); item.CraftAmount = 1; Item item2 = new Item("valheimcuisine", "VC_MilkinBucket"); item2.Crafting.Add(ItemManager.CraftingTable.Workbench, 1); item2.RequiredItems.Add("Wood", 10); item2.RequiredItems.Add("Resin", 6); item2.RequiredItems.Add("BarrelRings", 1); item2.CraftAmount = 1; BuildPiece buildPiece = new BuildPiece("valheimcuisine", "VC_Eldhrimnir"); buildPiece.Category.Set("Cuisine"); buildPiece.Crafting.Set(PieceManager.CraftingTable.Forge); buildPiece.RequiredItems.Add("VC_NidavellirBronze", 12, recover: true); BuildPiece buildPiece2 = new BuildPiece("valheimcuisine", "VC_VolvaCauldron"); buildPiece2.Category.Set("Cuisine"); buildPiece2.Crafting.Set(PieceManager.CraftingTable.Forge); buildPiece2.RequiredItems.Add("Iron", 20, recover: true); BuildPiece buildPiece3 = new BuildPiece("valheimcuisine", "VC_FoodBarrel1"); buildPiece3.Category.Set("Cuisine"); buildPiece3.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece3.RequiredItems.Add("ElderBark", 10, recover: true); buildPiece3.RequiredItems.Add("Resin", 8, recover: true); buildPiece3.RequiredItems.Add("BarrelRings", 1, recover: true); BuildPiece buildPiece4 = new BuildPiece("valheimcuisine", "VC_Eldhrimnir_ext1"); buildPiece4.Category.Set("Cuisine"); buildPiece4.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece4.RequiredItems.Add("RoundLog", 4, recover: true); buildPiece4.RequiredItems.Add("FineWood", 4, recover: true); buildPiece4.RequiredItems.Add("IronNails", 2, recover: true); BuildPiece buildPiece5 = new BuildPiece("valheimcuisine", "VC_ChefTable"); buildPiece5.Category.Set("Cuisine"); buildPiece5.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece5.RequiredItems.Add("FineWood", 10, recover: true); buildPiece5.RequiredItems.Add("RoundLog", 6, recover: true); buildPiece5.RequiredItems.Add("Iron", 8, recover: true); buildPiece5.RequiredItems.Add("VC_CookingSupplies", 4, recover: true); BuildPiece buildPiece6 = new BuildPiece("valheimcuisine", "VC_VolvaCauldron_ext1"); buildPiece6.Category.Set("Cuisine"); buildPiece6.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece6.RequiredItems.Add("FineWood", 16, recover: true); buildPiece6.RequiredItems.Add("IronNails", 12, recover: true); buildPiece6.RequiredItems.Add("Silver", 6, recover: true); buildPiece6.RequiredItems.Add("VC_CookingSupplies", 4, recover: true); BuildPiece buildPiece7 = new BuildPiece("valheimcuisine", "VC_FulingCauldron"); buildPiece7.Category.Set("Cuisine"); buildPiece7.Crafting.Set(PieceManager.CraftingTable.StoneCutter); buildPiece7.RequiredItems.Add("Stone", 40, recover: true); buildPiece7.RequiredItems.Add("BoneFragments", 40, recover: true); buildPiece7.RequiredItems.Add("GoblinTotem", 1, recover: true); buildPiece7.RequiredItems.Add("VC_FulingCauldron_Mat", 1, recover: true); BuildPiece buildPiece8 = new BuildPiece("valheimcuisine", "VC_LegendFermenter"); buildPiece8.Category.Set("Cuisine"); buildPiece8.Crafting.Set(PieceManager.CraftingTable.ArtisanTable); buildPiece8.RequiredItems.Add("FineWood", 30, recover: true); buildPiece8.RequiredItems.Add("VC_NidavellirBronze", 20, recover: true); buildPiece8.RequiredItems.Add("IronNails", 20, recover: true); buildPiece8.RequiredItems.Add("Resin", 10, recover: true); BuildPiece buildPiece9 = new BuildPiece("valheimcuisine", "VC_ButterChurn"); buildPiece9.Category.Set("Cuisine"); buildPiece9.Crafting.Set(PieceManager.CraftingTable.ArtisanTable); buildPiece9.RequiredItems.Add("RoundLog", 20, recover: true); buildPiece9.RequiredItems.Add("IronNails", 10, recover: true); buildPiece9.RequiredItems.Add("BarrelRings", 1, recover: true); BuildPiece buildPiece10 = new BuildPiece("valheimcuisine", "VC_VolvaCauldron_ext2"); buildPiece10.Category.Set("Cuisine"); buildPiece10.Crafting.Set(PieceManager.CraftingTable.StoneCutter); buildPiece10.RequiredItems.Add("Stone", 100, recover: true); buildPiece10.RequiredItems.Add("CandleWick", 10, recover: true); buildPiece10.RequiredItems.Add("Tar", 4, recover: true); buildPiece10.RequiredItems.Add("Coal", 6, recover: true); BuildPiece buildPiece11 = new BuildPiece("valheimcuisine", "VC_Eldhrimnir_ext2"); buildPiece11.Category.Set("Cuisine"); buildPiece11.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece11.RequiredItems.Add("RoundLog", 20, recover: true); buildPiece11.RequiredItems.Add("FineWood", 50, recover: true); buildPiece11.RequiredItems.Add("BarrelRings", 9, recover: true); buildPiece11.RequiredItems.Add("VC_CookingSupplies", 8, recover: true); BuildPiece buildPiece12 = new BuildPiece("valheimcuisine", "VC_VolvaCauldron_ext3"); buildPiece12.Category.Set("Cuisine"); buildPiece12.Crafting.Set(PieceManager.CraftingTable.MageTable); buildPiece12.RequiredItems.Add("BlobVial", 1, recover: true); buildPiece12.RequiredItems.Add("MechanicalSpring", 1, recover: true); buildPiece12.RequiredItems.Add("VC_NidavellirBronze", 5, recover: true); buildPiece12.RequiredItems.Add("YggdrasilWood", 10, recover: true); BuildPiece buildPiece13 = new BuildPiece("valheimcuisine", "VC_DvergrCauldron"); buildPiece13.Category.Set("Cuisine"); buildPiece13.Crafting.Set(PieceManager.CraftingTable.BlackForge); buildPiece13.RequiredItems.Add("Iron", 20, recover: true); buildPiece13.RequiredItems.Add("VC_NidavellirBronze", 15, recover: true); buildPiece13.RequiredItems.Add("YggdrasilWood", 20, recover: true); buildPiece13.RequiredItems.Add("BlackCore", 5, recover: true); BuildPiece buildPiece14 = new BuildPiece("valheimcuisine", "VC_Eldhrimnir_ext3"); buildPiece14.Category.Set("Cuisine"); buildPiece14.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece14.RequiredItems.Add("Blackwood", 6, recover: true); buildPiece14.RequiredItems.Add("CharcoalResin", 2, recover: true); buildPiece14.RequiredItems.Add("IronNails", 4, recover: true); buildPiece14.RequiredItems.Add("VC_CookingSupplies", 4, recover: true); BuildPiece buildPiece15 = new BuildPiece("valheimcuisine", "VC_FoodBarrel2"); buildPiece15.Category.Set("Cuisine"); buildPiece15.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece15.RequiredItems.Add("Blackwood", 10, recover: true); buildPiece15.RequiredItems.Add("CharcoalResin", 2, recover: true); buildPiece15.RequiredItems.Add("FlametalNew", 2, recover: true); BuildPiece buildPiece16 = new BuildPiece("valheimcuisine", "VC_VolvaCauldron_ext4"); buildPiece16.Category.Set("Cuisine"); buildPiece16.Crafting.Set(PieceManager.CraftingTable.MageTable); buildPiece16.RequiredItems.Add("VC_TrappedVaettir", 1, recover: true); buildPiece16.RequiredItems.Add("FineWood", 20, recover: true); buildPiece16.RequiredItems.Add("FlametalNew", 2, recover: true); buildPiece16.RequiredItems.Add("QueensJam", 4, recover: true); BuildPiece buildPiece17 = new BuildPiece("valheimcuisine", "VC_Freydis"); buildPiece17.Category.Set("Cuisine"); buildPiece17.Crafting.Set(PieceManager.CraftingTable.MageTable); buildPiece17.RequiredItems.Add("VC_RavenTablet", 1, recover: true); buildPiece17.RequiredItems.Add("TrophySkeleton", 3, recover: true); buildPiece17.RequiredItems.Add("BoneFragments", 10, recover: true); buildPiece17.RequiredItems.Add("Grausten", 8, recover: true); BuildPiece buildPiece18 = new BuildPiece("valheimcuisine", "VC_Eldhrimnir_ext4"); buildPiece18.Category.Set("Cuisine"); buildPiece18.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece18.RequiredItems.Add("Blackwood", 20, recover: true); buildPiece18.RequiredItems.Add("BarrelRings", 1, recover: true); buildPiece18.RequiredItems.Add("VC_FrostBloodbag", 4, recover: true); buildPiece18.RequiredItems.Add("VC_CookingSupplies", 4, recover: true); Item item3 = new Item("valheimcuisine", "VC_NidavellirBronze"); item3.Crafting.Add(ItemManager.CraftingTable.Forge, 1); item3.RequiredItems.Add("Copper", 2); item3.RequiredItems.Add("Tin", 1); item3.RequiredItems.Add("Coal", 3); item3.RequiredItems.Add("SurtlingCore", 1); item3.CraftAmount = 1; Item item4 = new Item("valheimcuisine", "VC_BoneMeal"); item4.Crafting.Add(ItemManager.CraftingTable.Workbench, 1); item4.RequiredItems.Add("BoneFragments", 10); item4.CraftAmount = 10; new ItemManager.Conversion(item4) { Input = "BoneFragments", Piece = ConversionPiece.Windmill }; Item item5 = new Item("valheimcuisine", "VC_DrakeHeart"); item5.DropsFrom.Add("Hatchling", 0.8f); Item outputItem = new Item("valheimcuisine", "VC_AncientBarkFlour"); new ItemManager.Conversion(outputItem) { Input = "ElderBark", Piece = ConversionPiece.Windmill }; Item item6 = new Item("valheimcuisine", "VC_LandvidiRoots"); item6.DropsFrom.Add("GoblinShaman", 0.2f, 1, 3); item6.DropsFrom.Add("GoblinShaman_Hildir", 1f, 4, 8); Item item7 = new Item("valheimcuisine", "VC_FulingTablet"); item7.DropsFrom.Add("GoblinShaman_Hildir", 1f); Item item8 = new Item("valheimcuisine", "VC_FulingCauldron_Mat"); item8.Crafting.Add(ItemManager.CraftingTable.Forge, 5); item8.RequiredItems.Add("Iron", 14); item8.RequiredItems.Add("Stone", 20); item8.RequiredItems.Add("VC_FulingTablet", 1); item8.CraftAmount = 1; Item item9 = new Item("valheimcuisine", "VC_GoKParts"); item9.Crafting.Add(ItemManager.CraftingTable.BlackForge, 4); item9.RequiredItems.Add("FlametalNew", 6); item9.RequiredItems.Add("VC_NidavellirBronze", 2); item9.CraftAmount = 1; Item item10 = new Item("valheimcuisine", "VC_GoK"); item10.Crafting.Add(ItemManager.CraftingTable.ArtisanTable, 1); item10.RequiredItems.Add("VC_GoKParts", 1); item10.RequiredItems.Add("GemstoneRed", 4); item10.RequiredItems.Add("GemstoneGreen", 2); item10.RequiredItems.Add("TrophySkeleton", 1); item10.CraftAmount = 1; Item item11 = new Item("valheimcuisine", "VC_RavenTablet"); item11.Crafting.Add(ItemManager.CraftingTable.MageTable, 4); item11.RequiredItems.Add("BlackMarble", 2); item11.RequiredItems.Add("Ectoplasm", 10); item11.RequiredItems.Add("CelestialFeather", 5); item11.RequiredItems.Add("TrophyFallenValkyrie", 1); item11.CraftAmount = 1; Item item12 = new Item("valheimcuisine", "VC_TrappedVaettir"); item12.DropsFrom.Add("Charred_Melee_Dyrnwyn", 1f); Item item13 = new Item("valheimcuisine", "VC_FrostBloodbag"); Item item14 = new Item("valheimcuisine", "VC_TrophyFrostLeech"); Item item15 = new Item("valheimcuisine", "VC_DandelionSoup"); item15.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item15.RequiredItems.Add("Dandelion", 3); item15.CraftAmount = 1; Item item16 = new Item("valheimcuisine", "VC_GlazedCarrots"); item16.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item16.RequiredItems.Add("Carrot", 2); item16.RequiredItems.Add("Honey", 1); item16.CraftAmount = 1; Item item17 = new Item("valheimcuisine", "VC_SauteMushrooms"); item17.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item17.RequiredItems.Add("Mushroom", 2); item17.RequiredItems.Add("MushroomYellow", 1); item17.CraftAmount = 1; Item item18 = new Item("valheimcuisine", "VC_FowlerRagout"); item18.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item18.RequiredItems.Add("VC_BirdMeat", 2); item18.RequiredItems.Add("Carrot", 1); item18.RequiredItems.Add("Thistle", 2); item18.CraftAmount = 1; Item item19 = new Item("valheimcuisine", "VC_NeckSoup"); item19.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item19.RequiredItems.Add("NeckTail", 1); item19.RequiredItems.Add("Mushroom", 1); item19.CraftAmount = 1; Item item20 = new Item("valheimcuisine", "VC_ForestSkewer"); item20.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item20.RequiredItems.Add("DeerMeat", 2); item20.RequiredItems.Add("Mushroom", 1); item20.RequiredItems.Add("MushroomYellow", 1); item20.CraftAmount = 4; Item item21 = new Item("valheimcuisine", "VC_BoarSvid"); item21.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item21.RequiredItems.Add("TrophyBoar", 1); item21.RequiredItems.Add("Dandelion", 2); item21.CraftAmount = 1; Item item22 = new Item("valheimcuisine", "VC_DeerSvid"); item22.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item22.RequiredItems.Add("TrophyDeer", 1); item22.RequiredItems.Add("Carrot", 1); item22.RequiredItems.Add("Thistle", 1); item22.CraftAmount = 1; Item item23 = new Item("valheimcuisine", "VC_MyrkvidrSkause"); item23.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item23.RequiredItems.Add("DeerMeat", 1); item23.RequiredItems.Add("Carrot", 1); item23.RequiredItems.Add("Mushroom", 1); item23.CraftAmount = 1; Item item24 = new Item("valheimcuisine", "VC_FishSoup"); item24.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item24.RequiredItems.Add("FishRaw", 1); item24.RequiredItems.Add("MushroomYellow", 2); item24.RequiredItems.Add("Dandelion", 1); item24.CraftAmount = 1; Item item25 = new Item("valheimcuisine", "VC_PikeFillets"); item25.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item25.RequiredItems.Add("Fish2", 1); item25.RequiredItems.Add("Thistle", 2); item25.CraftAmount = 1; Item item26 = new Item("valheimcuisine", "VC_PerchSteak"); item26.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item26.RequiredItems.Add("Fish1", 1); item26.RequiredItems.Add("Thistle", 2); item26.CraftAmount = 1; Item item27 = new Item("valheimcuisine", "VC_VikingStew"); item27.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item27.RequiredItems.Add("Fish5", 1); item27.RequiredItems.Add("MushroomYellow", 1); item27.RequiredItems.Add("Dandelion", 2); item27.CraftAmount = 1; Item item28 = new Item("valheimcuisine", "VC_TrollSvid"); item28.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item28.RequiredItems.Add("TrophyFrostTroll", 1); item28.RequiredItems.Add("Carrot", 1); item28.RequiredItems.Add("Thistle", 2); item28.CraftAmount = 1; Item item29 = new Item("valheimcuisine", "VC_TrollStew"); item29.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item29.RequiredItems.Add("VC_TrollMeat", 1); item29.RequiredItems.Add("Carrot", 1); item29.RequiredItems.Add("MushroomYellow", 2); item29.RequiredItems.Add("Dandelion", 2); item29.CraftAmount = 1; Item item30 = new Item("valheimcuisine", "VC_CuredPork"); item30.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item30.RequiredItems.Add("RawMeat", 3); item30.RequiredItems.Add("Dandelion", 2); item30.RequiredItems.Add("Thistle", 2); item30.RequiredItems.Add("Ooze", 1); item30.CraftAmount = 6; Item item31 = new Item("valheimcuisine", "VC_GlazedTurnips"); item31.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item31.RequiredItems.Add("Turnip", 2); item31.RequiredItems.Add("Honey", 1); item31.CraftAmount = 1; Item item32 = new Item("valheimcuisine", "VC_MushroomSoup"); item32.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item32.RequiredItems.Add("VC_SauteMushrooms", 1); item32.RequiredItems.Add("Dandelion", 1); item32.CraftAmount = 1; Item item33 = new Item("valheimcuisine", "VC_CarrionCrowBroth"); item33.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item33.RequiredItems.Add("VC_BirdMeat", 2); item33.RequiredItems.Add("Entrails", 3); item33.RequiredItems.Add("VC_BoneMeal", 3); item33.RequiredItems.Add("Turnip", 1); item33.CraftAmount = 1; Item item34 = new Item("valheimcuisine", "VC_RootSoup"); item34.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item34.RequiredItems.Add("Root", 2); item34.RequiredItems.Add("Dandelion", 4); item34.CraftAmount = 1; Item item35 = new Item("valheimcuisine", "VC_BoneBroth"); item35.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item35.RequiredItems.Add("BoneFragments", 4); item35.RequiredItems.Add("Carrot", 2); item35.RequiredItems.Add("Thistle", 1); item35.CraftAmount = 1; Item item36 = new Item("valheimcuisine", "VC_VegetableSoup"); item36.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item36.RequiredItems.Add("Carrot", 1); item36.RequiredItems.Add("Turnip", 1); item36.RequiredItems.Add("MushroomYellow", 1); item36.CraftAmount = 1; Item item37 = new Item("valheimcuisine", "VC_BoarHam"); item37.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item37.RequiredItems.Add("RawMeat", 2); item37.RequiredItems.Add("Dandelion", 1); item37.RequiredItems.Add("Thistle", 1); item37.RequiredItems.Add("Ooze", 1); item37.CraftAmount = 2; Item item38 = new Item("valheimcuisine", "VC_FishStew"); item38.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item38.RequiredItems.Add("FishCooked", 1); item38.RequiredItems.Add("Turnip", 1); item38.RequiredItems.Add("Thistle", 2); item38.CraftAmount = 1; Item item39 = new Item("valheimcuisine", "VC_NeckStew"); item39.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item39.RequiredItems.Add("TrophyNeck", 1); item39.RequiredItems.Add("NeckTail", 1); item39.RequiredItems.Add("Turnip", 1); item39.CraftAmount = 1; Item item40 = new Item("valheimcuisine", "VC_SmokedHerring"); item40.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item40.RequiredItems.Add("Fish6", 2); item40.RequiredItems.Add("RoundLog", 1); item40.RequiredItems.Add("Coal", 1); item40.CraftAmount = 1; Item item41 = new Item("valheimcuisine", "VC_FensalirSkause"); item41.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item41.RequiredItems.Add("DeerMeat", 1); item41.RequiredItems.Add("Carrot", 1); item41.RequiredItems.Add("Turnip", 1); item41.RequiredItems.Add("Honey", 2); item41.CraftAmount = 1; Item item42 = new Item("valheimcuisine", "VC_Blodpolse"); item42.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item42.RequiredItems.Add("TrophyLeech", 1); item42.RequiredItems.Add("VC_TrollMeat", 2); item42.RequiredItems.Add("Bloodbag", 1); item42.RequiredItems.Add("Thistle", 3); item42.CraftAmount = 6; Item item43 = new Item("valheimcuisine", "VC_BloodyBroth"); item43.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item43.RequiredItems.Add("Bloodbag", 2); item43.RequiredItems.Add("Entrails", 1); item43.RequiredItems.Add("Turnip", 1); item43.RequiredItems.Add("Thistle", 2); item43.CraftAmount = 1; Item item44 = new Item("valheimcuisine", "VC_AmmaStew"); item44.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item44.RequiredItems.Add("CookedDeerMeat", 1); item44.RequiredItems.Add("VC_CuredPork", 1); item44.RequiredItems.Add("VC_GlazedTurnips", 1); item44.RequiredItems.Add("Thistle", 1); item44.CraftAmount = 1; Item item45 = new Item("valheimcuisine", "VC_ColdCuredNeck"); item45.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item45.RequiredItems.Add("NeckTail", 2); item45.RequiredItems.Add("Honey", 2); item45.RequiredItems.Add("FreezeGland", 1); item45.CraftAmount = 4; Item item46 = new Item("valheimcuisine", "VC_TrollJerky"); item46.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item46.RequiredItems.Add("VC_TrollMeat", 1); item46.RequiredItems.Add("Honey", 2); item46.CraftAmount = 4; Item item47 = new Item("valheimcuisine", "VC_BloodmoonStew"); item47.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item47.RequiredItems.Add("Fish4_cave", 2); item47.RequiredItems.Add("Bloodbag", 1); item47.RequiredItems.Add("VC_ChoppedVeggies", 1); item47.RequiredItems.Add("Thistle", 1); item47.CraftAmount = 1; item47.DropsFrom.Add("Fenring_Cultist", 0.01f); Item item48 = new Item("valheimcuisine", "VC_Pottage"); item48.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item48.RequiredItems.Add("VC_ChoppedVeggies", 2); item48.CraftAmount = 1; Item item49 = new Item("valheimcuisine", "VC_MarinatedBerries"); item49.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item49.RequiredItems.Add("Raspberry", 8); item49.RequiredItems.Add("Blueberries", 8); item49.RequiredItems.Add("FreezeGland", 2); item49.RequiredItems.Add("MeadTasty", 1); item49.CraftAmount = 2; Item item50 = new Item("valheimcuisine", "VC_VegetableStew"); item50.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item50.RequiredItems.Add("VC_ChoppedVeggies", 1); item50.RequiredItems.Add("MushroomYellow", 1); item50.RequiredItems.Add("Root", 1); item50.RequiredItems.Add("Thistle", 1); item50.CraftAmount = 1; Item item51 = new Item("valheimcuisine", "VC_WolfSalami"); item51.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item51.RequiredItems.Add("Entrails", 6); item51.RequiredItems.Add("WolfMeat", 2); item51.RequiredItems.Add("Thistle", 2); item51.RequiredItems.Add("FreezeGland", 1); item51.CraftAmount = 6; Item item52 = new Item("valheimcuisine", "VC_MountainHotpot"); item52.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item52.RequiredItems.Add("WolfMeat", 1); item52.RequiredItems.Add("VC_ChoppedVeggies", 1); item52.RequiredItems.Add("WolfHairBundle", 1); item52.RequiredItems.Add("VC_BoneMeal", 2); item52.CraftAmount = 1; Item item53 = new Item("valheimcuisine", "VC_YdalirSkause"); item53.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item53.RequiredItems.Add("WolfMeat", 1); item53.RequiredItems.Add("VC_ChoppedVeggies", 1); item53.RequiredItems.Add("Thistle", 1); item53.CraftAmount = 1; Item item54 = new Item("valheimcuisine", "VC_FlambeWolfStrips"); item54.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item54.RequiredItems.Add("WolfMeat", 2); item54.RequiredItems.Add("MeadTasty", 1); item54.RequiredItems.Add("Blueberries", 4); item54.CraftAmount = 2; Item item55 = new Item("valheimcuisine", "VC_Aebleflaesk"); item55.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item55.RequiredItems.Add("Pukeberries", 10); item55.RequiredItems.Add("VC_CuredPork", 1); item55.RequiredItems.Add("Onion", 1); item55.RequiredItems.Add("Honey", 1); item55.CraftAmount = 1; Item item56 = new Item("valheimcuisine", "VC_HatchlingSoup"); item56.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item56.RequiredItems.Add("TrophyHatchling", 1); item56.RequiredItems.Add("VC_DrakeHeart", 1); item56.RequiredItems.Add("Onion", 1); item56.CraftAmount = 1; Item item57 = new Item("valheimcuisine", "VC_WolfSvid"); item57.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item57.RequiredItems.Add("TrophyWolf", 1); item57.RequiredItems.Add("VC_ChoppedVeggies", 1); item57.RequiredItems.Add("Thistle", 1); item57.CraftAmount = 1; Item item58 = new Item("valheimcuisine", "VC_UlvTailStew"); item58.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item58.RequiredItems.Add("TrophyUlv", 1); item58.RequiredItems.Add("VC_ChoppedVeggies", 1); item58.RequiredItems.Add("Raspberry", 3); item58.CraftAmount = 1; Item item59 = new Item("valheimcuisine", "VC_HunterStew"); item59.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item59.RequiredItems.Add("DeerMeat", 1); item59.RequiredItems.Add("WolfMeat", 1); item59.RequiredItems.Add("VC_ChoppedVeggies", 1); item59.RequiredItems.Add("MeadStaminaMinor", 1); item59.CraftAmount = 1; Item item60 = new Item("valheimcuisine", "VC_LoxJerky"); item60.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item60.RequiredItems.Add("LoxMeat", 1); item60.RequiredItems.Add("Honey", 2); item60.CraftAmount = 2; Item item61 = new Item("valheimcuisine", "VC_Gruel"); item61.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item61.RequiredItems.Add("Barley", 3); item61.CraftAmount = 1; Item item62 = new Item("valheimcuisine", "VC_PerryPorridge"); item62.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item62.RequiredItems.Add("Pukeberries", 6); item62.RequiredItems.Add("Barley", 6); item62.CraftAmount = 1; Item item63 = new Item("valheimcuisine", "VC_Lefse"); item63.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item63.RequiredItems.Add("VC_AncientBarkFlour", 4); item63.RequiredItems.Add("VC_Skyr", 1); item63.RequiredItems.Add("Honey", 1); item63.RequiredItems.Add("VC_Butter", 1); item63.CraftAmount = 4; Item item64 = new Item("valheimcuisine", "VC_GrouperPottage"); item64.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item64.RequiredItems.Add("Fish7", 2); item64.RequiredItems.Add("VC_ChoppedVeggies", 1); item64.RequiredItems.Add("Thistle", 3); item64.CraftAmount = 1; Item item65 = new Item("valheimcuisine", "VC_Multekrem"); item65.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item65.RequiredItems.Add("VC_LoxMilk", 1); item65.RequiredItems.Add("Honey", 2); item65.RequiredItems.Add("Cloudberry", 6); item65.CraftAmount = 1; Item item66 = new Item("valheimcuisine", "VC_IdunnConfiture"); item66.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item66.RequiredItems.Add("Raspberry", 2); item66.RequiredItems.Add("Blueberries", 2); item66.RequiredItems.Add("Cloudberry", 4); item66.CraftAmount = 1; Item item67 = new Item("valheimcuisine", "VC_Aebleskiver"); item67.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item67.RequiredItems.Add("BarleyFlour", 4); item67.RequiredItems.Add("VC_Butter", 2); item67.RequiredItems.Add("Honey", 2); item67.RequiredItems.Add("Pukeberries", 12); item67.CraftAmount = 4; Item item68 = new Item("valheimcuisine", "VC_SweetPorridge"); item68.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item68.RequiredItems.Add("Blueberries", 2); item68.RequiredItems.Add("Honey", 1); item68.RequiredItems.Add("VC_Skyr", 1); item68.RequiredItems.Add("Barley", 6); item68.CraftAmount = 1; Item item69 = new Item("valheimcuisine", "VC_TravellerPorridge"); item69.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item69.RequiredItems.Add("TurnipStew", 1); item69.RequiredItems.Add("MushroomYellow", 2); item69.RequiredItems.Add("Barley", 6); item69.RequiredItems.Add("VC_Butter", 1); item69.CraftAmount = 1; Item item70 = new Item("valheimcuisine", "VC_WinghunterPorridge"); item70.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item70.RequiredItems.Add("VC_CookedBirdMeat", 3); item70.RequiredItems.Add("VC_ChoppedVeggies", 1); item70.RequiredItems.Add("Barley", 6); item70.RequiredItems.Add("VC_Blaand", 1); item70.CraftAmount = 1; Item item71 = new Item("valheimcuisine", "VC_LoxHam"); item71.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item71.RequiredItems.Add("LoxMeat", 2); item71.RequiredItems.Add("Thistle", 2); item71.RequiredItems.Add("Ooze", 1); item71.CraftAmount = 2; Item item72 = new Item("valheimcuisine", "VC_FishChowder"); item72.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item72.RequiredItems.Add("FishRaw", 2); item72.RequiredItems.Add("VC_ChoppedVeggies", 1); item72.RequiredItems.Add("VC_LoxMilk", 1); item72.CraftAmount = 1; Item item73 = new Item("valheimcuisine", "VC_NeckBarleyStew"); item73.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item73.RequiredItems.Add("NeckTail", 2); item73.RequiredItems.Add("Barley", 2); item73.RequiredItems.Add("Onion", 1); item73.RequiredItems.Add("VC_Butter", 1); item73.CraftAmount = 1; Item item74 = new Item("valheimcuisine", "VC_JarlSearedMeat"); item74.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item74.RequiredItems.Add("LoxMeat", 1); item74.RequiredItems.Add("Cloudberry", 8); item74.RequiredItems.Add("Thistle", 2); item74.RequiredItems.Add("MeadTasty", 1); item74.CraftAmount = 2; Item item75 = new Item("valheimcuisine", "VC_LoxSvid"); item75.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item75.RequiredItems.Add("TrophyLox", 1); item75.RequiredItems.Add("VC_ChoppedVeggies", 1); item75.RequiredItems.Add("Thistle", 2); item75.RequiredItems.Add("VC_Butter", 2); item75.CraftAmount = 1; Item item76 = new Item("valheimcuisine", "VC_AlfablotStew"); item76.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item76.RequiredItems.Add("VC_ChoppedMeat", 1); item76.RequiredItems.Add("VC_VegetableSoup", 1); item76.RequiredItems.Add("VC_Butter", 1); item76.RequiredItems.Add("VC_Blaand", 1); item76.CraftAmount = 1; Item item77 = new Item("valheimcuisine", "VC_JarnvidrSkause"); item77.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item77.RequiredItems.Add("VC_TrollMeat", 1); item77.RequiredItems.Add("VC_ChoppedVeggies", 1); item77.RequiredItems.Add("Thistle", 1); item77.RequiredItems.Add("TrophyGoblin", 1); item77.CraftAmount = 1; Item item78 = new Item("valheimcuisine", "VC_WarriorPottage"); item78.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item78.RequiredItems.Add("VC_ChoppedMeat", 1); item78.RequiredItems.Add("VC_CuredPork", 1); item78.RequiredItems.Add("VC_ChoppedVeggies", 1); item78.RequiredItems.Add("MeadTasty", 1); item78.CraftAmount = 1; Item item79 = new Item("valheimcuisine", "VC_Surkal"); item79.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item79.RequiredItems.Add("Dandelion", 16); item79.RequiredItems.Add("MushroomMagecap", 2); item79.CraftAmount = 2; Item item80 = new Item("valheimcuisine", "VC_HareJerky"); item80.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item80.RequiredItems.Add("HareMeat", 2); item80.RequiredItems.Add("Honey", 2); item80.RequiredItems.Add("Thistle", 1); item80.CraftAmount = 4; Item item81 = new Item("valheimcuisine", "VC_SpicedFishJerky"); item81.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item81.RequiredItems.Add("FishRaw", 1); item81.RequiredItems.Add("Honey", 1); item81.RequiredItems.Add("Sap", 1); item81.RequiredItems.Add("Thistle", 2); item81.CraftAmount = 2; Item item82 = new Item("valheimcuisine", "VC_MushroomStew"); item82.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item82.RequiredItems.Add("VC_ChoppedShrooms", 2); item82.RequiredItems.Add("Thistle", 1); item82.CraftAmount = 1; Item item83 = new Item("valheimcuisine", "VC_CrunchySkewer"); item83.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item83.RequiredItems.Add("BugMeat", 1); item83.RequiredItems.Add("VC_ChoppedVeggies", 2); item83.CraftAmount = 2; Item item84 = new Item("valheimcuisine", "VC_ChickenDumpling"); item84.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item84.RequiredItems.Add("ChickenMeat", 2); item84.RequiredItems.Add("ChickenEgg", 1); item84.RequiredItems.Add("BarleyFlour", 2); item84.CraftAmount = 2; Item item85 = new Item("valheimcuisine", "VC_MistyFondue"); item85.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item85.RequiredItems.Add("VC_LoxCheese", 1); item85.RequiredItems.Add("MushroomJotunPuffs", 2); item85.RequiredItems.Add("VC_CloudberryAle", 1); item85.CraftAmount = 1; Item item86 = new Item("valheimcuisine", "VC_CreamBastarde"); item86.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item86.RequiredItems.Add("VC_LoxMilk", 1); item86.RequiredItems.Add("ChickenEgg", 1); item86.RequiredItems.Add("Honey", 1); item86.RequiredItems.Add("Raspberry", 4); item86.CraftAmount = 1; Item item87 = new Item("valheimcuisine", "VC_AdventurerPorridge"); item87.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item87.RequiredItems.Add("VC_VegetableSoup", 1); item87.RequiredItems.Add("MushroomJotunPuffs", 2); item87.RequiredItems.Add("Barley", 6); item87.RequiredItems.Add("Thistle", 2); item87.CraftAmount = 1; Item item88 = new Item("valheimcuisine", "VC_CharredHareMeat"); item88.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item88.RequiredItems.Add("HareMeat", 1); item88.RequiredItems.Add("Thistle", 1); item88.CraftAmount = 1; Item item89 = new Item("valheimcuisine", "VC_CrispyPuffers"); item89.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item89.RequiredItems.Add("Fish12", 2); item89.RequiredItems.Add("ChickenEgg", 2); item89.RequiredItems.Add("BarleyFlour", 2); item89.RequiredItems.Add("VC_BogButter", 1); item89.CraftAmount = 2; Item item90 = new Item("valheimcuisine", "VC_ChickenStew"); item90.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item90.RequiredItems.Add("ChickenMeat", 2); item90.RequiredItems.Add("VC_ChoppedVeggies", 1); item90.CraftAmount = 1; Item item91 = new Item("valheimcuisine", "VC_MimameidrSkause"); item91.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item91.RequiredItems.Add("ChickenMeat", 2); item91.RequiredItems.Add("VC_ChoppedShrooms", 1); item91.RequiredItems.Add("Flax", 1); item91.RequiredItems.Add("Thistle", 1); item91.CraftAmount = 1; Item item92 = new Item("valheimcuisine", "VC_BoozedMeat"); item92.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item92.RequiredItems.Add("VC_ChoppedExoticMeat", 2); item92.RequiredItems.Add("MushroomJotunPuffs", 4); item92.RequiredItems.Add("Sap", 2); item92.RequiredItems.Add("VC_Booze", 1); item92.CraftAmount = 1; Item item93 = new Item("valheimcuisine", "VC_HaldorTrollStew"); item93.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item93.RequiredItems.Add("VC_CookedTrollMeat", 1); item93.RequiredItems.Add("VC_ChoppedVeggies", 1); item93.RequiredItems.Add("VC_Booze", 1); item93.RequiredItems.Add("VC_Butter", 1); item93.CraftAmount = 1; Item item94 = new Item("valheimcuisine", "VC_HareStew"); item94.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item94.RequiredItems.Add("HareMeat", 1); item94.RequiredItems.Add("VC_ChoppedVeggies", 1); item94.RequiredItems.Add("TrophyHare", 1); item94.CraftAmount = 1; Item item95 = new Item("valheimcuisine", "VC_Blodplattar"); item95.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item95.RequiredItems.Add("GiantBloodSack", 2); item95.RequiredItems.Add("BarleyFlour", 4); item95.RequiredItems.Add("Honey", 2); item95.RequiredItems.Add("Blueberries", 6); item95.CraftAmount = 2; Item item96 = new Item("valheimcuisine", "VC_MeatbugRagout"); item96.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item96.RequiredItems.Add("GiantBloodSack", 3); item96.RequiredItems.Add("VC_ChoppedVeggies", 1); item96.RequiredItems.Add("VC_ChoppedShrooms", 1); item96.CraftAmount = 1; Item item97 = new Item("valheimcuisine", "VC_DvergrMageBroth"); item97.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item97.RequiredItems.Add("CookedBugMeat", 1); item97.RequiredItems.Add("VC_ChoppedVeggies", 1); item97.RequiredItems.Add("Sap", 1); item97.RequiredItems.Add("VC_DvergrTonic", 1); item97.CraftAmount = 1; Item item98 = new Item("valheimcuisine", "VC_TrollAspic"); item98.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item98.RequiredItems.Add("VC_TrollMeat", 1); item98.RequiredItems.Add("MushroomMagecap", 2); item98.RequiredItems.Add("RoyalJelly", 2); item98.CraftAmount = 1; Item item99 = new Item("valheimcuisine", "VC_MyrkalfarStew"); item99.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item99.RequiredItems.Add("Fish9", 2); item99.RequiredItems.Add("VC_Surkal", 1); item99.RequiredItems.Add("AncientSeed", 1); item99.RequiredItems.Add("VC_CloudberryAle", 1); item99.CraftAmount = 1; Item item100 = new Item("valheimcuisine", "VC_Aeblekage"); item100.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item100.RequiredItems.Add("Pukeberries", 12); item100.RequiredItems.Add("VC_LoxMilk", 1); item100.RequiredItems.Add("VC_Paltbrod", 1); item100.RequiredItems.Add("FreezeGland", 1); item100.CraftAmount = 1; Item item101 = new Item("valheimcuisine", "VC_MorgenJerky"); item101.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item101.RequiredItems.Add("MorgenSinew", 2); item101.RequiredItems.Add("Honey", 2); item101.CraftAmount = 4; Item item102 = new Item("valheimcuisine", "VC_MagmafishStew"); item102.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item102.RequiredItems.Add("Fish11", 1); item102.RequiredItems.Add("Onion", 1); item102.RequiredItems.Add("MushroomSmokePuff", 1); item102.CraftAmount = 1; Item item103 = new Item("valheimcuisine", "VC_ShroomDumplings"); item103.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item103.RequiredItems.Add("MushroomMagecap", 2); item103.RequiredItems.Add("MushroomSmokePuff", 2); item103.RequiredItems.Add("VoltureEgg", 1); item103.RequiredItems.Add("BarleyFlour", 4); item103.CraftAmount = 2; Item item104 = new Item("valheimcuisine", "VC_PickleSoup"); item104.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item104.RequiredItems.Add("VC_PickledVeggies", 1); item104.RequiredItems.Add("Fiddleheadfern", 1); item104.RequiredItems.Add("Thistle", 1); item104.CraftAmount = 1; Item item105 = new Item("valheimcuisine", "VC_Meadnog"); item105.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item105.RequiredItems.Add("VoltureEgg", 2); item105.RequiredItems.Add("Honey", 2); item105.RequiredItems.Add("VC_LoxMilk", 1); item105.RequiredItems.Add("MeadTasty", 1); item105.CraftAmount = 2; Item item106 = new Item("valheimcuisine", "VC_KingsOmelette"); item106.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item106.RequiredItems.Add("VoltureEgg", 3); item106.RequiredItems.Add("VC_BogButter", 1); item106.RequiredItems.Add("VC_ChoppedShrooms", 1); item106.CraftAmount = 1; Item item107 = new Item("valheimcuisine", "VC_MagmafishSkewer"); item107.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item107.RequiredItems.Add("Fish11", 1); item107.RequiredItems.Add("Fiddleheadfern", 1); item107.RequiredItems.Add("MushroomYellow", 1); item107.CraftAmount = 2; Item item108 = new Item("valheimcuisine", "VC_Krumkakes"); item108.Crafting.Add(ItemManager.CraftingTable.Cauldron, 6); item108.RequiredItems.Add("BarleyFlour", 4); item108.RequiredItems.Add("VC_Butter", 1); item108.RequiredItems.Add("AsksvinEgg", 2); item108.RequiredItems.Add("VC_IdunnConfiture", 1); item108.CraftAmount = 4; Item item109 = new Item("valheimcuisine", "VC_ChickenBucket"); item109.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item109.RequiredItems.Add("VC_BirdMeat", 4); item109.RequiredItems.Add("AsksvinEgg", 2); item109.RequiredItems.Add("BarleyFlour", 3); item109.RequiredItems.Add("Vineberry", 4); item109.CraftAmount = 1; Item item110 = new Item("valheimcuisine", "VC_Rommegrot"); item110.Crafting.Add(ItemManager.CraftingTable.Cauldron, 5); item110.RequiredItems.Add("VC_AncientBarkFlour", 4); item110.RequiredIte