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 SniffinFarts v1.0.1
plugins/SniffinFarts.dll
Decompiled 2 years agousing System; using System.Collections; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.Rendering; [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("SniffinFarts")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("SniffinFarts")] [assembly: AssemblyTitle("SniffinFarts")] [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; } } } [BepInPlugin("com.nilaier.sniffinfarts", "Sniffin' Farts", "1.0.1")] public class Plugin : BaseUnityPlugin { private Harmony harmony; private static float lastHealTime; private static Coroutine healingCoroutine; private void Awake() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown harmony = new Harmony("com.nilaier.sniffinfarts"); harmony.PatchAll(typeof(Plugin)); PluginConfig.BindConfig(((BaseUnityPlugin)this).Config); Debug.Log((object)"Plugin SniffinFarts is loaded!"); } [HarmonyPatch(typeof(PufferAI), "ShakeTailClientRpc")] [HarmonyPostfix] private static void PufferAI_ShakeTailClientRpc_Postfix(PufferAI __instance) { Debug.Log((object)"PufferAI_ShakeTailClientRpc_Postfix called"); ((MonoBehaviour)__instance).StartCoroutine(StartHealingCoroutineWithDelay(__instance, 0.6f)); } private static IEnumerator StartHealingCoroutineWithDelay(PufferAI pufferAI, float delay) { yield return (object)new WaitForSeconds(delay); ((MonoBehaviour)pufferAI).StartCoroutine(HealingCoroutine(pufferAI)); } private static IEnumerator HealingCoroutine(PufferAI pufferAI) { while (true) { PlayerControllerB localPlayer = GameNetworkManager.Instance.localPlayerController; if ((Object)(object)localPlayer != (Object)null && localPlayer.health < 100) { GameObject smokePrefab = GameObject.Find(((Object)pufferAI.smokePrefab).name + "(Clone)"); if ((Object)(object)smokePrefab != (Object)null) { float distance = Vector3.Distance(((Component)localPlayer).transform.position, smokePrefab.transform.position); if (distance <= PluginConfig.HealingRange.Value && Time.time - lastHealTime >= PluginConfig.HealingInterval.Value) { float healAmount = PluginConfig.HealingAmount.Value; int roundedHealAmount = Mathf.RoundToInt(healAmount); localPlayer.health = Mathf.Min(localPlayer.health + roundedHealAmount, 100); Debug.Log((object)$"Player healed by {roundedHealAmount}. New health: {localPlayer.health}"); localPlayer.increasingDrunknessThisFrame = true; localPlayer.drunkness += PluginConfig.DrunknessIncreasePerHeal.Value; Debug.Log((object)$"Player's drunkness increased by {PluginConfig.DrunknessIncreasePerHeal.Value}. New drunkness: {localPlayer.drunkness}"); if ((Object)(object)HUDManager.Instance != (Object)null && (Object)(object)HUDManager.Instance.drunknessFilter != (Object)null) { Volume drunknessFilter = HUDManager.Instance.drunknessFilter; drunknessFilter.weight += PluginConfig.DrunknessFilterIncreasePerHeal.Value; Debug.Log((object)$"Drunkness filter intensity increased by {PluginConfig.DrunknessFilterIncreasePerHeal.Value}. New intensity: {HUDManager.Instance.drunknessFilter.weight}"); } lastHealTime = Time.time; } } } yield return (object)new WaitForSeconds(PluginConfig.HealingInterval.Value); } } } public static class PluginConfig { public static ConfigEntry<float> HealingAmount; public static ConfigEntry<float> HealingInterval; public static ConfigEntry<float> HealingRange; public static ConfigEntry<float> DrunknessIncreasePerHeal; public static ConfigEntry<float> DrunknessFilterIncreasePerHeal; public static void BindConfig(ConfigFile config) { HealingAmount = config.Bind<float>("General", "HealingAmount", 1f, "The amount of health to heal the player per interval"); HealingInterval = config.Bind<float>("General", "HealingInterval", 0.3f, "The interval (in seconds) between each heal"); HealingRange = config.Bind<float>("General", "HealingRange", 10f, "The range within which the player gets healed"); DrunknessIncreasePerHeal = config.Bind<float>("General", "DrunknessIncreasePerHeal", 0.05f, "The amount to increase the player's drunkness per heal"); DrunknessFilterIncreasePerHeal = config.Bind<float>("General", "DrunknessFilterIncreasePerHeal", 0.01f, "The amount to increase the drunkness filter intensity per heal"); } }