#if false using HarmonyLib; using PvZ_Fusion_Translator.AssetStore; 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) { var (almanacDir, currentLanguage) = ModFeatures.IsMultiLanguage ? (GetAssetDir(AssetType.Almanac, Utils.Language), Utils.Language.ToString()) : (GetAssetDir(AssetType.Almanac), "English"); var path = Path.Combine(almanacDir, "LawnStringsTranslate.json"); var moddedPath = Path.Combine(almanacDir, "ModdedPlantsTranslate.json"); if (!File.Exists(path)) { Log.LogError($"LawnStringsTranslate.json file not found at path: {path}"); return; } var json = File.ReadAllText(path); var hasAlmanacFont = false; TMP_FontAsset almanacFontAsset = null; if (FontStore.fontAssetDictSecondary.ContainsKey(currentLanguage + "_Almanac") || FontStore.fontAssetDictSecondary.ContainsKey(currentLanguage)) { almanacFontAsset = FontStore.LoadTMPFontAlmanac(currentLanguage); hasAlmanacFont = true; } var fontAsset = ModFeatures.IsMultiLanguage ? FontStore.LoadTMPFont(Utils.Language.ToString()) : FontStore.LoadTMPFont(); 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); foreach (var plantInfo in plantData.plants) { if (plantInfo.seedType != __instance.theSeedType || string.IsNullOrEmpty(plantInfo.name)) continue; component.autoSizeTextContainer = false; component.text = plantInfo.info + "\n\n" + plantInfo.introduce; component.overflowMode = TextOverflowModes.Page; // fix dimensions for cost text component.rectTransform.offsetMax = new(component.rectTransform.offsetMax.x, 27.3839f); component.rectTransform.offsetMin = new(component.rectTransform.offsetMin.x, -29.3079f); component.rectTransform.sizeDelta = new(component.rectTransform.sizeDelta.x, 50.917f); component.transform.localPosition = new( component.transform.localPosition.x, component.transform.localPosition.y + 0.15f, component.transform.localPosition.z ); component2.text = plantInfo.name; component2.autoSizeTextContainer = true; component3.text = Utils.RemoveColorTags(plantInfo.name ?? string.Empty); component3.autoSizeTextContainer = true; 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 (!File.Exists(moddedPath)) return; var moddedJson = File.ReadAllText(moddedPath); AlmanacPlantBank.PlantData moddedPlantData = JsonUtility.FromJson(moddedJson); foreach (AlmanacPlantBank.PlantInfo plantInfo in moddedPlantData.plants) { if (plantInfo.seedType != __instance.theSeedType || string.IsNullOrEmpty(plantInfo.name)) continue; component.autoSizeTextContainer = false; component.text = plantInfo.info + "\n\n" + plantInfo.introduce; component.overflowMode = TextOverflowModes.Page; // fix dimensions for cost text component.rectTransform.offsetMax = new(component.rectTransform.offsetMax.x, 27.3839f); component.rectTransform.offsetMin = new(component.rectTransform.offsetMin.x, -29.3079f); component.rectTransform.sizeDelta = new(component.rectTransform.sizeDelta.x, 50.917f); component.transform.localPosition = new( component.transform.localPosition.x, component.transform.localPosition.y + 0.15f, component.transform.localPosition.z ); component2.text = plantInfo.name; component2.autoSizeTextContainer = true; component3.text = Utils.RemoveColorTags(plantInfo.name ?? string.Empty); component3.autoSizeTextContainer = true; 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; } } [HarmonyPatch(nameof(AlmanacPlantBank.OnMouseDown)), HarmonyPrefix] private static bool OnMouseDown(AlmanacPlantBank __instance) { TextMeshPro component = __instance.introduce.GetComponent(); if (component == null) return true; component.pageToDisplay = component.pageToDisplay > component.m_pageNumber ? 1 : component.pageToDisplay + 1; return false; } [HarmonyPatch(nameof(AlmanacPlantBank.PVPInit)), HarmonyPostfix] // ReSharper disable once InconsistentNaming 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) banTransform.GetComponent().text = StringStore.TranslateText(banTransform.GetComponent().text); } [HarmonyPatch(nameof(AlmanacPlantBank.Start)), HarmonyPostfix] public static void Post_Start(AlmanacPlantBank __instance) { GameObject skinTextObj = __instance.skinButton.transform.GetChild(0).gameObject; var skinShadowTextObj = UnityEngine.Object.Instantiate(skinTextObj, parent: __instance.skinButton.transform); var skinShadowText = skinShadowTextObj.GetComponent(); skinShadowText.text = StringStore.TranslateText("换肤_S"); skinShadowText.sortingOrder -= 2; skinShadowTextObj.transform.Translate(new(0.015f, -0.015f, 0)); skinTextObj.transform.Translate(new(-0.022f, 0)); skinShadowTextObj.transform.Translate(new(-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)); } } #endif