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 ChocoQuota v1.0.9
ChocoQuota.dll
Decompiled 2 years agousing 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 ChocoQuota.Patches; using HarmonyLib; using TMPro; using Unity.Netcode; 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("ChocoQuota")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ChocoQuota")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("d38d2064-347b-417a-a052-2ecb101156a1")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace ChocoQuota { [BepInPlugin("Jade.ChocoQuota", "ChocoQuota", "1.0.9")] public class ChocoQuotaBase : BaseUnityPlugin { private const string modGUID = "Jade.ChocoQuota"; private const string modName = "ChocoQuota"; private const string modVersion = "1.0.9"; private readonly Harmony harmony = new Harmony("Jade.ChocoQuota"); public static ChocoQuotaBase Instance; internal ManualLogSource als; private ConfigEntry<int> config_startingCredits; private ConfigEntry<int> config_startingQuota; private ConfigEntry<int> config_baseIncrease; private ConfigEntry<float> config_sharpness; private ConfigEntry<int> config_levelOut; private ConfigEntry<int> config_flatIncrease; private ConfigEntry<int> config_deadline; private ConfigEntry<bool> config_quotaEnabled; private ConfigEntry<float> config_rollover; private ConfigEntry<int> config_cap; public static int startingCredits; public static int startingQuota; public static int baseIncrease; public static float sharpness; public static int levelOut; public static int flatIncrease; public static int deadline; public static bool quotaEnabled; public static float rollover; public static int cap; public int savedRollover; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } als = Logger.CreateLogSource("Jade.ChocoQuota"); als.LogInfo((object)":"); als.LogInfo((object)"ChocoQuota has loaded!"); als.LogInfo((object)":"); config_startingCredits = ((BaseUnityPlugin)this).Config.Bind<int>("0. Basic", "StartingCredits", 120, "The amount of credits you start with."); config_deadline = ((BaseUnityPlugin)this).Config.Bind<int>("0. Basic", "DaysToDeadline", 3, "How many days to fulfill quota."); config_startingQuota = ((BaseUnityPlugin)this).Config.Bind<int>("0. Basic", "StartingQuota", 130, "The value of the first quota."); config_baseIncrease = ((BaseUnityPlugin)this).Config.Bind<int>("0. Basic", "BaseIncrease", 120, "The flat rate at which the quota increases upon success."); config_sharpness = ((BaseUnityPlugin)this).Config.Bind<float>("0. Basic", "CurveSharpness", 3f, "The sharpness of the curve for quota increase.\n(set to 0.0 to disable exponential growth)"); config_levelOut = ((BaseUnityPlugin)this).Config.Bind<int>("1. Added", "FinalLevel", 1400, "After the quota reaches this value, the base increase and curve sharpness are ignored in favor of the final increase.\n(set to -1 to disable this feature)"); config_flatIncrease = ((BaseUnityPlugin)this).Config.Bind<int>("1. Added", "FinalIncrease", 202, "After final level is passed, the quota will begin increasing at this flat rate."); config_quotaEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("2. Optional Features", "DisableQuota", false, "Whether to disable the quota system.\n(allows for limitless exploration)"); config_rollover = ((BaseUnityPlugin)this).Config.Bind<float>("2. Optional Features", "RolloverAmount", 0f, "When you overshoot the quota, what portion of the extra money should roll over to the next one?\n(Number between 0.0-1.0)\n(Set to 1.0 to enable a normal rollover)"); config_cap = ((BaseUnityPlugin)this).Config.Bind<int>("2. Optional Features", "Quota Cap", -1, "The quota will not rise past this value. (set to -1 to disable this feature)"); startingCredits = config_startingCredits.Value; startingQuota = config_startingQuota.Value; baseIncrease = config_baseIncrease.Value; sharpness = config_sharpness.Value; levelOut = config_levelOut.Value; flatIncrease = config_flatIncrease.Value; deadline = config_deadline.Value; quotaEnabled = !config_quotaEnabled.Value; rollover = config_rollover.Value; cap = config_cap.Value; harmony.PatchAll(typeof(ChocoQuotaBase)); harmony.PatchAll(typeof(TimeOfDayPatch)); } } } namespace ChocoQuota.Patches { [HarmonyPatch(typeof(TimeOfDay))] internal class TimeOfDayPatch : NetworkBehaviour { [HarmonyPatch("SetNewProfitQuota")] [HarmonyPrefix] private static bool NewQuotaPrepatch(ref int ___timesFulfilledQuota, ref int ___profitQuota, ref float ___timeUntilDeadline, ref int ___quotaFulfilled, ref int ___daysUntilDeadline, ref float ___totalTime) { if (((NetworkBehaviour)TimeOfDay.Instance).IsServer) { ___timesFulfilledQuota++; int num = ___quotaFulfilled - ___profitQuota; if (___profitQuota < ChocoQuotaBase.levelOut || ChocoQuotaBase.levelOut == -1) { ___profitQuota = (int)((double)(ChocoQuotaBase.startingQuota + ChocoQuotaBase.baseIncrease * ___timesFulfilledQuota) + (double)ChocoQuotaBase.sharpness * Math.Pow(___timesFulfilledQuota, 3.0)); } else { ___profitQuota += ChocoQuotaBase.flatIncrease; } if (ChocoQuotaBase.cap != -1 && ___profitQuota > ChocoQuotaBase.cap) { ___profitQuota = ChocoQuotaBase.cap; } ChocoQuotaBase.Instance.savedRollover = num; if (ChocoQuotaBase.quotaEnabled) { ___quotaFulfilled = (int)Math.Max(0f, (float)num * ChocoQuotaBase.rollover); } ___timeUntilDeadline = ___totalTime * 4f; int num2 = num / 5 + 15 * ___daysUntilDeadline; TimeOfDay.Instance.SyncNewProfitQuotaClientRpc(___profitQuota, num2, ___timesFulfilledQuota); } return false; } [HarmonyPatch("SyncNewProfitQuotaClientRpc")] [HarmonyPostfix] private static void SyncQuotaPatch(ref int ___quotaFulfilled, ref int ___profitQuota) { if (!ChocoQuotaBase.quotaEnabled) { StartOfRound.Instance.companyBuyingRate = 1f; } if (ChocoQuotaBase.quotaEnabled) { ___quotaFulfilled = (int)Math.Max(0f, (float)ChocoQuotaBase.Instance.savedRollover * ChocoQuotaBase.rollover); } } [HarmonyPatch("SetBuyingRateForDay")] [HarmonyPostfix] private static void BuyingRatePatch(ref float ___timeUntilDeadline, ref float ___totalTime, ref QuotaSettings ___quotaVariables, ref int ___quotaFulfilled) { if (!ChocoQuotaBase.quotaEnabled) { ___timeUntilDeadline = ___totalTime * (float)___quotaVariables.deadlineDaysAmount; StartOfRound.Instance.companyBuyingRate = 1f; ((TMP_Text)StartOfRound.Instance.deadlineMonitorText).text = "DEADLINE:\nNEVER"; ((TMP_Text)StartOfRound.Instance.profitQuotaMonitorText).text = $"SCRAP SOLD:\n${___quotaFulfilled}"; } } [HarmonyPatch("UpdateProfitQuotaCurrentTime")] [HarmonyPostfix] private static void UpdateQuotaRatePatch(ref float ___timeUntilDeadline, ref float ___totalTime, ref QuotaSettings ___quotaVariables, ref int ___quotaFulfilled) { if (!ChocoQuotaBase.quotaEnabled) { ___timeUntilDeadline = ___totalTime * (float)___quotaVariables.deadlineDaysAmount; StartOfRound.Instance.companyBuyingRate = 1f; ((TMP_Text)StartOfRound.Instance.deadlineMonitorText).text = "DEADLINE:\nNEVER"; ((TMP_Text)StartOfRound.Instance.profitQuotaMonitorText).text = $"SCRAP SOLD:\n${___quotaFulfilled}"; } } [HarmonyPatch("Awake")] [HarmonyPostfix] private static void AwakePatch(ref float ___timeUntilDeadline, ref float ___totalTime, ref QuotaSettings ___quotaVariables, ref int ___quotaFulfilled) { TimeOfDay.Instance.quotaVariables.startingQuota = ChocoQuotaBase.startingQuota; TimeOfDay.Instance.quotaVariables.startingCredits = ChocoQuotaBase.startingCredits; TimeOfDay.Instance.quotaVariables.deadlineDaysAmount = ChocoQuotaBase.deadline; if (!ChocoQuotaBase.quotaEnabled) { TimeOfDay.Instance.quotaVariables.startingQuota = 999999999; TimeOfDay.Instance.quotaVariables.deadlineDaysAmount = 3; ___timeUntilDeadline = ___totalTime * (float)___quotaVariables.deadlineDaysAmount; StartOfRound.Instance.companyBuyingRate = 1f; ((TMP_Text)StartOfRound.Instance.deadlineMonitorText).text = "DEADLINE:\nNEVER"; ((TMP_Text)StartOfRound.Instance.profitQuotaMonitorText).text = $"SCRAP SOLD:\n${___quotaFulfilled}"; } } } }