mirror of
https://gitee.com/sui-feng-cb/AzurLaneAutoScript1
synced 2026-03-09 18:39:04 +08:00
Merge pull request #5533 from LmeSzinc/dev
Add: Event Springtide Inn Online (event_20260226_cn)
This commit is contained in:
commit
2a2901d218
@ -281,3 +281,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf
|
|||||||
| 20260129 | coalition 20260122 | Light & Shadow Fashion Shoot! | - | - | - | 光影風尚-拍攝進行時 |
|
| 20260129 | coalition 20260122 | Light & Shadow Fashion Shoot! | - | - | - | 光影風尚-拍攝進行時 |
|
||||||
| 20260205 | raid 20240328 | From Zero to Hero | 复刻从零开始的魔王讨伐之旅 | From Zero to Hero Rerun | ゼロから頑張る魔王討伐(復刻) | - |
|
| 20260205 | raid 20240328 | From Zero to Hero | 复刻从零开始的魔王讨伐之旅 | From Zero to Hero Rerun | ゼロから頑張る魔王討伐(復刻) | - |
|
||||||
| 20260212 | raid 20260212 | Spring Auction Adventure | 春宴怀玉香满庭 | Spring Auction Adventure | 新春玉逸品会 | 春宴懷玉香滿庭 |
|
| 20260212 | raid 20260212 | Spring Auction Adventure | 春宴怀玉香满庭 | Spring Auction Adventure | 新春玉逸品会 | 春宴懷玉香滿庭 |
|
||||||
|
| 20260226 | event 20260226 cn | Springtide Inn Online | 春满客栈Online | Springtide Inn Online | 春色旅籠Online | - |
|
||||||
|
|||||||
84
campaign/event_20260226_cn/a1.py
Normal file
84
campaign/event_20260226_cn/a1.py
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
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('A1')
|
||||||
|
MAP.shape = 'I8'
|
||||||
|
MAP.camera_data = ['E2', 'E6']
|
||||||
|
MAP.camera_data_spawn_point = ['E2']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- -- ME -- ME -- -- -- --
|
||||||
|
-- ++ -- -- -- ME ++ ++ --
|
||||||
|
-- ++ -- SP -- -- Me ++ --
|
||||||
|
-- ME -- -- SP -- -- ME --
|
||||||
|
++ -- Me -- -- -- Me -- --
|
||||||
|
-- ME ++ MS -- MS ++ ++ ++
|
||||||
|
-- -- ME -- __ -- ME ++ --
|
||||||
|
-- -- -- -- MB -- -- -- --
|
||||||
|
"""
|
||||||
|
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
|
||||||
|
"""
|
||||||
|
MAP.spawn_data = [
|
||||||
|
{'battle': 0, 'enemy': 2, 'siren': 1},
|
||||||
|
{'battle': 1, 'enemy': 1},
|
||||||
|
{'battle': 2, 'enemy': 1},
|
||||||
|
{'battle': 3, 'enemy': 1, 'boss': 1},
|
||||||
|
{'battle': 4, 'enemy': 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, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = []
|
||||||
|
MOVABLE_ENEMY_TURN = (2,)
|
||||||
|
MAP_HAS_SIREN = True
|
||||||
|
MAP_HAS_MOVABLE_ENEMY = True
|
||||||
|
MAP_HAS_MAP_STORY = False
|
||||||
|
MAP_HAS_FLEET_STEP = True
|
||||||
|
MAP_HAS_AMBUSH = False
|
||||||
|
MAP_HAS_MYSTERY = False
|
||||||
|
# ===== End of generated config =====
|
||||||
|
|
||||||
|
MAP_CHAPTER_SWITCH_20241219 = True
|
||||||
|
STAGE_ENTRANCE = ['half', '20240725']
|
||||||
|
MAP_HAS_MODE_SWITCH = True
|
||||||
|
STAGE_INCREASE_AB = True
|
||||||
|
MAP_WALK_USE_CURRENT_FLEET = True
|
||||||
|
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
|
||||||
|
MAP_SWIPE_MULTIPLY = (1.179, 1.201)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.140, 1.161)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.107, 1.127)
|
||||||
|
|
||||||
|
|
||||||
|
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_3(self):
|
||||||
|
return self.clear_boss()
|
||||||
74
campaign/event_20260226_cn/a2.py
Normal file
74
campaign/event_20260226_cn/a2.py
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
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 .a1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('A2')
|
||||||
|
MAP.shape = 'J7'
|
||||||
|
MAP.camera_data = ['D2', 'D5', 'E4']
|
||||||
|
MAP.camera_data_spawn_point = ['D5']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- ME -- -- ME ++ ++ -- -- --
|
||||||
|
MB -- ME -- -- -- ++ ME ME ++
|
||||||
|
++ -- ++ ++ Me -- Me -- -- ++
|
||||||
|
-- -- ++ ++ -- __ -- -- ME --
|
||||||
|
-- MS -- -- MS -- -- 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
|
||||||
|
"""
|
||||||
|
MAP.spawn_data = [
|
||||||
|
{'battle': 0, 'enemy': 2, 'siren': 1},
|
||||||
|
{'battle': 1, 'enemy': 1},
|
||||||
|
{'battle': 2, 'enemy': 1},
|
||||||
|
{'battle': 3, 'enemy': 1},
|
||||||
|
{'battle': 4, 'enemy': 1, '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, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = []
|
||||||
|
MOVABLE_ENEMY_TURN = (2,)
|
||||||
|
MAP_HAS_SIREN = True
|
||||||
|
MAP_HAS_MOVABLE_ENEMY = True
|
||||||
|
MAP_HAS_MAP_STORY = False
|
||||||
|
MAP_HAS_FLEET_STEP = True
|
||||||
|
MAP_HAS_AMBUSH = False
|
||||||
|
MAP_HAS_MYSTERY = False
|
||||||
|
# ===== End of generated config =====
|
||||||
|
|
||||||
|
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom-left'
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
75
campaign/event_20260226_cn/a3.py
Normal file
75
campaign/event_20260226_cn/a3.py
Normal file
@ -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
|
||||||
|
from .a1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('A3')
|
||||||
|
MAP.shape = 'H8'
|
||||||
|
MAP.camera_data = ['D4', 'D6', 'E3']
|
||||||
|
MAP.camera_data_spawn_point = ['D4']
|
||||||
|
MAP.map_data = """
|
||||||
|
++ ++ -- -- ME -- -- ME
|
||||||
|
++ ++ MS -- -- -- ME --
|
||||||
|
SP -- -- MS -- ++ -- --
|
||||||
|
SP -- -- MS -- ++ ME --
|
||||||
|
++ Me __ -- -- -- -- --
|
||||||
|
++ ME -- Me ++ ++ ++ --
|
||||||
|
-- -- -- -- Me -- ME --
|
||||||
|
MB ++ 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
|
||||||
|
"""
|
||||||
|
MAP.spawn_data = [
|
||||||
|
{'battle': 0, 'enemy': 2, 'siren': 1},
|
||||||
|
{'battle': 1, 'enemy': 1},
|
||||||
|
{'battle': 2, 'enemy': 1},
|
||||||
|
{'battle': 3, 'enemy': 1},
|
||||||
|
{'battle': 4, '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(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = []
|
||||||
|
MOVABLE_ENEMY_TURN = (2,)
|
||||||
|
MAP_HAS_SIREN = True
|
||||||
|
MAP_HAS_MOVABLE_ENEMY = True
|
||||||
|
MAP_HAS_MAP_STORY = False
|
||||||
|
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()
|
||||||
85
campaign/event_20260226_cn/b1.py
Normal file
85
campaign/event_20260226_cn/b1.py
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
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 = 'I8'
|
||||||
|
MAP.camera_data = ['D3', 'D6', 'F3', 'F6']
|
||||||
|
MAP.camera_data_spawn_point = ['D6']
|
||||||
|
MAP.map_data = """
|
||||||
|
++ -- -- -- -- -- -- -- --
|
||||||
|
ME -- ME ++ ++ ++ -- -- ++
|
||||||
|
-- ME -- MS -- MS -- ME ++
|
||||||
|
-- ++ MS -- -- -- Me -- ME
|
||||||
|
-- Me -- -- SP -- -- __ Me
|
||||||
|
-- -- -- SP -- -- Me -- --
|
||||||
|
++ ++ Me -- -- ++ -- MB --
|
||||||
|
++ ++ -- 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
|
||||||
|
"""
|
||||||
|
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, 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, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = []
|
||||||
|
MOVABLE_ENEMY_TURN = (2,)
|
||||||
|
MAP_HAS_SIREN = True
|
||||||
|
MAP_HAS_MOVABLE_ENEMY = True
|
||||||
|
MAP_HAS_MAP_STORY = False
|
||||||
|
MAP_HAS_FLEET_STEP = True
|
||||||
|
MAP_HAS_AMBUSH = False
|
||||||
|
MAP_HAS_MYSTERY = False
|
||||||
|
# ===== End of generated config =====
|
||||||
|
|
||||||
|
MAP_CHAPTER_SWITCH_20241219 = True
|
||||||
|
STAGE_ENTRANCE = ['half', '20240725']
|
||||||
|
MAP_HAS_MODE_SWITCH = True
|
||||||
|
STAGE_INCREASE_AB = True
|
||||||
|
MAP_WALK_USE_CURRENT_FLEET = True
|
||||||
|
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
|
||||||
|
MAP_SWIPE_MULTIPLY = (1.138, 1.160)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.101, 1.121)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.069, 1.088)
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
76
campaign/event_20260226_cn/b2.py
Normal file
76
campaign/event_20260226_cn/b2.py
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
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 = 'J8'
|
||||||
|
MAP.camera_data = ['D2', 'D6', 'G2', 'G6']
|
||||||
|
MAP.camera_data_spawn_point = ['G2']
|
||||||
|
MAP.map_data = """
|
||||||
|
MB ++ ME ME ++ ++ ++ -- -- --
|
||||||
|
-- -- -- -- ++ ME MS -- -- SP
|
||||||
|
-- ME ++ -- Me -- -- MS -- --
|
||||||
|
-- -- Me -- -- __ MS -- -- SP
|
||||||
|
-- ME -- ++ -- -- -- -- -- --
|
||||||
|
-- ++ ME -- Me -- Me ++ ++ ME
|
||||||
|
-- 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 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, \
|
||||||
|
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):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = []
|
||||||
|
MOVABLE_ENEMY_TURN = (2,)
|
||||||
|
MAP_HAS_SIREN = True
|
||||||
|
MAP_HAS_MOVABLE_ENEMY = True
|
||||||
|
MAP_HAS_MAP_STORY = False
|
||||||
|
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()
|
||||||
82
campaign/event_20260226_cn/b3.py
Normal file
82
campaign/event_20260226_cn/b3.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
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 = 'I10'
|
||||||
|
MAP.camera_data = ['D4', 'D6', 'D8', 'F4', 'F6', 'F8']
|
||||||
|
MAP.camera_data_spawn_point = ['D2']
|
||||||
|
MAP.map_data = """
|
||||||
|
++ ++ ++ SP -- SP ++ ++ ++
|
||||||
|
-- -- -- -- -- -- -- -- --
|
||||||
|
-- Me ++ -- MS -- ++ Me --
|
||||||
|
-- Me ++ MS -- MS ++ Me --
|
||||||
|
-- -- Me -- __ -- Me -- --
|
||||||
|
ME -- -- -- ++ -- -- -- ME
|
||||||
|
-- ME -- ++ ++ ++ -- ME --
|
||||||
|
ME -- -- ME -- ME -- -- ME
|
||||||
|
++ ++ -- -- MB -- -- ++ ++
|
||||||
|
++ ++ -- 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 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, \
|
||||||
|
A10, B10, C10, D10, E10, F10, G10, H10, I10, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = []
|
||||||
|
MOVABLE_ENEMY_TURN = (2,)
|
||||||
|
MAP_HAS_SIREN = True
|
||||||
|
MAP_HAS_MOVABLE_ENEMY = True
|
||||||
|
MAP_HAS_MAP_STORY = False
|
||||||
|
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()
|
||||||
84
campaign/event_20260226_cn/c1.py
Normal file
84
campaign/event_20260226_cn/c1.py
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
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('C1')
|
||||||
|
MAP.shape = 'I8'
|
||||||
|
MAP.camera_data = ['E2', 'E6']
|
||||||
|
MAP.camera_data_spawn_point = ['E2']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- -- ME -- ME -- -- -- --
|
||||||
|
-- ++ -- -- -- ME ++ ++ --
|
||||||
|
-- ++ -- SP -- -- Me ++ --
|
||||||
|
-- ME -- -- SP -- -- ME --
|
||||||
|
++ -- Me -- -- -- Me -- --
|
||||||
|
-- ME ++ MS -- MS ++ ++ ++
|
||||||
|
-- -- ME -- __ -- ME ++ --
|
||||||
|
-- -- -- -- MB -- -- -- --
|
||||||
|
"""
|
||||||
|
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
|
||||||
|
"""
|
||||||
|
MAP.spawn_data = [
|
||||||
|
{'battle': 0, 'enemy': 2, 'siren': 2},
|
||||||
|
{'battle': 1, 'enemy': 1},
|
||||||
|
{'battle': 2, 'enemy': 2},
|
||||||
|
{'battle': 3, 'enemy': 1},
|
||||||
|
{'battle': 4, '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, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = []
|
||||||
|
MOVABLE_ENEMY_TURN = (2,)
|
||||||
|
MAP_HAS_SIREN = True
|
||||||
|
MAP_HAS_MOVABLE_ENEMY = True
|
||||||
|
MAP_HAS_MAP_STORY = False
|
||||||
|
MAP_HAS_FLEET_STEP = True
|
||||||
|
MAP_HAS_AMBUSH = False
|
||||||
|
MAP_HAS_MYSTERY = False
|
||||||
|
# ===== End of generated config =====
|
||||||
|
|
||||||
|
MAP_CHAPTER_SWITCH_20241219 = True
|
||||||
|
STAGE_ENTRANCE = ['half', '20240725']
|
||||||
|
MAP_HAS_MODE_SWITCH = True
|
||||||
|
STAGE_INCREASE_AB = True
|
||||||
|
MAP_WALK_USE_CURRENT_FLEET = True
|
||||||
|
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
|
||||||
|
MAP_SWIPE_MULTIPLY = (1.179, 1.201)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.140, 1.161)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.107, 1.127)
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
74
campaign/event_20260226_cn/c2.py
Normal file
74
campaign/event_20260226_cn/c2.py
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
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 .c1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('C2')
|
||||||
|
MAP.shape = 'J7'
|
||||||
|
MAP.camera_data = ['D2', 'D5', 'E4']
|
||||||
|
MAP.camera_data_spawn_point = ['D5']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- ME -- -- ME ++ ++ -- -- --
|
||||||
|
MB -- ME -- -- -- ++ ME ME ++
|
||||||
|
++ -- ++ ++ Me -- Me -- -- ++
|
||||||
|
-- -- ++ ++ -- __ -- -- ME --
|
||||||
|
-- MS -- -- MS -- -- 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
|
||||||
|
"""
|
||||||
|
MAP.spawn_data = [
|
||||||
|
{'battle': 0, 'enemy': 2, 'siren': 2},
|
||||||
|
{'battle': 1, 'enemy': 1},
|
||||||
|
{'battle': 2, 'enemy': 2},
|
||||||
|
{'battle': 3, 'enemy': 1},
|
||||||
|
{'battle': 4, 'enemy': 1, '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, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = []
|
||||||
|
MOVABLE_ENEMY_TURN = (2,)
|
||||||
|
MAP_HAS_SIREN = True
|
||||||
|
MAP_HAS_MOVABLE_ENEMY = True
|
||||||
|
MAP_HAS_MAP_STORY = False
|
||||||
|
MAP_HAS_FLEET_STEP = True
|
||||||
|
MAP_HAS_AMBUSH = False
|
||||||
|
MAP_HAS_MYSTERY = False
|
||||||
|
# ===== End of generated config =====
|
||||||
|
|
||||||
|
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom-left'
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
76
campaign/event_20260226_cn/c3.py
Normal file
76
campaign/event_20260226_cn/c3.py
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
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 .c1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('C3')
|
||||||
|
MAP.shape = 'H8'
|
||||||
|
MAP.camera_data = ['D4', 'D6', 'E3']
|
||||||
|
MAP.camera_data_spawn_point = ['D4']
|
||||||
|
MAP.map_data = """
|
||||||
|
++ ++ -- -- ME -- -- ME
|
||||||
|
++ ++ MS -- -- -- ME --
|
||||||
|
SP -- -- MS -- ++ -- --
|
||||||
|
SP -- -- MS -- ++ ME --
|
||||||
|
++ Me __ -- -- -- -- --
|
||||||
|
++ ME -- Me ++ ++ ++ --
|
||||||
|
-- -- -- -- Me -- ME --
|
||||||
|
MB ++ 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
|
||||||
|
"""
|
||||||
|
MAP.spawn_data = [
|
||||||
|
{'battle': 0, 'enemy': 2, 'siren': 2},
|
||||||
|
{'battle': 1, 'enemy': 1},
|
||||||
|
{'battle': 2, 'enemy': 2},
|
||||||
|
{'battle': 3, 'enemy': 1},
|
||||||
|
{'battle': 4, 'enemy': 1},
|
||||||
|
{'battle': 5, '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(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = []
|
||||||
|
MOVABLE_ENEMY_TURN = (2,)
|
||||||
|
MAP_HAS_SIREN = True
|
||||||
|
MAP_HAS_MOVABLE_ENEMY = True
|
||||||
|
MAP_HAS_MAP_STORY = False
|
||||||
|
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()
|
||||||
85
campaign/event_20260226_cn/d1.py
Normal file
85
campaign/event_20260226_cn/d1.py
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
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 = 'I8'
|
||||||
|
MAP.camera_data = ['D3', 'D6', 'F3', 'F6']
|
||||||
|
MAP.camera_data_spawn_point = ['D6']
|
||||||
|
MAP.map_data = """
|
||||||
|
++ -- -- -- -- -- -- -- --
|
||||||
|
ME -- ME ++ ++ ++ -- -- ++
|
||||||
|
-- ME -- MS -- MS -- ME ++
|
||||||
|
-- ++ MS -- -- -- Me -- ME
|
||||||
|
-- Me -- -- SP -- -- __ Me
|
||||||
|
-- -- -- SP -- -- Me -- --
|
||||||
|
++ ++ Me -- -- ++ -- MB --
|
||||||
|
++ ++ -- 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
|
||||||
|
"""
|
||||||
|
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, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = []
|
||||||
|
MOVABLE_ENEMY_TURN = (2,)
|
||||||
|
MAP_HAS_SIREN = True
|
||||||
|
MAP_HAS_MOVABLE_ENEMY = True
|
||||||
|
MAP_HAS_MAP_STORY = False
|
||||||
|
MAP_HAS_FLEET_STEP = True
|
||||||
|
MAP_HAS_AMBUSH = False
|
||||||
|
MAP_HAS_MYSTERY = False
|
||||||
|
# ===== End of generated config =====
|
||||||
|
|
||||||
|
MAP_CHAPTER_SWITCH_20241219 = True
|
||||||
|
STAGE_ENTRANCE = ['half', '20240725']
|
||||||
|
MAP_HAS_MODE_SWITCH = True
|
||||||
|
STAGE_INCREASE_AB = True
|
||||||
|
MAP_WALK_USE_CURRENT_FLEET = True
|
||||||
|
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
|
||||||
|
MAP_SWIPE_MULTIPLY = (1.138, 1.160)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.101, 1.121)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.069, 1.088)
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
85
campaign/event_20260226_cn/d2.py
Normal file
85
campaign/event_20260226_cn/d2.py
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
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 = 'J8'
|
||||||
|
MAP.camera_data = ['D2', 'D6', 'G2', 'G6']
|
||||||
|
MAP.camera_data_spawn_point = ['G2']
|
||||||
|
MAP.map_data = """
|
||||||
|
MB ++ ME ME ++ ++ ++ -- -- --
|
||||||
|
-- -- -- -- ++ ME MS -- -- SP
|
||||||
|
-- ME ++ -- Me -- -- MS -- --
|
||||||
|
-- -- Me -- -- __ MS -- -- SP
|
||||||
|
-- ME -- ++ -- -- -- -- -- --
|
||||||
|
-- ++ ME -- Me -- Me ++ ++ ME
|
||||||
|
-- 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 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, \
|
||||||
|
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):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = []
|
||||||
|
MOVABLE_ENEMY_TURN = (2,)
|
||||||
|
MAP_HAS_SIREN = True
|
||||||
|
MAP_HAS_MOVABLE_ENEMY = True
|
||||||
|
MAP_HAS_MAP_STORY = False
|
||||||
|
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()
|
||||||
91
campaign/event_20260226_cn/d3.py
Normal file
91
campaign/event_20260226_cn/d3.py
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
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 = 'I10'
|
||||||
|
MAP.camera_data = ['D4', 'D6', 'D8', 'F4', 'F6', 'F8']
|
||||||
|
MAP.camera_data_spawn_point = ['D2']
|
||||||
|
MAP.map_data = """
|
||||||
|
++ ++ ++ SP -- SP ++ ++ ++
|
||||||
|
-- -- -- -- -- -- -- -- --
|
||||||
|
-- Me ++ -- MS -- ++ Me --
|
||||||
|
-- Me ++ MS -- MS ++ Me --
|
||||||
|
-- -- Me -- __ -- Me -- --
|
||||||
|
ME -- -- -- ++ -- -- -- ME
|
||||||
|
-- ME -- ++ ++ ++ -- ME --
|
||||||
|
ME -- -- ME -- ME -- -- ME
|
||||||
|
++ ++ -- -- MB -- -- ++ ++
|
||||||
|
++ ++ -- 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 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, \
|
||||||
|
A10, B10, C10, D10, E10, F10, G10, H10, I10, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = []
|
||||||
|
MOVABLE_ENEMY_TURN = (2,)
|
||||||
|
MAP_HAS_SIREN = True
|
||||||
|
MAP_HAS_MOVABLE_ENEMY = True
|
||||||
|
MAP_HAS_MAP_STORY = False
|
||||||
|
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()
|
||||||
96
campaign/event_20260226_cn/sp.py
Normal file
96
campaign/event_20260226_cn/sp.py
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
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 = 'H7'
|
||||||
|
MAP.camera_data = ['D5', 'E2', 'E5']
|
||||||
|
MAP.camera_data_spawn_point = ['D2']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- -- -- -- ++ -- ME --
|
||||||
|
-- SP SP -- ++ ME -- ME
|
||||||
|
-- -- -- -- MS -- ME --
|
||||||
|
++ ++ ++ MS __ -- ++ ++
|
||||||
|
-- ME -- -- -- MS -- ++
|
||||||
|
ME -- ME -- ++ -- MB --
|
||||||
|
-- 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
|
||||||
|
"""
|
||||||
|
MAP.spawn_data = [
|
||||||
|
{'battle': 0, 'enemy': 10, 'siren': 3},
|
||||||
|
{'battle': 1},
|
||||||
|
{'battle': 2},
|
||||||
|
{'battle': 3},
|
||||||
|
{'battle': 4},
|
||||||
|
{'battle': 5},
|
||||||
|
{'battle': 6},
|
||||||
|
{'battle': 7, '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, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = []
|
||||||
|
MOVABLE_ENEMY_TURN = (2,)
|
||||||
|
MAP_HAS_SIREN = True
|
||||||
|
MAP_HAS_MOVABLE_ENEMY = True
|
||||||
|
MAP_HAS_MAP_STORY = False
|
||||||
|
MAP_HAS_FLEET_STEP = True
|
||||||
|
MAP_HAS_AMBUSH = False
|
||||||
|
MAP_HAS_MYSTERY = False
|
||||||
|
STAR_REQUIRE_1 = 0
|
||||||
|
STAR_REQUIRE_2 = 0
|
||||||
|
STAR_REQUIRE_3 = 0
|
||||||
|
# ===== End of generated config =====
|
||||||
|
|
||||||
|
MAP_CHAPTER_SWITCH_20241219 = True
|
||||||
|
STAGE_ENTRANCE = ['half', '20240725']
|
||||||
|
MAP_HAS_MODE_SWITCH = False
|
||||||
|
STAGE_INCREASE_AB = True
|
||||||
|
MAP_WALK_USE_CURRENT_FLEET = True
|
||||||
|
MAP_IS_ONE_TIME_STAGE = True
|
||||||
|
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
|
||||||
|
MAP_SWIPE_MULTIPLY = (1.162, 1.184)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.124, 1.145)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.091, 1.111)
|
||||||
|
|
||||||
|
|
||||||
|
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=2):
|
||||||
|
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_7(self):
|
||||||
|
return self.fleet_boss.clear_boss()
|
||||||
@ -41,11 +41,21 @@ class CampaignOcr(ModuleBase):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def _campaign_ocr_result_process(result):
|
def _campaign_ocr_result_process(result):
|
||||||
# The result will be like '7--2', because tha dash in game is '–' not '-'
|
# The result will be like '7--2', because tha dash in game is '–' not '-'
|
||||||
result = result.lower().replace('--', '-').replace('--', '-')
|
result = result.replace('--', '-').replace('--', '-').lstrip('-')
|
||||||
if result.startswith('-'):
|
|
||||||
result = result[1:]
|
# Replace wrong 'I' from results like 'I1-1', '1I-1', 'I-I', '11-I', 'I4-4', to '1'
|
||||||
|
# while keeping results like 'isp-2', 'sp1'
|
||||||
|
def replace_func(match):
|
||||||
|
segment = match.group(0)
|
||||||
|
return segment.replace('I', '1')
|
||||||
|
|
||||||
|
result = re.sub(r'[0-9I]+-[0-9I]+', replace_func, result, count=1)
|
||||||
|
|
||||||
|
# Convert '72' to '7-2'
|
||||||
if len(result) == 2 and result[0].isdigit():
|
if len(result) == 2 and result[0].isdigit():
|
||||||
result = '-'.join(result)
|
result = '-'.join(result)
|
||||||
|
|
||||||
|
result = result.lower()
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|||||||
@ -1636,24 +1636,24 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"display": "hide",
|
"display": "hide",
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220526_cn"
|
"event_20220526_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
@ -1917,23 +1917,23 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220526_cn"
|
"event_20220526_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
@ -2312,23 +2312,23 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220526_cn"
|
"event_20220526_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
@ -4035,23 +4035,23 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220526_cn"
|
"event_20220526_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
@ -4447,23 +4447,23 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220526_cn"
|
"event_20220526_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
@ -4859,23 +4859,23 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220526_cn"
|
"event_20220526_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
@ -5271,23 +5271,23 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220526_cn"
|
"event_20220526_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
@ -5673,23 +5673,23 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220526_cn"
|
"event_20220526_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20220526_cn",
|
"event_20220526_cn",
|
||||||
"event_20231221_cn"
|
"event_20260226_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
|
|||||||
@ -766,6 +766,7 @@
|
|||||||
"event_20250912_cn": "A Dance for Amahara Above",
|
"event_20250912_cn": "A Dance for Amahara Above",
|
||||||
"event_20251023_cn": "Tempesta and Islas de Libertád",
|
"event_20251023_cn": "Tempesta and Islas de Libertád",
|
||||||
"event_20251218_cn": "A Note Through the Firmament",
|
"event_20251218_cn": "A Note Through the Firmament",
|
||||||
|
"event_20260226_cn": "Springtide Inn Online",
|
||||||
"raid_20200624": "Air Raid Drills with Essex Rerun",
|
"raid_20200624": "Air Raid Drills with Essex Rerun",
|
||||||
"raid_20210708": "Cross Wave rerun",
|
"raid_20210708": "Cross Wave rerun",
|
||||||
"raid_20220127": "Mystery Investigation",
|
"raid_20220127": "Mystery Investigation",
|
||||||
|
|||||||
@ -766,6 +766,7 @@
|
|||||||
"event_20250912_cn": "アマハラに舞い奉れ",
|
"event_20250912_cn": "アマハラに舞い奉れ",
|
||||||
"event_20251023_cn": "テンペスタと自由群島",
|
"event_20251023_cn": "テンペスタと自由群島",
|
||||||
"event_20251218_cn": "天穹に響く音謡",
|
"event_20251218_cn": "天穹に響く音謡",
|
||||||
|
"event_20260226_cn": "春色旅籠Online",
|
||||||
"raid_20200624": "特別演習超空強襲波(復刻)",
|
"raid_20200624": "特別演習超空強襲波(復刻)",
|
||||||
"raid_20210708": "交錯する新たな波 (復刻)",
|
"raid_20210708": "交錯する新たな波 (復刻)",
|
||||||
"raid_20220127": "秘密事件調査",
|
"raid_20220127": "秘密事件調査",
|
||||||
|
|||||||
@ -766,6 +766,7 @@
|
|||||||
"event_20250912_cn": "起舞于天原之上",
|
"event_20250912_cn": "起舞于天原之上",
|
||||||
"event_20251023_cn": "飓风与自由群岛",
|
"event_20251023_cn": "飓风与自由群岛",
|
||||||
"event_20251218_cn": "响彻于天穹之音",
|
"event_20251218_cn": "响彻于天穹之音",
|
||||||
|
"event_20260226_cn": "春满客栈Online",
|
||||||
"raid_20200624": "复刻特别演习埃塞克斯级",
|
"raid_20200624": "复刻特别演习埃塞克斯级",
|
||||||
"raid_20210708": "复刻穿越彼方的水线",
|
"raid_20210708": "复刻穿越彼方的水线",
|
||||||
"raid_20220127": "演习神秘事件调查",
|
"raid_20220127": "演习神秘事件调查",
|
||||||
|
|||||||
@ -766,6 +766,7 @@
|
|||||||
"event_20250912_cn": "起舞於天原之上",
|
"event_20250912_cn": "起舞於天原之上",
|
||||||
"event_20251023_cn": "颶風與自由群島",
|
"event_20251023_cn": "颶風與自由群島",
|
||||||
"event_20251218_cn": "響徹於天穹之音",
|
"event_20251218_cn": "響徹於天穹之音",
|
||||||
|
"event_20260226_cn": "Springtide Inn Online",
|
||||||
"raid_20200624": "特別演習埃塞克斯級(復刻)",
|
"raid_20200624": "特別演習埃塞克斯級(復刻)",
|
||||||
"raid_20210708": "復刻穿越彼方的水線",
|
"raid_20210708": "復刻穿越彼方的水線",
|
||||||
"raid_20220127": "演習神秘事件調查",
|
"raid_20220127": "演習神秘事件調查",
|
||||||
|
|||||||
@ -20,7 +20,7 @@ from module.os.assets import FLEET_EMP_DEBUFF, MAP_EXIT, MAP_GOTO_GLOBE, STRONGH
|
|||||||
from module.os.camera import OSCamera
|
from module.os.camera import OSCamera
|
||||||
from module.os.map_base import OSCampaignMap
|
from module.os.map_base import OSCampaignMap
|
||||||
from module.os_ash.ash import OSAsh
|
from module.os_ash.ash import OSAsh
|
||||||
from module.os_combat.combat import Combat
|
from module.os_combat.combat import Combat, BATTLE_PREPARATION, SIREN_PREPARATION
|
||||||
from module.os_handler.assets import AUTO_SEARCH_REWARD, CLICK_SAFE_AREA, IN_MAP, PORT_ENTER
|
from module.os_handler.assets import AUTO_SEARCH_REWARD, CLICK_SAFE_AREA, IN_MAP, PORT_ENTER
|
||||||
from module.os_shop.assets import PORT_SUPPLY_CHECK
|
from module.os_shop.assets import PORT_SUPPLY_CHECK
|
||||||
from module.ui.assets import BACK_ARROW
|
from module.ui.assets import BACK_ARROW
|
||||||
@ -283,6 +283,13 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh):
|
|||||||
clicked_story = False
|
clicked_story = False
|
||||||
stuck_timer = Timer(20, count=5).start()
|
stuck_timer = Timer(20, count=5).start()
|
||||||
confirm_timer.reset()
|
confirm_timer.reset()
|
||||||
|
|
||||||
|
def abyssal_expected_end():
|
||||||
|
# add handle_map_event() because OSCombat.combat_status() removes get_items
|
||||||
|
if self.handle_map_event(drop=drop):
|
||||||
|
return False
|
||||||
|
return self.is_in_map()
|
||||||
|
|
||||||
for _ in self.loop(skip_first=skip_first_screenshot):
|
for _ in self.loop(skip_first=skip_first_screenshot):
|
||||||
# Map event
|
# Map event
|
||||||
event = self.handle_map_event(drop=drop)
|
event = self.handle_map_event(drop=drop)
|
||||||
@ -347,7 +354,7 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh):
|
|||||||
if self.combat_appear():
|
if self.combat_appear():
|
||||||
# Use ui_back() for testing, because there are too few abyssal loggers every month.
|
# Use ui_back() for testing, because there are too few abyssal loggers every month.
|
||||||
# self.ui_back(check_button=self.is_in_map)
|
# self.ui_back(check_button=self.is_in_map)
|
||||||
self.combat(expected_end=self.is_in_map, fleet_index=self.fleet_show_index, save_get_items=drop)
|
self.combat(expected_end=abyssal_expected_end, fleet_index=self.fleet_show_index, save_get_items=drop)
|
||||||
confirm_timer.reset()
|
confirm_timer.reset()
|
||||||
stuck_timer.reset()
|
stuck_timer.reset()
|
||||||
result.add('event')
|
result.add('event')
|
||||||
@ -700,6 +707,7 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh):
|
|||||||
logger.hr('BOSS leave')
|
logger.hr('BOSS leave')
|
||||||
# Update local view
|
# Update local view
|
||||||
self.update_os()
|
self.update_os()
|
||||||
|
self.predict()
|
||||||
|
|
||||||
click_timer = Timer(3)
|
click_timer = Timer(3)
|
||||||
pause_interval = Timer(0.5, count=1)
|
pause_interval = Timer(0.5, count=1)
|
||||||
@ -713,8 +721,13 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh):
|
|||||||
|
|
||||||
# Re-enter boss accidentally
|
# Re-enter boss accidentally
|
||||||
if pause_interval.reached():
|
if pause_interval.reached():
|
||||||
if self.combat_appear():
|
if self.appear(BATTLE_PREPARATION):
|
||||||
logger.info(f'combat_appear -> {BACK_ARROW}')
|
logger.info(f'{BATTLE_PREPARATION} -> {BACK_ARROW}')
|
||||||
|
self.device.click(BACK_ARROW)
|
||||||
|
pause_interval.reset()
|
||||||
|
continue
|
||||||
|
if self.appear(SIREN_PREPARATION, offset=(20, 20)):
|
||||||
|
logger.info(f'{SIREN_PREPARATION} -> {BACK_ARROW}')
|
||||||
self.device.click(BACK_ARROW)
|
self.device.click(BACK_ARROW)
|
||||||
pause_interval.reset()
|
pause_interval.reset()
|
||||||
continue
|
continue
|
||||||
|
|||||||
@ -50,20 +50,16 @@ def patch_mimetype():
|
|||||||
all deployment, we use the builtin mimetype table only.
|
all deployment, we use the builtin mimetype table only.
|
||||||
"""
|
"""
|
||||||
import mimetypes
|
import mimetypes
|
||||||
if mimetypes.inited:
|
# lock as inited
|
||||||
# ohno mimetypes already inited
|
mimetypes.inited = True
|
||||||
db = mimetypes.MimeTypes()
|
# create a new clean instance
|
||||||
|
db = mimetypes.MimeTypes(filenames=())
|
||||||
mimetypes._db = db
|
mimetypes._db = db
|
||||||
# override global variable
|
# override global variable
|
||||||
mimetypes.encodings_map = db.encodings_map
|
mimetypes.encodings_map = db.encodings_map
|
||||||
mimetypes.suffix_map = db.suffix_map
|
mimetypes.suffix_map = db.suffix_map
|
||||||
mimetypes.types_map = db.types_map[True]
|
mimetypes.types_map = db.types_map[True]
|
||||||
mimetypes.common_types = db.types_map[False]
|
mimetypes.common_types = db.types_map[False]
|
||||||
else:
|
|
||||||
# init db with the default table
|
|
||||||
db = mimetypes.MimeTypes()
|
|
||||||
mimetypes._db = db
|
|
||||||
mimetypes.inited = True
|
|
||||||
|
|
||||||
|
|
||||||
def fix_py37_subprocess_communicate():
|
def fix_py37_subprocess_communicate():
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user