1
0
mirror of https://github.com/0O0o0oOoO00/Alas.git synced 2026-05-14 08:49:24 +08:00

Merge remote-tracking branch 'LmeSzinc/master' into refactor

# Conflicts:
#	module/config/argument/args.json
This commit is contained in:
0O0o0oOoO00
2025-11-08 16:44:40 +08:00
43 changed files with 1207 additions and 108 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@@ -55,6 +55,7 @@ To add a new event, add a new row in here, and run `python -m module.config.conf
| 20250619 | war archives 20220728 cn | Aquilifer's Ballade | 雄鹰的叙事歌 | Aquilifer's Ballade | 鋼鷲の冒険譚 | 雄鷹的敘事歌 |
| 20250717 | war archives 20220428 cn | Rondo at Rainbow's End | 虹彩的终幕曲 | Rondo at Rainbow's End | 吟ずる瑠璃の楽章 | 虹彩的終幕曲 |
| 20251016 | war archives 20231026 cn | Tempesta and the Fountain of Youth | 飓风与青春之泉 | Tempesta and the Fountain of Youth | テンペスタと若返りの泉 | 飓風與青春之泉 |
| 20251106 | war archives 20220915 cn | Violet Tempest Blooming Lycoris | 紫绛槿岚 | Violet Tempest Blooming Lycoris | 赫の涙月 菫の暁風 | 紫絳槿嵐 |
| 20200227 | event 20200227 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | - |
| 20200312 | event 20200312 cn | The Solomon Ranger | 复刻斯图尔特的硝烟 | The Solomon Ranger Rerun | 南洋に靡く硝煙(復刻) | - |
| 20200326 | event 20200326 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | - |
@@ -263,3 +264,5 @@ To add a new event, add a new row in here, and run `python -m module.config.conf
| 20251009 | coalition 20250626 | The Neon City Investigator | - | - | - | 迷彩都市的尋蹤者 |
| 20251016 | event 20230817 cn | The Fool's Scales | 复刻愚者的天平 | The Fool's Scales Rerun | 愚者の天秤(復刻) | - |
| 20251023 | event 20251023 cn | Tempesta and Islas de Libertád | 飓风与自由群岛 | Tempesta and Islas de Libertád | テンペスタと自由群島 | - |
| 20251106 | event 20230803 cn | Anthem of Remembrance | 复刻奏响鸢尾之歌 | Anthem of Remembrance Rerun | 燃ゆる聖都の回想曲(復刻) | - |
| 20251106 | event 20250227 cn | Paradiso of Shackled Light | - | - | - | 樊籠內的神光 |

View File

@@ -74,6 +74,7 @@ class Config:
HOMO_EDGE_COLOR_RANGE = (0, 17)
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom'
MAP_SWIPE_MULTIPLY = (1.089, 1.109)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.053, 1.072)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.022, 1.041)

View File

@@ -58,8 +58,6 @@ class Config(ConfigBase):
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
# topleft is spawn points
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'top-right'
MAP_SWIPE_MULTIPLY = (1.255, 1.279)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.214, 1.236)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.179, 1.200)

View File

@@ -59,7 +59,6 @@ class Config(ConfigBase):
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom'
# swipe multiply same as T1

View File

@@ -0,0 +1,94 @@
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 = 'H8'
MAP.camera_data = ['D3', 'E4', 'E6']
MAP.camera_data_spawn_point = ['D6']
MAP.map_data = """
-- ++ ++ -- -- -- -- --
-- ME ++ ME Me ++ ++ --
ME -- -- -- -- ++ ++ --
MS -- MS -- Me -- MB --
-- -- ++ ME __ -- -- ME
-- -- ++ MS -- Me ME --
SP -- -- -- Me ++ ++ --
-- SP -- 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, 'boss': 1},
{'battle': 4, 'enemy': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, \
A2, B2, C2, D2, E2, F2, G2, H2, \
A3, B3, C3, D3, E3, F3, G3, H3, \
A4, B4, C4, D4, E4, F4, G4, H4, \
A5, B5, C5, D5, E5, F5, G5, H5, \
A6, B6, C6, D6, E6, F6, G6, H6, \
A7, B7, C7, D7, E7, F7, G7, H7, \
A8, B8, C8, D8, E8, F8, G8, H8, \
= MAP.flatten()
class Config:
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = ['Wakaba', 'Suzutsuki']
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = True
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
'height': (80, 255 - 33),
'width': (0.9, 10),
'prominence': 10,
'distance': 35,
}
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
'height': (255 - 33, 255),
'prominence': 10,
'distance': 50,
# 'width': (0, 7),
'wlen': 1000
}
MAP_SWIPE_MULTIPLY = (1.093, 1.113)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.057, 1.076)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.026, 1.045)
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
MAP_WALK_USE_CURRENT_FLEET = True
class Campaign(CampaignBase):
MAP = MAP
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65
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()

View File

@@ -0,0 +1,80 @@
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 = 'H8'
MAP.camera_data = ['D4', 'D6', 'E3']
MAP.camera_data_spawn_point = ['D2']
MAP.map_data = """
-- SP ++ ++ -- ME -- ME
SP -- -- ++ Me -- -- --
-- -- ME MS -- Me -- ++
Me -- -- -- __ -- -- ++
-- MS 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
"""
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 = ['Miyuki', 'Jintsuu']
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = True
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_SWIPE_MULTIPLY = (1.220, 1.243)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.180, 1.201)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.145, 1.166)
class Campaign(CampaignBase):
MAP = MAP
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65
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()

View File

@@ -0,0 +1,80 @@
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 = 'H8'
MAP.camera_data = ['D3', 'E4', 'E6']
MAP.camera_data_spawn_point = ['E2']
MAP.map_data = """
++ ++ ++ ME -- -- SP --
ME -- Me -- MS -- -- SP
-- -- -- -- -- ++ -- --
ME -- ME -- Me -- MS --
-- ++ ++ ++ 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
"""
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 = ['Hatakaze', 'Kinu', 'Haguro']
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = True
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_SWIPE_MULTIPLY = (1.220, 1.243)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.180, 1.201)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.145, 1.166)
class Campaign(CampaignBase):
MAP = MAP
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65
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()

View File

@@ -0,0 +1,94 @@
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 = 'H8'
MAP.camera_data = ['D3', 'D5']
MAP.camera_data_spawn_point = ['E6']
MAP.map_data = """
++ -- -- -- ME -- -- --
-- -- -- ME -- ME ++ --
-- ++ ++ ME -- Me ++ ME
-- MB -- -- -- -- -- --
Me -- -- __ Me ME MS --
++ ME -- ME -- ++ -- --
-- -- Me -- MS -- -- SP
-- ++ ++ ++ -- -- SP --
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 1},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 2, 'boss': 1},
{'battle': 5, 'enemy': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, \
A2, B2, C2, D2, E2, F2, G2, H2, \
A3, B3, C3, D3, E3, F3, G3, H3, \
A4, B4, C4, D4, E4, F4, G4, H4, \
A5, B5, C5, D5, E5, F5, G5, H5, \
A6, B6, C6, D6, E6, F6, G6, H6, \
A7, B7, C7, D7, E7, F7, G7, H7, \
A8, B8, C8, D8, E8, F8, G8, H8, \
= MAP.flatten()
class Config:
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = ['Harutsuki', 'Kawakaze', 'Hiei']
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = True
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
'height': (80, 255 - 33),
'width': (0.9, 10),
'prominence': 10,
'distance': 35,
}
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
'height': (255 - 33, 255),
'prominence': 10,
'distance': 50,
# 'width': (0, 7),
'wlen': 1000
}
MAP_WALK_USE_CURRENT_FLEET = True
MAP_SWIPE_MULTIPLY = (1.023, 1.043)
MAP_SWIPE_MULTIPLY_MINITOUCH = (0.990, 1.008)
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.961, 0.978)
class Campaign(CampaignBase):
MAP = MAP
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65
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()

