From 16e75e310cd3961ba02d8edc0fe342f20b92da44 Mon Sep 17 00:00:00 2001 From: WildEgo Date: Sat, 1 Jun 2024 18:46:41 +0100 Subject: [PATCH] add: Owsap quest renewal and GetTextLength + GetTextWindow. --- .../ymir work/ui/game/costume_button_01.tga | Bin 4140 -> 0 bytes .../ymir work/ui/game/costume_button_02.tga | Bin 4140 -> 0 bytes .../ymir work/ui/game/costume_button_03.tga | Bin 4140 -> 0 bytes .../ui/game/taskbar/mall_button_01.tga | Bin 3879 -> 0 bytes .../ui/game/taskbar/mall_button_02.tga | Bin 3831 -> 0 bytes .../ui/game/taskbar/mall_button_03.tga | Bin 3715 -> 0 bytes bin/pack/etc/ymir work/ui/form_lang_01.dds | Bin 0 -> 25840 bytes .../ymir work/ui/pattern/border_a_bottom.tga | Bin 0 -> 1068 bytes .../ymir work/ui/pattern/border_a_center.tga | Bin 0 -> 1068 bytes .../ymir work/ui/pattern/border_a_left.tga | Bin 0 -> 1068 bytes .../ui/pattern/border_a_left_bottom.tga | Bin 0 -> 1068 bytes .../ui/pattern/border_a_left_top.tga | Bin 0 -> 1068 bytes .../ymir work/ui/pattern/border_a_right.tga | Bin 0 -> 1068 bytes .../ui/pattern/border_a_right_bottom.tga | Bin 0 -> 1004 bytes .../ui/pattern/border_a_right_top.tga | Bin 0 -> 1068 bytes .../etc/ymir work/ui/pattern/border_a_top.tga | Bin 0 -> 1068 bytes .../ymir work/ui/quest_re/button_bottom.sub | 7 + .../ymir work/ui/quest_re/button_middle.sub | 7 + .../etc/ymir work/ui/quest_re/button_one.sub | 7 + .../etc/ymir work/ui/quest_re/button_over.sub | 7 + .../etc/ymir work/ui/quest_re/button_top.sub | 7 + .../etc/ymir work/ui/quest_re/quest_down.tga | Bin 0 -> 772 bytes .../ui/quest_re/quest_list_line_01.tga | Bin 0 -> 4364 bytes .../etc/ymir work/ui/quest_re/quest_new.tga | Bin 0 -> 240 bytes .../ymir work/ui/quest_re/quest_tab_01.tga | Bin 0 -> 15140 bytes .../etc/ymir work/ui/quest_re/quest_up.tga | Bin 0 -> 772 bytes .../ymir work/ui/quest_re/tabcolor_1_main.tga | Bin 0 -> 344 bytes .../ymir work/ui/quest_re/tabcolor_2_sub.tga | Bin 0 -> 344 bytes .../ui/quest_re/tabcolor_3_levelup.tga | Bin 0 -> 344 bytes .../ui/quest_re/tabcolor_4_event.tga | Bin 0 -> 344 bytes .../ui/quest_re/tabcolor_5_collection.tga | Bin 0 -> 344 bytes .../ui/quest_re/tabcolor_6_system.tga | Bin 0 -> 344 bytes .../ui/quest_re/tabcolor_7_scroll.tga | Bin 0 -> 344 bytes .../ui/quest_re/tabcolor_8_daily.tga | Bin 0 -> 344 bytes bin/pack/icon/icon/item/scroll_close_blue.tga | Bin 0 -> 4140 bytes bin/pack/icon/icon/item/scroll_open_blue.tga | Bin 0 -> 4140 bytes .../locale_cz/locale/cz/locale_interface.txt | 8 + .../locale_de/locale/de/locale_interface.txt | 8 + .../locale_dk/locale/dk/locale_interface.txt | 8 + .../locale_en/locale/en/locale_interface.txt | 8 + .../locale_es/locale/es/locale_interface.txt | 8 + bin/pack/locale_fr/locale/fr/locale_game.txt | 8 + .../locale_gr/locale/gr/locale_interface.txt | 8 + .../locale_hu/locale/hu/locale_interface.txt | 8 + .../locale_it/locale/it/locale_interface.txt | 8 + .../locale_nl/locale/nl/locale_interface.txt | 8 + .../locale_pl/locale/pl/locale_interface.txt | 8 + .../locale_pt/locale/pt/locale_interface.txt | 8 + .../locale_ro/locale/ro/locale_interface.txt | 8 + .../locale_ru/locale/ru/locale_interface.txt | 8 + .../locale_tr/locale/tr/locale_interface.txt | 8 + bin/pack/root/game.py | 43 +- bin/pack/root/interfacemodule.py | 347 ++- bin/pack/root/localeinfo.py | 428 +-- bin/pack/root/uicharacter.py | 961 ++++++- bin/pack/uiscript/uiscript/characterwindow.py | 2332 ++++++++++++----- src/UserInterface/Locale.h | 1 + src/UserInterface/Packet.h | 5 + src/UserInterface/PythonApplicationModule.cpp | 68 +- src/UserInterface/PythonEventManager.cpp | 16 +- .../PythonNetworkStreamPhaseGame.cpp | 89 +- src/UserInterface/PythonQuest.cpp | 114 +- src/UserInterface/PythonQuest.h | 56 +- 63 files changed, 3427 insertions(+), 1188 deletions(-) delete mode 100644 bin/pack/ETC/ymir work/ui/game/costume_button_01.tga delete mode 100644 bin/pack/ETC/ymir work/ui/game/costume_button_02.tga delete mode 100644 bin/pack/ETC/ymir work/ui/game/costume_button_03.tga delete mode 100644 bin/pack/ETC/ymir work/ui/game/taskbar/mall_button_01.tga delete mode 100644 bin/pack/ETC/ymir work/ui/game/taskbar/mall_button_02.tga delete mode 100644 bin/pack/ETC/ymir work/ui/game/taskbar/mall_button_03.tga create mode 100644 bin/pack/etc/ymir work/ui/form_lang_01.dds create mode 100644 bin/pack/etc/ymir work/ui/pattern/border_a_bottom.tga create mode 100644 bin/pack/etc/ymir work/ui/pattern/border_a_center.tga create mode 100644 bin/pack/etc/ymir work/ui/pattern/border_a_left.tga create mode 100644 bin/pack/etc/ymir work/ui/pattern/border_a_left_bottom.tga create mode 100644 bin/pack/etc/ymir work/ui/pattern/border_a_left_top.tga create mode 100644 bin/pack/etc/ymir work/ui/pattern/border_a_right.tga create mode 100644 bin/pack/etc/ymir work/ui/pattern/border_a_right_bottom.tga create mode 100644 bin/pack/etc/ymir work/ui/pattern/border_a_right_top.tga create mode 100644 bin/pack/etc/ymir work/ui/pattern/border_a_top.tga create mode 100644 bin/pack/etc/ymir work/ui/quest_re/button_bottom.sub create mode 100644 bin/pack/etc/ymir work/ui/quest_re/button_middle.sub create mode 100644 bin/pack/etc/ymir work/ui/quest_re/button_one.sub create mode 100644 bin/pack/etc/ymir work/ui/quest_re/button_over.sub create mode 100644 bin/pack/etc/ymir work/ui/quest_re/button_top.sub create mode 100644 bin/pack/etc/ymir work/ui/quest_re/quest_down.tga create mode 100644 bin/pack/etc/ymir work/ui/quest_re/quest_list_line_01.tga create mode 100644 bin/pack/etc/ymir work/ui/quest_re/quest_new.tga create mode 100644 bin/pack/etc/ymir work/ui/quest_re/quest_tab_01.tga create mode 100644 bin/pack/etc/ymir work/ui/quest_re/quest_up.tga create mode 100644 bin/pack/etc/ymir work/ui/quest_re/tabcolor_1_main.tga create mode 100644 bin/pack/etc/ymir work/ui/quest_re/tabcolor_2_sub.tga create mode 100644 bin/pack/etc/ymir work/ui/quest_re/tabcolor_3_levelup.tga create mode 100644 bin/pack/etc/ymir work/ui/quest_re/tabcolor_4_event.tga create mode 100644 bin/pack/etc/ymir work/ui/quest_re/tabcolor_5_collection.tga create mode 100644 bin/pack/etc/ymir work/ui/quest_re/tabcolor_6_system.tga create mode 100644 bin/pack/etc/ymir work/ui/quest_re/tabcolor_7_scroll.tga create mode 100644 bin/pack/etc/ymir work/ui/quest_re/tabcolor_8_daily.tga create mode 100644 bin/pack/icon/icon/item/scroll_close_blue.tga create mode 100644 bin/pack/icon/icon/item/scroll_open_blue.tga 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 7ed6e268d5de0307474cab7efb24549c11d6a210..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4140 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 Z`atZ#{-L(vu7R$;-pFWsS9e=f`5*Kd^)Ubd 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 4aef5a4586a2e345d879948a68613ee9d0cd4447..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3879 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 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 4c1f8273c54a6446ef52d037c3405af71a3fc5ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3831 zcmYjUXH=AD7KTCTWtd?YhG`7FiSjW+7a0%`K_D2F#1Ij&#u62KEEtd?8Uc-6i80t> zOo&|*m6d4hExN0TF`IIBbI$JB@?+1Q{qgL*ch;O84hkRd_ul8d_j#UsUpF^jx0jy? zH~R8!;a|0m;u=&=Uxl*z<;bpRKz8LcWL4B-Wc3^r*374$8{nKY54o?*fKoUKX`?4X z$tXc)c|9`ArXZud4(X+}D4x6kX`^0&?Apv*yDQF#ICJY6+Cd-Hzv!Qz{s}z$>%Y;= zPu#md{t`-dIb`*_{ED|yI1xv_xP@>== ze-QV7`Wy0ITMV_oH|!a?$jHirgZ>|$>Ofq4GHlUtuvjBuGF$080w${sR$COJW8#pK zYRAaD(a6m!fZdUau#h0w%V(m0@Cka)UWY>IkZ4UD(wJ6IO-L@_>f>MFoZJX{24iFj zhG&()8t*_@L?Xhi@zClm$S9nEx_N7{Xl)k~9L0!LMq{WZ8Y*8sLXD9y+7c0y>_C>Y z0$KTGFz7>(Hl`jI?tLdQl$>%%R11f;7fry9?N%*C+6bDAhj)5Dg0s2-);AZnpkx21MCSz(+#E9kiD~&TM0 zU=s!8-~GZ8v7!5*&`uR#ko1qAvJfS&&Jds;>PVuY4ME0Xl!+Kb#-(6uZ@+*yMj!)=s33ueq;E&wYg&%+EVZ{FB95E!0} zCF{4s;T$h~P|}=|foV*_DU^Yh-Nb>cQaY^(!Bm2PV7Hev@LL#sFtYmB^KCkyE_=;AtsM%WnGA{b&b1TgQ-1z6pE2zA6h18ZQz9v1`r0<~f}qsnUK1!H{n|0-_4g=@bTZ{$;O zHB<8{h1YyK=>n9oL=qP_NA^MwPhav+tFV9#x{1@{!6v0B8CdiFVOIgT{%!lH0F)Fz ze+_&I0-uAo%%VBWowns}rw%cQG})fHx?Btw@BW*?=A7&#@upmGkisKo**I9&-U;3U>6KgpyeTPfs8CYfLc3 zr^6C!ht?2@m?XOx5OaN1+fH#rPB0f?Vtpf)x4bV!3etv2mNC(U^8b%b7;LxF7H`MX-4|D&Lro3xf}(-t6&hTl*v+cR_AC?2^(gsm3z25d8*j ze=D;Zy90yL=uFURf+?00Ggo)v?dI+5g6;VD(p^khx{3Z^hsxazzJ59c&|>Dm#%&)G zpZ%yD+!akoO&^JctGA$onp0?`U39^t7gQ=f&;qnC~B>d2%!_I zsqX%29hK?_v6-e|oe{pB+YXB1uonDDQ#yi^oI>tLp&M3pqwnHPOkdu~!=IaL7N7Ob z7972J8?%~r$f|(A0H{N42(zXT9WoJ_lmkm#I&8^Vh#(Al!qc!|jS!x@tcnuEjx)D$ zos0)T!8+JtlVGMvIx;E-si~=Gc&CRFeGkleiR!v}ytTFm{Z}7iUh4-E+H9uDF~yGI z_FT!eJ-ZNT*-qGLuyf=%>F3dKWEY^IWE}E~#?i<>2HE+gNXsd}sG>5WcOK%RV`ZY-NFsK@$=vR zgB_n-#t|CV+dnvkwhzvtko9lL~mCvRXQU8c4lAHc?g7qFiXdzj* z_MVaF?;XB?=H30c_59DMU$)V8!*ks?S8hIl^S7Sh?z3NT>CRL9?$P%cc<>xw5x$2n zekGhQaP#R;`0DW=apLk_96om)TMwPX`LCbg{Ou>Wbo(jJ-gu1D*S^8*wcW1!CKr}J YuU1benpir%w6bDYO>t>?QHtAt0lhOj*#H0l 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 e858f11926d3029baab5427a17b561eaa39db7c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3715 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 ZP4XG+A8H?7J+Qj3H$J*@b$5G0`5()D)sz4L 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 0000000000000000000000000000000000000000..e120cb1a7f86d9b4aa0b586b7115fece405e1218 GIT binary patch literal 25840 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 P;pO@6>+$gPa9{la92HFT literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c8f13d668c7386ed65790556140e913107502fde GIT binary patch literal 1068 zcmbW0OK;RL6on&J6i;Huk2skbpolg6i&h#5QK>BmvF^72e|b5d2T;=PW+cn;V7K4wd0vXHaoshV@WjU`*m#iI6eovru5ite(0i4Q3o zV+cXGV$=R$evAzhwH{U1^@C+$W2qZ_7)R@c>%-VEd7iDzdyPf7bAM_jeUBNAWrOD| z#AM5U7I$GA$MRnbHMp}A|B#BMy6ul1bTgy3=sbxdez3+LG~f}n+%RnVvsad-VM0nx zYivHwt*#fhAZ#z4@W6|;e|0(7;rOBX7jtc1H$TD17qr1+IUJSCyI20kPJP0Ri- z=h}MWHU06PT2(cuweC;0XeD>ZwHh3S;n&=f(1OMUd zmFJan^2;|odr7@s<;T8oN!f8mJ@Rn9Z@kGP>n%__rt{gFKmL;u?}wT9M3&^`yl+~l ziyq!E?_iB5JA8rXpx*dV$X@;4f4sJx_Q9bKEPd8^zAqX4|1KSu^m~EPvg;o2f86{$ RJ)G{ofBAKL`gZfR`vbyUOfmof literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c678c850abec2c12296f183873be20093e66a4d9 GIT binary patch literal 1068 zcmY*Y*{;(t5RG`EO&l-r631z7_yG8ei&P1L#3sZuul)bxaL$xUNhB++J##isy6#Q) zd|c&CNt(?7@>u|sCjrj`){|V`1H)YnESjo&6B$5 zkA1u!zBw;P{!8C$&APvn2HxI0?l3}!n3p38^@jNKy7N_Sl{@%~>-) zrm@ZT96LGn{rvitQ{VseTv;z^Sj+lyBR(b>#*Of7v)zdeQTo2%zUtb=EY=70NUg>> z-G>w<Sil_9VM1tY>d)bcf@wqit!$pmG(=0FAn_+zQjjx^1iIA z1aQSN9I?iE?M)0dms-JLfuD4+w}DR9Wq6|xW<<>n>jFZ@Lxc$_27UW7m|!)Ro&!lS4MHv!nIHNh+Qn(=?rxtCFLlZO;Hc@o}q(&=!?0` zeW|rG1{kjyw%D`2#ThfASK=(O@XH)#EZ5AP{$kFU6EZ_S8M#s)dC5P`qEoIJ%UQ=# z#KAB7kzZ#7-Mr%r>2uL`Iz#rDv8o4IGVg@>EB;p}`_jWOAPd~_|8jq_;vKma13bC7 zX0G&Not1jE#aY%_GKaY@bDOdXn&;Hl1MA=e|Mm3^?wyRgYyB^m&_84G)#vs3ZU26F PIXpeye%v1(_IJ$>0gXIY literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d92c437a850ae1110e2ce697d72ca0d10f5c856a GIT binary patch literal 1068 zcmbVL%TB{E5R5nx(ju(at*Vo1 z|1*`T&QDuoCB`T*CvjmA@d&3M$}~K zi~-(A({{4ydg+}LKO`{@ywI|!EAb`-vCg8-OOJDElZP1Yg>jU6(*kS6@f$u$e9V(H z&>=VL$#20)KO1mqKfrQL^P=8Ld|noKbGlEz^iB=>J!{+F9=wN!!@fVzXEqtU)FQUG z4jHfyyrX{Q{616vhxrBMODuh_*_)qla%l$0W6eKkuBCtaOvs;l7Vi%8;KTjSu6~#& z_rfs#$*+S3v1yw1OlO2z`l0qZ`=m8KC7nyDKVUxWb6mE-XPM!JGa--hQBoc?1NO$5 zr0H;e0r}N+t$h)frUkk|vtT{%+XntRXru`~z+39`j&iT*I`zoB>BXa0V{i z9URV4@m#9s^)Xu!M$Du2`}=zS=y7^A)w6>M{uPVfK{eDBab%zOUUgY*YU`d~ZJfj_ z#I08S4#!PPdwOzB#L)5Rd{-OiWy40N_zu&od$OdvYu6i`lK8-VnAD@rcK`6;IIWS7 zC&{K-?loX}9(V$JnU?;7C_7MS?Qj#hjEHy6c*O>Y|IpW^Lwwz_MCKly|A;>?V+ z@KfC2-A>Y_GxK2g9Mv#K7JN%<&Y3w8cU;H8VGth#VB#=7L=-`877v>EU(h=Je^yQZf1ohP46q(q z*_+6GkPc+CHrq8E{}0j|oKlLR*Cy%%vfj-|W^L}8w+*c4(A78pL2M*@QPhF-pqm3y z57Gz15$R?B`S_NDG1T2){b+jN?gr@v=>eGw!Z5waZiD&}qz4ATe%5rk0Co#ZFUTCA z0$5nV)S}ZUdO>>7{0oxD1;Bcd{fnj-mp+gRfHdw~kT oX#rTQz5QQ5P6CcAD(1;iAr3KnTp|rGI1iU`BZ*$zU!>A!(^#7848M<9&cg~zi z@VqlmKOf$?cX`35n|cR|zID+l;1u}30y;;G{Iy2Sboi|6E;3M8I6Hhkwx(I+ zeHXR5p`rMwHGSNE(KFwBxN9i^?%O1^Jaj@lbo!`w$pCeKfQCO5dJ&o=h|mgRw89we zFcJDAbjW~=(H)W$enckdk$8%LBpHHHhHx}Pf1FzeX@TK{%n?mXOPrO6vkJ*O6F@!O7e(lMK;J5WQ*C7>@4|ehkW&9Db~**^GEVxDK{@DH?Njz`-*D&_QhiN z2I1Yr<1C-vp`6+y>n5+s_nn_-$+>dA+(+&u_bk?OZ@ItJW9u?CvQE}aCZ>MsKuriW zBBGh-ml!Rnr|KISt*JM)C+tNyp4q?vW7EvDyfi}-+^pf{Ri?-%tC zy<|OQyhV=*;yZfquBC`a=~MMBJzQ&$y|0bOZ!F*c<#awyMV%9k$7bo+n(lYeDc}_N ny8@?X>F0d@J)7I<6mSY0DsXC+mend=r;D`6uQo}V#n;{^4z8Sd literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..fa3c5a66dcc166f9def08c9b5a56c40934edd63b GIT binary patch literal 240 zcmZQzU}As)b_R9^1r898MV;k8gB0Ub26=`>AR5eviZdB89Axcg_|Gw);Xm61hW|{) z3@6 zKsg156(D(5pgy7f4FBby0QH>$nmZAq4`eRLeAX_Y`dL8pdXenI<4%wtKp-S2)HTdA Q*wf!nH^R-+$5oF30Ld3W-~a#s literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..778355750a6be6571dc84617f9bbf0d5d05b2b8d GIT binary patch literal 15140 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 V`J;D!|GgLg_|12|_3-ks{{aT+9BKdn literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..298fed5aa318375209319e42efd7beb22ed038c7 GIT binary patch literal 772 zcmZQzU}As)J_cR}1r8`L6G(3+5`)yjz~<#U&;JME+Riy(8pcN#18M-74+ERK=56~= z2&b2I{0C~l&<7F+=|!fI*&sP|eK2`kcEaS*^}*D`NtdSqp9{`Uz_ z2J1!A2abcRn*RUj*vi@OKS&Ps6MbBLF@GY!6~H}Sl7(qzoyFtFb1(fYCvkC zdN*r&GoN literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4b50704b5a84b734f8137ca2a53e921b48636c4f GIT binary patch literal 344 zcmZQzU}As)eg;+s1r8VwotBoK`rpRx>c0W^&iatAa&?&2nh;x4f724^!L+^ LaP#zW)nfnv6B=2c literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..db2f317225aeb96dd3b266faa0102bdca3c5d16c GIT binary patch literal 344 zcmZQzU}As)eg;+s1r8Vwofb%5_+PL8>VFW8E{Bf~(qp*%KOBSj_|${s(DiTxwZZj+ z%)(^`NL+u}Kd{=2L;vA!1-Ti-2k8aLBkPCRrMu)0UjM=T4^oHjhLE68*D%juPk%q% L2sck3S3L#*E=Oh{ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d123e62a1fcb622a3e6f0a168bba2ad6ab0212af GIT binary patch literal 344 zcmZQzU}As)eg;+s1r8Vwoo>~&{=d~f{y&IDm&3;g>A4=63&$WnKJ_3ubUk@WdT{+9 zvv8RK62BIa16KR0ZUWq`AUA{fAiW@YWc@I^u7qXb^&iatAa&?&2nh;x4f724^!L+^ LaP#zW)nfnvFgIS; literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d5afabe1a9b4f8875241f5445f2d0cfef86070fe GIT binary patch literal 344 zcmZQzU}As)eg;+s1r8Vwo$gOo{(rF7`9Fw8m&3;g>3O=;3ywj2eCk1R=z7ZhB;fi% zX5lgeB>rTHCs^&*y+v@hg4_(^gY<&rk@dsudbG$Lum52F2dP7MLr74lYnW%Sr@x&Nq3fv;%7g0% znT5*?koY^tYhbniGGD{p3UV`u57G;gN7fIs>y7;ty#9mvAEXZ54Ix3Hu3?_Rp8kHi L5pJG7u6hgr#G-6J literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..64fce9bbfd945946ba61b4b2919dcc2e6c10dbdd GIT binary patch literal 344 zcmZQzU}As)eg;+s1r8VwotB>J{NLte)_)Lpz(PLF&-m5E2yX8s-`7>F=i- L;pXY%s>c8T0Q_KT literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..91342a1a2ab05c793f152de980670dd2decf2503 GIT binary patch literal 344 zcmZQzU}As)eg;+s1r8Vwoi3az{eS*RoBtphT@D`~q-XDYCpZT2@u>&Nq3emO5rXRn znT5*?kocZ=j$pM{{$;}53UV`u57G;gN7fIsYu6ily#9mvAEXZ54Ix3Hu3?_Rp8kHi L5pJG7u6hgr?=)!d literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..98b21bdc9de19af468c2a24055c46d995ab3987b GIT binary patch literal 344 zcmZQzU}As)eg;+s1r8Vwoj%CM^#830-+vH|E{Bf~((~WS6plfBeCk1R=z10~Gs5+Q z%)(^`Sf7P4L~ULU+^rxt{|EBH?f}Xo>xbF(&r~0;|6u+HsY7=|NKmM2m}ju3zn^Y| Ko2QSf9s>Zpy;kG^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..48a0c051a6d29657b79545eddb60f834def71842 GIT binary patch literal 4140 zcmd5=2~?EV6~6y~3kJkSThlf+xUk8-SY#rg$Ra^yN0cRjL3YX}E|4NZMp3mg2Q~dzhru*98ptAPiM}5-uvIYd%t_{yZ62i zh$N)?=n;QMn(FJ)|JxJpsL|?UOtAeW_1GGYO#WZn7dK0CtudYuV@;Sdg_PEY+S8t9 zgN4E9mw1n0rms89OnHXvj=6GVJ8`T$j<9@)j~N{*|hN=_W}f;5jdqzmmA z?J3^v8?FYZcXna#dJ>Ba`DdN?|5^lat%JXvJ z+n#E|zuu*X>R5x#b7vCd{FHDU*YOz`dgZ|{qZYQIg?KeI7h&r@LqSs)e6zO0K1>c8 zD}|Pxb1dWrDeV3-5fe^7)#i5}*fmmVy|4rp30o0ZbrJ6zy@O>n zClNY30xMo4eEKFq?00hZ|5CxQ-cu{-L9oM!(r3XMY)^el7vy`sMqEK197D4)X+|h) zLW*F&WFHpRTtVq4*AeMJNZ@)oy^8x)QGX9=NSEAAa38j9Fugx!z54S`Vfh=O`m=3F#dBWH&+q_nun5N6NYWUb2jMrkWoNbKrV?OD8Ii zb#e?E5mnL%i#cgX=RPaunuss6JEQh05-U&i83wF{k!u{LP98Vzc`(&wljlgTzR#FqpA-8^ zTOQ$P24Qm~;lp`^#TAz@H@O1x1MPT&`?RC12ot5@_tbSf?>yB*LlBi`+i zMXdAQl!9Fkrg$LUquRo2{(w&%K1#-Xq7V78|}LM;d(Hq<*5*y=h` zxBnGUxts1~e0UydWqaTqxfD}uW<8WmC*@*G&P^v$b~88VDB;?$C;V!xzR+-+S+P;g(sE~iKF zE?_S82J=w|y`j&$fp&`=-pO=CVVHyD#sWLZuOHl195SOumAu6 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..22db401dc574062a4732a0cc000f0661ab6a95c5 GIT binary patch literal 4140 zcmcIo_gBs9{%d+#@4mKvZ4154-T?WUo_(-&KcT9&F?hxp4n;6pWb5?FuC_w;G}_d*p!}C@U*stziN+7^uk{2$azD% z*oA#31cqaJkq)!QAY10O6gi6 z_Kad1XGl>0fD+HCAZb@2>D&wn8z)Fmd!J$(CJ`#XgP`&;;>kwgQ+jXpA7y|2TUVgQ zw?;Z|>#t#}rIr3$Cx;?7PO1Cby(;L0r~{{xJBXh<3^(Zjc-a@>F1tkTSv_z#qa>gF zA@VC6fv0Q`Ub%zJ9z)CqSBRfC`22moYzTfuSHXTy*5Y;;hPOez_K;xHWvhK}*}aIp zzHbrNLjJ{9;a_kG4hag_3#;KE=_G!^75K5{Bxxb<%nk$>kC2zNAHMm6@Grbf-Z_2n z$vjW~xqTE-aTS8UhSaS;z zihHYqhG~jteDup|L7egyGWs4PrCmi{l4^2|FCl)4l7e&2k+gpag~Kb9(LE2wVd6J02pXV;%{ubL3VyMn_UdX+6%%#(O>TAKN5$BfM%15#?7X zF#iIQyB||>7qfNQh}s?`8~g@Iol6jRERdvQ0m0JqBsSki_Qj`2>0D$sd5Q?emHmEIi|cV-Hr915o^vn!648}6 zDKxi>yw57&93w+!?-GJ#=P9D7pU%|YCUN69rFJf`oTDOFfs{gXnkhuuMhS{5kPSSh zvn*#t)lGt5^aYtG^uMzGcbU4B1j+A{sOAQRN}I_cJe|(4HS>qRMnqvR0y7)PC#{YI z<%5iWvnkho1n@y$~d+cbgb+HnXPCdjXBjO-*ga47NyX>0AUdD(u~&zpodAX+&_ z=^e9(laC<1Q^mNvKzYoUsf=5NL(d>-`I4d;KND*2KIdHm!wtyoMQG_|#4>#n+UA+x zrx0AFBJ+ql(Auu={Q?g6LjS+#|JvNakgAnX#W=%SfNby?WnFxNko-P~8}5+w!Xx;l z*CV##5=9sFQqkoVNP8D4u55rDLL>;4wj!fvnbhY`YVT8oEAEqR!WX1{EdKV|`oAT& zYi_f!46AyY&@v6Ruf5bUm{>u{=O!t&eFmo^v*D8@M|$f$8#!1NRKIO_$NYw;QM{;lw_mhEF z$upg8A8uhfu$t@FYb+fb(d5zi^WYa=U-ivshF_YJvbt52dhP+FJxn&=hNyBF*`1Rl zW%JUW1#%Kp!autM(N%Y;)|o?#A4j)+IJEh5xZ%k`*Z5S{tL$C<&Q=rt1?!|9gjGLS zP3>DoX3qjr&d)sOVJ^!lc^8){srCk?x88-UZxIo>oiKL@gi~Y=jE=^m*pWk51c#Or+(*Pkev9^iwLb4U5%+#$AJoob+?G0)<8n#4S0&m$Sp1p zNwwE0yGw=i_DO`uddS#55nB2|ur)eC12GIgh=YRdU(V+!$vOB{;-Aymw&lXX<%6?2|*5 z9?3W@YQw46I#`DmBS3Z;A*>E`5T1usSQAV=#gBTLUiuhs3_@s8$tI~?4#**Vxs<6HIor#6YCZIeI-JPGYS zeTEEqiKJ^A1p|jz9QH}YQU6SsdrD}pZ8Y|sjD@~!3~3+qr9bJMX3dGT4g{jwhxt8- zqwu4Qe=H6woH#ZAHWs;QeB*Ai>Dn5;p7!tG47AuZ;9{!rgm2E#Uf)7?UR0A=l!8pc z6*v%~guZ_}^vR?FSFAHvKy*c!Z^q1M6M{PpzCV2(2EII3i}@~xgFLHiR5 zsecHM^84^s%)q&LoV?@{@K;V#c;h?*Dj%@B$r1vTQwU^dJ6}FSmck3rIw3{%P7YMb zQ5lQ-5-*OvEB)CHLA7&iEfp4%IV7_?kldZ=VEAU}ZtdT{y^_xTI1tROK4AXJDIBJV zvfJ>hQBg?aBl1-~gn#WkJmk}GEuVsCTv^h&*F;w&CN;3~eSZbpv6F(b!#CKJZ=PsNSxIVren 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‚ð‘•’…‚Å‚«‚È‚¢ƒAƒCƒe?‚Å‚·B" % (attachedItemName) + return "%s�𑕒��ł��Ȃ��A�C�e?�ł��B" % (attachedItemName) def REFINE_FAILURE_NO_SOCKET(attachedItemName) : - return "%s‚ð‘•’…‚·‚é?ƒPƒbƒg‚ª‚ ‚è‚Ü‚¹‚ñB" % (attachedItemName) + return "%s�𑕒�����?�P�b�g������܂���B" % (attachedItemName) def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName) : - return "%s‚ð‘•’…‚Å‚«‚鉩‹à?ƒPƒbƒg‚ª‚ ‚è‚Ü‚¹‚ñ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 "%s‚ðŽÌ‚Ä‚Ü‚·‚©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°¡ °»½Å µÇ±â ¶§¹®À̹ǷΠ¸ÊÀ» À̵¿Çϸé 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();