using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using GameNetcodeStuff;
using HarmonyLib;
using MoreEmotes.Patch;
using Tools;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.InputSystem;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("FuckYouMod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("FuckYouMod")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("5ecc2bf2-af12-4e83-a6f1-cf2eacbf3060")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Tools
{
public class Reflection
{
public static object GetInstanceField(Type type, object instance, string fieldName)
{
BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
FieldInfo field = type.GetField(fieldName, bindingAttr);
return field.GetValue(instance);
}
public static object CallMethod(object instance, string methodName, params object[] args)
{
MethodInfo method = instance.GetType().GetMethod(methodName, BindingFlags.Instance | BindingFlags.NonPublic);
if (method != null)
{
return method.Invoke(instance, args);
}
return null;
}
}
}
namespace MoreEmotes
{
[BepInPlugin("MoreEmotes", "MoreEmotes-Sligili", "0.1.0")]
public class FuckYouModInitialization : BaseUnityPlugin
{
private Harmony _harmony;
private ConfigEntry<string> config_KeyEmote3;
private void Awake()
{
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Expected O, but got Unknown
((BaseUnityPlugin)this).Logger.LogInfo((object)"MoreEmotes loaded");
EmotePatch.animationsBundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "MoreEmotes/animationsbundle"));
EmotePatch.animatorBundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "MoreEmotes/animatorbundle"));
EmotePatch.local = EmotePatch.animatorBundle.LoadAsset<RuntimeAnimatorController>("Assets/MoreEmotes/NEWmetarig.controller");
EmotePatch.others = EmotePatch.animatorBundle.LoadAsset<RuntimeAnimatorController>("Assets/MoreEmotes/NEWmetarigOtherPlayers.controller");
ConfigFile();
_harmony = new Harmony("MoreEmotes");
_harmony.PatchAll(typeof(EmotePatch));
}
private void ConfigFile()
{
config_KeyEmote3 = ((BaseUnityPlugin)this).Config.Bind<string>("KEYBINDS", "Emote3", "3", "SUPPORTED KEYS A-Z | 0-9 | F1-F12 ");
EmotePatch.keyBind_Emote3 = config_KeyEmote3.Value;
}
}
public static class PluginInfo
{
public const string Guid = "MoreEmotes";
public const string Name = "MoreEmotes-Sligili";
public const string Ver = "0.1.0";
}
}
namespace MoreEmotes.Patch
{
internal class EmotePatch
{
public static AssetBundle animationsBundle;
public static AssetBundle animatorBundle;
private static int emote3ID = 3;
private static bool keyFlag_Emote3;
public static string keyBind_Emote3;
private static CallbackContext context;
public static RuntimeAnimatorController local;
public static RuntimeAnimatorController others;
[HarmonyPatch(typeof(PlayerControllerB), "Update")]
[HarmonyPostfix]
private static void UpdatePrefix(PlayerControllerB __instance)
{
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
if (!__instance.isPlayerControlled || !((NetworkBehaviour)__instance).IsOwner)
{
__instance.playerBodyAnimator.runtimeAnimatorController = others;
return;
}
if ((Object)(object)__instance.playerBodyAnimator != (Object)(object)local)
{
__instance.playerBodyAnimator.runtimeAnimatorController = local;
}
if (InputControlExtensions.IsPressed(((InputControl)Keyboard.current)[keyBind_Emote3], 0f) && !keyFlag_Emote3)
{
Debug.Log((object)"Pressed the Emote3 key");
keyFlag_Emote3 = true;
__instance.PerformEmote(context, emote3ID);
}
else if (!InputControlExtensions.IsPressed(((InputControl)Keyboard.current)[keyBind_Emote3], 0f))
{
keyFlag_Emote3 = false;
}
}
[HarmonyPatch(typeof(PlayerControllerB), "PerformEmote")]
[HarmonyPrefix]
private static void PerformEmotePrefix(CallbackContext context, int emoteID, PlayerControllerB __instance)
{
if ((emoteID >= 3 || ((CallbackContext)(ref context)).performed) && ((((NetworkBehaviour)__instance).IsOwner && __instance.isPlayerControlled && (!((NetworkBehaviour)__instance).IsServer || __instance.isHostPlayerObject)) || __instance.isTestingPlayer) && (bool)Reflection.CallMethod(__instance, "CheckConditionsForEmote") && !(__instance.timeSinceStartingEmote < 0.5f))
{
__instance.timeSinceStartingEmote = 0f;
__instance.performingEmote = true;
__instance.playerBodyAnimator.SetInteger("emoteNumber", emoteID);
__instance.StartPerformingEmoteServerRpc();
}
}
}
}