mirror of
https://gitee.com/sui-feng-cb/AzurLaneAutoScript1
synced 2026-03-17 11:05:25 +08:00
Add: clear mode for Event Substellar Crepuscule
This commit is contained in:
@@ -223,3 +223,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf
|
|||||||
| 20241114 | event 20240229 cn | Snowrealm Peregrination | - | - | - | 雪境迷蹤 |
|
| 20241114 | event 20240229 cn | Snowrealm Peregrination | - | - | - | 雪境迷蹤 |
|
||||||
| 20241121 | event 20241121 cn | Dangerous Inventions Incoming | 危险发明迫近中 | Dangerous Inventions Incoming | 危険発明接近中 | - |
|
| 20241121 | event 20241121 cn | Dangerous Inventions Incoming | 危险发明迫近中 | Dangerous Inventions Incoming | 危険発明接近中 | - |
|
||||||
| 20241128 | event 20241121 cn | - | - | - | - | 危險發明逼近中 |
|
| 20241128 | event 20241121 cn | - | - | - | - | 危險發明逼近中 |
|
||||||
|
| 20241219 | event 20241219 cn | Substellar Crepuscule | 星光下的余晖 | Substellar Crepuscule | 星降る夕影の残光 | - |
|
||||||
|
|||||||
88
campaign/event_20241219_cn/a1.py
Normal file
88
campaign/event_20241219_cn/a1.py
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
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('A1')
|
||||||
|
MAP.shape = 'I7'
|
||||||
|
MAP.camera_data = ['D5', 'F2', 'F5']
|
||||||
|
MAP.camera_data_spawn_point = ['D1']
|
||||||
|
MAP.map_data = """
|
||||||
|
SP -- SP ++ ++ -- ME -- --
|
||||||
|
-- -- -- ++ ++ ME -- MB --
|
||||||
|
-- MS -- -- Me -- -- -- ME
|
||||||
|
++ -- MS -- -- -- 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
|
||||||
|
"""
|
||||||
|
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, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ['AmagiMasked']
|
||||||
|
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 =====
|
||||||
|
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||||
|
'height': (120, 255 - 49),
|
||||||
|
'width': (1.5, 10),
|
||||||
|
'prominence': 10,
|
||||||
|
'distance': 35,
|
||||||
|
}
|
||||||
|
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||||
|
'height': (255 - 49, 255),
|
||||||
|
'prominence': 10,
|
||||||
|
'distance': 50,
|
||||||
|
'wlen': 1000
|
||||||
|
}
|
||||||
|
HOMO_CANNY_THRESHOLD = (75, 100)
|
||||||
|
STAGE_ENTRANCE = ['half', '20240725']
|
||||||
|
MAP_SWIPE_MULTIPLY = (1.234, 1.257)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.193, 1.215)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.158, 1.179)
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
78
campaign/event_20241219_cn/a2.py
Normal file
78
campaign/event_20241219_cn/a2.py
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
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
|
||||||
|
from .a1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('A2')
|
||||||
|
MAP.shape = 'I8'
|
||||||
|
MAP.camera_data = ['D3', 'D6', 'F2', 'F6']
|
||||||
|
MAP.camera_data_spawn_point = ['F6']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- -- -- ++ -- -- -- -- --
|
||||||
|
++ ME -- -- ME -- ME ++ --
|
||||||
|
++ -- ME -- -- -- -- -- ME
|
||||||
|
-- ME -- -- Me Me -- Me --
|
||||||
|
-- -- -- ME ++ ++ -- __ ME
|
||||||
|
-- ME -- -- SP ++ MS -- --
|
||||||
|
-- ++ Me -- -- -- -- MS --
|
||||||
|
MB ++ -- -- SP ++ MS -- ++
|
||||||
|
"""
|
||||||
|
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},
|
||||||
|
{'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(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ['AmagiMasked']
|
||||||
|
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_SWIPE_MULTIPLY = (1.070, 1.090)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.035, 1.054)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.005, 1.023)
|
||||||
|
|
||||||
|
|
||||||
|
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_20241219_cn/a3.py
Normal file
75
campaign/event_20241219_cn/a3.py
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
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
|
||||||
|
from .a1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('A3')
|
||||||
|
MAP.shape = 'I7'
|
||||||
|
MAP.camera_data = ['E2', 'E5']
|
||||||
|
MAP.camera_data_spawn_point = ['F3']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- -- -- -- Me ++ ++ -- --
|
||||||
|
++ ++ ++ ME -- ME ++ Me --
|
||||||
|
-- -- ME -- -- MS -- -- SP
|
||||||
|
-- MB -- -- ME __ MS -- --
|
||||||
|
-- -- ME -- -- MS -- -- SP
|
||||||
|
++ ++ ++ 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
|
||||||
|
"""
|
||||||
|
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, \
|
||||||
|
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, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ['AmagiMasked']
|
||||||
|
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_SWIPE_MULTIPLY = (1.176, 1.198)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.137, 1.158)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.104, 1.124)
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
92
campaign/event_20241219_cn/b1.py
Normal file
92
campaign/event_20241219_cn/b1.py
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
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('B1')
|
||||||
|
MAP.shape = 'K8'
|
||||||
|
MAP.camera_data = ['D3', 'D6', 'G2', 'G6']
|
||||||
|
MAP.camera_data_spawn_point = ['E2']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- ++ ++ ++ SP -- SP ++ -- -- --
|
||||||
|
ME -- Me -- -- __ -- -- -- MB --
|
||||||
|
-- -- -- -- -- MS -- ++ -- -- --
|
||||||
|
ME -- Me ++ MS -- MS ++ ++ ++ ++
|
||||||
|
++ -- -- ++ ++ 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 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, J1, K1, \
|
||||||
|
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \
|
||||||
|
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \
|
||||||
|
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \
|
||||||
|
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \
|
||||||
|
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \
|
||||||
|
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \
|
||||||
|
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ["Fox"]
|
||||||
|
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 =====
|
||||||
|
STAGE_ENTRANCE = ['half', '20240725']
|
||||||
|
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||||
|
'height': (80, 255 - 17),
|
||||||
|
'width': (0.9, 10),
|
||||||
|
'prominence': 10,
|
||||||
|
'distance': 35,
|
||||||
|
}
|
||||||
|
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||||
|
'height': (255 - 17, 255),
|
||||||
|
'prominence': 10,
|
||||||
|
'distance': 50,
|
||||||
|
# 'width': (0, 7),
|
||||||
|
'wlen': 1000
|
||||||
|
}
|
||||||
|
MAP_SWIPE_MULTIPLY = (1.222, 1.245)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.182, 1.204)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.148, 1.168)
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
79
campaign/event_20241219_cn/b2.py
Normal file
79
campaign/event_20241219_cn/b2.py
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
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
|
||||||
|
from .b1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('B2')
|
||||||
|
MAP.shape = 'K8'
|
||||||
|
MAP.camera_data = ['E2', 'E6', 'H2', 'H6']
|
||||||
|
MAP.camera_data_spawn_point = ['E2']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- -- -- ++ SP -- SP ++ ME -- ME
|
||||||
|
-- MB -- -- -- __ -- -- -- ME --
|
||||||
|
-- -- -- ++ -- MS -- ++ ME -- --
|
||||||
|
++ ++ ++ ++ MS ++ MS ++ ++ ++ --
|
||||||
|
-- -- -- -- -- 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 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, \
|
||||||
|
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \
|
||||||
|
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \
|
||||||
|
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \
|
||||||
|
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \
|
||||||
|
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \
|
||||||
|
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \
|
||||||
|
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ['Fox']
|
||||||
|
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_SWIPE_MULTIPLY = (1.215, 1.238)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.175, 1.197)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.141, 1.161)
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
83
campaign/event_20241219_cn/b3.py
Normal file
83
campaign/event_20241219_cn/b3.py
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
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
|
||||||
|
from .b1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('B3')
|
||||||
|
MAP.shape = 'I9'
|
||||||
|
MAP.camera_data = ['E2', 'E5']
|
||||||
|
MAP.camera_data_spawn_point = ['E7']
|
||||||
|
MAP.map_data = """
|
||||||
|
++ ME -- ME -- ME -- ME ++
|
||||||
|
-- -- ME -- MB -- ME -- --
|
||||||
|
-- ME -- ME -- ME -- ME --
|
||||||
|
-- ++ ++ ++ MS ++ ++ ++ --
|
||||||
|
-- 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 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 = ['Fox']
|
||||||
|
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_SWIPE_MULTIPLY = (1.035, 1.055)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.001, 1.019)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.972, 0.989)
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
89
campaign/event_20241219_cn/c1.py
Normal file
89
campaign/event_20241219_cn/c1.py
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
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('C1')
|
||||||
|
MAP.shape = 'I7'
|
||||||
|
MAP.camera_data = ['D5', 'F2', 'F5']
|
||||||
|
MAP.camera_data_spawn_point = ['D1']
|
||||||
|
MAP.map_data = """
|
||||||
|
SP -- SP ++ ++ -- ME -- --
|
||||||
|
-- -- -- ++ ++ ME -- MB --
|
||||||
|
-- MS -- -- Me -- -- -- ME
|
||||||
|
++ -- MS -- -- -- 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
|
||||||
|
"""
|
||||||
|
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, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ['AmagiMasked']
|
||||||
|
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 =====
|
||||||
|
|
||||||
|
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||||
|
'height': (120, 255 - 49),
|
||||||
|
'width': (1.5, 10),
|
||||||
|
'prominence': 10,
|
||||||
|
'distance': 35,
|
||||||
|
}
|
||||||
|
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||||
|
'height': (255 - 49, 255),
|
||||||
|
'prominence': 10,
|
||||||
|
'distance': 50,
|
||||||
|
'wlen': 1000
|
||||||
|
}
|
||||||
|
HOMO_CANNY_THRESHOLD = (75, 100)
|
||||||
|
STAGE_ENTRANCE = ['half', '20240725']
|
||||||
|
MAP_SWIPE_MULTIPLY = (1.234, 1.257)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.193, 1.215)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.158, 1.179)
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
78
campaign/event_20241219_cn/c2.py
Normal file
78
campaign/event_20241219_cn/c2.py
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
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
|
||||||
|
from .c1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('C2')
|
||||||
|
MAP.shape = 'I8'
|
||||||
|
MAP.camera_data = ['D3', 'D6', 'F2', 'F6']
|
||||||
|
MAP.camera_data_spawn_point = ['F6']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- -- -- ++ -- -- -- -- --
|
||||||
|
++ ME -- -- ME -- ME ++ --
|
||||||
|
++ -- ME -- -- -- -- -- ME
|
||||||
|
-- ME -- -- Me Me -- Me --
|
||||||
|
-- -- -- ME ++ ++ -- __ ME
|
||||||
|
-- ME -- -- SP ++ MS -- --
|
||||||
|
-- ++ Me -- -- -- -- MS --
|
||||||
|
MB ++ -- -- SP ++ MS -- ++
|
||||||
|
"""
|
||||||
|
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(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ['AmagiMasked']
|
||||||
|
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_SWIPE_MULTIPLY = (1.062, 1.082)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.027, 1.046)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.997, 1.015)
|
||||||
|
|
||||||
|
|
||||||
|
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_20241219_cn/c3.py
Normal file
76
campaign/event_20241219_cn/c3.py
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
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
|
||||||
|
from .c1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('C3')
|
||||||
|
MAP.shape = 'I7'
|
||||||
|
MAP.camera_data = ['E2', 'E5']
|
||||||
|
MAP.camera_data_spawn_point = ['F3']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- -- -- -- Me ++ ++ -- --
|
||||||
|
++ ++ ++ ME -- ME ++ Me --
|
||||||
|
-- -- ME -- -- MS -- -- SP
|
||||||
|
-- MB -- -- ME __ MS -- --
|
||||||
|
-- -- ME -- -- MS -- -- SP
|
||||||
|
++ ++ ++ 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
|
||||||
|
"""
|
||||||
|
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, 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, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ['AmagiMasked']
|
||||||
|
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_SWIPE_MULTIPLY = (1.186, 1.208)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.147, 1.168)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.114, 1.134)
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
32
campaign/event_20241219_cn/campaign_base.py
Normal file
32
campaign/event_20241219_cn/campaign_base.py
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
from module.campaign.assets import SWITCH_20240725_COMBAT, SWITCH_20240725_STORY
|
||||||
|
from module.campaign.campaign_base import CampaignBase as CampaignBase_
|
||||||
|
from module.campaign.campaign_ui import ModeSwitch
|
||||||
|
from module.ui.ui import page_event
|
||||||
|
|
||||||
|
|
||||||
|
MODE_SWITCH_20240912 = ModeSwitch('Mode_switch_20240912', is_selector=True, offset=(30, 30))
|
||||||
|
MODE_SWITCH_20240912.add_state('combat', SWITCH_20240725_COMBAT, offset=(444, 4))
|
||||||
|
MODE_SWITCH_20240912.add_state('story', SWITCH_20240725_STORY, offset=(444, 4))
|
||||||
|
|
||||||
|
|
||||||
|
class CampaignBase(CampaignBase_):
|
||||||
|
def campaign_ensure_mode(self, mode='normal'):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
mode (str): 'normal', 'hard', 'ex', 'story'
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: If mode changed.
|
||||||
|
"""
|
||||||
|
if mode == "story":
|
||||||
|
MODE_SWITCH_20240912.set('story', main=self)
|
||||||
|
elif mode in ['normal', 'hard', 'ex']:
|
||||||
|
# First switch to combat mode and then select Hard or Normal.
|
||||||
|
MODE_SWITCH_20240912.set('combat', main=self)
|
||||||
|
super().campaign_ensure_mode(mode)
|
||||||
|
|
||||||
|
def handle_exp_info(self):
|
||||||
|
# Random background of hits EXP_INFO_B
|
||||||
|
if self.ui_page_appear(page_event):
|
||||||
|
return False
|
||||||
|
return super().handle_exp_info()
|
||||||
92
campaign/event_20241219_cn/d1.py
Normal file
92
campaign/event_20241219_cn/d1.py
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
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 = 'K8'
|
||||||
|
MAP.camera_data = ['D3', 'D6', 'G2', 'G6']
|
||||||
|
MAP.camera_data_spawn_point = ['E2']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- ++ ++ ++ SP -- SP ++ -- -- --
|
||||||
|
ME -- Me -- -- __ -- -- -- MB --
|
||||||
|
-- -- -- -- -- MS -- ++ -- -- --
|
||||||
|
ME -- Me ++ MS -- MS ++ ++ ++ ++
|
||||||
|
++ -- -- ++ ++ 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 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, J1, K1, \
|
||||||
|
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \
|
||||||
|
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \
|
||||||
|
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \
|
||||||
|
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \
|
||||||
|
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \
|
||||||
|
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \
|
||||||
|
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ['Fox']
|
||||||
|
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 =====
|
||||||
|
STAGE_ENTRANCE = ['half', '20240725']
|
||||||
|
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||||
|
'height': (80, 255 - 17),
|
||||||
|
'width': (0.9, 10),
|
||||||
|
'prominence': 10,
|
||||||
|
'distance': 35,
|
||||||
|
}
|
||||||
|
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||||
|
'height': (255 - 17, 255),
|
||||||
|
'prominence': 10,
|
||||||
|
'distance': 50,
|
||||||
|
# 'width': (0, 7),
|
||||||
|
'wlen': 1000
|
||||||
|
}
|
||||||
|
MAP_SWIPE_MULTIPLY = (1.222, 1.245)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.182, 1.204)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.148, 1.168)
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
88
campaign/event_20241219_cn/d2.py
Normal file
88
campaign/event_20241219_cn/d2.py
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
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
|
||||||
|
from .d1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('D2')
|
||||||
|
MAP.shape = 'K8'
|
||||||
|
MAP.camera_data = ['E2', 'E6', 'H2', 'H6']
|
||||||
|
MAP.camera_data_spawn_point = ['E2']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- -- -- ++ SP -- SP ++ ME -- ME
|
||||||
|
-- MB -- -- -- __ -- -- -- ME --
|
||||||
|
-- -- -- ++ -- MS -- ++ ME -- --
|
||||||
|
++ ++ ++ ++ MS ++ MS ++ ++ ++ --
|
||||||
|
-- -- -- -- -- 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 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, \
|
||||||
|
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \
|
||||||
|
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \
|
||||||
|
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \
|
||||||
|
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \
|
||||||
|
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \
|
||||||
|
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \
|
||||||
|
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, K8, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ['Fox']
|
||||||
|
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_SWIPE_MULTIPLY = (1.215, 1.238)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.175, 1.197)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.141, 1.161)
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
92
campaign/event_20241219_cn/d3.py
Normal file
92
campaign/event_20241219_cn/d3.py
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
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
|
||||||
|
from .d1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('D3')
|
||||||
|
MAP.shape = 'I9'
|
||||||
|
MAP.camera_data = ['E2', 'E5']
|
||||||
|
MAP.camera_data_spawn_point = ['E7']
|
||||||
|
MAP.map_data = """
|
||||||
|
++ ME -- ME -- ME -- ME ++
|
||||||
|
-- -- ME -- MB -- ME -- --
|
||||||
|
-- ME -- ME -- ME -- ME --
|
||||||
|
-- ++ ++ ++ MS ++ ++ ++ --
|
||||||
|
-- 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 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 = ['Fox']
|
||||||
|
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_SWIPE_MULTIPLY = (1.035, 1.055)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.001, 1.019)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.972, 0.989)
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
98
campaign/event_20241219_cn/sp.py
Normal file
98
campaign/event_20241219_cn/sp.py
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
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('SP')
|
||||||
|
MAP.shape = 'K5'
|
||||||
|
MAP.camera_data = ['D3', 'F3']
|
||||||
|
MAP.camera_data_spawn_point = ['I2']
|
||||||
|
MAP.map_data = """
|
||||||
|
++ -- ME -- ++ -- ME -- ++ ++ ++
|
||||||
|
-- -- -- ME ++ ME -- MS -- -- SP
|
||||||
|
-- MB -- -- -- -- MS -- __ -- --
|
||||||
|
-- -- -- ME ++ ME -- MS -- -- SP
|
||||||
|
++ -- ME -- ++ -- ME -- ++ ++ ++
|
||||||
|
"""
|
||||||
|
MAP.weight_data = """
|
||||||
|
50 50 50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50 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': 8, '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, I1, J1, K1, \
|
||||||
|
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \
|
||||||
|
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \
|
||||||
|
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \
|
||||||
|
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ['Fox']
|
||||||
|
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_IS_ONE_TIME_STAGE = True
|
||||||
|
STAGE_ENTRANCE = ['half', '20240725']
|
||||||
|
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||||
|
'height': (120, 255 - 49),
|
||||||
|
'width': (1.5, 10),
|
||||||
|
'prominence': 10,
|
||||||
|
'distance': 35,
|
||||||
|
}
|
||||||
|
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||||
|
'height': (255 - 49, 255),
|
||||||
|
'prominence': 10,
|
||||||
|
'distance': 50,
|
||||||
|
'wlen': 1000
|
||||||
|
}
|
||||||
|
HOMO_CANNY_THRESHOLD = (75, 100)
|
||||||
|
MAP_SWIPE_MULTIPLY = (1.194, 1.217)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.155, 1.176)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.121, 1.142)
|
||||||
|
|
||||||
|
|
||||||
|
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()
|
||||||
@@ -1757,15 +1757,17 @@
|
|||||||
"event_20240829_cn",
|
"event_20240829_cn",
|
||||||
"event_20240912_cn",
|
"event_20240912_cn",
|
||||||
"event_20241024_cn",
|
"event_20241024_cn",
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"display": "hide",
|
"display": "hide",
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"cn": "event_20241121_cn",
|
"cn": "event_20241219_cn",
|
||||||
"en": "event_20241121_cn",
|
"en": "event_20241219_cn",
|
||||||
"jp": "event_20241121_cn",
|
"jp": "event_20241219_cn",
|
||||||
"tw": "event_20241121_cn"
|
"tw": "event_20241121_cn"
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
@@ -2186,14 +2188,16 @@
|
|||||||
"event_20240829_cn",
|
"event_20240829_cn",
|
||||||
"event_20240912_cn",
|
"event_20240912_cn",
|
||||||
"event_20241024_cn",
|
"event_20241024_cn",
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"cn": "event_20241121_cn",
|
"cn": "event_20241219_cn",
|
||||||
"en": "event_20241121_cn",
|
"en": "event_20241219_cn",
|
||||||
"jp": "event_20241121_cn",
|
"jp": "event_20241219_cn",
|
||||||
"tw": "event_20241121_cn"
|
"tw": "event_20241121_cn"
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
@@ -2649,14 +2653,16 @@
|
|||||||
"event_20240829_cn",
|
"event_20240829_cn",
|
||||||
"event_20240912_cn",
|
"event_20240912_cn",
|
||||||
"event_20241024_cn",
|
"event_20241024_cn",
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"cn": "event_20241121_cn",
|
"cn": "event_20241219_cn",
|
||||||
"en": "event_20241121_cn",
|
"en": "event_20241219_cn",
|
||||||
"jp": "event_20241121_cn",
|
"jp": "event_20241219_cn",
|
||||||
"tw": "event_20241121_cn"
|
"tw": "event_20241121_cn"
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
@@ -4098,14 +4104,16 @@
|
|||||||
"event_20240829_cn",
|
"event_20240829_cn",
|
||||||
"event_20240912_cn",
|
"event_20240912_cn",
|
||||||
"event_20241024_cn",
|
"event_20241024_cn",
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"cn": "event_20241121_cn",
|
"cn": "event_20241219_cn",
|
||||||
"en": "event_20241121_cn",
|
"en": "event_20241219_cn",
|
||||||
"jp": "event_20241121_cn",
|
"jp": "event_20241219_cn",
|
||||||
"tw": "event_20241121_cn"
|
"tw": "event_20241121_cn"
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
@@ -4578,14 +4586,16 @@
|
|||||||
"event_20240829_cn",
|
"event_20240829_cn",
|
||||||
"event_20240912_cn",
|
"event_20240912_cn",
|
||||||
"event_20241024_cn",
|
"event_20241024_cn",
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"cn": "event_20241121_cn",
|
"cn": "event_20241219_cn",
|
||||||
"en": "event_20241121_cn",
|
"en": "event_20241219_cn",
|
||||||
"jp": "event_20241121_cn",
|
"jp": "event_20241219_cn",
|
||||||
"tw": "event_20241121_cn"
|
"tw": "event_20241121_cn"
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
@@ -5058,14 +5068,16 @@
|
|||||||
"event_20240829_cn",
|
"event_20240829_cn",
|
||||||
"event_20240912_cn",
|
"event_20240912_cn",
|
||||||
"event_20241024_cn",
|
"event_20241024_cn",
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"cn": "event_20241121_cn",
|
"cn": "event_20241219_cn",
|
||||||
"en": "event_20241121_cn",
|
"en": "event_20241219_cn",
|
||||||
"jp": "event_20241121_cn",
|
"jp": "event_20241219_cn",
|
||||||
"tw": "event_20241121_cn"
|
"tw": "event_20241121_cn"
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
@@ -5538,14 +5550,16 @@
|
|||||||
"event_20240829_cn",
|
"event_20240829_cn",
|
||||||
"event_20240912_cn",
|
"event_20240912_cn",
|
||||||
"event_20241024_cn",
|
"event_20241024_cn",
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"cn": "event_20241121_cn",
|
"cn": "event_20241219_cn",
|
||||||
"en": "event_20241121_cn",
|
"en": "event_20241219_cn",
|
||||||
"jp": "event_20241121_cn",
|
"jp": "event_20241219_cn",
|
||||||
"tw": "event_20241121_cn"
|
"tw": "event_20241121_cn"
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
@@ -6008,14 +6022,16 @@
|
|||||||
"event_20240829_cn",
|
"event_20240829_cn",
|
||||||
"event_20240912_cn",
|
"event_20240912_cn",
|
||||||
"event_20241024_cn",
|
"event_20241024_cn",
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20241121_cn"
|
"event_20241121_cn",
|
||||||
|
"event_20241219_cn"
|
||||||
],
|
],
|
||||||
"cn": "event_20241121_cn",
|
"cn": "event_20241219_cn",
|
||||||
"en": "event_20241121_cn",
|
"en": "event_20241219_cn",
|
||||||
"jp": "event_20241121_cn",
|
"jp": "event_20241219_cn",
|
||||||
"tw": "event_20241121_cn"
|
"tw": "event_20241121_cn"
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
|
|||||||
@@ -739,6 +739,7 @@
|
|||||||
"event_20240912_cn": "Ode of Everblooming Crimson",
|
"event_20240912_cn": "Ode of Everblooming Crimson",
|
||||||
"event_20241024_cn": "Tempesta and the Sleeping Sea",
|
"event_20241024_cn": "Tempesta and the Sleeping Sea",
|
||||||
"event_20241121_cn": "Dangerous Inventions Incoming",
|
"event_20241121_cn": "Dangerous Inventions Incoming",
|
||||||
|
"event_20241219_cn": "Substellar Crepuscule",
|
||||||
"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",
|
||||||
|
|||||||
@@ -739,6 +739,7 @@
|
|||||||
"event_20240912_cn": "絳染む丹華の詠歌",
|
"event_20240912_cn": "絳染む丹華の詠歌",
|
||||||
"event_20241024_cn": "テンペスタと眠りし海",
|
"event_20241024_cn": "テンペスタと眠りし海",
|
||||||
"event_20241121_cn": "危険発明接近中",
|
"event_20241121_cn": "危険発明接近中",
|
||||||
|
"event_20241219_cn": "星降る夕影の残光",
|
||||||
"raid_20200624": "特別演習超空強襲波(復刻)",
|
"raid_20200624": "特別演習超空強襲波(復刻)",
|
||||||
"raid_20210708": "交錯する新たな波 (復刻)",
|
"raid_20210708": "交錯する新たな波 (復刻)",
|
||||||
"raid_20220127": "秘密事件調査",
|
"raid_20220127": "秘密事件調査",
|
||||||
|
|||||||
@@ -739,6 +739,7 @@
|
|||||||
"event_20240912_cn": "唤醒苍红之炎",
|
"event_20240912_cn": "唤醒苍红之炎",
|
||||||
"event_20241024_cn": "飓风与沉眠之海",
|
"event_20241024_cn": "飓风与沉眠之海",
|
||||||
"event_20241121_cn": "危险发明迫近中",
|
"event_20241121_cn": "危险发明迫近中",
|
||||||
|
"event_20241219_cn": "星光下的余晖",
|
||||||
"raid_20200624": "复刻特别演习埃塞克斯级",
|
"raid_20200624": "复刻特别演习埃塞克斯级",
|
||||||
"raid_20210708": "复刻穿越彼方的水线",
|
"raid_20210708": "复刻穿越彼方的水线",
|
||||||
"raid_20220127": "演习神秘事件调查",
|
"raid_20220127": "演习神秘事件调查",
|
||||||
|
|||||||
@@ -739,6 +739,7 @@
|
|||||||
"event_20240912_cn": "Ode of Everblooming Crimson",
|
"event_20240912_cn": "Ode of Everblooming Crimson",
|
||||||
"event_20241024_cn": "Tempesta and the Sleeping Sea",
|
"event_20241024_cn": "Tempesta and the Sleeping Sea",
|
||||||
"event_20241121_cn": "危險發明逼近中",
|
"event_20241121_cn": "危險發明逼近中",
|
||||||
|
"event_20241219_cn": "Substellar Crepuscule",
|
||||||
"raid_20200624": "特別演習埃塞克斯級(復刻)",
|
"raid_20200624": "特別演習埃塞克斯級(復刻)",
|
||||||
"raid_20210708": "復刻穿越彼方的水線",
|
"raid_20210708": "復刻穿越彼方的水線",
|
||||||
"raid_20220127": "演習神秘事件調查",
|
"raid_20220127": "演習神秘事件調查",
|
||||||
|
|||||||
Reference in New Issue
Block a user