diff --git a/assets/cn/smallevent/EVENT_PREPARE_ENTRY.png b/assets/cn/smallevent/EVENT_PREPARE_ENTRY.png new file mode 100644 index 000000000..9ec104e77 Binary files /dev/null and b/assets/cn/smallevent/EVENT_PREPARE_ENTRY.png differ diff --git a/assets/cn/smallevent/EVENT_PREPARE_PAGE.png b/assets/cn/smallevent/EVENT_PREPARE_PAGE.png new file mode 100644 index 000000000..1530df101 Binary files /dev/null and b/assets/cn/smallevent/EVENT_PREPARE_PAGE.png differ diff --git a/assets/cn/ui/EVENTPRE_GOTO_MAIN.png b/assets/cn/ui/EVENTPRE_GOTO_MAIN.png new file mode 100644 index 000000000..50ebf6f58 Binary files /dev/null and b/assets/cn/ui/EVENTPRE_GOTO_MAIN.png differ diff --git a/module/smallevent/assets.py b/module/smallevent/assets.py index ec54abc25..05f3a4de0 100644 --- a/module/smallevent/assets.py +++ b/module/smallevent/assets.py @@ -12,6 +12,8 @@ ACTIVITY_ONE_PAGE = Button(area={'cn': (102, 515, 277, 600), 'en': (102, 515, 27 ACTIVITY_SELECTED_GRID = Button(area={'cn': (4, 241, 30, 344), 'en': (4, 241, 30, 344), 'jp': (4, 241, 30, 344), 'tw': (4, 241, 30, 344)}, color={'cn': (165, 118, 77), 'en': (165, 118, 77), 'jp': (165, 118, 77), 'tw': (165, 118, 77)}, button={'cn': (4, 241, 30, 344), 'en': (4, 241, 30, 344), 'jp': (4, 241, 30, 344), 'tw': (4, 241, 30, 344)}, file={'cn': './assets/cn/smallevent/ACTIVITY_SELECTED_GRID.png', 'en': './assets/cn/smallevent/ACTIVITY_SELECTED_GRID.png', 'jp': './assets/cn/smallevent/ACTIVITY_SELECTED_GRID.png', 'tw': './assets/cn/smallevent/ACTIVITY_SELECTED_GRID.png'}) EVENT_NOTIFY_ENTRY = Button(area={'cn': (1182, 164, 1258, 186), 'en': (1182, 164, 1258, 186), 'jp': (1182, 164, 1258, 186), 'tw': (1182, 164, 1258, 186)}, color={'cn': (110, 112, 115), 'en': (110, 112, 115), 'jp': (110, 112, 115), 'tw': (110, 112, 115)}, button={'cn': (1182, 164, 1258, 186), 'en': (1182, 164, 1258, 186), 'jp': (1182, 164, 1258, 186), 'tw': (1182, 164, 1258, 186)}, file={'cn': './assets/cn/smallevent/EVENT_NOTIFY_ENTRY.png', 'en': './assets/cn/smallevent/EVENT_NOTIFY_ENTRY.png', 'jp': './assets/cn/smallevent/EVENT_NOTIFY_ENTRY.png', 'tw': './assets/cn/smallevent/EVENT_NOTIFY_ENTRY.png'}) EVENT_NOTIFY_PAGE = Button(area={'cn': (117, 9, 337, 46), 'en': (117, 9, 337, 46), 'jp': (117, 9, 337, 46), 'tw': (117, 9, 337, 46)}, color={'cn': (82, 90, 118), 'en': (82, 90, 118), 'jp': (82, 90, 118), 'tw': (82, 90, 118)}, button={'cn': (117, 9, 337, 46), 'en': (117, 9, 337, 46), 'jp': (117, 9, 337, 46), 'tw': (117, 9, 337, 46)}, file={'cn': './assets/cn/smallevent/EVENT_NOTIFY_PAGE.png', 'en': './assets/cn/smallevent/EVENT_NOTIFY_PAGE.png', 'jp': './assets/cn/smallevent/EVENT_NOTIFY_PAGE.png', 'tw': './assets/cn/smallevent/EVENT_NOTIFY_PAGE.png'}) +EVENT_PREPARE_ENTRY = Button(area={'cn': (1077, 165, 1145, 188), 'en': (1077, 165, 1145, 188), 'jp': (1077, 165, 1145, 188), 'tw': (1077, 165, 1145, 188)}, color={'cn': (125, 126, 129), 'en': (125, 126, 129), 'jp': (125, 126, 129), 'tw': (125, 126, 129)}, button={'cn': (1077, 165, 1145, 188), 'en': (1077, 165, 1145, 188), 'jp': (1077, 165, 1145, 188), 'tw': (1077, 165, 1145, 188)}, file={'cn': './assets/cn/smallevent/EVENT_PREPARE_ENTRY.png', 'en': './assets/cn/smallevent/EVENT_PREPARE_ENTRY.png', 'jp': './assets/cn/smallevent/EVENT_PREPARE_ENTRY.png', 'tw': './assets/cn/smallevent/EVENT_PREPARE_ENTRY.png'}) +EVENT_PREPARE_PAGE = Button(area={'cn': (92, 18, 213, 48), 'en': (92, 18, 213, 48), 'jp': (92, 18, 213, 48), 'tw': (92, 18, 213, 48)}, color={'cn': (100, 105, 116), 'en': (100, 105, 116), 'jp': (100, 105, 116), 'tw': (100, 105, 116)}, button={'cn': (92, 18, 213, 48), 'en': (92, 18, 213, 48), 'jp': (92, 18, 213, 48), 'tw': (92, 18, 213, 48)}, file={'cn': './assets/cn/smallevent/EVENT_PREPARE_PAGE.png', 'en': './assets/cn/smallevent/EVENT_PREPARE_PAGE.png', 'jp': './assets/cn/smallevent/EVENT_PREPARE_PAGE.png', 'tw': './assets/cn/smallevent/EVENT_PREPARE_PAGE.png'}) SEVEND_TASK_20250320 = Button(area={'cn': (323, 103, 823, 271), 'en': (323, 103, 823, 271), 'jp': (323, 103, 823, 271), 'tw': (323, 103, 823, 271)}, color={'cn': (215, 164, 151), 'en': (215, 164, 151), 'jp': (215, 164, 151), 'tw': (215, 164, 151)}, button={'cn': (323, 103, 823, 271), 'en': (323, 103, 823, 271), 'jp': (323, 103, 823, 271), 'tw': (323, 103, 823, 271)}, file={'cn': './assets/cn/smallevent/SEVEND_TASK_20250320.png', 'en': './assets/cn/smallevent/SEVEND_TASK_20250320.png', 'jp': './assets/cn/smallevent/SEVEND_TASK_20250320.png', 'tw': './assets/cn/smallevent/SEVEND_TASK_20250320.png'}) SEVEND_TASK_FINISH_20250320 = Button(area={'cn': (322, 293, 373, 341), 'en': (322, 293, 373, 341), 'jp': (322, 293, 373, 341), 'tw': (322, 293, 373, 341)}, color={'cn': (219, 214, 211), 'en': (219, 214, 211), 'jp': (219, 214, 211), 'tw': (219, 214, 211)}, button={'cn': (322, 293, 373, 341), 'en': (322, 293, 373, 341), 'jp': (322, 293, 373, 341), 'tw': (322, 293, 373, 341)}, file={'cn': './assets/cn/smallevent/SEVEND_TASK_FINISH_20250320.png', 'en': './assets/cn/smallevent/SEVEND_TASK_FINISH_20250320.png', 'jp': './assets/cn/smallevent/SEVEND_TASK_FINISH_20250320.png', 'tw': './assets/cn/smallevent/SEVEND_TASK_FINISH_20250320.png'}) SEVEND_TASK_GET1_20250320 = Button(area={'cn': (704, 381, 866, 425), 'en': (704, 381, 866, 425), 'jp': (704, 381, 866, 425), 'tw': (704, 381, 866, 425)}, color={'cn': (157, 86, 79), 'en': (157, 86, 79), 'jp': (157, 86, 79), 'tw': (157, 86, 79)}, button={'cn': (704, 381, 866, 425), 'en': (704, 381, 866, 425), 'jp': (704, 381, 866, 425), 'tw': (704, 381, 866, 425)}, file={'cn': './assets/cn/smallevent/SEVEND_TASK_GET1_20250320.png', 'en': './assets/cn/smallevent/SEVEND_TASK_GET1_20250320.png', 'jp': './assets/cn/smallevent/SEVEND_TASK_GET1_20250320.png', 'tw': './assets/cn/smallevent/SEVEND_TASK_GET1_20250320.png'}) diff --git a/module/smallevent/samllevent.py b/module/smallevent/samllevent.py index de59b169c..29d3518f6 100644 --- a/module/smallevent/samllevent.py +++ b/module/smallevent/samllevent.py @@ -275,9 +275,8 @@ class SmallEvent(UI): if self.appear_then_click(GET_ITEMS_1,offset=(10, 10), interval=1): continue - def goto_sevenD_page(self,page_area,orc_api): + def goto_sevenD_page(self,page_area,orc_api,button_text,exclude_text,skip_first_screenshot=True): self.ui_ensure(page_main) - skip_first_screenshot = True CLICK_COUNT = 0 NOCLICK_COUNT = 0 NOCLICK_TIMER =Timer(3,count=10) @@ -354,6 +353,54 @@ class SmallEvent(UI): break return False,None + def goto_sevenD_page_v2(self,page_area,orc_api,button_text,exclude_text,skip_first_screenshot=True):#for the event prepare page + self.ui_ensure(page_main) + NOCLICK_COUNT = 0 + NOCLICK_TIMER =Timer(3,count=10) + while 1: + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() + if self.appear_then_click(EVENT_PREPARE_ENTRY, offset=(5, 5), interval=3): + continue + + if self.appear(EVENT_PREPARE_PAGE, offset=(5,5)): + all_words = self.recognize_activity_page(self.device.image,page_area,orc_api) + # all_words = None + if not all_words: + event_pre_button_location = self.locate_button_by_text(self.device.image, button_text, exclude_text, page_area,interval=5,orc_api=orc_api) + if isinstance(event_pre_button_location, dict): + event_pre_button = self.location_2_button(event_pre_button_location, button_text, base_loc=page_area) + self.device.click(event_pre_button) + self.device.sleep(0.3) + continue + elif event_pre_button_location == "cooldowning": + # 冷却中,等待 + continue + else: + # 未找到按钮,跳出循环或进行其他处理 + logger.warning(f"未找到{button_text}按钮") + break + else: + go_count = self.recognize_activiy_status(all_words) + if go_count >= 2: + logger.warning("七天小任务当前没有可领取项") + return "no_get",all_words + return True,all_words + + if self.story_skip(): #the prepare page may appear story + continue + + NOCLICK_TIMER.start() + if NOCLICK_TIMER.reached(): + NOCLICK_COUNT += 1 + NOCLICK_TIMER.reset() + if NOCLICK_COUNT >= 5: + logger.info("GOTO_SEVEND_TASK No click TIMER REACHED") + break + return False,None + def ocr_api_init(self): if self.config.Smallevent_OcrModel == "baidu": if self.config.DropRecord_BaiduAPIKey != "null" and self.config.DropRecord_BaiduAPISecret != "null": @@ -372,48 +419,34 @@ class SmallEvent(UI): else: logger.warning("未配置OcrModel") return False - + + def sevenD_harvest(self, page_area, ORC_API, goto_sevenD_page_func, button_text=None,exclude_text=None): + goPage_result = goto_sevenD_page_func(page_area, ORC_API, button_text,exclude_text) + if goPage_result[0] == "no_get": + self.resolve_task(goPage_result[1]) + elif goPage_result[0] is True: + self.get_reward(page_area, ORC_API) + if self.resolve_task(goPage_result[1]): + logger.info("resolved the task, skip the update immediately") + # return True + if self.config.Smallevent_UpdateInfoImmediately == True: + self.device.sleep(1) + self.device.screenshot() + update_words = self.recognize_activity_page(self.device.image,page_area ,ORC_API) + if update_words: + self.recognize_activiy_status(update_words) + else: + logger.warning("未成功进入七天小任务页面") + def run(self): - # # LogRes(self.config).SevenDayStatus += 11 - # # logger.hr(LogRes(self.config).SevenDayStatus) - # # logger.hr(self.config.cross_get('Dashboard.SevenDayStatus.Value')) - # if self.config.Smallevent_SevenDayTask == True: - # task_icon = f"SEVEND_TASK_{self.SEVEND_DATE}" - # task_get1 = f"SEVEND_TASK_GET1_{self.SEVEND_DATE}" - # task_get2 = f"SEVEND_TASK_GET2_{self.SEVEND_DATE}" - # task_finish = f"SEVEND_TASK_FINISH_{self.SEVEND_DATE}" - # # task_unget1 = f"SEVEND_TASK_UNGET1_{self.SEVEND_DATE}" - # # task_unget2 = f"SEVEND_TASK_UNGET2_{self.SEVEND_DATE}" - # self.SevenDayTask( - # SEVEND_TASK_ICON_MAIN=globals()[task_icon], - # SEVEND_TASK_GET1=globals()[task_get1], - # SEVEND_TASK_GET2=globals()[task_get2], - # SEVEND_TASK_FINISH=globals()[task_finish], - # # SEVEND_TASK_UNGET1=globals()[task_unget1], - # # SEVEND_TASK_UNGET2=globals()[task_unget2] - # ) - # else:LogRes(self.config).SevenDayStatus = 0 if datetime.now() < datetime(2025, 9, 25, 12, 0, 0):#eventSet ORC_API = self.ocr_api_init() if ORC_API: page_area = (281, 79, 1254, 560) - # page_area =(0,0,1280,720) - goPage_result = self.goto_sevenD_page(page_area, ORC_API) - if goPage_result[0] == "no_get": - pass - elif goPage_result[0] is True: - self.get_reward(page_area, ORC_API) - if self.resolve_task(goPage_result[1]): - logger.info("resolved the task, skip the update immediately") - # return True - if self.config.Smallevent_UpdateInfoImmediately == True: - self.device.sleep(1) - self.device.screenshot() - update_words = self.recognize_activity_page(self.device.image,page_area ,ORC_API) - if update_words: - self.recognize_activiy_status(update_words) - else: - logger.warning("未成功进入七天小任务页面") + self.sevenD_harvest(page_area,ORC_API,goto_sevenD_page_func=self.goto_sevenD_page) + page_area = (0, 0, 1280, 720) + self.sevenD_harvest(page_area,ORC_API,goto_sevenD_page_func=self.goto_sevenD_page_v2, + button_text="的邀约",exclude_text=["无"])#eventSet else: logger.warning("Ocr API 初始化失败") else: diff --git a/module/ui/assets.py b/module/ui/assets.py index eac4533e1..14ad50ea2 100644 --- a/module/ui/assets.py +++ b/module/ui/assets.py @@ -38,6 +38,7 @@ DORM_FEED_CANCEL = Button(area={'cn': (494, 510, 547, 536), 'en': (445, 491, 594 DORM_GOTO_MAIN = Button(area={'cn': (40, 30, 62, 60), 'en': (40, 30, 62, 60), 'jp': (40, 30, 62, 60), 'tw': (40, 30, 62, 60)}, color={'cn': (255, 226, 133), 'en': (255, 226, 133), 'jp': (255, 226, 133), 'tw': (255, 226, 133)}, button={'cn': (40, 30, 62, 60), 'en': (40, 30, 62, 60), 'jp': (40, 30, 62, 60), 'tw': (40, 30, 62, 60)}, file={'cn': './assets/cn/ui/DORM_GOTO_MAIN.png', 'en': './assets/en/ui/DORM_GOTO_MAIN.png', 'jp': './assets/jp/ui/DORM_GOTO_MAIN.png', 'tw': './assets/tw/ui/DORM_GOTO_MAIN.png'}) DORM_INFO = Button(area={'cn': (1071, 609, 1142, 640), 'en': (1072, 620, 1142, 632), 'jp': (1073, 615, 1140, 644), 'tw': (1070, 609, 1143, 642)}, color={'cn': (155, 182, 220), 'en': (146, 177, 214), 'jp': (157, 185, 222), 'tw': (149, 180, 223)}, button={'cn': (1071, 609, 1142, 640), 'en': (1072, 620, 1142, 632), 'jp': (1073, 615, 1140, 644), 'tw': (1070, 609, 1143, 642)}, file={'cn': './assets/cn/ui/DORM_INFO.png', 'en': './assets/en/ui/DORM_INFO.png', 'jp': './assets/jp/ui/DORM_INFO.png', 'tw': './assets/tw/ui/DORM_INFO.png'}) DORM_TROPHY_CONFIRM = Button(area={'cn': (590, 473, 690, 508), 'en': (589, 470, 689, 510), 'jp': (588, 472, 689, 509), 'tw': (590, 473, 690, 508)}, color={'cn': (245, 167, 88), 'en': (233, 161, 87), 'jp': (243, 166, 89), 'tw': (245, 167, 88)}, button={'cn': (590, 473, 690, 508), 'en': (589, 470, 689, 510), 'jp': (588, 472, 689, 509), 'tw': (590, 473, 690, 508)}, file={'cn': './assets/cn/ui/DORM_TROPHY_CONFIRM.png', 'en': './assets/en/ui/DORM_TROPHY_CONFIRM.png', 'jp': './assets/jp/ui/DORM_TROPHY_CONFIRM.png', 'tw': './assets/tw/ui/DORM_TROPHY_CONFIRM.png'}) +EVENTPRE_GOTO_MAIN = Button(area={'cn': (1218, 17, 1261, 60), 'en': (1218, 17, 1261, 60), 'jp': (1218, 17, 1261, 60), 'tw': (1218, 17, 1261, 60)}, color={'cn': (215, 215, 215), 'en': (215, 215, 215), 'jp': (215, 215, 215), 'tw': (215, 215, 215)}, button={'cn': (1218, 17, 1261, 60), 'en': (1218, 17, 1261, 60), 'jp': (1218, 17, 1261, 60), 'tw': (1218, 17, 1261, 60)}, file={'cn': './assets/cn/ui/EVENTPRE_GOTO_MAIN.png', 'en': './assets/cn/ui/EVENTPRE_GOTO_MAIN.png', 'jp': './assets/cn/ui/EVENTPRE_GOTO_MAIN.png', 'tw': './assets/cn/ui/EVENTPRE_GOTO_MAIN.png'}) EVENT_CHECK = Button(area={'cn': (123, 63, 206, 109), 'en': (123, 63, 206, 109), 'jp': (123, 63, 206, 109), 'tw': (123, 63, 206, 109)}, color={'cn': (88, 104, 138), 'en': (88, 104, 138), 'jp': (88, 104, 138), 'tw': (88, 104, 138)}, button={'cn': (123, 63, 206, 109), 'en': (123, 63, 206, 109), 'jp': (123, 63, 206, 109), 'tw': (123, 63, 206, 109)}, file={'cn': './assets/cn/ui/EVENT_CHECK.png', 'en': './assets/en/ui/EVENT_CHECK.png', 'jp': './assets/jp/ui/EVENT_CHECK.png', 'tw': './assets/tw/ui/EVENT_CHECK.png'}) EVENT_LIST_CHECK = Button(area={'cn': (123, 15, 232, 39), 'en': (123, 15, 223, 39), 'jp': (122, 14, 233, 39), 'tw': (123, 15, 232, 39)}, color={'cn': (151, 166, 206), 'en': (109, 122, 163), 'jp': (86, 96, 131), 'tw': (166, 181, 216)}, button={'cn': (123, 15, 232, 39), 'en': (123, 15, 223, 39), 'jp': (122, 14, 233, 39), 'tw': (123, 15, 232, 39)}, file={'cn': './assets/cn/ui/EVENT_LIST_CHECK.png', 'en': './assets/en/ui/EVENT_LIST_CHECK.png', 'jp': './assets/jp/ui/EVENT_LIST_CHECK.png', 'tw': './assets/tw/ui/EVENT_LIST_CHECK.png'}) EXERCISE_CHECK = Button(area={'cn': (1065, 340, 1204, 382), 'en': (1078, 343, 1190, 382), 'jp': (1063, 339, 1205, 382), 'tw': (1066, 342, 1203, 381)}, color={'cn': (129, 166, 220), 'en': (138, 174, 225), 'jp': (130, 165, 219), 'tw': (138, 172, 222)}, button={'cn': (1065, 340, 1204, 382), 'en': (1078, 343, 1190, 382), 'jp': (1063, 339, 1205, 382), 'tw': (1066, 342, 1203, 381)}, file={'cn': './assets/cn/ui/EXERCISE_CHECK.png', 'en': './assets/en/ui/EXERCISE_CHECK.png', 'jp': './assets/jp/ui/EXERCISE_CHECK.png', 'tw': './assets/tw/ui/EXERCISE_CHECK.png'}) diff --git a/module/ui/page.py b/module/ui/page.py index fbc1e5cf7..a40f1f2ad 100644 --- a/module/ui/page.py +++ b/module/ui/page.py @@ -8,7 +8,7 @@ from module.retire.assets import DOCK_CHECK,IN_RETIREMENT_CHECK from module.ui.assets import * from module.ui_white.assets import * from module.ship_ir.assets import HANDBOOK_CHECK,MAIN_GOTO_COLLECTION,MAIN_GOTO_COLLECTION_WHITE,COLLECTION_CHECK,COLLECTION_GOTO_HANDBOOK - +from module.smallevent.assets import EVENT_PREPARE_PAGE,EVENT_PREPARE_ENTRY class Page: # Key: str, page name like "page_main" # Value: Page, page instance @@ -357,3 +357,7 @@ page_rpg_city.link(button=RPG_HOME, destination=page_main) page_hospital = Page(HOSIPITAL_CHECK) page_hospital.link(button=GOTO_MAIN_WHITE, destination=page_main) page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_hospital) + +#event prepare page +page_event_prepare = Page(EVENT_PREPARE_PAGE) +page_event_prepare.link(button=EVENTPRE_GOTO_MAIN, destination=page_main) \ No newline at end of file