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 OubliePasDeSaveClaire v1.1.0
OubliePasDeSaveClaire.dll
Decompiled 11 months agousing System.Collections; 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 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("OubliePasDeSaveClaire")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("OubliePasDeSaveClaire")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("77a55fef-6f54-446e-9151-1de85d4bc283")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace OubliePasDeSaveClaire; [BepInPlugin("Xelan.OubliePasDeSaveClaire", "OubliePasDeSaveClaire", "1.0.0")] public class OubliePasDeSaveClaire : BaseUnityPlugin { private const string modGUID = "Xelan.OubliePasDeSaveClaire"; private const string modName = "OubliePasDeSaveClaire"; private const string modVersion = "1.0.0"; private readonly Harmony harmony = new Harmony("Xelan.OubliePasDeSaveClaire"); private static OubliePasDeSaveClaire Instance; public static ManualLogSource mls; public static ConfigEntry<string> SaveReminder; public static ConfigEntry<string> LoadReminder; public static ConfigEntry<int> Pourcentage; public static AudioClip saveSound; public static AudioClip savePasSound; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } mls = Logger.CreateLogSource("Xelan.OubliePasDeSaveClaire"); LoadConfig(); LoadAssets(); harmony.PatchAll(); mls.LogInfo((object)"╔═══════════════════════════════════════════════╗"); mls.LogInfo((object)"║ OubliePasDeSaveClaire is UP ! ║"); mls.LogInfo((object)"╚═══════════════════════════════════════════════╝"); } private void LoadConfig() { SaveReminder = ((BaseUnityPlugin)this).Config.Bind<string>("Message", "SaveReminder", "CLAAAAIIIIRREE faut SAAAAVE", "Phrase pour ne pas oublier de save"); LoadReminder = ((BaseUnityPlugin)this).Config.Bind<string>("Message", "LoadReminder", "CLAAAAIIIIRREE faut Loooaaad", "Phrase pour dire qu'il faut re-load"); Pourcentage = ((BaseUnityPlugin)this).Config.Bind<int>("Message", "Pourcentage", 75, "Pourcentage à partir duquel il faut Load"); } private void LoadAssets() { string location = ((BaseUnityPlugin)Instance).Info.Location; string text = "OubliePasDeSaveClaire.dll"; string text2 = location.TrimEnd(text.ToCharArray()); string text3 = text2 + "savesound"; AssetBundle val = AssetBundle.LoadFromFile(text3); if (val == null) { mls.LogError((object)"Impossible de charger le son :'("); return; } saveSound = val.LoadAsset<AudioClip>("assets/audio/saveclaire.wav"); savePasSound = val.LoadAsset<AudioClip>("assets/audio/savepasclaire.wav"); } public static void DisplayTip(string title, string msg, bool isWarning = false) { HUDManager.Instance.DisplayTip(title, msg, isWarning, false, "LC_Tip1"); } } [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatch { [HarmonyPatch("EndOfGame")] [HarmonyPostfix] public static void EndOfGame_Postfix(StartOfRound __instance, int scrapCollected) { if (__instance != null && ((NetworkBehaviour)__instance).IsHost) { int correctPourcentage = getCorrectPourcentage(); float totalScrapValueInLevel = RoundManager.Instance.totalScrapValueInLevel; float num = scrapCollected; float waitingTime = 18f; bool shouldISave; if (RoundManager.Instance.currentLevel.sceneName == "CompanyBuilding") { shouldISave = TimeOfDay.Instance.timeUntilDeadline > 0f || TimeOfDay.Instance.profitQuota - TimeOfDay.Instance.quotaFulfilled <= 0; waitingTime = 5f; } else { shouldISave = num / totalScrapValueInLevel * 100f >= (float)correctPourcentage; } ((MonoBehaviour)__instance).StartCoroutine(DisplayAndPlayReminder(shouldISave, waitingTime)); } } private static int getCorrectPourcentage() { int value = OubliePasDeSaveClaire.Pourcentage.Value; if (value < 0) { return 0; } if (value > 100) { return 100; } return value; } private static IEnumerator DisplayAndPlayReminder(bool shouldISave, float waitingTime) { yield return (object)new WaitForSeconds(waitingTime); AudioSource speaker = StartOfRound.Instance.speakerAudioSource; if (speaker == null) { yield break; } if (shouldISave) { OubliePasDeSaveClaire.DisplayTip("Lobby save \ud83d\ude0e", OubliePasDeSaveClaire.SaveReminder.Value); if ((Object)(object)OubliePasDeSaveClaire.saveSound != (Object)null) { speaker.PlayOneShot(OubliePasDeSaveClaire.saveSound); } } else { OubliePasDeSaveClaire.DisplayTip("Lobby load :'(", OubliePasDeSaveClaire.LoadReminder.Value); if ((Object)(object)OubliePasDeSaveClaire.savePasSound != (Object)null) { speaker.PlayOneShot(OubliePasDeSaveClaire.savePasSound); } } } }