using System; using System.Diagnostics; using System.Globalization; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Text.RegularExpressions; using BepInEx; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyCompany("WiresDecimalsBegone")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("WiresDecimalsBegone")] [assembly: AssemblyTitle("WiresDecimalsBegone")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace WiresDecimalsBegone { [HarmonyPatch(typeof(DamageText), "ShowText", new Type[] { typeof(TextType), typeof(Vector3), typeof(float), typeof(bool) })] internal static class FloatNumberPatch { [HarmonyPrefix] [HarmonyPriority(800)] private static void Prefix(ref float dmg) { dmg = WholeNumbers.Round(dmg); } } [HarmonyPatch(typeof(DamageText), "ShowText", new Type[] { typeof(TextType), typeof(Vector3), typeof(string), typeof(bool) })] internal static class StringNumberPatch { [HarmonyPrefix] [HarmonyPriority(800)] private static void Prefix(ref string text) { text = WholeNumbers.RoundLabel(text); } } [HarmonyPatch(typeof(DamageText), "AddInworldText")] internal static class IncomingNumberPatch { [HarmonyPrefix] [HarmonyPriority(800)] private static void Prefix(ref string text) { text = WholeNumbers.RoundLabel(text); } } [BepInPlugin("wire.valheim.decimalsbegone", "Wire's Decimals Begone", "0.1.0")] [BepInProcess("valheim.exe")] public sealed class Plugin : BaseUnityPlugin { public const string Guid = "wire.valheim.decimalsbegone"; public const string Name = "Wire's Decimals Begone"; public const string Version = "0.1.0"; private Harmony _harmony; private void Awake() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown _harmony = new Harmony("wire.valheim.decimalsbegone"); _harmony.PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Wire's Decimals Begone 0.1.0 loaded."); } private void OnDestroy() { Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } } internal static class WholeNumbers { private static readonly Regex NumberLabel = new Regex("^(?\\s*)(?[+\\-]?)(?\\d+(?:[\\.,]\\d+)?)(?\\s*)$", RegexOptions.Compiled | RegexOptions.CultureInvariant); internal static float Round(float value) { if (float.IsNaN(value) || float.IsInfinity(value)) { return value; } return (float)Math.Round(value, 0, MidpointRounding.AwayFromZero); } internal static string RoundLabel(string text) { if (string.IsNullOrEmpty(text)) { return text; } Match match = NumberLabel.Match(text); if (!match.Success) { return text; } string value = match.Groups["value"].Value; if (value.IndexOf('.') < 0 && value.IndexOf(',') < 0) { return text; } if (!double.TryParse(value.Replace(',', '.'), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var result) || double.IsInfinity(result) || double.IsNaN(result)) { return text; } double num = Math.Round(result, 0, MidpointRounding.AwayFromZero); return match.Groups["leading"].Value + match.Groups["sign"].Value + num.ToString("0", CultureInfo.InvariantCulture) + match.Groups["trailing"].Value; } } }