View 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 .b1 import Config as ConfigBase
MAP = CampaignMap('B2')
MAP.shape = 'M6'
MAP.camera_data = ['D4', 'E3', 'G3', 'G4']
MAP.camera_data_spawn_point = ['H3']
MAP.map_data = """
-- -- -- -- ME -- ++ ++ -- Me ++ ++ ++
++ ++ ++ ME -- Me ++ ++ MS -- -- -- --
++ ++ ++ ME -- __ -- MS -- -- SP ++ ++
++ ++ MB -- -- __ -- MS -- -- SP ++ ++
ME -- -- -- -- Me ++ ++ MS -- -- -- --
-- ME ME ++ ME -- ++ ++ -- Me ++ ++ ++
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 1},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 2},
{'battle': 5, 'enemy': 1, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, L1, M1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, L2, M2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, L3, M3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, L4, M4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, L5, M5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, L6, M6, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = ['Kongo', 'Yamashiro', 'Akagi', 'Kaga']
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = True
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_SWIPE_MULTIPLY = (1.123, 1.144)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.086, 1.106)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.054, 1.073)
class Campaign(CampaignBase):
MAP = MAP
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65
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()

View File

@@ -0,0 +1,85 @@
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 = ['D3', 'D5', 'E5']
MAP.camera_data_spawn_point = ['D7']
MAP.map_covered = ['E3']
MAP.map_data = """
++ -- -- -- ME -- -- -- ++
-- ME ME -- -- -- ME ME --
-- ME ++ Me MS Me ++ ME --
-- -- Me -- -- -- Me -- --
ME -- MS -- ++ -- MS -- ME
-- -- Me -- MB -- Me -- --
-- ME ++ -- MS -- ++ ME --
-- -- -- -- __ -- -- -- --
++ ++ ++ SP -- SP ++ ++ ++
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 2},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 2},
{'battle': 5, 'enemy': 1, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
A7, B7, C7, D7, E7, F7, G7, H7, I7, \
A8, B8, C8, D8, E8, F8, G8, H8, I8, \
A9, B9, C9, D9, E9, F9, G9, H9, I9, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = ['Mikasa', 'Nagato', 'Akagi', 'Kaga']
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = True
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_SWIPE_MULTIPLY = (0.985, 1.003)
MAP_SWIPE_MULTIPLY_MINITOUCH = (0.952, 0.970)
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.925, 0.941)
class Campaign(CampaignBase):
MAP = MAP
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD = 0.65
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()

View 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
MAP = CampaignMap('C1')
MAP.shape = 'H8'
MAP.camera_data = ['D3', 'E4', 'E6']
MAP.camera_data_spawn_point = ['D6']
MAP.map_data = """
-- ++ ++ -- -- -- -- --
-- ME ++ ME Me ++ ++ --
ME -- -- -- -- ++ ++ --
MS -- MS -- Me -- MB --
-- -- ++ ME __ -- -- ME
-- -- ++ MS -- Me ME --
SP -- -- -- Me ++ ++ --
-- SP -- 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, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, \
A2, B2, C2, D2, E2, F2, G2, H2, \
A3, B3, C3, D3, E3, F3, G3, H3, \
A4, B4, C4, D4, E4, F4, G4, H4, \
A5, B5, C5, D5, E5, F5, G5, H5, \
A6, B6, C6, D6, E6, F6, G6, H6, \
A7, B7, C7, D7, E7, F7, G7, H7, \
A8, B8, C8, D8, E8, F8, G8, H8, \
= MAP.flatten()
class Config:
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = ['Sakawa', 'Chitose', 'Chiyoda']
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = True
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_SWIPE_MULTIPLY = (1.093, 1.113)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.057, 1.076)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.026, 1.045)
MAP_WALK_USE_CURRENT_FLEET = True
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()

View 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 .c1 import Config as ConfigBase
MAP = CampaignMap('C2')
MAP.shape = 'H8'
MAP.camera_data = ['D4', 'D6', 'E3']
MAP.camera_data_spawn_point = ['D2']
MAP.map_data = """
-- SP ++ ++ -- ME -- ME
SP -- -- ++ Me -- -- --
-- -- ME MS -- Me -- ++
Me -- -- -- __ -- -- ++
-- MS 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
"""
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, \
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 = ['Jintsuu', 'Ryuuhou', 'Kaga']
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = True
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_SWIPE_MULTIPLY = (1.220, 1.243)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.180, 1.201)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.145, 1.166)
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()

View File

@@ -0,0 +1,80 @@
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 = 'H8'
MAP.camera_data = ['D3', 'E4', 'E6']
MAP.camera_data_spawn_point = ['E2']
MAP.map_data = """
++ ++ ++ ME -- -- SP --
ME -- Me -- MS -- -- SP
-- -- -- -- -- ++ -- --
ME -- ME -- Me -- MS --
-- ++ ++ ++ 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
"""
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 = ['Haguro', 'Kongo', 'Kirishima']
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = True
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_SWIPE_MULTIPLY = (1.220, 1.243)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.180, 1.201)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.145, 1.166)
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()

View File

@@ -0,0 +1,14 @@
from module.base.utils import get_color, red_overlay_transparency
from ..campaign_war_archives.campaign_base import CampaignBase as CampaignBase_
from module.handler.assets import MAP_ENEMY_SEARCHING
from module.map.assets import SWITCH_OVER
class CampaignBase(CampaignBase_):
def enemy_searching_appear(self):
if not self.appear(SWITCH_OVER, offset=(20, 20)):
return False
return red_overlay_transparency(
MAP_ENEMY_SEARCHING.color, get_color(self.device.image, MAP_ENEMY_SEARCHING.area)
) > self.MAP_ENEMY_SEARCHING_OVERLAY_TRANSPARENCY_THRESHOLD

View File

@@ -0,0 +1,93 @@
from .campaign_base import CampaignBase
from module.map.map_base import CampaignMap
from module.map.map_grids import SelectedGrids, RoadGrids
from module.logger import logger
MAP = CampaignMap('D1')
MAP.shape = 'H8'
MAP.camera_data = ['D3', 'D5']
MAP.camera_data_spawn_point = ['E6']
MAP.map_data = """
++ -- -- -- ME -- -- --
-- -- -- ME -- ME ++ --
-- ++ ++ ME -- Me ++ ME
-- MB -- -- -- -- -- --
Me -- -- __ Me ME MS --
++ ME -- ME -- ++ -- --
-- -- Me -- MS -- -- SP
-- ++ ++ ++ -- -- SP --
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 2},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 2},
{'battle': 5, 'enemy': 1, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, \
A2, B2, C2, D2, E2, F2, G2, H2, \
A3, B3, C3, D3, E3, F3, G3, H3, \
A4, B4, C4, D4, E4, F4, G4, H4, \
A5, B5, C5, D5, E5, F5, G5, H5, \
A6, B6, C6, D6, E6, F6, G6, H6, \
A7, B7, C7, D7, E7, F7, G7, H7, \
A8, B8, C8, D8, E8, F8, G8, H8, \
= MAP.flatten()
class Config:
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = ['Hiei', 'Haruna', 'Shokaku']
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = True
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
'height': (80, 255 - 33),
'width': (0.9, 10),
'prominence': 10,
'distance': 35,
}
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
'height': (255 - 33, 255),
'prominence': 10,
'distance': 50,
# 'width': (0, 7),
'wlen': 1000
}
MAP_WALK_USE_CURRENT_FLEET = True
MAP_SWIPE_MULTIPLY = (1.023, 1.043)
MAP_SWIPE_MULTIPLY_MINITOUCH = (0.990, 1.008)
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.961, 0.978)
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()

