From c484ba8be8ed28f6aed1a9af477413eae6c1e734 Mon Sep 17 00:00:00 2001 From: Bread Grocery Date: Sun, 18 Jan 2026 18:51:44 +0800 Subject: [PATCH] =?UTF-8?q?chore(js):=20=E6=9B=B4=E6=96=B0=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E8=B5=84=E6=BA=90=E9=80=82=E5=BA=94=E9=AB=98=E5=88=86?= =?UTF-8?q?=E8=BE=A8=E7=8E=87=20(#2721)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/UI_BtnIcon_Beyond_Hall.png | Bin 11006 -> 1089 bytes .../assets/UI_BtnIcon_Beyond_Recommend.png | Bin 16077 -> 0 bytes .../assets/UI_BtnIcon_Close.png | Bin 5952 -> 1102 bytes .../assets/UI_BtnIcon_ElementView.png | Bin 847 -> 1237 bytes .../assets/UI_Icon_Leave.png | Bin 6578 -> 5603 bytes .../assets/UI_Icon_Leave_Right.png | Bin 1031 -> 813 bytes .../libs/@bettergi+utils.js | 84 ++++++++---------- .../libs/constants/regions.js | 23 ++--- .../libs/modules/lobby.js | 5 +- .../libs/modules/reawrd.js | 45 +++++----- .../libs/modules/stage.js | 6 +- .../MiliastraExperiencePlayback/manifest.json | 4 +- 12 files changed, 77 insertions(+), 90 deletions(-) delete mode 100644 repo/js/MiliastraExperiencePlayback/assets/UI_BtnIcon_Beyond_Recommend.png diff --git a/repo/js/MiliastraExperiencePlayback/assets/UI_BtnIcon_Beyond_Hall.png b/repo/js/MiliastraExperiencePlayback/assets/UI_BtnIcon_Beyond_Hall.png index 0e9d0b73f5c40ae25bb92b3fa28c29526752b1fc..67b127c1b94347b4737801344143c5b69088aa99 100644 GIT binary patch literal 1089 zcmV-H1it%;P)MAerTUU;bbP#!Ds zBl=tVEBF&sRi#!!s6_z;DhX;JNQ4m5qC!5%w!t>e+PgDz`>_7l-C5g%y#ads;N6+C zGw0sBbLY+il;3ap;a}9j?tU%DkwFXu!kF+5>X<1_g0WEc|eNfS1z^57%FiemA=MVtel(Tj=uIbE?+;_p2@it%>|*K(|(+1<3qX zNW7g^IAh?P0|2zviR92}@7;dij&2_P@%jq1)=)}Cooykcse2s<1JF&t z6kT!7!5M>Y-!ldfQH-4)C*2qQ3&G(!0$?0J{kn=P-+u?E^T@Z~d>IMV)Sf%J4=9!N zFk=8qXZW1qIu0IfdH~Q9TCMvaGDGe-9H5@4b^xF?b;Wo3Tt_6Hl}bVDq`^W&uaIcJ zN~%2{5hb`EA9E3eArwWtT(;160Vmy1Ycv5w77`I!fx^jha<9H|?+Ly*SApwB9%PI` zD#CPeBEh@4vWfGbe*(^<2xv`c1tCtBPb7E`p1j1_)8+2G0E6EQ6E%V%^u?|R5Fll= z;VM6adxo`O#~qvEH2Ds@^0PV zz?sEafC!v3oSMt#Ew621zFdUXgivan`*b1EZ+O%Z9HprVl%^)qT?x1a7mJnIfgAuR zmnKn}&o(xWx$+5|u0%#OTcOd<(+z>t1}O_+sH}LMq&*DrY@^9s--b}z6p+rV{ooxm ztax(Bc!p4E=~1cecuL!u9(Q7TvjMU^N_GM=#_B_~(sXWU_fm$ONIGjJpp*)S ze&m>`2{&dIfwuRnI5jslo|-WcFPPGfVPKKa4}IaUJ>A8BYnkq{&!{n+00000NkvXX Hu0mjfoN@VM literal 11006 zcmeHNeQZ}UM! zXUAlrL>1Sv@7KBKp5Hy^o_p?1{f?4kT1ut!v?=?`(_S7=KO8r zubv~M@Em@*Ki3z|gvOfRG(NGBkp1%r`Q0A~i7?0q2-&-okin-2S@Bmw%61?9b=!JE z>i)Q4-I`zSry7t3Z1Ia)(9na5ir6#f=A4@%6-h^Fhc8+XodbPB;)~itTC7h=nrc8Qh^O%y zKkOgz_w0!7;GZsjdS30U+Ip0>eZ2j1P1`mpBJ!{JsS1w+dbvEem2p$X@$f3$Zj~pV0NZWAR zw`b+Eovof$8t?>gtO(%jNCU|L7_a5=I~hPR&_+;-Nkhx~m-j#Ke!gstcTK&w(2Fa4 z$7!W+W%Ww3vU-=gOF1)m=9^byuMB+d|GZqasbvYR-I0v>5Tkif*c%aE<%ddwC4JA1 zKWp3O+g4jSt8$*iOLx4AR;b;g+tF0kv}iNkJik}z9X)pA*p=h%<0Rk>%qP6AG1M9l z-<)Qc3lN%B6rhA%va6?Iv|;oG+Y1$|i&i%{eNG95;t7uvOliUes&Uo$UUa?q$o|-V z<^7xQUu)G`hc0+86e~_;7QjK1#rZAgwgM!BHkcHVy30q(1JBTBTw9B`)>f5Q74saQ zb9JT^88Gum9>>-Pw$?YXCe}6H6*$#*>e?~>n9^6$SFTA~Ie9#0b<(*ww-S- zYOb#?uh!jd>VSJu#)X{go?CjreW3IJIY2%c`K0rW$Q$QR%sA1IE>9*PaKA5=yi^DK zMHo>=WE@~y~2?!Jd2VHr+Qs23yYRivtKwbdSIp2l4#^K5`<_ftkj0t1&VTug-Ga3vz zItn_RFAu$Zo>EF8a>QuXbFba2yJ|s*du&a^@QskL8m6);Q`87}K)uap_nGDxR0d;u zN8-mO*f_gj=W&ExwCmcFW3p}mAtj`1mGN;~Z}2u0wrlNUa*^zX;dqP3WU?01WbyvE zslcgSzsIvjc8|Kd*WOyII5{U5jYUa_h3If}m|m>7=#3OaD$vt#DmPwxy|!mYbOx!> zYD9qvT#yE7Ki{u?QTfFz(6|%m1lX6s6`dNc}&%_%0t*MG%<#XvRlBn(dlhl1hi=!cgJ)U_lU1eY+#(==*HZ zXC_`q^OgM7HxKg<7XXbHzG_*ltg~%i+iL7fO?!s-v>oOSBbcn$5GxI(@{m4oeBge! z@7+$f;FcnhxapnY&h)}rfRS?CuHdj+C9nGT;ai7GovPEOI}&gL$I0>D@tNZ_AS5ml z7j}lr8+#hh?iP2?f{2_4ZE&JZWV^UsJs_g782q4pu<&5-!7m@BkCvhT5qN>)Z9ILg z;58d?(hv1iAydn_0HLr#$Qh~(g+ezUD|>9N;T(>1AL&+H3I>t}Ajgg38?`mT8f}St zNd-=TLhKygIYdQ@bzKO!E|i`tI_Ey^K3$ELiu^jl9Ya?gS7(BtMnK9#M6lpJ?Y)2O zpSizMqZ)HbF6o`2cdm>&NAZOV_l{}bKs}jq0ZI}X1>EddE+)lsAVx9))6|4XzzBoctzkUg||>AsX>^g{>m5;CCWGc$)BGF07``CUd$M z$_PrMENYU9a&adGV~rJM;Cguki<=#jN>!3rr&L+^adF%jqtgYnfDE!^bp|>S{G>85 z+S2p5lSpYzj~I+D5H2YMo);j1zITj%$T`YWLGMdxj7m}5kER5`(cv*PO;g7Nm3#mZ zg(~_|8@$G(F|0@7n;IDMF%mOr2!zTI23)SmTxBLlVS&==K-DHzMA38^GOWUo$;k5p zWDwttJY8G=?;Mi?l)ie|gn+m$TUWB3LSO|OKc_23Vye=(0VhXV7bXSBn$`4Zy$@)5 z=pnll`DlnqOfq?E$Al9(u1t_maljKQdAx%n?as5bX z%Bz?cpga#Z%TOmx3MOe%#0a5M`qE*-X{vvc8n+6gQpP8X`2b=z-j-yHBf+$i3{naV zuiGhg0>Nl%RWEaic*xX2;S@F7faFm`j%BJs{;)rO(0vejSN#a zJYEy9Ej^{uV4ub`Q}ByzNMo2Lmhto9(1+I^_dI?T7IXoSSc1w0h^`K<9(nMA2N%HO zNHX*_faL;(0!@?*J`>SlzX9kW-$Nzy`{rM`Ty+_ruq=}mAY82&yu4hCjmNmRzJ03` zRBgE$mK^hJOkEHFr;kbp38rh(FqJ6vGB1PIqwf+|d)%YO{?vI`0fJi?H+m{~O58Mi z(@*o1@2-#;01eZ_Np`~L+x^?|g$Qr3rep;uy1sw?m5mh}e*znOV)trdH{}(} z`M3DDENl)mw_Pf|g#S1+!P_=CtxN7p(%#;^UnVRetCV(XH>ukoL=%eg(Tt6b{pn-i zR?AfG_SN0sktKA>r*k~D$tYbb3&rd<^dF2?+S`^(Aaojx(z?y MwC?Xed+PW910CAAx&QzG diff --git a/repo/js/MiliastraExperiencePlayback/assets/UI_BtnIcon_Beyond_Recommend.png b/repo/js/MiliastraExperiencePlayback/assets/UI_BtnIcon_Beyond_Recommend.png deleted file mode 100644 index 1aa058e64bd700dd737741d19fa94c1ccfb55ce5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16077 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 diff --git a/repo/js/MiliastraExperiencePlayback/assets/UI_BtnIcon_ElementView.png b/repo/js/MiliastraExperiencePlayback/assets/UI_BtnIcon_ElementView.png index d04d7d7fed1f1655f2b635e83d7576922bdfb44d..2e1bb00d1f7f3ed357c92626d2b48f6db13aecff 100644 GIT binary patch delta 1232 zcmV;>1TXu~2Gt26iBL{Q4GJ0x0000DNk~Le0000o0000n2nGNE0GO-#ACVy!e*}j~ zL_t(&f!$i&SK?L>9|($D-Jb0#N9$>ydQKnu|G#hBUDp+Lp{wblf}a=zf*>Rz$^Do< zD3L%u?hRZYI`c%5ncw{}cV=$xO%4zc{s)qO4G`D!lw&9-!Z?FsaT%I-Eu}b0iPSHy zA)kMOC~f?t5()rNoleV#Mr0RXVFQUnBq z&O>jWp=6JUVYcDttkkppFz>}jC;DLjaTp8O ze;j6RWT%bGL^2B{@@cOU3sm`5%S>WYE!&Co@A>}Xi1_~O6c`Mxg%Frj##kho-EuY6 zHZ|GJ`wncD)Ps*Ul|F2r#|xc=R+Wr2G=xA zq)Q}(ORv>KAvW6`si|^yevLjM=o5msMoY@}!^d){s@->b$redBUC*Cz^dLM4z1BcN zDKf@q=6m;{FYM>As*6`J5h5~)t=H-S0m@h;85w`Q{vfd1`BIT5e`47VGRDNq-?Jhj z`aVI+c4qEf-Wb847-Q08IOlj!(Zz`9wFWZAkTHfs%a$V1G)zQ9^t^cT-%rlPrplC_ z)Gv|Jr}FH&UNVu%f2(gDAnIKR5d-V1Ws-YL>#cfShj>+gc!`(KY?E9i3( ztXaw*Q_qLd*JQ%33XT8P7Ni z_HO|I2&J%GSW;1x0=Y3v*xo9IaMN~IQrE}dPcK5hmkI@?#{}J8AAZ^143Tg~u7IUL zm~Ce?GuJ6)e^@>^lA125IQA?K=UmKM6eJ3OF`oXOAfSg;J?LH2B3v;=!8+YuB+xiI zb;)ENYaD^G2z!zNeH>VcprYW$T|3nWr3^psCA@!3sq{{xC}V=#HSxkZ z2gAIFU$?h1`V6-~0y}6+j<5h^fhWrO25yVc_%fp8N0000s~`~kaOle7zbCyh`G_xOr#%LQe;DB7G8}Vo zwo9_t8j|5Oc#qz7-;3%Dh!mlehSsn9YURw2wzW6wiCV?P3}Xxg0_NA}Q_uegDYml) zVTGBtAP^7{6cnsBFyB|xIhzRt#O3Y9w2x)UUK18Z5EF}t!CtP{ixW=3ai zu_7NlwAKiLaJ}@a2YDzh_g2ZCBu#`EVXdhewM=Ywxi}Cri1|qve|rolMV9OO-n}GI z4%S%2ND#=W6?+StUF`f{-Usxqu5OIp0}%9X8Cp3^bKJ)vw~gO4VlD`HgqX9(*sBEZ zdUHl>hSPh|>#S`)s(*yxpJUzbLv~L#C*Fnhy+fq(Hn|jExBDU}MC7F&q);>{SQ9P+ zn93d~h0%|2EBQ8#e;$`UpHGLU9VOSt6h`kiJA_g;s~Yl@EGdat7O1k1Lc;p*v^!-uCT~yI4*Mft0ec@8bEj5lW<>A0XIPEn5B){K1c7{D9T5Hhr$T=RegmIJfF)eJ RA2R>|002ovPDHLkV1m2Degpsj diff --git a/repo/js/MiliastraExperiencePlayback/assets/UI_Icon_Leave.png b/repo/js/MiliastraExperiencePlayback/assets/UI_Icon_Leave.png index 176894ec0e3ebde7abf15ad636c76431a724ab8e..8aa3793dcaa3e390023b8cc4bae74f055fbdb6b1 100644 GIT binary patch literal 5603 zcmV<96&&h`P)StO&>uS)ve<0AYj>5AR{$W90N^4L=L-RlQUJ&DC0@ZjPh;=*jPLSYvv5M~MFBAl0-BNIsH z15C~g000{K(ZT*WKal6<?_01!^k@7iDG<<3=fuAC~28EsPoqkpK{9G%|Vj005J}`Hw&=0RYXHq~ibpyyzHQsFW8>#s~laM4*8xut5h5 z!4#~(4xGUqyucR%VFpA%3?#rj5JCpzfE)^;7?wd9RKPme1hudO8lVxH;SjXJF*pt9 z;1XPc>u?taU>Kgl7`%oF1VP9M6Ja4bh!J9r*dopd7nzO(B4J20l7OTj>4+3jBE`sZ zqynizYLQ(?Bl0bB6giDtK>Co|$RIL`{EECsF_eL_Q3KQhbwIhO9~z3rpmWi5G!I>X zmZEFX8nhlgfVQHi(M#xcbO3#dj$?q)F%D*o*1Pf{>6$SWH+$s3q(pv=X`qR|$iJF~TPzlc-O$C3+J1 z#CT#lv5;6stS0Uu9wDA3UMCI{Uz12A4#|?_P6{CkNG+sOq(0IRX`DyT~9-sA|ffUF>wk++Z!kWZ5P$;0Hg6gtI-;!FvmBvPc55=u2?Kjj3apE5$3psG>L zsh-pbs)#zDT1jo7c2F-(3)vyY4>O^>2$gY-Gd%Qm(Z8e zYv>2*=jns=cMJ`N4THx>VkjAF8G9M07`GWOnM|ey)0dgZR4~^v8<}UA514ONSSt1^ zd=-((5|uiYR+WC0=c-gyb5%dpd8!Lkt5pxHURHgkMpd&=fR^vEcAI*_=wwAG2sV%zY%w@v@XU~7=xdm1xY6*0;iwVIXu6TaXrs|dqbIl~ z?uTdNHFy_3W~^@g_pF#!K2~{F^;XxcN!DEJEbDF7 zS8PxlSDOr*I-AS3sI8l=#CDr)-xT5$k15hA^;2%zG3@;83hbKf2JJcaVfH2VZT8O{ z%p4LO);n}Nd~$Sk%yw*Wyz8XlG{dRHsl(}4XB%gsbDi@w7p6;)%MzD%mlsoQr;4X; zpL)xc%+^yMd)ZNTI#eJ*$O)i@o$z8)e??LqN_gLa_%;TM>o2SC_ zkmoO6c3xRt`@J4dvz#WL)-Y|z+r(Soy~}%GIzByR`p)SCKE^%*pL(B%zNWq+-#xw~ ze%5}Oeh2)X`#bu}{g3#+;d$~F@lFL`0l@*~0lk45fwKc^10MvL1f>Tx1&sx}1}_Xg z6+#RN4Ot&@lW)Km@*DYMGu&q^n$Z=?2%QyL8~QNJCQKgI5srq>2;UHXZ>IT7>CCnW zh~P(Th`1kV8JQRPeH1AwGO8}>QM6NZadh`A)~w`N`)9q5@sFvDxjWlxwsLl7tZHmh zY-8-3xPZ8-xPf?w_(k!T5_A(J3GIpG#Ms0=iQ{tu=WLoYoaCBRmULsT<=mpV7v|~C z%bs^USv6UZd^m-e5|^?+<%1wXP%juy<)>~<9TW0|n}ttBzM_qyQL(qUN<5P0omQ3h zINdvaL;7fjPeygdGYL;pD|wL_lDQ-EO;$wK-mK5raoH_7l$?~Dqf!lNmb5F^Ft;eT zPi8AClMUo~=55LwlZVRpxOiFd;3B_8yA~shQx|tGF!j;$toK>JuS&gYLDkTP@C~gS@r~shUu{a>bfJ1` z^^VQ7&C1OKHDNXFTgC{M|V%fo{xK_dk6MK@9S!GZ*1JJzrV5xZBjOk z9!NTH<(q(S+MDf~ceQX@Dh|Ry<-sT4rhI$jQ0Sq~!`#Eo-%($2E^vo}is5J@NVEf|KK?WT&2;PCq@=ncR8z zO#GQ^T~S@VXG71PKNocFOt)Y6$@AXlk6rM*aP%VgV%sIRORYVwJx6|U{ozQjTW{-S z_si{9Jg#)~P3t?+@6&(!YQWWV*Z9{iU7vZq@5byKw{9lg9JnRA_4s!7?H6|n?o8ZW zdXIRo{Jz@#>IeD{>VLHUv1Pz*;P_y`V9&!@5AO~Mho1hF|I>%z(nrik)gwkDjgOrl z9~%uCz4Bzvli{bbrxVZ0epdf^>vOB;-~HnIOV3#R*zgPai_gEVd8zYq@2jb=I>#f& zAH2?aJ@Kaet(-8X9{lVq|&i~$#*3Kao2wlpGw=s^** zRMY|qCy+yxAS0Ou5Kz#h zX``fbdh1MfMetW67iG@=S*Tc)qc09MbE*3(XZ_iaYhLdGr>Q-{89rfc~8a-=)7V7?w*o*o?~fid#!K7 ziI>epCS3{XNxWmy^;gS>r+AK~Jjc@Y+?oR_LEW4bQV~clu+G0ovZ<}ct?_Fu!$OV` zRBaWfzOnHfOE=nHtQpfawhR=~un-FqlQXk+E%!_n&#|-H>q$TGU-@kU9dkyFum7QlN565fQGGZ+1tf)EL~##Wf_r}vzL=t znD~mgnWa3((i3eJgU?_bBi2>X^e-FFv2>+%c?FS(^(P`05+Ove^>nRI>(d{LYWoF- z(Xo#G-QgE9SKPdn*-`s)&Km`kk*|!@P8-y*M!(TZ>?;+Vu; zJp2o|duu--Zxy=)Z*bI=H~Au;Zeom4A$L_7ceY;KY2SJ@#hYr5)^36A!Toi#u9+r? zI$GCk@EYrs%pZ}M^Xs`a2Y8O9Pc=Ldd3i>CTqgGaHh*p9IhNjLyR9@TmNUD0cTY)uQ+thD?=cJ ztfo-$0CKPOuFnSu_Nl96D7;4{f>m9sD=Q4;8M|`+R*>b&sZpw@ETbv|AXra-bJ0Hx z2s6yjC>k3G3OHvvpVTXVBoued-oIkRvck!jd@TS3Rl#1Rx_o-iXeZ~xt!WbqK;ZyE zMxU8uMAc~kaJYR4X#LqkF?=vA>3FpK?Gc+U5|bsGDRVub{0&!=oC0|1jFn+5vK zT)zFvGXSo7-Sl1sW#rqGn;si=sB6Ip6oiNY07D2CX5W{)5cjo2d+zK3LQvIN|1nG2=7r>g!O(`^RYkz(w52i-?8c4Sv(XyR+|#NGu-sCBGP}-mCViL4cXM zDOUjfmgOj#uLl4R<5kjkOw^&S1)0cJN-Q4u)d3v{#Tdh=EFi+G000CcCAHHWXI>33 z__7-+2n8ho0-_)R{mAv8R|EhJO>Q8%JH2yiyYGzG40BXxkqoG1jRXK4!Cn{8kDQBm zMF2>bjY;o#VaokC)Vq#5hLfOH(h2}zlXwr%k6caKkstsVU>KI<$YW{CrtIqeqC+V` zx9p9%U(!UQC{tjsRB8qKITT*ct04iIB!dBk2L!1~jEI#udMoF(>0GC^d`;f71NNX9 z=9V-5vtC~46~fi1p<)2wL-)2`jKuh8y7R{xevw;gGVW(?GRGr~DmNqsXrilbv zm0Woi*%l87P5j0A$&n%44BRWYrRCjLmYVpS>H)U`StS()s4STb2IvI6Gw~UVA7735 zy!Zk8Vr%#kT}_@-oUbDwo>%>AizpcMW^_*gBD@OT>)mlw#V{D>96PM!0H7_qx#&*k z+^%x5qR|XoXFVkZ9fiKXl;^`+>S8RiyI7AXMuX`s(x zSCj?nlLN9fX!XA${UN}a&P^W*F^!--xzoKlFw-?{;?+4*kNOSXN#R5y%H+0NN_mc@ zYq`}`L?-rFZn#>C9=DWbdB86`ZduSXs&Xjqe-*c~g6CMers27R=ohz)6;AiQHKrX1~GAM1pyepx$Q~Fgh_risPq9RD!BymG$uoo@413CwH`h!qcx! z02D$z$w$vN_WeelW9eGkvsGHZu0g3$afm!v3r19(dDQw)8PBowyOyucg$H4O6dx!A zP{fy6B{H#BoVt*JeA)Wj0}0Mxydn(NLM>>TR&tM3@El7IwS8}oka!IA(Gz#qGI~Q9 z*3F$859RX(RY@c!VUSr%b7vfWv*Y)*Jjc>Qr+={PJqB}x!Rfoy6EZ=Db0@p4*>1Ja z-907szvdn;OZeN6NLnd^F>2j6cid9C!@k+fb1Xg3^lewFGwpDM!5JtDjPcBCx~Htc zTI1w73*Bg2Ut@A*)}rsG9(3;vY8Zu(;!QO#w=OB?ISaLQoTBR**B)X7Ra@Me6_BH# zpgH!Dm0z6vv^A6wTFyOEp6Sf4`SF8*M97KZ|ABa!uWLN;z{A%M8~D>zu_yJ-b~$MwG zie!`P1Fc_we1s#Pzt(*X%@cD}1=0vzuAHfLFmA!hbOt-scCjh7nRcXcMvu{TJpjcw x@kkg}a!JCE=fuRJ=%LGmATAJ-0pe1k;D2iu9F#1$eEa|a002ovPDHLkV1nH;y4C;y literal 6578 zcmeI0Ur19?9LK-YP3OdcX^GB1K}`iAdMLHIv{Fk!MXZ+)QRpp*f(RoN|Gp&ALl8s{ zz6ko(o1za|_-7!E=q((9|1jx~jUrLEw)H#0o!4D=w)YI_xygp zv!~5XH_}WwCID&mbu}$i7qiQlME{@pC+|^}@}TbaL%=-GF5Sx#vxPcO->GY91fE!d z-T`1QK=oJP(Rtuo2Vi>zWZi$!zHlALF0Ze-dh4+c#o3>}=na|JaRgdjb*?1OYiUlj}oY z1p&$tJ2aLH*on>yO5ucA+;IP*cDiscx8?#GVKj;rZeh#4i(L;bowz$}dk=fwGL-$K z0kHuLojDJAKX$NlhWevfav=b)K%%&CEf}iR1CN>dqJd+gx=?u~_p$($OrTaK7J&Op zn~GG|IL3V@m<**Tr5r(7i3wm5k~Um$rRN~$lrpRXDa`>3Q1IRfr!@l^ig)e-9-tK< zTUH;r6vr%P%gKT)J&d*pyPb`fY%Hw+(T2A9VGP^#&`Wf#VU2RrqYI^@0TvQl(fZi| zM`h?JiL%fE5$>7C_E1Q4_M-PnxUu9vxpAC9&R`~k0)s?_DnJT@?nz8;)}q!f(JZ5b zk`i4ql9P`TQ3W`Ksm*FsmmH;7t3FkL6j`DR$|`780XCx1GKaY(8*J=o7n7n2kapjR z3RI+0&N$bPe#J>Cdo#+CcBzu=5>mU~Md8`EOh%3q-0T_mf+QLe~T)wkYjl%Y8QZ1~MC( zTaW=VhHY#YRY|{jnRwb|GqNX+RzQ{oDUJF~ho+OHJnTm;nwXnLiN!o+0w iF`!zr#=Qk8ZUzE(U%ySc`FzUD-nPEBspieKj{bkON#Xhc diff --git a/repo/js/MiliastraExperiencePlayback/assets/UI_Icon_Leave_Right.png b/repo/js/MiliastraExperiencePlayback/assets/UI_Icon_Leave_Right.png index 849e5ffd89dd2bfafbcf128aadf201ff7e36f61c..ed914635f2f2368d2baab1e4f461adc0263fba93 100644 GIT binary patch literal 813 zcmV+|1JeA7P)=m1dNP~%a_l-apU&?|NohpnJp|#u?962Y+_(wkd>8|m6gV?24Cor3f{bV z>+BpbYt|x~+jQyD)i-b6O`STYs;cEb4A8`;KY#v07+bgQDk`e^^yxFQEH!OH2K)9M z&deXSA}3fq~)b)f=&~8E@adhj2+wdq02vI(hQUj~_oVr7m5%h9+|J=AH2H z35tjaO`Aq~ieO-1 zU}tBux3?xzv8t-lj2XSc!a@wxDq*n#b#>Lni>I@(K|`BXDZ<*?eAcW!Ha1pxeN9b2 z!RtV8Z@1RgYIIpD+N7(iB`7Em8tR{&os7jDRJ2J{ROG;cO}J#KW7FfuPvNz@rKKqs z7bi_@`v3obWMt~+&tD+i{{9w6M_ba`MsUpp0kTSXeTW7SenPH^Az<#@B}`0A1Y4HZ zuirxE;!=z+^qxL_-q6sAM*&FyCG_OwWhpmNR#qA_c>e!qVEXqDA*!mX6d4)B!a`;; rVPRp3j0{p!Q^vIB+xI{8>!|?%c6ciQp-V-g00000NkvXXu0mjfW-5gB literal 1031 zcmV+i1o-=jP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1Dr`jK~z{r#h6)4 z6Hyd~|F+W+1Z1fs%Ho4kO^lDYHE{`wCPW|5L=y!SFs_(r0C7dZxUfW{D8xjJ0veYn z4<`6fBp8iL#3!R5s1JfX35sB+?Mz$ePH%;ljyQE%zoeOS&dl8V-+NBy&K=EGgpVp#F037r5B zR+|&wzT2f4pB%?RW3%%vr_+fSFWOO6S&g2aFZ9yDNKQ^fVbLBeSdc1qLZ?~donDfP z@8V48$qZO+ysN6J8u#x#fFKC;l7E9?7_3>l8ij@VQs=$`NIE#H1A~J+v>!fv!kybq zs&!5vZIL#+yFb#1H$+c(m=2MV478s=_t3EV^!D_P8NCM*o;XnlP4mMR*MZ_v8g`SA zFa>#e*$590ldhC&WHcQe?@@pK7WLeemmkNnO;d>v$=%^)+UjczYM%mDKS(36cv_WXlR&5ya|c`U)tK9B0qn>xGeKyW+Eg42=Cr@V$0@T z7#R3QBW@Ua{A=uXJ6^tg4V%qIBV!>o;E%4ZkJz|j8>%l>z-XK<#S{r3Q}_JYD-;wQ zp%LYfe@Jf5Zq(IPW9Fyh}ZA42HPCi;%#wEEX>|QBN5uDbsQBQiUYKL&$1? zRD69ytykxSkO(lD=Aovh3VOX>O5^AyIw%5kx{()=jEr=#;LadAdJ>Iz6BGe+=FCQH zYz($;-Gs6ehklQG^vFE~ML>MK0p^w_?AVz@Bl4&!ptrXVk6IqXY;Hqq>l0Wk96ckC zY68epEjw#Fii?lq;DJ)?FDelit#+@a*B^cb$h|y_hwpuYF!Ev|hyRU9;#B12W+~d3 zyzlJBwQD!2=O*BdiCT;&z~K}ZqiNHUsjEIo$qBMGK*AP_16uNYUbj9|+ES|pX^XUJ zG|r$AZ=}vS0mH+>|NTJ0=*0T^U!Q1*rg*~y`~s*{Z+Q_7y>0*i002ovPDHLkV1nDy B&A9*o diff --git a/repo/js/MiliastraExperiencePlayback/libs/@bettergi+utils.js b/repo/js/MiliastraExperiencePlayback/libs/@bettergi+utils.js index 84122da2a..e0fc7e84a 100644 --- a/repo/js/MiliastraExperiencePlayback/libs/@bettergi+utils.js +++ b/repo/js/MiliastraExperiencePlayback/libs/@bettergi+utils.js @@ -1,6 +1,6 @@ import { __name } from "./rolldown-runtime.js"; -//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/workflow.js +//#region node_modules/@bettergi/utils/dist/workflow.js /** 默认最大重试次数 */ const defaultMaxAttempts = 5; /** 默认重试间隔(毫秒) */ @@ -61,7 +61,7 @@ const waitForRegionDisappear = async (regionProvider, retryAction, options) => { }; //#endregion -//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/asserts.js +//#region node_modules/@bettergi/utils/dist/asserts.js /** * 断言某个区域即将出现,否则抛出异常 * @param regionProvider 返回区域的函数 @@ -85,7 +85,7 @@ const assertRegionDisappearing = async (regionProvider, message, retryAction, op }; //#endregion -//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/exception.js +//#region node_modules/@bettergi/utils/dist/exception.js /** * 获取错误信息字符串 * @param err 异常对象 @@ -104,7 +104,7 @@ const isHostException = (err) => { }; //#endregion -//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/mouse.js +//#region node_modules/@bettergi/utils/dist/mouse.js /** 使用回放脚本模拟滚动 */ const simulateScroll = async (wheelDelta, times) => { const script = { @@ -144,7 +144,10 @@ const mouseScrollDownLines = (lines, lineHeight = 175) => { }; //#endregion -//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/ocr.js +//#region node_modules/@bettergi/utils/dist/ocr.js +const scaleTo1080P = (n) => { + return genshin.scaleTo1080PRatio <= 1 ? n : Math.floor(n / genshin.scaleTo1080PRatio); +}; /** * 在指定区域内搜索图片 * @param image 图片路径 或 图片Mat @@ -223,31 +226,30 @@ const findTextWithinBounds = (text, x, y, w, h, options, config = {}) => { * @param condition 查找条件 * @param listView 列表视图参数 * @param retryOptions 重试选项 - * @param sampling 区域采样函数,通过采样区域画面变化判断列表是否触底(默认:底半区) - * @param threshold 采样区域匹配阈值(默认:0.9) + * @param threshold 列表视图变化匹配阈值(默认:0.9) * @returns 如果找到匹配的区域,则返回该区域,否则返回 undefined */ -const findWithinListView = async (condition, listView, retryOptions, sampling, threshold = 0.9) => { +const findWithinListView = async (condition, listView, retryOptions, threshold = 0.9) => { const { x, y, w, h, lineHeight, scrollLines = 1, paddingX = 10, paddingY = 10 } = listView; const { maxAttempts = 99, retryInterval = 1200 } = retryOptions || {}; - sampling ??= (r) => r.deriveCrop(1, r.height * 0.5, r.width - 1, r.height * 0.5); const captureListViewRegion = () => captureGameRegion().deriveCrop(x, y, w, h); const isReachedBottom = (() => { + let captured; let lastCaptured; return () => { - const newRegion = captureListViewRegion(); - if (!newRegion?.isExist()) return true; try { + captured = captureListViewRegion(); if (!lastCaptured) return false; - const oldRegion = sampling(lastCaptured); - if (!oldRegion?.isExist()) return true; - const ro = RecognitionObject.templateMatch(oldRegion.srcMat); + const lc = lastCaptured.deriveCrop(1, 1, lastCaptured.width - 2, lastCaptured.height - 2); + const ro = RecognitionObject.templateMatch(lc.srcMat); ro.threshold = threshold; ro.use3Channels = true; ro.initTemplate(); - return newRegion.find(ro)?.isExist(); + return captured.find(ro).isExist(); + } catch { + return true; } finally { - lastCaptured = newRegion; + lastCaptured = captured; } }; })(); @@ -259,7 +261,7 @@ const findWithinListView = async (condition, listView, retryOptions, sampling, t }, async () => { moveMouseTo(x + w - paddingX, y + paddingY); - await sleep(50); + await sleep(200); await mouseScrollDownLines(scrollLines, lineHeight); }, { @@ -269,14 +271,9 @@ const findWithinListView = async (condition, listView, retryOptions, sampling, t ); if (targetRegion?.isExist()) { const { item1, item2 } = targetRegion.convertPositionToGameCaptureRegion(0, 0); - const scale = genshin.width / 1920; - const [x$1, y$1] = [ - Math.floor(scale <= 1 ? item1 : item1 / scale), - Math.floor(scale <= 1 ? item2 : item2 / scale), - ]; Object.assign(targetRegion, { - x: x$1, - y: y$1, + x: scaleTo1080P(item1), + y: scaleTo1080P(item2), }); return targetRegion; } @@ -288,8 +285,7 @@ const findWithinListView = async (condition, listView, retryOptions, sampling, t * @param matchOptions 搜索选项 * @param retryOptions 重试选项 * @param config 识别对象配置 - * @param sampling 区域采样函数,通过采样区域画面变化判断列表是否触底(默认:底半区) - * @param threshold 采样区域匹配阈值(默认:0.9) + * @param threshold 列表视图变化匹配阈值(默认:0.9) * @returns 如果找到匹配的文本区域,则返回该区域,否则返回 undefined */ const findTextWithinListView = async ( @@ -298,7 +294,6 @@ const findTextWithinListView = async ( matchOptions, retryOptions, config = {}, - sampling, threshold = 0.9, ) => { const ro = RecognitionObject.ocrThis; @@ -311,13 +306,12 @@ const findTextWithinListView = async ( }, listView, retryOptions, - sampling, threshold, ); }; //#endregion -//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/misc.js +//#region node_modules/@bettergi/utils/dist/misc.js /** * 深度合并多个对象 * @param objects 多个对象 @@ -335,7 +329,7 @@ const deepMerge = (...objects) => { }; //#endregion -//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/time.js +//#region node_modules/@bettergi/utils/dist/time.js /** * 获取下一个(含当日)凌晨4点的时间 */ @@ -393,7 +387,7 @@ const formatDurationAsReadable = (duration) => { }; //#endregion -//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/progress.js +//#region node_modules/@bettergi/utils/dist/progress.js /** 进度追踪器 */ var ProgressTracker = class { total = 0; @@ -466,7 +460,7 @@ var ProgressTracker = class { }; //#endregion -//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/store.js +//#region node_modules/@bettergi/utils/dist/store.js /** * 创建一个持久化存储对象,用于管理应用状态数据 * 该函数会创建一个代理对象,对该对象的所有属性的修改都会自动同步到相应的JSON文件(脚本的 `store` 目录下)中。 @@ -475,7 +469,7 @@ var ProgressTracker = class { */ const useStore = (name) => { const filePath = `store/${name}.json`; - const obj = (() => { + const storeData = (() => { try { if ( ![...file.readPathSync("store")].map((path) => path.replace(/\\/g, "/")).includes(filePath) @@ -487,34 +481,34 @@ const useStore = (name) => { return {}; } })(); - const createProxy = (target, parentPath = []) => { - if (typeof target !== "object" || target === null) return target; - return new Proxy(target, { - get: (target$1, key) => { - const value = Reflect.get(target$1, key); + const createProxy = (targetObject, parentPath = []) => { + if (typeof targetObject !== "object" || targetObject === null) return targetObject; + return new Proxy(targetObject, { + get: (target, key) => { + const value = Reflect.get(target, key); return typeof value === "object" && value !== null ? createProxy(value, [...parentPath, key]) : value; }, - set: (target$1, key, value) => { - const success = Reflect.set(target$1, key, value); + set: (target, key, value) => { + const success = Reflect.set(target, key, value); if (success) Promise.resolve().then(() => { - file.writeTextSync(filePath, JSON.stringify(obj, null, 2)); + file.writeTextSync(filePath, JSON.stringify(storeData, null, 2)); }); return success; }, - deleteProperty: (target$1, key) => { - const success = Reflect.deleteProperty(target$1, key); + deleteProperty: (target, key) => { + const success = Reflect.deleteProperty(target, key); if (success) Promise.resolve().then(() => { - file.writeTextSync(filePath, JSON.stringify(obj, null, 2)); + file.writeTextSync(filePath, JSON.stringify(storeData, null, 2)); }); return success; }, }); }; - return createProxy(obj); + return createProxy(storeData); }; /** * 创建一个带有默认值的持久化存储对象,用于管理应用状态数据 diff --git a/repo/js/MiliastraExperiencePlayback/libs/constants/regions.js b/repo/js/MiliastraExperiencePlayback/libs/constants/regions.js index ee63ad629..072affb04 100644 --- a/repo/js/MiliastraExperiencePlayback/libs/constants/regions.js +++ b/repo/js/MiliastraExperiencePlayback/libs/constants/regions.js @@ -28,7 +28,7 @@ const findBottomBtnText = (text, contains) => { const findCloseDialog = () => { const iro = findImageWithinBounds("assets/UI_BtnIcon_Close.png", 410, 160, 1100, 660, { useMask: true, - threshold: 0.7, + threshold: 0.8, }); iro?.drawSelf("group_img"); return iro; @@ -41,20 +41,11 @@ const clickToContinue = () => { const findUidText = () => { return findTextWithinBounds("UID", 1620, 1050, 300, 30, { contains: true }); }; -//! 查找元素视野按钮(判断处于大世界条件一) +//! 查找元素视野按钮(判断处于大世界) const findElementViewBtn = () => { const iro = findImageWithinBounds("assets/UI_BtnIcon_ElementView.png", 0, 0, 500, 80, { useMask: true, - threshold: 0.85, - }); - iro?.drawSelf("group_img"); - return iro; -}; -//! 查找推荐奇域按钮(判断处于大世界条件二) -const findBeyondRecommendBtn = () => { - const iro = findImageWithinBounds("assets/UI_BtnIcon_Beyond_Recommend.png", 960, 0, 960, 80, { - useMask: true, - threshold: 0.75, + threshold: 0.8, }); iro?.drawSelf("group_img"); return iro; @@ -63,7 +54,7 @@ const findBeyondRecommendBtn = () => { const findBeyondHallBtn = () => { const iro = findImageWithinBounds("assets/UI_BtnIcon_Beyond_Hall.png", 200, 0, 150, 100, { useMask: true, - threshold: 0.75, + threshold: 0.8, }); iro?.drawSelf("group_img"); return iro; @@ -175,7 +166,8 @@ const findDeleteStageSaveBtn = () => { //! 关卡:查找关卡退出按钮 const findStageEscBtn = () => { const iro = findImageWithinBounds("assets/UI_Icon_Leave.png", 0, 0, 100, 100, { - threshold: 0.75, + useMask: true, + threshold: 0.8, }); iro?.drawSelf("group_img"); return iro; @@ -216,7 +208,7 @@ const findFetchRewardBtn = () => { { useMask: true, use3Channels: true, - threshold: 0.9, + threshold: 0.8, }, ); iro?.drawSelf("group_img"); @@ -233,7 +225,6 @@ export { findBeyondBattlepassPopup, findBeyondFavoritesBtn, findBeyondHallBtn, - findBeyondRecommendBtn, findBottomBtnText, findClearInputBtn, findCloseDialog, diff --git a/repo/js/MiliastraExperiencePlayback/libs/modules/lobby.js b/repo/js/MiliastraExperiencePlayback/libs/modules/lobby.js index 41d55c862..7da1055d7 100644 --- a/repo/js/MiliastraExperiencePlayback/libs/modules/lobby.js +++ b/repo/js/MiliastraExperiencePlayback/libs/modules/lobby.js @@ -3,7 +3,6 @@ import { assertRegionAppearing, waitForAction } from "../@bettergi+utils.js"; import { userConfig } from "../constants/config.js"; import { findBeyondHallBtn, - findBeyondRecommendBtn, findConfirmBtn, findElementViewBtn, findGotTeyvatBtn, @@ -14,9 +13,7 @@ import { //! 判断是否处于奇域大厅 const isInLobby = () => findBeyondHallBtn() !== void 0; //! 判断是否处于提瓦特大陆 -const isInTeyvat = () => { - return findBeyondRecommendBtn() !== void 0 && findElementViewBtn() !== void 0; -}; +const isInTeyvat = () => findElementViewBtn() !== void 0; //! 退出大厅返回提瓦特大陆 const exitLobbyToTeyvat = async () => { if (!userConfig.goToTeyvat) return; diff --git a/repo/js/MiliastraExperiencePlayback/libs/modules/reawrd.js b/repo/js/MiliastraExperiencePlayback/libs/modules/reawrd.js index 9418dffec..661cd385c 100644 --- a/repo/js/MiliastraExperiencePlayback/libs/modules/reawrd.js +++ b/repo/js/MiliastraExperiencePlayback/libs/modules/reawrd.js @@ -59,10 +59,15 @@ const fetchBattlepassExp = async () => { async () => { //! 重复确认,防止误领纪游奖励(部件礼箱会卡流程)而不是经验 if (findHeaderTitle("任务", true)) { - findBottomBtnText("领取", true)?.click(); - clickToContinue(); - await sleep(1e3); - clickToContinue(); + const reward = findBottomBtnText("领取", true); + if (reward) { + reward.click(); + await sleep(50); + reward.click(); + clickToContinue(); + await sleep(1e3); + clickToContinue(); + } } }, { @@ -72,16 +77,28 @@ const fetchBattlepassExp = async () => { ); await genshin.returnMainUi(); }; +//! 点击领取奖励按钮 +const clickClaimRewardBtn = async () => { + const reward = findFetchRewardBtn(); + if (reward) { + reward.click(); + await sleep(50); + reward.click(); + clickToContinue(); + await sleep(1e3); + clickToContinue(); + } +}; //! 领取绮衣珍赏奖励 const fetchRaimentCollection = async () => { //! 打开绮衣珍赏 await assertRegionAppearing( - () => findHeaderTitle("珍赏", true), + () => findHeaderTitle("绮衣", true) || findHeaderTitle("珍赏", true), "打开绮衣珍赏超时,活动未轮换/已结束", async () => { keyPress("VK_F6"); await sleep(2e3); - if (findHeaderTitle("珍赏", true) === void 0) keyPress("VK_Q"); + if (!findHeaderTitle("绮衣", true) && !findHeaderTitle("珍赏", true)) keyPress("VK_Q"); }, { maxAttempts: 5, @@ -93,13 +110,7 @@ const fetchRaimentCollection = async () => { findFetchRewardBtn, "领取绮衣珍赏奖励超时", async () => { - const reward = findFetchRewardBtn(); - if (reward) { - reward.click(); - clickToContinue(); - await sleep(1e3); - clickToContinue(); - } + await clickClaimRewardBtn(); }, { maxAttempts: 5, @@ -129,13 +140,7 @@ const fetchInvitationToWonderland = async () => { findFetchRewardBtn, "领取妙思觅索奖励超时", async () => { - const reward = findFetchRewardBtn(); - if (reward) { - reward.click(); - clickToContinue(); - await sleep(1e3); - clickToContinue(); - } + await clickClaimRewardBtn(); }, { maxAttempts: 5, diff --git a/repo/js/MiliastraExperiencePlayback/libs/modules/stage.js b/repo/js/MiliastraExperiencePlayback/libs/modules/stage.js index 34f3c9048..12aa297e8 100644 --- a/repo/js/MiliastraExperiencePlayback/libs/modules/stage.js +++ b/repo/js/MiliastraExperiencePlayback/libs/modules/stage.js @@ -67,9 +67,9 @@ const playStage = async (playbacks) => { }; //! 执行通关回放文件(随机抽取) const execStagePlayback = async (playbacks) => { - const file$1 = playbacks[Math.floor(Math.random() * playbacks.length)]; - log.info("执行通关回放文件: {file}", file$1); - await keyMouseScript.runFile(file$1); + const file = playbacks[Math.floor(Math.random() * playbacks.length)]; + log.info("执行通关回放文件: {file}", file); + await keyMouseScript.runFile(file); }; //! 退出关卡 const exitStage = async () => { diff --git a/repo/js/MiliastraExperiencePlayback/manifest.json b/repo/js/MiliastraExperiencePlayback/manifest.json index 8a0b25dbd..7f0ae2372 100644 --- a/repo/js/MiliastraExperiencePlayback/manifest.json +++ b/repo/js/MiliastraExperiencePlayback/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "千星奇域·每周经验刷取(回放通关版)", - "version": "0.1.9", + "version": "0.1.10", "bgi_version": "0.54.0", "description": "千星奇域·每周经验刷取(回放通关版)", "authors": [ @@ -11,7 +11,7 @@ }, { "name": "躁动的氨气", - "link": "https://github.com/A-Little-AnQi" + "link": "https://github.com/zaodonganqi" } ], "main": "main.js",