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 SaveOnDeath v1.0.1
BepInEx/plugins/kiberzuza-SaveOnDeath/SaveOnDeath.dll
Decompiled 2 days 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 Microsoft.CodeAnalysis; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("SaveOnDeath")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("SaveOnDeath")] [assembly: AssemblyTitle("SaveOnDeath")] [assembly: AssemblyVersion("1.0.0.0")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : 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] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace SaveOnDeath { [HarmonyPatch(typeof(StatsManager), "SaveFileDelete")] internal static class SaveFileDeletePatch { [HarmonyPrefix] private static bool Prefix(string saveFileName) { if (MenuPageSavesPatch.IsPlayerDeleting) { MenuPageSavesPatch.IsPlayerDeleting = false; return true; } if (Plugin.AllowGameDelete.Value) { return true; } Plugin.Log.LogInfo((object)("[SaveOnDeath] Заблокировано удаление '" + saveFileName + "'!")); return false; } } [HarmonyPatch(typeof(MenuPageSaves), "SaveFileDelete")] internal static class MenuPageSavesPatch { internal static bool IsPlayerDeleting; [HarmonyPrefix] private static bool Prefix() { if (!Plugin.AllowPlayerDelete.Value) { return false; } IsPlayerDeleting = true; return true; } } [BepInPlugin("com.kiberzuza.saveondeathREPO", "SaveOnDeath", "1.0.0")] public class Plugin : BaseUnityPlugin { internal static ManualLogSource Log; internal static ConfigEntry<bool> AllowPlayerDelete; internal static ConfigEntry<bool> AllowGameDelete; private readonly Harmony _harmony = new Harmony("com.kiberzuza.saveondeathREPO"); private void Awake() { Log = ((BaseUnityPlugin)this).Logger; AllowPlayerDelete = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "AllowPlayerDelete", true, "Разрешить удалять сейвы из меню."); AllowGameDelete = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "AllowGameDelete", false, "Разрешить игре удалять сейвы."); _harmony.PatchAll(); Log.LogInfo((object)"SaveOnDeath v1.0.0 — сейвы защищены!"); } } }