From f6e3a6121164029f557c432259b7867c39a5d7d1 Mon Sep 17 00:00:00 2001 From: rtw1x1 Date: Thu, 19 Feb 2026 18:56:59 +0000 Subject: [PATCH] ML: HotReload UI fixes --- assets/root/introcreate.py | 32 ++++--- assets/root/introloading.py | 7 ++ assets/root/introselect.py | 16 ++-- assets/root/uiaffectshower.py | 152 +++++++++++++++++++--------------- 4 files changed, 124 insertions(+), 83 deletions(-) diff --git a/assets/root/introcreate.py b/assets/root/introcreate.py index 4e4a45c0..2514f388 100644 --- a/assets/root/introcreate.py +++ b/assets/root/introcreate.py @@ -37,12 +37,7 @@ class CreateCharacterWindow(ui.Window): STAT_STR = 2 STAT_DEX = 3 - STAT_DESCRIPTION = { - STAT_CON : localeInfo.STAT_TOOLTIP_CON, - STAT_INT : localeInfo.STAT_TOOLTIP_INT, - STAT_STR : localeInfo.STAT_TOOLTIP_STR, - STAT_DEX : localeInfo.STAT_TOOLTIP_DEX, - } + STAT_DESCRIPTION = {} # populated by _RebuildLocaleStrings() START_STAT = ( ## CON INT STR DEX [ 4, 3, 6, 3, ], ## Warrior @@ -55,12 +50,22 @@ class CreateCharacterWindow(ui.Window): [ 4, 6, 3, 3, ], ## Shaman ) - DESCRIPTION_FILE_NAME = ( - uiScriptLocale.JOBDESC_WARRIOR_PATH, - uiScriptLocale.JOBDESC_ASSASSIN_PATH, - uiScriptLocale.JOBDESC_SURA_PATH, - uiScriptLocale.JOBDESC_SHAMAN_PATH, - ) + DESCRIPTION_FILE_NAME = () # populated by _RebuildLocaleStrings() + + @staticmethod + def _RebuildLocaleStrings(): + CreateCharacterWindow.STAT_DESCRIPTION = { + CreateCharacterWindow.STAT_CON : localeInfo.STAT_TOOLTIP_CON, + CreateCharacterWindow.STAT_INT : localeInfo.STAT_TOOLTIP_INT, + CreateCharacterWindow.STAT_STR : localeInfo.STAT_TOOLTIP_STR, + CreateCharacterWindow.STAT_DEX : localeInfo.STAT_TOOLTIP_DEX, + } + CreateCharacterWindow.DESCRIPTION_FILE_NAME = ( + uiScriptLocale.JOBDESC_WARRIOR_PATH, + uiScriptLocale.JOBDESC_ASSASSIN_PATH, + uiScriptLocale.JOBDESC_SURA_PATH, + uiScriptLocale.JOBDESC_SHAMAN_PATH, + ) class DescriptionBox(ui.Window): def __init__(self): @@ -639,6 +644,9 @@ class CreateCharacterWindow(ui.Window): def OverOutStatButton(self): self.toolTip.Hide() +CreateCharacterWindow._RebuildLocaleStrings() +localeInfo.RegisterReloadCallback(CreateCharacterWindow._RebuildLocaleStrings) + if __name__ == "__main__": import app diff --git a/assets/root/introloading.py b/assets/root/introloading.py index 8604f5ff..90c06ab8 100644 --- a/assets/root/introloading.py +++ b/assets/root/introloading.py @@ -349,3 +349,10 @@ class LoadingWindow(ui.ScriptWindow): app.SetGlobalCenterPosition(self.playerX, self.playerY) net.StartGame() + +def _ReloadTitleNames(): + for i in range(len(localeInfo.TITLE_NAME_LIST)): + chrmgr.RegisterTitleName(i, localeInfo.TITLE_NAME_LIST[i]) + chrmgr.RefreshAllPCTextTail() + +localeInfo.RegisterReloadCallback(_ReloadTitleNames) diff --git a/assets/root/introselect.py b/assets/root/introselect.py index e446ce26..aa56a8b0 100644 --- a/assets/root/introselect.py +++ b/assets/root/introselect.py @@ -48,11 +48,15 @@ class SelectCharacterWindow(ui.Window): SLOT_COUNT = 4 CHARACTER_TYPE_COUNT = 4 - EMPIRE_NAME = { - net.EMPIRE_A : localeInfo.EMPIRE_A, - net.EMPIRE_B : localeInfo.EMPIRE_B, - net.EMPIRE_C : localeInfo.EMPIRE_C - } + EMPIRE_NAME = {} # populated by _RebuildLocaleStrings() + + @staticmethod + def _RebuildLocaleStrings(): + SelectCharacterWindow.EMPIRE_NAME = { + net.EMPIRE_A : localeInfo.EMPIRE_A, + net.EMPIRE_B : localeInfo.EMPIRE_B, + net.EMPIRE_C : localeInfo.EMPIRE_C, + } class CharacterRenderer(ui.Window): def OnRender(self): @@ -773,3 +777,5 @@ class SelectCharacterWindow(ui.Window): self.ExitSelect() return True +SelectCharacterWindow._RebuildLocaleStrings() +localeInfo.RegisterReloadCallback(SelectCharacterWindow._RebuildLocaleStrings) diff --git a/assets/root/uiaffectshower.py b/assets/root/uiaffectshower.py index d0b120ab..dca5e2bf 100644 --- a/assets/root/uiaffectshower.py +++ b/assets/root/uiaffectshower.py @@ -8,6 +8,7 @@ import player import uiToolTip import math import dbg +import weakref # WEDDING class LovePointImage(ui.ExpandedImageBox): @@ -611,83 +612,100 @@ class AffectShower(ui.Window): IMAGE_STEP = 25 AFFECT_MAX_NUM = 32 - INFINITE_AFFECT_DURATION = 0x1FFFFFFF + INFINITE_AFFECT_DURATION = 0x1FFFFFFF + _liveInstances = weakref.WeakSet() - AFFECT_DATA_DICT = { - 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_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_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_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_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_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_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_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_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_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_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_FALLEN_CHEONGEUN : (localeInfo.SKILL_CHEONGEUN, "d:/ymir work/ui/skill/warrior/cheongeun_03.sub",), + # Maps affect key -> (localeInfo attribute name, image path). + # AFFECT_DATA_DICT is built from this by _RebuildLocaleStrings(). + _AFFECT_TEMPLATE = { + chr.AFFECT_POISON : ("SKILL_TOXICDIE", "d:/ymir work/ui/skill/common/affect/poison.sub"), + chr.AFFECT_SLOW : ("SKILL_SLOW", "d:/ymir work/ui/skill/common/affect/slow.sub"), + chr.AFFECT_STUN : ("SKILL_STUN", "d:/ymir work/ui/skill/common/affect/stun.sub"), + chr.AFFECT_ATT_SPEED_POTION : ("SKILL_INC_ATKSPD", "d:/ymir work/ui/skill/common/affect/Increase_Attack_Speed.sub"), + chr.AFFECT_MOV_SPEED_POTION : ("SKILL_INC_MOVSPD", "d:/ymir work/ui/skill/common/affect/Increase_Move_Speed.sub"), + chr.AFFECT_FISH_MIND : ("SKILL_FISHMIND", "d:/ymir work/ui/skill/common/affect/fishmind.sub"), + chr.AFFECT_JEONGWI : ("SKILL_JEONGWI", "d:/ymir work/ui/skill/warrior/jeongwi_03.sub"), + chr.AFFECT_GEOMGYEONG : ("SKILL_GEOMGYEONG", "d:/ymir work/ui/skill/warrior/geomgyeong_03.sub"), + chr.AFFECT_CHEONGEUN : ("SKILL_CHEONGEUN", "d:/ymir work/ui/skill/warrior/cheongeun_03.sub"), + chr.AFFECT_GYEONGGONG : ("SKILL_GYEONGGONG", "d:/ymir work/ui/skill/assassin/gyeonggong_03.sub"), + chr.AFFECT_EUNHYEONG : ("SKILL_EUNHYEONG", "d:/ymir work/ui/skill/assassin/eunhyeong_03.sub"), + chr.AFFECT_GWIGEOM : ("SKILL_GWIGEOM", "d:/ymir work/ui/skill/sura/gwigeom_03.sub"), + chr.AFFECT_GONGPO : ("SKILL_GONGPO", "d:/ymir work/ui/skill/sura/gongpo_03.sub"), + chr.AFFECT_JUMAGAP : ("SKILL_JUMAGAP", "d:/ymir work/ui/skill/sura/jumagap_03.sub"), + chr.AFFECT_HOSIN : ("SKILL_HOSIN", "d:/ymir work/ui/skill/shaman/hosin_03.sub"), + chr.AFFECT_BOHO : ("SKILL_BOHO", "d:/ymir work/ui/skill/shaman/boho_03.sub"), + chr.AFFECT_KWAESOK : ("SKILL_KWAESOK", "d:/ymir work/ui/skill/shaman/kwaesok_03.sub"), + chr.AFFECT_HEUKSIN : ("SKILL_HEUKSIN", "d:/ymir work/ui/skill/sura/heuksin_03.sub"), + chr.AFFECT_MUYEONG : ("SKILL_MUYEONG", "d:/ymir work/ui/skill/sura/muyeong_03.sub"), + chr.AFFECT_GICHEON : ("SKILL_GICHEON", "d:/ymir work/ui/skill/shaman/gicheon_03.sub"), + chr.AFFECT_JEUNGRYEOK : ("SKILL_JEUNGRYEOK", "d:/ymir work/ui/skill/shaman/jeungryeok_03.sub"), + chr.AFFECT_PABEOP : ("SKILL_PABEOP", "d:/ymir work/ui/skill/sura/pabeop_03.sub"), + chr.AFFECT_FALLEN_CHEONGEUN : ("SKILL_CHEONGEUN", "d:/ymir work/ui/skill/warrior/cheongeun_03.sub"), # MR-16: Added AFFECT_FIRE to Affects Shower - chr.AFFECT_FIRE : (localeInfo.SKILL_FIRE, "d:/ymir work/ui/skill/sura/hwayeom_03.sub",), + chr.AFFECT_FIRE : ("SKILL_FIRE", "d:/ymir work/ui/skill/sura/hwayeom_03.sub"), # MR-16: -- END OF -- Added AFFECT_FIRE to Affects Shower - chr.AFFECT_CHINA_FIREWORK : (localeInfo.SKILL_POWERFUL_STRIKE, "d:/ymir work/ui/skill/common/affect/powerfulstrike.sub",), - - #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_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_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_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_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_NO_DELAY : (localeInfo.TOOLTIP_APPLY_SKILL_BOOK_NO_DELAY, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"), - - # Auto HP/SP recovery affects - 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_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"), - - 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_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_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_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_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_DROP_BONUS: (localeInfo.TOOLTIP_MALL_ITEMBONUS_P_STATIC, "d:/ymir work/ui/skill/common/affect/Item_Bonus_p_on.sub",), + chr.AFFECT_CHINA_FIREWORK : ("SKILL_POWERFUL_STRIKE", "d:/ymir work/ui/skill/common/affect/powerfulstrike.sub"), + chr.NEW_AFFECT_EXP_BONUS : ("TOOLTIP_MALL_EXPBONUS_STATIC", "d:/ymir work/ui/skill/common/affect/exp_bonus.sub"), + chr.NEW_AFFECT_ITEM_BONUS : ("TOOLTIP_MALL_ITEMBONUS_STATIC", "d:/ymir work/ui/skill/common/affect/item_bonus.sub"), + chr.NEW_AFFECT_SAFEBOX : ("TOOLTIP_MALL_SAFEBOX", "d:/ymir work/ui/skill/common/affect/safebox.sub"), + chr.NEW_AFFECT_AUTOLOOT : ("TOOLTIP_MALL_AUTOLOOT", "d:/ymir work/ui/skill/common/affect/autoloot.sub"), + chr.NEW_AFFECT_FISH_MIND : ("TOOLTIP_MALL_FISH_MIND", "d:/ymir work/ui/skill/common/affect/fishmind.sub"), + chr.NEW_AFFECT_MARRIAGE_FAST : ("TOOLTIP_MALL_MARRIAGE_FAST", "d:/ymir work/ui/skill/common/affect/marriage_fast.sub"), + chr.NEW_AFFECT_GOLD_BONUS : ("TOOLTIP_MALL_GOLDBONUS_STATIC", "d:/ymir work/ui/skill/common/affect/gold_bonus.sub"), + chr.NEW_AFFECT_NO_DEATH_PENALTY : ("TOOLTIP_APPLY_NO_DEATH_PENALTY", "d:/ymir work/ui/skill/common/affect/gold_premium.sub"), + chr.NEW_AFFECT_SKILL_BOOK_BONUS : ("TOOLTIP_APPLY_SKILL_BOOK_BONUS", "d:/ymir work/ui/skill/common/affect/gold_premium.sub"), + chr.NEW_AFFECT_SKILL_BOOK_NO_DELAY : ("TOOLTIP_APPLY_SKILL_BOOK_NO_DELAY", "d:/ymir work/ui/skill/common/affect/gold_premium.sub"), + chr.NEW_AFFECT_AUTO_HP_RECOVERY : ("TOOLTIP_AUTO_POTION_REST", "d:/ymir work/ui/pattern/auto_hpgauge/05.dds"), + chr.NEW_AFFECT_AUTO_SP_RECOVERY : ("TOOLTIP_AUTO_POTION_REST", "d:/ymir work/ui/pattern/auto_spgauge/05.dds"), + # Mall point affects + MALL_DESC_IDX_START + player.POINT_MALL_ATTBONUS : ("TOOLTIP_MALL_ATTBONUS_STATIC", "d:/ymir work/ui/skill/common/affect/att_bonus.sub"), + MALL_DESC_IDX_START + player.POINT_MALL_DEFBONUS : ("TOOLTIP_MALL_DEFBONUS_STATIC", "d:/ymir work/ui/skill/common/affect/def_bonus.sub"), + MALL_DESC_IDX_START + player.POINT_MALL_EXPBONUS : ("TOOLTIP_MALL_EXPBONUS", "d:/ymir work/ui/skill/common/affect/exp_bonus.sub"), + MALL_DESC_IDX_START + player.POINT_MALL_ITEMBONUS : ("TOOLTIP_MALL_ITEMBONUS", "d:/ymir work/ui/skill/common/affect/item_bonus.sub"), + MALL_DESC_IDX_START + player.POINT_MALL_GOLDBONUS : ("TOOLTIP_MALL_GOLDBONUS", "d:/ymir work/ui/skill/common/affect/gold_bonus.sub"), + MALL_DESC_IDX_START + player.POINT_CRITICAL_PCT : ("TOOLTIP_APPLY_CRITICAL_PCT", "d:/ymir work/ui/skill/common/affect/critical.sub"), + MALL_DESC_IDX_START + player.POINT_PENETRATE_PCT : ("TOOLTIP_APPLY_PENETRATE_PCT", "d:/ymir work/ui/skill/common/affect/gold_premium.sub"), + MALL_DESC_IDX_START + player.POINT_MAX_HP_PCT : ("TOOLTIP_MAX_HP_PCT", "d:/ymir work/ui/skill/common/affect/gold_premium.sub"), + MALL_DESC_IDX_START + player.POINT_MAX_SP_PCT : ("TOOLTIP_MAX_SP_PCT", "d:/ymir work/ui/skill/common/affect/gold_premium.sub"), + MALL_DESC_IDX_START + player.POINT_PC_BANG_EXP_BONUS : ("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 : ("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",), + MALL_DESC_IDX_START + player.POINT_ATT_SPEED : ("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: - # Dragon Soul Sky Deck, Ground Deck. - 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_DECK2] = (localeInfo.TOOLTIP_DRAGON_SOUL_DECK2, "d:/ymir work/ui/dragonsoul/buff_ds_land1.tga") + _AFFECT_TEMPLATE[chr.NEW_AFFECT_DRAGON_SOUL_DECK1] = ("TOOLTIP_DRAGON_SOUL_DECK1", "d:/ymir work/ui/dragonsoul/buff_ds_sky1.tga") + _AFFECT_TEMPLATE[chr.NEW_AFFECT_DRAGON_SOUL_DECK2] = ("TOOLTIP_DRAGON_SOUL_DECK2", "d:/ymir work/ui/dragonsoul/buff_ds_land1.tga") + + AFFECT_DATA_DICT = {} # populated by _RebuildLocaleStrings() + + @staticmethod + def _RebuildLocaleStrings(): + d = {} + for key, (attrName, path) in AffectShower._AFFECT_TEMPLATE.items(): + d[key] = (getattr(localeInfo, attrName), path) + AffectShower.AFFECT_DATA_DICT = d + for inst in AffectShower._liveInstances: + inst.RefreshLocale() + + def RefreshLocale(self): + for affect, image in list(self.affectImageDict.items()): + if affect not in self.AFFECT_DATA_DICT: + continue + name = self.AFFECT_DATA_DICT[affect][0] + skillIndex = player.AffectIndexToSkillIndex(affect) + if 0 != skillIndex: + name = skill.GetSkillName(skillIndex) + if image.IsSkillAffect(): + image.SetToolTipText(name, 0, 40) + else: + image.SetDescription(name) + image.UpdateDescription() def __init__(self): ui.Window.__init__(self) + AffectShower._liveInstances.add(self) self.serverPlayTime = 0 self.clientPlayTime = 0 @@ -1026,3 +1044,5 @@ class AffectShower(ui.Window): print(("AffectShower::OnUpdate error : ", e)) # MR-12: -- END OF -- Fix realtime countdown auto-start +AffectShower._RebuildLocaleStrings() +localeInfo.RegisterReloadCallback(AffectShower._RebuildLocaleStrings)