From 4cad61403a6988e26c177f370be1f7e92224d8e2 Mon Sep 17 00:00:00 2001 From: SillyStar-Github <90102598+SillyStar-Github@users.noreply.github.com> Date: Mon, 22 Dec 2025 13:12:24 -0500 Subject: [PATCH] almanac coding --- .../BaseTextObjects/TMP_InputField_Patch.cs | 1 + .../GameObjects/AlmanacPlantMenu_Patch.cs | 71 +++++ .../GameObjects/AlmanacPlantWindow_Patch.cs | 66 +++++ .../GameObjects/AlmanacZombieMenu_Patch.cs | 34 +++ .../GameObjects/AlmanacZombieWindow_Patch.cs | 68 +++++ .../Patches/GameObjects/Almanac_Patch.cs | 52 ++++ .../Patches/GameObjects/BaseMenu_Patch.cs | 128 ++------- .../ExploreMakeZombieButton_Patch.cs | 4 +- .../ButtonObjects/UIButton_Patch.cs | 84 +----- .../GameObjects/NoticePauseMenu_Patch.cs | 2 +- .../Managers/AlmanacMgrZombie_Patch.cs | 26 +- .../Managers/AlmanacPlantBank_Patch.cs | 268 +++++++++--------- MelonLoader/Patches/Managers/GameAPP_Patch.cs | 28 ++ ...PvZ Fusion Translator [MelonLoader].csproj | 8 +- MelonLoader/Utils.cs | 72 +++-- 15 files changed, 552 insertions(+), 360 deletions(-) create mode 100644 MelonLoader/Patches/GameObjects/AlmanacPlantMenu_Patch.cs create mode 100644 MelonLoader/Patches/GameObjects/AlmanacPlantWindow_Patch.cs create mode 100644 MelonLoader/Patches/GameObjects/AlmanacZombieMenu_Patch.cs create mode 100644 MelonLoader/Patches/GameObjects/AlmanacZombieWindow_Patch.cs create mode 100644 MelonLoader/Patches/GameObjects/Almanac_Patch.cs create mode 100644 MelonLoader/Patches/Managers/GameAPP_Patch.cs diff --git a/MelonLoader/Patches/BaseTextObjects/TMP_InputField_Patch.cs b/MelonLoader/Patches/BaseTextObjects/TMP_InputField_Patch.cs index 00d9589..3d665d3 100644 --- a/MelonLoader/Patches/BaseTextObjects/TMP_InputField_Patch.cs +++ b/MelonLoader/Patches/BaseTextObjects/TMP_InputField_Patch.cs @@ -1,6 +1,7 @@ using HarmonyLib; using Il2CppTMPro; using PvZ_Fusion_Translator.AssetStore; +using UnityEngine; namespace PvZ_Fusion_Translator.Patches.BaseTextObjects { diff --git a/MelonLoader/Patches/GameObjects/AlmanacPlantMenu_Patch.cs b/MelonLoader/Patches/GameObjects/AlmanacPlantMenu_Patch.cs new file mode 100644 index 0000000..b9aa2f0 --- /dev/null +++ b/MelonLoader/Patches/GameObjects/AlmanacPlantMenu_Patch.cs @@ -0,0 +1,71 @@ +using HarmonyLib; +using Il2Cpp; +using Il2CppTMPro; +using PvZ_Fusion_Translator.AssetStore; +using System.Text.RegularExpressions; +using Unity.VisualScripting; +using UnityEngine; +using UnityEngine.UI; +using static PvZ_Fusion_Translator.FileLoader; +using static PvZ_Fusion_Translator.Utils; + +namespace PvZ_Fusion_Translator.Patches.GameObjects +{ + [HarmonyPatch(typeof(AlmanacPlantMenu))] + public static class AlmanacPlantMenu_Patch + { + [HarmonyPatch(nameof(AlmanacPlantMenu.Awake))] + [HarmonyPostfix] + private static void Awake(AlmanacPlantMenu __instance) + { + TMP_FontAsset font = FontStore.LoadTMPFont(Utils.Language.ToString()); + foreach (TextMeshProUGUI text in __instance.GetComponentsInChildren(true)) + { + bool isPlantName = text.gameObject.name.Contains("Name") && text.transform.parent.name != "Background"; + if (text.gameObject.name != "Description" && !isPlantName) + { + text.text = StringStore.TranslateText(text.text); + text.font = font; + text.autoSizeTextContainer = true; + } + } + } + + [HarmonyPatch(nameof(AlmanacPlantMenu.SearchChanged))] + [HarmonyPrefix] + public static bool SearchChanged(AlmanacPlantMenu __instance, ref TMP_InputField inputField) + { + string search = inputField.text; + if (search != StringStore.TranslateText("搜索")) + { + string currentLanguage = Utils.Language.ToString(); + string almanacDir = GetAssetDir(AssetType.Almanac, Utils.Language); + string path = Path.Combine(almanacDir, "LawnStringsTranslate.json"); + string moddedPath = Path.Combine(almanacDir, "ModdedPlantsTranslate.json"); + + string json; + json = File.ReadAllText(path); + + TMP_FontAsset fontAsset = FontStore.LoadTMPFont(currentLanguage); + + AlmanacPlantBank.PlantData plantData = JsonUtility.FromJson(json); + + Il2CppSystem.Collections.Generic.List searchedPlants = new(); + + foreach (AlmanacPlantBank.PlantInfo plantInfo in plantData.plants) + { + if (plantInfo.name.ToLower().Contains(search.ToLower())) + { + searchedPlants.Add((PlantType)plantInfo.seedType); + } + } + + __instance.ShowPlants(searchedPlants); + + return false; + } + + return true; + } + } +} diff --git a/MelonLoader/Patches/GameObjects/AlmanacPlantWindow_Patch.cs b/MelonLoader/Patches/GameObjects/AlmanacPlantWindow_Patch.cs new file mode 100644 index 0000000..1e7260a --- /dev/null +++ b/MelonLoader/Patches/GameObjects/AlmanacPlantWindow_Patch.cs @@ -0,0 +1,66 @@ +using HarmonyLib; +using Il2Cpp; +using Il2CppTMPro; +using PvZ_Fusion_Translator.AssetStore; +using System.Text.RegularExpressions; +using Unity.VisualScripting; +using UnityEngine; +using UnityEngine.UI; +using static PvZ_Fusion_Translator.FileLoader; + +namespace PvZ_Fusion_Translator.Patches.GameObjects +{ + [HarmonyPatch(typeof(AlmanacPlantWindow))] + public static class AlmanacPlantWindow_Patch + { + [HarmonyPatch(nameof(AlmanacPlantWindow.UpdateText))] + [HarmonyPostfix] + private static void UpdateText(AlmanacPlantWindow __instance) + { + string currentLanguage = Utils.Language.ToString(); + string almanacDir = GetAssetDir(AssetType.Almanac, Utils.Language); + string path = Path.Combine(almanacDir, "LawnStringsTranslate.json"); + string moddedPath = Path.Combine(almanacDir, "ModdedPlantsTranslate.json"); + + string json; + json = File.ReadAllText(path); + + bool hasAlmanacFont = false; + TMP_FontAsset almanacFontAsset = null; + if (FontStore.fontAssetDictSecondary.ContainsKey(currentLanguage + "_Almanac") || FontStore.fontAssetDictSecondary.ContainsKey(currentLanguage)) + { + almanacFontAsset = FontStore.LoadTMPFontAlmanac(currentLanguage); + hasAlmanacFont = true; + } + + TMP_FontAsset fontAsset = (hasAlmanacFont) ? FontStore.LoadTMPFontAlmanac(Utils.Language.ToString()) : FontStore.LoadTMPFont(Utils.Language.ToString()); + + AlmanacPlantBank.PlantData plantData = JsonUtility.FromJson(json); + + foreach (AlmanacPlantBank.PlantInfo plantInfo in plantData.plants) + { + if (plantInfo.seedType == (int)__instance.currentPlantType) + { + foreach (TextMeshProUGUI text in __instance.showedPlantName) + { + text.text = $"{Utils.RemoveSizeTags(plantInfo.name)} ({plantInfo.seedType})"; + text.font = fontAsset; + } + + __instance.showedPlantIntroduce.text = Utils.RemoveSizeTags(plantInfo.info) + "\n\n" + Utils.RemoveSizeTags(plantInfo.introduce) + "\n\n"; + __instance.showedPlantIntroduce.font = fontAsset; + __instance.showedPlantIntroduce.margin = new Vector4(6, 2, 12, 0); + + __instance.showedPlantIntroduce.enableWordWrapping = true; + __instance.showedPlantIntroduce.overflowMode = TextOverflowModes.ScrollRect; + + Canvas.ForceUpdateCanvases(); + __instance.showedPlantIntroduce.ForceMeshUpdate(); + + float textHeight = __instance.showedPlantIntroduce.preferredHeight; + __instance.plantTextContent.sizeDelta = new Vector2(__instance.plantTextContent.sizeDelta.x, textHeight); + } + } + } + } +} diff --git a/MelonLoader/Patches/GameObjects/AlmanacZombieMenu_Patch.cs b/MelonLoader/Patches/GameObjects/AlmanacZombieMenu_Patch.cs new file mode 100644 index 0000000..09e0de0 --- /dev/null +++ b/MelonLoader/Patches/GameObjects/AlmanacZombieMenu_Patch.cs @@ -0,0 +1,34 @@ +using HarmonyLib; +using Il2Cpp; +using Il2CppTMPro; +using PvZ_Fusion_Translator.AssetStore; +using System.Text.RegularExpressions; +using Unity.VisualScripting; +using UnityEngine; +using UnityEngine.UI; +using static PvZ_Fusion_Translator.FileLoader; +using static PvZ_Fusion_Translator.Utils; + +namespace PvZ_Fusion_Translator.Patches.GameObjects +{ + [HarmonyPatch(typeof(AlmanacZombieMenu))] + public static class AlmanacZombieMenu_Patch + { + [HarmonyPatch(nameof(AlmanacZombieMenu.Awake))] + [HarmonyPostfix] + private static void Awake(AlmanacZombieMenu __instance) + { + TMP_FontAsset font = FontStore.LoadTMPFont(Utils.Language.ToString()); + foreach (TextMeshProUGUI text in __instance.GetComponentsInChildren(true)) + { + bool isZombieName = text.gameObject.name.Contains("Name") && text.transform.parent.name != "Background"; + if (text.gameObject.name != "Description" && !isZombieName) + { + text.text = StringStore.TranslateText(text.text); + text.font = font; + text.autoSizeTextContainer = true; + } + } + } + } +} diff --git a/MelonLoader/Patches/GameObjects/AlmanacZombieWindow_Patch.cs b/MelonLoader/Patches/GameObjects/AlmanacZombieWindow_Patch.cs new file mode 100644 index 0000000..707f270 --- /dev/null +++ b/MelonLoader/Patches/GameObjects/AlmanacZombieWindow_Patch.cs @@ -0,0 +1,68 @@ +using HarmonyLib; +using Il2Cpp; +using Il2CppTMPro; +using PvZ_Fusion_Translator.AssetStore; +using System.Text.RegularExpressions; +using Unity.VisualScripting; +using UnityEngine; +using UnityEngine.UI; +using static PvZ_Fusion_Translator.FileLoader; + +namespace PvZ_Fusion_Translator.Patches.GameObjects +{ + [HarmonyPatch(typeof(AlmanacZombieWindow))] + public static class AlmanacZombieWindow_Patch + { + [HarmonyPatch(nameof(AlmanacZombieWindow.UpdateText))] + [HarmonyPostfix] + private static void UpdateText(AlmanacZombieWindow __instance) + { + string currentLanguage = Utils.Language.ToString(); + string almanacDir = GetAssetDir(AssetType.Almanac, Utils.Language); + string path = Path.Combine(almanacDir, "ZombieStringsTranslate.json"); + string moddedPath = Path.Combine(almanacDir, "ModdedZombiesTranslate.json"); + + string json; + json = File.ReadAllText(path); + + bool hasAlmanacFont = false; + TMP_FontAsset almanacFontAsset = null; + if (FontStore.fontAssetDictSecondary.ContainsKey(currentLanguage + "_Almanac") || FontStore.fontAssetDictSecondary.ContainsKey(currentLanguage)) + { + almanacFontAsset = FontStore.LoadTMPFontAlmanac(currentLanguage); + hasAlmanacFont = true; + } + + TMP_FontAsset fontAsset = (hasAlmanacFont) ? FontStore.LoadTMPFontAlmanac(Utils.Language.ToString()) : FontStore.LoadTMPFont(Utils.Language.ToString()); + + ZombieAlmanacData zombieData = JsonUtility.FromJson(json); + + foreach (ZombieInfo zombieInfo in zombieData.zombies) + { + if (zombieInfo.theZombieType == __instance.currentZombieType) + { + foreach (TextMeshProUGUI text in __instance.showedZombieName) + { + text.autoSizeTextContainer = false; + text.text = $"{Utils.RemoveSizeTags(zombieInfo.name)} ({(int)zombieInfo.theZombieType})"; + text.font = fontAsset; + text.fontSizeMax = 21; + } + + __instance.showedZombieIntroduce.text = Utils.RemoveSizeTags(zombieInfo.info) + "\n\n" + Utils.RemoveSizeTags(zombieInfo.introduce) + "\n\n"; + __instance.showedZombieIntroduce.font = fontAsset; + __instance.showedZombieIntroduce.margin = new Vector4(3, 2, 12, 0); + + __instance.showedZombieIntroduce.enableWordWrapping = true; + __instance.showedZombieIntroduce.overflowMode = TextOverflowModes.ScrollRect; + + Canvas.ForceUpdateCanvases(); + __instance.showedZombieIntroduce.ForceMeshUpdate(); + + float textHeight = __instance.showedZombieIntroduce.preferredHeight; + __instance.zombieTextContent.sizeDelta = new Vector2(__instance.zombieTextContent.sizeDelta.x, textHeight); + } + } + } + } +} diff --git a/MelonLoader/Patches/GameObjects/Almanac_Patch.cs b/MelonLoader/Patches/GameObjects/Almanac_Patch.cs new file mode 100644 index 0000000..5d2e2dd --- /dev/null +++ b/MelonLoader/Patches/GameObjects/Almanac_Patch.cs @@ -0,0 +1,52 @@ +using HarmonyLib; +using Il2Cpp; +using Il2CppTMPro; +using PvZ_Fusion_Translator.AssetStore; +using UnityEngine; +using System.Text.RegularExpressions; +using Unity.VisualScripting; + +namespace PvZ_Fusion_Translator.Patches.GameObjects +{ + [HarmonyPatch(typeof(Almanac))] + public static class Almanac_Patch + { + [HarmonyPatch(nameof(Almanac.Awake))] + [HarmonyPostfix] + private static void Awake(Almanac __instance) + { + TranslateAlmanacMenu(__instance); + } + + [HarmonyPatch(nameof(Almanac.OldAlmanac))] + [HarmonyPostfix] + private static void OldAlmanac(Almanac __instance) + { + TranslateAlmanacMenu(__instance); + } + + [HarmonyPatch(nameof(Almanac.AnimSwitch))] + [HarmonyPostfix] + private static void AnimSwitch(Almanac __instance) + { + TranslateAlmanacMenu(__instance); + } + + public static void TranslateAlmanacMenu(Almanac __instance) + { + TMP_FontAsset font = FontStore.LoadTMPFont(Utils.Language.ToString()); + foreach (TextMeshProUGUI text in __instance.GetComponentsInChildren()) + { + if(text.text == "关闭") + { + text.text = StringStore.TranslateText("合上"); + } + else + { + text.text = StringStore.TranslateText(text.text); + } + text.font = font; + } + } + } +} diff --git a/MelonLoader/Patches/GameObjects/BaseMenu_Patch.cs b/MelonLoader/Patches/GameObjects/BaseMenu_Patch.cs index 013ae37..e4e8d50 100644 --- a/MelonLoader/Patches/GameObjects/BaseMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/BaseMenu_Patch.cs @@ -3,6 +3,7 @@ using Il2Cpp; using Il2CppTMPro; using PvZ_Fusion_Translator.AssetStore; using UnityEngine; +using static MelonLoader.MelonLogger; namespace PvZ_Fusion_Translator.Patches.GameObjects { @@ -13,120 +14,27 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects [HarmonyPostfix] private static void Awake(BaseMenu __instance) { - Transform mainTransform = __instance.transform; - if (mainTransform != null) + TranslateBaseMenu(__instance, "Level"); + TranslateBaseMenu(__instance, "Levels"); + TranslateBaseMenu(__instance, "CustomLevel"); + } + + public static void TranslateBaseMenu(BaseMenu __instance, string levelsName) + { + Transform levels = __instance.transform.Find(levelsName); + if (levels != null) { - StringStore.TranslateTextTransform(mainTransform.Find("Goback")); - StringStore.TranslateTextTransform(mainTransform.Find("Switich")); - - Transform levelTransform = mainTransform.Find("Level"); - if (levelTransform != null) + List children = levels.GetComponentsInChildren(true).ToList(); + foreach (Transform child in children) { - StringStore.TranslateTextTransform(levelTransform.Find("Nextpage")); - StringStore.TranslateTextTransform(levelTransform.Find("LastPage")); + if (child.name == "Nextpage" || child.name == "LastPage" || child.name == "BackToIndex") + { + StringStore.TranslateTextTransform(child); + } } - Transform customLevelTransform = mainTransform.Find("CustomLevel"); - if (customLevelTransform != null) - { - StringStore.TranslateTextTransform(customLevelTransform.Find("Nextpage")); - StringStore.TranslateTextTransform(customLevelTransform.Find("LastPage")); - } - - Transform levelsTransform = mainTransform.Find("Levels"); - if (levelsTransform != null) - { - - StringStore.TranslateTextTransform(levelsTransform.Find("Nextpage")); - StringStore.TranslateTextTransform(levelsTransform.Find("LastPage")); - - Transform pageMiniGamesTransform = levelsTransform.transform.Find("PageMiniGames"); - if (pageMiniGamesTransform != null) - { - StringStore.TranslateTextTransform(pageMiniGamesTransform.Find("BackToIndex")); - StringStore.TranslateTextTransform(pageMiniGamesTransform.Find("Nextpage")); - StringStore.TranslateTextTransform(pageMiniGamesTransform.Find("LastPage")); - } - - Transform pageUnlockChallengeTransform = levelsTransform.transform.Find("PageUnlockChallenge"); - if (pageUnlockChallengeTransform != null) - { - StringStore.TranslateTextTransform(pageUnlockChallengeTransform.Find("BackToIndex")); - } - - Transform pageFlagChallengeTransform = levelsTransform.transform.Find("PageFlagChallenge"); - if (pageFlagChallengeTransform != null) - { - StringStore.TranslateTextTransform(pageFlagChallengeTransform.Find("BackToIndex")); - } - - Transform pageTravelExperienceTransform = levelsTransform.transform.Find("PageTravelExperience"); - if (pageTravelExperienceTransform != null) - { - StringStore.TranslateTextTransform(pageTravelExperienceTransform.Find("BackToIndex")); - } - - Transform pageGardenProtectionTransform = levelsTransform.transform.Find("PageGardenProtection"); - if (pageGardenProtectionTransform != null) - { - StringStore.TranslateTextTransform(pageGardenProtectionTransform.Find("BackToIndex")); - } - - Transform pageNormalTravelTransform = levelsTransform.transform.Find("PageNormalTravel"); - if (pageNormalTravelTransform != null) - { - StringStore.TranslateTextTransform(pageNormalTravelTransform.Find("BackToIndex")); - } - - Transform pageRandomLevelTransform = levelsTransform.transform.Find("PageRandomLevel"); - if (pageRandomLevelTransform != null) - { - StringStore.TranslateTextTransform(pageRandomLevelTransform.Find("BackToIndex")); - } - - Transform pageUltimateExperienceTransform = levelsTransform.transform.Find("PageUltimateExprience"); - if (pageUltimateExperienceTransform != null) - { - StringStore.TranslateTextTransform(pageUltimateExperienceTransform.Find("BackToIndex")); - } - - Transform pageAdvantureLevelTransform = levelsTransform.transform.Find("PageAdvantureLevel"); - if (pageAdvantureLevelTransform != null) - { - StringStore.TranslateTextTransform(pageAdvantureLevelTransform.Find("BackToIndex")); - StringStore.TranslateTextTransform(pageAdvantureLevelTransform.Find("Nextpage")); - StringStore.TranslateTextTransform(pageAdvantureLevelTransform.Find("LastPage")); - } - - Transform pageScaryPotTransform = levelsTransform.transform.Find("PageScaryPot"); - if (pageScaryPotTransform != null) - { - StringStore.TranslateTextTransform(pageScaryPotTransform.Find("BackToIndex")); - StringStore.TranslateTextTransform(pageScaryPotTransform.Find("Nextpage")); - StringStore.TranslateTextTransform(pageScaryPotTransform.Find("LastPage")); - } - - Transform pageEndlessLevelTransform = levelsTransform.transform.Find("PageEndlessLevel"); - if (pageEndlessLevelTransform != null) - { - StringStore.TranslateTextTransform(pageEndlessLevelTransform.Find("BackToIndex")); - StringStore.TranslateTextTransform(pageEndlessLevelTransform.Find("Nextpage")); - StringStore.TranslateTextTransform(pageEndlessLevelTransform.Find("LastPage")); - } - - Transform pageNewAdvantureLevelTransform = levelsTransform.transform.Find("PageNewAdvantureLevel"); - if (pageNewAdvantureLevelTransform != null) - { - StringStore.TranslateTextTransform(pageNewAdvantureLevelTransform.Find("BackToIndex")); - StringStore.TranslateTextTransform(pageNewAdvantureLevelTransform.Find("Nextpage")); - StringStore.TranslateTextTransform(pageNewAdvantureLevelTransform.Find("LastPage")); - } - - foreach (TextMeshProUGUI txt in mainTransform.GetComponentsInChildren()) - { - txt.text = StringStore.TranslateText(txt.text); - } - } + StringStore.TranslateTextTransform(__instance.transform.Find("Goback")); + StringStore.TranslateTextTransform(__instance.transform.Find("Switich")); } } } diff --git a/MelonLoader/Patches/GameObjects/ButtonObjects/ExploreMakeZombieButton_Patch.cs b/MelonLoader/Patches/GameObjects/ButtonObjects/ExploreMakeZombieButton_Patch.cs index 91a0312..da7b212 100644 --- a/MelonLoader/Patches/GameObjects/ButtonObjects/ExploreMakeZombieButton_Patch.cs +++ b/MelonLoader/Patches/GameObjects/ButtonObjects/ExploreMakeZombieButton_Patch.cs @@ -13,8 +13,8 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects.ButtonObjects [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()); + //__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/ButtonObjects/UIButton_Patch.cs b/MelonLoader/Patches/GameObjects/ButtonObjects/UIButton_Patch.cs index 032f495..cc57702 100644 --- a/MelonLoader/Patches/GameObjects/ButtonObjects/UIButton_Patch.cs +++ b/MelonLoader/Patches/GameObjects/ButtonObjects/UIButton_Patch.cs @@ -4,96 +4,42 @@ using Il2CppTMPro; using PvZ_Fusion_Translator.AssetStore; using UnityEngine; using UnityEngine.UI; +using UnityEngine.UIElements; namespace PvZ_Fusion_Translator.Patches.GameObjects { [HarmonyPatch(typeof(UIButton))] public static class UIButton_Patch { - [HarmonyPatch(nameof(UIButton.Start))] + [HarmonyPatch(typeof(UIButton), nameof(UIButton.Start))] [HarmonyPostfix] - private static void Postfix_Start(UIButton __instance) + public static void Start(UIButton __instance) { - try + if(__instance.transform.childCount >= 2) { - // Also handle TMP components directly under the button - if (__instance.transform.childCount >= 2) - { - TextMeshProUGUI text = __instance.transform.GetChild(0).GetComponent(); - TextMeshProUGUI textShadow = __instance.transform.GetChild(1).GetComponent(); + TMP_FontAsset font = FontStore.LoadTMPFont(Utils.Language.ToString()); - 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()); - } - else + foreach (TextMeshProUGUI text in __instance.transform.GetComponentsInChildren()) { - // Convert and translate legacy Text components - Text[] textComponents = __instance.GetComponentsInChildren(true); - TextMeshProUGUI[] textMeshComponents = __instance.GetComponentsInChildren(true); - foreach (Text textComponent in textComponents) + if (__instance.transform.name == "Goback") { - if (textComponent != null && !string.IsNullOrEmpty(textComponent.text)) - { - string translatedText = StringStore.TranslateText(textComponent.text); - if (!string.IsNullOrEmpty(translatedText) && translatedText != textComponent.text) - { - TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); - TextMeshProUGUI newTMP = StringStore.ConvertToTextMeshPro(textComponent, fontAsset, true); - - if (newTMP != null) - { - newTMP.text = translatedText; - } - } - } + text.text = "合上"; } + text.text = StringStore.TranslateText(text.text); + text.font = font; } - } - catch (Exception) { } - } - - [HarmonyPatch(nameof(UIButton.OnMouseUpAsButton))] - [HarmonyPostfix] - public static void Postfix_OnMouseUpAsButton(UIButton __instance) - { - try + else { - if (__instance.transform.childCount >= 2) + StringStore.TranslateTextTransform(__instance.transform); + if(__instance.transform.name == "Goback") { - if(__instance.name == "EditMode") + foreach(TextMeshProUGUI text in __instance.transform.GetComponentsInChildren()) { - TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); - - TextMeshProUGUI text = __instance.transform.GetChild(0).GetComponent(); - TextMeshProUGUI[] extraTexts = __instance.transform.GetChild(1).GetComponentsInChildren(); - - 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()); + text.text = StringStore.TranslateText("合上"); } } } - catch (Exception) { } } } } diff --git a/MelonLoader/Patches/GameObjects/NoticePauseMenu_Patch.cs b/MelonLoader/Patches/GameObjects/NoticePauseMenu_Patch.cs index 768eea8..2e73634 100644 --- a/MelonLoader/Patches/GameObjects/NoticePauseMenu_Patch.cs +++ b/MelonLoader/Patches/GameObjects/NoticePauseMenu_Patch.cs @@ -14,7 +14,7 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects [HarmonyPatch(nameof(NoticeMenu.Awake))] private static void Pre_Awake(NoticeMenu __instance) { - GameObject contentObject = __instance.transform.FindChild("Scroll View").GetChild(0).GetChild(0).gameObject; //bc normal Find or FindChild didn't work + GameObject contentObject = __instance.transform.FindChild("Scroll View/Viewport/Content").gameObject; TextMeshProUGUI contentText = contentObject.GetComponent(); File.WriteAllText(Path.Combine(FileLoader.GetAssetDir(FileLoader.AssetType.Dumps), "changelog.txt"), contentText.text); diff --git a/MelonLoader/Patches/Managers/AlmanacMgrZombie_Patch.cs b/MelonLoader/Patches/Managers/AlmanacMgrZombie_Patch.cs index 097f84d..daf88bc 100644 --- a/MelonLoader/Patches/Managers/AlmanacMgrZombie_Patch.cs +++ b/MelonLoader/Patches/Managers/AlmanacMgrZombie_Patch.cs @@ -14,13 +14,13 @@ namespace PvZ_Fusion_Translator.Patches.Managers [HarmonyPostfix] private static void InitNameAndInfoFromJson(AlmanacMgrZombie __instance) { - #if MULTI_LANGUAGE +#if MULTI_LANGUAGE string currentLanguage = Utils.Language.ToString(); string almanacDir = GetAssetDir(AssetType.Almanac, Utils.Language); - #else +#else string almanacDir = almanacDir = GetAssetDir(AssetType.Almanac); string currentLanguage = "English"; - #endif +#endif string path = Path.Combine(almanacDir, "ZombieStringsTranslate.json"); string moddedPath = Path.Combine(almanacDir, "ModdedZombiesTranslate.json"); @@ -30,13 +30,13 @@ namespace PvZ_Fusion_Translator.Patches.Managers return; } - #if OBFUSCATE +#if OBFUSCATE if (CheckSumStore.IsModified(path)) { Log.LogError("File {0} was modified!", path); return; } - #endif +#endif string json; json = File.ReadAllText(path); @@ -49,19 +49,19 @@ namespace PvZ_Fusion_Translator.Patches.Managers hasAlmanacFont = true; } - #if MULTI_LANGUAGE +#if MULTI_LANGUAGE TMP_FontAsset fontAsset = FontStore.LoadTMPFont(currentLanguage); - #else +#else TMP_FontAsset fontAsset = FontStore.LoadTMPFont(); - #endif +#endif TextMeshPro component = __instance.info.GetComponent(); TextMeshPro component2 = __instance.zombieName.GetComponent(); TextMeshPro component3 = __instance.zombieName.transform.GetChild(0).GetComponent(); - AlmanacMgrZombie.ZombieAlmanacData zombieData = JsonUtility.FromJson(json); + ZombieAlmanacData zombieData = JsonUtility.FromJson(json); - foreach (AlmanacMgrZombie.ZombieInfo zombieInfo in zombieData.zombies) + foreach (ZombieInfo zombieInfo in zombieData.zombies) { if (zombieInfo.theZombieType == __instance.theZombieType) { @@ -86,9 +86,9 @@ namespace PvZ_Fusion_Translator.Patches.Managers string moddedJson; moddedJson = File.ReadAllText(moddedPath); - AlmanacMgrZombie.ZombieAlmanacData moddedZombieData = JsonUtility.FromJson(moddedJson); + ZombieAlmanacData moddedZombieData = JsonUtility.FromJson(moddedJson); - foreach (AlmanacMgrZombie.ZombieInfo zombieInfo in moddedZombieData.zombies) + foreach (ZombieInfo zombieInfo in moddedZombieData.zombies) { if (zombieInfo.theZombieType == __instance.theZombieType) { @@ -125,4 +125,4 @@ namespace PvZ_Fusion_Translator.Patches.Managers return true; } } -} +} \ No newline at end of file diff --git a/MelonLoader/Patches/Managers/AlmanacPlantBank_Patch.cs b/MelonLoader/Patches/Managers/AlmanacPlantBank_Patch.cs index a2be15c..bf150c8 100644 --- a/MelonLoader/Patches/Managers/AlmanacPlantBank_Patch.cs +++ b/MelonLoader/Patches/Managers/AlmanacPlantBank_Patch.cs @@ -7,170 +7,170 @@ using static PvZ_Fusion_Translator.FileLoader; namespace PvZ_Fusion_Translator.Patches.Managers { - [HarmonyPatch(typeof(AlmanacPlantBank))] - public static partial class AlmanacPlantBank_Patch - { - [HarmonyPatch(nameof(AlmanacPlantBank.InitNameAndInfoFromJson))] - [HarmonyPostfix] - private static void InitNameAndInfoFromJson(Il2Cpp.AlmanacPlantBank __instance) - { - #if MULTI_LANGUAGE - string currentLanguage = Utils.Language.ToString(); - string almanacDir = GetAssetDir(AssetType.Almanac, Utils.Language); - #else + [HarmonyPatch(typeof(AlmanacPlantBank))] + public static partial class AlmanacPlantBank_Patch + { + [HarmonyPatch(nameof(AlmanacPlantBank.InitNameAndInfoFromJson))] + [HarmonyPostfix] + private static void InitNameAndInfoFromJson(Il2Cpp.AlmanacPlantBank __instance) + { +#if MULTI_LANGUAGE + string currentLanguage = Utils.Language.ToString(); + string almanacDir = GetAssetDir(AssetType.Almanac, Utils.Language); +#else string almanacDir = GetAssetDir(AssetType.Almanac); string currentLanguage = "English"; - #endif - string path = Path.Combine(almanacDir, "LawnStringsTranslate.json"); - string moddedPath = Path.Combine(almanacDir, "ModdedPlantsTranslate.json"); +#endif + string path = Path.Combine(almanacDir, "LawnStringsTranslate.json"); + string moddedPath = Path.Combine(almanacDir, "ModdedPlantsTranslate.json"); - if (!File.Exists(path)) - { - Log.LogError($"LawnStringsTranslate.json file not found at path: {path}"); - return; - } + if (!File.Exists(path)) + { + Log.LogError($"LawnStringsTranslate.json file not found at path: {path}"); + return; + } - #if OBFUSCATE +#if OBFUSCATE if (CheckSumStore.IsModified(path)) { Log.LogError("File {0} was modified!", path); return; } - #endif +#endif - string json; - json = File.ReadAllText(path); - - bool hasAlmanacFont = false; - TMP_FontAsset almanacFontAsset = null; - if (FontStore.fontAssetDictSecondary.ContainsKey(currentLanguage + "_Almanac") || FontStore.fontAssetDictSecondary.ContainsKey(currentLanguage)) - { - almanacFontAsset = FontStore.LoadTMPFontAlmanac(currentLanguage); - hasAlmanacFont = true; - } + string json; + json = File.ReadAllText(path); - #if MULTI_LANGUAGE - TMP_FontAsset fontAsset = FontStore.LoadTMPFont(currentLanguage); - #else + bool hasAlmanacFont = false; + TMP_FontAsset almanacFontAsset = null; + if (FontStore.fontAssetDictSecondary.ContainsKey(currentLanguage + "_Almanac") || FontStore.fontAssetDictSecondary.ContainsKey(currentLanguage)) + { + almanacFontAsset = FontStore.LoadTMPFontAlmanac(currentLanguage); + hasAlmanacFont = true; + } + +#if MULTI_LANGUAGE + TMP_FontAsset fontAsset = FontStore.LoadTMPFont(currentLanguage); +#else TMP_FontAsset fontAsset = FontStore.LoadTMPFont(); - #endif +#endif - TextMeshPro component = __instance.introduce.GetComponent(); - TextMeshPro component2 = __instance.plantName.GetComponent(); - TextMeshPro component3 = __instance.plantName.transform.GetChild(0).GetComponent(); - TextMeshPro component4 = __instance.cost.GetComponent(); + TextMeshPro component = __instance.introduce.GetComponent(); + TextMeshPro component2 = __instance.plantName.GetComponent(); + TextMeshPro component3 = __instance.plantName.transform.GetChild(0).GetComponent(); + TextMeshPro component4 = __instance.cost.GetComponent(); - AlmanacPlantBank.PlantData plantData = JsonUtility.FromJson(json); + AlmanacPlantBank.PlantData plantData = JsonUtility.FromJson(json); foreach (AlmanacPlantBank.PlantInfo plantInfo in plantData.plants) - { + { if (plantInfo.seedType == __instance.theSeedType && !string.IsNullOrEmpty(plantInfo.name)) - { - component.autoSizeTextContainer = false; - component.text = plantInfo.info + "\n\n" + plantInfo.introduce; - component.overflowMode = TextOverflowModes.Page; + { + component.autoSizeTextContainer = false; + component.text = plantInfo.info + "\n\n" + plantInfo.introduce; + component.overflowMode = TextOverflowModes.Page; - // fix dimensions for cost text - component.rectTransform.offsetMax = new Vector2(component.rectTransform.offsetMax.x, 27.3839f); - component.rectTransform.offsetMin = new Vector2(component.rectTransform.offsetMin.x, -29.3079f); - component.rectTransform.sizeDelta = new Vector2(component.rectTransform.sizeDelta.x, 50.917f); - component.transform.localPosition = new Vector3(component.transform.localPosition.x, component.transform.localPosition.y + 0.15f, component.transform.localPosition.z); - + // fix dimensions for cost text + component.rectTransform.offsetMax = new Vector2(component.rectTransform.offsetMax.x, 27.3839f); + component.rectTransform.offsetMin = new Vector2(component.rectTransform.offsetMin.x, -29.3079f); + component.rectTransform.sizeDelta = new Vector2(component.rectTransform.sizeDelta.x, 50.917f); + component.transform.localPosition = new Vector3(component.transform.localPosition.x, component.transform.localPosition.y + 0.15f, component.transform.localPosition.z); - component2.text = plantInfo.name; - component2.autoSizeTextContainer = true; + + component2.text = plantInfo.name; + component2.autoSizeTextContainer = true; component3.text = Utils.RemoveColorTags(plantInfo.name ?? string.Empty); - component3.autoSizeTextContainer = true; + component3.autoSizeTextContainer = true; - component4.text = plantInfo.cost; + component4.text = plantInfo.cost; - if (hasAlmanacFont) - { - component.font = almanacFontAsset; - component4.font = almanacFontAsset; - } - else - { - component.font = fontAsset; - component4.font = fontAsset; - } - component2.font = fontAsset; - component3.font = fontAsset; - } - } + if (hasAlmanacFont) + { + component.font = almanacFontAsset; + component4.font = almanacFontAsset; + } + else + { + component.font = fontAsset; + component4.font = fontAsset; + } + component2.font = fontAsset; + component3.font = fontAsset; + } + } - if (File.Exists(moddedPath)) - { - string moddedJson; - moddedJson = File.ReadAllText(moddedPath); + if (File.Exists(moddedPath)) + { + string moddedJson; + moddedJson = File.ReadAllText(moddedPath); - AlmanacPlantBank.PlantData moddedPlantData = JsonUtility.FromJson(moddedJson); + AlmanacPlantBank.PlantData moddedPlantData = JsonUtility.FromJson(moddedJson); foreach (AlmanacPlantBank.PlantInfo plantInfo in moddedPlantData.plants) - { + { if (plantInfo.seedType == __instance.theSeedType && !string.IsNullOrEmpty(plantInfo.name)) - { - component.autoSizeTextContainer = false; - component.text = plantInfo.info + "\n\n" + plantInfo.introduce; - component.overflowMode = TextOverflowModes.Page; + { + component.autoSizeTextContainer = false; + component.text = plantInfo.info + "\n\n" + plantInfo.introduce; + component.overflowMode = TextOverflowModes.Page; - // fix dimensions for cost text - component.rectTransform.offsetMax = new Vector2(component.rectTransform.offsetMax.x, 27.3839f); - component.rectTransform.offsetMin = new Vector2(component.rectTransform.offsetMin.x, -29.3079f); - component.rectTransform.sizeDelta = new Vector2(component.rectTransform.sizeDelta.x, 50.917f); - component.transform.localPosition = new Vector3(component.transform.localPosition.x, component.transform.localPosition.y + 0.15f, component.transform.localPosition.z); - + // fix dimensions for cost text + component.rectTransform.offsetMax = new Vector2(component.rectTransform.offsetMax.x, 27.3839f); + component.rectTransform.offsetMin = new Vector2(component.rectTransform.offsetMin.x, -29.3079f); + component.rectTransform.sizeDelta = new Vector2(component.rectTransform.sizeDelta.x, 50.917f); + component.transform.localPosition = new Vector3(component.transform.localPosition.x, component.transform.localPosition.y + 0.15f, component.transform.localPosition.z); - component2.text = plantInfo.name; - component2.autoSizeTextContainer = true; + + component2.text = plantInfo.name; + component2.autoSizeTextContainer = true; component3.text = Utils.RemoveColorTags(plantInfo.name ?? string.Empty); - component3.autoSizeTextContainer = true; + component3.autoSizeTextContainer = true; - component4.text = plantInfo.cost; + component4.text = plantInfo.cost; - if (hasAlmanacFont) - { - component.font = almanacFontAsset; - component4.font = almanacFontAsset; - } - else - { - component.font = fontAsset; - component4.font = fontAsset; - } - component2.font = fontAsset; - component3.font = fontAsset; - } - } - } + if (hasAlmanacFont) + { + component.font = almanacFontAsset; + component4.font = almanacFontAsset; + } + else + { + component.font = fontAsset; + component4.font = fontAsset; + } + component2.font = fontAsset; + component3.font = fontAsset; + } + } + } return; - } + } - [HarmonyPatch(nameof(AlmanacPlantBank.OnMouseDown))] - [HarmonyPrefix] - private static bool OnMouseDown(AlmanacPlantBank __instance) - { - TextMeshPro component = __instance.introduce.GetComponent(); - if (component != null) - { - component.pageToDisplay = component.pageToDisplay > component.m_pageNumber ? 1 : component.pageToDisplay + 1; - return false; - } - return true; - } + [HarmonyPatch(nameof(AlmanacPlantBank.OnMouseDown))] + [HarmonyPrefix] + private static bool OnMouseDown(AlmanacPlantBank __instance) + { + TextMeshPro component = __instance.introduce.GetComponent(); + if (component != null) + { + component.pageToDisplay = component.pageToDisplay > component.m_pageNumber ? 1 : component.pageToDisplay + 1; + return false; + } + return true; + } - [HarmonyPatch(nameof(AlmanacPlantBank.PVPInit))] - [HarmonyPostfix] - private static void PVPInit(Il2Cpp.AlmanacPlantBank __instance) - { - TextMeshPro component = __instance.introduce.GetComponent(); - if (component != null) - { - component.autoSizeTextContainer = false; - } + [HarmonyPatch(nameof(AlmanacPlantBank.PVPInit))] + [HarmonyPostfix] + private static void PVPInit(Il2Cpp.AlmanacPlantBank __instance) + { + TextMeshPro component = __instance.introduce.GetComponent(); + if (component != null) + { + component.autoSizeTextContainer = false; + } Transform banTransform = __instance.transform.FindChild("Ban").GetChild(0); if (banTransform != null) @@ -179,22 +179,22 @@ namespace PvZ_Fusion_Translator.Patches.Managers } } - [HarmonyPatch(nameof(AlmanacPlantBank.Start))] - [HarmonyPostfix] - public static void Post_Start(AlmanacPlantBank __instance) - { + [HarmonyPatch(nameof(AlmanacPlantBank.Start))] + [HarmonyPostfix] + public static void Post_Start(AlmanacPlantBank __instance) + { GameObject skinTextObj = __instance.skinButton.transform.GetChild(0).gameObject; GameObject skinShadowTextObj = UnityEngine.Object.Instantiate(skinTextObj, parent: __instance.skinButton.transform); TextMeshPro skinShadowText = skinShadowTextObj.GetComponent(); skinShadowText.text = StringStore.TranslateText("换肤_S"); skinShadowText.sortingOrder -= 2; skinShadowTextObj.transform.Translate(new Vector3(0.015f, -0.015f, 0)); - skinTextObj.transform.Translate(new Vector3(-0.022f, 0)); + skinTextObj.transform.Translate(new Vector3(-0.022f, 0)); skinShadowTextObj.transform.Translate(new Vector3(-0.022f, 0)); __instance.skinButton.transform.localScale /= 1.75f; __instance.skinButton.transform.Translate(new Vector3(-0.075f, -0.15f, 0)); - __instance.skinButton.transform.GetChild(1).Translate(new Vector3(0.35f, 0)); - __instance.skinButton.transform.GetChild(2).Translate(new Vector3(-0.35f, 0)); + __instance.skinButton.transform.GetChild(1).Translate(new Vector3(0.35f, 0)); + __instance.skinButton.transform.GetChild(2).Translate(new Vector3(-0.35f, 0)); } - } + } } \ No newline at end of file diff --git a/MelonLoader/Patches/Managers/GameAPP_Patch.cs b/MelonLoader/Patches/Managers/GameAPP_Patch.cs new file mode 100644 index 0000000..73943c3 --- /dev/null +++ b/MelonLoader/Patches/Managers/GameAPP_Patch.cs @@ -0,0 +1,28 @@ +using HarmonyLib; +using Il2Cpp; +using Il2CppTMPro; +using PvZ_Fusion_Translator.AssetStore; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +namespace PvZ_Fusion_Translator.Patches.Managers +{ + [HarmonyPatch(typeof(GameAPP))] + public static class GameAPP_Patch + { + [HarmonyPatch(nameof(GameAPP.Update))] + [HarmonyPrefix] + private static bool Update(GameAPP __instance) + { + if(EventSystem.current.currentSelectedGameObject != null) + { + if (EventSystem.current.currentSelectedGameObject.TryGetComponent(out TMP_InputField field)) + { + __instance.MusicUpdate(); + return false; + } + } + return true; + } + } +} diff --git a/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj b/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj index cedb4a6..251ff6a 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.1.1 + C:\Users\rainb\Desktop\PC_PVZ-Fusion_3.2 AnyCPU;ARM64;x64 @@ -401,6 +401,12 @@ + + + + + + diff --git a/MelonLoader/Utils.cs b/MelonLoader/Utils.cs index 91b2afe..e44fad9 100644 --- a/MelonLoader/Utils.cs +++ b/MelonLoader/Utils.cs @@ -80,15 +80,27 @@ namespace PvZ_Fusion_Translator Process.Start(new ProcessStartInfo(website) { UseShellExecute = true }); } - public static string RemoveColorTags(string text) + public static string RemoveColorTags(string text) { - if (string.IsNullOrEmpty(text)) + if (string.IsNullOrEmpty(text)) return text ?? string.Empty; // Remove opening color tags like string withoutOpenTags = Regex.Replace(text, @"]+>", string.Empty, RegexOptions.IgnoreCase); // Remove closing color tags like string withoutCloseTags = Regex.Replace(withoutOpenTags, @"", string.Empty, RegexOptions.IgnoreCase); + return withoutCloseTags; + } + + public static string RemoveSizeTags(string text) + { + if (string.IsNullOrEmpty(text)) + return text ?? string.Empty; + + // Remove opening color tags like + string withoutOpenTags = Regex.Replace(text, @"]+>", string.Empty, RegexOptions.IgnoreCase); + // Remove closing color tags like + string withoutCloseTags = Regex.Replace(withoutOpenTags, @"", string.Empty, RegexOptions.IgnoreCase); return withoutCloseTags; } @@ -203,39 +215,39 @@ namespace PvZ_Fusion_Translator return thePlantName; } - public static string GetZombieNameFromAlmanac(ZombieType theZombieType) - { - string json; - string theZombieName = ""; + public static string GetZombieNameFromAlmanac(ZombieType theZombieType) + { + string json; + string theZombieName = ""; - string currentLanguage = Utils.Language.ToString(); - string almanacDir = GetAssetDir(AssetType.Almanac, Utils.Language); - string path = Path.Combine(almanacDir, "ZombieStringsTranslate.json"); + string currentLanguage = Utils.Language.ToString(); + string almanacDir = GetAssetDir(AssetType.Almanac, Utils.Language); + string path = Path.Combine(almanacDir, "ZombieStringsTranslate.json"); - if (!File.Exists(path)) - { - Log.LogError($"ZombieStringsTranslate.json file not found at path: {path}"); - Log.LogError("Zombie name could not be found!"); - theZombieName = ""; - } - else - { - json = File.ReadAllText(path); - AlmanacMgrZombie.ZombieAlmanacData zombieData = JsonUtility.FromJson(json); + if (!File.Exists(path)) + { + Log.LogError($"ZombieStringsTranslate.json file not found at path: {path}"); + Log.LogError("Zombie name could not be found!"); + theZombieName = ""; + } + else + { + json = File.ReadAllText(path); + ZombieAlmanacData zombieData = JsonUtility.FromJson(json); - foreach (AlmanacMgrZombie.ZombieInfo zombieInfo in zombieData.zombies) - { - if ((int)zombieInfo.theZombieType == (int)theZombieType) - { - theZombieName = zombieInfo.name; - } - } - } + foreach (ZombieInfo zombieInfo in zombieData.zombies) + { + if ((int)zombieInfo.theZombieType == (int)theZombieType) + { + theZombieName = zombieInfo.name; + } + } + } - return theZombieName; - } + return theZombieName; + } - public static Dictionary> plantIndices = new Dictionary>(); + public static Dictionary> plantIndices = new Dictionary>(); public static void RegisterPlantIndices() {