forked from metin-server/m2dev-client
13
README.md
13
README.md
@@ -7,12 +7,13 @@ This repository contains all client-side data, including locale files, configura
|
|||||||
## 📋 Changelog
|
## 📋 Changelog
|
||||||
|
|
||||||
### 🐛 Bug Fixes
|
### 🐛 Bug Fixes
|
||||||
- **Python 3 division compatibility**: Migrated a lot of divisions in a lot of files to `int` divisions instead of `floats` for Python 3 compatibility. This will be fixing a lot of bugs caused by the upgrade such as target board button centering, Dragon stones Grade in tooltip and more.
|
- **Refining**: The window now sorts empty slots (from broken stones) to the end of the list, displaying an exact preview of how the item will look like after successful attaching.
|
||||||
- **Completed the map names dictionary**: This improves functionality for all maps within the client, and fixes **the "invisible affects in dungeon" bug!
|
- **Affects**: Added affect shower support for Mall Attack Speed.
|
||||||
- **Dragon stone countdown in tooltip**: The countdown auto-starts and responds perfectly to all situations without waiting for the "first hover" from the player.
|
- **Dragonsoul Alchemy**:
|
||||||
- **Quest refreshing**: Prevented the quest letters from appearing on top of the dialog curtain (if currently chatting with an NPC or item).
|
- Fixed the deck affect countdown not auto-updating when time is increased in one of the equipped items.
|
||||||
- **Minor translation improvements**
|
- Fixed the affect countdown requiring a check for remaining time in 500ms-intervals.
|
||||||
- **Several missing item icons added**
|
- The window now opens without the player being qualified (consistency with the official).
|
||||||
|
- **Spirit stone attachment**: The window now displays the item's existing attributes.
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
|
|||||||
Binary file not shown.
@@ -802,6 +802,7 @@ TOOLTIP_MAGIC_ATT_GRADE قيمة الهجوم السحري +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE دفاع سحري +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE دفاع سحري +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS قيمة الهجوم +%d%% SA
|
TOOLTIP_MALL_ATTBONUS قيمة الهجوم +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC قيمة الهجوم SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC قيمة الهجوم SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED ارتفاع سرعة الهجوم +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT سيتم تلقائياً تسجيل اليانغ. SNA
|
TOOLTIP_MALL_AUTOLOOT سيتم تلقائياً تسجيل اليانغ. SNA
|
||||||
TOOLTIP_MALL_DEFBONUS الدفاع +%d%% SA
|
TOOLTIP_MALL_DEFBONUS الدفاع +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC دفاع SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC دفاع SNA
|
||||||
|
|||||||
@@ -710,6 +710,7 @@ TOOLTIP_MAGIC_ATT_GRADE Ataque Mágico: +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Proteção Mágica: +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Proteção Mágica: +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Ataque: +%d%% SA
|
TOOLTIP_MALL_ATTBONUS Ataque: +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Ataque: +20% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Ataque: +20% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Bônus na Velocidade de Ataque +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Adquire Gold automaticamente SNA
|
TOOLTIP_MALL_AUTOLOOT Adquire Gold automaticamente SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Defesa:+%d%% SA
|
TOOLTIP_MALL_DEFBONUS Defesa:+%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Defesa: +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Defesa: +12~15% SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -710,6 +710,7 @@ TOOLTIP_MAGIC_ATT_GRADE Magická hodnota útoku +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Magická obrana +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Magická obrana +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Hodnota útoku +%d%% SA
|
TOOLTIP_MALL_ATTBONUS Hodnota útoku +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Hodnota útoku +12~15 % SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Hodnota útoku +12~15 % SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Rychlost útoku zvýšena +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Yangy se automaticky sesbírají. SNA
|
TOOLTIP_MALL_AUTOLOOT Yangy se automaticky sesbírají. SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Obrana +%d%% SA
|
TOOLTIP_MALL_DEFBONUS Obrana +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Obrana +12~15 % SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Obrana +12~15 % SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -708,6 +708,7 @@ TOOLTIP_MAGIC_ATT_GRADE Magischer Angriffswert +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Magische Verteidigung +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Magische Verteidigung +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Angriffswert +%d%% SA
|
TOOLTIP_MALL_ATTBONUS Angriffswert +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Angriffswert +12~15% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Angriffswert +12~15% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Angriffsgeschwindigkeit erhöht +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Autom. wird das Yang aufgenommen. SNA
|
TOOLTIP_MALL_AUTOLOOT Autom. wird das Yang aufgenommen. SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Verteidigung +%d%% SA
|
TOOLTIP_MALL_DEFBONUS Verteidigung +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Verteidigung +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Verteidigung +12~15% SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -710,6 +710,7 @@ TOOLTIP_MAGIC_ATT_GRADE Magisk angrebsværdi +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Magisk forsvar +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Magisk forsvar +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Angrebsværdi +%d%% SA
|
TOOLTIP_MALL_ATTBONUS Angrebsværdi +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Angrebsværdi +12~15% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Angrebsværdi +12~15% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Angrebshastighed øges +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Automatisk samles alt Yang. SNA
|
TOOLTIP_MALL_AUTOLOOT Automatisk samles alt Yang. SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Forsvar +%d%% SA
|
TOOLTIP_MALL_DEFBONUS Forsvar +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Forsvar +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Forsvar +12~15% SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -708,6 +708,7 @@ TOOLTIP_MAGIC_ATT_GRADE Magical Attack Value +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Magical Defence +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Magical Defence +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Attack Value +%d%% SA
|
TOOLTIP_MALL_ATTBONUS Attack Value +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Attack Value +12~15% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Attack Value +12~15% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Attack speed raised +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT A hand that picks up dropped Yang automatically SNA
|
TOOLTIP_MALL_AUTOLOOT A hand that picks up dropped Yang automatically SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Defence +%d%% SA
|
TOOLTIP_MALL_DEFBONUS Defence +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Defence +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Defence +12~15% SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -710,6 +710,7 @@ TOOLTIP_MAGIC_ATT_GRADE Valor de Ataque Mágico +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Defensa Mágica +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Defensa Mágica +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Valor de Ataque +%d%% SA
|
TOOLTIP_MALL_ATTBONUS Valor de Ataque +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Valor de Ataque +12~15% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Valor de Ataque +12~15% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Velocidad de ataque aumentada +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Una mano que recoge automáticamente el Yang tirado SNA
|
TOOLTIP_MALL_AUTOLOOT Una mano que recoge automáticamente el Yang tirado SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Defensa +%d%% SA
|
TOOLTIP_MALL_DEFBONUS Defensa +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Defensa +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Defensa +12~15% SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -708,6 +708,7 @@ TOOLTIP_MAGIC_ATT_GRADE Valeur d'attaque magique +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Défense magique +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Défense magique +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Valeur d'attaque +%d%% SA
|
TOOLTIP_MALL_ATTBONUS Valeur d'attaque +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Valeur d'attaque +12~15% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Valeur d'attaque +12~15% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Vitesse d'attaque augmentée +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Une main qui ramasse les Yangs automatiquement. SNA
|
TOOLTIP_MALL_AUTOLOOT Une main qui ramasse les Yangs automatiquement. SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Défense +%d%% SA
|
TOOLTIP_MALL_DEFBONUS Défense +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Défense +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Défense +12~15% SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -710,6 +710,7 @@ TOOLTIP_MAGIC_ATT_GRADE Αξία Μαγικής άμυνας +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Μαγική άμυνα +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Μαγική άμυνα +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Αξία Επίθεσης +%d%% SA
|
TOOLTIP_MALL_ATTBONUS Αξία Επίθεσης +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Αξία Επίθεσης +12~15% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Αξία Επίθεσης +12~15% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Αυξημένη ταχύτητα επίθεσης +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Χέρι που μαζεύει αυτόματα τα πεσμένα Yang SNA
|
TOOLTIP_MALL_AUTOLOOT Χέρι που μαζεύει αυτόματα τα πεσμένα Yang SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Άμυνα +%d%% SA
|
TOOLTIP_MALL_DEFBONUS Άμυνα +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Άμυνα +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Άμυνα +12~15% SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -708,6 +708,7 @@ TOOLTIP_MAGIC_ATT_GRADE Mágikus támadó érték +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Mágikus védelem +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Mágikus védelem +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Támadó érték +%d%% SA
|
TOOLTIP_MALL_ATTBONUS Támadó érték +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Támadó érték +12~15% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Támadó érték +12~15% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Megnövelt támadósebesség +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Automatikusan felszedi a Yangokat. SNA
|
TOOLTIP_MALL_AUTOLOOT Automatikusan felszedi a Yangokat. SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Védekezés +%d%% SA
|
TOOLTIP_MALL_DEFBONUS Védekezés +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Védekezés +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Védekezés +12~15% SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -710,6 +710,7 @@ TOOLTIP_MAGIC_ATT_GRADE Valore d'attacco magico +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Difesa magica +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Difesa magica +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Valore d'attacco +%d%% SA
|
TOOLTIP_MALL_ATTBONUS Valore d'attacco +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Valore d'attacco +12~15% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Valore d'attacco +12~15% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Velocità di attacco aumentata +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Drop di Yang vengono raccolti automaticamete. SNA
|
TOOLTIP_MALL_AUTOLOOT Drop di Yang vengono raccolti automaticamete. SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Difesa +%d%% SA
|
TOOLTIP_MALL_DEFBONUS Difesa +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Difesa +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Difesa +12~15% SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -710,6 +710,7 @@ TOOLTIP_MAGIC_ATT_GRADE Magische Aanvals Waarde +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Magische Verdediging +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Magische Verdediging +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Aanvals Waarde +%d%% SA
|
TOOLTIP_MALL_ATTBONUS Aanvals Waarde +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Aanvals Waarde +12~15% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Aanvals Waarde +12~15% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Aanvals snelheid verhoogd +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Een hand die automatisch gevallen Yang opraapt. SNA
|
TOOLTIP_MALL_AUTOLOOT Een hand die automatisch gevallen Yang opraapt. SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Verdediging +%d%% SA
|
TOOLTIP_MALL_DEFBONUS Verdediging +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Verdediging +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Verdediging +12~15% SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -710,6 +710,7 @@ TOOLTIP_MAGIC_ATT_GRADE Wartość Magicznego Ataku: +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Magiczna Obrona: +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Magiczna Obrona: +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Wartość Ataku: +%d%% SA
|
TOOLTIP_MALL_ATTBONUS Wartość Ataku: +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Wartość Ataku: +12~15% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Wartość Ataku: +12~15% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Zwiększona Szybkość Ataku +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Ręka, która automatycznie podnosi upuszczone Yang. SNA
|
TOOLTIP_MALL_AUTOLOOT Ręka, która automatycznie podnosi upuszczone Yang. SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Obrona: +%d%% SA
|
TOOLTIP_MALL_DEFBONUS Obrona: +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Obrona +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Obrona +12~15% SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -722,6 +722,7 @@ TOOLTIP_MAGIC_ATT_GRADE Valor de Ataque Mágico: +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Defesa vs Magias: +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Defesa vs Magias: +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Valor de Ataque: +%d SA
|
TOOLTIP_MALL_ATTBONUS Valor de Ataque: +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Valor de Ataque: +12~15% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Valor de Ataque: +12~15% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Aumento da Velocidade de Ataque +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Mão que apanha automaticamente o Yang caído. SNA
|
TOOLTIP_MALL_AUTOLOOT Mão que apanha automaticamente o Yang caído. SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Defesa: +%d%% SA
|
TOOLTIP_MALL_DEFBONUS Defesa: +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Defesa: +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Defesa: +12~15% SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -710,6 +710,7 @@ TOOLTIP_MAGIC_ATT_GRADE Valoarea atacului magic +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Apărare magică +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Apărare magică +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Valoarea atacului +%d%% SA
|
TOOLTIP_MALL_ATTBONUS Valoarea atacului +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Valoarea atacului +12~15% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Valoarea atacului +12~15% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Viteza de atac a crescut +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Yang este însușit automat. SNA
|
TOOLTIP_MALL_AUTOLOOT Yang este însușit automat. SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Apărare +%d%% SA
|
TOOLTIP_MALL_DEFBONUS Apărare +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Apărare +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Apărare +12~15% SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -710,6 +710,7 @@ TOOLTIP_MAGIC_ATT_GRADE Показатель магической атаки +%d
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Магическая защита +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Магическая защита +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Показатель атаки +%d%% SA
|
TOOLTIP_MALL_ATTBONUS Показатель атаки +%d%% SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Показатель атаки +12~15% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Показатель атаки +12~15% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Скорость атаки повышена +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Янг принимается автом. SNA
|
TOOLTIP_MALL_AUTOLOOT Янг принимается автом. SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Защита +%d%% SA
|
TOOLTIP_MALL_DEFBONUS Защита +%d%% SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Защита +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Защита +12~15% SNA
|
||||||
|
|||||||
Binary file not shown.
@@ -710,6 +710,7 @@ TOOLTIP_MAGIC_ATT_GRADE Büyülü Saldırı Değeri +%d SA
|
|||||||
TOOLTIP_MAGIC_DEF_GRADE Büyü Savunması +%d SA
|
TOOLTIP_MAGIC_DEF_GRADE Büyü Savunması +%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS Saldırı Değeri +%%%d SA
|
TOOLTIP_MALL_ATTBONUS Saldırı Değeri +%%%d SA
|
||||||
TOOLTIP_MALL_ATTBONUS_STATIC Saldırı Değeri +12~15% SNA
|
TOOLTIP_MALL_ATTBONUS_STATIC Saldırı Değeri +12~15% SNA
|
||||||
|
TOOLTIP_MALL_ATT_SPEED Saldırı hızı arttırıldı +%d%% SA
|
||||||
TOOLTIP_MALL_AUTOLOOT Yerdeki mevcut Yang`ın otomatik olarak toplanmasını sağlayan el. SNA
|
TOOLTIP_MALL_AUTOLOOT Yerdeki mevcut Yang`ın otomatik olarak toplanmasını sağlayan el. SNA
|
||||||
TOOLTIP_MALL_DEFBONUS Savunma +%%%d SA
|
TOOLTIP_MALL_DEFBONUS Savunma +%%%d SA
|
||||||
TOOLTIP_MALL_DEFBONUS_STATIC Savunma +12~15% SNA
|
TOOLTIP_MALL_DEFBONUS_STATIC Savunma +12~15% SNA
|
||||||
|
|||||||
@@ -758,7 +758,6 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type:
|
if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type:
|
||||||
self.interface.DragonSoulActivate(type - chr.NEW_AFFECT_DRAGON_SOUL_DECK1)
|
self.interface.DragonSoulActivate(type - chr.NEW_AFFECT_DRAGON_SOUL_DECK1)
|
||||||
|
|
||||||
elif chr.NEW_AFFECT_DRAGON_SOUL_QUALIFIED == type:
|
elif chr.NEW_AFFECT_DRAGON_SOUL_QUALIFIED == type:
|
||||||
self.BINARY_DragonSoulGiveQuilification()
|
self.BINARY_DragonSoulGiveQuilification()
|
||||||
|
|
||||||
|
|||||||
@@ -996,20 +996,21 @@ class Interface(object):
|
|||||||
self.DRAGON_SOUL_IS_QUALIFIED = True
|
self.DRAGON_SOUL_IS_QUALIFIED = True
|
||||||
self.wndExpandedTaskBar.SetToolTipText(uiTaskBar.ExpandedTaskBar.BUTTON_DRAGON_SOUL, uiScriptLocale.TASKBAR_DRAGON_SOUL)
|
self.wndExpandedTaskBar.SetToolTipText(uiTaskBar.ExpandedTaskBar.BUTTON_DRAGON_SOUL, uiScriptLocale.TASKBAR_DRAGON_SOUL)
|
||||||
|
|
||||||
|
# MR-12: Enable Dragon Soul window opening without completing the quest
|
||||||
def ToggleDragonSoulWindow(self):
|
def ToggleDragonSoulWindow(self):
|
||||||
if False == player.IsObserverMode():
|
if False == player.IsObserverMode():
|
||||||
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
||||||
if False == self.wndDragonSoul.IsShow():
|
if False == self.wndDragonSoul.IsShow():
|
||||||
if self.DRAGON_SOUL_IS_QUALIFIED:
|
# if self.DRAGON_SOUL_IS_QUALIFIED:
|
||||||
self.wndDragonSoul.Show()
|
self.wndDragonSoul.Show()
|
||||||
else:
|
# else:
|
||||||
try:
|
# try:
|
||||||
self.wndPopupDialog.SetText(localeInfo.DRAGON_SOUL_UNQUALIFIED)
|
# self.wndPopupDialog.SetText(localeInfo.DRAGON_SOUL_UNQUALIFIED)
|
||||||
self.wndPopupDialog.Open()
|
# self.wndPopupDialog.Open()
|
||||||
except:
|
# except:
|
||||||
self.wndPopupDialog = uiCommon.PopupDialog()
|
# self.wndPopupDialog = uiCommon.PopupDialog()
|
||||||
self.wndPopupDialog.SetText(localeInfo.DRAGON_SOUL_UNQUALIFIED)
|
# self.wndPopupDialog.SetText(localeInfo.DRAGON_SOUL_UNQUALIFIED)
|
||||||
self.wndPopupDialog.Open()
|
# self.wndPopupDialog.Open()
|
||||||
else:
|
else:
|
||||||
self.wndDragonSoul.Close()
|
self.wndDragonSoul.Close()
|
||||||
|
|
||||||
@@ -1017,10 +1018,11 @@ class Interface(object):
|
|||||||
if False == player.IsObserverMode():
|
if False == player.IsObserverMode():
|
||||||
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
||||||
if False == self.wndDragonSoul.IsShow():
|
if False == self.wndDragonSoul.IsShow():
|
||||||
if self.DRAGON_SOUL_IS_QUALIFIED:
|
# if self.DRAGON_SOUL_IS_QUALIFIED:
|
||||||
self.wndDragonSoul.Show()
|
self.wndDragonSoul.Show()
|
||||||
else:
|
else:
|
||||||
self.wndDragonSoul.Close()
|
self.wndDragonSoul.Close()
|
||||||
|
# MR-12: -- END OF -- Enable Dragon Soul window opening without completing the quest
|
||||||
|
|
||||||
def FailDragonSoulRefine(self, reason, inven_type, inven_pos):
|
def FailDragonSoulRefine(self, reason, inven_type, inven_pos):
|
||||||
if False == player.IsObserverMode():
|
if False == player.IsObserverMode():
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import skill
|
|||||||
import player
|
import player
|
||||||
import uiToolTip
|
import uiToolTip
|
||||||
import math
|
import math
|
||||||
|
import dbg
|
||||||
|
|
||||||
# WEDDING
|
# WEDDING
|
||||||
class LovePointImage(ui.ExpandedImageBox):
|
class LovePointImage(ui.ExpandedImageBox):
|
||||||
@@ -378,9 +379,13 @@ class AffectImage(ui.ExpandedImageBox):
|
|||||||
|
|
||||||
# MR-10: Add toolTip support and real-time countdown for affects
|
# MR-10: Add toolTip support and real-time countdown for affects
|
||||||
def UpdateDescription(self):
|
def UpdateDescription(self):
|
||||||
|
# MR-12: Fix realtime countdown auto-start
|
||||||
if self.__IsDragonSoulAffect():
|
if self.__IsDragonSoulAffect():
|
||||||
|
minRemain = self.__GetDragonSoulMinRemainSec()
|
||||||
|
|
||||||
if self.isHover:
|
if self.isHover:
|
||||||
self.__UpdateDragonSoulDescription()
|
self.__UpdateDragonSoulDescription(minRemain)
|
||||||
|
# MR-12: -- END OF -- Fix realtime countdown auto-start
|
||||||
|
|
||||||
if self.toolTip:
|
if self.toolTip:
|
||||||
self.toolTip.ShowToolTip()
|
self.toolTip.ShowToolTip()
|
||||||
@@ -481,11 +486,13 @@ class AffectImage(ui.ExpandedImageBox):
|
|||||||
|
|
||||||
return minRemain
|
return minRemain
|
||||||
|
|
||||||
def __UpdateDragonSoulDescription(self):
|
# MR-12: Fix realtime countdown auto-start
|
||||||
|
def __UpdateDragonSoulDescription(self, minRemain = None):
|
||||||
if not self.description:
|
if not self.description:
|
||||||
return
|
return
|
||||||
|
|
||||||
minRemain = self.__GetDragonSoulMinRemainSec()
|
if minRemain is None:
|
||||||
|
minRemain = self.__GetDragonSoulMinRemainSec()
|
||||||
|
|
||||||
self.__EnsureToolTip()
|
self.__EnsureToolTip()
|
||||||
self.toolTip.ClearToolTip()
|
self.toolTip.ClearToolTip()
|
||||||
@@ -495,7 +502,7 @@ class AffectImage(ui.ExpandedImageBox):
|
|||||||
self.toolTip.AppendTextLine("(%s : %s)" % (localeInfo.LEFT_TIME, localeInfo.RTSecondToDHMS(minRemain)))
|
self.toolTip.AppendTextLine("(%s : %s)" % (localeInfo.LEFT_TIME, localeInfo.RTSecondToDHMS(minRemain)))
|
||||||
|
|
||||||
self.toolTip.ResizeToolTip()
|
self.toolTip.ResizeToolTip()
|
||||||
# MR-10: -- END OF -- Add toolTip support and real-time countdown for affects
|
# MR-12: -- END OF -- Fix realtime countdown auto-start
|
||||||
|
|
||||||
def SetSkillAffectFlag(self, flag):
|
def SetSkillAffectFlag(self, flag):
|
||||||
self.isSkillAffect = flag
|
self.isSkillAffect = flag
|
||||||
@@ -548,67 +555,71 @@ class AffectShower(ui.Window):
|
|||||||
INFINITE_AFFECT_DURATION = 0x1FFFFFFF
|
INFINITE_AFFECT_DURATION = 0x1FFFFFFF
|
||||||
|
|
||||||
AFFECT_DATA_DICT = {
|
AFFECT_DATA_DICT = {
|
||||||
chr.AFFECT_POISON : (localeInfo.SKILL_TOXICDIE, "d:/ymir work/ui/skill/common/affect/poison.sub"),
|
chr.AFFECT_POISON : (localeInfo.SKILL_TOXICDIE, "d:/ymir work/ui/skill/common/affect/poison.sub"),
|
||||||
chr.AFFECT_SLOW : (localeInfo.SKILL_SLOW, "d:/ymir work/ui/skill/common/affect/slow.sub"),
|
chr.AFFECT_SLOW : (localeInfo.SKILL_SLOW, "d:/ymir work/ui/skill/common/affect/slow.sub"),
|
||||||
chr.AFFECT_STUN : (localeInfo.SKILL_STUN, "d:/ymir work/ui/skill/common/affect/stun.sub"),
|
chr.AFFECT_STUN : (localeInfo.SKILL_STUN, "d:/ymir work/ui/skill/common/affect/stun.sub"),
|
||||||
|
|
||||||
chr.AFFECT_ATT_SPEED_POTION : (localeInfo.SKILL_INC_ATKSPD, "d:/ymir work/ui/skill/common/affect/Increase_Attack_Speed.sub"),
|
chr.AFFECT_ATT_SPEED_POTION : (localeInfo.SKILL_INC_ATKSPD, "d:/ymir work/ui/skill/common/affect/Increase_Attack_Speed.sub"),
|
||||||
chr.AFFECT_MOV_SPEED_POTION : (localeInfo.SKILL_INC_MOVSPD, "d:/ymir work/ui/skill/common/affect/Increase_Move_Speed.sub"),
|
chr.AFFECT_MOV_SPEED_POTION : (localeInfo.SKILL_INC_MOVSPD, "d:/ymir work/ui/skill/common/affect/Increase_Move_Speed.sub"),
|
||||||
chr.AFFECT_FISH_MIND : (localeInfo.SKILL_FISHMIND, "d:/ymir work/ui/skill/common/affect/fishmind.sub"),
|
chr.AFFECT_FISH_MIND : (localeInfo.SKILL_FISHMIND, "d:/ymir work/ui/skill/common/affect/fishmind.sub"),
|
||||||
|
|
||||||
chr.AFFECT_JEONGWI : (localeInfo.SKILL_JEONGWI, "d:/ymir work/ui/skill/warrior/jeongwi_03.sub",),
|
chr.AFFECT_JEONGWI : (localeInfo.SKILL_JEONGWI, "d:/ymir work/ui/skill/warrior/jeongwi_03.sub",),
|
||||||
chr.AFFECT_GEOMGYEONG : (localeInfo.SKILL_GEOMGYEONG, "d:/ymir work/ui/skill/warrior/geomgyeong_03.sub",),
|
chr.AFFECT_GEOMGYEONG : (localeInfo.SKILL_GEOMGYEONG, "d:/ymir work/ui/skill/warrior/geomgyeong_03.sub",),
|
||||||
chr.AFFECT_CHEONGEUN : (localeInfo.SKILL_CHEONGEUN, "d:/ymir work/ui/skill/warrior/cheongeun_03.sub",),
|
chr.AFFECT_CHEONGEUN : (localeInfo.SKILL_CHEONGEUN, "d:/ymir work/ui/skill/warrior/cheongeun_03.sub",),
|
||||||
chr.AFFECT_GYEONGGONG : (localeInfo.SKILL_GYEONGGONG, "d:/ymir work/ui/skill/assassin/gyeonggong_03.sub",),
|
chr.AFFECT_GYEONGGONG : (localeInfo.SKILL_GYEONGGONG, "d:/ymir work/ui/skill/assassin/gyeonggong_03.sub",),
|
||||||
chr.AFFECT_EUNHYEONG : (localeInfo.SKILL_EUNHYEONG, "d:/ymir work/ui/skill/assassin/eunhyeong_03.sub",),
|
chr.AFFECT_EUNHYEONG : (localeInfo.SKILL_EUNHYEONG, "d:/ymir work/ui/skill/assassin/eunhyeong_03.sub",),
|
||||||
chr.AFFECT_GWIGEOM : (localeInfo.SKILL_GWIGEOM, "d:/ymir work/ui/skill/sura/gwigeom_03.sub",),
|
chr.AFFECT_GWIGEOM : (localeInfo.SKILL_GWIGEOM, "d:/ymir work/ui/skill/sura/gwigeom_03.sub",),
|
||||||
chr.AFFECT_GONGPO : (localeInfo.SKILL_GONGPO, "d:/ymir work/ui/skill/sura/gongpo_03.sub",),
|
chr.AFFECT_GONGPO : (localeInfo.SKILL_GONGPO, "d:/ymir work/ui/skill/sura/gongpo_03.sub",),
|
||||||
chr.AFFECT_JUMAGAP : (localeInfo.SKILL_JUMAGAP, "d:/ymir work/ui/skill/sura/jumagap_03.sub"),
|
chr.AFFECT_JUMAGAP : (localeInfo.SKILL_JUMAGAP, "d:/ymir work/ui/skill/sura/jumagap_03.sub"),
|
||||||
chr.AFFECT_HOSIN : (localeInfo.SKILL_HOSIN, "d:/ymir work/ui/skill/shaman/hosin_03.sub",),
|
chr.AFFECT_HOSIN : (localeInfo.SKILL_HOSIN, "d:/ymir work/ui/skill/shaman/hosin_03.sub",),
|
||||||
chr.AFFECT_BOHO : (localeInfo.SKILL_BOHO, "d:/ymir work/ui/skill/shaman/boho_03.sub",),
|
chr.AFFECT_BOHO : (localeInfo.SKILL_BOHO, "d:/ymir work/ui/skill/shaman/boho_03.sub",),
|
||||||
chr.AFFECT_KWAESOK : (localeInfo.SKILL_KWAESOK, "d:/ymir work/ui/skill/shaman/kwaesok_03.sub",),
|
chr.AFFECT_KWAESOK : (localeInfo.SKILL_KWAESOK, "d:/ymir work/ui/skill/shaman/kwaesok_03.sub",),
|
||||||
chr.AFFECT_HEUKSIN : (localeInfo.SKILL_HEUKSIN, "d:/ymir work/ui/skill/sura/heuksin_03.sub",),
|
chr.AFFECT_HEUKSIN : (localeInfo.SKILL_HEUKSIN, "d:/ymir work/ui/skill/sura/heuksin_03.sub",),
|
||||||
chr.AFFECT_MUYEONG : (localeInfo.SKILL_MUYEONG, "d:/ymir work/ui/skill/sura/muyeong_03.sub",),
|
chr.AFFECT_MUYEONG : (localeInfo.SKILL_MUYEONG, "d:/ymir work/ui/skill/sura/muyeong_03.sub",),
|
||||||
chr.AFFECT_GICHEON : (localeInfo.SKILL_GICHEON, "d:/ymir work/ui/skill/shaman/gicheon_03.sub",),
|
chr.AFFECT_GICHEON : (localeInfo.SKILL_GICHEON, "d:/ymir work/ui/skill/shaman/gicheon_03.sub",),
|
||||||
chr.AFFECT_JEUNGRYEOK : (localeInfo.SKILL_JEUNGRYEOK, "d:/ymir work/ui/skill/shaman/jeungryeok_03.sub",),
|
chr.AFFECT_JEUNGRYEOK : (localeInfo.SKILL_JEUNGRYEOK, "d:/ymir work/ui/skill/shaman/jeungryeok_03.sub",),
|
||||||
chr.AFFECT_PABEOP : (localeInfo.SKILL_PABEOP, "d:/ymir work/ui/skill/sura/pabeop_03.sub",),
|
chr.AFFECT_PABEOP : (localeInfo.SKILL_PABEOP, "d:/ymir work/ui/skill/sura/pabeop_03.sub",),
|
||||||
chr.AFFECT_FALLEN_CHEONGEUN : (localeInfo.SKILL_CHEONGEUN, "d:/ymir work/ui/skill/warrior/cheongeun_03.sub",),
|
chr.AFFECT_FALLEN_CHEONGEUN : (localeInfo.SKILL_CHEONGEUN, "d:/ymir work/ui/skill/warrior/cheongeun_03.sub",),
|
||||||
28 : (localeInfo.SKILL_FIRE, "d:/ymir work/ui/skill/sura/hwayeom_03.sub",),
|
28 : (localeInfo.SKILL_FIRE, "d:/ymir work/ui/skill/sura/hwayeom_03.sub",),
|
||||||
chr.AFFECT_CHINA_FIREWORK : (localeInfo.SKILL_POWERFUL_STRIKE, "d:/ymir work/ui/skill/common/affect/powerfulstrike.sub",),
|
chr.AFFECT_CHINA_FIREWORK : (localeInfo.SKILL_POWERFUL_STRIKE, "d:/ymir work/ui/skill/common/affect/powerfulstrike.sub",),
|
||||||
|
|
||||||
#64 - END
|
#64 - END
|
||||||
chr.NEW_AFFECT_EXP_BONUS : (localeInfo.TOOLTIP_MALL_EXPBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/exp_bonus.sub",),
|
chr.NEW_AFFECT_EXP_BONUS : (localeInfo.TOOLTIP_MALL_EXPBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/exp_bonus.sub",),
|
||||||
|
|
||||||
chr.NEW_AFFECT_ITEM_BONUS : (localeInfo.TOOLTIP_MALL_ITEMBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/item_bonus.sub",),
|
chr.NEW_AFFECT_ITEM_BONUS : (localeInfo.TOOLTIP_MALL_ITEMBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/item_bonus.sub",),
|
||||||
chr.NEW_AFFECT_SAFEBOX : (localeInfo.TOOLTIP_MALL_SAFEBOX, "d:/ymir work/ui/skill/common/affect/safebox.sub",),
|
chr.NEW_AFFECT_SAFEBOX : (localeInfo.TOOLTIP_MALL_SAFEBOX, "d:/ymir work/ui/skill/common/affect/safebox.sub",),
|
||||||
chr.NEW_AFFECT_AUTOLOOT : (localeInfo.TOOLTIP_MALL_AUTOLOOT, "d:/ymir work/ui/skill/common/affect/autoloot.sub",),
|
chr.NEW_AFFECT_AUTOLOOT : (localeInfo.TOOLTIP_MALL_AUTOLOOT, "d:/ymir work/ui/skill/common/affect/autoloot.sub",),
|
||||||
chr.NEW_AFFECT_FISH_MIND : (localeInfo.TOOLTIP_MALL_FISH_MIND, "d:/ymir work/ui/skill/common/affect/fishmind.sub",),
|
chr.NEW_AFFECT_FISH_MIND : (localeInfo.TOOLTIP_MALL_FISH_MIND, "d:/ymir work/ui/skill/common/affect/fishmind.sub",),
|
||||||
chr.NEW_AFFECT_MARRIAGE_FAST : (localeInfo.TOOLTIP_MALL_MARRIAGE_FAST, "d:/ymir work/ui/skill/common/affect/marriage_fast.sub",),
|
chr.NEW_AFFECT_MARRIAGE_FAST : (localeInfo.TOOLTIP_MALL_MARRIAGE_FAST, "d:/ymir work/ui/skill/common/affect/marriage_fast.sub",),
|
||||||
chr.NEW_AFFECT_GOLD_BONUS : (localeInfo.TOOLTIP_MALL_GOLDBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/gold_bonus.sub",),
|
chr.NEW_AFFECT_GOLD_BONUS : (localeInfo.TOOLTIP_MALL_GOLDBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/gold_bonus.sub",),
|
||||||
|
|
||||||
chr.NEW_AFFECT_NO_DEATH_PENALTY : (localeInfo.TOOLTIP_APPLY_NO_DEATH_PENALTY, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
chr.NEW_AFFECT_NO_DEATH_PENALTY : (localeInfo.TOOLTIP_APPLY_NO_DEATH_PENALTY, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
||||||
chr.NEW_AFFECT_SKILL_BOOK_BONUS : (localeInfo.TOOLTIP_APPLY_SKILL_BOOK_BONUS, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
chr.NEW_AFFECT_SKILL_BOOK_BONUS : (localeInfo.TOOLTIP_APPLY_SKILL_BOOK_BONUS, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
||||||
chr.NEW_AFFECT_SKILL_BOOK_NO_DELAY : (localeInfo.TOOLTIP_APPLY_SKILL_BOOK_NO_DELAY, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
chr.NEW_AFFECT_SKILL_BOOK_NO_DELAY : (localeInfo.TOOLTIP_APPLY_SKILL_BOOK_NO_DELAY, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
||||||
|
|
||||||
# <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> hp, sp
|
# <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> hp, sp
|
||||||
chr.NEW_AFFECT_AUTO_HP_RECOVERY : (localeInfo.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/pattern/auto_hpgauge/05.dds"),
|
chr.NEW_AFFECT_AUTO_HP_RECOVERY : (localeInfo.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/pattern/auto_hpgauge/05.dds"),
|
||||||
chr.NEW_AFFECT_AUTO_SP_RECOVERY : (localeInfo.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/pattern/auto_spgauge/05.dds"),
|
chr.NEW_AFFECT_AUTO_SP_RECOVERY : (localeInfo.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/pattern/auto_spgauge/05.dds"),
|
||||||
#chr.NEW_AFFECT_AUTO_HP_RECOVERY : (localeInfo.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
#chr.NEW_AFFECT_AUTO_HP_RECOVERY : (localeInfo.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
||||||
#chr.NEW_AFFECT_AUTO_SP_RECOVERY : (localeInfo.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/skill/common/affect/gold_bonus.sub"),
|
#chr.NEW_AFFECT_AUTO_SP_RECOVERY : (localeInfo.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/skill/common/affect/gold_bonus.sub"),
|
||||||
|
|
||||||
MALL_DESC_IDX_START+player.POINT_MALL_ATTBONUS : (localeInfo.TOOLTIP_MALL_ATTBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/att_bonus.sub",),
|
MALL_DESC_IDX_START + player.POINT_MALL_ATTBONUS : (localeInfo.TOOLTIP_MALL_ATTBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/att_bonus.sub",),
|
||||||
MALL_DESC_IDX_START+player.POINT_MALL_DEFBONUS : (localeInfo.TOOLTIP_MALL_DEFBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/def_bonus.sub",),
|
MALL_DESC_IDX_START + player.POINT_MALL_DEFBONUS : (localeInfo.TOOLTIP_MALL_DEFBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/def_bonus.sub",),
|
||||||
MALL_DESC_IDX_START+player.POINT_MALL_EXPBONUS : (localeInfo.TOOLTIP_MALL_EXPBONUS, "d:/ymir work/ui/skill/common/affect/exp_bonus.sub",),
|
MALL_DESC_IDX_START + player.POINT_MALL_EXPBONUS : (localeInfo.TOOLTIP_MALL_EXPBONUS, "d:/ymir work/ui/skill/common/affect/exp_bonus.sub",),
|
||||||
MALL_DESC_IDX_START+player.POINT_MALL_ITEMBONUS : (localeInfo.TOOLTIP_MALL_ITEMBONUS, "d:/ymir work/ui/skill/common/affect/item_bonus.sub",),
|
MALL_DESC_IDX_START + player.POINT_MALL_ITEMBONUS : (localeInfo.TOOLTIP_MALL_ITEMBONUS, "d:/ymir work/ui/skill/common/affect/item_bonus.sub",),
|
||||||
MALL_DESC_IDX_START+player.POINT_MALL_GOLDBONUS : (localeInfo.TOOLTIP_MALL_GOLDBONUS, "d:/ymir work/ui/skill/common/affect/gold_bonus.sub",),
|
MALL_DESC_IDX_START + player.POINT_MALL_GOLDBONUS : (localeInfo.TOOLTIP_MALL_GOLDBONUS, "d:/ymir work/ui/skill/common/affect/gold_bonus.sub",),
|
||||||
MALL_DESC_IDX_START+player.POINT_CRITICAL_PCT : (localeInfo.TOOLTIP_APPLY_CRITICAL_PCT,"d:/ymir work/ui/skill/common/affect/critical.sub"),
|
MALL_DESC_IDX_START + player.POINT_CRITICAL_PCT : (localeInfo.TOOLTIP_APPLY_CRITICAL_PCT,"d:/ymir work/ui/skill/common/affect/critical.sub"),
|
||||||
MALL_DESC_IDX_START+player.POINT_PENETRATE_PCT : (localeInfo.TOOLTIP_APPLY_PENETRATE_PCT, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
MALL_DESC_IDX_START + player.POINT_PENETRATE_PCT : (localeInfo.TOOLTIP_APPLY_PENETRATE_PCT, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
||||||
MALL_DESC_IDX_START+player.POINT_MAX_HP_PCT : (localeInfo.TOOLTIP_MAX_HP_PCT, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
MALL_DESC_IDX_START + player.POINT_MAX_HP_PCT : (localeInfo.TOOLTIP_MAX_HP_PCT, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
||||||
MALL_DESC_IDX_START+player.POINT_MAX_SP_PCT : (localeInfo.TOOLTIP_MAX_SP_PCT, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
MALL_DESC_IDX_START + player.POINT_MAX_SP_PCT : (localeInfo.TOOLTIP_MAX_SP_PCT, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
||||||
|
|
||||||
MALL_DESC_IDX_START+player.POINT_PC_BANG_EXP_BONUS : (localeInfo.TOOLTIP_MALL_EXPBONUS_P_STATIC, "d:/ymir work/ui/skill/common/affect/EXP_Bonus_p_on.sub",),
|
MALL_DESC_IDX_START + player.POINT_PC_BANG_EXP_BONUS : (localeInfo.TOOLTIP_MALL_EXPBONUS_P_STATIC, "d:/ymir work/ui/skill/common/affect/EXP_Bonus_p_on.sub",),
|
||||||
MALL_DESC_IDX_START+player.POINT_PC_BANG_DROP_BONUS: (localeInfo.TOOLTIP_MALL_ITEMBONUS_P_STATIC, "d:/ymir work/ui/skill/common/affect/Item_Bonus_p_on.sub",),
|
MALL_DESC_IDX_START + player.POINT_PC_BANG_DROP_BONUS: (localeInfo.TOOLTIP_MALL_ITEMBONUS_P_STATIC, "d:/ymir work/ui/skill/common/affect/Item_Bonus_p_on.sub",),
|
||||||
|
# MR-12: Add Mall Attack speed affect
|
||||||
|
MALL_DESC_IDX_START + player.POINT_ATT_SPEED : (localeInfo.TOOLTIP_MALL_ATT_SPEED, "d:/ymir work/ui/skill/common/affect/Increase_Attack_Speed.sub",),
|
||||||
|
# MR-12: -- END OF -- Add Mall Attack speed affect
|
||||||
}
|
}
|
||||||
|
|
||||||
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
||||||
# <20><>ȥ<EFBFBD><C8A5> õ, <20><> <20><>.
|
# <20><>ȥ<EFBFBD><C8A5> õ, <20><> <20><>.
|
||||||
AFFECT_DATA_DICT[chr.NEW_AFFECT_DRAGON_SOUL_DECK1] = (localeInfo.TOOLTIP_DRAGON_SOUL_DECK1, "d:/ymir work/ui/dragonsoul/buff_ds_sky1.tga")
|
AFFECT_DATA_DICT[chr.NEW_AFFECT_DRAGON_SOUL_DECK1] = (localeInfo.TOOLTIP_DRAGON_SOUL_DECK1, "d:/ymir work/ui/dragonsoul/buff_ds_sky1.tga")
|
||||||
@@ -617,22 +628,24 @@ class AffectShower(ui.Window):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
ui.Window.__init__(self)
|
ui.Window.__init__(self)
|
||||||
|
|
||||||
self.serverPlayTime=0
|
self.serverPlayTime = 0
|
||||||
self.clientPlayTime=0
|
self.clientPlayTime = 0
|
||||||
|
|
||||||
self.lastUpdateTime=0
|
self.lastUpdateTime = 0
|
||||||
self.affectImageDict={}
|
self.affectImageDict = {}
|
||||||
self.horseImage=None
|
self.horseImage = None
|
||||||
self.lovePointImage=None
|
self.lovePointImage = None
|
||||||
self.autoPotionImageHP = AutoPotionImage()
|
self.autoPotionImageHP = AutoPotionImage()
|
||||||
self.autoPotionImageSP = AutoPotionImage()
|
self.autoPotionImageSP = AutoPotionImage()
|
||||||
|
|
||||||
self.SetPosition(10, 10)
|
self.SetPosition(10, 10)
|
||||||
self.Show()
|
self.Show()
|
||||||
|
|
||||||
def ClearAllAffects(self):
|
def ClearAllAffects(self):
|
||||||
self.horseImage=None
|
self.horseImage = None
|
||||||
self.lovePointImage=None
|
self.lovePointImage = None
|
||||||
self.affectImageDict={}
|
self.affectImageDict = {}
|
||||||
|
|
||||||
self.__ArrangeImageList()
|
self.__ArrangeImageList()
|
||||||
|
|
||||||
def ClearAffects(self): ## <20><>ų <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>۴ϴ<DBB4>.
|
def ClearAffects(self): ## <20><>ų <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>۴ϴ<DBB4>.
|
||||||
@@ -644,7 +657,6 @@ class AffectShower(ui.Window):
|
|||||||
self.__ArrangeImageList()
|
self.__ArrangeImageList()
|
||||||
|
|
||||||
def BINARY_NEW_AddAffect(self, type, pointIdx, value, duration):
|
def BINARY_NEW_AddAffect(self, type, pointIdx, value, duration):
|
||||||
|
|
||||||
print(("BINARY_NEW_AddAffect", type, pointIdx, value, duration))
|
print(("BINARY_NEW_AddAffect", type, pointIdx, value, duration))
|
||||||
|
|
||||||
if type < 500:
|
if type < 500:
|
||||||
@@ -678,6 +690,7 @@ class AffectShower(ui.Window):
|
|||||||
value = 1 + float(value) / 100.0
|
value = 1 + float(value) / 100.0
|
||||||
|
|
||||||
trashValue = 123
|
trashValue = 123
|
||||||
|
|
||||||
#if affect == chr.NEW_AFFECT_AUTO_SP_RECOVERY or affect == chr.NEW_AFFECT_AUTO_HP_RECOVERY:
|
#if affect == chr.NEW_AFFECT_AUTO_SP_RECOVERY or affect == chr.NEW_AFFECT_AUTO_HP_RECOVERY:
|
||||||
if trashValue == 1:
|
if trashValue == 1:
|
||||||
try:
|
try:
|
||||||
@@ -699,24 +712,26 @@ class AffectShower(ui.Window):
|
|||||||
image.OnUpdateAutoPotionImage()
|
image.OnUpdateAutoPotionImage()
|
||||||
|
|
||||||
self.affectImageDict[affect] = image
|
self.affectImageDict[affect] = image
|
||||||
|
|
||||||
self.__ArrangeImageList()
|
self.__ArrangeImageList()
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(("except Aff auto potion affect ", e))
|
print(("except Aff auto potion affect ", e))
|
||||||
pass
|
pass
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if affect != chr.NEW_AFFECT_AUTO_SP_RECOVERY and affect != chr.NEW_AFFECT_AUTO_HP_RECOVERY:
|
if affect != chr.NEW_AFFECT_AUTO_SP_RECOVERY and affect != chr.NEW_AFFECT_AUTO_HP_RECOVERY:
|
||||||
description = description(float(value))
|
description = description(float(value))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
print(("Add affect %s" % affect))
|
print(("Add affect %s" % affect))
|
||||||
|
|
||||||
image = AffectImage()
|
image = AffectImage()
|
||||||
|
|
||||||
image.SetParent(self)
|
image.SetParent(self)
|
||||||
image.LoadImage(filename)
|
image.LoadImage(filename)
|
||||||
image.SetDescription(description)
|
image.SetDescription(description)
|
||||||
image.SetDuration(duration)
|
image.SetDuration(duration)
|
||||||
image.SetAffect(affect)
|
image.SetAffect(affect)
|
||||||
|
|
||||||
if affect == chr.NEW_AFFECT_EXP_BONUS_EURO_FREE or\
|
if affect == chr.NEW_AFFECT_EXP_BONUS_EURO_FREE or\
|
||||||
affect == chr.NEW_AFFECT_EXP_BONUS_EURO_FREE_UNDER_15 or\
|
affect == chr.NEW_AFFECT_EXP_BONUS_EURO_FREE_UNDER_15 or\
|
||||||
self.INFINITE_AFFECT_DURATION < duration:
|
self.INFINITE_AFFECT_DURATION < duration:
|
||||||
@@ -731,6 +746,7 @@ class AffectShower(ui.Window):
|
|||||||
image.SetScale(1, 1)
|
image.SetScale(1, 1)
|
||||||
else:
|
else:
|
||||||
image.SetScale(0.7, 0.7)
|
image.SetScale(0.7, 0.7)
|
||||||
|
|
||||||
image.SetSkillAffectFlag(False)
|
image.SetSkillAffectFlag(False)
|
||||||
image.Show()
|
image.Show()
|
||||||
self.affectImageDict[affect] = image
|
self.affectImageDict[affect] = image
|
||||||
@@ -873,26 +889,17 @@ class AffectShower(ui.Window):
|
|||||||
image.SetPosition(xPos, 0)
|
image.SetPosition(xPos, 0)
|
||||||
xPos += self.IMAGE_STEP
|
xPos += self.IMAGE_STEP
|
||||||
|
|
||||||
|
# MR-12: Fix realtime countdown auto-start
|
||||||
def OnUpdate(self):
|
def OnUpdate(self):
|
||||||
try:
|
try:
|
||||||
# MR-10: Add toolTip support and real-time countdown for affects
|
for image in list(self.affectImageDict.values()):
|
||||||
curTime = app.GetGlobalTime()
|
if image.GetAffect() == chr.NEW_AFFECT_AUTO_HP_RECOVERY or image.GetAffect() == chr.NEW_AFFECT_AUTO_SP_RECOVERY:
|
||||||
|
image.UpdateAutoPotionDescription()
|
||||||
if curTime < self.lastUpdateTime:
|
continue
|
||||||
self.lastUpdateTime = 0
|
|
||||||
|
if not image.IsSkillAffect():
|
||||||
if curTime - self.lastUpdateTime > 500:
|
image.UpdateDescription()
|
||||||
#if 0 < app.GetGlobalTime():
|
|
||||||
self.lastUpdateTime = curTime
|
|
||||||
# MR-10: -- END OF -- Add toolTip support and real-time countdown for affects
|
|
||||||
|
|
||||||
for image in list(self.affectImageDict.values()):
|
|
||||||
if image.GetAffect() == chr.NEW_AFFECT_AUTO_HP_RECOVERY or image.GetAffect() == chr.NEW_AFFECT_AUTO_SP_RECOVERY:
|
|
||||||
image.UpdateAutoPotionDescription()
|
|
||||||
continue
|
|
||||||
|
|
||||||
if not image.IsSkillAffect():
|
|
||||||
image.UpdateDescription()
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(("AffectShower::OnUpdate error : ", e))
|
print(("AffectShower::OnUpdate error : ", e))
|
||||||
|
# MR-12: -- END OF -- Fix realtime countdown auto-start
|
||||||
|
|
||||||
|
|||||||
@@ -36,17 +36,21 @@ class AttachMetinDialog(ui.ScriptWindow):
|
|||||||
exception.Abort("AttachStoneDialog.__LoadScript.BindObject")
|
exception.Abort("AttachStoneDialog.__LoadScript.BindObject")
|
||||||
|
|
||||||
oldToolTip = uiToolTip.ItemToolTip()
|
oldToolTip = uiToolTip.ItemToolTip()
|
||||||
|
|
||||||
oldToolTip.SetParent(self)
|
oldToolTip.SetParent(self)
|
||||||
oldToolTip.SetPosition(15, 38)
|
oldToolTip.SetPosition(15, 38)
|
||||||
oldToolTip.SetFollow(False)
|
oldToolTip.SetFollow(False)
|
||||||
oldToolTip.Show()
|
oldToolTip.Show()
|
||||||
|
|
||||||
self.oldToolTip = oldToolTip
|
self.oldToolTip = oldToolTip
|
||||||
|
|
||||||
newToolTip = uiToolTip.ItemToolTip()
|
newToolTip = uiToolTip.ItemToolTip()
|
||||||
|
|
||||||
newToolTip.SetParent(self)
|
newToolTip.SetParent(self)
|
||||||
newToolTip.SetPosition(230 + 20, 38)
|
newToolTip.SetPosition(230 + 20, 38)
|
||||||
newToolTip.SetFollow(False)
|
newToolTip.SetFollow(False)
|
||||||
newToolTip.Show()
|
newToolTip.Show()
|
||||||
|
|
||||||
self.newToolTip = newToolTip
|
self.newToolTip = newToolTip
|
||||||
|
|
||||||
self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
|
self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
|
||||||
@@ -88,24 +92,37 @@ class AttachMetinDialog(ui.ScriptWindow):
|
|||||||
except:
|
except:
|
||||||
dbg.TraceError("AttachMetinDialog.Open.LoadImage - Failed to find item data")
|
dbg.TraceError("AttachMetinDialog.Open.LoadImage - Failed to find item data")
|
||||||
|
|
||||||
|
# MR-12: Fix attribute and metin socket order display in tooltip
|
||||||
|
# Get actual item attributes/bonuses for display
|
||||||
|
attrSlot = []
|
||||||
|
|
||||||
|
for i in range(player.ATTRIBUTE_SLOT_MAX_NUM):
|
||||||
|
attrSlot.append(player.GetItemAttribute(targetItemPos, i))
|
||||||
|
|
||||||
metinSlot = []
|
metinSlot = []
|
||||||
|
|
||||||
for i in range(player.METIN_SOCKET_MAX_NUM):
|
for i in range(player.METIN_SOCKET_MAX_NUM):
|
||||||
metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
|
metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
|
||||||
|
|
||||||
for i in range(player.METIN_SOCKET_MAX_NUM):
|
for i in range(player.METIN_SOCKET_MAX_NUM):
|
||||||
slotData = metinSlot[i]
|
slotData = metinSlot[i]
|
||||||
|
|
||||||
if self.CanAttachMetin(slotData, metinSubType):
|
if self.CanAttachMetin(slotData, metinSubType):
|
||||||
metinSlot[i] = metinIndex
|
metinSlot[i] = metinIndex
|
||||||
break
|
|
||||||
self.newToolTip.AddItemData(itemIndex, metinSlot)
|
|
||||||
|
|
||||||
|
break
|
||||||
|
|
||||||
|
self.newToolTip.AddItemData(itemIndex, metinSlot, attrSlot)
|
||||||
item.SelectItem(metinIndex)
|
item.SelectItem(metinIndex)
|
||||||
|
|
||||||
metinSlot = []
|
metinSlot = []
|
||||||
|
|
||||||
for i in range(player.METIN_SOCKET_MAX_NUM):
|
for i in range(player.METIN_SOCKET_MAX_NUM):
|
||||||
metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
|
metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
|
||||||
|
|
||||||
self.oldToolTip.ResizeToolTipWidth(self.newToolTip.GetWidth())
|
self.oldToolTip.ResizeToolTipWidth(self.newToolTip.GetWidth())
|
||||||
self.oldToolTip.AddItemData(itemIndex, metinSlot)
|
self.oldToolTip.AddItemData(itemIndex, metinSlot, attrSlot)
|
||||||
|
# MR-12: -- END OF -- Fix attribute and metin socket order display in tooltip
|
||||||
|
|
||||||
self.UpdateDialog()
|
self.UpdateDialog()
|
||||||
self.SetTop()
|
self.SetTop()
|
||||||
|
|||||||
@@ -702,7 +702,15 @@ class DragonSoulWindow(ui.ScriptWindow):
|
|||||||
deckIndex = self.deckPageIndex
|
deckIndex = self.deckPageIndex
|
||||||
|
|
||||||
if not self.isActivated or self.deckPageIndex != deckIndex:
|
if not self.isActivated or self.deckPageIndex != deckIndex:
|
||||||
if self.__CanActivateDeck():
|
# MR-12: Improve keyboard shortcut functionality for deck toggling
|
||||||
|
if self.deckPageIndex != deckIndex:
|
||||||
|
self.deckPageIndex = deckIndex
|
||||||
|
self.deckTab[deckIndex].Down()
|
||||||
|
self.deckTab[(deckIndex + 1) % 2].SetUp()
|
||||||
|
self.RefreshEquipSlotWindow()
|
||||||
|
|
||||||
|
# Now validate the deck we switched to
|
||||||
|
if self.__CanActivateDeck(deckIndex):
|
||||||
net.SendChatPacket("/dragon_soul activate " + str(deckIndex))
|
net.SendChatPacket("/dragon_soul activate " + str(deckIndex))
|
||||||
|
|
||||||
self.isActivated = True
|
self.isActivated = True
|
||||||
@@ -712,18 +720,31 @@ class DragonSoulWindow(ui.ScriptWindow):
|
|||||||
else:
|
else:
|
||||||
self.isActivated = False
|
self.isActivated = False
|
||||||
self.activateButton.SetUp()
|
self.activateButton.SetUp()
|
||||||
|
# MR-12: -- END OF -- Improve keyboard shortcut functionality for deck toggling
|
||||||
else:
|
else:
|
||||||
net.SendChatPacket("/dragon_soul deactivate")
|
net.SendChatPacket("/dragon_soul deactivate")
|
||||||
self.isActivated = False
|
self.isActivated = False
|
||||||
self.activateButton.SetUp()
|
self.activateButton.SetUp()
|
||||||
|
|
||||||
|
# Clear the tooltip cache when deactivating
|
||||||
|
if self.tooltipItem:
|
||||||
|
self.tooltipItem.ClearDragonSoulTimeCache()
|
||||||
# MR-3: -- END OF -- Keyboard-enabled deck toggling
|
# MR-3: -- END OF -- Keyboard-enabled deck toggling
|
||||||
|
|
||||||
def __CanActivateDeck(self):
|
# MR-12: Fix activation of decks with expired dragon souls
|
||||||
|
def __CanActivateDeck(self, deckIndex = None):
|
||||||
|
# If deckIndex not specified, check the current deck page
|
||||||
|
if deckIndex is None:
|
||||||
|
deckIndex = self.deckPageIndex
|
||||||
|
|
||||||
canActiveNum = 0
|
canActiveNum = 0
|
||||||
|
|
||||||
for i in range(6):
|
for i in range(6):
|
||||||
slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i)
|
# Calculate the slot number for the specified deck
|
||||||
itemVnum = player.GetItemIndex(slotNumber)
|
equipSlotPos = player.DRAGON_SOUL_EQUIPMENT_SLOT_START + deckIndex * player.DRAGON_SOUL_EQUIPMENT_FIRST_SIZE + i
|
||||||
|
slotNumber = equipSlotPos
|
||||||
|
itemVnum = player.GetItemIndex(player.INVENTORY, slotNumber)
|
||||||
|
# MR-12: -- END OF -- Fix activation of decks with expired dragon souls
|
||||||
|
|
||||||
if itemVnum != 0:
|
if itemVnum != 0:
|
||||||
item.SelectItem(itemVnum)
|
item.SelectItem(itemVnum)
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import uiCommon
|
|||||||
import constInfo
|
import constInfo
|
||||||
|
|
||||||
class RefineDialog(ui.ScriptWindow):
|
class RefineDialog(ui.ScriptWindow):
|
||||||
|
|
||||||
makeSocketSuccessPercentage = ( 100, 33, 20, 15, 10, 5, 0 )
|
makeSocketSuccessPercentage = ( 100, 33, 20, 15, 10, 5, 0 )
|
||||||
upgradeStoneSuccessPercentage = ( 30, 29, 28, 27, 26, 25, 24, 23, 22 )
|
upgradeStoneSuccessPercentage = ( 30, 29, 28, 27, 26, 25, 24, 23, 22 )
|
||||||
upgradeArmorSuccessPercentage = ( 99, 66, 33, 33, 33, 33, 33, 33, 33 )
|
upgradeArmorSuccessPercentage = ( 99, 66, 33, 33, 33, 33, 33, 33, 33 )
|
||||||
@@ -89,24 +88,21 @@ class RefineDialog(ui.ScriptWindow):
|
|||||||
self.dlgQuestion = 0
|
self.dlgQuestion = 0
|
||||||
|
|
||||||
def GetRefineSuccessPercentage(self, scrollSlotIndex, itemSlotIndex):
|
def GetRefineSuccessPercentage(self, scrollSlotIndex, itemSlotIndex):
|
||||||
|
|
||||||
if -1 != scrollSlotIndex:
|
if -1 != scrollSlotIndex:
|
||||||
if player.IsRefineGradeScroll(scrollSlotIndex):
|
if player.IsRefineGradeScroll(scrollSlotIndex):
|
||||||
curGrade = player.GetItemGrade(itemSlotIndex)
|
curGrade = player.GetItemGrade(itemSlotIndex)
|
||||||
itemIndex = player.GetItemIndex(itemSlotIndex)
|
itemIndex = player.GetItemIndex(itemSlotIndex)
|
||||||
|
|
||||||
item.SelectItem(itemIndex)
|
item.SelectItem(itemIndex)
|
||||||
|
|
||||||
itemType = item.GetItemType()
|
itemType = item.GetItemType()
|
||||||
itemSubType = item.GetItemSubType()
|
itemSubType = item.GetItemSubType()
|
||||||
|
|
||||||
if item.ITEM_TYPE_METIN == itemType:
|
if item.ITEM_TYPE_METIN == itemType:
|
||||||
|
|
||||||
if curGrade >= len(self.upgradeStoneSuccessPercentage):
|
if curGrade >= len(self.upgradeStoneSuccessPercentage):
|
||||||
return 0
|
return 0
|
||||||
return self.upgradeStoneSuccessPercentage[curGrade]
|
return self.upgradeStoneSuccessPercentage[curGrade]
|
||||||
|
|
||||||
elif item.ITEM_TYPE_ARMOR == itemType:
|
elif item.ITEM_TYPE_ARMOR == itemType:
|
||||||
|
|
||||||
if item.ARMOR_BODY == itemSubType:
|
if item.ARMOR_BODY == itemSubType:
|
||||||
if curGrade >= len(self.upgradeArmorSuccessPercentage):
|
if curGrade >= len(self.upgradeArmorSuccessPercentage):
|
||||||
return 0
|
return 0
|
||||||
@@ -115,11 +111,10 @@ class RefineDialog(ui.ScriptWindow):
|
|||||||
if curGrade >= len(self.upgradeAccessorySuccessPercentage):
|
if curGrade >= len(self.upgradeAccessorySuccessPercentage):
|
||||||
return 0
|
return 0
|
||||||
return self.upgradeAccessorySuccessPercentage[curGrade]
|
return self.upgradeAccessorySuccessPercentage[curGrade]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
if curGrade >= len(self.upgradeSuccessPercentage):
|
if curGrade >= len(self.upgradeSuccessPercentage):
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
return self.upgradeSuccessPercentage[curGrade]
|
return self.upgradeSuccessPercentage[curGrade]
|
||||||
|
|
||||||
for i in range(player.METIN_SOCKET_MAX_NUM+1):
|
for i in range(player.METIN_SOCKET_MAX_NUM+1):
|
||||||
@@ -133,15 +128,19 @@ class RefineDialog(ui.ScriptWindow):
|
|||||||
self.targetItemPos = targetItemPos
|
self.targetItemPos = targetItemPos
|
||||||
|
|
||||||
percentage = self.GetRefineSuccessPercentage(scrollItemPos, targetItemPos)
|
percentage = self.GetRefineSuccessPercentage(scrollItemPos, targetItemPos)
|
||||||
|
|
||||||
if 0 == percentage:
|
if 0 == percentage:
|
||||||
return
|
return
|
||||||
|
|
||||||
self.successPercentage.SetText(localeInfo.REFINE_SUCCESS_PROBALITY % (percentage))
|
self.successPercentage.SetText(localeInfo.REFINE_SUCCESS_PROBALITY % (percentage))
|
||||||
|
|
||||||
itemIndex = player.GetItemIndex(targetItemPos)
|
itemIndex = player.GetItemIndex(targetItemPos)
|
||||||
self.toolTip.ClearToolTip()
|
self.toolTip.ClearToolTip()
|
||||||
metinSlot = []
|
metinSlot = []
|
||||||
|
|
||||||
for i in range(player.METIN_SOCKET_MAX_NUM):
|
for i in range(player.METIN_SOCKET_MAX_NUM):
|
||||||
metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
|
metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
|
||||||
|
|
||||||
self.toolTip.AddItemData(itemIndex, metinSlot)
|
self.toolTip.AddItemData(itemIndex, metinSlot)
|
||||||
|
|
||||||
self.UpdateDialog()
|
self.UpdateDialog()
|
||||||
@@ -151,17 +150,21 @@ class RefineDialog(ui.ScriptWindow):
|
|||||||
def UpdateDialog(self):
|
def UpdateDialog(self):
|
||||||
newWidth = self.toolTip.GetWidth() + 30
|
newWidth = self.toolTip.GetWidth() + 30
|
||||||
newHeight = self.toolTip.GetHeight() + 98
|
newHeight = self.toolTip.GetHeight() + 98
|
||||||
|
|
||||||
self.board.SetSize(newWidth, newHeight)
|
self.board.SetSize(newWidth, newHeight)
|
||||||
self.titleBar.SetWidth(newWidth-15)
|
self.titleBar.SetWidth(newWidth-15)
|
||||||
self.SetSize(newWidth, newHeight)
|
self.SetSize(newWidth, newHeight)
|
||||||
|
|
||||||
(x, y) = self.GetLocalPosition()
|
(x, y) = self.GetLocalPosition()
|
||||||
|
|
||||||
self.SetPosition(x, y)
|
self.SetPosition(x, y)
|
||||||
|
|
||||||
def OpenQuestionDialog(self):
|
def OpenQuestionDialog(self):
|
||||||
percentage = self.GetRefineSuccessPercentage(-1, self.targetItemPos)
|
percentage = self.GetRefineSuccessPercentage(-1, self.targetItemPos)
|
||||||
|
|
||||||
if 100 == percentage:
|
if 100 == percentage:
|
||||||
self.Accept()
|
self.Accept()
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
self.dlgQuestion.SetTop()
|
self.dlgQuestion.SetTop()
|
||||||
@@ -197,11 +200,9 @@ class RefineDialogNew(ui.ScriptWindow):
|
|||||||
self.type = 0
|
self.type = 0
|
||||||
|
|
||||||
def __LoadScript(self):
|
def __LoadScript(self):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
pyScrLoader = ui.PythonScriptLoader()
|
pyScrLoader = ui.PythonScriptLoader()
|
||||||
pyScrLoader.LoadScriptFile(self, "uiscript/refinedialog.py")
|
pyScrLoader.LoadScriptFile(self, "uiscript/refinedialog.py")
|
||||||
|
|
||||||
except:
|
except:
|
||||||
import exception
|
import exception
|
||||||
exception.Abort("RefineDialog.__LoadScript.LoadObject")
|
exception.Abort("RefineDialog.__LoadScript.LoadObject")
|
||||||
@@ -228,8 +229,10 @@ class RefineDialogNew(ui.ScriptWindow):
|
|||||||
self.toolTip = toolTip
|
self.toolTip = toolTip
|
||||||
|
|
||||||
self.slotList = []
|
self.slotList = []
|
||||||
|
|
||||||
for i in range(3):
|
for i in range(3):
|
||||||
slot = self.__MakeSlot()
|
slot = self.__MakeSlot()
|
||||||
|
|
||||||
slot.SetParent(toolTip)
|
slot.SetParent(toolTip)
|
||||||
slot.SetWindowVerticalAlignCenter()
|
slot.SetWindowVerticalAlignCenter()
|
||||||
self.slotList.append(slot)
|
self.slotList.append(slot)
|
||||||
@@ -248,26 +251,33 @@ class RefineDialogNew(ui.ScriptWindow):
|
|||||||
|
|
||||||
def __MakeSlot(self):
|
def __MakeSlot(self):
|
||||||
slot = ui.ImageBox()
|
slot = ui.ImageBox()
|
||||||
|
|
||||||
slot.LoadImage("d:/ymir work/ui/public/slot_base.sub")
|
slot.LoadImage("d:/ymir work/ui/public/slot_base.sub")
|
||||||
slot.Show()
|
slot.Show()
|
||||||
self.children.append(slot)
|
self.children.append(slot)
|
||||||
|
|
||||||
return slot
|
return slot
|
||||||
|
|
||||||
def __MakeItemImage(self):
|
def __MakeItemImage(self):
|
||||||
itemImage = ui.ImageBox()
|
itemImage = ui.ImageBox()
|
||||||
|
|
||||||
itemImage.Show()
|
itemImage.Show()
|
||||||
self.children.append(itemImage)
|
self.children.append(itemImage)
|
||||||
|
|
||||||
return itemImage
|
return itemImage
|
||||||
|
|
||||||
def __MakeThinBoard(self):
|
def __MakeThinBoard(self):
|
||||||
thinBoard = ui.ThinBoard()
|
thinBoard = ui.ThinBoard()
|
||||||
|
|
||||||
thinBoard.SetParent(self)
|
thinBoard.SetParent(self)
|
||||||
thinBoard.Show()
|
thinBoard.Show()
|
||||||
self.children.append(thinBoard)
|
self.children.append(thinBoard)
|
||||||
|
|
||||||
return thinBoard
|
return thinBoard
|
||||||
|
|
||||||
def Destroy(self):
|
def Destroy(self):
|
||||||
self.ClearDictionary()
|
self.ClearDictionary()
|
||||||
|
|
||||||
self.dlgQuestion = None
|
self.dlgQuestion = None
|
||||||
self.board = 0
|
self.board = 0
|
||||||
self.probText = 0
|
self.probText = 0
|
||||||
@@ -279,7 +289,6 @@ class RefineDialogNew(ui.ScriptWindow):
|
|||||||
self.children = []
|
self.children = []
|
||||||
|
|
||||||
def Open(self, targetItemPos, nextGradeItemVnum, cost, prob, type):
|
def Open(self, targetItemPos, nextGradeItemVnum, cost, prob, type):
|
||||||
|
|
||||||
if False == self.isLoaded:
|
if False == self.isLoaded:
|
||||||
self.__LoadScript()
|
self.__LoadScript()
|
||||||
|
|
||||||
@@ -296,12 +305,15 @@ class RefineDialogNew(ui.ScriptWindow):
|
|||||||
|
|
||||||
self.toolTip.ClearToolTip()
|
self.toolTip.ClearToolTip()
|
||||||
metinSlot = []
|
metinSlot = []
|
||||||
|
|
||||||
for i in range(player.METIN_SOCKET_MAX_NUM):
|
for i in range(player.METIN_SOCKET_MAX_NUM):
|
||||||
metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
|
metinSlot.append(player.GetItemMetinSocket(targetItemPos, i))
|
||||||
|
|
||||||
attrSlot = []
|
attrSlot = []
|
||||||
|
|
||||||
for i in range(player.ATTRIBUTE_SLOT_MAX_NUM):
|
for i in range(player.ATTRIBUTE_SLOT_MAX_NUM):
|
||||||
attrSlot.append(player.GetItemAttribute(targetItemPos, i))
|
attrSlot.append(player.GetItemAttribute(targetItemPos, i))
|
||||||
|
|
||||||
self.toolTip.AddRefineItemData(nextGradeItemVnum, metinSlot, attrSlot)
|
self.toolTip.AddRefineItemData(nextGradeItemVnum, metinSlot, attrSlot)
|
||||||
|
|
||||||
item.SelectItem(nextGradeItemVnum)
|
item.SelectItem(nextGradeItemVnum)
|
||||||
@@ -309,6 +321,7 @@ class RefineDialogNew(ui.ScriptWindow):
|
|||||||
xSlotCount, ySlotCount = item.GetItemSize()
|
xSlotCount, ySlotCount = item.GetItemSize()
|
||||||
for slot in self.slotList:
|
for slot in self.slotList:
|
||||||
slot.Hide()
|
slot.Hide()
|
||||||
|
|
||||||
for i in range(min(3, ySlotCount)):
|
for i in range(min(3, ySlotCount)):
|
||||||
self.slotList[i].SetPosition(-35, i*32 - (ySlotCount-1)*16)
|
self.slotList[i].SetPosition(-35, i*32 - (ySlotCount-1)*16)
|
||||||
self.slotList[i].Show()
|
self.slotList[i].Show()
|
||||||
@@ -325,19 +338,23 @@ class RefineDialogNew(ui.ScriptWindow):
|
|||||||
|
|
||||||
def AppendMaterial(self, vnum, count):
|
def AppendMaterial(self, vnum, count):
|
||||||
slot = self.__MakeSlot()
|
slot = self.__MakeSlot()
|
||||||
|
|
||||||
slot.SetParent(self)
|
slot.SetParent(self)
|
||||||
slot.SetPosition(15, self.dialogHeight)
|
slot.SetPosition(15, self.dialogHeight)
|
||||||
|
|
||||||
itemImage = self.__MakeItemImage()
|
itemImage = self.__MakeItemImage()
|
||||||
|
|
||||||
itemImage.SetParent(slot)
|
itemImage.SetParent(slot)
|
||||||
item.SelectItem(vnum)
|
item.SelectItem(vnum)
|
||||||
itemImage.LoadImage(item.GetIconImageFileName())
|
itemImage.LoadImage(item.GetIconImageFileName())
|
||||||
|
|
||||||
thinBoard = self.__MakeThinBoard()
|
thinBoard = self.__MakeThinBoard()
|
||||||
|
|
||||||
thinBoard.SetPosition(50, self.dialogHeight)
|
thinBoard.SetPosition(50, self.dialogHeight)
|
||||||
thinBoard.SetSize(self.toolTip.GetWidth(), 20)
|
thinBoard.SetSize(self.toolTip.GetWidth(), 20)
|
||||||
|
|
||||||
textLine = ui.TextLine()
|
textLine = ui.TextLine()
|
||||||
|
|
||||||
textLine.SetParent(thinBoard)
|
textLine.SetParent(thinBoard)
|
||||||
textLine.SetFontName(localeInfo.UI_DEF_FONT)
|
textLine.SetFontName(localeInfo.UI_DEF_FONT)
|
||||||
textLine.SetPackedFontColor(0xffdddddd)
|
textLine.SetPackedFontColor(0xffdddddd)
|
||||||
|
|||||||
@@ -918,16 +918,41 @@ class ItemToolTip(ToolTip):
|
|||||||
|
|
||||||
for i in range(player.ATTRIBUTE_SLOT_MAX_NUM):
|
for i in range(player.ATTRIBUTE_SLOT_MAX_NUM):
|
||||||
type = attrSlot[i][0]
|
type = attrSlot[i][0]
|
||||||
|
|
||||||
if 0 != type:
|
if 0 != type:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
# MR-12: Fix broken metin stones showing as empty sockets in item tooltip
|
||||||
def AddRefineItemData(self, itemVnum, metinSlot, attrSlot = 0):
|
def AddRefineItemData(self, itemVnum, metinSlot, attrSlot = 0):
|
||||||
|
# Separate metin slots into filled (non-broken) and empty slots
|
||||||
|
filledSlots = []
|
||||||
|
emptySlots = []
|
||||||
|
|
||||||
for i in range(player.METIN_SOCKET_MAX_NUM):
|
for i in range(player.METIN_SOCKET_MAX_NUM):
|
||||||
metinSlotData=metinSlot[i]
|
metinSlotData = metinSlot[i]
|
||||||
if self.GetMetinItemIndex(metinSlotData) == constInfo.ERROR_METIN_STONE:
|
metin_index = self.GetMetinItemIndex(metinSlotData)
|
||||||
metinSlot[i]=player.METIN_SOCKET_TYPE_SILVER
|
|
||||||
|
if metin_index == constInfo.ERROR_METIN_STONE:
|
||||||
|
# Broken stone - convert to empty silver socket
|
||||||
|
emptySlots.append(player.METIN_SOCKET_TYPE_SILVER)
|
||||||
|
elif metin_index == 0:
|
||||||
|
# Empty slot
|
||||||
|
emptySlots.append(metinSlotData)
|
||||||
|
else:
|
||||||
|
# Valid metin stone
|
||||||
|
filledSlots.append(metinSlotData)
|
||||||
|
|
||||||
|
# Rebuild metinSlot with filled slots first, then empty slots
|
||||||
|
newSlots = filledSlots + emptySlots
|
||||||
|
|
||||||
|
for i in range(player.METIN_SOCKET_MAX_NUM):
|
||||||
|
if i < len(newSlots):
|
||||||
|
metinSlot[i] = newSlots[i]
|
||||||
|
else:
|
||||||
|
metinSlot[i] = 0
|
||||||
|
# MR-12: -- END OF -- Fix broken metin stones showing as empty sockets in item tooltip
|
||||||
|
|
||||||
self.AddItemData(itemVnum, metinSlot, attrSlot)
|
self.AddItemData(itemVnum, metinSlot, attrSlot)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user