Some mods target the Mono version of the game, which is available by opting into the Steam beta branch "alternate"
Decompiled source of ATMDepositMod v1.0.1
ATMDepositMod.dll
Decompiled 10 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using ATMDepositMod; using HarmonyLib; using Il2CppScheduleOne.Money; using MelonLoader; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: MelonInfo(typeof(Main), "ATM Deposit Limit Mod", "1.0.1", "helboy1337", null)] [assembly: MelonGame("TVGS", "Schedule I")] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("ATMDepositMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Mod om ATM deposit limit te verhogen")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("ATMDepositMod")] [assembly: AssemblyTitle("ATMDepositMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.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 ATMDepositMod { public class Main : MelonMod { private const float NEW_DEPOSIT_LIMIT = 1000000f; private bool initialized = false; public override void OnSceneWasInitialized(int buildIndex, string sceneName) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Expected O, but got Unknown //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Expected O, but got Unknown try { if (!initialized) { ((MelonBase)this).LoggerInstance.Msg("Initializing ATM Deposit Limit Mod..."); Harmony val = new Harmony("com.user.atmmod"); MethodInfo method = typeof(ATM).GetMethod("Interacted", BindingFlags.Instance | BindingFlags.Public); MethodInfo method2 = typeof(Main).GetMethod("InteractedPostfix", BindingFlags.Static | BindingFlags.NonPublic); if (method != null && method2 != null) { val.Patch((MethodBase)method, (HarmonyMethod)null, new HarmonyMethod(method2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); ((MelonBase)this).LoggerInstance.Msg("Successfully patched ATM Interacted method!"); } else { ((MelonBase)this).LoggerInstance.Error("Failed to patch ATM Interacted method!"); } MethodInfo method3 = typeof(ATM).GetMethod("Enter", BindingFlags.Instance | BindingFlags.Public); MethodInfo method4 = typeof(Main).GetMethod("EnterPostfix", BindingFlags.Static | BindingFlags.NonPublic); if (method3 != null && method4 != null) { val.Patch((MethodBase)method3, (HarmonyMethod)null, new HarmonyMethod(method4), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); ((MelonBase)this).LoggerInstance.Msg("Successfully patched ATM Enter method!"); } else { ((MelonBase)this).LoggerInstance.Error("Failed to patch ATM Enter method!"); } initialized = true; ((MelonBase)this).LoggerInstance.Msg("ATM Deposit Limit Mod successfully initialized!"); } } catch (Exception ex) { ((MelonBase)this).LoggerInstance.Error("Initialization error: " + ex.Message); ((MelonBase)this).LoggerInstance.Error("Stack trace: " + ex.StackTrace); } } private static void ModifyATMLimits(ATM atm) { try { if ((Object)(object)atm == (Object)null) { MelonLogger.Error("ATM instance is null!"); return; } Type type = ((object)atm).GetType(); PropertyInfo property = type.GetProperty("WEEKLY_DEPOSIT_LIMIT"); if (property != null) { property.SetValue(atm, 1000000f); MelonLogger.Msg($"WEEKLY_DEPOSIT_LIMIT set to {1000000f:N0}"); } else { MelonLogger.Warning("WEEKLY_DEPOSIT_LIMIT property not found"); } PropertyInfo property2 = type.GetProperty("DepositLimitEnabled"); if (property2 != null) { property2.SetValue(atm, false); MelonLogger.Msg("DepositLimitEnabled set to false"); } else { MelonLogger.Warning("DepositLimitEnabled property not found"); } PropertyInfo property3 = type.GetProperty("WeeklyDepositSum"); if (property3 != null) { property3.SetValue(atm, 0f); MelonLogger.Msg("WeeklyDepositSum reset to 0"); } else { MelonLogger.Warning("WeeklyDepositSum property not found"); } MelonLogger.Msg("ATM limits successfully modified!"); } catch (Exception ex) { MelonLogger.Error("Error modifying ATM limits: " + ex.Message); MelonLogger.Error("Stack trace: " + ex.StackTrace); } } private static void InteractedPostfix(ATM __instance) { try { MelonLogger.Msg("ATM interacted!"); ModifyATMLimits(__instance); } catch (Exception ex) { MelonLogger.Error("Error in Interacted postfix: " + ex.Message); } } private static void EnterPostfix(ATM __instance) { try { MelonLogger.Msg("ATM entered!"); ModifyATMLimits(__instance); } catch (Exception ex) { MelonLogger.Error("Error in Enter postfix: " + ex.Message); } } } }