diff --git a/bin/pack/ETC/ymir work/ui/game/costume_button_01.tga b/bin/pack/ETC/ymir work/ui/game/costume_button_01.tga deleted file mode 100644 index 7ed6e268..00000000 Binary files a/bin/pack/ETC/ymir work/ui/game/costume_button_01.tga and /dev/null differ diff --git a/bin/pack/ETC/ymir work/ui/game/costume_button_02.tga b/bin/pack/ETC/ymir work/ui/game/costume_button_02.tga deleted file mode 100644 index c326b92f..00000000 Binary files a/bin/pack/ETC/ymir work/ui/game/costume_button_02.tga and /dev/null differ diff --git a/bin/pack/ETC/ymir work/ui/game/costume_button_03.tga b/bin/pack/ETC/ymir work/ui/game/costume_button_03.tga deleted file mode 100644 index c1bcd1b2..00000000 Binary files a/bin/pack/ETC/ymir work/ui/game/costume_button_03.tga and /dev/null differ diff --git a/bin/pack/ETC/ymir work/ui/game/taskbar/mall_button_01.tga b/bin/pack/ETC/ymir work/ui/game/taskbar/mall_button_01.tga deleted file mode 100644 index 4aef5a45..00000000 Binary files a/bin/pack/ETC/ymir work/ui/game/taskbar/mall_button_01.tga and /dev/null differ diff --git a/bin/pack/ETC/ymir work/ui/game/taskbar/mall_button_02.tga b/bin/pack/ETC/ymir work/ui/game/taskbar/mall_button_02.tga deleted file mode 100644 index 4c1f8273..00000000 Binary files a/bin/pack/ETC/ymir work/ui/game/taskbar/mall_button_02.tga and /dev/null differ diff --git a/bin/pack/ETC/ymir work/ui/game/taskbar/mall_button_03.tga b/bin/pack/ETC/ymir work/ui/game/taskbar/mall_button_03.tga deleted file mode 100644 index e858f119..00000000 Binary files a/bin/pack/ETC/ymir work/ui/game/taskbar/mall_button_03.tga and /dev/null differ diff --git a/bin/pack/etc/ymir work/ui/form_lang_01.dds b/bin/pack/etc/ymir work/ui/form_lang_01.dds new file mode 100644 index 00000000..e120cb1a Binary files /dev/null and b/bin/pack/etc/ymir work/ui/form_lang_01.dds differ diff --git a/bin/pack/etc/ymir work/ui/pattern/border_a_bottom.tga b/bin/pack/etc/ymir work/ui/pattern/border_a_bottom.tga new file mode 100644 index 00000000..292748ef Binary files /dev/null and b/bin/pack/etc/ymir work/ui/pattern/border_a_bottom.tga differ diff --git a/bin/pack/etc/ymir work/ui/pattern/border_a_center.tga b/bin/pack/etc/ymir work/ui/pattern/border_a_center.tga new file mode 100644 index 00000000..c8a4abdf Binary files /dev/null and b/bin/pack/etc/ymir work/ui/pattern/border_a_center.tga differ diff --git a/bin/pack/etc/ymir work/ui/pattern/border_a_left.tga b/bin/pack/etc/ymir work/ui/pattern/border_a_left.tga new file mode 100644 index 00000000..28ecbbf0 Binary files /dev/null and b/bin/pack/etc/ymir work/ui/pattern/border_a_left.tga differ diff --git a/bin/pack/etc/ymir work/ui/pattern/border_a_left_bottom.tga b/bin/pack/etc/ymir work/ui/pattern/border_a_left_bottom.tga new file mode 100644 index 00000000..62561e8e Binary files /dev/null and b/bin/pack/etc/ymir work/ui/pattern/border_a_left_bottom.tga differ diff --git a/bin/pack/etc/ymir work/ui/pattern/border_a_left_top.tga b/bin/pack/etc/ymir work/ui/pattern/border_a_left_top.tga new file mode 100644 index 00000000..c8f13d66 Binary files /dev/null and b/bin/pack/etc/ymir work/ui/pattern/border_a_left_top.tga differ diff --git a/bin/pack/etc/ymir work/ui/pattern/border_a_right.tga b/bin/pack/etc/ymir work/ui/pattern/border_a_right.tga new file mode 100644 index 00000000..c678c850 Binary files /dev/null and b/bin/pack/etc/ymir work/ui/pattern/border_a_right.tga differ diff --git a/bin/pack/etc/ymir work/ui/pattern/border_a_right_bottom.tga b/bin/pack/etc/ymir work/ui/pattern/border_a_right_bottom.tga new file mode 100644 index 00000000..e9ff6e6f Binary files /dev/null and b/bin/pack/etc/ymir work/ui/pattern/border_a_right_bottom.tga differ diff --git a/bin/pack/etc/ymir work/ui/pattern/border_a_right_top.tga b/bin/pack/etc/ymir work/ui/pattern/border_a_right_top.tga new file mode 100644 index 00000000..d92c437a Binary files /dev/null and b/bin/pack/etc/ymir work/ui/pattern/border_a_right_top.tga differ diff --git a/bin/pack/etc/ymir work/ui/pattern/border_a_top.tga b/bin/pack/etc/ymir work/ui/pattern/border_a_top.tga new file mode 100644 index 00000000..2e7092fc Binary files /dev/null and b/bin/pack/etc/ymir work/ui/pattern/border_a_top.tga differ diff --git a/bin/pack/etc/ymir work/ui/quest_re/button_bottom.sub b/bin/pack/etc/ymir work/ui/quest_re/button_bottom.sub new file mode 100644 index 00000000..ae5d8503 --- /dev/null +++ b/bin/pack/etc/ymir work/ui/quest_re/button_bottom.sub @@ -0,0 +1,7 @@ +title subImage +version 1.0 +image "form_lang_01.dds" +left 0 +top 32 +right 210 +bottom 48 diff --git a/bin/pack/etc/ymir work/ui/quest_re/button_middle.sub b/bin/pack/etc/ymir work/ui/quest_re/button_middle.sub new file mode 100644 index 00000000..8f5c973e --- /dev/null +++ b/bin/pack/etc/ymir work/ui/quest_re/button_middle.sub @@ -0,0 +1,7 @@ +title subImage +version 1.0 +image "form_lang_01.dds" +left 0 +top 16 +right 210 +bottom 32 diff --git a/bin/pack/etc/ymir work/ui/quest_re/button_one.sub b/bin/pack/etc/ymir work/ui/quest_re/button_one.sub new file mode 100644 index 00000000..cf58d54c --- /dev/null +++ b/bin/pack/etc/ymir work/ui/quest_re/button_one.sub @@ -0,0 +1,7 @@ +title subImage +version 1.0 +image "form_lang_01.dds" +left 0 +top 68 +right 210 +bottom 84 diff --git a/bin/pack/etc/ymir work/ui/quest_re/button_over.sub b/bin/pack/etc/ymir work/ui/quest_re/button_over.sub new file mode 100644 index 00000000..966e0a76 --- /dev/null +++ b/bin/pack/etc/ymir work/ui/quest_re/button_over.sub @@ -0,0 +1,7 @@ +title subImage +version 1.0 +image "form_lang_01.dds" +left 0 +top 50 +right 210 +bottom 66 diff --git a/bin/pack/etc/ymir work/ui/quest_re/button_top.sub b/bin/pack/etc/ymir work/ui/quest_re/button_top.sub new file mode 100644 index 00000000..2b323113 --- /dev/null +++ b/bin/pack/etc/ymir work/ui/quest_re/button_top.sub @@ -0,0 +1,7 @@ +title subImage +version 1.0 +image "form_lang_01.dds" +left 0 +top 0 +right 210 +bottom 16 diff --git a/bin/pack/etc/ymir work/ui/quest_re/quest_down.tga b/bin/pack/etc/ymir work/ui/quest_re/quest_down.tga new file mode 100644 index 00000000..421dc88b Binary files /dev/null and b/bin/pack/etc/ymir work/ui/quest_re/quest_down.tga differ diff --git a/bin/pack/etc/ymir work/ui/quest_re/quest_list_line_01.tga b/bin/pack/etc/ymir work/ui/quest_re/quest_list_line_01.tga new file mode 100644 index 00000000..6094bcec Binary files /dev/null and b/bin/pack/etc/ymir work/ui/quest_re/quest_list_line_01.tga differ diff --git a/bin/pack/etc/ymir work/ui/quest_re/quest_new.tga b/bin/pack/etc/ymir work/ui/quest_re/quest_new.tga new file mode 100644 index 00000000..fa3c5a66 Binary files /dev/null and b/bin/pack/etc/ymir work/ui/quest_re/quest_new.tga differ diff --git a/bin/pack/etc/ymir work/ui/quest_re/quest_tab_01.tga b/bin/pack/etc/ymir work/ui/quest_re/quest_tab_01.tga new file mode 100644 index 00000000..77835575 Binary files /dev/null and b/bin/pack/etc/ymir work/ui/quest_re/quest_tab_01.tga differ diff --git a/bin/pack/etc/ymir work/ui/quest_re/quest_up.tga b/bin/pack/etc/ymir work/ui/quest_re/quest_up.tga new file mode 100644 index 00000000..298fed5a Binary files /dev/null and b/bin/pack/etc/ymir work/ui/quest_re/quest_up.tga differ diff --git a/bin/pack/etc/ymir work/ui/quest_re/tabcolor_1_main.tga b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_1_main.tga new file mode 100644 index 00000000..4b50704b Binary files /dev/null and b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_1_main.tga differ diff --git a/bin/pack/etc/ymir work/ui/quest_re/tabcolor_2_sub.tga b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_2_sub.tga new file mode 100644 index 00000000..db2f3172 Binary files /dev/null and b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_2_sub.tga differ diff --git a/bin/pack/etc/ymir work/ui/quest_re/tabcolor_3_levelup.tga b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_3_levelup.tga new file mode 100644 index 00000000..d123e62a Binary files /dev/null and b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_3_levelup.tga differ diff --git a/bin/pack/etc/ymir work/ui/quest_re/tabcolor_4_event.tga b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_4_event.tga new file mode 100644 index 00000000..d5afabe1 Binary files /dev/null and b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_4_event.tga differ diff --git a/bin/pack/etc/ymir work/ui/quest_re/tabcolor_5_collection.tga b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_5_collection.tga new file mode 100644 index 00000000..b92c93a1 Binary files /dev/null and b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_5_collection.tga differ diff --git a/bin/pack/etc/ymir work/ui/quest_re/tabcolor_6_system.tga b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_6_system.tga new file mode 100644 index 00000000..64fce9bb Binary files /dev/null and b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_6_system.tga differ diff --git a/bin/pack/etc/ymir work/ui/quest_re/tabcolor_7_scroll.tga b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_7_scroll.tga new file mode 100644 index 00000000..91342a1a Binary files /dev/null and b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_7_scroll.tga differ diff --git a/bin/pack/etc/ymir work/ui/quest_re/tabcolor_8_daily.tga b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_8_daily.tga new file mode 100644 index 00000000..98b21bdc Binary files /dev/null and b/bin/pack/etc/ymir work/ui/quest_re/tabcolor_8_daily.tga differ diff --git a/bin/pack/icon/icon/item/scroll_close_blue.tga b/bin/pack/icon/icon/item/scroll_close_blue.tga new file mode 100644 index 00000000..48a0c051 Binary files /dev/null and b/bin/pack/icon/icon/item/scroll_close_blue.tga differ diff --git a/bin/pack/icon/icon/item/scroll_open_blue.tga b/bin/pack/icon/icon/item/scroll_open_blue.tga new file mode 100644 index 00000000..22db401d Binary files /dev/null and b/bin/pack/icon/icon/item/scroll_open_blue.tga differ diff --git a/bin/pack/locale_cz/locale/cz/locale_interface.txt b/bin/pack/locale_cz/locale/cz/locale_interface.txt index a95892cf..fa3abc00 100644 --- a/bin/pack/locale_cz/locale/cz/locale_interface.txt +++ b/bin/pack/locale_cz/locale/cz/locale_interface.txt @@ -343,3 +343,11 @@ WHISPER_REPORT WHISPER_SEND Poslat YES Ano ZONE_MAP Velk mapa +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/locale_de/locale/de/locale_interface.txt b/bin/pack/locale_de/locale/de/locale_interface.txt index 63702a3e..d243f601 100644 --- a/bin/pack/locale_de/locale/de/locale_interface.txt +++ b/bin/pack/locale_de/locale/de/locale_interface.txt @@ -324,3 +324,11 @@ WHISPER_REPORT report WHISPER_SEND Senden YES Ja ZONE_MAP bersichtskarte +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/locale_dk/locale/dk/locale_interface.txt b/bin/pack/locale_dk/locale/dk/locale_interface.txt index ce9506a6..0afec362 100644 --- a/bin/pack/locale_dk/locale/dk/locale_interface.txt +++ b/bin/pack/locale_dk/locale/dk/locale_interface.txt @@ -343,3 +343,11 @@ WHISPER_REPORT WHISPER_SEND Send YES Ja ZONE_MAP Stort kort +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/locale_en/locale/en/locale_interface.txt b/bin/pack/locale_en/locale/en/locale_interface.txt index 19e06c94..0c3c73b6 100644 --- a/bin/pack/locale_en/locale/en/locale_interface.txt +++ b/bin/pack/locale_en/locale/en/locale_interface.txt @@ -324,3 +324,11 @@ WHISPER_REPORT WHISPER_SEND Send YES Yes ZONE_MAP Large Map +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/locale_es/locale/es/locale_interface.txt b/bin/pack/locale_es/locale/es/locale_interface.txt index dd2ac154..fa1d99d5 100644 --- a/bin/pack/locale_es/locale/es/locale_interface.txt +++ b/bin/pack/locale_es/locale/es/locale_interface.txt @@ -343,3 +343,11 @@ WHISPER_REPORT WHISPER_SEND Enviar YES S ZONE_MAP Mapa grande +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/locale_fr/locale/fr/locale_game.txt b/bin/pack/locale_fr/locale/fr/locale_game.txt index 8a01ce43..ae1bc0fa 100644 --- a/bin/pack/locale_fr/locale/fr/locale_game.txt +++ b/bin/pack/locale_fr/locale/fr/locale_game.txt @@ -810,3 +810,11 @@ UPLOAD_MARK_CHECK_NEED_RECONNECT Le t UPLOAD_MARK_UPLOAD_NEED_RECONNECT Le tlchargement doit tre recommencer. USE_ITEM_FAILURE_PRIVATE_SHOP Vous ne pouvez pas utiliser d'objet tant que votre magasin priv est ouvert. USE_SKILL_ERROR_UNKNOWN Erreur comptence inconnue: %s +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/locale_gr/locale/gr/locale_interface.txt b/bin/pack/locale_gr/locale/gr/locale_interface.txt index 1eaf6d76..788db552 100644 --- a/bin/pack/locale_gr/locale/gr/locale_interface.txt +++ b/bin/pack/locale_gr/locale/gr/locale_interface.txt @@ -343,3 +343,11 @@ WHISPER_REPORT WHISPER_SEND YES ZONE_MAP +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/locale_hu/locale/hu/locale_interface.txt b/bin/pack/locale_hu/locale/hu/locale_interface.txt index 167eacf4..05b62117 100644 --- a/bin/pack/locale_hu/locale/hu/locale_interface.txt +++ b/bin/pack/locale_hu/locale/hu/locale_interface.txt @@ -324,3 +324,11 @@ WHISPER_REPORT WHISPER_SEND Kld YES Igen ZONE_MAP Nagy trkp +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/locale_it/locale/it/locale_interface.txt b/bin/pack/locale_it/locale/it/locale_interface.txt index 706317e9..2d336b1b 100644 --- a/bin/pack/locale_it/locale/it/locale_interface.txt +++ b/bin/pack/locale_it/locale/it/locale_interface.txt @@ -343,3 +343,11 @@ WHISPER_REPORT WHISPER_SEND Invia YES S. ZONE_MAP Mappa grande +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/locale_nl/locale/nl/locale_interface.txt b/bin/pack/locale_nl/locale/nl/locale_interface.txt index c388fa12..3367b56e 100644 --- a/bin/pack/locale_nl/locale/nl/locale_interface.txt +++ b/bin/pack/locale_nl/locale/nl/locale_interface.txt @@ -343,3 +343,11 @@ WHISPER_REPORT Report WHISPER_SEND Stuur YES Ja ZONE_MAP Grote Map +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/locale_pl/locale/pl/locale_interface.txt b/bin/pack/locale_pl/locale/pl/locale_interface.txt index 42a1750a..ca079b5d 100644 --- a/bin/pack/locale_pl/locale/pl/locale_interface.txt +++ b/bin/pack/locale_pl/locale/pl/locale_interface.txt @@ -343,3 +343,11 @@ WHISPER_REPORT WHISPER_SEND Wylij YES Tak ZONE_MAP Podgld Mapy +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/locale_pt/locale/pt/locale_interface.txt b/bin/pack/locale_pt/locale/pt/locale_interface.txt index 0b8289a3..863c614f 100644 --- a/bin/pack/locale_pt/locale/pt/locale_interface.txt +++ b/bin/pack/locale_pt/locale/pt/locale_interface.txt @@ -343,3 +343,11 @@ WHISPER_REPORT WHISPER_SEND Enviar YES Sim ZONE_MAP Mapa Grande +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/locale_ro/locale/ro/locale_interface.txt b/bin/pack/locale_ro/locale/ro/locale_interface.txt index 2e1a4bbd..7c0bbba9 100644 --- a/bin/pack/locale_ro/locale/ro/locale_interface.txt +++ b/bin/pack/locale_ro/locale/ro/locale_interface.txt @@ -343,3 +343,11 @@ WHISPER_REPORT WHISPER_SEND Trimite YES Da ZONE_MAP Hart mare +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/locale_ru/locale/ru/locale_interface.txt b/bin/pack/locale_ru/locale/ru/locale_interface.txt index 148d4c60..5acbf2be 100644 --- a/bin/pack/locale_ru/locale/ru/locale_interface.txt +++ b/bin/pack/locale_ru/locale/ru/locale_interface.txt @@ -343,3 +343,11 @@ WHISPER_REPORT WHISPER_SEND YES ZONE_MAP +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/locale_tr/locale/tr/locale_interface.txt b/bin/pack/locale_tr/locale/tr/locale_interface.txt index f398a248..087dd115 100644 --- a/bin/pack/locale_tr/locale/tr/locale_interface.txt +++ b/bin/pack/locale_tr/locale/tr/locale_interface.txt @@ -343,3 +343,11 @@ WHISPER_REPORT WHISPER_SEND Gnder YES Evet ZONE_MAP Genel Grnm Haritas +QUEST_UI_TEXT_COLLECTION Biologist Quests +QUEST_UI_TEXT_DAILY Daily Quest +QUEST_UI_TEXT_EVENT Event Missions +QUEST_UI_TEXT_LEVELUP Hunting Mission +QUEST_UI_TEXT_MAIN Main Quests +QUEST_UI_TEXT_SCROLL Mission Book Quests +QUEST_UI_TEXT_SUB Side Quests +QUEST_UI_TEXT_SYSTEM Game Missions diff --git a/bin/pack/root/game.py b/bin/pack/root/game.py index b408fa2b..8d53c7b7 100644 --- a/bin/pack/root/game.py +++ b/bin/pack/root/game.py @@ -117,7 +117,7 @@ class GameWindow(ui.ScriptWindow): self.playerGauge = uiPlayerGauge.PlayerGauge(self) self.playerGauge.Hide() - #wj 2014.1.2. ESCŰ 켱 DropQuestionDialog . ó itemDropQuestionDialog Ǿ ʾ ERROR ߻Ͽ init ÿ ʱȭ Ŵ. + #wj 2014.1.2. ESCŰ�� ���� �� �켱������ DropQuestionDialog�� ������ �������. ������ ó���� itemDropQuestionDialog�� ����Ǿ� ���� �ʾ� ERROR�� �߻��Ͽ� init���� ����� ���ÿ� �ʱ�ȭ ��Ŵ. self.itemDropQuestionDialog = None self.__SetQuickSlotMode() @@ -226,7 +226,7 @@ class GameWindow(ui.ScriptWindow): exception.Abort("GameWindow.Open") # END_OF_START_GAME_ERROR_EXIT - # NPC ťý ִ ۵ ij + # NPC�� ť��ý������� ���� �� �ִ� �����۵��� ����� ij�� # ex) cubeInformation[20383] = [ {"rewordVNUM": 72723, "rewordCount": 1, "materialInfo": "101,1&102,2", "price": 999 }, ... ] self.cubeInformation = {} self.currentCubeNPC = 0 @@ -314,10 +314,10 @@ class GameWindow(ui.ScriptWindow): def __BuildKeyDict(self): onPressKeyDict = {} - ##PressKey ִ Ǵ Ű̴. + ##PressKey �� ������ �ִ� ���� ��� ����Ǵ� Ű�̴�. - ## Ű Կ ̿ȴ.( ڵ鵵 Կ ) - ## F12 Ŭ ׿ Ű̹Ƿ ʴ . + ## ���� ����Ű �����Կ� �̿�ȴ�.(���� ���ڵ鵵 �� ���Կ� ����) + ## F12 �� Ŭ�� ����׿� Ű�̹Ƿ� ���� �ʴ� �� ����. onPressKeyDict[app.DIK_1] = lambda : self.__PressNumKey(1) onPressKeyDict[app.DIK_2] = lambda : self.__PressNumKey(2) onPressKeyDict[app.DIK_3] = lambda : self.__PressNumKey(3) @@ -337,7 +337,7 @@ class GameWindow(ui.ScriptWindow): onPressKeyDict[app.DIK_SYSRQ] = lambda : self.SaveScreen() onPressKeyDict[app.DIK_SPACE] = lambda : self.StartAttack() - #ij ̵Ű + #ij���� �̵�Ű onPressKeyDict[app.DIK_UP] = lambda : self.MoveUp() onPressKeyDict[app.DIK_DOWN] = lambda : self.MoveDown() onPressKeyDict[app.DIK_LEFT] = lambda : self.MoveLeft() @@ -564,12 +564,12 @@ class GameWindow(ui.ScriptWindow): self.TextureNum.SetFontName(localeInfo.UI_DEF_FONT) self.TextureNum.SetPosition(wndMgr.GetScreenWidth() - 270, 100) - # Ʈ ׸ + # ������Ʈ �׸��� ���� self.ObjectNum = ui.TextLine() self.ObjectNum.SetFontName(localeInfo.UI_DEF_FONT) self.ObjectNum.SetPosition(wndMgr.GetScreenWidth() - 270, 120) - # þ߰Ÿ + # �þ߰Ÿ� self.ViewDistance = ui.TextLine() self.ViewDistance.SetFontName(localeInfo.UI_DEF_FONT) self.ViewDistance.SetPosition(0, 0) @@ -659,8 +659,15 @@ class GameWindow(ui.ScriptWindow): if self.interface: self.interface.RefreshSkill() - def RefreshQuest(self): - self.interface.RefreshQuest() + if app.ENABLE_QUEST_RENEWAL: + def RefreshQuest(self, quest_type, quest_index): + self.interface.RefreshQuest(quest_type, quest_index) + + def DeleteQuest(self, quest_type, quest_index): + self.interface.DeleteQuest(quest_type, quest_index) + else: + def RefreshQuest(self): + self.interface.RefreshQuest() def RefreshMessenger(self): self.interface.RefreshMessenger() @@ -1302,7 +1309,7 @@ class GameWindow(ui.ScriptWindow): self.__DropMoney(attachedType, attachedMoney) def __DropMoney(self, attachedType, attachedMoney): - # PRIVATESHOP_DISABLE_ITEM_DROP - λ ִ + # PRIVATESHOP_DISABLE_ITEM_DROP - ���λ��� ���� �ִ� ���� ������ ���� ���� if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return @@ -1324,7 +1331,7 @@ class GameWindow(ui.ScriptWindow): self.itemDropQuestionDialog = itemDropQuestionDialog def __DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount): - # PRIVATESHOP_DISABLE_ITEM_DROP - λ ִ + # PRIVATESHOP_DISABLE_ITEM_DROP - ���λ��� ���� �ִ� ���� ������ ���� ���� if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return @@ -1456,7 +1463,7 @@ class GameWindow(ui.ScriptWindow): def UpdateDebugInfo(self): # - # ij ǥ FPS + # ij���� ��ǥ �� FPS ��� (x, y, z) = player.GetMainCharacterPosition() nUpdateTime = app.GetUpdateTime() nUpdateFPS = app.GetUpdateFPS() @@ -1619,22 +1626,22 @@ class GameWindow(ui.ScriptWindow): def BINARY_Cube_Close(self): self.interface.CloseCubeWindow() - # ۿ ʿ , Ǵ ϼǰ VNUM update + # ���ۿ� �ʿ��� ���, ����Ǵ� �ϼ�ǰ�� VNUM�� ���� ���� update def BINARY_Cube_UpdateInfo(self, gold, itemVnum, count): self.interface.UpdateCubeInfo(gold, itemVnum, count) def BINARY_Cube_Succeed(self, itemVnum, count): - print "ť " + print "ť�� ���� ����" self.interface.SucceedCubeWork(itemVnum, count) pass def BINARY_Cube_Failed(self): - print "ť " + print "ť�� ���� ����" self.interface.FailedCubeWork() pass def BINARY_Cube_ResultList(self, npcVNUM, listText): - # ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 ̷ "/" ڷ е Ʈ + # ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 �̷������� "/" ���ڷ� ���е� ����Ʈ�� �� #print listText if npcVNUM == 0: @@ -1735,7 +1742,7 @@ class GameWindow(ui.ScriptWindow): # END_OF_CUBE - # ȥ + # ��ȥ�� def BINARY_Highlight_Item(self, inven_type, inven_pos): self.interface.Highligt_Item(inven_type, inven_pos) diff --git a/bin/pack/root/interfacemodule.py b/bin/pack/root/interfacemodule.py index 6c468aab..5f444c7e 100644 --- a/bin/pack/root/interfacemodule.py +++ b/bin/pack/root/interfacemodule.py @@ -45,6 +45,9 @@ import uiScriptLocale import event import localeInfo +if app.ENABLE_QUEST_RENEWAL: + import quest + IsQBHide = 0 class Interface(object): CHARACTER_STATUS_TAB = 1 @@ -277,7 +280,7 @@ class Interface(object): self.wndItemSelect = uiselectitem.SelectItemWindow() self.wndItemSelect.Hide() # END_OF_ACCESSORY_REFINE_ADD_METIN_STONE - + def MakeInterface(self): self.__MakeMessengerWindow() self.__MakeGuildWindow() @@ -294,13 +297,14 @@ class Interface(object): self.__MakeWebWindow() self.__MakeCubeWindow() self.__MakeCubeResultWindow() - - + # ACCESSORY_REFINE_ADD_METIN_STONE self.__MakeItemSelectWindow() # END_OF_ACCESSORY_REFINE_ADD_METIN_STONE self.questButtonList = [] + if app.ENABLE_QUEST_RENEWAL: + self.__MakeQuestButton() self.whisperButtonList = [] self.whisperDialogDict = {} self.privateShopAdvertisementBoardDict = {} @@ -564,12 +568,13 @@ class Interface(object): if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.RefreshItemSlot() - def RefreshCharacter(self): ## Character , Inventory ׸ Refresh + def RefreshCharacter(self): ## Character �������� ��, Inventory �������� ���� �׸� ���� Refresh self.wndCharacter.RefreshCharacter() self.wndTaskBar.RefreshQuickSlot() - def RefreshQuest(self): - self.wndCharacter.RefreshQuest() + if not app.ENABLE_QUEST_RENEWAL: + def RefreshQuest(self): + self.wndCharacter.RefreshQuest() def RefreshSafebox(self): self.wndSafebox.RefreshSafebox() @@ -690,7 +695,7 @@ class Interface(object): def RemovePartyMember(self, pid): self.wndParty.RemovePartyMember(pid) - ##!! 20061026.levites.Ʈ_ġ_ + ##!! 20061026.levites.����Ʈ_��ġ_���� self.__ArrangeQuestButton() def LinkPartyMember(self, pid, vid): @@ -705,7 +710,7 @@ class Interface(object): def ExitParty(self): self.wndParty.ExitParty() - ##!! 20061026.levites.Ʈ_ġ_ + ##!! 20061026.levites.����Ʈ_��ġ_���� self.__ArrangeQuestButton() def PartyHealReady(self): @@ -868,7 +873,7 @@ class Interface(object): if True == self.wndChat.IsEditMode(): self.wndChat.CloseChat() else: - # ä Է ȵ + # ���������� ���������� ä�� �Է��� �ȵ� if self.wndWeb and self.wndWeb.IsShow(): pass else: @@ -969,7 +974,7 @@ class Interface(object): else: self.wndExpandedTaskBar.Close() - # ȥ + # ��ȥ�� def DragonSoulActivate(self, deck): if app.ENABLE_DRAGON_SOUL_SYSTEM: self.wndDragonSoul.ActivateDragonSoulByExtern(deck) @@ -1040,7 +1045,7 @@ class Interface(object): if True == self.wndDragonSoulRefine.IsShow(): self.wndDragonSoulRefine.Close() - # ȥ + # ��ȥ�� �� def ToggleGuildWindow(self): if not self.wndGuild.IsShow(): @@ -1090,7 +1095,7 @@ class Interface(object): def OpenWebWindow(self, url): self.wndWeb.Open(url) - # ä ݴ´ + # ���������� ���� ä���� �ݴ´� self.wndChat.CloseChat() # show GIFT @@ -1118,9 +1123,9 @@ class Interface(object): def SucceedCubeWork(self, itemVnum, count): self.wndCube.Clear() - print "ť ! [%d:%d]" % (itemVnum, count) + print "ť�� ���� ����! [%d:%d]" % (itemVnum, count) - if 0: # ޽ Ѵ + if 0: # ��� �޽��� ����� ���� �Ѵ� self.wndCubeResult.SetPosition(*self.wndCube.GetGlobalPosition()) self.wndCubeResult.SetCubeResultItem(itemVnum, count) self.wndCubeResult.Open() @@ -1263,119 +1268,197 @@ class Interface(object): ##################################################################################### ##################################################################################### - ### Quest ### - def BINARY_ClearQuest(self, index): - btn = self.__FindQuestButton(index) - if 0 != btn: - self.__DestroyQuestButton(btn) - - def RecvQuest(self, index, name): - # QUEST_LETTER_IMAGE - self.BINARY_RecvQuest(index, name, "file", localeInfo.GetLetterImageName()) - # END_OF_QUEST_LETTER_IMAGE + ### Quest ### + if app.ENABLE_QUEST_RENEWAL: + def RefreshQuest(self, quest_type, quest_index): + self.wndCharacter.RefreshQuest(quest_type, quest_index) - def BINARY_RecvQuest(self, index, name, iconType, iconName): + # Refresh quest button. + self.__RefreshQuestButton() - btn = self.__FindQuestButton(index) - if 0 != btn: + def DeleteQuest(self, quest_type, quest_index): + self.wndCharacter.DeleteQuest(quest_type, quest_index) + + # Unused. + def ShowQuestButton(self): + pass + + def __OnClickQuestLetterButton(self, btn): + self.OpenCharacterWindowWithState("QUEST") + + if btn.type == quest.QUEST_TYPE_EVENT: + self.wndCharacter.OpenQuestCategory(quest.QUEST_TYPE_EVENT, True) + + self.HideAllQuestButton() + global IsQBHide + IsQBHide = 1 + + def __MakeQuestButton(self): + btn = uiWhisper.WhisperButton() + btn.SetUpVisual(localeInfo.GetLetterCloseImageName()) + btn.SetOverVisual(localeInfo.GetLetterOpenImageName()) + btn.SetDownVisual(localeInfo.GetLetterOpenImageName()) + btn.SetEvent(ui.__mem_func__(self.__OnClickQuestLetterButton), btn) + btn.Hide() + btn.type = quest.QUEST_TYPE_MAX + btn.count = 0 + self.questButtonList.append(btn) + + # Used for event quests in order to highlight it. + btn = uiWhisper.WhisperButton() + btn.SetUpVisual(localeInfo.GetBlueLetterImageName()) + btn.SetOverVisual(localeInfo.GetBlueLetterOpenImageName()) + btn.SetDownVisual(localeInfo.GetBlueLetterOpenImageName()) + btn.SetEvent(ui.__mem_func__(self.__OnClickQuestLetterButton), btn) + btn.Hide() + btn.type = quest.QUEST_TYPE_EVENT + btn.count = 0 + self.questButtonList.append(btn) + + self.__ArrangeQuestButton() + + def __ArrangeQuestButton(self): + screen_width = wndMgr.GetScreenWidth() + screen_height = wndMgr.GetScreenHeight() + + x = 100 + 30 if self.wndParty.IsShow() else 20 + if localeInfo.IsARABIC(): + x += 15 + + y = 170 * screen_height / 600 + y_count = (screen_height - 330) / 63 + + for count, btn in enumerate(self.questButtonList): + btn.SetPosition(x + (int(count / y_count) * 100), y + (count % y_count * 63)) + btn.SetToolTipText(str(btn.count), 0, 35) + + global IsQBHide + if IsQBHide: + btn.Hide() + else: + if btn.count > 0: + btn.Show() + + def __RefreshQuestButton(self): + for btn in self.questButtonList: + btn.count = quest.GetQuestButtonNoticeCount(btn.type) + self.__ArrangeQuestButton() + else: + def BINARY_ClearQuest(self, index): + btn = self.__FindQuestButton(index) + if 0 != btn: + self.__DestroyQuestButton(btn) + + def RecvQuest(self, index, name): + # QUEST_LETTER_IMAGE + self.BINARY_RecvQuest(index, name, "file", localeInfo.GetLetterImageName()) + # END_OF_QUEST_LETTER_IMAGE + + def BINARY_RecvQuest(self, index, name, iconType, iconName): + btn = self.__FindQuestButton(index) + if 0 != btn: + self.__DestroyQuestButton(btn) + + btn = uiWhisper.WhisperButton() + + # QUEST_LETTER_IMAGE + ## !! 20061026.levites.Äù½ºÆ®_À̹ÌÁö_±³Ã¼ + import item + if "item" == iconType: + item.SelectItem(int(iconName)) + buttonImageFileName = item.GetIconImageFileName() + else: + buttonImageFileName = iconName + + if localeInfo.IsEUROPE(): + if "highlight" == iconType: + btn.SetUpVisual("locale/ymir_ui/highlighted_quest.tga") + btn.SetOverVisual("locale/ymir_ui/highlighted_quest_r.tga") + btn.SetDownVisual("locale/ymir_ui/highlighted_quest_r.tga") + else: + btn.SetUpVisual(localeInfo.GetLetterCloseImageName()) + btn.SetOverVisual(localeInfo.GetLetterOpenImageName()) + btn.SetDownVisual(localeInfo.GetLetterOpenImageName()) + else: + btn.SetUpVisual(buttonImageFileName) + btn.SetOverVisual(buttonImageFileName) + btn.SetDownVisual(buttonImageFileName) + btn.Flash() + # END_OF_QUEST_LETTER_IMAGE + + if localeInfo.IsARABIC(): + btn.SetToolTipText(name, 0, 35) + btn.ToolTipText.SetHorizontalAlignCenter() + else: + btn.SetToolTipText(name, -20, 35) + btn.ToolTipText.SetHorizontalAlignLeft() + + btn.SetEvent(ui.__mem_func__(self.__StartQuest), btn) + btn.Show() + + btn.index = index + btn.name = name + + self.questButtonList.insert(0, btn) + self.__ArrangeQuestButton() + + #chat.AppendChat(chat.CHAT_TYPE_NOTICE, localeInfo.QUEST_APPEND) + + def __ArrangeQuestButton(self): + screenWidth = wndMgr.GetScreenWidth() + screenHeight = wndMgr.GetScreenHeight() + + ## !! 20061026.levites.Äù½ºÆ®_À§Ä¡_º¸Á¤ + if self.wndParty.IsShow(): + xPos = 100 + 30 + else: + xPos = 20 + + if localeInfo.IsARABIC(): + xPos = xPos + 15 + + yPos = 170 * screenHeight / 600 + yCount = (screenHeight - 330) / 63 + + count = 0 + for btn in self.questButtonList: + btn.SetPosition(xPos + (int(count / yCount) * 100), yPos + (count % yCount * 63)) + count += 1 + + global IsQBHide + if IsQBHide: + btn.Hide() + else: + btn.Show() + + def __StartQuest(self, btn): + event.QuestButtonClick(btn.index) self.__DestroyQuestButton(btn) - btn = uiWhisper.WhisperButton() + def __FindQuestButton(self, index): + for btn in self.questButtonList: + if btn.index == index: + return btn - # QUEST_LETTER_IMAGE - ##!! 20061026.levites.Ʈ_̹_ü - import item - if "item"==iconType: - item.SelectItem(int(iconName)) - buttonImageFileName=item.GetIconImageFileName() - else: - buttonImageFileName=iconName + return 0 - if localeInfo.IsEUROPE(): - if "highlight" == iconType: - btn.SetUpVisual("locale/ymir_ui/highlighted_quest.tga") - btn.SetOverVisual("locale/ymir_ui/highlighted_quest_r.tga") - btn.SetDownVisual("locale/ymir_ui/highlighted_quest_r.tga") - else: - btn.SetUpVisual(localeInfo.GetLetterCloseImageName()) - btn.SetOverVisual(localeInfo.GetLetterOpenImageName()) - btn.SetDownVisual(localeInfo.GetLetterOpenImageName()) - else: - btn.SetUpVisual(buttonImageFileName) - btn.SetOverVisual(buttonImageFileName) - btn.SetDownVisual(buttonImageFileName) - btn.Flash() - # END_OF_QUEST_LETTER_IMAGE - - if localeInfo.IsARABIC(): - btn.SetToolTipText(name, 0, 35) - btn.ToolTipText.SetHorizontalAlignCenter() - else: - btn.SetToolTipText(name, -20, 35) - btn.ToolTipText.SetHorizontalAlignLeft() - - btn.SetEvent(ui.__mem_func__(self.__StartQuest), btn) - btn.Show() - - btn.index = index - btn.name = name - - self.questButtonList.insert(0, btn) - self.__ArrangeQuestButton() - - #chat.AppendChat(chat.CHAT_TYPE_NOTICE, localeInfo.QUEST_APPEND) - - def __ArrangeQuestButton(self): - - screenWidth = wndMgr.GetScreenWidth() - screenHeight = wndMgr.GetScreenHeight() - - ##!! 20061026.levites.Ʈ_ġ_ - if self.wndParty.IsShow(): - xPos = 100 + 30 - else: - xPos = 20 - - if localeInfo.IsARABIC(): - xPos = xPos + 15 - - yPos = 170 * screenHeight / 600 - yCount = (screenHeight - 330) / 63 - - count = 0 - for btn in self.questButtonList: - - btn.SetPosition(xPos + (int(count/yCount) * 100), yPos + (count%yCount * 63)) - count += 1 - global IsQBHide - if IsQBHide: - btn.Hide() - else: - btn.Show() - - def __StartQuest(self, btn): - event.QuestButtonClick(btn.index) - self.__DestroyQuestButton(btn) - - def __FindQuestButton(self, index): - for btn in self.questButtonList: - if btn.index == index: - return btn - - return 0 - - def __DestroyQuestButton(self, btn): - btn.SetEvent(0) - self.questButtonList.remove(btn) - self.__ArrangeQuestButton() + def __DestroyQuestButton(self, btn): + btn.SetEvent(0) + self.questButtonList.remove(btn) + self.__ArrangeQuestButton() def HideAllQuestButton(self): for btn in self.questButtonList: btn.Hide() def ShowAllQuestButton(self): - for btn in self.questButtonList: - btn.Show() + if app.ENABLE_QUEST_RENEWAL: + for btn in self.questButtonList: + if btn.count > 0: + btn.Show() + else: + for btn in self.questButtonList: + btn.Show() ##################################################################################### ##################################################################################### @@ -1384,8 +1467,8 @@ class Interface(object): def __InitWhisper(self): chat.InitWhisper(self) - ## äâ "޽ " ̸ ȭâ Լ - ## ̸ WhisperDialogDict ȴ. + ## ä��â�� "�޽��� ������"�� �������� �̸� ���� ��ȭâ�� ���� �Լ� + ## �̸��� ���� ������ ������ WhisperDialogDict �� ������ �����ȴ�. def OpenWhisperDialogWithoutTarget(self): if not self.dlgWhisperWithoutTarget: dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog) @@ -1402,7 +1485,7 @@ class Interface(object): self.dlgWhisperWithoutTarget.SetTop() self.dlgWhisperWithoutTarget.OpenWithoutTarget(self.RegisterTemporaryWhisperDialog) - ## ̸ ȭâ ̸ WhisperDialogDict â ־ִ Լ + ## �̸� ���� ��ȭâ���� �̸��� ���������� WhisperDialogDict�� â�� �־��ִ� �Լ� def RegisterTemporaryWhisperDialog(self, name): if not self.dlgWhisperWithoutTarget: return @@ -1421,7 +1504,7 @@ class Interface(object): self.dlgWhisperWithoutTarget = None self.__CheckGameMaster(name) - ## ij ޴ 1:1 ȭ ϱ⸦ ̸ ٷ â Լ + ## ij���� �޴��� 1:1 ��ȭ �ϱ⸦ �������� �̸��� ������ �ٷ� â�� ���� �Լ� def OpenWhisperDialog(self, name): if not self.whisperDialogDict.has_key(name): dlg = self.__MakeWhisperDialog(name) @@ -1434,7 +1517,7 @@ class Interface(object): if 0 != btn: self.__DestroyWhisperButton(btn) - ## ٸ ijͷκ ޼ ޾ ϴ ư δ Լ + ## �ٸ� ij���ͷκ��� �޼����� �޾����� �ϴ� ��ư�� ��� �δ� �Լ� def RecvWhisper(self, name): if not self.whisperDialogDict.has_key(name): btn = self.__FindWhisperButton(name) @@ -1453,7 +1536,7 @@ class Interface(object): def MakeWhisperButton(self, name): self.__MakeWhisperButton(name) - ## ư â Լ + ## ��ư�� �������� â�� ���� �Լ� def ShowWhisperDialog(self, btn): try: self.__MakeWhisperDialog(btn.name) @@ -1465,11 +1548,11 @@ class Interface(object): import dbg dbg.TraceError("interface.ShowWhisperDialog - Failed to find key") - ## ư ʱȭ + ## ��ư �ʱ�ȭ self.__DestroyWhisperButton(btn) - ## WhisperDialog â ּȭ ȣǴ Լ - ## â ּȭ մϴ. + ## WhisperDialog â���� �ּ�ȭ ������ ���������� ȣ��Ǵ� �Լ� + ## â�� �ּ�ȭ �մϴ�. def MinimizeWhisperDialog(self, name): if 0 != name: @@ -1477,8 +1560,8 @@ class Interface(object): self.CloseWhisperDialog(name) - ## WhisperDialog â ݱ ȣǴ Լ - ## â ϴ. + ## WhisperDialog â���� �ݱ� ������ ���������� ȣ��Ǵ� �Լ� + ## â�� ����ϴ�. def CloseWhisperDialog(self, name): if 0 == name: @@ -1497,7 +1580,7 @@ class Interface(object): import dbg dbg.TraceError("interface.CloseWhisperDialog - Failed to find key") - ## ư ٲ ư ϴ Լ + ## ��ư�� ������ �ٲ������ ��ư�� ������ �ϴ� �Լ� def __ArrangeWhisperButton(self): screenWidth = wndMgr.GetScreenWidth() @@ -1514,9 +1597,9 @@ class Interface(object): button.SetPosition(xPos + (int(count/yCount) * -50), yPos + (count%yCount * 63)) count += 1 - ## ̸ Whisper ư ã ִ Լ - ## ư ųʸ ʴ Ǿ - ## ̷ ToolTip ٸ ư鿡 ̴. + ## �̸����� Whisper ��ư�� ã�� ������ �ִ� �Լ� + ## ��ư�� ��ųʸ��� ���� �ʴ� ���� ���� �Ǿ� ���� ������ ���� ���� ������ + ## �̷� ���� ToolTip���� �ٸ� ��ư�鿡 ���� �������� �����̴�. def __FindWhisperButton(self, name): for button in self.whisperButtonList: if button.name == name: @@ -1524,7 +1607,7 @@ class Interface(object): return 0 - ## â ϴ. + ## â�� ����ϴ�. def __MakeWhisperDialog(self, name): dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog) dlgWhisper.BindInterface(self) @@ -1536,7 +1619,7 @@ class Interface(object): return dlgWhisper - ## ư ϴ. + ## ��ư�� ����ϴ�. def __MakeWhisperButton(self, name): whisperButton = uiWhisper.WhisperButton() whisperButton.SetUpVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub") diff --git a/bin/pack/root/localeinfo.py b/bin/pack/root/localeinfo.py index aaafb02e..411949f4 100644 --- a/bin/pack/root/localeinfo.py +++ b/bin/pack/root/localeinfo.py @@ -1,9 +1,9 @@ import app import constInfo -MAP_TRENT02 = "MAP_TRENT02" # ӽ -MAP_WL = "MAP_WL" # ӽ -MAP_NUSLUCK = "MAP_NUSLUCK" # ӽ +MAP_TRENT02 = "MAP_TRENT02" # �ӽ� +MAP_WL = "MAP_WL" # �ӽ� +MAP_NUSLUCK = "MAP_NUSLUCK" # �ӽ� MAP_TREE2 = "MAP_TREE2" BLEND_POTION_NO_TIME = "BLEND_POTION_NO_TIME" @@ -23,7 +23,7 @@ CHANNEL_NOTIFY_FULL = "CHANNEL_NOTIFY_FULL" GUILD_BUILDING_LIST_TXT = app.GetLocalePath() + "/GuildBuildingList.txt" GUILD_MARK_MIN_LEVEL = "3" -GUILD_MARK_NOT_ENOUGH_LEVEL = "巹 3̻ մϴ." +GUILD_MARK_NOT_ENOUGH_LEVEL = "��巹�� 3�̻� ���� �����մϴ�." ERROR_MARK_UPLOAD_NEED_RECONNECT = "UploadMark: Reconnect to game" ERROR_MARK_CHECK_NEED_RECONNECT = "CheckMark: Reconnect to game" @@ -32,7 +32,7 @@ VIRTUAL_KEY_ALPHABET_LOWERS = r"[1234567890]/qwertyuiop\=asdfghjkl;`'zxcvbnm.," VIRTUAL_KEY_ALPHABET_UPPERS = r'{1234567890}?QWERTYUIOP|+ASDFGHJKL:~"ZXCVBNM<>' VIRTUAL_KEY_SYMBOLS = '!@#$%^&*()_+|{}:"<>?~' VIRTUAL_KEY_NUMBERS = "1234567890-=\[];',./`" -VIRTUAL_KEY_SYMBOLS_BR = '!@#$%^&*()_+|{}:"<>?~' +VIRTUAL_KEY_SYMBOLS_BR = '!@#$%^&*()_+|{}:"<>?~����������������' __IS_ENGLISH = "ENGLISH" == app.GetLocaleServiceName() __IS_HONGKONG = "HONGKONG" == app.GetLocaleServiceName() @@ -106,7 +106,7 @@ def IsWE_KOREA(): def LoadLocaleData(): if IsYMIR(): import net - SERVER = "赵 " + SERVER = "�赵 ����" if SERVER == net.GetServerInfo()[:len(SERVER)]: app.SetCHEONMA(0) app.LoadLocaleData("locale/we_korea") @@ -119,7 +119,7 @@ def LoadLocaleData(): app.LoadLocaleData(app.GetLocalePath()) def IsCHEONMA(): - return IsYMIR() # YMIR õ. õ ݱ . + return IsYMIR() # ���� YMIR �������� ������ õ��������. õ�������� ���� �ݱ� ������ ���� �� ����. # END_OF_SUPPORT_NEW_KOREA_SERVER @@ -181,13 +181,13 @@ elif IsSINGAPORE() : LOCALE_FILE_NAME = "%s/locale_game.txt" % app.GetLocalePath() constInfo.IN_GAME_SHOP_ENABLE = 0 elif IsNEWCIBN() : - ##Ӹ̱. - APP_TITLE = "2" + ##���Ӹ��̱�����. + APP_TITLE = "������2" FN_GM_MARK = "%s/effect/gm.mse" % app.GetLocalePath() LOCALE_FILE_NAME = "%s/locale_game.txt" % app.GetLocalePath() constInfo.IN_GAME_SHOP_ENABLE = 1 elif IsTAIWAN(): - APP_TITLE = "III" + APP_TITLE = "��III��" FN_GM_MARK = "%s/effect/gm.mse" % app.GetLocalePath() LOCALE_FILE_NAME = "%s/locale_game.txt" % app.GetLocalePath() @@ -202,31 +202,31 @@ else: LoadLocaleFile(LOCALE_FILE_NAME, locals()) ######################################################################################################## -## NOTE : "/ ðڽϱ?" ڿ ڵ +## NOTE : �������� ������ "������/�� �����ðڽ��ϱ�?" ���ڿ��� ���� ������ ���� �ڵ� dictSingleWord = { "m":1, "n":1, "r":1, "M":1, "N":1, "R":1, "l":1, "L":1, "1":1, "3":1, "6":1, "7":1, "8":1, "0":1, } dictDoubleWord = { - "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, - "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, - "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "v":1, "":1, "":1, "":1, "R":1, "":1, "":1, "":1, "":1, "":1, - "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, - "":1, "x":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, - "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "m":1, "":1, "":1, "":1, "O":1, "":1, "":1, "":1, "":1, "l":1, - "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, - "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, - "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "u":1, - "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, - "":1, "X":1, "":1, "":1, "":1, "":1, "":1, "o":1, "":1, "":1, "":1, "y":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, - "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, - "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "p":1, - "¥":1, "¹":1, "¼":1, "":1, "":1, "c":1, "":1, "":1, "":1, "":1, "°":1, "":1, "":1, "":1, "":1, "":1, "":1, "R":1, "":1, "":1, "n":1, - "":1, "í":1, "ó":1, "":1, "":1, "":1, "":1, "":1, "":1, "ġ":1, "ä":1, "":1, "ü":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "M":1, - "ī":1, "ļ":1, "Ŀ":1, "":1, "":1, "":1, "":1, "ť":1, "ũ":1, "Ű":1, "ij":1, "m":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, - "Ÿ":1, "":1, "":1, "":1, "":1, "":1, "":1, "Ʃ":1, "Ʈ":1, "Ƽ":1, "":1, "O":1, "":1, "":1, "":1, "":1, "":1, "ơ":1, "":1, "Ƣ":1, "Ʒ":1, - "":1, "":1, "":1, "":1, "":1, "ǥ":1, "Ǫ":1, "ǻ":1, "":1, "":1, "":1, "":1, "":1, "":1, "ǡ":1, "":1, "Ǵ":1, "R":1, "ǣ":1, "Ƕ":1, "c":1, - "":1, "":1, "":1, "":1, "ȣ":1, "ȿ":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "":1, "ȭ":1, "ȳ":1, "":1, "":1, "ȸ":1, "":1, "":1, + "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, + "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, + "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "�v":1, "��":1, "��":1, "��":1, "�R":1, "��":1, "��":1, "��":1, "��":1, "��":1, + "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, + "��":1, "�x":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, + "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "�m":1, "��":1, "��":1, "��":1, "�O":1, "��":1, "��":1, "��":1, "��":1, "�l":1, + "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, + "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, + "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "�u":1, + "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, + "��":1, "�X":1, "��":1, "��":1, "��":1, "��":1, "��":1, "�o":1, "��":1, "��":1, "��":1, "�y":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, + "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, + "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "�p":1, + "¥":1, "¹":1, "¼":1, "��":1, "��":1, "�c":1, "��":1, "��":1, "��":1, "��":1, "°":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "�R":1, "��":1, "��":1, "�n":1, + "��":1, "í":1, "ó":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "ġ":1, "ä":1, "��":1, "ü":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "�M":1, + "ī":1, "ļ":1, "Ŀ":1, "��":1, "��":1, "��":1, "��":1, "ť":1, "ũ":1, "Ű":1, "ij":1, "�m":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, + "Ÿ":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "Ʃ":1, "Ʈ":1, "Ƽ":1, "��":1, "�O":1, "��":1, "��":1, "��":1, "��":1, "��":1, "ơ":1, "��":1, "Ƣ":1, "Ʒ":1, + "��":1, "��":1, "��":1, "��":1, "��":1, "ǥ":1, "Ǫ":1, "ǻ":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "ǡ":1, "��":1, "Ǵ":1, "�R":1, "ǣ":1, "Ƕ":1, "�c":1, + "��":1, "��":1, "��":1, "��":1, "ȣ":1, "ȿ":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "��":1, "ȭ":1, "ȳ":1, "��":1, "��":1, "ȸ":1, "��":1, "��":1, } locale = mapping( @@ -415,129 +415,129 @@ JOBINFO_TITLE = [ JOBINFO_DATA_LIST = [ [ - ["Ÿ Ͱ ʴ ", - "ⰳ þ []", - "θ.  ⿡ ׵ ", - "ڷ , ġ ", - "̱ Ḧ ܽ", - " ο⵵ Ѵ. ̵", - " ܷõ , ݷ", - " ּο ", - "ȰѴ. ",], - [" Ϲ , ", - " ", - " ȰѴ. Ư ٷ", - " Ʈ ϵ, ", - " / ", - "Ȯ ü ø. ", - " Ȯ ̱ ø", - " Ʈ ʿ䰡 ִ.",], - [" ŷ ̿ϴ", - "/ٰŸ , ", - "ϳϳ ݷ 忡", - "ȰѴ. Ư ٷ ", - " Ʈ ϵ, ", - "/ٰŸ Ȯ ߷", - " ø ø. ", - " ݿ / ", - "Ȯ ü¿ Ʈ", - " ʿ䰡 ִ. ",], + ["Ÿ���� ��Ͱ� ������ �ʴ� ������", + "�ⰳ�� ������� ���þ� [����]���", + "�θ���. ��� ���⿡���� �׵��� ", + "�ڷ� �������� ������, ��ġ�� ����", + "�̱� ���� ���Ḧ ���� �ܽ�����", + "����� ���� �ο�⵵ �Ѵ�. �̵���", + "�� �ܷõ� ������ ��, ������ ���ݷ�", + "���� ���� �ּ��ο��� ����������", + "Ȱ���Ѵ�. ",], + ["���� �Ϲ����� ������ �����, ", + "�������� ���� ���� �������� ����", + "���� Ȱ���Ѵ�. ���� Ư���� �ٷ���", + "�������� ���� ����Ʈ�� �����ϵ�, ", + "�������� ���� ������ / ����", + "Ȯ���� ���� ü���� �ø���. ����", + "������ ��Ȯ���� ���̱� ���� ��ø", + "���� ����Ʈ�� ������ �ʿ䰡 �ִ�.",], + ["��� ������ ���ŷ��� �̿��ϴ�", + "��/�ٰŸ� ������ �����, �� ���", + "�ϳ��ϳ��� ���� ���ݷ����� ���忡��", + "Ȱ���Ѵ�. ���� Ư���� �ٷ��� ����", + "���� ���� ����Ʈ�� �����ϵ�, ", + "��/�ٰŸ� ������ ��Ȯ���� ���߷���", + "���� ��ø�� �ø���. ���� ���� �� ", + "�� ���ݿ� ���� ������ / ����", + "Ȯ���� ���� ü�¿��� ����Ʈ��", + "������ �ʿ䰡 �ִ�. ",], ], [ - ["ڰ  Ȳ ڽ", - " ӹ", - "ϸ鼭 ϴ", - "ڵ̴. ̵ ż", - "ϸ, ϰ ", - "ൿ ޼ҿ ġŸ ", - ", 忡 ", - "ȭ ڽ ", - "δ. "], - ["μ ܰ ֹ ٷ, ż", - "ϰ ġ ڰ Ư ", - " 忡 ȰѴ. Ư", - "ø Ʈ ", - "ϵ, ٷ ÷ ݷ δ.", - " / ", - " ü¿ Ʈ", - " ʿ䰡 ִ. ",], - ["Ȱ ֹ ٷ, þ߿", - "Ÿ Ÿ ", - "忡 ȰѴ. Ư", - " ø", - " ÷ ϸ, Ÿ", - " ٷ", - "ø ʿ䰡 ִ. 鿡", - "Ǿ , ݿ Ƽ", - " / ", - "ü¿ Ʈ ʿ䰡", - "ִ. ", ], + ["�ڰ��� ��� ��Ȳ������ �ڽ���", + "���� ����� ������ ����� �ӹ���", + "�����ϸ鼭 ������ ������ �����ϴ�", + "�ڵ��̴�. �̵��� ���� ������ �ż�", + "�ϸ�, ���� �� ���� �����ϰ� ������", + "�ൿ���� ���� �޼ҿ� ġ��Ÿ�� ����", + "��, ���忡�� ������ ���� ������", + "ȭ���� �������� �ڽ��� �����", + "�����δ�. "], + ["�μ� �ܰ��� �ֹ���� �ٷ��, �ż�", + "�ϰ� ġ�� ������ �ڰ� Ư���� ������", + "���� ���忡�� Ȱ���Ѵ�. ���� Ư����", + "��ø�� �������� ���� ����Ʈ�� ����", + "�ϵ�, �ٷ��� �÷� ���ݷ��� ���δ�.", + "���� �������� ���� ������/���� ", + "����� ���� ü�¿��� ����Ʈ��", + "������ �ʿ䰡 �ִ�. ",], + ["Ȱ�� �ֹ���� �ٷ��, �� �þ߿�", + "�����Ÿ��� ���� ���Ÿ� ��������", + "���忡�� Ȱ���Ѵ�. ���� Ư����", + "���� �������� ������ ���� ��ø��", + "�������� �÷��� �ϸ�, ���Ÿ�", + "������ ������ ������ ���� �ٷ���", + "�ø� �ʿ䰡 �ִ�. ���� ���鿡��", + "�����Ǿ��� ��, �� ���ݿ� ��Ƽ��", + "���� ������/���� ����� ����", + "ü�¿��� ����Ʈ�� ������ �ʿ䰡", + "�ִ�. ", ], ], [ - [" [ ] Ӽ", - "â Ư Ӽ ̴. ", - "׵ 忡 ⸦ ", - "Ű, Ǹ ź", - " ȥ . ", - "̵ ڽ ˰ ʿ ", - " Ǿ, 忡 ", - "ݷ ϱ⵵ ϴµ, ", - "׿± ", - " þ []̶", - "θ⸦ ɴ´."], - ["ȯ Ǹ ", - " ⳪ ", - "Ǿ ", - "忡 ȰѴ. Ư", - " ", - "Ǹ ǹǷ,", - "ɰ ٷ ", - "Ʈ ϵ, ", - "/ Ȯ ü", - "ø. Ȯ", - "ȸǸ ؼ ø Ʈ", - " ʿ䰡 ִ. ",], - ["渶 ", - "ֹ Ǹ 忡", - "ȰѴ. Ư ", - "̹Ƿ ", - "Ʈ ϵ, Ÿ ", - " Ȯ ø ø.", - " Ǿ, ݿ ", - " / Ȯ ü¿", - "Ʈ ʿ䰡 ִ. ",], + ["����� [���� ������]�� �Ӽ�����", + "â���� Ư�� �Ӽ��� �����̴�. ", + "�׵��� ���忡�� ������ ��⸦ ����", + "��Ű��, �Ǹ��� ���� ���� ��ź����", + "���� ��ȥ�� ������ ��������. ����", + "�̵��� �ڽ��� �˰� ���ʿ� �����", + "���� �Ǿ�, ���忡�� ���� ���� ����", + "���ݷ��� �����ϱ⵵ �ϴµ�, ������", + "�׿���±� ����� ������ ������", + "������� ���� ���þ� [����]�̶�", + "�θ��⸦ ���� �ɴ´�."], + ["ȯ������ ����� �Ǹ��� ������", + "������� ������ ���⳪ ����", + "�Ǿ� ���� ���� ���� ����������", + "���忡�� Ȱ���Ѵ�. ���� Ư����", + "������ ���������� ���� ���", + "�Ǹ��� ������ ������ ����ǹǷ�,", + "���ɰ� �ٷ��� �������� ����", + "����Ʈ�� �����ϵ�, ������ ����", + "������/���� Ȯ���� ���� ü����", + "�ø���. ���� ������ ��Ȯ����", + "ȸ�Ǹ� ���ؼ� ��ø���� ����Ʈ��", + "������ �ʿ䰡 �ִ�. ",], + ["�渶���� ������� ���� �����", + "�ֹ��� �Ǹ��� �������� ���忡��", + "Ȱ���Ѵ�. ���� Ư���� ���� ������", + "���̹Ƿ� ������ �������� ����", + "����Ʈ�� �����ϵ�, ���Ÿ� ����", + "������ ��Ȯ���� ���� ��ø�� �ø���.", + "���� ���� �Ǿ�����, �� ���ݿ� ����", + "������ / ���� Ȯ���� ���� ü�¿���", + "����Ʈ�� ������ �ʿ䰡 �ִ�. ",], ], [ - [" Ű ڿ, ", - " ٷ ִ ̴.", - "׵ Ĺ濡 Ʊ ϰ", - "ģ λ ȸ Ű", - " ⸦ ½Ų. ׵", - "Ʊ ޽ ϴ ڸ ", - " 뼭 , ׷ ڵ", - "Դ ֹ", - "Ʈ ¡Ѵ.",], - ["õ決 ", - "ֹ ϸ, / ", - "κ Ʊ Ų. ", - "Ư ɷ ̹Ƿ ", - " Ʈ ϵ,", - "Ǿ , ݿ ", - " / Ȯ ü", - "ø. Ÿ ", - "Ȯ ø Ʈ", - " ʿ䰡 ִ. ",], - ["ڱ ڿ ", - " Ʊ ȸϰ, ", - " 鿡 ū ", - " ִ ̵̴. ", - "Ư ɷ ̹Ƿ ", - " Ʈ ϵ,", - "Ǿ, ݿ ", - " / Ȯ ü", - "ø. Ÿ ", - "Ȯ ø Ʈ", - " ʿ䰡 ִ. "], + ["������ ��Ű� �ڿ�, �� ������", + "���� �ٷ� �� �ִ� ������ �����̴�.", + "�׵��� �Ĺ濡�� �Ʊ��� �����ϰ�", + "��ģ ������ �λ��� ȸ�� ��Ű��", + "������ ��⸦ ��½�Ų��. �׵���", + "�Ʊ��� ����� �޽��� �����ϴ� �ڸ� ", + "���� �뼭���� ������, �׷� �ڵ�", + "���Դ� �� �� ���� ���� �ֹ���", + "��Ʈ�� �� ������� ���� ¡���Ѵ�.",], + ["õ�決�� ������� ���� ��������", + "�����ֹ��� ���ϸ�, ���� �� / ����", + "�������κ��� �Ʊ��� ��Ų��. ����", + "Ư���� ���� �ɷ��� ���̹Ƿ� ������", + "�������� ���� ����Ʈ�� �����ϵ�,", + "�����Ǿ��� ��, �� ���ݿ� ����", + "������ / ���� Ȯ���� ���� ü����", + "�ø���. ���� ���Ÿ� ���� ������", + "��Ȯ���� ���� ��ø���� ����Ʈ��", + "������ �ʿ䰡 �ִ�. ",], + ["���ڱ��� ������� �ڿ��� ����", + "���� �Ʊ��� ȸ���ϰ�, ������ ", + "������ ������ ���鿡�� ū �����", + "���� �� �ִ� �̵��̴�. ������", + "Ư���� ���� �ɷ��� ���̹Ƿ� ������", + "�������� ���� ����Ʈ�� �����ϵ�,", + "�����Ǿ�����, �� ���ݿ� ����", + "������ / ���� Ȯ���� ���� ü����", + "�ø���. ���� ���Ÿ� ���� ������", + "��Ȯ���� ���� ��ø���� ����Ʈ��", + "������ �ʿ䰡 �ִ�. "], ], ] @@ -628,140 +628,148 @@ def GetLetterOpenImageName(): def GetLetterCloseImageName(): return "season1/icon/scroll_close.tga" +if app.ENABLE_QUEST_RENEWAL: + def GetBlueLetterImageName(): + return "icon/item/scroll_close_blue.tga" + def GetBlueLetterOpenImageName(): + return "icon/item/scroll_open_blue.tga" + def GetBlueLetterCloseImageName(): + return "icon/item/scroll_close_blue.tga" + if 949 == app.GetDefaultCodePage(): def EUL(name): if GetAuxiliaryWordType(name): - return " " + return "�� " else: - return " " + return "�� " def I(name): if GetAuxiliaryWordType(name): - return " " + return "�� " else: - return " " + return "�� " def DO_YOU_SELL_ITEM(sellItemName, sellItemCount, sellItemPrice): name = sellItemName if sellItemCount > 1: name += " " name += str(sellItemCount) - name += "" + name += "��" - return name + EUL(name) + str(sellItemPrice) + "ɿ Ľðڽϱ?" + return name + EUL(name) + str(sellItemPrice) + "�ɿ� �Ľðڽ��ϱ�?" def DO_YOU_BUY_ITEM(sellItemName, sellItemCount, sellItemPrice): name = sellItemName if sellItemCount > 1: name += " " name += str(sellItemCount) - name += "" + name += "��" - return name + EUL(name) + str(sellItemPrice) + " ðڽϱ?" + return name + EUL(name) + str(sellItemPrice) + "�� ��ðڽ��ϱ�?" def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName): - return attachedItemName+EUL(attachedItemName)+" Դϴ" + return attachedItemName+EUL(attachedItemName)+"������ �� ���� �������Դϴ�" def REFINE_FAILURE_NO_SOCKET(attachedItemName): - return attachedItemName+EUL(attachedItemName)+" ִ ϴ" + return attachedItemName+EUL(attachedItemName)+"������ �� �ִ� ������ �����ϴ�" def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName): - return attachedItemName+EUL(attachedItemName)+" ִ Ȳ ϴ" + return attachedItemName+EUL(attachedItemName)+"������ �� �ִ� Ȳ�� ������ �����ϴ�" def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount): name = dropItemName if dropItemCount > 1: name += " " name += str(dropItemCount) - name += "" + name += "��" - return name+EUL(name)+"ðڽϱ?" + return name+EUL(name)+"�����ðڽ��ϱ�?" def NumberToMoneyString(number): if number <= 0: - return "0" + return "0��" number = str(number) result = CutMoneyString(number, 0, 4, "", "") - result = CutMoneyString(number, 4, 8, "", result) - result = CutMoneyString(number, 8, 12, "", result) - result = result + "" + result = CutMoneyString(number, 4, 8, "��", result) + result = CutMoneyString(number, 8, 12, "��", result) + result = result + "��" return result def NumberToSecondaryCoinString(number): if number <= 0: - return "0" + return "0��" number = str(number) result = CutMoneyString(number, 0, 4, "", "") - result = CutMoneyString(number, 4, 8, "", result) - result = CutMoneyString(number, 8, 12, "", result) - result = result + "" + result = CutMoneyString(number, 4, 8, "��", result) + result = CutMoneyString(number, 8, 12, "��", result) + result = result + "��" return result def FISHING_NOTIFY(isFish, fishName): if isFish: - return fishName + I(fishName) + " մϴ." + return fishName + I(fishName) + "�� �� �մϴ�." else: - return fishName + I(fishName) + "ɸ մϴ." + return fishName + I(fishName) + "�ɸ��� �մϴ�." def FISHING_SUCCESS(isFish, fishName): if isFish: - return fishName + EUL(fishName) + "ҽϴ!" + return fishName + EUL(fishName) + "��ҽ��ϴ�!" else: - return fishName + EUL(fishName) + "ϴ!" + return fishName + EUL(fishName) + "������ϴ�!" elif 932 == app.GetDefaultCodePage(): def DO_YOU_SELL_ITEM(sellItemName, sellItemCount, sellItemPrice): if sellItemCount > 1 : - return "%s %s ‚ %sɔ܂H" % ( sellItemName, sellItemCount, NumberToMoneyString(sellItemPrice) ) + return "%s %s �‚� %s�ɔ���܂����H" % ( sellItemName, sellItemCount, NumberToMoneyString(sellItemPrice) ) else: - return "%s %sŔ܂H" % (sellItemName, NumberToMoneyString(sellItemPrice) ) + return "%s �� %s�Ŕ���܂����H" % (sellItemName, NumberToMoneyString(sellItemPrice) ) def DO_YOU_BUY_ITEM(buyItemName, buyItemCount, buyItemPrice) : if buyItemCount > 1 : - return "%s %s‚ %sŔ܂H" % ( buyItemName, buyItemCount, buyItemPrice ) + return "%s %s�‚� %s�Ŕ����܂����H" % ( buyItemName, buyItemCount, buyItemPrice ) else: - return "%s %sŔ܂H" % ( buyItemName, buyItemPrice ) + return "%s�� %s�Ŕ����܂����H" % ( buyItemName, buyItemPrice ) def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName) : - return "%s𑕒łȂACe?łB" % (attachedItemName) + return "%s�𑕒��ł��Ȃ��A�C�e?�ł��B" % (attachedItemName) def REFINE_FAILURE_NO_SOCKET(attachedItemName) : - return "%s𑕒?Pbg܂B" % (attachedItemName) + return "%s�𑕒�����?�P�b�g������܂���B" % (attachedItemName) def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName) : - return "%s𑕒ł鉩?Pbg܂B" % (attachedItemName) + return "%s�𑕒��ł��鉩��?�P�b�g������܂���B" % (attachedItemName) def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount) : if dropItemCount > 1 : - return "%s %d ‚̂Ă܂H" % (dropItemName, dropItemCount) + return "%s %d �‚��̂Ă܂����H" % (dropItemName, dropItemCount) else : - return "%ŝĂ܂H" % (dropItemName) + return "%s���̂Ă܂����H" % (dropItemName) def FISHING_NOTIFY(isFish, fishName) : if isFish : - return "%s H‚悤ł" % ( fishName ) + return "%s ���H���‚����悤�ł�" % ( fishName ) else : - return "%s 悤ł" % ( fishName ) + return "%s �����������悤�ł�" % ( fishName ) def FISHING_SUCCESS(isFish, fishName) : if isFish : - return "%s ߂܂܂I" % (fishName) + return "%s ��߂܂��܂����I" % (fishName) else : - return "%s ɓ܂I" % (fishName) + return "%s ����ɓ���܂����I" % (fishName) def NumberToMoneyString(number) : if number <= 0 : - return "0" + return "0��" number = str(number) result = CutMoneyString(number, 0, 4, "", "") - result = CutMoneyString(number, 4, 8, "", result) - result = CutMoneyString(number, 8, 12, "", result) - result = result + "" + result = CutMoneyString(number, 4, 8, "��", result) + result = CutMoneyString(number, 8, 12, "��", result) + result = result + "��" return result def NumberToSecondaryCoinString(number) : @@ -770,8 +778,8 @@ elif 932 == app.GetDefaultCodePage(): number = str(number) result = CutMoneyString(number, 0, 4, "", "") - result = CutMoneyString(number, 4, 8, "", result) - result = CutMoneyString(number, 8, 12, "", result) + result = CutMoneyString(number, 4, 8, "��", result) + result = CutMoneyString(number, 8, 12, "��", result) result = result + "jun" return result @@ -842,53 +850,53 @@ elif IsHONGKONG(): elif IsNEWCIBN() or IsCIBN10(): def DO_YOU_SELL_ITEM(sellItemName, sellItemCount, sellItemPrice): if sellItemCount>1: - return "ȷҪ%s%s%s" % (str(sellItemCount), sellItemName, str(sellItemPrice)) + return "ȷ��Ҫ��%s��%s��%s���������" % (str(sellItemCount), sellItemName, str(sellItemPrice)) else: - return "ȷҪ%s%s" % (sellItemName, str(sellItemPrice)) + return "ȷ��Ҫ��%s��%s���������" % (sellItemName, str(sellItemPrice)) def DO_YOU_BUY_ITEM(sellItemName, sellItemCount, sellItemPrice): if sellItemCount>1: - return "ȷҪ%s%s%s" % (str(sellItemCount), sellItemName, str(sellItemPrice)) + return "ȷ��Ҫ��%s��%s��%s��������" % (str(sellItemCount), sellItemName, str(sellItemPrice)) else: - return "ȷҪ%s%s" % (sellItemName, str(sellItemPrice)) + return "ȷ��Ҫ��%s��%s��������" % (sellItemName, str(sellItemPrice)) def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName): - return "޷Ƕ%s װ" % (attachedItemName) + return "�޷���Ƕ%s ��װ��" % (attachedItemName) def REFINE_FAILURE_NO_SOCKET(attachedItemName): - return "ûпǶ%s Ŀ" % (attachedItemName) + return "û�п�����Ƕ%s �Ŀ�" % (attachedItemName) def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName): - return "ûпǶ%s Ļƽ" % (attachedItemName) + return "û�п�����Ƕ%s �Ļƽ��" % (attachedItemName) def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount): if dropItemCount>1: - return "ȷҪӵ%d%s?" % (dropItemCount, dropItemName) + return "ȷ��Ҫ�ӵ�%d��%s��?" % (dropItemCount, dropItemName) else: - return "ȷҪӵ%s?" % (dropItemName) + return "ȷ��Ҫ�ӵ�%s��?" % (dropItemName) def FISHING_NOTIFY(isFish, fishName): if isFish: - return fishName # ⿡  پִµ, ڵ ־ Ф... cython ڵ ... + return fishName # ���� ���⿡ � ���� �پ��ִµ�, ���ڵ��� �����־ ������ ���� ���� �Ф�... cython���� ���ڵ� ���� ���� ��������... else: - return "" + fishName + "ˡ" + return "����" + fishName + "�ˡ�" def FISHING_SUCCESS(isFish, fishName): if isFish: - return "" + fishName + "ˡ" + return "����" + fishName + "�ˡ�" else: - return "" + fishName + "ˡ" + return "���" + fishName + "�ˡ�" def NumberToMoneyString(number): if number <= 0: - return "0" + return "0��" number = str(number) result = CutMoneyString(number, 0, 4, "", "") - result = CutMoneyString(number, 4, 8, "", result) - result = CutMoneyString(number, 8, 12, "", result) - result = result + "" + result = CutMoneyString(number, 4, 8, "��", result) + result = CutMoneyString(number, 8, 12, "��", result) + result = result + "��" return result @@ -899,8 +907,8 @@ elif IsNEWCIBN() or IsCIBN10(): number = str(number) result = CutMoneyString(number, 0, 4, "", "") - result = CutMoneyString(number, 4, 8, "", result) - result = CutMoneyString(number, 8, 12, "", result) + result = CutMoneyString(number, 4, 8, "��", result) + result = CutMoneyString(number, 8, 12, "��", result) result = result + "JUN" return result diff --git a/bin/pack/root/uicharacter.py b/bin/pack/root/uicharacter.py index 0e6b92c8..27046dd1 100644 --- a/bin/pack/root/uicharacter.py +++ b/bin/pack/root/uicharacter.py @@ -43,7 +43,722 @@ FACE_IMAGE_DICT = { } def unsigned32(n): return n & 0xFFFFFFFFL - + +if app.ENABLE_QUEST_RENEWAL: + __author__ = "Owsap" + __copyright__ = "Copyright (C) 2023, Owsap Development" + __website__ = "https://owsap.dev/" + + # + # GitHub: https://github.com/Owsap + # M2Dev: https://metin2.dev/profile/544-owsap/ + # + + from _weakref import proxy + + QUEST_LABEL_TAB_COLOR_IMG_DICT = { + quest.QUEST_TYPE_MAIN : "d:/ymir work/ui/quest_re/tabcolor_1_main.tga", + quest.QUEST_TYPE_SUB : "d:/ymir work/ui/quest_re/tabcolor_2_sub.tga", + quest.QUEST_TYPE_LEVELUP : "d:/ymir work/ui/quest_re/tabcolor_3_levelup.tga", + quest.QUEST_TYPE_EVENT : "d:/ymir work/ui/quest_re/tabcolor_4_event.tga", + quest.QUEST_TYPE_COLLECTION : "d:/ymir work/ui/quest_re/tabcolor_5_collection.tga", + quest.QUEST_TYPE_SYSTEM : "d:/ymir work/ui/quest_re/tabcolor_6_system.tga", + quest.QUEST_TYPE_SCROLL : "d:/ymir work/ui/quest_re/tabcolor_7_scroll.tga", + quest.QUEST_TYPE_DAILY : "d:/ymir work/ui/quest_re/tabcolor_8_daily.tga" + } + + QUEST_LABEL_NAME_DICT = { + quest.QUEST_TYPE_MAIN : uiScriptLocale.QUEST_UI_TEXT_MAIN, + quest.QUEST_TYPE_SUB : uiScriptLocale.QUEST_UI_TEXT_SUB, + quest.QUEST_TYPE_LEVELUP : uiScriptLocale.QUEST_UI_TEXT_LEVELUP, + quest.QUEST_TYPE_EVENT : uiScriptLocale.QUEST_UI_TEXT_EVENT, + quest.QUEST_TYPE_COLLECTION : uiScriptLocale.QUEST_UI_TEXT_COLLECTION, + quest.QUEST_TYPE_SYSTEM : uiScriptLocale.QUEST_UI_TEXT_SYSTEM, + quest.QUEST_TYPE_SCROLL : uiScriptLocale.QUEST_UI_TEXT_SCROLL, + quest.QUEST_TYPE_DAILY : uiScriptLocale.QUEST_UI_TEXT_DAILY + } + + class QuestDescObject(ui.Window): + WIDTH = 222 + HEIGHT = 15 + + DESC_TEXT_MAX_WIDTH = 130 #202 + + def __init__(self, parent, quest_index, desc_data = None): + ui.Window.__init__(self) + + self.parent = parent + self.quest_index = quest_index + self.desc_data = desc_data + + self.quest_text = None + self.quest_string_type = quest.QUEST_STRING_TYPE_NORMAL + + self.SetParent(parent) + + # Contents window. + contents_window = ui.Window() + contents_window.SetParent(self) + contents_window.SetSize(self.WIDTH, self.HEIGHT) + contents_window.SetPosition(15, 0) + contents_window.Show() + self.contents_window = contents_window + + # Contents text line. + contents_textline = ui.TextLine() + contents_textline.SetParent(self.contents_window) + contents_textline.SetText(desc_data) + contents_textline.SetPosition(0, 0) + contents_textline.Show() + self.contents_textline = contents_textline + + ui.Window.Show(self) + + def __del__(self): + ui.Window.__del__(self) + + self.parent = None + self.quest_index = None + self.desc_data = None + + self.quest_text = None + self.quest_string_type = None + + def SetQuestText(self, text): + if app.GetTextWidth(text) > self.DESC_TEXT_MAX_WIDTH: + string = text[:self.DESC_TEXT_MAX_WIDTH] + "..." + else: + string = text + + self.quest_text = text + self.contents_textline.SetText(string) + + def SetQuestStringType(self, type): + self.quest_string_type = type + + def __UpdateQuestClock(self): + (last_name, last_time) = quest.GetQuestLastTime(self.quest_index) + + clock_text = localeInfo.QUEST_UNLIMITED_TIME + if len(last_name) > 0: + if last_time <= 0: + clock_text = localeInfo.QUEST_TIMEOVER + else: + second = int(last_time % 60) + minute = int((last_time / 60) % 60) + hour = int((last_time / 60) / 60) % 24 + + clock_text = last_name + " : " + + if hour > 0: + clock_text += str(hour) + localeInfo.QUEST_HOUR + clock_text += " " + + if minute > 0: + clock_text += str(minute) + localeInfo.QUEST_MIN + + if second > 0 and minute < 1: + clock_text += str(second) + localeInfo.QUEST_SEC + + self.contents_textline.SetText(clock_text) + + def OnUpdate(self): + if self.quest_string_type == quest.QUEST_STRING_TYPE_CLOCK: + self.__UpdateQuestClock() + + class QuestObject(ui.Window): + def __init__(self, parent, quest_index, is_confirmed): + ui.Window.__init__(self) + + self.parent = parent + self.quest_index = quest_index + self.is_confirmed = is_confirmed + + self.desc_list = [] + + self.SetParent(self.parent) + self.SetOnMouseLeftButtonUpEvent(ui.__mem_func__(self.__ClickQuest)) + + # Quest line image. + line = ui.ImageBox() + line.LoadImage("d:/ymir work/ui/quest_re/quest_list_line_01.tga") + line.SetParent(self) + line.Hide() + self.line = line + + # New quest icon. + new_image = ui.ImageBox() + new_image.SetParent(self) + new_image.AddFlag("not_pick") + new_image.SetPosition(3, 4) + new_image.LoadImage("d:/ymir work/ui/quest_re/quest_new.tga") + if not self.is_confirmed: + new_image.Show() + else: + new_image.Hide() + self.new_image = new_image + + ui.Window.Hide(self) + + def __del__(self): + ui.Window.__del__(self) + + self.parent = None + self.quest_index = 0 + self.is_confirmed = False + + self.desc_list = [] + + def AddLine(self): + if not self.desc_list: + return + + x, y = self.desc_list[-1].GetLocalPosition() + + if self.line: + self.line.SetPosition(4, y + 15) + self.line.Show() + + def RemoveLine(self): + self.line.Hide() + + def ReplaceDesc(self, desc_list): + self.desc_list = [] + + for i, desc_data in enumerate(desc_list): + + desc_object = QuestDescObject(self, self.quest_index) + desc_object.SetQuestStringType(i) + + if i == quest.QUEST_STRING_TYPE_CLOCK: + (clock_last_name, clock_last_time) = desc_data + + clock_text = localeInfo.QUEST_UNLIMITED_TIME + if len(clock_last_name) > 0: + if clock_last_time <= 0: + clock_text = localeInfo.QUEST_TIMEOVER + else: + quest_last_minute = clock_last_time / 60 + quest_last_sec = clock_last_time % 60 + + clock_text = clock_last_name + " : " + + if quest_last_minute > 0: + clock_text += str(quest_last_minute) + localeInfo.QUEST_MIN + if quest_last_sec > 0: + clock_text += " " + + if quest_last_sec > 0: + clock_text += str(quest_last_sec) + localeInfo.QUEST_SEC + + desc_object.SetQuestText(clock_text) + self.desc_list.append(desc_object) + + elif i == quest.QUEST_STRING_TYPE_COUNT: + (quest_counter_name, quest_counter_value) = desc_data + + if len(quest_counter_name) > 0: + counter_text = ("%s : %d" % (quest_counter_name, quest_counter_value)) + + desc_object.SetQuestText(counter_text) + self.desc_list.append(desc_object) + + else: + quest_name = desc_data + + desc_object.SetQuestText(quest_name) + self.desc_list.append(desc_object) + + def SetPositionIndex(self, pos): + self.quest_index = pos + + def SetConfirmed(self, is_confirmed): + self.is_confirmed = is_confirmed + if not self.is_confirmed: + self.new_image.Show() + else: + self.new_image.Hide() + + def IsConfirmed(self): + return self.is_confirmed + + def Arrange(self): + y = 0 + for desc_obj in self.desc_list: + desc_obj.SetPosition(0, y) + y += 15 # Add space between text lines. + + def __ClickQuest(self): + import event + event.QuestButtonClick(-2147483648 + self.quest_index) + + # Remove new image from quest object. + self.is_confirmed = True + self.new_image.Hide() + + if self.parent: + self.parent.CheckNewImage() + + def GetDescCount(self): + return len(self.desc_list) + + class QuestCategory(ui.Window): + BOARD_WIDTH = 222 + if app.ENABLE_CONQUEROR_LEVEL: + BOARD_HEIGHT = 340 + else: + BOARD_HEIGHT = 297 + + TAB_WIDTH = 222 + TAB_HEIGHT = 22 + + def __init__(self, clipping_mask_window, parent, quest_type): + self.clipping_mask_window = clipping_mask_window + self.parent = parent + self.quest_type = quest_type + + # Category position and height. + self.x = 0 + self.y = 0 + self.height = 0 + + # Dictionary that contains all the quests of this category. + self.quest_dict = {} + + # Check if the category is on or off. + self.is_on = False + + ui.Window.__init__(self) + + self.SetParent(self.clipping_mask_window) + self.SetSize(self.BOARD_WIDTH, self.BOARD_HEIGHT) + + # Name window that contains all the children. + name_window = ui.Window() + name_window.SetParent(self) + name_window.SetPosition(0, 0) + name_window.SetSize(self.TAB_WIDTH, self.TAB_HEIGHT) + name_window.SetOnMouseLeftButtonUpEvent(ui.__mem_func__(self.__ClickLabel)) + name_window.Show() + self.name_window = name_window + + # Image of the label. + label_image = ui.ImageBox() + label_image.SetParent(self.name_window) + label_image.AddFlag("not_pick") + label_image.SetPosition(0, 0) + label_image.SetSize(10, 10) + label_image.LoadImage("d:/ymir work/ui/quest_re/quest_tab_01.tga") + if localeInfo.IsARABIC(): + label_image.LeftRightReverse() + label_image.Show() + self.label_image = label_image + + # Opened image icon. + opened_image = ui.ImageBox() + opened_image.SetParent(self.name_window) + opened_image.AddFlag("not_pick") + if localeInfo.IsARABIC(): + opened_image.SetPosition(204, 2) + else: + opened_image.SetPosition(4, 2) + opened_image.LoadImage("d:/ymir work/ui/quest_re/quest_up.tga") + opened_image.Hide() + self.opened_image = opened_image + + # Closed image icon. + closed_image = ui.ImageBox() + closed_image.SetParent(self.name_window) + closed_image.AddFlag("not_pick") + if localeInfo.IsARABIC(): + closed_image.SetPosition(204, 2) + else: + closed_image.SetPosition(4, 2) + closed_image.LoadImage("d:/ymir work/ui/quest_re/quest_down.tga") + closed_image.Show() + self.closed_image = closed_image + + # Quest exist image icon. + quest_exist_image = ui.ImageBox() + quest_exist_image.SetParent(self.name_window) + quest_exist_image.AddFlag("not_pick") + if localeInfo.IsARABIC(): + quest_exist_image.SetPosition(21, 12) + else: + quest_exist_image.SetPosition(188, 12) + if quest_type in QUEST_LABEL_TAB_COLOR_IMG_DICT: + quest_exist_image.LoadImage(QUEST_LABEL_TAB_COLOR_IMG_DICT[quest_type]) + quest_exist_image.Show() + else: + quest_exist_image.Hide() + self.quest_exist_image = quest_exist_image + + # Label name. + name_textline = ui.TextLine() + name_textline.SetParent(self.name_window) + if localeInfo.IsARABIC(): + name_textline.SetPosition(28, 2) + name_textline.SetWindowHorizontalAlignRight() + name_textline.SetHorizontalAlignLeft() + else: + name_textline.SetPosition(24, 2) + if quest_type in QUEST_LABEL_NAME_DICT: + name_textline.SetText(QUEST_LABEL_NAME_DICT[quest_type]) + else: + name_textline.SetText("") + name_textline.SetPackedFontColor(0xffCEC6B5) + name_textline.Show() + self.name_textline = name_textline + + # New quest icon (green dot) + new_image = ui.ImageBox() + new_image.SetParent(self.name_window) + new_image.AddFlag("not_pick") + new_image.LoadImage("d:/ymir work/ui/quest_re/quest_new.tga") + if quest_type in QUEST_LABEL_NAME_DICT: + new_image.SetPosition(app.GetTextWidth(QUEST_LABEL_NAME_DICT[quest_type]) + 30, 5) + new_image.Show() + else: + new_image.SetPosition(0, 0) + new_image.Hide() + self.new_image = new_image + + self.__HideQuestExistImage() + self.__HideNewImage() + + ui.Window.Show(self) + + def __del__(self): + ui.Window.__del__(self) + + self.clipping_mask_window = None + self.parent = None + self.quest_type = 0 + + self.x = 0 + self.y = 0 + self.height = 0 + + self.quest_dict = {} + self.is_on = False + + self.name_window = None + self.label_image = None + self.opened_image = None + self.closed_image = None + self.quest_exist_image = None + self.name_textline = None + self.new_image = None + + def __ShowClosedImg(self): + self.opened_image.Hide() + self.closed_image.Show() + + def __ShowOpendImg(self): + self.closed_image.Hide() + self.opened_image.Show() + + def __ShowQuestExistImage(self): + self.quest_exist_image.Show() + + def __HideQuestExistImage(self): + self.quest_exist_image.Hide() + + def __ShowNewImage(self): + self.new_image.Show() + + def __HideNewImage(self): + self.new_image.Hide() + + def OpenCategory(self): + self.__ClickLabel() + + def CloseCategory(self): + self.is_on = False + for key, item in self.quest_dict.items(): + item.Hide() + + self.__ShowClosedImg() + self.__Arrange() + + # When clicking on the tab label. + def __ClickLabel(self): + # Prevent trying to open an empty category. + if not self.quest_dict: + self.is_on = False + self.__ShowClosedImg() + return + + if self.is_on: + self.__ShowClosedImg() + self.is_on = False + else: + self.__ShowOpendImg() + self.is_on = True + + # Show all the quests from the category. + for key, item in self.quest_dict.items(): + item.Show() if self.is_on else item.Hide() + + self.__Arrange() + + # Check if there are any confirmed quests in the category. + def CheckNewImage(self): + for key, item in self.quest_dict.items(): + if not item.IsConfirmed(): + self.__ShowNewImage() + break + + self.__HideNewImage() + + # Replace quests in the category. + def ReplaceQuest(self, quest_index, is_confirmed, desc_data_list): + if not quest_index in self.quest_dict: + quest_obj = QuestObject(self, quest_index, is_confirmed) + else: + quest_obj = self.quest_dict[quest_index] + + quest_obj.ReplaceDesc(desc_data_list) + if app.ENABLE_CLIP_MASK: + quest_obj.SetClippingMaskWindow(self.clipping_mask_window) + + if self.is_on: + quest_obj.Show() + + self.quest_dict.update({ quest_index : quest_obj }) + if self.quest_dict: + self.__ShowQuestExistImage() + + if not is_confirmed: + self.__ShowNewImage() + else: + self.__HideNewImage() + + self.__Arrange() + + # Delete quests in the category. + def DeleteQuest(self, quest_index): + if quest_index in self.quest_dict: + self.quest_dict[quest_index].Hide() + del self.quest_dict[quest_index] + + # Check if there are any quests in the dictionary. + if not self.quest_dict: + self.is_on = False + + self.__ShowClosedImg() + + self.__HideNewImage() + self.__HideQuestExistImage() + + self.__Arrange() + + # Method of arranging all the quests in the category. + def __Arrange(self): + y = self.TAB_HEIGHT # Initial vertical position. + for index, (key, item) in enumerate(self.quest_dict.items()): + quest_desc_count = item.GetDescCount() # Quest description count. + quest_desc_height = quest_desc_count * 15 # Quest description height. + quest_desc_height += 5 # Add and extra gap for the line separator. + + item.SetSize(self.TAB_WIDTH, quest_desc_height) + item.SetPosition(0, y) + item.Arrange() # Arrange the quest description text lines. + + # Add line at the penultimate quest object. + if index < len(self.quest_dict) - 1: + item.AddLine() + else: + item.RemoveLine() + + # Increase vertical position by quest description height. + y += quest_desc_height + + # Call the parent method for arranging the category positions. + if self.parent: + self.parent.ChildHeightChanged(self.quest_type) + + # Unused. + def __height_resize_post_process(self, original_function): + pass + + def IsOn(self): + return self.is_on + + # Returns the total height of the quest object based on + # each quest description. + def GetQuestObjectHeight(self): + height = 0 + for index, (key, item) in enumerate(self.quest_dict.items()): + height += item.GetDescCount() * 15 # Quest description height. + height += 5 # Add and extra gap for the line separator. + return height + + # Updates the vertical position for the scroll. + def UpdateYPosition(self, pos): + self.SetPosition(self.x, self.y + self.height - pos) + + def UpdatePosition(self, x, y): + self.x = x; self.y = y + self.SetPosition(self.x, self.y) + + def SetHeight(self, height): + self.height = height + self.SetPosition(self.x, self.y + self.height) + + def GetPosition(self): + return self.x, self.y + + def GetHeight(self): + return self.height + + class QuestCategoryGroup(ui.Window): + LABEL_HEIGHT = 22 + SCROLL_STEP = 18 + if app.ENABLE_CONQUEROR_LEVEL: + BOARD_HEIGHT = 340 + else: + BOARD_HEIGHT = 297 + + # The constructor method that initializes everything. + def __init__(self, clipping_mask_window, scroll_object): + ui.Window.__init__(self) + + self.clipping_mask_window = proxy(clipping_mask_window) + + self.scroll = scroll_object + self.scroll.SetScrollEvent(ui.__mem_func__(self.__ScrollEvent)) + self.scroll.SetScrollStep(self.SCROLL_STEP) + + self.diff_height = 0 + + # Dictionary that contains all the categories. + self.quest_category_dict = {} + for quest_type in QUEST_LABEL_NAME_DICT.keys(): + self.quest_category_dict[quest_type] = QuestCategory(self.clipping_mask_window, self, quest_type) + if app.ENABLE_CLIP_MASK: + self.quest_category_dict[quest_type].SetClippingMaskWindow(self.clipping_mask_window) + + # Arrange all the categories initial position. + self.__Arrange() + + # Refresh the scroll for its initial position. + self.__RefreshScroll() + + # The destructor method which is called as soon as + # all references of the object are deleted. + def __del__(self): + ui.Window.__del__(self) + + self.clipping_mask_window = None + self.scroll = None + self.diff_height = 0 + + self.quest_category_dict = {} + + # This will replace (update) any quest in a category. + def ReplaceQuest(self, quest_type, quest_index, is_confirmed, desc_data_list): + if quest_type in self.quest_category_dict: + self.quest_category_dict[quest_type].ReplaceQuest(quest_index, is_confirmed, desc_data_list) + + # Delete and hide the quest from the category. + def DeleteQuest(self, quest_type, quest_index): + if quest_type in self.quest_category_dict: + self.quest_category_dict[quest_type].DeleteQuest(quest_index) + + # This method is called from the QuestCategory class + # which arranges all the category positions. + def ChildHeightChanged(self, quest_type): + self.__ArrangeAfter(quest_type) + self.__AdjustScrollPos(quest_type) + + # Scroll event in which while scrolling, the categories + # move vertical along with its children. + def __ScrollEvent(self): + pos = self.scroll.GetPos() * self.diff_height + for key, item in self.quest_category_dict.items(): + item.UpdateYPosition(pos) + + # Refresh the scroll based on the category height. + def __RefreshScroll(self): + self.diff_height = 0 + + label_height = 0; height = 0 + if app.ENABLE_CONQUEROR_LEVEL: + reserved_height = 2 + else: + reserved_height = 7 + + for key, item in self.quest_category_dict.items(): + label_height += self.LABEL_HEIGHT - reserved_height + is_on = item.IsOn() + height += item.GetQuestObjectHeight() if is_on else 0 + + total_height = height + label_height + 12 + if total_height >= self.BOARD_HEIGHT: + self.diff_height = height - label_height + + step_size = float(self.SCROLL_STEP) / self.diff_height + self.scroll.SetScrollStep(step_size) + self.scroll.Show() + else: + self.scroll.Hide() + + # Unused. + def __AdjustScrollPos(self, quest_type): + pass + + # Arranges the categories on startup in a closed state. + def __Arrange(self): + for key, item in self.quest_category_dict.iteritems(): + item.UpdatePosition(0, self.LABEL_HEIGHT * key) + + # This arrangement is made when any category is clicked or + # when any other event is made in the quest object board, + # like updating objects or removing them. + def __ArrangeAfter(self, quest_type): + pos = self.scroll.GetPos() * self.diff_height + for key, item in self.quest_category_dict.items(): + last_key = key -1; last_item = None; height = 0 + + if last_key in self.quest_category_dict: + last_item = self.quest_category_dict[key - 1] + is_on = last_item.IsOn() + height = last_item.GetQuestObjectHeight() if is_on else 0 + + # Set the height of the category from its base y position + # from the first arrangement "__Arrange", following up + # its height adjustment from its neighbor categories. + item.SetHeight(height + last_item.GetHeight() if last_item else 0) + + # Update y position for the scroll step when scrolling. + item.UpdateYPosition(pos) + + # Refreshing the scroll will properly set the scroll step + # size for all categories opened or closed on the board. + # If there is an empty space at the window then there will + # be no need for a scroll bar. + self.__RefreshScroll() + + # Using the scroll event will snap the last category to + # the bottom of the board preventing empty spaces at the + # end of the window. + self.__ScrollEvent() + + # Method used for opening a category. (Add-on) + def OpenCategory(self, quest_type, close_all = False): + if close_all: + for key, item in self.quest_category_dict.items(): + item.CloseCategory() + + if quest_type in self.quest_category_dict: + self.quest_category_dict[quest_type].OpenCategory() + + # Method used for closing a category. (Add-on) + def CloseCategory(self, quest_type): + for key, item in self.quest_category_dict.items(): + item.CloseCategory() + class CharacterWindow(ui.ScriptWindow): ACTIVE_PAGE_SLOT_COUNT = 8 @@ -118,12 +833,17 @@ class CharacterWindow(ui.ScriptWindow): self.statusMinusButtonDict = None self.skillPageDict = None - self.questShowingStartIndex = 0 - self.questScrollBar = None - self.questSlot = None - self.questNameList = None - self.questLastTimeList = None - self.questLastCountList = None + if app.ENABLE_QUEST_RENEWAL: + self.questScrollBar = None + self.questPageBoardWnd = None + self.questCategoryGroup = None + else: + self.questShowingStartIndex = 0 + self.questScrollBar = None + self.questSlot = None + self.questNameList = None + self.questLastTimeList = None + self.questLastCountList = None self.skillGroupButton = () self.activeSlot = None @@ -147,6 +867,10 @@ class CharacterWindow(ui.ScriptWindow): ui.ScriptWindow.Show(self) + if app.ENABLE_MOUSE_WHEEL_TOP_WINDOW: + self.SetTop() + wndMgr.SetWheelTopWindow(self.hWnd) + def __LoadScript(self, fileName): pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, fileName) @@ -249,25 +973,30 @@ class CharacterWindow(ui.ScriptWindow): self.dualEmotionSlot = self.GetChild("DualEmotionSlot") self.__SetEmotionSlot() - self.questShowingStartIndex = 0 - self.questScrollBar = self.GetChild("Quest_ScrollBar") - self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.OnQuestScroll)) - self.questSlot = self.GetChild("Quest_Slot") - for i in xrange(quest.QUEST_MAX_NUM): - self.questSlot.HideSlotBaseImage(i) - self.questSlot.SetCoverButton(i,\ - "d:/ymir work/ui/game/quest/slot_button_01.sub",\ - "d:/ymir work/ui/game/quest/slot_button_02.sub",\ - "d:/ymir work/ui/game/quest/slot_button_03.sub",\ - "d:/ymir work/ui/game/quest/slot_button_03.sub", True) + if app.ENABLE_QUEST_RENEWAL: + self.questScrollBar = self.GetChild("Quest_ScrollBar") + self.questPageBoardWnd = self.GetChild("quest_object_board_window") + self.questCategoryGroup = QuestCategoryGroup(self.questPageBoardWnd, self.questScrollBar) + else: + self.questShowingStartIndex = 0 + self.questScrollBar = self.GetChild("Quest_ScrollBar") + self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.OnQuestScroll)) + self.questSlot = self.GetChild("Quest_Slot") + for i in xrange(quest.QUEST_MAX_NUM): + self.questSlot.HideSlotBaseImage(i) + self.questSlot.SetCoverButton(i,\ + "d:/ymir work/ui/game/quest/slot_button_01.sub",\ + "d:/ymir work/ui/game/quest/slot_button_02.sub",\ + "d:/ymir work/ui/game/quest/slot_button_03.sub",\ + "d:/ymir work/ui/game/quest/slot_button_03.sub", True) - self.questNameList = [] - self.questLastTimeList = [] - self.questLastCountList = [] - for i in xrange(quest.QUEST_MAX_NUM): - self.questNameList.append(self.GetChild("Quest_Name_0" + str(i))) - self.questLastTimeList.append(self.GetChild("Quest_LastTime_0" + str(i))) - self.questLastCountList.append(self.GetChild("Quest_LastCount_0" + str(i))) + self.questNameList = [] + self.questLastTimeList = [] + self.questLastCountList = [] + for i in xrange(quest.QUEST_MAX_NUM): + self.questNameList.append(self.GetChild("Quest_Name_0" + str(i))) + self.questLastTimeList.append(self.GetChild("Quest_LastTime_0" + str(i))) + self.questLastCountList.append(self.GetChild("Quest_LastCount_0" + str(i))) def __SetSkillSlotEvent(self): for skillPageValue in self.skillPageDict.itervalues(): @@ -365,7 +1094,8 @@ class CharacterWindow(ui.ScriptWindow): for i in xrange(len(self.skillGroupButton)): self.skillGroupButton[i].SetEvent(lambda arg=i: self.__SelectSkillGroup(arg)) - self.RefreshQuest() + if not app.ENABLE_QUEST_RENEWAL: + self.RefreshQuest() self.__HideJobToolTip() for (tabKey, tabButton) in self.tabButtonDict.items(): @@ -384,7 +1114,8 @@ class CharacterWindow(ui.ScriptWindow): for titleBarValue in self.titleBarDict.itervalues(): titleBarValue.SetCloseEvent(ui.__mem_func__(self.Hide)) - self.questSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectQuest)) + if not app.ENABLE_QUEST_RENEWAL: + self.questSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectQuest)) def __LoadWindow(self): if self.isLoaded == 1: @@ -418,6 +1149,9 @@ class CharacterWindow(ui.ScriptWindow): self.Hide() + if app.ENABLE_MOUSE_WHEEL_TOP_WINDOW: + wndMgr.ClearWheelTopWindow() + def SetSkillToolTip(self, toolTipSkill): self.toolTipSkill = toolTipSkill @@ -521,7 +1255,7 @@ class CharacterWindow(ui.ScriptWindow): except: #import exception #exception.Abort("CharacterWindow.RefreshStatus.BindObject") - ## ƨ + ## ������ ƨ�� ���� pass self.__RefreshStatusPlusButtonList() @@ -652,79 +1386,97 @@ class CharacterWindow(ui.ScriptWindow): if 0 != self.toolTipSkill: self.toolTipSkill.HideToolTip() - ## Quest - def __SelectQuest(self, slotIndex): - questIndex = quest.GetQuestIndex(self.questShowingStartIndex+slotIndex) + if not app.ENABLE_QUEST_RENEWAL: + ## Quest + def __SelectQuest(self, slotIndex): + questIndex = quest.GetQuestIndex(self.questShowingStartIndex+slotIndex) - import event - event.QuestButtonClick(-2147483648 + questIndex) + import event + event.QuestButtonClick(-2147483648 + questIndex) - def RefreshQuest(self): + if app.ENABLE_QUEST_RENEWAL: + def RefreshQuest(self, quest_type, quest_index): + if not self.isLoaded or not self.questCategoryGroup: + return - if self.isLoaded==0: - return + try: + (quest_type, is_confirmed, quest_name, quest_icon, quest_counter_name, quest_counter_value) = quest.GetQuestData(quest_index) + (last_clock_name, last_clock_time) = quest.GetQuestLastTime(quest_index) - questCount = quest.GetQuestCount() - questRange = range(quest.QUEST_MAX_NUM) + if self.questCategoryGroup: + self.questCategoryGroup.ReplaceQuest(quest_type, quest_index, is_confirmed, [quest_name, [last_clock_name, last_clock_time], [quest_counter_name, quest_counter_value]]) + except TypeError: + return - if questCount > quest.QUEST_MAX_NUM: - self.questScrollBar.Show() - else: - self.questScrollBar.Hide() + def DeleteQuest(self, quest_type, quest_index): + self.questCategoryGroup.DeleteQuest(quest_type, quest_index) - for i in questRange[:questCount]: - (questName, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(self.questShowingStartIndex+i) + def OpenQuestCategory(self, quest_type, close_all): + self.questCategoryGroup.OpenCategory(quest_type, close_all) + else: + def RefreshQuest(self): + if self.isLoaded == 0: + return - self.questNameList[i].SetText(questName) - self.questNameList[i].Show() - self.questLastCountList[i].Show() - self.questLastTimeList[i].Show() + questCount = quest.GetQuestCount() + questRange = range(quest.QUEST_MAX_NUM) - if len(questCounterName) > 0: - self.questLastCountList[i].SetText("%s : %d" % (questCounterName, questCounterValue)) + if questCount > quest.QUEST_MAX_NUM: + self.questScrollBar.Show() else: - self.questLastCountList[i].SetText("") + self.questScrollBar.Hide() - ## Icon - self.questSlot.SetSlot(i, i, 1, 1, questIcon) + for i in questRange[:questCount]: + (questName, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(self.questShowingStartIndex + i) - for i in questRange[questCount:]: - self.questNameList[i].Hide() - self.questLastTimeList[i].Hide() - self.questLastCountList[i].Hide() - self.questSlot.ClearSlot(i) - self.questSlot.HideSlotBaseImage(i) + self.questNameList[i].SetText(questName) + self.questNameList[i].Show() + self.questLastCountList[i].Show() + self.questLastTimeList[i].Show() - self.__UpdateQuestClock() + if len(questCounterName) > 0: + self.questLastCountList[i].SetText("%s : %d" % (questCounterName, questCounterValue)) + else: + self.questLastCountList[i].SetText("") - def __UpdateQuestClock(self): - if "QUEST" == self.state: - # QUEST_LIMIT_COUNT_BUG_FIX - for i in xrange(min(quest.GetQuestCount(), quest.QUEST_MAX_NUM)): - # END_OF_QUEST_LIMIT_COUNT_BUG_FIX - (lastName, lastTime) = quest.GetQuestLastTime(i) + ## Icon + self.questSlot.SetSlot(i, i, 1, 1, questIcon) - clockText = localeInfo.QUEST_UNLIMITED_TIME - if len(lastName) > 0: + for i in questRange[questCount:]: + self.questNameList[i].Hide() + self.questLastTimeList[i].Hide() + self.questLastCountList[i].Hide() + self.questSlot.ClearSlot(i) + self.questSlot.HideSlotBaseImage(i) - if lastTime <= 0: - clockText = localeInfo.QUEST_TIMEOVER + self.__UpdateQuestClock() - else: - questLastMinute = lastTime / 60 - questLastSecond = lastTime % 60 + def __UpdateQuestClock(self): + if "QUEST" == self.state: + # QUEST_LIMIT_COUNT_BUG_FIX + for i in xrange(min(quest.GetQuestCount(), quest.QUEST_MAX_NUM)): + # END_OF_QUEST_LIMIT_COUNT_BUG_FIX + (lastName, lastTime) = quest.GetQuestLastTime(i) - clockText = lastName + " : " + clockText = localeInfo.QUEST_UNLIMITED_TIME + if len(lastName) > 0: + if lastTime <= 0: + clockText = localeInfo.QUEST_TIMEOVER + else: + questLastMinute = lastTime / 60 + questLastSecond = lastTime % 60 + + clockText = lastName + " : " + + if questLastMinute > 0: + clockText += str(questLastMinute) + localeInfo.QUEST_MIN + if questLastSecond > 0: + clockText += " " - if questLastMinute > 0: - clockText += str(questLastMinute) + localeInfo.QUEST_MIN if questLastSecond > 0: - clockText += " " + clockText += str(questLastSecond) + localeInfo.QUEST_SEC - if questLastSecond > 0: - clockText += str(questLastSecond) + localeInfo.QUEST_SEC - - self.questLastTimeList[i].SetText(clockText) + self.questLastTimeList[i].SetText(clockText) def __GetStatMinusPoint(self): POINT_STAT_RESET_COUNT = 112 @@ -764,7 +1516,8 @@ class CharacterWindow(ui.ScriptWindow): return True def OnUpdate(self): - self.__UpdateQuestClock() + if not app.ENABLE_QUEST_RENEWAL: + self.__UpdateQuestClock() ## Skill Process def __RefreshSkillPage(self, name, slotCount): @@ -798,7 +1551,7 @@ class CharacterWindow(ui.ScriptWindow): skillLevel = getSkillLevel(slotIndex) skillType = getSkillType(skillIndex) - ## ¸ ų ó + ## �¸� ��ų ���� ó�� if player.SKILL_INDEX_RIDING == skillIndex: if 1 == skillGrade: skillLevel += 19 @@ -825,7 +1578,7 @@ class CharacterWindow(ui.ScriptWindow): else: skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel) - ## ׿ + ## �׿� else: if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST: realSlotIndex = self.__GetETCSkillRealSlotIndex(slotIndex) @@ -859,11 +1612,11 @@ class CharacterWindow(ui.ScriptWindow): def CanShowPlusButton(self, skillIndex, skillLevel, curStatPoint): - ## ų + ## ��ų�� ������ if 0 == skillIndex: return False - ## Ѵٸ + ## ������ ������ �����Ѵٸ� if not skill.CanLevelUpSkill(skillIndex, skillLevel): return False @@ -979,8 +1732,8 @@ class CharacterWindow(ui.ScriptWindow): mouseModule.mouseController.DeattachObject() - ## FIXME : ų ȣ ش ãƼ Ʈ Ѵ. - ## ſ ո. ü ؾ ҵ. + ## FIXME : ��ų�� ��������� ���� ��ȣ�� ������ �ش� ������ ã�Ƽ� ������Ʈ �Ѵ�. + ## �ſ� ���ո�. ���� ��ü�� �����ؾ� �ҵ�. def OnUseSkill(self, slotIndex, coolTime): skillIndex = player.GetSkillIndex(slotIndex) @@ -1226,11 +1979,29 @@ class CharacterWindow(ui.ScriptWindow): def SelectSkillGroup(self, index): self.__SelectSkillGroup(index) - def OnQuestScroll(self): - questCount = quest.GetQuestCount() - scrollLineCount = max(0, questCount - quest.QUEST_MAX_NUM) - startIndex = int(scrollLineCount * self.questScrollBar.GetPos()) + if app.ENABLE_MOUSE_WHEEL_TOP_WINDOW: + def OnMouseWheelButtonUp(self): + if "QUEST" == self.state: + if self.questScrollBar: + self.questScrollBar.OnUp() + return True - if startIndex != self.questShowingStartIndex: - self.questShowingStartIndex = startIndex - self.RefreshQuest() + return False + + def OnMouseWheelButtonDown(self): + if "QUEST" == self.state: + if self.questScrollBar: + self.questScrollBar.OnDown() + return True + + return False + + if not app.ENABLE_QUEST_RENEWAL: + def OnQuestScroll(self): + questCount = quest.GetQuestCount() + scrollLineCount = max(0, questCount - quest.QUEST_MAX_NUM) + startIndex = int(scrollLineCount * self.questScrollBar.GetPos()) + + if startIndex != self.questShowingStartIndex: + self.questShowingStartIndex = startIndex + self.RefreshQuest() diff --git a/bin/pack/uiscript/uiscript/characterwindow.py b/bin/pack/uiscript/uiscript/characterwindow.py index d5f04433..73a6b1ec 100644 --- a/bin/pack/uiscript/uiscript/characterwindow.py +++ b/bin/pack/uiscript/uiscript/characterwindow.py @@ -1,3 +1,4 @@ +import app import uiScriptLocale QUEST_ICON_BACKGROUND = 'd:/ymir work/ui/game/quest/slot_base.sub' @@ -10,373 +11,1097 @@ FACE_SLOT_FILE = "d:/ymir work/ui/game/windows/box_face.sub" ROOT_PATH = "d:/ymir work/ui/game/windows/" LOCALE_PATH = uiScriptLocale.WINDOWS_PATH +PATTERN_PATH = "d:/ymir work/ui/pattern/" -window = { - "name" : "CharacterWindow", - "style" : ("movable", "float",), +if app.ENABLE_QUEST_RENEWAL: + QUEST_BOARD_WINDOW_WIDTH = 231 + if app.ENABLE_CONQUEROR_LEVEL: + QUEST_BOARD_WINDOW_HEIGHT = 340 + QUEST_BOARD_PATTERN_Y_COUNT = 19 + else: + QUEST_BOARD_WINDOW_HEIGHT = 297 + QUEST_BOARD_PATTERN_Y_COUNT = 16 - "x" : 24, - "y" : (SCREEN_HEIGHT - 37 - 361) / 2, + QUEST_BOARD_PATTERN_X_COUNT = 12 - "width" : 253, - "height" : 361, +if app.ENABLE_CONQUEROR_LEVEL: + window = { + "name" : "CharacterWindow", + "style" : ("movable", "float",), - "children" : - ( - { - "name" : "board", - "type" : "board", - "style" : ("attach",), + "x" : 24, + "y" : (SCREEN_HEIGHT - 37 - 361) / 2, - "x" : 0, - "y" : 0, + "width" : 253, + "height" : 405, - "width" : 253, - "height" : 361, + "children" : + ( + { + "name" : "board", + "type" : "board", + "style" : ("attach",), - "children" : - ( - { - "name" : "Skill_TitleBar", - "type" : "titlebar", - "style" : ("attach",), + "x" : 0, + "y" : 0, - "x" : 8, - "y" : 7, + "width" : 253, + "height" : 405, - "width" : 238, - "color" : "red", + "children" : + [ + { + "name" : "Skill_TitleBar", + "type" : "titlebar", + "style" : ("attach",), - "children" : - ( - { "name":"TitleName", "type":"text", "x":0, "y":-1, "text":uiScriptLocale.CHARACTER_SKILL, "all_align":"center" }, - #{ "name":"TitleName", "type":"image", "style" : ("attach",), "x":101, "y" : 1, "image" : LOCALE_PATH+"title_skill.sub", }, - ), - }, - { - "name" : "Emoticon_TitleBar", - "type" : "titlebar", - "style" : ("attach",), + "x" : 8, + "y" : 7, - "x" : 8, - "y" : 7, + "width" : 238, + "color" : "red", - "width" : 238, - "color" : "red", + "children" : + ( + { "name":"TitleName", "type":"text", "x":0, "y":-1, "text":uiScriptLocale.CHARACTER_SKILL, "all_align":"center" }, + ), + }, + { + "name" : "Emoticon_TitleBar", + "type" : "titlebar", + "style" : ("attach",), - "children" : - ( - { "name":"TitleName", "type":"text", "x":0, "y":-1, "text":uiScriptLocale.CHARACTER_ACTION, "all_align":"center" }, - ), - }, - { - "name" : "Quest_TitleBar", - "type" : "titlebar", - "style" : ("attach",), + "x" : 8, + "y" : 7, - "x" : 8, - "y" : 7, + "width" : 238, + "color" : "red", - "width" : 238, - "color" : "red", + "children" : + ( + { "name":"TitleName", "type":"text", "x":0, "y":-1, "text":uiScriptLocale.CHARACTER_ACTION, "all_align":"center" }, + ), + }, + { + "name" : "Quest_TitleBar", + "type" : "titlebar", + "style" : ("attach",), - "children" : - ( - { "name":"TitleName", "type":"text", "x":0, "y":-1, "text":uiScriptLocale.CHARACTER_QUEST, "all_align":"center" }, - ), - }, + "x" : 8, + "y" : 7, - ## Tab Area - { - "name" : "TabControl", - "type" : "window", + "width" : 238, + "color" : "red", - "x" : 0, - "y" : 328, + "children" : + ( + { "name":"TitleName", "type":"text", "x":0, "y":-1, "text":uiScriptLocale.CHARACTER_QUEST, "all_align":"center" }, + ), + }, - "width" : 250, - "height" : 31, + ## Tab Area + { + "name" : "TabControl", + "type" : "window", - "children" : - ( - ## Tab - { - "name" : "Tab_01", - "type" : "image", + "x" : 0, + "y" : 371, - "x" : 0, - "y" : 0, + "width" : 250, + "height" : 31, - "width" : 250, - "height" : 31, + "children" : + ( + ## Tab + { + "name" : "Tab_01", + "type" : "image", - "image" : LOCALE_PATH+"tab_1.sub", - }, - { - "name" : "Tab_02", - "type" : "image", + "x" : 0, + "y" : 0, - "x" : 0, - "y" : 0, + "width" : 250, + "height" : 31, - "width" : 250, - "height" : 31, + "image" : ROOT_PATH+"char_tab_01.sub", + }, + { + "name" : "Tab_02", + "type" : "image", - "image" : LOCALE_PATH+"tab_2.sub", - }, - { - "name" : "Tab_03", - "type" : "image", + "x" : 0, + "y" : 0, - "x" : 0, - "y" : 0, + "width" : 250, + "height" : 31, - "width" : 250, - "height" : 31, + "image" : ROOT_PATH+"char_tab_02.sub", + }, + { + "name" : "Tab_03", + "type" : "image", - "image" : LOCALE_PATH+"tab_3.sub", - }, - { - "name" : "Tab_04", - "type" : "image", + "x" : 0, + "y" : 0, - "x" : 0, - "y" : 0, + "width" : 250, + "height" : 31, - "width" : 250, - "height" : 31, + "image" : ROOT_PATH+"char_tab_03.sub", + }, + { + "name" : "Tab_04", + "type" : "image", - "image" : LOCALE_PATH+"tab_4.sub", - }, - ## RadioButton - { - "name" : "Tab_Button_01", - "type" : "radio_button", + "x" : 0, + "y" : 0, - "x" : 6, - "y" : 5, + "width" : 250, + "height" : 31, - "width" : 53, - "height" : 27, - }, - { - "name" : "Tab_Button_02", - "type" : "radio_button", + "image" : ROOT_PATH+"char_tab_04.sub", + }, + ## RadioButton + { + "name" : "Tab_Button_01", + "type" : "radio_button", - "x" : 61, - "y" : 5, + "x" : 6, + "y" : 5, - "width" : 67, - "height" : 27, - }, - { - "name" : "Tab_Button_03", - "type" : "radio_button", + "width" : 53, + "height" : 27, + }, + { + "name" : "Tab_Button_02", + "type" : "radio_button", - "x" : 130, - "y" : 5, + "x" : 61, + "y" : 5, - "width" : 61, - "height" : 27, - }, - { - "name" : "Tab_Button_04", - "type" : "radio_button", + "width" : 67, + "height" : 27, + }, + { + "name" : "Tab_Button_03", + "type" : "radio_button", - "x" : 192, - "y" : 5, + "x" : 130, + "y" : 5, - "width" : 55, - "height" : 27, - }, - ), - }, + "width" : 61, + "height" : 27, + }, + { + "name" : "Tab_Button_04", + "type" : "radio_button", - ## Page Area - { - "name" : "Character_Page", - "type" : "window", - "style" : ("attach",), + "x" : 192, + "y" : 5, - "x" : 0, - "y" : 0, + "width" : 55, + "height" : 27, + }, + ), + }, - "width" : 250, - "height" : 304, + ## Page Area + { + "name" : "Character_Page", + "type" : "window", + "style" : ("attach",), - "children" : - ( + "x" : 0, + "y" : 0, - ## Title Area - { - "name" : "Character_TitleBar", "type" : "titlebar", "style" : ("attach",), "x" : 61, "y" : 7, "width" : 185, "color" : "red", - "children" : - ( - #{ "name" : "TitleName", "type" : "image", "style" : ("attach",), "x" : 70, "y" : 1, "image" : LOCALE_PATH+"title_status.sub", }, - { "name" : "TitleName", "type":"text", "x":0, "y":-1, "text":uiScriptLocale.CHARACTER_MAIN, "all_align":"center" }, - ), - }, + "width" : 253, + "height" : 371, - ## Guild Name Slot - { - "name" : "Guild_Name_Slot", - "type" : "image", - "x" : 60, - "y" :27+7, - "image" : LARGE_VALUE_FILE, + "children" : + [ - "children" : - ( - { - "name" : "Guild_Name", - "type":"text", - "text":" ̸", - "x":0, - "y":0, - "r":1.0, - "g":1.0, - "b":1.0, - "a":1.0, - "all_align" : "center", - }, - ), - }, + ## Title Area + { + "name" : "Character_TitleBar", "type" : "titlebar", "style" : ("attach",), "x" : 61, "y" : 7, "width" : 185, "color" : "red", + "children" : + ( + { "name" : "TitleName", "type":"text", "x":0, "y":-1, "text":uiScriptLocale.CHARACTER_MAIN, "all_align":"center" }, + ), + }, - ## Character Name Slot - { - "name" : "Character_Name_Slot", - "type" : "image", - "x" : 153, - "y" :27+7, - "image" : LARGE_VALUE_FILE, + ## Guild Name Slot + { + "name" : "Guild_Name_Slot", + "type" : "image", + "x" : 63, + "y" :27+7, + "image" : LARGE_VALUE_FILE, - "children" : - ( - { - "name" : "Character_Name", - "type":"text", - "text":"ij ̸", - "x":0, - "y":0, - "r":1.0, - "g":1.0, - "b":1.0, - "a":1.0, - "all_align" : "center", - }, - ), - }, + "children" : + ( + { + "name" : "Guild_Name", + "type":"text", + "text":"??? ???", + "x":0, + "y":0, + "r":1.0, + "g":1.0, + "b":1.0, + "a":1.0, + "all_align" : "center", + }, + ), + }, - ## Header - { - "name":"Status_Header", "type":"window", "x":3, "y":31, "width":0, "height":0, - "children" : - ( - ## Lv - { - "name":"Status_Lv", "type":"window", "x":9, "y":30, "width":37, "height":42, - "children" : - ( - { "name":"Level_Header", "type":"image", "x":0, "y":0, "image":LOCALE_PATH+"label_level.sub" }, - { "name":"Level_Value", "type":"text", "x":19, "y":19, "fontsize":"LARGE", "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ), - }, + ## Character Name Slot + { + "name" : "Character_Name_Slot", + "type" : "image", + "x" : 153, + "y" :27+7, + "image" : LARGE_VALUE_FILE, - ## EXP - { - "name":"Status_CurExp", "type":"window", "x":53, "y":30, "width":87, "height":42, - "children" : - ( - { "name":"Exp_Slot", "type":"image", "x":0, "y":0, "image":LOCALE_PATH+"label_cur_exp.sub" }, - { "name":"Exp_Value", "type":"text", "x":46, "y":19, "fontsize":"LARGE", "text":"12345678901", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, ), - }, + "children" : + ( + { + "name" : "Character_Name", + "type":"text", + "text":"???? ???", + "x":0, + "y":0, + "r":1.0, + "g":1.0, + "b":1.0, + "a":1.0, + "all_align" : "center", + }, + ), + }, - ## REXP - { - "name":"Status_RestExp", "type":"window", "x":150, "y":30, "width":50, "height":20, - "children" : - ( - { "name":"RestExp_Slot", "type":"image", "x":0, "y":0, "image":LOCALE_PATH+"label_last_exp.sub" }, - { "name":"RestExp_Value", "type":"text", "x":46, "y":19, "fontsize":"LARGE", "text":"12345678901", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ), - }, - ), - }, + ## Lv_Exp_BackImg + { "name":"Lv_Exp_BackImg", "type":"image", "x":9, "y":60, "image":ROOT_PATH+"level_exp_info.sub" }, - ## Face Slot - { "name" : "Face_Image", "type" : "image", "x" : 11, "y" : 11, "image" : "d:/ymir work/ui/game/windows/face_warrior.sub" }, - { "name" : "Face_Slot", "type" : "image", "x" : 7, "y" : 7, "image" : FACE_SLOT_FILE, }, + { "name":"Lv_ToolTip", "type":"button", "x":9, "y":60, "width" : 55, "height" : 25, }, + { "name":"Exp_ToolTip", "type":"button", "x":61, "y":60, "width" : 180, "height" : 25, }, - ## ⺻ ɷ - { - "name":"Status_Standard", "type":"window", "x":3, "y":100, "width":200, "height":250, - "children" : - ( - ## ⺻ ɷ - { "name":"Character_Bar_01", "type":"horizontalbar", "x":12, "y":8, "width":223, }, - { "name":"Character_Bar_01_Text", "type" : "image", "x" : 13, "y" : 9, "image" : LOCALE_PATH+"label_std.sub", }, - - ## ɷ ġ - { - "name":"Status_Plus_Label", - "type":"image", - "x":150, "y":11, - "image":LOCALE_PATH+"label_uppt.sub", - - "children" : - ( - { "name":"Status_Plus_Value", "type":"text", "x":62, "y":0, "text":"99", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ), - }, + ## Lv + { "name":"Level_Value", "type":"text", "x":35, "y":84, "fontsize":"LARGE", "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ## ⺻ ɷ Ʈ - {"name":"Status_Standard_ItemList1", "type" : "image", "x":17, "y":31, "image" : LOCALE_PATH+"label_std_item1.sub", }, - {"name":"Status_Standard_ItemList2", "type" : "image", "x":100, "y":30, "image" : LOCALE_PATH+"label_std_item2.sub", }, + ## EXP + #{ "name":"Exp_Value", "type":"text", "x":165, "y":84, "fontsize":"LARGE", "text":"12345678901", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ## HTH - { - "name":"HTH_Label", "type":"window", "x":50, "y":32, "width":60, "height":20, - "children" : - ( - { "name":"HTH_Slot", "type":"image", "x":0, "y":0, "image":SMALL_VALUE_FILE }, - { "name":"HTH_Value", "type":"text", "x":20, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - { "name":"HTH_Plus", "type" : "button", "x":41, "y":3, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, - ), - }, - ## INT - { - "name":"INT_Label", "type":"window", "x":50, "y":32+23, "width":60, "height":20, - "children" : - ( - { "name":"INT_Slot", "type":"image", "x":0, "y":0, "image":SMALL_VALUE_FILE }, - { "name":"INT_Value", "type":"text", "x":20, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - { "name":"INT_Plus", "type" : "button", "x" : 41, "y" : 3, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, - ) - }, - ## STR - { - "name":"STR_Label", "type":"window", "x":50, "y":32+23*2, "width":60, "height":20, - "children" : - ( - { "name":"STR_Slot", "type":"image", "x":0, "y":0, "image":SMALL_VALUE_FILE }, - { "name":"STR_Value", "type":"text", "x":20, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - { "name":"STR_Plus", "type" : "button", "x" : 41, "y" : 3, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, - ) - }, - ## DEX - { - "name":"DEX_Label", "type":"window", "x":50, "y":32+23*3, "width":60, "height":20, - "children" : - ( - { "name":"DEX_Slot", "type":"image", "x":0, "y":0, "image":SMALL_VALUE_FILE }, - { "name":"DEX_Value", "type":"text", "x":20, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - { "name":"DEX_Plus", "type" : "button", "x" : 41, "y" : 3, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, - ) - }, + ## EXP + { + "name":"Status_CurExp", "type":"window", "x":53+8, "y":84, "width":87, "height":42, + "children" : + ( + #{ "name":"Exp_Slot", "type":"image", "x":0, "y":0, "image":LOCALE_PATH+"label_cur_exp.sub" }, + { "name":"Exp_Value", "type":"text", "x":46, "y":0, "fontsize":"LARGE", "text":"2500000000", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ), + }, - { "name":"HTH_Minus", "type" : "button", "x":9, "y":35, "default_image" : ROOT_PATH+"btn_minus_up.sub", "over_image" : ROOT_PATH+"btn_minus_over.sub", "down_image" : ROOT_PATH+"btn_minus_down.sub", }, - { "name":"INT_Minus", "type" : "button", "x":9, "y":35+23, "default_image" : ROOT_PATH+"btn_minus_up.sub", "over_image" : ROOT_PATH+"btn_minus_over.sub", "down_image" : ROOT_PATH+"btn_minus_down.sub", }, - { "name":"STR_Minus", "type" : "button", "x":9, "y":35+23*2, "default_image" : ROOT_PATH+"btn_minus_up.sub", "over_image" : ROOT_PATH+"btn_minus_over.sub", "down_image" : ROOT_PATH+"btn_minus_down.sub", }, + + { "name" : "slash", "type":"text", "text":"/", "x":152, "y":87, "text_horizontal_align" : "center", }, + + ## REXP + { + "name":"Status_RestExp", "type":"window", "x":152, "y":84, "width":50, "height":20, + "children" : + ( + #{ "name":"RestExp_Slot", "type":"image", "x":0, "y":0, "image":LOCALE_PATH+"label_last_exp.sub" }, + { "name":"RestExp_Value", "type":"text", "x":46, "y":0, "fontsize":"LARGE", "text":"2500000000", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ), + }, + + ## Face Slot + { "name" : "Face_Image", "type" : "image", "x" : 11, "y" : 11, "image" : "d:/ymir work/ui/game/windows/face_warrior.sub" }, + { "name" : "Face_Slot", "type" : "image", "x" : 7, "y" : 7, "image" : FACE_SLOT_FILE, }, + + ## Passive Expanded Button + { "name":"passive_expanded_btn", "type" : "button", "x":166, "y":107, "default_image" : ROOT_PATH+"passive_expanded_button_01.sub", "over_image" : ROOT_PATH+"passive_expanded_button_02.sub", "down_image" : ROOT_PATH+"passive_expanded_button_03.sub", }, + + ## ?????? ???? ??? + { "name":"change_base_button", "type" : "radio_button", "x":8, "y":107, "default_image" : ROOT_PATH+"old_level_btn_03.sub", "over_image" : ROOT_PATH+"old_level_btn_03.sub", "down_image" : ROOT_PATH+"old_level_btn_01.sub", }, + { "name":"change_conqueror_button", "type" : "radio_button", "x":87, "y":107, "default_image" : ROOT_PATH+"new_level_btn_03.sub", "over_image" : ROOT_PATH+"new_level_btn_03.sub", "down_image" : ROOT_PATH+"new_level_btn_01.sub", }, + + ## ?? ??? + { + "name":"Status_Standard", "type":"window", "x":3, "y":125, "width":250, "height":250, + "children" : + [ + ## ?? ??? ?? + { "name":"Base_Info_bar", "type":"image", "x":6, "y":12-7, "image":ROOT_PATH+"base_info_bar.sub" }, + { "name":"Char_Info_Status_img", "type" : "image", "x" : 12, "y" : 14-7, "image" : ROOT_PATH+"char_info_status_img.sub", }, + + ## ??? ???? ??? + { + "name":"Status_Plus_Label", + "type":"image", + "x":191, + "y":15-7, + "image":ROOT_PATH+"char_info_status_plus_img.sub", + "children" : + [ + { "name":"Status_Plus_Btn_Img", "type":"image", "x":19, "y":0, "image":ROOT_PATH+"char_info_status_value_img.sub", }, + { "name":"Status_Plus_Value", "type":"text", "x":30, "y":0, "text":"270", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ], + }, + + ## ?? ???? + { + "name":"base_info", "type":"window", "x":0, "y":26, "width":150, "height":150, + "children" : + [ + ## HTH + { "name":"HTH_Slot", "type":"image", "x":50, "y":0, "image":SMALL_VALUE_FILE }, + { "name":"HTH_Value", "type":"text", "x":70, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + { "name":"HTH_Plus", "type" : "button", "x":91, "y":3, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, + + ## INT + { "name":"INT_Slot", "type":"image", "x":50, "y":31, "image":SMALL_VALUE_FILE }, + { "name":"INT_Value", "type":"text", "x":70, "y":34, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + { "name":"INT_Plus", "type" : "button", "x" : 91, "y" : 34, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, + + ## STR + { "name":"STR_Slot", "type":"image", "x":50, "y":62, "image":SMALL_VALUE_FILE }, + { "name":"STR_Value", "type":"text", "x":70, "y":65, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + { "name":"STR_Plus", "type" : "button", "x" : 91, "y" : 65, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, + + ## DEX + { "name":"DEX_Slot", "type":"image", "x":50, "y":93, "image":SMALL_VALUE_FILE }, + { "name":"DEX_Value", "type":"text", "x":70, "y":96, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + { "name":"DEX_Plus", "type" : "button", "x" : 91, "y" : 96, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, + + ## ??????? + { "name":"HTH_IMG", "type":"image", "x":20, "y":-2, "image":ROOT_PATH+"char_info_con.sub" }, + { "name":"INT_IMG", "type":"image", "x":20, "y":29, "image":ROOT_PATH+"char_info_int.sub" }, + { "name":"STR_IMG", "type":"image", "x":20, "y":60, "image":ROOT_PATH+"char_info_str.sub" }, + { "name":"DEX_IMG", "type":"image", "x":20, "y":91, "image":ROOT_PATH+"char_info_dex.sub" }, + ], + }, + + ## ???? ???? + { + "name":"sungma_info", "type":"window", "x":0, "y":26, "width":150, "height":150, + "children" : + [ + ## SUNGMA_STR + { "name":"sungma_str_slot", "type":"image", "x":50, "y":0, "image":SMALL_VALUE_FILE }, + { "name":"sungma_str_value", "type":"text", "x":70, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + { "name":"sungma_str_plus", "type":"button", "x":91, "y":3, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, + + ## SUNGMA_HP + { "name":"sungma_hp_slot", "type":"image", "x":50, "y":31, "image":SMALL_VALUE_FILE }, + { "name":"sungma_hp_value", "type":"text", "x":70, "y":34, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + { "name":"sungma_hp_plus", "type":"button", "x":91, "y":34, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, + + ## SUNGMA_MOVE + { "name":"sungma_move_slot", "type":"image", "x":50, "y":62, "image":SMALL_VALUE_FILE }, + { "name":"sungma_move_value", "type":"text", "x":70, "y":65, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + { "name":"sungma_move_plus", "type":"button", "x" : 91, "y" : 65, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, + + ## SUNGMA_IMMUNE + { "name":"sungma_immune_slot", "type":"image", "x":50, "y":93, "image":SMALL_VALUE_FILE }, + { "name":"sungma_immune_value", "type":"text", "x":70, "y":96, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + { "name":"sungma_immune_plus", "type":"button", "x" : 91, "y" : 96, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, + + ## ??????? + { "name":"SUNGMA_STR_IMG", "type":"image", "x":20, "y":-2, "image":ROOT_PATH+"char_info_sungma_str.sub" }, + { "name":"SUNGMA_HP_IMG", "type":"image", "x":20, "y":29, "image":ROOT_PATH+"char_info_sungma_hp.sub" }, + { "name":"SUNGMA_MOVE_IMG", "type":"image", "x":20, "y":60, "image":ROOT_PATH+"char_info_sungma_move.sub" }, + { "name":"SUNGMA_IMMUNE_IMG", "type":"image", "x":20, "y":91, "image":ROOT_PATH+"char_info_sungma_immune.sub" }, + ], + }, + + ## ?????? ??? + { "name":"HTH_Minus", "type" : "button", "x":7, "y":36-7, "default_image" : ROOT_PATH+"btn_minus_up.sub", "over_image" : ROOT_PATH+"btn_minus_over.sub", "down_image" : ROOT_PATH+"btn_minus_down.sub", }, + { "name":"INT_Minus", "type" : "button", "x":7, "y":67-7, "default_image" : ROOT_PATH+"btn_minus_up.sub", "over_image" : ROOT_PATH+"btn_minus_over.sub", "down_image" : ROOT_PATH+"btn_minus_down.sub", }, + { "name":"STR_Minus", "type" : "button", "x":7, "y":98-7, "default_image" : ROOT_PATH+"btn_minus_up.sub", "over_image" : ROOT_PATH+"btn_minus_over.sub", "down_image" : ROOT_PATH+"btn_minus_down.sub", }, + { "name":"DEX_Minus", "type" : "button", "x":7, "y":129-7, "default_image" : ROOT_PATH+"btn_minus_up.sub", "over_image" : ROOT_PATH+"btn_minus_over.sub", "down_image" : ROOT_PATH+"btn_minus_down.sub", }, + + + ## ??????,?????,?????,???? + { "name":"HEL_IMG", "type":"image", "x":118, "y":31-7, "image":ROOT_PATH+"char_info_hp.sub" }, + { "name":"SP_IMG", "type":"image", "x":118, "y":62-7, "image":ROOT_PATH+"char_info_sp.sub" }, + { "name":"ATT_IMG", "type":"image", "x":118, "y":93-7, "image":ROOT_PATH+"char_info_att.sub" }, + { "name":"DEF_IMG", "type":"image", "x":118, "y":124-7, "image":ROOT_PATH+"char_info_def.sub" }, + + #### + + ## HP + { + "name":"HEL_Label", "type":"window", "x":145, "y":33-7, "width":50, "height":20, + "children" : + [ + { "name":"HP_Slot", "type":"image", "x":0, "y":0, "image":LARGE_VALUE_FILE }, + { "name":"HP_Value", "type":"text", "x":45, "y":3, "text":"9999/9999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ] + }, + ## SP + { + "name":"SP_Label", "type":"window", "x":145, "y":64-7, "width":50, "height":20, + "children" : + [ + { "name":"SP_Slot", "type":"image", "x":0, "y":0, "image":LARGE_VALUE_FILE }, + { "name":"SP_Value", "type":"text", "x":45, "y":3, "text":"9999/9999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ] + }, + ## ATT + { + "name":"ATT_Label", "type":"window", "x":145, "y":95-7, "width":50, "height":20, + "children" : + [ + { "name":"ATT_Slot", "type":"image", "x":0, "y":0, "image":LARGE_VALUE_FILE }, + { "name":"ATT_Value", "type":"text", "x":45, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ] + }, + ## DEF + { + "name":"DEF_Label", "type":"window", "x":145, "y":126-7, "width":50, "height":20, + "children" : + [ + { "name":"DEF_Slot", "type":"image", "x":0, "y":0, "image":LARGE_VALUE_FILE }, + { "name":"DEF_Value", "type":"text", "x":45, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ] + }, + ], + }, + + ## ??? ??? + { + "name":"Status_Extent", "type":"window", "x":3, "y":270, "width":253, "height":125, + "children" : + ( + ## ??? ??? ???? + #{ "name":"Status_Extent_Bar", "type":"horizontalbar", "x":12, "y":0, "width":223, }, + { "name":"Status_Extent_Label", "type" : "image", "x" : 13, "y" : 0, "image" : ROOT_PATH+"status_extent_bar.sub", }, + + + { "name":"MSPD_IMG", "type":"image", "x":20, "y":31 - 25, "image":ROOT_PATH+"char_info_movespeed.sub" }, + { "name":"ASPD_IMG", "type":"image", "x":20, "y":62 - 25, "image":ROOT_PATH+"char_info_attspeed.sub" }, + { "name":"CSPD_IMG", "type":"image", "x":20, "y":93 - 25, "image":ROOT_PATH+"char_info_magspeed.sub" }, + { "name":"MATT_IMG", "type":"image", "x":118, "y":31 - 25, "image":ROOT_PATH+"char_info_magatt.sub" }, + { "name":"MDEF_IMG", "type":"image", "x":118, "y":62 - 25, "image":ROOT_PATH+"char_info_magdef.sub" }, + { "name":"ER_IMG", "type":"image", "x":118, "y":93 - 25, "image":ROOT_PATH+"char_info_hitpct.sub" }, + + + ## ?? ??? ?????? ????? + #{"name":"Status_Extent_ItemList1", "type" : "image", "x":11, "y":31, "image" : LOCALE_PATH+"label_ext_item1.sub", }, + #{"name":"Status_Extent_ItemList2", "type" : "image", "x":128, "y":32, "image" : LOCALE_PATH+"label_ext_item2.sub", }, + + ## MSPD - ??? ??? + { + "name":"MOV_Label", "type":"window", "x":50, "y":33 - 25, "width":50, "height":20, + "children" : + ( + { "name":"MSPD_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, + { "name":"MSPD_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ) + }, + + ## ASPD - ???? ??? + { + "name":"ASPD_Label", "type":"window", "x":50, "y":64 - 25, "width":50, "height":20, + "children" : + ( + { "name":"ASPD_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, + { "name":"ASPD_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ) + }, + + ## CSPD - ??? ??? + { + "name":"CSPD_Label", "type":"window", "x":50, "y":95 - 25, "width":50, "height":20, + "children" : + ( + { "name":"CSPD_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, + { "name":"CSPD_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ) + }, + + ## MATT - ???? ????? + { + "name":"MATT_Label", "type":"window", "x":148, "y":33 - 25, "width":50, "height":20, + "children" : + ( + { "name":"MATT_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, + { "name":"MATT_Value", "type":"text", "x":26, "y":3, "text":"999-999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ) + }, + + ## MDEF - ???? ???? + { + "name":"MDEF_Label", "type":"window", "x":148, "y":64 - 25, "width":50, "height":20, + "children" : + ( + { "name":"MDEF_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, + { "name":"MDEF_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ) + }, + + ## ????? + { + "name":"ER_Label", "type":"window", "x":148, "y":95 - 25, "width":50, "height":20, + "children" : + ( + { "name":"ER_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, + { "name":"ER_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ) + }, + + ), + }, + ], + }, + { + "name" : "Skill_Page", + "type" : "window", + "style" : ("attach",), + + "x" : 0, + "y" : 24, + + "width" : 250, + "height" : 350, + + "children" : + ( + + { + "name":"Skill_Active_Title_Bar", "type":"horizontalbar", "x":15, "y":9, "width":223, + + "children" : + ( + { + "name":"Active_Skill_Point_Label", + "type":"image", + "x":180, + "y":3, + "image":ROOT_PATH+"char_info_status_plus_img.sub", + "children" : + ( + { "name":"Active_Skill_Plus_Img", "type":"image", "x":13, "y":0, "image":ROOT_PATH+"char_info_status_value_img.sub", }, + { "name":"Active_Skill_Point_Value", "type":"text", "x":25, "y":0, "text":"99", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ), + }, + + ## Group Button + { + "name" : "Skill_Group_Button_1", + "type" : "radio_button", + + "x" : 5, + "y" : 2, + + "text" : "Group1", + "text_color" : 0xFFFFE3AD, + + "default_image" : "d:/ymir work/ui/game/windows/skill_tab_button_01.sub", + "over_image" : "d:/ymir work/ui/game/windows/skill_tab_button_02.sub", + "down_image" : "d:/ymir work/ui/game/windows/skill_tab_button_03.sub", + }, + + { + "name" : "Skill_Group_Button_2", + "type" : "radio_button", + + "x" : 50, + "y" : 2, + + "text" : "Group2", + "text_color" : 0xFFFFE3AD, + + "default_image" : "d:/ymir work/ui/game/windows/skill_tab_button_01.sub", + "over_image" : "d:/ymir work/ui/game/windows/skill_tab_button_02.sub", + "down_image" : "d:/ymir work/ui/game/windows/skill_tab_button_03.sub", + }, + + { + "name" : "Active_Skill_Group_Name", + "type" : "text", + + "x" : 7, + "y" : 1, + "text" : "Active", + + "vertical_align" : "center", + "text_vertical_align" : "center", + "color" : 0xFFFFE3AD, + }, + + ), + }, + + { + "name":"Skill_ETC_Title_Bar", "type":"horizontalbar", "x":15, "y":200+22, "width":223, + "children" : + ( + ## Support_skill_Tooltip_icon + ## ??? ???? ??? + { + "name":"Support_Skill_Point_Label", + "type":"image", + "x":180, + "y":3, + "image":ROOT_PATH+"char_info_status_plus_img.sub", + "children" : + ( + { "name":"Support_Skill_Plus_Img", "type":"image", "x":13, "y":0, "image":ROOT_PATH+"char_info_status_value_img.sub", }, + { "name":"Support_Skill_Point_Value", "type":"text", "x":25, "y":0, "text":"99", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ), + }, + ## ??????? ???? + { "name":"Support_Skill_ToolTip", "type":"image", "x":3, "y":3, "image":ROOT_PATH+"support_skill_bar_icon.sub", }, + ), + }, + + { "name":"Skill_Board", "type":"image", "x":13, "y":30, "image":"d:/ymir work/ui/game/windows/skill_board.sub", }, + { "name":"Skill_Board_expanded", "type":"image", "x":13, "y":179, "image":"d:/ymir work/ui/game/windows/skill_board_expanded.sub", }, + + ## Active Slot + { + "name" : "Skill_Active_Slot", + "type" : "slot", + + "x" : 0 + 16, + "y" : 0 + 15 + 15, + + "width" : 223, + "height" : 190, + "image" : ICON_SLOT_FILE, + + "slot" : ( + {"index": 1, "x": 1, "y": 4, "width":32, "height":32}, + {"index":21, "x":38, "y": 4, "width":32, "height":32}, + {"index":41, "x":75, "y": 4, "width":32, "height":32}, + + {"index": 3, "x": 1, "y": 40, "width":32, "height":32}, + {"index":23, "x":38, "y": 40, "width":32, "height":32}, + {"index":43, "x":75, "y": 40, "width":32, "height":32}, + + {"index": 5, "x": 1, "y": 76, "width":32, "height":32}, + {"index":25, "x":38, "y": 76, "width":32, "height":32}, + {"index":45, "x":75, "y": 76, "width":32, "height":32}, + + {"index": 7, "x": 1, "y":112, "width":32, "height":32}, + {"index":27, "x":38, "y":112, "width":32, "height":32}, + {"index":47, "x":75, "y":112, "width":32, "height":32}, + + {"index": 9, "x": 1, "y":151, "width":32, "height":32}, + {"index":29, "x":38, "y":151, "width":32, "height":32}, + {"index":49, "x":75, "y":151, "width":32, "height":32}, + + #### + + {"index": 2, "x":113, "y": 4, "width":32, "height":32}, + {"index":22, "x":150, "y": 4, "width":32, "height":32}, + {"index":42, "x":187, "y": 4, "width":32, "height":32}, + + {"index": 4, "x":113, "y": 40, "width":32, "height":32}, + {"index":24, "x":150, "y": 40, "width":32, "height":32}, + {"index":44, "x":187, "y": 40, "width":32, "height":32}, + + {"index": 6, "x":113, "y": 76, "width":32, "height":32}, + {"index":26, "x":150, "y": 76, "width":32, "height":32}, + {"index":46, "x":187, "y": 76, "width":32, "height":32}, + + {"index": 8, "x":113, "y":112, "width":32, "height":32}, + {"index":28, "x":150, "y":112, "width":32, "height":32}, + {"index":48, "x":187, "y":112, "width":32, "height":32}, + ), + }, + + ## ETC Slot + { + "name" : "Skill_ETC_Slot", + "type" : "grid_table", + "x" : 18, + "y" : 221 + 22, + "start_index" : 101, + "x_count" : 6, + "y_count" : 3, + "x_step" : 32, + "y_step" : 32, + "x_blank" : 5, + "y_blank" : 4, + "image" : ICON_SLOT_FILE, + }, + + ), + }, + ], + }, + ), + } +else: + window = { + "name" : "CharacterWindow", + "style" : ("movable", "float",), + + "x" : 24, + "y" : (SCREEN_HEIGHT - 37 - 361) / 2, + + "width" : 253, + "height" : 361, + + "children" : + ( + { + "name" : "board", + "type" : "board", + "style" : ("attach",), + + "x" : 0, + "y" : 0, + + "width" : 253, + "height" : 361, + + "children" : + [ + { + "name" : "Skill_TitleBar", + "type" : "titlebar", + "style" : ("attach",), + + "x" : 8, + "y" : 7, + + "width" : 238, + "color" : "red", + + "children" : + ( + { "name":"TitleName", "type":"text", "x":0, "y":-1, "text":uiScriptLocale.CHARACTER_SKILL, "all_align":"center" }, + #{ "name":"TitleName", "type":"image", "style" : ("attach",), "x":101, "y" : 1, "image" : LOCALE_PATH+"title_skill.sub", }, + ), + }, + { + "name" : "Emoticon_TitleBar", + "type" : "titlebar", + "style" : ("attach",), + + "x" : 8, + "y" : 7, + + "width" : 238, + "color" : "red", + + "children" : + ( + { "name":"TitleName", "type":"text", "x":0, "y":-1, "text":uiScriptLocale.CHARACTER_ACTION, "all_align":"center" }, + ), + }, + { + "name" : "Quest_TitleBar", + "type" : "titlebar", + "style" : ("attach",), + + "x" : 8, + "y" : 7, + + "width" : 238, + "color" : "red", + + "children" : + ( + { "name":"TitleName", "type":"text", "x":0, "y":-1, "text":uiScriptLocale.CHARACTER_QUEST, "all_align":"center" }, + ), + }, + + ## Tab Area + { + "name" : "TabControl", + "type" : "window", + + "x" : 0, + "y" : 328, + + "width" : 250, + "height" : 31, + + "children" : + ( + ## Tab + { + "name" : "Tab_01", + "type" : "image", + + "x" : 0, + "y" : 0, + + "width" : 250, + "height" : 31, + + "image" : LOCALE_PATH+"tab_1.sub", + }, + { + "name" : "Tab_02", + "type" : "image", + + "x" : 0, + "y" : 0, + + "width" : 250, + "height" : 31, + + "image" : LOCALE_PATH+"tab_2.sub", + }, + { + "name" : "Tab_03", + "type" : "image", + + "x" : 0, + "y" : 0, + + "width" : 250, + "height" : 31, + + "image" : LOCALE_PATH+"tab_3.sub", + }, + { + "name" : "Tab_04", + "type" : "image", + + "x" : 0, + "y" : 0, + + "width" : 250, + "height" : 31, + + "image" : LOCALE_PATH+"tab_4.sub", + }, + ## RadioButton + { + "name" : "Tab_Button_01", + "type" : "radio_button", + + "x" : 6, + "y" : 5, + + "width" : 53, + "height" : 27, + }, + { + "name" : "Tab_Button_02", + "type" : "radio_button", + + "x" : 61, + "y" : 5, + + "width" : 67, + "height" : 27, + }, + { + "name" : "Tab_Button_03", + "type" : "radio_button", + + "x" : 130, + "y" : 5, + + "width" : 61, + "height" : 27, + }, + { + "name" : "Tab_Button_04", + "type" : "radio_button", + + "x" : 192, + "y" : 5, + + "width" : 55, + "height" : 27, + }, + ), + }, + + ## Page Area + { + "name" : "Character_Page", + "type" : "window", + "style" : ("attach",), + + "x" : 0, + "y" : 0, + + "width" : 250, + "height" : 304, + + "children" : + [ + + ## Title Area + { + "name" : "Character_TitleBar", "type" : "titlebar", "style" : ("attach",), "x" : 61, "y" : 7, "width" : 185, "color" : "red", + "children" : + ( + #{ "name" : "TitleName", "type" : "image", "style" : ("attach",), "x" : 70, "y" : 1, "image" : LOCALE_PATH+"title_status.sub", }, + { "name" : "TitleName", "type":"text", "x":0, "y":-1, "text":uiScriptLocale.CHARACTER_MAIN, "all_align":"center" }, + ), + }, + + ## Guild Name Slot + { + "name" : "Guild_Name_Slot", + "type" : "image", + "x" : 60, + "y" :27+7, + "image" : LARGE_VALUE_FILE, + + "children" : + ( + { + "name" : "Guild_Name", + "type":"text", + "text":"??? ???", + "x":0, + "y":0, + "r":1.0, + "g":1.0, + "b":1.0, + "a":1.0, + "all_align" : "center", + }, + ), + }, + + ## Character Name Slot + { + "name" : "Character_Name_Slot", + "type" : "image", + "x" : 153, + "y" :27+7, + "image" : LARGE_VALUE_FILE, + + "children" : + ( + { + "name" : "Character_Name", + "type":"text", + "text":"???? ???", + "x":0, + "y":0, + "r":1.0, + "g":1.0, + "b":1.0, + "a":1.0, + "all_align" : "center", + }, + ), + }, + + ## Header + { + "name":"Status_Header", "type":"window", "x":3, "y":31, "width":0, "height":0, + "children" : + ( + ## Lv + { + "name":"Status_Lv", "type":"window", "x":9, "y":30, "width":37, "height":42, + "children" : + ( + { "name":"Level_Header", "type":"image", "x":0, "y":0, "image":LOCALE_PATH+"label_level.sub" }, + { "name":"Level_Value", "type":"text", "x":19, "y":19, "fontsize":"LARGE", "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ), + }, + + ## EXP + { + "name":"Status_CurExp", "type":"window", "x":53, "y":30, "width":87, "height":42, + "children" : + ( + { "name":"Exp_Slot", "type":"image", "x":0, "y":0, "image":LOCALE_PATH+"label_cur_exp.sub" }, + { "name":"Exp_Value", "type":"text", "x":46, "y":19, "fontsize":"LARGE", "text":"12345678901", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ), + }, + + ## REXP + { + "name":"Status_RestExp", "type":"window", "x":150, "y":30, "width":50, "height":20, + "children" : + ( + { "name":"RestExp_Slot", "type":"image", "x":0, "y":0, "image":LOCALE_PATH+"label_last_exp.sub" }, + { "name":"RestExp_Value", "type":"text", "x":46, "y":19, "fontsize":"LARGE", "text":"12345678901", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ), + }, + ), + }, + + ## Face Slot + { "name" : "Face_Image", "type" : "image", "x" : 11, "y" : 11, "image" : "d:/ymir work/ui/game/windows/face_warrior.sub" }, + { "name" : "Face_Slot", "type" : "image", "x" : 7, "y" : 7, "image" : FACE_SLOT_FILE, }, + + ## ?? ??? + { + "name":"Status_Standard", "type":"window", "x":3, "y":100, "width":200, "height":250, + "children" : + [ + ## ?? ??? ???? + { "name":"Character_Bar_01", "type":"horizontalbar", "x":12, "y":8, "width":223, }, + { "name":"Character_Bar_01_Text", "type" : "image", "x" : 13, "y" : 9, "image" : LOCALE_PATH+"label_std.sub", }, + + ## ??? ???? ??? + { + "name":"Status_Plus_Label", + "type":"image", + "x":150, "y":11, + "image":LOCALE_PATH+"label_uppt.sub", + + "children" : + ( + { "name":"Status_Plus_Value", "type":"text", "x":62, "y":0, "text":"99", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ), + }, + + ## ?? ??? ?????? ????? + {"name":"Status_Standard_ItemList1", "type" : "image", "x":17, "y":31, "image" : LOCALE_PATH+"label_std_item1.sub", }, + {"name":"Status_Standard_ItemList2", "type" : "image", "x":100, "y":30, "image" : LOCALE_PATH+"label_std_item2.sub", }, + + ## HTH + { + "name":"HTH_Label", "type":"window", "x":50, "y":32, "width":60, "height":20, + "children" : + ( + { "name":"HTH_Slot", "type":"image", "x":0, "y":0, "image":SMALL_VALUE_FILE }, + { "name":"HTH_Value", "type":"text", "x":20, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + { "name":"HTH_Plus", "type" : "button", "x":41, "y":3, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, + ), + }, + ## INT + { + "name":"INT_Label", "type":"window", "x":50, "y":32+23, "width":60, "height":20, + "children" : + ( + { "name":"INT_Slot", "type":"image", "x":0, "y":0, "image":SMALL_VALUE_FILE }, + { "name":"INT_Value", "type":"text", "x":20, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + { "name":"INT_Plus", "type" : "button", "x" : 41, "y" : 3, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, + ) + }, + ## STR + { + "name":"STR_Label", "type":"window", "x":50, "y":32+23*2, "width":60, "height":20, + "children" : + ( + { "name":"STR_Slot", "type":"image", "x":0, "y":0, "image":SMALL_VALUE_FILE }, + { "name":"STR_Value", "type":"text", "x":20, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + { "name":"STR_Plus", "type" : "button", "x" : 41, "y" : 3, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, + ) + }, + ## DEX + { + "name":"DEX_Label", "type":"window", "x":50, "y":32+23*3, "width":60, "height":20, + "children" : + ( + { "name":"DEX_Slot", "type":"image", "x":0, "y":0, "image":SMALL_VALUE_FILE }, + { "name":"DEX_Value", "type":"text", "x":20, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + { "name":"DEX_Plus", "type" : "button", "x" : 41, "y" : 3, "default_image" : ROOT_PATH+"btn_plus_up.sub", "over_image" : ROOT_PATH+"btn_plus_over.sub", "down_image" : ROOT_PATH+"btn_plus_down.sub", }, + ) + }, + + { "name":"HTH_Minus", "type" : "button", "x":9, "y":35, "default_image" : ROOT_PATH+"btn_minus_up.sub", "over_image" : ROOT_PATH+"btn_minus_over.sub", "down_image" : ROOT_PATH+"btn_minus_down.sub", }, + { "name":"INT_Minus", "type" : "button", "x":9, "y":35+23, "default_image" : ROOT_PATH+"btn_minus_up.sub", "over_image" : ROOT_PATH+"btn_minus_over.sub", "down_image" : ROOT_PATH+"btn_minus_down.sub", }, + { "name":"STR_Minus", "type" : "button", "x":9, "y":35+23*2, "default_image" : ROOT_PATH+"btn_minus_up.sub", "over_image" : ROOT_PATH+"btn_minus_over.sub", "down_image" : ROOT_PATH+"btn_minus_down.sub", }, { "name":"DEX_Minus", "type" : "button", "x":9, "y":35+23*3, "default_image" : ROOT_PATH+"btn_minus_up.sub", "over_image" : ROOT_PATH+"btn_minus_over.sub", "down_image" : ROOT_PATH+"btn_minus_down.sub", }, #### @@ -385,404 +1110,659 @@ window = { { "name":"HEL_Label", "type":"window", "x":145, "y":32, "width":50, "height":20, "children" : - ( - { "name":"HP_Slot", "type":"image", "x":0, "y":0, "image":LARGE_VALUE_FILE }, - { "name":"HP_Value", "type":"text", "x":45, "y":3, "text":"9999/9999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ), - }, - ## SP - { - "name":"SP_Label", "type":"window", "x":145, "y":32+23, "width":50, "height":20, - "children" : - ( - { "name":"SP_Slot", "type":"image", "x":0, "y":0, "image":LARGE_VALUE_FILE }, - { "name":"SP_Value", "type":"text", "x":45, "y":3, "text":"9999/9999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ) - }, - ## ATT - { - "name":"ATT_Label", "type":"window", "x":145, "y":32+23*2, "width":50, "height":20, - "children" : - ( - { "name":"ATT_Slot", "type":"image", "x":0, "y":0, "image":LARGE_VALUE_FILE }, - { "name":"ATT_Value", "type":"text", "x":45, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ), - }, - ## DEF - { - "name":"DEF_Label", "type":"window", "x":145, "y":32+23*3, "width":50, "height":20, - "children" : - ( - { "name":"DEF_Slot", "type":"image", "x":0, "y":0, "image":LARGE_VALUE_FILE }, - { "name":"DEF_Value", "type":"text", "x":45, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ) - }, - ), - }, - - ## ΰ ɷ - { - "name":"Status_Extent", "type":"window", "x":3, "y":221, "width":200, "height":50, - "children" : - ( + [ + { "name":"HP_Slot", "type":"image", "x":0, "y":0, "image":LARGE_VALUE_FILE }, + { "name":"HP_Value", "type":"text", "x":45, "y":3, "text":"9999/9999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ] + }, + ## SP + { + "name":"SP_Label", "type":"window", "x":145, "y":32+23, "width":50, "height":20, + "children" : + [ + { "name":"SP_Slot", "type":"image", "x":0, "y":0, "image":LARGE_VALUE_FILE }, + { "name":"SP_Value", "type":"text", "x":45, "y":3, "text":"9999/9999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ] + }, + ## ATT + { + "name":"ATT_Label", "type":"window", "x":145, "y":32+23*2, "width":50, "height":20, + "children" : + [ + { "name":"ATT_Slot", "type":"image", "x":0, "y":0, "image":LARGE_VALUE_FILE }, + { "name":"ATT_Value", "type":"text", "x":45, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ] + }, + ## DEF + { + "name":"DEF_Label", "type":"window", "x":145, "y":32+23*3, "width":50, "height":20, + "children" : + [ + { "name":"DEF_Slot", "type":"image", "x":0, "y":0, "image":LARGE_VALUE_FILE }, + { "name":"DEF_Value", "type":"text", "x":45, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ] + }, + ], + }, - ## ΰ ɷ - { "name":"Status_Extent_Bar", "type":"horizontalbar", "x":12, "y":6, "width":223, }, - { "name":"Status_Extent_Label", "type" : "image", "x" : 13, "y" : 8, "image" : LOCALE_PATH+"label_ext.sub", }, + ## ??? ??? + { + "name":"Status_Extent", "type":"window", "x":3, "y":221, "width":200, "height":50, + "children" : + ( - ## ⺻ ɷ Ʈ - {"name":"Status_Extent_ItemList1", "type" : "image", "x":11, "y":31, "image" : LOCALE_PATH+"label_ext_item1.sub", }, - {"name":"Status_Extent_ItemList2", "type" : "image", "x":128, "y":32, "image" : LOCALE_PATH+"label_ext_item2.sub", }, + ## ??? ??? ???? + { "name":"Status_Extent_Bar", "type":"horizontalbar", "x":12, "y":6, "width":223, }, + { "name":"Status_Extent_Label", "type" : "image", "x" : 13, "y" : 8, "image" : LOCALE_PATH+"label_ext.sub", }, - ## MSPD - ̵ ӵ - { - "name":"MOV_Label", "type":"window", "x":66, "y":33, "width":50, "height":20, - "children" : - ( - { "name":"MSPD_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, - { "name":"MSPD_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ) - }, + ## ?? ??? ?????? ????? + {"name":"Status_Extent_ItemList1", "type" : "image", "x":11, "y":31, "image" : LOCALE_PATH+"label_ext_item1.sub", }, + {"name":"Status_Extent_ItemList2", "type" : "image", "x":128, "y":32, "image" : LOCALE_PATH+"label_ext_item2.sub", }, - ## ASPD - ӵ - { - "name":"ASPD_Label", "type":"window", "x":66, "y":33+23, "width":50, "height":20, - "children" : - ( - { "name":"ASPD_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, - { "name":"ASPD_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ) - }, + ## MSPD - ??? ??? + { + "name":"MOV_Label", "type":"window", "x":66, "y":33, "width":50, "height":20, + "children" : + ( + { "name":"MSPD_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, + { "name":"MSPD_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ) + }, - ## CSPD - ֹ ӵ - { - "name":"CSPD_Label", "type":"window", "x":66, "y":33+23*2, "width":50, "height":20, - "children" : - ( - { "name":"CSPD_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, - { "name":"CSPD_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ) - }, + ## ASPD - ???? ??? + { + "name":"ASPD_Label", "type":"window", "x":66, "y":33+23, "width":50, "height":20, + "children" : + ( + { "name":"ASPD_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, + { "name":"ASPD_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ) + }, - ## MATT - ݷ - { - "name":"MATT_Label", "type":"window", "x":183, "y":33, "width":50, "height":20, - "children" : - ( - { "name":"MATT_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, - { "name":"MATT_Value", "type":"text", "x":26, "y":3, "text":"999-999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ) - }, + ## CSPD - ??? ??? + { + "name":"CSPD_Label", "type":"window", "x":66, "y":33+23*2, "width":50, "height":20, + "children" : + ( + { "name":"CSPD_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, + { "name":"CSPD_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ) + }, - ## MDEF - - { - "name":"MDEF_Label", "type":"window", "x":183, "y":33+23, "width":50, "height":20, - "children" : - ( - { "name":"MDEF_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, - { "name":"MDEF_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ) - }, + ## MATT - ???? ????? + { + "name":"MATT_Label", "type":"window", "x":183, "y":33, "width":50, "height":20, + "children" : + ( + { "name":"MATT_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, + { "name":"MATT_Value", "type":"text", "x":26, "y":3, "text":"999-999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ) + }, - ## ȸ - { - "name":"ER_Label", "type":"window", "x":183, "y":33+23*2, "width":50, "height":20, - "children" : - ( - { "name":"ER_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, - { "name":"ER_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ) - }, + ## MDEF - ???? ???? + { + "name":"MDEF_Label", "type":"window", "x":183, "y":33+23, "width":50, "height":20, + "children" : + ( + { "name":"MDEF_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, + { "name":"MDEF_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ) + }, - ), - }, - ), - }, - { - "name" : "Skill_Page", - "type" : "window", - "style" : ("attach",), + ## ????? + { + "name":"ER_Label", "type":"window", "x":183, "y":33+23*2, "width":50, "height":20, + "children" : + ( + { "name":"ER_Slot", "type":"image", "x":0, "y":0, "image":MIDDLE_VALUE_FILE }, + { "name":"ER_Value", "type":"text", "x":26, "y":3, "text":"999", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ) + }, - "x" : 0, - "y" : 24, + ), + }, + ], + }, + { + "name" : "Skill_Page", + "type" : "window", + "style" : ("attach",), - "width" : 250, - "height" : 304, + "x" : 0, + "y" : 24, - "children" : - ( + "width" : 250, + "height" : 304, - { - "name":"Skill_Active_Title_Bar", "type":"horizontalbar", "x":15, "y":17, "width":223, + "children" : + ( - "children" : - ( - { - "name":"Active_Skill_Point_Label", "type":"image", "x":145, "y":3, "image":LOCALE_PATH+"label_uppt.sub", - "children" : - ( - { "name":"Active_Skill_Point_Value", "type":"text", "x":62, "y":0, "text":"99", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ), - }, + { + "name":"Skill_Active_Title_Bar", "type":"horizontalbar", "x":15, "y":17, "width":223, - ## Group Button - { - "name" : "Skill_Group_Button_1", - "type" : "radio_button", - - "x" : 5, - "y" : 2, - - "text" : "Group1", - "text_color" : 0xFFFFE3AD, - - "default_image" : "d:/ymir work/ui/game/windows/skill_tab_button_01.sub", - "over_image" : "d:/ymir work/ui/game/windows/skill_tab_button_02.sub", - "down_image" : "d:/ymir work/ui/game/windows/skill_tab_button_03.sub", - }, - - { - "name" : "Skill_Group_Button_2", - "type" : "radio_button", - - "x" : 50, - "y" : 2, - - "text" : "Group2", - "text_color" : 0xFFFFE3AD, - - "default_image" : "d:/ymir work/ui/game/windows/skill_tab_button_01.sub", - "over_image" : "d:/ymir work/ui/game/windows/skill_tab_button_02.sub", - "down_image" : "d:/ymir work/ui/game/windows/skill_tab_button_03.sub", - }, - - { - "name" : "Active_Skill_Group_Name", - "type" : "text", - - "x" : 7, - "y" : 1, - "text" : "Active", - - "vertical_align" : "center", - "text_vertical_align" : "center", - "color" : 0xFFFFE3AD, - }, - - ), - }, - - { - "name":"Skill_ETC_Title_Bar", "type":"horizontalbar", "x":15, "y":200, "width":223, - - "children" : - ( - { - "name" : "Support_Skill_Group_Name", - "type" : "text", - - "x" : 7, - "y" : 1, - "text" : uiScriptLocale.SKILL_SUPPORT_TITLE, - - "vertical_align" : "center", - "text_vertical_align" : "center", - "color" : 0xFFFFE3AD, - }, - - { - "name":"Support_Skill_Point_Label", "type":"image", "x":145, "y":3, "image":LOCALE_PATH+"label_uppt.sub", - "children" : - ( - { "name":"Support_Skill_Point_Value", "type":"text", "x":62, "y":0, "text":"99", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, - ), - }, - ), - }, - { "name":"Skill_Board", "type":"image", "x":13, "y":38, "image":"d:/ymir work/ui/game/windows/skill_board.sub", }, - - ## Active Slot - { - "name" : "Skill_Active_Slot", - "type" : "slot", - - "x" : 0 + 16, - "y" : 0 + 15 + 23, - - "width" : 223, - "height" : 223, - "image" : ICON_SLOT_FILE, - - "slot" : ( - {"index": 1, "x": 1, "y": 4, "width":32, "height":32}, - {"index":21, "x":38, "y": 4, "width":32, "height":32}, - {"index":41, "x":75, "y": 4, "width":32, "height":32}, - - {"index": 3, "x": 1, "y": 40, "width":32, "height":32}, - {"index":23, "x":38, "y": 40, "width":32, "height":32}, - {"index":43, "x":75, "y": 40, "width":32, "height":32}, - - {"index": 5, "x": 1, "y": 76, "width":32, "height":32}, - {"index":25, "x":38, "y": 76, "width":32, "height":32}, - {"index":45, "x":75, "y": 76, "width":32, "height":32}, - - {"index": 7, "x": 1, "y":112, "width":32, "height":32}, - {"index":27, "x":38, "y":112, "width":32, "height":32}, - {"index":47, "x":75, "y":112, "width":32, "height":32}, - - #### - - {"index": 2, "x":113, "y": 4, "width":32, "height":32}, - {"index":22, "x":150, "y": 4, "width":32, "height":32}, - {"index":42, "x":187, "y": 4, "width":32, "height":32}, - - {"index": 4, "x":113, "y": 40, "width":32, "height":32}, - {"index":24, "x":150, "y": 40, "width":32, "height":32}, - {"index":44, "x":187, "y": 40, "width":32, "height":32}, - - {"index": 6, "x":113, "y": 76, "width":32, "height":32}, - {"index":26, "x":150, "y": 76, "width":32, "height":32}, - {"index":46, "x":187, "y": 76, "width":32, "height":32}, - - {"index": 8, "x":113, "y":112, "width":32, "height":32}, - {"index":28, "x":150, "y":112, "width":32, "height":32}, - {"index":48, "x":187, "y":112, "width":32, "height":32}, + "children" : + ( + { + "name":"Active_Skill_Point_Label", "type":"image", "x":145, "y":3, "image":LOCALE_PATH+"label_uppt.sub", + "children" : + ( + { "name":"Active_Skill_Point_Value", "type":"text", "x":62, "y":0, "text":"99", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, ), - }, + }, - ## ETC Slot - { - "name" : "Skill_ETC_Slot", - "type" : "grid_table", - "x" : 18, - "y" : 221, - "start_index" : 101, - "x_count" : 6, - "y_count" : 2, - "x_step" : 32, - "y_step" : 32, - "x_blank" : 5, - "y_blank" : 4, - "image" : ICON_SLOT_FILE, - }, + ## Group Button + { + "name" : "Skill_Group_Button_1", + "type" : "radio_button", - ), - }, - { - "name" : "Emoticon_Page", - "type" : "window", - "style" : ("attach",), + "x" : 5, + "y" : 2, - "x" : 0, - "y" : 24, + "text" : "Group1", + "text_color" : 0xFFFFE3AD, - "width" : 250, - "height" : 304, + "default_image" : "d:/ymir work/ui/game/windows/skill_tab_button_01.sub", + "over_image" : "d:/ymir work/ui/game/windows/skill_tab_button_02.sub", + "down_image" : "d:/ymir work/ui/game/windows/skill_tab_button_03.sub", + }, - "children" : - ( - ## ⺻ ׼ - { "name":"Action_Bar", "type":"horizontalbar", "x":12, "y":11, "width":223, }, - { "name":"Action_Bar_Text", "type":"text", "x":15, "y":13, "text":uiScriptLocale.CHARACTER_NORMAL_ACTION }, + { + "name" : "Skill_Group_Button_2", + "type" : "radio_button", - ## Basis Action Slot - { - "name" : "SoloEmotionSlot", - "type" : "grid_table", - "x" : 30, - "y" : 33, - "horizontal_align" : "center", - "start_index" : 1, - "x_count" : 6, - "y_count" : 3, - "x_step" : 32, - "y_step" : 32, - "x_blank" : 0, - "y_blank" : 0, - "image" : ICON_SLOT_FILE, - }, + "x" : 50, + "y" : 2, - ## ȣ ׼ - { "name":"Reaction_Bar", "type":"horizontalbar", "x":12, "y":8+150, "width":223, }, - { "name":"Reaction_Bar_Text", "type":"text", "x":15, "y":10+150, "text":uiScriptLocale.CHARACTER_MUTUAL_ACTION }, + "text" : "Group2", + "text_color" : 0xFFFFE3AD, - ## Reaction Slot - { - "name" : "DualEmotionSlot", - "type" : "grid_table", - "x" : 30, - "y" : 180, - "start_index" : 51, - "x_count" : 6, - "y_count" : 3, - "x_step" : 32, - "y_step" : 32, - "x_blank" : 0, - "y_blank" : 0, - "image" : ICON_SLOT_FILE, - }, - ), - }, - { - "name" : "Quest_Page", - "type" : "window", - "style" : ("attach",), + "default_image" : "d:/ymir work/ui/game/windows/skill_tab_button_01.sub", + "over_image" : "d:/ymir work/ui/game/windows/skill_tab_button_02.sub", + "down_image" : "d:/ymir work/ui/game/windows/skill_tab_button_03.sub", + }, - "x" : 0, - "y" : 24, + { + "name" : "Active_Skill_Group_Name", + "type" : "text", - "width" : 250, - "height" : 304, + "x" : 7, + "y" : 1, + "text" : "Active", - "children" : - ( - { - "name" : "Quest_Slot", - "type" : "grid_table", - "x" : 18, - "y" : 20, - "start_index" : 0, - "x_count" : 1, - "y_count" : 5, - "x_step" : 32, - "y_step" : 32, - "y_blank" : 28, - "image" : QUEST_ICON_BACKGROUND, - }, + "vertical_align" : "center", + "text_vertical_align" : "center", + "color" : 0xFFFFE3AD, + }, - { - "name" : "Quest_ScrollBar", - "type" : "scrollbar", + ), + }, - "x" : 25, - "y" : 12, - "size" : 290, - "horizontal_align" : "right", - }, + { + "name":"Skill_ETC_Title_Bar", "type":"horizontalbar", "x":15, "y":200, "width":223, - { "name" : "Quest_Name_00", "type" : "text", "text" : "̸Դϴ", "x" : 60, "y" : 14 }, - { "name" : "Quest_LastTime_00", "type" : "text", "text" : " ð Դϴ", "x" : 60, "y" : 30 }, - { "name" : "Quest_LastCount_00", "type" : "text", "text" : " Դϴ", "x" : 60, "y" : 46 }, + "children" : + ( + { + "name" : "Support_Skill_Group_Name", + "type" : "text", - { "name" : "Quest_Name_01", "type" : "text", "text" : "̸Դϴ", "x" : 60, "y" : 74 }, - { "name" : "Quest_LastTime_01", "type" : "text", "text" : " ð Դϴ", "x" : 60, "y" : 90 }, - { "name" : "Quest_LastCount_01", "type" : "text", "text" : " Դϴ", "x" : 60, "y" : 106 }, + "x" : 7, + "y" : 1, + "text" : uiScriptLocale.SKILL_SUPPORT_TITLE, - { "name" : "Quest_Name_02", "type" : "text", "text" : "̸Դϴ", "x" : 60, "y" : 134 }, - { "name" : "Quest_LastTime_02", "type" : "text", "text" : " ð Դϴ", "x" : 60, "y" : 150 }, - { "name" : "Quest_LastCount_02", "type" : "text", "text" : " Դϴ", "x" : 60, "y" : 166 }, + "vertical_align" : "center", + "text_vertical_align" : "center", + "color" : 0xFFFFE3AD, + }, - { "name" : "Quest_Name_03", "type" : "text", "text" : "̸Դϴ", "x" : 60, "y" : 194 }, - { "name" : "Quest_LastTime_03", "type" : "text", "text" : " ð Դϴ", "x" : 60, "y" : 210 }, - { "name" : "Quest_LastCount_03", "type" : "text", "text" : " Դϴ", "x" : 60, "y" : 226 }, + { + "name":"Support_Skill_Point_Label", "type":"image", "x":145, "y":3, "image":LOCALE_PATH+"label_uppt.sub", + "children" : + ( + { "name":"Support_Skill_Point_Value", "type":"text", "x":62, "y":0, "text":"99", "r":1.0, "g":1.0, "b":1.0, "a":1.0, "text_horizontal_align":"center" }, + ), + }, + ), + }, + { "name":"Skill_Board", "type":"image", "x":13, "y":38, "image":"d:/ymir work/ui/game/windows/skill_board.sub", }, - { "name" : "Quest_Name_04", "type" : "text", "text" : "̸Դϴ", "x" : 60, "y" : 254 }, - { "name" : "Quest_LastTime_04", "type" : "text", "text" : " ð Դϴ", "x" : 60, "y" : 270 }, - { "name" : "Quest_LastCount_04", "type" : "text", "text" : " Դϴ", "x" : 60, "y" : 286 }, + ## Active Slot + { + "name" : "Skill_Active_Slot", + "type" : "slot", - ), - }, - ), - }, - ), -} + "x" : 0 + 16, + "y" : 0 + 15 + 23, + + "width" : 223, + "height" : 223, + "image" : ICON_SLOT_FILE, + + "slot" : ( + {"index": 1, "x": 1, "y": 4, "width":32, "height":32}, + {"index":21, "x":38, "y": 4, "width":32, "height":32}, + {"index":41, "x":75, "y": 4, "width":32, "height":32}, + + {"index": 3, "x": 1, "y": 40, "width":32, "height":32}, + {"index":23, "x":38, "y": 40, "width":32, "height":32}, + {"index":43, "x":75, "y": 40, "width":32, "height":32}, + + {"index": 5, "x": 1, "y": 76, "width":32, "height":32}, + {"index":25, "x":38, "y": 76, "width":32, "height":32}, + {"index":45, "x":75, "y": 76, "width":32, "height":32}, + + {"index": 7, "x": 1, "y":112, "width":32, "height":32}, + {"index":27, "x":38, "y":112, "width":32, "height":32}, + {"index":47, "x":75, "y":112, "width":32, "height":32}, + + #### + + {"index": 2, "x":113, "y": 4, "width":32, "height":32}, + {"index":22, "x":150, "y": 4, "width":32, "height":32}, + {"index":42, "x":187, "y": 4, "width":32, "height":32}, + + {"index": 4, "x":113, "y": 40, "width":32, "height":32}, + {"index":24, "x":150, "y": 40, "width":32, "height":32}, + {"index":44, "x":187, "y": 40, "width":32, "height":32}, + + {"index": 6, "x":113, "y": 76, "width":32, "height":32}, + {"index":26, "x":150, "y": 76, "width":32, "height":32}, + {"index":46, "x":187, "y": 76, "width":32, "height":32}, + + {"index": 8, "x":113, "y":112, "width":32, "height":32}, + {"index":28, "x":150, "y":112, "width":32, "height":32}, + {"index":48, "x":187, "y":112, "width":32, "height":32}, + ), + }, + + ## ETC Slot + { + "name" : "Skill_ETC_Slot", + "type" : "grid_table", + "x" : 18, + "y" : 221, + "start_index" : 101, + "x_count" : 6, + "y_count" : 2, + "x_step" : 32, + "y_step" : 32, + "x_blank" : 5, + "y_blank" : 4, + "image" : ICON_SLOT_FILE, + }, + + ), + }, + ], + }, + ), + } + +if app.ENABLE_QUEST_RENEWAL: + window["children"][0]["children"] = window["children"][0]["children"] + [ + { + "name" : "Quest_Page", + "type" : "window", + "style" : ("attach",), + + "x" : 0, + "y" : 24, + + "width" : 250, + ## if app.ENABLE_CONQUEROR_LEVEL: + "height" : QUEST_BOARD_WINDOW_HEIGHT, + + "children" : + ( + { + "name" : "quest_page_board_window", + "type" : "window", + "style" : ("attach", "ltr",), + + "x" : 10, + "y" : 7, + + "width" : QUEST_BOARD_WINDOW_WIDTH, + "height" : QUEST_BOARD_WINDOW_HEIGHT, + + "children" : + ( + ## LeftTop 1 + { + "name" : "LeftTop", + "type" : "image", + "style" : ("ltr",), + + "x" : 0, + "y" : 0, + "image" : PATTERN_PATH + "border_A_left_top.tga", + }, + ## RightTop 2 + { + "name" : "RightTop", + "type" : "image", + "style" : ("ltr",), + + "x" : QUEST_BOARD_WINDOW_WIDTH - 16, + "y" : 0, + "image" : PATTERN_PATH + "border_A_right_top.tga", + }, + ## LeftBottom 3 + { + "name" : "LeftBottom", + "type" : "image", + "style" : ("ltr",), + + "x" : 0, + "y" : QUEST_BOARD_WINDOW_HEIGHT - 16, + "image" : PATTERN_PATH + "border_A_left_bottom.tga", + }, + ## RightBottom 4 + { + "name" : "RightBottom", + "type" : "image", + "style" : ("ltr",), + + "x" : QUEST_BOARD_WINDOW_WIDTH - 16, + "y" : QUEST_BOARD_WINDOW_HEIGHT - 16, + "image" : PATTERN_PATH + "border_A_right_bottom.tga", + }, + ## topcenterImg 5 + { + "name" : "TopCenterImg", + "type" : "expanded_image", + "style" : ("ltr",), + + "x" : 16, + "y" : 0, + "image" : PATTERN_PATH + "border_A_top.tga", + "rect" : (0.0, 0.0, QUEST_BOARD_PATTERN_X_COUNT, 0), + }, + ## leftcenterImg 6 + { + "name" : "LeftCenterImg", + "type" : "expanded_image", + "style" : ("ltr",), + + "x" : 0, + "y" : 16, + "image" : PATTERN_PATH + "border_A_left.tga", + "rect" : (0.0, 0.0, 0, QUEST_BOARD_PATTERN_Y_COUNT), + }, + ## rightcenterImg 7 + { + "name" : "RightCenterImg", + "type" : "expanded_image", + "style" : ("ltr",), + + "x" : QUEST_BOARD_WINDOW_WIDTH - 16, + "y" : 16, + "image" : PATTERN_PATH + "border_A_right.tga", + "rect" : (0.0, 0.0, 0, QUEST_BOARD_PATTERN_Y_COUNT), + }, + ## bottomcenterImg 8 + { + "name" : "BottomCenterImg", + "type" : "expanded_image", + "style" : ("ltr",), + + "x" : 16, + "y" : QUEST_BOARD_WINDOW_HEIGHT - 16, + "image" : PATTERN_PATH + "border_A_bottom.tga", + "rect" : (0.0, 0.0, QUEST_BOARD_PATTERN_X_COUNT, 0), + }, + ## centerImg + { + "name" : "CenterImg", + "type" : "expanded_image", + "style" : ("ltr",), + + "x" : 16, + "y" : 16, + "image" : PATTERN_PATH + "border_A_center.tga", + "rect" : (0.0, 0.0, QUEST_BOARD_PATTERN_X_COUNT, QUEST_BOARD_PATTERN_Y_COUNT), + }, + + { + "name" : "quest_object_board_window", + "type" : "window", + "style" : ("attach", "ltr",), + + "x" : 3, + "y" : 3, + + "width" : QUEST_BOARD_WINDOW_WIDTH - 6, + "height" : QUEST_BOARD_WINDOW_HEIGHT - 6, + }, + ), + }, + + { + "name" : "Quest_ScrollBar", + "type" : "scrollbar", + + "x" : 25, + "y" : 12, + ## if app.ENABLE_CONQUEROR_LEVEL: + "size" : QUEST_BOARD_WINDOW_HEIGHT - 10, + "horizontal_align" : "right", + }, + ), + },] +else: + window["children"][0]["children"] = window["children"][0]["children"] + [ + { + "name" : "Quest_Page", + "type" : "window", + "style" : ("attach",), + + "x" : 0, + "y" : 24, + + "width" : 250, + "height" : 304, + + "children" : + ( + { + "name" : "Quest_Slot", + "type" : "grid_table", + "x" : 18, + "y" : 20, + "start_index" : 0, + "x_count" : 1, + "y_count" : 5, + "x_step" : 32, + "y_step" : 32, + "y_blank" : 28, + "image" : QUEST_ICON_BACKGROUND, + }, + + { + "name" : "Quest_ScrollBar", + "type" : "scrollbar", + + "x" : 25, + "y" : 12, + "size" : 290, + "horizontal_align" : "right", + }, + + { "name" : "Quest_Name_00", "type" : "text", "text" : "???????", "x" : 60, "y" : 14 }, + { "name" : "Quest_LastTime_00", "type" : "text", "text" : "???? ?? ????", "x" : 60, "y" : 30 }, + { "name" : "Quest_LastCount_00", "type" : "text", "text" : "???? ???? ????", "x" : 60, "y" : 46 }, + + { "name" : "Quest_Name_01", "type" : "text", "text" : "???????", "x" : 60, "y" : 74 }, + { "name" : "Quest_LastTime_01", "type" : "text", "text" : "???? ?? ????", "x" : 60, "y" : 90 }, + { "name" : "Quest_LastCount_01", "type" : "text", "text" : "???? ???? ????", "x" : 60, "y" : 106 }, + + { "name" : "Quest_Name_02", "type" : "text", "text" : "???????", "x" : 60, "y" : 134 }, + { "name" : "Quest_LastTime_02", "type" : "text", "text" : "???? ?? ????", "x" : 60, "y" : 150 }, + { "name" : "Quest_LastCount_02", "type" : "text", "text" : "???? ???? ????", "x" : 60, "y" : 166 }, + + { "name" : "Quest_Name_03", "type" : "text", "text" : "???????", "x" : 60, "y" : 194 }, + { "name" : "Quest_LastTime_03", "type" : "text", "text" : "???? ?? ????", "x" : 60, "y" : 210 }, + { "name" : "Quest_LastCount_03", "type" : "text", "text" : "???? ???? ????", "x" : 60, "y" : 226 }, + + { "name" : "Quest_Name_04", "type" : "text", "text" : "???????", "x" : 60, "y" : 254 }, + { "name" : "Quest_LastTime_04", "type" : "text", "text" : "???? ?? ????", "x" : 60, "y" : 270 }, + { "name" : "Quest_LastCount_04", "type" : "text", "text" : "???? ???? ????", "x" : 60, "y" : 286 }, + ), + },] + +if app.ENABLE_CONQUEROR_LEVEL: + window["children"][0]["children"] = window["children"][0]["children"] + [ + { + "name" : "Emoticon_Page", + "type" : "window", + "style" : ("attach",), + + "x" : 0, + "y" : 24, + + "width" : 250, + "height" : 304, + + "children" : + [ + ## ?? ??? ???? + { "name":"Action_Bar", "type":"horizontalbar", "x":12, "y":11+7, "width":223, }, + { "name":"Action_Bar_Img", "type":"image", "x":15, "y":19, "image":ROOT_PATH+"action_bar_img.sub", }, + + ## Basis Action Slot + { + "name" : "SoloEmotionSlot", + "type" : "grid_table", + "x" : 15, + "y" : 33+7, + "horizontal_align" : "center", + "start_index" : 1, + "x_count" : 6, + "y_count" : 3, + "x_step" : 32, + "y_step" : 32, + "x_blank" : 5, + "y_blank" : 10, + "image" : ICON_SLOT_FILE, + }, + + ## ??? ??? ???? + { "name":"Reaction_Bar", "type":"horizontalbar", "x":12, "y":8+130+26, "width":223, }, + { "name":"Reaction_Bar_Img", "type":"image", "x":15, "y":10+130+25, "image":ROOT_PATH+"reaction_bar_img.sub", }, + + ## ??? ??? ???? + { + "name" : "DualEmotionSlot", + "type" : "grid_table", + "x" : 15, + "y" : 160+25, + "start_index" : 51, + "x_count" : 6, + "y_count" : 1, + "x_step" : 32, + "y_step" : 32, + "x_blank" : 5, + "y_blank" : 10, + "image" : ICON_SLOT_FILE, + }, + + ## ??? ??? ???? + { "name":"Special_Action_Bar", "type":"horizontalbar", "x":12, "y":8+190+25, "width":223, }, + { "name":"Special_Action_Bar_Img", "type":"image", "x":15, "y":10+190+24, "image":ROOT_PATH+"special_action_bar_img.sub", }, + + ## ??? ??? ???? + { + "name" : "SpecialEmotionSlot", + "type" : "grid_table", + + "x" : 15, + "y" : 220+25, + "start_index" : app.SPECIAL_ACTION_START_INDEX, + "x_count" : 6, + "y_count" : 2, + "x_step" : 32, + "y_step" : 32, + "x_blank" : 5, + "y_blank" : 10, + "image" : ICON_SLOT_FILE, + }, + ], + },] +else: + window["children"][0]["children"] = window["children"][0]["children"] + [ + { + "name" : "Emoticon_Page", + "type" : "window", + "style" : ("attach",), + + "x" : 0, + "y" : 24, + + "width" : 250, + "height" : 304, + + "children" : + [ + ## ?? ??? ???? + { "name":"Action_Bar", "type":"horizontalbar", "x":12, "y":11, "width":223, }, + { "name":"Action_Bar_Text", "type":"text", "x":15, "y":13, "text":uiScriptLocale.CHARACTER_NORMAL_ACTION }, + + ## Basis Action Slot + { + "name" : "SoloEmotionSlot", + "type" : "grid_table", + "x" : 30, + "y" : 33, + "horizontal_align" : "center", + "start_index" : 1, + "x_count" : 6, + "y_count" : 3, + "x_step" : 32, + "y_step" : 32, + "x_blank" : 0, + "y_blank" : 0, + "image" : ICON_SLOT_FILE, + }, + + ## ??? ??? ???? + { "name":"Reaction_Bar", "type":"horizontalbar", "x":12, "y":8+130, "width":223, }, + { "name":"Reaction_Bar_Text", "type":"text", "x":15, "y":10+130, "text":uiScriptLocale.CHARACTER_MUTUAL_ACTION }, + + ## Reaction Slot + { + "name" : "DualEmotionSlot", + "type" : "grid_table", + "x" : 30, + "y" : 160, + "start_index" : 51, + "x_count" : 6, + "y_count" : 1, + "x_step" : 32, + "y_step" : 32, + "x_blank" : 0, + "y_blank" : 0, + "image" : ICON_SLOT_FILE, + }, + + ## ??? ??? ???? + { "name":"Special_Action_Bar", "type":"horizontalbar", "x":12, "y":8+190, "width":223, }, + { "name":"Special_Action_Bar_Text", "type":"text", "x":15, "y":10+190, "text":uiScriptLocale.CHARACTER_SPECTIAL_ACTION }, + + ## Special_Action_Slot + { + "name" : "SpecialEmotionSlot", + "type" : "grid_table", + + "x" : 30, + "y" : 220, + "start_index" : app.SPECIAL_ACTION_START_INDEX, + "x_count" : 6, + "y_count" : 2, + "x_step" : 32, + "y_step" : 32, + "x_blank" : 0, + "y_blank" : 0, + "image" : ICON_SLOT_FILE, + }, + ], + },] diff --git a/src/UserInterface/Locale.h b/src/UserInterface/Locale.h index 24b30560..5296e482 100644 --- a/src/UserInterface/Locale.h +++ b/src/UserInterface/Locale.h @@ -8,6 +8,7 @@ #define ENABLE_NEW_EQUIPMENT_SYSTEM #define __BL_CLIP_MASK__ #define __BL_MOUSE_WHEEL_TOP_WINDOW__ +#define ENABLE_QUEST_RENEWAL // Quest Page Renewal by Owsap bool LocaleService_IsYMIR(); bool LocaleService_IsJAPAN(); diff --git a/src/UserInterface/Packet.h b/src/UserInterface/Packet.h index 42c13c27..ad5b34b6 100644 --- a/src/UserInterface/Packet.h +++ b/src/UserInterface/Packet.h @@ -1979,6 +1979,11 @@ typedef struct packet_quest_info BYTE flag; } TPacketGCQuestInfo; +#if defined(ENABLE_QUEST_RENEWAL) + BYTE type; + bool is_confirmed; +#endif + typedef struct packet_quest_confirm { BYTE header; diff --git a/src/UserInterface/PythonApplicationModule.cpp b/src/UserInterface/PythonApplicationModule.cpp index aa65c395..2962bbd1 100644 --- a/src/UserInterface/PythonApplicationModule.cpp +++ b/src/UserInterface/PythonApplicationModule.cpp @@ -1188,6 +1188,56 @@ PyObject* appLogoClose(PyObject* poSelf, PyObject* poArgs) return Py_BuildNone(); } +#if defined(ENABLE_QUEST_RENEWAL) +PyObject* appGetTextLength(PyObject* poSelf, PyObject* poArgs) +{ + int iLength = 0; + + char* szString; + if (PyTuple_GetString(poArgs, 0, &szString)) + iLength = MultiByteToWideChar(GetDefaultCodePage(), 0, szString, -1, nullptr, 0); + + return Py_BuildValue("i", iLength); +} + +PyObject* appGetTextWidth(PyObject* poSelf, PyObject* poArgs) +{ + char* szString; + if (!PyTuple_GetString(poArgs, 0, &szString)) + return Py_BuildValue("i", 0); + + const DWORD dwDefaultCodePage = GetDefaultCodePage(); + int iLength = MultiByteToWideChar(dwDefaultCodePage, 0, szString, -1, nullptr, 0); + + wchar_t* wText = (wchar_t*)_alloca(2 * iLength); + + iLength = MultiByteToWideChar(dwDefaultCodePage, 0, szString, -1, wText, iLength); + + CGraphicText* pkDefaultFont = static_cast(DefaultFont_GetResource()); + if (!pkDefaultFont) + return Py_BuildValue("i", 0); + + CGraphicFontTexture* pFont = pkDefaultFont->GetFontTexturePointer(); + if (!pFont) + return Py_BuildValue("i", 0); + + float fWidth = 0.0f; + for (int i = 0; i < iLength; ++i) + { + if (!wText[i]) + continue; + + CGraphicFontTexture::TCharacterInfomation* pCharacterInfomation = pFont->GetCharacterInfomation(dwDefaultCodePage, wText[i]); + if (!pCharacterInfomation) + continue; + + fWidth += pCharacterInfomation->advance; + } + + return Py_BuildValue("i", (int)ceilf(fWidth)); +} +#endif + void initapp() { static PyMethodDef s_methods[] = @@ -1327,7 +1377,11 @@ void initapp() { "OnLogoRender", appLogoRender, METH_VARARGS }, { "OnLogoOpen", appLogoOpen, METH_VARARGS }, { "OnLogoClose", appLogoClose, METH_VARARGS }, - + +#if defined(ENABLE_QUEST_RENEWAL) + { "GetTextLength", appGetTextLength, METH_VARARGS }, + { "GetTextWidth", appGetTextWidth, METH_VARARGS }, +#endif { NULL, NULL }, }; @@ -1507,6 +1561,12 @@ void initapp() PyModule_AddIntConstant(poModule, "ENABLE_DRAGON_SOUL_SYSTEM", 0); #endif +#if defined(ENABLE_QUEST_RENEWAL) + PyModule_AddIntConstant(poModule, "ENABLE_QUEST_RENEWAL", 1); +#else + PyModule_AddIntConstant(poModule, "ENABLE_QUEST_RENEWAL", 0); +#endif + #if defined(__BL_CLIP_MASK__) PyModule_AddIntConstant(poModule, "__BL_CLIP_MASK__", true); #else @@ -1519,6 +1579,12 @@ void initapp() PyModule_AddIntConstant(poModule, "__BL_MOUSE_WHEEL_TOP_WINDOW__", false); #endif +#if defined(ENABLE_CONQUEROR_LEVEL) + PyModule_AddIntConstant(poModule, "ENABLE_CONQUEROR_LEVEL", 1); +#else + PyModule_AddIntConstant(poModule, "ENABLE_CONQUEROR_LEVEL", 0); +#endif + #ifdef ENABLE_NEW_EQUIPMENT_SYSTEM PyModule_AddIntConstant(poModule, "ENABLE_NEW_EQUIPMENT_SYSTEM", 1); #else diff --git a/src/UserInterface/PythonEventManager.cpp b/src/UserInterface/PythonEventManager.cpp index 345a0047..fd85c44f 100644 --- a/src/UserInterface/PythonEventManager.cpp +++ b/src/UserInterface/PythonEventManager.cpp @@ -145,7 +145,7 @@ int CPythonEventManager::RegisterEventSetFromString(const std::string& strScript if (!pEventSet) return -1; - // SCRIPT_PARSING_FAILURE_CLEAR_BUG ũƮ Ľ н __ClearEventSetp ߻ + // SCRIPT_PARSING_FAILURE_CLEAR_BUG ��ũ��Ʈ �Ľ� ���н� __ClearEventSetp ���� ���� �߻� pEventSet->pCurrentTextLine = NULL; // END_OF_SCRIPT_PARSING_FAILURE_CLEAR_BUG @@ -159,7 +159,7 @@ int CPythonEventManager::RegisterEventSetFromString(const std::string& strScript pEventSet->poEventHandler = NULL; __InitEventSet(*pEventSet); - // NOTE : ܼ ũƮ ̺Ʈ Ŀǵ ٽ . + // NOTE : ���� �ܼ��� ��ũ��Ʈ �̺�Ʈ ���� Ŀ�ǵ��� �ٽ� �����. script::TCmd ScriptCommand; int pEventPosition; int iEventType; @@ -468,7 +468,7 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet) case EVENT_TYPE_WAIT: { - //ijƽ  /EVENT_TYPE_WAIT ؼ ׽Ʈ ʿ. + //ijƽ�� ����� ���� ������� ���� ������ ������ ���� ����/EVENT_TYPE_WAIT �����ؼ� �׽�Ʈ �ʿ�. pEventSet->iyLocal = 0; pEventSet->isLock = true; break; @@ -567,6 +567,7 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet) break; } +#if !defined(ENABLE_QUEST_RENEWAL) // HIDE_QUEST_LETTER case EVENT_TYPE_QUEST_BUTTON_CLOSE: { @@ -575,7 +576,8 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet) break; } // END_OF_HIDE_QUEST_LETTER - +#endif + case EVENT_TYPE_QUEST_BUTTON: { const std::string& c_rstType = GetArgumentString("icon_type", ScriptCommand.argList); @@ -584,8 +586,8 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet) int idx = atoi(GetArgument("idx", ScriptCommand.argList)); const char * name = GetArgument("name", ScriptCommand.argList); - // Ʈ UI Ǹ ذ ǹǷ ϴ ȥ by chrislee - if (!strcmp(name, " ȥ?....")) { + // ����Ʈ UI �������� �Ǹ� �ذ� �ǹǷ� �ϴ� ��ȥ���� ���� by chrislee + if (!strcmp(name, "������ ��ȥ��?....")) { PyCallClassMemberFunc(m_poInterface, "BINARY_RecvQuest", Py_BuildValue("(isss)", idx, name, "highlight", "")); } else { @@ -1146,7 +1148,7 @@ void CPythonEventManager::SetLeftTimeString(const char * c_szString) } CPythonEventManager::CPythonEventManager() - : m_poInterface(0), m_strLeftTimeString(" ð : %d") + : m_poInterface(0), m_strLeftTimeString("���� �ð� : %d��") { EventTypeMap["LETTER"]=EVENT_TYPE_LETTER; EventTypeMap["COLOR"]=EVENT_TYPE_COLOR; diff --git a/src/UserInterface/PythonNetworkStreamPhaseGame.cpp b/src/UserInterface/PythonNetworkStreamPhaseGame.cpp index adc65796..360c92d6 100644 --- a/src/UserInterface/PythonNetworkStreamPhaseGame.cpp +++ b/src/UserInterface/PythonNetworkStreamPhaseGame.cpp @@ -212,7 +212,7 @@ void CPythonNetworkStream::GamePhase() while (ret) { if(dwRecvCount++ >= MAX_RECV_COUNT-1 && GetRecvBufferSize() < SAFE_RECV_BUFSIZE - && m_strPhase == "Game") //phase_game ƴϾ 찡 ִ. + && m_strPhase == "Game") //phase_game �� �ƴϾ ����� ������ ��찡 �ִ�. break; if (!CheckPacket(&header)) @@ -239,7 +239,7 @@ void CPythonNetworkStream::GamePhase() case HEADER_GC_PHASE: ret = RecvPhasePacket(); - return; // ߿ Phase ٲ ϴ GamePhase Ż - [levites] + return; // ���߿� Phase �� �ٲ�� �ϴ� ������ GamePhase Ż�� - [levites] break; case HEADER_GC_PVP: @@ -807,9 +807,9 @@ void CPythonNetworkStream::Warp(LONG lGlobalX, LONG lGlobalY) //rkBgMgr.SetShadowLevel(CPythonBackground::SHADOW_ALL); rkBgMgr.RefreshShadowLevel(); - // NOTE : Warp CenterPosition Height 0̱ ī޶ ٴڿ ְ - // ϶ Height DZ ̹Ƿ ̵ϸ Position ѹ - // ش - [levites] + // NOTE : Warp ������ CenterPosition�� Height�� 0�̱� ������ ī�޶� ���ٴڿ� �����ְ� �� + // �����϶����� Height�� ���� �DZ� �����̹Ƿ� ���� �̵��ϸ� Position�� ������ �ѹ� + // �������ش� - [levites] LONG lLocalX = lGlobalX; LONG lLocalY = lGlobalY; __GlobalPositionToLocalPosition(lLocalX, lLocalY); @@ -857,7 +857,7 @@ void CPythonNetworkStream::SetGamePhase() m_phaseProcessFunc.Set(this, &CPythonNetworkStream::GamePhase); m_phaseLeaveFunc.Set(this, &CPythonNetworkStream::__LeaveGamePhase); - // Main Character O + // Main Character ���O IAbstractPlayer & rkPlayer = IAbstractPlayer::GetSingleton(); rkPlayer.SetMainCharacterIndex(GetMainActorVID()); @@ -972,11 +972,11 @@ bool CPythonNetworkStream::RecvPVPPacket() case PVP_MODE_AGREE: rkChrMgr.RemovePVPKey(kPVPPacket.dwVIDSrc, kPVPPacket.dwVIDDst); - // 밡 (Dst) Ǹ + // ��밡 ��(Dst)���� ���Ǹ� �������� if (rkPlayer.IsMainCharacterIndex(kPVPPacket.dwVIDDst)) rkPlayer.RememberChallengeInstance(kPVPPacket.dwVIDSrc); - // 뿡 Ǹ ȿ Ҵ + // ��뿡�� ���Ǹ� ���� ���ȿ��� ��� �Ҵ� if (rkPlayer.IsMainCharacterIndex(kPVPPacket.dwVIDSrc)) rkPlayer.RememberCantFightInstance(kPVPPacket.dwVIDDst); break; @@ -987,11 +987,11 @@ bool CPythonNetworkStream::RecvPVPPacket() DWORD dwKiller = kPVPPacket.dwVIDSrc; DWORD dwVictim = kPVPPacket.dwVIDDst; - // (victim) 뿡 + // ��(victim)�� ��뿡�� ������ �� ������ if (rkPlayer.IsMainCharacterIndex(dwVictim)) rkPlayer.RememberRevengeInstance(dwKiller); - // (victim) ϴ ȿ Ҵ + // ���(victim)�� ������ �����ϴ� ���ȿ��� ��� �Ҵ� if (rkPlayer.IsMainCharacterIndex(dwKiller)) rkPlayer.RememberCantFightInstance(dwVictim); break; @@ -1009,7 +1009,7 @@ bool CPythonNetworkStream::RecvPVPPacket() break; } - // NOTE : PVP ۽ TargetBoard Ʈ մϴ. + // NOTE : PVP ��۽� TargetBoard �� ������Ʈ �մϴ�. __RefreshTargetBoardByVID(kPVPPacket.dwVIDSrc); __RefreshTargetBoardByVID(kPVPPacket.dwVIDDst); @@ -1072,7 +1072,7 @@ bool CPythonNetworkStream::SendMessengerAddByNamePacket(const char * c_szName) return false; char szName[CHARACTER_NAME_MAX_LEN]; strncpy(szName, c_szName, CHARACTER_NAME_MAX_LEN-1); - szName[CHARACTER_NAME_MAX_LEN-1] = '\0'; // #720: ޽ ̸ ÷ο + szName[CHARACTER_NAME_MAX_LEN-1] = '\0'; // #720: �޽��� �̸� ���� ���� �����÷ο� ���� ���� if (!Send(sizeof(szName), &szName)) return false; @@ -1106,7 +1106,7 @@ bool CPythonNetworkStream::SendCharacterStatePacket(const TPixelPosition& c_rkPP else if (fDstRot > 360.0f) fDstRot = fmodf(fDstRot, 360.0f); - // TODO: ߿ Ŷ̸ ٲ + // TODO: ���߿� ��Ŷ�̸��� �ٲ��� TPacketCGMove kStatePacket; kStatePacket.bHeader = HEADER_CG_CHARACTER_MOVE; kStatePacket.bFunc = eFunc; @@ -1135,7 +1135,7 @@ bool CPythonNetworkStream::SendCharacterStatePacket(const TPixelPosition& c_rkPP return SendSequence(); } -// NOTE : SlotIndex ӽ +// NOTE : SlotIndex�� �ӽ� bool CPythonNetworkStream::SendUseSkillPacket(DWORD dwSkillIndex, DWORD dwTargetVID) { TPacketCGUseSkill UseSkillPacket; @@ -1277,9 +1277,9 @@ bool CPythonNetworkStream::RecvChatPacket() buf[uChatSize]='\0'; - // ƶ ó - // "̸: " Է ": ̸" ϱ (0x08) - // ƶ ȣ ó (1) : (2) ԷµǾ (2) : (1) ϰ + // ���� �ƶ� ���� ó�� + // "�̸�: ����" �Է��� "����: �̸�" ������ ����ϱ� ���� ��(0x08)�� ���� + // ���� �ƶ��� ��ȣ�� ó���� (����1) : (����2) �� �ԷµǾ (����2) : (����1) �� ����ϰ� ����� if (LocaleService_IsEUROPE() && GetDefaultCodePage() == 1256) { char * p = strchr(buf, ':'); @@ -1305,11 +1305,11 @@ bool CPythonNetworkStream::RecvChatPacket() switch (kChat.type) { - case CHAT_TYPE_TALKING: /* ׳ ä */ - case CHAT_TYPE_PARTY: /* Ƽ */ - case CHAT_TYPE_GUILD: /* 帻 */ - case CHAT_TYPE_SHOUT: /* ġ */ - case CHAT_TYPE_WHISPER: // ʹ ʴ Only Client Enum + case CHAT_TYPE_TALKING: /* �׳� ä�� */ + case CHAT_TYPE_PARTY: /* ��Ƽ�� */ + case CHAT_TYPE_GUILD: /* ��帻 */ + case CHAT_TYPE_SHOUT: /* ��ġ�� */ + case CHAT_TYPE_WHISPER: // �����ʹ� �������� �ʴ� Only Client Enum { char * p = strchr(buf, ':'); @@ -1347,9 +1347,9 @@ bool CPythonNetworkStream::RecvChatPacket() } } break; - case CHAT_TYPE_COMMAND: /* */ - case CHAT_TYPE_INFO: /* ( , ġ . ) */ - case CHAT_TYPE_NOTICE: /* */ + case CHAT_TYPE_COMMAND: /* ���� */ + case CHAT_TYPE_INFO: /* ���� (�������� ������, ����ġ�� �����. ��) */ + case CHAT_TYPE_NOTICE: /* �������� */ case CHAT_TYPE_BIG_NOTICE: case CHAT_TYPE_MAX_NUM: default: @@ -1461,7 +1461,7 @@ bool CPythonNetworkStream::RecvPointChange() CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr(); - // ڽ Point Ǿ .. + // �ڽ��� Point�� ����Ǿ��� ���.. if (pInstance) if (PointChange.dwVID == pInstance->GetVirtualID()) { @@ -1558,7 +1558,7 @@ bool CPythonNetworkStream::RecvDeadPacket() CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr(); if (pkInstMain==pkChrInstSel) { - Tracenf("ΰ "); + Tracenf("���ΰ� ���"); if (false == pkInstMain->GetDuelMode()) { PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnGameOver", Py_BuildValue("()")); @@ -1953,12 +1953,19 @@ bool CPythonNetworkStream::RecvQuestInfoPacket() if (QUEST_PACKET_TYPE_END == byQuestPacketType) { rkQuest.DeleteQuestInstance(QuestInfo.index); +#if defined(ENABLE_QUEST_RENEWAL) + PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "DeleteQuest", Py_BuildValue("(ii)", QuestInfo.type, QuestInfo.index)); +#endif } else if (QUEST_PACKET_TYPE_UPDATE == byQuestPacketType) { if (!rkQuest.IsQuest(QuestInfo.index)) { +#if defined(ENABLE_QUEST_RENEWAL) + rkQuest.MakeQuest(QuestInfo.index, QuestInfo.type, QuestInfo.is_confirmed); +#else rkQuest.MakeQuest(QuestInfo.index); +#endif } if (strlen(szTitle) > 0) @@ -1974,6 +1981,9 @@ bool CPythonNetworkStream::RecvQuestInfoPacket() rkQuest.SetQuestClockValue(QuestInfo.index, iClockValue); if (c_rFlag & QUEST_SEND_COUNTER_VALUE) rkQuest.SetQuestCounterValue(QuestInfo.index, iCounterValue); +#if defined(ENABLE_QUEST_RENEWAL) + rkQuest.SetQuestIsConfirmed(QuestInfo.index, QuestInfo.is_confirmed); +#endif } else if (QUEST_PACKET_TYPE_BEGIN == byQuestPacketType) { @@ -1989,7 +1999,12 @@ bool CPythonNetworkStream::RecvQuestInfoPacket() } // Process Start End +#if defined(ENABLE_QUEST_RENEWAL) + PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "RefreshQuest", Py_BuildValue("(ii)", QuestInfo.type, QuestInfo.index)); +#else PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "RefreshQuest", Py_BuildValue("()")); +#endif + return true; } @@ -2149,7 +2164,7 @@ bool CPythonNetworkStream::SendExchangeExitPacket() return SendSequence(); } -// PointReset ӽ +// PointReset ���ӽ� bool CPythonNetworkStream::SendPointResetPacket() { PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "StartPointReset", Py_BuildValue("()")); @@ -2303,7 +2318,7 @@ bool CPythonNetworkStream::RecvSkillCoolTimeEnd() bool CPythonNetworkStream::RecvSkillLevel() { - assert(!"CPythonNetworkStream::RecvSkillLevel - ʴ Լ"); + assert(!"CPythonNetworkStream::RecvSkillLevel - ������� �ʴ� �Լ�"); TPacketGCSkillLevel packet; if (!Recv(sizeof(TPacketGCSkillLevel), &packet)) { @@ -2529,7 +2544,7 @@ bool CPythonNetworkStream::RecvAddFlyTargetingPacket() __GlobalPositionToLocalPosition(kPacket.lX, kPacket.lY); - Tracef("VID [%d] Ÿ ߰ \n",kPacket.dwShooterVID); + Tracef("VID [%d]�� Ÿ���� �߰� ����\n",kPacket.dwShooterVID); CPythonCharacterManager & rpcm = CPythonCharacterManager::Instance(); @@ -2927,7 +2942,7 @@ bool CPythonNetworkStream::RecvPartyUpdate() PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "UpdatePartyMemberInfo", Py_BuildValue("(i)", kPartyUpdatePacket.pid)); - // ٲٸ, TargetBoard ư Ʈ Ѵ. + // ���� ������ �ٲ���ٸ�, TargetBoard �� ��ư�� ������Ʈ �Ѵ�. DWORD dwVID; if (CPythonPlayer::Instance().PartyMemberPIDToVID(kPartyUpdatePacket.pid, &dwVID)) if (byOldState != kPartyUpdatePacket.state) @@ -3291,7 +3306,7 @@ bool CPythonNetworkStream::RecvGuild() if (!Recv(sizeof(dwPID), &dwPID)) return false; - // Main Player DeleteGuild + // Main Player �� ��� DeleteGuild if (CPythonGuild::Instance().IsMainPlayer(dwPID)) { CPythonGuild::Instance().Destroy(); @@ -4110,7 +4125,7 @@ bool CPythonNetworkStream::SendClientVersionPacket() TPacketCGClientVersion2 kVersionPacket; kVersionPacket.header = HEADER_CG_CLIENT_VERSION2; strncpy(kVersionPacket.filename, filename.c_str(), sizeof(kVersionPacket.filename)-1); - strncpy(kVersionPacket.timestamp, "1215955205", sizeof(kVersionPacket.timestamp)-1); // # python time.time ڸ + strncpy(kVersionPacket.timestamp, "1215955205", sizeof(kVersionPacket.timestamp)-1); // # python time.time ���ڸ� //strncpy(kVersionPacket.timestamp, __TIMESTAMP__, sizeof(kVersionPacket.timestamp)-1); // old_string_ver //strncpy(kVersionPacket.timestamp, "1218055205", sizeof(kVersionPacket.timestamp)-1); // new_future //strncpy(kVersionPacket.timestamp, "1214055205", sizeof(kVersionPacket.timestamp)-1); // old_past @@ -4251,7 +4266,7 @@ bool CPythonNetworkStream::RecvTargetCreatePacket() //#ifdef _DEBUG // char szBuf[256+1]; -// _snprintf(szBuf, sizeof(szBuf), "Ÿ Ǿϴ [%d:%s]", kTargetCreate.lID, kTargetCreate.szTargetName); +// _snprintf(szBuf, sizeof(szBuf), "Ÿ���� ���� �Ǿ����ϴ� [%d:%s]", kTargetCreate.lID, kTargetCreate.szTargetName); // CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf); // Tracef(" >> RecvTargetCreatePacket %d : %s\n", kTargetCreate.lID, kTargetCreate.szTargetName); //#endif @@ -4280,7 +4295,7 @@ bool CPythonNetworkStream::RecvTargetCreatePacketNew() //#ifdef _DEBUG // char szBuf[256+1]; -// _snprintf(szBuf, sizeof(szBuf), "ij Ÿ Ǿϴ [%d:%s:%d]", kTargetCreate.lID, kTargetCreate.szTargetName, kTargetCreate.dwVID); +// _snprintf(szBuf, sizeof(szBuf), "ij���� Ÿ���� ���� �Ǿ����ϴ� [%d:%s:%d]", kTargetCreate.lID, kTargetCreate.szTargetName, kTargetCreate.dwVID); // CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf); // Tracef(" >> RecvTargetCreatePacketNew %d : %d/%d\n", kTargetCreate.lID, kTargetCreate.byType, kTargetCreate.dwVID); //#endif @@ -4303,7 +4318,7 @@ bool CPythonNetworkStream::RecvTargetUpdatePacket() //#ifdef _DEBUG // char szBuf[256+1]; -// _snprintf(szBuf, sizeof(szBuf), "Ÿ ġ Ǿϴ [%d:%d/%d]", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY); +// _snprintf(szBuf, sizeof(szBuf), "Ÿ���� ��ġ�� ���� �Ǿ����ϴ� [%d:%d/%d]", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY); // CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf); // Tracef(" >> RecvTargetUpdatePacket %d : %d, %d\n", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY); //#endif @@ -4382,7 +4397,7 @@ bool CPythonNetworkStream::RecvDigMotionPacket() } -// ȥ ȭ +// ��ȥ�� ��ȭ bool CPythonNetworkStream::SendDragonSoulRefinePacket(BYTE bRefineType, TItemPos* pos) { TPacketCGDragonSoulRefine pk; diff --git a/src/UserInterface/PythonQuest.cpp b/src/UserInterface/PythonQuest.cpp index cd7e35e5..ac2d44a7 100644 --- a/src/UserInterface/PythonQuest.cpp +++ b/src/UserInterface/PythonQuest.cpp @@ -37,7 +37,12 @@ bool CPythonQuest::IsQuest(DWORD dwIndex) return itor != m_QuestInstanceContainer.end(); } -void CPythonQuest::MakeQuest(DWORD dwIndex) +void CPythonQuest::MakeQuest(DWORD dwIndex +#if defined(ENABLE_QUEST_RENEWAL) + , BYTE bType + , bool bIsConfirmed +#endif +) { DeleteQuestInstance(dwIndex); m_QuestInstanceContainer.push_back(SQuestInstance()); @@ -47,6 +52,10 @@ void CPythonQuest::MakeQuest(DWORD dwIndex) SQuestInstance & rQuestInstance = *m_QuestInstanceContainer.rbegin(); rQuestInstance.dwIndex = dwIndex; rQuestInstance.iStartTime = int(CTimer::Instance().GetCurrentSecond()); +#if defined(ENABLE_QUEST_RENEWAL) + rQuestInstance.bType = bType; + rQuestInstance.bIsConfirmed = bIsConfirmed; +#endif } void CPythonQuest::SetQuestTitle(DWORD dwIndex, const char * c_szTitle) @@ -104,12 +113,51 @@ void CPythonQuest::SetQuestIconFileName(DWORD dwIndex, const char * c_szIconFile pQuestInstance->strIconFileName = c_szIconFileName; } +#if defined(ENABLE_QUEST_RENEWAL) +void CPythonQuest::SetQuestIsConfirmed(DWORD dwIndex, bool bIsConfirmed) +{ + SQuestInstance* pQuestInstance; + if (!__GetQuestInstancePtr(dwIndex, &pQuestInstance)) + return; + + pQuestInstance->bIsConfirmed = bIsConfirmed; +} +#endif + int CPythonQuest::GetQuestCount() { return m_QuestInstanceContainer.size(); } -bool CPythonQuest::GetQuestInstancePtr(DWORD dwArrayIndex, SQuestInstance ** ppQuestInstance) +#if defined(ENABLE_QUEST_RENEWAL) +int CPythonQuest::GetQuestButtonNoticeCount(BYTE bQuestType) +{ + int count = 0; + for (TQuestInstanceContainer::iterator::value_type& it : m_QuestInstanceContainer) + { + if (bQuestType == QUEST_TYPE_MAX) + count += 1; + else + if (it.bType == bQuestType) + count += 1; + } + return count; +} +#endif + +#if defined(ENABLE_QUEST_RENEWAL) +bool CPythonQuest::GetQuestInstancePtr(DWORD dwQuestIndex, SQuestInstance** ppQuestInstance) +{ + TQuestInstanceContainer::iterator itor = std::find_if(m_QuestInstanceContainer.begin(), m_QuestInstanceContainer.end(), FQuestInstanceCompare(dwQuestIndex)); + if (itor == m_QuestInstanceContainer.end()) + return false; + + const DWORD dwVectorIndex = std::distance(m_QuestInstanceContainer.begin(), itor); + *ppQuestInstance = &m_QuestInstanceContainer[dwVectorIndex]; + return true; +} +#else +bool CPythonQuest::GetQuestInstancePtr(DWORD dwArrayIndex, SQuestInstance** ppQuestInstance) { if (dwArrayIndex >= m_QuestInstanceContainer.size()) return false; @@ -118,6 +166,7 @@ bool CPythonQuest::GetQuestInstancePtr(DWORD dwArrayIndex, SQuestInstance ** ppQ return true; } +#endif bool CPythonQuest::__GetQuestInstancePtr(DWORD dwQuestIndex, SQuestInstance ** ppQuestInstance) { @@ -140,8 +189,8 @@ void CPythonQuest::__Initialize() test.dwIndex = i; test.strIconFileName = ""; test.strTitle = _getf("test%d", i); - test.strClockName = " ð"; - test.strCounterName = " "; + test.strClockName = "���� �ð�"; + test.strCounterName = "���� ������"; test.iClockValue = 1000; test.iCounterValue = 1000; test.iStartTime = 0; @@ -196,16 +245,27 @@ PyObject * questGetQuestData(PyObject * poSelf, PyObject * poArgs) else { { - // Ʈ ̹ ִ´. + // ������� ��� ����Ʈ �̹����� �ִ´�. std::string strIconFileName = "season1/icon/scroll_open.tga"; pImage = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(strIconFileName.c_str()); } } - return Py_BuildValue("sisi", pQuestInstance->strTitle.c_str(), - pImage, - pQuestInstance->strCounterName.c_str(), - pQuestInstance->iCounterValue); +#if defined(ENABLE_QUEST_RENEWAL) + return Py_BuildValue("ibsisi", + pQuestInstance->bType, + pQuestInstance->bIsConfirmed, + pQuestInstance->strTitle.c_str(), + pImage, + pQuestInstance->strCounterName.c_str(), + pQuestInstance->iCounterValue); +#else + return Py_BuildValue("sisi", + pQuestInstance->strTitle.c_str(), + pImage, + pQuestInstance->strCounterName.c_str(), + pQuestInstance->iCounterValue); +#endif } PyObject * questGetQuestIndex(PyObject * poSelf, PyObject * poArgs) @@ -238,7 +298,7 @@ PyObject * questGetQuestLastTime(PyObject * poSelf, PyObject * poArgs) iLastTime = (pQuestInstance->iStartTime + pQuestInstance->iClockValue) - int(CTimer::Instance().GetCurrentSecond()); } - // ð ó ڵ + // �ð� ���� ó�� �ڵ� // else // { // iLastTime = int(CTimer::Instance().GetCurrentSecond()) - pQuestInstance->iStartTime; @@ -253,6 +313,18 @@ PyObject * questClear(PyObject * poSelf, PyObject * poArgs) return Py_BuildNone(); } +#if defined(ENABLE_QUEST_RENEWAL) +PyObject* questGetQuestCounterData(PyObject* poSelf, PyObject* poArgs) { return Py_BuildNone(); } +PyObject* questGetQuestButtonNoticeCount(PyObject* poSelf, PyObject* poArgs) +{ + BYTE bType; + if (!PyTuple_GetInteger(poArgs, 0, &bType)) + return Py_BadArgument(); + + return Py_BuildValue("i", CPythonQuest::Instance().GetQuestButtonNoticeCount(bType)); +} +#endif + void initquest() { static PyMethodDef s_methods[] = @@ -262,9 +334,29 @@ void initquest() { "GetQuestIndex", questGetQuestIndex, METH_VARARGS }, { "GetQuestLastTime", questGetQuestLastTime, METH_VARARGS }, { "Clear", questClear, METH_VARARGS }, +#if defined(ENABLE_QUEST_RENEWAL) + { "GetQuestCounterData", questGetQuestCounterData, METH_VARARGS }, + { "GetQuestButtonNoticeCount", questGetQuestButtonNoticeCount, METH_VARARGS }, +#endif { NULL, NULL, NULL }, }; PyObject * poModule = Py_InitModule("quest", s_methods); - PyModule_AddIntConstant(poModule, "QUEST_MAX_NUM", 5); + PyModule_AddIntConstant(poModule, "QUEST_MAX_NUM", 5); +#if defined(ENABLE_QUEST_RENEWAL) + PyModule_AddIntConstant(poModule, "QUEST_TYPE_MAIN", CPythonQuest::QUEST_TYPE_MAIN); + PyModule_AddIntConstant(poModule, "QUEST_TYPE_SUB", CPythonQuest::QUEST_TYPE_SUB); + PyModule_AddIntConstant(poModule, "QUEST_TYPE_LEVELUP", CPythonQuest::QUEST_TYPE_LEVELUP); + PyModule_AddIntConstant(poModule, "QUEST_TYPE_EVENT", CPythonQuest::QUEST_TYPE_EVENT); + PyModule_AddIntConstant(poModule, "QUEST_TYPE_COLLECTION", CPythonQuest::QUEST_TYPE_COLLECTION); + PyModule_AddIntConstant(poModule, "QUEST_TYPE_SYSTEM", CPythonQuest::QUEST_TYPE_SYSTEM); + PyModule_AddIntConstant(poModule, "QUEST_TYPE_SCROLL", CPythonQuest::QUEST_TYPE_SCROLL); + PyModule_AddIntConstant(poModule, "QUEST_TYPE_DAILY", CPythonQuest::QUEST_TYPE_DAILY); + PyModule_AddIntConstant(poModule, "QUEST_TYPE_UNEXPOSED", CPythonQuest::QUEST_TYPE_UNEXPOSED); + PyModule_AddIntConstant(poModule, "QUEST_TYPE_MAX", CPythonQuest::QUEST_TYPE_MAX); + + PyModule_AddIntConstant(poModule, "QUEST_STRING_TYPE_NORMAL", CPythonQuest::QUEST_STRING_TYPE_NORMAL); + PyModule_AddIntConstant(poModule, "QUEST_STRING_TYPE_CLOCK", CPythonQuest::QUEST_STRING_TYPE_CLOCK); + PyModule_AddIntConstant(poModule, "QUEST_STRING_TYPE_COUNT", CPythonQuest::QUEST_STRING_TYPE_COUNT); +#endif } diff --git a/src/UserInterface/PythonQuest.h b/src/UserInterface/PythonQuest.h index bef0dc03..1813d59d 100644 --- a/src/UserInterface/PythonQuest.h +++ b/src/UserInterface/PythonQuest.h @@ -25,9 +25,50 @@ class CPythonQuest : public CSingleton int iCounterValue; int iStartTime; + +#if defined(ENABLE_QUEST_RENEWAL) + BYTE bType; + bool bIsConfirmed; +#endif }; typedef std::vector TQuestInstanceContainer; +#if defined(ENABLE_QUEST_RENEWAL) + enum EQuestStringType + { + QUEST_STRING_TYPE_NORMAL, + QUEST_STRING_TYPE_CLOCK, + QUEST_STRING_TYPE_COUNT, + QUEST_STRING_TYPE_MAX + }; + + enum EQuestType + { + QUEST_TYPE_MAIN, + QUEST_TYPE_SUB, + QUEST_TYPE_LEVELUP, + QUEST_TYPE_EVENT, + QUEST_TYPE_COLLECTION, + QUEST_TYPE_SYSTEM, + QUEST_TYPE_SCROLL, + QUEST_TYPE_DAILY, + QUEST_TYPE_UNEXPOSED, + QUEST_TYPE_MAX + }; + + enum EQuestSkin + { + QUEST_SKIN_NOWINDOW, + QUEST_SKIN_NORMAL, + QUEST_SKIN_UNKOWN1, + QUEST_SKIN_UNKOWN2, + QUEST_SKIN_SCROLL, + QUEST_SKIN_CINEMATIC, + QUEST_SKIN_COUNT, + QUEST_SKIN_MAX + }; +#endif + public: CPythonQuest(); virtual ~CPythonQuest(); @@ -38,7 +79,12 @@ class CPythonQuest : public CSingleton void DeleteQuestInstance(DWORD dwIndex); bool IsQuest(DWORD dwIndex); - void MakeQuest(DWORD dwIndex); + void MakeQuest(DWORD dwIndex +#if defined(ENABLE_QUEST_RENEWAL) + , BYTE bIndex + , bool bIsConfirmed +#endif + ); void SetQuestTitle(DWORD dwIndex, const char * c_szTitle); void SetQuestClockName(DWORD dwIndex, const char * c_szClockName); @@ -46,9 +92,17 @@ class CPythonQuest : public CSingleton void SetQuestClockValue(DWORD dwIndex, int iClockValue); void SetQuestCounterValue(DWORD dwIndex, int iCounterValue); void SetQuestIconFileName(DWORD dwIndex, const char * c_szIconFileName); +#if defined(ENABLE_QUEST_RENEWAL) + void SetQuestIsConfirmed(DWORD dwIndex, bool bIsConfirmed); +#endif int GetQuestCount(); +#if defined(ENABLE_QUEST_RENEWAL) + int GetQuestButtonNoticeCount(BYTE bQuestType); + bool GetQuestInstancePtr(DWORD dwQuestIndex, SQuestInstance ** ppQuestInstance); +#else bool GetQuestInstancePtr(DWORD dwArrayIndex, SQuestInstance ** ppQuestInstance); +#endif protected: void __Initialize();