using HarmonyLib; using Il2Cpp; using Il2CppGameLevel; using Il2CppGameLevel.EventNodes; using PvZ_Fusion_Translator.AssetStore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Encodings.Web; using System.Text.Json; using System.Threading.Tasks; using Unity.VisualScripting.FullSerializer; using UnityEngine; using UnityEngine.UIElements; namespace PvZ_Fusion_Translator.Patches.Modes.Super_Editor { [HarmonyPatch(typeof(CustomButton_enterGame))] public static class CustomButton_enterGame_Patch { [HarmonyPatch(nameof(CustomButton_enterGame.LoadOnlineLevelAsync))] [HarmonyPostfix] public static void LoadOnlineLevelAsync(CustomButton_enterGame __instance) { string dumpPath = Path.Combine(FileLoader.GetAssetDir(FileLoader.AssetType.Dumps), "custom_level_data.json"); Dictionary dumpData = new Dictionary(); if (!File.Exists(dumpPath)) { File.WriteAllText(dumpPath, System.Text.Json.JsonSerializer.Serialize(dumpData, new JsonSerializerOptions { WriteIndented = true, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping })); } dumpData = JsonSerializer.Deserialize>(File.ReadAllText(dumpPath)); string dumpStringsPath = Path.Combine(FileLoader.GetAssetDir(FileLoader.AssetType.Dumps), "custom_level_strings.json"); Dictionary dumpStringsData = new Dictionary(); if (!File.Exists(dumpStringsPath)) { File.WriteAllText(dumpStringsPath, System.Text.Json.JsonSerializer.Serialize(dumpStringsData, new JsonSerializerOptions { WriteIndented = true, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping })); } dumpStringsData = JsonSerializer.Deserialize>(File.ReadAllText(dumpStringsPath)); var level = __instance; if(level.onlineLevelInfo != null) { string levelId = level.onlineLevelInfo.levelId; if(levelId != null) { SerializedLevelData serializedLevel = level.serializedLevel; if(CustomLevelMenu_Patch.translatedLevelData.ContainsKey(levelId)) { TranslatedLevelData levelData = CustomLevelMenu_Patch.translatedLevelData[levelId]; level.levelName.text = levelData.name; serializedLevel.name = levelData.name; serializedLevel.boardConfig.startTip = levelData.startTip; } else { TranslatedLevelData dumpedLevelData = new TranslatedLevelData(level.onlineLevelInfo.levelName, serializedLevel.boardConfig.startTip); if (dumpData.ContainsKey(levelId)) { dumpData[levelId] = dumpedLevelData; } else { dumpData.Add(levelId, dumpedLevelData); } } /*level.levelData.SerializedLevelData foreach()*/ } } else { level.levelName.text = StringStore.TranslateText(level.levelName.text); } File.WriteAllText(dumpPath, System.Text.Json.JsonSerializer.Serialize(dumpData, new JsonSerializerOptions { WriteIndented = true, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping })); File.WriteAllText(dumpStringsPath, System.Text.Json.JsonSerializer.Serialize(dumpStringsData, new JsonSerializerOptions { WriteIndented = true, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping })); } } }