diff --git a/Tools/_CP14/LocalizationHelper/base_parser.py b/Tools/_CP14/LocalizationHelper/base_parser.py index f44b5c4fec..f9b2d7ddb8 100644 --- a/Tools/_CP14/LocalizationHelper/base_parser.py +++ b/Tools/_CP14/LocalizationHelper/base_parser.py @@ -10,7 +10,7 @@ class BaseParser: def __init__(self, paths: tuple): self.path, self.errors_path = paths - def get_files_paths(self) -> list: + def _get_files_paths(self) -> list: """ The method gets the path to the yml folder of localization prototypes/files, e.g. "ftl", then with the help of os library goes through each file in @@ -31,7 +31,7 @@ class BaseParser: json.dump(prototypes, json_file, indent=4) @staticmethod - def check_file_extension(path: str, extension: str) -> bool: + def _check_file_extension(path: str, extension: str) -> bool: if path.endswith(extension): return True return False diff --git a/Tools/_CP14/LocalizationHelper/entities.ftl b/Tools/_CP14/LocalizationHelper/entities.ftl new file mode 100644 index 0000000000..0c0c422684 --- /dev/null +++ b/Tools/_CP14/LocalizationHelper/entities.ftl @@ -0,0 +1,1406 @@ +ent-CP14Fire = огонь + .desc = Это огонь! + .suffix = cp14 + +ent-CP14BaseKeyRing = кольцо для ключей + .desc = Позволяет комфортно носить большое количество ключей в одном месте. + .suffix = Пустое + +ent-CP14KeyRingInnkeeper = { ent-CP14BaseKeyRing } + .desc = { ent-CP14BaseKeyRing.desc } + .suffix = Трактирщик + +ent-CP14BaseKey = ключ + .desc = Небольшой замысловатый кусочек железа, открывающий определенные замки. Не отдавайте кому попало! + +ent-CP14BaseLockpick = отмычка + .desc = Воровской инструмент, позволяющий с достаточными навыками и сноровкой открыть любой замок. + +ent-CP14KeyTavern = капитанский ключ + .desc = { ent-CP14BaseKey.desc } + +ent-CP14BaseLock = стальной замок + .desc = Он запирает вещи. И вам, конечно же, нужен ключ, чтобы открыть их. + +ent-CP14LockTavern = капитанский замок + .desc = { ent-CP14BaseLock.desc } + +ent-CP14BaseMagicRune = магическая руна + .desc = проявления магической энергии в физическом плане. + +ent-CP14BaseMagicImpact = магическая вспышка + .desc = проявления магической энергии в физическом плане. + +ent-CP14RuneCureWounds = { ent-CP14BaseMagicRune } + .desc = { ent-CP14BaseMagicRune.desc } + +ent-CP14ImpactEffectCureWounds = { ent-CP14BaseMagicImpact } + .desc = { ent-CP14BaseMagicImpact.desc } + +ent-CP14RuneEarthWall = { ent-CP14BaseMagicRune } + .desc = { ent-CP14BaseMagicRune.desc } + +ent-CP14ImpactEffectEarthWall = { ent-CP14BaseMagicImpact } + .desc = { ent-CP14BaseMagicImpact.desc } + +ent-CP14RuneFireball = { ent-CP14BaseMagicRune } + .desc = { ent-CP14BaseMagicRune.desc } + +ent-CP14ImpactEffectFireball = { ent-CP14BaseMagicImpact } + .desc = { ent-CP14BaseMagicImpact.desc } + +ent-CP14Fireball = artificial flame + +ent-CP14RuneFlameCreation = { ent-CP14BaseMagicRune } + .desc = { ent-CP14BaseMagicRune.desc } + +ent-CP14ImpactEffectFlameCreation = { ent-CP14BaseMagicImpact } + .desc = { ent-CP14BaseMagicImpact.desc } + +ent-CP14FlameCreationArtificialFlame = искусственное пламя + .desc = Магически созданное искусственное пламя, горящее прямо в воздухе. Неплохой источник света или оружие, если бросить его кому-нибудь в лицо. + +ent-CP14RuneFlashLight = { ent-CP14BaseMagicRune } + .desc = { ent-CP14BaseMagicRune.desc } + +ent-CP14ImpactEffectFlashLight = { ent-CP14BaseMagicImpact } + .desc = { ent-CP14BaseMagicImpact.desc } + +ent-CP14RuneIceDagger = { ent-CP14BaseMagicRune } + .desc = { ent-CP14BaseMagicRune.desc } + +ent-CP14ImpactEffectIceDagger = { ent-CP14BaseMagicImpact } + .desc = { ent-CP14BaseMagicImpact.desc } + +ent-CP14DaggerIce = ледяной кинжал + .desc = Кусок острого магического льда. Через некоторое время действие заклинания ослабнет, и он исчезнет. + +ent-CP14RuneIceFloor = { ent-CP14BaseMagicRune } + .desc = { ent-CP14BaseMagicRune.desc } + +ent-CP14ImpactEffectIceFloor = { ent-CP14BaseMagicImpact } + .desc = { ent-CP14BaseMagicImpact.desc } + +ent-CP14IceFloor = ледяная корка + .desc = Холодно и скользко. + +ent-CP14RuneIceShards = { ent-CP14BaseMagicRune } + .desc = { ent-CP14BaseMagicRune.desc } + +ent-CP14IceShard = ice shard + +ent-CP14ImpactEffectShadowGrab = { ent-CP14BaseMagicImpact } + .desc = { ent-CP14BaseMagicImpact.desc } + +ent-CP14ImpactEffectShadowStep = { ent-CP14BaseMagicImpact } + .desc = { ent-CP14BaseMagicImpact.desc } + +ent-CP14RuneSphereOfLight = { ent-CP14BaseMagicRune } + .desc = { ent-CP14BaseMagicRune.desc } + +ent-CP14ImpactEffectSphereOfLight = { ent-CP14BaseMagicImpact } + .desc = { ent-CP14BaseMagicImpact.desc } + +ent-CP14SphereOfLight = Сфера света + .desc = Сгусток яркого света в форме сферы. + +ent-CP14ClothingCloakArmoredRed = бронированная красная накидка + .desc = Огромные металлические наплечники дают дополнительную защиту от отрубания головы. + +ent-CP14ClothingCloakBlacksmithArpon = фартук кузнеца + .desc = Свободные кожанные полоски, все еще фактически являющиеся одеждой. + +ent-CP14ClothingCloakMaidArpon = фартук горничной + .desc = Чистота, порядок и послушание - вот основные черты хорошей горничной. + +ent-CP14ClothingCloakFurcapeBlack = меховая накидка + .desc = Брутальная, выделанная из шерсти, накидка на плечи. + +ent-CP14ClothingCloakFurcapeBlue = { ent-CP14ClothingCloakFurcapeBlack } + .desc = { ent-CP14ClothingCloakFurcapeBlack.desc } + +ent-CP14ClothingCloakSimpleWhite = белый плащ + .desc = Длинный плащ с высоким воротником. + +ent-CP14ClothingCloakSimpleDarkBlue = { ent-CP14ClothingCloakSimpleWhite } + .desc = { ent-CP14ClothingCloakSimpleWhite.desc } + +ent-CP14ClothingCloakCaptainJacket = капитанский жилет + .desc = Белое золото говорит о том, что вы смотрите на серьезного представителя власти. + +ent-CP14ClothingCloakRitualAttireLeather = ritual attire with leather + .desc = The traditional attire of Southern mages who have undergone the ritual. + +ent-CP14ClothingCloakBrassArmor = brass armor + .desc = Quality brass armour, has good protection and is not too heavy. + +ent-CP14ClothingCloakCuirass = cuirass + .desc = Light armour plate on the chest, little protection, little heaviness. + +ent-CP14ClothingCloakInfantryCuirass = infantry cuirass + .desc = The light infantry cuirass, unlike the original, also protects from the back. + +ent-CP14ClothingCloakCuirassLoincloth = cuirass loincloth + .desc = A heavier version of the cuirass, covering only the top of the legs. + +ent-CP14ClothingCloakCuirassLeg = cuirass leg + .desc = A heavier cuirass that completely covers the legs. + +ent-CP14ClothingEyesMonocle = монокль + .desc = Аристократично и красиво. + +ent-CP14ClothingEyesGlasses = очки + .desc = Аристократично и красиво. + +ent-CP14ClothingEyesAlchemyGlasses = алхимические очки + .desc = Специальные очки с магическим наполнением, позволяющие четко видеть состав любых смесей. + +ent-CP14ClothingEyesAlchemyMonocle = алхимический монокль + .desc = Специальный магический монокль, позволяющий четко видеть состав любых смесей. + +ent-CP14ClothingEyesThaumaturgyGlasses = тауматургические очки + .desc = Очки, позволяющие сканировать магические предметы и существ, чтобы четко видеть количество оставшейся в них энергии. + +ent-CP14ClothingGlovesGirdles = железные наручи + .desc = Бронированные боевые наручи из металла. + +ent-CP14ClothingHeadMetalHeadband = металлический обруч + .desc = Вероятность, что он защитит от попадания в голову, крайне мала. + +ent-CP14ClothingHeadTriangularHat = остроконечная шляпа + .desc = Большая остроконечная шляпа для тех, кто любит выглядеть умным. + +ent-CP14ClothingHeadTriangularHatGolden = позолоченная остроконечная шляпа + .desc = Большая остроконечная шляпа для тех, кто любит выглядеть умным. Украшена золотым обручем. + +ent-CP14ClothingHeadRedBeret = красный берет + .desc = Это берет. + +ent-CP14ClothingHeadPurpleBeret = фиолетовый берет + .desc = Это берет. + +ent-CP14ClothingHeadYellowBeret = желтый берет + .desc = Это берет. + +ent-CP14ClothingHeadBlueBeret = синий берет + .desc = Это берет. + +ent-CP14ClothingHeadBlackBeret = черный берет + .desc = Это берет. + +ent-CP14ClothingHeadCaptainCap = капитанская кепка + .desc = Нет, ну вы посмотрите какой красавчик! + +ent-CP14ClothingHeadYellowHat = желтая бандана + .desc = Почему-то любимая желтая шляпа магов. + +ent-CP14ClothingHeadMercenaryBeret = берет наемника + .desc = Большая красная шерстяная шляпа, украшенная пером. + +ent-CP14ClothingHeadCapellina = капеллина + .desc = Защита от ударов крупными предметами по голове. + +ent-CP14ClothingMaskSinner = маска грешника + .desc = Маска предназначенная для ношения не самыми светлыми личностями. Палачи надевают их на себя и на жертву перед казнью. + +ent-CP14ClothingMaskSteelMask = стальная маска + .desc = Стальная маска, защищающая лицо от внешнего воздействия железа. + +ent-CP14ClothingPantsTrouserWhite = белые штаны + .desc = Широкие, свободные штаны из простой холщовой ткани. + +ent-CP14ClothingPantsTrouserDarkBlue = темные штаны + .desc = Широкие, свободные штаны из простой холщовой ткани. + +ent-CP14ClothingPantsAristocratic = штаны аристократа + .desc = Они из достаточно дорогой ткани, чтобы вы не хотели в них шляться по пещерам. + +ent-CP14ClothingPantsLoincloth = набедренная повязка + .desc = Свободные, ничего не мешает, да еще и выглядят экстремально брутально + +ent-CP14ClothingDressBlack = черное платье + .desc = Просторная женское платье + +ent-CP14ClothingPantsMercenaryTrousers = брюки наемника + .desc = Разноцветные брюки наемника. Не порвите их. + +ent-CP14ClothingPantsSouthernMagician = Платье южного фокусника + .desc = Традиционная юбка южного мага, довольно свободная. + +ent-CP14ClothingRingIceDagger = conductive ring + .desc = A standard mana-conductive ring that allows the user to summon ice daggers. + .suffix = Ice Dagger + +ent-CP14ClothingRingIceShards = conductive ring + .desc = A standard mana-conductive ring that allows the user to summon ice shards. + .suffix = Ice Shards + +ent-CP14ClothingRingFlameCreation = conductive ring + .desc = A standard mana-conductive ring that allows the user to summon artificial flames. + .suffix = Flame creation + +ent-CP14ClothingRingFireball = conductive ring + .desc = A standard mana-conductive ring that allows the user to summon fireballs. + .suffix = Fireball + +ent-CP14ClothingRingCureWounds = conductive ring + .desc = A standard mana-conductive ring that allows the user to heal physical injuries. + .suffix = Cure Wounds + +ent-CP14ClothingRingShadowStep = conductive ring + .desc = A standard mana-conductive ring that allows the user to step throught shadows. + .suffix = Shadow step + +ent-CP14ClothingRingShadowGrab = conductive ring + .desc = A standard mana-conductive ring that allows the user to summon grabbing shadow hand. + .suffix = Shadow grab + +ent-CP14ClothingRingEarthWall = conductive ring + .desc = A standard mana-conductive ring that allows the user to heal physical injuries. + .suffix = Earth wall + +ent-CP14ClothingRingIceFloor = conductive ring + .desc = A standard mana-conductive ring that allows the user to heal physical injuries. + .suffix = Ice floor + +ent-CP14ClothingRingSphereOfLight = conductive ring + .desc = A standard mana-conductive ring that allows the user to create a sphere of light. + .suffix = Sphere of Light + +ent-CP14ClothingRingFlashLight = conductive ring + .desc = A standard mana-conductive ring that allows the user to create a bright flash of light that blinds enemies. + .suffix = Flash Light + +ent-CP14ClothingShirtCottonBlue = хлопковая синяя рубаха + .desc = { ent-CP14ClothingShirtCottonBlue.desc } + +ent-CP14ClothingShirtCottonBlack = хлопковая черная рубаха + .desc = { ent-CP14ClothingShirtCottonBlue.desc } + +ent-CP14ClothingShirtCottonPurple = хлопковая фиолетовая рубаха + .desc = { ent-CP14ClothingShirtCottonBlue.desc } + +ent-CP14ClothingShirtCottonRed = хлопковая красная рубаха + .desc = { ent-CP14ClothingShirtCottonBlue.desc } + +ent-CP14ClothingShirtCottonWhite = хлопковая белая рубаха + .desc = { ent-CP14ClothingShirtCottonBlue.desc } + +ent-CP14ClothingShirtCottonYellow = хлопковая желтая + .desc = { ent-CP14ClothingShirtCottonBlue.desc } + +ent-CP14ClothingShirtSteampunk = укрепленная латунью рубашка + .desc = Белая рубашка, укрепленная латунными вставками. + +ent-CP14ClothingShirtMercenary = рубашка наемника + .desc = Пестрая рубашка наемника. + +ent-CP14ClothingShirtYellowWizard = yellow wizard shirt + .desc = A loose magician's shirt, comfortable and nice looking. + +ent-CP14ClothingShoesBlack = простые черные ботинки + .desc = Влагу они не удержат, но это лучше чем ходить босиком. + +ent-CP14ClothingShoesAristocraticBlack = аристократичные черные ботинки + .desc = Они достаточно дороги, чтобы вы не захотели в них ходить по пещерам. + +ent-CP14ClothingShoesSandals = сандалии + .desc = Сандалии, сделанные из грубой кожи и металлических креплений. + +ent-CP14Mist = облако + +ent-CP14MistVitalExtract = { ent-CP14Mist } + .desc = { ent-CP14Mist.desc } + +ent-CP14AuraNodeBase = aura node + .desc = An energy node that affects the elemental energy in the surrounding space. + +ent-CP14ExpeditionShipTargetPoint = пункт назначения экспедиционного судна + .desc = Один из возможных пунктов прибытия корабля с игроками. + +ent-CP14SpawnPointAdventurer = авантюрист + +ent-CP14SpawnPointAlchemist = алхимик + +ent-CP14SpawnPointInnkeeper = трактирщик + +ent-CP14SpawnPointCaptain = капитан + +ent-CP14SpawnPointGuardCommander = командир стражи + +ent-CP14SpawnPointHouseKeeper = завхоз + +ent-CP14ConstrainedSpawnerBase = Неа + .desc = лол + +ent-CP14ConstrainedSpawnerXeno = xeno constrained spawner + .desc = { ent-CP14ConstrainedSpawnerBase.desc } + +ent-CP14RandomSpawnerBattleRoyaleLootWeapon = Loot + .desc = lol + .suffix = Weapon + +ent-CP14RandomSpawnerBattleRoyaleLootTools = Loot + .desc = lol + .suffix = Tools + +ent-CP14RandomSpawnerGatherAgaricShroom = спавнер мухоморов + +ent-CP14RandomDirtLootSpawner = спавнер земли + +ent-CP14BaseBiomeSpawner = спавнер биомов + +ent-CP14BiomeSpawnerGrassland = { ent-CP14BaseBiomeSpawner } + .desc = { ent-CP14BaseBiomeSpawner.desc } + .suffix = Луга + +ent-CP14BiomeSpawnerCave = { ent-CP14BaseBiomeSpawner } + .desc = { ent-CP14BaseBiomeSpawner.desc } + .suffix = Пещеры + +ent-CP14BiomeSpawnerForest = { ent-CP14BaseBiomeSpawner } + .desc = { ent-CP14BaseBiomeSpawner.desc } + .suffix = Лес + +ent-CP14MobSpaceCobra = cobra + +ent-CP14MobDwarf = мистер Дварф + .desc = { ent-CP14BaseMobDwarf.desc } + +ent-CP14MobElf = { ent-CP14BaseMobElf } + .desc = { ent-CP14BaseMobElf.desc } + +ent-CP14MobGoblin = { ent-CP14BaseMobGoblin } + .desc = { ent-CP14BaseMobGoblin.desc } + +ent-CP14MobHuman = мистер Человек + .desc = { ent-CP14BaseMobHuman.desc } + +ent-CP14MobTiefling = мистер Тифлинг + .desc = { ent-CP14BaseMobTiefling.desc } + +ent-CP14BaseMobDwarf = Мистер Дварф + +ent-CP14BaseMobElf = Мистер Эльф + +ent-CP14BaseMobGoblin = Мистер Гоблин + +ent-CP14BaseMobHuman = Мистер Человек + +ent-CP14BaseMobTiefling = Мистер Тифлинг + +ent-CP14OreCopper = медная руда + .desc = Кусочек бледной, тяжелой меди. + +ent-CP14OreIron = железная руда + .desc = Кусочек холодного, тяжелого железа. + +ent-CP14OreGold = золотая руда + .desc = Кусочек мягкого, чистого золота. + +ent-CP14GreenBottle = Зеленая бутылка + .desc = Зеленая бутылка, идеально подходит для пива. + .suffix = Пустая + +ent-CP14BlueVial = Синий флакон + .desc = Синий флакон, идеально подходит для рома. + .suffix = Пустой + +ent-CP14GreenVial = Зеленый флакон + .desc = Маленький зеленый флакон. + .suffix = Пустой + +ent-CP14OrangeBottle = Оранжевая бутылка + .desc = Просто оранжевая бутылка. + .suffix = Пустая + +ent-CP14RedBottle = Красная бутылка + .desc = Красная бутылка, идеально подходит для вина. + .suffix = Пустая + +ent-CP14MetalBeerMug = Металлическая кружка + .desc = Самая обычная металлическая кружка. + +ent-CP14WoodenBeerMug = Деревянная кружка + .desc = Деревянная кружка для пива. + +ent-CP14SteelBeerMug = Пивная кружка + .desc = Деревянная кружка с железными вкраплениями. + +ent-CP14SteelWoodBeerMug = { ent-CP14SteelBeerMug } + .desc = { ent-CP14SteelBeerMug.desc } + +ent-CP14FoodCheeseWheel = колесо сыра + .desc = Большое колесо мягкого, ароматного сыра. + +ent-CP14FoodCheesePart = сыр + .desc = Треугольник мягкого, ароматного сыра. + +ent-CP14FoodCheeseSlice = долька сыра + .desc = Тонкий ломтик вкусно пахнущего сыра + +ent-CP14FoodDoughLarge = большой кусок теста + .desc = Идеальный ингредиент для любого мучного изделия. Остается только придать ему форму. + +ent-CP14FoodDoughMedium = средний кусок теста + .desc = { ent-CP14FoodDoughLarge.desc } + +ent-CP14FoodDoughMediumFlat = раскатанное тесто + .desc = { ent-CP14FoodDoughMedium.desc } + +ent-CP14FoodEggBase = None + .desc = An egg! + +ent-CP14Eggshells = яичная скорлупа + .desc = Ты ходишь по ним, приятель. + +ent-CP14FoodEgg = яйцо + .desc = { ent-CP14FoodEggBase.desc } + +ent-CP14FoodMeatSliceBase = { ent-CP14FoodMeatBase } + .desc = { ent-CP14FoodMeatBase.desc } + +ent-CP14FoodMeatLamb = сырая баранина + .desc = Сочный стейк из баранины + +ent-CP14FoodMeatLambSlice = кусочки мяса + .desc = Succulent lamb steak + +ent-CP14FoodMeatLambCutlet = котлета из баранины + .desc = Результат смешивания нарезанной баранины и яйца - сырая круглая котлета. + +ent-CP14FoodCabbage = капуста + .desc = Зеленый съедобный шарик + +ent-CP14FoodCabbageSlice = лист капусты + .desc = Время делать салатики. + +ent-CP14FoodPumpkin = тыква + .desc = Большая, клевая тыква. + +ent-CP14FoodPumpkinSlice = кусок тыквы + .desc = Это тыква! + +ent-CP14CopperCoin = медная корона + .desc = Минимальная экономическая единица на просторах Эберрона. Является одной десятой серебряного соверена. + .suffix = 10 монет + +ent-CP14CopperCoin5 = { ent-CP14CopperCoin } + .desc = { ent-CP14CopperCoin.desc } + .suffix = 5 монет + +ent-CP14CopperCoin1 = { ent-CP14CopperCoin } + .desc = { ent-CP14CopperCoin.desc } + .suffix = 1 монета + +ent-CP14SilverCoin = серебряный соверен + .desc = Эквивалентен 10 медным коронам, и является одной десятой золотого галифара. + .suffix = 10 монет + +ent-CP14SilverCoin5 = { ent-CP14SilverCoin } + .desc = { ent-CP14SilverCoin.desc } + .suffix = 5 монет + +ent-CP14SilverCoin1 = { ent-CP14SilverCoin } + .desc = { ent-CP14SilverCoin.desc } + .suffix = 1 монета + +ent-CP14GoldCoin = золотой галифар + .desc = Эквивалентен 10 серебряным соверенам, и является одной десятой платинового дракона. + .suffix = 10 монет + +ent-CP14GoldCoin5 = { ent-CP14GoldCoin } + .desc = { ent-CP14GoldCoin.desc } + .suffix = 5 монет + +ent-CP14GoldCoin1 = { ent-CP14GoldCoin } + .desc = { ent-CP14GoldCoin.desc } + .suffix = 1 монета + +ent-CP14PlatinumCoin = платиновый дракон + .desc = Эквивалентен 10 золотым галифарам, и является самой дорогой монетой на просторах Эберрона. + .suffix = 10 монет + +ent-CP14PlatinumCoin5 = { ent-CP14PlatinumCoin } + .desc = { ent-CP14PlatinumCoin.desc } + .suffix = 5 монет + +ent-CP14PlatinumCoin1 = { ent-CP14PlatinumCoin } + .desc = { ent-CP14PlatinumCoin.desc } + .suffix = 1 монета + +ent-CP14Wallet = кошель + .desc = Небольшой кошель, удобный для хранения монет. + +ent-CP14WalletFilledTest = { ent-CP14Wallet } + .desc = { ent-CP14Wallet.desc } + .suffix = Filled test + +ent-CP14CopperBar1 = медный слиток + .desc = Тяжелый, слегка зеленый кусок обработанной меди. + .suffix = 1 + +ent-CP14CopperBar5 = { ent-CP14CopperBar1 } + .desc = { ent-CP14CopperBar1.desc } + .suffix = 5 + +ent-CP14CopperBar10 = { ent-CP14CopperBar1 } + .desc = { ent-CP14CopperBar1.desc } + .suffix = 10 + +ent-CP14IronBar1 = iron bar + .desc = A heavy piece of refined iron + .suffix = 1 + +ent-CP14IronBar5 = { ent-CP14IronBar1 } + .desc = { ent-CP14IronBar1.desc } + .suffix = 5 + +ent-CP14IronBar10 = { ent-CP14IronBar1 } + .desc = { ent-CP14IronBar1.desc } + .suffix = 10 + +ent-CP14GoldBar1 = золотой слиток + .desc = Теплый на ощупь, мягкий кусок изысканного золота. + +ent-CP14GoldBar5 = { ent-CP14GoldBar1 } + .desc = { ent-CP14GoldBar1.desc } + .suffix = 5 + +ent-CP14GoldBar10 = { ent-CP14GoldBar1 } + .desc = { ent-CP14GoldBar1.desc } + .suffix = 10 + +ent-CP14DirtBlock1 = блок земли + .desc = Блок великолепной плодородной почвы. + +ent-CP14DirtBlock10 = { ent-CP14DirtBlock1 } + .desc = { ent-CP14DirtBlock1.desc } + .suffix = 10 + +ent-CP14StoneBlock1 = блок камня + .desc = Кусок холодного камня + +ent-CP14StoneBlock10 = { ent-CP14StoneBlock1 } + .desc = { ent-CP14StoneBlock1.desc } + .suffix = 10 + +ent-CP14WoodLog = деревянное бревно + .desc = Кусок необработанной древесины. Хороший материал для строительства, или разведения огня. + +ent-CP14WoodenPlanks1 = деревянные доски + .desc = Обработанное и готовое к использованию дерево. + .suffix = 1 + +ent-CP14WoodenPlanks10 = { ent-CP14WoodenPlanks1 } + .desc = { ent-CP14WoodenPlanks1.desc } + .suffix = 10 + +ent-CP14Nail1 = гвозди + .desc = Основной столярный инструмент, позволяющий делать с деревом невообразимые вещи. + .suffix = 1 + +ent-CP14Nail110 = { ent-CP14Nail1 } + .desc = { ent-CP14Nail1.desc } + .suffix = 10 + +ent-CP14FloraMaterial = растительный материал + .desc = Органический материал, используемый в лечебных или строительных целях. + +ent-CP14Cauldron = котел + .desc = Тяжелый котелок. Он не такой громоздкий, как чан, но его можно нести в руках. + +ent-CP14Pestle = пестик + .desc = Устройство для удобного измельчения различных материалов в жидкость. + +ent-CP14Mortar = ступка + .desc = Алхимическая прочная тарелка для измельчения реагентов. + +ent-CP14Dropper = пипетка + .desc = Маленькая пипетка для работы с очень малыми объемами жидкостей. + +ent-CP14BaseVialFragile = { ent-CP14BaseVial } + .desc = { ent-CP14BaseVial.desc } + +ent-CP14VialTiny = крохотный пузырек + .desc = Прочный стеклянный флакон для хранения крохотного количества жидкости. + +ent-CP14VialSmall = малый пузырек + .desc = Хрупкий стеклянный пузырек для хранения небольшого количества жидкости. + +ent-CP14VialSmallBloodgrassSap = { ent-CP14VialSmall } + .desc = { ent-CP14VialSmall.desc } + .suffix = Сок кровьтравы + +ent-CP14VialSmallAgaricMushroom = { ent-CP14VialSmall } + .desc = { ent-CP14VialSmall.desc } + .suffix = Сок мухомора + +ent-CP14VialSmallGroundQuartz = { ent-CP14VialSmall } + .desc = { ent-CP14VialSmall.desc } + .suffix = Грубый кварц + +ent-CP14VialSmallWildSage = { ent-CP14VialSmall } + .desc = New description 4! + .suffix = Сок дикого шалфея + +ent-CP14VialSmallChromiumSlime = { ent-CP14VialTiny } + .desc = { ent-CP14VialTiny.desc } + .suffix = Хромиевая слизь + +ent-CP14VialSmallLumiMushroom = { ent-CP14VialTiny } + .desc = { ent-CP14VialTiny.desc } + .suffix = Люмигриб + +ent-CP14MeltingMoldBase = форма для выплавки + .desc = Деревянная доска для заливки металла в необходимые формы. + +ent-CP14MeltingMoldBlank = пустая форма для выплавки + .desc = Пустая форма для литья металла. Вы можете вырезать в ней любую нужную форму на столе для резки деталей. + +ent-CP14MeltingMoldDaggers = форма для кинжала + .desc = { ent-CP14MeltingMoldBase.desc } + +ent-CP14MeltingMoldNails = форма для гвоздей + .desc = { ent-CP14MeltingMoldBase.desc } + +ent-CP14MeltingMoldPickaxe = форма для кирки + .desc = { ent-CP14MeltingMoldBase.desc } + +ent-CP14MeltingMoldShovel = форма для лопаты + .desc = { ent-CP14MeltingMoldBase.desc } + +ent-CP14MeltingMoldSickle = форма для серпа + .desc = { ent-CP14MeltingMoldBase.desc } + +ent-CP14MeltingMoldSword = форма для меча + .desc = { ent-CP14MeltingMoldBase.desc } + +ent-CP14MeltingMoldThrowableSpear = форма для метательного копья + .desc = { ent-CP14MeltingMoldBase.desc } + +ent-CP14MeltingMoldTwoHandedSword = форма для двуручного меча + .desc = { ent-CP14MeltingMoldBase.desc } + +ent-CP14Wheat = сноп пшеницы + .desc = У вас есть выбор: посадить семена обратно в землю, либо пустить их в муку. + +ent-CP14BloodGrass = кровьтрава + .desc = Самое скучное и распространенное растение, растущее в дикой природе. Известна своими питательными свойствами. + +ent-CP14AgaricMushroom = мухомор + .desc = Этот ядовитый гриб часто можно встретить вблизи водоемов или других влажных мест. Не рекомендуется для употребления в пищу. + +ent-CP14ChromiumSlime = хромиевая слизь + .desc = Это редкое густое вещество можно обнаружить в потоке воды, как будто оно обладает собственным разумом. При попытке изменить саму слизь - она меняет реагент, с которым взаимодействует. + +ent-CP14WildSage = корень дикого шалфея + .desc = Корень повсеместно распространенного лекарственного растения, неплохо заживляющего физические повреждения и вызывающего откашливание. + +ent-CP14QuartzShard = грубый кварц + .desc = природный кристалл, являющийся естественным накопителем магической энергии. Его цвет отражает качество кристалла - чем выше спектр излучения, тем выше уровень утечки энергии. + +ent-CP14LumiMushroom = люмигриб + .desc = Слабо светящийся гриб. Часто используется алхимиками как средство для концентрации растворов. + +ent-CP14SeedWheat = семена пшеницы + .desc = Маленькие семена пшеницы. Что вы будете с ними делать? Размолоть в муку или посадить снова? + +ent-CP14SeedPumpkin = семена тыквы + .desc = Тыквенные семечки. Кажется, какая-то тыква была жестоко выпотрошена и разделана. + +ent-CP14SeedCabbage = семена капусты + .desc = О нет! Моя капуста! + +ent-CP14SeedTomato = семена помидоров + .desc = Похоже на порошок! Они такие маленькие, эти семена. + +ent-CP14EnergyCrystalBase = None + .desc = Shards of one of the Khyber dragon, used to bind and control elemental energy. + +ent-CP14EnergyCrystalSmall = small Khyber shard + .desc = { ent-CP14EnergyCrystalBase.desc } + .suffix = Full + +ent-CP14EnergyCrystalSmallEmpty = { ent-CP14EnergyCrystalSmall } + .desc = { ent-CP14EnergyCrystalSmall.desc } + .suffix = Empty + +ent-CP14EnergyCrystalMedium = Khyber shard + .desc = { ent-CP14EnergyCrystalBase.desc } + .suffix = Full + +ent-CP14EnergyCrystalMediumEmpty = { ent-CP14EnergyCrystalMedium } + .desc = { ent-CP14EnergyCrystalMedium.desc } + .suffix = Empty + +ent-CP14AuraScanner = сканер ауры + .desc = Сканирует полярность потоков элементальной энергии в этом месте. + +ent-CP14Bucket = ведро + .desc = Старое скучное ведро + .suffix = CP14 + +ent-CP14OldLantern = Старая Лампа + .desc = Пережиток прошлого техномагии. Большой, тяжелый, непрактичный. Таким приятно разве что бить по голове. + +ent-CP14Rope = веревка + .desc = Многофункциональная веревка. Ей можно связать что-нить. Или кого-нибудь. + +ent-CP14BaseSharpeningStone = точильный камень + .desc = Позволит заточить притупленное оружие. Если перестараться, вы вполне можете сточить оружие полностью. + +ent-CP14BaseBattleHammer = боевой молот + .desc = Большой тяжелый молот. Лучше вам не стоять у него на пути! + +ent-CP14BaseBattleStaff = боевой посох + .desc = Нет оружия проще и эффективнее, чем длинная и тяжелая палка! + +ent-CP14BaseDagger = кинжал + .desc = Небольшое многофункциональное острое лезвие. И мясо порезать, и в гоблина метнуть. + +ent-CP14BaseHandheldAxe = ручной топор + .desc = Небольшой топор, отлично подходящий для рубки деревьев или сухожилий. + +ent-CP14BaseLightHammer = легкий молот + .desc = Небольшой молоток. Хорош как для плотнических работ, так и для проламывания черепов. + +ent-CP14BaseMace = булава + .desc = Тяжелый кусок металла на длинной палке. Что может быть проще? + +ent-CP14BaseShield = щит + .desc = Деревянный щит, способный выдержать несколько ударов. + +ent-CP14BaseSickle = серп + .desc = Изначально разработанное как оружие против травы, серп внезапно показал себя хорош и в более кровавой жатве. + +ent-CP14BaseThrowableSpear = метательное копьё + .desc = Оружие, исправно выполняющее свой долг еще со времен эпохи великанов. + +ent-CP14BaseSword = меч + .desc = Золотой стандарт холодного оружия. Средняя длина, удобная рукоять и никаких излишеств. + +ent-CP14BaseTwoHandedSword = двуручный меч + .desc = Мощное оружие, требующее огромной силы и умения для эффективного использования. + +ent-CP14TwoHandedSwordScythe = коса + .desc = Большая двуручная коса. Что вы будете косить ею? Пшено, или головы своих врагов? + +ent-CP14BaseHoe = мотыга + .desc = Фермерский инструмент для подготовки почвы под посадки, либо очистки от сорняков. + +ent-CP14BasePickaxe = кирка + .desc = Идеально заточена, и готова вгрызаться в земную твердь. + +ent-CP14BaseShovel = лопата + .desc = Орудие для вскапывания земли, рытья грядок или могил. + +ent-CP14BaseLightCrossbow = легкий арбалет + .desc = Небольшой, компактный арбалет, который удобно держать одной рукой. Не слишком меткий с обратной стороны. + +ent-CP14Crossbolt = арбалетный болт + .desc = Стержень с заостренным концом. Без оперения, это вам не лук. + +ent-CP14DungeonEntrance = спуск в подземелье + .desc = Темные глубины подземного мира зовут вас. + +ent-CP14DungeonExit = выход на поверхность + .desc = Выход из темного подземного мира в мир надземный. + +ent-CP14BaseSharpeningStoneStructure = стационарный точильный камень + .desc = Прочный, долговечный точильный камень, способный затачивать оружие без особого вреда для него. + +ent-CP14Mannequin = манекен + .desc = Удобная подставка для одежды или доспехов. + +ent-CP14StatueGob = статуя Гоба + .desc = Он прекрасен. + .suffix = Нормальная + +ent-CP14StatueGobVines = статуя Гоба + .desc = { ent-CP14StatueGob.desc } + .suffix = Нормальная. Заросшая + +ent-CP14StatueGobRuined = разрушенная статуя Гоба + .desc = { ent-CP14StatueGob.desc } + .suffix = Разрушенная + +ent-CP14StatueGobRuinedVines = разрушенная статуя Гоба + .desc = { ent-CP14StatueGob.desc } + .suffix = Разрушенная. Заросшая + +ent-CP14WallmountWoodenBoards = доски + .desc = Прибиты к стене. Зачем? не совсем ясно. + +ent-CP14WallmountWeb = паутина + .desc = Паутина, прилипшая к темным углам, в которой сидят крошечные паучки. + +ent-CP14WallmountVines = лозы + .desc = Робкие ростки сорняков пытаются взобраться по стене вверх, к свету. + +ent-CP14BaseWoodDoor = деревянная дверь + .desc = Не самая прочная конструкция, но это лучше чем ничего. + .suffix = Без замка + +ent-CP14WoodDoorOpened = { ent-CP14BaseWoodDoor } + .desc = { ent-CP14BaseWoodDoor.desc } + .suffix = Открытая + +ent-CP14WoodDoorTavern = { ent-CP14BaseWoodDoor } + .desc = { ent-CP14BaseWoodDoor.desc } + .suffix = Таверна + +ent-CP14FloorWater = вода + .desc = Впадина с обычной водой. Достаточна чиста для употребления. + +ent-CP14Chasm = бездна + .desc = И вы не видите ее дна... + +ent-CP14WallmountCrystalBase = сверкающий кварц + .desc = Биолюминесцентные кристаллы кварца, которые могут принимать любой цвет, - очень удобный источник света в глубоких пещерах. К сожалению, светящиеся свойства очень трудно сохранить. + +ent-CP14WallmountCrystalRubies = { ent-CP14WallmountCrystalBase } + .desc = { ent-CP14WallmountCrystalBase.desc } + .suffix = Красный + +ent-CP14WallmountCrystalTopazes = { ent-CP14WallmountCrystalBase } + .desc = { ent-CP14WallmountCrystalBase.desc } + .suffix = Желтый + +ent-CP14WallmountCrystalEmeralds = { ent-CP14WallmountCrystalBase } + .desc = { ent-CP14WallmountCrystalBase.desc } + .suffix = Зеленый + +ent-CP14WallmountCrystalSapphires = { ent-CP14WallmountCrystalBase } + .desc = { ent-CP14WallmountCrystalBase.desc } + .suffix = Голубой + +ent-CP14WallmountCrystalAmethysts = { ent-CP14WallmountCrystalBase } + .desc = { ent-CP14WallmountCrystalBase.desc } + .suffix = Фиолетовый + +ent-CP14WallmountCrystalDiamonds = { ent-CP14WallmountCrystalBase } + .desc = { ent-CP14WallmountCrystalBase.desc } + .suffix = Белый + +ent-CP14CrystalBase = сверкающий кварц + .desc = Биолюминесцентные кристаллы кварца, которые могут принимать любой цвет, - очень удобный источник света в глубоких пещерах. К сожалению, светящиеся свойства очень трудно сохранить. + +ent-CP14CrystalRubiesSmall = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Red, Small + +ent-CP14CrystalRubiesMedium = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Red, Medium + +ent-CP14CrystalRubiesBig = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Red, Big + +ent-CP14CrystalTopazesSmall = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Yellow, Small + +ent-CP14CrystalTopazesMedium = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Yellow, Medium + +ent-CP14CrystalTopazesBig = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Yellow, Big + +ent-CP14CrystalEmeraldsSmall = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Green, Small + +ent-CP14CrystalEmeraldsMedium = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Green, Medium + +ent-CP14CrystalEmeraldsBig = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Green, Big + +ent-CP14CrystalSapphiresSmall = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Cyan, Small + +ent-CP14CrystalSapphiresMedium = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Cyan, Medium + +ent-CP14CrystalSapphiresBig = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Cyan, Big + +ent-CP14CrystalAmethystsSmall = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Purple, Small + +ent-CP14CrystalAmethystsMedium = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Purple, Medium + +ent-CP14CrystalAmethystsBig = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = Purple, Big + +ent-CP14CrystalDiamondsSmall = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = White, Small + +ent-CP14CrystalDiamondsMedium = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = White, Medium + +ent-CP14CrystalDiamondsBig = { ent-CP14CrystalBase } + .desc = { ent-CP14CrystalBase.desc } + .suffix = White, Big + +ent-CP14HighBush = высокий куст + .desc = Высокие и густые заросли. Возможно кто-то наблюдает за тобой из них. + +ent-CP14RandomBushOffsetSpawner = спавнер куста (рандомный сдвиг) + +ent-CP14BaseTree = дерево + .desc = Десятилетия жизни и роста, насыщающие окружающую природу свежим воздухом. + +ent-CP14BaseTreeLarge = большое дерево + .desc = { ent-CP14BaseTree.desc } + +ent-CP14FloraTree01 = { ent-CP14BaseTree } + .desc = { ent-CP14BaseTree.desc } + +ent-CP14FloraTree02 = { ent-CP14BaseTree } + .desc = { ent-CP14BaseTree.desc } + +ent-CP14FloraTree03 = { ent-CP14BaseTree } + .desc = { ent-CP14BaseTree.desc } + +ent-CP14FloraTree04 = { ent-CP14BaseTree } + .desc = { ent-CP14BaseTree.desc } + +ent-CP14FloraTree05 = { ent-CP14BaseTree } + .desc = { ent-CP14BaseTree.desc } + +ent-CP14FloraTree06 = { ent-CP14BaseTree } + .desc = { ent-CP14BaseTree.desc } + +ent-CP14FloraTreeLarge01 = { ent-CP14BaseTreeLarge } + .desc = { ent-CP14BaseTree.desc } + +ent-CP14FloraTreeLarge02 = { ent-CP14BaseTreeLarge } + .desc = { ent-CP14BaseTree.desc } + +ent-CP14FloraTreeLarge03 = { ent-CP14BaseTreeLarge } + .desc = { ent-CP14BaseTree.desc } + +ent-CP14FloraTreeLarge04 = { ent-CP14BaseTreeLarge } + .desc = { ent-CP14BaseTree.desc } + +ent-CP14FloraTreeLarge05 = { ent-CP14BaseTreeLarge } + .desc = { ent-CP14BaseTree.desc } + +ent-CP14FloraTreeLarge06 = { ent-CP14BaseTreeLarge } + .desc = { ent-CP14BaseTree.desc } + +ent-CP14BaseBarrel = деревянная бочка + .desc = Большая, удобная емкость для хранения жидкостей. + .suffix = Пустая + +ent-CP14BarrelWater = { ent-CP14BaseBarrel } + .desc = { ent-CP14BaseBarrel.desc } + .suffix = Вода + +ent-CP14BarrelBlood = { ent-CP14BaseBarrel } + .desc = { ent-CP14BaseBarrel.desc } + .suffix = Кровь + +ent-CP14BarrelBloodTiefling = { ent-CP14BaseBarrel } + .desc = { ent-CP14BaseBarrel.desc } + .suffix = Кровь тифлинга + +ent-CP14BarrelBloodElf = { ent-CP14BaseBarrel } + .desc = { ent-CP14BaseBarrel.desc } + .suffix = Кровь эльфа + +ent-CP14BarrelBloodGrassSap = { ent-CP14BaseBarrel } + .desc = { ent-CP14BaseBarrel.desc } + .suffix = Сок кровьтравы + +ent-CP14BarrelAgaricMushroom = { ent-CP14BaseBarrel } + .desc = { ent-CP14BaseBarrel.desc } + .suffix = Сок мухомора + +ent-CP14BarrelChromiumSlime = { ent-CP14BaseBarrel } + .desc = { ent-CP14BaseBarrel.desc } + .suffix = Хромиевая слизь + +ent-CP14BarrelWildSageSap = { ent-CP14BaseBarrel } + .desc = { ent-CP14BaseBarrel.desc } + .suffix = Сок дикого шалфея + +ent-CP14BarrelGroundQuartz = { ent-CP14BaseBarrel } + .desc = { ent-CP14BaseBarrel.desc } + .suffix = Грубый кварц + +ent-CP14BarrelLumiMushroom = { ent-CP14BaseBarrel } + .desc = { ent-CP14BaseBarrel.desc } + .suffix = Люмигриб + +ent-CP14WoodenBed = деревянная кровать + .desc = Деревянная кровать. Лучше, чем ничего. + +ent-CP14Bonfire = костёр + .desc = Груда бревен, сложенных вместе, и готовых вспыхнуть от малейшей искры. + +ent-CP14ChairWooden = деревянный стул + .desc = Сколочен из самых обычных досок. Просто и эффективно! + +ent-CP14CuttingBoard = Разделочная доска + .desc = Поможет вам приготовить еду. + +ent-CP14ClosetBase = шкаф + .desc = Обычный, ветхий шкаф. + +ent-CP14WoodenDresser = деревянный комод + .desc = Обычный деревянный комод. + +ent-CP14WoodenCupboard = деревянный шкаф + .desc = Обычный деревянный шкаф. + +ent-CP14TableWoodenFrame = каркас деревянного стола + .desc = Основа для деревянных столов любых видов. + +ent-CP14TableWooden = деревянный стол + .desc = Простой стол, сколоченный из досок. + +ent-CP14WallmountTorch = настенный факел + .desc = Хороший, надёжный источник света. Жаль, недолговечный. + +ent-CP14WallmountLamp = вечная лампа + .desc = Хрупкий вечный голубой огонь как доказательство превосходства магии над природой. + +ent-CP14WallmountBarShelfA = bar shelf + .desc = buba. + .suffix = 1 + +ent-CP14WallmountBarShelfB = { ent-CP14WallmountBarShelfA } + .desc = { ent-CP14WallmountBarShelfA.desc } + .suffix = 2 + +ent-CP14Workbench = верстак + .desc = Стол для создания различного базового инструментария. + +ent-CP14WorkbenchMeltingMolds = стол для резки форм + .desc = Специализированный стол, позволяющий вырезать формы для выплавки металла. + +ent-CP14WorkbenchCooking = кухонный стол + .desc = Время готовить. + +ent-CP14FrameWooden = каркас деревянной стены + .desc = Деревянный каркас для деревянных стен любых видов. + +ent-CP14AlchemyFurnaceDebug = { ent-CP14AlchemyFurnace } + .desc = { ent-CP14AlchemyFurnace.desc } + +ent-CP14AlchemyFurnace = алхимическая печь + .desc = Печь, работающая на дровах, угле или любом другом горящем материале. Удобна для подогрева алхимических зелий. + +ent-CP14AlchemyNormalizer = нормализатор растворов + .desc = Алхимический прибор, удаляющий мелкий осадок из растворов и стабилизирующий его для дальнейшей работы + +ent-CP14BaseVat = чан + .desc = Очень большой чан для хранения огромного количества жидкости. Тяжелый, неудобный для переноски. + +ent-CP14SeedbedWooden = грядка + .desc = Деревянная кадка с кучей земли, приспособленная для выращивания растений. + +ent-CP14GatherableWildBase = { ent-CP14GatherableBase } + .desc = { ent-CP14GatherableBase.desc } + +ent-CP14GatherablePlantBase = { ent-CP14GatherableBase } + .desc = { ent-CP14GatherableBase.desc } + +ent-CP14GatherableBloodgrass = кровьтрава + .desc = Самое скучное и распространенное растение, которое можно встретить в природе, - это темно-коричневая трава. + .suffix = Gatherable + +ent-CP14GatherableFlyAgaric = мухоморы + .desc = Этот ядовитый гриб часто можно встретить вблизи водоемов или других влажных мест. Он не рекомендуется для употребления в пищу. + .suffix = Gatherable + +ent-CP14GatherableChromiumSlime = хромиевая слизь + .desc = Это редкое густое вещество можно обнаружить в потоке воды, как будто оно обладает собственным разумом. При попытке изменить саму слизь - она меняет реагент, с которым взаимодействует. + .suffix = Gatherable + +ent-CP14GatherableWildSage = дикий шалфей + .desc = Корень этого повсеместно распространенного лекарственного растения неплохо заживляет физические повреждения и вызывает кашель. + .suffix = Gatherable + +ent-CP14GatherableLumiMushroom = люмигрибы + .desc = Слабо светящийся гриб. Часто используется алхимиками как средство для концентрации растворов. + .suffix = Gatherable + +ent-CP14PlantCabbage = cabbage + .desc = OOO + +ent-CP14PlantCabbageDeath = dead cabbage + .desc = The sad spectacle of wasted food. + +ent-CP14PlantPumpkin = pumpkin + .desc = OOO + +ent-CP14PlantPumpkinDeath = dead pumpkin + .desc = The sad spectacle of wasted food. + +ent-CP14PlantWheat = пшеница + .desc = Наиболее популярная культура. Непритязательна, и открывает дорогу к разнообразию мучных изделий. + +ent-CP14PlantWheatDeath = мертвая пшеница + .desc = Грустное зрелище потерянной еды. + +ent-CP14ElementalReactor = elemental reactor + .desc = A work of art created by the dwarves of Zilagro and House Lyrandar, controlling the fire elemental and allowing it to produce vast amounts of energy. + +ent-CP14ChestGeneric = сундук + .desc = Chest. + +ent-CP14WoodenChestFrame = каркас деревянного сундука + .desc = Base for any wooden chest + +ent-CP14WoodenChest = деревянный сундук + .desc = Простой деревянный сундук для хранения всякого хлама. + +ent-CP14BrassChest = латунный сундук + .desc = Простой латунный сундук для удобного хранения хлама. + +ent-CP14CrateCoffin = гроб + .desc = Удобный и красивый гроб, чтобы с удобствами дождаться своего воскрешения. + +ent-CP14BaseSmallCrate = { ent-CP14BaseCrate } + .desc = { ent-CP14BaseCrate.desc } + +ent-CP14LargeWoodenCrate = большой деревянный ящик + .desc = Ящик из дерева. + +ent-CP14SmallWoodenCrate = малый деревянный ящик + .desc = Ящик из дерева. + +ent-CP14SmallWoodenCrateFilled = None + .suffix = Filled, Battleroyale + +ent-CP14LargeWoodenCrateFilled = None + .suffix = Filled, Battleroyale + +ent-CP14Cliff = обрыв + .desc = Серьезные неровности природного ландшафта. + .suffix = Прямой + +ent-CP14CliffCorner = { ent-CP14Cliff } + .desc = { ent-CP14Cliff.desc } + .suffix = Угол + +ent-CP14CliffCornerSmall = { ent-CP14Cliff } + .desc = { ent-CP14Cliff.desc } + .suffix = Малый угол + +ent-CP14CliffEndLeft = { ent-CP14Cliff } + .desc = { ent-CP14Cliff.desc } + .suffix = Левый край + +ent-CP14CliffEndRight = { ent-CP14Cliff } + .desc = { ent-CP14Cliff.desc } + .suffix = Правый край + +ent-CP14IronGrilleBase = железная решетка + .desc = Прочный барьер из сваренных вместе железных прутьев. + +ent-CP14IronGrilleStraight = { ent-CP14IronGrilleBase } + .desc = { ent-CP14IronGrilleBase.desc } + .suffix = Прямая + +ent-CP14IronGrilleCorner = { ent-CP14IronGrilleBase } + .desc = { ent-CP14IronGrilleBase.desc } + .suffix = Угол + +ent-CP14IronGrilleTJunction = { ent-CP14IronGrilleBase } + .desc = { ent-CP14IronGrilleBase.desc } + .suffix = Т-соединение + +ent-CP14IronGrilleGate = ворота в железной решетке + .desc = Представляете ли вы, что ждет вас за этими воротами? Это может быть как туалет, так и роскошный особняк. + +ent-CP14IronGrilleGateLockedTavern = { ent-CP14IronGrilleGate } + .desc = { ent-CP14IronGrilleGate.desc } + .suffix = Таверна, закрыто + +ent-CP14WallStone = камень + .desc = Природная стена из цельного камня. В ней ощущается холод пещеры. + +ent-CP14WallDirt = земляная стена + .desc = Высокая куча земли. Можно ли построить из нее дом? + +ent-CP14WallStoneGoldOre = { ent-CP14WallStone } + .desc = Природная стена из цельного камня. Вы видите в ней манящие частицы золота. + .suffix = золотая руда + +ent-CP14BaseWall = стена + .desc = Достаточно прочная, чтобы укрыть вас от угрозы или холодного ветра. + +ent-CP14WallStonebrick = каменная кирпичная стена + .desc = { ent-CP14BaseWall.desc } + +ent-CP14WallStonebrickCrushedMedium = каменная кирпичная стена + .desc = { ent-CP14BaseCrushed.desc } + .suffix = CrushedMedium + +ent-CP14WallStonebrickCrushedLow = каменная кирпичная стена + .desc = { ent-CP14BaseCrushed.desc } + .suffix = CrushedLow + +ent-CP14WallWhitebrick = белая кирпичная стена + .desc = { ent-CP14BaseWall.desc } + +ent-CP14WallBrownbrick = кирпичная стена + .desc = { ent-CP14BaseWall.desc } + +ent-CP14WallWooden = деревянная стена + +ent-CP14WallCardboard = картонная стена + .desc = Тонкая, непрочная стена из бумаги и картона. Популярна в теплых странах. + +ent-CP14WallCyan = голубая стена + .desc = { ent-CP14BaseWall.desc } + +ent-CP14BaseFenceWood = деревянный забор + .desc = Деревянный кусок ограды. Надеюсь, за ним находится сад бабушки. + +ent-CP14BaseFenceWoodSmall = низкий деревянный забор + .desc = Деревянная часть небольшого забора. Лучшая защита для ограждения частной территории! + +ent-CP14FenceWoodHighStraight = { ent-CP14BaseFenceWood } + .desc = { ent-CP14BaseFenceWood.desc } + .suffix = Прямой + +ent-CP14FenceWoodHighCorner = { ent-CP14BaseFenceWood } + .desc = { ent-CP14BaseFenceWood.desc } + .suffix = Угол + +ent-CP14FenceWoodHighTJunction = { ent-CP14BaseFenceWood } + .desc = { ent-CP14BaseFenceWood.desc } + .suffix = Т-соединение + +ent-CP14FenceWoodHighGate = ворота в деревянном заборе + .desc = Представляете ли вы, что ждет вас за этими воротами? Это может быть как туалет, так и роскошный особняк. + +ent-CP14FenceWoodSmallStraight = { ent-CP14BaseFenceWoodSmall } + .desc = { ent-CP14BaseFenceWoodSmall.desc } + .suffix = Прямой + +ent-CP14FenceWoodSmallCorner = { ent-CP14BaseFenceWoodSmall } + .desc = { ent-CP14BaseFenceWoodSmall.desc } + .suffix = Угол + +ent-CP14FenceWoodSmallTJunction = { ent-CP14BaseFenceWoodSmall } + .desc = { ent-CP14BaseFenceWoodSmall.desc } + .suffix = T-соединение + +ent-CP14FenceWoodSmallGate = ворота в деревянном заборе + .desc = Представляете ли вы, что ждет вас за этими воротами? Это может быть как туалет, так и роскошный особняк. + +ent-CP14WindowDirectional = направленное окно + .desc = Не заляпайте стекло. + +ent-CP14WindowStoneBrick = окно в стене из каменного кирпича + .desc = Каменная кирпичная стена, и проделанным в ней стеклянным окном. + +ent-CP14WindowWooden = деревянное окно + .desc = Деревянная стена со стеклянным окном. + +ent-CP14OreSilver = серебро + .desc = Кусочек блестящего, теплого серебра. + +ent-CP14WallStoneSilverOre = { ent-CP14WallStone } + .desc = Природная стена из цельного камня. Вы видите в ней манящие частицы серебра. + .suffix = серебряная руда + +ent-CP14ClothingHeadWhiteBeret = белый берет + .desc = Это берет. + +ent-CP14ClothingShirtCottonBlueDark = хлопковая темная рубаха + .desc = { ent-CP14ClothingShirtCottonBlue.desc } + +ent-CP14ClothingEyesGoldGlasses = золотые очки + .desc = Аристократично, модно, да еще и с позолотой. + +ent-CP14ClothingAristocraticShoesBlack = черные туфли аристократа + .desc = Они достаточно дорогие, чтобы вы не хотели в них шляться по пещерам. + +ent-CP14RandomSpawnerGatherGloodgrass = спавнер кровьтравы + +ent-CP14CaveStoneWall = каменная порода + .desc = Прочная каменная природная стена. От нее веет пещерным холодом. + +ent-CP14CaveStoneWallCopperOre = { ent-CP14CaveStoneWall } + .desc = Прочная каменная природная стена. Здесь мерцают небольшие вкрапления меди. + .suffix = Медь + +ent-CP14CaveStoneWallIronOre = { ent-CP14CaveStoneWall } + .desc = Прочная каменная природная стена. Здесь мерцают небольшие вкрапления железа. + .suffix = Железо + +ent-CP14CaveStoneWallSilverOre = { ent-CP14CaveStoneWall } + .desc = Прочная каменная природная стена. Здесь мерцают небольшие вкрапления серебра. + .suffix = Серебро + +ent-CP14CaveStoneWallGoldOre = { ent-CP14CaveStoneWall } + .desc = Прочная каменная природная стена. Здесь мерцают небольшие вкрапления золота. + .suffix = Золото + +ent-CP14CardboardWall = стена из картона + .desc = Тонкая, непрочная стена из бумаги и картона. Пользуется популярностью в теплых странах. + +ent-CPBaseSharpeningStoneStructure = стационарный точильный камень + .desc = прочный, долговечный точильный камень, способный затачивать оружие без особого вреда для него. + +ent-CP14RawFoodMeat = Сырая баранина + .desc = Пахнет странно, но выглядит как обычное мясо... + +ent-CP14CookedFoodMeat = Стейк из баранины + .desc = Зажаренный кусок мяса. Запах первобытный. + +ent-CP14ActionSpellCureWounds = Лечение ран + .desc = Вы касаетесь существа, исцеляя его тело от физических повреждений. + +ent-CP14ActionSpellEarthWall = Земляная стена + .desc = Поднимает из недр прочную стену земли. + +ent-CP14ActionSpellFireball = Огненный шар + .desc = Эффективный метод уничтожения - взрывной огненный шар. + +ent-CP14ActionSpellFlameCreation = Создание пламени + .desc = В вашей руке образуется искусственное пламя, освещающее окружающее пространство. Вы можете бросить его, чтобы использовать в качестве одноразового оружия. + +ent-CP14ActionSpellFlashLight = Вспышка света + .desc = Создает вспышку яркого, ослепительного света. + +ent-CP14ActionSpellIceDagger = Ледяной кинжал + .desc = Материализация временного острого ледяного метательного кинжала. + +ent-CP14ActionSpellIceFloor = Ледяной пол + .desc = Покрывает определенный участок земли скользким льдом. + +ent-CP14ActionSpellIceShards = Ледяные осколки + .desc = Быстрые ледяные иглы для быстрой стрельбы по мишеням. + +ent-CP14ActionSpellShadowGrab = Теневой захват + .desc = Вы вызываете призрачную руку, которая притягивает к вам предмет или сущность. + +ent-CP14ActionSpellShadowStep = Теневой шаг + .desc = Шаг сквозь прореху реальности, позволяющий быстро преодолеть небольшое расстояние. + +ent-CP14ActionSpellSphereOfLight = Сфера света + .desc = Материализация яркого и безопасного источника света. + diff --git a/Tools/_CP14/LocalizationHelper/fluent/ftl_reader.py b/Tools/_CP14/LocalizationHelper/fluent/ftl_reader.py index b6cdd82f09..8935763cc7 100644 --- a/Tools/_CP14/LocalizationHelper/fluent/ftl_reader.py +++ b/Tools/_CP14/LocalizationHelper/fluent/ftl_reader.py @@ -4,9 +4,7 @@ def read_ftl(paths: tuple) -> dict: file and determines by the indentation in the line whether it is a new prototype or an attribute of an old one. """ - prototypes = { - - } + prototypes = {} last_prototype = "" path, error_log_path = paths @@ -36,4 +34,4 @@ def read_ftl(paths: tuple) -> dict: with open(error_log_path, "a") as file: file.write(f"FTL-ERROR:\nAn error occurred while reading a file {path}, error - {e}\n") - return prototypes \ No newline at end of file + return prototypes diff --git a/Tools/_CP14/LocalizationHelper/ftl_parser/ftl_parser.py b/Tools/_CP14/LocalizationHelper/ftl_parser/ftl_parser.py index 1b0a2165e2..1040986e94 100644 --- a/Tools/_CP14/LocalizationHelper/ftl_parser/ftl_parser.py +++ b/Tools/_CP14/LocalizationHelper/ftl_parser/ftl_parser.py @@ -15,9 +15,9 @@ class FTLParser(BaseParser): """ prototypes = {} - for path in self.get_files_paths(): + for path in self._get_files_paths(): - if not self.check_file_extension(path, ".ftl"): + if not self._check_file_extension(path, ".ftl"): continue file = ftl_reader.read_ftl((path, self.errors_path)) diff --git a/Tools/_CP14/LocalizationHelper/main.py b/Tools/_CP14/LocalizationHelper/main.py index 49902461d7..8b272a81de 100644 --- a/Tools/_CP14/LocalizationHelper/main.py +++ b/Tools/_CP14/LocalizationHelper/main.py @@ -64,6 +64,7 @@ def save_result(entities: str, file_name: str) -> None: print(f"{file_name} has been created\n") + def main(): """ The function gets paths, creates dictionaries with the help of parsers, @@ -120,7 +121,7 @@ def main(): if prototypes_dict[prototype].get("suffix"): prototype_attrs["suffix"] = prototypes_dict[prototype]["suffix"] - if any(prototype_attrs[attr] is not None for attr in ["name", "desc", "suffix"]): + if any(prototype_attrs[attr] is not None for attr in ("name", "desc", "suffix")): proto_ftl = ftl_writer.create_ftl(prototype, all_prototypes[prototype]) entities_ftl += proto_ftl @@ -136,4 +137,4 @@ def main(): if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/Tools/_CP14/LocalizationHelper/yml_parser/yml_parser.py b/Tools/_CP14/LocalizationHelper/yml_parser/yml_parser.py index 001691b9af..0d304e1ee2 100644 --- a/Tools/_CP14/LocalizationHelper/yml_parser/yml_parser.py +++ b/Tools/_CP14/LocalizationHelper/yml_parser/yml_parser.py @@ -1,5 +1,6 @@ import yaml from base_parser import BaseParser +import re class YMLParser(BaseParser): @@ -8,7 +9,7 @@ class YMLParser(BaseParser): """ @staticmethod - def check_proto_attrs(prototype: dict) -> bool: + def _check_proto_attrs(prototype: dict) -> bool: """ The function checks that the prototype at least has some attribute from the "attrs_lst". """ @@ -21,7 +22,7 @@ class YMLParser(BaseParser): return any(prototype.get(attr) is not None for attr in attrs_lst) @staticmethod - def get_proto_attrs(prototypes: dict, prototype: dict) -> None: + def _get_proto_attrs(prototypes: dict, prototype: dict) -> None: prototypes[prototype.get("id")] = { "parent": prototype.get("parent"), "name": prototype.get("name"), @@ -30,16 +31,72 @@ class YMLParser(BaseParser): } @staticmethod - def create_proto(file) -> str: - proto = "" - for line in file.readlines(): - # The PyYaml library cannot handle the following SpaceStation 14 prototype syntax - !type: ... - # We need to fix this :( - if "!type" in line: - continue - proto += line + def _fix_type_error_with_ignore(proto: str) -> str: + """ + Removes lines containing '!type' from the prototype string. - return proto + Args: + proto (str): The prototype string to be processed. + + Returns: + str: The prototype string with lines containing '!type' removed. + """ + proto_lines = proto.splitlines() + fixed_proto = "\n".join(line for line in proto_lines if "!type" not in line) + return fixed_proto + + def _load_proto(self, file, path) -> list[dict]: + """ + Loads and processes YAML prototypes from the file. + + Args: + file: The file object containing YAML data. + path (str): The path of the file used for error reporting. + + Returns: + list[dict]: A list of dictionaries representing the prototypes. + + Note: + Error handling is designed so that if one prototype fails to process, other prototypes + in the same file will still be processed. Here's how it works: + + 1. **Prototype Splitting:** The file is read and split into prototypes using a regular expression. + Each prototype is processed separately. + + 2. **Error Handling for Each Prototype:** + - **First Attempt:** If `yaml.safe_load` cannot process the prototype, it tries replacing `!type:` + strings and loads YAML again. + - **Second Attempt:** If that fails, it applies `_fix_type_error_with_ignore` to remove lines + with `!type` and attempts to load YAML again. + - **Exception Handling:** If errors occur in both attempts, they are logged to an error file, + and the current prototype is skipped. + + 3. **Adding Successful Data:** If the prototype is successfully processed, it is added to the + `prototypes` list. + """ + content_str = file.read() + prototypes_lst = re.split(r"\n(?=- type:)", content_str) + + prototypes = [] + for proto in prototypes_lst: + try: + fixed_proto = proto.replace("!type:", "type: bobo") + data = yaml.safe_load(fixed_proto) + if data is None: + continue + data = data[0] + except Exception: + try: + fixed_proto = self._fix_type_error_with_ignore(proto) + data = yaml.safe_load(fixed_proto)[0] + except Exception as e: + with open(self.errors_path, "a") as error_file: + error_file.write( + f"YML-ERROR:\nAn error occurred during prototype processing {path}, error - {e}\n") + continue + + prototypes.append(data) + return prototypes def yml_parser(self) -> dict: """ @@ -49,21 +106,16 @@ class YMLParser(BaseParser): """ prototypes = {} - for path in self.get_files_paths(): - if not self.check_file_extension(path, ".yml"): + for path in self._get_files_paths(): + if not self._check_file_extension(path, ".yml"): continue - try: - with open(path, encoding="utf-8") as file: - proto = self.create_proto(file) - data = yaml.safe_load(proto) - except Exception as e: - with open(self.errors_path, "a") as file: - file.write(f"YML-ERROR:\nAn error occurred during prototype processing {path}, error - {e}\n") - else: - if data is not None: - for prototype in data: - if self.check_proto_attrs(prototype): - self.get_proto_attrs(prototypes, prototype) + with open(path, encoding="utf-8") as file: + content = self._load_proto(file, path) + + if content is not None: + for prototype in content: + if self._check_proto_attrs(prototype): + self._get_proto_attrs(prototypes, prototype) return prototypes