diff --git a/docs/item-data.md b/docs/item-data.md
index 4840b36e05..b97900ebc7 100644
--- a/docs/item-data.md
+++ b/docs/item-data.md
@@ -174,6 +174,7 @@ can have several tags; the file lists them in the order below.
| `valuable` | The game asks for confirmation before the item is sold or dropped |
| `noLevelRequirement` | The tooltip shows no level requirement, though the item has one (Loch's Feather) |
| `noDurabilityLine` | The tooltip shows no standard durability line, though the item has a durability: it shows none, or its description has its own (a pet's "Life", a stack's "Number of items", a ticket's "usable … times") |
+| `noBlankAfterOptions` | The tooltip leaves out the blank line after the options, so the item's lines drawn there follow the options directly (the Pet Skeleton, the Invitation to Santa Village) |
Wings need no tag: an item is a wing when its `slot` is `wings`.
@@ -317,7 +318,8 @@ Jewel of Bless's:
```
Each line is `{"text": ..., "values": {...}, "when": [...], "color": ...,
-"colors": [...], "bold": true, "levels": [first, last]}`:
+"colors": [...], "bold": true, "levels": [first, last], "after":
+"options"}`:
- **`text`** is written like `name`: a plain English text, or the texts by
language. It is checked like a name too: the English text is required, a
@@ -348,6 +350,10 @@ Each line is `{"text": ..., "values": {...}, "when": [...], "color": ...,
hold, and **`colors`** gives it the color of its first rule that holds, as
a layout line's (`["!timed"]`, `["durability=2"]`, `[{"when":
["class:darkLord"], "color": "white"}]`). **`bold`** draws it bold.
+- **`"after": "options"`** draws the line after the item's options
+ (excellent, luck, skill), at the end of the tooltip, instead of with the
+ description: the transformation rings' effects and "Unable to Equip with a
+ Different Transformation Ring", for example.
In the tooltip:
@@ -386,7 +392,8 @@ placeholder is one of:
strength and agility reductions) and `missing…` (what the hero lacks of it, 0
when nothing), and the item's add option (the potions', scrolls', seals' and
charms' effect in the game's ItemAddOption data): `addOptionValue1`,
- `addOptionValue2` and `addOptionDuration`, a text such as "1 Hour";
+ `addOptionValue2` and `addOptionDuration`, a text such as "1 Hour"; and the
+ hero's `heroLevel`;
- a **level bonus table** of [`Stats/ItemStats.json`](#item-stats-by-level),
as `table:` and its name: the table's value at the item's + level
(`{table:damageIncreaseWeapons}` is 3 at +1 and 66 at +15, the damage a
diff --git a/src/Localization/Game.de.resx b/src/Localization/Game.de.resx
index 2becb7109d..48d2503587 100644
--- a/src/Localization/Game.de.resx
+++ b/src/Localization/Game.de.resx
@@ -6852,10 +6852,6 @@
Klicken Sie auf die Schaltfläche, um alle Statuspunkte zurückzusetzen.
legacy_id=1886
-
- Registrieren Sie sich beim NPC, um verschiedene Geschenke zu erhalten.
- legacy_id=1887
-
Der Umtausch wurde durchgeführt.
legacy_id=1888
@@ -6948,18 +6944,6 @@
Fenrir
legacy_id=1916
-
- Ein Hornfragment kann aus dem göttlichen Schutz der Göttin und einem Rüstungsfragment hergestellt werden.
- legacy_id=1917
-
-
- Ein zerbrochenes Horn kann aus der Klaue der Bestie und einem Hornfragment hergestellt werden.
- legacy_id=1918
-
-
- Das Horn des Fenrir kann durch die Kombination von Gegenständen hergestellt werden.
- legacy_id=1919
-
Kann Fenrir beschwören, wenn es ausgerüstet ist.
legacy_id=1920
@@ -7816,10 +7800,6 @@
Die Verfeinerung hat begonnen. Bei der Verfeinerung wird der Gegenstand in einen Verfeinerungsstein für die Verstärkung umgewandelt. Der verfeinerte Gegenstand verschwindet, prüfen Sie ihn also unbedingt.
legacy_id=2224
-
- Vitalität +%d
- legacy_id=2225
-
Dieser Gegenstand kann nicht im persönlichen Laden verwendet werden.
legacy_id=2226
@@ -7844,10 +7824,6 @@
Verteidigungskraft +%d
legacy_id=2231
-
- Viel Spaß beim Halloween-Fest.
- legacy_id=2232
-
Segen von Jack O'Lantern
legacy_id=2233
@@ -7892,10 +7868,6 @@
Weihnachten
legacy_id=2243
-
- Ein Feuerwerk erscheint, wenn Sie es auf den Boden werfen.
- legacy_id=2244
-
Weihnachtsmann
legacy_id=2245
@@ -7908,10 +7880,6 @@
Schneemann
legacy_id=2247
-
- Frohe Weihnachten.
- legacy_id=2248
-
Ein stärkerer Effekt ist eingetreten.
legacy_id=2249
@@ -7928,10 +7896,6 @@
Keine Erfahrung erhältlich
legacy_id=2255
-
- %d-mal verwendbar
- legacy_id=2260
-
Durch Kombinationen können Sie besondere Gegenstände erhalten.
legacy_id=2261
@@ -8128,10 +8092,6 @@
Sie haben nicht genügend Punkte.
legacy_id=2322
-
- Ein GM hat diese besondere Box verschenkt.
- legacy_id=2323
-
GM-Beschwörungszone
legacy_id=2324
@@ -8775,10 +8735,6 @@
Willkommen im Dorf des Weihnachtsmanns. Hier ist ein Geschenk für Sie. Hier finden Sie immer etwas, das Ihnen Glück bringt.
legacy_id=2588
-
- Per Rechtsklick ins Dorf des Weihnachtsmanns wechseln.
- legacy_id=2589
-
Möchten Sie ins Dorf des Weihnachtsmanns wechseln?
legacy_id=2590
@@ -9115,18 +9071,6 @@
Zum Verschieben auswählen.
legacy_id=2731
-
- Verwandelt Sie in einen Panda.
- legacy_id=2743
-
-
- Zen +50%%
- legacy_id=2744
-
-
- Schaden/Zauberei/Fluch +30
- legacy_id=2745
-
Lugard
legacy_id=2756
@@ -10087,26 +10031,6 @@
Auf dem Loren-Markt können Sie andere nicht in Ihre Party einladen.
legacy_id=3064
-
- Ausrüsten, um sich in einen Skelettkrieger zu verwandeln.
- legacy_id=3065
-
-
- Schaden/Zauberei/Fluch +40
- legacy_id=3066
-
-
- Zusammen mit einem Haustier-Skelett ausgerüstet
- legacy_id=3067
-
-
- Zusammen mit einem Skelett-Verwandlungsring ausgerüstet
- legacy_id=3071
-
-
- erhöht er die Erfahrung um 30%%.
- legacy_id=3072
-
Chaos Castle Lv.%lu Gardist x %lu/%lu
legacy_id=3074
@@ -10151,10 +10075,6 @@
+15-Gegenstand erstellen
legacy_id=3087
-
- Kann nicht zusammen mit einem anderen Verwandlungsring ausgerüstet werden
- legacy_id=3088
-
Kann nicht ausgerüstet werden, während ein anderer Verwandlungsring ausgerüstet ist.
legacy_id=3089
diff --git a/src/Localization/Game.en.resx b/src/Localization/Game.en.resx
index dd206af76b..0e0bf9ad08 100644
--- a/src/Localization/Game.en.resx
+++ b/src/Localization/Game.en.resx
@@ -7137,10 +7137,6 @@
Click on the button to reinitialize all stat points.
legacy_id=1886
-
- Register with the NPC to receive various gifts.
- legacy_id=1887
-
Exchange has been made.
legacy_id=1888
@@ -7233,18 +7229,6 @@
Fenrir
legacy_id=1916
-
- Fragment of horn can be made using the Divine protection of Goddess and fragment of armor.
- legacy_id=1917
-
-
- Broken horn can be made using the claw of beast and fragment of horn.
- legacy_id=1918
-
-
- Fenrir's horn can be made through item combination.
- legacy_id=1919
-
Can summon the Fenrir when equipped.
legacy_id=1920
@@ -8101,10 +8085,6 @@
Refinery has started. Refinery is a part of process to change the item to Refining Stone to be reinforced. Refined item will be disapper, make sure to check the item.
legacy_id=2224
-
- vitality +%d
- legacy_id=2225
-
This item is not allowed to use the private store.
legacy_id=2226
@@ -8129,10 +8109,6 @@
Defense Power increase +%d
legacy_id=2231
-
- Enjoy Halloween Festival.
- legacy_id=2232
-
Blessing of Jack O'Lantern
legacy_id=2233
@@ -8177,10 +8153,6 @@
Christmas
legacy_id=2243
-
- Fireworks will appear once thrown in the field.
- legacy_id=2244
-
Santa Clause
legacy_id=2245
@@ -8193,10 +8165,6 @@
Snowman
legacy_id=2247
-
- Merry Christmas.
- legacy_id=2248
-
Stonger effect has taken place.
legacy_id=2249
@@ -8213,10 +8181,6 @@
Unable to gain experience rate
legacy_id=2255
-
- usable %d times
- legacy_id=2260
-
You can achieve special items with combinations.
legacy_id=2261
@@ -8413,10 +8377,6 @@
You do not have sufficient points.
legacy_id=2322
-
- GM has gifted this special box.
- legacy_id=2323
-
GM summon zone
legacy_id=2324
@@ -9060,10 +9020,6 @@
Welcome to Santa's Village. Here's a gift for you. You will always find something to bring you a fortune here.
legacy_id=2588
-
- Relocate to the Santa's Village by the right-mouse click.
- legacy_id=2589
-
Would you like to move to the Santa's Village?
legacy_id=2590
@@ -9400,18 +9356,6 @@
Select to move.
legacy_id=2731
-
- Transform into Panda.
- legacy_id=2743
-
-
- Zen increase 50%%
- legacy_id=2744
-
-
- Damage/Wizardry/Curse +30
- legacy_id=2745
-
Lugard
legacy_id=2756
@@ -10372,26 +10316,6 @@
You cannot ask others to join your party while in Loren Market.
legacy_id=3064
-
- Equip to transform into a Skeleton Warrior.
- legacy_id=3065
-
-
- Damage/Wizardry/Curse +40
- legacy_id=3066
-
-
- Equipping along with a Pet Skeleton
- legacy_id=3067
-
-
- Equipping along with a Skeleton Transformation Ring
- legacy_id=3071
-
-
- increases EXP by 30%%.
- legacy_id=3072
-
Chaos Castle Lv.%lu Guardsman x %lu/%lu
legacy_id=3074
@@ -10436,10 +10360,6 @@
+15 Item Creation
legacy_id=3087
-
- Unable to Equip with a Different Transformation Ring
- legacy_id=3088
-
Cannot be equipped while another Transformation Ring is equipped.
legacy_id=3089
diff --git a/src/Localization/Game.es.resx b/src/Localization/Game.es.resx
index 006a5e90b7..a047d1fa57 100644
--- a/src/Localization/Game.es.resx
+++ b/src/Localization/Game.es.resx
@@ -6832,10 +6832,6 @@
Haga clic en el botón para reinicializar todos los puntos de estadísticas.
legacy_id=1886
-
- Regístrese con el NPC para recibir varios obsequios.
- legacy_id=1887
-
Se ha realizado el intercambio.
legacy_id=1888
@@ -6928,18 +6924,6 @@
Fenrir
legacy_id=1916
-
- Se puede hacer un fragmento de cuerno usando la protección divina de la Diosa y un fragmento de armadura.
- legacy_id=1917
-
-
- Se puede hacer un cuerno roto usando la garra de la bestia y un fragmento de cuerno.
- legacy_id=1918
-
-
- El cuerno de Fenrir se puede crear mediante una combinación de elementos.
- legacy_id=1919
-
Puede convocar al Fenrir cuando está equipado.
legacy_id=1920
@@ -7796,10 +7780,6 @@
La refinería ha comenzado. La refinería es parte del proceso para cambiar el elemento a Refining Stone para reforzarlo. El artículo refinado desaparecerá, asegúrese de revisar el artículo.
legacy_id=2224
-
- vitalidad +%d
- legacy_id=2225
-
Este artículo no puede utilizar la tienda privada.
legacy_id=2226
@@ -7824,10 +7804,6 @@
Aumento del poder de defensa +%d
legacy_id=2231
-
- Disfruta del festival de Halloween.
- legacy_id=2232
-
Bendición de Jack O'Lantern
legacy_id=2233
@@ -7872,10 +7848,6 @@
Navidad
legacy_id=2243
-
- Los fuegos artificiales aparecerán una vez lanzados al campo.
- legacy_id=2244
-
Papá Noel
legacy_id=2245
@@ -7888,10 +7860,6 @@
Muñeco de nieve
legacy_id=2247
-
- Feliz navidad.
- legacy_id=2248
-
Se ha producido un efecto más fuerte.
legacy_id=2249
@@ -7908,10 +7876,6 @@
No se puede ganar tasa de experiencia.
legacy_id=2255
-
- utilizable %d veces
- legacy_id=2260
-
Puedes conseguir objetos especiales con combinaciones.
legacy_id=2261
@@ -8108,10 +8072,6 @@
No tienes suficientes puntos.
legacy_id=2322
-
- GM ha regalado esta caja especial.
- legacy_id=2323
-
Zona de invocación de GM
legacy_id=2324
@@ -8755,10 +8715,6 @@
Bienvenidos al Pueblo de Papá Noel. Aquí tienes un regalo. Aquí siempre encontrarás algo que te traerá una fortuna.
legacy_id=2588
-
- Trasládese a Santa's Village haciendo clic con el botón derecho del ratón.
- legacy_id=2589
-
¿Te gustaría mudarte al Pueblo de Papá Noel?
legacy_id=2590
@@ -9095,18 +9051,6 @@
Seleccione para moverse.
legacy_id=2731
-
- Transfórmate en Panda.
- legacy_id=2743
-
-
- Aumento del zen 50%%
- legacy_id=2744
-
-
- Daño/Hechicería/Maldición +30
- legacy_id=2745
-
Lugard
legacy_id=2756
@@ -10067,26 +10011,6 @@
No puedes pedirle a otros que se unan a tu grupo mientras estés en Loren Market.
legacy_id=3064
-
- Equípate para transformarte en un guerrero esqueleto.
- legacy_id=3065
-
-
- Daño/Hechicería/Maldición +40
- legacy_id=3066
-
-
- Equiparse con un esqueleto de mascota
- legacy_id=3067
-
-
- Equipado con un anillo de transformación de esqueleto
- legacy_id=3071
-
-
- aumenta la EXP en un 30%%.
- legacy_id=3072
-
Castillo del Caos Lv.%lu Guardia x %lu/%lu
legacy_id=3074
@@ -10131,10 +10055,6 @@
+15 Creación de artículos
legacy_id=3087
-
- No se puede equipar con un anillo de transformación diferente
- legacy_id=3088
-
No se puede equipar mientras hay otro anillo de transformación equipado.
legacy_id=3089
diff --git a/src/Localization/Game.id.resx b/src/Localization/Game.id.resx
index b151525716..98da3cd989 100644
--- a/src/Localization/Game.id.resx
+++ b/src/Localization/Game.id.resx
@@ -6832,10 +6832,6 @@
Klik pada tombol untuk menginisialisasi ulang semua poin stat.
legacy_id=1886
-
- Daftar ke NPC untuk menerima berbagai hadiah.
- legacy_id=1887
-
Pertukaran telah dilakukan.
legacy_id=1888
@@ -6928,18 +6924,6 @@
Fenrir
legacy_id=1916
-
- Fragmen tanduk dapat dibuat menggunakan perlindungan Ilahi dari Dewi dan fragmen baju besi.
- legacy_id=1917
-
-
- Tanduk patah dapat dibuat dengan menggunakan cakar binatang dan pecahan tanduk.
- legacy_id=1918
-
-
- Tanduk Fenrir dapat dibuat melalui kombinasi item.
- legacy_id=1919
-
Dapat memanggil Fenrir saat dipakai.
legacy_id=1920
@@ -7796,10 +7780,6 @@
Kilang telah dimulai. Refinery merupakan bagian dari proses perubahan item menjadi Refining Stone untuk diperkuat. Item yang dimurnikan akan dihilangkan, pastikan untuk memeriksa item tersebut.
legacy_id=2224
-
- vitalitas +%d
- legacy_id=2225
-
Item ini tidak diperbolehkan menggunakan toko pribadi.
legacy_id=2226
@@ -7824,10 +7804,6 @@
Peningkatan Kekuatan Pertahanan +%d
legacy_id=2231
-
- Nikmati Festival Halloween.
- legacy_id=2232
-
Berkat Jack O'Lantern
legacy_id=2233
@@ -7872,10 +7848,6 @@
Natal
legacy_id=2243
-
- Kembang api akan muncul setelah dilempar ke lapangan.
- legacy_id=2244
-
Klausul Sinterklas
legacy_id=2245
@@ -7888,10 +7860,6 @@
manusia salju
legacy_id=2247
-
- Selamat natal.
- legacy_id=2248
-
Efek yang lebih kuat telah terjadi.
legacy_id=2249
@@ -7908,10 +7876,6 @@
Tidak dapat memperoleh tingkat pengalaman
legacy_id=2255
-
- dapat digunakan %d kali
- legacy_id=2260
-
Anda dapat memperoleh item khusus dengan kombinasi.
legacy_id=2261
@@ -8108,10 +8072,6 @@
Anda tidak memiliki poin yang cukup.
legacy_id=2322
-
- GM telah menghadiahkan kotak khusus ini.
- legacy_id=2323
-
Zona pemanggilan GM
legacy_id=2324
@@ -8755,10 +8715,6 @@
Selamat datang di Desa Santa. Ini hadiah untukmu. Anda akan selalu menemukan sesuatu yang memberi Anda banyak uang di sini.
legacy_id=2588
-
- Pindah ke Desa Santa dengan klik kanan mouse.
- legacy_id=2589
-
Apakah Anda ingin pindah ke Desa Santa?
legacy_id=2590
@@ -9095,18 +9051,6 @@
Pilih untuk bergerak.
legacy_id=2731
-
- Berubah menjadi Panda.
- legacy_id=2743
-
-
- Zen meningkat 50%%
- legacy_id=2744
-
-
- Kerusakan/Sihir/Kutukan +30
- legacy_id=2745
-
orang bodoh
legacy_id=2756
@@ -10067,26 +10011,6 @@
Anda tidak dapat meminta orang lain untuk bergabung dengan pesta Anda saat berada di Pasar Loren.
legacy_id=3064
-
- Lengkapi untuk berubah menjadi Skeleton Warrior.
- legacy_id=3065
-
-
- Kerusakan/Sihir/Kutukan +40
- legacy_id=3066
-
-
- Dilengkapi dengan Pet Skeleton
- legacy_id=3067
-
-
- Dilengkapi dengan Cincin Transformasi Kerangka
- legacy_id=3071
-
-
- meningkatkan EXP sebesar 30%%.
- legacy_id=3072
-
Chaos Castle Lv.%lu Penjaga x %lu/%lu
legacy_id=3074
@@ -10131,10 +10055,6 @@
+15 Pembuatan Barang
legacy_id=3087
-
- Tidak Dapat Melengkapi Cincin Transformasi Berbeda
- legacy_id=3088
-
Tidak dapat digunakan ketika Cincin Transformasi lain sedang dipasang.
legacy_id=3089
diff --git a/src/Localization/Game.ja.resx b/src/Localization/Game.ja.resx
index 1578bd039a..f01524ae9d 100644
--- a/src/Localization/Game.ja.resx
+++ b/src/Localization/Game.ja.resx
@@ -6711,10 +6711,6 @@
ボタンをクリックすると全てのステータスが初期化されます。
legacy_id=1886
-
- 月の商人デルガドが集めている金貨
- legacy_id=1887
-
ガハハハ。商談成立じゃな。
legacy_id=1888
@@ -6807,18 +6803,6 @@
フェンリル
legacy_id=1916
-
- 女神の加護と鎧の破片の合成を通じて角笛の破片を作ることができます。
- legacy_id=1917
-
-
- 猛獣の爪と角笛のかけらの合成を通じて折れた角笛を作ることができます。
- legacy_id=1918
-
-
- 合成を通じてフェンリルの角笛を作ることができます。
- legacy_id=1919
-
装備の際、フェンリルを召還することができます。
legacy_id=1920
@@ -7675,10 +7659,6 @@
これから製錬が始まります。製錬とは着用アイテムをアイテムエンチャントに必要な製錬石に変える一連の過程のことです。当然、製錬に使われたアイテムは消滅されますので、ご注意ください。
legacy_id=2224
-
- 生命力 +%d
- legacy_id=2225
-
個人商店で利用できないアイテムです
legacy_id=2226
@@ -7699,10 +7679,6 @@
防御力上昇 +%d
legacy_id=2231
-
- ハロウィンの祭を楽しんでください。
- legacy_id=2232
-
ジャックランタンの祝福
legacy_id=2233
@@ -7735,10 +7711,6 @@
クリスマス
legacy_id=2243
-
- 地面に投げるとクラッカーを鳴らすことができます。
- legacy_id=2244
-
サンタクロース
legacy_id=2245
@@ -7751,10 +7723,6 @@
雪だるま
legacy_id=2247
-
- メリークリスマス!~
- legacy_id=2248
-
重複して使用することができません。
legacy_id=2249
@@ -7771,10 +7739,6 @@
経験値獲得不可能
legacy_id=2255
-
- %d回利用可能
- legacy_id=2260
-
パンドラ合成でアイテムを獲得
legacy_id=2261
@@ -7971,10 +7935,6 @@
ポイントが足りません。
legacy_id=2322
-
- GMがプレゼントした特別な箱です。
- legacy_id=2323
-
GM召喚地域
legacy_id=2324
@@ -8462,10 +8422,6 @@
サンタ村へよくきたのぅ。ワシのところに来ればプレゼントをやるぞ。ただし、1日1回までじゃぞ。
legacy_id=2588
-
- 右クリックでサンタ村へ移動可能
- legacy_id=2589
-
サンタ村へ移動しますか?
legacy_id=2590
@@ -8798,18 +8754,6 @@
移動する地域を選択してください。
legacy_id=2731
-
- 装備すると、パンダマンに変身できます。
- legacy_id=2743
-
-
- ゼン増加50%%に向上
- legacy_id=2744
-
-
- 攻撃力 +30
- legacy_id=2745
-
ルガド
legacy_id=2756
@@ -9750,26 +9694,6 @@
ロレン市場ではパーティーを申し込むことができません。
legacy_id=3064
-
- 装備するとスケルトンに変身できます。
- legacy_id=3065
-
-
- 攻撃力/魔力/呪い +40
- legacy_id=3066
-
-
- スケルトンパージドラゴンと同時に装備すると
- legacy_id=3067
-
-
- スケルトン変身指輪と同時に装備すると
- legacy_id=3071
-
-
- 経験値30%%を追加獲得できます。
- legacy_id=3072
-
カオスキャッスル Lv.%lu 近衛兵 x %lu/%lu
legacy_id=3074
@@ -9814,10 +9738,6 @@
+15 アイテム生成
legacy_id=3087
-
- 他の変身指輪と同時に装備不可
- legacy_id=3088
-
ゲンス情報ウィンドウ
legacy_id=3090
diff --git a/src/Localization/Game.pl.resx b/src/Localization/Game.pl.resx
index 8da8cddb0f..7067bdb530 100644
--- a/src/Localization/Game.pl.resx
+++ b/src/Localization/Game.pl.resx
@@ -7128,10 +7128,6 @@
Kliknij przycisk, aby zresetować wszystkie punkty statystyk.
legacy_id=1886
-
- Zarejestruj się u NPC, aby otrzymać różne prezenty.
- legacy_id=1887
-
Dokonano wymiany.
legacy_id=1888
@@ -7224,18 +7220,6 @@
Fenrir
legacy_id=1916
-
- Fragment of Horn powstaje z Divine Protection of Goddess i Splinter of Armor.
- legacy_id=1917
-
-
- Broken Horn powstaje z Claw of Beast i Fragment of Horn.
- legacy_id=1918
-
-
- Fenrir's Horn można wykonać poprzez kombinację przedmiotów.
- legacy_id=1919
-
Po założeniu przywołuje Fenrira.
legacy_id=1920
@@ -8092,10 +8076,6 @@
Rozpoczęto przetapianie. Przetapianie zamienia przedmiot w Refining Stone służący do wzmacniania. Przetopiony przedmiot zniknie — sprawdź, czy to właściwy przedmiot.
legacy_id=2224
-
- witalność +%d
- legacy_id=2225
-
Ten przedmiot nie może być używany w sklepie prywatnym.
legacy_id=2226
@@ -8120,10 +8100,6 @@
Zwiększenie siły obrony +%d
legacy_id=2231
-
- Ciesz się festiwalem Halloween.
- legacy_id=2232
-
Błogosławieństwo Jacka O'Lanterna
legacy_id=2233
@@ -8168,10 +8144,6 @@
Boże Narodzenie
legacy_id=2243
-
- Fajerwerki pojawią się po rzuceniu na ziemię.
- legacy_id=2244
-
Święty Mikołaj
legacy_id=2245
@@ -8184,10 +8156,6 @@
Bałwan
legacy_id=2247
-
- Wesołych Świąt.
- legacy_id=2248
-
Nastąpił silniejszy efekt.
legacy_id=2249
@@ -8204,10 +8172,6 @@
Nie można zdobywać doświadczenia
legacy_id=2255
-
- do użycia %d razy
- legacy_id=2260
-
Dzięki kombinacjom możesz zdobyć specjalne przedmioty.
legacy_id=2261
@@ -8404,10 +8368,6 @@
Nie masz wystarczającej liczby punktów.
legacy_id=2322
-
- GM podarował to specjalne pudełko.
- legacy_id=2323
-
Strefa przywołania GM
legacy_id=2324
@@ -9051,10 +9011,6 @@
Witamy w Wiosce Świętego Mikołaja. Oto prezent dla ciebie. Zawsze znajdziesz tu coś, co przyniesie ci fortunę.
legacy_id=2588
-
- Przenieś się do Wioski Świętego Mikołaja, klikając prawym przyciskiem myszy.
- legacy_id=2589
-
Czy chcesz przenieść się do Wioski Świętego Mikołaja?
legacy_id=2590
@@ -9391,18 +9347,6 @@
Wybierz, aby przenieść.
legacy_id=2731
-
- Zmienia w pandę.
- legacy_id=2743
-
-
- Wzrost Zen 50%%
- legacy_id=2744
-
-
- Obrażenia/Magia/Klątwa +30
- legacy_id=2745
-
Lugard
legacy_id=2756
@@ -10363,26 +10307,6 @@
Będąc na Loren Market, nie możesz zapraszać innych osób do przyłączenia się do twojej grupy.
legacy_id=3064
-
- Załóż, aby zmienić się w Skeleton Warrior.
- legacy_id=3065
-
-
- Obrażenia/Magia/Klątwa +40
- legacy_id=3066
-
-
- Założony razem z Pet Skeleton
- legacy_id=3067
-
-
- Założony razem ze Skeleton Transformation Ring
- legacy_id=3071
-
-
- zwiększa EXP o 30%%.
- legacy_id=3072
-
Chaos Castle poz. %lu: strażnicy x %lu/%lu
legacy_id=3074
@@ -10427,10 +10351,6 @@
Tworzenie przedmiotu +15
legacy_id=3087
-
- Nie można założyć innego Transformation Ring
- legacy_id=3088
-
Nie można założyć, gdy założony jest inny Transformation Ring.
legacy_id=3089
diff --git a/src/Localization/Game.pt.resx b/src/Localization/Game.pt.resx
index 3c80370244..255656272c 100644
--- a/src/Localization/Game.pt.resx
+++ b/src/Localization/Game.pt.resx
@@ -6832,10 +6832,6 @@
Clique no botão para reinicializar todos os pontos de estatísticas.
legacy_id=1886
-
- Registre-se no NPC para receber diversos presentes.
- legacy_id=1887
-
A troca foi feita.
legacy_id=1888
@@ -6928,18 +6924,6 @@
Fenrir
legacy_id=1916
-
- Fragmento de chifre pode ser feito usando a Proteção Divina da Deusa e fragmento de armadura.
- legacy_id=1917
-
-
- Chifre quebrado pode ser feito usando a garra da besta e um fragmento de chifre.
- legacy_id=1918
-
-
- O chifre de Fenrir pode ser feito através da combinação de itens.
- legacy_id=1919
-
Pode invocar o Fenrir quando equipado.
legacy_id=1920
@@ -7796,10 +7780,6 @@
A refinaria começou. A Refinaria faz parte do processo para alterar o item para Pedra de Refino a ser reforçada. O item refinado desaparecerá, certifique-se de verificar o item.
legacy_id=2224
-
- vitalidade +%d
- legacy_id=2225
-
Este item não tem permissão para uso no armazenamento privado.
legacy_id=2226
@@ -7824,10 +7804,6 @@
Aumento do poder de defesa +%d
legacy_id=2231
-
- Aproveite o Festival de Halloween.
- legacy_id=2232
-
Bênção de Jack O'Lantern
legacy_id=2233
@@ -7872,10 +7848,6 @@
Natal
legacy_id=2243
-
- Fogos de artifício aparecerão assim que forem lançados no campo.
- legacy_id=2244
-
Papai Noel
legacy_id=2245
@@ -7888,10 +7860,6 @@
Boneco de neve
legacy_id=2247
-
- Feliz Natal.
- legacy_id=2248
-
Ocorreu um efeito mais forte.
legacy_id=2249
@@ -7908,10 +7876,6 @@
Não é possível ganhar taxa de experiência
legacy_id=2255
-
- %d vezes utilizáveis
- legacy_id=2260
-
Você pode conseguir itens especiais com combinações.
legacy_id=2261
@@ -8108,10 +8072,6 @@
Você não tem pontos suficientes.
legacy_id=2322
-
- A GM presenteou esta caixa especial.
- legacy_id=2323
-
Zona de invocação de GM
legacy_id=2324
@@ -8755,10 +8715,6 @@
Bem-vindo à Aldeia do Papai Noel. Aqui está um presente para você. Você sempre encontrará algo que lhe trará uma fortuna aqui.
legacy_id=2588
-
- Mude para a Aldeia do Papai Noel com o botão direito do mouse.
- legacy_id=2589
-
Gostaria de se mudar para a Aldeia do Papai Noel?
legacy_id=2590
@@ -9095,18 +9051,6 @@
Selecione para mover.
legacy_id=2731
-
- Transforme-se em Panda.
- legacy_id=2743
-
-
- Aumento Zen 50%%
- legacy_id=2744
-
-
- Dano/Feitiçaria/Maldição +30
- legacy_id=2745
-
Lugard
legacy_id=2756
@@ -10067,26 +10011,6 @@
Você não pode convidar outras pessoas para se juntarem ao seu grupo enquanto estiver no Loren Market.
legacy_id=3064
-
- Equipe-se para se transformar em um Guerreiro Esqueleto.
- legacy_id=3065
-
-
- Dano/Feitiçaria/Maldição +40
- legacy_id=3066
-
-
- Equipando com um esqueleto de animal de estimação
- legacy_id=3067
-
-
- Equipando com um Anel de Transformação de Esqueleto
- legacy_id=3071
-
-
- aumenta EXP em 30%%.
- legacy_id=3072
-
Castelo do Caos Lv.%lu Guarda x %lu/%lu
legacy_id=3074
@@ -10131,10 +10055,6 @@
+15 Criação de Itens
legacy_id=3087
-
- Incapaz de equipar com um anel de transformação diferente
- legacy_id=3088
-
Não pode ser equipado enquanto outro Anel de Transformação estiver equipado.
legacy_id=3089
diff --git a/src/Localization/Game.ru.resx b/src/Localization/Game.ru.resx
index c15da58b14..ee22d21501 100644
--- a/src/Localization/Game.ru.resx
+++ b/src/Localization/Game.ru.resx
@@ -6832,10 +6832,6 @@
Нажмите на кнопку, чтобы повторно инициализировать все очки статистики.
legacy_id=1886
-
- Зарегистрируйтесь у NPC, чтобы получать различные подарки.
- legacy_id=1887
-
Обмен произведен.
legacy_id=1888
@@ -6928,18 +6924,6 @@
Фенрир
legacy_id=1916
-
- Фрагмент рога можно сделать, используя Божественную защиту Богини и фрагмент брони.
- legacy_id=1917
-
-
- Сломанный рог можно сделать из когтя зверя и фрагмента рога.
- legacy_id=1918
-
-
- Рог Фенрира можно сделать, комбинируя предметы.
- legacy_id=1919
-
Может вызвать Фенрира, если экипирован.
legacy_id=1920
@@ -7796,10 +7780,6 @@
НПЗ запустился. Очистительный завод — это часть процесса изменения предмета на Очищающий камень, который нужно усилить. Изысканный предмет будет потерян, обязательно проверьте его.
legacy_id=2224
-
- жизненная сила +%d
- legacy_id=2225
-
Этот предмет не может быть использован в частном магазине.
legacy_id=2226
@@ -7824,10 +7804,6 @@
Увеличение защитной силы +%d
legacy_id=2231
-
- Наслаждайтесь фестивалем Хэллоуина.
- legacy_id=2232
-
Благословение Джека О'Лантерна
legacy_id=2233
@@ -7872,10 +7848,6 @@
Рождество
legacy_id=2243
-
- Фейерверк появится после того, как его бросят в поле.
- legacy_id=2244
-
Санта-Клаус
legacy_id=2245
@@ -7888,10 +7860,6 @@
Снеговик
legacy_id=2247
-
- С Рождеством.
- legacy_id=2248
-
Произошел более сильный эффект.
legacy_id=2249
@@ -7908,10 +7876,6 @@
Невозможно получить ставку опыта
legacy_id=2255
-
- можно использовать %d раз
- legacy_id=2260
-
Вы можете получить особые предметы с помощью комбинаций.
legacy_id=2261
@@ -8108,10 +8072,6 @@
У вас недостаточно очков.
legacy_id=2322
-
- Компания GM подарила эту специальную коробку.
- legacy_id=2323
-
Зона призыва GM
legacy_id=2324
@@ -8755,10 +8715,6 @@
Добро пожаловать в Деревню Санты. Вот подарок для тебя. Здесь вы всегда найдете что-то, что принесет вам состояние.
legacy_id=2588
-
- Переместитесь в Деревню Санты по щелчку правой кнопки мыши.
- legacy_id=2589
-
Хотели бы вы переехать в Деревню Санты?
legacy_id=2590
@@ -9095,18 +9051,6 @@
Выберите, чтобы переместить.
legacy_id=2731
-
- Превратитесь в Панду.
- legacy_id=2743
-
-
- Дзен увеличение 50%%
- legacy_id=2744
-
-
- Урон/Магия/Проклятие +30
- legacy_id=2745
-
Лугард
legacy_id=2756
@@ -10067,26 +10011,6 @@
Вы не можете попросить других присоединиться к вашей группе, находясь на рынке Лорен.
legacy_id=3064
-
- Экипируйтесь, чтобы превратиться в скелета-воина.
- legacy_id=3065
-
-
- Урон/Магия/Проклятие +40
- legacy_id=3066
-
-
- Экипировка вместе со скелетом питомца
- legacy_id=3067
-
-
- Экипировка вместе с кольцом трансформации скелета.
- legacy_id=3071
-
-
- увеличивает опыт на 30%%.
- legacy_id=3072
-
Замок Хаоса Lv.%lu Гвардеец x %lu/%lu
legacy_id=3074
@@ -10131,10 +10055,6 @@
+15 Создание предметов
legacy_id=3087
-
- Невозможно использовать другое кольцо трансформации.
- legacy_id=3088
-
Невозможно использовать, пока надето другое Кольцо Трансформации.
legacy_id=3089
diff --git a/src/Localization/Game.tl.resx b/src/Localization/Game.tl.resx
index 051c045d4b..ddc8b01acd 100644
--- a/src/Localization/Game.tl.resx
+++ b/src/Localization/Game.tl.resx
@@ -6832,10 +6832,6 @@
Mag-click sa button para muling simulan ang lahat ng stat point.
legacy_id=1886
-
- Magrehistro sa NPC upang makatanggap ng iba't ibang mga regalo.
- legacy_id=1887
-
Naisagawa na ang palitan.
legacy_id=1888
@@ -6928,18 +6924,6 @@
Fenrir
legacy_id=1916
-
- Ang fragment ng sungay ay maaaring gawin gamit ang Banal na proteksyon ng Diyosa at fragment ng baluti.
- legacy_id=1917
-
-
- Ang sirang sungay ay maaaring gawin gamit ang kuko ng hayop at fragment ng sungay.
- legacy_id=1918
-
-
- Ang sungay ni Fenrir ay maaaring gawin sa pamamagitan ng kumbinasyon ng item.
- legacy_id=1919
-
Maaaring ipatawag ang Fenrir kapag nilagyan.
legacy_id=1920
@@ -7796,10 +7780,6 @@
Nagsimula na ang refinery. Ang refinery ay isang bahagi ng proseso upang baguhin ang item sa Refining Stone upang palakasin. Ang pinong item ay magiging disapper, siguraduhing suriin ang item.
legacy_id=2224
-
- sigla +%d
- legacy_id=2225
-
Ang item na ito ay hindi pinapayagang gamitin ang pribadong tindahan.
legacy_id=2226
@@ -7824,10 +7804,6 @@
Pagtaas ng Defense Power +%d
legacy_id=2231
-
- Tangkilikin ang Halloween Festival.
- legacy_id=2232
-
Pagpapala ng Jack O'Lantern
legacy_id=2233
@@ -7872,10 +7848,6 @@
Pasko
legacy_id=2243
-
- Lilitaw ang mga paputok sa sandaling ihagis sa field.
- legacy_id=2244
-
Santa Clause
legacy_id=2245
@@ -7888,10 +7860,6 @@
taong yari sa niyebe
legacy_id=2247
-
- Maligayang Pasko.
- legacy_id=2248
-
Stonger effect ay naganap.
legacy_id=2249
@@ -7908,10 +7876,6 @@
Hindi makuha ang rate ng karanasan
legacy_id=2255
-
- magagamit nang %d beses
- legacy_id=2260
-
Makakamit mo ang mga espesyal na item na may mga kumbinasyon.
legacy_id=2261
@@ -8108,10 +8072,6 @@
Wala kang sapat na puntos.
legacy_id=2322
-
- Niregalo ni GM ang espesyal na kahon na ito.
- legacy_id=2323
-
GM summon zone
legacy_id=2324
@@ -8755,10 +8715,6 @@
Maligayang pagdating sa Santa's Village. Narito ang isang regalo para sa iyo. Palagi kang makakahanap ng isang bagay na magdadala sa iyo ng isang kapalaran dito.
legacy_id=2588
-
- Lumipat sa Santa's Village sa pamamagitan ng right-mouse click.
- legacy_id=2589
-
Gusto mo bang lumipat sa Santa's Village?
legacy_id=2590
@@ -9095,18 +9051,6 @@
Piliin upang ilipat.
legacy_id=2731
-
- Transform sa Panda.
- legacy_id=2743
-
-
- 50%% ang pagtaas ng Zen
- legacy_id=2744
-
-
- Pinsala/Wizardry/Curse +30
- legacy_id=2745
-
Lugard
legacy_id=2756
@@ -10067,26 +10011,6 @@
Hindi mo maaaring hilingin sa iba na sumali sa iyong partido habang nasa Loren Market.
legacy_id=3064
-
- Equip para magtransform sa isang Skeleton Warrior.
- legacy_id=3065
-
-
- Pinsala/Wizardry/Curse +40
- legacy_id=3066
-
-
- Equipping kasama ng Pet Skeleton
- legacy_id=3067
-
-
- Equipping kasama ng isang Skeleton Transformation Ring
- legacy_id=3071
-
-
- nagpapataas ng EXP ng 30%%.
- legacy_id=3072
-
Chaos Castle Lv.%lu Guardsman x %lu/%lu
legacy_id=3074
@@ -10131,10 +10055,6 @@
+15 Paglikha ng Item
legacy_id=3087
-
- Hindi Ma-equip ng Iba't Ibang Transformation Ring
- legacy_id=3088
-
Hindi maaaring gamitan habang ang isa pang Transformation Ring ay nilagyan.
legacy_id=3089
diff --git a/src/Localization/Game.uk.resx b/src/Localization/Game.uk.resx
index 558cbb6e26..62771e5e48 100644
--- a/src/Localization/Game.uk.resx
+++ b/src/Localization/Game.uk.resx
@@ -6832,10 +6832,6 @@
Натисніть кнопку, щоб повторно ініціалізувати всі статистичні точки.
legacy_id=1886
-
- Зареєструйтесь у NPC, щоб отримувати різні подарунки.
- legacy_id=1887
-
Здійснено обмін.
legacy_id=1888
@@ -6928,18 +6924,6 @@
Фенрір
legacy_id=1916
-
- Фрагмент рогу можна зробити за допомогою Божественного захисту Богині та фрагмента обладунку.
- legacy_id=1917
-
-
- Зламаний ріг можна зробити за допомогою пазурі звіра і фрагмента рогу.
- legacy_id=1918
-
-
- Ріг Фенріра можна зробити за допомогою комбінації предметів.
- legacy_id=1919
-
Може закликати Фенріра, коли є екіпірований.
legacy_id=1920
@@ -7796,10 +7780,6 @@
Нафтопереробний завод почав роботу. Нафтопереробний завод є частиною процесу зміни предмета на очисний камінь, який потрібно посилити. Доопрацьований предмет зникне, обов’язково перевірте предмет.
legacy_id=2224
-
- життєва сила +%d
- legacy_id=2225
-
Цей товар не можна використовувати в приватному магазині.
legacy_id=2226
@@ -7824,10 +7804,6 @@
Збільшення сили захисту +%d
legacy_id=2231
-
- Насолоджуйтесь фестивалем Хелловін.
- legacy_id=2232
-
Благословення Джека О'Лантерна
legacy_id=2233
@@ -7872,10 +7848,6 @@
Різдво
legacy_id=2243
-
- Феєрверк з'явиться, коли його кинуть у поле.
- legacy_id=2244
-
Дід Мороз
legacy_id=2245
@@ -7888,10 +7860,6 @@
Сніговик
legacy_id=2247
-
- Веселого Різдва.
- legacy_id=2248
-
Має місце сильніший ефект.
legacy_id=2249
@@ -7908,10 +7876,6 @@
Не вдається отримати рівень досвіду
legacy_id=2255
-
- можна використовувати %d разів
- legacy_id=2260
-
Ви можете отримати спеціальні предмети за допомогою комбінацій.
legacy_id=2261
@@ -8108,10 +8072,6 @@
У вас недостатньо балів.
legacy_id=2322
-
- GM подарував цю особливу коробку.
- legacy_id=2323
-
Зона виклику GM
legacy_id=2324
@@ -8755,10 +8715,6 @@
Ласкаво просимо в село Діда Мороза. Ось тобі подарунок. Тут ви завжди знайдете, що принесе вам багатство.
legacy_id=2588
-
- Перемістіть в село Діда Мороза, клацнувши правою кнопкою миші.
- legacy_id=2589
-
Чи хотіли б ви переїхати в село Діда Мороза?
legacy_id=2590
@@ -9095,18 +9051,6 @@
Виберіть для переміщення.
legacy_id=2731
-
- Перетворіться на панду.
- legacy_id=2743
-
-
- Дзен збільшення 50%%
- legacy_id=2744
-
-
- Пошкодження/Чарівництво/Прокляття +30
- legacy_id=2745
-
Лугард
legacy_id=2756
@@ -10067,26 +10011,6 @@
Ви не можете просити інших приєднатися до вашої групи, перебуваючи на ринку Лорен.
legacy_id=3064
-
- Одягніть, щоб перетворитися на воїна-скелета.
- legacy_id=3065
-
-
- Пошкодження/Чарівництво/Прокляття +40
- legacy_id=3066
-
-
- Екіпірування разом зі скелетом домашньої тварини
- legacy_id=3067
-
-
- Екіпірування разом із кільцем трансформації скелета
- legacy_id=3071
-
-
- збільшує досвід на 30%%.
- legacy_id=3072
-
Chaos Castle Lv.%lu Guardsman x %lu/%lu
legacy_id=3074
@@ -10131,10 +10055,6 @@
+15 Створення предметів
legacy_id=3087
-
- Неможливо спорядити інше кільце трансформації
- legacy_id=3088
-
Не можна одягнути, якщо є інше кільце трансформації.
legacy_id=3089
diff --git a/src/Localization/Game.zh-TW.resx b/src/Localization/Game.zh-TW.resx
index 929c03b9a6..52cacaa3d6 100644
--- a/src/Localization/Game.zh-TW.resx
+++ b/src/Localization/Game.zh-TW.resx
@@ -6832,10 +6832,6 @@
點擊按鈕重新初始化所有統計點。
legacy_id=1886
-
- 註冊NPC即可領取各種禮物。
- legacy_id=1887
-
已進行交換。
legacy_id=1888
@@ -6928,18 +6924,6 @@
芬裡爾
legacy_id=1916
-
- 角碎片可以用女神的神聖保護和盔甲碎片來製作。
- legacy_id=1917
-
-
- 破碎的角可以用野獸的爪子和角的碎片來製作。
- legacy_id=1918
-
-
- 芬裡爾的號角可以透過物品組合來製作。
- legacy_id=1919
-
裝備後可以召喚芬裡爾。
legacy_id=1920
@@ -7796,10 +7780,6 @@
煉油廠已啟動。精煉是將物品轉化為強化石的過程的一部分。精煉的物品將會消失,請務必檢查該物品。
legacy_id=2224
-
- 活力+%d
- legacy_id=2225
-
該商品不允許使用私人商店。
legacy_id=2226
@@ -7824,10 +7804,6 @@
防禦力增加+%d
legacy_id=2231
-
- 享受萬聖節節日。
- legacy_id=2232
-
傑克燈籠的祝福
legacy_id=2233
@@ -7872,10 +7848,6 @@
聖誕節
legacy_id=2243
-
- 一旦丟到田野裡就會出現煙火。
- legacy_id=2244
-
聖誕老公公
legacy_id=2245
@@ -7888,10 +7860,6 @@
雪人
legacy_id=2247
-
- 聖誕快樂。
- legacy_id=2248
-
更強烈的效果已經發生。
legacy_id=2249
@@ -7908,10 +7876,6 @@
無法獲得經驗值
legacy_id=2255
-
- 可使用%d次
- legacy_id=2260
-
您可以透過組合獲得特殊物品。
legacy_id=2261
@@ -8108,10 +8072,6 @@
您沒有足夠的積分。
legacy_id=2322
-
- 通用汽車贈送了這個特殊的盒子。
- legacy_id=2323
-
GM召喚區
legacy_id=2324
@@ -8755,10 +8715,6 @@
歡迎來到聖誕老人村。這是給你的禮物。在這裡你總能找到能帶給你財富的東西。
legacy_id=2588
-
- 透過滑鼠右鍵重新定位到聖誕老人村。
- legacy_id=2589
-
您想搬到聖誕老人村嗎?
legacy_id=2590
@@ -9095,18 +9051,6 @@
選擇移動。
legacy_id=2731
-
- 變身為熊貓。
- legacy_id=2743
-
-
- 禪宗增加50%%
- legacy_id=2744
-
-
- 傷害/魔法/詛咒 +30
- legacy_id=2745
-
盧加德
legacy_id=2756
@@ -10067,26 +10011,6 @@
在羅倫市場期間,您不能邀請其他人加入您的隊伍。
legacy_id=3064
-
- 裝備後可以變身為骷髏戰士。
- legacy_id=3065
-
-
- 傷害/魔法/詛咒 +40
- legacy_id=3066
-
-
- 與寵物骷髏一起裝備
- legacy_id=3067
-
-
- 與骷髏變身戒指一起裝備
- legacy_id=3071
-
-
- 經驗值增加 30%%。
- legacy_id=3072
-
混沌城堡 Lv.%lu 守護者 x %lu/%lu
legacy_id=3074
@@ -10131,10 +10055,6 @@
+15 物品創建
legacy_id=3087
-
- 無法裝備不同的變身戒指
- legacy_id=3088
-
裝備有另一個變身戒指時無法裝備。
legacy_id=3089
diff --git a/src/bin/Data/Items/Group13_Helper.json b/src/bin/Data/Items/Group13_Helper.json
index 2a2f02e757..14f5384fac 100644
--- a/src/bin/Data/Items/Group13_Helper.json
+++ b/src/bin/Data/Items/Group13_Helper.json
@@ -421,6 +421,11 @@
"uk": "Довговічність: [{durability}]",
"zh-TW": "耐久性:[{durability}]"
}
+ },
+ {
+ "text": "@unableToEquipWithADifferentTransformationRing",
+ "color": "red",
+ "after": "options"
}
],
"width": 1,
@@ -1221,19 +1226,7 @@
"levels": [1, 1]
},
{
- "text": {
- "en": "Increase Damage +level/20",
- "de": "Erhöht Schaden +Level/20",
- "es": "Aumentar daño +nivel/20",
- "id": "Meningkatkan Kerusakan +level/20",
- "ja": "攻撃力増加 +レベル/20",
- "pl": "Zwiększa obrażenia + poziom/20",
- "pt": "Aumentar Dano +nível/20",
- "ru": "Увеличение урона +уровень/20",
- "tl": "Taasan ang Damage +level/20",
- "uk": "Збільшення шкоди + рівень/20",
- "zh-TW": "傷害增加+level/20"
- },
+ "text": "@increaseDamageLevel20",
"color": "blue",
"levels": [1, 1]
},
@@ -1273,19 +1266,7 @@
"levels": [2, 2]
},
{
- "text": {
- "en": "Increase Damage +level/20",
- "de": "Erhöht Schaden +Level/20",
- "es": "Aumentar daño +nivel/20",
- "id": "Meningkatkan Kerusakan +level/20",
- "ja": "攻撃力増加 +レベル/20",
- "pl": "Zwiększa obrażenia + poziom/20",
- "pt": "Aumentar Dano +nível/20",
- "ru": "Увеличение урона +уровень/20",
- "tl": "Taasan ang Damage +level/20",
- "uk": "Збільшення шкоди + рівень/20",
- "zh-TW": "傷害增加+level/20"
- },
+ "text": "@increaseDamageLevel20",
"color": "blue",
"levels": [2, 2]
},
@@ -1355,19 +1336,7 @@
"color": "blue"
},
{
- "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"
- },
+ "text": "@increasesAcquisitionRateOfManaAfterHuntingMonstersMana8",
"color": "blue"
}
],
@@ -1845,6 +1814,23 @@
"description": [
{
"text": "@piecesOfTwenty"
+ },
+ {
+ "text": {
+ "en": "Fragment of horn can be made using the Divine protection of Goddess and fragment of armor.",
+ "de": "Ein Hornfragment kann aus dem göttlichen Schutz der Göttin und einem Rüstungsfragment hergestellt werden.",
+ "es": "Se puede hacer un fragmento de cuerno usando la protección divina de la Diosa y un fragmento de armadura.",
+ "id": "Fragmen tanduk dapat dibuat menggunakan perlindungan Ilahi dari Dewi dan fragmen baju besi.",
+ "ja": "女神の加護と鎧の破片の合成を通じて角笛の破片を作ることができます。",
+ "pl": "Fragment of Horn powstaje z Divine Protection of Goddess i Splinter of Armor.",
+ "pt": "Fragmento de chifre pode ser feito usando a Proteção Divina da Deusa e fragmento de armadura.",
+ "ru": "Фрагмент рога можно сделать, используя Божественную защиту Богини и фрагмент брони.",
+ "tl": "Ang fragment ng sungay ay maaaring gawin gamit ang Banal na proteksyon ng Diyosa at fragment ng baluti.",
+ "uk": "Фрагмент рогу можна зробити за допомогою Божественного захисту Богині та фрагмента обладунку.",
+ "zh-TW": "角碎片可以用女神的神聖保護和盔甲碎片來製作。"
+ },
+ "color": "yellow",
+ "after": "options"
}
],
"width": 1,
@@ -1873,6 +1859,23 @@
"description": [
{
"text": "@piecesOfTwenty"
+ },
+ {
+ "text": {
+ "en": "Fragment of horn can be made using the Divine protection of Goddess and fragment of armor.",
+ "de": "Ein Hornfragment kann aus dem göttlichen Schutz der Göttin und einem Rüstungsfragment hergestellt werden.",
+ "es": "Se puede hacer un fragmento de cuerno usando la protección divina de la Diosa y un fragmento de armadura.",
+ "id": "Fragmen tanduk dapat dibuat menggunakan perlindungan Ilahi dari Dewi dan fragmen baju besi.",
+ "ja": "女神の加護と鎧の破片の合成を通じて角笛の破片を作ることができます。",
+ "pl": "Fragment of Horn powstaje z Divine Protection of Goddess i Splinter of Armor.",
+ "pt": "Fragmento de chifre pode ser feito usando a Proteção Divina da Deusa e fragmento de armadura.",
+ "ru": "Фрагмент рога можно сделать, используя Божественную защиту Богини и фрагмент брони.",
+ "tl": "Ang fragment ng sungay ay maaaring gawin gamit ang Banal na proteksyon ng Diyosa at fragment ng baluti.",
+ "uk": "Фрагмент рогу можна зробити за допомогою Божественного захисту Богині та фрагмента обладунку.",
+ "zh-TW": "角碎片可以用女神的神聖保護和盔甲碎片來製作。"
+ },
+ "color": "yellow",
+ "after": "options"
}
],
"width": 1,
@@ -1904,6 +1907,11 @@
"en": "{durability} / 10",
"ja": "{durability}個/ 10個"
}
+ },
+ {
+ "text": "@brokenHornCanBeMadeUsingTheClawOfBeastAndFragmentOfHorn",
+ "color": "yellow",
+ "after": "options"
}
],
"width": 1,
@@ -1929,6 +1937,13 @@
"pt": "Fragmento de chifre"
},
"tags": ["valuable", "noDurabilityLine"],
+ "description": [
+ {
+ "text": "@brokenHornCanBeMadeUsingTheClawOfBeastAndFragmentOfHorn",
+ "color": "yellow",
+ "after": "options"
+ }
+ ],
"width": 1,
"height": 1,
"durability": 1,
@@ -1952,6 +1967,25 @@
"pt": "Chifre quebrado"
},
"tags": ["valuable"],
+ "description": [
+ {
+ "text": {
+ "en": "Fenrir's horn can be made through item combination.",
+ "de": "Das Horn des Fenrir kann durch die Kombination von Gegenständen hergestellt werden.",
+ "es": "El cuerno de Fenrir se puede crear mediante una combinación de elementos.",
+ "id": "Tanduk Fenrir dapat dibuat melalui kombinasi item.",
+ "ja": "合成を通じてフェンリルの角笛を作ることができます。",
+ "pl": "Fenrir's Horn można wykonać poprzez kombinację przedmiotów.",
+ "pt": "O chifre de Fenrir pode ser feito através da combinação de itens.",
+ "ru": "Рог Фенрира можно сделать, комбинируя предметы.",
+ "tl": "Ang sungay ni Fenrir ay maaaring gawin sa pamamagitan ng kumbinasyon ng item.",
+ "uk": "Ріг Фенріра можна зробити за допомогою комбінації предметів.",
+ "zh-TW": "芬裡爾的號角可以透過物品組合來製作。"
+ },
+ "color": "yellow",
+ "after": "options"
+ }
+ ],
"width": 2,
"height": 2,
"durability": 1,
@@ -2063,6 +2097,51 @@
"pt": "Anel Esqueleto Transf. Acel."
},
"tags": ["transformationRing"],
+ "description": [
+ {
+ "text": {
+ "en": "Increase defensive skill +10%",
+ "de": "Verteidigung erhöhen +10%",
+ "es": "Aumentar la habilidad defensiva +10%",
+ "id": "Meningkatkan keterampilan bertahan +10%",
+ "ja": "防御力増加 +10%",
+ "pl": "Zwiększa obronę +10%",
+ "pt": "Aumenta a habilidade defensiva +10%",
+ "ru": "Увеличение защитного навыка +10%",
+ "tl": "Dagdagan ang defensive skill +10%",
+ "uk": "Підвищити оборонний навик +10%",
+ "zh-TW": "增加防禦技能+10%"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "vitality +{heroLevel}",
+ "de": "Vitalität +{heroLevel}",
+ "es": "vitalidad +{heroLevel}",
+ "id": "vitalitas +{heroLevel}",
+ "ja": "生命力 +{heroLevel}",
+ "pl": "witalność +{heroLevel}",
+ "pt": "vitalidade +{heroLevel}",
+ "ru": "жизненная сила +{heroLevel}",
+ "tl": "sigla +{heroLevel}",
+ "uk": "життєва сила +{heroLevel}",
+ "zh-TW": "活力+{heroLevel}"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": "",
+ "after": "options"
+ },
+ {
+ "text": "@unableToEquipWithADifferentTransformationRing",
+ "color": "red",
+ "after": "options"
+ }
+ ],
"width": 1,
"height": 1,
"slot": "ring",
@@ -2094,6 +2173,13 @@
"pt": "Anel do Jack Olantern"
},
"tags": ["transformationRing"],
+ "description": [
+ {
+ "text": "@unableToEquipWithADifferentTransformationRing",
+ "color": "red",
+ "after": "options"
+ }
+ ],
"width": 1,
"height": 1,
"slot": "ring",
@@ -2123,6 +2209,72 @@
"pt": "Anel do Natal de Transf."
},
"tags": ["transformationRing"],
+ "description": [
+ {
+ "text": {
+ "en": "Additional Dmg +20",
+ "de": "Zusätzlicher Schaden +20",
+ "es": "Daño adicional +20",
+ "id": "Dmg Tambahan +20",
+ "ja": "追加攻撃力 +20",
+ "pl": "Dodatkowe obrażenia +20",
+ "pt": "Dano Adicional +20",
+ "ru": "Дополнительный урон +20",
+ "tl": "Karagdagang Dmg +20",
+ "uk": "Додатковий Dmg +20",
+ "zh-TW": "附加傷害+20"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "Additional Wizardry Dmg +20",
+ "de": "Zusätzlicher Zaubereischaden +20",
+ "es": "Daño de hechicería adicional +20",
+ "id": "Dmg Sihir Tambahan +20",
+ "ja": "追加魔力 +20",
+ "pl": "Dodatkowe obrażenia magiczne +20",
+ "pt": "Dano Adicional de Magia +20",
+ "ru": "Дополнительный магический урон +20",
+ "tl": "Karagdagang Wizardry Dmg +20",
+ "uk": "Додатковий Wizardry Dmg +20",
+ "zh-TW": "額外魔法傷害+20"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": "",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "Merry Christmas.",
+ "de": "Frohe Weihnachten.",
+ "es": "Feliz navidad.",
+ "id": "Selamat natal.",
+ "ja": "メリークリスマス!~",
+ "pl": "Wesołych Świąt.",
+ "pt": "Feliz Natal.",
+ "ru": "С Рождеством.",
+ "tl": "Maligayang Pasko.",
+ "uk": "Веселого Різдва.",
+ "zh-TW": "聖誕快樂。"
+ },
+ "color": "red",
+ "after": "options"
+ },
+ {
+ "text": "",
+ "after": "options"
+ },
+ {
+ "text": "@unableToEquipWithADifferentTransformationRing",
+ "color": "red",
+ "after": "options"
+ }
+ ],
"width": 1,
"height": 1,
"slot": "ring",
@@ -2152,6 +2304,136 @@
"pt": "Anel de GM"
},
"tags": ["transformationRing"],
+ "description": [
+ {
+ "text": {
+ "en": "Ice attribute skill increase damage +255",
+ "de": "Schaden von Eis-Fähigkeiten erhöhen +255",
+ "es": "Habilidad de atributo de hielo aumenta el daño +255",
+ "id": "Skill atribut es meningkatkan damage +255",
+ "ja": "氷属性スキル攻撃力増加 +255",
+ "pl": "Zwiększenie obrażeń umiejętności atrybutu lodu +255",
+ "pt": "Habilidade de atributo de gelo aumenta dano +255",
+ "ru": "Навык ледяного атрибута увеличивает урон +255",
+ "tl": "Ang kakayahan ng katangian ng yelo ay nagpapataas ng pinsala +255",
+ "uk": "Навичка льоду збільшує шкоду +255",
+ "zh-TW": "冰屬性技能傷害增加+255"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "Poison attribute skill increase damage +255",
+ "de": "Schaden von Gift-Fähigkeiten erhöhen +255",
+ "es": "La habilidad del atributo de veneno aumenta el daño +255",
+ "id": "Keterampilan atribut racun meningkatkan kerusakan +255",
+ "ja": "毒属性スキル攻撃力増加 +255",
+ "pl": "Zwiększenie obrażeń umiejętności atrybutu trucizny +255",
+ "pt": "Habilidade de atributo venenoso aumenta dano +255",
+ "ru": "Навык атрибута яда увеличивает урон +255",
+ "tl": "Ang kakayahan ng katangian ng lason ay nagpapataas ng pinsala +255",
+ "uk": "Навик атрибута отрути збільшує шкоду +255",
+ "zh-TW": "毒屬性技能傷害增加+255"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "Lightning attribute skill increase damage +255",
+ "de": "Schaden von Blitz-Fähigkeiten erhöhen +255",
+ "es": "Habilidad de atributo de rayo aumenta el daño +255",
+ "id": "Skill atribut petir meningkatkan damage +255",
+ "ja": "稲妻属性スキル攻撃力増加 +255",
+ "pl": "Zwiększenie obrażeń umiejętności atrybutu błyskawicy +255",
+ "pt": "Habilidade do atributo relâmpago aumenta o dano +255",
+ "ru": "Навык атрибута молнии увеличивает урон +255",
+ "tl": "Ang kakayahan ng katangian ng kidlat ay nagpapataas ng pinsala +255",
+ "uk": "Атрибут блискавки збільшує шкоду +255",
+ "zh-TW": "雷屬性技能傷害增加+255"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "Fire attribute skill increase damage +255",
+ "de": "Schaden von Feuer-Fähigkeiten erhöhen +255",
+ "es": "Habilidad de atributo de fuego aumenta el daño +255",
+ "id": "Skill atribut api meningkatkan damage +255",
+ "ja": "炎属性スキル攻撃力増加 +255",
+ "pl": "Zwiększenie obrażeń umiejętności atrybutu ognia +255",
+ "pt": "Habilidade de atributo de fogo aumenta o dano +255",
+ "ru": "Навык атрибута огня увеличивает урон +255",
+ "tl": "Ang kakayahan ng katangian ng sunog ay nagpapataas ng pinsala +255",
+ "uk": "Навик атрибута вогню збільшує шкоду +255",
+ "zh-TW": "火屬性技能傷害增加+255"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "Earth attribute skill increase damage +255",
+ "de": "Schaden von Erd-Fähigkeiten erhöhen +255",
+ "es": "Habilidad de atributo de tierra aumenta el daño +255",
+ "id": "Skill atribut bumi meningkatkan damage +255",
+ "ja": "地属性スキル攻撃力増加 +255",
+ "pl": "Zwiększenie obrażeń umiejętności atrybutu Ziemi +255",
+ "pt": "Habilidade de atributo Terra aumenta dano +255",
+ "ru": "Навык атрибута земли увеличивает урон +255",
+ "tl": "Ang kakayahan ng Earth attribute ay nagpapataas ng pinsala +255",
+ "uk": "Навичка атрибута Землі збільшує шкоду +255",
+ "zh-TW": "土屬性技能傷害增加+255"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "Wind attribute skill increase damage +255",
+ "de": "Schaden von Wind-Fähigkeiten erhöhen +255",
+ "es": "Habilidad de atributo de viento aumenta el daño +255",
+ "id": "Skill atribut angin meningkatkan damage +255",
+ "ja": "風属性スキル攻撃力増加 +255",
+ "pl": "Zwiększenie obrażeń umiejętności atrybutu Wiatru +255",
+ "pt": "Habilidade do atributo Vento aumenta dano +255",
+ "ru": "Навык атрибута ветра увеличивает урон +255",
+ "tl": "Ang kakayahan ng katangian ng hangin ay nagpapataas ng pinsala +255",
+ "uk": "Навик атрибута вітру збільшує шкоду +255",
+ "zh-TW": "風屬性技能傷害增加+255"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "Water attribute skill increase damage +255",
+ "de": "Schaden von Wasser-Fähigkeiten erhöhen +255",
+ "es": "Habilidad de atributo de agua aumenta el daño +255",
+ "id": "Skill atribut air meningkatkan damage +255",
+ "ja": "水属性スキル攻撃力増加 +255",
+ "pl": "Zwiększenie obrażeń umiejętności atrybutu wody +255",
+ "pt": "Habilidade de atributo água aumenta dano +255",
+ "ru": "Навык атрибута воды увеличивает урон +255",
+ "tl": "Ang kakayahan ng katangian ng tubig ay nagpapataas ng pinsala +255",
+ "uk": "Водний атрибут навички збільшує шкоду +255",
+ "zh-TW": "水屬性技能傷害增加+255"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": "",
+ "after": "options"
+ },
+ {
+ "text": "@unableToEquipWithADifferentTransformationRing",
+ "color": "red",
+ "after": "options"
+ }
+ ],
"width": 1,
"height": 1,
"slot": "ring",
@@ -3231,7 +3513,31 @@
"es": "Invitación a Aldea de Santa",
"pt": "Conv. p/ Vila do Papai Noel"
},
- "tags": ["noDurabilityLine"],
+ "tags": ["noDurabilityLine", "noBlankAfterOptions"],
+ "description": [
+ {
+ "text": "@usableTimes",
+ "color": "red",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "Relocate to the Santa's Village by the right-mouse click.",
+ "de": "Per Rechtsklick ins Dorf des Weihnachtsmanns wechseln.",
+ "es": "Trasládese a Santa's Village haciendo clic con el botón derecho del ratón.",
+ "id": "Pindah ke Desa Santa dengan klik kanan mouse.",
+ "ja": "右クリックでサンタ村へ移動可能",
+ "pl": "Przenieś się do Wioski Świętego Mikołaja, klikając prawym przyciskiem myszy.",
+ "pt": "Mude para a Aldeia do Papai Noel com o botão direito do mouse.",
+ "ru": "Переместитесь в Деревню Санты по щелчку правой кнопки мыши.",
+ "tl": "Lumipat sa Santa's Village sa pamamagitan ng right-mouse click.",
+ "uk": "Перемістіть в село Діда Мороза, клацнувши правою кнопкою миші.",
+ "zh-TW": "透過滑鼠右鍵重新定位到聖誕老人村。"
+ },
+ "color": "blue",
+ "after": "options"
+ }
+ ],
"width": 1,
"height": 1,
"durability": 10,
@@ -3294,6 +3600,13 @@
"pt": "Anel Transf. Homem da Neve"
},
"tags": ["transformationRing"],
+ "description": [
+ {
+ "text": "@unableToEquipWithADifferentTransformationRing",
+ "color": "red",
+ "after": "options"
+ }
+ ],
"width": 1,
"height": 1,
"slot": "ring",
@@ -3573,6 +3886,68 @@
"pt": "Anel do Panda"
},
"tags": ["pandaOrSkeleton", "transformationRing", "valuable"],
+ "description": [
+ {
+ "text": {
+ "en": "Transform into Panda.",
+ "de": "Verwandelt Sie in einen Panda.",
+ "es": "Transfórmate en Panda.",
+ "id": "Berubah menjadi Panda.",
+ "ja": "装備すると、パンダマンに変身できます。",
+ "pl": "Zmienia w pandę.",
+ "pt": "Transforme-se em Panda.",
+ "ru": "Превратитесь в Панду.",
+ "tl": "Transform sa Panda.",
+ "uk": "Перетворіться на панду.",
+ "zh-TW": "變身為熊貓。"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "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",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "Damage/Wizardry/Curse +30",
+ "de": "Schaden/Zauberei/Fluch +30",
+ "es": "Daño/Hechicería/Maldición +30",
+ "id": "Kerusakan/Sihir/Kutukan +30",
+ "ja": "攻撃力 +30",
+ "pl": "Obrażenia/Magia/Klątwa +30",
+ "pt": "Dano/Feitiçaria/Maldição +30",
+ "ru": "Урон/Магия/Проклятие +30",
+ "tl": "Pinsala/Wizardry/Curse +30",
+ "uk": "Пошкодження/Чарівництво/Прокляття +30",
+ "zh-TW": "傷害/魔法/詛咒 +30"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": "",
+ "after": "options"
+ },
+ {
+ "text": "@unableToEquipWithADifferentTransformationRing",
+ "color": "red",
+ "after": "options"
+ }
+ ],
"width": 1,
"height": 1,
"slot": "ring",
@@ -4863,19 +5238,7 @@
"text": "@automaticHpRecovery3"
},
{
- "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"
- }
+ "text": "@increasesAcquisitionRateOfManaAfterHuntingMonstersMana8"
}
],
"width": 1,
@@ -5089,6 +5452,89 @@
"pt": "Anel Transf. de Esqueleto"
},
"tags": ["pandaOrSkeleton", "transformationRing", "valuable"],
+ "description": [
+ {
+ "text": {
+ "en": "Equip to transform into a Skeleton Warrior.",
+ "de": "Ausrüsten, um sich in einen Skelettkrieger zu verwandeln.",
+ "es": "Equípate para transformarte en un guerrero esqueleto.",
+ "id": "Lengkapi untuk berubah menjadi Skeleton Warrior.",
+ "ja": "装備するとスケルトンに変身できます。",
+ "pl": "Załóż, aby zmienić się w Skeleton Warrior.",
+ "pt": "Equipe-se para se transformar em um Guerreiro Esqueleto.",
+ "ru": "Экипируйтесь, чтобы превратиться в скелета-воина.",
+ "tl": "Equip para magtransform sa isang Skeleton Warrior.",
+ "uk": "Одягніть, щоб перетворитися на воїна-скелета.",
+ "zh-TW": "裝備後可以變身為骷髏戰士。"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "Damage/Wizardry/Curse +40",
+ "de": "Schaden/Zauberei/Fluch +40",
+ "es": "Daño/Hechicería/Maldición +40",
+ "id": "Kerusakan/Sihir/Kutukan +40",
+ "ja": "攻撃力/魔力/呪い +40",
+ "pl": "Obrażenia/Magia/Klątwa +40",
+ "pt": "Dano/Feitiçaria/Maldição +40",
+ "ru": "Урон/Магия/Проклятие +40",
+ "tl": "Pinsala/Wizardry/Curse +40",
+ "uk": "Пошкодження/Чарівництво/Прокляття +40",
+ "zh-TW": "傷害/魔法/詛咒 +40"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": "",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "Equipping along with a Pet Skeleton",
+ "de": "Zusammen mit einem Haustier-Skelett ausgerüstet",
+ "es": "Equiparse con un esqueleto de mascota",
+ "id": "Dilengkapi dengan Pet Skeleton",
+ "ja": "スケルトンパージドラゴンと同時に装備すると",
+ "pl": "Założony razem z Pet Skeleton",
+ "pt": "Equipando com um esqueleto de animal de estimação",
+ "ru": "Экипировка вместе со скелетом питомца",
+ "tl": "Equipping kasama ng Pet Skeleton",
+ "uk": "Екіпірування разом зі скелетом домашньої тварини",
+ "zh-TW": "與寵物骷髏一起裝備"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "increases EXP by 30%.",
+ "de": "erhöht er die Erfahrung um 30%.",
+ "es": "aumenta la EXP en un 30%.",
+ "id": "meningkatkan EXP sebesar 30%.",
+ "ja": "経験値30%を追加獲得できます。",
+ "pl": "zwiększa EXP o 30%.",
+ "pt": "aumenta EXP em 30%.",
+ "ru": "увеличивает опыт на 30%.",
+ "tl": "nagpapataas ng EXP ng 30%.",
+ "uk": "збільшує досвід на 30%.",
+ "zh-TW": "經驗值增加 30%。"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": "",
+ "after": "options"
+ },
+ {
+ "text": "@unableToEquipWithADifferentTransformationRing",
+ "color": "red",
+ "after": "options"
+ }
+ ],
"width": 1,
"height": 1,
"slot": "ring",
@@ -5122,7 +5568,7 @@
"es": "Mascota Esqueleto",
"pt": "Mascote esqueleto"
},
- "tags": ["pandaOrSkeleton", "valuable", "noDurabilityLine"],
+ "tags": ["pandaOrSkeleton", "valuable", "noDurabilityLine", "noBlankAfterOptions"],
"description": [
{
"text": "@collectsSurroundingZen",
@@ -5167,6 +5613,40 @@
{
"text": "@life",
"when": ["!timed"]
+ },
+ {
+ "text": {
+ "en": "Equipping along with a Skeleton Transformation Ring",
+ "de": "Zusammen mit einem Skelett-Verwandlungsring ausgerüstet",
+ "es": "Equipado con un anillo de transformación de esqueleto",
+ "id": "Dilengkapi dengan Cincin Transformasi Kerangka",
+ "ja": "スケルトン変身指輪と同時に装備すると",
+ "pl": "Założony razem ze Skeleton Transformation Ring",
+ "pt": "Equipando com um Anel de Transformação de Esqueleto",
+ "ru": "Экипировка вместе с кольцом трансформации скелета.",
+ "tl": "Equipping kasama ng isang Skeleton Transformation Ring",
+ "uk": "Екіпірування разом із кільцем трансформації скелета",
+ "zh-TW": "與骷髏變身戒指一起裝備"
+ },
+ "color": "blue",
+ "after": "options"
+ },
+ {
+ "text": {
+ "en": "increases EXP by 30%.",
+ "de": "erhöht er die Erfahrung um 30%.",
+ "es": "aumenta la EXP en un 30%.",
+ "id": "meningkatkan EXP sebesar 30%.",
+ "ja": "経験値30%を追加獲得できます。",
+ "pl": "zwiększa EXP o 30%.",
+ "pt": "aumenta EXP em 30%.",
+ "ru": "увеличивает опыт на 30%.",
+ "tl": "nagpapataas ng EXP ng 30%.",
+ "uk": "збільшує досвід на 30%.",
+ "zh-TW": "經驗值增加 30%。"
+ },
+ "color": "blue",
+ "after": "options"
}
],
"width": 1,
diff --git a/src/bin/Data/Items/Group14_Potion.json b/src/bin/Data/Items/Group14_Potion.json
index 488ac156b5..cf93659643 100644
--- a/src/bin/Data/Items/Group14_Potion.json
+++ b/src/bin/Data/Items/Group14_Potion.json
@@ -1201,6 +1201,13 @@
"es": "Estrella de Navidad",
"pt": "Estrela de Natal"
},
+ "description": [
+ {
+ "text": "@fireworksWillAppearOnceThrownInTheField",
+ "color": "blue",
+ "after": "options"
+ }
+ ],
"width": 1,
"height": 1,
"repairable": false
@@ -1213,6 +1220,28 @@
"es": "Regalo de GM",
"pt": "Presente de GM"
},
+ "description": [
+ {
+ "text": {
+ "en": "GM has gifted this special box.",
+ "de": "Ein GM hat diese besondere Box verschenkt.",
+ "es": "GM ha regalado esta caja especial.",
+ "id": "GM telah menghadiahkan kotak khusus ini.",
+ "ja": "GMがプレゼントした特別な箱です。",
+ "pl": "GM podarował to specjalne pudełko.",
+ "pt": "A GM presenteou esta caixa especial.",
+ "ru": "Компания GM подарила эту специальную коробку.",
+ "tl": "Niregalo ni GM ang espesyal na kahon na ito.",
+ "uk": "GM подарував цю особливу коробку.",
+ "zh-TW": "通用汽車贈送了這個特殊的盒子。"
+ },
+ "after": "options"
+ },
+ {
+ "text": "@dropItToReceiveTheGift",
+ "after": "options"
+ }
+ ],
"width": 1,
"height": 1,
"tradable": false,
@@ -1451,6 +1480,12 @@
"es": "Petardo",
"pt": "Fogos de artifício"
},
+ "description": [
+ {
+ "text": "@fireworksWillAppearOnceThrownInTheField",
+ "after": "options"
+ }
+ ],
"width": 1,
"height": 1,
"repairable": false
@@ -2241,19 +2276,7 @@
},
"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": "放下它即可收到禮物。"
- },
+ "text": "@dropItToReceiveTheGift",
"color": "blue"
}
],
@@ -2729,6 +2752,23 @@
{
"text": "@numberOfItems",
"when": ["durability"]
+ },
+ {
+ "text": {
+ "en": "Register with the NPC to receive various gifts.",
+ "de": "Registrieren Sie sich beim NPC, um verschiedene Geschenke zu erhalten.",
+ "es": "Regístrese con el NPC para recibir varios obsequios.",
+ "id": "Daftar ke NPC untuk menerima berbagai hadiah.",
+ "ja": "月の商人デルガドが集めている金貨",
+ "pl": "Zarejestruj się u NPC, aby otrzymać różne prezenty.",
+ "pt": "Registre-se no NPC para receber diversos presentes.",
+ "ru": "Зарегистрируйтесь у NPC, чтобы получать различные подарки.",
+ "tl": "Magrehistro sa NPC upang makatanggap ng iba't ibang mga regalo.",
+ "uk": "Зареєструйтесь у NPC, щоб отримувати різні подарунки.",
+ "zh-TW": "註冊NPC即可領取各種禮物。"
+ },
+ "color": "blue",
+ "after": "options"
}
],
"width": 1,
diff --git a/src/bin/Data/Items/Tooltips/Tooltip.json b/src/bin/Data/Items/Tooltips/Tooltip.json
index 4e900f41f4..2f7dca4cd5 100644
--- a/src/bin/Data/Items/Tooltips/Tooltip.json
+++ b/src/bin/Data/Items/Tooltips/Tooltip.json
@@ -1031,6 +1031,84 @@
"tl": "Ito ay bahagi ng isang Kumpletong Secromicon.",
"uk": "Це частина повного Secromicon.",
"zh-TW": "它是 Complete Secromicon 的一部分。"
+ },
+ "unableToEquipWithADifferentTransformationRing": {
+ "en": "Unable to Equip with a Different Transformation Ring",
+ "de": "Kann nicht zusammen mit einem anderen Verwandlungsring ausgerüstet werden",
+ "es": "No se puede equipar con un anillo de transformación diferente",
+ "id": "Tidak Dapat Melengkapi Cincin Transformasi Berbeda",
+ "ja": "他の変身指輪と同時に装備不可",
+ "pl": "Nie można założyć innego Transformation Ring",
+ "pt": "Incapaz de equipar com um anel de transformação diferente",
+ "ru": "Невозможно использовать другое кольцо трансформации.",
+ "tl": "Hindi Ma-equip ng Iba't Ibang Transformation Ring",
+ "uk": "Неможливо спорядити інше кільце трансформації",
+ "zh-TW": "無法裝備不同的變身戒指"
+ },
+ "increaseDamageLevel20": {
+ "en": "Increase Damage +level/20",
+ "de": "Erhöht Schaden +Level/20",
+ "es": "Aumentar daño +nivel/20",
+ "id": "Meningkatkan Kerusakan +level/20",
+ "ja": "攻撃力増加 +レベル/20",
+ "pl": "Zwiększa obrażenia + poziom/20",
+ "pt": "Aumentar Dano +nível/20",
+ "ru": "Увеличение урона +уровень/20",
+ "tl": "Taasan ang Damage +level/20",
+ "uk": "Збільшення шкоди + рівень/20",
+ "zh-TW": "傷害增加+level/20"
+ },
+ "increasesAcquisitionRateOfManaAfterHuntingMonstersMana8": {
+ "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"
+ },
+ "brokenHornCanBeMadeUsingTheClawOfBeastAndFragmentOfHorn": {
+ "en": "Broken horn can be made using the claw of beast and fragment of horn.",
+ "de": "Ein zerbrochenes Horn kann aus der Klaue der Bestie und einem Hornfragment hergestellt werden.",
+ "es": "Se puede hacer un cuerno roto usando la garra de la bestia y un fragmento de cuerno.",
+ "id": "Tanduk patah dapat dibuat dengan menggunakan cakar binatang dan pecahan tanduk.",
+ "ja": "猛獣の爪と角笛のかけらの合成を通じて折れた角笛を作ることができます。",
+ "pl": "Broken Horn powstaje z Claw of Beast i Fragment of Horn.",
+ "pt": "Chifre quebrado pode ser feito usando a garra da besta e um fragmento de chifre.",
+ "ru": "Сломанный рог можно сделать из когтя зверя и фрагмента рога.",
+ "tl": "Ang sirang sungay ay maaaring gawin gamit ang kuko ng hayop at fragment ng sungay.",
+ "uk": "Зламаний ріг можна зробити за допомогою пазурі звіра і фрагмента рогу.",
+ "zh-TW": "破碎的角可以用野獸的爪子和角的碎片來製作。"
+ },
+ "fireworksWillAppearOnceThrownInTheField": {
+ "en": "Fireworks will appear once thrown in the field.",
+ "de": "Ein Feuerwerk erscheint, wenn Sie es auf den Boden werfen.",
+ "es": "Los fuegos artificiales aparecerán una vez lanzados al campo.",
+ "id": "Kembang api akan muncul setelah dilempar ke lapangan.",
+ "ja": "地面に投げるとクラッカーを鳴らすことができます。",
+ "pl": "Fajerwerki pojawią się po rzuceniu na ziemię.",
+ "pt": "Fogos de artifício aparecerão assim que forem lançados no campo.",
+ "ru": "Фейерверк появится после того, как его бросят в поле.",
+ "tl": "Lilitaw ang mga paputok sa sandaling ihagis sa field.",
+ "uk": "Феєрверк з'явиться, коли його кинуть у поле.",
+ "zh-TW": "一旦丟到田野裡就會出現煙火。"
+ },
+ "dropItToReceiveTheGift": {
+ "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": "放下它即可收到禮物。"
}
},
"layouts": [
diff --git a/src/source/Data/GameData/ItemData/ItemDefinition.h b/src/source/Data/GameData/ItemData/ItemDefinition.h
index e2953a8cb1..bfa27e9fba 100644
--- a/src/source/Data/GameData/ItemData/ItemDefinition.h
+++ b/src/source/Data/GameData/ItemData/ItemDefinition.h
@@ -112,6 +112,8 @@ struct ItemDescriptionLine
// The line's own color rules, as a layout line's: the first that holds gives the color, else `color` does.
std::vector colors;
bool bold = false;
+ // Drawn after the item's options, at the end of the tooltip ("after": "options"), instead of with the description.
+ bool afterOptions = false;
int minLevel = 0;
int maxLevel = ItemLevelCount - 1;
diff --git a/src/source/Data/GameData/ItemData/ItemDescriptionPlaceholders.cpp b/src/source/Data/GameData/ItemData/ItemDescriptionPlaceholders.cpp
index 9b0dbe0bcd..821e4f2793 100644
--- a/src/source/Data/GameData/ItemData/ItemDescriptionPlaceholders.cpp
+++ b/src/source/Data/GameData/ItemData/ItemDescriptionPlaceholders.cpp
@@ -14,7 +14,7 @@ namespace Data::Items
namespace
{
// {level}, and the values of the tooltip's stat lines, which the game computes (Engine/Object/ItemTooltipValues).
-constexpr std::array BuiltIns = {
+constexpr std::array BuiltIns = {
LevelPlaceholder, "damageMin", "damageMax", "defense",
"magicDefense", "blockRate", "attackSpeed", "walkSpeed",
"magicPower", "durability", "maxDurability", "iceResistance",
@@ -23,7 +23,7 @@ constexpr std::array BuiltIns = {
"requiredDexterity", "requiredVitality", "requiredEnergy", "requiredLeadership",
"missingLevel", "missingStrength", "missingDexterity", "missingVitality",
"missingEnergy", "missingLeadership", "addOptionValue1", "addOptionValue2",
- "addOptionDuration",
+ "addOptionDuration", "heroLevel",
};
// The placeholder of `text` that starts at the "{" at `open`: its name and the position after its "}", or the problem.
diff --git a/src/source/Data/GameData/ItemData/ItemEnumNames.cpp b/src/source/Data/GameData/ItemData/ItemEnumNames.cpp
index 971e06f969..1890f94c3a 100644
--- a/src/source/Data/GameData/ItemData/ItemEnumNames.cpp
+++ b/src/source/Data/GameData/ItemData/ItemEnumNames.cpp
@@ -81,6 +81,7 @@ constexpr std::array, static_cast(ItemTag::Count)> Ite
{ItemTag::Valuable, "valuable"},
{ItemTag::NoLevelRequirement, "noLevelRequirement"},
{ItemTag::NoDurabilityLine, "noDurabilityLine"},
+ {ItemTag::NoBlankAfterOptions, "noBlankAfterOptions"},
}};
constexpr std::array, ItemRequirementCount> ItemRequirementNames = {{
diff --git a/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp b/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp
index 9f2052a222..d0d83163dd 100644
--- a/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp
+++ b/src/source/Data/GameData/ItemData/ItemJsonFormat.cpp
@@ -35,6 +35,8 @@ constexpr const char* Values = "values";
constexpr const char* LevelValues = "levelValues";
constexpr const char* Colors = "colors";
constexpr const char* Bold = "bold";
+constexpr const char* After = "after";
+constexpr const char* AfterOptions = "options";
constexpr const char* Requirements = "requirements";
constexpr const char* RequirementsByLevel = "requirementsByLevel";
constexpr const char* ClassRequirements = "classRequirements";
@@ -211,6 +213,10 @@ OrderedJson WriteDescription(const std::vector& description
{
entry[Keys::Levels] = OrderedJson::array({line.minLevel, line.maxLevel});
}
+ if (line.afterOptions)
+ {
+ entry[Keys::After] = Keys::AfterOptions;
+ }
json.push_back(std::move(entry));
}
return json;
@@ -520,6 +526,19 @@ void ItemReader::ReadDescription(const OrderedJson& json, std::vectoris_string() && after->get() == Keys::AfterOptions)
+ {
+ line.afterOptions = true;
+ }
+ else
+ {
+ AddIssue(ItemDataIssueSeverity::Error, field + "." + Keys::After,
+ "must be \"options\": the line is drawn after the item's options instead of with the "
+ "description");
+ }
+ }
if (const auto bold = entry.find(Keys::Bold); bold != entry.end())
{
if (bold->is_boolean())
@@ -537,7 +556,8 @@ void ItemReader::ReadDescription(const OrderedJson& json, std::vector= ITEM_WING_OF_STORM && type <= ITEM_WING_OF_DIMENSION) ||
(type >= ITEM_CAPE_OF_FIGHTER && type <= ITEM_CAPE_OF_OVERRULE);
values.timed = item.bPeriodItem;
+ // No hero yet (the character screen, a tooltip built before the world loads): level 0.
+ values.heroLevel = CharacterAttribute != nullptr ? CharacterAttribute->Level : 0;
if (g_pItemAddOptioninfo != nullptr)
{
const ITEM_ADD_OPTION& addOption = g_pItemAddOptioninfo->GetItemAddOtioninfo(item.Type);
@@ -202,6 +204,7 @@ constexpr NamedValue PlainValues[] = {
{"magicPower", &ItemTooltipValues::magicPower},
{"durability", &ItemTooltipValues::durability},
{"maxDurability", &ItemTooltipValues::maxDurability},
+ {"heroLevel", &ItemTooltipValues::heroLevel},
{"addOptionValue1", &ItemTooltipValues::addOptionValue1},
{"addOptionValue2", &ItemTooltipValues::addOptionValue2},
};
diff --git a/src/source/Engine/Object/ItemTooltipValues.h b/src/source/Engine/Object/ItemTooltipValues.h
index e350b7f95c..f51c0911fc 100644
--- a/src/source/Engine/Object/ItemTooltipValues.h
+++ b/src/source/Engine/Object/ItemTooltipValues.h
@@ -66,6 +66,8 @@ struct ItemTooltipValues
bool hasDurability = false;
// A timed item (one that expires).
bool timed = false;
+ // The hero's level.
+ int heroLevel = 0;
// The item's add option (the potions', scrolls' and seals' effects of ItemAddOption): its two values, and how long
// it lasts in seconds, which {addOptionDuration} writes as the tooltip does ("1 Hour") only for a line showing it.
int addOptionValue1 = 0;
diff --git a/src/source/Engine/Object/ZzzInventory.cpp b/src/source/Engine/Object/ZzzInventory.cpp
index 87dc70f008..74cbf0a89f 100644
--- a/src/source/Engine/Object/ZzzInventory.cpp
+++ b/src/source/Engine/Object/ZzzInventory.cpp
@@ -1704,13 +1704,15 @@ std::optional GetPetInfoRequest(int itemType, int pointedIndex,
}
void WriteItemDescriptionLines(const Data::Items::ItemDefinition& definition, int level,
- const ItemTooltipValues& values, ItemTooltipTextMeasure measure)
+ const ItemTooltipValues& values, bool afterOptions, int& rowsLeft,
+ ItemTooltipTextMeasure measure)
{
- const int lastRow = std::min(TextNum + MaxItemDescriptionRows, static_cast(std::size(TextList)));
+ const int firstRow = TextNum;
+ const int lastRow = std::min(TextNum + rowsLeft, static_cast(std::size(TextList)));
const int itemType = Data::Items::MakeItemType(definition.group, definition.number);
for (const Data::Items::ItemDescriptionLine& line : definition.description)
{
- if (!line.IsShownAt(level) ||
+ if (line.afterOptions != afterOptions || !line.IsShownAt(level) ||
!Engine::Items::TooltipValues::AreTooltipConditionsMet(line.when, itemType, level, values))
{
continue;
@@ -1736,7 +1738,7 @@ void WriteItemDescriptionLines(const Data::Items::ItemDefinition& definition, in
{
if (TextNum >= lastRow)
{
- return;
+ break;
}
if (piece.empty())
{
@@ -1754,6 +1756,7 @@ void WriteItemDescriptionLines(const Data::Items::ItemDefinition& definition, in
TextNum++;
}
}
+ rowsLeft -= TextNum - firstRow;
}
// Writes the lines of the item tooltip layout that come after its section `after`, up to its next section, into
@@ -1810,6 +1813,26 @@ static void WriteItemTooltipLayoutLines(const ITEM& item, int level, const ItemT
}
}
+// The item data's description of `item`, measured with the game's font (or a test's measure): see
+// WriteItemDescriptionLines.
+static void WriteItemDescription(const ITEM& item, int level, const ItemTooltipValues& values, bool afterOptions,
+ int& rowsLeft)
+{
+ const Data::Items::ItemDefinition* definition = g_ItemDatabase.Find(item.Type);
+ if (definition == nullptr)
+ {
+ return;
+ }
+ g_pRenderText->SetFont(g_hFont);
+ WriteItemDescriptionLines(*definition, level, values, afterOptions, rowsLeft,
+ [](const wchar_t* text, size_t length) -> int
+ {
+ return s_itemTooltipTextMeasure != nullptr
+ ? s_itemTooltipTextMeasure(text, length)
+ : g_pRenderText->MeasureText(text, static_cast(length)).cx;
+ });
+}
+
// What BuildItemTooltipText made of an item.
enum class ItemTooltipBuild
{
@@ -2620,17 +2643,9 @@ static ItemTooltipBuild BuildItemTooltipText(ITEM* ip, bool Sell, int Inventype,
TextListColor[TextNum] = TEXT_COLOR_WHITE; TextBold[TextNum] = false; TextNum++;
}
}
- if (const Data::Items::ItemDefinition* definition = g_ItemDatabase.Find(ip->Type))
- {
- g_pRenderText->SetFont(g_hFont);
- WriteItemDescriptionLines(*definition, Level, values,
- [](const wchar_t* text, size_t length) -> int
- {
- return s_itemTooltipTextMeasure != nullptr
- ? s_itemTooltipTextMeasure(text, length)
- : g_pRenderText->MeasureText(text, static_cast(length)).cx;
- });
- }
+ // The description's rows, for both of its parts (before and after the options) together.
+ int descriptionRowsLeft = MaxItemDescriptionRows;
+ WriteItemDescription(*ip, Level, values, false, descriptionRowsLeft);
if (ip->Type == ITEM_ARMOR_OF_GUARDSMAN)
{
int startIndex = 0;
@@ -2878,27 +2893,15 @@ static ItemTooltipBuild BuildItemTooltipText(ITEM* ip, bool Sell, int Inventype,
}
}
- mu_swprintf(TextList[TextNum], L"\n"); TextNum++; SkipNum++;
-
- if (ip->Type == ITEM_SPLINTER_OF_ARMOR || ip->Type == ITEM_BLESS_OF_GUARDIAN)
- {
- mu_swprintf(TextList[TextNum], I18N::Game::FragmentOfHornCanBeMade);
- TextListColor[TextNum] = TEXT_COLOR_YELLOW;
- TextNum++;
- }
- else if (ip->Type == ITEM_CLAW_OF_BEAST || ip->Type == ITEM_FRAGMENT_OF_HORN)
+ if (!g_ItemDatabase.HasTag(ip->Type, Data::Items::ItemTag::NoBlankAfterOptions))
{
- mu_swprintf(TextList[TextNum], I18N::Game::BrokenHornCanBeMadeUsingTheClawOfBeastAndFragmentOfHorn);
- TextListColor[TextNum] = TEXT_COLOR_YELLOW;
- TextNum++;
- }
- else if (ip->Type == ITEM_BROKEN_HORN)
- {
- mu_swprintf(TextList[TextNum], I18N::Game::FenrirSHornCanBeMadeThroughItemCombination);
- TextListColor[TextNum] = TEXT_COLOR_YELLOW;
+ mu_swprintf(TextList[TextNum], L"\n");
TextNum++;
+ SkipNum++;
}
- else if (ip->Type == ITEM_HORN_OF_FENRIR)
+ WriteItemDescription(*ip, Level, values, true, descriptionRowsLeft);
+
+ if (ip->Type == ITEM_HORN_OF_FENRIR)
{
GetSpecialOptionText(0, TextList[TextNum], AT_SKILL_PLASMA_STORM_FENRIR, 0, 0);
TextListColor[TextNum] = TEXT_COLOR_BLUE;
@@ -2962,177 +2965,6 @@ static ItemTooltipBuild BuildItemTooltipText(ITEM* ip, bool Sell, int Inventype,
TextNum++;
}
}
- else if (ip->Type == ITEM_TRANSFORMATION_RING)
- {
- mu_swprintf(TextList[TextNum], I18N::Game::UnableToEquipWithADifferentTransformationRing);
- TextListColor[TextNum] = TEXT_COLOR_RED;
- TextBold[TextNum] = false;
- TextNum++;
- }
- else if (ip->Type == ITEM_ELITE_TRANSFER_SKELETON_RING)
- {
- wchar_t strText[100];
- mu_swprintf(strText, I18N::Game::IncreaseDefensiveSkillD, 10);
- mu_swprintf(TextList[TextNum], L"%ls%%", strText);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextNum++;
-
- WORD wlevel = CharacterAttribute->Level;
- mu_swprintf(TextList[TextNum], I18N::Game::VitalityD2225, wlevel);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextNum++;
-
- mu_swprintf(TextList[TextNum], L"\n"); TextNum++; SkipNum++;
-
- mu_swprintf(TextList[TextNum], I18N::Game::UnableToEquipWithADifferentTransformationRing);
- TextListColor[TextNum] = TEXT_COLOR_RED;
- TextBold[TextNum] = false;
- TextNum++;
- }
- else if (ip->Type == ITEM_FIRECRACKER)
- {
- TextListColor[TextNum] = TEXT_COLOR_WHITE;
- mu_swprintf(TextList[TextNum], I18N::Game::FireworksWillAppearOnceThrownInTheField); TextNum++;
- }
- else if (ip->Type == ITEM_GM_GIFT)
- {
- TextListColor[TextNum] = TEXT_COLOR_WHITE;
- mu_swprintf(TextList[TextNum], I18N::Game::GMHasGiftedThisSpecialBox); TextNum++;
- TextListColor[TextNum] = TEXT_COLOR_WHITE;
- mu_swprintf(TextList[TextNum], I18N::Game::DropItToReceiveTheGift); TextNum++;
- }
- else if (ip->Type == ITEM_JACK_OLANTERN_TRANSFORMATION_RING)
- {
- mu_swprintf(TextList[TextNum], L"%ls", I18N::Game::EnjoyHalloweenFestival);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
-
- mu_swprintf(TextList[TextNum], I18N::Game::UnableToEquipWithADifferentTransformationRing);
- TextListColor[TextNum] = TEXT_COLOR_RED;
- TextBold[TextNum] = false;
- TextNum++;
- TextNum++;
-
- mu_swprintf(TextList[TextNum], L"\n"); TextNum++; SkipNum++;
-
- mu_swprintf(TextList[TextNum], I18N::Game::UnableToEquipWithADifferentTransformationRing);
- TextListColor[TextNum] = TEXT_COLOR_RED;
- TextBold[TextNum] = false;
- TextNum++;
- }
- else if (ip->Type == ITEM_CHRISTMAS_TRANSFORMATION_RING)
- {
- mu_swprintf(TextList[TextNum], I18N::Game::AdditionalDmgD, 20);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextNum++;
- mu_swprintf(TextList[TextNum], I18N::Game::AdditionalWizardryDmgD, 20);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextNum++;
- mu_swprintf(TextList[TextNum], L"\n"); TextNum++; SkipNum++;
- mu_swprintf(TextList[TextNum], L"%ls", I18N::Game::MerryChristmas);
- TextListColor[TextNum] = TEXT_COLOR_RED;
- TextNum++;
- mu_swprintf(TextList[TextNum], L"\n"); TextNum++; SkipNum++;
- mu_swprintf(TextList[TextNum], I18N::Game::UnableToEquipWithADifferentTransformationRing);
- TextListColor[TextNum] = TEXT_COLOR_RED;
- TextBold[TextNum] = false;
- TextNum++;
- }
- else if (ip->Type == ITEM_PANDA_TRANSFORMATION_RING)
- {
- mu_swprintf(TextList[TextNum], I18N::Game::TransformIntoPanda);
- 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::DamageWizardryCurse30);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextBold[TextNum] = false;
- TextNum++;
- mu_swprintf(TextList[TextNum], L"\n"); TextNum++; SkipNum++;
- mu_swprintf(TextList[TextNum], I18N::Game::UnableToEquipWithADifferentTransformationRing);
- TextListColor[TextNum] = TEXT_COLOR_RED;
- TextBold[TextNum] = false;
- TextNum++;
- }
- else if (ip->Type == ITEM_SKELETON_TRANSFORMATION_RING)
- {
- mu_swprintf(TextList[TextNum], I18N::Game::EquipToTransformIntoASkeletonWarrior);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextBold[TextNum] = false;
- TextNum++;
- mu_swprintf(TextList[TextNum], I18N::Game::DamageWizardryCurse40);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextBold[TextNum] = false;
- TextNum++;
- mu_swprintf(TextList[TextNum], L"\n"); TextNum++; SkipNum++;
- mu_swprintf(TextList[TextNum], I18N::Game::EquippingAlongWithAPetSkeleton);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextBold[TextNum] = false;
- TextNum++;
- mu_swprintf(TextList[TextNum], I18N::Game::IncreasesEXPBy30);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextBold[TextNum] = false;
- TextNum++;
- mu_swprintf(TextList[TextNum], L"\n"); TextNum++; SkipNum++;
- mu_swprintf(TextList[TextNum], I18N::Game::UnableToEquipWithADifferentTransformationRing);
- TextListColor[TextNum] = TEXT_COLOR_RED;
- TextBold[TextNum] = false;
- TextNum++;
- }
- else if (ip->Type == ITEM_CHRISTMAS_STAR)
- {
- mu_swprintf(TextList[TextNum], L"%ls", I18N::Game::FireworksWillAppearOnceThrownInTheField);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextNum++;
- }
- else if (ip->Type == ITEM_GAME_MASTER_TRANSFORMATION_RING)
- {
- for (int i = 0; i < 7; ++i)
- {
- mu_swprintf(TextList[TextNum], I18N::Game::Lookup(976 + i), 255);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextNum++;
- }
-
- mu_swprintf(TextList[TextNum], L"\n"); TextNum++; SkipNum++;
- mu_swprintf(TextList[TextNum], I18N::Game::UnableToEquipWithADifferentTransformationRing);
- TextListColor[TextNum] = TEXT_COLOR_RED;
- TextBold[TextNum] = false;
- TextNum++;
- }
- else if (ip->Type == ITEM_INVITATION_TO_SANTA_VILLAGE)
- {
- TextNum--;
- mu_swprintf(TextList[TextNum], I18N::Game::UsableDtimes, ip->Durability);
- TextListColor[TextNum] = TEXT_COLOR_RED;
- TextNum++;
- mu_swprintf(TextList[TextNum], L"%ls", I18N::Game::RelocateToTheSantaSVillageByTheRightMouseClick);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextNum++;
- }
- else if (ip->Type == ITEM_POTION + 100)
- {
- mu_swprintf(TextList[TextNum], I18N::Game::RegisterWithTheNPCToReceiveVariousGifts, ip->Durability);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextNum++;
- }
- else if (ip->Type == ITEM_PET_SKELETON)
- {
- TextNum--; SkipNum--;
-
- mu_swprintf(TextList[TextNum], I18N::Game::EquippingAlongWithASkeletonTransformationRing);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextBold[TextNum] = false;
- TextNum++;
-
- mu_swprintf(TextList[TextNum], I18N::Game::IncreasesEXPBy30);
- TextListColor[TextNum] = TEXT_COLOR_BLUE;
- TextBold[TextNum] = false;
- TextNum++;
- }
#ifdef LJH_ADD_SYSTEM_OF_EQUIPPING_ITEM_FROM_INVENTORY
else if (g_pMyInventory->IsInvenItem(ip->Type))
{
@@ -3255,13 +3087,6 @@ static ItemTooltipBuild BuildItemTooltipText(ITEM* ip, bool Sell, int Inventype,
TextNum++;
}
#endif //LJH_ADD_SYSTEM_OF_EQUIPPING_ITEM_FROM_INVENTORY
- else if (ip->Type == ITEM_SNOWMAN_TRANSFORMATION_RING)
- {
- mu_swprintf(TextList[TextNum], I18N::Game::UnableToEquipWithADifferentTransformationRing);
- TextListColor[TextNum] = TEXT_COLOR_RED;
- TextBold[TextNum] = false;
- TextNum++;
- }
if (ip->bPeriodItem == true)
{
diff --git a/src/source/Engine/Object/ZzzInventory.h b/src/source/Engine/Object/ZzzInventory.h
index 71984adb15..71201c27dd 100644
--- a/src/source/Engine/Object/ZzzInventory.h
+++ b/src/source/Engine/Object/ZzzInventory.h
@@ -120,9 +120,12 @@ using ItemTooltipTextMeasure = int (*)(const wchar_t* text, size_t length);
// level whose conditions hold (a line may be a shared text of the tooltip file), each wrapped to the tooltip's width
// and at its line breaks, the pieces in the line's color (its first color rule that holds) and style, a blank line or
// piece as the tooltip's own blank rows. At
-// most MaxItemDescriptionRows rows.
+// most `rowsLeft` rows, which it lowers by the rows it wrote: a tooltip's description, both its parts together, has
+// MaxItemDescriptionRows. `afterOptions` picks the lines drawn after the item's options ("after": "options") or
+// the others.
void WriteItemDescriptionLines(const Data::Items::ItemDefinition& definition, int level,
- const ItemTooltipValues& values, ItemTooltipTextMeasure measure);
+ const ItemTooltipValues& values, bool afterOptions, int& rowsLeft,
+ ItemTooltipTextMeasure measure);
///////////////////////////////////////////////////////////////////////////////
// party
diff --git a/tests/data/item_tooltip_snapshot.txt b/tests/data/item_tooltip_snapshot.txt
index 755f98879b..88e8643229 100644
--- a/tests/data/item_tooltip_snapshot.txt
+++ b/tests/data/item_tooltip_snapshot.txt
@@ -273,7 +273,7 @@ bladeMaster 12/8 910bb9619a037d2c
bladeMaster 12/9 3611b12caafa251e
bladeMaster 13/0 2481521267a81819
bladeMaster 13/1 d671672a71dbdf60
-bladeMaster 13/10 d3a8d979585dc141
+bladeMaster 13/10 93e376edd4f547a5
bladeMaster 13/103 8bdecac865090b88
bladeMaster 13/104 3e5b0837916c5fc4
bladeMaster 13/105 871e5a66c6c08ed8
@@ -294,8 +294,8 @@ bladeMaster 13/119 278e381c572b5f8a
bladeMaster 13/12 6cb8679b6c07c8e7
bladeMaster 13/120 9fba2cd9463e036c
bladeMaster 13/121 cd83169a46c8f56a
-bladeMaster 13/122 3cb884997fa43168
-bladeMaster 13/123 adbea85bcd57bab2
+bladeMaster 13/122 ebeca920b405b5c4
+bladeMaster 13/123 4c6e910af677dd90
bladeMaster 13/124 59ab9c6689e5742c
bladeMaster 13/125 7dc13fafb6f326aa
bladeMaster 13/126 dc6b33cadeed4058
@@ -338,18 +338,18 @@ bladeMaster 13/29 5cefee691f4cd448
bladeMaster 13/3 ff8e48b9e57ec793
bladeMaster 13/30 a553b3af14ac20c8
bladeMaster 13/31 2935f9e18f5e9fdf
-bladeMaster 13/32 a6281861cd07677b
-bladeMaster 13/33 768ea67c66a8f899
-bladeMaster 13/34 68a23032502fcd65
-bladeMaster 13/35 ff9298e5683ea999
-bladeMaster 13/36 55e95deddb84427f
+bladeMaster 13/32 23793b07df1e4251
+bladeMaster 13/33 ec5a04ee5c137bc7
+bladeMaster 13/34 c06b45c8204eeb47
+bladeMaster 13/35 ec5b2c6a687faf8b
+bladeMaster 13/36 a3fd3b9c775f1137
bladeMaster 13/37 be51872cf68a1885
bladeMaster 13/38 79f64a5e46eefbdb
-bladeMaster 13/39 bd5905b2435772bc
+bladeMaster 13/39 57c664eb2d8a3a2c
bladeMaster 13/4 f07f78dff86720f1
-bladeMaster 13/40 94a99b08c916874a
-bladeMaster 13/41 4b2bbba1e05e8e7a
-bladeMaster 13/42 0e2e7dfba5a0a1a3
+bladeMaster 13/40 5570970e8bd7c1ce
+bladeMaster 13/41 d4ef8effeadf2b3e
+bladeMaster 13/42 cd3a54b53eee34cf
bladeMaster 13/43 7e144cda0776bff8
bladeMaster 13/44 9d27b542b3ed7fec
bladeMaster 13/45 4da12eccb65698c2
@@ -374,9 +374,9 @@ bladeMaster 13/62 1aa94f3d90ac1dd0
bladeMaster 13/63 872651fa92b11790
bladeMaster 13/64 e64754d7e63b4acc
bladeMaster 13/65 57012c03c21f73fe
-bladeMaster 13/66 6bb7a21b69a78a7a
+bladeMaster 13/66 0f5a037711a18a8a
bladeMaster 13/67 4a178001912200ca
-bladeMaster 13/68 6195318b2b123e84
+bladeMaster 13/68 e0e4d22e41179bb8
bladeMaster 13/69 2a5387ff42b75466
bladeMaster 13/7 4c597c1ff1a51b45
bladeMaster 13/70 81a361312d39a2ce
@@ -385,7 +385,7 @@ bladeMaster 13/72 8c251c4e195cdd72
bladeMaster 13/73 5c28a59449b4fb9c
bladeMaster 13/74 134b733b1de478f6
bladeMaster 13/75 5cce8fa1e2bd33b4
-bladeMaster 13/76 185be6a72ddd8580
+bladeMaster 13/76 215c5fe765dc8f24
bladeMaster 13/8 b62423a1ba1340e5
bladeMaster 13/80 bd68c17b3d9f2e1a
bladeMaster 13/81 e7c8f1f0aef70306
@@ -1184,7 +1184,7 @@ newDarkWizard 12/8 3ffb69216fe2dcd4
newDarkWizard 12/9 b008a2738a761026
newDarkWizard 13/0 1cd6e144457aab72
newDarkWizard 13/1 da27c2032c401f5b
-newDarkWizard 13/10 292ee776197dbeba
+newDarkWizard 13/10 9f7954d5c32d5a7a
newDarkWizard 13/103 8bdecac865090b88
newDarkWizard 13/104 3e5b0837916c5fc4
newDarkWizard 13/105 871e5a66c6c08ed8
@@ -1205,8 +1205,8 @@ newDarkWizard 13/119 278e381c572b5f8a
newDarkWizard 13/12 47ab5c41de382537
newDarkWizard 13/120 9fba2cd9463e036c
newDarkWizard 13/121 cd83169a46c8f56a
-newDarkWizard 13/122 3f8e8a5f73abe2ba
-newDarkWizard 13/123 65537a0d852f1670
+newDarkWizard 13/122 f7e558b2e586509a
+newDarkWizard 13/123 9e1120b78c24bff4
newDarkWizard 13/124 59ab9c6689e5742c
newDarkWizard 13/125 7dc13fafb6f326aa
newDarkWizard 13/126 dc6b33cadeed4058
@@ -1249,18 +1249,18 @@ newDarkWizard 13/29 b3b2d5ffcf05bb08
newDarkWizard 13/3 0dd4e9978d3bb4fd
newDarkWizard 13/30 05d79eff81c3f73a
newDarkWizard 13/31 2935f9e18f5e9fdf
-newDarkWizard 13/32 a6281861cd07677b
-newDarkWizard 13/33 768ea67c66a8f899
-newDarkWizard 13/34 68a23032502fcd65
-newDarkWizard 13/35 ff9298e5683ea999
-newDarkWizard 13/36 55e95deddb84427f
+newDarkWizard 13/32 23793b07df1e4251
+newDarkWizard 13/33 ec5a04ee5c137bc7
+newDarkWizard 13/34 c06b45c8204eeb47
+newDarkWizard 13/35 ec5b2c6a687faf8b
+newDarkWizard 13/36 a3fd3b9c775f1137
newDarkWizard 13/37 cbcec75686af8b61
newDarkWizard 13/38 1d1ecdaac6b8355b
-newDarkWizard 13/39 f5bfe7444372cbfc
+newDarkWizard 13/39 0d20347bf8eacda8
newDarkWizard 13/4 f07f78dff86720f1
-newDarkWizard 13/40 318c5f5e65771ed2
-newDarkWizard 13/41 4fbcdba0feb307a2
-newDarkWizard 13/42 0e2e7dfba5a0a1a3
+newDarkWizard 13/40 f8b4bc505232529a
+newDarkWizard 13/41 1a69c013329caf9a
+newDarkWizard 13/42 cd3a54b53eee34cf
newDarkWizard 13/43 7e144cda0776bff8
newDarkWizard 13/44 9d27b542b3ed7fec
newDarkWizard 13/45 4da12eccb65698c2
@@ -1285,9 +1285,9 @@ newDarkWizard 13/62 1aa94f3d90ac1dd0
newDarkWizard 13/63 872651fa92b11790
newDarkWizard 13/64 e88b2666ccf4acae
newDarkWizard 13/65 891a3492d55e0b76
-newDarkWizard 13/66 6bb7a21b69a78a7a
+newDarkWizard 13/66 0f5a037711a18a8a
newDarkWizard 13/67 34481c72c775c689
-newDarkWizard 13/68 37664042c3be783a
+newDarkWizard 13/68 2c0d1f05bafb922a
newDarkWizard 13/69 2a5387ff42b75466
newDarkWizard 13/7 4c597c1ff1a51b45
newDarkWizard 13/70 81a361312d39a2ce
@@ -1296,7 +1296,7 @@ newDarkWizard 13/72 8c251c4e195cdd72
newDarkWizard 13/73 5c28a59449b4fb9c
newDarkWizard 13/74 134b733b1de478f6
newDarkWizard 13/75 5cce8fa1e2bd33b4
-newDarkWizard 13/76 847e897893fc0248
+newDarkWizard 13/76 9bb691e74f014fb0
newDarkWizard 13/8 0bb28f0e5f028a1d
newDarkWizard 13/80 fc0dcf1601e01dde
newDarkWizard 13/81 e7c8f1f0aef70306
diff --git a/tests/data/test_item_descriptions.cpp b/tests/data/test_item_descriptions.cpp
index 61d16a3bbb..3f330d6be6 100644
--- a/tests/data/test_item_descriptions.cpp
+++ b/tests/data/test_item_descriptions.cpp
@@ -47,7 +47,8 @@ std::vector WriteRows(const ItemDefinition& definition)
{
TextNum = 0;
SkipNum = 0;
- WriteItemDescriptionLines(definition, 0, ItemTooltipValues{}, FiveUnitsPerLetter);
+ int rowsLeft = MaxItemDescriptionRows;
+ WriteItemDescriptionLines(definition, 0, ItemTooltipValues{}, false, rowsLeft, FiveUnitsPerLetter);
return {std::begin(TextList), std::begin(TextList) + TextNum};
}
@@ -114,7 +115,8 @@ TEST_CASE("A description's placeholders are filled in for the item's level befor
jewel.description = {Line("+{level}: {table:b} more")};
TextNum = 0;
SkipNum = 0;
- WriteItemDescriptionLines(jewel, 15, ItemTooltipValues{}, FiveUnitsPerLetter);
+ int rowsLeft = MaxItemDescriptionRows;
+ WriteItemDescriptionLines(jewel, 15, ItemTooltipValues{}, false, rowsLeft, FiveUnitsPerLetter);
REQUIRE(TextNum == 1);
CHECK(std::wstring(TextList[0]) == L"+15: 2000000000 more");
@@ -122,10 +124,12 @@ TEST_CASE("A description's placeholders are filled in for the item's level befor
const std::string text = "{table:b} " + std::string(30, 'a');
jewel.description = {Line(text.c_str())};
TextNum = 0;
- WriteItemDescriptionLines(jewel, 15, ItemTooltipValues{}, FiveUnitsPerLetter);
+ rowsLeft = MaxItemDescriptionRows;
+ WriteItemDescriptionLines(jewel, 15, ItemTooltipValues{}, false, rowsLeft, FiveUnitsPerLetter);
CHECK(TextNum == 2);
TextNum = 0;
- WriteItemDescriptionLines(jewel, 0, ItemTooltipValues{}, FiveUnitsPerLetter);
+ rowsLeft = MaxItemDescriptionRows;
+ WriteItemDescriptionLines(jewel, 0, ItemTooltipValues{}, false, rowsLeft, FiveUnitsPerLetter);
CHECK(TextNum == 1);
}
@@ -139,7 +143,8 @@ TEST_CASE("A description line is written only at the item levels it is shown at
TextNum = 0;
SkipNum = 0;
- WriteItemDescriptionLines(scroll, 0, ItemTooltipValues{}, FiveUnitsPerLetter);
+ int rowsLeft = MaxItemDescriptionRows;
+ WriteItemDescriptionLines(scroll, 0, ItemTooltipValues{}, false, rowsLeft, FiveUnitsPerLetter);
REQUIRE(TextNum == 1);
CHECK(std::wstring(TextList[0]) == L"Every level");
@@ -147,13 +152,15 @@ TEST_CASE("A description line is written only at the item levels it is shown at
{
INFO("+" << level);
TextNum = 0;
- WriteItemDescriptionLines(scroll, level, ItemTooltipValues{}, FiveUnitsPerLetter);
+ rowsLeft = MaxItemDescriptionRows;
+ WriteItemDescriptionLines(scroll, level, ItemTooltipValues{}, false, rowsLeft, FiveUnitsPerLetter);
REQUIRE(TextNum == 2);
CHECK(std::wstring(TextList[1]) == L"Warp after 3 seconds");
}
TextNum = 0;
- WriteItemDescriptionLines(scroll, 9, ItemTooltipValues{}, FiveUnitsPerLetter);
+ rowsLeft = MaxItemDescriptionRows;
+ WriteItemDescriptionLines(scroll, 9, ItemTooltipValues{}, false, rowsLeft, FiveUnitsPerLetter);
CHECK(TextNum == 1);
}
@@ -163,15 +170,37 @@ TEST_CASE("A description writes at most its own rows, leaving the tooltip's rows
jewel.description.assign(MaxItemDescriptionRows + 10, Line("A line"));
TextNum = 5;
- WriteItemDescriptionLines(jewel, 0, ItemTooltipValues{}, FiveUnitsPerLetter);
+ int rowsLeft = MaxItemDescriptionRows;
+ WriteItemDescriptionLines(jewel, 0, ItemTooltipValues{}, false, rowsLeft, FiveUnitsPerLetter);
CHECK(TextNum == 5 + MaxItemDescriptionRows);
+ CHECK(rowsLeft == 0);
// Near the end of the list it stops at the list's end.
TextNum = MaxTextListRows - 3;
- WriteItemDescriptionLines(jewel, 0, ItemTooltipValues{}, FiveUnitsPerLetter);
+ rowsLeft = MaxItemDescriptionRows;
+ WriteItemDescriptionLines(jewel, 0, ItemTooltipValues{}, false, rowsLeft, FiveUnitsPerLetter);
CHECK(TextNum == MaxTextListRows);
}
+TEST_CASE("A description's parts before and after the options share its rows [data][items]")
+{
+ ItemDefinition ring = MakeJewel();
+ ItemDescriptionLine after = Line("After the options");
+ after.afterOptions = true;
+ ring.description.assign(20, Line("Before the options"));
+ ring.description.insert(ring.description.end(), 20, after);
+
+ TextNum = 0;
+ int rowsLeft = MaxItemDescriptionRows;
+ WriteItemDescriptionLines(ring, 0, ItemTooltipValues{}, false, rowsLeft, FiveUnitsPerLetter);
+ CHECK(TextNum == 20);
+ CHECK(rowsLeft == MaxItemDescriptionRows - 20);
+ WriteItemDescriptionLines(ring, 0, ItemTooltipValues{}, true, rowsLeft, FiveUnitsPerLetter);
+ CHECK(TextNum == MaxItemDescriptionRows);
+ CHECK(rowsLeft == 0);
+ CHECK(std::wstring(TextList[MaxItemDescriptionRows - 1]) == L"After the options");
+}
+
TEST_CASE("Description texts are checked like item names [data][items]")
{
const char* uiLocales[] = {"en", "de"};
diff --git a/tests/data/test_item_tooltips.cpp b/tests/data/test_item_tooltips.cpp
index ce8989dbbc..fdff8fe027 100644
--- a/tests/data/test_item_tooltips.cpp
+++ b/tests/data/test_item_tooltips.cpp
@@ -5,6 +5,7 @@
#include "ClientDataScope.h"
#include "Core/Platform/ProcessLocale.h"
+#include "Core/Text/Utf8.h"
#include "Data/DataHandler/ItemData/ItemDataHandler.h"
#include "Data/DataHandler/MonsterData/MonsterDataHandler.h"
#include "Data/DataHandler/SkillData/SkillDataHandler.h"
@@ -381,13 +382,13 @@ TEST_CASE("Every built-in placeholder but {level} is a value the game computes f
{
INFO(std::string(name));
// A number, or a text ({addOptionDuration}), and only one of them.
- const bool number = GetItemTooltipValue(values, name).has_value();
- const bool text = GetItemTooltipText(values, name).has_value();
+ const bool number = Engine::Items::TooltipValues::GetItemTooltipValue(values, name).has_value();
+ const bool text = Engine::Items::TooltipValues::GetItemTooltipText(values, name).has_value();
CHECK((number || text) == (name != Data::Items::LevelPlaceholder));
CHECK_FALSE((number && text));
}
- CHECK_FALSE(GetItemTooltipValue(values, "sparkle").has_value());
- CHECK_FALSE(GetItemTooltipText(values, "sparkle").has_value());
+ CHECK_FALSE(Engine::Items::TooltipValues::GetItemTooltipValue(values, "sparkle").has_value());
+ CHECK_FALSE(Engine::Items::TooltipValues::GetItemTooltipText(values, "sparkle").has_value());
// And the other way round: a value the game can fill that the placeholder checks don't know would make every
// description using it fail to load.
for (const std::string_view name : GetItemTooltipValueNames())
@@ -411,7 +412,7 @@ TEST_CASE("The tooltip's values of an item follow the item and the hero [data][i
params.Level = 7;
ITEM kris;
FillItemFromParameters(kris, params);
- const ItemTooltipValues values = ComputeItemTooltipValues(kris);
+ const ItemTooltipValues values = Engine::Items::TooltipValues::ComputeItemTooltipValues(kris);
CHECK(values.damageMin == kris.DamageMin);
CHECK(values.damageMax == kris.DamageMax);
CHECK(values.hasDamage);
@@ -420,9 +421,9 @@ TEST_CASE("The tooltip's values of an item follow the item and the hero [data][i
CHECK(values.strength.required == kris.RequireStrength);
CHECK(values.strength.missing == kris.RequireStrength - 18);
CHECK_FALSE(values.strength.reduced);
- CHECK(GetItemTooltipValue(values, "requiredStrength") == values.strength.required);
- CHECK(GetItemTooltipValue(values, "missingStrength") == values.strength.missing);
- CHECK(GetItemTooltipValue(values, "maxDurability") == values.maxDurability);
+ CHECK(Engine::Items::TooltipValues::GetItemTooltipValue(values, "requiredStrength") == values.strength.required);
+ CHECK(Engine::Items::TooltipValues::GetItemTooltipValue(values, "missingStrength") == values.strength.missing);
+ CHECK(Engine::Items::TooltipValues::GetItemTooltipValue(values, "maxDurability") == values.maxDurability);
CHECK_FALSE(values.excellent);
// A socket count past the item's sockets reads only its sockets: the strength socket's seed in the next field
@@ -431,11 +432,11 @@ TEST_CASE("The tooltip's values of an item follow the item and the hero [data][i
corrupted.SocketCount = 255;
std::fill(std::begin(corrupted.SocketSeedID), std::end(corrupted.SocketSeedID), BYTE{0});
std::fill(std::begin(corrupted.SocketSphereLv), std::end(corrupted.SocketSphereLv), BYTE{38});
- CHECK_FALSE(ComputeItemTooltipValues(corrupted).strength.reduced);
+ CHECK_FALSE(Engine::Items::TooltipValues::ComputeItemTooltipValues(corrupted).strength.reduced);
// The Blade Master lacks nothing of it.
MakeBladeMaster(hero.Hero());
- CHECK(ComputeItemTooltipValues(kris).strength.missing == 0);
+ CHECK(Engine::Items::TooltipValues::ComputeItemTooltipValues(kris).strength.missing == 0);
// A Jewel of Harmony option that lowers the strength requirement (a weapon's option 3, at level 13, on a +13
// item) shows the lowered requirement, marked reduced (yellow); agility is untouched.
@@ -450,7 +451,7 @@ TEST_CASE("The tooltip's values of an item follow the item and the hero [data][i
g_pUIJewelHarmonyinfo->GetStrengthenCapability(&capability, &lowered, 0);
REQUIRE(capability.SI_isNB);
REQUIRE(capability.SI_NB.SI_force > 0);
- const ItemTooltipValues loweredValues = ComputeItemTooltipValues(lowered);
+ const ItemTooltipValues loweredValues = Engine::Items::TooltipValues::ComputeItemTooltipValues(lowered);
CHECK(loweredValues.strength.required == lowered.RequireStrength - capability.SI_NB.SI_force);
CHECK(loweredValues.strength.reduced);
CHECK(loweredValues.dexterity.required == lowered.RequireDexterity);
@@ -551,6 +552,98 @@ TEST_CASE("The Weapon of Archangel shows its reward weapon's skill mana from the
CHECK(std::any_of(lines.begin(), lines.end(), [&](const ItemTooltipLine& line) { return line.text == expected; }));
}
+TEST_CASE("An item's lines drawn after its options follow them [data][items][tooltip]")
+{
+ ClientDataScope client(ClientDirectory);
+ std::string errorMessage;
+ REQUIRE(g_ItemDataHandler.Load(errorMessage));
+ TooltipDataScope data;
+ TooltipHeroScope hero;
+ MakeBladeMaster(hero.Hero());
+ SetItemTooltipTextMeasure(&FixedWidthMeasure);
+ const auto indexOf = [](const std::vector& lines, std::wstring_view start)
+ {
+ const auto found = std::find_if(lines.begin(), lines.end(),
+ [&](const ItemTooltipLine& line) { return line.text.starts_with(start); });
+ return found != lines.end() ? static_cast(found - lines.begin()) : -1;
+ };
+
+ // The Elite Transfer Skeleton Ring's vitality is the hero's level.
+ const std::vector ring = Engine::Items::TooltipSnapshot::TooltipOfParameters(Engine::Items::TooltipSnapshot::FullItemParameters(13, 39));
+ CHECK(indexOf(ring, L"vitality +" + std::to_wstring(hero.Hero().Level)) >= 0);
+
+ // The Pet Skeleton leaves out the blank line after the options (noBlankAfterOptions): one blank line, its options',
+ // comes before its lines, not two.
+ const std::vector pet = Engine::Items::TooltipSnapshot::TooltipOfParameters(Engine::Items::TooltipSnapshot::FullItemParameters(13, 123));
+ const int equipping = indexOf(pet, L"Equipping along with a Skeleton");
+ REQUIRE(equipping > 1);
+ CHECK(pet[equipping - 1].text == L"\n");
+ CHECK(pet[equipping - 2].text != L"\n");
+ // The Panda Ring's blank line is there.
+ const std::vector panda = Engine::Items::TooltipSnapshot::TooltipOfParameters(Engine::Items::TooltipSnapshot::FullItemParameters(13, 76));
+ const int transform = indexOf(panda, L"Transform");
+ REQUIRE(transform > 0);
+ CHECK(panda[transform - 1].text == L"\n");
+ SetItemTooltipTextMeasure(nullptr);
+}
+
+// The option lines are the lines the full item has and the plain one doesn't (luck, skill, the option, the excellent
+// options); an item's restriction drawn after its options comes after the last of them.
+TEST_CASE("A transformation ring's restriction comes after its option lines [data][items][tooltip]")
+{
+ ClientDataScope client(ClientDirectory);
+ std::string errorMessage;
+ REQUIRE(g_ItemDataHandler.Load(errorMessage));
+ TooltipDataScope data;
+ TooltipHeroScope hero;
+ MakeBladeMaster(hero.Hero());
+ SetItemTooltipTextMeasure(&FixedWidthMeasure);
+
+ // Its start: the line wraps at the tooltip's width.
+ const std::wstring restriction = L"Unable to Equip with a Different";
+ for (const int number : {10, 39, 41, 68, 76, 122})
+ {
+ INFO("13/" << number);
+ const std::vector plain = Engine::Items::TooltipSnapshot::TooltipOfParameters(Engine::Items::TooltipSnapshot::FullItemParameters(13, number));
+ ItemCreationParams full = Engine::Items::TooltipSnapshot::FullItemParameters(13, number);
+ full.WithLuck = true;
+ full.WithSkill = true;
+ full.WithOption = true;
+ full.OptionLevel = 4;
+ full.HasExcellentOption = true;
+ full.ExcellentFlags = 63;
+ const std::vector lines = Engine::Items::TooltipSnapshot::TooltipOfParameters(full);
+
+ const auto at = std::find_if(lines.begin(), lines.end(),
+ [&](const ItemTooltipLine& line) { return line.text.starts_with(restriction); });
+ std::string shown;
+ for (const ItemTooltipLine& line : lines)
+ {
+ shown += Core::Text::ToUtf8(line.text.c_str()) + " | ";
+ }
+ INFO(shown);
+ if (at == lines.end())
+ {
+ CHECK(at != lines.end());
+ continue;
+ }
+ int lastOption = -1;
+ for (int index = 0; index < static_cast(lines.size()); ++index)
+ {
+ const bool inPlain = std::any_of(plain.begin(), plain.end(), [&](const ItemTooltipLine& line)
+ { return line.text == lines[index].text; });
+ if (!inPlain && lines[index].text != L"\n")
+ {
+ lastOption = index;
+ }
+ }
+ CHECK(lastOption >= 0);
+ CHECK(at - lines.begin() > lastOption);
+ }
+
+ SetItemTooltipTextMeasure(nullptr);
+}
+
TEST_CASE("A class condition holds for a hero of that class [data][items][tooltip]")
{
TooltipHeroScope hero;