using __Project__.Scripts.Janitor; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using HarmonyLib; using Il2CppInterop.Runtime.Injection; using UnityEngine; using UnityEngine.Events; using UnityEngine.SceneManagement; namespace BetterStuff; [BepInPlugin(PLUGIN_GUID, PLUGIN_NAME, PLUGIN_VERSION)] public class Plugin : BasePlugin { public const string PLUGIN_GUID = "de.mpburgmann.BetterStuff"; public const string PLUGIN_NAME = "Better Stuff"; public const string PLUGIN_VERSION = "1.2.0"; internal static new ManualLogSource Log; public const float acceleration = 200f; public const float angularSpeed = 200f; private static ConfigEntry scanTime; private static ConfigEntry finishDuration; private static ConfigEntry timeAfterScans; private static ConfigEntry restockerSpeed; private static ConfigEntry selfcheckoutCustomerSpeed; private static ConfigEntry selfcheckoutPlayerSpeed; private static ConfigEntry customerHelperScanningSpeed; private static ConfigEntry customerHelperSpeed; public static ConfigEntry securityGuardSpeed; private static ConfigEntry janitorSpeed; private static ConfigEntry bakerSpeed; public override void Load() { // Plugin startup logic Log = base.Log; Log.LogInfo($"Plugin {MyPluginInfo.PLUGIN_GUID} is loaded!"); scanTime = Config.Bind("Cashier", "Scanning Speed", 0.7f, "Default vanilla value is 1.5."); finishDuration = Config.Bind("Cashier", "FinishingDuration", 1f, "Default vanilla value is 2."); timeAfterScans = Config.Bind("Cashier", "TimeAfterAllScans", 0.5f, "Default vanilla value is 1."); restockerSpeed = Config.Bind("Restocker", "Speed", 5f, "Default value is 2."); selfcheckoutCustomerSpeed = Config.Bind("Selfcheckout", "Customer Speed", 0.6f, "Default vanilla value is 1.8."); selfcheckoutPlayerSpeed = Config.Bind("Selfcheckout", "Player Speed", 0.3f, "Default vanilla value is 0.6."); customerHelperScanningSpeed = Config.Bind("Customer Helper", "Scanning Speed", 0.5f, "Default vanilla value is 1.5."); customerHelperSpeed = Config.Bind("Customer Helper", "Speed", 5f, "Default vanilla value is 2."); securityGuardSpeed = Config.Bind("Security Guard", "Speed", 5f, "Default vanilla value is 2."); janitorSpeed = Config.Bind("Janitor", "Speed", 5f, "Default vanilla value is 2."); bakerSpeed = Config.Bind("Baker", "Speed", 5f, "Default vanilla value is 2."); Harmony harmony = new(PLUGIN_GUID); harmony.PatchAll(); SceneManager.sceneLoaded += (UnityAction) OnSceneLoaded; } [HarmonyPatch(typeof(Cashier), "Start")] public static class Cashier_Start_Patch { [HarmonyPostfix] public static void Postfix(Cashier __instance) { __instance.ScanningInterval = scanTime.Value; } } [HarmonyPatch(typeof(Checkout), "FinishedScanning")] public static class Cashier_Checkout_Patch { [HarmonyPostfix] public static void Postfix(Checkout __instance) { if(!__instance.m_IsSelfCheckout) { __instance.m_AutomatedCheckout.m_FinishingPaymentDuration = finishDuration.Value; __instance.m_AutomatedCheckout.m_IntervalAfterScanningAll = timeAfterScans.Value; } } } [HarmonyPatch(typeof(Restocker), "Start")] public static class Restocker_Start_Patch { [HarmonyPostfix] public static void Postfix(Restocker __instance) { __instance.m_Agent.speed = restockerSpeed.Value; __instance.m_Agent.acceleration *= acceleration; __instance.m_Agent.angularSpeed *= angularSpeed; } } [HarmonyPatch(typeof(Checkout), "Start")] public static class Selfcheckout_Start_Patch { [HarmonyPostfix] public static void Postfix(Checkout __instance) { if (__instance.m_IsSelfCheckout) { __instance.m_SelfCheckout.m_CustomerScanningInterval = selfcheckoutCustomerSpeed.Value; __instance.m_SelfCheckout.m_PlayerScanningInterval = selfcheckoutPlayerSpeed.Value; } } } [HarmonyPatch(typeof(CustomerHelper), "Start")] public static class CustomerHelper_Start_Patch { [HarmonyPostfix] public static void Postfix(CustomerHelper __instance) { __instance.ScanningInterval = customerHelperScanningSpeed.Value; __instance.m_CustomerHelperScanIntervals = new Il2CppSystem.Collections.Generic.List(1); __instance.m_CustomerHelperScanIntervals.Add(customerHelperScanningSpeed.Value); __instance.m_Agent.speed = customerHelperSpeed.Value; __instance.m_Agent.acceleration *= acceleration; __instance.m_Agent.angularSpeed *= angularSpeed; } } // [HarmonyPatch(typeof(SecurityGuardAnimationController), "Start")] // public static class SecurityGuardAnimationController_Start_Patch // { // [HarmonyPostfix] // public static void Postfix(SecurityGuardAnimationController __instance) // { // __instance.m_Agent.speed = securityGuardSpeed.Value; // __instance.m_Agent.acceleration *= acceleration; // __instance.m_Agent.angularSpeed *= angularSpeed; // } // } [HarmonyPatch(typeof(Janitor), "Start")] public static class Janitor_Start_Patch { [HarmonyPostfix] public static void Postfix(Janitor __instance) { __instance.m_Agent.speed = janitorSpeed.Value; __instance.m_Agent.acceleration *= acceleration; __instance.m_Agent.angularSpeed *= angularSpeed; } } [HarmonyPatch(typeof(Baker), "Start")] public static class Baker_Start_Patch { [HarmonyPostfix] public static void Postfix(Baker __instance) { __instance.m_Agent.speed = bakerSpeed.Value; __instance.m_Agent.acceleration *= acceleration; __instance.m_Agent.angularSpeed *= angularSpeed; } } private static void OnSceneLoaded(Scene scene, LoadSceneMode mode) { if (scene.name == "Main Scene") { ClassInjector.RegisterTypeInIl2Cpp(); GameObject gameObject = new("BetterStuffBehaviour"); Object.DontDestroyOnLoad(gameObject); gameObject.AddComponent(); } if(scene.name == "Main Menu") { Object gameObject = GameObject.Find("BetterStuffBehaviour"); if(gameObject != null) { Object.Destroy(gameObject); } } } }