From 0515bba2b7f4ebf9eb2f4246454480d4fe91a553 Mon Sep 17 00:00:00 2001 From: SillyStar-Github <90102598+SillyStar-Github@users.noreply.github.com> Date: Fri, 24 Apr 2026 23:25:20 -0400 Subject: [PATCH] final 3.5 update --- MelonLoader/AssetStore/DllStore.cs | 9 ++-- .../BaseTextObjects/InGameText_Patch.cs | 41 ++++++++++-------- .../ButtonObjects/OptLanguageBtn_Patch.cs | 5 ++- .../MinorObjects/GameLose_Patch.cs | 26 +++++++++++ .../GameObjects/MinorObjects/Plant_Patch.cs | 4 +- .../GameObjects/MinorObjects/Zombie_Patch.cs | 13 +++--- ...PvZ Fusion Translator [MelonLoader].csproj | 1 + MelonLoader/Resources/ModUpdateUtil.exe | Bin 128952 -> 129464 bytes MelonLoader/Utils.cs | 3 +- 9 files changed, 72 insertions(+), 30 deletions(-) create mode 100644 MelonLoader/Patches/GameObjects/MinorObjects/GameLose_Patch.cs diff --git a/MelonLoader/AssetStore/DllStore.cs b/MelonLoader/AssetStore/DllStore.cs index 54eea26..18ea2e5 100644 --- a/MelonLoader/AssetStore/DllStore.cs +++ b/MelonLoader/AssetStore/DllStore.cs @@ -14,7 +14,6 @@ namespace PvZ_Fusion_Translator.AssetStore public static Dictionary dllData = new Dictionary() { { "Blooms_QOL.dll", null }, - { "HideMetalObjects.dll", null }, { "PvZ_Fusion_Translator.dll", null } }; public static bool updateOnClose = false; @@ -93,7 +92,7 @@ namespace PvZ_Fusion_Translator.AssetStore string programName = "PvZ_Fusion_Translator.Resources.ModUpdateUtil.exe"; using var exeResourceStream = assembly.GetManifestResourceStream(programName); - string tempPath = Path.Combine(Path.GetTempPath(), "ModUpdateUtil.exe"); + string tempPath = Path.Combine(MelonEnvironment.ModsDirectory, "ModUpdateUtil.exe"); using (var fileStream = File.Create(tempPath)) { exeResourceStream.CopyTo(fileStream); @@ -102,10 +101,14 @@ namespace PvZ_Fusion_Translator.AssetStore Process.Start(new ProcessStartInfo { FileName = tempPath, - Arguments = $"{processId.ToString()} {string.Join(",", dllData.Keys)} {MelonEnvironment.ModsDirectory}", + Arguments = $"{processId.ToString()} {string.Join(",", dllData.Keys)} \"{MelonEnvironment.ModsDirectory}\"", UseShellExecute = true }); } + else + { + Log.LogError("Cannot update on close! All .dll data is null!"); + } } } } diff --git a/MelonLoader/Patches/BaseTextObjects/InGameText_Patch.cs b/MelonLoader/Patches/BaseTextObjects/InGameText_Patch.cs index 936ac63..bf7678b 100644 --- a/MelonLoader/Patches/BaseTextObjects/InGameText_Patch.cs +++ b/MelonLoader/Patches/BaseTextObjects/InGameText_Patch.cs @@ -20,10 +20,6 @@ namespace PvZ_Fusion_Translator.Patches.BaseTextObjects [HarmonyPostfix] public static void ShowText(InGameText __instance) { - if(__instance.textHead == null) return; - - if(!__instance.textHead.active || !__instance.textMesh.gameObject.active) return; - TranslateInGameText(__instance); } @@ -31,10 +27,6 @@ namespace PvZ_Fusion_Translator.Patches.BaseTextObjects [HarmonyPostfix] public static void DebugWarning(InGameText __instance) { - if(__instance.textHead == null) return; - - if(!__instance.textHead.active || !__instance.textMesh.gameObject.active) return; - TranslateInGameText(__instance); } @@ -42,24 +34,39 @@ namespace PvZ_Fusion_Translator.Patches.BaseTextObjects [HarmonyPostfix] public static void Update(InGameText __instance) { - if(__instance.textHead == null) return; - - if(!__instance.textHead.active || !__instance.textMesh.gameObject.active) return; - TranslateInGameText(__instance); } public static void TranslateInGameText(InGameText __instance) { - if (__instance.textMesh == null) return; + TextMeshProUGUI txt = null; - if(!__instance.textHead.active || !__instance.textMesh.gameObject.active) return; + if (__instance.textMesh == null || __instance.textHead == null) + { + if (__instance.TryGetComponent(out TextMeshProUGUI selfTxt)) + { + txt = selfTxt; + } + } + else + { + txt = __instance.textMesh; + } + + if(txt != null) + { + if (!txt.gameObject.active) return; + + TranslateInGameTextMesh(txt); + } + } + + public static void TranslateInGameTextMesh(TextMeshProUGUI txt) + { + if (txt == null) return; TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString()); - currentText = __instance.textMesh.text; - - TextMeshProUGUI txt = __instance.textMesh; string originalText = txt.text; string travelMatch = TravelMgr_Patch.MatchTravelBuff(originalText); int godsGachaCheck = CheckGodsGachaPopup(originalText); diff --git a/MelonLoader/Patches/GameObjects/ButtonObjects/OptLanguageBtn_Patch.cs b/MelonLoader/Patches/GameObjects/ButtonObjects/OptLanguageBtn_Patch.cs index b1821de..45d94df 100644 --- a/MelonLoader/Patches/GameObjects/ButtonObjects/OptLanguageBtn_Patch.cs +++ b/MelonLoader/Patches/GameObjects/ButtonObjects/OptLanguageBtn_Patch.cs @@ -137,7 +137,8 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects.ButtonObjects data.IsNextButton = false; btn.gameObject.SetActive(true); - UpdateButtonText(btn, Utils.LanguageNames[lang], FontStore.LoadTMPFont(lang.ToString())); + string languageName = Utils.LanguageNames.ContainsKey(lang) ? Utils.LanguageNames[lang] : lang.ToString(); + UpdateButtonText(btn, languageName, FontStore.LoadTMPFont(lang.ToString())); } else { @@ -160,7 +161,7 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects.ButtonObjects data.Toggle = toggle; data.IsNextButton = false; btn.gameObject.SetActive(true); - string buttonText = Utils.ToggleNames[toggle]; + string buttonText = Utils.ToggleNames.ContainsKey(toggle) ? Utils.ToggleNames[toggle] : toggle.ToString(); UpdateButtonText(btn, StringStore.TranslateText(buttonText), FontStore.LoadTMPFont(Utils.Language.ToString())); string sourceMsg = ""; switch(i) diff --git a/MelonLoader/Patches/GameObjects/MinorObjects/GameLose_Patch.cs b/MelonLoader/Patches/GameObjects/MinorObjects/GameLose_Patch.cs new file mode 100644 index 0000000..340fd95 --- /dev/null +++ b/MelonLoader/Patches/GameObjects/MinorObjects/GameLose_Patch.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using UnityEngine; +using Il2Cpp; +using PvZ_Fusion_Translator.Patches.BaseTextObjects; + +namespace PvZ_Fusion_Translator.Patches.GameObjects.MinorObjects +{ + [HarmonyPatch(typeof(GameLose))] + public static class GameLose_Patch + { + [HarmonyPatch(nameof(GameLose.UpdateSecondChanceTimer))] + public static void UpdateSecondChanceTimer(GameLose __instance) + { + if (InGameText.Instance == null) return; + + if (InGameText.Instance.timer < 0) return; + + InGameText_Patch.TranslateInGameText(InGameText.Instance); + } + } +} diff --git a/MelonLoader/Patches/GameObjects/MinorObjects/Plant_Patch.cs b/MelonLoader/Patches/GameObjects/MinorObjects/Plant_Patch.cs index 0e0cbb2..b46f0db 100644 --- a/MelonLoader/Patches/GameObjects/MinorObjects/Plant_Patch.cs +++ b/MelonLoader/Patches/GameObjects/MinorObjects/Plant_Patch.cs @@ -4,7 +4,7 @@ using System.Text.RegularExpressions; namespace PvZ_Fusion_Translator.Patches.GameObjects.MinorObjects { - [HarmonyPatch(typeof(Plant))] + /*[HarmonyPatch(typeof(Plant))] public static class Plant_Patch { [HarmonyPostfix] @@ -43,5 +43,5 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects.MinorObjects } return originalText; } - } + }*/ } \ No newline at end of file diff --git a/MelonLoader/Patches/GameObjects/MinorObjects/Zombie_Patch.cs b/MelonLoader/Patches/GameObjects/MinorObjects/Zombie_Patch.cs index ea643de..f3c9346 100644 --- a/MelonLoader/Patches/GameObjects/MinorObjects/Zombie_Patch.cs +++ b/MelonLoader/Patches/GameObjects/MinorObjects/Zombie_Patch.cs @@ -14,9 +14,9 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects.MinorObjects private static Dictionary HPStrings = new Dictionary() { { "最后一击:(\\d+)\nDPS:([^\\s]+)\n总伤害:(\\d+)", "Last Damage: {0}\nDPS: {1}\nTotal: {2}" }, - { "^HP:(\\d+)/(\\d+)\n一类:(\\d+)/(\\d+)\n二类:(\\d+)/(\\d+)$", "HP: {0}/{1}\nType 1 armor: {2}/{3}\nType 2 armor: {4}/{5}" }, - { "^HP:(\\d+)/(\\d+)\n一类:(\\d+)/(\\d+)$", "HP: {0}/{1}\nType 1 armor: {2}/{3}" }, - { "^HP:(\\d+)/(\\d+)\n二类:(\\d+)/(\\d+)$", "HP: {0}/{1}\nType 2 armor: {2}/{3}" }, + { "^HP:(\\d+)/(\\d+)\n一类:(\\d+)/(\\d+)\n二类:(\\d+)/(\\d+)$", "HP: {0}/{1}\nT1 armor: {2}/{3}\nT2 armor: {4}/{5}" }, + { "^HP:(\\d+)/(\\d+)\n一类:(\\d+)/(\\d+)$", "HP: {0}/{1}\nT1 armor: {2}/{3}" }, + { "^HP:(\\d+)/(\\d+)\n二类:(\\d+)/(\\d+)$", "HP: {0}/{1}\nT2 armor: {2}/{3}" }, { "^HP:(\\d+)/(\\d+)$", "HP: {0}/{1}" } }; @@ -38,12 +38,15 @@ namespace PvZ_Fusion_Translator.Patches.GameObjects.MinorObjects __instance.healthText.transform.rotation = Quaternion.Euler(0f, 0f, 0f); } - [HarmonyPatch(nameof(Zombie.Update))] - [HarmonyPrefix] + [HarmonyPatch(nameof(Zombie.UpdateHealthText))] + [HarmonyPostfix] public static void Update(Zombie __instance) { if (__instance.theZombieType == ZombieType.TrainingDummy || !Board.Instance.showZombieHealth) return; + + if (__instance.healthText == null || __instance.healthTextShadow == null) return; + TranslateHpUI(__instance.healthText, __instance); TranslateHpUI(__instance.healthTextShadow, __instance); diff --git a/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj b/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj index 18fcea9..e3817b7 100644 --- a/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj +++ b/MelonLoader/PvZ Fusion Translator [MelonLoader].csproj @@ -404,6 +404,7 @@ + diff --git a/MelonLoader/Resources/ModUpdateUtil.exe b/MelonLoader/Resources/ModUpdateUtil.exe index 15147521809cd36d3da6907960669f636332f76c..fa4a7468eb005a9a5af1265cc2a7f573d39d10ea 100644 GIT binary patch delta 2595 zcma);e{56N6~{m4`uW*@NuAgs4g^S?1n>(MrPTgedl}M(;NFBF!o{K@T-zKBmc?lJ|mTGrL}I;qvXall;p`8SOx^M z;8&Zxvv10MVVa;*LtljN`9~{?^1lK3n%4;3M_*R8UeCBBoE@b=99ZT(JuWp;=A9dt zgsku;#-%de(3Gv(1}OY2O29`E@BtyPkG`zdWVZf69M$RL9R)T-)KCB{$8Oauow-h6 zi-JLc0k;C2J6UQd1Xk=hw-TH@@99gjER9{;9&oF`iTZC8F9V7A_pShEZ!tJUR@8D= zf>YP5Vk@0ty{w8@!})qX6a*`3Dc6FUKh-NxLpo4osY80cQM?F573cDzmKy_S!nbMy zHROObxQ#RevAqd!@>Ov7E?qS?90qH>mOu>|WJm+g71?Si53Gpo2Ee{;dnKQ~y=Uc) z+smK7Kkxasq%yr{W@bh$%5KK2IM}0`>Vk7u$gKvawlL(b);%7%+3oRJYyElP5g%A3 z$(r)Ql6^J0je%&uV6Go(qJhEF!hl<+n;vkJ;M7!?7v!kvU^F<78ytN7CO2rfMqbyx zy$2iA;!o|t#KF&^Pk~uHc2CpH%*;fhDCC{EEXyV2{pzyRtfsjkdt4s`27yatkLnT- z9SH!V3XXgKy)5PFPBBnK4MnuJLs6~z`}&6N2FLW&bhPn=k$a9bFZ9@*LJJB`FD$qQ za`E&XSDc@lU1u&MmvBo(Eq2Y<%gYuUHJvDfs96EYrnqahnhZ9~52SCsp&V($9BEF{ ziIO~3eq*@6JX(cd1>7?Iyc8`&-EweN)2!b}xv@ep{}M1ld|sJ+pX*g$kXU)%j%~vWmEmA65^^1@v7TbOsVaKeO_9sLbn05WNBBXD6I`(7Z z9mBQiMYxpn-t{+%qOd|2J;pzL8$@xx@kSTt`&-4LFY5)*(k>Q{885rMpCiT_A%=8% zJKvVNvO_C%rFSGP6$Ckw^O|g%5LO~{_H7AETI6eToRIufULYdB=O;wuJTLJgH~1Oj zO!6vAq||<$YUz_VSSx<}E!N7fD*3rOWjLpaGNvw&+C#DWjY+u19vaoV z#`cL`tU^lZQB}rn7JUc1%=M&<(5+rH(QC$zD~(hr&1p8*1TA#1on1W62j0>N*>umx zY&NeIJ9pCc_?SOidR~Y%+|Kh(Oh{FrgV*R`GV|LBX|vN^bA5Eb^vl>~$K z8WAbO=Sa{OCu|3l&hVoo^VFpLPU`DF+&zkPY*oN8@IWIxuyjr-tw<4&0IoK|)urAO zQ&L&D?nKi!Kez96^N)sKdFk}kQ-{5=DH*8Gq5qmib@j<(tH&NKyz=eHFKS!d+=r4L zU($Abv?8V&nlgibmFMN?1=W@b|6Ts)SKUpS@iQ_l=RT5us$bzScMKizw)v;Y7A delta 2066 zcma)-ZERCz6vuz(>AknxrCipIbz9lo+Oe%tC<9-p3hJE5$TUMyQSpO11|%4$QxZ&> zRVPN#7>RK=0v|w#0gNWZmy(e95+o9%f%%3a4g?VvMU5f~39EVTDuJ1x&xiAz^FROd z`rNeJe)n(t#sBD=(z!`a=H_pbSUk4#__93|&OwxnkS2%#MML1~l)Gh*-0rldpj|`P z!ZLGJv@~!J1b|sn;MNzms`2ifebQ*Js{m?&h`X{+5>n;9-6xF_bNl-wR=Yekl(iL5 zm^3v&Z4i7wF<38bRZY2BpNg%T3?5ftK~QDcC!726iB%;$y*{aE%Jr+ub^$D(VjCYk3hEA*JF5B)&cE<<*XW zTCT6bve6)_tPmAa@i5pbV}sEpkPa_t0DFY;caJ2Cp~Bq`7>TUPjMV8f+FD&|sLTj3 zf=1jA*6^OnFWA$9|JjquxO=~lNOo~PpI4*1b@?t6((y*HQ`>+?d|;F(6E!8}55~bR zHAAL{#Z5?r%&xCAeVpE*8Bc(nxVUCifog@UbEsC=>9bVJqk2{17Th;%ys4_ zQ~$khuX1?Ww0u6_-&pE*2fvhR@w-)fB@t|{8v3aGz+?qixDV`=n)+WsLqU}ZdhZa@ z>xc;H_;|466SPRWd-h6MR_o`{#+^@_INX1JnsY;k^8PDeSi&Z~+DO->LRw`)V|8Z> zb;(J(Dg9dg<+iFB>>lNPpe0~f?#Exrn1GZF&AM|Z<-K3a9o6>>)ZI3l8y(QTx*504 zydJpQfe&&^zn0yyphy~c$`_C@JB?9dvE2xX#T%mahmEpf`a@==2-B$+VX-Gu)Qa#7 z8t+9%og4eEuUafxq}qM;8>!5W6CtgC0C=*(GAD|VJ!@&-^Pbg9+_+4H&kNRJbE+sx zqB^dZ8b ze8vEMz7htw+32TI0@hJ3mU(iNNn%>ZnIt{F-fe z=n3xiFATpH?hj~tW9hJlD19gy%C!!Myu6XiILfhfmBiQ`!K94B|( zfP5sEurE};8@Xwg0=j{XQ($A|KNEm%wiIXtqA7?*+^c_-SV`NTr!J4ZwWj^q=7zNc zb+^Cjrhk-lvViUm6wrO4^7fkfb3a^k!`8}GEe+SD3;&M#tW3GiPZCkfQ@L?J$y&)d zKg(%Ttxe_nHpxkO`=tD=E^1#gqdDC=b7AwcTW&pb!rL6*4_$D=Z9gSpn>__!tULac P#KeQIkQ46Hr)1*ae&BH} diff --git a/MelonLoader/Utils.cs b/MelonLoader/Utils.cs index d8ce77b..4be0228 100644 --- a/MelonLoader/Utils.cs +++ b/MelonLoader/Utils.cs @@ -562,7 +562,7 @@ namespace PvZ_Fusion_Translator Chinese_cn, French, //Italian, - //German, + German, Spanish, @@ -593,6 +593,7 @@ namespace PvZ_Fusion_Translator { LanguageEnum.English, "English"}, { LanguageEnum.Chinese_cn, "简体中文"}, { LanguageEnum.French, "Français"}, + { LanguageEnum.German, "Deutsch"}, { LanguageEnum.Spanish, "Español"}, { LanguageEnum.Vietnamese, "Tiếng Việt"}, { LanguageEnum.Japanese, "日本語"},