From 3dbb255dd9f2bc86181c5aa53874036f8d807f63 Mon Sep 17 00:00:00 2001 From: shenxian66ya <149819275+shenxian66ya@users.noreply.github.com> Date: Wed, 10 Jul 2024 23:12:15 +0800 Subject: [PATCH] add : [ JP ] activity sweep + explore_story + explore_mission --- core/color.py | 2 + core/default_config.py | 2 +- ...TPlatoonAndTheMysteryOfTheMissingShrimp.py | 397 ++++++++++++++++++ module/activities/__init__.py | 1 + module/explore_activity_challenge.py | 1 + module/explore_activity_mission.py | 2 + module/explore_activity_story.py | 2 + module/sweep_activity.py | 2 + .../enter1.png | Bin 0 -> 989 bytes .../enter2.png | Bin 0 -> 604 bytes .../enter3.png | Bin 0 -> 9907 bytes .../task-info.png | Bin 0 -> 4794 bytes .../JP/activity/common/task-no-goals.png | Bin 0 -> 6075 bytes ...TPlatoonAndTheMysteryOfTheMissingShrimp.py | 8 + src/images/JP/x_y_range/activity_common.py | 3 +- 15 files changed, 418 insertions(+), 2 deletions(-) create mode 100644 module/activities/SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp.py create mode 100644 src/images/JP/activity/SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp/enter1.png create mode 100644 src/images/JP/activity/SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp/enter2.png create mode 100644 src/images/JP/activity/SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp/enter3.png create mode 100644 src/images/JP/activity/SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp/task-info.png create mode 100644 src/images/JP/activity/common/task-no-goals.png create mode 100644 src/images/JP/x_y_range/activity/SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp.py diff --git a/core/color.py b/core/color.py index b0155eea4..8bad11237 100644 --- a/core/color.py +++ b/core/color.py @@ -2,6 +2,8 @@ import time import numpy as np +from core import image + def wait_loading(self): t_start = time.time() diff --git a/core/default_config.py b/core/default_config.py index 7d400b6c5..dfbbdf7c9 100644 --- a/core/default_config.py +++ b/core/default_config.py @@ -647,7 +647,7 @@ "current_game_activity": { "CN": "SweetSecretsAndGunfightsATaleOfAfterSchoolSweets", "Global": null, - "JP": null + "JP": "SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp" }, "dailyGameActivity": { "CN": null, diff --git a/module/activities/SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp.py b/module/activities/SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp.py new file mode 100644 index 000000000..db6f52986 --- /dev/null +++ b/module/activities/SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp.py @@ -0,0 +1,397 @@ +import importlib +import time +from core import color, picture, image +from module import main_story +from module.explore_normal_task import common_gird_method + + +def implement(self): + times = preprocess_activity_sweep_times(self.config["activity_sweep_times"]) + region = preprocess_activity_region(self.config["activity_sweep_task_number"]) + self.logger.info("activity sweep task number : " + str(region)) + self.logger.info("activity sweep times : " + str(times)) + if len(times) > 0: + sweep(self, region, times) + return True + + +def preprocess_activity_region(region): + if type(region) is int: + return [region] + if type(region) is str: + region = region.split(",") + for i in range(0, len(region)): + region[i] = int(region[i]) + return region + if type(region) is list: + for i in range(0, len(region)): + if type(region[i]) is int: + continue + region[i] = int(region[i]) + return region + + +def preprocess_activity_sweep_times(times): + if type(times) is int: + return [times] + if type(times) is float: + return [times] + if type(times) is str: + times = times.split(",") + for i in range(0, len(times)): + if '.' in times[i]: + times[i] = min(float(times[i]), 1.0) + elif '/' in times[i]: + temp = times[i].split("/") + times[i] = min(int(temp[0]) / int(temp[1]), 1.0) + else: + times[i] = int(times[i]) + return times + if type(times) is list: + for i in range(0, len(times)): + if type(times[i]) is int: + continue + if '.' in times[i]: + times[i] = min(float(times[i]), 1.0) + elif '/' in times[i]: + temp = times[i].split("/") + times[i] = min(int(temp[0]) / int(temp[1]), 1.0) + return times + + +def get_stage_data(): + module_path = 'src.explore_task_data.activities.iveAlive' + stage_module = importlib.import_module(module_path) + stage_data = getattr(stage_module, 'stage_data', None) + return stage_data + + +def sweep(self, number, times): + self.quick_method_to_main_page() + to_activity(self, "mission", True, True) + ap = self.get_ap() + sweep_one_time_ap = [0, 10, 10, 10, 10, 15, 15, 15, 15, 20, 20, 20, 20] + for i in range(0, min(len(number), len(times))): + sweep_times = times[i] + if type(sweep_times) is float: + sweep_times = int(ap * sweep_times / sweep_one_time_ap[number[i]]) + click_times = sweep_times + duration = 1 + if sweep_times > 50: + sweep_times = int(ap / sweep_one_time_ap[number[i]]) + click_times = int(sweep_times / 2) + 1 + duration = 0.3 + if sweep_times <= 0: + self.logger.warning("inadequate ap") + continue + self.logger.info("Start sweep task " + str(number[i]) + " :" + str(sweep_times) + " times") + to_mission_task_info(self, number[i]) + res = color.check_sweep_availability(self) + if res == "sss": + self.click(1032, 299, count=click_times, duration=duration, wait_over=True) + res = start_sweep(self, True) + if res == "inadequate_ap": + self.logger.warning("inadequate ap") + return True + elif res == "sweep_complete": + self.logger.info("Current sweep task " + str(number[i]) + " :" + str(sweep_times) + " times complete") + if i != len(number) - 1: + to_activity(self, "mission", True, True) + elif res == "pass" or res == "no-pass": + self.logger.warning("task not sss, sweep unavailable") + continue + return True + +def check_sweep_availability(self, plot): + if plot == "activity_task-info": + if image.compare_image(self, "activity_task-no-goals", False): + if not color.judge_rgb_range(self, 146, 522, 232, 255, 219, 255, 0, 30): + return "sss" + else: + return "no-pass" + else: + return color.check_sweep_availability(self) + elif plot == "main_story_episode-info": + if not color.judge_rgb_range(self, 362, 322, 232, 255, 219, 255, 0, 30): + return "sss" + else: + return "no-pass" + return "no-pass" + +def explore_story(self): + self.quick_method_to_main_page() + to_activity(self, "story", True, True) + last_target_task = 1 + total_stories = 11 + while self.flag_run: + plot = to_story_task_info(self, last_target_task) + res = check_sweep_availability(self, plot) + while res == "sss" and last_target_task <= total_stories - 1: + self.logger.info("Current story sss check next story") + self.click(1168, 353, duration=1, wait_over=True) + last_target_task += 1 + plot = picture.co_detect(self, img_ends=["activity_task-info", "main_story_episode-info"]) + res = check_sweep_availability(self, plot) + if last_target_task == total_stories and res == "sss": + self.logger.info("All STORY SSS") + return True + start_story(self) + to_activity(self, "mission", True) + to_activity(self, "story", True, True) + + +def start_story(self): + img_possibles = { + "activity_task-info": (940, 538), + "plot_menu": (1205, 34), + "plot_skip-plot-button": (1213, 116), + "plot_skip-plot-notice": (766, 520), + "main_story_episode-info": (629, 518), + } + rgb_ends = [ + "formation_edit1", + "reward_acquired" + ] + img_ends = "plot_formation-edit" + res = picture.co_detect(self, rgb_ends, None, img_ends, img_possibles, skip_first_screenshot=True) + if res == "formation_edit1" or res == "plot_formation-edit": + start_fight(self, 1) + main_story.auto_fight(self) + elif res == "reward_acquired": + pass + return + + +def start_fight(self, i): + rgb_possibles = { + "formation_edit" + str(i): (1156, 659) + } + img_possibles = { + "plot_formation-edit": (1156, 659) + } + rgb_ends = "fighting_feature" + picture.co_detect(self, rgb_ends, rgb_possibles, None, img_possibles, skip_first_screenshot=True) + + +def explore_mission(self): + self.quick_method_to_main_page() + to_activity(self, "mission", True, True) + last_target_mission = 1 + total_missions = 12 + characteristic = [ + 'pierce1', + 'mystic1', + 'burst1', + 'mystic1', + 'burst1', + 'mystic1', + 'burst1', + 'mystic1', + 'burst1', + 'mystic1', + 'burst1', + 'mystic1', + ] + while last_target_mission <= total_missions and self.flag_run: + to_mission_task_info(self, last_target_mission) + res = color.check_sweep_availability(self) + while res == "sss" and last_target_mission <= total_missions - 1 and self.flag_run: + self.logger.info("Current task sss check next task") + self.click(1168, 353, duration=1, wait_over=True) + last_target_mission += 1 + picture.co_detect(self, img_ends="activity_task-info") + res = color.check_sweep_availability(self) + if last_target_mission == total_missions and res == "sss": + self.logger.info("All MISSION SSS") + return True + number = self.config[characteristic[last_target_mission - 1]] + self.logger.info("according to config, choose formation " + str(number)) + to_formation_edit_i(self, number, (940, 538), True) + start_fight(self, number) + main_story.auto_fight(self) + to_activity(self, "story") + to_activity(self, "mission", True, True) + + +def explore_challenge(self): + self.quick_method_to_main_page() + to_activity(self, "challenge", True, True) + tasks = [ + "challenge2_sss", + "challenge4_sss", + "challenge2_task", + "challenge4_task", + ] + stage_data = get_stage_data() + for i in range(0, len(tasks)): + data = tasks[i].split("_") + task_number = int(data[0].replace("challenge", "")) + to_challenge_task_info(self, task_number) + current_task_stage_data = stage_data[tasks[i]] + need_fight = False + if "task" in data: + need_fight = True + elif "sss" in data: + res = color.check_sweep_availability(self) + if res == "sss": + self.logger.info("Challenge " + str(task_number) + " sss no need to fight") + to_activity(self, "challenge", True) + i += 1 + continue + elif res == "no-pass" or res == "pass": + need_fight = True + if need_fight: + common_gird_method(self, current_task_stage_data) + i += 1 + main_story.auto_fight(self) + if self.config['manual_boss']: + self.click(1235, 41) + to_activity(self, "mission", True) + to_activity(self, "challenge", True) + + +def to_activity(self, region, skip_first_screenshot=False, need_swipe=False): + task_info_x = { + 'CN': 1087, + 'Global': 1128, + 'JP': 1126 + } + img_possibles = { + "activity_enter1": (1196, 195), + "activity_enter2": (100, 149), + "activity_enter3": (218, 530), + 'activity_fight-success-confirm': (640, 663), + "plot_menu": (1205, 34), + "plot_skip-plot-button": (1213, 116), + 'purchase_ap_notice': (919, 168), + "plot_skip-plot-notice": (766, 520), + "normal_task_help": (1017, 131), + "activity_task-info": (task_info_x[self.server],141), + "activity_play-guide": (1184, 152), + 'main_story_fight-confirm': (1168, 659), + "main_story_episode-info": (917, 161), + 'normal_task_prize-confirm': (776, 655), + 'normal_task_fail-confirm': (643, 658), + 'normal_task_task-finish': (1038, 662), + 'normal_task_fight-confirm': (1168, 659), + "normal_task_sweep-complete": (643, 585), + "normal_task_start-sweep-notice": (887, 164), + 'normal_task_skip-sweep-complete': (643, 506), + 'normal_task_fight-complete-confirm': (1160, 666), + 'normal_task_reward-acquired-confirm': (800, 660), + 'normal_task_mission-conclude-confirm': (1042, 671), + "activity_exchange-confirm": (673, 603), + } + img_ends = "activity_menu" + picture.co_detect(self, None, None, img_ends, img_possibles, skip_first_screenshot=skip_first_screenshot) + if region is None: + return True + rgb_lo = { + "mission": 863, + "story": 688, + "challenge": 1046, + } + click_lo = { + "mission": 1027, + "story": 848, + "challenge": 1196, + } + while self.flag_run: + if not color.judge_rgb_range(self, rgb_lo[region], 114, 20, 60, 40, 80, 70, 116): + self.click(click_lo[region], 87) + time.sleep(self.screenshot_interval) + self.latest_img_array = self.get_screenshot_array() + else: + if need_swipe: + if region == "mission": + self.swipe(919, 155, 943, 720, duration=0.05, post_sleep_time=1) + self.swipe(919, 155, 943, 720, duration=0.05, post_sleep_time=1) + elif region == "story": + self.swipe(919, 155, 943, 720, duration=0.05, post_sleep_time=1) + return True + + +def to_story_task_info(self, number): + lo = [0, 180, 280, 380, 480, 580, 680, 243, 348, 448, 548, 648] + if number >= 7: + self.swipe(916, 667, 916, 0, duration=0.05, post_sleep_time=0.7) + img_possibles = {'activity_menu': (1124, lo[number])} + img_ends = [ + "activity_task-info", + "main_story_episode-info" + ] + return picture.co_detect(self, None, None, img_ends, img_possibles, True) + + +def to_mission_task_info(self, number): + lo = [0, 184, 308, 422, 537, 645] + index = [1, 2, 3, 4, 5, 4, 5, 1, 2, 3, 4, 5] + if number in [6, 7]: + self.swipe(916, 483, 916, 219, duration=0.5, post_sleep_time=0.7) + if number in [8, 9, 10, 11, 12]: + self.swipe(943, 680, 943, 0, duration=0.1, post_sleep_time=0.7) + possibles = {'activity_menu': (1124, lo[index[number - 1]])} + ends = "activity_task-info" + return picture.co_detect(self, None, None, ends, possibles, True) + + +def to_challenge_task_info(self, number): + lo = [0, 178, 279, 377, 477, 564] + img_possibles = {'activity_menu': (1124, lo[number])} + img_ends = [ + "activity_task-info", + "normal_task_SUB" + ] + return picture.co_detect(self, None, None, img_ends, img_possibles, True) + + +def to_formation_edit_i(self, i, lo=(0, 0), skip_first_screenshot=False): + loy = [195, 275, 354, 423] + y = loy[i - 1] + rgb_ends = "formation_edit" + str(i) + rgb_possibles = { + "formation_edit1": (74, y), + "formation_edit2": (74, y), + "formation_edit3": (74, y), + "formation_edit4": (74, y), + } + rgb_possibles.pop("formation_edit" + str(i)) + img_possibles = { + "activity_task-info": (lo[0], lo[1]), + "normal_task_SUB": (647, 517) + } + picture.co_detect(self, rgb_ends, rgb_possibles, None, img_possibles, skip_first_screenshot) + + +def start_sweep(self, skip_first_screenshot=False): + rgb_ends = [ + "purchase_ap_notice", + "start_sweep_notice", + ] + rgb_possibles = { + "mission_info": (941, 411), + } + img_ends = [ + "purchase_ap_notice", + "normal_task_start-sweep-notice", + ] + img_possibles = { + "activity_task-info": (941, 411), + } + res = picture.co_detect(self, rgb_ends, rgb_possibles, img_ends, img_possibles, skip_first_screenshot) + if res == "purchase_ap_notice" or res == "buy_ap_notice": + return "inadequate_ap" + rgb_ends = [ + "skip_sweep_complete", + "sweep_complete" + ] + rgb_possibles = {"start_sweep_notice": (765, 501)} + img_ends = [ + "normal_task_skip-sweep-complete", + "normal_task_sweep-complete", + ] + img_possibles = {"normal_task_start-sweep-notice": (765, 501)} + picture.co_detect(self, rgb_ends, rgb_possibles, img_ends, img_possibles, skip_first_screenshot) + return "sweep_complete" + + diff --git a/module/activities/__init__.py b/module/activities/__init__.py index 35e0742f6..98c84b520 100644 --- a/module/activities/__init__.py +++ b/module/activities/__init__.py @@ -12,3 +12,4 @@ from module.activities import AbydosResortRestorationCommittee from module.activities import SummerSkysWishes from module.activities import SweetSecretsAndGunfightsATaleOfAfterSchoolSweets +from module.activities import SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp diff --git a/module/explore_activity_challenge.py b/module/explore_activity_challenge.py index 7bfc0ad88..e8f81a2c2 100644 --- a/module/explore_activity_challenge.py +++ b/module/explore_activity_challenge.py @@ -12,6 +12,7 @@ "AbydosResortRestorationCommittee": activity.AbydosResortRestorationCommittee.explore_challenge, "SummerSkysWishes": activity.SummerSkysWishes.explore_challenge, "SweetSecretsAndGunfightsATaleOfAfterSchoolSweets": activity.SweetSecretsAndGunfightsATaleOfAfterSchoolSweets.explore_challenge, + "SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp": activity.SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp.explore_challenge, } diff --git a/module/explore_activity_mission.py b/module/explore_activity_mission.py index b4179dd4d..ed933cb7b 100644 --- a/module/explore_activity_mission.py +++ b/module/explore_activity_mission.py @@ -12,6 +12,8 @@ "AbydosResortRestorationCommittee": activity.AbydosResortRestorationCommittee.explore_mission, "SummerSkysWishes": activity.SummerSkysWishes.explore_mission, "SweetSecretsAndGunfightsATaleOfAfterSchoolSweets": activity.SweetSecretsAndGunfightsATaleOfAfterSchoolSweets.explore_mission, + "SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp": activity.SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp.explore_mission, + } diff --git a/module/explore_activity_story.py b/module/explore_activity_story.py index 1924320a3..2d8eb4ef4 100644 --- a/module/explore_activity_story.py +++ b/module/explore_activity_story.py @@ -12,6 +12,8 @@ "AbydosResortRestorationCommittee": activity.AbydosResortRestorationCommittee.explore_story, "SummerSkysWishes": activity.SummerSkysWishes.explore_story, "SweetSecretsAndGunfightsATaleOfAfterSchoolSweets": activity.SweetSecretsAndGunfightsATaleOfAfterSchoolSweets.explore_story, + "SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp": activity.SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp.explore_story, + } diff --git a/module/sweep_activity.py b/module/sweep_activity.py index ebc311b0c..4cb74c3da 100644 --- a/module/sweep_activity.py +++ b/module/sweep_activity.py @@ -15,6 +15,8 @@ "AbydosResortRestorationCommittee": activity.AbydosResortRestorationCommittee.implement, "SummerSkysWishes": activity.SummerSkysWishes.implement, "SweetSecretsAndGunfightsATaleOfAfterSchoolSweets": activity.SweetSecretsAndGunfightsATaleOfAfterSchoolSweets.implement, + "SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp": activity.SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp.implement, + } diff --git a/src/images/JP/activity/SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp/enter1.png b/src/images/JP/activity/SummerSpecialOperationsRABBITPlatoonAndTheMysteryOfTheMissingShrimp/enter1.png new file mode 100644 index 0000000000000000000000000000000000000000..14cf070515ffa624a273f471bc0fd751dcfda8f2 GIT binary patch literal 989 zcmV<310wv1P)5cUt~ogg?J!fpg{ zV}f^Hc;Suc7+B8?w#nuOJJ`COXWJ#ANmi34`MuBMo5X!S{QSh3$=zA6dS$jWHaWKc z@aWawuJvxsUA=Ve@}IXdnQl#_0vEinXQ;l>*mq=aZg2?Rt=_y9t*>|W_xoCnr$0J7 z@mQuiowzzzS}sViW@G-0MjQ@@`2;MBwYga5kv zvoB9PKl$|IJ9eUtQMIJ?NJJHIzW#lEQub0ZXY~S+A%J#uQe)9f@!y`lEhYk-9 zZ&xS@h>#!w5P+$nO&gm~AZi5KRK>kQxlkUAC*IoQ9eJCja-`Prwb%oYH(N;#eD zK`aarvlui|iM*+|MuUdf{c@>V*~s?xusnCWJCy~X0t-P|nXx(4Cx#wq=2|Lznq_4jG9rl=98hTc)wZO1hMng z=em1xFhCUm@jpf@3sIO5LPQKAg2KvL{nGVBGG(R!%nUI@xm4Nx=1~d|zzp;av{BdY zsuQ7r0ucgUwS4{;r4TVSLyI9)%15a z-Ahve7zg0rdyeNrw;86TuCz9tA7~hfh)I!GMHfL3>nbApATPU#{*LZ~pbRgxEJIjo zm?@G)Ah}9S%}-Ws=J9O0vvZs~=WWa9p&vuT<5Tk+@nl7*7g-E}1asFsS|miYh)5v8X8hiWYI@>S&5_{w zCfQq)ibmhQA8iR7w|3K$3tD-h<2_u~GdV+}eFH6R&C{R5V-r(~BtsNfR@$pe*%0f` zRTkG&z*1B3`1ayrp35z}U8Wx2GmJEgk3tia*0s6m*@lyie>LsHr;m+Q0hj8ORF$h9 z75gj|Sq}DP>lo|P1-zAj)|*4+HhaQItKcV8hC0C(=+T3O#B zCmAP!0WgRN4l@KX)cd-j@r1wHx3;|2{qlML;E-fN$PfUpr?~jg!OjPF$Hv3NMjV73 zLJlL7VIpkor0!k4y&C(4J(bx}3&hjy&59yNwzYuYe=Qj7?HwdG;vnP@au`{fp15)$ zSXxwK+xF#~mm2Epnrds|AV*LEBzBTrUH#-3IuZUO0L%o<$}bQ_Y5Mz&|CsO1$d`YcyZ;#=O9SKp0000=m#QON<&dn+o;Rq=$ zUs!|rz%BW>uv6G*Ez2%&RlN#z%JNEbe;!o>WU3PNY?vC`>itntL7j-Or z!vJn6c;VgM`-XL0MN~r{>CKIa$(3hJx&QI4kNo?RJN~%k`^tby#-irTDn%lRj_mw4`;?yoN*F*)O)WPo7fmgrO-1X$oG!5|m| zV!%Kf5Hy$p27yR`K+GTzj$$IPz)=Jku zT>ty8mdvSIzMyVXbKmBckwtTB7S68x(IfkQd|tinFch{Q%8#o{a!{PuSUH;Wdxu?m z`PG*!Da$^FGX?DhiHM9?!iNY$<$B5w!cyR8+;S-Z5h|;ynC+mgH`TYa4)1EqtT=0GDsCD4 z-^l1a?fFeD87m@BniwOadq%_VY`AcGvT0o0^Nm(|V5nF>HXe℘mhjW+G9pNy}Wp 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 Vst*#tiui9*fR?(hTA2zo>^~uV61)Ha literal 0 HcmV?d00001 diff --git a/src/images/JP/activity/common/task-no-goals.png b/src/images/JP/activity/common/task-no-goals.png new file mode 100644 index 0000000000000000000000000000000000000000..49b3ac27c4d638af036dfb3e31ca48e57e343a0c GIT binary patch literal 6075 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 kcAQL{a5LKjAMx