using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("DiscountFix")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("DiscountFix")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("2695e571-6b44-43ad-9520-ff66c3505a41")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace DiscountFix; [BepInPlugin("yazirushi.Discountfix", "Discount Fix", "1.0.6")] public class DiscountFix : BaseUnityPlugin { private readonly Harmony harmony = new Harmony("yazirushi.Discountfix"); internal static ManualLogSource mls; public static ConfigEntry MaxDiscountRate; public static ConfigEntry DiscountPerPlayer; public static ConfigEntry EnableLogging; private void Awake() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown MaxDiscountRate = ((BaseUnityPlugin)this).Config.Bind("Settings", "MaxDiscountRate(%)", 90, new ConfigDescription("割引の上限(%)", (AcceptableValueBase)(object)new AcceptableValueRange(0, 100), Array.Empty())); DiscountPerPlayer = ((BaseUnityPlugin)this).Config.Bind("Settings", "DiscountPerPlayer(%)", 10, "一人当たりの割引率(%)"); EnableLogging = ((BaseUnityPlugin)this).Config.Bind("ConsoleLog", "EnableLogging", false, "ログの有効化"); mls = ((BaseUnityPlugin)this).Logger; mls.LogInfo((object)"\n\n ▓▓▅▄ ▄ \n ▀█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ \n █ █▀▀▅ ▀█▀▀ ▅▀▀▅▒ ▅▀▀▅ ▅▀▀▅ █▒ █▒ █▄ █▒ ▀█▀▀▒ █▀▀▀ ▀█▀▀ █▒▄█▒ █ \n █ █▒ █▒ █▒ ▀▅▅▒ █▒ █▒ █▒ █▒ █▒ █▀▅█▒ █▒ █▀▀▒ █▒ █▀▒ █ \n █ █▄▅▀▒ ▄█▄▄ ▅▄▄█▒ ▀▅▅▀▒ ▀▅▅▀▒ ▀▅▅▀▒ █▒▀█▒ █▒ █▒ ▄█▄▄ █▒▀▅▒ █ \n ▄█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ \n █ \n ▀▅▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ \n ● ● \n"); mls.LogInfo((object)"DiscountFixが起動しました!"); mls.LogInfo((object)$"DiscountFix:Config:MaxDiscountRate = {MaxDiscountRate.Value}%"); mls.LogInfo((object)$"DiscountFix:Config:DiscountPerPlayer = {DiscountPerPlayer.Value}%"); mls.LogInfo((object)$"DiscountFix:Config:EnableLogging = {EnableLogging.Value}"); harmony.PatchAll(); } } [HarmonyPatch(typeof(ShopManager), "UpgradeValueGet")] public class UpgradeValuePatch { private static readonly FieldInfo fieldUpgrade = AccessTools.Field(typeof(ShopManager), "upgradeValueIncrease"); private static bool Prefix(ref float __result, float _value, Item item, ShopManager __instance) { int count = GameDirector.instance.PlayerList.Count; float num = (float)fieldUpgrade.GetValue(__instance); int itemsUpgradesPurchased = StatsManager.instance.GetItemsUpgradesPurchased(((Object)item).name); count = Mathf.Max(count, 1); float num2 = (float)DiscountFix.MaxDiscountRate.Value / 100f; float num3 = (float)DiscountFix.DiscountPerPlayer.Value / 100f; float num4 = num3 * (float)(count - 1); num4 = Mathf.Min(num4, num2); float num5 = _value * (1f - num4); float num6 = num * (float)itemsUpgradesPurchased; float num7 = num5 * num6; float num8 = num5 + num7; __result = Mathf.Ceil(num8); __result = Mathf.Max(__result, 1f); if (DiscountFix.EnableLogging.Value) { DiscountFix.mls.LogInfo((object)("\nItem: " + (item?.itemName ?? "null") + " \n" + $"Original: {_value} \n" + $"Discounted: {num5} \n" + $"Increase: {num7} \n" + $"Final: {__result} \n" + $"Players: {count} \n" + $"Purchases: {itemsUpgradesPurchased} \n" + $"DiscountRate: {num4 * 100f:F1}% \n" + $"IncreaseRate: {num6:F2} \n")); } return false; } } [HarmonyPatch(typeof(ShopManager), "HealthPackValueGet")] public class HealthPackValuePatch { private static readonly FieldInfo fieldHealthPack = AccessTools.Field(typeof(ShopManager), "healthPackValueIncrease"); private static bool Prefix(ref float __result, float _value, ShopManager __instance) { int count = GameDirector.instance.PlayerList.Count; float num = (float)fieldHealthPack.GetValue(__instance); int num2 = Mathf.Min(RunManager.instance.levelsCompleted, 15); count = Mathf.Max(count, 1); float num3 = (float)DiscountFix.MaxDiscountRate.Value / 100f; float num4 = (float)DiscountFix.DiscountPerPlayer.Value / 100f; float num5 = num4 * (float)(count - 1); num5 = Mathf.Min(num5, num3); float num6 = _value * (1f - num5); float num7 = num * (float)num2; float num8 = num6 * num7; float num9 = num6 + num8; __result = Mathf.Ceil(num9); __result = Mathf.Max(__result, 1f); if (DiscountFix.EnableLogging.Value) { DiscountFix.mls.LogInfo((object)("\nItem: HealthPack \n" + $"Original: {_value} \n" + $"Discounted: {num6} \n" + $"Increase: {num8} \n" + $"Final: {__result} \n" + $"Players: {count} \n" + $"Levels: {num2} \n" + $"DiscountRate: {num5 * 100f:F1}% \n" + $"IncreaseRate: {num7:F2} \n")); } return false; } }