Compare commits
20 Commits
event_upda
...
war_archiv
| Author | SHA1 | Date | |
|---|---|---|---|
| 8880fef13d | |||
| 139811457f | |||
|
|
5f4f968c25 | ||
|
|
23f185c4cc | ||
|
|
be200d4a3f | ||
|
|
2a3f3b4941 | ||
|
|
f36ae75ed3 | ||
|
|
1c6b5eb4a6 | ||
|
|
96c1317887 | ||
|
|
ac7bedc192 | ||
|
|
0c26c5a355 | ||
|
|
0dbac1950a | ||
|
|
4b90a64dde | ||
|
|
6665ca2ece | ||
|
|
7466a3882d | ||
|
|
04d900bb3b | ||
|
|
9e58a9d8d4 | ||
|
|
1fd1b2d59a | ||
|
|
8318c42ce4 | ||
|
|
995376a5a0 |
BIN
assets/cn/campaign/EVENT_20201126_DETAIL.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
assets/cn/campaign/EVENT_20201126_DETAIL_CHECK.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
assets/cn/campaign/EVENT_20201126_DETAIL_WHITE.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
assets/cn/campaign/EVENT_20201126_ENTRANCE.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 4.6 KiB |
BIN
assets/cn/campaign/EVENT_20250424_PT_ICON.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
assets/cn/campaign/EVENT_20260417_DETAIL.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
assets/cn/campaign/EVENT_20260417_DETAIL_CHECK.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
assets/cn/campaign/EVENT_20260417_DETAIL_WHITE.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
assets/cn/campaign/EVENT_20260417_ENTRANCE.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 4.5 KiB |
BIN
assets/cn/war_archives/TEMPLATE_ANTHEM_OF_REMEMBRANCE.png
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
assets/cn/war_archives/TEMPLATE_OPERATION_CONVERGENCE.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.7 KiB |
@@ -58,6 +58,8 @@ To add a new event, add a new row in here, and run `python -m module.config.conf
|
|||||||
| 20251106 | war archives 20220915 cn | Violet Tempest Blooming Lycoris | 紫绛槿岚 | Violet Tempest Blooming Lycoris | 赫の涙月 菫の暁風 | 紫絳槿嵐 |
|
| 20251106 | war archives 20220915 cn | Violet Tempest Blooming Lycoris | 紫绛槿岚 | Violet Tempest Blooming Lycoris | 赫の涙月 菫の暁風 | 紫絳槿嵐 |
|
||||||
| 20251218 | war archives 20221222 cn | Parallel Superimposition | 定向折叠 | Parallel Superimposition | 積重なる事象の幻界 | 定向折疊 |
|
| 20251218 | war archives 20221222 cn | Parallel Superimposition | 定向折叠 | Parallel Superimposition | 積重なる事象の幻界 | 定向折疊 |
|
||||||
| 20260129 | war archives 20230223 cn | Revelations of Dust | 湮烬尘墟 | Revelations of Dust | 黙示の遺構 | 湮燼塵墟 |
|
| 20260129 | war archives 20230223 cn | Revelations of Dust | 湮烬尘墟 | Revelations of Dust | 黙示の遺構 | 湮燼塵墟 |
|
||||||
|
| 20260409 | war archives 20220818 cn | Operation Convergence | 远汇点作战 | Operation Convergence | 結像点作戦 | 遠匯點作戰 |
|
||||||
|
| 20260507 | war archives 20230803 cn | Anthem of Remembrance | 奏响鸢尾之歌 | Anthem of Remembrance | 燃ゆる聖都の回想曲 | 奏響鳶尾之歌 |
|
||||||
| 20200227 | event 20200227 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | - |
|
| 20200227 | event 20200227 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | - |
|
||||||
| 20200312 | event 20200312 cn | The Solomon Ranger | 复刻斯图尔特的硝烟 | The Solomon Ranger Rerun | 南洋に靡く硝煙(復刻) | - |
|
| 20200312 | event 20200312 cn | The Solomon Ranger | 复刻斯图尔特的硝烟 | The Solomon Ranger Rerun | 南洋に靡く硝煙(復刻) | - |
|
||||||
| 20200326 | event 20200326 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | - |
|
| 20200326 | event 20200326 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | - |
|
||||||
@@ -289,3 +291,5 @@ To add a new event, add a new row in here, and run `python -m module.config.conf
|
|||||||
| 20260416 | event 20220915 cn | Violet Tempest Blooming Lycoris | - | - | - | 復刻紫絳槿嵐 |
|
| 20260416 | event 20220915 cn | Violet Tempest Blooming Lycoris | - | - | - | 復刻紫絳槿嵐 |
|
||||||
| 20260417 | event 20260417 cn | Vacation Lane – Beachside Brilliance | 假日航线闪耀海滨 | Vacation Lane – Beachside Brilliance | バケーションレーン・きらめく砂浜 | - |
|
| 20260417 | event 20260417 cn | Vacation Lane – Beachside Brilliance | 假日航线闪耀海滨 | Vacation Lane – Beachside Brilliance | バケーションレーン・きらめく砂浜 | - |
|
||||||
| 20260417 | event 20201126 cn | Vacation Lane Rerun | 复刻假日航线 | Vacation Lane Rerun | バケーションレーン(復刻) | - |
|
| 20260417 | event 20201126 cn | Vacation Lane Rerun | 复刻假日航线 | Vacation Lane Rerun | バケーションレーン(復刻) | - |
|
||||||
|
| 20260417 | event 20250424 cn | Toward Tulipa’s Seas Rerun | 复刻扬起郁金之旗 | Toward Tulipa’s Seas Rerun | チュリッパの海へ(復刻) | - |
|
||||||
|
| 20260417 | event 20260417 cn | Vacation Lane – Beachside Brilliance | - | - | - | 假日航線閃耀海濱 |
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ class Campaign(CampaignBase):
|
|||||||
|
|
||||||
def map_data_init(self, map_):
|
def map_data_init(self, map_):
|
||||||
super().map_data_init(map_)
|
super().map_data_init(map_)
|
||||||
|
if not self.map_is_clear_mode:
|
||||||
for override_grid in OVERRIDE:
|
for override_grid in OVERRIDE:
|
||||||
# Set may_enemy, but keep may_ambush
|
# Set may_enemy, but keep may_ambush
|
||||||
self.map[override_grid.location].may_enemy = override_grid.may_enemy
|
self.map[override_grid.location].may_enemy = override_grid.may_enemy
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
from module.base.button import Button
|
from module.base.button import Button
|
||||||
from module.campaign.assets import EVENT_20201126_ENTRANCE_TEMP, EVENT_20201126_PT_ICON
|
from module.campaign.assets import EVENT_20201126_PT_ICON, EVENT_20201126_DETAIL, EVENT_20201126_DETAIL_CHECK, EVENT_20201126_DETAIL_WHITE, EVENT_20201126_ENTRANCE
|
||||||
from module.campaign.campaign_base import CampaignBase as CampaignBase_
|
from module.campaign.campaign_base import CampaignBase as CampaignBase_
|
||||||
from module.exception import CampaignNameError
|
from module.exception import CampaignNameError
|
||||||
from module.logger import logger
|
from module.logger import logger
|
||||||
from module.ui.page import page_campaign_menu, page_event, page_main
|
from module.ui.page import page_campaign_menu, page_event, page_main_white
|
||||||
|
|
||||||
EVENT_ANIMATION = Button(area=(49, 229, 119, 400), color=(118, 215, 240), button=(49, 229, 119, 400),
|
EVENT_ANIMATION = Button(area=(49, 229, 119, 400), color=(118, 215, 240), button=(49, 229, 119, 400),
|
||||||
name='EVENT_ANIMATION')
|
name='EVENT_ANIMATION')
|
||||||
@@ -19,15 +19,18 @@ class CampaignBase(CampaignBase_):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def ui_goto_event(self):
|
def ui_goto_event(self):
|
||||||
if self.appear(EVENT_20201126_PT_ICON, offset=(20, 20)) and self.ui_page_appear(page_event):
|
if self.appear(EVENT_20201126_PT_ICON, offset=(40, 20)) and self.ui_page_appear(page_event):
|
||||||
logger.info('Already at EVENT_20201126')
|
logger.info('Already at EVENT_20201126')
|
||||||
return True
|
return True
|
||||||
self.ui_ensure(page_campaign_menu)
|
self.ui_ensure(page_campaign_menu)
|
||||||
if self.is_event_entrance_available():
|
if self.is_event_entrance_available():
|
||||||
self.ui_ensure(page_main)
|
self.ui_goto_main()
|
||||||
self.ui_click(EVENT_20201126_ENTRANCE_TEMP,
|
if self.ui_page_appear(page_main_white):
|
||||||
check_button=EVENT_20201126_PT_ICON,
|
self.ui_click(EVENT_20201126_DETAIL_WHITE, check_button=EVENT_20201126_DETAIL_CHECK)
|
||||||
appear_button=EVENT_20201126_ENTRANCE_TEMP)
|
else:
|
||||||
|
self.ui_click(EVENT_20201126_DETAIL, check_button=EVENT_20201126_DETAIL_CHECK)
|
||||||
|
self.ui_click(EVENT_20201126_ENTRANCE, check_button=EVENT_20201126_PT_ICON,
|
||||||
|
appear_button=EVENT_20201126_DETAIL_CHECK, offset=(40, 20))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
|
from module.campaign.assets import EVENT_20250424_PT_ICON
|
||||||
from module.campaign.campaign_base import CampaignBase as CampaignBase_
|
from module.campaign.campaign_base import CampaignBase as CampaignBase_
|
||||||
from module.ui.page import page_event
|
from module.logger import logger
|
||||||
|
from module.ui.page import page_campaign_menu, page_event
|
||||||
|
|
||||||
|
|
||||||
class CampaignBase(CampaignBase_):
|
class CampaignBase(CampaignBase_):
|
||||||
@@ -8,3 +10,12 @@ class CampaignBase(CampaignBase_):
|
|||||||
if self.ui_page_appear(page_event):
|
if self.ui_page_appear(page_event):
|
||||||
return False
|
return False
|
||||||
return super().handle_exp_info()
|
return super().handle_exp_info()
|
||||||
|
|
||||||
|
def ui_goto_event(self):
|
||||||
|
if self.appear(EVENT_20250424_PT_ICON, offset=(20, 20)) and self.ui_page_appear(page_event):
|
||||||
|
logger.info('Already at EVENT_20250424')
|
||||||
|
return True
|
||||||
|
self.ui_ensure(page_campaign_menu)
|
||||||
|
if self.is_event_entrance_available():
|
||||||
|
self.ui_goto(page_event)
|
||||||
|
return True
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
from module.base.button import Button
|
from module.base.button import Button
|
||||||
from module.campaign.assets import EVENT_20260417_PT_ICON
|
from module.campaign.assets import EVENT_20260417_PT_ICON, EVENT_20260417_DETAIL, EVENT_20260417_DETAIL_CHECK, EVENT_20260417_DETAIL_WHITE, EVENT_20260417_ENTRANCE
|
||||||
from module.campaign.campaign_base import CampaignBase as CampaignBase_
|
from module.campaign.campaign_base import CampaignBase as CampaignBase_
|
||||||
from module.logger import logger
|
from module.logger import logger
|
||||||
from module.ui.page import page_campaign_menu, page_event
|
from module.ui.page import page_campaign_menu, page_event, page_main_white
|
||||||
|
|
||||||
EVENT_ANIMATION = Button(area=(49, 229, 119, 400), color=(118, 215, 240), button=(49, 229, 119, 400),
|
EVENT_ANIMATION = Button(area=(49, 229, 119, 400), color=(118, 215, 240), button=(49, 229, 119, 400),
|
||||||
name='EVENT_ANIMATION')
|
name='EVENT_ANIMATION')
|
||||||
@@ -10,12 +10,21 @@ EVENT_ANIMATION = Button(area=(49, 229, 119, 400), color=(118, 215, 240), button
|
|||||||
|
|
||||||
class CampaignBase(CampaignBase_):
|
class CampaignBase(CampaignBase_):
|
||||||
def ui_goto_event(self):
|
def ui_goto_event(self):
|
||||||
if self.appear(EVENT_20260417_PT_ICON, offset=(20, 20)) and self.ui_page_appear(page_event):
|
if self.appear(EVENT_20260417_PT_ICON, offset=(40, 20)) and self.ui_page_appear(page_event):
|
||||||
logger.info('Already at EVENT_20260417')
|
logger.info('Already at EVENT_20260417')
|
||||||
return True
|
return True
|
||||||
self.ui_ensure(page_campaign_menu)
|
self.ui_ensure(page_campaign_menu)
|
||||||
if self.is_event_entrance_available():
|
if self.is_event_entrance_available():
|
||||||
|
if self.config.SERVER == 'tw':
|
||||||
self.ui_goto(page_event)
|
self.ui_goto(page_event)
|
||||||
|
else:
|
||||||
|
self.ui_goto_main()
|
||||||
|
if self.ui_page_appear(page_main_white):
|
||||||
|
self.ui_click(EVENT_20260417_DETAIL_WHITE, check_button=EVENT_20260417_DETAIL_CHECK)
|
||||||
|
else:
|
||||||
|
self.ui_click(EVENT_20260417_DETAIL, check_button=EVENT_20260417_DETAIL_CHECK)
|
||||||
|
self.ui_click(EVENT_20260417_ENTRANCE, check_button=EVENT_20260417_PT_ICON,
|
||||||
|
appear_button=EVENT_20260417_DETAIL_CHECK, offset=(40, 20))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|||||||
35
campaign/war_archives_20220818_cn/campaign_base.py
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
from ..campaign_war_archives.campaign_base import CampaignBase as CampaignBase_
|
||||||
|
|
||||||
|
|
||||||
|
class CampaignBase(CampaignBase_):
|
||||||
|
def campaign_set_chapter_sp(self, chapter, mode='normal'):
|
||||||
|
# SP event but has an `event` UI
|
||||||
|
from module.logger import logger
|
||||||
|
logger.info('Set chapter SP')
|
||||||
|
if chapter in ['sp', 'sp_sp']:
|
||||||
|
self.ui_goto_sp()
|
||||||
|
self.campaign_ensure_chapter(chapter)
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _campaign_separate_name(name):
|
||||||
|
if name in ['esp', 'sp']:
|
||||||
|
return 'sp_sp', '2'
|
||||||
|
if name in ['ex']:
|
||||||
|
return 'sp_ex', '3'
|
||||||
|
return CampaignBase_._campaign_separate_name(name)
|
||||||
|
|
||||||
|
def campaign_get_entrance(self, name):
|
||||||
|
if name == 'sp':
|
||||||
|
name = 'esp'
|
||||||
|
return super().campaign_get_entrance(name)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _campaign_get_chapter_index(name):
|
||||||
|
if name in ['sp_sp']:
|
||||||
|
return 2
|
||||||
|
if name in ['sp_ex']:
|
||||||
|
return 3
|
||||||
|
return CampaignBase_._campaign_get_chapter_index(name)
|
||||||
77
campaign/war_archives_20220818_cn/sp1.py
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
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('SP1')
|
||||||
|
MAP.shape = 'I7'
|
||||||
|
MAP.camera_data = ['D4', 'E5', 'F4']
|
||||||
|
MAP.camera_data_spawn_point = ['D3']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- ++ -- SP -- SP -- ++ ++
|
||||||
|
-- ++ -- -- -- -- -- ME --
|
||||||
|
ME -- -- -- MS -- -- -- ME
|
||||||
|
-- -- Me ++ Me ++ Me -- --
|
||||||
|
ME -- -- -- __ -- -- -- ME
|
||||||
|
-- ++ ++ ME -- ME -- ME --
|
||||||
|
-- -- ++ -- MB -- ++ ++ ++
|
||||||
|
"""
|
||||||
|
MAP.weight_data = """
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
"""
|
||||||
|
MAP.spawn_data = [
|
||||||
|
{'battle': 0, 'enemy': 2, 'siren': 1},
|
||||||
|
{'battle': 1, 'enemy': 2},
|
||||||
|
{'battle': 2, 'enemy': 1},
|
||||||
|
{'battle': 3, 'enemy': 1},
|
||||||
|
{'battle': 4, '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 = ['Z46', 'PrinzHeinrich', 'GrafZeppelin']
|
||||||
|
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 = True
|
||||||
|
MAP_HAS_MYSTERY = False
|
||||||
|
# ===== End of generated config =====
|
||||||
|
|
||||||
|
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||||
|
MAP_SWIPE_MULTIPLY = (1.203, 1.226)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.164, 1.185)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.130, 1.150)
|
||||||
|
|
||||||
|
|
||||||
|
class Campaign(CampaignBase):
|
||||||
|
MAP = MAP
|
||||||
|
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
|
||||||
|
MAP_AIR_RAID_OVERLAY_TRANSPARENCY_THRESHOLD = 0.25
|
||||||
|
|
||||||
|
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/war_archives_20220818_cn/sp2.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 .sp1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('SP2')
|
||||||
|
MAP.shape = 'I8'
|
||||||
|
MAP.camera_data = ['D3', 'D6']
|
||||||
|
MAP.camera_data_spawn_point = ['D3']
|
||||||
|
MAP.map_data = """
|
||||||
|
++ -- -- ++ -- -- ++ ++ --
|
||||||
|
-- SP -- Me -- -- ++ ++ --
|
||||||
|
-- -- -- -- -- MS -- -- --
|
||||||
|
-- SP -- Me -- -- Me -- --
|
||||||
|
++ ++ ++ -- ME __ -- ME --
|
||||||
|
-- ME -- Me -- -- ME -- --
|
||||||
|
MB -- -- -- -- Me ++ ++ --
|
||||||
|
-- ME -- ME ++ -- -- -- --
|
||||||
|
"""
|
||||||
|
MAP.weight_data = """
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
"""
|
||||||
|
MAP.spawn_data = [
|
||||||
|
{'battle': 0, 'enemy': 3, 'siren': 1},
|
||||||
|
{'battle': 1, 'enemy': 2},
|
||||||
|
{'battle': 2, 'enemy': 1},
|
||||||
|
{'battle': 3, 'enemy': 1},
|
||||||
|
{'battle': 4, '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 = ['Magdeburg', 'PrinzAdalbert', 'GrafZeppelin']
|
||||||
|
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 = True
|
||||||
|
MAP_HAS_MYSTERY = False
|
||||||
|
# ===== End of generated config =====
|
||||||
|
|
||||||
|
|
||||||
|
class Campaign(CampaignBase):
|
||||||
|
MAP = MAP
|
||||||
|
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
|
||||||
|
MAP_AIR_RAID_OVERLAY_TRANSPARENCY_THRESHOLD = 0.25
|
||||||
|
|
||||||
|
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()
|
||||||
81
campaign/war_archives_20220818_cn/sp3.py
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
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 .sp1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('SP3')
|
||||||
|
MAP.shape = 'H8'
|
||||||
|
MAP.camera_data = ['D5', 'E3', 'E5']
|
||||||
|
MAP.camera_data_spawn_point = ['D5']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- -- -- -- ++ ++ -- --
|
||||||
|
++ ++ Me -- Me ++ ME --
|
||||||
|
-- -- -- -- -- ME -- --
|
||||||
|
SP -- -- MS __ -- -- MB
|
||||||
|
SP -- -- MS -- 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
|
||||||
|
"""
|
||||||
|
MAP.spawn_data = [
|
||||||
|
{'battle': 0, 'enemy': 3, 'siren': 2},
|
||||||
|
{'battle': 1, 'enemy': 2},
|
||||||
|
{'battle': 2, 'enemy': 1},
|
||||||
|
{'battle': 3, 'enemy': 1},
|
||||||
|
{'battle': 4},
|
||||||
|
{'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 = ['GrafZeppelin', 'Weser', 'PeterStrasser']
|
||||||
|
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 = True
|
||||||
|
MAP_HAS_MYSTERY = False
|
||||||
|
# ===== End of generated config =====
|
||||||
|
|
||||||
|
MAP_SWIPE_MULTIPLY = (1.091, 1.112)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.056, 1.075)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.025, 1.043)
|
||||||
|
|
||||||
|
|
||||||
|
class Campaign(CampaignBase):
|
||||||
|
MAP = MAP
|
||||||
|
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
|
||||||
|
MAP_AIR_RAID_OVERLAY_TRANSPARENCY_THRESHOLD = 0.25
|
||||||
|
|
||||||
|
def battle_0(self):
|
||||||
|
if self.clear_siren():
|
||||||
|
return True
|
||||||
|
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0):
|
||||||
|
return True
|
||||||
|
|
||||||
|
return self.battle_default()
|
||||||
|
|
||||||
|
def battle_5(self):
|
||||||
|
return self.fleet_boss.clear_boss()
|
||||||
84
campaign/war_archives_20220818_cn/sp4.py
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
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 .sp1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('SP4')
|
||||||
|
MAP.shape = 'I9'
|
||||||
|
MAP.camera_data = ['D6', 'F6', 'E3']
|
||||||
|
MAP.camera_data_spawn_point = ['E7']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- -- -- ME -- ME -- -- --
|
||||||
|
-- ++ ME -- MB -- ME ++ --
|
||||||
|
-- -- -- -- Me -- -- -- --
|
||||||
|
-- ++ ++ -- -- -- ++ ++ --
|
||||||
|
-- ++ ++ Me MS Me ++ ++ --
|
||||||
|
-- ME MS -- __ -- MS ME --
|
||||||
|
ME -- -- ++ -- ++ -- -- ME
|
||||||
|
-- ME -- -- -- -- -- ME --
|
||||||
|
++ ++ ++ SP -- SP ++ ++ ++
|
||||||
|
"""
|
||||||
|
MAP.weight_data = """
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
50 50 50 50 50 50 50 50 50
|
||||||
|
"""
|
||||||
|
MAP.spawn_data = [
|
||||||
|
{'battle': 0, 'enemy': 3, 'siren': 2},
|
||||||
|
{'battle': 1, 'enemy': 2, 'siren': 1},
|
||||||
|
{'battle': 2, 'enemy': 1},
|
||||||
|
{'battle': 3, 'enemy': 1},
|
||||||
|
{'battle': 4},
|
||||||
|
{'battle': 5, 'boss': 1},
|
||||||
|
]
|
||||||
|
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
|
||||||
|
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
|
||||||
|
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
|
||||||
|
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
|
||||||
|
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
|
||||||
|
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
|
||||||
|
A7, B7, C7, D7, E7, F7, G7, H7, I7, \
|
||||||
|
A8, B8, C8, D8, E8, F8, G8, H8, I8, \
|
||||||
|
A9, B9, C9, D9, E9, F9, G9, H9, I9, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ['UlrichVonHutten']
|
||||||
|
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 = True
|
||||||
|
MAP_HAS_MYSTERY = False
|
||||||
|
# ===== End of generated config =====
|
||||||
|
|
||||||
|
MAP_SWIPE_MULTIPLY = (0.995, 1.013)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (0.962, 0.980)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (0.934, 0.951)
|
||||||
|
|
||||||
|
|
||||||
|
class Campaign(CampaignBase):
|
||||||
|
MAP = MAP
|
||||||
|
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
|
||||||
|
MAP_AIR_RAID_OVERLAY_TRANSPARENCY_THRESHOLD = 0.25
|
||||||
|
|
||||||
|
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()
|
||||||
7
campaign/war_archives_20230803_cn/campaign_base.py
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
from ..campaign_war_archives.campaign_base import CampaignBase as CampaignBase_
|
||||||
|
|
||||||
|
|
||||||
|
class CampaignBase(CampaignBase_):
|
||||||
|
STAGE_INCREASE = [
|
||||||
|
'SP1 > SP2 > SP3',
|
||||||
|
]
|
||||||
104
campaign/war_archives_20230803_cn/sp1.py
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
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('SP1')
|
||||||
|
MAP.shape = 'I6'
|
||||||
|
MAP.camera_data = ['F2', 'F4']
|
||||||
|
MAP.camera_data_spawn_point = ['D2', 'D4']
|
||||||
|
MAP.map_data = """
|
||||||
|
++ ++ ++ -- -- ME -- -- --
|
||||||
|
-- -- Me -- Me -- Me ++ ++
|
||||||
|
SP -- -- -- -- ME -- MB ++
|
||||||
|
-- -- -- MS -- -- __ -- ME
|
||||||
|
SP -- -- -- ++ 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
|
||||||
|
"""
|
||||||
|
MAP.spawn_data = [
|
||||||
|
{'battle': 0, 'enemy': 1, 'siren': 1},
|
||||||
|
{'battle': 1, 'enemy': 1},
|
||||||
|
{'battle': 2, 'enemy': 1},
|
||||||
|
{'battle': 3, 'enemy': 1},
|
||||||
|
{'battle': 4, '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, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ['DD']
|
||||||
|
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_HAS_WALK_SPEEDUP = True
|
||||||
|
MAP_HAS_MOVABLE_NORMAL_ENEMY = True
|
||||||
|
MOVABLE_NORMAL_ENEMY_TURN = (2,)
|
||||||
|
MAP_SIREN_MOVE_WAIT = 0.5
|
||||||
|
|
||||||
|
MAP_WALK_USE_CURRENT_FLEET = True
|
||||||
|
INTERNAL_LINES_FIND_PEAKS_PARAMETERS = {
|
||||||
|
'height': (80, 255 - 24),
|
||||||
|
'width': (0.9, 10),
|
||||||
|
'prominence': 10,
|
||||||
|
'distance': 35,
|
||||||
|
}
|
||||||
|
EDGE_LINES_FIND_PEAKS_PARAMETERS = {
|
||||||
|
'height': (255 - 24, 255),
|
||||||
|
'prominence': 10,
|
||||||
|
'distance': 50,
|
||||||
|
'wlen': 1000
|
||||||
|
}
|
||||||
|
HOMO_EDGE_COLOR_RANGE = (0, 24)
|
||||||
|
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom'
|
||||||
|
MAP_ENEMY_GENRE_DETECTION_SCALING = {
|
||||||
|
'DD': 1.111,
|
||||||
|
'CL': 1.111,
|
||||||
|
'CAred': 1.111,
|
||||||
|
'BBred': 1.111,
|
||||||
|
'CV': 1.111,
|
||||||
|
}
|
||||||
|
|
||||||
|
MAP_SWIPE_MULTIPLY = (1.179, 1.201)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.140, 1.161)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.107, 1.127)
|
||||||
|
|
||||||
|
|
||||||
|
class Campaign(CampaignBase):
|
||||||
|
MAP = MAP
|
||||||
|
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
|
||||||
|
|
||||||
|
def battle_0(self):
|
||||||
|
if self.map_is_clear_mode:
|
||||||
|
if self.clear_siren():
|
||||||
|
return True
|
||||||
|
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
if self.clear_any_enemy(sort=('cost_2',)):
|
||||||
|
return True
|
||||||
|
|
||||||
|
return self.battle_default()
|
||||||
|
|
||||||
|
def battle_4(self):
|
||||||
|
return self.clear_boss()
|
||||||
80
campaign/war_archives_20230803_cn/sp2.py
Normal 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 .sp1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('SP2')
|
||||||
|
MAP.shape = 'H7'
|
||||||
|
MAP.camera_data = ['D2', 'D5', 'E2', 'E5']
|
||||||
|
MAP.camera_data_spawn_point = ['E5', 'D5']
|
||||||
|
MAP.map_data = """
|
||||||
|
++ ME -- -- -- -- ME --
|
||||||
|
ME -- -- Me Me -- ++ --
|
||||||
|
ME -- Me ++ ++ ME ++ ME
|
||||||
|
-- __ -- ++ ++ -- Me --
|
||||||
|
ME -- MS MB MB MS __ ME
|
||||||
|
++ -- -- -- -- -- -- ME
|
||||||
|
++ ME -- SP 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
|
||||||
|
"""
|
||||||
|
MAP.spawn_data = [
|
||||||
|
{'battle': 0, 'enemy': 2, 'siren': 2},
|
||||||
|
{'battle': 1, 'enemy': 2},
|
||||||
|
{'battle': 2, 'enemy': 1},
|
||||||
|
{'battle': 3, 'enemy': 1},
|
||||||
|
{'battle': 4, 'boss': 1},
|
||||||
|
]
|
||||||
|
A1, B1, C1, D1, E1, F1, G1, H1, \
|
||||||
|
A2, B2, C2, D2, E2, F2, G2, H2, \
|
||||||
|
A3, B3, C3, D3, E3, F3, G3, H3, \
|
||||||
|
A4, B4, C4, D4, E4, F4, G4, H4, \
|
||||||
|
A5, B5, C5, D5, E5, F5, G5, H5, \
|
||||||
|
A6, B6, C6, D6, E6, F6, G6, H6, \
|
||||||
|
A7, B7, C7, D7, E7, F7, G7, H7, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ['CL', 'CAred']
|
||||||
|
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.133, 1.155)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.096, 1.116)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.064, 1.083)
|
||||||
|
|
||||||
|
|
||||||
|
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.map_is_clear_mode:
|
||||||
|
if self.clear_siren():
|
||||||
|
return True
|
||||||
|
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
if self.clear_any_enemy(sort=('cost_2',)):
|
||||||
|
return True
|
||||||
|
|
||||||
|
return self.battle_default()
|
||||||
|
|
||||||
|
def battle_4(self):
|
||||||
|
return self.clear_boss()
|
||||||
86
campaign/war_archives_20230803_cn/sp3.py
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
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 .sp1 import Config as ConfigBase
|
||||||
|
|
||||||
|
MAP = CampaignMap('SP3')
|
||||||
|
MAP.shape = 'I8'
|
||||||
|
MAP.camera_data = ['D2', 'D4', 'D6', 'F2', 'F4', 'F6']
|
||||||
|
MAP.camera_data_spawn_point = ['F2', 'D2']
|
||||||
|
MAP.map_data = """
|
||||||
|
-- -- ME ++ ++ ++ ME -- --
|
||||||
|
++ Me -- -- MB -- -- Me ++
|
||||||
|
ME -- -- SP -- SP -- -- ME
|
||||||
|
-- MS -- -- __ -- -- MS --
|
||||||
|
ME -- ++ -- ++ -- ++ -- ME
|
||||||
|
-- Me ++ MS -- MS ++ 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
|
||||||
|
"""
|
||||||
|
MAP.spawn_data = [
|
||||||
|
{'battle': 0, 'enemy': 2, 'siren': 2},
|
||||||
|
{'battle': 1, 'enemy': 2, 'siren': 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, \
|
||||||
|
A8, B8, C8, D8, E8, F8, G8, H8, I8, \
|
||||||
|
= MAP.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
class Config(ConfigBase):
|
||||||
|
# ===== Start of generated config =====
|
||||||
|
MAP_SIREN_TEMPLATE = ['SirenBoss15']
|
||||||
|
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 =====
|
||||||
|
|
||||||
|
HOMO_EDGE_HOUGHLINES_THRESHOLD = 210
|
||||||
|
|
||||||
|
MAP_SWIPE_MULTIPLY = (1.205, 1.227)
|
||||||
|
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.165, 1.187)
|
||||||
|
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.131, 1.151)
|
||||||
|
|
||||||
|
|
||||||
|
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.map_is_clear_mode:
|
||||||
|
if self.clear_siren():
|
||||||
|
return True
|
||||||
|
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1):
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
if self.clear_any_enemy(sort=('cost_2',)):
|
||||||
|
return True
|
||||||
|
|
||||||
|
return self.battle_default()
|
||||||
|
|
||||||
|
def battle_5(self):
|
||||||
|
return self.fleet_boss.clear_boss()
|
||||||
@@ -669,7 +669,7 @@
|
|||||||
},
|
},
|
||||||
"Campaign": {
|
"Campaign": {
|
||||||
"Name": "D3",
|
"Name": "D3",
|
||||||
"Event": "war_archives_20230223_cn",
|
"Event": "war_archives_20230803_cn",
|
||||||
"Mode": "normal",
|
"Mode": "normal",
|
||||||
"UseClearMode": true,
|
"UseClearMode": true,
|
||||||
"UseFleetLock": true,
|
"UseFleetLock": true,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# docker build -t hgjazhgj/alas:latest .
|
# docker build -t hgjazhgj/alas:latest .
|
||||||
# docker run -v ${PWD}:/app/AzurLaneAutoScript -p 22267:22267 --name alas -it --rm hgjazhgj/alas
|
# docker run -v ${PWD}:/app/AzurLaneAutoScript -p 22267:22267 --name alas -it --rm hgjazhgj/alas
|
||||||
|
|
||||||
FROM python:3.7-slim
|
FROM python:3.7-slim-bullseye
|
||||||
|
|
||||||
WORKDIR /app/AzurLaneAutoScript
|
WORKDIR /app/AzurLaneAutoScript
|
||||||
|
|
||||||
@@ -10,7 +10,12 @@ COPY requirements.txt /tmp/requirements.txt
|
|||||||
# Initial download of UiAutomator2 is slow outside of China using appetizer mirror, switch to GitHub
|
# Initial download of UiAutomator2 is slow outside of China using appetizer mirror, switch to GitHub
|
||||||
RUN apt update \
|
RUN apt update \
|
||||||
&& apt install -y git adb libgomp1 openssh-client \
|
&& apt install -y git adb libgomp1 openssh-client \
|
||||||
|
&& apt install -y build-essential pkg-config \
|
||||||
|
&& apt install -y libavformat-dev libavcodec-dev libavdevice-dev \
|
||||||
|
&& apt install -y libavutil-dev libswscale-dev libswresample-dev libavfilter-dev \
|
||||||
&& git config --global --add safe.directory '*' \
|
&& git config --global --add safe.directory '*' \
|
||||||
|
&& pip install Cython==0.29.37 \
|
||||||
|
&& pip install av==10.0.0 --no-build-isolation \
|
||||||
&& pip install -r /tmp/requirements.txt \
|
&& pip install -r /tmp/requirements.txt \
|
||||||
&& rm /tmp/requirements.txt \
|
&& rm /tmp/requirements.txt \
|
||||||
&& rm -r ~/.cache/pip
|
&& rm -r ~/.cache/pip
|
||||||
|
|||||||
@@ -14,16 +14,19 @@ deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib\n\
|
|||||||
deb https://mirrors.aliyun.com/debian-security/ bullseye-security main\n\
|
deb https://mirrors.aliyun.com/debian-security/ bullseye-security main\n\
|
||||||
deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main\n\
|
deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main\n\
|
||||||
deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib\n\
|
deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib\n\
|
||||||
deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib\n\
|
deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib" \
|
||||||
deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib\n\
|
|
||||||
deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib" \
|
|
||||||
> /etc/apt/sources.list \
|
> /etc/apt/sources.list \
|
||||||
&& apt update \
|
&& apt update \
|
||||||
&& apt install -y git adb libgomp1 openssh-client \
|
&& apt install -y git adb libgomp1 openssh-client \
|
||||||
|
&& apt install -y build-essential pkg-config \
|
||||||
|
&& apt install -y libavformat-dev libavcodec-dev libavdevice-dev \
|
||||||
|
&& apt install -y libavutil-dev libswscale-dev libswresample-dev libavfilter-dev \
|
||||||
&& git config --global --add safe.directory '*' \
|
&& git config --global --add safe.directory '*' \
|
||||||
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
|
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
|
||||||
&& echo 'Asia/Shanghai' > /etc/timezone \
|
&& echo 'Asia/Shanghai' > /etc/timezone \
|
||||||
&& pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple \
|
&& pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple \
|
||||||
|
&& pip install Cython==0.29.37 \
|
||||||
|
&& pip install av==10.0.0 --no-build-isolation \
|
||||||
&& pip install -r /tmp/requirements.txt \
|
&& pip install -r /tmp/requirements.txt \
|
||||||
&& rm /tmp/requirements.txt \
|
&& rm /tmp/requirements.txt \
|
||||||
&& rm -r ~/.cache/pip
|
&& rm -r ~/.cache/pip
|
||||||
|
|||||||
292
dev_tools/war_archives_update.py
Normal file
@@ -0,0 +1,292 @@
|
|||||||
|
import os
|
||||||
|
import re
|
||||||
|
import shutil
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
from cached_property import cached_property
|
||||||
|
from tqdm import tqdm
|
||||||
|
|
||||||
|
from module.base.timer import timer
|
||||||
|
from module.config.config_updater import ConfigGenerator, ConfigUpdater
|
||||||
|
from module.logger import logger
|
||||||
|
|
||||||
|
SERVER_INDEXS = {
|
||||||
|
'cn': 3,
|
||||||
|
'en': 4,
|
||||||
|
'jp': 5,
|
||||||
|
'tw': 6
|
||||||
|
}
|
||||||
|
|
||||||
|
class WarArchivesUpdater:
|
||||||
|
aired_date = None
|
||||||
|
event = None
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.cn, self.en, self.jp, self.tw = '-', '-', '-', '-'
|
||||||
|
self.lines: List[str]
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
|
self.cn, self.en, self.jp, self.tw = '-', '-', '-', '-'
|
||||||
|
with open('./campaign/Readme.md', 'r', encoding='utf-8') as f:
|
||||||
|
self.lines = f.readlines()
|
||||||
|
|
||||||
|
@cached_property
|
||||||
|
def lines(self):
|
||||||
|
with open('./campaign/Readme.md', 'r', encoding='utf-8') as f:
|
||||||
|
return f.readlines()
|
||||||
|
|
||||||
|
@cached_property
|
||||||
|
def latest_event_cn(self):
|
||||||
|
for text in self.lines[::-1]:
|
||||||
|
if not re.search(r'^\|.+\|$', text):
|
||||||
|
# not a table line
|
||||||
|
continue
|
||||||
|
elif re.search(r'^.*\-{3,}.*$', text):
|
||||||
|
# is a delimiter line
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
latest = [x.strip() for x in text.strip('| \n').split('|')]
|
||||||
|
if latest[SERVER_INDEXS['cn']] != '-':
|
||||||
|
return re.search(r'\d{8}', latest[1]).group(0)
|
||||||
|
return re.search(r'\d{8}', self.lines[-1].strip('| \n').split('|')[1].strip()).group(0)
|
||||||
|
|
||||||
|
def event_name_to_time(self, name):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
name (str): event name, such as '虹彩的终幕曲'
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: event time, such as '20220428'
|
||||||
|
If cannot find, return the time of the latest event
|
||||||
|
"""
|
||||||
|
if len(name) == 8 and re.search(r'\d{8}', name):
|
||||||
|
return name
|
||||||
|
for text in self.lines:
|
||||||
|
if name in text:
|
||||||
|
return re.search(r'\d{8}', text.strip('| \n').split('|')[1].strip()).group(0)
|
||||||
|
return self.latest_event_cn
|
||||||
|
|
||||||
|
def event_time_to_name(self, time):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
time (str): event time, such as '20220428'
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: event name in EN server, such as 'Rondo at Rainbow's End'
|
||||||
|
If cannot find, return the name of the latest event
|
||||||
|
"""
|
||||||
|
for text in self.lines:
|
||||||
|
if not re.search(r'^\|.+\|$', text):
|
||||||
|
# not a table line
|
||||||
|
continue
|
||||||
|
elif re.search(r'^.*\-{3,}.*$', text):
|
||||||
|
# is a delimiter line
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
line = [x.strip() for x in text.strip('| \n').split('|')]
|
||||||
|
if time in line[1]:
|
||||||
|
return line[SERVER_INDEXS['en']]
|
||||||
|
return self.lines[-1].strip('| \n').split('|')[SERVER_INDEXS['en']].strip()
|
||||||
|
|
||||||
|
def create_campaign_files(self, old_path, new_path):
|
||||||
|
if os.path.exists(old_path):
|
||||||
|
if not os.path.exists(new_path):
|
||||||
|
logger.info(f'Creating files at {new_path}')
|
||||||
|
shutil.copytree(old_path, new_path, ignore=shutil.ignore_patterns('sp.py'))
|
||||||
|
else:
|
||||||
|
logger.info(f'Directory already exists: {new_path}, skip creating files')
|
||||||
|
sp_path = os.path.join(new_path, 'sp.py')
|
||||||
|
if os.path.exists(sp_path):
|
||||||
|
logger.info(f'Removing sp files')
|
||||||
|
os.remove(sp_path)
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
logger.warning(f'No such directory: {old_path}')
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
def modify_campaign_files(self, old_path, new_path):
|
||||||
|
if os.path.exists(old_path) and os.path.exists(new_path):
|
||||||
|
files = os.listdir(new_path)
|
||||||
|
for file_name in tqdm(files):
|
||||||
|
if os.path.splitext(file_name)[-1] == '.py':
|
||||||
|
self.modify_single_campaign_file(os.path.join(new_path, file_name))
|
||||||
|
else:
|
||||||
|
logger.warning('No such directory, skip modifying files')
|
||||||
|
|
||||||
|
def modify_single_campaign_file(self, file_path):
|
||||||
|
with open(file_path, 'r', encoding='utf-8') as f:
|
||||||
|
lines = f.readlines()
|
||||||
|
|
||||||
|
new_lines = []
|
||||||
|
pattern = 'from module.campaign.campaign_base import CampaignBase'
|
||||||
|
replace = 'from ..campaign_war_archives.campaign_base import CampaignBase'
|
||||||
|
modify = False
|
||||||
|
for line in lines:
|
||||||
|
modified_line = line.replace(pattern, replace)
|
||||||
|
if line != modified_line:
|
||||||
|
modify = True
|
||||||
|
new_lines.append(modified_line)
|
||||||
|
|
||||||
|
if modify:
|
||||||
|
with open(file_path, 'w', encoding='utf-8') as f:
|
||||||
|
f.writelines(new_lines)
|
||||||
|
else:
|
||||||
|
logger.info(f'No changes, skip modifying file {os.path.basename(file_path)}')
|
||||||
|
|
||||||
|
@timer
|
||||||
|
def update_readme(self, aired_date, event):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
aired_date (str): war archives update time
|
||||||
|
event (str): event time
|
||||||
|
"""
|
||||||
|
insert = True
|
||||||
|
for row, text in enumerate(self.lines):
|
||||||
|
if f'war archives {event}' in text:
|
||||||
|
insert = False
|
||||||
|
break
|
||||||
|
if not re.search(r'^\|.+\|$', text):
|
||||||
|
# not a table line
|
||||||
|
continue
|
||||||
|
elif re.search(r'^.*\-{3,}.*$', text):
|
||||||
|
# is a delimiter line
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
line_entries = [x.strip() for x in text.strip('| \n').split('|')]
|
||||||
|
if re.search(r'\d{8}', text) and event in line_entries[1]:
|
||||||
|
directory = line_entries[1].replace('event', 'war archives')
|
||||||
|
for server in SERVER_INDEXS.keys():
|
||||||
|
if line_entries[SERVER_INDEXS[server]] == '-':
|
||||||
|
continue
|
||||||
|
elif self.__getattribute__(server) == '-':
|
||||||
|
self.__setattr__(server, line_entries[SERVER_INDEXS[server]])
|
||||||
|
if 'war archives' in text:
|
||||||
|
insert_row = row
|
||||||
|
|
||||||
|
if insert:
|
||||||
|
insert_event = [aired_date, directory, self.en] + \
|
||||||
|
[self.__getattribute__(server) for server in SERVER_INDEXS.keys()]
|
||||||
|
self.lines.insert(insert_row + 1, '|' + '|'.join(insert_event) + '|\n')
|
||||||
|
with open('./campaign/Readme.md', 'w', encoding='utf-8') as f:
|
||||||
|
f.writelines(self.lines)
|
||||||
|
|
||||||
|
@timer
|
||||||
|
def update_campaign_files(self, event):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
event (str):
|
||||||
|
"""
|
||||||
|
folder = './campaign'
|
||||||
|
raw_directory = 'event_' + event + '_cn'
|
||||||
|
directory = 'war_archives_' + event + '_cn'
|
||||||
|
old_path = os.path.join(folder, raw_directory)
|
||||||
|
new_path = os.path.join(folder, directory)
|
||||||
|
self.create_campaign_files(old_path, new_path)
|
||||||
|
self.modify_campaign_files(old_path, new_path)
|
||||||
|
|
||||||
|
@timer
|
||||||
|
def update_directory(self, event):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
event (str):
|
||||||
|
"""
|
||||||
|
directory = 'war_archives_' + event + '_cn'
|
||||||
|
name = self.event_time_to_name(event).replace('\'', '').replace('-', '_').replace(' ', '_').upper()
|
||||||
|
file_path = './module/war_archives/dictionary.py'
|
||||||
|
modify = True
|
||||||
|
with open(file_path, 'r', encoding='utf-8') as f:
|
||||||
|
lines = f.readlines()
|
||||||
|
|
||||||
|
for row, text in enumerate(lines):
|
||||||
|
if name in text:
|
||||||
|
modify = False
|
||||||
|
break
|
||||||
|
if 'war_archives' in text:
|
||||||
|
insert_row = row
|
||||||
|
|
||||||
|
if modify:
|
||||||
|
lines.insert(insert_row + 1, f' \'{directory}\': TEMPLATE_{name},\n')
|
||||||
|
with open(file_path, 'w', encoding='utf-8') as f:
|
||||||
|
f.writelines(lines)
|
||||||
|
else:
|
||||||
|
logger.info('No changes, skip modifying dictionary.py')
|
||||||
|
|
||||||
|
@timer
|
||||||
|
def war_archives_update(self, aired_date=None, event=None):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
aired_date (str, list[str], None):
|
||||||
|
use the YYYYMMDD format, such as '20220428',
|
||||||
|
'today' or None for datetime.today()
|
||||||
|
event (str, list[str], None):
|
||||||
|
use the YYYYMMDD format, also can use the event name, such as ['雄鹰的叙事歌', '20220428']
|
||||||
|
'recent' or None for the lastest event for CN server
|
||||||
|
"""
|
||||||
|
if aired_date is None or aired_date == 'today':
|
||||||
|
dates = [datetime.today().strftime("%Y%m%d")]
|
||||||
|
elif isinstance(aired_date, str):
|
||||||
|
dates = [aired_date]
|
||||||
|
elif isinstance(aired_date, list):
|
||||||
|
dates = [datetime.today().strftime("%Y%m%d") if d == 'today' else d for d in aired_date]
|
||||||
|
else:
|
||||||
|
logger.warning('Wrong Aired Date format')
|
||||||
|
dates = []
|
||||||
|
|
||||||
|
if event is None or event == 'recent':
|
||||||
|
events = [self.latest_event_cn]
|
||||||
|
elif isinstance(event, str):
|
||||||
|
events = [self.event_name_to_time(event)]
|
||||||
|
elif isinstance(event, list):
|
||||||
|
events = [self.latest_event_cn if e == 'recent' else self.event_name_to_time(e) for e in event]
|
||||||
|
else:
|
||||||
|
logger.warning('Wrong Event format')
|
||||||
|
events = []
|
||||||
|
|
||||||
|
for aired_date, event in tqdm(zip(dates, events)):
|
||||||
|
self.update_readme(aired_date, event)
|
||||||
|
self.update_campaign_files(event)
|
||||||
|
self.update_directory(event)
|
||||||
|
self.reset()
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.war_archives_update(aired_date=self.aired_date, event=self.event)
|
||||||
|
ConfigGenerator().generate()
|
||||||
|
ConfigUpdater().update_file('template', is_template=True)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
# Date of update of war archives
|
||||||
|
# input strings in YYYYMMDD format for war archives update time
|
||||||
|
# use 'today' for today, use a list to input multiple values,
|
||||||
|
# such as '20250717', 'today', ['20250619' , '20250717', 'today']
|
||||||
|
WarArchivesUpdater.aired_date = ['20260409', '20260507']
|
||||||
|
# Event name or date of update of war archives
|
||||||
|
# input strings in YYYYMMDD format for event time, or input event name
|
||||||
|
# use 'recent' for the latest CN enent, use a list to input multiple values,
|
||||||
|
# such as '20220428', '虹彩的终幕曲', 'recent', ['雄鹰的叙事歌' , '20220428', 'recent']
|
||||||
|
WarArchivesUpdater.event = ['远汇点作战', '奏响鸢尾之歌']
|
||||||
|
|
||||||
|
updater = WarArchivesUpdater()
|
||||||
|
|
||||||
|
"""
|
||||||
|
Step 1:
|
||||||
|
Run these code.
|
||||||
|
"""
|
||||||
|
# Ensure running in Alas root folder
|
||||||
|
os.chdir(os.path.join(os.path.dirname(__file__), '../'))
|
||||||
|
updater.run()
|
||||||
|
|
||||||
|
"""
|
||||||
|
Step 2:
|
||||||
|
Manually add assets of the same name
|
||||||
|
at the end of module/war_archives/dictionary.py,
|
||||||
|
and then run dev_tools/button_extract.py.
|
||||||
|
"""
|
||||||
|
|
||||||
|
"""
|
||||||
|
Step 3:
|
||||||
|
Modify campaign/<event name>/campaign_base.py for SP event (if file exists)
|
||||||
|
self.ui_goto_event() --> self.ui_goto_sp()
|
||||||
|
Modify handle_stage_name() in module/campaign/run.py for T/HT event
|
||||||
|
"""
|
||||||
@@ -11,12 +11,20 @@ CHAPTER_20241219_SP = Button(area={'cn': (17, 372, 34, 388), 'en': (17, 372, 34,
|
|||||||
CHAPTER_NEXT = Button(area={'cn': (1216, 362, 1232, 388), 'en': (1216, 362, 1232, 388), 'jp': (1216, 362, 1232, 388), 'tw': (1216, 362, 1232, 388)}, color={'cn': (121, 150, 198), 'en': (121, 150, 198), 'jp': (121, 150, 198), 'tw': (121, 150, 198)}, button={'cn': (1216, 362, 1232, 388), 'en': (1216, 362, 1232, 388), 'jp': (1216, 362, 1232, 388), 'tw': (1216, 362, 1232, 388)}, file={'cn': './assets/cn/campaign/CHAPTER_NEXT.png', 'en': './assets/en/campaign/CHAPTER_NEXT.png', 'jp': './assets/jp/campaign/CHAPTER_NEXT.png', 'tw': './assets/tw/campaign/CHAPTER_NEXT.png'})
|
CHAPTER_NEXT = Button(area={'cn': (1216, 362, 1232, 388), 'en': (1216, 362, 1232, 388), 'jp': (1216, 362, 1232, 388), 'tw': (1216, 362, 1232, 388)}, color={'cn': (121, 150, 198), 'en': (121, 150, 198), 'jp': (121, 150, 198), 'tw': (121, 150, 198)}, button={'cn': (1216, 362, 1232, 388), 'en': (1216, 362, 1232, 388), 'jp': (1216, 362, 1232, 388), 'tw': (1216, 362, 1232, 388)}, file={'cn': './assets/cn/campaign/CHAPTER_NEXT.png', 'en': './assets/en/campaign/CHAPTER_NEXT.png', 'jp': './assets/jp/campaign/CHAPTER_NEXT.png', 'tw': './assets/tw/campaign/CHAPTER_NEXT.png'})
|
||||||
CHAPTER_PREV = Button(area={'cn': (42, 360, 58, 387), 'en': (42, 360, 58, 387), 'jp': (42, 360, 58, 387), 'tw': (42, 360, 58, 387)}, color={'cn': (105, 133, 169), 'en': (105, 133, 169), 'jp': (105, 133, 169), 'tw': (105, 133, 169)}, button={'cn': (42, 360, 58, 387), 'en': (42, 360, 58, 387), 'jp': (42, 360, 58, 387), 'tw': (42, 360, 58, 387)}, file={'cn': './assets/cn/campaign/CHAPTER_PREV.png', 'en': './assets/en/campaign/CHAPTER_PREV.png', 'jp': './assets/jp/campaign/CHAPTER_PREV.png', 'tw': './assets/tw/campaign/CHAPTER_PREV.png'})
|
CHAPTER_PREV = Button(area={'cn': (42, 360, 58, 387), 'en': (42, 360, 58, 387), 'jp': (42, 360, 58, 387), 'tw': (42, 360, 58, 387)}, color={'cn': (105, 133, 169), 'en': (105, 133, 169), 'jp': (105, 133, 169), 'tw': (105, 133, 169)}, button={'cn': (42, 360, 58, 387), 'en': (42, 360, 58, 387), 'jp': (42, 360, 58, 387), 'tw': (42, 360, 58, 387)}, file={'cn': './assets/cn/campaign/CHAPTER_PREV.png', 'en': './assets/en/campaign/CHAPTER_PREV.png', 'jp': './assets/jp/campaign/CHAPTER_PREV.png', 'tw': './assets/tw/campaign/CHAPTER_PREV.png'})
|
||||||
COMMISSION_NOTICE_AT_CAMPAIGN = Button(area={'cn': (1077, 637, 1083, 643), 'en': (1077, 637, 1083, 643), 'jp': (1077, 637, 1083, 643), 'tw': (1077, 637, 1083, 643)}, color={'cn': (172, 72, 49), 'en': (172, 72, 49), 'jp': (172, 72, 49), 'tw': (172, 72, 49)}, button={'cn': (1077, 637, 1083, 643), 'en': (1077, 637, 1083, 643), 'jp': (1077, 637, 1083, 643), 'tw': (1077, 637, 1083, 643)}, file={'cn': './assets/cn/campaign/COMMISSION_NOTICE_AT_CAMPAIGN.png', 'en': './assets/en/campaign/COMMISSION_NOTICE_AT_CAMPAIGN.png', 'jp': './assets/jp/campaign/COMMISSION_NOTICE_AT_CAMPAIGN.png', 'tw': './assets/tw/campaign/COMMISSION_NOTICE_AT_CAMPAIGN.png'})
|
COMMISSION_NOTICE_AT_CAMPAIGN = Button(area={'cn': (1077, 637, 1083, 643), 'en': (1077, 637, 1083, 643), 'jp': (1077, 637, 1083, 643), 'tw': (1077, 637, 1083, 643)}, color={'cn': (172, 72, 49), 'en': (172, 72, 49), 'jp': (172, 72, 49), 'tw': (172, 72, 49)}, button={'cn': (1077, 637, 1083, 643), 'en': (1077, 637, 1083, 643), 'jp': (1077, 637, 1083, 643), 'tw': (1077, 637, 1083, 643)}, file={'cn': './assets/cn/campaign/COMMISSION_NOTICE_AT_CAMPAIGN.png', 'en': './assets/en/campaign/COMMISSION_NOTICE_AT_CAMPAIGN.png', 'jp': './assets/jp/campaign/COMMISSION_NOTICE_AT_CAMPAIGN.png', 'tw': './assets/tw/campaign/COMMISSION_NOTICE_AT_CAMPAIGN.png'})
|
||||||
EVENT_20201126_ENTRANCE_TEMP = Button(area={'cn': (1023, 368, 1100, 407), 'en': (1025, 367, 1095, 406), 'jp': (1023, 367, 1101, 402), 'tw': (1023, 368, 1100, 407)}, color={'cn': (160, 208, 243), 'en': (156, 206, 243), 'jp': (167, 213, 245), 'tw': (160, 208, 243)}, button={'cn': (1023, 368, 1100, 407), 'en': (1025, 367, 1095, 406), 'jp': (1023, 367, 1101, 402), 'tw': (1023, 368, 1100, 407)}, file={'cn': './assets/cn/campaign/EVENT_20201126_ENTRANCE_TEMP.png', 'en': './assets/en/campaign/EVENT_20201126_ENTRANCE_TEMP.png', 'jp': './assets/jp/campaign/EVENT_20201126_ENTRANCE_TEMP.png', 'tw': './assets/cn/campaign/EVENT_20201126_ENTRANCE_TEMP.png'})
|
EVENT_20201126_DETAIL = Button(area={'cn': (617, 470, 659, 510), 'en': (617, 470, 659, 510), 'jp': (617, 470, 659, 510), 'tw': (617, 470, 659, 510)}, color={'cn': (188, 152, 166), 'en': (188, 152, 166), 'jp': (188, 152, 166), 'tw': (188, 152, 166)}, button={'cn': (617, 470, 659, 510), 'en': (617, 470, 659, 510), 'jp': (617, 470, 659, 510), 'tw': (617, 470, 659, 510)}, file={'cn': './assets/cn/campaign/EVENT_20201126_DETAIL.png', 'en': './assets/cn/campaign/EVENT_20201126_DETAIL.png', 'jp': './assets/cn/campaign/EVENT_20201126_DETAIL.png', 'tw': './assets/cn/campaign/EVENT_20201126_DETAIL.png'})
|
||||||
|
EVENT_20201126_DETAIL_CHECK = Button(area={'cn': (1198, 20, 1244, 65), 'en': (1198, 20, 1244, 65), 'jp': (1198, 20, 1244, 65), 'tw': (1198, 20, 1244, 65)}, color={'cn': (176, 138, 121), 'en': (176, 138, 121), 'jp': (176, 138, 121), 'tw': (176, 138, 121)}, button={'cn': (1198, 20, 1244, 65), 'en': (1198, 20, 1244, 65), 'jp': (1198, 20, 1244, 65), 'tw': (1198, 20, 1244, 65)}, file={'cn': './assets/cn/campaign/EVENT_20201126_DETAIL_CHECK.png', 'en': './assets/cn/campaign/EVENT_20201126_DETAIL_CHECK.png', 'jp': './assets/cn/campaign/EVENT_20201126_DETAIL_CHECK.png', 'tw': './assets/cn/campaign/EVENT_20201126_DETAIL_CHECK.png'})
|
||||||
|
EVENT_20201126_DETAIL_WHITE = Button(area={'cn': (969, 94, 1030, 156), 'en': (969, 94, 1030, 156), 'jp': (969, 94, 1030, 156), 'tw': (969, 94, 1030, 156)}, color={'cn': (178, 148, 165), 'en': (178, 148, 165), 'jp': (178, 148, 165), 'tw': (178, 148, 165)}, button={'cn': (969, 94, 1030, 156), 'en': (969, 94, 1030, 156), 'jp': (969, 94, 1030, 156), 'tw': (969, 94, 1030, 156)}, file={'cn': './assets/cn/campaign/EVENT_20201126_DETAIL_WHITE.png', 'en': './assets/cn/campaign/EVENT_20201126_DETAIL_WHITE.png', 'jp': './assets/cn/campaign/EVENT_20201126_DETAIL_WHITE.png', 'tw': './assets/cn/campaign/EVENT_20201126_DETAIL_WHITE.png'})
|
||||||
|
EVENT_20201126_ENTRANCE = Button(area={'cn': (927, 599, 1054, 631), 'en': (927, 599, 1054, 631), 'jp': (927, 599, 1054, 631), 'tw': (927, 599, 1054, 631)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (927, 599, 1054, 631), 'en': (927, 599, 1054, 631), 'jp': (927, 599, 1054, 631), 'tw': (927, 599, 1054, 631)}, file={'cn': './assets/cn/campaign/EVENT_20201126_ENTRANCE.png', 'en': './assets/cn/campaign/EVENT_20201126_ENTRANCE.png', 'jp': './assets/cn/campaign/EVENT_20201126_ENTRANCE.png', 'tw': './assets/cn/campaign/EVENT_20201126_ENTRANCE.png'})
|
||||||
EVENT_20201126_PT_ICON = Button(area={'cn': (1108, 102, 1133, 127), 'en': (1108, 102, 1133, 127), 'jp': (1108, 102, 1133, 127), 'tw': (1108, 102, 1133, 127)}, color={'cn': (231, 121, 159), 'en': (231, 121, 159), 'jp': (231, 121, 159), 'tw': (231, 121, 159)}, button={'cn': (1108, 102, 1133, 127), 'en': (1108, 102, 1133, 127), 'jp': (1108, 102, 1133, 127), 'tw': (1108, 102, 1133, 127)}, file={'cn': './assets/cn/campaign/EVENT_20201126_PT_ICON.png', 'en': './assets/cn/campaign/EVENT_20201126_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20201126_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20201126_PT_ICON.png'})
|
EVENT_20201126_PT_ICON = Button(area={'cn': (1108, 102, 1133, 127), 'en': (1108, 102, 1133, 127), 'jp': (1108, 102, 1133, 127), 'tw': (1108, 102, 1133, 127)}, color={'cn': (231, 121, 159), 'en': (231, 121, 159), 'jp': (231, 121, 159), 'tw': (231, 121, 159)}, button={'cn': (1108, 102, 1133, 127), 'en': (1108, 102, 1133, 127), 'jp': (1108, 102, 1133, 127), 'tw': (1108, 102, 1133, 127)}, file={'cn': './assets/cn/campaign/EVENT_20201126_PT_ICON.png', 'en': './assets/cn/campaign/EVENT_20201126_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20201126_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20201126_PT_ICON.png'})
|
||||||
EVENT_20221124_ENTRANCE = Button(area={'cn': (1037, 162, 1077, 195), 'en': (1037, 162, 1077, 195), 'jp': (1037, 162, 1077, 195), 'tw': (1037, 162, 1077, 195)}, color={'cn': (207, 168, 148), 'en': (207, 168, 148), 'jp': (207, 168, 148), 'tw': (207, 168, 148)}, button={'cn': (1037, 162, 1077, 195), 'en': (1037, 162, 1077, 195), 'jp': (1037, 162, 1077, 195), 'tw': (1037, 162, 1077, 195)}, file={'cn': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png', 'en': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png', 'jp': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png', 'tw': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png'})
|
EVENT_20221124_ENTRANCE = Button(area={'cn': (1037, 162, 1077, 195), 'en': (1037, 162, 1077, 195), 'jp': (1037, 162, 1077, 195), 'tw': (1037, 162, 1077, 195)}, color={'cn': (207, 168, 148), 'en': (207, 168, 148), 'jp': (207, 168, 148), 'tw': (207, 168, 148)}, button={'cn': (1037, 162, 1077, 195), 'en': (1037, 162, 1077, 195), 'jp': (1037, 162, 1077, 195), 'tw': (1037, 162, 1077, 195)}, file={'cn': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png', 'en': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png', 'jp': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png', 'tw': './assets/cn/campaign/EVENT_20221124_ENTRANCE.png'})
|
||||||
EVENT_20221124_PT_ICON = Button(area={'cn': (1106, 109, 1135, 130), 'en': (1071, 109, 1101, 129), 'jp': (1106, 109, 1135, 130), 'tw': (1106, 109, 1135, 130)}, color={'cn': (151, 116, 139), 'en': (152, 115, 138), 'jp': (151, 116, 139), 'tw': (151, 116, 139)}, button={'cn': (1106, 109, 1135, 130), 'en': (1071, 109, 1101, 129), 'jp': (1106, 109, 1135, 130), 'tw': (1106, 109, 1135, 130)}, file={'cn': './assets/cn/campaign/EVENT_20221124_PT_ICON.png', 'en': './assets/en/campaign/EVENT_20221124_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20221124_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20221124_PT_ICON.png'})
|
EVENT_20221124_PT_ICON = Button(area={'cn': (1106, 109, 1135, 130), 'en': (1071, 109, 1101, 129), 'jp': (1106, 109, 1135, 130), 'tw': (1106, 109, 1135, 130)}, color={'cn': (151, 116, 139), 'en': (152, 115, 138), 'jp': (151, 116, 139), 'tw': (151, 116, 139)}, button={'cn': (1106, 109, 1135, 130), 'en': (1071, 109, 1101, 129), 'jp': (1106, 109, 1135, 130), 'tw': (1106, 109, 1135, 130)}, file={'cn': './assets/cn/campaign/EVENT_20221124_PT_ICON.png', 'en': './assets/en/campaign/EVENT_20221124_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20221124_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20221124_PT_ICON.png'})
|
||||||
EVENT_20230817_STORY = Button(area={'cn': (610, 320, 670, 380), 'en': (610, 320, 670, 380), 'jp': (610, 320, 670, 380), 'tw': (610, 320, 670, 380)}, color={'cn': (183, 180, 190), 'en': (183, 180, 190), 'jp': (183, 180, 190), 'tw': (183, 180, 190)}, button={'cn': (610, 320, 670, 380), 'en': (610, 320, 670, 380), 'jp': (610, 320, 670, 380), 'tw': (610, 320, 670, 380)}, file={'cn': './assets/cn/campaign/EVENT_20230817_STORY.png', 'en': './assets/en/campaign/EVENT_20230817_STORY.png', 'jp': './assets/jp/campaign/EVENT_20230817_STORY.png', 'tw': './assets/tw/campaign/EVENT_20230817_STORY.png'})
|
EVENT_20230817_STORY = Button(area={'cn': (610, 320, 670, 380), 'en': (610, 320, 670, 380), 'jp': (610, 320, 670, 380), 'tw': (610, 320, 670, 380)}, color={'cn': (183, 180, 190), 'en': (183, 180, 190), 'jp': (183, 180, 190), 'tw': (183, 180, 190)}, button={'cn': (610, 320, 670, 380), 'en': (610, 320, 670, 380), 'jp': (610, 320, 670, 380), 'tw': (610, 320, 670, 380)}, file={'cn': './assets/cn/campaign/EVENT_20230817_STORY.png', 'en': './assets/en/campaign/EVENT_20230817_STORY.png', 'jp': './assets/jp/campaign/EVENT_20230817_STORY.png', 'tw': './assets/tw/campaign/EVENT_20230817_STORY.png'})
|
||||||
|
EVENT_20250424_PT_ICON = Button(area={'cn': (1109, 109, 1133, 131), 'en': (1109, 109, 1133, 131), 'jp': (1109, 109, 1133, 131), 'tw': (1109, 109, 1133, 131)}, color={'cn': (182, 173, 150), 'en': (182, 173, 150), 'jp': (182, 173, 150), 'tw': (182, 173, 150)}, button={'cn': (1109, 109, 1133, 131), 'en': (1109, 109, 1133, 131), 'jp': (1109, 109, 1133, 131), 'tw': (1109, 109, 1133, 131)}, file={'cn': './assets/cn/campaign/EVENT_20250424_PT_ICON.png', 'en': './assets/cn/campaign/EVENT_20250424_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20250424_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20250424_PT_ICON.png'})
|
||||||
EVENT_20250724_PT_ICON = Button(area={'cn': (1102, 106, 1139, 121), 'en': (1067, 108, 1104, 123), 'jp': (1102, 106, 1139, 121), 'tw': (1102, 106, 1139, 121)}, color={'cn': (95, 103, 93), 'en': (97, 101, 94), 'jp': (95, 103, 93), 'tw': (95, 103, 93)}, button={'cn': (1102, 106, 1139, 121), 'en': (1067, 108, 1104, 123), 'jp': (1102, 106, 1139, 121), 'tw': (1102, 106, 1139, 121)}, file={'cn': './assets/cn/campaign/EVENT_20250724_PT_ICON.png', 'en': './assets/en/campaign/EVENT_20250724_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20250724_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20250724_PT_ICON.png'})
|
EVENT_20250724_PT_ICON = Button(area={'cn': (1102, 106, 1139, 121), 'en': (1067, 108, 1104, 123), 'jp': (1102, 106, 1139, 121), 'tw': (1102, 106, 1139, 121)}, color={'cn': (95, 103, 93), 'en': (97, 101, 94), 'jp': (95, 103, 93), 'tw': (95, 103, 93)}, button={'cn': (1102, 106, 1139, 121), 'en': (1067, 108, 1104, 123), 'jp': (1102, 106, 1139, 121), 'tw': (1102, 106, 1139, 121)}, file={'cn': './assets/cn/campaign/EVENT_20250724_PT_ICON.png', 'en': './assets/en/campaign/EVENT_20250724_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20250724_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20250724_PT_ICON.png'})
|
||||||
|
EVENT_20260417_DETAIL = Button(area={'cn': (618, 251, 658, 290), 'en': (618, 251, 658, 290), 'jp': (618, 251, 658, 290), 'tw': (618, 251, 658, 290)}, color={'cn': (221, 188, 185), 'en': (221, 188, 185), 'jp': (221, 188, 185), 'tw': (221, 188, 185)}, button={'cn': (618, 251, 658, 290), 'en': (618, 251, 658, 290), 'jp': (618, 251, 658, 290), 'tw': (618, 251, 658, 290)}, file={'cn': './assets/cn/campaign/EVENT_20260417_DETAIL.png', 'en': './assets/cn/campaign/EVENT_20260417_DETAIL.png', 'jp': './assets/cn/campaign/EVENT_20260417_DETAIL.png', 'tw': './assets/cn/campaign/EVENT_20260417_DETAIL.png'})
|
||||||
|
EVENT_20260417_DETAIL_CHECK = Button(area={'cn': (439, 216, 535, 293), 'en': (439, 216, 535, 293), 'jp': (439, 216, 535, 293), 'tw': (439, 216, 535, 293)}, color={'cn': (187, 160, 173), 'en': (187, 160, 173), 'jp': (187, 160, 173), 'tw': (187, 160, 173)}, button={'cn': (439, 216, 535, 293), 'en': (439, 216, 535, 293), 'jp': (439, 216, 535, 293), 'tw': (439, 216, 535, 293)}, file={'cn': './assets/cn/campaign/EVENT_20260417_DETAIL_CHECK.png', 'en': './assets/cn/campaign/EVENT_20260417_DETAIL_CHECK.png', 'jp': './assets/cn/campaign/EVENT_20260417_DETAIL_CHECK.png', 'tw': './assets/cn/campaign/EVENT_20260417_DETAIL_CHECK.png'})
|
||||||
|
EVENT_20260417_DETAIL_WHITE = Button(area={'cn': (1081, 92, 1141, 153), 'en': (1081, 92, 1141, 153), 'jp': (1081, 92, 1141, 153), 'tw': (1081, 92, 1141, 153)}, color={'cn': (211, 173, 175), 'en': (211, 173, 175), 'jp': (211, 173, 175), 'tw': (211, 173, 175)}, button={'cn': (1081, 92, 1141, 153), 'en': (1081, 92, 1141, 153), 'jp': (1081, 92, 1141, 153), 'tw': (1081, 92, 1141, 153)}, file={'cn': './assets/cn/campaign/EVENT_20260417_DETAIL_WHITE.png', 'en': './assets/cn/campaign/EVENT_20260417_DETAIL_WHITE.png', 'jp': './assets/cn/campaign/EVENT_20260417_DETAIL_WHITE.png', 'tw': './assets/cn/campaign/EVENT_20260417_DETAIL_WHITE.png'})
|
||||||
|
EVENT_20260417_ENTRANCE = Button(area={'cn': (957, 522, 1091, 573), 'en': (957, 522, 1091, 573), 'jp': (957, 522, 1091, 573), 'tw': (957, 522, 1091, 573)}, color={'cn': (255, 255, 255), 'en': (255, 255, 255), 'jp': (255, 255, 255), 'tw': (255, 255, 255)}, button={'cn': (957, 522, 1091, 573), 'en': (957, 522, 1091, 573), 'jp': (957, 522, 1091, 573), 'tw': (957, 522, 1091, 573)}, file={'cn': './assets/cn/campaign/EVENT_20260417_ENTRANCE.png', 'en': './assets/cn/campaign/EVENT_20260417_ENTRANCE.png', 'jp': './assets/cn/campaign/EVENT_20260417_ENTRANCE.png', 'tw': './assets/cn/campaign/EVENT_20260417_ENTRANCE.png'})
|
||||||
EVENT_20260417_PT_ICON = Button(area={'cn': (1110, 106, 1133, 130), 'en': (1110, 106, 1133, 130), 'jp': (1110, 106, 1133, 130), 'tw': (1110, 106, 1133, 130)}, color={'cn': (119, 177, 213), 'en': (119, 177, 213), 'jp': (119, 177, 213), 'tw': (119, 177, 213)}, button={'cn': (1110, 106, 1133, 130), 'en': (1110, 106, 1133, 130), 'jp': (1110, 106, 1133, 130), 'tw': (1110, 106, 1133, 130)}, file={'cn': './assets/cn/campaign/EVENT_20260417_PT_ICON.png', 'en': './assets/cn/campaign/EVENT_20260417_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20260417_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20260417_PT_ICON.png'})
|
EVENT_20260417_PT_ICON = Button(area={'cn': (1110, 106, 1133, 130), 'en': (1110, 106, 1133, 130), 'jp': (1110, 106, 1133, 130), 'tw': (1110, 106, 1133, 130)}, color={'cn': (119, 177, 213), 'en': (119, 177, 213), 'jp': (119, 177, 213), 'tw': (119, 177, 213)}, button={'cn': (1110, 106, 1133, 130), 'en': (1110, 106, 1133, 130), 'jp': (1110, 106, 1133, 130), 'tw': (1110, 106, 1133, 130)}, file={'cn': './assets/cn/campaign/EVENT_20260417_PT_ICON.png', 'en': './assets/cn/campaign/EVENT_20260417_PT_ICON.png', 'jp': './assets/cn/campaign/EVENT_20260417_PT_ICON.png', 'tw': './assets/cn/campaign/EVENT_20260417_PT_ICON.png'})
|
||||||
OCR_COIN = Button(area={'cn': (815, 23, 922, 51), 'en': (815, 23, 922, 51), 'jp': (815, 23, 922, 51), 'tw': (815, 23, 922, 51)}, color={'cn': (61, 61, 73), 'en': (61, 61, 73), 'jp': (61, 61, 73), 'tw': (61, 61, 73)}, button={'cn': (815, 23, 922, 51), 'en': (815, 23, 922, 51), 'jp': (815, 23, 922, 51), 'tw': (815, 23, 922, 51)}, file={'cn': './assets/cn/campaign/OCR_COIN.png', 'en': './assets/en/campaign/OCR_COIN.png', 'jp': './assets/jp/campaign/OCR_COIN.png', 'tw': './assets/tw/campaign/OCR_COIN.png'})
|
OCR_COIN = Button(area={'cn': (815, 23, 922, 51), 'en': (815, 23, 922, 51), 'jp': (815, 23, 922, 51), 'tw': (815, 23, 922, 51)}, color={'cn': (61, 61, 73), 'en': (61, 61, 73), 'jp': (61, 61, 73), 'tw': (61, 61, 73)}, button={'cn': (815, 23, 922, 51), 'en': (815, 23, 922, 51), 'jp': (815, 23, 922, 51), 'tw': (815, 23, 922, 51)}, file={'cn': './assets/cn/campaign/OCR_COIN.png', 'en': './assets/en/campaign/OCR_COIN.png', 'jp': './assets/jp/campaign/OCR_COIN.png', 'tw': './assets/tw/campaign/OCR_COIN.png'})
|
||||||
OCR_EVENT_PT = Button(area={'cn': (1196, 109, 1280, 131), 'en': (1190, 109, 1280, 129), 'jp': (1196, 109, 1280, 131), 'tw': (1196, 109, 1280, 131)}, color={'cn': (121, 110, 59), 'en': (88, 78, 51), 'jp': (121, 110, 59), 'tw': (121, 110, 59)}, button={'cn': (1196, 109, 1280, 131), 'en': (1190, 109, 1280, 129), 'jp': (1196, 109, 1280, 131), 'tw': (1196, 109, 1280, 131)}, file={'cn': './assets/cn/campaign/OCR_EVENT_PT.png', 'en': './assets/en/campaign/OCR_EVENT_PT.png', 'jp': './assets/jp/campaign/OCR_EVENT_PT.png', 'tw': './assets/tw/campaign/OCR_EVENT_PT.png'})
|
OCR_EVENT_PT = Button(area={'cn': (1196, 109, 1280, 131), 'en': (1190, 109, 1280, 129), 'jp': (1196, 109, 1280, 131), 'tw': (1196, 109, 1280, 131)}, color={'cn': (121, 110, 59), 'en': (88, 78, 51), 'jp': (121, 110, 59), 'tw': (121, 110, 59)}, button={'cn': (1196, 109, 1280, 131), 'en': (1190, 109, 1280, 129), 'jp': (1196, 109, 1280, 131), 'tw': (1196, 109, 1280, 131)}, file={'cn': './assets/cn/campaign/OCR_EVENT_PT.png', 'en': './assets/en/campaign/OCR_EVENT_PT.png', 'jp': './assets/jp/campaign/OCR_EVENT_PT.png', 'tw': './assets/tw/campaign/OCR_EVENT_PT.png'})
|
||||||
|
|||||||
@@ -11,5 +11,5 @@ COMMISSION_SCROLL_AREA = Button(area={'cn': (1254, 77, 1261, 676), 'en': (1254,
|
|||||||
COMMISSION_START = Button(area={'cn': (1028, 322, 1156, 383), 'en': (1053, 333, 1134, 361), 'jp': (1033, 340, 1153, 376), 'tw': (1027, 326, 1157, 389)}, color={'cn': (229, 175, 113), 'en': (237, 199, 149), 'jp': (231, 184, 121), 'tw': (231, 180, 120)}, button={'cn': (1028, 322, 1156, 383), 'en': (1053, 333, 1134, 361), 'jp': (1033, 340, 1153, 376), 'tw': (1027, 326, 1157, 389)}, file={'cn': './assets/cn/commission/COMMISSION_START.png', 'en': './assets/en/commission/COMMISSION_START.png', 'jp': './assets/jp/commission/COMMISSION_START.png', 'tw': './assets/tw/commission/COMMISSION_START.png'})
|
COMMISSION_START = Button(area={'cn': (1028, 322, 1156, 383), 'en': (1053, 333, 1134, 361), 'jp': (1033, 340, 1153, 376), 'tw': (1027, 326, 1157, 389)}, color={'cn': (229, 175, 113), 'en': (237, 199, 149), 'jp': (231, 184, 121), 'tw': (231, 180, 120)}, button={'cn': (1028, 322, 1156, 383), 'en': (1053, 333, 1134, 361), 'jp': (1033, 340, 1153, 376), 'tw': (1027, 326, 1157, 389)}, file={'cn': './assets/cn/commission/COMMISSION_START.png', 'en': './assets/en/commission/COMMISSION_START.png', 'jp': './assets/jp/commission/COMMISSION_START.png', 'tw': './assets/tw/commission/COMMISSION_START.png'})
|
||||||
COMMISSION_URGENT = Button(area={'cn': (35, 231, 68, 281), 'en': (28, 221, 76, 283), 'jp': (34, 266, 68, 279), 'tw': (35, 229, 69, 280)}, color={'cn': (215, 188, 124), 'en': (169, 138, 95), 'jp': (216, 190, 111), 'tw': (213, 186, 123)}, button={'cn': (35, 231, 68, 281), 'en': (28, 221, 76, 283), 'jp': (34, 266, 68, 279), 'tw': (35, 229, 69, 280)}, file={'cn': './assets/cn/commission/COMMISSION_URGENT.png', 'en': './assets/en/commission/COMMISSION_URGENT.png', 'jp': './assets/jp/commission/COMMISSION_URGENT.png', 'tw': './assets/tw/commission/COMMISSION_URGENT.png'})
|
COMMISSION_URGENT = Button(area={'cn': (35, 231, 68, 281), 'en': (28, 221, 76, 283), 'jp': (34, 266, 68, 279), 'tw': (35, 229, 69, 280)}, color={'cn': (215, 188, 124), 'en': (169, 138, 95), 'jp': (216, 190, 111), 'tw': (213, 186, 123)}, button={'cn': (35, 231, 68, 281), 'en': (28, 221, 76, 283), 'jp': (34, 266, 68, 279), 'tw': (35, 229, 69, 280)}, file={'cn': './assets/cn/commission/COMMISSION_URGENT.png', 'en': './assets/en/commission/COMMISSION_URGENT.png', 'jp': './assets/jp/commission/COMMISSION_URGENT.png', 'tw': './assets/tw/commission/COMMISSION_URGENT.png'})
|
||||||
EXP_INFO_S_REWARD = Button(area={'cn': (498, 140, 557, 154), 'en': (1138, 40, 1266, 145), 'jp': (498, 140, 557, 154), 'tw': (498, 140, 557, 154)}, color={'cn': (233, 241, 127), 'en': (89, 115, 159), 'jp': (233, 241, 127), 'tw': (233, 241, 127)}, button={'cn': (498, 140, 557, 154), 'en': (1138, 40, 1266, 145), 'jp': (498, 140, 557, 154), 'tw': (498, 140, 557, 154)}, file={'cn': './assets/cn/commission/EXP_INFO_S_REWARD.png', 'en': './assets/en/commission/EXP_INFO_S_REWARD.png', 'jp': './assets/jp/commission/EXP_INFO_S_REWARD.png', 'tw': './assets/tw/commission/EXP_INFO_S_REWARD.png'})
|
EXP_INFO_S_REWARD = Button(area={'cn': (498, 140, 557, 154), 'en': (1138, 40, 1266, 145), 'jp': (498, 140, 557, 154), 'tw': (498, 140, 557, 154)}, color={'cn': (233, 241, 127), 'en': (89, 115, 159), 'jp': (233, 241, 127), 'tw': (233, 241, 127)}, button={'cn': (498, 140, 557, 154), 'en': (1138, 40, 1266, 145), 'jp': (498, 140, 557, 154), 'tw': (498, 140, 557, 154)}, file={'cn': './assets/cn/commission/EXP_INFO_S_REWARD.png', 'en': './assets/en/commission/EXP_INFO_S_REWARD.png', 'jp': './assets/jp/commission/EXP_INFO_S_REWARD.png', 'tw': './assets/tw/commission/EXP_INFO_S_REWARD.png'})
|
||||||
REWARD_1 = Button(area={'cn': (383, 285, 503, 297), 'en': (403, 274, 504, 290), 'jp': (432, 273, 476, 294), 'tw': (383, 285, 503, 297)}, color={'cn': (238, 168, 81), 'en': (241, 198, 145), 'jp': (241, 188, 122), 'tw': (238, 168, 81)}, button={'cn': (383, 285, 503, 297), 'en': (392, 262, 515, 303), 'jp': (393, 262, 514, 303), 'tw': (383, 285, 503, 297)}, file={'cn': './assets/cn/commission/REWARD_1.png', 'en': './assets/en/commission/REWARD_1.png', 'jp': './assets/jp/commission/REWARD_1.png', 'tw': './assets/tw/commission/REWARD_1.png'})
|
REWARD_1 = Button(area={'cn': (383, 285, 503, 297), 'en': (403, 274, 504, 290), 'jp': (432, 273, 476, 294), 'tw': (383, 285, 503, 297)}, color={'cn': (238, 168, 81), 'en': (241, 198, 145), 'jp': (241, 188, 122), 'tw': (238, 168, 81)}, button={'cn': (383, 285, 503, 297), 'en': (392, 262, 515, 303), 'jp': (403, 271, 514, 303), 'tw': (383, 285, 503, 297)}, file={'cn': './assets/cn/commission/REWARD_1.png', 'en': './assets/en/commission/REWARD_1.png', 'jp': './assets/jp/commission/REWARD_1.png', 'tw': './assets/tw/commission/REWARD_1.png'})
|
||||||
REWARD_SAVE_CLICK = Button(area={'cn': (415, 184, 496, 214), 'en': (415, 184, 496, 214), 'jp': (415, 184, 496, 214), 'tw': (415, 184, 496, 214)}, color={'cn': (152, 150, 168), 'en': (152, 150, 168), 'jp': (152, 150, 168), 'tw': (152, 150, 168)}, button={'cn': (415, 184, 496, 214), 'en': (415, 184, 496, 214), 'jp': (415, 184, 496, 214), 'tw': (415, 184, 496, 214)}, file={'cn': './assets/cn/commission/REWARD_SAVE_CLICK.png', 'en': './assets/en/commission/REWARD_SAVE_CLICK.png', 'jp': './assets/jp/commission/REWARD_SAVE_CLICK.png', 'tw': './assets/tw/commission/REWARD_SAVE_CLICK.png'})
|
REWARD_SAVE_CLICK = Button(area={'cn': (415, 184, 496, 214), 'en': (415, 184, 496, 214), 'jp': (415, 184, 496, 214), 'tw': (415, 184, 496, 214)}, color={'cn': (152, 150, 168), 'en': (152, 150, 168), 'jp': (152, 150, 168), 'tw': (152, 150, 168)}, button={'cn': (415, 184, 496, 214), 'en': (415, 184, 496, 214), 'jp': (415, 184, 496, 214), 'tw': (415, 184, 496, 214)}, file={'cn': './assets/cn/commission/REWARD_SAVE_CLICK.png', 'en': './assets/en/commission/REWARD_SAVE_CLICK.png', 'jp': './assets/jp/commission/REWARD_SAVE_CLICK.png', 'tw': './assets/tw/commission/REWARD_SAVE_CLICK.png'})
|
||||||
|
|||||||
@@ -1643,27 +1643,30 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220915_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1930,27 +1933,30 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220915_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -2332,27 +2338,30 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220915_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -3485,12 +3494,16 @@
|
|||||||
"war_archives_20220428_cn",
|
"war_archives_20220428_cn",
|
||||||
"war_archives_20220526_cn",
|
"war_archives_20220526_cn",
|
||||||
"war_archives_20220728_cn",
|
"war_archives_20220728_cn",
|
||||||
|
"war_archives_20220818_cn",
|
||||||
"war_archives_20220915_cn",
|
"war_archives_20220915_cn",
|
||||||
"war_archives_20221222_cn",
|
"war_archives_20221222_cn",
|
||||||
"war_archives_20230223_cn",
|
"war_archives_20230223_cn",
|
||||||
|
"war_archives_20230803_cn",
|
||||||
"war_archives_20231026_cn"
|
"war_archives_20231026_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
|
"war_archives_20230803_cn",
|
||||||
|
"war_archives_20220818_cn",
|
||||||
"war_archives_20230223_cn",
|
"war_archives_20230223_cn",
|
||||||
"war_archives_20221222_cn",
|
"war_archives_20221222_cn",
|
||||||
"war_archives_20220915_cn",
|
"war_archives_20220915_cn",
|
||||||
@@ -3537,6 +3550,8 @@
|
|||||||
"war_archives_20181020_en"
|
"war_archives_20181020_en"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
|
"war_archives_20230803_cn",
|
||||||
|
"war_archives_20220818_cn",
|
||||||
"war_archives_20230223_cn",
|
"war_archives_20230223_cn",
|
||||||
"war_archives_20221222_cn",
|
"war_archives_20221222_cn",
|
||||||
"war_archives_20220915_cn",
|
"war_archives_20220915_cn",
|
||||||
@@ -3583,6 +3598,8 @@
|
|||||||
"war_archives_20181020_en"
|
"war_archives_20181020_en"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
|
"war_archives_20230803_cn",
|
||||||
|
"war_archives_20220818_cn",
|
||||||
"war_archives_20230223_cn",
|
"war_archives_20230223_cn",
|
||||||
"war_archives_20221222_cn",
|
"war_archives_20221222_cn",
|
||||||
"war_archives_20220915_cn",
|
"war_archives_20220915_cn",
|
||||||
@@ -3629,6 +3646,8 @@
|
|||||||
"war_archives_20181020_en"
|
"war_archives_20181020_en"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
|
"war_archives_20230803_cn",
|
||||||
|
"war_archives_20220818_cn",
|
||||||
"war_archives_20230223_cn",
|
"war_archives_20230223_cn",
|
||||||
"war_archives_20221222_cn",
|
"war_archives_20221222_cn",
|
||||||
"war_archives_20220915_cn",
|
"war_archives_20220915_cn",
|
||||||
@@ -4064,27 +4083,30 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220915_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -4483,27 +4505,30 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220915_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -4902,27 +4927,30 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220915_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -5321,27 +5349,30 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220915_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -5730,27 +5761,30 @@
|
|||||||
"value": "campaign_main",
|
"value": "campaign_main",
|
||||||
"option": [
|
"option": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_cn": [
|
"option_cn": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_en": [
|
"option_en": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_jp": [
|
"option_jp": [
|
||||||
|
"event_20250424_cn",
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_tw": [
|
"option_tw": [
|
||||||
"event_20220915_cn"
|
"event_20260417_cn"
|
||||||
],
|
],
|
||||||
"option_bold": [
|
"option_bold": [
|
||||||
"event_20201126_cn",
|
"event_20201126_cn",
|
||||||
"event_20220915_cn",
|
"event_20250424_cn",
|
||||||
"event_20260417_cn"
|
"event_20260417_cn"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -760,7 +760,7 @@
|
|||||||
"event_20241121_cn": "Dangerous Inventions Incoming",
|
"event_20241121_cn": "Dangerous Inventions Incoming",
|
||||||
"event_20241219_cn": "Substellar Crepuscule",
|
"event_20241219_cn": "Substellar Crepuscule",
|
||||||
"event_20250227_cn": "Paradiso of Shackled Light",
|
"event_20250227_cn": "Paradiso of Shackled Light",
|
||||||
"event_20250424_cn": "Toward Tulipa’s Seas",
|
"event_20250424_cn": "Toward Tulipa’s Seas Rerun",
|
||||||
"event_20250520_cn": "A Rose on the High Tower",
|
"event_20250520_cn": "A Rose on the High Tower",
|
||||||
"event_20250724_cn": "The Alchemist and the Tower of Horizons",
|
"event_20250724_cn": "The Alchemist and the Tower of Horizons",
|
||||||
"event_20250814_cn": "Secrets of the Abyss",
|
"event_20250814_cn": "Secrets of the Abyss",
|
||||||
@@ -821,9 +821,11 @@
|
|||||||
"war_archives_20220428_cn": "archives Rondo at Rainbows End",
|
"war_archives_20220428_cn": "archives Rondo at Rainbows End",
|
||||||
"war_archives_20220526_cn": "archives Pledge of the Radiant Court",
|
"war_archives_20220526_cn": "archives Pledge of the Radiant Court",
|
||||||
"war_archives_20220728_cn": "archives Aquilifers Ballade",
|
"war_archives_20220728_cn": "archives Aquilifers Ballade",
|
||||||
|
"war_archives_20220818_cn": "archives Operation Convergence",
|
||||||
"war_archives_20220915_cn": "archives Violet Tempest Blooming Lycoris",
|
"war_archives_20220915_cn": "archives Violet Tempest Blooming Lycoris",
|
||||||
"war_archives_20221222_cn": "archives Parallel Superimposition",
|
"war_archives_20221222_cn": "archives Parallel Superimposition",
|
||||||
"war_archives_20230223_cn": "archives Revelations of Dust",
|
"war_archives_20230223_cn": "archives Revelations of Dust",
|
||||||
|
"war_archives_20230803_cn": "archives Anthem of Remembrance",
|
||||||
"war_archives_20231026_cn": "archives Tempesta and the Fountain of Youth"
|
"war_archives_20231026_cn": "archives Tempesta and the Fountain of Youth"
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
|
|||||||
@@ -760,7 +760,7 @@
|
|||||||
"event_20241121_cn": "危険発明接近中",
|
"event_20241121_cn": "危険発明接近中",
|
||||||
"event_20241219_cn": "星降る夕影の残光",
|
"event_20241219_cn": "星降る夕影の残光",
|
||||||
"event_20250227_cn": "籠檻に囚われし神光",
|
"event_20250227_cn": "籠檻に囚われし神光",
|
||||||
"event_20250424_cn": "チュリッパの海へ",
|
"event_20250424_cn": "チュリッパの海へ(復刻)",
|
||||||
"event_20250520_cn": "高い塔の薔薇",
|
"event_20250520_cn": "高い塔の薔薇",
|
||||||
"event_20250724_cn": "錬金術士と天空邂逅の塔",
|
"event_20250724_cn": "錬金術士と天空邂逅の塔",
|
||||||
"event_20250814_cn": "淵層界の秘密",
|
"event_20250814_cn": "淵層界の秘密",
|
||||||
@@ -821,9 +821,11 @@
|
|||||||
"war_archives_20220428_cn": "檔案 吟ずる瑠璃の楽章",
|
"war_archives_20220428_cn": "檔案 吟ずる瑠璃の楽章",
|
||||||
"war_archives_20220526_cn": "檔案 诚閃の剣 搖光の城",
|
"war_archives_20220526_cn": "檔案 诚閃の剣 搖光の城",
|
||||||
"war_archives_20220728_cn": "檔案 鋼鷲の冒険譚",
|
"war_archives_20220728_cn": "檔案 鋼鷲の冒険譚",
|
||||||
|
"war_archives_20220818_cn": "檔案 結像点作戦",
|
||||||
"war_archives_20220915_cn": "檔案 赫の涙月 菫の暁風",
|
"war_archives_20220915_cn": "檔案 赫の涙月 菫の暁風",
|
||||||
"war_archives_20221222_cn": "檔案 積重なる事象の幻界",
|
"war_archives_20221222_cn": "檔案 積重なる事象の幻界",
|
||||||
"war_archives_20230223_cn": "檔案 黙示の遺構",
|
"war_archives_20230223_cn": "檔案 黙示の遺構",
|
||||||
|
"war_archives_20230803_cn": "檔案 燃ゆる聖都の回想曲",
|
||||||
"war_archives_20231026_cn": "檔案 テンペスタと若返りの泉"
|
"war_archives_20231026_cn": "檔案 テンペスタと若返りの泉"
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
|
|||||||
@@ -551,6 +551,12 @@
|
|||||||
"default": "默认 (Cloudflare)",
|
"default": "默认 (Cloudflare)",
|
||||||
"cn_gz_reverse_proxy": "国内反向代理 (广州)"
|
"cn_gz_reverse_proxy": "国内反向代理 (广州)"
|
||||||
},
|
},
|
||||||
|
"DailyRecord": {
|
||||||
|
"name": "每日挑战截图",
|
||||||
|
"help": "",
|
||||||
|
"do_not": "无操作",
|
||||||
|
"save": "保存"
|
||||||
|
},
|
||||||
"ResearchRecord": {
|
"ResearchRecord": {
|
||||||
"name": "科研截图",
|
"name": "科研截图",
|
||||||
"help": "",
|
"help": "",
|
||||||
@@ -760,7 +766,7 @@
|
|||||||
"event_20241121_cn": "危险发明迫近中",
|
"event_20241121_cn": "危险发明迫近中",
|
||||||
"event_20241219_cn": "星光下的余晖",
|
"event_20241219_cn": "星光下的余晖",
|
||||||
"event_20250227_cn": "樊笼内的神光",
|
"event_20250227_cn": "樊笼内的神光",
|
||||||
"event_20250424_cn": "扬起郁金之旗",
|
"event_20250424_cn": "复刻扬起郁金之旗",
|
||||||
"event_20250520_cn": "高塔上的蔷薇",
|
"event_20250520_cn": "高塔上的蔷薇",
|
||||||
"event_20250724_cn": "优米雅的炼金工房",
|
"event_20250724_cn": "优米雅的炼金工房",
|
||||||
"event_20250814_cn": "奇渊下的秘密",
|
"event_20250814_cn": "奇渊下的秘密",
|
||||||
@@ -821,9 +827,11 @@
|
|||||||
"war_archives_20220428_cn": "档案 虹彩的终幕曲",
|
"war_archives_20220428_cn": "档案 虹彩的终幕曲",
|
||||||
"war_archives_20220526_cn": "档案 泠誓光庭",
|
"war_archives_20220526_cn": "档案 泠誓光庭",
|
||||||
"war_archives_20220728_cn": "档案 雄鹰的叙事歌",
|
"war_archives_20220728_cn": "档案 雄鹰的叙事歌",
|
||||||
|
"war_archives_20220818_cn": "档案 远汇点作战",
|
||||||
"war_archives_20220915_cn": "档案 紫绛槿岚",
|
"war_archives_20220915_cn": "档案 紫绛槿岚",
|
||||||
"war_archives_20221222_cn": "档案 定向折叠",
|
"war_archives_20221222_cn": "档案 定向折叠",
|
||||||
"war_archives_20230223_cn": "档案 湮烬尘墟",
|
"war_archives_20230223_cn": "档案 湮烬尘墟",
|
||||||
|
"war_archives_20230803_cn": "档案 奏响鸢尾之歌",
|
||||||
"war_archives_20231026_cn": "档案 飓风与青春之泉"
|
"war_archives_20231026_cn": "档案 飓风与青春之泉"
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
|
|||||||
@@ -769,7 +769,7 @@
|
|||||||
"event_20251218_cn": "響徹於天穹之音",
|
"event_20251218_cn": "響徹於天穹之音",
|
||||||
"event_20260226_cn": "春滿客棧Online",
|
"event_20260226_cn": "春滿客棧Online",
|
||||||
"event_20260326_cn": "漫遊者招募計劃",
|
"event_20260326_cn": "漫遊者招募計劃",
|
||||||
"event_20260417_cn": "Vacation Lane – Beachside Brilliance",
|
"event_20260417_cn": "假日航線閃耀海濱",
|
||||||
"raid_20200624": "特別演習埃塞克斯級(復刻)",
|
"raid_20200624": "特別演習埃塞克斯級(復刻)",
|
||||||
"raid_20210708": "復刻穿越彼方的水線",
|
"raid_20210708": "復刻穿越彼方的水線",
|
||||||
"raid_20220127": "演習神秘事件調查",
|
"raid_20220127": "演習神秘事件調查",
|
||||||
@@ -821,9 +821,11 @@
|
|||||||
"war_archives_20220428_cn": "檔案 虹彩的終幕曲",
|
"war_archives_20220428_cn": "檔案 虹彩的終幕曲",
|
||||||
"war_archives_20220526_cn": "檔案 泠誓光庭",
|
"war_archives_20220526_cn": "檔案 泠誓光庭",
|
||||||
"war_archives_20220728_cn": "檔案 雄鷹的敘事歌",
|
"war_archives_20220728_cn": "檔案 雄鷹的敘事歌",
|
||||||
|
"war_archives_20220818_cn": "檔案 遠匯點作戰",
|
||||||
"war_archives_20220915_cn": "檔案 紫絳槿嵐",
|
"war_archives_20220915_cn": "檔案 紫絳槿嵐",
|
||||||
"war_archives_20221222_cn": "檔案 定向折疊",
|
"war_archives_20221222_cn": "檔案 定向折疊",
|
||||||
"war_archives_20230223_cn": "檔案 湮燼塵墟",
|
"war_archives_20230223_cn": "檔案 湮燼塵墟",
|
||||||
|
"war_archives_20230803_cn": "檔案 奏響鳶尾之歌",
|
||||||
"war_archives_20231026_cn": "檔案 飓風與青春之泉"
|
"war_archives_20231026_cn": "檔案 飓風與青春之泉"
|
||||||
},
|
},
|
||||||
"Mode": {
|
"Mode": {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ ADD_NEW_STUDENT = Button(area={'cn': (417, 375, 438, 398), 'en': (417, 375, 438,
|
|||||||
BOOK_EMPTY_POPUP = Button(area={'cn': (880, 180, 908, 209), 'en': (880, 180, 908, 209), 'jp': (880, 180, 908, 209), 'tw': (880, 180, 908, 209)}, color={'cn': (211, 109, 105), 'en': (211, 109, 105), 'jp': (211, 109, 105), 'tw': (211, 109, 105)}, button={'cn': (880, 180, 908, 209), 'en': (880, 180, 908, 209), 'jp': (880, 180, 908, 209), 'tw': (880, 180, 908, 209)}, file={'cn': './assets/cn/tactical/BOOK_EMPTY_POPUP.png', 'en': './assets/en/tactical/BOOK_EMPTY_POPUP.png', 'jp': './assets/jp/tactical/BOOK_EMPTY_POPUP.png', 'tw': './assets/tw/tactical/BOOK_EMPTY_POPUP.png'})
|
BOOK_EMPTY_POPUP = Button(area={'cn': (880, 180, 908, 209), 'en': (880, 180, 908, 209), 'jp': (880, 180, 908, 209), 'tw': (880, 180, 908, 209)}, color={'cn': (211, 109, 105), 'en': (211, 109, 105), 'jp': (211, 109, 105), 'tw': (211, 109, 105)}, button={'cn': (880, 180, 908, 209), 'en': (880, 180, 908, 209), 'jp': (880, 180, 908, 209), 'tw': (880, 180, 908, 209)}, file={'cn': './assets/cn/tactical/BOOK_EMPTY_POPUP.png', 'en': './assets/en/tactical/BOOK_EMPTY_POPUP.png', 'jp': './assets/jp/tactical/BOOK_EMPTY_POPUP.png', 'tw': './assets/tw/tactical/BOOK_EMPTY_POPUP.png'})
|
||||||
OCR_SKILL_EXP = Button(area={'cn': (771, 191, 951, 209), 'en': (771, 191, 951, 209), 'jp': (728, 189, 950, 211), 'tw': (771, 191, 951, 209)}, color={'cn': (72, 82, 83), 'en': (72, 82, 83), 'jp': (69, 78, 82), 'tw': (72, 82, 83)}, button={'cn': (771, 191, 951, 209), 'en': (771, 191, 951, 209), 'jp': (728, 189, 950, 211), 'tw': (771, 191, 951, 209)}, file={'cn': './assets/cn/tactical/OCR_SKILL_EXP.png', 'en': './assets/en/tactical/OCR_SKILL_EXP.png', 'jp': './assets/jp/tactical/OCR_SKILL_EXP.png', 'tw': './assets/tw/tactical/OCR_SKILL_EXP.png'})
|
OCR_SKILL_EXP = Button(area={'cn': (771, 191, 951, 209), 'en': (771, 191, 951, 209), 'jp': (728, 189, 950, 211), 'tw': (771, 191, 951, 209)}, color={'cn': (72, 82, 83), 'en': (72, 82, 83), 'jp': (69, 78, 82), 'tw': (72, 82, 83)}, button={'cn': (771, 191, 951, 209), 'en': (771, 191, 951, 209), 'jp': (728, 189, 950, 211), 'tw': (771, 191, 951, 209)}, file={'cn': './assets/cn/tactical/OCR_SKILL_EXP.png', 'en': './assets/en/tactical/OCR_SKILL_EXP.png', 'jp': './assets/jp/tactical/OCR_SKILL_EXP.png', 'tw': './assets/tw/tactical/OCR_SKILL_EXP.png'})
|
||||||
RAPID_TRAINING = Button(area={'cn': (518, 566, 583, 582), 'en': (518, 568, 585, 580), 'jp': (518, 566, 584, 583), 'tw': (518, 566, 583, 582)}, color={'cn': (233, 212, 171), 'en': (229, 205, 156), 'jp': (232, 209, 165), 'tw': (233, 212, 171)}, button={'cn': (518, 566, 583, 582), 'en': (518, 568, 585, 580), 'jp': (518, 566, 584, 583), 'tw': (518, 566, 583, 582)}, file={'cn': './assets/cn/tactical/RAPID_TRAINING.png', 'en': './assets/en/tactical/RAPID_TRAINING.png', 'jp': './assets/jp/tactical/RAPID_TRAINING.png', 'tw': './assets/cn/tactical/RAPID_TRAINING.png'})
|
RAPID_TRAINING = Button(area={'cn': (518, 566, 583, 582), 'en': (518, 568, 585, 580), 'jp': (518, 566, 584, 583), 'tw': (518, 566, 583, 582)}, color={'cn': (233, 212, 171), 'en': (229, 205, 156), 'jp': (232, 209, 165), 'tw': (233, 212, 171)}, button={'cn': (518, 566, 583, 582), 'en': (518, 568, 585, 580), 'jp': (518, 566, 584, 583), 'tw': (518, 566, 583, 582)}, file={'cn': './assets/cn/tactical/RAPID_TRAINING.png', 'en': './assets/en/tactical/RAPID_TRAINING.png', 'jp': './assets/jp/tactical/RAPID_TRAINING.png', 'tw': './assets/cn/tactical/RAPID_TRAINING.png'})
|
||||||
REWARD_2 = Button(area={'cn': (418, 413, 468, 434), 'en': (403, 416, 504, 432), 'jp': (432, 415, 476, 436), 'tw': (418, 413, 468, 434)}, color={'cn': (240, 191, 120), 'en': (240, 201, 145), 'jp': (240, 191, 121), 'tw': (240, 191, 120)}, button={'cn': (383, 404, 503, 444), 'en': (392, 404, 515, 445), 'jp': (399, 415, 520, 450), 'tw': (383, 404, 503, 444)}, file={'cn': './assets/cn/tactical/REWARD_2.png', 'en': './assets/en/tactical/REWARD_2.png', 'jp': './assets/jp/tactical/REWARD_2.png', 'tw': './assets/tw/tactical/REWARD_2.png'})
|
REWARD_2 = Button(area={'cn': (418, 413, 468, 434), 'en': (403, 416, 504, 432), 'jp': (432, 415, 476, 436), 'tw': (418, 413, 468, 434)}, color={'cn': (240, 191, 120), 'en': (240, 201, 145), 'jp': (240, 191, 121), 'tw': (240, 191, 120)}, button={'cn': (383, 404, 503, 444), 'en': (392, 404, 515, 445), 'jp': (403, 415, 520, 450), 'tw': (383, 404, 503, 444)}, file={'cn': './assets/cn/tactical/REWARD_2.png', 'en': './assets/en/tactical/REWARD_2.png', 'jp': './assets/jp/tactical/REWARD_2.png', 'tw': './assets/tw/tactical/REWARD_2.png'})
|
||||||
SKILL_CONFIRM = Button(area={'cn': (575, 563, 705, 594), 'en': (600, 558, 681, 581), 'jp': (576, 563, 705, 594), 'tw': (577, 563, 704, 593)}, color={'cn': (147, 177, 216), 'en': (167, 191, 223), 'jp': (136, 170, 213), 'tw': (161, 187, 220)}, button={'cn': (575, 563, 705, 594), 'en': (600, 558, 681, 581), 'jp': (576, 563, 705, 594), 'tw': (577, 563, 704, 593)}, file={'cn': './assets/cn/tactical/SKILL_CONFIRM.png', 'en': './assets/en/tactical/SKILL_CONFIRM.png', 'jp': './assets/jp/tactical/SKILL_CONFIRM.png', 'tw': './assets/tw/tactical/SKILL_CONFIRM.png'})
|
SKILL_CONFIRM = Button(area={'cn': (575, 563, 705, 594), 'en': (600, 558, 681, 581), 'jp': (576, 563, 705, 594), 'tw': (577, 563, 704, 593)}, color={'cn': (147, 177, 216), 'en': (167, 191, 223), 'jp': (136, 170, 213), 'tw': (161, 187, 220)}, button={'cn': (575, 563, 705, 594), 'en': (600, 558, 681, 581), 'jp': (576, 563, 705, 594), 'tw': (577, 563, 704, 593)}, file={'cn': './assets/cn/tactical/SKILL_CONFIRM.png', 'en': './assets/en/tactical/SKILL_CONFIRM.png', 'jp': './assets/jp/tactical/SKILL_CONFIRM.png', 'tw': './assets/tw/tactical/SKILL_CONFIRM.png'})
|
||||||
TACTICAL_CLASS_CANCEL = Button(area={'cn': (818, 591, 990, 647), 'en': (836, 591, 973, 639), 'jp': (840, 606, 969, 637), 'tw': (819, 590, 989, 647)}, color={'cn': (153, 154, 154), 'en': (163, 164, 164), 'jp': (175, 176, 176), 'tw': (152, 153, 154)}, button={'cn': (818, 591, 990, 647), 'en': (836, 591, 973, 639), 'jp': (840, 606, 969, 637), 'tw': (819, 590, 989, 647)}, file={'cn': './assets/cn/tactical/TACTICAL_CLASS_CANCEL.png', 'en': './assets/en/tactical/TACTICAL_CLASS_CANCEL.png', 'jp': './assets/jp/tactical/TACTICAL_CLASS_CANCEL.png', 'tw': './assets/tw/tactical/TACTICAL_CLASS_CANCEL.png'})
|
TACTICAL_CLASS_CANCEL = Button(area={'cn': (818, 591, 990, 647), 'en': (836, 591, 973, 639), 'jp': (840, 606, 969, 637), 'tw': (819, 590, 989, 647)}, color={'cn': (153, 154, 154), 'en': (163, 164, 164), 'jp': (175, 176, 176), 'tw': (152, 153, 154)}, button={'cn': (818, 591, 990, 647), 'en': (836, 591, 973, 639), 'jp': (840, 606, 969, 637), 'tw': (819, 590, 989, 647)}, file={'cn': './assets/cn/tactical/TACTICAL_CLASS_CANCEL.png', 'en': './assets/en/tactical/TACTICAL_CLASS_CANCEL.png', 'jp': './assets/jp/tactical/TACTICAL_CLASS_CANCEL.png', 'tw': './assets/tw/tactical/TACTICAL_CLASS_CANCEL.png'})
|
||||||
TACTICAL_CLASS_START = Button(area={'cn': (1024, 590, 1197, 648), 'en': (1045, 592, 1176, 640), 'jp': (1046, 606, 1176, 637), 'tw': (1026, 590, 1196, 647)}, color={'cn': (96, 139, 194), 'en': (95, 137, 190), 'jp': (132, 165, 208), 'tw': (101, 143, 196)}, button={'cn': (1024, 590, 1197, 648), 'en': (1045, 592, 1176, 640), 'jp': (1046, 606, 1176, 637), 'tw': (1026, 590, 1196, 647)}, file={'cn': './assets/cn/tactical/TACTICAL_CLASS_START.png', 'en': './assets/en/tactical/TACTICAL_CLASS_START.png', 'jp': './assets/jp/tactical/TACTICAL_CLASS_START.png', 'tw': './assets/tw/tactical/TACTICAL_CLASS_START.png'})
|
TACTICAL_CLASS_START = Button(area={'cn': (1024, 590, 1197, 648), 'en': (1045, 592, 1176, 640), 'jp': (1046, 606, 1176, 637), 'tw': (1026, 590, 1196, 647)}, color={'cn': (96, 139, 194), 'en': (95, 137, 190), 'jp': (132, 165, 208), 'tw': (101, 143, 196)}, button={'cn': (1024, 590, 1197, 648), 'en': (1045, 592, 1176, 640), 'jp': (1046, 606, 1176, 637), 'tw': (1026, 590, 1196, 647)}, file={'cn': './assets/cn/tactical/TACTICAL_CLASS_START.png', 'en': './assets/en/tactical/TACTICAL_CLASS_START.png', 'jp': './assets/jp/tactical/TACTICAL_CLASS_START.png', 'tw': './assets/tw/tactical/TACTICAL_CLASS_START.png'})
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ from module.base.template import Template
|
|||||||
|
|
||||||
OCR_DATA_KEY_CAMPAIGN = Button(area={'cn': (1188, 107, 1272, 131), 'en': (1188, 107, 1272, 131), 'jp': (1188, 107, 1272, 131), 'tw': (1188, 107, 1272, 131)}, color={'cn': (104, 101, 107), 'en': (104, 101, 107), 'jp': (104, 101, 107), 'tw': (104, 101, 107)}, button={'cn': (1188, 107, 1272, 131), 'en': (1188, 107, 1272, 131), 'jp': (1188, 107, 1272, 131), 'tw': (1188, 107, 1272, 131)}, file={'cn': './assets/cn/war_archives/OCR_DATA_KEY_CAMPAIGN.png', 'en': './assets/en/war_archives/OCR_DATA_KEY_CAMPAIGN.png', 'jp': './assets/jp/war_archives/OCR_DATA_KEY_CAMPAIGN.png', 'tw': './assets/tw/war_archives/OCR_DATA_KEY_CAMPAIGN.png'})
|
OCR_DATA_KEY_CAMPAIGN = Button(area={'cn': (1188, 107, 1272, 131), 'en': (1188, 107, 1272, 131), 'jp': (1188, 107, 1272, 131), 'tw': (1188, 107, 1272, 131)}, color={'cn': (104, 101, 107), 'en': (104, 101, 107), 'jp': (104, 101, 107), 'tw': (104, 101, 107)}, button={'cn': (1188, 107, 1272, 131), 'en': (1188, 107, 1272, 131), 'jp': (1188, 107, 1272, 131), 'tw': (1188, 107, 1272, 131)}, file={'cn': './assets/cn/war_archives/OCR_DATA_KEY_CAMPAIGN.png', 'en': './assets/en/war_archives/OCR_DATA_KEY_CAMPAIGN.png', 'jp': './assets/jp/war_archives/OCR_DATA_KEY_CAMPAIGN.png', 'tw': './assets/tw/war_archives/OCR_DATA_KEY_CAMPAIGN.png'})
|
||||||
TEMPLATE_ABYSSAL_REFRAIN = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_ABYSSAL_REFRAIN.png', 'en': './assets/cn/war_archives/TEMPLATE_ABYSSAL_REFRAIN.png', 'jp': './assets/cn/war_archives/TEMPLATE_ABYSSAL_REFRAIN.png', 'tw': './assets/cn/war_archives/TEMPLATE_ABYSSAL_REFRAIN.png'})
|
TEMPLATE_ABYSSAL_REFRAIN = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_ABYSSAL_REFRAIN.png', 'en': './assets/cn/war_archives/TEMPLATE_ABYSSAL_REFRAIN.png', 'jp': './assets/cn/war_archives/TEMPLATE_ABYSSAL_REFRAIN.png', 'tw': './assets/cn/war_archives/TEMPLATE_ABYSSAL_REFRAIN.png'})
|
||||||
|
TEMPLATE_ANTHEM_OF_REMEMBRANCE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_ANTHEM_OF_REMEMBRANCE.png', 'en': './assets/cn/war_archives/TEMPLATE_ANTHEM_OF_REMEMBRANCE.png', 'jp': './assets/cn/war_archives/TEMPLATE_ANTHEM_OF_REMEMBRANCE.png', 'tw': './assets/cn/war_archives/TEMPLATE_ANTHEM_OF_REMEMBRANCE.png'})
|
||||||
TEMPLATE_AQUILIFERS_BALLADE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_AQUILIFERS_BALLADE.png', 'en': './assets/cn/war_archives/TEMPLATE_AQUILIFERS_BALLADE.png', 'jp': './assets/cn/war_archives/TEMPLATE_AQUILIFERS_BALLADE.png', 'tw': './assets/cn/war_archives/TEMPLATE_AQUILIFERS_BALLADE.png'})
|
TEMPLATE_AQUILIFERS_BALLADE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_AQUILIFERS_BALLADE.png', 'en': './assets/cn/war_archives/TEMPLATE_AQUILIFERS_BALLADE.png', 'jp': './assets/cn/war_archives/TEMPLATE_AQUILIFERS_BALLADE.png', 'tw': './assets/cn/war_archives/TEMPLATE_AQUILIFERS_BALLADE.png'})
|
||||||
TEMPLATE_ASHEN_SIMULACRUM = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png', 'en': './assets/en/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png', 'jp': './assets/cn/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png', 'tw': './assets/cn/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png'})
|
TEMPLATE_ASHEN_SIMULACRUM = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png', 'en': './assets/en/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png', 'jp': './assets/cn/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png', 'tw': './assets/cn/war_archives/TEMPLATE_ASHEN_SIMULACRUM.png'})
|
||||||
TEMPLATE_AURORA_NOCTIS = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_AURORA_NOCTIS.png', 'en': './assets/en/war_archives/TEMPLATE_AURORA_NOCTIS.png', 'jp': './assets/cn/war_archives/TEMPLATE_AURORA_NOCTIS.png', 'tw': './assets/cn/war_archives/TEMPLATE_AURORA_NOCTIS.png'})
|
TEMPLATE_AURORA_NOCTIS = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_AURORA_NOCTIS.png', 'en': './assets/en/war_archives/TEMPLATE_AURORA_NOCTIS.png', 'jp': './assets/cn/war_archives/TEMPLATE_AURORA_NOCTIS.png', 'tw': './assets/cn/war_archives/TEMPLATE_AURORA_NOCTIS.png'})
|
||||||
@@ -27,6 +28,7 @@ TEMPLATE_MICROLAYER_MEDLEY = Template(file={'cn': './assets/cn/war_archives/TEMP
|
|||||||
TEMPLATE_MIRROR_INVOLUTION = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png', 'en': './assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png', 'jp': './assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png', 'tw': './assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png'})
|
TEMPLATE_MIRROR_INVOLUTION = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png', 'en': './assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png', 'jp': './assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png', 'tw': './assets/cn/war_archives/TEMPLATE_MIRROR_INVOLUTION.png'})
|
||||||
TEMPLATE_MOONLIT_OVERTURE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_MOONLIT_OVERTURE.png', 'en': './assets/cn/war_archives/TEMPLATE_MOONLIT_OVERTURE.png', 'jp': './assets/cn/war_archives/TEMPLATE_MOONLIT_OVERTURE.png', 'tw': './assets/cn/war_archives/TEMPLATE_MOONLIT_OVERTURE.png'})
|
TEMPLATE_MOONLIT_OVERTURE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_MOONLIT_OVERTURE.png', 'en': './assets/cn/war_archives/TEMPLATE_MOONLIT_OVERTURE.png', 'jp': './assets/cn/war_archives/TEMPLATE_MOONLIT_OVERTURE.png', 'tw': './assets/cn/war_archives/TEMPLATE_MOONLIT_OVERTURE.png'})
|
||||||
TEMPLATE_NORTHERN_OVERTURE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_NORTHERN_OVERTURE.png', 'en': './assets/en/war_archives/TEMPLATE_NORTHERN_OVERTURE.png', 'jp': './assets/cn/war_archives/TEMPLATE_NORTHERN_OVERTURE.png', 'tw': './assets/cn/war_archives/TEMPLATE_NORTHERN_OVERTURE.png'})
|
TEMPLATE_NORTHERN_OVERTURE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_NORTHERN_OVERTURE.png', 'en': './assets/en/war_archives/TEMPLATE_NORTHERN_OVERTURE.png', 'jp': './assets/cn/war_archives/TEMPLATE_NORTHERN_OVERTURE.png', 'tw': './assets/cn/war_archives/TEMPLATE_NORTHERN_OVERTURE.png'})
|
||||||
|
TEMPLATE_OPERATION_CONVERGENCE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_OPERATION_CONVERGENCE.png', 'en': './assets/cn/war_archives/TEMPLATE_OPERATION_CONVERGENCE.png', 'jp': './assets/cn/war_archives/TEMPLATE_OPERATION_CONVERGENCE.png', 'tw': './assets/cn/war_archives/TEMPLATE_OPERATION_CONVERGENCE.png'})
|
||||||
TEMPLATE_PARALLEL_SUPERIMPOSITION = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_PARALLEL_SUPERIMPOSITION.png', 'en': './assets/cn/war_archives/TEMPLATE_PARALLEL_SUPERIMPOSITION.png', 'jp': './assets/cn/war_archives/TEMPLATE_PARALLEL_SUPERIMPOSITION.png', 'tw': './assets/cn/war_archives/TEMPLATE_PARALLEL_SUPERIMPOSITION.png'})
|
TEMPLATE_PARALLEL_SUPERIMPOSITION = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_PARALLEL_SUPERIMPOSITION.png', 'en': './assets/cn/war_archives/TEMPLATE_PARALLEL_SUPERIMPOSITION.png', 'jp': './assets/cn/war_archives/TEMPLATE_PARALLEL_SUPERIMPOSITION.png', 'tw': './assets/cn/war_archives/TEMPLATE_PARALLEL_SUPERIMPOSITION.png'})
|
||||||
TEMPLATE_PLEDGE_OF_THE_RADIANT_COURT = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_PLEDGE_OF_THE_RADIANT_COURT.png', 'en': './assets/cn/war_archives/TEMPLATE_PLEDGE_OF_THE_RADIANT_COURT.png', 'jp': './assets/cn/war_archives/TEMPLATE_PLEDGE_OF_THE_RADIANT_COURT.png', 'tw': './assets/cn/war_archives/TEMPLATE_PLEDGE_OF_THE_RADIANT_COURT.png'})
|
TEMPLATE_PLEDGE_OF_THE_RADIANT_COURT = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_PLEDGE_OF_THE_RADIANT_COURT.png', 'en': './assets/cn/war_archives/TEMPLATE_PLEDGE_OF_THE_RADIANT_COURT.png', 'jp': './assets/cn/war_archives/TEMPLATE_PLEDGE_OF_THE_RADIANT_COURT.png', 'tw': './assets/cn/war_archives/TEMPLATE_PLEDGE_OF_THE_RADIANT_COURT.png'})
|
||||||
TEMPLATE_PRELUDE_UNDER_THE_MOON = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png', 'en': './assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png', 'jp': './assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png', 'tw': './assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png'})
|
TEMPLATE_PRELUDE_UNDER_THE_MOON = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png', 'en': './assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png', 'jp': './assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png', 'tw': './assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png'})
|
||||||
|
|||||||
@@ -45,4 +45,6 @@ dic_archives_template = {
|
|||||||
'war_archives_20220915_cn': TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS,
|
'war_archives_20220915_cn': TEMPLATE_VIOLET_TEMPEST_BLOOMING_LYCORIS,
|
||||||
'war_archives_20221222_cn': TEMPLATE_PARALLEL_SUPERIMPOSITION,
|
'war_archives_20221222_cn': TEMPLATE_PARALLEL_SUPERIMPOSITION,
|
||||||
'war_archives_20230223_cn': TEMPLATE_REVELATIONS_OF_DUST,
|
'war_archives_20230223_cn': TEMPLATE_REVELATIONS_OF_DUST,
|
||||||
|
'war_archives_20220818_cn': TEMPLATE_OPERATION_CONVERGENCE,
|
||||||
|
'war_archives_20230803_cn': TEMPLATE_ANTHEM_OF_REMEMBRANCE,
|
||||||
}
|
}
|
||||||
|
|||||||