Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of MoreWorldModifiers v1.2.0
MoreWorldModifiers.dll
Decompiled 2 years ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using HarmonyLib; using JFUtils.Valheim; using JetBrains.Annotations; using LocalizationManager; using Microsoft.CodeAnalysis; using ServerSync; using TMPro; using UnityEngine; using UnityEngine.Events; using UnityEngine.SceneManagement; using UnityEngine.UI; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Core.Tokens; using YamlDotNet.Helpers; using YamlDotNet.Serialization; using YamlDotNet.Serialization.BufferedDeserialization; using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators; using YamlDotNet.Serialization.Converters; using YamlDotNet.Serialization.EventEmitters; using YamlDotNet.Serialization.NamingConventions; using YamlDotNet.Serialization.NodeDeserializers; using YamlDotNet.Serialization.NodeTypeResolvers; using YamlDotNet.Serialization.ObjectFactories; using YamlDotNet.Serialization.ObjectGraphTraversalStrategies; using YamlDotNet.Serialization.ObjectGraphVisitors; using YamlDotNet.Serialization.Schemas; using YamlDotNet.Serialization.TypeInspectors; using YamlDotNet.Serialization.TypeResolvers; using YamlDotNet.Serialization.Utilities; using YamlDotNet.Serialization.ValueDeserializers; [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: Guid("46BDCABE-BEB1-491F-8631-310F5186A3DB")] [assembly: ComVisible(false)] [assembly: AssemblyTrademark("")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyProduct("MoreWorldModifiers")] [assembly: AssemblyCompany("JustAFrogger")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyDescription("")] [assembly: AssemblyTitle("MoreWorldModifiers")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: <8091639b-f00e-4c56-b9d9-4f7d5d33cfeb>RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<f85bc3e1-8a02-4b60-881e-5fdd2e20eda9>Embedded] internal sealed class <f85bc3e1-8a02-4b60-881e-5fdd2e20eda9>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [<f85bc3e1-8a02-4b60-881e-5fdd2e20eda9>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class <745c43d2-7dd8-466e-b8a0-d19d450aa6b6>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <745c43d2-7dd8-466e-b8a0-d19d450aa6b6>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <745c43d2-7dd8-466e-b8a0-d19d450aa6b6>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [<f85bc3e1-8a02-4b60-881e-5fdd2e20eda9>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] [CompilerGenerated] internal sealed class <d7e6d120-13d8-49a7-bb0a-0197a0c127fb>NullableContextAttribute : Attribute { public readonly byte Flag; public <d7e6d120-13d8-49a7-bb0a-0197a0c127fb>NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [<f85bc3e1-8a02-4b60-881e-5fdd2e20eda9>Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class <8091639b-f00e-4c56-b9d9-4f7d5d33cfeb>RefSafetyRulesAttribute : Attribute { public readonly int Version; public <8091639b-f00e-4c56-b9d9-4f7d5d33cfeb>RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } internal sealed class ConfigurationManagerAttributes { public bool? Browsable; public string Category; public Action<ConfigEntryBase> CustomDrawer; public object DefaultValue; public string Description; public string DispName; public bool? HideDefaultButton; public bool? HideSettingName; public bool? IsAdvanced; public Func<object, string> ObjToStr; public int? Order; public bool? ReadOnly; public bool? ShowRangeAsPercent; public Func<string, object> StrToObj; } namespace MoreWorldModifiers { [HarmonyPatch] internal static class AllRecipesUnlockedPatch { [HarmonyPatch(typeof(Player), "Start")] [HarmonyPostfix] public static void ApplyAllRecipesUnlockedEffect(Player __instance) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) Scene activeScene = SceneManager.GetActiveScene(); if (((Scene)(ref activeScene)).name != "main" || (Object)(object)__instance != (Object)(object)Player.m_localPlayer || !ZoneSystem.instance.GetGlobalKey("AllRecipesUnlocked")) { return; } foreach (Recipe recipe in ObjectDB.instance.m_recipes) { if (recipe.m_enabled && Object.op_Implicit((Object)(object)recipe.m_item) && !__instance.m_knownRecipes.Contains(recipe.m_item.m_itemData.m_shared.m_name)) { __instance.AddKnownRecipe(recipe); } } __instance.UpdateKnownRecipesList(); } } [HarmonyPatch] internal static class ClearWeatherPatch { [HarmonyPatch(typeof(Game), "SpawnPlayer")] [HarmonyPostfix] public static void ApplyNoHuginEffect(Game __instance) { if (ZoneSystem.instance.GetGlobalKey("ClearWeather")) { EnvMan.instance.m_debugEnv = "Clear"; } } } [HarmonyPatch] internal static class HigherStacksPatch { [HarmonyPatch(typeof(Game), "SpawnPlayer")] [HarmonyPostfix] public static void ApplyHigherStacksEffect() { if (!Game.instance.m_firstSpawn) { return; } bool globalKey = ZoneSystem.instance.GetGlobalKey("HigherStacks-Less"); bool globalKey2 = ZoneSystem.instance.GetGlobalKey("HigherStacks-More"); bool globalKey3 = ZoneSystem.instance.GetGlobalKey("HigherStacks-High"); foreach (GameObject item in ObjectDB.instance.m_items) { ItemDrop component = item.GetComponent<ItemDrop>(); int maxStackSize = component.m_itemData.m_shared.m_maxStackSize; if (maxStackSize != 1) { if (globalKey) { component.m_itemData.m_shared.m_maxStackSize = Mathf.FloorToInt((float)maxStackSize / 1.5f); } if (globalKey2) { component.m_itemData.m_shared.m_maxStackSize = Mathf.FloorToInt((float)maxStackSize * 1.5f); } if (globalKey3) { component.m_itemData.m_shared.m_maxStackSize = Mathf.FloorToInt((float)maxStackSize * 2.5f); } } } } } [HarmonyPatch] internal static class MapExplorationPatch { [HarmonyPatch(typeof(Game), "SpawnPlayer")] [HarmonyPostfix] public static void ApplyMapExplorationEffect() { if (Game.instance.m_firstSpawn) { if (ZoneSystem.instance.GetGlobalKey("ExploreMap-Less")) { Minimap instance = Minimap.instance; instance.m_exploreRadius /= 1.5f; } if (ZoneSystem.instance.GetGlobalKey("ExploreMap-More")) { Minimap instance2 = Minimap.instance; instance2.m_exploreRadius *= 1.5f; } if (ZoneSystem.instance.GetGlobalKey("ExploreMap-High")) { Minimap instance3 = Minimap.instance; instance3.m_exploreRadius *= 2.5f; } if (ZoneSystem.instance.GetGlobalKey("ExploreMap-All")) { Minimap.instance.ExploreAll(); } } } } [HarmonyPatch] internal static class MaxWeightPatch { [HarmonyPatch(typeof(Game), "SpawnPlayer")] [HarmonyPostfix] public static void ApplyMapExplorationEffect() { if (Game.instance.m_firstSpawn) { if (ZoneSystem.instance.GetGlobalKey("MaxWeight-Less")) { Player localPlayer = Player.m_localPlayer; localPlayer.m_maxCarryWeight /= 1.5f; } if (ZoneSystem.instance.GetGlobalKey("MaxWeight-More")) { Player localPlayer2 = Player.m_localPlayer; localPlayer2.m_maxCarryWeight *= 1.5f; } if (ZoneSystem.instance.GetGlobalKey("MaxWeight-High")) { Player localPlayer3 = Player.m_localPlayer; localPlayer3.m_maxCarryWeight *= 2.5f; } if (ZoneSystem.instance.GetGlobalKey("MaxWeight-All")) { Player.m_localPlayer.m_maxCarryWeight = 999999f; } } } } [HarmonyPatch] internal static class InitializePanelPatch { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static UnityAction <>9__4_0; public static UnityAction <>9__4_1; internal void <CreateButtons>b__4_0() { panel.SetActive(false); ((Component)((Component)ServerOptionsGUI.m_instance).transform.GetChild(0)).gameObject.SetActive(true); tooltipText.SetParent(tooltipTextParent); } internal void <CreateButtons>b__4_1() { panel.SetActive(true); ((Component)((Component)ServerOptionsGUI.m_instance).transform.GetChild(0)).gameObject.SetActive(false); tooltipText.SetParent(panel.transform); } } internal static GameObject panel; internal static Transform tooltipText; internal static Transform tooltipTextParent; internal static List<string> keysAdded = new List<string>(); private static void CreateButtons() { //IL_0038: 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_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Expected O, but got Unknown //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Expected O, but got Unknown //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Expected O, but got Unknown //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Expected O, but got Unknown Transform val = Utils.FindChild(((Component)ServerOptionsGUI.m_instance).transform, "Cancel"); Button component = ((Component)Object.Instantiate<Transform>(val, panel.transform)).GetComponent<Button>(); ((Component)component).transform.position = new Vector3(((Component)component).transform.position.x + 100f, ((Component)component).transform.position.y - 60f, ((Component)component).transform.position.z); ((Object)component).name = "Cloce Advanced Modifiers"; ((UnityEventBase)component.onClick).RemoveAllListeners(); component.onClick = new ButtonClickedEvent(); ((TMP_Text)((Component)component).GetComponentInChildren<TextMeshProUGUI>()).text = "$back_button"; ButtonClickedEvent onClick = component.onClick; object obj = <>c.<>9__4_0; if (obj == null) { UnityAction val2 = delegate { panel.SetActive(false); ((Component)((Component)ServerOptionsGUI.m_instance).transform.GetChild(0)).gameObject.SetActive(true); tooltipText.SetParent(tooltipTextParent); }; <>c.<>9__4_0 = val2; obj = (object)val2; } ((UnityEvent)onClick).AddListener((UnityAction)obj); Button component2 = ((Component)Object.Instantiate<Transform>(val, ((Component)val).transform.parent)).GetComponent<Button>(); ((Object)((Component)component2).gameObject).name = "Show Advanced Modifiers"; ((UnityEventBase)component2.onClick).RemoveAllListeners(); component2.onClick = new ButtonClickedEvent(); ButtonClickedEvent onClick2 = component2.onClick; object obj2 = <>c.<>9__4_1; if (obj2 == null) { UnityAction val3 = delegate { panel.SetActive(true); ((Component)((Component)ServerOptionsGUI.m_instance).transform.GetChild(0)).gameObject.SetActive(false); tooltipText.SetParent(panel.transform); }; <>c.<>9__4_1 = val3; obj2 = (object)val3; } ((UnityEvent)onClick2).AddListener((UnityAction)obj2); ((TMP_Text)((Component)component2).GetComponentInChildren<TextMeshProUGUI>()).text = "$advancedModifiers"; ((Component)component2).transform.position = ((Component)component).transform.position; } private static void CreatePanel() { panel = Object.Instantiate<GameObject>(((Component)((Component)ServerOptionsGUI.m_instance).transform.GetChild(0)).gameObject, ((Component)ServerOptionsGUI.m_instance).transform.GetChild(0).parent); ((Object)panel).name = "New Modifiers"; panel.SetActive(false); Transform val = Utils.FindChild(panel.transform, "topic"); TextMeshProUGUI component = ((Component)val).GetComponent<TextMeshProUGUI>(); ((TMP_Text)component).text = "$advancedModifiers"; for (int i = 0; i < panel.transform.childCount; i++) { GameObject gameObject = ((Component)panel.transform.GetChild(i)).gameObject; if (((Object)gameObject).name != "bkg" && ((Object)gameObject).name != "topic") { Object.Destroy((Object)(object)gameObject); } } tooltipText = Utils.FindChild(((Component)ServerOptionsGUI.m_instance).transform, "Tooltips"); tooltipTextParent = tooltipText.parent; TextMeshProUGUI componentInChildren = panel.GetComponentInChildren<TextMeshProUGUI>(); ((TMP_Text)componentInChildren).text = "$advancedModifiers"; } [HarmonyPatch(typeof(ServerOptionsGUI), "Awake")] [HarmonyPostfix] public static void AddMoreWorldModifiers(ServerOptionsGUI __instance) { CreatePanel(); CreateButtons(); CreateToggles(); CreateSliders(); } private static void CreateSliders() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Expected O, but got Unknown //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown //IL_008f: 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_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Expected O, but got Unknown //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Expected O, but got Unknown //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010c: 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_0122: 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_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Expected O, but got Unknown //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Expected O, but got Unknown //IL_01a5: 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_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: 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_01d3: 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_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Expected O, but got Unknown //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Expected O, but got Unknown //IL_024d: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_0287: Expected O, but got Unknown //IL_02a1: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) //IL_02cc: Unknown result type (might be due to invalid IL or missing references) //IL_02d1: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Expected O, but got Unknown //IL_02eb: Unknown result type (might be due to invalid IL or missing references) //IL_02f0: Unknown result type (might be due to invalid IL or missing references) //IL_02fb: Unknown result type (might be due to invalid IL or missing references) //IL_0306: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_030d: Unknown result type (might be due to invalid IL or missing references) //IL_0319: Expected O, but got Unknown //IL_031b: Unknown result type (might be due to invalid IL or missing references) //IL_0320: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_0336: Unknown result type (might be due to invalid IL or missing references) //IL_0338: Unknown result type (might be due to invalid IL or missing references) //IL_033d: Unknown result type (might be due to invalid IL or missing references) //IL_0355: Expected O, but got Unknown //IL_0357: Unknown result type (might be due to invalid IL or missing references) //IL_035c: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_0372: Unknown result type (might be due to invalid IL or missing references) //IL_0374: Unknown result type (might be due to invalid IL or missing references) //IL_0379: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Expected O, but got Unknown //IL_03ab: Unknown result type (might be due to invalid IL or missing references) //IL_03b8: Unknown result type (might be due to invalid IL or missing references) //IL_03bd: Unknown result type (might be due to invalid IL or missing references) //IL_03c8: Unknown result type (might be due to invalid IL or missing references) //IL_03d3: Unknown result type (might be due to invalid IL or missing references) //IL_03d6: 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_03f3: Expected O, but got Unknown //IL_03f5: Unknown result type (might be due to invalid IL or missing references) //IL_03fa: Unknown result type (might be due to invalid IL or missing references) //IL_0405: Unknown result type (might be due to invalid IL or missing references) //IL_0410: Unknown result type (might be due to invalid IL or missing references) //IL_0412: Unknown result type (might be due to invalid IL or missing references) //IL_0417: Unknown result type (might be due to invalid IL or missing references) //IL_0423: Expected O, but got Unknown //IL_0425: Unknown result type (might be due to invalid IL or missing references) //IL_042a: Unknown result type (might be due to invalid IL or missing references) //IL_0435: Unknown result type (might be due to invalid IL or missing references) //IL_0440: Unknown result type (might be due to invalid IL or missing references) //IL_0442: Unknown result type (might be due to invalid IL or missing references) //IL_0447: Unknown result type (might be due to invalid IL or missing references) //IL_045f: Expected O, but got Unknown //IL_0461: Unknown result type (might be due to invalid IL or missing references) //IL_0466: Unknown result type (might be due to invalid IL or missing references) //IL_0471: Unknown result type (might be due to invalid IL or missing references) //IL_047c: Unknown result type (might be due to invalid IL or missing references) //IL_047e: Unknown result type (might be due to invalid IL or missing references) //IL_0483: Unknown result type (might be due to invalid IL or missing references) //IL_049b: Expected O, but got Unknown //IL_049d: Unknown result type (might be due to invalid IL or missing references) //IL_04a2: Unknown result type (might be due to invalid IL or missing references) //IL_04ad: Unknown result type (might be due to invalid IL or missing references) //IL_04b8: Unknown result type (might be due to invalid IL or missing references) //IL_04ba: Unknown result type (might be due to invalid IL or missing references) //IL_04bf: Unknown result type (might be due to invalid IL or missing references) //IL_04d7: Expected O, but got Unknown CreateSlider("MapExploration", new Vector3(0f, 90f, 0f), new SliderSetting { m_name = "$slider_Less", m_toolTip = "$ExploreMap_Less_ToolTip", m_modifierValue = (WorldModifierOption)11, m_keys = new List<string> { "ExploreMap-Less" } }, new SliderSetting { m_name = "$slider_Normal", m_toolTip = "$ExploreMap_Normal_ToolTip", m_modifierValue = (WorldModifierOption)0, m_keys = new List<string>() }, new SliderSetting { m_name = "$slider_More", m_toolTip = "$ExploreMap_More_ToolTip", m_modifierValue = (WorldModifierOption)8, m_keys = new List<string> { "ExploreMap-More" } }, new SliderSetting { m_name = "$slider_High", m_toolTip = "$ExploreMap_High_ToolTip", m_modifierValue = (WorldModifierOption)6, m_keys = new List<string> { "ExploreMap-High" } }, new SliderSetting { m_name = "$slider_All", m_toolTip = "$ExploreMap_All_ToolTip", m_modifierValue = (WorldModifierOption)7, m_keys = new List<string> { "ExploreMap-All" } }); CreateSlider("SkillsSpeed", new Vector3(0f, 40f, 0f), new SliderSetting { m_name = "$slider_Less", m_toolTip = "$SkillsSpeed_Less_ToolTip", m_modifierValue = (WorldModifierOption)11, m_keys = new List<string> { "SkillsSpeed-Less" } }, new SliderSetting { m_name = "$slider_Normal", m_toolTip = "$SkillsSpeed_Normal_ToolTip", m_modifierValue = (WorldModifierOption)0, m_keys = new List<string>() }, new SliderSetting { m_name = "$slider_More", m_toolTip = "$SkillsSpeed_More_ToolTip", m_modifierValue = (WorldModifierOption)8, m_keys = new List<string> { "SkillsSpeed-More" } }, new SliderSetting { m_name = "$slider_High", m_toolTip = "$SkillsSpeed_High_ToolTip", m_modifierValue = (WorldModifierOption)6, m_keys = new List<string> { "SkillsSpeed-High" } }, new SliderSetting { m_name = "$slider_All", m_toolTip = "$SkillsSpeed_All_ToolTip", m_modifierValue = (WorldModifierOption)7, m_keys = new List<string> { "SkillsSpeed-All" } }); CreateSlider("HigherStacks", new Vector3(0f, -10f, 0f), new SliderSetting { m_name = "$slider_Less", m_toolTip = "$HigherStacks_Less_ToolTip", m_modifierValue = (WorldModifierOption)11, m_keys = new List<string> { "HigherStacks-Less" } }, new SliderSetting { m_name = "$slider_Normal", m_toolTip = "$HigherStacks_Normal_ToolTip", m_modifierValue = (WorldModifierOption)0, m_keys = new List<string>() }, new SliderSetting { m_name = "$slider_More", m_toolTip = "$HigherStacks_More_ToolTip", m_modifierValue = (WorldModifierOption)8, m_keys = new List<string> { "HigherStacks-More" } }, new SliderSetting { m_name = "$slider_High", m_toolTip = "$HigherStacks_High_ToolTip", m_modifierValue = (WorldModifierOption)6, m_keys = new List<string> { "HigherStacks-High" } }); CreateSlider("MaxWeight", new Vector3(0f, -60f, 0f), new SliderSetting { m_name = "$slider_Less", m_toolTip = "$MaxWeight_Less_ToolTip", m_modifierValue = (WorldModifierOption)11, m_keys = new List<string> { "MaxWeight-Less" } }, new SliderSetting { m_name = "$slider_Normal", m_toolTip = "$MaxWeight_Normal_ToolTip", m_modifierValue = (WorldModifierOption)0, m_keys = new List<string>() }, new SliderSetting { m_name = "$slider_More", m_toolTip = "$MaxWeight_More_ToolTip", m_modifierValue = (WorldModifierOption)8, m_keys = new List<string> { "MaxWeight-More" } }, new SliderSetting { m_name = "$slider_High", m_toolTip = "$MaxWeight_High_ToolTip", m_modifierValue = (WorldModifierOption)6, m_keys = new List<string> { "MaxWeight-High" } }, new SliderSetting { m_name = "$slider_All", m_toolTip = "$MaxWeight_All_ToolTip", m_modifierValue = (WorldModifierOption)7, m_keys = new List<string> { "MaxWeight-All" } }); } private static void CreateToggles() { //IL_0015: 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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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_00ee: Unknown result type (might be due to invalid IL or missing references) CreateToggle("PowersBossesOnStart", new Vector3(-110f, 240f, 0f)); CreateToggle("NoStaminaCost", new Vector3(55f, 240f, 0f)); CreateToggle("NoDurabilityLoss", new Vector3(220f, 240f, 0f)); CreateToggle("AllRecipesUnlocked", new Vector3(-110f, 190f, 0f)); CreateToggle("NoFallDamage", new Vector3(55f, 190f, 0f)); CreateToggle("NoWet", new Vector3(220f, 190f, 0f)); CreateToggle("NoHugin", new Vector3(-110f, 140f, 0f)); CreateToggle("ClearWeather", new Vector3(55f, 140f, 0f)); } private static void CreateToggle(string key, Vector3 pos) { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Invalid comparison between Unknown and I4 //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Invalid comparison between Unknown and I4 //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Invalid comparison between Unknown and I4 //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Invalid comparison between Unknown and I4 //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010d: 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) Transform val = Utils.FindChild(((Component)ServerOptionsGUI.m_instance).transform, "PlayerBasedEvents"); KeyToggle component = ((Component)Object.Instantiate<Transform>(val, ((Component)val).transform.parent)).GetComponent<KeyToggle>(); ((Object)component).name = key; component.m_enabledKey = key; component.m_toolTip = "$" + key + "_Tooltip"; ((TMP_Text)((Component)component).GetComponentInChildren<TextMeshProUGUI>()).text = "$" + key + "_DisplayName"; List<KeyUI> list = ServerOptionsGUI.m_modifiers.ToList(); list.Add((KeyUI)(object)component); ServerOptionsGUI.m_modifiers = list.ToArray(); ((Component)component).transform.SetParent(panel.transform); ((Component)component).transform.localPosition = pos; Transform transform = ((Component)component).transform; RectTransform val2 = (RectTransform)(object)((transform is RectTransform) ? transform : null); Edge val3 = (Edge)2; int num = (((int)val3 == 2 || (int)val3 == 3) ? 1 : 0); float num2 = (((int)val3 == 2 || (int)val3 == 1) ? 1f : 0f); Vector2 anchorMin = val2.anchorMin; ((Vector2)(ref anchorMin))[num] = num2; val2.anchorMin = anchorMin; Vector2 anchorMax = val2.anchorMax; ((Vector2)(ref anchorMax))[num] = num2; val2.anchorMax = anchorMax; keysAdded.Add(key); } private static void CreateSlider(string key, Vector3 pos, params SliderSetting[] settings) { //IL_003e: 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_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Invalid comparison between Unknown and I4 //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Invalid comparison between Unknown and I4 //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Invalid comparison between Unknown and I4 //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Invalid comparison between Unknown and I4 //IL_012a: 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_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) Transform val = Utils.FindChild(((Component)ServerOptionsGUI.m_instance).transform, "Portals"); GameObject gameObject = ((Component)Object.Instantiate<Transform>(val, ((Component)val).transform.parent)).gameObject; KeySlider componentInChildren = gameObject.GetComponentInChildren<KeySlider>(); ((Object)gameObject).name = key; componentInChildren.m_modifier = (WorldModifiers)0; ((TMP_Text)((Component)gameObject.transform.GetChild(0)).GetComponent<TextMeshProUGUI>()).text = "$" + key + "_DisplayName"; componentInChildren.m_settings = settings.ToList(); componentInChildren.m_toolTip = "$" + key + "_Tooltip"; ((Component)componentInChildren).GetComponent<Slider>().maxValue = componentInChildren.m_settings.Count - 1; List<KeyUI> list = ServerOptionsGUI.m_modifiers.ToList(); list.Add((KeyUI)(object)componentInChildren); ServerOptionsGUI.m_modifiers = list.ToArray(); gameObject.transform.SetParent(panel.transform); gameObject.transform.localPosition = pos; Transform transform = gameObject.transform; RectTransform val2 = (RectTransform)(object)((transform is RectTransform) ? transform : null); Edge val3 = (Edge)2; int num = (((int)val3 == 2 || (int)val3 == 3) ? 1 : 0); float num2 = (((int)val3 == 2 || (int)val3 == 1) ? 1f : 0f); Vector2 anchorMin = val2.anchorMin; ((Vector2)(ref anchorMin))[num] = num2; val2.anchorMin = anchorMin; Vector2 anchorMax = val2.anchorMax; ((Vector2)(ref anchorMax))[num] = num2; val2.anchorMax = anchorMax; } } [HarmonyPatch] internal static class NoDurabilityLossPatch { [HarmonyPostfix] [HarmonyPatch(typeof(Game), "SpawnPlayer")] public static void ApplyNoDurabilityLossEffect() { if (!Game.instance.m_firstSpawn || !ZoneSystem.instance.GetGlobalKey("NoDurabilityLoss")) { return; } foreach (GameObject item in ObjectDB.instance.m_items) { item.GetComponent<ItemDrop>().m_itemData.m_shared.m_useDurability = false; item.GetComponent<ItemDrop>().m_itemData.m_shared.m_durabilityDrain = 0f; item.GetComponent<ItemDrop>().m_itemData.m_shared.m_useDurabilityDrain = 0f; } } [HarmonyPostfix] [HarmonyPatch(typeof(Player), "PlacePiece")] public static void ApplyNoDurabilityLossEffect_Hammer(Player __instance) { if (ZoneSystem.instance.GetGlobalKey("NoDurabilityLoss")) { ItemData rightItem = ((Humanoid)__instance).GetRightItem(); if (rightItem != null) { rightItem.m_durability = rightItem.m_shared.m_maxDurability; } } } } [HarmonyPatch] internal static class NoFallDamagePatch { [HarmonyPatch(typeof(SEMan), "ModifyFallDamage")] [HarmonyPrefix] public static bool ApplyNoStaminaCostEffect_UseStamina(SEMan __instance, ref float baseDamage, ref float damage) { if (!__instance.m_character.IsPlayer() || (Object)(object)__instance.m_character != (Object)(object)Player.m_localPlayer) { return true; } if (ZoneSystem.instance.GetGlobalKey("NoFallDamage")) { damage = 0f; baseDamage = 0f; return false; } return true; } } [HarmonyPatch] internal static class NoHuginPatch { [HarmonyPatch(typeof(Tutorial), "ShowText")] [HarmonyPrefix] public static bool ApplyNoHuginEffect() { bool globalKey = ZoneSystem.instance.GetGlobalKey("NoHugin"); return !globalKey; } } [HarmonyPatch] internal static class NoStaminaCostPatch { [HarmonyPatch(typeof(Player), "UseStamina")] [HarmonyPrefix] public static bool ApplyNoStaminaCostEffect_UseStamina(Player __instance) { bool globalKey = ZoneSystem.instance.GetGlobalKey("NoStaminaCost"); return !globalKey; } [HarmonyPatch(typeof(Player), "HaveStamina")] [HarmonyPrefix] public static bool ApplyNoStaminaCostEffect_HaveStamina(Player __instance, ref bool __result) { if (!ZoneSystem.instance.GetGlobalKey("NoStaminaCost")) { return true; } __result = true; return false; } } [HarmonyPatch] internal static class NoWetPatch { [HarmonyPrefix] [HarmonyPatch(typeof(SEMan), "AddStatusEffect", new Type[] { typeof(int), typeof(bool), typeof(int), typeof(float) })] public static bool ApplyNoWetEffect(SEMan __instance, int nameHash) { if (!__instance.m_character.IsPlayer() || (Object)(object)__instance.m_character != (Object)(object)Player.m_localPlayer || !Object.op_Implicit((Object)(object)ZoneSystem.instance)) { return true; } if (!ZoneSystem.instance.GetGlobalKey("NoWet")) { return true; } if (nameHash == StringExtensionMethods.GetStableHashCode("Wet")) { return false; } return true; } } [HarmonyPatch] internal static class PowersBossesOnStartPatch { [HarmonyPostfix] [HarmonyPatch(typeof(BossStone), "Start")] public static void ApplyPowersBossesOnStartEffectPatch(BossStone __instance) { ((MonoBehaviour)__instance).StartCoroutine(ApplyPowersBossesOnStartEffect(__instance)); } public static IEnumerator ApplyPowersBossesOnStartEffect(BossStone bossStone) { yield return (object)new WaitWhile((Func<bool>)(() => !Object.op_Implicit((Object)(object)Player.m_localPlayer))); if (!ZoneSystem.instance.GetGlobalKey("PowersBossesOnStart") || !Object.op_Implicit((Object)(object)bossStone.m_itemStand) || !Object.op_Implicit((Object)(object)bossStone.m_itemStand.m_nview) || !bossStone.m_itemStand.m_nview.IsOwner() || bossStone.m_itemStand.HaveAttachment()) { yield break; } ItemData item = bossStone.m_itemStand.m_supportedItems[0].m_itemData; foreach (ItemDrop drop in ObjectDB.m_instance.GetAllItems((ItemType)13, "")) { if (drop.m_itemData.m_shared.m_name == item.m_shared.m_name) { item.m_dropPrefab = ((Component)drop).gameObject; break; } } ModBase.Debug($"localPlayer is {Player.m_localPlayer}"); ((Humanoid)Player.m_localPlayer).GetInventory().AddItem(item); bossStone.m_itemStand.m_queuedItem = item; ((MonoBehaviour)bossStone.m_itemStand).CancelInvoke("UpdateAttach"); ((MonoBehaviour)bossStone.m_itemStand).InvokeRepeating("UpdateAttach", 0f, 0.1f); bossStone.m_itemStand.m_queuedItem = item; } } [HarmonyPatch] internal static class RemoveKeysPatch { [HarmonyPatch(typeof(Game), "SpawnPlayer")] [HarmonyPostfix] public static void RemoveKeys(Game __instance) { if (!__instance.m_firstSpawn) { return; } List<string> startingGlobalKeys = WorldGenerator.instance.m_world.m_startingGlobalKeys; List<string> keysAdded = InitializePanelPatch.keysAdded; foreach (string item in keysAdded) { if (!startingGlobalKeys.Contains(item.ToLower())) { ZoneSystem.instance.RemoveGlobalKey(item); } } } } [HarmonyPatch] internal static class SkillsSpeedPatch { [HarmonyPatch(typeof(Player), "RaiseSkill")] [HarmonyPrefix] public static void ApplySkillsSpeedEffect(Player __instance, ref float value) { if (!((Object)(object)__instance != (Object)(object)Player.m_localPlayer) && value != 10000f) { if (ZoneSystem.instance.GetGlobalKey("SkillsSpeed-Less")) { value /= 1.5f; } if (ZoneSystem.instance.GetGlobalKey("SkillsSpeed-More")) { value *= 1.5f; } if (ZoneSystem.instance.GetGlobalKey("SkillsSpeed-High")) { value *= 2.5f; } } } [HarmonyPatch(typeof(Player), "Start")] [HarmonyPostfix] public static void ApplySkillsSpeedEffect_All(Player __instance) { //IL_0050: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)__instance != (Object)(object)Player.m_localPlayer || !ZoneSystem.instance.GetGlobalKey("SkillsSpeed-All")) { return; } foreach (SkillDef skill in Player.m_localPlayer.m_skills.m_skills) { Player.m_localPlayer.m_skills.GetSkill(skill.m_skill).m_level = 100f; } } } [BepInPlugin("com.Frogger.MoreWorldModifiers", "MoreWorldModifiers", "1.2.0")] public class Plugin : BaseUnityPlugin { public const string ModName = "MoreWorldModifiers"; public const string ModAuthor = "Frogger"; public const string ModVersion = "1.2.0"; public const string ModGUID = "com.Frogger.MoreWorldModifiers"; private void Awake() { ModBase.CreateMod((BaseUnityPlugin)(object)this, "MoreWorldModifiers", "Frogger", "1.2.0"); Localizer.Load(); } } } namespace LocalizationManager { [PublicAPI] public class Localizer { private static readonly Dictionary<string, Dictionary<string, Func<string>>> PlaceholderProcessors; private static readonly Dictionary<string, Dictionary<string, string>> loadedTexts; private static readonly ConditionalWeakTable<Localization, string> localizationLanguage; private static readonly List<WeakReference<Localization>> localizationObjects; [<745c43d2-7dd8-466e-b8a0-d19d450aa6b6>Nullable(2)] private static BaseUnityPlugin _plugin; private static readonly List<string> fileExtensions; private static BaseUnityPlugin plugin { get { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected O, but got Unknown if (_plugin == null) { IEnumerable<TypeInfo> source; try { source = Assembly.GetExecutingAssembly().DefinedTypes.ToList(); } catch (ReflectionTypeLoadException ex) { source = from t in ex.Types where t != null select t.GetTypeInfo(); } _plugin = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)source.First((TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); } return _plugin; } } static Localizer() { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Expected O, but got Unknown //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Expected O, but got Unknown PlaceholderProcessors = new Dictionary<string, Dictionary<string, Func<string>>>(); loadedTexts = new Dictionary<string, Dictionary<string, string>>(); localizationLanguage = new ConditionalWeakTable<Localization, string>(); localizationObjects = new List<WeakReference<Localization>>(); fileExtensions = new List<string> { ".json", ".yml" }; Harmony val = new Harmony("org.bepinex.helpers.LocalizationManager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "LoadCSV", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Localizer), "LoadLocalization", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } private static void UpdatePlaceholderText(Localization localization, string key) { localizationLanguage.TryGetValue(localization, out var value); string text = loadedTexts[value][key]; if (PlaceholderProcessors.TryGetValue(key, out var value2)) { text = value2.Aggregate(text, (string current, KeyValuePair<string, Func<string>> kv) => current.Replace("{" + kv.Key + "}", kv.Value())); } localization.AddWord(key, text); } public static void AddPlaceholder<[<745c43d2-7dd8-466e-b8a0-d19d450aa6b6>Nullable(1)] T>(string key, string placeholder, ConfigEntry<T> config, [<745c43d2-7dd8-466e-b8a0-d19d450aa6b6>Nullable(new byte[] { 2, 0, 0 })] Func<T, string> convertConfigValue = null) { if (convertConfigValue == null) { convertConfigValue = (T val) => val.ToString(); } if (!PlaceholderProcessors.ContainsKey(key)) { PlaceholderProcessors[key] = new Dictionary<string, Func<string>>(); } config.SettingChanged += delegate { UpdatePlaceholder(); }; if (loadedTexts.ContainsKey(Localization.instance.GetSelectedLanguage())) { UpdatePlaceholder(); } void UpdatePlaceholder() { PlaceholderProcessors[key][placeholder] = () => convertConfigValue(config.Value); UpdatePlaceholderText(Localization.instance, key); } } public static void AddText(string key, string text) { List<WeakReference<Localization>> list = new List<WeakReference<Localization>>(); foreach (WeakReference<Localization> localizationObject in localizationObjects) { if (localizationObject.TryGetTarget(out var target)) { Dictionary<string, string> dictionary = loadedTexts[localizationLanguage.GetOrCreateValue(target)]; if (!target.m_translations.ContainsKey(key)) { dictionary[key] = text; target.AddWord(key, text); } } else { list.Add(localizationObject); } } foreach (WeakReference<Localization> item in list) { localizationObjects.Remove(item); } } public static void Load() { LoadLocalization(Localization.instance, Localization.instance.GetSelectedLanguage()); } private static void LoadLocalization(Localization __instance, string language) { if (!localizationLanguage.Remove(__instance)) { localizationObjects.Add(new WeakReference<Localization>(__instance)); } localizationLanguage.Add(__instance, language); Dictionary<string, string> dictionary = new Dictionary<string, string>(); foreach (string item in from f in Directory.GetFiles(Path.GetDirectoryName(Paths.PluginPath), plugin.Info.Metadata.Name + ".*", SearchOption.AllDirectories) where fileExtensions.IndexOf(Path.GetExtension(f)) >= 0 select f) { string text = Path.GetFileNameWithoutExtension(item).Split(new char[1] { '.' })[1]; if (dictionary.ContainsKey(text)) { Debug.LogWarning((object)("Duplicate key " + text + " found for " + plugin.Info.Metadata.Name + ". The duplicate file found at " + item + " will be skipped.")); } else { dictionary[text] = item; } } byte[] array = LoadTranslationFromAssembly("English"); if (array == null) { throw new Exception("Found no English localizations in mod " + plugin.Info.Metadata.Name + ". Expected an embedded resource translations/English.json or translations/English.yml."); } Dictionary<string, string> dictionary2 = new DeserializerBuilder().IgnoreFields().Build().Deserialize<Dictionary<string, string>>(Encoding.UTF8.GetString(array)); if (dictionary2 == null) { throw new Exception("Localization for mod " + plugin.Info.Metadata.Name + " failed: Localization file was empty."); } string text2 = null; if (language != "English") { if (dictionary.ContainsKey(language)) { text2 = File.ReadAllText(dictionary[language]); } else { byte[] array2 = LoadTranslationFromAssembly(language); if (array2 != null) { text2 = Encoding.UTF8.GetString(array2); } } } if (text2 == null && dictionary.ContainsKey("English")) { text2 = File.ReadAllText(dictionary["English"]); } if (text2 != null) { foreach (KeyValuePair<string, string> item2 in new DeserializerBuilder().IgnoreFields().Build().Deserialize<Dictionary<string, string>>(text2) ?? new Dictionary<string, string>()) { dictionary2[item2.Key] = item2.Value; } } loadedTexts[language] = dictionary2; foreach (KeyValuePair<string, string> item3 in dictionary2) { UpdatePlaceholderText(__instance, item3.Key); } } [return: <745c43d2-7dd8-466e-b8a0-d19d450aa6b6>Nullable(2)] private static byte[] LoadTranslationFromAssembly(string language) { foreach (string fileExtension in fileExtensions) { byte[] array = ReadEmbeddedFileBytes("translations." + language + fileExtension); if (array != null) { return array; } } return null; } [<d7e6d120-13d8-49a7-bb0a-0197a0c127fb>NullableContext(2)] public static byte[] ReadEmbeddedFileBytes([<745c43d2-7dd8-466e-b8a0-d19d450aa6b6>Nullable(0)] string resourceFileName, Assembly containingAssembly = null) { using MemoryStream memoryStream = new MemoryStream(); if ((object)containingAssembly == null) { containingAssembly = Assembly.GetCallingAssembly(); } string text = containingAssembly.GetManifestResourceNames().FirstOrDefault((string str) => str.EndsWith(resourceFileName, StringComparison.Ordinal)); if (text != null) { containingAssembly.GetManifestResourceStream(text)?.CopyTo(memoryStream); } return (memoryStream.Length == 0L) ? null : memoryStream.ToArray(); } } } namespace Microsoft.CodeAnalysis { [<9b9268fa-2884-41f9-993f-1d4be2084e79>Embedded] [CompilerGenerated] internal sealed class <9b9268fa-2884-41f9-993f-1d4be2084e79>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [<9b9268fa-2884-41f9-993f-1d4be2084e79>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class <19838e05-66f2-4d08-9b26-4db06ccdcdd5>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <19838e05-66f2-4d08-9b26-4db06ccdcdd5>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <19838e05-66f2-4d08-9b26-4db06ccdcdd5>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] [CompilerGenerated] [<9b9268fa-2884-41f9-993f-1d4be2084e79>Embedded] internal sealed class <8b4514a8-68dc-4d71-a2e7-b6d39287019e>NullableContextAttribute : Attribute { public readonly byte Flag; public <8b4514a8-68dc-4d71-a2e7-b6d39287019e>NullableContextAttribute(byte P_0) { Flag = P_0; } } [<9b9268fa-2884-41f9-993f-1d4be2084e79>Embedded] [CompilerGenerated] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace JFUtils { internal static class EnumerableExtension { [CanBeNull] public static List<T> _Distinct<T>(this List<T> list) { List<T> list2 = list?.Distinct().ToList(); if (list2 != null) { list = list2; } return list2; } public static Dictionary<TKey, TValue> Dictionary<TKey, TValue>(this IEnumerable<KeyValuePair<TKey, TValue>> list) { return list.Select((KeyValuePair<TKey, TValue> x) => x).ToDictionary((KeyValuePair<TKey, TValue> x) => x.Key, (KeyValuePair<TKey, TValue> y) => y.Value); } public static T Random<T>(this List<T> list) { if (list == null || list.Count == 0) { return default(T); } return list[Random.Range(0, list.Count)]; } public static T Random<T>(this T[] array) { if (array == null || array.Length == 0) { return default(T); } return array[Random.Range(0, array.Length)]; } public static List<Vector3> RoundCords(this List<Vector3> list) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) List<Vector3> list2 = new List<Vector3>(); for (int i = 0; i < list.Count; i++) { list2.Add(new Vector3((float)(int)list[i].x, (float)(int)list[i].y, (float)(int)list[i].z)); } return list2; } public static List<Vector2> RoundCords(this List<Vector2> list) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) List<Vector2> list2 = new List<Vector2>(); for (int i = 0; i < list.Count; i++) { list2.Add(new Vector2((float)(int)list[i].x, (float)(int)list[i].y)); } return list2; } public static string GetString<T>(this IEnumerable<T> list, string separator = ", ") { return string.Join(separator, list); } public static void TryAdd<T>(this List<T> sequence, T item) { if (!sequence.Contains(item)) { sequence.Add(item); } } public static T Next<T>(this List<T> list, T current) { if (list == null || list.Count == 0) { return default(T); } T val = list[list.Count - 1]; if (current.Equals(val)) { return list[0]; } if (!list.Contains(current)) { Debug.LogWarning((object)$"[{list}.Next] list not contains this element {current}"); return list[0]; } return list[list.IndexOf(current) + 1]; } public static T Nearest<T>(this IEnumerable<T> list, Vector3 nearestTo) where T : Component { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: 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_004f: Unknown result type (might be due to invalid IL or missing references) T result = default(T); float num = 2.1474836E+09f; if (list == null || list.Count() == 0) { return result; } foreach (T item in list) { Vector3 position = ((Component)item).transform.position; float num2 = Utils.DistanceXZ(nearestTo, position); if (num2 < num) { result = item; num = num2; } } return result; } } internal static class GameObjectExtension { public static string GetPrefabName(this GameObject gameObject) { string text = Utils.GetPrefabName(gameObject); for (int i = 0; i < 80; i++) { text = text.Replace($" ({i})", ""); } return text; } public static string GetPrefabName<T>(this T gameObject) where T : MonoBehaviour { string text = Utils.GetPrefabName(((Component)(object)gameObject).gameObject); for (int i = 0; i < 80; i++) { text = text.Replace($" ({i})", ""); } return text; } public static GameObject OrNull(this GameObject @this) { return Object.op_Implicit((Object)(object)@this) ? @this : null; } public static T OrNull<T>(this T @this) where T : Object { return Object.op_Implicit((Object)(object)@this) ? @this : default(T); } public static T GetOrAddComponent<T>(this GameObject gameObject) where T : Component { return gameObject.GetComponent<T>() ?? gameObject.AddComponent<T>(); } public static Component AddComponentCopy<T>(this GameObject gameObject, T duplicate) where T : Component { Component val = gameObject.AddComponent(((object)duplicate).GetType()); PropertyInfo[] properties = ((object)duplicate).GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (PropertyInfo propertyInfo in properties) { if (!(propertyInfo.Name == "rayTracingMode") && propertyInfo.CanWrite && propertyInfo.GetMethod != null) { propertyInfo.SetValue(val, propertyInfo.GetValue(duplicate)); } } FieldInfo[] fields = ((object)duplicate).GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (FieldInfo fieldInfo in fields) { if (!(fieldInfo.Name == "rayTracingMode")) { fieldInfo.SetValue(val, fieldInfo.GetValue(duplicate)); } } return val; } internal static GameObject SetToTextHeight(this GameObject go) { go.GetComponent<RectTransform>().SetSizeWithCurrentAnchors((Axis)1, go.GetComponentInChildren<Text>().preferredHeight + 3f); return go; } internal static GameObject SetUpperLeft(this GameObject go) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0055: Unknown result type (might be due to invalid IL or missing references) RectTransform component = go.GetComponent<RectTransform>(); component.anchorMax = new Vector2(0f, 1f); component.anchorMin = new Vector2(0f, 1f); component.pivot = new Vector2(0f, 1f); component.anchoredPosition = new Vector2(0f, 0f); return go; } internal static GameObject SetMiddleLeft(this GameObject go) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0055: Unknown result type (might be due to invalid IL or missing references) RectTransform component = go.GetComponent<RectTransform>(); component.anchorMax = new Vector2(0f, 0.5f); component.anchorMin = new Vector2(0f, 0.5f); component.pivot = new Vector2(0f, 0.5f); component.anchoredPosition = new Vector2(0f, 0f); return go; } internal static GameObject SetBottomLeft(this GameObject go) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0055: Unknown result type (might be due to invalid IL or missing references) RectTransform component = go.GetComponent<RectTransform>(); component.anchorMax = new Vector2(0f, 0f); component.anchorMin = new Vector2(0f, 0f); component.pivot = new Vector2(0f, 0f); component.anchoredPosition = new Vector2(0f, 0f); return go; } internal static GameObject SetUpperRight(this GameObject go) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0055: Unknown result type (might be due to invalid IL or missing references) RectTransform component = go.GetComponent<RectTransform>(); component.anchorMax = new Vector2(1f, 1f); component.anchorMin = new Vector2(1f, 1f); component.pivot = new Vector2(1f, 1f); component.anchoredPosition = new Vector2(0f, 0f); return go; } internal static GameObject SetMiddleRight(this GameObject go) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0055: Unknown result type (might be due to invalid IL or missing references) RectTransform component = go.GetComponent<RectTransform>(); component.anchorMax = new Vector2(1f, 0.5f); component.anchorMin = new Vector2(1f, 0.5f); component.pivot = new Vector2(1f, 0.5f); component.anchoredPosition = new Vector2(0f, 0f); return go; } internal static GameObject SetBottomRight(this GameObject go) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0055: Unknown result type (might be due to invalid IL or missing references) RectTransform component = go.GetComponent<RectTransform>(); component.anchorMax = new Vector2(1f, 0f); component.anchorMin = new Vector2(1f, 0f); component.pivot = new Vector2(1f, 0f); component.anchoredPosition = new Vector2(0f, 0f); return go; } internal static GameObject SetUpperCenter(this GameObject go) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0055: Unknown result type (might be due to invalid IL or missing references) RectTransform component = go.GetComponent<RectTransform>(); component.anchorMax = new Vector2(0.5f, 1f); component.anchorMin = new Vector2(0.5f, 1f); component.pivot = new Vector2(0.5f, 1f); component.anchoredPosition = new Vector2(0f, 0f); return go; } internal static GameObject SetMiddleCenter(this GameObject go) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0055: Unknown result type (might be due to invalid IL or missing references) RectTransform component = go.GetComponent<RectTransform>(); component.anchorMax = new Vector2(0.5f, 0.5f); component.anchorMin = new Vector2(0.5f, 0.5f); component.pivot = new Vector2(0.5f, 0.5f); component.anchoredPosition = new Vector2(0f, 0f); return go; } internal static GameObject SetBottomCenter(this GameObject go) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_0055: Unknown result type (might be due to invalid IL or missing references) RectTransform component = go.GetComponent<RectTransform>(); component.anchorMax = new Vector2(0.5f, 0f); component.anchorMin = new Vector2(0.5f, 0f); component.pivot = new Vector2(0.5f, 0f); component.anchoredPosition = new Vector2(0f, 0f); return go; } internal static GameObject SetSize(this GameObject go, float width, float height) { RectTransform component = go.GetComponent<RectTransform>(); component.SetSizeWithCurrentAnchors((Axis)0, width); component.SetSizeWithCurrentAnchors((Axis)1, height); return go; } internal static GameObject SetWidth(this GameObject go, float width) { RectTransform component = go.GetComponent<RectTransform>(); component.SetSizeWithCurrentAnchors((Axis)0, width); return go; } internal static GameObject SetHeight(this GameObject go, float height) { RectTransform component = go.GetComponent<RectTransform>(); component.SetSizeWithCurrentAnchors((Axis)1, height); return go; } internal static float GetWidth(this GameObject go) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) RectTransform component = go.GetComponent<RectTransform>(); Rect rect = component.rect; return ((Rect)(ref rect)).width; } internal static float GetHeight(this GameObject go) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) RectTransform component = go.GetComponent<RectTransform>(); Rect rect = component.rect; return ((Rect)(ref rect)).height; } internal static float GetTextHeight(this GameObject go) { return go.GetComponent<Text>().preferredHeight; } internal static GameObject SetText(this GameObject go, string text) { go.GetComponent<Text>().text = text; return go; } } internal static class MonoBehaviourExtension { public static T SetActiveGO<T>(this T behaviour, bool flag) where T : Component { ((Component)behaviour).gameObject.SetActive(flag); return behaviour; } } internal static class ObjectExtension { public static string GetObjectString(this object obj, bool includePrivate = false) { if (obj == null) { return "null"; } string text = $"{obj}"; Type type = obj.GetType(); IEnumerable<FieldInfo> enumerable = from f in type.GetFields() where f.IsPublic select f; foreach (FieldInfo item in enumerable) { object value = item.GetValue(obj); string text2 = ((value == null) ? "null" : value.ToString()); text = text + "\n " + item.Name + ": " + text2; } FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic); FieldInfo[] array = fields; foreach (FieldInfo fieldInfo in array) { object value2 = fieldInfo.GetValue(obj); string text3 = ((value2 == null) ? "null" : value2.ToString()); text = text + "\n[private] " + fieldInfo.Name + ": " + text3; } PropertyInfo[] properties = type.GetProperties(); PropertyInfo[] array2 = properties; foreach (PropertyInfo propertyInfo in array2) { object value3 = propertyInfo.GetValue(obj, null); string text4 = ((value3 == null) ? "null" : value3.ToString()); text = text + "\n " + propertyInfo.Name + ": " + text4; } return text; } public static ZNetView GeZNetView(this Object obj) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown return (ZNetView)((object)obj).GetType().GetField("m_nview", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(obj); } } internal static class RectTransformExtension { public static bool Overlaps(this RectTransform a, RectTransform b) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) Rect val = a.WorldRect(); return ((Rect)(ref val)).Overlaps(b.WorldRect()); } public static bool Overlaps(this RectTransform a, RectTransform b, bool allowInverse) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) Rect val = a.WorldRect(); return ((Rect)(ref val)).Overlaps(b.WorldRect(), allowInverse); } public static Rect WorldRect(this RectTransform rectTransform) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) Vector2 sizeDelta = rectTransform.sizeDelta; float num = sizeDelta.x * ((Transform)rectTransform).lossyScale.x; float num2 = sizeDelta.y * ((Transform)rectTransform).lossyScale.y; Vector3 position = ((Transform)rectTransform).position; return new Rect(position.x - num / 2f, position.y - num2 / 2f, num, num2); } } internal static class RendererExtension { private class CoroutineHandler : MonoBehaviour { } private static readonly CoroutineHandler coroutineHandler; private static readonly List<Renderer> flashingRenderers; static RendererExtension() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) flashingRenderers = new List<Renderer>(); coroutineHandler = new GameObject("CoroutineHandler").AddComponent<CoroutineHandler>(); Object.DontDestroyOnLoad((Object)(object)coroutineHandler); } public static async void Flash(this Renderer renderer, Color color, Color returnColor, float time = 0.3f, Action callback = null) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) if (!flashingRenderers.Contains(renderer)) { await HighlightObject(renderer, color, returnColor, time); callback?.Invoke(); } } private static async Task HighlightObject(Renderer obj, Color color, Color returnColor, float time) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) flashingRenderers.Add(obj); Renderer[] renderersInChildren = ((Component)obj).GetComponentsInChildren<Renderer>(); Material heightmapMaterial = null; if (((Object)obj).name == "Terrain") { Heightmap heightmap = ((Component)obj).GetComponent<Heightmap>(); heightmapMaterial = Object.Instantiate<Material>(new Material(((Renderer)heightmap.m_meshRenderer).material)); ((Renderer)heightmap.m_meshRenderer).material.shader = Shader.Find("Standard"); } Renderer[] array = renderersInChildren; foreach (Renderer renderer in array) { Material[] materials = renderer.materials; foreach (Material material in materials) { if (material.HasProperty("_EmissionColor")) { material.SetColor("_EmissionColor", color * 0.7f); } material.color = color; } } await Task.Delay((int)TimeSpan.FromSeconds(time).TotalMilliseconds); if (((Object)obj).name == "Terrain" && Object.op_Implicit((Object)(object)heightmapMaterial)) { obj.material = heightmapMaterial; } Renderer[] array2 = renderersInChildren; foreach (Renderer renderer2 in array2) { Material[] materials2 = renderer2.materials; foreach (Material material2 in materials2) { if (material2.HasProperty("_EmissionColor")) { material2.SetColor("_EmissionColor", returnColor * 0f); } material2.color = returnColor; } } flashingRenderers.Remove(obj); } } internal struct SimpleVector2 : IEquatable<SimpleVector2> { public float x; public float y; public SimpleVector2(float x, float y) { this.x = x; this.y = y; } public SimpleVector2() { x = 0f; y = 0f; } public bool Equals(SimpleVector2 other) { return x == other.x && y == other.y; } public override string ToString() { return $"X: {x}, Y: {y}"; } public Vector2 ToVector2() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) return new Vector2(x, y); } } internal static class SimpleVector2Ext { public static SimpleVector2 ToSimpleVector2(this Vector2 vector2) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) return new SimpleVector2(vector2.x, vector2.y); } } internal struct SimpleVector3 : IEquatable<SimpleVector3> { public float x; public float y; public float z; public SimpleVector3(float x, float y, float z) { this.x = x; this.y = y; this.z = z; } public SimpleVector3() { x = 0f; y = 0f; z = 0f; } public bool Equals(SimpleVector3 other) { return x == other.x && y == other.y && z == other.z; } public override string ToString() { return $"X: {x}, Y: {y}, Z: {z}"; } public Vector3 ToVector3() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) return new Vector3(x, y, z); } } internal static class SimpleVector3Ext { public static SimpleVector3 ToSimpleVector3(this Vector3 vector3) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) return new SimpleVector3(vector3.x, vector3.y, vector3.z); } } internal static class StringExtension { public static bool IsGood(this string str) { return !string.IsNullOrEmpty(str) && !string.IsNullOrWhiteSpace(str); } public static List<string> Split_(this string str) { return str.Split(new string[1] { ", " }, StringSplitOptions.RemoveEmptyEntries).ToList(); } } [Description("Thanks to Azu ;)")] internal static class TimeUtils { private static string GetCurrentTimeString() { return string.Format("<b>{0}</b>", GetCurrentTime().ToString("HH:mm")); } [Description("HH.mm")] public static (int, int) GetCurrentTimeValue() { DateTime currentTime = GetCurrentTime(); if (currentTime == DateTime.Now) { return (-1, -1); } return (currentTime.Hour, currentTime.Minute); } private static DateTime GetCurrentTime() { DateTime now = DateTime.Now; if (!Object.op_Implicit((Object)(object)EnvMan.instance)) { return now; } float smoothDayFraction = EnvMan.instance.m_smoothDayFraction; int num = (int)(smoothDayFraction * 24f); int num2 = (int)((smoothDayFraction * 24f - (float)num) * 60f); int second = (int)(((smoothDayFraction * 24f - (float)num) * 60f - (float)num2) * 60f); return new DateTime(now.Year, now.Month, now.Day, num, num2, second); } } internal static class TransformExtension { public static Transform FindChildByName(this Transform transform, string name) { return Utils.FindChild(transform, name); } public static float DistanceXZ(this Transform transform, Transform other) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) return Utils.DistanceXZ(transform.position, other.position); } public static float DistanceXZ(this Transform transform, Component otherGameObject) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) return Utils.DistanceXZ(transform.position, otherGameObject.transform.position); } public static float DistanceXZ(this Transform transform, GameObject otherGameObject) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) return Utils.DistanceXZ(transform.position, otherGameObject.transform.position); } public static float DistanceXZ(this Transform transform, Vector3 otherPos) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) return Utils.DistanceXZ(transform.position, otherPos); } } internal class Utilities { public static AssetBundle GetAssetBundleFromResources(string filename) { Assembly executingAssembly = Assembly.GetExecutingAssembly(); string name = executingAssembly.GetManifestResourceNames().Single((string str) => str.EndsWith(filename)); using Stream stream = executingAssembly.GetManifestResourceStream(name); return AssetBundle.LoadFromStream(stream); } } internal static class VectorExtension { public static Vector2 ToV2(this Vector3 vector3) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) return new Vector2(vector3.x, vector3.z); } public static Vector3 ToV3(this Vector2 vector2) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) return new Vector3(vector2.x, 0f, vector2.y); } public static Vector3 RoundCords(this Vector3 vector3) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) return new Vector3((float)(int)vector3.x, (float)(int)vector3.y, (float)(int)vector3.z); } public static Vector2 RoundCords(this Vector2 vector3) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) return new Vector2((float)(int)vector3.x, (float)(int)vector3.y); } public static Vector3 WithY(this Vector3 vector3, float y) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_0016: Unknown result type (might be due to invalid IL or missing references) return new Vector3(vector3.x, y, vector3.z); } public static Vector2 WithY(this Vector2 vector3, float y) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) return new Vector2(vector3.x, y); } public static float DistanceXZ(this Vector3 pos, Vector3 otherPos) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) return Utils.DistanceXZ(pos, otherPos); } public static float DistanceXZ(this Vector3 pos, Transform otherPos) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) return Utils.DistanceXZ(pos, otherPos.position); } public static float DistanceXZ(this Vector3 pos, Component otherPos) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) return Utils.DistanceXZ(pos, otherPos.transform.position); } public static float DistanceXZ(this Vector3 pos, GameObject otherPos) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) return Utils.DistanceXZ(pos, otherPos.transform.position); } } internal static class Weather { public static readonly string ClearSkies = "Clear"; public static readonly string MeadowsClearSkies = "Heath_clear"; public static readonly string LightRain = "LightRain"; public static readonly string Rain = "Rain"; public static readonly string ThunderStorm = "ThunderStorm"; public static readonly string ClearThunderStorm = "nofogts"; public static readonly string SwampRain = "SwampRain"; public static readonly string MistlandsDark = "Darklands_dark"; public static readonly string AshlandsAshrain = "Ashrain"; public static readonly string MountainSnow = "Snow"; public static readonly string MountainBlizzard = "SnowStorm"; public static readonly string BlackForestFog = "DeepForest Mist"; public static readonly string Fog = "Misty"; public static readonly string DeepNorthSnow = "Twilight_Snow"; public static readonly string DeepNorthSnowStorm = "Twilight_SnowStorm"; public static readonly string DeepNorthClear = "Twilight_Clear"; public static readonly string EikthyrsThunderstorm = "Eikthyr"; public static readonly string EldersHaze = "GDKing"; public static readonly string BonemassDownpour = "Bonemass"; public static readonly string ModersVortex = "Moder"; public static readonly string YagluthsMagicBlizzard = "GoblinKing"; public static readonly string Crypt = "Crypt"; public static readonly string SunkenCrypt = "SunkenCrypt"; } } namespace JFUtils.Valheim { internal sealed class ModBase { public enum Toggle { On = 1, Off = 0 } private static bool sendDebugMessagesToHud; private static ConfigEntry<bool> sendDebugMessagesToHudConfig; public static string ModName; public static string ModAuthor; public static string ModVersion; public static string ModGUID; public static ModBase mod; public static BaseUnityPlugin plugin; private readonly Harmony harmony; public Action OnConfigurationChanged; public AssetBundle bundle; private readonly string ConfigFileName = "-1"; private DateTime LastConfigChange; public ConfigSync configSync; private static ConfigEntry<bool> serverConfigLocked; public AssetBundle LoadAssetBundle(string filename) { Assembly executingAssembly = Assembly.GetExecutingAssembly(); string name = executingAssembly.GetManifestResourceNames().Single((string str) => str.EndsWith(filename)); using Stream stream = executingAssembly.GetManifestResourceStream(name); bundle = AssetBundle.LoadFromStream(stream); return bundle; } private ModBase(string modName, string modAuthor, string modVersion) { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Expected O, but got Unknown ModName = modName; ModAuthor = modAuthor; ModVersion = modVersion; ModGUID = "com." + ModAuthor + "." + ModName; harmony = new Harmony(ModGUID); ConfigFileName = ModGUID + ".cfg"; } public static ModBase CreateMod(BaseUnityPlugin plugin, string modName, string modAuthor, string modVersion) { if ((bool)mod) { throw new Exception("Trying to create new mod " + modName + ", but " + ModName + " already exists"); } mod = new ModBase(modName, modAuthor, modVersion); ModBase.plugin = plugin; mod.Init(); return mod; } private void Init() { configSync = new ConfigSync(ModName) { DisplayName = ModName, CurrentVersion = ModVersion, MinimumRequiredVersion = ModVersion }; plugin.Config.SaveOnConfigSet = false; SetupWatcher(); plugin.Config.ConfigReloaded += delegate { UpdateConfiguration(); }; serverConfigLocked = config("General", "ServerConfigLock", value: true, ""); configSync.AddLockingConfigEntry<bool>(serverConfigLocked); sendDebugMessagesToHudConfig = config("Debug", "Send debug messages to hud", value: true, ""); plugin.Config.SaveOnConfigSet = true; plugin.Config.Save(); harmony.PatchAll(); } public static implicit operator bool(ModBase modBase) { return modBase != null; } public static void Debug(object msg) { plugin.Logger.LogInfo(msg); msg = $"[{ModName}] {msg}"; if (Console.IsVisible()) { ((Terminal)Console.instance).AddString(msg.ToString()); } if (Object.op_Implicit((Object)(object)Player.m_localPlayer) && Player.m_debugMode && sendDebugMessagesToHud) { ((Character)Player.m_localPlayer).Message((MessageType)1, msg.ToString(), 0, (Sprite)null); } } public static void DebugError(object msg, bool showWriteToDev = true) { if (Console.IsVisible()) { ((Terminal)Console.instance).AddString($"<color=red>[{ModName}] {msg}</color>"); } if (showWriteToDev) { msg = msg?.ToString() + "Write to the developer and moderator if this happens often."; } plugin.Logger.LogError(msg); } public static void DebugWarning(object msg, bool showWriteToDev = true) { if (Console.IsVisible()) { ((Terminal)Console.instance).AddString($"<color=yellow>[{ModName}] {msg}</color>"); } if (showWriteToDev) { msg = msg?.ToString() + "Write to the developer and moderator if this happens often."; } plugin.Logger.LogWarning(msg); } public ConfigEntry<T> config<T>(string group, string name, T value, ConfigDescription description, bool synchronizedSetting = true) { ConfigEntry<T> val = plugin.Config.Bind<T>(group, name, value, description); SyncedConfigEntry<T> syncedConfigEntry = configSync.AddConfigEntry<T>(val); syncedConfigEntry.SynchronizedConfig = synchronizedSetting; return val; } public ConfigEntry<T> config<T>(string group, string name, T value, string description, bool synchronizedSetting = true) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()), synchronizedSetting); } private void SetupWatcher() { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName); fileSystemWatcher.Changed += ConfigChanged; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; } private void ConfigChanged(object sender, FileSystemEventArgs e) { if ((DateTime.Now - LastConfigChange).TotalSeconds <= 2.0) { return; } LastConfigChange = DateTime.Now; try { plugin.Config.Reload(); } catch { DebugError("Unable reload config"); } } private void UpdateConfiguration() { try { sendDebugMessagesToHud = sendDebugMessagesToHudConfig.Value; OnConfigurationChanged?.Invoke(); if (OnConfigurationChanged == null) { Debug("Configuration Received"); } } catch (Exception ex) { DebugError("Configuration error: " + ex.Message, showWriteToDev: false); } } } internal static class BiomeExtension { public static string GetLocalizationKey(this Biome biome) { return "$biome_" + ((object)(Biome)(ref biome)).ToString().ToLower(); } } internal static class InventoryExtension { public static bool RemoveOneItemByLocKey(this Inventory inventory, string itemLocKey) { ItemData val = inventory.m_inventory.Find((ItemData x) => x.m_shared.m_name == itemLocKey); if (val == null) { return false; } if (val.m_stack > 1) { val.m_stack--; inventory.Changed(); } else { inventory.m_inventory.Remove(val); inventory.Changed(); } return true; } public static bool GiveItemIfNotHave(this Inventory inventory, string prefabName, int count = 1) { GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(prefabName); ItemDrop val = ((itemPrefab != null) ? itemPrefab.GetComponent<ItemDrop>() : null); if (!Object.op_Implicit((Object)(object)val)) { return false; } if (inventory.ContainsItemByName(val.m_itemData.m_shared.m_name)) { return false; } inventory.AddItem(((Component)val).gameObject, count); return true; } public static bool ContainsItemByLocKey(this Inventory inventory, string localizedName) { foreach (ItemData item in inventory.m_inventory) { if (item.m_shared.m_name == localizedName) { return true; } } return false; } } internal static class ItemDropExtension { public static string LocalizeName(this ItemDrop drop) { return drop.m_itemData.LocalizeName(); } public static string LocalizeName(this ItemData drop) { return drop.m_shared.LocalizeName(); } public static string LocalizeName(this SharedData drop) { return drop.m_name.Localize(); } } internal static class MinimapExtension { public static void ForceUpdateLocationPins(this Minimap minimap) { minimap.m_updateLocationsTimer = -1f; minimap.UpdateLocationPins(0f); } } internal static class ObjectDBExtension { public static ItemDrop GetItem(this ObjectDB objectDB, string name) { GameObject itemPrefab = objectDB.GetItemPrefab(name); return (itemPrefab != null) ? itemPrefab.GetComponent<ItemDrop>() : null; } public static ItemDrop GetItem(this ObjectDB objectDB, int hash) { GameObject itemPrefab = objectDB.GetItemPrefab(hash); return (itemPrefab != null) ? itemPrefab.GetComponent<ItemDrop>() : null; } } internal static class RecipeExtension { public static IEnumerable<(SharedData, int)> ToList(this Recipe recipe) { if (!Object.op_Implicit((Object)(object)recipe) || recipe.m_resources == null) { return null; } (SharedData, int)[] array = new(SharedData, int)[recipe.m_resources.Length]; for (int i = 0; i < recipe.m_resources.Length; i++) { Requirement val = recipe.m_resources[i]; array[i] = (val.m_resItem?.m_itemData.m_shared, val.m_amount); } return array; } public static IEnumerable<(string, int)> ToListStr(this Recipe recipe) { if (!Object.op_Implicit((Object)(object)recipe) || recipe.m_resources == null) { return null; } (string, int)[] array = new(string, int)[recipe.m_resources.Length]; for (int i = 0; i < recipe.m_resources.Length; i++) { Requirement val = recipe.m_resources[i]; array[i] = (((Object)val.m_resItem).name, val.m_amount); } return array; } } internal static class SkillsExtension { public static Skill GetCustomSkill(this Skills skills, string skillName) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) return skills.GetSkill(skills.GetCustomSkillType(skillName)); } public static SkillDef GetCustomSkillDef(this Skills skills, string skillName) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) return skills.GetSkillDef(skills.GetCustomSkillType(skillName)); } public static SkillType GetCustomSkillType(this Skills skills, string skillName) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) if (!Enum.TryParse<SkillType>(skillName, out SkillType result)) { SkillDef skillDef = skills.GetSkillDef((SkillType)Mathf.Abs(StringExtensionMethods.GetStableHashCode(skillName))); if (skillDef == null) { return (SkillType)0; } result = skillDef.m_skill; } return result; } public static string LocalizeSkill(this Skill skill) { if (skill == null || skill.m_info == null) { return "NULL"; } string text = ((object)(SkillType)(ref skill.m_info.m_skill)).ToString(); SkillType result; return Enum.TryParse<SkillType>(text, out result) ? Localization.instance.Localize("$skill_" + text.ToLower()) : Localization.instance.Localize("$skill_" + Mathf.Abs(StringExtensionMethods.GetStableHashCode(text))); } } internal static class StringExtension { public static string Localize(this string str) { return Localization.instance.Localize(str); } } internal static class ZNetSceneExtension { public static ItemDrop GetItem(this ZNetScene zNetScene, string name) { GameObject prefab = zNetScene.GetPrefab(name); return (prefab != null) ? prefab.GetComponent<ItemDrop>() : null; } public static ItemDrop GetItem(this ZNetScene zNetScene, int hash) { GameObject prefab = zNetScene.GetPrefab(hash); return (prefab != null) ? prefab.GetComponent<ItemDrop>() : null; } } internal static class ZoneSystemExtension { internal static List<Vector3> tempPoints = new List<Vector3>(); public static bool creatingValidPlacesForLocation; public static string creatingPlacesFor = ""; public static void SetGlobalKey(this ZoneSystem zoneSystem, string key, object value) { zoneSystem.SetGlobalKey($"{key} {value}"); } public static string GetGlobalKeyValue(this ZoneSystem zoneSystem, string key) { string result = default(string); zoneSystem.GetGlobalKey(key, ref result); return result; } public static string GetOrAddGlobalKey(this ZoneSystem zoneSystem, string key, string defaultValue) { string result = default(string); if (zoneSystem.GetGlobalKey(key, ref result)) { return result; } zoneSystem.SetGlobalKey(key, defaultValue); return defaultValue; } public static (Vector2i, LocationInstance)[] GetGeneratedLocationsByName(this ZoneSystem zoneSystem, string key) { return (from x in ZoneSystem.instance.m_locationInstances where x.Value.m_location.m_prefabName == key select (x.Key, x.Value)).ToArray(); } public static List<Vector3> CreateValidPlacesForLocation(this ZoneSystem zoneSystem, string key, int count) { tempPoints.Clear(); ZoneLocation location = ZoneSystem.instance.GetLocation(key); if (location == null) { ModBase.DebugWarning("Could not find location with name '" + key + "'"); return null; } creatingPlacesFor = location.m_prefabName; creatingValidPlacesForLocation = true; int quantity = location.m_quantity; location.m_quantity = count; bool unique = location.m_unique; location.m_unique = false; ZoneSystem.instance.GenerateLocations(location); location.m_quantity = quantity; location.m_unique = unique; creatingPlacesFor = string.Empty; creatingValidPlacesForLocation = false; return tempPoints; } } } namespace JFUtils.Valheim.WithPatch { [HarmonyPatch] internal static class RegisterObjectsInstances { internal static List<Pickable> AllPickables { get; } = new List<Pickable>(); internal static List<Plant> AllPlants { get; } = new List<Plant>(); internal static List<Door> AllDoors { get; } = new List<Door>(); internal static List<Sign> AllSigns { get; } = new List<Sign>(); internal static List<Container> AllContainers { get; private set; } = new List<Container>(); internal static List<Bed> AllBeds { get; } = new List<Bed>(); [HarmonyPatch(typeof(Bed), "Awake")] [HarmonyPatch(typeof(Container), "Awake")] [HarmonyPatch(typeof(Door), "Awake")] [HarmonyPatch(typeof(Plant), "Awake")] [HarmonyPatch(typeof(Pickable), "Awake")] [HarmonyWrapSafe] [HarmonyPostfix] [HarmonyPatch(typeof(Sign), "Awake")] private static void AddToInstanceCollection(MonoBehaviour __instance) { __instance.StartCoroutine(enumerator<MonoBehaviour>(__instance)); } private static IEnumerator enumerator<T>(T component) where T : MonoBehaviour { ZNetView m_nview = ((Object)(object)component).GeZNetView(); yield return (object)new WaitWhile((Func<bool>)(() => m_nview.m_ghost || !m_nview.IsValid())); object obj = component; Pickable pickable = (Pickable)((obj is Pickable) ? obj : null); if (pickable != null) { AllPickables.TryAdd(pickable); AllPickables.RemoveAll((Pickable item) => (Object)(object)item == (Object)null); yield break; } object obj2 = component; Plant plant = (Plant)((obj2 is Plant) ? obj2 : null); if (plant != null) { AllPlants.TryAdd(plant); AllPlants.RemoveAll((Plant item) => (Object)(object)item == (Object)null); yield break; } object obj3 = component; Door door = (Door)((obj3 is Door) ? obj3 : null); if (door != null) { AllDoors.TryAdd(door); AllDoors.RemoveAll((Door item) => (Object)(object)item == (Object)null); yield break; } object obj4 = component; Sign sign = (Sign)((obj4 is Sign) ? obj4 : null); if (sign != null) { AllSigns.TryAdd(sign); AllSigns.RemoveAll((Sign item) => (Object)(object)item == (Object)null); yield break; } object obj5 = component; Container container = (Container)((obj5 is Container) ? obj5 : null); if (container != null) { AllContainers.TryAdd(container); AllContainers = AllContainers.Where((Container x) => (Object)(object)x != (Object)null).ToList(); yield break; } object obj6 = component; Bed bed = (Bed)((obj6 is Bed) ? obj6 : null); if (bed != null) { AllBeds.TryAdd(bed); AllBeds.RemoveAll((Bed item) => (Object)(object)item == (Object)null); } } } internal static class ObjectsInstances { public static List<Pickable> allPickables => RegisterObjectsInstances.AllPickables; public static List<Plant> allPlants => RegisterObjectsInstances.AllPlants; public static List<Door> allDoors => RegisterObjectsInstances.AllDoors; public static List<Sign> allSigns => RegisterObjectsInstances.AllSigns; public static List<Container> allContainers => RegisterObjectsInstances.AllContainers; public static List<CraftingStation> allCraftingStations => CraftingStation.m_allStations; public static List<Bed> allBeds => RegisterObjectsInstances.AllBeds; static ObjectsInstances() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) new Harmony("Extensions.Valheim.WithPatch.RegisterObjectsInstances").PatchAll(typeof(RegisterObjectsInstances)); Debug.Log((object)"RegisterObjectsInstances pa