using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using TMPro; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("LevelRename")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("LevelRename")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("456a3c1b-eaed-4251-88ab-7174082cb87b")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace LevelRename; [BepInPlugin("com.alpakatitikaka.levelrename", "Level Rename", "1.0.0")] public class LevelRenamePatchMod : BaseUnityPlugin { [HarmonyPatch(typeof(LoadingUI), "LevelAnimationStart")] internal static class LevelNamePatch { private static void Postfix(LoadingUI __instance) { if (!((Object)(object)__instance?.levelNameText == (Object)null)) { string text = ((TMP_Text)__instance.levelNameText).text; if (!Names.TryGetValue(((TMP_Text)__instance.levelNameText).text, out var value) && !__ref.TryGetValue(((TMP_Text)__instance.levelNameText).text, out value)) { value = text; } ((TMP_Text)__instance.levelNameText).text = value; ((BaseUnityPlugin)Instance).Logger.LogInfo((object)("Level " + text + " renamed to " + value)); } } } private static readonly Dictionary Names = new Dictionary(); private static readonly Dictionary __ref = new Dictionary { { "Swiftbroom Academy", "АКАДЕМИЯ СВИФТБУМ" }, { "Headman Manor", "ПОМЕСТЬЕ ЛЫСОГО" }, { "McJannek Station", "СТАНЦИЯ МАНАЖЕК" }, { "Museum of Human Art", "МУЗЭЙ" }, { "Hoping Hospital", "ПСИХ. ЛЕЧЕБНИЦА" }, { "Winter Cabin", "ЗИМНЯЯ ХИЖИНА" }, { "Deeproot Garden", "ЗАБРОШЕННЫЙ САД" }, { "Service Station", "ШОПИК" }, { "Disposal Arena", "ОРЭНА" } }; private string allInitialNames = ""; public static LevelRenamePatchMod Instance { get; private set; } public static ConfigEntry LevelNames { get; private set; } private void Awake() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) Instance = this; new Harmony("com.alpakatitikaka.levelrename").PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Level Rename Mod loaded!"); } private void Update() { if (Utility.IsNullOrWhiteSpace(allInitialNames)) { loadLevels(); if (!Utility.IsNullOrWhiteSpace(allInitialNames)) { ((BaseUnityPlugin)this).Logger.LogInfo((object)"Levels loaded!"); setupConfig(); setNames(); } } } private void setupConfig() { LevelNames = ((BaseUnityPlugin)this).Config.Bind("General", "LevelNames", "", "Вводите новые названия уровней через запятую: имя1-имя2,имя3-имя4\nСуществующие уровни: " + allInitialNames); ((BaseUnityPlugin)this).Config.SettingChanged += onChanged; } private void onChanged(object sender, EventArgs e) { setNames(); } private string[] cleanLevelName(string dirt) { return dirt.Trim().Split(new char[1] { '-' }); } private void copyDictionaryToDictionary(Dictionary dict1, Dictionary dict2) { foreach (KeyValuePair item in dict1) { dict2.Add(item.Key, item.Value); } } private void setNames() { if (LevelNames == null) { return; } string value = LevelNames.Value; if (Utility.IsNullOrWhiteSpace(value)) { copyDictionaryToDictionary(__ref, Names); return; } Names.Clear(); string[] array = value.Split(new char[1] { ',' }); foreach (string dirt in array) { string[] array2 = cleanLevelName(dirt); if (array2.Length != 2) { ((BaseUnityPlugin)this).Logger.LogError((object)"Bad level name format"); continue; } string text = array2[0]; string text2 = array2[1]; Names.Add(text, text2); ((BaseUnityPlugin)this).Logger.LogInfo((object)(text2 + " binded to level " + text)); } } private void loadLevels() { List levels = RunManager.instance.levels; if (levels != null) { allInitialNames = string.Join(", ", levels.Select((Level level) => level.NarrativeName).Append("Service Station").Append("Disposal Arena") .Distinct()).TrimEnd(',', ' '); } } }