Please disclose if any significant portion of your mod was created 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 Server Modifier v0.6.1
plugins/ServerModifier/ServerModifier.dll
Decompiled 2 years agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using LethalConfig; using LethalConfig.ConfigItems; using LethalConfig.ConfigItems.Options; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(/*Could not decode attribute arguments.*/)] [assembly: TargetFramework(".NETCoreApp,Version=v7.0", FrameworkDisplayName = ".NET 7.0")] [assembly: AssemblyCompany("ServerModifier")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("ServerModifier")] [assembly: AssemblyTitle("ServerModifier")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : System.Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(/*Could not decode attribute arguments.*/)] internal sealed class NullableAttribute : System.Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(/*Could not decode attribute arguments.*/)] internal sealed class NullableContextAttribute : System.Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(/*Could not decode attribute arguments.*/)] internal sealed class RefSafetyRulesAttribute : System.Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace ServerModifier { internal enum FunctionType { Default, Linear, Exponential } [BepInPlugin("TriBlades.ServerModifier", "Server Modifier", "0.6.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class ServerModifier : BaseUnityPlugin { [CompilerGenerated] private static class <>O { public static CanModifyDelegate <0>__IsWaitingMatch; } private const string modGUID = "TriBlades.ServerModifier"; private const string modName = "Server Modifier"; private const string modVersion = "0.6.0"; private readonly Harmony harmony = new Harmony("TriBlades.ServerModifier"); private static ServerModifier Instance; private static ManualLogSource mls; internal static bool isHost; internal static ConfigFile ConfigR; private static ConfigEntry<FunctionType> quotaFunction; private static ConfigEntry<float> quotaStart; private static ConfigEntry<float> quotaRate; private static ConfigEntry<float> quotaRandomScale; private static ConfigEntry<float> overtimeExcess; private static ConfigEntry<float> overtimeEarly; private static ConfigEntry<int> daysLeft; private static ConfigEntry<FunctionType> sellingFunction; private static ConfigEntry<float> sellingStart; private static ConfigEntry<float> sellingRate; private static ConfigEntry<float> sellingRandomness; private void Awake() { //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Expected O, but got Unknown //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Expected O, but got Unknown //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Expected O, but got Unknown //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Expected O, but got Unknown //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Expected O, but got Unknown //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Expected O, but got Unknown //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Expected O, but got Unknown //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Expected O, but got Unknown //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Expected O, but got Unknown //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Expected O, but got Unknown //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Expected O, but got Unknown //IL_02d3: Unknown result type (might be due to invalid IL or missing references) //IL_02da: Expected O, but got Unknown //IL_030a: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Expected O, but got Unknown //IL_02c0: Unknown result type (might be due to invalid IL or missing references) //IL_02c5: Unknown result type (might be due to invalid IL or missing references) //IL_02cb: Expected O, but got Unknown //IL_0359: Unknown result type (might be due to invalid IL or missing references) //IL_0360: Expected O, but got Unknown //IL_038c: Unknown result type (might be due to invalid IL or missing references) //IL_0393: Expected O, but got Unknown //IL_0346: Unknown result type (might be due to invalid IL or missing references) //IL_034b: Unknown result type (might be due to invalid IL or missing references) //IL_0351: Expected O, but got Unknown //IL_03d4: Unknown result type (might be due to invalid IL or missing references) //IL_03db: Expected O, but got Unknown //IL_0407: Unknown result type (might be due to invalid IL or missing references) //IL_040e: Expected O, but got Unknown //IL_03c1: Unknown result type (might be due to invalid IL or missing references) //IL_03c6: Unknown result type (might be due to invalid IL or missing references) //IL_03cc: Expected O, but got Unknown //IL_0473: Unknown result type (might be due to invalid IL or missing references) //IL_047a: Expected O, but got Unknown //IL_0429: Unknown result type (might be due to invalid IL or missing references) //IL_042e: Unknown result type (might be due to invalid IL or missing references) //IL_0434: Expected O, but got Unknown //IL_04c2: Unknown result type (might be due to invalid IL or missing references) //IL_04c9: Expected O, but got Unknown //IL_04f9: Unknown result type (might be due to invalid IL or missing references) //IL_0500: Expected O, but got Unknown //IL_04af: Unknown result type (might be due to invalid IL or missing references) //IL_04b4: Unknown result type (might be due to invalid IL or missing references) //IL_04ba: Expected O, but got Unknown //IL_0548: Unknown result type (might be due to invalid IL or missing references) //IL_054f: Expected O, but got Unknown //IL_057f: Unknown result type (might be due to invalid IL or missing references) //IL_0586: Expected O, but got Unknown //IL_0535: Unknown result type (might be due to invalid IL or missing references) //IL_053a: Unknown result type (might be due to invalid IL or missing references) //IL_0540: Expected O, but got Unknown //IL_05ce: Unknown result type (might be due to invalid IL or missing references) //IL_05d5: Expected O, but got Unknown //IL_05bb: Unknown result type (might be due to invalid IL or missing references) //IL_05c0: Unknown result type (might be due to invalid IL or missing references) //IL_05c6: Expected O, but got Unknown if ((Object)(object)Instance == (Object)null) { Instance = this; } ConfigR = ((BaseUnityPlugin)this).Config; mls = Logger.CreateLogSource("TriBlades.ServerModifier"); mls.LogInfo((object)"Server Modifier has Awoken"); harmony.PatchAll(typeof(ServerModifier)); mls.LogInfo((object)"Setup configs"); quotaFunction = ConfigR.Bind<FunctionType>("Quota", "Function", FunctionType.Default, "The function to determine quota."); ConfigEntry<FunctionType> obj = quotaFunction; EnumDropDownOptions val = new EnumDropDownOptions(); ((BaseOptions)val).RequiresRestart = false; EnumDropDownOptions obj2 = val; object obj3 = <>O.<0>__IsWaitingMatch; if (obj3 == null) { CanModifyDelegate val2 = IsWaitingMatch; <>O.<0>__IsWaitingMatch = val2; obj3 = (object)val2; } ((BaseOptions)obj2).CanModifyCallback = (CanModifyDelegate)obj3; EnumDropDownConfigItem<FunctionType> val3 = new EnumDropDownConfigItem<FunctionType>(obj, val); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val3); quotaStart = ConfigR.Bind<float>("Quota", "Start Value", 130f, "The starting quota amount."); ConfigEntry<float> obj4 = quotaStart; FloatSliderOptions val4 = new FloatSliderOptions(); ((BaseOptions)val4).RequiresRestart = false; ((BaseRangeOptions<float>)(object)val4).Min = 0f; ((BaseRangeOptions<float>)(object)val4).Max = 500f; FloatSliderOptions obj5 = val4; object obj6 = <>O.<0>__IsWaitingMatch; if (obj6 == null) { CanModifyDelegate val5 = IsWaitingMatch; <>O.<0>__IsWaitingMatch = val5; obj6 = (object)val5; } ((BaseOptions)obj5).CanModifyCallback = (CanModifyDelegate)obj6; FloatSliderConfigItem val6 = new FloatSliderConfigItem(obj4, val4); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val6); quotaRate = ConfigR.Bind<float>("Quota", "Rate Value", 150f, "The amount to scale by based on the function."); ConfigEntry<float> obj7 = quotaRate; val4 = new FloatSliderOptions(); ((BaseOptions)val4).RequiresRestart = false; ((BaseRangeOptions<float>)(object)val4).Min = 0f; ((BaseRangeOptions<float>)(object)val4).Max = 500f; FloatSliderOptions obj8 = val4; object obj9 = <>O.<0>__IsWaitingMatch; if (obj9 == null) { CanModifyDelegate val7 = IsWaitingMatch; <>O.<0>__IsWaitingMatch = val7; obj9 = (object)val7; } ((BaseOptions)obj8).CanModifyCallback = (CanModifyDelegate)obj9; FloatSliderConfigItem val8 = new FloatSliderConfigItem(obj7, val4); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val8); quotaRandomScale = ConfigR.Bind<float>("Quota", "Randomness", 50f, "The amount of random noise to add."); ConfigEntry<float> obj10 = quotaRandomScale; val4 = new FloatSliderOptions(); ((BaseOptions)val4).RequiresRestart = false; ((BaseRangeOptions<float>)(object)val4).Min = 0f; ((BaseRangeOptions<float>)(object)val4).Max = 500f; FloatSliderOptions obj11 = val4; object obj12 = <>O.<0>__IsWaitingMatch; if (obj12 == null) { CanModifyDelegate val9 = IsWaitingMatch; <>O.<0>__IsWaitingMatch = val9; obj12 = (object)val9; } ((BaseOptions)obj11).CanModifyCallback = (CanModifyDelegate)obj12; FloatSliderConfigItem val10 = new FloatSliderConfigItem(obj10, val4); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val10); overtimeExcess = ConfigR.Bind<float>("Overtime", "Excess Scalar", 0.2f, "The amount to scale the excess profit to add onto overtime."); ConfigEntry<float> obj13 = overtimeExcess; val4 = new FloatSliderOptions(); ((BaseOptions)val4).RequiresRestart = false; ((BaseRangeOptions<float>)(object)val4).Min = 0f; ((BaseRangeOptions<float>)(object)val4).Max = 10f; FloatSliderOptions obj14 = val4; object obj15 = <>O.<0>__IsWaitingMatch; if (obj15 == null) { CanModifyDelegate val11 = IsWaitingMatch; <>O.<0>__IsWaitingMatch = val11; obj15 = (object)val11; } ((BaseOptions)obj14).CanModifyCallback = (CanModifyDelegate)obj15; FloatSliderConfigItem val12 = new FloatSliderConfigItem(obj13, val4); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val12); overtimeEarly = ConfigR.Bind<float>("Overtime", "Early Scalar", 15f, "The amount to scale the amount of days early the quota has been achieved."); ConfigEntry<float> obj16 = overtimeEarly; val4 = new FloatSliderOptions(); ((BaseOptions)val4).RequiresRestart = false; ((BaseRangeOptions<float>)(object)val4).Min = 0f; ((BaseRangeOptions<float>)(object)val4).Max = 500f; FloatSliderOptions obj17 = val4; object obj18 = <>O.<0>__IsWaitingMatch; if (obj18 == null) { CanModifyDelegate val13 = IsWaitingMatch; <>O.<0>__IsWaitingMatch = val13; obj18 = (object)val13; } ((BaseOptions)obj17).CanModifyCallback = (CanModifyDelegate)obj18; FloatSliderConfigItem val14 = new FloatSliderConfigItem(obj16, val4); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val14); daysLeft = ConfigR.Bind<int>("Day", "Days Remaining", 3, "The number of days to explore and collect strap.\n\nValues 10 and above are reportedly glitchy."); ConfigEntry<int> obj19 = daysLeft; IntSliderOptions val15 = new IntSliderOptions(); ((BaseOptions)val15).RequiresRestart = false; ((BaseRangeOptions<int>)(object)val15).Min = 1; ((BaseRangeOptions<int>)(object)val15).Max = 9; object obj20 = <>O.<0>__IsWaitingMatch; if (obj20 == null) { CanModifyDelegate val16 = IsWaitingMatch; <>O.<0>__IsWaitingMatch = val16; obj20 = (object)val16; } ((BaseOptions)val15).CanModifyCallback = (CanModifyDelegate)obj20; IntSliderConfigItem val17 = new IntSliderConfigItem(obj19, val15); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val17); sellingFunction = ConfigR.Bind<FunctionType>("Company Buying Rate", "Function", FunctionType.Default, "The Function to determine buy back rate at the company."); ConfigEntry<FunctionType> obj21 = sellingFunction; val = new EnumDropDownOptions(); ((BaseOptions)val).RequiresRestart = false; EnumDropDownOptions obj22 = val; object obj23 = <>O.<0>__IsWaitingMatch; if (obj23 == null) { CanModifyDelegate val18 = IsWaitingMatch; <>O.<0>__IsWaitingMatch = val18; obj23 = (object)val18; } ((BaseOptions)obj22).CanModifyCallback = (CanModifyDelegate)obj23; EnumDropDownConfigItem<FunctionType> val19 = new EnumDropDownConfigItem<FunctionType>(obj21, val); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val19); sellingStart = ConfigR.Bind<float>("Company Buying Rate", "Final Rate", 100f, "The final percentage for buy back rates at `remaining_day = 0`."); ConfigEntry<float> obj24 = sellingStart; val4 = new FloatSliderOptions(); ((BaseOptions)val4).RequiresRestart = false; ((BaseRangeOptions<float>)(object)val4).Min = 1f; ((BaseRangeOptions<float>)(object)val4).Max = 500f; FloatSliderOptions obj25 = val4; object obj26 = <>O.<0>__IsWaitingMatch; if (obj26 == null) { CanModifyDelegate val20 = IsWaitingMatch; <>O.<0>__IsWaitingMatch = val20; obj26 = (object)val20; } ((BaseOptions)obj25).CanModifyCallback = (CanModifyDelegate)obj26; FloatSliderConfigItem val21 = new FloatSliderConfigItem(obj24, val4); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val21); sellingRate = ConfigR.Bind<float>("Company Buying Rate", "Rate Decrease", -30f, "The rate to decrease the percentage by."); ConfigEntry<float> obj27 = sellingRate; val4 = new FloatSliderOptions(); ((BaseOptions)val4).RequiresRestart = false; ((BaseRangeOptions<float>)(object)val4).Min = -200f; ((BaseRangeOptions<float>)(object)val4).Max = 200f; FloatSliderOptions obj28 = val4; object obj29 = <>O.<0>__IsWaitingMatch; if (obj29 == null) { CanModifyDelegate val22 = IsWaitingMatch; <>O.<0>__IsWaitingMatch = val22; obj29 = (object)val22; } ((BaseOptions)obj28).CanModifyCallback = (CanModifyDelegate)obj29; FloatSliderConfigItem val23 = new FloatSliderConfigItem(obj27, val4); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val23); sellingRandomness = ConfigR.Bind<float>("Company Buying Rate", "Randomness", 0f, "Randomness to add when calculating buy back percentage"); ConfigEntry<float> obj30 = sellingRandomness; val4 = new FloatSliderOptions(); ((BaseOptions)val4).RequiresRestart = false; ((BaseRangeOptions<float>)(object)val4).Min = 0f; ((BaseRangeOptions<float>)(object)val4).Max = 500f; FloatSliderOptions obj31 = val4; object obj32 = <>O.<0>__IsWaitingMatch; if (obj32 == null) { CanModifyDelegate val24 = IsWaitingMatch; <>O.<0>__IsWaitingMatch = val24; obj32 = (object)val24; } ((BaseOptions)obj31).CanModifyCallback = (CanModifyDelegate)obj32; FloatSliderConfigItem val25 = new FloatSliderConfigItem(obj30, val4); LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val25); } [HarmonyPrefix] [HarmonyPatch(typeof(TimeOfDay), "SetBuyingRateForDay")] private static bool PatchSellUpdate(TimeOfDay __instance) { mls.LogInfo((object)"Company buy back rate is being updated"); if (sellingFunction.Value == FunctionType.Default) { mls.LogInfo((object)"Reverting to default rates."); return true; } mls.LogInfo((object)"Manually updating rates."); int num = __instance.quotaVariables.deadlineDaysAmount - __instance.daysUntilDeadline; StartOfRound.Instance.companyBuyingRate = FunctionEval(sellingFunction.Value, sellingStart.Value, 0f - sellingRate.Value, sellingRandomness.Value, __instance.quotaVariables.randomizerCurve, num); StartOfRound.Instance.companyBuyingRate = ((StartOfRound.Instance.companyBuyingRate <= 0f) ? 0f : (StartOfRound.Instance.companyBuyingRate / 100f)); return false; } [HarmonyPrefix] [HarmonyPatch(typeof(TimeOfDay), "SetNewProfitQuota")] private static bool PatchQuotaUpdate(TimeOfDay __instance) { mls.LogInfo((object)"Quota is being updated"); if (((NetworkBehaviour)__instance).IsServer) { mls.LogInfo((object)"Manually updating the quota"); __instance.timesFulfilledQuota++; int num = __instance.quotaFulfilled - __instance.profitQuota; float num2 = Mathf.Clamp(1f + (float)__instance.timesFulfilledQuota * ((float)__instance.timesFulfilledQuota / __instance.quotaVariables.increaseSteepness), 0f, 10000f); num2 = __instance.quotaVariables.baseIncrease * num2 * (__instance.quotaVariables.randomizerCurve.Evaluate(Random.Range(0f, 1f)) * __instance.quotaVariables.randomizerMultiplier + 1f); if (quotaFunction.Value == FunctionType.Default) { __instance.profitQuota = (int)Mathf.Clamp((float)__instance.profitQuota + num2, 0f, 1E+09f); } else { __instance.profitQuota = (int)FunctionEval(quotaFunction.Value, quotaStart.Value, quotaRate.Value, quotaRandomScale.Value, __instance.quotaVariables.randomizerCurve, __instance.timesFulfilledQuota); } __instance.quotaFulfilled = 0; float num3 = (float)num * overtimeExcess.Value + overtimeEarly.Value * (float)__instance.daysUntilDeadline; mls.LogInfo((object)("New Quota: " + __instance.profitQuota)); mls.LogInfo((object)("OverTime: " + num3)); mls.LogInfo((object)("Total Time: " + __instance.totalTime)); mls.LogInfo((object)string.Concat(new string[6] { "Had excess of ", num.ToString(), ". Saving ", __instance.quotaFulfilled.ToString(), "for current quota fulfillment of ", __instance.quotaFulfilled.ToString() })); mls.LogInfo((object)("Deadline Day Amount currently is " + __instance.quotaVariables.deadlineDaysAmount)); mls.LogInfo((object)("Length of a day is currently " + __instance.totalTime)); __instance.SyncNewProfitQuotaClientRpc(__instance.profitQuota, (int)num3, __instance.timesFulfilledQuota); return false; } return true; } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "SetTimeAndPlanetToSavedSettings")] private static void EasierStart() { mls.LogInfo((object)"StartofRound Injection was Successful!"); if (TimeOfDay.Instance.timesFulfilledQuota < 1) { TimeOfDay.Instance.profitQuota = (int)quotaStart.Value; TimeOfDay.Instance.UpdateProfitQuotaCurrentTime(); mls.LogInfo((object)("New Quota: " + TimeOfDay.Instance.profitQuota)); } mls.LogInfo((object)("Current profit quota for game on launch: " + TimeOfDay.Instance.profitQuota)); } [HarmonyPostfix] [HarmonyPatch(typeof(TimeOfDay), "Start")] private static void EasierTime() { TimeOfDay.Instance.timeUntilDeadline = TimeOfDay.Instance.totalTime * (float)daysLeft.Value; TimeOfDay.Instance.quotaVariables.deadlineDaysAmount = daysLeft.Value; TimeOfDay.Instance.UpdateProfitQuotaCurrentTime(); mls.LogInfo((object)"Changed length of hours during TimeOfDay start."); mls.LogInfo((object)("Deadline Days Amount: " + TimeOfDay.Instance.quotaVariables.deadlineDaysAmount)); mls.LogInfo((object)("New Time: " + TimeOfDay.Instance.timeUntilDeadline)); mls.LogInfo((object)("Total Time: " + TimeOfDay.Instance.totalTime)); } private static float FunctionEval(FunctionType ft, float startingVal, float rate, float randomness, AnimationCurve rc, float x) { float num = x * rate; float num2 = rc.Evaluate(Random.Range(-1f, 1f)) * randomness; mls.LogInfo((object)string.Concat(new string[6] { "Recieved the following q values:\n", startingVal.ToString(), "\n", num.ToString(), "\n", num2.ToString() })); return ft switch { FunctionType.Linear => Mathf.Clamp(startingVal + num + num2, 0f, 1E+09f), FunctionType.Exponential => Mathf.Clamp(startingVal * Mathf.Exp(num) + num2, 0f, 1E+09f), _ => 0f, }; } private static CanModifyResult IsWaitingMatch() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) try { if (GameNetworkManager.Instance.gameHasStarted) { return CanModifyResult.False("The game has currently started. Do not allow for further modifications."); } return CanModifyResult.True(); } catch (System.Exception ex) { mls.LogInfo((object)"Ran into error determining if game started. Assuming in menu and game has not started."); mls.LogDebug((object)ex); return CanModifyResult.True(); } } } }