From c06773e586004c30c969ade48457630234bb566f Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 17 Oct 2025 04:13:16 +0800 Subject: [PATCH 01/27] Tmp: [EN] Temp fix for bugged UI --- assets/cn/ui/COMMISSION_CHECK_ENTMP.png | Bin 0 -> 6671 bytes assets/cn/ui/MISSION_CHECK_ENTMP.png | Bin 0 -> 5027 bytes module/ui/assets.py | 2 ++ module/ui/ui.py | 10 +++++++++- 4 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 assets/cn/ui/COMMISSION_CHECK_ENTMP.png create mode 100644 assets/cn/ui/MISSION_CHECK_ENTMP.png diff --git a/assets/cn/ui/COMMISSION_CHECK_ENTMP.png b/assets/cn/ui/COMMISSION_CHECK_ENTMP.png new file mode 100644 index 0000000000000000000000000000000000000000..1a718c6ba55ca354b4b0a382c5e9f94fb8b6c157 GIT binary patch literal 6671 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 Uk1;6fe;?>^#`|>nscZND11U$CTL1t6 literal 0 HcmV?d00001 diff --git a/assets/cn/ui/MISSION_CHECK_ENTMP.png b/assets/cn/ui/MISSION_CHECK_ENTMP.png new file mode 100644 index 0000000000000000000000000000000000000000..34cd18d6b467e27d07bd5934d3b622f2393aeca0 GIT binary patch literal 5027 zcmeIz>pvT476rFt-(w} zRpPQ}nih!`L0qCJhES~#giu97La0kpBFUQFe_`LP^X7S8{?7OFobx=q>~m4=sQys^ z0H6l?$-^H2P~N{DdiUj_{o@CdOJ4v0n$aMSb3davt6cbRMvK@ZABs-%SFT|YjpJ~G zln&_2@~>1?9+f{eJ*9lYew4iI-ezf$=HdM$ z|D)QgI#!ad!L>YcL?Eo?D*lN~Nf6*Iiq8xqDO&~*5o!sNEEeZ-lV_o7V&iM6%e)TR zTa!3!{CH)mEOD&IMER&8rH!!n@R}`5OqW3v`&b(Y9eo z^_A*^hrn^?#AYK`$&6xgW`;$!om}RpZ-loDjpn&fNY2Q{t3|)U3wE7vJfW;Ts_1`2 zzCnOR)i{Ap_I>w{|E5d(rL!L&IZh?CMso#5O5{3vihiJQd9!yo?)z`5H6IKN>gDi* zm03hWZA*M2e=fk>H^B@^$G+{ti0IhKk;xt2iYr%UbEY+HmRRdq)UU_seJpnESf2`v z3Go|#Sy@TafpR3wK&X{=Zw7F6X{i~_+HI0746B!@k2JiXVJ8Q!G)*UMd~=?v&V>!Rgd;+y3gdv>*}cUS#9l>h)Yv8_*MmdFdL z;MqWzi(Q*2FKBlq)C@nZTNPkw@i9@0kYj|{vUhN3r179ABm#LeMZR~8Aa7Hqr$=)N8gNynQs30>LP;@4FJ6EE7kj;0nN|MP$F?LJ_;T= zaF9^{dF8_oxMv2|ttfWes`(}bEo+)FmmhDV?3#p8_0N+69?iVl}&n1duI&Z@m>2~s|pfFe^&nL^soAEi9L0i z=6yb8#*gZX!UcMR=N$hG_d;HNG=Ds1NobTizg0mqsvfWTlSdS<33s!Pl%nS7PI!Bh z3#lW6JB zAgjN5kv1R*;~d)}GcP{-PQ1(lq;KecY9z6_I>_R&*P;aNbMX)JwEbsP_GQF<_wUX} zs;HajwTU^T4iqfOOSq+N8R^bQOh(?^Q@~R<7G9XhqZB;&W3IFZ{xJq!BV743-|ddQ zCt09slAG4fAZ4^{6ZCrTjQpXU(u0f=*|1wj*g6;*&%h9#(t;B^E5txmObfbl@aJ3g zO6^!=al#->y<3tYdV?ZeMk(N6uvYpD_kjKH;j8;QuV<#WMcM{@n;`p0S>^-M%|yxD zx4~9&cL>`qs`!mUj*rENlWMQG-kuu~ZwvV$*s*l8>`1qb^?;s-UEQ>e<_MWHH;*# zl+c8M*iRbN7Kwa#C>l{qX3v$U!Mt<)PU`C$Uc&iX>F*B}X*!R14V@$jg)= zPh?2(*eS&`Vru)hI_(Tu)YpYoJ+Cal_?G4nD~&$n=@$hVL3F@hVeMX}LI8_Ys=H7#|c3CM8IV%O*2^t^|LcA{wnd2K7AyD5n=>DIc+BRZvQmbdO^ z4%A0FB_}lO2{l696Ze+h{jkQIx*F3QC0Cklw#>!vR)1S~_tw;0Scz14QQyrKS8DK_ z!NsCx?R+V8fnW@}Q$MR`s9SdG4q8_Q(e_DX=YEeGq&wueKvutMrNKUdezI`LJym6Y z-JaUhSkI~r>)bApYN)D}fbgiTm7=t{LF%}xZ&I=fz9ZMCH+v_!WmmE`qxTe)5Bol_ zF3Y8L*GK#mHp)$GkDU0ka zO%+kdCbPj5EkPI?_dJN1WPHXpsj=hU8zsc5Kwvz?ClVlJBew)Wq~evd4^s9-chz^q z^rx=!-NH%a%eBw)r&m=gk83V6k*wh|Y2=mt89%54fdhd9fdhd9fdhd9fdhg6BY}HY Z_H;Z+QuTx>T<%|OgFJmas6YNQ{ohOq266xZ literal 0 HcmV?d00001 diff --git a/module/ui/assets.py b/module/ui/assets.py index 3298d07ff..29c535989 100644 --- a/module/ui/assets.py +++ b/module/ui/assets.py @@ -25,6 +25,7 @@ CAMPAIGN_MENU_GOTO_WAR_ARCHIVES = Button(area={'cn': (210, 586, 310, 638), 'en': CAMPAIGN_MENU_NO_EVENT = Button(area={'cn': (681, 204, 831, 233), 'en': (616, 206, 897, 233), 'jp': (575, 209, 940, 235), 'tw': (681, 204, 831, 233)}, color={'cn': (65, 75, 84), 'en': (57, 67, 77), 'jp': (49, 60, 70), 'tw': (65, 75, 84)}, button={'cn': (681, 204, 831, 233), 'en': (616, 206, 897, 233), 'jp': (575, 209, 940, 235), 'tw': (681, 204, 831, 233)}, file={'cn': './assets/cn/ui/CAMPAIGN_MENU_NO_EVENT.png', 'en': './assets/en/ui/CAMPAIGN_MENU_NO_EVENT.png', 'jp': './assets/jp/ui/CAMPAIGN_MENU_NO_EVENT.png', 'tw': './assets/cn/ui/CAMPAIGN_MENU_NO_EVENT.png'}) CHANNEL_CHECK = Button(area={'cn': (785, 661, 824, 699), 'en': (785, 661, 824, 699), 'jp': (785, 661, 824, 699), 'tw': (785, 661, 824, 699)}, color={'cn': (88, 90, 89), 'en': (88, 90, 89), 'jp': (88, 90, 89), 'tw': (88, 90, 89)}, button={'cn': (785, 661, 824, 699), 'en': (785, 661, 824, 699), 'jp': (785, 661, 824, 699), 'tw': (785, 661, 824, 699)}, file={'cn': './assets/cn/ui/CHANNEL_CHECK.png', 'en': './assets/cn/ui/CHANNEL_CHECK.png', 'jp': './assets/cn/ui/CHANNEL_CHECK.png', 'tw': './assets/cn/ui/CHANNEL_CHECK.png'}) COMMISSION_CHECK = Button(area={'cn': (122, 16, 175, 39), 'en': (120, 14, 301, 41), 'jp': (121, 14, 176, 39), 'tw': (121, 14, 176, 41)}, color={'cn': (157, 173, 210), 'en': (98, 112, 150), 'jp': (159, 175, 211), 'tw': (141, 155, 193)}, button={'cn': (122, 16, 175, 39), 'en': (120, 14, 301, 41), 'jp': (121, 14, 176, 39), 'tw': (121, 14, 176, 41)}, file={'cn': './assets/cn/ui/COMMISSION_CHECK.png', 'en': './assets/en/ui/COMMISSION_CHECK.png', 'jp': './assets/jp/ui/COMMISSION_CHECK.png', 'tw': './assets/tw/ui/COMMISSION_CHECK.png'}) +COMMISSION_CHECK_ENTMP = Button(area={'cn': (115, 15, 181, 39), 'en': (115, 15, 181, 39), 'jp': (115, 15, 181, 39), 'tw': (115, 15, 181, 39)}, color={'cn': (108, 120, 162), 'en': (108, 120, 162), 'jp': (108, 120, 162), 'tw': (108, 120, 162)}, button={'cn': (115, 15, 181, 39), 'en': (115, 15, 181, 39), 'jp': (115, 15, 181, 39), 'tw': (115, 15, 181, 39)}, file={'cn': './assets/cn/ui/COMMISSION_CHECK_ENTMP.png', 'en': './assets/cn/ui/COMMISSION_CHECK_ENTMP.png', 'jp': './assets/cn/ui/COMMISSION_CHECK_ENTMP.png', 'tw': './assets/cn/ui/COMMISSION_CHECK_ENTMP.png'}) DAILY_CHECK = Button(area={'cn': (23, 656, 67, 698), 'en': (23, 656, 67, 698), 'jp': (23, 656, 67, 698), 'tw': (23, 656, 67, 698)}, color={'cn': (84, 139, 210), 'en': (84, 139, 210), 'jp': (84, 139, 210), 'tw': (84, 139, 210)}, button={'cn': (23, 656, 67, 698), 'en': (23, 656, 67, 698), 'jp': (23, 656, 67, 698), 'tw': (23, 656, 67, 698)}, file={'cn': './assets/cn/ui/DAILY_CHECK.png', 'en': './assets/en/ui/DAILY_CHECK.png', 'jp': './assets/jp/ui/DAILY_CHECK.png', 'tw': './assets/tw/ui/DAILY_CHECK.png'}) DORMMENU_CHECK = Button(area={'cn': (261, 487, 334, 587), 'en': (261, 487, 334, 587), 'jp': (261, 487, 334, 587), 'tw': (261, 487, 334, 587)}, color={'cn': (181, 172, 178), 'en': (181, 172, 178), 'jp': (181, 172, 178), 'tw': (181, 172, 178)}, button={'cn': (261, 487, 334, 587), 'en': (261, 487, 334, 587), 'jp': (261, 487, 334, 587), 'tw': (261, 487, 334, 587)}, file={'cn': './assets/cn/ui/DORMMENU_CHECK.png', 'en': './assets/en/ui/DORMMENU_CHECK.png', 'jp': './assets/jp/ui/DORMMENU_CHECK.png', 'tw': './assets/tw/ui/DORMMENU_CHECK.png'}) DORMMENU_GOTO_ACADEMY = Button(area={'cn': (261, 487, 334, 587), 'en': (261, 487, 334, 587), 'jp': (261, 487, 334, 587), 'tw': (261, 487, 334, 587)}, color={'cn': (181, 172, 178), 'en': (181, 172, 178), 'jp': (181, 172, 178), 'tw': (181, 172, 178)}, button={'cn': (261, 487, 334, 587), 'en': (261, 487, 334, 587), 'jp': (261, 487, 334, 587), 'tw': (261, 487, 334, 587)}, file={'cn': './assets/cn/ui/DORMMENU_GOTO_ACADEMY.png', 'en': './assets/en/ui/DORMMENU_GOTO_ACADEMY.png', 'jp': './assets/jp/ui/DORMMENU_GOTO_ACADEMY.png', 'tw': './assets/tw/ui/DORMMENU_GOTO_ACADEMY.png'}) @@ -66,6 +67,7 @@ MEOWFFICER_GOTO_DORMMENU = Button(area={'cn': (24, 7, 49, 45), 'en': (24, 7, 49, MEOWFFICER_INFO = Button(area={'cn': (1090, 603, 1241, 650), 'en': (1106, 616, 1227, 638), 'jp': (1089, 608, 1240, 647), 'tw': (1124, 610, 1207, 647)}, color={'cn': (243, 214, 92), 'en': (212, 182, 77), 'jp': (247, 218, 92), 'tw': (229, 200, 87)}, button={'cn': (1090, 603, 1241, 650), 'en': (1106, 616, 1227, 638), 'jp': (1089, 608, 1240, 647), 'tw': (1124, 610, 1207, 647)}, file={'cn': './assets/cn/ui/MEOWFFICER_INFO.png', 'en': './assets/en/ui/MEOWFFICER_INFO.png', 'jp': './assets/jp/ui/MEOWFFICER_INFO.png', 'tw': './assets/tw/ui/MEOWFFICER_INFO.png'}) META_CHECK = Button(area={'cn': (120, 14, 209, 35), 'en': (148, 13, 265, 36), 'jp': (125, 11, 235, 39), 'tw': (120, 14, 209, 35)}, color={'cn': (159, 143, 144), 'en': (170, 156, 156), 'jp': (124, 105, 106), 'tw': (159, 143, 144)}, button={'cn': (120, 14, 209, 35), 'en': (148, 13, 265, 36), 'jp': (125, 11, 235, 39), 'tw': (120, 14, 209, 35)}, file={'cn': './assets/cn/ui/META_CHECK.png', 'en': './assets/en/ui/META_CHECK.png', 'jp': './assets/jp/ui/META_CHECK.png', 'tw': './assets/tw/ui/META_CHECK.png'}) MISSION_CHECK = Button(area={'cn': (120, 15, 173, 40), 'en': (123, 18, 221, 37), 'jp': (120, 14, 173, 40), 'tw': (119, 12, 176, 42)}, color={'cn': (141, 156, 194), 'en': (104, 117, 158), 'jp': (150, 165, 202), 'tw': (125, 139, 178)}, button={'cn': (120, 15, 173, 40), 'en': (123, 18, 221, 37), 'jp': (120, 14, 173, 40), 'tw': (119, 12, 176, 42)}, file={'cn': './assets/cn/ui/MISSION_CHECK.png', 'en': './assets/en/ui/MISSION_CHECK.png', 'jp': './assets/jp/ui/MISSION_CHECK.png', 'tw': './assets/tw/ui/MISSION_CHECK.png'}) +MISSION_CHECK_ENTMP = Button(area={'cn': (113, 20, 172, 33), 'en': (113, 20, 172, 33), 'jp': (113, 20, 172, 33), 'tw': (113, 20, 172, 33)}, color={'cn': (111, 124, 166), 'en': (111, 124, 166), 'jp': (111, 124, 166), 'tw': (111, 124, 166)}, button={'cn': (113, 20, 172, 33), 'en': (113, 20, 172, 33), 'jp': (113, 20, 172, 33), 'tw': (113, 20, 172, 33)}, file={'cn': './assets/cn/ui/MISSION_CHECK_ENTMP.png', 'en': './assets/cn/ui/MISSION_CHECK_ENTMP.png', 'jp': './assets/cn/ui/MISSION_CHECK_ENTMP.png', 'tw': './assets/cn/ui/MISSION_CHECK_ENTMP.png'}) MUNITIONS_CHECK = Button(area={'cn': (60, 361, 104, 395), 'en': (60, 361, 104, 395), 'jp': (59, 371, 126, 397), 'tw': (11, 374, 131, 402)}, color={'cn': (115, 191, 235), 'en': (111, 189, 234), 'jp': (134, 194, 227), 'tw': (101, 200, 255)}, button={'cn': (60, 361, 104, 395), 'en': (60, 361, 104, 395), 'jp': (59, 371, 126, 397), 'tw': (11, 374, 131, 402)}, file={'cn': './assets/cn/ui/MUNITIONS_CHECK.png', 'en': './assets/en/ui/MUNITIONS_CHECK.png', 'jp': './assets/jp/ui/MUNITIONS_CHECK.png', 'tw': './assets/tw/ui/MUNITIONS_CHECK.png'}) OS_CHECK = Button(area={'cn': (613, 17, 627, 34), 'en': (613, 17, 627, 34), 'jp': (613, 17, 627, 34), 'tw': (613, 17, 627, 34)}, color={'cn': (58, 117, 146), 'en': (58, 117, 146), 'jp': (58, 117, 146), 'tw': (58, 117, 146)}, button={'cn': (613, 17, 627, 34), 'en': (613, 17, 627, 34), 'jp': (613, 17, 627, 34), 'tw': (613, 17, 627, 34)}, file={'cn': './assets/cn/ui/OS_CHECK.png', 'en': './assets/en/ui/OS_CHECK.png', 'jp': './assets/jp/ui/OS_CHECK.png', 'tw': './assets/tw/ui/OS_CHECK.png'}) PLAYER_CHECK = Button(area={'cn': (28, 668, 139, 688), 'en': (11, 649, 157, 705), 'jp': (26, 668, 139, 689), 'tw': (28, 668, 139, 688)}, color={'cn': (237, 204, 127), 'en': (197, 156, 97), 'jp': (237, 205, 128), 'tw': (237, 204, 127)}, button={'cn': (28, 668, 139, 688), 'en': (11, 649, 157, 705), 'jp': (26, 668, 139, 689), 'tw': (28, 668, 139, 688)}, file={'cn': './assets/cn/ui/PLAYER_CHECK.png', 'en': './assets/en/ui/PLAYER_CHECK.png', 'jp': './assets/jp/ui/PLAYER_CHECK.png', 'tw': './assets/tw/ui/PLAYER_CHECK.png'}) diff --git a/module/ui/ui.py b/module/ui/ui.py index 8393e8b3f..24cfb8204 100644 --- a/module/ui/ui.py +++ b/module/ui/ui.py @@ -19,7 +19,8 @@ from module.ocr.ocr import Ocr from module.os_handler.assets import (AUTO_SEARCH_REWARD, EXCHANGE_CHECK, RESET_FLEET_PREPARATION, RESET_TICKET_POPUP) from module.raid.assets import * from module.ui.assets import * -from module.ui.page import Page, page_campaign, page_event, page_main, page_main_white, page_sp +from module.ui.page import Page, page_campaign, page_event, page_main, page_main_white, page_sp, page_commission, \ + page_mission from module.ui_white.assets import * @@ -39,6 +40,13 @@ class UI(InfoHandler): if self.appear(page_main.check_button, offset=(5, 5), interval=interval): return True return False + # 2025.10.16 Temp fix for bugged UI + if page == page_commission: + if self.appear(COMMISSION_CHECK_ENTMP, offset=offset, interval=interval): + return True + if page == page_mission: + if self.appear(MISSION_CHECK_ENTMP, offset=offset, interval=interval): + return True return self.appear(page.check_button, offset=offset, interval=interval) def is_in_main(self, offset=(30, 30), interval=0): From 61b0745750ceed56908a909f620bf588b3b0ca47 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 17 Oct 2025 04:14:01 +0800 Subject: [PATCH 02/27] Fix: Use ui_page_appear instead of check button directly --- module/commission/commission.py | 4 ++-- module/reward/reward.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/module/commission/commission.py b/module/commission/commission.py index a837bb736..5931f1b00 100644 --- a/module/commission/commission.py +++ b/module/commission/commission.py @@ -17,7 +17,7 @@ from module.logger import logger from module.map.map_grids import SelectedGrids from module.retire.assets import DOCK_CHECK from module.ui.assets import BACK_ARROW, COMMISSION_CHECK, REWARD_GOTO_COMMISSION -from module.ui.page import page_reward +from module.ui.page import page_reward, page_commission from module.ui.scroll import Scroll from module.ui.switch import Switch from module.ui.ui import UI @@ -518,7 +518,7 @@ class RewardCommission(UI, InfoHandler): self.device.screenshot() # End - if self.appear(COMMISSION_CHECK, offset=(20, 20)): + if self.ui_page_appear(page_commission, offset=(20, 20)): # Leaving at page_commission # Commission rewards may appear too slow, causing stuck in UI switching break diff --git a/module/reward/reward.py b/module/reward/reward.py index 333da4b9a..644d60d94 100644 --- a/module/reward/reward.py +++ b/module/reward/reward.py @@ -118,7 +118,7 @@ class Reward(UI): timeout.reset() continue - if not self.appear(MISSION_CHECK): + if not self.ui_page_appear(page_mission): if self.appear_then_click(GET_SHIP, interval=interval): exit_timer.reset() click_timer.reset() From f31da700a0321aaa2370534d9a9cc4bbed27cf2c Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 17 Oct 2025 04:37:45 +0800 Subject: [PATCH 03/27] Del: Remove old mail module --- assets/cn/freebies/MAIL_COLLECT.png | Bin 14514 -> 0 bytes assets/cn/freebies/MAIL_COLLECTED.png | Bin 10699 -> 0 bytes assets/cn/freebies/MAIL_DELETE.png | Bin 13545 -> 0 bytes assets/cn/freebies/MAIL_EMPTY.png | Bin 7275 -> 0 bytes assets/cn/freebies/MAIL_GUILD_MESSAGE.png | Bin 6751 -> 0 bytes assets/en/freebies/MAIL_COLLECT.png | Bin 4989 -> 0 bytes assets/en/freebies/MAIL_COLLECTED.png | Bin 5736 -> 0 bytes assets/en/freebies/MAIL_DELETE.png | Bin 4153 -> 0 bytes assets/en/freebies/MAIL_EMPTY.png | Bin 7291 -> 0 bytes assets/en/freebies/MAIL_GUILD_MESSAGE.png | Bin 6751 -> 0 bytes assets/jp/freebies/MAIL_COLLECT.png | Bin 11140 -> 0 bytes assets/jp/freebies/MAIL_COLLECTED.png | Bin 8797 -> 0 bytes assets/jp/freebies/MAIL_DELETE.png | Bin 11966 -> 0 bytes assets/jp/freebies/MAIL_EMPTY.png | Bin 9779 -> 0 bytes assets/jp/freebies/MAIL_GUILD_MESSAGE.png | Bin 6751 -> 0 bytes assets/tw/freebies/MAIL_COLLECT.png | Bin 14531 -> 0 bytes assets/tw/freebies/MAIL_COLLECTED.png | Bin 10108 -> 0 bytes assets/tw/freebies/MAIL_DELETE.png | Bin 12890 -> 0 bytes assets/tw/freebies/MAIL_GUILD_MESSAGE.png | Bin 6751 -> 0 bytes module/freebies/assets.py | 5 - module/freebies/mail.py | 253 ---------------------- 21 files changed, 258 deletions(-) delete mode 100644 assets/cn/freebies/MAIL_COLLECT.png delete mode 100644 assets/cn/freebies/MAIL_COLLECTED.png delete mode 100644 assets/cn/freebies/MAIL_DELETE.png delete mode 100644 assets/cn/freebies/MAIL_EMPTY.png delete mode 100644 assets/cn/freebies/MAIL_GUILD_MESSAGE.png delete mode 100644 assets/en/freebies/MAIL_COLLECT.png delete mode 100644 assets/en/freebies/MAIL_COLLECTED.png delete mode 100644 assets/en/freebies/MAIL_DELETE.png delete mode 100644 assets/en/freebies/MAIL_EMPTY.png delete mode 100644 assets/en/freebies/MAIL_GUILD_MESSAGE.png delete mode 100644 assets/jp/freebies/MAIL_COLLECT.png delete mode 100644 assets/jp/freebies/MAIL_COLLECTED.png delete mode 100644 assets/jp/freebies/MAIL_DELETE.png delete mode 100644 assets/jp/freebies/MAIL_EMPTY.png delete mode 100644 assets/jp/freebies/MAIL_GUILD_MESSAGE.png delete mode 100644 assets/tw/freebies/MAIL_COLLECT.png delete mode 100644 assets/tw/freebies/MAIL_COLLECTED.png delete mode 100644 assets/tw/freebies/MAIL_DELETE.png delete mode 100644 assets/tw/freebies/MAIL_GUILD_MESSAGE.png delete mode 100644 module/freebies/mail.py diff --git a/assets/cn/freebies/MAIL_COLLECT.png b/assets/cn/freebies/MAIL_COLLECT.png deleted file mode 100644 index c681535d1e33c6bc5600a135adcaa966b271caa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14514 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 diff --git a/assets/cn/freebies/MAIL_DELETE.png b/assets/cn/freebies/MAIL_DELETE.png deleted file mode 100644 index 9d7e3dd837fd0414eb8fcbce3b6440486fb98148..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13545 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 diff --git a/assets/cn/freebies/MAIL_GUILD_MESSAGE.png b/assets/cn/freebies/MAIL_GUILD_MESSAGE.png deleted file mode 100644 index 3760b1823caea29a4c531f9ebc1ecbeb3aa76346..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6751 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 diff --git a/assets/en/freebies/MAIL_COLLECT.png b/assets/en/freebies/MAIL_COLLECT.png deleted file mode 100644 index 8f7de404b74921bdac737f9e4cc90157c43d642c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4989 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 diff --git a/assets/en/freebies/MAIL_COLLECTED.png b/assets/en/freebies/MAIL_COLLECTED.png deleted file mode 100644 index 06916e9400b1058d575733f74e20869e5b0314c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5736 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 H67%EV1ArP5 diff --git a/assets/en/freebies/MAIL_EMPTY.png b/assets/en/freebies/MAIL_EMPTY.png deleted file mode 100644 index 19fd5410e82d3159913bf788b3dc51ab29e867da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7291 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 diff --git a/assets/jp/freebies/MAIL_COLLECT.png b/assets/jp/freebies/MAIL_COLLECT.png deleted file mode 100644 index b6db5cf4f86b49865f93829166228be3803cbb80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11140 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 diff --git a/assets/jp/freebies/MAIL_COLLECTED.png b/assets/jp/freebies/MAIL_COLLECTED.png deleted file mode 100644 index 32afefa0e7c721ef2efcdfe668e650719084dcb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8797 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 H=fD38YV5A) diff --git a/assets/jp/freebies/MAIL_EMPTY.png b/assets/jp/freebies/MAIL_EMPTY.png deleted file mode 100644 index 639b2e0b620917d37aa2908f1f2b7cb8f0282467..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9779 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 Bt^oi5 diff --git a/assets/jp/freebies/MAIL_GUILD_MESSAGE.png b/assets/jp/freebies/MAIL_GUILD_MESSAGE.png deleted file mode 100644 index 3760b1823caea29a4c531f9ebc1ecbeb3aa76346..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6751 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 diff --git a/assets/tw/freebies/MAIL_COLLECT.png b/assets/tw/freebies/MAIL_COLLECT.png deleted file mode 100644 index 09fac657ae71e160ccdc764c09ed83cde252ea13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14531 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 V-QSAWcU)htmAQ>s;ZK);`EN?>$v*%9 diff --git a/assets/tw/freebies/MAIL_COLLECTED.png b/assets/tw/freebies/MAIL_COLLECTED.png deleted file mode 100644 index e87cc79b88ea8f8655c89adaf4d5984779031249..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10108 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 diff --git a/assets/tw/freebies/MAIL_GUILD_MESSAGE.png b/assets/tw/freebies/MAIL_GUILD_MESSAGE.png deleted file mode 100644 index 3760b1823caea29a4c531f9ebc1ecbeb3aa76346..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6751 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 diff --git a/module/freebies/assets.py b/module/freebies/assets.py index 2d7bc907e..7e67ebfab 100644 --- a/module/freebies/assets.py +++ b/module/freebies/assets.py @@ -11,12 +11,7 @@ DATA_KEY_COLLECTED = Button(area={'cn': (251, 38, 339, 73), 'en': (255, 42, 338, FREE_SUPPLY_PACK = Button(area={'cn': (264, 615, 312, 641), 'en': (295, 617, 345, 637), 'jp': (281, 617, 324, 639), 'tw': (264, 615, 312, 641)}, color={'cn': (124, 136, 144), 'en': (134, 146, 153), 'jp': (136, 147, 154), 'tw': (124, 136, 144)}, button={'cn': (234, 302, 348, 396), 'en': (293, 321, 373, 381), 'jp': (247, 302, 361, 396), 'tw': (234, 302, 348, 396)}, file={'cn': './assets/cn/freebies/FREE_SUPPLY_PACK.png', 'en': './assets/en/freebies/FREE_SUPPLY_PACK.png', 'jp': './assets/jp/freebies/FREE_SUPPLY_PACK.png', 'tw': './assets/tw/freebies/FREE_SUPPLY_PACK.png'}) MAIL_BATCH_CLAIM = Button(area={'cn': (593, 524, 687, 546), 'en': (643, 525, 704, 543), 'jp': (592, 523, 688, 547), 'tw': (593, 524, 687, 546)}, color={'cn': (114, 209, 255), 'en': (147, 220, 255), 'jp': (109, 207, 255), 'tw': (114, 209, 255)}, button={'cn': (593, 524, 687, 546), 'en': (643, 525, 704, 543), 'jp': (592, 523, 688, 547), 'tw': (593, 524, 687, 546)}, file={'cn': './assets/cn/freebies/MAIL_BATCH_CLAIM.png', 'en': './assets/en/freebies/MAIL_BATCH_CLAIM.png', 'jp': './assets/jp/freebies/MAIL_BATCH_CLAIM.png', 'tw': './assets/cn/freebies/MAIL_BATCH_CLAIM.png'}) MAIL_BATCH_DELETE = Button(area={'cn': (770, 523, 865, 547), 'en': (817, 526, 887, 544), 'jp': (770, 523, 866, 547), 'tw': (770, 523, 865, 547)}, color={'cn': (112, 209, 255), 'en': (150, 221, 255), 'jp': (114, 209, 255), 'tw': (112, 209, 255)}, button={'cn': (770, 523, 865, 547), 'en': (817, 526, 887, 544), 'jp': (770, 523, 866, 547), 'tw': (770, 523, 865, 547)}, file={'cn': './assets/cn/freebies/MAIL_BATCH_DELETE.png', 'en': './assets/en/freebies/MAIL_BATCH_DELETE.png', 'jp': './assets/jp/freebies/MAIL_BATCH_DELETE.png', 'tw': './assets/cn/freebies/MAIL_BATCH_DELETE.png'}) -MAIL_COLLECT = Button(area={'cn': (841, 577, 970, 608), 'en': (865, 583, 947, 601), 'jp': (842, 575, 964, 609), 'tw': (838, 575, 973, 611)}, color={'cn': (155, 184, 219), 'en': (151, 180, 216), 'jp': (116, 154, 203), 'tw': (145, 174, 212)}, button={'cn': (841, 577, 970, 608), 'en': (865, 583, 947, 601), 'jp': (842, 575, 964, 609), 'tw': (838, 575, 973, 611)}, file={'cn': './assets/cn/freebies/MAIL_COLLECT.png', 'en': './assets/en/freebies/MAIL_COLLECT.png', 'jp': './assets/jp/freebies/MAIL_COLLECT.png', 'tw': './assets/tw/freebies/MAIL_COLLECT.png'}) -MAIL_COLLECTED = Button(area={'cn': (893, 578, 986, 607), 'en': (835, 578, 975, 606), 'jp': (861, 575, 951, 608), 'tw': (891, 576, 987, 609)}, color={'cn': (55, 61, 70), 'en': (54, 63, 71), 'jp': (48, 57, 65), 'tw': (55, 62, 72)}, button={'cn': (893, 578, 986, 607), 'en': (835, 578, 975, 606), 'jp': (861, 575, 951, 608), 'tw': (891, 576, 987, 609)}, file={'cn': './assets/cn/freebies/MAIL_COLLECTED.png', 'en': './assets/en/freebies/MAIL_COLLECTED.png', 'jp': './assets/jp/freebies/MAIL_COLLECTED.png', 'tw': './assets/tw/freebies/MAIL_COLLECTED.png'}) -MAIL_DELETE = Button(area={'cn': (176, 560, 306, 590), 'en': (428, 567, 500, 584), 'jp': (177, 556, 307, 591), 'tw': (175, 559, 308, 592)}, color={'cn': (221, 171, 166), 'en': (216, 173, 169), 'jp': (210, 151, 146), 'tw': (217, 166, 162)}, button={'cn': (176, 560, 306, 590), 'en': (428, 567, 500, 584), 'jp': (177, 556, 307, 591), 'tw': (175, 559, 308, 592)}, file={'cn': './assets/cn/freebies/MAIL_DELETE.png', 'en': './assets/en/freebies/MAIL_DELETE.png', 'jp': './assets/jp/freebies/MAIL_DELETE.png', 'tw': './assets/tw/freebies/MAIL_DELETE.png'}) -MAIL_EMPTY = Button(area={'cn': (617, 341, 665, 365), 'en': (236, 365, 371, 404), 'jp': (656, 340, 784, 365), 'tw': (617, 341, 665, 365)}, color={'cn': (185, 187, 194), 'en': (148, 160, 177), 'jp': (148, 150, 162), 'tw': (185, 187, 194)}, button={'cn': (617, 341, 665, 365), 'en': (236, 365, 371, 404), 'jp': (656, 340, 784, 365), 'tw': (617, 341, 665, 365)}, file={'cn': './assets/cn/freebies/MAIL_EMPTY.png', 'en': './assets/en/freebies/MAIL_EMPTY.png', 'jp': './assets/jp/freebies/MAIL_EMPTY.png', 'tw': './assets/cn/freebies/MAIL_EMPTY.png'}) MAIL_ENTER = Button(area={'cn': (1207, 393, 1253, 429), 'en': (1207, 393, 1253, 429), 'jp': (1207, 393, 1253, 429), 'tw': (1207, 393, 1253, 429)}, color={'cn': (109, 107, 95), 'en': (109, 107, 95), 'jp': (109, 107, 95), 'tw': (109, 107, 95)}, button={'cn': (1207, 393, 1253, 429), 'en': (1207, 393, 1253, 429), 'jp': (1207, 393, 1253, 429), 'tw': (1207, 393, 1253, 429)}, file={'cn': './assets/cn/freebies/MAIL_ENTER.png', 'en': './assets/en/freebies/MAIL_ENTER.png', 'jp': './assets/jp/freebies/MAIL_ENTER.png', 'tw': './assets/tw/freebies/MAIL_ENTER.png'}) -MAIL_GUILD_MESSAGE = Button(area={'cn': (412, 214, 461, 235), 'en': (412, 214, 461, 235), 'jp': (412, 214, 461, 235), 'tw': (412, 214, 461, 235)}, color={'cn': (123, 124, 126), 'en': (123, 124, 126), 'jp': (123, 124, 126), 'tw': (123, 124, 126)}, button={'cn': (412, 214, 461, 235), 'en': (412, 214, 461, 235), 'jp': (412, 214, 461, 235), 'tw': (412, 214, 461, 235)}, file={'cn': './assets/cn/freebies/MAIL_GUILD_MESSAGE.png', 'en': './assets/en/freebies/MAIL_GUILD_MESSAGE.png', 'jp': './assets/jp/freebies/MAIL_GUILD_MESSAGE.png', 'tw': './assets/tw/freebies/MAIL_GUILD_MESSAGE.png'}) MAIL_MANAGE = Button(area={'cn': (415, 639, 485, 658), 'en': (393, 641, 463, 660), 'jp': (407, 641, 495, 658), 'tw': (415, 639, 485, 658)}, color={'cn': (116, 210, 255), 'en': (131, 214, 255), 'jp': (115, 209, 255), 'tw': (116, 210, 255)}, button={'cn': (415, 639, 485, 658), 'en': (393, 641, 463, 660), 'jp': (407, 641, 495, 658), 'tw': (415, 639, 485, 658)}, file={'cn': './assets/cn/freebies/MAIL_MANAGE.png', 'en': './assets/en/freebies/MAIL_MANAGE.png', 'jp': './assets/jp/freebies/MAIL_MANAGE.png', 'tw': './assets/cn/freebies/MAIL_MANAGE.png'}) MAIL_SELECT_ALL = Button(area={'cn': (390, 319, 410, 339), 'en': (390, 319, 410, 339), 'jp': (390, 323, 410, 343), 'tw': (390, 319, 410, 339)}, color={'cn': (87, 88, 88), 'en': (87, 88, 88), 'jp': (91, 90, 91), 'tw': (87, 88, 88)}, button={'cn': (390, 319, 410, 339), 'en': (390, 319, 410, 339), 'jp': (390, 323, 410, 343), 'tw': (390, 319, 410, 339)}, file={'cn': './assets/cn/freebies/MAIL_SELECT_ALL.png', 'en': './assets/en/freebies/MAIL_SELECT_ALL.png', 'jp': './assets/jp/freebies/MAIL_SELECT_ALL.png', 'tw': './assets/tw/freebies/MAIL_SELECT_ALL.png'}) MAIL_SELECT_COINS = Button(area={'cn': (562, 401, 582, 421), 'en': (562, 401, 582, 421), 'jp': (562, 410, 582, 430), 'tw': (562, 401, 582, 421)}, color={'cn': (241, 240, 241), 'en': (241, 240, 241), 'jp': (239, 239, 239), 'tw': (241, 240, 241)}, button={'cn': (562, 401, 582, 421), 'en': (562, 401, 582, 421), 'jp': (562, 410, 582, 430), 'tw': (562, 401, 582, 421)}, file={'cn': './assets/cn/freebies/MAIL_SELECT_COINS.png', 'en': './assets/en/freebies/MAIL_SELECT_COINS.png', 'jp': './assets/jp/freebies/MAIL_SELECT_COINS.png', 'tw': './assets/tw/freebies/MAIL_SELECT_COINS.png'}) diff --git a/module/freebies/mail.py b/module/freebies/mail.py deleted file mode 100644 index 89959e608..000000000 --- a/module/freebies/mail.py +++ /dev/null @@ -1,253 +0,0 @@ -import re - -from module.base.button import ButtonGrid -from module.base.decorator import cached_property -from module.base.filter import Filter -from module.base.timer import Timer -from module.combat.assets import * -from module.freebies.assets import * -from module.logger import logger -from module.statistics.item import ItemGrid -from module.ui.page import page_main, page_main_white -from module.ui.ui import UI -from module.ui_white.assets import MAIL_ENTER_WHITE - -MAIL_BUTTON_GRID = ButtonGrid( - origin=(137, 207), delta=(0, 97), - button_shape=(64, 64), grid_shape=(1, 3), - name='MAIL_BUTTON_GRID') -FILTER_REGEX = re.compile( - '^(cube|coin|coolant|decorcoin|oil|merit|gem)$', - flags=re.IGNORECASE) -FILTER_ATTR = ['name'] -FILTER = Filter(FILTER_REGEX, FILTER_ATTR) - - -class Mail(UI): - def _mail_enter(self, delete=False, skip_first_screenshot=True): - """ - Goes to mail page - Also deletes viewed mails to ensure the relevant - row entries are in view - - Args: - delete (bool): - Enable extra step to delete old - already collected mail entries - skip_first_screenshot (bool): - - Returns: - bool: False if mail list empty - """ - logger.hr('Mail enter') - btn_expanded = MAIL_BUTTON_GRID.buttons[0] - btn_collapsed = btn_expanded.move((350, 0)) - self.interval_clear([page_main.check_button, page_main_white.check_button, MAIL_DELETE]) - while 1: - if skip_first_screenshot: - skip_first_screenshot = False - else: - self.device.screenshot() - - # End - if self.appear(MAIL_EMPTY, offset=(20, 20)): - logger.info('Mail list empty') - return False - if self.appear(MAIL_GUILD_MESSAGE, offset=(20, 20)): - logger.info('Guild mail found, exit') - return False - if not delete and self._mail_selected(btn_expanded): - if self.appear(MAIL_COLLECT, offset=(20, 20)): - return True - if self.appear(MAIL_COLLECTED, offset=(20, 20)): - return True - - if self.appear(page_main.check_button, offset=(30, 30), interval=3): - self.device.click(MAIL_ENTER) - continue - if self.appear(page_main_white.check_button, offset=(30, 30), interval=3): - self.device.click(MAIL_ENTER_WHITE) - continue - if delete: - if self.appear_then_click(MAIL_DELETE, offset=(350, 20), interval=3): - continue - if self.handle_popup_confirm('MAIL_DELETE'): - delete = False - continue - else: - if self.appear(MAIL_DELETE, offset=(350, 20), interval=3): - self.device.click(btn_collapsed) - continue - if self.handle_info_bar(): - continue - - def _mail_exit(self, skip_first_screenshot=True): - """ - Exits from mail page back into page_main - - Args: - skip_first_screenshot (bool): - """ - logger.hr('Mail exit') - self.interval_clear([MAIL_DELETE, GET_ITEMS_1, GET_ITEMS_2]) - while 1: - if skip_first_screenshot: - skip_first_screenshot = False - else: - self.device.screenshot() - - if self.appear(GET_ITEMS_1, offset=(30, 30), interval=1): - self.device.click(MAIL_COLLECT) - continue - if self.appear(GET_ITEMS_2, offset=(30, 30), interval=1): - self.device.click(MAIL_COLLECT) - continue - if self.appear(MAIL_DELETE, offset=(350, 20), interval=3): - self.device.click(MAIL_ENTER) - continue - if self.handle_info_bar(): - continue - - # End - if self.is_in_main(): - break - - @cached_property - def _mail_grid(self): - """ - This grid only comprises the top 3 mail rows - - Returns: - ItemGrid - """ - mail_item_grid = ItemGrid(MAIL_BUTTON_GRID, templates={}, - amount_area=(60, 74, 96, 95)) - mail_item_grid.load_template_folder('./assets/stats_basic') - mail_item_grid.similarity = 0.85 - return mail_item_grid - - def _mail_get_collectable(self): - """ - Loads filter and scans the items in the mail grid - then returns a subset of those that are collectable - - Returns: - list[Item] - """ - FILTER.load(self.config.Mail_Filter.strip()) - items = self._mail_grid.predict( - self.device.image, - name=True, - amount=False, - cost=False, - price=False, - tag=False - ) - filtered = FILTER.apply(items, None) - logger.attr('Item_sort', ' > '.join([str(item) for item in filtered])) - return filtered - - def _mail_selected(self, button): - """ - Check if mail (button) is selected i.e. - has bottom yellow border - - Args: - button (Button): - - Returns: - bool - """ - area = button.area - check_area = tuple([area[0], area[3] + 3, area[2], area[3] + 10]) - return self.image_color_count(check_area, color=(255, 223, 66), threshold=180, count=25) - - def _mail_collect_one(self, item, skip_first_screenshot=True): - """ - Executes the collecting sequence on - one mail item - - Args: - item (Item): - skip_first_screenshot (bool): - """ - logger.hr('Mail collect one') - btn = item._button - click_timer = Timer(1.5, count=3) - self.interval_clear([MAIL_COLLECT, GET_ITEMS_1, GET_ITEMS_2]) - while 1: - if skip_first_screenshot: - skip_first_screenshot = False - else: - self.device.screenshot() - - if click_timer.reached(): - if not self._mail_selected(btn): - self.device.click(btn.move((350, 0))) - click_timer.reset() - continue - if self.appear_then_click(MAIL_COLLECT, offset=(20, 20), interval=3): - click_timer.reset() - continue - if self.appear(GET_ITEMS_1, offset=(30, 30), interval=1): - self.device.click(MAIL_COLLECT) - click_timer.reset() - continue - if self.appear(GET_ITEMS_2, offset=(30, 30), interval=1): - self.device.click(MAIL_COLLECT) - click_timer.reset() - continue - if self.handle_info_bar(): - click_timer.reset() - continue - - # End - if self.appear(MAIL_COLLECTED, offset=(20, 20)): - break - - def _mail_collect(self, skip_first_screenshot=True): - """ - Executes the collecting sequence to - applicable mail items - - Args: - skip_first_screenshot (bool): - """ - logger.hr('Mail collect', level=2) - for _ in range(5): - if skip_first_screenshot: - skip_first_screenshot = False - else: - self.device.screenshot() - - collectable = self._mail_get_collectable() - if not collectable: - break - - self._mail_collect_one(collectable[0]) - - logger.info('Finished collecting all applicable mail') - - def mail_run(self, delete=False): - """ - Collects mail rewards - - Args: - delete (bool): - """ - logger.info('Mail run') - - if self._mail_enter(delete): - self._mail_collect() - self._mail_exit() - else: - self._mail_exit() - - def run(self): - """ - Pages: - in: Any page - out: page_main, may have info_bar - """ - self.ui_goto(page_main) - self.mail_run(delete=self.config.Mail_Delete) From bb1242402e1c2066bf53cc83ae8452622e203fcb Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 17 Oct 2025 04:49:56 +0800 Subject: [PATCH 04/27] Fix: Remove DORM_RED_DOT check, as dorm card has a slow appear animation --- module/dorm/dorm.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/module/dorm/dorm.py b/module/dorm/dorm.py index 109ad61f8..0496c5c8a 100644 --- a/module/dorm/dorm.py +++ b/module/dorm/dorm.py @@ -480,11 +480,12 @@ class RewardDorm(UI): self.ui_ensure(page_dormmenu) self.handle_info_bar() - if not self.appear(DORM_RED_DOT, offset=(30, 30)): - logger.info('Nothing to collect. Dorm collecting skipped.') - collect = False - if not feed and not buy_furniture: - return + # 2025.10.17 Remove DORM_RED_DOT check, as dorm card has a slow appear animation + # if not self.appear(DORM_RED_DOT, offset=(30, 30)): + # logger.info('Nothing to collect. Dorm collecting skipped.') + # collect = False + # if not feed and not buy_furniture: + # return self.ui_goto(page_dorm, skip_first_screenshot=True) # Feed first to handle DORM_INFO From f9c25961bb14954ba5133ef784604c84ac93abbe Mon Sep 17 00:00:00 2001 From: dragonheart107 <153553566+dragonheart107@users.noreply.github.com> Date: Fri, 17 Oct 2025 20:25:24 +0200 Subject: [PATCH 05/27] Fix: EN commission + mission reward (#5230) * Revert "Tmp: [EN] Temp fix for bugged UI" This reverts commit c06773e586004c30c969ade48457630234bb566f. * Fix: EN post maintenance UI bugs * duplicate removal --- assets/cn/ui/COMMISSION_CHECK_ENTMP.png | Bin 6671 -> 0 bytes assets/cn/ui/MISSION_CHECK_ENTMP.png | Bin 5027 -> 0 bytes assets/en/commission/COMMISSION_ADVICE.png | Bin 10015 -> 13398 bytes assets/en/commission/COMMISSION_START.png | Bin 7025 -> 10315 bytes assets/en/ui/MISSION_CHECK.png | Bin 6346 -> 14565 bytes module/commission/assets.py | 4 ++-- module/commission/project_data.py | 4 ++-- module/ui/assets.py | 4 +--- module/ui/ui.py | 10 +--------- 9 files changed, 6 insertions(+), 16 deletions(-) delete mode 100644 assets/cn/ui/COMMISSION_CHECK_ENTMP.png delete mode 100644 assets/cn/ui/MISSION_CHECK_ENTMP.png diff --git a/assets/cn/ui/COMMISSION_CHECK_ENTMP.png b/assets/cn/ui/COMMISSION_CHECK_ENTMP.png deleted file mode 100644 index 1a718c6ba55ca354b4b0a382c5e9f94fb8b6c157..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6671 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 Uk1;6fe;?>^#`|>nscZND11U$CTL1t6 diff --git a/assets/cn/ui/MISSION_CHECK_ENTMP.png b/assets/cn/ui/MISSION_CHECK_ENTMP.png deleted file mode 100644 index 34cd18d6b467e27d07bd5934d3b622f2393aeca0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5027 zcmeIz>pvT476rFt-(w} zRpPQ}nih!`L0qCJhES~#giu97La0kpBFUQFe_`LP^X7S8{?7OFobx=q>~m4=sQys^ z0H6l?$-^H2P~N{DdiUj_{o@CdOJ4v0n$aMSb3davt6cbRMvK@ZABs-%SFT|YjpJ~G zln&_2@~>1?9+f{eJ*9lYew4iI-ezf$=HdM$ z|D)QgI#!ad!L>YcL?Eo?D*lN~Nf6*Iiq8xqDO&~*5o!sNEEeZ-lV_o7V&iM6%e)TR zTa!3!{CH)mEOD&IMER&8rH!!n@R}`5OqW3v`&b(Y9eo z^_A*^hrn^?#AYK`$&6xgW`;$!om}RpZ-loDjpn&fNY2Q{t3|)U3wE7vJfW;Ts_1`2 zzCnOR)i{Ap_I>w{|E5d(rL!L&IZh?CMso#5O5{3vihiJQd9!yo?)z`5H6IKN>gDi* zm03hWZA*M2e=fk>H^B@^$G+{ti0IhKk;xt2iYr%UbEY+HmRRdq)UU_seJpnESf2`v z3Go|#Sy@TafpR3wK&X{=Zw7F6X{i~_+HI0746B!@k2JiXVJ8Q!G)*UMd~=?v&V>!Rgd;+y3gdv>*}cUS#9l>h)Yv8_*MmdFdL z;MqWzi(Q*2FKBlq)C@nZTNPkw@i9@0kYj|{vUhN3r179ABm#LeMZR~8Aa7Hqr$=)N8gNynQs30>LP;@4FJ6EE7kj;0nN|MP$F?LJ_;T= zaF9^{dF8_oxMv2|ttfWes`(}bEo+)FmmhDV?3#p8_0N+69?iVl}&n1duI&Z@m>2~s|pfFe^&nL^soAEi9L0i z=6yb8#*gZX!UcMR=N$hG_d;HNG=Ds1NobTizg0mqsvfWTlSdS<33s!Pl%nS7PI!Bh z3#lW6JB zAgjN5kv1R*;~d)}GcP{-PQ1(lq;KecY9z6_I>_R&*P;aNbMX)JwEbsP_GQF<_wUX} zs;HajwTU^T4iqfOOSq+N8R^bQOh(?^Q@~R<7G9XhqZB;&W3IFZ{xJq!BV743-|ddQ zCt09slAG4fAZ4^{6ZCrTjQpXU(u0f=*|1wj*g6;*&%h9#(t;B^E5txmObfbl@aJ3g zO6^!=al#->y<3tYdV?ZeMk(N6uvYpD_kjKH;j8;QuV<#WMcM{@n;`p0S>^-M%|yxD zx4~9&cL>`qs`!mUj*rENlWMQG-kuu~ZwvV$*s*l8>`1qb^?;s-UEQ>e<_MWHH;*# zl+c8M*iRbN7Kwa#C>l{qX3v$U!Mt<)PU`C$Uc&iX>F*B}X*!R14V@$jg)= zPh?2(*eS&`Vru)hI_(Tu)YpYoJ+Cal_?G4nD~&$n=@$hVL3F@hVeMX}LI8_Ys=H7#|c3CM8IV%O*2^t^|LcA{wnd2K7AyD5n=>DIc+BRZvQmbdO^ z4%A0FB_}lO2{l696Ze+h{jkQIx*F3QC0Cklw#>!vR)1S~_tw;0Scz14QQyrKS8DK_ z!NsCx?R+V8fnW@}Q$MR`s9SdG4q8_Q(e_DX=YEeGq&wueKvutMrNKUdezI`LJym6Y z-JaUhSkI~r>)bApYN)D}fbgiTm7=t{LF%}xZ&I=fz9ZMCH+v_!WmmE`qxTe)5Bol_ zF3Y8L*GK#mHp)$GkDU0ka zO%+kdCbPj5EkPI?_dJN1WPHXpsj=hU8zsc5Kwvz?ClVlJBew)Wq~evd4^s9-chz^q z^rx=!-NH%a%eBw)r&m=gk83V6k*wh|Y2=mt89%54fdhd9fdhd9fdhd9fdhg6BY}HY Z_H;Z+QuTx>T<%|OgFJmas6YNQ{ohOq266xZ diff --git a/assets/en/commission/COMMISSION_ADVICE.png b/assets/en/commission/COMMISSION_ADVICE.png index b9dc992cfbd8b0d6420f5f760d58d899ed491492..2934cc6c4f1b29e3f723e4a83a46aecad1528caf 100644 GIT binary patch literal 13398 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 literal 10015 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 literal 7025 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 diff --git a/assets/en/ui/MISSION_CHECK.png b/assets/en/ui/MISSION_CHECK.png index a9b1bebece8b293503ebf9b8c8837b739f783973..fe575df7da0d059462545e6c5883d0534602c2e6 100644 GIT binary patch literal 14565 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 literal 6346 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 diff --git a/module/commission/assets.py b/module/commission/assets.py index 703630296..830a4c61a 100644 --- a/module/commission/assets.py +++ b/module/commission/assets.py @@ -4,11 +4,11 @@ from module.base.template import Template # This file was automatically generated by dev_tools/button_extract.py. # Don't modify it manually. -COMMISSION_ADVICE = Button(area={'cn': (871, 322, 999, 383), 'en': (871, 328, 1000, 379), 'jp': (872, 344, 993, 373), 'tw': (869, 325, 999, 388)}, color={'cn': (230, 177, 116), 'en': (231, 178, 117), 'jp': (224, 179, 119), 'tw': (231, 180, 120)}, button={'cn': (871, 322, 999, 383), 'en': (871, 328, 1000, 379), 'jp': (870, 335, 1000, 399), 'tw': (869, 325, 999, 388)}, file={'cn': './assets/cn/commission/COMMISSION_ADVICE.png', 'en': './assets/en/commission/COMMISSION_ADVICE.png', 'jp': './assets/jp/commission/COMMISSION_ADVICE.png', 'tw': './assets/tw/commission/COMMISSION_ADVICE.png'}) +COMMISSION_ADVICE = Button(area={'cn': (871, 322, 999, 383), 'en': (871, 328, 998, 362), 'jp': (872, 344, 993, 373), 'tw': (869, 325, 999, 388)}, color={'cn': (230, 177, 116), 'en': (225, 181, 121), 'jp': (224, 179, 119), 'tw': (231, 180, 120)}, button={'cn': (871, 322, 999, 383), 'en': (871, 328, 998, 362), 'jp': (870, 335, 1000, 399), 'tw': (869, 325, 999, 388)}, file={'cn': './assets/cn/commission/COMMISSION_ADVICE.png', 'en': './assets/en/commission/COMMISSION_ADVICE.png', 'jp': './assets/jp/commission/COMMISSION_ADVICE.png', 'tw': './assets/tw/commission/COMMISSION_ADVICE.png'}) COMMISSION_DAILY = Button(area={'cn': (35, 132, 67, 186), 'en': (30, 126, 75, 188), 'jp': (17, 168, 82, 185), 'tw': (35, 132, 67, 186)}, color={'cn': (208, 172, 118), 'en': (170, 132, 92), 'jp': (148, 115, 76), 'tw': (208, 171, 119)}, button={'cn': (35, 132, 67, 186), 'en': (30, 126, 75, 188), 'jp': (17, 168, 82, 185), 'tw': (35, 132, 67, 186)}, file={'cn': './assets/cn/commission/COMMISSION_DAILY.png', 'en': './assets/en/commission/COMMISSION_DAILY.png', 'jp': './assets/jp/commission/COMMISSION_DAILY.png', 'tw': './assets/tw/commission/COMMISSION_DAILY.png'}) COMMISSION_HAS_PENDING = Button(area={'cn': (320, 288, 380, 338), 'en': (320, 288, 380, 338), 'jp': (320, 288, 380, 338), 'tw': (320, 288, 380, 338)}, color={'cn': (121, 113, 152), 'en': (121, 113, 152), 'jp': (121, 113, 152), 'tw': (121, 113, 152)}, button={'cn': (320, 288, 380, 338), 'en': (320, 288, 380, 338), 'jp': (320, 288, 380, 338), 'tw': (320, 288, 380, 338)}, file={'cn': './assets/cn/commission/COMMISSION_HAS_PENDING.png', 'en': './assets/en/commission/COMMISSION_HAS_PENDING.png', 'jp': './assets/jp/commission/COMMISSION_HAS_PENDING.png', 'tw': './assets/tw/commission/COMMISSION_HAS_PENDING.png'}) COMMISSION_SCROLL_AREA = Button(area={'cn': (1254, 77, 1261, 676), 'en': (1254, 77, 1261, 676), 'jp': (1254, 77, 1261, 676), 'tw': (1254, 77, 1261, 676)}, color={'cn': (213, 183, 66), 'en': (213, 183, 66), 'jp': (213, 183, 66), 'tw': (213, 183, 66)}, button={'cn': (1254, 77, 1261, 676), 'en': (1254, 77, 1261, 676), 'jp': (1254, 77, 1261, 676), 'tw': (1254, 77, 1261, 676)}, file={'cn': './assets/cn/commission/COMMISSION_SCROLL_AREA.png', 'en': './assets/en/commission/COMMISSION_SCROLL_AREA.png', 'jp': './assets/jp/commission/COMMISSION_SCROLL_AREA.png', 'tw': './assets/tw/commission/COMMISSION_SCROLL_AREA.png'}) -COMMISSION_START = Button(area={'cn': (1028, 322, 1156, 383), 'en': (1066, 342, 1117, 358), 'jp': (1033, 340, 1153, 376), 'tw': (1027, 326, 1157, 389)}, color={'cn': (229, 175, 113), 'en': (236, 197, 150), 'jp': (231, 184, 121), 'tw': (231, 180, 120)}, button={'cn': (1028, 322, 1156, 383), 'en': (1066, 342, 1117, 358), 'jp': (1033, 340, 1153, 376), 'tw': (1027, 326, 1157, 389)}, file={'cn': './assets/cn/commission/COMMISSION_START.png', 'en': './assets/en/commission/COMMISSION_START.png', 'jp': './assets/jp/commission/COMMISSION_START.png', 'tw': './assets/tw/commission/COMMISSION_START.png'}) +COMMISSION_START = Button(area={'cn': (1028, 322, 1156, 383), 'en': (1053, 333, 1134, 361), 'jp': (1033, 340, 1153, 376), 'tw': (1027, 326, 1157, 389)}, color={'cn': (229, 175, 113), 'en': (237, 199, 149), 'jp': (231, 184, 121), 'tw': (231, 180, 120)}, button={'cn': (1028, 322, 1156, 383), 'en': (1053, 333, 1134, 361), 'jp': (1033, 340, 1153, 376), 'tw': (1027, 326, 1157, 389)}, file={'cn': './assets/cn/commission/COMMISSION_START.png', 'en': './assets/en/commission/COMMISSION_START.png', 'jp': './assets/jp/commission/COMMISSION_START.png', 'tw': './assets/tw/commission/COMMISSION_START.png'}) COMMISSION_URGENT = Button(area={'cn': (35, 231, 68, 281), 'en': (28, 221, 76, 283), 'jp': (34, 266, 68, 279), 'tw': (35, 229, 69, 280)}, color={'cn': (215, 188, 124), 'en': (169, 138, 95), 'jp': (216, 190, 111), 'tw': (213, 186, 123)}, button={'cn': (35, 231, 68, 281), 'en': (28, 221, 76, 283), 'jp': (34, 266, 68, 279), 'tw': (35, 229, 69, 280)}, file={'cn': './assets/cn/commission/COMMISSION_URGENT.png', 'en': './assets/en/commission/COMMISSION_URGENT.png', 'jp': './assets/jp/commission/COMMISSION_URGENT.png', 'tw': './assets/tw/commission/COMMISSION_URGENT.png'}) EXP_INFO_S_REWARD = Button(area={'cn': (498, 140, 557, 154), 'en': (1138, 40, 1266, 145), 'jp': (498, 140, 557, 154), 'tw': (498, 140, 557, 154)}, color={'cn': (233, 241, 127), 'en': (89, 115, 159), 'jp': (233, 241, 127), 'tw': (233, 241, 127)}, button={'cn': (498, 140, 557, 154), 'en': (1138, 40, 1266, 145), 'jp': (498, 140, 557, 154), 'tw': (498, 140, 557, 154)}, file={'cn': './assets/cn/commission/EXP_INFO_S_REWARD.png', 'en': './assets/en/commission/EXP_INFO_S_REWARD.png', 'jp': './assets/jp/commission/EXP_INFO_S_REWARD.png', 'tw': './assets/tw/commission/EXP_INFO_S_REWARD.png'}) REWARD_1 = Button(area={'cn': (383, 285, 503, 297), 'en': (403, 274, 504, 290), 'jp': (432, 273, 476, 294), 'tw': (383, 285, 503, 297)}, color={'cn': (238, 168, 81), 'en': (241, 198, 145), 'jp': (241, 188, 122), 'tw': (238, 168, 81)}, button={'cn': (383, 285, 503, 297), 'en': (392, 262, 515, 303), 'jp': (393, 262, 514, 303), 'tw': (383, 285, 503, 297)}, file={'cn': './assets/cn/commission/REWARD_1.png', 'en': './assets/en/commission/REWARD_1.png', 'jp': './assets/jp/commission/REWARD_1.png', 'tw': './assets/tw/commission/REWARD_1.png'}) diff --git a/module/commission/project_data.py b/module/commission/project_data.py index f3d987a23..a2fa9da19 100644 --- a/module/commission/project_data.py +++ b/module/commission/project_data.py @@ -18,8 +18,8 @@ dictionary_cn = { # major_comm needs to be after extra_cube, # because `Fleet Cargo Transport` is `extra_cube` and `Cargo Transport I` is major_comm dictionary_en = { - 'daily_resource': ['DAILY RESOURCE EXTRACTION'], - 'daily_chip': ['AWAKENING TACTICAL RESEARCH'], + 'daily_resource': ['AILY RESOURCE EXTRACTION'], + 'daily_chip': ['AKENING TACTICAL RESEARCH'], 'extra_drill': ['SAILING', 'BUOY', 'FRONTIER', 'COASTAL', 'SALING'], 'extra_part': ['VEIN', 'FOREST'], 'extra_cube': ['FLEET ESCORT EXERCISE', 'FLEET EXERCISE', 'FLEET CARGO TRANSPORT', 'FLEET COMBAT EXERCISE'], diff --git a/module/ui/assets.py b/module/ui/assets.py index 29c535989..1a4fcb4e6 100644 --- a/module/ui/assets.py +++ b/module/ui/assets.py @@ -25,7 +25,6 @@ CAMPAIGN_MENU_GOTO_WAR_ARCHIVES = Button(area={'cn': (210, 586, 310, 638), 'en': CAMPAIGN_MENU_NO_EVENT = Button(area={'cn': (681, 204, 831, 233), 'en': (616, 206, 897, 233), 'jp': (575, 209, 940, 235), 'tw': (681, 204, 831, 233)}, color={'cn': (65, 75, 84), 'en': (57, 67, 77), 'jp': (49, 60, 70), 'tw': (65, 75, 84)}, button={'cn': (681, 204, 831, 233), 'en': (616, 206, 897, 233), 'jp': (575, 209, 940, 235), 'tw': (681, 204, 831, 233)}, file={'cn': './assets/cn/ui/CAMPAIGN_MENU_NO_EVENT.png', 'en': './assets/en/ui/CAMPAIGN_MENU_NO_EVENT.png', 'jp': './assets/jp/ui/CAMPAIGN_MENU_NO_EVENT.png', 'tw': './assets/cn/ui/CAMPAIGN_MENU_NO_EVENT.png'}) CHANNEL_CHECK = Button(area={'cn': (785, 661, 824, 699), 'en': (785, 661, 824, 699), 'jp': (785, 661, 824, 699), 'tw': (785, 661, 824, 699)}, color={'cn': (88, 90, 89), 'en': (88, 90, 89), 'jp': (88, 90, 89), 'tw': (88, 90, 89)}, button={'cn': (785, 661, 824, 699), 'en': (785, 661, 824, 699), 'jp': (785, 661, 824, 699), 'tw': (785, 661, 824, 699)}, file={'cn': './assets/cn/ui/CHANNEL_CHECK.png', 'en': './assets/cn/ui/CHANNEL_CHECK.png', 'jp': './assets/cn/ui/CHANNEL_CHECK.png', 'tw': './assets/cn/ui/CHANNEL_CHECK.png'}) COMMISSION_CHECK = Button(area={'cn': (122, 16, 175, 39), 'en': (120, 14, 301, 41), 'jp': (121, 14, 176, 39), 'tw': (121, 14, 176, 41)}, color={'cn': (157, 173, 210), 'en': (98, 112, 150), 'jp': (159, 175, 211), 'tw': (141, 155, 193)}, button={'cn': (122, 16, 175, 39), 'en': (120, 14, 301, 41), 'jp': (121, 14, 176, 39), 'tw': (121, 14, 176, 41)}, file={'cn': './assets/cn/ui/COMMISSION_CHECK.png', 'en': './assets/en/ui/COMMISSION_CHECK.png', 'jp': './assets/jp/ui/COMMISSION_CHECK.png', 'tw': './assets/tw/ui/COMMISSION_CHECK.png'}) -COMMISSION_CHECK_ENTMP = Button(area={'cn': (115, 15, 181, 39), 'en': (115, 15, 181, 39), 'jp': (115, 15, 181, 39), 'tw': (115, 15, 181, 39)}, color={'cn': (108, 120, 162), 'en': (108, 120, 162), 'jp': (108, 120, 162), 'tw': (108, 120, 162)}, button={'cn': (115, 15, 181, 39), 'en': (115, 15, 181, 39), 'jp': (115, 15, 181, 39), 'tw': (115, 15, 181, 39)}, file={'cn': './assets/cn/ui/COMMISSION_CHECK_ENTMP.png', 'en': './assets/cn/ui/COMMISSION_CHECK_ENTMP.png', 'jp': './assets/cn/ui/COMMISSION_CHECK_ENTMP.png', 'tw': './assets/cn/ui/COMMISSION_CHECK_ENTMP.png'}) DAILY_CHECK = Button(area={'cn': (23, 656, 67, 698), 'en': (23, 656, 67, 698), 'jp': (23, 656, 67, 698), 'tw': (23, 656, 67, 698)}, color={'cn': (84, 139, 210), 'en': (84, 139, 210), 'jp': (84, 139, 210), 'tw': (84, 139, 210)}, button={'cn': (23, 656, 67, 698), 'en': (23, 656, 67, 698), 'jp': (23, 656, 67, 698), 'tw': (23, 656, 67, 698)}, file={'cn': './assets/cn/ui/DAILY_CHECK.png', 'en': './assets/en/ui/DAILY_CHECK.png', 'jp': './assets/jp/ui/DAILY_CHECK.png', 'tw': './assets/tw/ui/DAILY_CHECK.png'}) DORMMENU_CHECK = Button(area={'cn': (261, 487, 334, 587), 'en': (261, 487, 334, 587), 'jp': (261, 487, 334, 587), 'tw': (261, 487, 334, 587)}, color={'cn': (181, 172, 178), 'en': (181, 172, 178), 'jp': (181, 172, 178), 'tw': (181, 172, 178)}, button={'cn': (261, 487, 334, 587), 'en': (261, 487, 334, 587), 'jp': (261, 487, 334, 587), 'tw': (261, 487, 334, 587)}, file={'cn': './assets/cn/ui/DORMMENU_CHECK.png', 'en': './assets/en/ui/DORMMENU_CHECK.png', 'jp': './assets/jp/ui/DORMMENU_CHECK.png', 'tw': './assets/tw/ui/DORMMENU_CHECK.png'}) DORMMENU_GOTO_ACADEMY = Button(area={'cn': (261, 487, 334, 587), 'en': (261, 487, 334, 587), 'jp': (261, 487, 334, 587), 'tw': (261, 487, 334, 587)}, color={'cn': (181, 172, 178), 'en': (181, 172, 178), 'jp': (181, 172, 178), 'tw': (181, 172, 178)}, button={'cn': (261, 487, 334, 587), 'en': (261, 487, 334, 587), 'jp': (261, 487, 334, 587), 'tw': (261, 487, 334, 587)}, file={'cn': './assets/cn/ui/DORMMENU_GOTO_ACADEMY.png', 'en': './assets/en/ui/DORMMENU_GOTO_ACADEMY.png', 'jp': './assets/jp/ui/DORMMENU_GOTO_ACADEMY.png', 'tw': './assets/tw/ui/DORMMENU_GOTO_ACADEMY.png'}) @@ -66,8 +65,7 @@ MEOWFFICER_CHECK = Button(area={'cn': (142, 16, 212, 38), 'en': (142, 18, 213, 3 MEOWFFICER_GOTO_DORMMENU = Button(area={'cn': (24, 7, 49, 45), 'en': (24, 7, 49, 45), 'jp': (15, 4, 61, 49), 'tw': (24, 7, 49, 45)}, color={'cn': (248, 222, 158), 'en': (248, 222, 158), 'jp': (241, 233, 201), 'tw': (248, 222, 158)}, button={'cn': (24, 7, 49, 45), 'en': (24, 7, 49, 45), 'jp': (15, 4, 61, 49), 'tw': (24, 7, 49, 45)}, file={'cn': './assets/cn/ui/MEOWFFICER_GOTO_DORMMENU.png', 'en': './assets/en/ui/MEOWFFICER_GOTO_DORMMENU.png', 'jp': './assets/jp/ui/MEOWFFICER_GOTO_DORMMENU.png', 'tw': './assets/tw/ui/MEOWFFICER_GOTO_DORMMENU.png'}) MEOWFFICER_INFO = Button(area={'cn': (1090, 603, 1241, 650), 'en': (1106, 616, 1227, 638), 'jp': (1089, 608, 1240, 647), 'tw': (1124, 610, 1207, 647)}, color={'cn': (243, 214, 92), 'en': (212, 182, 77), 'jp': (247, 218, 92), 'tw': (229, 200, 87)}, button={'cn': (1090, 603, 1241, 650), 'en': (1106, 616, 1227, 638), 'jp': (1089, 608, 1240, 647), 'tw': (1124, 610, 1207, 647)}, file={'cn': './assets/cn/ui/MEOWFFICER_INFO.png', 'en': './assets/en/ui/MEOWFFICER_INFO.png', 'jp': './assets/jp/ui/MEOWFFICER_INFO.png', 'tw': './assets/tw/ui/MEOWFFICER_INFO.png'}) META_CHECK = Button(area={'cn': (120, 14, 209, 35), 'en': (148, 13, 265, 36), 'jp': (125, 11, 235, 39), 'tw': (120, 14, 209, 35)}, color={'cn': (159, 143, 144), 'en': (170, 156, 156), 'jp': (124, 105, 106), 'tw': (159, 143, 144)}, button={'cn': (120, 14, 209, 35), 'en': (148, 13, 265, 36), 'jp': (125, 11, 235, 39), 'tw': (120, 14, 209, 35)}, file={'cn': './assets/cn/ui/META_CHECK.png', 'en': './assets/en/ui/META_CHECK.png', 'jp': './assets/jp/ui/META_CHECK.png', 'tw': './assets/tw/ui/META_CHECK.png'}) -MISSION_CHECK = Button(area={'cn': (120, 15, 173, 40), 'en': (123, 18, 221, 37), 'jp': (120, 14, 173, 40), 'tw': (119, 12, 176, 42)}, color={'cn': (141, 156, 194), 'en': (104, 117, 158), 'jp': (150, 165, 202), 'tw': (125, 139, 178)}, button={'cn': (120, 15, 173, 40), 'en': (123, 18, 221, 37), 'jp': (120, 14, 173, 40), 'tw': (119, 12, 176, 42)}, file={'cn': './assets/cn/ui/MISSION_CHECK.png', 'en': './assets/en/ui/MISSION_CHECK.png', 'jp': './assets/jp/ui/MISSION_CHECK.png', 'tw': './assets/tw/ui/MISSION_CHECK.png'}) -MISSION_CHECK_ENTMP = Button(area={'cn': (113, 20, 172, 33), 'en': (113, 20, 172, 33), 'jp': (113, 20, 172, 33), 'tw': (113, 20, 172, 33)}, color={'cn': (111, 124, 166), 'en': (111, 124, 166), 'jp': (111, 124, 166), 'tw': (111, 124, 166)}, button={'cn': (113, 20, 172, 33), 'en': (113, 20, 172, 33), 'jp': (113, 20, 172, 33), 'tw': (113, 20, 172, 33)}, file={'cn': './assets/cn/ui/MISSION_CHECK_ENTMP.png', 'en': './assets/cn/ui/MISSION_CHECK_ENTMP.png', 'jp': './assets/cn/ui/MISSION_CHECK_ENTMP.png', 'tw': './assets/cn/ui/MISSION_CHECK_ENTMP.png'}) +MISSION_CHECK = Button(area={'cn': (120, 15, 173, 40), 'en': (120, 15, 260, 41), 'jp': (120, 14, 173, 40), 'tw': (119, 12, 176, 42)}, color={'cn': (141, 156, 194), 'en': (111, 124, 165), 'jp': (150, 165, 202), 'tw': (125, 139, 178)}, button={'cn': (120, 15, 173, 40), 'en': (120, 15, 260, 41), 'jp': (120, 14, 173, 40), 'tw': (119, 12, 176, 42)}, file={'cn': './assets/cn/ui/MISSION_CHECK.png', 'en': './assets/en/ui/MISSION_CHECK.png', 'jp': './assets/jp/ui/MISSION_CHECK.png', 'tw': './assets/tw/ui/MISSION_CHECK.png'}) MUNITIONS_CHECK = Button(area={'cn': (60, 361, 104, 395), 'en': (60, 361, 104, 395), 'jp': (59, 371, 126, 397), 'tw': (11, 374, 131, 402)}, color={'cn': (115, 191, 235), 'en': (111, 189, 234), 'jp': (134, 194, 227), 'tw': (101, 200, 255)}, button={'cn': (60, 361, 104, 395), 'en': (60, 361, 104, 395), 'jp': (59, 371, 126, 397), 'tw': (11, 374, 131, 402)}, file={'cn': './assets/cn/ui/MUNITIONS_CHECK.png', 'en': './assets/en/ui/MUNITIONS_CHECK.png', 'jp': './assets/jp/ui/MUNITIONS_CHECK.png', 'tw': './assets/tw/ui/MUNITIONS_CHECK.png'}) OS_CHECK = Button(area={'cn': (613, 17, 627, 34), 'en': (613, 17, 627, 34), 'jp': (613, 17, 627, 34), 'tw': (613, 17, 627, 34)}, color={'cn': (58, 117, 146), 'en': (58, 117, 146), 'jp': (58, 117, 146), 'tw': (58, 117, 146)}, button={'cn': (613, 17, 627, 34), 'en': (613, 17, 627, 34), 'jp': (613, 17, 627, 34), 'tw': (613, 17, 627, 34)}, file={'cn': './assets/cn/ui/OS_CHECK.png', 'en': './assets/en/ui/OS_CHECK.png', 'jp': './assets/jp/ui/OS_CHECK.png', 'tw': './assets/tw/ui/OS_CHECK.png'}) PLAYER_CHECK = Button(area={'cn': (28, 668, 139, 688), 'en': (11, 649, 157, 705), 'jp': (26, 668, 139, 689), 'tw': (28, 668, 139, 688)}, color={'cn': (237, 204, 127), 'en': (197, 156, 97), 'jp': (237, 205, 128), 'tw': (237, 204, 127)}, button={'cn': (28, 668, 139, 688), 'en': (11, 649, 157, 705), 'jp': (26, 668, 139, 689), 'tw': (28, 668, 139, 688)}, file={'cn': './assets/cn/ui/PLAYER_CHECK.png', 'en': './assets/en/ui/PLAYER_CHECK.png', 'jp': './assets/jp/ui/PLAYER_CHECK.png', 'tw': './assets/tw/ui/PLAYER_CHECK.png'}) diff --git a/module/ui/ui.py b/module/ui/ui.py index 24cfb8204..8393e8b3f 100644 --- a/module/ui/ui.py +++ b/module/ui/ui.py @@ -19,8 +19,7 @@ from module.ocr.ocr import Ocr from module.os_handler.assets import (AUTO_SEARCH_REWARD, EXCHANGE_CHECK, RESET_FLEET_PREPARATION, RESET_TICKET_POPUP) from module.raid.assets import * from module.ui.assets import * -from module.ui.page import Page, page_campaign, page_event, page_main, page_main_white, page_sp, page_commission, \ - page_mission +from module.ui.page import Page, page_campaign, page_event, page_main, page_main_white, page_sp from module.ui_white.assets import * @@ -40,13 +39,6 @@ class UI(InfoHandler): if self.appear(page_main.check_button, offset=(5, 5), interval=interval): return True return False - # 2025.10.16 Temp fix for bugged UI - if page == page_commission: - if self.appear(COMMISSION_CHECK_ENTMP, offset=offset, interval=interval): - return True - if page == page_mission: - if self.appear(MISSION_CHECK_ENTMP, offset=offset, interval=interval): - return True return self.appear(page.check_button, offset=offset, interval=interval) def is_in_main(self, offset=(30, 30), interval=0): From cac507229fabfeacbfa137a329989187c87e73e1 Mon Sep 17 00:00:00 2001 From: whjhs1010203 <26708256+whjhs1010203@users.noreply.github.com> Date: Sun, 19 Oct 2025 17:05:55 +0800 Subject: [PATCH 06/27] Upd: [TW] shop assets --- assets/tw/shop/NAV_GENERAL.png | Bin 0 -> 5385 bytes assets/tw/shop/NAV_MONTHLY.png | Bin 0 -> 6240 bytes assets/tw/shop/TAB_CORE_LIMITED.png | Bin 0 -> 4927 bytes assets/tw/shop/TAB_CORE_MONTHLY.png | Bin 0 -> 4689 bytes assets/tw/shop/TAB_GENERAL.png | Bin 0 -> 4129 bytes assets/tw/shop/TAB_GUILD.png | Bin 0 -> 5053 bytes assets/tw/shop/TAB_MEDAL.png | Bin 0 -> 5125 bytes assets/tw/shop/TAB_MERIT.png | Bin 0 -> 4973 bytes assets/tw/shop/TAB_PRIZE.png | Bin 0 -> 5120 bytes assets/tw/shop/TAB_PROTOTYPE.png | Bin 0 -> 4733 bytes assets/tw/ui/MUNITIONS_CHECK.png | Bin 7906 -> 4820 bytes module/shop/assets.py | 20 ++++++++++---------- module/shop/shop_reward.py | 8 -------- module/ui/assets.py | 2 +- 14 files changed, 11 insertions(+), 19 deletions(-) create mode 100644 assets/tw/shop/NAV_GENERAL.png create mode 100644 assets/tw/shop/NAV_MONTHLY.png create mode 100644 assets/tw/shop/TAB_CORE_LIMITED.png create mode 100644 assets/tw/shop/TAB_CORE_MONTHLY.png create mode 100644 assets/tw/shop/TAB_GENERAL.png create mode 100644 assets/tw/shop/TAB_GUILD.png create mode 100644 assets/tw/shop/TAB_MEDAL.png create mode 100644 assets/tw/shop/TAB_MERIT.png create mode 100644 assets/tw/shop/TAB_PRIZE.png create mode 100644 assets/tw/shop/TAB_PROTOTYPE.png diff --git a/assets/tw/shop/NAV_GENERAL.png b/assets/tw/shop/NAV_GENERAL.png new file mode 100644 index 0000000000000000000000000000000000000000..32bed868377b859c022fc5c71e5029893c60c1b4 GIT binary patch literal 5385 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 bmWKd2C#P0I1G~U~Pw6Vu6;k`%y&wJqQhdj% literal 0 HcmV?d00001 diff --git a/assets/tw/shop/NAV_MONTHLY.png b/assets/tw/shop/NAV_MONTHLY.png new file mode 100644 index 0000000000000000000000000000000000000000..5936464a9fd919939c8ed40076a1a73f597a9bac GIT binary patch literal 6240 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
^0 literal 0 HcmV?d00001 diff --git a/assets/tw/shop/TAB_CORE_LIMITED.png b/assets/tw/shop/TAB_CORE_LIMITED.png new file mode 100644 index 0000000000000000000000000000000000000000..1b344fd9cbea06e1cfaabd88d4eb5e1cf571d61a GIT binary patch literal 4927 zcmeH}`&Uy}7RRqcTTpq#N+p92jIOpskcVQT5J(4%U}%X13KLMGgol$Npdb(lphIZn zQIPUbWCE2MQzk}QXovy{%*dmFylf@qaTARK1`-koA%p}nSNbQ+TK$Q=)?MeWyYAil zoX_3g?>YHrg8Z$v*>3{?!0L3sNg@Ee58eJ{*y1nH@RRG*;22ox ztKi#x7_U-$q3 zcIQVS0Cop1STWDn>2#FJg1VdT%TO$ZF6(rDzYy`HN_Kf)@@~q*FfPuLR9TVRFa7i~ zx|_{r=jG+aHPMz8V^`?GwxpX#_8C!Mkr}WbFdOO`9314d8yfm=yV}+7^!=qVAucYC zZp_o`^{RGq=H1M~ItxTmaj{50T^&DEb9nA4;q_%GNo5`kDr;wFhen}3`Q($Ynauup zziqKV5Rzot0$c|yG3K~{Rzs#h<)Tsu$XVJ7rj5hkzyJ@NfdADyL$iEE7-g!K%Q=Nr zNnp!W!(iXi>hu_lh_9}$-oAZ%x=Lb&!1O-FiG;#6aB*B2*y@bbutBY^|N;DKl|;cC`YYXmQC_P6>To^nvKK2VJ|H#gUWcEUp} z1(k^y37AjYmHl^HkjfA8Aczd}ty7uNv)ypNJ|Z5m%e@OE1}hw|z`TOS5*2_A6 z1TV)_BF)zKa1jiM7EC2=Z*P|(3qGBzb*kta9zIi`@9aGJ{m2jExe8}!o|tiJ9&BCi zAfcN8tp#sQ{ zcfbK)3p~SR>*KP#1F2rL07%lcS<9qWaNQ6dC0ET25q}|;GCj11X{jL$%mpcz(TOtGDY$G(3Eim6=YPWtWj0qp7tC`%FxMi53%c-&r4~IgUb&TCwi* z*f#Ee?+-isT_TAp`stw#LZXvoHV6c|m4(-Vfq}1>nj7zW@Ype}R?GHdTAzEId?6vh z`RkxDi z`F*?p-Lg;n=Fo`@xF%6hO{5AYI6*AWtkq?(Rq6t^jllQL*N66}WUD5h9K~XDpq?fh zWmDYnhV}jillDb88JxHzrtC~N}c$+V;|8-zGUm}r|VAq#qIb{1i@ER6NxQHd66CO#Q zUaCroAF{Hs6fO5X=^lPLIXNkl$#TtYve&9@4nY}vDMhr|`{lFR)x7O?E@vNqXJH9+ z3>EA;t}aurt?^haR-v6Mv{I3eA%acZ3bm!Er6qZ8l=nSkfS8OQM~=IBc!ct%m1&t- zYwPLKEHo-DIXYU_{mpJCCnr}?29-|7Fklo#>M~^OC=?3%NPRKA0ZddWl)G@jTfuT7 zfiU#jZ=tjz^-sB0Wi}hK_HxoiAlW=#dkkq*EWSNMvq1DWf*=SLePN&qg+li?NcOu; z*qNK!3c`GAW()=c5od7dHt+}w(!x$Pv zLLE6mwC#eh_4VO7zamRahYO;=`idLXz&TK{aEu+AIAw*f#Rb=g{`&=W%zCx=l+3m! z4unM$2n4+RAHWBH;<;qA)Fy#V0-FRj32YMBB(O=~|0R&UZQT>l+-+MNyG!D}OLiI; Lbn=n!`G5Woh-srW literal 0 HcmV?d00001 diff --git a/assets/tw/shop/TAB_CORE_MONTHLY.png b/assets/tw/shop/TAB_CORE_MONTHLY.png new file mode 100644 index 0000000000000000000000000000000000000000..36eae196c11b88dbb0236ff6dcf209c3c3abf5f9 GIT binary patch literal 4689 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 l5ZEEGL*V}M=Xw6${{^S*>Tm!6 literal 0 HcmV?d00001 diff --git a/assets/tw/shop/TAB_MEDAL.png b/assets/tw/shop/TAB_MEDAL.png new file mode 100644 index 0000000000000000000000000000000000000000..dc14d7bd9e20fe00fddf000ea87d09f646c03ff9 GIT binary patch literal 5125 zcmeH}{a4a=8^^!8tyVgTGfQWto8C*Arj~0yCOx2)Y2KjNnwl;x%M4TmR1jR=cRrOI zmuAkV-4dEO^e!VG5GhU9Qeox;sUR~8LPSahL1^+yG^rNjdTLA$0==d=N3IIL;r>4JtXbKJo?SoCgVN1%f(>MUIc>L}&DRZ&d z2_`>{KZXhgfUM5}ASV|9bnD#IM(}0Yp?VYz&V;@O>DTflqxJtOF5`6Zjq14k1R72t@EX ze&$+ipqoS8Nhp-Ya?RKQ(C%+J0s#KLh3hlXU=l|4Hb|Y*imQ%7OX>#k&EcOw&&41R zrFcYh{Jmy{!>dvhUuRfnZZ`vrwOxS#V0RHR$5nkkqou(!4x!Odq)@$bC3V%%>teFv z_@k-$yR9RHkn@MMdV^l8l5k1HOP4NT+q4B?^5UTknWo4(%bhHT#QZJrQ1*$MY<{&!;yB?m>6&rSveRuP=923B< zW~vR#TYh$8YHCWa*K;@=GG|n7y8VtGfEYlFq%#7td@~6ciLx;rJcSMOC;$ zOQ@2dpPy(Y^7Ud-iDb20uUI?gpoZ`g&9~#Fa0anohp?v8Sgebg!*N3r0lycKu07uZzox+0!GH zZ5Vs+luy%2aK(qWSpP=*Zo7p^4vnMLnsiH)U8{3VEnH(0fx~Uhma*EVebw?2F!mNU zHZ~HPbka(!abW?|HkG~jJPVC3G8+*1FAbIp$QR?|XR$mz5yse8-aC_m!?g+(yL{4a z4_^Q+k=b=?e3k|e0561j&v=6#Mwaq08Kqa)K8OT{;|+CyDjTm;$5 z2_{pMms^Tz9?2sfV^U*h_Y9#TUI>h^v=KR=RmuwthdW~~># z9^N(;ilkg@xheP2IKR4szou4HbF_qMoj|gz z)if_-BJrmq(dL_a4O~$11y2HFLLc8LVHVgzkuvM~g%~nv_68`t3U~5ehqUGZ%Usno zmtL$+A}g54P$Kftddlk#-P#k;X4Xn+1ewJ30P<)#Weeg|>1QK(SP&zmcfJgn2R=*Bzk`1p8|LK=sqQYhWxnyzL3*uUiyy_+o} zOIGPj8)Ycl$sr7ZK;8zm-c3pIc+N|iVddXp&he}Lw4CbRJV+RO5<09>u@gbFp0R(` zi7ds(SOp@5c$DeyjEtC?>VG_!uHFYO;V zJH+Sj2t=aCNOG^h*PH)1uuk`C!YOPQNtf6{UBK0nmU^PX4yZ?W^44^xx);G>ZM^t{ zbIavuxmLpuQ1?CQWimU(3kmf7aLzU)Z;8)P84d6t1fm+}Mt2=Zqk2CVi9{3K+Gh~T zb4;5A^01K)V>s247o#MrkxCf7JFh6VX|n;zUAd*`ACC+EFS<1o#230G&h&j z>QjQ7R;72py^gi@CciFls%a<5q#&#W$Cj2Bs&OzJ#)t;rr%5G&?^9Tcvy*r*(&wMw zHO$0;`W0h@`07H5c6Ik<9zZ3#TY?Wgc~Csr=@npYk;grQrBEogv5s}uY@vp;_okE& zcB(-EB{pz)yjoNe`y0>JB_G*7Ay`MhensF^$6G^7oC@onD^x_^Y9=!>GO~X!$u7|oj@dlMbe?pbs*t^=ikv*ZJe<| tV1vL0feiv11U3k45cvNPfC#A{0lD8gzvg-puD;vyc;HDy^WnHF{{vaMM(6+l literal 0 HcmV?d00001 diff --git a/assets/tw/shop/TAB_MERIT.png b/assets/tw/shop/TAB_MERIT.png new file mode 100644 index 0000000000000000000000000000000000000000..7f614bef3cbc4264ac1192139d0e558f5941d76c GIT binary patch literal 4973 zcmeH}{Z|uL9>xdT>b5F0(kcpto>;_@V^E9>0fluJ1cnmUXj%{hYAxZV8chrl2!WPG zhzRHkWd#DQm_#GNRRrWM(eftPgaQIeNP@f=Lr7wX1jy@-_$TZ+{fX~6Gv7J$!@YB# z`8?0P%zt7-)_=0)6953#hlK{=0N^9|an&DxSp~Phxj}Yt`}k~VGz9?cJKkM(C7$-q z@XIg13&lkMK$<%MWMu=uk`3-k0HE#yfSKa};P)Q@*hKnwT<1Xm*q{#!I&kE|=&V#q zs=zZI>ExKc*5}wCy6bZEu z{bc#0fh(W72)kU<~IrSW4I0OLRbSG?Hl~t8kjPsmst_|lwApaQd(g3zP?b#0g_N(LoU*AwQ zCn)j8rQ$O54)*1(n6huc?`hB7>~n8-)O}U>tQd!bKsG0lEJj?VRL)|L;P*13pxsuO zWvB5s=!m*|_s&fY%Ey{0T*w_cvmIpf#C^DiBt?G$x^fK`U*Sic8FeOAVkp~!YxsPN zD%X}`GN^GrlYkiG^F10R<0N(ogF0T+5pA!GUXfJ+J2UKn4|hE}ai{DSrLIM2S|SM- z4KJ&|^|A#A-7JPc)0*m#BG>gM%k=cL66=G6l8_Ttt#HZOBi$4iAbdbam3m_+ZznqQ z*REYV3Cg#1TCLW*f!3QNDuR%aK_<^dYs4avNG!H`dET%CK79n(;%1r)E6O;DWv|{U z2T5)7!(uU3+*GS#S*#k3=GEiJo%x%J+%Q`Z5zj&jU6j}_n$Asj`O>OtYGut-m8>lt z(T^7SW|=HjqcKe=7p5xg znyyjKG)lOURk5+LjJc^Ev)Rn@r>)LD04bLgRdG>KQ3S$H_GMyG!9E}hSna!yT9`7$ zlM)yVWq);u4F;s3pdjxFX2EE3PFDH1w52a-BECM~)xCAP!mE{R?JenUzM$nlL&zn3MD2crn^vd-jBbb9$5YE_vNZzqz0>0 zs;Ue_bfbh29nH*p#v4@|e9v(?+aNG<#78S_8R;D=@%*-H1cgEg^kV-aw?ILL$uKjM zG>B$liK(fn<`F)h-$K*c=eAc+8YTN_nz0tGz%)kb+YE=a-MX`{%g$dZ%e#e~X?7hJ z>GQ)&Q3MD)O(F%PnhC7Aa8J+t?s()xImwMNFVdRY4}@KX91+*9U4wOlSCW9o=jZ3Y zGf{cDv%LwP^Tdgl1MF}rp%m9F)l5uGG*J|=*S37%0DPHcXOD+KM%3kFFz+T)Ri<@G zJRBc%`Cz+gL91OCq7~Y#UpIb%i1BZcXWA^`3WjcW4n_#3F*zf{GCqEsuBy?|=eoK^ z6VS%-Y=?>N&969#8kki5D^dO?ugc8tJ2xaOFY6XrJQ;)bLAX!%FqPLlB4eA33Xt8# z;26s6%_qv-=rJ7vlAfW_|4~ysFvyK`3yf8#v~aQY zcX(UYyjdhbVF(O_1^qw%cp3VJV%()raEK~Z%?}R`BTr`1h`XHDt0mlV|e%* zq1>j-(d+f3R$Uid27_VoI<7Z+jf22yR5^NJVK2PomPpPt5{bmppMNHc3%q%6V!BV~uXnxbqOz~i&T?!i-8d4S(?90;hRgAqZ_WmsK!wXyvN0z3adFs{n2fF&$ zG;a38_rSTcKXbp>euA`XHl^jR&}uxs>(C0{OQv>>nDE8SxX7w;vi~qp6_4x z*EKbzPCdDLrqLM@F-TvK(x?QXWrWmtlph&r5y@mSxlJk;|Ni?J3}n8S-~w#oz6y+9 zmh~$MH zK74qjme7)-K8ja3{fryXO|HG$W*F`0=$Q0KmbCcajTJn2`0%;ph1uG&rW93E5tzxi zACr+`drI`G{qcQf>|o!l*tBsYDo!w_n!mA`w5AZ(JN`>1%#VmKn|@lVC_ImYA}-;e z&uu~E*@M}h2~h@h!M zJJ|cAFGiy?=i<~_+YH|)veGve0zo7)1Olfk%8g$J<434T5bElk?S~WtQv)||bp_(j zkVtB?QBI=I^>{d|V$><7Xb)%lGRPMo@G6px-o1M{i|>3>m=`MQ?d_d4Q|jvKCe?zz zRf{hIWS^zNJHT{lT;3!Qd-m+vyZ3Vhv9FS^GIlT>9bET4!3Yhb$)28A zIAIorQ*oYIRjL+`a(;0*7*PU&)wkdcWW-1eOB1~Cej%$k7qBcH!Nl%$@WeQUB@zkWUTZev^9ez=wcwlczo+UcT)k6Gs3 zzXKnbk6{$qFCQBWDWvCtsdJ}D!a%2WyhHn)*2TximvOGMSnBySJ*8XK>>B4?D|a)z ztg9m7*buguk64;xtw-AS*dyAX@#AD3LR4WRsD6pcy qiUKPNtSGRe!2hYhc;xd;2jGPFMq$<3Usdl03k${u)&BkXPyYj|CE#uV literal 0 HcmV?d00001 diff --git a/assets/tw/shop/TAB_PRIZE.png b/assets/tw/shop/TAB_PRIZE.png new file mode 100644 index 0000000000000000000000000000000000000000..ec1fa8b6fba0c55d7e689121c0e78064462a0092 GIT binary patch literal 5120 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 literal 0 HcmV?d00001 diff --git a/assets/tw/shop/TAB_PROTOTYPE.png b/assets/tw/shop/TAB_PROTOTYPE.png new file mode 100644 index 0000000000000000000000000000000000000000..3f25df7dda2973f364154d65b42e05ede43c2900 GIT binary patch literal 4733 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 diff --git a/module/shop/assets.py b/module/shop/assets.py index fb6b8bf00..2081fdcce 100644 --- a/module/shop/assets.py +++ b/module/shop/assets.py @@ -8,8 +8,8 @@ AMOUNT_MAX = Button(area={'cn': (772, 316, 822, 332), 'en': (772, 316, 822, 332) AMOUNT_MINUS = Button(area={'cn': (546, 304, 586, 344), 'en': (546, 304, 586, 344), 'jp': (546, 304, 586, 344), 'tw': (546, 304, 586, 344)}, color={'cn': (76, 127, 195), 'en': (76, 127, 195), 'jp': (76, 127, 195), 'tw': (76, 127, 195)}, button={'cn': (546, 304, 586, 344), 'en': (546, 304, 586, 344), 'jp': (546, 304, 586, 344), 'tw': (546, 304, 586, 344)}, file={'cn': './assets/cn/shop/AMOUNT_MINUS.png', 'en': './assets/en/shop/AMOUNT_MINUS.png', 'jp': './assets/jp/shop/AMOUNT_MINUS.png', 'tw': './assets/tw/shop/AMOUNT_MINUS.png'}) AMOUNT_PLUS = Button(area={'cn': (693, 304, 735, 344), 'en': (693, 304, 735, 344), 'jp': (693, 304, 735, 344), 'tw': (693, 304, 735, 344)}, color={'cn': (81, 130, 196), 'en': (81, 130, 196), 'jp': (81, 130, 196), 'tw': (81, 130, 196)}, button={'cn': (693, 304, 735, 344), 'en': (693, 304, 735, 344), 'jp': (693, 304, 735, 344), 'tw': (693, 304, 735, 344)}, file={'cn': './assets/cn/shop/AMOUNT_PLUS.png', 'en': './assets/en/shop/AMOUNT_PLUS.png', 'jp': './assets/jp/shop/AMOUNT_PLUS.png', 'tw': './assets/tw/shop/AMOUNT_PLUS.png'}) MEDAL_SHOP_SCROLL_AREA_250814 = Button(area={'cn': (1063, 201, 1064, 623), 'en': (1063, 201, 1064, 623), 'jp': (1063, 201, 1064, 623), 'tw': (1063, 201, 1064, 623)}, color={'cn': (128, 143, 153), 'en': (128, 143, 153), 'jp': (128, 143, 153), 'tw': (128, 143, 153)}, button={'cn': (1063, 201, 1064, 623), 'en': (1063, 201, 1064, 623), 'jp': (1063, 201, 1064, 623), 'tw': (1063, 201, 1064, 623)}, file={'cn': './assets/cn/shop/MEDAL_SHOP_SCROLL_AREA_250814.png', 'en': './assets/en/shop/MEDAL_SHOP_SCROLL_AREA_250814.png', 'jp': './assets/cn/shop/MEDAL_SHOP_SCROLL_AREA_250814.png', 'tw': './assets/cn/shop/MEDAL_SHOP_SCROLL_AREA_250814.png'}) -NAV_GENERAL = Button(area={'cn': (52, 436, 127, 457), 'en': (47, 438, 127, 458), 'jp': (50, 438, 94, 458), 'tw': (52, 436, 127, 457)}, color={'cn': (126, 178, 207), 'en': (137, 185, 211), 'jp': (149, 194, 218), 'tw': (126, 178, 207)}, button={'cn': (52, 436, 127, 457), 'en': (47, 438, 127, 458), 'jp': (50, 438, 94, 458), 'tw': (52, 436, 127, 457)}, file={'cn': './assets/cn/shop/NAV_GENERAL.png', 'en': './assets/en/shop/NAV_GENERAL.png', 'jp': './assets/jp/shop/NAV_GENERAL.png', 'tw': './assets/cn/shop/NAV_GENERAL.png'}) -NAV_MONTHLY = Button(area={'cn': (52, 486, 127, 508), 'en': (51, 487, 131, 507), 'jp': (53, 488, 125, 508), 'tw': (52, 486, 127, 508)}, color={'cn': (127, 178, 207), 'en': (129, 179, 207), 'jp': (161, 201, 219), 'tw': (127, 178, 207)}, button={'cn': (52, 486, 127, 508), 'en': (51, 487, 131, 507), 'jp': (53, 488, 125, 508), 'tw': (52, 486, 127, 508)}, file={'cn': './assets/cn/shop/NAV_MONTHLY.png', 'en': './assets/en/shop/NAV_MONTHLY.png', 'jp': './assets/jp/shop/NAV_MONTHLY.png', 'tw': './assets/cn/shop/NAV_MONTHLY.png'}) +NAV_GENERAL = Button(area={'cn': (52, 436, 127, 457), 'en': (47, 438, 127, 458), 'jp': (50, 438, 94, 458), 'tw': (53, 436, 126, 459)}, color={'cn': (126, 178, 207), 'en': (137, 185, 211), 'jp': (149, 194, 218), 'tw': (146, 191, 214)}, button={'cn': (52, 436, 127, 457), 'en': (47, 438, 127, 458), 'jp': (50, 438, 94, 458), 'tw': (53, 436, 126, 459)}, file={'cn': './assets/cn/shop/NAV_GENERAL.png', 'en': './assets/en/shop/NAV_GENERAL.png', 'jp': './assets/jp/shop/NAV_GENERAL.png', 'tw': './assets/tw/shop/NAV_GENERAL.png'}) +NAV_MONTHLY = Button(area={'cn': (52, 486, 127, 508), 'en': (51, 487, 131, 507), 'jp': (53, 488, 125, 508), 'tw': (53, 487, 125, 507)}, color={'cn': (127, 178, 207), 'en': (129, 179, 207), 'jp': (161, 201, 219), 'tw': (143, 187, 210)}, button={'cn': (52, 486, 127, 508), 'en': (51, 487, 131, 507), 'jp': (53, 488, 125, 508), 'tw': (53, 487, 125, 507)}, file={'cn': './assets/cn/shop/NAV_MONTHLY.png', 'en': './assets/en/shop/NAV_MONTHLY.png', 'jp': './assets/jp/shop/NAV_MONTHLY.png', 'tw': './assets/tw/shop/NAV_MONTHLY.png'}) SELECT_MINUS = Button(area={'cn': (562, 201, 588, 227), 'en': (562, 201, 588, 227), 'jp': (562, 201, 588, 227), 'tw': (562, 201, 588, 227)}, color={'cn': (86, 70, 70), 'en': (86, 70, 70), 'jp': (86, 70, 70), 'tw': (86, 70, 70)}, button={'cn': (562, 201, 588, 227), 'en': (562, 201, 588, 227), 'jp': (562, 201, 588, 227), 'tw': (562, 201, 588, 227)}, file={'cn': './assets/cn/shop/SELECT_MINUS.png', 'en': './assets/en/shop/SELECT_MINUS.png', 'jp': './assets/jp/shop/SELECT_MINUS.png', 'tw': './assets/tw/shop/SELECT_MINUS.png'}) SELECT_PLUS = Button(area={'cn': (674, 201, 700, 227), 'en': (674, 201, 700, 227), 'jp': (674, 201, 700, 227), 'tw': (674, 201, 700, 227)}, color={'cn': (97, 70, 70), 'en': (97, 70, 70), 'jp': (97, 70, 70), 'tw': (97, 70, 70)}, button={'cn': (674, 201, 700, 227), 'en': (674, 201, 700, 227), 'jp': (674, 201, 700, 227), 'tw': (674, 201, 700, 227)}, file={'cn': './assets/cn/shop/SELECT_PLUS.png', 'en': './assets/en/shop/SELECT_PLUS.png', 'jp': './assets/jp/shop/SELECT_PLUS.png', 'tw': './assets/tw/shop/SELECT_PLUS.png'}) SHOP_AMOUNT = Button(area={'cn': (600, 310, 680, 340), 'en': (600, 310, 680, 340), 'jp': (600, 310, 680, 340), 'tw': (600, 310, 680, 340)}, color={'cn': (48, 52, 62), 'en': (48, 52, 62), 'jp': (48, 52, 62), 'tw': (48, 52, 62)}, button={'cn': (600, 310, 680, 340), 'en': (600, 310, 680, 340), 'jp': (600, 310, 680, 340), 'tw': (600, 310, 680, 340)}, file={'cn': './assets/cn/shop/SHOP_AMOUNT.png', 'en': './assets/en/shop/SHOP_AMOUNT.png', 'jp': './assets/jp/shop/SHOP_AMOUNT.png', 'tw': './assets/tw/shop/SHOP_AMOUNT.png'}) @@ -29,13 +29,13 @@ SHOP_SELECT_PR2 = Button(area={'cn': (182, 212, 310, 340), 'en': (182, 212, 310, SHOP_SELECT_PR3 = Button(area={'cn': (180, 212, 309, 340), 'en': (180, 212, 309, 340), 'jp': (180, 212, 309, 340), 'tw': (180, 212, 309, 340)}, color={'cn': (156, 156, 142), 'en': (156, 156, 142), 'jp': (156, 156, 142), 'tw': (156, 156, 142)}, button={'cn': (180, 212, 309, 340), 'en': (180, 212, 309, 340), 'jp': (180, 212, 309, 340), 'tw': (180, 212, 309, 340)}, file={'cn': './assets/cn/shop/SHOP_SELECT_PR3.png', 'en': './assets/en/shop/SHOP_SELECT_PR3.png', 'jp': './assets/jp/shop/SHOP_SELECT_PR3.png', 'tw': './assets/tw/shop/SHOP_SELECT_PR3.png'}) SHOP_SELECT_STOCK = Button(area={'cn': (1070, 152, 1126, 178), 'en': (1070, 152, 1126, 178), 'jp': (1070, 152, 1126, 178), 'tw': (1070, 152, 1126, 178)}, color={'cn': (76, 88, 90), 'en': (76, 88, 90), 'jp': (76, 88, 90), 'tw': (76, 88, 90)}, button={'cn': (1070, 152, 1126, 178), 'en': (1070, 152, 1126, 178), 'jp': (1070, 152, 1126, 178), 'tw': (1070, 152, 1126, 178)}, file={'cn': './assets/cn/shop/SHOP_SELECT_STOCK.png', 'en': './assets/en/shop/SHOP_SELECT_STOCK.png', 'jp': './assets/jp/shop/SHOP_SELECT_STOCK.png', 'tw': './assets/tw/shop/SHOP_SELECT_STOCK.png'}) SHOP_VOUCHER = Button(area={'cn': (1115, 123, 1261, 158), 'en': (1115, 123, 1261, 158), 'jp': (1115, 123, 1261, 158), 'tw': (1115, 123, 1261, 158)}, color={'cn': (90, 96, 110), 'en': (90, 96, 110), 'jp': (90, 96, 110), 'tw': (90, 96, 110)}, button={'cn': (1115, 123, 1261, 158), 'en': (1115, 123, 1261, 158), 'jp': (1115, 123, 1261, 158), 'tw': (1115, 123, 1261, 158)}, file={'cn': './assets/cn/shop/SHOP_VOUCHER.png', 'en': './assets/en/shop/SHOP_VOUCHER.png', 'jp': './assets/jp/shop/SHOP_VOUCHER.png', 'tw': './assets/tw/shop/SHOP_VOUCHER.png'}) -TAB_CORE_LIMITED = Button(area={'cn': (303, 99, 340, 118), 'en': (247, 97, 357, 122), 'jp': (303, 98, 343, 118), 'tw': (303, 99, 340, 118)}, color={'cn': (154, 161, 166), 'en': (190, 197, 200), 'jp': (164, 172, 177), 'tw': (154, 161, 166)}, button={'cn': (303, 99, 340, 118), 'en': (247, 97, 357, 122), 'jp': (303, 98, 343, 118), 'tw': (303, 99, 340, 118)}, file={'cn': './assets/cn/shop/TAB_CORE_LIMITED.png', 'en': './assets/en/shop/TAB_CORE_LIMITED.png', 'jp': './assets/jp/shop/TAB_CORE_LIMITED.png', 'tw': './assets/cn/shop/TAB_CORE_LIMITED.png'}) -TAB_CORE_MONTHLY = Button(area={'cn': (533, 100, 570, 118), 'en': (477, 96, 587, 121), 'jp': (533, 98, 573, 118), 'tw': (533, 100, 570, 118)}, color={'cn': (154, 161, 166), 'en': (192, 198, 201), 'jp': (173, 180, 184), 'tw': (154, 161, 166)}, button={'cn': (533, 100, 570, 118), 'en': (477, 96, 587, 121), 'jp': (533, 98, 573, 118), 'tw': (533, 100, 570, 118)}, file={'cn': './assets/cn/shop/TAB_CORE_MONTHLY.png', 'en': './assets/en/shop/TAB_CORE_MONTHLY.png', 'jp': './assets/jp/shop/TAB_CORE_MONTHLY.png', 'tw': './assets/cn/shop/TAB_CORE_MONTHLY.png'}) -TAB_GENERAL = Button(area={'cn': (259, 98, 300, 118), 'en': (249, 100, 309, 120), 'jp': (240, 97, 320, 118), 'tw': (259, 98, 300, 118)}, color={'cn': (175, 182, 186), 'en': (176, 183, 187), 'jp': (207, 213, 217), 'tw': (175, 182, 186)}, button={'cn': (259, 98, 300, 118), 'en': (249, 100, 309, 120), 'jp': (240, 97, 320, 118), 'tw': (259, 98, 300, 118)}, file={'cn': './assets/cn/shop/TAB_GENERAL.png', 'en': './assets/en/shop/TAB_GENERAL.png', 'jp': './assets/jp/shop/TAB_GENERAL.png', 'tw': './assets/cn/shop/TAB_GENERAL.png'}) -TAB_GUILD = Button(area={'cn': (627, 98, 668, 118), 'en': (617, 99, 677, 119), 'jp': (617, 97, 678, 119), 'tw': (627, 98, 668, 118)}, color={'cn': (160, 167, 172), 'en': (173, 180, 184), 'jp': (173, 180, 185), 'tw': (160, 167, 172)}, button={'cn': (627, 98, 668, 118), 'en': (617, 99, 677, 119), 'jp': (617, 97, 678, 119), 'tw': (627, 98, 668, 118)}, file={'cn': './assets/cn/shop/TAB_GUILD.png', 'en': './assets/en/shop/TAB_GUILD.png', 'jp': './assets/jp/shop/TAB_GUILD.png', 'tw': './assets/cn/shop/TAB_GUILD.png'}) -TAB_MEDAL = Button(area={'cn': (742, 99, 783, 118), 'en': (733, 99, 793, 119), 'jp': (742, 98, 785, 119), 'tw': (742, 99, 783, 118)}, color={'cn': (151, 159, 163), 'en': (165, 172, 176), 'jp': (171, 178, 183), 'tw': (151, 159, 163)}, button={'cn': (742, 99, 783, 118), 'en': (733, 99, 793, 119), 'jp': (742, 98, 785, 119), 'tw': (742, 99, 783, 118)}, file={'cn': './assets/cn/shop/TAB_MEDAL.png', 'en': './assets/en/shop/TAB_MEDAL.png', 'jp': './assets/jp/shop/TAB_MEDAL.png', 'tw': './assets/cn/shop/TAB_MEDAL.png'}) -TAB_MERIT = Button(area={'cn': (443, 98, 484, 118), 'en': (434, 99, 494, 119), 'jp': (442, 97, 485, 118), 'tw': (443, 98, 484, 118)}, color={'cn': (157, 164, 169), 'en': (176, 183, 187), 'jp': (170, 177, 182), 'tw': (157, 164, 169)}, button={'cn': (443, 98, 484, 118), 'en': (434, 99, 494, 119), 'jp': (442, 97, 485, 118), 'tw': (443, 98, 484, 118)}, file={'cn': './assets/cn/shop/TAB_MERIT.png', 'en': './assets/en/shop/TAB_MERIT.png', 'jp': './assets/jp/shop/TAB_MERIT.png', 'tw': './assets/cn/shop/TAB_MERIT.png'}) +TAB_CORE_LIMITED = Button(area={'cn': (303, 99, 340, 118), 'en': (247, 97, 357, 122), 'jp': (303, 98, 343, 118), 'tw': (302, 99, 342, 120)}, color={'cn': (154, 161, 166), 'en': (190, 197, 200), 'jp': (164, 172, 177), 'tw': (182, 188, 193)}, button={'cn': (303, 99, 340, 118), 'en': (247, 97, 357, 122), 'jp': (303, 98, 343, 118), 'tw': (302, 99, 342, 120)}, file={'cn': './assets/cn/shop/TAB_CORE_LIMITED.png', 'en': './assets/en/shop/TAB_CORE_LIMITED.png', 'jp': './assets/jp/shop/TAB_CORE_LIMITED.png', 'tw': './assets/tw/shop/TAB_CORE_LIMITED.png'}) +TAB_CORE_MONTHLY = Button(area={'cn': (533, 100, 570, 118), 'en': (477, 96, 587, 121), 'jp': (533, 98, 573, 118), 'tw': (533, 99, 572, 120)}, color={'cn': (154, 161, 166), 'en': (192, 198, 201), 'jp': (173, 180, 184), 'tw': (184, 189, 195)}, button={'cn': (533, 100, 570, 118), 'en': (477, 96, 587, 121), 'jp': (533, 98, 573, 118), 'tw': (533, 99, 572, 120)}, file={'cn': './assets/cn/shop/TAB_CORE_MONTHLY.png', 'en': './assets/en/shop/TAB_CORE_MONTHLY.png', 'jp': './assets/jp/shop/TAB_CORE_MONTHLY.png', 'tw': './assets/tw/shop/TAB_CORE_MONTHLY.png'}) +TAB_GENERAL = Button(area={'cn': (259, 98, 300, 118), 'en': (249, 100, 309, 120), 'jp': (240, 97, 320, 118), 'tw': (260, 97, 300, 119)}, color={'cn': (175, 182, 186), 'en': (176, 183, 187), 'jp': (207, 213, 217), 'tw': (192, 201, 203)}, button={'cn': (259, 98, 300, 118), 'en': (249, 100, 309, 120), 'jp': (240, 97, 320, 118), 'tw': (260, 97, 300, 119)}, file={'cn': './assets/cn/shop/TAB_GENERAL.png', 'en': './assets/en/shop/TAB_GENERAL.png', 'jp': './assets/jp/shop/TAB_GENERAL.png', 'tw': './assets/tw/shop/TAB_GENERAL.png'}) +TAB_GUILD = Button(area={'cn': (627, 98, 668, 118), 'en': (617, 99, 677, 119), 'jp': (617, 97, 678, 119), 'tw': (628, 100, 667, 119)}, color={'cn': (160, 167, 172), 'en': (173, 180, 184), 'jp': (173, 180, 185), 'tw': (167, 174, 179)}, button={'cn': (627, 98, 668, 118), 'en': (617, 99, 677, 119), 'jp': (617, 97, 678, 119), 'tw': (628, 100, 667, 119)}, file={'cn': './assets/cn/shop/TAB_GUILD.png', 'en': './assets/en/shop/TAB_GUILD.png', 'jp': './assets/jp/shop/TAB_GUILD.png', 'tw': './assets/tw/shop/TAB_GUILD.png'}) +TAB_MEDAL = Button(area={'cn': (742, 99, 783, 118), 'en': (733, 99, 793, 119), 'jp': (742, 98, 785, 119), 'tw': (741, 97, 786, 120)}, color={'cn': (151, 159, 163), 'en': (165, 172, 176), 'jp': (171, 178, 183), 'tw': (187, 193, 198)}, button={'cn': (742, 99, 783, 118), 'en': (733, 99, 793, 119), 'jp': (742, 98, 785, 119), 'tw': (741, 97, 786, 120)}, file={'cn': './assets/cn/shop/TAB_MEDAL.png', 'en': './assets/en/shop/TAB_MEDAL.png', 'jp': './assets/jp/shop/TAB_MEDAL.png', 'tw': './assets/tw/shop/TAB_MEDAL.png'}) +TAB_MERIT = Button(area={'cn': (443, 98, 484, 118), 'en': (434, 99, 494, 119), 'jp': (442, 97, 485, 118), 'tw': (443, 99, 485, 120)}, color={'cn': (157, 164, 169), 'en': (176, 183, 187), 'jp': (170, 177, 182), 'tw': (179, 185, 190)}, button={'cn': (443, 98, 484, 118), 'en': (434, 99, 494, 119), 'jp': (442, 97, 485, 118), 'tw': (443, 99, 485, 120)}, file={'cn': './assets/cn/shop/TAB_MERIT.png', 'en': './assets/en/shop/TAB_MERIT.png', 'jp': './assets/jp/shop/TAB_MERIT.png', 'tw': './assets/tw/shop/TAB_MERIT.png'}) TAB_META = Button(area={'cn': (804, 99, 860, 117), 'en': (801, 99, 861, 119), 'jp': (799, 98, 865, 118), 'tw': (804, 99, 860, 117)}, color={'cn': (172, 179, 183), 'en': (173, 179, 183), 'jp': (187, 193, 198), 'tw': (172, 179, 183)}, button={'cn': (804, 99, 860, 117), 'en': (801, 99, 861, 119), 'jp': (799, 98, 865, 118), 'tw': (804, 99, 860, 117)}, file={'cn': './assets/cn/shop/TAB_META.png', 'en': './assets/en/shop/TAB_META.png', 'jp': './assets/jp/shop/TAB_META.png', 'tw': './assets/cn/shop/TAB_META.png'}) -TAB_PRIZE = Button(area={'cn': (995, 98, 1037, 118), 'en': (985, 99, 1045, 119), 'jp': (977, 97, 1053, 118), 'tw': (995, 98, 1037, 118)}, color={'cn': (162, 168, 173), 'en': (183, 189, 193), 'jp': (204, 210, 213), 'tw': (162, 168, 173)}, button={'cn': (995, 98, 1037, 118), 'en': (985, 99, 1045, 119), 'jp': (977, 97, 1053, 118), 'tw': (995, 98, 1037, 118)}, file={'cn': './assets/cn/shop/TAB_PRIZE.png', 'en': './assets/en/shop/TAB_PRIZE.png', 'jp': './assets/jp/shop/TAB_PRIZE.png', 'tw': './assets/cn/shop/TAB_PRIZE.png'}) -TAB_PROTOTYPE = Button(area={'cn': (973, 98, 1013, 118), 'en': (963, 99, 1023, 119), 'jp': (963, 99, 1021, 119), 'tw': (973, 98, 1013, 118)}, color={'cn': (154, 161, 165), 'en': (178, 184, 188), 'jp': (197, 203, 207), 'tw': (154, 161, 165)}, button={'cn': (973, 98, 1013, 118), 'en': (963, 99, 1023, 119), 'jp': (963, 99, 1021, 119), 'tw': (973, 98, 1013, 118)}, file={'cn': './assets/cn/shop/TAB_PROTOTYPE.png', 'en': './assets/en/shop/TAB_PROTOTYPE.png', 'jp': './assets/jp/shop/TAB_PROTOTYPE.png', 'tw': './assets/cn/shop/TAB_PROTOTYPE.png'}) +TAB_PRIZE = Button(area={'cn': (995, 98, 1037, 118), 'en': (985, 99, 1045, 119), 'jp': (977, 97, 1053, 118), 'tw': (996, 99, 1035, 119)}, color={'cn': (162, 168, 173), 'en': (183, 189, 193), 'jp': (204, 210, 213), 'tw': (176, 182, 187)}, button={'cn': (995, 98, 1037, 118), 'en': (985, 99, 1045, 119), 'jp': (977, 97, 1053, 118), 'tw': (996, 99, 1035, 119)}, file={'cn': './assets/cn/shop/TAB_PRIZE.png', 'en': './assets/en/shop/TAB_PRIZE.png', 'jp': './assets/jp/shop/TAB_PRIZE.png', 'tw': './assets/tw/shop/TAB_PRIZE.png'}) +TAB_PROTOTYPE = Button(area={'cn': (973, 98, 1013, 118), 'en': (963, 99, 1023, 119), 'jp': (963, 99, 1021, 119), 'tw': (974, 99, 1014, 119)}, color={'cn': (154, 161, 165), 'en': (178, 184, 188), 'jp': (197, 203, 207), 'tw': (180, 185, 190)}, button={'cn': (973, 98, 1013, 118), 'en': (963, 99, 1023, 119), 'jp': (963, 99, 1021, 119), 'tw': (974, 99, 1014, 119)}, file={'cn': './assets/cn/shop/TAB_PROTOTYPE.png', 'en': './assets/en/shop/TAB_PROTOTYPE.png', 'jp': './assets/jp/shop/TAB_PROTOTYPE.png', 'tw': './assets/tw/shop/TAB_PROTOTYPE.png'}) VOUCHER_SHOP_SCROLL_AREA = Button(area={'cn': (1257, 184, 1263, 647), 'en': (1257, 184, 1263, 647), 'jp': (1257, 184, 1263, 647), 'tw': (1257, 184, 1263, 647)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (1257, 184, 1263, 647), 'en': (1257, 184, 1263, 647), 'jp': (1257, 184, 1263, 647), 'tw': (1257, 184, 1263, 647)}, file={'cn': './assets/cn/shop/VOUCHER_SHOP_SCROLL_AREA.png', 'en': './assets/en/shop/VOUCHER_SHOP_SCROLL_AREA.png', 'jp': './assets/jp/shop/VOUCHER_SHOP_SCROLL_AREA.png', 'tw': './assets/tw/shop/VOUCHER_SHOP_SCROLL_AREA.png'}) diff --git a/module/shop/shop_reward.py b/module/shop/shop_reward.py index 33ee4980f..6b50576df 100644 --- a/module/shop/shop_reward.py +++ b/module/shop/shop_reward.py @@ -9,10 +9,6 @@ from module.shop.ui import ShopUI class RewardShop(ShopUI): def run_frequent(self): - if self.config.SERVER in ['tw']: - self.config.task_delay(server_update=True) - self.config.task_stop() - self.ui_goto_shop() self.device.click_record_clear() self.shop_nav_250814.set(NAV_GENERAL, main=self) @@ -22,10 +18,6 @@ class RewardShop(ShopUI): self.config.task_delay(server_update=True) def run_once(self): - if self.config.SERVER in ['tw']: - self.config.task_delay(server_update=True) - self.config.task_stop() - # Munitions shops self.ui_goto_shop() self.device.click_record_clear() diff --git a/module/ui/assets.py b/module/ui/assets.py index 1a4fcb4e6..8dad530f8 100644 --- a/module/ui/assets.py +++ b/module/ui/assets.py @@ -66,7 +66,7 @@ MEOWFFICER_GOTO_DORMMENU = Button(area={'cn': (24, 7, 49, 45), 'en': (24, 7, 49, MEOWFFICER_INFO = Button(area={'cn': (1090, 603, 1241, 650), 'en': (1106, 616, 1227, 638), 'jp': (1089, 608, 1240, 647), 'tw': (1124, 610, 1207, 647)}, color={'cn': (243, 214, 92), 'en': (212, 182, 77), 'jp': (247, 218, 92), 'tw': (229, 200, 87)}, button={'cn': (1090, 603, 1241, 650), 'en': (1106, 616, 1227, 638), 'jp': (1089, 608, 1240, 647), 'tw': (1124, 610, 1207, 647)}, file={'cn': './assets/cn/ui/MEOWFFICER_INFO.png', 'en': './assets/en/ui/MEOWFFICER_INFO.png', 'jp': './assets/jp/ui/MEOWFFICER_INFO.png', 'tw': './assets/tw/ui/MEOWFFICER_INFO.png'}) META_CHECK = Button(area={'cn': (120, 14, 209, 35), 'en': (148, 13, 265, 36), 'jp': (125, 11, 235, 39), 'tw': (120, 14, 209, 35)}, color={'cn': (159, 143, 144), 'en': (170, 156, 156), 'jp': (124, 105, 106), 'tw': (159, 143, 144)}, button={'cn': (120, 14, 209, 35), 'en': (148, 13, 265, 36), 'jp': (125, 11, 235, 39), 'tw': (120, 14, 209, 35)}, file={'cn': './assets/cn/ui/META_CHECK.png', 'en': './assets/en/ui/META_CHECK.png', 'jp': './assets/jp/ui/META_CHECK.png', 'tw': './assets/tw/ui/META_CHECK.png'}) MISSION_CHECK = Button(area={'cn': (120, 15, 173, 40), 'en': (120, 15, 260, 41), 'jp': (120, 14, 173, 40), 'tw': (119, 12, 176, 42)}, color={'cn': (141, 156, 194), 'en': (111, 124, 165), 'jp': (150, 165, 202), 'tw': (125, 139, 178)}, button={'cn': (120, 15, 173, 40), 'en': (120, 15, 260, 41), 'jp': (120, 14, 173, 40), 'tw': (119, 12, 176, 42)}, file={'cn': './assets/cn/ui/MISSION_CHECK.png', 'en': './assets/en/ui/MISSION_CHECK.png', 'jp': './assets/jp/ui/MISSION_CHECK.png', 'tw': './assets/tw/ui/MISSION_CHECK.png'}) -MUNITIONS_CHECK = Button(area={'cn': (60, 361, 104, 395), 'en': (60, 361, 104, 395), 'jp': (59, 371, 126, 397), 'tw': (11, 374, 131, 402)}, color={'cn': (115, 191, 235), 'en': (111, 189, 234), 'jp': (134, 194, 227), 'tw': (101, 200, 255)}, button={'cn': (60, 361, 104, 395), 'en': (60, 361, 104, 395), 'jp': (59, 371, 126, 397), 'tw': (11, 374, 131, 402)}, file={'cn': './assets/cn/ui/MUNITIONS_CHECK.png', 'en': './assets/en/ui/MUNITIONS_CHECK.png', 'jp': './assets/jp/ui/MUNITIONS_CHECK.png', 'tw': './assets/tw/ui/MUNITIONS_CHECK.png'}) +MUNITIONS_CHECK = Button(area={'cn': (60, 361, 104, 395), 'en': (60, 361, 104, 395), 'jp': (59, 371, 126, 397), 'tw': (59, 362, 106, 395)}, color={'cn': (115, 191, 235), 'en': (111, 189, 234), 'jp': (134, 194, 227), 'tw': (106, 188, 234)}, button={'cn': (60, 361, 104, 395), 'en': (60, 361, 104, 395), 'jp': (59, 371, 126, 397), 'tw': (59, 362, 106, 395)}, file={'cn': './assets/cn/ui/MUNITIONS_CHECK.png', 'en': './assets/en/ui/MUNITIONS_CHECK.png', 'jp': './assets/jp/ui/MUNITIONS_CHECK.png', 'tw': './assets/tw/ui/MUNITIONS_CHECK.png'}) OS_CHECK = Button(area={'cn': (613, 17, 627, 34), 'en': (613, 17, 627, 34), 'jp': (613, 17, 627, 34), 'tw': (613, 17, 627, 34)}, color={'cn': (58, 117, 146), 'en': (58, 117, 146), 'jp': (58, 117, 146), 'tw': (58, 117, 146)}, button={'cn': (613, 17, 627, 34), 'en': (613, 17, 627, 34), 'jp': (613, 17, 627, 34), 'tw': (613, 17, 627, 34)}, file={'cn': './assets/cn/ui/OS_CHECK.png', 'en': './assets/en/ui/OS_CHECK.png', 'jp': './assets/jp/ui/OS_CHECK.png', 'tw': './assets/tw/ui/OS_CHECK.png'}) PLAYER_CHECK = Button(area={'cn': (28, 668, 139, 688), 'en': (11, 649, 157, 705), 'jp': (26, 668, 139, 689), 'tw': (28, 668, 139, 688)}, color={'cn': (237, 204, 127), 'en': (197, 156, 97), 'jp': (237, 205, 128), 'tw': (237, 204, 127)}, button={'cn': (28, 668, 139, 688), 'en': (11, 649, 157, 705), 'jp': (26, 668, 139, 689), 'tw': (28, 668, 139, 688)}, file={'cn': './assets/cn/ui/PLAYER_CHECK.png', 'en': './assets/en/ui/PLAYER_CHECK.png', 'jp': './assets/jp/ui/PLAYER_CHECK.png', 'tw': './assets/tw/ui/PLAYER_CHECK.png'}) PQ_GOTO_MAIN = Button(area={'cn': (1107, 19, 1143, 51), 'en': (1107, 19, 1143, 51), 'jp': (1107, 19, 1143, 51), 'tw': (1107, 19, 1143, 51)}, color={'cn': (199, 199, 199), 'en': (199, 199, 199), 'jp': (199, 199, 199), 'tw': (199, 199, 199)}, button={'cn': (1107, 19, 1143, 51), 'en': (1107, 19, 1143, 51), 'jp': (1107, 19, 1143, 51), 'tw': (1107, 19, 1143, 51)}, file={'cn': './assets/cn/ui/PQ_GOTO_MAIN.png', 'en': './assets/en/ui/PQ_GOTO_MAIN.png', 'jp': './assets/jp/ui/PQ_GOTO_MAIN.png', 'tw': './assets/tw/ui/PQ_GOTO_MAIN.png'}) From bd4852a356026512a261b52fa87fd684a36ca783 Mon Sep 17 00:00:00 2001 From: whjhs1010203 <26708256+whjhs1010203@users.noreply.github.com> Date: Mon, 20 Oct 2025 10:42:03 +0800 Subject: [PATCH 07/27] Upd: [TW] supply_pack --- assets/tw/ui/SUPPLY_PACK_CHECK.png | Bin 7631 -> 6829 bytes module/freebies/freebies.py | 7 +++---- module/ui/assets.py | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/assets/tw/ui/SUPPLY_PACK_CHECK.png b/assets/tw/ui/SUPPLY_PACK_CHECK.png index fe22c4c302bfb995e8a79c81a9a257bc91b3adb6..fbcef935a5cb344ab3e7dc135982afc85e599a94 100644 GIT binary patch literal 6829 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 literal 7631 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 diff --git a/module/freebies/freebies.py b/module/freebies/freebies.py index 0905d37f2..8694e3075 100644 --- a/module/freebies/freebies.py +++ b/module/freebies/freebies.py @@ -22,9 +22,8 @@ class Freebies(ModuleBase): logger.hr('Mail', level=1) MailWhite(self.config, self.device).run() - if self.config.SERVER not in ['tw']: - if self.config.SupplyPack_Collect: - logger.hr('Supply pack', level=1) - SupplyPack_250814(self.config, self.device).run() + if self.config.SupplyPack_Collect: + logger.hr('Supply pack', level=1) + SupplyPack_250814(self.config, self.device).run() self.config.task_delay(server_update=True) diff --git a/module/ui/assets.py b/module/ui/assets.py index 8dad530f8..6496047f5 100644 --- a/module/ui/assets.py +++ b/module/ui/assets.py @@ -89,7 +89,7 @@ SHOP_GOTO_MUNITIONS = Button(area={'cn': (840, 560, 999, 600), 'en': (840, 560, SHOP_GOTO_SUPPLY_PACK = Button(area={'cn': (1044, 321, 1094, 366), 'en': (1044, 321, 1094, 366), 'jp': (1044, 321, 1094, 366), 'tw': (883, 537, 929, 579)}, color={'cn': (198, 155, 150), 'en': (198, 155, 150), 'jp': (198, 155, 150), 'tw': (197, 131, 140)}, button={'cn': (902, 105, 1211, 490), 'en': (902, 105, 1211, 490), 'jp': (902, 105, 1211, 490), 'tw': (810, 353, 987, 638)}, file={'cn': './assets/cn/ui/SHOP_GOTO_SUPPLY_PACK.png', 'en': './assets/en/ui/SHOP_GOTO_SUPPLY_PACK.png', 'jp': './assets/jp/ui/SHOP_GOTO_SUPPLY_PACK.png', 'tw': './assets/tw/ui/SHOP_GOTO_SUPPLY_PACK.png'}) SP_CHECK = Button(area={'cn': (123, 63, 206, 109), 'en': (123, 63, 206, 109), 'jp': (125, 66, 205, 107), 'tw': (123, 63, 206, 109)}, color={'cn': (95, 110, 145), 'en': (95, 110, 145), 'jp': (78, 92, 127), 'tw': (95, 110, 145)}, button={'cn': (123, 63, 206, 109), 'en': (123, 63, 206, 109), 'jp': (125, 66, 205, 107), 'tw': (123, 63, 206, 109)}, file={'cn': './assets/cn/ui/SP_CHECK.png', 'en': './assets/en/ui/SP_CHECK.png', 'jp': './assets/jp/ui/SP_CHECK.png', 'tw': './assets/tw/ui/SP_CHECK.png'}) STORAGE_CHECK = Button(area={'cn': (120, 14, 175, 40), 'en': (123, 14, 209, 36), 'jp': (121, 13, 176, 41), 'tw': (120, 14, 175, 40)}, color={'cn': (137, 151, 188), 'en': (119, 133, 174), 'jp': (137, 156, 196), 'tw': (137, 151, 188)}, button={'cn': (120, 14, 175, 40), 'en': (123, 14, 209, 36), 'jp': (121, 13, 176, 41), 'tw': (120, 14, 175, 40)}, file={'cn': './assets/cn/ui/STORAGE_CHECK.png', 'en': './assets/en/ui/STORAGE_CHECK.png', 'jp': './assets/jp/ui/STORAGE_CHECK.png', 'tw': './assets/cn/ui/STORAGE_CHECK.png'}) -SUPPLY_PACK_CHECK = Button(area={'cn': (60, 232, 104, 265), 'en': (60, 232, 104, 265), 'jp': (61, 237, 102, 265), 'tw': (31, 229, 103, 285)}, color={'cn': (120, 193, 236), 'en': (121, 193, 236), 'jp': (101, 186, 233), 'tw': (80, 190, 255)}, button={'cn': (60, 232, 104, 265), 'en': (60, 232, 104, 265), 'jp': (61, 237, 102, 265), 'tw': (31, 229, 103, 285)}, file={'cn': './assets/cn/ui/SUPPLY_PACK_CHECK.png', 'en': './assets/en/ui/SUPPLY_PACK_CHECK.png', 'jp': './assets/jp/ui/SUPPLY_PACK_CHECK.png', 'tw': './assets/tw/ui/SUPPLY_PACK_CHECK.png'}) +SUPPLY_PACK_CHECK = Button(area={'cn': (60, 232, 104, 265), 'en': (60, 232, 104, 265), 'jp': (61, 237, 102, 265), 'tw': (82, 241, 150, 266)}, color={'cn': (120, 193, 236), 'en': (121, 193, 236), 'jp': (101, 186, 233), 'tw': (118, 196, 233)}, button={'cn': (60, 232, 104, 265), 'en': (60, 232, 104, 265), 'jp': (61, 237, 102, 265), 'tw': (82, 241, 150, 266)}, file={'cn': './assets/cn/ui/SUPPLY_PACK_CHECK.png', 'en': './assets/en/ui/SUPPLY_PACK_CHECK.png', 'jp': './assets/jp/ui/SUPPLY_PACK_CHECK.png', 'tw': './assets/tw/ui/SUPPLY_PACK_CHECK.png'}) TACTICAL_CHECK = Button(area={'cn': (122, 14, 231, 38), 'en': (119, 17, 302, 36), 'jp': (122, 12, 232, 37), 'tw': (122, 15, 230, 39)}, color={'cn': (145, 161, 200), 'en': (110, 124, 164), 'jp': (155, 171, 209), 'tw': (158, 174, 212)}, button={'cn': (122, 14, 231, 38), 'en': (119, 17, 302, 36), 'jp': (122, 12, 232, 37), 'tw': (122, 15, 230, 39)}, file={'cn': './assets/cn/ui/TACTICAL_CHECK.png', 'en': './assets/en/ui/TACTICAL_CHECK.png', 'jp': './assets/jp/ui/TACTICAL_CHECK.png', 'tw': './assets/tw/ui/TACTICAL_CHECK.png'}) WAR_ARCHIVES_CHECK = Button(area={'cn': (95, 41, 114, 70), 'en': (95, 41, 114, 70), 'jp': (95, 41, 114, 70), 'tw': (95, 41, 114, 70)}, color={'cn': (137, 177, 208), 'en': (137, 177, 208), 'jp': (137, 177, 208), 'tw': (137, 177, 208)}, button={'cn': (95, 41, 114, 70), 'en': (95, 41, 114, 70), 'jp': (95, 41, 114, 70), 'tw': (95, 41, 114, 70)}, file={'cn': './assets/cn/ui/WAR_ARCHIVES_CHECK.png', 'en': './assets/en/ui/WAR_ARCHIVES_CHECK.png', 'jp': './assets/jp/ui/WAR_ARCHIVES_CHECK.png', 'tw': './assets/tw/ui/WAR_ARCHIVES_CHECK.png'}) WAR_ARCHIVES_GOTO_CAMPAIGN_MENU = Button(area={'cn': (95, 41, 114, 70), 'en': (95, 41, 114, 70), 'jp': (95, 41, 114, 70), 'tw': (95, 41, 114, 70)}, color={'cn': (137, 177, 208), 'en': (137, 177, 208), 'jp': (137, 177, 208), 'tw': (137, 177, 208)}, button={'cn': (14, 312, 69, 467), 'en': (14, 312, 69, 467), 'jp': (14, 312, 69, 467), 'tw': (14, 312, 69, 467)}, file={'cn': './assets/cn/ui/WAR_ARCHIVES_GOTO_CAMPAIGN_MENU.png', 'en': './assets/en/ui/WAR_ARCHIVES_GOTO_CAMPAIGN_MENU.png', 'jp': './assets/jp/ui/WAR_ARCHIVES_GOTO_CAMPAIGN_MENU.png', 'tw': './assets/tw/ui/WAR_ARCHIVES_GOTO_CAMPAIGN_MENU.png'}) From c6957dcee2f18d9897229a412e45220335bf30c8 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Mon, 20 Oct 2025 11:57:28 +0800 Subject: [PATCH 08/27] Fix: load offset of AUTO_SEARCH_SETTINGS first to avoid click effects masking buttons (#5238) --- module/map/map_fleet_preparation.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/module/map/map_fleet_preparation.py b/module/map/map_fleet_preparation.py index 587b7c27f..51f5f3df4 100644 --- a/module/map/map_fleet_preparation.py +++ b/module/map/map_fleet_preparation.py @@ -318,6 +318,15 @@ class FleetPreparation(InfoHandler): choose=SUBMARINE_CHOOSE, advice=SUBMARINE_ADVICE, bar=SUBMARINE_BAR, clear=SUBMARINE_CLEAR, in_use=SUBMARINE_IN_USE, hard_satisfied=SUBMARINE_HARD_SATIESFIED, main=self) + if self.appear(FLEET_1_CLEAR, offset=(-20, -80, 20, 5)): + AUTO_SEARCH_SET_MOB.load_offset(FLEET_1_CLEAR) + AUTO_SEARCH_SET_BOSS.load_offset(FLEET_1_CLEAR) + AUTO_SEARCH_SET_ALL.load_offset(FLEET_1_CLEAR) + AUTO_SEARCH_SET_STANDBY.load_offset(FLEET_1_CLEAR) + if self.appear(SUBMARINE_CLEAR, offset=(-20, -80, 20, 5)): + AUTO_SEARCH_SET_SUB_AUTO.load_offset(SUBMARINE_CLEAR) + AUTO_SEARCH_SET_SUB_STANDBY.load_offset(SUBMARINE_CLEAR) + # Check if ship is prepared in hard mode h1, h2, h3 = fleet_1.is_hard_satisfied(), fleet_2.is_hard_satisfied(), submarine.is_hard_satisfied() logger.info(f'Hard satisfied: Fleet_1: {h1}, Fleet_2: {h2}, Submarine: {h3}') @@ -378,13 +387,4 @@ class FleetPreparation(InfoHandler): else: self.config.SUBMARINE = 0 - if self.appear(FLEET_1_CLEAR, offset=(-20, -80, 20, 5)): - AUTO_SEARCH_SET_MOB.load_offset(FLEET_1_CLEAR) - AUTO_SEARCH_SET_BOSS.load_offset(FLEET_1_CLEAR) - AUTO_SEARCH_SET_ALL.load_offset(FLEET_1_CLEAR) - AUTO_SEARCH_SET_STANDBY.load_offset(FLEET_1_CLEAR) - if self.appear(SUBMARINE_CLEAR, offset=(-20, -80, 20, 5)): - AUTO_SEARCH_SET_SUB_AUTO.load_offset(SUBMARINE_CLEAR) - AUTO_SEARCH_SET_SUB_STANDBY.load_offset(SUBMARINE_CLEAR) - return True From ae9224f79ec4c00671316b84ea62420d174812c6 Mon Sep 17 00:00:00 2001 From: whjhs1010203 <26708256+whjhs1010203@users.noreply.github.com> Date: Mon, 20 Oct 2025 22:20:58 +0800 Subject: [PATCH 09/27] Upd: [TW] BATTLE_PASS assets --- assets/tw/freebies/BATTLE_PASS_RED_DOT.png | Bin 5534 -> 2916 bytes assets/tw/ui/REWARD_GOTO_BATTLE_PASS.png | Bin 0 -> 6508 bytes module/freebies/assets.py | 2 +- module/ui/assets.py | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 assets/tw/ui/REWARD_GOTO_BATTLE_PASS.png diff --git a/assets/tw/freebies/BATTLE_PASS_RED_DOT.png b/assets/tw/freebies/BATTLE_PASS_RED_DOT.png index 6ce917a5c226beb5b0100b7c12e96c8688a60316..f8859acefaf2a853d07c560540b665ad27bd4170 100644 GIT binary patch delta 210 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 diff --git a/assets/tw/ui/REWARD_GOTO_BATTLE_PASS.png b/assets/tw/ui/REWARD_GOTO_BATTLE_PASS.png new file mode 100644 index 0000000000000000000000000000000000000000..fad8b6f9da801dd53fc30064b216504794120e83 GIT binary patch literal 6508 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 literal 0 HcmV?d00001 diff --git a/module/freebies/assets.py b/module/freebies/assets.py index 7e67ebfab..87acfc45a 100644 --- a/module/freebies/assets.py +++ b/module/freebies/assets.py @@ -4,7 +4,7 @@ from module.base.template import Template # This file was automatically generated by dev_tools/button_extract.py. # Don't modify it manually. -BATTLE_PASS_RED_DOT = Button(area={'cn': (623, 105, 629, 113), 'en': (623, 105, 629, 113), 'jp': (623, 105, 629, 113), 'tw': (623, 105, 629, 113)}, color={'cn': (202, 86, 66), 'en': (202, 86, 66), 'jp': (202, 86, 66), 'tw': (202, 86, 66)}, button={'cn': (623, 105, 629, 113), 'en': (623, 105, 629, 113), 'jp': (623, 105, 629, 113), 'tw': (623, 105, 629, 113)}, file={'cn': './assets/cn/freebies/BATTLE_PASS_RED_DOT.png', 'en': './assets/en/freebies/BATTLE_PASS_RED_DOT.png', 'jp': './assets/jp/freebies/BATTLE_PASS_RED_DOT.png', 'tw': './assets/tw/freebies/BATTLE_PASS_RED_DOT.png'}) +BATTLE_PASS_RED_DOT = Button(area={'cn': (623, 105, 629, 113), 'en': (623, 105, 629, 113), 'jp': (623, 105, 629, 113), 'tw': (648, 85, 652, 95)}, color={'cn': (202, 86, 66), 'en': (202, 86, 66), 'jp': (202, 86, 66), 'tw': (195, 84, 65)}, button={'cn': (623, 105, 629, 113), 'en': (623, 105, 629, 113), 'jp': (623, 105, 629, 113), 'tw': (648, 85, 652, 95)}, file={'cn': './assets/cn/freebies/BATTLE_PASS_RED_DOT.png', 'en': './assets/en/freebies/BATTLE_PASS_RED_DOT.png', 'jp': './assets/jp/freebies/BATTLE_PASS_RED_DOT.png', 'tw': './assets/tw/freebies/BATTLE_PASS_RED_DOT.png'}) BUY_CONFIRM = Button(area={'cn': (698, 579, 871, 636), 'en': (710, 583, 860, 633), 'jp': (749, 592, 820, 623), 'tw': (699, 579, 869, 636)}, color={'cn': (81, 129, 190), 'en': (92, 142, 203), 'jp': (122, 158, 205), 'tw': (85, 132, 191)}, button={'cn': (698, 579, 871, 636), 'en': (710, 583, 860, 633), 'jp': (749, 592, 820, 623), 'tw': (699, 579, 869, 636)}, file={'cn': './assets/cn/freebies/BUY_CONFIRM.png', 'en': './assets/en/freebies/BUY_CONFIRM.png', 'jp': './assets/jp/freebies/BUY_CONFIRM.png', 'tw': './assets/tw/freebies/BUY_CONFIRM.png'}) DATA_KEY_COLLECT = Button(area={'cn': (251, 38, 339, 73), 'en': (256, 42, 337, 68), 'jp': (254, 40, 340, 72), 'tw': (251, 38, 339, 73)}, color={'cn': (144, 116, 77), 'en': (145, 109, 72), 'jp': (144, 111, 69), 'tw': (144, 116, 77)}, button={'cn': (251, 38, 339, 73), 'en': (256, 42, 337, 68), 'jp': (254, 40, 340, 72), 'tw': (251, 38, 339, 73)}, file={'cn': './assets/cn/freebies/DATA_KEY_COLLECT.png', 'en': './assets/en/freebies/DATA_KEY_COLLECT.png', 'jp': './assets/jp/freebies/DATA_KEY_COLLECT.png', 'tw': './assets/tw/freebies/DATA_KEY_COLLECT.png'}) DATA_KEY_COLLECTED = Button(area={'cn': (251, 38, 339, 73), 'en': (255, 42, 338, 68), 'jp': (254, 41, 340, 71), 'tw': (251, 38, 339, 73)}, color={'cn': (102, 103, 103), 'en': (113, 113, 115), 'jp': (102, 103, 103), 'tw': (102, 103, 103)}, button={'cn': (251, 38, 339, 73), 'en': (255, 42, 338, 68), 'jp': (254, 41, 340, 71), 'tw': (251, 38, 339, 73)}, file={'cn': './assets/cn/freebies/DATA_KEY_COLLECTED.png', 'en': './assets/en/freebies/DATA_KEY_COLLECTED.png', 'jp': './assets/jp/freebies/DATA_KEY_COLLECTED.png', 'tw': './assets/tw/freebies/DATA_KEY_COLLECTED.png'}) diff --git a/module/ui/assets.py b/module/ui/assets.py index 6496047f5..d899d9779 100644 --- a/module/ui/assets.py +++ b/module/ui/assets.py @@ -78,7 +78,7 @@ RESHMENU_GOTO_META = Button(area={'cn': (1076, 254, 1155, 334), 'en': (1102, 251 RESHMENU_GOTO_RESEARCH = Button(area={'cn': (308, 268, 466, 422), 'en': (308, 268, 466, 422), 'jp': (308, 268, 466, 422), 'tw': (308, 268, 466, 422)}, color={'cn': (132, 147, 184), 'en': (132, 147, 184), 'jp': (132, 147, 184), 'tw': (132, 147, 184)}, button={'cn': (308, 268, 466, 422), 'en': (308, 268, 466, 422), 'jp': (308, 268, 466, 422), 'tw': (308, 268, 466, 422)}, file={'cn': './assets/cn/ui/RESHMENU_GOTO_RESEARCH.png', 'en': './assets/en/ui/RESHMENU_GOTO_RESEARCH.png', 'jp': './assets/jp/ui/RESHMENU_GOTO_RESEARCH.png', 'tw': './assets/tw/ui/RESHMENU_GOTO_RESEARCH.png'}) RESHMENU_GOTO_SHIPYARD = Button(area={'cn': (567, 275, 731, 397), 'en': (567, 275, 731, 397), 'jp': (567, 275, 731, 397), 'tw': (567, 275, 731, 397)}, color={'cn': (113, 126, 162), 'en': (113, 126, 162), 'jp': (113, 126, 162), 'tw': (113, 126, 162)}, button={'cn': (567, 275, 731, 397), 'en': (567, 275, 731, 397), 'jp': (567, 275, 731, 397), 'tw': (567, 275, 731, 397)}, file={'cn': './assets/cn/ui/RESHMENU_GOTO_SHIPYARD.png', 'en': './assets/en/ui/RESHMENU_GOTO_SHIPYARD.png', 'jp': './assets/jp/ui/RESHMENU_GOTO_SHIPYARD.png', 'tw': './assets/tw/ui/RESHMENU_GOTO_SHIPYARD.png'}) REWARD_CHECK = Button(area={'cn': (219, 107, 267, 158), 'en': (219, 107, 267, 158), 'jp': (219, 107, 267, 158), 'tw': (219, 107, 267, 158)}, color={'cn': (143, 116, 123), 'en': (143, 116, 123), 'jp': (143, 116, 123), 'tw': (143, 116, 123)}, button={'cn': (219, 107, 267, 158), 'en': (219, 107, 267, 158), 'jp': (219, 107, 267, 158), 'tw': (219, 107, 267, 158)}, file={'cn': './assets/cn/ui/REWARD_CHECK.png', 'en': './assets/en/ui/REWARD_CHECK.png', 'jp': './assets/jp/ui/REWARD_CHECK.png', 'tw': './assets/tw/ui/REWARD_CHECK.png'}) -REWARD_GOTO_BATTLE_PASS = Button(area={'cn': (580, 117, 620, 155), 'en': (580, 117, 620, 155), 'jp': (580, 117, 620, 155), 'tw': (580, 117, 620, 155)}, color={'cn': (92, 113, 139), 'en': (92, 113, 139), 'jp': (92, 113, 139), 'tw': (92, 113, 139)}, button={'cn': (580, 117, 620, 155), 'en': (580, 117, 620, 155), 'jp': (580, 117, 620, 155), 'tw': (580, 117, 620, 155)}, file={'cn': './assets/cn/ui/REWARD_GOTO_BATTLE_PASS.png', 'en': './assets/en/ui/REWARD_GOTO_BATTLE_PASS.png', 'jp': './assets/jp/ui/REWARD_GOTO_BATTLE_PASS.png', 'tw': './assets/cn/ui/REWARD_GOTO_BATTLE_PASS.png'}) +REWARD_GOTO_BATTLE_PASS = Button(area={'cn': (580, 117, 620, 155), 'en': (580, 117, 620, 155), 'jp': (580, 117, 620, 155), 'tw': (603, 105, 640, 141)}, color={'cn': (92, 113, 139), 'en': (92, 113, 139), 'jp': (92, 113, 139), 'tw': (81, 107, 145)}, button={'cn': (580, 117, 620, 155), 'en': (580, 117, 620, 155), 'jp': (580, 117, 620, 155), 'tw': (603, 105, 640, 141)}, file={'cn': './assets/cn/ui/REWARD_GOTO_BATTLE_PASS.png', 'en': './assets/en/ui/REWARD_GOTO_BATTLE_PASS.png', 'jp': './assets/jp/ui/REWARD_GOTO_BATTLE_PASS.png', 'tw': './assets/tw/ui/REWARD_GOTO_BATTLE_PASS.png'}) REWARD_GOTO_COMMISSION = Button(area={'cn': (418, 271, 468, 293), 'en': (407, 274, 499, 291), 'jp': (431, 274, 476, 295), 'tw': (418, 271, 468, 293)}, color={'cn': (142, 172, 216), 'en': (158, 183, 220), 'jp': (153, 180, 219), 'tw': (142, 172, 216)}, button={'cn': (383, 262, 503, 302), 'en': (393, 262, 514, 303), 'jp': (393, 262, 514, 303), 'tw': (383, 262, 503, 302)}, file={'cn': './assets/cn/ui/REWARD_GOTO_COMMISSION.png', 'en': './assets/en/ui/REWARD_GOTO_COMMISSION.png', 'jp': './assets/jp/ui/REWARD_GOTO_COMMISSION.png', 'tw': './assets/tw/ui/REWARD_GOTO_COMMISSION.png'}) REWARD_GOTO_MAIN = Button(area={'cn': (219, 107, 267, 158), 'en': (219, 107, 267, 158), 'jp': (219, 107, 267, 158), 'tw': (219, 107, 267, 158)}, color={'cn': (143, 116, 123), 'en': (143, 116, 123), 'jp': (143, 116, 123), 'tw': (143, 116, 123)}, button={'cn': (787, 602, 867, 642), 'en': (787, 602, 867, 642), 'jp': (787, 602, 867, 642), 'tw': (787, 602, 867, 642)}, file={'cn': './assets/cn/ui/REWARD_GOTO_MAIN.png', 'en': './assets/en/ui/REWARD_GOTO_MAIN.png', 'jp': './assets/jp/ui/REWARD_GOTO_MAIN.png', 'tw': './assets/tw/ui/REWARD_GOTO_MAIN.png'}) REWARD_GOTO_TACTICAL = Button(area={'cn': (418, 413, 468, 434), 'en': (407, 416, 499, 433), 'jp': (431, 416, 476, 437), 'tw': (418, 413, 468, 435)}, color={'cn': (143, 176, 216), 'en': (157, 185, 219), 'jp': (151, 182, 217), 'tw': (141, 175, 215)}, button={'cn': (383, 404, 503, 444), 'en': (393, 404, 514, 445), 'jp': (393, 404, 514, 445), 'tw': (383, 404, 503, 444)}, file={'cn': './assets/cn/ui/REWARD_GOTO_TACTICAL.png', 'en': './assets/en/ui/REWARD_GOTO_TACTICAL.png', 'jp': './assets/jp/ui/REWARD_GOTO_TACTICAL.png', 'tw': './assets/tw/ui/REWARD_GOTO_TACTICAL.png'}) From 84cb4c6b5a9e713867d6a0330103f3b84195471b Mon Sep 17 00:00:00 2001 From: whjhs1010203 <26708256+whjhs1010203@users.noreply.github.com> Date: Mon, 20 Oct 2025 23:03:02 +0800 Subject: [PATCH 10/27] Upd: [TW] POPUP_CONFIRM_WHITE assets --- assets/tw/ui_white/POPUP_CONFIRM_WHITE.png | Bin 0 -> 5631 bytes module/freebies/mail_white.py | 4 +--- module/ui_white/assets.py | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) create mode 100644 assets/tw/ui_white/POPUP_CONFIRM_WHITE.png diff --git a/assets/tw/ui_white/POPUP_CONFIRM_WHITE.png b/assets/tw/ui_white/POPUP_CONFIRM_WHITE.png new file mode 100644 index 0000000000000000000000000000000000000000..f8a21b1f59dc801b333f181e071f07f55216fd1c GIT binary patch literal 5631 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 literal 0 HcmV?d00001 diff --git a/module/freebies/mail_white.py b/module/freebies/mail_white.py index 8efc9c355..3b475cad2 100644 --- a/module/freebies/mail_white.py +++ b/module/freebies/mail_white.py @@ -256,9 +256,7 @@ class MailWhite(UI): if not merit and not maintenance and not trade_license: logger.warning('Nothing to claim') return False - if self.config.SERVER not in ['cn', 'en', 'jp']: - logger.warning(f'Mail is not supported in {self.config.SERVER}, please contact server maintainers') - return False + # Must using white UI self.ui_ensure(page_main) diff --git a/module/ui_white/assets.py b/module/ui_white/assets.py index 19852f595..5f0a38895 100644 --- a/module/ui_white/assets.py +++ b/module/ui_white/assets.py @@ -25,7 +25,7 @@ MAIN_GOTO_STORAGE_WHITE = Button(area={'cn': (331, 656, 478, 703), 'en': (331, 6 MAIN_TAB_SWITCH_WHITE = Button(area={'cn': (966, 548, 999, 582), 'en': (966, 548, 999, 582), 'jp': (966, 548, 999, 582), 'tw': (966, 548, 999, 582)}, color={'cn': (89, 93, 108), 'en': (89, 93, 108), 'jp': (89, 93, 108), 'tw': (89, 93, 108)}, button={'cn': (966, 548, 999, 582), 'en': (966, 548, 999, 582), 'jp': (966, 548, 999, 582), 'tw': (966, 548, 999, 582)}, file={'cn': './assets/cn/ui_white/MAIN_TAB_SWITCH_WHITE.png', 'en': './assets/en/ui_white/MAIN_TAB_SWITCH_WHITE.png', 'jp': './assets/jp/ui_white/MAIN_TAB_SWITCH_WHITE.png', 'tw': './assets/tw/ui_white/MAIN_TAB_SWITCH_WHITE.png'}) MISSION_NOTICE_WHITE = Button(area={'cn': (923, 657, 947, 671), 'en': (923, 657, 947, 671), 'jp': (923, 657, 947, 671), 'tw': (923, 657, 947, 671)}, color={'cn': (227, 168, 159), 'en': (227, 168, 159), 'jp': (227, 168, 159), 'tw': (227, 168, 159)}, button={'cn': (923, 657, 947, 671), 'en': (923, 657, 947, 671), 'jp': (923, 657, 947, 671), 'tw': (923, 657, 947, 671)}, file={'cn': './assets/cn/ui_white/MISSION_NOTICE_WHITE.png', 'en': './assets/en/ui_white/MISSION_NOTICE_WHITE.png', 'jp': './assets/jp/ui_white/MISSION_NOTICE_WHITE.png', 'tw': './assets/tw/ui_white/MISSION_NOTICE_WHITE.png'}) POPUP_CANCEL_WHITE = Button(area={'cn': (487, 491, 531, 513), 'en': (471, 492, 547, 513), 'jp': (481, 490, 534, 516), 'tw': (487, 491, 531, 513)}, color={'cn': (214, 214, 214), 'en': (205, 206, 205), 'jp': (202, 203, 202), 'tw': (214, 214, 214)}, button={'cn': (487, 491, 531, 513), 'en': (471, 492, 547, 513), 'jp': (481, 490, 534, 516), 'tw': (487, 491, 531, 513)}, file={'cn': './assets/cn/ui_white/POPUP_CANCEL_WHITE.png', 'en': './assets/en/ui_white/POPUP_CANCEL_WHITE.png', 'jp': './assets/jp/ui_white/POPUP_CANCEL_WHITE.png', 'tw': './assets/cn/ui_white/POPUP_CANCEL_WHITE.png'}) -POPUP_CONFIRM_WHITE = Button(area={'cn': (746, 494, 791, 515), 'en': (727, 495, 810, 515), 'jp': (743, 491, 796, 518), 'tw': (746, 494, 791, 515)}, color={'cn': (133, 216, 255), 'en': (107, 207, 255), 'jp': (109, 207, 255), 'tw': (133, 216, 255)}, button={'cn': (746, 494, 791, 515), 'en': (727, 495, 810, 515), 'jp': (743, 491, 796, 518), 'tw': (746, 494, 791, 515)}, file={'cn': './assets/cn/ui_white/POPUP_CONFIRM_WHITE.png', 'en': './assets/en/ui_white/POPUP_CONFIRM_WHITE.png', 'jp': './assets/jp/ui_white/POPUP_CONFIRM_WHITE.png', 'tw': './assets/cn/ui_white/POPUP_CONFIRM_WHITE.png'}) +POPUP_CONFIRM_WHITE = Button(area={'cn': (746, 494, 791, 515), 'en': (727, 495, 810, 515), 'jp': (743, 491, 796, 518), 'tw': (744, 491, 794, 518)}, color={'cn': (133, 216, 255), 'en': (107, 207, 255), 'jp': (109, 207, 255), 'tw': (111, 207, 249)}, button={'cn': (746, 494, 791, 515), 'en': (727, 495, 810, 515), 'jp': (743, 491, 796, 518), 'tw': (744, 491, 794, 518)}, file={'cn': './assets/cn/ui_white/POPUP_CONFIRM_WHITE.png', 'en': './assets/en/ui_white/POPUP_CONFIRM_WHITE.png', 'jp': './assets/jp/ui_white/POPUP_CONFIRM_WHITE.png', 'tw': './assets/tw/ui_white/POPUP_CONFIRM_WHITE.png'}) POPUP_CONFIRM_WHITE_BATTLEPASS = Button(area={'cn': (744, 490, 795, 513), 'en': (744, 490, 795, 513), 'jp': (744, 490, 795, 513), 'tw': (744, 490, 795, 513)}, color={'cn': (119, 211, 255), 'en': (119, 211, 255), 'jp': (119, 211, 255), 'tw': (119, 211, 255)}, button={'cn': (744, 490, 795, 513), 'en': (744, 490, 795, 513), 'jp': (744, 490, 795, 513), 'tw': (744, 490, 795, 513)}, file={'cn': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'en': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'jp': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'tw': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png'}) POPUP_SINGLE_WHITE = Button(area={'cn': (623, 493, 668, 515), 'en': (623, 493, 668, 515), 'jp': (623, 493, 668, 515), 'tw': (623, 493, 668, 515)}, color={'cn': (131, 215, 255), 'en': (131, 215, 255), 'jp': (131, 215, 255), 'tw': (131, 215, 255)}, button={'cn': (623, 493, 668, 515), 'en': (623, 493, 668, 515), 'jp': (623, 493, 668, 515), 'tw': (623, 493, 668, 515)}, file={'cn': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png', 'en': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png', 'jp': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png', 'tw': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png'}) REWARD_1_WHITE = Button(area={'cn': (437, 278, 496, 306), 'en': (411, 283, 523, 300), 'jp': (442, 279, 491, 305), 'tw': (441, 280, 490, 306)}, color={'cn': (255, 193, 97), 'en': (255, 212, 150), 'jp': (255, 195, 101), 'tw': (255, 199, 111)}, button={'cn': (437, 278, 496, 306), 'en': (411, 283, 523, 300), 'jp': (442, 279, 491, 305), 'tw': (441, 280, 490, 306)}, file={'cn': './assets/cn/ui_white/REWARD_1_WHITE.png', 'en': './assets/en/ui_white/REWARD_1_WHITE.png', 'jp': './assets/jp/ui_white/REWARD_1_WHITE.png', 'tw': './assets/tw/ui_white/REWARD_1_WHITE.png'}) From 7b9edcaf37a38dd5d1a984f051fbda0a1253eec2 Mon Sep 17 00:00:00 2001 From: whjhs1010203 <26708256+whjhs1010203@users.noreply.github.com> Date: Mon, 20 Oct 2025 23:07:37 +0800 Subject: [PATCH 11/27] delete newline --- module/freebies/mail_white.py | 1 - 1 file changed, 1 deletion(-) diff --git a/module/freebies/mail_white.py b/module/freebies/mail_white.py index 3b475cad2..6d9e42f4a 100644 --- a/module/freebies/mail_white.py +++ b/module/freebies/mail_white.py @@ -257,7 +257,6 @@ class MailWhite(UI): logger.warning('Nothing to claim') return False - # Must using white UI self.ui_ensure(page_main) if self.appear(page_main_white.check_button, offset=(30, 30)): From fc966a45bea9ca037e55dab7ff2d97b6b428bd54 Mon Sep 17 00:00:00 2001 From: dragonheart107 <153553566+dragonheart107@users.noreply.github.com> Date: Sat, 18 Oct 2025 19:33:28 +0200 Subject: [PATCH 12/27] Upd: adjusted EN commission title area --- module/commission/project.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/commission/project.py b/module/commission/project.py index 61aaab4ce..ef6fdc95b 100644 --- a/module/commission/project.py +++ b/module/commission/project.py @@ -115,7 +115,7 @@ class Commission: def commission_parse(self): # Name # This is different from CN, EN has longer names - area = area_offset((176, 23, 420, 53), self.area[0:2]) + area = area_offset((131, 23, 409, 53), self.area[0:2]) button = Button(area=area, color=(), button=area, name='COMMISSION') ocr = Ocr(button, lang='cnocr') self.button = button From 40442df9ffc8676b539f612e406da783457523e6 Mon Sep 17 00:00:00 2001 From: dragonheart107 <153553566+dragonheart107@users.noreply.github.com> Date: Sat, 18 Oct 2025 19:34:22 +0200 Subject: [PATCH 13/27] Fix: revert en commission dictionary changes --- module/commission/project_data.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/commission/project_data.py b/module/commission/project_data.py index a2fa9da19..f3d987a23 100644 --- a/module/commission/project_data.py +++ b/module/commission/project_data.py @@ -18,8 +18,8 @@ dictionary_cn = { # major_comm needs to be after extra_cube, # because `Fleet Cargo Transport` is `extra_cube` and `Cargo Transport I` is major_comm dictionary_en = { - 'daily_resource': ['AILY RESOURCE EXTRACTION'], - 'daily_chip': ['AKENING TACTICAL RESEARCH'], + 'daily_resource': ['DAILY RESOURCE EXTRACTION'], + 'daily_chip': ['AWAKENING TACTICAL RESEARCH'], 'extra_drill': ['SAILING', 'BUOY', 'FRONTIER', 'COASTAL', 'SALING'], 'extra_part': ['VEIN', 'FOREST'], 'extra_cube': ['FLEET ESCORT EXERCISE', 'FLEET EXERCISE', 'FLEET CARGO TRANSPORT', 'FLEET COMBAT EXERCISE'], From d4142afa223813232e7e5e006330a3c39d193939 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 20 Oct 2025 12:51:36 +0800 Subject: [PATCH 14/27] Refactor: Timer class --- module/base/timer.py | 125 +++++++++++++++++++++++---------- module/device/control.py | 2 +- module/exercise/hp_daemon.py | 6 +- module/handler/info_handler.py | 2 +- 4 files changed, 91 insertions(+), 44 deletions(-) diff --git a/module/base/timer.py b/module/base/timer.py index a36182de0..9753dcb68 100644 --- a/module/base/timer.py +++ b/module/base/timer.py @@ -1,16 +1,19 @@ -import time +from time import time, sleep from datetime import datetime, timedelta from functools import wraps def timer(function): + """ + Decorator to time a function, for debug only + """ + @wraps(function) def function_timer(*args, **kwargs): - t0 = time.time() - + start = time() result = function(*args, **kwargs) - t1 = time.time() - print('%s: %s s' % (function.__name__, str(round(t1 - t0, 10)))) + cost = time() - start + print(f'{function.__name__}: {cost:.10f} s') return result return function_timer @@ -72,62 +75,105 @@ def time_range_active(time_range): class Timer: def __init__(self, limit, count=0): """ + Dual timer for time count and access count. + Access count can provide robustness on slow devices where screen shot time cost > timer.limit + Args: - limit (int, float): Timer limit - count (int): Timer reach confirm count. Default to 0. - When using a structure like this, must set a count. - Otherwise it goes wrong, if screenshot time cost greater than limit. - - if self.appear(MAIN_CHECK): - if confirm_timer.reached(): - pass - else: - confirm_timer.reset() - - Also, It's a good idea to set `count`, to make alas run more stable on slow computers. - Expected speed is 0.35 second / screenshot. + limit (int | float): Timer limit + count (int): Timer access count. Default to 0. """ self.limit = limit self.count = count - self._current = 0 - self._reach_count = count + self._start = 0. + self._access = 0 + + @classmethod + def from_seconds(cls, limit, speed=0.5): + """ + Create timer from given seconds + + Args: + limit (int | float): + speed (int | float): Approximate screen shot time cost + if time cost > 0.5s, device is considered slow + """ + count = int(limit / speed) + return cls(limit, count=count) def start(self): - if not self.started(): - self._current = time.time() - self._reach_count = 0 + """ + Start current timer. + If timer not started, reached() always return True. So we can have fast first try on: + + interval = Timer(2) + while 1: + if interval.reached(): + pass + """ + if self._start <= 0: + self._start = time() + self._access = 0 return self def started(self): - return bool(self._current) - - def current(self): """ Returns: - float + bool: """ - if self.started(): - return time.time() - self._current + return self._start > 0 + + def current_time(self): + """ + Returns: + float: + """ + if self._start > 0: + diff = time() - self._start + if diff < 0: + diff = 0. + return diff else: return 0. + def current_count(self): + """ + Returns: + int: + """ + return self._access + + def add_count(self): + self._access += 1 + return self + def reached(self): """ Returns: - bool + bool: """ - self._reach_count += 1 - return time.time() - self._current > self.limit and self._reach_count > self.count + # each reached() call is consider as an access + self._access += 1 + if self._start > 0: + return self._access > self.count and time() - self._start > self.limit + else: + # not started, return True for fast first try + return True def reset(self): - self._current = time.time() - self._reach_count = 0 + """ + Reset the timer as if it just started + """ + self._start = time() + self._access = 0 return self def clear(self): - self._current = 0 - self._reach_count = self.count + """ + Reset the timer as if it never started + """ + self._start = 0. + self._access = self.count return self def reached_and_reset(self): @@ -145,15 +191,16 @@ class Timer: """ Wait until timer reached. """ - diff = self._current + self.limit - time.time() + diff = self._start + self.limit - time() if diff > 0: - time.sleep(diff) + sleep(diff) def show(self): from module.logger import logger logger.info(str(self)) def __str__(self): - return f'Timer(limit={round(self.current(), 3)}/{self.limit}, count={self._reach_count}/{self.count})' + # Timer(limit=2.351/3, count=4/6) + return f'Timer(limit={round(self.current_time(), 3)}/{self.limit}, count={self._access}/{self.count})' __repr__ = __str__ diff --git a/module/device/control.py b/module/device/control.py index 2a793c29d..1224c4547 100644 --- a/module/device/control.py +++ b/module/device/control.py @@ -50,7 +50,7 @@ class Control(Hermit, Minitouch, Scrcpy, MaaTouch, NemuIpc): self.handle_control_check(button) click_timer = Timer(0.1) for _ in range(n): - remain = ensure_time(interval) - click_timer.current() + remain = ensure_time(interval) - click_timer.current_time() if remain > 0: self.sleep(remain) click_timer.reset() diff --git a/module/exercise/hp_daemon.py b/module/exercise/hp_daemon.py index 9461b1df6..eff6288d1 100644 --- a/module/exercise/hp_daemon.py +++ b/module/exercise/hp_daemon.py @@ -43,7 +43,7 @@ class HpDaemon(ModuleBase): return color_bar_percentage( image, area, prev_color=prev_color, starter=starter, reverse=reverse, threshold=threshold) - def _show_hp(self, low_hp_time=0): + def _show_hp(self, low_hp_time=0.): """ Examples: [ 80% - 70%] @@ -86,8 +86,8 @@ class HpDaemon(ModuleBase): if self.defender_hp < 0.01: self.low_hp_confirm_timer.reset() if 0.01 < self.attacker_hp <= self.config.Exercise_LowHpThreshold: - if self.low_hp_confirm_timer.reached() and self.low_hp_confirm_timer.current() < 300: - self._show_hp(self.low_hp_confirm_timer.current()) + if self.low_hp_confirm_timer.reached() and self.low_hp_confirm_timer.current_time() < 300: + self._show_hp(self.low_hp_confirm_timer.current_time()) return True else: return False diff --git a/module/handler/info_handler.py b/module/handler/info_handler.py index 288a5c75f..bb64d52e7 100644 --- a/module/handler/info_handler.py +++ b/module/handler/info_handler.py @@ -169,7 +169,7 @@ class InfoHandler(ModuleBase): # Hot fixes will kill AL if you clicked the confirm button if self._hot_fix_check_wait.reached(): self._hot_fix_check_wait.clear() - if self._hot_fix_check_wait.started() and 3 <= self._hot_fix_check_wait.current() <= 6: + if self._hot_fix_check_wait.started() and 3 <= self._hot_fix_check_wait.current_time() <= 6: if not self.device.app_is_running(): logger.error('Detected hot fixes from game server, game died') raise GameNotRunningError From 8eb8889f15d1a600f10dbb93495cf47e0876b727 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 20 Oct 2025 12:53:28 +0800 Subject: [PATCH 15/27] Refactor: Claim mission rewards --- module/reward/reward.py | 222 ++++++++++++++++++---------------------- 1 file changed, 97 insertions(+), 125 deletions(-) diff --git a/module/reward/reward.py b/module/reward/reward.py index 644d60d94..9a839bf6b 100644 --- a/module/reward/reward.py +++ b/module/reward/reward.py @@ -4,7 +4,6 @@ from module.base.timer import Timer from module.combat.assets import * from module.logger import logger from module.reward.assets import * -from module.ui.assets import MISSION_CHECK from module.ui.navbar import Navbar from module.ui.page import page_main, page_mission, page_reward from module.ui.ui import UI @@ -12,13 +11,12 @@ from module.ui_white.assets import MISSION_NOTICE_WHITE class Reward(UI): - def reward_receive(self, oil, coin, exp, skip_first_screenshot=True): + def reward_receive(self, oil, coin, exp): """ Args: oil (bool): coin (bool): exp (bool): - skip_first_screenshot (bool): Returns: bool: If rewarded. @@ -35,12 +33,7 @@ class Reward(UI): confirm_timer = Timer(1, count=3).start() # Set click interval to 0.3, because game can't respond that fast. click_timer = Timer(0.3) - while 1: - if skip_first_screenshot: - skip_first_screenshot = False - else: - self.device.screenshot() - + for _ in self.loop(): if oil and click_timer.reached() and self.appear_then_click(OIL, offset=(20, 50), interval=60): confirm_timer.reset() click_timer.reset() @@ -61,128 +54,125 @@ class Reward(UI): logger.info('Reward receive end') return True - def _reward_mission_collect(self, interval=1, skip_first_screenshot=True): + def _reward_get_state(self): + if self.appear(MISSION_MULTI, offset=(20, 20)): + return MISSION_MULTI + if self.match_template_color(MISSION_SINGLE, offset=(50, 200)): + return MISSION_SINGLE + if self.appear(MISSION_EMPTY, offset=(20, 20)): + return MISSION_EMPTY + if self.appear(MISSION_UNFINISH, offset=(50, 200)): + return MISSION_UNFINISH + return None + + def _reward_mission_claim_click(self): """ - Streamline handling of mission rewards for - both 'all' and 'weekly' pages - - Args: - interval (int, float): - Configure the interval for assets involved - skip_first_screenshot: - Returns: - bool, if encountered at least 1 GET_ITEMS_* + bool: If claimed + + Pages: + in: page_mission, MISSION_MULTI or MISSION_SINGLE + out: unknown popup """ - # Reset any existing interval for the following assets - self.interval_clear([GET_ITEMS_1, GET_ITEMS_2, - MISSION_MULTI, MISSION_SINGLE, - GET_SHIP]) + clicked = False + click_interval = Timer(1, count=2) + for _ in self.loop(): + if clicked and not self.ui_page_appear(page_mission): + return clicked + if click_interval.reached(): + if self.appear_then_click(MISSION_MULTI, offset=(20, 20)): + click_interval.reset() + clicked = True + continue + if self.match_template_color(MISSION_SINGLE, offset=(50, 200)): + self.device.click(MISSION_SINGLE) + click_interval.reset() + clicked = True + continue - # Basic timers for certain scenarios - exit_timer = Timer(2) - click_timer = Timer(1) - timeout = Timer(10) - exit_timer.start() - timeout.start() - # Record received missions to clear click record - clicked_mission = False + def _reward_mission_claim_receive(self): + """ + Returns: + Button | str: Button object or state string - reward = False - while 1: - if skip_first_screenshot: - skip_first_screenshot = False + Pages: + in: unknown popup + out: page_mission + """ + logger.info('Mission claim receive') + timeout = Timer(2, count=6).start() + for _ in self.loop(): + if self.ui_page_appear(page_mission): + state = self._reward_get_state() + if state: + return state + if timeout.reached(): + logger.warning('Wait mission receive timeout') + return 'timeout' else: - self.device.screenshot() - - for button in [GET_ITEMS_1, GET_ITEMS_2]: - if self.appear_then_click(button, offset=(30, 30), interval=interval): - exit_timer.reset() - timeout.reset() - reward = True - # MISSION_SINGLE -> GET_ITEMS_* means one mission reward received - if clicked_mission: - logger.info('Got items from mission') - self.device.click_record_clear() - clicked_mission = False - continue - - for button in [MISSION_MULTI, MISSION_SINGLE]: - if not click_timer.reached(): - continue - if self.match_template_color(button, offset=(50, 200), interval=interval): - self.device.click(button) - clicked_mission = True - exit_timer.reset() - click_timer.reset() - timeout.reset() - continue - - if not self.ui_page_appear(page_mission): - if self.appear_then_click(GET_SHIP, interval=interval): - exit_timer.reset() - click_timer.reset() - timeout.reset() - continue + timeout.reset() + # click + if self.appear_then_click(GET_ITEMS_1, offset=(30, 30), interval=1): + continue + if self.appear_then_click(GET_ITEMS_2, offset=(30, 30), interval=1): + continue + if self.appear_then_click(GET_SHIP, interval=1): + continue if self.handle_mission_popup_ack(): - exit_timer.reset() - click_timer.reset() - timeout.reset() continue - - # Story if self.handle_vote_popup(): - exit_timer.reset() - click_timer.reset() - timeout.reset() continue - if self.story_skip(): - exit_timer.reset() - click_timer.reset() - timeout.reset() + if self.handle_story_skip(): continue - if self.handle_popup_confirm('MISSION_REWARD'): - exit_timer.reset() - click_timer.reset() - timeout.reset() continue - # End - if reward and exit_timer.reached(): - break - if timeout.reached(): - logger.warning('Wait get items timeout.') - break - - return reward - def _reward_wait_mission_list(self): """ Wait until mission list fully loaded Pages: in: page_mission - out: page_mission, MISSION_MULTI or MISSION_SINGLE or MISSION_UNFINISH + out: page_mission, any mission state, or timeout """ timeout = Timer(1, count=2).start() for _ in self.loop(): + state = self._reward_get_state() + if state: + return state if timeout.reached(): + return 'timeout' + + def _reward_mission_collect(self): + """ + Streamline handling of mission rewards for + both 'all' and 'weekly' pages + + Returns: + Button | str: Last state, Button object or state string + """ + state = self._reward_wait_mission_list() + while 1: + logger.attr('MissionState', state) + self.device.stuck_record_clear() + self.device.click_record_clear() + if state == 'timeout': logger.warning('Reward wait mission list timeout') + return state + if state in [MISSION_EMPTY, MISSION_UNFINISH]: + logger.info('Mission collect finished') break - if self.appear(MISSION_MULTI, offset=(20, 20)): - logger.info(f'mission list: {MISSION_MULTI}') - break - if MISSION_SINGLE.match_luma(self.device.image, offset=(50, 200)): - logger.info(f'mission list: {MISSION_SINGLE}') - break - if self.appear(MISSION_UNFINISH, offset=(20, 20)): - logger.info(f'mission list: {MISSION_UNFINISH}') - break - if self.appear(MISSION_EMPTY, offset=(20, 20)): - logger.info(f'mission list: {MISSION_EMPTY}') - break + elif state in [MISSION_MULTI, MISSION_SINGLE]: + # Clear any existing interval for the following assets + self.interval_clear([GET_ITEMS_1, GET_ITEMS_2, MISSION_MULTI, MISSION_SINGLE, GET_SHIP]) + self._reward_mission_claim_click() + state = self._reward_mission_claim_receive() + continue + else: + logger.warning('Empty mission state, mission collect finished') + + return state def _reward_mission_all(self): """ @@ -192,16 +182,6 @@ class Reward(UI): bool, if handled """ self.reward_side_navbar_ensure(upper=1) - self._reward_wait_mission_list() - - if not self.appear(MISSION_MULTI, offset=(20, 200)) and \ - not self.appear(MISSION_SINGLE, offset=(50, 200)): - logger.info('No MISSION_MULTI or MISSION_SINGLE') - return False - - # Uses default interval to account for - # behavior differences and avoid - # premature exit return self._reward_mission_collect() def _reward_mission_weekly(self): @@ -216,12 +196,7 @@ class Reward(UI): return False self.reward_side_navbar_ensure(upper=5) - self._reward_wait_mission_list() - - # Uses no interval to account for - # behavior differences and avoid - # premature exit - return self._reward_mission_collect(interval=0.2) + return self._reward_mission_collect() def reward_mission_notice(self): """ @@ -263,13 +238,10 @@ class Reward(UI): self.ui_goto(page_mission, skip_first_screenshot=True) - reward = False if daily: - reward |= self._reward_mission_all() + self._reward_mission_all() if weekly: - reward |= self._reward_mission_weekly() - - return reward + self._reward_mission_weekly() @cached_property def _reward_side_navbar(self): From d12bd1598ea2c8552b6efc5c2efd08a807c2a12d Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 22 Oct 2025 01:10:47 +0800 Subject: [PATCH 16/27] Fix: [EN] Handle ocr error "DALY" --- module/commission/project.py | 40 +++++++++++++++--------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/module/commission/project.py b/module/commission/project.py index ef6fdc95b..639befa32 100644 --- a/module/commission/project.py +++ b/module/commission/project.py @@ -39,22 +39,6 @@ class SuffixOcr(Ocr): return image -class TwOcr(Ocr): - def after_process(self, result): - """ - Args: - result (str): '第二行' - - Returns: - str: - """ - # There no letter `艦` in training dataset - result = result.replace('鑑', '艦').replace('盤', '艦') - # 支援土蒙爾島 - result = result.replace('土蒙爾', '土豪爾') - return result - - class Commission: # Button to enter commission start button: Button @@ -119,8 +103,11 @@ class Commission: button = Button(area=area, color=(), button=area, name='COMMISSION') ocr = Ocr(button, lang='cnocr') self.button = button - self.name = ocr.ocr(self.image) - self.genre = self.commission_name_parse(self.name.upper()) + result = ocr.ocr(self.image).upper() + # DALY RESOURCE EXTRACTION -> DAILY RESOURCE EXTRACTION + result = result.replace('DALY', 'DAILY') + self.name = result + self.genre = self.commission_name_parse(self.name) # Suffix ocr = SuffixOcr(button, lang='azur_lane', letter=(255, 255, 255), threshold=128, alphabet='IV') @@ -163,9 +150,10 @@ class Commission: button = Button(area=area, color=(), button=area, name='COMMISSION') ocr = Ocr(button, letter=(201, 201, 201), lang='jp') self.button = button - self.name = ocr.ocr(self.image) + result = ocr.ocr(self.image).upper() # NB装備輸送 -> NYB装備輸送 - self.name = self.name.replace('NB', 'BYB').replace('BW', 'BIW') + result = result.replace('NB', 'BYB').replace('BW', 'BIW') + self.name = result self.genre = self.commission_name_parse(self.name) # Suffix @@ -207,9 +195,14 @@ class Commission: # Name area = area_offset((176, 23, 420, 53), self.area[0:2]) button = Button(area=area, color=(), button=area, name='COMMISSION') - ocr = TwOcr(button, lang='tw', threshold=256) + ocr = Ocr(button, lang='tw', threshold=256) self.button = button - self.name = ocr.ocr(self.image) + result = ocr.ocr(self.image).upper() + # There no letter `艦` in training dataset + result = result.replace('鑑', '艦').replace('盤', '艦') + # 支援土蒙爾島 + result = result.replace('土蒙爾', '土豪爾') + self.name = result self.genre = self.commission_name_parse(self.name) # Suffix @@ -253,7 +246,8 @@ class Commission: button = Button(area=area, color=(), button=area, name='COMMISSION') ocr = Ocr(button, lang='cnocr', threshold=256) self.button = button - self.name = ocr.ocr(self.image) + result = ocr.ocr(self.image).upper() + self.name = result self.genre = self.commission_name_parse(self.name) # Suffix From 01b3dc236990271b7be78418c02b57264f384f7e Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 22 Oct 2025 01:11:33 +0800 Subject: [PATCH 17/27] Opt: [ALAS] handle first screenshot in loop() --- module/base/base.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/module/base/base.py b/module/base/base.py index 293e447e1..eb3a4e8af 100644 --- a/module/base/base.py +++ b/module/base/base.py @@ -146,7 +146,11 @@ class ModuleBase: skip_first = False else: self.device.screenshot() - yield self.device.image + try: + yield self.device.image + except AttributeError: + self.device.screenshot() + yield self.device.image def loop_hierarchy(self, skip_first=True): """ From b315e533115f7f1081b6d11bf2cb9293b71526f4 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 23 Oct 2025 22:34:51 +0800 Subject: [PATCH 18/27] Fix: [EN] Handle ocr error "NVB" --- module/commission/project.py | 1 + 1 file changed, 1 insertion(+) diff --git a/module/commission/project.py b/module/commission/project.py index 639befa32..60d3f1fa4 100644 --- a/module/commission/project.py +++ b/module/commission/project.py @@ -106,6 +106,7 @@ class Commission: result = ocr.ocr(self.image).upper() # DALY RESOURCE EXTRACTION -> DAILY RESOURCE EXTRACTION result = result.replace('DALY', 'DAILY') + result = result.replace('NVB', 'NYB') self.name = result self.genre = self.commission_name_parse(self.name) From 5d18e7cd1f674a71ae5bb2d4ad3889f965639d54 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 23 Oct 2025 22:46:06 +0800 Subject: [PATCH 19/27] =?UTF-8?q?Add:=20Event=20entrance=20of=20Tempesta?= =?UTF-8?q?=20and=20Islas=20de=20Libert=C3=A1d=20(event=5F20251023=5Fcn)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- campaign/Readme.md | 1 + module/config/argument/args.json | 112 +++++++++++++++---------------- module/config/i18n/en-US.json | 1 + module/config/i18n/ja-JP.json | 1 + module/config/i18n/zh-CN.json | 1 + module/config/i18n/zh-TW.json | 1 + 6 files changed, 61 insertions(+), 56 deletions(-) diff --git a/campaign/Readme.md b/campaign/Readme.md index 84da7027a..7a43473b6 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -262,3 +262,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20250919 | event 20250912 cn | A Dance for Amahara Above | - | - | - | 起舞於天原之上 | | 20251009 | coalition 20250626 | The Neon City Investigator | - | - | - | 迷彩都市的尋蹤者 | | 20251016 | event 20230817 cn | The Fool's Scales | 复刻愚者的天平 | The Fool's Scales Rerun | 愚者の天秤(復刻) | - | +| 20251023 | event 20251023 cn | Tempesta and Islas de Libertád | 飓风与自由群岛 | Tempesta and Islas de Libertád | テンペスタと自由群島 | - | diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 49c218fcb..e5096966c 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1643,25 +1643,25 @@ "type": "select", "value": "campaign_main", "option": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ], "display": "hide", "option_cn": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_en": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_jp": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_tw": [ "event_20250912_cn" ], "option_bold": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ] }, "Mode": { @@ -1924,24 +1924,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ], "option_cn": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_en": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_jp": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_tw": [ "event_20250912_cn" ], "option_bold": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ] }, "Mode": { @@ -2319,24 +2319,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ], "option_cn": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_en": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_jp": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_tw": [ "event_20250912_cn" ], "option_bold": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ] }, "Mode": { @@ -4027,24 +4027,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ], "option_cn": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_en": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_jp": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_tw": [ "event_20250912_cn" ], "option_bold": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ] }, "Mode": { @@ -4439,24 +4439,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ], "option_cn": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_en": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_jp": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_tw": [ "event_20250912_cn" ], "option_bold": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ] }, "Mode": { @@ -4851,24 +4851,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ], "option_cn": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_en": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_jp": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_tw": [ "event_20250912_cn" ], "option_bold": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ] }, "Mode": { @@ -5263,24 +5263,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ], "option_cn": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_en": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_jp": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_tw": [ "event_20250912_cn" ], "option_bold": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ] }, "Mode": { @@ -5665,24 +5665,24 @@ "type": "state", "value": "campaign_main", "option": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ], "option_cn": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_en": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_jp": [ - "event_20230817_cn" + "event_20251023_cn" ], "option_tw": [ "event_20250912_cn" ], "option_bold": [ - "event_20230817_cn", - "event_20250912_cn" + "event_20250912_cn", + "event_20251023_cn" ] }, "Mode": { diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 157bc3d01..5769a9cea 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -761,6 +761,7 @@ "event_20250724_cn": "The Alchemist and the Tower of Horizons", "event_20250814_cn": "Secrets of the Abyss", "event_20250912_cn": "A Dance for Amahara Above", + "event_20251023_cn": "Tempesta and Islas de Libertád", "raid_20200624": "Air Raid Drills with Essex Rerun", "raid_20210708": "Cross Wave rerun", "raid_20220127": "Mystery Investigation", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index e227956e7..2159893f3 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -761,6 +761,7 @@ "event_20250724_cn": "錬金術士と天空邂逅の塔", "event_20250814_cn": "淵層界の秘密", "event_20250912_cn": "アマハラに舞い奉れ", + "event_20251023_cn": "テンペスタと自由群島", "raid_20200624": "特別演習超空強襲波(復刻)", "raid_20210708": "交錯する新たな波 (復刻)", "raid_20220127": "秘密事件調査", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 324babfe1..47c895a97 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -761,6 +761,7 @@ "event_20250724_cn": "优米雅的炼金工房", "event_20250814_cn": "奇渊下的秘密", "event_20250912_cn": "起舞于天原之上", + "event_20251023_cn": "飓风与自由群岛", "raid_20200624": "复刻特别演习埃塞克斯级", "raid_20210708": "复刻穿越彼方的水线", "raid_20220127": "演习神秘事件调查", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index ce167ab81..92e4d1ea9 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -761,6 +761,7 @@ "event_20250724_cn": "鍊金術士與天際交會之塔", "event_20250814_cn": "奇淵下的秘密", "event_20250912_cn": "起舞於天原之上", + "event_20251023_cn": "Tempesta and Islas de Libertád", "raid_20200624": "特別演習埃塞克斯級(復刻)", "raid_20210708": "復刻穿越彼方的水線", "raid_20220127": "演習神秘事件調查", From 2cd83c683df3f140ec2a10b6f0d90ad3fce69d7e Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 23 Oct 2025 23:23:36 +0800 Subject: [PATCH 20/27] Opt: [ALAS] Faster RGB565 to RGB888 --- module/device/method/droidcast.py | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/module/device/method/droidcast.py b/module/device/method/droidcast.py index a8fe50d20..bfcceb942 100644 --- a/module/device/method/droidcast.py +++ b/module/device/method/droidcast.py @@ -275,23 +275,16 @@ class DroidCast(Uiautomator2): # b = b.astype(np.uint8) # image = cv2.merge([r, g, b]) - # The same as the code above but costs about 3~4ms instead of 10ms. + # The same as the code above but costs about 2.7ms instead of 16ms. # Note that cv2.convertScaleAbs is 5x fast as cv2.multiply, cv2.add is 8x fast as cv2.convertScaleAbs # Note that cv2.convertScaleAbs includes rounding - r = cv2.bitwise_and(arr, 0b1111100000000000) - r = cv2.convertScaleAbs(r, alpha=0.00390625) - m = cv2.convertScaleAbs(r, alpha=0.03125) - cv2.add(r, m, dst=r) - - g = cv2.bitwise_and(arr, 0b0000011111100000) - g = cv2.convertScaleAbs(g, alpha=0.125) - m = cv2.convertScaleAbs(g, alpha=0.015625, dst=m) - cv2.add(g, m, dst=g) - - b = cv2.bitwise_and(arr, 0b0000000000011111) - b = cv2.convertScaleAbs(b, alpha=8) - m = cv2.convertScaleAbs(b, alpha=0.03125, dst=m) - cv2.add(b, m, dst=b) + tmp = np.empty_like(arr) + cv2.bitwise_and(arr, 0b1111100000000000, dst=tmp) + r = cv2.convertScaleAbs(tmp, alpha=0.0040283203125) # 0.00390625 * 1.03125 + cv2.bitwise_and(arr, 0b0000011111100000, dst=tmp) + g = cv2.convertScaleAbs(tmp, alpha=0.126953125) # 0.125 * 1.015625 + cv2.bitwise_and(arr, 0b0000000000011111, dst=tmp) + b = cv2.convertScaleAbs(tmp, alpha=8.25) # 8 * 1.03125 image = cv2.merge([r, g, b]) From 6abe794e37d9fdf22b231efb2d3e7a59c916e9a5 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 23 Oct 2025 23:26:52 +0800 Subject: [PATCH 21/27] Fix: [ALAS] MuMuPlayer12 failing to close as expected --- module/device/platform/emulator_windows.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/device/platform/emulator_windows.py b/module/device/platform/emulator_windows.py index 84d6e2bfc..78a5b6b0c 100644 --- a/module/device/platform/emulator_windows.py +++ b/module/device/platform/emulator_windows.py @@ -169,7 +169,7 @@ class Emulator(EmulatorBase): if 'MuMuPlayer.exe' in exe: return exe.replace('MuMuPlayer.exe', 'MuMuManager.exe') # MuMuPlayer12 5.0 - elif 'MuMuPlayer.exe' in exe: + elif 'MuMuNxMain.exe' in exe: return exe.replace('MuMuNxMain.exe', 'MuMuManager.exe') elif 'LDPlayer.exe' in exe: return exe.replace('LDPlayer.exe', 'ldconsole.exe') From 8d040e9345e0f4724be16ab4d20c212d8d5b0e83 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 24 Oct 2025 00:14:04 +0800 Subject: [PATCH 22/27] Opt: Reuse screenshots in combat_status --- module/combat/auto_search_combat.py | 32 +++++++---------------------- module/combat/combat.py | 12 +++-------- module/event_hospital/combat.py | 6 +----- module/os_combat/combat.py | 6 +----- module/raid/raid.py | 6 +----- 5 files changed, 13 insertions(+), 49 deletions(-) diff --git a/module/combat/auto_search_combat.py b/module/combat/auto_search_combat.py index 6d9643027..5dbf43393 100644 --- a/module/combat/auto_search_combat.py +++ b/module/combat/auto_search_combat.py @@ -39,11 +39,7 @@ class AutoSearchCombat(MapOperation, Combat, CampaignStatus): out: is_combat_loading """ self.interval_reset(AUTO_SEARCH_MAP_OPTION_ON) - while 1: - if skip_first_screenshot: - skip_first_screenshot = False - else: - self.device.screenshot() + for _ in self.loop(): if self.handle_auto_search_map_option(): self.interval_reset(AUTO_SEARCH_MAP_OPTION_ON) @@ -152,11 +148,7 @@ class AutoSearchCombat(MapOperation, Combat, CampaignStatus): out: in_map() """ timeout = Timer(3, count=6).start() - while 1: - if skip_first_screenshot: - skip_first_screenshot = False - else: - self.device.screenshot() + for _ in self.loop(): if self.is_in_map(): break @@ -175,11 +167,7 @@ class AutoSearchCombat(MapOperation, Combat, CampaignStatus): checked_fleet = False checked_oil = False checked_coin = False - while 1: - if skip_first_screenshot: - skip_first_screenshot = False - else: - self.device.screenshot() + for _ in self.loop(): if self.is_auto_search_running(): checked_fleet = self.auto_search_watch_fleet(checked_fleet) @@ -225,8 +213,7 @@ class AutoSearchCombat(MapOperation, Combat, CampaignStatus): self.device.stuck_record_clear() self.device.click_record_clear() self.device.screenshot_interval_set('combat') - while 1: - self.device.screenshot() + for _ in self.loop(): if self.handle_combat_automation_confirm(): continue @@ -256,8 +243,7 @@ class AutoSearchCombat(MapOperation, Combat, CampaignStatus): self.emotion.reduce(fleet_index) auto = self.config.Fleet_Fleet1Mode if fleet_index == 1 else self.config.Fleet_Fleet2Mode - while 1: - self.device.screenshot() + for _ in self.loop(): if self.handle_submarine_call(submarine_mode): continue @@ -296,7 +282,7 @@ class AutoSearchCombat(MapOperation, Combat, CampaignStatus): self.device.screenshot_interval_set() break - def auto_search_combat_status(self, skip_first_screenshot=True): + def auto_search_combat_status(self): """ Pages: in: any @@ -307,11 +293,7 @@ class AutoSearchCombat(MapOperation, Combat, CampaignStatus): self.device.click_record_clear() exp_info = False # This is for the white screen bug in game - while 1: - if skip_first_screenshot: - skip_first_screenshot = False - else: - self.device.screenshot() + for _ in self.loop(): # End if self.is_auto_search_running(): diff --git a/module/combat/combat.py b/module/combat/combat.py index 384419a5a..54ba73969 100644 --- a/module/combat/combat.py +++ b/module/combat/combat.py @@ -197,11 +197,7 @@ class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatMan if balance_hp: self.hp_balance() - while 1: - if skip_first_screenshot: - skip_first_screenshot = False - else: - self.device.screenshot() + for _ in self.loop(): if self.appear(BATTLE_PREPARATION, offset=(20, 20)): if self.handle_combat_automation_set(auto=auto == 'combat_auto'): @@ -328,8 +324,7 @@ class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatMan confirm_timer = Timer(10) confirm_timer.start() - while 1: - self.device.screenshot() + for _ in self.loop(): if not confirm_timer.reached(): if self.handle_combat_automation_confirm(): @@ -518,8 +513,7 @@ class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatMan self.device.click_record_clear() battle_status = False exp_info = False # This is for the white screen bug in game - while 1: - self.device.screenshot() + for _ in self.loop(): # Expected end if isinstance(expected_end, str): diff --git a/module/event_hospital/combat.py b/module/event_hospital/combat.py index 0d1b27590..370412ca5 100644 --- a/module/event_hospital/combat.py +++ b/module/event_hospital/combat.py @@ -63,11 +63,7 @@ class HospitalCombat(Combat, HospitalUI, CampaignEvent): self.handle_task_balancer() return True - while 1: - if skip_first_screenshot: - skip_first_screenshot = False - else: - self.device.screenshot() + for _ in self.loop(): if self.appear(BATTLE_PREPARATION, offset=(30, 20)): if self.handle_combat_automation_set(auto=auto == 'combat_auto'): diff --git a/module/os_combat/combat.py b/module/os_combat/combat.py index ae9478c55..fa5fdef38 100644 --- a/module/os_combat/combat.py +++ b/module/os_combat/combat.py @@ -49,11 +49,7 @@ class Combat(Combat_, MapEventHandler): # if balance_hp: # self.hp_balance() - while 1: - if skip_first_screenshot: - skip_first_screenshot = False - else: - self.device.screenshot() + for _ in self.loop(): if self.appear(BATTLE_PREPARATION): if self.handle_combat_automation_set(auto=auto == 'combat_auto'): diff --git a/module/raid/raid.py b/module/raid/raid.py index 3a4b0a02f..47f9e7175 100644 --- a/module/raid/raid.py +++ b/module/raid/raid.py @@ -218,11 +218,7 @@ class Raid(MapOperation, RaidCombat, CampaignEvent): self.handle_task_balancer() return True - while 1: - if skip_first_screenshot: - skip_first_screenshot = False - else: - self.device.screenshot() + for _ in self.loop(): if self.appear(BATTLE_PREPARATION, offset=(30, 20)): if self.handle_combat_automation_set(auto=auto == 'combat_auto'): From ebe5ca794b73caa4feb2b7c3a778daaae6b88349 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 24 Oct 2025 00:48:42 +0800 Subject: [PATCH 23/27] Fix: [TW] FLEET_2_IN_USE should not intersect with info_bar --- assets/cn/map/FLEET_2_IN_USE.png | Bin 8269 -> 5620 bytes assets/en/map/FLEET_2_IN_USE.png | Bin 12414 -> 6525 bytes assets/jp/map/FLEET_2_IN_USE.png | Bin 8269 -> 5620 bytes assets/tw/map/FLEET_2_IN_USE.png | Bin 13960 -> 7565 bytes module/map/assets.py | 2 +- 5 files changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/cn/map/FLEET_2_IN_USE.png b/assets/cn/map/FLEET_2_IN_USE.png index 56cb0e27d56454f0f9c870982d22e4b8dc2959c9..8e24f83eea5409b33b5837229de82611e0f077fe 100644 GIT binary patch delta 3039 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 delta 5715 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 diff --git a/assets/en/map/FLEET_2_IN_USE.png b/assets/en/map/FLEET_2_IN_USE.png index 2d45071e59d969e85c4f5003f06b6630157941dc..4ef1512ec536d20f89f996740d07f074e2cc63ab 100644 GIT binary patch literal 6525 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 Zq|m+JKbjvK6%7Mmcg5+?noD;d{y*pg5aa*= diff --git a/assets/jp/map/FLEET_2_IN_USE.png b/assets/jp/map/FLEET_2_IN_USE.png index 56cb0e27d56454f0f9c870982d22e4b8dc2959c9..8e24f83eea5409b33b5837229de82611e0f077fe 100644 GIT binary patch delta 3039 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 delta 5715 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 diff --git a/assets/tw/map/FLEET_2_IN_USE.png b/assets/tw/map/FLEET_2_IN_USE.png index 776c625a70f9317591ecaa03d347a26930e7c310..4c12a8fa5beb8c0a852eb25cbe70f00e908d9f42 100644 GIT binary patch literal 7565 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 literal 13960 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 diff --git a/module/map/assets.py b/module/map/assets.py index 5be0ac53c..ea5bfd51b 100644 --- a/module/map/assets.py +++ b/module/map/assets.py @@ -15,7 +15,7 @@ FLEET_2_BAR = Button(area={'cn': (1012, 383, 1183, 628), 'en': (994, 384, 1165, FLEET_2_CHOOSE = Button(area={'cn': (1022, 306, 1083, 365), 'en': (1003, 307, 1063, 365), 'jp': (1021, 306, 1082, 365), 'tw': (1019, 304, 1084, 365)}, color={'cn': (202, 163, 104), 'en': (191, 144, 84), 'jp': (201, 161, 102), 'tw': (198, 157, 101)}, button={'cn': (1022, 306, 1083, 365), 'en': (1003, 307, 1063, 365), 'jp': (1021, 306, 1082, 365), 'tw': (1019, 304, 1084, 365)}, file={'cn': './assets/cn/map/FLEET_2_CHOOSE.png', 'en': './assets/en/map/FLEET_2_CHOOSE.png', 'jp': './assets/jp/map/FLEET_2_CHOOSE.png', 'tw': './assets/tw/map/FLEET_2_CHOOSE.png'}) FLEET_2_CLEAR = Button(area={'cn': (1109, 306, 1169, 365), 'en': (1092, 307, 1152, 365), 'jp': (1113, 306, 1169, 365), 'tw': (1109, 303, 1175, 365)}, color={'cn': (155, 158, 159), 'en': (140, 141, 143), 'jp': (151, 153, 154), 'tw': (151, 152, 154)}, button={'cn': (1109, 306, 1169, 365), 'en': (1092, 307, 1152, 365), 'jp': (1113, 306, 1169, 365), 'tw': (1109, 303, 1175, 365)}, file={'cn': './assets/cn/map/FLEET_2_CLEAR.png', 'en': './assets/en/map/FLEET_2_CLEAR.png', 'jp': './assets/jp/map/FLEET_2_CLEAR.png', 'tw': './assets/tw/map/FLEET_2_CLEAR.png'}) FLEET_2_HARD_SATIESFIED = Button(area={'cn': (208, 372, 361, 401), 'en': (188, 378, 328, 402), 'jp': (208, 372, 361, 401), 'tw': (215, 377, 306, 400)}, color={'cn': (75, 54, 43), 'en': (97, 88, 78), 'jp': (75, 54, 43), 'tw': (83, 68, 48)}, button={'cn': (208, 372, 361, 401), 'en': (188, 378, 328, 402), 'jp': (208, 372, 361, 401), 'tw': (215, 377, 306, 400)}, file={'cn': './assets/cn/map/FLEET_2_HARD_SATIESFIED.png', 'en': './assets/en/map/FLEET_2_HARD_SATIESFIED.png', 'jp': './assets/jp/map/FLEET_2_HARD_SATIESFIED.png', 'tw': './assets/tw/map/FLEET_2_HARD_SATIESFIED.png'}) -FLEET_2_IN_USE = Button(area={'cn': (391, 351, 475, 374), 'en': (374, 352, 453, 373), 'jp': (391, 351, 475, 374), 'tw': (393, 338, 473, 373)}, color={'cn': (182, 165, 200), 'en': (151, 152, 162), 'jp': (182, 165, 200), 'tw': (140, 116, 113)}, button={'cn': (391, 351, 475, 374), 'en': (374, 352, 453, 373), 'jp': (391, 351, 475, 374), 'tw': (393, 338, 473, 373)}, file={'cn': './assets/cn/map/FLEET_2_IN_USE.png', 'en': './assets/en/map/FLEET_2_IN_USE.png', 'jp': './assets/jp/map/FLEET_2_IN_USE.png', 'tw': './assets/tw/map/FLEET_2_IN_USE.png'}) +FLEET_2_IN_USE = Button(area={'cn': (391, 351, 475, 374), 'en': (374, 352, 453, 373), 'jp': (391, 351, 475, 374), 'tw': (393, 352, 473, 373)}, color={'cn': (182, 165, 200), 'en': (151, 152, 162), 'jp': (182, 165, 200), 'tw': (120, 96, 97)}, button={'cn': (391, 351, 475, 374), 'en': (374, 352, 453, 373), 'jp': (391, 351, 475, 374), 'tw': (393, 352, 473, 373)}, file={'cn': './assets/cn/map/FLEET_2_IN_USE.png', 'en': './assets/en/map/FLEET_2_IN_USE.png', 'jp': './assets/jp/map/FLEET_2_IN_USE.png', 'tw': './assets/tw/map/FLEET_2_IN_USE.png'}) FLEET_NUM_1 = Button(area={'cn': (213, 76, 224, 101), 'en': (213, 76, 224, 101), 'jp': (213, 76, 224, 101), 'tw': (213, 76, 224, 101)}, color={'cn': (51, 143, 186), 'en': (51, 143, 186), 'jp': (51, 143, 186), 'tw': (51, 143, 186)}, button={'cn': (213, 76, 224, 101), 'en': (213, 76, 224, 101), 'jp': (213, 76, 224, 101), 'tw': (213, 76, 224, 101)}, file={'cn': './assets/cn/map/FLEET_NUM_1.png', 'en': './assets/en/map/FLEET_NUM_1.png', 'jp': './assets/jp/map/FLEET_NUM_1.png', 'tw': './assets/tw/map/FLEET_NUM_1.png'}) FLEET_NUM_2 = Button(area={'cn': (212, 75, 226, 101), 'en': (212, 75, 226, 101), 'jp': (212, 75, 226, 101), 'tw': (212, 75, 226, 101)}, color={'cn': (52, 150, 194), 'en': (52, 150, 194), 'jp': (52, 150, 194), 'tw': (52, 150, 194)}, button={'cn': (212, 75, 226, 101), 'en': (212, 75, 226, 101), 'jp': (212, 75, 226, 101), 'tw': (212, 75, 226, 101)}, file={'cn': './assets/cn/map/FLEET_NUM_2.png', 'en': './assets/en/map/FLEET_NUM_2.png', 'jp': './assets/jp/map/FLEET_NUM_2.png', 'tw': './assets/tw/map/FLEET_NUM_2.png'}) FLEET_PREPARATION = Button(area={'cn': (1013, 558, 1141, 588), 'en': (1048, 569, 1086, 595), 'jp': (1046, 558, 1107, 587), 'tw': (1014, 557, 1142, 588)}, color={'cn': (242, 211, 160), 'en': (241, 201, 148), 'jp': (241, 205, 151), 'tw': (242, 208, 157)}, button={'cn': (980, 549, 1181, 612), 'en': (988, 556, 1145, 606), 'jp': (983, 549, 1185, 612), 'tw': (980, 548, 1180, 612)}, file={'cn': './assets/cn/map/FLEET_PREPARATION.png', 'en': './assets/en/map/FLEET_PREPARATION.png', 'jp': './assets/jp/map/FLEET_PREPARATION.png', 'tw': './assets/tw/map/FLEET_PREPARATION.png'}) From 767f13ae620271f59dba0550ccd65e4999e4f378 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 24 Oct 2025 00:52:46 +0800 Subject: [PATCH 24/27] Add: Chapter T --- campaign/event_20251023_cn/campaign_base.py | 19 +++++ campaign/event_20251023_cn/t1.py | 95 +++++++++++++++++++++ campaign/event_20251023_cn/t2.py | 81 ++++++++++++++++++ campaign/event_20251023_cn/t3.py | 79 +++++++++++++++++ campaign/event_20251023_cn/t4.py | 78 +++++++++++++++++ campaign/event_20251023_cn/t5.py | 93 ++++++++++++++++++++ campaign/event_20251023_cn/t6.py | 88 +++++++++++++++++++ module/campaign/run.py | 2 + 8 files changed, 535 insertions(+) create mode 100644 campaign/event_20251023_cn/campaign_base.py create mode 100644 campaign/event_20251023_cn/t1.py create mode 100644 campaign/event_20251023_cn/t2.py create mode 100644 campaign/event_20251023_cn/t3.py create mode 100644 campaign/event_20251023_cn/t4.py create mode 100644 campaign/event_20251023_cn/t5.py create mode 100644 campaign/event_20251023_cn/t6.py diff --git a/campaign/event_20251023_cn/campaign_base.py b/campaign/event_20251023_cn/campaign_base.py new file mode 100644 index 000000000..07d88b8b2 --- /dev/null +++ b/campaign/event_20251023_cn/campaign_base.py @@ -0,0 +1,19 @@ +from module.campaign.campaign_base import CampaignBase as CampaignBase_ +from module.logger import logger + + +class CampaignBase(CampaignBase_): + def campaign_set_chapter_20241219(self, chapter, stage, mode='combat'): + if self.config.MAP_CHAPTER_SWITCH_20241219: + if chapter in ['t']: + self.ui_goto_sp() + self.campaign_ensure_mode_20241219('combat') + if stage in ['1', '2', '3']: + self.campaign_ensure_aside_20241219('part1') + elif stage in ['4', '5', '6']: + self.campaign_ensure_aside_20241219('part2') + else: + logger.warning(f'Stage {chapter}{stage} is not in event_20241024') + self.campaign_ensure_chapter(chapter) + return True + return super().campaign_set_chapter_20241219(chapter, stage, mode) diff --git a/campaign/event_20251023_cn/t1.py b/campaign/event_20251023_cn/t1.py new file mode 100644 index 000000000..e11483e1b --- /dev/null +++ b/campaign/event_20251023_cn/t1.py @@ -0,0 +1,95 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +MAP = CampaignMap('T1') +MAP.shape = 'I8' +MAP.camera_data = ['D2', 'D5', 'E2', 'E5'] +MAP.camera_data_spawn_point = ['D5'] +MAP.map_data = """ + -- -- ME -- ++ -- -- ++ ++ + ++ Me -- -- Me -- MB ++ ++ + ++ -- __ -- -- -- -- MB -- + SP -- -- MS ++ ME -- -- -- + SP -- -- MS ++ ME -- ME -- + -- -- -- -- -- -- ++ -- -- + ME -- Me -- ME -- -- ME -- + ++ -- ++ ++ ++ -- -- ++ -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 1}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = [] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_CHAPTER_SWITCH_20241219 = True + STAGE_ENTRANCE = ['half', '20240725'] + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 17), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 17, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + HOMO_EDGE_COLOR_RANGE = (0, 17) + HOMO_EDGE_HOUGHLINES_THRESHOLD = 210 + MAP_SIREN_HAS_BOSS_ICON_SMALL = True + MAP_SWIPE_MULTIPLY = (1.089, 1.109) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.053, 1.072) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.022, 1.041) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/event_20251023_cn/t2.py b/campaign/event_20251023_cn/t2.py new file mode 100644 index 000000000..0e43eee70 --- /dev/null +++ b/campaign/event_20251023_cn/t2.py @@ -0,0 +1,81 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .t1 import Config as ConfigBase + +MAP = CampaignMap('T2') +MAP.shape = 'I8' +MAP.camera_data = ['D2', 'D6', 'F2', 'F6'] +MAP.camera_data_spawn_point = ['D2'] +MAP.map_data = """ + ++ -- SP -- -- -- ++ -- -- + ++ SP -- -- MS -- ++ -- -- + -- -- -- MS -- __ Me -- ++ + -- -- ++ ++ Me -- -- -- ME + ++ MS ++ ++ -- -- Me -- -- + ME -- -- ME -- ME ++ ++ ME + -- ME -- -- -- -- MB ++ -- + ++ ++ ++ ME -- ME -- -- -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 1}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = [] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + # topleft is spawn points + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'top-right' + MAP_SWIPE_MULTIPLY = (1.255, 1.279) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.214, 1.236) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.179, 1.200) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/event_20251023_cn/t3.py b/campaign/event_20251023_cn/t3.py new file mode 100644 index 000000000..bd45283b9 --- /dev/null +++ b/campaign/event_20251023_cn/t3.py @@ -0,0 +1,79 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .t1 import Config as ConfigBase + +MAP = CampaignMap('T3') +MAP.shape = 'J8' +MAP.camera_data = ['D3', 'D5', 'G3', 'G5'] +MAP.camera_data_spawn_point = ['G5', 'D5'] +MAP.map_data = """ + -- -- ++ -- -- -- -- -- -- -- + -- ME ++ Me ++ ++ Me ++ ++ ++ + ME -- -- -- ++ ++ -- ME -- ME + -- ME ++ __ MS MS __ -- Me -- + -- -- -- MS MB MB MS -- -- ++ + ++ ME -- -- -- -- -- -- -- ME + -- -- ++ ++ SP SP ++ ++ ME -- + -- -- ++ ++ -- -- ++ ++ -- -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4}, + {'battle': 5, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = [] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom' + # swipe multiply same as T1 + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/event_20251023_cn/t4.py b/campaign/event_20251023_cn/t4.py new file mode 100644 index 000000000..671bddcf9 --- /dev/null +++ b/campaign/event_20251023_cn/t4.py @@ -0,0 +1,78 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .t1 import Config as ConfigBase + +MAP = CampaignMap('T4') +MAP.shape = 'J8' +MAP.camera_data = ['D3', 'D6', 'G3', 'G6'] +MAP.camera_data_spawn_point = ['D3'] +MAP.map_data = """ + -- -- ++ -- -- -- -- -- -- -- + -- ME ++ Me ++ ++ Me ++ ++ ++ + ME -- -- -- ++ ++ -- ME -- ME + -- ME ++ -- SP SP -- -- Me -- + -- -- -- -- -- -- -- -- -- ++ + ++ ME -- MS __ __ MS -- -- ME + -- -- ++ ++ MS MS ++ ++ ME -- + -- -- ++ ++ MB MB ++ ++ -- -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = [] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + # swipe multiply same as T1 + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/event_20251023_cn/t5.py b/campaign/event_20251023_cn/t5.py new file mode 100644 index 000000000..ac8c46d7c --- /dev/null +++ b/campaign/event_20251023_cn/t5.py @@ -0,0 +1,93 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .t1 import Config as ConfigBase + +MAP = CampaignMap('T5') +MAP.shape = 'H10' +MAP.camera_data = ['D4', 'D7', 'E4', 'E7'] +MAP.camera_data_spawn_point = ['D7'] +MAP.map_data = """ + -- -- ++ ++ -- -- -- ++ + -- ++ ++ ++ ME -- MB -- + -- ME -- -- -- -- -- -- + ME -- -- ME -- ME ME -- + ++ MS MS ++ -- ++ ++ -- + ++ -- -- MS -- Me ++ ME + ME -- -- -- __ -- ME -- + -- SP SP -- -- -- -- -- + -- ++ ++ -- Me -- Me -- + -- ++ ++ -- ++ ++ ++ -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'battle': 1, 'enemy': 2, 'siren': 1}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5}, + {'battle': 6, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, \ +A2, B2, C2, D2, E2, F2, G2, H2, \ +A3, B3, C3, D3, E3, F3, G3, H3, \ +A4, B4, C4, D4, E4, F4, G4, H4, \ +A5, B5, C5, D5, E5, F5, G5, H5, \ +A6, B6, C6, D6, E6, F6, G6, H6, \ +A7, B7, C7, D7, E7, F7, G7, H7, \ +A8, B8, C8, D8, E8, F8, G8, H8, \ +A9, B9, C9, D9, E9, F9, G9, H9, \ +A10, B10, C10, D10, E10, F10, G10, H10, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = [] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + # swipe multiply same as T1 + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_6(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/event_20251023_cn/t6.py b/campaign/event_20251023_cn/t6.py new file mode 100644 index 000000000..b08e8de01 --- /dev/null +++ b/campaign/event_20251023_cn/t6.py @@ -0,0 +1,88 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .t1 import Config as ConfigBase + +MAP = CampaignMap('T6') +MAP.shape = 'K7' +MAP.camera_data = ['E4', 'H4'] +MAP.camera_data_spawn_point = ['D4'] +MAP.map_data = """ + ++ ++ -- -- ++ -- -- -- -- -- ++ + ++ ++ -- MS ++ Me ++ ++ ++ Me -- + -- SP -- -- MS -- ME ME ME -- ME + -- -- -- __ MB -- -- -- -- -- ++ + -- SP -- -- MS -- ME ME ME -- ME + ++ ++ -- MS ++ Me ++ ++ ++ Me -- + ++ ++ -- -- ++ -- -- -- -- -- ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'battle': 1, 'enemy': 2, 'siren': 1}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5}, + {'battle': 6, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = [] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + # Big boss at the middle + MAP_SWIPE_PREDICT_WITH_CURRENT_FLEET = True + MAP_SWIPE_MULTIPLY = (1.171, 1.193) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.132, 1.153) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.099, 1.119) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_6(self): + return self.fleet_boss.clear_boss() diff --git a/module/campaign/run.py b/module/campaign/run.py index 39ce6204b..ad3251c54 100644 --- a/module/campaign/run.py +++ b/module/campaign/run.py @@ -218,6 +218,7 @@ class CampaignRun(CampaignEvent): 'event_20250424_cn', 'event_20250724_cn', 'event_20250814_cn', + 'event_20251023_cn', 'war_archives_20231026_cn', ]: name = convert.get(name, name) @@ -252,6 +253,7 @@ class CampaignRun(CampaignEvent): 'event_20250424_cn', 'event_20250724_cn', 'event_20250814_cn', + 'event_20251023_cn', 'war_archives_20231026_cn', ]: name = convert.get(name, name) From 193a798d6bf0452a0ae5843a26ef23d05cfd6e24 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 24 Oct 2025 01:04:39 +0800 Subject: [PATCH 25/27] Add: Chapter SP --- campaign/event_20251023_cn/campaign_base.py | 6 + campaign/event_20251023_cn/sp.py | 120 ++++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 campaign/event_20251023_cn/sp.py diff --git a/campaign/event_20251023_cn/campaign_base.py b/campaign/event_20251023_cn/campaign_base.py index 07d88b8b2..835eafc55 100644 --- a/campaign/event_20251023_cn/campaign_base.py +++ b/campaign/event_20251023_cn/campaign_base.py @@ -16,4 +16,10 @@ class CampaignBase(CampaignBase_): logger.warning(f'Stage {chapter}{stage} is not in event_20241024') self.campaign_ensure_chapter(chapter) return True + if chapter in ['ex_sp']: + self.ui_goto_sp() + self.campaign_ensure_mode_20241219('combat') + self.campaign_ensure_aside_20241219('sp') + self.campaign_ensure_chapter(chapter) + return True return super().campaign_set_chapter_20241219(chapter, stage, mode) diff --git a/campaign/event_20251023_cn/sp.py b/campaign/event_20251023_cn/sp.py new file mode 100644 index 000000000..72867a35c --- /dev/null +++ b/campaign/event_20251023_cn/sp.py @@ -0,0 +1,120 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +MAP = CampaignMap('SP') +MAP.shape = 'I9' +MAP.camera_data = ['E3', 'E6', 'F3', 'F6'] +MAP.camera_data_spawn_point = ['F3', 'F6'] +MAP.map_data = """ + ++ ++ -- ++ ++ ++ -- ++ ++ + ++ ++ -- ME -- ME -- ++ ++ + ++ ME -- -- -- -- -- -- ++ + -- -- -- ME -- MS -- -- SP + -- MB -- -- ++ -- MS __ -- + -- -- -- ME -- MS -- -- SP + ++ ME -- -- -- -- -- -- ++ + ++ ++ -- ME -- ME -- ++ ++ + ++ ++ -- ++ ++ ++ -- ++ ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 8, 'siren': 3}, + {'battle': 1}, + {'battle': 2}, + {'battle': 3}, + {'battle': 4}, + {'battle': 5}, + {'battle': 6}, + {'battle': 7, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ +A9, B9, C9, D9, E9, F9, G9, H9, I9, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = [] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = False + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = False + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + MAP_IS_ONE_TIME_STAGE = True + MAP_CHAPTER_SWITCH_20241219 = True + STAGE_ENTRANCE = ['half', '20240725'] + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 17), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 17, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + HOMO_EDGE_COLOR_RANGE = (0, 17) + HOMO_EDGE_HOUGHLINES_THRESHOLD = 210 + # too many islands on top + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom-right' + MAP_SWIPE_MULTIPLY = (1.115, 1.136) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.078, 1.098) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.047, 1.065) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def map_data_init(self, map_): + super().map_data_init(map_) + F4.is_siren = True + F6.is_siren = True + G5.is_siren = True + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=2): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_7(self): + return self.fleet_boss.clear_boss() From b56ab2d55525448ba635d7ff9feb252caa440a72 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 24 Oct 2025 01:11:52 +0800 Subject: [PATCH 26/27] Fix: Add W15 spesific FLEET_2_IN_USE that does not intersect with info_bar --- assets/cn/map/FLEET_2_IN_USE_W15.png | Bin 0 -> 9419 bytes assets/en/map/FLEET_2_IN_USE_W15.png | Bin 0 -> 9420 bytes assets/jp/map/FLEET_2_IN_USE.png | Bin 5620 -> 0 bytes assets/tw/map/FLEET_2_IN_USE.png | Bin 7565 -> 0 bytes module/map/assets.py | 3 ++- module/map/map_fleet_preparation.py | 30 ++++++++++++++++----------- 6 files changed, 20 insertions(+), 13 deletions(-) create mode 100644 assets/cn/map/FLEET_2_IN_USE_W15.png create mode 100644 assets/en/map/FLEET_2_IN_USE_W15.png delete mode 100644 assets/jp/map/FLEET_2_IN_USE.png delete mode 100644 assets/tw/map/FLEET_2_IN_USE.png diff --git a/assets/cn/map/FLEET_2_IN_USE_W15.png b/assets/cn/map/FLEET_2_IN_USE_W15.png new file mode 100644 index 0000000000000000000000000000000000000000..70a50d3f3716d07d0a080d87cf2bbea83aafd0d3 GIT binary patch literal 9419 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 Q|M|wr-t7|Mw;T8VAF_(Dod5s; literal 0 HcmV?d00001 diff --git a/assets/jp/map/FLEET_2_IN_USE.png b/assets/jp/map/FLEET_2_IN_USE.png deleted file mode 100644 index 8e24f83eea5409b33b5837229de82611e0f077fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5620 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 diff --git a/module/map/assets.py b/module/map/assets.py index ea5bfd51b..f74f86bee 100644 --- a/module/map/assets.py +++ b/module/map/assets.py @@ -15,7 +15,8 @@ FLEET_2_BAR = Button(area={'cn': (1012, 383, 1183, 628), 'en': (994, 384, 1165, FLEET_2_CHOOSE = Button(area={'cn': (1022, 306, 1083, 365), 'en': (1003, 307, 1063, 365), 'jp': (1021, 306, 1082, 365), 'tw': (1019, 304, 1084, 365)}, color={'cn': (202, 163, 104), 'en': (191, 144, 84), 'jp': (201, 161, 102), 'tw': (198, 157, 101)}, button={'cn': (1022, 306, 1083, 365), 'en': (1003, 307, 1063, 365), 'jp': (1021, 306, 1082, 365), 'tw': (1019, 304, 1084, 365)}, file={'cn': './assets/cn/map/FLEET_2_CHOOSE.png', 'en': './assets/en/map/FLEET_2_CHOOSE.png', 'jp': './assets/jp/map/FLEET_2_CHOOSE.png', 'tw': './assets/tw/map/FLEET_2_CHOOSE.png'}) FLEET_2_CLEAR = Button(area={'cn': (1109, 306, 1169, 365), 'en': (1092, 307, 1152, 365), 'jp': (1113, 306, 1169, 365), 'tw': (1109, 303, 1175, 365)}, color={'cn': (155, 158, 159), 'en': (140, 141, 143), 'jp': (151, 153, 154), 'tw': (151, 152, 154)}, button={'cn': (1109, 306, 1169, 365), 'en': (1092, 307, 1152, 365), 'jp': (1113, 306, 1169, 365), 'tw': (1109, 303, 1175, 365)}, file={'cn': './assets/cn/map/FLEET_2_CLEAR.png', 'en': './assets/en/map/FLEET_2_CLEAR.png', 'jp': './assets/jp/map/FLEET_2_CLEAR.png', 'tw': './assets/tw/map/FLEET_2_CLEAR.png'}) FLEET_2_HARD_SATIESFIED = Button(area={'cn': (208, 372, 361, 401), 'en': (188, 378, 328, 402), 'jp': (208, 372, 361, 401), 'tw': (215, 377, 306, 400)}, color={'cn': (75, 54, 43), 'en': (97, 88, 78), 'jp': (75, 54, 43), 'tw': (83, 68, 48)}, button={'cn': (208, 372, 361, 401), 'en': (188, 378, 328, 402), 'jp': (208, 372, 361, 401), 'tw': (215, 377, 306, 400)}, file={'cn': './assets/cn/map/FLEET_2_HARD_SATIESFIED.png', 'en': './assets/en/map/FLEET_2_HARD_SATIESFIED.png', 'jp': './assets/jp/map/FLEET_2_HARD_SATIESFIED.png', 'tw': './assets/tw/map/FLEET_2_HARD_SATIESFIED.png'}) -FLEET_2_IN_USE = Button(area={'cn': (391, 351, 475, 374), 'en': (374, 352, 453, 373), 'jp': (391, 351, 475, 374), 'tw': (393, 352, 473, 373)}, color={'cn': (182, 165, 200), 'en': (151, 152, 162), 'jp': (182, 165, 200), 'tw': (120, 96, 97)}, button={'cn': (391, 351, 475, 374), 'en': (374, 352, 453, 373), 'jp': (391, 351, 475, 374), 'tw': (393, 352, 473, 373)}, file={'cn': './assets/cn/map/FLEET_2_IN_USE.png', 'en': './assets/en/map/FLEET_2_IN_USE.png', 'jp': './assets/jp/map/FLEET_2_IN_USE.png', 'tw': './assets/tw/map/FLEET_2_IN_USE.png'}) +FLEET_2_IN_USE = Button(area={'cn': (391, 351, 475, 374), 'en': (374, 352, 453, 373), 'jp': (391, 351, 475, 374), 'tw': (391, 351, 475, 374)}, color={'cn': (182, 165, 200), 'en': (151, 152, 162), 'jp': (182, 165, 200), 'tw': (182, 165, 200)}, button={'cn': (391, 351, 475, 374), 'en': (374, 352, 453, 373), 'jp': (391, 351, 475, 374), 'tw': (391, 351, 475, 374)}, file={'cn': './assets/cn/map/FLEET_2_IN_USE.png', 'en': './assets/en/map/FLEET_2_IN_USE.png', 'jp': './assets/cn/map/FLEET_2_IN_USE.png', 'tw': './assets/cn/map/FLEET_2_IN_USE.png'}) +FLEET_2_IN_USE_W15 = Button(area={'cn': (390, 290, 475, 319), 'en': (371, 290, 456, 319), 'jp': (390, 290, 475, 319), 'tw': (390, 290, 475, 319)}, color={'cn': (128, 131, 147), 'en': (128, 131, 147), 'jp': (128, 131, 147), 'tw': (128, 131, 147)}, button={'cn': (390, 290, 475, 319), 'en': (371, 290, 456, 319), 'jp': (390, 290, 475, 319), 'tw': (390, 290, 475, 319)}, file={'cn': './assets/cn/map/FLEET_2_IN_USE_W15.png', 'en': './assets/en/map/FLEET_2_IN_USE_W15.png', 'jp': './assets/cn/map/FLEET_2_IN_USE_W15.png', 'tw': './assets/cn/map/FLEET_2_IN_USE_W15.png'}) FLEET_NUM_1 = Button(area={'cn': (213, 76, 224, 101), 'en': (213, 76, 224, 101), 'jp': (213, 76, 224, 101), 'tw': (213, 76, 224, 101)}, color={'cn': (51, 143, 186), 'en': (51, 143, 186), 'jp': (51, 143, 186), 'tw': (51, 143, 186)}, button={'cn': (213, 76, 224, 101), 'en': (213, 76, 224, 101), 'jp': (213, 76, 224, 101), 'tw': (213, 76, 224, 101)}, file={'cn': './assets/cn/map/FLEET_NUM_1.png', 'en': './assets/en/map/FLEET_NUM_1.png', 'jp': './assets/jp/map/FLEET_NUM_1.png', 'tw': './assets/tw/map/FLEET_NUM_1.png'}) FLEET_NUM_2 = Button(area={'cn': (212, 75, 226, 101), 'en': (212, 75, 226, 101), 'jp': (212, 75, 226, 101), 'tw': (212, 75, 226, 101)}, color={'cn': (52, 150, 194), 'en': (52, 150, 194), 'jp': (52, 150, 194), 'tw': (52, 150, 194)}, button={'cn': (212, 75, 226, 101), 'en': (212, 75, 226, 101), 'jp': (212, 75, 226, 101), 'tw': (212, 75, 226, 101)}, file={'cn': './assets/cn/map/FLEET_NUM_2.png', 'en': './assets/en/map/FLEET_NUM_2.png', 'jp': './assets/jp/map/FLEET_NUM_2.png', 'tw': './assets/tw/map/FLEET_NUM_2.png'}) FLEET_PREPARATION = Button(area={'cn': (1013, 558, 1141, 588), 'en': (1048, 569, 1086, 595), 'jp': (1046, 558, 1107, 587), 'tw': (1014, 557, 1142, 588)}, color={'cn': (242, 211, 160), 'en': (241, 201, 148), 'jp': (241, 205, 151), 'tw': (242, 208, 157)}, button={'cn': (980, 549, 1181, 612), 'en': (988, 556, 1145, 606), 'jp': (983, 549, 1185, 612), 'tw': (980, 548, 1180, 612)}, file={'cn': './assets/cn/map/FLEET_PREPARATION.png', 'en': './assets/en/map/FLEET_PREPARATION.png', 'jp': './assets/jp/map/FLEET_PREPARATION.png', 'tw': './assets/tw/map/FLEET_PREPARATION.png'}) diff --git a/module/map/map_fleet_preparation.py b/module/map/map_fleet_preparation.py index 51f5f3df4..1dd7efafb 100644 --- a/module/map/map_fleet_preparation.py +++ b/module/map/map_fleet_preparation.py @@ -308,25 +308,31 @@ class FleetPreparation(InfoHandler): if self.map_fleet_checked: return False - fleet_1 = FleetOperator( - choose=FLEET_1_CHOOSE, advice=FLEET_1_ADVICE, bar=FLEET_1_BAR, clear=FLEET_1_CLEAR, - in_use=FLEET_1_IN_USE, hard_satisfied=FLEET_1_HARD_SATIESFIED, main=self) - fleet_2 = FleetOperator( - choose=FLEET_2_CHOOSE, advice=FLEET_2_ADVICE, bar=FLEET_2_BAR, clear=FLEET_2_CLEAR, - in_use=FLEET_2_IN_USE, hard_satisfied=FLEET_2_HARD_SATIESFIED, main=self) - submarine = FleetOperator( - choose=SUBMARINE_CHOOSE, advice=SUBMARINE_ADVICE, bar=SUBMARINE_BAR, clear=SUBMARINE_CLEAR, - in_use=SUBMARINE_IN_USE, hard_satisfied=SUBMARINE_HARD_SATIESFIED, main=self) - - if self.appear(FLEET_1_CLEAR, offset=(-20, -80, 20, 5)): + if self.appear(FLEET_1_CLEAR, offset=FleetOperator.OFFSET): AUTO_SEARCH_SET_MOB.load_offset(FLEET_1_CLEAR) AUTO_SEARCH_SET_BOSS.load_offset(FLEET_1_CLEAR) AUTO_SEARCH_SET_ALL.load_offset(FLEET_1_CLEAR) AUTO_SEARCH_SET_STANDBY.load_offset(FLEET_1_CLEAR) - if self.appear(SUBMARINE_CLEAR, offset=(-20, -80, 20, 5)): + if self.appear(SUBMARINE_CLEAR, offset=FleetOperator.OFFSET): AUTO_SEARCH_SET_SUB_AUTO.load_offset(SUBMARINE_CLEAR) AUTO_SEARCH_SET_SUB_STANDBY.load_offset(SUBMARINE_CLEAR) + fleet_1 = FleetOperator( + choose=FLEET_1_CHOOSE, advice=FLEET_1_ADVICE, bar=FLEET_1_BAR, clear=FLEET_1_CLEAR, + in_use=FLEET_1_IN_USE, hard_satisfied=FLEET_1_HARD_SATIESFIED, main=self) + y = FLEET_1_CLEAR.button[1] - FLEET_1_CLEAR.area[1] + if y < -10: + logger.info('FLEET_1_CLEAR moves up, load W15 assets') + in_use = FLEET_2_IN_USE_W15 + else: + in_use = FLEET_2_IN_USE + fleet_2 = FleetOperator( + choose=FLEET_2_CHOOSE, advice=FLEET_2_ADVICE, bar=FLEET_2_BAR, clear=FLEET_2_CLEAR, + in_use=in_use, hard_satisfied=FLEET_2_HARD_SATIESFIED, main=self) + submarine = FleetOperator( + choose=SUBMARINE_CHOOSE, advice=SUBMARINE_ADVICE, bar=SUBMARINE_BAR, clear=SUBMARINE_CLEAR, + in_use=SUBMARINE_IN_USE, hard_satisfied=SUBMARINE_HARD_SATIESFIED, main=self) + # Check if ship is prepared in hard mode h1, h2, h3 = fleet_1.is_hard_satisfied(), fleet_2.is_hard_satisfied(), submarine.is_hard_satisfied() logger.info(f'Hard satisfied: Fleet_1: {h1}, Fleet_2: {h2}, Submarine: {h3}') From 3bf5ca91c00edc6a8765cd8757acccbca32558b2 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 24 Oct 2025 01:19:16 +0800 Subject: [PATCH 27/27] Fix: Handle SP event story --- module/eventstory/eventstory.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/module/eventstory/eventstory.py b/module/eventstory/eventstory.py index 656a3f670..81c20bdbb 100644 --- a/module/eventstory/eventstory.py +++ b/module/eventstory/eventstory.py @@ -5,7 +5,7 @@ from module.combat.combat import Combat from module.eventstory.assets import * from module.handler.login import LoginHandler from module.logger import logger -from module.ui.page import page_event +from module.ui.page import page_event, page_sp class EventStory(CampaignUI, Combat, LoginHandler): @@ -14,7 +14,15 @@ class EventStory(CampaignUI, Combat, LoginHandler): Returns: str: 'finish', 'story', 'unknown' """ - self.ui_ensure(page_event) + event = self.config.cross_get('Event.Campaign.Event', '') + if event in [ + 'event_20251023_cn', + ]: + # SP event + self.ui_ensure(page_sp) + else: + # most events show as page_event + self.ui_ensure(page_event) self.campaign_ensure_mode_20241219('story') state = 'unknown'