From 42090d5191e17570b14a6f7e6ff74bf21c61deeb Mon Sep 17 00:00:00 2001 From: POLAR me Date: Sat, 29 Mar 2025 02:12:32 +0800 Subject: [PATCH] =?UTF-8?q?update(event=5Fhospital):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=B7=B1=E8=B0=B7=E6=9D=A5=E4=BF=A1=E5=88=B7=E5=9B=BE=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/cn/event_hospital/SIDEBAR_MORNING.png | Bin 0 -> 7052 bytes assets/cn/event_hospital/SIDEBAR_NIGHT.png | Bin 0 -> 7523 bytes assets/cn/event_hospital/SIDEBAR_NOON.png | Bin 0 -> 7506 bytes config/template.json | 4 +- module/config/argument/args.json | 8 +++ module/config/argument/argument.yaml | 1 + module/config/config_generated.py | 1 + module/config/i18n/en-US.json | 4 ++ module/config/i18n/ja-JP.json | 4 ++ module/config/i18n/zh-CN.json | 4 ++ module/config/i18n/zh-TW.json | 4 ++ module/event_hospital/assets.py | 7 +++ module/event_hospital/combat.py | 11 +++- module/event_hospital/hospital.py | 63 +++++++++++++++++++ module/event_hospital/ui.py | 19 ++++++ 15 files changed, 128 insertions(+), 2 deletions(-) create mode 100644 assets/cn/event_hospital/SIDEBAR_MORNING.png create mode 100644 assets/cn/event_hospital/SIDEBAR_NIGHT.png create mode 100644 assets/cn/event_hospital/SIDEBAR_NOON.png diff --git a/assets/cn/event_hospital/SIDEBAR_MORNING.png b/assets/cn/event_hospital/SIDEBAR_MORNING.png new file mode 100644 index 0000000000000000000000000000000000000000..aa59993953600a3e0eacb5c8709bdd55f7daaf17 GIT binary patch literal 7052 zcmeHMYgbBtVgg8lZ+4NX!LA0)YTg!X?+?&=36!{g6*i_`QaQM)HV*ud3(sUhM>#-sRNUBr-@JAdzurHZVYfvTqvldV8 zGh%Og!Cb??7rA>q_~Bw$^5wlL!~0!#f4HN}ulT#_!1mkloFlu^@<#^u8$X@@ulRP( z!m%IWVIzS@avIZg8})FvvHef<+TQfW)9bwsm6ePK53bpA=)ytXo$F`Cl)vq^Pna%U z-7a~Tb;dG3ZXuEfl4X1l6L7#>FI<5G0RP(oxUPu3pSWxUyO+F5K(R3aa9a^2r(A=< zuG?n7Wkm$v0@i}vF1Nj)SR3LrbuN>0OE^8pc}h4>#6NK0DC)B{Z|Juzj!m7QKpQ!` z!iN;d26JzGk6$@&F<^IuNp1F!9xpX!cVA0m_xgIF?!L{bNR zoYM1@Vslu$!AK}Vj4g!%#8`HhH39Oa?76os-Cli%N~a3~Z0BaKQtGms8_b3`qt}ht z$pMS$Dc%F3VN>ZWzpzN@BA5-7Af|u02~ez)<{4-QliqQEZdgA3N+VE>X)w)vMS5BQ ze4$`9=JsB77v-kS2!igV2)OTTT2IN}?`~xwWptMQoEtj>8!8XN7*Of!!H9fU?iKcL zRfbwn$YFU4{a%b9b!by1t&;Rc7FVvfY3?O$*WTDQlVCSwB!+o_asPZf9Fd|4)X_!S z@*8C_WP1XFV)|O>k#&w)!%BA)39g{H+^C$&;y`T&FPk6^2?pn>&D7LjJ~P`G>f(ai znVEW|;lg(( zMWy3bk1VR6Rq_*cq$a&H^5tfi#Z5MFcx_8)AV6a@p&msvc3Ec_!IHY~pr*<8u;HO) zdi{`C31h~bNat1h?$!4>`-Jh1*Kpc2F9|WpQFP>R* zimm7R>H;Sp&7@rfpNX#j)j+U~y)2eMFszf$Wi*6|K<|-J`8kae}u0 zt+szz?u*VXT%`K$wD_)?P8LkN%t_?FA*gC{G?QYLk9Oi|`nYrl4d&T8llzwkxa%DD z&LNu4LpI$uemPzM1I-RZ-`^o>u;dIIKe7-K%xaebi$8fJRUn($<1-lH0{-pjHx(q; zIhD_g5R^RB{X8+|NqO_Z6Bv`=QxQCl?zay1(JK=(DoRP*V^gps=4G~`X@>|L`#d#( z2%HqOUC=Bl6!i&)aCmo&)}PO7MvvFiu{p^Y*z=RyK*g~O4+KDEbBldoeE%+)Y8XAG z*H1j$^JnngFVS{jIJUTdPVYNaB`-zyrO=CcY5x9}yH=hL0mLVoTsRX7U@ddc4`x_x zziw(hN`6Xjk@pTnB~DbWDo72(bQc10)-HIE%aEE+u zFrW-Xrj3lTX8{$ox=CT4Oo?5uH{eQ{nTVs;aF!?ofl#VLe-{35sTko)j%n<|;qbGj z)>v+bz|v(jxWldILVz%`si-&wUU>o!)3In`$8S zfo?3CEcjXg;1LugGG4}uk8fkhhqB}JNvYmKYc;L_Q}FGQ*K6h?h19@=A`CYtJVBiJ z+TjQw*2hmrHJU%vb6*Q8*Tc*TmC!jZc&URzC5R`;){L6CY<4U3Q6L12UBylH@sG2MhcNk~#GOQ;$ zVfT7sdfh*!Tkd)~B5>lSRXlE&8G zd{g+esINynmMJ~^NWI+jkF3XKl%E-@MlzAB*l8tkI1zKtIFJz={>dge_;DrDS4(S7 zS<31%NWziEqQXw5+`Wq*GHc@ROjU-ZnmiEF5`1|)zfy2a0)>W1OC#`=w5FmLLIj9A z`q|ZIVu}0&17X!|O h;17A>lbm9rK(X5^--}F61k<*|UnCxA`TW$S{{vDBy}bYc literal 0 HcmV?d00001 diff --git a/assets/cn/event_hospital/SIDEBAR_NIGHT.png b/assets/cn/event_hospital/SIDEBAR_NIGHT.png new file mode 100644 index 0000000000000000000000000000000000000000..9c5131a3e64c074675b5c69ba6629b4982ea71e5 GIT binary patch literal 7523 zcmeHLX;_n27XDadQ30#9Fv>R5Db7>`l?hZJ#03`~fm92kY(dK+YXE^jLI|iMZBgh< zp2`@Ov{Kng6ci#M3yr{7r4%s4BxGS#2qa-i0$C>?{_pSkkzeQD=R4<~^WA&Sd(V5n z{WAQl-S&Ok0RXTIITw5p0Ja&2=D*um8N~=za0vihJ`V{#5m8vXEC{RkIt4v6g>klX z{@2lSKUwU4+Hbx;HreXp>Av@OGWK=aCgL;cq4dz86Ye#o)yo67NoM6Azpyxpx7z!_ z$~N}PlnaT!jGq4?0=fKWuV)$&XWK)C@T`F9rdkVRG`GS&F}ehHEqrR|00-Zn2P}=E zG{M{*oLcSy%#6bQKY$H5?YBG*3L6i=+$fG8HroYGZ`ziEVppii)U-{elrU9}2_;O3 zXu3E|m!zp7F!fEQ9`TP`=?Tmd(N~?9r~5IA&FI_gQKI4*l9H~X<%twB6sLShxOIZ2 zR*}<>Al@t>n_#*supci~y)HQbc+1eM(;c!*Dt~T*=toZpbdB_J@|+QGEX*FDC4wz^ zArY#!6o)xdeQ>W1UTFbEdZWw20+Ryumz z?3`iI>o%w;)R4(YO;44(oG*tnG>wfScw3xj7Og~q1=p9C@imqSj0H{?x&F`rLoZGH zTk`n+ikq4qa%&W1A3W^{KY9Xl1)`HaZHx=8b)J|VXU%1mt#w_gE5USgGGQrdFqL`k^+(x^O^Y%b-bASy>G$%^t+?f_iGFeOV^o%h47-(#Vb{d|)U% z6rf#|QwHIKY%kPW`ouU+^_FLlZB)$cv$uli6LUvGeu-T3>q@eW)m~kxMEPz}B4QQo zQKvMal6_Rr+870aF=!}JWn;@|VJxB~htelHre$Bacc#H#CkS~4d-}}(SfYZrlo4Gq zz*X-jSks-ru!Eedg3Ksf0dg!%)-fZxh{=(q^m-oq;(A)3Q^Yv`UJ>io)qB=6F$=lI z^UmKdQd>tn*rvph5tQ{HvP$2V))pOAdE>E`ELEaP$1xU}n-PwcWq2 zK9HvXbMkmA&5~JTU6hfBFAM0dR+3~0?CQK+G>7#D&4K+@Zh+h6#K02&miYv%&3`@K z3%)5`cDb-cAvbbdVL-vCw4SEveaU?J?koqsF15Ks!$?I}4?AmLIBta?>!Ep?)e}c# zMUOgGuE#cv7NWLiH}n*7_)j4Zob@5r6`&(#d4jiDwpzC?yvtc{r3a$pZylH^XUzWe z=mjw}ZIyd9t`^ZweB$j6D!-wdi?0=Q^Ipm7q1s-X!s5KX+Ud4si&G^p^f)|=<*%J? zp0DVN);_*G#GpF3Y*nAba7+PPllrvU5rTM~9_U0qDP)V#E{lZ578b(J=;G&itfrMW z@Q_!7u_nRzG}K1*451i(dANTu;1lG$hXHggzGK|5-M&*6_I5S;nEGVj|=n5GJ>ktwRooY8-Cpzwq_Buq(p(1Uv z>prJ0^vm>;$gm~`RYx;W^<4pbH*ia~TMrEys5c68lpK|hUTtl(X6@T)4Jq<(nZj$} zw)M1nHdt1h(~A+}@Gk7Rb4c398&61XV2nZ^ja@0<*BVnhB59}QTNkajT3NHwf?OjQ zQTaLCiRp5lz(;;4YO-$k$)sYcQ%oAm?5`BXH*Fp=Uq7WnJH7Q$&# zapk2M+Zajfe9QihudrlAR1aoaR4_}u@mxl&N&kQiKj<1eh57IK!A!mKWAWVlcU~kn z?^9xB`oS>U52)v>sR3doqQX8OyTUbnSPj-fQon(cee??$xBMy(11y=x8Io-#zbkO$ zzq&2!{I=BLpC>=sDv$e0H$Wl{q1FAZFdfd^UlM8wdIel@m$Lprc#|C%FXeI$382uT zB1N=e@Mn?WE1VAEu|d71%5uDHV5WAjWyj*A=Z?ej6Irjgu~k49e%^J$(*8EH!;jaa!> z4Jw8i*fl4ZHMorMpe)%o8$@J^eN}HZhg?Ell)tA`8q=CJy0Hk2b8@aa5LJcH%}WSG z@B6ADN%I%Z_T*`i@i3Q*s45Zoqy)gCWS&4J@oxHRUhFMJrywhhOojLfQBW>tg3Fyw zGccswtdQ&*hbcUtY$f_qR~NSgx0N#5yRCh12;pykg2PKoqb z`{E5r!`w`ih~Dmqpiv0Bv>e>#JGRP`B}RWIFFSP#j6i%!wPBVW@VlaQ5Iz){64}Mg z+l+8rBax=dPoq4}g`L6AvBvS$5L_46;_;$PuXl^W7~(Ds3p4I-8)@xeYpM+D&2qiL z7F;Yq>0?H@TUyiLf9WesW{>5@8RsP>kYTS5AO=98SHjizV0E6V9T_8hLJ2Oqi<_~j z<}S5|*WmZv^MJ&98|rBFY6SRBD!#?pJRPZ9Ib!(CgLqGmAj%51FNqWyN=q8H(#}wU!692y_aV|2_ aV14|_ljAoAPZGg+zFFzIB%&Hn+FPR_9a literal 0 HcmV?d00001 diff --git a/assets/cn/event_hospital/SIDEBAR_NOON.png b/assets/cn/event_hospital/SIDEBAR_NOON.png new file mode 100644 index 0000000000000000000000000000000000000000..d35b53f7309183b1de6b9424466b87a6aaf5b7b5 GIT binary patch literal 7506 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 literal 0 HcmV?d00001 diff --git a/config/template.json b/config/template.json index f2b3e956f..f1fb19049 100644 --- a/config/template.json +++ b/config/template.json @@ -1254,7 +1254,8 @@ "ServerUpdate": "00:00" }, "Hospital": { - "UseRecommendFleet": true + "UseRecommendFleet": true, + "mapName": "0-T1" }, "StopCondition": { "OilLimit": 1000, @@ -1262,6 +1263,7 @@ "MapAchievement": "non_stop", "StageIncrease": false, "GetNewShip": false, + "EventSwitch": false, "ReachLevel": 0 }, "Emotion": { diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 6931aaa55..8f8004690 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -6787,6 +6787,10 @@ "UseRecommendFleet": { "type": "checkbox", "value": true + }, + "mapName": { + "type": "input", + "value": "0-T1" } }, "StopCondition": { @@ -6821,6 +6825,10 @@ "value": false, "display": "hide" }, + "EventSwitch": { + "type": "checkbox", + "value": false + }, "ReachLevel": { "type": "input", "value": 0, diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 81b99a1b8..147222044 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -532,6 +532,7 @@ RaidDaily: hard > normal > easy Hospital: UseRecommendFleet: true + mapName: 0-T1 MaritimeEscort: Enable: true Coalition: diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 8087278eb..9b0744a90 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -315,6 +315,7 @@ class GeneratedConfig: # Group `Hospital` Hospital_UseRecommendFleet = True + Hospital_mapName = '0-T1' # Group `MaritimeEscort` MaritimeEscort_Enable = True diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 54a722363..6d9e0d175 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -2125,6 +2125,10 @@ "UseRecommendFleet": { "name": "Use Fleet Recommendation", "help": "If turned off, you need to manually prepare fleets of all 15 stages in advance" + }, + "mapName": { + "name": "Hospital.mapName.name", + "help": "Hospital.mapName.help" } }, "MaritimeEscort": { diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index c7910f61d..26bd68b7e 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -2125,6 +2125,10 @@ "UseRecommendFleet": { "name": "Hospital.UseRecommendFleet.name", "help": "Hospital.UseRecommendFleet.help" + }, + "mapName": { + "name": "Hospital.mapName.name", + "help": "Hospital.mapName.help" } }, "MaritimeEscort": { diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index b38f99c34..2894dc899 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -2125,6 +2125,10 @@ "UseRecommendFleet": { "name": "使用舰队推荐", "help": "如果关闭,需要事先手动为所有15个关卡配队" + }, + "mapName": { + "name": "深谷来信关卡名称", + "help": "例如1-T3表示白天的T3关卡,开头的0,1,2,3分别对应不刷PT,白天,下午,晚上,-后面则是关卡名" } }, "MaritimeEscort": { diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index a94b48dd0..fc21e6d2b 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -2125,6 +2125,10 @@ "UseRecommendFleet": { "name": "使用艦隊推薦", "help": "如果關閉,需要事先手動為所有15個關卡配隊" + }, + "mapName": { + "name": "Hospital.mapName.name", + "help": "Hospital.mapName.help" } }, "MaritimeEscort": { diff --git a/module/event_hospital/assets.py b/module/event_hospital/assets.py index 4dc4ba643..15309ac8e 100644 --- a/module/event_hospital/assets.py +++ b/module/event_hospital/assets.py @@ -18,6 +18,13 @@ HOSPITAL_GOTO_DAILY = Button(area={'cn': (900, 658, 928, 688), 'en': (900, 658, INVEST_REWARD_RECEIVE = Button(area={'cn': (1113, 666, 1236, 690), 'en': (1113, 666, 1236, 690), 'jp': (1113, 666, 1236, 690), 'tw': (1113, 666, 1236, 690)}, color={'cn': (97, 99, 117), 'en': (97, 99, 117), 'jp': (97, 99, 117), 'tw': (97, 99, 117)}, button={'cn': (1113, 666, 1236, 690), 'en': (1113, 666, 1236, 690), 'jp': (1113, 666, 1236, 690), 'tw': (1113, 666, 1236, 690)}, file={'cn': './assets/cn/event_hospital/INVEST_REWARD_RECEIVE.png', 'en': './assets/cn/event_hospital/INVEST_REWARD_RECEIVE.png', 'jp': './assets/cn/event_hospital/INVEST_REWARD_RECEIVE.png', 'tw': './assets/cn/event_hospital/INVEST_REWARD_RECEIVE.png'}) INVEST_SCROLL = Button(area={'cn': (1200, 153, 1203, 642), 'en': (1200, 153, 1203, 642), 'jp': (1200, 153, 1203, 642), 'tw': (1200, 153, 1203, 642)}, color={'cn': (148, 136, 148), 'en': (148, 136, 148), 'jp': (148, 136, 148), 'tw': (148, 136, 148)}, button={'cn': (1200, 153, 1203, 642), 'en': (1200, 153, 1203, 642), 'jp': (1200, 153, 1203, 642), 'tw': (1200, 153, 1203, 642)}, file={'cn': './assets/cn/event_hospital/INVEST_SCROLL.png', 'en': './assets/cn/event_hospital/INVEST_SCROLL.png', 'jp': './assets/cn/event_hospital/INVEST_SCROLL.png', 'tw': './assets/cn/event_hospital/INVEST_SCROLL.png'}) INVEST_SEARCH = Button(area={'cn': (261, 135, 1187, 636), 'en': (261, 135, 1187, 636), 'jp': (261, 135, 1187, 636), 'tw': (261, 135, 1187, 636)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (261, 135, 1187, 636), 'en': (261, 135, 1187, 636), 'jp': (261, 135, 1187, 636), 'tw': (261, 135, 1187, 636)}, file={'cn': './assets/cn/event_hospital/INVEST_SEARCH.png', 'en': './assets/cn/event_hospital/INVEST_SEARCH.png', 'jp': './assets/cn/event_hospital/INVEST_SEARCH.png', 'tw': './assets/cn/event_hospital/INVEST_SEARCH.png'}) +NEXT_SECRET_PAGE_BUTTON = Button(area={'cn': (1182, 347, 1212, 395), 'en': (1182, 347, 1212, 395), 'jp': (1182, 347, 1212, 395), 'tw': (1182, 347, 1212, 395)}, color={'cn': (166, 160, 166), 'en': (166, 160, 166), 'jp': (166, 160, 166), 'tw': (166, 160, 166)}, button={'cn': (1182, 347, 1212, 395), 'en': (1182, 347, 1212, 395), 'jp': (1182, 347, 1212, 395), 'tw': (1182, 347, 1212, 395)}, file={'cn': './assets/cn/event_hospital/NEXT_SECRET_PAGE_BUTTON.png', 'en': './assets/cn/event_hospital/NEXT_SECRET_PAGE_BUTTON.png', 'jp': './assets/cn/event_hospital/NEXT_SECRET_PAGE_BUTTON.png', 'tw': './assets/cn/event_hospital/NEXT_SECRET_PAGE_BUTTON.png'}) +RECORD_COLLECT = Button(area={'cn': (980, 541, 1151, 582), 'en': (980, 541, 1151, 582), 'jp': (980, 541, 1151, 582), 'tw': (980, 541, 1151, 582)}, color={'cn': (82, 76, 79), 'en': (82, 76, 79), 'jp': (82, 76, 79), 'tw': (82, 76, 79)}, button={'cn': (980, 541, 1151, 582), 'en': (980, 541, 1151, 582), 'jp': (980, 541, 1151, 582), 'tw': (980, 541, 1151, 582)}, file={'cn': './assets/cn/event_hospital/RECORD_COLLECT.png', 'en': './assets/cn/event_hospital/RECORD_COLLECT.png', 'jp': './assets/cn/event_hospital/RECORD_COLLECT.png', 'tw': './assets/cn/event_hospital/RECORD_COLLECT.png'}) +RECORD_END = Button(area={'cn': (955, 384, 1176, 460), 'en': (955, 384, 1176, 460), 'jp': (955, 384, 1176, 460), 'tw': (955, 384, 1176, 460)}, color={'cn': (143, 155, 204), 'en': (143, 155, 204), 'jp': (143, 155, 204), 'tw': (143, 155, 204)}, button={'cn': (955, 384, 1176, 460), 'en': (955, 384, 1176, 460), 'jp': (955, 384, 1176, 460), 'tw': (955, 384, 1176, 460)}, file={'cn': './assets/cn/event_hospital/RECORD_END.png', 'en': './assets/cn/event_hospital/RECORD_END.png', 'jp': './assets/cn/event_hospital/RECORD_END.png', 'tw': './assets/cn/event_hospital/RECORD_END.png'}) +RECORD_LIST = Button(area={'cn': (961, 163, 1169, 369), 'en': (961, 163, 1169, 369), 'jp': (961, 163, 1169, 369), 'tw': (961, 163, 1169, 369)}, color={'cn': (145, 141, 148), 'en': (145, 141, 148), 'jp': (145, 141, 148), 'tw': (145, 141, 148)}, button={'cn': (961, 163, 1169, 369), 'en': (961, 163, 1169, 369), 'jp': (961, 163, 1169, 369), 'tw': (961, 163, 1169, 369)}, file={'cn': './assets/cn/event_hospital/RECORD_LIST.png', 'en': './assets/cn/event_hospital/RECORD_LIST.png', 'jp': './assets/cn/event_hospital/RECORD_LIST.png', 'tw': './assets/cn/event_hospital/RECORD_LIST.png'}) +SIDEBAR_MORNING = Button(area={'cn': (24, 241, 56, 277), 'en': (24, 241, 56, 277), 'jp': (24, 241, 56, 277), 'tw': (24, 241, 56, 277)}, color={'cn': (80, 115, 196), 'en': (80, 115, 196), 'jp': (80, 115, 196), 'tw': (80, 115, 196)}, button={'cn': (24, 241, 56, 277), 'en': (24, 241, 56, 277), 'jp': (24, 241, 56, 277), 'tw': (24, 241, 56, 277)}, file={'cn': './assets/cn/event_hospital/SIDEBAR_MORNING.png', 'en': './assets/cn/event_hospital/SIDEBAR_MORNING.png', 'jp': './assets/cn/event_hospital/SIDEBAR_MORNING.png', 'tw': './assets/cn/event_hospital/SIDEBAR_MORNING.png'}) +SIDEBAR_NIGHT = Button(area={'cn': (24, 399, 54, 448), 'en': (24, 399, 54, 448), 'jp': (24, 399, 54, 448), 'tw': (24, 399, 54, 448)}, color={'cn': (59, 67, 59), 'en': (59, 67, 59), 'jp': (59, 67, 59), 'tw': (59, 67, 59)}, button={'cn': (24, 399, 54, 448), 'en': (24, 399, 54, 448), 'jp': (24, 399, 54, 448), 'tw': (24, 399, 54, 448)}, file={'cn': './assets/cn/event_hospital/SIDEBAR_NIGHT.png', 'en': './assets/cn/event_hospital/SIDEBAR_NIGHT.png', 'jp': './assets/cn/event_hospital/SIDEBAR_NIGHT.png', 'tw': './assets/cn/event_hospital/SIDEBAR_NIGHT.png'}) +SIDEBAR_NOON = Button(area={'cn': (24, 320, 54, 365), 'en': (24, 320, 54, 365), 'jp': (24, 320, 54, 365), 'tw': (24, 320, 54, 365)}, color={'cn': (78, 82, 75), 'en': (78, 82, 75), 'jp': (78, 82, 75), 'tw': (78, 82, 75)}, button={'cn': (24, 320, 54, 365), 'en': (24, 320, 54, 365), 'jp': (24, 320, 54, 365), 'tw': (24, 320, 54, 365)}, file={'cn': './assets/cn/event_hospital/SIDEBAR_NOON.png', 'en': './assets/cn/event_hospital/SIDEBAR_NOON.png', 'jp': './assets/cn/event_hospital/SIDEBAR_NOON.png', 'tw': './assets/cn/event_hospital/SIDEBAR_NOON.png'}) TAB_CHARACTER = Button(area={'cn': (263, 93, 409, 122), 'en': (263, 93, 409, 122), 'jp': (263, 93, 409, 122), 'tw': (263, 93, 409, 122)}, color={'cn': (185, 180, 191), 'en': (185, 180, 191), 'jp': (185, 180, 191), 'tw': (185, 180, 191)}, button={'cn': (263, 93, 409, 122), 'en': (263, 93, 409, 122), 'jp': (263, 93, 409, 122), 'tw': (263, 93, 409, 122)}, file={'cn': './assets/cn/event_hospital/TAB_CHARACTER.png', 'en': './assets/cn/event_hospital/TAB_CHARACTER.png', 'jp': './assets/cn/event_hospital/TAB_CHARACTER.png', 'tw': './assets/cn/event_hospital/TAB_CHARACTER.png'}) TAB_LOCATION = Button(area={'cn': (89, 93, 240, 121), 'en': (89, 93, 240, 121), 'jp': (89, 93, 240, 121), 'tw': (89, 93, 240, 121)}, color={'cn': (73, 108, 198), 'en': (73, 108, 198), 'jp': (73, 108, 198), 'tw': (73, 108, 198)}, button={'cn': (89, 93, 240, 121), 'en': (89, 93, 240, 121), 'jp': (89, 93, 240, 121), 'tw': (89, 93, 240, 121)}, file={'cn': './assets/cn/event_hospital/TAB_LOCATION.png', 'en': './assets/cn/event_hospital/TAB_LOCATION.png', 'jp': './assets/cn/event_hospital/TAB_LOCATION.png', 'tw': './assets/cn/event_hospital/TAB_LOCATION.png'}) TEMPLATE_INVEST = Template(file={'cn': './assets/cn/event_hospital/TEMPLATE_INVEST.png', 'en': './assets/en/event_hospital/TEMPLATE_INVEST.png', 'jp': './assets/jp/event_hospital/TEMPLATE_INVEST.png', 'tw': './assets/cn/event_hospital/TEMPLATE_INVEST.png'}) diff --git a/module/event_hospital/combat.py b/module/event_hospital/combat.py index 0d1b27590..2cb9be468 100644 --- a/module/event_hospital/combat.py +++ b/module/event_hospital/combat.py @@ -118,7 +118,16 @@ class HospitalCombat(Combat, HospitalUI, CampaignEvent): else: self.in_clue_confirm.reset() return False - + + def hospital_expected_end_combat(self): + """ + Returns: + bool: If combat ended + """ + if self.handle_combat_exit(): + return False + return False + def hospital_combat(self): """ Pages: diff --git a/module/event_hospital/hospital.py b/module/event_hospital/hospital.py index 518d776b8..7beff580d 100644 --- a/module/event_hospital/hospital.py +++ b/module/event_hospital/hospital.py @@ -45,6 +45,16 @@ HOSPITAL_TAB.add_state('LOCATION', check_button=TAB_LOCATION) HOSPITAL_TAB.add_state('CHARACTER', check_button=TAB_CHARACTER) +HOSPITAL_SIDEBAR = HospitalSwitch('HOSPITAL_SIDEBAR', is_selector=True) +HOSPITAL_SIDEBAR.add_state('MORNING', check_button=SIDEBAR_MORNING) +HOSPITAL_SIDEBAR.add_state('NOON', check_button=SIDEBAR_NOON) +HOSPITAL_SIDEBAR.add_state('NIGHT', check_button=SIDEBAR_NIGHT) +T1 = Button(area=(370, 268, 390, 290), color=(), button=(370, 268, 390, 290),name='T1') +T2 = Button(area=(250, 400, 270, 420), color=(), button=(250, 400, 270, 420),name='T2') +T3 = Button(area=(640, 530, 660, 550), color=(), button=(640, 530, 660, 550),name='T3') +T4 = Button(area=(990, 400, 1010, 420), color=(), button=(990, 400, 1010, 420),name='T4') + + class Hospital(HospitalClue, HospitalCombat): def daily_red_dot_appear(self): return self.image_color_count(DAILY_RED_DOT, color=(189, 69, 66), threshold=221, count=35) @@ -243,6 +253,56 @@ class Hospital(HospitalClue, HospitalCombat): swiped = True continue + def hospital_expected_end_combat(self): + """ + Returns: + bool: If combat ended + """ + if self.handle_combat_exit(): + return True + return False + + def ptRun(self): + time_map = {'1': 'MORNING', '2': 'NOON', '3': 'NIGHT'} + button_map = {'T1': T1, 'T2': T2, 'T3': T3, 'T4': T4} + time_period = self.config.Hospital_mapName.split('-')[0] + map_name = self.config.Hospital_mapName.split('-')[1].strip() + + + while 1: + self.device.screenshot() + + if self.event_time_limit_triggered(): + self.config.task_stop() + + # Log + logger.hr(f'{time_map.get(time_period)}_{map_name}', level=2) + # UI switches + if self.handle_combat_exit(): + continue + if self.ui_ensure(page_hospital): + continue + logger.warning("++++++++++++++++++++++++") + if self.event_pt_limit_triggered(): + logger.hr('Triggered stop condition: Event PT limit') + break + logger.warning("++++++++++++++++++++++++") + HOSPITAL_SIDEBAR.set(time_map.get(time_period), main=self) + self.device.click(button_map.get(map_name)) + + self.device.stuck_record_clear() + self.device.click_record_clear() + try: + self.combat(balance_hp=False, expected_end=self.hospital_expected_end_combat) + self.handle_combat_exit() + except ScriptEnd as e: + logger.hr('Script end') + logger.info(str(e)) + break + # Scheduler + if self.config.task_switched(): + self.config.task_stop() + def run(self): self.ui_ensure(page_hospital) self.daily_reward_receive() @@ -250,6 +310,9 @@ class Hospital(HospitalClue, HospitalCombat): self.clue_enter() try: self.loop_aside() + if not self.config.Hospital_mapName.startswith("0"): + self.clue_exit() + self.ptRun() # Scheduler self.config.task_delay(server_update=True) except OilExhausted: diff --git a/module/event_hospital/ui.py b/module/event_hospital/ui.py index ab8cc0f64..3785e9bfd 100644 --- a/module/event_hospital/ui.py +++ b/module/event_hospital/ui.py @@ -42,3 +42,22 @@ class HospitalUI(UI): if self.handle_get_clue(): return True return False + + def handle_combat_exit(self): + """ + Returns: + bool: If clicked + """ + if self.appear_then_click(HOSPITAL_BATTLE_EXIT, offset=(20, 20), interval=2): + return True + if self.appear(BATTLE_PREPARATION, offset=(30, 20), interval=2): + logger.info(f'{BATTLE_PREPARATION} -> {BACK}') + self.device.click(BACK) + return True + if self.appear(RAID_FLEET_PREPARATION, offset=(30, 30), interval=2): + logger.info(f'{RAID_FLEET_PREPARATION} -> {BACK}') + self.device.click(BACK) + return True + if self.handle_get_clue(): + return True + return False \ No newline at end of file