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 EmoteWhileInMotion v1.0.0
EmoteWhileInMotion.dll
Decompiled 2 years 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 GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: AssemblyCompany("EmoteWhileInMotion")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("A template for Lethal Company")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+43206f0475d7dae18e393eaa115cfd192399712f")] [assembly: AssemblyProduct("EmoteWhileInMotion")] [assembly: AssemblyTitle("EmoteWhileInMotion")] [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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace EmoteWhileInMotion { [BepInPlugin("EmoteWhileInMotion", "EmoteWhileInMotion", "1.0.0")] public class Plugin : BaseUnityPlugin { private readonly Harmony harmony = new Harmony("EmoteWhileInMotion"); private static Plugin Instance; public static ManualLogSource Logger; public static ConfigEntry<bool> EmoteWhileJumping; public static ConfigEntry<bool> EmoteWhileWalking; public static ConfigEntry<bool> EmoteWhileCrouching; public static ConfigEntry<bool> EmoteWhileGrabbingObject; public static ConfigEntry<bool> EmoteWhileTyping; public static ConfigEntry<string> DisableKey; public static bool DisableKeyPressed; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } Logger = ((BaseUnityPlugin)this).Logger; Logger.LogInfo((object)"Plugin EmoteWhileInMotion is loaded!"); EmoteWhileJumping = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "EmoteWhileJumping", true, "Whether or not to allow emotes while jumping."); EmoteWhileWalking = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "EmoteWhileWalking", true, "Whether or not to allow emotes while walking."); EmoteWhileCrouching = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "EmoteWhileCrouching", false, "Whether or not to allow emotes while crouching."); EmoteWhileGrabbingObject = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "EmoteWhileGrabbingObject", true, "Whether or not to allow emotes while grabbing an object."); EmoteWhileTyping = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "EmoteWhileTyping", true, "Whether or not to allow emotes while typing in chat."); DisableKey = ((BaseUnityPlugin)this).Config.Bind<string>("General", "DisableKey", "0", "The key to hold to disable emotes."); harmony.PatchAll(Assembly.GetExecutingAssembly()); } } public static class PluginInfo { public const string PLUGIN_GUID = "EmoteWhileInMotion"; public const string PLUGIN_NAME = "EmoteWhileInMotion"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace EmoteWhileInMotion.Patches { [HarmonyPatch] internal class PlayerControllerBPatch { [HarmonyPatch(typeof(PlayerControllerB), "CheckConditionsForEmote")] [HarmonyPostfix] private static void CheckConditionsForEmotePostfix(PlayerControllerB __instance, ref bool __result) { if (__instance.inSpecialInteractAnimation || __instance.isPlayerDead) { __result = false; } if (Plugin.EmoteWhileJumping.Value && __instance.isJumping) { __result = true; } if (Plugin.EmoteWhileWalking.Value && __instance.isWalking) { __result = true; } if (Plugin.EmoteWhileCrouching.Value && __instance.isCrouching) { __result = true; } if (Plugin.EmoteWhileGrabbingObject.Value && __instance.isGrabbingObjectAnimation) { __result = true; } if (Plugin.EmoteWhileTyping.Value && __instance.isTypingChat) { __result = true; } } [HarmonyPatch(typeof(PlayerControllerB), "Update")] [HarmonyPrefix] private static void UpdatePrefix(PlayerControllerB __instance) { if (__instance.isPlayerControlled && ((NetworkBehaviour)__instance).IsOwner) { if (InputControlExtensions.IsPressed(((InputControl)Keyboard.current)[Plugin.DisableKey.Value], 0f) && !Plugin.DisableKeyPressed) { Plugin.DisableKeyPressed = true; __instance.performingEmote = false; __instance.StopPerformingEmoteServerRpc(); __instance.timeSinceStartingEmote = 0f; } else if (!InputControlExtensions.IsPressed(((InputControl)Keyboard.current)[Plugin.DisableKey.Value], 0f)) { Plugin.DisableKeyPressed = false; } } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }