Decompiled source of RustyCompass v1.1.5
RustyCompass.dll
Decompiled a year ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Cryptography; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using ItemManager; using JetBrains.Annotations; using LocalizationManager; using Microsoft.CodeAnalysis; using RustyCompass.Utilities; using ServerSync; using StatusEffectManager; using TMPro; using UnityEngine; using UnityEngine.UI; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Core.Tokens; using YamlDotNet.Helpers; using YamlDotNet.Serialization; using YamlDotNet.Serialization.BufferedDeserialization; using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators; using YamlDotNet.Serialization.Converters; using YamlDotNet.Serialization.EventEmitters; using YamlDotNet.Serialization.NamingConventions; using YamlDotNet.Serialization.NodeDeserializers; using YamlDotNet.Serialization.NodeTypeResolvers; using YamlDotNet.Serialization.ObjectFactories; using YamlDotNet.Serialization.ObjectGraphTraversalStrategies; using YamlDotNet.Serialization.ObjectGraphVisitors; using YamlDotNet.Serialization.Schemas; using YamlDotNet.Serialization.TypeInspectors; using YamlDotNet.Serialization.TypeResolvers; using YamlDotNet.Serialization.Utilities; using YamlDotNet.Serialization.ValueDeserializers; [assembly: ComVisible(false)] [assembly: AssemblyTrademark("")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyProduct("RustyCompass")] [assembly: AssemblyCompany("RustyMods")] [assembly: AssemblyFileVersion("1.1.5")] [assembly: AssemblyDescription("")] [assembly: AssemblyTitle("RustyCompass")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")] [assembly: Guid("E0E2F92E-557C-4A05-9D89-AA92A0BD75C4")] [assembly: AssemblyConfiguration("")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.5.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<05ec03ad-cb07-4323-9837-6a8d03d3bbfb>Embedded] internal sealed class <05ec03ad-cb07-4323-9837-6a8d03d3bbfb>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [<05ec03ad-cb07-4323-9837-6a8d03d3bbfb>Embedded] [CompilerGenerated] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class <a99f1a42-905e-4247-90f1-1bf75fa7d6bb>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <a99f1a42-905e-4247-90f1-1bf75fa7d6bb>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <a99f1a42-905e-4247-90f1-1bf75fa7d6bb>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [<05ec03ad-cb07-4323-9837-6a8d03d3bbfb>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] [CompilerGenerated] internal sealed class <23dea103-1d4b-4c3e-b366-73cab9074174>NullableContextAttribute : Attribute { public readonly byte Flag; public <23dea103-1d4b-4c3e-b366-73cab9074174>NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace StatusEffectManager { [PublicAPI] [Description("The ItemDrop effect to apply the status effect")] public enum EffectType { Equip, Attack, Consume, Set } public struct SE_Item { [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(1)] public StatusEffect Effect; public EffectType Type; } [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(0)] [PublicAPI] public class CustomSE { private static readonly List<CustomSE> RegisteredEffects = new List<CustomSE>(); private static readonly Dictionary<StatusEffect, CustomSE> CustomEffectMap = new Dictionary<StatusEffect, CustomSE>(); internal static readonly List<StatusEffect> CustomSEs = new List<StatusEffect>(); internal static readonly Dictionary<SE_Item, string> AddToPrefabs = new Dictionary<SE_Item, string>(); [Description("Instance of the StatusEffect.")] public readonly StatusEffect Effect; public EffectType Type; private string _folderName = "icons"; private AssetBundle _assetBundle = null; [Description("Sets the icon for the StatusEffect. Must be 64x64")] [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] public Sprite IconSprite = null; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] private string IconName = null; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] private LocalizeKey _name; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] private static Localization _english; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] private static BaseUnityPlugin _plugin; private static bool hasConfigSync = true; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] private static object _configSync; [Description("Sets the icon for the StatusEffect. Must be 64x64")] [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] public string Icon { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(2)] get { return IconName; } [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(2)] set { IconName = value; IconSprite = ((IconName == null) ? null : loadSprite(IconName)); Effect.m_icon = IconSprite; } } [Description("Sets the in-game name for the StatusEffect")] public LocalizeKey Name { get { LocalizeKey name = _name; if (name != null) { return name; } StatusEffect effect = Effect; if (effect.m_name.StartsWith("$")) { _name = new LocalizeKey(effect.m_name); } else { string text = "$statuseffect_" + ((Object)Effect).name.Replace(" ", "_"); _name = new LocalizeKey(text).English(effect.m_name); effect.m_name = text; } return _name; } } private static Localization english { get { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (_english == null) { _english = new Localization(); _english.SetupLanguage("English"); } return _english; } } 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([<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); } return _plugin; } } [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] private static object configSync { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(2)] get { if (_configSync == null && hasConfigSync) { Type type = Assembly.GetExecutingAssembly().GetType("ServerSync.ConfigSync"); if ((object)type != null) { _configSync = Activator.CreateInstance(type, plugin.Info.Metadata.GUID + " ItemManager"); type.GetField("CurrentVersion").SetValue(_configSync, plugin.Info.Metadata.Version.ToString()); type.GetProperty("IsLocked").SetValue(_configSync, true); } else { hasConfigSync = false; } } return _configSync; } } public CustomSE(string assetBundleFileName, string customEffectName, string folderName = "assets") : this(EffectManager.RegisterAssetBundle(assetBundleFileName, folderName), customEffectName) { } public CustomSE(AssetBundle bundle, string customEffectName) { Effect = EffectManager.RegisterCustomSE(bundle, customEffectName); RegisteredEffects.Add(this); CustomEffectMap[Effect] = this; } public CustomSE(string customEffectName) { Effect = ScriptableObject.CreateInstance<StatusEffect>(); EffectManager.RegisterCustomSE(Effect, customEffectName); RegisteredEffects.Add(this); CustomEffectMap[Effect] = this; } [return: <a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] private byte[] ReadEmbeddedFileBytes(string name) { using MemoryStream memoryStream = new MemoryStream(); Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + ((_folderName == "") ? "" : ".") + _folderName + "." + name); if (manifestResourceStream == null) { return null; } manifestResourceStream.CopyTo(memoryStream); return memoryStream.ToArray(); } [return: <a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] private Texture2D loadTexture(string name) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown byte[] array = ReadEmbeddedFileBytes(name); if (array != null) { Texture2D val = new Texture2D(0, 0); ImageConversion.LoadImage(val, array); return val; } return null; } private Sprite loadSprite(string name) { //IL_0027: 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) Texture2D val = loadTexture(name); if (val != null) { return Sprite.Create(val, new Rect(0f, 0f, 64f, 64f), Vector2.zero); } AssetBundle assetBundle = _assetBundle; Sprite val2 = ((assetBundle != null) ? assetBundle.LoadAsset<Sprite>(name) : null); if (val2 != null) { return val2; } throw new FileNotFoundException("Could not find a file named " + name + " for the effect icon"); } public void AddSEToPrefab(CustomSE customSE, string prefabName) { SE_Item sE_Item = default(SE_Item); sE_Item.Effect = customSE.Effect; sE_Item.Type = customSE.Type; SE_Item key = sE_Item; AddToPrefabs.Add(key, prefabName); } private static ConfigEntry<T> config<[<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] T>(string group, string name, T value, ConfigDescription description) { ConfigEntry<T> val = plugin.Config.Bind<T>(group, name, value, description); configSync?.GetType().GetMethod("AddConfigEntry").MakeGenericMethod(typeof(T)) .Invoke(configSync, new object[1] { val }); return val; } private static ConfigEntry<T> config<[<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] T>(string group, string name, T value, string description) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>())); } } [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(0)] [PublicAPI] public class LocalizeKey { public readonly string Key; public LocalizeKey(string key) { Key = key.Replace("$", ""); } public LocalizeKey English(string key) { return addForLang("English", key); } public LocalizeKey Swedish(string key) { return addForLang("Swedish", key); } public LocalizeKey French(string key) { return addForLang("French", key); } public LocalizeKey Italian(string key) { return addForLang("Italian", key); } public LocalizeKey German(string key) { return addForLang("German", key); } public LocalizeKey Spanish(string key) { return addForLang("Spanish", key); } public LocalizeKey Russian(string key) { return addForLang("Russian", key); } public LocalizeKey Romanian(string key) { return addForLang("Romanian", key); } public LocalizeKey Bulgarian(string key) { return addForLang("Bulgarian", key); } public LocalizeKey Macedonian(string key) { return addForLang("Macedonian", key); } public LocalizeKey Finnish(string key) { return addForLang("Finnish", key); } public LocalizeKey Danish(string key) { return addForLang("Danish", key); } public LocalizeKey Norwegian(string key) { return addForLang("Norwegian", key); } public LocalizeKey Icelandic(string key) { return addForLang("Icelandic", key); } public LocalizeKey Turkish(string key) { return addForLang("Turkish", key); } public LocalizeKey Lithuanian(string key) { return addForLang("Lithuanian", key); } public LocalizeKey Czech(string key) { return addForLang("Czech", key); } public LocalizeKey Hungarian(string key) { return addForLang("Hungarian", key); } public LocalizeKey Slovak(string key) { return addForLang("Slovak", key); } public LocalizeKey Polish(string key) { return addForLang("Polish", key); } public LocalizeKey Dutch(string key) { return addForLang("Dutch", key); } public LocalizeKey Portuguese_European(string key) { return addForLang("Portuguese_European", key); } public LocalizeKey Portuguese_Brazilian(string key) { return addForLang("Portuguese_Brazilian", key); } public LocalizeKey Chinese(string key) { return addForLang("Chinese", key); } public LocalizeKey Japanese(string key) { return addForLang("Japanese", key); } public LocalizeKey Korean(string key) { return addForLang("Korean", key); } public LocalizeKey Hindi(string key) { return addForLang("Hindi", key); } public LocalizeKey Thai(string key) { return addForLang("Thai", key); } public LocalizeKey Abenaki(string key) { return addForLang("Abenaki", key); } public LocalizeKey Croatian(string key) { return addForLang("Croatian", key); } public LocalizeKey Georgian(string key) { return addForLang("Georgian", key); } public LocalizeKey Greek(string key) { return addForLang("Greek", key); } public LocalizeKey Serbian(string key) { return addForLang("Serbian", key); } public LocalizeKey Ukrainian(string key) { return addForLang("Ukrainian", key); } private LocalizeKey addForLang(string lang, string value) { if (Localization.instance.GetSelectedLanguage() == lang) { Localization.instance.AddWord(Key, value); } else if (lang == "English" && !Localization.instance.m_translations.ContainsKey(Key)) { Localization.instance.AddWord(Key, value); } return this; } } [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(0)] [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] public static class EffectManager { [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(0)] private struct BundleId { [UsedImplicitly] public string assetBundleFileName; [UsedImplicitly] public string folderName; } private static readonly Dictionary<BundleId, AssetBundle> bundleCache; static EffectManager() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown bundleCache = new Dictionary<BundleId, AssetBundle>(); Harmony val = new Harmony("org.bepinex.helpers.StatusEffectManager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ObjectDB), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(EffectManager), "Patch_ObjectDBInit", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ZNetScene), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(EffectManager), "Patch_ZNetSceneAwake", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } public static AssetBundle RegisterAssetBundle(string assetBundleFileName, string folderName = "assets") { BundleId bundleId = default(BundleId); bundleId.assetBundleFileName = assetBundleFileName; bundleId.folderName = folderName; BundleId key = bundleId; if (!bundleCache.TryGetValue(key, out var value)) { Dictionary<BundleId, AssetBundle> dictionary = bundleCache; AssetBundle? obj = ((IEnumerable<AssetBundle>)Resources.FindObjectsOfTypeAll<AssetBundle>()).FirstOrDefault((Func<AssetBundle, bool>)([<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(0)] (AssetBundle a) => ((Object)a).name == assetBundleFileName)) ?? AssetBundle.LoadFromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + ((folderName == "") ? "" : ".") + folderName + "." + assetBundleFileName)); AssetBundle result = obj; dictionary[key] = obj; return result; } return value; } public static StatusEffect RegisterCustomSE(string assetBundleFileName, string customEffectName, string folderName = "assets") { return RegisterCustomSE(RegisterAssetBundle(assetBundleFileName, folderName), customEffectName); } public static StatusEffect RegisterCustomSE(AssetBundle assets, string customEffectName) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown StatusEffect val = (StatusEffect)assets.LoadAsset<ScriptableObject>(customEffectName); CustomSE.CustomSEs.Add(val); return val; } public static StatusEffect RegisterCustomSE(StatusEffect customSE, string customEffectName) { ((Object)customSE).name = customEffectName; CustomSE.CustomSEs.Add(customSE); return customSE; } [HarmonyPriority(700)] private static void Patch_ObjectDBInit(ObjectDB __instance) { foreach (StatusEffect customSE in CustomSE.CustomSEs) { if (!__instance.m_StatusEffects.Contains(customSE)) { __instance.m_StatusEffects.Add(customSE); } } __instance.UpdateItemHashes(); } [HarmonyPriority(700)] private static void Patch_ZNetSceneAwake(ZNetScene __instance) { foreach (KeyValuePair<SE_Item, string> addToPrefab in CustomSE.AddToPrefabs) { try { GameObject prefab = __instance.GetPrefab(addToPrefab.Value); ItemDrop val = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<ItemDrop>() : prefab.GetComponentInChildren<ItemDrop>()); Aoe val2 = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<Aoe>() : prefab.GetComponentInChildren<Aoe>()); EffectArea val3 = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<EffectArea>() : prefab.GetComponentInChildren<EffectArea>()); if (Object.op_Implicit((Object)(object)val)) { switch (addToPrefab.Key.Type) { case EffectType.Equip: val.m_itemData.m_shared.m_equipStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Attack: val.m_itemData.m_shared.m_attackStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Consume: val.m_itemData.m_shared.m_consumeStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Set: val.m_itemData.m_shared.m_setSize = 1; val.m_itemData.m_shared.m_setName = ((Object)addToPrefab.Key.Effect).name; val.m_itemData.m_shared.m_setStatusEffect = addToPrefab.Key.Effect; break; default: throw new ArgumentOutOfRangeException(); } } else if (Object.op_Implicit((Object)(object)val2)) { val2.m_statusEffect = ((Object)addToPrefab.Key.Effect).name; } else if (Object.op_Implicit((Object)(object)val3)) { val3.m_statusEffect = ((Object)addToPrefab.Key.Effect).name; } else { Debug.LogWarning((object)("The prefab '" + ((Object)prefab).name + "' does not have an ItemDrop, AOE, or EffectArea component. Cannot add the StatusEffect to the prefab.")); } } catch (Exception arg) { Debug.LogWarning((object)$"BROKE : {arg}"); } } } } } namespace RustyCompass { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(0)] [BepInPlugin("RustyMods.RustyCompass", "RustyCompass", "1.1.5")] public class RustyCompassPlugin : BaseUnityPlugin { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(0)] public enum Toggle { On = 1, Off = 0 } [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(0)] public enum Compass { Compass1, Compass2, Compass3, Compass4 } [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(0)] public enum CompassType { Circle, Bar } [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(0)] private class ConfigurationManagerAttributes { [UsedImplicitly] public int? Order = null; [UsedImplicitly] public bool? Browsable = null; [UsedImplicitly] [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] public string Category = null; [UsedImplicitly] [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(new byte[] { 2, 1 })] public Action<ConfigEntryBase> CustomDrawer = null; } [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(0)] private class AcceptableShortcuts : AcceptableValueBase { public AcceptableShortcuts() : base(typeof(KeyboardShortcut)) { } public override object Clamp(object value) { return value; } public override bool IsValid(object value) { return true; } public override string ToDescriptionString() { return "# Acceptable values: " + string.Join(", ", UnityInput.Current.SupportedKeyCodes); } } internal const string ModName = "RustyCompass"; internal const string ModVersion = "1.1.5"; internal const string Author = "RustyMods"; private const string ModGUID = "RustyMods.RustyCompass"; private static string ConfigFileName = "RustyMods.RustyCompass.cfg"; private static string ConfigFileFullPath; internal static string ConnectionError; private readonly Harmony _harmony = new Harmony("RustyMods.RustyCompass"); public static readonly ManualLogSource RustyCompassLogger; private static readonly ConfigSync ConfigSync; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] public static readonly Sprite CompassSprite; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] public static readonly Sprite CompassArrow; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] public static readonly Sprite CompassSimple; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] public static readonly Sprite CompassBW; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] public static readonly Sprite CompassViking; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] public static readonly Sprite NorthIcon; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] public static readonly Sprite SouthIcon; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] public static readonly Sprite EastIcon; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] public static readonly Sprite WestIcon; [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] public static readonly Sprite RuneIcon; private static ConfigEntry<Toggle> _serverConfigLocked; public static ConfigEntry<Toggle> _isModActive; public static ConfigEntry<CompassType> _CompassType; public static ConfigEntry<Toggle> _useCompassTokens; public static ConfigEntry<float> _CompassPinsMaxDistance; public static ConfigEntry<Toggle> _CompassPinsEnabled; public static ConfigEntry<Color> _BiomesColor; public static ConfigEntry<Color> _CompassColor; public static ConfigEntry<Compass> _CompassSprite; public static ConfigEntry<Vector2> _CompassPosition; public static ConfigEntry<float> _CompassSize; public static ConfigEntry<Color> _HandColor; public static ConfigEntry<Color> _WindMarkerColor; public static ConfigEntry<Color> _CirclePinsColor; public static ConfigEntry<float> _CirclePinsMaxSize; public static ConfigEntry<float> _CircleDirectionIcons; public static ConfigEntry<Color> _CircleDirectionColor; public static ConfigEntry<Toggle> _SwapEastWest; public static ConfigEntry<Color> _CompassBarColor; public static ConfigEntry<Vector2> _CompassBarIconSize; public static ConfigEntry<float> _CompassBarIconSpacing; public static ConfigEntry<float> _CompassBarPosition; public static ConfigEntry<Color> _CompassPinsColor; public static ConfigEntry<float> _CompassPinsMaxSize; public static ConfigEntry<Toggle> _SwapEastWestBar; public static ConfigEntry<Toggle> _TameTrackEnabled; public void Awake() { //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Unknown result type (might be due to invalid IL or missing references) //IL_0646: Unknown result type (might be due to invalid IL or missing references) //IL_0664: Unknown result type (might be due to invalid IL or missing references) //IL_06d4: Unknown result type (might be due to invalid IL or missing references) //IL_06f2: Unknown result type (might be due to invalid IL or missing references) //IL_0762: Unknown result type (might be due to invalid IL or missing references) //IL_0780: Unknown result type (might be due to invalid IL or missing references) //IL_07f0: Unknown result type (might be due to invalid IL or missing references) //IL_080e: Unknown result type (might be due to invalid IL or missing references) Localizer.Load(); _serverConfigLocked = config("1 - General", "Lock Configuration", Toggle.On, "If on, the configuration is locked and can be changed by server admins only."); ConfigSync.AddLockingConfigEntry<Toggle>(_serverConfigLocked); _isModActive = config("1 - General Settings", "_Enabled", Toggle.On, "If on, mod is active", synchronizedSetting: false); _CompassType = config("1 - General Settings", "Compass Type", CompassType.Bar, "Compass bar or circle", synchronizedSetting: false); _useCompassTokens = config("1 - General Settings", "Use Compass Tokens", Toggle.Off, "If on, compass features are enabled using quest items"); _CompassPinsEnabled = config("1 - General Settings", "Pins Enabled", Toggle.On, "If on, pins are added to the compass bar"); _CompassPinsMaxDistance = config("1 - General Settings", "Bar Pins Max Distance", 100f, "Max distance pins appear on bar", synchronizedSetting: false); Vector2 value = default(Vector2); ((Vector2)(ref value))..ctor(820f, 400f); _CompassPosition = config<Vector2>("2 - Circle Compass Settings", "Compass Position", value, "Alignment of compass", synchronizedSetting: false); _CompassSize = config("2 - Circle Compass Settings", "Compass Size", 200f, "Size of compass", synchronizedSetting: false); _CompassColor = config<Color>("2 - Circle Compass Settings", "Compass Color", Color.black, "Color of the compass", synchronizedSetting: false); _HandColor = config<Color>("2 - Circle Compass Settings", "Hand Color", Color.yellow, "Color of the hand on compass", synchronizedSetting: false); _WindMarkerColor = config<Color>("2 - Circle Compass Settings", "Wind Marker Color", Color.white, "Wind Marker Color", synchronizedSetting: false); _BiomesColor = config<Color>("2 - Circle Compass Settings", "Biomes Name Color", Color.white, "Biomes Text Color", synchronizedSetting: false); _CompassSprite = config("2 - Circle Compass Settings", "Compass Image", Compass.Compass1, "Compass sprite options", synchronizedSetting: false); _CirclePinsColor = config<Color>("2 - Circle Compass Settings", "Pin Color", Color.white, "Set the colors of the pins", synchronizedSetting: false); _CirclePinsMaxSize = config("2 - Circle Compass Settings", "Pin Max Size", 30f, "Pin size for the circle compass", synchronizedSetting: false); _CircleDirectionIcons = config("2 - Circle Compass Settings", "NESW Icon Placement", 120f, "Placement of the icons based on center of compass", synchronizedSetting: false); _CircleDirectionColor = config<Color>("2 - Circle Compass Settings", "NWSW Color", Color.white, "Color of compass directions", synchronizedSetting: false); _SwapEastWest = config("2 - Circle Compass Settings", "Swap East West", Toggle.Off, "If on, swaps the position of east and west icons", synchronizedSetting: false); _CompassBarColor = config<Color>("3 - Bar Compass Settings", "Compass Bar Color", Color.white, "Compass Bar Color", synchronizedSetting: false); Vector2 value2 = default(Vector2); ((Vector2)(ref value2))..ctor(50f, 50f); _CompassBarIconSize = config<Vector2>("3 - Bar Compass Settings", "Compass Icon Size", value2, "Icon Size", synchronizedSetting: false); _CompassBarIconSpacing = config("3 - Bar Compass Settings", "Compass Bar Icon Spacing", 25f, "Spacing between icons", synchronizedSetting: false); _CompassBarPosition = config("3 - Bar Compass Settings", "Compass Bar Position", 200f, "Compass Bar Vertical Position", synchronizedSetting: false); _CompassPinsColor = config<Color>("3 - Bar Compass Settings", "Compass Pins Color", Color.white, "Color of the pins on the bar", synchronizedSetting: false); _CompassPinsMaxSize = config("3 - Bar Compass Settings", "Pins Max Size", 50f, "Size of compass bar pins", synchronizedSetting: false); _SwapEastWestBar = config("3 - Bar Compass Settings", "Swap East West", Toggle.Off, "If on, swaps east and west icons", synchronizedSetting: false); _TameTrackEnabled = config("4 - Tame Tracker Settings", "Tame Tracker", Toggle.Off, "If on, tames are automatically pinned on compass bar and minimap", synchronizedSetting: false); Item item = new Item("compassbundle", "RS_Compass_Token_Gold"); item.Name.English("Lost Compass Token"); item.Description.English("Awakens the third eye, giving access to a compass bar"); item.Crafting.Add(CraftingTable.Forge, 2); item.RequiredItems.Add("Bronze", 5); item.RequiredItems.Add("Resin", 20); item.RequiredItems.Add("Flint", 5); item.RequiredItems.Add("CryptKey", 1); item.CraftAmount = 1; item.Configurable = Configurability.Recipe; Item item2 = new Item("compassbundle", "RS_Compass_Token_Brass"); item2.Name.English("Rusty Compass Token"); item2.Description.English("Enables the use of a circular compass"); item2.Crafting.Add(CraftingTable.Workbench, 2); item2.RequiredItems.Add("Copper", 5); item2.RequiredItems.Add("Resin", 10); item2.RequiredItems.Add("Flint", 5); item2.RequiredItems.Add("HardAntler", 1); item2.CraftAmount = 1; item2.Configurable = Configurability.Recipe; Item item3 = new Item("compassbundle", "RS_Compass_Token_Silver"); item3.Name.English("Silver Compass Token"); item3.Description.English("Enables the use of a circular compass and a deeper understanding of their location as well as wind direction"); item3.Crafting.Add(CraftingTable.ArtisanTable, 1); item3.RequiredItems.Add("Silver", 5); item3.RequiredItems.Add("Resin", 20); item3.RequiredItems.Add("Obsidian", 5); item3.RequiredItems.Add("Crystal", 10); item3.CraftAmount = 1; item3.Configurable = Configurability.Recipe; Item item4 = new Item("compassbundle", "RS_Compass_Token_DarkGold"); item4.Name.English("Forgotten Compass Token"); item4.Description.English("Grants full usage of the compass bar with senses of their surroundings"); item4.Crafting.Add(CraftingTable.ArtisanTable, 1); item4.RequiredItems.Add("BlackMetal", 5); item4.RequiredItems.Add("Resin", 20); item4.RequiredItems.Add("DragonTear", 1); item4.RequiredItems.Add("Coins", 100); item4.CraftAmount = 1; item4.Configurable = Configurability.Recipe; CustomSE customSE = new CustomSE("se_compass_gold"); customSE.Name.English("Lost Compass"); customSE.Type = EffectType.Equip; customSE.IconSprite = EastIcon; customSE.Effect.m_startMessage = "Lost Compass is active"; customSE.Effect.m_startMessageType = (MessageType)2; customSE.Effect.m_stopMessage = ""; customSE.Effect.m_stopMessageType = (MessageType)1; customSE.Effect.m_tooltip = "Your sense of direction is elevated"; customSE.AddSEToPrefab(customSE, "RS_Compass_Token_Gold"); CustomSE customSE2 = new CustomSE("se_compass_brass"); customSE2.Name.English("Rusty Compass"); customSE2.Type = EffectType.Equip; customSE2.IconSprite = WestIcon; customSE2.Effect.m_startMessage = "Rusty Compass is active"; customSE2.Effect.m_startMessageType = (MessageType)2; customSE2.Effect.m_stopMessage = ""; customSE2.Effect.m_stopMessageType = (MessageType)1; customSE2.Effect.m_tooltip = "Your sense of direction is elevated"; customSE2.AddSEToPrefab(customSE2, "RS_Compass_Token_Brass"); CustomSE customSE3 = new CustomSE("se_compass_silver"); customSE3.Name.English("Silver Compass"); customSE3.Type = EffectType.Equip; customSE3.IconSprite = SouthIcon; customSE3.Effect.m_startMessage = "Silver Compass is active"; customSE3.Effect.m_startMessageType = (MessageType)2; customSE3.Effect.m_stopMessage = ""; customSE3.Effect.m_stopMessageType = (MessageType)1; customSE3.Effect.m_tooltip = "Your sense of direction is elevated"; customSE3.AddSEToPrefab(customSE3, "RS_Compass_Token_Silver"); CustomSE customSE4 = new CustomSE("se_compass_darkgold"); customSE4.Name.English("Forgotten Compass"); customSE4.Type = EffectType.Equip; customSE4.IconSprite = SouthIcon; customSE4.Effect.m_startMessage = "Forgotten Compass is active"; customSE4.Effect.m_startMessageType = (MessageType)2; customSE4.Effect.m_stopMessage = ""; customSE4.Effect.m_stopMessageType = (MessageType)1; customSE4.Effect.m_tooltip = "Your sense of direction is elevated"; customSE4.AddSEToPrefab(customSE4, "RS_Compass_Token_DarkGold"); Assembly executingAssembly = Assembly.GetExecutingAssembly(); _harmony.PatchAll(executingAssembly); SetupWatcher(); } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); } private void SetupWatcher() { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName); fileSystemWatcher.Changed += ReadConfigValues; fileSystemWatcher.Created += ReadConfigValues; fileSystemWatcher.Renamed += ReadConfigValues; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; } private void ReadConfigValues(object sender, FileSystemEventArgs e) { if (!File.Exists(ConfigFileFullPath)) { return; } try { RustyCompassLogger.LogDebug((object)"ReadConfigValues called"); ((BaseUnityPlugin)this).Config.Reload(); } catch { RustyCompassLogger.LogError((object)("There was an issue loading your " + ConfigFileName)); RustyCompassLogger.LogError((object)"Please check your config entries for spelling and format!"); } } private ConfigEntry<T> config<[<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] T>(string group, string name, T value, ConfigDescription description, bool synchronizedSetting = true) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown ConfigDescription val = new ConfigDescription(description.Description + (synchronizedSetting ? " [Synced with Server]" : " [Not Synced with Server]"), description.AcceptableValues, description.Tags); ConfigEntry<T> val2 = ((BaseUnityPlugin)this).Config.Bind<T>(group, name, value, val); SyncedConfigEntry<T> syncedConfigEntry = ConfigSync.AddConfigEntry<T>(val2); syncedConfigEntry.SynchronizedConfig = synchronizedSetting; return val2; } private ConfigEntry<T> config<[<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] 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); } static RustyCompassPlugin() { string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName; ConnectionError = ""; RustyCompassLogger = Logger.CreateLogSource("RustyCompass"); ConfigSync = new ConfigSync("RustyMods.RustyCompass") { DisplayName = "RustyCompass" }; CompassSprite = SpriteManager.RegisterSprite("rustyCompassIcon.png"); CompassArrow = SpriteManager.RegisterSprite("compassArrowIcon.png"); CompassSimple = SpriteManager.RegisterSprite("rustyCompassSimple.png"); CompassBW = SpriteManager.RegisterSprite("rustyCompassBW.png"); CompassViking = SpriteManager.RegisterSprite("rustyCompassViking.png"); NorthIcon = SpriteManager.RegisterSprite("compassNorth.png"); SouthIcon = SpriteManager.RegisterSprite("compassSouth.png"); EastIcon = SpriteManager.RegisterSprite("compassEast.png"); WestIcon = SpriteManager.RegisterSprite("compassWest.png"); RuneIcon = SpriteManager.RegisterSprite("compassRune.png"); _serverConfigLocked = null; _isModActive = null; _CompassType = null; _useCompassTokens = null; _CompassPinsMaxDistance = null; _CompassPinsEnabled = null; _BiomesColor = null; _CompassColor = null; _CompassSprite = null; _CompassPosition = null; _CompassSize = null; _HandColor = null; _WindMarkerColor = null; _CirclePinsColor = null; _CirclePinsMaxSize = null; _CircleDirectionIcons = null; _CircleDirectionColor = null; _SwapEastWest = null; _CompassBarColor = null; _CompassBarIconSize = null; _CompassBarIconSpacing = null; _CompassBarPosition = null; _CompassPinsColor = null; _CompassPinsMaxSize = null; _SwapEastWestBar = null; _TameTrackEnabled = null; } } [HarmonyPatch(typeof(ZNet), "OnNewConnection")] public static class RegisterAndCheckVersion { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] private static void Prefix(ZNetPeer peer, ref ZNet __instance) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown RustyCompassPlugin.RustyCompassLogger.LogDebug((object)"Registering version RPC handler"); peer.m_rpc.Register<ZPackage>("RustyCompass_VersionCheck", (Action<ZRpc, ZPackage>)RpcHandlers.RPC_RustyCompass_Version); RustyCompassPlugin.RustyCompassLogger.LogInfo((object)"Invoking version check"); ZPackage val = new ZPackage(); val.Write("1.1.5"); val.Write(RpcHandlers.ComputeHashForMod().Replace("-", "")); peer.m_rpc.Invoke("RustyCompass_VersionCheck", new object[1] { val }); } } [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(0)] [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] [HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")] public static class VerifyClient { private static bool Prefix(ZRpc rpc, ZPackage pkg, ref ZNet __instance) { if (!__instance.IsServer() || RpcHandlers.ValidatedPeers.Contains(rpc)) { return true; } RustyCompassPlugin.RustyCompassLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") never sent version or couldn't due to previous disconnect, disconnecting")); rpc.Invoke("Error", new object[1] { 3 }); return false; } private static void Postfix(ZNet __instance) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.instance.GetServerPeerID(), "RustyCompassRequestAdminSync", new object[1] { (object)new ZPackage() }); } } [HarmonyPatch(typeof(FejdStartup), "ShowConnectError")] public class ShowConnectionError { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] private static void Postfix(FejdStartup __instance) { if (__instance.m_connectionFailedPanel.activeSelf) { __instance.m_connectionFailedError.fontSizeMax = 25f; __instance.m_connectionFailedError.fontSizeMin = 15f; TMP_Text connectionFailedError = __instance.m_connectionFailedError; connectionFailedError.text = connectionFailedError.text + "\n" + RustyCompassPlugin.ConnectionError; } } } [HarmonyPatch(typeof(ZNet), "Disconnect")] public static class RemoveDisconnectedPeerFromVerified { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] private static void Prefix(ZNetPeer peer, ref ZNet __instance) { if (__instance.IsServer()) { RustyCompassPlugin.RustyCompassLogger.LogInfo((object)("Peer (" + peer.m_rpc.m_socket.GetHostName() + ") disconnected, removing from validated list")); RpcHandlers.ValidatedPeers.Remove(peer.m_rpc); } } } [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(0)] [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] public static class RpcHandlers { public static readonly List<ZRpc> ValidatedPeers = new List<ZRpc>(); public static void RPC_RustyCompass_Version(ZRpc rpc, ZPackage pkg) { string text = pkg.ReadString(); string text2 = pkg.ReadString(); string text3 = ComputeHashForMod().Replace("-", ""); RustyCompassPlugin.RustyCompassLogger.LogInfo((object)("Version check, local: 1.1.5, remote: " + text)); if (text2 != text3 || text != "1.1.5") { RustyCompassPlugin.ConnectionError = "RustyCompass Installed: 1.1.5 " + text3 + "\n Needed: " + text + " " + text2; if (ZNet.instance.IsServer()) { RustyCompassPlugin.RustyCompassLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") has incompatible version, disconnecting...")); rpc.Invoke("Error", new object[1] { 3 }); } } else if (!ZNet.instance.IsServer()) { RustyCompassPlugin.RustyCompassLogger.LogInfo((object)"Received same version from server!"); } else { RustyCompassPlugin.RustyCompassLogger.LogInfo((object)("Adding peer (" + rpc.m_socket.GetHostName() + ") to validated list")); ValidatedPeers.Add(rpc); } } public static string ComputeHashForMod() { using SHA256 sHA = SHA256.Create(); byte[] array = sHA.ComputeHash(File.ReadAllBytes(Assembly.GetExecutingAssembly().Location)); StringBuilder stringBuilder = new StringBuilder(); byte[] array2 = array; foreach (byte b in array2) { stringBuilder.Append(b.ToString("X2")); } return stringBuilder.ToString(); } } } namespace RustyCompass.Utilities { public static class SpriteManager { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] [return: <a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(2)] public static Sprite RegisterSprite(string fileName, string folderName = "icons") { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Expected O, but got Unknown //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) Assembly executingAssembly = Assembly.GetExecutingAssembly(); string name = "RustyCompass." + folderName + "." + fileName; using (Stream stream = executingAssembly.GetManifestResourceStream(name)) { if (stream != null) { byte[] array = new byte[stream.Length]; stream.Read(array, 0, array.Length); Texture2D val = new Texture2D(2, 2); if (ImageConversion.LoadImage(val, array)) { Sprite val2 = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), Vector2.zero); ((Object)val2).name = fileName.Replace(".png", ""); return val2; } } } return null; } } } namespace RustyCompass.Patches { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(0)] public static class HUDPatches { [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(0)] [HarmonyPatch(typeof(Hud), "Awake")] public static class HudPatch { public static TMP_FontAsset font = null; private static GameObject root = null; public static int compassIconCount; public static readonly Sprite fireIcon = Minimap.instance.m_icons[0].m_icon; public static readonly Sprite spawnIcon = Minimap.instance.m_locationIcons[0].m_icon; public static readonly Sprite merchantIcon = Minimap.instance.m_locationIcons[1].m_icon; public static readonly Sprite clothIcon = Minimap.instance.m_locationIcons[2].m_icon; public static readonly Sprite houseIcon = Minimap.instance.m_icons[1].m_icon; public static readonly Sprite anchorIcon = Minimap.instance.m_icons[2].m_icon; public static readonly Sprite circleIcon = Minimap.instance.m_icons[3].m_icon; public static readonly Sprite portalIcon = Minimap.instance.m_icons[4].m_icon; public static readonly Sprite deathIcon = Minimap.instance.m_icons[5].m_icon; public static readonly Sprite bedIcon = Minimap.instance.m_icons[6].m_icon; public static readonly Sprite yellowTargetIcon = Minimap.instance.m_icons[7].m_icon; public static readonly Sprite bossIcon = Minimap.instance.m_icons[8].m_icon; public static readonly Sprite vikingIcon = Minimap.instance.m_icons[9].m_icon; public static readonly Sprite exclamationIcon = Minimap.instance.m_icons[10].m_icon; public static readonly Sprite blueTargetIcon = Minimap.instance.m_icons[12].m_icon; public static readonly Sprite questionMarkIcon = Minimap.instance.m_icons[13].m_icon; private static void Postfix(Hud __instance) { root = __instance.m_rootObject; Transform val = root.transform.Find("staminapanel"); Transform val2 = val.Find("Stamina"); Transform val3 = val2.Find("StaminaText"); TextMeshProUGUI val4 = default(TextMeshProUGUI); ((Component)val3).TryGetComponent<TextMeshProUGUI>(ref val4); if (Object.op_Implicit((Object)(object)val4)) { font = ((TMP_Text)val4).font; } CreateCompassCircle(); CreateCompassBar(); } private static void CreateCompassBar() { //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Expected O, but got Unknown //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)RustyCompassPlugin.RuneIcon == (Object)null) && !((Object)(object)RustyCompassPlugin.SouthIcon == (Object)null) && !((Object)(object)RustyCompassPlugin.EastIcon == (Object)null) && !((Object)(object)RustyCompassPlugin.NorthIcon == (Object)null) && !((Object)(object)RustyCompassPlugin.WestIcon == (Object)null)) { List<Sprite> list = new List<Sprite> { RustyCompassPlugin.SouthIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.EastIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.NorthIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.WestIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon }; List<Sprite> list2 = new List<Sprite> { RustyCompassPlugin.SouthIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.WestIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.NorthIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.EastIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon, RustyCompassPlugin.RuneIcon }; compassIconCount = list.Count; float value = RustyCompassPlugin._CompassBarPosition.Value; float value2 = RustyCompassPlugin._CompassBarIconSpacing.Value; float num = (float)list.Count * value2; float num2 = (0f - num) / 2f; for (int i = 0; i < list.Count; i++) { float num3 = num2 + (float)i * value2; GameObject val = new GameObject($"barIcon ({i})"); RectTransform val2 = val.AddComponent<RectTransform>(); ((Transform)val2).SetParent(root.transform); val2.sizeDelta = new Vector2(50f, 50f); val2.anchoredPosition = new Vector2(num3, value); Image val3 = val.AddComponent<Image>(); val3.sprite = ((RustyCompassPlugin._SwapEastWestBar.Value == RustyCompassPlugin.Toggle.On) ? list2[i] : list[i]); ((Graphic)val3).color = Color.white; } } } private static void CreateCompassCircle() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_002a: 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_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Expected O, but got Unknown //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: 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_00d7: Expected O, but got Unknown //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Expected O, but got Unknown //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Expected O, but got Unknown //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_021c: 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_0233: Expected O, but got Unknown //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_02a7: Expected O, but got Unknown //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02e1: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Unknown result type (might be due to invalid IL or missing references) //IL_0314: Unknown result type (might be due to invalid IL or missing references) //IL_031b: Expected O, but got Unknown //IL_033e: Unknown result type (might be due to invalid IL or missing references) //IL_0355: Unknown result type (might be due to invalid IL or missing references) //IL_036b: Unknown result type (might be due to invalid IL or missing references) //IL_03df: Unknown result type (might be due to invalid IL or missing references) //IL_03e6: Expected O, but got Unknown //IL_0409: Unknown result type (might be due to invalid IL or missing references) //IL_0420: Unknown result type (might be due to invalid IL or missing references) //IL_044a: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("CompassContainer"); RectTransform val2 = val.AddComponent<RectTransform>(); ((Transform)val2).SetParent(root.transform); val2.anchoredPosition = RustyCompassPlugin._CompassPosition.Value; val2.sizeDelta = new Vector2(200f, 200f); GameObject val3 = new GameObject("background"); RectTransform val4 = val3.AddComponent<RectTransform>(); ((Transform)val4).SetParent(val.transform); val4.anchoredPosition = new Vector2(0f, 0f); val4.sizeDelta = new Vector2(RustyCompassPlugin._CompassSize.Value, RustyCompassPlugin._CompassSize.Value); Image val5 = val3.AddComponent<Image>(); val5.sprite = RustyCompassPlugin.CompassBW; ((Graphic)val5).color = Color.white; ((MaskableGraphic)val5).maskable = true; GameObject val6 = new GameObject("north"); RectTransform val7 = val6.AddComponent<RectTransform>(); ((Transform)val7).SetParent(val3.transform); val7.anchoredPosition = new Vector2(0f, 0f); val7.sizeDelta = new Vector2(50f, 50f); Image val8 = val6.AddComponent<Image>(); val8.sprite = RustyCompassPlugin.NorthIcon; ((Graphic)val8).color = Color.white; GameObject val9 = new GameObject("east"); RectTransform val10 = val9.AddComponent<RectTransform>(); ((Transform)val10).SetParent(val3.transform); val10.anchoredPosition = new Vector2(0f, 0f); val10.sizeDelta = new Vector2(50f, 50f); Image val11 = val9.AddComponent<Image>(); val11.sprite = RustyCompassPlugin.EastIcon; ((Graphic)val11).color = Color.white; GameObject val12 = new GameObject("south"); RectTransform val13 = val12.AddComponent<RectTransform>(); ((Transform)val13).SetParent(val3.transform); val13.anchoredPosition = new Vector2(0f, 0f); val13.sizeDelta = new Vector2(50f, 50f); Image val14 = val12.AddComponent<Image>(); val14.sprite = RustyCompassPlugin.SouthIcon; ((Graphic)val14).color = Color.white; GameObject val15 = new GameObject("west"); RectTransform val16 = val15.AddComponent<RectTransform>(); ((Transform)val16).SetParent(val3.transform); val16.anchoredPosition = new Vector2(0f, 0f); val16.sizeDelta = new Vector2(50f, 50f); Image val17 = val15.AddComponent<Image>(); val17.sprite = RustyCompassPlugin.WestIcon; ((Graphic)val17).color = Color.white; GameObject val18 = new GameObject("hand"); RectTransform val19 = val18.AddComponent<RectTransform>(); ((Transform)val19).SetParent(val.transform); val19.anchoredPosition = new Vector2(0f, 0f); val19.sizeDelta = new Vector2(100f, 100f); Image val20 = val18.AddComponent<Image>(); val20.sprite = RustyCompassPlugin.CompassArrow; ((Graphic)val20).color = Color.white; GameObject val21 = new GameObject("biomes"); RectTransform val22 = val21.AddComponent<RectTransform>(); ((Transform)val22).SetParent(val.transform); val22.anchoredPosition = new Vector2(0f, 100f); val22.sizeDelta = new Vector2(250f, 25f); TextMeshProUGUI val23 = val21.AddComponent<TextMeshProUGUI>(); ((Graphic)val23).color = Color.white; ((TMP_Text)val23).font = font; ((TMP_Text)val23).text = ""; ((TMP_Text)val23).fontSize = 20f; ((TMP_Text)val23).fontSizeMax = 20f; ((TMP_Text)val23).fontSizeMin = 2f; ((TMP_Text)val23).enableAutoSizing = true; RectTransform windMarker = Minimap.m_instance.m_windMarker; Image component = ((Component)windMarker).gameObject.GetComponent<Image>(); GameObject val24 = new GameObject("windMarker"); RectTransform val25 = val24.AddComponent<RectTransform>(); ((Transform)val25).SetParent(val.transform); val25.anchoredPosition = new Vector2(-100f, -100f); val25.sizeDelta = new Vector2(32f, 32f); Image val26 = val24.AddComponent<Image>(); val26.sprite = component.sprite; ((Graphic)val26).color = RustyCompassPlugin._WindMarkerColor.Value; } } [HarmonyPatch(typeof(Hud), "Update")] [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(0)] public static class HudUpdatePatch { [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(0)] private class PinData { public string m_name = null; public Sprite m_icon = null; public GameObject m_uiElement = null; public PinType m_type; public Vector3 m_pos; } private static GameObject root = null; private static Quaternion playerRotation; private static Vector3 playerPosition; private static readonly List<PinData> BarPins = new List<PinData>(); private static readonly List<PinData> CirclePins = new List<PinData>(); private static bool compassCircle; private static bool biomesName; private static bool windIcon; private static bool compassBarActive; private static bool barPinActive; private static bool circlePinActive; private static void Postfix(Hud __instance) { //IL_0016: 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_002a: 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) root = __instance.m_rootObject; playerRotation = ((Component)Utils.GetMainCamera()).transform.rotation; playerPosition = ((Component)Utils.GetMainCamera()).transform.position; UpdateCompassCircle(); UpdateCompassBar(); UpdatePins(); if (RustyCompassPlugin._useCompassTokens.Value == RustyCompassPlugin.Toggle.On) { CheckPlayerInventory(); } } private static void CheckPlayerInventory() { if ((Object)(object)Player.m_localPlayer == (Object)null) { return; } List<ItemData> equippedItems = ((Humanoid)Player.m_localPlayer).GetInventory().GetEquippedItems(); compassBarActive = false; compassCircle = false; barPinActive = false; biomesName = false; windIcon = false; circlePinActive = false; foreach (ItemData item in equippedItems) { bool flag; switch (item.m_shared.m_name) { case "$item_compass_token_brass": case "$item_compass_token_gold": case "$item_compass_token_silver": case "$item_compass_token_darkgold": flag = true; break; default: flag = false; break; } if (!flag) { continue; } SetCompassActive(item.m_shared.m_name); break; } } private static void SetCompassActive(string itemName) { switch (itemName) { case "$item_compass_token_brass": compassCircle = true; break; case "$item_compass_token_gold": compassBarActive = true; break; case "$item_compass_token_silver": compassCircle = true; biomesName = true; windIcon = true; circlePinActive = true; break; case "$item_compass_token_darkgold": compassBarActive = true; barPinActive = true; break; } } private static void UpdateCompassBar() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: 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_00df: Unknown result type (might be due to invalid IL or missing references) float y = ((Quaternion)(ref playerRotation)).eulerAngles.y; float num = (float)HudPatch.compassIconCount * RustyCompassPlugin._CompassBarIconSpacing.Value; float num2 = 360f; float value = RustyCompassPlugin._CompassBarPosition.Value; RectTransform val2 = default(RectTransform); Image val3 = default(Image); for (int i = 0; i < HudPatch.compassIconCount; i++) { Transform val = root.transform.Find($"barIcon ({i})"); ((Component)val).TryGetComponent<RectTransform>(ref val2); ((Component)val).TryGetComponent<Image>(ref val3); if (!Object.op_Implicit((Object)(object)val2) || !Object.op_Implicit((Object)(object)val3)) { break; } float num3 = (y + (float)i * (num2 / (float)HudPatch.compassIconCount)) % num2; float num4 = num3 / num2 * num - num / 2f; val2.sizeDelta = RustyCompassPlugin._CompassBarIconSize.Value; val2.anchoredPosition = new Vector2(num4, value); ((Graphic)val3).color = RustyCompassPlugin._CompassBarColor.Value; ((Component)val).gameObject.SetActive(RustyCompassPlugin._isModActive.Value == RustyCompassPlugin.Toggle.On && ((RustyCompassPlugin._useCompassTokens.Value == RustyCompassPlugin.Toggle.On && compassBarActive) || (RustyCompassPlugin._useCompassTokens.Value != RustyCompassPlugin.Toggle.On && RustyCompassPlugin._CompassType.Value == RustyCompassPlugin.CompassType.Bar))); } } private static void UpdatePins() { //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //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_04bb: Unknown result type (might be due to invalid IL or missing references) //IL_04c0: Unknown result type (might be due to invalid IL or missing references) //IL_04c2: Unknown result type (might be due to invalid IL or missing references) //IL_04c4: Unknown result type (might be due to invalid IL or missing references) //IL_04c9: Unknown result type (might be due to invalid IL or missing references) //IL_04ce: Unknown result type (might be due to invalid IL or missing references) //IL_04d0: Unknown result type (might be due to invalid IL or missing references) //IL_04d5: Unknown result type (might be due to invalid IL or missing references) //IL_04de: Unknown result type (might be due to invalid IL or missing references) //IL_04e3: Unknown result type (might be due to invalid IL or missing references) //IL_04e8: Unknown result type (might be due to invalid IL or missing references) //IL_04ed: Unknown result type (might be due to invalid IL or missing references) //IL_04ef: 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_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_02d7: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Unknown result type (might be due to invalid IL or missing references) //IL_031b: Unknown result type (might be due to invalid IL or missing references) //IL_034a: 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_0617: Unknown result type (might be due to invalid IL or missing references) //IL_0629: Unknown result type (might be due to invalid IL or missing references) //IL_065b: Unknown result type (might be due to invalid IL or missing references) //IL_068a: Unknown result type (might be due to invalid IL or missing references) //IL_06a7: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)Camera.main == (Object)null || (Object)(object)Player.m_localPlayer == (Object)null) { return; } Transform val = root.transform.Find("CompassContainer"); Transform val2 = root.transform.Find("barIcon (0)"); List<PinData> latestPinData = GetLatestPinData(); foreach (PinData barPin in BarPins) { Object.Destroy((Object)(object)barPin.m_uiElement); } foreach (PinData circlePin in CirclePins) { Object.Destroy((Object)(object)circlePin.m_uiElement); } BarPins.Clear(); CirclePins.Clear(); float value = RustyCompassPlugin._CompassPinsMaxDistance.Value; if (((Component)val).gameObject.activeInHierarchy) { if (RustyCompassPlugin._CompassPinsEnabled.Value == RustyCompassPlugin.Toggle.Off) { return; } foreach (PinData item in latestPinData) { GameObject uiElement = CreateCirclePin(item); item.m_uiElement = uiElement; CirclePins.Add(item); } RectTransform val5 = default(RectTransform); Image val6 = default(Image); TextMeshProUGUI val7 = default(TextMeshProUGUI); RectTransform val8 = default(RectTransform); foreach (PinData circlePin2 in CirclePins) { Vector3 pos = circlePin2.m_pos; Vector3 val3 = pos - playerPosition; float num = Vector3.Distance(playerPosition, pos); float value2 = RustyCompassPlugin._CirclePinsMaxSize.Value; string text = ((circlePin2.m_name == "") ? ((Object)circlePin2.m_icon).name : circlePin2.m_name); if (1 == 0) { } string text2 = text switch { "mapicon_trader" => "$rusty_compass_haldor", "mapicon_start" => "$rusty_compass_spawn", "mapicon_hildir" => "$rusty_compass_hildir", _ => text, }; if (1 == 0) { } text = text2; string arg = Localization.instance.Localize(text); GameObject uiElement2 = circlePin2.m_uiElement; Transform val4 = uiElement2.transform.Find("text"); uiElement2.TryGetComponent<RectTransform>(ref val5); uiElement2.TryGetComponent<Image>(ref val6); ((Component)val4).TryGetComponent<TextMeshProUGUI>(ref val7); ((Component)val4).TryGetComponent<RectTransform>(ref val8); if (!Object.op_Implicit((Object)(object)val5) || !Object.op_Implicit((Object)(object)val6) || !Object.op_Implicit((Object)(object)val7) || !Object.op_Implicit((Object)(object)val8)) { return; } val5.anchoredPosition = new Vector2(val3.x, val3.z); ((Graphic)val6).color = RustyCompassPlugin._CirclePinsColor.Value; ((TMP_Text)val7).text = $"{arg} (<color=orange>{Mathf.Round(num)}</color>)"; ((Graphic)val7).color = RustyCompassPlugin._CirclePinsColor.Value; float num2 = value2 / num; float num3 = value2 * num2; num3 = Mathf.Clamp(num3, 5f, value2); val5.sizeDelta = new Vector2(num3, num3); val8.sizeDelta = new Vector2(100f * num2, 25f * num2); uiElement2.SetActive(num < value && RustyCompassPlugin._CompassPinsEnabled.Value == RustyCompassPlugin.Toggle.On && RustyCompassPlugin._isModActive.Value == RustyCompassPlugin.Toggle.On && ((RustyCompassPlugin._useCompassTokens.Value == RustyCompassPlugin.Toggle.On && circlePinActive) || (RustyCompassPlugin._useCompassTokens.Value != RustyCompassPlugin.Toggle.On && RustyCompassPlugin._CompassType.Value == RustyCompassPlugin.CompassType.Circle))); } } if (!((Component)val2).gameObject.activeInHierarchy || RustyCompassPlugin._CompassPinsEnabled.Value == RustyCompassPlugin.Toggle.Off) { return; } foreach (PinData item2 in latestPinData) { GameObject uiElement3 = CreateBarPin(item2); item2.m_uiElement = uiElement3; BarPins.Add(item2); } float num4 = (float)HudPatch.compassIconCount * RustyCompassPlugin._CompassBarIconSpacing.Value; float num5 = 360f; float value3 = RustyCompassPlugin._CompassBarPosition.Value; float value4 = RustyCompassPlugin._CompassPinsMaxSize.Value; RectTransform val11 = default(RectTransform); Image val12 = default(Image); TextMeshProUGUI val13 = default(TextMeshProUGUI); RectTransform val14 = default(RectTransform); foreach (PinData barPin2 in BarPins) { Vector3 pos2 = barPin2.m_pos; Vector3 val9 = pos2 - playerPosition; float num6 = Vector3.Distance(playerPosition, pos2); float num7 = Vector3.SignedAngle(playerRotation * Vector3.forward, val9, Vector3.up); float num8 = num7 % num5 / num5 * (0f - num4); string text3 = ((barPin2.m_name == "") ? ((Object)barPin2.m_icon).name : barPin2.m_name); if (1 == 0) { } string text2 = text3 switch { "mapicon_trader" => "$rusty_compass_haldor", "mapicon_start" => "$rusty_compass_spawn", "mapicon_hildir" => "$rusty_compass_hildir", _ => text3, }; if (1 == 0) { } text3 = text2; string arg2 = Localization.instance.Localize(text3); GameObject uiElement4 = barPin2.m_uiElement; Transform val10 = uiElement4.transform.Find("text"); uiElement4.TryGetComponent<RectTransform>(ref val11); uiElement4.TryGetComponent<Image>(ref val12); ((Component)val10).TryGetComponent<TextMeshProUGUI>(ref val13); ((Component)val10).TryGetComponent<RectTransform>(ref val14); if (!Object.op_Implicit((Object)(object)val11) || !Object.op_Implicit((Object)(object)val12) || !Object.op_Implicit((Object)(object)val13) || !Object.op_Implicit((Object)(object)val14)) { break; } val11.anchoredPosition = new Vector2(num8, value3); ((Graphic)val12).color = RustyCompassPlugin._CompassPinsColor.Value; ((TMP_Text)val13).text = $"{arg2} (<color=orange>{Mathf.Round(num6)}</color>)"; ((Graphic)val13).color = RustyCompassPlugin._CompassPinsColor.Value; float num9 = value4 / num6; float num10 = value4 * num9; num10 = Mathf.Clamp(num10, 5f, value4); val11.sizeDelta = new Vector2(num10, num10); val14.sizeDelta = new Vector2(100f * num9, 25f * num9); uiElement4.SetActive(num6 < value && RustyCompassPlugin._CompassPinsEnabled.Value == RustyCompassPlugin.Toggle.On && RustyCompassPlugin._isModActive.Value == RustyCompassPlugin.Toggle.On && ((RustyCompassPlugin._useCompassTokens.Value == RustyCompassPlugin.Toggle.On && barPinActive) || (RustyCompassPlugin._useCompassTokens.Value != RustyCompassPlugin.Toggle.On && RustyCompassPlugin._CompassType.Value == RustyCompassPlugin.CompassType.Bar))); } } private static GameObject CreateBarPin(PinData pinData) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Expected O, but got Unknown //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0098: 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_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Expected I4, but got Unknown //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Expected O, but got Unknown //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Unknown result type (might be due to invalid IL or missing references) //IL_02d3: Unknown result type (might be due to invalid IL or missing references) string text = ((pinData.m_name == "") ? ((Object)pinData.m_icon).name : pinData.m_name); Vector3 pos = pinData.m_pos; GameObject val = new GameObject($"BarPin ({pos.x}{pos.y}{pos.z})"); RectTransform val2 = val.AddComponent<RectTransform>(); ((Transform)val2).SetParent(root.transform); val2.anchoredPosition = new Vector2(0f, 0f); val2.sizeDelta = new Vector2(50f, 50f); Image val3 = val.AddComponent<Image>(); Image val4 = val3; PinType type = pinData.m_type; if (1 == 0) { } Sprite sprite = (Sprite)((int)type switch { 9 => HudPatch.bossIcon, 10 => HudPatch.vikingIcon, 4 => HudPatch.deathIcon, 5 => HudPatch.bedIcon, 0 => HudPatch.fireIcon, 1 => HudPatch.houseIcon, 2 => HudPatch.anchorIcon, 3 => HudPatch.circleIcon, 6 => HudPatch.portalIcon, 14 => HudPatch.questionMarkIcon, 15 => HudPatch.questionMarkIcon, 16 => HudPatch.questionMarkIcon, 12 => HudPatch.blueTargetIcon, 7 => HudPatch.yellowTargetIcon, 13 => HudPatch.exclamationIcon, 11 => HudPatch.exclamationIcon, _ => HudPatch.circleIcon, }); if (1 == 0) { } val4.sprite = sprite; Image val5 = val3; string name = ((Object)pinData.m_icon).name; if (1 == 0) { } sprite = (Sprite)(name switch { "mapicon_start" => HudPatch.spawnIcon, "mapicon_trader" => HudPatch.merchantIcon, "mapicon_hildir" => HudPatch.clothIcon, _ => val3.sprite, }); if (1 == 0) { } val5.sprite = sprite; ((Graphic)val3).color = Color.white; GameObject val6 = new GameObject("text"); RectTransform val7 = val6.AddComponent<RectTransform>(); ((Transform)val7).SetParent(val.transform); val7.anchoredPosition = new Vector2(0f, -35f); val7.sizeDelta = new Vector2(100f, 25f); TextMeshProUGUI val8 = val6.AddComponent<TextMeshProUGUI>(); ((TMP_Text)val8).font = HudPatch.font; ((TMP_Text)val8).fontSize = 15f; ((TMP_Text)val8).fontSizeMax = 15f; ((TMP_Text)val8).fontSizeMin = 5f; ((TMP_Text)val8).enableAutoSizing = true; ((Graphic)val8).color = Color.white; ((TMP_Text)val8).horizontalAlignment = (HorizontalAlignmentOptions)2; ((TMP_Text)val8).verticalAlignment = (VerticalAlignmentOptions)512; ((TMP_Text)val8).richText = true; ((TMP_Text)val8).text = Localization.instance.Localize(text); val.SetActive(false); return val; } private static GameObject CreateCirclePin(PinData pinData) { //IL_0049: 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_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006a: 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_0081: Expected O, but got Unknown //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: 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_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Expected I4, but got Unknown //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Expected O, but got Unknown //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_02f3: Unknown result type (might be due to invalid IL or missing references) Transform val = root.transform.Find("CompassContainer"); Transform parent = val.Find("background"); string text = ((pinData.m_name == "") ? ((Object)pinData.m_icon).name : pinData.m_name); Vector3 pos = pinData.m_pos; GameObject val2 = new GameObject($"CirclePin ({pos.x}{pos.y}{pos.z})"); RectTransform val3 = val2.AddComponent<RectTransform>(); ((Transform)val3).SetParent(parent); val3.anchoredPosition = new Vector2(0f, 0f); val3.sizeDelta = new Vector2(50f, 50f); Image val4 = val2.AddComponent<Image>(); Image val5 = val4; PinType type = pinData.m_type; if (1 == 0) { } Sprite sprite = (Sprite)((int)type switch { 9 => HudPatch.bossIcon, 10 => HudPatch.vikingIcon, 4 => HudPatch.deathIcon, 5 => HudPatch.bedIcon, 0 => HudPatch.fireIcon, 1 => HudPatch.houseIcon, 2 => HudPatch.anchorIcon, 3 => HudPatch.circleIcon, 6 => HudPatch.portalIcon, 14 => HudPatch.questionMarkIcon, 15 => HudPatch.questionMarkIcon, 16 => HudPatch.questionMarkIcon, 12 => HudPatch.blueTargetIcon, 7 => HudPatch.yellowTargetIcon, 13 => HudPatch.exclamationIcon, 11 => HudPatch.exclamationIcon, _ => HudPatch.circleIcon, }); if (1 == 0) { } val5.sprite = sprite; Image val6 = val4; string name = ((Object)pinData.m_icon).name; if (1 == 0) { } sprite = (Sprite)(name switch { "mapicon_start" => HudPatch.spawnIcon, "mapicon_trader" => HudPatch.merchantIcon, "mapicon_hildir" => HudPatch.clothIcon, _ => val4.sprite, }); if (1 == 0) { } val6.sprite = sprite; ((Graphic)val4).color = Color.white; GameObject val7 = new GameObject("text"); RectTransform val8 = val7.AddComponent<RectTransform>(); ((Transform)val8).SetParent(val2.transform); val8.anchoredPosition = new Vector2(0f, -25f); val8.sizeDelta = new Vector2(100f, 25f); TextMeshProUGUI val9 = val7.AddComponent<TextMeshProUGUI>(); ((TMP_Text)val9).font = HudPatch.font; ((TMP_Text)val9).fontSize = 15f; ((TMP_Text)val9).fontSizeMax = 15f; ((TMP_Text)val9).fontSizeMin = 5f; ((TMP_Text)val9).enableAutoSizing = true; ((Graphic)val9).color = Color.white; ((TMP_Text)val9).horizontalAlignment = (HorizontalAlignmentOptions)2; ((TMP_Text)val9).verticalAlignment = (VerticalAlignmentOptions)512; ((TMP_Text)val9).richText = true; ((TMP_Text)val9).text = Localization.instance.Localize(text); val2.SetActive(false); return val2; } private static List<PinData> GetLatestPinData() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: 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_002c: Unknown result type (might be due to invalid IL or missing references) //IL_002d: 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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Expected O, but got Unknown //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Invalid comparison between Unknown and I4 //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Invalid comparison between Unknown and I4 //IL_017e: 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_0185: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Invalid comparison between Unknown and I4 //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Invalid comparison between Unknown and I4 //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Invalid comparison between Unknown and I4 //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) List<PinData> list = new List<PinData>(); List<PlayerInfo> tempPlayerInfo = Minimap.instance.m_tempPlayerInfo; foreach (PlayerInfo item2 in tempPlayerInfo) { PinData item = new PinData { m_name = item2.m_name, m_type = (PinType)10, m_icon = HudPatch.vikingIcon, m_save = false, m_checked = false, m_pos = item2.m_position, m_ownerID = 0L }; list.Add(item); } List<PinData> pins = Minimap.instance.m_pins; foreach (PinData item3 in pins) { PinType type = item3.m_type; if (((int)type != 11 && (int)type != 13) || 1 == 0) { list.Add(item3); } } Dictionary<Vector3, PinData> locationPins = Minimap.instance.m_locationPins; List<KeyValuePair<Vector3, PinData>> list2 = locationPins.ToList(); foreach (KeyValuePair<Vector3, PinData> item4 in list2) { PinData value = item4.Value; list.Add(value); } List<PinData> playerPins = Minimap.instance.m_playerPins; foreach (PinData item5 in playerPins) { PinType type2 = item5.m_type; if (((int)type2 != 8 && (int)type2 != 11 && (int)type2 != 13) || 1 == 0) { list.Add(item5); } } List<PinData> list3 = new List<PinData>(); foreach (PinData item6 in list) { PinData pinData = new PinData { m_name = item6.m_name, m_type = item6.m_type, m_pos = item6.m_pos, m_icon = item6.m_icon }; bool flag = string.IsNullOrEmpty(item6.m_name); bool flag2 = flag; if (flag2) { bool flag3; switch (((Object)item6.m_icon).name) { case "mapicon_start": case "mapicon_trader": case "mapicon_hildir": flag3 = true; break; default: flag3 = false; break; } flag2 = flag3; } if (flag2) { pinData.m_name = ((Object)item6.m_icon).name; list3.Add(pinData); } else if (!string.IsNullOrEmpty(item6.m_name)) { list3.Add(pinData); } } return list3; } private static void UpdateCompassCircle() { //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0198: 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_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_0278: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_02aa: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Unknown result type (might be due to invalid IL or missing references) //IL_02e3: Unknown result type (might be due to invalid IL or missing references) //IL_0351: Unknown result type (might be due to invalid IL or missing references) //IL_036d: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_0330: Unknown result type (might be due to invalid IL or missing references) //IL_0380: Unknown result type (might be due to invalid IL or missing references) //IL_0392: Unknown result type (might be due to invalid IL or missing references) //IL_03a4: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: 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_0446: Unknown result type (might be due to invalid IL or missing references) //IL_0462: Unknown result type (might be due to invalid IL or missing references) //IL_0467: Unknown result type (might be due to invalid IL or missing references) //IL_046c: Unknown result type (might be due to invalid IL or missing references) //IL_0470: Unknown result type (might be due to invalid IL or missing references) //IL_047b: Unknown result type (might be due to invalid IL or missing references) //IL_03e9: Unknown result type (might be due to invalid IL or missing references) //IL_03ee: Unknown result type (might be due to invalid IL or missing references) //IL_040c: Unknown result type (might be due to invalid IL or missing references) Transform val = root.transform.Find("CompassContainer"); Transform val2 = val.Find("background"); Transform val3 = val.Find("hand"); Transform val4 = ((Component)val).transform.Find("biomes"); Transform val5 = val.Find("windMarker"); Transform val6 = val2.Find("north"); Transform val7 = val2.Find("east"); Transform val8 = val2.Find("south"); Transform val9 = val2.Find("west"); RectTransform val10 = default(RectTransform); ((Component)val).TryGetComponent<RectTransform>(ref val10); RectTransform val11 = default(RectTransform); ((Component)val2).TryGetComponent<RectTransform>(ref val11); Image val12 = default(Image); ((Component)val2).TryGetComponent<Image>(ref val12); Image val13 = default(Image); ((Component)val3).TryGetComponent<Image>(ref val13); TextMeshProUGUI val14 = default(TextMeshProUGUI); ((Component)val4).TryGetComponent<TextMeshProUGUI>(ref val14); Image val15 = default(Image); ((Component)val5).TryGetComponent<Image>(ref val15); RectTransform val16 = default(RectTransform); ((Component)val6).TryGetComponent<RectTransform>(ref val16); RectTransform val17 = default(RectTransform); ((Component)val7).TryGetComponent<RectTransform>(ref val17); RectTransform val18 = default(RectTransform); ((Component)val8).TryGetComponent<RectTransform>(ref val18); RectTransform val19 = default(RectTransform); ((Component)val9).TryGetComponent<RectTransform>(ref val19); Image val20 = default(Image); ((Component)val6).TryGetComponent<Image>(ref val20); Image val21 = default(Image); ((Component)val7).TryGetComponent<Image>(ref val21); Image val22 = default(Image); ((Component)val8).TryGetComponent<Image>(ref val22); Image val23 = default(Image); ((Component)val9).TryGetComponent<Image>(ref val23); if (!Object.op_Implicit((Object)(object)val10) || !Object.op_Implicit((Object)(object)val11) || !Object.op_Implicit((Object)(object)val12) || !Object.op_Implicit((Object)(object)val13) || !Object.op_Implicit((Object)(object)val14) || !Object.op_Implicit((Object)(object)val15) || !Object.op_Implicit((Object)(object)val16) || !Object.op_Implicit((Object)(object)val17) || !Object.op_Implicit((Object)(object)val18) || !Object.op_Implicit((Object)(object)val19)) { return; } val10.anchoredPosition = RustyCompassPlugin._CompassPosition.Value; val11.sizeDelta = new Vector2(RustyCompassPlugin._CompassSize.Value, RustyCompassPlugin._CompassSize.Value); ((Graphic)val12).color = RustyCompassPlugin._CompassColor.Value; Image val24 = val12; RustyCompassPlugin.Compass value = RustyCompassPlugin._CompassSprite.Value; if (1 == 0) { } Sprite sprite = (Sprite)(value switch { RustyCompassPlugin.Compass.Compass1 => RustyCompassPlugin.CompassSprite, RustyCompassPlugin.Compass.Compass2 => RustyCompassPlugin.CompassSimple, RustyCompassPlugin.Compass.Compass3 => RustyCompassPlugin.CompassBW, RustyCompassPlugin.Compass.Compass4 => RustyCompassPlugin.CompassViking, _ => val12.sprite, }); if (1 == 0) { } val24.sprite = sprite; val2.rotation = Quaternion.Euler(0f, 0f, ((Quaternion)(ref playerRotation)).eulerAngles.y); float y = val2.eulerAngles.y; val6.rotation = Quaternion.Euler(0f, 0f, y); val7.rotation = Quaternion.Euler(0f, 0f, y); val8.rotation = Quaternion.Euler(0f, 0f, y); val9.rotation = Quaternion.Euler(0f, 0f, y); val16.anchoredPosition = new Vector2(0f, RustyCompassPlugin._CircleDirectionIcons.Value); val18.anchoredPosition = new Vector2(0f, 0f - RustyCompassPlugin._CircleDirectionIcons.Value); if (RustyCompassPlugin._SwapEastWest.Value == RustyCompassPlugin.Toggle.Off) { val17.anchoredPosition = new Vector2(RustyCompassPlugin._CircleDirectionIcons.Value, 0f); val19.anchoredPosition = new Vector2(0f - RustyCompassPlugin._CircleDirectionIcons.Value, 0f); } else { val17.anchoredPosition = new Vector2(0f - RustyCompassPlugin._CircleDirectionIcons.Value, 0f); val19.anchoredPosition = new Vector2(RustyCompassPlugin._CircleDirectionIcons.Value, 0f); } ((Graphic)val20).color = RustyCompassPlugin._CircleDirectionColor.Value; ((Graphic)val21).color = RustyCompassPlugin._CircleDirectionColor.Value; ((Graphic)val22).color = RustyCompassPlugin._CircleDirectionColor.Value; ((Graphic)val23).color = RustyCompassPlugin._CircleDirectionColor.Value; ((Graphic)val13).color = RustyCompassPlugin._HandColor.Value; if (Object.op_Implicit((Object)(object)Player.m_localPlayer)) { Biome currentBiome = Player.m_localPlayer.m_currentBiome; ((TMP_Text)val14).text = ((object)(Biome)(ref currentBiome)).ToString(); ((Graphic)val14).color = RustyCompassPlugin._BiomesColor.Value; if (RustyCompassPlugin._useCompassTokens.Value == RustyCompassPlugin.Toggle.On) { ((Component)val14).gameObject.SetActive(biomesName); } } ((Graphic)val15).color = RustyCompassPlugin._WindMarkerColor.Value; Quaternion val25 = Quaternion.LookRotation(EnvMan.instance.GetWindDir()); val5.rotation = Quaternion.Euler(0f, 0f, 0f - ((Quaternion)(ref val25)).eulerAngles.y); if (RustyCompassPlugin._useCompassTokens.Value == RustyCompassPlugin.Toggle.On) { ((Component)val5).gameObject.SetActive(windIcon); } ((Component)val).gameObject.SetActive(RustyCompassPlugin._isModActive.Value == RustyCompassPlugin.Toggle.On && ((RustyCompassPlugin._useCompassTokens.Value == RustyCompassPlugin.Toggle.On && compassCircle) || (RustyCompassPlugin._useCompassTokens.Value != RustyCompassPlugin.Toggle.On && RustyCompassPlugin._CompassType.Value == RustyCompassPlugin.CompassType.Circle))); } } } public static class MinimapPatches { [HarmonyPatch(typeof(Minimap), "Awake")] [<a99f1a42-905e-4247-90f1-1bf75fa7d6bb>Nullable(0)] [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] public static class MinimapAwakePatch { public static readonly Dictionary<ZDO, string> TempTames = new Dictionary<ZDO, string>(); public static readonly List<PinData> TempTamePins = new List<PinData>(); } [HarmonyPatch(typeof(Minimap), "OnDestroy")] private static class MinimapOnDestroyPatch { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] private static void Postfix(Tameable __instance) { MinimapAwakePatch.TempTames.Clear(); MinimapAwakePatch.TempTamePins.Clear(); } } [HarmonyPatch(typeof(Minimap), "UpdatePlayerPins")] private static class MinimapUpdatePatches { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] private static void Postfix(Minimap __instance) { //IL_0027: 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) //IL_00d6: 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_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Expected O, but got Unknown //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Expected O, but got Unknown if (!Object.op_Implicit((Object)(object)__instance) || (Object)(object)Player.m_localPlayer == (Object)null) { return; } SpriteData val = __instance.m_icons[3]; foreach (PinData tempTamePin in MinimapAwakePatch.TempTamePins) { __instance.RemovePin(tempTamePin); } MinimapAwakePatch.TempTamePins.Clear(); if (MinimapAwakePatch.TempTames.Count == 0 || RustyCompassPlugin._TameTrackEnabled.Value != RustyCompassPlugin.Toggle.On) { return; } foreach (KeyValuePair<ZDO, string> tempTame in MinimapAwakePatch.TempTames) { if (tempTame.Key.IsValid()) { PinData val2 = new PinData { m_type = (PinType)10, m_pos = tempTame.Key.GetPosition(), m_icon = val.m_icon, m_save = false, m_checked = false, m_name = tempTame.Value, m_ownerID = 0L }; val2.m_NamePinData = new PinNameData(val2); __instance.CreateMapNamePin(val2, __instance.m_pinNameRootSmall); MinimapAwakePatch.TempTamePins.Add(val2); } } foreach (PinData tempTamePin2 in MinimapAwakePatch.TempTamePins) { __instance.m_pins.Add(tempTamePin2); } } } } public static class TamePatches { [HarmonyPatch(typeof(Tameable), "Update")] private static class TameUpdatePatch { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] private static void Postfix(Tameable __instance) { if (!Object.op_Implicit((Object)(object)__instance) || !Object.op_Implicit((Object)(object)Player.m_localPlayer)) { return; } try { ZNetView val = default(ZNetView); ((Component)__instance).TryGetComponent<ZNetView>(ref val); if (!Object.op_Implicit((Object)(object)val)) { return; } ZDO zDO = val.GetZDO(); if (!zDO.IsValid()) { return; } string hoverName = __instance.GetHoverName(); if (hoverName == null || !Object.op_Implicit((Object)(object)__instance.m_monsterAI)) { return; } GameObject followTarget = __instance.m_monsterAI.GetFollowTarget(); if ((Object)(object)followTarget != (Object)null && ((Character)followTarget.GetComponent<Player>()).GetHoverName() == ((Character)Player.m_localPlayer).GetHoverName()) { if (MinimapPatches.MinimapAwakePatch.TempTames.ContainsKey(zDO)) { return; } MinimapPatches.MinimapAwakePatch.TempTames.Add(zDO, hoverName); } if (__instance.HaveSaddle() && ((Behaviour)__instance.m_saddle).isActiveAndEnabled && !MinimapPatches.MinimapAwakePatch.TempTames.ContainsKey(zDO)) { MinimapPatches.MinimapAwakePatch.TempTames.Add(zDO, hoverName); } } catch (NullReferenceException) { } } } [HarmonyPatch(typeof(Tameable), "Awake")] private static class TameAwakePatch { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] private static void Postfix(Tameable __instance) { if (!Object.op_Implicit((Object)(object)__instance) || !Object.op_Implicit((Object)(object)Player.m_localPlayer)) { return; } ZNetView val = default(ZNetView); ((Component)__instance).TryGetComponent<ZNetView>(ref val); if (!Object.op_Implicit((Object)(object)val)) { return; } ZDO zDO = val.GetZDO(); if (!zDO.IsValid()) { return; } string hoverName = __instance.GetHoverName(); if (hoverName == null || !Object.op_Implicit((Object)(object)__instance.m_monsterAI)) { return; } GameObject followTarget = __instance.m_monsterAI.GetFollowTarget(); if ((Object)(object)followTarget != (Object)null && ((Character)followTarget.GetComponent<Player>()).GetHoverName() == ((Character)Player.m_localPlayer).GetHoverName()) { if (MinimapPatches.MinimapAwakePatch.TempTames.ContainsKey(zDO)) { return; } MinimapPatches.MinimapAwakePatch.TempTames.Add(zDO, hoverName); } if (__instance.HaveSaddle() && ((Behaviour)__instance.m_saddle).isActiveAndEnabled && !MinimapPatches.MinimapAwakePatch.TempTames.ContainsKey(zDO)) { MinimapPatches.MinimapAwakePatch.TempTames.Add(zDO, hoverName); } } } [HarmonyPatch(typeof(Tameable), "UnSummon")] private static class TameUnsummonPatch { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] private static void Postfix(Tameable __instance) { MinimapPatches.MinimapAwakePatch.TempTames.Clear(); } } [HarmonyPatch(typeof(Tameable), "RPC_SetSaddle")] private static class TameSetSaddlePatch { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] private static void Postfix(Tameable __instance) { if (!Object.op_Implicit((Object)(object)__instance)) { return; } ZNetView val = default(ZNetView); ((Component)__instance).TryGetComponent<ZNetView>(ref val); if (Object.op_Implicit((Object)(object)val)) { ZDO zDO = val.GetZDO(); string hoverName = __instance.GetHoverName(); if (((Behaviour)__instance.m_saddle).isActiveAndEnabled) { MinimapPatches.MinimapAwakePatch.TempTames.Add(zDO, hoverName); } else { MinimapPatches.MinimapAwakePatch.TempTames.Remove(zDO); } } } } [HarmonyPatch(typeof(Tameable), "RPC_Command")] private static class TameCommandPatch { [<23dea103-1d4b-4c3e-b366-73cab9074174>NullableContext(1)] private static void Postfix(Tameable __instance) { if (!Objec