From 1158a0535a87e3d98f1a87bc79824a95b12610f9 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Sun, 18 Jan 2026 00:36:32 +0800 Subject: [PATCH] Add: W16 preparations --- assets/cn/handler/AIR_STRIKE_CANCEL.png | Bin 0 -> 9602 bytes assets/cn/handler/AIR_STRIKE_CONFIRM.png | Bin 0 -> 11043 bytes assets/cn/handler/AIR_STRIKE_ENTER.png | Bin 0 -> 9085 bytes assets/cn/handler/MAP_AIR_STRIKE.png | Bin 0 -> 25734 bytes assets/cn/map/FLEET_SUPPORT_EMPTY.png | Bin 0 -> 7307 bytes .../cn/template/TEMPLATE_AIR_STRIKE_ICON.png | Bin 0 -> 4280 bytes assets/en/handler/MAP_AIR_STRIKE.png | Bin 0 -> 25734 bytes .../en/template/TEMPLATE_AIR_STRIKE_ICON.png | Bin 0 -> 4280 bytes assets/jp/handler/AIR_STRIKE_CANCEL.png | Bin 0 -> 9602 bytes assets/jp/handler/AIR_STRIKE_CONFIRM.png | Bin 0 -> 11043 bytes assets/jp/handler/MAP_AIR_STRIKE.png | Bin 0 -> 25734 bytes .../jp/template/TEMPLATE_AIR_STRIKE_ICON.png | Bin 0 -> 4280 bytes ...MAP_UI_W15.png => MASK_MAP_UI_SUPPORT.png} | Bin assets/tw/handler/MAP_AIR_STRIKE.png | Bin 0 -> 25734 bytes .../tw/template/TEMPLATE_AIR_STRIKE_ICON.png | Bin 0 -> 4280 bytes campaign/campaign_main/campaign_15_base.py | 14 +-- campaign/campaign_main/campaign_16_1.py | 81 +++++++++++++++ campaign/campaign_main/campaign_16_2.py | 78 ++++++++++++++ campaign/campaign_main/campaign_16_3.py | 90 ++++++++++++++++ campaign/campaign_main/campaign_16_4.py | 97 ++++++++++++++++++ .../campaign_16_base_aircraft.py | 93 +++++++++++++++++ .../campaign_16_base_submarine.py | 25 +++++ .../campaign_main/campaign_support_fleet.py | 28 +++++ module/handler/assets.py | 4 + module/handler/fast_forward.py | 7 ++ module/handler/strategy.py | 41 ++++++++ module/map/assets.py | 1 + module/map/camera.py | 3 +- module/map/map_operation.py | 4 + module/map_detection/grid_predictor.py | 7 ++ module/template/assets.py | 1 + 31 files changed, 560 insertions(+), 14 deletions(-) create mode 100644 assets/cn/handler/AIR_STRIKE_CANCEL.png create mode 100644 assets/cn/handler/AIR_STRIKE_CONFIRM.png create mode 100644 assets/cn/handler/AIR_STRIKE_ENTER.png create mode 100644 assets/cn/handler/MAP_AIR_STRIKE.png create mode 100644 assets/cn/map/FLEET_SUPPORT_EMPTY.png create mode 100644 assets/cn/template/TEMPLATE_AIR_STRIKE_ICON.png create mode 100644 assets/en/handler/MAP_AIR_STRIKE.png create mode 100644 assets/en/template/TEMPLATE_AIR_STRIKE_ICON.png create mode 100644 assets/jp/handler/AIR_STRIKE_CANCEL.png create mode 100644 assets/jp/handler/AIR_STRIKE_CONFIRM.png create mode 100644 assets/jp/handler/MAP_AIR_STRIKE.png create mode 100644 assets/jp/template/TEMPLATE_AIR_STRIKE_ICON.png rename assets/mask/{MASK_MAP_UI_W15.png => MASK_MAP_UI_SUPPORT.png} (100%) create mode 100644 assets/tw/handler/MAP_AIR_STRIKE.png create mode 100644 assets/tw/template/TEMPLATE_AIR_STRIKE_ICON.png create mode 100644 campaign/campaign_main/campaign_16_1.py create mode 100644 campaign/campaign_main/campaign_16_2.py create mode 100644 campaign/campaign_main/campaign_16_3.py create mode 100644 campaign/campaign_main/campaign_16_4.py create mode 100644 campaign/campaign_main/campaign_16_base_aircraft.py create mode 100644 campaign/campaign_main/campaign_16_base_submarine.py create mode 100644 campaign/campaign_main/campaign_support_fleet.py diff --git a/assets/cn/handler/AIR_STRIKE_CANCEL.png b/assets/cn/handler/AIR_STRIKE_CANCEL.png new file mode 100644 index 0000000000000000000000000000000000000000..b8282cb6610853d8f1bc8b1bf7685eba621cd34e GIT binary patch literal 9602 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 literal 0 HcmV?d00001 diff --git a/assets/cn/handler/AIR_STRIKE_ENTER.png b/assets/cn/handler/AIR_STRIKE_ENTER.png new file mode 100644 index 0000000000000000000000000000000000000000..ef8b8b97578f0f6ac74df76607f8c86d0d189599 GIT binary patch literal 9085 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 OhN+RcVd=Gd|Nak~aL$eZ literal 0 HcmV?d00001 diff --git a/assets/cn/handler/MAP_AIR_STRIKE.png b/assets/cn/handler/MAP_AIR_STRIKE.png new file mode 100644 index 0000000000000000000000000000000000000000..6c1d5fc219d723f35527199aad809aa02bb7136b GIT binary patch literal 25734 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 literal 0 HcmV?d00001 diff --git a/assets/cn/map/FLEET_SUPPORT_EMPTY.png b/assets/cn/map/FLEET_SUPPORT_EMPTY.png new file mode 100644 index 0000000000000000000000000000000000000000..cdb45ca5cb477ddf41b8b82707489d62c0e4e7a6 GIT binary patch literal 7307 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 WIx*n7`>)+onqR*5H`c`c-~Rz6*5U*J literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_AIR_STRIKE_ICON.png b/assets/cn/template/TEMPLATE_AIR_STRIKE_ICON.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7d0b64c4c5a190722cc18801a6d53cb3dba20b GIT binary patch literal 4280 zcmeHKdvFtV9#2uA^axYD97UzDO-^V>Hv7otwKPC&`iM3qlt2M%?Pm9vbS25IyW1w= zMmoGt@PQ6YWOIG|kluvf$(7O7BvojENwk zB>4FtK$MsW5D?}48cnn- z_3PQ*33WG#O&dR)Bekqws5R`%s+xL~nDRyAm-NY3TPJ4Dily(k*z!om#ZO-DoKtet zL@wnnv}^j_di2@JNB>&!uOspi^1W$>5AXT!x83u98go^*?Dq2~O2%n4DF!}2-{Z>9 zABYCV(6D36@q1gVbQ^Yg`2r>Vblx=bSS^LvZfrd9oTnpo$$rZ9!uC^Jp4auhKBs+i zH=g3Ks=g(2Aw*P#yvd`9RJ$yDcU6=Rq za?i_W*l69l53&x;YyG}v?Z40UzG7~({n$3|(;H(mdp&h~Qug-1qNwFz@|U_xXjTXr z8BXv4V>BeH)uG9q7Zn+H1yB$l2=HNtzW1N6=@FiD=*!J++%4vVYQA`-1Qx9<^|C8h zuy#&AZ*E#{l!gEypfE@@6b#FB)S-{#((ql~#`H*BL|Ng`FLis6d_e*TWu%NaS`g)H zN&Vb3Bv<16beXfT9|Eo%`f5cHX$*@*BF2cxC`bW}u-okzPGTg9LJ3rkg%u`>hGl~a zk-%^QnU#1^;e{}wVlqCVMseu%@EjTNFC@C%gYaRwp9RPV7G*??FydG!ge7apN38T?HDoXBA*>9@LXE_Nf?5z(49O52JE$+#NWpkG9E*V<2tiR9S|x^=EONO$gBmIY z0X`(gwIJEUBo*F2MAk6h)RTBP$&NtvLEK@|1F^@2p_JQAI|a5zb zAg%$Uq4OocD1zh_grGyOI)$j3gU4>zP#mK$PDTL`6ele-PSAwaOA<70q6yR8xQ)h> zfzoT@G(lsImMkG91U88i3h=CCak5RNvUNi+!IW5%YPO?#1uGJu|kisVaX{UAhWNolW;tt@$5Z!Uc-} literal 0 HcmV?d00001 diff --git a/assets/en/handler/MAP_AIR_STRIKE.png b/assets/en/handler/MAP_AIR_STRIKE.png new file mode 100644 index 0000000000000000000000000000000000000000..6c1d5fc219d723f35527199aad809aa02bb7136b GIT binary patch literal 25734 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 literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_AIR_STRIKE_ICON.png b/assets/en/template/TEMPLATE_AIR_STRIKE_ICON.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7d0b64c4c5a190722cc18801a6d53cb3dba20b GIT binary patch literal 4280 zcmeHKdvFtV9#2uA^axYD97UzDO-^V>Hv7otwKPC&`iM3qlt2M%?Pm9vbS25IyW1w= zMmoGt@PQ6YWOIG|kluvf$(7O7BvojENwk zB>4FtK$MsW5D?}48cnn- z_3PQ*33WG#O&dR)Bekqws5R`%s+xL~nDRyAm-NY3TPJ4Dily(k*z!om#ZO-DoKtet zL@wnnv}^j_di2@JNB>&!uOspi^1W$>5AXT!x83u98go^*?Dq2~O2%n4DF!}2-{Z>9 zABYCV(6D36@q1gVbQ^Yg`2r>Vblx=bSS^LvZfrd9oTnpo$$rZ9!uC^Jp4auhKBs+i zH=g3Ks=g(2Aw*P#yvd`9RJ$yDcU6=Rq za?i_W*l69l53&x;YyG}v?Z40UzG7~({n$3|(;H(mdp&h~Qug-1qNwFz@|U_xXjTXr z8BXv4V>BeH)uG9q7Zn+H1yB$l2=HNtzW1N6=@FiD=*!J++%4vVYQA`-1Qx9<^|C8h zuy#&AZ*E#{l!gEypfE@@6b#FB)S-{#((ql~#`H*BL|Ng`FLis6d_e*TWu%NaS`g)H zN&Vb3Bv<16beXfT9|Eo%`f5cHX$*@*BF2cxC`bW}u-okzPGTg9LJ3rkg%u`>hGl~a zk-%^QnU#1^;e{}wVlqCVMseu%@EjTNFC@C%gYaRwp9RPV7G*??FydG!ge7apN38T?HDoXBA*>9@LXE_Nf?5z(49O52JE$+#NWpkG9E*V<2tiR9S|x^=EONO$gBmIY z0X`(gwIJEUBo*F2MAk6h)RTBP$&NtvLEK@|1F^@2p_JQAI|a5zb zAg%$Uq4OocD1zh_grGyOI)$j3gU4>zP#mK$PDTL`6ele-PSAwaOA<70q6yR8xQ)h> zfzoT@G(lsImMkG91U88i3h=CCak5RNvUNi+!IW5%YPO?#1uGJu|kisVaX{UAhWNolW;tt@$5Z!Uc-} literal 0 HcmV?d00001 diff --git a/assets/jp/handler/AIR_STRIKE_CANCEL.png b/assets/jp/handler/AIR_STRIKE_CANCEL.png new file mode 100644 index 0000000000000000000000000000000000000000..b8282cb6610853d8f1bc8b1bf7685eba621cd34e GIT binary patch literal 9602 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 literal 0 HcmV?d00001 diff --git a/assets/jp/handler/MAP_AIR_STRIKE.png b/assets/jp/handler/MAP_AIR_STRIKE.png new file mode 100644 index 0000000000000000000000000000000000000000..6c1d5fc219d723f35527199aad809aa02bb7136b GIT binary patch literal 25734 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 literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_AIR_STRIKE_ICON.png b/assets/jp/template/TEMPLATE_AIR_STRIKE_ICON.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7d0b64c4c5a190722cc18801a6d53cb3dba20b GIT binary patch literal 4280 zcmeHKdvFtV9#2uA^axYD97UzDO-^V>Hv7otwKPC&`iM3qlt2M%?Pm9vbS25IyW1w= zMmoGt@PQ6YWOIG|kluvf$(7O7BvojENwk zB>4FtK$MsW5D?}48cnn- z_3PQ*33WG#O&dR)Bekqws5R`%s+xL~nDRyAm-NY3TPJ4Dily(k*z!om#ZO-DoKtet zL@wnnv}^j_di2@JNB>&!uOspi^1W$>5AXT!x83u98go^*?Dq2~O2%n4DF!}2-{Z>9 zABYCV(6D36@q1gVbQ^Yg`2r>Vblx=bSS^LvZfrd9oTnpo$$rZ9!uC^Jp4auhKBs+i zH=g3Ks=g(2Aw*P#yvd`9RJ$yDcU6=Rq za?i_W*l69l53&x;YyG}v?Z40UzG7~({n$3|(;H(mdp&h~Qug-1qNwFz@|U_xXjTXr z8BXv4V>BeH)uG9q7Zn+H1yB$l2=HNtzW1N6=@FiD=*!J++%4vVYQA`-1Qx9<^|C8h zuy#&AZ*E#{l!gEypfE@@6b#FB)S-{#((ql~#`H*BL|Ng`FLis6d_e*TWu%NaS`g)H zN&Vb3Bv<16beXfT9|Eo%`f5cHX$*@*BF2cxC`bW}u-okzPGTg9LJ3rkg%u`>hGl~a zk-%^QnU#1^;e{}wVlqCVMseu%@EjTNFC@C%gYaRwp9RPV7G*??FydG!ge7apN38T?HDoXBA*>9@LXE_Nf?5z(49O52JE$+#NWpkG9E*V<2tiR9S|x^=EONO$gBmIY z0X`(gwIJEUBo*F2MAk6h)RTBP$&NtvLEK@|1F^@2p_JQAI|a5zb zAg%$Uq4OocD1zh_grGyOI)$j3gU4>zP#mK$PDTL`6ele-PSAwaOA<70q6yR8xQ)h> zfzoT@G(lsImMkG91U88i3h=CCak5RNvUNi+!IW5%YPO?#1uGJu|kisVaX{UAhWNolW;tt@$5Z!Uc-} literal 0 HcmV?d00001 diff --git a/assets/mask/MASK_MAP_UI_W15.png b/assets/mask/MASK_MAP_UI_SUPPORT.png similarity index 100% rename from assets/mask/MASK_MAP_UI_W15.png rename to assets/mask/MASK_MAP_UI_SUPPORT.png diff --git a/assets/tw/handler/MAP_AIR_STRIKE.png b/assets/tw/handler/MAP_AIR_STRIKE.png new file mode 100644 index 0000000000000000000000000000000000000000..6c1d5fc219d723f35527199aad809aa02bb7136b GIT binary patch literal 25734 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 literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_AIR_STRIKE_ICON.png b/assets/tw/template/TEMPLATE_AIR_STRIKE_ICON.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7d0b64c4c5a190722cc18801a6d53cb3dba20b GIT binary patch literal 4280 zcmeHKdvFtV9#2uA^axYD97UzDO-^V>Hv7otwKPC&`iM3qlt2M%?Pm9vbS25IyW1w= zMmoGt@PQ6YWOIG|kluvf$(7O7BvojENwk zB>4FtK$MsW5D?}48cnn- z_3PQ*33WG#O&dR)Bekqws5R`%s+xL~nDRyAm-NY3TPJ4Dily(k*z!om#ZO-DoKtet zL@wnnv}^j_di2@JNB>&!uOspi^1W$>5AXT!x83u98go^*?Dq2~O2%n4DF!}2-{Z>9 zABYCV(6D36@q1gVbQ^Yg`2r>Vblx=bSS^LvZfrd9oTnpo$$rZ9!uC^Jp4auhKBs+i zH=g3Ks=g(2Aw*P#yvd`9RJ$yDcU6=Rq za?i_W*l69l53&x;YyG}v?Z40UzG7~({n$3|(;H(mdp&h~Qug-1qNwFz@|U_xXjTXr z8BXv4V>BeH)uG9q7Zn+H1yB$l2=HNtzW1N6=@FiD=*!J++%4vVYQA`-1Qx9<^|C8h zuy#&AZ*E#{l!gEypfE@@6b#FB)S-{#((ql~#`H*BL|Ng`FLis6d_e*TWu%NaS`g)H zN&Vb3Bv<16beXfT9|Eo%`f5cHX$*@*BF2cxC`bW}u-okzPGTg9LJ3rkg%u`>hGl~a zk-%^QnU#1^;e{}wVlqCVMseu%@EjTNFC@C%gYaRwp9RPV7G*??FydG!ge7apN38T?HDoXBA*>9@LXE_Nf?5z(49O52JE$+#NWpkG9E*V<2tiR9S|x^=EONO$gBmIY z0X`(gwIJEUBo*F2MAk6h)RTBP$&NtvLEK@|1F^@2p_JQAI|a5zb zAg%$Uq4OocD1zh_grGyOI)$j3gU4>zP#mK$PDTL`6ele-PSAwaOA<70q6yR8xQ)h> zfzoT@G(lsImMkG91U88i3h=CCak5RNvUNi+!IW5%YPO?#1uGJu|kisVaX{UAhWNolW;tt@$5Z!Uc-} literal 0 HcmV?d00001 diff --git a/campaign/campaign_main/campaign_15_base.py b/campaign/campaign_main/campaign_15_base.py index af7a5b841..da6808fd8 100644 --- a/campaign/campaign_main/campaign_15_base.py +++ b/campaign/campaign_main/campaign_15_base.py @@ -1,15 +1,13 @@ from module.base.mask import Mask from module.base.timer import Timer -from module.campaign.campaign_base import CampaignBase as CampaignBase_ from module.handler.assets import STRATEGY_OPENED from module.handler.strategy import MOB_MOVE_OFFSET from module.logger import logger from module.map.map_grids import SelectedGrids from module.map.utils import location_ensure from module.map_detection.grid import GridInfo -from module.map_detection.utils_assets import ASSETS -MASK_MAP_UI_W15 = Mask(file='./assets/mask/MASK_MAP_UI_W15.png') +from .campaign_support_fleet import CampaignBase as CampaignBase_ class Config: @@ -45,12 +43,6 @@ class W15GridInfo(GridInfo): class CampaignBase(CampaignBase_): ENEMY_FILTER = '1L > 1M > 1E > 2L > 3L > 2M > 2E > 1C > 2C > 3M > 3E > 3C' - def map_data_init(self, map_): - super().map_data_init(map_) - # Patch ui_mask, get rid of supporting fleet - _ = ASSETS.ui_mask - ASSETS.ui_mask = MASK_MAP_UI_W15.image - map_has_mob_move = True def strategy_set_execute(self, formation=None, sub_view=None, sub_hunt=None): @@ -61,10 +53,6 @@ class CampaignBase(CampaignBase_): ) logger.attr("Map has mob move", self.strategy_has_mob_move()) - def _map_swipe(self, vector, box=(239, 159, 1175, 628)): - # Left border to 239, avoid swiping on support fleet - return super()._map_swipe(vector, box=box) - def mob_movable(self, location, target): """ Check if mob is movable from location to target. diff --git a/campaign/campaign_main/campaign_16_1.py b/campaign/campaign_main/campaign_16_1.py new file mode 100644 index 000000000..525e45eb7 --- /dev/null +++ b/campaign/campaign_main/campaign_16_1.py @@ -0,0 +1,81 @@ +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +from .campaign_16_base_submarine import CampaignBase +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_sight = (-2, -1, 3, 2) +MAP.map_data = """ + ++ ME -- -- ME -- -- ME -- + ME -- -- ME ++ ME -- -- ME + -- -- ME -- ME -- -- ME ++ + -- ME ++ ME -- ME -- ME Me + -- -- ME -- Me ++ __ -- -- + -- ME -- __ ME -- -- -- MB + -- ++ Me -- -- -- Me ++ ++ + -- ME -- -- -- -- -- ++ ++ + -- -- -- -- SP SP ++ ++ -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5, 'boss': 1} +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ +A9, B9, C9, D9, E9, F9, G9, H9, I9, \ + = MAP.flatten() + + +class Config(ConfigBase): + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = False + MAP_HAS_AMBUSH = True + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True + + return self.battle_default() + + def battle_5(self): + boss = self.map.select(is_boss=True) + if boss: + return self.fleet_boss.clear_boss() + + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_6(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/campaign_main/campaign_16_2.py b/campaign/campaign_main/campaign_16_2.py new file mode 100644 index 000000000..5abe80be3 --- /dev/null +++ b/campaign/campaign_main/campaign_16_2.py @@ -0,0 +1,78 @@ +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +from .campaign_16_base_submarine import CampaignBase +from .campaign_16_base_submarine import Config as ConfigBase + +MAP = CampaignMap('16-2') +MAP.shape = 'J8' +MAP.camera_data = ['C2', 'C6', 'G2', 'G6'] +MAP.camera_data_spawn_point = ['C6'] +MAP.camera_sight = (-2, -1, 3, 2) +MAP.map_data = """ + MB ++ -- ME -- -- -- -- -- -- + -- Me ME -- ME ++ ME -- -- -- + -- __ -- -- -- -- -- ME ++ ++ + ME -- ME ME ME -- ME -- ++ -- + Me -- -- Me ++ -- Me -- -- -- + ++ ME -- ME ME -- ME ++ ++ -- + -- -- -- -- -- Me -- -- ++ -- + -- SP SP -- ++ ++ ++ -- -- -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, \ + = MAP.flatten() + + +class Config(ConfigBase): + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = False + MAP_HAS_AMBUSH = True + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True + + return self.battle_default() + + def battle_5(self): + boss = self.map.select(is_boss=True) + if boss: + return self.fleet_boss.clear_boss() + + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_6(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/campaign_main/campaign_16_3.py b/campaign/campaign_main/campaign_16_3.py new file mode 100644 index 000000000..efa371a1c --- /dev/null +++ b/campaign/campaign_main/campaign_16_3.py @@ -0,0 +1,90 @@ +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +from .campaign_16_base_aircraft import CampaignBase +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_spawn_point = ['C5'] +MAP.camera_sight = (-2, -1, 3, 2) +MAP.map_data = """ + -- -- ++ ++ ++ -- -- ME ++ -- MB + -- ME -- ++ -- ME -- -- ++ -- -- + -- -- ME ME -- ME ++ ME ++ -- -- + -- -- -- ++ ++ __ ME ME -- -- -- + SP -- -- ++ -- ME ++ -- -- -- -- + SP -- -- ME ME -- ++ -- -- -- ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 40 40 40 40 50 50 50 50 50 + 50 50 50 50 50 40 40 40 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3}, + {'battle': 1, 'enemy': 6}, + {'battle': 2, 'enemy': 3}, + {'battle': 3, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \ + = MAP.flatten() + +road_main = RoadGrids([C3, D3, F3, G4, H4]) + + +class Config(ConfigBase): + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = False + MAP_HAS_AMBUSH = True + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + self.clear_chosen_enemy(C3) + return True + + def battle_1(self): + if self.use_support_fleet: + self.air_strike(E3) + self.clear_chosen_enemy(D3) + return True + + def battle_2(self): + if self.clear_roadblocks([road_main]): + return True + if self.clear_potential_roadblocks([road_main]): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + return self.battle_default() + + def battle_3(self): + boss = self.map.select(is_boss=True) + if boss: + if not self.check_accessibility(boss[0], fleet='boss'): + return self.clear_roadblocks([road_main]) + if self.use_support_fleet: + # at this stage the most right zone should be accessible + self.goto(K5) + self.air_strike(J6) + return self.fleet_boss.clear_boss() + if self.clear_roadblocks([road_main]): + return True + if self.clear_potential_roadblocks([road_main]): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + return self.battle_default() \ No newline at end of file diff --git a/campaign/campaign_main/campaign_16_4.py b/campaign/campaign_main/campaign_16_4.py new file mode 100644 index 000000000..b7e9bddec --- /dev/null +++ b/campaign/campaign_main/campaign_16_4.py @@ -0,0 +1,97 @@ +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +from .campaign_16_base_aircraft import CampaignBase +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_spawn_point = ['C6'] +MAP.camera_sight = (-2, -1, 3, 2) +MAP.map_data = """ + -- -- ++ -- -- -- ++ ME -- -- MB + ME ++ ++ ++ -- -- ME ++ -- -- -- + -- -- ME -- -- ++ ++ ME -- -- -- + -- -- -- ME ++ -- ME -- ++ ++ -- + -- -- ME -- -- ME ++ -- ME ++ -- + -- __ -- ++ ++ -- ++ ME ME -- -- + SP -- -- ME -- -- ME ++ -- ++ ++ + SP -- -- -- ++ -- ++ ++ -- -- ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 40 50 50 50 + 50 50 50 40 50 40 40 40 50 50 50 + 50 50 50 40 40 40 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 5}, + {'battle': 1, 'enemy': 4}, + {'battle': 2, 'enemy': 5}, + {'battle': 3}, + {'battle': 4, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, \ + = MAP.flatten() + +road_main = RoadGrids([D4, F5, G4, H3]) + +class Config(ConfigBase): + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = False + MAP_HAS_AMBUSH = True + + +class Campaign(CampaignBase): + MAP = MAP + + def battle_0(self): + self.clear_chosen_enemy(D4) + return True + + def battle_1(self): + if self.use_support_fleet: + self.goto(D1) + self.air_strike(B1) + self.clear_chosen_enemy(F5) + return True + + def battle_2(self): + if self.clear_roadblocks([road_main]): + return True + if self.clear_potential_roadblocks([road_main]): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + return self.battle_default() + + def battle_4(self): + boss = self.map.select(is_boss=True) + if boss: + if not self.check_accessibility(boss[0], fleet='boss'): + return self.clear_roadblocks([road_main]) + if self.use_support_fleet: + # at this stage the most right zone should be accessible + self.goto(J6) + self.air_strike(I8) + return self.fleet_boss.clear_boss() + if self.clear_roadblocks([road_main]): + return True + if self.clear_potential_roadblocks([road_main]): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + return self.battle_default() \ No newline at end of file diff --git a/campaign/campaign_main/campaign_16_base_aircraft.py b/campaign/campaign_main/campaign_16_base_aircraft.py new file mode 100644 index 000000000..b780b4b31 --- /dev/null +++ b/campaign/campaign_main/campaign_16_base_aircraft.py @@ -0,0 +1,93 @@ +from module.base.decorator import del_cached_property +from module.base.timer import Timer +from module.base.utils import red_overlay_transparency, get_color +from module.handler.assets import MAP_AIR_STRIKE, STRATEGY_OPENED, AIR_STRIKE_CONFIRM +from module.handler.strategy import AIR_STRIKE_OFFSET +from module.logger import logger +from module.map.utils import location_ensure + +from .campaign_support_fleet import CampaignBase as CampaignBase_ + + +class Config: + MAP_WALK_TURNING_OPTIMIZE = False + MAP_HAS_MYSTERY = False + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 33), + 'prominence': 10, + 'distance': 35, + } + HOMO_CANNY_THRESHOLD = (50, 100) + + +class CampaignBase(CampaignBase_): + MAP_AIR_STRIKE_OVERLAY_TRANSPARENCY_THRESHOLD = 0.35 + ENEMY_FILTER = '1L > 1M > 1E > 2L > 3L > 2M > 2E > 1C > 2C > 3M > 3E > 3C' + + def _air_strike_appear(self): + return red_overlay_transparency(MAP_AIR_STRIKE.color, get_color(self.device.image, MAP_AIR_STRIKE.area)) > \ + self.MAP_AIR_STRIKE_OVERLAY_TRANSPARENCY_THRESHOLD + + def _air_strike(self, location): + self.in_sight(location) + attack_grid = self.convert_global_to_local(location) + attack_grid.__str__ = location + + logger.info('Select grid to air strike') + skip_first_screenshot = True + interval = Timer(5, count=10) + for _ in self.loop(skip_first=skip_first_screenshot): + # End + if self.is_in_strategy_air_strike(): + self.view.update(image=self.device.image) + del_cached_property(attack_grid, "image_trans") + if attack_grid.predict_air_strike_icon(): + break + # Click + if interval.reached() and self.is_in_strategy_air_strike(): + self.device.click(attack_grid) + interval.reset() + continue + + logger.info('Confirm air strike') + skip_first_screenshot = True + interval = Timer(3, count=6) + MAP_AIR_STRIKE.load_color(self.device.image) + for _ in self.loop(skip_first=skip_first_screenshot): + if self._air_strike_appear(): + interval.reset() + continue + # End + if self.appear(STRATEGY_OPENED, offset=AIR_STRIKE_OFFSET): + break + # Click + if interval.reached() and self.is_in_strategy_air_strike(): + self.device.click(AIR_STRIKE_CONFIRM) + interval.reset() + continue + + def air_strike(self, location): + """ + Open strategy, air strike on location, close strategy. + + Air strike at location X = (x, y) will hit range [x-2, y-1, x+2, y] as follows: + + OOOOO + OOXOO + + Args: + location (typle, str, GridInfo): Location of air strike + """ + location = location_ensure(location) + if self.map[location].is_land: + logger.warning(f'Air strike location {location} is on land, will abandon attacking') + return False + self.strategy_open() + if not self.strategy_has_air_strike(): + logger.warning(f'No remain air strike trials, will abandon attacking') + self.strategy_close() + return False + self.strategy_air_strike_enter() + self._air_strike(location) + self.strategy_close(skip_first_screenshot=False) + return True diff --git a/campaign/campaign_main/campaign_16_base_submarine.py b/campaign/campaign_main/campaign_16_base_submarine.py new file mode 100644 index 000000000..edd8e6878 --- /dev/null +++ b/campaign/campaign_main/campaign_16_base_submarine.py @@ -0,0 +1,25 @@ +from module.logger import logger + +from .campaign_support_fleet import CampaignBase as CampaignBase_ + + +class Config: + MAP_WALK_TURNING_OPTIMIZE = False + MAP_HAS_MYSTERY = False + HOMO_EDGE_COLOR_RANGE = (0, 12) + HOMO_EDGE_HOUGHLINES_THRESHOLD = 210 + + +class CampaignBase(CampaignBase_): + ENEMY_FILTER = '1T > 1L > 1E > 1M > 2T > 2L > 2E > 2M > 3T > 3L > 3E > 3M' + + def map_init(self, map_): + 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) + super().map_init(map_) + + def handle_submarine_support_popup(self): + if self.use_support_fleet and self.handle_popup_confirm("SUBMARINE_SUPPORT"): + return True + return False diff --git a/campaign/campaign_main/campaign_support_fleet.py b/campaign/campaign_main/campaign_support_fleet.py new file mode 100644 index 000000000..fceed45ae --- /dev/null +++ b/campaign/campaign_main/campaign_support_fleet.py @@ -0,0 +1,28 @@ +from module.base.mask import Mask +from module.campaign.campaign_base import CampaignBase as CampaignBase_ +from module.logger import logger +from module.map.assets import FLEET_SUPPORT_EMPTY +from module.map_detection.utils_assets import ASSETS + +MASK_MAP_UI_SUPPORT = Mask(file='./assets/mask/MASK_MAP_UI_SUPPORT.png') + + +class CampaignBase(CampaignBase_): + use_support_fleet = True + + def fleet_preparation(self): + if self.appear(FLEET_SUPPORT_EMPTY, offset=(5, 5)): + self.use_support_fleet = False + logger.attr("use_support_fleet", self.use_support_fleet) + super().fleet_preparation() + + def _map_swipe(self, vector, box=(239, 159, 1175, 628)): + # Left border to 239, avoid swiping on support fleet + return super()._map_swipe(vector, box=box) + + def map_data_init(self, map_): + super().map_data_init(map_) + if self.use_support_fleet: + # Patch ui_mask, get rid of supporting fleet + _ = ASSETS.ui_mask + ASSETS.ui_mask = MASK_MAP_UI_SUPPORT.image diff --git a/module/handler/assets.py b/module/handler/assets.py index 63b8de7d1..28e46968d 100644 --- a/module/handler/assets.py +++ b/module/handler/assets.py @@ -4,6 +4,9 @@ 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': (948, 644, 1009, 676), 'en': (948, 644, 1009, 676), 'jp': (948, 644, 1009, 676), 'tw': (948, 644, 1009, 676)}, color={'cn': (194, 124, 117), 'en': (194, 124, 117), 'jp': (194, 124, 117), 'tw': (194, 124, 117)}, button={'cn': (948, 644, 1009, 676), 'en': (948, 644, 1009, 676), 'jp': (948, 644, 1009, 676), 'tw': (948, 644, 1009, 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': (1161, 644, 1222, 675), 'en': (1161, 644, 1222, 675), 'jp': (1161, 644, 1222, 675), 'tw': (1161, 644, 1222, 675)}, color={'cn': (137, 170, 211), 'en': (137, 170, 211), 'jp': (137, 170, 211), 'tw': (137, 170, 211)}, button={'cn': (1161, 644, 1222, 675), 'en': (1161, 644, 1222, 675), 'jp': (1161, 644, 1222, 675), 'tw': (1161, 644, 1222, 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'}) AUTO_SEARCH_MAP_OPTION_ON = Button(area={'cn': (1205, 549, 1275, 566), 'en': (1203, 552, 1277, 564), 'jp': (1203, 547, 1276, 568), 'tw': (1204, 546, 1276, 567)}, color={'cn': (149, 176, 193), 'en': (113, 135, 157), 'jp': (132, 158, 177), 'tw': (110, 133, 156)}, button={'cn': (1205, 549, 1275, 566), 'en': (1203, 552, 1277, 564), 'jp': (1203, 547, 1276, 568), 'tw': (1204, 546, 1276, 567)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_MAP_OPTION_ON.png', 'en': './assets/en/handler/AUTO_SEARCH_MAP_OPTION_ON.png', 'jp': './assets/jp/handler/AUTO_SEARCH_MAP_OPTION_ON.png', 'tw': './assets/tw/handler/AUTO_SEARCH_MAP_OPTION_ON.png'}) @@ -62,6 +65,7 @@ LOGIN_RETURN_SIGN = Button(area={'cn': (1, 7, 104, 47), 'en': (1, 7, 118, 39), ' MAINTENANCE_ANNOUNCE = Button(area={'cn': (923, 141, 990, 186), 'en': (923, 141, 990, 186), 'jp': (923, 141, 990, 186), 'tw': (923, 141, 990, 186)}, color={'cn': (207, 95, 91), 'en': (207, 95, 91), 'jp': (207, 95, 91), 'tw': (207, 95, 91)}, button={'cn': (923, 141, 990, 186), 'en': (923, 141, 990, 186), 'jp': (923, 141, 990, 186), 'tw': (923, 141, 990, 186)}, file={'cn': './assets/cn/handler/MAINTENANCE_ANNOUNCE.png', 'en': './assets/en/handler/MAINTENANCE_ANNOUNCE.png', 'jp': './assets/jp/handler/MAINTENANCE_ANNOUNCE.png', 'tw': './assets/tw/handler/MAINTENANCE_ANNOUNCE.png'}) MANJUU_AREA = Button(area={'cn': (520, 240, 760, 400), 'en': (520, 240, 760, 400), 'jp': (520, 240, 760, 400), 'tw': (520, 240, 760, 400)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (520, 240, 760, 400), 'en': (520, 240, 760, 400), 'jp': (520, 240, 760, 400), 'tw': (520, 240, 760, 400)}, file={'cn': './assets/cn/handler/MANJUU_AREA.png', 'en': './assets/cn/handler/MANJUU_AREA.png', 'jp': './assets/cn/handler/MANJUU_AREA.png', 'tw': './assets/cn/handler/MANJUU_AREA.png'}) MAP_AIR_RAID = Button(area={'cn': (350, 447, 1280, 472), 'en': (350, 447, 1280, 472), 'jp': (350, 447, 1280, 472), 'tw': (350, 447, 1280, 472)}, color={'cn': (154, 43, 46), 'en': (154, 43, 46), 'jp': (154, 43, 46), 'tw': (154, 43, 46)}, button={'cn': (350, 447, 1280, 472), 'en': (350, 447, 1280, 472), 'jp': (350, 447, 1280, 472), 'tw': (350, 447, 1280, 472)}, file={'cn': './assets/cn/handler/MAP_AIR_RAID.png', 'en': './assets/en/handler/MAP_AIR_RAID.png', 'jp': './assets/jp/handler/MAP_AIR_RAID.png', 'tw': './assets/tw/handler/MAP_AIR_RAID.png'}) +MAP_AIR_STRIKE = Button(area={'cn': (0, 0, 1280, 720), 'en': (0, 0, 1280, 720), 'jp': (0, 0, 1280, 720), 'tw': (0, 0, 1280, 720)}, color={'cn': (20, 17, 17), 'en': (20, 17, 17), 'jp': (20, 17, 17), 'tw': (20, 17, 17)}, button={'cn': (0, 0, 1280, 720), 'en': (0, 0, 1280, 720), 'jp': (0, 0, 1280, 720), 'tw': (0, 0, 1280, 720)}, file={'cn': './assets/cn/handler/MAP_AIR_STRIKE.png', 'en': './assets/en/handler/MAP_AIR_STRIKE.png', 'jp': './assets/jp/handler/MAP_AIR_STRIKE.png', 'tw': './assets/tw/handler/MAP_AIR_STRIKE.png'}) MAP_AMBUSH = Button(area={'cn': (261, 433, 1280, 449), 'en': (261, 433, 1280, 449), 'jp': (261, 433, 1280, 449), 'tw': (261, 433, 1280, 449)}, color={'cn': (161, 41, 43), 'en': (161, 41, 43), 'jp': (161, 41, 43), 'tw': (161, 41, 43)}, button={'cn': (261, 433, 1280, 449), 'en': (261, 433, 1280, 449), 'jp': (261, 433, 1280, 449), 'tw': (261, 433, 1280, 449)}, file={'cn': './assets/cn/handler/MAP_AMBUSH.png', 'en': './assets/en/handler/MAP_AMBUSH.png', 'jp': './assets/jp/handler/MAP_AMBUSH.png', 'tw': './assets/tw/handler/MAP_AMBUSH.png'}) MAP_AMBUSH_ATTACK = Button(area={'cn': (804, 457, 876, 488), 'en': (791, 463, 888, 485), 'jp': (804, 457, 876, 488), 'tw': (804, 455, 876, 486)}, color={'cn': (139, 168, 210), 'en': (164, 187, 221), 'jp': (150, 175, 212), 'tw': (149, 175, 213)}, button={'cn': (755, 446, 925, 501), 'en': (753, 443, 927, 503), 'jp': (757, 447, 925, 501), 'tw': (762, 443, 927, 499)}, file={'cn': './assets/cn/handler/MAP_AMBUSH_ATTACK.png', 'en': './assets/en/handler/MAP_AMBUSH_ATTACK.png', 'jp': './assets/jp/handler/MAP_AMBUSH_ATTACK.png', 'tw': './assets/tw/handler/MAP_AMBUSH_ATTACK.png'}) MAP_AMBUSH_EVADE = Button(area={'cn': (1029, 457, 1101, 487), 'en': (1021, 459, 1110, 483), 'jp': (1031, 458, 1101, 487), 'tw': (1071, 457, 1101, 487)}, color={'cn': (199, 195, 196), 'en': (200, 197, 198), 'jp': (239, 194, 138), 'tw': (247, 209, 164)}, button={'cn': (979, 444, 1152, 502), 'en': (978, 443, 1153, 503), 'jp': (979, 444, 1151, 502), 'tw': (979, 444, 1152, 502)}, file={'cn': './assets/cn/handler/MAP_AMBUSH_EVADE.png', 'en': './assets/en/handler/MAP_AMBUSH_EVADE.png', 'jp': './assets/jp/handler/MAP_AMBUSH_EVADE.png', 'tw': './assets/tw/handler/MAP_AMBUSH_EVADE.png'}) diff --git a/module/handler/fast_forward.py b/module/handler/fast_forward.py index dd9de15f3..a7b86ea8d 100644 --- a/module/handler/fast_forward.py +++ b/module/handler/fast_forward.py @@ -122,6 +122,7 @@ class FastForwardHandler(AutoSearchHandler): > 13-1 > 13-2 > 13-3 > 13-4 > 14-1 > 14-2 > 14-3 > 14-4 > 15-1 > 15-2 > 15-3 > 15-4 + > 16-1 > 16-2 > 16-3 > 16-4 """, 'A1 > A2 > A3', 'B1 > B2 > B3', @@ -543,6 +544,12 @@ class FastForwardHandler(AutoSearchHandler): return False + def handle_submarine_support_popup(self): + """ + Should be rewritten in W16 submarine base class + """ + return False + def handle_map_walk_speedup(self, skip_first_screenshot=True): """ Turn on walk speedup, no reason to turn it off diff --git a/module/handler/strategy.py b/module/handler/strategy.py index 4cf9a4956..e4f1c37ee 100644 --- a/module/handler/strategy.py +++ b/module/handler/strategy.py @@ -21,6 +21,7 @@ SUBMARINE_VIEW.add_state('on', check_button=SUBMARINE_VIEW_ON) SUBMARINE_VIEW.add_state('off', check_button=SUBMARINE_VIEW_OFF) MOB_MOVE_OFFSET = (120, 200) +AIR_STRIKE_OFFSET = (120, 200) class StrategyHandler(InfoHandler): @@ -259,3 +260,43 @@ class StrategyHandler(InfoHandler): if self.appear_then_click(MOB_MOVE_CANCEL, offset=(20, 20), interval=5): continue + + def is_in_strategy_air_strike(self): + return self.appear(AIR_STRIKE_CONFIRM, offset=(20, 20)) + + def strategy_has_air_strike(self): + """ + Pages: + in: STRATEGY_OPENED + out: STRATEGY_OPENED + """ + if self.match_template_color(AIR_STRIKE_ENTER, offset=(150, 200)): + return True + else: + return False + + def strategy_air_strike_enter(self, skip_first_screenshot=True): + """ + Pages: + in: STRATEGY_OPENED, AIR_STRIKE_ENTER + out: AIR_STRIKE_CONFIRM + """ + logger.info('Air strike enter') + for _ in self.loop(skip_first=skip_first_screenshot): + if self.appear(AIR_STRIKE_CONFIRM, offset=(20, 20)): + break + if self.appear_then_click(AIR_STRIKE_ENTER, offset=(150, 200), interval=5): + continue + + def strategy_air_strike_cancel(self, skip_first_screenshot=True): + """ + Pages: + in: AIR_STRIKE_CONFIRM + out: STRATEGY_OPENED, AIR_STRIKE_ENTER + """ + logger.info('Air strike cancel') + for _ in self.loop(skip_first=skip_first_screenshot): + if self.appear(AIR_STRIKE_ENTER, offset=(150, 200)): + break + if self.appear_then_click(AIR_STRIKE_CANCEL, offset=(20, 20), interval=5): + continue diff --git a/module/map/assets.py b/module/map/assets.py index 2b2713fdf..5263daa87 100644 --- a/module/map/assets.py +++ b/module/map/assets.py @@ -21,6 +21,7 @@ FLEET_NUM_1 = Button(area={'cn': (213, 76, 224, 101), 'en': (213, 76, 224, 101), FLEET_NUM_2 = Button(area={'cn': (212, 75, 226, 101), 'en': (212, 75, 226, 101), 'jp': (212, 75, 226, 101), 'tw': (212, 75, 226, 101)}, color={'cn': (52, 150, 194), 'en': (52, 150, 194), 'jp': (52, 150, 194), 'tw': (52, 150, 194)}, button={'cn': (212, 75, 226, 101), 'en': (212, 75, 226, 101), 'jp': (212, 75, 226, 101), 'tw': (212, 75, 226, 101)}, file={'cn': './assets/cn/map/FLEET_NUM_2.png', 'en': './assets/en/map/FLEET_NUM_2.png', 'jp': './assets/jp/map/FLEET_NUM_2.png', 'tw': './assets/tw/map/FLEET_NUM_2.png'}) FLEET_PREPARATION = Button(area={'cn': (1013, 558, 1141, 588), 'en': (1048, 569, 1086, 595), 'jp': (1046, 558, 1107, 587), 'tw': (1014, 557, 1142, 588)}, color={'cn': (242, 211, 160), 'en': (241, 201, 148), 'jp': (241, 205, 151), 'tw': (242, 208, 157)}, button={'cn': (980, 549, 1181, 612), 'en': (988, 556, 1145, 606), 'jp': (983, 549, 1185, 612), 'tw': (980, 548, 1180, 612)}, file={'cn': './assets/cn/map/FLEET_PREPARATION.png', 'en': './assets/en/map/FLEET_PREPARATION.png', 'jp': './assets/jp/map/FLEET_PREPARATION.png', 'tw': './assets/tw/map/FLEET_PREPARATION.png'}) FLEET_PREPARATION_CHECK = Button(area={'cn': (1146, 107, 1174, 136), 'en': (1129, 111, 1158, 140), 'jp': (1146, 107, 1174, 136), 'tw': (1145, 106, 1175, 136)}, color={'cn': (180, 98, 111), 'en': (189, 105, 109), 'jp': (180, 98, 111), 'tw': (180, 90, 92)}, button={'cn': (1146, 107, 1174, 136), 'en': (1129, 111, 1158, 140), 'jp': (1146, 107, 1174, 136), 'tw': (1145, 106, 1175, 136)}, file={'cn': './assets/cn/map/FLEET_PREPARATION_CHECK.png', 'en': './assets/en/map/FLEET_PREPARATION_CHECK.png', 'jp': './assets/jp/map/FLEET_PREPARATION_CHECK.png', 'tw': './assets/tw/map/FLEET_PREPARATION_CHECK.png'}) +FLEET_SUPPORT_EMPTY = Button(area={'cn': (454, 470, 538, 540), 'en': (454, 470, 538, 540), 'jp': (454, 470, 538, 540), 'tw': (454, 470, 538, 540)}, color={'cn': (47, 54, 77), 'en': (47, 54, 77), 'jp': (47, 54, 77), 'tw': (47, 54, 77)}, button={'cn': (454, 470, 538, 540), 'en': (454, 470, 538, 540), 'jp': (454, 470, 538, 540), 'tw': (454, 470, 538, 540)}, file={'cn': './assets/cn/map/FLEET_SUPPORT_EMPTY.png', 'en': './assets/cn/map/FLEET_SUPPORT_EMPTY.png', 'jp': './assets/cn/map/FLEET_SUPPORT_EMPTY.png', 'tw': './assets/cn/map/FLEET_SUPPORT_EMPTY.png'}) MAP_CAT_ATTACK = Button(area={'cn': (1237, 103, 1252, 153), 'en': (1237, 103, 1252, 153), 'jp': (1237, 103, 1252, 153), 'tw': (1237, 103, 1252, 153)}, color={'cn': (43, 45, 52), 'en': (43, 45, 52), 'jp': (43, 45, 52), 'tw': (43, 45, 52)}, button={'cn': (1148, 653, 1262, 705), 'en': (1147, 651, 1263, 701), 'jp': (1149, 653, 1261, 704), 'tw': (1148, 653, 1262, 705)}, file={'cn': './assets/cn/map/MAP_CAT_ATTACK.png', 'en': './assets/en/map/MAP_CAT_ATTACK.png', 'jp': './assets/jp/map/MAP_CAT_ATTACK.png', 'tw': './assets/tw/map/MAP_CAT_ATTACK.png'}) MAP_CAT_ATTACK_MIRROR = Button(area={'cn': (147, 145, 187, 157), 'en': (147, 145, 187, 157), 'jp': (147, 145, 187, 157), 'tw': (147, 145, 187, 157)}, color={'cn': (214, 191, 99), 'en': (214, 191, 99), 'jp': (214, 191, 99), 'tw': (214, 191, 99)}, button={'cn': (147, 145, 187, 157), 'en': (147, 145, 187, 157), 'jp': (147, 145, 187, 157), 'tw': (147, 145, 187, 157)}, file={'cn': './assets/cn/map/MAP_CAT_ATTACK_MIRROR.png', 'en': './assets/en/map/MAP_CAT_ATTACK_MIRROR.png', 'jp': './assets/jp/map/MAP_CAT_ATTACK_MIRROR.png', 'tw': './assets/tw/map/MAP_CAT_ATTACK_MIRROR.png'}) MAP_MODE_SWITCH_HARD = Button(area={'cn': (341, 580, 374, 617), 'en': (341, 580, 374, 617), 'jp': (341, 580, 374, 617), 'tw': (341, 580, 374, 617)}, color={'cn': (234, 179, 179), 'en': (234, 179, 179), 'jp': (234, 179, 179), 'tw': (234, 179, 179)}, button={'cn': (341, 580, 374, 617), 'en': (341, 580, 374, 617), 'jp': (341, 580, 374, 617), 'tw': (341, 580, 374, 617)}, file={'cn': './assets/cn/map/MAP_MODE_SWITCH_HARD.png', 'en': './assets/cn/map/MAP_MODE_SWITCH_HARD.png', 'jp': './assets/cn/map/MAP_MODE_SWITCH_HARD.png', 'tw': './assets/cn/map/MAP_MODE_SWITCH_HARD.png'}) diff --git a/module/map/camera.py b/module/map/camera.py index 280a71712..9fa9cba26 100644 --- a/module/map/camera.py +++ b/module/map/camera.py @@ -114,7 +114,8 @@ class Camera(MapOperation): try: if not self.is_in_map() \ and not self.is_in_strategy_submarine_move() \ - and not self.is_in_strategy_mob_move(): + and not self.is_in_strategy_mob_move() \ + and not self.is_in_strategy_air_strike(): logger.warning('Image to detect is not in_map') raise MapDetectionError('Image to detect is not in_map') self.view.load(self.device.image) diff --git a/module/map/map_operation.py b/module/map/map_operation.py index 4e2b79177..af5fa9695 100644 --- a/module/map/map_operation.py +++ b/module/map/map_operation.py @@ -199,6 +199,10 @@ class MapOperation(MysteryHandler, FleetPreparation, Retirement, FastForwardHand if self.handle_use_data_key(): continue + # 16-1/16-2 submarine support popup + if self.handle_submarine_support_popup(): + continue + # Emotion if self.handle_combat_low_emotion(): continue diff --git a/module/map_detection/grid_predictor.py b/module/map_detection/grid_predictor.py index b58034a02..64884b26d 100644 --- a/module/map_detection/grid_predictor.py +++ b/module/map_detection/grid_predictor.py @@ -314,6 +314,13 @@ class GridPredictor: image = rgb2gray(self.relative_crop(area=(-0.5, -0.5, 0.5, 0.5), shape=(60, 60))) return TEMPLATE_MOB_MOVE_ICON.match(image) + def predict_air_strike_icon(self): + # area = area_pad((0, 0, 140, 140), pad=5) + # image = color_similarity_2d(crop(self.image_trans, area=area, copy=False), color=(255, 255, 160)) + image = color_similarity_2d(self.image_trans, color=(255, 255, 160)) + cv2.threshold(image, 175, 255, cv2.THRESH_BINARY, dst=image) + return TEMPLATE_AIR_STRIKE_ICON.match(image, similarity=0.7) + @cached_property def _image_similar_piece(self): return rgb2gray(self.relative_crop(area=(-0.5, -0.5, 0.5, 0.5), shape=(60, 60))) diff --git a/module/template/assets.py b/module/template/assets.py index 3973aded9..6d10181b6 100644 --- a/module/template/assets.py +++ b/module/template/assets.py @@ -4,6 +4,7 @@ from module.base.template import Template # This file was automatically generated by dev_tools/button_extract.py. # Don't modify it manually. +TEMPLATE_AIR_STRIKE_ICON = Template(file={'cn': './assets/cn/template/TEMPLATE_AIR_STRIKE_ICON.png', 'en': './assets/en/template/TEMPLATE_AIR_STRIKE_ICON.png', 'jp': './assets/jp/template/TEMPLATE_AIR_STRIKE_ICON.png', 'tw': './assets/tw/template/TEMPLATE_AIR_STRIKE_ICON.png'}) TEMPLATE_AMBUSH_EVADE_FAILED = Template(file={'cn': './assets/cn/template/TEMPLATE_AMBUSH_EVADE_FAILED.png', 'en': './assets/en/template/TEMPLATE_AMBUSH_EVADE_FAILED.png', 'jp': './assets/jp/template/TEMPLATE_AMBUSH_EVADE_FAILED.png', 'tw': './assets/tw/template/TEMPLATE_AMBUSH_EVADE_FAILED.png'}) TEMPLATE_AMBUSH_EVADE_SUCCESS = Template(file={'cn': './assets/cn/template/TEMPLATE_AMBUSH_EVADE_SUCCESS.png', 'en': './assets/en/template/TEMPLATE_AMBUSH_EVADE_SUCCESS.png', 'jp': './assets/jp/template/TEMPLATE_AMBUSH_EVADE_SUCCESS.png', 'tw': './assets/tw/template/TEMPLATE_AMBUSH_EVADE_SUCCESS.png'}) TEMPLATE_CAUGHT_BY_SIREN = Template(file={'cn': './assets/cn/template/TEMPLATE_CAUGHT_BY_SIREN.png', 'en': './assets/en/template/TEMPLATE_CAUGHT_BY_SIREN.png', 'jp': './assets/jp/template/TEMPLATE_CAUGHT_BY_SIREN.png', 'tw': './assets/tw/template/TEMPLATE_CAUGHT_BY_SIREN.png'})