Decompiled source of SeamstressRUS v1.0.2

HikynSeamstressRU.dll

Decompiled a day ago
using 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");
		}
	}
}