View 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 .d1 import Config as ConfigBase
MAP = CampaignMap('D2')
MAP.shape = 'M6'
MAP.camera_data = ['D4', 'E3', 'G3', 'G4']
MAP.camera_data_spawn_point = ['H3']
MAP.map_data = """
-- -- -- -- ME -- ++ ++ -- Me ++ ++ ++
++ ++ ++ ME -- Me ++ ++ MS -- -- -- --
++ ++ ++ ME -- __ -- MS -- -- SP ++ ++
++ ++ MB -- -- __ -- MS -- -- SP ++ ++
ME -- -- -- -- Me ++ ++ MS -- -- -- --
-- ME ME ++ ME -- ++ ++ -- Me ++ ++ ++
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 2},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2, 'siren': 1},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 2},
{'battle': 5, 'enemy': 1},
{'battle': 6, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, L1, M1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, L2, M2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, L3, M3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, L4, M4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, L5, M5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, L6, M6, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = ['Kongo', 'Yamashiro', 'Akagi', 'Kaga']
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = True
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_SWIPE_MULTIPLY = (1.123, 1.144)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.086, 1.106)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.054, 1.073)
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()

View File

@@ -0,0 +1,93 @@
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 = ['D3', 'D5', 'E5']
MAP.camera_data_spawn_point = ['D7']
MAP.map_covered = ['E3']
MAP.map_data = """
++ -- -- -- ME -- -- -- ++
-- ME ME -- -- -- ME ME --
-- ME ++ Me MS Me ++ ME --
-- -- Me -- -- -- Me -- --
ME -- MS -- ++ -- MS -- ME
-- -- Me -- MB -- Me -- --
-- ME ++ -- MS -- ++ ME --
-- -- -- -- __ -- -- -- --
++ ++ ++ SP -- SP ++ ++ ++
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 2},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2, 'siren': 1},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 2},
{'battle': 5, 'enemy': 1},
{'battle': 6, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
A7, B7, C7, D7, E7, F7, G7, H7, I7, \
A8, B8, C8, D8, E8, F8, G8, H8, I8, \
A9, B9, C9, D9, E9, F9, G9, H9, I9, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = ['Mikasa', 'Nagato', 'Akagi', 'Kaga']
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = True
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_SWIPE_MULTIPLY = (0.985, 1.003)
MAP_SWIPE_MULTIPLY_MINITOUCH = (0.952, 0.970)
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.925, 0.941)
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()

View File

@@ -1402,7 +1402,7 @@
},
"Campaign": {
"Name": "D3",
"Event": "war_archives_20231026_cn",
"Event": "war_archives_20220915_cn",
"Mode": "normal",
"UseClearMode": true,
"UseFleetLock": true,

View File

@@ -107,6 +107,8 @@ class Commission:
# DALY RESOURCE EXTRACTION -> DAILY RESOURCE EXTRACTION
result = result.replace('DALY', 'DAILY')
result = result.replace('NVB', 'NYB')
# PYEIN PROTECTION COMMISSION I
result = result.replace('PYEIN', 'VEIN').replace('YEIN', 'VEIN')
self.name = result
self.genre = self.commission_name_parse(self.name)

View File

@@ -3443,6 +3443,7 @@
],
"display": "hide",
"option_cn": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -3478,7 +3479,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -3510,6 +3510,7 @@
"event_20200227_cn"
],
"option_en": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -3545,7 +3546,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -3581,6 +3581,7 @@
"event_20200227_cn"
],
"option_jp": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -3616,7 +3617,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -3648,6 +3648,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250227_cn",
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
@@ -4226,6 +4227,7 @@
"event_20251023_cn"
],
"option_cn": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -4261,7 +4263,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -4293,6 +4294,7 @@
"event_20200227_cn"
],
"option_en": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -4328,7 +4330,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -4364,6 +4365,7 @@
"event_20200227_cn"
],
"option_jp": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -4399,7 +4401,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -4431,6 +4432,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250227_cn",
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
@@ -4956,6 +4958,7 @@
"event_20251023_cn"
],
"option_cn": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -4991,7 +4994,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -5023,6 +5025,7 @@
"event_20200227_cn"
],
"option_en": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -5058,7 +5061,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -5094,6 +5096,7 @@
"event_20200227_cn"
],
"option_jp": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -5129,7 +5132,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -5161,6 +5163,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250227_cn",
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
@@ -5686,6 +5689,7 @@
"event_20251023_cn"
],
"option_cn": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -5721,7 +5725,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -5753,6 +5756,7 @@
"event_20200227_cn"
],
"option_en": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -5788,7 +5792,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -5824,6 +5827,7 @@
"event_20200227_cn"
],
"option_jp": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -5859,7 +5863,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -5891,6 +5894,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250227_cn",
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
@@ -6416,6 +6420,7 @@
"event_20251023_cn"
],
"option_cn": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -6451,7 +6456,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -6483,6 +6487,7 @@
"event_20200227_cn"
],
"option_en": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -6518,7 +6523,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -6554,6 +6558,7 @@
"event_20200227_cn"
],
"option_jp": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -6589,7 +6594,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -6621,6 +6625,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250227_cn",
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
@@ -7146,6 +7151,7 @@
"event_20251023_cn"
],
"option_cn": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -7181,7 +7187,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -7213,6 +7218,7 @@
"event_20200227_cn"
],
"option_en": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -7248,7 +7254,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -7284,6 +7289,7 @@
"event_20200227_cn"
],
"option_jp": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -7319,7 +7325,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -7351,6 +7356,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250227_cn",
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
@@ -7876,6 +7882,7 @@
"event_20251023_cn"
],
"option_cn": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -7911,7 +7918,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -7943,6 +7949,7 @@
"event_20200227_cn"
],
"option_en": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -7978,7 +7985,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -8014,6 +8020,7 @@
"event_20200227_cn"
],
"option_jp": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -8049,7 +8056,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -8081,6 +8087,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250227_cn",
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
@@ -9398,9 +9405,11 @@
"war_archives_20220428_cn",
"war_archives_20220526_cn",
"war_archives_20220728_cn",
"war_archives_20220915_cn",
"war_archives_20231026_cn"
],
"option_cn": [
"war_archives_20220915_cn",
"war_archives_20231026_cn",
"war_archives_20220428_cn",
"war_archives_20220728_cn",
@@ -9444,6 +9453,7 @@
"war_archives_20181020_en"
],
"option_en": [
"war_archives_20220915_cn",
"war_archives_20231026_cn",
"war_archives_20220428_cn",
"war_archives_20220728_cn",
@@ -9487,6 +9497,7 @@
"war_archives_20181020_en"
],
"option_jp": [
"war_archives_20220915_cn",
"war_archives_20231026_cn",
"war_archives_20220428_cn",
"war_archives_20220728_cn",
@@ -9530,6 +9541,7 @@
"war_archives_20181020_en"
],
"option_tw": [
"war_archives_20220915_cn",
"war_archives_20231026_cn",
"war_archives_20220428_cn",
"war_archives_20220728_cn",
@@ -10040,6 +10052,7 @@
"event_20251023_cn"
],
"option_cn": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -10075,7 +10088,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -10107,6 +10119,7 @@
"event_20200227_cn"
],
"option_en": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -10142,7 +10155,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -10178,6 +10190,7 @@
"event_20200227_cn"
],
"option_jp": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -10213,7 +10226,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -10245,6 +10257,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250227_cn",
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
@@ -10787,6 +10800,7 @@
"event_20251023_cn"
],
"option_cn": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -10822,7 +10836,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -10854,6 +10867,7 @@
"event_20200227_cn"
],
"option_en": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -10889,7 +10903,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -10925,6 +10938,7 @@
"event_20200227_cn"
],
"option_jp": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -10960,7 +10974,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -10992,6 +11005,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250227_cn",
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
@@ -11534,6 +11548,7 @@
"event_20251023_cn"
],
"option_cn": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -11569,7 +11584,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -11601,6 +11615,7 @@
"event_20200227_cn"
],
"option_en": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -11636,7 +11651,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -11672,6 +11686,7 @@
"event_20200227_cn"
],
"option_jp": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -11707,7 +11722,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -11739,6 +11753,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250227_cn",
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
@@ -12281,6 +12296,7 @@
"event_20251023_cn"
],
"option_cn": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -12316,7 +12332,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -12348,6 +12363,7 @@
"event_20200227_cn"
],
"option_en": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -12383,7 +12399,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -12419,6 +12434,7 @@
"event_20200227_cn"
],
"option_jp": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -12454,7 +12470,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -12486,6 +12501,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250227_cn",
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
@@ -13018,6 +13034,7 @@
"event_20251023_cn"
],
"option_cn": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -13053,7 +13070,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -13085,6 +13101,7 @@
"event_20200227_cn"
],
"option_en": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -13120,7 +13137,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -13156,6 +13172,7 @@
"event_20200227_cn"
],
"option_jp": [
"event_20230803_cn",
"event_20251023_cn",
"event_20230817_cn",
"event_20250912_cn",
@@ -13191,7 +13208,6 @@
"event_20210916_cn",
"event_20231026_cn",
"event_20230914_cn",
"event_20230803_cn",
"event_20211125_cn",
"event_20210527_cn",
"event_20201126_cn",
@@ -13223,6 +13239,7 @@
"event_20200227_cn"
],
"option_tw": [
"event_20250227_cn",
"event_20250912_cn",
"event_20250814_cn",
"event_20220224_cn",
@@ -15920,7 +15937,8 @@
"anchorage",
"noshiro",
"sirius",
"new_jersey"
"new_jersey",
"taihou"
]
}
},

