Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of SeamstressRUS v1.0.2
HikynSeamstressRU.dll
Decompiled 2 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using R2API; using RoR2.Skills; using SeamstressMod.Modules; using SeamstressMod.Seamstress.Content; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("HikynSeamstressRU")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+fe64203a93ce4b72c39216a9607746b1512e2555")] [assembly: AssemblyProduct("HikynSeamstressRU")] [assembly: AssemblyTitle("HikynSeamstressRU")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace HikynSeamstressRU { [BepInPlugin("Hikyn.SeamstressRUS", "SeamstressRUS", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Main : BaseUnityPlugin { [HarmonyPatch(typeof(SkillCatalog), "Init")] private static class Patch_SkillCatalog_Init { private static void Postfix() { Log.LogInfo((object)"SkillCatalog.Init finished → translating Seamstress keywords..."); int num = 0; foreach (SkillDef allSkillDef in SkillCatalog.allSkillDefs) { if ((Object)(object)allSkillDef == (Object)null || allSkillDef.keywordTokens == null || allSkillDef.keywordTokens.Length == 0) { continue; } string text = allSkillDef.skillName ?? allSkillDef.name ?? "???"; bool flag = false; for (int i = 0; i < allSkillDef.keywordTokens.Length; i++) { string text2 = allSkillDef.keywordTokens[i]; if (!string.IsNullOrWhiteSpace(text2)) { string text3 = TranslateKeyword(text2); if (text3 != text2) { allSkillDef.keywordTokens[i] = text3; flag = true; Log.LogInfo((object)(" → Translated to: \"" + text3 + "\"")); } } } if (flag) { num++; Log.LogInfo((object)("Modified keywords in: " + text)); } } Log.LogInfo((object)$"Late keyword translation finished. Modified {num} SkillDef(s)."); } private static string TranslateKeyword(string original) { if (string.IsNullOrWhiteSpace(original)) { return original; } string text = original.Trim(); if (text.Contains("Agile") || text.Contains("Ловкий")) { return "<style=cKeywordName>Ловкий</style><style=cSub>Навык можно использовать во время бега.</style>"; } if (text.Contains("Crush") || text.Contains("Дробление")) { return "<style=cKeywordName>Дробление</style><style=cSub>Наносит бонусный урон в зависимости от скорости цели и её <style=cIsHealth>максимального здоровья</style>.</style>"; } if (text.Contains("Plane Bound") || text.Contains("Привязка к миру")) { return "<style=cKeywordName>Привязка к миру</style><style=cSub>Получает <style=cIsDamage>0,05 базового урона</style> за каждую <style=cIsHealth>1 отсутствующего здоровья</style>. Лечится на <style=cIsHealing>10%</style> от своего <style=cIsHealth>отсутствующего здоровья</style> при ударе.</style>"; } if (text.Contains("Lost and Found") || text.Contains("Потеряна и Найдена")) { return "<style=cKeywordName>Потеряна и Найдена</style><style=cSub>Получи <color=#9B3737>Иголку</color> когда поднимаешь ножницы.</style>"; } if (text.Contains("Ruthless") || text.Contains("Безжалостность")) { return "<style=cKeywordName>Безжалостность</style><style=cIsUtility>Оглушение</style>. Когда у персонажа есть <color=#9B3737>Симбиотическая</color> ножница, делает дополнительный удар."; } if (text.Contains("Insatiable") || text.Contains("Ненасытность")) { return "<style=cKeywordName>Ненасытность</style>Атаки наносят <style=cIsHealth>кровотечение</style> и дают <color=#9B3737>Иголки</color>. <style=cIsHealing>Лечение</style> преобразуется в <style=cIsHealing>Барьер</style>."; } if (text.Contains("Needles") || text.Contains("Иголки")) { return "<style=cKeywordName>Иголки</style>Получай <color=#9B3737>Иголки</color> подбирая свои <color=#9B3737>Симбиотические</color> ножницы или попадая по врагам во время <color=#9B3737>Ненасытности</color>."; } if (text.Contains("Symbiotic") || text.Contains("Симбиозис")) { return "<style=cKeywordName>Симбиозис</style>Получает <style=cIsDamage>скорость атаки</style> и <style=cIsUtility>скорость передвижения</style> за каждую потерянную ножницу. Лишние ножницы превращаются в недостающие."; } return original; } } public const string PluginGUID = "Hikyn.SeamstressRUS"; public const string PluginAuthor = "Hikyn"; public const string PluginName = "SeamstressRUS"; public const string PluginVersion = "1.0.0"; public static ManualLogSource Log { get; private set; } private void Awake() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; Log.LogInfo((object)"SeamstressRUS plugin loaded"); Harmony val = new Harmony("Hikyn.SeamstressRUS"); val.PatchAll(); AddRussianSurvivorTokens(); } private void AddRussianSurvivorTokens() { string text = "KENKO_SEAMSTRESS_"; string text2 = "Швея это выжившая, использующая свое здоровья для нанесения урона. Она получает меньше базового урона за уровень, поэтому собирайте вещи на здоровья чтобы воспользоваться ее преобразованием здоровья в урон. <color=#CCD3E0>" + Environment.NewLine + Environment.NewLine + "< ! > Иголки это отличный источник дополнительного урона. Используйте их мудро для урона и подвижности." + Environment.NewLine + Environment.NewLine + "< ! > Используйте Срез с как можно большим количеством иголок. Срез может быстро наложить кровотечение во время Ненасытности." + Environment.NewLine + Environment.NewLine + "< ! > Лечитесь как можно больше во время Ненасытности. Барьер от неё может быть разницей между жизнью и смертью." + Environment.NewLine + Environment.NewLine + "< ! > Брутализация это отличный способ повысить ваш урон, но следите за здоровьем." + Environment.NewLine + Environment.NewLine + "< ! > Используйте и возвращайте ваши Симбиотические ножницы чтоб получать иголки вне Ненасытности." + Environment.NewLine + Environment.NewLine; string text3 = "Бледная кожа и усталость. Признаки болезни, распространяющейся среди детей высшего двора. Как же они несчастны." + Environment.NewLine + Environment.NewLine + "Болезненный младенец, хрупкая и слабая, плачет, как и её родители. Трагическая участь для этих стареющих аристократов, ведь она — их единственная наследница. С шатким будущим её <style=cIsHealth>сердце</style> всё ещё бьётся." + Environment.NewLine + Environment.NewLine + "Болезнь излечима с помощью искусственного сердца, но операцию нельзя провести на тех, кто ещё не достиг взрослого возраста. Лишь немногим удаётся попасть в этот временной промежуток." + Environment.NewLine + Environment.NewLine + "Прикованная к постели подросток, её здоровье быстро ухудшается. Она держится изо всех сил. Ей нужно прожить ещё одну неделю. Цепляясь за жизнь, её <color=#292525>сердце</color> всё ещё бьётся." + Environment.NewLine + Environment.NewLine + "Хотя искусственное сердце лечит болезнь, повседневная жизнь остаётся прежней. Частое обслуживание и риск поломки делают дальние путешествия смертельно опасными. Многие выбирают более спокойные увлечения вроде выпечки и шитья, но не все довольны своей жизнью." + Environment.NewLine + Environment.NewLine + "Беспокойная швея, с искусственной жизненной силой, ненавидит стены, в которых живёт. Она не хочет иметь ничего общего со своей аристократией. Она связывает её с однообразной жизнью. Когда наступает тьма, она тайно садится на гражданский корабль. Наполненная адреналином, её <style=cIsUtility>сердце</style> всё ещё бьётся." + Environment.NewLine + Environment.NewLine + "Многие, кто убегает, сталкиваются с суровой реальностью. Галактика за пределами высшего двора — это не та сказочная страна, что описана в книгах. Скорее это трагическая сказка." + Environment.NewLine + Environment.NewLine + "Испорченное существо, живущее на время, взятое в долг. Как всё так пошло не так? Корабль, который она выбрала, был поглощён разломом, созданным импами, которые желали той же свободы, что и она. Вдруг волна крови смешалась с багровым небом, и каждый человек и имп был разрезан. Когда её зрение начало тускнеть, одна фигура прыгнула прочь, а другая тихо подошла. Шёпот, цель, новая жизнь. Её <color=#9B3737>сердце</color> всё ещё бьётся."; string text4 = "..и вот она ушла, жаждя сшить больше, чем просто ткань."; string text5 = "..и вот она исчезла, оставив швы не зашитыми.."; LanguageAPI.Add(text + "NAME", "Швея", "RU"); LanguageAPI.Add(text + "DESCRIPTION", text2, "RU"); LanguageAPI.Add(text + "SUBTITLE", "Израненная дева", "RU"); LanguageAPI.Add(text + "LORE", text3, "RU"); LanguageAPI.Add(text + "OUTRO_FLAVOR", text4, "RU"); LanguageAPI.Add(text + "OUTRO_FAILURE", text5, "RU"); LanguageAPI.Add(text + "MASTERY_SKIN_NAME", "Альтернативный", "RU"); LanguageAPI.Add(text + "MASTERY_SKIN_NAME2", "Альтернативный2", "RU"); LanguageAPI.Add(text + "MASTERY_SKIN_NAME3", "Ворон", "RU"); LanguageAPI.Add(text + "MASTERY_SKIN_NAME4", "Ворон Альтернативный", "RU"); LanguageAPI.Add(text + "PASSIVE_NAME", "Оно Жаждет", "RU"); LanguageAPI.Add(text + "PASSIVE_DESCRIPTION", "Получай <style=cIsDamage>базовый урон</style> и <style=cIsHealing>лечение</style> в зависимости от <style=cIsHealth>отсутствующего здоровья</style>.", "RU"); LanguageAPI.Add(text + "NEEDLE_NAME", "Сердце, тронутое импом", "RU"); LanguageAPI.Add(text + "NEEDLE_DESCRIPTION", "Расходуй <color=#9B3737>Иголки</color> прыгая посреди прыжка, позволяя <color=#9B3737>Телепортироваться</color> и выпустить снаряд наносящий " + $"<style=cIsDamage>{100f * SeamstressConfig.needleDamageCoefficient.Value}% урона</style>.", "RU"); LanguageAPI.Add(text + "PRIMARY_TRIM_NAME", "Подрезать", "RU"); LanguageAPI.Add(text + "PRIMARY_TRIM_DESCRIPTION", "<color=#9B3737>Безжалостность</color>. Порежь перед собой на <style=cIsDamage>" + $"{100f * SeamstressConfig.trimDamageCoefficient.Value}% + {100f * SeamstressConfig.scissorSlashDamageCoefficient.Value}% урона</style>." + $" Каждый 3ий удар наносит <style=cIsDamage>{100f * SeamstressConfig.trimThirdDamageCoefficient.Value}% + " + $"{100f * SeamstressConfig.scissorSlashDamageCoefficient.Value}% урона</style>.", "RU"); LanguageAPI.Add(text + "PRIMARY_FLURRY_NAME", "Шквал", "RU"); LanguageAPI.Add(text + "PRIMARY_FLURRY_DESCRIPTION", "<color=#9B3737>Безжалостность</color>. Порежь перед собой на <style=cIsDamage>" + $"{100f * SeamstressConfig.flurryDamageCoefficient.Value}% + {100f * SeamstressConfig.scissorSlashDamageCoefficient.Value}% урона</style>.", "RU"); LanguageAPI.Add(text + "SECONDARY_CLIP_NAME", "Срез", "RU"); LanguageAPI.Add(text + "SECONDARY_CLIP_DESCRIPTION", $"Срез наносит <style=cIsDamage>2x{100f * SeamstressConfig.clipDamageCoefficient.Value}% урона</style>. " + "Режет дополнительно за каждую <color=#9B3737>Иглу</color>.", "RU"); LanguageAPI.Add(text + "SECONDARY_PLANMAN_NAME", "Контроль Измерений", "RU"); LanguageAPI.Add(text + "SECONDARY_PLANMAN_DESCRIPTION", "<color=#9B3737>Дробление</color>. Удерживай чтоб хватать врагов. Удар врагом наносит " + $"<style=cIsDamage>{100f * SeamstressConfig.telekinesisDamageCoefficient.Value} - {100f * SeamstressConfig.telekinesisDamageCoefficient.Value * 5f}% урона</style> " + "в области, зависящей от количества <color=#9B3737>Иголок</color>. " + $"<style=cIsUtility>{SeamstressConfig.telekinesisCooldown.Value} секунд перезарядка</style> на той же цели.", "RU"); LanguageAPI.Add(text + "UTILITY_HEARTDASH_NAME", "Брутализация", "RU"); LanguageAPI.Add(text + "UTILITY_HEARTDASH_DESCRIPTION", "Рванись вперёд на " + string.Format("<style=cIsDamage>{0}% урона</style> и становясь {1}. Используй снова чтобы взорваться, преобразуя <style=cIsHealing>барьер</style> в ", 100f * SeamstressConfig.blinkDamageCoefficient.Value, "<color=#9B3737>Ненасытной</color>") + $"<style=cIsHealth>здоровье</style>, нанося <style=cIsDamage>{100f * SeamstressConfig.explodeMinDamageCoefficient.Value}% - {100f * SeamstressConfig.explodeMaxDamageCoefficient.Value}% урона</style> вокруг тебя на основе преобразованного количества.", "RU"); LanguageAPI.Add(text + "UTILITY_PARRY_NAME", "Возмездие", "RU"); LanguageAPI.Add(text + "UTILITY_PARRY_DESCRIPTION", $"Подготовь <style=cIsUtility>парирование</style>. Если успешно, то сделай рывок вперед на <style=cIsDamage>{100f * SeamstressConfig.parryDamageCoefficient.Value}% урона</style> и получая " + "<color=#9B3737>Ненасытность</color>.", "RU"); LanguageAPI.Add(text + "SPECIAL_FIRE_NAME", "Пронзить", "RU"); LanguageAPI.Add(text + "SPECIAL_FIRE_DESCRIPTION", "<style=cIsHealth>15% HP</style>. Выстрели <color=#9B3737>Симбиотической</color>" + $" ножницей на <style=cIsDamage>{100f * SeamstressConfig.scissorDamageCoefficient.Value}% урона</style>. " + "Подбери <color=#9B3737>Симбиотическую</color>" + $" ножницу чтобы сделать разрез на <style=cIsDamage>{100f * SeamstressConfig.scissorPickupDamageCoefficient.Value}% урона</style>.", "RU"); LanguageAPI.Add(text + "SPECIAL_SCEPTER_NAME", "Rampage", "RU"); LanguageAPI.Add(text + "SPECIAL_SCEPTER_DESCRIPTION", "<style=cIsHealth>15% HP</style>. Выстрели <color=#9B3737>Симбиотической</color>" + $" ножницей на <style=cIsDamage>{100f * SeamstressConfig.scissorDamageCoefficient.Value}% урона</style>. " + "Подбери <color=#9B3737>Симбиотическую</color>" + $" ножницу чтобы сделать разрез на <style=cIsDamage>{100f * SeamstressConfig.scissorPickupDamageCoefficient.Value}% урона</style>." + Tokens.ScepterDescription("Ваше <color=#9B3737>Симбиотическое</color> оружие имеет только <style=cIsUtility>1.5 секунды на поднятие</style>."), "RU"); LanguageAPI.Add(Tokens.GetAchievementNameToken("KENKO_SEAMSTRESS_masteryAchievement"), "Швея: Мастерство", "RU"); LanguageAPI.Add(Tokens.GetAchievementDescriptionToken("KENKO_SEAMSTRESS_masteryAchievement"), "Играя за Швею, пройдите игру или уничтожьтесь на уровне сложности «Сезон Дождей».", "RU"); LanguageAPI.Add(Tokens.GetAchievementNameToken("KENKO_SEAMSTRESS_typhoonMasteryAchievement"), "Ворон: Разблокировано", "RU"); LanguageAPI.Add(Tokens.GetAchievementDescriptionToken("KENKO_SEAMSTRESS_typhoonMasteryAchievement"), "Играя за Швею, пройдите игру или уничтожьтесь на уровне сложности «Затмение» или выше.", "RU"); } } }