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 CharacterEditButton v0.9.0
CharacterEdit.dll
Decompiled a day agousing System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using TMPro; 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: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+46babfe924b3eff83c40c35927284a8a3a6f8be6")] [assembly: AssemblyVersion("1.0.0.0")] namespace CharacterEdit; [BepInPlugin("aedenthorn.CharacterEdit", "Character Edit", "0.9.0")] public class BepInExPlugin : BaseUnityPlugin { [HarmonyPatch(typeof(FejdStartup), "Awake")] public static class FejdStartup_Awake_Patch { public static void Postfix(FejdStartup __instance) { //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Expected O, but got Unknown //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Expected O, but got Unknown //IL_01b7: Unknown result type (might be due to invalid IL or missing references) if (modEnabled.Value) { Transform val = FejdStartup.instance.m_selectCharacterPanel.transform.Find("BottomWindow"); Transform val2 = Object.Instantiate<Transform>(val.Find("New")); ((Object)val2).name = "Edit"; ((Component)val2).transform.SetParent(val); ((Component)val2).GetComponent<RectTransform>().anchoredPosition = Vector2.op_Implicit(new Vector3(-100f, 50f, 0f)); ((Component)((Component)val2).transform.Find("Text")).GetComponent<TMP_Text>().text = buttonText.Value; ((UnityEventBase)((Component)val2).GetComponent<Button>().onClick).RemoveAllListeners(); ((Component)val2).GetComponent<Button>().onClick = new ButtonClickedEvent(); ((UnityEvent)((Component)val2).GetComponent<Button>().onClick).AddListener(new UnityAction(StartCharacterEdit)); ((Component)val2).GetComponent<UIGamePad>().m_zinputKey = gamePadButton.Value; ((TMP_Text)((Component)((Component)val2).transform.Find("gamepad_hint").Find("Text")).GetComponent<TextMeshProUGUI>()).text = gamePadButtonHint.Value; title = Object.Instantiate<Transform>(FejdStartup.instance.m_newCharacterPanel.transform.Find("Topic")); ((Object)title).name = "EditTitle"; title.SetParent(FejdStartup.instance.m_newCharacterPanel.transform); ((Component)title).GetComponent<TMP_Text>().text = titleText.Value; ((Component)title).GetComponent<RectTransform>().anchoredPosition = ((Component)FejdStartup.instance.m_newCharacterPanel.transform.Find("Topic")).GetComponent<RectTransform>().anchoredPosition; ((Component)title).gameObject.SetActive(false); } } } [HarmonyPatch(typeof(FejdStartup), "OnNewCharacterDone")] public static class FejdStartup_OnNewCharacterDone_Patch { public static bool Prefix(FejdStartup __instance, ref List<PlayerProfile> ___m_profiles) { Dbgl($"New character done, editing {editingCharacter}"); if (!editingCharacter) { return true; } ((Component)title).gameObject.SetActive(false); ((Component)FejdStartup.instance.m_newCharacterPanel.transform.Find("Topic")).gameObject.SetActive(true); editingCharacter = false; string text = ((TMP_InputField)__instance.m_csNewCharacterName).text; string text2 = text.ToLower(); PlayerProfile val = Traverse.Create((object)FejdStartup.instance).Field("m_profiles").GetValue<List<PlayerProfile>>()[Traverse.Create((object)FejdStartup.instance).Field("m_profileIndex").GetValue<int>()]; Player component = Traverse.Create((object)FejdStartup.instance).Field("m_playerInstance").GetValue<GameObject>() .GetComponent<Player>(); val.SavePlayerData(component); val.SetName(text); val.Save(); __instance.m_selectCharacterPanel.SetActive(true); __instance.m_newCharacterPanel.SetActive(false); ___m_profiles = null; Traverse.Create((object)__instance).Method("SetSelectedProfile", new object[1] { text2 }).GetValue(); return false; } } [HarmonyPatch(typeof(FejdStartup), "OnNewCharacterCancel")] public static class FejdStartup_OnNewCharacterCancel_Patch { public static void Postfix(FejdStartup __instance) { Dbgl($"New character cancel, editing {editingCharacter}"); ((Component)title).gameObject.SetActive(false); ((Component)FejdStartup.instance.m_newCharacterPanel.transform.Find("Topic")).gameObject.SetActive(true); editingCharacter = false; } } [HarmonyPatch(typeof(PlayerCustomizaton), "OnEnable")] public static class PlayerCustomizaton_OnEnable_Patch { public static void Postfix(PlayerCustomizaton __instance) { //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) Dbgl("Player customization enabled"); if (editingCharacter) { Dbgl("is editing"); Player previewPlayer = ((Component)__instance).GetComponentInParent<FejdStartup>().GetPreviewPlayer(); if (previewPlayer.GetPlayerModel() == 1) { __instance.m_maleToggle.isOn = false; __instance.m_femaleToggle.isOn = true; } VisEquipment value = Traverse.Create((object)previewPlayer).Field("m_visEquipment").GetValue<VisEquipment>(); Vector3 value2 = Traverse.Create((object)value).Field("m_skinColor").GetValue<Vector3>(); float value3 = Vector3.Distance(value2, Utils.ColorToVec3(__instance.m_skinColor0)) / Vector3.Distance(Utils.ColorToVec3(__instance.m_skinColor1), Utils.ColorToVec3(__instance.m_skinColor0)) * (__instance.m_skinHue.maxValue - __instance.m_skinHue.minValue) + __instance.m_skinHue.minValue; __instance.m_skinHue.value = value3; } } } [HarmonyPatch(typeof(Terminal), "InputText")] public static class InputText_Patch { public static bool Prefix(Terminal __instance) { if (!modEnabled.Value) { return true; } string text = ((TMP_InputField)__instance.m_input).text; if (text.ToLower().Equals(typeof(BepInExPlugin).Namespace.ToLower() + " reset")) { ((BaseUnityPlugin)context).Config.Reload(); ((BaseUnityPlugin)context).Config.Save(); __instance.AddString(text); __instance.AddString(((BaseUnityPlugin)context).Info.Metadata.Name + " config reloaded"); return false; } return true; } } public static readonly bool isDebug = true; public static bool editingCharacter = false; public static BepInExPlugin context; public Harmony harmony; public static ConfigEntry<bool> modEnabled; public static ConfigEntry<string> titleText; public static ConfigEntry<string> buttonText; public static ConfigEntry<string> gamePadButton; public static ConfigEntry<string> gamePadButtonHint; public static ConfigEntry<int> nexusID; public static Transform title; public static void Dbgl(string str = "", bool pref = true) { if (isDebug) { Debug.Log((object)((pref ? (typeof(BepInExPlugin).Namespace + " ") : "") + str)); } } public void Awake() { //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Expected O, but got Unknown context = this; modEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enabled", true, "Enable this mod"); buttonText = ((BaseUnityPlugin)this).Config.Bind<string>("General", "ButtonText", "Edit", "Button text"); titleText = ((BaseUnityPlugin)this).Config.Bind<string>("General", "TitleText", "Edit Character", "Title text"); gamePadButton = ((BaseUnityPlugin)this).Config.Bind<string>("General", "GamePadButton", "JoyLTrigger", "Gamepad button used to press button. Possible values: JoyHide, JoyGPower, JoyRun, JoyCrouch, JoyMap, JoyMenu, JoyBlock, JoyAttack, JoySecondAttack, JoyAltPlace, JoyRotate, JoyPlace, JoyRemove, JoyTabLeft, JoyTabRight, JoyLStickLeft, JoyLStickRight, JoyLStickUp, JoyLStickDown, JoyDPadLeft, JoyDPadRight, JoyDPadUp, JoyDPadDown, JoyLTrigger, JoyRTrigger, JoyLStick, JoyRStick"); gamePadButtonHint = ((BaseUnityPlugin)this).Config.Bind<string>("General", "GamePadButtonHint", "LT", "Hint to show for gamepad button"); nexusID = ((BaseUnityPlugin)this).Config.Bind<int>("General", "NexusID", 650, "Nexus mod ID for updates"); if (modEnabled.Value) { harmony = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); harmony.PatchAll(); } } public static void StartCharacterEdit() { Dbgl("Start editing character"); editingCharacter = true; ((Component)title).gameObject.SetActive(true); ((Component)FejdStartup.instance.m_newCharacterPanel.transform.Find("Topic")).gameObject.SetActive(false); PlayerProfile val = Traverse.Create((object)FejdStartup.instance).Field("m_profiles").GetValue<List<PlayerProfile>>()[Traverse.Create((object)FejdStartup.instance).Field("m_profileIndex").GetValue<int>()]; FejdStartup.instance.m_newCharacterPanel.SetActive(true); FejdStartup.instance.m_selectCharacterPanel.SetActive(false); ((TMP_InputField)FejdStartup.instance.m_csNewCharacterName).text = val.GetName(); FejdStartup.instance.m_newCharacterError.SetActive(false); Traverse.Create((object)FejdStartup.instance).Method("SetupCharacterPreview", new object[1] { val }).GetValue(); Gogan.LogEvent("Screen", "Enter", "CreateCharacter", 0L); } }