View File

@@ -600,7 +600,7 @@ PrivateQuarters:
TargetInteract: true
TargetShip:
value: anchorage
option: [ anchorage, noshiro, sirius, new_jersey ]
option: [ anchorage, noshiro, sirius, new_jersey, taihou ]
# ==================== Daily ====================
Daily:

View File

@@ -348,7 +348,7 @@ class GeneratedConfig:
PrivateQuarters_BuyRoses = True
PrivateQuarters_BuyCake = False
PrivateQuarters_TargetInteract = True
PrivateQuarters_TargetShip = 'anchorage' # anchorage, noshiro, sirius, new_jersey
PrivateQuarters_TargetShip = 'anchorage' # anchorage, noshiro, sirius, new_jersey, taihou
# Group `Daily`
Daily_UseDailySkip = True

View File

@@ -791,7 +791,7 @@
"event_20221222_cn": "Parallel Superimposition Rerun",
"event_20230223_cn": "Revelations of Dust Rerun",
"event_20230525_cn": "Confluence of Nothingness Rerun",
"event_20230803_cn": "Anthem of Remembrance",
"event_20230803_cn": "Anthem of Remembrance Rerun",
"event_20230817_cn": "The Fools Scales Rerun",
"event_20230914_cn": "Effulgence Before Eclipse",
"event_20231026_cn": "Tempesta and the Fountain of Youth",
@@ -864,6 +864,7 @@
"war_archives_20220428_cn": "archives Rondo at Rainbows End",
"war_archives_20220526_cn": "archives Pledge of the Radiant Court",
"war_archives_20220728_cn": "archives Aquilifers Ballade",
"war_archives_20220915_cn": "archives Violet Tempest Blooming Lycoris",
"war_archives_20231026_cn": "archives Tempesta and the Fountain of Youth"
},
"Mode": {
@@ -1232,7 +1233,7 @@
},
"ChangeFlagship": {
"name": "Change Flagship",
"help": "Change flagship if flagship level >= 32 or either flagship or vanguard are emotion exhausted (if Change Vanguard is enabled). If you choose not to change, your fleet will ignore the low emotion warning and continue combat.\nSwitch out to new common CV/CVL whose level is in range of 1 to 31, after current has reached level 32+. Meanwhile, abandoned flagships will be retired. Any common CV/CVL whose level is 2+ will be regarded as targets. Do confirm that your own ships which is not a target has been locked\n\nThe flagship's equipment is replaced when being switched out by first recording the current setup\nOnly populated equipment slots will be replaced. If the CV/CVL preference has been configured, all 5 slots will be populated otherwise only the auxiliary slots will be populated.",
"help": "Change flagship if flagship level >= 32 or either flagship or vanguard are emotion exhausted. If you choose not to change, your fleet will ignore the low emotion warning and continue combat.\nSwitch out to new common CV/CVL whose level is in range of 1 to 31, after current has reached level 32+. Meanwhile, abandoned flagships will be retired. Any common CV/CVL whose level is 2+ will be regarded as targets. Do confirm that your own ships which is not a target has been locked\n\nThe flagship's equipment is replaced when being switched out by first recording the current setup\nOnly populated equipment slots will be replaced. If the CV/CVL preference has been configured, all 5 slots will be populated otherwise only the auxiliary slots will be populated.",
"ship": "Change Ship",
"ship_equip": "Change Ship + Gears"
},
@@ -2169,7 +2170,8 @@
"anchorage": "Anchorage",
"noshiro": "Noshiro",
"sirius": "Sirius",
"new_jersey": "New Jersey"
"new_jersey": "New Jersey",
"taihou": "Taihou"
}
},
"Daily": {

View File

@@ -791,7 +791,7 @@
"event_20221222_cn": "積重なる事象の幻界(復刻)",
"event_20230223_cn": "黙示の遺構(復刻)",
"event_20230525_cn": "覆天せし万象の塵(復刻)",
"event_20230803_cn": "燃ゆる聖都の回想曲",
"event_20230803_cn": "燃ゆる聖都の回想曲(復刻)",
"event_20230817_cn": "愚者の天秤(復刻)",
"event_20230914_cn": "須臾望月抄",
"event_20231026_cn": "テンペスタと若返りの泉",
@@ -864,6 +864,7 @@
"war_archives_20220428_cn": "檔案 吟ずる瑠璃の楽章",
"war_archives_20220526_cn": "檔案 诚閃の剣 搖光の城",
"war_archives_20220728_cn": "檔案 鋼鷲の冒険譚",
"war_archives_20220915_cn": "檔案 赫の涙月 菫の暁風",
"war_archives_20231026_cn": "檔案 テンペスタと若返りの泉"
},
"Mode": {
@@ -2169,7 +2170,8 @@
"anchorage": "anchorage",
"noshiro": "noshiro",
"sirius": "sirius",
"new_jersey": "new_jersey"
"new_jersey": "new_jersey",
"taihou": "taihou"
}
},
"Daily": {

View File

@@ -791,7 +791,7 @@
"event_20221222_cn": "复刻定向折叠",
"event_20230223_cn": "复刻湮烬尘墟",
"event_20230525_cn": "复刻空相交汇点",
"event_20230803_cn": "奏响鸢尾之歌",
"event_20230803_cn": "复刻奏响鸢尾之歌",
"event_20230817_cn": "复刻愚者的天平",
"event_20230914_cn": "须臾望月抄",
"event_20231026_cn": "飓风与青春之泉",
@@ -864,6 +864,7 @@
"war_archives_20220428_cn": "档案 虹彩的终幕曲",
"war_archives_20220526_cn": "档案 泠誓光庭",
"war_archives_20220728_cn": "档案 雄鹰的叙事歌",
"war_archives_20220915_cn": "档案 紫绛槿岚",
"war_archives_20231026_cn": "档案 飓风与青春之泉"
},
"Mode": {
@@ -1232,7 +1233,7 @@
},
"ChangeFlagship": {
"name": "更换旗舰",
"help": "当旗舰等级>=32或红脸时更换旗舰,选择不更换则会强制红脸出击\n寻找等级在1-31之间的白皮航母同时会在退役时选择更换下来的旗舰。所有等级大于1级的白皮航母均会被视为退役目标请务必锁定不是目标的船。换船时更换旗舰装备这通过记录之前的装备完成。\n\n换装备只会更换正在装备中的栏位即使是白装也会更换。如果指定了旗舰则会更换全部5个装备未指定旗舰只会更换设备。",
"help": "当旗舰等级>=32或红脸时更换旗舰\n寻找等级在1-31之间的白皮航母同时会在退役时选择更换下来的旗舰。所有等级大于1级的白皮航母均会被视为退役目标请务必锁定不是目标的船。换船时更换旗舰装备这通过记录之前的装备完成。\n\n换装备只会更换正在装备中的栏位即使是白装也会更换。如果指定了旗舰则会更换全部5个装备未指定旗舰只会更换设备。",
"ship": "更换舰船",
"ship_equip": "更换舰船 + 装备"
},
@@ -2169,7 +2170,8 @@
"anchorage": "安克雷奇",
"noshiro": "能代",
"sirius": "天狼星",
"new_jersey": "新泽西"
"new_jersey": "新泽西",
"taihou": "鹩"
}
},
"Daily": {

View File

@@ -807,7 +807,7 @@
"event_20241024_cn": "颶風與沉眠之海",
"event_20241121_cn": "危險發明逼近中",
"event_20241219_cn": "星光下的餘暉",
"event_20250227_cn": "Paradiso of Shackled Light",
"event_20250227_cn": "樊籠內的神光",
"event_20250424_cn": "揚起鬱金之旗",
"event_20250520_cn": "高塔上的薔薇",
"event_20250724_cn": "鍊金術士與天際交會之塔",
@@ -864,6 +864,7 @@
"war_archives_20220428_cn": "檔案 虹彩的終幕曲",
"war_archives_20220526_cn": "檔案 泠誓光庭",
"war_archives_20220728_cn": "檔案 雄鷹的敘事歌",
"war_archives_20220915_cn": "檔案 紫絳槿嵐",
"war_archives_20231026_cn": "檔案 飓風與青春之泉"
},
"Mode": {
@@ -1232,7 +1233,7 @@
},
"ChangeFlagship": {
"name": "更換旗艦",
"help": "當旗艦等級>=32或紅臉時更換旗艦,選擇不更換則會強制紅臉出擊\n尋找等級在1-31之間的白皮航母同時會在退役時選擇更換下來的旗艦。所有等級大於1級的白船航母均會被視為退役目標請務必鎖定不是目標的船。換船時更換旗艦裝備這通過記錄之前的裝備完成。\n\n換裝備只會更換正在裝備中的欄位即使是白裝也會更換。如果指定了旗艦則會更換全部5個裝備未指定旗艦隻會更換設備。",
"help": "當旗艦等級>=32或紅臉時更換旗艦\n尋找等級在1-31之間的白皮航母同時會在退役時選擇更換下來的旗艦。所有等級大於1級的白船航母均會被視為退役目標請務必鎖定不是目標的船。換船時更換旗艦裝備這通過記錄之前的裝備完成。\n\n換裝備只會更換正在裝備中的欄位即使是白裝也會更換。如果指定了旗艦則會更換全部5個裝備未指定旗艦隻會更換設備。",
"ship": "更換艦船",
"ship_equip": "更換艦船 + 裝備"
},
@@ -2169,7 +2170,8 @@
"anchorage": "anchorage",
"noshiro": "noshiro",
"sirius": "sirius",
"new_jersey": "new_jersey"
"new_jersey": "new_jersey",
"taihou": "taihou"
}
},
"Daily": {

View File

@@ -100,5 +100,5 @@ SUBMARINE_VIEW_ON = Button(area={'cn': (1140, 435, 1170, 468), 'en': (1140, 435,
TEMPLATE_MANJUU = Template(file={'cn': './assets/cn/handler/TEMPLATE_MANJUU.png', 'en': './assets/cn/handler/TEMPLATE_MANJUU.png', 'jp': './assets/cn/handler/TEMPLATE_MANJUU.png', 'tw': './assets/cn/handler/TEMPLATE_MANJUU.png'})
USER_AGREEMENT_CONFIRM = Button(area={'cn': (709, 526, 742, 542), 'en': (709, 526, 742, 542), 'jp': (709, 526, 742, 542), 'tw': (709, 526, 742, 542)}, color={'cn': (151, 216, 243), 'en': (151, 216, 243), 'jp': (151, 216, 243), 'tw': (151, 216, 243)}, button={'cn': (709, 526, 742, 542), 'en': (709, 526, 742, 542), 'jp': (709, 526, 742, 542), 'tw': (709, 526, 742, 542)}, file={'cn': './assets/cn/handler/USER_AGREEMENT_CONFIRM.png', 'en': './assets/en/handler/USER_AGREEMENT_CONFIRM.png', 'jp': './assets/jp/handler/USER_AGREEMENT_CONFIRM.png', 'tw': './assets/tw/handler/USER_AGREEMENT_CONFIRM.png'})
USE_DATA_KEY = Button(area={'cn': (688, 316, 781, 338), 'en': (759, 323, 889, 342), 'jp': (627, 300, 743, 321), 'tw': (688, 316, 782, 338)}, color={'cn': (165, 154, 99), 'en': (170, 160, 94), 'jp': (127, 128, 116), 'tw': (159, 150, 97)}, button={'cn': (688, 316, 781, 338), 'en': (759, 323, 889, 342), 'jp': (627, 300, 743, 321), 'tw': (688, 316, 782, 338)}, file={'cn': './assets/cn/handler/USE_DATA_KEY.png', 'en': './assets/en/handler/USE_DATA_KEY.png', 'jp': './assets/jp/handler/USE_DATA_KEY.png', 'tw': './assets/tw/handler/USE_DATA_KEY.png'})
USE_DATA_KEY_NOTIFIED = Button(area={'cn': (770, 434, 793, 456), 'en': (820, 440, 837, 456), 'jp': (686, 430, 709, 456), 'tw': (782, 440, 799, 456)}, color={'cn': (41, 44, 49), 'en': (33, 40, 41), 'jp': (33, 44, 49), 'tw': (34, 40, 48)}, button={'cn': (770, 434, 793, 456), 'en': (820, 440, 837, 456), 'jp': (686, 430, 709, 456), 'tw': (782, 440, 799, 456)}, file={'cn': './assets/cn/handler/USE_DATA_KEY_NOTIFIED.png', 'en': './assets/en/handler/USE_DATA_KEY_NOTIFIED.png', 'jp': './assets/jp/handler/USE_DATA_KEY_NOTIFIED.png', 'tw': './assets/tw/handler/USE_DATA_KEY_NOTIFIED.png'})
USE_DATA_KEY_NOTIFIED = Button(area={'cn': (690, 185, 713, 207), 'en': (820, 440, 837, 456), 'jp': (686, 430, 709, 456), 'tw': (782, 440, 799, 456)}, color={'cn': (34, 49, 75), 'en': (33, 40, 41), 'jp': (33, 44, 49), 'tw': (34, 40, 48)}, button={'cn': (690, 185, 713, 207), 'en': (820, 440, 837, 456), 'jp': (686, 430, 709, 456), 'tw': (782, 440, 799, 456)}, file={'cn': './assets/cn/handler/USE_DATA_KEY_NOTIFIED.png', 'en': './assets/en/handler/USE_DATA_KEY_NOTIFIED.png', 'jp': './assets/jp/handler/USE_DATA_KEY_NOTIFIED.png', 'tw': './assets/tw/handler/USE_DATA_KEY_NOTIFIED.png'})
VOTE_CANCEL = Button(area={'cn': (404, 483, 576, 539), 'en': (413, 489, 566, 532), 'jp': (407, 483, 577, 538), 'tw': (404, 483, 576, 539)}, color={'cn': (167, 169, 171), 'en': (169, 170, 172), 'jp': (163, 164, 166), 'tw': (167, 169, 171)}, button={'cn': (404, 483, 576, 539), 'en': (413, 489, 566, 532), 'jp': (407, 483, 577, 538), 'tw': (404, 483, 576, 539)}, file={'cn': './assets/cn/handler/VOTE_CANCEL.png', 'en': './assets/en/handler/VOTE_CANCEL.png', 'jp': './assets/jp/handler/VOTE_CANCEL.png', 'tw': './assets/cn/handler/VOTE_CANCEL.png'})

View File

@@ -96,6 +96,10 @@ class OSMapOperation(MapOrderHandler, MissionHandler, PortHandler, StorageHandle
name = name.replace('ジブフルタル', 'ジブラルタル')
name = name.replace('タント', 'タラント').replace('タフント', 'タラント')
name = name.replace('N海域', 'NA海域')
# リバープル -> リバープール
name = name.replace('リバプル', 'リバープール')
name = name.replace('リバープル', 'リバープール')
name = name.replace('リバプール', 'リバープール')
return name
@Config.when(SERVER='tw')

View File

@@ -20,9 +20,10 @@ PRIVATE_QUARTERS_ROOM_TARGET_CHECK_2 = Button(area={'cn': (667, 71, 717, 86), 'e
PRIVATE_QUARTERS_ROOM_TARGET_CLICK_AREA = Button(area={'cn': (504, 45, 784, 625), 'en': (504, 45, 784, 625), 'jp': (504, 45, 784, 625), 'tw': (504, 45, 784, 625)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (504, 45, 784, 625), 'en': (504, 45, 784, 625), 'jp': (504, 45, 784, 625), 'tw': (504, 45, 784, 625)}, file={'cn': './assets/cn/private_quarters/PRIVATE_QUARTERS_ROOM_TARGET_CLICK_AREA.png', 'en': './assets/en/private_quarters/PRIVATE_QUARTERS_ROOM_TARGET_CLICK_AREA.png', 'jp': './assets/jp/private_quarters/PRIVATE_QUARTERS_ROOM_TARGET_CLICK_AREA.png', 'tw': './assets/tw/private_quarters/PRIVATE_QUARTERS_ROOM_TARGET_CLICK_AREA.png'})
PRIVATE_QUARTERS_ROOM_TARGET_INTIMACY_MAX = Button(area={'cn': (1157, 40, 1197, 60), 'en': (1157, 40, 1197, 60), 'jp': (1157, 40, 1197, 60), 'tw': (1157, 40, 1197, 60)}, color={'cn': (173, 161, 155), 'en': (173, 161, 155), 'jp': (173, 161, 155), 'tw': (173, 161, 155)}, button={'cn': (1157, 40, 1197, 60), 'en': (1157, 40, 1197, 60), 'jp': (1157, 40, 1197, 60), 'tw': (1157, 40, 1197, 60)}, file={'cn': './assets/cn/private_quarters/PRIVATE_QUARTERS_ROOM_TARGET_INTIMACY_MAX.png', 'en': './assets/en/private_quarters/PRIVATE_QUARTERS_ROOM_TARGET_INTIMACY_MAX.png', 'jp': './assets/jp/private_quarters/PRIVATE_QUARTERS_ROOM_TARGET_INTIMACY_MAX.png', 'tw': './assets/tw/private_quarters/PRIVATE_QUARTERS_ROOM_TARGET_INTIMACY_MAX.png'})
PRIVATE_QUARTERS_SHIP_ANCHORAGE = Button(area={'cn': (713, 246, 778, 311), 'en': (713, 246, 778, 311), 'jp': (713, 246, 778, 311), 'tw': (713, 246, 778, 311)}, color={'cn': (214, 184, 176), 'en': (214, 184, 176), 'jp': (214, 184, 176), 'tw': (214, 184, 176)}, button={'cn': (713, 246, 778, 311), 'en': (713, 246, 778, 311), 'jp': (713, 246, 778, 311), 'tw': (713, 246, 778, 311)}, file={'cn': './assets/cn/private_quarters/PRIVATE_QUARTERS_SHIP_ANCHORAGE.png', 'en': './assets/en/private_quarters/PRIVATE_QUARTERS_SHIP_ANCHORAGE.png', 'jp': './assets/jp/private_quarters/PRIVATE_QUARTERS_SHIP_ANCHORAGE.png', 'tw': './assets/tw/private_quarters/PRIVATE_QUARTERS_SHIP_ANCHORAGE.png'})
PRIVATE_QUARTERS_SHIP_NEW_JERSEY = Button(area={'cn': (973, 307, 1023, 347), 'en': (973, 307, 1023, 347), 'jp': (973, 307, 1023, 347), 'tw': (973, 307, 1023, 347)}, color={'cn': (149, 141, 173), 'en': (149, 141, 173), 'jp': (149, 141, 173), 'tw': (149, 141, 173)}, button={'cn': (973, 307, 1023, 347), 'en': (973, 307, 1023, 347), 'jp': (973, 307, 1023, 347), 'tw': (973, 307, 1023, 347)}, file={'cn': './assets/cn/private_quarters/PRIVATE_QUARTERS_SHIP_NEW_JERSEY.png', 'en': './assets/cn/private_quarters/PRIVATE_QUARTERS_SHIP_NEW_JERSEY.png', 'jp': './assets/jp/private_quarters/PRIVATE_QUARTERS_SHIP_NEW_JERSEY.png', 'tw': './assets/cn/private_quarters/PRIVATE_QUARTERS_SHIP_NEW_JERSEY.png'})
PRIVATE_QUARTERS_SHIP_NEW_JERSEY = Button(area={'cn': (973, 307, 1023, 347), 'en': (973, 307, 1023, 347), 'jp': (973, 307, 1023, 347), 'tw': (973, 307, 1023, 347)}, color={'cn': (149, 141, 173), 'en': (149, 141, 173), 'jp': (149, 141, 173), 'tw': (149, 141, 173)}, button={'cn': (973, 307, 1023, 347), 'en': (973, 307, 1023, 347), 'jp': (973, 307, 1023, 347), 'tw': (973, 307, 1023, 347)}, file={'cn': './assets/cn/private_quarters/PRIVATE_QUARTERS_SHIP_NEW_JERSEY.png', 'en': './assets/en/private_quarters/PRIVATE_QUARTERS_SHIP_NEW_JERSEY.png', 'jp': './assets/jp/private_quarters/PRIVATE_QUARTERS_SHIP_NEW_JERSEY.png', 'tw': './assets/tw/private_quarters/PRIVATE_QUARTERS_SHIP_NEW_JERSEY.png'})
PRIVATE_QUARTERS_SHIP_NOSHIRO = Button(area={'cn': (965, 289, 1027, 362), 'en': (962, 295, 1027, 360), 'jp': (962, 295, 1027, 360), 'tw': (962, 295, 1027, 360)}, color={'cn': (143, 120, 127), 'en': (102, 93, 102), 'jp': (102, 93, 102), 'tw': (102, 93, 102)}, button={'cn': (965, 289, 1027, 362), 'en': (962, 295, 1027, 360), 'jp': (962, 295, 1027, 360), 'tw': (962, 295, 1027, 360)}, file={'cn': './assets/cn/private_quarters/PRIVATE_QUARTERS_SHIP_NOSHIRO.png', 'en': './assets/en/private_quarters/PRIVATE_QUARTERS_SHIP_NOSHIRO.png', 'jp': './assets/jp/private_quarters/PRIVATE_QUARTERS_SHIP_NOSHIRO.png', 'tw': './assets/tw/private_quarters/PRIVATE_QUARTERS_SHIP_NOSHIRO.png'})
PRIVATE_QUARTERS_SHIP_SIRIUS = Button(area={'cn': (908, 411, 966, 478), 'en': (905, 414, 970, 479), 'jp': (905, 414, 970, 479), 'tw': (905, 414, 970, 479)}, color={'cn': (219, 207, 214), 'en': (156, 153, 165), 'jp': (156, 153, 165), 'tw': (156, 153, 165)}, button={'cn': (908, 411, 966, 478), 'en': (905, 414, 970, 479), 'jp': (905, 414, 970, 479), 'tw': (905, 414, 970, 479)}, file={'cn': './assets/cn/private_quarters/PRIVATE_QUARTERS_SHIP_SIRIUS.png', 'en': './assets/en/private_quarters/PRIVATE_QUARTERS_SHIP_SIRIUS.png', 'jp': './assets/jp/private_quarters/PRIVATE_QUARTERS_SHIP_SIRIUS.png', 'tw': './assets/tw/private_quarters/PRIVATE_QUARTERS_SHIP_SIRIUS.png'})
PRIVATE_QUARTERS_SHIP_TAIHOU = Button(area={'cn': (814, 190, 856, 232), 'en': (814, 190, 856, 232), 'jp': (814, 190, 856, 232), 'tw': (814, 190, 856, 232)}, color={'cn': (134, 111, 109), 'en': (134, 111, 109), 'jp': (134, 111, 109), 'tw': (134, 111, 109)}, button={'cn': (814, 190, 856, 232), 'en': (814, 190, 856, 232), 'jp': (814, 190, 856, 232), 'tw': (814, 190, 856, 232)}, file={'cn': './assets/cn/private_quarters/PRIVATE_QUARTERS_SHIP_TAIHOU.png', 'en': './assets/en/private_quarters/PRIVATE_QUARTERS_SHIP_TAIHOU.png', 'jp': './assets/jp/private_quarters/PRIVATE_QUARTERS_SHIP_TAIHOU.png', 'tw': './assets/tw/private_quarters/PRIVATE_QUARTERS_SHIP_TAIHOU.png'})
PRIVATE_QUARTERS_SHOP_AMOUNT_MAX = Button(area={'cn': (848, 504, 888, 524), 'en': (848, 504, 888, 524), 'jp': (848, 504, 888, 524), 'tw': (848, 504, 888, 524)}, color={'cn': (227, 231, 235), 'en': (227, 231, 235), 'jp': (227, 231, 235), 'tw': (227, 231, 235)}, button={'cn': (848, 504, 888, 524), 'en': (848, 504, 888, 524), 'jp': (848, 504, 888, 524), 'tw': (848, 504, 888, 524)}, file={'cn': './assets/cn/private_quarters/PRIVATE_QUARTERS_SHOP_AMOUNT_MAX.png', 'en': './assets/en/private_quarters/PRIVATE_QUARTERS_SHOP_AMOUNT_MAX.png', 'jp': './assets/jp/private_quarters/PRIVATE_QUARTERS_SHOP_AMOUNT_MAX.png', 'tw': './assets/tw/private_quarters/PRIVATE_QUARTERS_SHOP_AMOUNT_MAX.png'})
PRIVATE_QUARTERS_SHOP_BACK = Button(area={'cn': (40, 35, 60, 55), 'en': (40, 35, 60, 55), 'jp': (40, 35, 60, 55), 'tw': (40, 35, 60, 55)}, color={'cn': (202, 202, 202), 'en': (202, 202, 202), 'jp': (202, 202, 202), 'tw': (202, 202, 202)}, button={'cn': (35, 30, 95, 60), 'en': (35, 30, 95, 60), 'jp': (35, 30, 95, 60), 'tw': (35, 30, 95, 60)}, file={'cn': './assets/cn/private_quarters/PRIVATE_QUARTERS_SHOP_BACK.png', 'en': './assets/en/private_quarters/PRIVATE_QUARTERS_SHOP_BACK.png', 'jp': './assets/jp/private_quarters/PRIVATE_QUARTERS_SHOP_BACK.png', 'tw': './assets/tw/private_quarters/PRIVATE_QUARTERS_SHOP_BACK.png'})
PRIVATE_QUARTERS_SHOP_CHECK = Button(area={'cn': (124, 18, 218, 48), 'en': (129, 25, 284, 40), 'jp': (126, 20, 260, 44), 'tw': (129, 25, 284, 40)}, color={'cn': (86, 92, 98), 'en': (142, 147, 155), 'jp': (82, 88, 94), 'tw': (142, 147, 155)}, button={'cn': (124, 18, 218, 48), 'en': (129, 25, 284, 40), 'jp': (126, 20, 260, 44), 'tw': (129, 25, 284, 40)}, file={'cn': './assets/cn/private_quarters/PRIVATE_QUARTERS_SHOP_CHECK.png', 'en': './assets/en/private_quarters/PRIVATE_QUARTERS_SHOP_CHECK.png', 'jp': './assets/jp/private_quarters/PRIVATE_QUARTERS_SHOP_CHECK.png', 'tw': './assets/tw/private_quarters/PRIVATE_QUARTERS_SHOP_CHECK.png'})

View File

@@ -16,14 +16,45 @@ class PQInteract(UI):
'noshiro': (PRIVATE_QUARTERS_SHIP_NOSHIRO, PRIVATE_QUARTERS_PAGE_LOCALE_BEACH),
'sirius': (PRIVATE_QUARTERS_SHIP_SIRIUS, PRIVATE_QUARTERS_PAGE_LOCALE_BEACH),
'new_jersey': (PRIVATE_QUARTERS_SHIP_NEW_JERSEY, PRIVATE_QUARTERS_PAGE_LOCALE_LOFT),
'taihou': (PRIVATE_QUARTERS_SHIP_TAIHOU, PRIVATE_QUARTERS_PAGE_LOCALE_LOFT),
}
def _pq_handle_dialogue(self):
"""
Handles dialogue sequence of target
After the addition of Taihou this sequence
has been discovered lagging on rare cases
Hence this call is used in other states
besides on room enter
"""
# Helper funcs to hold off spam clicking until loading
# state is not present
def after_loading_state():
return not self.appear(PRIVATE_QUARTERS_LOADING_CHECK, offset=(20, 20))
def additional():
return True
self.ui_click(
click_button=PRIVATE_QUARTERS_ROOM_SAFE_CLICK_AREA,
check_button=PRIVATE_QUARTERS_ROOM_CHECK,
appear_button=after_loading_state,
additional=additional,
confirm_wait=3,
offset=(20, 20),
retry_wait=1.5
)
def _pq_target_appear(self):
"""
Callable wrapper to validate target's appearance
offset=(100, 100) detectable for anchorage, noshiro, sirus, and new_jersey
offset=(100, 100) detectable for anchorage, noshiro, sirus, new_jersey, and taihou
When more ships added may need to adjust or capture specific bubble position per
ship, can use the available_targets to store similarly into tuples instead
Returns:
bool
"""
settle_timer = Timer(1.5, count=3).start()
skip_first_screenshot = True
@@ -43,11 +74,20 @@ class PQInteract(UI):
if settle_timer.reached():
return False
# Factor in couple drag up actions to
# counter odd default distance/zoom on target
p1, p2 = random_rectangle_vector(
(0, -30), box=PRIVATE_QUARTERS_ROOM_SAFE_CLICK_AREA.area, random_range=(-10, -10, 10, 10), padding=5)
self.device.drag(p1, p2, segments=2, shake=(0, 25), point_random=(0, 0, 0, 0), shake_random=(0, -5, 0, 5))
if self.appear(PRIVATE_QUARTERS_ROOM_CHECK, offset=(20, 20)):
# Factor in couple drag up actions to
# counter odd default distance/zoom on target
p1, p2 = random_rectangle_vector(
(0, -30), box=PRIVATE_QUARTERS_ROOM_SAFE_CLICK_AREA.area,
random_range=(-10, -10, 10, 10), padding=5)
self.device.drag(p1, p2, segments=2,
shake=(0, 25), point_random=(0, 0, 0, 0),
shake_random=(0, -5, 0, 5))
settle_timer.reset()
else:
# Absence of check likely means dialogue is ongoing
self._pq_handle_dialogue()
settle_timer.reset()
def _pq_goto_room_seek(self, target_ship):
"""
@@ -112,8 +152,11 @@ class PQInteract(UI):
"""
Callable wrapper for whether is loading or blocked by download asset popup
"""
return self.appear(PRIVATE_QUARTERS_LOADING_CHECK, offset=(20, 20)) \
or self.appear(POPUP_CANCEL, offset=(20, 20))
if self.appear(PRIVATE_QUARTERS_LOADING_CHECK, offset=(20, 20)):
return True
if self.appear(POPUP_CANCEL, offset=(20, 20)):
return True
return False
def _pq_goto_room_enter(self, target_ship):
"""
@@ -155,25 +198,7 @@ class PQInteract(UI):
# Fully enter into target's room
# through click progression
click_timer = Timer(1.5, count=3).start()
skip_first_screenshot = True
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
# End
if self.appear(PRIVATE_QUARTERS_ROOM_CHECK, offset=(20, 20)):
break
# Continue without clicking, mitigate too many click exception
if self.appear(PRIVATE_QUARTERS_LOADING_CHECK, offset=(20, 20)):
continue
if click_timer.reached():
self.device.click(PRIVATE_QUARTERS_ROOM_SAFE_CLICK_AREA)
click_timer.reset()
self._pq_handle_dialogue()
# If target's intimacy is maxed
# Terminate the run
@@ -188,6 +213,12 @@ class PQInteract(UI):
"""
Execute room exit routine
"""
# Rare case in the middle of dialogue, so address
# before initiating room exit
if (not self.appear(PRIVATE_QUARTERS_ROOM_CHECK, offset=(20, 20)) and
not self.appear(PRIVATE_QUARTERS_INTERACT, offset=(0, 60))):
self._pq_handle_dialogue()
self.interval_clear(PRIVATE_QUARTERS_ROOM_BACK)
self.ui_click(
click_button=PRIVATE_QUARTERS_ROOM_BACK,

View File

@@ -1,6 +1,5 @@
from module.base.button import ButtonGrid
from module.base.decorator import cached_property
from module.base.timer import Timer
from module.handler.assets import POPUP_CONFIRM
from module.logger import logger
from module.shop.assets import *
@@ -72,44 +71,46 @@ class ShopUI(UI):
switch.add_state(TAB_PROTOTYPE, check_button=TAB_PROTOTYPE)
return switch
def shop_refresh(self, skip_first_screenshot=True):
def shop_refresh(self):
"""
Args:
skip_first_screenshot: bool
Returns:
bool: If refreshed
"""
logger.info('Shop refresh')
refreshed = False
exit_timer = Timer(3, count=6).start()
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
if self.appear_then_click(SHOP_REFRESH, interval=3):
exit_timer.reset()
continue
if self.appear(SHOP_BUY_CONFIRM_MISTAKE, interval=3, offset=(200, 200)) \
and self.appear(POPUP_CONFIRM, offset=(3, 30)):
# SHOP_REFRESH -> POPUP_CONFIRM
for _ in self.loop():
if self.appear(POPUP_CONFIRM, offset=(30, 30)):
break
if self.appear(SHOP_REFRESH, offset=(30, 30), interval=3):
# SHOP_REFRESH has two kinds of color when active
if self.image_color_count(SHOP_REFRESH.button, color=(49, 142, 207), threshold=221, count=50):
self.device.click(SHOP_REFRESH)
continue
if self.image_color_count(SHOP_REFRESH.button, color=(54, 117, 161), threshold=221, count=50):
self.device.click(SHOP_REFRESH)
continue
if self.image_color_count(SHOP_REFRESH.button, color=(52, 74, 94), threshold=221, count=50):
logger.info('Refresh not available')
break
# no `continue`, act like SHOP_REFRESH not matched
self.interval_clear(SHOP_REFRESH)
# POPUP_CONFIRM -> SHOP_BACK_ARROW
for _ in self.loop():
if self.appear(SHOP_BACK_ARROW, offset=(30, 30)):
break
if self.appear(SHOP_BUY_CONFIRM_MISTAKE, interval=3, offset=(200, 200)):
logger.warning('SHOP_BUY_CONFIRM_MISTAKE')
self.ui_click(SHOP_CLICK_SAFE_AREA, appear_button=POPUP_CONFIRM, check_button=SHOP_BACK_ARROW,
offset=(20, 30), skip_first_screenshot=True)
exit_timer.reset()
refreshed = False
break
if self.handle_popup_confirm('SHOP_REFRESH_CONFIRM'):
exit_timer.reset()
refreshed = True
continue
# End
if self.appear(SHOP_BACK_ARROW, offset=(30, 30)):
if exit_timer.reached():
break
else:
exit_timer.reset()
self.handle_info_bar()
return refreshed

View File

@@ -611,6 +611,8 @@ class UI(InfoHandler):
self.interval_reset(GET_SHIP)
if button == DORMMENU_GOTO_DORM:
self.interval_reset(GET_SHIP)
if button == DORMMENU_GOTO_MEOWFFICER:
self.interval_reset(GET_SHIP)
for switch_button in page_main.links.values():
if button == switch_button:
self.interval_reset(GET_SHIP)

View File

@@ -44,6 +44,7 @@ TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT = Template(file={'cn': './assets/cn/war_archi
TEMPLATE_TOWER_OF_TRANSCENDENCE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png', 'en': './assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png', 'jp': './assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png', 'tw': './assets/cn/war_archives/TEMPLATE_TOWER_OF_TRANSCENDENCE.png'})
TEMPLATE_UNIVERSE_IN_UNISON = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'en': './assets/en/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'jp': './assets/jp/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'tw': './assets/cn/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png'})
TEMPLATE_UPON_THE_SHIMMERING_BLUE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png', 'en': './assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png', 'jp': './assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png', 'tw': './assets/cn/war_archives/TEMPLATE_UPON_THE_SHIMMERING_BLUE.png'})
TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS.png', 'en': './assets/cn/war_archives/TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS.png', 'jp': './assets/cn/war_archives/TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS.png', 'tw': './assets/cn/war_archives/TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS.png'})
TEMPLATE_VIRTUAL_TOWER = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_VIRTUAL_TOWER.png', 'en': './assets/cn/war_archives/TEMPLATE_VIRTUAL_TOWER.png', 'jp': './assets/cn/war_archives/TEMPLATE_VIRTUAL_TOWER.png', 'tw': './assets/cn/war_archives/TEMPLATE_VIRTUAL_TOWER.png'})
TEMPLATE_VISITORS_DYED_IN_RED = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'en': './assets/en/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'jp': './assets/jp/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'tw': './assets/tw/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png'})
TEMPLATE_WINTERS_CROWN = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_WINTERS_CROWN.png', 'en': './assets/en/war_archives/TEMPLATE_WINTERS_CROWN.png', 'jp': './assets/jp/war_archives/TEMPLATE_WINTERS_CROWN.png', 'tw': './assets/tw/war_archives/TEMPLATE_WINTERS_CROWN.png'})

View File

@@ -42,4 +42,5 @@ dic_archives_template = {
'war_archives_20220728_cn': TEMPLATE_AQUILIFERS_BALLADE,
'war_archives_20220428_cn': TEMPLATE_RONDO_AT_RAINBOWS_END,
'war_archives_20231026_cn': TEMPLATE_TEMPESTA_AND_THE_FOUNTAIN_OF_YOUTH,
'war_archives_20220915_cn': TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS,
}