From 3a97c369309821f261f032c9e4043cae086c1642 Mon Sep 17 00:00:00 2001 From: sui-feng-cb <2518179942@qq.com> Date: Tue, 12 Aug 2025 19:22:52 +0800 Subject: [PATCH] Opt: use repair packs to repair ships --- assets/cn/os_handler/STORAGE_FLEET_1.png | Bin 0 -> 4998 bytes assets/cn/os_handler/STORAGE_FLEET_2.png | Bin 0 -> 5104 bytes assets/cn/os_handler/STORAGE_FLEET_3.png | Bin 0 -> 5169 bytes assets/cn/os_handler/STORAGE_FLEET_4.png | Bin 0 -> 5501 bytes assets/cn/os_handler/STORAGE_FLEET_5.png | Bin 0 -> 5993 bytes assets/cn/os_handler/STORAGE_FLEET_BAR.png | Bin 0 -> 59454 bytes assets/cn/os_handler/STORAGE_FLEET_CHOOSE.png | Bin 0 -> 9154 bytes .../STORAGE_REPAIR_CANCEL.BUTTON.png | Bin 0 -> 13599 bytes .../cn/os_handler/STORAGE_REPAIR_CANCEL.png | Bin 0 -> 8775 bytes .../STORAGE_REPAIR_CONFIRM.BUTTON.png | Bin 0 -> 13562 bytes .../cn/os_handler/STORAGE_REPAIR_CONFIRM.png | Bin 0 -> 8655 bytes assets/cn/os_handler/STORAGE_REPAIR_ICON.png | Bin 0 -> 5165 bytes .../TEMPLATE_STORAGE_REPAIR_PACK.png | Bin 0 -> 1010 bytes .../TEMPLATE_STORAGE_SHIP_EMPTY.png | Bin 0 -> 1914 bytes .../TEMPLATE_STORAGE_SHIP_SELECTED.png | Bin 0 -> 1834 bytes config/template.json | 2 + module/config/argument/args.json | 8 ++ module/config/argument/argument.yaml | 2 + module/config/config_generated.py | 2 + module/config/i18n/en-US.json | 8 ++ module/config/i18n/ja-JP.json | 8 ++ module/config/i18n/zh-CN.json | 8 ++ module/config/i18n/zh-TW.json | 8 ++ module/os/fleet.py | 53 ++++++++- module/os/map.py | 110 +++++++++++++++++- module/os/map_fleet_selector.py | 38 +++++- module/os/operation_siren.py | 10 +- module/os_handler/assets.py | 13 +++ module/os_handler/storage.py | 102 +++++++++++++++- 29 files changed, 354 insertions(+), 18 deletions(-) create mode 100644 assets/cn/os_handler/STORAGE_FLEET_1.png create mode 100644 assets/cn/os_handler/STORAGE_FLEET_2.png create mode 100644 assets/cn/os_handler/STORAGE_FLEET_3.png create mode 100644 assets/cn/os_handler/STORAGE_FLEET_4.png create mode 100644 assets/cn/os_handler/STORAGE_FLEET_5.png create mode 100644 assets/cn/os_handler/STORAGE_FLEET_BAR.png create mode 100644 assets/cn/os_handler/STORAGE_FLEET_CHOOSE.png create mode 100644 assets/cn/os_handler/STORAGE_REPAIR_CANCEL.BUTTON.png create mode 100644 assets/cn/os_handler/STORAGE_REPAIR_CANCEL.png create mode 100644 assets/cn/os_handler/STORAGE_REPAIR_CONFIRM.BUTTON.png create mode 100644 assets/cn/os_handler/STORAGE_REPAIR_CONFIRM.png create mode 100644 assets/cn/os_handler/STORAGE_REPAIR_ICON.png create mode 100644 assets/cn/os_handler/TEMPLATE_STORAGE_REPAIR_PACK.png create mode 100644 assets/cn/os_handler/TEMPLATE_STORAGE_SHIP_EMPTY.png create mode 100644 assets/cn/os_handler/TEMPLATE_STORAGE_SHIP_SELECTED.png diff --git a/assets/cn/os_handler/STORAGE_FLEET_1.png b/assets/cn/os_handler/STORAGE_FLEET_1.png new file mode 100644 index 0000000000000000000000000000000000000000..af93186e53f5249a19723a5934dff4d0b2f9fb60 GIT binary patch literal 4998 zcmeHLeNYr-7=KYiRBV_my)TX0o%;(HR}Gq=>?_Ae3~nF*0o|oy)HABLpQ-qqGTu-n~1nY%Hh#Y;I@n_TBgS zz0dP|e(&=>_pxPh=KQgvCyoXHjLk^5ECt{JG#qw1W*EB7p0Xec-9|an^F;v0jFVqc zpk}86fM~#H=Sg|ig)}SJ35FAjAmOn)5gGtfipR;YWl+M3U)Qa-)X1+ywMv)Rfr*2v*0voMo~Mh@&yVla>0<`8L*84viS(O8})aV!9l%FOs2 zIUts2U5up)E{GWkO3A8J6s9*4jDbtmYc)xjTBX*IDh;XDC{+eptD`k~EOg;0oQo@_ zms;k9f}tlfUMfjWnk3zBH{sS0f~$n2j7B4=Qj==65+Rggg+pRIN{2Xg$b$untc!O_ zyx_oOk4%wJE}3yeHJF3l8FuRsLpmYFNDt#ADMBUZ6aaE;80Rc^*#f~imV`EFhYm?Z zSSpNlmI{&}mI{C4I&8ix0MgcK4ac}A7rQ+iLX^^;L1}~pxhGo8u5dzfDHMfr7Yoy# zK{TfhWh3#$f5>^)YT0rZFX-X_1}a;^P$!-0f{Y}%vIW65wEv5Tguv9vgdUrb%R4y1 zEhfq|LJOdUk)RnzwV*{+prq8 z7tFDAvEZ^ZNJieylt9wyD8aGt=Fq8vO>m*Wh@B?D!fK^69HPWHSeRik<0u7!=Q-M- z*J*VuR4a>&I!aj#larN9kx{GEYgq%M<|vJZgG1{r0$VQE%g}o6U#?%|;?aR+Z2#Sl zyuUPZgGey)p)lhVjs+(3YNoa5k;sA?ROD&?-VbA`7k#jchy? zI2Sa-2D4!0l7t){n&$uW?gibtOCi$hA4)X{6NO^Q&A8y45+w3{j{=FvlX7PY=0W~7 z#enTkU2F)BTBAG+H)Zq?ZtKv2dbtZV?Q8WrE~5{QqzucPY|qYa{|U!qX^)M(u>bov z%Di#vTbq6Wqc3h;TQzmYgzu|z+mBAF8livu;e@z{W<;@x7V164Q?C~q43zJ|*YbA7 zcl2fYzcJTtn0)0%mU6QE@e{cs3Pco$C=gK~qCiA}hyoD>{*?kw;!@KXPK46EAybARvco3CyMp!KboR@K`6nPe2G$~tkjKn}5UWEA>|U!~tT z?X+t4czQT!^^L1yoQ0<0U7N-=0B}JY)7oHM7>f*L4I>rAONyf>yDolf;;w9s0vDzg zS6#g18C?GBon>D%-e^D6U+tcI{+(tF0L4R53gY=g({DCbAA4fT=J#V7SKql*ccY*5 z@24ij0Gio&&g+M8>n2=#a>c~m zMDwiWp9d1&yik&%=*89h-xji_)a$V08ZS(v08|(G}uEVzv(nh=l0Hz;FO=%xf4i zQMc3!D|S5>_wB*%CWpTr=@%V`q;Y)bdG~tiIrqu^Mw7{8FqGEZ`gO^!jz-_lpWj)q zAn~|jZf8?ZXJ_f)Cj$cmD+|uOIB##=^`xz)l&jre_AKgpG#Y@|7eMT@n%6UTw-gZD zH~iQ$IX-@T8nt_+uh5p#m)!RLP0xyRzeu|N{zHD#spE-{z>34uP^!^r12z-22l8ws z`OEfI9@cJXe=6VmVph|gTkX9{dBe9Lzh@41yFN1ce3RIuI+r@*m(pz=`7b0KKV9BE zFz{?kOH15um%T}C*S_lXtuKn9>RFVvD&0H#*o6buzK)i@MxU*0P1lFDNp;(%!<=H@ zD}%N(QrnU0nm4ZYz1)!&li;n$$+4dCw=_>;-|VVfUA|=b7!-PuEG=)!;OU9A+m3&x zOj|Omrv9fr>HJRzYHKp9<5LQ2la*WXO{Z@coWGT5Hmy%MRo4`soAZG;0TK8=UW5LW Xu_GJ2J4Q9VEvJ`}mT9S~4~kB)eocBtR=( zZ@f!`UazBacNWU%i6~R41}fJEDE8`kYHKZ=t%^`BC-j6I^$x6}#d|jiX}z)Mw10N; z&g|~H@AG@Ue(&=>JF~B3Wv-e1;KBzX2%4RduFZy^2f%d7neZv#v3luKVc;>7O)uae zXjY_fg+aS&q9JHHMCau5`MO_V1Y;KCBvV9*9cC7wAt))?!QwRkQ1*^qU5h0OCVU=2pCy)x2QXU7(Br-WFk)txXNRogl<1x7k z4h#givyyr&Tl-|d8FMH6$b66Kp!hBafLom|=;NNTn9V^K9G_MS(g+Z8Pc)ZP#!_fD z#W6N3L8X;~Fk>dO;c5N1bl#;cNbZV@a?sxc6(m6@i=|pAoM)^#3}c$y|Ex(OV3|U! zf|uvf7Lu`ZD}*ot3X~S-DGdT@K?$lrB$eez<(O27DI_aFQAi|ysE#3Nec3&s37AxN z7Zg+?iSzhubaG!5Ivti_;dtCaP#Ibc z0#XpuG>J(R@lt7mTq2@KJYGcT6}U((qvRr~LN2FNQZNX`q`sCRY(l+E>XScE|7j}? z4lHi^@pgp$#ef+Q1TGv34I)Kg-(tQ{DkhtMQ6-arfl7sYKwfYk`M2U+3k^t>A+S&( zeje9?h69LFUp^h5tl&E`5RY)8eTM`~r#Vn)Wq}^C zmMRI%Of>8}7Z^_Xvmk_$q(~&NO#kTJ^P9CBDZtnNDOEp=WAwZow^AtvK=OT$0t$jh zh0f&91O49=eX{R#u}L^+jlwk8l)+1|ty31z%dMbk|GH!TXW+w8ouN(1anyKwPce&f z7tFZC8HNvdOS%kM%JFmQ8!&;rcXP*Zh?w zxBuqIZ_&NJYI(||Z!G(~_0T|xp8wbTRdr1xwrRfaN$3`0AjCk3fe-^B20{#k7zi=& z0~lc8uC_(c8@92l$8X&@^16x{?(c!1OJ8mL$P;!+ZEL@k)c(~x2s#%T7QO4OO_wis zyW_Gycyp6DaViA8IMWOSyEak1zj=4bk%sO& zw@uY)>({IwArgVQHoTMNN3nm7&xrkN_xNv?##Wlck3!I)Dkx%&w)%@d*{jfGFYn?@ zR@@ozd{S53T&4oQRAwVkYX4qmefRkj6MfhBCsvB@3_m+~a!Xt9Q-v>fsoQ_oFTGRGk9T`R)Y`qy{ra;518ma5)(Z!Z9ov$0 z$}T?Ae4_SjbY7av>5QyBy;Jq^-ptaWSL+7V;4h6a0vH+`ey6$M>V$Q$&se#=$E4>Qa+F$ZN1R<^Es-y zZZn8hCht6xP}b*imU_getO*xSKIcthydMrlrNxPB7Dr4k=sW3NrzOj3uXx+ep8n7J zo!hUGwks2DPlCTxx)?w(?`e1LZ`_y!OdfB4p|!_bKT5h(_18_+@AkTvyPU?i_fd?Z uHitT2@%+vGhq}EV8^G@W6i4TK*Hudt=cX>a*tAW^FC#5e+w{bSm;Vb1gR5fz literal 0 HcmV?d00001 diff --git a/assets/cn/os_handler/STORAGE_FLEET_3.png b/assets/cn/os_handler/STORAGE_FLEET_3.png new file mode 100644 index 0000000000000000000000000000000000000000..86cec27c21c908b3ed16fef1618c6d653d4d90a7 GIT binary patch literal 5169 zcmeHLeNYo;8h@dcT7|RpP*EA##*XyFWbAW|#k1`3`ErA(XBa>s{LkZFZ-C=-$em&n4UN!`7_JEhC&9R9V02cm{ z{ds_*Vt)X<0GXg zQY4%x)*+&l#Us%aO(5Ys0awlE3y{!o9v-Gy7b+I5MTC5z2<3}Vp@_>5!^9z&C={6) z9O#bLXtC|mm>FmAPQuYMj2S~wtJTW0ig*;QLj~dC;V55-3WZ#V;9Am63~u9^EURWM zNC}IYCd~{ATxc!G?fHr$K~cziY|Cs3nyTX}90 zC?7EKu_8ajs2iJVc$WLTWZ!r&$~ z5hs;!UA5Cq730llT=A z2}u=l5Vk^GJSt$rfkcLg#Uk;{dOT?(3`!{p`LMVG5r#ouP93K#@n9~|9r(x?Pm z@kn1E<@bvJQv>6}=S;6G{m=dNO{w~wriFufmq+im=C%aOUY`H_W)=VV zhMk}H92nVm?xrous3(E1Lt!hav}kp!M?aam+9wKPpFwkDj)6G_<`|e`V2*(~2Id%; zW8gP2aA7fdX&&f3CYfwb+0)xq8Toljod;;>&p+Y-1Ivg{QcKbTOmA=BLr27vPE4mU zlMfUG0H+T=-4MU`>fuJC9Bs0`clIBJ%FhCFcU-yO!}Ie3Amb45UYx4W40t!Er_HE% z_w|ME5 z*?-*djl!PP2tOtCW1jqk_+`Fri%L5){xkYb{?4F^zVp-bKo%D&7YBV=+jl5UcVp3m zE0rVvL;)}afyVylx;#NcX8Z~(`+?&03MT8ajNg}2wd9CnoA=q*;OC5leBhnYFO~30 zaz$r5zxpCSa(ej@#~^P$0BhpFTh}-HR@~cPnx$wu(E0E71I$$4#P@pp(1xj7TdJyh zc-{c?LJD3}oD3Vs1CC}SdCGk^4V~ylPknn>*zu+M>fPQm|2ovatGo3{kX0WA?Ok8G z+Y-KVy*=v1@z%hjjn!)hZx$VEfU!N{;s0S}WcJbEK^}ac?e~Mp%Ij)EZaxdZfY0+F z`l{a(lQ4^cyOntkc55&AU=6oo3XfHEjVbpg-1CyZN2l=T`9R>_<)K` zN&2z+VsUKnqL{vY%X}+GGEUWEP`8rFdY_gTPatJ^HJOh3`?ovjlA*D&O(AFjkys#D zv#I&GGC7&5>)j}*Dx0|8`NNi_I~N{o69xTQC%=}v~OJZmEHFQoa(J(8V_$J9u%>#N~WifBtp{|Etca^D*`{9+4;i@}oV7%jG6J^4kLo zb267Vr`)LBcV=uA0JoMr3-frZ^rJgSa!z)(TxTAOIj{fV?6y;7dGjLz{*Y0hRCBSa zD`fq5{Ue7>)A?mRP`qQzAlp#>Jslf9aNEc!JF?ZlhfK J_m_6<|1Sx7)8GIA literal 0 HcmV?d00001 diff --git a/assets/cn/os_handler/STORAGE_FLEET_4.png b/assets/cn/os_handler/STORAGE_FLEET_4.png new file mode 100644 index 0000000000000000000000000000000000000000..7222bb2a85a6bc0368fd2013799464c8dfa771fd GIT binary patch literal 5501 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 z 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 oF=i4ho?Dh0 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 A5C8xG literal 0 HcmV?d00001 diff --git a/assets/cn/os_handler/STORAGE_FLEET_CHOOSE.png b/assets/cn/os_handler/STORAGE_FLEET_CHOOSE.png new file mode 100644 index 0000000000000000000000000000000000000000..757e5c829fa7f305b87d00ffc18b6de279147484 GIT binary patch literal 9154 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�}!FuI&>rmLvLb$L`31P!~j*|3UpOVfJ43>QbghlohfcJBU64Jw0Q)OX} z+B!0nI5&Cd`BCr78+J8VI0^%|qHC&J1dTtL>5Pvvf%obKPq+8AdzxLt+FK>DpLBIi z-l5qaj%&Ru0)J+54h0MI8BKXi%%iex!(0E8nqN&g>3qld6 zJF6^2<5xS1O-ZRfl`!aHZg`xqpFSKe9_O`~*jmOY@>Xh({b+hmfKBb6p6xcE#HEJ! zKhDA)3u;btQ6C+@5W1x39z>x}`1IlxQGR{i?G<%VCUjn&Eh)EFT1R05p+Kr<(`pwQ)lwCRn^ zz7qeitF`jbQtH_Wf&zT7th!s9%v|r_qn2H>$!m4SV3qAX4RJej@C=*cr;xjBnqCwXaf6kW8{J zT7Etpr9c3{#Fd}9cX%+oxf6GI>B@Jg#m0gL5n@a((y|?@-$s(1QAJtQ1cnWBjtD+i zP;*oI++s1mZZ0^qpI5%#S0XCh-su~W!XiSnCXNP8x>jEDvow-oE4DY#zQ3!!nJfOS z#_I5$eRa37Puob0bt!sdfZsv`7JfHWWS&@fp(*AZNZ%D$gMC(l`fljmu&tGYPM!D+MGeD^tTb*+QZkEXu8vOnoe6AN zg~9!YSF4~-WxhFL6|+^UG)Y20R$(?DOuYERo@FnUF*FIT#j z2R4j$dCy2OMo)6r_Hmb!Yc;{lCmVyUnIjFA8S7K>ia5baa__HRbhJX}#l)^NRoEIYn3d3?L|f(MQPUS9#3mttA2 z>`^U@d?ZW!^2B_4_-04S7=dD>)O6G3UUVCHo5Y|mca%2s9UW=oE9dBIX!LAfptVEW zjI@mMv9;;fDb}!Lt4&@8_R;2+F=}OxspY|a`|3)`x_$#?T7XI6!QO|2Sr63Wy!R+` z70&S8f4pVz?U>G4(1VOnZ!!WhgGs zU2hlV#P2LfU7#zeZaxl|sV`$Pe&*W24}rg{L)-$*D#&#s>2xb}5w)13#HNU|mr#`yF`TS=EM&o%*EVO#>(DDUabedC(ml}17FUPIk_R?^*(Ub{ zk5%JDzvc6!g#8^;MmA};w;LrpOa7H4*xsRDu$3i_v~Pr%>FSmQwf%%uIl5q3R8T-C zrMscZ+vijeSH}~g>mNRN;9%tbBJFHK#^Ca^Y2yRywUQ_Kjt9)>erAD7jg@Qt;J*;; z{OOY+`I~kUj*8Pj*tQuk{Jgs=`cR1bI@_sk*IDQ14s3@2bqg4xn6N}rB$=Ra&zEP8fBYDtBT8t=C6cP zt5|t6mTijZ#`+!8P6$ECqX$N2y%FR25gB1a`B9rW8i19<4KKTk4x-`LsL=Z;Gpb;l z>*3RJNC3k&Yx z37ysvuaP;4;Wc==u5L@o){3RL%gtW=)cA*@rL$HXyi41g!`ZD9vFXGNp^beGEouE;Ji9?P)F2-rr763v0N&?ICl$aR zi$ve_$yXYcgRhmPZ_AV?f2`s6k;$+}XD?wlRzAJp3m6|1h znHajZnwEQL0u)|91BEeq_E7s7YcjY-KXxo%wJIi6eL8P%{&{KDB9!8>%>`ye_<+&B j_u%XQ-Rd3V1t#R_CuI=NkJnUptvijeK^L94@}K_=V&hw% literal 0 HcmV?d00001 diff --git a/assets/cn/os_handler/STORAGE_REPAIR_CANCEL.BUTTON.png b/assets/cn/os_handler/STORAGE_REPAIR_CANCEL.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..e5c03afcd3cffbadb5a965d35f9ff16ca2c29259 GIT binary patch literal 13599 zcmeHtc|4oh+qX_2|_~B88f96V@g$t zw02QTTS{!HDr&ENms%o(*kgn;ro^zVbJ@g%uDue(K==h``gdGXes~ z1dulNf%axMwB68tO0Mqcy9lKaKYxH)KtLB3;_vF_g9wzli||CE^gv5hbdU_vT@M7; zFjF@3zl!ien&2@AYrMIQ8{Wqa>JEbG%jkw^0|WRW0$pW7{CrVZ?GQcC;keqs^}%g0 zNam0v&_@q+mQht!RRb%lfmPKM zm9?}rG_}FdfF-L)*&0=#R;OZ+alFz(9X(Fc^o!DdE(V&=^m!3KR+jE31N4 zRTTjWMQkW4&^1I6g}w0S2nGnO8wTkgh(x1g4n}mniw+9Z0|Bi5z6L-4zlKF&|Bw?P zF>r{hKUhUc`Cv_lgzj#C(fJ2qd=DpgcLO7Q5q=0%AQqri`HR-y3mu5YdZGV|q5tas zmk9vbnwkAI$A8L;pWk0oU;_<4Tns;R_Lh{4Yokdj2By*S?BDxCWvzHfXf(pZkCFPeI72sw+WcCftMC7OoP+(<28IEca6K>zJ&+1W=J2NdfvWfh{eBao zsth!+%E9{|{kQ&`{(tYbMIiy9s)A$=G~{7(y5)b?S zgBSag9B_>Xmw!2B;LBfb9f1OTIRY{&z_ZuQaU-irv~gl<1U8F_|pGK)OV+7G6P@2*6Q^@x}Z}s@(EuhvO`Z8c!X?8Y)6Ew>9E2?4nxh~ zZ+}bRZwdS@fxjj2w*>x{z~2)1|3m^7(d!jx0fDXX6%xOEf8({wE(o)y0RHVMof;)6 zqN1jz);AZdP42NMOw&>khh}&$Q7-fma-w$o#vKd{ZUpIcjSgR()&g4fRc*G5A9U3j zP2bi8mF*#u9mSz+niM||SqkqPUi)}OFyLc6@wHyr#*^K&DH5NupKRPeDbglzU)*?v9x}J=kPIFi(Axp#N zRZr=A+CFy?Z9ls+#qv7Oh}rYPO4L#&^By{@6S6i?B3+&Q4HV*5@8(!B^#VnykJTJ8 ztvi@)+P91_hcdfP8X6?TfW&QW#SAT%Y?xP;3#9{fj~&%@{!CfG|3=FeJRfUoYw^z8PuS*$S)%#Uwx%vJoikTzv@TB0%6uP3`L68JOZn`H zZ=o2|{JhS@9_8Yk#Awj@xIB3=DCj=-lUz4C0e&j#TkoHVP2rGrN2j*qln zZ@qNA)!Mp8zG0Twof&zB6(u(eA!%vnUQBwU`B2Z7&iH(cSga5OY5}oKao5+6p&;Xq2nC#W*t)?tZ4oCzd(odaZWd!~ znVH7mcyl=8ih+S>!<`R-sQX}ur{7Nj(fuK;nL>8dh+O8wCyar|asZl`XI7F}zMEM@K< zK3J3E)wp9vYe8QAJSXw4*7?n4GYzpZ-LPU4!&{>Ha_pl!na!^vzGlDoVkc_nTPNdq zeO?}%=`^-zLZ)6v*xfV1kMKPrIOv%%J^iQJv1VUMjo(G^*$U;4?73V9>Fb*I^HHfWv4^29svR08vBS$sjILwA&-K3 zrUQpCH-|dpb4@bKp56Dk-e9j3t7?1}%F4rZw2yw$wzspDs(o>sW@)^b7Gt9>e$6n6 zC(_l{6`O~#%>wnUMPk+Tp&Ayt_~=BdHIx|5>x&-OvTBCz*ryG_o=BeAs&snpgF5-X zwG?cTl|lKekwFIy&YhffIVPa1d7%GJwUcs*k+C7&({H?fvq$Yn^))ox#lB)Jq0yWA z6~yrE>F)0C{FGC#xgQywi4Lqz`2iR9BjL?698Jw!2$yHuSBy!rHqAdHc3oOim{#;k zs3;_4BfvD&e@s2J@WJYWyI*xp=X*(x?%oqY^J)*M8C8V;f1j%d6{H>_FkDRe|2ffPfX3P*`Su#iJO7cxPr*)GN7p z37;N6IZ(Duj$NLV9cskW+wc=!V@3fkpPeB$j73E@ozBn8XgTHMeX>JqfuQarkG~8P zX07Cy$VaE`6lR22@0}MO<@O{apbkUxSRzWmMdipD0j-NcW@Q>f+}3l_I?gEa*5bDW zVO-u_Ix48VEaqsxJx=y@bc<@TnHX`y`&?;#ATLwHpE7U0N)tSpmeNqUr z;L!%ai_OP&p1DK=FJat&)@5sW|=WHH7?nlMA65; zZRDx-1&z3hj}!aQ8~M~On{i2Kypfr>JeNuxFH{B=noN&r?71Orl{>;`v0>nm^uOipy#jp*d$3K(FOj_MDs64Q>hN;BEnHp5Ew` zyEReacTe`mgS}72Z*jy;uezvfXFoA{HzgYqxTsf+EM=xL@GJ5ATk##~dW4mC+myX2 zSYdHtXJ@BbP_F*kY3tl;nP$C`r;%855gJuf6Ox`vSlni%$47CwT$lYB$dXId8#>*^ zLbqtAPx;wXR6%!pq>!wzf3g(AD_;deRdLg*4R;p%6BPE+vB*H0);0 z=6Dr$2}K{U2wgy7JD_mr>buEFW@~ctvf__orp9y zRLJ;1Qx!fF^23*J1>UZl)$Bo{x5~*%7jrk_zN^es(sZIKz+u~S7R1#a%E30!cl%uU zp9qZNa{6w|B@%CwgxlZaTj!edllOPwjQ#OVHmA6DZ(XhFU`6NS2@R6|sJjXGQu$Gg!W6NFs zq8T&agYWIkLk{;!>%7tE*NG(`{}gcQ-jRE5zp;y;$d7nd-peMJjv)OhezR8pHH3<{ zw5Xwiw&9SxHaWwW;Vxo$E74HG)_A0Bp%q@c_bvu}8LUXw4q8oe;j?E79gUr|jT0QQ z`_&)Lh5GUL8XFs1T1*W_0hQe2bJxT>SZPb+HH5kDY`_X8-jQ{1k<8g0Ho{Wraz`h) zP25mKWPnKEFq55c-FA$LN_-m7n%VG@t!Wc+J*V>fk=m*-gIO~bhlWa}0O`2*p(WL~ zqHQ)>^ThelX$1<@yb%%U6{LWq&hPPTv?W6SrHhqX7O4Sg)Os`gdHv($Wa3u6bSd0W z%Bb#D#X|jNTs~Qu3Bedw#;{C>*Ir^7IeAmDP#`W z0=B(A-P~|W?KLHAxB1<>-G&%(Yg0qZw)W1xOKvBHTN9F#lP$>FDcIUz&Twn-p0}T$ zqJ!m|YgIu76CV;%k)41g8W%}*N78~u^7jgXLcqqBG-w|(d9SM+;Zw5y=~&B3*2(3H z1Fcg*?#zgq{mlE#`=>|T4=XcoI75x6E41xil8e4eBo_5>^h1{KpwVCuoWDobDPJ0`IS*~I z(dVtdCJ+ec=Fd5%3I_)Vo2O}sh*arRkjje6;Aq>&7X z7Pm-PpZ!wvWgym@KlbYN>$MKTQU_5TyE54Tc#W;hc$ide5VIu-F!q#*R>yJ_e_D2b zdFC8?gU8R$UtFDI&dtqjoVT?N+S}b;B5qd6ny1;jxa@NTrK|V%cmRJ~B@1%6H{OHl z!nIJORBq3;|Kf9;)k&!e=WXx?#_7A7{~|WwzyFVFZ4RT(Re&HBP%VO%p236f0}o`L?h1ejhmX+eO-0 zjg!ki{{t|hsqTlFeDBqp61>%0jq{Dr^7(AW_C|TJGtJ7@)>0IU#ky75hI$e_J@6g@ zuFv^0*w?Zio}Q6lU@Hi`9t%QEMAYEONY!>%`(hxDx!%&-Yoj)#)x;YpQdCkRuB9@Z z91hyfuv%v|;AbGHQMu^J-EA!5R=Rc&yNbb&C@U+&jfZcR4LFYt4aJJWmEynn#OK!x zxa@P+I$@iWG2q~;F|}L^`p&S={JDAI{V40cr*EAMJGj0R9-NtpT!^nuT7gq6UNHA+ zedEaa$e!m6zpR%(pI9FJ3Q)=bd5nQ*-y`Mofxh;r=nVc&A%wBhMB2@bjg4(+XrOP! z!1gzAwR*ZaCJh}O9S??v05dCt{|X4a*jRo*6QU{YtC!b#i>UzG*xW>qRcmPIm4$hS z;_(+j8^S{R6#;Gt1ao(LP2}aPR~RlkDYiW}B|oJn*MhX()ij36z1)fg;-(I6u`WVz zbFpxd!zp_4;)I|LxDBkkKf2bbw>i4HYFhL4I;3_b7MQzsw*ZbBuRg0HwI;~0HS`g} zQmxEsRH{>Uo$8&S#aI(4YiGvzdHR=gD zMK56T{ZQ^fl-wLx8o2a>aA9E~5zpH|!?y1DgU!xm{X+W%Rj#8mQhEi?&d)6hJ8N_SxrrAN84yz$puyx4pOWhVhEQF#A01zA01qt^#z z+morqc?-hJUmWbL+uE$u>!z7yv*~`y3WwIx2Mnr~oPO)pt)aous3;nZwoRkq$9)Za z584ZOL_^X1;HZ8>e?(y+r_elC4G6ld4!|>UnM`Kd8jzGPthdpyEY0#a_Z1Vo1qB6x zim)nRs&QHKKDzL-qDzH8ache#Nn^ZdS{qB8dxSr z%4%x%;H`UXkjt-9&N#tBBs#uF#o@mp_8gHp+#Fxi3>VZaf8e`6WZ27R+Zb3zj+?V>Xf052OB>6+f%b&d&MSLgq@Os1UApfm%>4|Oh@wAK z)<}P6EfG`6ZG8}1*zV|<$|vqmHpC1R-FCcv`?j;Qe(377e|Z&dX`D{)e~~B2(SK`s zddlpf)$rKR_I4*}ue%jYcGBHmz;*(;FUrTqC!9~Dvn`0qZjTMP6|N%Bpu5JM70Bw&l~H@qbgESFtG$nlk4QWOpW9mH*iFv3b|^l+2! z*Votct#gkhwnAp@A}_Kh|V*5PLt-Jd1I}Ral`C+RXRKkqY%@y>L_&Y+957s zm6cZ8mR&4FVYx!*W1Irq!ub*N13$;7gJPk|@Es{3Ua47;u}E~s_#bd|#07yh>_eo?$&m{mq7@bTHC5Eh5f zq6*lvd%l_~{>no?*x2x#2&gjvRF&~SSLaKL#47LcP zU}Ym>IGvbT=IH%{muW+ZS=XS`jE9>!jbc4CJ?zAk1GOY#L@l!tG4zzWb5LU-12L`l z#uh!j_DZxr z%@I!2({J0kLZP~!a%SFhIzul%6O#QF=b&?932NAaEVZ!{NjSD?$qe(FLBGD&zx5dZ z<80KIN6v)20}?y|!fA!QW(#Xu``<)Puy6eFlq>!KrRhzbgl)Z=-}Jp zf%jkgxMO=XvY%{xQe#-GQt7%C@*Y5mFRG|%% zYLb98NMc(Bgb!t;7&j+6}oe@A47HRI`N)V$W6eONyy?!!RXJ!b?-k#>FT~Y%X2EXGL;8W^KAYCR6$}; z%&mu?EyG1(8pXr#z3Dt2@A&cK@FJ)5^mKhpg_IL>D$#I&qp{$?>9C!%7Bz5oLgq0znwKO zubA$nyP5~oS*&!zMt61$l;tx}6r?@onNG72|3Uop%>HEO{w|Qu?yrJjRYCLppQ5f_ zx)WR5yHYyjKhu_y#O#p{^Pl>VdB5h71I5|YaHvR(6}J9-D#n^w=aLyXtld1jo}d4n zvE^w%;Jtx6=cNem#e|9{f~H>!=pH)^)>cw6H;|abrQ~p0Cw5U%nz%JFkRIycjc0QQ zNc{1tC6upvtCo0vUO{H&seX+G8(jim5SQSsufnEcA^QMqh6o4%R+k22oQPCvT|Eb` z_FsATOR@`*36v3x@o`iWU47#_kQI=8zdD;ZzzK%iJr)-~UH;}xqr<7(86rD1JvEiE za*h$Qxb2ynlLNeFSgiYmMc^D~VS!1^Qr)4!PPCk|E}lOeXR!K2_V^*;vwA!Rd7JQ4pTJ3CNR&Z!z}=azA*kA3^*YI zKrY#f!z}a9D@5h90S8sR)h?b4f9wL}k}%#-=YZWne}6v^-ZWq^dc~m4Lqg3sP&5Dm z2*6d3$x2$(7J_?vdV=^gP2eC^tK|k57=+H&U^333+tQwdt~7{)ohp`FlMjvu!Dv4{0LqLN}&pI<(&hd04c)VVz)ou$=BqaiV^gbSl>rXSY|6}F zkp%dDKu(xjj~TprSlB$doV3<>&TJ=Ei#n^b^JPnhoDQ>uYgs%1WV2(VqfbAOYlw74 zakmUvsIa&g?TZpRx{N0A>LMZfFV6kL(16Zh5KC(KcX;pH9xVEn*P1Hm(5Q|lS$R#_ z#yZV8s!8=)l4e6XOkJ-)b*Fz`f2ph>sn7M?jLs6(RsizgMSFWB>4J7Z>goJ zp#ml;_5Fwg{1RrZlvZmXwvFZf^4V4kUum~fP+$u;vA@OG?~M9jaq~h}=S|3w4(O8f zg0Sc1a;w>`Xy?edxXfsJ;ieH7Fu9z{u?T1M{vA@q2$02^29%I)+S)$sUKq?xwqgfY z+1j3zkY}#YGomt3??&Q@;U5-y7uMGUyO4OPB%0)?Wn3a=+NpD}J%VACm18OyQAWvx zV$Xl#sdU}1I1^^dH<4#1&IgMOBo5xx%cp#v==S;XBO?BaHY=SawFqO}268L#d{}gW@WnAfyOm!Ps;$q?^^xOYA z*2ROe(k|qBD?1SAIRB6HHU>4{Q&)_KFdss9jv|;4C3qWj=gjrT^IAlpN#cj zo4%KoIgV(uu`9ykgTtKmnq*R*4D)6!G4RdgU! z|J+#?6?MTW3zU?f-aqpBT$+_B)K*?&q}9eQUt+vr+2|r^=*V)#p|W2y^zJ{oM?PT~ zNjME#P>GXL(H$Sah3Rq!MUZzXQC>+QsjF!39~SfUC6N{QzKIu75eSN)xPn#9^A_8_ z0=%OjjiNIKKurosh%7lEmo~VhY;0h8BAO;|rQpCaH`E)2X22Xob`qq&c{_DjZ!2W0 zFYKIJ(GmOA>c;)ykimk$=|v>Spj=S5eEjK_$?620L%)w;bScj^Bi|b9Hs3jeEnRh`jak|8jyVR-w^{0@-6{RTT00zN~+9&^XrE!%U9<$v?Z#&2XcF! ziQbOiEIKB5RF`-d9xKTxgN2RYR0rnL&0|H87g=7zTSA)WRRk+iI&_}2=-7u-`+h(w zZ$SrgB@*F|Kpfbsdk79r8i6FrGW16^LMD~4SvI{#Q)K(UE1-IN5^%+%sp;uTxh+nc zC*njo+avjBFWh!f5Qk#c3y3ObByNjG5TMdhIzoToxN~s60-W=L`)klsA}OqE?&B1b zLAt6ElIZRjbG7`Dw>hmP)DtJm5htSnU{E`|7xkm=o6iHIojkWM@*t7P`6k=f6>c33 zJ9}8=RCBO$2_bzjWUCy@64fQ`!5KhWz`fLL^7Je)X4j+NGto z-r+D>YrR>2h~W8z+B;u_Ed0oB!S)pA(P9&==|!kyk(!8cbKC5UC+X?zKy6!FW)4R0 zEGi}=5B{S$kQs?|$+vi`VcsC><3e0K9VrFAv-A2 zycT8VvK1<&m$kjN$Wt~R?eMa;WfJN1s;Y9}=*O0Jc2e(5sh)GQG?Se+-(N?+4%7L> zfQTLZ`Xfz`u(7{Q-=8rit=CKM4^iy+3M?mxk#;rfYRq$Ezw|Rkx+mO(NA`+WW_LHD zaE>uXWj=3>rBY$o@7JHjTK4er7Ts-_b-#5)+(iMH`V^&JBpybDx#7-OW@UtCo-w!T z;1fxnxh|r>Nd|yyD;-PPP3s9sDyI}gIT<8euu{MjB!BbPE$g#`A2jUmxa^l_XIs;^ zw!x(BnB*N>dYOQYfo_)QZd8kZ_)Sye#kCTS1+}x5o+-i03DoM12WM*RNa{~@yTPJt z3``9HXauR{tdpH+HRfBvJ}(K>A(HEOK9wT;-DaXyuAGixZf)}w8^QmFev9>~U}gX4 Y{k)KC7x7--9PoY3(A=QthdV$08v~Ok3jhEB literal 0 HcmV?d00001 diff --git a/assets/cn/os_handler/STORAGE_REPAIR_CANCEL.png b/assets/cn/os_handler/STORAGE_REPAIR_CANCEL.png new file mode 100644 index 0000000000000000000000000000000000000000..68eb7b70c1364f3050008bd51f6f6c73e133ae1f GIT binary patch literal 8775 zcmeHLcUY5Ix)0;7qJT0Ma71Y`>PiU#B#=-Xa8+E21?j?s5JD&kBr$;y$hd+X3y7cy zj2DqXL=+4y1P}p1n#zP~=tW8rdI$+&Ptb99?%lon-2L-Dp65xva^CZn-+9~lE+2P1 zqO@Vh1_%VAWOww?NeJYR;P#uh^51~VL5*W_;IcmSs5=P)QP?8;$wBVj-wuJSh2Wgs z$Zihy2s9zY0Od#U#TbN#gaT>^#KJl}6on4LkTrcVSRCF`TfnN&*2MW)YP%kAFmwpD z#RTAv(ukN-G)HGNEeLJyr)_PeX%UV93_>tulxBEHFrI`6x71$civahs*HCTERT6TL zrS=apftqd($2DyUM2x1n0ZbolXb97Un;W3a{7m2njP*2)42_JThQ?4MV|_z2!~s); zF{+$4Tt%JiC8UIw5 zkdQATNaR0LfEk|w`KQz*=ZH`Y^dyEvI7>uh{!9UC?*7dhGS2_+aQ<$!Z02`*VZw3$ zf>bv1g)|glOT?ha1fny65d7QzAO8&qO(PQnxaK}r9Nv#WCH+aJ#^(i?Lnt!FQXBZf z0pJDtFe7Ie3~|65VPvigoWjuX6R88i59c58KS_-M1;WJSccj1*{ZM4oza{oVBm4=( z5EOtB7lOiKprLrIw&s`3LD&+42}B?mXlJ~tg@Xga4o@PZ@Mw(PAxmvwf&mWahcGuZ zHisL+;rfOsjJdwa0TW++b6=FPKE@c0HZ#Pajg8@^zpXz+K%bTQ%Wv!b{*UXOh&T|i zsNnyck8FPtfDKRrB?}5mZJ4&^>Pt77s|26@^b&4l2nG};`~N)e{%_|0K7AUG1E3md zYsx(26ON}q!T~^<9ynlp;Pdli%9i?0Y&PR8uD%_jvt!j{x57;x(GdbmZh41=m_PSB; znb<2UG=7Am{Az{y`u7!quLyia;41=O5%`M0R|LKy@OuOpho`N@YatNn7D=o1$_?dw zYeUUAT%AoJ{1M}4MtFF!nOoyFA{Pd`!1p-?yDFZod9tgE)r*D2up@jgMGht;$0&EX zvvzfb2|`rzpBUQ}B8h^ix-NHQ&?ZI2A!5mrBbyU=))C|0*4!0Is=YbsUC3>giW%ZO zMipUgU!EI(;vxhhnZF!~n-@OpqqH^Cnh#KR6c`)7di82{)+f_0AAY29;qiK22O>ZJ z=8FVn8)RWYv1*8|yw;0+mpd4{c&~eGLrY8M2`-&kTwGdO%48>Ev@Y8z!fN04C{)@V z^;IdK?qLZkR^oK*?lp}xH#cV-xk2bHFUT+5Y;!b$41b2zirMZfzQmF<>-ocvkUlqr zwy-=pV5P2G;3aCNN=N3#TCpwmjF|?X#P&CtC!gPhO8Sk6@>(O5){l67I6rep@2Zv` zkCN$8;#L+uHjt@oQ{p9+T!pGPx3o{pn>g6Y^IVV$?pZr_4n|is4-xsyjTMkmYo*$zR2&Wl?UY9r$Q+JwwOArq1^oJ3C)jLEN(cqH?pn6GKd}x_9s1 z1}(4XiJ7-kZ&#K@ErQ<2OG`Rv;|BchMm zXT1BReZu`t&35t960zjNgF#zcTS573^Z5Aq)!5ivUarjpLo1`ShGFz(VcJ1{iDNwP zjNx3`RrkjH=3~8!lA77pEGPDKt(sPhi9<`8c|mdU;^K5d{pHIINzkUICM%j`v8}1a zwcX{0^`_q(=n>1zAo`QKI3bbVgWY5NV=CtgvQLR}-=Z^7)pF|uS_MR(S5`bcTeP=)>9FS#mIH8uC90P-0^7gr#>)(oRPt~b2y&7 zB2M0evNqTQtN$KnP(K|1LU?OXM+X%$ez`+T8YLBJmi;*H=5{*^3ut<=$yl#;KUjnVFdq(x{C*w)wuhhX?;o z2GZ3jfgDimykr0OcAIUIR|2J7oQa&Ep#HwUq96!a447SkU6>47a@}QQWwr3`NN-@# z0!x=V@f<)1ViS!|cG7=J&nj~1NufJ3V*F4@ z&cb+2&aGShFQw;HTYMCi5}VU3)zJ3w58d`t5a_ekcVdI-bUK-=(~vI`iGtu(o}Qix zmMMGX-u`7Z3aquX+X{6Jhci|x-;BR$Ym;hso7hdv(}cY2Q+ur!N7gZOyQ&&u zZ61XFygemW*(P2m^CT>(g@DKNCnsZWGCgxMGix%3Yi`DxJW_Q$)6v?wmv=LncBFN#ADxIxQR*4y@>hor&p_K;mW#-8+oZT z-ueNLT#Df3@;U4>wk0h}DiIZowy?7NvDn`5LAsC!Jk?sd*vtP=-Wtf<5Gz?63it8p z<(KGzT*+IQo0}60Dy+@S+zgT`XmcO?UtLT*mT5dRG?oyx9P7e5fUqi^3Pc4&2heDN zVPVt#l2>=(SQ;VQdB4&|MXT_sXYYdTot)YWgXU?L)m+my$WHB5M`vXnyoX`WzZdpI zQSp>QE`G1wNj;TKia}Urt_Qu%<9BBc57)Tn-D^55kHTWH{hc=D zP-~d^iG5oss%qH&eu-piYO0%1VQDHG3$>!z_NP9KnIXG)oz~V;HUoT&g!rR)~ z_}mJ{>`0tP2(sD`Nz#P0Pauo%QPE@XYjjRA<58Kp5h97xN0g1$-f3Nfu6T+z3chzSmw#mKMh|G z%q%T=-g&nmm1!$KPg@?YYOwJ^(aB|bdDbz<2`1{65k@c=%+hj~O)?lMDY?$N%dyh> z`g*WMqq8L@4q1<6!xRp8b#b9m3is~WQ@Y7{Q{n}KGiBuIftu;*%Z{oai+X55ettt; z*mhMF6=}ut2t@kV^_7syu&u55fhJ#C-?@JOoRTwn97^Gad3p|aTx5R<_W?KQr zGq*r^<+|9)!)p6)_2YAkIf19)k3Er|T1r|m9oOAK0jRTa$!qs9VCyN}xpKb7%Lk9c zO>+iv60#hJ-9!=MNY<%NMSxp>HYDred#Tm z6escL$umRsop7w_V>M3Pc=~eE+NmVR)rhfG8!x9&RwmwNfx=vR!ji$4R97F$^jNR8 z^=i$@=gE^imM8F~L}J#IS`|K+pX!Syq0vFRlNz>Nt;x(BK2~C3WtE2M?CR<|=(FUgxDB$V?2~w%>fIFr^)dP` zi*FNd>S$%(&dJoxOxWva6(IpJ{`}VS{{DXc&%?vROwK&NwhGpno>7$c0biIiJkAMf zAD>_9EWqX@z5&Gogpq^2y+zbQFo`rfb-0`@kcQsKDTc58>HKOqj>jdz)TbBTzD#?i zrp9r}IlC~~333RB!jT4PbSiwpi>rUZ*AF3bnkMNbdJQhOt^x^n|Dm|;#; zgFm|yDH60s)|A}sg!hIUJG62*%z0u7DHI!-MZHX5aq&e|UA8;&s+}TFIsRsi-kjo9 zfYv3g+Mx-7Twn3Gvi$Q4HR!*R)xC1mZ0*sb6URwUUJm?-`^Ch=WHj+W5-YtA{`koM`5z1OZ?J7VB%W_cD7^UT{jFZecf<>18nXSpspDbcn?1!U|& z$}bPv`PCOwj;@h49ug~&mqB{>3VKXUz!vh60*lCn$)fb=(z3F$shMHW4-F0ZjZT8n z?0Q4}w9kYOb2M~k98Bfv`SUdc-L6l)%IPHut_{OPrbk>}lxA&5fXO&=UMejwmr8pg z)~;JiwA8Xt&_W*Hy!OX*;HjaNjg5_$x9q*JI%o=IdEV@$`8-CHK)QT5<6Fe?Q_#H0 zg-1tA>l5}ef>(yO6Gb0NW=AXL`!BYhI+d#K5qB6J8Oh=V3Qm)SSv$T{mx9)Ag?Gbh zgBEBe?Iu;iTTOOt-`2v z^uHY#7-&e!^JsFxDuAxpc2Gk>f)w~k*dh-LQZg0gs?$$ah4%GuR#}g zYh>bfpzVF*Cv&;Hs0$HMQOiEo(jh*Vl^Pd|z9urUHgVp+b;Fh|TQs7lUW#T%S04JT zshnOdfG6U0=4nv@0Ra@sqr5yp9jv>%8&=Ej+>XBXe9Q3!ox67ypOG_wa?eS00=okkhg^YS}xaT1CuM<9FvQ zE?uOkE{??04eDR(;o#lOCXbAF7K>&vM>b-+<)gqoAPBl4gmFT(GxF-=q~B z64KPt(pwxhTXR*l$)6PNw^--2ZA0u;Rp@;r)pWJP@-kpZB_)n8DFMICWoSr4X|yGH zg-F)22(6|));(EHa?BXxuG#B&KY4pPeePrZt@Lqz>Q*Xz%|_q`582ECZb!}Lqyv_*Ak11S8`KI!tY%&uKGs~^HWYn74fppBqwZ_dQg#0#lDE93B2 zuWUthJdGv{`)K0OTS^yA-ZgFq9dg7hXeL|;>T&D5ZRBA|k8q{pB-wQ)OYlB zbeKIm5cYwcu52Uk{@kr>rp;3odS>6&r46w*+0K*KpR`XfyBym#gjGbULRg=4+tVGZ zs*p~fApozy;r_JKD?)A4wv*^fur#xv`+$Bj-#WFeMYzP=+GT2$AO#+u| zDNQ5q--FO3=5Vg9^F&lg-?z87XIoR}ghJuGFa(b;FTX{gKF-bU0yQhmB5H{(h!R%C zmh{|0B9WY9Oz*r=1ren3ht-1;Z`)DN2lJBQ*`D3&YIg=4+P1V#oaa?S9BI7UduEvn zIDi(*c1Qlrs4(HekGLsMjp&ZvUY{I}w3pKxMH#FGC)RhZ7uXlm!I@W4apT<6@0x8? z;`K&076o1&dyqZwetd?hS#PPn_JM&+IO?49ka|=^3JpY34AZABFSFo5-om?jD zVI^!ys90?Gp+^Y33pyt+bR5nIo9|+pIDjS^E&y%s)$Sr{D?$FqwkYALv-fmx20VNe z;0KN?Ih?p<1NYQHkncFxVd{Y)rwx*HIe~BpW1f?d<&@^HrI2^}hMc_2VvA*%Lp%!& ztWvk2AJ1#2QpPJ-w6kD9tNpo#EOxI{xbnJ|a}Dbfk;Q>j5f0*FEY0Rx1RKpHK9nQ>H#z%T@( zR0RS80wN_OGz&$#)JP3QS|CA62oRFopfhvMcc1Uv^W5{_eeS%^le}--JUv&GYEO?*j_EoUu4YZh;`0>5ZKC!fn zlVW0r#NdwCG1qObfV`1Gs-CxyUNF_LpkNWTn3$nSSg@ye01PAN1@na?i~uXOjQ~0L zEhB)lwvD%eN|7rTUxr>n&;&-)HO8K z)HT&KG*#5~K-xMWOXr`(Vru?}Fwrj~fFA}E3{q1I4GmQd)l@~IeAO=K z>+7qjYp7{xsE8<3(BTM-XP62CE&nG6QyAJC1rNr+kqEgxj-FmfEXD{RQuVV9LBW5q zMWFw{NraeMm}jus1y%Jun?4cV^8Sl17>f%0B>a}Q8Y~bN1VdoZBH9ao(FXe=F-Wu@ z^1opHSM$FJ5MgU$^OuZ&t4mPOUn0;LGn~kbKLGi+)M&@>V3-;NhDKsh-Y_$qNKN@a zt--*3{sYc`>AlzTFM7ek;Qs~bUdvyk!Jx}1m?s8_azr8n{~Z6Te*z(=p{1%Tcg`7( zxP=Tw1NYSUqXW#;69Y2>hwB&e zi2eLhS3_NNsa@Fn{-gcIf7AXS%}xlo2viM#+@6Pg#?e6(a6~}rXlrX~|MC7RJPa0i z-4rgu1N~VM4Ly;pPklbM-S|&!B7OE|^ruMzvV@~Wju!q$jBtR3{P7eBm-{p?K%U;8 zt?=G+N!TsGAFtv6`!u0Xxw}JD=3S8{1w(=2vICYiGucqrVdO@O!cvq=|#t|4Ayw$bJ*~W zlbgsALN|ef-noG6vdsPd=jNkE<_~UJ$-S%iA~qyd<#vev+1T4N8rP=5&1ULm(0uh5 zUrs(GcHF%g*lv5~IOO^-ufP2DHwEg|rk}o$lut0fl*YYc*Ms4*8hX&1?XtX(O==Q* zXe@akbBE7lPM|k$M6#;5gN~fgMr6sidkfaz*WU>Ijlkas{Efih2>gw}-w6EwgaG~s zxr{3^c#_6lGI_3*@DxRiIblyK)?X|-#qvDWe@s6oE+)pYRV8%dMP;43`*lmnndW9o zeZZPv9En7FutyXCU?Sots!;~bZu9#vAi0t?M;n=e!Cl=1UsXC=^GEy6SiL!9KeBI7 z0b5T8LQHitGNs_7BsQt?d5wA~eyD++ga``av|7V$5ex?Jc9PqsYEAY1hKU1WVm~dp zS6wydoM)G;8M8`{uDg%7Qh65mc1(?N+>smzT0bV4>@Y5);)EW|hiPXnN4x+6 z@~Omgz?@P={!vsn>&SzrOSoTwUc}<4jDA}5KR6SOilv_WZ;FY9?IUg&7AbSz+Pd41 zaEb#hEpr4W6xrJrTBQ%AEPkxhV0Z#6+w zg#fNr4Kk_F)9o^M+DW(K_o&{yf;F`Ql1~7=Xgx-{o}s5d%>ND$4d25D^|ELtq`vU9 zFHfoJ#>}v~j~c}ENd5b{gv&`@h9pcsc^Q^#P`Nq6C+R)UK2@8Ri*4q{nWeU zb)w+JV?GmH0=pK#TKY7EF1OW83-}bc{aVvk1c|lkmdz4@;^$jC<=5?3?whLUD zJaevKLB1BmssX2Kup}PbIBLL~Q23R5W;H4aKz5|9&TU`g$Z&h}N@}Z`?s|$&m2ic3Ii>B#vxI6I5Tn|UQ(e9JQ;-=BjQtks{KZQ#v5)(o(zZSp zduLm6HHv+@TBrKkHqkv<)Uc_sDfw0jStFg&?|ia3`{1%Dov(TZU}0)0oe4U!ASsAW z|Lw9(iGAy&M#xRZ!EEOW_xFj0E4$oGaeayJI+SX=$IBu+Zn`1&qy%5BJ@7`$~0BrU5#HGnVY#dMz>IOhOAGci@VjbW=Ht*2NpMN+H_7tA|jXjqmka zhM}|4_m*PLkh4lU#tu%vaCuAGRr1T11_#)$v>v`0v-v8~b4YI|l}3BL`l{c`jSdfv zIu7I770B+EN`1C7_^SR&-0=?aV+U5g^^sQJ0Nc|?=d&YyIIp+;wTuZnL#uv2q^SfS zel%g25noHs+_1jb1&AB(fU({O6&iu0ec~;Wtz%=LJ-QjVo=X1*%cpQAu3r^DVz_!8 zmDjz~f$iKsIcFiAoK}+1Avc&I51=fW_mp`&7(H2wxU}16F_tj5U+Hm~?lqMIVn0d! z^SGaO$jnXqh53TfI=`MbYQMGJibNAwu@CX8K|nBLSYq)5BHBw#x`l?Or#!TAP=gSI%#|w*SEK;lFL9~ z!qjPZdpAJRgKLNe?sP7fbPgLEKf1UXDj0a(n?58fc)#;Tb~J34+kQ*lq81q})C4eT zGEJLR8G)d4!`mudqfpXCem3Rb6W%Jevi+_`3XdppJAq!Pj^r8{~@_})Dd1b}G8 zYxJl*&!Ekgjpp{poUu2%GP*QmgQK{vQS*$8vQA%&vjke0y3G~WqvKx4f1_&8++?E$ z>{Dr`KqvmUO>}6$hvj`@laB=>6vy7?m&xE1y}H-Vcm)sV{wXKCS)7)OKBs6UeAq)k zw^nq=Pl?L{`%6}z^ivx7_bikZrI2;pk47t?9UF#`aR`0RA=@gY%YWO{-O#0)4uH6k z@?*lTDrDwlpEEceP%F98eKJJnd)=IYeoh5!{qq{UEZEMK|@4`k2jW z!6ODJ^rKMtQ9JjGQ(|J@_&YYAOND|}Vb>b*+ht|>{L)87tL0MT+-c#m;@ayc{ak)3 zN$9*{g74RTmJtP)DXUZ*;>@8vqBd@u&~S6{xu@A6zMDxT)6GO=S*YoU40JdAyNk=q z4O;5~)+1F*Y#EAMHJ#qDWsowcILZYkC61vM*p&IV{11i&E3WiV{*AaGPIGLrNbY z@!PDGomC^_qLz+=#&Q?Kkve1ieD?NT;SQrLYD%7PJA&7@eb_{=WNCE~2@*Vzm6nbU zG1cdEXB%>p8yf{%d`bHPt=Kc<`@TOc;E%p7NtfnD$^z87DDhYYHP2B?%FYM^%w4ZCjF}Y^V>y`YiU=D` zDiF?RLwA={?R_T)^5$P&vz}3-ayjKst-||>fwBQihV6qx=GG-g3o)~Q-Ew}_@r@g?HnjnVz4(tRyg2 z9Yl6q9-VL03!QnRTcLtacf-r?3_hpbp+a;A27&^$PDhIJjME2KpuK^Jf~gHG?+#jQ zFCWu;s^o-CYj`Qy>-;>WN099lKjW>IhSeXYZEO|rG+2hl_}$Zunn@&iFIp74Fi9|D zEy0jYUf+5*WxzNpY0vDc@W5|4PoSs78y!l{lu%S38|zyeL%uDjEwJ+5}9qgD&!NAoK5oK=#oYTLJ1}1cP$>6R67?w^`QfS zr`u)mCnbW6)~PWk*%uuF%qefnE?X;oK)%f#TqEL|Ni5a%V1&z#Dl_JsKK2K^C`%H> zu~)>I7~-hPy~Z6hHT>0AKZ&B)%Xa4<_U&HkRI?crd2sxwF8K;YwZw$qS^+Qbu&`}l zM#|?*&@h`0!nw92p&CnT?#`??x2`HHFhe+oG!*_()1mZU2+`NM00m< zH{L+HLmL)n#aj{4Yw{-BW3mE>yNf%OuR@8M=M|B?L+g3-+0+@|?45T>Zic+;rRL$= z3)AH(PBI0C@vi;ty>A%1Mud&gb17XQv#%f2Fa=Qc7&){FM~CeHgtj`dT5iy{78`S} zzoe@*YGtf7+6yH}X3^M}da1K5JGva`6V!)Sif-KXeL>@cb_FqxW{$prejH_O(n=}StOp%MP^3c!fauxFy{el)5-nFUDpmu-Sm`)K+wi? zD38DeaF*Lw9paT+*Zs;_O62@}nmx1a!|Pl)Z3uDtOvM6NE}Q_ zV9g6Y?D9=0f;$pqQ3^;K&ZD#q>#Sqbx3KDp;n$kRTB<6hI^D5LVW}tV$%vNVygrU& z4)K-oYyF(kT5?@l$MyY7J7^Vwv*>`BPWoMb9utIb{#fjC9qKQIPK;Q8&72n!v}HuG zukH0zN-H~jY2jU4fr%igHu9Y7yiC+Wc66(Q>~?H5f3t;pIEp1MoObgyS+(OCh^Ckb zo-!NVZk%uP$Q|GA?Cq4n`K*Umsv&U^FB(?gMrRm3DjBrS-fl#V)Vk=cgs6+=8-A_J z1gavPWC?Ui8Ena%&4MlppMW=_)9w4H}+bFyB z1=0LQm43MCse+S-`mscKN;wNvF-kQB>qDG&f_^)6`U`HT3zO}~c5VSnraWxX0$4aw z-85)zoXw@{B*eajj^%^RRp7n-lUmF+HQz&-bR$yPN!(gDdVQG{wmq;U*hxTcrO(Lg zCP^^#qDF;|c9i^dsqB^1^q^qhi#LJgH~}?*Bc8kNo4+Jnel5Ejs97!EC|pM$2s%c| zy?k$l&-O0cMy7dlTF^a&4cXG@MT+&Q^LMdM+~E_KB(k<;LKg8Xtme*%WFLo!c}y~j zN!j1+_LGsptNrij3j5T>#LhrZHMx28H{BdjJ`rGkHG!0_T?zm|PN~RxfUu$d8Wf<~ zSn#|wgQMxYA|#;|^D8x@#-#1$2JR-ILq{4)mllVHc7_#YU2f>V2;ML)HBUz6Sz@Ej z(?%;phl059(eaz5A7R`v*0t2E(-umESd0msB61I{)UN&v0KnOv4x|B_fPfy564rSd z3eLNs1qF~TQ@`Ab_;GKScR)Ee$|}#$!=HzBOt|*VIL>387Fd=o>^yu;c6YM9q)bM- z;R4`nfN%Czg6yz6VXZ}%9~#7K&Q)yK9#^I`=7*=FsxWJ0#TCBzJw!N+;TvaZkL6x( zE_J#C(Y#RIv@_St@zpUGkDqzdYGJJ`ZlAV)2{e1mo|RbXyAPHa3MBT$l@| znyO0P)_&XK#;dlaR>ntZAM6E^9Z50A3i;YjR3Zct=Li7brzJ8U+VUp#EtK@lQVy4* zm9S9jW;Rs&6WWeNMZ;%$11`7ct{$PNWQ4UXUrl^^=n);lT--SyWdlqiJwOtgUmpp@ zu+|se70$W}Q&!7e5A)622_N+eTygpwMsZPEAmYPpuMKjmma}b9ASIKP#p@el&cJB( z^qBd>(bEcpPttW{wzmf9r#x`BY`l7AQ4A>ccigY#Z)8v(K<0!g^rL`Oh-qrmOS<$Y zwXTDcOG~0%3Rb5shc>{&$QGU1=Ny$f}oeSM0Bd-0JSse2;C+?{{ z8A6v-m>naU+tC)Aa<#zvWSh#~w zAK1uj10w1}ov6Yy`d%mP(lqlQ79xiu)ec|eDgel1%Rh`grKlQnd5vLH5`y8^?XhnC zKaGB06TaP4PUm;^mKy-37m5Y(qSYvyw@Hv6eS8C)@Q@2eY2}I!{$Txt5zJ+ z&(V?$)s)an)6U{0IVdHg3gw%hHPz?6y7Z1`e5lmsb1r05P!MHAHUwdq?^tE^Y55f- zRuqM&Tl4x=e#$luZV19#3#%t4t`k0_6!#ccJl8kU%Ir*2Ib*z;))@6+qVYs>pC25* z#@^iW3)vZ1a1#^tpr@4v4cg<|Ly!#~*eq~ylCxAJ5kdYd_*&F|K13R!p+tYb? z=xu6k7d*ILQtW`(%Zmy9=jH?aoF?nSK5TVN++eoN4c~i!*mdZ7r8KMLR8ds`aioH0 znqP&(i0jZJXmD-@I!pX}3w`>wzq~-p<+@%JZ+U-8LP@KMc02Wow>JTe!$-3E4hRwa zayxU=fs~ks3dKwC`faFb+>4`5Z9!=|7KQ1sOx{=^-I-LL1&gwdd&-R+mP%W9aJ4qd zLO$4OpVwgPxE9IJS{B|w#xKQx%1h3-!a6+5PM&UjNv;f^`uIeuadD9mzA{}HIU*Lu zZ7}QYoM+|KKmdKO+iFGoW`C0_R2M^9@R~wyszXm?9lY}SJ2HBytz{&)QTIl)57!cG zl<6Mfj}lD9#6*lhqu%+P0&0KTkqltM2Vm7Iz4%ph(MVSo#vR^*+_~80?qr~}8`B2!i1AY0iA5pW?$@sy zL!6wX(uOL`v7^We1tffCly)RKy*6`moAG-ZCdAer%-%f6o;yTw2)9PO`EatOziT{o zVdkR-#ds)-(t(|HNiUHQssJU4Mz5YSCfI|Q8Kx~g7Xt-f0kFo@pMK>&f4``= zJUyKRqg92^{rnWt>9d>fhZ8xyui`jepqmaTsCYT#31Zrz2rENNd&S2Nm;l}?vQB`z5%y^)v1YL^xly9j}5vPKy0C?MwwWk{x0 zxR}IubOA+tU{mTBB85HH9y`}5`HplwvqVVF0M@i=r-fWeHI`9RJ+C(3>$Qlebe*P3 zdl3C78ZvkL6?{UIMK$A$T&=<0uFA=U;+kTb>wTJjE_>4sY!4>-t#u}kXj6Qg2J?mP zNuM1DIIE$%g1PxzJZQ18E1U2#-eWGe!Jl$PmoCHOa}t-zOfdgLB-5QXEjBK2E7tnO-g!P^Yp}4{Rx5Pft z(wkDo6U@4L7=Sl+l1FE~D1dB<#Z(JuT@NUtYcU)%LO8<;($mns>GF#<|o! z)!zrtV^aZ;f#kLGbOVy7?S)3pF}nEYY@t2by2=2r@+O=2>x*@1)~bK@0a)X&C`NU= zevis8seMB`RFf@dV3JM`9>?32Z)Nk>lTr252)2WexA~~YsSsSq)XXIlBi5%kht;xn z`=f*2q1*aPlvwru*a+PG=(qYV-aT@m8JU5|FyYk-Z?WQKOVds;F-v{78&@6MbsJ{y z_4|eN*lu3SPwz3@T4;>4OU*fzP_#N7`2C!r?84>~IJ<$QvlG;)J3rX3^S(%zYW5EX3+Il2 zNgWu}YGHz=#6U{b;9=u;XHHAgRz;P*XB4`#39opbEtD#ZUq3W+j?=PTWno+{*pfZZ zzuO8rU}Qn@JDnC2p{uVLC##iGxbi^eg7^i>Qi-*K*NaDMeunObTBo?_Cs$U((uV8MaMo}x@Xg&q+hlN?!HVLn zziReahyIS17X91LLj&f`n&xJHQCEDGi>k+FvU};!r?tFiYz?59X(2_FoN^Krg~2@P zJ>6_UF2v5EyLaFl=Xhl`8glA`o5+~?9>Q9*b)lQK68Rw_!!>$Yw4*#8;2}sN$?TM9 zxnx1Z3=y?zqG=FcEKwId6h?ROi@MgKn}MH+WG1Zp8t;0i+Y!z>*H(~WyiVV2ypVA! zGi)(Aa-tkFS}bK3ec4?P|Hv1@WUwrYi>r-MMoDJh$8FM$+6F?~;&ut5g`V1YT}+fX5Cp#N1gt_iIwUyO z^Cst8K}Q`l=t{l(bb#|e-StD>EJaUF`$l7DRv8Rop8{a5ulKY&_rN`NREMZWdxJ1} zKxEjvNmZJ`Nz89j-^gy~n~=cNk3s?D5yB&Xo~;VVF>N30TkU;vy1%d7(B;aY9z7G zpO5h2jE$Z>Q=0x}af8dhM_?xhB!5aOnCrqN0=3g_Bj}g%`AqpSvfOCuud%#=44jX zj=QAdJWDpcY{cj))!K|+^)IAVS(OG7b=;S8YYnx|zl@AWSzP3n7FJ7+({A>jb+>l7 zI%b+iIHtq-dC{F7AVJciY+m;#9Vn($>oOPT{OW$UhzDXx)`K_abF}JGRbK>AzEUM; z3r3;mLJ7-ZzecLhEwwc$tVW34{b)IJxeg} z$nCw9r$lzl(dr1r&UV)d+&R?C-K2W1}mmSTn>ps6TF1f=FT}Nw1 zjUq;~VYt+eAS^WPdcNtEP-woELZ<@r+-N$S=Hw)P!DYGVaqY7Zp&XM@>T zb|hIjTj8!6+7~*yHzFS|Jxt%`rT*GbJ2PQ)ynt{h?BwEuSKRlR1ItnDh+cdeu5u~v z_C3$wxa}rntWgU+$%x}TEX3VyW8#eFj1MJdrqX#2E_tYGj&)A5oROskuJ+Z%b&f?! zPPq%E`e*P465)-zTi-JKsE9B3>X?tgPN@(`?R;S3Lz~X=ekexo>!y*H!9CZDd+z4v ze?c>qYUb=?j=gX)h{%ji-uwzCzoQ*@~ta}W9N*^-FymJFP2ce=2sQh!|A_`v_fgpkHCo#a9~O6t@@%C z@xhw$AAneK|E{=np5Rcc!??u|Fl}RP&}<%RU5aQ#i2khsZig;cI>Zra$o1BA7T#w* zUkfjFJ7w-gO(fLI*Jgdp%DMl|w~=F-!y~$5-}3Xv=XhD^KBEUq4ZttTA}S*%E{5W4 z^(k$W8kqz$@yg9*&Md~(q-VCHDx%v0(wA3V2)@e|!w zZQ#x|pfH2}vM-%R?i3zk)CyCn*tA32bM_y|sckTsI)%j9&ucvP&K`u%L&4`VQ6 zyNc*ylJpev`||^Jc5*{4c@^z5uY@}@L0@Ft^ROwVp46Y6Q--kRV+59=_?3_0VY%oK z_IVrV-PAt9^|6V|-8`qO9?i$c#w%+%mOxZohCB%>TA-IeV4wn|*5YILJg5Zl4;q^qFm4Cn>uLsjg5O(QgF^b}fQ}W8V@6SI2s$Qien1Z@bDq z)6JBcH~(#CxDlIYZyFn+2>=IT6=vd-A*NLpLsyr@#r~hUUTV(@4>$=J&R_oG!QRu_ N%FNcZ^wP~={uj8u7)t;E literal 0 HcmV?d00001 diff --git a/assets/cn/os_handler/STORAGE_REPAIR_CONFIRM.png b/assets/cn/os_handler/STORAGE_REPAIR_CONFIRM.png new file mode 100644 index 0000000000000000000000000000000000000000..55f3867ce8215f61d8c37c736dd54280268dfff6 GIT binary patch literal 8655 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 literal 0 HcmV?d00001 diff --git a/assets/cn/os_handler/TEMPLATE_STORAGE_SHIP_SELECTED.png b/assets/cn/os_handler/TEMPLATE_STORAGE_SHIP_SELECTED.png new file mode 100644 index 0000000000000000000000000000000000000000..8072709a112d7d9e2b5f54943db7fc498b49ac96 GIT binary patch literal 1834 zcmbVN3ry5z9509tP!@d7n7MV87-YNa>rS}J@sMM3+YX2_MA?*H`yJG~YfD?WJGPw>PF#5eRL?cLQx?g5FH_%WgC>2C2cD?Oe3>A1QHrwnV9C8*Y6LP8) zFsmxJfU9zI79LAaLsR_>B=7=_Mg3lns4{*l7UX5%T7QjWXb_^gtyrdR5G``#qgj#y zP>Yc?a0Ef3$rdATmJDO%GD(xvGU;Ea z!=E290AuTLgl#<57q2&LLe;V>p^Q*K9*b5B0y4m70#&L|IFMZl-JGPWk(n$7u$rV4 zNRnqTQ~84~qm;>*j3&+&L|*c#Qy$s?Y^(;X7|fa(=F31*1*D0gNQR(ahUp`S0jNXb z1y|s)P>La_N1(7~cvfSd2v?J(z2WqdU~&W%CMyu?h*_XKwDJgOunHKK)2rKxae7(-kA+?fPaS~) zT3;D}r2mob0hlVeG#{&g%u*PwCzcZqoyYY)9MFOPQ)2MjLp?hPhl4<0hDQ*52oEtJ z!pWt;5p``?eI0^CoVVLD3lba5^HuYmeOAN{M!m5eSwGPQx zvoiN&buY1}u4~Emy}g0!p4MH%?;UCP)g3;R_h4#7_q6_=+74{>^3R`*-gNH5SN*qo zy4v!#T|_%~M($eQ_km_eO?|ib_=-i&%-83RLNn^)qh_?7Y`L}I=kC=TcZ`i$yme7z z@jAYIRQDmiNaTyb_bK_VQie{%Dt(-eVb-R3AULW9Q}(_WIa08@KK6IdQY8WquU$ zMS17G#_Tx?+0;?ofp@+&Wn@qHp|r-M)d^$Yo5kF1Kf%0xd;Zzc-7PY`>V8D}kb}$q TJaBG~{x`E{=h~X4mn{Ap!orU3 literal 0 HcmV?d00001 diff --git a/config/template.json b/config/template.json index 141edc078..346ce52f2 100644 --- a/config/template.json +++ b/config/template.json @@ -1806,6 +1806,8 @@ "BuyActionPointLimit": 0, "OilLimit": 1000, "RepairThreshold": 0.4, + "UseRepairPack": false, + "RepairPackThreshold": 0.9, "DoRandomMapEvent": true, "AkashiShopFilter": "ActionPoint > PurpleCoins" }, diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 581c28b7a..fe0614fc7 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -9062,6 +9062,14 @@ "type": "input", "value": 0.4 }, + "UseRepairPack": { + "type": "checkbox", + "value": false + }, + "RepairPackThreshold": { + "type": "input", + "value": 0.9 + }, "DoRandomMapEvent": { "type": "checkbox", "value": true diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index b4b217ae7..ed92b382a 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -697,6 +697,8 @@ OpsiGeneral: option: [ 0, 1, 2, 3, 4, 5 ] OilLimit: 1000 RepairThreshold: 0.4 + UseRepairPack: false + RepairPackThreshold: 0.9 DoRandomMapEvent: true AkashiShopFilter: |- ActionPoint > PurpleCoins diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 850239f55..043da87f5 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -395,6 +395,8 @@ class GeneratedConfig: OpsiGeneral_BuyActionPointLimit = 0 # 0, 1, 2, 3, 4, 5 OpsiGeneral_OilLimit = 1000 OpsiGeneral_RepairThreshold = 0.4 + OpsiGeneral_UseRepairPack = False + OpsiGeneral_RepairPackThreshold = 0.9 OpsiGeneral_DoRandomMapEvent = True OpsiGeneral_AkashiShopFilter = 'ActionPoint > PurpleCoins' diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index a2cbd9072..5f28ed113 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -2402,6 +2402,14 @@ "name": "Repair Threshold", "help": "After completion of an OpSi map; if any one ship's HP is below threshold, retreat back to nearest port for repairs\n0.0 ~ 1.0" }, + "UseRepairPack": { + "name": "Use Repair Pack", + "help": "Ships will be repaired using the repair packs in storage. It is recommended to use this feature in conjunction with CL1 leveling." + }, + "RepairPackThreshold": { + "name": "Repair Pack Threshold", + "help": "If any one ship's HP is below threshold, use repair packs for repairs\n0.0 ~ 1.0" + }, "DoRandomMapEvent": { "name": "Do Random Map Events", "help": "Rescan the whole map after auto search, purchase akashi's shop, use siren logging tower, use siren scanning device, unlock mechanism that require 2 fleets," diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 662821928..308260d85 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -2402,6 +2402,14 @@ "name": "OpsiGeneral.RepairThreshold.name", "help": "OpsiGeneral.RepairThreshold.help" }, + "UseRepairPack": { + "name": "OpsiGeneral.UseRepairPack.name", + "help": "OpsiGeneral.UseRepairPack.help" + }, + "RepairPackThreshold": { + "name": "OpsiGeneral.RepairPackThreshold.name", + "help": "OpsiGeneral.RepairPackThreshold.help" + }, "DoRandomMapEvent": { "name": "OpsiGeneral.DoRandomMapEvent.name", "help": "OpsiGeneral.DoRandomMapEvent.help" diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 036742bcb..e81662749 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -2402,6 +2402,14 @@ "name": "任意舰船血量低于 X 后,回港修理", "help": "0.0 ~ 1.0" }, + "UseRepairPack": { + "name": "使用维修箱修船", + "help": "开启后,将使用仓库内的维修箱修船,建议配合侵蚀1练级功能使用" + }, + "RepairPackThreshold": { + "name": "任意舰船血量低于 X 后,使用维修箱修理", + "help": "仅在开启“使用维修箱修船”时生效\n0.0 ~ 1.0" + }, "DoRandomMapEvent": { "name": "完成地图随机事件", "help": "在自律寻敌完成后重新扫描一遍地图,购买明石商店,使用塞壬信息收集装置、使用塞壬探测装置、解锁两舰队机关" diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index aa4ed2ba5..c18b3cd38 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -2402,6 +2402,14 @@ "name": "任意艦船血量低於 X 後,回港修理", "help": "0.0 ~ 1.0" }, + "UseRepairPack": { + "name": "使用維修箱修船", + "help": "開啟後,將使用倉庫內的維修箱修船,建議配合侵蝕1練級功能使用" + }, + "RepairPackThreshold": { + "name": "任意艦船血量低於 X 後,使用維修箱修理", + "help": "僅在開啟“使用維修箱修船”時生效\n0.0 ~ 1.0" + }, "DoRandomMapEvent": { "name": "完成地圖隨機事件", "help": "在自律尋敵完成後重新掃描一遍地圖,購買明石商店、使用塞壬信息收集裝置、使用塞壬探測裝置、解鎖兩艦隊機關" diff --git a/module/os/fleet.py b/module/os/fleet.py index aae93cd19..f26374a36 100644 --- a/module/os/fleet.py +++ b/module/os/fleet.py @@ -22,7 +22,8 @@ from module.os.camera import OSCamera from module.os.map_base import OSCampaignMap from module.os_ash.ash import OSAsh from module.os_combat.combat import Combat -from module.os_handler.assets import AUTO_SEARCH_REWARD, CLICK_SAFE_AREA, IN_MAP, PORT_ENTER +from module.os_handler.assets import (AUTO_SEARCH_REWARD, CLICK_SAFE_AREA, IN_MAP, PORT_ENTER, + STORAGE_REPAIR_ICON, TEMPLATE_STORAGE_SHIP_EMPTY) from module.os_shop.assets import PORT_SUPPLY_CHECK from module.ui.assets import BACK_ARROW @@ -169,6 +170,9 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): return hp_grid + def _storage_hp_grid(self): + return ButtonGrid(origin=(185, 553), delta=(167, 0), button_shape=(99, 4), grid_shape=(6, 1)) + def hp_retreat_triggered(self): return False @@ -196,6 +200,41 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): return self.hp + def _storage_hp_get(self): + super().hp_get() + if self.appear(STORAGE_REPAIR_ICON, offset=(20, 20)): + need_repair = [not repair for repair in self.hp_has_ship] + for index, repair in enumerate(need_repair): + if repair: + self._hp[self.fleet_current_index][index] = 0 + + ship_icon = self._hp_grid().crop((-29, -165, 106, -30)) + has_ship = [not TEMPLATE_STORAGE_SHIP_EMPTY.match( + self.image_crop(button, copy=False)) for button in ship_icon.buttons] + for index, ship in enumerate(has_ship): + if ship: + self._hp_has_ship[self.fleet_current_index][index] = True + + self.need_repair = [all(repair) for repair in zip(need_repair, has_ship)] + logger.attr('Repair icon', self.need_repair) + logger.attr('HP', ' '.join( + [str(int(data * 100)).rjust(3) + '%' if use else '____' + for data, use in zip(self.hp, self.hp_has_ship)])) + else: + logger.attr('Repair icon', self.need_repair) + + def storage_hp_get(self): + """ + Calculate current HP in page STORAGE_CHECK, also detects the wrench (Ship died, need to repair) + """ + origin = self._hp_grid + self._hp_grid = self._storage_hp_grid + try: + self._storage_hp_get() + finally: + self._hp_grid = origin + return self.hp + def lv_get(self, after_battle=False): pass @@ -487,6 +526,18 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): else: return False + def storage_fleet_set(self, index=1, skip_first_screenshot=True): + """ + Args: + index (int): Target fleet_current_index + skip_first_screenshot (bool): + + Returns: + bool: If switched. + """ + logger.hr(f'Fleet set to {index}') + return self.storage_fleet_selector.ensure_to_be(index) + def parse_fleet_filter(self): """ Returns: diff --git a/module/os/map.py b/module/os/map.py index c9ffbc62f..5aa6b5f9f 100644 --- a/module/os/map.py +++ b/module/os/map.py @@ -11,17 +11,18 @@ from module.handler.login import LoginHandler, MAINTENANCE_ANNOUNCE from module.logger import logger from module.map.map import Map from module.os.assets import FLEET_EMP_DEBUFF, MAP_GOTO_GLOBE_FOG -from module.os.fleet import OSFleet +from module.os.fleet import OSFleet, BossFleet from module.os.globe_camera import GlobeCamera from module.os.globe_operation import RewardUncollectedError from module.os_handler.assets import AUTO_SEARCH_OS_MAP_OPTION_OFF, AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED, \ AUTO_SEARCH_OS_MAP_OPTION_ON, AUTO_SEARCH_REWARD, OS_SUBMARINE_CHECK +from module.os_handler.storage import StorageHandler from module.os_handler.strategic import StrategicSearchHandler from module.ui.assets import GOTO_MAIN from module.ui.page import page_os -class OSMap(OSFleet, Map, GlobeCamera, StrategicSearchHandler): +class OSMap(OSFleet, Map, GlobeCamera, StorageHandler, StrategicSearchHandler): def os_init(self): """ Call this method before doing any Operation functions. @@ -258,6 +259,111 @@ class OSMap(OSFleet, Map, GlobeCamera, StrategicSearchHandler): self.hp_reset() return False + def handle_storage_one_fleet_repair(self, index, threshold): + """ + Args: + index (int): fleet index + threshold (int): repair threshold + + Returns: + bool: If repaired. + """ + self.storage_fleet_set(index) + self.storage_hp_get() + hp_grids = self._storage_hp_grid() + check = [round(data, 2) <= threshold if use else False + for data, use in zip(self.hp, self.hp_has_ship)] + if any(check): + logger.info(f'At least one ship in fleet {index} is below threshold ' + f'{str(int(threshold * 100))}%, ' + 'use repair packs for repairs') + for index, repair in enumerate(check): + if repair: + self.repair_pack_use(hp_grids.buttons[index]) + logger.info(f'All ships in fleet {index} repaired') + self.hp_reset() + return True + else: + logger.info(f'No ship in fleet {index} found to be below threshold ' + f'{str(int(threshold * 100))}%, ' + 'continue OS exploration') + self.hp_reset() + return False + + def handle_storage_fleet_repair(self, index=None, revert=True): + """ + Args: + index (None|int|list[int]): fleet index + revert (bool): If go back to previous zone. + + Returns: + bool: If repaired. + """ + logger.hr('OS fleet repair by repair packs') + if index is None: + index = self.fleet_current_index + if isinstance(index, int): + index = [index] + if not isinstance(index, list): + logger.warning(f'Unknown fleet index: {index}') + return False + if self.config.OpsiGeneral_RepairPackThreshold < 0: + return False + + repair = False + success = False + if self.storage_get_next_item('REPAIR_PACK'): + for fleet_index in index: + if self.handle_storage_one_fleet_repair(index=fleet_index, + threshold=self.config.OpsiGeneral_RepairPackThreshold): + success = True + if any(self.need_repair): + repair = True + self.storage_repair_cancel() + self.storage_quit() + + if repair: + success = self.fleet_repair(revert=revert) + + return success + + def handle_fleet_repair_by_config(self, index=None, revert=True): + """ + Args: + index (None|int|list[int]): fleet index + If None, fixed fleet in OpsiFleetFilter_Filter before current fleet, + E.g.: OpsiFleetFilter_Filter = 'Fleet-1 > CallSubmarine > Fleet-3 > Fleet-4 > Fleet-2' + current fleet is fleet 1, repair fleet 1 and submarine fleet + current fleet is fleet 4, repair fleet 1, submarine fleet, fleet 3 and fleet 4 + If int, the number of fleet index + If list, a list of numbers of fleet index + revert (bool): If go back to previous zone. + + Returns: + bool: If repaired. + """ + if self.config.OpsiGeneral_UseRepairPack and self.config.SERVER not in ['cn']: + logger.warning(f'OpsiDaily.SkipSirenResearchMission is not supported in {self.config.SERVER}') + self.config.OpsiGeneral_UseRepairPack = False + + if self.config.OpsiGeneral_UseRepairPack: + if index is None: + fleet_current_index = self.fleet_selector.get() + submarine_fleet = self.storage_fleet_selector.SUBMARINE_FLEET + fleet_all_index = [fleet.fleet_index if isinstance(fleet, BossFleet) else submarine_fleet + for fleet in self.parse_fleet_filter()] + index = [] + for fleet_index in fleet_all_index: + index.append(fleet_index) + if fleet_current_index == fleet_index: + break + if submarine_fleet in fleet_all_index and submarine_fleet not in index: + index.append(submarine_fleet) + logger.attr('Repair Fleet', index) + return self.handle_storage_fleet_repair(index=index, revert=revert) + else: + return self.fleet_repair(revert=revert) + def fleet_resolve(self, revert=True): """ Cure fleet's low resolve by going diff --git a/module/os/map_fleet_selector.py b/module/os/map_fleet_selector.py index 0a50f5876..3d0b439e5 100644 --- a/module/os/map_fleet_selector.py +++ b/module/os/map_fleet_selector.py @@ -3,6 +3,7 @@ from module.base.timer import Timer from module.base.utils import * from module.logger import logger from module.os.assets import * +from module.os_handler.assets import * from module.os_handler.map_event import MapEventHandler @@ -13,6 +14,7 @@ class FleetSelector: FLEET_BAR_SHAPE_Y = 42 FLEET_BAR_MARGIN_Y = 11 FLEET_BAR_ACTIVE_STD = 45 # Active: 67, inactive: 12. + FLEET_LIST = [FLEET_1, FLEET_2, FLEET_3, FLEET_4] def __init__(self, main): """ @@ -28,7 +30,7 @@ class FleetSelector: Returns: int: Index of current fleet, 1 to 4. return 0 if unrecognized. """ - for index, button in enumerate([FLEET_1, FLEET_2, FLEET_3, FLEET_4]): + for index, button in enumerate(self.FLEET_LIST): if self.main.appear(button, offset=(20, 20), similarity=0.75): return index + 1 @@ -70,7 +72,7 @@ class FleetSelector: data = self.parse_fleet_bar(self.main.image_crop(self._bar, copy=False)) return data - def get_button(self, index): + def get_button(self, index, numbers=5): """ Convert fleet index to the Button object on dropdown menu. @@ -80,7 +82,7 @@ class FleetSelector: Returns: Button: Button instance. """ - index = 5 - index + index = numbers - index area = area_offset(area=( 0, (self.FLEET_BAR_SHAPE_Y + self.FLEET_BAR_MARGIN_Y) * (index - 1), @@ -88,7 +90,7 @@ class FleetSelector: (self.FLEET_BAR_SHAPE_Y + self.FLEET_BAR_MARGIN_Y) * (index - 1) + self.FLEET_BAR_SHAPE_Y ), offset=(self._bar.area[0:2])) area = area_pad(area, pad=3) - index = 5 - index + index = numbers - index return Button(area=(), color=(), button=area, name='%s_INDEX_%s' % (str(self._bar), str(index))) def open(self, skip_first_screenshot=True): @@ -210,8 +212,36 @@ class FleetSelector: logger.warning('Unknown OpSi fleet, use current fleet instead') return False +class StorageFleetSelector(FleetSelector): + FLEET_LIST = [STORAGE_FLEET_1, STORAGE_FLEET_2, STORAGE_FLEET_3, STORAGE_FLEET_4, STORAGE_FLEET_5] + SUBMARINE_FLEET = 5 + + def __init__(self, main): + """ + Args: + main (OSFleetSelector): Alas module + """ + self._choose = STORAGE_FLEET_CHOOSE + self._bar = STORAGE_FLEET_BAR + self.main = main + + def bar_opened(self): + # Check the 3-13 column + area = self._bar.area + area = (area[0] + 3, area[1], area[0] + 13, area[3]) + # Should have at least 2 gray option and 1 orange option. + return self.main.image_color_count(area, color=(200, 207, 231), threshold=221, count=400) \ + and self.main.image_color_count(area, color=(214, 150, 96), threshold=221, count=150) + + def get_button(self, index): + return super().get_button(index, 6) + class OSFleetSelector(MapEventHandler): @cached_property def fleet_selector(self): return FleetSelector(main=self) + + @cached_property + def storage_fleet_selector(self): + return StorageFleetSelector(main=self) diff --git a/module/os/operation_siren.py b/module/os/operation_siren.py index 286668f7e..ea9d381b5 100644 --- a/module/os/operation_siren.py +++ b/module/os/operation_siren.py @@ -203,7 +203,7 @@ class OperationSiren(OSMap): result = self.run_abyssal() if not result: self.map_exit() - self.fleet_repair(revert=False) + self.handle_fleet_repair_by_config(revert=False) else: break @@ -685,7 +685,7 @@ class OperationSiren(OSMap): if not result: raise RequestHumanTakeover - self.fleet_repair(revert=False) + self.handle_fleet_repair_by_config(revert=False) self.delay_abyssal() def os_abyssal(self): @@ -760,9 +760,7 @@ class OperationSiren(OSMap): logger.info('Already in azur port') else: self.globe_goto(self.zone_nearest_azur_port(self.zone)) - self.handle_fleet_repair(revert=False) - else: - self.fleet_repair(revert=False) + self.handle_fleet_repair_by_config(revert=False) self.handle_fleet_resolve(revert=False) def os_stronghold(self): @@ -914,7 +912,7 @@ class OperationSiren(OSMap): # end logger.hr("Month Boss repair", level=2) - self.fleet_repair(revert=False) + self.handle_fleet_repair_by_config(revert=False) self.handle_fleet_resolve(revert=False) self.month_boss_delay(is_normal=is_normal, result=result) diff --git a/module/os_handler/assets.py b/module/os_handler/assets.py index 1a2d1b465..ac6d9d637 100644 --- a/module/os_handler/assets.py +++ b/module/os_handler/assets.py @@ -63,6 +63,16 @@ RESET_TICKET_POPUP = Button(area={'cn': (363, 240, 455, 258), 'en': (384, 231, 5 STORAGE_CHECK = Button(area={'cn': (122, 15, 203, 40), 'en': (139, 14, 254, 41), 'jp': (120, 14, 212, 40), 'tw': (121, 14, 205, 40)}, color={'cn': (162, 178, 214), 'en': (107, 121, 161), 'jp': (97, 108, 143), 'tw': (163, 178, 213)}, button={'cn': (122, 15, 203, 40), 'en': (139, 14, 254, 41), 'jp': (120, 14, 212, 40), 'tw': (121, 14, 205, 40)}, file={'cn': './assets/cn/os_handler/STORAGE_CHECK.png', 'en': './assets/en/os_handler/STORAGE_CHECK.png', 'jp': './assets/jp/os_handler/STORAGE_CHECK.png', 'tw': './assets/tw/os_handler/STORAGE_CHECK.png'}) STORAGE_COORDINATE_CHECKOUT = Button(area={'cn': (554, 493, 726, 550), 'en': (560, 495, 725, 549), 'jp': (562, 492, 728, 552), 'tw': (555, 493, 725, 551)}, color={'cn': (92, 141, 203), 'en': (98, 146, 206), 'jp': (92, 142, 204), 'tw': (92, 142, 204)}, button={'cn': (554, 493, 726, 550), 'en': (560, 495, 725, 549), 'jp': (562, 492, 728, 552), 'tw': (555, 493, 725, 551)}, file={'cn': './assets/cn/os_handler/STORAGE_COORDINATE_CHECKOUT.png', 'en': './assets/en/os_handler/STORAGE_COORDINATE_CHECKOUT.png', 'jp': './assets/jp/os_handler/STORAGE_COORDINATE_CHECKOUT.png', 'tw': './assets/tw/os_handler/STORAGE_COORDINATE_CHECKOUT.png'}) STORAGE_ENTER = Button(area={'cn': (770, 636, 880, 699), 'en': (761, 640, 876, 695), 'jp': (757, 636, 880, 699), 'tw': (618, 638, 725, 698)}, color={'cn': (240, 199, 121), 'en': (238, 191, 115), 'jp': (237, 187, 100), 'tw': (240, 197, 125)}, button={'cn': (770, 636, 880, 699), 'en': (761, 640, 876, 695), 'jp': (757, 636, 880, 699), 'tw': (618, 638, 725, 698)}, file={'cn': './assets/cn/os_handler/STORAGE_ENTER.png', 'en': './assets/en/os_handler/STORAGE_ENTER.png', 'jp': './assets/jp/os_handler/STORAGE_ENTER.png', 'tw': './assets/tw/os_handler/STORAGE_ENTER.png'}) +STORAGE_FLEET_1 = Button(area={'cn': (306, 637, 332, 663), 'en': (306, 637, 332, 663), 'jp': (306, 637, 332, 663), 'tw': (306, 637, 332, 663)}, color={'cn': (53, 49, 57), 'en': (53, 49, 57), 'jp': (53, 49, 57), 'tw': (53, 49, 57)}, button={'cn': (306, 637, 332, 663), 'en': (306, 637, 332, 663), 'jp': (306, 637, 332, 663), 'tw': (306, 637, 332, 663)}, file={'cn': './assets/cn/os_handler/STORAGE_FLEET_1.png', 'en': './assets/cn/os_handler/STORAGE_FLEET_1.png', 'jp': './assets/cn/os_handler/STORAGE_FLEET_1.png', 'tw': './assets/cn/os_handler/STORAGE_FLEET_1.png'}) +STORAGE_FLEET_2 = Button(area={'cn': (306, 637, 332, 663), 'en': (306, 637, 332, 663), 'jp': (306, 637, 332, 663), 'tw': (306, 637, 332, 663)}, color={'cn': (57, 52, 57), 'en': (57, 52, 57), 'jp': (57, 52, 57), 'tw': (57, 52, 57)}, button={'cn': (306, 637, 332, 663), 'en': (306, 637, 332, 663), 'jp': (306, 637, 332, 663), 'tw': (306, 637, 332, 663)}, file={'cn': './assets/cn/os_handler/STORAGE_FLEET_2.png', 'en': './assets/cn/os_handler/STORAGE_FLEET_2.png', 'jp': './assets/cn/os_handler/STORAGE_FLEET_2.png', 'tw': './assets/cn/os_handler/STORAGE_FLEET_2.png'}) +STORAGE_FLEET_3 = Button(area={'cn': (306, 637, 332, 663), 'en': (306, 637, 332, 663), 'jp': (306, 637, 332, 663), 'tw': (306, 637, 332, 663)}, color={'cn': (62, 56, 57), 'en': (62, 56, 57), 'jp': (62, 56, 57), 'tw': (62, 56, 57)}, button={'cn': (306, 637, 332, 663), 'en': (306, 637, 332, 663), 'jp': (306, 637, 332, 663), 'tw': (306, 637, 332, 663)}, file={'cn': './assets/cn/os_handler/STORAGE_FLEET_3.png', 'en': './assets/cn/os_handler/STORAGE_FLEET_3.png', 'jp': './assets/cn/os_handler/STORAGE_FLEET_3.png', 'tw': './assets/cn/os_handler/STORAGE_FLEET_3.png'}) +STORAGE_FLEET_4 = Button(area={'cn': (306, 638, 332, 664), 'en': (306, 638, 332, 664), 'jp': (306, 638, 332, 664), 'tw': (306, 638, 332, 664)}, color={'cn': (114, 95, 59), 'en': (114, 95, 59), 'jp': (114, 95, 59), 'tw': (114, 95, 59)}, button={'cn': (306, 638, 332, 664), 'en': (306, 638, 332, 664), 'jp': (306, 638, 332, 664), 'tw': (306, 638, 332, 664)}, file={'cn': './assets/cn/os_handler/STORAGE_FLEET_4.png', 'en': './assets/cn/os_handler/STORAGE_FLEET_4.png', 'jp': './assets/cn/os_handler/STORAGE_FLEET_4.png', 'tw': './assets/cn/os_handler/STORAGE_FLEET_4.png'}) +STORAGE_FLEET_5 = Button(area={'cn': (306, 637, 332, 663), 'en': (306, 637, 332, 663), 'jp': (306, 637, 332, 663), 'tw': (306, 637, 332, 663)}, color={'cn': (127, 104, 58), 'en': (127, 104, 58), 'jp': (127, 104, 58), 'tw': (127, 104, 58)}, button={'cn': (306, 637, 332, 663), 'en': (306, 637, 332, 663), 'jp': (306, 637, 332, 663), 'tw': (306, 637, 332, 663)}, file={'cn': './assets/cn/os_handler/STORAGE_FLEET_5.png', 'en': './assets/cn/os_handler/STORAGE_FLEET_5.png', 'jp': './assets/cn/os_handler/STORAGE_FLEET_5.png', 'tw': './assets/cn/os_handler/STORAGE_FLEET_5.png'}) +STORAGE_FLEET_BAR = Button(area={'cn': (232, 356, 433, 614), 'en': (232, 356, 433, 614), 'jp': (232, 356, 433, 614), 'tw': (232, 356, 433, 614)}, color={'cn': (163, 161, 158), 'en': (163, 161, 158), 'jp': (163, 161, 158), 'tw': (163, 161, 158)}, button={'cn': (232, 356, 433, 614), 'en': (232, 356, 433, 614), 'jp': (232, 356, 433, 614), 'tw': (232, 356, 433, 614)}, file={'cn': './assets/cn/os_handler/STORAGE_FLEET_BAR.png', 'en': './assets/cn/os_handler/STORAGE_FLEET_BAR.png', 'jp': './assets/cn/os_handler/STORAGE_FLEET_BAR.png', 'tw': './assets/cn/os_handler/STORAGE_FLEET_BAR.png'}) +STORAGE_FLEET_CHOOSE = Button(area={'cn': (122, 642, 213, 665), 'en': (122, 642, 213, 665), 'jp': (122, 642, 213, 665), 'tw': (122, 642, 213, 665)}, color={'cn': (141, 159, 204), 'en': (141, 159, 204), 'jp': (141, 159, 204), 'tw': (141, 159, 204)}, button={'cn': (122, 642, 213, 665), 'en': (122, 642, 213, 665), 'jp': (122, 642, 213, 665), 'tw': (122, 642, 213, 665)}, file={'cn': './assets/cn/os_handler/STORAGE_FLEET_CHOOSE.png', 'en': './assets/cn/os_handler/STORAGE_FLEET_CHOOSE.png', 'jp': './assets/cn/os_handler/STORAGE_FLEET_CHOOSE.png', 'tw': './assets/cn/os_handler/STORAGE_FLEET_CHOOSE.png'}) +STORAGE_REPAIR_CANCEL = Button(area={'cn': (769, 629, 845, 663), 'en': (769, 629, 845, 663), 'jp': (769, 629, 845, 663), 'tw': (769, 629, 845, 663)}, color={'cn': (180, 181, 181), 'en': (180, 181, 181), 'jp': (180, 181, 181), 'tw': (180, 181, 181)}, button={'cn': (722, 618, 892, 674), 'en': (722, 618, 892, 674), 'jp': (722, 618, 892, 674), 'tw': (722, 618, 892, 674)}, file={'cn': './assets/cn/os_handler/STORAGE_REPAIR_CANCEL.png', 'en': './assets/cn/os_handler/STORAGE_REPAIR_CANCEL.png', 'jp': './assets/cn/os_handler/STORAGE_REPAIR_CANCEL.png', 'tw': './assets/cn/os_handler/STORAGE_REPAIR_CANCEL.png'}) +STORAGE_REPAIR_CONFIRM = Button(area={'cn': (1014, 629, 1090, 662), 'en': (1014, 629, 1090, 662), 'jp': (1014, 629, 1090, 662), 'tw': (1014, 629, 1090, 662)}, color={'cn': (231, 183, 117), 'en': (231, 183, 117), 'jp': (231, 183, 117), 'tw': (231, 183, 117)}, button={'cn': (967, 619, 1136, 674), 'en': (967, 619, 1136, 674), 'jp': (967, 619, 1136, 674), 'tw': (967, 619, 1136, 674)}, file={'cn': './assets/cn/os_handler/STORAGE_REPAIR_CONFIRM.png', 'en': './assets/cn/os_handler/STORAGE_REPAIR_CONFIRM.png', 'jp': './assets/cn/os_handler/STORAGE_REPAIR_CONFIRM.png', 'tw': './assets/cn/os_handler/STORAGE_REPAIR_CONFIRM.png'}) +STORAGE_REPAIR_ICON = Button(area={'cn': (777, 583, 794, 600), 'en': (777, 583, 794, 600), 'jp': (777, 583, 794, 600), 'tw': (777, 583, 794, 600)}, color={'cn': (139, 98, 98), 'en': (139, 98, 98), 'jp': (139, 98, 98), 'tw': (139, 98, 98)}, button={'cn': (777, 583, 794, 600), 'en': (777, 583, 794, 600), 'jp': (777, 583, 794, 600), 'tw': (777, 583, 794, 600)}, file={'cn': './assets/cn/os_handler/STORAGE_REPAIR_ICON.png', 'en': './assets/cn/os_handler/STORAGE_REPAIR_ICON.png', 'jp': './assets/cn/os_handler/STORAGE_REPAIR_ICON.png', 'tw': './assets/cn/os_handler/STORAGE_REPAIR_ICON.png'}) STORAGE_USE = Button(area={'cn': (709, 506, 769, 536), 'en': (729, 509, 786, 533), 'jp': (769, 494, 858, 523), 'tw': (709, 506, 769, 536)}, color={'cn': (161, 186, 220), 'en': (164, 189, 222), 'jp': (141, 177, 223), 'tw': (161, 186, 220)}, button={'cn': (687, 493, 860, 550), 'en': (693, 495, 858, 549), 'jp': (699, 481, 872, 538), 'tw': (687, 493, 860, 550)}, file={'cn': './assets/cn/os_handler/STORAGE_USE.png', 'en': './assets/en/os_handler/STORAGE_USE.png', 'jp': './assets/jp/os_handler/STORAGE_USE.png', 'tw': './assets/tw/os_handler/STORAGE_USE.png'}) STORATE_SCROLL = Button(area={'cn': (1256, 102, 1264, 589), 'en': (1256, 102, 1264, 589), 'jp': (1256, 102, 1264, 589), 'tw': (1256, 102, 1264, 589)}, color={'cn': (119, 109, 60), 'en': (119, 109, 60), 'jp': (119, 109, 60), 'tw': (119, 109, 60)}, button={'cn': (1256, 102, 1264, 589), 'en': (1256, 102, 1264, 589), 'jp': (1256, 102, 1264, 589), 'tw': (1256, 102, 1264, 589)}, file={'cn': './assets/cn/os_handler/STORATE_SCROLL.png', 'en': './assets/en/os_handler/STORATE_SCROLL.png', 'jp': './assets/jp/os_handler/STORATE_SCROLL.png', 'tw': './assets/tw/os_handler/STORATE_SCROLL.png'}) STRATEGIC_SEARCH_DEVICE_CHECK = Button(area={'cn': (471, 340, 553, 360), 'en': (409, 295, 466, 308), 'jp': (407, 293, 553, 315), 'tw': (475, 332, 556, 354)}, color={'cn': (147, 152, 163), 'en': (141, 148, 159), 'jp': (118, 125, 139), 'tw': (141, 147, 159)}, button={'cn': (471, 340, 553, 360), 'en': (409, 295, 466, 308), 'jp': (407, 293, 553, 315), 'tw': (475, 332, 556, 354)}, file={'cn': './assets/cn/os_handler/STRATEGIC_SEARCH_DEVICE_CHECK.png', 'en': './assets/en/os_handler/STRATEGIC_SEARCH_DEVICE_CHECK.png', 'jp': './assets/jp/os_handler/STRATEGIC_SEARCH_DEVICE_CHECK.png', 'tw': './assets/tw/os_handler/STRATEGIC_SEARCH_DEVICE_CHECK.png'}) @@ -88,4 +98,7 @@ TEMPLATE_STORAGE_OFFENSE = Template(file={'cn': './assets/cn/os_handler/TEMPLATE TEMPLATE_STORAGE_QUALITY_COMBAT = Template(file={'cn': './assets/cn/os_handler/TEMPLATE_STORAGE_QUALITY_COMBAT.png', 'en': './assets/en/os_handler/TEMPLATE_STORAGE_QUALITY_COMBAT.png', 'jp': './assets/jp/os_handler/TEMPLATE_STORAGE_QUALITY_COMBAT.png', 'tw': './assets/tw/os_handler/TEMPLATE_STORAGE_QUALITY_COMBAT.png'}) TEMPLATE_STORAGE_QUALITY_OFFENSE = Template(file={'cn': './assets/cn/os_handler/TEMPLATE_STORAGE_QUALITY_OFFENSE.png', 'en': './assets/en/os_handler/TEMPLATE_STORAGE_QUALITY_OFFENSE.png', 'jp': './assets/jp/os_handler/TEMPLATE_STORAGE_QUALITY_OFFENSE.png', 'tw': './assets/tw/os_handler/TEMPLATE_STORAGE_QUALITY_OFFENSE.png'}) TEMPLATE_STORAGE_QUALITY_SURVIVAL = Template(file={'cn': './assets/cn/os_handler/TEMPLATE_STORAGE_QUALITY_SURVIVAL.png', 'en': './assets/en/os_handler/TEMPLATE_STORAGE_QUALITY_SURVIVAL.png', 'jp': './assets/jp/os_handler/TEMPLATE_STORAGE_QUALITY_SURVIVAL.png', 'tw': './assets/tw/os_handler/TEMPLATE_STORAGE_QUALITY_SURVIVAL.png'}) +TEMPLATE_STORAGE_REPAIR_PACK = Template(file={'cn': './assets/cn/os_handler/TEMPLATE_STORAGE_REPAIR_PACK.png', 'en': './assets/cn/os_handler/TEMPLATE_STORAGE_REPAIR_PACK.png', 'jp': './assets/cn/os_handler/TEMPLATE_STORAGE_REPAIR_PACK.png', 'tw': './assets/cn/os_handler/TEMPLATE_STORAGE_REPAIR_PACK.png'}) +TEMPLATE_STORAGE_SHIP_EMPTY = Template(file={'cn': './assets/cn/os_handler/TEMPLATE_STORAGE_SHIP_EMPTY.png', 'en': './assets/cn/os_handler/TEMPLATE_STORAGE_SHIP_EMPTY.png', 'jp': './assets/cn/os_handler/TEMPLATE_STORAGE_SHIP_EMPTY.png', 'tw': './assets/cn/os_handler/TEMPLATE_STORAGE_SHIP_EMPTY.png'}) +TEMPLATE_STORAGE_SHIP_SELECTED = Template(file={'cn': './assets/cn/os_handler/TEMPLATE_STORAGE_SHIP_SELECTED.png', 'en': './assets/cn/os_handler/TEMPLATE_STORAGE_SHIP_SELECTED.png', 'jp': './assets/cn/os_handler/TEMPLATE_STORAGE_SHIP_SELECTED.png', 'tw': './assets/cn/os_handler/TEMPLATE_STORAGE_SHIP_SELECTED.png'}) TEMPLATE_STORAGE_SURVIVAL = Template(file={'cn': './assets/cn/os_handler/TEMPLATE_STORAGE_SURVIVAL.png', 'en': './assets/en/os_handler/TEMPLATE_STORAGE_SURVIVAL.png', 'jp': './assets/jp/os_handler/TEMPLATE_STORAGE_SURVIVAL.png', 'tw': './assets/tw/os_handler/TEMPLATE_STORAGE_SURVIVAL.png'}) diff --git a/module/os_handler/storage.py b/module/os_handler/storage.py index 02a9e1380..3eb00ccdb 100644 --- a/module/os_handler/storage.py +++ b/module/os_handler/storage.py @@ -2,7 +2,7 @@ from module.base.timer import Timer from module.base.utils import area_offset, crop, rgb2gray from module.combat.assets import GET_ITEMS_1, GET_ITEMS_2 from module.exception import ScriptError -from module.handler.assets import GET_MISSION +from module.handler.assets import GET_MISSION, POPUP_CANCEL from module.logger import logger from module.os.globe_operation import GlobeOperation from module.os.globe_zone import ZoneManager @@ -178,6 +178,94 @@ class StorageHandler(GlobeOperation, ZoneManager): self.storage_sample_use_all() self.storage_quit() + def repair_ship_select(self, button, skip_first_screenshot=True): + """ + Args: + button (Button): Ship + skip_first_screenshot: + + Returns: + bool: if selected + + Pages: + in: STORAGE_FLEET_CHOOSE + out: STORAGE_FLEET_CHOOSE + """ + crop_area = (button.area[0] + 80, button.area[1] - 25, button.area[2] + 2, button.area[3] - 10) + click_area = (button.area[0] + 40, button.area[1] - 100, button.area[2] - 10, button.area[3] - 50) + click_buttton = Button(area=click_area, color=(0, 0, 0), button=click_area, name='STORAGE_SHIP_SELECT') + timeout = Timer(5, count=3).start() + while 1: + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() + + # End + if TEMPLATE_STORAGE_SHIP_SELECTED.match(self.image_crop(crop_area, copy=False), similarity=0.75): + logger.info('Storage Ship Selected') + self.interval_clear(STORAGE_FLEET_CHOOSE) + return True + if timeout.reached(): + logger.warning('Wait storage ship select timeout') + self.interval_clear(STORAGE_FLEET_CHOOSE) + return False + + if self.appear(STORAGE_FLEET_CHOOSE, offset=(20, 20), interval=2): + self.device.click(click_buttton) + continue + + def repair_pack_use_confirm(self, button, skip_first_screenshot=True): + """ + Args: + button (Button): Ship + skip_first_screenshot: + + Pages: + in: STORAGE_FLEET_CHOOSE + out: STORAGE_FLEET_CHOOSE + """ + crop_area = (button.area[0] + 80, button.area[1] - 25, button.area[2] + 2, button.area[3] - 10) + self.interval_clear(POPUP_CANCEL) + self.device.stuck_record_clear() + while 1: + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() + + # End + if self.appear(STORAGE_REPAIR_CONFIRM, offset=(20, 20)) and \ + not TEMPLATE_STORAGE_SHIP_SELECTED.match(self.image_crop(crop_area, copy=False), similarity=0.75): + logger.info('Ship Fixed') + break + if self.handle_popup_cancel('STORAGE_REPAIR_FULL_CANCEL'): + logger.info('No need to fix this ship') + break + + if self.appear_then_click(STORAGE_REPAIR_CONFIRM, offset=(20, 20)): + continue + + + def repair_pack_use(self, button): + """ + Select a ship that needs to be repaired, then use repair packs + + Args: + button (Button): Ship + + Pages: + in: STORAGE_FLEET_CHOOSE + out: STORAGE_FLEET_CHOOSE + """ + for _ in range(3): + if self.repair_ship_select(button): + self.repair_pack_use_confirm(button) + break + + def storage_repair_cancel(self): + self.ui_click(STORAGE_REPAIR_CANCEL, STORAGE_CHECK, retry_wait=2, skip_first_screenshot=True) + def _storage_coordinate_checkout(self, button, types=('OBSCURE',), skip_first_screenshot=True): """ Args: @@ -187,7 +275,7 @@ class StorageHandler(GlobeOperation, ZoneManager): Pages: in: STORAGE_CHECK - out: is_in_map, in an obscure zone. + out: is_in_map, in an obscure zone, or STORAGE_FLEET_CHOOSE. """ self.interval_clear([ STORAGE_CHECK, @@ -213,6 +301,8 @@ class StorageHandler(GlobeOperation, ZoneManager): # End if self.is_zone_pinned(): break + if types[0] == 'REPAIR_PACK' and self.appear(STORAGE_FLEET_CHOOSE, offset=(20, 20)): + return self.zone_type_select(types) self.globe_enter(zone=self.name_to_zone(72)) @@ -221,7 +311,7 @@ class StorageHandler(GlobeOperation, ZoneManager): def _storage_item_to_template(item): """ Args: - item (str): 'OBSCURE' or 'ABYSSAL'. + item (str): 'OBSCURE', 'ABYSSAL' or 'REPAIR_PACK'. Returns: Template: @@ -230,13 +320,15 @@ class StorageHandler(GlobeOperation, ZoneManager): return TEMPLATE_STORAGE_OBSCURE elif item == 'ABYSSAL': return TEMPLATE_STORAGE_ABYSSAL + elif item == 'REPAIR_PACK': + return TEMPLATE_STORAGE_REPAIR_PACK else: raise ScriptError(f'Unknown storage item: {item}') def storage_checkout_item(self, item, skip_obscure_hazard_2=False, skip_first_screenshot=True): """ Args: - item (str): 'OBSCURE' or 'ABYSSAL'. + item (str): 'OBSCURE', 'ABYSSAL' or 'REPAIR_PACK'. skip_obscure_hazard_2: if skip hazard 2 obscure skip_first_screenshot: @@ -279,7 +371,7 @@ class StorageHandler(GlobeOperation, ZoneManager): def storage_get_next_item(self, item, use_logger=True, skip_obscure_hazard_2=False): """ Args: - item (str): 'OBSCURE' or 'ABYSSAL'. + item (str): 'OBSCURE', 'ABYSSAL' or 'REPAIR_PACK'. use_logger: If use all loggers. skip_obscure_hazard_2: if skip hazard 2 obscure