Decompiled source of UnofficialValheimLevelingSystemm v5.9.2
ValheimLevelSystem.dll
Decompiled 7 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using Groups; using HarmonyLib; using Jotunn; using Jotunn.Managers; using Jotunn.Utils; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; using ValheimLevelSystem.PlayerSkills; [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] internal class <Module> { static <Module>() { Initializer.Init(); } } namespace ValheimLevelSystem { public class ExpTable { public static List<MonsterExp> MonsterExpList { get; set; } public static List<PickableExp> PickableExpList { get; set; } public static List<MineableExp> MineableExpList { get; set; } public static List<ChoppableExp> ChoppableExpList { get; set; } public static List<FishableExp> FishableExpList { get; set; } public static void InitMonsterExpList() { MonsterExpList = new List<MonsterExp>(); ValheimLevelSystem.Tier1Creatures.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { MonsterExpList.Add(new MonsterExp(x, ValheimLevelSystem.Tier1Exp.Value)); }); ValheimLevelSystem.Tier2Creatures.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { MonsterExpList.Add(new MonsterExp(x, ValheimLevelSystem.Tier2Exp.Value)); }); ValheimLevelSystem.Tier3Creatures.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { MonsterExpList.Add(new MonsterExp(x, ValheimLevelSystem.Tier3Exp.Value)); }); ValheimLevelSystem.Tier4Creatures.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { MonsterExpList.Add(new MonsterExp(x, ValheimLevelSystem.Tier4Exp.Value)); }); ValheimLevelSystem.Tier5Creatures.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { MonsterExpList.Add(new MonsterExp(x, ValheimLevelSystem.Tier5Exp.Value)); }); ValheimLevelSystem.Tier6Creatures.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { MonsterExpList.Add(new MonsterExp(x, ValheimLevelSystem.Tier6Exp.Value)); }); ValheimLevelSystem.Tier7Creatures.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { MonsterExpList.Add(new MonsterExp(x, ValheimLevelSystem.Tier7Exp.Value)); }); } public static void InitPickableExpList() { PickableExpList = new List<PickableExp>(); ValheimLevelSystem.Tier1Pickables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { PickableExpList.Add(new PickableExp(x, ValheimLevelSystem.Tier1Exp.Value)); }); ValheimLevelSystem.Tier2Pickables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { PickableExpList.Add(new PickableExp(x, ValheimLevelSystem.Tier2Exp.Value)); }); ValheimLevelSystem.Tier3Pickables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { PickableExpList.Add(new PickableExp(x, ValheimLevelSystem.Tier3Exp.Value)); }); ValheimLevelSystem.Tier4Pickables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { PickableExpList.Add(new PickableExp(x, ValheimLevelSystem.Tier4Exp.Value)); }); ValheimLevelSystem.Tier5Pickables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { PickableExpList.Add(new PickableExp(x, ValheimLevelSystem.Tier5Exp.Value)); }); ValheimLevelSystem.Tier6Pickables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { PickableExpList.Add(new PickableExp(x, ValheimLevelSystem.Tier6Exp.Value)); }); ValheimLevelSystem.Tier7Pickables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { PickableExpList.Add(new PickableExp(x, ValheimLevelSystem.Tier7Exp.Value)); }); } public static void InitMineableExpList() { MineableExpList = new List<MineableExp>(); ValheimLevelSystem.Tier1Mineables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { MineableExpList.Add(new MineableExp(x, ValheimLevelSystem.Tier1Exp.Value)); }); ValheimLevelSystem.Tier2Mineables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { MineableExpList.Add(new MineableExp(x, ValheimLevelSystem.Tier2Exp.Value)); }); ValheimLevelSystem.Tier3Mineables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { MineableExpList.Add(new MineableExp(x, ValheimLevelSystem.Tier3Exp.Value)); }); ValheimLevelSystem.Tier4Mineables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { MineableExpList.Add(new MineableExp(x, ValheimLevelSystem.Tier4Exp.Value)); }); ValheimLevelSystem.Tier6Mineables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { MineableExpList.Add(new MineableExp(x, ValheimLevelSystem.Tier6Exp.Value)); }); ValheimLevelSystem.Tier7Mineables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { MineableExpList.Add(new MineableExp(x, ValheimLevelSystem.Tier7Exp.Value)); }); } public static void InitChoppableExpList() { ChoppableExpList = new List<ChoppableExp>(); ValheimLevelSystem.Tier1Choppables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { ChoppableExpList.Add(new ChoppableExp(x, ValheimLevelSystem.Tier1Exp.Value)); }); ValheimLevelSystem.Tier2Choppables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { ChoppableExpList.Add(new ChoppableExp(x, ValheimLevelSystem.Tier2Exp.Value)); }); ValheimLevelSystem.Tier3Choppables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { ChoppableExpList.Add(new ChoppableExp(x, ValheimLevelSystem.Tier3Exp.Value)); }); ValheimLevelSystem.Tier6Choppables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { ChoppableExpList.Add(new ChoppableExp(x, ValheimLevelSystem.Tier6Exp.Value)); }); ValheimLevelSystem.Tier7Choppables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { ChoppableExpList.Add(new ChoppableExp(x, ValheimLevelSystem.Tier7Exp.Value)); }); } public static void InitFishableExpList() { FishableExpList = new List<FishableExp>(); ValheimLevelSystem.Tier2Fishables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { FishableExpList.Add(new FishableExp(x, ValheimLevelSystem.Tier2Exp.Value)); }); ValheimLevelSystem.Tier3Fishables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { FishableExpList.Add(new FishableExp(x, ValheimLevelSystem.Tier3Exp.Value)); }); ValheimLevelSystem.Tier4Fishables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { FishableExpList.Add(new FishableExp(x, ValheimLevelSystem.Tier4Exp.Value)); }); ValheimLevelSystem.Tier5Fishables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { FishableExpList.Add(new FishableExp(x, ValheimLevelSystem.Tier5Exp.Value)); }); ValheimLevelSystem.Tier6Fishables.Value.Split(new char[1] { ',' }).ToList().ForEach(delegate(string x) { FishableExpList.Add(new FishableExp(x, ValheimLevelSystem.Tier6Exp.Value)); }); } } public class MonsterExp { public string Name { get; set; } public int ExpAmount { get; set; } public MonsterExp(string name, int exp = 100) { Name = name; ExpAmount = exp; } } public class PickableExp { public string Name { get; set; } public int ExpAmount { get; set; } public PickableExp(string name, int exp = 100) { Name = name; ExpAmount = exp; } } public class MineableExp { public string Name { get; set; } public int ExpAmount { get; set; } public MineableExp(string name, int exp = 100) { Name = name; ExpAmount = exp; } } public class ChoppableExp { public string Name { get; set; } public int ExpAmount { get; set; } public ChoppableExp(string name, int exp = 100) { Name = name; ExpAmount = exp; } } public class FishableExp { public string Name { get; set; } public int ExpAmount { get; set; } public FishableExp(string name, int exp = 100) { Name = name; ExpAmount = exp; } } public class GUILog { public static GameObject GUILogWindow; public static bool state; public static void CreateLogWindow() { //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_0103: 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) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)GUILogWindow) && Object.op_Implicit((Object)(object)Player.m_localPlayer)) { int value = ValheimLevelSystem.LogEntries.Value; GUILogWindow = GUIManager.Instance.CreateWoodpanel(GUIManager.CustomGUIFront.transform, new Vector2(1f, 0f), new Vector2(1f, 0f), loadLocation(), 250f, (float)(50 + 17 * value), true); GameObject value2 = GUIManager.Instance.CreateText("", GUILogWindow.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(0f, -25f), GUIManager.Instance.AveriaSerifBold, 16, GUIManager.Instance.ValheimOrange, true, Color.black, 200f, 30f, false); GameObject value3 = GUIManager.Instance.CreateText("", GUILogWindow.transform, new Vector2(0.65f, 0.5f), new Vector2(0.65f, 0.5f), new Vector2(0f, -10f), GUIManager.Instance.AveriaSerif, 13, GUIManager.Instance.ValheimBeige, true, Color.black, 250f, (float)(17 * value), false); ValheimLevelSystem.menuItems.Add("LogWarning", value2); ValheimLevelSystem.menuItems.Add("LogEntries", value3); UpdateWarning(); GUILogWindow.SetActive(true); state = true; } } public static void toggle() { state = !state; GUILogWindow.SetActive(state); } public static void saveLocation() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) try { RectTransform component = GUILogWindow.GetComponent<RectTransform>(); Vector2 anchoredPosition = component.anchoredPosition; if (!Player.m_localPlayer.m_knownTexts.ContainsKey("logPosition")) { Player.m_localPlayer.m_knownTexts["logPosition"] = ""; } Player.m_localPlayer.m_knownTexts["logPosition"] = ((object)(Vector2)(ref anchoredPosition)).ToString(); } catch { } } public static Vector2 loadLocation() { //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) Vector2 result = default(Vector2); ((Vector2)(ref result))..ctor(-130f, 200f); if (!Player.m_localPlayer.m_knownTexts.ContainsKey("logPosition")) { return result; } try { string text = Player.m_localPlayer.m_knownTexts["logPosition"]; float num = float.Parse(text.Split(new char[1] { ',' })[0].Replace("(", "").Trim()); float num2 = float.Parse(text.Split(new char[1] { ',' })[1].Replace(")", "").Trim()); if (0f - num > (float)Screen.width || num > 0f || num2 > (float)Screen.height || num2 < 0f) { return result; } return new Vector2(num, num2); } catch { return result; } } public static void UpdateWarning() { ValheimLevelSystem.menuItems.TryGetValue("LogWarning", out var value); if (Object.op_Implicit((Object)(object)value)) { if (!Level.GetAvailablePoints().Equals("0") || !Level.GetAvailableAttributePoints().Equals("0")) { value.GetComponent<Text>().text = "You have points to spend!"; } else { value.GetComponent<Text>().text = ""; } if (Level.GetSpecialization() == PlayerSpecialization.None) { value.GetComponent<Text>().text = "Choose a specialization!"; } } } public static void UpdateLog(string logentry) { int value = ValheimLevelSystem.LogEntries.Value; string text = ""; ValheimLevelSystem.menuItems.TryGetValue("LogEntries", out var value2); string[] array = value2.GetComponent<Text>().text.Split(new char[1] { '\n' }); for (int i = Math.Max(array.Length - value, 0); i < array.Length; i++) { text = ((i != Math.Max(array.Length - value, 0)) ? (text + "\n" + array[i]) : array[i]); } if (!text.Equals("")) { text += "\n"; } text += logentry; if (Object.op_Implicit((Object)(object)value2)) { value2.GetComponent<Text>().text = text; } } } public class GUIXP { public static GameObject XPBar; public static void CreateXPBar() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0117: 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_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)XPBar) && Object.op_Implicit((Object)(object)Player.m_localPlayer)) { XPBar = GUIManager.Instance.CreateWoodpanel(GUIManager.CustomGUIFront.transform, new Vector2(0.15f, 0.07f), new Vector2(0.15f, 0.07f), new Vector2(0f, 0f), 400f, 30f, false); float num = (float)int.Parse(Level.GetExp()) * 100f / (float)Level.GetMaxExpForCurrentLevel(); if (num > 100f) { num = 100f; } if (Level.GetMaxExpForCurrentLevel() == 0) { num = 0f; } GameObject value = GUIManager.Instance.CreateText("Lvl " + Level.GetLevel() + " " + num.ToString("0.00") + "%", XPBar.transform, new Vector2(0f, 0.5f), new Vector2(0f, 0.5f), new Vector2(65f, 0f), GUIManager.Instance.AveriaSerifBold, 15, GUIManager.Instance.ValheimOrange, true, Color.black, 100f, 20f, false); string text = ""; for (int i = 1; i <= (int)(2f * num / 3f); i++) { text += "|"; } GameObject value2 = GUIManager.Instance.CreateText(text, XPBar.transform, new Vector2(0f, 0.5f), new Vector2(0f, 0.5f), new Vector2(275f, 0f), GUIManager.Instance.AveriaSerifBold, 14, GUIManager.Instance.ValheimBeige, false, Color.black, 300f, 20f, false); ValheimLevelSystem.menuItems.Add("XPBarLvl", value); ValheimLevelSystem.menuItems.Add("XPBarBars", value2); XPBar.SetActive(true); } } public static void UpdateXPBar() { float num = (float)int.Parse(Level.GetExp()) * 100f / (float)Level.GetMaxExpForCurrentLevel(); if (num > 100f) { num = 100f; } if (Level.GetMaxExpForCurrentLevel() == 0) { num = 0f; } string text = ""; for (int i = 1; i <= (int)(2f * num / 3f); i++) { text += "|"; } ValheimLevelSystem.menuItems.TryGetValue("XPBarLvl", out var value); if (Object.op_Implicit((Object)(object)value)) { value.GetComponent<Text>().text = "Lvl " + Level.GetLevel() + " " + num.ToString("0.00") + "%"; } ValheimLevelSystem.menuItems.TryGetValue("XPBarBars", out var value2); if (Object.op_Implicit((Object)(object)value2)) { value2.GetComponent<Text>().text = text; } } } public class GUISpec { public static GameObject menu; public static void CreateSpecializationMenu() { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Expected O, but got Unknown //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_0264: Unknown result type (might be due to invalid IL or missing references) //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_02b8: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Expected O, but got Unknown if (Level.GetSpecialization() != 0) { return; } GUI.DestroyMenu(); UpdateSpecDescr(); if (!Object.op_Implicit((Object)(object)menu) && Object.op_Implicit((Object)(object)Player.m_localPlayer)) { menu = GUIManager.Instance.CreateWoodpanel(GUIManager.CustomGUIFront.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 0f), 600f, 1000f, true); ValheimLevelSystem.Menu.SetActive(false); int num = 0; foreach (PlayerAttribute specialization in Enum.GetValues(typeof(PlayerSpecialization)).Cast<PlayerAttribute>().ToList()) { if (specialization != 0) { GameObject val = GUIManager.Instance.CreateButton(System.Runtime.CompilerServices.Unsafe.As<PlayerAttribute, PlayerSpecialization>(ref specialization).ToString(), menu.transform, new Vector2(0.12f, 1f), new Vector2(0.12f, 1f), new Vector2(0f, -55f + (float)(-115 * num)), 100f, 40f); val.SetActive(true); Button component = val.GetComponent<Button>(); ((UnityEvent)component.onClick).AddListener((UnityAction)delegate { SpecializationManager.SkillUp((PlayerSpecialization)specialization); }); GameObject value = GUIManager.Instance.CreateText(SpecializationManager.SpecializationDescription((PlayerSpecialization)specialization), menu.transform, new Vector2(0.6f, 1f), new Vector2(0.6f, 1f), new Vector2(0f, -70f + (float)(-115 * num)), GUIManager.Instance.AveriaSerifBold, 12, GUIManager.Instance.ValheimOrange, true, Color.black, 400f, 110f, false); ValheimLevelSystem.menuItems.Add(System.Runtime.CompilerServices.Unsafe.As<PlayerAttribute, PlayerSpecialization>(ref specialization).ToString() + "specDescr", value); num++; } } GameObject val2 = GUIManager.Instance.CreateButton("Cancel", menu.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, -450f), 150f, 50f); val2.SetActive(true); Button component2 = val2.GetComponent<Button>(); ((UnityEvent)component2.onClick).AddListener(new UnityAction(DestroyMenu)); } bool active = !ValheimLevelSystem.Menu.activeSelf; menu.SetActive(active); } public static void UpdateSpecDescr() { foreach (PlayerSpecialization item in Enum.GetValues(typeof(PlayerSpecialization)).Cast<PlayerSpecialization>().ToList()) { ValheimLevelSystem.menuItems.TryGetValue(item.ToString() + "specDescr", out var value); if (Object.op_Implicit((Object)(object)value)) { value.GetComponent<Text>().text = SpecializationManager.SpecializationDescription(item); } } } public static void DestroyMenu() { menu.SetActive(false); } } public class GUIConfirm { public static GameObject menu; public static void CreateResetSkillMenu() { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005f: 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_00b2: 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_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Expected O, but got Unknown //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Expected O, but got Unknown GUI.DestroyMenu(); if (!Object.op_Implicit((Object)(object)menu) && Object.op_Implicit((Object)(object)Player.m_localPlayer)) { menu = GUIManager.Instance.CreateWoodpanel(GUIManager.CustomGUIFront.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 0f), 300f, 220f, true); ValheimLevelSystem.Menu.SetActive(false); GameObject val = GUIManager.Instance.CreateText("Reset Points", menu.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(0f, -60f), GUIManager.Instance.AveriaSerifBold, 25, GUIManager.Instance.ValheimOrange, true, Color.black, 150f, 40f, false); GameObject val2 = GUIManager.Instance.CreateButton("Yes", menu.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(70f, -30f), 100f, 50f); val2.SetActive(true); Button component = val2.GetComponent<Button>(); ((UnityEvent)component.onClick).AddListener(new UnityAction(Reset.ResetSkills)); GameObject val3 = GUIManager.Instance.CreateButton("No", menu.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(-70f, -30f), 100f, 50f); val3.SetActive(true); Button component2 = val3.GetComponent<Button>(); ((UnityEvent)component2.onClick).AddListener(new UnityAction(DestroyMenu)); } bool active = !ValheimLevelSystem.Menu.activeSelf; menu.SetActive(active); } public static void DestroyMenu() { menu.SetActive(false); } } public class Level { public static bool StanceActive; public static int StanceCycle; public static float StanceCD; public static List<LevelRequirement> LevelRequirementList { get; set; } public static void ToggleStance() { if (GetSpecialization() == PlayerSpecialization.None || StanceCD > 0f) { return; } if (GetSpecialization() == PlayerSpecialization.Ritualist || GetSpecialization() == PlayerSpecialization.Torturer) { StanceActive = true; StanceCycle = StanceCycle % 3 + 1; } else { StanceActive = !StanceActive; } StanceCD = ValheimLevelSystem.StanceCD.Value; string text = ""; switch (GetSpecialization()) { case PlayerSpecialization.Protector: text = "Defensive Stance "; break; case PlayerSpecialization.Ritualist: text = "Adaptive Stance - "; switch (StanceCycle) { case 1: text += "Health "; break; case 2: text += "Stamina "; break; case 3: text += "Eitr "; break; } StanceCD *= 0.25f; break; case PlayerSpecialization.Runeblade: text = "Fury Stance "; break; case PlayerSpecialization.Berserker: text = "Berserker Stance "; break; case PlayerSpecialization.Torturer: text = "Pain Stance - "; switch (StanceCycle) { case 1: text += "Poison "; break; case 2: text += "Fire "; break; case 3: text += "Spirit "; break; } StanceCD *= 0.25f; break; case PlayerSpecialization.Worker: text = "Burden Stance "; break; case PlayerSpecialization.Slugger: text = "Overpower Stance "; break; case PlayerSpecialization.Infused: text = "Overflow Stance "; break; } GUILog.UpdateLog(text + (StanceActive ? "On" : "Off")); } public static void InitLevelRequirementList() { LevelRequirementList = new List<LevelRequirement>(); int value = ValheimLevelSystem.BaseExpPerLevel.Value; float value2 = ValheimLevelSystem.ExpMultiplierPerLevel.Value; for (int i = 0; i <= ValheimLevelSystem.MaxLevel.Value; i++) { LevelRequirement levelRequirement = new LevelRequirement { Level = i }; if (i == 0) { levelRequirement.ExpAmount = value; LevelRequirementList.Add(levelRequirement); } else { long expAmount = LevelRequirementList.Last().ExpAmount; levelRequirement.ExpAmount = (long)Math.Round((float)(expAmount + value) * value2); LevelRequirementList.Add(levelRequirement); } } } public static void RaiseExpWithValues(int expAmount, int level, bool boss = false) { //IL_004c: Unknown result type (might be due to invalid IL or missing references) if (GetSpecialization() != PlayerSpecialization.Worker) { float num = expAmount; num *= 1f + (float)(level - 1) * ValheimLevelSystem.ExpPercentageBonusPerStar.Value; if (boss) { num *= (float)ValheimLevelSystem.BossExpMultiplier.Value; } int playersInRangeXZ = Player.GetPlayersInRangeXZ(((Component)Player.m_localPlayer).transform.position, (float)ValheimLevelSystem.RangeToDivideExp.Value); num *= ValheimLevelSystem.ExpRate.Value; if (playersInRangeXZ > 0) { num /= (float)playersInRangeXZ; } int num2 = Math.Max(Convert.ToInt32(num), 1); AddExp(num2); } } public static void RaiseExpWork(int expToGive) { float num = expToGive; num *= ValheimLevelSystem.ExpRateWork.Value; if (GetSpecialization() == PlayerSpecialization.Worker) { num *= Worker.PassiveXPMult.Value; } AddExp(Convert.ToInt32(num)); } public static void RaiseExpBase(int expToGive) { float num = expToGive; if (GetSpecialization() == PlayerSpecialization.Worker) { num *= Worker.PassiveXPMult.Value; } AddExp(Convert.ToInt32(num)); } public static void AddExp(long exp) { if (!Player.m_localPlayer.m_knownTexts.ContainsKey("playerLevel")) { Player.m_localPlayer.m_knownTexts.Add("playerLevel", "0"); Player.m_localPlayer.m_knownTexts.Add("playerExp", exp.ToString()); } else { long num = long.Parse(Player.m_localPlayer.m_knownTexts["playerExp"]); int currentLevel = Convert.ToInt32(Player.m_localPlayer.m_knownTexts["playerLevel"]); if (currentLevel == ValheimLevelSystem.MaxLevel.Value) { return; } long num2 = exp + num; LevelRequirement levelRequirement = LevelRequirementList.FirstOrDefault((LevelRequirement x) => x.Level == currentLevel); if (levelRequirement == null) { return; } if (num2 >= levelRequirement.ExpAmount) { GUILog.UpdateLog("You gained " + (levelRequirement.ExpAmount - num) + " XP."); PlayerLevelUp(currentLevel); AddExp(num2 - levelRequirement.ExpAmount); } else { if (exp > 0) { GUILog.UpdateLog("You gained " + exp + " XP."); } else { GUILog.UpdateLog("You lost " + -exp + " XP."); } Player.m_localPlayer.m_knownTexts["playerExp"] = num2.ToString(); } } GUI.UpdateExpText(); GUIXP.UpdateXPBar(); } public static void RemoveExpOnDeath() { if (ValheimLevelSystem.ExpPercentageToLoseOnDeath.Value > 0f && Player.m_localPlayer.m_knownTexts.TryGetValue("playerExp", out var value)) { long num = Convert.ToInt64(value); long maxExpForCurrentLevel = GetMaxExpForCurrentLevel(); float value2 = ValheimLevelSystem.ExpPercentageToLoseOnDeath.Value; long num2 = (long)((float)(maxExpForCurrentLevel / 100) * value2); if (num2 > num) { num2 = num; } AddExp(num2 * -1); } } private static void PlayerLevelUp(int currentLevel) { Player.m_localPlayer.m_knownTexts["playerExp"] = "0"; Player.m_localPlayer.m_knownTexts["playerLevel"] = (currentLevel + 1).ToString(); AddPoints(ValheimLevelSystem.PointsPerLevel.Value); AddAttributePoints(ValheimLevelSystem.AttributePointsPerLevel.Value); ((Character)Player.m_localPlayer).Message((MessageType)2, "Level: " + (currentLevel + 1), 0, (Sprite)null); GUI.UpdatePlayerLevelText(); GUILog.UpdateWarning(); GUILog.UpdateLog("Reached level " + (currentLevel + 1) + "!"); } public static long GetMaxExpForCurrentLevel() { Player localPlayer = Player.m_localPlayer; if (!Object.op_Implicit((Object)(object)localPlayer) || ((Character)localPlayer).InCutscene() || ((Character)localPlayer).IsTeleporting()) { return 0L; } return LevelRequirementList.FirstOrDefault((LevelRequirement x) => x.Level == long.Parse(Player.m_localPlayer.m_knownTexts["playerLevel"]))?.ExpAmount ?? 0; } public static string GetLevel() { if (!Player.m_localPlayer.m_knownTexts.ContainsKey("playerLevel")) { Player.m_localPlayer.m_knownTexts.Add("playerLevel", "0"); } return Player.m_localPlayer.m_knownTexts["playerLevel"]; } public static void SetLevelMax() { if (!Player.m_localPlayer.m_knownTexts.ContainsKey("playerLevel")) { Player.m_localPlayer.m_knownTexts.Add("playerLevel", "0"); } Player.m_localPlayer.m_knownTexts["playerLevel"] = ValheimLevelSystem.MaxLevel.Value.ToString(); ResetExp(); } public static string GetExp() { if (!Player.m_localPlayer.m_knownTexts.ContainsKey("playerExp")) { Player.m_localPlayer.m_knownTexts.Add("playerExp", "0"); } return Player.m_localPlayer.m_knownTexts["playerExp"]; } public static void ResetExp() { if (!Player.m_localPlayer.m_knownTexts.ContainsKey("playerExp")) { Player.m_localPlayer.m_knownTexts.Add("playerExp", "0"); } Player.m_localPlayer.m_knownTexts["playerExp"] = "0"; } public static string GetExpVerbose() { float num = Convert.ToInt32(GetExp()); float num2 = Convert.ToInt32(GetMaxExpForCurrentLevel()); string text = ((num > 1000000f) ? (GetThreeDigits(Math.Round(num / 1000000f, 2)) + "M") : ((!(num > 1000f)) ? Math.Round(num).ToString() : (GetThreeDigits(Math.Round(num / 1000f, 2)) + "K"))); string text2 = ((num2 > 1000000f) ? (GetThreeDigits(Math.Round(num2 / 1000000f, 2)) + "M") : ((!(num2 > 1000f)) ? Math.Round(num2).ToString() : (GetThreeDigits(Math.Round(num2 / 1000f, 2)) + "K"))); return text + " / " + text2; } private static string GetThreeDigits(double number) { string text = ""; string text2 = number.ToString(); int num = 0; string text3 = text2; for (int i = 0; i < text3.Length; i++) { char c = text3[i]; if (num == 3) { break; } text += c; if (c != '.') { num++; } } return text; } public static string GetAvailablePoints() { if (!Player.m_localPlayer.m_knownTexts.ContainsKey("playerAvailablePoints")) { Player.m_localPlayer.m_knownTexts.Add("playerAvailablePoints", ValheimLevelSystem.StartingPoints.Value.ToString()); } return Player.m_localPlayer.m_knownTexts["playerAvailablePoints"]; } public static string GetAvailableAttributePoints() { if (!Player.m_localPlayer.m_knownTexts.ContainsKey("playerAvailableAttributePoints")) { Player.m_localPlayer.m_knownTexts.Add("playerAvailableAttributePoints", "0"); } return Player.m_localPlayer.m_knownTexts["playerAvailableAttributePoints"]; } public static PlayerSpecialization GetSpecialization() { if (!Player.m_localPlayer.m_knownTexts.ContainsKey("playerSpecialization")) { Player.m_localPlayer.m_knownTexts.Add("playerSpecialization", "None"); return PlayerSpecialization.None; } return Player.m_localPlayer.m_knownTexts["playerSpecialization"] switch { "Protector" => PlayerSpecialization.Protector, "Ritualist" => PlayerSpecialization.Ritualist, "Runeblade" => PlayerSpecialization.Runeblade, "Berserker" => PlayerSpecialization.Berserker, "Torturer" => PlayerSpecialization.Torturer, "Worker" => PlayerSpecialization.Worker, "Slugger" => PlayerSpecialization.Slugger, "Infused" => PlayerSpecialization.Infused, _ => PlayerSpecialization.None, }; } public static string GetSpecializationStr() { return GetSpecialization().ToString(); } public static string GetAttributeTotal(PlayerAttribute playerAttribute) { int attributeLevel = GetAttributeLevel(playerAttribute); return playerAttribute switch { PlayerAttribute.Health => (attributeLevel + 25).ToString(), PlayerAttribute.Stamina => (attributeLevel + 50).ToString(), PlayerAttribute.Eitr => (attributeLevel + 20).ToString(), _ => "0", }; } public static string GetHighestBossKill() { if (!Player.m_localPlayer.m_knownTexts.ContainsKey("playerHighestBoss")) { Player.m_localPlayer.m_knownTexts.Add("playerHighestBoss", "0"); } return Player.m_localPlayer.m_knownTexts["playerHighestBoss"]; } public static void AddPoints(int points) { if (!Player.m_localPlayer.m_knownTexts.ContainsKey("playerAvailablePoints")) { Player.m_localPlayer.m_knownTexts.Add("playerAvailablePoints", "0"); } int num = Convert.ToInt32(GetAvailablePoints()); Player.m_localPlayer.m_knownTexts["playerAvailablePoints"] = (num + points).ToString(); GUI.UpdatePlayerPointsAvailable(); } public static void AddAttributePoints(int points) { if (!Player.m_localPlayer.m_knownTexts.ContainsKey("playerAvailableAttributePoints")) { Player.m_localPlayer.m_knownTexts.Add("playerAvailableAttributePoints", "0"); } int num = Convert.ToInt32(GetAvailableAttributePoints()); Player.m_localPlayer.m_knownTexts["playerAvailableAttributePoints"] = (num + points).ToString(); GUI.UpdatePlayerAttributePointsAvailable(); } public static void IncreaseHighestBossKill(int boss_lvl) { int num = boss_lvl - Convert.ToInt32(GetHighestBossKill()); if (num > 0) { int num2 = Convert.ToInt32(GetAvailableAttributePoints()) + ValheimLevelSystem.PointsPerBoss.Value * num; Player.m_localPlayer.m_knownTexts["playerAvailableAttributePoints"] = num2.ToString(); Player.m_localPlayer.m_knownTexts["playerHighestBoss"] = boss_lvl.ToString(); GUI.UpdatePlayerPointsAvailable(); GUILog.UpdateWarning(); GUILog.UpdateLog("You gained " + ValheimLevelSystem.PointsPerBoss.Value * num + " attribute points!"); } } public static void RemovePoints(int points) { int num = Convert.ToInt32(GetAvailablePoints()); Player.m_localPlayer.m_knownTexts["playerAvailablePoints"] = (num - points).ToString(); GUI.UpdatePlayerPointsAvailable(); } public static void RemoveAttributePoints(int points) { int num = Convert.ToInt32(GetAvailableAttributePoints()); Player.m_localPlayer.m_knownTexts["playerAvailableAttributePoints"] = (num - points).ToString(); GUI.UpdatePlayerAttributePointsAvailable(); } public static int GetSkillLevel(Skill skill) { if (!ValheimLevelSystem.listInitiliazed) { return 0; } if (Player.m_localPlayer.m_knownTexts.TryGetValue("player" + skill, out var value)) { return Convert.ToInt32(value); } Debug.Log((object)("Unable to find player" + skill)); StackTrace stackTrace = new StackTrace(); Debug.Log((object)stackTrace); Player.m_localPlayer.m_knownTexts.Add("player" + skill, "0"); return Convert.ToInt32(Player.m_localPlayer.m_knownTexts["player" + skill]); } public static int GetAttributeLevel(PlayerAttribute attribute) { if (!ValheimLevelSystem.listInitiliazed) { return 0; } if (Player.m_localPlayer.m_knownTexts.TryGetValue("playerAttribute" + attribute, out var value)) { return Convert.ToInt32(value); } Debug.Log((object)("Unable to find playerAttribute" + attribute)); StackTrace stackTrace = new StackTrace(); Debug.Log((object)stackTrace); Player.m_localPlayer.m_knownTexts.Add("playerAttribute" + attribute, "0"); return Convert.ToInt32(Player.m_localPlayer.m_knownTexts["playerAttribute" + attribute]); } public static float CalcEffect(int lvl, float valreg, float valdim, bool eff) { int value = ValheimLevelSystem.BreakPoint.Value; float num = 0f; if (eff) { num = 1f; if (lvl <= value) { return 1f / (1f + valreg * (float)lvl); } return 1f / (1f + valreg * (float)value + valdim * (float)(lvl - value)); } if (lvl <= value) { return valreg * (float)lvl; } return valreg * (float)value + valdim * (float)(lvl - value); } } public class LevelRequirement { public int Level { get; set; } public long ExpAmount { get; set; } } internal class GUI { public static void ToggleMenu() { if (!Object.op_Implicit((Object)(object)ValheimLevelSystem.Menu) && Object.op_Implicit((Object)(object)Player.m_localPlayer)) { if (GUIManager.Instance == null) { Debug.LogError((object)"GUIManager instance is null"); return; } if (!Object.op_Implicit((Object)(object)GUIManager.CustomGUIFront)) { Debug.LogError((object)"GUIManager CustomGUI is null"); return; } LoadMenu(); } ResetIfIncompatible(); if (ValheimLevelSystem.listInitiliazed) { UpdateAll(); } bool active = !ValheimLevelSystem.Menu.activeSelf; ValheimLevelSystem.Menu.SetActive(active); } public static void DestroyMenu() { ValheimLevelSystem.Menu.SetActive(false); } public static void LoadMenu() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003f: 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_0094: 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_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Expected O, but got Unknown //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_02a7: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_02d3: Unknown result type (might be due to invalid IL or missing references) //IL_02d9: Unknown result type (might be due to invalid IL or missing references) //IL_030e: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_0333: Unknown result type (might be due to invalid IL or missing references) //IL_036a: Unknown result type (might be due to invalid IL or missing references) //IL_0374: Expected O, but got Unknown //IL_0395: Unknown result type (might be due to invalid IL or missing references) //IL_03a4: Unknown result type (might be due to invalid IL or missing references) //IL_03bf: Unknown result type (might be due to invalid IL or missing references) //IL_03d5: Unknown result type (might be due to invalid IL or missing references) //IL_03db: Unknown result type (might be due to invalid IL or missing references) //IL_04b1: Unknown result type (might be due to invalid IL or missing references) //IL_04c0: Unknown result type (might be due to invalid IL or missing references) //IL_04d6: Unknown result type (might be due to invalid IL or missing references) //IL_04ec: Unknown result type (might be due to invalid IL or missing references) //IL_04f2: Unknown result type (might be due to invalid IL or missing references) //IL_0527: Unknown result type (might be due to invalid IL or missing references) //IL_0536: Unknown result type (might be due to invalid IL or missing references) //IL_054c: Unknown result type (might be due to invalid IL or missing references) //IL_0583: Unknown result type (might be due to invalid IL or missing references) //IL_058d: Expected O, but got Unknown //IL_05b3: Unknown result type (might be due to invalid IL or missing references) //IL_05c2: Unknown result type (might be due to invalid IL or missing references) //IL_05dd: Unknown result type (might be due to invalid IL or missing references) //IL_05f3: Unknown result type (might be due to invalid IL or missing references) //IL_05f9: Unknown result type (might be due to invalid IL or missing references) //IL_0675: Unknown result type (might be due to invalid IL or missing references) //IL_0684: Unknown result type (might be due to invalid IL or missing references) //IL_0693: Unknown result type (might be due to invalid IL or missing references) //IL_06a9: Unknown result type (might be due to invalid IL or missing references) //IL_06af: Unknown result type (might be due to invalid IL or missing references) //IL_0715: Unknown result type (might be due to invalid IL or missing references) //IL_0724: Unknown result type (might be due to invalid IL or missing references) //IL_0733: Unknown result type (might be due to invalid IL or missing references) //IL_0749: Unknown result type (might be due to invalid IL or missing references) //IL_074f: Unknown result type (might be due to invalid IL or missing references) //IL_07a0: Unknown result type (might be due to invalid IL or missing references) //IL_07af: Unknown result type (might be due to invalid IL or missing references) //IL_07be: Unknown result type (might be due to invalid IL or missing references) //IL_07d4: Unknown result type (might be due to invalid IL or missing references) //IL_07da: Unknown result type (might be due to invalid IL or missing references) //IL_082b: Unknown result type (might be due to invalid IL or missing references) //IL_083a: Unknown result type (might be due to invalid IL or missing references) //IL_0849: Unknown result type (might be due to invalid IL or missing references) //IL_085f: Unknown result type (might be due to invalid IL or missing references) //IL_0865: Unknown result type (might be due to invalid IL or missing references) //IL_08ac: Unknown result type (might be due to invalid IL or missing references) //IL_08bb: Unknown result type (might be due to invalid IL or missing references) //IL_08ca: Unknown result type (might be due to invalid IL or missing references) //IL_0900: Unknown result type (might be due to invalid IL or missing references) //IL_090a: Expected O, but got Unknown //IL_0929: Unknown result type (might be due to invalid IL or missing references) //IL_0938: Unknown result type (might be due to invalid IL or missing references) //IL_0947: Unknown result type (might be due to invalid IL or missing references) //IL_097d: Unknown result type (might be due to invalid IL or missing references) //IL_0987: Expected O, but got Unknown //IL_09a6: Unknown result type (might be due to invalid IL or missing references) //IL_09b5: Unknown result type (might be due to invalid IL or missing references) //IL_09c4: Unknown result type (might be due to invalid IL or missing references) //IL_09fa: Unknown result type (might be due to invalid IL or missing references) //IL_0a04: Expected O, but got Unknown if ((Object)(object)Player.m_localPlayer == (Object)null) { return; } ValheimLevelSystem.Menu = GUIManager.Instance.CreateWoodpanel(GUIManager.CustomGUIFront.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 0f), 400f, 850f, true); ValheimLevelSystem.Menu.SetActive(false); GameObject val = GUIManager.Instance.CreateScrollView(ValheimLevelSystem.Menu.transform, false, true, 8f, 50f, GUIManager.Instance.ValheimScrollbarHandleColorBlock, new Color(0.1568628f, 0.1019608f, 0.0627451f, 1f), 350f, 300f); RectTransform val2 = (RectTransform)val.transform; val2.anchoredPosition = new Vector2(0f, -170f); val.SetActive(true); ((Component)val.transform.Find("Scroll View")).GetComponent<ScrollRect>().verticalNormalizedPosition = 1f; GameObject value = GUIManager.Instance.CreateText(Player.m_localPlayer.GetPlayerName(), ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(-100f, -50f), GUIManager.Instance.AveriaSerifBold, 25, GUIManager.Instance.ValheimOrange, true, Color.black, 150f, 40f, false); GameObject value2 = GUIManager.Instance.CreateText("Level: " + Level.GetLevel(), ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(120f, -50f), GUIManager.Instance.AveriaSerifBold, 25, GUIManager.Instance.ValheimOrange, true, Color.black, 150f, 40f, false); ValheimLevelSystem.menuItems.Add("levelText", value2); ValheimLevelSystem.menuItems.Add("nameText", value); int num = 0; List<GameObject> list = new List<GameObject>(); foreach (Skill skill in Enum.GetValues(typeof(Skill)).Cast<Skill>().ToList()) { int skillLevel = Level.GetSkillLevel(skill); GameObject val3 = GUIManager.Instance.CreateText(skill.ToString(), ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(-100f, -240f + (float)(-28 * num)), GUIManager.Instance.AveriaSerifBold, 18, GUIManager.Instance.ValheimOrange, true, Color.black, 150f, 25f, false); GameObject val4 = GUIManager.Instance.CreateButton(" + ", ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(110f, -237f + (float)(-28 * num)), 30f, 25f); val4.SetActive(true); Button component = val4.GetComponent<Button>(); ((UnityEvent)component.onClick).AddListener((UnityAction)delegate { SkillManager.SkillUp(skill); }); GameObject value3 = GUIManager.Instance.CreateText(skillLevel.ToString(), ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(70f, -240f + (float)(-28 * num++)), GUIManager.Instance.AveriaSerifBold, 18, GUIManager.Instance.ValheimOrange, true, Color.black, 40f, 25f, false); ValheimLevelSystem.menuItems.Add(skill.ToString() + "Text", value3); } num = 0; foreach (PlayerAttribute playerAttribute in Enum.GetValues(typeof(PlayerAttribute)).Cast<PlayerAttribute>().ToList()) { int attributeLevel = Level.GetAttributeLevel(playerAttribute); GameObject val5 = GUIManager.Instance.CreateText(playerAttribute.ToString(), ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(-100f, -130f + (float)(-28 * num)), GUIManager.Instance.AveriaSerifBold, 18, GUIManager.Instance.ValheimOrange, true, Color.black, 150f, 25f, false); GameObject val6 = GUIManager.Instance.CreateButton(" + ", ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(110f, -127f + (float)(-28 * num)), 30f, 25f); val6.SetActive(true); Button component2 = val6.GetComponent<Button>(); ((UnityEvent)component2.onClick).AddListener((UnityAction)delegate { AttributeManager.SkillUp(playerAttribute); }); GameObject value4 = GUIManager.Instance.CreateText(Level.GetAttributeTotal(playerAttribute), ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(70f, -130f + (float)(-28 * num++)), GUIManager.Instance.AveriaSerifBold, 18, GUIManager.Instance.ValheimOrange, true, Color.black, 40f, 25f, false); ValheimLevelSystem.menuItems.Add(playerAttribute.ToString() + "Text", value4); } GameObject val7 = GUIManager.Instance.CreateText("Available Effects:", ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(-100f, 0f), GUIManager.Instance.AveriaSerifBold, 15, GUIManager.Instance.ValheimOrange, true, Color.black, 150f, 20f, false); CreateAvailableEffectListText(val); ((Component)val.transform.Find("Scroll View")).GetComponent<ScrollRect>().verticalNormalizedPosition = 1f; GameObject value5 = GUIManager.Instance.CreateText("Exp: " + Level.GetExpVerbose(), ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(120f, -90f), GUIManager.Instance.AveriaSerifBold, 15, GUIManager.Instance.ValheimOrange, true, Color.black, 150f, 40f, false); ValheimLevelSystem.menuItems.Add("ExpText", value5); GameObject value6 = GUIManager.Instance.CreateText("Skill Points: " + Level.GetAvailablePoints(), ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(-100f, -225f), GUIManager.Instance.AveriaSerifBold, 15, GUIManager.Instance.ValheimOrange, true, Color.black, 150f, 40f, false); ValheimLevelSystem.menuItems.Add("PlayerPointsAvailableText", value6); GameObject value7 = GUIManager.Instance.CreateText("Attribute Points: " + Level.GetAvailableAttributePoints(), ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(-100f, -115f), GUIManager.Instance.AveriaSerifBold, 15, GUIManager.Instance.ValheimOrange, true, Color.black, 150f, 40f, false); ValheimLevelSystem.menuItems.Add("PlayerAttributePointsAvailableText", value7); GameObject val8 = GUIManager.Instance.CreateButton("Reset", ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(140f, -375f), 80f, 30f); val8.SetActive(true); Button component3 = val8.GetComponent<Button>(); ((UnityEvent)component3.onClick).AddListener(new UnityAction(GUIConfirm.CreateResetSkillMenu)); GameObject val9 = GUIManager.Instance.CreateButton("Close", ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, -350f), 170f, 45f); val9.SetActive(true); Button component4 = val9.GetComponent<Button>(); ((UnityEvent)component4.onClick).AddListener(new UnityAction(DestroyMenu)); GameObject val10 = GUIManager.Instance.CreateButton(Level.GetSpecializationStr(), ValheimLevelSystem.Menu.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(-125f, -75f), 100f, 30f); val8.SetActive(true); Button component5 = val10.GetComponent<Button>(); ((UnityEvent)component5.onClick).AddListener(new UnityAction(GUISpec.CreateSpecializationMenu)); ValheimLevelSystem.menuItems.Add("specButton", val10); } private static void CreateAvailableEffectListText(GameObject scrollView) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) GameObject value = GUIManager.Instance.CreateText("", scrollView.transform.Find("Scroll View/Viewport/Content"), new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 80f), GUIManager.Instance.AveriaSerifBold, 15, GUIManager.Instance.ValheimOrange, true, Color.black, 300f, 150f, false); ValheimLevelSystem.menuItems.Add("availableEffectsListText", value); SetAvailableEffectListText(); } private static void ResetIfIncompatible() { int skillLevel = Level.GetSkillLevel(Skill.Constitution); int skillLevel2 = Level.GetSkillLevel(Skill.Strength); int skillLevel3 = Level.GetSkillLevel(Skill.Agility); int skillLevel4 = Level.GetSkillLevel(Skill.Intelligence); int skillLevel5 = Level.GetSkillLevel(Skill.Focus); int skillLevel6 = Level.GetSkillLevel(Skill.Magic); int attributeLevel = Level.GetAttributeLevel(PlayerAttribute.Health); int attributeLevel2 = Level.GetAttributeLevel(PlayerAttribute.Stamina); int attributeLevel3 = Level.GetAttributeLevel(PlayerAttribute.Eitr); int num = skillLevel + skillLevel2 + skillLevel3 + skillLevel4 + skillLevel5 + skillLevel6; int num2 = attributeLevel + attributeLevel2 + attributeLevel3; int num3 = Convert.ToInt32(Level.GetAvailablePoints()); int num4 = Convert.ToInt32(Level.GetAvailableAttributePoints()); int num5 = Convert.ToInt32(Level.GetLevel()); int num6 = (int)Focus.getEffectValue(2); int specializationAttribute = SpecializationManager.getSpecializationAttribute(Level.GetSpecialization(), PlayerAttribute.Health); specializationAttribute += SpecializationManager.getSpecializationAttribute(Level.GetSpecialization(), PlayerAttribute.Stamina); specializationAttribute += SpecializationManager.getSpecializationAttribute(Level.GetSpecialization(), PlayerAttribute.Eitr); int value = ValheimLevelSystem.MaxLevel.Value; if (num5 > value) { GUILog.UpdateLog("Current level is above maximum level!"); Level.SetLevelMax(); Reset.ResetSkillsIgnorePenalty(); } int num7 = Convert.ToInt32(Level.GetHighestBossKill()) * ValheimLevelSystem.PointsPerBoss.Value; if (num5 * ValheimLevelSystem.PointsPerLevel.Value + ValheimLevelSystem.StartingPoints.Value != num3 + num || num5 * ValheimLevelSystem.AttributePointsPerLevel.Value + num7 + num6 + specializationAttribute != num4 + num2) { GUILog.UpdateLog("Skill points or attribute points impossible!"); Reset.ResetSkillsIgnorePenalty(); } } public static void SetAvailableEffectListText() { ValheimLevelSystem.menuItems.TryGetValue("availableEffectsListText", out var value); if (Object.op_Implicit((Object)(object)value)) { value.GetComponent<Text>().text = ""; SetStrengthAvailableEffectListText(value); SetAgilityAvailableEffectListText(value); SetIntelligenceAvailableEffectListText(value); SetFocusAvailableEffectListText(value); SetConstitutionAvailableEffectListText(value); SetMagicAvailableEffectListText(value); if (Level.GetSpecialization() != 0) { Text component = value.GetComponent<Text>(); component.text += SpecializationManager.SpecializationDescription(Level.GetSpecialization()); } } } private static void SetConstitutionAvailableEffectListText(GameObject txt) { int skillLevel = Level.GetSkillLevel(Skill.Constitution); if (skillLevel != 0) { Text component = txt.GetComponent<Text>(); component.text = component.text + "\n +" + Math.Round(Constitution.getEffectValue(0) * 100f, 2) + "% Health Regeneration"; if (skillLevel >= ValheimLevelSystem.FirstPerkLevel.Value) { Text component2 = txt.GetComponent<Text>(); component2.text = component2.text + "\n +" + Math.Round(Constitution.getEffectValue(1) * 100f, 2) + "% Armor"; } if (skillLevel >= ValheimLevelSystem.BonusSkillXPLevel.Value) { Text component3 = txt.GetComponent<Text>(); component3.text += "\n +Exp: Block, Polearm, Spear, Sword"; } if (skillLevel >= ValheimLevelSystem.SecondPerkLevel.Value) { Text component4 = txt.GetComponent<Text>(); component4.text = component4.text + "\n +" + Math.Round(Constitution.getEffectValue(2) * 100f, 2) + "% Stamina on parry"; } if (skillLevel >= ValheimLevelSystem.MasteryPerkLevel.Value) { Text component5 = txt.GetComponent<Text>(); component5.text = component5.text + "\n +Second Wind " + ((skillLevel >= ValheimLevelSystem.MasteryPlusPerkLevel.Value) ? "II " : "I ") + Math.Round(Constitution.getEffectValue(3) * 100f, 2) + "%"; } Text component6 = txt.GetComponent<Text>(); component6.text += "\n\n"; } } private static void SetFocusAvailableEffectListText(GameObject txt) { int skillLevel = Level.GetSkillLevel(Skill.Focus); if (skillLevel != 0) { Text component = txt.GetComponent<Text>(); component.text = component.text + " +" + Math.Round(Focus.getEffectValue(0) * 100f, 2) + "% Power, Mead, Food Duration"; if (skillLevel >= ValheimLevelSystem.FirstPerkLevel.Value) { Text component2 = txt.GetComponent<Text>(); component2.text = component2.text + "\n +" + (int)Focus.getEffectValue(1) + " Comfort"; } if (skillLevel >= ValheimLevelSystem.BonusSkillXPLevel.Value) { Text component3 = txt.GetComponent<Text>(); component3.text += "\n +Exp: Fish, Swim, Sneak, Ride"; } if (skillLevel >= ValheimLevelSystem.SecondPerkLevel.Value) { Text component4 = txt.GetComponent<Text>(); component4.text = component4.text + "\n +" + (int)Focus.getEffectValue(2) + " Attribute Points"; } if (skillLevel >= ValheimLevelSystem.MasteryPerkLevel.Value) { Text component5 = txt.GetComponent<Text>(); component5.text = component5.text + "\n +Navigation " + ((skillLevel >= ValheimLevelSystem.MasteryPlusPerkLevel.Value) ? "II" : "I"); } Text component6 = txt.GetComponent<Text>(); component6.text += "\n\n"; } } private static void SetIntelligenceAvailableEffectListText(GameObject txt) { int skillLevel = Level.GetSkillLevel(Skill.Intelligence); if (skillLevel != 0) { Text component = txt.GetComponent<Text>(); component.text = component.text + " +" + Math.Round(Intelligence.getEffectValue(0) * 100f, 2) + "% Stance effectiveness"; if (skillLevel >= ValheimLevelSystem.FirstPerkLevel.Value) { Text component2 = txt.GetComponent<Text>(); component2.text = component2.text + "\n +" + Math.Round(Intelligence.getEffectValue(1) * 100f, 2) + "% Skill effectiveness"; } if (skillLevel >= ValheimLevelSystem.BonusSkillXPLevel.Value) { Text component3 = txt.GetComponent<Text>(); component3.text += "\n +Exp: all skills"; } if (skillLevel >= ValheimLevelSystem.SecondPerkLevel.Value) { Text component4 = txt.GetComponent<Text>(); component4.text = component4.text + "\n -" + Math.Round((1f - Intelligence.getEffectValue(2)) * 100f, 2) + "% Power and Mead Cooldown"; } if (skillLevel >= ValheimLevelSystem.MasteryPerkLevel.Value) { Text component5 = txt.GetComponent<Text>(); component5.text = component5.text + "\n +Power Heal " + ((skillLevel >= ValheimLevelSystem.MasteryPlusPerkLevel.Value) ? "II " : "I ") + Math.Round(Intelligence.getEffectValue(3) * 100f, 2) + "%"; } Text component6 = txt.GetComponent<Text>(); component6.text += "\n\n"; } } private static void SetAgilityAvailableEffectListText(GameObject txt) { int skillLevel = Level.GetSkillLevel(Skill.Agility); if (skillLevel != 0) { Text component = txt.GetComponent<Text>(); component.text = component.text + " +" + Math.Round(Agility.getEffectValue(0) * 100f, 2) + "% Movement Speed"; if (skillLevel >= ValheimLevelSystem.FirstPerkLevel.Value) { Text component2 = txt.GetComponent<Text>(); component2.text = component2.text + "\n +" + Math.Round(Agility.getEffectValue(1) * 100f, 2) + "% Stamina Regeneration"; } if (skillLevel >= ValheimLevelSystem.BonusSkillXPLevel.Value) { Text component3 = txt.GetComponent<Text>(); component3.text += "\n +Exp: Run, Jump, Knife, Fist, Bow"; } if (skillLevel >= ValheimLevelSystem.SecondPerkLevel.Value) { Text component4 = txt.GetComponent<Text>(); component4.text = component4.text + "\n +" + Math.Round(Agility.getEffectValue(2) * 100f, 2) + "% Stamina on dodge"; } if (skillLevel >= ValheimLevelSystem.MasteryPerkLevel.Value) { Text component5 = txt.GetComponent<Text>(); component5.text = component5.text + "\n +Power Attack " + ((skillLevel >= ValheimLevelSystem.MasteryPlusPerkLevel.Value) ? "II " : "I ") + Math.Round(Agility.getEffectValue(3) * 100f, 2) + "%"; } Text component6 = txt.GetComponent<Text>(); component6.text += "\n\n"; } } private static void SetStrengthAvailableEffectListText(GameObject txt) { int skillLevel = Level.GetSkillLevel(Skill.Strength); if (skillLevel != 0) { Text component = txt.GetComponent<Text>(); component.text = component.text + " +" + (int)Strength.getEffectValue(0) + " Carry Weight"; if (skillLevel >= ValheimLevelSystem.FirstPerkLevel.Value) { Text component2 = txt.GetComponent<Text>(); component2.text = component2.text + "\n +" + Math.Round(Strength.getEffectValue(1) * 100f, 2) + "% Damage/Eitr Channel Strike"; } if (skillLevel >= ValheimLevelSystem.BonusSkillXPLevel.Value) { Text component3 = txt.GetComponent<Text>(); component3.text += "\n +Exp: Pickaxe, Axe, Club, Crossbow"; } if (skillLevel >= ValheimLevelSystem.SecondPerkLevel.Value) { Text component4 = txt.GetComponent<Text>(); component4.text = component4.text + "\n +" + Math.Round(Strength.getEffectValue(2) * 100f, 2) + "% Stagger Damage"; } if (skillLevel >= ValheimLevelSystem.MasteryPerkLevel.Value) { Text component5 = txt.GetComponent<Text>(); component5.text = component5.text + "\n +Critical Hit " + ((skillLevel >= ValheimLevelSystem.MasteryPlusPerkLevel.Value) ? "II " : "I ") + Math.Round(Strength.getEffectValue(3) * 100f, 2) + "%"; } Text component6 = txt.GetComponent<Text>(); component6.text += "\n\n"; } } private static void SetMagicAvailableEffectListText(GameObject txt) { int skillLevel = Level.GetSkillLevel(Skill.Magic); if (skillLevel != 0) { Text component = txt.GetComponent<Text>(); component.text = component.text + " +" + Math.Round(Magic.getEffectValue(0), 2) + " Damage/Eitr Elemental Imbue"; if (skillLevel >= ValheimLevelSystem.FirstPerkLevel.Value) { Text component2 = txt.GetComponent<Text>(); component2.text = component2.text + "\n +" + Math.Round(Magic.getEffectValue(1) * 100f, 2) + "% Eitr Regeneration"; } if (skillLevel >= ValheimLevelSystem.BonusSkillXPLevel.Value) { Text component3 = txt.GetComponent<Text>(); component3.text += "\n +Exp: Blood Magic, Elemental Magic"; } if (skillLevel >= ValheimLevelSystem.SecondPerkLevel.Value) { Text component4 = txt.GetComponent<Text>(); component4.text = component4.text + "\n +" + Math.Round((1f - Magic.getEffectValue(2)) * 100f, 2) + "% Elemental/Poison Resistance"; } if (skillLevel >= ValheimLevelSystem.MasteryPerkLevel.Value) { Text component5 = txt.GetComponent<Text>(); component5.text = component5.text + "\n +Alchemy " + ((skillLevel >= ValheimLevelSystem.MasteryPlusPerkLevel.Value) ? "II " : "I ") + Math.Round(Magic.getEffectValue(3) * 100f, 2) + "%"; } Text component6 = txt.GetComponent<Text>(); component6.text += "\n\n"; } } public static void UpdateAll() { UpdatePlayerPointsAvailable(); UpdateSkillLevels(); UpdateAttributeLevels(); UpdateExpText(); UpdatePlayerLevelText(); } public static void UpdatePlayerPointsAvailable() { ValheimLevelSystem.menuItems.TryGetValue("PlayerPointsAvailableText", out var value); if (Object.op_Implicit((Object)(object)value)) { value.GetComponent<Text>().text = "Skill Points: " + Level.GetAvailablePoints(); } } public static void UpdatePlayerAttributePointsAvailable() { ValheimLevelSystem.menuItems.TryGetValue("PlayerAttributePointsAvailableText", out var value); if (Object.op_Implicit((Object)(object)value)) { value.GetComponent<Text>().text = "Attribute Points: " + Level.GetAvailableAttributePoints(); } } public static void UpdateSkillLevels() { foreach (Skill value in Enum.GetValues(typeof(Skill))) { string name = Enum.GetName(typeof(Skill), value); string level = Level.GetSkillLevel(value).ToString(); UpdateSkillLevelText(name, level); } } public static void UpdateAttributeLevels() { foreach (PlayerAttribute value2 in Enum.GetValues(typeof(PlayerAttribute))) { string name = Enum.GetName(typeof(PlayerAttribute), value2); string attributeTotal = Level.GetAttributeTotal(value2); ValheimLevelSystem.menuItems.TryGetValue(name + "Text", out var value); if (Object.op_Implicit((Object)(object)value)) { value.GetComponent<Text>().text = attributeTotal + " " + name; } } } public static void UpdateSkillLevelText(string skill, string level) { ValheimLevelSystem.menuItems.TryGetValue(skill + "Text", out var value); if (Object.op_Implicit((Object)(object)value)) { value.GetComponent<Text>().text = level + " " + skill; } SetAvailableEffectListText(); } public static void UpdateExpText() { ValheimLevelSystem.menuItems.TryGetValue("ExpText", out var value); if (Object.op_Implicit((Object)(object)value)) { value.GetComponent<Text>().text = "Exp: " + Level.GetExpVerbose(); } } public static void UpdatePlayerLevelText() { ValheimLevelSystem.menuItems.TryGetValue("levelText", out var value); if (Object.op_Implicit((Object)(object)value)) { value.GetComponent<Text>().text = "Level: " + Level.GetLevel(); } ValheimLevelSystem.menuItems.TryGetValue("nameText", out var value2); value2.GetComponent<Text>().text = Player.m_localPlayer.GetPlayerName(); ValheimLevelSystem.menuItems.TryGetValue("specButton", out var value3); value3.GetComponentInChildren<Text>().text = Level.GetSpecializationStr(); } } [HarmonyPatch] public class RPC { [HarmonyPrefix] [HarmonyPatch(typeof(Game), "Start")] public static void Prefix() { ZRoutedRpc.instance.Register<ZPackage>("RaiseExp", (Action<long, ZPackage>)RPC_RaiseExp); ZRoutedRpc.instance.Register<ZPackage>("RaiseExpPick", (Action<long, ZPackage>)RPC_RaiseExpPick); ZRoutedRpc.instance.Register<ZPackage>("RaiseExpMine", (Action<long, ZPackage>)RPC_RaiseExpMine); ZRoutedRpc.instance.Register<ZPackage>("RaiseExpChop", (Action<long, ZPackage>)RPC_RaiseExpChop); ZRoutedRpc.instance.Register<ZPackage>("RaiseExpFish", (Action<long, ZPackage>)RPC_RaiseExpFish); } public static void RPC_RaiseExpPick(long sender, ZPackage pkg) { if (!Object.op_Implicit((Object)(object)Player.m_localPlayer)) { return; } string[] array = pkg.ReadString().Split(new char[1] { ',' }); string pickedname = array[0]; int num = Convert.ToInt32(array[1]); pickedname = pickedname.Replace("(Clone)", ""); PickableExp pickableExp = ExpTable.PickableExpList.Where((PickableExp xx) => xx.Name.ToLower() == pickedname.ToLower()).FirstOrDefault(); if (pickableExp == null) { Debug.Log((object)("Unable to find pickable in ExpList: " + pickedname)); return; } int expAmount = pickableExp.ExpAmount; if (((Object)Player.m_localPlayer).GetInstanceID() == num) { Level.RaiseExpWork(expAmount); } } public static void RPC_RaiseExpMine(long sender, ZPackage pkg) { if (!Object.op_Implicit((Object)(object)Player.m_localPlayer)) { return; } string[] array = pkg.ReadString().Split(new char[1] { ',' }); string minedname = array[0]; int num = Convert.ToInt32(array[1]); minedname = minedname.Replace("(Clone)", ""); MineableExp mineableExp = ExpTable.MineableExpList.Where((MineableExp xx) => xx.Name.ToLower() == minedname.ToLower()).FirstOrDefault(); if (mineableExp == null) { if (minedname.ToLower().Contains("rock")) { mineableExp = ExpTable.MineableExpList.Where((MineableExp xx) => xx.Name.ToLower() == "rock".ToLower()).FirstOrDefault(); } if (mineableExp == null) { Debug.Log((object)("Unable to find mineable in ExpList: " + minedname)); return; } } int expAmount = mineableExp.ExpAmount; if (((Object)Player.m_localPlayer).GetInstanceID() == num) { Level.RaiseExpWork(expAmount); } } public static void RPC_RaiseExpChop(long sender, ZPackage pkg) { if (!Object.op_Implicit((Object)(object)Player.m_localPlayer)) { return; } string[] array = pkg.ReadString().Split(new char[1] { ',' }); string choppedname = array[0]; int num = Convert.ToInt32(array[1]); choppedname = choppedname.Replace("(Clone)", ""); ChoppableExp choppableExp = ExpTable.ChoppableExpList.Where((ChoppableExp xx) => choppedname.ToLower().Contains(xx.Name.ToLower())).FirstOrDefault(); if (choppableExp == null) { Debug.Log((object)("Unable to find choppable in ExpList: " + choppedname)); return; } int expAmount = choppableExp.ExpAmount; if (((Object)Player.m_localPlayer).GetInstanceID() == num) { Level.RaiseExpWork(expAmount); } } public static void RPC_RaiseExpFish(long sender, ZPackage pkg) { if (!Object.op_Implicit((Object)(object)Player.m_localPlayer)) { return; } string[] array = pkg.ReadString().Split(new char[1] { ',' }); string fishname = array[0]; int num = Convert.ToInt32(array[1]); int num2 = Convert.ToInt32(array[2]); FishableExp fishableExp = ExpTable.FishableExpList.Where((FishableExp xx) => fishname.ToLower().Contains(xx.Name.ToLower())).FirstOrDefault(); if (fishableExp == null) { Debug.Log((object)("Unable to find fishable in ExpList: " + fishname)); return; } int expToGive = (int)Math.Round((float)fishableExp.ExpAmount * (1f + ValheimLevelSystem.FishingQualityMultiplier.Value * (float)(num - 1))); if (((Object)Player.m_localPlayer).GetInstanceID() == num2) { Level.RaiseExpBase(expToGive); } } public static void RPC_RaiseExp(long sender, ZPackage pkg) { //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Invalid comparison between Unknown and I4 //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0285: Invalid comparison between Unknown and I4 if (!Object.op_Implicit((Object)(object)Player.m_localPlayer)) { return; } string[] array = pkg.ReadString().Split(new char[1] { ',' }); int num = Convert.ToInt32(array[0]); int num2 = Convert.ToInt32(array[1]); int num3 = Convert.ToInt32(array[2]); string name = array[3]; int level = Convert.ToInt32(array[4]); bool flag = Convert.ToBoolean(array[5]); if ((double)Vector3.Distance(new Vector3((float)num, (float)num2, (float)num3), ((Component)Player.m_localPlayer).transform.position) >= (double)ValheimLevelSystem.RangeToDivideExp.Value) { return; } name = name.Replace("(Clone)", ""); MonsterExp monsterExp = ExpTable.MonsterExpList.Where((MonsterExp xx) => xx.Name.ToLower() == name.ToLower()).FirstOrDefault(); if (monsterExp == null) { Debug.Log((object)("Unable to find creature in ExpList: " + name)); return; } Character component = PrefabManager.Instance.GetPrefab(name).GetComponent<Character>(); if ((int)component.m_faction == 8) { switch (name.ToLower()) { case "eikthyr": Level.IncreaseHighestBossKill(1); break; case "gd_king": Level.IncreaseHighestBossKill(2); break; case "bonemass": Level.IncreaseHighestBossKill(3); break; case "dragon": Level.IncreaseHighestBossKill(4); break; case "goblinking": Level.IncreaseHighestBossKill(5); break; case "seekerqueen": Level.IncreaseHighestBossKill(6); break; case "fader": Level.IncreaseHighestBossKill(7); break; } } int num4 = monsterExp.ExpAmount; if (!flag) { num4 /= ValheimLevelSystem.ExpToDivideWhenNotKilledByPlayer.Value; } Level.RaiseExpWithValues(num4, level, (int)component.m_faction == 8); } } [BepInPlugin("Lorska.ValheimLevelSystem", "Lorska.ValheimLevelSystem", "0.9.5.2")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class ValheimLevelSystem : BaseUnityPlugin { [HarmonyPatch(typeof(Game), "Logout")] public static class Logout { private static void Postfix() { hasAwake = false; } } [HarmonyPatch(typeof(Game), "Shutdown")] public static class Shutdown { private static void Prefix() { GUILog.saveLocation(); } } [HarmonyPatch(typeof(Player), "OnSpawned")] public static class OnSpawned { private static void Postfix() { if (!hasAwake) { hasAwake = true; Level.InitLevelRequirementList(); ExpTable.InitMonsterExpList(); ExpTable.InitPickableExpList(); ExpTable.InitMineableExpList(); ExpTable.InitChoppableExpList(); ExpTable.InitFishableExpList(); GUI.LoadMenu(); GUIXP.CreateXPBar(); GUILog.CreateLogWindow(); if (!Level.StanceActive && (Level.GetSpecialization() == PlayerSpecialization.Ritualist || Level.GetSpecialization() == PlayerSpecialization.Torturer)) { Level.ToggleStance(); } } } } public const string PluginGUID = "Lorska.ValheimLevelSystem"; public const string Name = "ValheimLevelSystem"; public const string Version = "0.9.5.2"; public static bool listInitiliazed = false; public static string PlayerName = ""; public static List<string> PotionToReduceCooldownNameList = new List<string>(new string[0]); public static List<string> PotionToIncreaseTimeNameList = new List<string>(new string[0]); public static List<string> PotionNameList = new List<string>(new string[0]); public static List<string> PotionAlchemyList = new List<string>(new string[0]); public static Dictionary<string, GameObject> menuItems = new Dictionary<string, GameObject>(); public static ConfigEntry<bool> RunSpeedFix; public static ConfigEntry<float> ExpRate; public static ConfigEntry<float> ExpRateWork; public static ConfigEntry<float> ExpPercentageBonusPerStar; public static ConfigEntry<int> ExpToDivideWhenNotKilledByPlayer; public static ConfigEntry<bool> OnlyGiveExpIfDamageComesFromPlayer; public static ConfigEntry<int> StartingPoints; public static ConfigEntry<int> MaxLevel; public static ConfigEntry<int> BreakPoint; public static ConfigEntry<int> FirstPerkLevel; public static ConfigEntry<int> SecondPerkLevel; public static ConfigEntry<int> BonusSkillXPLevel; public static ConfigEntry<int> MasteryPerkLevel; public static ConfigEntry<int> MasteryPlusPerkLevel; public static ConfigEntry<int> AttributePointsPerLevel; public static ConfigEntry<int> PointsPerLevel; public static ConfigEntry<int> PointsPerBoss; public static ConfigEntry<int> BaseExpPerLevel; public static ConfigEntry<int> RangeToDivideExp; public static ConfigEntry<float> ExpPercentageToLoseOnDeath; public static ConfigEntry<float> ExpMultiplierPerLevel; public static ConfigEntry<KeyCode> KeyboardShortcut; public static ConfigEntry<KeyCode> KeyboardShortcutStance; public static ConfigEntry<KeyCode> KeyboardShortcutLog; public static ConfigEntry<KeyCode> KeyboardShortcutImbue; public static ConfigEntry<int> LogEntries; public static ConfigEntry<float> StanceCD; public static ConfigEntry<int> Tier1Exp; public static ConfigEntry<int> Tier2Exp; public static ConfigEntry<int> Tier3Exp; public static ConfigEntry<int> Tier4Exp; public static ConfigEntry<int> Tier5Exp; public static ConfigEntry<int> Tier6Exp; public static ConfigEntry<int> Tier7Exp; public static ConfigEntry<int> Tier8Exp; public static ConfigEntry<int> BossExpMultiplier; public static ConfigEntry<float> FishingQualityMultiplier; public static ConfigEntry<string> Tier1Creatures; public static ConfigEntry<string> Tier2Creatures; public static ConfigEntry<string> Tier3Creatures; public static ConfigEntry<string> Tier4Creatures; public static ConfigEntry<string> Tier5Creatures; public static ConfigEntry<string> Tier6Creatures; public static ConfigEntry<string> Tier7Creatures; public static ConfigEntry<string> Tier8Creatures; public static ConfigEntry<string> Tier1Pickables; public static ConfigEntry<string> Tier2Pickables; public static ConfigEntry<string> Tier3Pickables; public static ConfigEntry<string> Tier4Pickables; public static ConfigEntry<string> Tier5Pickables; public static ConfigEntry<string> Tier6Pickables; public static ConfigEntry<string> Tier7Pickables; public static ConfigEntry<string> Tier1Mineables; public static ConfigEntry<string> Tier2Mineables; public static ConfigEntry<string> Tier3Mineables; public static ConfigEntry<string> Tier4Mineables; public static ConfigEntry<string> Tier6Mineables; public static ConfigEntry<string> Tier7Mineables; public static ConfigEntry<string> Tier1Choppables; public static ConfigEntry<string> Tier2Choppables; public static ConfigEntry<string> Tier3Choppables; public static ConfigEntry<string> Tier6Choppables; public static ConfigEntry<string> Tier7Choppables; public static ConfigEntry<string> Tier2Fishables; public static ConfigEntry<string> Tier3Fishables; public static ConfigEntry<string> Tier4Fishables; public static ConfigEntry<string> Tier5Fishables; public static ConfigEntry<string> Tier6Fishables; public static ConfigEntry<float> AllSkillsExpRate; public static ConfigEntry<float> AxeExpRate; public static ConfigEntry<float> BlockExpRate; public static ConfigEntry<float> BloodExpRate; public static ConfigEntry<float> BowExpRate; public static ConfigEntry<float> ClubExpRate; public static ConfigEntry<float> CrossExpRate; public static ConfigEntry<float> ElemExpRate; public static ConfigEntry<float> FishExpRate; public static ConfigEntry<float> JumpExpRate; public static ConfigEntry<float> KnifeExpRate; public static ConfigEntry<float> PickExpRate; public static ConfigEntry<float> PoleExpRate; public static ConfigEntry<float> RideExpRate; public static ConfigEntry<float> RunExpRate; public static ConfigEntry<float> SneakExpRate; public static ConfigEntry<float> SpearExpRate; public static ConfigEntry<float> SwimExpRate; public static ConfigEntry<float> SwordExpRate; public static ConfigEntry<float> UnarmedExpRate; public static ConfigEntry<float> WoodExpRate; public static ConfigEntry<string> AllPotions; public static ConfigEntry<string> DurationPotions; public static ConfigEntry<string> CDPotions; public static ConfigEntry<string> EnhancedPotions; public static List<string> playerSkills = new List<string>(new string[6] { "Strength", "Agility", "Intelligence", "Constitution", "Focus", "Magic" }); private Harmony harmony = new Harmony("Lorska.ValheimLevelSystem"); public static GameObject Menu; public static bool hasAwake = false; public void Awake() { ((object)GUIManager.Instance).GetType(); ((BaseUnityPlugin)this).Config.SaveOnConfigSet = true; InitConfigs(); SynchronizationManager.OnConfigurationSynchronized += delegate(object obj, ConfigurationSynchronizationEventArgs attr) { if (attr.InitialSynchronization) { Logger.LogMessage((object)"Initial Config sync event received"); } else { Logger.LogMessage((object)"Config sync event received"); } }; harmony.PatchAll(); ExpTable.InitMonsterExpList(); ExpTable.InitPickableExpList(); ExpTable.InitMineableExpList(); ExpTable.InitChoppableExpList(); ExpTable.InitFishableExpList(); PotionToReduceCooldownNameList = CDPotions.Value.Split(new char[1] { ',' }).ToList(); PotionToIncreaseTimeNameList = DurationPotions.Value.Split(new char[1] { ',' }).ToList(); PotionNameList = AllPotions.Value.Split(new char[1] { ',' }).ToList(); PotionAlchemyList = EnhancedPotions.Value.Split(new char[1] { ',' }).ToList(); } private void Update() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) Player localPlayer = Player.m_localPlayer; if (Input.GetKeyDown(KeyboardShortcut.Value) && !blockInput()) { if (!Object.op_Implicit((Object)(object)localPlayer) || ((Character)localPlayer).IsDead() || ((Character)localPlayer).InCutscene() || ((Character)localPlayer).IsTeleporting()) { return; } GUI.ToggleMenu(); } if (Input.GetKeyDown(KeyboardShortcutStance.Value) && !blockInput()) { if (!Object.op_Implicit((Object)(object)localPlayer) || ((Character)localPlayer).IsDead() || ((Character)localPlayer).InCutscene() || ((Character)localPlayer).IsTeleporting()) { return; } Level.ToggleStance(); } if (Input.GetKeyDown(KeyboardShortcutLog.Value) && !blockInput()) { if (!Object.op_Implicit((Object)(object)localPlayer) || ((Character)localPlayer).IsDead() || ((Character)localPlayer).InCutscene() || ((Character)localPlayer).IsTeleporting()) { return; } GUILog.toggle(); } if (Input.GetKeyDown(KeyboardShortcutImbue.Value) && !blockInput()) { if (!Object.op_Implicit((Object)(object)localPlayer) || ((Character)localPlayer).IsDead() || ((Character)localPlayer).InCutscene() || ((Character)localPlayer).IsTeleporting() || Level.GetSkillLevel(Skill.Magic) == 0) { return; } Magic.imbueActive = !Magic.imbueActive; GUILog.UpdateLog("Imbue Weapon " + (Magic.imbueActive ? "active" : "inactive")); } if (Input.GetKeyDown((KeyCode)27)) { GUI.DestroyMenu(); } } public static bool blockInput() { return Minimap.IsOpen() || Console.IsVisible() || TextInput.IsVisible() || ((Object)(object)Chat.instance != (Object)null && Chat.instance.HasFocus()); } public void InitConfigs() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Expected O, but got Unknown //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Expected O, but got Unknown //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Expected O, but got Unknown //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Expected O, but got Unknown //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Expected O, but got Unknown //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Expected O, but got Unknown //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Expected O, but got Unknown //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Expected O, but got Unknown //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Expected O, but got Unknown //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Expected O, but got Unknown //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Expected O, but got Unknown //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Expected O, but got Unknown //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Expected O, but got Unknown //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Expected O, but got Unknown //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Expected O, but got Unknown //IL_02b4: Unknown result type (might be due to invalid IL or missing references) //IL_02b9: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Expected O, but got Unknown //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02cc: Expected O, but got Unknown //IL_02f7: Unknown result type (might be due to invalid IL or missing references) //IL_02fc: Unknown result type (might be due to invalid IL or missing references) //IL_0305: Expected O, but got Unknown //IL_0305: Unknown result type (might be due to invalid IL or missing references) //IL_030f: Expected O, but got Unknown //IL_033d: Unknown result type (might be due to invalid IL or missing references) //IL_0342: Unknown result type (might be due to invalid IL or missing references) //IL_034b: Expected O, but got Unknown //IL_034b: Unknown result type (might be due to invalid IL or missing references) //IL_0355: Expected O, but got Unknown //IL_0383: Unknown result type (might be due to invalid IL or missing references) //IL_0388: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Expected O, but got Unknown //IL_0391: Unknown result type (might be due to invalid IL or missing references) //IL_039b: Expected O, but got Unknown //IL_03c9: Unknown result type (might be due to invalid IL or missing references) //IL_03ce: Unknown result type (might be due to invalid IL or missing references) //IL_03d7: Expected O, but got Unknown //IL_03d7: Unknown result type (might be due to invalid IL or missing references) //IL_03e1: Expected O, but got Unknown //IL_0410: Unknown result type (might be due to invalid IL or missing references) //IL_0415: Unknown result type (might be due to invalid IL or missing references) //IL_041e: Expected O, but got Unknown //IL_041e: Unknown result type (might be due to invalid IL or missing references) //IL_0428: Expected O, but got Unknown //IL_0457: Unknown result type (might be due to invalid IL or missing references) //IL_045c: Unknown result type (might be due to invalid IL or missing references) //IL_0465: Expected O, but got Unknown //IL_0465: Unknown result type (might be due to invalid IL or missing references) //IL_046f: Expected O, but got Unknown //IL_049e: Unknown result type (might be due to invalid IL or missing references) //IL_04a3: Unknown result type (might be due to invalid IL or missing references) //IL_04ac: Expected O, but got Unknown //IL_04ac: Unknown result type (might be due to invalid IL or missing references) //IL_04b6: Expected O, but got Unknown //IL_04e5: Unknown result type (might be due to invalid IL or missing references) //IL_04ea: Unknown result type (might be due to invalid IL or missing references) //IL_04f3: Expected O, but got Unknown //IL_04f3: Unknown result type (might be due to invalid IL or missing references) //IL_04fd: Expected O, but got Unknown //IL_052c: Unknown result type (might be due to invalid IL or missing references) //IL_0531: Unknown result type (might be due to invalid IL or missing references) //IL_053a: Expected O, but got Unknown //IL_053a: Unknown result type (might be due to invalid IL or missing references) //IL_0544: Expected O, but got Unknown //IL_0573: Unknown result type (might be due to invalid IL or missing references) //IL_0578: Unknown result type (might be due to invalid IL or missing references) //IL_0581: Expected O, but got Unknown //IL_0581: Unknown result type (might be due to invalid IL or missing references) //IL_058b: Expected O, but got Unknown //IL_05ba: Unknown result type (might be due to invalid IL or missing references) //IL_05bf: Unknown result type (might be due to invalid IL or missing references) //IL_05c8: Expected O, but got Unknown //IL_05c8: Unknown result type (might be due to invalid IL or missing references) //IL_05d2: Expected O, but got Unknown //IL_0601: Unknown result type (might be due to invalid IL or missing references) //IL_0606: Unknown result type (might be due to invalid IL or missing references) //IL_060f: Expected O, but got Unknown //IL_060f: Unknown result type (might be due to invalid IL or missing references) //IL_0619: Expected O, but got Unknown //IL_064f: Unknown result type (might be due to invalid IL or missing references) //IL_0654: Unknown result type (might be due to invalid IL or missing references) //IL_065d: Expected O, but got Unknown //IL_065d: Unknown result type (might be due to invalid IL or missing references) //IL_0667: Expected O, but got Unknown //IL_068c: Unknown result type (might be due to invalid IL or missing references) //IL_0691: Unknown result type (might be due to invalid IL or missing references) //IL_069a: Expected O, but got Unknown //IL_069a: Unknown result type (might be due to invalid IL or missing references) //IL_06a4: Expected O, but got Unknown //IL_06c9: Unknown result type (might be due to invalid IL or missing references) //IL_06ce: Unknown result type (might be due to invalid IL or missing references) //IL_06d7: Expected O, but got Unknown //IL_06d7: Unknown result type (might be due to invalid IL or missing references) //IL_06e1: Expected O, but got Unknown //IL_0706: Unknown result type (might be due to invalid IL or missing references) //IL_070b: Unknown result type (might be due to invalid IL or missing references) //IL_0714: Expected O, but got Unknown //IL_0714: Unknown result type (might be due to invalid IL or missing references) //IL_071e: Expected O, but got Unknown //IL_0743: Unknown result type (might be due to invalid IL or missing references) //IL_0748: Unknown result type (might be due to invalid IL or missing references) //IL_0751: Expected O, but got Unknown //IL_0751: Unknown result type (might be due to invalid IL or missing references) //IL_075b: Expected O, but got Unknown //IL_0787: Unknown result type (might be due to invalid IL or missing references) //IL_078c: Unknown result type (might be due to invalid IL or missing references) //IL_0795: Expected O, but got Unknown //IL_0795: Unknown result type (might be due to invalid IL or missing references) //IL_079f: Expected O, but got Unknown //IL_07d5: Unknown result type (might be due to invalid IL or missing references) //IL_07da: Unknown result type (might be due to invalid IL or missing references) //IL_07e3: Expected O, but got Unknown //IL_07e3: Unknown result type (might be due to invalid IL or missing references) //IL_07ed: Expected O, but got Unknown //IL_081b: Unknown result type (might be due to invalid IL or missing references) //IL_0820: Unknown result type (might be due to invalid IL or missing references) //IL_0829: Expected O, but got Unknown //IL_0829: Unknown result type (might be due to invalid IL or missing references) //IL_0833: Expected O, but got Unknown //IL_085b: Unknown result type (might be due to invalid IL or missing references) //IL_0860: Unknown result type (might be due to invalid IL or missing references) //IL_0869: Expected O, but got Unknown //IL_0869: Unknown result type (might be due to invalid IL or missing references) //IL_0873: Expected O, but got Unknown //IL_089b: Unknown result type (might be due to invalid IL or missing references) //IL_08a0: Unknown result type (might be due to invalid IL or missing references) //IL_08a9: Expected O, but got Unknown //IL_08a9: Unknown result type (might be due to invalid IL or missing references) //IL_08b3: Expected O, but got Unknown //IL_08db: Unknown result type (might be due to invalid IL or missing references) //IL_08e0: Unknown result type (might be due to invalid IL or missing references) //IL_08e9: Expected O, but got Unknown //IL_08e9: Unknown result type (might be due to invalid IL or missing references) //IL_08f3: Expected O, but got Unknown //IL_091b: Unknown result type (might be due to invalid IL or missing references) //IL_0920: Unknown result type (might be due to invalid IL or missing references) //IL_0929: Expected O, but got Unknown //IL_0929: Unknown result type (might be due to invalid IL or missing references) //IL_0933: Expected O, but got Unknown //IL_0962: Unknown result type (might be due to invalid IL or missing references) //IL_0967: Unknown result type (might be due to invalid IL or missing references) //IL_0970: Expected O, but got Unknown //IL_0970: Unknown result type (might be due to invalid IL or missing references) //IL_097a: Expected O, but got Unknown //IL_09a2: Unknown result type (might be due to invalid IL or missing references) //IL_09a7: Unknown result type (might be due to invalid IL or missing references) //IL_09b0: Expected O, but got Unknown //IL_09b0: Unknown result type (might be due to invalid IL or missing references) //IL_09ba: Expected O, but got Unknown //IL_09e2: Unknown result type (might be due to invalid IL or missing references) //IL_09e7: Unknown result type (might be due to invalid IL or missing references) //IL_09f0: Expected O, but got Unknown //IL_09f0: Unknown result type (might be due to invalid IL or missing references) //IL_09fa: Expected O, but got Unknown //IL_0a22: Unknown result type (might be due to invalid IL or missing references) //IL_0a27: Unknown result type (might be due to invalid IL or missing references) //IL_0a30: Expected O, but got Unknown //IL_0a30: Unknown result type (might be due to invalid IL or missing references) //IL_0a3a: Expected O, but got Unknown //IL_0a62: Unknown result type (might be due to invalid IL or missing references) //IL_0a67: Unknown result type (might be due to invalid IL or missing references) //IL_0a70: Expected O, but got Unknown //IL_0a70: Unknown result type (might be due to invalid IL or missing references) //IL_0a7a: Expected O, but got Unknown //IL_0aa9: Unknown result type (might be due to invalid IL or missing references) //IL_0aae: Unknown result type (might be due to invalid IL or missing references) //IL_0ab7: Expected O, but got Unknown //IL_0ab7: Unknown result type (might be due to invalid IL or missing references) //IL_0ac1: Expected O, but got Unknown //IL_0ae9: Unknown result type (might be due to invalid IL or missing references) //IL_0aee: Unknown result type (might be due to invalid IL or missing references) //IL_0af7: Expected O, but got Unknown //IL_0af7: Unknown result type (might be due to invalid IL or missing references) //IL_0b01: Expected O, but got Unknown //IL_0b29: Unknown result type (might be due to invalid IL or missing references) //IL_0b2e: Unknown result type (might be due to invalid IL or missing references) //IL_0b37: Expected O, but got Unknown //IL_0b37: Unknown result type (might be due to invalid IL or missing references) //IL_0b41: Expected O, but got Unknown //IL_0b69: Unknown result type (might be due to invalid IL or missing references) //IL_0b6e: Unknown result type (might be due to invalid IL or missing references) //IL_0b77: Expected O, but got Unknown //IL_0b77: Unknown result type (might be due to invalid IL or missing references) //IL_0b81: Expected O, but got Unknown //IL_0ba9: Unknown result type (might be due to invalid IL or missing references) //IL_0bae: Unknown result type (might be due to invalid IL or missing references) //IL_0bb7: Expected O, but got Unknown //IL_0bb7: Unknown result type (might be due to invalid IL or missing references) //IL_0bc1: Expected O, but got Unknown //IL_0bf0: Unknown result type (might be due to invalid IL or missing references) //IL_0bf5: Unknown result type (might be due to invalid IL or missing references) //IL_0bfe: Expected O, but got Unknown //IL_0bfe: Unknown result type (might be due to invalid IL or missing references) //IL_0c08: Expected O, but got Unknown //IL_0c30: Unknown result type (might be due to invalid IL or missing references) //IL_0c35: Unknown result type (might be due to invalid IL or missing references) //IL_0c3e: Expected O, but got Unknown //IL_0c3e: Unknown result type (might be due to invalid IL or missing references) //IL_0c48: Expected O, but got Unknown //IL_0c70: Unknown result type (might be due to invalid IL or missing references) //IL_0c75: Unknown result type (might be due to invalid IL or missing references) //IL_0c7e: Expected O, but got Unknown //IL_0c7e: Unknown result type (might be due to invalid IL or missing references) //IL_0c88: Expected O, but got Unknown //IL_0cb0: Unknown result type (might be due to invalid IL or missing references) //IL_0cb5: Unknown result type (might be due to invalid IL or missing references) //IL_0cbe: Expected O, but got Unknown //IL_0cbe: Unknown result type (might be due to invalid IL or missing references) //IL_0cc8: Expected O, but got Unknown //IL_0cfa: Unknown result type (might be due to invalid IL or missing references) //IL_0cff: Unknown result type (might be due to invalid IL or missing references) //IL_0d08: Expected O, but got Unknown //IL_0d08: Unknown result type (might be due to invalid IL or missing