From fe7c6f92a8a9336fbea60ee83ca44ecd727ed70f Mon Sep 17 00:00:00 2001 From: RedDeadDepresso <94017243+RedDeadDepresso@users.noreply.github.com> Date: Mon, 1 Jan 2024 11:04:16 +0000 Subject: [PATCH] feat:lesson --- aas.py | 4 + assets/en/schedule/CONFIRM.png | Bin 0 -> 11486 bytes assets/en/schedule/FIRST_ITEM.png | Bin 0 -> 71030 bytes assets/en/schedule/LOCATIONS.png | Bin 0 -> 12299 bytes assets/en/schedule/LOCATIONS_POPUP.png | Bin 0 -> 8216 bytes assets/en/schedule/OCR_TICKET.png | Bin 0 -> 5906 bytes assets/en/schedule/START_LESSON.png | Bin 0 -> 13231 bytes config/template.json | 31 +++++ module/config/argument/args.json | 152 +++++++++++++++++++++++ module/config/argument/argument.yaml | 41 ++++++ module/config/argument/menu.json | 1 + module/config/argument/task.yaml | 8 ++ module/config/config_generated.py | 23 ++++ module/config/config_manual.py | 2 +- module/config/i18n/en-US.json | 141 +++++++++++++++++++++ module/config/i18n/zh-CN.json | 141 +++++++++++++++++++++ tasks/schedule/assets/assets_schedule.py | 66 ++++++++++ tasks/schedule/schedule.py | 131 +++++++++++++++++++ tasks/schedule/scroll_select.py | 149 ++++++++++++++++++++++ tasks/schedule/ui.py | 80 ++++++++++++ 20 files changed, 969 insertions(+), 1 deletion(-) create mode 100644 assets/en/schedule/CONFIRM.png create mode 100644 assets/en/schedule/FIRST_ITEM.png create mode 100644 assets/en/schedule/LOCATIONS.png create mode 100644 assets/en/schedule/LOCATIONS_POPUP.png create mode 100644 assets/en/schedule/OCR_TICKET.png create mode 100644 assets/en/schedule/START_LESSON.png create mode 100644 tasks/schedule/schedule.py create mode 100644 tasks/schedule/scroll_select.py create mode 100644 tasks/schedule/ui.py diff --git a/aas.py b/aas.py index e95cd3e..1069bb5 100644 --- a/aas.py +++ b/aas.py @@ -62,6 +62,10 @@ class ArisuAutoSweeper(AzurLaneAutoScript): from tasks.mission.mission import Mission Mission(config=self.config, device=self.device).run() + def schedule(self): + from tasks.schedule.schedule import Schedule + Schedule(config=self.config, device=self.device).run() + def data_update(self): from tasks.item.data_update import DataUpdate DataUpdate(config=self.config, device=self.device).run() diff --git a/assets/en/schedule/CONFIRM.png b/assets/en/schedule/CONFIRM.png new file mode 100644 index 0000000000000000000000000000000000000000..6fa69856da145f40c5f7141945e2018108ef74f4 GIT binary patch literal 11486 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 literal 0 HcmV?d00001 diff --git a/assets/en/schedule/LOCATIONS.png b/assets/en/schedule/LOCATIONS.png new file mode 100644 index 0000000000000000000000000000000000000000..fe967644194161b55c8bc66568897a3403dde99a GIT binary patch literal 12299 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 S5If$!u$zXa24&ao{rqpji+NrE literal 0 HcmV?d00001 diff --git a/assets/en/schedule/LOCATIONS_POPUP.png b/assets/en/schedule/LOCATIONS_POPUP.png new file mode 100644 index 0000000000000000000000000000000000000000..199c52b333214cb3089169443bdc11a838430f3c GIT binary patch literal 8216 zcmeHJc{rQf){knd!%;mg)mD*1O?4!MAR$6gr8QK|lm;OY5+uaT)ln6llp0&KsG>?u zL3)Zh=9;IXC`u4&s))F+PWRsLyZ5`#cmKG5^?jaX?{}}?Uc+y%wcZ_JVx-5r=ja{~ z2*j&@TE`Rw+5t?rz1_797&JuhOl!*^*vilZ ztWEO9f)Nk}IVX8}1+WS*Q&NVhA`riWVe&9VsJt>12A6}$Bjpv4a5(teBLYVy!40uC{;V2YOBos=eQXy1D2+7+Os(?Tspz<&%3?>I44NEZLDK?h5A z^2U2o@FXI5OC!dSJ;0j_?H!Nc>1S|a%yPXJ?3Ka3|-0V2N@(-)w#(+`}dkGK05 zWS3$#$qTW zZ!;3f{rmZwd?x}7gF_U+(w2ClGl@!;*>dCC2CNQ-f<=jK<$|07Ob(`Mrl5j^t0G|v zHeXSOBxk&f|Nlm*A{CU73i97kK>j&nD472X=j?=ZA$faX0N(H(7*{ORljtf2{&5;e zZIV058!!jBqxi+Pp&?SANTy(jPFQ^%lo;SM1dn${svwjRPA;k#IVX&ZvK&HQ2`h&| zsKVrcB^O5}d1ps?nDh7jIwU8btpxeL-}(Q!-`E=uR4B&%Ki9K$ph!Rs-~?u?3Q%GS zV&E@}R$IB@?(=m~1tt$XP=&4kZ*uE@BmbM&oQMZVg^7W;QsOI*=Yb9b5UC7@E5g66 zo8bMh?p8W@fDiIlM_{UetuK4N$gKZP2Kcj8!e6Qac^Xd!GRyy4Q#g^%r}uR~6^8}*`sca%6+tGsP^cJhtd=Xl@4roZDBw4As|$S% z0s23q`y%_hj`bZ5w85?Ej|L39{Al4=BG9+Jfd);+ABzEjjGc1pc(n5dLD)d$jSHUV)z zZ?vv*tc_Y#7vil`_tJCcIu`h`NL)=OOm_4&{g)QIGDv&X#wW6|#zK5TG9RdO*A975 z*Ib$`k6cqj^z4zfw}ycwxB|sV`OkTJQfHG7@=8^)-?yj-MnziCwf5f>LhEz=@@lSL z@fFA{pZC$*v~h%2a_h~Y^iz_Hk@w=_R+pC^I2flQs2o0ldQ#D(NSC@es8?4ej4R7N zHAGp$jz5|aG#U8-4twB`(Mo4KY(6qx5@prIs|-P9T~BYO+&<-IYD$lU_FA9k4!aO3 z@fKv3nKqxu3>Arj9aXuWSDUP`xXz9A52ES`T&dm+8Oil{A{=^lbu4D8>fi)7hz6qq zwoc^~_82E*J-J(s{)4zloc>r3f0 zpDF*jsrvebVRLEzqn>&TMElgU$#>!NLpVQ}&jT$HkMB=cUtgVqZ9 ziOB52xMw%)Tucj5jF*JI4=*$(OK@$^I&&iT1$xH$3T})ffp=ALCTN-Vev8+zgcsyR z#uG{AV5wG&w%UbHb>z`JrGSRpP&&e^z2uBVUSqxN>0RNd=?o>(y<&&NL#S2_kHld) zklFohhr`^I+&}l?Xtq5Nt&@)FD7SnYy27sT*Pfpv>(9qbdFezM=84^Sof?Xmomfwa znw9N6W?yl_b>V4}ab6kCw(ch8Ql60!WSlv5)g+4vr$TInZp=0fnw84S24XB$>N+M+ z-g8 zpR`;!#@pIks?Z-ji!MDw%Y`nE8A}aw-v4(#`L25EQkVqd8i4c-kQ$eed z$DcLD<_EJ44NOOQ(nWe%YFuHnF1wXLT@v?f?baVlO1&iYDDMilU0=Q7TZIZSBE6hJ9Ws3(JQUhvThEzYM5|rI<&Q1-L`3&4V zw3(^N0x#4-eg3?OJeX zj(&n#A0=!+8N%DO93AHqMUpRp53lx7+tLk%IvM?ChDz>lAD(n@m*!^;jOEv?bmqqf zyxGkIZM0czEAnq^X^LfV)<=6a1XC=#RhdTpuvW$Bx%M>cv2�`@#(|A{#Ct7DW4y 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 NzOIo@-pPyMe+6E%N~iz; literal 0 HcmV?d00001 diff --git a/assets/en/schedule/OCR_TICKET.png b/assets/en/schedule/OCR_TICKET.png new file mode 100644 index 0000000000000000000000000000000000000000..2b29ef4b29faba53c0f3662defa89b6e2b4e8137 GIT binary patch literal 5906 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 F{{e5(cLo3e literal 0 HcmV?d00001 diff --git a/config/template.json b/config/template.json index 32f08f8..37f69c9 100644 --- a/config/template.json +++ b/config/template.json @@ -70,6 +70,37 @@ "Substitute": false } }, + "Schedule": { + "Scheduler": { + "Enable": false, + "NextRun": "2020-01-01 00:00:00", + "Command": "Schedule", + "ServerUpdate": "04:00" + }, + "Schedule": { + "OnError": "skip" + }, + "Choice1": { + "Location": "None", + "Classrooms": null + }, + "Choice2": { + "Location": "None", + "Classrooms": null + }, + "Choice3": { + "Location": "None", + "Classrooms": null + }, + "Choice4": { + "Location": "None", + "Classrooms": null + }, + "Choice5": { + "Location": "None", + "Classrooms": null + } + }, "Shop": { "Scheduler": { "Enable": false, diff --git a/module/config/argument/args.json b/module/config/argument/args.json index e3acdf9..496b71d 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -318,6 +318,158 @@ } } }, + "Schedule": { + "Scheduler": { + "Enable": { + "type": "checkbox", + "value": false, + "option": [ + true, + false + ] + }, + "NextRun": { + "type": "datetime", + "value": "2020-01-01 00:00:00", + "validate": "datetime" + }, + "Command": { + "type": "input", + "value": "Schedule", + "display": "hide" + }, + "ServerUpdate": { + "type": "input", + "value": "04:00", + "display": "hide" + } + }, + "Schedule": { + "OnError": { + "type": "select", + "value": "skip", + "option": [ + "stop", + "skip" + ] + } + }, + "Choice1": { + "Location": { + "type": "select", + "value": "None", + "option": [ + "None", + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + }, + "Classrooms": { + "type": "textarea", + "value": null + } + }, + "Choice2": { + "Location": { + "type": "select", + "value": "None", + "option": [ + "None", + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + }, + "Classrooms": { + "type": "textarea", + "value": null + } + }, + "Choice3": { + "Location": { + "type": "select", + "value": "None", + "option": [ + "None", + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + }, + "Classrooms": { + "type": "textarea", + "value": null + } + }, + "Choice4": { + "Location": { + "type": "select", + "value": "None", + "option": [ + "None", + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + }, + "Classrooms": { + "type": "textarea", + "value": null + } + }, + "Choice5": { + "Location": { + "type": "select", + "value": "None", + "option": [ + "None", + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ] + }, + "Classrooms": { + "type": "textarea", + "value": null + } + } + }, "Shop": { "Scheduler": { "Enable": { diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 6ebb6c8..14da2ff 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -93,6 +93,47 @@ Invitation: type: textarea Substitute: false +Schedule: + OnError: + value: skip + option: [ stop, skip ] + +Choice1: + Location: + value: None + option: [ None, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] + Classrooms: + value: null + type: textarea +Choice2: + Location: + value: None + option: [ None, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] + Classrooms: + value: null + type: textarea +Choice3: + Location: + value: None + option: [ None, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] + Classrooms: + value: null + type: textarea +Choice4: + Location: + value: None + option: [ None, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] + Classrooms: + value: null + type: textarea +Choice5: + Location: + value: None + option: [ None, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] + Classrooms: + value: null + type: textarea + Bounty: OnError: value: skip diff --git a/module/config/argument/menu.json b/module/config/argument/menu.json index 82c45c1..9f562ec 100644 --- a/module/config/argument/menu.json +++ b/module/config/argument/menu.json @@ -13,6 +13,7 @@ "page": "setting", "tasks": [ "Cafe", + "Schedule", "Shop" ] }, diff --git a/module/config/argument/task.yaml b/module/config/argument/task.yaml index 12c9a0a..1a04704 100644 --- a/module/config/argument/task.yaml +++ b/module/config/argument/task.yaml @@ -29,6 +29,14 @@ Daily: - Scheduler - Cafe - Invitation + Schedule: + - Scheduler + - Schedule + - Choice1 + - Choice2 + - Choice3 + - Choice4 + - Choice5 Shop: - Scheduler - NormalShop diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 9a66e6e..870a56c 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -52,6 +52,29 @@ class GeneratedConfig: Invitation_Name = None Invitation_Substitute = False + # Group `Schedule` + Schedule_OnError = 'skip' # stop, skip + + # Group `Choice1` + Choice1_Location = 'None' # None, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + Choice1_Classrooms = None + + # Group `Choice2` + Choice2_Location = 'None' # None, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + Choice2_Classrooms = None + + # Group `Choice3` + Choice3_Location = 'None' # None, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + Choice3_Classrooms = None + + # Group `Choice4` + Choice4_Location = 'None' # None, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + Choice4_Classrooms = None + + # Group `Choice5` + Choice5_Location = 'None' # None, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + Choice5_Classrooms = None + # Group `Bounty` Bounty_OnError = 'skip' # stop, skip diff --git a/module/config/config_manual.py b/module/config/config_manual.py index e2b7a06..071ced1 100644 --- a/module/config/config_manual.py +++ b/module/config/config_manual.py @@ -9,7 +9,7 @@ class ManualConfig: SCHEDULER_PRIORITY = """ Restart > Cafe > TacticalChallenge > Circle > Mail - > DataUpdate > Bounty > Scrimmage > Task > Shop > Mission > Momotalk + > DataUpdate > Bounty > Scrimmage > Schedule > Task > Shop > Mission > Momotalk """ """ diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index a97c31c..66dcd24 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -34,6 +34,10 @@ "name": "Cafe", "help": "" }, + "Schedule": { + "name": "Lesson", + "help": "AAS will execute Lesson starting from Choice 1 to Choice 5.\nIt will ignore any Choice that have Location set as None or the text area for classrooms is empty.\nIf any of the active Choices have incorrect input, it will perform the action set in Error handling." + }, "Shop": { "name": "Shop", "help": "" @@ -277,6 +281,143 @@ "help": "Whether to replace the existing student with their alt.\nIf not, try to match the next student" } }, + "Schedule": { + "_info": { + "name": "Lesson Settings", + "help": "" + }, + "OnError": { + "name": "Error Handling", + "help": "Perform the selected action when an error occurs (ticket not enough or any invalid setting)", + "stop": "Stop script", + "skip": "Skip current task" + } + }, + "Choice1": { + "_info": { + "name": "Choice 1", + "help": "" + }, + "Location": { + "name": "Location", + "help": "", + "None": "None", + "0": "Schale Office", + "1": "Schale Residence", + "2": "Gehenna", + "3": "Abydos", + "4": "Millennium", + "5": "Trinity", + "6": "Red Winter", + "7": "Hyakkiyako", + "8": "D.U. Shiratori", + "9": "Shanhaijing" + }, + "Classrooms": { + "name": "Classrooms", + "help": "Type a number from 1 to 9 that represents the classroom position in the locations popup.\nUse > to connect multiple classrooms and AAS will select them following the order they appear. Example:\n5 > 3 > 2 > 4 > 1" + } + }, + "Choice2": { + "_info": { + "name": "Choice 2", + "help": "" + }, + "Location": { + "name": "Location", + "help": "", + "None": "None", + "0": "Schale Office", + "1": "Schale Residence", + "2": "Gehenna", + "3": "Abydos", + "4": "Millennium", + "5": "Trinity", + "6": "Red Winter", + "7": "Hyakkiyako", + "8": "D.U. Shiratori", + "9": "Shanhaijing" + }, + "Classrooms": { + "name": "Classrooms", + "help": "" + } + }, + "Choice3": { + "_info": { + "name": "Choice 3", + "help": "" + }, + "Location": { + "name": "Location", + "help": "", + "None": "None", + "0": "Schale Office", + "1": "Schale Residence", + "2": "Gehenna", + "3": "Abydos", + "4": "Millennium", + "5": "Trinity", + "6": "Red Winter", + "7": "Hyakkiyako", + "8": "D.U. Shiratori", + "9": "Shanhaijing" + }, + "Classrooms": { + "name": "Classrooms", + "help": "" + } + }, + "Choice4": { + "_info": { + "name": "Choice 4", + "help": "" + }, + "Location": { + "name": "Location", + "help": "", + "None": "None", + "0": "Schale Office", + "1": "Schale Residence", + "2": "Gehenna", + "3": "Abydos", + "4": "Millennium", + "5": "Trinity", + "6": "Red Winter", + "7": "Hyakkiyako", + "8": "D.U. Shiratori", + "9": "Shanhaijing" + }, + "Classrooms": { + "name": "Classrooms", + "help": "" + } + }, + "Choice5": { + "_info": { + "name": "Choice 5", + "help": "" + }, + "Location": { + "name": "Location", + "help": "", + "None": "None", + "0": "Schale Office", + "1": "Schale Residence", + "2": "Gehenna", + "3": "Abydos", + "4": "Millennium", + "5": "Trinity", + "6": "Red Winter", + "7": "Hyakkiyako", + "8": "D.U. Shiratori", + "9": "Shanhaijing" + }, + "Classrooms": { + "name": "Classrooms", + "help": "" + } + }, "Bounty": { "_info": { "name": "Bounty Settings", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 4ab9e1f..6ad9f51 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -34,6 +34,10 @@ "name": "咖啡厅", "help": "" }, + "Schedule": { + "name": "Task.Schedule.name", + "help": "Task.Schedule.help" + }, "Shop": { "name": "商店", "help": "" @@ -277,6 +281,143 @@ "help": "若咖啡厅已存在所邀请学生的不同服装,选择是否替换该学生\n若不替换,则尝试匹配下一位学生" } }, + "Schedule": { + "_info": { + "name": "Schedule._info.name", + "help": "Schedule._info.help" + }, + "OnError": { + "name": "Schedule.OnError.name", + "help": "Schedule.OnError.help", + "stop": "stop", + "skip": "skip" + } + }, + "Choice1": { + "_info": { + "name": "Choice1._info.name", + "help": "Choice1._info.help" + }, + "Location": { + "name": "Choice1.Location.name", + "help": "Choice1.Location.help", + "None": "None", + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + }, + "Classrooms": { + "name": "Choice1.Classrooms.name", + "help": "Choice1.Classrooms.help" + } + }, + "Choice2": { + "_info": { + "name": "Choice2._info.name", + "help": "Choice2._info.help" + }, + "Location": { + "name": "Choice2.Location.name", + "help": "Choice2.Location.help", + "None": "None", + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + }, + "Classrooms": { + "name": "Choice2.Classrooms.name", + "help": "Choice2.Classrooms.help" + } + }, + "Choice3": { + "_info": { + "name": "Choice3._info.name", + "help": "Choice3._info.help" + }, + "Location": { + "name": "Choice3.Location.name", + "help": "Choice3.Location.help", + "None": "None", + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + }, + "Classrooms": { + "name": "Choice3.Classrooms.name", + "help": "Choice3.Classrooms.help" + } + }, + "Choice4": { + "_info": { + "name": "Choice4._info.name", + "help": "Choice4._info.help" + }, + "Location": { + "name": "Choice4.Location.name", + "help": "Choice4.Location.help", + "None": "None", + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + }, + "Classrooms": { + "name": "Choice4.Classrooms.name", + "help": "Choice4.Classrooms.help" + } + }, + "Choice5": { + "_info": { + "name": "Choice5._info.name", + "help": "Choice5._info.help" + }, + "Location": { + "name": "Choice5.Location.name", + "help": "Choice5.Location.help", + "None": "None", + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + }, + "Classrooms": { + "name": "Choice5.Classrooms.name", + "help": "Choice5.Classrooms.help" + } + }, "Bounty": { "_info": { "name": "悬赏通缉设置", diff --git a/tasks/schedule/assets/assets_schedule.py b/tasks/schedule/assets/assets_schedule.py index 8e923b2..737ca02 100644 --- a/tasks/schedule/assets/assets_schedule.py +++ b/tasks/schedule/assets/assets_schedule.py @@ -3,6 +3,61 @@ from module.base.button import Button, ButtonWrapper # This file was auto-generated, do not modify it manually. To generate: # ``` python -m dev_tools.button_extract ``` +CONFIRM = ButtonWrapper( + name='CONFIRM', + jp=None, + en=Button( + file='./assets/en/schedule/CONFIRM.png', + area=(532, 528, 748, 589), + search=(512, 508, 768, 609), + color=(110, 207, 241), + button=(532, 528, 748, 589), + ), +) +FIRST_ITEM = ButtonWrapper( + name='FIRST_ITEM', + jp=None, + en=Button( + file='./assets/en/schedule/FIRST_ITEM.png', + area=(727, 137, 1103, 239), + search=(707, 117, 1123, 259), + color=(200, 209, 220), + button=(727, 137, 1103, 239), + ), +) +LOCATIONS = ButtonWrapper( + name='LOCATIONS', + jp=None, + en=Button( + file='./assets/en/schedule/LOCATIONS.png', + area=(1075, 638, 1256, 693), + search=(1055, 618, 1276, 713), + color=(107, 202, 237), + button=(1075, 638, 1256, 693), + ), +) +LOCATIONS_POPUP = ButtonWrapper( + name='LOCATIONS_POPUP', + jp=None, + en=Button( + file='./assets/en/schedule/LOCATIONS_POPUP.png', + area=(534, 101, 750, 135), + search=(514, 81, 770, 155), + color=(194, 202, 210), + button=(534, 101, 750, 135), + ), +) +OCR_TICKET = ButtonWrapper( + name='OCR_TICKET', + jp=None, + en=Button( + file='./assets/en/schedule/OCR_TICKET.png', + area=(220, 79, 266, 121), + search=(200, 59, 286, 141), + color=(214, 225, 229), + button=(220, 79, 266, 121), + ), +) SCROLL = ButtonWrapper( name='SCROLL', jp=Button( @@ -20,3 +75,14 @@ SCROLL = ButtonWrapper( button=(727, 137, 1103, 671), ), ) +START_LESSON = ButtonWrapper( + name='START_LESSON', + jp=None, + en=Button( + file='./assets/en/schedule/START_LESSON.png', + area=(506, 523, 773, 585), + search=(486, 503, 793, 605), + color=(110, 205, 239), + button=(506, 523, 773, 585), + ), +) diff --git a/tasks/schedule/schedule.py b/tasks/schedule/schedule.py new file mode 100644 index 0000000..8ddc04a --- /dev/null +++ b/tasks/schedule/schedule.py @@ -0,0 +1,131 @@ +from enum import Flag + +from module.base.timer import Timer +from module.exception import RequestHumanTakeover +from module.logger import logger +from tasks.base.assets.assets_base_page import BACK +from tasks.base.page import page_schedule +from tasks.schedule.ui import ScheduleUI +from tasks.base.assets.assets_base_page import SCHEDULE_CHECK + +import re + +class ScheduleStatus(Flag): + OCR = 0 + ENTER = 1 + SELECT = 2 + END = 3 + FINISH = 4 + + +class Schedule(ScheduleUI): + @property + def schedule_info(self): + info = [] + input_valid = True + schedule_config = self.config.cross_get("Schedule") + choices = ["Choice1", "Choice2", "Choice3", "Choice4", "Choice5"] + + for choice in choices: + location, classrooms = schedule_config[choice]["Location"], schedule_config[choice]["Classrooms"] + if location == "None" or not classrooms or (isinstance(classrooms, str) and classrooms.replace(" ", "") == ""): + continue + elif isinstance(classrooms, int): + classrooms_list = [str(classrooms)] + else: + classrooms = classrooms.strip() + classrooms = re.sub(r'[ \t\r\n]', '', classrooms) + classrooms = re.sub(r'[>﹥›˃ᐳ❯]', '>', classrooms) + classrooms_list = list(set(classrooms.split('>'))) + + if self.valid_classroom(classrooms_list): + info.append([location, classrooms_list]) + else: + logger.error(f"Failed to read {choice}") + input_valid = False + + return info if input_valid else [] + + def valid_classroom(self, classrooms_list): + if not classrooms_list: + return False + for classroom in classrooms_list: + if not classroom.isdigit(): + return False + if not 1 <= int(classroom) <= 9: + return False + return True + + @property + def valid_task(self) -> list: + task = self.schedule_info + if not task: + logger.warning('Lessons enabled but no task set') + self.error_handler() + return task + + def error_handler(self): + action = self.config.Schedule_OnError + if action == 'stop': + raise RequestHumanTakeover + elif action == 'skip': + with self.config.multi_set(): + self.config.task_delay(server_update=True) + self.config.task_stop() + + @property + def current_location(self): + return self.task[0][0] + + @property + def current_classrooms(self): + return self.task[0][1] + + def handle_schedule(self, status): + match status: + case ScheduleStatus.OCR: + if self.task: + self.ticket = self.get_ticket() + if self.ticket not in [0, None]: + return ScheduleStatus.ENTER + return ScheduleStatus.FINISH + case ScheduleStatus.ENTER: + if self.enter_location(self.current_location): + return ScheduleStatus.SELECT + else: + self.error_handler() + case ScheduleStatus.SELECT: + if self.select_classrooms(self.ticket, self.current_classrooms): + self.task.pop(0) + return ScheduleStatus.END + return ScheduleStatus.FINISH + case ScheduleStatus.END: + if self.appear(SCHEDULE_CHECK): + return ScheduleStatus.OCR + self.click_with_interval(BACK, interval=2) + case ScheduleStatus.FINISH: + return status + case _: + logger.warning(f'Invalid status: {status}') + return status + + def run(self): + self.ui_ensure(page_schedule) + self.task = self.valid_task + action_timer = Timer(0.5, 1) + status = ScheduleStatus.OCR + + while 1: + self.device.screenshot() + + if self.ui_additional(): + continue + + if action_timer.reached_and_reset(): + logger.attr('Status', status) + status = self.handle_schedule(status) + + if status == ScheduleStatus.FINISH: + break + + self.config.task_delay(server_update=True) \ No newline at end of file diff --git a/tasks/schedule/scroll_select.py b/tasks/schedule/scroll_select.py new file mode 100644 index 0000000..ba43641 --- /dev/null +++ b/tasks/schedule/scroll_select.py @@ -0,0 +1,149 @@ +""" +Original Author: sanmusen214(https://github.com/sanmusen214) +Adapted from https://github.com/sanmusen214/BAAH/blob/1.2/modules/AllTask/SubTask/ScrollSelect.py +""" + +from module.logger import logger +from module.base.timer import Timer + + +class ScrollSelect: + """ + Scroll and select the corresponding level by clicking on the right-side window. + + Parameters + ---------- + targetind : int + Index of the target level + window_starty: + Y-coordinate of the upper edge of the window + first_item_endy: + Y-coordinate of the lower edge of the first item + window_endy: + Y-coordinate of the lower edge of the window + clickx: int + Base X-coordinate for sliding and clicking the button + hasexpectimage: function + Function to determine the appearance of the expected image after clicking, returns a boolean + swipeoffsetx: int + X offset of the base X-coordinate during sliding to prevent accidental button clicks + finalclick: bool + Whether to click on clickx and the last row after the sliding ends + """ + def __init__(self, window_button, first_item_button, expected_button, clickx, swipeoffsetx=-100, finalclick=True) -> None: + # TODO: Actually, only concerned about the height of one element, completely displaying the Y of the first button, completely displaying the Y of the bottom button, the number of complete elements that the window can contain, the height of the last element in the window, and the left offset and response distance. + self.window_starty = window_button.area[1] + self.window_endy = window_button.area[3] + self.first_item_endy = first_item_button.area[3] + self.windowheight = window_button.height + self.itemheight = first_item_button.height + self.clickx = clickx + self.expected_button = expected_button + self.swipeoffsetx = swipeoffsetx + self.responsey = 40 + self.finalclick = finalclick + + def compute_swipe(self, main, x1, y1, distance, responsey): + """ + Swipe vertically from bottom to top, actual swipe distance calculated based on the distance between two target points, considering inertia. + """ + distance = abs(distance) + logger.info(f"Swipe distance: {distance}") + # 0-50 + if distance < 50: + main.device.swipe((x1, y1), (x1, y1 - (distance + responsey)), duration=2) + else: + # Effective swipe distance for the Chinese server is 60 + main.device.swipe((x1, y1), (x1, int(y1 - (distance + responsey - 4 * (1 + distance / 100)))), duration=1 + distance / 100) + + def select_location(self, main, target_index) -> None: + click_coords = main.device.click_methods.get(main.config.Emulator_ControlMethod, main.device.click_adb) + logger.info("Scroll and select the {}-th level".format(target_index + 1)) + self.scroll_right_up(main, scrollx=self.clickx + self.swipeoffsetx) + # Calculate how many complete elements are on one page + itemcount = self.windowheight // self.itemheight + # Calculate how much height the last incomplete element on this page occupies + lastitemheight = self.windowheight % self.itemheight + # Height below the incomplete element + hiddenlastitemheight = self.itemheight - lastitemheight + # Center point of the height of the first element + start_center_y = self.window_starty + self.itemheight // 2 + # Center point of the last complete element on this page + end_center_y = start_center_y + (itemcount - 1) * self.itemheight + # If the target element is on the current page + if target_index < itemcount: + # Center point of the target element + target_center_y = start_center_y + self.itemheight * target_index + self.run_until(main, + lambda: click_coords(self.clickx, target_center_y), + lambda: main.appear(self.expected_button), + ) + else: + # Start scrolling from the gap in the middle of the levels + scroll_start_from_y = self.window_endy - self.itemheight // 2 + # The target element is on subsequent pages + # Calculate how much the page should be scrolled + scrolltotal_distance = (target_index - itemcount) * self.itemheight + hiddenlastitemheight + logger.info("Height hidden by the last element: %d" % hiddenlastitemheight) + # First, slide up the hidden part, add a little distance to let the system recognize it as a swipe event + self.compute_swipe(main, self.clickx + self.swipeoffsetx, scroll_start_from_y, hiddenlastitemheight, self.responsey) + logger.info(f"Swipe distance: {hiddenlastitemheight}") + # Update scrolltotal_distance + scrolltotal_distance -= hiddenlastitemheight + # Still need to scroll up (target_index - itemcount) * self.itemheight + # Important: slide the height of (itemcount - 1) elements each time + if itemcount == 1: + scroll_distance = itemcount * self.itemheight + else: + scroll_distance = (itemcount - 1) * self.itemheight + while scroll_distance <= scrolltotal_distance: + self.compute_swipe(main, self.clickx + self.swipeoffsetx, scroll_start_from_y, scroll_distance, self.responsey) + scrolltotal_distance -= scroll_distance + if scrolltotal_distance > 5: + # Last slide + self.compute_swipe(main, self.clickx + self.swipeoffsetx, scroll_start_from_y, scrolltotal_distance, self.responsey) + if self.finalclick: + # Click on the last row + self.run_until(main, + lambda: click_coords(self.clickx, self.window_endy - self.itemheight // 2), + lambda: main.appear(self.expected_button) + ) + + def run_until(self, main, func1, func2, times=6, sleeptime=1.5) -> bool: + """ + Repeat the execution of func1 up to a maximum of times or until func2 evaluates to True. + + func1 should perform a single valid operation or internally call a screenshot function. + A screenshot is triggered before evaluating func2. + + After each execution of func1, wait for sleeptime seconds. + + If func2 evaluates to True, exit and return True. Otherwise, return False. + + Note: The comment assumes that func1 produces a meaningful operation or internally calls a screenshot function, + and func2 is evaluated after each execution of func1. + """ + for i in range(times): + main.device.screenshot() + if func2(): + return True + func1() + timer = Timer(sleeptime).start() + while not timer.reached_and_reset(): + pass + main.device.screenshot() + if func2(): + return True + logger.warning("run_until exceeded max times") + return False + + def scroll_right_up(self, main, scrollx=928, times=3): + """ + scroll to top + """ + for i in range(times): + main.device.swipe((scrollx, 226), (scrollx, 561), duration=0.2) + timer = Timer(0.5).start() + while not timer.reached_and_reset(): + pass + \ No newline at end of file diff --git a/tasks/schedule/ui.py b/tasks/schedule/ui.py new file mode 100644 index 0000000..81c8f70 --- /dev/null +++ b/tasks/schedule/ui.py @@ -0,0 +1,80 @@ +from module.base.timer import Timer +from module.logger import logger +from module.ocr.ocr import DigitCounter +from tasks.base.ui import UI +from tasks.base.assets.assets_base_page import SCHEDULE_CHECK +from tasks.schedule.assets.assets_schedule import * +from tasks.schedule.scroll_select import ScrollSelect +import numpy as np + + +SCROLL_SELECT = ScrollSelect(window_button=SCROLL, first_item_button=FIRST_ITEM, expected_button=LOCATIONS, clickx=1114) +xs = np.linspace(299, 995, 3, dtype=int) +ys = np.linspace(268, 573, 3, dtype=int) + +class ScheduleUI(UI): + def select_then_check(self, dest_enter: ButtonWrapper, dest_check: ButtonWrapper): + timer = Timer(8, 10).start() + while 1: + self.device.screenshot() + self.appear_then_click(dest_enter, interval=1) + self.handle_affection_level_up() + if self.appear(dest_check): + return True + + if timer.reached(): + return False + + def click_then_check(self, coords, dest_check: ButtonWrapper): + click_coords = self.device.click_methods.get(self.config.Emulator_ControlMethod, self.device.click_adb) + timer = Timer(3, 5).start() + wait = Timer(1).start() + while 1: + click_coords(*coords) + self.device.screenshot() + if self.appear_then_click(dest_check): + return True + while not wait.reached_and_reset(): + pass + if timer.reached(): + return False + + def enter_location(self, location): + SCROLL_SELECT.select_location(self, location) + if not self.appear(LOCATIONS): + logger.error("Unable to navigate to page for location {}".format(location + 1)) + return False + return self.select_then_check(LOCATIONS, LOCATIONS_POPUP) + + def select_classrooms(self, ticket, classrooms): + for classroom in classrooms: + if ticket == 0: + return False + classroom = int(classroom) - 1 + col = int(classroom % len(xs)) + row = int((classroom - col) / len(ys)) + targetloc = (xs[col], ys[row]) + if not self.click_then_check(targetloc, START_LESSON): + logger.info(f"Classroom {classroom + 1} does not exist or has already been clicked") + continue + if self.select_then_check(START_LESSON, CONFIRM): + ticket -= 1 + if not self.select_then_check(CONFIRM, LOCATIONS_POPUP): + break + return True + + def get_ticket(self): + """ + Page: + in: page_bounty + """ + if not self.appear(SCHEDULE_CHECK): + logger.warning('OCR failed due to invalid page') + return False + ticket, _, total = DigitCounter(OCR_TICKET).ocr_single_line(self.device.image) + if total == 0: + logger.warning('Invalid ticket') + return False + logger.attr('ScheduleTicket', ticket) + #self.config.stored.BountyTicket.set(ticket) + return ticket