diff --git a/assets/cn/handler/AIR_STRIKE_CANCEL.png b/assets/cn/handler/AIR_STRIKE_CANCEL.png index 60e1d133f..19a18eb60 100644 Binary files a/assets/cn/handler/AIR_STRIKE_CANCEL.png and b/assets/cn/handler/AIR_STRIKE_CANCEL.png differ diff --git a/assets/cn/handler/AIR_STRIKE_CONFIRM.png b/assets/cn/handler/AIR_STRIKE_CONFIRM.png index 7a74c4bc0..0d5a6890f 100644 Binary files a/assets/cn/handler/AIR_STRIKE_CONFIRM.png and b/assets/cn/handler/AIR_STRIKE_CONFIRM.png differ diff --git a/campaign/campaign_main/campaign_16_1.py b/campaign/campaign_main/campaign_16_1.py index 54c119eb4..1e801f1d2 100644 --- a/campaign/campaign_main/campaign_16_1.py +++ b/campaign/campaign_main/campaign_16_1.py @@ -7,8 +7,8 @@ from .campaign_16_base_submarine import Config as ConfigBase MAP = CampaignMap('16-1') MAP.shape = 'I9' -MAP.camera_data = ['C2', 'C6', 'F2', 'F6'] -MAP.camera_data_spawn_point = ['F6'] +MAP.camera_data = ['C2', 'C6', 'F2', 'F5'] +MAP.camera_data_spawn_point = ['F7'] MAP.camera_sight = (-2, -1, 3, 2) MAP.map_data = """ ++ ME -- -- ME -- -- ME -- @@ -57,6 +57,7 @@ class Config(ConfigBase): MAP_HAS_FLEET_STEP = False MAP_HAS_AMBUSH = True + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom-right' MAP_SWIPE_MULTIPLY = (1.050, 1.069) MAP_SWIPE_MULTIPLY_MINITOUCH = (1.015, 1.034) MAP_SWIPE_MULTIPLY_MAATOUCH = (0.985, 1.003) diff --git a/campaign/campaign_main/campaign_16_2.py b/campaign/campaign_main/campaign_16_2.py index 6ad4fdc44..b2b35f563 100644 --- a/campaign/campaign_main/campaign_16_2.py +++ b/campaign/campaign_main/campaign_16_2.py @@ -54,6 +54,7 @@ class Config(ConfigBase): MAP_HAS_FLEET_STEP = False MAP_HAS_AMBUSH = True + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom-left' MAP_SWIPE_MULTIPLY = (1.093, 1.113) MAP_SWIPE_MULTIPLY_MINITOUCH = (1.057, 1.077) MAP_SWIPE_MULTIPLY_MAATOUCH = (1.026, 1.045) diff --git a/campaign/campaign_main/campaign_16_3.py b/campaign/campaign_main/campaign_16_3.py index cd4d70fbb..1fb9910ad 100644 --- a/campaign/campaign_main/campaign_16_3.py +++ b/campaign/campaign_main/campaign_16_3.py @@ -7,7 +7,7 @@ from .campaign_16_base_aircraft import Config as ConfigBase MAP = CampaignMap('16-3') MAP.shape = 'K6' -MAP.camera_data = ['C2', 'C5', 'F2', 'F5', 'H2', 'H5'] +MAP.camera_data = ['D3', 'E4', 'G2', 'H2'] MAP.camera_data_spawn_point = ['C5'] MAP.camera_sight = (-2, -1, 3, 2) MAP.map_data = """ @@ -30,7 +30,11 @@ MAP.spawn_data = [ {'battle': 0, 'enemy': 3}, {'battle': 1, 'enemy': 6}, {'battle': 2, 'enemy': 3}, - {'battle': 3, 'boss': 1}, + {'battle': 3}, + {'battle': 4}, + {'battle': 5}, + {'battle': 6}, + {'battle': 7, 'boss': 1}, ] MAP.spawn_data_loop = [ {'battle': 0, 'enemy': 3}, @@ -56,6 +60,7 @@ class Config(ConfigBase): MAP_HAS_FLEET_STEP = False MAP_HAS_AMBUSH = True + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom-left' MAP_SWIPE_MULTIPLY = (1.180, 1.202) MAP_SWIPE_MULTIPLY_MINITOUCH = (1.141, 1.162) MAP_SWIPE_MULTIPLY_MAATOUCH = (1.108, 1.128) diff --git a/campaign/campaign_main/campaign_16_4.py b/campaign/campaign_main/campaign_16_4.py index cb55d597f..8a7bd6c0a 100644 --- a/campaign/campaign_main/campaign_16_4.py +++ b/campaign/campaign_main/campaign_16_4.py @@ -7,7 +7,7 @@ from .campaign_16_base_aircraft import Config as ConfigBase MAP = CampaignMap('16-4') MAP.shape = 'K8' -MAP.camera_data = ['C2', 'C6', 'F2', 'F6', 'H2', 'H6'] +MAP.camera_data = ['C2', 'F5', 'F2', 'H2', 'H5'] MAP.camera_data_spawn_point = ['C6'] MAP.camera_sight = (-2, -1, 3, 2) MAP.map_data = """ @@ -31,6 +31,17 @@ MAP.weight_data = """ 50 50 50 50 50 50 50 50 50 50 50 """ MAP.spawn_data = [ + {'battle': 0, 'enemy': 5}, + {'battle': 1, 'enemy': 3}, + {'battle': 2, 'enemy': 5}, + {'battle': 3}, + {'battle': 4}, + {'battle': 5}, + {'battle': 6}, + {'battle': 7}, + {'battle': 8, 'boss': 1}, +] +MAP.spawn_data_loop = [ {'battle': 0, 'enemy': 5}, {'battle': 1, 'enemy': 3}, {'battle': 2, 'enemy': 5}, @@ -54,6 +65,7 @@ class Config(ConfigBase): MAP_HAS_FLEET_STEP = False MAP_HAS_AMBUSH = True + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom-left' MAP_SWIPE_MULTIPLY = (1.003, 1.022) MAP_SWIPE_MULTIPLY_MINITOUCH = (0.970, 0.988) MAP_SWIPE_MULTIPLY_MAATOUCH = (0.942, 0.959) diff --git a/campaign/campaign_main/campaign_16_base_aircraft.py b/campaign/campaign_main/campaign_16_base_aircraft.py index d910fd9c6..ca1c437ff 100644 --- a/campaign/campaign_main/campaign_16_base_aircraft.py +++ b/campaign/campaign_main/campaign_16_base_aircraft.py @@ -17,7 +17,9 @@ class Config: 'prominence': 10, 'distance': 35, } - HOMO_CANNY_THRESHOLD = (50, 100) + # Handle fog on map, static homography parameters and lower canny threshold + HOMO_STORAGE = ((8, 6), [(137.405, 104.804), (1046.044, 104.804), (-12.171, 652.093), (1166.717, 652.093)]) + HOMO_CANNY_THRESHOLD = (50, 80) class CampaignBase(CampaignBase_): diff --git a/campaign/campaign_main/campaign_16_base_submarine.py b/campaign/campaign_main/campaign_16_base_submarine.py index edd8e6878..67b4dff60 100644 --- a/campaign/campaign_main/campaign_16_base_submarine.py +++ b/campaign/campaign_main/campaign_16_base_submarine.py @@ -14,9 +14,11 @@ class CampaignBase(CampaignBase_): ENEMY_FILTER = '1T > 1L > 1E > 1M > 2T > 2L > 2E > 2M > 3T > 3L > 3E > 3M' def map_init(self, map_): + # submarine battle after entering map + # all emenies spawned already, so no need to wait enemy searching if self.use_support_fleet: logger.hr(f'{self.FUNCTION_NAME_BASE}SUBMARINE', level=2) - self.combat(balance_hp=False, emotion_reduce=False, save_get_items=False) + self.combat(balance_hp=False, emotion_reduce=False, save_get_items=False, expected_end='no_searching') super().map_init(map_) def handle_submarine_support_popup(self): diff --git a/module/handler/assets.py b/module/handler/assets.py index db180d072..71834ed33 100644 --- a/module/handler/assets.py +++ b/module/handler/assets.py @@ -4,8 +4,8 @@ from module.base.template import Template # This file was automatically generated by dev_tools/button_extract.py. # Don't modify it manually. -AIR_STRIKE_CANCEL = Button(area={'cn': (886, 644, 948, 675), 'en': (886, 644, 948, 675), 'jp': (948, 644, 1009, 676), 'tw': (886, 644, 948, 675)}, color={'cn': (195, 144, 139), 'en': (195, 144, 139), 'jp': (194, 124, 117), 'tw': (195, 144, 139)}, button={'cn': (886, 644, 948, 675), 'en': (886, 644, 948, 675), 'jp': (948, 644, 1009, 676), 'tw': (886, 644, 948, 675)}, file={'cn': './assets/cn/handler/AIR_STRIKE_CANCEL.png', 'en': './assets/cn/handler/AIR_STRIKE_CANCEL.png', 'jp': './assets/jp/handler/AIR_STRIKE_CANCEL.png', 'tw': './assets/cn/handler/AIR_STRIKE_CANCEL.png'}) -AIR_STRIKE_CONFIRM = Button(area={'cn': (1100, 644, 1161, 675), 'en': (1100, 644, 1161, 675), 'jp': (1161, 644, 1222, 675), 'tw': (1100, 644, 1161, 675)}, color={'cn': (132, 163, 203), 'en': (132, 163, 203), 'jp': (137, 170, 211), 'tw': (132, 163, 203)}, button={'cn': (1100, 644, 1161, 675), 'en': (1100, 644, 1161, 675), 'jp': (1161, 644, 1222, 675), 'tw': (1100, 644, 1161, 675)}, file={'cn': './assets/cn/handler/AIR_STRIKE_CONFIRM.png', 'en': './assets/cn/handler/AIR_STRIKE_CONFIRM.png', 'jp': './assets/jp/handler/AIR_STRIKE_CONFIRM.png', 'tw': './assets/cn/handler/AIR_STRIKE_CONFIRM.png'}) +AIR_STRIKE_CANCEL = Button(area={'cn': (887, 644, 948, 676), 'en': (887, 644, 948, 676), 'jp': (948, 644, 1009, 676), 'tw': (887, 644, 948, 676)}, color={'cn': (193, 141, 135), 'en': (193, 141, 135), 'jp': (194, 124, 117), 'tw': (193, 141, 135)}, button={'cn': (887, 644, 948, 676), 'en': (887, 644, 948, 676), 'jp': (948, 644, 1009, 676), 'tw': (887, 644, 948, 676)}, file={'cn': './assets/cn/handler/AIR_STRIKE_CANCEL.png', 'en': './assets/cn/handler/AIR_STRIKE_CANCEL.png', 'jp': './assets/jp/handler/AIR_STRIKE_CANCEL.png', 'tw': './assets/cn/handler/AIR_STRIKE_CANCEL.png'}) +AIR_STRIKE_CONFIRM = Button(area={'cn': (1100, 644, 1161, 675), 'en': (1100, 644, 1161, 675), 'jp': (1161, 644, 1222, 675), 'tw': (1100, 644, 1161, 675)}, color={'cn': (129, 161, 199), 'en': (129, 161, 199), 'jp': (137, 170, 211), 'tw': (129, 161, 199)}, button={'cn': (1100, 644, 1161, 675), 'en': (1100, 644, 1161, 675), 'jp': (1161, 644, 1222, 675), 'tw': (1100, 644, 1161, 675)}, file={'cn': './assets/cn/handler/AIR_STRIKE_CONFIRM.png', 'en': './assets/cn/handler/AIR_STRIKE_CONFIRM.png', 'jp': './assets/jp/handler/AIR_STRIKE_CONFIRM.png', 'tw': './assets/cn/handler/AIR_STRIKE_CONFIRM.png'}) AIR_STRIKE_ENTER = Button(area={'cn': (1194, 456, 1249, 530), 'en': (1194, 456, 1249, 530), 'jp': (1194, 456, 1249, 530), 'tw': (1194, 456, 1249, 530)}, color={'cn': (123, 124, 131), 'en': (123, 124, 131), 'jp': (123, 124, 131), 'tw': (123, 124, 131)}, button={'cn': (1194, 456, 1249, 530), 'en': (1194, 456, 1249, 530), 'jp': (1194, 456, 1249, 530), 'tw': (1194, 456, 1249, 530)}, file={'cn': './assets/cn/handler/AIR_STRIKE_ENTER.png', 'en': './assets/cn/handler/AIR_STRIKE_ENTER.png', 'jp': './assets/cn/handler/AIR_STRIKE_ENTER.png', 'tw': './assets/cn/handler/AIR_STRIKE_ENTER.png'}) ANDROID_NO_RESPOND = Button(area={'cn': (341, 433, 391, 472), 'en': (341, 433, 391, 472), 'jp': (341, 433, 391, 472), 'tw': (341, 433, 391, 472)}, color={'cn': (217, 237, 235), 'en': (217, 237, 235), 'jp': (217, 237, 235), 'tw': (217, 237, 235)}, button={'cn': (341, 433, 391, 472), 'en': (341, 433, 391, 472), 'jp': (341, 433, 391, 472), 'tw': (341, 433, 391, 472)}, file={'cn': './assets/cn/handler/ANDROID_NO_RESPOND.png', 'en': './assets/en/handler/ANDROID_NO_RESPOND.png', 'jp': './assets/jp/handler/ANDROID_NO_RESPOND.png', 'tw': './assets/tw/handler/ANDROID_NO_RESPOND.png'}) AUTO_SEARCH_MAP_OPTION_OFF = Button(area={'cn': (1205, 549, 1275, 566), 'en': (1203, 552, 1277, 564), 'jp': (1204, 547, 1276, 568), 'tw': (1205, 546, 1275, 567)}, color={'cn': (196, 169, 169), 'en': (151, 132, 138), 'jp': (179, 153, 156), 'tw': (153, 132, 137)}, button={'cn': (1205, 549, 1275, 566), 'en': (1203, 552, 1277, 564), 'jp': (1204, 547, 1276, 568), 'tw': (1205, 546, 1275, 567)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_MAP_OPTION_OFF.png', 'en': './assets/en/handler/AUTO_SEARCH_MAP_OPTION_OFF.png', 'jp': './assets/jp/handler/AUTO_SEARCH_MAP_OPTION_OFF.png', 'tw': './assets/tw/handler/AUTO_SEARCH_MAP_OPTION_OFF.png'}) diff --git a/module/handler/enemy_searching.py b/module/handler/enemy_searching.py index a821888ab..96adc3f31 100644 --- a/module/handler/enemy_searching.py +++ b/module/handler/enemy_searching.py @@ -121,6 +121,8 @@ class EnemySearchingHandler(InfoHandler): if self.handle_in_stage(): return True if self.handle_auto_search_exit(drop=drop): + timeout.limit = 10 + timeout.reset() continue # Popups @@ -148,6 +150,7 @@ class EnemySearchingHandler(InfoHandler): if appeared: self.handle_enemy_flashing() self.device.sleep(0.3) + self.device.screenshot() logger.info('Enemy searching appeared.') break self.enemy_searching_color_initial() @@ -155,7 +158,6 @@ class EnemySearchingHandler(InfoHandler): logger.info('Enemy searching timeout.') break - self.device.screenshot() return True def handle_in_map_no_enemy_searching(self, drop=None): @@ -173,15 +175,15 @@ class EnemySearchingHandler(InfoHandler): while 1: self.device.screenshot() - # End - if timeout.reached(): - break + if not self.is_in_map(): + timeout.reset() # Stage might ends, # although here expects an enemy searching animation. if self.handle_in_stage(): return True if self.handle_auto_search_exit(drop=drop): + timeout.reset() continue # Popups @@ -198,4 +200,9 @@ class EnemySearchingHandler(InfoHandler): timeout.reset() continue + # End + if timeout.reached(): + logger.info('No enemy searching in map.') + break + return True diff --git a/module/map/map.py b/module/map/map.py index c06e6d9a2..307fe59c1 100644 --- a/module/map/map.py +++ b/module/map/map.py @@ -377,12 +377,17 @@ class Map(Fleet): grids = self.map.select(may_boss=True, is_accessible=True).sort('weight', 'cost') logger.info('May boss: %s' % grids) battle_count = self.battle_count + is_single_boss = self.map.select(may_boss=True).count == 1 + if is_single_boss: + expected = 'boss' + else: + expected = '' for grid in grids: logger.hr('Clear potential BOSS') grids = grids.sort('weight', 'cost') logger.info('Grid: %s' % str(grid)) - self.fleet_boss.clear_chosen_enemy(grid) + self.fleet_boss.clear_chosen_enemy(grid, expected=expected) if self.battle_count > battle_count: logger.info('Boss guessing correct.') return True @@ -397,7 +402,7 @@ class Map(Fleet): roadblocks = self.brute_find_roadblocks(grid, fleet=self.fleet_boss_index) roadblocks = roadblocks.sort('weight', 'cost') logger.info('Grids: %s' % str(roadblocks)) - self.fleet_1.clear_chosen_enemy(roadblocks[0]) + self.fleet_1.clear_chosen_enemy(roadblocks[0], expected=expected) return True return False