From 27ec7191d66cebc2f73f48cfb2a48ae1d6aa9431 Mon Sep 17 00:00:00 2001 From: SillyStar-Github <90102598+SillyStar-Github@users.noreply.github.com> Date: Fri, 31 Oct 2025 15:26:55 -0400 Subject: [PATCH 1/6] ukrainian language support --- BepInEx/PvZ Fusion Translator [BepInEx].csproj | 2 ++ BepInEx/Utils.cs | 2 +- MelonLoader/PvZ Fusion Translator [MelonLoader].csproj | 3 ++- MelonLoader/Utils.cs | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/BepInEx/PvZ Fusion Translator [BepInEx].csproj b/BepInEx/PvZ Fusion Translator [BepInEx].csproj index 7e7c98d..714fa86 100644 --- a/BepInEx/PvZ Fusion Translator [BepInEx].csproj +++ b/BepInEx/PvZ Fusion Translator [BepInEx].csproj @@ -14,6 +14,7 @@ PvZ_Fusion_Translator__BepInEx_ C:\Users\rainb\Desktop\PC_PVZ-Fusion_3.0.1-BepInEx + C:\Users\rainb\Desktop\PC_PVZ-Fusion_3.0.1 Debug;DebugEnglish;ReleaseMulti;ReleaseEnglish;DebugTesting;ReleaseOther;DebugObfuscate;ReleaseObfuscate;DebugMulti AnyCPU;x64 @@ -585,6 +586,7 @@ + diff --git a/BepInEx/Utils.cs b/BepInEx/Utils.cs index f5aa47c..10464f5 100644 --- a/BepInEx/Utils.cs +++ b/BepInEx/Utils.cs @@ -351,7 +351,7 @@ namespace PvZ_Fusion_Translator__BepInEx_ Korean, // third column - // Ukrainian, + Ukrainian, // Slovak, //Polish, Turkish, diff --git a/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj b/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj index 5206f24..7cdf4c3 100644 --- a/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj +++ b/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj @@ -510,6 +510,7 @@ - + + \ No newline at end of file diff --git a/MelonLoader/Utils.cs b/MelonLoader/Utils.cs index c1ad659..463b773 100644 --- a/MelonLoader/Utils.cs +++ b/MelonLoader/Utils.cs @@ -341,7 +341,7 @@ namespace PvZ_Fusion_Translator Korean, // third column - // Ukrainian, + Ukrainian, // Slovak, //Polish, Turkish, From c59f94c6ddf8c5c69827c36fa24eb8184ad649d6 Mon Sep 17 00:00:00 2001 From: SillyStar-Github <90102598+SillyStar-Github@users.noreply.github.com> Date: Wed, 5 Nov 2025 14:14:56 -0500 Subject: [PATCH 2/6] russian readded --- BepInEx/Utils.cs | 2 +- MelonLoader/Utils.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BepInEx/Utils.cs b/BepInEx/Utils.cs index 10464f5..29b673a 100644 --- a/BepInEx/Utils.cs +++ b/BepInEx/Utils.cs @@ -346,7 +346,7 @@ namespace PvZ_Fusion_Translator__BepInEx_ Javanese, //Filipino, Vietnamese, Indonesian, - //Russian, + Russian, //NOTE: legacy language Japanese, Korean, diff --git a/MelonLoader/Utils.cs b/MelonLoader/Utils.cs index 463b773..d15fcb7 100644 --- a/MelonLoader/Utils.cs +++ b/MelonLoader/Utils.cs @@ -336,7 +336,7 @@ namespace PvZ_Fusion_Translator Javanese, //Filipino, Vietnamese, Indonesian, - //Russian, + Russian, //NOTE: legacy language Japanese, Korean, From 14a1681ea9743b000b16ccff9b84ee0013ab587e Mon Sep 17 00:00:00 2001 From: SillyStar-Github <90102598+SillyStar-Github@users.noreply.github.com> Date: Fri, 14 Nov 2025 16:20:07 -0500 Subject: [PATCH 3/6] odyssey id system + some other stuff --- MelonLoader/FileLoader.cs | 5 +- .../Patches/GameObjects/AbyssBagMenu_Patch.cs | 56 +++--- .../GameObjects/AbyssCheckInBag_Patch.cs | 56 +++--- .../GameObjects/AbyssDevelopMenu_Patch.cs | 78 ++++---- .../Patches/GameObjects/AbyssMenu2_Patch.cs | 166 +++++++++--------- .../GameObjects/AbyssSettlementMenu_Patch.cs | 94 +++++----- .../ButtonObjects/AbyssCheckSellMenu_Patch.cs | 48 ++--- .../Patches/GameObjects/ExploreMenu_Patch.cs | 7 +- .../GameObjects/NoticePauseMenu_Patch.cs | 43 +++-- .../GameObjects/TravelBuffMenu_Patch.cs | 5 +- .../TravelBuffOptionButton_Patch.cs | 35 +--- .../Patches/GameObjects/TravelBuff_Patch.cs | 2 +- .../GameObjects/TravelLookBuff_Patch.cs | 9 +- .../GameObjects/TravelLookMenu_Patch.cs | 4 +- .../GameObjects/TravelRefresh_Patch.cs | 84 +-------- .../Patches/GameObjects/TravelStore_Patch.cs | 31 +++- .../Patches/Managers/TravelBuffMgr_Patch.cs | 2 + .../Patches/Managers/TravelMgr_Patch.cs | 71 ++++++++ ...PvZ Fusion Translator [MelonLoader].csproj | 3 +- 19 files changed, 403 insertions(+), 396 deletions(-) create mode 100644 MelonLoader/Patches/Managers/TravelMgr_Patch.cs diff --git a/MelonLoader/FileLoader.cs b/MelonLoader/FileLoader.cs index f151d5c..c51f3d7 100644 --- a/MelonLoader/FileLoader.cs +++ b/MelonLoader/FileLoader.cs @@ -6,6 +6,7 @@ using PvZ_Fusion_Translator.Patches.OtherManagers; using System.Text.Encodings.Web; using System.Text.Json; using UnityEngine; +using UnityEngine.Rendering; namespace PvZ_Fusion_Translator { @@ -312,10 +313,12 @@ namespace PvZ_Fusion_Translator } string LawnStrings = Resources.Load("LawnStrings").text; string ZombieStrings = Resources.Load("ZombieStrings").text; + string AbyssBuffData = Resources.Load("AbyssBuffData").text; File.WriteAllText(Path.Combine(dumpDir, "LawnStrings.json"), LawnStrings); File.WriteAllText(Path.Combine(dumpDir, "ZombieStrings.json"), ZombieStrings); + File.WriteAllText(Path.Combine(dumpDir, "AbyssBuffData.json"), AbyssBuffData); - Dictionary achievementsList = new Dictionary(); + Dictionary achievementsList = new Dictionary(); foreach (Il2CppSystem.Collections.Generic.KeyValuePair> entry in AchievementClip.achievementsText) { achievementsList.Add(entry.Key, new AchievementObject(entry.Key, entry.Value.Item1, entry.Value.Item2)); diff --git a/MelonLoader/Patches/GameObjects/AbyssBagMenu_Patch.cs b/MelonLoader/Patches/GameObjects/AbyssBagMenu_Patch.cs index 12c3f26..a226fe5 100644 --- a/MelonLoader/Patches/GameObjects/AbyssBagMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/AbyssBagMenu_Patch.cs @@ -1,30 +1,30 @@ -using HarmonyLib; -using Il2Cpp; -using Il2CppTMPro; -using MelonLoader; -using PvZ_Fusion_Translator.AssetStore; -using UnityEngine; -using UnityEngine.TextCore.Text; -using UnityEngine.UI; -using static MelonLoader.MelonLogger; +//using HarmonyLib; +//using Il2Cpp; +//using Il2CppTMPro; +//using MelonLoader; +//using PvZ_Fusion_Translator.AssetStore; +//using UnityEngine; +//using UnityEngine.TextCore.Text; +//using UnityEngine.UI; +//using static MelonLoader.MelonLogger; -namespace PvZ_Fusion_Translator.Patches.GameObjects -{ +//namespace PvZ_Fusion_Translator.Patches.GameObjects +//{ - [HarmonyPatch(typeof(AbyssBagMenu))] - public static class AbyssBagMenu_Patch - { - [HarmonyPatch(nameof(AbyssBagMenu.Awake))] - [HarmonyPostfix] - private static void Awake_Post(AbyssCheckInBag __instance) - { - foreach(TextMeshProUGUI text in __instance.transform.FindChild("Background").GetComponentsInChildren()) - { - text.text = text.text + "_深渊"; - text.text = StringStore.TranslateText("背包_深渊"); - text.font = FontStore.LoadTMPFont(Utils.Language.ToString()); - } - AbyssMenu2.Instance.UpdateIcons(); - } - } -} +// [HarmonyPatch(typeof(AbyssBagMenu))] +// public static class AbyssBagMenu_Patch +// { +// [HarmonyPatch(nameof(AbyssBagMenu.Awake))] +// [HarmonyPostfix] +// private static void Awake_Post(AbyssCheckInBag __instance) +// { +// foreach(TextMeshProUGUI text in __instance.transform.FindChild("Background").GetComponentsInChildren()) +// { +// text.text = text.text + "_深渊"; +// text.text = StringStore.TranslateText("背包_深渊"); +// text.font = FontStore.LoadTMPFont(Utils.Language.ToString()); +// } +// AbyssMenu2.Instance.UpdateIcons(); +// } +// } +//} diff --git a/MelonLoader/Patches/GameObjects/AbyssCheckInBag_Patch.cs b/MelonLoader/Patches/GameObjects/AbyssCheckInBag_Patch.cs index 58c6166..413a7a6 100644 --- a/MelonLoader/Patches/GameObjects/AbyssCheckInBag_Patch.cs +++ b/MelonLoader/Patches/GameObjects/AbyssCheckInBag_Patch.cs @@ -1,31 +1,31 @@ -using HarmonyLib; -using Il2Cpp; -using Il2CppTMPro; -using MelonLoader; -using PvZ_Fusion_Translator.AssetStore; -using UnityEngine; -using UnityEngine.TextCore.Text; -using UnityEngine.UI; -using static MelonLoader.MelonLogger; +//using HarmonyLib; +//using Il2Cpp; +//using Il2CppTMPro; +//using MelonLoader; +//using PvZ_Fusion_Translator.AssetStore; +//using UnityEngine; +//using UnityEngine.TextCore.Text; +//using UnityEngine.UI; +//using static MelonLoader.MelonLogger; -namespace PvZ_Fusion_Translator.Patches.GameObjects -{ +//namespace PvZ_Fusion_Translator.Patches.GameObjects +//{ - [HarmonyPatch(typeof(AbyssCheckInBag))] - public static class AbyssCheckInBag_Patch - { - [HarmonyPatch(nameof(AbyssCheckInBag.MoveFromBag))] - [HarmonyPostfix] - private static void MoveFromBag(AbyssCheckInBag __instance) - { - AbyssMenu2.Instance.UpdateIcons(); - } +// [HarmonyPatch(typeof(AbyssCheckInBag))] +// public static class AbyssCheckInBag_Patch +// { +// [HarmonyPatch(nameof(AbyssCheckInBag.MoveFromBag))] +// [HarmonyPostfix] +// private static void MoveFromBag(AbyssCheckInBag __instance) +// { +// AbyssMenu2.Instance.UpdateIcons(); +// } - [HarmonyPatch(nameof(AbyssCheckInBag.SellIcon))] - [HarmonyPostfix] - private static void SellIcon(AbyssCheckInBag __instance) - { - AbyssMenu2.Instance.UpdateIcons(); - } - } -} +// [HarmonyPatch(nameof(AbyssCheckInBag.SellIcon))] +// [HarmonyPostfix] +// private static void SellIcon(AbyssCheckInBag __instance) +// { +// AbyssMenu2.Instance.UpdateIcons(); +// } +// } +//} diff --git a/MelonLoader/Patches/GameObjects/AbyssDevelopMenu_Patch.cs b/MelonLoader/Patches/GameObjects/AbyssDevelopMenu_Patch.cs index ed69613..549f1e7 100644 --- a/MelonLoader/Patches/GameObjects/AbyssDevelopMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/AbyssDevelopMenu_Patch.cs @@ -1,48 +1,48 @@ -using System.Text.RegularExpressions; -using HarmonyLib; -using Il2Cpp; -using Il2CppTMPro; -using MelonLoader; -using PvZ_Fusion_Translator.AssetStore; -using UnityEngine.TextCore.Text; +//using System.Text.RegularExpressions; +//using HarmonyLib; +//using Il2Cpp; +//using Il2CppTMPro; +//using MelonLoader; +//using PvZ_Fusion_Translator.AssetStore; +//using UnityEngine.TextCore.Text; -namespace PvZ_Fusion_Translator.Patches.GameObjects -{ - [HarmonyPatch(typeof(AbyssDevelopMenu))] - public static class AbyssDevelopMenu_Patch - { +//namespace PvZ_Fusion_Translator.Patches.GameObjects +//{ +// [HarmonyPatch(typeof(AbyssDevelopMenu))] +// public static class AbyssDevelopMenu_Patch +// { - [HarmonyPatch(nameof(AbyssDevelopMenu.UpdateInfo))] - [HarmonyPostfix] - private static void UpdateInfo(AbyssDevelopMenu __instance) - { - __instance.currentMoney.text = StringStore.TranslateText(__instance.currentMoney.text); - __instance.upgradeTextInfo.text = StringStore.TranslateText(__instance.upgradeTextInfo.text); +// [HarmonyPatch(nameof(AbyssDevelopMenu.UpdateInfo))] +// [HarmonyPostfix] +// private static void UpdateInfo(AbyssDevelopMenu __instance) +// { +// __instance.currentMoney.text = StringStore.TranslateText(__instance.currentMoney.text); +// __instance.upgradeTextInfo.text = StringStore.TranslateText(__instance.upgradeTextInfo.text); - TextMeshProUGUI upgradeCostText = __instance.transform.FindChild("UpgradeCost").GetComponent(); - TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); +// TextMeshProUGUI upgradeCostText = __instance.transform.FindChild("UpgradeCost").GetComponent(); +// TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); - string regexStr = "([^\\s]+)\n当前等级:([^\\s]+)\n\n升级条件:\n([^\\s]+)\n\n升级消耗:([^\\s]+)"; +// string regexStr = "([^\\s]+)\n当前等级:([^\\s]+)\n\n升级条件:\n([^\\s]+)\n\n升级消耗:([^\\s]+)"; - Regex regex = new Regex(regexStr); +// Regex regex = new Regex(regexStr); - if (regex.IsMatch(upgradeCostText.text)) - { - Match match = regex.Match(upgradeCostText.text); - int groupCount = match.Groups.Count; +// if (regex.IsMatch(upgradeCostText.text)) +// { +// Match match = regex.Match(upgradeCostText.text); +// int groupCount = match.Groups.Count; - List dynamicParts = []; +// List dynamicParts = []; - for (int i = 1; i < groupCount; i++) - { - string groupValue = match.Groups[i].Value; - string translatedValue = StringStore.translationString.ContainsKey(groupValue) ? StringStore.translationString[groupValue] : groupValue; - dynamicParts.Add(translatedValue); - } +// for (int i = 1; i < groupCount; i++) +// { +// string groupValue = match.Groups[i].Value; +// string translatedValue = StringStore.translationString.ContainsKey(groupValue) ? StringStore.translationString[groupValue] : groupValue; +// dynamicParts.Add(translatedValue); +// } - upgradeCostText.text = string.Format(StringStore.translationStringRegex[regexStr], [.. dynamicParts]); - upgradeCostText.font = fontAsset; - } - } - } -} +// upgradeCostText.text = string.Format(StringStore.translationStringRegex[regexStr], [.. dynamicParts]); +// upgradeCostText.font = fontAsset; +// } +// } +// } +//} diff --git a/MelonLoader/Patches/GameObjects/AbyssMenu2_Patch.cs b/MelonLoader/Patches/GameObjects/AbyssMenu2_Patch.cs index bf6dce9..2749e73 100644 --- a/MelonLoader/Patches/GameObjects/AbyssMenu2_Patch.cs +++ b/MelonLoader/Patches/GameObjects/AbyssMenu2_Patch.cs @@ -1,104 +1,104 @@ -using HarmonyLib; -using Il2Cpp; -using Il2CppTMPro; -using MelonLoader; -using PvZ_Fusion_Translator.AssetStore; -using UnityEngine; -using UnityEngine.TextCore.Text; -using UnityEngine.UI; -using static MelonLoader.MelonLogger; +//using HarmonyLib; +//using Il2Cpp; +//using Il2CppTMPro; +//using MelonLoader; +//using PvZ_Fusion_Translator.AssetStore; +//using UnityEngine; +//using UnityEngine.TextCore.Text; +//using UnityEngine.UI; +//using static MelonLoader.MelonLogger; -namespace PvZ_Fusion_Translator.Patches.GameObjects -{ +//namespace PvZ_Fusion_Translator.Patches.GameObjects +//{ - [HarmonyPatch(typeof(AbyssMenu2))] - public static class AbyssMenu2_Patch - { - private static void UpdateAbyss2Text(AbyssMenu2 __instance) - { - TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); +// [HarmonyPatch(typeof(AbyssMenu2))] +// public static class AbyssMenu2_Patch +// { +// private static void UpdateAbyss2Text(AbyssMenu2 __instance) +// { +// TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); - __instance.buffCountText.text = StringStore.TranslateText(__instance.buffCountText.text); - __instance.buffCountText.font = fontAsset; +// __instance.buffCountText.text = StringStore.TranslateText(__instance.buffCountText.text); +// __instance.buffCountText.font = fontAsset; - __instance.money.text = StringStore.TranslateText(__instance.money.text); - __instance.money.font = fontAsset; +// __instance.money.text = StringStore.TranslateText(__instance.money.text); +// __instance.money.font = fontAsset; - __instance.refreshText.text = StringStore.TranslateText(__instance.refreshText.text); - __instance.refreshText.font = fontAsset; +// __instance.refreshText.text = StringStore.TranslateText(__instance.refreshText.text); +// __instance.refreshText.font = fontAsset; - __instance.statistics.text = StringStore.TranslateText(__instance.statistics.text); - __instance.statistics.font = fontAsset; +// __instance.statistics.text = StringStore.TranslateText(__instance.statistics.text); +// __instance.statistics.font = fontAsset; - Transform buffTextTransform = __instance.transform.FindChild("BuffText").transform; - if (buffTextTransform != null) StringStore.TranslateTextTransform(buffTextTransform); +// Transform buffTextTransform = __instance.transform.FindChild("BuffText").transform; +// if (buffTextTransform != null) StringStore.TranslateTextTransform(buffTextTransform); - Transform moneyTransform = __instance.transform.FindChild("Money").transform; - if (moneyTransform != null) StringStore.TranslateTextTransform(moneyTransform); +// Transform moneyTransform = __instance.transform.FindChild("Money").transform; +// if (moneyTransform != null) StringStore.TranslateTextTransform(moneyTransform); - Transform buffCountTextTransform = __instance.transform.FindChild("BuffCountText").transform; - if (buffCountTextTransform != null) StringStore.TranslateTextTransform(buffCountTextTransform); +// Transform buffCountTextTransform = __instance.transform.FindChild("BuffCountText").transform; +// if (buffCountTextTransform != null) StringStore.TranslateTextTransform(buffCountTextTransform); - Transform refreshTextTransform = __instance.transform.FindChild("RefreshText").transform; - if (refreshTextTransform != null) StringStore.TranslateTextTransform(refreshTextTransform); +// Transform refreshTextTransform = __instance.transform.FindChild("RefreshText").transform; +// if (refreshTextTransform != null) StringStore.TranslateTextTransform(refreshTextTransform); - Transform optionsTransform = __instance.transform.FindChild("Options").transform; - foreach (AbyssBuffButton abyssBuffButton in optionsTransform.GetComponentsInChildren()) - { - foreach (TextMeshProUGUI textMesh in abyssBuffButton.GetComponentsInChildren()) - { - textMesh.text = StringStore.TranslateText(textMesh.text); - } - } +// Transform optionsTransform = __instance.transform.FindChild("Options").transform; +// foreach (AbyssBuffButton abyssBuffButton in optionsTransform.GetComponentsInChildren()) +// { +// foreach (TextMeshProUGUI textMesh in abyssBuffButton.GetComponentsInChildren()) +// { +// textMesh.text = StringStore.TranslateText(textMesh.text); +// } +// } - foreach(TextMeshProUGUI text in __instance.GetComponentsInChildren()) - { - text.text = StringStore.TranslateText(text.text); - text.font = fontAsset; - } - } +// foreach(TextMeshProUGUI text in __instance.GetComponentsInChildren()) +// { +// text.text = StringStore.TranslateText(text.text); +// text.font = fontAsset; +// } +// } - [HarmonyPatch(nameof(AbyssMenu2.Start))] - [HarmonyPostfix] - private static void Start(AbyssMenu2 __instance) - { - UpdateAbyss2Text(__instance); +// [HarmonyPatch(nameof(AbyssMenu2.Start))] +// [HarmonyPostfix] +// private static void Start(AbyssMenu2 __instance) +// { +// UpdateAbyss2Text(__instance); - Utils.ConvertButtonText(__instance.transform, "Help"); +// Utils.ConvertButtonText(__instance.transform, "Help"); - // custom bag text :D +// // custom bag text :D - __instance.transform.FindChild("Bag").FindChild("text").GetComponent().text += "_深渊"; +// __instance.transform.FindChild("Bag").FindChild("text").GetComponent().text += "_深渊"; - Utils.ConvertButtonText(__instance.transform, "Bag"); - } +// Utils.ConvertButtonText(__instance.transform, "Bag"); +// } - [HarmonyPatch(nameof(AbyssMenu2.UpdateIcons))] - [HarmonyPostfix] - private static void UpdateIcons(AbyssMenu2 __instance) - { - UpdateAbyss2Text(__instance); - } +// [HarmonyPatch(nameof(AbyssMenu2.UpdateIcons))] +// [HarmonyPostfix] +// private static void UpdateIcons(AbyssMenu2 __instance) +// { +// UpdateAbyss2Text(__instance); +// } - [HarmonyPatch(nameof(AbyssMenu2.UpdateBuff))] - [HarmonyPostfix] - private static void UpdateBuff(AbyssMenu2 __instance) - { - UpdateAbyss2Text(__instance); - } +// [HarmonyPatch(nameof(AbyssMenu2.UpdateBuff))] +// [HarmonyPostfix] +// private static void UpdateBuff(AbyssMenu2 __instance) +// { +// UpdateAbyss2Text(__instance); +// } - [HarmonyPatch(nameof(AbyssMenu2.BuyBuff))] - [HarmonyPostfix] - private static void BuyBuff(AbyssMenu2 __instance) - { - UpdateAbyss2Text(__instance); - } +// [HarmonyPatch(nameof(AbyssMenu2.BuyBuff))] +// [HarmonyPostfix] +// private static void BuyBuff(AbyssMenu2 __instance) +// { +// UpdateAbyss2Text(__instance); +// } - [HarmonyPatch(nameof(AbyssMenu2.ShowBag))] - [HarmonyPostfix] - private static void ShowBag(AbyssMenu2 __instance) - { - UpdateAbyss2Text(__instance); - } - } -} +// [HarmonyPatch(nameof(AbyssMenu2.ShowBag))] +// [HarmonyPostfix] +// private static void ShowBag(AbyssMenu2 __instance) +// { +// UpdateAbyss2Text(__instance); +// } +// } +//} diff --git a/MelonLoader/Patches/GameObjects/AbyssSettlementMenu_Patch.cs b/MelonLoader/Patches/GameObjects/AbyssSettlementMenu_Patch.cs index 11734e6..3ed38cd 100644 --- a/MelonLoader/Patches/GameObjects/AbyssSettlementMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/AbyssSettlementMenu_Patch.cs @@ -1,55 +1,55 @@ -using HarmonyLib; -using Il2Cpp; -using Il2CppTMPro; -using MelonLoader; -using PvZ_Fusion_Translator.AssetStore; -using Unity.VisualScripting; -using UnityEngine; -using System.Text.RegularExpressions; +//using HarmonyLib; +//using Il2Cpp; +//using Il2CppTMPro; +//using MelonLoader; +//using PvZ_Fusion_Translator.AssetStore; +//using Unity.VisualScripting; +//using UnityEngine; +//using System.Text.RegularExpressions; -namespace PvZ_Fusion_Translator.Patches.GameObjects -{ - [HarmonyPatch(typeof(AbyssSettlementMenu))] - public static class AbyssSettlementMenu_Patch - { +//namespace PvZ_Fusion_Translator.Patches.GameObjects +//{ +// [HarmonyPatch(typeof(AbyssSettlementMenu))] +// public static class AbyssSettlementMenu_Patch +// { - [HarmonyPatch(nameof(AbyssSettlementMenu.InitSettle))] - [HarmonyPostfix] - private static void InitSettle(AbyssSettlementMenu __instance) - { - TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); +// [HarmonyPatch(nameof(AbyssSettlementMenu.InitSettle))] +// [HarmonyPostfix] +// private static void InitSettle(AbyssSettlementMenu __instance) +// { +// TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); - string[] regexStrList = [ - "第(\\d+)关\n通关用时:(\\d+)分(\\d+)秒\n杀敌数量:(\\d+)\n关卡叶绿素产出:(\\d+)\n极限模式产出:(\\d+)\n非首胜无额外产出\n产出叶绿素总计:(\\d+)", - "第(\\d+)关\n通关用时:(\\d+)分(\\d+)秒\n杀敌数量:(\\d+)\n关卡叶绿素产出:(\\d+)\n极限模式产出:(\\d+)\n首胜产出:(\\d+)\n剩余小推车数量:(\\d+),获得叶绿素:(\\d+)\n产出叶绿素总计:(\\d+)", - "第(\\d+)关\n通关用时:(\\d+)分(\\d+)秒\n杀敌数量:(\\d+)\n关卡叶绿素产出:(\\d+)\n首胜产出:(\\d+)\n剩余小推车数量:(\\d+),获得叶绿素:(\\d+)\n产出叶绿素总计:(\\d+)", - "第(\\d+)关\n通关用时:(\\d+)分(\\d+)秒\n杀敌数量:(\\d+)\n关卡叶绿素产出:(\\d+)\n困难模式产出:(\\d+)\n首胜产出:(\\d+)\n剩余小推车数量:(\\d+),获得叶绿素:(\\d+)\n产出叶绿素总计:(\\d+)", - "第(\\d+)关\n通关用时:(\\d+)分(\\d+)秒\n杀敌数量:(\\d+)\n关卡叶绿素产出:(\\d+)\n非首胜无额外产出\n产出叶绿素总计:(\\d+)", - "第(\\d+)关\n通关用时:(\\d+)分(\\d+)秒\n杀敌数量:(\\d+)\n关卡叶绿素产出:(\\d+)\n困难模式产出:(\\d+)\n非首胜无额外产出\n产出叶绿素总计:(\\d+)" - ]; +// string[] regexStrList = [ +// "第(\\d+)关\n通关用时:(\\d+)分(\\d+)秒\n杀敌数量:(\\d+)\n关卡叶绿素产出:(\\d+)\n极限模式产出:(\\d+)\n非首胜无额外产出\n产出叶绿素总计:(\\d+)", +// "第(\\d+)关\n通关用时:(\\d+)分(\\d+)秒\n杀敌数量:(\\d+)\n关卡叶绿素产出:(\\d+)\n极限模式产出:(\\d+)\n首胜产出:(\\d+)\n剩余小推车数量:(\\d+),获得叶绿素:(\\d+)\n产出叶绿素总计:(\\d+)", +// "第(\\d+)关\n通关用时:(\\d+)分(\\d+)秒\n杀敌数量:(\\d+)\n关卡叶绿素产出:(\\d+)\n首胜产出:(\\d+)\n剩余小推车数量:(\\d+),获得叶绿素:(\\d+)\n产出叶绿素总计:(\\d+)", +// "第(\\d+)关\n通关用时:(\\d+)分(\\d+)秒\n杀敌数量:(\\d+)\n关卡叶绿素产出:(\\d+)\n困难模式产出:(\\d+)\n首胜产出:(\\d+)\n剩余小推车数量:(\\d+),获得叶绿素:(\\d+)\n产出叶绿素总计:(\\d+)", +// "第(\\d+)关\n通关用时:(\\d+)分(\\d+)秒\n杀敌数量:(\\d+)\n关卡叶绿素产出:(\\d+)\n非首胜无额外产出\n产出叶绿素总计:(\\d+)", +// "第(\\d+)关\n通关用时:(\\d+)分(\\d+)秒\n杀敌数量:(\\d+)\n关卡叶绿素产出:(\\d+)\n困难模式产出:(\\d+)\n非首胜无额外产出\n产出叶绿素总计:(\\d+)" +// ]; - foreach(string regexStr in regexStrList) - { - Regex regex = new Regex(regexStr); +// foreach(string regexStr in regexStrList) +// { +// Regex regex = new Regex(regexStr); - if (regex.IsMatch(__instance.settleInfo.text)) - { - Match match = regex.Match(__instance.settleInfo.text); - int groupCount = match.Groups.Count; +// if (regex.IsMatch(__instance.settleInfo.text)) +// { +// Match match = regex.Match(__instance.settleInfo.text); +// int groupCount = match.Groups.Count; - List dynamicParts = []; +// List dynamicParts = []; - for (int i = 1; i < groupCount; i++) - { - string groupValue = match.Groups[i].Value; - string translatedValue = StringStore.translationString.ContainsKey(groupValue) ? StringStore.translationString[groupValue] : groupValue; - dynamicParts.Add(translatedValue); - } +// for (int i = 1; i < groupCount; i++) +// { +// string groupValue = match.Groups[i].Value; +// string translatedValue = StringStore.translationString.ContainsKey(groupValue) ? StringStore.translationString[groupValue] : groupValue; +// dynamicParts.Add(translatedValue); +// } - __instance.settleInfo.text = string.Format(StringStore.translationStringRegex[regexStr], [.. dynamicParts]); - __instance.settleInfo.font = fontAsset; - } - } - } - } -} +// __instance.settleInfo.text = string.Format(StringStore.translationStringRegex[regexStr], [.. dynamicParts]); +// __instance.settleInfo.font = fontAsset; +// } +// } +// } +// } +//} diff --git a/MelonLoader/Patches/GameObjects/ButtonObjects/AbyssCheckSellMenu_Patch.cs b/MelonLoader/Patches/GameObjects/ButtonObjects/AbyssCheckSellMenu_Patch.cs index 446cf19..fede3de 100644 --- a/MelonLoader/Patches/GameObjects/ButtonObjects/AbyssCheckSellMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/ButtonObjects/AbyssCheckSellMenu_Patch.cs @@ -1,26 +1,26 @@ -using HarmonyLib; -using Il2Cpp; -using Il2CppTMPro; -using PvZ_Fusion_Translator.AssetStore; -using UnityEngine; +//using HarmonyLib; +//using Il2Cpp; +//using Il2CppTMPro; +//using PvZ_Fusion_Translator.AssetStore; +//using UnityEngine; -namespace PvZ_Fusion_Translator.Patches.GameObjects.ButtonObjects -{ - [HarmonyPatch(typeof(AbyssCheckSellMenu))] - public static class AbyssCheckSellMenu_Patch - { - [HarmonyPatch(nameof(AbyssCheckSellMenu.SellIcon))] - [HarmonyPostfix] - private static void SellIcon(AbyssCheckSellMenu __instance) - { - AbyssMenu2.Instance.UpdateIcons(); - } +//namespace PvZ_Fusion_Translator.Patches.GameObjects.ButtonObjects +//{ +// [HarmonyPatch(typeof(AbyssCheckSellMenu))] +// public static class AbyssCheckSellMenu_Patch +// { +// [HarmonyPatch(nameof(AbyssCheckSellMenu.SellIcon))] +// [HarmonyPostfix] +// private static void SellIcon(AbyssCheckSellMenu __instance) +// { +// AbyssMenu2.Instance.UpdateIcons(); +// } - [HarmonyPatch(nameof(AbyssCheckSellMenu.MoveInBag))] - [HarmonyPostfix] - private static void MoveInBag(AbyssCheckSellMenu __instance) - { - AbyssMenu2.Instance.UpdateIcons(); - } - } -} \ No newline at end of file +// [HarmonyPatch(nameof(AbyssCheckSellMenu.MoveInBag))] +// [HarmonyPostfix] +// private static void MoveInBag(AbyssCheckSellMenu __instance) +// { +// AbyssMenu2.Instance.UpdateIcons(); +// } +// } +//} \ No newline at end of file diff --git a/MelonLoader/Patches/GameObjects/ExploreMenu_Patch.cs b/MelonLoader/Patches/GameObjects/ExploreMenu_Patch.cs index 78a114a..ea685bd 100644 --- a/MelonLoader/Patches/GameObjects/ExploreMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/ExploreMenu_Patch.cs @@ -23,13 +23,10 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects Transform randomLevelTextTransform = __instance.transform.FindChild("RandomLevel"); foreach(TextMeshProUGUI txt in randomLevelTextTransform.GetComponentsInChildren()) { - if (txt.name.Contains("Text (TMP)")) + if (txt.name.Contains("(TMP)")) { + Log.LogDebug(txt.transform.parent.name); txt.autoSizeTextContainer = true; - if (txt.name == "Text (TMP)") - { - txt.transform.localPosition = new Vector3(94.4225f, -45.1565f, 0f); - } } } } diff --git a/MelonLoader/Patches/GameObjects/NoticePauseMenu_Patch.cs b/MelonLoader/Patches/GameObjects/NoticePauseMenu_Patch.cs index 7ad1cb0..8dfa0b1 100644 --- a/MelonLoader/Patches/GameObjects/NoticePauseMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/NoticePauseMenu_Patch.cs @@ -2,31 +2,40 @@ using Il2Cpp; using Il2CppTMPro; using PvZ_Fusion_Translator.AssetStore; +using System.Text.Json; using UnityEngine; +using UnityEngine.UI; +using UnityEngine.UIElements; namespace PvZ_Fusion_Translator.Patches.GameObjects { [HarmonyPatch(typeof(NoticeMenu))] public class NoticePauseMenu_Patch { - [HarmonyPostfix] - [HarmonyPatch(nameof(NoticeMenu.Start))] - private static void Start(NoticeMenu __instance) + [HarmonyPrefix] + [HarmonyPatch(nameof(NoticeMenu.Awake))] + private static void Pre_Awake(NoticeMenu __instance) { - TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); - Transform warningTransform = __instance.transform.FindChild("窗口"); - Transform warningTextTransform = warningTransform.FindChild("文字"); - Transform warningTextShadowTransform = warningTransform.FindChild("文字2"); - Transform[] array = [warningTextTransform, warningTextShadowTransform]; + GameObject contentObject = __instance.transform.FindChild("Scroll View").GetChild(0).GetChild(0).gameObject; //bc normal Find or FindChild didn't work - for (int i = 0; i < array.Length; i++) - { - if (array[i] != null) - { - array[i].GetComponent().text = StringStore.TranslateText(array[i].GetComponent().text); - array[i].GetComponent().font = fontAsset; - } - } - } + TextMeshProUGUI contentText = contentObject.GetComponent(); + File.WriteAllText(Path.Combine(FileLoader.GetAssetDir(FileLoader.AssetType.Dumps), "changelog.txt"), contentText.text); + } + + [HarmonyPostfix] + [HarmonyPatch(nameof(NoticeMenu.Awake))] + private static void Post_Awake(NoticeMenu __instance) + { + TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); + string changelogText = File.ReadAllText(Path.Combine(FileLoader.GetAssetDir(FileLoader.AssetType.Strings, Utils.Language), "changelog.txt")); + + GameObject contentObject = __instance.transform.FindChild("Scroll View").GetChild(0).GetChild(0).gameObject; //bc normal Find or FindChild didn't work + + TextMeshProUGUI contentText = contentObject.GetComponent(); + contentText.text = changelogText; + + ContentSizeFitter sizeFitter = contentObject.AddComponent(); + sizeFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; + } } } \ No newline at end of file diff --git a/MelonLoader/Patches/GameObjects/TravelBuffMenu_Patch.cs b/MelonLoader/Patches/GameObjects/TravelBuffMenu_Patch.cs index 08dc32f..c684917 100644 --- a/MelonLoader/Patches/GameObjects/TravelBuffMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/TravelBuffMenu_Patch.cs @@ -2,6 +2,7 @@ using Il2Cpp; using Il2CppTMPro; using PvZ_Fusion_Translator.AssetStore; +using static PvZ_Fusion_Translator.Patches.Managers.TravelMgr_Patch; using UnityEngine; namespace PvZ_Fusion_Translator.Patches.GameObjects @@ -13,9 +14,9 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects [HarmonyPostfix] private static void RefeshOptions(TravelBuffMenu __instance) { - foreach(TravelBuffOptionButton button in __instance.options) + foreach (TravelBuffOptionButton button in __instance.options) { - button.introduce.text = StringStore.TranslateText(button.introduce.text); + button.introduce.text = translatedTravelBuffs[buffLinks[button.buffType]][button.buffIndex]; } } } diff --git a/MelonLoader/Patches/GameObjects/TravelBuffOptionButton_Patch.cs b/MelonLoader/Patches/GameObjects/TravelBuffOptionButton_Patch.cs index 0f6b6c6..5a754be 100644 --- a/MelonLoader/Patches/GameObjects/TravelBuffOptionButton_Patch.cs +++ b/MelonLoader/Patches/GameObjects/TravelBuffOptionButton_Patch.cs @@ -2,6 +2,7 @@ using Il2Cpp; using Il2CppTMPro; using PvZ_Fusion_Translator.AssetStore; +using static PvZ_Fusion_Translator.Patches.Managers.TravelMgr_Patch; namespace PvZ_Fusion_Translator.Patches.GameObjects { @@ -12,54 +13,28 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects [HarmonyPostfix] private static void SetBuff(TravelBuffOptionButton __instance) { - __instance.introduce.text = StringStore.TranslateText(__instance.introduce.text); + __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; } [HarmonyPatch(nameof(TravelBuffOptionButton.Awake))] [HarmonyPostfix] private static void Awake(TravelBuffOptionButton __instance) { - __instance.introduce.text = StringStore.TranslateText(__instance.introduce.text); + __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; } [HarmonyPatch(nameof(TravelBuffOptionButton.OnAnimOver))] [HarmonyPostfix] private static void OnAnimOver(TravelBuffOptionButton __instance) { - __instance.introduce.text = StringStore.TranslateText(__instance.introduce.text); + __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; } [HarmonyPatch(nameof(TravelBuffOptionButton.SetBackground))] [HarmonyPostfix] private static void SetBackground(TravelBuffOptionButton __instance) { - __instance.introduce.text = StringStore.TranslateText(__instance.introduce.text); + __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; } - //[HarmonyPatch(nameof(TravelMenuMgr.SetText))] - //[HarmonyPostfix] - //private static void SetText(TravelMenuMgr __instance) - //{ - // foreach(TextMeshProUGUI text in __instance.textMesh) - // { - // text.text = StringStore.TranslateText(text.text); - // } - // foreach(TextMeshProUGUI text in __instance.textMeshShadow) - // { - // text.text = StringStore.TranslateText(text.text); - // } - //} - //[HarmonyPatch(nameof(TravelMenuMgr.SetRichText), [typeof(int), typeof(int), typeof(TextMeshProUGUI), typeof(string)])] - //[HarmonyPostfix] - //private static void SetRichText(TravelMenuMgr __instance) - //{ - // foreach(TextMeshProUGUI text in __instance.textMesh) - // { - // text.text = StringStore.TranslateText(text.text); - // } - // foreach(TextMeshProUGUI text in __instance.textMeshShadow) - // { - // text.text = StringStore.TranslateText(text.text); - // } - //} } } diff --git a/MelonLoader/Patches/GameObjects/TravelBuff_Patch.cs b/MelonLoader/Patches/GameObjects/TravelBuff_Patch.cs index a2bed2c..a21001f 100644 --- a/MelonLoader/Patches/GameObjects/TravelBuff_Patch.cs +++ b/MelonLoader/Patches/GameObjects/TravelBuff_Patch.cs @@ -3,7 +3,7 @@ using Il2Cpp; namespace PvZ_Fusion_Translator.Patches.GameObjects { - [HarmonyPatch(typeof(TravelBuff))] + [HarmonyPatch(typeof(TravelBuff))] public static class TravelBuff_Patch { [HarmonyPatch(nameof(TravelBuff.OnMouseUpAsButton))] diff --git a/MelonLoader/Patches/GameObjects/TravelLookBuff_Patch.cs b/MelonLoader/Patches/GameObjects/TravelLookBuff_Patch.cs index 9d80291..4bbd844 100644 --- a/MelonLoader/Patches/GameObjects/TravelLookBuff_Patch.cs +++ b/MelonLoader/Patches/GameObjects/TravelLookBuff_Patch.cs @@ -2,6 +2,7 @@ using Il2Cpp; using Il2CppTMPro; using PvZ_Fusion_Translator.AssetStore; +using static PvZ_Fusion_Translator.Patches.Managers.TravelMgr_Patch; using UnityEngine; namespace PvZ_Fusion_Translator.Patches.GameObjects @@ -9,11 +10,13 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects [HarmonyPatch(typeof(TravelLookBuff))] public static class TravelLookBuff_Patch { - private static void TranslateTexts(TravelLookBuff instance) + private static void TranslateTexts(TravelLookBuff __instance) { - instance.introduce.text = StringStore.TranslateText(instance.introduce.text); + string buffText = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; - Transform transform = instance.rectTransform.transform; + __instance.introduce.text = buffText; + + Transform transform = __instance.rectTransform.transform; var component1 = transform.GetChild(0).GetComponent(); var component2 = transform.GetChild(1).GetComponent(); diff --git a/MelonLoader/Patches/GameObjects/TravelLookMenu_Patch.cs b/MelonLoader/Patches/GameObjects/TravelLookMenu_Patch.cs index 683f0ac..b775a7a 100644 --- a/MelonLoader/Patches/GameObjects/TravelLookMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/TravelLookMenu_Patch.cs @@ -15,7 +15,7 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects [HarmonyPostfix] private static void Postfix_Start(TravelLookMenu __instance) { - foreach(TextMeshProUGUI txt in __instance.GetComponentsInChildren()) + foreach (TextMeshProUGUI txt in __instance.GetComponentsInChildren()) { txt.text = StringStore.TranslateText(txt.text); txt.font = FontStore.LoadTMPFont(Utils.Language.ToString()); @@ -36,7 +36,7 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects [HarmonyPostfix] private static void Update(TravelLookMenu __instance) { - if(savedAssetString != __instance.treasureText.text) + if (savedAssetString != __instance.treasureText.text) { __instance.treasureText.text = StringStore.TranslateText(__instance.treasureText.text); savedAssetString = __instance.treasureText.text; diff --git a/MelonLoader/Patches/GameObjects/TravelRefresh_Patch.cs b/MelonLoader/Patches/GameObjects/TravelRefresh_Patch.cs index 6f58f44..6206e7a 100644 --- a/MelonLoader/Patches/GameObjects/TravelRefresh_Patch.cs +++ b/MelonLoader/Patches/GameObjects/TravelRefresh_Patch.cs @@ -6,50 +6,15 @@ using UnityEngine; namespace PvZ_Fusion_Translator.Patches.GameObjects { - [HarmonyPatch(typeof(TravelRefresh))] - public static class TravelRefresh_Patch - { - [HarmonyPatch(nameof(TravelRefresh.Start))] - [HarmonyPostfix] - private static void Start(TravelRefresh __instance) - { + [HarmonyPatch(typeof(TravelRefresh))] + public static class TravelRefresh_Patch + { + [HarmonyPatch(nameof(TravelRefresh.Start))] + [HarmonyPostfix] + private static void Start(TravelRefresh __instance) + { __instance.text = StringStore.TranslateText(__instance.text); __instance.text_shadow = StringStore.TranslateText(__instance.text_shadow); - - //TextMeshProUGUI pointsText = __instance.transform.GetChild(0).GetComponent(); - //pointsText = StringStore.TranslateText(pointsText); - //pointsText.autoSizeTextContainer = true; - - - //Transform TravelMenuTransform = __instance.transform.parent.transform; - - //Transform refreshTransform = TravelMenuTransform.Find("Refresh2").transform.Find("bank"); - //if (refreshTransform != null) - //{ - // Transform text_1Transform = refreshTransform.Find("text_1"); - // if (text_1Transform != null) - // { - // TextMeshProUGUI text_1 = text_1Transform.GetComponent(); - - // if (text_1) - // { - // text_1 = StringStore.TranslateText(text_1); - // text_1.autoSizeTextContainer = true; - // } - // } - - // Transform text_2Transform = refreshTransform.Find("text_2"); - // if (text_2Transform != null) - // { - // TextMeshProUGUI text_2 = text_2Transform.GetComponent(); - - // if (text_2) - // { - // text_2 = StringStore.TranslateText(text_2); - // text_2.autoSizeTextContainer = true; - // } - // } - //} } [HarmonyPatch(nameof(TravelRefresh.OnMouseUpAsButton))] @@ -58,41 +23,6 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects { __instance.text = StringStore.TranslateText(__instance.text); __instance.text_shadow = StringStore.TranslateText(__instance.text_shadow); - - //TextMeshProUGUI pointsText = __instance.transform.GetChild(0).GetComponent(); - //pointsText = StringStore.TranslateText(pointsText); - //pointsText.autoSizeTextContainer = true; - - - //Transform TravelMenuTransform = __instance.transform.parent.transform; - - //Transform refreshTransform = TravelMenuTransform.Find("Refresh2").transform.Find("bank"); - //if (refreshTransform != null) - //{ - // Transform text_1Transform = refreshTransform.Find("text_1"); - // if (text_1Transform != null) - // { - // TextMeshProUGUI text_1 = text_1Transform.GetComponent(); - - // if (text_1) - // { - // text_1 = StringStore.TranslateText(text_1); - // text_1.autoSizeTextContainer = true; - // } - // } - - // Transform text_2Transform = refreshTransform.Find("text_2"); - // if (text_2Transform != null) - // { - // TextMeshProUGUI text_2 = text_2Transform.GetComponent(); - - // if (text_2) - // { - // text_2 = StringStore.TranslateText(text_2); - // text_2.autoSizeTextContainer = true; - // } - // } - //} } } } diff --git a/MelonLoader/Patches/GameObjects/TravelStore_Patch.cs b/MelonLoader/Patches/GameObjects/TravelStore_Patch.cs index 7afa26c..fa6745e 100644 --- a/MelonLoader/Patches/GameObjects/TravelStore_Patch.cs +++ b/MelonLoader/Patches/GameObjects/TravelStore_Patch.cs @@ -2,21 +2,29 @@ using Il2Cpp; using Il2CppTMPro; using PvZ_Fusion_Translator.AssetStore; +using static PvZ_Fusion_Translator.Patches.Managers.TravelMgr_Patch; using UnityEngine; namespace PvZ_Fusion_Translator.Patches.GameObjects { - [HarmonyPatch(typeof(TravelStore))] + [HarmonyPatch(typeof(TravelStore))] public static class TravelStore_Patch { [HarmonyPatch(nameof(TravelStore.Update))] - [HarmonyPostfix] - private static void Update(TravelStore __instance) + [HarmonyPostfix] + private static void Update(TravelStore __instance) { - foreach (TextMeshProUGUI intr in __instance.introduces) - intr.text = StringStore.TranslateText(intr.text); + foreach(TextMeshProUGUI text in __instance.introduces) + { + if(__instance.currentSelect != null) + { + text.text = translatedTravelBuffs[buffLinks[(BuffType)__instance.currentSelect.theBuffType]][__instance.currentSelect.theBuffNumber]; + } + } foreach (var textMesh in __instance.points) + { textMesh.text = StringStore.TranslateText(textMesh.text); + } } [HarmonyPatch(nameof(TravelStore.RefreshBuff))] @@ -28,12 +36,19 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects TextMeshProUGUI cost = buff.transform.GetChild(1).GetComponent(); cost.text = StringStore.TranslateText(cost.text); cost.font = FontStore.LoadTMPFont(Utils.Language.ToString()); - FileLoader.DumpUntranslatedStrings(cost.text); } - foreach (TextMeshProUGUI intr in __instance.introduces) - intr.text = StringStore.TranslateText(intr.text); + + foreach (TextMeshProUGUI text in __instance.introduces) + { + if (__instance.currentSelect != null) + { + text.text = translatedTravelBuffs[buffLinks[(BuffType)__instance.currentSelect.theBuffType]][__instance.currentSelect.theBuffNumber]; + } + } foreach (var textMesh in __instance.points) + { textMesh.text = StringStore.TranslateText(textMesh.text); + } } } } diff --git a/MelonLoader/Patches/Managers/TravelBuffMgr_Patch.cs b/MelonLoader/Patches/Managers/TravelBuffMgr_Patch.cs index 26b6fd8..86879e1 100644 --- a/MelonLoader/Patches/Managers/TravelBuffMgr_Patch.cs +++ b/MelonLoader/Patches/Managers/TravelBuffMgr_Patch.cs @@ -1,5 +1,7 @@ using HarmonyLib; using Il2Cpp; +using System.Text.Encodings.Web; +using System.Text.Json; namespace PvZ_Fusion_Translator.Patches.Managers { diff --git a/MelonLoader/Patches/Managers/TravelMgr_Patch.cs b/MelonLoader/Patches/Managers/TravelMgr_Patch.cs new file mode 100644 index 0000000..8161db6 --- /dev/null +++ b/MelonLoader/Patches/Managers/TravelMgr_Patch.cs @@ -0,0 +1,71 @@ +using Il2Cpp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Encodings.Web; +using System.Text.Json; +using System.Threading.Tasks; +using HarmonyLib; + +namespace PvZ_Fusion_Translator.Patches.Managers +{ + [HarmonyPatch(typeof(TravelMgr))] + public static class TravelMgr_Patch + { + public static Dictionary buffLinks = new Dictionary() + { + { BuffType.AdvancedBuff, "advancedUpgrades" }, + { BuffType.UltimateBuff, "ultimateUpgrades" }, + { BuffType.UnlockPlant, "strongUltimates" }, + { BuffType.Debuff, "debuffs" }, + }; + + public static Dictionary> translatedTravelBuffs = new Dictionary>(); + + public static void DumpTravelBuffs(Il2CppSystem.Collections.Generic.Dictionary source, Dictionary> dest, string index) + { + foreach (var i in source) + { + if (!Utils.CheckForUntranslatedText(i.Value)) + { + break; + } + dest[index].Add(i.Value); + } + } + + [HarmonyPatch(nameof(TravelMgr.Awake))] + [HarmonyPrefix] + private static void Pre_Awake(TravelMgr __instance) + { + // Dump buffs + + Dictionary> dumpedTravelBuffs = new Dictionary>() + { + { "advancedUpgrades", [] }, + { "ultimateUpgrades", [] }, + { "strongUltimates", [] }, + { "debuffs", [] } + }; + + DumpTravelBuffs(TravelMgr.advancedBuffs, dumpedTravelBuffs, "advancedUpgrades"); + DumpTravelBuffs(TravelMgr.ultimateBuffs, dumpedTravelBuffs, "ultimateUpgrades"); + DumpTravelBuffs(TravelMgr.unlocks, dumpedTravelBuffs, "strongUltimates"); + DumpTravelBuffs(TravelMgr.debuffs, dumpedTravelBuffs, "debuffs"); + + string dumpDir = FileLoader.GetAssetDir(FileLoader.AssetType.Dumps); + var options = new JsonSerializerOptions + { + Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, + WriteIndented = true + }; + File.WriteAllText(Path.Combine(dumpDir, "travel_buffs.json"), JsonSerializer.Serialize(dumpedTravelBuffs, options)); + + string stringDir = FileLoader.GetAssetDir(FileLoader.AssetType.Strings, Utils.Language); + string travelBuffs = File.ReadAllText(Path.Combine(stringDir, "travel_buffs.json")); + + translatedTravelBuffs = JsonSerializer.Deserialize>>(travelBuffs); + } + } +} diff --git a/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj b/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj index 7cdf4c3..e3f3910 100644 --- a/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj +++ b/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj @@ -13,7 +13,7 @@ latest enable Debug;DebugEnglish;ReleaseMulti;ReleaseEnglish;DebugTesting;ReleaseOther;DebugObfuscate;ReleaseObfuscate - C:\Users\rainb\Desktop\PC_PVZ-Fusion_3.0.1 + C:\Users\rainb\Desktop\PC_PVZ-Fusion_3.1.1 AnyCPU;ARM64;x64 @@ -461,6 +461,7 @@ + From ba7c713a37f346ed187c4dd6ae2056332a224e22 Mon Sep 17 00:00:00 2001 From: SillyStar-Github <90102598+SillyStar-Github@users.noreply.github.com> Date: Fri, 14 Nov 2025 17:53:58 -0500 Subject: [PATCH 4/6] odyssey id system fixes + file protection added --- .../Patches/GameObjects/AbyssMenu_Patch.cs | 23 +------- .../GameObjects/NoticePauseMenu_Patch.cs | 19 +++++-- .../TravelBuffOptionButton_Patch.cs | 56 +++++++++---------- .../GameObjects/TravelLookBuff_Patch.cs | 50 ++++++++--------- .../Patches/Managers/TravelMgr_Patch.cs | 7 +++ 5 files changed, 75 insertions(+), 80 deletions(-) diff --git a/MelonLoader/Patches/GameObjects/AbyssMenu_Patch.cs b/MelonLoader/Patches/GameObjects/AbyssMenu_Patch.cs index a197572..6e6f415 100644 --- a/MelonLoader/Patches/GameObjects/AbyssMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/AbyssMenu_Patch.cs @@ -41,27 +41,8 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects foreach (TextMeshProUGUI txt in __instance.levelInfo) { - string regexStr = "第(\\d+)关\n场景:([^\\s]+)\n总波数:(\\d+)波\n特殊环境:([^\\s:]+)\n减伤强度:(\\d+)"; - - Regex regex = new Regex(regexStr); - - if(regex.IsMatch(txt.text)) - { - Match match = regex.Match(txt.text); - int groupCount = match.Groups.Count; - - List dynamicParts = []; - - for (int i = 1; i < groupCount; i++) - { - string groupValue = match.Groups[i].Value; - string translatedValue = StringStore.translationString.ContainsKey(groupValue) ? StringStore.translationString[groupValue] : groupValue; - dynamicParts.Add(translatedValue); - } - - txt.text = string.Format(StringStore.translationStringRegex[regexStr], [.. dynamicParts]); - txt.font = fontAsset; - } + txt.text = StringStore.TranslateText(txt.text); + txt.font = fontAsset; } } } diff --git a/MelonLoader/Patches/GameObjects/NoticePauseMenu_Patch.cs b/MelonLoader/Patches/GameObjects/NoticePauseMenu_Patch.cs index 8dfa0b1..768eea8 100644 --- a/MelonLoader/Patches/GameObjects/NoticePauseMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/NoticePauseMenu_Patch.cs @@ -2,10 +2,8 @@ using Il2Cpp; using Il2CppTMPro; using PvZ_Fusion_Translator.AssetStore; -using System.Text.Json; using UnityEngine; using UnityEngine.UI; -using UnityEngine.UIElements; namespace PvZ_Fusion_Translator.Patches.GameObjects { @@ -20,6 +18,14 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects TextMeshProUGUI contentText = contentObject.GetComponent(); File.WriteAllText(Path.Combine(FileLoader.GetAssetDir(FileLoader.AssetType.Dumps), "changelog.txt"), contentText.text); + + string stringDir = FileLoader.GetAssetDir(FileLoader.AssetType.Strings, Utils.Language); + string changelogDir = Path.Combine(stringDir, "changelog.txt"); + + if (!File.Exists(changelogDir)) + { + File.WriteAllText(changelogDir, contentText.text); + } } [HarmonyPostfix] @@ -27,12 +33,15 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects private static void Post_Awake(NoticeMenu __instance) { TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); - string changelogText = File.ReadAllText(Path.Combine(FileLoader.GetAssetDir(FileLoader.AssetType.Strings, Utils.Language), "changelog.txt")); - + string stringDir = FileLoader.GetAssetDir(FileLoader.AssetType.Strings, Utils.Language); + string changelogDir = Path.Combine(stringDir, "changelog.txt"); + + string changelogText = File.ReadAllText(changelogDir); + GameObject contentObject = __instance.transform.FindChild("Scroll View").GetChild(0).GetChild(0).gameObject; //bc normal Find or FindChild didn't work TextMeshProUGUI contentText = contentObject.GetComponent(); - contentText.text = changelogText; + contentText.text = changelogText; ContentSizeFitter sizeFitter = contentObject.AddComponent(); sizeFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; diff --git a/MelonLoader/Patches/GameObjects/TravelBuffOptionButton_Patch.cs b/MelonLoader/Patches/GameObjects/TravelBuffOptionButton_Patch.cs index 5a754be..7acebb0 100644 --- a/MelonLoader/Patches/GameObjects/TravelBuffOptionButton_Patch.cs +++ b/MelonLoader/Patches/GameObjects/TravelBuffOptionButton_Patch.cs @@ -6,35 +6,35 @@ using static PvZ_Fusion_Translator.Patches.Managers.TravelMgr_Patch; namespace PvZ_Fusion_Translator.Patches.GameObjects { - [HarmonyPatch(typeof(TravelBuffOptionButton))] - public static class TravelBuffOptionButton_Patch - { - [HarmonyPatch(nameof(TravelBuffOptionButton.SetBuff))] - [HarmonyPostfix] - private static void SetBuff(TravelBuffOptionButton __instance) - { - __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; - } + //[HarmonyPatch(typeof(TravelBuffOptionButton))] + //public static class TravelBuffOptionButton_Patch + //{ + // [HarmonyPatch(nameof(TravelBuffOptionButton.SetBuff))] + // [HarmonyPostfix] + // private static void SetBuff(TravelBuffOptionButton __instance) + // { + // __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; + // } - [HarmonyPatch(nameof(TravelBuffOptionButton.Awake))] - [HarmonyPostfix] - private static void Awake(TravelBuffOptionButton __instance) - { - __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; - } + // [HarmonyPatch(nameof(TravelBuffOptionButton.Awake))] + // [HarmonyPostfix] + // private static void Awake(TravelBuffOptionButton __instance) + // { + // __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; + // } - [HarmonyPatch(nameof(TravelBuffOptionButton.OnAnimOver))] - [HarmonyPostfix] - private static void OnAnimOver(TravelBuffOptionButton __instance) - { - __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; - } + // [HarmonyPatch(nameof(TravelBuffOptionButton.OnAnimOver))] + // [HarmonyPostfix] + // private static void OnAnimOver(TravelBuffOptionButton __instance) + // { + // __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; + // } - [HarmonyPatch(nameof(TravelBuffOptionButton.SetBackground))] - [HarmonyPostfix] - private static void SetBackground(TravelBuffOptionButton __instance) - { - __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; - } - } + // [HarmonyPatch(nameof(TravelBuffOptionButton.SetBackground))] + // [HarmonyPostfix] + // private static void SetBackground(TravelBuffOptionButton __instance) + // { + // __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; + // } + //} } diff --git a/MelonLoader/Patches/GameObjects/TravelLookBuff_Patch.cs b/MelonLoader/Patches/GameObjects/TravelLookBuff_Patch.cs index 4bbd844..2b7cd8d 100644 --- a/MelonLoader/Patches/GameObjects/TravelLookBuff_Patch.cs +++ b/MelonLoader/Patches/GameObjects/TravelLookBuff_Patch.cs @@ -4,44 +4,42 @@ using Il2CppTMPro; using PvZ_Fusion_Translator.AssetStore; using static PvZ_Fusion_Translator.Patches.Managers.TravelMgr_Patch; using UnityEngine; +using MelonLoader; namespace PvZ_Fusion_Translator.Patches.GameObjects { [HarmonyPatch(typeof(TravelLookBuff))] public static class TravelLookBuff_Patch { - private static void TranslateTexts(TravelLookBuff __instance) + [HarmonyPatch(nameof(TravelLookBuff.Clear))] + [HarmonyPostfix] + public static void Post_Clear(TravelLookBuff __instance) { - string buffText = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; + __instance.introduce.text = StringStore.TranslateText("无"); + __instance.set = false; + } - __instance.introduce.text = buffText; - - Transform transform = __instance.rectTransform.transform; - var component1 = transform.GetChild(0).GetComponent(); - var component2 = transform.GetChild(1).GetComponent(); - - if (component1 != null) component1.text = StringStore.TranslateText(component1.text); - if (component2 != null) component2.text = StringStore.TranslateText(component2.text); + [HarmonyPatch(nameof(TravelLookBuff.OnMouseUpAsButton))] + [HarmonyPostfix] + public static void Post_OnMouseUpAsButton(TravelLookBuff __instance) + { + foreach (TextMeshProUGUI text in __instance.transform.FindChild("Images").FindChild("Button").GetComponentsInChildren()) + { + text.text = StringStore.TranslateText(text.text); + } } [HarmonyPatch(nameof(TravelLookBuff.SetBuff))] [HarmonyPostfix] - private static void SetBuff(TravelLookBuff __instance) => TranslateTexts(__instance); + public static void Post_SetBuff(TravelLookBuff __instance) + { + List buffSet = translatedTravelBuffs[buffLinks[__instance.buffType]]; + string buffText = (__instance.buffIndex < buffSet.Count) ? buffSet[__instance.buffIndex] : StringStore.TranslateText(__instance.introduce.text); - [HarmonyPatch(nameof(TravelLookBuff.OnMouseUpAsButton))] - [HarmonyPostfix] - private static void OnMouseUpAsButton(TravelLookBuff __instance) => TranslateTexts(__instance); - - [HarmonyPatch(nameof(TravelLookBuff.Clear))] - [HarmonyPostfix] - private static void Clear(TravelLookBuff __instance) => TranslateTexts(__instance); - - [HarmonyPatch(nameof(TravelLookBuff.SetText), new Type[] { typeof(string) })] - [HarmonyPostfix] - private static void SetText_String(TravelLookBuff __instance) => TranslateTexts(__instance); - - [HarmonyPatch(nameof(TravelLookBuff.SetText), new Type[] { typeof(bool), typeof(int) })] - [HarmonyPostfix] - private static void SetText_Bool(TravelLookBuff __instance) => TranslateTexts(__instance); + foreach (TextMeshProUGUI text in __instance.transform.FindChild("Images").FindChild("Button").GetComponentsInChildren()) + { + text.text = StringStore.TranslateText(text.text); + } + } } } \ No newline at end of file diff --git a/MelonLoader/Patches/Managers/TravelMgr_Patch.cs b/MelonLoader/Patches/Managers/TravelMgr_Patch.cs index 8161db6..013e6a2 100644 --- a/MelonLoader/Patches/Managers/TravelMgr_Patch.cs +++ b/MelonLoader/Patches/Managers/TravelMgr_Patch.cs @@ -63,6 +63,13 @@ namespace PvZ_Fusion_Translator.Patches.Managers File.WriteAllText(Path.Combine(dumpDir, "travel_buffs.json"), JsonSerializer.Serialize(dumpedTravelBuffs, options)); string stringDir = FileLoader.GetAssetDir(FileLoader.AssetType.Strings, Utils.Language); + string travelBuffDir = Path.Combine(stringDir, "travel_buffs.json"); + + if(!File.Exists(travelBuffDir)) + { + File.WriteAllText(travelBuffDir, JsonSerializer.Serialize(dumpedTravelBuffs, options)); + } + string travelBuffs = File.ReadAllText(Path.Combine(stringDir, "travel_buffs.json")); translatedTravelBuffs = JsonSerializer.Deserialize>>(travelBuffs); From cf90e910db6eb3711101f43aa0b5a8dbc331118b Mon Sep 17 00:00:00 2001 From: SillyStar-Github <90102598+SillyStar-Github@users.noreply.github.com> Date: Sun, 16 Nov 2025 00:43:59 -0500 Subject: [PATCH 5/6] abyss fixes + misc fixes before fusion showcase editor --- MelonLoader/AssetStore/StringStore.cs | 40 +++++- .../BaseTextObjects/InGameText_Patch.cs | 12 +- .../GameObjects/AbyssBuffMenu_Patch.cs | 104 +++++++++++++++ .../Patches/GameObjects/AbyssMenu_Patch.cs | 4 +- .../ButtonObjects/UIButton_Patch.cs | 37 ++++-- .../GameObjects/ExploreMakeMenu_Patch.cs | 24 ++++ .../Patches/GameObjects/ExploreMenu_Patch.cs | 8 -- .../TravelBuffOptionButton_Patch.cs | 55 ++++---- .../GameObjects/TravelLookBuff_Patch.cs | 6 + .../Patches/Managers/AbyssBuffData_Patch.cs | 125 ++++++++++++++++++ .../Patches/Managers/AbyssInfo_Patch.cs | 12 ++ .../Patches/Managers/IZBottomMenu_Patch.cs | 3 +- .../Patches/Managers/TravelMgr_Patch.cs | 26 +++- ...PvZ Fusion Translator [MelonLoader].csproj | 4 + 14 files changed, 405 insertions(+), 55 deletions(-) create mode 100644 MelonLoader/Patches/GameObjects/AbyssBuffMenu_Patch.cs create mode 100644 MelonLoader/Patches/GameObjects/ExploreMakeMenu_Patch.cs create mode 100644 MelonLoader/Patches/Managers/AbyssBuffData_Patch.cs create mode 100644 MelonLoader/Patches/Managers/AbyssInfo_Patch.cs diff --git a/MelonLoader/AssetStore/StringStore.cs b/MelonLoader/AssetStore/StringStore.cs index ce75493..24ec52b 100644 --- a/MelonLoader/AssetStore/StringStore.cs +++ b/MelonLoader/AssetStore/StringStore.cs @@ -122,10 +122,46 @@ namespace PvZ_Fusion_Translator.AssetStore checkText = text; return checkText; - } - public static string DoTranslateText(string originalText, bool isLog = false) + public static string TranslateText(string originalText, string pattern, bool isLog = false) + { + if (TestRegex(originalText, pattern) && translationStringRegex.ContainsKey(pattern)) + { + // Extract dynamic parts from the original text + var regex = new Regex(pattern); + var match = regex.Match(originalText); + int groupCount = match.Groups.Count; + + if (isLog) + Log.LogDebug("Text found in translationStringRegex {0}: {1}", match, groupCount); + + // List to hold formatted dynamic parts + List dynamicParts = []; + + // Loop through each group and determine its translation + for (int i = 1; i < groupCount; i++) + { + string groupValue = match.Groups[i].Value; + string translatedValue = translationString.ContainsKey(groupValue) + ? translationString[groupValue] + : groupValue; + dynamicParts.Add(translatedValue); + } + + // Format the output string with dynamic parts + return string.Format(translationStringRegex[pattern], [.. dynamicParts]); + } + else + { + if (isLog) + Log.LogDebug($"Text '{originalText}' not translated"); + FileLoader.DumpUntranslatedStrings(originalText); + return originalText; + } + } + + public static string DoTranslateText(string originalText, bool isLog = false) { if (string.IsNullOrEmpty(originalText)) { diff --git a/MelonLoader/Patches/BaseTextObjects/InGameText_Patch.cs b/MelonLoader/Patches/BaseTextObjects/InGameText_Patch.cs index 02257db..2cd2294 100644 --- a/MelonLoader/Patches/BaseTextObjects/InGameText_Patch.cs +++ b/MelonLoader/Patches/BaseTextObjects/InGameText_Patch.cs @@ -2,6 +2,7 @@ using Il2Cpp; using Il2CppTMPro; using PvZ_Fusion_Translator.AssetStore; +using PvZ_Fusion_Translator.Patches.Managers; namespace PvZ_Fusion_Translator.Patches.BaseTextObjects { @@ -25,7 +26,16 @@ namespace PvZ_Fusion_Translator.Patches.BaseTextObjects foreach (TextMeshProUGUI txt in __instance.textMeshes) { - txt.text = StringStore.TranslateText(txt.text, true); + string travelMatch = TravelMgr_Patch.MatchTravelBuff(txt.text); + + if(travelMatch != "") + { + txt.text = travelMatch; + } + else + { + txt.text = StringStore.TranslateText(txt.text, true); + } txt.font = fontAsset; } } diff --git a/MelonLoader/Patches/GameObjects/AbyssBuffMenu_Patch.cs b/MelonLoader/Patches/GameObjects/AbyssBuffMenu_Patch.cs new file mode 100644 index 0000000..c460d9d --- /dev/null +++ b/MelonLoader/Patches/GameObjects/AbyssBuffMenu_Patch.cs @@ -0,0 +1,104 @@ +using HarmonyLib; +using Il2Cpp; +using Il2CppTMPro; +using MelonLoader.TinyJSON; +using PvZ_Fusion_Translator.AssetStore; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Text.RegularExpressions; +using UnityEngine.TextCore.Text; + +namespace PvZ_Fusion_Translator.Patches.GameObjects +{ + [HarmonyPatch(typeof(AbyssBuffMenu))] + public static class AbyssBuffMenu_Patch + { + public static Dictionary abyssBuffData = new Dictionary(); + + [HarmonyPatch(nameof(AbyssBuffMenu.Awake))] + [HarmonyPostfix] + public static void Post_Awake(AbyssBuffMenu __instance) + { + LoadAbyssBuffData(); + TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); + + foreach (TextMeshProUGUI text in __instance.GetComponentsInChildren()) + { + text.text = StringStore.TranslateText(text.text); + text.font = fontAsset; + } + + TranslateWindows(__instance, fontAsset); + } + + [HarmonyPatch(nameof(AbyssBuffMenu.SelectWindow))] + [HarmonyPostfix] + public static void Post_SelectWindow(AbyssBuffMenu __instance) + { + TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); + + TranslateWindows(__instance, fontAsset); + } + + [HarmonyPatch(nameof(AbyssBuffMenu.SetFavorite))] + [HarmonyPostfix] + public static void Post_SetFavorite(AbyssBuffMenu __instance) + { + TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); + + foreach (TextMeshProUGUI text in __instance.GetComponentsInChildren()) + { + text.text = StringStore.TranslateText(text.text); + text.font = fontAsset; + } + } + + public static void TranslateWindows(AbyssBuffMenu __instance, TMP_FontAsset fontAsset) + { + foreach (TextMeshProUGUI text in __instance.GetComponentsInChildren()) + { + if (abyssBuffData.ContainsKey(text.text)) + { + text.text = abyssBuffData[text.text]; + text.font = fontAsset; + } + else + { + foreach (var x in abyssBuffData) + { + if (x.Key.Contains("{value}")) + { + string pattern = Regex.Escape(x.Key).Replace("\\{value}", "(\\d+)"); + if (Regex.IsMatch(text.text, pattern)) + { + var regex = new Regex(pattern); + var match = regex.Match(text.text); + + text.text = String.Format(x.Value.Replace("value", "0"), match.Groups[1].Value); + text.font = fontAsset; + break; + } + } + } + } + } + + foreach(AbyssBuffWindow window in __instance.GetComponentsInChildren()) + { + window.buffName.autoSizeTextContainer = true; + } + } + + public static void LoadAbyssBuffData() + { + abyssBuffData.Clear(); + + string abyssBuffText = File.ReadAllText(Path.Combine(FileLoader.GetAssetDir(FileLoader.AssetType.Strings, Utils.Language), "abyss_buffs.json")); + abyssBuffData = JsonSerializer.Deserialize>(abyssBuffText); + } + } +} diff --git a/MelonLoader/Patches/GameObjects/AbyssMenu_Patch.cs b/MelonLoader/Patches/GameObjects/AbyssMenu_Patch.cs index 6e6f415..abef5ee 100644 --- a/MelonLoader/Patches/GameObjects/AbyssMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/AbyssMenu_Patch.cs @@ -22,7 +22,7 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects foreach (TextMeshProUGUI txt in __instance.levelInfo) { - txt.text = StringStore.TranslateText(txt.text, false); + txt.text = StringStore.TranslateText(txt.text, pattern: "第(\\d+)关\n场景:([^\\s]+)\n总波数:(\\d+)波\n特殊环境:([^\\s]+)\n难度:(\\d+)"); txt.font = fontAsset; } @@ -41,7 +41,7 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects foreach (TextMeshProUGUI txt in __instance.levelInfo) { - txt.text = StringStore.TranslateText(txt.text); + txt.text = StringStore.TranslateText(txt.text, pattern: "第(\\d+)关\n场景:([^\\s]+)\n总波数:(\\d+)波\n特殊环境:([^\\s]+)\n难度:(\\d+)"); txt.font = fontAsset; } } diff --git a/MelonLoader/Patches/GameObjects/ButtonObjects/UIButton_Patch.cs b/MelonLoader/Patches/GameObjects/ButtonObjects/UIButton_Patch.cs index 4173c95..032f495 100644 --- a/MelonLoader/Patches/GameObjects/ButtonObjects/UIButton_Patch.cs +++ b/MelonLoader/Patches/GameObjects/ButtonObjects/UIButton_Patch.cs @@ -27,11 +27,6 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects text.font = FontStore.LoadTMPFont(Utils.Language.ToString()); textShadow.font = FontStore.LoadTMPFont(Utils.Language.ToString()); - - if(!text.name.Contains("_EVACUATE")) - { - text.autoSizeTextContainer = textShadow.autoSizeTextContainer = true; - } } else { @@ -69,15 +64,33 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects { if (__instance.transform.childCount >= 2) { - TextMeshProUGUI text = __instance.transform.GetChild(0).GetComponent(); - TextMeshProUGUI textShadow = __instance.transform.GetChild(1).GetComponent(); + if(__instance.name == "EditMode") + { + TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); - text.text = StringStore.TranslateText(text.text, false); - textShadow.text = StringStore.TranslateText(textShadow.text, false); + TextMeshProUGUI text = __instance.transform.GetChild(0).GetComponent(); + TextMeshProUGUI[] extraTexts = __instance.transform.GetChild(1).GetComponentsInChildren(); - text.font = FontStore.LoadTMPFont(Utils.Language.ToString()); - textShadow.font = FontStore.LoadTMPFont(Utils.Language.ToString()); - text.autoSizeTextContainer = textShadow.autoSizeTextContainer = true; + text.text = StringStore.TranslateText(text.text, false); + text.font = fontAsset; + + foreach(TextMeshProUGUI extraText in extraTexts) + { + extraText.text = StringStore.TranslateText(extraText.text, false); + extraText.font = fontAsset; + } + } + else + { + TextMeshProUGUI text = __instance.transform.GetChild(0).GetComponent(); + TextMeshProUGUI textShadow = __instance.transform.GetChild(1).GetComponent(); + + text.text = StringStore.TranslateText(text.text, false); + textShadow.text = StringStore.TranslateText(textShadow.text, false); + + text.font = FontStore.LoadTMPFont(Utils.Language.ToString()); + textShadow.font = FontStore.LoadTMPFont(Utils.Language.ToString()); + } } } catch (Exception) { } diff --git a/MelonLoader/Patches/GameObjects/ExploreMakeMenu_Patch.cs b/MelonLoader/Patches/GameObjects/ExploreMakeMenu_Patch.cs new file mode 100644 index 0000000..bb60b5f --- /dev/null +++ b/MelonLoader/Patches/GameObjects/ExploreMakeMenu_Patch.cs @@ -0,0 +1,24 @@ +using HarmonyLib; +using Il2Cpp; +using Il2CppTMPro; +using PvZ_Fusion_Translator.AssetStore; +using UnityEngine; + +namespace PvZ_Fusion_Translator.Patches.GameObjects +{ + [HarmonyPatch(typeof(ExploreMakeMenu))] + public static class ExploreMakeMenu_Patch + { + [HarmonyPatch(nameof(ExploreMakeMenu.Awake))] + [HarmonyPostfix] + private static void Awake(ExploreMakeMenu __instance) + { + TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); + + foreach (TextMeshProUGUI txt in __instance.GetComponentsInChildren()) + { + txt.text = StringStore.TranslateText(txt.text); + } + } + } +} \ No newline at end of file diff --git a/MelonLoader/Patches/GameObjects/ExploreMenu_Patch.cs b/MelonLoader/Patches/GameObjects/ExploreMenu_Patch.cs index ea685bd..918fe3a 100644 --- a/MelonLoader/Patches/GameObjects/ExploreMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/ExploreMenu_Patch.cs @@ -21,14 +21,6 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects } Transform randomLevelTextTransform = __instance.transform.FindChild("RandomLevel"); - foreach(TextMeshProUGUI txt in randomLevelTextTransform.GetComponentsInChildren()) - { - if (txt.name.Contains("(TMP)")) - { - Log.LogDebug(txt.transform.parent.name); - txt.autoSizeTextContainer = true; - } - } } [HarmonyPatch(nameof(ExploreMenu.UpdateWindows))] diff --git a/MelonLoader/Patches/GameObjects/TravelBuffOptionButton_Patch.cs b/MelonLoader/Patches/GameObjects/TravelBuffOptionButton_Patch.cs index 7acebb0..49585e7 100644 --- a/MelonLoader/Patches/GameObjects/TravelBuffOptionButton_Patch.cs +++ b/MelonLoader/Patches/GameObjects/TravelBuffOptionButton_Patch.cs @@ -6,35 +6,34 @@ using static PvZ_Fusion_Translator.Patches.Managers.TravelMgr_Patch; namespace PvZ_Fusion_Translator.Patches.GameObjects { - //[HarmonyPatch(typeof(TravelBuffOptionButton))] - //public static class TravelBuffOptionButton_Patch - //{ - // [HarmonyPatch(nameof(TravelBuffOptionButton.SetBuff))] - // [HarmonyPostfix] - // private static void SetBuff(TravelBuffOptionButton __instance) - // { - // __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; - // } + [HarmonyPatch(typeof(TravelBuffOptionButton))] + public static class TravelBuffOptionButton_Patch + { + [HarmonyPatch(nameof(TravelBuffOptionButton.SetBuff))] + [HarmonyPostfix] + private static void SetBuff(TravelBuffOptionButton __instance) + { + List buffSet = translatedTravelBuffs[buffLinks[__instance.buffType]]; + string buffText = (__instance.buffIndex < buffSet.Count) ? buffSet[__instance.buffIndex] : StringStore.TranslateText(__instance.introduce.text); - // [HarmonyPatch(nameof(TravelBuffOptionButton.Awake))] - // [HarmonyPostfix] - // private static void Awake(TravelBuffOptionButton __instance) - // { - // __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; - // } + } - // [HarmonyPatch(nameof(TravelBuffOptionButton.OnAnimOver))] - // [HarmonyPostfix] - // private static void OnAnimOver(TravelBuffOptionButton __instance) - // { - // __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; - // } + [HarmonyPatch(nameof(TravelBuffOptionButton.Awake))] + [HarmonyPostfix] + private static void Awake(TravelBuffOptionButton __instance) + { + List buffSet = translatedTravelBuffs[buffLinks[__instance.buffType]]; + string buffText = (__instance.buffIndex < buffSet.Count) ? buffSet[__instance.buffIndex] : StringStore.TranslateText(__instance.introduce.text); - // [HarmonyPatch(nameof(TravelBuffOptionButton.SetBackground))] - // [HarmonyPostfix] - // private static void SetBackground(TravelBuffOptionButton __instance) - // { - // __instance.introduce.text = translatedTravelBuffs[buffLinks[__instance.buffType]][__instance.buffIndex]; - // } - //} + } + + [HarmonyPatch(nameof(TravelBuffOptionButton.OnAnimOver))] + [HarmonyPostfix] + private static void OnAnimOver(TravelBuffOptionButton __instance) + { + List buffSet = translatedTravelBuffs[buffLinks[__instance.buffType]]; + string buffText = (__instance.buffIndex < buffSet.Count) ? buffSet[__instance.buffIndex] : StringStore.TranslateText(__instance.introduce.text); + + } + } } diff --git a/MelonLoader/Patches/GameObjects/TravelLookBuff_Patch.cs b/MelonLoader/Patches/GameObjects/TravelLookBuff_Patch.cs index 2b7cd8d..1004d00 100644 --- a/MelonLoader/Patches/GameObjects/TravelLookBuff_Patch.cs +++ b/MelonLoader/Patches/GameObjects/TravelLookBuff_Patch.cs @@ -17,6 +17,11 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects { __instance.introduce.text = StringStore.TranslateText("无"); __instance.set = false; + + foreach (TextMeshProUGUI text in __instance.transform.FindChild("Images").FindChild("Button").GetComponentsInChildren()) + { + text.text = StringStore.TranslateText(text.text); + } } [HarmonyPatch(nameof(TravelLookBuff.OnMouseUpAsButton))] @@ -35,6 +40,7 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects { List buffSet = translatedTravelBuffs[buffLinks[__instance.buffType]]; string buffText = (__instance.buffIndex < buffSet.Count) ? buffSet[__instance.buffIndex] : StringStore.TranslateText(__instance.introduce.text); + __instance.introduce.text = buffText; foreach (TextMeshProUGUI text in __instance.transform.FindChild("Images").FindChild("Button").GetComponentsInChildren()) { diff --git a/MelonLoader/Patches/Managers/AbyssBuffData_Patch.cs b/MelonLoader/Patches/Managers/AbyssBuffData_Patch.cs new file mode 100644 index 0000000..0858150 --- /dev/null +++ b/MelonLoader/Patches/Managers/AbyssBuffData_Patch.cs @@ -0,0 +1,125 @@ +//using HarmonyLib; +//using Il2Cpp; +//using MelonLoader; +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using System.Text.Json; +//using System.Threading.Tasks; +//using Unity.VisualScripting; +//using UnityEngine; + +//namespace PvZ_Fusion_Translator.Patches.Managers +//{ +// [HarmonyPatch(typeof(AbyssBuffData))] +// public static class AbyssBuffData_Patch +// { +// [HarmonyPatch(nameof(AbyssBuffData.LoadData))] +// [HarmonyPostfix] +// public static void Pre_LoadData(AbyssBuffData __instance) +// { +// string originalAbyssBuffStr = Resources.Load("AbyssBuffData").text; +// Dictionary> originalAbyssBuffData = JsonSerializer.Deserialize>>(originalAbyssBuffStr); +// List infos = originalAbyssBuffData["infos"]; +// Il2CppSystem.Collections.Generic.Dictionary> result = new(); + +// string abyssBuffDataDir = Path.Combine(FileLoader.GetAssetDir(FileLoader.AssetType.Strings, Utils.Language), "abyss_buffs.json"); +// if (!File.Exists(abyssBuffDataDir)) +// { +// File.WriteAllText(abyssBuffDataDir, originalAbyssBuffStr); +// } + +// Dictionary abyssBuffData = JsonSerializer.Deserialize>(File.ReadAllText(abyssBuffDataDir)); + +// for (int i = 0; i < infos.Count; i++) +// { +// AbyssBuffInfo originalTuple = infos[i]; +// Il2CppSystem.ValueTuple translatedTuple = new(); + +// translatedTuple.Item1 = abyssBuffData.ContainsKey(originalTuple.name) ? abyssBuffData[originalTuple.name] : originalTuple.name; +// translatedTuple.Item2 = abyssBuffData.ContainsKey(originalTuple.introduce) ? abyssBuffData[originalTuple.introduce] : originalTuple.introduce; +// translatedTuple.Item3 = originalTuple.value; + +// foreach (var x in AbyssBuffData.buffDatas) +// { +// if (x.Value.Item1 == originalTuple.name) +// { +// AbyssBuffData.buffDatas[x.Key] = translatedTuple; +// break; +// } +// } +// } +// } +// } + +// public enum AbyssBuffClone +// { +// 生存_聚塑, +// 生存_启命, +// 生存_坚定, +// 生存_弥合, +// 生存_警戒, +// 生存_霸体, +// 生存_共存, +// 生存_护盾, +// 生存_治疗, +// 生存_主宰, +// 寒冰_聚塑, +// 寒冰_刺骨, +// 寒冰_凛风, +// 寒冰_冻结, +// 寒冰_保护, +// 寒冰_折磨, +// 寒冰_扩散, +// 寒冰_凝神, +// 寒冰_破冰, +// 寒冰_永冻, +// 魅惑_聚塑, +// 魅惑_感应, +// 魅惑_催眠, +// 魅惑_无畏, +// 魅惑_脆弱, +// 魅惑_黑曜, +// 魅惑_转世, +// 魅惑_支援, +// 魅惑_沉重, +// 魅惑_共鸣, +// 烈焰_聚塑, +// 烈焰_爆破, +// 烈焰_怒火, +// 烈焰_红唇, +// 烈焰_融化, +// 烈焰_燃烧, +// 烈焰_浴火, +// 烈焰_鬼火, +// 烈焰_诅咒, +// 烈焰_太阳, +// 通用_断水, +// 通用_千斤, +// 通用_急迫, +// 通用_折扣, +// 通用_密植, +// 通用_超级, +// 通用_究极, +// 通用_极速, +// 通用_强力, +// 通用_专注, +// 通用_迸发, +// 通用_投资, +// 通用_机遇, +// 通用_命运, +// 通用_时停, +// 通用_升级, +// 蒜毒_聚塑, +// 蒜毒_腐蚀, +// 蒜毒_侵蚀, +// 蒜毒_血清, +// 蒜毒_混乱, +// 蒜毒_虚弱, +// 蒜毒_反胃, +// 蒜毒_虫噬, +// 蒜毒_百毒, +// 蒜毒_爆裂 +// } +//} \ No newline at end of file diff --git a/MelonLoader/Patches/Managers/AbyssInfo_Patch.cs b/MelonLoader/Patches/Managers/AbyssInfo_Patch.cs new file mode 100644 index 0000000..1ac118d --- /dev/null +++ b/MelonLoader/Patches/Managers/AbyssInfo_Patch.cs @@ -0,0 +1,12 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using System.Threading.Tasks; + +//namespace PvZ_Fusion_Translator.Patches.Managers +//{ +// public class AbyssInfo_Patch +// { +// } +//} diff --git a/MelonLoader/Patches/Managers/IZBottomMenu_Patch.cs b/MelonLoader/Patches/Managers/IZBottomMenu_Patch.cs index 0aa9001..976806b 100644 --- a/MelonLoader/Patches/Managers/IZBottomMenu_Patch.cs +++ b/MelonLoader/Patches/Managers/IZBottomMenu_Patch.cs @@ -26,7 +26,8 @@ namespace PvZ_Fusion_Translator.Patches.Managers if(new Regex("([^\\s]+),推荐难度:(\\d+)").IsMatch(array[i].text)) { - array[i].text = string.Format(fStr, StringStore.TranslateText(parts[0]), parts[1]); + string customName = (StringStore.translationString.ContainsKey(parts[0] + "_IZ")) ? parts[0] + "_IZ" : parts[0]; + array[i].text = string.Format(fStr, StringStore.TranslateText(customName), parts[1]); } array[i] = StringStore.TranslateText(array[i]); diff --git a/MelonLoader/Patches/Managers/TravelMgr_Patch.cs b/MelonLoader/Patches/Managers/TravelMgr_Patch.cs index 013e6a2..3c8c863 100644 --- a/MelonLoader/Patches/Managers/TravelMgr_Patch.cs +++ b/MelonLoader/Patches/Managers/TravelMgr_Patch.cs @@ -21,6 +21,14 @@ namespace PvZ_Fusion_Translator.Patches.Managers { BuffType.Debuff, "debuffs" }, }; + public static Dictionary> dumpedTravelBuffs = new Dictionary>() + { + { "advancedUpgrades", [] }, + { "ultimateUpgrades", [] }, + { "strongUltimates", [] }, + { "debuffs", [] } + }; + public static Dictionary> translatedTravelBuffs = new Dictionary>(); public static void DumpTravelBuffs(Il2CppSystem.Collections.Generic.Dictionary source, Dictionary> dest, string index) @@ -35,13 +43,29 @@ namespace PvZ_Fusion_Translator.Patches.Managers } } + public static string MatchTravelBuff(string originalText) + { + string res = ""; + + foreach(var i in dumpedTravelBuffs) + { + if(i.Value.Contains(originalText)) + { + res = translatedTravelBuffs[i.Key][i.Value.IndexOf(originalText)]; + break; + } + } + + return res; + } + [HarmonyPatch(nameof(TravelMgr.Awake))] [HarmonyPrefix] private static void Pre_Awake(TravelMgr __instance) { // Dump buffs - Dictionary> dumpedTravelBuffs = new Dictionary>() + dumpedTravelBuffs = new Dictionary>() // reset dump { { "advancedUpgrades", [] }, { "ultimateUpgrades", [] }, diff --git a/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj b/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj index e3f3910..c4889cd 100644 --- a/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj +++ b/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj @@ -400,6 +400,8 @@ + + @@ -457,6 +459,8 @@ + + From 5ed6b1a32550fec561de6766f485354b7d4f5b04 Mon Sep 17 00:00:00 2001 From: SillyStar-Github <90102598+SillyStar-Github@users.noreply.github.com> Date: Sun, 16 Nov 2025 01:07:27 -0500 Subject: [PATCH 6/6] 3.1 code draft complete!! fusion showcase editor code hopefully done --- .../ExploreMakeSceneButton_Patch.cs | 20 ++++++++ .../ExploreMakeZombieButton_Patch.cs | 20 ++++++++ .../GameObjects/ExploreMakeMenu_Patch.cs | 48 +++++++++++++++++++ ...PvZ Fusion Translator [MelonLoader].csproj | 2 + 4 files changed, 90 insertions(+) create mode 100644 MelonLoader/Patches/GameObjects/ButtonObjects/ExploreMakeSceneButton_Patch.cs create mode 100644 MelonLoader/Patches/GameObjects/ButtonObjects/ExploreMakeZombieButton_Patch.cs diff --git a/MelonLoader/Patches/GameObjects/ButtonObjects/ExploreMakeSceneButton_Patch.cs b/MelonLoader/Patches/GameObjects/ButtonObjects/ExploreMakeSceneButton_Patch.cs new file mode 100644 index 0000000..1102c86 --- /dev/null +++ b/MelonLoader/Patches/GameObjects/ButtonObjects/ExploreMakeSceneButton_Patch.cs @@ -0,0 +1,20 @@ +using HarmonyLib; +using Il2Cpp; +using Il2CppTMPro; +using PvZ_Fusion_Translator.AssetStore; +using UnityEngine; + +namespace PvZ_Fusion_Translator.Patches.GameObjects.ButtonObjects +{ + [HarmonyPatch(typeof(ExploreMakeSceneButton))] + public class ExploreMakeSceneButton_Patch + { + [HarmonyPostfix] + [HarmonyPatch(nameof(ExploreMakeSceneButton.Start))] + public static void Start(ExploreMakeSceneButton __instance) + { + __instance.sceneText.text = StringStore.TranslateText(__instance.sceneText.text); + __instance.sceneText.font = FontStore.LoadTMPFont(Utils.Language.ToString()); + } + } +} \ No newline at end of file diff --git a/MelonLoader/Patches/GameObjects/ButtonObjects/ExploreMakeZombieButton_Patch.cs b/MelonLoader/Patches/GameObjects/ButtonObjects/ExploreMakeZombieButton_Patch.cs new file mode 100644 index 0000000..91a0312 --- /dev/null +++ b/MelonLoader/Patches/GameObjects/ButtonObjects/ExploreMakeZombieButton_Patch.cs @@ -0,0 +1,20 @@ +using HarmonyLib; +using Il2Cpp; +using Il2CppTMPro; +using PvZ_Fusion_Translator.AssetStore; +using UnityEngine; + +namespace PvZ_Fusion_Translator.Patches.GameObjects.ButtonObjects +{ + [HarmonyPatch(typeof(ExploreMakeZombieButton))] + public class ExploreMakeZombieButton_Patch + { + [HarmonyPostfix] + [HarmonyPatch(nameof(ExploreMakeZombieButton.Start))] + public static void Start(ExploreMakeZombieButton __instance) + { + __instance.sceneText.text = Utils.GetZombieNameFromAlmanac(__instance.theZombieType); + __instance.sceneText.font = FontStore.LoadTMPFont(Utils.Language.ToString()); + } + } +} \ No newline at end of file diff --git a/MelonLoader/Patches/GameObjects/ExploreMakeMenu_Patch.cs b/MelonLoader/Patches/GameObjects/ExploreMakeMenu_Patch.cs index bb60b5f..4116c29 100644 --- a/MelonLoader/Patches/GameObjects/ExploreMakeMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/ExploreMakeMenu_Patch.cs @@ -2,6 +2,7 @@ using Il2Cpp; using Il2CppTMPro; using PvZ_Fusion_Translator.AssetStore; +using System.Text.RegularExpressions; using UnityEngine; namespace PvZ_Fusion_Translator.Patches.GameObjects @@ -18,6 +19,53 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects foreach (TextMeshProUGUI txt in __instance.GetComponentsInChildren()) { txt.text = StringStore.TranslateText(txt.text); + txt.font = fontAsset; + } + } + + [HarmonyPatch(nameof(ExploreMakeMenu.InitMenu))] + [HarmonyPostfix] + private static void InitMenu(ExploreMakeMenu __instance) + { + TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); + + foreach (TextMeshProUGUI txt in __instance.GetComponentsInChildren()) + { + if(txt.text.Contains("关卡制作中:")) + { + string plantName = Utils.GetPlantNameFromAlmanac(txt.text.Split(":")[1]); + txt.text = String.Format(StringStore.translationStringRegex["关卡制作中:([^\\s]+)"], plantName); + } + else + { + txt.text = StringStore.TranslateText(txt.text); + } + } + } + + [HarmonyPatch(nameof(ExploreMakeMenu.ViewScene))] + [HarmonyPostfix] + private static void ViewScene(ExploreMakeMenu __instance) + { + TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); + + foreach (TextMeshProUGUI txt in __instance.GetComponentsInChildren()) + { + txt.text = StringStore.TranslateText(txt.text); + txt.font = fontAsset; + } + } + + [HarmonyPatch(nameof(ExploreMakeMenu.InitZombieButtons))] + [HarmonyPostfix] + private static void InitZombieButtons(ExploreMakeMenu __instance) + { + TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); + + foreach (TextMeshProUGUI txt in __instance.GetComponentsInChildren()) + { + txt.text = StringStore.TranslateText(txt.text); + txt.font = fontAsset; } } } diff --git a/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj b/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj index c4889cd..af34d21 100644 --- a/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj +++ b/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj @@ -401,6 +401,8 @@ + +