From 518f9fed9ee76b3f5884cffb3cd81413bc0937e9 Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Wed, 21 Oct 2026 13:03:30 -0300 Subject: [PATCH 01/19] refactor(items): the wings', capes' and pets' tooltip values come from their data The damage increase and absorption the tooltip code computed for the wings, capes and pets are their descriptions now, with placeholders over 11 new level bonus tables of Stats/ItemStats.json (wingDamageIncrease1st is 12 + 2 per level, ...): 24 wings and capes, plus Horn of Dinorant, Guardian Angel and Imp, whose fixed numbers are written in the text. Their cases leave RenderItemInfo; the two .resx texts no code uses any more go too (the shared "Increase %d%% of Damage" and "Increase speed" stay, other code prints them). The printf texts become data as the game showed them: %d is the placeholder or the number, %% is %. Two translations of the Imp's text had broken escapes ("% %", shown as %; Portuguese "% o", read as an octal number); they read as plain text now. A table no stat uses is no longer a warning of the stat file alone: it can be one for descriptions, so ValidateDescriptionPlaceholders warns about a table that neither a stat nor a description uses. A test compares every one of the 27 items at every level from +0 to +15 with the old formulas. --- docs/item-data.md | 9 +- src/Localization/Game.de.resx | 8 - src/Localization/Game.en.resx | 8 - src/Localization/Game.es.resx | 8 - src/Localization/Game.id.resx | 8 - src/Localization/Game.ja.resx | 8 - src/Localization/Game.pl.resx | 8 - src/Localization/Game.pt.resx | 8 - src/Localization/Game.ru.resx | 8 - src/Localization/Game.tl.resx | 8 - src/Localization/Game.uk.resx | 8 - src/Localization/Game.zh-TW.resx | 8 - src/bin/Data/Items/Group12_Wing.json | 1066 +++++++++++++++++ src/bin/Data/Items/Group13_Helper.json | 113 ++ src/bin/Data/Items/Stats/ItemStats.json | 66 + .../GameData/ItemData/ItemDataValidation.cpp | 10 + .../GameData/ItemData/ItemDataValidation.h | 3 +- .../GameData/ItemData/ItemStatProfiles.cpp | 23 + .../Data/GameData/ItemData/ItemStatProfiles.h | 3 + .../Data/GameData/ItemData/ItemStatsJson.cpp | 30 - src/source/Engine/Object/ZzzInventory.cpp | 90 +- tests/data/test_item_database_files.cpp | 82 ++ .../test_item_description_placeholders.cpp | 11 + tests/data/test_item_stats_json.cpp | 7 +- 24 files changed, 1389 insertions(+), 212 deletions(-) diff --git a/docs/item-data.md b/docs/item-data.md index 39a4f6ac71..41645578bc 100644 --- a/docs/item-data.md +++ b/docs/item-data.md @@ -81,7 +81,7 @@ read as the English name only; saving writes the object form. | Field | Meaning | |---|---| | `tags` | Categories the game code asks for, e.g. `["mount", "flying"]`; see [Tags](#tags) | -| `description` | Lines the tooltip shows for the item, after its stats, e.g. the Jewel of Bless's "It is used to increase your item level up to 6". The lines the tooltip code computes from the item (the wings' damage and absorption, the Guardian Angel and the Imp, the Town Portal scroll's delay) are written after the description. A text can have [placeholders](#description-placeholders). Each line is `{"text": ..., "color": ...}`: `text` is written like `name` (a plain English text, or the texts by language), an empty text (`{"text": ""}`) is a blank line, a long line wraps at about the width of the original tooltips' widest lines, and `\n` in a text breaks the line there. `color` is one of the tooltip colors: `white` (left out), `blue`, `red`, `yellow`, `green`, `darkRed`, `purple`, `darkBlue`, `darkYellow`, `greenBlue`, `gray`, `redPurple`, `violet`, `orange`. A client-only field; the bmd import keeps it | +| `description` | Lines the tooltip shows for the item, after its stats, e.g. the Jewel of Bless's "It is used to increase your item level up to 6". The Town Portal scroll's delay and a few other lines are still written by the tooltip code, after the description. A text can have [placeholders](#description-placeholders). Each line is `{"text": ..., "color": ...}`: `text` is written like `name` (a plain English text, or the texts by language), an empty text (`{"text": ""}`) is a blank line, a long line wraps at about the width of the original tooltips' widest lines, and `\n` in a text breaks the line there. `color` is one of the tooltip colors: `white` (left out), `blue`, `red`, `yellow`, `green`, `darkRed`, `purple`, `darkBlue`, `darkYellow`, `greenBlue`, `gray`, `redPurple`, `violet`, `orange`. A client-only field; the bmd import keeps it | | `width`, `height` | Size in inventory slots | | `slot` | Equipment slot: `mainHand`, `offHand`, `helm`, `armor`, `pants`, `gloves`, `boots`, `wings`, `pet`, `pendant`, `ring`. Left out = not equippable | | `wingTier` | Only for wings: `small`, `first`, `second`, `third`. The wing formulas (defense, defense per level, damage increase, absorption) depend on it; excellent second and third tier wings get no extra durability, and the chaos mix knows a wing's tier from it | @@ -118,6 +118,10 @@ is one of: - a **level bonus table** of [`Stats/ItemStats.json`](#item-stats-by-level), by its name: the table's value at the item's + level (`damageIncreaseWeapons` is 3 at +1 and 66 at +15). A new table is a new placeholder. + The wings, capes and pets show their damage increase and absorption this + way: `"Increase {wingDamageIncrease1st}% of Damage"` over the table + `wingDamageIncrease1st` (`{"values": 12, "perLevel": 2}`, 12 + 2 per level). + Such tables are only for descriptions: no stat profile names them. **Errors** (when the item data loads, in the save checks and in Import from bmd): @@ -348,7 +352,8 @@ a `table` the file does not have; a term that is neither an object nor formula that is neither an object nor `"base"`; a `basis` other than `"levelRequirement"`; a caption that is neither a text nor texts by language; and `profiles` that are not a list of objects. -**Warnings:** unknown fields, a table no stat uses, and a caption without +**Warnings:** unknown fields, a table that neither a stat nor a +[description placeholder](#description-placeholders) uses, and a caption without English. An item whose `statProfile` the file does not have is an error, and a profile no item names is a warning. diff --git a/src/Localization/Game.de.resx b/src/Localization/Game.de.resx index 8400d03c7b..11fd416e3c 100644 --- a/src/Localization/Game.de.resx +++ b/src/Localization/Game.de.resx @@ -2165,10 +2165,6 @@ Absorbiert 30%% des Schadens legacy_id=575 - - Erhöht Angriffs- und Zaubereischaden um 30%% - legacy_id=576 - Erhöht den Schaden um %d%% legacy_id=577 @@ -2797,10 +2793,6 @@ Beschwörung legacy_id=738 - - Max. HP +%d erhöht - legacy_id=739 - HP +%d erhöht legacy_id=740 diff --git a/src/Localization/Game.en.resx b/src/Localization/Game.en.resx index 9f816fff4e..16f11c751d 100644 --- a/src/Localization/Game.en.resx +++ b/src/Localization/Game.en.resx @@ -2441,10 +2441,6 @@ Absorb 30%% of damage legacy_id=575 - - Increase 30%% of attacking & Wizardry Dmg - legacy_id=576 - Increase %d%% of Damage legacy_id=577 @@ -3073,10 +3069,6 @@ Summon legacy_id=738 - - Max HP +%d increased - legacy_id=739 - HP +%d increased legacy_id=740 diff --git a/src/Localization/Game.es.resx b/src/Localization/Game.es.resx index a8318774aa..6a8d4d5a25 100644 --- a/src/Localization/Game.es.resx +++ b/src/Localization/Game.es.resx @@ -2145,10 +2145,6 @@ Absorbe el 30% del daño % of legacy_id=575 - - Aumenta 30% % of ataque y daño de hechicería - legacy_id=576 - Aumenta el daño de %d%% of legacy_id=577 @@ -2777,10 +2773,6 @@ Convocar legacy_id=738 - - HP máximo +%d aumentado - legacy_id=739 - HP +%d aumentado legacy_id=740 diff --git a/src/Localization/Game.id.resx b/src/Localization/Game.id.resx index 0602f07308..1e08a1868c 100644 --- a/src/Localization/Game.id.resx +++ b/src/Localization/Game.id.resx @@ -2145,10 +2145,6 @@ Menyerap 30% kerusakan % of legacy_id=575 - - Meningkatkan 30%% of serangan & Dmg Sihir - legacy_id=576 - Meningkatkan Kerusakan %d%% of legacy_id=577 @@ -2777,10 +2773,6 @@ Memanggil legacy_id=738 - - HP Maks +%d meningkat - legacy_id=739 - HP +%d meningkat legacy_id=740 diff --git a/src/Localization/Game.ja.resx b/src/Localization/Game.ja.resx index 5f05e9db50..fbf8c20f75 100644 --- a/src/Localization/Game.ja.resx +++ b/src/Localization/Game.ja.resx @@ -2051,10 +2051,6 @@ ダメ―ジ 30%%吸収 legacy_id=575 - - 攻撃力、力 30%%増加 - legacy_id=576 - ダメージ %d%%増加 legacy_id=577 @@ -2671,10 +2667,6 @@ 召喚 legacy_id=738 - - 最大生命力 +%d増加 - legacy_id=739 - 生命 +%d増加 legacy_id=740 diff --git a/src/Localization/Game.pl.resx b/src/Localization/Game.pl.resx index 06bcbde1e1..ab3f34b14b 100644 --- a/src/Localization/Game.pl.resx +++ b/src/Localization/Game.pl.resx @@ -2145,10 +2145,6 @@ Pochłania 30%% obrażeń legacy_id=575 - - Zwiększa obrażenia ataku i magii o 30%% - legacy_id=576 - Zwiększa obrażenia o %d%% legacy_id=577 @@ -2777,10 +2773,6 @@ Wezwać legacy_id=738 - - Zwiększono maksymalne HP +%d - legacy_id=739 - Zwiększono HP +%d legacy_id=740 diff --git a/src/Localization/Game.pt.resx b/src/Localization/Game.pt.resx index 2e73db6767..142b0dcdd1 100644 --- a/src/Localization/Game.pt.resx +++ b/src/Localization/Game.pt.resx @@ -2145,10 +2145,6 @@ Absorva 30% de dano % of legacy_id=575 - - Aumenta em 30% o dano de ataque e magia de % of - legacy_id=576 - Aumentar o dano de %d%% of legacy_id=577 @@ -2777,10 +2773,6 @@ Convocar legacy_id=738 - - HP máximo +%d aumentado - legacy_id=739 - HP +%d aumentado legacy_id=740 diff --git a/src/Localization/Game.ru.resx b/src/Localization/Game.ru.resx index a7c35db726..d2afc3c57e 100644 --- a/src/Localization/Game.ru.resx +++ b/src/Localization/Game.ru.resx @@ -2145,10 +2145,6 @@ Поглощает 30%% of урона legacy_id=575 - - Увеличение на 30% % of урона от атак и волшебства. - legacy_id=576 - Увеличение урона %d%% of legacy_id=577 @@ -2777,10 +2773,6 @@ Вызвать legacy_id=738 - - Макс. HP +%d увеличен. - legacy_id=739 - HP +%d увеличено. legacy_id=740 diff --git a/src/Localization/Game.tl.resx b/src/Localization/Game.tl.resx index f78768525f..1fd3ae1afb 100644 --- a/src/Localization/Game.tl.resx +++ b/src/Localization/Game.tl.resx @@ -2145,10 +2145,6 @@ Sumipsip ng 30%% of pinsala legacy_id=575 - - Dagdagan ang 30%% of pag-atake at Wizardry Dmg - legacy_id=576 - Dagdagan ang %d%% of Pinsala legacy_id=577 @@ -2777,10 +2773,6 @@ Ipatawag legacy_id=738 - - Tumaas ang Max HP +%d - legacy_id=739 - Tumaas ang HP +%d legacy_id=740 diff --git a/src/Localization/Game.uk.resx b/src/Localization/Game.uk.resx index 75495404cd..07e5dd426a 100644 --- a/src/Localization/Game.uk.resx +++ b/src/Localization/Game.uk.resx @@ -2145,10 +2145,6 @@ Поглинає 30%% of шкоди legacy_id=575 - - Збільште на 30%% of шкоду від атаки та магії - legacy_id=576 - Збільшення шкоди на %d%% of legacy_id=577 @@ -2777,10 +2773,6 @@ Викликати legacy_id=738 - - Макс HP +%d збільшено - legacy_id=739 - HP +%d збільшено legacy_id=740 diff --git a/src/Localization/Game.zh-TW.resx b/src/Localization/Game.zh-TW.resx index 48e3476b31..2f4381958b 100644 --- a/src/Localization/Game.zh-TW.resx +++ b/src/Localization/Game.zh-TW.resx @@ -2145,10 +2145,6 @@ 吸收30%% of傷害 legacy_id=575 - - 攻擊力和魔法傷害增加30%% of - legacy_id=576 - 增加 %d%% of 傷害 legacy_id=577 @@ -2777,10 +2773,6 @@ 召喚 legacy_id=738 - - 最大生命值+%d增加 - legacy_id=739 - HP +%d 增加 legacy_id=740 diff --git a/src/bin/Data/Items/Group12_Wing.json b/src/bin/Data/Items/Group12_Wing.json index bd268d31d2..55ee48b5a9 100644 --- a/src/bin/Data/Items/Group12_Wing.json +++ b/src/bin/Data/Items/Group12_Wing.json @@ -11,6 +11,53 @@ "pt": "Asas do elfo" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", + "es": "Aumenta el daño de {wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", + "ja": "ダメージ {wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", + "ru": "Увеличение урона {wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", + "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", + "ja": "ダメージ {wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb1st}% of", + "ru": "Поглощение {wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", + "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 3, "height": 2, "slot": "wings", @@ -35,6 +82,53 @@ "pt": "Asas do paraíso" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", + "es": "Aumenta el daño de {wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", + "ja": "ダメージ {wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", + "ru": "Увеличение урона {wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", + "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", + "ja": "ダメージ {wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb1st}% of", + "ru": "Поглощение {wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", + "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 5, "height": 3, "slot": "wings", @@ -60,6 +154,53 @@ "pt": "Asas de Satã" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", + "es": "Aumenta el daño de {wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", + "ja": "ダメージ {wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", + "ru": "Увеличение урона {wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", + "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", + "ja": "ダメージ {wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb1st}% of", + "ru": "Поглощение {wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", + "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 5, "height": 2, "slot": "wings", @@ -85,6 +226,53 @@ "pt": "Asas dos espíritos" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease2nd}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease2nd}%", + "es": "Aumenta el daño de {wingDamageIncrease2nd}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease2nd}% of", + "ja": "ダメージ {wingDamageIncrease2nd}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease2nd}%", + "pt": "Aumentar o dano de {wingDamageIncrease2nd}% of", + "ru": "Увеличение урона {wingDamageIncrease2nd}% of", + "tl": "Dagdagan ang {wingDamageIncrease2nd}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease2nd}% of", + "zh-TW": "增加 {wingDamageIncrease2nd}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb2nd}% of Damage", + "de": "Absorbiert {wingDamageAbsorb2nd}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb2nd}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb2nd}% of", + "ja": "ダメージ {wingDamageAbsorb2nd}%吸収", + "pl": "Pochłania {wingDamageAbsorb2nd}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb2nd}% of", + "ru": "Поглощение {wingDamageAbsorb2nd}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb2nd}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb2nd}% of", + "zh-TW": "吸收{wingDamageAbsorb2nd}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 5, "height": 3, "slot": "wings", @@ -109,6 +297,53 @@ "pt": "Asas da alma" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease2nd}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease2nd}%", + "es": "Aumenta el daño de {wingDamageIncrease2nd}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease2nd}% of", + "ja": "ダメージ {wingDamageIncrease2nd}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease2nd}%", + "pt": "Aumentar o dano de {wingDamageIncrease2nd}% of", + "ru": "Увеличение урона {wingDamageIncrease2nd}% of", + "tl": "Dagdagan ang {wingDamageIncrease2nd}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease2nd}% of", + "zh-TW": "增加 {wingDamageIncrease2nd}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb2nd}% of Damage", + "de": "Absorbiert {wingDamageAbsorb2nd}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb2nd}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb2nd}% of", + "ja": "ダメージ {wingDamageAbsorb2nd}%吸収", + "pl": "Pochłania {wingDamageAbsorb2nd}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb2nd}% of", + "ru": "Поглощение {wingDamageAbsorb2nd}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb2nd}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb2nd}% of", + "zh-TW": "吸收{wingDamageAbsorb2nd}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 5, "height": 3, "slot": "wings", @@ -133,6 +368,53 @@ "pt": "Asas do dragão" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease2nd}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease2nd}%", + "es": "Aumenta el daño de {wingDamageIncrease2nd}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease2nd}% of", + "ja": "ダメージ {wingDamageIncrease2nd}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease2nd}%", + "pt": "Aumentar o dano de {wingDamageIncrease2nd}% of", + "ru": "Увеличение урона {wingDamageIncrease2nd}% of", + "tl": "Dagdagan ang {wingDamageIncrease2nd}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease2nd}% of", + "zh-TW": "增加 {wingDamageIncrease2nd}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb2nd}% of Damage", + "de": "Absorbiert {wingDamageAbsorb2nd}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb2nd}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb2nd}% of", + "ja": "ダメージ {wingDamageAbsorb2nd}%吸収", + "pl": "Pochłania {wingDamageAbsorb2nd}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb2nd}% of", + "ru": "Поглощение {wingDamageAbsorb2nd}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb2nd}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb2nd}% of", + "zh-TW": "吸收{wingDamageAbsorb2nd}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 3, "height": 3, "slot": "wings", @@ -157,6 +439,53 @@ "pt": "Asas da escuridão" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease2nd}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease2nd}%", + "es": "Aumenta el daño de {wingDamageIncrease2nd}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease2nd}% of", + "ja": "ダメージ {wingDamageIncrease2nd}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease2nd}%", + "pt": "Aumentar o dano de {wingDamageIncrease2nd}% of", + "ru": "Увеличение урона {wingDamageIncrease2nd}% of", + "tl": "Dagdagan ang {wingDamageIncrease2nd}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease2nd}% of", + "zh-TW": "增加 {wingDamageIncrease2nd}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb2nd}% of Damage", + "de": "Absorbiert {wingDamageAbsorb2nd}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb2nd}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb2nd}% of", + "ja": "ダメージ {wingDamageAbsorb2nd}%吸収", + "pl": "Pochłania {wingDamageAbsorb2nd}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb2nd}% of", + "ru": "Поглощение {wingDamageAbsorb2nd}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb2nd}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb2nd}% of", + "zh-TW": "吸收{wingDamageAbsorb2nd}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 4, "height": 2, "slot": "wings", @@ -676,6 +1005,53 @@ "pt": "Asa da Tempestade" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease3rd}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease3rd}%", + "es": "Aumenta el daño de {wingDamageIncrease3rd}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease3rd}% of", + "ja": "ダメージ {wingDamageIncrease3rd}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease3rd}%", + "pt": "Aumentar o dano de {wingDamageIncrease3rd}% of", + "ru": "Увеличение урона {wingDamageIncrease3rd}% of", + "tl": "Dagdagan ang {wingDamageIncrease3rd}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease3rd}% of", + "zh-TW": "增加 {wingDamageIncrease3rd}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb3rd}% of Damage", + "de": "Absorbiert {wingDamageAbsorb3rd}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb3rd}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb3rd}% of", + "ja": "ダメージ {wingDamageAbsorb3rd}%吸収", + "pl": "Pochłania {wingDamageAbsorb3rd}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb3rd}% of", + "ru": "Поглощение {wingDamageAbsorb3rd}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb3rd}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb3rd}% of", + "zh-TW": "吸收{wingDamageAbsorb3rd}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 4, "height": 3, "slot": "wings", @@ -700,6 +1076,53 @@ "pt": "Asa da eternidade" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease3rd}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease3rd}%", + "es": "Aumenta el daño de {wingDamageIncrease3rd}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease3rd}% of", + "ja": "ダメージ {wingDamageIncrease3rd}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease3rd}%", + "pt": "Aumentar o dano de {wingDamageIncrease3rd}% of", + "ru": "Увеличение урона {wingDamageIncrease3rd}% of", + "tl": "Dagdagan ang {wingDamageIncrease3rd}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease3rd}% of", + "zh-TW": "增加 {wingDamageIncrease3rd}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb3rd}% of Damage", + "de": "Absorbiert {wingDamageAbsorb3rd}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb3rd}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb3rd}% of", + "ja": "ダメージ {wingDamageAbsorb3rd}%吸収", + "pl": "Pochłania {wingDamageAbsorb3rd}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb3rd}% of", + "ru": "Поглощение {wingDamageAbsorb3rd}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb3rd}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb3rd}% of", + "zh-TW": "吸收{wingDamageAbsorb3rd}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 4, "height": 3, "slot": "wings", @@ -724,6 +1147,53 @@ "pt": "Asa da ilusão" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease3rd}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease3rd}%", + "es": "Aumenta el daño de {wingDamageIncrease3rd}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease3rd}% of", + "ja": "ダメージ {wingDamageIncrease3rd}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease3rd}%", + "pt": "Aumentar o dano de {wingDamageIncrease3rd}% of", + "ru": "Увеличение урона {wingDamageIncrease3rd}% of", + "tl": "Dagdagan ang {wingDamageIncrease3rd}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease3rd}% of", + "zh-TW": "增加 {wingDamageIncrease3rd}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb3rd}% of Damage", + "de": "Absorbiert {wingDamageAbsorb3rd}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb3rd}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb3rd}% of", + "ja": "ダメージ {wingDamageAbsorb3rd}%吸収", + "pl": "Pochłania {wingDamageAbsorb3rd}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb3rd}% of", + "ru": "Поглощение {wingDamageAbsorb3rd}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb3rd}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb3rd}% of", + "zh-TW": "吸收{wingDamageAbsorb3rd}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 4, "height": 3, "slot": "wings", @@ -748,6 +1218,53 @@ "pt": "Asa da ruína" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease3rd}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease3rd}%", + "es": "Aumenta el daño de {wingDamageIncrease3rd}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease3rd}% of", + "ja": "ダメージ {wingDamageIncrease3rd}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease3rd}%", + "pt": "Aumentar o dano de {wingDamageIncrease3rd}% of", + "ru": "Увеличение урона {wingDamageIncrease3rd}% of", + "tl": "Dagdagan ang {wingDamageIncrease3rd}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease3rd}% of", + "zh-TW": "增加 {wingDamageIncrease3rd}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb3rd}% of Damage", + "de": "Absorbiert {wingDamageAbsorb3rd}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb3rd}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb3rd}% of", + "ja": "ダメージ {wingDamageAbsorb3rd}%吸収", + "pl": "Pochłania {wingDamageAbsorb3rd}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb3rd}% of", + "ru": "Поглощение {wingDamageAbsorb3rd}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb3rd}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb3rd}% of", + "zh-TW": "吸收{wingDamageAbsorb3rd}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 4, "height": 3, "slot": "wings", @@ -772,6 +1289,53 @@ "pt": "Capa do Imperador" }, "tags": ["cape", "valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease3rd}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease3rd}%", + "es": "Aumenta el daño de {wingDamageIncrease3rd}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease3rd}% of", + "ja": "ダメージ {wingDamageIncrease3rd}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease3rd}%", + "pt": "Aumentar o dano de {wingDamageIncrease3rd}% of", + "ru": "Увеличение урона {wingDamageIncrease3rd}% of", + "tl": "Dagdagan ang {wingDamageIncrease3rd}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease3rd}% of", + "zh-TW": "增加 {wingDamageIncrease3rd}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {capeDamageAbsorb3rd}% of Damage", + "de": "Absorbiert {capeDamageAbsorb3rd}% des Schadens", + "es": "Absorber daño {capeDamageAbsorb3rd}% of", + "id": "Menyerap Kerusakan {capeDamageAbsorb3rd}% of", + "ja": "ダメージ {capeDamageAbsorb3rd}%吸収", + "pl": "Pochłania {capeDamageAbsorb3rd}% obrażeń", + "pt": "Absorver Dano {capeDamageAbsorb3rd}% of", + "ru": "Поглощение {capeDamageAbsorb3rd}% of урона", + "tl": "Isipsip ang {capeDamageAbsorb3rd}% of Pinsala", + "uk": "Поглинання шкоди {capeDamageAbsorb3rd}% of", + "zh-TW": "吸收{capeDamageAbsorb3rd}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 2, "height": 3, "slot": "wings", @@ -796,6 +1360,53 @@ "pt": "Asa da maldição" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", + "es": "Aumenta el daño de {wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", + "ja": "ダメージ {wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", + "ru": "Увеличение урона {wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", + "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", + "ja": "ダメージ {wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb1st}% of", + "ru": "Поглощение {wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", + "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 4, "height": 2, "slot": "wings", @@ -820,6 +1431,53 @@ "pt": "Asa do desespero" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease2nd}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease2nd}%", + "es": "Aumenta el daño de {wingDamageIncrease2nd}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease2nd}% of", + "ja": "ダメージ {wingDamageIncrease2nd}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease2nd}%", + "pt": "Aumentar o dano de {wingDamageIncrease2nd}% of", + "ru": "Увеличение урона {wingDamageIncrease2nd}% of", + "tl": "Dagdagan ang {wingDamageIncrease2nd}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease2nd}% of", + "zh-TW": "增加 {wingDamageIncrease2nd}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb2nd}% of Damage", + "de": "Absorbiert {wingDamageAbsorb2nd}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb2nd}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb2nd}% of", + "ja": "ダメージ {wingDamageAbsorb2nd}%吸収", + "pl": "Pochłania {wingDamageAbsorb2nd}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb2nd}% of", + "ru": "Поглощение {wingDamageAbsorb2nd}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb2nd}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb2nd}% of", + "zh-TW": "吸收{wingDamageAbsorb2nd}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 4, "height": 3, "slot": "wings", @@ -844,6 +1502,53 @@ "pt": "Asa da dimensão" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease3rd}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease3rd}%", + "es": "Aumenta el daño de {wingDamageIncrease3rd}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease3rd}% of", + "ja": "ダメージ {wingDamageIncrease3rd}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease3rd}%", + "pt": "Aumentar o dano de {wingDamageIncrease3rd}% of", + "ru": "Увеличение урона {wingDamageIncrease3rd}% of", + "tl": "Dagdagan ang {wingDamageIncrease3rd}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease3rd}% of", + "zh-TW": "增加 {wingDamageIncrease3rd}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb3rd}% of Damage", + "de": "Absorbiert {wingDamageAbsorb3rd}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb3rd}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb3rd}% of", + "ja": "ダメージ {wingDamageAbsorb3rd}%吸収", + "pl": "Pochłania {wingDamageAbsorb3rd}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb3rd}% of", + "ru": "Поглощение {wingDamageAbsorb3rd}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb3rd}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb3rd}% of", + "zh-TW": "吸收{wingDamageAbsorb3rd}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 4, "height": 3, "slot": "wings", @@ -965,6 +1670,38 @@ "pt": "Manto do Guerreiro" }, "tags": ["cape", "valuable"], + "description": [ + { + "text": { + "en": "Increase {capeDamageIncrease}% of Damage", + "de": "Erhöht den Schaden um {capeDamageIncrease}%", + "es": "Aumenta el daño de {capeDamageIncrease}% of", + "id": "Meningkatkan Kerusakan {capeDamageIncrease}% of", + "ja": "ダメージ {capeDamageIncrease}%増加", + "pl": "Zwiększa obrażenia o {capeDamageIncrease}%", + "pt": "Aumentar o dano de {capeDamageIncrease}% of", + "ru": "Увеличение урона {capeDamageIncrease}% of", + "tl": "Dagdagan ang {capeDamageIncrease}% of Pinsala", + "uk": "Збільшення шкоди на {capeDamageIncrease}% of", + "zh-TW": "增加 {capeDamageIncrease}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {capeOfFighterDamageAbsorb}% of Damage", + "de": "Absorbiert {capeOfFighterDamageAbsorb}% des Schadens", + "es": "Absorber daño {capeOfFighterDamageAbsorb}% of", + "id": "Menyerap Kerusakan {capeOfFighterDamageAbsorb}% of", + "ja": "ダメージ {capeOfFighterDamageAbsorb}%吸収", + "pl": "Pochłania {capeOfFighterDamageAbsorb}% obrażeń", + "pt": "Absorver Dano {capeOfFighterDamageAbsorb}% of", + "ru": "Поглощение {capeOfFighterDamageAbsorb}% of урона", + "tl": "Isipsip ang {capeOfFighterDamageAbsorb}% of Pinsala", + "uk": "Поглинання шкоди {capeOfFighterDamageAbsorb}% of", + "zh-TW": "吸收{capeOfFighterDamageAbsorb}% of傷害" + } + } + ], "width": 2, "height": 3, "slot": "wings", @@ -989,6 +1726,53 @@ "pt": "Manto Reinante" }, "tags": ["cape", "valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease3rd}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease3rd}%", + "es": "Aumenta el daño de {wingDamageIncrease3rd}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease3rd}% of", + "ja": "ダメージ {wingDamageIncrease3rd}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease3rd}%", + "pt": "Aumentar o dano de {wingDamageIncrease3rd}% of", + "ru": "Увеличение урона {wingDamageIncrease3rd}% of", + "tl": "Dagdagan ang {wingDamageIncrease3rd}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease3rd}% of", + "zh-TW": "增加 {wingDamageIncrease3rd}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {capeDamageAbsorb3rd}% of Damage", + "de": "Absorbiert {capeDamageAbsorb3rd}% des Schadens", + "es": "Absorber daño {capeDamageAbsorb3rd}% of", + "id": "Menyerap Kerusakan {capeDamageAbsorb3rd}% of", + "ja": "ダメージ {capeDamageAbsorb3rd}%吸収", + "pl": "Pochłania {capeDamageAbsorb3rd}% obrażeń", + "pt": "Absorver Dano {capeDamageAbsorb3rd}% of", + "ru": "Поглощение {capeDamageAbsorb3rd}% of урона", + "tl": "Isipsip ang {capeDamageAbsorb3rd}% of Pinsala", + "uk": "Поглинання шкоди {capeDamageAbsorb3rd}% of", + "zh-TW": "吸收{capeDamageAbsorb3rd}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 2, "height": 3, "slot": "wings", @@ -1766,6 +2550,53 @@ "pt": "Pequena capa do Lorde" }, "tags": ["cape", "cashShop", "valuable"], + "description": [ + { + "text": { + "en": "Increase {capeDamageIncrease}% of Damage", + "de": "Erhöht den Schaden um {capeDamageIncrease}%", + "es": "Aumenta el daño de {capeDamageIncrease}% of", + "id": "Meningkatkan Kerusakan {capeDamageIncrease}% of", + "ja": "ダメージ {capeDamageIncrease}%増加", + "pl": "Zwiększa obrażenia o {capeDamageIncrease}%", + "pt": "Aumentar o dano de {capeDamageIncrease}% of", + "ru": "Увеличение урона {capeDamageIncrease}% of", + "tl": "Dagdagan ang {capeDamageIncrease}% of Pinsala", + "uk": "Збільшення шкоди на {capeDamageIncrease}% of", + "zh-TW": "增加 {capeDamageIncrease}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {smallCapeDamageAbsorb}% of Damage", + "de": "Absorbiert {smallCapeDamageAbsorb}% des Schadens", + "es": "Absorber daño {smallCapeDamageAbsorb}% of", + "id": "Menyerap Kerusakan {smallCapeDamageAbsorb}% of", + "ja": "ダメージ {smallCapeDamageAbsorb}%吸収", + "pl": "Pochłania {smallCapeDamageAbsorb}% obrażeń", + "pt": "Absorver Dano {smallCapeDamageAbsorb}% of", + "ru": "Поглощение {smallCapeDamageAbsorb}% of урона", + "tl": "Isipsip ang {smallCapeDamageAbsorb}% of Pinsala", + "uk": "Поглинання шкоди {smallCapeDamageAbsorb}% of", + "zh-TW": "吸收{smallCapeDamageAbsorb}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 2, "height": 2, "slot": "wings", @@ -1796,6 +2627,53 @@ "pt": "Pequenas asas da maldição" }, "tags": ["cashShop", "valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", + "es": "Aumenta el daño de {wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", + "ja": "ダメージ {wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", + "ru": "Увеличение урона {wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", + "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", + "ja": "ダメージ {wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb1st}% of", + "ru": "Поглощение {wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", + "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 3, "height": 2, "slot": "wings", @@ -1826,6 +2704,53 @@ "pt": "Pequenas asas do elfo" }, "tags": ["cashShop", "valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", + "es": "Aumenta el daño de {wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", + "ja": "ダメージ {wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", + "ru": "Увеличение урона {wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", + "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", + "ja": "ダメージ {wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb1st}% of", + "ru": "Поглощение {wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", + "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 3, "height": 2, "slot": "wings", @@ -1856,6 +2781,53 @@ "pt": "Pequenas asas do paraíso" }, "tags": ["cashShop", "valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", + "es": "Aumenta el daño de {wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", + "ja": "ダメージ {wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", + "ru": "Увеличение урона {wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", + "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", + "ja": "ダメージ {wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb1st}% of", + "ru": "Поглощение {wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", + "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 3, "height": 2, "slot": "wings", @@ -1887,6 +2859,53 @@ "pt": "Pequenas asas de Satã" }, "tags": ["cashShop", "valuable"], + "description": [ + { + "text": { + "en": "Increase {wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", + "es": "Aumenta el daño de {wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", + "ja": "ダメージ {wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", + "ru": "Увеличение урона {wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", + "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", + "ja": "ダメージ {wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {wingDamageAbsorb1st}% of", + "ru": "Поглощение {wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", + "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 3, "height": 2, "slot": "wings", @@ -1918,6 +2937,53 @@ "pt": "Manto de Pequeno Guerreiro" }, "tags": ["cape", "cashShop", "valuable"], + "description": [ + { + "text": { + "en": "Increase {capeDamageIncrease}% of Damage", + "de": "Erhöht den Schaden um {capeDamageIncrease}%", + "es": "Aumenta el daño de {capeDamageIncrease}% of", + "id": "Meningkatkan Kerusakan {capeDamageIncrease}% of", + "ja": "ダメージ {capeDamageIncrease}%増加", + "pl": "Zwiększa obrażenia o {capeDamageIncrease}%", + "pt": "Aumentar o dano de {capeDamageIncrease}% of", + "ru": "Увеличение урона {capeDamageIncrease}% of", + "tl": "Dagdagan ang {capeDamageIncrease}% of Pinsala", + "uk": "Збільшення шкоди на {capeDamageIncrease}% of", + "zh-TW": "增加 {capeDamageIncrease}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {smallCapeDamageAbsorb}% of Damage", + "de": "Absorbiert {smallCapeDamageAbsorb}% des Schadens", + "es": "Absorber daño {smallCapeDamageAbsorb}% of", + "id": "Menyerap Kerusakan {smallCapeDamageAbsorb}% of", + "ja": "ダメージ {smallCapeDamageAbsorb}%吸収", + "pl": "Pochłania {smallCapeDamageAbsorb}% obrażeń", + "pt": "Absorver Dano {smallCapeDamageAbsorb}% of", + "ru": "Поглощение {smallCapeDamageAbsorb}% of урона", + "tl": "Isipsip ang {smallCapeDamageAbsorb}% of Pinsala", + "uk": "Поглинання шкоди {smallCapeDamageAbsorb}% of", + "zh-TW": "吸收{smallCapeDamageAbsorb}% of傷害" + } + }, + { + "text": { + "en": "Increase speed", + "de": "Erhöht die Geschwindigkeit", + "es": "aumentar la velocidad", + "id": "Tingkatkan kecepatan", + "ja": "移動速度向上", + "pl": "Zwiększ prędkość", + "pt": "Aumentar a velocidade", + "ru": "Увеличить скорость", + "tl": "Dagdagan ang bilis", + "uk": "Збільште швидкість", + "zh-TW": "提高速度" + } + } + ], "width": 2, "height": 2, "slot": "wings", diff --git a/src/bin/Data/Items/Group13_Helper.json b/src/bin/Data/Items/Group13_Helper.json index 17e79f0a14..3e07870b63 100644 --- a/src/bin/Data/Items/Group13_Helper.json +++ b/src/bin/Data/Items/Group13_Helper.json @@ -10,6 +10,38 @@ "es": "Angel Guardián", "pt": "Anjo guardião" }, + "description": [ + { + "text": { + "en": "Absorb 20% of Damage", + "de": "Absorbiert 20% des Schadens", + "es": "Absorber daño 20% of", + "id": "Menyerap Kerusakan 20% of", + "ja": "ダメージ 20%吸収", + "pl": "Pochłania 20% obrażeń", + "pt": "Absorver Dano 20% of", + "ru": "Поглощение 20% of урона", + "tl": "Isipsip ang 20% of Pinsala", + "uk": "Поглинання шкоди 20% of", + "zh-TW": "吸收20% of傷害" + } + }, + { + "text": { + "en": "Max HP +50 increased", + "de": "Max. HP +50 erhöht", + "es": "HP máximo +50 aumentado", + "id": "HP Maks +50 meningkat", + "ja": "最大生命力 +50増加", + "pl": "Zwiększono maksymalne HP +50", + "pt": "HP máximo +50 aumentado", + "ru": "Макс. HP +50 увеличен.", + "tl": "Tumaas ang Max HP +50", + "uk": "Макс HP +50 збільшено", + "zh-TW": "最大生命值+50增加" + } + } + ], "width": 1, "height": 1, "slot": "pet", @@ -38,6 +70,23 @@ "es": "Diablillo", "pt": "Diabrete" }, + "description": [ + { + "text": { + "en": "Increase 30% of attacking & Wizardry Dmg", + "de": "Erhöht Angriffs- und Zaubereischaden um 30%", + "es": "Aumenta 30% of ataque y daño de hechicería", + "id": "Meningkatkan 30% of serangan & Dmg Sihir", + "ja": "攻撃力、力 30%増加", + "pl": "Zwiększa obrażenia ataku i magii o 30%", + "pt": "Aumenta em 30% o dano de ataque e magia de % of", + "ru": "Увеличение на 30% of урона от атак и волшебства.", + "tl": "Dagdagan ang 30% of pag-atake at Wizardry Dmg", + "uk": "Збільште на 30% of шкоду від атаки та магії", + "zh-TW": "攻擊力和魔法傷害增加30% of" + } + } + ], "width": 1, "height": 1, "slot": "pet", @@ -96,6 +145,38 @@ "pt": "Chifre de Dinorant" }, "tags": ["mount", "hornMount", "flying", "valuable"], + "description": [ + { + "text": { + "en": "Increase 15% of Damage", + "de": "Erhöht den Schaden um 15%", + "es": "Aumenta el daño de 15% of", + "id": "Meningkatkan Kerusakan 15% of", + "ja": "ダメージ 15%増加", + "pl": "Zwiększa obrażenia o 15%", + "pt": "Aumentar o dano de 15% of", + "ru": "Увеличение урона 15% of", + "tl": "Dagdagan ang 15% of Pinsala", + "uk": "Збільшення шкоди на 15% of", + "zh-TW": "增加 15% of 傷害" + } + }, + { + "text": { + "en": "Absorb 10% of Damage", + "de": "Absorbiert 10% des Schadens", + "es": "Absorber daño 10% of", + "id": "Menyerap Kerusakan 10% of", + "ja": "ダメージ 10%吸収", + "pl": "Pochłania 10% obrażeń", + "pt": "Absorver Dano 10% of", + "ru": "Поглощение 10% of урона", + "tl": "Isipsip ang 10% of Pinsala", + "uk": "Поглинання шкоди 10% of", + "zh-TW": "吸收10% of傷害" + } + } + ], "width": 1, "height": 1, "slot": "pet", @@ -798,6 +879,38 @@ "pt": "Capa do Lorde" }, "tags": ["cape", "valuable"], + "description": [ + { + "text": { + "en": "Increase {capeDamageIncrease}% of Damage", + "de": "Erhöht den Schaden um {capeDamageIncrease}%", + "es": "Aumenta el daño de {capeDamageIncrease}% of", + "id": "Meningkatkan Kerusakan {capeDamageIncrease}% of", + "ja": "ダメージ {capeDamageIncrease}%増加", + "pl": "Zwiększa obrażenia o {capeDamageIncrease}%", + "pt": "Aumentar o dano de {capeDamageIncrease}% of", + "ru": "Увеличение урона {capeDamageIncrease}% of", + "tl": "Dagdagan ang {capeDamageIncrease}% of Pinsala", + "uk": "Збільшення шкоди на {capeDamageIncrease}% of", + "zh-TW": "增加 {capeDamageIncrease}% of 傷害" + } + }, + { + "text": { + "en": "Absorb {capeOfLordDamageAbsorb}% of Damage", + "de": "Absorbiert {capeOfLordDamageAbsorb}% des Schadens", + "es": "Absorber daño {capeOfLordDamageAbsorb}% of", + "id": "Menyerap Kerusakan {capeOfLordDamageAbsorb}% of", + "ja": "ダメージ {capeOfLordDamageAbsorb}%吸収", + "pl": "Pochłania {capeOfLordDamageAbsorb}% obrażeń", + "pt": "Absorver Dano {capeOfLordDamageAbsorb}% of", + "ru": "Поглощение {capeOfLordDamageAbsorb}% of урона", + "tl": "Isipsip ang {capeOfLordDamageAbsorb}% of Pinsala", + "uk": "Поглинання шкоди {capeOfLordDamageAbsorb}% of", + "zh-TW": "吸收{capeOfLordDamageAbsorb}% of傷害" + } + } + ], "width": 2, "height": 3, "slot": "wings", diff --git a/src/bin/Data/Items/Stats/ItemStats.json b/src/bin/Data/Items/Stats/ItemStats.json index af5d643aff..dfd3a937ba 100644 --- a/src/bin/Data/Items/Stats/ItemStats.json +++ b/src/bin/Data/Items/Stats/ItemStats.json @@ -2,6 +2,30 @@ "formatVersion": 1, "dropLevelBonus": {"excellent": 25, "ancient": 30}, "tables": [ + { + "name": "capeDamageAbsorb3rd", + "caption": {"en": "Damage Absorption in % (3rd Capes)"}, + "values": 24, + "perLevel": 2 + }, + { + "name": "capeDamageIncrease", + "caption": {"en": "Damage Increase in % (Capes of Fighter and Lord, Small Capes)"}, + "values": 20, + "perLevel": 2 + }, + { + "name": "capeOfFighterDamageAbsorb", + "caption": {"en": "Damage Absorption in % (Cape of Fighter)"}, + "values": 10, + "perLevel": 2 + }, + { + "name": "capeOfLordDamageAbsorb", + "caption": {"en": "Damage Absorption in % (Cape of Lord)"}, + "values": 10, + "perLevel": 1 + }, { "name": "damageIncreaseWeapons", "caption": {"en": "Damage Increase (Weapons)"}, @@ -46,6 +70,48 @@ "name": "magicPowerIncrease", "caption": {"en": "Magic Power Increase"}, "values": [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 31, 36, 42, 49, 57, 66] + }, + { + "name": "smallCapeDamageAbsorb", + "caption": {"en": "Damage Absorption in % (Small Capes)"}, + "values": 20, + "perLevel": 2 + }, + { + "name": "wingDamageAbsorb1st", + "caption": {"en": "Damage Absorption in % (1st and Small Wings)"}, + "values": 12, + "perLevel": 2 + }, + { + "name": "wingDamageAbsorb2nd", + "caption": {"en": "Damage Absorption in % (2nd Wings)"}, + "values": 25, + "perLevel": 2 + }, + { + "name": "wingDamageAbsorb3rd", + "caption": {"en": "Damage Absorption in % (3rd Wings)"}, + "values": 39, + "perLevel": 2 + }, + { + "name": "wingDamageIncrease1st", + "caption": {"en": "Damage Increase in % (1st and Small Wings)"}, + "values": 12, + "perLevel": 2 + }, + { + "name": "wingDamageIncrease2nd", + "caption": {"en": "Damage Increase in % (2nd Wings)"}, + "values": 32, + "perLevel": 1 + }, + { + "name": "wingDamageIncrease3rd", + "caption": {"en": "Damage Increase in % (3rd Wings and Capes)"}, + "values": 39, + "perLevel": 2 } ], "default": { diff --git a/src/source/Data/GameData/ItemData/ItemDataValidation.cpp b/src/source/Data/GameData/ItemData/ItemDataValidation.cpp index c82ee7b5ef..302d57eb7b 100644 --- a/src/source/Data/GameData/ItemData/ItemDataValidation.cpp +++ b/src/source/Data/GameData/ItemData/ItemDataValidation.cpp @@ -354,6 +354,7 @@ void ValidateDescriptionPlaceholders(std::span items, cons std::vector known(GetBuiltInPlaceholders().begin(), GetBuiltInPlaceholders().end()); const std::vector tables = profiles.GetTableNames(); known.insert(known.end(), tables.begin(), tables.end()); + std::set> named; for (const ItemDefinition& definition : items) { if (!definition.Exists()) @@ -364,6 +365,7 @@ void ValidateDescriptionPlaceholders(std::span items, cons { // The translations have the English text's placeholders (ValidateItems checks that). const PlaceholderScan scan = ScanPlaceholders(definition.description[line].text.GetNeutral()); + named.insert(scan.names.begin(), scan.names.end()); std::set reported; for (const std::string& name : scan.names) { @@ -382,6 +384,14 @@ void ValidateDescriptionPlaceholders(std::span items, cons } } } + for (const std::string& table : tables) + { + if (!profiles.IsTableUsedByStats(table) && !named.contains(table)) + { + issues.push_back({ItemDataIssueSeverity::Warning, statFile, ItemDataIssue::NoItem, ItemDataIssue::NoItem, + "tables." + table, "neither a stat nor an item description uses this table"}); + } + } } void ValidateNameLocales(std::span items, std::span uiLocales, diff --git a/src/source/Data/GameData/ItemData/ItemDataValidation.h b/src/source/Data/GameData/ItemData/ItemDataValidation.h index f2638d211e..f3353ab25b 100644 --- a/src/source/Data/GameData/ItemData/ItemDataValidation.h +++ b/src/source/Data/GameData/ItemData/ItemDataValidation.h @@ -37,7 +37,8 @@ void ValidateStatProfiles(std::span items, const ItemStatP // The placeholders of the items' descriptions against the item stat file (`statFile` names it in messages): a name // that is neither a built-in value nor a table of the file is an error, with the nearest known name when it looks like -// a typo. The braces and the translations are checked by ValidateItems. +// a typo. A table of the file that neither a stat nor a description uses is a warning. The braces and the translations +// are checked by ValidateItems. void ValidateDescriptionPlaceholders(std::span items, const ItemStatProfiles& profiles, const std::string& statFile, std::vector& issues); diff --git a/src/source/Data/GameData/ItemData/ItemStatProfiles.cpp b/src/source/Data/GameData/ItemData/ItemStatProfiles.cpp index d8940534f6..71aa9bdf50 100644 --- a/src/source/Data/GameData/ItemData/ItemStatProfiles.cpp +++ b/src/source/Data/GameData/ItemData/ItemStatProfiles.cpp @@ -100,6 +100,17 @@ ItemStatProfiles::ItemStatProfiles(const ItemStatFile& file) m_names.push_back(profile.name); m_profiles.push_back(LayProfile(m_profiles[DefaultProfile], profile.stats, profile.requirements, m_tables)); } + m_tableUsedByStats.resize(m_tables.size()); + for (const ItemStatProfile& profile : m_profiles) + { + for (const StatTerms& terms : profile.stats) + { + if (terms.table >= 0 && static_cast(terms.table) < m_tables.size()) + { + m_tableUsedByStats[static_cast(terms.table)] = true; + } + } + } } int ItemStatProfiles::Find(std::string_view name) const @@ -148,6 +159,18 @@ const LevelBonusTable* ItemStatProfiles::FindTable(std::string_view name) const return found != m_tables.end() ? &*found : nullptr; } +bool ItemStatProfiles::IsTableUsedByStats(std::string_view name) const +{ + for (size_t index = 0; index < m_tables.size(); ++index) + { + if (m_tables[index].name == name) + { + return m_tableUsedByStats[index]; + } + } + return false; +} + std::vector ItemStatProfiles::GetTableNames() const { std::vector names; diff --git a/src/source/Data/GameData/ItemData/ItemStatProfiles.h b/src/source/Data/GameData/ItemData/ItemStatProfiles.h index c4b91118cb..9dbbf615e0 100644 --- a/src/source/Data/GameData/ItemData/ItemStatProfiles.h +++ b/src/source/Data/GameData/ItemData/ItemStatProfiles.h @@ -100,6 +100,8 @@ class ItemStatProfiles // The level bonus table of that name, or nullptr: what a description's placeholder names. const LevelBonusTable* FindTable(std::string_view name) const; std::vector GetTableNames() const; + // Whether the default or a profile gives a stat that table; the others are only for descriptions. + bool IsTableUsedByStats(std::string_view name) const; int GetExcellentDropLevelBonus() const { return m_excellentDropLevelBonus; @@ -111,6 +113,7 @@ class ItemStatProfiles private: std::vector m_tables; + std::vector m_tableUsedByStats; std::vector m_names; std::vector m_profiles; int m_excellentDropLevelBonus = 0; diff --git a/src/source/Data/GameData/ItemData/ItemStatsJson.cpp b/src/source/Data/GameData/ItemData/ItemStatsJson.cpp index 024fb14e7e..ad0d7d0209 100644 --- a/src/source/Data/GameData/ItemData/ItemStatsJson.cpp +++ b/src/source/Data/GameData/ItemData/ItemStatsJson.cpp @@ -117,7 +117,6 @@ class ItemStatsReader WrittenRequirementSection& section); void ReadRequirementFormula(const OrderedJson& json, const std::string& field, std::optional& formula); - void WarnAboutUnusedTables(const ItemStatFile& file); const std::string& m_source; std::vector& m_issues; @@ -161,7 +160,6 @@ void ItemStatsReader::Read(const OrderedJson& root, ItemStatFile& file) ReadTables(root, file); ReadDefaults(root, file); ReadProfiles(root, file); - WarnAboutUnusedTables(file); } void ItemStatsReader::ReadDropLevelBonus(const OrderedJson& root, ItemStatFile& file) @@ -557,34 +555,6 @@ void ItemStatsReader::ReadRequirementFormula(const OrderedJson& json, const std: formula = values; } -void ItemStatsReader::WarnAboutUnusedTables(const ItemStatFile& file) -{ - std::set> used; - const auto collect = [&used](const std::array& sections) - { - for (const WrittenStatSection& section : sections) - { - if (section.table) - { - used.insert(*section.table); - } - } - }; - collect(file.defaults); - for (const WrittenStatProfile& profile : file.profiles) - { - collect(profile.stats); - } - for (const LevelBonusTable& table : file.tables) - { - if (!used.contains(table.name)) - { - AddIssue(ItemDataIssueSeverity::Warning, std::string(Keys::Tables) + "." + table.name, - "no stat uses this table"); - } - } -} - // ---------------------------------------------------------------- writing OrderedJson WriteTable(const LevelBonusTable& table) diff --git a/src/source/Engine/Object/ZzzInventory.cpp b/src/source/Engine/Object/ZzzInventory.cpp index 1d47d9d6b5..9c8d787525 100644 --- a/src/source/Engine/Object/ZzzInventory.cpp +++ b/src/source/Engine/Object/ZzzInventory.cpp @@ -3765,86 +3765,7 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, mu_swprintf(TextList[TextNum], I18N::Game::WarpToTheCorrespondingAreaAfterDSeconds, 3); TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; } - if (ip->Type == ITEM_GUARDIAN_ANGEL) // - { - mu_swprintf(TextList[TextNum], I18N::Game::AbsorbDOfDamage, 20); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::MaxHPDIncreased, 50); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - } - if (ip->Type == ITEM_IMP) - { - mu_swprintf(TextList[TextNum], I18N::Game::Increase30OfAttackingWizardryDmg); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - } - if ((ip->Type >= ITEM_WING && ip->Type <= ITEM_WINGS_OF_SATAN) || ip->Type == ITEM_WING_OF_CURSE) - { - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseDOfDamage, 12 + Level * 2); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::AbsorbDOfDamage, 12 + Level * 2); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseSpeed); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - } - else if (GameLogic::Items::IsSecondTierWingExceptCape(ip)) //날개 - { - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseDOfDamage, 32 + Level); // 데미지 몇%증가. - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::AbsorbDOfDamage, 25 + Level * 2); // 데미지 몇%흡수. - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseSpeed); // 이동 속도 향상. - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - } - else if (GameLogic::Items::IsThirdTierWing(ip)) - { - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseDOfDamage, 39 + Level * 2); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - if (ip->Type == ITEM_CAPE_OF_EMPEROR || ip->Type == ITEM_CAPE_OF_OVERRULE) - { - mu_swprintf(TextList[TextNum], I18N::Game::AbsorbDOfDamage, 24 + Level * 2); - } - else - { - mu_swprintf(TextList[TextNum], I18N::Game::AbsorbDOfDamage, 39 + Level * 2); - } - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseSpeed); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - } - else if (GameLogic::Items::IsSmallWing(ip)) - { - switch (ip->Type) - { - case ITEM_SMALL_CAPE_OF_LORD: - case ITEM_LITTLE_WARRIORS_CLOAK: - { - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseDOfDamage, 20 + Level * 2); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::AbsorbDOfDamage, 20 + Level * 2); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - }break; - case ITEM_SMALL_WING_OF_CURSE: - case ITEM_SMALL_WINGS_OF_ELF: - case ITEM_SMALL_WINGS_OF_HEAVEN: - case ITEM_SMALL_WINGS_OF_SATAN: - { - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseDOfDamage, 12 + Level * 2); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::AbsorbDOfDamage, 12 + Level * 2); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - }break; - } - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseSpeed); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - } - else if (ip->Type == ITEM_HORN_OF_DINORANT) - { - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseDOfDamage, 15); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::AbsorbDOfDamage, 10); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - } - else if (ip->Type == ITEM_SPIRIT) + if (ip->Type == ITEM_SPIRIT) { TextListColor[TextNum] = TEXT_COLOR_WHITE; switch (Level) @@ -4031,15 +3952,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, { TextNum = RenderHellasItemInfo(ip, TextNum); } - else if (ip->Type == ITEM_CAPE_OF_FIGHTER || ip->Type == ITEM_CAPE_OF_LORD) - { - // 망토 관련 옵션변경 - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseDOfDamage, 20 + Level * 2); // 데미지 몇%증가 - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - int _iDamage = (ip->Type == ITEM_CAPE_OF_FIGHTER) ? 10 + Level * 2 : 10 + Level; - mu_swprintf(TextList[TextNum], I18N::Game::AbsorbDOfDamage, _iDamage); // 데미지 몇%흡수 - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - } BOOL bDurExist = FALSE; if ((p->Durability || p->MagicDur) && diff --git a/tests/data/test_item_database_files.cpp b/tests/data/test_item_database_files.cpp index 0b57e995d3..9c73a1dc77 100644 --- a/tests/data/test_item_database_files.cpp +++ b/tests/data/test_item_database_files.cpp @@ -14,6 +14,7 @@ #include "Data/GameData/ItemData/ItemAttributeConversion.h" #include "Data/GameData/ItemData/ItemDataValidation.h" #include "Data/GameData/ItemData/ItemDatabase.h" +#include "Data/GameData/ItemData/ItemDescriptionPlaceholders.h" #include "Data/GameData/ItemData/ItemJsonFormat.h" #include "Data/GameData/ItemData/ItemNames.h" #include "Data/GameData/EffectData/GlowColorList.h" @@ -217,6 +218,87 @@ TEST_CASE("The shipped descriptions' placeholders are built-in values or stat fi } } +// The lines the tooltip code wrote for the wings, capes and pets before they were their descriptions, as it printed +// them in English: the old formulas, to compare the data with. +std::vector OldWingAndPetLines(int group, int number, int level) +{ + const auto increase = [](int value) { return "Increase " + std::to_string(value) + "% of Damage"; }; + const auto absorb = [](int value) { return "Absorb " + std::to_string(value) + "% of Damage"; }; + const std::string speed = "Increase speed"; + const auto in = [&](std::initializer_list numbers) + { return std::find(numbers.begin(), numbers.end(), number) != numbers.end(); }; + if (group == 12 && in({0, 1, 2, 41, 131, 132, 133, 134})) + { + return {increase(12 + level * 2), absorb(12 + level * 2), speed}; + } + if (group == 12 && in({3, 4, 5, 6, 42})) + { + return {increase(32 + level), absorb(25 + level * 2), speed}; + } + if (group == 12 && in({36, 37, 38, 39, 43})) + { + return {increase(39 + level * 2), absorb(39 + level * 2), speed}; + } + if (group == 12 && in({40, 50})) + { + return {increase(39 + level * 2), absorb(24 + level * 2), speed}; + } + if (group == 12 && in({130, 135})) + { + return {increase(20 + level * 2), absorb(20 + level * 2), speed}; + } + if (group == 12 && number == 49) + { + return {increase(20 + level * 2), absorb(10 + level * 2)}; + } + if (group == 13 && number == 30) + { + return {increase(20 + level * 2), absorb(10 + level)}; + } + if (group == 13 && number == 3) + { + return {increase(15), absorb(10)}; + } + if (group == 13 && number == 0) + { + return {absorb(20), "Max HP +50 increased"}; + } + if (group == 13 && number == 1) + { + return {"Increase 30% of attacking & Wizardry Dmg"}; + } + return {}; +} + +TEST_CASE("The wings', capes' and pets' tooltip values come from their data as from the old formulas [data][items]") +{ + const ItemDataLoadResult result = LoadItemDataDirectory(DataDirectory / "Items"); + const ItemStatsLoadResult stats = LoadItemStatsFile(DataDirectory / "Items" / "Stats" / ItemStatsFileName); + REQUIRE_FALSE(HasErrors(stats.issues)); + const ItemStatProfiles profiles(stats.file); + int compared = 0; + for (const ItemDefinition& item : result.items) + { + if (OldWingAndPetLines(item.group, item.number, 0).empty()) + { + continue; + } + for (int level = 0; level < ItemLevelCount; ++level) + { + INFO(item.group << "/" << item.number << " +" << level); + std::vector lines; + for (const ItemDescriptionLine& line : item.description) + { + lines.push_back(FillPlaceholders(line.text.GetNeutral(), level, profiles)); + } + CHECK(lines == OldWingAndPetLines(item.group, item.number, level)); + ++compared; + } + } + // 24 wings and capes, Horn of Dinorant, Guardian Angel and Imp, at each level. + CHECK(compared == 27 * ItemLevelCount); +} + // The texts the tooltip code wrote for these items are their descriptions now, in every UI language. TEST_CASE("The original items' tooltip texts are in their descriptions [data][items]") { diff --git a/tests/data/test_item_description_placeholders.cpp b/tests/data/test_item_description_placeholders.cpp index d72c44bb5d..252cc6cd44 100644 --- a/tests/data/test_item_description_placeholders.cpp +++ b/tests/data/test_item_description_placeholders.cpp @@ -55,10 +55,12 @@ std::vector CheckSyntax(const ItemDefinition& item) return issues; } +// The issues of the item, without the stat file's. std::vector CheckNames(const ItemDefinition& item) { std::vector issues; ValidateDescriptionPlaceholders(std::vector{item}, MakeProfiles(), "ItemStats.json", issues); + std::erase_if(issues, [](const ItemDataIssue& issue) { return issue.group == ItemDataIssue::NoItem; }); return issues; } } // namespace @@ -155,6 +157,15 @@ TEST_CASE("A description placeholder is a built-in value or a stat file table [d "has the unknown placeholder {durability}; a placeholder is a built-in value ({level}) or a table of " "ItemStats.json"); + // A table no stat uses is for descriptions: a warning when none names it either. + std::vector unused; + ValidateDescriptionPlaceholders(std::vector{MakeJewel("No placeholders")}, MakeProfiles(), + "ItemStats.json", unused); + REQUIRE(unused.size() == 1); + CHECK(unused.front().severity == ItemDataIssueSeverity::Warning); + CHECK(unused.front().source == "ItemStats.json"); + CHECK(unused.front().field == "tables.wingDamage"); + // A deleted item (no name) is not checked. ItemDefinition deleted = MakeJewel("{durability}"); deleted.names = {}; diff --git a/tests/data/test_item_stats_json.cpp b/tests/data/test_item_stats_json.cpp index 13e7975eee..6dd7be0207 100644 --- a/tests/data/test_item_stats_json.cpp +++ b/tests/data/test_item_stats_json.cpp @@ -287,9 +287,12 @@ TEST_CASE("Item stat file warnings [data][items]") R"("excellent": {"times": 12, "add": 4, "dropLevelDivisor": 5, "afterLevelBonus": true})")); CHECK(HasIssue(excellentAfter.issues, Severity::Warning, "default.defense.excellent.afterLevelBonus")); + // A table no stat uses can be one for item descriptions, so the file alone does not warn about it + // (ValidateDescriptionPlaceholders does, with the items). const ReadResult unusedTable = Read(Changed(R"("defense": {"table": "linear", )", R"("defense": {)")); - CHECK(warningsOnly(unusedTable.issues)); - CHECK(HasIssue(unusedTable.issues, Severity::Warning, "tables.linear")); + CHECK(unusedTable.issues.empty()); + CHECK_FALSE(ItemStatProfiles(unusedTable.file).IsTableUsedByStats("linear")); + CHECK(ItemStatProfiles(unusedTable.file).IsTableUsedByStats("steps")); const ReadResult noEnglish = Read(Changed(R"({"en": "Steps"})", R"({"de": "Stufen"})")); CHECK(HasIssue(noEnglish.issues, Severity::Warning, "tables.steps.caption")); From 6e3d93701d9e0f54f66b53e7e607d326d1715464 Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Wed, 21 Oct 2026 13:30:52 -0300 Subject: [PATCH 02/19] refactor(items): the tooltip's texts by item level come from the data A description line can be limited to item levels: "levels": [1, 8] shows it from +1 to +8 (both included; left out, at every level). The tooltip draws only the lines of the item's level. With it, the last fixed texts of RenderItemInfo's item chain are descriptions: Town Portal scroll (+1 to +8), Spirit, Loch's Feather, Fruits, Siege Potion, Contract Summon, Life Stone and Rena by level, and Scroll of Archangel, Blood Bone and Invisibility Cloak, which have one text at every level. Their cases go, and so do the 18 .resx texts no other code prints (no Lookup() range reaches their legacy ids). The old code drew a stale line of the text list at the Contract Summon's, Life Stone's and Rena's levels without a text (+2 and up, Rena +0); those levels show none now. Otherwise nothing changes: a test compares every level of the 11 items with the old code's lines and colors. The Armor of Guardsman's Chaos Castle table and the Lost Map / Symbol of Kundun stay code: they read the hero and other tables. --- docs/item-data.md | 2 +- src/Localization/Game.de.resx | 72 --- src/Localization/Game.en.resx | 72 --- src/Localization/Game.es.resx | 72 --- src/Localization/Game.id.resx | 72 --- src/Localization/Game.ja.resx | 72 --- src/Localization/Game.pl.resx | 72 --- src/Localization/Game.pt.resx | 72 --- src/Localization/Game.ru.resx | 72 --- src/Localization/Game.tl.resx | 72 --- src/Localization/Game.uk.resx | 72 --- src/Localization/Game.zh-TW.resx | 72 --- src/bin/Data/Items/Group13_Helper.json | 419 ++++++++++++++++++ src/bin/Data/Items/Group14_Potion.json | 172 +++++++ .../Data/GameData/ItemData/ItemDefinition.h | 14 +- .../Data/GameData/ItemData/ItemJsonFormat.cpp | 36 +- src/source/Engine/Object/ZzzInventory.cpp | 149 +------ tests/data/test_item_database_files.cpp | 117 +++++ tests/data/test_item_json.cpp | 44 ++ 19 files changed, 806 insertions(+), 939 deletions(-) diff --git a/docs/item-data.md b/docs/item-data.md index 41645578bc..e092fe7faf 100644 --- a/docs/item-data.md +++ b/docs/item-data.md @@ -81,7 +81,7 @@ read as the English name only; saving writes the object form. | Field | Meaning | |---|---| | `tags` | Categories the game code asks for, e.g. `["mount", "flying"]`; see [Tags](#tags) | -| `description` | Lines the tooltip shows for the item, after its stats, e.g. the Jewel of Bless's "It is used to increase your item level up to 6". The Town Portal scroll's delay and a few other lines are still written by the tooltip code, after the description. A text can have [placeholders](#description-placeholders). Each line is `{"text": ..., "color": ...}`: `text` is written like `name` (a plain English text, or the texts by language), an empty text (`{"text": ""}`) is a blank line, a long line wraps at about the width of the original tooltips' widest lines, and `\n` in a text breaks the line there. `color` is one of the tooltip colors: `white` (left out), `blue`, `red`, `yellow`, `green`, `darkRed`, `purple`, `darkBlue`, `darkYellow`, `greenBlue`, `gray`, `redPurple`, `violet`, `orange`. A client-only field; the bmd import keeps it | +| `description` | Lines the tooltip shows for the item, after its stats, e.g. the Jewel of Bless's "It is used to increase your item level up to 6". A few lines that read the hero or other tables (the Armor of Guardsman's Chaos Castle table, the Lost Map) are still written by the tooltip code, after the description. A text can have [placeholders](#description-placeholders). Each line is `{"text": ..., "color": ..., "levels": [first, last]}`: `text` is written like `name` (a plain English text, or the texts by language), an empty text (`{"text": ""}`) is a blank line, a long line wraps at about the width of the original tooltips' widest lines, and `\n` in a text breaks the line there. `color` is one of the tooltip colors: `white` (left out), `blue`, `red`, `yellow`, `green`, `darkRed`, `purple`, `darkBlue`, `darkYellow`, `greenBlue`, `gray`, `redPurple`, `violet`, `orange`. `levels` shows the line only at those item levels, both included (`[1, 8]`; left out: every level); a list of two levels from 0 to 15 with the first not above the last. A client-only field; the bmd import keeps it | | `width`, `height` | Size in inventory slots | | `slot` | Equipment slot: `mainHand`, `offHand`, `helm`, `armor`, `pants`, `gloves`, `boots`, `wings`, `pet`, `pendant`, `ring`. Left out = not equippable | | `wingTier` | Only for wings: `small`, `first`, `second`, `third`. The wing formulas (defense, defense per level, damage increase, absorption) depend on it; excellent second and third tier wings get no extra durability, and the chaos mix knows a wing's tier from it | diff --git a/src/Localization/Game.de.resx b/src/Localization/Game.de.resx index 11fd416e3c..a485618a61 100644 --- a/src/Localization/Game.de.resx +++ b/src/Localization/Game.de.resx @@ -639,10 +639,6 @@ Cursor nach unten bewegen -> Chatfenster anpassen legacy_id=156 - - Warp in den entsprechenden Bereich in %d Sekunden - legacy_id=157 - %s-Warp-Schriftrolle legacy_id=158 @@ -2389,10 +2385,6 @@ Erhöht die Manaregeneration beim Jagen von Monstern +Mana/8 legacy_id=635 - - Erhöht 1~3 Statuspunkte - legacy_id=636 - Die verbleibende Zeit wird angezeigt legacy_id=638 @@ -2825,10 +2817,6 @@ Sie haben Dinorants getauscht legacy_id=747 - - Wird zum Verbessern von Flügeln verwendet - legacy_id=748 - Um Früchte zu verwenden, müssen Sie über Level 10 sein legacy_id=749 @@ -3005,22 +2993,10 @@ Absolutes Schwert des Erzengels legacy_id=812 - - Wird im Online-Event verwendet - legacy_id=813 - - - Wird beim Betreten der Blutburg verwendet - legacy_id=814 - Belohnung bei Rückgabe an den Erzengel legacy_id=815 - - Wird beim Erstellen eines Umhangs der Unsichtbarkeit verwendet - legacy_id=816 - Absolute Armbrust des Erzengels legacy_id=817 @@ -4085,10 +4061,6 @@ Stein der Freundschaft legacy_id=1098 - - Wird im „Mein Freund“-Event verwendet. - legacy_id=1099 - Möchten Sie einen Gegenstand kaufen? legacy_id=1100 @@ -4517,14 +4489,6 @@ Dunkler Rabe legacy_id=1214 - - Wird zur Wiederbelebung des Dunklen Pferdes verwendet - legacy_id=1215 - - - Wird zur Wiederbelebung des Dunklen Raben verwendet - legacy_id=1216 - Haustier legacy_id=1217 @@ -4601,10 +4565,6 @@ Crest of Monarch legacy_id=1235 - - Wird zur Kombination von Umhang des Lords und Kriegerumhang verwendet - legacy_id=1236 - Details finden Sie im Haustierinformationsfenster legacy_id=1237 @@ -4785,10 +4745,6 @@ Zeichen des Lords legacy_id=1290 - - Wird zur Registrierung für Castle Siege verwendet - legacy_id=1291 - Zum Tresor legacy_id=1294 @@ -5261,18 +5217,6 @@ Schriftrolle des Wächters legacy_id=1416 - - Effekt: Schaden +20%% - legacy_id=1417 - - - Dauer 60 Sekunden - legacy_id=1418 - - - Gilt nur für Burgtor und Statue - legacy_id=1419,1465 - Anzahl der Zeichen legacy_id=1420 @@ -5453,10 +5397,6 @@ Angriffsfähigkeit wird um +20%% erhöht legacy_id=1471 - - Die Angriffsgeschwindigkeit wird um +20 erhöht - legacy_id=1472 - Kann die Fähigkeit verwenden legacy_id=1473 @@ -6081,14 +6021,6 @@ Die Allianzfunktionen sind wegen Castle Siege eingeschränkt. legacy_id=1637 - - Erhöht die AG-Regeneration um +8 - legacy_id=1638 - - - Erhöht die Resistenz gegen Blitz und Eis - legacy_id=1639 - Laden legacy_id=1640 @@ -7065,10 +6997,6 @@ Um Werte mit Früchten zu verringern, müssen Waffen, Rüstungen usw. abgelegt werden. legacy_id=1909 - - Verringert einen Wert um 1~9 Punkte - legacy_id=1910 - Nicht möglich, da die nutzbaren Fruchtpunkte das Maximum erreicht haben. legacy_id=1911 diff --git a/src/Localization/Game.en.resx b/src/Localization/Game.en.resx index 16f11c751d..6e349389d5 100644 --- a/src/Localization/Game.en.resx +++ b/src/Localization/Game.en.resx @@ -639,10 +639,6 @@ Move cursor down-> Adjust chat window legacy_id=156 - - Warp to the corresponding area after %d seconds - legacy_id=157 - %s Warp scroll legacy_id=158 @@ -2665,10 +2661,6 @@ Increases acquisition rate of Mana after hunting monsters +Mana/8 legacy_id=635 - - Increases 1~3 stat points - legacy_id=636 - The remaining time is shown legacy_id=638 @@ -3101,10 +3093,6 @@ You have exchanged Dinorants legacy_id=747 - - Used to upgrade wings - legacy_id=748 - Must be over level 10 to use fruits legacy_id=749 @@ -3281,22 +3269,10 @@ Absolute Sword of Archangel legacy_id=812 - - Used in the online event - legacy_id=813 - - - Used when entering Blood Castle - legacy_id=814 - Reward received when returned to the Archangel legacy_id=815 - - Used when creating a Cloak of Invisibility - legacy_id=816 - Absolute Crossbow of Archangel legacy_id=817 @@ -4361,10 +4337,6 @@ Stone of Friendship legacy_id=1098 - - Used in the My Friend event. - legacy_id=1099 - Do you want to buy an item? legacy_id=1100 @@ -4793,14 +4765,6 @@ Dark Raven legacy_id=1214 - - Used in Dark Horse resurrection - legacy_id=1215 - - - Used in Dark Raven resurrection - legacy_id=1216 - Pet legacy_id=1217 @@ -4877,10 +4841,6 @@ Crest of monarch legacy_id=1235 - - Used in combining Cape of Lord & Warrior's Cloak - legacy_id=1236 - Check the details in pet information window legacy_id=1237 @@ -5061,10 +5021,6 @@ Sign of lord legacy_id=1290 - - Use in siege registration - legacy_id=1291 - Move to vault legacy_id=1294 @@ -5537,18 +5493,6 @@ Scroll of Guardian legacy_id=1416 - - Damage +20%% increase effect - legacy_id=1417 - - - Duration 60 seconds - legacy_id=1418 - - - Only applicable for castle gate and statue - legacy_id=1419,1465 - No. of signs legacy_id=1420 @@ -5729,10 +5673,6 @@ Attacking skill will increase +20%% legacy_id=1471 - - Attacking speed will increase +20 - legacy_id=1472 - Can use the skill legacy_id=1473 @@ -6357,14 +6297,6 @@ Alliance function will be restricted due to the Castle Siege. legacy_id=1637 - - Increase +8 AG recovery speed - legacy_id=1638 - - - Increase resistance of Lightning and Ice - legacy_id=1639 - Store legacy_id=1640 @@ -7341,10 +7273,6 @@ To decrease the fruit, weapons, armors and others must be removed. legacy_id=1909 - - Possible to decrease stat 1~9 point - legacy_id=1910 - Impossible since the usable fruit points are at maximum. legacy_id=1911 diff --git a/src/Localization/Game.es.resx b/src/Localization/Game.es.resx index 6a8d4d5a25..4565dc9bdc 100644 --- a/src/Localization/Game.es.resx +++ b/src/Localization/Game.es.resx @@ -639,10 +639,6 @@ Mover el cursor hacia abajo-> Ajustar ventana de chat legacy_id=156 - - Deformarse al área correspondiente después de %d segundos - legacy_id=157 - %s Desplazamiento de deformación legacy_id=158 @@ -2369,10 +2365,6 @@ Aumenta la tasa de adquisición de Mana después de cazar monstruos +Mana/8 legacy_id=635 - - Aumenta 1~3 puntos de estadísticas - legacy_id=636 - Se muestra el tiempo restante legacy_id=638 @@ -2805,10 +2797,6 @@ Has intercambiado Dinorantes legacy_id=747 - - Se utiliza para mejorar las alas. - legacy_id=748 - Debe tener más del nivel 10 para usar frutas. legacy_id=749 @@ -2985,22 +2973,10 @@ Espada Absoluta del Arcángel legacy_id=812 - - Utilizado en el evento en línea. - legacy_id=813 - - - Se utiliza al entrar al Castillo de Sangre. - legacy_id=814 - Recompensa recibida al regresar al Arcángel legacy_id=815 - - Se utiliza al crear una capa de invisibilidad. - legacy_id=816 - Ballesta Absoluta de Arcángel legacy_id=817 @@ -4065,10 +4041,6 @@ Piedra de la amistad legacy_id=1098 - - Usado en el evento Mi Amigo. - legacy_id=1099 - ¿Quieres comprar un artículo? legacy_id=1100 @@ -4497,14 +4469,6 @@ Cuervo oscuro legacy_id=1214 - - Utilizado en la resurrección de Dark Horse - legacy_id=1215 - - - Utilizado en la resurrección de Dark Raven - legacy_id=1216 - Mascota legacy_id=1217 @@ -4581,10 +4545,6 @@ Cresta del monarca legacy_id=1235 - - Se utiliza para combinar la capa de Lord y la capa de guerrero. - legacy_id=1236 - Verifique los detalles en la ventana de información de la mascota legacy_id=1237 @@ -4765,10 +4725,6 @@ signo de señor legacy_id=1290 - - Uso en el registro de asedio - legacy_id=1291 - Mover a la bóveda legacy_id=1294 @@ -5241,18 +5197,6 @@ Pergamino de guardián legacy_id=1416 - - Daño +20%% iefecto de aumento - legacy_id=1417 - - - Duración 60 segundos - legacy_id=1418 - - - Sólo aplicable a la puerta del castillo y a la estatua. - legacy_id=1419,1465 - No. de signos legacy_id=1420 @@ -5433,10 +5377,6 @@ La habilidad de ataque aumentará +20%% legacy_id=1471 - - La velocidad de ataque aumentará +20 - legacy_id=1472 - Puede usar la habilidad legacy_id=1473 @@ -6061,14 +6001,6 @@ La función de la Alianza estará restringida debido al Asedio al Castillo. legacy_id=1637 - - Aumentar la velocidad de recuperación de +8 AG - legacy_id=1638 - - - Aumenta la resistencia de Rayo y Hielo. - legacy_id=1639 - Almacenar legacy_id=1640 @@ -7045,10 +6977,6 @@ Para disminuir la fruta se deben quitar armas, armaduras y demás. legacy_id=1909 - - Es posible disminuir las estadísticas de 1 a 9 puntos. - legacy_id=1910 - Imposible ya que los puntos de fruta utilizables están al máximo. legacy_id=1911 diff --git a/src/Localization/Game.id.resx b/src/Localization/Game.id.resx index 1e08a1868c..d2a319d5ef 100644 --- a/src/Localization/Game.id.resx +++ b/src/Localization/Game.id.resx @@ -639,10 +639,6 @@ Pindahkan kursor ke bawah-> Sesuaikan jendela obrolan legacy_id=156 - - Warp ke area yang sesuai setelah %d detik - legacy_id=157 - %s Gulir warp legacy_id=158 @@ -2369,10 +2365,6 @@ Meningkatkan tingkat perolehan Mana setelah berburu monster +Mana/8 legacy_id=635 - - Meningkatkan 1~3 poin stat - legacy_id=636 - Waktu yang tersisa ditampilkan legacy_id=638 @@ -2805,10 +2797,6 @@ Anda telah menukarkan Dinorant legacy_id=747 - - Digunakan untuk meningkatkan sayap - legacy_id=748 - Harus lebih dari level 10 untuk menggunakan buah legacy_id=749 @@ -2985,22 +2973,10 @@ Pedang Malaikat Tertinggi legacy_id=812 - - Digunakan dalam acara online - legacy_id=813 - - - Digunakan saat memasuki Blood Castle - legacy_id=814 - Hadiah diterima saat dikembalikan ke Malaikat Agung legacy_id=815 - - Digunakan saat membuat Jubah Gaib - legacy_id=816 - Panah Mutlak Malaikat Agung legacy_id=817 @@ -4065,10 +4041,6 @@ Batu Persahabatan legacy_id=1098 - - Digunakan dalam acara Temanku. - legacy_id=1099 - Apakah Anda ingin membeli suatu barang? legacy_id=1100 @@ -4497,14 +4469,6 @@ gagak gelap legacy_id=1214 - - Digunakan dalam kebangkitan Kuda Hitam - legacy_id=1215 - - - Digunakan dalam kebangkitan Dark Raven - legacy_id=1216 - Peliharaan legacy_id=1217 @@ -4581,10 +4545,6 @@ Lambang raja legacy_id=1235 - - Digunakan dalam menggabungkan Cape of Lord & Warrior's Cloak - legacy_id=1236 - Periksa detailnya di jendela informasi hewan peliharaan legacy_id=1237 @@ -4765,10 +4725,6 @@ Tanda tuan legacy_id=1290 - - Gunakan dalam pendaftaran pengepungan - legacy_id=1291 - Pindah ke brankas legacy_id=1294 @@ -5241,18 +5197,6 @@ Gulir Penjaga legacy_id=1416 - - Kerusakan +20%% imeningkatkan efek - legacy_id=1417 - - - Durasi 60 detik - legacy_id=1418 - - - Hanya berlaku untuk gerbang kastil dan patung - legacy_id=1419,1465 - Jumlah tanda legacy_id=1420 @@ -5433,10 +5377,6 @@ Keterampilan menyerang akan meningkat +20%% legacy_id=1471 - - Kecepatan menyerang akan meningkat +20 - legacy_id=1472 - Dapat menggunakan keterampilan tersebut legacy_id=1473 @@ -6061,14 +6001,6 @@ Fungsi aliansi akan dibatasi karena Pengepungan Kastil. legacy_id=1637 - - Meningkatkan kecepatan pemulihan +8 AG - legacy_id=1638 - - - Meningkatkan ketahanan terhadap Petir dan Es - legacy_id=1639 - Toko legacy_id=1640 @@ -7045,10 +6977,6 @@ Untuk mengurangi buah, senjata, armor dan lain-lain harus dihilangkan. legacy_id=1909 - - Kemungkinan untuk menurunkan stat 1~9 poin - legacy_id=1910 - Tidak mungkin karena poin buah yang bisa digunakan sudah maksimal. legacy_id=1911 diff --git a/src/Localization/Game.ja.resx b/src/Localization/Game.ja.resx index fbf8c20f75..22789751a6 100644 --- a/src/Localization/Game.ja.resx +++ b/src/Localization/Game.ja.resx @@ -627,10 +627,6 @@ /バトルサッカー ギルド名:バトルサッカーを申し込む legacy_id=156 - - %d秒後該当地域に移動 - legacy_id=157 - %s移動の文書 legacy_id=158 @@ -2275,10 +2271,6 @@ 獲得するマナ増加 +マナ/8 legacy_id=635 - - ステータス1~3ポイント生成 - legacy_id=636 - マウスボタンを右クリックすれば legacy_id=638 @@ -2699,10 +2691,6 @@ ディノラントを入れ替えました。 legacy_id=747 - - 羽をアップグレードするための合成に使用 - legacy_id=748 - レベル10以上から果実を使うことができます。 legacy_id=749 @@ -2879,22 +2867,10 @@ アークエンジェルソード legacy_id=812 - - オンラインイベントに使われます。 - legacy_id=813 - - - ブラッドキャッスルに入る時に使われます。 - legacy_id=814 - 大天使に持っていくと報奨がもらえます。 legacy_id=815 - - 透明マントを入手するための合成に使われます。 - legacy_id=816 - アークエンジェルボウ legacy_id=817 @@ -3947,10 +3923,6 @@ 友情の石 legacy_id=1098 - - 友達イベントに使われます。 - legacy_id=1099 - アイテムを購入しますか? legacy_id=1100 @@ -4379,14 +4351,6 @@ ダークスピリット legacy_id=1214 - - ダークホースの復活に使います。 - legacy_id=1215 - - - ダークスピリットの復活に使います。 - legacy_id=1216 - ペット legacy_id=1217 @@ -4463,10 +4427,6 @@ 君主の紋章 legacy_id=1235 - - 君主のマント合成時に使用 - legacy_id=1236 - 詳しい内容はペット情報ウィンドウで確認 legacy_id=1237 @@ -4647,10 +4607,6 @@ 城主のエンブレム legacy_id=1290 - - エンブレム登録期間に使用 - legacy_id=1291 - 倉庫移動 legacy_id=1294 @@ -5123,18 +5079,6 @@ ガーディアン注文書 legacy_id=1416 - - 攻撃力+20%%上昇效果 - legacy_id=1417 - - - 持続時間120秒 - legacy_id=1418 - - - 城門、石像のみ適用 - legacy_id=1419,1465 - エンブレム数 legacy_id=1420 @@ -5315,10 +5259,6 @@ 攻撃力+20%%増加します。 legacy_id=1471 - - 攻撃スピードも+20増加します。 - legacy_id=1472 - スキルを使えるようになりました。 legacy_id=1473 @@ -5943,14 +5883,6 @@ 戦闘によって連合機能が制限されます。 legacy_id=1637 - - AG回復のスピード増加+8 - legacy_id=1638 - - - サンダー、アイス抵抗力向上 - legacy_id=1639 - 城主合成 legacy_id=1640 @@ -6927,10 +6859,6 @@ 実を使うためには武器、防具、その他の装備を全て外さなければなりません。 legacy_id=1909 - - 減少ステータス1~9ポイント可能 - legacy_id=1910 - 使用可能な最大ステータスポイントに到逹しいてるので不可能です。 legacy_id=1911 diff --git a/src/Localization/Game.pl.resx b/src/Localization/Game.pl.resx index ab3f34b14b..9d593d8e29 100644 --- a/src/Localization/Game.pl.resx +++ b/src/Localization/Game.pl.resx @@ -639,10 +639,6 @@ Przesuń kursor w dół-> Dostosuj okno czatu legacy_id=156 - - Przeskocz do odpowiedniego obszaru po %d sekundach - legacy_id=157 - %s Warp scroll legacy_id=158 @@ -2369,10 +2365,6 @@ Zwiększa szybkość zdobywania many po polowaniu na potwory +Mana/8 legacy_id=635 - - Zwiększa 1-3 punkty statystyk - legacy_id=636 - Wyświetlany jest pozostały czas legacy_id=638 @@ -2805,10 +2797,6 @@ Wymieniłeś Dinoranty legacy_id=747 - - Służy do ulepszania Wings - legacy_id=748 - Aby używać Fruit, musisz mieć poziom powyżej 10 legacy_id=749 @@ -2985,22 +2973,10 @@ Absolutny Miecz Archanioła legacy_id=812 - - Używane podczas wydarzenia online - legacy_id=813 - - - Używane podczas wchodzenia do Blood Castle - legacy_id=814 - Nagroda otrzymana po powrocie do Archanioła legacy_id=815 - - Używane podczas tworzenia Cloak of Invisibility - legacy_id=816 - Absolutna Kusza Archanioła legacy_id=817 @@ -4065,10 +4041,6 @@ Stone of Friendship legacy_id=1098 - - Używane w wydarzeniu Mój Przyjaciel. - legacy_id=1099 - Czy chcesz kupić przedmiot? legacy_id=1100 @@ -4497,14 +4469,6 @@ Ciemny Kruk legacy_id=1214 - - Używany podczas wskrzeszenia Dark Horse - legacy_id=1215 - - - Używany podczas wskrzeszenia Mrocznego Kruka - legacy_id=1216 - Zwierzak legacy_id=1217 @@ -4581,10 +4545,6 @@ Herb monarchy legacy_id=1235 - - Używany do łączenia Cape of Lord i Warrior's Cloak - legacy_id=1236 - Sprawdź szczegóły w oknie informacji o zwierzaku legacy_id=1237 @@ -4765,10 +4725,6 @@ Znak Pana legacy_id=1290 - - Użyj w rejestracji oblężenia - legacy_id=1291 - Przenieś do skarbca legacy_id=1294 @@ -5241,18 +5197,6 @@ Scroll of Guardian legacy_id=1416 - - Efekt zwiększenia obrażeń o 20%% - legacy_id=1417 - - - Czas trwania 60 sekund - legacy_id=1418 - - - Dotyczy tylko bramy zamkowej i posągu - legacy_id=1419,1465 - Liczba znaków legacy_id=1420 @@ -5433,10 +5377,6 @@ Umiejętność ataku wzrośnie o +20%% legacy_id=1471 - - Szybkość ataku wzrośnie o +20 - legacy_id=1472 - Może używać tej umiejętności legacy_id=1473 @@ -6061,14 +6001,6 @@ Funkcja Sojuszu będzie ograniczona ze względu na Castle Siege. legacy_id=1637 - - Zwiększa prędkość odzyskiwania +8 AG - legacy_id=1638 - - - Zwiększa odporność na błyskawice i lód - legacy_id=1639 - Sklep legacy_id=1640 @@ -7045,10 +6977,6 @@ Aby zmniejszyć liczbę Fruit, należy usunąć broń, zbroje i inne przedmioty. legacy_id=1909 - - Możliwe zmniejszenie statystyki o 1~9 punktów - legacy_id=1910 - Niemożliwe, ponieważ możliwe do wykorzystania punkty Fruit są maksymalne. legacy_id=1911 diff --git a/src/Localization/Game.pt.resx b/src/Localization/Game.pt.resx index 142b0dcdd1..69fd7125ef 100644 --- a/src/Localization/Game.pt.resx +++ b/src/Localization/Game.pt.resx @@ -639,10 +639,6 @@ Mova o cursor para baixo-> Ajustar janela de bate-papo legacy_id=156 - - Warp para a área correspondente após %d segundos - legacy_id=157 - %s Rolagem de distorção legacy_id=158 @@ -2369,10 +2365,6 @@ Aumenta a taxa de aquisição de Mana após caçar monstros +Mana/8 legacy_id=635 - - Aumenta 1~3 pontos de estatísticas - legacy_id=636 - O tempo restante é mostrado legacy_id=638 @@ -2805,10 +2797,6 @@ Você trocou Dinorantes legacy_id=747 - - Usado para atualizar asas - legacy_id=748 - Deve estar acima do nível 10 para usar frutas legacy_id=749 @@ -2985,22 +2973,10 @@ Espada Absoluta do Arcanjo legacy_id=812 - - Usado no evento online - legacy_id=813 - - - Usado ao entrar no Castelo de Sangue - legacy_id=814 - Recompensa recebida quando devolvida ao Arcanjo legacy_id=815 - - Usado ao criar uma Capa de Invisibilidade - legacy_id=816 - Besta Absoluta do Arcanjo legacy_id=817 @@ -4065,10 +4041,6 @@ Pedra da Amizade legacy_id=1098 - - Usado no evento Meu Amigo. - legacy_id=1099 - Você quer comprar um item? legacy_id=1100 @@ -4497,14 +4469,6 @@ Corvo Negro legacy_id=1214 - - Usado na ressurreição do Dark Horse - legacy_id=1215 - - - Usado na ressurreição do Dark Raven - legacy_id=1216 - Bicho de estimação legacy_id=1217 @@ -4581,10 +4545,6 @@ Crista do monarca legacy_id=1235 - - Usado na combinação da Capa do Senhor e da Capa do Guerreiro - legacy_id=1236 - Verifique os detalhes na janela de informações do animal de estimação legacy_id=1237 @@ -4765,10 +4725,6 @@ Sinal do senhor legacy_id=1290 - - Use no registro de cerco - legacy_id=1291 - Mover para o cofre legacy_id=1294 @@ -5241,18 +5197,6 @@ Pergaminho do Guardião legacy_id=1416 - - Dano +20%% infeito de aumento - legacy_id=1417 - - - Duração 60 segundos - legacy_id=1418 - - - Aplicável apenas para portão de castelo e estátua - legacy_id=1419,1465 - Nº de sinais legacy_id=1420 @@ -5433,10 +5377,6 @@ A habilidade de ataque aumentará +20%% legacy_id=1471 - - A velocidade de ataque aumentará +20 - legacy_id=1472 - Pode usar a habilidade legacy_id=1473 @@ -6061,14 +6001,6 @@ A função da Aliança será restrita devido ao Castle Siege. legacy_id=1637 - - Aumenta a velocidade de recuperação de +8 AG - legacy_id=1638 - - - Aumenta a resistência de Raios e Gelo - legacy_id=1639 - Loja legacy_id=1640 @@ -7045,10 +6977,6 @@ Para diminuir as frutas, armas, armaduras e outros devem ser retirados. legacy_id=1909 - - Possível diminuir estatísticas de 1 a 9 pontos - legacy_id=1910 - Impossível, pois os pontos de fruta utilizáveis ​​estão no máximo. legacy_id=1911 diff --git a/src/Localization/Game.ru.resx b/src/Localization/Game.ru.resx index d2afc3c57e..3264fc98aa 100644 --- a/src/Localization/Game.ru.resx +++ b/src/Localization/Game.ru.resx @@ -639,10 +639,6 @@ Переместить курсор вниз-> Настроить окно чата. legacy_id=156 - - Переместитесь в соответствующую область через %d секунд. - legacy_id=157 - %s Свиток варпа legacy_id=158 @@ -2369,10 +2365,6 @@ Увеличивает скорость получения маны после охоты на монстров +Мана/8. legacy_id=635 - - Увеличивает 1~3 очка характеристик. - legacy_id=636 - Оставшееся время показано legacy_id=638 @@ -2805,10 +2797,6 @@ Вы обменяли Диноранты legacy_id=747 - - Используется для улучшения крыльев. - legacy_id=748 - Должен быть выше 10 уровня, чтобы использовать фрукты. legacy_id=749 @@ -2985,22 +2973,10 @@ Абсолютный Меч Архангела legacy_id=812 - - Используется в онлайн-мероприятии - legacy_id=813 - - - Используется при входе в Кровавый Замок. - legacy_id=814 - Награда, полученная при возвращении в Архангельск legacy_id=815 - - Используется при создании плаща-невидимки. - legacy_id=816 - Абсолютный арбалет Архангела legacy_id=817 @@ -4065,10 +4041,6 @@ Камень Дружбы legacy_id=1098 - - Используется в событии «Мой друг». - legacy_id=1099 - Вы хотите купить товар? legacy_id=1100 @@ -4497,14 +4469,6 @@ Темный ворон legacy_id=1214 - - Используется в воскрешении Темной Лошади. - legacy_id=1215 - - - Используется при воскрешении Темного Ворона. - legacy_id=1216 - Домашний питомец legacy_id=1217 @@ -4581,10 +4545,6 @@ Герб монарха legacy_id=1235 - - Используется для объединения накидки лорда и плаща воина. - legacy_id=1236 - Проверьте детали в окне информации о домашнем животном. legacy_id=1237 @@ -4765,10 +4725,6 @@ Знак лорда legacy_id=1290 - - Использование при регистрации осады - legacy_id=1291 - Переместить в хранилище legacy_id=1294 @@ -5241,18 +5197,6 @@ Свиток Стража legacy_id=1416 - - Урон +20%% inувеличение эффекта - legacy_id=1417 - - - Продолжительность 60 секунд - legacy_id=1418 - - - Применимо только для ворот замка и статуи. - legacy_id=1419,1465 - Количество знаков legacy_id=1420 @@ -5433,10 +5377,6 @@ Навык атаки увеличится на +20%% legacy_id=1471 - - Скорость атаки увеличится +20. - legacy_id=1472 - Можно использовать навык legacy_id=1473 @@ -6061,14 +6001,6 @@ Функция Альянса будет ограничена из-за осады замка. legacy_id=1637 - - Увеличение скорости восстановления AG на +8. - legacy_id=1638 - - - Увеличение сопротивления молнии и льду. - legacy_id=1639 - Магазин legacy_id=1640 @@ -7045,10 +6977,6 @@ Чтобы уменьшить количество фруктов, необходимо снять оружие, доспехи и т. д. legacy_id=1909 - - Возможно понижение показателя с 1 по 9. - legacy_id=1910 - Это невозможно, поскольку количество полезных фруктов максимально. legacy_id=1911 diff --git a/src/Localization/Game.tl.resx b/src/Localization/Game.tl.resx index 1fd3ae1afb..79851bd19a 100644 --- a/src/Localization/Game.tl.resx +++ b/src/Localization/Game.tl.resx @@ -639,10 +639,6 @@ Ibaba ang cursor-> Ayusin ang window ng chat legacy_id=156 - - Warp sa kaukulang lugar pagkatapos ng %d segundo - legacy_id=157 - %s Warp scroll legacy_id=158 @@ -2369,10 +2365,6 @@ Pinapataas ang rate ng pagkuha ng Mana pagkatapos manghuli ng mga halimaw +Mana/8 legacy_id=635 - - Tumataas ng 1~3 stat point - legacy_id=636 - Ang natitirang oras ay ipinapakita legacy_id=638 @@ -2805,10 +2797,6 @@ Nagpalit ka na ng Dinorants legacy_id=747 - - Ginagamit sa pag-upgrade ng mga pakpak - legacy_id=748 - Dapat ay higit sa antas 10 upang gumamit ng mga prutas legacy_id=749 @@ -2985,22 +2973,10 @@ Ganap na Espada ng Arkanghel legacy_id=812 - - Ginamit sa online na kaganapan - legacy_id=813 - - - Ginagamit kapag pumapasok sa Blood Castle - legacy_id=814 - Natanggap ang gantimpala nang ibalik sa Arkanghel legacy_id=815 - - Ginagamit kapag gumagawa ng Cloak of Invisibility - legacy_id=816 - Ganap na Crossbow ng Arkanghel legacy_id=817 @@ -4065,10 +4041,6 @@ Bato ng Pagkakaibigan legacy_id=1098 - - Ginamit sa kaganapang Aking Kaibigan. - legacy_id=1099 - Gusto mo bang bumili ng item? legacy_id=1100 @@ -4497,14 +4469,6 @@ Dark Raven legacy_id=1214 - - Ginamit sa Dark Horse resurrection - legacy_id=1215 - - - Ginamit sa Dark Raven resurrection - legacy_id=1216 - Alagang hayop legacy_id=1217 @@ -4581,10 +4545,6 @@ Crest of monarch legacy_id=1235 - - Ginagamit sa pagsasama-sama ng Cape of Lord at Warrior's Cloak - legacy_id=1236 - Suriin ang mga detalye sa window ng impormasyon ng alagang hayop legacy_id=1237 @@ -4765,10 +4725,6 @@ Tanda ng panginoon legacy_id=1290 - - Gamitin sa pagpaparehistro ng pagkubkob - legacy_id=1291 - Ilipat sa vault legacy_id=1294 @@ -5241,18 +5197,6 @@ Scroll ng Tagapangalaga legacy_id=1416 - - Pinsala +20%% ipagtaas na epekto - legacy_id=1417 - - - Tagal 60 segundo - legacy_id=1418 - - - Naaangkop lamang para sa gate ng kastilyo at rebulto - legacy_id=1419,1465 - Bilang ng mga palatandaan legacy_id=1420 @@ -5433,10 +5377,6 @@ Ang kakayahan sa pag-atake ay tataas ng +20%% legacy_id=1471 - - Ang bilis ng pag-atake ay tataas ang +20 - legacy_id=1472 - Maaaring gamitin ang kasanayan legacy_id=1473 @@ -6061,14 +6001,6 @@ Ang pag-andar ng Alliance ay paghihigpitan dahil sa Castle Siege. legacy_id=1637 - - Taasan ang +8 AG na bilis ng pagbawi - legacy_id=1638 - - - Dagdagan ang resistensya ng Kidlat at Yelo - legacy_id=1639 - Tindahan legacy_id=1640 @@ -7045,10 +6977,6 @@ Upang mabawasan ang prutas, dapat tanggalin ang mga sandata, baluti at iba pa. legacy_id=1909 - - Posibleng bawasan ang stat 1~9 point - legacy_id=1910 - Imposible dahil ang magagamit na mga punto ng prutas ay nasa maximum. legacy_id=1911 diff --git a/src/Localization/Game.uk.resx b/src/Localization/Game.uk.resx index 07e5dd426a..90637c8d11 100644 --- a/src/Localization/Game.uk.resx +++ b/src/Localization/Game.uk.resx @@ -639,10 +639,6 @@ Перемістіть курсор вниз-> Налаштувати вікно чату legacy_id=156 - - Деформація до відповідної області через %d секунд - legacy_id=157 - %s Деформація сувою legacy_id=158 @@ -2369,10 +2365,6 @@ Збільшує швидкість отримання мани після полювання на монстрів +Мана/8 legacy_id=635 - - Збільшує 1–3 очки статистики - legacy_id=636 - Показано час, що залишився legacy_id=638 @@ -2805,10 +2797,6 @@ Ви обміняли Диноранти legacy_id=747 - - Використовується для покращення крил - legacy_id=748 - Щоб використовувати фрукти, рівень має бути вище 10 legacy_id=749 @@ -2985,22 +2973,10 @@ Абсолютний Меч Архангела legacy_id=812 - - Використовується в онлайн-події - legacy_id=813 - - - Використовується при вході в Кривавий замок - legacy_id=814 - Нагорода отримана після повернення до Архангела legacy_id=815 - - Використовується при створенні Плаща-Невидимки - legacy_id=816 - Абсолютний арбалет Архангела legacy_id=817 @@ -4065,10 +4041,6 @@ Камінь Дружби legacy_id=1098 - - Використовується в події My Friend. - legacy_id=1099 - Ви хочете купити товар? legacy_id=1100 @@ -4497,14 +4469,6 @@ Темний ворон legacy_id=1214 - - Використовується у воскресінні Dark Horse - legacy_id=1215 - - - Використовується у воскресінні Dark Raven - legacy_id=1216 - Домашня тварина legacy_id=1217 @@ -4581,10 +4545,6 @@ Герб монарха legacy_id=1235 - - Використовується для поєднання накидки лорда та плаща воїна - legacy_id=1236 - Перевірте деталі у вікні інформації про тварин legacy_id=1237 @@ -4765,10 +4725,6 @@ Знак владики legacy_id=1290 - - Використання при реєстрації облоги - legacy_id=1291 - Перейти до сховища legacy_id=1294 @@ -5241,18 +5197,6 @@ Сувій Охоронця legacy_id=1416 - - Пошкодження +20%% inпосилення ефекту - legacy_id=1417 - - - Тривалість 60 секунд - legacy_id=1418 - - - Застосовується лише для воріт і статуї замку - legacy_id=1419,1465 - Кількість знаків legacy_id=1420 @@ -5433,10 +5377,6 @@ Навичка атаки збільшиться на +20%% legacy_id=1471 - - Швидкість атаки збільшиться на +20 - legacy_id=1472 - Може використовувати навик legacy_id=1473 @@ -6061,14 +6001,6 @@ Функціонування альянсу буде обмежено через облогу замку. legacy_id=1637 - - Збільшити швидкість відновлення AG на +8 - legacy_id=1638 - - - Збільшити опір блискавки та льоду - legacy_id=1639 - Магазин legacy_id=1640 @@ -7045,10 +6977,6 @@ Щоб зменшити фрукти, зброю, обладунки та інше потрібно видалити. legacy_id=1909 - - Можливе зниження характеристики на 1~9 балів - legacy_id=1910 - Неможливо, оскільки придатні для використання точки фруктів максимальні. legacy_id=1911 diff --git a/src/Localization/Game.zh-TW.resx b/src/Localization/Game.zh-TW.resx index 2f4381958b..5193e8ac7c 100644 --- a/src/Localization/Game.zh-TW.resx +++ b/src/Localization/Game.zh-TW.resx @@ -639,10 +639,6 @@ 遊標下移->調整聊天窗口 legacy_id=156 - - %d秒後扭曲到對應區域 - legacy_id=157 - %s 扭曲捲軸 legacy_id=158 @@ -2369,10 +2365,6 @@ 狩獵怪物後魔力獲取率增加+魔力/8 legacy_id=635 - - 增加1~3點屬性點 - legacy_id=636 - 顯示剩餘時間 legacy_id=638 @@ -2805,10 +2797,6 @@ 您已交換迪諾蘭特 legacy_id=747 - - 用於升級翅膀 - legacy_id=748 - 必須達到10級以上才能使用水果 legacy_id=749 @@ -2985,22 +2973,10 @@ 絕對大天使之劍 legacy_id=812 - - 用於線上活動 - legacy_id=813 - - - 進入血色城堡時使用 - legacy_id=814 - 回到大天使身邊時獲得的獎勵 legacy_id=815 - - 建立隱形斗篷時使用 - legacy_id=816 - 大天使的絕對弩 legacy_id=817 @@ -4065,10 +4041,6 @@ 友誼之石 legacy_id=1098 - - 在「我的朋友」活動中使用。 - legacy_id=1099 - 您想購買商品嗎? legacy_id=1100 @@ -4497,14 +4469,6 @@ 暗鴉 legacy_id=1214 - - 用於黑馬復活 - legacy_id=1215 - - - 用於暗鴉復活 - legacy_id=1216 - 寵物 legacy_id=1217 @@ -4581,10 +4545,6 @@ 君主的紋章 legacy_id=1235 - - 用於組合領主斗篷和戰士斗篷 - legacy_id=1236 - 在寵物資訊視窗查看詳細信息 legacy_id=1237 @@ -4765,10 +4725,6 @@ 主的標誌 legacy_id=1290 - - 用於攻城登記 - legacy_id=1291 - 移至保管庫 legacy_id=1294 @@ -5241,18 +5197,6 @@ 守護者捲軸 legacy_id=1416 - - 傷害+20%% i效果增加 - legacy_id=1417 - - - 持續時間 60 秒 - legacy_id=1418 - - - 僅適用於城堡大門和雕像 - legacy_id=1419,1465 - 標誌數量 legacy_id=1420 @@ -5433,10 +5377,6 @@ 攻擊力增加+20%% legacy_id=1471 - - 攻擊速度增加+20 - legacy_id=1472 - 可以使用技能 legacy_id=1473 @@ -6061,14 +6001,6 @@ 聯盟功能將因城堡圍攻而受到限制。 legacy_id=1637 - - 增加+8 AG恢復速度 - legacy_id=1638 - - - 增加閃電和冰的抗性 - legacy_id=1639 - 店鋪 legacy_id=1640 @@ -7045,10 +6977,6 @@ 為了減少水果,必須移除武器、盔甲等。 legacy_id=1909 - - 可減少屬性1~9點 - legacy_id=1910 - 不可能,因為可用的水果點數已達到最大。 legacy_id=1911 diff --git a/src/bin/Data/Items/Group13_Helper.json b/src/bin/Data/Items/Group13_Helper.json index 3e07870b63..677b6df7f7 100644 --- a/src/bin/Data/Items/Group13_Helper.json +++ b/src/bin/Data/Items/Group13_Helper.json @@ -252,6 +252,42 @@ "es": "Contrato (Invocación)", "pt": "Contrato (Invocação)" }, + "description": [ + { + "text": { + "en": "Archer", + "de": "Bogenschütze", + "es": "Arquero", + "id": "Pemanah", + "ja": "コマンドアーチャー", + "pl": "Łucznik", + "pt": "Arqueiro", + "ru": "Лучник", + "tl": "mamamana", + "uk": "лучник", + "zh-TW": "射手" + }, + "color": "yellow", + "levels": [0, 0] + }, + { + "text": { + "en": "Spearman", + "de": "Speerkämpfer", + "es": "Lancero", + "id": "Tombak", + "ja": "コマンドスピアー", + "pl": "Włócznik", + "pt": "Lanceiro", + "ru": "Копейщик", + "tl": "Spearman", + "uk": "Списоносець", + "zh-TW": "斯皮爾曼" + }, + "color": "yellow", + "levels": [1, 1] + } + ], "width": 1, "height": 1, "durability": 255, @@ -361,6 +397,42 @@ "es": "Orden (Guardián/Roca de Vida)", "pt": "Ordem (Guard./Pedra da Vida)" }, + "description": [ + { + "text": { + "en": "Scroll of Guardian", + "de": "Schriftrolle des Wächters", + "es": "Pergamino de guardián", + "id": "Gulir Penjaga", + "ja": "ガーディアン注文書", + "pl": "Scroll of Guardian", + "pt": "Pergaminho do Guardião", + "ru": "Свиток Стража", + "tl": "Scroll ng Tagapangalaga", + "uk": "Сувій Охоронця", + "zh-TW": "守護者捲軸" + }, + "color": "yellow", + "levels": [0, 0] + }, + { + "text": { + "en": "Place Life Stone", + "de": "Lebensstein platzieren", + "es": "Colocar piedra de vida", + "id": "Tempatkan Batu Kehidupan", + "ja": "ライフストーン", + "pl": "Umieść Life Stone", + "pt": "Coloque a Pedra da Vida", + "ru": "Поместите Камень Жизни", + "tl": "Place Life Stone", + "uk": "Помістіть камінь життя", + "zh-TW": "放置生命石" + }, + "color": "yellow", + "levels": [1, 1] + } + ], "width": 1, "height": 1, "durability": 255, @@ -446,6 +518,40 @@ "pt": "Pena de Loch" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Used to upgrade wings", + "de": "Wird zum Verbessern von Flügeln verwendet", + "es": "Se utiliza para mejorar las alas.", + "id": "Digunakan untuk meningkatkan sayap", + "ja": "羽をアップグレードするための合成に使用", + "pl": "Służy do ulepszania Wings", + "pt": "Usado para atualizar asas", + "ru": "Используется для улучшения крыльев.", + "tl": "Ginagamit sa pag-upgrade ng mga pakpak", + "uk": "Використовується для покращення крил", + "zh-TW": "用於升級翅膀" + }, + "levels": [0, 0] + }, + { + "text": { + "en": "Used in combining Cape of Lord & Warrior's Cloak", + "de": "Wird zur Kombination von Umhang des Lords und Kriegerumhang verwendet", + "es": "Se utiliza para combinar la capa de Lord y la capa de guerrero.", + "id": "Digunakan dalam menggabungkan Cape of Lord & Warrior's Cloak", + "ja": "君主のマント合成時に使用", + "pl": "Używany do łączenia Cape of Lord i Warrior's Cloak", + "pt": "Usado na combinação da Capa do Senhor e da Capa do Guerreiro", + "ru": "Используется для объединения накидки лорда и плаща воина.", + "tl": "Ginagamit sa pagsasama-sama ng Cape of Lord at Warrior's Cloak", + "uk": "Використовується для поєднання накидки лорда та плаща воїна", + "zh-TW": "用於組合領主斗篷和戰士斗篷" + }, + "levels": [1, 1] + } + ], "width": 1, "height": 2, "statProfile": "helper", @@ -473,6 +579,201 @@ "pt": "Fruta" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "ENG Increases 1~3 stat points", + "de": "ENG Erhöht 1~3 Statuspunkte", + "es": "ESP Aumenta 1~3 puntos de estadísticas", + "id": "Bahasa Inggris Meningkatkan 1~3 poin stat", + "ja": "エナジー ステータス1~3ポイント生成", + "pl": "ENG Zwiększa 1-3 punkty statystyk", + "pt": "POR Aumenta 1~3 pontos de estatísticas", + "ru": "АНГЛ Увеличивает 1~3 очка характеристик.", + "tl": "ENG Tumataas ng 1~3 stat point", + "uk": "ENG Збільшує 1–3 очки статистики", + "zh-TW": "英語 增加1~3點屬性點" + }, + "levels": [0, 0] + }, + { + "text": { + "en": "ENG Possible to decrease stat 1~9 point", + "de": "ENG Verringert einen Wert um 1~9 Punkte", + "es": "ESP Es posible disminuir las estadísticas de 1 a 9 puntos.", + "id": "Bahasa Inggris Kemungkinan untuk menurunkan stat 1~9 poin", + "ja": "エナジー 減少ステータス1~9ポイント可能", + "pl": "ENG Możliwe zmniejszenie statystyki o 1~9 punktów", + "pt": "POR Possível diminuir estatísticas de 1 a 9 pontos", + "ru": "АНГЛ Возможно понижение показателя с 1 по 9.", + "tl": "ENG Posibleng bawasan ang stat 1~9 point", + "uk": "ENG Можливе зниження характеристики на 1~9 балів", + "zh-TW": "英語 可減少屬性1~9點" + }, + "levels": [0, 0] + }, + { + "text": { + "en": "STA Increases 1~3 stat points", + "de": "VIT Erhöht 1~3 Statuspunkte", + "es": "STA Aumenta 1~3 puntos de estadísticas", + "id": "STA Meningkatkan 1~3 poin stat", + "ja": "体力 ステータス1~3ポイント生成", + "pl": "STA Zwiększa 1-3 punkty statystyk", + "pt": "STA Aumenta 1~3 pontos de estatísticas", + "ru": "СТА Увеличивает 1~3 очка характеристик.", + "tl": "STA Tumataas ng 1~3 stat point", + "uk": "STA Збільшує 1–3 очки статистики", + "zh-TW": "史塔 增加1~3點屬性點" + }, + "levels": [1, 1] + }, + { + "text": { + "en": "STA Possible to decrease stat 1~9 point", + "de": "VIT Verringert einen Wert um 1~9 Punkte", + "es": "STA Es posible disminuir las estadísticas de 1 a 9 puntos.", + "id": "STA Kemungkinan untuk menurunkan stat 1~9 poin", + "ja": "体力 減少ステータス1~9ポイント可能", + "pl": "STA Możliwe zmniejszenie statystyki o 1~9 punktów", + "pt": "STA Possível diminuir estatísticas de 1 a 9 pontos", + "ru": "СТА Возможно понижение показателя с 1 по 9.", + "tl": "STA Posibleng bawasan ang stat 1~9 point", + "uk": "STA Можливе зниження характеристики на 1~9 балів", + "zh-TW": "史塔 可減少屬性1~9點" + }, + "levels": [1, 1] + }, + { + "text": { + "en": "AGI Increases 1~3 stat points", + "de": "BEW Erhöht 1~3 Statuspunkte", + "es": "AGI Aumenta 1~3 puntos de estadísticas", + "id": "AGI Meningkatkan 1~3 poin stat", + "ja": "敏捷性 ステータス1~3ポイント生成", + "pl": "AGI Zwiększa 1-3 punkty statystyk", + "pt": "AGI Aumenta 1~3 pontos de estatísticas", + "ru": "ОИИ Увеличивает 1~3 очка характеристик.", + "tl": "AGI Tumataas ng 1~3 stat point", + "uk": "AGI Збільшує 1–3 очки статистики", + "zh-TW": "通用人工智慧 增加1~3點屬性點" + }, + "levels": [2, 2] + }, + { + "text": { + "en": "AGI Possible to decrease stat 1~9 point", + "de": "BEW Verringert einen Wert um 1~9 Punkte", + "es": "AGI Es posible disminuir las estadísticas de 1 a 9 puntos.", + "id": "AGI Kemungkinan untuk menurunkan stat 1~9 poin", + "ja": "敏捷性 減少ステータス1~9ポイント可能", + "pl": "AGI Możliwe zmniejszenie statystyki o 1~9 punktów", + "pt": "AGI Possível diminuir estatísticas de 1 a 9 pontos", + "ru": "ОИИ Возможно понижение показателя с 1 по 9.", + "tl": "AGI Posibleng bawasan ang stat 1~9 point", + "uk": "AGI Можливе зниження характеристики на 1~9 балів", + "zh-TW": "通用人工智慧 可減少屬性1~9點" + }, + "levels": [2, 2] + }, + { + "text": { + "en": "STR Increases 1~3 stat points", + "de": "STÄ Erhöht 1~3 Statuspunkte", + "es": "FUE Aumenta 1~3 puntos de estadísticas", + "id": "STR Meningkatkan 1~3 poin stat", + "ja": "力 ステータス1~3ポイント生成", + "pl": "STR Zwiększa 1-3 punkty statystyk", + "pt": "FOR Aumenta 1~3 pontos de estatísticas", + "ru": "СТР Увеличивает 1~3 очка характеристик.", + "tl": "STR Tumataas ng 1~3 stat point", + "uk": "ВУЛ Збільшує 1–3 очки статистики", + "zh-TW": "STR 增加1~3點屬性點" + }, + "levels": [3, 3] + }, + { + "text": { + "en": "STR Possible to decrease stat 1~9 point", + "de": "STÄ Verringert einen Wert um 1~9 Punkte", + "es": "FUE Es posible disminuir las estadísticas de 1 a 9 puntos.", + "id": "STR Kemungkinan untuk menurunkan stat 1~9 poin", + "ja": "力 減少ステータス1~9ポイント可能", + "pl": "STR Możliwe zmniejszenie statystyki o 1~9 punktów", + "pt": "FOR Possível diminuir estatísticas de 1 a 9 pontos", + "ru": "СТР Возможно понижение показателя с 1 по 9.", + "tl": "STR Posibleng bawasan ang stat 1~9 point", + "uk": "ВУЛ Можливе зниження характеристики на 1~9 балів", + "zh-TW": "STR 可減少屬性1~9點" + }, + "levels": [3, 3] + }, + { + "text": { + "en": "Command Increases 1~3 stat points", + "de": "Führung Erhöht 1~3 Statuspunkte", + "es": "Dominio Aumenta 1~3 puntos de estadísticas", + "id": "Memerintah Meningkatkan 1~3 poin stat", + "ja": "統率 ステータス1~3ポイント生成", + "pl": "Rozkaz Zwiększa 1-3 punkty statystyk", + "pt": "Comando Aumenta 1~3 pontos de estatísticas", + "ru": "Команда Увеличивает 1~3 очка характеристик.", + "tl": "Utos Tumataas ng 1~3 stat point", + "uk": "Команда Збільшує 1–3 очки статистики", + "zh-TW": "命令 增加1~3點屬性點" + }, + "levels": [4, 4] + }, + { + "text": { + "en": "Command Possible to decrease stat 1~9 point", + "de": "Führung Verringert einen Wert um 1~9 Punkte", + "es": "Dominio Es posible disminuir las estadísticas de 1 a 9 puntos.", + "id": "Memerintah Kemungkinan untuk menurunkan stat 1~9 poin", + "ja": "統率 減少ステータス1~9ポイント可能", + "pl": "Rozkaz Możliwe zmniejszenie statystyki o 1~9 punktów", + "pt": "Comando Possível diminuir estatísticas de 1 a 9 pontos", + "ru": "Команда Возможно понижение показателя с 1 по 9.", + "tl": "Utos Posibleng bawasan ang stat 1~9 point", + "uk": "Команда Можливе зниження характеристики на 1~9 балів", + "zh-TW": "命令 可減少屬性1~9點" + }, + "levels": [4, 4] + }, + { + "text": { + "en": "It can be used with item removed.", + "de": "Kann nur verwendet werden, wenn die Ausrüstung abgelegt ist.", + "es": "Se puede utilizar sin el artículo.", + "id": "Dapat digunakan dengan item dilepas.", + "ja": "アイテムの未装備の際、使用可能", + "pl": "Można go używać po usunięciu przedmiotu.", + "pt": "Pode ser usado com item removido.", + "ru": "Его можно использовать, если предмет удален.", + "tl": "Maaari itong magamit kapag tinanggal ang item.", + "uk": "Його можна використовувати з вилученим предметом.", + "zh-TW": "它可以在移除物品的情況下使用。" + }, + "color": "darkRed", + "levels": [0, 4] + }, + { + "text": { + "en": "Can be equipped by Dark Lord", + "de": "Kann von Dunkler Lord ausgerüstet werden", + "es": "Puede ser equipado con señor oscuro", + "id": "Dapat dilengkapi dengan Pangeran Kegelapan", + "ja": "ダークロード使用可能", + "pl": "Może być wyposażony w Dark Lord", + "pt": "Pode ser equipado por Senhor das Trevas", + "ru": "Может быть оснащен Темный Лорд.", + "tl": "Maaaring gamitan ng Dark Lord", + "uk": "Може бути оснащений Темний Лорд", + "zh-TW": "可由黑暗領主配備" + }, + "levels": [4, 4] + } + ], "width": 1, "height": 1, "repairable": false, @@ -495,6 +796,23 @@ "pt": "Pergaminho do arcanjo" }, "tags": ["bloodCastleTicketPart"], + "description": [ + { + "text": { + "en": "Used when creating a Cloak of Invisibility", + "de": "Wird beim Erstellen eines Umhangs der Unsichtbarkeit verwendet", + "es": "Se utiliza al crear una capa de invisibilidad.", + "id": "Digunakan saat membuat Jubah Gaib", + "ja": "透明マントを入手するための合成に使われます。", + "pl": "Używane podczas tworzenia Cloak of Invisibility", + "pt": "Usado ao criar uma Capa de Invisibilidade", + "ru": "Используется при создании плаща-невидимки.", + "tl": "Ginagamit kapag gumagawa ng Cloak of Invisibility", + "uk": "Використовується при створенні Плаща-Невидимки", + "zh-TW": "建立隱形斗篷時使用" + } + } + ], "width": 1, "height": 2, "durability": 128, @@ -518,6 +836,23 @@ "pt": "Osso de sangue" }, "tags": ["bloodCastleTicketPart"], + "description": [ + { + "text": { + "en": "Used when creating a Cloak of Invisibility", + "de": "Wird beim Erstellen eines Umhangs der Unsichtbarkeit verwendet", + "es": "Se utiliza al crear una capa de invisibilidad.", + "id": "Digunakan saat membuat Jubah Gaib", + "ja": "透明マントを入手するための合成に使われます。", + "pl": "Używane podczas tworzenia Cloak of Invisibility", + "pt": "Usado ao criar uma Capa de Invisibilidade", + "ru": "Используется при создании плаща-невидимки.", + "tl": "Ginagamit kapag gumagawa ng Cloak of Invisibility", + "uk": "Використовується при створенні Плаща-Невидимки", + "zh-TW": "建立隱形斗篷時使用" + } + } + ], "width": 1, "height": 2, "durability": 128, @@ -540,6 +875,56 @@ "es": "Manto de Invisibilidad", "pt": "Manto da invisibilidade" }, + "description": [ + { + "text": { + "en": "Used when entering Blood Castle", + "de": "Wird beim Betreten der Blutburg verwendet", + "es": "Se utiliza al entrar al Castillo de Sangre.", + "id": "Digunakan saat memasuki Blood Castle", + "ja": "ブラッドキャッスルに入る時に使われます。", + "pl": "Używane podczas wchodzenia do Blood Castle", + "pt": "Usado ao entrar no Castelo de Sangue", + "ru": "Используется при входе в Кровавый Замок.", + "tl": "Ginagamit kapag pumapasok sa Blood Castle", + "uk": "Використовується при вході в Кривавий замок", + "zh-TW": "進入血色城堡時使用" + } + }, + { + "text": "" + }, + { + "text": { + "en": "The remaining time is shown", + "de": "Die verbleibende Zeit wird angezeigt", + "es": "Se muestra el tiempo restante", + "id": "Waktu yang tersisa ditampilkan", + "ja": "マウスボタンを右クリックすれば", + "pl": "Wyświetlany jest pozostały czas", + "pt": "O tempo restante é mostrado", + "ru": "Оставшееся время показано", + "tl": "Ang natitirang oras ay ipinapakita", + "uk": "Показано час, що залишився", + "zh-TW": "顯示剩餘時間" + } + }, + { + "text": { + "en": "when you right click on your mouse.", + "de": "wenn Sie mit der rechten Maustaste klicken.", + "es": "cuando haces clic derecho en tu mouse.", + "id": "ketika Anda mengklik kanan pada mouse Anda.", + "ja": "残った時間を見ることができます。", + "pl": "po kliknięciu prawym przyciskiem myszy.", + "pt": "quando você clica com o botão direito do mouse.", + "ru": "когда вы щелкаете правой кнопкой мыши.", + "tl": "kapag nag-right click ka sa iyong mouse.", + "uk": "коли ви клацаєте правою кнопкою миші.", + "zh-TW": "當您右鍵單擊滑鼠時。" + } + } + ], "width": 2, "height": 2, "durability": 255, @@ -935,6 +1320,40 @@ "pt": "Espírito" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Used in Dark Horse resurrection", + "de": "Wird zur Wiederbelebung des Dunklen Pferdes verwendet", + "es": "Utilizado en la resurrección de Dark Horse", + "id": "Digunakan dalam kebangkitan Kuda Hitam", + "ja": "ダークホースの復活に使います。", + "pl": "Używany podczas wskrzeszenia Dark Horse", + "pt": "Usado na ressurreição do Dark Horse", + "ru": "Используется в воскрешении Темной Лошади.", + "tl": "Ginamit sa Dark Horse resurrection", + "uk": "Використовується у воскресінні Dark Horse", + "zh-TW": "用於黑馬復活" + }, + "levels": [0, 0] + }, + { + "text": { + "en": "Used in Dark Raven resurrection", + "de": "Wird zur Wiederbelebung des Dunklen Raben verwendet", + "es": "Utilizado en la resurrección de Dark Raven", + "id": "Digunakan dalam kebangkitan Dark Raven", + "ja": "ダークスピリットの復活に使います。", + "pl": "Używany podczas wskrzeszenia Mrocznego Kruka", + "pt": "Usado na ressurreição do Dark Raven", + "ru": "Используется при воскрешении Темного Ворона.", + "tl": "Ginamit sa Dark Raven resurrection", + "uk": "Використовується у воскресінні Dark Raven", + "zh-TW": "用於暗鴉復活" + }, + "levels": [1, 1] + } + ], "width": 1, "height": 1, "classRequirements": { diff --git a/src/bin/Data/Items/Group14_Potion.json b/src/bin/Data/Items/Group14_Potion.json index eb96f45f0a..657a5564ed 100644 --- a/src/bin/Data/Items/Group14_Potion.json +++ b/src/bin/Data/Items/Group14_Potion.json @@ -122,6 +122,110 @@ "es": "Pócima de Asedio", "pt": "Poção de sítio" }, + "description": [ + { + "text": { + "en": "Damage +20% increase effect", + "de": "Effekt: Schaden +20%", + "es": "Daño +20% iefecto de aumento", + "id": "Kerusakan +20% imeningkatkan efek", + "ja": "攻撃力+20%上昇效果", + "pl": "Efekt zwiększenia obrażeń o 20%", + "pt": "Dano +20% infeito de aumento", + "ru": "Урон +20% inувеличение эффекта", + "tl": "Pinsala +20% ipagtaas na epekto", + "uk": "Пошкодження +20% inпосилення ефекту", + "zh-TW": "傷害+20% i效果增加" + }, + "color": "darkRed", + "levels": [0, 0] + }, + { + "text": { + "en": "Duration 60 seconds", + "de": "Dauer 60 Sekunden", + "es": "Duración 60 segundos", + "id": "Durasi 60 detik", + "ja": "持続時間120秒", + "pl": "Czas trwania 60 sekund", + "pt": "Duração 60 segundos", + "ru": "Продолжительность 60 секунд", + "tl": "Tagal 60 segundo", + "uk": "Тривалість 60 секунд", + "zh-TW": "持續時間 60 秒" + }, + "color": "darkRed", + "levels": [0, 0] + }, + { + "text": { + "en": "Only applicable for castle gate and statue", + "de": "Gilt nur für Burgtor und Statue", + "es": "Sólo aplicable a la puerta del castillo y a la estatua.", + "id": "Hanya berlaku untuk gerbang kastil dan patung", + "ja": "城門、石像のみ適用", + "pl": "Dotyczy tylko bramy zamkowej i posągu", + "pt": "Aplicável apenas para portão de castelo e estátua", + "ru": "Применимо только для ворот замка и статуи.", + "tl": "Naaangkop lamang para sa gate ng kastilyo at rebulto", + "uk": "Застосовується лише для воріт і статуї замку", + "zh-TW": "僅適用於城堡大門和雕像" + }, + "color": "darkRed", + "levels": [0, 0] + }, + { + "text": { + "en": "Increase +8 AG recovery speed", + "de": "Erhöht die AG-Regeneration um +8", + "es": "Aumentar la velocidad de recuperación de +8 AG", + "id": "Meningkatkan kecepatan pemulihan +8 AG", + "ja": "AG回復のスピード増加+8", + "pl": "Zwiększa prędkość odzyskiwania +8 AG", + "pt": "Aumenta a velocidade de recuperação de +8 AG", + "ru": "Увеличение скорости восстановления AG на +8.", + "tl": "Taasan ang +8 AG na bilis ng pagbawi", + "uk": "Збільшити швидкість відновлення AG на +8", + "zh-TW": "增加+8 AG恢復速度" + }, + "color": "darkRed", + "levels": [1, 1] + }, + { + "text": { + "en": "Increase resistance of Lightning and Ice", + "de": "Erhöht die Resistenz gegen Blitz und Eis", + "es": "Aumenta la resistencia de Rayo y Hielo.", + "id": "Meningkatkan ketahanan terhadap Petir dan Es", + "ja": "サンダー、アイス抵抗力向上", + "pl": "Zwiększa odporność na błyskawice i lód", + "pt": "Aumenta a resistência de Raios e Gelo", + "ru": "Увеличение сопротивления молнии и льду.", + "tl": "Dagdagan ang resistensya ng Kidlat at Yelo", + "uk": "Збільшити опір блискавки та льоду", + "zh-TW": "增加閃電和冰的抗性" + }, + "color": "darkRed", + "levels": [1, 1] + }, + { + "text": { + "en": "Attacking speed will increase +20", + "de": "Die Angriffsgeschwindigkeit wird um +20 erhöht", + "es": "La velocidad de ataque aumentará +20", + "id": "Kecepatan menyerang akan meningkat +20", + "ja": "攻撃スピードも+20増加します。", + "pl": "Szybkość ataku wzrośnie o +20", + "pt": "A velocidade de ataque aumentará +20", + "ru": "Скорость атаки увеличится +20.", + "tl": "Ang bilis ng pag-atake ay tataas ang +20", + "uk": "Швидкість атаки збільшиться на +20", + "zh-TW": "攻擊速度增加+20" + }, + "color": "darkRed", + "levels": [1, 1] + } + ], "width": 1, "height": 1, "sellValue": 30, @@ -163,6 +267,24 @@ "es": "Rollo del Portal del Pueblo", "pt": "Perg. de Portal para a Cidade" }, + "description": [ + { + "text": { + "en": "Warp to the corresponding area after 3 seconds", + "de": "Warp in den entsprechenden Bereich in 3 Sekunden", + "es": "Deformarse al área correspondiente después de 3 segundos", + "id": "Warp ke area yang sesuai setelah 3 detik", + "ja": "3秒後該当地域に移動", + "pl": "Przeskocz do odpowiedniego obszaru po 3 sekundach", + "pt": "Warp para a área correspondente após 3 segundos", + "ru": "Переместитесь в соответствующую область через 3 секунд.", + "tl": "Warp sa kaukulang lugar pagkatapos ng 3 segundo", + "uk": "Деформація до відповідної області через 3 секунд", + "zh-TW": "3秒後扭曲到對應區域" + }, + "levels": [1, 8] + } + ], "width": 1, "height": 2, "level": 30, @@ -393,6 +515,56 @@ "es": "Rena", "pt": "Rena" }, + "description": [ + { + "text": { + "en": "Used in the online event", + "de": "Wird im Online-Event verwendet", + "es": "Utilizado en el evento en línea.", + "id": "Digunakan dalam acara online", + "ja": "オンラインイベントに使われます。", + "pl": "Używane podczas wydarzenia online", + "pt": "Usado no evento online", + "ru": "Используется в онлайн-мероприятии", + "tl": "Ginamit sa online na kaganapan", + "uk": "Використовується в онлайн-події", + "zh-TW": "用於線上活動" + }, + "levels": [1, 1] + }, + { + "text": { + "en": "Used in the My Friend event.", + "de": "Wird im „Mein Freund“-Event verwendet.", + "es": "Usado en el evento Mi Amigo.", + "id": "Digunakan dalam acara Temanku.", + "ja": "友達イベントに使われます。", + "pl": "Używane w wydarzeniu Mój Przyjaciel.", + "pt": "Usado no evento Meu Amigo.", + "ru": "Используется в событии «Мой друг».", + "tl": "Ginamit sa kaganapang Aking Kaibigan.", + "uk": "Використовується в події My Friend.", + "zh-TW": "在「我的朋友」活動中使用。" + }, + "levels": [2, 2] + }, + { + "text": { + "en": "Use in siege registration", + "de": "Wird zur Registrierung für Castle Siege verwendet", + "es": "Uso en el registro de asedio", + "id": "Gunakan dalam pendaftaran pengepungan", + "ja": "エンブレム登録期間に使用", + "pl": "Użyj w rejestracji oblężenia", + "pt": "Use no registro de cerco", + "ru": "Использование при регистрации осады", + "tl": "Gamitin sa pagpaparehistro ng pagkubkob", + "uk": "Використання при реєстрації облоги", + "zh-TW": "用於攻城登記" + }, + "levels": [3, 3] + } + ], "width": 1, "height": 1, "tradable": false, diff --git a/src/source/Data/GameData/ItemData/ItemDefinition.h b/src/source/Data/GameData/ItemData/ItemDefinition.h index 56a33a9133..44bd186120 100644 --- a/src/source/Data/GameData/ItemData/ItemDefinition.h +++ b/src/source/Data/GameData/ItemData/ItemDefinition.h @@ -82,11 +82,23 @@ enum class ItemTextColor : BYTE Orange = TEXT_COLOR_ORANGE, }; -// One line of an item's description in its tooltip: a text with its translations (empty: a blank line) and its color. +// One line of an item's description in its tooltip: a text with its translations (empty: a blank line), its color, and +// the item levels it is shown at (both included; every level unless set). struct ItemDescriptionLine { LocalizedString text; ItemTextColor color = ItemTextColor::White; + int minLevel = 0; + int maxLevel = ItemLevelCount - 1; + + bool IsShownAt(int level) const + { + return level >= minLevel && level <= maxLevel; + } + bool HasLevels() const + { + return minLevel != 0 || maxLevel != ItemLevelCount - 1; + } bool operator==(const ItemDescriptionLine& other) const = default; }; diff --git a/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp b/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp index 9cebc5aeee..47880d2505 100644 --- a/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp +++ b/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp @@ -27,6 +27,7 @@ constexpr const char* Tags = "tags"; constexpr const char* Description = "description"; constexpr const char* Text = "text"; constexpr const char* Color = "color"; +constexpr const char* Levels = "levels"; constexpr const char* Requirements = "requirements"; constexpr const char* RequirementsByLevel = "requirementsByLevel"; constexpr const char* ClassRequirements = "classRequirements"; @@ -160,7 +161,8 @@ OrderedJson WriteTags(const ItemTagSet& tags) return json; } -// One object per line: its text (as a name is written; "" for a blank line) and its color unless white. +// One object per line: its text (as a name is written; "" for a blank line), its color unless white, and its item +// levels unless it is shown at every level. OrderedJson WriteDescription(const std::vector& description) { OrderedJson json = OrderedJson::array(); @@ -173,6 +175,10 @@ OrderedJson WriteDescription(const std::vector& description { entry[Keys::Color] = WriteValue(line.color); } + if (line.HasLevels()) + { + entry[Keys::Levels] = OrderedJson::array({line.minLevel, line.maxLevel}); + } json.push_back(std::move(entry)); } return json; @@ -252,6 +258,7 @@ class ItemReader bool ReadNames(const OrderedJson& json, LocalizedString& names); void ReadTags(const OrderedJson& json, ItemTagSet& tags); void ReadDescription(const OrderedJson& json, std::vector& description); + void ReadDescriptionLevels(const OrderedJson& json, const std::string& field, ItemDescriptionLine& line); void ReadStats(const OrderedJson& json, ItemDefinition& definition); void ReadRequirements(const OrderedJson& json, ItemDefinition& definition); void ReadRequirementsByLevel(const OrderedJson& json, ItemDefinition& definition); @@ -427,7 +434,12 @@ void ItemReader::ReadDescription(const OrderedJson& json, std::vector() >= 0 && value.get() < ItemLevelCount; }; + if (!json.is_array() || json.size() != 2 || !isLevel(json[0]) || !isLevel(json[1]) || + json[0].get() > json[1].get()) + { + AddIssue(ItemDataIssueSeverity::Error, field, + "must be [first, last], two item levels from 0 to " + std::to_string(ItemLevelCount - 1) + + " with the first not above the last"); + return; + } + line.minLevel = json[0].get(); + line.maxLevel = json[1].get(); +} + void ItemReader::ReadStats(const OrderedJson& json, ItemDefinition& definition) { VisitStatFields(definition, @@ -637,8 +666,9 @@ std::string WriteItemGroupJson(int group, std::span items) // Names are UTF-8 already; replace (instead of throwing on) anything that // is not, so a bad name can never stop a save half-way. - const std::string text = + std::string text = Json::PutListsOnOneLine(root.dump(Json::Indent, ' ', false, OrderedJson::error_handler_t::replace), Keys::Tags); + text = Json::PutListsOnOneLine(text, Keys::Levels); return Json::PutObjectsOnOneLine(text, Keys::RequirementsByLevel) + "\n"; } } // namespace Data::Items diff --git a/src/source/Engine/Object/ZzzInventory.cpp b/src/source/Engine/Object/ZzzInventory.cpp index 9c8d787525..eed4eb563b 100644 --- a/src/source/Engine/Object/ZzzInventory.cpp +++ b/src/source/Engine/Object/ZzzInventory.cpp @@ -3728,8 +3728,8 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; } } - // The item data's description in the UI's language with its placeholders filled in for the item: each line - // wrapped to the tooltip's width and at its line breaks, the pieces in the line's color. + // The item data's description in the UI's language with its placeholders filled in for the item: the lines of + // the item's level, each wrapped to the tooltip's width and at its line breaks, the pieces in the line's color. if (const Data::Items::ItemDefinition* definition = g_ItemDatabase.Find(ip->Type)) { g_pRenderText->SetFont(g_hFont); @@ -3737,6 +3737,10 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, { return g_pRenderText->MeasureText(text, static_cast(length)).cx; }; for (const Data::Items::ItemDescriptionLine& line : definition->description) { + if (!line.IsShownAt(Level)) + { + continue; + } if (line.text.IsEmpty()) { // A blank line, as the tooltip writes its own. @@ -3760,134 +3764,7 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, } } } - if (ip->Type == ITEM_TOWN_PORTAL_SCROLL && Level >= 1 && Level <= 8) - { - mu_swprintf(TextList[TextNum], I18N::Game::WarpToTheCorrespondingAreaAfterDSeconds, 3); - TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++; - } - if (ip->Type == ITEM_SPIRIT) - { - TextListColor[TextNum] = TEXT_COLOR_WHITE; - switch (Level) - { - case 0: mu_swprintf(TextList[TextNum], I18N::Game::UsedInDarkHorseResurrection); TextNum++; break; - case 1: mu_swprintf(TextList[TextNum], I18N::Game::UsedInDarkRavenResurrection); TextNum++; break; - } - } - else if (ip->Type == ITEM_LOCHS_FEATHER) - { - TextListColor[TextNum] = TEXT_COLOR_WHITE; - switch (Level) - { - case 0: mu_swprintf(TextList[TextNum], L"%ls", I18N::Game::UsedToUpgradeWings); TextNum++; break; - case 1: mu_swprintf(TextList[TextNum], L"%ls", I18N::Game::UsedInCombiningCapeOfLordWarriorSCloak); TextNum++; break; - } - } - - else if (ip->Type == ITEM_FRUITS) - { - TextListColor[TextNum] = TEXT_COLOR_WHITE; - switch (Level) - { - case 0:mu_swprintf(TextList[TextNum], L"%ls %ls", I18N::Game::ENG, I18N::Game::Increases13StatPoints); break; - case 1:mu_swprintf(TextList[TextNum], L"%ls %ls", I18N::Game::STA, I18N::Game::Increases13StatPoints); break; - case 2:mu_swprintf(TextList[TextNum], L"%ls %ls", I18N::Game::AGI, I18N::Game::Increases13StatPoints); break; - case 3:mu_swprintf(TextList[TextNum], L"%ls %ls", I18N::Game::STR, I18N::Game::Increases13StatPoints); break; - case 4:mu_swprintf(TextList[TextNum], L"%ls %ls", I18N::Game::Command, I18N::Game::Increases13StatPoints); break; - } - TextNum++; - TextListColor[TextNum] = TEXT_COLOR_WHITE; - switch (Level) - { - case 0:mu_swprintf(TextList[TextNum], L"%ls %ls", I18N::Game::ENG, I18N::Game::PossibleToDecreaseStat19Point); break; - case 1:mu_swprintf(TextList[TextNum], L"%ls %ls", I18N::Game::STA, I18N::Game::PossibleToDecreaseStat19Point); break; - case 2:mu_swprintf(TextList[TextNum], L"%ls %ls", I18N::Game::AGI, I18N::Game::PossibleToDecreaseStat19Point); break; - case 3:mu_swprintf(TextList[TextNum], L"%ls %ls", I18N::Game::STR, I18N::Game::PossibleToDecreaseStat19Point); break; - case 4:mu_swprintf(TextList[TextNum], L"%ls %ls", I18N::Game::Command, I18N::Game::PossibleToDecreaseStat19Point); break; - } - TextNum++; - TextListColor[TextNum] = TEXT_COLOR_DARKRED; - mu_swprintf(TextList[TextNum], I18N::Game::ItCanBeUsedWithItemRemoved); - - if (Level == 4) - { - TextNum++; - TextListColor[TextNum] = TEXT_COLOR_WHITE; - mu_swprintf(TextList[TextNum], I18N::Game::CanBeEquippedByS, I18N::Game::DarkLord); - } - TextNum++; - } - else if (ip->Type == ITEM_SCROLL_OF_ARCHANGEL) - { - TextListColor[TextNum] = TEXT_COLOR_WHITE; - mu_swprintf(TextList[TextNum], I18N::Game::UsedWhenCreatingACloakOfInvisibility); - TextNum++; - } - else if (ip->Type == ITEM_BLOOD_BONE) - { - TextListColor[TextNum] = TEXT_COLOR_WHITE; - mu_swprintf(TextList[TextNum], I18N::Game::UsedWhenCreatingACloakOfInvisibility); - TextNum++; - } - else if (ip->Type == ITEM_INVISIBILITY_CLOAK) - { - TextListColor[TextNum] = TEXT_COLOR_WHITE; - mu_swprintf(TextList[TextNum], I18N::Game::UsedWhenEnteringBloodCastle); - TextNum++; - mu_swprintf(TextList[TextNum], L"\n"); - TextNum++; SkipNum++; - mu_swprintf(TextList[TextNum], I18N::Game::TheRemainingTimeIsShown); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::WhenYouRightClickOnYourMouse); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_SIEGE_POTION) - { - switch (Level) - { - case 0: - { - mu_swprintf(TextList[TextNum], I18N::Game::Damage20IncreaseEffect); TextListColor[TextNum] = TEXT_COLOR_DARKRED; TextBold[TextNum] = false; TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::Duration60Seconds); TextListColor[TextNum] = TEXT_COLOR_DARKRED; TextBold[TextNum] = false; TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::OnlyApplicableForCastleGateAndStatue); TextListColor[TextNum] = TEXT_COLOR_DARKRED; TextBold[TextNum] = false; TextNum++; - } - break; - case 1: - { - mu_swprintf(TextList[TextNum], I18N::Game::Increase8AGRecoverySpeed); TextListColor[TextNum] = TEXT_COLOR_DARKRED; TextBold[TextNum] = false; TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseResistanceOfLightningAndIce); TextListColor[TextNum] = TEXT_COLOR_DARKRED; TextBold[TextNum] = false; TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::AttackingSpeedWillIncrease20); TextListColor[TextNum] = TEXT_COLOR_DARKRED; TextBold[TextNum] = false; TextNum++; - } - break; - } - } - else if (ip->Type == ITEM_CONTRACT_SUMMON) - { - switch (Level) - { - case 0: mu_swprintf(TextList[TextNum], I18N::Game::Archer); break; - case 1: mu_swprintf(TextList[TextNum], I18N::Game::Spearman); break; - } - TextListColor[TextNum] = TEXT_COLOR_YELLOW; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_LIFE_STONE_ITEM) - { - switch (Level) - { - case 0: mu_swprintf(TextList[TextNum], I18N::Game::ScrollOfGuardian); break; - case 1: mu_swprintf(TextList[TextNum], I18N::Game::PlaceLifeStone); break; - } - TextListColor[TextNum] = TEXT_COLOR_YELLOW; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_ARMOR_OF_GUARDSMAN) + if (ip->Type == ITEM_ARMOR_OF_GUARDSMAN) { int startIndex = 0; if (gCharacterManager.GetBaseClass(Hero->Class) == CLASS_DARK || gCharacterManager.GetBaseClass(Hero->Class) == CLASS_DARK_LORD @@ -3936,18 +3813,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, TextListColor[TextNum] = TEXT_COLOR_DARKBLUE; TextNum++; } - else if (ip->Type == ITEM_RENA) - { - TextListColor[TextNum] = TEXT_COLOR_WHITE; - switch (Level) - { - case 1: mu_swprintf(TextList[TextNum], I18N::Game::UsedInTheOnlineEvent); break; - case 2: mu_swprintf(TextList[TextNum], I18N::Game::UsedInTheMyFriendEvent); break; - case 3: mu_swprintf(TextList[TextNum], I18N::Game::UseInSiegeRegistration); break; - default: break; - } - TextNum++; - } else if (ip->Type == ITEM_LOST_MAP || ip->Type == ITEM_SYMBOL_OF_KUNDUN) { TextNum = RenderHellasItemInfo(ip, TextNum); diff --git a/tests/data/test_item_database_files.cpp b/tests/data/test_item_database_files.cpp index 9c73a1dc77..4bec474662 100644 --- a/tests/data/test_item_database_files.cpp +++ b/tests/data/test_item_database_files.cpp @@ -299,6 +299,123 @@ TEST_CASE("The wings', capes' and pets' tooltip values come from their data as f CHECK(compared == 27 * ItemLevelCount); } +// The lines the tooltip code wrote by item level before they were descriptions, in English with their colors. +struct OldLine +{ + std::string text; + ItemTextColor color = ItemTextColor::White; + bool operator==(const OldLine& other) const = default; +}; + +std::vector OldLevelLines(int group, int number, int level) +{ + using enum ItemTextColor; + const auto one = [&](std::initializer_list> byLevel) -> std::vector + { + for (const auto& [lineLevel, line] : byLevel) + { + if (lineLevel == level) + { + return {line}; + } + } + return {}; + }; + if (group == 13 && number == 7) + { + return one({{0, {"Archer", Yellow}}, {1, {"Spearman", Yellow}}}); + } + if (group == 13 && number == 11) + { + return one({{0, {"Scroll of Guardian", Yellow}}, {1, {"Place Life Stone", Yellow}}}); + } + if (group == 13 && number == 14) + { + return one({{0, {"Used to upgrade wings"}}, {1, {"Used in combining Cape of Lord & Warrior's Cloak"}}}); + } + if (group == 13 && number == 15 && level <= 4) + { + constexpr const char* stats[] = {"ENG", "STA", "AGI", "STR", "Command"}; + std::vector lines = {{std::string(stats[level]) + " Increases 1~3 stat points"}, + {std::string(stats[level]) + " Possible to decrease stat 1~9 point"}, + {"It can be used with item removed.", DarkRed}}; + if (level == 4) + { + lines.push_back({"Can be equipped by Dark Lord"}); + } + return lines; + } + if (group == 13 && (number == 16 || number == 17)) + { + return {{"Used when creating a Cloak of Invisibility"}}; + } + if (group == 13 && number == 18) + { + return {{"Used when entering Blood Castle"}, + {""}, + {"The remaining time is shown"}, + {"when you right click on your mouse."}}; + } + if (group == 13 && number == 31) + { + return one({{0, {"Used in Dark Horse resurrection"}}, {1, {"Used in Dark Raven resurrection"}}}); + } + if (group == 14 && number == 7 && level == 0) + { + return {{"Damage +20% increase effect", DarkRed}, + {"Duration 60 seconds", DarkRed}, + {"Only applicable for castle gate and statue", DarkRed}}; + } + if (group == 14 && number == 7 && level == 1) + { + return {{"Increase +8 AG recovery speed", DarkRed}, + {"Increase resistance of Lightning and Ice", DarkRed}, + {"Attacking speed will increase +20", DarkRed}}; + } + if (group == 14 && number == 10 && level >= 1 && level <= 8) + { + return {{"Warp to the corresponding area after 3 seconds"}}; + } + if (group == 14 && number == 21) + { + return one({{1, {"Used in the online event"}}, + {2, {"Used in the My Friend event."}}, + {3, {"Use in siege registration"}}}); + } + return {}; +} + +TEST_CASE("The tooltip texts by item level come from the descriptions as from the old code [data][items]") +{ + constexpr std::pair items[] = {{13, 7}, {13, 11}, {13, 14}, {13, 15}, {13, 16}, {13, 17}, + {13, 18}, {13, 31}, {14, 7}, {14, 10}, {14, 21}}; + const ItemDataLoadResult result = LoadItemDataDirectory(DataDirectory / "Items"); + const ItemStatsLoadResult stats = LoadItemStatsFile(DataDirectory / "Items" / "Stats" / ItemStatsFileName); + REQUIRE_FALSE(HasErrors(stats.issues)); + const ItemStatProfiles profiles(stats.file); + for (const auto& [group, number] : items) + { + const auto found = std::find_if(result.items.begin(), result.items.end(), [&](const ItemDefinition& item) + { return item.group == group && item.number == number; }); + REQUIRE(found != result.items.end()); + // Every level the items have. The old code also wrote an empty line at the Contract Summon's, Life Stone's and + // Rena's levels without a text (a stale line of the text list); the data writes none. + for (int level = 0; level < ItemLevelCount; ++level) + { + INFO(group << "/" << number << " +" << level); + std::vector lines; + for (const ItemDescriptionLine& line : found->description) + { + if (line.IsShownAt(level)) + { + lines.push_back({FillPlaceholders(line.text.GetNeutral(), level, profiles), line.color}); + } + } + CHECK(lines == OldLevelLines(group, number, level)); + } + } +} + // The texts the tooltip code wrote for these items are their descriptions now, in every UI language. TEST_CASE("The original items' tooltip texts are in their descriptions [data][items]") { diff --git a/tests/data/test_item_json.cpp b/tests/data/test_item_json.cpp index b26de852c7..1829465ec7 100644 --- a/tests/data/test_item_json.cpp +++ b/tests/data/test_item_json.cpp @@ -325,6 +325,50 @@ TEST_CASE("An item's description is kept through write and read [data][items]") CHECK(HasErrors(badColor.issues)); } +TEST_CASE("A description line's item levels are kept through write and read, and checked [data][items]") +{ + ItemDefinition scroll = MakeKris(); + scroll.group = 14; + scroll.number = 10; + scroll.slot = ItemSlot::None; + scroll.weaponKind = WeaponKind::None; + scroll.statProfile.clear(); + ItemDescriptionLine warp; + warp.text.Set("en", "Warp to the corresponding area after 3 seconds"); + warp.minLevel = 1; + warp.maxLevel = 8; + ItemDescriptionLine always; + always.text.Set("en", "Shown at every level"); + scroll.description = {warp, always}; + + CHECK_FALSE(warp.IsShownAt(0)); + CHECK(warp.IsShownAt(1)); + CHECK(warp.IsShownAt(8)); + CHECK_FALSE(warp.IsShownAt(9)); + CHECK(always.IsShownAt(0)); + CHECK(always.IsShownAt(ItemLevelCount - 1)); + + // Written on one line, and only for a line that is not shown at every level. + const std::string text = WriteItemGroupJson(14, std::vector{scroll}); + CHECK(text.find("\"levels\": [1, 8]") != std::string::npos); + CHECK(text.find("\"levels\"") == text.rfind("\"levels\"")); + const ReadResult result = Read(text); + REQUIRE(result.items.size() == 1); + CHECK(result.items.front().description == scroll.description); + CHECK_FALSE(HasErrors(result.issues)); + CHECK(WriteItemGroupJson(14, result.items) == text); + + for (const char* levels : {R"("levels": [8, 1])", R"("levels": [0, 16])", R"("levels": [-1, 2])", + R"("levels": [3])", R"("levels": 3)", R"("levels": [1.5, 2])"}) + { + INFO(levels); + const ReadResult bad = Read(std::string(R"({"formatVersion": 1, "group": 14, "items": [ + {"number": 10, "name": "Town Portal Scroll", "description": [{"text": "x", )") + + levels + "}]}]}"); + CHECK(HasIssue(bad.issues, ItemDataIssueSeverity::Error, "description[0].levels")); + } +} + TEST_CASE("An item's stat profile is kept through write and read [data][items]") { ItemDefinition kris = MakeKris(); From fbd27bfd4bf39ef51b9aa0752c3f598de08a94d8 Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Wed, 21 Oct 2026 13:52:24 -0300 Subject: [PATCH 03/19] refactor(items): the second item chain's tooltip texts come from the data The fixed lines of the item chain RenderItemInfo writes under an item's name (seals, talismans, tickets, cards, rings, necklaces, keys, boxes, pets, cherry blossoms, ...) are the descriptions of 72 items now: 55 cases with only fixed texts, colors, blank lines and constant numbers. Their texts keep all 11 UI languages, converted as the code printed them (printf %% as %, its numbers and text arguments written in; a %ls text as it is; a translation without the %d keeps its own number, as printf left the argument out). The Moonstone Pendant's "Cannot Repair" comes before its description. None of the 72 items has stat lines or a box list, which are drawn between the chain and the description, so the tooltips look the same; a test compares each item's lines and colors with the old code's. The cases go (527 lines), and so do the 51 .resx texts no other code prints (none is in a computed Lookup() range: 2500-2501, 2503-2508, 2512-2516, 2732-2741). The other 34 cases stay code: values of the item (durability, the item add options), timers and maps, level switches, bold lines, helper conditions, and the four cards whose legacy texts the game does not have (Lookup() shows them as empty lines). --- src/Localization/Game.de.resx | 204 ---- src/Localization/Game.en.resx | 204 ---- src/Localization/Game.es.resx | 204 ---- src/Localization/Game.id.resx | 204 ---- src/Localization/Game.ja.resx | 204 ---- src/Localization/Game.pl.resx | 204 ---- src/Localization/Game.pt.resx | 204 ---- src/Localization/Game.ru.resx | 204 ---- src/Localization/Game.tl.resx | 204 ---- src/Localization/Game.uk.resx | 204 ---- src/Localization/Game.zh-TW.resx | 204 ---- src/bin/Data/Items/Group13_Helper.json | 1111 +++++++++++++++++++++ src/bin/Data/Items/Group14_Potion.json | 727 ++++++++++++++ src/source/Engine/Object/ZzzInventory.cpp | 527 ---------- tests/data/test_item_database_files.cpp | 196 +++- 15 files changed, 2031 insertions(+), 2774 deletions(-) diff --git a/src/Localization/Game.de.resx b/src/Localization/Game.de.resx index a485618a61..2f2cb919d2 100644 --- a/src/Localization/Game.de.resx +++ b/src/Localization/Game.de.resx @@ -2385,14 +2385,6 @@ Erhöht die Manaregeneration beim Jagen von Monstern +Mana/8 legacy_id=635 - - Die verbleibende Zeit wird angezeigt - legacy_id=638 - - - wenn Sie mit der rechten Maustaste klicken. - legacy_id=639 - Sie betreten Devil Square (in %d Sekunden) legacy_id=640 @@ -6121,10 +6113,6 @@ Die 12 Apostel von Lugard helfen, indem sie den Torwächter am Weg zu Balgass’ Ruhestätte blenden. legacy_id=1664 - - Zutaten für die Herstellung der Flügel der 3. Stufe. - legacy_id=1665 - Kondorfeder legacy_id=1666 @@ -7985,10 +7973,6 @@ Ein stärkerer Effekt ist eingetreten. legacy_id=2249 - - Erhöht die Kombinationsrate, jedoch nur bis zur Maximalrate. - legacy_id=2250 - Die Kombinationsrate kann nicht weiter erhöht werden. legacy_id=2251 @@ -8009,18 +7993,6 @@ Keine Erfahrung erhältlich legacy_id=2255 - - Erhöht die erhaltene Erfahrung. - legacy_id=2256 - - - Erhöht die erhaltene Erfahrung und die Droprate von Gegenständen. - legacy_id=2257 - - - Verhindert, dass Erfahrung gesammelt wird. - legacy_id=2258 - Ermöglicht den Zugang zu %s. legacy_id=2259 @@ -8061,10 +8033,6 @@ Sie haben den Gegenstand %s erhalten. legacy_id=2268 - - Herzlichen Glückwunsch. Bitte wenden Sie sich an den Kundendienst, um ihn in einen Gegenstand umzuwandeln. - legacy_id=2269 - Sie werden entsprechend Ihrem Level einer Stufe zugeteilt. legacy_id=2270 @@ -8169,10 +8137,6 @@ Kombinationserfolgsrate +%d%% legacy_id=2296 - - Warp-Befehlsfenster verfügbar. - legacy_id=2297 - Stunde legacy_id=2299 @@ -8501,18 +8465,6 @@ Schriftrolle des Blutes legacy_id=2396 - - Stellen Sie die Schriftrolle des Blutes aus dem Vertrag des Illusionszauberers her. - legacy_id=2397 - - - Stellen Sie die Schriftrolle des Blutes aus den alten Schriftrollen her. - legacy_id=2398 - - - Dies ist das Zeichen von Illusion Sorcery; es wird zum Betreten des Tempels benötigt. - legacy_id=2399 - <SCHRITT 1: Der Kampf beginnt> legacy_id=2400 @@ -8589,10 +8541,6 @@ Dies ist die Quelle der Kraft, die den Illusionstempel schützt. legacy_id=2419 - - Beim Tragen verringert sich die Bewegungsgeschwindigkeit. - legacy_id=2420 - <Vormittag> <Nachmittag> legacy_id=2421 @@ -8801,10 +8749,6 @@ Erhöht das Mana um %d legacy_id=2508 - - Sie können sich frei weiterbewegen. - legacy_id=2509 - Setzt Statuspunkte zurück. legacy_id=2510 @@ -8841,10 +8785,6 @@ Hat einen verstärkenden Effekt. legacy_id=2518 - - Verringert die Anzahl der Spielermorde. - legacy_id=2519 - Verringerungspunkte: %d legacy_id=2520 @@ -8969,14 +8909,6 @@ Während der Verwendung des Gegenstands kann keine Master-Erfahrung gesammelt werden. legacy_id=2566 - - Gilt nicht für - legacy_id=2567 - - - Charaktere mit Master-Level. - legacy_id=2568 - Automatische Lebensregeneration +%d%% legacy_id=2569 @@ -8993,30 +8925,6 @@ Erhöht die Gegenstands-Droprate und die automatische Manaregeneration. legacy_id=2572 - - Mindestens +10 bis +15 bei der Verbesserung von Gegenständen: - legacy_id=2573 - - - verhindert das Verschwinden des Gegenstands. - legacy_id=2574 - - - Erhöht Angriffskraft und Zauberei um 40%% - legacy_id=2575 - - - Erhöht die Angriffsgeschwindigkeit um 10 - legacy_id=2576,3069 - - - Verringert den Schaden durch Monster um 30%% - legacy_id=2577 - - - Erhöht das maximale Leben um 50 - legacy_id=2578 - Max. Mana +50 legacy_id=2579 @@ -9101,10 +9009,6 @@ Die AG-Regeneration wurde um %d erhöht. legacy_id=2599 - - Zen in der Umgebung wird automatisch eingesammelt. - legacy_id=2600 - Bei Anwendung verwandeln Sie sich in einen Schneemann. legacy_id=2601 @@ -9117,10 +9021,6 @@ Per Rechtsklick dorthin wechseln. legacy_id=2603 - - Speichert den Ort der Anwendung. - legacy_id=2604 - Speichert den Ort per Rechtsklick. legacy_id=2605 @@ -9405,26 +9305,10 @@ Zu viele Zuschauer im Kolosseum. legacy_id=2707 - - Legen Sie Gegenstände für die Verbesserung auf +10~+15 in das Kombinationsfenster. - legacy_id=2708 - Gegenstand/Fähigkeit/Glück/Option werden zufällig hinzugefügt. legacy_id=2709 - - Erfahrung und Gegenstände bleiben beim Tod des Charakters erhalten. - legacy_id=2714 - - - Die Haltbarkeit von Gegenständen sinkt für einen bestimmten Zeitraum nicht. - legacy_id=2715 - - - Gilt nur für Reittiere, nicht für Haustiere. - legacy_id=2716 - Erhöht Ihr Glück, die gewünschten Flügel zu erschaffen. legacy_id=2717 @@ -9473,14 +9357,6 @@ Erhöht nur die Master-Erfahrung. legacy_id=2728 - - Keine Strafe beim Tod. - legacy_id=2729 - - - Erhält die Haltbarkeit von Gegenständen - legacy_id=2730 - Zum Verschieben auswählen. legacy_id=2731 @@ -9541,18 +9417,6 @@ Schaden/Zauberei/Fluch +30 legacy_id=2745 - - Sammelt automatisch Zen in Ihrer Umgebung. - legacy_id=2746 - - - Erfahrungsrate +50%% - legacy_id=2747 - - - Verteidigung +50 - legacy_id=2748 - Lugard legacy_id=2756 @@ -9629,14 +9493,6 @@ Sie benötigen noch %d, um einen Spiegel der Dimensionen herzustellen. legacy_id=2776 - - Nur damit hilft Ihnen Lugard, - legacy_id=2777 - - - den Doppelgänger-Bereich zu betreten. - legacy_id=2778 - Nur wer einen Spiegel der Dimensionen besitzt, hat Zutritt. legacy_id=2779 @@ -9917,26 +9773,6 @@ Der Trank „Hohe Vitalität“ hat die Ermüdungsstrafe aufgehoben. legacy_id=2874 - - Mit einer versiegelten goldenen Box können Sie beim Goblin eine Goldene Box kombinieren. - legacy_id=2875 - - - Mit einer versiegelten silbernen Box können Sie beim Goblin eine Silberne Box kombinieren. - legacy_id=2876 - - - Mit einem goldenen Schlüssel können Sie beim Goblin eine Goldene Box kombinieren. - legacy_id=2877 - - - Mit einem silbernen Schlüssel können Sie beim Goblin eine Silberne Box kombinieren. - legacy_id=2878 - - - Wenn Sie es fallen lassen, wird es mit einer festen Wahrscheinlichkeit zu einem seltenen Gegenstand. - legacy_id=2879,2880 - Goldene Box legacy_id=2881 @@ -10229,26 +10065,6 @@ Es ist ein Datenbankzugriffsfehler aufgetreten. legacy_id=2967 - - Erhöht max. AG + Level - legacy_id=2968 - - - Erhöht max. SD + Level x10 - legacy_id=2969 - - - Bis zu %d%% mehr Erfahrung, abhängig von der Anzahl der Mitglieder in Ihrer Party. - legacy_id=2970 - - - Sie erhalten Goblin-Punkte, wenn Sie das Lager des MU Item Shops nutzen. - legacy_id=2971 - - - Eine Kiste mit verschiedenen Gegenständen. - legacy_id=2972 - Ein Artikel, mit dem Sie MU 30 Tage lang genießen können.\nKann nur über die MU-Online-Website verwendet werden. legacy_id=2973 @@ -10429,10 +10245,6 @@ Loren-Markt legacy_id=3017 - - Erhöht die Gegenstands-Droprate. - legacy_id=3018 - Runedil legacy_id=3022 @@ -10569,10 +10381,6 @@ Doppelgänger legacy_id=3057 - - Erhöht max. Mana um 4%% - legacy_id=3058 - PC-Café-Bonus legacy_id=3059 @@ -10609,14 +10417,6 @@ Zusammen mit einem Haustier-Skelett ausgerüstet legacy_id=3067 - - erhöht er Schaden, Zauberei und Fluch um 20%% - legacy_id=3068 - - - und die Erfahrung um 30%%. - legacy_id=3070 - Zusammen mit einem Skelett-Verwandlungsring ausgerüstet legacy_id=3071 @@ -10661,10 +10461,6 @@ Zufällige Belohnung (%lu verschiedene Arten) legacy_id=3082 - - Zum Verwenden rechtsklicken. - legacy_id=3084 - +14-Gegenstand erstellen legacy_id=3086 diff --git a/src/Localization/Game.en.resx b/src/Localization/Game.en.resx index 6e349389d5..d1ae305fff 100644 --- a/src/Localization/Game.en.resx +++ b/src/Localization/Game.en.resx @@ -2661,14 +2661,6 @@ Increases acquisition rate of Mana after hunting monsters +Mana/8 legacy_id=635 - - The remaining time is shown - legacy_id=638 - - - when you right click on your mouse. - legacy_id=639 - You will enter Devil Square (%d seconds from now) legacy_id=640 @@ -6397,10 +6389,6 @@ Lugadr's 12 apostles are helping by blinding the gatekeeper by the road to Balgass' Resting Place. legacy_id=1664 - - Ingredients for the 3rd wing assembly. - legacy_id=1665 - Condor's feather legacy_id=1666 @@ -8261,10 +8249,6 @@ Stonger effect has taken place. legacy_id=2249 - - Increases the combination rate,but only up to the maximum rate. - legacy_id=2250 - Unable to increase combination rate any further. legacy_id=2251 @@ -8285,18 +8269,6 @@ Unable to gain experience rate legacy_id=2255 - - Increases experience gained. - legacy_id=2256 - - - Increases experience gained and item drop rate. - legacy_id=2257 - - - Prevents experiences to be gained. - legacy_id=2258 - Enables entrance into %s. legacy_id=2259 @@ -8337,10 +8309,6 @@ You have achieve %s item. legacy_id=2268 - - Congratulations. Please contact CS team and change it to item. - legacy_id=2269 - You will be assigned to a stage according to your level. legacy_id=2270 @@ -8445,10 +8413,6 @@ %d%% Combination success rate increase legacy_id=2296 - - Warp Command Window available. - legacy_id=2297 - Hour legacy_id=2299 @@ -8777,18 +8741,6 @@ Scroll of Blood legacy_id=2396 - - Assemble the Scroll of Blood with the contract from the Illusion Sorcery. - legacy_id=2397 - - - Assemble the Scroll of Blood with the old scrolls. - legacy_id=2398 - - - This is a mark of Illusion Sorcery; this is required to enter the temple. - legacy_id=2399 - <STEP 1: Battle Begins> legacy_id=2400 @@ -8865,10 +8817,6 @@ This is the origin of strength that protects the Illusion Temple. legacy_id=2419 - - Mobility speed reduces upon achievement. - legacy_id=2420 - <AM> <PM> legacy_id=2421 @@ -9077,10 +9025,6 @@ Increases Mana by %d legacy_id=2508 - - You may freely move onward. - legacy_id=2509 - Resets the status. legacy_id=2510 @@ -9117,10 +9061,6 @@ There's an increase effect to it. legacy_id=2518 - - It reduces the killing rate. - legacy_id=2519 - Reduction point: %d legacy_id=2520 @@ -9245,14 +9185,6 @@ Master Level EXP cannot be achieved during the item usage. legacy_id=2566 - - Not applicable to - legacy_id=2567 - - - Master Level Characters. - legacy_id=2568 - Automatic Life Recover increment %d%% legacy_id=2569 @@ -9269,30 +9201,6 @@ Item achievement and the automatic Mana recovery increases onward. legacy_id=2572 - - Minimum +10 - +15 level item upgrade - legacy_id=2573 - - - blocks the item dissipation. - legacy_id=2574 - - - Increases Attack Power and Wizardry by 40%% - legacy_id=2575 - - - Increases Attack Speed by 10 - legacy_id=2576,3069 - - - Alleviates monster's damage by 30%% - legacy_id=2577 - - - Increases Maximum Life by 50 - legacy_id=2578 - Maximum Mana +50 legacy_id=2579 @@ -9377,10 +9285,6 @@ AG recovery speed has increased of %d. legacy_id=2599 - - Surrounding Zens are automatically collected. - legacy_id=2600 - You may turn into a snowman if applied. legacy_id=2601 @@ -9393,10 +9297,6 @@ Move by a right-mouse-click. legacy_id=2603 - - Save the application location. - legacy_id=2604 - Saves the location with the right-mouse-click. legacy_id=2605 @@ -9681,26 +9581,10 @@ Too many people in the colossum. legacy_id=2707 - - +10~+15 When upgrading level item please put it in combination window. - legacy_id=2708 - item/skill/luck/option will be randomly added. legacy_id=2709 - - Exp and item will be secured when character dies. - legacy_id=2714 - - - Item durability will not be decrease for a certain period. - legacy_id=2715 - - - Applicable to mountable items only besides pet. - legacy_id=2716 - Increases your luck to create wing of your wish. legacy_id=2717 @@ -9749,14 +9633,6 @@ Only increases Master level exp. legacy_id=2728 - - No penalty for dying. - legacy_id=2729 - - - Keeps item durable - legacy_id=2730 - Select to move. legacy_id=2731 @@ -9817,18 +9693,6 @@ Damage/Wizardry/Curse +30 legacy_id=2745 - - Auto-collects zen around you. - legacy_id=2746 - - - EXP rate 50%% increase - legacy_id=2747 - - - Increase Defensive Skill +50 - legacy_id=2748 - Lugard legacy_id=2756 @@ -9905,14 +9769,6 @@ You need %d more to create a Mirror of Dimensions. legacy_id=2776 - - That's the only thing that will get Lugard to help you - legacy_id=2777 - - - enter the Doppelganger area. - legacy_id=2778 - Only those in possession of a Mirror of Dimensions may enter. legacy_id=2779 @@ -10193,26 +10049,6 @@ The High Vitality potion has negated the Fatigue Level penalty. legacy_id=2874 - - You can do a Goblin combination with a Sealed Golden Box to create a Golden Box. - legacy_id=2875 - - - You can do a Goblin combination with a Sealed Silver Box to create a Silver Box. - legacy_id=2876 - - - You can do a Goblin combination with a Gold Key to create a Golden Box. - legacy_id=2877 - - - You can do a Goblin combination with a Silver Key to create a Silver Box. - legacy_id=2878 - - - You can drop it with a fixed probability of it turning into a rare item. - legacy_id=2879,2880 - Golden Box legacy_id=2881 @@ -10505,26 +10341,6 @@ A database access error has occurred. legacy_id=2967 - - Increase Max. AG + Level - legacy_id=2968 - - - Increase Max. SD + Levelx10 - legacy_id=2969 - - - Up to %d%% EXP gain increase, depending on the number of members in your party. - legacy_id=2970 - - - You can acquire Goblin Points by using the MU Item Shop's storage. - legacy_id=2971 - - - It's a box containing various items. - legacy_id=2972 - An item that lets you enjoy MU for 30 days.\nCan only be used from the MU Online website. legacy_id=2973 @@ -10705,10 +10521,6 @@ Loren Market legacy_id=3017 - - Boosts the item drop rate. - legacy_id=3018 - Runedil legacy_id=3022 @@ -10845,10 +10657,6 @@ Doppelganger legacy_id=3057 - - Increases Max Mana 4%% - legacy_id=3058 - PC Cafe Bonus legacy_id=3059 @@ -10885,14 +10693,6 @@ Equipping along with a Pet Skeleton legacy_id=3067 - - increases Damage, Wizardry and Curse by 20%% - legacy_id=3068 - - - and EXP by 30%%. - legacy_id=3070 - Equipping along with a Skeleton Transformation Ring legacy_id=3071 @@ -10937,10 +10737,6 @@ Random Reward (%lu different kinds) legacy_id=3082 - - Right click to use. - legacy_id=3084 - +14 Item Creation legacy_id=3086 diff --git a/src/Localization/Game.es.resx b/src/Localization/Game.es.resx index 4565dc9bdc..c912a0797c 100644 --- a/src/Localization/Game.es.resx +++ b/src/Localization/Game.es.resx @@ -2365,14 +2365,6 @@ Aumenta la tasa de adquisición de Mana después de cazar monstruos +Mana/8 legacy_id=635 - - Se muestra el tiempo restante - legacy_id=638 - - - cuando haces clic derecho en tu mouse. - legacy_id=639 - Entrarás en Devil Square (%d dentro de unos segundos) legacy_id=640 @@ -6101,10 +6093,6 @@ Los 12 apóstoles de Lugadr están ayudando cegando al portero en el camino hacia el lugar de descanso de Balgass. legacy_id=1664 - - Ingredientes para el montaje de la 3ª ala. - legacy_id=1665 - pluma de cóndor legacy_id=1666 @@ -7965,10 +7953,6 @@ Se ha producido un efecto más fuerte. legacy_id=2249 - - Aumenta la tasa de combinación, pero solo hasta la tasa máxima. - legacy_id=2250 - No se puede aumentar más la tasa de combinación. legacy_id=2251 @@ -7989,18 +7973,6 @@ No se puede ganar tasa de experiencia. legacy_id=2255 - - Aumenta la experiencia adquirida. - legacy_id=2256 - - - Aumenta la experiencia obtenida y la tasa de caída de elementos. - legacy_id=2257 - - - Impide que se adquieran experiencias. - legacy_id=2258 - Permite la entrada a %s. legacy_id=2259 @@ -8041,10 +8013,6 @@ Has conseguido el artículo %s. legacy_id=2268 - - Felicidades. Comuníquese con el equipo de CS y cámbielo a elemento. - legacy_id=2269 - Se te asignará una etapa según tu nivel. legacy_id=2270 @@ -8149,10 +8117,6 @@ %d%% Aumento de la tasa de éxito de la combinación legacy_id=2296 - - Ventana de comando Warp disponible. - legacy_id=2297 - Hora legacy_id=2299 @@ -8481,18 +8445,6 @@ Pergamino de sangre legacy_id=2396 - - Reúne el Pergamino de sangre con el contrato de Illusion Sorcery. - legacy_id=2397 - - - Reúne el Pergamino de Sangre con los pergaminos antiguos. - legacy_id=2398 - - - Esta es una marca de hechicería de ilusión; esto es necesario para entrar al templo. - legacy_id=2399 - <PASO 1: Comienza la batalla> legacy_id=2400 @@ -8569,10 +8521,6 @@ Este es el origen de la fuerza que protege el Templo de la Ilusión. legacy_id=2419 - - La velocidad de movilidad se reduce al lograrlo. - legacy_id=2420 - <AM> <PM> legacy_id=2421 @@ -8781,10 +8729,6 @@ Aumenta el maná en %d legacy_id=2508 - - Puedes seguir adelante libremente. - legacy_id=2509 - Restablece el estado. legacy_id=2510 @@ -8821,10 +8765,6 @@ Tiene un efecto de aumento. legacy_id=2518 - - Reduce la tasa de matanza. - legacy_id=2519 - Punto de reducción: %d legacy_id=2520 @@ -8949,14 +8889,6 @@ La EXP de nivel maestro no se puede lograr durante el uso del artículo. legacy_id=2566 - - No aplicable a - legacy_id=2567 - - - Personajes de nivel maestro. - legacy_id=2568 - Incremento de recuperación de vida automática %d%% legacy_id=2569 @@ -8973,30 +8905,6 @@ Los logros de los objetos y la recuperación automática de maná aumentan en el futuro. legacy_id=2572 - - Actualización mínima de elemento de nivel +10 - +15 - legacy_id=2573 - - - Bloquea la disipación del artículo. - legacy_id=2574 - - - Aumenta el poder de ataque y la hechicería en un 40%% - legacy_id=2575 - - - Aumenta la velocidad de ataque en 10 - legacy_id=2576,3069 - - - Alivia el daño del monstruo en un 30%% - legacy_id=2577 - - - Aumenta la vida máxima en 50 - legacy_id=2578 - Maná máximo +50 legacy_id=2579 @@ -9081,10 +8989,6 @@ La velocidad de recuperación de AG ha aumentado de %d. legacy_id=2599 - - Los Zen circundantes se recopilan automáticamente. - legacy_id=2600 - Puedes convertirte en un muñeco de nieve si lo aplicas. legacy_id=2601 @@ -9097,10 +9001,6 @@ Muévete haciendo clic con el botón derecho del ratón. legacy_id=2603 - - Guarde la ubicación de la aplicación. - legacy_id=2604 - Guarda la ubicación con el clic derecho del mouse. legacy_id=2605 @@ -9385,26 +9285,10 @@ Demasiada gente en el coloso. legacy_id=2707 - - +10~+15 Al actualizar el elemento de nivel, colóquelo en la ventana de combinación. - legacy_id=2708 - El elemento/habilidad/suerte/opción se agregará aleatoriamente. legacy_id=2709 - - La experiencia y el artículo se asegurarán cuando el personaje muera. - legacy_id=2714 - - - La durabilidad del artículo no disminuirá durante un período determinado. - legacy_id=2715 - - - Aplicable solo a artículos montables además de mascotas. - legacy_id=2716 - Aumenta tu suerte para crear el ala de tu deseo. legacy_id=2717 @@ -9453,14 +9337,6 @@ Solo aumenta la experiencia del nivel Maestro. legacy_id=2728 - - No hay pena por morir. - legacy_id=2729 - - - Mantiene el artículo duradero - legacy_id=2730 - Seleccione para moverse. legacy_id=2731 @@ -9521,18 +9397,6 @@ Daño/Hechicería/Maldición +30 legacy_id=2745 - - Recoge automáticamente el zen a tu alrededor. - legacy_id=2746 - - - Tasa de EXP 50%% iaumentar - legacy_id=2747 - - - Aumentar la habilidad defensiva +50 - legacy_id=2748 - Lugard legacy_id=2756 @@ -9609,14 +9473,6 @@ Necesitas más %d para crear un Espejo de dimensiones. legacy_id=2776 - - Eso es lo único que hará que Lugard te ayude. - legacy_id=2777 - - - Ingrese al área de Doppelganger. - legacy_id=2778 - Sólo podrán entrar aquellos que estén en posesión de un Espejo de Dimensiones. legacy_id=2779 @@ -9897,26 +9753,6 @@ La poción de Alta Vitalidad ha anulado la penalización del Nivel de Fatiga. legacy_id=2874 - - Puedes hacer una combinación de Duende con una Caja Dorada Sellada para crear una Caja Dorada. - legacy_id=2875 - - - Puedes hacer una combinación de Duende con una Caja plateada sellada para crear una Caja plateada. - legacy_id=2876 - - - Puedes hacer una combinación de Duende con una Llave Dorada para crear una Caja Dorada. - legacy_id=2877 - - - Puedes hacer una combinación de Duende con una Llave plateada para crear una Caja plateada. - legacy_id=2878 - - - Puedes soltarlo con una probabilidad fija de que se convierta en un objeto raro. - legacy_id=2879,2880 - Caja Dorada legacy_id=2881 @@ -10209,26 +10045,6 @@ Se ha producido un error de acceso a la base de datos. legacy_id=2967 - - Aumentar máx. Nivel AG + - legacy_id=2968 - - - Aumentar máx. SD + Nivelx10 - legacy_id=2969 - - - Aumento de ganancia de hasta %d%% EXP, dependiendo del número de miembros de tu grupo. - legacy_id=2970 - - - Puedes adquirir puntos Goblin utilizando el almacenamiento de la tienda de artículos MU. - legacy_id=2971 - - - Es una caja que contiene varios artículos. - legacy_id=2972 - Un artículo que te permite disfrutar de MU durante 30 días.\nSolo se puede utilizar desde el sitio web de MU Online. legacy_id=2973 @@ -10409,10 +10225,6 @@ Mercado Loren legacy_id=3017 - - Aumenta la tasa de caída de artículos. - legacy_id=3018 - Runedil legacy_id=3022 @@ -10549,10 +10361,6 @@ doble legacy_id=3057 - - Aumenta el maná máximo un 4%% - legacy_id=3058 - Bono de PC Café legacy_id=3059 @@ -10589,14 +10397,6 @@ Equiparse con un esqueleto de mascota legacy_id=3067 - - aumenta el daño, la hechicería y la maldición en un 20%% - legacy_id=3068 - - - y EXP en un 30%%. - legacy_id=3070 - Equipado con un anillo de transformación de esqueleto legacy_id=3071 @@ -10641,10 +10441,6 @@ Recompensa aleatoria (%lu diferentes tipos) legacy_id=3082 - - Haga clic derecho para usar. - legacy_id=3084 - +14 Creación de artículos legacy_id=3086 diff --git a/src/Localization/Game.id.resx b/src/Localization/Game.id.resx index d2a319d5ef..add8313ff7 100644 --- a/src/Localization/Game.id.resx +++ b/src/Localization/Game.id.resx @@ -2365,14 +2365,6 @@ Meningkatkan tingkat perolehan Mana setelah berburu monster +Mana/8 legacy_id=635 - - Waktu yang tersisa ditampilkan - legacy_id=638 - - - ketika Anda mengklik kanan pada mouse Anda. - legacy_id=639 - Anda akan memasuki Devil Square (%d detik dari sekarang) legacy_id=640 @@ -6101,10 +6093,6 @@ Ke-12 rasul Lugadr membantu dengan membutakan penjaga gerbang di jalan menuju Tempat Peristirahatan Balgass. legacy_id=1664 - - Bahan untuk perakitan sayap ke-3. - legacy_id=1665 - bulu condor legacy_id=1666 @@ -7965,10 +7953,6 @@ Efek yang lebih kuat telah terjadi. legacy_id=2249 - - Meningkatkan laju kombinasi, namun hanya hingga laju maksimum. - legacy_id=2250 - Tidak dapat meningkatkan tingkat kombinasi lebih jauh. legacy_id=2251 @@ -7989,18 +7973,6 @@ Tidak dapat memperoleh tingkat pengalaman legacy_id=2255 - - Meningkatkan pengalaman yang diperoleh. - legacy_id=2256 - - - Meningkatkan pengalaman yang diperoleh dan tingkat penurunan item. - legacy_id=2257 - - - Mencegah pengalaman diperoleh. - legacy_id=2258 - Memungkinkan masuk ke %s. legacy_id=2259 @@ -8041,10 +8013,6 @@ Anda telah mencapai item %s. legacy_id=2268 - - Selamat. Silakan menghubungi tim CS dan mengubahnya menjadi item. - legacy_id=2269 - Anda akan ditugaskan ke tahapan sesuai dengan level Anda. legacy_id=2270 @@ -8149,10 +8117,6 @@ %d%% Peningkatan tingkat keberhasilan kombinasi legacy_id=2296 - - Jendela Perintah Warp tersedia. - legacy_id=2297 - Jam legacy_id=2299 @@ -8481,18 +8445,6 @@ Gulungan Darah legacy_id=2396 - - Kumpulkan Gulungan Darah dengan kontrak dari Sihir Ilusi. - legacy_id=2397 - - - Rakit Gulungan Darah dengan gulungan lama. - legacy_id=2398 - - - Ini adalah tanda dari Ilmu Sihir Ilusi; ini diperlukan untuk memasuki kuil. - legacy_id=2399 - <LANGKAH 1: Pertempuran Dimulai> legacy_id=2400 @@ -8569,10 +8521,6 @@ Inilah asal mula kekuatan yang melindungi Kuil Ilusi. legacy_id=2419 - - Kecepatan mobilitas berkurang setelah pencapaian. - legacy_id=2420 - <AM> <PM> legacy_id=2421 @@ -8781,10 +8729,6 @@ Meningkatkan Mana sebanyak %d legacy_id=2508 - - Anda dapat dengan bebas bergerak maju. - legacy_id=2509 - Menyetel ulang statusnya. legacy_id=2510 @@ -8821,10 +8765,6 @@ Ada efek peningkatannya. legacy_id=2518 - - Ini mengurangi tingkat pembunuhan. - legacy_id=2519 - Titik reduksi: %d legacy_id=2520 @@ -8949,14 +8889,6 @@ EXP Tingkat Master tidak dapat dicapai selama penggunaan item. legacy_id=2566 - - Tidak berlaku untuk - legacy_id=2567 - - - Karakter Tingkat Master. - legacy_id=2568 - Peningkatan Pemulihan Kehidupan Otomatis %d%% legacy_id=2569 @@ -8973,30 +8905,6 @@ Pencapaian item dan pemulihan Mana otomatis meningkat dan seterusnya. legacy_id=2572 - - Minimal +10 - +15 peningkatan item level - legacy_id=2573 - - - memblokir disipasi item. - legacy_id=2574 - - - Meningkatkan Kekuatan Serangan dan Sihir sebesar 40%% - legacy_id=2575 - - - Meningkatkan Kecepatan Serangan sebanyak 10 - legacy_id=2576,3069 - - - Mengurangi kerusakan monster sebesar 30%% - legacy_id=2577 - - - Meningkatkan Kehidupan Maksimum sebesar 50 - legacy_id=2578 - Mana Maksimum +50 legacy_id=2579 @@ -9081,10 +8989,6 @@ Kecepatan pemulihan AG meningkat sebesar %d. legacy_id=2599 - - Zen di sekitarnya dikumpulkan secara otomatis. - legacy_id=2600 - Anda bisa berubah menjadi manusia salju jika diterapkan. legacy_id=2601 @@ -9097,10 +9001,6 @@ Bergerak dengan klik kanan mouse. legacy_id=2603 - - Simpan lokasi aplikasi. - legacy_id=2604 - Menyimpan lokasi dengan klik kanan mouse. legacy_id=2605 @@ -9385,26 +9285,10 @@ Terlalu banyak orang di colossum. legacy_id=2707 - - +10~+15 Saat meningkatkan item level, harap letakkan di jendela kombinasi. - legacy_id=2708 - item/keterampilan/keberuntungan/opsi akan ditambahkan secara acak. legacy_id=2709 - - Exp dan item akan diamankan ketika karakter mati. - legacy_id=2714 - - - Daya tahan item tidak akan berkurang selama jangka waktu tertentu. - legacy_id=2715 - - - Hanya berlaku untuk item yang dapat dipasang selain hewan peliharaan. - legacy_id=2716 - Meningkatkan keberuntungan Anda untuk menciptakan sayap keinginan Anda. legacy_id=2717 @@ -9453,14 +9337,6 @@ Hanya meningkatkan exp level Master. legacy_id=2728 - - Tidak ada penalti untuk kematian. - legacy_id=2729 - - - Menjaga barang tetap tahan lama - legacy_id=2730 - Pilih untuk bergerak. legacy_id=2731 @@ -9521,18 +9397,6 @@ Kerusakan/Sihir/Kutukan +30 legacy_id=2745 - - Mengumpulkan zen secara otomatis di sekitar Anda. - legacy_id=2746 - - - Tingkat EXP 50%% imeningkat - legacy_id=2747 - - - Tingkatkan Keterampilan Pertahanan +50 - legacy_id=2748 - orang bodoh legacy_id=2756 @@ -9609,14 +9473,6 @@ Anda memerlukan %d lebih banyak untuk membuat Cermin Dimensi. legacy_id=2776 - - Itulah satu-satunya hal yang akan membuat Lugard membantu Anda - legacy_id=2777 - - - memasuki area Doppelganger. - legacy_id=2778 - Hanya mereka yang memiliki Cermin Dimensi yang boleh masuk. legacy_id=2779 @@ -9897,26 +9753,6 @@ Ramuan Vitalitas Tinggi telah meniadakan hukuman Tingkat Kelelahan. legacy_id=2874 - - Kalian bisa melakukan kombinasi Goblin dengan Sealed Golden Box untuk membuat Golden Box. - legacy_id=2875 - - - Kalian bisa melakukan kombinasi Goblin dengan Sealed Silver Box untuk membuat Silver Box. - legacy_id=2876 - - - Kalian bisa melakukan kombinasi Goblin dengan Gold Key untuk membuat Golden Box. - legacy_id=2877 - - - Kalian bisa melakukan kombinasi Goblin dengan Silver Key untuk membuat Silver Box. - legacy_id=2878 - - - Anda dapat menjatuhkannya dengan kemungkinan tetap untuk berubah menjadi barang langka. - legacy_id=2879,2880 - Kotak Emas legacy_id=2881 @@ -10209,26 +10045,6 @@ Terjadi kesalahan akses basis data. legacy_id=2967 - - Tingkatkan Maks. AG + Tingkat - legacy_id=2968 - - - Tingkatkan Maks. SD+Levelx10 - legacy_id=2969 - - - Peningkatan perolehan hingga %d%% EXP, tergantung pada jumlah anggota di party Anda. - legacy_id=2970 - - - Anda dapat memperoleh Poin Goblin dengan menggunakan penyimpanan MU Item Shop. - legacy_id=2971 - - - Itu adalah kotak berisi berbagai item. - legacy_id=2972 - Item yang memungkinkan Anda menikmati MU selama 30 hari.\nHanya dapat digunakan dari situs MU Online. legacy_id=2973 @@ -10409,10 +10225,6 @@ Pasar Loren legacy_id=3017 - - Meningkatkan tingkat penurunan item. - legacy_id=3018 - Rundil legacy_id=3022 @@ -10549,10 +10361,6 @@ kembaran legacy_id=3057 - - Meningkatkan Mana Maks 4%% - legacy_id=3058 - Bonus Kafe PC legacy_id=3059 @@ -10589,14 +10397,6 @@ Dilengkapi dengan Pet Skeleton legacy_id=3067 - - meningkatkan Kerusakan, Sihir, dan Kutukan sebesar 20%% - legacy_id=3068 - - - dan EXP sebesar 30%%. - legacy_id=3070 - Dilengkapi dengan Cincin Transformasi Kerangka legacy_id=3071 @@ -10641,10 +10441,6 @@ Hadiah Acak (%lu jenis berbeda) legacy_id=3082 - - Klik kanan untuk menggunakan. - legacy_id=3084 - +14 Pembuatan Barang legacy_id=3086 diff --git a/src/Localization/Game.ja.resx b/src/Localization/Game.ja.resx index 22789751a6..d7b344563a 100644 --- a/src/Localization/Game.ja.resx +++ b/src/Localization/Game.ja.resx @@ -2271,14 +2271,6 @@ 獲得するマナ増加 +マナ/8 legacy_id=635 - - マウスボタンを右クリックすれば - legacy_id=638 - - - 残った時間を見ることができます。 - legacy_id=639 - デビルスクエア入場(あと%d秒後) legacy_id=640 @@ -5983,10 +5975,6 @@ クエスト遂行中はルガドの12司祭の力で「安息所」の門番の目を欺くことが可能です。 legacy_id=1664 - - 3次羽合成のための材料 - legacy_id=1665 - コンドルの羽 legacy_id=1666 @@ -7831,10 +7819,6 @@ 重複して使用することができません。 legacy_id=2249 - - 合成成功確率が高くなり、一定の数値以上は高くなりません。 - legacy_id=2250 - これ以上合成成功確率を上昇できません。 legacy_id=2251 @@ -7855,18 +7839,6 @@ 経験値獲得不可能 legacy_id=2255 - - 経験値獲得量が増加する効果があります。 - legacy_id=2256 - - - 経験値とアイテム獲得量が増加する効果があります。 - legacy_id=2257 - - - 経験値が獲得できないように維持する効果があります。 - legacy_id=2258 - %s 入場時、決まった回数だけ使えます。 legacy_id=2259 @@ -7907,10 +7879,6 @@ %s を獲得しました。 legacy_id=2268 - - おめでとうございます。運営チームに連絡すると、当選アイテムと交換できます。 - legacy_id=2269 - 入場できるレベルに合わせて自動的に入場します。 legacy_id=2270 @@ -8015,10 +7983,6 @@ %d%% 合成成功確率上昇 legacy_id=2296 - - マップ移動ウィンドウが使えます。 - legacy_id=2297 - 時間 legacy_id=2299 @@ -8347,18 +8311,6 @@ 血の巻物 legacy_id=2396 - - 幻影教団の誓約と一緒に血の巻物を合成することが出来ます。 - legacy_id=2397 - - - 古い巻物と一緒に血の巻物を合成することが出来ます。 - legacy_id=2398 - - - 幻影教団の一員であることを表す証です。テンプル入場に必要です。 - legacy_id=2399 - <STEP 1 : 戦闘開始> legacy_id=2400 @@ -8435,10 +8387,6 @@ イリュージョンテンプルを保護する力の原動力です。 legacy_id=2419 - - 獲得時に移動速度減少 - legacy_id=2420 - 1 15-49 15-29 1 15-130 10-110 legacy_id=2448 @@ -8499,10 +8447,6 @@ MP +%d上昇効果 legacy_id=2508 - - 移動が自由にできるようになります。 - legacy_id=2509 - ステータスをリセットする効果があります。 legacy_id=2510 @@ -8539,10 +8483,6 @@ 上昇の効果があります。 legacy_id=2518 - - PK数値の減少効果があります。 - legacy_id=2519 - 減少ポイント: %d legacy_id=2520 @@ -8659,14 +8599,6 @@ 利用中はマスターレベル経験値が獲得できません。 legacy_id=2566 - - ご注意 マスターレベルには経験値獲得量増加、 - legacy_id=2567 - - - アイテム獲得率増加効果は適用されません。 - legacy_id=2568 - 生命自動回復%d%%上昇 legacy_id=2569 @@ -8683,30 +8615,6 @@ アイテム獲得量とマナ自動回復量が上昇されます。 legacy_id=2572 - - +10~+15レベル以上のアイテムアップグレード時 - legacy_id=2573 - - - アイテムの消滅を防ぎます。 - legacy_id=2574 - - - 攻撃力、魔力40%%向上 - legacy_id=2575 - - - 攻撃速度+10増加 - legacy_id=2576,3069 - - - モンスターからのダメージを30%%吸収 - legacy_id=2577 - - - 最大生命力+50 - legacy_id=2578 - 最大マナ+50 legacy_id=2579 @@ -8791,10 +8699,6 @@ AG回復速度が%d増加しました。 legacy_id=2599 - - 周辺のゼンを自動的に拾得します。 - legacy_id=2600 - 装着すると雪だるまに変身することができます。 legacy_id=2601 @@ -8807,10 +8711,6 @@ 右クリックすると移動します。 legacy_id=2603 - - 該当の場所を記憶することができます。 - legacy_id=2604 - 右クリックすると場所が記憶されます。 legacy_id=2605 @@ -9091,26 +8991,10 @@ 観戦可能な最大人数を超えました。 legacy_id=2707 - - +10~+15レベルアイテムのアップグレード時に合成ウィンドウに入れて使用 - legacy_id=2708 - アイテム/スキル/幸運/オプションがランダムに生成されます。 legacy_id=2709 - - キャラクター死亡時経験値及びアイテムが維持されます。 - legacy_id=2714 - - - アイテムの耐久度が一定期間落ちません。 - legacy_id=2715 - - - ペットを除いた装着型アイテムにのみ適用されます。 - legacy_id=2716 - 羽合成時、好きな職業用の羽・マントに生成されるようになります。 legacy_id=2717 @@ -9159,14 +9043,6 @@ マスターレベル経験値のみ増加します。 legacy_id=2728 - - 死亡の時ペナルティーがつきません。 - legacy_id=2729 - - - アイテム耐久度維持 - legacy_id=2730 - 移動する地域を選択してください。 legacy_id=2731 @@ -9227,18 +9103,6 @@ 攻撃力 +30 legacy_id=2745 - - 周りのゼンを自動的に拾得してくれます。 - legacy_id=2746 - - - 経験値50%%向上 - legacy_id=2747 - - - 防御力+50 - legacy_id=2748 - ルガド legacy_id=2756 @@ -9315,14 +9179,6 @@ 次元の魔鏡を生成するには%d個足りません。 legacy_id=2776 - - NPCルガドによって次元の狭間へ - legacy_id=2777 - - - 移動できる唯一のアイテムです。 - legacy_id=2778 - 次元の魔鏡を所持しているキャラクターのみ入場することができます。 legacy_id=2779 @@ -9603,26 +9459,6 @@ 上級活力の秘薬を服用して疲労度ペナルティーが無効化されます。 legacy_id=2874 - - 封印された金箱とのカオス合成で金箱を生成できます。 - legacy_id=2875 - - - 封印された銀箱とのカオス合成で銀箱を生成できます。 - legacy_id=2876 - - - ゴールドキーとのカオス合成で金箱を生成できます。 - legacy_id=2877 - - - シルバーキーとのカオス合成で銀箱を生成できます。 - legacy_id=2878 - - - 地面に投げると一定確率でレアアイテムが手に入ります。 - legacy_id=2879,2880 - 金箱 legacy_id=2881 @@ -9915,26 +9751,6 @@ DB接近エラーが発生しました。 legacy_id=2967 - - 最大AG増加 + レベル - legacy_id=2968 - - - 最大SD増加 + レベルx10 - legacy_id=2969 - - - 経験値190%%に増加、パーティー1人毎に+10%%増加 - legacy_id=2970 - - - インゲームショップ保管箱で使用すると、ゴブリンポイントを獲得できます。 - legacy_id=2971 - - - 各種商品が入っている箱です。 - legacy_id=2972 - 30日間MUを楽しめる商品です。\nウェブでのみ使用できます。 legacy_id=2973 @@ -10111,10 +9927,6 @@ ロレン市場 legacy_id=3017 - - アイテム獲得量を上昇させる効果があります。 - legacy_id=3018 - ルネディル legacy_id=3022 @@ -10235,10 +10047,6 @@ 次元の狭間 legacy_id=3057 - - 最大マナ増加4%% - legacy_id=3058 - ネットカフェボーナス legacy_id=3059 @@ -10275,14 +10083,6 @@ スケルトンパージドラゴンと同時に装備すると legacy_id=3067 - - 攻撃力、魔力、呪い 20%%上昇 - legacy_id=3068 - - - 経験値 30%% 上昇 - legacy_id=3070 - スケルトン変身指輪と同時に装備すると legacy_id=3071 @@ -10327,10 +10127,6 @@ ランダム報酬(%lu種類支給) legacy_id=3082 - - 右クリックで使用します。 - legacy_id=3084 - +14 アイテム生成 legacy_id=3086 diff --git a/src/Localization/Game.pl.resx b/src/Localization/Game.pl.resx index 9d593d8e29..be23c55a74 100644 --- a/src/Localization/Game.pl.resx +++ b/src/Localization/Game.pl.resx @@ -2365,14 +2365,6 @@ Zwiększa szybkość zdobywania many po polowaniu na potwory +Mana/8 legacy_id=635 - - Wyświetlany jest pozostały czas - legacy_id=638 - - - po kliknięciu prawym przyciskiem myszy. - legacy_id=639 - Wejdziesz na Devil Square (za %d sekund) legacy_id=640 @@ -6101,10 +6093,6 @@ Pomaga mu 12 apostołów Lugadra, oślepiając odźwiernego przy drodze do miejsca spoczynku Balgassa. legacy_id=1664 - - Składniki na montaż trzeciego skrzydła. - legacy_id=1665 - Condor's Feather legacy_id=1666 @@ -7965,10 +7953,6 @@ Nastąpił silniejszy efekt. legacy_id=2249 - - Zwiększa współczynnik kombinacji, ale tylko do maksymalnego współczynnika. - legacy_id=2250 - Nie można dalej zwiększać współczynnika kombinacji. legacy_id=2251 @@ -7989,18 +7973,6 @@ Nie można zwiększyć współczynnika doświadczenia legacy_id=2255 - - Zwiększa zdobywane doświadczenie. - legacy_id=2256 - - - Zwiększa zdobywane doświadczenie i częstotliwość wypadania przedmiotów. - legacy_id=2257 - - - Uniemożliwia zdobywanie doświadczeń. - legacy_id=2258 - Umożliwia wejście do %s. legacy_id=2259 @@ -8041,10 +8013,6 @@ Osiągnąłeś przedmiot %s. legacy_id=2268 - - Gratulacje. Skontaktuj się z zespołem CS i zmień go na przedmiot. - legacy_id=2269 - Zostaniesz przydzielony do etapu zgodnie z Twoim poziomem. legacy_id=2270 @@ -8149,10 +8117,6 @@ %d%% Wzrost współczynnika powodzenia kombinacji legacy_id=2296 - - Dostępne okno poleceń Warp. - legacy_id=2297 - Godzina legacy_id=2299 @@ -8481,18 +8445,6 @@ Scroll of Blood legacy_id=2396 - - Złóż Scroll of Blood za pomocą kontraktu z Czarów Iluzji. - legacy_id=2397 - - - Złóż Scroll of Blood ze starymi zwojami. - legacy_id=2398 - - - To jest znak Czarów Iluzji; jest to wymagane, aby wejść do świątyni. - legacy_id=2399 - <KROK 1: Rozpoczyna się bitwa> legacy_id=2400 @@ -8569,10 +8521,6 @@ To jest źródło siły, która chroni Illusion Temple. legacy_id=2419 - - Prędkość poruszania się zmniejsza się po osiągnięciu. - legacy_id=2420 - <AM> <PM> legacy_id=2421 @@ -8781,10 +8729,6 @@ Zwiększa Manę o %d legacy_id=2508 - - Możesz swobodnie iść dalej. - legacy_id=2509 - Resetuje stan. legacy_id=2510 @@ -8821,10 +8765,6 @@ Jest w tym efekt zwiększenia. legacy_id=2518 - - Zmniejsza wskaźnik zabijania. - legacy_id=2519 - Punkt redukcji: %d legacy_id=2520 @@ -8949,14 +8889,6 @@ Poziomu Mistrzowskiego EXP nie można osiągnąć podczas używania przedmiotu. legacy_id=2566 - - Nie dotyczy - legacy_id=2567 - - - Postacie na poziomie mistrzowskim. - legacy_id=2568 - Przyrost automatycznego odzyskiwania żywotności %d%% legacy_id=2569 @@ -8973,30 +8905,6 @@ Osiąganie przedmiotów i automatyczne odzyskiwanie many wzrastają dalej. legacy_id=2572 - - Minimalne ulepszenie przedmiotu na poziomie +10 - +15 - legacy_id=2573 - - - blokuje rozpraszanie przedmiotu. - legacy_id=2574 - - - Zwiększa siłę ataku i czary o 40%% - legacy_id=2575 - - - Zwiększa prędkość ataku o 10 - legacy_id=2576,3069 - - - Zmniejsza obrażenia potworów o 30%% - legacy_id=2577 - - - Zwiększa maksymalne życie o 50 - legacy_id=2578 - Maksymalna mana +50 legacy_id=2579 @@ -9081,10 +8989,6 @@ Szybkość odzyskiwania AG wzrosła o %d. legacy_id=2599 - - Otaczające Zens są zbierane automatycznie. - legacy_id=2600 - Jeśli zostanie zastosowany, możesz zamienić się w bałwana. legacy_id=2601 @@ -9097,10 +9001,6 @@ Poruszaj się klikając prawym przyciskiem myszy. legacy_id=2603 - - Zapisz lokalizację aplikacji. - legacy_id=2604 - Zapisuje lokalizację po kliknięciu prawym przyciskiem myszy. legacy_id=2605 @@ -9385,26 +9285,10 @@ Za dużo ludzi w Koloseum. legacy_id=2707 - - +10~+15 Podczas ulepszania przedmiotu na poziomie proszę umieścić go w oknie kombinacji. - legacy_id=2708 - przedmiot/umiejętność/szczęście/opcja zostaną dodane losowo. legacy_id=2709 - - Exp i przedmiot zostaną zabezpieczone, gdy postać umrze. - legacy_id=2714 - - - Trwałość przedmiotu nie ulegnie zmniejszeniu przez pewien okres. - legacy_id=2715 - - - Dotyczy wyłącznie przedmiotów, które można zamontować, z wyjątkiem zwierząt domowych. - legacy_id=2716 - Zwiększa Twoje szczęście, tworząc skrzydło swojego życzenia. legacy_id=2717 @@ -9453,14 +9337,6 @@ Zwiększa tylko exp na poziomie mistrzowskim. legacy_id=2728 - - Nie ma kary za śmierć. - legacy_id=2729 - - - Utrzymuje trwałość przedmiotu - legacy_id=2730 - Wybierz, aby przenieść. legacy_id=2731 @@ -9521,18 +9397,6 @@ Obrażenia/Magia/Klątwa +30 legacy_id=2745 - - Automatycznie zbiera zen wokół ciebie. - legacy_id=2746 - - - Stawka EXP 50%% iwzrost - legacy_id=2747 - - - Zwiększa umiejętność obrony +50 - legacy_id=2748 - Lugarda legacy_id=2756 @@ -9609,14 +9473,6 @@ Potrzebujesz więcej %d, aby stworzyć Lustro Wymiarów. legacy_id=2776 - - Tylko to sprawi, że Lugard ci pomoże - legacy_id=2777 - - - wejdź do obszaru Doppelgangera. - legacy_id=2778 - Do środka mogą wejść wyłącznie osoby posiadające Lustro Wymiarów. legacy_id=2779 @@ -9897,26 +9753,6 @@ Mikstura wysokiej witalności zanegowała karę za poziom zmęczenia. legacy_id=2874 - - Możesz wykonać kombinację Goblinów z Sealed Golden Box, aby stworzyć Golden Box. - legacy_id=2875 - - - Możesz wykonać kombinację Goblinów z Sealed Silver Box, aby stworzyć Silver Box. - legacy_id=2876 - - - Możesz wykonać kombinację Goblinów ze Złotym Kluczem, aby stworzyć Golden Box. - legacy_id=2877 - - - Możesz wykonać kombinację Goblinów ze Srebrnym Kluczem, aby stworzyć Silver Box. - legacy_id=2878 - - - Możesz go upuścić ze stałym prawdopodobieństwem, że zamieni się w rzadki przedmiot. - legacy_id=2879,2880 - Golden Box legacy_id=2881 @@ -10209,26 +10045,6 @@ Wystąpił błąd dostępu do bazy danych. legacy_id=2967 - - Zwiększ maks. AG + poziom - legacy_id=2968 - - - Zwiększ maks. SD + Poziomx10 - legacy_id=2969 - - - Zwiększenie zysku aż do %d%% EXP, w zależności od liczby członków w Twojej grupie. - legacy_id=2970 - - - Możesz zdobywać punkty Goblinów, korzystając z magazynu sklepu z przedmiotami MU. - legacy_id=2971 - - - To pudełko zawierające różne przedmioty. - legacy_id=2972 - Przedmiot, który pozwala cieszyć się MU przez 30 dni.\nMożna używać wyłącznie na stronie internetowej MU Online. legacy_id=2973 @@ -10409,10 +10225,6 @@ Loren Market legacy_id=3017 - - Zwiększa częstotliwość wypadania przedmiotów. - legacy_id=3018 - Runedil legacy_id=3022 @@ -10549,10 +10361,6 @@ Sobowtór legacy_id=3057 - - Zwiększa maksymalną manę 4%% - legacy_id=3058 - Bonus PC Cafe legacy_id=3059 @@ -10589,14 +10397,6 @@ Wyposażenie wraz ze szkieletem zwierzaka legacy_id=3067 - - zwiększa obrażenia, czary i klątwę o 20%% - legacy_id=3068 - - - i EXP o 30%%. - legacy_id=3070 - Do wyposażenia wraz z Pierścieniem Transformacji Szkieletu legacy_id=3071 @@ -10641,10 +10441,6 @@ Losowa nagroda (różne rodzaje %lu) legacy_id=3082 - - Kliknij prawym przyciskiem myszy, aby użyć. - legacy_id=3084 - +14 Tworzenie przedmiotów legacy_id=3086 diff --git a/src/Localization/Game.pt.resx b/src/Localization/Game.pt.resx index 69fd7125ef..3541af3e7f 100644 --- a/src/Localization/Game.pt.resx +++ b/src/Localization/Game.pt.resx @@ -2365,14 +2365,6 @@ Aumenta a taxa de aquisição de Mana após caçar monstros +Mana/8 legacy_id=635 - - O tempo restante é mostrado - legacy_id=638 - - - quando você clica com o botão direito do mouse. - legacy_id=639 - Você entrará na Devil Square (%d daqui a alguns segundos) legacy_id=640 @@ -6101,10 +6093,6 @@ Os 12 apóstolos de Lugadr estão ajudando cegando o porteiro na estrada para o local de descanso de Balgass. legacy_id=1664 - - Ingredientes para a montagem da 3ª asa. - legacy_id=1665 - Pena de Condor legacy_id=1666 @@ -7965,10 +7953,6 @@ Ocorreu um efeito mais forte. legacy_id=2249 - - Aumenta a taxa de combinação, mas apenas até a taxa máxima. - legacy_id=2250 - Não é possível aumentar ainda mais a taxa de combinação. legacy_id=2251 @@ -7989,18 +7973,6 @@ Não é possível ganhar taxa de experiência legacy_id=2255 - - Aumenta a experiência adquirida. - legacy_id=2256 - - - Aumenta a experiência adquirida e a taxa de queda de itens. - legacy_id=2257 - - - Impede que experiências sejam adquiridas. - legacy_id=2258 - Permite a entrada em %s. legacy_id=2259 @@ -8041,10 +8013,6 @@ Você alcançou o item %s. legacy_id=2268 - - Parabéns. Entre em contato com a equipe CS e altere para item. - legacy_id=2269 - Você será designado para uma etapa de acordo com seu nível. legacy_id=2270 @@ -8149,10 +8117,6 @@ %d%% Aumento da taxa de sucesso da combinação legacy_id=2296 - - Janela de comando Warp disponível. - legacy_id=2297 - Hora legacy_id=2299 @@ -8481,18 +8445,6 @@ Pergaminho de Sangue legacy_id=2396 - - Monte o Pergaminho de Sangue com o contrato da Feitiçaria Ilusão. - legacy_id=2397 - - - Monte o Pergaminho de Sangue com os pergaminhos antigos. - legacy_id=2398 - - - Esta é uma marca da Feitiçaria da Ilusão; isso é necessário para entrar no templo. - legacy_id=2399 - <ETAPA 1: A batalha começa> legacy_id=2400 @@ -8569,10 +8521,6 @@ Esta é a origem da força que protege o Templo da Ilusão. legacy_id=2419 - - A velocidade de mobilidade diminui após a conquista. - legacy_id=2420 - <AM> <PM> legacy_id=2421 @@ -8781,10 +8729,6 @@ Aumenta Mana em %d legacy_id=2508 - - Você pode seguir em frente livremente. - legacy_id=2509 - Redefine o status. legacy_id=2510 @@ -8821,10 +8765,6 @@ Há um efeito de aumento nisso. legacy_id=2518 - - Reduz a taxa de mortalidade. - legacy_id=2519 - Ponto de redução: %d legacy_id=2520 @@ -8949,14 +8889,6 @@ Master Level EXP não pode ser alcançado durante o uso do item. legacy_id=2566 - - Não aplicável a - legacy_id=2567 - - - Personagens de nível mestre. - legacy_id=2568 - Incremento automático de recuperação de vida %d%% legacy_id=2569 @@ -8973,30 +8905,6 @@ A conquista de itens e a recuperação automática de Mana aumentam posteriormente. legacy_id=2572 - - Atualização mínima de item de nível +10 - +15 - legacy_id=2573 - - - bloqueia a dissipação do item. - legacy_id=2574 - - - Aumenta o poder de ataque e a magia em 40%% - legacy_id=2575 - - - Aumenta a velocidade de ataque em 10 - legacy_id=2576,3069 - - - Alivia o dano do monstro em 30%% - legacy_id=2577 - - - Aumenta a Vida Máxima em 50 - legacy_id=2578 - Mana máxima +50 legacy_id=2579 @@ -9081,10 +8989,6 @@ A velocidade de recuperação do AG aumentou em %d. legacy_id=2599 - - Os Zens circundantes são coletados automaticamente. - legacy_id=2600 - Você pode se transformar em um boneco de neve se aplicado. legacy_id=2601 @@ -9097,10 +9001,6 @@ Mova com um clique com o botão direito do mouse. legacy_id=2603 - - Salve o local do aplicativo. - legacy_id=2604 - Salva o local com o clique direito do mouse. legacy_id=2605 @@ -9385,26 +9285,10 @@ Muitas pessoas no colosso. legacy_id=2707 - - +10~+15 Ao atualizar o item de nível, coloque-o na janela de combinação. - legacy_id=2708 - item/habilidade/sorte/opção serão adicionados aleatoriamente. legacy_id=2709 - - Exp e item serão garantidos quando o personagem morrer. - legacy_id=2714 - - - A durabilidade do item não diminuirá por um determinado período. - legacy_id=2715 - - - Aplicável apenas a itens montáveis ​​além de animais de estimação. - legacy_id=2716 - Aumenta sua sorte para criar a asa do seu desejo. legacy_id=2717 @@ -9453,14 +9337,6 @@ Aumenta apenas a experiência do nível Master. legacy_id=2728 - - Nenhuma penalidade por morrer. - legacy_id=2729 - - - Mantém o item durável - legacy_id=2730 - Selecione para mover. legacy_id=2731 @@ -9521,18 +9397,6 @@ Dano/Feitiçaria/Maldição +30 legacy_id=2745 - - Coleta automaticamente o zen ao seu redor. - legacy_id=2746 - - - Taxa de EXP 50%% inaumento - legacy_id=2747 - - - Aumente a habilidade defensiva +50 - legacy_id=2748 - Lugard legacy_id=2756 @@ -9609,14 +9473,6 @@ Você precisa de mais %d para criar um Espelho de Dimensões. legacy_id=2776 - - Essa é a única coisa que fará Lugard ajudá-lo - legacy_id=2777 - - - entre na área Doppelganger. - legacy_id=2778 - Somente aqueles que possuem um Espelho de Dimensões podem entrar. legacy_id=2779 @@ -9897,26 +9753,6 @@ A poção de alta vitalidade anulou a penalidade do nível de fadiga. legacy_id=2874 - - Você pode fazer uma combinação de Goblin com uma Caixa Dourada Selada para criar uma Caixa Dourada. - legacy_id=2875 - - - Você pode fazer uma combinação de Goblin com uma Caixa de Prata Selada para criar uma Caixa de Prata. - legacy_id=2876 - - - Você pode fazer uma combinação de Goblin com uma Chave Dourada para criar uma Caixa Dourada. - legacy_id=2877 - - - Você pode fazer uma combinação de Goblin com uma Silver Key para criar uma Silver Box. - legacy_id=2878 - - - Você pode derrubá-lo com uma probabilidade fixa de se transformar em um item raro. - legacy_id=2879,2880 - Caixa Dourada legacy_id=2881 @@ -10209,26 +10045,6 @@ Ocorreu um erro de acesso ao banco de dados. legacy_id=2967 - - Aumentar Máx. AG + Nível - legacy_id=2968 - - - Aumentar Máx. SD + Nívelx10 - legacy_id=2969 - - - Aumento de ganho de até %d%% EXP, dependendo do número de membros do seu grupo. - legacy_id=2970 - - - Você pode adquirir Goblin Points usando o armazenamento da MU Item Shop. - legacy_id=2971 - - - É uma caixa contendo vários itens. - legacy_id=2972 - Um item que permite desfrutar do MU por 30 dias.\nSó pode ser usado no site do MU Online. legacy_id=2973 @@ -10409,10 +10225,6 @@ Mercado Loren legacy_id=3017 - - Aumenta a taxa de queda de itens. - legacy_id=3018 - Runedil legacy_id=3022 @@ -10549,10 +10361,6 @@ Sósia legacy_id=3057 - - Aumenta a Mana Máxima em 4%% - legacy_id=3058 - Bônus PC Café legacy_id=3059 @@ -10589,14 +10397,6 @@ Equipando com um esqueleto de animal de estimação legacy_id=3067 - - aumenta Dano, Magia e Maldição em 20%% - legacy_id=3068 - - - e EXP em 30%%. - legacy_id=3070 - Equipando com um Anel de Transformação de Esqueleto legacy_id=3071 @@ -10641,10 +10441,6 @@ Recompensa aleatória (tipos diferentes de %lu) legacy_id=3082 - - Clique com o botão direito para usar. - legacy_id=3084 - +14 Criação de Itens legacy_id=3086 diff --git a/src/Localization/Game.ru.resx b/src/Localization/Game.ru.resx index 3264fc98aa..fa250d3d02 100644 --- a/src/Localization/Game.ru.resx +++ b/src/Localization/Game.ru.resx @@ -2365,14 +2365,6 @@ Увеличивает скорость получения маны после охоты на монстров +Мана/8. legacy_id=635 - - Оставшееся время показано - legacy_id=638 - - - когда вы щелкаете правой кнопкой мыши. - legacy_id=639 - Вы войдете на площадь Дьявола (через %d секунд). legacy_id=640 @@ -6101,10 +6093,6 @@ 12 апостолов Лугадра помогают ослепить привратника на дороге к месту упокоения Балгасса. legacy_id=1664 - - Ингредиенты для сборки третьего крыла. - legacy_id=1665 - Перо Кондора legacy_id=1666 @@ -7965,10 +7953,6 @@ Произошел более сильный эффект. legacy_id=2249 - - Увеличивает коэффициент комбинации, но только до максимального коэффициента. - legacy_id=2250 - Невозможно увеличить коэффициент комбинации дальше. legacy_id=2251 @@ -7989,18 +7973,6 @@ Невозможно получить ставку опыта legacy_id=2255 - - Увеличивает получаемый опыт. - legacy_id=2256 - - - Увеличивает получаемый опыт и шанс выпадения предметов. - legacy_id=2257 - - - Мешает приобретению опыта. - legacy_id=2258 - Позволяет войти в %s. legacy_id=2259 @@ -8041,10 +8013,6 @@ Вы получили предмет %s. legacy_id=2268 - - Поздравляю. Пожалуйста, свяжитесь с командой CS и измените его на элемент. - legacy_id=2269 - Вам будет назначен этап в соответствии с вашим уровнем. legacy_id=2270 @@ -8149,10 +8117,6 @@ %d%% Увеличение шанса успешной комбинации legacy_id=2296 - - Доступно окно управления варпом. - legacy_id=2297 - Час legacy_id=2299 @@ -8481,18 +8445,6 @@ Свиток крови legacy_id=2396 - - Соберите Свиток Крови с помощью контракта Волшебства Иллюзий. - legacy_id=2397 - - - Соберите Свиток Крови из старых свитков. - legacy_id=2398 - - - Это знак волшебства иллюзий; это необходимо для входа в храм. - legacy_id=2399 - <ШАГ 1: Битва начинается> legacy_id=2400 @@ -8569,10 +8521,6 @@ Это источник силы, защищающей Храм Иллюзий. legacy_id=2419 - - Скорость мобильности снижается при достижении. - legacy_id=2420 - <Утро> <После полудня> legacy_id=2421 @@ -8781,10 +8729,6 @@ Увеличивает ману на %d. legacy_id=2508 - - Вы можете свободно двигаться дальше. - legacy_id=2509 - Сбрасывает статус. legacy_id=2510 @@ -8821,10 +8765,6 @@ Есть эффект увеличения. legacy_id=2518 - - Это снижает уровень убийств. - legacy_id=2519 - Точка сокращения: %d legacy_id=2520 @@ -8949,14 +8889,6 @@ Опыт мастер-уровня не может быть достигнут во время использования предмета. legacy_id=2566 - - Не применимо к - legacy_id=2567 - - - Персонажи уровня Мастер. - legacy_id=2568 - Увеличение автоматического восстановления ресурса %d%% legacy_id=2569 @@ -8973,30 +8905,6 @@ Достижение предмета и автоматическое восстановление маны увеличиваются. legacy_id=2572 - - Минимум +10–+15 повышение уровня предмета. - legacy_id=2573 - - - блокирует рассеивание предмета. - legacy_id=2574 - - - Увеличивает силу атаки и волшебство на 40%% - legacy_id=2575 - - - Увеличивает скорость атаки на 10. - legacy_id=2576,3069 - - - Уменьшает урон монстра на 30%% - legacy_id=2577 - - - Увеличивает максимальное количество жизни на 50. - legacy_id=2578 - Максимум маны +50 legacy_id=2579 @@ -9081,10 +8989,6 @@ Скорость восстановления AG увеличилась на %d. legacy_id=2599 - - Окружающие дзены собираются автоматически. - legacy_id=2600 - Если применить его, вы можете превратиться в снеговика. legacy_id=2601 @@ -9097,10 +9001,6 @@ Перемещение осуществляется щелчком правой кнопки мыши. legacy_id=2603 - - Сохраните местоположение приложения. - legacy_id=2604 - Сохраняет местоположение щелчком правой кнопки мыши. legacy_id=2605 @@ -9385,26 +9285,10 @@ Слишком много людей в Колосуме. legacy_id=2707 - - +10~+15 При обновлении предмета уровня поместите его в окно комбинации. - legacy_id=2708 - предмет/навык/удача/опция будут добавлены случайным образом. legacy_id=2709 - - Опыт и предмет будут сохранены после смерти персонажа. - legacy_id=2714 - - - Прочность предмета не будет уменьшаться в течение определенного периода. - legacy_id=2715 - - - Применимо только к монтируемым предметам, кроме питомца. - legacy_id=2716 - Увеличивает вашу удачу в создании крыла вашего желания. legacy_id=2717 @@ -9453,14 +9337,6 @@ Только увеличивает опыт уровня Мастера. legacy_id=2728 - - Никакого наказания за смерть. - legacy_id=2729 - - - Сохраняет вещь прочной - legacy_id=2730 - Выберите, чтобы переместить. legacy_id=2731 @@ -9521,18 +9397,6 @@ Урон/Магия/Проклятие +30 legacy_id=2745 - - Автоматически собирает дзен вокруг себя. - legacy_id=2746 - - - Скорость опыта 50%% increase - legacy_id=2747 - - - Увеличение навыка защиты +50 - legacy_id=2748 - Лугард legacy_id=2756 @@ -9609,14 +9473,6 @@ Вам понадобится еще %d, чтобы создать Зеркало Измерений. legacy_id=2776 - - Это единственное, что заставит Лугарда помочь вам. - legacy_id=2777 - - - войдите в зону Доппельгангера. - legacy_id=2778 - Входить могут только те, у кого есть Зеркало Измерений. legacy_id=2779 @@ -9897,26 +9753,6 @@ Зелье высокой живучести отменило штраф за уровень усталости. legacy_id=2874 - - Вы можете создать комбинацию Гоблина с Запечатанной Золотой Коробкой, чтобы создать Золотую Коробку. - legacy_id=2875 - - - Вы можете создать комбинацию Гоблина с Запечатанной Серебряной Коробкой, чтобы создать Серебряную Коробку. - legacy_id=2876 - - - Вы можете создать комбинацию Гоблина с Золотым ключом, чтобы создать Золотую шкатулку. - legacy_id=2877 - - - Вы можете создать комбинацию гоблина с серебряным ключом, чтобы создать серебряную шкатулку. - legacy_id=2878 - - - Вы можете выбросить его с фиксированной вероятностью, что он превратится в редкий предмет. - legacy_id=2879,2880 - Золотая шкатулка legacy_id=2881 @@ -10209,26 +10045,6 @@ Произошла ошибка доступа к базе данных. legacy_id=2967 - - Увеличить Макс. АГ + Уровень - legacy_id=2968 - - - Увеличить Макс. СД + Уровеньx10 - legacy_id=2969 - - - Увеличение получаемого урона до %d%% EXP, в зависимости от количества членов вашей группы. - legacy_id=2970 - - - Вы можете получить очки гоблинов, используя хранилище магазина предметов MU. - legacy_id=2971 - - - Это коробка, содержащая различные предметы. - legacy_id=2972 - Предмет, который позволит вам наслаждаться MU в течение 30 дней. \nМожно использовать только с веб-сайта MU Online. legacy_id=2973 @@ -10409,10 +10225,6 @@ Лорен Маркет legacy_id=3017 - - Увеличивает шанс выпадения предметов. - legacy_id=3018 - Рунедил legacy_id=3022 @@ -10549,10 +10361,6 @@ двойник legacy_id=3057 - - Увеличивает максимальное количество маны на 4%% - legacy_id=3058 - Бонус ПК-кафе legacy_id=3059 @@ -10589,14 +10397,6 @@ Экипировка вместе со скелетом питомца legacy_id=3067 - - увеличивает урон, волшебство и проклятие на 20%% - legacy_id=3068 - - - и EXP на 30%%. - legacy_id=3070 - Экипировка вместе с кольцом трансформации скелета. legacy_id=3071 @@ -10641,10 +10441,6 @@ Случайная награда (различные виды %lu) legacy_id=3082 - - Щелкните правой кнопкой мыши, чтобы использовать. - legacy_id=3084 - +14 Создание предметов legacy_id=3086 diff --git a/src/Localization/Game.tl.resx b/src/Localization/Game.tl.resx index 79851bd19a..7f34391c62 100644 --- a/src/Localization/Game.tl.resx +++ b/src/Localization/Game.tl.resx @@ -2365,14 +2365,6 @@ Pinapataas ang rate ng pagkuha ng Mana pagkatapos manghuli ng mga halimaw +Mana/8 legacy_id=635 - - Ang natitirang oras ay ipinapakita - legacy_id=638 - - - kapag nag-right click ka sa iyong mouse. - legacy_id=639 - Papasok ka sa Devil Square (%d segundo mula ngayon) legacy_id=640 @@ -6101,10 +6093,6 @@ Ang 12 apostol ni Lugadr ay tumutulong sa pamamagitan ng pagbulag sa bantay-pinto sa daan patungo sa Balgass' Resting Place. legacy_id=1664 - - Mga sangkap para sa 3rd wing assembly. - legacy_id=1665 - Ang balahibo ni Condor legacy_id=1666 @@ -7965,10 +7953,6 @@ Stonger effect ay naganap. legacy_id=2249 - - Pinapataas ang rate ng kumbinasyon, ngunit hanggang sa maximum na rate lamang. - legacy_id=2250 - Hindi na mapataas pa ang rate ng kumbinasyon. legacy_id=2251 @@ -7989,18 +7973,6 @@ Hindi makuha ang rate ng karanasan legacy_id=2255 - - Nagpapataas ng karanasang natamo. - legacy_id=2256 - - - Pinapataas ang karanasang natamo at rate ng pagbaba ng item. - legacy_id=2257 - - - Pinipigilan ang mga karanasan na makuha. - legacy_id=2258 - Pinapagana ang pagpasok sa %s. legacy_id=2259 @@ -8041,10 +8013,6 @@ Nakamit mo ang %s item. legacy_id=2268 - - Binabati kita. Mangyaring makipag-ugnayan sa CS team at palitan ito ng item. - legacy_id=2269 - Itatalaga ka sa isang yugto ayon sa iyong antas. legacy_id=2270 @@ -8149,10 +8117,6 @@ %d%% Pagtaas ng rate ng tagumpay ng kumbinasyon legacy_id=2296 - - Available ang Warp Command Window. - legacy_id=2297 - Oras legacy_id=2299 @@ -8481,18 +8445,6 @@ Scroll ng Dugo legacy_id=2396 - - Ipunin ang Scroll of Blood na may kontrata mula sa Illusion Sorcery. - legacy_id=2397 - - - Ipunin ang Scroll of Blood gamit ang mga lumang scroll. - legacy_id=2398 - - - Ito ay isang marka ng Illusion Sorcery; ito ay kinakailangan upang makapasok sa templo. - legacy_id=2399 - <STEP 1: Magsisimula ang Labanan> legacy_id=2400 @@ -8569,10 +8521,6 @@ Ito ang pinagmulan ng lakas na nagpoprotekta sa Illusion Temple. legacy_id=2419 - - Ang bilis ng paggalaw ay bumababa kapag nakamit. - legacy_id=2420 - <AM> <PM> legacy_id=2421 @@ -8781,10 +8729,6 @@ Pinapataas ang Mana ng %d legacy_id=2508 - - Maaari kang malayang magpatuloy. - legacy_id=2509 - Nire-reset ang katayuan. legacy_id=2510 @@ -8821,10 +8765,6 @@ Mayroong pagtaas ng epekto dito. legacy_id=2518 - - Binabawasan nito ang rate ng pagpatay. - legacy_id=2519 - Puntos ng pagbabawas: %d legacy_id=2520 @@ -8949,14 +8889,6 @@ Ang Master Level EXP ay hindi makakamit sa panahon ng paggamit ng item. legacy_id=2566 - - Hindi naaangkop sa - legacy_id=2567 - - - Mga Master Level na Character. - legacy_id=2568 - Ang Awtomatikong Life Recover na pagtaas %d%% legacy_id=2569 @@ -8973,30 +8905,6 @@ Ang pagkamit ng item at ang awtomatikong pagbawi ng Mana ay tumataas. legacy_id=2572 - - Pinakamababang +10 - +15 na antas ng pag-upgrade ng item - legacy_id=2573 - - - hinaharangan ang pagwawaldas ng item. - legacy_id=2574 - - - Pinapataas ng 40%% ang Attack Power at Wizardry - legacy_id=2575 - - - Pinapataas ng 10 ang Bilis ng Pag-atake - legacy_id=2576,3069 - - - Binabawasan ang pinsala ng halimaw ng 30%% - legacy_id=2577 - - - Pinapataas ng 50 ang Pinakamataas na Buhay - legacy_id=2578 - Pinakamataas na Mana +50 legacy_id=2579 @@ -9081,10 +8989,6 @@ Ang bilis ng pagbawi ng AG ay tumaas ng %d. legacy_id=2599 - - Ang mga nakapalibot na Zen ay awtomatikong kinokolekta. - legacy_id=2600 - Maaari kang maging isang taong yari sa niyebe kung inilapat. legacy_id=2601 @@ -9097,10 +9001,6 @@ Ilipat sa pamamagitan ng isang right-mouse-click. legacy_id=2603 - - I-save ang lokasyon ng application. - legacy_id=2604 - Sine-save ang lokasyon gamit ang right-mouse-click. legacy_id=2605 @@ -9385,26 +9285,10 @@ Masyadong maraming tao sa colossum. legacy_id=2707 - - +10~+15 Kapag nag-a-upgrade ng item sa antas, mangyaring ilagay ito sa window ng kumbinasyon. - legacy_id=2708 - item/kasanayan/swerte/opsyon ay random na idadagdag. legacy_id=2709 - - Mase-secure ang exp at item kapag namatay ang character. - legacy_id=2714 - - - Ang tibay ng item ay hindi bababa sa isang tiyak na panahon. - legacy_id=2715 - - - Naaangkop sa mga naka-mount na item lamang bukod sa alagang hayop. - legacy_id=2716 - Pinapataas ang iyong kapalaran upang lumikha ng pakpak ng iyong nais. legacy_id=2717 @@ -9453,14 +9337,6 @@ Pinapataas lang ang Master level exp. legacy_id=2728 - - Walang parusa sa pagkamatay. - legacy_id=2729 - - - Pinapanatiling matibay ang item - legacy_id=2730 - Piliin upang ilipat. legacy_id=2731 @@ -9521,18 +9397,6 @@ Pinsala/Wizardry/Curse +30 legacy_id=2745 - - Auto-collect ng zen sa paligid mo. - legacy_id=2746 - - - EXP rate 50%% inadagdagan - legacy_id=2747 - - - Dagdagan ang Defensive Skill +50 - legacy_id=2748 - Lugard legacy_id=2756 @@ -9609,14 +9473,6 @@ Kailangan mo pa ng %d para makagawa ng Mirror of Dimensions. legacy_id=2776 - - Iyan lang ang makakatutulong sa iyo ni Lugard - legacy_id=2777 - - - pumasok sa lugar ng Doppelganger. - legacy_id=2778 - Tanging ang mga may hawak ng Mirror of Dimensions ang maaaring pumasok. legacy_id=2779 @@ -9897,26 +9753,6 @@ Ang High Vitality potion ay tinanggihan ang Fatigue Level penalty. legacy_id=2874 - - Maaari kang gumawa ng kumbinasyon ng Goblin na may Sealed Golden Box para gumawa ng Golden Box. - legacy_id=2875 - - - Maaari kang gumawa ng kumbinasyon ng Goblin na may Sealed Silver Box para gumawa ng Silver Box. - legacy_id=2876 - - - Maaari kang gumawa ng kumbinasyon ng Goblin gamit ang isang Gold Key upang lumikha ng isang Golden Box. - legacy_id=2877 - - - Maaari kang gumawa ng kumbinasyon ng Goblin na may Silver Key para gumawa ng Silver Box. - legacy_id=2878 - - - Maaari mong i-drop ito nang may nakapirming posibilidad na maging isang bihirang item. - legacy_id=2879,2880 - Gintong Kahon legacy_id=2881 @@ -10209,26 +10045,6 @@ Nagkaroon ng error sa pag-access sa database. legacy_id=2967 - - Dagdagan ang Max. AG + Level - legacy_id=2968 - - - Dagdagan ang Max. SD + Levelx10 - legacy_id=2969 - - - Hanggang %d%% EXP ang pagtaas ng kita, depende sa bilang ng mga miyembro sa iyong partido. - legacy_id=2970 - - - Maaari kang makakuha ng Goblin Points sa pamamagitan ng paggamit ng storage ng MU Item Shop. - legacy_id=2971 - - - Ito ay isang kahon na naglalaman ng iba't ibang mga item. - legacy_id=2972 - Isang item na hinahayaan kang mag-enjoy sa MU sa loob ng 30 araw.\nMaaari lang gamitin mula sa MU Online website. legacy_id=2973 @@ -10409,10 +10225,6 @@ Loren Market legacy_id=3017 - - Pinapalakas ang rate ng pagbagsak ng item. - legacy_id=3018 - Runedil legacy_id=3022 @@ -10549,10 +10361,6 @@ Doppelganger legacy_id=3057 - - Tumataas ng Max Mana 4%% - legacy_id=3058 - Bonus sa PC Cafe legacy_id=3059 @@ -10589,14 +10397,6 @@ Equipping kasama ng Pet Skeleton legacy_id=3067 - - pinapataas ng 20%% ang Damage, Wizardry at Curse - legacy_id=3068 - - - at EXP ng 30%%. - legacy_id=3070 - Equipping kasama ng isang Skeleton Transformation Ring legacy_id=3071 @@ -10641,10 +10441,6 @@ Random na Gantimpala (%lu iba't ibang uri) legacy_id=3082 - - I-right click para gamitin. - legacy_id=3084 - +14 Paglikha ng Item legacy_id=3086 diff --git a/src/Localization/Game.uk.resx b/src/Localization/Game.uk.resx index 90637c8d11..89d51d4fc0 100644 --- a/src/Localization/Game.uk.resx +++ b/src/Localization/Game.uk.resx @@ -2365,14 +2365,6 @@ Збільшує швидкість отримання мани після полювання на монстрів +Мана/8 legacy_id=635 - - Показано час, що залишився - legacy_id=638 - - - коли ви клацаєте правою кнопкою миші. - legacy_id=639 - Ви потрапите на площу Диявола (через %d секунд) legacy_id=640 @@ -6101,10 +6093,6 @@ 12 апостолів Лугадра допомагають, засліплюючи воротаря біля дороги до місця спочинку Балгаса. legacy_id=1664 - - Інгредієнти для складання 3-го крила. - legacy_id=1665 - Кондорове перо legacy_id=1666 @@ -7965,10 +7953,6 @@ Має місце сильніший ефект. legacy_id=2249 - - Збільшує швидкість комбінації, але лише до максимальної швидкості. - legacy_id=2250 - Неможливо збільшити коефіцієнт комбінації. legacy_id=2251 @@ -7989,18 +7973,6 @@ Не вдається отримати рівень досвіду legacy_id=2255 - - Збільшує отриманий досвід. - legacy_id=2256 - - - Збільшує отриманий досвід і швидкість випадання предметів. - legacy_id=2257 - - - Заважає отримати досвід. - legacy_id=2258 - Дозволяє вхід у %s. legacy_id=2259 @@ -8041,10 +8013,6 @@ Ви отримали предмет %s. legacy_id=2268 - - Вітаю. Будь ласка, зв’яжіться з командою CS і змініть його на елемент. - legacy_id=2269 - Ви будете розподілені на етап відповідно до вашого рівня. legacy_id=2270 @@ -8149,10 +8117,6 @@ %d%% Збільшення рівня успіху комбінації legacy_id=2296 - - Доступне вікно команд Warp. - legacy_id=2297 - годину legacy_id=2299 @@ -8481,18 +8445,6 @@ Сувій крові legacy_id=2396 - - Зберіть Сувій крові за контрактом від Illusion Sorcery. - legacy_id=2397 - - - Зберіть Сувій крові зі старих сувоїв. - legacy_id=2398 - - - Це ознака магії ілюзій; це потрібно для входу в храм. - legacy_id=2399 - <КРОК 1: Битва починається> legacy_id=2400 @@ -8569,10 +8521,6 @@ Це джерело сили, яка захищає Храм Ілюзій. legacy_id=2419 - - Швидкість рухливості знижується після досягнення. - legacy_id=2420 - <до ранку> <південь> legacy_id=2421 @@ -8781,10 +8729,6 @@ Збільшує ману на %d legacy_id=2508 - - Ви можете вільно рухатися далі. - legacy_id=2509 - Скидає статус. legacy_id=2510 @@ -8821,10 +8765,6 @@ Є ефект збільшення. legacy_id=2518 - - Це знижує швидкість вбивства. - legacy_id=2519 - Точка редукції: %d legacy_id=2520 @@ -8949,14 +8889,6 @@ Майстер-рівень EXP не може бути досягнутий під час використання предмета. legacy_id=2566 - - Не застосовується до - legacy_id=2567 - - - Персонажі майстерного рівня. - legacy_id=2568 - Приріст автоматичного відновлення життя %d%% legacy_id=2569 @@ -8973,30 +8905,6 @@ Досягнення предметів і автоматичне відновлення мани збільшуються. legacy_id=2572 - - Мінімальне підвищення рівня +10 - +15 - legacy_id=2573 - - - блокує розсіювання предмета. - legacy_id=2574 - - - Збільшує силу атаки та магію на 40%% - legacy_id=2575 - - - Збільшує швидкість атаки на 10 - legacy_id=2576,3069 - - - Зменшує шкоду монстра на 30%% - legacy_id=2577 - - - Збільшує максимальне життя на 50 - legacy_id=2578 - Максимальна мана +50 legacy_id=2579 @@ -9081,10 +8989,6 @@ Швидкість відновлення АГ зросла на %d. legacy_id=2599 - - Навколишні дзени збираються автоматично. - legacy_id=2600 - Ви можете перетворитися на сніговика, якщо застосувати. legacy_id=2601 @@ -9097,10 +9001,6 @@ Переміщення клацанням правої кнопки миші. legacy_id=2603 - - Збережіть розташування програми. - legacy_id=2604 - Зберігає розташування клацанням правою кнопкою миші. legacy_id=2605 @@ -9385,26 +9285,10 @@ Забагато людей у ​​колоссі. legacy_id=2707 - - +10~+15 Під час підвищення рівня предмета, будь ласка, помістіть його у вікно комбінацій. - legacy_id=2708 - предмет/уміння/удача/опція буде додано випадковим чином. legacy_id=2709 - - Досвід і предмет будуть захищені, коли персонаж помре. - legacy_id=2714 - - - Стійкість предмета не буде знижуватися протягом певного періоду. - legacy_id=2715 - - - Застосовується лише для встановлюваних елементів, крім домашніх тварин. - legacy_id=2716 - Збільшує вашу удачу, щоб створити крило за вашим бажанням. legacy_id=2717 @@ -9453,14 +9337,6 @@ Збільшує досвід лише рівня Майстра. legacy_id=2728 - - Жодного покарання за смерть. - legacy_id=2729 - - - Зберігає предмет міцним - legacy_id=2730 - Виберіть для переміщення. legacy_id=2731 @@ -9521,18 +9397,6 @@ Пошкодження/Чарівництво/Прокляття +30 legacy_id=2745 - - Автоматично збирає дзен навколо вас. - legacy_id=2746 - - - Швидкість досвіду збільшується на 50%% in - legacy_id=2747 - - - Підвищення навичок захисту +50 - legacy_id=2748 - Лугард legacy_id=2756 @@ -9609,14 +9473,6 @@ Вам потрібно більше %d для створення Mirror of Dimensions. legacy_id=2776 - - Це єдине, що змусить Лугарда вам допомогти - legacy_id=2777 - - - увійдіть у зону Doppelganger. - legacy_id=2778 - Увійти можуть лише ті, хто має Дзеркало Вимірів. legacy_id=2779 @@ -9897,26 +9753,6 @@ Зілля високої життєвої сили скасовує штраф рівня втоми. legacy_id=2874 - - Ви можете створити комбінацію гобліна із запечатаною золотою скринькою, щоб створити золоту скриньку. - legacy_id=2875 - - - Ви можете поєднати Гобліна з Запечатаною Срібною Скринькою, щоб створити Срібну Скриньку. - legacy_id=2876 - - - Ви можете створити комбінацію гобліна із золотим ключем, щоб створити золоту скриньку. - legacy_id=2877 - - - Ви можете створити комбінацію гобліна зі срібним ключем, щоб створити срібну скриню. - legacy_id=2878 - - - Ви можете скинути його з фіксованою ймовірністю того, що він перетвориться на рідкісний предмет. - legacy_id=2879,2880 - Золота скринька legacy_id=2881 @@ -10209,26 +10045,6 @@ Сталася помилка доступу до бази даних. legacy_id=2967 - - Збільшити Макс. AG + рівень - legacy_id=2968 - - - Збільшити Макс. SD + Рівеньx10 - legacy_id=2969 - - - Збільшення приросту до %d%% EXP, залежно від кількості учасників у вашій групі. - legacy_id=2970 - - - Ви можете отримати бали гоблінів, використовуючи сховище MU Item Shop. - legacy_id=2971 - - - Це коробка з різними предметами. - legacy_id=2972 - Предмет, який дає вам змогу користуватися MU протягом 30 днів.\nМожна використовувати лише на веб-сайті MU Online. legacy_id=2973 @@ -10409,10 +10225,6 @@ Ринок Лорен legacy_id=3017 - - Збільшує швидкість випадання предметів. - legacy_id=3018 - Рунеділ legacy_id=3022 @@ -10549,10 +10361,6 @@ Двійник legacy_id=3057 - - Збільшує максимальну ману на 4%% - legacy_id=3058 - Бонус PC Cafe legacy_id=3059 @@ -10589,14 +10397,6 @@ Екіпірування разом зі скелетом домашньої тварини legacy_id=3067 - - збільшує шкоду, магію та прокляття на 20%% - legacy_id=3068 - - - і EXP на 30%%. - legacy_id=3070 - Екіпірування разом із кільцем трансформації скелета legacy_id=3071 @@ -10641,10 +10441,6 @@ Випадкова винагорода (різні види %lu) legacy_id=3082 - - Клацніть правою кнопкою миші, щоб використати. - legacy_id=3084 - +14 Створення предметів legacy_id=3086 diff --git a/src/Localization/Game.zh-TW.resx b/src/Localization/Game.zh-TW.resx index 5193e8ac7c..74debb47ce 100644 --- a/src/Localization/Game.zh-TW.resx +++ b/src/Localization/Game.zh-TW.resx @@ -2365,14 +2365,6 @@ 狩獵怪物後魔力獲取率增加+魔力/8 legacy_id=635 - - 顯示剩餘時間 - legacy_id=638 - - - 當您右鍵單擊滑鼠時。 - legacy_id=639 - 您將進入魔鬼廣場(%d 秒後) legacy_id=640 @@ -6101,10 +6093,6 @@ 盧加德爾的 12 名使徒正在幫忙,他們蒙蔽了通往巴爾加斯安息之地的道路旁的守門人。 legacy_id=1664 - - 第三機翼組件的材料。 - legacy_id=1665 - 禿鷹的羽毛 legacy_id=1666 @@ -7965,10 +7953,6 @@ 更強烈的效果已經發生。 legacy_id=2249 - - 增加組合速率,但僅達最大速率。 - legacy_id=2250 - 無法進一步提高組合速率。 legacy_id=2251 @@ -7989,18 +7973,6 @@ 無法獲得經驗值 legacy_id=2255 - - 增加獲得的經驗。 - legacy_id=2256 - - - 增加獲得的經驗值和物品掉落率。 - legacy_id=2257 - - - 阻止獲得經驗。 - legacy_id=2258 - 允許進入 %s。 legacy_id=2259 @@ -8041,10 +8013,6 @@ 您已獲得 %s 專案。 legacy_id=2268 - - 恭喜。請聯絡CS團隊並將其變更為專案。 - legacy_id=2269 - 您將根據您的等級被分配到一個階段。 legacy_id=2270 @@ -8149,10 +8117,6 @@ %d%% 組合成功率提升 legacy_id=2296 - - 扭曲命令視窗可用。 - legacy_id=2297 - 小時 legacy_id=2299 @@ -8481,18 +8445,6 @@ 血捲軸 legacy_id=2396 - - 用幻象魔法的契約組裝血色捲軸。 - legacy_id=2397 - - - 將血液捲軸與舊捲軸組裝起來。 - legacy_id=2398 - - - 這是幻術的印記;這是進入寺廟所必需的。 - legacy_id=2399 - <第一步:戰鬥開始> legacy_id=2400 @@ -8569,10 +8521,6 @@ 這就是守護幻殿的力量本源。 legacy_id=2419 - - 成就後移動速度會降低。 - legacy_id=2420 - <上午> <下午> legacy_id=2421 @@ -8781,10 +8729,6 @@ 法力增加 %d legacy_id=2508 - - 你可以自由地前進。 - legacy_id=2509 - 重置狀態。 legacy_id=2510 @@ -8821,10 +8765,6 @@ 對它有一個增加的效果。 legacy_id=2518 - - 它降低了殺滅率。 - legacy_id=2519 - 還原點:%d legacy_id=2520 @@ -8949,14 +8889,6 @@ 使用物品期間無法獲得大師級經驗值。 legacy_id=2566 - - 不適用於 - legacy_id=2567 - - - 大師級人物。 - legacy_id=2568 - 自動生命復原增量 %d%% legacy_id=2569 @@ -8973,30 +8905,6 @@ 物品成就和自動法力恢復量不斷增加。 legacy_id=2572 - - 最低 +10 - +15 級物品升級 - legacy_id=2573 - - - 阻止物品耗散。 - legacy_id=2574 - - - 攻擊力和魔法增加40%% - legacy_id=2575 - - - 攻擊速度提高 10 - legacy_id=2576,3069 - - - 減少怪物傷害30%% - legacy_id=2577 - - - 最大生命增加 50 - legacy_id=2578 - 最大法力 +50 legacy_id=2579 @@ -9081,10 +8989,6 @@ AG恢復速度增加了%d。 legacy_id=2599 - - 周圍的禪宗會自動收集。 - legacy_id=2600 - 如果你應用的話,你可能會變成雪人。 legacy_id=2601 @@ -9097,10 +9001,6 @@ 按一下滑鼠右鍵進行移動。 legacy_id=2603 - - 儲存應用程式位置。 - legacy_id=2604 - 點選滑鼠右鍵儲存位置。 legacy_id=2605 @@ -9385,26 +9285,10 @@ 巨像裡的人太多了。 legacy_id=2707 - - +10~+15 升級等級項目時請將其放在組合視窗中。 - legacy_id=2708 - 物品/技能/運氣/選項將隨機添加。 legacy_id=2709 - - 當角色死亡時,經驗值和物品將受到保護。 - legacy_id=2714 - - - 物品耐久度在一定時間內不會減少。 - legacy_id=2715 - - - 僅適用於寵物以外的可安裝物品。 - legacy_id=2716 - 增加你的運氣來創造你想要的翅膀。 legacy_id=2717 @@ -9453,14 +9337,6 @@ 只增加大師等級經驗。 legacy_id=2728 - - 死亡沒有懲罰。 - legacy_id=2729 - - - 保持物品耐用 - legacy_id=2730 - 選擇移動。 legacy_id=2731 @@ -9521,18 +9397,6 @@ 傷害/魔法/詛咒 +30 legacy_id=2745 - - 自動收集你周圍的禪宗。 - legacy_id=2746 - - - EXP率50%% i增加 - legacy_id=2747 - - - 防禦技能增加+50 - legacy_id=2748 - 盧加德 legacy_id=2756 @@ -9609,14 +9473,6 @@ 您還需要 %d 來建立維度之鏡。 legacy_id=2776 - - 這是唯一能讓盧加德幫助你的事情 - legacy_id=2777 - - - 進入分身區域。 - legacy_id=2778 - 只有持有次元鏡的人才可以進入。 legacy_id=2779 @@ -9897,26 +9753,6 @@ 高活力藥水抵消了疲勞度懲罰。 legacy_id=2874 - - 您可以將哥布林與密封金盒進行組合來創建金盒。 - legacy_id=2875 - - - 您可以將哥布林與密封銀盒進行組合來創建銀盒。 - legacy_id=2876 - - - 您可以將哥布林與金鑰匙組合來創建金盒子。 - legacy_id=2877 - - - 您可以將哥布林與銀鑰匙組合來創建銀盒子。 - legacy_id=2878 - - - 你可以以固定的機率掉落它,使其變成稀有物品。 - legacy_id=2879,2880 - 金盒 legacy_id=2881 @@ -10209,26 +10045,6 @@ 發生資料庫存取錯誤。 legacy_id=2967 - - 增加最大。 AG+等級 - legacy_id=2968 - - - 增加最大。 SD + 等級x10 - legacy_id=2969 - - - 增益增加最多 %d%% EXP,取決於隊伍中的成員數量。 - legacy_id=2970 - - - 您可以使用 MU 物品商店的存儲來獲取哥布林點數。 - legacy_id=2971 - - - 這是一個裝有各種物品的盒子。 - legacy_id=2972 - 可讓您享受30天MU的物品。 \n只能在MU Online網站上使用。 legacy_id=2973 @@ -10409,10 +10225,6 @@ 羅倫市場 legacy_id=3017 - - 提高物品掉落率。 - legacy_id=3018 - 魯尼迪爾 legacy_id=3022 @@ -10549,10 +10361,6 @@ 分身 legacy_id=3057 - - 最大法力增加 4%% - legacy_id=3058 - 網咖獎金 legacy_id=3059 @@ -10589,14 +10397,6 @@ 與寵物骷髏一起裝備 legacy_id=3067 - - 傷害、魔法和詛咒增加 20%% - legacy_id=3068 - - - 經驗值增加 30%%。 - legacy_id=3070 - 與骷髏變身戒指一起裝備 legacy_id=3071 @@ -10641,10 +10441,6 @@ 隨機獎勵(%lu不同種類) legacy_id=3082 - - 右鍵點擊即可使用。 - legacy_id=3084 - +14 物品創建 legacy_id=3086 diff --git a/src/bin/Data/Items/Group13_Helper.json b/src/bin/Data/Items/Group13_Helper.json index 677b6df7f7..64f7bc9925 100644 --- a/src/bin/Data/Items/Group13_Helper.json +++ b/src/bin/Data/Items/Group13_Helper.json @@ -1512,6 +1512,22 @@ "pt": "Pingente da pedra da lua" }, "description": [ + { + "text": { + "en": "Cannot Repair", + "de": "Kann nicht repariert werden", + "es": "No se puede reparar", + "id": "Tidak Dapat Memperbaiki", + "ja": "修理不可能", + "pl": "Nie można naprawić", + "pt": "Não é possível reparar", + "ru": "Невозможно восстановить", + "tl": "Hindi Maaayos", + "uk": "Неможливо відремонтувати", + "zh-TW": "無法修復" + }, + "color": "red" + }, { "text": { "en": "I.D. of Kantur Chief Scientist. You can enter the Refinery Tower.", @@ -1682,6 +1698,72 @@ "pt": "Selo da ascensão" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Increases experience gained.", + "de": "Erhöht die erhaltene Erfahrung.", + "es": "Aumenta la experiencia adquirida.", + "id": "Meningkatkan pengalaman yang diperoleh.", + "ja": "経験値獲得量が増加する効果があります。", + "pl": "Zwiększa zdobywane doświadczenie.", + "pt": "Aumenta a experiência adquirida.", + "ru": "Увеличивает получаемый опыт.", + "tl": "Nagpapataas ng karanasang natamo.", + "uk": "Збільшує отриманий досвід.", + "zh-TW": "增加獲得的經驗。" + }, + "color": "blue" + }, + { + "text": { + "en": "Warp Command Window available.", + "de": "Warp-Befehlsfenster verfügbar.", + "es": "Ventana de comando Warp disponible.", + "id": "Jendela Perintah Warp tersedia.", + "ja": "マップ移動ウィンドウが使えます。", + "pl": "Dostępne okno poleceń Warp.", + "pt": "Janela de comando Warp disponível.", + "ru": "Доступно окно управления варпом.", + "tl": "Available ang Warp Command Window.", + "uk": "Доступне вікно команд Warp.", + "zh-TW": "扭曲命令視窗可用。" + }, + "color": "blue" + }, + { + "text": { + "en": "Not applicable to", + "de": "Gilt nicht für", + "es": "No aplicable a", + "id": "Tidak berlaku untuk", + "ja": "ご注意 マスターレベルには経験値獲得量増加、", + "pl": "Nie dotyczy", + "pt": "Não aplicável a", + "ru": "Не применимо к", + "tl": "Hindi naaangkop sa", + "uk": "Не застосовується до", + "zh-TW": "不適用於" + }, + "color": "yellow" + }, + { + "text": { + "en": "Master Level Characters.", + "de": "Charaktere mit Master-Level.", + "es": "Personajes de nivel maestro.", + "id": "Karakter Tingkat Master.", + "ja": "アイテム獲得率増加効果は適用されません。", + "pl": "Postacie na poziomie mistrzowskim.", + "pt": "Personagens de nível mestre.", + "ru": "Персонажи уровня Мастер.", + "tl": "Mga Master Level na Character.", + "uk": "Персонажі майстерного рівня.", + "zh-TW": "大師級人物。" + }, + "color": "yellow" + } + ], "width": 1, "height": 1, "slot": "ring", @@ -1710,6 +1792,72 @@ "pt": "Selo da riqueza" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Increases experience gained and item drop rate.", + "de": "Erhöht die erhaltene Erfahrung und die Droprate von Gegenständen.", + "es": "Aumenta la experiencia obtenida y la tasa de caída de elementos.", + "id": "Meningkatkan pengalaman yang diperoleh dan tingkat penurunan item.", + "ja": "経験値とアイテム獲得量が増加する効果があります。", + "pl": "Zwiększa zdobywane doświadczenie i częstotliwość wypadania przedmiotów.", + "pt": "Aumenta a experiência adquirida e a taxa de queda de itens.", + "ru": "Увеличивает получаемый опыт и шанс выпадения предметов.", + "tl": "Pinapataas ang karanasang natamo at rate ng pagbaba ng item.", + "uk": "Збільшує отриманий досвід і швидкість випадання предметів.", + "zh-TW": "增加獲得的經驗值和物品掉落率。" + }, + "color": "blue" + }, + { + "text": { + "en": "Warp Command Window available.", + "de": "Warp-Befehlsfenster verfügbar.", + "es": "Ventana de comando Warp disponible.", + "id": "Jendela Perintah Warp tersedia.", + "ja": "マップ移動ウィンドウが使えます。", + "pl": "Dostępne okno poleceń Warp.", + "pt": "Janela de comando Warp disponível.", + "ru": "Доступно окно управления варпом.", + "tl": "Available ang Warp Command Window.", + "uk": "Доступне вікно команд Warp.", + "zh-TW": "扭曲命令視窗可用。" + }, + "color": "blue" + }, + { + "text": { + "en": "Not applicable to", + "de": "Gilt nicht für", + "es": "No aplicable a", + "id": "Tidak berlaku untuk", + "ja": "ご注意 マスターレベルには経験値獲得量増加、", + "pl": "Nie dotyczy", + "pt": "Não aplicável a", + "ru": "Не применимо к", + "tl": "Hindi naaangkop sa", + "uk": "Не застосовується до", + "zh-TW": "不適用於" + }, + "color": "yellow" + }, + { + "text": { + "en": "Master Level Characters.", + "de": "Charaktere mit Master-Level.", + "es": "Personajes de nivel maestro.", + "id": "Karakter Tingkat Master.", + "ja": "アイテム獲得率増加効果は適用されません。", + "pl": "Postacie na poziomie mistrzowskim.", + "pt": "Personagens de nível mestre.", + "ru": "Персонажи уровня Мастер.", + "tl": "Mga Master Level na Character.", + "uk": "Персонажі майстерного рівня.", + "zh-TW": "大師級人物。" + }, + "color": "yellow" + } + ], "width": 1, "height": 1, "slot": "ring", @@ -1738,6 +1886,56 @@ "pt": "Selo do sustento" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Prevents experiences to be gained.", + "de": "Verhindert, dass Erfahrung gesammelt wird.", + "es": "Impide que se adquieran experiencias.", + "id": "Mencegah pengalaman diperoleh.", + "ja": "経験値が獲得できないように維持する効果があります。", + "pl": "Uniemożliwia zdobywanie doświadczeń.", + "pt": "Impede que experiências sejam adquiridas.", + "ru": "Мешает приобретению опыта.", + "tl": "Pinipigilan ang mga karanasan na makuha.", + "uk": "Заважає отримати досвід.", + "zh-TW": "阻止獲得經驗。" + }, + "color": "blue" + }, + { + "text": { + "en": "Warp Command Window available.", + "de": "Warp-Befehlsfenster verfügbar.", + "es": "Ventana de comando Warp disponible.", + "id": "Jendela Perintah Warp tersedia.", + "ja": "マップ移動ウィンドウが使えます。", + "pl": "Dostępne okno poleceń Warp.", + "pt": "Janela de comando Warp disponível.", + "ru": "Доступно окно управления варпом.", + "tl": "Available ang Warp Command Window.", + "uk": "Доступне вікно команд Warp.", + "zh-TW": "扭曲命令視窗可用。" + }, + "color": "blue" + }, + { + "text": { + "en": "Master Level EXP cannot be achieved during the item usage.", + "de": "Während der Verwendung des Gegenstands kann keine Master-Erfahrung gesammelt werden.", + "es": "La EXP de nivel maestro no se puede lograr durante el uso del artículo.", + "id": "EXP Tingkat Master tidak dapat dicapai selama penggunaan item.", + "ja": "利用中はマスターレベル経験値が獲得できません。", + "pl": "Poziomu Mistrzowskiego EXP nie można osiągnąć podczas używania przedmiotu.", + "pt": "Master Level EXP não pode ser alcançado durante o uso do item.", + "ru": "Опыт мастер-уровня не может быть достигнут во время использования предмета.", + "tl": "Ang Master Level EXP ay hindi makakamit sa panahon ng paggamit ng item.", + "uk": "Майстер-рівень EXP не може бути досягнутий під час використання предмета.", + "zh-TW": "使用物品期間無法獲得大師級經驗值。" + }, + "color": "yellow" + } + ], "width": 1, "height": 1, "slot": "ring", @@ -1846,6 +2044,24 @@ "es": "Antiguo Rollo", "pt": "Pergaminho antigo" }, + "description": [ + { + "text": { + "en": "Assemble the Scroll of Blood with the contract from the Illusion Sorcery.", + "de": "Stellen Sie die Schriftrolle des Blutes aus dem Vertrag des Illusionszauberers her.", + "es": "Reúne el Pergamino de sangre con el contrato de Illusion Sorcery.", + "id": "Kumpulkan Gulungan Darah dengan kontrak dari Sihir Ilusi.", + "ja": "幻影教団の誓約と一緒に血の巻物を合成することが出来ます。", + "pl": "Złóż Scroll of Blood za pomocą kontraktu z Czarów Iluzji.", + "pt": "Monte o Pergaminho de Sangue com o contrato da Feitiçaria Ilusão.", + "ru": "Соберите Свиток Крови с помощью контракта Волшебства Иллюзий.", + "tl": "Ipunin ang Scroll of Blood na may kontrata mula sa Illusion Sorcery.", + "uk": "Зберіть Сувій крові за контрактом від Illusion Sorcery.", + "zh-TW": "用幻象魔法的契約組裝血色捲軸。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "repairable": false, @@ -1867,6 +2083,24 @@ "es": "Pacto Ilusión de Hechicero", "pt": "Pacto Feiticeiro da Ilusão" }, + "description": [ + { + "text": { + "en": "Assemble the Scroll of Blood with the old scrolls.", + "de": "Stellen Sie die Schriftrolle des Blutes aus den alten Schriftrollen her.", + "es": "Reúne el Pergamino de Sangre con los pergaminos antiguos.", + "id": "Rakit Gulungan Darah dengan gulungan lama.", + "ja": "古い巻物と一緒に血の巻物を合成することが出来ます。", + "pl": "Złóż Scroll of Blood ze starymi zwojami.", + "pt": "Monte o Pergaminho de Sangue com os pergaminhos antigos.", + "ru": "Соберите Свиток Крови из старых свитков.", + "tl": "Ipunin ang Scroll of Blood gamit ang mga lumang scroll.", + "uk": "Зберіть Сувій крові зі старих сувоїв.", + "zh-TW": "將血液捲軸與舊捲軸組裝起來。" + }, + "color": "blue" + } + ], "width": 1, "height": 2, "repairable": false, @@ -1888,6 +2122,24 @@ "es": "Rollo de Sangre", "pt": "Pergaminho de sangue" }, + "description": [ + { + "text": { + "en": "This is a mark of Illusion Sorcery; this is required to enter the temple.", + "de": "Dies ist das Zeichen von Illusion Sorcery; es wird zum Betreten des Tempels benötigt.", + "es": "Esta es una marca de hechicería de ilusión; esto es necesario para entrar al templo.", + "id": "Ini adalah tanda dari Ilmu Sihir Ilusi; ini diperlukan untuk memasuki kuil.", + "ja": "幻影教団の一員であることを表す証です。テンプル入場に必要です。", + "pl": "To jest znak Czarów Iluzji; jest to wymagane, aby wejść do świątyni.", + "pt": "Esta é uma marca da Feitiçaria da Ilusão; isso é necessário para entrar no templo.", + "ru": "Это знак волшебства иллюзий; это необходимо для входа в храм.", + "tl": "Ito ay isang marka ng Illusion Sorcery; ito ay kinakailangan upang makapasok sa templo.", + "uk": "Це ознака магії ілюзій; це потрібно для входу в храм.", + "zh-TW": "這是幻術的印記;這是進入寺廟所必需的。" + }, + "color": "blue" + } + ], "width": 2, "height": 2, "durability": 1, @@ -1911,6 +2163,23 @@ "pt": "Chama do Condor" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Ingredients for the 3rd wing assembly.", + "de": "Zutaten für die Herstellung der Flügel der 3. Stufe.", + "es": "Ingredientes para el montaje de la 3ª ala.", + "id": "Bahan untuk perakitan sayap ke-3.", + "ja": "3次羽合成のための材料", + "pl": "Składniki na montaż trzeciego skrzydła.", + "pt": "Ingredientes para a montagem da 3ª asa.", + "ru": "Ингредиенты для сборки третьего крыла.", + "tl": "Mga sangkap para sa 3rd wing assembly.", + "uk": "Інгредієнти для складання 3-го крила.", + "zh-TW": "第三機翼組件的材料。" + } + } + ], "width": 1, "height": 2, "classRequirements": { @@ -1932,6 +2201,23 @@ "pt": "Pena do Condor" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "Ingredients for the 3rd wing assembly.", + "de": "Zutaten für die Herstellung der Flügel der 3. Stufe.", + "es": "Ingredientes para el montaje de la 3ª ala.", + "id": "Bahan untuk perakitan sayap ke-3.", + "ja": "3次羽合成のための材料", + "pl": "Składniki na montaż trzeciego skrzydła.", + "pt": "Ingredientes para a montagem da 3ª asa.", + "ru": "Ингредиенты для сборки третьего крыла.", + "tl": "Mga sangkap para sa 3rd wing assembly.", + "uk": "Інгредієнти для складання 3-го крила.", + "zh-TW": "第三機翼組件的材料。" + } + } + ], "width": 1, "height": 2, "classRequirements": { @@ -2088,6 +2374,24 @@ "pt": "Selo da mobilidade" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "You may freely move onward.", + "de": "Sie können sich frei weiterbewegen.", + "es": "Puedes seguir adelante libremente.", + "id": "Anda dapat dengan bebas bergerak maju.", + "ja": "移動が自由にできるようになります。", + "pl": "Możesz swobodnie iść dalej.", + "pt": "Você pode seguir em frente livremente.", + "ru": "Вы можете свободно двигаться дальше.", + "tl": "Maaari kang malayang magpatuloy.", + "uk": "Ви можете вільно рухатися далі.", + "zh-TW": "你可以自由地前進。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -2114,6 +2418,24 @@ "pt": "Indulgência" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "It reduces the killing rate.", + "de": "Verringert die Anzahl der Spielermorde.", + "es": "Reduce la tasa de matanza.", + "id": "Ini mengurangi tingkat pembunuhan.", + "ja": "PK数値の減少効果があります。", + "pl": "Zmniejsza wskaźnik zabijania.", + "pt": "Reduz a taxa de mortalidade.", + "ru": "Это снижает уровень убийств.", + "tl": "Binabawasan nito ang rate ng pagpatay.", + "uk": "Це знижує швидкість вбивства.", + "zh-TW": "它降低了殺滅率。" + }, + "color": "blue" + } + ], "width": 1, "height": 2, "tradable": false, @@ -2140,6 +2462,43 @@ "pt": "Bilhete do Templo da Ilusão" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Enables entrance into Illusion Temple.", + "de": "Ermöglicht den Zugang zu Illusionstempel.", + "es": "Permite la entrada a Templo de la ilusión.", + "id": "Memungkinkan masuk ke Kuil Ilusi.", + "ja": "テンプル 入場時、決まった回数だけ使えます。", + "pl": "Umożliwia wejście do Illusion Temple.", + "pt": "Permite a entrada em Templo da Ilusão.", + "ru": "Позволяет войти в Храм иллюзий.", + "tl": "Pinapagana ang pagpasok sa Templo ng Ilusyon.", + "uk": "Дозволяє вхід у Храм ілюзій.", + "zh-TW": "允許進入 幻像神殿。" + }, + "color": "blue" + }, + { + "text": { + "en": "You will be assigned to a stage according to your level.", + "de": "Sie werden entsprechend Ihrem Level einer Stufe zugeteilt.", + "es": "Se te asignará una etapa según tu nivel.", + "id": "Anda akan ditugaskan ke tahapan sesuai dengan level Anda.", + "ja": "入場できるレベルに合わせて自動的に入場します。", + "pl": "Zostaniesz przydzielony do etapu zgodnie z Twoim poziomem.", + "pt": "Você será designado para uma etapa de acordo com seu nível.", + "ru": "Вам будет назначен этап в соответствии с вашим уровнем.", + "tl": "Itatalaga ka sa isang yugto ayon sa iyong antas.", + "uk": "Ви будете розподілені на етап відповідно до вашого рівня.", + "zh-TW": "您將根據您的等級被分配到一個階段。" + }, + "color": "blue" + }, + { + "text": "" + } + ], "width": 1, "height": 1, "durability": 10, @@ -2219,6 +2578,40 @@ "pt": "Demônio" }, "tags": ["guardianPet", "cashShop", "valuable"], + "description": [ + { + "text": { + "en": "Increases Attack Power and Wizardry by 40%", + "de": "Erhöht Angriffskraft und Zauberei um 40%", + "es": "Aumenta el poder de ataque y la hechicería en un 40%", + "id": "Meningkatkan Kekuatan Serangan dan Sihir sebesar 40%", + "ja": "攻撃力、魔力40%向上", + "pl": "Zwiększa siłę ataku i czary o 40%", + "pt": "Aumenta o poder de ataque e a magia em 40%", + "ru": "Увеличивает силу атаки и волшебство на 40%", + "tl": "Pinapataas ng 40% ang Attack Power at Wizardry", + "uk": "Збільшує силу атаки та магію на 40%", + "zh-TW": "攻擊力和魔法增加40%" + }, + "color": "blue" + }, + { + "text": { + "en": "Increases Attack Speed by 10", + "de": "Erhöht die Angriffsgeschwindigkeit um 10", + "es": "Aumenta la velocidad de ataque en 10", + "id": "Meningkatkan Kecepatan Serangan sebanyak 10", + "ja": "攻撃速度+10増加", + "pl": "Zwiększa prędkość ataku o 10", + "pt": "Aumenta a velocidade de ataque em 10", + "ru": "Увеличивает скорость атаки на 10.", + "tl": "Pinapataas ng 10 ang Bilis ng Pag-atake", + "uk": "Збільшує швидкість атаки на 10", + "zh-TW": "攻擊速度提高 10" + }, + "color": "purple" + } + ], "width": 1, "height": 1, "slot": "pet", @@ -2253,6 +2646,40 @@ "pt": "Espír. Guardião" }, "tags": ["guardianPet", "cashShop", "valuable"], + "description": [ + { + "text": { + "en": "Alleviates monster's damage by 30%", + "de": "Verringert den Schaden durch Monster um 30%", + "es": "Alivia el daño del monstruo en un 30%", + "id": "Mengurangi kerusakan monster sebesar 30%", + "ja": "モンスターからのダメージを30%吸収", + "pl": "Zmniejsza obrażenia potworów o 30%", + "pt": "Alivia o dano do monstro em 30%", + "ru": "Уменьшает урон монстра на 30%", + "tl": "Binabawasan ang pinsala ng halimaw ng 30%", + "uk": "Зменшує шкоду монстра на 30%", + "zh-TW": "減少怪物傷害30%" + }, + "color": "blue" + }, + { + "text": { + "en": "Increases Maximum Life by 50", + "de": "Erhöht das maximale Leben um 50", + "es": "Aumenta la vida máxima en 50", + "id": "Meningkatkan Kehidupan Maksimum sebesar 50", + "ja": "最大生命力+50", + "pl": "Zwiększa maksymalne życie o 50", + "pt": "Aumenta a Vida Máxima em 50", + "ru": "Увеличивает максимальное количество жизни на 50.", + "tl": "Pinapataas ng 50 ang Pinakamataas na Buhay", + "uk": "Збільшує максимальне життя на 50", + "zh-TW": "最大生命增加 50" + }, + "color": "purple" + } + ], "width": 1, "height": 1, "slot": "pet", @@ -2308,6 +2735,24 @@ "es": "Mascota Rudolf", "pt": "Animal de estimação Rodolfo" }, + "description": [ + { + "text": { + "en": "Surrounding Zens are automatically collected.", + "de": "Zen in der Umgebung wird automatisch eingesammelt.", + "es": "Los Zen circundantes se recopilan automáticamente.", + "id": "Zen di sekitarnya dikumpulkan secara otomatis.", + "ja": "周辺のゼンを自動的に拾得します。", + "pl": "Otaczające Zens są zbierane automatycznie.", + "pt": "Os Zens circundantes são coletados automaticamente.", + "ru": "Окружающие дзены собираются автоматически.", + "tl": "Ang mga nakapalibot na Zen ay awtomatikong kinokolekta.", + "uk": "Навколишні дзени збираються автоматично.", + "zh-TW": "周圍的禪宗會自動收集。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "slot": "pet", @@ -2392,6 +2837,24 @@ "pt": "Talismã da mobilidade" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Save the application location.", + "de": "Speichert den Ort der Anwendung.", + "es": "Guarde la ubicación de la aplicación.", + "id": "Simpan lokasi aplikasi.", + "ja": "該当の場所を記憶することができます。", + "pl": "Zapisz lokalizację aplikacji.", + "pt": "Salve o local do aplicativo.", + "ru": "Сохраните местоположение приложения.", + "tl": "I-save ang lokasyon ng application.", + "uk": "Збережіть розташування програми.", + "zh-TW": "儲存應用程式位置。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "durability": 2, @@ -2573,6 +3036,56 @@ "pt": "Animal de estimação Panda" }, "tags": ["pandaOrSkeleton", "valuable"], + "description": [ + { + "text": { + "en": "Auto-collects zen around you.", + "de": "Sammelt automatisch Zen in Ihrer Umgebung.", + "es": "Recoge automáticamente el zen a tu alrededor.", + "id": "Mengumpulkan zen secara otomatis di sekitar Anda.", + "ja": "周りのゼンを自動的に拾得してくれます。", + "pl": "Automatycznie zbiera zen wokół ciebie.", + "pt": "Coleta automaticamente o zen ao seu redor.", + "ru": "Автоматически собирает дзен вокруг себя.", + "tl": "Auto-collect ng zen sa paligid mo.", + "uk": "Автоматично збирає дзен навколо вас.", + "zh-TW": "自動收集你周圍的禪宗。" + }, + "color": "blue" + }, + { + "text": { + "en": "EXP rate 50% increase", + "de": "Erfahrungsrate +50%", + "es": "Tasa de EXP 50% iaumentar", + "id": "Tingkat EXP 50% imeningkat", + "ja": "経験値50%向上", + "pl": "Stawka EXP 50% iwzrost", + "pt": "Taxa de EXP 50% inaumento", + "ru": "Скорость опыта 50% increase", + "tl": "EXP rate 50% inadagdagan", + "uk": "Швидкість досвіду збільшується на 50% in", + "zh-TW": "EXP率50% i增加" + }, + "color": "blue" + }, + { + "text": { + "en": "Increase Defensive Skill +50", + "de": "Verteidigung +50", + "es": "Aumentar la habilidad defensiva +50", + "id": "Tingkatkan Keterampilan Pertahanan +50", + "ja": "防御力+50", + "pl": "Zwiększa umiejętność obrony +50", + "pt": "Aumente a habilidade defensiva +50", + "ru": "Увеличение навыка защиты +50", + "tl": "Dagdagan ang Defensive Skill +50", + "uk": "Підвищення навичок захисту +50", + "zh-TW": "防禦技能增加+50" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "slot": "pet", @@ -2607,6 +3120,56 @@ "pt": "Talismã do Guardião" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Exp and item will be secured when character dies.", + "de": "Erfahrung und Gegenstände bleiben beim Tod des Charakters erhalten.", + "es": "La experiencia y el artículo se asegurarán cuando el personaje muera.", + "id": "Exp dan item akan diamankan ketika karakter mati.", + "ja": "キャラクター死亡時経験値及びアイテムが維持されます。", + "pl": "Exp i przedmiot zostaną zabezpieczone, gdy postać umrze.", + "pt": "Exp e item serão garantidos quando o personagem morrer.", + "ru": "Опыт и предмет будут сохранены после смерти персонажа.", + "tl": "Mase-secure ang exp at item kapag namatay ang character.", + "uk": "Досвід і предмет будуть захищені, коли персонаж помре.", + "zh-TW": "當角色死亡時,經驗值和物品將受到保護。" + }, + "color": "blue" + }, + { + "text": { + "en": "No penalty for dying.", + "de": "Keine Strafe beim Tod.", + "es": "No hay pena por morir.", + "id": "Tidak ada penalti untuk kematian.", + "ja": "死亡の時ペナルティーがつきません。", + "pl": "Nie ma kary za śmierć.", + "pt": "Nenhuma penalidade por morrer.", + "ru": "Никакого наказания за смерть.", + "tl": "Walang parusa sa pagkamatay.", + "uk": "Жодного покарання за смерть.", + "zh-TW": "死亡沒有懲罰。" + }, + "color": "blue" + }, + { + "text": { + "en": "Right click to use.", + "de": "Zum Verwenden rechtsklicken.", + "es": "Haga clic derecho para usar.", + "id": "Klik kanan untuk menggunakan.", + "ja": "右クリックで使用します。", + "pl": "Kliknij prawym przyciskiem myszy, aby użyć.", + "pt": "Clique com o botão direito para usar.", + "ru": "Щелкните правой кнопкой мыши, чтобы использовать.", + "tl": "I-right click para gamitin.", + "uk": "Клацніть правою кнопкою миші, щоб використати.", + "zh-TW": "右鍵點擊即可使用。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -2633,6 +3196,56 @@ "pt": "Talismã de Proteção de Item" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Item durability will not be decrease for a certain period.", + "de": "Die Haltbarkeit von Gegenständen sinkt für einen bestimmten Zeitraum nicht.", + "es": "La durabilidad del artículo no disminuirá durante un período determinado.", + "id": "Daya tahan item tidak akan berkurang selama jangka waktu tertentu.", + "ja": "アイテムの耐久度が一定期間落ちません。", + "pl": "Trwałość przedmiotu nie ulegnie zmniejszeniu przez pewien okres.", + "pt": "A durabilidade do item não diminuirá por um determinado período.", + "ru": "Прочность предмета не будет уменьшаться в течение определенного периода.", + "tl": "Ang tibay ng item ay hindi bababa sa isang tiyak na panahon.", + "uk": "Стійкість предмета не буде знижуватися протягом певного періоду.", + "zh-TW": "物品耐久度在一定時間內不會減少。" + }, + "color": "blue" + }, + { + "text": { + "en": "Keeps item durable", + "de": "Erhält die Haltbarkeit von Gegenständen", + "es": "Mantiene el artículo duradero", + "id": "Menjaga barang tetap tahan lama", + "ja": "アイテム耐久度維持", + "pl": "Utrzymuje trwałość przedmiotu", + "pt": "Mantém o item durável", + "ru": "Сохраняет вещь прочной", + "tl": "Pinapanatiling matibay ang item", + "uk": "Зберігає предмет міцним", + "zh-TW": "保持物品耐用" + }, + "color": "blue" + }, + { + "text": { + "en": "Applicable to mountable items only besides pet.", + "de": "Gilt nur für Reittiere, nicht für Haustiere.", + "es": "Aplicable solo a artículos montables además de mascotas.", + "id": "Hanya berlaku untuk item yang dapat dipasang selain hewan peliharaan.", + "ja": "ペットを除いた装着型アイテムにのみ適用されます。", + "pl": "Dotyczy wyłącznie przedmiotów, które można zamontować, z wyjątkiem zwierząt domowych.", + "pt": "Aplicável apenas a itens montáveis ​​além de animais de estimação.", + "ru": "Применимо только к монтируемым предметам, кроме питомца.", + "tl": "Naaangkop sa mga naka-mount na item lamang bukod sa alagang hayop.", + "uk": "Застосовується лише для встановлюваних елементів, крім домашніх тварин.", + "zh-TW": "僅適用於寵物以外的可安裝物品。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -2889,6 +3502,40 @@ "pt": "Selo Mestre da Ascensão" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Increases experience gained.", + "de": "Erhöht die erhaltene Erfahrung.", + "es": "Aumenta la experiencia adquirida.", + "id": "Meningkatkan pengalaman yang diperoleh.", + "ja": "経験値獲得量が増加する効果があります。", + "pl": "Zwiększa zdobywane doświadczenie.", + "pt": "Aumenta a experiência adquirida.", + "ru": "Увеличивает получаемый опыт.", + "tl": "Nagpapataas ng karanasang natamo.", + "uk": "Збільшує отриманий досвід.", + "zh-TW": "增加獲得的經驗。" + }, + "color": "blue" + }, + { + "text": { + "en": "Warp Command Window available.", + "de": "Warp-Befehlsfenster verfügbar.", + "es": "Ventana de comando Warp disponible.", + "id": "Jendela Perintah Warp tersedia.", + "ja": "マップ移動ウィンドウが使えます。", + "pl": "Dostępne okno poleceń Warp.", + "pt": "Janela de comando Warp disponível.", + "ru": "Доступно окно управления варпом.", + "tl": "Available ang Warp Command Window.", + "uk": "Доступне вікно команд Warp.", + "zh-TW": "扭曲命令視窗可用。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -2916,6 +3563,40 @@ "pt": "Selo Mestre da Riqueza" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Increases experience gained and item drop rate.", + "de": "Erhöht die erhaltene Erfahrung und die Droprate von Gegenständen.", + "es": "Aumenta la experiencia obtenida y la tasa de caída de elementos.", + "id": "Meningkatkan pengalaman yang diperoleh dan tingkat penurunan item.", + "ja": "経験値とアイテム獲得量が増加する効果があります。", + "pl": "Zwiększa zdobywane doświadczenie i częstotliwość wypadania przedmiotów.", + "pt": "Aumenta a experiência adquirida e a taxa de queda de itens.", + "ru": "Увеличивает получаемый опыт и шанс выпадения предметов.", + "tl": "Pinapataas ang karanasang natamo at rate ng pagbaba ng item.", + "uk": "Збільшує отриманий досвід і швидкість випадання предметів.", + "zh-TW": "增加獲得的經驗值和物品掉落率。" + }, + "color": "blue" + }, + { + "text": { + "en": "Warp Command Window available.", + "de": "Warp-Befehlsfenster verfügbar.", + "es": "Ventana de comando Warp disponible.", + "id": "Jendela Perintah Warp tersedia.", + "ja": "マップ移動ウィンドウが使えます。", + "pl": "Dostępne okno poleceń Warp.", + "pt": "Janela de comando Warp disponível.", + "ru": "Доступно окно управления варпом.", + "tl": "Available ang Warp Command Window.", + "uk": "Доступне вікно команд Warp.", + "zh-TW": "扭曲命令視窗可用。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -3021,6 +3702,24 @@ "pt": "Pergaminho de EXP de grupo" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Up to 170% EXP gain increase, depending on the number of members in your party.", + "de": "Bis zu 170% mehr Erfahrung, abhängig von der Anzahl der Mitglieder in Ihrer Party.", + "es": "Aumento de ganancia de hasta 170% EXP, dependiendo del número de miembros de tu grupo.", + "id": "Peningkatan perolehan hingga 170% EXP, tergantung pada jumlah anggota di party Anda.", + "ja": "経験値190%に増加、パーティー1人毎に+10%増加", + "pl": "Zwiększenie zysku aż do 170% EXP, w zależności od liczby członków w Twojej grupie.", + "pt": "Aumento de ganho de até 170% EXP, dependendo do número de membros do seu grupo.", + "ru": "Увеличение получаемого урона до 170% EXP, в зависимости от количества членов вашей группы.", + "tl": "Hanggang 170% EXP ang pagtaas ng kita, depende sa bilang ng mga miyembro sa iyong partido.", + "uk": "Збільшення приросту до 170% EXP, залежно від кількості учасників у вашій групі.", + "zh-TW": "增益增加最多 170% EXP,取決於隊伍中的成員數量。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -3047,6 +3746,24 @@ "pt": "Aura de aumento de AG máx" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Increase Max. AG + Level", + "de": "Erhöht max. AG + Level", + "es": "Aumentar máx. Nivel AG +", + "id": "Tingkatkan Maks. AG + Tingkat", + "ja": "最大AG増加 + レベル", + "pl": "Zwiększ maks. AG + poziom", + "pt": "Aumentar Máx. AG + Nível", + "ru": "Увеличить Макс. АГ + Уровень", + "tl": "Dagdagan ang Max. AG + Level", + "uk": "Збільшити Макс. AG + рівень", + "zh-TW": "增加最大。 AG+等級" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -3073,6 +3790,24 @@ "pt": "Aura de aumento de SD máx" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Increase Max. SD + Levelx10", + "de": "Erhöht max. SD + Level x10", + "es": "Aumentar máx. SD + Nivelx10", + "id": "Tingkatkan Maks. SD+Levelx10", + "ja": "最大SD増加 + レベルx10", + "pl": "Zwiększ maks. SD + Poziomx10", + "pt": "Aumentar Máx. SD + Nívelx10", + "ru": "Увеличить Макс. СД + Уровеньx10", + "tl": "Dagdagan ang Max. SD + Levelx10", + "uk": "Збільшити Макс. SD + Рівеньx10", + "zh-TW": "增加最大。 SD + 等級x10" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -3099,6 +3834,56 @@ "pt": "Unic. Est." }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Auto-collects zen around you.", + "de": "Sammelt automatisch Zen in Ihrer Umgebung.", + "es": "Recoge automáticamente el zen a tu alrededor.", + "id": "Mengumpulkan zen secara otomatis di sekitar Anda.", + "ja": "周りのゼンを自動的に拾得してくれます。", + "pl": "Automatycznie zbiera zen wokół ciebie.", + "pt": "Coleta automaticamente o zen ao seu redor.", + "ru": "Автоматически собирает дзен вокруг себя.", + "tl": "Auto-collect ng zen sa paligid mo.", + "uk": "Автоматично збирає дзен навколо вас.", + "zh-TW": "自動收集你周圍的禪宗。" + }, + "color": "blue" + }, + { + "text": { + "en": "Zen increase 50%", + "de": "Zen +50%", + "es": "Aumento del zen 50%", + "id": "Zen meningkat 50%", + "ja": "ゼン増加50%に向上", + "pl": "Wzrost Zen 50%", + "pt": "Aumento Zen 50%", + "ru": "Дзен увеличение 50%", + "tl": "50% ang pagtaas ng Zen", + "uk": "Дзен збільшення 50%", + "zh-TW": "禪宗增加50%" + }, + "color": "blue" + }, + { + "text": { + "en": "Increase Defensive Skill +50", + "de": "Verteidigung +50", + "es": "Aumentar la habilidad defensiva +50", + "id": "Tingkatkan Keterampilan Pertahanan +50", + "ja": "防御力+50", + "pl": "Zwiększa umiejętność obrony +50", + "pt": "Aumente a habilidade defensiva +50", + "ru": "Увеличение навыка защиты +50", + "tl": "Dagdagan ang Defensive Skill +50", + "uk": "Підвищення навичок захисту +50", + "zh-TW": "防禦技能增加+50" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "slot": "pet", @@ -3133,6 +3918,24 @@ "pt": "Anel do Mago Letal" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Cannot Repair", + "de": "Kann nicht repariert werden", + "es": "No se puede reparar", + "id": "Tidak Dapat Memperbaiki", + "ja": "修理不可能", + "pl": "Nie można naprawić", + "pt": "Não é possível reparar", + "ru": "Невозможно восстановить", + "tl": "Hindi Maaayos", + "uk": "Неможливо відремонтувати", + "zh-TW": "無法修復" + }, + "color": "red" + } + ], "width": 1, "height": 1, "slot": "ring", @@ -3162,6 +3965,38 @@ "pt": "Anel de safira" }, "tags": ["cashShop", "gemJewelry", "valuable"], + "description": [ + { + "text": { + "en": "Automatic HP recovery 3%", + "de": "Automatische HP-Wiederherstellung 3%", + "es": "Recuperación automática de HP 3%", + "id": "Pemulihan HP otomatis 3%", + "ja": "オートヒーリング 3%", + "pl": "Automatyczne odzyskiwanie HP 3%", + "pt": "Recuperação automática de HP 3%", + "ru": "Автоматическое восстановление HP 3%", + "tl": "Awtomatikong pagbawi ng HP 3%", + "uk": "Автоматичне відновлення HP 3%", + "zh-TW": "HP自動恢復 3%" + } + }, + { + "text": { + "en": "Increases Max Mana 4%", + "de": "Erhöht max. Mana um 4%", + "es": "Aumenta el maná máximo un 4%", + "id": "Meningkatkan Mana Maks 4%", + "ja": "最大マナ増加4%", + "pl": "Zwiększa maksymalną manę 4%", + "pt": "Aumenta a Mana Máxima em 4%", + "ru": "Увеличивает максимальное количество маны на 4%", + "tl": "Tumataas ng Max Mana 4%", + "uk": "Збільшує максимальну ману на 4%", + "zh-TW": "最大法力增加 4%" + } + } + ], "width": 1, "height": 1, "slot": "ring", @@ -3190,6 +4025,38 @@ "pt": "Anel de rubi" }, "tags": ["cashShop", "gemJewelry", "valuable"], + "description": [ + { + "text": { + "en": "Automatic HP recovery 3%", + "de": "Automatische HP-Wiederherstellung 3%", + "es": "Recuperación automática de HP 3%", + "id": "Pemulihan HP otomatis 3%", + "ja": "オートヒーリング 3%", + "pl": "Automatyczne odzyskiwanie HP 3%", + "pt": "Recuperação automática de HP 3%", + "ru": "Автоматическое восстановление HP 3%", + "tl": "Awtomatikong pagbawi ng HP 3%", + "uk": "Автоматичне відновлення HP 3%", + "zh-TW": "HP自動恢復 3%" + } + }, + { + "text": { + "en": "Increase Max HP +4%", + "de": "Erhöht max. HP +4%", + "es": "Incrementar HP máximo +4%", + "id": "Meningkatkan HP Maks +4%", + "ja": "最大生命力増加 +4%", + "pl": "Zwiększ maksymalne HP +4%", + "pt": "Aumenta HP máximo +4%", + "ru": "Увеличение максимального запаса здоровья +4%", + "tl": "Taasan ang Max HP +4%", + "uk": "Збільшити макс. HP +4%", + "zh-TW": "最大生命值增加+4%" + } + } + ], "width": 1, "height": 1, "slot": "ring", @@ -3218,6 +4085,38 @@ "pt": "Anel de topázio" }, "tags": ["cashShop", "gemJewelry", "valuable"], + "description": [ + { + "text": { + "en": "Automatic HP recovery 3%", + "de": "Automatische HP-Wiederherstellung 3%", + "es": "Recuperación automática de HP 3%", + "id": "Pemulihan HP otomatis 3%", + "ja": "オートヒーリング 3%", + "pl": "Automatyczne odzyskiwanie HP 3%", + "pt": "Recuperação automática de HP 3%", + "ru": "Автоматическое восстановление HP 3%", + "tl": "Awtomatikong pagbawi ng HP 3%", + "uk": "Автоматичне відновлення HP 3%", + "zh-TW": "HP自動恢復 3%" + } + }, + { + "text": { + "en": "Increases acquisition rate of Zen after hunting monsters +30%", + "de": "Erhöht den Zen-Ertrag beim Jagen von Monstern +30%", + "es": "Aumenta la tasa de adquisición de Zen después de cazar monstruos +30%", + "id": "Meningkatkan tingkat perolehan Zen setelah berburu monster +30%", + "ja": "獲得ゼンの増加 +30%", + "pl": "Zwiększa szybkość zdobywania Zen po polowaniu na potwory +30%", + "pt": "Aumenta a taxa de aquisição de Zen após caçar monstros +30%", + "ru": "Увеличивает скорость получения Дзен после охоты на монстров +30%", + "tl": "Pinapataas ang rate ng pagkuha ng Zen pagkatapos ng pangangaso ng mga halimaw +30%", + "uk": "Збільшує швидкість отримання Дзен після полювання на монстрів +30%", + "zh-TW": "狩獵怪物後禪的獲得率增加+30%" + } + } + ], "width": 1, "height": 1, "slot": "ring", @@ -3246,6 +4145,38 @@ "pt": "Anel de ametista" }, "tags": ["cashShop", "gemJewelry", "valuable"], + "description": [ + { + "text": { + "en": "Automatic HP recovery 3%", + "de": "Automatische HP-Wiederherstellung 3%", + "es": "Recuperación automática de HP 3%", + "id": "Pemulihan HP otomatis 3%", + "ja": "オートヒーリング 3%", + "pl": "Automatyczne odzyskiwanie HP 3%", + "pt": "Recuperação automática de HP 3%", + "ru": "Автоматическое восстановление HP 3%", + "tl": "Awtomatikong pagbawi ng HP 3%", + "uk": "Автоматичне відновлення HP 3%", + "zh-TW": "HP自動恢復 3%" + } + }, + { + "text": { + "en": "Damage Decrease +4%", + "de": "Schadensreduzierung +4%", + "es": "Disminución de daño +4%", + "id": "Penurunan Kerusakan +4%", + "ja": "ダメージ減少 +4%", + "pl": "Zmniejszenie obrażeń +4%", + "pt": "Redução de dano +4%", + "ru": "Уменьшение урона +4%", + "tl": "Pagbawas ng Pinsala +4%", + "uk": "Зменшення шкоди +4%", + "zh-TW": "傷害減少 +4%" + } + } + ], "width": 1, "height": 1, "slot": "ring", @@ -3274,6 +4205,38 @@ "pt": "Colar de rubi" }, "tags": ["cashShop", "gemJewelry", "valuable"], + "description": [ + { + "text": { + "en": "Automatic HP recovery 3%", + "de": "Automatische HP-Wiederherstellung 3%", + "es": "Recuperación automática de HP 3%", + "id": "Pemulihan HP otomatis 3%", + "ja": "オートヒーリング 3%", + "pl": "Automatyczne odzyskiwanie HP 3%", + "pt": "Recuperação automática de HP 3%", + "ru": "Автоматическое восстановление HP 3%", + "tl": "Awtomatikong pagbawi ng HP 3%", + "uk": "Автоматичне відновлення HP 3%", + "zh-TW": "HP自動恢復 3%" + } + }, + { + "text": { + "en": "Excellent Damage rate +10%", + "de": "Exzellente Schadensrate +10%", + "es": "Excelente tasa de daño +10%", + "id": "Tingkat Kerusakan Luar Biasa +10%", + "ja": "エクセレントダメージ確率 +10%", + "pl": "Doskonały współczynnik obrażeń +10%", + "pt": "Excelente taxa de dano +10%", + "ru": "Отличный урон +10%", + "tl": "Napakahusay na Damage rate +10%", + "uk": "Відмінний рівень шкоди +10%", + "zh-TW": "優 破損率+10%" + } + } + ], "width": 1, "height": 1, "slot": "pendant", @@ -3302,6 +4265,38 @@ "pt": "Colar de esmeralda" }, "tags": ["cashShop", "gemJewelry", "valuable"], + "description": [ + { + "text": { + "en": "Automatic HP recovery 3%", + "de": "Automatische HP-Wiederherstellung 3%", + "es": "Recuperación automática de HP 3%", + "id": "Pemulihan HP otomatis 3%", + "ja": "オートヒーリング 3%", + "pl": "Automatyczne odzyskiwanie HP 3%", + "pt": "Recuperação automática de HP 3%", + "ru": "Автоматическое восстановление HP 3%", + "tl": "Awtomatikong pagbawi ng HP 3%", + "uk": "Автоматичне відновлення HP 3%", + "zh-TW": "HP自動恢復 3%" + } + }, + { + "text": { + "en": "Attack Speed increase +7", + "de": "Angriffsgeschwindigkeit +7", + "es": "Aumento de velocidad de ataque +7", + "id": "Kecepatan Serangan meningkat +7", + "ja": "攻撃速度上昇 +7", + "pl": "Zwiększenie prędkości ataku +7", + "pt": "Aumento de velocidade de ataque +7", + "ru": "Увеличение скорости атаки +7", + "tl": "Tumaas ang Bilis ng Pag-atake +7", + "uk": "Збільшення швидкості атаки +7", + "zh-TW": "攻擊速度增加+7" + } + } + ], "width": 1, "height": 1, "slot": "pendant", @@ -3330,6 +4325,38 @@ "pt": "Colar de safira" }, "tags": ["cashShop", "gemJewelry", "valuable"], + "description": [ + { + "text": { + "en": "Automatic HP recovery 3%", + "de": "Automatische HP-Wiederherstellung 3%", + "es": "Recuperación automática de HP 3%", + "id": "Pemulihan HP otomatis 3%", + "ja": "オートヒーリング 3%", + "pl": "Automatyczne odzyskiwanie HP 3%", + "pt": "Recuperação automática de HP 3%", + "ru": "Автоматическое восстановление HP 3%", + "tl": "Awtomatikong pagbawi ng HP 3%", + "uk": "Автоматичне відновлення HP 3%", + "zh-TW": "HP自動恢復 3%" + } + }, + { + "text": { + "en": "Increases acquisition rate of Mana after hunting monsters +Mana/8", + "de": "Erhöht die Manaregeneration beim Jagen von Monstern +Mana/8", + "es": "Aumenta la tasa de adquisición de Mana después de cazar monstruos +Mana/8", + "id": "Meningkatkan tingkat perolehan Mana setelah berburu monster +Mana/8", + "ja": "獲得するマナ増加 +マナ/8", + "pl": "Zwiększa szybkość zdobywania many po polowaniu na potwory +Mana/8", + "pt": "Aumenta a taxa de aquisição de Mana após caçar monstros +Mana/8", + "ru": "Увеличивает скорость получения маны после охоты на монстров +Мана/8.", + "tl": "Pinapataas ang rate ng pagkuha ng Mana pagkatapos manghuli ng mga halimaw +Mana/8", + "uk": "Збільшує швидкість отримання мани після полювання на монстрів +Мана/8", + "zh-TW": "狩獵怪物後魔力獲取率增加+魔力/8" + } + } + ], "width": 1, "height": 1, "slot": "pendant", @@ -3358,6 +4385,24 @@ "pt": "Selo da riqueza" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Boosts the item drop rate.", + "de": "Erhöht die Gegenstands-Droprate.", + "es": "Aumenta la tasa de caída de artículos.", + "id": "Meningkatkan tingkat penurunan item.", + "ja": "アイテム獲得量を上昇させる効果があります。", + "pl": "Zwiększa częstotliwość wypadania przedmiotów.", + "pt": "Aumenta a taxa de queda de itens.", + "ru": "Увеличивает шанс выпадения предметов.", + "tl": "Pinapalakas ang rate ng pagbagsak ng item.", + "uk": "Збільшує швидкість випадання предметів.", + "zh-TW": "提高物品掉落率。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "slot": "ring", @@ -3526,6 +4571,72 @@ "pt": "Mascote esqueleto" }, "tags": ["pandaOrSkeleton", "valuable"], + "description": [ + { + "text": { + "en": "Surrounding Zens are automatically collected.", + "de": "Zen in der Umgebung wird automatisch eingesammelt.", + "es": "Los Zen circundantes se recopilan automáticamente.", + "id": "Zen di sekitarnya dikumpulkan secara otomatis.", + "ja": "周辺のゼンを自動的に拾得します。", + "pl": "Otaczające Zens są zbierane automatycznie.", + "pt": "Os Zens circundantes são coletados automaticamente.", + "ru": "Окружающие дзены собираются автоматически.", + "tl": "Ang mga nakapalibot na Zen ay awtomatikong kinokolekta.", + "uk": "Навколишні дзени збираються автоматично.", + "zh-TW": "周圍的禪宗會自動收集。" + }, + "color": "blue" + }, + { + "text": { + "en": "increases Damage, Wizardry and Curse by 20%", + "de": "erhöht er Schaden, Zauberei und Fluch um 20%", + "es": "aumenta el daño, la hechicería y la maldición en un 20%", + "id": "meningkatkan Kerusakan, Sihir, dan Kutukan sebesar 20%", + "ja": "攻撃力、魔力、呪い 20%上昇", + "pl": "zwiększa obrażenia, czary i klątwę o 20%", + "pt": "aumenta Dano, Magia e Maldição em 20%", + "ru": "увеличивает урон, волшебство и проклятие на 20%", + "tl": "pinapataas ng 20% ang Damage, Wizardry at Curse", + "uk": "збільшує шкоду, магію та прокляття на 20%", + "zh-TW": "傷害、魔法和詛咒增加 20%" + }, + "color": "blue" + }, + { + "text": { + "en": "Increases Attack Speed by 10", + "de": "Erhöht die Angriffsgeschwindigkeit um 10", + "es": "Aumenta la velocidad de ataque en 10", + "id": "Meningkatkan Kecepatan Serangan sebanyak 10", + "ja": "攻撃速度+10増加", + "pl": "Zwiększa prędkość ataku o 10", + "pt": "Aumenta a velocidade de ataque em 10", + "ru": "Увеличивает скорость атаки на 10.", + "tl": "Pinapataas ng 10 ang Bilis ng Pag-atake", + "uk": "Збільшує швидкість атаки на 10", + "zh-TW": "攻擊速度提高 10" + }, + "color": "blue" + }, + { + "text": { + "en": "and EXP by 30%.", + "de": "und die Erfahrung um 30%.", + "es": "y EXP en un 30%.", + "id": "dan EXP sebesar 30%.", + "ja": "経験値 30% 上昇", + "pl": "i EXP o 30%.", + "pt": "e EXP em 30%.", + "ru": "и EXP на 30%.", + "tl": "at EXP ng 30%.", + "uk": "і EXP на 30%.", + "zh-TW": "經驗值增加 30%。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "slot": "pet", diff --git a/src/bin/Data/Items/Group14_Potion.json b/src/bin/Data/Items/Group14_Potion.json index 657a5564ed..5e03cbb5e5 100644 --- a/src/bin/Data/Items/Group14_Potion.json +++ b/src/bin/Data/Items/Group14_Potion.json @@ -491,6 +491,38 @@ "es": "Invitación del Diablo", "pt": "Convite do diabo" }, + "description": [ + { + "text": { + "en": "The remaining time is shown", + "de": "Die verbleibende Zeit wird angezeigt", + "es": "Se muestra el tiempo restante", + "id": "Waktu yang tersisa ditampilkan", + "ja": "マウスボタンを右クリックすれば", + "pl": "Wyświetlany jest pozostały czas", + "pt": "O tempo restante é mostrado", + "ru": "Оставшееся время показано", + "tl": "Ang natitirang oras ay ipinapakita", + "uk": "Показано час, що залишився", + "zh-TW": "顯示剩餘時間" + } + }, + { + "text": { + "en": "when you right click on your mouse.", + "de": "wenn Sie mit der rechten Maustaste klicken.", + "es": "cuando haces clic derecho en tu mouse.", + "id": "ketika Anda mengklik kanan pada mouse Anda.", + "ja": "残った時間を見ることができます。", + "pl": "po kliknięciu prawym przyciskiem myszy.", + "pt": "quando você clica com o botão direito do mouse.", + "ru": "когда вы щелкаете правой кнопкой мыши.", + "tl": "kapag nag-right click ka sa iyong mouse.", + "uk": "коли ви клацаєте правою кнопкою миші.", + "zh-TW": "當您右鍵單擊滑鼠時。" + } + } + ], "width": 1, "height": 1, "repairable": false @@ -1090,6 +1122,24 @@ "pt": "Talismã da sorte" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Increases the combination rate,but only up to the maximum rate.", + "de": "Erhöht die Kombinationsrate, jedoch nur bis zur Maximalrate.", + "es": "Aumenta la tasa de combinación, pero solo hasta la tasa máxima.", + "id": "Meningkatkan laju kombinasi, namun hanya hingga laju maksimum.", + "ja": "合成成功確率が高くなり、一定の数値以上は高くなりません。", + "pl": "Zwiększa współczynnik kombinacji, ale tylko do maksymalnego współczynnika.", + "pt": "Aumenta a taxa de combinação, mas apenas até a taxa máxima.", + "ru": "Увеличивает коэффициент комбинации, но только до максимального коэффициента.", + "tl": "Pinapataas ang rate ng kumbinasyon, ngunit hanggang sa maximum na rate lamang.", + "uk": "Збільшує швидкість комбінації, але лише до максимальної швидкості.", + "zh-TW": "增加組合速率,但僅達最大速率。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -1107,6 +1157,24 @@ "pt": "Cartão do caos" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "You can achieve special items with combinations.", + "de": "Durch Kombinationen können Sie besondere Gegenstände erhalten.", + "es": "Puedes conseguir objetos especiales con combinaciones.", + "id": "Anda dapat memperoleh item khusus dengan kombinasi.", + "ja": "パンドラ合成でアイテムを獲得", + "pl": "Dzięki kombinacjom możesz zdobyć specjalne przedmioty.", + "pt": "Você pode conseguir itens especiais com combinações.", + "ru": "Вы можете получить особые предметы с помощью комбинаций.", + "tl": "Makakamit mo ang mga espesyal na item na may mga kumbinasyon.", + "uk": "Ви можете отримати спеціальні предмети за допомогою комбінацій.", + "zh-TW": "您可以透過組合獲得特殊物品。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -1160,6 +1228,24 @@ "pt": "Bilhete de item raro1" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Congratulations. Please contact CS team and change it to item.", + "de": "Herzlichen Glückwunsch. Bitte wenden Sie sich an den Kundendienst, um ihn in einen Gegenstand umzuwandeln.", + "es": "Felicidades. Comuníquese con el equipo de CS y cámbielo a elemento.", + "id": "Selamat. Silakan menghubungi tim CS dan mengubahnya menjadi item.", + "ja": "おめでとうございます。運営チームに連絡すると、当選アイテムと交換できます。", + "pl": "Gratulacje. Skontaktuj się z zespołem CS i zmień go na przedmiot.", + "pt": "Parabéns. Entre em contato com a equipe CS e altere para item.", + "ru": "Поздравляю. Пожалуйста, свяжитесь с командой CS и измените его на элемент.", + "tl": "Binabati kita. Mangyaring makipag-ugnayan sa CS team at palitan ito ng item.", + "uk": "Вітаю. Будь ласка, зв’яжіться з командою CS і змініть його на елемент.", + "zh-TW": "恭喜。請聯絡CS團隊並將其變更為專案。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -1177,6 +1263,24 @@ "pt": "Bilhete de item raro2" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Congratulations. Please contact CS team and change it to item.", + "de": "Herzlichen Glückwunsch. Bitte wenden Sie sich an den Kundendienst, um ihn in einen Gegenstand umzuwandeln.", + "es": "Felicidades. Comuníquese con el equipo de CS y cámbielo a elemento.", + "id": "Selamat. Silakan menghubungi tim CS dan mengubahnya menjadi item.", + "ja": "おめでとうございます。運営チームに連絡すると、当選アイテムと交換できます。", + "pl": "Gratulacje. Skontaktuj się z zespołem CS i zmień go na przedmiot.", + "pt": "Parabéns. Entre em contato com a equipe CS e altere para item.", + "ru": "Поздравляю. Пожалуйста, свяжитесь с командой CS и измените его на элемент.", + "tl": "Binabati kita. Mangyaring makipag-ugnayan sa CS team at palitan ito ng item.", + "uk": "Вітаю. Будь ласка, зв’яжіться з командою CS і змініть його на елемент.", + "zh-TW": "恭喜。請聯絡CS團隊並將其變更為專案。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -1194,6 +1298,24 @@ "pt": "Bilhete de item raro3" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Congratulations. Please contact CS team and change it to item.", + "de": "Herzlichen Glückwunsch. Bitte wenden Sie sich an den Kundendienst, um ihn in einen Gegenstand umzuwandeln.", + "es": "Felicidades. Comuníquese con el equipo de CS y cámbielo a elemento.", + "id": "Selamat. Silakan menghubungi tim CS dan mengubahnya menjadi item.", + "ja": "おめでとうございます。運営チームに連絡すると、当選アイテムと交換できます。", + "pl": "Gratulacje. Skontaktuj się z zespołem CS i zmień go na przedmiot.", + "pt": "Parabéns. Entre em contato com a equipe CS e altere para item.", + "ru": "Поздравляю. Пожалуйста, свяжитесь с командой CS и измените его на элемент.", + "tl": "Binabati kita. Mangyaring makipag-ugnayan sa CS team at palitan ito ng item.", + "uk": "Вітаю. Будь ласка, зв’яжіться з командою CS і змініть його на елемент.", + "zh-TW": "恭喜。請聯絡CS團隊並將其變更為專案。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -1211,6 +1333,24 @@ "pt": "Bilhete de item raro4" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Congratulations. Please contact CS team and change it to item.", + "de": "Herzlichen Glückwunsch. Bitte wenden Sie sich an den Kundendienst, um ihn in einen Gegenstand umzuwandeln.", + "es": "Felicidades. Comuníquese con el equipo de CS y cámbielo a elemento.", + "id": "Selamat. Silakan menghubungi tim CS dan mengubahnya menjadi item.", + "ja": "おめでとうございます。運営チームに連絡すると、当選アイテムと交換できます。", + "pl": "Gratulacje. Skontaktuj się z zespołem CS i zmień go na przedmiot.", + "pt": "Parabéns. Entre em contato com a equipe CS e altere para item.", + "ru": "Поздравляю. Пожалуйста, свяжитесь с командой CS и измените его на элемент.", + "tl": "Binabati kita. Mangyaring makipag-ugnayan sa CS team at palitan ito ng item.", + "uk": "Вітаю. Будь ласка, зв’яжіться з командою CS і змініть його на елемент.", + "zh-TW": "恭喜。請聯絡CS團隊並將其變更為專案。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -1228,6 +1368,24 @@ "pt": "Bilhete de item raro5" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Congratulations. Please contact CS team and change it to item.", + "de": "Herzlichen Glückwunsch. Bitte wenden Sie sich an den Kundendienst, um ihn in einen Gegenstand umzuwandeln.", + "es": "Felicidades. Comuníquese con el equipo de CS y cámbielo a elemento.", + "id": "Selamat. Silakan menghubungi tim CS dan mengubahnya menjadi item.", + "ja": "おめでとうございます。運営チームに連絡すると、当選アイテムと交換できます。", + "pl": "Gratulacje. Skontaktuj się z zespołem CS i zmień go na przedmiot.", + "pt": "Parabéns. Entre em contato com a equipe CS e altere para item.", + "ru": "Поздравляю. Пожалуйста, свяжитесь с командой CS и измените его на элемент.", + "tl": "Binabati kita. Mangyaring makipag-ugnayan sa CS team at palitan ito ng item.", + "uk": "Вітаю. Будь ласка, зв’яжіться з командою CS і змініть його на елемент.", + "zh-TW": "恭喜。請聯絡CS團隊並將其變更為專案。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -1256,6 +1414,24 @@ "es": "Agua de Castillo Maldito", "pt": "Água do Castelo Amaldiçoado" }, + "description": [ + { + "text": { + "en": "Mobility speed reduces upon achievement.", + "de": "Beim Tragen verringert sich die Bewegungsgeschwindigkeit.", + "es": "La velocidad de movilidad se reduce al lograrlo.", + "id": "Kecepatan mobilitas berkurang setelah pencapaian.", + "ja": "獲得時に移動速度減少", + "pl": "Prędkość poruszania się zmniejsza się po osiągnięciu.", + "pt": "A velocidade de mobilidade diminui após a conquista.", + "ru": "Скорость мобильности снижается при достижении.", + "tl": "Ang bilis ng paggalaw ay bumababa kapag nakamit.", + "uk": "Швидкість рухливості знижується після досягнення.", + "zh-TW": "成就後移動速度會降低。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -1558,6 +1734,24 @@ "es": "Boleto de Ítem Raro", "pt": "Bilhete de item raro" }, + "description": [ + { + "text": { + "en": "Congratulations. Please contact CS team and change it to item.", + "de": "Herzlichen Glückwunsch. Bitte wenden Sie sich an den Kundendienst, um ihn in einen Gegenstand umzuwandeln.", + "es": "Felicidades. Comuníquese con el equipo de CS y cámbielo a elemento.", + "id": "Selamat. Silakan menghubungi tim CS dan mengubahnya menjadi item.", + "ja": "おめでとうございます。運営チームに連絡すると、当選アイテムと交換できます。", + "pl": "Gratulacje. Skontaktuj się z zespołem CS i zmień go na przedmiot.", + "pt": "Parabéns. Entre em contato com a equipe CS e altere para item.", + "ru": "Поздравляю. Пожалуйста, свяжитесь с командой CS и измените его на элемент.", + "tl": "Binabati kita. Mangyaring makipag-ugnayan sa CS team at palitan ito ng item.", + "uk": "Вітаю. Будь ласка, зв’яжіться з командою CS і змініть його на елемент.", + "zh-TW": "恭喜。請聯絡CS團隊並將其變更為專案。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "repairable": false @@ -1570,6 +1764,24 @@ "es": "Caja Juegos Flor de Cerezo", "pt": "Cx. de Brinq. Flor de Cereja" }, + "description": [ + { + "text": { + "en": "Drop it to receive the gift.", + "de": "Lassen Sie es fallen, um das Geschenk zu erhalten.", + "es": "Déjalo para recibir el regalo.", + "id": "Jatuhkan untuk menerima hadiah.", + "ja": "地面に投げるとプレゼントが出ます。", + "pl": "Upuść go, aby otrzymać prezent.", + "pt": "Solte-o para receber o presente.", + "ru": "Брось его, чтобы получить подарок.", + "tl": "I-drop ito upang matanggap ang regalo.", + "uk": "Киньте його, щоб отримати подарунок.", + "zh-TW": "放下它即可收到禮物。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "repairable": false @@ -1740,6 +1952,56 @@ "pt": "Talismã do Agrup. do Caos" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Minimum +10 - +15 level item upgrade", + "de": "Mindestens +10 bis +15 bei der Verbesserung von Gegenständen:", + "es": "Actualización mínima de elemento de nivel +10 - +15", + "id": "Minimal +10 - +15 peningkatan item level", + "ja": "+10~+15レベル以上のアイテムアップグレード時", + "pl": "Minimalne ulepszenie przedmiotu na poziomie +10 - +15", + "pt": "Atualização mínima de item de nível +10 - +15", + "ru": "Минимум +10–+15 повышение уровня предмета.", + "tl": "Pinakamababang +10 - +15 na antas ng pag-upgrade ng item", + "uk": "Мінімальне підвищення рівня +10 - +15", + "zh-TW": "最低 +10 - +15 級物品升級" + }, + "color": "blue" + }, + { + "text": { + "en": "blocks the item dissipation.", + "de": "verhindert das Verschwinden des Gegenstands.", + "es": "Bloquea la disipación del artículo.", + "id": "memblokir disipasi item.", + "ja": "アイテムの消滅を防ぎます。", + "pl": "blokuje rozpraszanie przedmiotu.", + "pt": "bloqueia a dissipação do item.", + "ru": "блокирует рассеивание предмета.", + "tl": "hinaharangan ang pagwawaldas ng item.", + "uk": "блокує розсіювання предмета.", + "zh-TW": "阻止物品耗散。" + }, + "color": "purple" + }, + { + "text": { + "en": "+10~+15 When upgrading level item please put it in combination window.", + "de": "Legen Sie Gegenstände für die Verbesserung auf +10~+15 in das Kombinationsfenster.", + "es": "+10~+15 Al actualizar el elemento de nivel, colóquelo en la ventana de combinación.", + "id": "+10~+15 Saat meningkatkan item level, harap letakkan di jendela kombinasi.", + "ja": "+10~+15レベルアイテムのアップグレード時に合成ウィンドウに入れて使用", + "pl": "+10~+15 Podczas ulepszania przedmiotu na poziomie proszę umieścić go w oknie kombinacji.", + "pt": "+10~+15 Ao atualizar o item de nível, coloque-o na janela de combinação.", + "ru": "+10~+15 При обновлении предмета уровня поместите его в окно комбинации.", + "tl": "+10~+15 Kapag nag-a-upgrade ng item sa antas, mangyaring ilagay ito sa window ng kumbinasyon.", + "uk": "+10~+15 Під час підвищення рівня предмета, будь ласка, помістіть його у вікно комбінацій.", + "zh-TW": "+10~+15 升級等級項目時請將其放在組合視窗中。" + }, + "color": "purple" + } + ], "width": 1, "height": 1, "tradable": false, @@ -1936,6 +2198,40 @@ "es": "Espejo de Dimensiones", "pt": "Espelho das dimensões" }, + "description": [ + { + "text": { + "en": "That's the only thing that will get Lugard to help you", + "de": "Nur damit hilft Ihnen Lugard,", + "es": "Eso es lo único que hará que Lugard te ayude.", + "id": "Itulah satu-satunya hal yang akan membuat Lugard membantu Anda", + "ja": "NPCルガドによって次元の狭間へ", + "pl": "Tylko to sprawi, że Lugard ci pomoże", + "pt": "Essa é a única coisa que fará Lugard ajudá-lo", + "ru": "Это единственное, что заставит Лугарда помочь вам.", + "tl": "Iyan lang ang makakatutulong sa iyo ni Lugard", + "uk": "Це єдине, що змусить Лугарда вам допомогти", + "zh-TW": "這是唯一能讓盧加德幫助你的事情" + }, + "color": "darkBlue" + }, + { + "text": { + "en": "enter the Doppelganger area.", + "de": "den Doppelgänger-Bereich zu betreten.", + "es": "Ingrese al área de Doppelganger.", + "id": "memasuki area Doppelganger.", + "ja": "移動できる唯一のアイテムです。", + "pl": "wejdź do obszaru Doppelgangera.", + "pt": "entre na área Doppelganger.", + "ru": "войдите в зону Доппельгангера.", + "tl": "pumasok sa lugar ng Doppelganger.", + "uk": "увійдіть у зону Doppelganger.", + "zh-TW": "進入分身區域。" + }, + "color": "darkBlue" + } + ], "width": 1, "height": 1, "repairable": false @@ -1949,6 +2245,23 @@ "pt": "Chave prateada" }, "tags": ["cashShop", "valuable"], + "description": [ + { + "text": { + "en": "You can do a Goblin combination with a Sealed Silver Box to create a Silver Box.", + "de": "Mit einer versiegelten silbernen Box können Sie beim Goblin eine Silberne Box kombinieren.", + "es": "Puedes hacer una combinación de Duende con una Caja plateada sellada para crear una Caja plateada.", + "id": "Kalian bisa melakukan kombinasi Goblin dengan Sealed Silver Box untuk membuat Silver Box.", + "ja": "封印された銀箱とのカオス合成で銀箱を生成できます。", + "pl": "Możesz wykonać kombinację Goblinów z Sealed Silver Box, aby stworzyć Silver Box.", + "pt": "Você pode fazer uma combinação de Goblin com uma Caixa de Prata Selada para criar uma Caixa de Prata.", + "ru": "Вы можете создать комбинацию Гоблина с Запечатанной Серебряной Коробкой, чтобы создать Серебряную Коробку.", + "tl": "Maaari kang gumawa ng kumbinasyon ng Goblin na may Sealed Silver Box para gumawa ng Silver Box.", + "uk": "Ви можете поєднати Гобліна з Запечатаною Срібною Скринькою, щоб створити Срібну Скриньку.", + "zh-TW": "您可以將哥布林與密封銀盒進行組合來創建銀盒。" + } + } + ], "width": 1, "height": 1, "tradable": false, @@ -1967,6 +2280,23 @@ "pt": "Chave dourada" }, "tags": ["cashShop", "valuable"], + "description": [ + { + "text": { + "en": "You can do a Goblin combination with a Sealed Golden Box to create a Golden Box.", + "de": "Mit einer versiegelten goldenen Box können Sie beim Goblin eine Goldene Box kombinieren.", + "es": "Puedes hacer una combinación de Duende con una Caja Dorada Sellada para crear una Caja Dorada.", + "id": "Kalian bisa melakukan kombinasi Goblin dengan Sealed Golden Box untuk membuat Golden Box.", + "ja": "封印された金箱とのカオス合成で金箱を生成できます。", + "pl": "Możesz wykonać kombinację Goblinów z Sealed Golden Box, aby stworzyć Golden Box.", + "pt": "Você pode fazer uma combinação de Goblin com uma Caixa Dourada Selada para criar uma Caixa Dourada.", + "ru": "Вы можете создать комбинацию Гоблина с Запечатанной Золотой Коробкой, чтобы создать Золотую Коробку.", + "tl": "Maaari kang gumawa ng kumbinasyon ng Goblin na may Sealed Golden Box para gumawa ng Golden Box.", + "uk": "Ви можете створити комбінацію гобліна із запечатаною золотою скринькою, щоб створити золоту скриньку.", + "zh-TW": "您可以將哥布林與密封金盒進行組合來創建金盒。" + } + } + ], "width": 1, "height": 1, "tradable": false, @@ -2087,6 +2417,23 @@ "pt": "Moeda dourada do goblin" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "You can acquire Goblin Points by using the MU Item Shop's storage.", + "de": "Sie erhalten Goblin-Punkte, wenn Sie das Lager des MU Item Shops nutzen.", + "es": "Puedes adquirir puntos Goblin utilizando el almacenamiento de la tienda de artículos MU.", + "id": "Anda dapat memperoleh Poin Goblin dengan menggunakan penyimpanan MU Item Shop.", + "ja": "インゲームショップ保管箱で使用すると、ゴブリンポイントを獲得できます。", + "pl": "Możesz zdobywać punkty Goblinów, korzystając z magazynu sklepu z przedmiotami MU.", + "pt": "Você pode adquirir Goblin Points usando o armazenamento da MU Item Shop.", + "ru": "Вы можете получить очки гоблинов, используя хранилище магазина предметов MU.", + "tl": "Maaari kang makakuha ng Goblin Points sa pamamagitan ng paggamit ng storage ng MU Item Shop.", + "uk": "Ви можете отримати бали гоблінів, використовуючи сховище MU Item Shop.", + "zh-TW": "您可以使用 MU 物品商店的存儲來獲取哥布林點數。" + } + } + ], "width": 1, "height": 1, "tradable": false, @@ -2104,6 +2451,23 @@ "pt": "Caixa dourada lacrada" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "You can do a Goblin combination with a Gold Key to create a Golden Box.", + "de": "Mit einem goldenen Schlüssel können Sie beim Goblin eine Goldene Box kombinieren.", + "es": "Puedes hacer una combinación de Duende con una Llave Dorada para crear una Caja Dorada.", + "id": "Kalian bisa melakukan kombinasi Goblin dengan Gold Key untuk membuat Golden Box.", + "ja": "ゴールドキーとのカオス合成で金箱を生成できます。", + "pl": "Możesz wykonać kombinację Goblinów ze Złotym Kluczem, aby stworzyć Golden Box.", + "pt": "Você pode fazer uma combinação de Goblin com uma Chave Dourada para criar uma Caixa Dourada.", + "ru": "Вы можете создать комбинацию Гоблина с Золотым ключом, чтобы создать Золотую шкатулку.", + "tl": "Maaari kang gumawa ng kumbinasyon ng Goblin gamit ang isang Gold Key upang lumikha ng isang Golden Box.", + "uk": "Ви можете створити комбінацію гобліна із золотим ключем, щоб створити золоту скриньку.", + "zh-TW": "您可以將哥布林與金鑰匙組合來創建金盒子。" + } + } + ], "width": 1, "height": 1, "droppable": false, @@ -2118,6 +2482,23 @@ "pt": "Caixa prateada lacrada" }, "tags": ["valuable"], + "description": [ + { + "text": { + "en": "You can do a Goblin combination with a Silver Key to create a Silver Box.", + "de": "Mit einem silbernen Schlüssel können Sie beim Goblin eine Silberne Box kombinieren.", + "es": "Puedes hacer una combinación de Duende con una Llave plateada para crear una Caja plateada.", + "id": "Kalian bisa melakukan kombinasi Goblin dengan Silver Key untuk membuat Silver Box.", + "ja": "シルバーキーとのカオス合成で銀箱を生成できます。", + "pl": "Możesz wykonać kombinację Goblinów ze Srebrnym Kluczem, aby stworzyć Silver Box.", + "pt": "Você pode fazer uma combinação de Goblin com uma Silver Key para criar uma Silver Box.", + "ru": "Вы можете создать комбинацию гоблина с серебряным ключом, чтобы создать серебряную шкатулку.", + "tl": "Maaari kang gumawa ng kumbinasyon ng Goblin na may Silver Key para gumawa ng Silver Box.", + "uk": "Ви можете створити комбінацію гобліна зі срібним ключем, щоб створити срібну скриню.", + "zh-TW": "您可以將哥布林與銀鑰匙組合來創建銀盒子。" + } + } + ], "width": 1, "height": 1, "droppable": false, @@ -2132,6 +2513,23 @@ "pt": "Caixa dourada" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "You can drop it with a fixed probability of it turning into a rare item.", + "de": "Wenn Sie es fallen lassen, wird es mit einer festen Wahrscheinlichkeit zu einem seltenen Gegenstand.", + "es": "Puedes soltarlo con una probabilidad fija de que se convierta en un objeto raro.", + "id": "Anda dapat menjatuhkannya dengan kemungkinan tetap untuk berubah menjadi barang langka.", + "ja": "地面に投げると一定確率でレアアイテムが手に入ります。", + "pl": "Możesz go upuścić ze stałym prawdopodobieństwem, że zamieni się w rzadki przedmiot.", + "pt": "Você pode derrubá-lo com uma probabilidade fixa de se transformar em um item raro.", + "ru": "Вы можете выбросить его с фиксированной вероятностью, что он превратится в редкий предмет.", + "tl": "Maaari mong i-drop ito nang may nakapirming posibilidad na maging isang bihirang item.", + "uk": "Ви можете скинути його з фіксованою ймовірністю того, що він перетвориться на рідкісний предмет.", + "zh-TW": "你可以以固定的機率掉落它,使其變成稀有物品。" + } + } + ], "width": 1, "height": 1, "tradable": false, @@ -2149,6 +2547,23 @@ "pt": "Caixa prateada" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "You can drop it with a fixed probability of it turning into a rare item.", + "de": "Wenn Sie es fallen lassen, wird es mit einer festen Wahrscheinlichkeit zu einem seltenen Gegenstand.", + "es": "Puedes soltarlo con una probabilidad fija de que se convierta en un objeto raro.", + "id": "Anda dapat menjatuhkannya dengan kemungkinan tetap untuk berubah menjadi barang langka.", + "ja": "地面に投げると一定確率でレアアイテムが手に入ります。", + "pl": "Możesz go upuścić ze stałym prawdopodobieństwem, że zamieni się w rzadki przedmiot.", + "pt": "Você pode derrubá-lo com uma probabilidade fixa de se transformar em um item raro.", + "ru": "Вы можете выбросить его с фиксированной вероятностью, что он превратится в редкий предмет.", + "tl": "Maaari mong i-drop ito nang may nakapirming posibilidad na maging isang bihirang item.", + "uk": "Ви можете скинути його з фіксованою ймовірністю того, що він перетвориться на рідкісний предмет.", + "zh-TW": "你可以以固定的機率掉落它,使其變成稀有物品。" + } + } + ], "width": 1, "height": 1, "tradable": false, @@ -2314,6 +2729,23 @@ "pt": "Caixa de pacote A" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "It's a box containing various items.", + "de": "Eine Kiste mit verschiedenen Gegenständen.", + "es": "Es una caja que contiene varios artículos.", + "id": "Itu adalah kotak berisi berbagai item.", + "ja": "各種商品が入っている箱です。", + "pl": "To pudełko zawierające różne przedmioty.", + "pt": "É uma caixa contendo vários itens.", + "ru": "Это коробка, содержащая различные предметы.", + "tl": "Ito ay isang kahon na naglalaman ng iba't ibang mga item.", + "uk": "Це коробка з різними предметами.", + "zh-TW": "這是一個裝有各種物品的盒子。" + } + } + ], "width": 1, "height": 1, "tradable": false, @@ -2331,6 +2763,23 @@ "pt": "Caixa de pacote B" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "It's a box containing various items.", + "de": "Eine Kiste mit verschiedenen Gegenständen.", + "es": "Es una caja que contiene varios artículos.", + "id": "Itu adalah kotak berisi berbagai item.", + "ja": "各種商品が入っている箱です。", + "pl": "To pudełko zawierające różne przedmioty.", + "pt": "É uma caixa contendo vários itens.", + "ru": "Это коробка, содержащая различные предметы.", + "tl": "Ito ay isang kahon na naglalaman ng iba't ibang mga item.", + "uk": "Це коробка з різними предметами.", + "zh-TW": "這是一個裝有各種物品的盒子。" + } + } + ], "width": 1, "height": 1, "tradable": false, @@ -2348,6 +2797,23 @@ "pt": "Caixa de pacote C" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "It's a box containing various items.", + "de": "Eine Kiste mit verschiedenen Gegenständen.", + "es": "Es una caja que contiene varios artículos.", + "id": "Itu adalah kotak berisi berbagai item.", + "ja": "各種商品が入っている箱です。", + "pl": "To pudełko zawierające różne przedmioty.", + "pt": "É uma caixa contendo vários itens.", + "ru": "Это коробка, содержащая различные предметы.", + "tl": "Ito ay isang kahon na naglalaman ng iba't ibang mga item.", + "uk": "Це коробка з різними предметами.", + "zh-TW": "這是一個裝有各種物品的盒子。" + } + } + ], "width": 1, "height": 1, "tradable": false, @@ -2365,6 +2831,23 @@ "pt": "Caixa de pacote D" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "It's a box containing various items.", + "de": "Eine Kiste mit verschiedenen Gegenständen.", + "es": "Es una caja que contiene varios artículos.", + "id": "Itu adalah kotak berisi berbagai item.", + "ja": "各種商品が入っている箱です。", + "pl": "To pudełko zawierające różne przedmioty.", + "pt": "É uma caixa contendo vários itens.", + "ru": "Это коробка, содержащая различные предметы.", + "tl": "Ito ay isang kahon na naglalaman ng iba't ibang mga item.", + "uk": "Це коробка з різними предметами.", + "zh-TW": "這是一個裝有各種物品的盒子。" + } + } + ], "width": 1, "height": 1, "tradable": false, @@ -2382,6 +2865,23 @@ "pt": "Caixa de pacote E" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "It's a box containing various items.", + "de": "Eine Kiste mit verschiedenen Gegenständen.", + "es": "Es una caja que contiene varios artículos.", + "id": "Itu adalah kotak berisi berbagai item.", + "ja": "各種商品が入っている箱です。", + "pl": "To pudełko zawierające różne przedmioty.", + "pt": "É uma caixa contendo vários itens.", + "ru": "Это коробка, содержащая различные предметы.", + "tl": "Ito ay isang kahon na naglalaman ng iba't ibang mga item.", + "uk": "Це коробка з різними предметами.", + "zh-TW": "這是一個裝有各種物品的盒子。" + } + } + ], "width": 1, "height": 1, "tradable": false, @@ -2399,6 +2899,23 @@ "pt": "Caixa de pacote F" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "It's a box containing various items.", + "de": "Eine Kiste mit verschiedenen Gegenständen.", + "es": "Es una caja que contiene varios artículos.", + "id": "Itu adalah kotak berisi berbagai item.", + "ja": "各種商品が入っている箱です。", + "pl": "To pudełko zawierające różne przedmioty.", + "pt": "É uma caixa contendo vários itens.", + "ru": "Это коробка, содержащая различные предметы.", + "tl": "Ito ay isang kahon na naglalaman ng iba't ibang mga item.", + "uk": "Це коробка з різними предметами.", + "zh-TW": "這是一個裝有各種物品的盒子。" + } + } + ], "width": 1, "height": 1, "tradable": false, @@ -2416,6 +2933,40 @@ "pt": "Pergaminho da cura" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Automatic HP recovery 3%", + "de": "Automatische HP-Wiederherstellung 3%", + "es": "Recuperación automática de HP 3%", + "id": "Pemulihan HP otomatis 3%", + "ja": "オートヒーリング 3%", + "pl": "Automatyczne odzyskiwanie HP 3%", + "pt": "Recuperação automática de HP 3%", + "ru": "Автоматическое восстановление HP 3%", + "tl": "Awtomatikong pagbawi ng HP 3%", + "uk": "Автоматичне відновлення HP 3%", + "zh-TW": "HP自動恢復 3%" + }, + "color": "blue" + }, + { + "text": { + "en": "Max. HP increase +100", + "de": "Max. HP +100", + "es": "Máx. Aumento de HP +100", + "id": "Maks. Peningkatan HP +100", + "ja": "最大 HP 上昇 +100", + "pl": "Maks. Wzrost HP +100", + "pt": "Máx. Aumento de HP +100", + "ru": "Макс. Увеличение HP +100", + "tl": "Max. Tumaas ang HP +100", + "uk": "Макс. HP збільшення +100", + "zh-TW": "最大限度。生命值增加+100" + }, + "color": "blue" + } + ], "width": 2, "height": 2, "tradable": false, @@ -2432,6 +2983,23 @@ "es": "Joyero Brillante", "pt": "Estojo de joias brilhante" }, + "description": [ + { + "text": { + "en": "Throw it and you may receive some Zen or items", + "de": "Werfen Sie es weg und Sie erhalten vielleicht etwas Zen oder Gegenstände", + "es": "Tíralo y podrás recibir algo de Zen o artículos.", + "id": "Lemparkan dan Anda mungkin menerima beberapa Zen atau item", + "ja": "地面に投げればゼンやアイテムが出現", + "pl": "Rzuć nim, a możesz otrzymać trochę Zen lub przedmiotów", + "pt": "Jogue-o e você poderá receber algum Zen ou itens", + "ru": "Бросайте его, и вы можете получить немного Дзена или предметы.", + "tl": "Itapon ito at maaari kang makatanggap ng ilang Zen o mga item", + "uk": "Киньте його, і ви можете отримати дзен або предмети", + "zh-TW": "丟掉它,你可能會收到一些禪宗或物品" + } + } + ], "width": 1, "height": 1, "repairable": false @@ -2444,6 +3012,23 @@ "es": "Joyero Elegante", "pt": "Estojo de joias elegante" }, + "description": [ + { + "text": { + "en": "Throw it and you may receive some Zen or items", + "de": "Werfen Sie es weg und Sie erhalten vielleicht etwas Zen oder Gegenstände", + "es": "Tíralo y podrás recibir algo de Zen o artículos.", + "id": "Lemparkan dan Anda mungkin menerima beberapa Zen atau item", + "ja": "地面に投げればゼンやアイテムが出現", + "pl": "Rzuć nim, a możesz otrzymać trochę Zen lub przedmiotów", + "pt": "Jogue-o e você poderá receber algum Zen ou itens", + "ru": "Бросайте его, и вы можете получить немного Дзена или предметы.", + "tl": "Itapon ito at maaari kang makatanggap ng ilang Zen o mga item", + "uk": "Киньте його, і ви можете отримати дзен або предмети", + "zh-TW": "丟掉它,你可能會收到一些禪宗或物品" + } + } + ], "width": 1, "height": 1, "repairable": false @@ -2456,6 +3041,23 @@ "es": "Joyero de Acero", "pt": "Estojo de joias de aço" }, + "description": [ + { + "text": { + "en": "Throw it and you may receive some Zen or items", + "de": "Werfen Sie es weg und Sie erhalten vielleicht etwas Zen oder Gegenstände", + "es": "Tíralo y podrás recibir algo de Zen o artículos.", + "id": "Lemparkan dan Anda mungkin menerima beberapa Zen atau item", + "ja": "地面に投げればゼンやアイテムが出現", + "pl": "Rzuć nim, a możesz otrzymać trochę Zen lub przedmiotów", + "pt": "Jogue-o e você poderá receber algum Zen ou itens", + "ru": "Бросайте его, и вы можете получить немного Дзена или предметы.", + "tl": "Itapon ito at maaari kang makatanggap ng ilang Zen o mga item", + "uk": "Киньте його, і ви можете отримати дзен або предмети", + "zh-TW": "丟掉它,你可能會收到一些禪宗或物品" + } + } + ], "width": 1, "height": 1, "repairable": false @@ -2468,6 +3070,23 @@ "es": "Joyero Antiguo", "pt": "Estojo de joias antigo" }, + "description": [ + { + "text": { + "en": "Throw it and you may receive some Zen or items", + "de": "Werfen Sie es weg und Sie erhalten vielleicht etwas Zen oder Gegenstände", + "es": "Tíralo y podrás recibir algo de Zen o artículos.", + "id": "Lemparkan dan Anda mungkin menerima beberapa Zen atau item", + "ja": "地面に投げればゼンやアイテムが出現", + "pl": "Rzuć nim, a możesz otrzymać trochę Zen lub przedmiotów", + "pt": "Jogue-o e você poderá receber algum Zen ou itens", + "ru": "Бросайте его, и вы можете получить немного Дзена или предметы.", + "tl": "Itapon ito at maaari kang makatanggap ng ilang Zen o mga item", + "uk": "Киньте його, і ви можете отримати дзен або предмети", + "zh-TW": "丟掉它,你可能會收到一些禪宗或物品" + } + } + ], "width": 1, "height": 1, "repairable": false @@ -2481,6 +3100,24 @@ "pt": "Bilhete de item raro7" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Congratulations. Please contact CS team and change it to item.", + "de": "Herzlichen Glückwunsch. Bitte wenden Sie sich an den Kundendienst, um ihn in einen Gegenstand umzuwandeln.", + "es": "Felicidades. Comuníquese con el equipo de CS y cámbielo a elemento.", + "id": "Selamat. Silakan menghubungi tim CS dan mengubahnya menjadi item.", + "ja": "おめでとうございます。運営チームに連絡すると、当選アイテムと交換できます。", + "pl": "Gratulacje. Skontaktuj się z zespołem CS i zmień go na przedmiot.", + "pt": "Parabéns. Entre em contato com a equipe CS e altere para item.", + "ru": "Поздравляю. Пожалуйста, свяжитесь с командой CS и измените его на элемент.", + "tl": "Binabati kita. Mangyaring makipag-ugnayan sa CS team at palitan ito ng item.", + "uk": "Вітаю. Будь ласка, зв’яжіться з командою CS і змініть його на елемент.", + "zh-TW": "恭喜。請聯絡CS團隊並將其變更為專案。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -2498,6 +3135,24 @@ "pt": "Bilhete de item raro8" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Congratulations. Please contact CS team and change it to item.", + "de": "Herzlichen Glückwunsch. Bitte wenden Sie sich an den Kundendienst, um ihn in einen Gegenstand umzuwandeln.", + "es": "Felicidades. Comuníquese con el equipo de CS y cámbielo a elemento.", + "id": "Selamat. Silakan menghubungi tim CS dan mengubahnya menjadi item.", + "ja": "おめでとうございます。運営チームに連絡すると、当選アイテムと交換できます。", + "pl": "Gratulacje. Skontaktuj się z zespołem CS i zmień go na przedmiot.", + "pt": "Parabéns. Entre em contato com a equipe CS e altere para item.", + "ru": "Поздравляю. Пожалуйста, свяжитесь с командой CS и измените его на элемент.", + "tl": "Binabati kita. Mangyaring makipag-ugnayan sa CS team at palitan ito ng item.", + "uk": "Вітаю. Будь ласка, зв’яжіться з командою CS і змініть його на елемент.", + "zh-TW": "恭喜。請聯絡CS團隊並將其變更為專案。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -2515,6 +3170,24 @@ "pt": "Bilhete de item raro9" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Congratulations. Please contact CS team and change it to item.", + "de": "Herzlichen Glückwunsch. Bitte wenden Sie sich an den Kundendienst, um ihn in einen Gegenstand umzuwandeln.", + "es": "Felicidades. Comuníquese con el equipo de CS y cámbielo a elemento.", + "id": "Selamat. Silakan menghubungi tim CS dan mengubahnya menjadi item.", + "ja": "おめでとうございます。運営チームに連絡すると、当選アイテムと交換できます。", + "pl": "Gratulacje. Skontaktuj się z zespołem CS i zmień go na przedmiot.", + "pt": "Parabéns. Entre em contato com a equipe CS e altere para item.", + "ru": "Поздравляю. Пожалуйста, свяжитесь с командой CS и измените его на элемент.", + "tl": "Binabati kita. Mangyaring makipag-ugnayan sa CS team at palitan ito ng item.", + "uk": "Вітаю. Будь ласка, зв’яжіться з командою CS і змініть його на елемент.", + "zh-TW": "恭喜。請聯絡CS團隊並將其變更為專案。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -2532,6 +3205,24 @@ "pt": "Bilhete de item raro10" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Congratulations. Please contact CS team and change it to item.", + "de": "Herzlichen Glückwunsch. Bitte wenden Sie sich an den Kundendienst, um ihn in einen Gegenstand umzuwandeln.", + "es": "Felicidades. Comuníquese con el equipo de CS y cámbielo a elemento.", + "id": "Selamat. Silakan menghubungi tim CS dan mengubahnya menjadi item.", + "ja": "おめでとうございます。運営チームに連絡すると、当選アイテムと交換できます。", + "pl": "Gratulacje. Skontaktuj się z zespołem CS i zmień go na przedmiot.", + "pt": "Parabéns. Entre em contato com a equipe CS e altere para item.", + "ru": "Поздравляю. Пожалуйста, свяжитесь с командой CS и измените его на элемент.", + "tl": "Binabati kita. Mangyaring makipag-ugnayan sa CS team at palitan ito ng item.", + "uk": "Вітаю. Будь ласка, зв’яжіться з командою CS і змініть його на елемент.", + "zh-TW": "恭喜。請聯絡CS團隊並將其變更為專案。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -2549,6 +3240,24 @@ "pt": "Bilhete de item raro11" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Congratulations. Please contact CS team and change it to item.", + "de": "Herzlichen Glückwunsch. Bitte wenden Sie sich an den Kundendienst, um ihn in einen Gegenstand umzuwandeln.", + "es": "Felicidades. Comuníquese con el equipo de CS y cámbielo a elemento.", + "id": "Selamat. Silakan menghubungi tim CS dan mengubahnya menjadi item.", + "ja": "おめでとうございます。運営チームに連絡すると、当選アイテムと交換できます。", + "pl": "Gratulacje. Skontaktuj się z zespołem CS i zmień go na przedmiot.", + "pt": "Parabéns. Entre em contato com a equipe CS e altere para item.", + "ru": "Поздравляю. Пожалуйста, свяжитесь с командой CS и измените его на элемент.", + "tl": "Binabati kita. Mangyaring makipag-ugnayan sa CS team at palitan ito ng item.", + "uk": "Вітаю. Будь ласка, зв’яжіться з командою CS і змініть його на елемент.", + "zh-TW": "恭喜。請聯絡CS團隊並將其變更為專案。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, @@ -2566,6 +3275,24 @@ "pt": "Bilhete de item raro12" }, "tags": ["cashShop"], + "description": [ + { + "text": { + "en": "Congratulations. Please contact CS team and change it to item.", + "de": "Herzlichen Glückwunsch. Bitte wenden Sie sich an den Kundendienst, um ihn in einen Gegenstand umzuwandeln.", + "es": "Felicidades. Comuníquese con el equipo de CS y cámbielo a elemento.", + "id": "Selamat. Silakan menghubungi tim CS dan mengubahnya menjadi item.", + "ja": "おめでとうございます。運営チームに連絡すると、当選アイテムと交換できます。", + "pl": "Gratulacje. Skontaktuj się z zespołem CS i zmień go na przedmiot.", + "pt": "Parabéns. Entre em contato com a equipe CS e altere para item.", + "ru": "Поздравляю. Пожалуйста, свяжитесь с командой CS и измените его на элемент.", + "tl": "Binabati kita. Mangyaring makipag-ugnayan sa CS team at palitan ito ng item.", + "uk": "Вітаю. Будь ласка, зв’яжіться з командою CS і змініть його на елемент.", + "zh-TW": "恭喜。請聯絡CS團隊並將其變更為專案。" + }, + "color": "blue" + } + ], "width": 1, "height": 1, "tradable": false, diff --git a/src/source/Engine/Object/ZzzInventory.cpp b/src/source/Engine/Object/ZzzInventory.cpp index eed4eb563b..5caf51218d 100644 --- a/src/source/Engine/Object/ZzzInventory.cpp +++ b/src/source/Engine/Object/ZzzInventory.cpp @@ -2329,94 +2329,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, TextBold[TextNum] = false; TextNum++; } - else if (ip->Type == ITEM_CHAOS_CARD) - { - mu_swprintf(TextList[TextNum], I18N::Game::YouCanAchieveSpecialItemsWithCombinations); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type >= ITEM_RARE_ITEM_TICKET_1 && ip->Type <= ITEM_RARE_ITEM_TICKET_5) - { - mu_swprintf(TextList[TextNum], I18N::Game::CongratulationsPleaseContactCSTeamAndChangeItToItem); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_POTION + 83) - { - mu_swprintf(TextList[TextNum], I18N::Game::CongratulationsPleaseContactCSTeamAndChangeItToItem); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type >= ITEM_RARE_ITEM_TICKET_7 && ip->Type <= ITEM_RARE_ITEM_TICKET_12) - { - mu_swprintf(TextList[TextNum], I18N::Game::CongratulationsPleaseContactCSTeamAndChangeItToItem); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_TALISMAN_OF_LUCK) - { - mu_swprintf(TextList[TextNum], I18N::Game::IncreasesTheCombinationRateButOnlyUpToTheMaximumRate); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_SEAL_OF_ASCENSION) - { - mu_swprintf(TextList[TextNum], I18N::Game::IncreasesExperienceGained); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::WarpCommandWindowAvailable); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::NotApplicableTo); - TextListColor[TextNum] = TEXT_COLOR_YELLOW; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::MasterLevelCharacters); - TextListColor[TextNum] = TEXT_COLOR_YELLOW; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_SEAL_OF_WEALTH) - { - mu_swprintf(TextList[TextNum], I18N::Game::IncreasesExperienceGainedAndItemDropRate); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::WarpCommandWindowAvailable); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::NotApplicableTo); - TextListColor[TextNum] = TEXT_COLOR_YELLOW; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::MasterLevelCharacters); - TextListColor[TextNum] = TEXT_COLOR_YELLOW; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_SEAL_OF_SUSTENANCE) - { - mu_swprintf(TextList[TextNum], I18N::Game::PreventsExperiencesToBeGained); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::WarpCommandWindowAvailable); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::MasterLevelEXPCannotBeAchievedDuringTheItemUsage); - TextListColor[TextNum] = TEXT_COLOR_YELLOW; - TextBold[TextNum] = false; - TextNum++; - } else if (GameLogic::Items::IsElitePotion(ip)) { mu_swprintf(TextList[TextNum], I18N::Game::NumberOfItemsD, ip->Durability); @@ -2445,13 +2357,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, TextBold[TextNum] = false; TextNum++; } - else if (ip->Type == ITEM_SEAL_OF_MOBILITY) - { - mu_swprintf(TextList[TextNum], I18N::Game::YouMayFreelyMoveOnward); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } else if (GameLogic::Items::IsResetFruit(ip)) { DWORD statpoint = 0; @@ -2534,13 +2439,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, TextBold[TextNum] = false; TextNum++; } - else if (ip->Type == ITEM_INDULGENCE) - { - mu_swprintf(TextList[TextNum], I18N::Game::ItReducesTheKillingRate); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } else if (ip->Type == ITEM_SEAL_OF_HEALING) { const ITEM_ADD_OPTION& Item_data = g_pItemAddOptioninfo->GetItemAddOtioninfo(ip->Type); @@ -2606,141 +2504,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, TextBold[TextNum] = false; TextNum++; } - else if (ip->Type == ITEM_SCROLL_OF_HEALING) - { - mu_swprintf(TextList[TextNum], I18N::Game::AutomaticHPRecoveryD, 3); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::MaxHPIncreaseD, 100); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_TALISMAN_OF_CHAOS_ASSEMBLY) - { - mu_swprintf(TextList[TextNum], I18N::Game::Minimum1015LevelItemUpgrade); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::BlocksTheItemDissipation); - TextListColor[TextNum] = TEXT_COLOR_PURPLE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::_1015WhenUpgradingLevelItemPleasePutItInCombinationWindow); - TextListColor[TextNum] = TEXT_COLOR_PURPLE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_DEMON) - { - mu_swprintf(TextList[TextNum], I18N::Game::IncreasesAttackPowerAndWizardryBy40); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::IncreasesAttackSpeedBy10); - TextListColor[TextNum] = TEXT_COLOR_PURPLE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_SPIRIT_OF_GUARDIAN) - { - mu_swprintf(TextList[TextNum], I18N::Game::AlleviatesMonsterSDamageBy30); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::IncreasesMaximumLifeBy50); - TextListColor[TextNum] = TEXT_COLOR_PURPLE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_PET_RUDOLF) - { - mu_swprintf(TextList[TextNum], I18N::Game::SurroundingZensAreAutomaticallyCollected); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_PET_SKELETON) - { - mu_swprintf(TextList[TextNum], I18N::Game::SurroundingZensAreAutomaticallyCollected); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - - mu_swprintf(TextList[TextNum], I18N::Game::IncreasesDamageWizardryAndCurseBy20); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - - mu_swprintf(TextList[TextNum], I18N::Game::IncreasesAttackSpeedBy10); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - - mu_swprintf(TextList[TextNum], I18N::Game::AndEXPBy30); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_PET_PANDA) - { - mu_swprintf(TextList[TextNum], I18N::Game::AutoCollectsZenAroundYou); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::EXPRate50Increase); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseDefensiveSkill50); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_PET_UNICORN) - { - mu_swprintf(TextList[TextNum], I18N::Game::AutoCollectsZenAroundYou); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::ZenIncrease50); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseDefensiveSkill50); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_LETHAL_WIZARDS_RING) - { - mu_swprintf(TextList[TextNum], I18N::Game::CannotRepair); - TextListColor[TextNum] = TEXT_COLOR_RED; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_MAX_AG_BOOST_AURA) - { - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseMaxAGLevel); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_MAX_SD_BOOST_AURA) - { - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseMaxSDLevelx10); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_PARTY_EXP_SCROLL) - { - mu_swprintf(TextList[TextNum], I18N::Game::UpToDEXPGainIncreaseDependingOnTheNumberOfMembersInYourParty, 170); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } else if (ip->Type == ITEM_TALISMAN_OF_RESURRECTION) { mu_swprintf(TextList[TextNum], I18N::Game::RememberTheLocationOfOneSDeath); @@ -2759,70 +2522,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, TextNum++; } } - else if (ip->Type == ITEM_TALISMAN_OF_MOBILITY) - { - mu_swprintf(TextList[TextNum], I18N::Game::SaveTheApplicationLocation); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_TALISMAN_OF_GUARDIAN) - { - mu_swprintf(TextList[TextNum], I18N::Game::ExpAndItemWillBeSecuredWhenCharacterDies); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum++] = false; - mu_swprintf(TextList[TextNum], I18N::Game::NoPenaltyForDying); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum++] = false; - mu_swprintf(TextList[TextNum], I18N::Game::RightClickToUse); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum++] = false; - } - else if (ip->Type == ITEM_TALISMAN_OF_ITEM_PROTECTION) - { - mu_swprintf(TextList[TextNum], I18N::Game::ItemDurabilityWillNotBeDecreaseForACertainPeriod); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum++] = false; - mu_swprintf(TextList[TextNum], I18N::Game::KeepsItemDurable); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum++] = false; - mu_swprintf(TextList[TextNum], I18N::Game::ApplicableToMountableItemsOnlyBesidesPet); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum++] = false; - } - else if (ip->Type == ITEM_MASTER_SEAL_OF_ASCENSION) - { - mu_swprintf(TextList[TextNum], I18N::Game::IncreasesExperienceGained); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum++] = false; - mu_swprintf(TextList[TextNum], I18N::Game::WarpCommandWindowAvailable); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum++] = false; - } - else if (ip->Type == ITEM_MASTER_SEAL_OF_WEALTH) - { - mu_swprintf(TextList[TextNum], I18N::Game::IncreasesExperienceGainedAndItemDropRate); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum++] = false; - mu_swprintf(TextList[TextNum], I18N::Game::WarpCommandWindowAvailable); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum++] = false; - } - else if (ip->Type == ITEM_ILLUSION_TEMPLE_TICKET) - { - mu_swprintf(TextList[TextNum], I18N::Game::EnablesEntranceIntoS, I18N::Game::IllusionTemple); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::YouWillBeAssignedToAStageAccordingToYourLevel); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], L"\n"); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } else if (ip->Type == ITEM_SUMMONER_CHARACTER_CARD) { mu_swprintf(TextList[TextNum], I18N::Game::Lookup(2551)); @@ -2875,13 +2574,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, TextBold[TextNum] = false; TextNum++; } - else if (ip->Type == ITEM_CHERRY_BLOSSOM_PLAYBOX) - { - mu_swprintf(TextList[TextNum], I18N::Game::DropItToReceiveTheGift); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } else if (ip->Type == ITEM_CHERRY_BLOSSOM_WINE) { mu_swprintf(TextList[TextNum], I18N::Game::_700MaximumManaIncrement); @@ -2971,34 +2663,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, TextBold[TextNum] = false; TextNum++; } - else if (ip->Type == ITEM_OLD_SCROLL) - { - mu_swprintf(TextList[TextNum], I18N::Game::AssembleTheScrollOfBloodWith); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_ILLUSION_SORCERER_COVENANT) - { - mu_swprintf(TextList[TextNum], I18N::Game::AssembleTheScrollOfBloodWithTheOldScrolls); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_SCROLL_OF_BLOOD) - { - mu_swprintf(TextList[TextNum], I18N::Game::ThisIsAMarkOfIllusionSorceryThisIsRequiredToEnterTheTemple); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_CURSED_CASTLE_WATER) - { - mu_swprintf(TextList[TextNum], I18N::Game::MobilitySpeedReducesUponAchievement); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - TextBold[TextNum] = false; - TextNum++; - } else if (GameLogic::Items::IsThirdClassQuestItem(ip)) { mu_swprintf(TextList[TextNum], I18N::Game::QuestItem); @@ -3014,20 +2678,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, TextBold[TextNum] = false; TextNum++; } - else if (ip->Type == ITEM_FLAME_OF_CONDOR) - { - mu_swprintf(TextList[TextNum], I18N::Game::IngredientsForThe3rdWingAssembly); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_FEATHER_OF_CONDOR) - { - mu_swprintf(TextList[TextNum], I18N::Game::IngredientsForThe3rdWingAssembly); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } else if (GameLogic::Items::IsSocketSeedOrSphere(ip)) { TextNum = g_SocketItemMgr.AttachToolTipForSeedSphereItem(ip, TextNum); @@ -3039,13 +2689,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, TextBold[TextNum] = false; TextNum++; } - else if (ip->Type == ITEM_MOONSTONE_PENDANT) - { - mu_swprintf(TextList[TextNum], I18N::Game::CannotRepair); - TextListColor[TextNum] = TEXT_COLOR_RED; - TextBold[TextNum] = false; - TextNum++; - } else if (ip->Type == ITEM_WIZARDS_RING) { switch (Level) @@ -3191,17 +2834,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, TextBold[TextNum] = false; TextNum++; } - else if (ip->Type == ITEM_POTION + 111) - { - mu_swprintf(TextList[TextNum], I18N::Game::ThatSTheOnlyThingThatWillGetLugardToHelpYou); - TextListColor[TextNum] = TEXT_COLOR_DARKBLUE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::EnterTheDoppelgangerArea); - TextListColor[TextNum] = TEXT_COLOR_DARKBLUE; - TextBold[TextNum] = false; - TextNum++; - } else if (GameLogic::Items::IsSecromiconQuestItem(ip)) { switch (ip->Type) @@ -3259,147 +2891,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, }break; } } - else if (ITEM_SAPPHIRE_RING == ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::AutomaticHPRecoveryD, 3); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::IncreasesMaxMana4, 4); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ITEM_RUBY_RING == ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::AutomaticHPRecoveryD, 3); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::IncreaseMaxHP4, 4); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ITEM_TOPAZ_RING == ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::AutomaticHPRecoveryD, 3); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::IncreasesAcquisitionRateOfZenAfterHuntingMonsters30, 50); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ITEM_AMETHYST_RING == ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::AutomaticHPRecoveryD, 3); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::DamageDecrease4, 4); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ITEM_RUBY_NECKLACE == ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::AutomaticHPRecoveryD, 3); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::ExcellentDamageRate10, 10); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ITEM_EMERALD_NECKLACE == ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::AutomaticHPRecoveryD, 3); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::AttackSpeedIncreaseD, 7); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ITEM_SAPPHIRE_NECKLACE == ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::AutomaticHPRecoveryD, 3); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::IncreasesAcquisitionRateOfManaAfterHuntingMonstersMana8); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ITEM_SILVER_KEY == ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::YouCanDoAGoblinCombination2876); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ITEM_GOLD_KEY == ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::YouCanDoAGoblinCombination); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ip->Type == ITEM_GOBLIN_GOLD_COIN) - { - mu_swprintf(TextList[TextNum], I18N::Game::YouCanAcquireGoblinPointsByUsingTheMUItemShopSStorage); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ITEM_SEALED_GOLDEN_BOX == ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::YouCanDoAGoblinCombinationWithAGoldKeyToCreateAGoldenBox); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ITEM_SEALED_SILVER_BOX == ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::YouCanDoAGoblinCombinationWithASilverKeyToCreateASilverBox); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ITEM_GOLDEN_BOX == ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::YouCanDropItWithAFixedProbabilityOfItTurningIntoARareItem); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ITEM_SILVER_BOX == ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::YouCanDropItWithAFixedProbabilityOfItTurningIntoARareItem); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ITEM_PACKAGE_BOX_A <= ip->Type && ITEM_PACKAGE_BOX_F >= ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::ItSABoxContainingVariousItems); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } - else if (ITEM_HELPER + 116 == ip->Type) - { - mu_swprintf(TextList[TextNum], I18N::Game::BoostsTheItemDropRate); - TextListColor[TextNum] = TEXT_COLOR_BLUE; - - TextBold[TextNum] = false; - TextNum++; - } else if (ITEM_OPEN_ACCESS_TICKET_TO_CHAOS_CASTLE == ip->Type) { int iMap = 57; @@ -3427,13 +2918,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, TextBold[TextNum] = true; TextNum++; } - else if (ip->Type >= ITEM_POTION + 141 && ip->Type <= ITEM_POTION + 144) - { - mu_swprintf(TextList[TextNum], I18N::Game::ThrowItAndYouMayReceiveSomeZenOrItems); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } else if (ip->Type == ITEM_ELITE_SD_POTION) { mu_swprintf(TextList[TextNum], I18N::Game::NumberOfItemsD, ip->Durability); @@ -3450,17 +2934,6 @@ static void RenderItemInfo(const UI::Scaling::Transform& screen, int sx, int sy, Color = TEXT_COLOR_YELLOW; mu_swprintf(TextList[TextNum], L"%ls", p->Name); - if (ip->Type == ITEM_DEVILS_INVITATION) - { - mu_swprintf(TextList[TextNum], I18N::Game::TheRemainingTimeIsShown); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - mu_swprintf(TextList[TextNum], I18N::Game::WhenYouRightClickOnYourMouse); - TextListColor[TextNum] = TEXT_COLOR_WHITE; - TextBold[TextNum] = false; - TextNum++; - } if (ip->DamageMin) { diff --git a/tests/data/test_item_database_files.cpp b/tests/data/test_item_database_files.cpp index 4bec474662..ce9b1fe647 100644 --- a/tests/data/test_item_database_files.cpp +++ b/tests/data/test_item_database_files.cpp @@ -416,6 +416,195 @@ TEST_CASE("The tooltip texts by item level come from the descriptions as from th } } +// The lines the second item chain of the tooltip code (seals, talismans, tickets, rings, ...) wrote, in English with +// their colors: the item data's description starts with them. +struct OldChainItem +{ + int group; + int number; + std::vector lines; +}; + +const std::vector& OldChainLines() +{ + static const std::vector items = { + {14, 54, {{"You can achieve special items with combinations.", ItemTextColor::Blue}}}, + {14, 58, {{"Congratulations. Please contact CS team and change it to item.", ItemTextColor::Blue}}}, + {14, 59, {{"Congratulations. Please contact CS team and change it to item.", ItemTextColor::Blue}}}, + {14, 60, {{"Congratulations. Please contact CS team and change it to item.", ItemTextColor::Blue}}}, + {14, 61, {{"Congratulations. Please contact CS team and change it to item.", ItemTextColor::Blue}}}, + {14, 62, {{"Congratulations. Please contact CS team and change it to item.", ItemTextColor::Blue}}}, + {14, 83, {{"Congratulations. Please contact CS team and change it to item.", ItemTextColor::Blue}}}, + {14, 145, {{"Congratulations. Please contact CS team and change it to item.", ItemTextColor::Blue}}}, + {14, 146, {{"Congratulations. Please contact CS team and change it to item.", ItemTextColor::Blue}}}, + {14, 147, {{"Congratulations. Please contact CS team and change it to item.", ItemTextColor::Blue}}}, + {14, 148, {{"Congratulations. Please contact CS team and change it to item.", ItemTextColor::Blue}}}, + {14, 149, {{"Congratulations. Please contact CS team and change it to item.", ItemTextColor::Blue}}}, + {14, 150, {{"Congratulations. Please contact CS team and change it to item.", ItemTextColor::Blue}}}, + {14, 53, {{"Increases the combination rate,but only up to the maximum rate.", ItemTextColor::Blue}}}, + {13, + 43, + {{"Increases experience gained.", ItemTextColor::Blue}, + {"Warp Command Window available.", ItemTextColor::Blue}, + {"Not applicable to", ItemTextColor::Yellow}, + {"Master Level Characters.", ItemTextColor::Yellow}}}, + {13, + 44, + {{"Increases experience gained and item drop rate.", ItemTextColor::Blue}, + {"Warp Command Window available.", ItemTextColor::Blue}, + {"Not applicable to", ItemTextColor::Yellow}, + {"Master Level Characters.", ItemTextColor::Yellow}}}, + {13, + 45, + {{"Prevents experiences to be gained.", ItemTextColor::Blue}, + {"Warp Command Window available.", ItemTextColor::Blue}, + {"Master Level EXP cannot be achieved during the item usage.", ItemTextColor::Yellow}}}, + {13, 59, {{"You may freely move onward.", ItemTextColor::Blue}}}, + {13, 60, {{"It reduces the killing rate.", ItemTextColor::Blue}}}, + {14, 140, {{"Automatic HP recovery 3%", ItemTextColor::Blue}, {"Max. HP increase +100", ItemTextColor::Blue}}}, + {14, + 96, + {{"Minimum +10 - +15 level item upgrade", ItemTextColor::Blue}, + {"blocks the item dissipation.", ItemTextColor::Purple}, + {"+10~+15 When upgrading level item please put it in combination window.", ItemTextColor::Purple}}}, + {13, + 64, + {{"Increases Attack Power and Wizardry by 40%", ItemTextColor::Blue}, + {"Increases Attack Speed by 10", ItemTextColor::Purple}}}, + {13, + 65, + {{"Alleviates monster's damage by 30%", ItemTextColor::Blue}, + {"Increases Maximum Life by 50", ItemTextColor::Purple}}}, + {13, 67, {{"Surrounding Zens are automatically collected.", ItemTextColor::Blue}}}, + {13, + 123, + {{"Surrounding Zens are automatically collected.", ItemTextColor::Blue}, + {"increases Damage, Wizardry and Curse by 20%", ItemTextColor::Blue}, + {"Increases Attack Speed by 10", ItemTextColor::Blue}, + {"and EXP by 30%.", ItemTextColor::Blue}}}, + {13, + 80, + {{"Auto-collects zen around you.", ItemTextColor::Blue}, + {"EXP rate 50% increase", ItemTextColor::Blue}, + {"Increase Defensive Skill +50", ItemTextColor::Blue}}}, + {13, + 106, + {{"Auto-collects zen around you.", ItemTextColor::Blue}, + {"Zen increase 50%", ItemTextColor::Blue}, + {"Increase Defensive Skill +50", ItemTextColor::Blue}}}, + {13, 107, {{"Cannot Repair", ItemTextColor::Red}}}, + {13, 104, {{"Increase Max. AG + Level", ItemTextColor::Blue}}}, + {13, 105, {{"Increase Max. SD + Levelx10", ItemTextColor::Blue}}}, + {13, + 103, + {{"Up to 170% EXP gain increase, depending on the number of members in your party.", ItemTextColor::Blue}}}, + {13, 70, {{"Save the application location.", ItemTextColor::Blue}}}, + {13, + 81, + {{"Exp and item will be secured when character dies.", ItemTextColor::Blue}, + {"No penalty for dying.", ItemTextColor::Blue}, + {"Right click to use.", ItemTextColor::Blue}}}, + {13, + 82, + {{"Item durability will not be decrease for a certain period.", ItemTextColor::Blue}, + {"Keeps item durable", ItemTextColor::Blue}, + {"Applicable to mountable items only besides pet.", ItemTextColor::Blue}}}, + {13, + 93, + {{"Increases experience gained.", ItemTextColor::Blue}, + {"Warp Command Window available.", ItemTextColor::Blue}}}, + {13, + 94, + {{"Increases experience gained and item drop rate.", ItemTextColor::Blue}, + {"Warp Command Window available.", ItemTextColor::Blue}}}, + {13, + 61, + {{"Enables entrance into Illusion Temple.", ItemTextColor::Blue}, + {"You will be assigned to a stage according to your level.", ItemTextColor::Blue}, + {"", ItemTextColor::White}}}, + {14, 84, {{"Drop it to receive the gift.", ItemTextColor::Blue}}}, + {13, 49, {{"Assemble the Scroll of Blood with the contract from the Illusion Sorcery.", ItemTextColor::Blue}}}, + {13, 50, {{"Assemble the Scroll of Blood with the old scrolls.", ItemTextColor::Blue}}}, + {13, 51, {{"This is a mark of Illusion Sorcery; this is required to enter the temple.", ItemTextColor::Blue}}}, + {14, 64, {{"Mobility speed reduces upon achievement.", ItemTextColor::Blue}}}, + {13, 52, {{"Ingredients for the 3rd wing assembly.", ItemTextColor::White}}}, + {13, 53, {{"Ingredients for the 3rd wing assembly.", ItemTextColor::White}}}, + {13, 38, {{"Cannot Repair", ItemTextColor::Red}}}, + {14, + 111, + {{"That's the only thing that will get Lugard to help you", ItemTextColor::DarkBlue}, + {"enter the Doppelganger area.", ItemTextColor::DarkBlue}}}, + {13, + 109, + {{"Automatic HP recovery 3%", ItemTextColor::White}, {"Increases Max Mana 4%", ItemTextColor::White}}}, + {13, 110, {{"Automatic HP recovery 3%", ItemTextColor::White}, {"Increase Max HP +4%", ItemTextColor::White}}}, + {13, + 111, + {{"Automatic HP recovery 3%", ItemTextColor::White}, + {"Increases acquisition rate of Zen after hunting monsters +30%", ItemTextColor::White}}}, + {13, 112, {{"Automatic HP recovery 3%", ItemTextColor::White}, {"Damage Decrease +4%", ItemTextColor::White}}}, + {13, + 113, + {{"Automatic HP recovery 3%", ItemTextColor::White}, {"Excellent Damage rate +10%", ItemTextColor::White}}}, + {13, + 114, + {{"Automatic HP recovery 3%", ItemTextColor::White}, {"Attack Speed increase +7", ItemTextColor::White}}}, + {13, + 115, + {{"Automatic HP recovery 3%", ItemTextColor::White}, + {"Increases acquisition rate of Mana after hunting monsters +Mana/8", ItemTextColor::White}}}, + {14, + 112, + {{"You can do a Goblin combination with a Sealed Silver Box to create a Silver Box.", ItemTextColor::White}}}, + {14, + 113, + {{"You can do a Goblin combination with a Sealed Golden Box to create a Golden Box.", ItemTextColor::White}}}, + {14, 120, {{"You can acquire Goblin Points by using the MU Item Shop's storage.", ItemTextColor::White}}}, + {14, 121, {{"You can do a Goblin combination with a Gold Key to create a Golden Box.", ItemTextColor::White}}}, + {14, + 122, + {{"You can do a Goblin combination with a Silver Key to create a Silver Box.", ItemTextColor::White}}}, + {14, 123, {{"You can drop it with a fixed probability of it turning into a rare item.", ItemTextColor::White}}}, + {14, 124, {{"You can drop it with a fixed probability of it turning into a rare item.", ItemTextColor::White}}}, + {14, 134, {{"It's a box containing various items.", ItemTextColor::White}}}, + {14, 135, {{"It's a box containing various items.", ItemTextColor::White}}}, + {14, 136, {{"It's a box containing various items.", ItemTextColor::White}}}, + {14, 137, {{"It's a box containing various items.", ItemTextColor::White}}}, + {14, 138, {{"It's a box containing various items.", ItemTextColor::White}}}, + {14, 139, {{"It's a box containing various items.", ItemTextColor::White}}}, + {13, 116, {{"Boosts the item drop rate.", ItemTextColor::Blue}}}, + {14, 141, {{"Throw it and you may receive some Zen or items", ItemTextColor::White}}}, + {14, 142, {{"Throw it and you may receive some Zen or items", ItemTextColor::White}}}, + {14, 143, {{"Throw it and you may receive some Zen or items", ItemTextColor::White}}}, + {14, 144, {{"Throw it and you may receive some Zen or items", ItemTextColor::White}}}, + {14, + 19, + {{"The remaining time is shown", ItemTextColor::White}, + {"when you right click on your mouse.", ItemTextColor::White}}}, + }; + return items; +} + +TEST_CASE("The second item chain's tooltip texts come from the descriptions as from the old code [data][items]") +{ + const ItemDataLoadResult result = LoadItemDataDirectory(DataDirectory / "Items"); + for (const OldChainItem& old : OldChainLines()) + { + INFO(old.group << "/" << old.number); + const auto found = std::find_if(result.items.begin(), result.items.end(), [&](const ItemDefinition& item) + { return item.group == old.group && item.number == old.number; }); + REQUIRE(found != result.items.end()); + REQUIRE(found->description.size() >= old.lines.size()); + for (size_t index = 0; index < old.lines.size(); ++index) + { + const ItemDescriptionLine& line = found->description[index]; + CHECK(OldLine{line.text.GetNeutral(), line.color} == old.lines[index]); + CHECK_FALSE(line.HasLevels()); + } + } + CHECK(OldChainLines().size() == 72); +} + // The texts the tooltip code wrote for these items are their descriptions now, in every UI language. TEST_CASE("The original items' tooltip texts are in their descriptions [data][items]") { @@ -449,10 +638,11 @@ TEST_CASE("The original items' tooltip texts are in their descriptions [data][it const auto found = std::find_if(result.items.begin(), result.items.end(), [&](const ItemDefinition& definition) { return definition.group == item.group && definition.number == item.number; }); REQUIRE(found != result.items.end()); - REQUIRE(found->description.size() == 1); - const Data::LocalizedString& text = found->description.front().text; + // The last line: the Moonstone Pendant's "Cannot Repair" of the second item chain comes before it. + REQUIRE_FALSE(found->description.empty()); + const Data::LocalizedString& text = found->description.back().text; CHECK(text.GetNeutral() == item.text); - CHECK(found->description.front().color == ItemTextColor::White); + CHECK(found->description.back().color == ItemTextColor::White); for (const char* locale : I18N::GetAvailableLocales()) { INFO(locale); From 739f9f0f150a1cb471445865850b2a09068857ed Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Fri, 23 Oct 2026 08:41:38 -0300 Subject: [PATCH 04/19] feat(items): the wings', capes' and pets' descriptions name their tables with table: --- src/bin/Data/Items/Group12_Wing.json | 1012 ++++++++++++------------ src/bin/Data/Items/Group13_Helper.json | 44 +- 2 files changed, 528 insertions(+), 528 deletions(-) diff --git a/src/bin/Data/Items/Group12_Wing.json b/src/bin/Data/Items/Group12_Wing.json index 8078e1571a..42ce7f8965 100644 --- a/src/bin/Data/Items/Group12_Wing.json +++ b/src/bin/Data/Items/Group12_Wing.json @@ -14,32 +14,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease1st}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", - "es": "Aumenta el daño de {wingDamageIncrease1st}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", - "ja": "ダメージ {wingDamageIncrease1st}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", - "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", - "ru": "Увеличение урона {wingDamageIncrease1st}% of", - "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", - "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + "en": "Increase {table:wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease1st}%", + "es": "Aumenta el daño de {table:wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease1st}% of", + "ja": "ダメージ {table:wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease1st}% of", + "ru": "Увеличение урона {table:wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease1st}% of", + "zh-TW": "增加 {table:wingDamageIncrease1st}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb1st}% of Damage", - "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb1st}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", - "ja": "ダメージ {wingDamageAbsorb1st}%吸収", - "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb1st}% of", - "ru": "Поглощение {wingDamageAbsorb1st}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", - "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + "en": "Absorb {table:wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb1st}% of", + "ja": "ダメージ {table:wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb1st}% of", + "ru": "Поглощение {table:wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb1st}% of", + "zh-TW": "吸收{table:wingDamageAbsorb1st}% of傷害" } }, { @@ -85,32 +85,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease1st}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", - "es": "Aumenta el daño de {wingDamageIncrease1st}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", - "ja": "ダメージ {wingDamageIncrease1st}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", - "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", - "ru": "Увеличение урона {wingDamageIncrease1st}% of", - "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", - "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + "en": "Increase {table:wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease1st}%", + "es": "Aumenta el daño de {table:wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease1st}% of", + "ja": "ダメージ {table:wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease1st}% of", + "ru": "Увеличение урона {table:wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease1st}% of", + "zh-TW": "增加 {table:wingDamageIncrease1st}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb1st}% of Damage", - "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb1st}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", - "ja": "ダメージ {wingDamageAbsorb1st}%吸収", - "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb1st}% of", - "ru": "Поглощение {wingDamageAbsorb1st}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", - "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + "en": "Absorb {table:wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb1st}% of", + "ja": "ダメージ {table:wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb1st}% of", + "ru": "Поглощение {table:wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb1st}% of", + "zh-TW": "吸收{table:wingDamageAbsorb1st}% of傷害" } }, { @@ -157,32 +157,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease1st}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", - "es": "Aumenta el daño de {wingDamageIncrease1st}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", - "ja": "ダメージ {wingDamageIncrease1st}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", - "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", - "ru": "Увеличение урона {wingDamageIncrease1st}% of", - "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", - "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + "en": "Increase {table:wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease1st}%", + "es": "Aumenta el daño de {table:wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease1st}% of", + "ja": "ダメージ {table:wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease1st}% of", + "ru": "Увеличение урона {table:wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease1st}% of", + "zh-TW": "增加 {table:wingDamageIncrease1st}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb1st}% of Damage", - "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb1st}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", - "ja": "ダメージ {wingDamageAbsorb1st}%吸収", - "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb1st}% of", - "ru": "Поглощение {wingDamageAbsorb1st}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", - "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + "en": "Absorb {table:wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb1st}% of", + "ja": "ダメージ {table:wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb1st}% of", + "ru": "Поглощение {table:wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb1st}% of", + "zh-TW": "吸收{table:wingDamageAbsorb1st}% of傷害" } }, { @@ -229,32 +229,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease2nd}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease2nd}%", - "es": "Aumenta el daño de {wingDamageIncrease2nd}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease2nd}% of", - "ja": "ダメージ {wingDamageIncrease2nd}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease2nd}%", - "pt": "Aumentar o dano de {wingDamageIncrease2nd}% of", - "ru": "Увеличение урона {wingDamageIncrease2nd}% of", - "tl": "Dagdagan ang {wingDamageIncrease2nd}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease2nd}% of", - "zh-TW": "增加 {wingDamageIncrease2nd}% of 傷害" + "en": "Increase {table:wingDamageIncrease2nd}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease2nd}%", + "es": "Aumenta el daño de {table:wingDamageIncrease2nd}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease2nd}% of", + "ja": "ダメージ {table:wingDamageIncrease2nd}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease2nd}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease2nd}% of", + "ru": "Увеличение урона {table:wingDamageIncrease2nd}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease2nd}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease2nd}% of", + "zh-TW": "增加 {table:wingDamageIncrease2nd}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb2nd}% of Damage", - "de": "Absorbiert {wingDamageAbsorb2nd}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb2nd}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb2nd}% of", - "ja": "ダメージ {wingDamageAbsorb2nd}%吸収", - "pl": "Pochłania {wingDamageAbsorb2nd}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb2nd}% of", - "ru": "Поглощение {wingDamageAbsorb2nd}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb2nd}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb2nd}% of", - "zh-TW": "吸收{wingDamageAbsorb2nd}% of傷害" + "en": "Absorb {table:wingDamageAbsorb2nd}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb2nd}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb2nd}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb2nd}% of", + "ja": "ダメージ {table:wingDamageAbsorb2nd}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb2nd}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb2nd}% of", + "ru": "Поглощение {table:wingDamageAbsorb2nd}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb2nd}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb2nd}% of", + "zh-TW": "吸收{table:wingDamageAbsorb2nd}% of傷害" } }, { @@ -300,32 +300,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease2nd}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease2nd}%", - "es": "Aumenta el daño de {wingDamageIncrease2nd}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease2nd}% of", - "ja": "ダメージ {wingDamageIncrease2nd}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease2nd}%", - "pt": "Aumentar o dano de {wingDamageIncrease2nd}% of", - "ru": "Увеличение урона {wingDamageIncrease2nd}% of", - "tl": "Dagdagan ang {wingDamageIncrease2nd}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease2nd}% of", - "zh-TW": "增加 {wingDamageIncrease2nd}% of 傷害" + "en": "Increase {table:wingDamageIncrease2nd}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease2nd}%", + "es": "Aumenta el daño de {table:wingDamageIncrease2nd}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease2nd}% of", + "ja": "ダメージ {table:wingDamageIncrease2nd}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease2nd}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease2nd}% of", + "ru": "Увеличение урона {table:wingDamageIncrease2nd}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease2nd}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease2nd}% of", + "zh-TW": "增加 {table:wingDamageIncrease2nd}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb2nd}% of Damage", - "de": "Absorbiert {wingDamageAbsorb2nd}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb2nd}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb2nd}% of", - "ja": "ダメージ {wingDamageAbsorb2nd}%吸収", - "pl": "Pochłania {wingDamageAbsorb2nd}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb2nd}% of", - "ru": "Поглощение {wingDamageAbsorb2nd}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb2nd}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb2nd}% of", - "zh-TW": "吸收{wingDamageAbsorb2nd}% of傷害" + "en": "Absorb {table:wingDamageAbsorb2nd}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb2nd}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb2nd}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb2nd}% of", + "ja": "ダメージ {table:wingDamageAbsorb2nd}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb2nd}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb2nd}% of", + "ru": "Поглощение {table:wingDamageAbsorb2nd}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb2nd}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb2nd}% of", + "zh-TW": "吸收{table:wingDamageAbsorb2nd}% of傷害" } }, { @@ -371,32 +371,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease2nd}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease2nd}%", - "es": "Aumenta el daño de {wingDamageIncrease2nd}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease2nd}% of", - "ja": "ダメージ {wingDamageIncrease2nd}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease2nd}%", - "pt": "Aumentar o dano de {wingDamageIncrease2nd}% of", - "ru": "Увеличение урона {wingDamageIncrease2nd}% of", - "tl": "Dagdagan ang {wingDamageIncrease2nd}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease2nd}% of", - "zh-TW": "增加 {wingDamageIncrease2nd}% of 傷害" + "en": "Increase {table:wingDamageIncrease2nd}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease2nd}%", + "es": "Aumenta el daño de {table:wingDamageIncrease2nd}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease2nd}% of", + "ja": "ダメージ {table:wingDamageIncrease2nd}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease2nd}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease2nd}% of", + "ru": "Увеличение урона {table:wingDamageIncrease2nd}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease2nd}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease2nd}% of", + "zh-TW": "增加 {table:wingDamageIncrease2nd}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb2nd}% of Damage", - "de": "Absorbiert {wingDamageAbsorb2nd}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb2nd}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb2nd}% of", - "ja": "ダメージ {wingDamageAbsorb2nd}%吸収", - "pl": "Pochłania {wingDamageAbsorb2nd}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb2nd}% of", - "ru": "Поглощение {wingDamageAbsorb2nd}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb2nd}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb2nd}% of", - "zh-TW": "吸收{wingDamageAbsorb2nd}% of傷害" + "en": "Absorb {table:wingDamageAbsorb2nd}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb2nd}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb2nd}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb2nd}% of", + "ja": "ダメージ {table:wingDamageAbsorb2nd}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb2nd}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb2nd}% of", + "ru": "Поглощение {table:wingDamageAbsorb2nd}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb2nd}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb2nd}% of", + "zh-TW": "吸收{table:wingDamageAbsorb2nd}% of傷害" } }, { @@ -442,32 +442,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease2nd}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease2nd}%", - "es": "Aumenta el daño de {wingDamageIncrease2nd}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease2nd}% of", - "ja": "ダメージ {wingDamageIncrease2nd}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease2nd}%", - "pt": "Aumentar o dano de {wingDamageIncrease2nd}% of", - "ru": "Увеличение урона {wingDamageIncrease2nd}% of", - "tl": "Dagdagan ang {wingDamageIncrease2nd}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease2nd}% of", - "zh-TW": "增加 {wingDamageIncrease2nd}% of 傷害" + "en": "Increase {table:wingDamageIncrease2nd}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease2nd}%", + "es": "Aumenta el daño de {table:wingDamageIncrease2nd}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease2nd}% of", + "ja": "ダメージ {table:wingDamageIncrease2nd}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease2nd}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease2nd}% of", + "ru": "Увеличение урона {table:wingDamageIncrease2nd}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease2nd}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease2nd}% of", + "zh-TW": "增加 {table:wingDamageIncrease2nd}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb2nd}% of Damage", - "de": "Absorbiert {wingDamageAbsorb2nd}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb2nd}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb2nd}% of", - "ja": "ダメージ {wingDamageAbsorb2nd}%吸収", - "pl": "Pochłania {wingDamageAbsorb2nd}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb2nd}% of", - "ru": "Поглощение {wingDamageAbsorb2nd}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb2nd}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb2nd}% of", - "zh-TW": "吸收{wingDamageAbsorb2nd}% of傷害" + "en": "Absorb {table:wingDamageAbsorb2nd}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb2nd}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb2nd}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb2nd}% of", + "ja": "ダメージ {table:wingDamageAbsorb2nd}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb2nd}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb2nd}% of", + "ru": "Поглощение {table:wingDamageAbsorb2nd}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb2nd}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb2nd}% of", + "zh-TW": "吸收{table:wingDamageAbsorb2nd}% of傷害" } }, { @@ -1008,32 +1008,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease3rd}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease3rd}%", - "es": "Aumenta el daño de {wingDamageIncrease3rd}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease3rd}% of", - "ja": "ダメージ {wingDamageIncrease3rd}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease3rd}%", - "pt": "Aumentar o dano de {wingDamageIncrease3rd}% of", - "ru": "Увеличение урона {wingDamageIncrease3rd}% of", - "tl": "Dagdagan ang {wingDamageIncrease3rd}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease3rd}% of", - "zh-TW": "增加 {wingDamageIncrease3rd}% of 傷害" + "en": "Increase {table:wingDamageIncrease3rd}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease3rd}%", + "es": "Aumenta el daño de {table:wingDamageIncrease3rd}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease3rd}% of", + "ja": "ダメージ {table:wingDamageIncrease3rd}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease3rd}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease3rd}% of", + "ru": "Увеличение урона {table:wingDamageIncrease3rd}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease3rd}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease3rd}% of", + "zh-TW": "增加 {table:wingDamageIncrease3rd}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb3rd}% of Damage", - "de": "Absorbiert {wingDamageAbsorb3rd}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb3rd}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb3rd}% of", - "ja": "ダメージ {wingDamageAbsorb3rd}%吸収", - "pl": "Pochłania {wingDamageAbsorb3rd}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb3rd}% of", - "ru": "Поглощение {wingDamageAbsorb3rd}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb3rd}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb3rd}% of", - "zh-TW": "吸收{wingDamageAbsorb3rd}% of傷害" + "en": "Absorb {table:wingDamageAbsorb3rd}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb3rd}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb3rd}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb3rd}% of", + "ja": "ダメージ {table:wingDamageAbsorb3rd}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb3rd}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb3rd}% of", + "ru": "Поглощение {table:wingDamageAbsorb3rd}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb3rd}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb3rd}% of", + "zh-TW": "吸收{table:wingDamageAbsorb3rd}% of傷害" } }, { @@ -1079,32 +1079,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease3rd}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease3rd}%", - "es": "Aumenta el daño de {wingDamageIncrease3rd}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease3rd}% of", - "ja": "ダメージ {wingDamageIncrease3rd}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease3rd}%", - "pt": "Aumentar o dano de {wingDamageIncrease3rd}% of", - "ru": "Увеличение урона {wingDamageIncrease3rd}% of", - "tl": "Dagdagan ang {wingDamageIncrease3rd}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease3rd}% of", - "zh-TW": "增加 {wingDamageIncrease3rd}% of 傷害" + "en": "Increase {table:wingDamageIncrease3rd}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease3rd}%", + "es": "Aumenta el daño de {table:wingDamageIncrease3rd}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease3rd}% of", + "ja": "ダメージ {table:wingDamageIncrease3rd}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease3rd}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease3rd}% of", + "ru": "Увеличение урона {table:wingDamageIncrease3rd}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease3rd}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease3rd}% of", + "zh-TW": "增加 {table:wingDamageIncrease3rd}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb3rd}% of Damage", - "de": "Absorbiert {wingDamageAbsorb3rd}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb3rd}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb3rd}% of", - "ja": "ダメージ {wingDamageAbsorb3rd}%吸収", - "pl": "Pochłania {wingDamageAbsorb3rd}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb3rd}% of", - "ru": "Поглощение {wingDamageAbsorb3rd}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb3rd}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb3rd}% of", - "zh-TW": "吸收{wingDamageAbsorb3rd}% of傷害" + "en": "Absorb {table:wingDamageAbsorb3rd}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb3rd}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb3rd}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb3rd}% of", + "ja": "ダメージ {table:wingDamageAbsorb3rd}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb3rd}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb3rd}% of", + "ru": "Поглощение {table:wingDamageAbsorb3rd}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb3rd}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb3rd}% of", + "zh-TW": "吸收{table:wingDamageAbsorb3rd}% of傷害" } }, { @@ -1150,32 +1150,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease3rd}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease3rd}%", - "es": "Aumenta el daño de {wingDamageIncrease3rd}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease3rd}% of", - "ja": "ダメージ {wingDamageIncrease3rd}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease3rd}%", - "pt": "Aumentar o dano de {wingDamageIncrease3rd}% of", - "ru": "Увеличение урона {wingDamageIncrease3rd}% of", - "tl": "Dagdagan ang {wingDamageIncrease3rd}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease3rd}% of", - "zh-TW": "增加 {wingDamageIncrease3rd}% of 傷害" + "en": "Increase {table:wingDamageIncrease3rd}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease3rd}%", + "es": "Aumenta el daño de {table:wingDamageIncrease3rd}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease3rd}% of", + "ja": "ダメージ {table:wingDamageIncrease3rd}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease3rd}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease3rd}% of", + "ru": "Увеличение урона {table:wingDamageIncrease3rd}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease3rd}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease3rd}% of", + "zh-TW": "增加 {table:wingDamageIncrease3rd}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb3rd}% of Damage", - "de": "Absorbiert {wingDamageAbsorb3rd}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb3rd}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb3rd}% of", - "ja": "ダメージ {wingDamageAbsorb3rd}%吸収", - "pl": "Pochłania {wingDamageAbsorb3rd}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb3rd}% of", - "ru": "Поглощение {wingDamageAbsorb3rd}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb3rd}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb3rd}% of", - "zh-TW": "吸收{wingDamageAbsorb3rd}% of傷害" + "en": "Absorb {table:wingDamageAbsorb3rd}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb3rd}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb3rd}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb3rd}% of", + "ja": "ダメージ {table:wingDamageAbsorb3rd}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb3rd}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb3rd}% of", + "ru": "Поглощение {table:wingDamageAbsorb3rd}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb3rd}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb3rd}% of", + "zh-TW": "吸收{table:wingDamageAbsorb3rd}% of傷害" } }, { @@ -1221,32 +1221,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease3rd}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease3rd}%", - "es": "Aumenta el daño de {wingDamageIncrease3rd}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease3rd}% of", - "ja": "ダメージ {wingDamageIncrease3rd}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease3rd}%", - "pt": "Aumentar o dano de {wingDamageIncrease3rd}% of", - "ru": "Увеличение урона {wingDamageIncrease3rd}% of", - "tl": "Dagdagan ang {wingDamageIncrease3rd}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease3rd}% of", - "zh-TW": "增加 {wingDamageIncrease3rd}% of 傷害" + "en": "Increase {table:wingDamageIncrease3rd}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease3rd}%", + "es": "Aumenta el daño de {table:wingDamageIncrease3rd}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease3rd}% of", + "ja": "ダメージ {table:wingDamageIncrease3rd}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease3rd}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease3rd}% of", + "ru": "Увеличение урона {table:wingDamageIncrease3rd}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease3rd}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease3rd}% of", + "zh-TW": "增加 {table:wingDamageIncrease3rd}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb3rd}% of Damage", - "de": "Absorbiert {wingDamageAbsorb3rd}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb3rd}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb3rd}% of", - "ja": "ダメージ {wingDamageAbsorb3rd}%吸収", - "pl": "Pochłania {wingDamageAbsorb3rd}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb3rd}% of", - "ru": "Поглощение {wingDamageAbsorb3rd}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb3rd}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb3rd}% of", - "zh-TW": "吸收{wingDamageAbsorb3rd}% of傷害" + "en": "Absorb {table:wingDamageAbsorb3rd}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb3rd}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb3rd}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb3rd}% of", + "ja": "ダメージ {table:wingDamageAbsorb3rd}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb3rd}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb3rd}% of", + "ru": "Поглощение {table:wingDamageAbsorb3rd}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb3rd}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb3rd}% of", + "zh-TW": "吸收{table:wingDamageAbsorb3rd}% of傷害" } }, { @@ -1292,32 +1292,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease3rd}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease3rd}%", - "es": "Aumenta el daño de {wingDamageIncrease3rd}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease3rd}% of", - "ja": "ダメージ {wingDamageIncrease3rd}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease3rd}%", - "pt": "Aumentar o dano de {wingDamageIncrease3rd}% of", - "ru": "Увеличение урона {wingDamageIncrease3rd}% of", - "tl": "Dagdagan ang {wingDamageIncrease3rd}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease3rd}% of", - "zh-TW": "增加 {wingDamageIncrease3rd}% of 傷害" + "en": "Increase {table:wingDamageIncrease3rd}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease3rd}%", + "es": "Aumenta el daño de {table:wingDamageIncrease3rd}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease3rd}% of", + "ja": "ダメージ {table:wingDamageIncrease3rd}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease3rd}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease3rd}% of", + "ru": "Увеличение урона {table:wingDamageIncrease3rd}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease3rd}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease3rd}% of", + "zh-TW": "增加 {table:wingDamageIncrease3rd}% of 傷害" } }, { "text": { - "en": "Absorb {capeDamageAbsorb3rd}% of Damage", - "de": "Absorbiert {capeDamageAbsorb3rd}% des Schadens", - "es": "Absorber daño {capeDamageAbsorb3rd}% of", - "id": "Menyerap Kerusakan {capeDamageAbsorb3rd}% of", - "ja": "ダメージ {capeDamageAbsorb3rd}%吸収", - "pl": "Pochłania {capeDamageAbsorb3rd}% obrażeń", - "pt": "Absorver Dano {capeDamageAbsorb3rd}% of", - "ru": "Поглощение {capeDamageAbsorb3rd}% of урона", - "tl": "Isipsip ang {capeDamageAbsorb3rd}% of Pinsala", - "uk": "Поглинання шкоди {capeDamageAbsorb3rd}% of", - "zh-TW": "吸收{capeDamageAbsorb3rd}% of傷害" + "en": "Absorb {table:capeDamageAbsorb3rd}% of Damage", + "de": "Absorbiert {table:capeDamageAbsorb3rd}% des Schadens", + "es": "Absorber daño {table:capeDamageAbsorb3rd}% of", + "id": "Menyerap Kerusakan {table:capeDamageAbsorb3rd}% of", + "ja": "ダメージ {table:capeDamageAbsorb3rd}%吸収", + "pl": "Pochłania {table:capeDamageAbsorb3rd}% obrażeń", + "pt": "Absorver Dano {table:capeDamageAbsorb3rd}% of", + "ru": "Поглощение {table:capeDamageAbsorb3rd}% of урона", + "tl": "Isipsip ang {table:capeDamageAbsorb3rd}% of Pinsala", + "uk": "Поглинання шкоди {table:capeDamageAbsorb3rd}% of", + "zh-TW": "吸收{table:capeDamageAbsorb3rd}% of傷害" } }, { @@ -1363,32 +1363,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease1st}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", - "es": "Aumenta el daño de {wingDamageIncrease1st}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", - "ja": "ダメージ {wingDamageIncrease1st}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", - "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", - "ru": "Увеличение урона {wingDamageIncrease1st}% of", - "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", - "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + "en": "Increase {table:wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease1st}%", + "es": "Aumenta el daño de {table:wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease1st}% of", + "ja": "ダメージ {table:wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease1st}% of", + "ru": "Увеличение урона {table:wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease1st}% of", + "zh-TW": "增加 {table:wingDamageIncrease1st}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb1st}% of Damage", - "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb1st}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", - "ja": "ダメージ {wingDamageAbsorb1st}%吸収", - "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb1st}% of", - "ru": "Поглощение {wingDamageAbsorb1st}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", - "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + "en": "Absorb {table:wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb1st}% of", + "ja": "ダメージ {table:wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb1st}% of", + "ru": "Поглощение {table:wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb1st}% of", + "zh-TW": "吸收{table:wingDamageAbsorb1st}% of傷害" } }, { @@ -1434,32 +1434,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease2nd}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease2nd}%", - "es": "Aumenta el daño de {wingDamageIncrease2nd}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease2nd}% of", - "ja": "ダメージ {wingDamageIncrease2nd}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease2nd}%", - "pt": "Aumentar o dano de {wingDamageIncrease2nd}% of", - "ru": "Увеличение урона {wingDamageIncrease2nd}% of", - "tl": "Dagdagan ang {wingDamageIncrease2nd}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease2nd}% of", - "zh-TW": "增加 {wingDamageIncrease2nd}% of 傷害" + "en": "Increase {table:wingDamageIncrease2nd}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease2nd}%", + "es": "Aumenta el daño de {table:wingDamageIncrease2nd}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease2nd}% of", + "ja": "ダメージ {table:wingDamageIncrease2nd}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease2nd}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease2nd}% of", + "ru": "Увеличение урона {table:wingDamageIncrease2nd}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease2nd}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease2nd}% of", + "zh-TW": "增加 {table:wingDamageIncrease2nd}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb2nd}% of Damage", - "de": "Absorbiert {wingDamageAbsorb2nd}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb2nd}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb2nd}% of", - "ja": "ダメージ {wingDamageAbsorb2nd}%吸収", - "pl": "Pochłania {wingDamageAbsorb2nd}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb2nd}% of", - "ru": "Поглощение {wingDamageAbsorb2nd}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb2nd}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb2nd}% of", - "zh-TW": "吸收{wingDamageAbsorb2nd}% of傷害" + "en": "Absorb {table:wingDamageAbsorb2nd}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb2nd}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb2nd}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb2nd}% of", + "ja": "ダメージ {table:wingDamageAbsorb2nd}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb2nd}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb2nd}% of", + "ru": "Поглощение {table:wingDamageAbsorb2nd}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb2nd}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb2nd}% of", + "zh-TW": "吸收{table:wingDamageAbsorb2nd}% of傷害" } }, { @@ -1505,32 +1505,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease3rd}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease3rd}%", - "es": "Aumenta el daño de {wingDamageIncrease3rd}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease3rd}% of", - "ja": "ダメージ {wingDamageIncrease3rd}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease3rd}%", - "pt": "Aumentar o dano de {wingDamageIncrease3rd}% of", - "ru": "Увеличение урона {wingDamageIncrease3rd}% of", - "tl": "Dagdagan ang {wingDamageIncrease3rd}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease3rd}% of", - "zh-TW": "增加 {wingDamageIncrease3rd}% of 傷害" + "en": "Increase {table:wingDamageIncrease3rd}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease3rd}%", + "es": "Aumenta el daño de {table:wingDamageIncrease3rd}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease3rd}% of", + "ja": "ダメージ {table:wingDamageIncrease3rd}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease3rd}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease3rd}% of", + "ru": "Увеличение урона {table:wingDamageIncrease3rd}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease3rd}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease3rd}% of", + "zh-TW": "增加 {table:wingDamageIncrease3rd}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb3rd}% of Damage", - "de": "Absorbiert {wingDamageAbsorb3rd}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb3rd}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb3rd}% of", - "ja": "ダメージ {wingDamageAbsorb3rd}%吸収", - "pl": "Pochłania {wingDamageAbsorb3rd}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb3rd}% of", - "ru": "Поглощение {wingDamageAbsorb3rd}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb3rd}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb3rd}% of", - "zh-TW": "吸收{wingDamageAbsorb3rd}% of傷害" + "en": "Absorb {table:wingDamageAbsorb3rd}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb3rd}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb3rd}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb3rd}% of", + "ja": "ダメージ {table:wingDamageAbsorb3rd}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb3rd}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb3rd}% of", + "ru": "Поглощение {table:wingDamageAbsorb3rd}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb3rd}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb3rd}% of", + "zh-TW": "吸收{table:wingDamageAbsorb3rd}% of傷害" } }, { @@ -1673,32 +1673,32 @@ "description": [ { "text": { - "en": "Increase {capeDamageIncrease}% of Damage", - "de": "Erhöht den Schaden um {capeDamageIncrease}%", - "es": "Aumenta el daño de {capeDamageIncrease}% of", - "id": "Meningkatkan Kerusakan {capeDamageIncrease}% of", - "ja": "ダメージ {capeDamageIncrease}%増加", - "pl": "Zwiększa obrażenia o {capeDamageIncrease}%", - "pt": "Aumentar o dano de {capeDamageIncrease}% of", - "ru": "Увеличение урона {capeDamageIncrease}% of", - "tl": "Dagdagan ang {capeDamageIncrease}% of Pinsala", - "uk": "Збільшення шкоди на {capeDamageIncrease}% of", - "zh-TW": "增加 {capeDamageIncrease}% of 傷害" + "en": "Increase {table:capeDamageIncrease}% of Damage", + "de": "Erhöht den Schaden um {table:capeDamageIncrease}%", + "es": "Aumenta el daño de {table:capeDamageIncrease}% of", + "id": "Meningkatkan Kerusakan {table:capeDamageIncrease}% of", + "ja": "ダメージ {table:capeDamageIncrease}%増加", + "pl": "Zwiększa obrażenia o {table:capeDamageIncrease}%", + "pt": "Aumentar o dano de {table:capeDamageIncrease}% of", + "ru": "Увеличение урона {table:capeDamageIncrease}% of", + "tl": "Dagdagan ang {table:capeDamageIncrease}% of Pinsala", + "uk": "Збільшення шкоди на {table:capeDamageIncrease}% of", + "zh-TW": "增加 {table:capeDamageIncrease}% of 傷害" } }, { "text": { - "en": "Absorb {capeOfFighterDamageAbsorb}% of Damage", - "de": "Absorbiert {capeOfFighterDamageAbsorb}% des Schadens", - "es": "Absorber daño {capeOfFighterDamageAbsorb}% of", - "id": "Menyerap Kerusakan {capeOfFighterDamageAbsorb}% of", - "ja": "ダメージ {capeOfFighterDamageAbsorb}%吸収", - "pl": "Pochłania {capeOfFighterDamageAbsorb}% obrażeń", - "pt": "Absorver Dano {capeOfFighterDamageAbsorb}% of", - "ru": "Поглощение {capeOfFighterDamageAbsorb}% of урона", - "tl": "Isipsip ang {capeOfFighterDamageAbsorb}% of Pinsala", - "uk": "Поглинання шкоди {capeOfFighterDamageAbsorb}% of", - "zh-TW": "吸收{capeOfFighterDamageAbsorb}% of傷害" + "en": "Absorb {table:capeOfFighterDamageAbsorb}% of Damage", + "de": "Absorbiert {table:capeOfFighterDamageAbsorb}% des Schadens", + "es": "Absorber daño {table:capeOfFighterDamageAbsorb}% of", + "id": "Menyerap Kerusakan {table:capeOfFighterDamageAbsorb}% of", + "ja": "ダメージ {table:capeOfFighterDamageAbsorb}%吸収", + "pl": "Pochłania {table:capeOfFighterDamageAbsorb}% obrażeń", + "pt": "Absorver Dano {table:capeOfFighterDamageAbsorb}% of", + "ru": "Поглощение {table:capeOfFighterDamageAbsorb}% of урона", + "tl": "Isipsip ang {table:capeOfFighterDamageAbsorb}% of Pinsala", + "uk": "Поглинання шкоди {table:capeOfFighterDamageAbsorb}% of", + "zh-TW": "吸收{table:capeOfFighterDamageAbsorb}% of傷害" } } ], @@ -1729,32 +1729,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease3rd}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease3rd}%", - "es": "Aumenta el daño de {wingDamageIncrease3rd}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease3rd}% of", - "ja": "ダメージ {wingDamageIncrease3rd}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease3rd}%", - "pt": "Aumentar o dano de {wingDamageIncrease3rd}% of", - "ru": "Увеличение урона {wingDamageIncrease3rd}% of", - "tl": "Dagdagan ang {wingDamageIncrease3rd}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease3rd}% of", - "zh-TW": "增加 {wingDamageIncrease3rd}% of 傷害" + "en": "Increase {table:wingDamageIncrease3rd}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease3rd}%", + "es": "Aumenta el daño de {table:wingDamageIncrease3rd}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease3rd}% of", + "ja": "ダメージ {table:wingDamageIncrease3rd}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease3rd}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease3rd}% of", + "ru": "Увеличение урона {table:wingDamageIncrease3rd}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease3rd}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease3rd}% of", + "zh-TW": "增加 {table:wingDamageIncrease3rd}% of 傷害" } }, { "text": { - "en": "Absorb {capeDamageAbsorb3rd}% of Damage", - "de": "Absorbiert {capeDamageAbsorb3rd}% des Schadens", - "es": "Absorber daño {capeDamageAbsorb3rd}% of", - "id": "Menyerap Kerusakan {capeDamageAbsorb3rd}% of", - "ja": "ダメージ {capeDamageAbsorb3rd}%吸収", - "pl": "Pochłania {capeDamageAbsorb3rd}% obrażeń", - "pt": "Absorver Dano {capeDamageAbsorb3rd}% of", - "ru": "Поглощение {capeDamageAbsorb3rd}% of урона", - "tl": "Isipsip ang {capeDamageAbsorb3rd}% of Pinsala", - "uk": "Поглинання шкоди {capeDamageAbsorb3rd}% of", - "zh-TW": "吸收{capeDamageAbsorb3rd}% of傷害" + "en": "Absorb {table:capeDamageAbsorb3rd}% of Damage", + "de": "Absorbiert {table:capeDamageAbsorb3rd}% des Schadens", + "es": "Absorber daño {table:capeDamageAbsorb3rd}% of", + "id": "Menyerap Kerusakan {table:capeDamageAbsorb3rd}% of", + "ja": "ダメージ {table:capeDamageAbsorb3rd}%吸収", + "pl": "Pochłania {table:capeDamageAbsorb3rd}% obrażeń", + "pt": "Absorver Dano {table:capeDamageAbsorb3rd}% of", + "ru": "Поглощение {table:capeDamageAbsorb3rd}% of урона", + "tl": "Isipsip ang {table:capeDamageAbsorb3rd}% of Pinsala", + "uk": "Поглинання шкоди {table:capeDamageAbsorb3rd}% of", + "zh-TW": "吸收{table:capeDamageAbsorb3rd}% of傷害" } }, { @@ -2553,32 +2553,32 @@ "description": [ { "text": { - "en": "Increase {capeDamageIncrease}% of Damage", - "de": "Erhöht den Schaden um {capeDamageIncrease}%", - "es": "Aumenta el daño de {capeDamageIncrease}% of", - "id": "Meningkatkan Kerusakan {capeDamageIncrease}% of", - "ja": "ダメージ {capeDamageIncrease}%増加", - "pl": "Zwiększa obrażenia o {capeDamageIncrease}%", - "pt": "Aumentar o dano de {capeDamageIncrease}% of", - "ru": "Увеличение урона {capeDamageIncrease}% of", - "tl": "Dagdagan ang {capeDamageIncrease}% of Pinsala", - "uk": "Збільшення шкоди на {capeDamageIncrease}% of", - "zh-TW": "增加 {capeDamageIncrease}% of 傷害" + "en": "Increase {table:capeDamageIncrease}% of Damage", + "de": "Erhöht den Schaden um {table:capeDamageIncrease}%", + "es": "Aumenta el daño de {table:capeDamageIncrease}% of", + "id": "Meningkatkan Kerusakan {table:capeDamageIncrease}% of", + "ja": "ダメージ {table:capeDamageIncrease}%増加", + "pl": "Zwiększa obrażenia o {table:capeDamageIncrease}%", + "pt": "Aumentar o dano de {table:capeDamageIncrease}% of", + "ru": "Увеличение урона {table:capeDamageIncrease}% of", + "tl": "Dagdagan ang {table:capeDamageIncrease}% of Pinsala", + "uk": "Збільшення шкоди на {table:capeDamageIncrease}% of", + "zh-TW": "增加 {table:capeDamageIncrease}% of 傷害" } }, { "text": { - "en": "Absorb {smallCapeDamageAbsorb}% of Damage", - "de": "Absorbiert {smallCapeDamageAbsorb}% des Schadens", - "es": "Absorber daño {smallCapeDamageAbsorb}% of", - "id": "Menyerap Kerusakan {smallCapeDamageAbsorb}% of", - "ja": "ダメージ {smallCapeDamageAbsorb}%吸収", - "pl": "Pochłania {smallCapeDamageAbsorb}% obrażeń", - "pt": "Absorver Dano {smallCapeDamageAbsorb}% of", - "ru": "Поглощение {smallCapeDamageAbsorb}% of урона", - "tl": "Isipsip ang {smallCapeDamageAbsorb}% of Pinsala", - "uk": "Поглинання шкоди {smallCapeDamageAbsorb}% of", - "zh-TW": "吸收{smallCapeDamageAbsorb}% of傷害" + "en": "Absorb {table:smallCapeDamageAbsorb}% of Damage", + "de": "Absorbiert {table:smallCapeDamageAbsorb}% des Schadens", + "es": "Absorber daño {table:smallCapeDamageAbsorb}% of", + "id": "Menyerap Kerusakan {table:smallCapeDamageAbsorb}% of", + "ja": "ダメージ {table:smallCapeDamageAbsorb}%吸収", + "pl": "Pochłania {table:smallCapeDamageAbsorb}% obrażeń", + "pt": "Absorver Dano {table:smallCapeDamageAbsorb}% of", + "ru": "Поглощение {table:smallCapeDamageAbsorb}% of урона", + "tl": "Isipsip ang {table:smallCapeDamageAbsorb}% of Pinsala", + "uk": "Поглинання шкоди {table:smallCapeDamageAbsorb}% of", + "zh-TW": "吸收{table:smallCapeDamageAbsorb}% of傷害" } }, { @@ -2630,32 +2630,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease1st}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", - "es": "Aumenta el daño de {wingDamageIncrease1st}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", - "ja": "ダメージ {wingDamageIncrease1st}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", - "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", - "ru": "Увеличение урона {wingDamageIncrease1st}% of", - "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", - "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + "en": "Increase {table:wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease1st}%", + "es": "Aumenta el daño de {table:wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease1st}% of", + "ja": "ダメージ {table:wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease1st}% of", + "ru": "Увеличение урона {table:wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease1st}% of", + "zh-TW": "增加 {table:wingDamageIncrease1st}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb1st}% of Damage", - "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb1st}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", - "ja": "ダメージ {wingDamageAbsorb1st}%吸収", - "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb1st}% of", - "ru": "Поглощение {wingDamageAbsorb1st}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", - "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + "en": "Absorb {table:wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb1st}% of", + "ja": "ダメージ {table:wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb1st}% of", + "ru": "Поглощение {table:wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb1st}% of", + "zh-TW": "吸收{table:wingDamageAbsorb1st}% of傷害" } }, { @@ -2707,32 +2707,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease1st}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", - "es": "Aumenta el daño de {wingDamageIncrease1st}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", - "ja": "ダメージ {wingDamageIncrease1st}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", - "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", - "ru": "Увеличение урона {wingDamageIncrease1st}% of", - "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", - "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + "en": "Increase {table:wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease1st}%", + "es": "Aumenta el daño de {table:wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease1st}% of", + "ja": "ダメージ {table:wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease1st}% of", + "ru": "Увеличение урона {table:wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease1st}% of", + "zh-TW": "增加 {table:wingDamageIncrease1st}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb1st}% of Damage", - "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb1st}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", - "ja": "ダメージ {wingDamageAbsorb1st}%吸収", - "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb1st}% of", - "ru": "Поглощение {wingDamageAbsorb1st}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", - "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + "en": "Absorb {table:wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb1st}% of", + "ja": "ダメージ {table:wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb1st}% of", + "ru": "Поглощение {table:wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb1st}% of", + "zh-TW": "吸收{table:wingDamageAbsorb1st}% of傷害" } }, { @@ -2784,32 +2784,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease1st}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", - "es": "Aumenta el daño de {wingDamageIncrease1st}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", - "ja": "ダメージ {wingDamageIncrease1st}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", - "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", - "ru": "Увеличение урона {wingDamageIncrease1st}% of", - "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", - "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + "en": "Increase {table:wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease1st}%", + "es": "Aumenta el daño de {table:wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease1st}% of", + "ja": "ダメージ {table:wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease1st}% of", + "ru": "Увеличение урона {table:wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease1st}% of", + "zh-TW": "增加 {table:wingDamageIncrease1st}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb1st}% of Damage", - "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb1st}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", - "ja": "ダメージ {wingDamageAbsorb1st}%吸収", - "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb1st}% of", - "ru": "Поглощение {wingDamageAbsorb1st}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", - "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + "en": "Absorb {table:wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb1st}% of", + "ja": "ダメージ {table:wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb1st}% of", + "ru": "Поглощение {table:wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb1st}% of", + "zh-TW": "吸收{table:wingDamageAbsorb1st}% of傷害" } }, { @@ -2862,32 +2862,32 @@ "description": [ { "text": { - "en": "Increase {wingDamageIncrease1st}% of Damage", - "de": "Erhöht den Schaden um {wingDamageIncrease1st}%", - "es": "Aumenta el daño de {wingDamageIncrease1st}% of", - "id": "Meningkatkan Kerusakan {wingDamageIncrease1st}% of", - "ja": "ダメージ {wingDamageIncrease1st}%増加", - "pl": "Zwiększa obrażenia o {wingDamageIncrease1st}%", - "pt": "Aumentar o dano de {wingDamageIncrease1st}% of", - "ru": "Увеличение урона {wingDamageIncrease1st}% of", - "tl": "Dagdagan ang {wingDamageIncrease1st}% of Pinsala", - "uk": "Збільшення шкоди на {wingDamageIncrease1st}% of", - "zh-TW": "增加 {wingDamageIncrease1st}% of 傷害" + "en": "Increase {table:wingDamageIncrease1st}% of Damage", + "de": "Erhöht den Schaden um {table:wingDamageIncrease1st}%", + "es": "Aumenta el daño de {table:wingDamageIncrease1st}% of", + "id": "Meningkatkan Kerusakan {table:wingDamageIncrease1st}% of", + "ja": "ダメージ {table:wingDamageIncrease1st}%増加", + "pl": "Zwiększa obrażenia o {table:wingDamageIncrease1st}%", + "pt": "Aumentar o dano de {table:wingDamageIncrease1st}% of", + "ru": "Увеличение урона {table:wingDamageIncrease1st}% of", + "tl": "Dagdagan ang {table:wingDamageIncrease1st}% of Pinsala", + "uk": "Збільшення шкоди на {table:wingDamageIncrease1st}% of", + "zh-TW": "增加 {table:wingDamageIncrease1st}% of 傷害" } }, { "text": { - "en": "Absorb {wingDamageAbsorb1st}% of Damage", - "de": "Absorbiert {wingDamageAbsorb1st}% des Schadens", - "es": "Absorber daño {wingDamageAbsorb1st}% of", - "id": "Menyerap Kerusakan {wingDamageAbsorb1st}% of", - "ja": "ダメージ {wingDamageAbsorb1st}%吸収", - "pl": "Pochłania {wingDamageAbsorb1st}% obrażeń", - "pt": "Absorver Dano {wingDamageAbsorb1st}% of", - "ru": "Поглощение {wingDamageAbsorb1st}% of урона", - "tl": "Isipsip ang {wingDamageAbsorb1st}% of Pinsala", - "uk": "Поглинання шкоди {wingDamageAbsorb1st}% of", - "zh-TW": "吸收{wingDamageAbsorb1st}% of傷害" + "en": "Absorb {table:wingDamageAbsorb1st}% of Damage", + "de": "Absorbiert {table:wingDamageAbsorb1st}% des Schadens", + "es": "Absorber daño {table:wingDamageAbsorb1st}% of", + "id": "Menyerap Kerusakan {table:wingDamageAbsorb1st}% of", + "ja": "ダメージ {table:wingDamageAbsorb1st}%吸収", + "pl": "Pochłania {table:wingDamageAbsorb1st}% obrażeń", + "pt": "Absorver Dano {table:wingDamageAbsorb1st}% of", + "ru": "Поглощение {table:wingDamageAbsorb1st}% of урона", + "tl": "Isipsip ang {table:wingDamageAbsorb1st}% of Pinsala", + "uk": "Поглинання шкоди {table:wingDamageAbsorb1st}% of", + "zh-TW": "吸收{table:wingDamageAbsorb1st}% of傷害" } }, { @@ -2940,32 +2940,32 @@ "description": [ { "text": { - "en": "Increase {capeDamageIncrease}% of Damage", - "de": "Erhöht den Schaden um {capeDamageIncrease}%", - "es": "Aumenta el daño de {capeDamageIncrease}% of", - "id": "Meningkatkan Kerusakan {capeDamageIncrease}% of", - "ja": "ダメージ {capeDamageIncrease}%増加", - "pl": "Zwiększa obrażenia o {capeDamageIncrease}%", - "pt": "Aumentar o dano de {capeDamageIncrease}% of", - "ru": "Увеличение урона {capeDamageIncrease}% of", - "tl": "Dagdagan ang {capeDamageIncrease}% of Pinsala", - "uk": "Збільшення шкоди на {capeDamageIncrease}% of", - "zh-TW": "增加 {capeDamageIncrease}% of 傷害" + "en": "Increase {table:capeDamageIncrease}% of Damage", + "de": "Erhöht den Schaden um {table:capeDamageIncrease}%", + "es": "Aumenta el daño de {table:capeDamageIncrease}% of", + "id": "Meningkatkan Kerusakan {table:capeDamageIncrease}% of", + "ja": "ダメージ {table:capeDamageIncrease}%増加", + "pl": "Zwiększa obrażenia o {table:capeDamageIncrease}%", + "pt": "Aumentar o dano de {table:capeDamageIncrease}% of", + "ru": "Увеличение урона {table:capeDamageIncrease}% of", + "tl": "Dagdagan ang {table:capeDamageIncrease}% of Pinsala", + "uk": "Збільшення шкоди на {table:capeDamageIncrease}% of", + "zh-TW": "增加 {table:capeDamageIncrease}% of 傷害" } }, { "text": { - "en": "Absorb {smallCapeDamageAbsorb}% of Damage", - "de": "Absorbiert {smallCapeDamageAbsorb}% des Schadens", - "es": "Absorber daño {smallCapeDamageAbsorb}% of", - "id": "Menyerap Kerusakan {smallCapeDamageAbsorb}% of", - "ja": "ダメージ {smallCapeDamageAbsorb}%吸収", - "pl": "Pochłania {smallCapeDamageAbsorb}% obrażeń", - "pt": "Absorver Dano {smallCapeDamageAbsorb}% of", - "ru": "Поглощение {smallCapeDamageAbsorb}% of урона", - "tl": "Isipsip ang {smallCapeDamageAbsorb}% of Pinsala", - "uk": "Поглинання шкоди {smallCapeDamageAbsorb}% of", - "zh-TW": "吸收{smallCapeDamageAbsorb}% of傷害" + "en": "Absorb {table:smallCapeDamageAbsorb}% of Damage", + "de": "Absorbiert {table:smallCapeDamageAbsorb}% des Schadens", + "es": "Absorber daño {table:smallCapeDamageAbsorb}% of", + "id": "Menyerap Kerusakan {table:smallCapeDamageAbsorb}% of", + "ja": "ダメージ {table:smallCapeDamageAbsorb}%吸収", + "pl": "Pochłania {table:smallCapeDamageAbsorb}% obrażeń", + "pt": "Absorver Dano {table:smallCapeDamageAbsorb}% of", + "ru": "Поглощение {table:smallCapeDamageAbsorb}% of урона", + "tl": "Isipsip ang {table:smallCapeDamageAbsorb}% of Pinsala", + "uk": "Поглинання шкоди {table:smallCapeDamageAbsorb}% of", + "zh-TW": "吸收{table:smallCapeDamageAbsorb}% of傷害" } }, { diff --git a/src/bin/Data/Items/Group13_Helper.json b/src/bin/Data/Items/Group13_Helper.json index e8c5f4c571..e3b5437eec 100644 --- a/src/bin/Data/Items/Group13_Helper.json +++ b/src/bin/Data/Items/Group13_Helper.json @@ -882,32 +882,32 @@ "description": [ { "text": { - "en": "Increase {capeDamageIncrease}% of Damage", - "de": "Erhöht den Schaden um {capeDamageIncrease}%", - "es": "Aumenta el daño de {capeDamageIncrease}% of", - "id": "Meningkatkan Kerusakan {capeDamageIncrease}% of", - "ja": "ダメージ {capeDamageIncrease}%増加", - "pl": "Zwiększa obrażenia o {capeDamageIncrease}%", - "pt": "Aumentar o dano de {capeDamageIncrease}% of", - "ru": "Увеличение урона {capeDamageIncrease}% of", - "tl": "Dagdagan ang {capeDamageIncrease}% of Pinsala", - "uk": "Збільшення шкоди на {capeDamageIncrease}% of", - "zh-TW": "增加 {capeDamageIncrease}% of 傷害" + "en": "Increase {table:capeDamageIncrease}% of Damage", + "de": "Erhöht den Schaden um {table:capeDamageIncrease}%", + "es": "Aumenta el daño de {table:capeDamageIncrease}% of", + "id": "Meningkatkan Kerusakan {table:capeDamageIncrease}% of", + "ja": "ダメージ {table:capeDamageIncrease}%増加", + "pl": "Zwiększa obrażenia o {table:capeDamageIncrease}%", + "pt": "Aumentar o dano de {table:capeDamageIncrease}% of", + "ru": "Увеличение урона {table:capeDamageIncrease}% of", + "tl": "Dagdagan ang {table:capeDamageIncrease}% of Pinsala", + "uk": "Збільшення шкоди на {table:capeDamageIncrease}% of", + "zh-TW": "增加 {table:capeDamageIncrease}% of 傷害" } }, { "text": { - "en": "Absorb {capeOfLordDamageAbsorb}% of Damage", - "de": "Absorbiert {capeOfLordDamageAbsorb}% des Schadens", - "es": "Absorber daño {capeOfLordDamageAbsorb}% of", - "id": "Menyerap Kerusakan {capeOfLordDamageAbsorb}% of", - "ja": "ダメージ {capeOfLordDamageAbsorb}%吸収", - "pl": "Pochłania {capeOfLordDamageAbsorb}% obrażeń", - "pt": "Absorver Dano {capeOfLordDamageAbsorb}% of", - "ru": "Поглощение {capeOfLordDamageAbsorb}% of урона", - "tl": "Isipsip ang {capeOfLordDamageAbsorb}% of Pinsala", - "uk": "Поглинання шкоди {capeOfLordDamageAbsorb}% of", - "zh-TW": "吸收{capeOfLordDamageAbsorb}% of傷害" + "en": "Absorb {table:capeOfLordDamageAbsorb}% of Damage", + "de": "Absorbiert {table:capeOfLordDamageAbsorb}% des Schadens", + "es": "Absorber daño {table:capeOfLordDamageAbsorb}% of", + "id": "Menyerap Kerusakan {table:capeOfLordDamageAbsorb}% of", + "ja": "ダメージ {table:capeOfLordDamageAbsorb}%吸収", + "pl": "Pochłania {table:capeOfLordDamageAbsorb}% obrażeń", + "pt": "Absorver Dano {table:capeOfLordDamageAbsorb}% of", + "ru": "Поглощение {table:capeOfLordDamageAbsorb}% of урона", + "tl": "Isipsip ang {table:capeOfLordDamageAbsorb}% of Pinsala", + "uk": "Поглинання шкоди {table:capeOfLordDamageAbsorb}% of", + "zh-TW": "吸收{table:capeOfLordDamageAbsorb}% of傷害" } } ], From bdb02350bb5c039ffc0801b2652a606fd200fd02 Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Fri, 23 Oct 2026 12:51:56 -0300 Subject: [PATCH 05/19] feat(items): the stat file's table uses are checked apart, and a wing names its tier's tables The unused-table warning moves out of the placeholder check into ValidateTableUses, run where that check is (Load, Save Items, bmd import). It also warns about a wing whose description names other tables than most of the other wings of its tier, cape tag and group: the tooltip code chose the wings' damage and absorption lines by the tier, so a new wing without them, or a re-tiered wing that keeps its old tier's tables, is pointed out. --- .../DataHandler/ItemData/ItemDataHandler.cpp | 5 + .../GameData/ItemData/ItemDataValidation.cpp | 107 ++++++++++++++++-- .../GameData/ItemData/ItemDataValidation.h | 10 +- .../test_item_description_placeholders.cpp | 68 +++++++++-- 4 files changed, 168 insertions(+), 22 deletions(-) diff --git a/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp b/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp index 99ada2b8fa..984cbdeeca 100644 --- a/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp +++ b/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp @@ -122,6 +122,7 @@ bool CItemDataHandler::Load(std::string& errorMessage) statProfiles = ItemStatProfiles(stats.file); ValidateStatProfiles(result.items, statProfiles, GetItemStatsFile().generic_string(), result.issues); ValidateDescriptionPlaceholders(result.items, statProfiles, GetItemStatsFile().generic_string(), result.issues); + ValidateTableUses(result.items, statProfiles, GetItemStatsFile().generic_string(), result.issues); } Data::LogDataIssues(ItemDataLabel, result.issues); if (HasErrors(result.issues)) @@ -579,6 +580,8 @@ void CItemDataHandler::Validate(std::vector& issues) const GetItemStatsFile().generic_string(), issues); ValidateDescriptionPlaceholders(g_ItemDatabase.GetAllSlots(), g_ItemDatabase.GetStatProfiles(), GetItemStatsFile().generic_string(), issues); + ValidateTableUses(g_ItemDatabase.GetAllSlots(), g_ItemDatabase.GetStatProfiles(), + GetItemStatsFile().generic_string(), issues); ValidateNameLocales(g_ItemDatabase.GetAllSlots(), I18N::GetAvailableLocales(), issues); std::vector items; std::ranges::copy_if(g_ItemDatabase.GetAllSlots(), std::back_inserter(items), &ItemDefinition::Exists); @@ -660,6 +663,8 @@ ItemBmdImportResult CItemDataHandler::ImportFromBmd() result.validationIssues); ValidateDescriptionPlaceholders(result.items, g_ItemDatabase.GetStatProfiles(), GetItemStatsFile().generic_string(), result.validationIssues); + ValidateTableUses(result.items, g_ItemDatabase.GetStatProfiles(), GetItemStatsFile().generic_string(), + result.validationIssues); ValidateNameLocales(result.items, I18N::GetAvailableLocales(), result.validationIssues); g_ItemDatabase.Build(result.items); diff --git a/src/source/Data/GameData/ItemData/ItemDataValidation.cpp b/src/source/Data/GameData/ItemData/ItemDataValidation.cpp index dbf98b9815..5286ae5e15 100644 --- a/src/source/Data/GameData/ItemData/ItemDataValidation.cpp +++ b/src/source/Data/GameData/ItemData/ItemDataValidation.cpp @@ -10,8 +10,10 @@ #include #include #include +#include #include #include +#include namespace Data::Items { @@ -368,13 +370,10 @@ void ValidateDescriptionPlaceholders(std::span items, cons const std::string& statFile, std::vector& issues) { std::vector known(GetBuiltInPlaceholders().begin(), GetBuiltInPlaceholders().end()); - const std::vector tables = profiles.GetTableNames(); - for (const std::string& table : tables) + for (const std::string& table : profiles.GetTableNames()) { known.push_back(MakeTablePlaceholder(table)); } - // The tables the descriptions name. - std::set> named; for (const ItemDefinition& definition : items) { if (!definition.Exists()) @@ -385,13 +384,6 @@ void ValidateDescriptionPlaceholders(std::span items, cons { // The translations have the English text's placeholders (ValidateItems checks that). const PlaceholderScan scan = ScanPlaceholders(definition.description[line].text.GetNeutral()); - for (const std::string& name : scan.names) - { - if (const std::string_view table = GetPlaceholderTable(name); !table.empty()) - { - named.emplace(table); - } - } std::set reported; for (const std::string& name : scan.names) { @@ -424,7 +416,84 @@ void ValidateDescriptionPlaceholders(std::span items, cons } } } +} + +namespace +{ +// The tables an item's description names, by the English texts (the translations have their placeholders). +std::set FindDescriptionTables(const ItemDefinition& definition) +{ + std::set tables; + for (const ItemDescriptionLine& line : definition.description) + { + for (const std::string& name : ScanPlaceholders(line.text.GetNeutral()).names) + { + if (const std::string_view table = GetPlaceholderTable(name); !table.empty()) + { + tables.emplace(table); + } + } + } + return tables; +} + +std::string ListTables(const std::set& tables) +{ + if (tables.empty()) + { + return "no table"; + } + std::string list; for (const std::string& table : tables) + { + list += (list.empty() ? "{" : ", {") + MakeTablePlaceholder(table) + "}"; + } + return list; +} + +// The wings of a tier (with or without the cape tag, in a group) show the same lines: the tooltip code chose them by +// the tier before they were data. The tables most of the others name, or nothing when they agree on none. +std::optional> FindTierTables(const std::vector& wings, + const ItemDefinition& wing) +{ + std::map, int> counts; + for (const ItemDefinition* other : wings) + { + if (other != &wing) + { + ++counts[FindDescriptionTables(*other)]; + } + } + const auto most = std::max_element(counts.begin(), counts.end(), + [](const auto& first, const auto& second) { return first.second < second.second; }); + if (most == counts.end() || most->first.empty()) + { + return std::nullopt; + } + return most->first; +} +} // namespace + +void ValidateTableUses(std::span items, const ItemStatProfiles& profiles, + const std::string& statFile, std::vector& issues) +{ + std::set> named; + // The wings by tier, cape tag and group. + std::map, std::vector> wings; + for (const ItemDefinition& definition : items) + { + if (!definition.Exists()) + { + continue; + } + const std::set tables = FindDescriptionTables(definition); + named.insert(tables.begin(), tables.end()); + if (definition.wingTier != WingTier::None) + { + wings[{definition.wingTier, definition.tags.Has(ItemTag::Cape), definition.group}].push_back(&definition); + } + } + for (const std::string& table : profiles.GetTableNames()) { if (!profiles.IsTableUsedByStats(table) && !named.contains(table)) { @@ -432,6 +501,22 @@ void ValidateDescriptionPlaceholders(std::span items, cons "tables." + table, "neither a stat nor an item description uses this table"}); } } + for (const auto& [kind, tierWings] : wings) + { + const auto& [tier, cape, group] = kind; + for (const ItemDefinition* wing : tierWings) + { + const std::optional> expected = FindTierTables(tierWings, *wing); + const std::set tables = FindDescriptionTables(*wing); + if (expected && tables != *expected) + { + issues.push_back({ItemDataIssueSeverity::Warning, "", wing->group, wing->number, "description", + "names " + ListTables(tables) + " for its wing lines; the other " + + FindEnumName(tier) + "-tier " + (cape ? "capes" : "wings") + " of group " + + std::to_string(group) + " name " + ListTables(*expected)}); + } + } + } } void ValidateNameLocales(std::span items, std::span uiLocales, diff --git a/src/source/Data/GameData/ItemData/ItemDataValidation.h b/src/source/Data/GameData/ItemData/ItemDataValidation.h index ba5f199d1e..4c1a4b0ee7 100644 --- a/src/source/Data/GameData/ItemData/ItemDataValidation.h +++ b/src/source/Data/GameData/ItemData/ItemDataValidation.h @@ -40,11 +40,17 @@ void ValidateStatProfiles(std::span items, const ItemStatP // The placeholders of the items' descriptions against the item stat file (`statFile` names it in messages): a name // that is neither a built-in value nor "table:" and a table of the file is an error, with the nearest known name when -// it looks like a typo. A table of the file that neither a stat nor a description uses is a warning. The braces and -// the translations are checked by ValidateItems. +// it looks like a typo. The braces and the translations are checked by ValidateItems. void ValidateDescriptionPlaceholders(std::span items, const ItemStatProfiles& profiles, const std::string& statFile, std::vector& issues); +// The tables of the item stat file the items use (`statFile` names it in messages). A table that neither a stat nor a +// description names is a warning. So is a wing (an item with a wing tier) whose description names other tables than +// most of the other wings of its tier, cape tag and group: the tooltip code chose the wings' damage and absorption +// lines by the tier, so a new or re-tiered wing that misses them, or keeps another tier's, is pointed out. +void ValidateTableUses(std::span items, const ItemStatProfiles& profiles, + const std::string& statFile, std::vector& issues); + // Gives the model entries that name a shared model ("model") its file, // texture folders and none-blend meshes. A name that is not a shared model // and a shared model defined twice are errors; a shared model that no item diff --git a/tests/data/test_item_description_placeholders.cpp b/tests/data/test_item_description_placeholders.cpp index bfcc67e44b..0c18867f4c 100644 --- a/tests/data/test_item_description_placeholders.cpp +++ b/tests/data/test_item_description_placeholders.cpp @@ -66,12 +66,10 @@ std::vector CheckSyntax(const ItemDefinition& item) return issues; } -// The issues of the item, without the stat file's. std::vector CheckNames(const ItemDefinition& item, const ItemStatProfiles& profiles = MakeProfiles()) { std::vector issues; ValidateDescriptionPlaceholders(std::vector{item}, profiles, "ItemStats.json", issues); - std::erase_if(issues, [](const ItemDataIssue& issue) { return issue.group == ItemDataIssue::NoItem; }); return issues; } } // namespace @@ -212,17 +210,69 @@ TEST_CASE("A description placeholder is a built-in value or a stat file table [d "has the unknown placeholder {durability}; a placeholder is a built-in value ({level}) or a table of " "ItemStats.json ({table:name})"); + // A deleted item (no name) is not checked. + ItemDefinition deleted = MakeJewel("{durability}"); + deleted.names = {}; + CHECK(CheckNames(deleted).empty()); +} + +namespace +{ +std::vector CheckTableUses(const std::vector& items) +{ + std::vector issues; + ValidateTableUses(items, MakeProfiles(), "ItemStats.json", issues); + return issues; +} + +ItemDefinition MakeWing(short number, WingTier tier, const std::string& english) +{ + ItemDefinition wing = MakeJewel(english); + wing.group = 12; + wing.number = number; + wing.names.Set("en", "Wing " + std::to_string(number)); + wing.wingTier = tier; + return wing; +} +} // namespace + +TEST_CASE("A table that neither a stat nor a description names is a warning [data][items]") +{ // A table no stat uses is for descriptions: a warning when none names it either. - std::vector unused; - ValidateDescriptionPlaceholders(std::vector{MakeJewel("No placeholders")}, MakeProfiles(), - "ItemStats.json", unused); + const std::vector unused = CheckTableUses({MakeJewel("No placeholders")}); REQUIRE(unused.size() == 1); CHECK(unused.front().severity == ItemDataIssueSeverity::Warning); CHECK(unused.front().source == "ItemStats.json"); CHECK(unused.front().field == "tables.wingDamage"); + CHECK(CheckTableUses({MakeJewel("Increase {table:wingDamage}% of Damage")}).empty()); +} - // A deleted item (no name) is not checked. - ItemDefinition deleted = MakeJewel("{durability}"); - deleted.names = {}; - CHECK(CheckNames(deleted).empty()); +TEST_CASE("A wing names the tables the other wings of its tier name [data][items]") +{ + const std::string lines = "Increase {table:wingDamage}% of Damage"; + std::vector wings = {MakeWing(36, WingTier::Third, lines), MakeWing(37, WingTier::Third, lines), + MakeWing(38, WingTier::Third, lines)}; + CHECK(CheckTableUses(wings).empty()); + + // A new third-tier wing without the lines. + wings.push_back(MakeWing(200, WingTier::Third, "Increase speed")); + const std::vector missing = CheckTableUses(wings); + REQUIRE(missing.size() == 1); + CHECK(missing.front().severity == ItemDataIssueSeverity::Warning); + CHECK(missing.front().number == 200); + CHECK(missing.front().field == "description"); + CHECK(missing.front().message == + "names no table for its wing lines; the other third-tier wings of group 12 name {table:wingDamage}"); + + // A wing moved to another tier keeps the tables of its old one. + wings.back() = MakeWing(200, WingTier::Third, "Increase {table:otherDamage}% of Damage"); + REQUIRE(CheckTableUses(wings).size() == 1); + + // A cape, or a wing of another group, is compared with its own kind; one of a kind has nothing to compare with. + wings.back() = MakeWing(200, WingTier::Third, "Increase {table:otherDamage}% of Damage"); + wings.back().tags.Set(ItemTag::Cape); + CHECK(CheckTableUses(wings).empty()); + wings.back().tags = {}; + wings.back().group = 13; + CHECK(CheckTableUses(wings).empty()); } From 52fd7309a004d79d23099254aebf5e30fee4f5ee Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Fri, 23 Oct 2026 12:51:56 -0300 Subject: [PATCH 06/19] fix(items): the wings' Polish speed text and the Imp's Portuguese text are the game's MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "Zwiększa prędkość" as the game's "Increase speed" text has it, and the Imp's Portuguese text without its broken "de % of". --- src/bin/Data/Items/Group12_Wing.json | 44 +++++++++++++------------- src/bin/Data/Items/Group13_Helper.json | 2 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/bin/Data/Items/Group12_Wing.json b/src/bin/Data/Items/Group12_Wing.json index 42ce7f8965..dced5b944e 100644 --- a/src/bin/Data/Items/Group12_Wing.json +++ b/src/bin/Data/Items/Group12_Wing.json @@ -49,7 +49,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -120,7 +120,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -192,7 +192,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -264,7 +264,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -335,7 +335,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -406,7 +406,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -477,7 +477,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -1043,7 +1043,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -1114,7 +1114,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -1185,7 +1185,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -1256,7 +1256,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -1327,7 +1327,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -1398,7 +1398,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -1469,7 +1469,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -1540,7 +1540,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -1764,7 +1764,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -2588,7 +2588,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -2665,7 +2665,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -2742,7 +2742,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -2819,7 +2819,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -2897,7 +2897,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", @@ -2975,7 +2975,7 @@ "es": "aumentar la velocidad", "id": "Tingkatkan kecepatan", "ja": "移動速度向上", - "pl": "Zwiększ prędkość", + "pl": "Zwiększa prędkość", "pt": "Aumentar a velocidade", "ru": "Увеличить скорость", "tl": "Dagdagan ang bilis", diff --git a/src/bin/Data/Items/Group13_Helper.json b/src/bin/Data/Items/Group13_Helper.json index e3b5437eec..ad4059ab89 100644 --- a/src/bin/Data/Items/Group13_Helper.json +++ b/src/bin/Data/Items/Group13_Helper.json @@ -79,7 +79,7 @@ "id": "Meningkatkan 30% of serangan & Dmg Sihir", "ja": "攻撃力、力 30%増加", "pl": "Zwiększa obrażenia fizyczne i magiczne o 30%", - "pt": "Aumenta em 30% o dano de ataque e magia de % of", + "pt": "Aumenta em 30% o dano de ataque e magia", "ru": "Увеличение на 30% of урона от атак и волшебства.", "tl": "Dagdagan ang 30% of pag-atake at Wizardry Dmg", "uk": "Збільште на 30% of шкоду від атаки та магії", From 16f01bf4b49f95268552984e0041cfd31ab94226 Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Fri, 23 Oct 2026 12:51:56 -0300 Subject: [PATCH 07/19] test(items): the wings' lines are compared with the old formulas in every language --- tests/data/test_item_database_files.cpp | 115 +++++++++++++++++++++--- 1 file changed, 103 insertions(+), 12 deletions(-) diff --git a/tests/data/test_item_database_files.cpp b/tests/data/test_item_database_files.cpp index 29d92b775c..61fbdcce49 100644 --- a/tests/data/test_item_database_files.cpp +++ b/tests/data/test_item_database_files.cpp @@ -31,6 +31,7 @@ #include "Engine/Object/ZzzInfomation.h" #include "Engine/Physics/PhysicsManager.h" #include "GameLogic/Items/ItemStats.h" +#include "Core/Text/Utf8.h" #include "I18N/All.h" #include "Render/Items/ItemEffects.h" #include "Render/Items/ItemRenderStyles.h" @@ -74,6 +75,7 @@ #include #include #include +#include #include #include #include @@ -241,6 +243,7 @@ TEST_CASE("The shipped descriptions' placeholders are built-in values or stat fi REQUIRE_FALSE(HasErrors(stats.issues)); std::vector issues; ValidateDescriptionPlaceholders(result.items, ItemStatProfiles(stats.file), ItemStatsFileName, issues); + ValidateTableUses(result.items, ItemStatProfiles(stats.file), ItemStatsFileName, issues); for (const ItemDataIssue& issue : issues) { INFO(issue.ToString()); @@ -248,13 +251,32 @@ TEST_CASE("The shipped descriptions' placeholders are built-in values or stat fi } } -// The lines the tooltip code wrote for the wings, capes and pets before they were their descriptions, as it printed -// them in English: the old formulas, to compare the data with. -std::vector OldWingAndPetLines(int group, int number, int level) +// A line the tooltip code wrote for the wings, capes and pets before it was their descriptions: one of the game's +// texts that other code still prints ("Increase %d%% of Damage", "Absorb %d%% of Damage", "Increase speed") with its +// value, or another text, in English. +struct OldWingLine { - const auto increase = [](int value) { return "Increase " + std::to_string(value) + "% of Damage"; }; - const auto absorb = [](int value) { return "Absorb " + std::to_string(value) + "% of Damage"; }; - const std::string speed = "Increase speed"; + enum class Kind + { + Increase, + Absorb, + Speed, + Other, + }; + Kind kind; + int value = 0; + std::string english; + + bool operator==(const OldWingLine&) const = default; +}; + +// The old formulas, to compare the data with. +std::vector OldWingAndPetLines(int group, int number, int level) +{ + const auto increase = [](int value) { return OldWingLine{OldWingLine::Kind::Increase, value}; }; + const auto absorb = [](int value) { return OldWingLine{OldWingLine::Kind::Absorb, value}; }; + const OldWingLine speed{OldWingLine::Kind::Speed}; + const auto other = [](const char* english) { return OldWingLine{OldWingLine::Kind::Other, 0, english}; }; const auto in = [&](std::initializer_list numbers) { return std::find(numbers.begin(), numbers.end(), number) != numbers.end(); }; if (group == 12 && in({0, 1, 2, 41, 131, 132, 133, 134})) @@ -291,15 +313,72 @@ std::vector OldWingAndPetLines(int group, int number, int level) } if (group == 13 && number == 0) { - return {absorb(20), "Max HP +50 increased"}; + return {absorb(20), other("Max HP +50 increased")}; } if (group == 13 && number == 1) { - return {"Increase 30% of attacking & Wizardry Dmg"}; + return {other("Increase 30% of attacking & Wizardry Dmg")}; } return {}; } +// What the old code printed for the line in the UI's language: the game's text with its value, as printf fills +// "%d" and "%%" (the only conversions these texts have); another text only in English. +std::optional PrintOldWingLine(const OldWingLine& line) +{ + const wchar_t* format = nullptr; + switch (line.kind) + { + case OldWingLine::Kind::Increase: + format = I18N::Game::IncreaseDOfDamage; + break; + case OldWingLine::Kind::Absorb: + format = I18N::Game::AbsorbDOfDamage; + break; + case OldWingLine::Kind::Speed: + format = I18N::Game::IncreaseSpeed; + break; + case OldWingLine::Kind::Other: + return std::nullopt; + } + const std::string text = Core::Text::ToUtf8(format); + std::string printed; + for (size_t position = 0; position < text.size(); ++position) + { + if (text.compare(position, 2, "%%") == 0) + { + printed += '%'; + ++position; + } + else if (text.compare(position, 2, "%d") == 0) + { + printed += std::to_string(line.value); + ++position; + } + else + { + printed += text[position]; + } + } + return printed; +} + +std::string EnglishOldWingLine(const OldWingLine& line) +{ + switch (line.kind) + { + case OldWingLine::Kind::Increase: + return "Increase " + std::to_string(line.value) + "% of Damage"; + case OldWingLine::Kind::Absorb: + return "Absorb " + std::to_string(line.value) + "% of Damage"; + case OldWingLine::Kind::Speed: + return "Increase speed"; + case OldWingLine::Kind::Other: + break; + } + return line.english; +} + TEST_CASE("The wings', capes' and pets' tooltip values come from their data as from the old formulas [data][items]") { const ItemDataLoadResult result = LoadItemDataDirectory(DataDirectory / "Items"); @@ -316,12 +395,24 @@ TEST_CASE("The wings', capes' and pets' tooltip values come from their data as f for (int level = 0; level < ItemLevelCount; ++level) { INFO(item.group << "/" << item.number << " +" << level); - std::vector lines; - for (const ItemDescriptionLine& line : item.description) + const std::vector old = OldWingAndPetLines(item.group, item.number, level); + REQUIRE(item.description.size() == old.size()); + for (size_t index = 0; index < old.size(); ++index) { - lines.push_back(FillPlaceholders(line.text.GetNeutral(), level, profiles)); + const Data::LocalizedString& text = item.description[index].text; + CHECK(FillPlaceholders(text.GetNeutral(), level, profiles) == EnglishOldWingLine(old[index])); + // In every language, as the game's texts that other code still prints have it. + for (const char* locale : I18N::GetAvailableLocales()) + { + INFO(locale); + I18N::SetLocale(locale); + if (const std::optional printed = PrintOldWingLine(old[index])) + { + CHECK(FillPlaceholders(text.Get(locale), level, profiles) == *printed); + } + } + I18N::SetLocale("en"); } - CHECK(lines == OldWingAndPetLines(item.group, item.number, level)); ++compared; } } From 737e35d902e43ce43acc0901d3ec396e216066e3 Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Fri, 23 Oct 2026 12:56:08 -0300 Subject: [PATCH 08/19] fix(items): the table check keeps each scan alive for its loop, and the gate's lines are formatted --- src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp | 2 +- src/source/Data/GameData/ItemData/ItemDataValidation.cpp | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp b/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp index 984cbdeeca..9d3926be15 100644 --- a/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp +++ b/src/source/Data/DataHandler/ItemData/ItemDataHandler.cpp @@ -664,7 +664,7 @@ ItemBmdImportResult CItemDataHandler::ImportFromBmd() ValidateDescriptionPlaceholders(result.items, g_ItemDatabase.GetStatProfiles(), GetItemStatsFile().generic_string(), result.validationIssues); ValidateTableUses(result.items, g_ItemDatabase.GetStatProfiles(), GetItemStatsFile().generic_string(), - result.validationIssues); + result.validationIssues); ValidateNameLocales(result.items, I18N::GetAvailableLocales(), result.validationIssues); g_ItemDatabase.Build(result.items); diff --git a/src/source/Data/GameData/ItemData/ItemDataValidation.cpp b/src/source/Data/GameData/ItemData/ItemDataValidation.cpp index 5286ae5e15..e22e7d92aa 100644 --- a/src/source/Data/GameData/ItemData/ItemDataValidation.cpp +++ b/src/source/Data/GameData/ItemData/ItemDataValidation.cpp @@ -426,7 +426,8 @@ std::set FindDescriptionTables(const ItemDefinition& definition) std::set tables; for (const ItemDescriptionLine& line : definition.description) { - for (const std::string& name : ScanPlaceholders(line.text.GetNeutral()).names) + const PlaceholderScan scan = ScanPlaceholders(line.text.GetNeutral()); + for (const std::string& name : scan.names) { if (const std::string_view table = GetPlaceholderTable(name); !table.empty()) { @@ -454,7 +455,7 @@ std::string ListTables(const std::set& tables) // The wings of a tier (with or without the cape tag, in a group) show the same lines: the tooltip code chose them by // the tier before they were data. The tables most of the others name, or nothing when they agree on none. std::optional> FindTierTables(const std::vector& wings, - const ItemDefinition& wing) + const ItemDefinition& wing) { std::map, int> counts; for (const ItemDefinition* other : wings) @@ -464,8 +465,8 @@ std::optional> FindTierTables(const std::vectorfirst.empty()) { return std::nullopt; From 9980fdbf002e32791dc69b716fbc510c0300c752 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 23 Oct 2026 19:15:53 +0200 Subject: [PATCH 09/19] test(items): the wings' comparison test switches the language with its own item table Run in one process after a test that loaded the item data (the MU Helper pickup filter tests do), the comparison test crashed: it switches the UI language for every language, the item data follows each switch and refills ItemAttribute, which is null outside a ClientDataScope. CTest runs each test case in its own process, so CI did not show it. The test now runs inside a ClientDataScope, as ClientDataScope's comment asks of a test that switches the language. --- tests/data/test_item_database_files.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/data/test_item_database_files.cpp b/tests/data/test_item_database_files.cpp index 61fbdcce49..026a15bc7a 100644 --- a/tests/data/test_item_database_files.cpp +++ b/tests/data/test_item_database_files.cpp @@ -385,6 +385,9 @@ TEST_CASE("The wings', capes' and pets' tooltip values come from their data as f const ItemStatsLoadResult stats = LoadItemStatsFile(DataDirectory / "Items" / "Stats" / ItemStatsFileName); REQUIRE_FALSE(HasErrors(stats.issues)); const ItemStatProfiles profiles(stats.file); + // The test switches the UI language, and once a test has loaded the item data every switch refills + // ItemAttribute: it needs an item table of its own. + ClientDataScope client(ShippedClientDirectory); int compared = 0; for (const ItemDefinition& item : result.items) { From b7063746fd4d646d511391ad2ff0c1d5e387554e Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Fri, 23 Oct 2026 14:29:59 -0300 Subject: [PATCH 10/19] feat(items): the wing check compares whole lines, names no culprit in a tie, and checks a lone wing against the other groups Following the review: a wing is compared by its lines (their texts, tables included), so one that loses or gains a line without a table is pointed out too; wings that split evenly get one warning that they don't agree, so neither side is blamed; wings without lines count as a set of lines; and a wing alone in its tier, cape tag and group is compared with its tier's wings in the other groups that have more than one (Cape of Fighter and Cape of Lord, each alone, aren't compared with each other). The warning is in the docs, and the stat file test's comment names ValidateTableUses. --- docs/item-data.md | 19 ++- .../GameData/ItemData/ItemDataValidation.cpp | 146 ++++++++++++++---- .../GameData/ItemData/ItemDataValidation.h | 7 +- .../test_item_description_placeholders.cpp | 73 +++++++-- tests/data/test_item_stats_json.cpp | 2 +- 5 files changed, 199 insertions(+), 48 deletions(-) diff --git a/docs/item-data.md b/docs/item-data.md index be2d3eee5b..9f65ecd123 100644 --- a/docs/item-data.md +++ b/docs/item-data.md @@ -263,6 +263,21 @@ bmd): {table:damgeIncreaseWeapons}; did you mean {table:damageIncreaseWeapons}?`. A table written without `table:` gets the same hint. +**Warnings:** + +- a table of the stat file that neither a stat nor a description names; +- a wing (an item with a `wingTier`) whose description lines are not those of + most of the other wings of its tier, `cape` tag and group: the tooltip code + chose the wings' lines by the tier, so a new wing without them, or one moved + to another tier that keeps its old tier's tables, is pointed out + (`its wing lines are not those of the other third-tier wings of group 12: + it has 1 line naming no table, they have 3 lines naming …`). A wing alone + there is compared with the wings of its tier and `cape` tag in the other + groups that have more than one; Cape of Fighter (12) and Cape of Lord (13), + each alone and written apart by the old code, are not compared with each + other. Wings of a group that split evenly get one warning that they don't + agree, without blaming either side. + The shipped data is checked by the tests, so a wrong placeholder fails the build's tests. @@ -468,8 +483,8 @@ not have; and a condition that is not a list of one or more values, or a value that is not one of its names (for `group`, a whole number from 0 to 15). **Warnings:** unknown fields, a table that neither a stat nor a -[description placeholder](#description-placeholders) uses, and a caption without -English. An item whose `statProfile` the file does not have is an error, and +[description placeholder](#description-placeholders) uses (see there for the +wings' tables too), and a caption without English. An item whose `statProfile` the file does not have is an error, and a profile no item names is a warning. --- diff --git a/src/source/Data/GameData/ItemData/ItemDataValidation.cpp b/src/source/Data/GameData/ItemData/ItemDataValidation.cpp index e22e7d92aa..1fff5608e4 100644 --- a/src/source/Data/GameData/ItemData/ItemDataValidation.cpp +++ b/src/source/Data/GameData/ItemData/ItemDataValidation.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include @@ -452,26 +451,122 @@ std::string ListTables(const std::set& tables) return list; } -// The wings of a tier (with or without the cape tag, in a group) show the same lines: the tooltip code chose them by -// the tier before they were data. The tables most of the others name, or nothing when they agree on none. -std::optional> FindTierTables(const std::vector& wings, - const ItemDefinition& wing) +// A wing's lines as the wing check compares them: each line's English text (its tables included). +std::vector WingLines(const ItemDefinition& wing) { - std::map, int> counts; - for (const ItemDefinition* other : wings) + std::vector lines; + for (const ItemDescriptionLine& line : wing.description) { - if (other != &wing) - { - ++counts[FindDescriptionTables(*other)]; - } + lines.push_back(line.text.GetNeutral()); + } + return lines; +} + +std::string DescribeWingLines(const ItemDefinition& wing) +{ + const size_t count = wing.description.size(); + return std::to_string(count) + (count == 1 ? " line" : " lines") + " naming " + + ListTables(FindDescriptionTables(wing)); +} + +std::string DescribeWingKind(WingTier tier, bool cape) +{ + return std::string(FindEnumName(tier)) + "-tier " + (cape ? "capes" : "wings"); +} + +// The wings of a kind: those that have each set of lines, most first. +using WingsByLines = std::vector>; +WingsByLines SortByLines(const std::vector& wings) +{ + std::map, std::vector> byLines; + for (const ItemDefinition* wing : wings) + { + byLines[WingLines(*wing)].push_back(wing); } - const auto most = std::max_element(counts.begin(), counts.end(), [](const auto& first, const auto& second) - { return first.second < second.second; }); - if (most == counts.end() || most->first.empty()) + WingsByLines sorted; + for (auto& [lines, having] : byLines) { - return std::nullopt; + sorted.push_back(std::move(having)); + } + std::stable_sort(sorted.begin(), sorted.end(), + [](const auto& first, const auto& second) { return first.size() > second.size(); }); + return sorted; +} + +// The lines most of the wings have, or nothing when two sets of lines are as common. +const ItemDefinition* FindMostLines(const WingsByLines& sorted) +{ + if (sorted.empty() || (sorted.size() > 1 && sorted[0].size() == sorted[1].size())) + { + return nullptr; + } + return sorted[0].front(); +} + +using WingKey = std::tuple; + +// The wings of a tier show the same lines: the tooltip code chose them by the tier (and the cape tag) before they were +// data. The wings are compared within their tier, cape tag and group; a wing alone there is compared with the wings of +// its tier and cape tag in the other groups that have more than one, so Cape of Fighter (12) and Cape of Lord (13), +// which the code wrote apart, are not compared with each other. +void ValidateWingLines(const std::map>& wings, + std::vector& issues) +{ + const auto warn = [&](const ItemDefinition& wing, const std::string& message) + { issues.push_back({ItemDataIssueSeverity::Warning, "", wing.group, wing.number, "description", message}); }; + for (const auto& [key, kindWings] : wings) + { + const auto& [tier, cape, group] = key; + if (kindWings.size() == 1) + { + std::vector others; + for (const auto& [otherKey, otherWings] : wings) + { + if (std::get<0>(otherKey) == tier && std::get<1>(otherKey) == cape && std::get<2>(otherKey) != group && + otherWings.size() > 1) + { + others.insert(others.end(), otherWings.begin(), otherWings.end()); + } + } + const ItemDefinition* most = FindMostLines(SortByLines(others)); + const ItemDefinition& wing = *kindWings.front(); + if (most != nullptr && WingLines(wing) != WingLines(*most)) + { + warn(wing, "its wing lines are not those of the " + DescribeWingKind(tier, cape) + + " of the other groups: it has " + DescribeWingLines(wing) + ", they have " + + DescribeWingLines(*most)); + } + continue; + } + const WingsByLines sorted = SortByLines(kindWings); + if (sorted.size() == 1) + { + continue; + } + const ItemDefinition* most = FindMostLines(sorted); + if (most == nullptr) + { + // A tie: no set of lines is the one the others differ from. + std::string counts; + for (const auto& having : sorted) + { + counts += (counts.empty() ? "" : ", ") + std::to_string(having.size()) + " have " + + DescribeWingLines(*having.front()); + } + warn(*kindWings.front(), "the " + DescribeWingKind(tier, cape) + " of group " + std::to_string(group) + + " don't agree on their wing lines: " + counts); + continue; + } + for (const ItemDefinition* wing : kindWings) + { + if (WingLines(*wing) != WingLines(*most)) + { + warn(*wing, "its wing lines are not those of the other " + DescribeWingKind(tier, cape) + " of group " + + std::to_string(group) + ": it has " + DescribeWingLines(*wing) + ", they have " + + DescribeWingLines(*most)); + } + } } - return most->first; } } // namespace @@ -480,7 +575,7 @@ void ValidateTableUses(std::span items, const ItemStatProf { std::set> named; // The wings by tier, cape tag and group. - std::map, std::vector> wings; + std::map> wings; for (const ItemDefinition& definition : items) { if (!definition.Exists()) @@ -502,22 +597,7 @@ void ValidateTableUses(std::span items, const ItemStatProf "tables." + table, "neither a stat nor an item description uses this table"}); } } - for (const auto& [kind, tierWings] : wings) - { - const auto& [tier, cape, group] = kind; - for (const ItemDefinition* wing : tierWings) - { - const std::optional> expected = FindTierTables(tierWings, *wing); - const std::set tables = FindDescriptionTables(*wing); - if (expected && tables != *expected) - { - issues.push_back({ItemDataIssueSeverity::Warning, "", wing->group, wing->number, "description", - "names " + ListTables(tables) + " for its wing lines; the other " + - FindEnumName(tier) + "-tier " + (cape ? "capes" : "wings") + " of group " + - std::to_string(group) + " name " + ListTables(*expected)}); - } - } - } + ValidateWingLines(wings, issues); } void ValidateNameLocales(std::span items, std::span uiLocales, diff --git a/src/source/Data/GameData/ItemData/ItemDataValidation.h b/src/source/Data/GameData/ItemData/ItemDataValidation.h index 4c1a4b0ee7..fa7f8229ca 100644 --- a/src/source/Data/GameData/ItemData/ItemDataValidation.h +++ b/src/source/Data/GameData/ItemData/ItemDataValidation.h @@ -45,9 +45,10 @@ void ValidateDescriptionPlaceholders(std::span items, cons const std::string& statFile, std::vector& issues); // The tables of the item stat file the items use (`statFile` names it in messages). A table that neither a stat nor a -// description names is a warning. So is a wing (an item with a wing tier) whose description names other tables than -// most of the other wings of its tier, cape tag and group: the tooltip code chose the wings' damage and absorption -// lines by the tier, so a new or re-tiered wing that misses them, or keeps another tier's, is pointed out. +// description names is a warning. So is a wing (an item with a wing tier) whose description lines are not those of +// most of the other wings of its tier, cape tag and group (or, alone there, of its tier and cape tag in the other +// groups), and a tie among them: the tooltip code chose the wings' lines by the tier, so a new or re-tiered wing +// that misses them, keeps another tier's, or loses or gains a line, is pointed out. void ValidateTableUses(std::span items, const ItemStatProfiles& profiles, const std::string& statFile, std::vector& issues); diff --git a/tests/data/test_item_description_placeholders.cpp b/tests/data/test_item_description_placeholders.cpp index 0c18867f4c..d3e3f3b6ee 100644 --- a/tests/data/test_item_description_placeholders.cpp +++ b/tests/data/test_item_description_placeholders.cpp @@ -247,11 +247,11 @@ TEST_CASE("A table that neither a stat nor a description names is a warning [dat CHECK(CheckTableUses({MakeJewel("Increase {table:wingDamage}% of Damage")}).empty()); } -TEST_CASE("A wing names the tables the other wings of its tier name [data][items]") +TEST_CASE("A wing has the lines the other wings of its tier have [data][items]") { const std::string lines = "Increase {table:wingDamage}% of Damage"; - std::vector wings = {MakeWing(36, WingTier::Third, lines), MakeWing(37, WingTier::Third, lines), - MakeWing(38, WingTier::Third, lines)}; + const auto third = [&](short number) { return MakeWing(number, WingTier::Third, lines); }; + std::vector wings = {third(36), third(37), third(38)}; CHECK(CheckTableUses(wings).empty()); // A new third-tier wing without the lines. @@ -261,18 +261,73 @@ TEST_CASE("A wing names the tables the other wings of its tier name [data][items CHECK(missing.front().severity == ItemDataIssueSeverity::Warning); CHECK(missing.front().number == 200); CHECK(missing.front().field == "description"); - CHECK(missing.front().message == - "names no table for its wing lines; the other third-tier wings of group 12 name {table:wingDamage}"); + CHECK(missing.front().message == "its wing lines are not those of the other third-tier wings of group 12: it has 1 " + "line naming no table, they have 1 line naming {table:wingDamage}"); // A wing moved to another tier keeps the tables of its old one. wings.back() = MakeWing(200, WingTier::Third, "Increase {table:otherDamage}% of Damage"); REQUIRE(CheckTableUses(wings).size() == 1); - // A cape, or a wing of another group, is compared with its own kind; one of a kind has nothing to compare with. + // One that gains or loses a line without a table. + wings.back() = third(200); + wings.back().description.push_back(wings.back().description.front()); + wings.back().description.back().text.Set("en", "Increase speed"); + const std::vector extra = CheckTableUses(wings); + REQUIRE(extra.size() == 1); + CHECK(extra.front().message.find("it has 2 lines naming {table:wingDamage}") != std::string::npos); +} + +TEST_CASE("Wings of a tier that split evenly are told they disagree, none of them blamed [data][items]") +{ + const auto wing = [](short number, const char* text) { return MakeWing(number, WingTier::Third, text); }; + // A pair, one wrong; and two against two. + for (const std::vector& wings : + {std::vector{wing(40, "Increase {table:wingDamage}%"), wing(50, "Increase {table:other}%")}, + std::vector{wing(36, "Increase {table:wingDamage}%"), + wing(37, "Increase {table:wingDamage}%"), wing(38, "Increase {table:other}%"), + wing(39, "Increase {table:other}%")}}) + { + const std::vector issues = CheckTableUses(wings); + REQUIRE(issues.size() == 1); + CHECK(issues.front().message.starts_with("the third-tier wings of group 12 don't agree on their wing lines: ")); + } + + // Wings without lines count as a set of lines too: two new second-tier capes without them, next to one with them. + auto cape = [](short number, const char* text) + { + ItemDefinition item = MakeWing(number, WingTier::Second, text); + item.tags.Set(ItemTag::Cape); + return item; + }; + std::vector capes = {cape(49, "Absorb {table:wingDamage}%"), cape(201, "x"), cape(202, "x")}; + capes[1].description.clear(); + capes[2].description.clear(); + const std::vector capeIssues = CheckTableUses(capes); + REQUIRE(capeIssues.size() == 1); + CHECK(capeIssues.front().number == 49); +} + +TEST_CASE("A wing alone in its tier and group is compared with the other groups' wings of its tier [data][items]") +{ + const std::string lines = "Increase {table:wingDamage}% of Damage"; + std::vector wings = {MakeWing(36, WingTier::Third, lines), MakeWing(37, WingTier::Third, lines)}; + // A third-tier wing of group 13, without the lines. + wings.push_back(MakeWing(200, WingTier::Third, "Increase speed")); + wings.back().group = 13; + const std::vector issues = CheckTableUses(wings); + REQUIRE(issues.size() == 1); + CHECK(issues.front().group == 13); + CHECK( + issues.front().message.starts_with("its wing lines are not those of the third-tier wings of the other groups")); + + // Two wings alone in their groups, as Cape of Fighter (12) and Cape of Lord (13), aren't compared with each other. + std::vector capes = {MakeWing(49, WingTier::Second, "Absorb {table:wingDamage}%"), + MakeWing(30, WingTier::Second, "Absorb {table:other}%")}; + capes[1].group = 13; + CHECK(CheckTableUses(capes).empty()); + + // A cape is compared with capes only. wings.back() = MakeWing(200, WingTier::Third, "Increase {table:otherDamage}% of Damage"); wings.back().tags.Set(ItemTag::Cape); CHECK(CheckTableUses(wings).empty()); - wings.back().tags = {}; - wings.back().group = 13; - CHECK(CheckTableUses(wings).empty()); } diff --git a/tests/data/test_item_stats_json.cpp b/tests/data/test_item_stats_json.cpp index 67fd4cb51f..43e05e99ea 100644 --- a/tests/data/test_item_stats_json.cpp +++ b/tests/data/test_item_stats_json.cpp @@ -393,7 +393,7 @@ TEST_CASE("Item stat file warnings [data][items]") CHECK(HasIssue(excellentAfter.issues, Severity::Warning, "default.defense.excellent.afterLevelBonus")); // A table no stat uses can be one for item descriptions, so the file alone does not warn about it - // (ValidateDescriptionPlaceholders does, with the items). + // (ValidateTableUses does, with the items). const ReadResult unusedTable = Read(Changed(R"("defense": {"table": "linear", )", R"("defense": {)")); CHECK(unusedTable.issues.empty()); CHECK_FALSE(ItemStatProfiles(unusedTable.file).IsTableUsedByStats("linear")); From f9a47098c179c98cc3b043c7bfd0fdcb3c6140e5 Mon Sep 17 00:00:00 2001 From: Mosch0512 Date: Fri, 23 Oct 2026 21:40:33 +0200 Subject: [PATCH 11/19] fix(items): wings without lines never set the lines of their tier The wing check took the lines most wings of a tier have as the ones the others are measured by, and wings without lines counted as one set of lines. New wings imported without their lines (a bmd import gives new items none), more of them than the wings with lines, then made "no lines" the majority: the wings with the right lines were pointed out and the new ones were not. Wings without lines no longer set the lines the others are compared with, so the new ones are the ones pointed out; a tie among the wings with lines is still reported as such. --- docs/item-data.md | 4 ++- .../GameData/ItemData/ItemDataValidation.cpp | 12 +++++-- .../test_item_description_placeholders.cpp | 35 +++++++++++++++++-- 3 files changed, 44 insertions(+), 7 deletions(-) diff --git a/docs/item-data.md b/docs/item-data.md index 9f65ecd123..ea4a1b7e81 100644 --- a/docs/item-data.md +++ b/docs/item-data.md @@ -276,7 +276,9 @@ bmd): groups that have more than one; Cape of Fighter (12) and Cape of Lord (13), each alone and written apart by the old code, are not compared with each other. Wings of a group that split evenly get one warning that they don't - agree, without blaming either side. + agree, without blaming either side. Wings without lines never set the + lines the others are compared with, so new wings imported without them are + pointed out, also when they are more than the wings with lines. The shipped data is checked by the tests, so a wrong placeholder fails the build's tests. diff --git a/src/source/Data/GameData/ItemData/ItemDataValidation.cpp b/src/source/Data/GameData/ItemData/ItemDataValidation.cpp index 1fff5608e4..ffca9b6588 100644 --- a/src/source/Data/GameData/ItemData/ItemDataValidation.cpp +++ b/src/source/Data/GameData/ItemData/ItemDataValidation.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -493,14 +494,19 @@ WingsByLines SortByLines(const std::vector& wings) return sorted; } -// The lines most of the wings have, or nothing when two sets of lines are as common. +// The lines most of the wings that have lines have, or nothing when two sets of lines are as common. Wings without +// lines never set the lines the others are compared with: new wings imported without their lines, more of them than +// there are wings with them, would otherwise point at the wings that have them. const ItemDefinition* FindMostLines(const WingsByLines& sorted) { - if (sorted.empty() || (sorted.size() > 1 && sorted[0].size() == sorted[1].size())) + WingsByLines withLines; + std::copy_if(sorted.begin(), sorted.end(), std::back_inserter(withLines), + [](const std::vector& having) { return !having.front()->description.empty(); }); + if (withLines.empty() || (withLines.size() > 1 && withLines[0].size() == withLines[1].size())) { return nullptr; } - return sorted[0].front(); + return withLines[0].front(); } using WingKey = std::tuple; diff --git a/tests/data/test_item_description_placeholders.cpp b/tests/data/test_item_description_placeholders.cpp index d3e3f3b6ee..27ace52211 100644 --- a/tests/data/test_item_description_placeholders.cpp +++ b/tests/data/test_item_description_placeholders.cpp @@ -292,7 +292,19 @@ TEST_CASE("Wings of a tier that split evenly are told they disagree, none of the CHECK(issues.front().message.starts_with("the third-tier wings of group 12 don't agree on their wing lines: ")); } - // Wings without lines count as a set of lines too: two new second-tier capes without them, next to one with them. + // Wings without lines don't take a side in a tie of the others. + std::vector withLineless = {wing(36, "Increase {table:wingDamage}%"), + wing(37, "Increase {table:other}%"), wing(200, "x")}; + withLineless.back().description.clear(); + const std::vector tie = CheckTableUses(withLineless); + REQUIRE(tie.size() == 1); + CHECK(tie.front().message.starts_with("the third-tier wings of group 12 don't agree on their wing lines: ")); +} + +TEST_CASE("Wings without lines never set the lines of their tier [data][items]") +{ + // Two new second-tier capes without lines, next to Cape of Fighter with them: the new ones are pointed out, though + // they are more. auto cape = [](short number, const char* text) { ItemDefinition item = MakeWing(number, WingTier::Second, text); @@ -303,8 +315,25 @@ TEST_CASE("Wings of a tier that split evenly are told they disagree, none of the capes[1].description.clear(); capes[2].description.clear(); const std::vector capeIssues = CheckTableUses(capes); - REQUIRE(capeIssues.size() == 1); - CHECK(capeIssues.front().number == 49); + REQUIRE(capeIssues.size() == 2); + CHECK(capeIssues[0].number == 201); + CHECK(capeIssues[1].number == 202); + + // The same for a whole batch: three new third-tier wings without lines next to two with them. + const std::string lines = "Increase {table:wingDamage}% of Damage"; + std::vector wings = {MakeWing(36, WingTier::Third, lines), MakeWing(37, WingTier::Third, lines)}; + for (short number = 300; number < 303; ++number) + { + wings.push_back(MakeWing(number, WingTier::Third, "x")); + wings.back().description.clear(); + } + const std::vector issues = CheckTableUses(wings); + REQUIRE(issues.size() == 3); + for (const ItemDataIssue& issue : issues) + { + CHECK(issue.number >= 300); + CHECK(issue.message.find("it has 0 lines naming no table") != std::string::npos); + } } TEST_CASE("A wing alone in its tier and group is compared with the other groups' wings of its tier [data][items]") From a16c57f8af213b2b11d35a19fe2f61850cb5fb68 Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Fri, 23 Oct 2026 16:48:13 -0300 Subject: [PATCH 12/19] fix(items): a description line's levels outside int's range are an error They were read as an int before the range check, so a number like 2^32 + 1 wrapped into level 1. --- .../Data/GameData/ItemData/ItemJsonFormat.cpp | 15 +++++++++------ tests/data/test_item_json.cpp | 5 ++++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp b/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp index 06928b341d..e931299afc 100644 --- a/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp +++ b/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp @@ -437,18 +437,21 @@ void ItemReader::ReadDescription(const OrderedJson& json, std::vector() >= 0 && value.get() < ItemLevelCount; }; - if (!json.is_array() || json.size() != 2 || !isLevel(json[0]) || !isLevel(json[1]) || - json[0].get() > json[1].get()) + // Read as a whole number first: a number outside int's range would wrap into a level. + const auto readLevel = [](const OrderedJson& value, long long& level) + { return ReadWholeNumber(value, level) && level >= 0 && level < ItemLevelCount; }; + long long first = 0; + long long last = 0; + if (!json.is_array() || json.size() != 2 || !readLevel(json[0], first) || !readLevel(json[1], last) || + first > last) { AddIssue(ItemDataIssueSeverity::Error, field, "must be [first, last], two item levels from 0 to " + std::to_string(ItemLevelCount - 1) + " with the first not above the last"); return; } - line.minLevel = json[0].get(); - line.maxLevel = json[1].get(); + line.minLevel = static_cast(first); + line.maxLevel = static_cast(last); } void ItemReader::ReadStats(const OrderedJson& json, ItemDefinition& definition) diff --git a/tests/data/test_item_json.cpp b/tests/data/test_item_json.cpp index e807079b9f..1b6fdf1438 100644 --- a/tests/data/test_item_json.cpp +++ b/tests/data/test_item_json.cpp @@ -381,7 +381,10 @@ TEST_CASE("A description line's item levels are kept through write and read, and CHECK(WriteItemGroupJson(14, result.items) == text); for (const char* levels : {R"("levels": [8, 1])", R"("levels": [0, 16])", R"("levels": [-1, 2])", - R"("levels": [3])", R"("levels": 3)", R"("levels": [1.5, 2])"}) + R"("levels": [3])", R"("levels": 3)", R"("levels": [1.5, 2])", + // Outside int's range: they'd wrap into a level (2^32 + 1 into 1) if read as an int. + R"("levels": [4294967297, 4294967298])", R"("levels": [-4294967295, 2])", + R"("levels": [0, 18446744073709551615])", R"("levels": [-9223372036854775808, 2])"}) { INFO(levels); const ReadResult bad = Read(std::string(R"({"formatVersion": 1, "group": 14, "items": [ From 971b19483a38bf1a690f0393ca43795cd3d2687f Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Fri, 23 Oct 2026 17:19:42 -0300 Subject: [PATCH 13/19] style(items): format the levels check --- src/source/Data/GameData/ItemData/ItemJsonFormat.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp b/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp index e931299afc..f1806b571c 100644 --- a/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp +++ b/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp @@ -442,8 +442,7 @@ void ItemReader::ReadDescriptionLevels(const OrderedJson& json, const std::strin { return ReadWholeNumber(value, level) && level >= 0 && level < ItemLevelCount; }; long long first = 0; long long last = 0; - if (!json.is_array() || json.size() != 2 || !readLevel(json[0], first) || !readLevel(json[1], last) || - first > last) + if (!json.is_array() || json.size() != 2 || !readLevel(json[0], first) || !readLevel(json[1], last) || first > last) { AddIssue(ItemDataIssueSeverity::Error, field, "must be [first, last], two item levels from 0 to " + std::to_string(ItemLevelCount - 1) + From f2210179c1b7404388140c5bd6506e2304efc8d6 Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Fri, 23 Oct 2026 18:53:26 -0300 Subject: [PATCH 14/19] test(items): the second chain's fixed texts keep the translations the old code showed item_chain_texts_before.json records them from the .resx of the commit before the move, a format filled in with the item's values; the test compares each moved line in every language with them. --- tests/data/CMakeLists.txt | 1 + tests/data/item_chain_texts_before.json | 776 ++++++++++++++++++++++++ tests/data/test_item_database_files.cpp | 34 ++ 3 files changed, 811 insertions(+) create mode 100644 tests/data/item_chain_texts_before.json diff --git a/tests/data/CMakeLists.txt b/tests/data/CMakeLists.txt index 68b48ed70f..77a9eb6d69 100644 --- a/tests/data/CMakeLists.txt +++ b/tests/data/CMakeLists.txt @@ -87,6 +87,7 @@ mu_add_test( ) target_compile_definitions(test_item_database_files PRIVATE MU_TEST_DATA_DIR="${CMAKE_SOURCE_DIR}/src/bin/Data" + MU_TEST_CHAIN_TEXTS_BEFORE="${CMAKE_CURRENT_SOURCE_DIR}/item_chain_texts_before.json" ) # Animates the shipped player model the way the character pre-pass does. diff --git a/tests/data/item_chain_texts_before.json b/tests/data/item_chain_texts_before.json new file mode 100644 index 0000000000..e35797b19f --- /dev/null +++ b/tests/data/item_chain_texts_before.json @@ -0,0 +1,776 @@ +{ + "_comment": "The translations the tooltip showed for the second item chain's fixed texts before they moved into the item data (#820), from the .resx of the commit before; by the English text.", + "texts": { + "+10~+15 When upgrading level item please put it in combination window.": { + "de": "Legen Sie Gegenstände für die Verbesserung auf +10~+15 in das Kombinationsfenster.", + "es": "+10~+15 Al actualizar el elemento de nivel, colóquelo en la ventana de combinación.", + "id": "+10~+15 Saat meningkatkan item level, harap letakkan di jendela kombinasi.", + "ja": "+10~+15レベルアイテムのアップグレード時に合成ウィンドウに入れて使用", + "pl": "+10~+15 Podczas ulepszania przedmiotu na poziomie proszę umieścić go w oknie kombinacji.", + "pt": "+10~+15 Ao atualizar o item de nível, coloque-o na janela de combinação.", + "ru": "+10~+15 При обновлении предмета уровня поместите его в окно комбинации.", + "tl": "+10~+15 Kapag nag-a-upgrade ng item sa antas, mangyaring ilagay ito sa window ng kumbinasyon.", + "uk": "+10~+15 Під час підвищення рівня предмета, будь ласка, помістіть його у вікно комбінацій.", + "zh-TW": "+10~+15 升級等級項目時請將其放在組合視窗中。" + }, + "Alleviates monster's damage by 30%": { + "de": "Verringert den Schaden durch Monster um 30%", + "es": "Alivia el daño del monstruo en un 30%", + "id": "Mengurangi kerusakan monster sebesar 30%", + "ja": "モンスターからのダメージを30%吸収", + "pl": "Zmniejsza obrażenia potworów o 30%", + "pt": "Alivia o dano do monstro em 30%", + "ru": "Уменьшает урон монстра на 30%", + "tl": "Binabawasan ang pinsala ng halimaw ng 30%", + "uk": "Зменшує шкоду монстра на 30%", + "zh-TW": "減少怪物傷害30%" + }, + "Applicable to mountable items only besides pet.": { + "de": "Gilt nur für Reittiere, nicht für Haustiere.", + "es": "Aplicable solo a artículos montables además de mascotas.", + "id": "Hanya berlaku untuk item yang dapat dipasang selain hewan peliharaan.", + "ja": "ペットを除いた装着型アイテムにのみ適用されます。", + "pl": "Dotyczy tylko wierzchowców (bez zwierzaków).", + "pt": "Aplicável apenas a itens montáveis ​​além de animais de estimação.", + "ru": "Применимо только к монтируемым предметам, кроме питомца.", + "tl": "Naaangkop sa mga naka-mount na item lamang bukod sa alagang hayop.", + "uk": "Застосовується лише для встановлюваних елементів, крім домашніх тварин.", + "zh-TW": "僅適用於寵物以外的可安裝物品。" + }, + "Assemble the Scroll of Blood with the contract from the Illusion Sorcery.": {}, + "Assemble the Scroll of Blood with the old scrolls.": { + "de": "Stellen Sie die Schriftrolle des Blutes aus den alten Schriftrollen her.", + "es": "Reúne el Pergamino de Sangre con los pergaminos antiguos.", + "id": "Rakit Gulungan Darah dengan gulungan lama.", + "ja": "古い巻物と一緒に血の巻物を合成することが出来ます。", + "pl": "Złóż Scroll of Blood ze starymi zwojami.", + "pt": "Monte o Pergaminho de Sangue com os pergaminhos antigos.", + "ru": "Соберите Свиток Крови из старых свитков.", + "tl": "Ipunin ang Scroll of Blood gamit ang mga lumang scroll.", + "uk": "Зберіть Сувій крові зі старих сувоїв.", + "zh-TW": "將血液捲軸與舊捲軸組裝起來。" + }, + "Attack Speed increase +7": { + "de": "Angriffsgeschwindigkeit +7", + "es": "Aumento de velocidad de ataque +7", + "id": "Kecepatan Serangan meningkat +7", + "ja": "攻撃速度上昇 +7", + "pl": "Zwiększenie prędkości ataku +7", + "pt": "Aumento de velocidade de ataque +7", + "ru": "Увеличение скорости атаки +7", + "tl": "Tumaas ang Bilis ng Pag-atake +7", + "uk": "Збільшення швидкості атаки +7", + "zh-TW": "攻擊速度增加+7" + }, + "Auto-collects zen around you.": { + "de": "Sammelt automatisch Zen in Ihrer Umgebung.", + "es": "Recoge automáticamente el zen a tu alrededor.", + "id": "Mengumpulkan zen secara otomatis di sekitar Anda.", + "ja": "周りのゼンを自動的に拾得してくれます。", + "pl": "Automatycznie zbiera zen wokół ciebie.", + "pt": "Coleta automaticamente o zen ao seu redor.", + "ru": "Автоматически собирает дзен вокруг себя.", + "tl": "Auto-collect ng zen sa paligid mo.", + "uk": "Автоматично збирає дзен навколо вас.", + "zh-TW": "自動收集你周圍的禪宗。" + }, + "Automatic HP recovery 3%": { + "de": "Automatische HP-Wiederherstellung 3%", + "es": "Recuperación automática de HP 3%", + "id": "Pemulihan HP otomatis 3%", + "ja": "オートヒーリング 3%", + "pl": "Automatyczne odzyskiwanie HP 3%", + "pt": "Recuperação automática de HP 3%", + "ru": "Автоматическое восстановление HP 3%", + "tl": "Awtomatikong pagbawi ng HP 3%", + "uk": "Автоматичне відновлення HP 3%", + "zh-TW": "HP自動恢復 3%" + }, + "Boosts the item drop rate.": { + "de": "Erhöht die Gegenstands-Droprate.", + "es": "Aumenta la tasa de caída de artículos.", + "id": "Meningkatkan tingkat penurunan item.", + "ja": "アイテム獲得量を上昇させる効果があります。", + "pl": "Zwiększa częstotliwość wypadania przedmiotów.", + "pt": "Aumenta a taxa de queda de itens.", + "ru": "Увеличивает шанс выпадения предметов.", + "tl": "Pinapalakas ang rate ng pagbagsak ng item.", + "uk": "Збільшує швидкість випадання предметів.", + "zh-TW": "提高物品掉落率。" + }, + "Cannot Repair": { + "de": "Kann nicht repariert werden", + "es": "No se puede reparar", + "id": "Tidak Dapat Memperbaiki", + "ja": "修理不可能", + "pl": "Nie można naprawić", + "pt": "Não é possível reparar", + "ru": "Невозможно восстановить", + "tl": "Hindi Maaayos", + "uk": "Неможливо відремонтувати", + "zh-TW": "無法修復" + }, + "Congratulations. Please contact CS team and change it to item.": { + "de": "Herzlichen Glückwunsch. Bitte wenden Sie sich an den Kundendienst, um ihn in einen Gegenstand umzuwandeln.", + "es": "Felicidades. Comuníquese con el equipo de CS y cámbielo a elemento.", + "id": "Selamat. Silakan menghubungi tim CS dan mengubahnya menjadi item.", + "ja": "おめでとうございます。運営チームに連絡すると、当選アイテムと交換できます。", + "pl": "Gratulacje. Skontaktuj się z obsługą, aby wymienić to na przedmiot.", + "pt": "Parabéns. Entre em contato com a equipe CS e altere para item.", + "ru": "Поздравляю. Пожалуйста, свяжитесь с командой CS и измените его на элемент.", + "tl": "Binabati kita. Mangyaring makipag-ugnayan sa CS team at palitan ito ng item.", + "uk": "Вітаю. Будь ласка, зв’яжіться з командою CS і змініть його на елемент.", + "zh-TW": "恭喜。請聯絡CS團隊並將其變更為專案。" + }, + "Damage Decrease +4%": { + "de": "Schadensreduzierung +4%", + "es": "Disminución de daño +4%", + "id": "Penurunan Kerusakan +4%", + "ja": "ダメージ減少 +4%", + "pl": "Zmniejszenie obrażeń +4%", + "pt": "Redução de dano +4%", + "ru": "Уменьшение урона +4%", + "tl": "Pagbawas ng Pinsala +4%", + "uk": "Зменшення шкоди +4%", + "zh-TW": "傷害減少 +4%" + }, + "Drop it to receive the gift.": { + "de": "Lassen Sie es fallen, um das Geschenk zu erhalten.", + "es": "Déjalo para recibir el regalo.", + "id": "Jatuhkan untuk menerima hadiah.", + "ja": "地面に投げるとプレゼントが出ます。", + "pl": "Upuść go, aby otrzymać prezent.", + "pt": "Solte-o para receber o presente.", + "ru": "Брось его, чтобы получить подарок.", + "tl": "I-drop ito upang matanggap ang regalo.", + "uk": "Киньте його, щоб отримати подарунок.", + "zh-TW": "放下它即可收到禮物。" + }, + "EXP rate 50% increase": { + "de": "Erfahrungsrate +50%", + "es": "Tasa de EXP 50% iaumentar", + "id": "Tingkat EXP 50% imeningkat", + "ja": "経験値50%向上", + "pl": "EXP +50%", + "pt": "Taxa de EXP 50% inaumento", + "ru": "Скорость опыта 50% increase", + "tl": "EXP rate 50% inadagdagan", + "uk": "Швидкість досвіду збільшується на 50% in", + "zh-TW": "EXP率50% i增加" + }, + "Enables entrance into Illusion Temple.": { + "de": "Ermöglicht den Zugang zu Illusion Temple.", + "es": "Permite la entrada a Illusion Temple.", + "id": "Memungkinkan masuk ke Illusion Temple.", + "ja": "Illusion Temple 入場時、決まった回数だけ使えます。", + "pl": "Umożliwia wejście do Illusion Temple.", + "pt": "Permite a entrada em Illusion Temple.", + "ru": "Позволяет войти в Illusion Temple.", + "tl": "Pinapagana ang pagpasok sa Illusion Temple.", + "uk": "Дозволяє вхід у Illusion Temple.", + "zh-TW": "允許進入 Illusion Temple。" + }, + "Excellent Damage rate +10%": { + "de": "Exzellente Schadensrate +10%", + "es": "Excelente tasa de daño +10%", + "id": "Tingkat Kerusakan Luar Biasa +10%", + "ja": "エクセレントダメージ確率 +10%", + "pl": "Szansa na obrażenia doskonałe +10%", + "pt": "Excelente taxa de dano +10%", + "ru": "Отличный урон +10%", + "tl": "Napakahusay na Damage rate +10%", + "uk": "Відмінний рівень шкоди +10%", + "zh-TW": "優 破損率+10%" + }, + "Exp and item will be secured when character dies.": { + "de": "Erfahrung und Gegenstände bleiben beim Tod des Charakters erhalten.", + "es": "La experiencia y el artículo se asegurarán cuando el personaje muera.", + "id": "Exp dan item akan diamankan ketika karakter mati.", + "ja": "キャラクター死亡時経験値及びアイテムが維持されます。", + "pl": "Exp i przedmiot zostaną zabezpieczone, gdy postać umrze.", + "pt": "Exp e item serão garantidos quando o personagem morrer.", + "ru": "Опыт и предмет будут сохранены после смерти персонажа.", + "tl": "Mase-secure ang exp at item kapag namatay ang character.", + "uk": "Досвід і предмет будуть захищені, коли персонаж помре.", + "zh-TW": "當角色死亡時,經驗值和物品將受到保護。" + }, + "Increase Defensive Skill +50": { + "de": "Verteidigung +50", + "es": "Aumentar la habilidad defensiva +50", + "id": "Tingkatkan Keterampilan Pertahanan +50", + "ja": "防御力+50", + "pl": "Obrona +50", + "pt": "Aumente a habilidade defensiva +50", + "ru": "Увеличение навыка защиты +50", + "tl": "Dagdagan ang Defensive Skill +50", + "uk": "Підвищення навичок захисту +50", + "zh-TW": "防禦技能增加+50" + }, + "Increase Max HP +4%": { + "de": "Erhöht max. HP +4%", + "es": "Incrementar HP máximo +4%", + "id": "Meningkatkan HP Maks +4%", + "ja": "最大生命力増加 +4%", + "pl": "Zwiększa maks. HP +4%", + "pt": "Aumenta HP máximo +4%", + "ru": "Увеличение максимального запаса здоровья +4%", + "tl": "Taasan ang Max HP +4%", + "uk": "Збільшити макс. HP +4%", + "zh-TW": "最大生命值增加+4%" + }, + "Increase Max. AG + Level": { + "de": "Erhöht max. AG + Level", + "es": "Aumentar máx. Nivel AG +", + "id": "Tingkatkan Maks. AG + Tingkat", + "ja": "最大AG増加 + レベル", + "pl": "Zwiększa maks. AG + poziom", + "pt": "Aumentar Máx. AG + Nível", + "ru": "Увеличить Макс. АГ + Уровень", + "tl": "Dagdagan ang Max. AG + Level", + "uk": "Збільшити Макс. AG + рівень", + "zh-TW": "增加最大。 AG+等級" + }, + "Increase Max. SD + Levelx10": { + "de": "Erhöht max. SD + Level x10", + "es": "Aumentar máx. SD + Nivelx10", + "id": "Tingkatkan Maks. SD+Levelx10", + "ja": "最大SD増加 + レベルx10", + "pl": "Zwiększa maks. SD + poziom×10", + "pt": "Aumentar Máx. SD + Nívelx10", + "ru": "Увеличить Макс. СД + Уровеньx10", + "tl": "Dagdagan ang Max. SD + Levelx10", + "uk": "Збільшити Макс. SD + Рівеньx10", + "zh-TW": "增加最大。 SD + 等級x10" + }, + "Increases Attack Power and Wizardry by 40%": { + "de": "Erhöht Angriffskraft und Zauberei um 40%", + "es": "Aumenta el poder de ataque y la hechicería en un 40%", + "id": "Meningkatkan Kekuatan Serangan dan Sihir sebesar 40%", + "ja": "攻撃力、魔力40%向上", + "pl": "Zwiększa siłę ataku i obrażenia magiczne o 40%", + "pt": "Aumenta o poder de ataque e a magia em 40%", + "ru": "Увеличивает силу атаки и волшебство на 40%", + "tl": "Pinapataas ng 40% ang Attack Power at Wizardry", + "uk": "Збільшує силу атаки та магію на 40%", + "zh-TW": "攻擊力和魔法增加40%" + }, + "Increases Attack Speed by 10": { + "de": "Erhöht die Angriffsgeschwindigkeit um 10", + "es": "Aumenta la velocidad de ataque en 10", + "id": "Meningkatkan Kecepatan Serangan sebanyak 10", + "ja": "攻撃速度+10増加", + "pl": "Zwiększa prędkość ataku o 10", + "pt": "Aumenta a velocidade de ataque em 10", + "ru": "Увеличивает скорость атаки на 10.", + "tl": "Pinapataas ng 10 ang Bilis ng Pag-atake", + "uk": "Збільшує швидкість атаки на 10", + "zh-TW": "攻擊速度提高 10" + }, + "Increases Max Mana 4%": { + "de": "Erhöht max. Mana um 4%", + "es": "Aumenta el maná máximo un 4%", + "id": "Meningkatkan Mana Maks 4%", + "ja": "最大マナ増加4%", + "pl": "Zwiększa maksymalną manę 4%", + "pt": "Aumenta a Mana Máxima em 4%", + "ru": "Увеличивает максимальное количество маны на 4%", + "tl": "Tumataas ng Max Mana 4%", + "uk": "Збільшує максимальну ману на 4%", + "zh-TW": "最大法力增加 4%" + }, + "Increases Maximum Life by 50": { + "de": "Erhöht das maximale Leben um 50", + "es": "Aumenta la vida máxima en 50", + "id": "Meningkatkan Kehidupan Maksimum sebesar 50", + "ja": "最大生命力+50", + "pl": "Zwiększa maksymalne życie o 50", + "pt": "Aumenta a Vida Máxima em 50", + "ru": "Увеличивает максимальное количество жизни на 50.", + "tl": "Pinapataas ng 50 ang Pinakamataas na Buhay", + "uk": "Збільшує максимальне життя на 50", + "zh-TW": "最大生命增加 50" + }, + "Increases acquisition rate of Mana after hunting monsters +Mana/8": { + "de": "Erhöht die Manaregeneration beim Jagen von Monstern +Mana/8", + "es": "Aumenta la tasa de adquisición de Mana después de cazar monstruos +Mana/8", + "id": "Meningkatkan tingkat perolehan Mana setelah berburu monster +Mana/8", + "ja": "獲得するマナ増加 +マナ/8", + "pl": "Zwiększa szybkość zdobywania many po polowaniu na potwory +Mana/8", + "pt": "Aumenta a taxa de aquisição de Mana após caçar monstros +Mana/8", + "ru": "Увеличивает скорость получения маны после охоты на монстров +Мана/8.", + "tl": "Pinapataas ang rate ng pagkuha ng Mana pagkatapos manghuli ng mga halimaw +Mana/8", + "uk": "Збільшує швидкість отримання мани після полювання на монстрів +Мана/8", + "zh-TW": "狩獵怪物後魔力獲取率增加+魔力/8" + }, + "Increases acquisition rate of Zen after hunting monsters +30%": { + "de": "Erhöht den Zen-Ertrag beim Jagen von Monstern +30%", + "es": "Aumenta la tasa de adquisición de Zen después de cazar monstruos +30%", + "id": "Meningkatkan tingkat perolehan Zen setelah berburu monster +30%", + "ja": "獲得ゼンの増加 +30%", + "pl": "Zwiększa szybkość zdobywania Zen po polowaniu na potwory +30%", + "pt": "Aumenta a taxa de aquisição de Zen após caçar monstros +30%", + "ru": "Увеличивает скорость получения Дзен после охоты на монстров +30%", + "tl": "Pinapataas ang rate ng pagkuha ng Zen pagkatapos ng pangangaso ng mga halimaw +30%", + "uk": "Збільшує швидкість отримання Дзен після полювання на монстрів +30%", + "zh-TW": "狩獵怪物後禪的獲得率增加+30%" + }, + "Increases experience gained and item drop rate.": { + "de": "Erhöht die erhaltene Erfahrung und die Droprate von Gegenständen.", + "es": "Aumenta la experiencia obtenida y la tasa de caída de elementos.", + "id": "Meningkatkan pengalaman yang diperoleh dan tingkat penurunan item.", + "ja": "経験値とアイテム獲得量が増加する効果があります。", + "pl": "Zwiększa zdobywane doświadczenie i częstotliwość wypadania przedmiotów.", + "pt": "Aumenta a experiência adquirida e a taxa de queda de itens.", + "ru": "Увеличивает получаемый опыт и шанс выпадения предметов.", + "tl": "Pinapataas ang karanasang natamo at rate ng pagbaba ng item.", + "uk": "Збільшує отриманий досвід і швидкість випадання предметів.", + "zh-TW": "增加獲得的經驗值和物品掉落率。" + }, + "Increases experience gained.": { + "de": "Erhöht die erhaltene Erfahrung.", + "es": "Aumenta la experiencia adquirida.", + "id": "Meningkatkan pengalaman yang diperoleh.", + "ja": "経験値獲得量が増加する効果があります。", + "pl": "Zwiększa zdobywane doświadczenie.", + "pt": "Aumenta a experiência adquirida.", + "ru": "Увеличивает получаемый опыт.", + "tl": "Nagpapataas ng karanasang natamo.", + "uk": "Збільшує отриманий досвід.", + "zh-TW": "增加獲得的經驗。" + }, + "Increases the combination rate,but only up to the maximum rate.": { + "de": "Erhöht die Kombinationsrate, jedoch nur bis zur Maximalrate.", + "es": "Aumenta la tasa de combinación, pero solo hasta la tasa máxima.", + "id": "Meningkatkan laju kombinasi, namun hanya hingga laju maksimum.", + "ja": "合成成功確率が高くなり、一定の数値以上は高くなりません。", + "pl": "Zwiększa współczynnik kombinacji, ale tylko do maksymalnego współczynnika.", + "pt": "Aumenta a taxa de combinação, mas apenas até a taxa máxima.", + "ru": "Увеличивает коэффициент комбинации, но только до максимального коэффициента.", + "tl": "Pinapataas ang rate ng kumbinasyon, ngunit hanggang sa maximum na rate lamang.", + "uk": "Збільшує швидкість комбінації, але лише до максимальної швидкості.", + "zh-TW": "增加組合速率,但僅達最大速率。" + }, + "Ingredients for the 3rd wing assembly.": { + "de": "Zutaten für die Herstellung der Flügel der 3. Stufe.", + "es": "Ingredientes para el montaje de la 3ª ala.", + "id": "Bahan untuk perakitan sayap ke-3.", + "ja": "3次羽合成のための材料", + "pl": "Składnik do stworzenia skrzydeł 3. poziomu.", + "pt": "Ingredientes para a montagem da 3ª asa.", + "ru": "Ингредиенты для сборки третьего крыла.", + "tl": "Mga sangkap para sa 3rd wing assembly.", + "uk": "Інгредієнти для складання 3-го крила.", + "zh-TW": "第三機翼組件的材料。" + }, + "It reduces the killing rate.": { + "de": "Verringert die Anzahl der Spielermorde.", + "es": "Reduce la tasa de matanza.", + "id": "Ini mengurangi tingkat pembunuhan.", + "ja": "PK数値の減少効果があります。", + "pl": "Zmniejsza licznik zabójstw (PK).", + "pt": "Reduz a taxa de mortalidade.", + "ru": "Это снижает уровень убийств.", + "tl": "Binabawasan nito ang rate ng pagpatay.", + "uk": "Це знижує швидкість вбивства.", + "zh-TW": "它降低了殺滅率。" + }, + "It's a box containing various items.": { + "de": "Eine Kiste mit verschiedenen Gegenständen.", + "es": "Es una caja que contiene varios artículos.", + "id": "Itu adalah kotak berisi berbagai item.", + "ja": "各種商品が入っている箱です。", + "pl": "To pudełko zawierające różne przedmioty.", + "pt": "É uma caixa contendo vários itens.", + "ru": "Это коробка, содержащая различные предметы.", + "tl": "Ito ay isang kahon na naglalaman ng iba't ibang mga item.", + "uk": "Це коробка з різними предметами.", + "zh-TW": "這是一個裝有各種物品的盒子。" + }, + "Item durability will not be decrease for a certain period.": { + "de": "Die Haltbarkeit von Gegenständen sinkt für einen bestimmten Zeitraum nicht.", + "es": "La durabilidad del artículo no disminuirá durante un período determinado.", + "id": "Daya tahan item tidak akan berkurang selama jangka waktu tertentu.", + "ja": "アイテムの耐久度が一定期間落ちません。", + "pl": "Trwałość przedmiotu nie ulegnie zmniejszeniu przez pewien okres.", + "pt": "A durabilidade do item não diminuirá por um determinado período.", + "ru": "Прочность предмета не будет уменьшаться в течение определенного периода.", + "tl": "Ang tibay ng item ay hindi bababa sa isang tiyak na panahon.", + "uk": "Стійкість предмета не буде знижуватися протягом певного періоду.", + "zh-TW": "物品耐久度在一定時間內不會減少。" + }, + "Keeps item durable": { + "de": "Erhält die Haltbarkeit von Gegenständen", + "es": "Mantiene el artículo duradero", + "id": "Menjaga barang tetap tahan lama", + "ja": "アイテム耐久度維持", + "pl": "Utrzymuje trwałość przedmiotu", + "pt": "Mantém o item durável", + "ru": "Сохраняет вещь прочной", + "tl": "Pinapanatiling matibay ang item", + "uk": "Зберігає предмет міцним", + "zh-TW": "保持物品耐用" + }, + "Master Level Characters.": { + "de": "Charaktere mit Master-Level.", + "es": "Personajes de nivel maestro.", + "id": "Karakter Tingkat Master.", + "ja": "アイテム獲得率増加効果は適用されません。", + "pl": "postaci na poziomie mistrzowskim.", + "pt": "Personagens de nível mestre.", + "ru": "Персонажи уровня Мастер.", + "tl": "Mga Master Level na Character.", + "uk": "Персонажі майстерного рівня.", + "zh-TW": "大師級人物。" + }, + "Master Level EXP cannot be achieved during the item usage.": { + "de": "Während der Verwendung des Gegenstands kann keine Master-Erfahrung gesammelt werden.", + "es": "La EXP de nivel maestro no se puede lograr durante el uso del artículo.", + "id": "EXP Tingkat Master tidak dapat dicapai selama penggunaan item.", + "ja": "利用中はマスターレベル経験値が獲得できません。", + "pl": "Podczas działania przedmiotu nie zdobywasz EXP poziomu mistrzowskiego.", + "pt": "Master Level EXP não pode ser alcançado durante o uso do item.", + "ru": "Опыт мастер-уровня не может быть достигнут во время использования предмета.", + "tl": "Ang Master Level EXP ay hindi makakamit sa panahon ng paggamit ng item.", + "uk": "Майстер-рівень EXP не може бути досягнутий під час використання предмета.", + "zh-TW": "使用物品期間無法獲得大師級經驗值。" + }, + "Max. HP increase +100": { + "de": "Max. HP +100", + "es": "Máx. Aumento de HP +100", + "id": "Maks. Peningkatan HP +100", + "ja": "最大 HP 上昇 +100", + "pl": "Maks. HP +100", + "pt": "Máx. Aumento de HP +100", + "ru": "Макс. Увеличение HP +100", + "tl": "Max. Tumaas ang HP +100", + "uk": "Макс. HP збільшення +100", + "zh-TW": "最大限度。生命值增加+100" + }, + "Minimum +10 - +15 level item upgrade": { + "de": "Mindestens +10 bis +15 bei der Verbesserung von Gegenständen:", + "es": "Actualización mínima de elemento de nivel +10 - +15", + "id": "Minimal +10 - +15 peningkatan item level", + "ja": "+10~+15レベル以上のアイテムアップグレード時", + "pl": "Przy ulepszaniu przedmiotu na +10 – +15", + "pt": "Atualização mínima de item de nível +10 - +15", + "ru": "Минимум +10–+15 повышение уровня предмета.", + "tl": "Pinakamababang +10 - +15 na antas ng pag-upgrade ng item", + "uk": "Мінімальне підвищення рівня +10 - +15", + "zh-TW": "最低 +10 - +15 級物品升級" + }, + "Mobility speed reduces upon achievement.": { + "de": "Beim Tragen verringert sich die Bewegungsgeschwindigkeit.", + "es": "La velocidad de movilidad se reduce al lograrlo.", + "id": "Kecepatan mobilitas berkurang setelah pencapaian.", + "ja": "獲得時に移動速度減少", + "pl": "Po podniesieniu przedmiotu prędkość ruchu spada.", + "pt": "A velocidade de mobilidade diminui após a conquista.", + "ru": "Скорость мобильности снижается при достижении.", + "tl": "Ang bilis ng paggalaw ay bumababa kapag nakamit.", + "uk": "Швидкість рухливості знижується після досягнення.", + "zh-TW": "成就後移動速度會降低。" + }, + "No penalty for dying.": { + "de": "Keine Strafe beim Tod.", + "es": "No hay pena por morir.", + "id": "Tidak ada penalti untuk kematian.", + "ja": "死亡の時ペナルティーがつきません。", + "pl": "Nie ma kary za śmierć.", + "pt": "Nenhuma penalidade por morrer.", + "ru": "Никакого наказания за смерть.", + "tl": "Walang parusa sa pagkamatay.", + "uk": "Жодного покарання за смерть.", + "zh-TW": "死亡沒有懲罰。" + }, + "Not applicable to": { + "de": "Gilt nicht für", + "es": "No aplicable a", + "id": "Tidak berlaku untuk", + "ja": "ご注意 マスターレベルには経験値獲得量増加、", + "pl": "Nie dotyczy", + "pt": "Não aplicável a", + "ru": "Не применимо к", + "tl": "Hindi naaangkop sa", + "uk": "Не застосовується до", + "zh-TW": "不適用於" + }, + "Prevents experiences to be gained.": { + "de": "Verhindert, dass Erfahrung gesammelt wird.", + "es": "Impide que se adquieran experiencias.", + "id": "Mencegah pengalaman diperoleh.", + "ja": "経験値が獲得できないように維持する効果があります。", + "pl": "Uniemożliwia zdobywanie doświadczenia.", + "pt": "Impede que experiências sejam adquiridas.", + "ru": "Мешает приобретению опыта.", + "tl": "Pinipigilan ang mga karanasan na makuha.", + "uk": "Заважає отримати досвід.", + "zh-TW": "阻止獲得經驗。" + }, + "Right click to use.": { + "de": "Zum Verwenden rechtsklicken.", + "es": "Haga clic derecho para usar.", + "id": "Klik kanan untuk menggunakan.", + "ja": "右クリックで使用します。", + "pl": "Kliknij prawym przyciskiem myszy, aby użyć.", + "pt": "Clique com o botão direito para usar.", + "ru": "Щелкните правой кнопкой мыши, чтобы использовать.", + "tl": "I-right click para gamitin.", + "uk": "Клацніть правою кнопкою миші, щоб використати.", + "zh-TW": "右鍵點擊即可使用。" + }, + "Save the application location.": { + "de": "Speichert den Ort der Anwendung.", + "es": "Guarde la ubicación de la aplicación.", + "id": "Simpan lokasi aplikasi.", + "ja": "該当の場所を記憶することができます。", + "pl": "Zapisuje miejsce użycia.", + "pt": "Salve o local do aplicativo.", + "ru": "Сохраните местоположение приложения.", + "tl": "I-save ang lokasyon ng application.", + "uk": "Збережіть розташування програми.", + "zh-TW": "儲存應用程式位置。" + }, + "Surrounding Zens are automatically collected.": { + "de": "Zen in der Umgebung wird automatisch eingesammelt.", + "es": "Los Zen circundantes se recopilan automáticamente.", + "id": "Zen di sekitarnya dikumpulkan secara otomatis.", + "ja": "周辺のゼンを自動的に拾得します。", + "pl": "Zen w pobliżu jest zbierany automatycznie.", + "pt": "Os Zens circundantes são coletados automaticamente.", + "ru": "Окружающие дзены собираются автоматически.", + "tl": "Ang mga nakapalibot na Zen ay awtomatikong kinokolekta.", + "uk": "Навколишні дзени збираються автоматично.", + "zh-TW": "周圍的禪宗會自動收集。" + }, + "That's the only thing that will get Lugard to help you": { + "de": "Nur damit hilft Ihnen Lugard,", + "es": "Eso es lo único que hará que Lugard te ayude.", + "id": "Itulah satu-satunya hal yang akan membuat Lugard membantu Anda", + "ja": "NPCルガドによって次元の狭間へ", + "pl": "Tylko to sprawi, że Lugard ci pomoże", + "pt": "Essa é a única coisa que fará Lugard ajudá-lo", + "ru": "Это единственное, что заставит Лугарда помочь вам.", + "tl": "Iyan lang ang makakatutulong sa iyo ni Lugard", + "uk": "Це єдине, що змусить Лугарда вам допомогти", + "zh-TW": "這是唯一能讓盧加德幫助你的事情" + }, + "The remaining time is shown": { + "de": "Die verbleibende Zeit wird angezeigt", + "es": "Se muestra el tiempo restante", + "id": "Waktu yang tersisa ditampilkan", + "ja": "マウスボタンを右クリックすれば", + "pl": "Wyświetlany jest pozostały czas", + "pt": "O tempo restante é mostrado", + "ru": "Оставшееся время показано", + "tl": "Ang natitirang oras ay ipinapakita", + "uk": "Показано час, що залишився", + "zh-TW": "顯示剩餘時間" + }, + "This is a mark of Illusion Sorcery; this is required to enter the temple.": { + "de": "Dies ist das Zeichen von Illusion Sorcery; es wird zum Betreten des Tempels benötigt.", + "es": "Esta es una marca de hechicería de ilusión; esto es necesario para entrar al templo.", + "id": "Ini adalah tanda dari Ilmu Sihir Ilusi; ini diperlukan untuk memasuki kuil.", + "ja": "幻影教団の一員であることを表す証です。テンプル入場に必要です。", + "pl": "To znak Illusion Sorcery; jest wymagany, by wejść do świątyni.", + "pt": "Esta é uma marca da Feitiçaria da Ilusão; isso é necessário para entrar no templo.", + "ru": "Это знак волшебства иллюзий; это необходимо для входа в храм.", + "tl": "Ito ay isang marka ng Illusion Sorcery; ito ay kinakailangan upang makapasok sa templo.", + "uk": "Це ознака магії ілюзій; це потрібно для входу в храм.", + "zh-TW": "這是幻術的印記;這是進入寺廟所必需的。" + }, + "Throw it and you may receive some Zen or items": { + "de": "Werfen Sie es weg und Sie erhalten vielleicht etwas Zen oder Gegenstände", + "es": "Tíralo y podrás recibir algo de Zen o artículos.", + "id": "Lemparkan dan Anda mungkin menerima beberapa Zen atau item", + "ja": "地面に投げればゼンやアイテムが出現", + "pl": "Rzuć nim, a możesz otrzymać trochę Zen lub przedmiotów", + "pt": "Jogue-o e você poderá receber algum Zen ou itens", + "ru": "Бросайте его, и вы можете получить немного Дзена или предметы.", + "tl": "Itapon ito at maaari kang makatanggap ng ilang Zen o mga item", + "uk": "Киньте його, і ви можете отримати дзен або предмети", + "zh-TW": "丟掉它,你可能會收到一些禪宗或物品" + }, + "Up to 170% EXP gain increase, depending on the number of members in your party.": { + "de": "Bis zu 170% mehr Erfahrung, abhängig von der Anzahl der Mitglieder in Ihrer Party.", + "es": "Aumento de ganancia de hasta 170% EXP, dependiendo del número de miembros de tu grupo.", + "id": "Peningkatan perolehan hingga 170% EXP, tergantung pada jumlah anggota di party Anda.", + "ja": "経験値190%に増加、パーティー1人毎に+10%増加", + "pl": "Zwiększenie zysku aż do 170% EXP, w zależności od liczby członków w Twojej grupie.", + "pt": "Aumento de ganho de até 170% EXP, dependendo do número de membros do seu grupo.", + "ru": "Увеличение получаемого урона до 170% EXP, в зависимости от количества членов вашей группы.", + "tl": "Hanggang 170% EXP ang pagtaas ng kita, depende sa bilang ng mga miyembro sa iyong partido.", + "uk": "Збільшення приросту до 170% EXP, залежно від кількості учасників у вашій групі.", + "zh-TW": "增益增加最多 170% EXP,取決於隊伍中的成員數量。" + }, + "Warp Command Window available.": { + "de": "Warp-Befehlsfenster verfügbar.", + "es": "Ventana de comando Warp disponible.", + "id": "Jendela Perintah Warp tersedia.", + "ja": "マップ移動ウィンドウが使えます。", + "pl": "Dostępne okno komend Warp.", + "pt": "Janela de comando Warp disponível.", + "ru": "Доступно окно управления варпом.", + "tl": "Available ang Warp Command Window.", + "uk": "Доступне вікно команд Warp.", + "zh-TW": "扭曲命令視窗可用。" + }, + "You can achieve special items with combinations.": { + "de": "Durch Kombinationen können Sie besondere Gegenstände erhalten.", + "es": "Puedes conseguir objetos especiales con combinaciones.", + "id": "Anda dapat memperoleh item khusus dengan kombinasi.", + "ja": "パンドラ合成でアイテムを獲得", + "pl": "Dzięki kombinacjom możesz zdobyć specjalne przedmioty.", + "pt": "Você pode conseguir itens especiais com combinações.", + "ru": "Вы можете получить особые предметы с помощью комбинаций.", + "tl": "Makakamit mo ang mga espesyal na item na may mga kumbinasyon.", + "uk": "Ви можете отримати спеціальні предмети за допомогою комбінацій.", + "zh-TW": "您可以透過組合獲得特殊物品。" + }, + "You can acquire Goblin Points by using the MU Item Shop's storage.": { + "de": "Sie erhalten Goblin-Punkte, wenn Sie das Lager des MU Item Shops nutzen.", + "es": "Puedes adquirir puntos Goblin utilizando el almacenamiento de la tienda de artículos MU.", + "id": "Anda dapat memperoleh Poin Goblin dengan menggunakan penyimpanan MU Item Shop.", + "ja": "インゲームショップ保管箱で使用すると、ゴブリンポイントを獲得できます。", + "pl": "Goblin Points zdobywasz, korzystając z magazynu MU Item Shop.", + "pt": "Você pode adquirir Goblin Points usando o armazenamento da MU Item Shop.", + "ru": "Вы можете получить очки гоблинов, используя хранилище магазина предметов MU.", + "tl": "Maaari kang makakuha ng Goblin Points sa pamamagitan ng paggamit ng storage ng MU Item Shop.", + "uk": "Ви можете отримати бали гоблінів, використовуючи сховище MU Item Shop.", + "zh-TW": "您可以使用 MU 物品商店的存儲來獲取哥布林點數。" + }, + "You can do a Goblin combination with a Gold Key to create a Golden Box.": { + "de": "Mit einem goldenen Schlüssel können Sie beim Goblin eine Goldene Box kombinieren.", + "es": "Puedes hacer una combinación de Duende con una Llave Dorada para crear una Caja Dorada.", + "id": "Kalian bisa melakukan kombinasi Goblin dengan Gold Key untuk membuat Golden Box.", + "ja": "ゴールドキーとのカオス合成で金箱を生成できます。", + "pl": "Połącz Gold Key u Chaos Goblina, aby stworzyć Golden Box.", + "pt": "Você pode fazer uma combinação de Goblin com uma Chave Dourada para criar uma Caixa Dourada.", + "ru": "Вы можете создать комбинацию Гоблина с Золотым ключом, чтобы создать Золотую шкатулку.", + "tl": "Maaari kang gumawa ng kumbinasyon ng Goblin gamit ang isang Gold Key upang lumikha ng isang Golden Box.", + "uk": "Ви можете створити комбінацію гобліна із золотим ключем, щоб створити золоту скриньку.", + "zh-TW": "您可以將哥布林與金鑰匙組合來創建金盒子。" + }, + "You can do a Goblin combination with a Sealed Golden Box to create a Golden Box.": {}, + "You can do a Goblin combination with a Sealed Silver Box to create a Silver Box.": {}, + "You can do a Goblin combination with a Silver Key to create a Silver Box.": { + "de": "Mit einem silbernen Schlüssel können Sie beim Goblin eine Silberne Box kombinieren.", + "es": "Puedes hacer una combinación de Duende con una Llave plateada para crear una Caja plateada.", + "id": "Kalian bisa melakukan kombinasi Goblin dengan Silver Key untuk membuat Silver Box.", + "ja": "シルバーキーとのカオス合成で銀箱を生成できます。", + "pl": "Połącz Silver Key u Chaos Goblina, aby stworzyć Silver Box.", + "pt": "Você pode fazer uma combinação de Goblin com uma Silver Key para criar uma Silver Box.", + "ru": "Вы можете создать комбинацию гоблина с серебряным ключом, чтобы создать серебряную шкатулку.", + "tl": "Maaari kang gumawa ng kumbinasyon ng Goblin na may Silver Key para gumawa ng Silver Box.", + "uk": "Ви можете створити комбінацію гобліна зі срібним ключем, щоб створити срібну скриню.", + "zh-TW": "您可以將哥布林與銀鑰匙組合來創建銀盒子。" + }, + "You can drop it with a fixed probability of it turning into a rare item.": { + "de": "Wenn Sie es fallen lassen, wird es mit einer festen Wahrscheinlichkeit zu einem seltenen Gegenstand.", + "es": "Puedes soltarlo con una probabilidad fija de que se convierta en un objeto raro.", + "id": "Anda dapat menjatuhkannya dengan kemungkinan tetap untuk berubah menjadi barang langka.", + "ja": "地面に投げると一定確率でレアアイテムが手に入ります。", + "pl": "Możesz go upuścić ze stałym prawdopodobieństwem, że zamieni się w rzadki przedmiot.", + "pt": "Você pode derrubá-lo com uma probabilidade fixa de se transformar em um item raro.", + "ru": "Вы можете выбросить его с фиксированной вероятностью, что он превратится в редкий предмет.", + "tl": "Maaari mong i-drop ito nang may nakapirming posibilidad na maging isang bihirang item.", + "uk": "Ви можете скинути його з фіксованою ймовірністю того, що він перетвориться на рідкісний предмет.", + "zh-TW": "你可以以固定的機率掉落它,使其變成稀有物品。" + }, + "You may freely move onward.": { + "de": "Sie können sich frei weiterbewegen.", + "es": "Puedes seguir adelante libremente.", + "id": "Anda dapat dengan bebas bergerak maju.", + "ja": "移動が自由にできるようになります。", + "pl": "Możesz swobodnie iść dalej.", + "pt": "Você pode seguir em frente livremente.", + "ru": "Вы можете свободно двигаться дальше.", + "tl": "Maaari kang malayang magpatuloy.", + "uk": "Ви можете вільно рухатися далі.", + "zh-TW": "你可以自由地前進。" + }, + "You will be assigned to a stage according to your level.": { + "de": "Sie werden entsprechend Ihrem Level einer Stufe zugeteilt.", + "es": "Se te asignará una etapa según tu nivel.", + "id": "Anda akan ditugaskan ke tahapan sesuai dengan level Anda.", + "ja": "入場できるレベルに合わせて自動的に入場します。", + "pl": "Zostaniesz przydzielony do etapu zgodnie z Twoim poziomem.", + "pt": "Você será designado para uma etapa de acordo com seu nível.", + "ru": "Вам будет назначен этап в соответствии с вашим уровнем.", + "tl": "Itatalaga ka sa isang yugto ayon sa iyong antas.", + "uk": "Ви будете розподілені на етап відповідно до вашого рівня.", + "zh-TW": "您將根據您的等級被分配到一個階段。" + }, + "Zen increase 50%": { + "de": "Zen +50%", + "es": "Aumento del zen 50%", + "id": "Zen meningkat 50%", + "ja": "ゼン増加50%に向上", + "pl": "Wzrost Zen 50%", + "pt": "Aumento Zen 50%", + "ru": "Дзен увеличение 50%", + "tl": "50% ang pagtaas ng Zen", + "uk": "Дзен збільшення 50%", + "zh-TW": "禪宗增加50%" + }, + "and EXP by 30%.": { + "de": "und die Erfahrung um 30%.", + "es": "y EXP en un 30%.", + "id": "dan EXP sebesar 30%.", + "ja": "経験値 30% 上昇", + "pl": "i EXP o 30%.", + "pt": "e EXP em 30%.", + "ru": "и EXP на 30%.", + "tl": "at EXP ng 30%.", + "uk": "і EXP на 30%.", + "zh-TW": "經驗值增加 30%。" + }, + "blocks the item dissipation.": { + "de": "verhindert das Verschwinden des Gegenstands.", + "es": "Bloquea la disipación del artículo.", + "id": "memblokir disipasi item.", + "ja": "アイテムの消滅を防ぎます。", + "pl": "chroni przedmiot przed zniszczeniem.", + "pt": "bloqueia a dissipação do item.", + "ru": "блокирует рассеивание предмета.", + "tl": "hinaharangan ang pagwawaldas ng item.", + "uk": "блокує розсіювання предмета.", + "zh-TW": "阻止物品耗散。" + }, + "enter the Doppelganger area.": { + "de": "den Doppelgänger-Bereich zu betreten.", + "es": "Ingrese al área de Doppelganger.", + "id": "memasuki area Doppelganger.", + "ja": "移動できる唯一のアイテムです。", + "pl": "wejść do Doppelganger.", + "pt": "entre na área Doppelganger.", + "ru": "войдите в зону Доппельгангера.", + "tl": "pumasok sa lugar ng Doppelganger.", + "uk": "увійдіть у зону Doppelganger.", + "zh-TW": "進入分身區域。" + }, + "increases Damage, Wizardry and Curse by 20%": { + "de": "erhöht er Schaden, Zauberei und Fluch um 20%", + "es": "aumenta el daño, la hechicería y la maldición en un 20%", + "id": "meningkatkan Kerusakan, Sihir, dan Kutukan sebesar 20%", + "ja": "攻撃力、魔力、呪い 20%上昇", + "pl": "zwiększa obrażenia, obrażenia magiczne i klątwy o 20%", + "pt": "aumenta Dano, Magia e Maldição em 20%", + "ru": "увеличивает урон, волшебство и проклятие на 20%", + "tl": "pinapataas ng 20% ang Damage, Wizardry at Curse", + "uk": "збільшує шкоду, магію та прокляття на 20%", + "zh-TW": "傷害、魔法和詛咒增加 20%" + }, + "when you right click on your mouse.": { + "de": "wenn Sie mit der rechten Maustaste klicken.", + "es": "cuando haces clic derecho en tu mouse.", + "id": "ketika Anda mengklik kanan pada mouse Anda.", + "ja": "残った時間を見ることができます。", + "pl": "po kliknięciu prawym przyciskiem myszy.", + "pt": "quando você clica com o botão direito do mouse.", + "ru": "когда вы щелкаете правой кнопкой мыши.", + "tl": "kapag nag-right click ka sa iyong mouse.", + "uk": "коли ви клацаєте правою кнопкою миші.", + "zh-TW": "當您右鍵單擊滑鼠時。" + } + } +} diff --git a/tests/data/test_item_database_files.cpp b/tests/data/test_item_database_files.cpp index cb2ba0e921..3e1af05511 100644 --- a/tests/data/test_item_database_files.cpp +++ b/tests/data/test_item_database_files.cpp @@ -17,6 +17,7 @@ #include "Data/GameData/ItemData/ItemDataValidation.h" #include "Data/GameData/ItemData/ItemDatabase.h" #include "Data/GameData/ItemData/ItemDescriptionPlaceholders.h" +#include "Data/GameData/ItemData/ItemJsonCommon.h" #include "Data/GameData/ItemData/ItemJsonFormat.h" #include "Data/GameData/ItemData/ItemNames.h" #include "Data/GameData/EffectData/GlowColorList.h" @@ -729,6 +730,39 @@ TEST_CASE("The second item chain's tooltip texts come from the descriptions as f CHECK(OldChainLines().size() == 72); } +// The translations of those texts are the ones the old code showed: item_chain_texts_before.json records them from the +// .resx before the texts moved (a format filled in with the item's values), by the English text. +TEST_CASE("The second item chain's tooltip texts keep their translations [data][items]") +{ + const ItemDataLoadResult result = LoadItemDataDirectory(DataDirectory / "Items"); + std::ifstream file(std::filesystem::path(MU_TEST_CHAIN_TEXTS_BEFORE)); + REQUIRE(file); + const nlohmann::json before = nlohmann::json::parse(file).at("texts"); + int checked = 0; + for (const OldChainItem& old : OldChainLines()) + { + const auto found = std::find_if(result.items.begin(), result.items.end(), [&](const ItemDefinition& item) + { return item.group == old.group && item.number == old.number; }); + REQUIRE(found != result.items.end()); + for (size_t index = 0; index < old.lines.size(); ++index) + { + const std::string english = found->description[index].text.GetNeutral(); + const auto recorded = before.find(english); + if (recorded == before.end()) + { + continue; + } + for (const auto& [locale, translation] : recorded->items()) + { + INFO(old.group << "/" << old.number << " line " << index << " " << locale); + CHECK(found->description[index].text.Get(locale) == translation.get()); + ++checked; + } + } + } + CHECK(checked > 600); +} + // The texts the tooltip code wrote for these items are their descriptions now, in every UI language. TEST_CASE("The original items' tooltip texts are in their descriptions [data][items]") { From 31d730370f638e50363978301b86cb92775aebad Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Fri, 23 Oct 2026 19:31:25 -0300 Subject: [PATCH 15/19] fix(items): four Polish texts of the second chain as the old code showed them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Moving the texts into the item data changed them: "Maks. HP +100", "Zwiększa maks. HP +4%", "Szansa na obrażenia doskonałe +10%" and the Master Level EXP line are the .resx translations the tooltip showed. The new translation test found them. --- src/bin/Data/Items/Group13_Helper.json | 6 +++--- src/bin/Data/Items/Group14_Potion.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bin/Data/Items/Group13_Helper.json b/src/bin/Data/Items/Group13_Helper.json index 3e20761be1..a324441840 100644 --- a/src/bin/Data/Items/Group13_Helper.json +++ b/src/bin/Data/Items/Group13_Helper.json @@ -1926,7 +1926,7 @@ "es": "La EXP de nivel maestro no se puede lograr durante el uso del artículo.", "id": "EXP Tingkat Master tidak dapat dicapai selama penggunaan item.", "ja": "利用中はマスターレベル経験値が獲得できません。", - "pl": "Poziomu Mistrzowskiego EXP nie można osiągnąć podczas używania przedmiotu.", + "pl": "Podczas działania przedmiotu nie zdobywasz EXP poziomu mistrzowskiego.", "pt": "Master Level EXP não pode ser alcançado durante o uso do item.", "ru": "Опыт мастер-уровня не может быть достигнут во время использования предмета.", "tl": "Ang Master Level EXP ay hindi makakamit sa panahon ng paggamit ng item.", @@ -4048,7 +4048,7 @@ "es": "Incrementar HP máximo +4%", "id": "Meningkatkan HP Maks +4%", "ja": "最大生命力増加 +4%", - "pl": "Zwiększ maksymalne HP +4%", + "pl": "Zwiększa maks. HP +4%", "pt": "Aumenta HP máximo +4%", "ru": "Увеличение максимального запаса здоровья +4%", "tl": "Taasan ang Max HP +4%", @@ -4228,7 +4228,7 @@ "es": "Excelente tasa de daño +10%", "id": "Tingkat Kerusakan Luar Biasa +10%", "ja": "エクセレントダメージ確率 +10%", - "pl": "Doskonały współczynnik obrażeń +10%", + "pl": "Szansa na obrażenia doskonałe +10%", "pt": "Excelente taxa de dano +10%", "ru": "Отличный урон +10%", "tl": "Napakahusay na Damage rate +10%", diff --git a/src/bin/Data/Items/Group14_Potion.json b/src/bin/Data/Items/Group14_Potion.json index bae71419cf..b806be3a8c 100644 --- a/src/bin/Data/Items/Group14_Potion.json +++ b/src/bin/Data/Items/Group14_Potion.json @@ -2957,7 +2957,7 @@ "es": "Máx. Aumento de HP +100", "id": "Maks. Peningkatan HP +100", "ja": "最大 HP 上昇 +100", - "pl": "Maks. Wzrost HP +100", + "pl": "Maks. HP +100", "pt": "Máx. Aumento de HP +100", "ru": "Макс. Увеличение HP +100", "tl": "Max. Tumaas ang HP +100", From 1bf39dc049d86aa95796e75bfcea301473df69d0 Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Fri, 23 Oct 2026 19:31:25 -0300 Subject: [PATCH 16/19] test(items): a %s value in the old texts translated, as the old code passed a translated map name --- tests/data/item_chain_texts_before.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/data/item_chain_texts_before.json b/tests/data/item_chain_texts_before.json index e35797b19f..41d3c296b9 100644 --- a/tests/data/item_chain_texts_before.json +++ b/tests/data/item_chain_texts_before.json @@ -159,16 +159,16 @@ "zh-TW": "EXP率50% i增加" }, "Enables entrance into Illusion Temple.": { - "de": "Ermöglicht den Zugang zu Illusion Temple.", - "es": "Permite la entrada a Illusion Temple.", - "id": "Memungkinkan masuk ke Illusion Temple.", - "ja": "Illusion Temple 入場時、決まった回数だけ使えます。", + "de": "Ermöglicht den Zugang zu Illusionstempel.", + "es": "Permite la entrada a Templo de la ilusión.", + "id": "Memungkinkan masuk ke Kuil Ilusi.", + "ja": "テンプル 入場時、決まった回数だけ使えます。", "pl": "Umożliwia wejście do Illusion Temple.", - "pt": "Permite a entrada em Illusion Temple.", - "ru": "Позволяет войти в Illusion Temple.", - "tl": "Pinapagana ang pagpasok sa Illusion Temple.", - "uk": "Дозволяє вхід у Illusion Temple.", - "zh-TW": "允許進入 Illusion Temple。" + "pt": "Permite a entrada em Templo da Ilusão.", + "ru": "Позволяет войти в Храм иллюзий.", + "tl": "Pinapagana ang pagpasok sa Templo ng Ilusyon.", + "uk": "Дозволяє вхід у Храм ілюзій.", + "zh-TW": "允許進入 幻像神殿。" }, "Excellent Damage rate +10%": { "de": "Exzellente Schadensrate +10%", From b2c0df37579992147e19e7d0429ec5ae9e8ea1f2 Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Fri, 23 Oct 2026 19:34:10 -0300 Subject: [PATCH 17/19] test(items): the translation test checks all 1050 recorded translations --- tests/data/test_item_database_files.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/data/test_item_database_files.cpp b/tests/data/test_item_database_files.cpp index 3e1af05511..b70e236672 100644 --- a/tests/data/test_item_database_files.cpp +++ b/tests/data/test_item_database_files.cpp @@ -760,7 +760,7 @@ TEST_CASE("The second item chain's tooltip texts keep their translations [data][ } } } - CHECK(checked > 600); + CHECK(checked >= 1050); } // The texts the tooltip code wrote for these items are their descriptions now, in every UI language. From 9bf3db2a8a2975d4ffd71c037a7af2864062fcf7 Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Sat, 24 Oct 2026 04:54:40 -0300 Subject: [PATCH 18/19] fix(items): the Fruits' Polish texts as the game prints them; tests for every language and the levels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three Polish Fruits texts were from before main corrected them (17fc723c3): Dowodzenie, "Można użyć po zdjęciu ekwipunku." and "Może być używany przez: Dark Lord". A test now compares the level lines whose texts other code still prints with the game's texts in every language, another that a line is only written at its levels. The levels note says the level variants' lines move into their items later. --- docs/item-data.md | 5 +- src/bin/Data/Items/Group13_Helper.json | 8 +- tests/data/test_item_database_files.cpp | 102 +++++++++++++++++++++++- tests/data/test_item_descriptions.cpp | 28 +++++++ 4 files changed, 137 insertions(+), 6 deletions(-) diff --git a/docs/item-data.md b/docs/item-data.md index 4878e9d054..9e39a6afe4 100644 --- a/docs/item-data.md +++ b/docs/item-data.md @@ -218,7 +218,10 @@ Each line is `{"text": ..., "color": ..., "levels": [first, last]}`: `greenBlue`, `gray`, `redPurple`, `violet`, `orange`. - **`levels`** shows the line only at those item levels, both included (`[1, 8]`; left out: every level): a list of two levels from 0 to 15, the first - not above the last. + not above the last. Most items that use it today are level variants (the + Fruits, Contract Summon, Life Stone, Rena, …), which the items design makes + items of their own later: their lines then move into those items and lose + their `levels`. In the tooltip: diff --git a/src/bin/Data/Items/Group13_Helper.json b/src/bin/Data/Items/Group13_Helper.json index 48ffca5ca7..529bff349b 100644 --- a/src/bin/Data/Items/Group13_Helper.json +++ b/src/bin/Data/Items/Group13_Helper.json @@ -715,7 +715,7 @@ "es": "Dominio Aumenta 1~3 puntos de estadísticas", "id": "Memerintah Meningkatkan 1~3 poin stat", "ja": "統率 ステータス1~3ポイント生成", - "pl": "Rozkaz Zwiększa 1-3 punkty statystyk", + "pl": "Dowodzenie Zwiększa 1-3 punkty statystyk", "pt": "Comando Aumenta 1~3 pontos de estatísticas", "ru": "Команда Увеличивает 1~3 очка характеристик.", "tl": "Utos Tumataas ng 1~3 stat point", @@ -731,7 +731,7 @@ "es": "Dominio Es posible disminuir las estadísticas de 1 a 9 puntos.", "id": "Memerintah Kemungkinan untuk menurunkan stat 1~9 poin", "ja": "統率 減少ステータス1~9ポイント可能", - "pl": "Rozkaz Możliwe zmniejszenie statystyki o 1~9 punktów", + "pl": "Dowodzenie Możliwe zmniejszenie statystyki o 1~9 punktów", "pt": "Comando Possível diminuir estatísticas de 1 a 9 pontos", "ru": "Команда Возможно понижение показателя с 1 по 9.", "tl": "Utos Posibleng bawasan ang stat 1~9 point", @@ -747,7 +747,7 @@ "es": "Se puede utilizar sin el artículo.", "id": "Dapat digunakan dengan item dilepas.", "ja": "アイテムの未装備の際、使用可能", - "pl": "Można go używać po usunięciu przedmiotu.", + "pl": "Można użyć po zdjęciu ekwipunku.", "pt": "Pode ser usado com item removido.", "ru": "Его можно использовать, если предмет удален.", "tl": "Maaari itong magamit kapag tinanggal ang item.", @@ -764,7 +764,7 @@ "es": "Puede ser equipado con señor oscuro", "id": "Dapat dilengkapi dengan Pangeran Kegelapan", "ja": "ダークロード使用可能", - "pl": "Może być wyposażony w Dark Lord", + "pl": "Może być używany przez: Dark Lord", "pt": "Pode ser equipado por Senhor das Trevas", "ru": "Может быть оснащен Темный Лорд.", "tl": "Maaaring gamitan ng Dark Lord", diff --git a/tests/data/test_item_database_files.cpp b/tests/data/test_item_database_files.cpp index 35b90a12d2..fc3181bae1 100644 --- a/tests/data/test_item_database_files.cpp +++ b/tests/data/test_item_database_files.cpp @@ -523,7 +523,8 @@ TEST_CASE("The tooltip texts by item level come from the descriptions as from th { return item.group == group && item.number == number; }); REQUIRE(found != result.items.end()); // Every level the items have. The old code also wrote an empty line at the Contract Summon's, Life Stone's and - // Rena's levels without a text (a stale line of the text list); the data writes none. + // Rena's levels without a text, and two at the Fruits' +5 to +15 before "It can be used with item removed." (a + // stale line of the text list); the data writes none of them. Fruits only exist at +0 to +4. for (int level = 0; level < ItemLevelCount; ++level) { INFO(group << "/" << number << " +" << level); @@ -540,6 +541,105 @@ TEST_CASE("The tooltip texts by item level come from the descriptions as from th } } +// What the old code printed for an item's level lines in the UI's language, where the texts are the game's that other +// code still prints: one entry per line of OldLevelLines, empty for a text only the tooltip had (removed since). A +// Fruit's stat lines started with the stat's name; the rest of them was a removed text. +struct PrintedOldLine +{ + std::string text; + bool isPrefix = false; +}; + +std::string PrintWithName(const wchar_t* format, const wchar_t* name) +{ + // The game's wide texts have "%ls" where the .resx has "%s". + std::string text = Core::Text::ToUtf8(format); + const size_t wide = text.find("%ls"); + const size_t position = wide != std::string::npos ? wide : text.find("%s"); + REQUIRE(position != std::string::npos); + return text.replace(position, wide != std::string::npos ? 3 : 2, Core::Text::ToUtf8(name)); +} + +std::vector> PrintedOldLevelLines(int group, int number, int level) +{ + const auto printed = [](const wchar_t* text) { return std::optional({Core::Text::ToUtf8(text)}); }; + if (group == 13 && number == 7 && level <= 1) + { + return {printed(level == 0 ? I18N::Game::Archer : I18N::Game::Spearman)}; + } + if (group == 13 && number == 11 && level <= 1) + { + return {printed(level == 0 ? I18N::Game::ScrollOfGuardian : I18N::Game::PlaceLifeStone)}; + } + if (group == 13 && number == 15 && level <= 4) + { + const wchar_t* const stats[] = {I18N::Game::ENG, I18N::Game::STA, I18N::Game::AGI, I18N::Game::STR, + I18N::Game::Command}; + const PrintedOldLine stat{Core::Text::ToUtf8(stats[level]) + " ", true}; + std::vector> lines = {stat, stat, printed(I18N::Game::ItCanBeUsedWithItemRemoved)}; + if (level == 4) + { + lines.push_back(PrintedOldLine{PrintWithName(I18N::Game::CanBeEquippedByS, I18N::Game::DarkLord)}); + } + return lines; + } + return std::vector>(OldLevelLines(group, number, level).size()); +} + +// The lines whose texts other code still prints, in every language as the game prints them. +TEST_CASE("The tooltip texts by item level are the game's texts in every language [data][items]") +{ + constexpr std::pair items[] = {{13, 7}, {13, 11}, {13, 15}}; + const ItemDataLoadResult result = LoadItemDataDirectory(DataDirectory / "Items"); + // The test switches the UI language: it needs an item table of its own. + ClientDataScope client(ShippedClientDirectory); + int compared = 0; + for (const auto& [group, number] : items) + { + const ItemDefinition* found = FindItem(result.items, MakeItemType(group, number)); + REQUIRE(found != nullptr); + for (int level = 0; level < ItemLevelCount; ++level) + { + std::vector shown; + for (const ItemDescriptionLine& line : found->description) + { + if (line.IsShownAt(level)) + { + shown.push_back(&line); + } + } + for (const char* locale : I18N::GetAvailableLocales()) + { + INFO(group << "/" << number << " +" << level << " " << locale); + I18N::SetLocale(locale); + const std::vector> old = PrintedOldLevelLines(group, number, level); + REQUIRE(shown.size() == old.size()); + for (size_t index = 0; index < old.size(); ++index) + { + if (!old[index]) + { + continue; + } + const std::string text = shown[index]->text.Get(locale); + if (old[index]->isPrefix) + { + CHECK(text.starts_with(old[index]->text)); + } + else + { + CHECK(text == old[index]->text); + } + ++compared; + } + } + I18N::SetLocale("en"); + } + } + // Archer and Spearman, Scroll of Guardian and Place Life Stone, and the Fruits' 3 lines at +0 to +3 and 4 at +4, in + // every language. + CHECK(compared == (2 + 2 + 4 * 3 + 4) * static_cast(std::size(I18N::GetAvailableLocales()))); +} + // The texts the tooltip code wrote for these items are their descriptions now, in every UI language. TEST_CASE("The original items' tooltip texts are in their descriptions [data][items]") { diff --git a/tests/data/test_item_descriptions.cpp b/tests/data/test_item_descriptions.cpp index a7bbf420da..d5b0fea7d8 100644 --- a/tests/data/test_item_descriptions.cpp +++ b/tests/data/test_item_descriptions.cpp @@ -128,6 +128,34 @@ TEST_CASE("A description's placeholders are filled in for the item's level befor CHECK(TextNum == 1); } +TEST_CASE("A description line is written only at the item levels it is shown at [data][items]") +{ + ItemDefinition scroll = MakeJewel(); + ItemDescriptionLine warp = Line("Warp after 3 seconds"); + warp.minLevel = 1; + warp.maxLevel = 8; + scroll.description = {Line("Every level"), warp}; + + TextNum = 0; + SkipNum = 0; + WriteItemDescriptionLines(scroll, 0, FiveUnitsPerLetter); + REQUIRE(TextNum == 1); + CHECK(std::wstring(TextList[0]) == L"Every level"); + + for (const int level : {1, 8}) + { + INFO("+" << level); + TextNum = 0; + WriteItemDescriptionLines(scroll, level, FiveUnitsPerLetter); + REQUIRE(TextNum == 2); + CHECK(std::wstring(TextList[1]) == L"Warp after 3 seconds"); + } + + TextNum = 0; + WriteItemDescriptionLines(scroll, 9, FiveUnitsPerLetter); + CHECK(TextNum == 1); +} + TEST_CASE("A description writes at most its own rows, leaving the tooltip's rows to the rest [data][items]") { ItemDefinition jewel = MakeJewel(); From 843d36381ee01891e2d34bf4eebcca02076ba713 Mon Sep 17 00:00:00 2001 From: Ezequiel Zacca Date: Sat, 24 Oct 2026 05:06:31 -0300 Subject: [PATCH 19/19] fix(items): close the chain lines test again after the merge --- tests/data/test_item_database_files.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/data/test_item_database_files.cpp b/tests/data/test_item_database_files.cpp index e7a1ae9f23..0972736f93 100644 --- a/tests/data/test_item_database_files.cpp +++ b/tests/data/test_item_database_files.cpp @@ -762,6 +762,7 @@ TEST_CASE("The second item chain's tooltip texts keep their translations [data][ } } CHECK(checked >= 1050); +} // What the old code printed for an item's level lines in the UI's language, where the texts are the game's that other // code still prints: one entry per line of OldLevelLines, empty for a text only the tooltip had (removed since). A