almanac coding
This commit is contained in:
parent
44f1d5aac3
commit
4cad61403a
15 changed files with 552 additions and 360 deletions
|
|
@ -1,6 +1,7 @@
|
|||
using HarmonyLib;
|
||||
using Il2CppTMPro;
|
||||
using PvZ_Fusion_Translator.AssetStore;
|
||||
using UnityEngine;
|
||||
|
||||
namespace PvZ_Fusion_Translator.Patches.BaseTextObjects
|
||||
{
|
||||
|
|
|
|||
71
MelonLoader/Patches/GameObjects/AlmanacPlantMenu_Patch.cs
Normal file
71
MelonLoader/Patches/GameObjects/AlmanacPlantMenu_Patch.cs
Normal file
|
|
@ -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<TextMeshProUGUI>(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<AlmanacPlantBank.PlantData>(json);
|
||||
|
||||
Il2CppSystem.Collections.Generic.List<PlantType> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
66
MelonLoader/Patches/GameObjects/AlmanacPlantWindow_Patch.cs
Normal file
66
MelonLoader/Patches/GameObjects/AlmanacPlantWindow_Patch.cs
Normal file
|
|
@ -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<AlmanacPlantBank.PlantData>(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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
34
MelonLoader/Patches/GameObjects/AlmanacZombieMenu_Patch.cs
Normal file
34
MelonLoader/Patches/GameObjects/AlmanacZombieMenu_Patch.cs
Normal file
|
|
@ -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<TextMeshProUGUI>(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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
68
MelonLoader/Patches/GameObjects/AlmanacZombieWindow_Patch.cs
Normal file
68
MelonLoader/Patches/GameObjects/AlmanacZombieWindow_Patch.cs
Normal file
|
|
@ -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<ZombieAlmanacData>(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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
52
MelonLoader/Patches/GameObjects/Almanac_Patch.cs
Normal file
52
MelonLoader/Patches/GameObjects/Almanac_Patch.cs
Normal file
|
|
@ -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<TextMeshProUGUI>())
|
||||
{
|
||||
if(text.text == "关闭")
|
||||
{
|
||||
text.text = StringStore.TranslateText("合上");
|
||||
}
|
||||
else
|
||||
{
|
||||
text.text = StringStore.TranslateText(text.text);
|
||||
}
|
||||
text.font = font;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Transform> children = levels.GetComponentsInChildren<Transform>(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<TextMeshProUGUI>())
|
||||
{
|
||||
txt.text = StringStore.TranslateText(txt.text);
|
||||
}
|
||||
}
|
||||
StringStore.TranslateTextTransform(__instance.transform.Find("Goback"));
|
||||
StringStore.TranslateTextTransform(__instance.transform.Find("Switich"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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>();
|
||||
TextMeshProUGUI textShadow = __instance.transform.GetChild(1).GetComponent<TextMeshProUGUI>();
|
||||
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<TextMeshProUGUI>())
|
||||
{
|
||||
// Convert and translate legacy Text components
|
||||
Text[] textComponents = __instance.GetComponentsInChildren<Text>(true);
|
||||
TextMeshProUGUI[] textMeshComponents = __instance.GetComponentsInChildren<TextMeshProUGUI>(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<TextMeshProUGUI>())
|
||||
{
|
||||
TMP_FontAsset fontAsset = FontStore.LoadTMPFont(Utils.Language.ToString());
|
||||
|
||||
TextMeshProUGUI text = __instance.transform.GetChild(0).GetComponent<TextMeshProUGUI>();
|
||||
TextMeshProUGUI[] extraTexts = __instance.transform.GetChild(1).GetComponentsInChildren<TextMeshProUGUI>();
|
||||
|
||||
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>();
|
||||
TextMeshProUGUI textShadow = __instance.transform.GetChild(1).GetComponent<TextMeshProUGUI>();
|
||||
|
||||
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) { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<TextMeshProUGUI>();
|
||||
File.WriteAllText(Path.Combine(FileLoader.GetAssetDir(FileLoader.AssetType.Dumps), "changelog.txt"), contentText.text);
|
||||
|
|
|
|||
|
|
@ -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>();
|
||||
TextMeshPro component2 = __instance.zombieName.GetComponent<TextMeshPro>();
|
||||
TextMeshPro component3 = __instance.zombieName.transform.GetChild(0).GetComponent<TextMeshPro>();
|
||||
|
||||
AlmanacMgrZombie.ZombieAlmanacData zombieData = JsonUtility.FromJson<AlmanacMgrZombie.ZombieAlmanacData>(json);
|
||||
ZombieAlmanacData zombieData = JsonUtility.FromJson<ZombieAlmanacData>(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<AlmanacMgrZombie.ZombieAlmanacData>(moddedJson);
|
||||
ZombieAlmanacData moddedZombieData = JsonUtility.FromJson<ZombieAlmanacData>(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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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>();
|
||||
TextMeshPro component2 = __instance.plantName.GetComponent<TextMeshPro>();
|
||||
TextMeshPro component3 = __instance.plantName.transform.GetChild(0).GetComponent<TextMeshPro>();
|
||||
TextMeshPro component4 = __instance.cost.GetComponent<TextMeshPro>();
|
||||
TextMeshPro component = __instance.introduce.GetComponent<TextMeshPro>();
|
||||
TextMeshPro component2 = __instance.plantName.GetComponent<TextMeshPro>();
|
||||
TextMeshPro component3 = __instance.plantName.transform.GetChild(0).GetComponent<TextMeshPro>();
|
||||
TextMeshPro component4 = __instance.cost.GetComponent<TextMeshPro>();
|
||||
|
||||
AlmanacPlantBank.PlantData plantData = JsonUtility.FromJson<AlmanacPlantBank.PlantData>(json);
|
||||
AlmanacPlantBank.PlantData plantData = JsonUtility.FromJson<AlmanacPlantBank.PlantData>(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<AlmanacPlantBank.PlantData>(moddedJson);
|
||||
AlmanacPlantBank.PlantData moddedPlantData = JsonUtility.FromJson<AlmanacPlantBank.PlantData>(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<TextMeshPro>();
|
||||
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<TextMeshPro>();
|
||||
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<TextMeshPro>();
|
||||
if (component != null)
|
||||
{
|
||||
component.autoSizeTextContainer = false;
|
||||
}
|
||||
[HarmonyPatch(nameof(AlmanacPlantBank.PVPInit))]
|
||||
[HarmonyPostfix]
|
||||
private static void PVPInit(Il2Cpp.AlmanacPlantBank __instance)
|
||||
{
|
||||
TextMeshPro component = __instance.introduce.GetComponent<TextMeshPro>();
|
||||
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<TextMeshPro>();
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
28
MelonLoader/Patches/Managers/GameAPP_Patch.cs
Normal file
28
MelonLoader/Patches/Managers/GameAPP_Patch.cs
Normal file
|
|
@ -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<TMP_InputField>(out TMP_InputField field))
|
||||
{
|
||||
__instance.MusicUpdate();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
<LangVersion>latest</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Configurations>Debug;DebugEnglish;ReleaseMulti;ReleaseEnglish;DebugTesting;ReleaseOther;DebugObfuscate;ReleaseObfuscate</Configurations>
|
||||
<GamePath>C:\Users\rainb\Desktop\PC_PVZ-Fusion_3.1.1</GamePath>
|
||||
<GamePath>C:\Users\rainb\Desktop\PC_PVZ-Fusion_3.2</GamePath>
|
||||
<Platforms>AnyCPU;ARM64;x64</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
@ -401,6 +401,12 @@
|
|||
<Compile Include="ModFeatures.cs" />
|
||||
<Compile Include="AssetStore\AudioStore.cs" />
|
||||
<Compile Include="Patches\GameObjects\AbyssBuffMenu_Patch.cs" />
|
||||
<Compile Include="Patches\GameObjects\AlmanacZombieWindow_Patch.cs" />
|
||||
<Compile Include="Patches\GameObjects\AlmanacZombieMenu_Patch.cs" />
|
||||
<Compile Include="Patches\GameObjects\AlmanacPlantMenu_Patch.cs" />
|
||||
<Compile Include="Patches\GameObjects\AlmanacPlantWindow_Patch.cs" />
|
||||
<Compile Include="Patches\GameObjects\Almanac_Patch.cs" />
|
||||
<Compile Include="Patches\Managers\GameAPP_Patch.cs" />
|
||||
<Compile Include="Patches\Managers\OppositeBuffManager_Patch.cs" />
|
||||
<Compile Include="Patches\GameObjects\ButtonObjects\ExploreMakeSceneButton_Patch.cs" />
|
||||
<Compile Include="Patches\GameObjects\ButtonObjects\ExploreMakeZombieButton_Patch.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 <color=#FF0000>
|
||||
string withoutOpenTags = Regex.Replace(text, @"<color=[^>]+>", string.Empty, RegexOptions.IgnoreCase);
|
||||
// Remove closing color tags like </color>
|
||||
string withoutCloseTags = Regex.Replace(withoutOpenTags, @"</color>", 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 <color=#FF0000>
|
||||
string withoutOpenTags = Regex.Replace(text, @"<size=[^>]+>", string.Empty, RegexOptions.IgnoreCase);
|
||||
// Remove closing color tags like </color>
|
||||
string withoutCloseTags = Regex.Replace(withoutOpenTags, @"</size>", 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<AlmanacMgrZombie.ZombieAlmanacData>(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<ZombieAlmanacData>(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<int, KeyValuePair<int, string>> plantIndices = new Dictionary<int, KeyValuePair<int, string>>();
|
||||
public static Dictionary<int, KeyValuePair<int, string>> plantIndices = new Dictionary<int, KeyValuePair<int, string>>();
|
||||
|
||||
public static void RegisterPlantIndices()
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue