From be309911d0df198be1375b06d7b026ba3edcac34 Mon Sep 17 00:00:00 2001 From: Mind Rapist Date: Fri, 13 Feb 2026 01:44:21 +0200 Subject: [PATCH] Several bug fixes --- README.md | 11 +- assets/icon/icon/item/70063.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/70064.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/70065.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/70067.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/70068.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/70069.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/71095.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/71096.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72053.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72054.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72059.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72060.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72061.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72062.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72064.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72068.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72069.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72070.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72071.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72072.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72319.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72320.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72321.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72322.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72323.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72325.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72326.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72327.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72328.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72340.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72343.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72344.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72346.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72347.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72350.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72351.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72352.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72353.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72355.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72359.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/72360.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/90000.tga | Bin 0 -> 4140 bytes assets/icon/icon/item/dummy.tga | Bin 0 -> 4140 bytes assets/locale/locale/ae/locale_game.txt | 2 +- assets/locale/locale/common/item_list.txt | 175 ++++++++++++++++++- assets/locale/locale/cz/locale_game.txt | 2 +- assets/locale/locale/de/locale_game.txt | 2 +- assets/locale/locale/dk/locale_game.txt | 2 +- assets/locale/locale/en/locale_game.txt | 2 +- assets/locale/locale/es/locale_game.txt | 2 +- assets/locale/locale/fr/locale_game.txt | 2 +- assets/locale/locale/gr/locale_game.txt | 16 +- assets/locale/locale/gr/locale_interface.txt | 2 +- assets/locale/locale/hu/locale_game.txt | 2 +- assets/locale/locale/it/locale_game.txt | 2 +- assets/locale/locale/nl/locale_game.txt | 2 +- assets/locale/locale/pt/locale_game.txt | 2 +- assets/locale/locale/ro/locale_game.txt | 2 +- assets/locale/locale/ru/locale_game.txt | 2 +- assets/locale/locale/tr/locale_game.txt | 2 +- assets/root/game.py | 111 ++++++------ assets/root/interfacemodule.py | 59 +++++-- assets/root/localeinfo.py | 40 ++++- assets/root/uiaffectshower.py | 12 +- assets/root/uicharacter.py | 9 +- assets/root/uidragonsoul.py | 72 ++++++-- assets/root/uiguild.py | 19 +- assets/root/uiinventory.py | 5 +- assets/root/uimessenger.py | 10 +- assets/root/uiminimap.py | 12 +- assets/root/uiplayergauge.py | 7 +- assets/root/uisafebox.py | 29 +-- assets/root/uiselectitem.py | 7 +- assets/root/uishop.py | 4 +- assets/root/uisystemoption.py | 2 +- assets/root/uitarget.py | 11 +- assets/root/uitaskbar.py | 7 +- assets/root/uitooltip.py | 146 +++++++++++----- 79 files changed, 579 insertions(+), 215 deletions(-) create mode 100644 assets/icon/icon/item/70063.tga create mode 100644 assets/icon/icon/item/70064.tga create mode 100644 assets/icon/icon/item/70065.tga create mode 100644 assets/icon/icon/item/70067.tga create mode 100644 assets/icon/icon/item/70068.tga create mode 100644 assets/icon/icon/item/70069.tga create mode 100644 assets/icon/icon/item/71095.tga create mode 100644 assets/icon/icon/item/71096.tga create mode 100644 assets/icon/icon/item/72053.tga create mode 100644 assets/icon/icon/item/72054.tga create mode 100644 assets/icon/icon/item/72059.tga create mode 100644 assets/icon/icon/item/72060.tga create mode 100644 assets/icon/icon/item/72061.tga create mode 100644 assets/icon/icon/item/72062.tga create mode 100644 assets/icon/icon/item/72064.tga create mode 100644 assets/icon/icon/item/72068.tga create mode 100644 assets/icon/icon/item/72069.tga create mode 100644 assets/icon/icon/item/72070.tga create mode 100644 assets/icon/icon/item/72071.tga create mode 100644 assets/icon/icon/item/72072.tga create mode 100644 assets/icon/icon/item/72319.tga create mode 100644 assets/icon/icon/item/72320.tga create mode 100644 assets/icon/icon/item/72321.tga create mode 100644 assets/icon/icon/item/72322.tga create mode 100644 assets/icon/icon/item/72323.tga create mode 100644 assets/icon/icon/item/72325.tga create mode 100644 assets/icon/icon/item/72326.tga create mode 100644 assets/icon/icon/item/72327.tga create mode 100644 assets/icon/icon/item/72328.tga create mode 100644 assets/icon/icon/item/72340.tga create mode 100644 assets/icon/icon/item/72343.tga create mode 100644 assets/icon/icon/item/72344.tga create mode 100644 assets/icon/icon/item/72346.tga create mode 100644 assets/icon/icon/item/72347.tga create mode 100644 assets/icon/icon/item/72350.tga create mode 100644 assets/icon/icon/item/72351.tga create mode 100644 assets/icon/icon/item/72352.tga create mode 100644 assets/icon/icon/item/72353.tga create mode 100644 assets/icon/icon/item/72355.tga create mode 100644 assets/icon/icon/item/72359.tga create mode 100644 assets/icon/icon/item/72360.tga create mode 100644 assets/icon/icon/item/90000.tga create mode 100644 assets/icon/icon/item/dummy.tga diff --git a/README.md b/README.md index c5a4a6b2..9a6312c3 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,13 @@ This repository contains all client-side data, including locale files, configura ## 📋 Changelog -### ⬆️ Feature Improvements -* **Snow mountain and Snow Dungeon updated:** Updated Snow mountain and Snow Dungeon terrain, environment and textures -* **Protos updated:** Updated protos for all locales with the new items and mobs/NPCs for the Snow Dungeon (some translations may be incomplete) -* **Item icons and descriptions updated:** Updated item icons and descriptions for new items for all locales (some translations may be incomplete) +### 🐛 Bug Fixes + - **Python 3 division compatibility**: Migrated a lot of divisions in a lot of files to `int` divisions instead of `floats` for Python 3 compatibility. This will be fixing a lot of bugs caused by the upgrade such as target board button centering, Dragon stones Grade in tooltip and more. + - **Completed the map names dictionary**: This improves functionality for all maps within the client, and fixes **the "invisible affects in dungeon" bug! + - **Dragon stone countdown in tooltip**: The countdown auto-starts and responds perfectly to all situations without waiting for the "first hover" from the player. + - **Quest refreshing**: Prevented the quest letters from appearing on top of the dialog curtain (if currently chatting with an NPC or item). + - **Minor translation improvements** + - **Several missing item icons added**

diff --git a/assets/icon/icon/item/70063.tga b/assets/icon/icon/item/70063.tga new file mode 100644 index 0000000000000000000000000000000000000000..0002023f00de32a146256354865fad910cca4d1c GIT binary patch literal 4140 zcmc(i3se(V8pkIgArq32fIJK-5P3;ZEb=M@p;RHro1%b5eS5~G;K0LA~8)eH8snW%gx^=Qbg(nGMOTq*i*z}X{11C?DQ-?xx7EEtx#w@ zS}HZ2X>M-4!BVAex3YD-VQKFI3tK0s$9Q9un-3hv_}m(4=X}!4+4{ZqC{X$`< z@%+(LKBAH2rcf-FgbX*n|HUWIRHZPptWXiIy@wXIBlceHL;a~9?CrjZ z+Cyj1a``5fZrX+Qdk$cJ(JBNdCc`@<7PN`HQzkPj6Pw7whl*i1K4DwS%`88o6e_sB z91Uk}C>*sq1kcRG<)4Aw`&&@AWh>_7EJf<#0?f?H!GfYSDBIoyg^L&bVhpJL-|{IadIU&6_-Lb{OUuUW(i-+&AhUqV z*&WtuXIR>5z!ynbduZeW0DaisJ{uqGsfB*UW@5KFKvBX4v{)L==krauI0o~1JiZ;V zzeHq>vF(f4*9Y_vPt}JGqoLyn(zkAanUy>IrzS(=KLNI`o`{?^ALD~`uy=kDl#s?~ zuX&_LD|R1I;^MUw96uL`6W@hl`@vA8%=PaYsZ=-cjRZDB@x23IZVaBUzf`>MGjtL! z->{wraGhwTc;DSc7z$`DJrEp_1dp(&N4YVQVT7GCRAXb66J>APo`J_AH9 z5oslIg-FGNOOWDYP}i#PMs@-46EO}dnt*U*6|aOYxe%}AeTtySS%^<{#Y0>}<=Rp> z`s)yrSq!DU<}^)wVS1q}#wm;@3QZukELxoSKpkqq{MuRx!;2m!Ps(#tj> zuc`sb*~M`140=e5#L>g?=T+>)Ur*gcMf(+8Ae6f->Cwe!%0j&0;Dv(1zrcI)T(|`# zVRp${_{OKg(|!VC)fq92bC$_ZqOUs0tY?YGC8y*((%^9`6H# z*B=v;`^4CzA9j9^inhzBJlTWO1kKC^-_%?-kI_>XVE2LZ*xPXttE;zToSzPsDmPGk z6Q~2i&~f2k==}vazPK4mN`d?x2jLr+hQR5Wn3}O1O10}Tvi{}6jh{JFvum2rboLI` zwVcJ;wkw#Nw}xeF<72U}rwd{$SG<~9h!jH!B9c-ep>1%u=ROkhR-(NAW8fBf7^J-4 z+J!^CK=IZ+SX{Ol%eEhYh&D;%*o=O1{EST?6vZv6YsT8<E=G-Ry3H+)Q979?HtDV>{`~?iW%#+B0V-2Z>%iClsSu# z___h_2IrzJdL!y5mg04vd=C9z{oo#cz6WGgZ~B4wTS(5dk(^&nKaJ0|Q;l*d3dwz| zFDb7CQTipwsQM5&CACP@>Jc#~AJew&!F^_<9IBAy+Y6L`=ZooB&L5|rmCvJgQ6E@k@Cub;#ZoWBF;TG1R)PRqGZ+`^RTY%gzfSf}>>1`Bf z=U%6b`FgU(jky?pZ$9If8$Lcb2N($Z9dddWp9Pkj0^z?eG#0r(Prk-=Y|-NwPLsVT z_a7wxL~8r-ic3HzWh_j1o_x-C()1aR4o4=KYLbiME?miKB6~Hp)JX8?9q4)FpW|~{ zzbNB#HXqDkRyP1M+PsM`60z^Ye*~Y4!?5B_<~0fzSGF+cNfz_%_DAyn6Nl{B{&vV^ uX7eZ>Pss3p>-Q%&uK!0f>_7Yan~Q&Hd_rhq_>}P2824$q@Tkyn)V~2x5}_^t literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/70064.tga b/assets/icon/icon/item/70064.tga new file mode 100644 index 0000000000000000000000000000000000000000..ca5fc1775825923109ec16faf54163fc34b11dfd GIT binary patch literal 4140 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 xz(fvBA+Nwu1w&)#DRo^co^e?)_3!4A{ literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/70069.tga b/assets/icon/icon/item/70069.tga new file mode 100644 index 0000000000000000000000000000000000000000..c3d40d18124d84973ca3bf606afa55f7a2e09577 GIT binary patch literal 4140 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 Y*iDViG|fdOB0~dt3oVhJroxba0-9pCM*si- literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72059.tga b/assets/icon/icon/item/72059.tga new file mode 100644 index 0000000000000000000000000000000000000000..80a1a2972d9cd8b6c6f992f9e63b679976869f41 GIT binary patch literal 4140 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 literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72061.tga b/assets/icon/icon/item/72061.tga new file mode 100644 index 0000000000000000000000000000000000000000..78d6e605e2fe4a0c0ce75d2ef8a8bf0f0367c767 GIT binary patch literal 4140 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 TS)MyKx40;BTvl#DrV0KFLeqmD literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72062.tga b/assets/icon/icon/item/72062.tga new file mode 100644 index 0000000000000000000000000000000000000000..fcfc616f38ccf8eac7fe4b9caa56d4bb54873a00 GIT binary patch literal 4140 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 literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72068.tga b/assets/icon/icon/item/72068.tga new file mode 100644 index 0000000000000000000000000000000000000000..01c7ffaeede9fcfc1237e291c71ee5e850ecc8bc GIT binary patch literal 4140 zcmcJR3s6+o8OM1VH7aP7Ac(x=u^^8HcER0+U04>_<*9%?MZg7wU6$psyjfupVKK~YpW!^z{k-})UcOI&+@4)(G| zcNV1uWWCk0Y1fs}g#DPKEW~&#kVGV-j^BpVO-!k{j)Ba3=}8_!A7fxVeVXT+-sFGb z+uPeO@^$qeEeYQKrBybJO}2-Mm>M<*=d(prAh0SZml}x+RH8}Kqw-S<>rY~Q%VUh^ zOk|iC|YS(_tBd=M6Y&;p|o-OHKUjl z+EGPi;NvGDK%9YBYzdLMt@tSmS)bj>N_iQ}LRGlMm9SRV&I;+~*}ZU^&xZi_;5ST( z9q9bDB={%N7H?%B(w5trypTq4tPjnJ_oDu>kx75L$zfAS#N@qN^4EYwDu*u80xws6aZ zoAGZPs|_`tAJa`yFKwn>Gk`ID5MPBA&-hB##FgQxFyf_a#XYl&#qo743$DN~u##+H z&Gpqr>eVJXV|p-z8L-N1Je_h9A+G{%Rhw8jq%y(HZY^q5Nw>_-ZoVkmP~ za~o;j)I)F501e_M459THLQLcb7NPP=W`*4{o|<`%m(QHR)VYgyKR7$*LzSNi!-fWW z)Vn!V^De%32i#U|ObyC@?TOOg3UO$rNg`-bLJy6xtyG9jm_$ujf}2qL=!jk>Md7C6 z{Dlj`9_%Bpe8(LB{dYb>Z70JlX%@6=f@*2~SM#lNA)BLvW88`A-(wN<&J@!`tFnvA z)J{r5%26%Jr6r<`s%RsM^$EB+tmOEyXE^oJOOzR#`Q+S3KYjzRdW=C$4CU?{k zyC#*F^!FLv7*|?V)c>{)oX0~n66S786 zm~RJF>K2;i?R3j}Nek2>a@@$1$4~Oiso$Y3uH^GCKb!NREzQaf&jyZ{J&zf4mlkC0d;b|n-w~=kKTH&0tgE-GNBzIe= zFY2dT)kmAW8*9oQRQ@R>1tfA{{~;cH_)%h0xA5t?zs>pZ+6!-x>5$7z?F+XR0}f73 z8V|{1_^&om9%(?6n2*}SLZW*c22C4gxrIhqD^~R&Wg$C|*{d-(G&4ChjdkcA@+yAJ zg{y)WJ=wcCT6qfL92a=wI&ao@U6=B@m)|}Tf?G&dkD?Qekh4nAHkpYIT|cejZhC|| zGa%n5_@$#DuMAUDBhxdFkdTqji+_BXS^i%?`H1%LVRnW#d@WuZ_0-Ln*N-_m*#`t^ z53t_XfGFw^q2m1%`1DX2FKE2FllBNJol+Y%`539*S*S(nl$KR+=vNQ1Yj})ugNcim zFY(#8pK|Q*37Wimd3NWkv-`00dd|)66Y{5s37bL|W+Pg8fJl**ymieqgtrLwu3gZG z9y(J7=ur)k6;z0^p@DYmE@pmxjHHY_4nK5+ci#RppPWC3O*6(5WiN1t)8hJ@F|Qx< za^LWoIAV}+?fryhA19#XG2vX(g<;(<=*$?REumM?*+Kdg!g)1xC)Ii(R=1UN@PP-Y zG@8jNDCXQ3U+~Sv?-`dI;r-^XxqF$r;d;hG_rA-+cPlr&!iJcA1VtPm&~=2M+!@w- zo5>S&pgq+_dtxtLLY=Y7`{{|X37XwPc|jGGRkc`pZ4_4Mx%|UrzWC}}9PJ$Ygjy7` z5bs9&nl+LmqKvb6hjbH^G)-9A;{=vIj%Vay%!vmu#dpvv8)P(LA5+RB98P?cL&^s! z@+kiyS}gsxsm)4#M-P`Sp6BW3PTp4jU-QMu*(t|6qK@^^_pw2|7ypg>iHn|Ow_=JR z$pjK5jby?EwrTAG`0S$}Vw)84_}ZHdq7Y0>hiW3kQ=GdGUk fLVu}n4qP$cb9r0xHCwg0+U%^b!W3 literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72069.tga b/assets/icon/icon/item/72069.tga new file mode 100644 index 0000000000000000000000000000000000000000..a465cb42d97f8fc24855262930c13a6c8390eb41 GIT binary patch literal 4140 zcmd6qcT|*D8iz+LG1kNqR#72}qEZx5g9;)jO;9FuMHq@BC>lXxiDH6AV?+Tdg98j@ zn4uRz1Z!dBO0HqVVGX#LJ-p|vfy{!4z3w$40;=3M8he)P;o=e5P zE7UcE_U1G6tsFG}NkfN@5*zzrE>$Zh$K22NtRZQZk|lPLNG-gW6OxFH@OXN|4Z;O$ z+4taj^ciFKU1r+Bt9;yWi!hrt*o+y6q0?ge&52;>suYZy?lZ9Z9LWtop*j5v#lnlk zvp4u4q3Gm`IxO`kSJW>)L-f@3$i~lSneA$#W~?CAJ(2WzS`tGP$mc~N-L#wW^*>`< zcp2NW>zE7vl$JY~*ZhD>&`|~lC(tt{pOK5#5pWKIE5Rq}clsW^&(y|iWE{Cf?R}x) zo8KP4$hR`I{yH%ro1pPBWaeS4x7|wRhc%Qe-APeo1?9`DNMDkHzHdKlY`w7-Yfn3P z2eaKjV0ZWiQz5`3brL{;lAB7A6b72Gm@oXZCqAZbE-U(!Mki&fRT^7^rEnTd_HOv$1kEy$f z`RJnIZe!NyhQ24KlsC5=0EQT_y<&8sk_41 zz>T;m_h7%Z0gL>zSkzuadh8(|h?pX;gRJ!la>18<`$X);hm6cS%P{RJ24)>+oU)0T zakaR_3T9X(vp)J7(+w^7l%1pO7U)_|&wb8&x&5O0$fL%B7KUxi#X-apa{N9i=N^)O z`2pn@AE5m1KJwOwcwB~1;c>!Vu^)~;#_#-7wqLx*kicb(-c&?vcp}>t#uMrG0W!}( z)PX7tjCBt6?mBS8Nay+gmjCA(MhqPO(Ot1ed=$Hxw5^WFZyu3!@(y`tZqa<{4w`@5 z!|KFS#vZs$@a%ldEldd(wdLF9f$;ick$?Gt^9t*QVkEMjNXb6;g=HP#KyCHCgXx;jS;G(_je!#;Y*c{R=K%-a&rq0S+Qxx)s;4 zQ=VaM;TMFIHsX}L6Hiw)MYH;&3))UjU?CdMGQ3UX z=yaE`%_pCM>Q;}varJ`x0RI|MKU;63n{|w# zGdB_Eq(JSbCBs)kNklD8YrbvE!E0R!al0QV7ZtO`C5hAp8kRW5FtYnJiZ)lGT3X55 zF00TFSVf=JdGrrd&}U98f3sRdg5Nf@%kogm#5w4Zjb>>Xt%~bye5dvZc%z4&+c59b zPtD(mBGImz%{~fI)9K8a5{Y)(5}uUBTPkcWEq;! za`G4MAk{sKEO`OP;x6Da!E;x8_-%9gjSX)!d2c@!eKr&4m`Swf=g8iRV)U3C^h`Bu z6niCme!(Agp$N)E86fI2D35GeA=!Qff3ORMM_EAyq|JXx zuu$_!a5Ace#iY&Dkm*@MwpSV3r3EOQa!8t~5?*M@3*3Pwq=Y1AB}%D^T`L+%ot<-Y zx}np~_G;*&BN;X^xR$ZzpW*CO&orl6OdLyCIX{E=U^VGZd8pnm5*o?`C!2VuRN+Ax z>X35sLUxcRFC)WC%=5@WEib2d!CqPue{A!i-Ms?#Gu#BI{v*eAT> zlw%ipmoe5k%${41v%CeXm=>&U_faZ6K$5S>tKjYM+s8rK5$c1Fu`l#6i4JK`+>G2$ zb?w~!Q^C@0FYi_JI(6YOe!qwM%~V{wV43 z4icReVvTm!)~k508gqAvz2d*@IQEXkcrAQHn499^ATx`@;(wm}RrCMyv5p=3y!HX_QRC?FuK>;f&&EZwrG(10ysRGNKnx@nr7 z1`#zbh;fNAiOCp^yRjV2n7!0YVwSPYIy261E}8O6%A|0T`7rO*ty}lL^UnY5=L{M& zc+i7q+92@`eQ^4J-z|n)cn8^sy>0uP)bPL3Ww}SV-Mj@u_yj08JuQ#7tbE&s2MhRL{RSWE7X_m`_}PU>DO7yRAjhk z5?~WdjAK0NkZq)UWbtBfA+KuAV>{J;>mMOQczn*K?khJ*J9--3yVtpP<6D~doFO7Z z!-9pu%$zctcy}dD8QU==n}~E=O+}0WZE73;4gL@_vnOUvm|YfSAN$4PX)a_KyQn{T zfxOS;cC)jN2B|fi$^~q(FC=HZ^meG~An=Vx^!P4-H1Ce30 z`RK*cDUJt1>>_?pdE}w;+DMpvC@)AB&~@Wu6h%f7mda2^)X{zEbNttrksPF=I;NJI z1c8}iM7^OAMMEpHB0cLA)l|t1Xyg_BHW>0-GT2R#?k^6nL%vW!h%|zf#c5=CW#T*E zhwOcCkk@dKig+!}YdR@dRY=}86Agd)jDS_SlqTrV%No$d)MF5P@v2(nxs{}}nNYuR zm6Y~V%zeT8+Hc{z%yPR>D63|TYdUexa%u&iqNq}`O1e;+4zne;n8L_1QoYtPcZNNZ z$#W>&f0EiuH&~lgMrY1$dQ|&p7QSzcZ=*rhi1ayoY;2ubt!<(9gTGRL_Bz>hyZ_;> z%)GjEb^0L(|B$-J&7Sx|_LCP@KvirVHPJds z!zzh&iNns)0Xu6K3SYlSTHDKnEn7vVcQ)%iRH(ewtQ3A5KVp2p-G5%vkhN5uzDoPe zyO=(^i{|_dRu${6T9{Apd|;Or)sFjBiTZ!em@vJ?dWPMJEl01Sj?+^eqN63blMZDM z+f#SbuGm4=3N;>59|A(sC^`2&tJ2C@xgZFoYZ~semSHh`48xy%nqfmnBJq`>y?hhx zt-HjkjXw+>G9vH+=CAE(eQ$r4P`2xSSK3R|h8xhwHq)GBqA9t9`nV>FLdx;6^}}th z7YdCD?WIo$3eCmd(uPT+CNt7}q|kdX&S@%oZ-2w#?;-Wz>3&;co4T#BwgV2j50>d>^(xuM|UVW{~npAFA|Vi zPNtulOb_)>55w)hTQ1*t$$0xm3a)-d*GKp0KKUihT^G<~_n=t53BNhfcv(ddV4pzn z{A5;0Q*iRkW`V4d%{>Pxy7&pzAAU#Qox4<=xk#bF-F)s6(VA8=SE$JG$)jp@6J~?W zM*UI-^Cw3xaPePrY?Q@wtHrmmW`oRLm^nqNiB8PFTKn=DjAyUVb@@8YS3aTf^5_=#$$;j5s_} zZ}hSDKhcrBpNyy?6zdvEEZjv#<55(NuaKjE6}A32X_W^_D&38Lf`+`k$7%TB7H)Qt z%$q79)i)P;QWb05(%BSTK)hS>m%r5ix6Y%7k8wJpIYFIFM^Ru2l`&PQ<4cHgNF?SN z1u-J$(j&H_2+qOT#!P2z?c^7p*X$(vtu@{4<99X&<)sj~#uwh8}dvvx%mz1xlvxG3!4K=Au% zENl}`+AQkDQrb?4m^G69)(V@aGS|KhN4HLr0@q_mX{9l#jl$S6GMBGI;in>EixHKm zIaTNXOibrd3`vb_4%E<;)P*Lt=H5W@`{^e6wf<-|uZ20w>hN}pAjUrnE7yI@b=g5i zWIl$3W~!n@A5^wbFJ#e#mXaHik2)})t)Y5>*G+wLBjw>W=;f{K+ zAF~`g@mVBio{I|-*KTZ<>_r)nOGQ*IWs(2kt&MJ?GQxl{y^A`bb9sd5+e#CysU~Vg z-P9}FIBqzD`Ox8#N3p?J>x8qmE(ft&qQ%!&$8;|Pvz$%DE=@tJXrU%p%v+HyVzp8k zYNXU(OG#igmC+3}CYUhDTPX6cpgc^=_6>cg{kDEJfBJ&Hfyyv!nAyyE;hjvgFJj5c zKVj|Ch}9B3k)G*nmDNzglQ zoxEMdZKbG(gNF}P2D??IOtsyNy?YlnUai=A?7_+=p9nEG$vji25;KrKxfQKk$RYY< zv*^{W>D@y2R%)Z`+2&JBX>b)fSu4${yF|QJGja5@=>x@|Vd;8nws#K;WruK!eU164 z2e7tn!6W)j(t_0jU-(_;4~?BDQ)$Qu)r zET*Im1b@tQca7VU4(569z|HqHTqQ?XnsW{tr!L(6dnij5bAs@3oxs#ZHBuibu%kp? zMzzx}+ev%uPPE}oz-tpnOfGorvB#bnDBi>9 zhCV$u$jW&ebG`Orzhnn?PA1V$S}0#pPknG3+8`sj?sS!%ZI`M literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72071.tga b/assets/icon/icon/item/72071.tga new file mode 100644 index 0000000000000000000000000000000000000000..56a2821756518d8075628aff2f95eecc7055f101 GIT binary patch literal 4140 zcmb`J2~?Ez7QhDwVPX-42gs%@1~{U!DF`U&u*o2sY@)yeK?#&VK}3m^MGyhm31Ng0 zF~JPnB{0y8%q+`XTHZTt_TDS1Q?^(p{@zFDcuuFIM4rBx?|k#!d;j07iU9ile4ovS4ygxE)&o2b9PVy8Mu zO*b<#{fFATMgr68$Y~wo+6N!=)&IU_Pf;ByW?N9M>f+kYuQAn~vHh?3ew3||mchzZ zPKj?92h@z_d+fwP+k=6Fef;~~*SYl32sb|bgxj}&qVp{!rEUr~IToXgJI*UbAMz-l zNat1kD0@#upN_*30h6_GJ zMMY)G1J1*)Ze||62Uhiw<(fnEoLJV(Pb1kQjXeJyl!w$%AJfWn@%w2_I7nw=FCFnm zSmUssSm$tdXI8U5rGT31A*wpRCpI*Q)Px`kw)Eg< zn{el7ysf>FS^E(gpY>bp`)&gKIH)4 zd~%-ahlZFgwj8%69LpUX-M{Y0Jr8T|6En4K4|n=>QRQ1tsjPy%p-NUdt!BA2j3Ap} z;udG}>o0fVzVN*>%D3-*fwHKHtNoYhKYf|}!edCp+Nh}MaI(Iemrhi(&9d~ThrRnp z$x0WO|9CWckUDuYdxe@3?~;g*t^aQ^@YM?B`|p0_tM_m5=GoV1t7@ZiTP*|oyD^_q zPQ?o&RCj%dwyq&I3xhdOzk|N0bBIN%){o--QLe478#kPNgQhSAbwPW1E?mLN`SC2W z@W#u)mk8r{j8r99=$f%_S2JbVmE5>8$b1Whz=`3dH%Iy63y8~nh2or4%6!{!(C|F= zN6vWn&CzW?9Z2e-N?uQmyos$IJMgyk!Efd=0%nE~za)YuM3Xt&{vsE9&U169pRAxB zv_wtlh|B4Few3?kL2XV2-D$%p3%U`hh}6bo{$6KoV7GlJ`#O~&byWCP(-_!FwY-r8 zr$qd%0$Dyg6i;g#Y%~nGe(n-uN8>Yxa24&tQhXF6jTiWQ;4Z@_PjUL_VP0-IOwd%z z&A(^-+3()?EO_}7u(wgxYAZ`@2gnV~M_NiC`HteRNrnQ{38SuW!3eqxbb6v{dyc)UQ|1PrlfneTfqP-INE^kh`=1 z4+}3G%-u1YI-CD|`6VKTOyXIIu*a*}gU7d2q3*NK{F1GYNt3_b&85fI}1 zEy>a!C~^9pLRtGalQq?}#*2Zvn#ApV{uL_2>L~Z$gCcT2p{{Y*nK%o+4e_#Eii^K1 zk@6N2^KO!#^DMn>EyDk=0#of`to14}(yqYMR6(ok7ZPTV;BNRTrfMDJSYBs}-qe8c z_+z?_PuKpuE3uVle2SXVPPFGiDQVyNlFylJjHVKj~4;6YL|&v8ciGPOkm!rq!N z)hNMIrxY9AQlVdEvB;#7byoi+K>r<_#3#rzX}LchTcTkcGQ;Q8sB~HmsbQVug_V)( zSAet7|MVmdnCmUV(PAOiQb$r&yid%UOROur#)i1pk%$U0P~XHfNjhd4>#@?z!Ac_m zKfMYPBv%O3zDl@b_WR@U$8$f|Ab&`4@n;iZ2E# z{`^B6g@z~sRgo)(k_5JGy+LW}_0fs2$81z3n!eV4XKQOGYgjXqN*AoaP`rYxRF&L z^x%_sXeqykGJS}`O>L}^6^tyk_MLD&R##Jba^8wIW;hh#=zRuT*LLh&b~D@2m;AUw zo(exh%JMzW696ooE9l$N&6pPmmNQ>RYj>Kl-V}-cH?;%uHq!jB`%AP;B3@^OX>ht(sH7OoU4fydQ(IT4WX^n%J)(e*g|7a8?EvV z4uu})@QOb6E$?Q_f@kk9HxKztUt+XJm518%RgiG`ZJmb#el6{U@ zi;q&byoa43wZfdDq&>8YBVniLjp$>4#1XbHDjD^+l;51Hu3sduj3&x^n4OwLGt|ay zE4H$uI4pUddG1H>^65sg>=+8)gR}`}zI)-_04w?1n(9+>1s@a6t%va*CYu$Rc}tew zhl@;!$3MR!Hn8LuGjoSwjmaA89%lb{%O$Y2Wx9HApigX literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72072.tga b/assets/icon/icon/item/72072.tga new file mode 100644 index 0000000000000000000000000000000000000000..74a5fb9f87abbe51be51496562e5e615991512f4 GIT binary patch literal 4140 zcmeH}drX_x6~IxZYL5mN4B?T4Fdh@Zo=uQn^Mlz2*~T)qWw3(-0*nl#KoAXL1f>u; zP!W<68l_1@OO$}s(P+?$CK~CMAoK{jpS8)~&77M$wX@=(md{x>5xt zVfkZ|YU}9U`}v&nJNNjWbHBK_HE~OyAI6FA_m)=Qj{h4OnAg3>DfwPjiso%yKi9OA z^yF5psI!voqdb32cb3z-^PJI4a!EZ*x5Dy3&hOL_v_-`)strGFeH6c|)#=fh*rhen zn(tz5eEb@%*)}aVIu<7N)imZ7laiisU*l~=?G2;#HQ{dD^^dLFfA-7N^bJp~mbqjn zeEh(+?b$z@wl@Fktfi0gY%@uTQsUz!j2Z*f<`s!~Ji3bJn5cc*Q3)yZG@=q>t!n>5 z@=U^iN^Z&VBaBb4jbEcFt6orh>M3+q(`?$tFDw!AQ!``CUPBoTaz|{gEvsRR-H%q} zKp$*JX7(Vr`cR3y7y``;!q+1Zm#f&ehHe!)Dp6WIXhjT*^CWQxSVj}O<46<8O zjYJ|L6gh&qB80j$z?Nb!3bTuRy^TV5SmdDrTTS~%%e_B*W%SlA6xhlssop_w?@6k9 zk1$#{$hfte^+~DpJ8J3E){~f!$a5oS=^2~B>JL*I>cH3DPl45oOvEfRmZI_0-G4Z7 zxrV=M_@1lv1&+P@Cwiju49#6*==2BdG5aXY$fk0Og`?)3q$Z`%xG&1U%vJpDdnv7H zrRl)y6gak_5HW1lm!K>ze_#zQCoW&@c>?0#3or>NQ^q>EN;LtRBe=ELyZ(*t1CI0^g@(m6& z&dR?p-`&GkoiC1_b9cSW(D_f8xDL@PF#As!I(~`EHBnmBc6@o}7+oCv1_8Sh(-(>g6cM;p? z!sk%0sh~~a=df-s-kf5jq6QMBQmo+~LIYzcikuY0_HN}TrGXEY{5|d{kvtRU>o~~N zU!gmCk*c0!u^8U44{+Gf$*}q$uZzCu&M}ZI_*pU)N^#Z}bFL6)US_Z%O-Wn(xZJPn zn=HlY)sf>&-2iEFO03_Vb`Rna^_QHO#8`2J5yLK2nYppw@-$}TCZ{-ec2u^&XJ7ZV z+PSUNmDy>mW>D8gvm(Ha{ZqIFUz#8#H#3h3(*d4S`eOWSg_QACXUqDHv6v*11Y|{J$c6k^V=}FV zyJRzEoach`>Q{BtR^%sI8i8Z?_+#fOeAzy%n+(*e)F{(Z(QV2gZBw@3yD4zhp|5DV zv*c^F<6i=I`8)(SYZu_)$6Tl#X2vza^@jK1@J-&VY3GF9PDE9JEkB<^S552=T&#aZ ziT|tESIb|?u20-={QkG1Iep1oU6@v_8m%LU+Fp*%TaVo06XIR$f&caU(1T(aG3uCf zIYbU7I8^Fl-{=hCBXgn$xzKoFn(1?VHdWJ;(Sp zXgTpKjP-lO9qhyG4_|o_oRxgoyT@n~yrUOyF?Ho0z2ozQUz$c+(SkG7ace_ncEU=w zPwIK)@EnoZ8+WZV`uYFKfWJIo+v==vdOeDu-C1T+ G#{CaSJ)wZ_Ev{iw+?mn4ertP4U_E&f2%zm8jd~5Bs z_x|=5iZY_cixWkDoble@sdktlmT_c@(G6e%K;{mqP7ioT_nZsQuk zr6&0dd*{{-YEOJNl%!ckbf6$BtVL$~hX~Qsz)O`4kJxnhrfHyDqeEiz2Z$=)0k7=exN!J}XUqDrdn$G^PlEYDZ|>@wlASX%~1-!L#In-VT8 zFc`*QP#k@mqL|>C*&@8K3YvHR1<$!9@bM36VUS`7kHnJoZ87Km2P&x@)9MD1e)<;i z&$#Cvn*l-e%ldU_ICUMiq9Ab1MKBgfz!&<1XX``SUf@}K!r0uEaN$4{mW1@}7cf1! z41NJ2YYoAd<*un)a^rhkrFG9gN&GOM&0OD(#GS|WYoR?h2#@G|@I?w(NmUSr=fFLw z81Bi%@K6=QW>zw+y<=eE9s!oIBSeweNZxiH&dSAO4vy0T4dD=;S5?30)BtYM95ff; zT-t-^)&t1da~82B&9IxDju|mUP?m3lBz-lULoy%?N`tqm2$3t^hF{KFOp`BwW8hry z?4(evY(?_s6R?rUI}O37ZTwRTOEm9Z#xTvH{yx!xK7SO1{?QPpu0&GfQ3Pa^!CVvz z3pb*LSO%w%1rT^fV@~}cC{}HUG*t^{SvrLBEX?ohgHLwF0~VKOL;E+R%*tG`Evw@^ z9uf{V7YPr(QqRFo5{QuEO>hVxb5^f`TT~A0{UQ;RUxyiy1(+Vb2y;7 z&V7&gmW#N9Uy=EgaFA5%b+8dSV4>~<#1wCUz}+89-?@tX-Io!$ybZR}L@aq{0O`73 z%+_o|+`9e9JM<|$qtdn+if`^0r}NIMf2{5rB=cy6r1~VzjQ)%@^qxrQ)^o6Su!6mZ zRNv0h9mEczQTE1zu=0w9y7?3e4&H>KVlR{%4ne*396S`s^@if}B|*8OjMak)%^yL$ zpcYx%$XTvDgSKxUU=Ph<={Y?vk43>JIsr{L?&9dLK!AD~#3^M^)*eC1mR>|w?n6R- z4`i=*Ln4bZI36gYrE&OYRK4Ip@N9b(pYBe1k>)X~LNYUuoFJC?v+67<@hr~aBI5^Hji zxvL)q@7=?~t|81k`5)xbIuxDkKY;5<(YO2X^;=(a=ORL@Feo3LHHSXJxn!)DqWpC`c7Pr0!W|BnM`Nm;+_jz>Q zBWqpNLlhu)^T)S9W$lOcYwznh5WirVOvTLPJn$R>$e2B*x=3KfW)JgBIL9ak!`Tq* zaT~6Mz$3n~=Z>QGFl++VU|V{^D^iW}eWxIL^E9TVR_l2f?YavV#{(|={|jm|pWrf) zw7m~qB!EPJ_zS`Y023RpQMM69=Q5MV{ToupC8u{S>AZmK1D_&n2&Wo_^GnC25M>!WbC^(R&Znx*`1e=-+cvfE&s-Kg4IVJ>E#h}9~FR|K=Kv8 zCE&%CkC;=`ed6oEf{qJF&=k|_^iT4z$Nj&kCOLpn!)D#p^OyP%m!Mik+wv_1E?fuK zI2V6erf+0ofjnDVzhmeTg4_0hnXv_m(*2lUSOM+D;U}3Fh6$bnTvzXfN$OVE7af6E zWD5q9)BYmd-@a?w($agO?<(RGRnLv#@r6}Qrqb9^is1W5q!3AcP_gmtFDuUU^<{lL zGG>&s8x9d!BPQXmj_JMyNFM&}Z!uof*0pXu^Z8eI;O6OFG?AU9(8l?jj0Sq_Aw`)EN1lBGYbzVNZ&0bKsXcW2-ggKMS2R!b zLD<3-)z-_Jk^b)IC_Faw%%`LSt3Mmnb6`@`PZY&{#?I|P%p+h%>lcW)IEvV!%AtvT zO*EFEN?v>S{&!eeS#^)Y<=Xzy#!p?mW;00^_>S^1K9~DQwWt(z$FG7Hlns7x9$e>D zBCn z%Z}cFO)xo|EEeXTxC@K_2?u4;#O zT8{pl+KB_ACc=5qn2oKiw=6vRi@gU9;qdVfQLHV05*iURFk2?SvLGk-$1Pj8dsw}` z0c#tYv7vDb8a8c4`RlJER1y2g$=UT~7MsiUja92#Ke_$zFqwN^Pah(+E$HjTsnTQXq_Y}Ta?zHLd-QH5ab_YkNRRVz^#n{;RcYAZPF^}gY4GEp*^U~~z{QRB9 WQs=6p(v&I6IV#D#Xk|i_H}!wX?xS@8 literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72320.tga b/assets/icon/icon/item/72320.tga new file mode 100644 index 0000000000000000000000000000000000000000..6874183c48217305b4f24ea20b45b9f8c2536b7f GIT binary patch literal 4140 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 WeFLO2cRzQpITk^#?z5!hdH)4+on34I literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72322.tga b/assets/icon/icon/item/72322.tga new file mode 100644 index 0000000000000000000000000000000000000000..e1de84da1245dc8bd6b7a7eb3b280bf5edf6de4d GIT binary patch literal 4140 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 literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72323.tga b/assets/icon/icon/item/72323.tga new file mode 100644 index 0000000000000000000000000000000000000000..d8c6790d6e84184b68f7f76d65cee998c63a470d GIT binary patch literal 4140 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

0#%+K^o$O{+w4PLnTzgoEwDzX zpejs4t?@yX9fLTd9ukoQrS=ZE`wye_*dsItFCcdG66QYn9DP?`Veu`&T`<=5y|IQb z&9}1oCs8QN3M|ga^q~`Y;)l18Jn&NtoO~L>950$vTk-ts-$B>-2uka0=osyUKN*F| zT7hVn7aAkAtFjrkP#QYh4k)#ZJys~?PGk@R&7T0>i@T7);nDBM0F2Jm?JwdpTMv)V zlkB>1`LAavkLA8z=xv?Qmp5Yb_90xmc^$sy7|H`KG;WI1T=!%1o=LO}_MpOJN3=VF za8D4b{0cZiPE>j$$gN1i7D?0nql?-Uh1Sx6;@S}uSQEcy@#+4@?!Pn^Ok?)`wrz*L z@9da>(LD;YcM$HDC*0MErSnR69oj}x7^J_Q5g&rdHbnaq zXz5G95pknF>PEajghI0!mU;(F_5kuNUdG1HIou7B_5J@2K2sBA>fLV%1S*u+Qz&Ij;yjEUoWah!k5M1%F|cPEr=GkD59MUfz4xGNVhEjMLx>Lc z(%dzoJ{Ey97C>-QGioD#Se!QGl@=l^C;NPDe1NRQpQ&>w14Lu=e5}+|qM*WuXm0}D zH0G^?DZKT;ZJc@JA>`RAFf_LtO~ad!+%bvG(>qY#9zlBdPV{b@fT6kq-8;8oc>g|F zT($JseyX1y_&ZvlGnc|r>p)XS`(J3il&ozY_;3C>e6FU*^_ha=Zwv*gFT?1X+yZ~1 z88_d29Zx<__tA7Ow#?7M-PMZO6_od z^5sWpTpQ81eH_WjQ94c{b=P)`?B9*H(KI}5O&HjNLd;)P;SBBs&nGxQ@mEylu_6_QG>G_24Ez zQTzckw6~#qYAanEgTJ*I7WYO3sSVXWH*EDT99lZ{4%N0&C=wHY8%C0{u718*e!XQ$5#S2&2Bhv%_yb_tsNJmeY*k*(80t=A#Hv=mi! z8)5gl;fjRdYm31h4WXpcg7mh@KV+-2bQuB>#b#>DwbK`e$P24Ub*Pi|zjR}m5PDu& z)de9NXw5F5&txidWTj?vV;~Yb(ob{i)WcuGQ?I;)2fq9`=FgtSmfh26?&(66vkpb& zX6TBGAd<@=lt_>qN`EHHR2DF20l6}ZrF<2iLo$nMSZsZjkF|^00}M3{gkE56;LDywasj;8s*YGMJ$ohnqG3J{^t-?iGw|7=_y4(6LXoLgD3$d_lQHFP@GrJ@cU_yFKk)wOuI(RjxqLCBX(sN> zIg{a*!S*InY~5dCG81`b7Ufw$&v<;I)#Z__(ppj-NDzUpoV|Y?>;E~Sw&nu}n^+G#8k&A)|eU2LaV)Zn>L;I|qr$86jqOjOZ%e>mzeb zTj3`8)qYZ18zy?Ij~J>0>@#A0CE;cpSsgKFDs`EQU1y$Wo{McBC&i91QBZ8PMoTp& aU~$*%?CR`}^u&|#_C!@*G~ODql79j0`5IFI literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72343.tga b/assets/icon/icon/item/72343.tga new file mode 100644 index 0000000000000000000000000000000000000000..788f7e7cc9012b94b0bfc805666a8be25195b6ae GIT binary patch literal 4140 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 literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72344.tga b/assets/icon/icon/item/72344.tga new file mode 100644 index 0000000000000000000000000000000000000000..746e2a2383513baa64f46a864ed5512f3f6b08d7 GIT binary patch literal 4140 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 MrFu+BX>lt33l4ziVE_OC literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72346.tga b/assets/icon/icon/item/72346.tga new file mode 100644 index 0000000000000000000000000000000000000000..80a28f2d801d967ff74160dc1207a4011fa043f2 GIT binary patch literal 4140 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 SHFq_)wHD48*F3qY2>uV?j=^~V literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72347.tga b/assets/icon/icon/item/72347.tga new file mode 100644 index 0000000000000000000000000000000000000000..bed57de362db8cb24f4405290b92aa89d8e6c486 GIT binary patch literal 4140 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 literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72350.tga b/assets/icon/icon/item/72350.tga new file mode 100644 index 0000000000000000000000000000000000000000..daaf5943f94f862fa703b7219df8fe1b3f537e94 GIT binary patch literal 4140 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 TR9e`xu%tM-Z|A~pol@w(;JXS{ literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72351.tga b/assets/icon/icon/item/72351.tga new file mode 100644 index 0000000000000000000000000000000000000000..9f7ce158d6bfd63507532b4d0e21b49bfdb59108 GIT binary patch literal 4140 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 literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72352.tga b/assets/icon/icon/item/72352.tga new file mode 100644 index 0000000000000000000000000000000000000000..c8b8bd84ed108afda446e1aab5a25c1922484fd4 GIT binary patch literal 4140 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 Va#MA4-Tifq4f)e*>guZt=>MRL4E6v3 literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/72359.tga b/assets/icon/icon/item/72359.tga new file mode 100644 index 0000000000000000000000000000000000000000..1c71f7dc29f3a1c05c3449c18e34ce0225cfaa2d GIT binary patch literal 4140 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 literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/90000.tga b/assets/icon/icon/item/90000.tga new file mode 100644 index 0000000000000000000000000000000000000000..f5efc3b5654f43d563f48aba86fc13e40923fa2b GIT binary patch literal 4140 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 literal 0 HcmV?d00001 diff --git a/assets/icon/icon/item/dummy.tga b/assets/icon/icon/item/dummy.tga new file mode 100644 index 0000000000000000000000000000000000000000..4a5a76e781fcfa2cdf0b8da2e7b67d390d081131 GIT binary patch literal 4140 zcmbuC`Hxj+8ONV{&bjxVyUucFy?20t87RxlFl?n|SOjKhN2g2z1quaf3>IxFwpwu- zEm&H`wwB-$6Sue*qc$4rGHRo-7~`mk>ko>?xNoTS4=@=&-}gOdxHRogp2>IK_rB+S zpM80cSzzhYZ~Vpj)!tgM_KqHl3uTLIgSO|66ZXK_^LFMPPul5+A6ppT^2obPIQPVR z?41|hZ)eV5aC42Xe#1j{_~aYyz=`|p{*}ss zYkP;~*(yU#-ha*MiF{<+wNN?EvhcI zO%u1<L2&bN2och=Tyz0HDBkJXn9IK4-9 zOxw2UqgL!$#Tln)jOY`vpNX=$8FZZqgUk$iPGo{G&SH;3p=fzV$tix4L;U%@8vERh zurpy8&WHvw&#*QoeF~k+?Z~M!wt8#|8G5a4aD&~r=b*_xdN{9`yaMK50#~qeqgX0C zzOqeE-xBL;<99YY#F_uT#5vKM1y<-7w7n-zTi@F4*1BvRb{WvJvnz5+Z}#p1_k!1f zQ{eSr3OKoDaRk!1E(B#LrbM6OVt_hDacQRa!qTEz6XYDEQ zZSW27H6S@;51YrYv&vaybvcB$o&8h(dKVMZT|IStS+;Ve+C=xO(D+#se#-oWqYLdM z-p=zomGOJbzY88n_gsZ(!^e!vFOFT$p9NP>l*e(DvHrp3T1o7>89F}!SHQ2pFTsz& zjX-vI6Zi%AIgo66_YvUzM68S{S97@>cFw)1{_I8n0(o49Z9rW4{F2=~o#W8^eS+UH z3W^Km#BUS)hVj=x`u78yryiY>PO4Xx);4Mub)Q&Y&|mR~|Ih^W~$v^*Otln3%PU^Ds zS8tN+vY+UA%rgF~3IAj+Tm}CC_XD?gj(9GrK6+XuS0l?6?CW|$0(kcPVZrBD=|@ANC#W_{hH|yt@(Yd3^Di$NfvneG zy`?}5sGi79-8~H_M_eemIexh0Wq72CZ?i4DjapjUj&+kqQI@_*Z>ZDT<<|>c8{9d{#tm$zD(_hT&PyTXj^i{`V%NF>#4CFGE}^kM-(K0X?TbzSP|HL+5|^ zQ~zB3UC`h2m&}!F3-V`?-}U*XTATsq=S0ibJJlA|LDd=I6JQhgVe&g&R~^*4(Ic`K18B?c zva90JKcQ`W`O)j`PfyUJ`;EW1r17>BTF(N}{XP&s^~OFR*D}zxX`xv49

{5@aQNImiqv7Y2x4|F~az6sP@o=fJt7#;nj=g;svt^4Yg+MC1z z`{?UqQ7-T9Y~IeEf3<%UGPU-xkL|z}`V3o2_O;($m!AJ_zLJr+{pF8hE{1+G>pw z_M~Fs@ILSX@KJCc zI6Cvh$dqbHdiO+zq&5w+=V|Z-Aekk<^2VRjeLX~1-Q9+F91lm3_=4z4H3~P3JE&=gC-g$*7I)-skim+%#@D!maBq_o^ZG zXzvU7+GTndyd&2~%LV0g**d!$?mLEii|(Lb0?)tjEWe?b5nXFty3X-#3~wXHbFK#T zuX~yCf^G6eh8WD#3$PXM3&p&Z_zqFul#epxsm|qNz5zhB9P?e*LY<9Wk5!L%In4Km z{H<>z^%l{t4Qz1VS@of<^mo49pi?aIjYAwR-!x%ir@jN69~c!Ad}Bq5PwDLQ)4gDe z>Sg+5snyymHu~-nKmS{~b&dDdy?45M|GSyw2Tv_-p69*^vPfqV0zGKhi)WnGW41.0: - self.Pitch.SetText("RFPS: %3d RT:%.2f(%3d) FC: %d(%.2f) " % (nRenderFPS, fAveRT, nCurRT, nFaceCount, nFaceCount/fAveRT)) + if fAveRT > 1.0: + self.Pitch.SetText("RFPS: %3d RT: %.2f(%3d) FC: %d(%.2f) " % (nRenderFPS, fAveRT, nCurRT, nFaceCount, nFaceCount / fAveRT)) - self.Splat.SetText("PATCH: %d SPLAT: %d BAD(%.2f)" % (iPatch, iSplat, fSplatRatio)) + self.Splat.SetText("PATCH: %d SPLAT: %d BAD (%.2f)" % (iPatch, iSplat, fSplatRatio)) #self.Pitch.SetText("Pitch: %.2f" % (app.GetCameraPitch()) #self.TextureNum.SetText("TN : %s" % (sTextureNum)) #self.ObjectNum.SetText("GTI : %d, CRC : %d" % (dwRenderedThing, dwRenderedCRC)) @@ -1552,6 +1555,7 @@ class GameWindow(ui.ScriptWindow): textTail.UpdateShowingTextTail() textTail.ArrangeTextTail() + if -1 != self.PickingItemIndex: textTail.SelectItemName(self.PickingItemIndex) @@ -1669,7 +1673,7 @@ class GameWindow(ui.ScriptWindow): try: for eachInfoText in listText.split("/"): - eachInfo = eachInfoText.split(",") + eachInfo = eachInfoText.split(",") itemVnum = int(eachInfo[0]) itemCount = int(eachInfo[1]) @@ -1679,7 +1683,8 @@ class GameWindow(ui.ScriptWindow): resultCount = len(self.cubeInformation[npcVNUM]) requestCount = 7 modCount = resultCount % requestCount - splitCount = resultCount / requestCount + splitCount = resultCount // requestCount + for i in range(splitCount): #print("/cube r_info %d %d" % (i * requestCount, requestCount)) net.SendChatPacket("/cube r_info %d %d" % (i * requestCount, requestCount)) @@ -2131,7 +2136,7 @@ class GameWindow(ui.ScriptWindow): randX = app.GetRandom(-150, 150) randY = app.GetRandom(-150, 150) - snd.PlaySound3D(x+randX, -y+randY, z, "sound/common/etc/salute.mp3") + snd.PlaySound3D(x + randX, -y + randY, z, "sound/common/etc/salute.mp3") def __PartyRequestQuestion(self, vid): vid = int(vid) diff --git a/assets/root/interfacemodule.py b/assets/root/interfacemodule.py index 839eccd3..498b6f2d 100644 --- a/assets/root/interfacemodule.py +++ b/assets/root/interfacemodule.py @@ -57,6 +57,9 @@ class Interface(object): self.inputDialog = None self.tipBoard = None self.bigBoard = None + # MR-11: Suppress quest button when quest dialog is open to prevent quest button flashing + self.questButtonSuppressed = False + # MR-11: -- END OF -- Suppress quest button when quest dialog is open to prevent quest button flashing # ITEM_MALL self.mallPageDlg = None @@ -107,11 +110,10 @@ class Interface(object): self.wndGuild = uiGuild.GuildWindow() def __MakeChatWindow(self): - wndChat = uiChat.ChatWindow() wndChat.SetSize(wndChat.CHAT_WINDOW_WIDTH, 0) - wndChat.SetPosition(wndMgr.GetScreenWidth()/2 - wndChat.CHAT_WINDOW_WIDTH/2, wndMgr.GetScreenHeight() - wndChat.EDIT_LINE_HEIGHT - 37) + wndChat.SetPosition(wndMgr.GetScreenWidth() // 2 - wndChat.CHAT_WINDOW_WIDTH // 2, wndMgr.GetScreenHeight() - wndChat.EDIT_LINE_HEIGHT - 37) wndChat.SetHeight(200) wndChat.Refresh() wndChat.Show() @@ -1155,9 +1157,15 @@ class Interface(object): self.wndDragonSoulRefine, hideWindows = [x for x in hideWindows if x.IsShow()] + list([x.Hide() for x in hideWindows]) + import sys + # MR-11: Suppress quest button when quest dialog is open to prevent quest button flashing + self.questButtonSuppressed = True + # MR-11: -- END OF -- Suppress quest button when quest dialog is open to prevent quest button flashing + self.HideAllQuestButton() self.HideAllWhisperButton() @@ -1168,8 +1176,15 @@ class Interface(object): def __ShowWindows(self, wnds): import sys + list([x.Show() for x in wnds]) + + # MR-11: Suppress quest button when quest dialog is open to prevent quest button flashing + self.questButtonSuppressed = False + # MR-11: -- END OF -- Suppress quest button when quest dialog is open to prevent quest button flashing + global IsQBHide + if not IsQBHide: self.ShowAllQuestButton() else: @@ -1273,6 +1288,7 @@ class Interface(object): ### Quest ### def BINARY_ClearQuest(self, index): btn = self.__FindQuestButton(index) + if 0 != btn: self.__DestroyQuestButton(btn) @@ -1321,7 +1337,13 @@ class Interface(object): btn.ToolTipText.SetHorizontalAlignLeft() btn.SetEvent(ui.__mem_func__(self.__StartQuest), btn) - btn.Show() + + # MR-1: Hide quest button when quest dialog is open to prevent quest button flashing + if IsQBHide or self.questButtonSuppressed: + btn.Hide() + else: + btn.Show() + # MR-1: -- END OF -- Hide quest button when quest dialog is open to prevent quest button flashing btn.index = index btn.name = name @@ -1332,7 +1354,6 @@ class Interface(object): #chat.AppendChat(chat.CHAT_TYPE_NOTICE, localeInfo.QUEST_APPEND) def __ArrangeQuestButton(self): - screenWidth = wndMgr.GetScreenWidth() screenHeight = wndMgr.GetScreenHeight() @@ -1345,19 +1366,23 @@ class Interface(object): if app.IsRTL(): xPos = xPos + 15 - yPos = 170 * screenHeight / 600 - yCount = (screenHeight - 330) / 63 - + 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)) + for btn in self.questButtonList: + btn.SetPosition(xPos + (int(count // yCount) * 100), yPos + (count % yCount * 63)) + count += 1 + global IsQBHide - if IsQBHide: + + # MR-1: Hide quest button when quest dialog is open to prevent quest button flashing + if IsQBHide or self.questButtonSuppressed: btn.Hide() else: btn.Show() + # MR-1: -- END OF -- Hide quest button when quest dialog is open to prevent quest button flashing def __StartQuest(self, btn): event.QuestButtonClick(btn.index) @@ -1505,19 +1530,19 @@ class Interface(object): ## Rearranges buttons when button count changes def __ArrangeWhisperButton(self): - screenWidth = wndMgr.GetScreenWidth() screenHeight = wndMgr.GetScreenHeight() - + xPos = screenWidth - 70 - yPos = 170 * screenHeight / 600 - yCount = (screenHeight - 330) / 63 - #yCount = (screenHeight - 285) / 63 + yPos = 170 * screenHeight // 600 + yCount = (screenHeight - 330) // 63 + #yCount = (screenHeight - 285) // 63 count = 0 - for button in self.whisperButtonList: - button.SetPosition(xPos + (int(count/yCount) * -50), yPos + (count%yCount * 63)) + for button in self.whisperButtonList: + button.SetPosition(xPos + (int(count // yCount) * -50), yPos + (count % yCount * 63)) + count += 1 ## Finds and returns Whisper button by name diff --git a/assets/root/localeinfo.py b/assets/root/localeinfo.py index 965c0dcd..721a9240 100644 --- a/assets/root/localeinfo.py +++ b/assets/root/localeinfo.py @@ -241,6 +241,7 @@ STAT_MINUS_DESCRIPTION = { 'DEX-': STAT_MINUS_DEX, } +# MR-11: Complete map name list # Map names MINIMAP_ZONE_NAME_DICT = { 'metin2_map_a1': MAP_A1, @@ -256,20 +257,42 @@ MINIMAP_ZONE_NAME_DICT = { 'metin2_map_n_flame_01': MAP_FLAME, 'metin2_map_n_desert_01': MAP_DESERT, 'metin2_map_milgyo': MAP_TEMPLE, + 'metin2_map_monkeydungeon': MAP_MONKEY_DUNGEON, + 'metin2_map_monkeydungeon_02': MAP_MONKEY_DUNGEON2, + 'metin2_map_monkeydungeon_03': MAP_MONKEY_DUNGEON3, 'metin2_map_spiderdungeon': MAP_SPIDER, - 'metin2_map_deviltower1': MAP_SKELTOWER, - 'metin2_map_guild_01': MAP_AG, - 'metin2_map_guild_02': MAP_BG, - 'metin2_map_guild_03': MAP_CG, + 'metin2_map_spiderdungeon_02': MAP_SPIDERDUNGEON_02, + 'metin2_map_spiderdungeon_03': MAP_SPIDERDUNGEON_03, + 'metin2_map_deviltower1': MAP_DEVILTOWER1, + 'metin2_map_devilsCatacomb': MAP_DEVILCATACOMB, + 'metin2_map_guild_01': MAP_GUILD_01, + 'metin2_map_guild_02': MAP_GUILD_02, + 'metin2_map_guild_03': MAP_GUILD_03, + 'metin2_guild_village_01': GUILD_VILLAGE_01, + 'metin2_guild_village_02': GUILD_VILLAGE_02, + 'metin2_guild_village_03': GUILD_VILLAGE_03, 'metin2_map_trent': MAP_TREE, 'metin2_map_trent02': MAP_TREE2, 'season1/metin2_map_WL_01': MAP_WL, 'season1/metin2_map_nusluck01': MAP_NUSLUCK, + 'season1/metin2_map_oxevent': MAP_OXEVENT, + 'metin2_map_wedding_01': MAP_WEDDING_01, + 'metin2_map_bf': MAP_BATTLE_FIELD, + 'metin2_map_bf_02': MAP_BATTLE_FIELD, + 'metin2_map_bf_03': MAP_BATTLE_FIELD, 'Metin2_map_CapeDragonHead': MAP_CAPE, 'metin2_map_Mt_Thunder': MAP_THUNDER, 'metin2_map_dawnmistwood': MAP_DAWN, 'metin2_map_BayBlackSand': MAP_BAY, + 'metin2_map_n_flame_dungeon_01': MAP_N_FLAME_DUNGEON_01, + 'metin2_map_n_snow_dungeon_01': MAP_N_SNOW_DUNGEON_01, + 'metin2_map_duel': MAP_DUEL, + 'season2/metin2_map_skipia_dungeon_01': MAP_SKIPIA_DUNGEON_01, + 'metin2_map_skipia_dungeon_02': MAP_SKIPIA_DUNGEON_02, + 'metin2_map_skipia_dungeon_boss': MAP_SKIPIA_DUNGEON_BOSS, + 'metin2_map_skipia_dungeon_boss2': MAP_SKIPIA_DUNGEON_BOSS_2, } +# MR-11: -- END OF -- Complete map name list # Path of quest icon file def GetLetterImageName(): @@ -351,6 +374,7 @@ def SecondToDHM(time): day = ((time // 60) // 60) // 24 text = '' + if day > 0: text += str(day) + DAY text += ' ' @@ -394,18 +418,18 @@ def RTSecondToDHMS(time): if d or not text: if d: - text += "%dd " % d + text += str(d) + " " + DAY + (", " if h or m or s else "") if h or not text: if h: - text += "%dh " % h + text += str(h) + " " + HOUR + (", " if m or s else "") if m or not text: if m: - text += "%dm " % m + text += str(m) + " " + MINUTE + (", " if s else "") if s or not text: if s: - text += "%ds " % s + text += str(s) + " " + SECOND return text.strip() diff --git a/assets/root/uiaffectshower.py b/assets/root/uiaffectshower.py index 7e506199..af49942f 100644 --- a/assets/root/uiaffectshower.py +++ b/assets/root/uiaffectshower.py @@ -49,7 +49,7 @@ class LovePointImage(ui.ExpandedImageBox): if 0 == self.lovePoint: loveGrade = 0 else: - loveGrade = self.lovePoint // 25 + 1 + loveGrade = self.lovePoint / 25 + 1 fileName = self.FILE_DICT.get(loveGrade, self.FILE_PATH+"00.dds") try: @@ -79,9 +79,9 @@ class HorseImage(ui.ExpandedImageBox): FILE_DICT = { 00 : FILE_PATH+"00.dds", - 1 : FILE_PATH+"00.dds", - 2 : FILE_PATH+"00.dds", - 3 : FILE_PATH+"00.dds", + 0o1 : FILE_PATH+"00.dds", + 0o2 : FILE_PATH+"00.dds", + 0o3 : FILE_PATH+"00.dds", 10 : FILE_PATH+"10.dds", 11 : FILE_PATH+"11.dds", 12 : FILE_PATH+"12.dds", @@ -107,7 +107,7 @@ class HorseImage(ui.ExpandedImageBox): if 0 == level: return 0 - return (level-1)//10 + 1 + return (level-1)/10 + 1 def SetState(self, level, health, battery): #self.textLineList=[] @@ -305,7 +305,7 @@ class AffectImage(ui.ExpandedImageBox): self.toolTipText.SetText(text) w, h = self.toolTipText.GetTextSize() - self.toolTipText.SetPosition(max(0, x + self.GetWidth()//2 - w//2), y) + self.toolTipText.SetPosition(max(0, x + self.GetWidth()/2 - w/2), y) def SetDescription(self, description): self.description = description diff --git a/assets/root/uicharacter.py b/assets/root/uicharacter.py index d6b0e5f0..acf1dc8a 100644 --- a/assets/root/uicharacter.py +++ b/assets/root/uicharacter.py @@ -572,7 +572,7 @@ class CharacterWindow(ui.ScriptWindow): self.toolTipAlignment.ClearToolTip() self.toolTipAlignment.AutoAppendTextLine(localeInfo.TITLE_NAME_LIST[grade], gradeColor) - self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_NAME + str(point)) + self.toolTipAlignment.AutoAppendTextLine(localeInfo.ALIGNMENT_NAME + ": " + str(point)) self.toolTipAlignment.AlignHorizonalCenter() def __ShowStatusMinusButtonList(self): @@ -695,21 +695,22 @@ class CharacterWindow(ui.ScriptWindow): for i in range(min(quest.GetQuestCount(), quest.QUEST_MAX_NUM)): # END_OF_QUEST_LIMIT_COUNT_BUG_FIX (lastName, lastTime) = quest.GetQuestLastTime(i) - clockText = localeInfo.QUEST_UNLIMITED_TIME + if len(lastName) > 0: if lastTime <= 0: clockText = localeInfo.QUEST_TIMEOVER else: - questLastMinute = lastTime / 60 + questLastMinute = lastTime // 60 questLastSecond = lastTime % 60 clockText = lastName + " : " if questLastMinute > 0: clockText += str(questLastMinute) + localeInfo.QUEST_MIN + if questLastSecond > 0: clockText += " " @@ -1327,7 +1328,7 @@ class CharacterWindow(ui.ScriptWindow): return realSkillSlot % skill.SKILL_GRADE_STEP_COUNT def __GetSkillGradeFromSlot(self, skillSlot): - return int(skillSlot / skill.SKILL_GRADE_STEP_COUNT) + return int(skillSlot // skill.SKILL_GRADE_STEP_COUNT) def SelectSkillGroup(self, index): self.__SelectSkillGroup(index) diff --git a/assets/root/uidragonsoul.py b/assets/root/uidragonsoul.py index c1099677..52efa1dc 100644 --- a/assets/root/uidragonsoul.py +++ b/assets/root/uidragonsoul.py @@ -192,6 +192,7 @@ class DragonSoulWindow(ui.ScriptWindow): def Close(self): if None != self.tooltipItem: self.tooltipItem.HideToolTip() + self.Hide() def __DeckButtonDown(self, deck): @@ -200,18 +201,27 @@ class DragonSoulWindow(ui.ScriptWindow): def SetInventoryPage(self, page): if self.inventoryPageIndex != page: self.__HighlightSlot_ClearCurrentPage() + self.inventoryPageIndex = page - self.inventoryTab[(page+1)%5].SetUp() - self.inventoryTab[(page+2)%5].SetUp() - self.inventoryTab[(page+3)%5].SetUp() - self.inventoryTab[(page+4)%5].SetUp() + + self.inventoryTab[(page + 1) % 5].SetUp() + self.inventoryTab[(page + 2) % 5].SetUp() + self.inventoryTab[(page + 3) % 5].SetUp() + self.inventoryTab[(page + 4) % 5].SetUp() + self.RefreshBagSlotWindow() def SetItemToolTip(self, tooltipItem): self.tooltipItem = tooltipItem + if tooltipItem: tooltipItem.SetDragonSoulWindow(self) + # MR-11: Fix Dragon stones timer auto-start + if self.isActivated: + self.__WarmDragonSoulTimeCache() + # MR-11: -- END OF -- Fix Dragon stones timer auto-start + def RefreshItemSlot(self): self.RefreshBagSlotWindow() self.RefreshEquipSlotWindow() @@ -400,9 +410,9 @@ class DragonSoulWindow(ui.ScriptWindow): itemPrice = item.GetISellItemPrice() if item.Is1GoldItem(): - itemPrice = itemCount / itemPrice / 5 + itemPrice = itemCount // itemPrice // 5 else: - itemPrice = itemPrice * itemCount / 5 + itemPrice = itemPrice * itemCount // 5 item.GetItemName(itemIndex) itemName = item.GetItemName() @@ -547,6 +557,7 @@ class DragonSoulWindow(ui.ScriptWindow): if mouseModule.mouseController.isAttached(): attachedSlotType = mouseModule.mouseController.GetAttachedType() attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() + # Case of dragging item onto itself if player.SLOT_TYPE_INVENTORY == attachedSlotType and itemSlotIndex == attachedSlotPos: return @@ -561,6 +572,7 @@ class DragonSoulWindow(ui.ScriptWindow): else: selectedItemVNum = player.GetItemIndex(player.INVENTORY, itemSlotIndex) itemCount = player.GetItemCount(player.INVENTORY, itemSlotIndex) + mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_INVENTORY, itemSlotIndex, selectedItemVNum, itemCount) self.wndItem.SetUseMode(False) snd.PlaySound("sound/ui/pick.wav") @@ -581,10 +593,12 @@ class DragonSoulWindow(ui.ScriptWindow): if 0 == player.GetItemMetinSocket(player.DRAGON_SOUL_INVENTORY, attachedSlotPos, 0): self.wndPopupDialog.SetText(localeInfo.DRAGON_SOUL_EXPIRED) self.wndPopupDialog.Open() + return item.SelectItem(attachedItemIndex) subType = item.GetItemSubType() + if subType != (selectedSlot - player.DRAGON_SOUL_EQUIPMENT_SLOT_START): self.wndPopupDialog.SetText(localeInfo.DRAGON_SOUL_UNMATCHED_SLOT) self.wndPopupDialog.Open() @@ -618,11 +632,13 @@ class DragonSoulWindow(ui.ScriptWindow): net.SendItemUsePacket(*self.srcItemPos) else: self.__SendMoveItemPacket(*(self.srcItemPos + self.dstItemPos + (0,))) + self.dlgQuestion.Close() def __Cancel(self): self.srcItemPos = (0, 0) self.dstItemPos = (0, 0) + self.dlgQuestion.Close() # Warning dialog related end @@ -652,9 +668,11 @@ class DragonSoulWindow(ui.ScriptWindow): if self.isActivated: self.DeactivateDragonSoul() net.SendChatPacket("/dragon_soul deactivate") + self.deckPageIndex = page + self.deckTab[page].Down() - self.deckTab[(page+1)%2].SetUp() + self.deckTab[(page + 1) % 2].SetUp() self.RefreshEquipSlotWindow() @@ -663,13 +681,17 @@ class DragonSoulWindow(ui.ScriptWindow): self.isActivated = True self.activateButton.Down() self.deckPageIndex = deck + self.deckTab[deck].Down() - self.deckTab[(deck+1)%2].SetUp() + self.deckTab[(deck + 1) % 2].SetUp() + self.RefreshEquipSlotWindow() + self.__WarmDragonSoulTimeCache(deck) def DeactivateDragonSoul(self): self.isActivated = False self.activateButton.SetUp() + if self.tooltipItem: self.tooltipItem.ClearDragonSoulTimeCache() @@ -682,8 +704,11 @@ class DragonSoulWindow(ui.ScriptWindow): if not self.isActivated or self.deckPageIndex != deckIndex: if self.__CanActivateDeck(): net.SendChatPacket("/dragon_soul activate " + str(deckIndex)) + self.isActivated = True + self.activateButton.Down() + self.__WarmDragonSoulTimeCache(deckIndex) else: self.isActivated = False self.activateButton.SetUp() @@ -695,13 +720,16 @@ class DragonSoulWindow(ui.ScriptWindow): def __CanActivateDeck(self): canActiveNum = 0 + for i in range(6): slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(player.INVENTORY, player.DRAGON_SOUL_EQUIPMENT_SLOT_START + i) itemVnum = player.GetItemIndex(slotNumber) if itemVnum != 0: item.SelectItem(itemVnum) + isNoLimit = True + for i in range(item.LIMIT_MAX_NUM): (limitType, limitValue) = item.GetLimit(i) @@ -711,14 +739,34 @@ class DragonSoulWindow(ui.ScriptWindow): if item.LIMIT_TIMER_BASED_ON_WEAR == limitType: isNoLimit = False remain_time = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0) + if 0 != remain_time: canActiveNum += 1 break + # Dragon soul can be activated if it has no timer if isNoLimit: canActiveNum += 1 return canActiveNum > 0 + + # MR-11: Fix Dragon stones timer auto-start + def __WarmDragonSoulTimeCache(self, deckIndex = None): + if not self.tooltipItem: + return + + if not self.isActivated: + return + + if deckIndex is None: + deckIndex = self.deckPageIndex + + deckStart = deckIndex * player.DRAGON_SOUL_EQUIPMENT_FIRST_SIZE + deckStart += player.DRAGON_SOUL_EQUIPMENT_SLOT_START + slotNumbers = [deckStart + i for i in range(6)] + + self.tooltipItem.WarmDragonSoulTimeCache(slotNumbers) + # MR-11: -- END OF -- Fix Dragon stones timer auto-start # Activation related end @@ -1136,10 +1184,10 @@ class DragonSoulRefineWindow(ui.ScriptWindow): def __GetDragonSoulTypeInfo(self, vnum): if not self.__IsDragonSoul(vnum): return DragonSoulRefineWindow.INVALID_DRAGON_SOUL_INFO - ds_type = vnum / 10000 - grade = vnum % 10000 /1000 - step = vnum % 1000 / 100 - strength = vnum % 100 / 10 + ds_type = vnum // 10000 + grade = vnum % 10000 //1000 + step = vnum % 1000 // 100 + strength = vnum % 100 // 10 return (ds_type, grade, step, strength) diff --git a/assets/root/uiguild.py b/assets/root/uiguild.py index 573a498c..fc11e168 100644 --- a/assets/root/uiguild.py +++ b/assets/root/uiguild.py @@ -605,7 +605,7 @@ class ChangeGradeNameDialog(ui.ScriptWindow): self.gradeNameSlot.SetText("") self.gradeNameSlot.SetFocus() xMouse, yMouse = wndMgr.GetMousePosition() - self.SetPosition(xMouse - self.GetWidth()/2, yMouse + 50) + self.SetPosition(xMouse - self.GetWidth() / 2, yMouse + 50) self.SetTop() self.Show() def Close(self): @@ -1194,7 +1194,7 @@ class GuildWindow(ui.ScriptWindow): ## Passive """ - for i in xrange(len(playerSettingModule.PASSIVE_GUILD_SKILL_INDEX_LIST)): + for i in range(len(playerSettingModule.PASSIVE_GUILD_SKILL_INDEX_LIST)): slotIndex = page.passiveSlot.GetStartIndex()+i skillIndex = playerSettingModule.PASSIVE_GUILD_SKILL_INDEX_LIST[i] @@ -1398,21 +1398,26 @@ class GuildWindow(ui.ScriptWindow): return global DISABLE_DECLARE_WAR + page = self.pageWindow["GUILD_INFO"] + page.nameSlot.SetText(guild.GetGuildName()) page.masterNameSlot.SetText(guild.GetGuildMasterName()) page.guildLevelSlot.SetText(str(guild.GetGuildLevel())) + if page.guildMoneySlot: page.guildMoneySlot.SetText(str(guild.GetGuildMoney())) curExp, lastExp = guild.GetGuildExperience() curExp *= 100 lastExp *= 100 + page.curExpSlot.SetText(str(curExp)) page.lastExpSlot.SetText(str(lastExp)) curMemberCount, maxMemberCount = guild.GetGuildMemberCount() - if maxMemberCount== 0xffff: + + if maxMemberCount == 0xffff: page.memberCountSlot.SetText("%d / %s " % (curMemberCount, localeInfo.GUILD_MEMBER_COUNT_INFINITY)) else: page.memberCountSlot.SetText("%d / %d" % (curMemberCount, maxMemberCount)) @@ -2668,6 +2673,7 @@ if __name__ == "__main__": material = tokens[TOKEN_MATERIAL] folderName = "" + if "HEADQUARTER" == type: folderName = "headquarter" elif "FACILITY" == type: @@ -2677,14 +2683,19 @@ if __name__ == "__main__": ##"BuildIn" Is made by exist instance. materialList = ["0", "0", "0"] + if material[0] == "\"": material = material[1:] + if material[-1] == "\"": material = material[:-1] + for one in material.split("/"): data = one.split(",") + if 2 != len(data): continue + itemID = int(data[0]) count = data[1] @@ -2717,7 +2728,7 @@ if __name__ == "__main__": app.CloseTextFile(handle) - LoadGuildBuildingList(app.GetLocalePath()+"/GuildBuildingList.txt") + LoadGuildBuildingList(app.GetLocalePath() + "/GuildBuildingList.txt") class TestGame(ui.Window): def __init__(self): diff --git a/assets/root/uiinventory.py b/assets/root/uiinventory.py index 67974c68..949f6518 100644 --- a/assets/root/uiinventory.py +++ b/assets/root/uiinventory.py @@ -797,9 +797,9 @@ class InventoryWindow(ui.ScriptWindow): itemPrice = item.GetISellItemPrice() if item.Is1GoldItem(): - itemPrice = itemCount / itemPrice / 5 + itemPrice = itemCount // itemPrice // 5 else: - itemPrice = itemPrice * itemCount / 5 + itemPrice = itemPrice * itemCount // 5 item.GetItemName(itemIndex) itemName = item.GetItemName() @@ -1036,6 +1036,7 @@ class InventoryWindow(ui.ScriptWindow): # MR-10: Add belt support for accessory sockets def __CanPutBeltSocket(self, dstSlotPos, mtrlVnum): dstItemVNum = player.GetItemIndex(dstSlotPos) + if dstItemVNum == 0: return False diff --git a/assets/root/uimessenger.py b/assets/root/uimessenger.py index cc5ff9f4..16fd9db6 100644 --- a/assets/root/uimessenger.py +++ b/assets/root/uimessenger.py @@ -108,8 +108,9 @@ class MessengerItem(ui.Window): def OnRender(self): if self.isSelected: x, y = self.GetGlobalPosition() + grp.SetColor(grp.GenerateColor(0.0, 0.0, 0.7, 0.7)) - grp.RenderBar(x+16, y, self.GetWidth()-16, self.GetHeight()) + grp.RenderBar(x + 16, y, self.GetWidth() - 16, self.GetHeight()) class MessengerMemberItem(MessengerItem): @@ -444,12 +445,12 @@ class MessengerWindow(ui.ScriptWindow): if self.isLoaded==0: return - if self.showingPageSize/20 >= len(self.showingItemList): + if self.showingPageSize / 20 >= len(self.showingItemList): self.scrollBar.Hide() self.startLine = 0 else: if self.showingItemList: - self.scrollBar.SetMiddleBarSize(float(self.showingPageSize/20) / float(len(self.showingItemList))) + self.scrollBar.SetMiddleBarSize(float(self.showingPageSize / 20) / float(len(self.showingItemList))) self.scrollBar.Show() ##### @@ -465,6 +466,7 @@ class MessengerWindow(ui.ScriptWindow): item.Show() yPos += 20 + if yPos > heightLimit: break @@ -547,7 +549,7 @@ class MessengerWindow(ui.ScriptWindow): self.OnCloseQuestionDialog() def OnScroll(self): - scrollLineCount = len(self.showingItemList) - (self.showingPageSize/20) + scrollLineCount = len(self.showingItemList) - (self.showingPageSize / 20) startLine = int(scrollLineCount * self.scrollBar.GetPos()) if startLine != self.startLine: diff --git a/assets/root/uiminimap.py b/assets/root/uiminimap.py index bb5a7910..b6c5a2c9 100644 --- a/assets/root/uiminimap.py +++ b/assets/root/uiminimap.py @@ -177,7 +177,7 @@ class AtlasWindow(ui.ScriptWindow): ui.ScriptWindow.Show(self) def SetCenterPositionAdjust(self, x, y): - self.SetPosition((wndMgr.GetScreenWidth() - self.GetWidth()) / 2 + x, (wndMgr.GetScreenHeight() - self.GetHeight()) / 2 + y) + self.SetPosition((wndMgr.GetScreenWidth() - self.GetWidth()) // 2 + x, (wndMgr.GetScreenHeight() - self.GetHeight()) // 2 + y) def OnPressEscapeKey(self): self.Hide() @@ -385,24 +385,26 @@ class MiniMap(ui.ScriptWindow): (x, y, z) = player.GetMainCharacterPosition() miniMap.Update(x, y) - self.positionInfo.SetText("(%.0f, %.0f)" % (x/100, y/100)) + self.positionInfo.SetText("(%.0f, %.0f)" % (x // 100, y // 100)) if self.tooltipInfo: if True == self.MiniMapWindow.IsIn(): (mouseX, mouseY) = wndMgr.GetMousePosition() (bFind, sName, iPosX, iPosY, dwTextColor) = miniMap.GetInfo(mouseX, mouseY) + if bFind == 0: self.tooltipInfo.Hide() elif not self.canSeeInfo: - self.tooltipInfo.SetText("%s(%s)" % (sName, localeInfo.UI_POS_UNKNOWN)) + self.tooltipInfo.SetText("%s (%s)" % (sName, localeInfo.UI_POS_UNKNOWN)) self.tooltipInfo.SetTooltipPosition(mouseX - 5, mouseY) self.tooltipInfo.SetTextColor(dwTextColor) self.tooltipInfo.Show() else: if app.IsRTL() and sName[-1].isalnum(): - self.tooltipInfo.SetText("(%s)%d, %d" % (sName, iPosX, iPosY)) + self.tooltipInfo.SetText("(%s) %d, %d" % (sName, iPosX, iPosY)) else: - self.tooltipInfo.SetText("%s(%d, %d)" % (sName, iPosX, iPosY)) + self.tooltipInfo.SetText("%s (%d, %d)" % (sName, iPosX, iPosY)) + self.tooltipInfo.SetTooltipPosition(mouseX - 5, mouseY) self.tooltipInfo.SetTextColor(dwTextColor) self.tooltipInfo.Show() diff --git a/assets/root/uiplayergauge.py b/assets/root/uiplayergauge.py index 40068de6..2e73bda2 100644 --- a/assets/root/uiplayergauge.py +++ b/assets/root/uiplayergauge.py @@ -4,7 +4,6 @@ import chr import textTail class PlayerGauge(ui.Gauge): - def __init__(self, parent): ui.Gauge.__init__(self) self.SetParent(parent) @@ -29,7 +28,7 @@ class PlayerGauge(ui.Gauge): (x, y, z)=textTail.GetPosition(playerIndex) isChat = textTail.IsChat(playerIndex) - ui.Gauge.SetPosition(self, int(x - self.GetWidth()/2), int(y + 5) + isChat*17) + ui.Gauge.SetPosition(self, int(x - self.GetWidth() // 2), int(y + 5) + isChat * 17) def RefreshGauge(self): @@ -43,11 +42,11 @@ class PlayerGauge(ui.Gauge): else: if self.IsShow(): - if self.curHP > self.maxHP / 2: + if self.curHP > self.maxHP // 2: self.Hide() else: - if self.curHP < self.maxHP / 2: + if self.curHP < self.maxHP // 2: self.OnUpdate() self.Show() diff --git a/assets/root/uisafebox.py b/assets/root/uisafebox.py index d9e4fb0b..9c22a9bf 100644 --- a/assets/root/uisafebox.py +++ b/assets/root/uisafebox.py @@ -312,9 +312,11 @@ class SafeboxWindow(ui.ScriptWindow): self.pageButtonList = [] text = "I" - pos = -int(float(pageCount-1)/2 * 52) + pos = -int(float(pageCount-1) / 2 * 52) + for i in range(pageCount): button = ui.RadioButton() + button.SetParent(self) button.SetUpVisual("d:/ymir work/ui/game/windows/tab_button_middle_01.sub") button.SetOverVisual("d:/ymir work/ui/game/windows/tab_button_middle_02.sub") @@ -325,6 +327,7 @@ class SafeboxWindow(ui.ScriptWindow): button.SetText(text) button.SetEvent(lambda arg=i: self.SelectPage(arg)) button.Show() + self.pageButtonList.append(button) pos += 52 @@ -343,11 +346,11 @@ class SafeboxWindow(ui.ScriptWindow): self.RefreshSafebox() def __LocalPosToGlobalPos(self, local): - return self.curPageIndex*safebox.SAFEBOX_PAGE_SIZE + local + return self.curPageIndex * safebox.SAFEBOX_PAGE_SIZE + local def SetTableSize(self, size): - pageCount = max(1, size / safebox.SAFEBOX_SLOT_Y_COUNT) + pageCount = max(1, size // safebox.SAFEBOX_SLOT_Y_COUNT) pageCount = min(3, pageCount) size = safebox.SAFEBOX_SLOT_Y_COUNT @@ -358,6 +361,7 @@ class SafeboxWindow(ui.ScriptWindow): self.wndItem.SetSlotBaseImage("d:/ymir work/ui/public/Slot_Base.sub", 1.0, 1.0, 1.0, 1.0) wnd_height = 130 + 32 * size + self.wndBoard.SetSize(self.BOX_WIDTH, wnd_height) self.SetSize(self.BOX_WIDTH, wnd_height) self.UpdateRect() @@ -422,6 +426,7 @@ class SafeboxWindow(ui.ScriptWindow): #snd.PlaySound("sound/ui/drop.wav") else: attachedInvenType = player.SlotTypeToInvenType(attachedSlotType) + if player.RESERVED_WINDOW == attachedInvenType: return @@ -429,18 +434,15 @@ class SafeboxWindow(ui.ScriptWindow): net.SendSafeboxSaveMoneyPacket(mouseModule.mouseController.GetAttachedItemCount()) snd.PlaySound("sound/ui/money.wav") else: - chat net.SendSafeboxCheckinPacket(attachedInvenType, attachedSlotPos, selectedSlotPos) #snd.PlaySound("sound/ui/drop.wav") mouseModule.mouseController.DeattachObject() def SelectItemSlot(self, selectedSlotPos): - selectedSlotPos = self.__LocalPosToGlobalPos(selectedSlotPos) if mouseModule.mouseController.isAttached(): - attachedSlotType = mouseModule.mouseController.GetAttachedType() if player.SLOT_TYPE_INVENTORY == attachedSlotType: @@ -459,6 +461,7 @@ class SafeboxWindow(ui.ScriptWindow): else: curCursorNum = app.GetCursor() + if app.SELL == curCursorNum: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.SAFEBOX_SELL_DISABLE_SAFEITEM) @@ -580,7 +583,7 @@ class MallWindow(ui.ScriptWindow): def SetTableSize(self, size): - pageCount = max(1, size / safebox.SAFEBOX_SLOT_Y_COUNT) + pageCount = max(1, size // safebox.SAFEBOX_SLOT_Y_COUNT) pageCount = min(3, pageCount) size = safebox.SAFEBOX_SLOT_Y_COUNT @@ -588,20 +591,22 @@ class MallWindow(ui.ScriptWindow): self.wndItem.RefreshSlot() self.wndItem.SetSlotBaseImage("d:/ymir work/ui/public/Slot_Base.sub", 1.0, 1.0, 1.0, 1.0) - self.wndBoard.SetSize(self.BOX_WIDTH, 82 + 32*size) - self.SetSize(self.BOX_WIDTH, 85 + 32*size) + self.wndBoard.SetSize(self.BOX_WIDTH, 82 + 32 * size) + self.SetSize(self.BOX_WIDTH, 85 + 32 * size) self.UpdateRect() def RefreshMall(self): - getItemID=safebox.GetMallItemID - getItemCount=safebox.GetMallItemCount - setItemID=self.wndItem.SetItemSlot + getItemID = safebox.GetMallItemID + getItemCount = safebox.GetMallItemCount + setItemID = self.wndItem.SetItemSlot for i in range(safebox.GetMallSize()): itemID = getItemID(i) itemCount = getItemCount(i) + if itemCount <= 1: itemCount = 0 + setItemID(i, itemID, itemCount) self.wndItem.RefreshSlot() diff --git a/assets/root/uiselectitem.py b/assets/root/uiselectitem.py index 85aa1c47..55896738 100644 --- a/assets/root/uiselectitem.py +++ b/assets/root/uiselectitem.py @@ -84,6 +84,7 @@ class SelectItemWindow(ui.ScriptWindow): slotNumber = i itemVNum = getItemVNum(slotNumber) + if 0 == itemVNum: continue @@ -91,6 +92,7 @@ class SelectItemWindow(ui.ScriptWindow): continue itemGrade = player.GetItemGrade(slotNumber) + if itemGrade > 2: continue @@ -102,14 +104,17 @@ class SelectItemWindow(ui.ScriptWindow): break itemCount = len(self.inventorySlotPosDict) + if itemCount < 15: self.SetTableSize(3) else: lineCount = 3 - lineCount += (itemCount - 15) / 5 + lineCount += (itemCount - 15) // 5 + if itemCount % 5: lineCount += 1 + self.SetTableSize(lineCount) for selectWndPos, inventoryPos in list(self.inventorySlotPosDict.items()): diff --git a/assets/root/uishop.py b/assets/root/uishop.py index 8feb6b14..361b73fa 100644 --- a/assets/root/uishop.py +++ b/assets/root/uishop.py @@ -310,9 +310,9 @@ class ShopDialog(ui.ScriptWindow): itemPrice = item.GetISellItemPrice() if item.Is1GoldItem(): - itemPrice = attachedCount / itemPrice / 5 + itemPrice = attachedCount // itemPrice // 5 else: - itemPrice = itemPrice * max(1, attachedCount) / 5 + itemPrice = itemPrice * max(1, attachedCount) // 5 itemName = item.GetItemName() diff --git a/assets/root/uisystemoption.py b/assets/root/uisystemoption.py index 2e76e380..0c5efe49 100644 --- a/assets/root/uisystemoption.py +++ b/assets/root/uisystemoption.py @@ -192,7 +192,7 @@ class OptionDialog(ui.ScriptWindow): self.selectMusicFile.SetText(fileName[:MUSIC_FILENAME_MAX_LEN]) if musicInfo.fieldMusic != "": - snd.FadeOutMusic("BGM/"+ musicInfo.fieldMusic) + snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic) if fileName==uiSelectMusic.DEFAULT_THEMA: musicInfo.fieldMusic=musicInfo.METIN2THEMA diff --git a/assets/root/uitarget.py b/assets/root/uitarget.py index a6627906..a4a8512d 100644 --- a/assets/root/uitarget.py +++ b/assets/root/uitarget.py @@ -77,6 +77,7 @@ class TargetBoard(ui.ThinBoard): self.buttonDict = {} self.showingButtonList = [] + for buttonName in self.BUTTON_NAME_LIST: button = ui.Button() button.SetParent(self) @@ -223,7 +224,7 @@ class TargetBoard(ui.ThinBoard): self.eventWhisper = event def UpdatePosition(self): - self.SetPosition(wndMgr.GetScreenWidth()/2 - self.GetWidth()/2, 10) + self.SetPosition(wndMgr.GetScreenWidth() // 2 - self.GetWidth() // 2, 10) def ResetTargetBoard(self): @@ -270,7 +271,7 @@ class TargetBoard(ui.ThinBoard): def SetHP(self, hpPercentage): if not self.hpGauge.IsShow(): - self.SetSize(200 + 7*self.nameLength, self.GetHeight()) + self.SetSize(200 + 7 * self.nameLength, self.GetHeight()) if app.IsRTL(): self.name.SetPosition( self.GetWidth()-23, 13) @@ -376,7 +377,6 @@ class TargetBoard(ui.ThinBoard): return self.isShowButton def RefreshButton(self): - self.HideAllButton() if chr.INSTANCE_TYPE_BUILDING == chr.GetInstanceType(self.vid): @@ -386,7 +386,7 @@ class TargetBoard(ui.ThinBoard): if player.IsPVPInstance(self.vid) or player.IsObserverMode(): # PVP_INFO_SIZE_BUG_FIX - self.SetSize(200 + 7*self.nameLength, 40) + self.SetSize(200 + 7 * self.nameLength, 40) self.UpdatePosition() # END_OF_PVP_INFO_SIZE_BUG_FIX return @@ -444,7 +444,8 @@ class TargetBoard(ui.ThinBoard): def __ArrangeButtonPosition(self): showingButtonCount = len(self.showingButtonList) - pos = -(showingButtonCount / 2) * 68 + pos = -(showingButtonCount // 2) * 68 + if 0 == showingButtonCount % 2: pos += 34 diff --git a/assets/root/uitaskbar.py b/assets/root/uitaskbar.py index b4d1bdd2..064aec4b 100644 --- a/assets/root/uitaskbar.py +++ b/assets/root/uitaskbar.py @@ -173,7 +173,7 @@ class EnergyBar(ui.ScriptWindow): if leftTime == 0: self.energyEmpty.Show() - elif ((leftTime * 100) / maxTime) < 15: + elif ((leftTime * 100) // maxTime) < 15: self.energyHungry.Show() else: self.energyFull.Show() @@ -461,12 +461,14 @@ class TaskBar(ui.ScriptWindow): if app.IsRTL(): systemButton = toggleButtonDict[TaskBar.BUTTON_SYSTEM] + if systemButton.ToolTipText: tx, ty = systemButton.ToolTipText.GetLocalPosition() tw = systemButton.ToolTipText.GetWidth() - systemButton.ToolTipText.SetPosition(-tw/2, ty) + systemButton.ToolTipText.SetPosition(-tw // 2, ty) expGauge = [] + expGauge.append(self.GetChild("EXPGauge_01")) expGauge.append(self.GetChild("EXPGauge_02")) expGauge.append(self.GetChild("EXPGauge_03")) @@ -726,6 +728,7 @@ class TaskBar(ui.ScriptWindow): def SetST(self, curPoint, maxPoint): curPoint = min(curPoint, maxPoint) + if maxPoint > 0: self.stGauge.SetPercentage(curPoint, maxPoint) self.tooltipST.SetText("%s : %d / %d" % (localeInfo.TASKBAR_ST, curPoint, maxPoint)) diff --git a/assets/root/uitooltip.py b/assets/root/uitooltip.py index 61477f4a..b7672628 100644 --- a/assets/root/uitooltip.py +++ b/assets/root/uitooltip.py @@ -167,8 +167,9 @@ class ToolTip(ui.ThinBoard): def AlignHorizonalCenter(self): for child in self.childrenList: - (x, y)=child.GetLocalPosition() - child.SetPosition(self.toolTipWidth/2, y) + (x, y) = child.GetLocalPosition() + + child.SetPosition(self.toolTipWidth // 2, y) self.ResizeToolTip() @@ -177,13 +178,15 @@ class ToolTip(ui.ThinBoard): # MR-10: Fix element centering in tooltips if type(child).__name__ == "TextLine" and getattr(child, "_centerAlign", False): (x, y) = child.GetLocalPosition() - child.SetPosition(self.toolTipWidth / 2, y) + + child.SetPosition(self.toolTipWidth // 2, y) # MR-10: -- END OF -- Fix element centering in tooltips self.ResizeToolTip() def AutoAppendTextLine(self, text, color = FONT_COLOR, centerAlign = True): textLine = ui.TextLine() + textLine.SetParent(self) textLine.SetFontName(self.defFontName) textLine.SetPackedFontColor(color) @@ -197,7 +200,7 @@ class ToolTip(ui.ThinBoard): # MR-10: -- END OF -- Fix element centering in tooltips if centerAlign: - textLine.SetPosition(self.toolTipWidth/2, self.toolTipHeight) + textLine.SetPosition(self.toolTipWidth // 2, self.toolTipHeight) textLine.SetHorizontalAlignCenter() else: @@ -242,7 +245,7 @@ class ToolTip(ui.ThinBoard): if centerAlign: textLine.SetHorizontalAlignCenter() - textLine.SetPosition(self.toolTipWidth / 2, self.toolTipHeight) + textLine.SetPosition(self.toolTipWidth // 2, self.toolTipHeight) else: textLine.SetPosition(10, self.toolTipHeight) @@ -335,16 +338,16 @@ class ToolTip(ui.ThinBoard): else: y = mouseY - height - 30 - x = mouseX - width/2 + x = mouseX - width // 2 else: - x = self.xPos - width/2 + x = self.xPos - width // 2 y = self.yPos - height x = max(x, 0) y = max(y, 0) - x = min(x + width/2, wndMgr.GetScreenWidth() - width/2) - width/2 + x = min(x + width // 2, wndMgr.GetScreenWidth() - width // 2) - width // 2 y = min(y + self.GetHeight(), wndMgr.GetScreenHeight()) - self.GetHeight() parentWindow = self.GetParentProxy() @@ -356,7 +359,6 @@ class ToolTip(ui.ThinBoard): self.SetPosition(x, y) class ItemToolTip(ToolTip): - CHARACTER_NAMES = ( localeInfo.TOOLTIP_WARRIOR, localeInfo.TOOLTIP_ASSASSIN, @@ -503,6 +505,7 @@ class ItemToolTip(ToolTip): def __init__(self, *args, **kwargs): ToolTip.__init__(self, *args, **kwargs) + self.itemVnum = 0 self.metinSlot = [] self.isShopItem = False @@ -514,14 +517,19 @@ class ItemToolTip(ToolTip): self.wndDragonSoul = None self.dsActivatedTimeCache = {} # MR-10: Add accessorySocketTimeCache for real-time remaining time display of accessory sockets. + cache = getattr(app, "_accessorySocketTimeCache", None) + if cache is None: cache = getattr(player, "_accessorySocketTimeCache", None) if cache is None: cache = constInfo.ACCESSORY_SOCKET_TIME_CACHE + app._accessorySocketTimeCache = cache player._accessorySocketTimeCache = cache + constInfo.ACCESSORY_SOCKET_TIME_CACHE = cache + self.accessorySocketTimeCache = cache # MR-10: -- END OF -- Add accessorySocketTimeCache for real-time remaining time display of accessory sockets. self.hairIcon = None @@ -536,6 +544,38 @@ class ItemToolTip(ToolTip): def ClearDragonSoulTimeCache(self): self.dsActivatedTimeCache = {} + # MR-11: Fix Dragon stones timer auto-start + def WarmDragonSoulTimeCache(self, slotNumbers): + if not slotNumbers: + return + + now = app.GetGlobalTimeStamp() + + for slotNumber in slotNumbers: + itemVnum = player.GetItemIndex(slotNumber) + + if itemVnum == 0: + continue + + item.SelectItem(itemVnum) + + remainSec = None + + for i in range(item.LIMIT_MAX_NUM): + (limitType, limitValue) = item.GetLimit(i) + + if item.LIMIT_TIMER_BASED_ON_WEAR == limitType: + remainSec = player.GetItemMetinSocket(player.INVENTORY, slotNumber, 0) + + break + + if remainSec is None or remainSec <= 0: + continue + + key = (itemVnum, slotNumber) + self.dsActivatedTimeCache[key] = { "remainSec": remainSec, "endTime": now + remainSec } + # MR-11: -- END OF -- Fix Dragon stones timer auto-start + def SetCannotUseItemForceSetDisableColor(self, enable): self.bCannotUseItemForceSetDisableColor = enable @@ -593,6 +633,7 @@ class ItemToolTip(ToolTip): def AppendTextLineTime(self, endTime, getLimit): color = self.FONT_COLOR + if not self.CanEquip() and self.bCannotUseItemForceSetDisableColor: color = self.DISABLE_COLOR @@ -1075,7 +1116,7 @@ class ItemToolTip(ToolTip): ## Rod ## elif item.ITEM_TYPE_ROD == itemType: if 0 != metinSlot: - curLevel = item.GetValue(0) / 10 + curLevel = item.GetValue(0) // 10 curEXP = metinSlot[0] maxEXP = item.GetValue(2) self.__AppendLimitInformation() @@ -1085,7 +1126,7 @@ class ItemToolTip(ToolTip): elif item.ITEM_TYPE_PICK == itemType: if 0 != metinSlot: - curLevel = item.GetValue(0) / 10 + curLevel = item.GetValue(0) // 10 curEXP = metinSlot[0] maxEXP = item.GetValue(2) self.__AppendLimitInformation() @@ -1126,7 +1167,7 @@ class ItemToolTip(ToolTip): self.AppendTextLine(affectText, self.NORMAL_COLOR) if time > 0: - minute = (time / 60) + minute = (time // 60) second = (time % 60) timeString = localeInfo.TOOLTIP_POTION_TIME @@ -1227,9 +1268,9 @@ class ItemToolTip(ToolTip): self.AppendSpace(5) if localeMapName!="": - self.AppendTextLine(localeInfo.TOOLTIP_MEMORIZED_POSITION % (localeMapName, int(xPos-xBase)/100, int(yPos-yBase)/100), self.NORMAL_COLOR) + self.AppendTextLine(localeInfo.TOOLTIP_MEMORIZED_POSITION % (localeMapName, int(xPos-xBase) // 100, int(yPos-yBase) // 100), self.NORMAL_COLOR) else: - self.AppendTextLine(localeInfo.TOOLTIP_MEMORIZED_POSITION_ERROR % (int(xPos)/100, int(yPos)/100), self.NORMAL_COLOR) + self.AppendTextLine(localeInfo.TOOLTIP_MEMORIZED_POSITION_ERROR % (int(xPos) // 100, int(yPos) // 100), self.NORMAL_COLOR) dbg.TraceError("NOT_EXIST_IN_MINIMAP_ZONE_NAME_DICT: %s" % mapName) ##### @@ -1327,8 +1368,9 @@ class ItemToolTip(ToolTip): self.ShowToolTip() def __DragonSoulInfoString (self, dwVnum): - step = (dwVnum / 100) % 10 - refine = (dwVnum / 10) % 10 + step = (dwVnum // 100) % 10 + refine = (dwVnum // 10) % 10 + if 0 == step: return localeInfo.DRAGON_SOUL_STEP_LEVEL1 + " " + localeInfo.DRAGON_SOUL_STRENGTH(refine) elif 1 == step: @@ -1377,11 +1419,11 @@ class ItemToolTip(ToolTip): itemImage.Show() if self.__IsOldHair(itemVnum): - itemImage.LoadImage("d:/ymir work/item/quest/"+str(itemVnum)+".tga") + itemImage.LoadImage("d:/ymir work/item/quest/" + str(itemVnum) + ".tga") elif self.__IsNewHair3(itemVnum): itemImage.LoadImage("icon/hair/%d.sub" % (itemVnum)) elif self.__IsNewHair(itemVnum): # Use by linking to existing hair numbers. New items have numbers increased by 1000. - itemImage.LoadImage("d:/ymir work/item/quest/"+str(itemVnum-1000)+".tga") + itemImage.LoadImage("d:/ymir work/item/quest/" + str(itemVnum - 1000) + ".tga") elif self.__IsNewHair2(itemVnum): itemImage.LoadImage("icon/hair/%d.sub" % (itemVnum)) elif self.__IsCostumeHair(itemVnum): @@ -1389,7 +1431,7 @@ class ItemToolTip(ToolTip): # MR-10: Fix element centering in tooltips self.hairIcon = itemImage - xPos = max(0, (self.toolTipWidth - itemImage.GetWidth()) / 2) + xPos = max(0, (self.toolTipWidth - itemImage.GetWidth()) // 2) itemImage.SetPosition(xPos, self.toolTipHeight) # MR-10: -- END OF -- Fix element centering in tooltips @@ -1407,7 +1449,7 @@ class ItemToolTip(ToolTip): return (xPos, yPos) = self.hairIcon.GetLocalPosition() - xPos = max(0, (self.toolTipWidth - self.hairIcon.GetWidth()) / 2) + xPos = max(0, (self.toolTipWidth - self.hairIcon.GetWidth()) // 2) self.hairIcon.SetPosition(xPos, yPos) # MR-10: -- END OF -- Fix element centering in tooltips @@ -1658,21 +1700,22 @@ class ItemToolTip(ToolTip): self.AppendTextLine(localeInfo.TOOLTIP_POTION_PLUS_MOVING_SPEED % point, self.GetChangeTextLineColor(point)) if time > 0: - minute = (time / 60) + minute = (time // 60) second = (time % 60) timeString = localeInfo.TOOLTIP_POTION_TIME if minute > 0: - timeString += str(minute) + localeInfo.TOOLTIP_POTION_MIN + timeString += " " + str(minute) + localeInfo.TOOLTIP_POTION_MIN if second > 0: timeString += " " + str(second) + localeInfo.TOOLTIP_POTION_SEC self.AppendTextLine(timeString) def GetPriceColor(self, price): - if price>=constInfo.HIGH_PRICE: + if price >= constInfo.HIGH_PRICE: return self.HIGH_PRICE_COLOR - if price>=constInfo.MIDDLE_PRICE: + + if price >= constInfo.MIDDLE_PRICE: return self.MIDDLE_PRICE_COLOR else: return self.LOW_PRICE_COLOR @@ -1733,7 +1776,7 @@ class ItemToolTip(ToolTip): textLine = ui.TextLine() textLine.SetParent(self) textLine.SetFontName(self.defFontName) - textLine.SetPosition(self.toolTipWidth/2, self.toolTipHeight) + textLine.SetPosition(self.toolTipWidth // 2, self.toolTipHeight) textLine.SetHorizontalAlignCenter() textLine.SetPackedFontColor(self.NORMAL_COLOR) textLine.SetText(wearNames) @@ -1776,27 +1819,30 @@ class ItemToolTip(ToolTip): def __AppendAccessoryMetinSlotInfo(self, metinSlot, mtrlVnum): ACCESSORY_SOCKET_MAX_SIZE = 3 - cur=min(metinSlot[0], ACCESSORY_SOCKET_MAX_SIZE) - end=min(metinSlot[1], ACCESSORY_SOCKET_MAX_SIZE) + cur = min(metinSlot[0], ACCESSORY_SOCKET_MAX_SIZE) + end = min(metinSlot[1], ACCESSORY_SOCKET_MAX_SIZE) affectType1, affectValue1 = item.GetAffect(0) - affectList1=[0, max(1, affectValue1*10/100), max(2, affectValue1*20/100), max(3, affectValue1*40/100)] + affectList1=[0, max(1, affectValue1 * 10 // 100), max(2, affectValue1 * 20 // 100), max(3, affectValue1 * 40 // 100)] affectType2, affectValue2 = item.GetAffect(1) - affectList2=[0, max(1, affectValue2*10/100), max(2, affectValue2*20/100), max(3, affectValue2*40/100)] + affectList2 = [0, max(1, affectValue2 * 10 // 100), max(2, affectValue2 * 20 // 100), max(3, affectValue2 * 40 // 100)] + + mtrlPos = 0 + mtrlList = [mtrlVnum] * cur + [player.METIN_SOCKET_TYPE_SILVER] * (end-cur) - mtrlPos=0 - mtrlList=[mtrlVnum]*cur+[player.METIN_SOCKET_TYPE_SILVER]*(end-cur) for mtrl in mtrlList: - affectString1 = self.__GetAffectString(affectType1, affectList1[mtrlPos+1]-affectList1[mtrlPos]) - affectString2 = self.__GetAffectString(affectType2, affectList2[mtrlPos+1]-affectList2[mtrlPos]) + affectString1 = self.__GetAffectString(affectType1, affectList1[mtrlPos + 1] - affectList1[mtrlPos]) + affectString2 = self.__GetAffectString(affectType2, affectList2[mtrlPos + 1] - affectList2[mtrlPos]) leftTime = 0 - if cur == mtrlPos+1: - leftTime=metinSlot[2] + + if cur == mtrlPos + 1: + leftTime = metinSlot[2] self.__AppendMetinSlotInfo_AppendMetinSocketData(mtrlPos, mtrl, affectString1, affectString2, leftTime) - mtrlPos+=1 + + mtrlPos += 1 def __AppendMetinSlotInfo(self, metinSlot): if self.__AppendMetinSlotInfo_IsEmptySlotList(metinSlot): @@ -1964,6 +2010,7 @@ class ItemToolTip(ToolTip): def AppendUniqueItemLastTime(self, restMin): if restMin > 0: restSecond = restMin * 60 + self.AppendSpace(5) self.AppendTextLine(localeInfo.LEFT_TIME + " : " + localeInfo.RTSecondToDHMS(restSecond), self.NORMAL_COLOR) @@ -1972,7 +2019,7 @@ class ItemToolTip(ToolTip): self.AppendSpace(5) self.AppendTextLineTime(endTime, getLimit) - def AppendTextLineTime(self, endTime, getLimit, color=FONT_COLOR): + def AppendTextLineTime(self, endTime, getLimit, color = FONT_COLOR): leftSec = max(0, endTime - app.GetGlobalTimeStamp()) timeTextLine = ui.TextLine() @@ -1985,7 +2032,7 @@ class ItemToolTip(ToolTip): timeTextLine.SetOutline() timeTextLine.SetFeather(False) - timeTextLine.SetPosition(self.toolTipWidth / 2, self.toolTipHeight) + timeTextLine.SetPosition(self.toolTipWidth // 2, self.toolTipHeight) timeTextLine.SetHorizontalAlignCenter() timeTextLine.Show() @@ -2002,6 +2049,7 @@ class ItemToolTip(ToolTip): if remainSec <= 0: self.AppendSpace(5) self.AppendTextLine(localeInfo.CANNOT_USE, self.DISABLE_COLOR) + return isTimerActive = self.__IsTimerBasedOnWearActive() @@ -2009,9 +2057,11 @@ class ItemToolTip(ToolTip): if not isTimerActive: self.AppendSpace(5) self.AppendTextLine(localeInfo.LEFT_TIME + ": " + localeInfo.RTSecondToDHMS(remainSec), self.NORMAL_COLOR) + return endTime = self.__GetOrCreateCachedEndTime(remainSec) + self.AppendMallItemLastTime(endTime, getLimit) def __IsTimerBasedOnWearActive(self): @@ -2067,7 +2117,8 @@ class ItemToolTip(ToolTip): (limitType, limitValue) = item.GetLimit(limitIndex) endTime = limitValue - self.AppendUniqueItemLastTime(endTime / 60) + self.AppendUniqueItemLastTime(endTime // 60) + return endTime += app.GetGlobalTimeStamp() @@ -2334,17 +2385,20 @@ class SkillToolTip(ToolTip): conditionDataCount = skill.GetSkillConditionDescriptionCount(skillIndex) if conditionDataCount > 0: self.AppendSpace(5) + for i in range(conditionDataCount): self.AppendTextLine(skill.GetSkillConditionDescription(skillIndex, i), self.CONDITION_COLOR) def AppendGuildSkillData(self, skillIndex, skillLevel): skillMaxLevel = 7 skillCurrentPercentage = float(skillLevel) / float(skillMaxLevel) - skillNextPercentage = float(skillLevel+1) / float(skillMaxLevel) + skillNextPercentage = float(skillLevel + 1) / float(skillMaxLevel) + ## Current Level if skillLevel > 0: if self.HasSkillLevelDescription(skillIndex, skillLevel): self.AppendSpace(5) + if skillLevel == skillMaxLevel: self.AppendTextLine(localeInfo.TOOLTIP_SKILL_LEVEL_MASTER % (skillLevel), self.NORMAL_COLOR) else: @@ -2357,6 +2411,7 @@ class SkillToolTip(ToolTip): ## Cooltime coolTime = skill.GetSkillCoolTime(skillIndex, skillCurrentPercentage) + if coolTime > 0: self.AppendTextLine(localeInfo.TOOLTIP_SKILL_COOL_TIME + str(coolTime), self.ENABLE_COLOR) @@ -2569,23 +2624,24 @@ class SkillToolTip(ToolTip): slotIndex = player.GetSkillSlotIndex(skillIndex) skillPower = player.GetSkillCurrentEfficientPercentage(slotIndex) k = player.GetSkillLevel(skillIndex) / 100.0 + self.AppendSpace(5) self.AutoAppendTextLine(localeInfo.TOOLTIP_PARTY_SKILL_LEVEL % skillLevel, self.NORMAL_COLOR) - if skillLevel>=10: + if skillLevel >= 10: self.AutoAppendTextLine(localeInfo.PARTY_SKILL_ATTACKER % chop( 10 + 60 * k )) - if skillLevel>=20: + if skillLevel >= 20: self.AutoAppendTextLine(localeInfo.PARTY_SKILL_BERSERKER % chop(1 + 5 * k)) self.AutoAppendTextLine(localeInfo.PARTY_SKILL_TANKER % chop(50 + 1450 * k)) - if skillLevel>=25: + if skillLevel >= 25: self.AutoAppendTextLine(localeInfo.PARTY_SKILL_BUFFER % chop(5 + 45 * k )) - if skillLevel>=35: + if skillLevel >= 35: self.AutoAppendTextLine(localeInfo.PARTY_SKILL_SKILL_MASTER % chop(25 + 600 * k )) - if skillLevel>=40: + if skillLevel >= 40: self.AutoAppendTextLine(localeInfo.PARTY_SKILL_DEFENDER % chop( 5 + 30 * k )) self.AlignHorizonalCenter()