using System;
using System.Collections;
using System.Collections.Generic;
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.Bootstrap;
using BepInEx.Configuration;
using GameNetcodeStuff;
using HarmonyLib;
using MoreEmotes.Patch;
using MoreEmotes.Scripts;
using RuntimeNetcodeRPCValidator;
using TMPro;
using Tools;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Animations.Rigging;
using UnityEngine.Events;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;
using UnityEngine.InputSystem.Utilities;
using UnityEngine.UI;
[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 Ref
{
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 Method(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;
}
}
public class D : MonoBehaviour
{
public static bool Debug;
public static void L(string msg)
{
if (Debug)
{
Debug.Log((object)msg);
}
}
public static void W(string msg)
{
if (Debug)
{
Debug.LogWarning((object)msg);
}
}
}
}
namespace MoreEmotes
{
[BepInPlugin("MoreEmotes", "MoreEmotes-Sligili", "1.3.3")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class MoreEmotesInitialization : BaseUnityPlugin
{
private Harmony _harmony;
private NetcodeValidator netcodeValidator;
private ConfigEntry<string> config_KeyWheel;
private ConfigEntry<string> config_KeyWheel_c;
private ConfigEntry<bool> config_InventoryCheck;
private ConfigEntry<bool> config_UseConfigFile;
private ConfigEntry<string> config_KeyEmote3;
private ConfigEntry<string> config_KeyEmote4;
private ConfigEntry<string> config_KeyEmote5;
private ConfigEntry<string> config_KeyEmote6;
private ConfigEntry<string> config_KeyEmote7;
private ConfigEntry<string> config_KeyEmote8;
private ConfigEntry<string> config_KeyEmote9;
private ConfigEntry<string> config_KeyEmote10;
private void Awake()
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Expected O, but got Unknown
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Expected O, but got Unknown
((BaseUnityPlugin)this).Logger.LogInfo((object)"MoreEmotes loaded");
LoadAssetBundles();
LoadAssets();
ConfigFile();
SearchForIncompatibleMods();
_harmony = new Harmony("MoreEmotes");
_harmony.PatchAll(typeof(EmotePatch));
netcodeValidator = new NetcodeValidator("MoreEmotes");
netcodeValidator.PatchAll();
netcodeValidator.BindToPreExistingObjectByBehaviour<SignEmoteText, PlayerControllerB>();
netcodeValidator.BindToPreExistingObjectByBehaviour<SyncAnimatorToOthers, PlayerControllerB>();
}
private void LoadAssetBundles()
{
string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "MoreEmotes/animationsbundle");
string text2 = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "MoreEmotes/animatorbundle");
try
{
EmotePatch.AnimationsBundle = AssetBundle.LoadFromFile(text);
EmotePatch.AnimatorBundle = AssetBundle.LoadFromFile(text2);
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)("Failed to load AssetBundles. Make sure \"animatorsbundle\" and \"animationsbundle\" are inside the MoreEmotes folder.\nError: " + ex.Message));
}
}
private void LoadAssets()
{
string path = "Assets/MoreEmotes";
EmotePatch.local = EmotePatch.AnimatorBundle.LoadAsset<RuntimeAnimatorController>(Path.Combine(path, "NEWmetarig.controller"));
EmotePatch.others = EmotePatch.AnimatorBundle.LoadAsset<RuntimeAnimatorController>(Path.Combine(path, "NEWmetarigOtherPlayers.controller"));
MoreEmotesEvents.ClapSounds[0] = EmotePatch.AnimationsBundle.LoadAsset<AudioClip>(Path.Combine(path, "SingleClapEmote1.wav"));
MoreEmotesEvents.ClapSounds[1] = EmotePatch.AnimationsBundle.LoadAsset<AudioClip>(Path.Combine(path, "SingleClapEmote2.wav"));
EmotePatch.SettingsPrefab = EmotePatch.AnimationsBundle.LoadAsset<GameObject>(Path.Combine(path, "Resources/MoreEmotesPanel.prefab"));
EmotePatch.ButtonPrefab = EmotePatch.AnimationsBundle.LoadAsset<GameObject>(Path.Combine(path, "Resources/MoreEmotesButton.prefab"));
EmotePatch.LegsPrefab = EmotePatch.AnimationsBundle.LoadAsset<GameObject>(Path.Combine(path, "Resources/plegs.prefab"));
EmotePatch.SignPrefab = EmotePatch.AnimationsBundle.LoadAsset<GameObject>(Path.Combine(path, "Resources/Sign.prefab"));
EmotePatch.SignUIPrefab = EmotePatch.AnimationsBundle.LoadAsset<GameObject>(Path.Combine(path, "Resources/SignTextUI.prefab"));
EmotePatch.WheelPrefab = EmotePatch.AnimationsBundle.LoadAsset<GameObject>("Assets/MoreEmotes/Resources/MoreEmotesMenu.prefab");
}
private void ConfigFile()
{
EmotePatch.ConfigFile_Keybinds = new string[32];
config_KeyWheel = ((BaseUnityPlugin)this).Config.Bind<string>("EMOTE WHEEL", "Key", "v", (ConfigDescription)null);
EmotePatch.ConfigFile_WheelKeybind = config_KeyWheel.Value;
config_KeyWheel_c = ((BaseUnityPlugin)this).Config.Bind<string>("EMOTE WHEEL (Controller)", "Key", "leftshoulder", (ConfigDescription)null);
EmotePatch.ConfigFile_WheelKeybind_controller = config_KeyWheel_c.Value;
config_InventoryCheck = ((BaseUnityPlugin)this).Config.Bind<bool>("OTHERS", "InventoryCheck", true, "Prevents some emotes from performing while holding any item/scrap");
EmotePatch.ConfigFile_InventoryCheck = config_InventoryCheck.Value;
config_UseConfigFile = ((BaseUnityPlugin)this).Config.Bind<bool>("OTHERS", "ConfigFile", false, "Ignores all in-game saved settings and instead uses the config file");
EmotePatch.UseConfigFile = config_UseConfigFile.Value;
config_KeyEmote3 = ((BaseUnityPlugin)this).Config.Bind<string>("QUICK EMOTES", "Middle Finger", "3", (ConfigDescription)null);
EmotePatch.ConfigFile_Keybinds[2] = config_KeyEmote3.Value.Replace(" ", "");
config_KeyEmote4 = ((BaseUnityPlugin)this).Config.Bind<string>("QUICK EMOTES", "The Griddy", "6", (ConfigDescription)null);
EmotePatch.ConfigFile_Keybinds[5] = config_KeyEmote4.Value.Replace(" ", "");
config_KeyEmote5 = ((BaseUnityPlugin)this).Config.Bind<string>("QUICK EMOTES", "Shy", "5", (ConfigDescription)null);
EmotePatch.ConfigFile_Keybinds[4] = config_KeyEmote5.Value.Replace(" ", "");
config_KeyEmote6 = ((BaseUnityPlugin)this).Config.Bind<string>("QUICK EMOTES", "Clap", "4", (ConfigDescription)null);
EmotePatch.ConfigFile_Keybinds[3] = config_KeyEmote6.Value.Replace(" ", "");
config_KeyEmote7 = ((BaseUnityPlugin)this).Config.Bind<string>("QUICK EMOTES", "Twerk", "7", (ConfigDescription)null);
EmotePatch.ConfigFile_Keybinds[6] = config_KeyEmote7.Value.Replace(" ", "");
config_KeyEmote8 = ((BaseUnityPlugin)this).Config.Bind<string>("QUICK EMOTES", "Salute", "8", (ConfigDescription)null);
EmotePatch.ConfigFile_Keybinds[7] = config_KeyEmote8.Value.Replace(" ", "");
config_KeyEmote9 = ((BaseUnityPlugin)this).Config.Bind<string>("QUICK EMOTES", "Prisyadka", "9", (ConfigDescription)null);
EmotePatch.ConfigFile_Keybinds[8] = config_KeyEmote9.Value.Replace(" ", "");
config_KeyEmote10 = ((BaseUnityPlugin)this).Config.Bind<string>("QUICK EMOTES", "Sign", "0", (ConfigDescription)null);
EmotePatch.ConfigFile_Keybinds[9] = config_KeyEmote10.Value.Replace(" ", "");
}
private void SearchForIncompatibleMods()
{
foreach (KeyValuePair<string, PluginInfo> pluginInfo in Chainloader.PluginInfos)
{
BepInPlugin metadata = pluginInfo.Value.Metadata;
if (metadata.GUID.Equals("com.malco.lethalcompany.moreshipupgrades", StringComparison.OrdinalIgnoreCase) || metadata.GUID.Equals("Stoneman.LethalProgression", StringComparison.OrdinalIgnoreCase))
{
EmotePatch.IncompatibleStuff = true;
break;
}
}
}
}
public static class PluginInfo
{
public const string GUID = "MoreEmotes";
public const string NAME = "MoreEmotes-Sligili";
public const string VER = "1.3.3";
}
}
namespace MoreEmotes.Patch
{
public enum Emotes
{
D_Sign = 1010,
D_Clap = 1004,
D_Middle_Finger = 1003,
Dance = 1,
Point = 2,
Middle_Finger = 3,
Clap = 4,
Shy = 5,
The_Griddy = 6,
Twerk = 7,
Salute = 8,
Prisyadka = 9,
Sign = 10
}
public class EmotePatch
{
public static AssetBundle AnimationsBundle;
public static AssetBundle AnimatorBundle;
public static RuntimeAnimatorController local;
public static RuntimeAnimatorController others;
public static bool UseConfigFile;
public static string[] ConfigFile_Keybinds;
public static string ConfigFile_WheelKeybind;
public static string ConfigFile_WheelKeybind_controller;
public static bool ConfigFile_InventoryCheck;
public static string EmoteWheelKeyboard;
public static string EmoteWheelController;
public static bool IncompatibleStuff;
private static int s_currentEmoteID = 0;
private static float s_defaultPlayerSpeed;
private static bool[] s_wasPerformingEmote = new bool[32];
public static bool IsEmoteWheelOpen;
private static bool s_isPlayerFirstFrame;
private static bool s_isFirstTimeOnMenu;
private static bool s_isPlayerSpawning;
public const int AlternateEmoteIDOffset = 1000;
private static int[] s_doubleEmotesIDS = new int[2] { 3, 4 };
public static bool LocalArmsSeparatedFromCamera;
private static Transform s_freeArmsTarget;
private static Transform s_lockedArmsTarget;
private static CallbackContext emptyContext;
public static GameObject ButtonPrefab;
public static GameObject SettingsPrefab;
public static GameObject LegsPrefab;
public static GameObject SignPrefab;
public static GameObject SignUIPrefab;
public static GameObject WheelPrefab;
private static GameObject s_localPlayerLevelBadge;
private static GameObject s_localPlayerBetaBadge;
private static Transform s_legsMesh;
private static EmoteWheel s_selectionWheel;
private static SignUI s_customSignInputField;
private static SyncAnimatorToOthers s_syncAnimator;
private static int _AlternateEmoteIDOffset => 1000;
private static void InstantiateSettingsMenu(Transform container)
{
RebindButton.ConfigFile_Keybinds = ConfigFile_Keybinds;
if (!PlayerPrefs.HasKey("InvCheck") || UseConfigFile)
{
PlayerPrefs.SetInt("InvCheck", ConfigFile_InventoryCheck ? 1 : 0);
}
ToggleButton.s_InventoryCheck = (UseConfigFile ? ConfigFile_InventoryCheck : (PlayerPrefs.GetInt("InvCheck") == 1));
SetupUI.UseConfigFile = UseConfigFile;
SetupUI.InventoryCheck = ToggleButton.s_InventoryCheck;
GameObject gameObject = ((Component)((Component)container).transform.Find("SettingsPanel")).gameObject;
Object.Instantiate<GameObject>(ButtonPrefab, gameObject.transform).transform.SetSiblingIndex(7);
Object.Instantiate<GameObject>(SettingsPrefab, gameObject.transform);
gameObject.AddComponent<SetupUI>();
}
private static void CheckEmoteInput(string keyBind, bool needsEmptyHands, int emoteID, PlayerControllerB player)
{
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
Emotes emotes = (Emotes)emoteID;
string text = emotes.ToString();
bool flag;
if (UseConfigFile)
{
flag = ConfigFile_InventoryCheck;
keyBind = ConfigFile_Keybinds[emoteID - 1];
}
else
{
flag = PlayerPrefs.GetInt("InvCheck") == 1;
if (PlayerPrefs.HasKey(text))
{
keyBind = PlayerPrefs.GetString(text);
}
else
{
PlayerPrefs.SetString(text, keyBind);
}
}
if (!keyBind.Equals(string.Empty) && InputControlExtensions.IsPressed(((InputControl)Keyboard.current)[keyBind], 0f) && (!player.isHoldingObject || !needsEmptyHands || !flag))
{
player.PerformEmote(emptyContext, emoteID);
}
}
private static void CheckWheelInput(string keybind, string controller, PlayerControllerB player)
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
bool flag = false;
bool flag2 = false;
if (Gamepad.all.Count != 0 && !controller.Equals(string.Empty))
{
flag = InputControlExtensions.IsPressed(((InputControl)Gamepad.current)[controller], 0f);
}
if (keybind != string.Empty)
{
flag2 = InputControlExtensions.IsPressed(((InputControl)Keyboard.current)[keybind], 0f) && !((ButtonControl)Keyboard.current[(Key)55]).wasPressedThisFrame;
}
bool flag3 = flag || flag2;
if (flag3 && !IsEmoteWheelOpen && !player.isPlayerDead && !player.inTerminalMenu && !player.quickMenuManager.isMenuOpen && !player.isTypingChat && !s_customSignInputField.IsSignUIOpen)
{
IsEmoteWheelOpen = true;
Cursor.visible = true;
Cursor.lockState = (CursorLockMode)2;
((Component)s_selectionWheel).gameObject.SetActive(IsEmoteWheelOpen);
player.disableLookInput = true;
}
else
{
if (!IsEmoteWheelOpen || (flag3 && !player.quickMenuManager.isMenuOpen && !player.isTypingChat && !s_customSignInputField.IsSignUIOpen))
{
return;
}
int selectedEmoteID = s_selectionWheel.SelectedEmoteID;
if (!player.quickMenuManager.isMenuOpen && !s_customSignInputField.IsSignUIOpen)
{
Cursor.visible = false;
Cursor.lockState = (CursorLockMode)1;
}
if (!player.isPlayerDead && !player.quickMenuManager.isMenuOpen)
{
if (selectedEmoteID <= 3 || selectedEmoteID == 6 || !ConfigFile_InventoryCheck)
{
player.PerformEmote(emptyContext, selectedEmoteID);
}
else if (!player.isHoldingObject)
{
player.PerformEmote(emptyContext, selectedEmoteID);
}
}
if (!s_customSignInputField.IsSignUIOpen)
{
player.disableLookInput = false;
}
IsEmoteWheelOpen = false;
((Component)s_selectionWheel).gameObject.SetActive(IsEmoteWheelOpen);
}
}
private static void OnFirstLocalPlayerFrameWithNewAnimator(PlayerControllerB player)
{
s_isPlayerFirstFrame = false;
TurnControllerIntoAnOverrideController(player.playerBodyAnimator.runtimeAnimatorController);
s_syncAnimator = ((Component)player).GetComponent<SyncAnimatorToOthers>();
s_customSignInputField.Player = player;
s_freeArmsTarget = Object.Instantiate<Transform>(player.localArmsRotationTarget, player.localArmsRotationTarget.parent.parent);
s_lockedArmsTarget = player.localArmsRotationTarget;
Transform val = ((Component)player).transform.Find("ScavengerModel").Find("metarig").Find("spine")
.Find("spine.001")
.Find("spine.002")
.Find("spine.003");
s_localPlayerLevelBadge = ((Component)val.Find("LevelSticker")).gameObject;
s_localPlayerBetaBadge = ((Component)val.Find("BetaBadge")).gameObject;
player.SpawnPlayerAnimation();
}
private static void SpawnSign(PlayerControllerB player)
{
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Object.Instantiate<GameObject>(SignPrefab, ((Component)((Component)((Component)player).transform.Find("ScavengerModel")).transform.Find("metarig")).transform);
val.transform.SetSiblingIndex(6);
((Object)val).name = "Sign";
val.transform.localPosition = new Vector3(0.029f, -0.45f, 1.3217f);
val.transform.localRotation = Quaternion.Euler(65.556f, 180f, 180f);
}
private static void SpawnLegs(PlayerControllerB player)
{
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Object.Instantiate<GameObject>(LegsPrefab, ((Component)((Component)player.playerBodyAnimator).transform.parent).transform);
s_legsMesh = val.transform.Find("Mesh");
((Component)s_legsMesh).transform.parent = ((Component)player.playerBodyAnimator).transform.parent;
((Object)s_legsMesh).name = "LEGS";
GameObject gameObject = ((Component)val.transform.Find("Armature")).gameObject;
gameObject.transform.parent = ((Component)player.playerBodyAnimator).transform;
((Object)gameObject).name = "FistPersonLegs";
gameObject.transform.position = new Vector3(0f, 0.197f, 0f);
gameObject.transform.localScale = new Vector3(13.99568f, 13.99568f, 13.99568f);
Object.Destroy((Object)(object)val);
}
private static void ResetIKWeights(PlayerControllerB player)
{
Transform val = ((Component)player.playerBodyAnimator).transform.Find("Rig 1");
ChainIKConstraint component = ((Component)val.Find("RightArm")).GetComponent<ChainIKConstraint>();
ChainIKConstraint component2 = ((Component)val.Find("LeftArm")).GetComponent<ChainIKConstraint>();
TwoBoneIKConstraint component3 = ((Component)val.Find("RightLeg")).GetComponent<TwoBoneIKConstraint>();
TwoBoneIKConstraint component4 = ((Component)val.Find("LeftLeg")).GetComponent<TwoBoneIKConstraint>();
Transform val2 = ((Component)player.playerBodyAnimator).transform.Find("ScavengerModelArmsOnly").Find("metarig").Find("spine.003")
.Find("RigArms");
ChainIKConstraint component5 = ((Component)val2.Find("RightArm")).GetComponent<ChainIKConstraint>();
ChainIKConstraint component6 = ((Component)val2.Find("LeftArm")).GetComponent<ChainIKConstraint>();
((RigConstraint<ChainIKConstraintJob, ChainIKConstraintData, ChainIKConstraintJobBinder<ChainIKConstraintData>>)(object)component).weight = 1f;
((RigConstraint<ChainIKConstraintJob, ChainIKConstraintData, ChainIKConstraintJobBinder<ChainIKConstraintData>>)(object)component2).weight = 1f;
((RigConstraint<ChainIKConstraintJob, ChainIKConstraintData, ChainIKConstraintJobBinder<ChainIKConstraintData>>)(object)component).weight = 1f;
((RigConstraint<TwoBoneIKConstraintJob, TwoBoneIKConstraintData, TwoBoneIKConstraintJobBinder<TwoBoneIKConstraintData>>)(object)component4).weight = 1f;
((RigConstraint<ChainIKConstraintJob, ChainIKConstraintData, ChainIKConstraintJobBinder<ChainIKConstraintData>>)(object)component5).weight = 1f;
((RigConstraint<ChainIKConstraintJob, ChainIKConstraintData, ChainIKConstraintJobBinder<ChainIKConstraintData>>)(object)component6).weight = 1f;
}
private static void UpdateLegsMaterial(PlayerControllerB player)
{
((Renderer)((Component)s_legsMesh).GetComponent<SkinnedMeshRenderer>()).material = ((Renderer)((Component)((Component)((Component)player.playerBodyAnimator).transform.parent).transform.Find("LOD1")).gameObject.GetComponent<SkinnedMeshRenderer>()).material;
}
private static void TogglePlayerBadges(bool enabled)
{
if ((Object)(object)s_localPlayerBetaBadge != (Object)null)
{
((Renderer)s_localPlayerBetaBadge.GetComponent<MeshRenderer>()).enabled = enabled;
}
if ((Object)(object)s_localPlayerLevelBadge != (Object)null)
{
((Renderer)s_localPlayerLevelBadge.GetComponent<MeshRenderer>()).enabled = enabled;
}
else
{
Debug.LogError((object)"[MoreEmotes-Sligili] Couldn't find the level badge");
}
}
private static bool CheckIfTooManyEmotesIsPlaying(PlayerControllerB player)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
Animator playerBodyAnimator = player.playerBodyAnimator;
AnimatorStateInfo currentAnimatorStateInfo = playerBodyAnimator.GetCurrentAnimatorStateInfo(1);
return ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Dance1") && player.performingEmote && GetAnimatorEmoteClipName(playerBodyAnimator) != "Dance1";
}
private static string GetAnimatorEmoteClipName(Animator animator)
{
AnimatorClipInfo[] currentAnimatorClipInfo = animator.GetCurrentAnimatorClipInfo(1);
return ((Object)((AnimatorClipInfo)(ref currentAnimatorClipInfo[0])).clip).name;
}
private static void TurnControllerIntoAnOverrideController(RuntimeAnimatorController controller)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
if (!(controller is AnimatorOverrideController))
{
controller = (RuntimeAnimatorController)new AnimatorOverrideController(controller);
}
}
public static void UpdateWheelKeybinds()
{
if (UseConfigFile)
{
EmoteWheelKeyboard = ConfigFile_WheelKeybind;
EmoteWheelController = ConfigFile_WheelKeybind_controller;
return;
}
if (!PlayerPrefs.HasKey("Emote_Wheel_c"))
{
PlayerPrefs.SetString("Emote_Wheel_c", ConfigFile_WheelKeybind_controller);
}
EmoteWheelController = PlayerPrefs.GetString("Emote_Wheel_c");
if (!PlayerPrefs.HasKey("Emote_Wheel"))
{
PlayerPrefs.SetString("Emote_Wheel", ConfigFile_WheelKeybind);
}
EmoteWheelKeyboard = PlayerPrefs.GetString("Emote_Wheel");
if (!PlayerPrefs.HasKey("InvCheck"))
{
PlayerPrefs.SetInt("InvCheck", ConfigFile_InventoryCheck ? 1 : 0);
}
ConfigFile_InventoryCheck = PlayerPrefs.GetInt("InvCheck") == 1;
}
[HarmonyPatch(typeof(MenuManager), "Start")]
[HarmonyPostfix]
private static void MenuStart(MenuManager __instance)
{
D.Debug = true;
try
{
InstantiateSettingsMenu(((Component)((Component)__instance).transform.parent).transform.Find("MenuContainer"));
}
catch (Exception ex)
{
if (!s_isFirstTimeOnMenu)
{
s_isFirstTimeOnMenu = true;
}
else
{
Debug.LogError((object)(ex.Message + "\n[MoreEmotes-Sligili] Couldn't find MenuContainer"));
}
}
}
[HarmonyPatch(typeof(RoundManager), "Awake")]
[HarmonyPostfix]
private static void AwakePost(RoundManager __instance)
{
if (!PlayerPrefs.HasKey("InvCheck"))
{
PlayerPrefs.SetInt("InvCheck", ConfigFile_InventoryCheck ? 1 : 0);
}
UpdateWheelKeybinds();
GameObject gameObject = ((Component)((Component)GameObject.Find("Systems").gameObject.transform.Find("UI")).gameObject.transform.Find("Canvas")).gameObject;
InstantiateSettingsMenu(gameObject.transform.Find("QuickMenu"));
s_selectionWheel = Object.Instantiate<GameObject>(WheelPrefab, gameObject.transform).AddComponent<EmoteWheel>();
s_customSignInputField = Object.Instantiate<GameObject>(SignUIPrefab, gameObject.transform).AddComponent<SignUI>();
EmoteWheel.Keybinds = new string[ConfigFile_Keybinds.Length + 1];
EmoteWheel.Keybinds = ConfigFile_Keybinds;
s_isPlayerFirstFrame = true;
}
[HarmonyPatch(typeof(HUDManager), "EnableChat_performed")]
[HarmonyPrefix]
private static bool OpenChatPrefix()
{
if (s_customSignInputField.IsSignUIOpen)
{
return false;
}
return true;
}
[HarmonyPatch(typeof(HUDManager), "SubmitChat_performed")]
[HarmonyPrefix]
private static bool SubmitChatPrefix()
{
if (s_customSignInputField.IsSignUIOpen)
{
return false;
}
return true;
}
[HarmonyPatch(typeof(PlayerControllerB), "Start")]
[HarmonyPostfix]
private static void StartPostfix(PlayerControllerB __instance)
{
((Component)((Component)((Component)__instance).gameObject.transform.Find("ScavengerModel")).transform.Find("metarig")).gameObject.AddComponent<MoreEmotesEvents>().Player = __instance;
s_defaultPlayerSpeed = __instance.movementSpeed;
((Component)__instance).gameObject.AddComponent<CustomAnimationObjects>();
SpawnSign(__instance);
}
[HarmonyPatch(typeof(PlayerControllerB), "Update")]
[HarmonyPostfix]
private static void UpdatePostfix(PlayerControllerB __instance)
{
if (!__instance.isPlayerControlled || !((NetworkBehaviour)__instance).IsOwner)
{
__instance.playerBodyAnimator.runtimeAnimatorController = others;
TurnControllerIntoAnOverrideController(__instance.playerBodyAnimator.runtimeAnimatorController);
return;
}
if ((Object)(object)__instance.playerBodyAnimator != (Object)(object)local)
{
if (s_isPlayerFirstFrame)
{
SpawnLegs(__instance);
}
__instance.playerBodyAnimator.runtimeAnimatorController = local;
if (s_isPlayerFirstFrame)
{
OnFirstLocalPlayerFrameWithNewAnimator(__instance);
}
if (s_isPlayerSpawning)
{
__instance.SpawnPlayerAnimation();
s_isPlayerSpawning = false;
}
}
if (!IncompatibleStuff)
{
if ((bool)Ref.Method(__instance, "CheckConditionsForEmote") && __instance.performingEmote)
{
switch (s_currentEmoteID)
{
case 6:
__instance.movementSpeed = s_defaultPlayerSpeed / 2f;
break;
case 9:
__instance.movementSpeed = s_defaultPlayerSpeed / 3f;
break;
}
}
else
{
__instance.movementSpeed = s_defaultPlayerSpeed;
}
}
__instance.localArmsRotationTarget = (LocalArmsSeparatedFromCamera ? (__instance.localArmsRotationTarget = s_freeArmsTarget) : (__instance.localArmsRotationTarget = s_lockedArmsTarget));
CheckWheelInput(EmoteWheelKeyboard, EmoteWheelController, __instance);
if (!__instance.quickMenuManager.isMenuOpen && !IsEmoteWheelOpen)
{
CheckEmoteInput(ConfigFile_Keybinds[2], needsEmptyHands: false, 3, __instance);
CheckEmoteInput(ConfigFile_Keybinds[3], needsEmptyHands: true, 4, __instance);
CheckEmoteInput(ConfigFile_Keybinds[4], needsEmptyHands: true, 5, __instance);
CheckEmoteInput(ConfigFile_Keybinds[5], needsEmptyHands: false, 6, __instance);
CheckEmoteInput(ConfigFile_Keybinds[6], needsEmptyHands: true, 7, __instance);
CheckEmoteInput(ConfigFile_Keybinds[7], needsEmptyHands: true, 8, __instance);
CheckEmoteInput(ConfigFile_Keybinds[8], needsEmptyHands: true, 9, __instance);
CheckEmoteInput(ConfigFile_Keybinds[9], needsEmptyHands: true, 10, __instance);
}
}
[HarmonyPatch(typeof(PlayerControllerB), "Update")]
[HarmonyPrefix]
private static void UpdatePrefix(PlayerControllerB __instance)
{
if (__instance.performingEmote)
{
s_wasPerformingEmote[__instance.playerClientId] = true;
}
if (!__instance.performingEmote && s_wasPerformingEmote[__instance.playerClientId])
{
s_wasPerformingEmote[__instance.playerClientId] = false;
ResetIKWeights(__instance);
}
}
[HarmonyPatch(typeof(PlayerControllerB), "SpawnPlayerAnimation")]
[HarmonyPrefix]
private static void OnLocalPlayerSpawn(PlayerControllerB __instance)
{
if (((NetworkBehaviour)__instance).IsOwner && __instance.isPlayerControlled)
{
s_isPlayerSpawning = true;
}
}
[HarmonyPatch(typeof(PlayerControllerB), "CheckConditionsForEmote")]
[HarmonyPrefix]
private static bool CheckConditionsPrefix(ref bool __result, PlayerControllerB __instance)
{
bool flag = (bool)Ref.GetInstanceField(typeof(PlayerControllerB), __instance, "isJumping");
bool flag2 = (bool)Ref.GetInstanceField(typeof(PlayerControllerB), __instance, "isWalking");
if (s_currentEmoteID == 6 || s_currentEmoteID == 9)
{
__result = !__instance.inSpecialInteractAnimation && !__instance.isPlayerDead && !flag && __instance.moveInputVector.x == 0f && !__instance.isSprinting && !__instance.isCrouching && !__instance.isClimbingLadder && !__instance.isGrabbingObjectAnimation && !__instance.inTerminalMenu && !__instance.isTypingChat;
return false;
}
if (s_currentEmoteID == 10 || s_currentEmoteID == 1010)
{
__result = !__instance.inSpecialInteractAnimation && !__instance.isPlayerDead && !flag && !flag2 && !__instance.isCrouching && !__instance.isClimbingLadder && !__instance.isGrabbingObjectAnimation && !__instance.inTerminalMenu;
return false;
}
return true;
}
[HarmonyPatch(typeof(PlayerControllerB), "PerformEmote")]
[HarmonyPrefix]
private static bool PerformEmotePrefix(CallbackContext context, int emoteID, PlayerControllerB __instance)
{
if ((emoteID < 0 || CheckIfTooManyEmotesIsPlaying(__instance)) && emoteID > 2)
{
return false;
}
if ((!((NetworkBehaviour)__instance).IsOwner || !__instance.isPlayerControlled || (((NetworkBehaviour)__instance).IsServer && !__instance.isHostPlayerObject)) && !__instance.isTestingPlayer)
{
return false;
}
if (s_customSignInputField.IsSignUIOpen && emoteID != 1010)
{
return false;
}
if (emoteID > 0 && emoteID < 3 && !IsEmoteWheelOpen && !((CallbackContext)(ref context)).performed)
{
return false;
}
int[] array = s_doubleEmotesIDS;
foreach (int num in array)
{
int num2 = num + _AlternateEmoteIDOffset;
bool flag = (UseConfigFile ? ConfigFile_InventoryCheck : (PlayerPrefs.GetInt("InvCheck") == 1));
if (emoteID == num && s_currentEmoteID == emoteID && __instance.performingEmote && (!__instance.isHoldingObject || !flag))
{
if (emoteID == num)
{
emoteID += _AlternateEmoteIDOffset;
}
else
{
emoteID -= 1000;
}
}
}
if ((s_currentEmoteID != emoteID && emoteID < 3) || !__instance.performingEmote)
{
ResetIKWeights(__instance);
}
if (!(bool)Ref.Method(__instance, "CheckConditionsForEmote"))
{
return false;
}
if (__instance.timeSinceStartingEmote < 0.5f)
{
return false;
}
s_currentEmoteID = emoteID;
Action action = delegate
{
__instance.timeSinceStartingEmote = 0f;
__instance.playerBodyAnimator.SetInteger("emoteNumber", emoteID);
__instance.performingEmote = true;
__instance.StartPerformingEmoteServerRpc();
s_syncAnimator.UpdateEmoteIDForOthers(emoteID);
TogglePlayerBadges(enabled: false);
};
switch (emoteID)
{
case 9:
action = (Action)Delegate.Combine(action, (Action)delegate
{
UpdateLegsMaterial(__instance);
});
break;
case 10:
action = (Action)Delegate.Combine(action, (Action)delegate
{
((Component)s_customSignInputField).gameObject.SetActive(true);
});
break;
}
action();
return false;
}
[HarmonyPatch(typeof(PlayerControllerB), "StopPerformingEmoteServerRpc")]
[HarmonyPostfix]
private static void StopPerformingEmoteServerPrefix(PlayerControllerB __instance)
{
if (((NetworkBehaviour)__instance).IsOwner && __instance.isPlayerControlled)
{
__instance.playerBodyAnimator.SetInteger("emoteNumber", 0);
}
TogglePlayerBadges(enabled: true);
s_syncAnimator.UpdateEmoteIDForOthers(0);
s_currentEmoteID = 0;
}
}
}
namespace MoreEmotes.Scripts
{
public class MoreEmotesEvents : MonoBehaviour
{
private Animator _playerAnimator;
private AudioSource _playerAudioSource;
public static AudioClip[] ClapSounds = (AudioClip[])(object)new AudioClip[2];
public PlayerControllerB Player;
private void Start()
{
_playerAnimator = ((Component)this).GetComponent<Animator>();
_playerAudioSource = Player.movementAudio;
}
public void PlayClapSound()
{
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
if (Player.performingEmote)
{
int currentEmoteID = GetCurrentEmoteID();
if (!((NetworkBehaviour)Player).IsOwner || !Player.isPlayerControlled || currentEmoteID == 4)
{
bool flag = Player.isInHangarShipRoom && Player.playersManager.hangarDoorsClosed;
RoundManager.Instance.PlayAudibleNoise(((Component)Player).transform.position, 22f, 0.6f, 0, flag, 6);
_playerAudioSource.pitch = Random.Range(0.59f, 0.79f);
_playerAudioSource.PlayOneShot(ClapSounds[Random.Range(0, ClapSounds.Length)]);
}
}
}
public void PlayFootstepSound()
{
if (Player.performingEmote)
{
int currentEmoteID = GetCurrentEmoteID();
if ((!((NetworkBehaviour)Player).IsOwner || !Player.isPlayerControlled || currentEmoteID == 6 || currentEmoteID == 8 || currentEmoteID == 9) && ((Vector2)(ref Player.moveInputVector)).sqrMagnitude == 0f)
{
Player.PlayFootstepLocal();
Player.PlayFootstepServer();
}
}
}
private int GetCurrentEmoteID()
{
int num = _playerAnimator.GetInteger("emoteNumber");
if (num >= 1000)
{
num -= 1000;
}
return num;
}
}
public class SignEmoteText : NetworkBehaviour
{
private PlayerControllerB _playerInstance;
private TextMeshPro _signModelText;
public string Text => ((TMP_Text)_signModelText).text;
private void Start()
{
_playerInstance = ((Component)this).GetComponent<PlayerControllerB>();
_signModelText = ((Component)((Component)_playerInstance).transform.Find("ScavengerModel").Find("metarig").Find("Sign")
.Find("Text")).GetComponent<TextMeshPro>();
}
public void UpdateSignText(string newText)
{
if (((NetworkBehaviour)_playerInstance).IsOwner && _playerInstance.isPlayerControlled)
{
UpdateSignTextServerRpc(newText);
}
}
[ServerRpc(RequireOwnership = false)]
private void UpdateSignTextServerRpc(string newText)
{
UpdateSignTextClientRpc(newText);
}
[ClientRpc]
private void UpdateSignTextClientRpc(string newText)
{
((TMP_Text)_signModelText).text = newText;
}
}
public class EmoteWheel : MonoBehaviour
{
private RectTransform _graphics_selectedBlock;
private RectTransform _graphics_selectionArrow;
private Text _graphics_emoteInformation;
private Text _graphics_pageInformation;
private int _blocksNumber = 8;
private int _selectedBlock = 1;
private float _changePageCooldown = 0.1f;
private float _selectionArrowLerpSpeed = 30f;
private float _angle;
private GameObject[] _pages;
public float WheelMovementDeadzone = 3.3f;
public float WheelMovementDeadzoneController = 0.7f;
public static string[] Keybinds;
private Vector2 _wheelCenter;
private Vector2 _lastMouseCoords;
public int SelectedPageNumber { get; private set; }
public int SelectedEmoteID { get; private set; }
public bool IsUsingController { get; private set; }
private void Awake()
{
GetVanillaKeybinds();
FindGraphics();
FindPages(((Component)this).gameObject.transform.Find("FunctionalContent"));
UpdatePageInfo();
}
private void OnEnable()
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
_wheelCenter = new Vector2((float)(Screen.width / 2), (float)(Screen.height / 2));
Mouse.current.WarpCursorPosition(_wheelCenter);
}
private void GetVanillaKeybinds()
{
PlayerInput component = GameObject.Find("PlayerSettingsObject").GetComponent<PlayerInput>();
if ((Object)(object)component == (Object)null)
{
Debug.LogError((object)" MoreEmotes: PlayerSettingsObject is null");
return;
}
Keybinds[0] = InputActionRebindingExtensions.GetBindingDisplayString(component.currentActionMap.FindAction("Emote1", false), 0, (DisplayStringOptions)0);
Keybinds[1] = InputActionRebindingExtensions.GetBindingDisplayString(component.currentActionMap.FindAction("Emote2", false), 0, (DisplayStringOptions)0);
}
private void FindGraphics()
{
_graphics_selectionArrow = ((Component)((Component)((Component)this).gameObject.transform.Find("Graphics")).gameObject.transform.Find("SelectionArrow")).gameObject.GetComponent<RectTransform>();
_graphics_selectedBlock = ((Component)((Component)this).gameObject.transform.Find("SelectedEmote")).gameObject.GetComponent<RectTransform>();
_graphics_emoteInformation = ((Component)((Component)((Component)this).gameObject.transform.Find("Graphics")).gameObject.transform.Find("EmoteInfo")).GetComponent<Text>();
_graphics_pageInformation = ((Component)((Component)((Component)this).gameObject.transform.Find("Graphics")).gameObject.transform.Find("PageNumber")).GetComponent<Text>();
}
private void FindPages(Transform contentParent)
{
_pages = (GameObject[])(object)new GameObject[((Component)contentParent).transform.childCount];
_graphics_pageInformation.text = "< Page " + (SelectedPageNumber + 1) + "/" + _pages.Length + " >";
for (int i = 0; i < ((Component)contentParent).transform.childCount; i++)
{
_pages[i] = ((Component)((Component)contentParent).transform.GetChild(i)).gameObject;
}
}
private void Update()
{
ControllerInput();
if (!IsUsingController)
{
MouseInput();
}
Cursor.visible = !IsUsingController;
UpdateSelectionArrow();
PageSelection();
SelectedEmoteID = _selectedBlock + Mathf.RoundToInt((float)(_blocksNumber / 4)) + _blocksNumber * SelectedPageNumber;
UpdateEmoteInfo();
}
private unsafe void ControllerInput()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
if (Gamepad.all.Count == 0)
{
IsUsingController = false;
return;
}
float num = ((InputControl<float>)(object)((Vector2Control)Gamepad.current.rightStick).x).ReadUnprocessedValue();
float num2 = ((InputControl<float>)(object)((Vector2Control)Gamepad.current.rightStick).y).ReadUnprocessedValue();
if (Mathf.Abs(num) < WheelMovementDeadzoneController && Mathf.Abs(num2) < WheelMovementDeadzoneController)
{
if (System.Runtime.CompilerServices.Unsafe.Read<Vector2>((void*)((InputControl<Vector2>)(object)((Pointer)Mouse.current).position).value) != _lastMouseCoords)
{
IsUsingController = false;
}
}
else
{
IsUsingController = true;
_lastMouseCoords = System.Runtime.CompilerServices.Unsafe.Read<Vector2>((void*)((InputControl<Vector2>)(object)((Pointer)Mouse.current).position).value);
WheelSelection(Vector2.zero, num, num2);
}
}
private void MouseInput()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
if (!(Vector2.Distance(_wheelCenter, ((InputControl<Vector2>)(object)((Pointer)Mouse.current).position).ReadValue()) < WheelMovementDeadzone))
{
WheelSelection(_wheelCenter, ((InputControl<float>)(object)((Pointer)Mouse.current).position.x).ReadValue(), ((InputControl<float>)(object)((Pointer)Mouse.current).position.y).ReadValue());
}
}
private void WheelSelection(Vector2 origin, float xAxisValue, float yAxisValue)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
bool flag = xAxisValue > origin.x;
bool flag2 = yAxisValue > origin.y;
int num = ((!flag) ? (flag2 ? 2 : 3) : (flag2 ? 1 : 4));
float num2 = (yAxisValue - origin.y) / (xAxisValue - origin.x);
float num3 = 180 * (num - ((num <= 2) ? 1 : 2));
_angle = Mathf.Atan(num2) * (180f / (float)Math.PI) + num3;
if (_angle == 90f)
{
_angle = 270f;
}
else if (_angle == 270f)
{
_angle = 90f;
}
float num4 = 360 / _blocksNumber;
_selectedBlock = Mathf.RoundToInt((_angle - num4 * 1.5f) / num4);
((Transform)_graphics_selectedBlock).localRotation = Quaternion.Euler(((Component)this).transform.rotation.z, ((Component)this).transform.rotation.y, num4 * (float)_selectedBlock);
}
private void PageSelection()
{
UpdatePageInfo();
if (_changePageCooldown > 0f)
{
_changePageCooldown -= Time.deltaTime;
return;
}
int num;
if (IsUsingController)
{
if (!Gamepad.current.dpad.left.isPressed && !Gamepad.current.dpad.right.isPressed)
{
return;
}
num = (Gamepad.current.dpad.left.isPressed ? 1 : (-1));
}
else
{
if (((InputControl<float>)(object)((Vector2Control)Mouse.current.scroll).y).ReadValue() == 0f)
{
return;
}
num = ((((InputControl<float>)(object)((Vector2Control)Mouse.current.scroll).y).ReadValue() > 0f) ? 1 : (-1));
}
GameObject[] pages = _pages;
foreach (GameObject val in pages)
{
val.SetActive(false);
}
SelectedPageNumber = (SelectedPageNumber + num + _pages.Length) % _pages.Length;
_pages[SelectedPageNumber].SetActive(true);
_changePageCooldown = ((!IsUsingController) ? 0.1f : 0.3f);
}
private void UpdatePageInfo()
{
_graphics_pageInformation.text = $"<color=#fe6b02><</color> Page {SelectedPageNumber + 1}/{_pages.Length} <color=#fe6b02>></color>";
}
private void UpdateEmoteInfo()
{
string text = ((SelectedEmoteID > Keybinds.Length) ? "" : Keybinds[SelectedEmoteID - 1]);
int num = 0;
foreach (Emotes value in Enum.GetValues(typeof(Emotes)))
{
if (value >= Emotes.Dance && value < (Emotes)64)
{
num++;
}
}
string text2 = ((SelectedEmoteID > num) ? "EMPTY" : ((Emotes)SelectedEmoteID).ToString().Replace("_", " "));
if (SelectedEmoteID > 2 && SelectedEmoteID <= Keybinds.Length)
{
if (!PlayerPrefs.HasKey(text2.Replace(" ", "_")))
{
PlayerPrefs.SetString(text2.Replace(" ", "_"), (SelectedEmoteID > Keybinds.Length) ? "" : Keybinds[SelectedEmoteID - 1]);
}
else
{
text = PlayerPrefs.GetString(text2.Replace(" ", "_"));
}
}
text = "<size=120>[" + text + "]</size>";
_graphics_emoteInformation.text = text2 + "\n" + text.ToUpper();
}
private void UpdateSelectionArrow()
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
float num = 360 / _blocksNumber;
Quaternion val = Quaternion.Euler(0f, 0f, _angle - num * 2f);
((Transform)_graphics_selectionArrow).localRotation = Quaternion.Lerp(((Transform)_graphics_selectionArrow).localRotation, val, Time.deltaTime * _selectionArrowLerpSpeed);
}
}
public class RebindButton : MonoBehaviour
{
public static string[] ConfigFile_Keybinds;
private string _defaultKey;
private string _playerPrefsString;
private Transform _waitingForInput;
private Text _keyInfo;
public bool IsControllerButton { get; private set; } = false;
private void Start()
{
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Expected O, but got Unknown
string text = ((Component)((Component)this).gameObject.transform.Find("Description")).GetComponent<Text>().text;
IsControllerButton = GetControllerFlag();
_playerPrefsString = ((Component)((Component)this).gameObject.transform.Find("Description")).GetComponent<Text>().text.Replace(" ", "_") + (IsControllerButton ? "_c" : "");
_defaultKey = GetDefaultKey(text);
FindComponents();
((UnityEvent)((Component)this).GetComponent<Button>().onClick).AddListener(new UnityAction(GetKey));
if (!PlayerPrefs.HasKey(_playerPrefsString))
{
PlayerPrefs.SetString(_playerPrefsString, _defaultKey);
}
SetKeybind(PlayerPrefs.GetString(_playerPrefsString));
}
private string GetDefaultKey(string emoteName)
{
if (Enum.TryParse<Emotes>(emoteName.Replace(" ", "_"), out var result))
{
return ConfigFile_Keybinds[(int)(result - 1)];
}
return IsControllerButton ? "leftshoulder" : "V";
}
private bool GetControllerFlag()
{
Transform val = ((Component)this).gameObject.transform.Find("Description").Find("Subtext");
if ((Object)(object)val == (Object)null)
{
return false;
}
Text val2 = default(Text);
if (((Component)val).TryGetComponent<Text>(ref val2))
{
return val2.text.Equals("(Controller)", StringComparison.OrdinalIgnoreCase);
}
return false;
}
private void FindComponents()
{
((Component)((Component)((Component)this).transform.parent).transform.Find("Delete")).gameObject.AddComponent<DeleteButton>();
_keyInfo = ((Component)((Component)this).transform.Find("InputText")).GetComponent<Text>();
_waitingForInput = ((Component)this).transform.Find("wait");
}
public void SetKeybind(string key)
{
List<string> list = new List<string> { "up", "down", "left", "right" };
if (list.Contains(key.ToLower()) && key.Length < 5)
{
key = "dpad/" + key;
}
PlayerPrefs.SetString(_playerPrefsString, key);
_keyInfo.text = key.ToUpper();
((MonoBehaviour)this).StopAllCoroutines();
((Component)_waitingForInput).gameObject.SetActive(false);
}
private void GetKey()
{
((Component)_waitingForInput).gameObject.SetActive(true);
((MonoBehaviour)this).StartCoroutine(WaitForKey(delegate(string key)
{
SetKeybind(key);
}));
}
private IEnumerator WaitForKey(Action<string> callback)
{
while (!((ButtonControl)Keyboard.current.anyKey).wasPressedThisFrame || (!((InputDevice)Gamepad.current).wasUpdatedThisFrame && !InputControlExtensions.IsActuated((InputControl)(object)Gamepad.current.leftStick, 0f) && !InputControlExtensions.IsActuated((InputControl)(object)Gamepad.current.rightStick, 0f)))
{
yield return (object)new WaitForEndOfFrame();
Observable.CallOnce<InputControl>(InputSystem.onAnyButtonPress, (Action<InputControl>)delegate(InputControl ctrl)
{
callback(((ctrl.device == Gamepad.current && IsControllerButton) || (ctrl.device == Keyboard.current && !IsControllerButton)) ? ctrl.name : _defaultKey);
});
}
}
}
public class DeleteButton : MonoBehaviour
{
private void Start()
{
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Expected O, but got Unknown
RebindButton _rebindButton = ((Component)((Component)((Component)this).transform.parent).transform.Find("Button")).GetComponent<RebindButton>();
((UnityEvent)((Component)this).GetComponent<Button>().onClick).AddListener((UnityAction)delegate
{
_rebindButton.SetKeybind(string.Empty);
});
}
}
public class ToggleButton : MonoBehaviour
{
private Toggle _toggle;
public static bool s_InventoryCheck;
public string PlayerPrefsString;
private void Start()
{
_toggle = ((Component)this).GetComponent<Toggle>();
_toggle.isOn = s_InventoryCheck;
((UnityEvent<bool>)(object)_toggle.onValueChanged).AddListener((UnityAction<bool>)SetNewValue);
if (!PlayerPrefs.HasKey(PlayerPrefsString))
{
SetNewValue(s_InventoryCheck);
}
}
public void SetNewValue(bool arg)
{
PlayerPrefs.SetInt(PlayerPrefsString, arg ? 1 : 0);
}
}
public class EnableDisableButton : MonoBehaviour
{
public GameObject[] ToAlternateUI = (GameObject[])(object)new GameObject[1];
private void Start()
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Expected O, but got Unknown
((UnityEvent)((Component)this).GetComponent<Button>().onClick).AddListener((UnityAction)delegate
{
GameObject[] toAlternateUI = ToAlternateUI;
foreach (GameObject val in toAlternateUI)
{
val.SetActive((!val.activeInHierarchy) ? true : false);
}
});
if (((Object)((Component)this).gameObject).name.Equals("BackButton", StringComparison.OrdinalIgnoreCase))
{
ToAlternateUI[0] = ((Component)((Component)this).transform.parent).gameObject;
}
if (((Object)((Component)this).gameObject).name.Equals("MoreEmotesButton(Clone)", StringComparison.OrdinalIgnoreCase))
{
ToAlternateUI[0] = ((Component)((Component)((Component)this).transform.parent).gameObject.transform.Find("MoreEmotesPanel(Clone)")).gameObject;
}
}
}
public class SetupUI : MonoBehaviour
{
public static bool UseConfigFile;
public static bool InventoryCheck;
private void Awake()
{
Transform settingsUIPanel = ((Component)this).transform.Find("MoreEmotesPanel(Clone)");
((Component)settingsUIPanel.Find("Version")).GetComponent<Text>().text = "1.3.3 - Sligili";
SetupOpenSettingsButton();
SetupBackButton();
SetupRebindButtons(((Component)settingsUIPanel).transform.Find("KeybindButtons"));
SetupRebindButtons(((Component)((Component)((Component)settingsUIPanel).transform.Find("Scroll View")).transform.Find("Viewport")).transform.Find("Content"));
SetupInventoryCheckToggle();
SetupUseConfigFileToggle();
void SetupBackButton()
{
((Component)((Component)settingsUIPanel).transform.Find("BackButton")).gameObject.AddComponent<EnableDisableButton>();
}
void SetupInventoryCheckToggle()
{
((Component)((Component)settingsUIPanel).transform.Find("Inv")).gameObject.AddComponent<ToggleButton>().PlayerPrefsString = "InvCheck";
}
void SetupOpenSettingsButton()
{
((Component)((Component)this).transform.Find("MoreEmotesButton(Clone)")).gameObject.AddComponent<EnableDisableButton>();
}
static void SetupRebindButtons(Transform ButtonsParent)
{
Transform[] array = (Transform[])(object)new Transform[ButtonsParent.childCount];
for (int i = 0; i < array.Length; i++)
{
array[i] = ButtonsParent.GetChild(i);
}
Transform[] array2 = array;
foreach (Transform val in array2)
{
((Component)val.Find("Button")).gameObject.AddComponent<RebindButton>();
}
}
void SetupUseConfigFileToggle()
{
((Component)((Component)settingsUIPanel).transform.Find("cfg")).gameObject.GetComponent<Toggle>().isOn = UseConfigFile;
}
}
private void Update()
{
EmotePatch.UpdateWheelKeybinds();
}
}
public class SignUI : MonoBehaviour
{
public PlayerControllerB Player;
private TMP_InputField _inputField;
private Text _charactersLeftText;
private TMP_Text _previewText;
private Button _submitButton;
private Button _cancelButton;
public bool IsSignUIOpen;
private void Awake()
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Expected O, but got Unknown
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Expected O, but got Unknown
FindComponents();
((UnityEvent)_submitButton.onClick).AddListener(new UnityAction(SubmitText));
((UnityEvent)_cancelButton.onClick).AddListener((UnityAction)delegate
{
Close(cancelAction: true);
});
((UnityEvent<string>)(object)_inputField.onValueChanged).AddListener((UnityAction<string>)delegate(string fieldText)
{
UpdatePreviewText(fieldText);
UpdateCharactersLeftText();
});
}
private void OnEnable()
{
Player.isTypingChat = true;
IsSignUIOpen = true;
((Selectable)_inputField).Select();
_inputField.text = string.Empty;
_previewText.text = "PREVIEW";
Player.disableLookInput = true;
}
private void Update()
{
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
Cursor.visible = true;
Cursor.lockState = (CursorLockMode)2;
if (!Player.performingEmote)
{
Close(cancelAction: true);
}
if (((ButtonControl)Keyboard.current[(Key)2]).wasPressedThisFrame && !((ButtonControl)Keyboard.current[(Key)51]).isPressed)
{
SubmitText();
}
if (Player.quickMenuManager.isMenuOpen || EmotePatch.IsEmoteWheelOpen || InputControlExtensions.IsPressed(((InputControl)Mouse.current)["rightButton"], 0f))
{
Close(cancelAction: true);
}
if (Gamepad.all.Count != 0)
{
if (Gamepad.current.buttonWest.isPressed || Gamepad.current.startButton.isPressed)
{
SubmitText();
}
if (Gamepad.current.buttonEast.isPressed || Gamepad.current.selectButton.isPressed)
{
Close(cancelAction: true);
}
}
}
private void FindComponents()
{
_inputField = ((Component)((Component)this).transform.Find("InputField")).GetComponent<TMP_InputField>();
_charactersLeftText = ((Component)((Component)this).transform.Find("CharsLeft")).GetComponent<Text>();
_submitButton = ((Component)((Component)this).transform.Find("Submit")).GetComponent<Button>();
_cancelButton = ((Component)((Component)this).transform.Find("Cancel")).GetComponent<Button>();
_previewText = ((Component)((Component)((Component)this).transform.Find("Sign")).transform.Find("Text")).GetComponent<TMP_Text>();
}
private void UpdateCharactersLeftText()
{
_charactersLeftText.text = $"CHARACTERS LEFT: <color=yellow>{_inputField.characterLimit - _inputField.text.Length}</color>";
}
private void UpdatePreviewText(string text)
{
_previewText.text = text;
}
private void SubmitText()
{
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
if (_inputField.text.Equals(string.Empty))
{
Close(cancelAction: true);
return;
}
D.L("Submitted " + _inputField.text + " to server");
((Component)Player).GetComponent<SignEmoteText>().UpdateSignText(_inputField.text);
float num = 0.5f;
if (Player.timeSinceStartingEmote > num)
{
Player.PerformEmote(default(CallbackContext), 1010);
}
Close(cancelAction: false);
}
private void Close(bool cancelAction)
{
Player.isTypingChat = false;
IsSignUIOpen = false;
if (cancelAction)
{
Player.performingEmote = false;
Player.StopPerformingEmoteServerRpc();
}
if (!Player.quickMenuManager.isMenuOpen)
{
Cursor.visible = false;
Cursor.lockState = (CursorLockMode)1;
}
Player.disableLookInput = false;
((Component)this).gameObject.SetActive(false);
}
}
public class SyncAnimatorToOthers : NetworkBehaviour
{
private PlayerControllerB _player;
private void Start()
{
_player = ((Component)this).GetComponent<PlayerControllerB>();
}
public void UpdateEmoteIDForOthers(int newID)
{
if (((NetworkBehaviour)_player).IsOwner && _player.isPlayerControlled)
{
UpdateCurrentEmoteIDServerRpc(newID);
}
}
[ServerRpc(RequireOwnership = false)]
private void UpdateCurrentEmoteIDServerRpc(int newID)
{
UpdateCurrentEmoteIDClientRpc(newID);
}
[ClientRpc]
private void UpdateCurrentEmoteIDClientRpc(int newID)
{
if (!((NetworkBehaviour)_player).IsOwner)
{
_player.playerBodyAnimator.SetInteger("emoteNumber", newID);
}
}
}
public class CustomAnimationObjects : MonoBehaviour
{
private PlayerControllerB _player;
private MeshRenderer _sign;
private GameObject _signText;
private SkinnedMeshRenderer _legs;
private void Start()
{
_player = ((Component)this).GetComponent<PlayerControllerB>();
}
private void Update()
{
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)_sign == (Object)null || (Object)(object)_signText == (Object)null)
{
FindSign();
return;
}
((Component)_sign).transform.localPosition = ((Component)_sign).transform.parent.Find("spine").localPosition;
if ((Object)(object)_legs == (Object)null && ((NetworkBehaviour)_player).IsOwner && _player.isPlayerControlled)
{
FindLegs();
return;
}
DisableEverything();
if (!_player.performingEmote)
{
return;
}
switch (_player.playerBodyAnimator.GetInteger("emoteNumber"))
{
case 10:
case 1010:
((Renderer)_sign).enabled = true;
if (!_signText.activeSelf)
{
_signText.SetActive(true);
}
if (((NetworkBehaviour)_player).IsOwner)
{
EmotePatch.LocalArmsSeparatedFromCamera = true;
}
break;
case 9:
if ((Object)(object)_legs != (Object)null)
{
((Renderer)_legs).enabled = true;
}
if (((NetworkBehaviour)_player).IsOwner)
{
EmotePatch.LocalArmsSeparatedFromCamera = true;
}
break;
}
}
private void DisableEverything()
{
if ((Object)(object)_legs != (Object)null)
{
((Renderer)_legs).enabled = false;
}
((Renderer)_sign).enabled = false;
if (_signText.activeSelf)
{
_signText.SetActive(false);
}
if (((NetworkBehaviour)_player).IsOwner && _player.isPlayerControlled)
{
EmotePatch.LocalArmsSeparatedFromCamera = false;
}
}
private void FindSign()
{
_sign = ((Component)((Component)_player).transform.Find("ScavengerModel").Find("metarig").Find("Sign")).GetComponent<MeshRenderer>();
_signText = ((Component)((Component)_sign).transform.Find("Text")).gameObject;
}
private void FindLegs()
{
_legs = ((Component)((Component)_player).transform.Find("ScavengerModel").Find("LEGS")).GetComponent<SkinnedMeshRenderer>();
}
}
}