Please disclose if your mod was created primarily 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 KidnapperFoxSettings v1.0.1
com.github.zehsteam.KidnapperFoxSettings.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; 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 GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using com.github.zehsteam.KidnapperFoxSettings.Patches; [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("com.github.zehsteam.KidnapperFoxSettings")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.1.0")] [assembly: AssemblyInformationalVersion("1.0.1+a16e80cb7ca22aaf9b6295b3f0a85c534545d450")] [assembly: AssemblyProduct("KidnapperFoxSettings")] [assembly: AssemblyTitle("com.github.zehsteam.KidnapperFoxSettings")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.1.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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace com.github.zehsteam.KidnapperFoxSettings { internal class ConfigManager { public ConfigEntry<int> MaxSpawnCount; public ConfigEntry<int> Health; public ConfigEntry<bool> DropAllItemsWhenGrabbed; public ConfigEntry<bool> InstaKillPlayer; public ConfigEntry<int> Damage; public ConfigEntry<float> DamageInterval; public ConfigManager() { BindConfigs(); ClearUnusedEntries(); } private void BindConfigs() { ConfigFile config = ((BaseUnityPlugin)Plugin.Instance).Config; MaxSpawnCount = config.Bind<int>("Kidnapper Fox Settings", "MaxSpawnCount", 1, "The max amount of Kidnapper Foxes that can spawn on a moon."); Health = config.Bind<int>("Kidnapper Fox Settings", "Health", 7, "The amount of health (shovel hits) the Kidnapper Fox has."); DropAllItemsWhenGrabbed = config.Bind<bool>("Kidnapper Fox Settings", "DropAllItemsWhenGrabbed", true, "If enabled, you will drop all your items when the Kidnapper Fox grabs you with their tongue."); InstaKillPlayer = config.Bind<bool>("Kidnapper Fox Settings", "InstaKillPlayer", true, "If enabled, the Kidnapper Fox will insta-kill you when you are taken to their nest."); Damage = config.Bind<int>("Kidnapper Fox Settings", "Damage", 50, "The amount of the damage the Kidnapper Fox will deal to players per bite. This setting requires InstaKillPlayer to be false."); DamageInterval = config.Bind<float>("Kidnapper Fox Settings", "DamageInterval", 1f, "The seconds between each bite from the Kidnapper Fox when you are in their nest. This setting requires InstaKillPlayer to be false."); } private void ClearUnusedEntries() { ConfigFile config = ((BaseUnityPlugin)Plugin.Instance).Config; PropertyInfo property = ((object)config).GetType().GetProperty("OrphanedEntries", BindingFlags.Instance | BindingFlags.NonPublic); Dictionary<ConfigDefinition, string> dictionary = (Dictionary<ConfigDefinition, string>)property.GetValue(config, null); dictionary.Clear(); config.Save(); } } [BepInPlugin("com.github.zehsteam.KidnapperFoxSettings", "KidnapperFoxSettings", "1.0.1")] public class Plugin : BaseUnityPlugin { private readonly Harmony harmony = new Harmony("com.github.zehsteam.KidnapperFoxSettings"); internal static Plugin Instance; internal static ManualLogSource logger; internal static ConfigManager ConfigManager; public static bool IsHostOrServer => NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } logger = Logger.CreateLogSource("com.github.zehsteam.KidnapperFoxSettings"); logger.LogInfo((object)"KidnapperFoxSettings has awoken!"); harmony.PatchAll(typeof(RoundManagerPatch)); harmony.PatchAll(typeof(PlayerControllerBPatch)); harmony.PatchAll(typeof(BushWolfEnemyPatch)); ConfigManager = new ConfigManager(); } } internal class Utils { public static EnemyType GetEnemyTypeFromResources(string enemyName) { try { return Resources.FindObjectsOfTypeAll<EnemyType>().Single((EnemyType x) => x.enemyName == enemyName); } catch { Plugin.logger.LogError((object)("Failed to get \"" + enemyName + "\" EnemyType from Resources.")); } return null; } } public static class MyPluginInfo { public const string PLUGIN_GUID = "com.github.zehsteam.KidnapperFoxSettings"; public const string PLUGIN_NAME = "KidnapperFoxSettings"; public const string PLUGIN_VERSION = "1.0.1"; } } namespace com.github.zehsteam.KidnapperFoxSettings.Patches { [HarmonyPatch(typeof(BushWolfEnemy))] internal class BushWolfEnemyPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void StartPatch(ref BushWolfEnemy __instance) { ((EnemyAI)__instance).enemyHP = Plugin.ConfigManager.Health.Value; } [HarmonyPatch("OnCollideWithPlayer")] [HarmonyPrefix] private static bool OnCollideWithPlayerPatch(ref BushWolfEnemy __instance, Collider other, ref bool ___foundSpawningPoint, ref bool ___inKillAnimation, ref Vector3 ___currentHidingSpot, ref float ___timeSinceTakingDamage, ref PlayerControllerB ___lastHitByPlayer, ref bool ___dragging, ref bool ___startedShootingTongue) { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) if (Plugin.ConfigManager.InstaKillPlayer.Value) { return true; } if (___foundSpawningPoint && !___inKillAnimation && !((EnemyAI)__instance).isEnemyDead && (Object)(object)((EnemyAI)__instance).MeetsStandardPlayerCollisionConditions(other, ___inKillAnimation, false) != (Object)null) { float num = Vector3.Distance(((Component)__instance).transform.position, ___currentHidingSpot); bool flag = false; if (___timeSinceTakingDamage < 2.5f && (Object)(object)___lastHitByPlayer != (Object)null && num < 16f) { flag = true; } else if (((num < 7f) & ___dragging) && !___startedShootingTongue && (Object)(object)((EnemyAI)__instance).targetPlayer == (Object)(object)GameNetworkManager.Instance.localPlayerController) { flag = true; } if (flag) { int value = Plugin.ConfigManager.Damage.Value; PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController; if (localPlayerController.health <= value) { localPlayerController.KillPlayer(Vector3.up * 15f, true, (CauseOfDeath)6, 8, default(Vector3)); __instance.DoKillPlayerAnimationServerRpc((int)((EnemyAI)__instance).targetPlayer.playerClientId); } else { localPlayerController.DamagePlayer(value, true, true, (CauseOfDeath)6, 8, false, default(Vector3)); ((EnemyAI)__instance).SetEnemyStunned(true, Plugin.ConfigManager.DamageInterval.Value, localPlayerController); } } } return false; } public static bool IsLocalPlayerBeingDragged() { BushWolfEnemy[] array = Object.FindObjectsByType<BushWolfEnemy>((FindObjectsSortMode)0); foreach (BushWolfEnemy val in array) { if ((Object)(object)((EnemyAI)val).targetPlayer == (Object)(object)GameNetworkManager.Instance.localPlayerController) { return true; } } return false; } } [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerControllerBPatch { [HarmonyPatch("DropAllHeldItemsAndSync")] [HarmonyPrefix] private static bool DropAllHeldItemsAndSyncPatch() { if (BushWolfEnemyPatch.IsLocalPlayerBeingDragged()) { return Plugin.ConfigManager.DropAllItemsWhenGrabbed.Value; } return true; } } [HarmonyPatch(typeof(RoundManager))] internal class RoundManagerPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void StartPatch() { SetBushWolfMaxSpawnCount(); } private static void SetBushWolfMaxSpawnCount() { EnemyType enemyTypeFromResources = Utils.GetEnemyTypeFromResources("Bush Wolf"); if ((Object)(object)enemyTypeFromResources == (Object)null) { Plugin.logger.LogError((object)"Failed to set Kidnapper Fox max spawn count. Could not find EnemyType."); } else { enemyTypeFromResources.MaxCount = Plugin.ConfigManager.MaxSpawnCount.Value; } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }