diff --git a/assets/cn/smallevent/NINJA_BATTLE_ENTRY.png b/assets/cn/smallevent/NINJA_BATTLE_ENTRY.png new file mode 100644 index 000000000..d1a6fec90 Binary files /dev/null and b/assets/cn/smallevent/NINJA_BATTLE_ENTRY.png differ diff --git a/assets/cn/smallevent/NINJA_BATTLE_GOHOME.png b/assets/cn/smallevent/NINJA_BATTLE_GOHOME.png new file mode 100644 index 000000000..15fd959f6 Binary files /dev/null and b/assets/cn/smallevent/NINJA_BATTLE_GOHOME.png differ diff --git a/assets/cn/smallevent/NINJA_BATTLE_PICKUP.png b/assets/cn/smallevent/NINJA_BATTLE_PICKUP.png new file mode 100644 index 000000000..f3f53ddd3 Binary files /dev/null and b/assets/cn/smallevent/NINJA_BATTLE_PICKUP.png differ diff --git a/assets/cn/smallevent/NINJA_BATTLE_TASK.png b/assets/cn/smallevent/NINJA_BATTLE_TASK.png new file mode 100644 index 000000000..f46ab01e7 Binary files /dev/null and b/assets/cn/smallevent/NINJA_BATTLE_TASK.png differ diff --git a/assets/cn/smallevent/NINJA_CITY_ENTRY.png b/assets/cn/smallevent/NINJA_CITY_ENTRY.png new file mode 100644 index 000000000..ddbd14bcc Binary files /dev/null and b/assets/cn/smallevent/NINJA_CITY_ENTRY.png differ diff --git a/assets/cn/smallevent/NINJA_TASK_REWARD.png b/assets/cn/smallevent/NINJA_TASK_REWARD.png new file mode 100644 index 000000000..1ec2f5a96 Binary files /dev/null and b/assets/cn/smallevent/NINJA_TASK_REWARD.png differ diff --git a/assets/cn/smallevent/NINJA_TASK_REWARD_EMPTY.png b/assets/cn/smallevent/NINJA_TASK_REWARD_EMPTY.png new file mode 100644 index 000000000..3121ca052 Binary files /dev/null and b/assets/cn/smallevent/NINJA_TASK_REWARD_EMPTY.png differ diff --git a/module/smallevent/assets.py b/module/smallevent/assets.py index 10b800f5c..46a9b28bb 100644 --- a/module/smallevent/assets.py +++ b/module/smallevent/assets.py @@ -18,6 +18,13 @@ EVENT_PREPARE_ENTRY_3 = Button(area={'cn': (967, 165, 1036, 185), 'en': (967, 16 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'}) EVENT_PREPARE_PAGE_2 = Button(area={'cn': (92, 18, 213, 48), 'en': (92, 18, 213, 48), 'jp': (92, 18, 213, 48), 'tw': (92, 18, 213, 48)}, color={'cn': (97, 102, 111), 'en': (97, 102, 111), 'jp': (97, 102, 111), 'tw': (97, 102, 111)}, 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_2.png', 'en': './assets/cn/smallevent/EVENT_PREPARE_PAGE_2.png', 'jp': './assets/cn/smallevent/EVENT_PREPARE_PAGE_2.png', 'tw': './assets/cn/smallevent/EVENT_PREPARE_PAGE_2.png'}) EVENT_PREPARE_PAGE_3 = Button(area={'cn': (96, 21, 221, 58), 'en': (96, 21, 221, 58), 'jp': (96, 21, 221, 58), 'tw': (96, 21, 221, 58)}, color={'cn': (79, 85, 96), 'en': (79, 85, 96), 'jp': (79, 85, 96), 'tw': (79, 85, 96)}, button={'cn': (96, 21, 221, 58), 'en': (96, 21, 221, 58), 'jp': (96, 21, 221, 58), 'tw': (96, 21, 221, 58)}, file={'cn': './assets/cn/smallevent/EVENT_PREPARE_PAGE_3.png', 'en': './assets/cn/smallevent/EVENT_PREPARE_PAGE_3.png', 'jp': './assets/cn/smallevent/EVENT_PREPARE_PAGE_3.png', 'tw': './assets/cn/smallevent/EVENT_PREPARE_PAGE_3.png'}) +NINJA_BATTLE_ENTRY = Button(area={'cn': (1102, 545, 1213, 667), 'en': (1102, 545, 1213, 667), 'jp': (1102, 545, 1213, 667), 'tw': (1102, 545, 1213, 667)}, color={'cn': (71, 79, 77), 'en': (71, 79, 77), 'jp': (71, 79, 77), 'tw': (71, 79, 77)}, button={'cn': (1102, 545, 1213, 667), 'en': (1102, 545, 1213, 667), 'jp': (1102, 545, 1213, 667), 'tw': (1102, 545, 1213, 667)}, file={'cn': './assets/cn/smallevent/NINJA_BATTLE_ENTRY.png', 'en': './assets/cn/smallevent/NINJA_BATTLE_ENTRY.png', 'jp': './assets/cn/smallevent/NINJA_BATTLE_ENTRY.png', 'tw': './assets/cn/smallevent/NINJA_BATTLE_ENTRY.png'}) +NINJA_BATTLE_GOHOME = Button(area={'cn': (1197, 49, 1238, 79), 'en': (1197, 49, 1238, 79), 'jp': (1197, 49, 1238, 79), 'tw': (1197, 49, 1238, 79)}, color={'cn': (65, 101, 101), 'en': (65, 101, 101), 'jp': (65, 101, 101), 'tw': (65, 101, 101)}, button={'cn': (1197, 49, 1238, 79), 'en': (1197, 49, 1238, 79), 'jp': (1197, 49, 1238, 79), 'tw': (1197, 49, 1238, 79)}, file={'cn': './assets/cn/smallevent/NINJA_BATTLE_GOHOME.png', 'en': './assets/cn/smallevent/NINJA_BATTLE_GOHOME.png', 'jp': './assets/cn/smallevent/NINJA_BATTLE_GOHOME.png', 'tw': './assets/cn/smallevent/NINJA_BATTLE_GOHOME.png'}) +NINJA_BATTLE_PICKUP = Button(area={'cn': (970, 514, 1030, 546), 'en': (970, 514, 1030, 546), 'jp': (970, 514, 1030, 546), 'tw': (970, 514, 1030, 546)}, color={'cn': (59, 102, 102), 'en': (59, 102, 102), 'jp': (59, 102, 102), 'tw': (59, 102, 102)}, button={'cn': (970, 514, 1030, 546), 'en': (970, 514, 1030, 546), 'jp': (970, 514, 1030, 546), 'tw': (970, 514, 1030, 546)}, file={'cn': './assets/cn/smallevent/NINJA_BATTLE_PICKUP.png', 'en': './assets/cn/smallevent/NINJA_BATTLE_PICKUP.png', 'jp': './assets/cn/smallevent/NINJA_BATTLE_PICKUP.png', 'tw': './assets/cn/smallevent/NINJA_BATTLE_PICKUP.png'}) +NINJA_BATTLE_TASK = Button(area={'cn': (808, 645, 876, 660), 'en': (808, 645, 876, 660), 'jp': (808, 645, 876, 660), 'tw': (808, 645, 876, 660)}, color={'cn': (121, 120, 120), 'en': (121, 120, 120), 'jp': (121, 120, 120), 'tw': (121, 120, 120)}, button={'cn': (808, 645, 876, 660), 'en': (808, 645, 876, 660), 'jp': (808, 645, 876, 660), 'tw': (808, 645, 876, 660)}, file={'cn': './assets/cn/smallevent/NINJA_BATTLE_TASK.png', 'en': './assets/cn/smallevent/NINJA_BATTLE_TASK.png', 'jp': './assets/cn/smallevent/NINJA_BATTLE_TASK.png', 'tw': './assets/cn/smallevent/NINJA_BATTLE_TASK.png'}) +NINJA_CITY_ENTRY = Button(area={'cn': (1090, 595, 1259, 665), 'en': (1090, 595, 1259, 665), 'jp': (1090, 595, 1259, 665), 'tw': (1090, 595, 1259, 665)}, color={'cn': (151, 158, 159), 'en': (151, 158, 159), 'jp': (151, 158, 159), 'tw': (151, 158, 159)}, button={'cn': (1090, 595, 1259, 665), 'en': (1090, 595, 1259, 665), 'jp': (1090, 595, 1259, 665), 'tw': (1090, 595, 1259, 665)}, file={'cn': './assets/cn/smallevent/NINJA_CITY_ENTRY.png', 'en': './assets/cn/smallevent/NINJA_CITY_ENTRY.png', 'jp': './assets/cn/smallevent/NINJA_CITY_ENTRY.png', 'tw': './assets/cn/smallevent/NINJA_CITY_ENTRY.png'}) +NINJA_TASK_REWARD = Button(area={'cn': (949, 94, 1059, 130), 'en': (949, 94, 1059, 130), 'jp': (949, 94, 1059, 130), 'tw': (949, 94, 1059, 130)}, color={'cn': (111, 113, 114), 'en': (111, 113, 114), 'jp': (111, 113, 114), 'tw': (111, 113, 114)}, button={'cn': (949, 94, 1059, 130), 'en': (949, 94, 1059, 130), 'jp': (949, 94, 1059, 130), 'tw': (949, 94, 1059, 130)}, file={'cn': './assets/cn/smallevent/NINJA_TASK_REWARD.png', 'en': './assets/cn/smallevent/NINJA_TASK_REWARD.png', 'jp': './assets/cn/smallevent/NINJA_TASK_REWARD.png', 'tw': './assets/cn/smallevent/NINJA_TASK_REWARD.png'}) +NINJA_TASK_REWARD_EMPTY = Button(area={'cn': (1004, 169, 1057, 211), 'en': (1004, 169, 1057, 211), 'jp': (1004, 169, 1057, 211), 'tw': (1004, 169, 1057, 211)}, color={'cn': (190, 199, 205), 'en': (190, 199, 205), 'jp': (190, 199, 205), 'tw': (190, 199, 205)}, button={'cn': (1004, 169, 1057, 211), 'en': (1004, 169, 1057, 211), 'jp': (1004, 169, 1057, 211), 'tw': (1004, 169, 1057, 211)}, file={'cn': './assets/cn/smallevent/NINJA_TASK_REWARD_EMPTY.png', 'en': './assets/cn/smallevent/NINJA_TASK_REWARD_EMPTY.png', 'jp': './assets/cn/smallevent/NINJA_TASK_REWARD_EMPTY.png', 'tw': './assets/cn/smallevent/NINJA_TASK_REWARD_EMPTY.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 a9e373ad4..d90668ca4 100644 --- a/module/smallevent/samllevent.py +++ b/module/smallevent/samllevent.py @@ -3,7 +3,6 @@ import sys import re from datetime import datetime, timedelta -sys.path.append(r'C:/Users/W1NDe/Documents/GitHub/M-AzurLaneAutoScript') from module.base.button import ButtonGrid from module.ui.ui import UI from module.ui.page import page_main @@ -490,6 +489,70 @@ class SmallEvent(UI): break return False,None + def ninja_city(self,skip_first_screenshot=True): + self.ui_ensure(page_main) + NINJA_GET_REWARD = 0 + 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_3, offset=(5, 5), interval=3): + continue + if self.appear_then_click(NINJA_CITY_ENTRY, offset=(5, 5), interval=3): + continue + if self.appear_then_click(NINJA_BATTLE_ENTRY, offset=(5, 5), interval=3): + continue + if NINJA_GET_REWARD >= 4: + break + if self.appear_then_click(GET_ITEMS_1,offset=(10, 10), interval=3): + NINJA_GET_REWARD += 1 + continue + if self.appear_then_click_nocheck(NINJA_BATTLE_PICKUP, offset=(5, 5)): + self.device.sleep(3) + continue + if self.story_skip(): + continue + NOCLICK_TIMER.start() + if NOCLICK_TIMER.reached(): + NOCLICK_COUNT += 1 + NOCLICK_TIMER.reset() + if NOCLICK_COUNT >= 5: + logger.warning("ninja_city loop 1 No click TIMER REACHED") + return False + NOCLICK_COUNT = 0 + NOCLICK_TIMER =Timer(3,count=10) + while 1: + self.device.screenshot() + if self.appear_then_click(NINJA_BATTLE_TASK, offset=(5, 5), interval=3): + continue + if self.appear_then_click(NINJA_TASK_REWARD, offset=(5, 5), interval=3): + continue + if self.appear_then_click(GET_ITEMS_1,offset=(10, 10), interval=3): + continue + if self.appear(NINJA_TASK_REWARD_EMPTY, offset=(5, 5), interval=3): + self.device.click(NINJA_BATTLE_GOHOME) + break + if self.story_skip(): + continue + NOCLICK_TIMER.start() + if NOCLICK_TIMER.reached(): + NOCLICK_COUNT += 1 + NOCLICK_TIMER.reset() + if NOCLICK_COUNT >= 5: + logger.warning("ninja_city loop 2 No click TIMER REACHED") + return False + NOCLICK_COUNT = 0 + NOCLICK_TIMER =Timer(3,count=10) + while 1: + self.device.screenshot() + if self.appear_then_click(NINJA_BATTLE_GOHOME, offset=(5, 5), interval=3): + continue + self.ui_ensure(page_main) + return True + def ocr_api_init(self): if self.config.Smallevent_OcrModel == "baidu": if self.config.DropRecord_BaiduAPIKey != "null" and self.config.DropRecord_BaiduAPISecret != "null": @@ -531,6 +594,11 @@ class SmallEvent(UI): def run(self): if datetime.now() < datetime(2025, 9, 25, 12, 0, 0):#eventSet + ninja_city_result = self.ninja_city() + if ninja_city_result: + logger.info("ninja_city success") + else: + logger.warning("ninja_city failed") ORC_API = self.ocr_api_init() if ORC_API: page_area = (281, 79, 1254, 560)