From 0671399eae2cbc6cdd7157023ebd2a96b2191342 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 16 Sep 2022 02:00:53 +0800 Subject: [PATCH 1/9] Add: Rapid training in tactical class --- assets/cn/tactical/RAPID_TRAINING.png | Bin 0 -> 7425 bytes config/template.json | 3 ++- module/config/argument/args.json | 11 +++++++++ module/config/argument/argument.yaml | 3 +++ module/config/config_generated.py | 1 + module/config/i18n/en-US.json | 9 ++++++++ module/config/i18n/ja-JP.json | 9 ++++++++ module/config/i18n/zh-CN.json | 9 ++++++++ module/config/i18n/zh-TW.json | 9 ++++++++ module/tactical/assets.py | 1 + module/tactical/tactical_class.py | 31 ++++++++++++++++++++++++++ 11 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 assets/cn/tactical/RAPID_TRAINING.png diff --git a/assets/cn/tactical/RAPID_TRAINING.png b/assets/cn/tactical/RAPID_TRAINING.png new file mode 100644 index 0000000000000000000000000000000000000000..9672cc5037f4eb500935127aad8fa8badddf6279 GIT binary patch literal 7425 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 literal 0 HcmV?d00001 diff --git a/config/template.json b/config/template.json index 5853f0239..bdfea5078 100644 --- a/config/template.json +++ b/config/template.json @@ -1007,7 +1007,8 @@ "ServerUpdate": "00:00" }, "Tactical": { - "TacticalFilter": "SameT4 > SameT3 > SameT2 > SameT1\n> BlueT2 > YellowT2 > RedT2\n> BlueT3 > YellowT3 > RedT3\n> BlueT4 > YellowT4 > RedT4\n> BlueT1 > YellowT1 > RedT1\n> first" + "TacticalFilter": "SameT4 > SameT3 > SameT2 > SameT1\n> BlueT2 > YellowT2 > RedT2\n> BlueT3 > YellowT3 > RedT3\n> BlueT4 > YellowT4 > RedT4\n> BlueT1 > YellowT1 > RedT1\n> first", + "RapidTrainingSlot": "do_not_use" }, "ControlExpOverflow": { "Enable": true, diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 7e88cb146..cab9ffbc9 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -5446,6 +5446,17 @@ "TacticalFilter": { "type": "textarea", "value": "SameT4 > SameT3 > SameT2 > SameT1\n> BlueT2 > YellowT2 > RedT2\n> BlueT3 > YellowT3 > RedT3\n> BlueT4 > YellowT4 > RedT4\n> BlueT1 > YellowT1 > RedT1\n> first" + }, + "RapidTrainingSlot": { + "type": "select", + "value": "do_not_use", + "option": [ + "do_not_use", + "slot_1", + "slot_2", + "slot_3", + "slot_4" + ] } }, "ControlExpOverflow": { diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 74bf44538..be4860501 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -278,6 +278,9 @@ Tactical: > BlueT4 > YellowT4 > RedT4 > BlueT1 > YellowT1 > RedT1 > first + RapidTrainingSlot: + value: do_not_use + option: [do_not_use, slot_1, slot_2, slot_3, slot_4] ControlExpOverflow: Enable: true T4Allow: 100 diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 5e9bcea74..cab2d39c3 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -179,6 +179,7 @@ class GeneratedConfig: # Group `Tactical` Tactical_TacticalFilter = 'SameT4 > SameT3 > SameT2 > SameT1\n> BlueT2 > YellowT2 > RedT2\n> BlueT3 > YellowT3 > RedT3\n> BlueT4 > YellowT4 > RedT4\n> BlueT1 > YellowT1 > RedT1\n> first' + Tactical_RapidTrainingSlot = 'do_not_use' # do_not_use, slot_1, slot_2, slot_3, slot_4 # Group `ControlExpOverflow` ControlExpOverflow_Enable = True diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index e0e58409d..3f6a2178a 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -1157,6 +1157,15 @@ "TacticalFilter": { "name": "Tactical Book Priority", "help": "Generally does not need to be modified or re-arranged but can do so if desired" + }, + "RapidTrainingSlot": { + "name": "Use Rapid Training", + "help": "During events, use rapid training 10 times", + "do_not_use": "Don't Use", + "slot_1": "Use on Slot #1", + "slot_2": "Use on Slot #2", + "slot_3": "Use on Slot #3", + "slot_4": "Use on Slot #4" } }, "ControlExpOverflow": { diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index a12bd9672..e2ecea057 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -1157,6 +1157,15 @@ "TacticalFilter": { "name": "Tactical.TacticalFilter.name", "help": "Tactical.TacticalFilter.help" + }, + "RapidTrainingSlot": { + "name": "Tactical.RapidTrainingSlot.name", + "help": "Tactical.RapidTrainingSlot.help", + "do_not_use": "do_not_use", + "slot_1": "slot_1", + "slot_2": "slot_2", + "slot_3": "slot_3", + "slot_4": "slot_4" } }, "ControlExpOverflow": { diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 28228108a..c41aea2cc 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -1157,6 +1157,15 @@ "TacticalFilter": { "name": "战术学院过滤器", "help": "一般不需要修改" + }, + "RapidTrainingSlot": { + "name": "使用快速学习", + "help": "活动期间有每天10次的快速技能学习", + "do_not_use": "不使用", + "slot_1": "使用于1号位", + "slot_2": "使用于2号位", + "slot_3": "使用于3号位", + "slot_4": "使用于4号位" } }, "ControlExpOverflow": { diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 2b247d78c..ab7045534 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -1157,6 +1157,15 @@ "TacticalFilter": { "name": "戰術學院過濾器", "help": "一般不需要修改" + }, + "RapidTrainingSlot": { + "name": "使用快速學習", + "help": "活動期間有每天10次的快速技能學習", + "do_not_use": "不使用", + "slot_1": "使用於1號位", + "slot_2": "使用於2號位", + "slot_3": "使用於3號位", + "slot_4": "使用於4號位" } }, "ControlExpOverflow": { diff --git a/module/tactical/assets.py b/module/tactical/assets.py index 9334a9a36..b157a0839 100644 --- a/module/tactical/assets.py +++ b/module/tactical/assets.py @@ -6,6 +6,7 @@ from module.base.template import Template ADD_NEW_STUDENT = Button(area={'cn': (417, 375, 438, 398), 'en': (417, 375, 438, 398), 'jp': (410, 371, 440, 402), 'tw': (417, 375, 438, 398)}, color={'cn': (81, 91, 106), 'en': (81, 91, 106), 'jp': (75, 84, 100), 'tw': (81, 91, 106)}, button={'cn': (417, 375, 438, 398), 'en': (417, 375, 438, 398), 'jp': (410, 371, 440, 402), 'tw': (417, 375, 438, 398)}, file={'cn': './assets/cn/tactical/ADD_NEW_STUDENT.png', 'en': './assets/en/tactical/ADD_NEW_STUDENT.png', 'jp': './assets/jp/tactical/ADD_NEW_STUDENT.png', 'tw': './assets/cn/tactical/ADD_NEW_STUDENT.png'}) OCR_SKILL_EXP = Button(area={'cn': (771, 191, 951, 209), 'en': (771, 191, 951, 209), 'jp': (771, 191, 951, 209), 'tw': (771, 191, 951, 209)}, color={'cn': (72, 82, 83), 'en': (72, 82, 83), 'jp': (72, 82, 83), 'tw': (72, 82, 83)}, button={'cn': (771, 191, 951, 209), 'en': (771, 191, 951, 209), 'jp': (771, 191, 951, 209), 'tw': (771, 191, 951, 209)}, file={'cn': './assets/cn/tactical/OCR_SKILL_EXP.png', 'en': './assets/en/tactical/OCR_SKILL_EXP.png', 'jp': './assets/jp/tactical/OCR_SKILL_EXP.png', 'tw': './assets/tw/tactical/OCR_SKILL_EXP.png'}) +RAPID_TRAINING = Button(area={'cn': (518, 566, 583, 582), 'en': (518, 566, 583, 582), 'jp': (518, 566, 583, 582), 'tw': (518, 566, 583, 582)}, color={'cn': (233, 212, 171), 'en': (233, 212, 171), 'jp': (233, 212, 171), 'tw': (233, 212, 171)}, button={'cn': (518, 566, 583, 582), 'en': (518, 566, 583, 582), 'jp': (518, 566, 583, 582), 'tw': (518, 566, 583, 582)}, file={'cn': './assets/cn/tactical/RAPID_TRAINING.png', 'en': './assets/cn/tactical/RAPID_TRAINING.png', 'jp': './assets/cn/tactical/RAPID_TRAINING.png', 'tw': './assets/cn/tactical/RAPID_TRAINING.png'}) REWARD_2 = Button(area={'cn': (418, 413, 468, 434), 'en': (386, 415, 500, 431), 'jp': (418, 413, 466, 434), 'tw': (418, 413, 468, 434)}, color={'cn': (240, 191, 120), 'en': (243, 202, 144), 'jp': (232, 175, 90), 'tw': (240, 191, 120)}, button={'cn': (383, 404, 503, 444), 'en': (382, 403, 504, 445), 'jp': (383, 404, 503, 444), 'tw': (383, 404, 503, 444)}, file={'cn': './assets/cn/tactical/REWARD_2.png', 'en': './assets/en/tactical/REWARD_2.png', 'jp': './assets/jp/tactical/REWARD_2.png', 'tw': './assets/tw/tactical/REWARD_2.png'}) SKILL_CONFIRM = Button(area={'cn': (575, 563, 705, 594), 'en': (600, 558, 681, 581), 'jp': (576, 563, 705, 594), 'tw': (575, 563, 705, 594)}, color={'cn': (147, 177, 216), 'en': (167, 191, 223), 'jp': (136, 170, 213), 'tw': (147, 177, 216)}, button={'cn': (575, 563, 705, 594), 'en': (600, 558, 681, 581), 'jp': (576, 563, 705, 594), 'tw': (575, 563, 705, 594)}, file={'cn': './assets/cn/tactical/SKILL_CONFIRM.png', 'en': './assets/en/tactical/SKILL_CONFIRM.png', 'jp': './assets/jp/tactical/SKILL_CONFIRM.png', 'tw': './assets/cn/tactical/SKILL_CONFIRM.png'}) TACTICAL_CLASS_CANCEL = Button(area={'cn': (818, 591, 990, 647), 'en': (836, 591, 973, 639), 'jp': (840, 606, 969, 637), 'tw': (819, 590, 989, 647)}, color={'cn': (153, 154, 154), 'en': (163, 164, 164), 'jp': (175, 176, 176), 'tw': (152, 153, 154)}, button={'cn': (818, 591, 990, 647), 'en': (836, 591, 973, 639), 'jp': (840, 606, 969, 637), 'tw': (819, 590, 989, 647)}, file={'cn': './assets/cn/tactical/TACTICAL_CLASS_CANCEL.png', 'en': './assets/en/tactical/TACTICAL_CLASS_CANCEL.png', 'jp': './assets/jp/tactical/TACTICAL_CLASS_CANCEL.png', 'tw': './assets/tw/tactical/TACTICAL_CLASS_CANCEL.png'}) diff --git a/module/tactical/tactical_class.py b/module/tactical/tactical_class.py index 4dd34d691..e5d9762c0 100644 --- a/module/tactical/tactical_class.py +++ b/module/tactical/tactical_class.py @@ -298,6 +298,31 @@ class RewardTacticalClass(Dock): self.device.click(TACTICAL_CLASS_CANCEL) return True + def handle_rapid_training(self): + """ + Returns: + bool: If handled + """ + slot = self.config.Tactical_RapidTrainingSlot + if slot == 'slot_1': + slot = 0 + elif slot == 'slot_2': + slot = 1 + elif slot == 'slot_3': + slot = 2 + elif slot == 'slot_4': + slot = 3 + else: + # do_not_use + return False + + offset = (slot * 220 - 20, -20, slot * 220 + 20, 20) + if self.appear(RAPID_TRAINING, offset=offset, interval=1): + self.device.click(RAPID_TRAINING) + return True + + return False + def _tactical_get_finish(self): """ Get the future finish time. @@ -348,11 +373,17 @@ class RewardTacticalClass(Dock): if received and self.appear(REWARD_CHECK, offset=(20, 20)): break + # Learn new skills if not study_finished and self.appear(TACTICAL_CHECK, offset=(20, 20)): # Tactical page, has empty position if self.appear_then_click(ADD_NEW_STUDENT, offset=(800, 20), interval=1): self.interval_reset(TACTICAL_CHECK) + self.interval_clear([POPUP_CONFIRM, POPUP_CANCEL, GET_MISSION]) continue + if self.handle_rapid_training(): + self.interval_reset(TACTICAL_CHECK) + self.interval_clear([POPUP_CONFIRM, POPUP_CANCEL, GET_MISSION]) + continue # Get finish time if self.appear(TACTICAL_CHECK, offset=(20, 20), interval=2): From 4d4eeb488af71b18ea0b994367d30e21a49163cd Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 16 Sep 2022 12:24:54 +0800 Subject: [PATCH 2/9] Add: Event maps of chapter AC --- campaign/event_20220915_cn/b1.py | 75 +++++++++++++++++++++++++++ campaign/event_20220915_cn/b2.py | 70 +++++++++++++++++++++++++ campaign/event_20220915_cn/b3.py | 79 ++++++++++++++++++++++++++++ campaign/event_20220915_cn/d1.py | 75 +++++++++++++++++++++++++++ campaign/event_20220915_cn/d2.py | 79 ++++++++++++++++++++++++++++ campaign/event_20220915_cn/d3.py | 88 ++++++++++++++++++++++++++++++++ campaign/event_20220915_cn/sp.py | 83 ++++++++++++++++++++++++++++++ 7 files changed, 549 insertions(+) create mode 100644 campaign/event_20220915_cn/b1.py create mode 100644 campaign/event_20220915_cn/b2.py create mode 100644 campaign/event_20220915_cn/b3.py create mode 100644 campaign/event_20220915_cn/d1.py create mode 100644 campaign/event_20220915_cn/d2.py create mode 100644 campaign/event_20220915_cn/d3.py create mode 100644 campaign/event_20220915_cn/sp.py diff --git a/campaign/event_20220915_cn/b1.py b/campaign/event_20220915_cn/b1.py new file mode 100644 index 000000000..39a4c3b54 --- /dev/null +++ b/campaign/event_20220915_cn/b1.py @@ -0,0 +1,75 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +MAP = CampaignMap('B1') +MAP.shape = 'H8' +MAP.camera_data = ['D2', 'D6', 'E2', 'E6'] +MAP.camera_data_spawn_point = ['E6'] +MAP.map_data = """ + ++ -- -- -- ME -- -- -- + -- -- -- ME -- ME ++ -- + -- ++ ++ ME -- Me ++ ME + -- MB -- -- -- -- -- -- + Me -- -- __ Me ME MS -- + ++ ME -- ME -- ++ -- -- + -- -- Me -- MS -- -- 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 1}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2, 'boss': 1}, + {'battle': 5, 'enemy': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, \ +A2, B2, C2, D2, E2, F2, G2, H2, \ +A3, B3, C3, D3, E3, F3, G3, H3, \ +A4, B4, C4, D4, E4, F4, G4, H4, \ +A5, B5, C5, D5, E5, F5, G5, H5, \ +A6, B6, C6, D6, E6, F6, G6, H6, \ +A7, B7, C7, D7, E7, F7, G7, H7, \ +A8, B8, C8, D8, E8, F8, G8, H8, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['chunyue', 'jiangfeng', 'Hiei'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/event_20220915_cn/b2.py b/campaign/event_20220915_cn/b2.py new file mode 100644 index 000000000..bba6a73f2 --- /dev/null +++ b/campaign/event_20220915_cn/b2.py @@ -0,0 +1,70 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .b1 import Config as ConfigBase + +MAP = CampaignMap('B2') +MAP.shape = 'M6' +MAP.camera_data = ['D2', 'D4', 'H2', 'H4'] +MAP.camera_data_spawn_point = ['H4', 'H2'] +MAP.map_data = """ + -- -- -- -- ME -- ++ ++ -- Me ++ ++ ++ + ++ ++ ++ ME -- Me ++ ++ MS -- -- -- -- + ++ ++ ++ ME -- __ -- MS -- -- SP ++ ++ + ++ ++ MB -- -- __ -- MS -- -- SP ++ ++ + ME -- -- -- -- Me ++ ++ MS -- -- -- -- + -- ME ME ++ 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 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, 'siren': 1}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, L1, M1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, L2, M2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, L3, M3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, L4, M4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, L5, M5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, L6, M6, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Kongo', 'Yamashiro', 'Akagi', 'Kaga'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/event_20220915_cn/b3.py b/campaign/event_20220915_cn/b3.py new file mode 100644 index 000000000..89397a813 --- /dev/null +++ b/campaign/event_20220915_cn/b3.py @@ -0,0 +1,79 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .b1 import Config as ConfigBase + +MAP = CampaignMap('B3') +MAP.shape = 'I9' +MAP.camera_data = ['D2', 'D6', 'D7', 'F2', 'F6', 'F7'] +MAP.camera_data_spawn_point = ['F7', 'D7'] +MAP.map_data = """ + ++ -- -- -- ME -- -- -- ++ + -- ME ME -- -- -- ME ME -- + -- ME ++ Me MS Me ++ ME -- + -- -- Me -- -- -- Me -- -- + ME -- MS -- ++ -- MS -- ME + -- -- Me -- MB -- Me -- -- + -- ME ++ -- MS -- ++ 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, 'siren': 2}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1, '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): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Mikasa', 'Nagato', 'Akagi', 'Kaga'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/event_20220915_cn/d1.py b/campaign/event_20220915_cn/d1.py new file mode 100644 index 000000000..23b2aec08 --- /dev/null +++ b/campaign/event_20220915_cn/d1.py @@ -0,0 +1,75 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +MAP = CampaignMap('D1') +MAP.shape = 'H8' +MAP.camera_data = ['D2', 'D6', 'E2', 'E6'] +MAP.camera_data_spawn_point = ['E6'] +MAP.map_data = """ + ++ -- -- -- ME -- -- -- + -- -- -- ME -- ME ++ -- + -- ++ ++ ME -- Me ++ ME + -- MB -- -- -- -- -- -- + Me -- -- __ Me ME MS -- + ++ ME -- ME -- ++ -- -- + -- -- Me -- MS -- -- 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 2}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, \ +A2, B2, C2, D2, E2, F2, G2, H2, \ +A3, B3, C3, D3, E3, F3, G3, H3, \ +A4, B4, C4, D4, E4, F4, G4, H4, \ +A5, B5, C5, D5, E5, F5, G5, H5, \ +A6, B6, C6, D6, E6, F6, G6, H6, \ +A7, B7, C7, D7, E7, F7, G7, H7, \ +A8, B8, C8, D8, E8, F8, G8, H8, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Hiei', 'Haruna', 'Shokaku'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/campaign/event_20220915_cn/d2.py b/campaign/event_20220915_cn/d2.py new file mode 100644 index 000000000..7b11ebae8 --- /dev/null +++ b/campaign/event_20220915_cn/d2.py @@ -0,0 +1,79 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .d1 import Config as ConfigBase + +MAP = CampaignMap('D2') +MAP.shape = 'M6' +MAP.camera_data = ['D2', 'D4', 'H2', 'H4'] +MAP.camera_data_spawn_point = ['H4', 'H2'] +MAP.map_data = """ + -- -- -- -- ME -- ++ ++ -- Me ++ ++ ++ + ++ ++ ++ ME -- Me ++ ++ MS -- -- -- -- + ++ ++ ++ ME -- __ -- MS -- -- SP ++ ++ + ++ ++ MB -- -- __ -- MS -- -- SP ++ ++ + ME -- -- -- -- Me ++ ++ MS -- -- -- -- + -- ME ME ++ 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 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, 'siren': 2}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2, 'siren': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1}, + {'battle': 6, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, L1, M1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, L2, M2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, L3, M3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, L4, M4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, L5, M5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, L6, M6, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Kongo', 'Yamashiro', 'Akagi', 'Kaga'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_siren(): + return True + 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/event_20220915_cn/d3.py b/campaign/event_20220915_cn/d3.py new file mode 100644 index 000000000..398e72c36 --- /dev/null +++ b/campaign/event_20220915_cn/d3.py @@ -0,0 +1,88 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .d1 import Config as ConfigBase + +MAP = CampaignMap('D3') +MAP.shape = 'I9' +MAP.camera_data = ['D2', 'D6', 'D7', 'F2', 'F6', 'F7'] +MAP.camera_data_spawn_point = ['F7', 'D7'] +MAP.map_data = """ + ++ -- -- -- ME -- -- -- ++ + -- ME ME -- -- -- ME ME -- + -- ME ++ Me MS Me ++ ME -- + -- -- Me -- -- -- Me -- -- + ME -- MS -- ++ -- MS -- ME + -- -- Me -- MB -- Me -- -- + -- ME ++ -- MS -- ++ 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, 'siren': 2}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 2, 'siren': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 2}, + {'battle': 5, 'enemy': 1}, + {'battle': 6, '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): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Mikasa', 'Nagato', 'Akagi', 'Kaga'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_siren(): + return True + 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/event_20220915_cn/sp.py b/campaign/event_20220915_cn/sp.py new file mode 100644 index 000000000..8dca1d900 --- /dev/null +++ b/campaign/event_20220915_cn/sp.py @@ -0,0 +1,83 @@ +from module.campaign.campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +MAP = CampaignMap('SP') +MAP.shape = 'I9' +MAP.camera_data = ['D2', 'D6', 'D7', 'F2', 'F6', 'F7'] +MAP.camera_data_spawn_point = ['F7', 'D7'] +MAP.map_data = """ + -- -- -- ME -- ME -- ++ ++ + ++ ++ ME -- Me -- ME ++ ++ + -- ME -- -- -- -- -- ME -- + ME -- -- -- -- -- -- -- ME + -- Me -- -- ++ -- -- Me -- + -- -- -- -- MB -- -- -- -- + ++ ++ -- -- -- -- -- -- -- + ++ ++ ++ -- __ -- -- ++ ++ + ++ ++ -- 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}, + {'battle': 1}, + {'battle': 2}, + {'battle': 3}, + {'battle': 4, 'enemy': 11}, + {'battle': 5}, + {'battle': 6}, + {'battle': 7, '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: + # ===== Start of generated config ===== + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = False + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=2): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_7(self): + return self.fleet_boss.clear_boss() From 2dc423a445da1fe2ae7275f0eb1663577a74d8aa Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 16 Sep 2022 12:36:00 +0800 Subject: [PATCH 3/9] Fix: Handle wrong ocr result '00/200' --- module/os_ash/meta.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/module/os_ash/meta.py b/module/os_ash/meta.py index e2a42bc4b..17e2c52c9 100644 --- a/module/os_ash/meta.py +++ b/module/os_ash/meta.py @@ -23,10 +23,21 @@ OCR_BEACON_TIER = Digit(BEACON_TIER, name='OCR_ASH_TIER') OCR_META_DAMAGE = Digit(META_DAMAGE, name='OCR_META_DAMAGE') +class MetaDigitCounter(DigitCounter): + def after_process(self, result): + result = super().after_process(result) + + # 00/200 -> 100/200 + if result.startswith('00/'): + result = '100/' + result[3:] + + return result + + class Meta(UI, MapEventHandler): def digit_ocr_point_and_check(self, button: Button, check_number: int): - point_ocr = DigitCounter(button, letter=(235, 235, 235), threshold=160, name='POINT_OCR') + point_ocr = MetaDigitCounter(button, letter=(235, 235, 235), threshold=160, name='POINT_OCR') point, _, _ = point_ocr.ocr(self.device.image) if point >= check_number: return True From 7b2e8636fc61d2f7a7893f680f67a6c5dc2fd697 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 16 Sep 2022 20:49:51 +0800 Subject: [PATCH 4/9] Add: Siren templates in chapter BD --- assets/cn/template/TEMPLATE_SIREN_Akagi.gif | Bin 0 -> 11356 bytes assets/cn/template/TEMPLATE_SIREN_Haruna.gif | Bin 0 -> 2203 bytes .../cn/template/TEMPLATE_SIREN_Harutsuki.gif | Bin 0 -> 5400 bytes assets/cn/template/TEMPLATE_SIREN_Hiei.gif | Bin 0 -> 1108 bytes .../cn/template/TEMPLATE_SIREN_Kawakaze.gif | Bin 0 -> 2213 bytes .../cn/template/TEMPLATE_SIREN_Kirishima.gif | Bin 2214 -> 3305 bytes assets/cn/template/TEMPLATE_SIREN_Mikasa.gif | Bin 0 -> 3280 bytes assets/cn/template/TEMPLATE_SIREN_Nagato.gif | Bin 0 -> 4412 bytes assets/en/template/TEMPLATE_SIREN_Akagi.gif | Bin 0 -> 11356 bytes assets/en/template/TEMPLATE_SIREN_Haruna.gif | Bin 0 -> 2203 bytes .../en/template/TEMPLATE_SIREN_Harutsuki.gif | Bin 0 -> 5400 bytes assets/en/template/TEMPLATE_SIREN_Hiei.gif | Bin 0 -> 1108 bytes .../en/template/TEMPLATE_SIREN_Kawakaze.gif | Bin 0 -> 2213 bytes .../en/template/TEMPLATE_SIREN_Kirishima.gif | Bin 2214 -> 3305 bytes assets/en/template/TEMPLATE_SIREN_Mikasa.gif | Bin 0 -> 3280 bytes assets/en/template/TEMPLATE_SIREN_Nagato.gif | Bin 0 -> 4412 bytes assets/jp/template/TEMPLATE_SIREN_Akagi.gif | Bin 0 -> 11356 bytes assets/jp/template/TEMPLATE_SIREN_Haruna.gif | Bin 0 -> 2203 bytes .../jp/template/TEMPLATE_SIREN_Harutsuki.gif | Bin 0 -> 5400 bytes assets/jp/template/TEMPLATE_SIREN_Hiei.gif | Bin 0 -> 1108 bytes .../jp/template/TEMPLATE_SIREN_Kawakaze.gif | Bin 0 -> 2213 bytes .../jp/template/TEMPLATE_SIREN_Kirishima.gif | Bin 2214 -> 3305 bytes assets/jp/template/TEMPLATE_SIREN_Mikasa.gif | Bin 0 -> 3280 bytes assets/jp/template/TEMPLATE_SIREN_Nagato.gif | Bin 0 -> 4412 bytes assets/tw/template/TEMPLATE_SIREN_Akagi.gif | Bin 0 -> 11356 bytes assets/tw/template/TEMPLATE_SIREN_Haruna.gif | Bin 0 -> 2203 bytes .../tw/template/TEMPLATE_SIREN_Harutsuki.gif | Bin 0 -> 5400 bytes assets/tw/template/TEMPLATE_SIREN_Hiei.gif | Bin 0 -> 1108 bytes .../tw/template/TEMPLATE_SIREN_Kawakaze.gif | Bin 0 -> 2213 bytes .../tw/template/TEMPLATE_SIREN_Kirishima.gif | Bin 2214 -> 3305 bytes assets/tw/template/TEMPLATE_SIREN_Mikasa.gif | Bin 0 -> 3280 bytes assets/tw/template/TEMPLATE_SIREN_Nagato.gif | Bin 0 -> 4412 bytes campaign/event_20220915_cn/a1.py | 16 +++++++++++- campaign/event_20220915_cn/a2.py | 3 +-- campaign/event_20220915_cn/a3.py | 2 +- campaign/event_20220915_cn/b1.py | 24 +++++++++++++++--- campaign/event_20220915_cn/b2.py | 10 +++++--- campaign/event_20220915_cn/b3.py | 11 +++++--- campaign/event_20220915_cn/c1.py | 3 ++- campaign/event_20220915_cn/c2.py | 2 +- campaign/event_20220915_cn/c3.py | 2 +- campaign/event_20220915_cn/campaign_base.py | 14 ++++++++++ campaign/event_20220915_cn/d1.py | 21 +++++++++++++-- campaign/event_20220915_cn/d2.py | 9 ++++--- campaign/event_20220915_cn/d3.py | 10 +++++--- campaign/event_20220915_cn/sp.py | 2 +- dev_tools/map_extractor.py | 2 ++ module/template/assets.py | 7 +++++ 48 files changed, 113 insertions(+), 25 deletions(-) create mode 100644 assets/cn/template/TEMPLATE_SIREN_Akagi.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_Haruna.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_Harutsuki.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_Hiei.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_Kawakaze.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_Mikasa.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_Nagato.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_Akagi.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_Haruna.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_Harutsuki.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_Hiei.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_Kawakaze.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_Mikasa.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_Nagato.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_Akagi.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_Haruna.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_Harutsuki.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_Hiei.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_Kawakaze.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_Mikasa.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_Nagato.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_Akagi.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_Haruna.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_Harutsuki.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_Hiei.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_Kawakaze.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_Mikasa.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_Nagato.gif create mode 100644 campaign/event_20220915_cn/campaign_base.py diff --git a/assets/cn/template/TEMPLATE_SIREN_Akagi.gif b/assets/cn/template/TEMPLATE_SIREN_Akagi.gif new file mode 100644 index 0000000000000000000000000000000000000000..b8b57b1f93435b88fd1411e68b83901cf5a59a34 GIT binary patch literal 11356 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 literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_SIREN_Haruna.gif b/assets/cn/template/TEMPLATE_SIREN_Haruna.gif new file mode 100644 index 0000000000000000000000000000000000000000..daf5bd6e857e3eaadc8596812b246f684e8484bc GIT binary patch literal 2203 zcmZ?wbhEHbCd8ySufu zwYj;uv9YnDqN1#^6GBP3}B0M}iEG#S}BqS&(C@?TEARxfs-`~&A&)3)2$H&Lp z+uO^_%hS`-!^6Yf-QCU2&DGV_#l^+h+1bg-$U3V%F5Ex z(!#>R+}zyE%*@2Z#Ms!_$jHdh(9poZKwn>9Pft%*S64?zM_XH4OG`^rQ&U4jLtR~6 zO-)TzRaHerMOj%{Nl8gTK|x+#UQSL=@u`q-Vg)`2RnH;!hS1 zMW9P{K&}O469$g|45eQ_e0gL=ZjS@@%fqmPBtXU)SyOL;hzY*d&OH!(Ld zOJ#1WU=&`|HdWheNym)@2PQGggf(vz6cP@!atUg9957&XnQm^C)6(#8X(z9;y;sGF z4GA7|Or3UwR5C5|nXV)K`N%~3zKY@Kjs%f>})C;C;B*8B+A$aF$h z*Y8z|r|^^ZDQYHVdny#4oD-AFex@*!gO!6z%sj@RP?*(|-`cN6XQ5K^QBE1{o+*XO ztnE|H-IfL1naIq_tKeoQp&|IGnNL{3BJh8U61{Nvs^2F5Cl2&y=t#>$v0C%*M=av~5DC^HOJiIi<=y84C|Ma2iHl z3YaNa#Lh2cmS>>B&~!#rC)5Au+?(+5;h`orA$g;i4FL>?m>5lNyx3sq!Xcy{K8tbQ{LeGBgVxX9|wFRWQ|;bhQKUJ(=D$vz*u4z;|}vU${VanoTp zVI|G5BLRgeeIhd6PrjUZc-XUBP%&kKz@?*IlO^-keJPma;@0y}zhIAsK_>{9xLN9DiK;vUpHU#uMo4 literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_SIREN_Harutsuki.gif b/assets/cn/template/TEMPLATE_SIREN_Harutsuki.gif new file mode 100644 index 0000000000000000000000000000000000000000..8be81be025953a4fae80025c04f6d7c677c4a7b8 GIT binary patch literal 5400 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 literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_SIREN_Hiei.gif b/assets/cn/template/TEMPLATE_SIREN_Hiei.gif new file mode 100644 index 0000000000000000000000000000000000000000..a92f6e648557a65dc9a7c713cf9672f3fcf17019 GIT binary patch literal 1108 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 Iz+h1JzaxGHW&i*H delta 795 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 literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_SIREN_Nagato.gif b/assets/cn/template/TEMPLATE_SIREN_Nagato.gif new file mode 100644 index 0000000000000000000000000000000000000000..498916946c8388cdcd396cdc7b8befdb957f7e04 GIT binary patch literal 4412 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 literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_Haruna.gif b/assets/en/template/TEMPLATE_SIREN_Haruna.gif new file mode 100644 index 0000000000000000000000000000000000000000..daf5bd6e857e3eaadc8596812b246f684e8484bc GIT binary patch literal 2203 zcmZ?wbhEHbCd8ySufu zwYj;uv9YnDqN1#^6GBP3}B0M}iEG#S}BqS&(C@?TEARxfs-`~&A&)3)2$H&Lp z+uO^_%hS`-!^6Yf-QCU2&DGV_#l^+h+1bg-$U3V%F5Ex z(!#>R+}zyE%*@2Z#Ms!_$jHdh(9poZKwn>9Pft%*S64?zM_XH4OG`^rQ&U4jLtR~6 zO-)TzRaHerMOj%{Nl8gTK|x+#UQSL=@u`q-Vg)`2RnH;!hS1 zMW9P{K&}O469$g|45eQ_e0gL=ZjS@@%fqmPBtXU)SyOL;hzY*d&OH!(Ld zOJ#1WU=&`|HdWheNym)@2PQGggf(vz6cP@!atUg9957&XnQm^C)6(#8X(z9;y;sGF z4GA7|Or3UwR5C5|nXV)K`N%~3zKY@Kjs%f>})C;C;B*8B+A$aF$h z*Y8z|r|^^ZDQYHVdny#4oD-AFex@*!gO!6z%sj@RP?*(|-`cN6XQ5K^QBE1{o+*XO ztnE|H-IfL1naIq_tKeoQp&|IGnNL{3BJh8U61{Nvs^2F5Cl2&y=t#>$v0C%*M=av~5DC^HOJiIi<=y84C|Ma2iHl z3YaNa#Lh2cmS>>B&~!#rC)5Au+?(+5;h`orA$g;i4FL>?m>5lNyx3sq!Xcy{K8tbQ{LeGBgVxX9|wFRWQ|;bhQKUJ(=D$vz*u4z;|}vU${VanoTp zVI|G5BLRgeeIhd6PrjUZc-XUBP%&kKz@?*IlO^-keJPma;@0y}zhIAsK_>{9xLN9DiK;vUpHU#uMo4 literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_Harutsuki.gif b/assets/en/template/TEMPLATE_SIREN_Harutsuki.gif new file mode 100644 index 0000000000000000000000000000000000000000..8be81be025953a4fae80025c04f6d7c677c4a7b8 GIT binary patch literal 5400 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 literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_Hiei.gif b/assets/en/template/TEMPLATE_SIREN_Hiei.gif new file mode 100644 index 0000000000000000000000000000000000000000..a92f6e648557a65dc9a7c713cf9672f3fcf17019 GIT binary patch literal 1108 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 Iz+h1JzaxGHW&i*H delta 795 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 literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_Nagato.gif b/assets/en/template/TEMPLATE_SIREN_Nagato.gif new file mode 100644 index 0000000000000000000000000000000000000000..498916946c8388cdcd396cdc7b8befdb957f7e04 GIT binary patch literal 4412 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 literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_Haruna.gif b/assets/jp/template/TEMPLATE_SIREN_Haruna.gif new file mode 100644 index 0000000000000000000000000000000000000000..daf5bd6e857e3eaadc8596812b246f684e8484bc GIT binary patch literal 2203 zcmZ?wbhEHbCd8ySufu zwYj;uv9YnDqN1#^6GBP3}B0M}iEG#S}BqS&(C@?TEARxfs-`~&A&)3)2$H&Lp z+uO^_%hS`-!^6Yf-QCU2&DGV_#l^+h+1bg-$U3V%F5Ex z(!#>R+}zyE%*@2Z#Ms!_$jHdh(9poZKwn>9Pft%*S64?zM_XH4OG`^rQ&U4jLtR~6 zO-)TzRaHerMOj%{Nl8gTK|x+#UQSL=@u`q-Vg)`2RnH;!hS1 zMW9P{K&}O469$g|45eQ_e0gL=ZjS@@%fqmPBtXU)SyOL;hzY*d&OH!(Ld zOJ#1WU=&`|HdWheNym)@2PQGggf(vz6cP@!atUg9957&XnQm^C)6(#8X(z9;y;sGF z4GA7|Or3UwR5C5|nXV)K`N%~3zKY@Kjs%f>})C;C;B*8B+A$aF$h z*Y8z|r|^^ZDQYHVdny#4oD-AFex@*!gO!6z%sj@RP?*(|-`cN6XQ5K^QBE1{o+*XO ztnE|H-IfL1naIq_tKeoQp&|IGnNL{3BJh8U61{Nvs^2F5Cl2&y=t#>$v0C%*M=av~5DC^HOJiIi<=y84C|Ma2iHl z3YaNa#Lh2cmS>>B&~!#rC)5Au+?(+5;h`orA$g;i4FL>?m>5lNyx3sq!Xcy{K8tbQ{LeGBgVxX9|wFRWQ|;bhQKUJ(=D$vz*u4z;|}vU${VanoTp zVI|G5BLRgeeIhd6PrjUZc-XUBP%&kKz@?*IlO^-keJPma;@0y}zhIAsK_>{9xLN9DiK;vUpHU#uMo4 literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_Harutsuki.gif b/assets/jp/template/TEMPLATE_SIREN_Harutsuki.gif new file mode 100644 index 0000000000000000000000000000000000000000..8be81be025953a4fae80025c04f6d7c677c4a7b8 GIT binary patch literal 5400 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 literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_Hiei.gif b/assets/jp/template/TEMPLATE_SIREN_Hiei.gif new file mode 100644 index 0000000000000000000000000000000000000000..a92f6e648557a65dc9a7c713cf9672f3fcf17019 GIT binary patch literal 1108 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 Iz+h1JzaxGHW&i*H delta 795 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 literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_Nagato.gif b/assets/jp/template/TEMPLATE_SIREN_Nagato.gif new file mode 100644 index 0000000000000000000000000000000000000000..498916946c8388cdcd396cdc7b8befdb957f7e04 GIT binary patch literal 4412 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 literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_Haruna.gif b/assets/tw/template/TEMPLATE_SIREN_Haruna.gif new file mode 100644 index 0000000000000000000000000000000000000000..daf5bd6e857e3eaadc8596812b246f684e8484bc GIT binary patch literal 2203 zcmZ?wbhEHbCd8ySufu zwYj;uv9YnDqN1#^6GBP3}B0M}iEG#S}BqS&(C@?TEARxfs-`~&A&)3)2$H&Lp z+uO^_%hS`-!^6Yf-QCU2&DGV_#l^+h+1bg-$U3V%F5Ex z(!#>R+}zyE%*@2Z#Ms!_$jHdh(9poZKwn>9Pft%*S64?zM_XH4OG`^rQ&U4jLtR~6 zO-)TzRaHerMOj%{Nl8gTK|x+#UQSL=@u`q-Vg)`2RnH;!hS1 zMW9P{K&}O469$g|45eQ_e0gL=ZjS@@%fqmPBtXU)SyOL;hzY*d&OH!(Ld zOJ#1WU=&`|HdWheNym)@2PQGggf(vz6cP@!atUg9957&XnQm^C)6(#8X(z9;y;sGF z4GA7|Or3UwR5C5|nXV)K`N%~3zKY@Kjs%f>})C;C;B*8B+A$aF$h z*Y8z|r|^^ZDQYHVdny#4oD-AFex@*!gO!6z%sj@RP?*(|-`cN6XQ5K^QBE1{o+*XO ztnE|H-IfL1naIq_tKeoQp&|IGnNL{3BJh8U61{Nvs^2F5Cl2&y=t#>$v0C%*M=av~5DC^HOJiIi<=y84C|Ma2iHl z3YaNa#Lh2cmS>>B&~!#rC)5Au+?(+5;h`orA$g;i4FL>?m>5lNyx3sq!Xcy{K8tbQ{LeGBgVxX9|wFRWQ|;bhQKUJ(=D$vz*u4z;|}vU${VanoTp zVI|G5BLRgeeIhd6PrjUZc-XUBP%&kKz@?*IlO^-keJPma;@0y}zhIAsK_>{9xLN9DiK;vUpHU#uMo4 literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_Harutsuki.gif b/assets/tw/template/TEMPLATE_SIREN_Harutsuki.gif new file mode 100644 index 0000000000000000000000000000000000000000..8be81be025953a4fae80025c04f6d7c677c4a7b8 GIT binary patch literal 5400 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 literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_Hiei.gif b/assets/tw/template/TEMPLATE_SIREN_Hiei.gif new file mode 100644 index 0000000000000000000000000000000000000000..a92f6e648557a65dc9a7c713cf9672f3fcf17019 GIT binary patch literal 1108 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 Iz+h1JzaxGHW&i*H delta 795 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 literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_Nagato.gif b/assets/tw/template/TEMPLATE_SIREN_Nagato.gif new file mode 100644 index 0000000000000000000000000000000000000000..498916946c8388cdcd396cdc7b8befdb957f7e04 GIT binary patch literal 4412 zcmeI#`8QPm1IO`e%#5)$!^k?Av3&BEN)@87?ln3#C??%kU=Z(hB6_44J*7cX8s zfBt-Uc=*|~XA+6z@#Dvj9zA;S;KBX-_wU`iH#j(W=gytmw{H&&4D|Q+_xASQxN)PW zr>DESyQ{0~+O=z~t*tFBEzQl%SFc`eYHGT0;llaz=g*!!TVG#aTU&eL#EIj_j~_dB ztfr=>y1Kfms;Z)*qO7c}w6wIOq@=jGxTvV8u(0sp!Gi?_1^M~;2M!$AzkmO}ef#qA z@^W)?b8>RBv$M0Zvi9!Xo0*xJk&%&}p1x<#p0u>I)YR0JloYX8oSdATl$0bAiG)I- zKp;p=Oyu+VyLa#2wQJYTojZ5z*s*>4_HEm?B_t%o$H#Box-~8?E;cqcCMG5-Dr(D? zEs>Ftn>KCQuwldc_3PKITNe=#5gr~M78Vv78p`AGf`fwt0|QsBS``owuyW*W@csv1_rvixNi^W2}o}YFCq$x!&rtcD0XD*XE*HTtyY6>DvA~7WJ zLCT*W{qveYm?`K>5Sb1+qs_S2DO$ly?^24Kk|sS!Lf6z^IM4vq%4L^eWpR$|pi)G# zu`v=FM6Bskz-VxT!f_;7p_&ne!memVVF8SJ9j)Rg!-Z)PUZkhFpQWT^6HK5dz(!CR%O zM*-(dl;HYXJ7(!c40G62kw9#ut)?{OQr%eG0BqjAeG9O8{rdHEY=(x005-5LFfDz3eVv`19UUEQZEZjlDJPAM zjewJeh6Y%aQ>RXyJb4m!<>=9)K$ObLN`T7Y!-vbu%m0y<|HG9ZQ285CqNAgwsBGT6 z8Mq=9W$oIvYu2oRT?q*Z0ki}K1+8Aa8rB7N1)$>R=jZF|yJX1{pbMAFg>~U@I6xP7 zcXt2`pvB3_3D5#uvA4IU(P%&y;EJK4A#eqc$N#h&_3Oodc>=(Zu}BCPL>E*1GN0y4 z!m>(@Pzc}%k&Y*AEEYi$7FJ&#g`<(Ph;3pLOAmsq!+PW)HIJ<2kc19l)J@R$a?08A z%Ck9_vQ?gnXIWZ&hzTF-xTUOu52&7`{+_0$ZvpiboEG1}s3Dj3L?j|R3egU|6?Rlc zSEd@iX`X+7J6c2txFBhaYGW4}crDk(u{Gm8aKM7Lvf6wjg3}aM=ARm#JH;rF|gW!cgSp2VGEinPd-1! z8&*^`4>fX3l^xlWA-gip$eS0MGTYFc4q0PJaxQ3VY7|n-#aJ=R94P|@)tb0vXxj?N z5#vZPA3|VC5t`P6bk|u9M3pw}d4J^yjEJ;YU_{_(85Z znb9)6SZ3zRzYmp}l`_+mjT<-q4J)8nrpp4l1um9l%a#FO04{L109-({09jyGSS%Ju z7dToR92@{E*4Ea56;o4FGMNl;0o|gf2mae%&rdu7;0WqO1QBY{KB6Swfw^p;QzgMJfj(O88<02#Wl48YP#EwV?O* z1`AuTlsRm&y}+fHpsY$c-eutCR!FhC$>5&u;1=NY2(|u84yWO4@#Lqehm*SY>R`zO zW6sDl6@*s{=ehMC3QA6vz5^GXIbxKoWTPzB=QNZw-jtR&Vm=Q31{^#VG35ay> zz+(qqI{$L!NC5#k0_gZ*>A+nAj~&>JnPUg01EdKYC1CF?TC@nX2tWgj9amRZXJ=ZxNC*a^?qL9caw0TwH9T zpXO+qE9}kHiVXQ0j_+W}kt{@_h;dPdvNm6j>mJoC3(%;#5b2VXUZB9v52q!f5a{{d zwKRDiGd0aP_Pb; self.MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD diff --git a/campaign/event_20220915_cn/d1.py b/campaign/event_20220915_cn/d1.py index 23b2aec08..5389bb869 100644 --- a/campaign/event_20220915_cn/d1.py +++ b/campaign/event_20220915_cn/d1.py @@ -1,11 +1,11 @@ -from module.campaign.campaign_base import CampaignBase +from .campaign_base import CampaignBase from module.map.map_base import CampaignMap from module.map.map_grids import SelectedGrids, RoadGrids from module.logger import logger MAP = CampaignMap('D1') MAP.shape = 'H8' -MAP.camera_data = ['D2', 'D6', 'E2', 'E6'] +MAP.camera_data = ['D3', 'D5'] MAP.camera_data_spawn_point = ['E6'] MAP.map_data = """ ++ -- -- -- ME -- -- -- @@ -58,6 +58,23 @@ class Config: MAP_HAS_MYSTERY = False # ===== End of generated config ===== + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 33), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 33, 255), + 'prominence': 10, + 'distance': 50, + # 'width': (0, 7), + 'wlen': 1000 + } + MAP_WALK_USE_CURRENT_FLEET = True + MAP_SWIPE_MULTIPLY = 1.564 + MAP_SWIPE_MULTIPLY_MINITOUCH = 1.512 + class Campaign(CampaignBase): MAP = MAP diff --git a/campaign/event_20220915_cn/d2.py b/campaign/event_20220915_cn/d2.py index 7b11ebae8..ddd6d8e53 100644 --- a/campaign/event_20220915_cn/d2.py +++ b/campaign/event_20220915_cn/d2.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from .campaign_base import CampaignBase from module.map.map_base import CampaignMap from module.map.map_grids import SelectedGrids, RoadGrids from module.logger import logger @@ -6,8 +6,8 @@ from .d1 import Config as ConfigBase MAP = CampaignMap('D2') MAP.shape = 'M6' -MAP.camera_data = ['D2', 'D4', 'H2', 'H4'] -MAP.camera_data_spawn_point = ['H4', 'H2'] +MAP.camera_data = ['D4', 'E3', 'G3', 'G4'] +MAP.camera_data_spawn_point = ['H3'] MAP.map_data = """ -- -- -- -- ME -- ++ ++ -- Me ++ ++ ++ ++ ++ ++ ME -- Me ++ ++ MS -- -- -- -- @@ -54,6 +54,9 @@ class Config(ConfigBase): MAP_HAS_MYSTERY = False # ===== End of generated config ===== + MAP_SWIPE_MULTIPLY = 1.716 + MAP_SWIPE_MULTIPLY_MINITOUCH = 1.659 + class Campaign(CampaignBase): MAP = MAP diff --git a/campaign/event_20220915_cn/d3.py b/campaign/event_20220915_cn/d3.py index 398e72c36..c76c95df9 100644 --- a/campaign/event_20220915_cn/d3.py +++ b/campaign/event_20220915_cn/d3.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from .campaign_base import CampaignBase from module.map.map_base import CampaignMap from module.map.map_grids import SelectedGrids, RoadGrids from module.logger import logger @@ -6,8 +6,9 @@ from .d1 import Config as ConfigBase MAP = CampaignMap('D3') MAP.shape = 'I9' -MAP.camera_data = ['D2', 'D6', 'D7', 'F2', 'F6', 'F7'] -MAP.camera_data_spawn_point = ['F7', 'D7'] +MAP.camera_data = ['D3', 'D5', 'E5'] +MAP.camera_data_spawn_point = ['D7'] +MAP.map_covered = ['E3'] MAP.map_data = """ ++ -- -- -- ME -- -- -- ++ -- ME ME -- -- -- ME ME -- @@ -63,6 +64,9 @@ class Config(ConfigBase): MAP_HAS_MYSTERY = False # ===== End of generated config ===== + MAP_SWIPE_MULTIPLY = 1.505 + MAP_SWIPE_MULTIPLY_MINITOUCH = 1.455 + class Campaign(CampaignBase): MAP = MAP diff --git a/campaign/event_20220915_cn/sp.py b/campaign/event_20220915_cn/sp.py index 8dca1d900..e0f6e6dc9 100644 --- a/campaign/event_20220915_cn/sp.py +++ b/campaign/event_20220915_cn/sp.py @@ -1,4 +1,4 @@ -from module.campaign.campaign_base import CampaignBase +from .campaign_base import CampaignBase from module.map.map_base import CampaignMap from module.map.map_grids import SelectedGrids, RoadGrids from module.logger import logger diff --git a/dev_tools/map_extractor.py b/dev_tools/map_extractor.py index af0917c41..9d633eb28 100644 --- a/dev_tools/map_extractor.py +++ b/dev_tools/map_extractor.py @@ -199,6 +199,8 @@ DIC_SIREN_NAME_CHI_TO_ENG = { 'qiansui': 'Chitose', 'qiandaitian': 'Chiyoda', 'longfeng': 'Ryuuhou', + 'chunyue': 'Harutsuki', + 'jiangfeng': 'Kawakaze', } diff --git a/module/template/assets.py b/module/template/assets.py index cb1c031bf..5e264cee6 100644 --- a/module/template/assets.py +++ b/module/template/assets.py @@ -37,6 +37,7 @@ TEMPLATE_OS_Meowfficer = Template(file={'cn': './assets/cn/template/TEMPLATE_OS_ TEMPLATE_OS_Resource = Template(file={'cn': './assets/cn/template/TEMPLATE_OS_Resource.png', 'en': './assets/en/template/TEMPLATE_OS_Resource.png', 'jp': './assets/jp/template/TEMPLATE_OS_Resource.png', 'tw': './assets/tw/template/TEMPLATE_OS_Resource.png'}) TEMPLATE_SIGNAL_GOTO = Template(file={'cn': './assets/cn/template/TEMPLATE_SIGNAL_GOTO.png', 'en': './assets/en/template/TEMPLATE_SIGNAL_GOTO.png', 'jp': './assets/jp/template/TEMPLATE_SIGNAL_GOTO.png', 'tw': './assets/tw/template/TEMPLATE_SIGNAL_GOTO.png'}) TEMPLATE_SIGNAL_SEARCH = Template(file={'cn': './assets/cn/template/TEMPLATE_SIGNAL_SEARCH.png', 'en': './assets/en/template/TEMPLATE_SIGNAL_SEARCH.png', 'jp': './assets/jp/template/TEMPLATE_SIGNAL_SEARCH.png', 'tw': './assets/tw/template/TEMPLATE_SIGNAL_SEARCH.png'}) +TEMPLATE_SIREN_Akagi = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Akagi.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Akagi.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Akagi.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Akagi.gif'}) TEMPLATE_SIREN_Akashi = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Akashi.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Akashi.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Akashi.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Akashi.gif'}) TEMPLATE_SIREN_AlbacoreIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_AlbacoreIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_AlbacoreIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_AlbacoreIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_AlbacoreIdol.gif'}) TEMPLATE_SIREN_Algerie = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Algerie.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Algerie.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Algerie.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Algerie.gif'}) @@ -88,9 +89,12 @@ TEMPLATE_SIREN_GridmanCL = Template(file={'cn': './assets/cn/template/TEMPLATE_S TEMPLATE_SIREN_Haguro = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Haguro.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Haguro.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Haguro.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Haguro.gif'}) TEMPLATE_SIREN_Hammann = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Hammann.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Hammann.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Hammann.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Hammann.gif'}) TEMPLATE_SIREN_HarukaAmami = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_HarukaAmami.gif', 'en': './assets/en/template/TEMPLATE_SIREN_HarukaAmami.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_HarukaAmami.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_HarukaAmami.gif'}) +TEMPLATE_SIREN_Haruna = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Haruna.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Haruna.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Haruna.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Haruna.gif'}) +TEMPLATE_SIREN_Harutsuki = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Harutsuki.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Harutsuki.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Harutsuki.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Harutsuki.gif'}) TEMPLATE_SIREN_Hatakaze = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Hatakaze.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Hatakaze.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Hatakaze.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Hatakaze.gif'}) TEMPLATE_SIREN_Hermes_ghost = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Hermes_ghost.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Hermes_ghost.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Hermes_ghost.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Hermes_ghost.gif'}) TEMPLATE_SIREN_Hibiki = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Hibiki.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Hibiki.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Hibiki.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Hibiki.gif'}) +TEMPLATE_SIREN_Hiei = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Hiei.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Hiei.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Hiei.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Hiei.gif'}) TEMPLATE_SIREN_HipperIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_HipperIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_HipperIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_HipperIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_HipperIdol.gif'}) TEMPLATE_SIREN_Howe = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Howe.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Howe.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Howe.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Howe.gif'}) TEMPLATE_SIREN_Illustrious = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Illustrious.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Illustrious.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Illustrious.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Illustrious.gif'}) @@ -105,6 +109,7 @@ TEMPLATE_SIREN_Jupiter_ghost = Template(file={'cn': './assets/cn/template/TEMPLA TEMPLATE_SIREN_Kaga = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Kaga.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Kaga.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Kaga.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Kaga.gif'}) TEMPLATE_SIREN_Kasumi = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Kasumi.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Kasumi.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Kasumi.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Kasumi.gif'}) TEMPLATE_SIREN_KasumiDOA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_KasumiDOA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_KasumiDOA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_KasumiDOA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_KasumiDOA.gif'}) +TEMPLATE_SIREN_Kawakaze = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Kawakaze.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Kawakaze.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Kawakaze.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Kawakaze.gif'}) TEMPLATE_SIREN_Kiev = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Kiev.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Kiev.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Kiev.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Kiev.gif'}) TEMPLATE_SIREN_KingGeorgeV = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_KingGeorgeV.gif', 'en': './assets/en/template/TEMPLATE_SIREN_KingGeorgeV.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_KingGeorgeV.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_KingGeorgeV.gif'}) TEMPLATE_SIREN_Kinu = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Kinu.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Kinu.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Kinu.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Kinu.gif'}) @@ -121,8 +126,10 @@ TEMPLATE_SIREN_Magdeburg = Template(file={'cn': './assets/cn/template/TEMPLATE_S TEMPLATE_SIREN_Mainz = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Mainz.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Mainz.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Mainz.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Mainz.gif'}) TEMPLATE_SIREN_MarieRoseDOA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_MarieRoseDOA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_MarieRoseDOA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_MarieRoseDOA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_MarieRoseDOA.gif'}) TEMPLATE_SIREN_Maya = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Maya.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Maya.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Maya.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Maya.gif'}) +TEMPLATE_SIREN_Mikasa = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Mikasa.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Mikasa.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Mikasa.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Mikasa.gif'}) TEMPLATE_SIREN_MisakiDOA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_MisakiDOA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_MisakiDOA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_MisakiDOA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_MisakiDOA.gif'}) TEMPLATE_SIREN_Miyuki = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Miyuki.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Miyuki.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Miyuki.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Miyuki.gif'}) +TEMPLATE_SIREN_Nagato = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Nagato.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Nagato.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Nagato.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Nagato.gif'}) TEMPLATE_SIREN_NagisaDOA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_NagisaDOA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_NagisaDOA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_NagisaDOA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_NagisaDOA.gif'}) TEMPLATE_SIREN_Nelson = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Nelson.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Nelson.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Nelson.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Nelson.gif'}) TEMPLATE_SIREN_Neptune_ghost = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Neptune_ghost.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Neptune_ghost.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Neptune_ghost.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Neptune_ghost.gif'}) From 47e1920893660089ecda4fbfb4678e8585fb5cbb Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 16 Sep 2022 22:09:00 +0800 Subject: [PATCH 5/9] Add: Event map chapter SP --- campaign/event_20220915_cn/sp.py | 35 +++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/campaign/event_20220915_cn/sp.py b/campaign/event_20220915_cn/sp.py index e0f6e6dc9..9c65666db 100644 --- a/campaign/event_20220915_cn/sp.py +++ b/campaign/event_20220915_cn/sp.py @@ -5,8 +5,8 @@ from module.logger import logger MAP = CampaignMap('SP') MAP.shape = 'I9' -MAP.camera_data = ['D2', 'D6', 'D7', 'F2', 'F6', 'F7'] -MAP.camera_data_spawn_point = ['F7', 'D7'] +MAP.camera_data = ['D3', 'E4', 'F3'] +MAP.camera_data_spawn_point = ['E7'] MAP.map_data = """ -- -- -- ME -- ME -- ++ ++ ++ ++ ME -- Me -- ME ++ ++ @@ -30,7 +30,7 @@ MAP.weight_data = """ 50 50 50 50 50 50 50 50 50 """ MAP.spawn_data = [ - {'battle': 0}, + {'battle': 0, 'siren': 4}, {'battle': 1}, {'battle': 2}, {'battle': 3}, @@ -62,12 +62,41 @@ class Config: STAR_REQUIRE_3 = 0 # ===== End of generated config ===== + MAP_HAS_SIREN = True + MAP_IS_ONE_TIME_STAGE = True + MAP_WALK_USE_CURRENT_FLEET = True + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 33), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 33, 255), + 'prominence': 10, + 'distance': 50, + # 'width': (0, 7), + 'wlen': 1000 + } + HOMO_STORAGE = ((9, 7), [(185.75, 67.44), (1183.65, 67.44), (28.601, 705.824), (1380.695, 705.824)]) + MAP_SWIPE_MULTIPLY = 1.517 + MAP_SWIPE_MULTIPLY_MINITOUCH = 1.467 + class Campaign(CampaignBase): MAP = MAP ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + def map_data_init(self, map_): + super().map_data_init(map_) + D4.is_siren = True + D6.is_siren = True + F4.is_siren = True + F6.is_siren = True + def battle_0(self): + if self.clear_siren(): + return True if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=2): return True From b22a676f2a776a51553b1e79eec76dd480a09945 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 16 Sep 2022 22:40:31 +0800 Subject: [PATCH 6/9] Fix: Handle mis-clicked to event shop --- module/combat/combat.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/module/combat/combat.py b/module/combat/combat.py index 7026e0a72..9c0133d72 100644 --- a/module/combat/combat.py +++ b/module/combat/combat.py @@ -13,7 +13,7 @@ from module.map.assets import MAP_OFFENSIVE from module.retire.retirement import Retirement from module.statistics.azurstats import DropImage from module.template.assets import TEMPLATE_COMBAT_LOADING -from module.ui.assets import BACK_ARROW +from module.ui.assets import BACK_ARROW, SHOP_CHECK class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatManual, AutoSearchHandler): @@ -380,6 +380,17 @@ class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatMan return False + def handle_combat_mis_click(self): + """ + Returns: + bool: + """ + if self.appear(SHOP_CHECK, offset=(20, 20), interval=2): + self.device.click(BACK_ARROW) + return True + + return False + def combat_status(self, drop=None, expected_end=None): """ Args: @@ -435,6 +446,8 @@ class Combat(Level, HPBalancer, Retirement, SubmarineCall, CombatAuto, CombatMan continue if self.handle_auto_search_exit(drop=drop): continue + if self.handle_combat_mis_click(): + continue # End if self.handle_in_stage(): From 0b35815bd4043b27d942a37afe2e48a50cbcd3e1 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 16 Sep 2022 23:09:24 +0800 Subject: [PATCH 7/9] Fix: Handle buff banner covering oil numbers in event --- module/combat/auto_search_combat.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/module/combat/auto_search_combat.py b/module/combat/auto_search_combat.py index d31d3ae1f..db9c93781 100644 --- a/module/combat/auto_search_combat.py +++ b/module/combat/auto_search_combat.py @@ -107,6 +107,11 @@ class AutoSearchCombat(MapOperation, Combat): if oil < self.config.StopCondition_OilLimit: logger.info('Reach oil limit') self.auto_search_oil_limit_triggered = True + else: + if self.auto_search_oil_limit_triggered: + logger.warning('auto_search_oil_limit_triggered but oil recovered, ' + 'probably because of wrong OCR result before') + self.auto_search_oil_limit_triggered = False checked = True return checked From ab68a1f333b9f275ac3b38224205f2f144e71c38 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 16 Sep 2022 23:11:20 +0800 Subject: [PATCH 8/9] Opt: Remove MetaReward call after meowfficer farming because meta attacks are on standalone tasks --- module/campaign/os_run.py | 1 - 1 file changed, 1 deletion(-) diff --git a/module/campaign/os_run.py b/module/campaign/os_run.py index 48f63d00e..6abd10264 100644 --- a/module/campaign/os_run.py +++ b/module/campaign/os_run.py @@ -49,7 +49,6 @@ class OSCampaignRun(OSMapOperation): except ActionPointLimit: if get_os_reset_remain() > 0: self.config.task_delay(server_update=True) - self.config.task_call('MetaReward', force_call=False) self.config.task_call('Reward') else: logger.info('Just less than 1 day to OpSi reset, delay 2.5 hours') From 98ebf5716aca3b9f5b50c50059994eee757ae4fc Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 16 Sep 2022 23:21:43 +0800 Subject: [PATCH 9/9] Fix: Redirected to page_reward by game after meta cleared (#1649) --- module/os_ash/meta.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/module/os_ash/meta.py b/module/os_ash/meta.py index 17e2c52c9..34c9144b2 100644 --- a/module/os_ash/meta.py +++ b/module/os_ash/meta.py @@ -59,6 +59,9 @@ class Meta(UI, MapEventHandler): return True if self.handle_popup_cancel(): return True + if self.appear_then_click(META_ENTRANCE, offset=(20, 300), interval=2): + return True + return False def _server_support():