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 RestingRockFace v0.0.2
plugins/RestingRockFace.dll
Decompiled 20 hours agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security.Permissions; using BepInEx; using HarmonyLib; using Jotunn; using Jotunn.Managers; using Jotunn.Utils; using RestingRockFace.Components; using RestingRockFace.Gui; using RestingRockFace.Models; using Splatform; using UnityEngine; using UnityEngine.Events; 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("RestingRockFace")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("RestingRockFace")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")] [assembly: AssemblyFileVersion("0.0.1")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.1.0")] namespace RestingRockFace { [BepInPlugin("DeathWizsh.RestingRockFace", "RestingRockFace", "0.0.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] internal class RestingRockFace : BaseUnityPlugin { public const string PluginGUID = "DeathWizsh.RestingRockFace"; public const string PluginName = "RestingRockFace"; public const string PluginVersion = "0.0.1"; public static RestingRockFace Instance; private static readonly Harmony harmony = new Harmony("DeathWizsh.RestingRockFace"); public RockyGUI rockyGUI; public void Awake() { Instance = this; harmony.PatchAll(Assembly.GetExecutingAssembly()); PrefabManager.OnVanillaPrefabsAvailable += SetupRocky; } private void SetupRocky() { try { GameObject prefab = PrefabManager.Instance.GetPrefab("Placeable_HardRock"); Transform val = prefab.transform.Find("default"); prefab.AddComponent<RockyControls>(); PrefabManager.OnVanillaPrefabsAvailable -= SetupRocky; } catch (Exception ex) { Logger.LogError((object)("Could not update rocky: " + ex)); PrefabManager.OnVanillaPrefabsAvailable -= SetupRocky; } } } } namespace RestingRockFace.Types { internal enum RockyFaceEnum { Dead = 5, LookLeft = 8, LookRight = 7, NoFeeling = 2, Nothing = 6, Sad = 1, Scream = 3, Smile = 4, SmileBig = 0 } internal class RockyFaceTypes { public string Dead => "Dead"; public string LookLeft => "Look left"; public string LookRight => "Look right"; public string NoFeeling => "No feeling"; public string Nothing => "Nothing"; public string Sad => "Sad"; public string Scream => "Scream"; public string Smile => "Smile"; public string SmileBig => "Smile big"; } } namespace RestingRockFace.Models { internal class RockyGuiResult { public string name; public int face; public RockyGuiResult(string name, int face) { this.face = face; this.name = name; } } } namespace RestingRockFace.Harmony { [HarmonyPatch] public class PatchesRRF { [HarmonyPrefix] [HarmonyPatch(typeof(Tameable), "Interact")] public static bool Interact_Prefix(ref Tameable __instance, Humanoid user, bool hold, bool alt) { try { if ((Object)(object)__instance == (Object)null || hold || !alt) { return true; } if (((Object)((Component)__instance).gameObject).name != "Placeable_HardRock(Clone)") { return true; } RockyControls component = ((Component)__instance).gameObject.GetComponent<RockyControls>(); component.m_gui.ShowGUI(); return false; } catch (Exception ex) { Logger.LogError((object)("Somethign went wrong in GetText_Prefix: " + ex)); return true; } } [HarmonyPrefix] [HarmonyPatch(typeof(Pet), "SetFace")] public static bool SetFace_Prefix(ref Tameable __instance, int index) { try { if ((Object)(object)__instance == (Object)null) { return true; } if (((Object)((Component)__instance).gameObject).name != "Placeable_HardRock(Clone)") { return true; } Logger.LogWarning((object)("Harmony SetFace: " + index)); RockyControls component = ((Component)__instance).gameObject.GetComponent<RockyControls>(); if ((Object)(object)component == (Object)null) { throw new Exception("RockyControls is null somehow"); } if (component.m_face == 6) { return true; } return false; } catch (Exception ex) { Logger.LogError((object)("Somethign went wrong in SetFace_Prefix: " + ex)); return true; } } } } namespace RestingRockFace.Gui { internal class RockyGUI { private GameObject panel; public UnityEvent<RockyGuiResult> onAccept = new UnityEvent<RockyGuiResult>(); public UnityEvent onClose = new UnityEvent(); public UnityEvent onSelect = new UnityEvent(); private RockyControls rockyControls; private RockyGuiResult currentForm; private float panelWidth = 420f; private float panelHeight = 230f; private float fieldWidth = 385f; private float fieldHeight = 30f; private float labelHeight = 30f; private float buttonWidth = 190f; private float buttonHeight = 50f; private float buttonYoffset = 42f; public RockyGUI(RockyControls rockyControls) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown this.rockyControls = rockyControls; } public void ShowGUI() { //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) Logger.LogWarning((object)"ShowGUI()"); if (GUIManager.Instance == null) { Logger.LogError((object)"GUIManager instance is null"); return; } if (!Object.op_Implicit((Object)(object)GUIManager.CustomGUIFront)) { Logger.LogError((object)"GUIManager CustomGUI is null"); return; } if ((Object)(object)panel == (Object)null) { panel = GUIManager.Instance.CreateWoodpanel(GUIManager.CustomGUIFront.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 0f), panelWidth, panelHeight, false); } currentForm = new RockyGuiResult(rockyControls.m_name, (rockyControls.m_face == -1) ? 2 : rockyControls.m_face); panel.SetActive(false); CreateGUI(); panel.SetActive(true); GUIManager.BlockInput(true); } public void Close() { onClose.Invoke(); panel.SetActive(false); GUIManager.BlockInput(false); } public void Accept() { onAccept.Invoke(currentForm); onClose.Invoke(); panel.SetActive(false); GUIManager.BlockInput(false); } public void SetName(string value) { Logger.LogWarning((object)("SetName(), " + value)); currentForm.name = value; } public void SetFace(int value) { Logger.LogWarning((object)("SetFace(), " + value)); currentForm.face = GetRockyFace(value); } public void UpdateGUI() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown foreach (Transform item in panel.transform) { Transform val = item; Object.Destroy((Object)(object)((Component)val).gameObject); } CreateGUI(); } private void CreateGUI() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002f: 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_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_02a7: Unknown result type (might be due to invalid IL or missing references) //IL_02b7: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_02f9: Expected O, but got Unknown //IL_0319: Unknown result type (might be due to invalid IL or missing references) //IL_0328: Unknown result type (might be due to invalid IL or missing references) //IL_0338: Unknown result type (might be due to invalid IL or missing references) //IL_0370: Unknown result type (might be due to invalid IL or missing references) //IL_037a: Expected O, but got Unknown GUIManager.Instance.CreateText("Name", panel.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(0f, -30f), GUIManager.Instance.AveriaSerifBold, 20, GUIManager.Instance.ValheimOrange, true, Color.black, fieldWidth, labelHeight, false); GameObject val = GUIManager.Instance.CreateInputField(panel.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(0f, -60f), (ContentType)0, "Name", 18, fieldWidth, fieldHeight); InputField component = val.GetComponent<InputField>(); component.text = currentForm.name; ((UnityEvent<string>)(object)component.onValueChanged).AddListener((UnityAction<string>)SetName); component.characterLimit = 64; GUIManager.Instance.CreateText("Face", panel.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(0f, -100f), GUIManager.Instance.AveriaSerifBold, 20, GUIManager.Instance.ValheimOrange, true, Color.black, fieldWidth, labelHeight, false); GameObject val2 = GUIManager.Instance.CreateDropDown(panel.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(0f, -130f), 18, fieldWidth, fieldHeight); Dropdown component2 = val2.GetComponent<Dropdown>(); ((Component)component2).GetComponent<Dropdown>().AddOptions(new List<string> { "Dead", "LookLeft", "LookRight", "NoFeeling", "Nothing", "Sad", "Scream", "Smile", "SmileBig" }); component2.value = GetDropdownValue(currentForm.face); ((UnityEvent<int>)(object)component2.onValueChanged).AddListener((UnityAction<int>)SetFace); GameObject val3 = GUIManager.Instance.CreateButton("Close", panel.transform, new Vector2(0.5f, 0f), new Vector2(0.5f, 0f), new Vector2(-100f, buttonYoffset), buttonWidth, buttonHeight); val3.SetActive(true); Button component3 = val3.GetComponent<Button>(); ((UnityEvent)component3.onClick).AddListener(new UnityAction(Close)); GameObject val4 = GUIManager.Instance.CreateButton("Accept", panel.transform, new Vector2(0.5f, 0f), new Vector2(0.5f, 0f), new Vector2(100f, buttonYoffset), buttonWidth, buttonHeight); val4.SetActive(true); Button component4 = val4.GetComponent<Button>(); ((UnityEvent)component4.onClick).AddListener(new UnityAction(Accept)); } private int GetRockyFace(int value) { return value switch { 0 => 5, 1 => 8, 2 => 7, 3 => 2, 5 => 1, 6 => 3, 7 => 4, 8 => 0, _ => 6, }; } private int GetDropdownValue(int value) { return value switch { 5 => 0, 8 => 1, 7 => 2, 2 => 3, 1 => 5, 3 => 6, 4 => 7, 0 => 8, _ => 4, }; } } } namespace RestingRockFace.Components { internal class RockyControls : MonoBehaviour { public ZNetView m_netView; public RockyGUI m_gui; public Tameable m_tameable; public MaterialVariation materialVar; public Transform m_faceTransform; private readonly int faceDataHash = StringExtensionMethods.GetStableHashCode("FaceData_RRF"); public string m_name; public int m_face; public void Awake() { m_netView = ((Component)this).gameObject.GetComponent<ZNetView>(); if (!((Object)(object)m_netView == (Object)null) && m_netView.GetZDO() != null) { m_netView.Register<string, string, int>("SetNameAndFace", (Action<long, string, string, int>)RPC_SetNameAndFace); m_faceTransform = ((Component)this).gameObject.transform.Find("default"); materialVar = ((Component)m_faceTransform).gameObject.GetComponent<MaterialVariation>(); m_tameable = ((Component)this).gameObject.GetComponent<Tameable>(); m_gui = new RockyGUI(this); m_gui.onAccept.AddListener((UnityAction<RockyGuiResult>)SetNameAndFace); m_name = m_tameable.GetName(); m_face = m_netView.GetZDO().GetInt(faceDataHash, 6); UpdateFace(m_face); Logger.LogWarning((object)("Awake name: " + m_name)); Logger.LogWarning((object)("Awake face: " + m_face)); } } public void Start() { if (!((Object)(object)m_netView == (Object)null) && m_netView.GetZDO() != null) { Logger.LogWarning((object)("Start SetMaterial: " + (m_face != 6))); if (m_face != 6) { materialVar.SetMaterial(m_face); } } } public void SetNameAndFace(RockyGuiResult result) { //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) Logger.LogWarning((object)$"Result: {result.name}, {result.face}"); m_name = result.name; m_face = result.face; if (m_netView.IsValid()) { PlatformUserID platformUserID = ((IUser)PlatformManager.DistributionPlatform.LocalUser).PlatformUserID; m_netView.InvokeRPC("SetNameAndFace", new object[3] { result.name, PlatformManager.DistributionPlatform.LocalUser.IsSignedIn ? ((object)(PlatformUserID)(ref platformUserID)).ToString() : "host", result.face }); } } public void RPC_SetNameAndFace(long sender, string name, string authorId, int face) { if (m_netView.IsValid() && m_netView.IsOwner()) { m_netView.GetZDO().Set(ZDOVars.s_tamedName, name); m_netView.GetZDO().Set(ZDOVars.s_tamedNameAuthor, authorId); UpdateFace(face); materialVar.SetMaterial(face); } } public void UpdateFace(int face) { if (face == 6) { m_netView.GetZDO().RemoveInt(faceDataHash); Logger.LogWarning((object)"UpdateFace: removed ZDO"); } else { m_netView.GetZDO().Set(faceDataHash, face, false); Logger.LogWarning((object)"UpdateFace: set ZDO"); } } } }