using 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 UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("nobugs")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("移除 PEAK 中的所有昆虫(蜘蛛、蝎子、甲虫、蜂群、蚁狮)")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+e46beb3014ed010b00e682f16050a28f87d88b67")] [assembly: AssemblyProduct("PEAK NoBugs")] [assembly: AssemblyTitle("PEAK NoBugs")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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 nobugs { [BepInPlugin("nobugs", "PEAK NoBugs", "1.0.0")] public class Plugin : BaseUnityPlugin { internal static ManualLogSource Logger; internal static ConfigEntry RemoveSpiders; internal static ConfigEntry RemoveScorpions; internal static ConfigEntry RemoveBeetles; internal static ConfigEntry RemoveBees; internal static ConfigEntry RemoveAntlions; internal static ConfigEntry RemoveFrogTongues; internal static ConfigEntry DestroyObjects; private Harmony _harmony; private void Awake() { //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Expected O, but got Unknown Logger = ((BaseUnityPlugin)this).Logger; RemoveSpiders = ((BaseUnityPlugin)this).Config.Bind("Bugs", "RemoveSpiders", true, "移除蜘蛛(Spider):不再从天花板垂降抓人。"); RemoveScorpions = ((BaseUnityPlugin)this).Config.Bind("Bugs", "RemoveScorpions", true, "移除蝎子(Scorpion):不再造成中毒和击退。"); RemoveBeetles = ((BaseUnityPlugin)this).Config.Bind("Bugs", "RemoveBeetles", true, "移除甲虫(Beetle):不再顶飞玩家。"); RemoveBees = ((BaseUnityPlugin)this).Config.Bind("Bugs", "RemoveBees", true, "移除蜂群(BeeSwarm):蜂巢不再孵化蜂群。"); RemoveAntlions = ((BaseUnityPlugin)this).Config.Bind("Bugs", "RemoveAntlions", true, "移除蚁狮(Antlion):沙坑不再吞噬玩家。"); RemoveFrogTongues = ((BaseUnityPlugin)this).Config.Bind("Bugs", "RemoveFrogTongues", false, "移除青蛙舌(FrogTongue)。青蛙不算昆虫,默认关闭。"); DestroyObjects = ((BaseUnityPlugin)this).Config.Bind("General", "DestroyObjects", true, "true = 直接销毁虫子对象(更彻底);false = 仅隐藏并禁用其行为(联机更安全)。"); _harmony = new Harmony("nobugs"); _harmony.PatchAll(typeof(BugPatches)); Logger.LogInfo((object)"PEAK NoBugs v1.0.0 已加载,昆虫清理已启用。"); } private void OnDestroy() { Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } internal static void Remove(Behaviour target, string label) { if (!((Object)(object)target == (Object)null)) { GameObject gameObject = ((Component)target).gameObject; if (DestroyObjects.Value) { Logger.LogInfo((object)("[NoBugs] 销毁 " + label + ": " + ((Object)gameObject).name)); Object.Destroy((Object)(object)gameObject); } else { Logger.LogInfo((object)("[NoBugs] 禁用 " + label + ": " + ((Object)gameObject).name)); target.enabled = false; gameObject.SetActive(false); } } } } [HarmonyPatch] internal static class BugPatches { [HarmonyPrefix] [HarmonyPatch(typeof(Spider), "Start")] private static bool Spider_Start_Prefix(Spider __instance) { if (!Plugin.RemoveSpiders.Value) { return true; } Plugin.Remove((Behaviour)(object)__instance, "Spider"); return false; } [HarmonyPrefix] [HarmonyPatch(typeof(Spider), "Scan")] private static bool Spider_Scan_Prefix() { return !Plugin.RemoveSpiders.Value; } [HarmonyPrefix] [HarmonyPatch(typeof(SpiderTrigger), "OnTriggerEnter")] private static bool SpiderTrigger_OnTriggerEnter_Prefix() { return !Plugin.RemoveSpiders.Value; } [HarmonyPostfix] [HarmonyPatch(typeof(Mob), "Start")] private static void Mob_Start_Postfix(Mob __instance) { if (__instance is Scorpion && Plugin.RemoveScorpions.Value) { Plugin.Remove((Behaviour)(object)__instance, "Scorpion"); } else if (__instance is Beetle && Plugin.RemoveBeetles.Value) { Plugin.Remove((Behaviour)(object)__instance, "Beetle"); } else if (__instance is FrogTongue && Plugin.RemoveFrogTongues.Value) { Plugin.Remove((Behaviour)(object)__instance, "FrogTongue"); } } [HarmonyPrefix] [HarmonyPatch(typeof(Scorpion), "InflictAttack")] private static bool Scorpion_InflictAttack_Prefix() { return !Plugin.RemoveScorpions.Value; } [HarmonyPrefix] [HarmonyPatch(typeof(Beetle), "InflictAttack")] private static bool Beetle_InflictAttack_Prefix() { return !Plugin.RemoveBeetles.Value; } [HarmonyPrefix] [HarmonyPatch(typeof(Beehive), "Init")] private static void Beehive_Init_Prefix(Beehive __instance) { if (Plugin.RemoveBees.Value) { __instance.spawnBees = false; } } [HarmonyPrefix] [HarmonyPatch(typeof(BeeSwarm), "Start")] private static bool BeeSwarm_Start_Prefix(BeeSwarm __instance) { if (!Plugin.RemoveBees.Value) { return true; } Plugin.Remove((Behaviour)(object)__instance, "BeeSwarm"); return false; } [HarmonyPrefix] [HarmonyPatch(typeof(Antlion), "Start")] private static bool Antlion_Start_Prefix(Antlion __instance) { if (!Plugin.RemoveAntlions.Value) { return true; } Plugin.Remove((Behaviour)(object)__instance, "Antlion"); return false; } } public static class MyPluginInfo { public const string PLUGIN_GUID = "nobugs"; public const string PLUGIN_NAME = "PEAK NoBugs"; public const string PLUGIN_VERSION = "1.0.0"; } }