Decompiled source of DiscountFix v1.0.5

plugins/yazirushi-DiscountFix/DiscountFix.dll

Decompiled a month ago
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.4")]
public class DiscountFix : BaseUnityPlugin
{
	private readonly Harmony harmony = new Harmony("yazirushi.Discountfix");

	internal static ManualLogSource mls;

	public static ConfigEntry<int> MaxDiscountRate;

	public static ConfigEntry<int> DiscountPerPlayer;

	public static ConfigEntry<bool> 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<int>("Settings", "MaxDiscountRate(%)", 90, new ConfigDescription("割引の上限(%)", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>()));
		DiscountPerPlayer = ((BaseUnityPlugin)this).Config.Bind<int>("Settings", "DiscountPerPlayer(%)", 10, "一人当たりの割引率(%)");
		EnableLogging = ((BaseUnityPlugin)this).Config.Bind<bool>("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;
	}
}