From e9c8fbb114b7a6d6dadca42ac58e105e20caa335 Mon Sep 17 00:00:00 2001 From: Alexander Drozdov Date: Wed, 9 Jun 2021 00:23:17 +0300 Subject: [PATCH] WIP parse advanced mod desc --- src/assets/data/en/client_strings.ts | 7 ++++- src/assets/data/ru/client_strings.ts | 7 ++++- src/parser/advanced-mod-desc.ts | 42 ++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 src/parser/advanced-mod-desc.ts diff --git a/src/assets/data/en/client_strings.ts b/src/assets/data/en/client_strings.ts index afddbf3b..1236bce2 100644 --- a/src/assets/data/en/client_strings.ts +++ b/src/assets/data/en/client_strings.ts @@ -71,7 +71,12 @@ const dict = { 'Trap Disarmament': 'Trap Disarmament', 'Demolition': 'Demolition', 'Brute Force': 'Brute Force', - 'Mirrored': 'Mirrored' + 'Mirrored': 'Mirrored', + 'MODIFIER_LINE': /^(?[^"]+)(?:\s+"(?[^"]+)")?(?:\s+\(Tier: (?\d+)\))?(?:\s+\(Rank: (?\d+)\))?$/, + 'PREFIX_MODIFIER': 'Prefix Modifier', + 'SUFFIX_MODIFIER': 'Suffix Modifier', + 'CRAFTED_PREFIX': 'Master Crafted Prefix Modifier', + 'CRAFTED_SUFFIX': 'Master Crafted Suffix Modifier' } export default dict diff --git a/src/assets/data/ru/client_strings.ts b/src/assets/data/ru/client_strings.ts index 19950c9f..367920e5 100644 --- a/src/assets/data/ru/client_strings.ts +++ b/src/assets/data/ru/client_strings.ts @@ -73,7 +73,12 @@ const dict: TranslationDict = { 'Trap Disarmament': 'разминирование', 'Demolition': 'взрывное дело', 'Brute Force': 'грубая сила', - 'Mirrored': 'Отражено' + 'Mirrored': 'Отражено', + 'MODIFIER_LINE': /^(?[^"]+)(?:\s+"(?[^"]+)")?(?:\s+\(Уровень: (?\d+)\))?(?:\s+\(Ранг: (?\d+)\))?$/, + 'PREFIX_MODIFIER': 'Префикс', + 'SUFFIX_MODIFIER': 'Суффикс', + 'CRAFTED_PREFIX': 'Мастерский префикс', + 'CRAFTED_SUFFIX': 'Мастерский суффикс' } export default dict diff --git a/src/parser/advanced-mod-desc.ts b/src/parser/advanced-mod-desc.ts new file mode 100644 index 00000000..d3c072ae --- /dev/null +++ b/src/parser/advanced-mod-desc.ts @@ -0,0 +1,42 @@ +import { CLIENT_STRINGS as _$ } from '@/assets/data' + +// TODO "— Unscalable Value" + +interface ModifierInfo { + generation?: 'suffix' | 'prefix' + name?: string + tier?: number + rank?: number + tags?: string[] + catalystIncr?: number +} + +export function parseModInfoLine (line: string): ModifierInfo { + const [modText, tagsText, catalystText] = line + .slice(1, -1) + .split('\u2014') + .map(_ => _.trim()) + + const match = modText.match(_$.MODIFIER_LINE) + if (!match) { + throw new Error('Invalid regex for mod info line') + } + + let generation: ModifierInfo['generation'] + switch (match.groups!.type) { + case _$.PREFIX_MODIFIER: + case _$.CRAFTED_PREFIX: + generation = 'prefix'; break + case _$.SUFFIX_MODIFIER: + case _$.CRAFTED_SUFFIX: + generation = 'suffix'; break + } + + const name = match.groups!.name || undefined + const tier = Number(match.groups!.tier) || undefined + const rank = Number(match.groups!.rank) || undefined + const tags = tagsText ? tagsText.split(', ') : [] + const catalystIncr = parseInt(catalystText, 10) || undefined + + return { generation, name, tier, rank, tags, catalystIncr } +}