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 AutoPurgeValuables v1.0.1
plugins/Auto-PurgeValuables.dll
Decompiled 5 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 BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("Kai")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("Auto-PurgeValuables")] [assembly: AssemblyTitle("Auto-PurgeValuables")] [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.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; } } [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 Auto_PurgeValuables { [BepInPlugin("Kai.Auto-PurgeValuables", "Auto_PurgeValuables", "1.0")] public class Auto_PurgeValuables : BaseUnityPlugin { internal static bool purgedThisRound; public static ConfigEntry<bool> PurgeOnLevelGenerated; public static ConfigEntry<bool> EnablePurgeLog; internal static Auto_PurgeValuables Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } private void Awake() { Instance = this; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; PurgeOnLevelGenerated = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "PurgeOnLevelGenerated", false, "ステージ生成完了後に貴重品を自動破棄するかどうか"); EnablePurgeLog = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "EnablePurgeLog", false, "貴重品破棄のログ出力を有効にするかどうか"); Patch(); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!"); } internal void Patch() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_0025: Expected O, but got Unknown if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); } internal void Unpatch() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void Update() { if (SemiFunc.IsMasterClientOrSingleplayer() && !purgedThisRound && SemiFunc.RunIsLevel()) { RoundDirector instance = RoundDirector.instance; if (!((Object)(object)instance == (Object)null) && instance.allExtractionPointsCompleted) { PurgeAllValuables(); purgedThisRound = true; } } } internal void PurgeAllValuables() { if (!SemiFunc.IsMasterClientOrSingleplayer()) { return; } ValuableObject[] array = Object.FindObjectsByType<ValuableObject>((FindObjectsSortMode)0); ValuableObject[] array2 = array; foreach (ValuableObject val in array2) { if ((Object)(object)val == (Object)null) { continue; } try { if (SemiFunc.IsMultiplayer()) { if (PhotonNetwork.IsMasterClient) { PhotonNetwork.Destroy(((Component)val).gameObject); } else { Object.Destroy((Object)(object)((Component)val).gameObject); } } else { Object.Destroy((Object)(object)((Component)val).gameObject); } if (EnablePurgeLog.Value) { Logger.LogInfo((object)("[AutoPurge] Destroyed Valuable: " + ((Object)val).name)); } } catch { if (EnablePurgeLog.Value) { Logger.LogWarning((object)("[AutoPurge] Failed to destroy: " + ((val != null) ? ((Object)val).name : null))); } } } } internal static void ResetFlags() { purgedThisRound = false; } } [HarmonyPatch(typeof(LevelGenerator), "GenerateDone")] public static class Patch_LevelGenerated_Post { public static void Postfix() { if ((Object)(object)RunManager.instance == (Object)null) { return; } Level levelCurrent = RunManager.instance.levelCurrent; if ((Object)(object)levelCurrent == (Object)null) { return; } string text = ((Object)levelCurrent).name ?? ""; if (!text.Contains("Main Menu") && SemiFunc.RunIsLevel()) { Auto_PurgeValuables.Logger.LogInfo((object)"[AutoPurge] Level Generated → Reset flags"); Auto_PurgeValuables.ResetFlags(); if (Auto_PurgeValuables.PurgeOnLevelGenerated.Value) { Auto_PurgeValuables.Logger.LogInfo((object)"[AutoPurge] PurgeOnLevelGenerated enabled → Purging now"); Auto_PurgeValuables.Instance.PurgeAllValuables(); } } } } [HarmonyPatch(typeof(ChatManager), "MessageSend")] public static class Patch_ChatCommand_RV { private static void Prefix(ChatManager __instance) { if (!Object.op_Implicit((Object)(object)__instance.playerAvatar) || !__instance.playerAvatar.isLocal || !SemiFunc.IsMasterClientOrSingleplayer()) { return; } string chatMessage = __instance.chatMessage; if (!string.IsNullOrWhiteSpace(chatMessage)) { chatMessage = chatMessage.Trim().ToLowerInvariant(); if (!(chatMessage != "/rv")) { Auto_PurgeValuables.Logger.LogInfo((object)"[AutoPurge] Chat command /RV received → Purging valuables (manual)"); Auto_PurgeValuables.Instance.PurgeAllValuables(); __instance.chatMessage = ""; } } } } }