From 56aab11f52c94d649811f415998d2eafcaadcad7 Mon Sep 17 00:00:00 2001 From: RedDeadDepresso <94017243+RedDeadDepresso@users.noreply.github.com> Date: Mon, 8 Jan 2024 19:07:41 +0000 Subject: [PATCH] fix: login --- assets/en/login/OCR_YEAR.png | Bin 0 -> 5895 bytes assets/zht/login/OCR_YEAR.png | Bin 0 -> 5895 bytes tasks/base/ui.py | 44 +++++++++++++++++++++++++---- tasks/login/assets/assets_login.py | 18 ++++++++++++ tasks/login/login.py | 8 ++---- 5 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 assets/en/login/OCR_YEAR.png create mode 100644 assets/zht/login/OCR_YEAR.png diff --git a/assets/en/login/OCR_YEAR.png b/assets/en/login/OCR_YEAR.png new file mode 100644 index 0000000000000000000000000000000000000000..4db7b6f4b7b87a04499068aeeb806734a13d86c6 GIT binary patch literal 5895 zcmeHLX;c$g7B01I5f^B6aMvW*N-J4ONKzOx0yYAMMNmN^rbsGDnWaKi*hQs<S2-GtqDl0}jVc0f4Vl z5Kk|?muML%MKv@?hWf#@V2zGI1HeLIunv-{U_HqXRv=mdr70teLPBH$$|{bCA=25w zN@Qs$2783McuGT6Qof8LTtr$J3=#n}upS}>Yt&jC3>Hv&2EvNdir7#s@GpuOSpGcfJ+gasH~9wO~C{9?{BFQQtv_l zA!*+zq=p)VWt9GIEB@y*^)?eFz+t>w_Q+UaTPW{ll`Se~C8^1^zzk zKUZ^KV*PQg{1w*yVoH^eRsj=-1f60S2i>rn_Du!-KWC}e_M4q|08VV@hUVZwLVOG! zMX;6#jS&Zpq}E0c04AM|_KQ7(;~HM5c8XWb1YYCS`SA^n_4W4~>to-z%}-gnc;v*z zkB@uW8#tD#=49j2fP3C6d!472tjqP zcX7+Kh<0^g4cX(^v0E7qFR!}S);S(-p=Z7?ep=(@aOLI0%_g&^PMaFmUJ`0neFQtV zzYR-X$YZfUu-N_d&K~?~Lg93>peirtLC{YCV9D$391lF5m(t#<39oNftt#nh+WWv# zSYMY%i;H(u$WMS>q1sHT=EG0auoGaeCd(^ejVd|7-Q!Jr(c1K1Vix4go!ho7ARy&J zre+169T5Nh!TQ8LbdM?mZrp8~mUYzBhN1iQIK0jvS>wjNt}|mzX&_T28Ki=@Yg7&5=<}B895x z{I%8yhgm-1j{?H?r(%ktYFFO3k*^sk-3rk+h(Ie&pGpPGNiRbBG_ zP4r}&ccDJccT%J4+;h$uk=4Fw^7_og)raT0V{dcm`F(P`Y>G%{STk7f8*lp9d|)nG z2nwuy=kK>Q^1f?(xAKVb?u9)WrrD75!Lhq{y12R|_;(@X$TetV?z$`gN-LWd{Ia1u zBJp%$`4Ul-X_BSPU0D$;tB5a8^DW_YFAmag#oPt?IgVQkI-Ms0o1&bDjlI8(H@cNw z5p&8HJsa4At=VW){!S4dw$5+9NOc*RW^1%dEDa3}oGXxg=(aVw&=iWhU;6HGop;>v z)|3}(N^W%1$+87Ebjv`iZweoo7TF29UCo`J82Jlw3rsUcj0JA`T5O8o@7-ZX-i9IR z8O3*V(n<=CR>a0;VZXlqW$Cfz9&>MHq&S8nf9_Oin%&V6Ov~NE+g69Dd{iEn^v?>5 zqD=F<@~4__Hc#9WDV}CL`%J(w@#C#y94FK@0waKnlZ_=37g_6`WNLET6Q`Wc$-Xme zJDN@M$6q=0toB~V=5Pz+bT?PrACgFdj1n`&2^w}mXtAgGap80PQN!7?X98V8E-+WEV4Tg`PS}=*39;N!jpm@dqx5hbkfb6;;l(n&pj@ERuuL#d{Ee)y+aURIC0ha zDbr^}CtW@5W|7L?Vrok(604DQNNH#8D{|zwN4;1!{8F*Hws>RnuC#OBS+(USY_Xn@ z>S&YQu=|XdIok_9fIzhEfgP9UY*VWNpng}Ay@a;U>5fxSd-B1xt+zcMY-sb?B22j? z%&&ZYEv(pP`=dt_*9u!JOtWVn4L?!vEd5kEd~1Zs7SpcKjOpGlGS@!n_DL;Gt4-W& z*519YC6k=@w*|@Am6!)nRR^%s#b)!O1kM$|x-~RfnE7BEP!r&0X+^aSAUXO_jAXps zes*K`?Nrn3Z}LpC%By@%oIH8?`@rnx1>?8A^l)8Nd%kDaD&MeMBdg=z70o1ax^&m& zuBV;%%xl*^)wj%Sk2GBrUQw=UN=NhlT?eC47rvRoT%(RM>F;vJl+RT{(I7)8|D`R(5qCO~|NG6xC0yZ#YwW zx$3~)lBSfEpi4(FSJ?H$BrB+@IcKKLqS%C<61+!IH%|ywpGtPH6t>lT2s8Yh{@+|< ainD;s=vT?_SJ%ZEB04T{u|IDs`QhJ1ATSjG literal 0 HcmV?d00001 diff --git a/assets/zht/login/OCR_YEAR.png b/assets/zht/login/OCR_YEAR.png new file mode 100644 index 0000000000000000000000000000000000000000..4db7b6f4b7b87a04499068aeeb806734a13d86c6 GIT binary patch literal 5895 zcmeHLX;c$g7B01I5f^B6aMvW*N-J4ONKzOx0yYAMMNmN^rbsGDnWaKi*hQs<S2-GtqDl0}jVc0f4Vl z5Kk|?muML%MKv@?hWf#@V2zGI1HeLIunv-{U_HqXRv=mdr70teLPBH$$|{bCA=25w zN@Qs$2783McuGT6Qof8LTtr$J3=#n}upS}>Yt&jC3>Hv&2EvNdir7#s@GpuOSpGcfJ+gasH~9wO~C{9?{BFQQtv_l zA!*+zq=p)VWt9GIEB@y*^)?eFz+t>w_Q+UaTPW{ll`Se~C8^1^zzk zKUZ^KV*PQg{1w*yVoH^eRsj=-1f60S2i>rn_Du!-KWC}e_M4q|08VV@hUVZwLVOG! zMX;6#jS&Zpq}E0c04AM|_KQ7(;~HM5c8XWb1YYCS`SA^n_4W4~>to-z%}-gnc;v*z zkB@uW8#tD#=49j2fP3C6d!472tjqP zcX7+Kh<0^g4cX(^v0E7qFR!}S);S(-p=Z7?ep=(@aOLI0%_g&^PMaFmUJ`0neFQtV zzYR-X$YZfUu-N_d&K~?~Lg93>peirtLC{YCV9D$391lF5m(t#<39oNftt#nh+WWv# zSYMY%i;H(u$WMS>q1sHT=EG0auoGaeCd(^ejVd|7-Q!Jr(c1K1Vix4go!ho7ARy&J zre+169T5Nh!TQ8LbdM?mZrp8~mUYzBhN1iQIK0jvS>wjNt}|mzX&_T28Ki=@Yg7&5=<}B895x z{I%8yhgm-1j{?H?r(%ktYFFO3k*^sk-3rk+h(Ie&pGpPGNiRbBG_ zP4r}&ccDJccT%J4+;h$uk=4Fw^7_og)raT0V{dcm`F(P`Y>G%{STk7f8*lp9d|)nG z2nwuy=kK>Q^1f?(xAKVb?u9)WrrD75!Lhq{y12R|_;(@X$TetV?z$`gN-LWd{Ia1u zBJp%$`4Ul-X_BSPU0D$;tB5a8^DW_YFAmag#oPt?IgVQkI-Ms0o1&bDjlI8(H@cNw z5p&8HJsa4At=VW){!S4dw$5+9NOc*RW^1%dEDa3}oGXxg=(aVw&=iWhU;6HGop;>v z)|3}(N^W%1$+87Ebjv`iZweoo7TF29UCo`J82Jlw3rsUcj0JA`T5O8o@7-ZX-i9IR z8O3*V(n<=CR>a0;VZXlqW$Cfz9&>MHq&S8nf9_Oin%&V6Ov~NE+g69Dd{iEn^v?>5 zqD=F<@~4__Hc#9WDV}CL`%J(w@#C#y94FK@0waKnlZ_=37g_6`WNLET6Q`Wc$-Xme zJDN@M$6q=0toB~V=5Pz+bT?PrACgFdj1n`&2^w}mXtAgGap80PQN!7?X98V8E-+WEV4Tg`PS}=*39;N!jpm@dqx5hbkfb6;;l(n&pj@ERuuL#d{Ee)y+aURIC0ha zDbr^}CtW@5W|7L?Vrok(604DQNNH#8D{|zwN4;1!{8F*Hws>RnuC#OBS+(USY_Xn@ z>S&YQu=|XdIok_9fIzhEfgP9UY*VWNpng}Ay@a;U>5fxSd-B1xt+zcMY-sb?B22j? z%&&ZYEv(pP`=dt_*9u!JOtWVn4L?!vEd5kEd~1Zs7SpcKjOpGlGS@!n_DL;Gt4-W& z*519YC6k=@w*|@Am6!)nRR^%s#b)!O1kM$|x-~RfnE7BEP!r&0X+^aSAUXO_jAXps zes*K`?Nrn3Z}LpC%By@%oIH8?`@rnx1>?8A^l)8Nd%kDaD&MeMBdg=z70o1ax^&m& zuBV;%%xl*^)wj%Sk2GBrUQw=UN=NhlT?eC47rvRoT%(RM>F;vJl+RT{(I7)8|D`R(5qCO~|NG6xC0yZ#YwW zx$3~)lBSfEpi4(FSJ?H$BrB+@IcKKLqS%C<61+!IH%|ywpGtPH6t>lT2s8Yh{@+|< ainD;s=vT?_SJ%ZEB04T{u|IDs`QhJ1ATSjG literal 0 HcmV?d00001 diff --git a/tasks/base/ui.py b/tasks/base/ui.py index b89219b..e9ee337 100644 --- a/tasks/base/ui.py +++ b/tasks/base/ui.py @@ -1,18 +1,29 @@ from module.base.button import ButtonWrapper -from module.base.decorator import run_once +from module.base.decorator import run_once, Config from module.base.timer import Timer -from module.exception import GameNotRunningError, GamePageUnknownError +from module.exception import GameNotRunningError, GamePageUnknownError, RequestHumanTakeover from module.logger import logger -from module.ocr.ocr import Ocr +from module.ocr.ocr import Ocr, Digit from tasks.base.main_page import MainPage from tasks.base.page import Page, page_main -from tasks.base.assets.assets_base_page import BACK +from tasks.login.assets.assets_login import LOGIN_LOADING, OCR_YEAR +#from tasks.base.assets.assets_base_page import BACK class UI(MainPage): ui_current: Page ui_main_confirm_timer = Timer(0.2, count=2) + @Config.when(Emulator_GameLanguage='zhs') + def appear_trademark_year(self): + ocr_year = Digit(OCR_YEAR).ocr_single_line(self.device.image) + return ocr_year == 2023 + + @Config.when(Emulator_GameLanguage=None) + def appear_trademark_year(self): + ocr_year = Digit(OCR_YEAR).ocr_single_line(self.device.image) + return ocr_year == 2021 + def ui_page_appear(self, page): """ Args: @@ -77,9 +88,15 @@ class UI(MainPage): logger.info("Additional ui page handled") timeout.reset() continue + # this might be bad but it works + if self.match_color(LOGIN_LOADING, interval=5, threshold=80) or self.appear_trademark_year(): + from tasks.login.login import Login + Login(self.config, self.device).handle_app_login() + continue if back_timer.reached_and_reset(): logger.info("Unknown page, try to back") - self.device.click(BACK) + #self.device.click(BACK) + self.device.u2.press("back") app_check() minicap_check() @@ -176,10 +193,12 @@ class UI(MainPage): if self.ui_current == destination: logger.info("Already at %s" % destination) + self.close_popup(destination.check_button) return False else: logger.info("Goto %s" % destination) self.ui_goto(destination, skip_first_screenshot=True) + self.close_popup(destination.check_button) return True def ui_ensure_index( @@ -399,3 +418,18 @@ class UI(MainPage): button (Button): """ pass + + def close_popup(self, check_button): + if not self.match_color(check_button): + timer = Timer(5, 5).start() + wait = Timer(1).start() + while 1: + self.device.screenshot() + if self.match_color(check_button): + break + self.device.u2.press("back") + if timer.reached(): + logger.error("Failed to close popup") + raise RequestHumanTakeover + while not wait.reached(): + pass \ No newline at end of file diff --git a/tasks/login/assets/assets_login.py b/tasks/login/assets/assets_login.py index 78c2094..a3c3277 100644 --- a/tasks/login/assets/assets_login.py +++ b/tasks/login/assets/assets_login.py @@ -51,6 +51,24 @@ LOGIN_LOADING = ButtonWrapper( button=(34, 682, 60, 707), ), ) +OCR_YEAR = ButtonWrapper( + name='OCR_YEAR', + jp=None, + en=Button( + file='./assets/en/login/OCR_YEAR.png', + area=(377, 689, 414, 701), + search=(357, 669, 434, 720), + color=(160, 157, 158), + button=(377, 689, 414, 701), + ), + zht=Button( + file='./assets/zht/login/OCR_YEAR.png', + area=(377, 689, 414, 701), + search=(357, 669, 434, 720), + color=(160, 157, 158), + button=(377, 689, 414, 701), + ), +) SURVEY = ButtonWrapper( name='SURVEY', jp=None, diff --git a/tasks/login/login.py b/tasks/login/login.py index f6eaf9c..ef7bb9f 100644 --- a/tasks/login/login.py +++ b/tasks/login/login.py @@ -1,11 +1,11 @@ from module.base.timer import Timer from module.base.decorator import Config +from module.ocr.ocr import Digit from module.exception import GameNotRunningError from module.logger import logger from tasks.base.page import page_main from tasks.base.ui import UI -from tasks.login.assets.assets_login import LOGIN_CONFIRM, LOGIN_LOADING, UPDATE, SURVEY -from tasks.base.assets.assets_base_page import MAIN_GO_TO_MAIL +from tasks.login.assets.assets_login import LOGIN_CONFIRM, LOGIN_LOADING, UPDATE, SURVEY, OCR_YEAR class Login(UI): @@ -94,10 +94,8 @@ class Login(UI): continue if self.ui_additional(): continue - # press emulator back button when random popup in main - if self.appear(MAIN_GO_TO_MAIL) and not self.match_color(MAIN_GO_TO_MAIL): + if not self.appear_trademark_year(): self.device.u2.press("back") - continue return True