Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of LicensePlate v1.3.0
LicensePlate.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using ComfyLib; using HarmonyLib; using TMPro; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("LicensePlate")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("LicensePlate")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("89477657-8729-4e5e-995e-4d58fa20b25b")] [assembly: AssemblyFileVersion("1.3.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.3.0.0")] [module: UnverifiableCode] namespace ComfyLib { public static class ConfigFileExtensions { internal sealed class ConfigurationManagerAttributes { public Action<ConfigEntryBase> CustomDrawer; public bool? Browsable; public bool? HideDefaultButton; public int? Order; } private static readonly Dictionary<string, int> _sectionToSettingOrder = new Dictionary<string, int>(); private static int GetSettingOrder(string section) { if (!_sectionToSettingOrder.TryGetValue(section, out var value)) { value = 0; } _sectionToSettingOrder[section] = value - 1; return value; } public static ConfigEntry<T> BindInOrder<T>(this ConfigFile config, string section, string key, T defaultValue, string description, AcceptableValueBase acceptableValues) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown return config.Bind<T>(section, key, defaultValue, new ConfigDescription(description, acceptableValues, new object[1] { new ConfigurationManagerAttributes { Order = GetSettingOrder(section) } })); } public static ConfigEntry<T> BindInOrder<T>(this ConfigFile config, string section, string key, T defaultValue, string description, Action<ConfigEntryBase> customDrawer = null, bool browsable = true, bool hideDefaultButton = false, bool hideSettingName = false) { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Expected O, but got Unknown return config.Bind<T>(section, key, defaultValue, new ConfigDescription(description, (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Browsable = browsable, CustomDrawer = customDrawer, HideDefaultButton = hideDefaultButton, Order = GetSettingOrder(section) } })); } public static void OnSettingChanged<T>(this ConfigEntry<T> configEntry, Action settingChangedHandler) { configEntry.SettingChanged += delegate { settingChangedHandler(); }; } public static void OnSettingChanged<T>(this ConfigEntry<T> configEntry, Action<T> settingChangedHandler) { configEntry.SettingChanged += delegate(object _, EventArgs eventArgs) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) settingChangedHandler((T)((SettingChangedEventArgs)eventArgs).ChangedSetting.BoxedValue); }; } public static void OnSettingChanged<T>(this ConfigEntry<T> configEntry, Action<ConfigEntry<T>> settingChangedHandler) { configEntry.SettingChanged += delegate(object _, EventArgs eventArgs) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) settingChangedHandler((ConfigEntry<T>)((SettingChangedEventArgs)eventArgs).ChangedSetting.BoxedValue); }; } } public static class ObjectExtensions { public static T Ref<T>(this T o) where T : Object { if (!Object.op_Implicit((Object)(object)o)) { return default(T); } return o; } } } namespace LicensePlate { public sealed class ShipName : MonoBehaviour, TextReceiver { private ZNetView _netView; private NpcText _npcText; private ShipControlls _shipControlls; private Ship _ship; private string _shipName = string.Empty; private string _shipNameCache = string.Empty; private void Awake() { _shipControlls = ((Component)this).GetComponent<ShipControlls>(); _ship = _shipControlls.Ref<ShipControlls>()?.m_ship; _netView = _shipControlls.Ref<ShipControlls>()?.m_nview; if (Object.op_Implicit((Object)(object)_shipControlls) && Object.op_Implicit((Object)(object)_ship) && Object.op_Implicit((Object)(object)_netView) && _netView.IsValid()) { ((MonoBehaviour)this).InvokeRepeating("UpdateShipName", 0f, 1f); } } private void UpdateShipName() { //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)_netView) || !_netView.IsValid() || !Object.op_Implicit((Object)(object)_ship) || !PluginConfig.IsModEnabled.Value || !PluginConfig.ShowShipNames.Value) { ClearNpcText(); ((MonoBehaviour)this).CancelInvoke("UpdateShipName"); return; } if (!Object.op_Implicit((Object)(object)Player.m_localPlayer)) { ClearNpcText(); return; } _shipName = _netView.m_zdo.GetString(LicensePlate.ShipLicensePlateHashCode, string.Empty); float num = Vector3.Distance(((Component)Player.m_localPlayer).transform.position, ((Component)this).gameObject.transform.position); if (Object.op_Implicit((Object)(object)_npcText?.m_gui) && _shipName.Length > 0 && num > PluginConfig.ShipNameMinimumDistance.Value) { UpdateNpcTextValue(_shipName); return; } ClearNpcText(); if (_shipName.Length > 0 && Object.op_Implicit((Object)(object)Player.m_localPlayer) && num > PluginConfig.ShipNameMinimumDistance.Value && num < PluginConfig.ShipNameCutoffDistance.Value) { SetNpcText(_shipName); } } private void ClearNpcText() { if (_npcText != null) { Chat.m_instance.ClearNpcText(_npcText); _npcText = null; } } private void SetNpcText(string shipName) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) Chat.m_instance.SetNpcText(((Component)_ship).gameObject, PluginConfig.ShipNameDisplayOffset.Value, PluginConfig.ShipNameCutoffDistance.Value, PluginConfig.ShipNameTimeToLive.Value, string.Empty, GetSanitizedShipName(shipName), false); _shipNameCache = shipName; _npcText = Chat.m_instance.FindNpcText(((Component)_ship).gameObject); if (Object.op_Implicit((Object)(object)_npcText?.m_gui)) { CustomizeNpcText(); } } public void UpdateNpcTextValue(string shipName) { if (!(shipName == _shipNameCache)) { _shipNameCache = shipName; ((TMP_Text)_npcText.m_textField).text = GetSanitizedShipName(shipName); } } private string GetSanitizedShipName(string shipName) { if (shipName.Length > 64) { shipName = shipName.Substring(0, 64); } if (PluginConfig.ShipNameStripHtmlTags.Value) { shipName = LicensePlate.HtmlTagsRegex.Replace(shipName, string.Empty); } return shipName; } private void CustomizeNpcText() { ((TMP_Text)_npcText.m_textField).enableAutoSizing = false; ((TMP_Text)_npcText.m_textField).textWrappingMode = (TextWrappingModes)0; ((TMP_Text)_npcText.m_textField).overflowMode = (TextOverflowModes)0; ((TMP_Text)_npcText.m_textField).fontSize = PluginConfig.ShipNameFontSize.Value; ((TMP_Text)_npcText.m_textField).fontSizeMax = 64f; CustomizeNpcTextBackground(((Component)_npcText.m_gui.transform.Find("Image")).gameObject); } private void CustomizeNpcTextBackground(GameObject background) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: 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) background.GetComponent<RectTransform>().SetSizeWithCurrentAnchors((Axis)1, 60f); Image component = background.GetComponent<Image>(); Color color = ((Graphic)component).color; color.a = 0.5f; ((Graphic)component).color = color; } public string GetText() { if (!Object.op_Implicit((Object)(object)_netView) || !_netView.IsValid()) { return string.Empty; } return _netView.m_zdo.GetString(LicensePlate.ShipLicensePlateHashCode, string.Empty); } public void SetText(string text) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)_netView) && _netView.IsValid() && Object.op_Implicit((Object)(object)Player.m_localPlayer)) { LicensePlate.LogInfo($"Setting Ship ({_netView.m_zdo.m_uid}) name to: {text}"); _netView.m_zdo.Set(LicensePlate.ShipLicensePlateHashCode, text); _netView.m_zdo.Set(LicensePlate.LicensePlateLastSetByHashCode, Player.m_localPlayer.GetPlayerID()); UpdateShipName(); } } } public sealed class VagonName : MonoBehaviour, TextReceiver { private ZNetView _netView; private NpcText _npcText; private Vagon _vagon; private string _vagonName = string.Empty; private string _vagonNameCache = string.Empty; private void Awake() { _vagon = ((Component)this).GetComponent<Vagon>(); _netView = ((Component)this).GetComponent<ZNetView>(); if (Object.op_Implicit((Object)(object)_vagon) && Object.op_Implicit((Object)(object)_netView) && _netView.IsValid()) { ((MonoBehaviour)this).InvokeRepeating("UpdateVagonName", 0f, 1f); } } private void UpdateVagonName() { //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)_netView) || !_netView.IsValid() || !PluginConfig.IsModEnabled.Value || !PluginConfig.ShowCartNames.Value) { ClearNpcText(); ((MonoBehaviour)this).CancelInvoke("UpdateVagonName"); return; } if (!Object.op_Implicit((Object)(object)Player.m_localPlayer)) { ClearNpcText(); return; } _vagonName = _netView.m_zdo.GetString(LicensePlate.VagonLicensePlateHashCode, string.Empty); float num = Vector3.Distance(((Component)Player.m_localPlayer).transform.position + _vagon.m_attachOffset, _vagon.m_attachPoint.position); if (Object.op_Implicit((Object)(object)_npcText?.m_gui) && _vagonName.Length > 0 && num > PluginConfig.CartNameMinimumDistance.Value) { UpdateNpcTextValue(_vagonName); return; } ClearNpcText(); if (_vagonName.Length > 0 && Object.op_Implicit((Object)(object)Player.m_localPlayer) && num > PluginConfig.CartNameMinimumDistance.Value && num < PluginConfig.CartNameCutoffDistance.Value) { SetNpcText(_vagonName); } } private void ClearNpcText() { if (_npcText != null) { Chat.m_instance.ClearNpcText(_npcText); _npcText = null; } _vagonNameCache = string.Empty; } private void SetNpcText(string vagonName) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) Chat.m_instance.SetNpcText(((Component)this).gameObject, PluginConfig.CartNameDisplayOffset.Value, PluginConfig.CartNameCutoffDistance.Value, PluginConfig.CartNameTimeToLive.Value, string.Empty, GetSanitizedVagonName(vagonName), false); _vagonNameCache = vagonName; _npcText = Chat.m_instance.FindNpcText(((Component)this).gameObject); if (Object.op_Implicit((Object)(object)_npcText?.m_gui)) { CustomizeNpcText(); } } private void UpdateNpcTextValue(string vagonName) { if (!(vagonName == _vagonNameCache)) { _vagonNameCache = vagonName; ((TMP_Text)_npcText.m_textField).text = GetSanitizedVagonName(vagonName); } } private string GetSanitizedVagonName(string vagonName) { if (vagonName.Length > 64) { vagonName = vagonName.Substring(0, 64); } if (PluginConfig.CartNameStripHtmlTags.Value) { vagonName = LicensePlate.HtmlTagsRegex.Replace(vagonName, string.Empty); } return vagonName; } private void CustomizeNpcText() { ((TMP_Text)_npcText.m_textField).enableAutoSizing = false; ((TMP_Text)_npcText.m_textField).textWrappingMode = (TextWrappingModes)0; ((TMP_Text)_npcText.m_textField).overflowMode = (TextOverflowModes)0; ((TMP_Text)_npcText.m_textField).fontSize = PluginConfig.CartNameFontSize.Value; ((TMP_Text)_npcText.m_textField).fontSizeMax = 64f; CustomizeNpcTextBackground(((Component)_npcText.m_gui.transform.Find("Image")).gameObject); } private void CustomizeNpcTextBackground(GameObject background) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: 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) background.GetComponent<RectTransform>().SetSizeWithCurrentAnchors((Axis)1, 60f); Image component = background.GetComponent<Image>(); Color color = ((Graphic)component).color; color.a = 0.5f; ((Graphic)component).color = color; } public string GetText() { if (!Object.op_Implicit((Object)(object)_netView) || !_netView.IsValid()) { return string.Empty; } return _netView.m_zdo.GetString(LicensePlate.VagonLicensePlateHashCode, string.Empty); } public void SetText(string text) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)_netView) && _netView.IsValid() && Object.op_Implicit((Object)(object)Player.m_localPlayer)) { LicensePlate.LogInfo($"Setting Vagon ({_netView.m_zdo.m_uid}) name to: {text}"); _netView.m_zdo.Set(LicensePlate.VagonLicensePlateHashCode, text); _netView.m_zdo.Set(LicensePlate.LicensePlateLastSetByHashCode, Player.m_localPlayer.GetPlayerID()); UpdateVagonName(); } } } [BepInPlugin("redseiko.valheim.licenseplate", "LicensePlate", "1.3.0")] public sealed class LicensePlate : BaseUnityPlugin { public const string PluginGuid = "redseiko.valheim.licenseplate"; public const string PluginName = "LicensePlate"; public const string PluginVersion = "1.3.0"; public static readonly int ShipLicensePlateHashCode = StringExtensionMethods.GetStableHashCode("ShipLicensePlate"); public static readonly int VagonLicensePlateHashCode = StringExtensionMethods.GetStableHashCode("VagonLicensePlate"); public static readonly int LicensePlateLastSetByHashCode = StringExtensionMethods.GetStableHashCode("LicensePlateLastSetBy"); public static readonly Regex HtmlTagsRegex = new Regex("<.*?>"); private static ManualLogSource _logger; private Harmony _harmony; private void Awake() { _logger = ((BaseUnityPlugin)this).Logger; PluginConfig.BindConfig(((BaseUnityPlugin)this).Config); _harmony = Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "redseiko.valheim.licenseplate"); } private void OnDestroy() { Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } public static void LogInfo(object obj) { _logger.LogInfo((object)$"[{DateTime.Now.ToString(DateTimeFormatInfo.InvariantInfo)}] {obj}"); } public static void LogError(object obj) { _logger.LogError((object)$"[{DateTime.Now.ToString(DateTimeFormatInfo.InvariantInfo)}] {obj}"); } } [HarmonyPatch(typeof(ShipControlls))] internal static class ShipControllsPatch { private static readonly Lazy<string> _renameText = new Lazy<string>(() => Localization.m_instance.Localize("\n[<color=yellow><b>$KEY_AltPlace + $KEY_Use</b></color>] $hud_rename")); [HarmonyPostfix] [HarmonyPatch("Awake")] private static void AwakePostfix(ref ShipControlls __instance) { if (PluginConfig.IsModEnabled.Value && PluginConfig.ShowShipNames.Value) { ((Component)__instance).gameObject.AddComponent<ShipName>(); } } [HarmonyTranspiler] [HarmonyPatch("Interact")] private static IEnumerable<CodeInstruction> InteractTranspiler(IEnumerable<CodeInstruction> instructions) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Expected O, but got Unknown //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Expected O, but got Unknown //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Expected O, but got Unknown //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Expected O, but got Unknown return new CodeMatcher(instructions, (ILGenerator)null).MatchForward(false, (CodeMatch[])(object)new CodeMatch[5] { new CodeMatch((OpCode?)OpCodes.Ldloc_0, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Callvirt, (object)AccessTools.Method(typeof(Character), "GetStandingOnShip", (Type[])null, (Type[])null), (string)null), new CodeMatch((OpCode?)OpCodes.Ldarg_0, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldfld, (object)AccessTools.Field(typeof(ShipControlls), "m_ship"), (string)null), new CodeMatch((OpCode?)OpCodes.Call, (object)AccessTools.Method(typeof(Object), "op_Inequality", (Type[])null, (Type[])null), (string)null) }).Advance(5).InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[3] { new CodeInstruction(OpCodes.Ldarg_0, (object)null), new CodeInstruction(OpCodes.Ldarg_3, (object)null), Transpilers.EmitDelegate<Func<bool, ShipControlls, bool, bool>>((Func<bool, ShipControlls, bool, bool>)StandingOnShipInequalityDelegate) }) .InstructionEnumeration(); } private static bool StandingOnShipInequalityDelegate(bool isNotEqual, ShipControlls shipControls, bool alt) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) ShipName shipName = default(ShipName); if (!isNotEqual && alt && PluginConfig.IsModEnabled.Value && PluginConfig.ShowShipNames.Value && PrivateArea.CheckAccess(((Component)shipControls).transform.position, 0f, true, false) && Object.op_Implicit((Object)(object)shipControls.m_nview) && shipControls.m_nview.IsValid() && shipControls.m_nview.IsOwner() && ((Component)shipControls).TryGetComponent<ShipName>(ref shipName)) { TextInput.m_instance.RequestText((TextReceiver)(object)shipName, "$hud_rename", 64); return true; } return isNotEqual; } [HarmonyPostfix] [HarmonyPatch("GetHoverText")] private static void GetHoverTextPostfix(ref ShipControlls __instance, ref string __result) { if (PluginConfig.IsModEnabled.Value && PluginConfig.ShowShipNames.Value && Object.op_Implicit((Object)(object)__instance.m_nview) && __instance.m_nview.IsValid() && Object.op_Implicit((Object)(object)Player.m_localPlayer) && __instance.InUseDistance((Humanoid)(object)Player.m_localPlayer)) { __result += _renameText.Value; } } } [HarmonyPatch(typeof(Vagon))] internal static class VagonPatch { private static readonly Lazy<string> _renameText = new Lazy<string>(() => Localization.m_instance.Localize("\n[<color=yellow><b>$KEY_AltPlace + $KEY_Use</b></color>] $hud_rename")); [HarmonyPostfix] [HarmonyPatch("Awake")] private static void AwakePostfix(ref Vagon __instance) { if (PluginConfig.IsModEnabled.Value && PluginConfig.ShowCartNames.Value) { ((Component)__instance).gameObject.AddComponent<VagonName>(); } } [HarmonyPrefix] [HarmonyPatch("Interact")] private static bool InteractPrefix(ref Vagon __instance, ref bool __result, bool hold, bool alt) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) VagonName vagonName = default(VagonName); if (alt && PluginConfig.IsModEnabled.Value && PluginConfig.ShowCartNames.Value && PrivateArea.CheckAccess(((Component)__instance).transform.position, 0f, true, false) && Object.op_Implicit((Object)(object)__instance.m_nview) && __instance.m_nview.IsValid() && __instance.m_nview.IsOwner() && ((Component)__instance).TryGetComponent<VagonName>(ref vagonName)) { TextInput.m_instance.RequestText((TextReceiver)(object)vagonName, "$hud_rename", 64); __result = true; return false; } return true; } [HarmonyPostfix] [HarmonyPatch("GetHoverText")] private static void GetHoverTextPostfix(ref Vagon __instance, ref string __result) { if (PluginConfig.IsModEnabled.Value && PluginConfig.ShowCartNames.Value && Object.op_Implicit((Object)(object)__instance.m_nview) && __instance.m_nview.IsValid()) { __result += _renameText.Value; } } } public static class PluginConfig { public static ConfigEntry<bool> IsModEnabled { get; private set; } public static ConfigEntry<bool> ShowShipNames { get; private set; } public static ConfigEntry<float> ShipNameMinimumDistance { get; private set; } public static ConfigEntry<float> ShipNameCutoffDistance { get; private set; } public static ConfigEntry<Vector3> ShipNameDisplayOffset { get; private set; } public static ConfigEntry<float> ShipNameTimeToLive { get; private set; } public static ConfigEntry<int> ShipNameFontSize { get; private set; } public static ConfigEntry<bool> ShipNameStripHtmlTags { get; private set; } public static ConfigEntry<bool> ShowCartNames { get; private set; } public static ConfigEntry<float> CartNameMinimumDistance { get; private set; } public static ConfigEntry<float> CartNameCutoffDistance { get; private set; } public static ConfigEntry<Vector3> CartNameDisplayOffset { get; private set; } public static ConfigEntry<float> CartNameTimeToLive { get; private set; } public static ConfigEntry<int> CartNameFontSize { get; private set; } public static ConfigEntry<bool> CartNameStripHtmlTags { get; private set; } public static void BindConfig(ConfigFile config) { IsModEnabled = config.BindInOrder("_Global", "isModEnabled", defaultValue: true, "Globally enable or disable this mod."); BindShipNameConfig(config); BindCartNameConfig(config); } private static void BindShipNameConfig(ConfigFile config) { //IL_00b2: Unknown result type (might be due to invalid IL or missing references) ShowShipNames = config.BindInOrder("ShipName", "showShipNames", defaultValue: true, "Show custom names over ships."); ShipNameMinimumDistance = config.BindInOrder("ShipName", "shipNameMinimumDistance", 0f, "Minimum distance for custom ship names to appear/disappear. Must be less than cutoff distance.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 20f)); ShipNameMinimumDistance.OnSettingChanged<float>(ValidateShipNameMinimumDistance); ShipNameCutoffDistance = config.BindInOrder("ShipName", "shipNameCutoffDistance", 25f, "Cutoff distance for custom ship names to appear/disappear.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 40f)); ShipNameCutoffDistance.OnSettingChanged<float>(ValidateShipNameMinimumDistance); ShipNameDisplayOffset = config.BindInOrder<Vector3>("ShipName", "shipNameDisplayOffset", Vector3.up, "Display offset for custom ship names."); ShipNameTimeToLive = config.BindInOrder("ShipName", "shipNameTimeToLive", 60f, "Time (in seconds) for a custom ship name to be displayed.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 300f)); ShipNameFontSize = config.BindInOrder("ShipName", "shipNameFontSize", 20, "Font size for custom ship names.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(2, 64)); ShipNameStripHtmlTags = config.BindInOrder("ShipName", "shipNameStripHtmlTags", defaultValue: false, "If true, html tags will be stripped from custom ship names when they are displayed."); static void ValidateShipNameMinimumDistance() { ShipNameMinimumDistance.Value = Mathf.Min(ShipNameMinimumDistance.Value, ShipNameCutoffDistance.Value); } } private static void BindCartNameConfig(ConfigFile config) { //IL_00b2: Unknown result type (might be due to invalid IL or missing references) ShowCartNames = config.BindInOrder("CartName", "showCartNames", defaultValue: true, "Show custom names over carts."); CartNameMinimumDistance = config.BindInOrder("CartName", "cartNameMinimumDistance", 0f, "Minimum distance for custom cart names to appear/disappear. Must be less than cutoff distance.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f)); CartNameMinimumDistance.OnSettingChanged<float>(ValidateCartNameMinimumDistance); CartNameCutoffDistance = config.BindInOrder("CartName", "cartNameCutoffDistance", 10f, "Cutoff distance for custom cart names to appear/disappear.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 25f)); CartNameCutoffDistance.OnSettingChanged<float>(ValidateCartNameMinimumDistance); CartNameDisplayOffset = config.BindInOrder<Vector3>("CartName", "cartNameDisplayOffset", Vector3.up, "Display offset for custom cart names."); CartNameTimeToLive = config.BindInOrder("CartName", "cartNameTimeToLive", 60f, "Time (in seconds) for a custom cart name to be displayed.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 300f)); CartNameFontSize = config.BindInOrder("CartName", "cartNameFontSize", 20, "Font size for custom cart names.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(2, 64)); CartNameStripHtmlTags = config.BindInOrder("CartName", "cartNameStripHtmlTags", defaultValue: false, "If true, html tags will be stripped from custom cart names when they are displayed."); static void ValidateCartNameMinimumDistance() { CartNameMinimumDistance.Value = Mathf.Min(CartNameMinimumDistance.Value, CartNameCutoffDistance.Value); } } } }