Decompiled source of PEAK AIO APEX v1.1.2
PEAK-AIO.dll
Decompiled a month ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Numerics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Threading.Tasks; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using DearImGuiInjection; using DearImGuiInjection.BepInEx; using HarmonyLib; using ImGuiNET; using Photon.Pun; using Photon.Realtime; using UnityEngine; using UnityEngine.SceneManagement; using Zorro.Core; using Zorro.Core.Serizalization; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("PEAK-AIO")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("PEAK-AIO")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("0e070e16-c355-4db0-804c-0510a5aa436e")] [assembly: AssemblyFileVersion("1.0.2.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.2.0")] [module: UnverifiableCode] public static class ConfigManager { public static ManualLogSource Logger; public static ConfigEntry<bool> InfiniteStamina; public static ConfigEntry<bool> FlyMod; public static ConfigEntry<float> FlySpeed; public static ConfigEntry<float> FlyAcceleration; public static ConfigEntry<bool> LockStatus; public static ConfigEntry<bool> NoWeight; public static ConfigEntry<bool> SpeedMod; public static ConfigEntry<bool> JumpMod; public static ConfigEntry<bool> NoFallDmg; public static ConfigEntry<bool> ClimbMod; public static ConfigEntry<bool> VineClimbMod; public static ConfigEntry<bool> RopeClimbMod; public static ConfigEntry<float> SpeedAmount; public static ConfigEntry<float> JumpAmount; public static ConfigEntry<float> ClimbAmount; public static ConfigEntry<float> VineClimbAmount; public static ConfigEntry<float> RopeClimbAmount; public static ConfigEntry<float> RechargeAmountSlot1; public static ConfigEntry<float> RechargeAmountSlot2; public static ConfigEntry<float> RechargeAmountSlot3; public static ConfigEntry<bool> TeleportToPing; public static ConfigEntry<KeyCode> MenuToggleKey; public static ConfigEntry<int> LanguageIndex; public static void Init(ConfigFile config, ManualLogSource logger) { //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Expected O, but got Unknown //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Expected O, but got Unknown //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Expected O, but got Unknown //IL_02b8: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Expected O, but got Unknown Logger = logger; MenuToggleKey = config.Bind<KeyCode>("General", "MenuToggleKey", (KeyCode)277, "Key to toggle the mod menu overlay. Uses UnityEngine.KeyCode names (e.g. Insert, F1, F2, Home, RightShift)."); InfiniteStamina = config.Bind<bool>("Cheats", "InfiniteStamina", false, "Enable infinite stamina"); TeleportToPing = config.Bind<bool>("Cheats", "TeleportToPing", false, "Automatically teleport to ping location"); FlyMod = config.Bind<bool>("Cheats", "Fly Mod", false, "Enables fly mode when checked."); FlySpeed = config.Bind<float>("Cheats", "Fly Speed", 100f, "Speed used when flying."); FlyAcceleration = config.Bind<float>("Cheats", "Fly Acceleration", 300f, "Acceleration used when flying."); LockStatus = config.Bind<bool>("Afflictions", "LockStatus", false, (ConfigDescription)null); NoWeight = config.Bind<bool>("Afflictions", "NoWeight", false, (ConfigDescription)null); SpeedMod = config.Bind<bool>("Character", "SpeedMod", false, (ConfigDescription)null); JumpMod = config.Bind<bool>("Character", "JumpMod", false, (ConfigDescription)null); NoFallDmg = config.Bind<bool>("Character", "NoFallDmg", false, (ConfigDescription)null); ClimbMod = config.Bind<bool>("Character", "ClimbMod", false, (ConfigDescription)null); VineClimbMod = config.Bind<bool>("Character", "VineClimbMod", false, (ConfigDescription)null); RopeClimbMod = config.Bind<bool>("Character", "RopeClimbMod", false, (ConfigDescription)null); SpeedAmount = config.Bind<float>("Character", "SpeedAmount", 1f, (ConfigDescription)null); JumpAmount = config.Bind<float>("Character", "JumpAmount", 10f, (ConfigDescription)null); ClimbAmount = config.Bind<float>("Character", "ClimbAmount", 1f, (ConfigDescription)null); VineClimbAmount = config.Bind<float>("Character", "VineClimbAmount", 1f, (ConfigDescription)null); RopeClimbAmount = config.Bind<float>("Character", "RopeClimbAmount", 1f, (ConfigDescription)null); RechargeAmountSlot1 = config.Bind<float>("Inventory", "RechargeAmountSlot1", 100f, new ConfigDescription("Recharge amount for slot 1", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 999f), Array.Empty<object>())); RechargeAmountSlot2 = config.Bind<float>("Inventory", "RechargeAmountSlot2", 100f, new ConfigDescription("Recharge amount for slot 2", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 999f), Array.Empty<object>())); RechargeAmountSlot3 = config.Bind<float>("Inventory", "RechargeAmountSlot3", 100f, new ConfigDescription("Recharge amount for slot 3", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 999f), Array.Empty<object>())); LanguageIndex = config.Bind<int>("UI", "Language", 0, new ConfigDescription("Language: 0=English, 1=简体中文, 2=日本語, 3=한국어", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 3), Array.Empty<object>())); Localization.SetLanguage(LanguageIndex.Value); Logger.LogInfo((object)"[PEAK AIO][ConfigManager] Config Loaded."); } } internal static class ConstantFields { private static PropertyInfo infiniteStaminaProp; private static PropertyInfo statusLockProp; private static FieldInfo fallDamageTimeField; private static FieldInfo staminaField; private static FieldInfo movementModifierField; private static FieldInfo jumpGravityField; private static FieldInfo climbSpeedModField; private static FieldInfo vineClimbSpeedModField; private static FieldInfo ropeClimbSpeedModField; private static MethodInfo setStatusMethod; private static Array statusEnumValues; public static PropertyInfo GetInfiniteStaminaProperty() { if (infiniteStaminaProp == null) { infiniteStaminaProp = typeof(Character).GetProperty("infiniteStam", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return infiniteStaminaProp; } public static PropertyInfo GetStatusLockProperty() { if (statusLockProp == null) { statusLockProp = typeof(Character).GetProperty("statusesLocked", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return statusLockProp; } public static FieldInfo GetFallDamageTimeField() { if (fallDamageTimeField == null) { fallDamageTimeField = typeof(CharacterMovement).GetField("fallDamageTime", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return fallDamageTimeField; } public static FieldInfo GetStaminaField() { if (staminaField == null) { staminaField = typeof(CharacterData).GetField("_stam", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return staminaField; } public static FieldInfo GetMovementModifierField() { if (movementModifierField == null) { movementModifierField = typeof(CharacterMovement).GetField("movementModifier", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return movementModifierField; } public static FieldInfo GetJumpGravityField() { if (jumpGravityField == null) { jumpGravityField = typeof(CharacterMovement).GetField("jumpGravity", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return jumpGravityField; } public static FieldInfo GetClimbSpeedModField() { if (climbSpeedModField == null) { climbSpeedModField = typeof(CharacterClimbing).GetField("climbSpeedMod", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return climbSpeedModField; } public static FieldInfo GetVineClimbSpeedModField() { if (vineClimbSpeedModField == null) { vineClimbSpeedModField = typeof(CharacterVineClimbing).GetField("climbSpeedMod", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return vineClimbSpeedModField; } public static FieldInfo GetRopeClimbSpeedModField() { if (ropeClimbSpeedModField == null) { ropeClimbSpeedModField = typeof(CharacterRopeHandling).GetField("climbSpeedMod", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return ropeClimbSpeedModField; } public static MethodInfo GetSetStatusMethod() { if (setStatusMethod == null) { setStatusMethod = typeof(CharacterAfflictions).GetMethod("SetStatus", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } return setStatusMethod; } public static Array GetStatusEnumValues() { if (statusEnumValues == null) { statusEnumValues = Enum.GetValues(typeof(STATUSTYPE)); } return statusEnumValues; } public static void RefreshAll() { infiniteStaminaProp = null; statusLockProp = null; fallDamageTimeField = null; staminaField = null; movementModifierField = null; jumpGravityField = null; climbSpeedModField = null; vineClimbSpeedModField = null; ropeClimbSpeedModField = null; setStatusMethod = null; statusEnumValues = null; } } public class EventComponent : MonoBehaviour { private float stateTimer; private float validationTimer; private const float STATE_INTERVAL = 0.1f; private const float VALIDATION_INTERVAL = 1f; private void Update() { validationTimer += Time.deltaTime; if (validationTimer >= 1f) { validationTimer = 0f; GameHelpers.InvalidateCache(); } if (ConfigManager.SpeedMod.Value || ConfigManager.JumpMod.Value) { CharacterMovement movementComponent = GameHelpers.GetMovementComponent(); if ((Object)(object)movementComponent != (Object)null) { if (ConfigManager.SpeedMod.Value) { ConstantFields.GetMovementModifierField()?.SetValue(movementComponent, ConfigManager.SpeedAmount.Value); } if (ConfigManager.JumpMod.Value) { ConstantFields.GetJumpGravityField()?.SetValue(movementComponent, ConfigManager.JumpAmount.Value); if (ConfigManager.NoFallDmg.Value) { ConstantFields.GetFallDamageTimeField()?.SetValue(movementComponent, 999f); } } } } if (ConfigManager.ClimbMod.Value) { CharacterClimbing climbingComponent = GameHelpers.GetClimbingComponent(); if ((Object)(object)climbingComponent != (Object)null) { ConstantFields.GetClimbSpeedModField()?.SetValue(climbingComponent, ConfigManager.ClimbAmount.Value); } } if (ConfigManager.VineClimbMod.Value) { CharacterVineClimbing vineClimbComponent = GameHelpers.GetVineClimbComponent(); if ((Object)(object)vineClimbComponent != (Object)null) { ConstantFields.GetVineClimbSpeedModField()?.SetValue(vineClimbComponent, ConfigManager.VineClimbAmount.Value); } } if (ConfigManager.RopeClimbMod.Value) { CharacterRopeHandling ropeClimbComponent = GameHelpers.GetRopeClimbComponent(); if ((Object)(object)ropeClimbComponent != (Object)null) { ConstantFields.GetRopeClimbSpeedModField()?.SetValue(ropeClimbComponent, ConfigManager.RopeClimbAmount.Value); } } stateTimer += Time.deltaTime; if (stateTimer < 0.1f) { return; } stateTimer = 0f; if (!ConfigManager.InfiniteStamina.Value && !ConfigManager.LockStatus.Value) { return; } Character characterComponent = GameHelpers.GetCharacterComponent(); if ((Object)(object)characterComponent != (Object)null) { if (ConfigManager.InfiniteStamina.Value) { ConstantFields.GetInfiniteStaminaProperty()?.SetValue(characterComponent, true); } if (ConfigManager.LockStatus.Value) { ConstantFields.GetStatusLockProperty()?.SetValue(characterComponent, true); } } } } internal static class GameHelpers { private static Character character; private static CharacterData characterData; private static CharacterMovement movementComponent; private static CharacterAfflictions afflictionsComponent; private static CharacterClimbing climbingComponent; private static CharacterVineClimbing vineClimbingComponent; private static CharacterRopeHandling ropeClimbingComponent; private static bool cacheValid; public static void InvalidateCache() { if (cacheValid) { Character localCharacter = Character.localCharacter; if (character != localCharacter || (Object)(object)character == (Object)null || !((Behaviour)character).isActiveAndEnabled) { Refresh(); } } } public static Character GetCharacterComponent() { Character localCharacter = Character.localCharacter; if (character != localCharacter) { character = localCharacter; characterData = null; movementComponent = null; afflictionsComponent = null; climbingComponent = null; vineClimbingComponent = null; ropeClimbingComponent = null; } cacheValid = character != null; return character; } public static CharacterData GetCharacterData() { Character characterComponent = GetCharacterComponent(); if (characterComponent != null) { return characterComponent.data; } if (characterData == null) { characterData = Object.FindFirstObjectByType<CharacterData>(); } return characterData; } public static CharacterMovement GetMovementComponent() { if (movementComponent == null) { Character characterComponent = GetCharacterComponent(); if (characterComponent != null) { movementComponent = ((Component)characterComponent).GetComponent<CharacterMovement>(); } } return movementComponent; } public static CharacterAfflictions GetAfflictionsComponent() { if (afflictionsComponent == null) { Character characterComponent = GetCharacterComponent(); if (characterComponent != null) { afflictionsComponent = ((Component)characterComponent).GetComponent<CharacterAfflictions>(); } } return afflictionsComponent; } public static CharacterClimbing GetClimbingComponent() { if (climbingComponent == null) { Character characterComponent = GetCharacterComponent(); if (characterComponent != null) { climbingComponent = ((Component)characterComponent).GetComponent<CharacterClimbing>(); } } return climbingComponent; } public static CharacterVineClimbing GetVineClimbComponent() { if (vineClimbingComponent == null) { Character characterComponent = GetCharacterComponent(); if (characterComponent != null) { vineClimbingComponent = ((Component)characterComponent).GetComponent<CharacterVineClimbing>(); } } return vineClimbingComponent; } public static CharacterRopeHandling GetRopeClimbComponent() { if (ropeClimbingComponent == null) { Character characterComponent = GetCharacterComponent(); if (characterComponent != null) { ropeClimbingComponent = ((Component)characterComponent).GetComponent<CharacterRopeHandling>(); } } return ropeClimbingComponent; } public static void Refresh() { character = null; characterData = null; movementComponent = null; afflictionsComponent = null; climbingComponent = null; vineClimbingComponent = null; ropeClimbingComponent = null; cacheValid = false; } } public static class Globals { public static bool anyAfflictionEnabled; public static Character character; public static CharacterData characterData; public static FieldInfo staminaField; public static PropertyInfo infiniteStamProp; public static FieldInfo sinceFallSlideField; public static FieldInfo sinceGroundedField; public static object movementComp; public static FieldInfo movementModifierField; public static FieldInfo jumpGravityField; public static FieldInfo fallDamageTimeField; public static object characterClimb; public static FieldInfo climbSpeedModifierField; public static object characterVineClimb; public static FieldInfo vineClimbSpeedModifierField; public static object characterRopeHandling; public static FieldInfo ropeClimbSpeedModifierField; public static object afflictionsObj; public static MethodInfo setStatusMethod; public static object weightEnumValue; public static object poisonEnumValue; public static object hotEnumValue; public static object coldEnumValue; public static object curseEnumValue; public static object injuryEnumValue; public static object drowsyEnumValue; public static object hungerEnumValue; public static List<Item> items = new List<Item>(); public static List<string> itemNames = new List<string>(); public static int[] selectedItems = new int[3] { -1, -1, -1 }; public static string[] itemDisplayNames = new string[3] { "None", "None", "None" }; public static string[] itemSearchBuffers = new string[3]; public static Player playerObj; public static List<Character> allPlayers = new List<Character>(); public static List<string> playerNames = new List<string>(); public static int selectedPlayer = -1; public static bool excludeSelfFromAllActions = true; public static bool teleportToPingEnabled = false; public static float teleportX = 0f; public static float teleportY = 0f; public static float teleportZ = 0f; public static int selectedLuggageIndex = -1; public static List<string> luggageLabels = new List<string>(); public static List<Luggage> luggageObject = new List<Luggage>(); public static List<Luggage> allOpenedLuggage = new List<Luggage>(); } [HarmonyPatch(typeof(PointPinger), "ReceivePoint_Rpc")] public class PointPingPatch { private static void Postfix(Vector3 point, Vector3 hitNormal, PointPinger __instance) { //IL_0059: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) try { if (ConfigManager.TeleportToPing.Value) { Character character = __instance.character; object obj; if (character == null) { obj = null; } else { PhotonView photonView = ((MonoBehaviourPun)character).photonView; obj = ((photonView != null) ? photonView.Owner : null); } Player val = (Player)obj; if (val != null && val == PhotonNetwork.LocalPlayer && (Object)(object)Character.localCharacter != (Object)null && !Character.localCharacter.data.dead) { Vector3 val2 = point + Vector3.up; ((MonoBehaviourPun)Character.localCharacter).photonView.RPC("WarpPlayerRPC", (RpcTarget)0, new object[2] { val2, true }); ConfigManager.Logger.LogInfo((object)"[Patch] Teleported to ping!"); } } } catch (Exception ex) { ConfigManager.Logger.LogError((object)("[Patch] Exception: " + ex)); } } } [HarmonyPatch(typeof(Character), "Update")] public class FlyPatch { private static bool isFlying = false; private static Vector3 flyVelocity = Vector3.zero; public static bool IsFlying => isFlying; public static void SetFlying(bool enable) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) isFlying = enable; flyVelocity = Vector3.zero; ConfigManager.Logger.LogInfo((object)("[FlyMod] Flight " + (enable ? "enabled" : "disabled") + ".")); } private static void Postfix(Character __instance) { //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) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: 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_00c0: 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_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) if ((!ConfigManager.FlyMod.Value && !isFlying) || !__instance.IsLocal) { return; } if (!ConfigManager.FlyMod.Value) { if (isFlying) { isFlying = false; flyVelocity = Vector3.zero; ConfigManager.Logger.LogInfo((object)"[FlyMod] Flight disabled."); } return; } if (!isFlying) { isFlying = true; ConfigManager.Logger.LogInfo((object)"[FlyMod] Flight enabled."); } __instance.data.isGrounded = true; __instance.data.sinceGrounded = 0f; __instance.data.sinceJump = 0f; Vector3 val = Vector2.op_Implicit(__instance.input.movementInput); Vector3 normalized = ((Vector3)(ref __instance.data.lookDirection_Flat)).normalized; Vector3 val2 = Vector3.Cross(Vector3.up, normalized); Vector3 normalized2 = ((Vector3)(ref val2)).normalized; Vector3 val3 = normalized * val.y + normalized2 * val.x; if (__instance.input.jumpIsPressed) { val3 += Vector3.up; } if (__instance.input.crouchIsPressed) { val3 += Vector3.down; } float value = ConfigManager.FlySpeed.Value; float value2 = ConfigManager.FlyAcceleration.Value; flyVelocity = Vector3.Lerp(flyVelocity, ((Vector3)(ref val3)).normalized * value, Time.deltaTime * value2); List<Bodypart> partList = __instance.refs.ragdoll.partList; for (int i = 0; i < partList.Count; i++) { Bodypart obj = partList[i]; Rigidbody val4 = ((obj != null) ? obj.Rig : null); if ((Object)(object)val4 != (Object)null) { val4.linearVelocity = flyVelocity; } } } } public static class CJKFontPatch { private static bool fontsLoaded = false; private static GCHandle cjkRangesHandle; private static GCHandle koreanRangesHandle; public static ImFontPtr CjkFont; public static ImFontPtr KoreanFont; public static bool HasCjkFont = false; public static bool HasKoreanFont = false; private static readonly ushort[] CjkRanges = new ushort[13] { 32, 255, 8192, 8303, 12288, 12543, 12784, 12799, 19968, 40959, 65280, 65519, 0 }; private static readonly ushort[] KoreanRanges = new ushort[11] { 32, 255, 8192, 8303, 12593, 12643, 44032, 55203, 65280, 65519, 0 }; private static readonly string[] CjkFontCandidates = new string[3] { "C:\\Windows\\Fonts\\msyh.ttc", "C:\\Windows\\Fonts\\meiryo.ttc", "C:\\Windows\\Fonts\\yugothm.ttc" }; private static readonly string[] KoreanFontCandidates = new string[2] { "C:\\Windows\\Fonts\\malgun.ttf", "C:\\Windows\\Fonts\\malgunsl.ttf" }; private static string FindFirst(string[] paths) { foreach (string text in paths) { if (File.Exists(text)) { return text; } } return null; } public unsafe static void Prefix() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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_0087: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) if (fontsLoaded) { return; } fontsLoaded = true; try { ImGuiIOPtr iO = ImGui.GetIO(); ImFontAtlasPtr fonts = ((ImGuiIOPtr)(ref iO)).Fonts; cjkRangesHandle = GCHandle.Alloc(CjkRanges, GCHandleType.Pinned); koreanRangesHandle = GCHandle.Alloc(KoreanRanges, GCHandleType.Pinned); IntPtr intPtr = cjkRangesHandle.AddrOfPinnedObject(); IntPtr intPtr2 = koreanRangesHandle.AddrOfPinnedObject(); string text = FindFirst(CjkFontCandidates); string text2 = FindFirst(KoreanFontCandidates); if (text != null) { CjkFont = ((ImFontAtlasPtr)(ref fonts)).AddFontFromFileTTF(text, 14f, default(ImFontConfigPtr), intPtr); HasCjkFont = ((ImFontPtr)(ref CjkFont)).NativePtr != null; ConfigManager.Logger.LogInfo((object)("[PEAK AIO] CJK font (" + Path.GetFileName(text) + "): " + (HasCjkFont ? "OK" : "FAILED"))); } if (text2 != null) { KoreanFont = ((ImFontAtlasPtr)(ref fonts)).AddFontFromFileTTF(text2, 14f, default(ImFontConfigPtr), intPtr2); HasKoreanFont = ((ImFontPtr)(ref KoreanFont)).NativePtr != null; ConfigManager.Logger.LogInfo((object)("[PEAK AIO] Korean font (" + Path.GetFileName(text2) + "): " + (HasKoreanFont ? "OK" : "FAILED"))); } if (HasCjkFont) { ((ImGuiIO)((ImGuiIOPtr)(ref iO)).NativePtr).FontDefault = ((ImFontPtr)(ref CjkFont)).NativePtr; } else if (HasKoreanFont) { ((ImGuiIO)((ImGuiIOPtr)(ref iO)).NativePtr).FontDefault = ((ImFontPtr)(ref KoreanFont)).NativePtr; } else { ConfigManager.Logger.LogWarning((object)"[PEAK AIO] No CJK/Korean fonts found, using default font."); } bool flag = ((ImFontAtlasPtr)(ref fonts)).Build(); ConfigManager.Logger.LogInfo((object)string.Format("[PEAK AIO] Atlas build: {0}, size: {1}x{2}, fonts: {3}", flag ? "OK" : "FAILED", ((ImFontAtlasPtr)(ref fonts)).TexWidth, ((ImFontAtlasPtr)(ref fonts)).TexHeight, ((ImFontAtlasPtr)(ref fonts)).Fonts.Size)); if (cjkRangesHandle.IsAllocated) { cjkRangesHandle.Free(); } if (koreanRangesHandle.IsAllocated) { koreanRangesHandle.Free(); } } catch (Exception ex) { if (cjkRangesHandle.IsAllocated) { cjkRangesHandle.Free(); } if (koreanRangesHandle.IsAllocated) { koreanRangesHandle.Free(); } ConfigManager.Logger.LogWarning((object)("[PEAK AIO] Font loading failed: " + ex.Message)); } } } public static class ImGuiInputPatch { private struct POINT { public int X; public int Y; } private const int VK_LBUTTON = 1; private const int VK_RBUTTON = 2; private const int VK_MBUTTON = 4; private static bool cachedLButton; private static bool cachedRButton; private static bool cachedMButton; private static float cachedScroll; private static float cachedMouseX; private static float cachedMouseY; private static bool forceInput; private static int logFrames; private static int renderLogFrames; private static bool nativeApiWorks = true; private static IntPtr gameWindowHandle = IntPtr.Zero; [DllImport("user32.dll")] private static extern short GetAsyncKeyState(int vKey); [DllImport("user32.dll")] private static extern bool GetCursorPos(out POINT lpPoint); [DllImport("user32.dll")] private static extern bool ScreenToClient(IntPtr hWnd, ref POINT lpPoint); [DllImport("cimgui", CallingConvention = CallingConvention.Cdecl)] private unsafe static extern void ImGuiIO_AddMouseButtonEvent(ImGuiIO* self, int mouse_button, byte mouse_down); [DllImport("cimgui", CallingConvention = CallingConvention.Cdecl)] private unsafe static extern void ImGuiIO_AddMouseWheelEvent(ImGuiIO* self, float wheel_x, float wheel_y); private static IntPtr GetGameWindow() { if (gameWindowHandle == IntPtr.Zero) { try { gameWindowHandle = Process.GetCurrentProcess().MainWindowHandle; } catch { } } return gameWindowHandle; } public static void SetForceInput(bool enabled) { forceInput = enabled; } public static void ResetLogs() { logFrames = 0; renderLogFrames = 0; } public static void CaptureInput() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) cachedLButton = (GetAsyncKeyState(1) & 0x8000) != 0; cachedRButton = (GetAsyncKeyState(2) & 0x8000) != 0; cachedMButton = (GetAsyncKeyState(4) & 0x8000) != 0; try { cachedScroll = Input.mouseScrollDelta.y; } catch { cachedScroll = 0f; } try { if (GetCursorPos(out var lpPoint)) { POINT lpPoint2 = lpPoint; IntPtr gameWindow = GetGameWindow(); if (gameWindow != IntPtr.Zero && ScreenToClient(gameWindow, ref lpPoint2)) { cachedMouseX = lpPoint2.X; cachedMouseY = lpPoint2.Y; } } } catch { } } public unsafe static void ApplyToImGui() { //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: 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_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) if (!forceInput) { return; } try { ImGuiIOPtr iO = ImGui.GetIO(); int configFlags = (int)((ImGuiIOPtr)(ref iO)).ConfigFlags; ref ImGuiConfigFlags configFlags2 = ref ((ImGuiIOPtr)(ref iO)).ConfigFlags; configFlags2 = (ImGuiConfigFlags)((uint)configFlags2 & 0xFFFFFFEFu); ((ImGuiIOPtr)(ref iO)).MousePos = new Vector2(cachedMouseX, cachedMouseY); if (nativeApiWorks) { try { ImGuiIO* nativePtr = ((ImGuiIOPtr)(ref iO)).NativePtr; ImGuiIO_AddMouseButtonEvent(nativePtr, 0, cachedLButton ? ((byte)1) : ((byte)0)); ImGuiIO_AddMouseButtonEvent(nativePtr, 1, cachedRButton ? ((byte)1) : ((byte)0)); ImGuiIO_AddMouseButtonEvent(nativePtr, 2, cachedMButton ? ((byte)1) : ((byte)0)); ImGuiIO_AddMouseWheelEvent(nativePtr, 0f, cachedScroll); } catch { nativeApiWorks = false; ConfigManager.Logger.LogWarning((object)"[InputPatch] Native event API failed, using legacy."); } } ((ImGuiIOPtr)(ref iO)).MouseDown[0] = cachedLButton; ((ImGuiIOPtr)(ref iO)).MouseDown[1] = cachedRButton; ((ImGuiIOPtr)(ref iO)).MouseDown[2] = cachedMButton; ((ImGuiIOPtr)(ref iO)).MouseWheel = cachedScroll; if (logFrames < 5) { logFrames++; bool flag = (configFlags & 0x10) != 0; ConfigManager.Logger.LogInfo((object)($"[InputPatch] nativeApi={nativeApiWorks} hadNoMouse={flag} " + $"win32Pos=({cachedMouseX:F0},{cachedMouseY:F0}) " + $"imguiPos=({((ImGuiIOPtr)(ref iO)).MousePos.X:F0},{((ImGuiIOPtr)(ref iO)).MousePos.Y:F0}) " + $"displaySize=({((ImGuiIOPtr)(ref iO)).DisplaySize.X:F0},{((ImGuiIOPtr)(ref iO)).DisplaySize.Y:F0}) " + $"hwnd={gameWindowHandle}")); } } catch (Exception arg) { if (logFrames < 5) { logFrames++; ConfigManager.Logger.LogError((object)$"[InputPatch] Error: {arg}"); } } } public static void LogPostNewFrame() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) if (!forceInput || renderLogFrames >= 15) { return; } try { ImGuiIOPtr iO = ImGui.GetIO(); Vector2 windowPos = ImGui.GetWindowPos(); Vector2 windowSize = ImGui.GetWindowSize(); bool flag = ImGui.IsWindowHovered((ImGuiHoveredFlags)131); ImGui.IsAnyItemHovered(); bool flag2 = ImGui.IsWindowFocused((ImGuiFocusedFlags)3); bool flag3 = ImGui.IsMouseHoveringRect(windowPos, new Vector2(windowPos.X + windowSize.X, windowPos.Y + windowSize.Y), false); if (cachedLButton) { renderLogFrames++; ConfigManager.Logger.LogInfo((object)("[InputPatch-Render] CLICK " + $"winHovered={flag} rectHover={flag3} winFocused={flag2} " + $"wantCapture={((ImGuiIOPtr)(ref iO)).WantCaptureMouse} configFlags=0x{(int)((ImGuiIOPtr)(ref iO)).ConfigFlags:X} " + $"imguiPos=({((ImGuiIOPtr)(ref iO)).MousePos.X:F0},{((ImGuiIOPtr)(ref iO)).MousePos.Y:F0}) " + $"winPos=({windowPos.X:F0},{windowPos.Y:F0}) winSize=({windowSize.X:F0},{windowSize.Y:F0})")); } else if (renderLogFrames < 5) { renderLogFrames++; ConfigManager.Logger.LogInfo((object)("[InputPatch-Render] " + $"winHovered={flag} rectHover={flag3} winFocused={flag2} " + $"wantCapture={((ImGuiIOPtr)(ref iO)).WantCaptureMouse} configFlags=0x{(int)((ImGuiIOPtr)(ref iO)).ConfigFlags:X} " + $"imguiPos=({((ImGuiIOPtr)(ref iO)).MousePos.X:F0},{((ImGuiIOPtr)(ref iO)).MousePos.Y:F0}) " + $"winPos=({windowPos.X:F0},{windowPos.Y:F0}) winSize=({windowSize.X:F0},{windowSize.Y:F0})")); } } catch { } } public static void Prefix() { ApplyToImGui(); } } [HarmonyPatch(typeof(CharacterAfflictions), "UpdateWeight")] public class Patch_UpdateWeight { private static CharacterAfflictions cachedLocalAfflictions; private static Character cachedLocalCharacter; private static void Postfix(CharacterAfflictions __instance) { if (!ConfigManager.NoWeight.Value) { return; } Character localCharacter = Character.localCharacter; if (localCharacter != null) { if (localCharacter != cachedLocalCharacter) { cachedLocalCharacter = localCharacter; cachedLocalAfflictions = ((Component)localCharacter).GetComponent<CharacterAfflictions>(); } if (__instance == cachedLocalAfflictions) { __instance.SetStatus((STATUSTYPE)7, 0f, true); } } } } public enum Language { English, SimplifiedChinese, Japanese, Korean, Italian, TraditionalChinese } public static class Localization { public static Language CurrentLanguage = Language.English; private static readonly Dictionary<string, Dictionary<Language, string>> Strings = new Dictionary<string, Dictionary<Language, string>> { { "tab.player", new Dictionary<Language, string> { { Language.English, "PLAYER" }, { Language.SimplifiedChinese, "玩家" }, { Language.TraditionalChinese, "玩家" }, { Language.Japanese, "プレイヤー" }, { Language.Korean, "플레이어" }, { Language.Italian, "GIOCATORE" } } }, { "tab.items", new Dictionary<Language, string> { { Language.English, "ITEMS" }, { Language.SimplifiedChinese, "物品" }, { Language.TraditionalChinese, "物品" }, { Language.Japanese, "アイテム" }, { Language.Korean, "아이템" }, { Language.Italian, "OGGETTI" } } }, { "tab.lobby", new Dictionary<Language, string> { { Language.English, "LOBBY" }, { Language.SimplifiedChinese, "大厅" }, { Language.TraditionalChinese, "大廳" }, { Language.Japanese, "ロビー" }, { Language.Korean, "로비" }, { Language.Italian, "LOBBY" } } }, { "tab.world", new Dictionary<Language, string> { { Language.English, "WORLD" }, { Language.SimplifiedChinese, "世界" }, { Language.TraditionalChinese, "世界" }, { Language.Japanese, "ワールド" }, { Language.Korean, "월드" }, { Language.Italian, "MONDO" } } }, { "tab.about", new Dictionary<Language, string> { { Language.English, "ABOUT" }, { Language.SimplifiedChinese, "关于" }, { Language.TraditionalChinese, "關於" }, { Language.Japanese, "情報" }, { Language.Korean, "정보" }, { Language.Italian, "INFO" } } }, { "tab.language", new Dictionary<Language, string> { { Language.English, "LANG" }, { Language.SimplifiedChinese, "语言" }, { Language.TraditionalChinese, "語言" }, { Language.Japanese, "言語" }, { Language.Korean, "언어" }, { Language.Italian, "LINGUA" } } }, { "player.selfmods", new Dictionary<Language, string> { { Language.English, "Self Mods" }, { Language.SimplifiedChinese, "自身模组" }, { Language.TraditionalChinese, "自身模組" }, { Language.Japanese, "セルフMOD" }, { Language.Korean, "셀프 모드" }, { Language.Italian, "Mod Personali" } } }, { "player.infinite_stamina", new Dictionary<Language, string> { { Language.English, "Infinite Stamina" }, { Language.SimplifiedChinese, "无限体力" }, { Language.TraditionalChinese, "無限體力" }, { Language.Japanese, "無限スタミナ" }, { Language.Korean, "무한 스태미나" }, { Language.Italian, "Stamina Infinita" } } }, { "player.freeze_afflictions", new Dictionary<Language, string> { { Language.English, "Freeze Afflictions" }, { Language.SimplifiedChinese, "冻结状态异常" }, { Language.TraditionalChinese, "凍結狀態異常" }, { Language.Japanese, "状態異常凍結" }, { Language.Korean, "상태이상 동결" }, { Language.Italian, "Blocca Afflizioni" } } }, { "player.no_weight", new Dictionary<Language, string> { { Language.English, "No Weight" }, { Language.SimplifiedChinese, "无重量" }, { Language.TraditionalChinese, "無重量" }, { Language.Japanese, "重量無効" }, { Language.Korean, "무게 무시" }, { Language.Italian, "Nessun Peso" } } }, { "player.change_speed", new Dictionary<Language, string> { { Language.English, "Change Speed" }, { Language.SimplifiedChinese, "修改速度" }, { Language.TraditionalChinese, "修改速度" }, { Language.Japanese, "速度変更" }, { Language.Korean, "속도 변경" }, { Language.Italian, "Modifica Velocità" } } }, { "player.change_jump", new Dictionary<Language, string> { { Language.English, "Change Jump" }, { Language.SimplifiedChinese, "修改跳跃" }, { Language.TraditionalChinese, "修改跳躍" }, { Language.Japanese, "ジャンプ変更" }, { Language.Korean, "점프 변경" }, { Language.Italian, "Modifica Salto" } } }, { "player.change_climb", new Dictionary<Language, string> { { Language.English, "Change Climb" }, { Language.SimplifiedChinese, "修改攀爬" }, { Language.TraditionalChinese, "修改攀爬" }, { Language.Japanese, "登攀速度変更" }, { Language.Korean, "등반 변경" }, { Language.Italian, "Modifica Arrampicata" } } }, { "player.change_vine_climb", new Dictionary<Language, string> { { Language.English, "Change Vine Climb" }, { Language.SimplifiedChinese, "修改藤蔓攀爬" }, { Language.TraditionalChinese, "修改藤蔓攀爬" }, { Language.Japanese, "ツル登攀変更" }, { Language.Korean, "덩굴 등반 변경" }, { Language.Italian, "Modifica Arrampicata su Liane" } } }, { "player.change_rope_climb", new Dictionary<Language, string> { { Language.English, "Change Rope Climb" }, { Language.SimplifiedChinese, "修改绳索攀爬" }, { Language.TraditionalChinese, "修改繩索攀爬" }, { Language.Japanese, "ロープ登攀変更" }, { Language.Korean, "로프 등반 변경" }, { Language.Italian, "Modifica Arrampicata su Corda" } } }, { "player.teleport_to_ping", new Dictionary<Language, string> { { Language.English, "Teleport to Ping" }, { Language.SimplifiedChinese, "传送到标记点" }, { Language.TraditionalChinese, "傳送到標記點" }, { Language.Japanese, "ピンに移動" }, { Language.Korean, "핑으로 텔레포트" }, { Language.Italian, "Teletrasporto al Ping" } } }, { "player.fly_mode", new Dictionary<Language, string> { { Language.English, "Fly Mode" }, { Language.SimplifiedChinese, "飞行模式" }, { Language.TraditionalChinese, "飛行模式" }, { Language.Japanese, "飛行モード" }, { Language.Korean, "비행 모드" }, { Language.Italian, "Modalità Volo" } } }, { "player.no_fall_dmg", new Dictionary<Language, string> { { Language.English, "No Fall Dmg" }, { Language.SimplifiedChinese, "无坠落伤害" }, { Language.TraditionalChinese, "無墜落傷害" }, { Language.Japanese, "落下ダメージ無効" }, { Language.Korean, "낙하 피해 없음" }, { Language.Italian, "Nessun Danno da Caduta" } } }, { "player.teleport", new Dictionary<Language, string> { { Language.English, "Teleport" }, { Language.SimplifiedChinese, "传送" }, { Language.TraditionalChinese, "傳送" }, { Language.Japanese, "テレポート" }, { Language.Korean, "텔레포트" }, { Language.Italian, "Teletrasporto" } } }, { "player.teleport_to_coords", new Dictionary<Language, string> { { Language.English, "Teleport to coords" }, { Language.SimplifiedChinese, "传送到坐标" }, { Language.TraditionalChinese, "傳送到座標" }, { Language.Japanese, "座標にテレポート" }, { Language.Korean, "좌표로 텔레포트" }, { Language.Italian, "Teletrasporto alle coordinate" } } }, { "player.details", new Dictionary<Language, string> { { Language.English, "Details" }, { Language.SimplifiedChinese, "详细设置" }, { Language.TraditionalChinese, "詳細設定" }, { Language.Japanese, "詳細設定" }, { Language.Korean, "상세 설정" }, { Language.Italian, "Dettagli" } } }, { "player.jump_mult", new Dictionary<Language, string> { { Language.English, "Jump Mult: %.2f" }, { Language.SimplifiedChinese, "跳跃倍率: %.2f" }, { Language.TraditionalChinese, "跳躍倍率: %.2f" }, { Language.Japanese, "ジャンプ倍率: %.2f" }, { Language.Korean, "점프 배율: %.2f" }, { Language.Italian, "Moltiplicatore Salto: %.2f" } } }, { "player.move_speed", new Dictionary<Language, string> { { Language.English, "Move Speed: %.2f" }, { Language.SimplifiedChinese, "移动速度: %.2f" }, { Language.TraditionalChinese, "移動速度: %.2f" }, { Language.Japanese, "移動速度: %.2f" }, { Language.Korean, "이동 속도: %.2f" }, { Language.Italian, "Velocità Movimento: %.2f" } } }, { "player.climb_speed", new Dictionary<Language, string> { { Language.English, "Climb Speed: %.2f" }, { Language.SimplifiedChinese, "攀爬速度: %.2f" }, { Language.TraditionalChinese, "攀爬速度: %.2f" }, { Language.Japanese, "登攀速度: %.2f" }, { Language.Korean, "등반 속도: %.2f" }, { Language.Italian, "Velocità Arrampicata: %.2f" } } }, { "player.vine_speed", new Dictionary<Language, string> { { Language.English, "Vine Speed: %.2f" }, { Language.SimplifiedChinese, "藤蔓速度: %.2f" }, { Language.TraditionalChinese, "藤蔓速度: %.2f" }, { Language.Japanese, "ツル速度: %.2f" }, { Language.Korean, "덩굴 속도: %.2f" }, { Language.Italian, "Velocità Liane: %.2f" } } }, { "player.rope_speed", new Dictionary<Language, string> { { Language.English, "Rope Speed: %.2f" }, { Language.SimplifiedChinese, "绳索速度: %.2f" }, { Language.TraditionalChinese, "繩索速度: %.2f" }, { Language.Japanese, "ロープ速度: %.2f" }, { Language.Korean, "로프 속도: %.2f" }, { Language.Italian, "Velocità Corda: %.2f" } } }, { "player.fly_speed", new Dictionary<Language, string> { { Language.English, "Fly Speed: %.2f" }, { Language.SimplifiedChinese, "飞行速度: %.2f" }, { Language.TraditionalChinese, "飛行速度: %.2f" }, { Language.Japanese, "飛行速度: %.2f" }, { Language.Korean, "비행 속도: %.2f" }, { Language.Italian, "Velocità Volo: %.2f" } } }, { "player.fly_acceleration", new Dictionary<Language, string> { { Language.English, "Fly Acceleration: %.2f" }, { Language.SimplifiedChinese, "飞行加速度: %.2f" }, { Language.TraditionalChinese, "飛行加速度: %.2f" }, { Language.Japanese, "飛行加速度: %.2f" }, { Language.Korean, "비행 가속도: %.2f" }, { Language.Italian, "Accelerazione Volo: %.2f" } } }, { "tip.infinite_stamina", new Dictionary<Language, string> { { Language.English, "Prevents stamina from decreasing, allowing unlimited sprinting and actions." }, { Language.SimplifiedChinese, "防止体力下降,允许无限冲刺和执行动作。" }, { Language.TraditionalChinese, "防止體力下降,允許無限衝刺和執行動作。" }, { Language.Japanese, "スタミナの減少を防ぎ、無制限のダッシュとアクションを可能にします。" }, { Language.Korean, "스태미나 감소를 방지하여 무제한 달리기와 행동이 가능합니다." }, { Language.Italian, "Impedisce alla stamina di diminuire, permettendo scatti e azioni illimitate." } } }, { "tip.freeze_afflictions", new Dictionary<Language, string> { { Language.English, "Prevents your statuses from changing." }, { Language.SimplifiedChinese, "防止你的状态发生变化。" }, { Language.TraditionalChinese, "防止你的狀態發生變化。" }, { Language.Japanese, "ステータスの変化を防ぎます。" }, { Language.Korean, "상태 변화를 방지합니다." }, { Language.Italian, "Impedisce ai tuoi stati di cambiare." } } }, { "tip.no_weight", new Dictionary<Language, string> { { Language.English, "Disables weight penalties from carried items and backpack." }, { Language.SimplifiedChinese, "禁用携带物品和背包的重量惩罚。" }, { Language.TraditionalChinese, "禁用攜帶物品和背包的重量懲罰。" }, { Language.Japanese, "所持アイテムやバックパックの重量ペナルティを無効にします。" }, { Language.Korean, "소지품 및 배낭의 무게 패널티를 비활성화합니다." }, { Language.Italian, "Disabilita le penalità di peso dagli oggetti trasportati e dallo zaino." } } }, { "tip.change_speed", new Dictionary<Language, string> { { Language.English, "Overrides your character's movement speed with a custom multiplier." }, { Language.SimplifiedChinese, "使用自定义倍率覆盖角色的移动速度。" }, { Language.TraditionalChinese, "使用自訂倍率覆蓋角色的移動速度。" }, { Language.Japanese, "キャラクターの移動速度をカスタム倍率で上書きします。" }, { Language.Korean, "캐릭터의 이동 속도를 사용자 정의 배율로 변경합니다." }, { Language.Italian, "Sostituisce la velocità di movimento del personaggio con un moltiplicatore personalizzato." } } }, { "tip.change_jump", new Dictionary<Language, string> { { Language.English, "Modifies jump height, allowing higher or lower jumps depending on your settings." }, { Language.SimplifiedChinese, "修改跳跃高度,根据设置允许更高或更低的跳跃。" }, { Language.TraditionalChinese, "修改跳躍高度,根據設定允許更高或更低的跳躍。" }, { Language.Japanese, "ジャンプの高さを変更し、設定に応じて高くまたは低くジャンプできます。" }, { Language.Korean, "점프 높이를 수정하여 설정에 따라 더 높거나 낮게 점프할 수 있습니다." }, { Language.Italian, "Modifica l'altezza del salto, permettendo salti più alti o più bassi in base alle impostazioni." } } }, { "tip.change_climb", new Dictionary<Language, string> { { Language.English, "Adjusts the speed at which you climb ladders and surfaces." }, { Language.SimplifiedChinese, "调整攀爬梯子和表面的速度。" }, { Language.TraditionalChinese, "調整攀爬梯子和表面的速度。" }, { Language.Japanese, "はしごや壁を登る速度を調整します。" }, { Language.Korean, "사다리와 표면을 오르는 속도를 조정합니다." }, { Language.Italian, "Regola la velocità con cui ti arrampichi su scale e superfici." } } }, { "tip.change_vine_climb", new Dictionary<Language, string> { { Language.English, "Changes climbing speed specifically for vines." }, { Language.SimplifiedChinese, "专门修改藤蔓的攀爬速度。" }, { Language.TraditionalChinese, "專門修改藤蔓的攀爬速度。" }, { Language.Japanese, "ツルの登攀速度を変更します。" }, { Language.Korean, "덩굴 등반 속도를 변경합니다." }, { Language.Italian, "Modifica la velocità di arrampicata per le liane." } } }, { "tip.change_rope_climb", new Dictionary<Language, string> { { Language.English, "Modifies climbing speed when using ropes or rope-based obstacles." }, { Language.SimplifiedChinese, "修改使用绳索或绳索障碍物时的攀爬速度。" }, { Language.TraditionalChinese, "修改使用繩索或繩索障礙物時的攀爬速度。" }, { Language.Japanese, "ロープやロープ系障害物での登攀速度を変更します。" }, { Language.Korean, "로프 또는 로프 장애물 사용 시 등반 속도를 수정합니다." }, { Language.Italian, "Modifica la velocità di arrampicata quando si usano corde o ostacoli basati su corde." } } }, { "tip.teleport_to_ping", new Dictionary<Language, string> { { Language.English, "Teleports your character to the pinged location on the map." }, { Language.SimplifiedChinese, "将角色传送到地图上的标记位置。" }, { Language.TraditionalChinese, "將角色傳送到地圖上的標記位置。" }, { Language.Japanese, "マップ上のピンの位置にキャラクターをテレポートします。" }, { Language.Korean, "캐릭터를 맵에서 핑한 위치로 텔레포트합니다." }, { Language.Italian, "Teletrasporta il tuo personaggio alla posizione del ping sulla mappa." } } }, { "tip.fly_mode", new Dictionary<Language, string> { { Language.English, "Allows free movement in all directions while ignoring gravity." }, { Language.SimplifiedChinese, "允许忽略重力在所有方向自由移动。" }, { Language.TraditionalChinese, "允許忽略重力在所有方向自由移動。" }, { Language.Japanese, "重力を無視して全方向に自由移動できます。" }, { Language.Korean, "중력을 무시하고 모든 방향으로 자유 이동이 가능합니다." }, { Language.Italian, "Permette il movimento libero in tutte le direzioni ignorando la gravità." } } }, { "items.slot", new Dictionary<Language, string> { { Language.English, "Slot" }, { Language.SimplifiedChinese, "槽位" }, { Language.TraditionalChinese, "槽位" }, { Language.Japanese, "スロット" }, { Language.Korean, "슬롯" }, { Language.Italian, "Slot" } } }, { "items.item_n", new Dictionary<Language, string> { { Language.English, "Item {0}:" }, { Language.SimplifiedChinese, "物品 {0}:" }, { Language.TraditionalChinese, "物品 {0}:" }, { Language.Japanese, "アイテム {0}:" }, { Language.Korean, "아이템 {0}:" }, { Language.Italian, "Oggetto {0}:" } } }, { "items.none", new Dictionary<Language, string> { { Language.English, "None" }, { Language.SimplifiedChinese, "无" }, { Language.TraditionalChinese, "無" }, { Language.Japanese, "なし" }, { Language.Korean, "없음" }, { Language.Italian, "Nessuno" } } }, { "items.search", new Dictionary<Language, string> { { Language.English, "Search items..." }, { Language.SimplifiedChinese, "搜索物品..." }, { Language.TraditionalChinese, "搜尋物品..." }, { Language.Japanese, "アイテム検索..." }, { Language.Korean, "아이템 검색..." }, { Language.Italian, "Cerca oggetti..." } } }, { "items.charge_format", new Dictionary<Language, string> { { Language.English, "Charge: %.1f" }, { Language.SimplifiedChinese, "充能: %.1f" }, { Language.TraditionalChinese, "充能: %.1f" }, { Language.Japanese, "チャージ: %.1f" }, { Language.Korean, "충전: %.1f" }, { Language.Italian, "Carica: %.1f" } } }, { "items.recharge", new Dictionary<Language, string> { { Language.English, "Recharge" }, { Language.SimplifiedChinese, "充能" }, { Language.TraditionalChinese, "充能" }, { Language.Japanese, "チャージ" }, { Language.Korean, "충전" }, { Language.Italian, "Ricarica" } } }, { "items.refresh", new Dictionary<Language, string> { { Language.English, "Refresh Item List" }, { Language.SimplifiedChinese, "刷新物品列表" }, { Language.TraditionalChinese, "重新整理物品列表" }, { Language.Japanese, "アイテムリスト更新" }, { Language.Korean, "아이템 목록 새로고침" }, { Language.Italian, "Aggiorna Lista Oggetti" } } }, { "tip.item_search", new Dictionary<Language, string> { { Language.English, "Search and assign any available item to this slot." }, { Language.SimplifiedChinese, "搜索并分配任何可用物品到此槽位。" }, { Language.TraditionalChinese, "搜尋並分配任何可用物品到此槽位。" }, { Language.Japanese, "利用可能なアイテムを検索してこのスロットに割り当てます。" }, { Language.Korean, "사용 가능한 아이템을 검색하여 이 슬롯에 할당합니다." }, { Language.Italian, "Cerca e assegna qualsiasi oggetto disponibile a questo slot." } } }, { "tip.recharge", new Dictionary<Language, string> { { Language.English, "Set how much to recharge the item's charges when clicking 'Recharge'." }, { Language.SimplifiedChinese, "设置点击「充能」时为物品充能的数量。" }, { Language.TraditionalChinese, "設定點擊「充能」時為物品充能的數量。" }, { Language.Japanese, "「チャージ」クリック時のチャージ量を設定します。" }, { Language.Korean, "'충전' 클릭 시 아이템 충전량을 설정합니다." }, { Language.Italian, "Imposta quanta carica aggiungere all'oggetto quando clicchi 'Ricarica'." } } }, { "tip.refresh_items", new Dictionary<Language, string> { { Language.English, "Reloads the list of available items in case something was missed or updated." }, { Language.SimplifiedChinese, "重新加载可用物品列表,以防遗漏或更新。" }, { Language.TraditionalChinese, "重新載入可用物品列表,以防遺漏或更新。" }, { Language.Japanese, "見落としや更新に備え、利用可能なアイテムリストを再読み込みします。" }, { Language.Korean, "누락되거나 업데이트된 경우 사용 가능한 아이템 목록을 다시 불러옵니다." }, { Language.Italian, "Ricarica l'elenco degli oggetti disponibili nel caso qualcosa sia stato perso o aggiornato." } } }, { "lobby.players", new Dictionary<Language, string> { { Language.English, "Lobby Players" }, { Language.SimplifiedChinese, "大厅玩家" }, { Language.TraditionalChinese, "大廳玩家" }, { Language.Japanese, "ロビープレイヤー" }, { Language.Korean, "로비 플레이어" }, { Language.Italian, "Giocatori nella Lobby" } } }, { "lobby.select_player", new Dictionary<Language, string> { { Language.English, "Select Player" }, { Language.SimplifiedChinese, "选择玩家" }, { Language.TraditionalChinese, "選擇玩家" }, { Language.Japanese, "プレイヤー選択" }, { Language.Korean, "플레이어 선택" }, { Language.Italian, "Seleziona Giocatore" } } }, { "lobby.all_players", new Dictionary<Language, string> { { Language.English, "All Players" }, { Language.SimplifiedChinese, "所有玩家" }, { Language.TraditionalChinese, "所有玩家" }, { Language.Japanese, "全プレイヤー" }, { Language.Korean, "모든 플레이어" }, { Language.Italian, "Tutti i Giocatori" } } }, { "lobby.revive_all", new Dictionary<Language, string> { { Language.English, "Revive All" }, { Language.SimplifiedChinese, "复活全部" }, { Language.TraditionalChinese, "復活全部" }, { Language.Japanese, "全員復活" }, { Language.Korean, "전원 부활" }, { Language.Italian, "Rianima Tutti" } } }, { "lobby.kill_all", new Dictionary<Language, string> { { Language.English, "Kill All" }, { Language.SimplifiedChinese, "击杀全部" }, { Language.TraditionalChinese, "擊殺全部" }, { Language.Japanese, "全員キル" }, { Language.Korean, "전원 처치" }, { Language.Italian, "Uccidi Tutti" } } }, { "lobby.exclude_self", new Dictionary<Language, string> { { Language.English, "Exclude Self from Kill All" }, { Language.SimplifiedChinese, "击杀全部时排除自己" }, { Language.TraditionalChinese, "擊殺全部時排除自己" }, { Language.Japanese, "全員キルから自分を除外" }, { Language.Korean, "전원 처치에서 자신 제외" }, { Language.Italian, "Escludi Te Stesso da Uccidi Tutti" } } }, { "lobby.warp_all_to_me", new Dictionary<Language, string> { { Language.English, "Warp All To Me" }, { Language.SimplifiedChinese, "将所有人传送到我身边" }, { Language.TraditionalChinese, "將所有人傳送到我身邊" }, { Language.Japanese, "全員を自分の元へ" }, { Language.Korean, "전원 내게 워프" }, { Language.Italian, "Teletrasporta Tutti da Me" } } }, { "lobby.refresh_players", new Dictionary<Language, string> { { Language.English, "Refresh Players List" }, { Language.SimplifiedChinese, "刷新玩家列表" }, { Language.TraditionalChinese, "重新整理玩家列表" }, { Language.Japanese, "プレイヤーリスト更新" }, { Language.Korean, "플레이어 목록 새로고침" }, { Language.Italian, "Aggiorna Lista Giocatori" } } }, { "tip.refresh_players", new Dictionary<Language, string> { { Language.English, "Manually reloads the list of players in case it didn't update automatically." }, { Language.SimplifiedChinese, "手动重新加载玩家列表,以防未自动更新。" }, { Language.TraditionalChinese, "手動重新載入玩家列表,以防未自動更新。" }, { Language.Japanese, "自動更新されなかった場合に手動でプレイヤーリストを再読み込みします。" }, { Language.Korean, "자동 업데이트되지 않은 경우 수동으로 플레이어 목록을 다시 불러옵니다." }, { Language.Italian, "Ricarica manualmente l'elenco dei giocatori nel caso non si sia aggiornato automaticamente." } } }, { "lobby.actions", new Dictionary<Language, string> { { Language.English, "Actions" }, { Language.SimplifiedChinese, "操作" }, { Language.TraditionalChinese, "操作" }, { Language.Japanese, "アクション" }, { Language.Korean, "행동" }, { Language.Italian, "Azioni" } } }, { "lobby.revive", new Dictionary<Language, string> { { Language.English, "Revive" }, { Language.SimplifiedChinese, "复活" }, { Language.TraditionalChinese, "復活" }, { Language.Japanese, "復活" }, { Language.Korean, "부활" }, { Language.Italian, "Rianima" } } }, { "lobby.kill", new Dictionary<Language, string> { { Language.English, "Kill" }, { Language.SimplifiedChinese, "击杀" }, { Language.TraditionalChinese, "擊殺" }, { Language.Japanese, "キル" }, { Language.Korean, "처치" }, { Language.Italian, "Uccidi" } } }, { "lobby.warp_to", new Dictionary<Language, string> { { Language.English, "Warp To" }, { Language.SimplifiedChinese, "传送至" }, { Language.TraditionalChinese, "傳送至" }, { Language.Japanese, "ワープ" }, { Language.Korean, "워프" }, { Language.Italian, "Teletrasporta a" } } }, { "lobby.warp_to_me", new Dictionary<Language, string> { { Language.English, "Warp To Me" }, { Language.SimplifiedChinese, "传送到我身边" }, { Language.TraditionalChinese, "傳送到我身邊" }, { Language.Japanese, "自分の元へ" }, { Language.Korean, "내게 워프" }, { Language.Italian, "Teletrasporta da Me" } } }, { "lobby.special_actions", new Dictionary<Language, string> { { Language.English, "Special Actions" }, { Language.SimplifiedChinese, "特殊操作" }, { Language.TraditionalChinese, "特殊操作" }, { Language.Japanese, "特殊アクション" }, { Language.Korean, "특수 행동" }, { Language.Italian, "Azioni Speciali" } } }, { "lobby.spawn_scoutmaster", new Dictionary<Language, string> { { Language.English, "Spawn Scoutmaster" }, { Language.SimplifiedChinese, "生成Scoutmaster" }, { Language.TraditionalChinese, "生成Scoutmaster" }, { Language.Japanese, "スカウトマスター召喚" }, { Language.Korean, "스카우트마스터 소환" }, { Language.Italian, "Genera Scoutmaster" } } }, { "tip.spawn_scoutmaster", new Dictionary<Language, string> { { Language.English, "Spawns a Scoutmaster near the selected player. Only works for host. Forces aggro." }, { Language.SimplifiedChinese, "在选定玩家附近生成Scoutmaster。仅限房主使用。强制仇恨。" }, { Language.TraditionalChinese, "在選定玩家附近生成Scoutmaster。僅限房主使用。強制仇恨。" }, { Language.Japanese, "選択したプレイヤーの近くにスカウトマスターを召喚します。ホスト専用。アグロ強制。" }, { Language.Korean, "선택한 플레이어 근처에 스카우트마스터를 소환합니다. 호스트 전용. 어그로 강제." }, { Language.Italian, "Genera uno Scoutmaster vicino al giocatore selezionato. Funziona solo per l'host. Forza l'aggro." } } }, { "lobby.no_player_selected", new Dictionary<Language, string> { { Language.English, "No player selected." }, { Language.SimplifiedChinese, "未选择玩家。" }, { Language.TraditionalChinese, "未選擇玩家。" }, { Language.Japanese, "プレイヤーが選択されていません。" }, { Language.Korean, "플레이어가 선택되지 않았습니다." }, { Language.Italian, "Nessun giocatore selezionato." } } }, { "world.containers", new Dictionary<Language, string> { { Language.English, "Containers" }, { Language.SimplifiedChinese, "容器" }, { Language.TraditionalChinese, "容器" }, { Language.Japanese, "コンテナ" }, { Language.Korean, "컨테이너" }, { Language.Italian, "Contenitori" } } }, { "world.select_container", new Dictionary<Language, string> { { Language.English, "Select Container" }, { Language.SimplifiedChinese, "选择容器" }, { Language.TraditionalChinese, "選擇容器" }, { Language.Japanese, "コンテナ選択" }, { Language.Korean, "컨테이너 선택" }, { Language.Italian, "Seleziona Contenitore" } } }, { "world.no_containers", new Dictionary<Language, string> { { Language.English, "No containers found." }, { Language.SimplifiedChinese, "未找到容器。" }, { Language.TraditionalChinese, "未找到容器。" }, { Language.Japanese, "コンテナが見つかりません。" }, { Language.Korean, "컨테이너를 찾을 수 없습니다." }, { Language.Italian, "Nessun contenitore trovato." } } }, { "world.refresh_luggage", new Dictionary<Language, string> { { Language.English, "Refresh Luggage List" }, { Language.SimplifiedChinese, "刷新行李列表" }, { Language.TraditionalChinese, "重新整理行李列表" }, { Language.Japanese, "荷物リスト更新" }, { Language.Korean, "수하물 목록 새로고침" }, { Language.Italian, "Aggiorna Lista Bagagli" } } }, { "tip.refresh_luggage", new Dictionary<Language, string> { { Language.English, "Reloads the list of luggage within 300m of your position." }, { Language.SimplifiedChinese, "重新加载你位置300米内的行李列表。" }, { Language.TraditionalChinese, "重新載入你位置300公尺內的行李列表。" }, { Language.Japanese, "現在地から300m以内の荷物リストを再読み込みします。" }, { Language.Korean, "현재 위치에서 300m 이내의 수하물 목록을 다시 불러옵니다." }, { Language.Italian, "Ricarica l'elenco dei bagagli entro 300m dalla tua posizione." } } }, { "world.all_nearby", new Dictionary<Language, string> { { Language.English, "All Nearby Containers" }, { Language.SimplifiedChinese, "附近所有容器" }, { Language.TraditionalChinese, "附近所有容器" }, { Language.Japanese, "近くの全コンテナ" }, { Language.Korean, "주변 모든 컨테이너" }, { Language.Italian, "Tutti i Contenitori Vicini" } } }, { "world.open_all_nearby", new Dictionary<Language, string> { { Language.English, "Open All Nearby" }, { Language.SimplifiedChinese, "打开附近所有" }, { Language.TraditionalChinese, "打開附近所有" }, { Language.Japanese, "近くを全て開く" }, { Language.Korean, "주변 모두 열기" }, { Language.Italian, "Apri Tutti i Vicini" } } }, { "world.warp_to_luggage", new Dictionary<Language, string> { { Language.English, "Warp To Luggage" }, { Language.SimplifiedChinese, "传送到行李" }, { Language.TraditionalChinese, "傳送到行李" }, { Language.Japanese, "荷物にワープ" }, { Language.Korean, "수하물로 워프" }, { Language.Italian, "Teletrasporta al Bagaglio" } } }, { "world.open_luggage", new Dictionary<Language, string> { { Language.English, "Open Luggage" }, { Language.SimplifiedChinese, "打开行李" }, { Language.TraditionalChinese, "打開行李" }, { Language.Japanese, "荷物を開く" }, { Language.Korean, "수하물 열기" }, { Language.Italian, "Apri Bagaglio" } } }, { "world.no_luggage_selected", new Dictionary<Language, string> { { Language.English, "No luggage selected." }, { Language.SimplifiedChinese, "未选择行李。" }, { Language.TraditionalChinese, "未選擇行李。" }, { Language.Japanese, "荷物が選択されていません。" }, { Language.Korean, "수하물이 선택되지 않았습니다." }, { Language.Italian, "Nessun bagaglio selezionato." } } }, { "about.title", new Dictionary<Language, string> { { Language.English, "PEAK AIO Mod" }, { Language.SimplifiedChinese, "PEAK AIO 模组" }, { Language.TraditionalChinese, "PEAK AIO 模組" }, { Language.Japanese, "PEAK AIO MOD" }, { Language.Korean, "PEAK AIO 모드" }, { Language.Italian, "PEAK AIO Mod" } } }, { "about.version", new Dictionary<Language, string> { { Language.English, "Version: 1.1.2" }, { Language.SimplifiedChinese, "版本: 1.1.2" }, { Language.TraditionalChinese, "版本: 1.1.2" }, { Language.Japanese, "バージョン: 1.1.2" }, { Language.Korean, "버전: 1.1.2" }, { Language.Italian, "Versione: 1.1.2" } } }, { "about.author", new Dictionary<Language, string> { { Language.English, "Author: K1rito (Inspired by OniGremlin)" }, { Language.SimplifiedChinese, "作者: K1rito (启发于OniGremlin)" }, { Language.TraditionalChinese, "作者: K1rito (啟發於OniGremlin)" }, { Language.Japanese, "作者: K1rito (OniGremlin からインスパイア)" }, { Language.Korean, "제작자: K1rito (OniGremlin 에서 영감)" }, { Language.Italian, "Autore: K1rito (Ispirato da OniGremlin)" } } }, { "about.description", new Dictionary<Language, string> { { Language.English, "PEAK AIO is a quality-of-life and utility mod designed for the game PEAK. It brings together a wide range of player enhancements, inventory tools, world manipulation, and lobby control features in one sleek ImGui-powered interface." }, { Language.SimplifiedChinese, "PEAK AIO 是为游戏 PEAK 设计的生活质量和实用模组。它将广泛的玩家增强、物品工具、世界操控和大厅控制功能集成在一个简洁的 ImGui 界面中。" }, { Language.TraditionalChinese, "PEAK AIO 是為遊戲 PEAK 設計的生活品質和實用模組。它將廣泛的玩家增強、物品工具、世界操控和大廳控制功能整合在一個簡潔的 ImGui 介面中。" }, { Language.Japanese, "PEAK AIO はゲーム PEAK 向けに設計されたQOL・ユーティリティMODです。プレイヤー強化、インベントリツール、ワールド操作、ロビー制御機能を、洗練されたImGuiインターフェースにまとめています。" }, { Language.Korean, "PEAK AIO는 게임 PEAK를 위해 설계된 편의성 및 유틸리티 모드입니다. 플레이어 강화, 인벤토리 도구, 월드 조작, 로비 제어 기능을 세련된 ImGui 인터페이스에 통합했습니다." }, { Language.Italian, "PEAK AIO è una mod di qualità di vita e utilità progettata per il gioco PEAK. Riunisce una vasta gamma di miglioramenti per il giocatore, strumenti per l'inventario, manipolazione del mondo e funzionalità di controllo della lobby in un'elegante interfaccia basata su ImGui." } } }, { "about.key_features", new Dictionary<Language, string> { { Language.English, "Key Features:" }, { Language.SimplifiedChinese, "主要功能:" }, { Language.TraditionalChinese, "主要功能:" }, { Language.Japanese, "主な機能:" }, { Language.Korean, "주요 기능:" }, { Language.Italian, "Caratteristiche Principali:" } } }, { "about.feature1", new Dictionary<Language, string> { { Language.English, "Infinite stamina and affliction immunity" }, { Language.SimplifiedChinese, "无限体力和状态异常免疫" }, { Language.TraditionalChinese, "無限體力和狀態異常免疫" }, { Language.Japanese, "無限スタミナと状態異常免疫" }, { Language.Korean, "무한 스태미나 및 상태이상 면역" }, { Language.Italian, "Stamina infinita e immunità alle afflizioni" } } }, { "about.feature2", new Dictionary<Language, string> { { Language.English, "Adjustable movement: speed, jump, and climb mods" }, { Language.SimplifiedChinese, "可调节移动: 速度、跳跃和攀爬模组" }, { Language.TraditionalChinese, "可調節移動: 速度、跳躍和攀爬模組" }, { Language.Japanese, "速度・ジャンプ・登攀の調整可能なMOD" }, { Language.Korean, "조정 가능한 이동: 속도, 점프, 등반 모드" }, { Language.Italian, "Movimento regolabile: mod di velocità, salto e arrampicata" } } }, { "about.feature3", new Dictionary<Language, string> { { Language.English, "Real-time inventory editing and recharge" }, { Language.SimplifiedChinese, "实时物品编辑和充能" }, { Language.TraditionalChinese, "即時物品編輯和充能" }, { Language.Japanese, "リアルタイムインベントリ編集とチャージ" }, { Language.Korean, "실시간 인벤토리 편집 및 충전" }, { Language.Italian, "Modifica e ricarica dell'inventario in tempo reale" } } }, { "about.feature4", new Dictionary<Language, string> { { Language.English, "Player-to-player warp, revive, and kill tools" }, { Language.SimplifiedChinese, "玩家间传送、复活和击杀工具" }, { Language.TraditionalChinese, "玩家間傳送、復活和擊殺工具" }, { Language.Japanese, "プレイヤー間ワープ・復活・キルツール" }, { Language.Korean, "플레이어 간 워프, 부활, 처치 도구" }, { Language.Italian, "Strumenti di teletrasporto, rianimazione e uccisione tra giocatori" } } }, { "about.feature5", new Dictionary<Language, string> { { Language.English, "Custom teleportation and ping-based movement" }, { Language.SimplifiedChinese, "自定义传送和基于标记的移动" }, { Language.TraditionalChinese, "自訂傳送和基於標記的移動" }, { Language.Japanese, "カスタムテレポートとピングベース移動" }, { Language.Korean, "사용자 정의 텔레포트 및 핑 기반 이동" }, { Language.Italian, "Teletrasporto personalizzato e movimento basato su ping" } } }, { "about.feature6", new Dictionary<Language, string> { { Language.English, "Stylized UI with tabbed interface" }, { Language.SimplifiedChinese, "风格化的标签页界面" }, { Language.TraditionalChinese, "具有分頁介面的風格化UI" }, { Language.Japanese, "タブ付きスタイリッシュUI" }, { Language.Korean, "탭 인터페이스를 갖춘 스타일리시 UI" }, { Language.Italian, "Interfaccia stilizzata con schede" } } }, { "about.thanks", new Dictionary<Language, string> { { Language.English, "Special Thanks:" }, { Language.SimplifiedChinese, "特别感谢:" }, { Language.TraditionalChinese, "特別感謝:" }, { Language.Japanese, "スペシャルサンクス:" }, { Language.Korean, "특별 감사:" }, { Language.Italian, "Ringraziamenti Speciali:" } } }, { "about.thanks1", new Dictionary<Language, string> { { Language.English, "Penswer for insight, and guidance" }, { Language.SimplifiedChinese, "Penswer 提供的见解和指导" }, { Language.TraditionalChinese, "Penswer 提供的見解和指導" }, { Language.Japanese, "Penswer 氏の洞察とガイダンス" }, { Language.Korean, "Penswer의 통찰과 안내" }, { Language.Italian, "Penswer per intuizione e guida" } } }, { "about.thanks2", new Dictionary<Language, string> { { Language.English, "BepInEx team for the modding framework" }, { Language.SimplifiedChinese, "BepInEx 团队提供的模组框架" }, { Language.TraditionalChinese, "BepInEx 團隊提供的模組框架" }, { Language.Japanese, "BepInEx チームのMODフレームワーク" }, { Language.Korean, "BepInEx 팀의 모딩 프레임워크" }, { Language.Italian, "Team BepInEx per il framework di modding" } } }, { "about.thanks3", new Dictionary<Language, string> { { Language.English, "DearImGuiInjection for seamless UI integration" }, { Language.SimplifiedChinese, "DearImGuiInjection 提供的无缝UI集成" }, { Language.TraditionalChinese, "DearImGuiInjection 提供的無縫UI整合" }, { Language.Japanese, "DearImGuiInjection のシームレスなUI統合" }, { Language.Korean, "DearImGuiInjection의 원활한 UI 통합" }, { Language.Italian, "DearImGuiInjection per l'integrazione UI senza soluzione di continuità" } } }, { "about.thanks4", new Dictionary<Language, string> { { Language.English, "HarmonyX for runtime patching support" }, { Language.SimplifiedChinese, "HarmonyX 提供的运行时补丁支持" }, { Language.TraditionalChinese, "HarmonyX 提供的執行時修補支援" }, { Language.Japanese, "HarmonyX のランタイムパッチサポート" }, { Language.Korean, "HarmonyX의 런타임 패치 지원" }, { Language.Italian, "HarmonyX per il supporto al patching runtime" } } }, { "about.disclaimer", new Dictionary<Language, string> { { Language.English, "This mod is provided as-is for educational and personal use. Not affiliated with or endorsed by the developers of PEAK. Use responsibly." }, { Language.SimplifiedChinese, "此模组按原样提供,仅供教育和个人使用。与PEAK的开发者无关,也未获得其认可。请负责任地使用。" }, { Language.TraditionalChinese, "此模組按原樣提供,僅供教育和個人使用。與PEAK的開發者無關,也未獲得其認可。請負責任地使用。" }, { Language.Japanese, "このMODは教育および個人使用を目的として現状のまま提供されます。PEAKの開発者とは無関係であり、推奨もされていません。責任を持ってご使用ください。" }, { Language.Korean, "이 모드는 교육 및 개인 용도로 있는 그대로 제공됩니다. PEAK 개발자와 관련이 없으며 승인을 받지 않았습니다. 책임감 있게 사용하세요." }, { Language.Italian, "Questa mod è fornita così com'è per uso educativo e personale. Non affiliata o approvata dagli sviluppatori di PEAK. Usare responsabilmente." } } }, { "lang.title", new Dictionary<Language, string> { { Language.English, "Language Settings" }, { Language.SimplifiedChinese, "语言设置" }, { Language.TraditionalChinese, "語言設定" }, { Language.Japanese, "言語設定" }, { Language.Korean, "언어 설정" }, { Language.Italian, "Impostazioni Lingua" } } }, { "lang.select", new Dictionary<Language, string> { { Language.English, "Select Language:" }, { Language.SimplifiedChinese, "选择语言:" }, { Language.TraditionalChinese, "選擇語言:" }, { Language.Japanese, "言語を選択:" }, { Language.Korean, "언어 선택:" }, { Language.Italian, "Seleziona Lingua:" } } }, { "lang.current", new Dictionary<Language, string> { { Language.English, "Current Language: English" }, { Language.SimplifiedChinese, "当前语言: 简体中文" }, { Language.TraditionalChinese, "當前語言: 繁體中文" }, { Language.Japanese, "現在の言語: 日本語" }, { Language.Korean, "현재 언어: 한국어" }, { Language.Italian, "Lingua Corrente: Italiano" } } } }; public static readonly string[] LanguageNames = new string[6] { "English", "简体中文", "日本語", "한국어", "Italiano", "繁體中文" }; public static string T(string key) { if (Strings.TryGetValue(key, out var value)) { if (value.TryGetValue(CurrentLanguage, out var value2)) { return value2; } if (value.TryGetValue(Language.English, out var value3)) { return value3; } } return key; } public static string T(string key, params object[] args) { return string.Format(T(key), args); } public static void SetLanguage(Language lang) { CurrentLanguage = lang; } public static void SetLanguage(int index) { if (index >= 0 && index < LanguageNames.Length) { CurrentLanguage = (Language)index; } } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.onigremlin.peakaio", "PEAK AIO Mod", "1.1.2")] public class PeakMod : BaseUnityPlugin { private bool styleApplied; private bool showMenu; private bool wasMenuScene; private int selectedTab = 1; private static readonly FieldInfo cursorVisibleField = typeof(DearImGuiInjection).GetField("<IsCursorVisible>k__BackingField", BindingFlags.Static | BindingFlags.NonPublic); private static readonly MethodInfo updateCursorMethod = typeof(DearImGuiInjection).GetMethod("UpdateCursorVisibility", BindingFlags.Static | BindingFlags.NonPublic); private void ApplyCustomStyle() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) ImGuiStylePtr style = ImGui.GetStyle(); RangeAccessor<Vector4> colors = ((ImGuiStylePtr)(ref style)).Colors; Vector4 vector = new Vector4(0.953f, 0.941f, 0.902f, 1f); Vector4 vector2 = new Vector4(0.361f, 0.294f, 0.231f, 1f); Vector4 vector3 = new Vector4(0.18f, 0.18f, 0.18f, 1f); Vector4 vector4 = new Vector4(0.18f, 0.28f, 0.22f, 1f); Vector4 vector5 = new Vector4(0.866f, 0.827f, 0.741f, 1f); Vector4 vector6 = new Vector4(0.8f, 0.78f, 0.65f, 1f); Vector4 vector7 = new Vector4(0.75f, 0.72f, 0.61f, 1f); Vector4 vector8 = new Vector4(0.55f, 0.42f, 0.28f, 1f); new Vector4(0.75f, 0.6f, 0.5f, 1f); new Vector4(0.76f, 0.44f, 0.39f, 1f); Vector4 vector9 = new Vector4(0.318f, 0.569f, 0.384f, 1f); colors[2] = vector; colors[5] = vector3; colors[10] = vector9; colors[11] = vector9; colors[0] = vector3; colors[1] = vector8; colors[18] = vector4; colors[7] = vector5; colors[8] = vector6; colors[9] = vector7; colors[5] = vector8; colors[4] = vector; colors[44] = vector9; colors[45] = vector8; colors[46] = vector8; colors[3] = vector5; colors[21] = vector5; colors[22] = vector6; colors[23] = vector7; colors[24] = vector5; colors[25] = vector5; colors[26] = vector5; colors[27] = vector8; colors[14] = vector2; colors[15] = vector4; colors[16] = new Vector4(vector4.X + 0.1f, vector4.Y + 0.1f, vector4.Z + 0.1f, 1f); colors[17] = new Vector4(vector4.X - 0.05f, vector4.Y - 0.05f, vector4.Z - 0.05f, 1f); colors[19] = vector4; colors[20] = new Vector4(vector4.X - 0.05f, vector4.Y - 0.05f, vector4.Z - 0.05f, 1f); ((ImGuiStylePtr)(ref style)).WindowRounding = 6f; ((ImGuiStylePtr)(ref style)).FrameRounding = 4f; ((ImGuiStylePtr)(ref style)).ChildRounding = 4f; ((ImGuiStylePtr)(ref style)).FrameBorderSize = 1f; ((ImGuiStylePtr)(ref style)).GrabRounding = 4f; ((ImGuiStylePtr)(ref style)).WindowPadding = new Vector2(4f, 4f); ((ImGuiStylePtr)(ref style)).CellPadding = new Vector2(4f, 4f); ((ImGuiStylePtr)(ref style)).FrameBorderSize = 1f; ((ImGuiStylePtr)(ref style)).ItemSpacing = new Vector2(2f, 4f); } private void Awake() { ((BaseUnityPlugin)this).Logger.LogInfo((object)"Mod Initialized"); ((Component)this).gameObject.AddComponent<EventComponent>(); } private void OnEnable() { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Expected O, but got Unknown //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Expected O, but got Unknown //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Expected O, but got Unknown ((BaseUnityPlugin)this).Logger.LogInfo((object)"[PEAK AIO] OnEnable called"); Globals.itemSearchBuffers = new string[3] { "", "", "" }; ConfigManager.Init(((BaseUnityPlugin)this).Config, ((BaseUnityPlugin)this).Logger); DearImGuiInjection.Render += MyUI; Harmony val = new Harmony("com.onigremlin.peakaio"); val.PatchAll(); Assembly assembly = typeof(DearImGuiInjection).Assembly; HarmonyMethod val2 = new HarmonyMethod(typeof(CJKFontPatch).GetMethod("Prefix", BindingFlags.Static | BindingFlags.Public)); string[] array = new string[2] { "DearImGuiInjection.Backends.ImGuiDX12Impl", "DearImGuiInjection.Backends.ImGuiDX11Impl" }; foreach (string text in array) { try { Type type = assembly.GetType(text); if (!(type == null)) { MethodInfo method = type.GetMethod("NewFrame", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); if (!(method == null)) { val.Patch((MethodBase)method, val2, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); ((BaseUnityPlugin)this).Logger.LogInfo((object)("[PEAK AIO] Patched " + text + ".NewFrame for CJK fonts.")); } } } catch (Exception ex) { ((BaseUnityPlugin)this).Logger.LogWarning((object)("[PEAK AIO] Failed to patch " + text + ".NewFrame: " + ex.Message)); } } HarmonyMethod val3 = new HarmonyMethod(typeof(ImGuiInputPatch).GetMethod("Prefix", BindingFlags.Static | BindingFlags.Public)); MethodInfo method2 = typeof(ImGui).GetMethod("NewFrame", BindingFlags.Static | BindingFlags.Public); if (method2 != null) { val.Patch((MethodBase)method2, val3, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); ((BaseUnityPlugin)this).Logger.LogInfo((object)"[PEAK AIO] Patched ImGui.NewFrame for input override."); } else { ((BaseUnityPlugin)this).Logger.LogWarning((object)"[PEAK AIO] Could not find ImGui.NewFrame to patch for input."); } ((BaseUnityPlugin)this).Logger.LogInfo((object)"Harmony patches applied."); } private void OnDisable() { ((BaseUnityPlugin)this).Logger.LogInfo((object)"[PEAK AIO] OnDisable called"); DearImGuiInjection.Render -= MyUI; if (!showMenu || wasMenuScene) { return; } try { CursorHandler instance = Singleton<CursorHandler>.Instance; if ((Object)(object)instance != (Object)null) { instance.isMenuScene = false; } } catch { } } private void Update() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown(ConfigManager.MenuToggleKey.Value)) { showMenu = !showMenu; try { CursorHandler instance = Singleton<CursorHandler>.Instance; if ((Object)(object)instance != (Object)null) { if (showMenu) { wasMenuScene = instance.isMenuScene; if (!wasMenuScene) { instance.isMenuScene = true; } } else if (!wasMenuScene) { instance.isMenuScene = false; } } } catch { } cursorVisibleField?.SetValue(null, showMenu); updateCursorMethod?.Invoke(null, null); ImGuiInputPatch.ResetLogs(); } if (showMenu) { ImGuiInputPatch.SetForceInput(enabled: true); ImGuiInputPatch.CaptureInput(); } else { ImGuiInputPatch.SetForceInput(enabled: false); } } private void DrawCheckbox(ConfigEntry<bool> config, string label, Action<bool> mainThreadAction = null) { bool value = config.Value; if (!ImGui.Checkbox(label, ref value)) { return; } config.Value = value; ((BaseUnityPlugin)this).Logger.LogInfo((object)("[Menu] " + label + " toggled to " + (value ? "ON" : "OFF"))); if (mainThreadAction != null) { UnityMainThreadDispatcher.Enqueue((Action)delegate { mainThreadAction(value); }); } } private void DrawSliderFloat(ConfigEntry<float> config, string label, float min, float max, string format = "%.2f") { float value = config.Value; if (ImGui.SliderFloat(label, ref value, min, max, format)) { config.Value = value; } } private bool DrawSearchableCombo(string label, ref int selectedIndex, List<string> items, ref string searchBuffer) { bool result = false; string text = "Search##" + label; ImGui.PushItemWidth(ImGui.GetContentRegionAvail().X - 4f); ImGui.InputText("##" + text, ref searchBuffer, 100u); ImGui.PopItemWidth(); if (string.IsNullOrEmpty(searchBuffer) && !ImGui.IsItemActive()) { Vector2 itemRectMin = ImGui.GetItemRectMin(); ImGui.SameLine(); ImGui.SetCursorScreenPos(itemRectMin + new Vector2(4f, 2f)); ImGui.PushStyleColor((ImGuiCol)0, new Vector4(0.18f, 0.18f, 0.18f, 1f)); ImGui.TextUnformatted(Localization.T("items.search")); ImGui.PopStyleColor(); } if (ImGui.BeginCombo(label, (selectedIndex >= 0 && selectedIndex < items.Count) ? items[selectedIndex] : Localization.T("items.none"))) { for (int i = 0; i < items.Count; i++) { if (string.IsNullOrEmpty(searchBuffer) || items[i].ToLower().Contains(searchBuffer.ToLower())) { bool flag = selectedIndex == i; if (ImGui.Selectable($"{items[i]}##{i}", flag)) { selectedIndex = i; result = true; } if (flag) { ImGui.SetItemDefaultFocus(); } } } ImGui.EndCombo(); } return result; } private void DrawToolTip(string text) { ImGui.SameLine(); ImGui.TextDisabled("(?)"); if (ImGui.IsItemHovered()) { ImGui.PushStyleColor((ImGuiCol)4, new Vector4(0.89f, 0.82f, 0.7f, 1f)); ImGui.PushStyleColor((ImGuiCol)0, new Vector4(0.18f, 0.18f, 0.18f, 1f)); ImGui.PushStyleVar((ImGuiStyleVar)4, 1f); ImGui.BeginTooltip(); ImGui.PushTextWrapPos(450f); ImGui.TextUnformatted(text); ImGui.PopTextWrapPos(); ImGui.EndTooltip(); ImGui.PopStyleVar(); ImGui.PopStyleColor(2); } } private void MyUI() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: 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) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_1193: Unknown result type (might be due to invalid IL or missing references) //IL_1198: Unknown result type (might be due to invalid IL or missing references) //IL_11aa: Unknown result type (might be due to invalid IL or missing references) //IL_11b1: Unknown result type (might be due to invalid IL or missing references) //IL_11b8: Unknown result type (might be due to invalid IL or missing references) //IL_1408: Unknown result type (might be due to invalid IL or missing references) //IL_1418: Unknown result type (might be due to invalid IL or missing references) bool flag = false; try { if (!showMenu) { return; } ImGuiInputPatch.ApplyToImGui(); ImGuiIOPtr iO = ImGui.GetIO(); ref ImGuiConfigFlags configFlags = ref ((ImGuiIOPtr)(ref iO)).ConfigFlags; configFlags = (ImGuiConfigFlags)((uint)configFlags & 0xFFFFFFEFu); if (!styleApplied) { ApplyCustomStyle(); styleApplied = true; } if (Localization.CurrentLanguage == Language.Korean && CJKFontPatch.HasKoreanFont) { ImGui.PushFont(CJKFontPatch.KoreanFont); flag = true; } else if (Localization.CurrentLanguage != Language.Korean && CJKFontPatch.HasCjkFont) { ImGui.PushFont(CJKFontPatch.CjkFont); flag = true; } ImGui.SetNextWindowPos(new Vector2(20f, 20f), (ImGuiCond)2); ImGui.SetNextWindowSize(new Vector2(500f, 300f), (ImGuiCond)2); ImGui.SetNextWindowFocus(); if (ImGui.Begin("PEAK AIO##Main", (ImGuiWindowFlags)32)) { ImGui.BeginChild("Sidebar", new Vector2(85f, 0f), true); ImGui.Dummy(new Vector2(4f, 2f)); string[] array = new string[6] { "tab.player", "tab.items", "tab.lobby", "tab.world", "tab.about", "tab.language" }; for (int i = 0; i < array.Length; i++) { bool flag2 = selectedTab == i + 1; string text = Localization.T(array[i]); Vector4 vector = (flag2 ? new Vector4(0.318f, 0.569f, 0.384f, 1f) : new Vector4(0.18f, 0.18f, 0.18f, 1f)); ImGui.PushStyleColor((ImGuiCol)0, vector); float x = ImGui.CalcTextSize(text).X; ImGui.SetCursorPosX((ImGui.GetContentRegionAvail().X - x) * 0.5f); if (ImGui.Selectable(text + "##tab" + i, flag2)) { selectedTab = i + 1; } ImGui.PopStyleColor(); } ImGui.EndChild(); ImGui.SameLine()