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");
}
}
}