From bfbdbcc77418a6e30d0b0f5680279749ab90a278 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 17 Apr 2025 21:38:29 +0800 Subject: [PATCH 1/6] Fix: [ALAS] handle_app_login shouldn't handle startup retry, scheduler should --- module/handler/login.py | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/module/handler/login.py b/module/handler/login.py index bce990522..a31b9a375 100644 --- a/module/handler/login.py +++ b/module/handler/login.py @@ -9,8 +9,6 @@ from uiautomator2.xpath import XPath, XPathSelector import module.config.server as server from module.base.timer import Timer from module.base.utils import color_similarity_2d, crop, random_rectangle_point -from module.exception import (GameStuckError, GameTooManyClickError, - RequestHumanTakeover) from module.handler.assets import * from module.logger import logger from module.map.assets import * @@ -25,12 +23,19 @@ class LoginHandler(UI): Pages: in: Any page out: page_main + + Raises: + GameStuckError: + GameTooManyClickError: + GameNotRunningError: """ logger.hr('App login') confirm_timer = Timer(1.5, count=4).start() orientation_timer = Timer(5) login_success = False + self.device.stuck_record_clear() + self.device.click_record_clear() while 1: # Watch device rotation @@ -124,23 +129,16 @@ class LoginHandler(UI): bool: If login success Raises: - RequestHumanTakeover: If login failed more than 3 + GameStuckError: + GameTooManyClickError: + GameNotRunningError: """ - for _ in range(3): - self.device.stuck_record_clear() - self.device.click_record_clear() - try: - self._handle_app_login() - return True - except (GameTooManyClickError, GameStuckError) as e: - logger.warning(e) - self.device.app_stop() - self.device.app_start() - continue - - logger.critical('Login failed more than 3') - logger.critical('Azur Lane server may be under maintenance, or you may lost network connection') - raise RequestHumanTakeover + logger.info('handle_app_login') + self.device.screenshot_interval_set(1.0) + try: + self._handle_app_login() + finally: + self.device.screenshot_interval_set() def app_stop(self): logger.hr('App stop') From 8ebda6268cfa28aea138a3a89131ec79cc790b9c Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 17 Apr 2025 21:44:47 +0800 Subject: [PATCH 2/6] Fix: [ALAS] FileNotFoundError in atomic_rmtree --- deploy/atomic.py | 44 ++++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/deploy/atomic.py b/deploy/atomic.py index db70dd795..217137cd0 100644 --- a/deploy/atomic.py +++ b/deploy/atomic.py @@ -68,12 +68,13 @@ def windows_attempt_delay(attempt: int) -> float: return 2 ** attempt * WINDOWS_RETRY_DELAY -def replace_tmp(temp: str, file: str): +def replace_tmp(tmp: str, file: str): """ Replace temp file to file Raises: PermissionError: (Windows only) If another process is still reading the file and all retries failed + FileNotFoundError: If tmp file gets deleted unexpectedly """ if IS_WINDOWS: # PermissionError on Windows if another process is reading @@ -81,7 +82,7 @@ def replace_tmp(temp: str, file: str): for attempt in range(WINDOWS_MAX_ATTEMPT): try: # Atomic operation - os.replace(temp, file) + os.replace(tmp, file) # success return except PermissionError as e: @@ -89,6 +90,9 @@ def replace_tmp(temp: str, file: str): delay = windows_attempt_delay(attempt) time.sleep(delay) continue + except FileNotFoundError: + # tmp file gets deleted unexpectedly + raise except Exception as e: last_error = e break @@ -96,15 +100,20 @@ def replace_tmp(temp: str, file: str): # Linux and Mac allow existing reading try: # Atomic operation - os.replace(temp, file) + os.replace(tmp, file) # success return + except FileNotFoundError: + raise except Exception as e: last_error = e - # Clean up temp file on failure + # Clean up tmp file on failure try: - os.unlink(temp) + os.unlink(tmp) + except FileNotFoundError: + # tmp file already get deleted + pass except: pass if last_error is not None: @@ -117,6 +126,7 @@ def atomic_replace(replace_from: str, replace_to: str): Raises: PermissionError: (Windows only) If another process is still reading the file and all retries failed + FileNotFoundError: """ if IS_WINDOWS: # PermissionError on Windows if another process is reading @@ -132,6 +142,11 @@ def atomic_replace(replace_from: str, replace_to: str): delay = windows_attempt_delay(attempt) time.sleep(delay) continue + except FileNotFoundError: + raise + except Exception as e: + last_error = e + break if last_error is not None: raise last_error from None else: @@ -522,7 +537,7 @@ def folder_rmtree(folder, may_symlinks=True): # If it's a symlinks, unlink it if may_symlinks and os.path.islink(folder): file_remove(folder) - return + return True # Iter folder with os.scandir(folder) as entries: for entry in entries: @@ -539,10 +554,10 @@ def folder_rmtree(folder, may_symlinks=True): except FileNotFoundError: # directory to clean up does not exist, no need to clean up - return + return True except NotADirectoryError: file_remove(folder) - return + return True # Remove empty folder # May raise OSError if it's still not empty @@ -550,10 +565,10 @@ def folder_rmtree(folder, may_symlinks=True): os.rmdir(folder) return True except FileNotFoundError: - return + return True except NotADirectoryError: file_remove(folder) - return + return True except OSError: return False @@ -565,8 +580,12 @@ def atomic_rmtree(folder: str): folder can be removed by atomic_failure_cleanup at next startup if remove gets interrupted """ temp = to_tmp_file(folder) - atomic_replace(folder, temp) - folder_rmtree(folder) + try: + atomic_replace(folder, temp) + except FileNotFoundError: + # Folder not exist, no need to rmtree + return + folder_rmtree(temp) def atomic_failure_cleanup(folder: str, recursive: bool = False): @@ -607,4 +626,5 @@ def atomic_failure_cleanup(folder: str, recursive: bool = False): except NotADirectoryError: file_remove(folder) except: + # Ignore all failures, it doesn't matter if tmp files still exist pass From 84da230fd99eac210c0aab855efff983c37695d2 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 17 Apr 2025 22:13:06 +0800 Subject: [PATCH 3/6] Upd: Toggle coalition to Frostfall --- campaign/Readme.md | 1 + config/template.json | 4 ++-- module/config/argument/args.json | 31 +++++++++++++++------------- module/config/argument/argument.yaml | 4 ++-- module/config/argument/override.yaml | 5 ++++- module/config/config_generated.py | 2 +- module/config/i18n/en-US.json | 11 +++++----- module/config/i18n/ja-JP.json | 17 ++++++++------- module/config/i18n/zh-CN.json | 11 +++++----- module/config/i18n/zh-TW.json | 7 ++++--- module/ui/page.py | 22 ++++++++++---------- 11 files changed, 63 insertions(+), 52 deletions(-) diff --git a/campaign/Readme.md b/campaign/Readme.md index ae8d14562..b76f9055c 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -238,3 +238,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20250320 | event 20230223 cn | Revelations of Dust | 复刻湮烬尘墟 | Revelations of Dust Rerun | 黙示の遺構(復刻) | - | | 20250320 | event 20240521 cn | Light of the Martyrium | - | - | - | 綻放於輝光之城 | | 20250410 | event 20241024 cn | Tempesta and the Sleeping Sea | - | - | - | 颶風與沉眠之海 | +| 20230323 | coalition 20230323 | Frostfall | 极地风暴 | Frostfall | 星霜海嵐 | - | diff --git a/config/template.json b/config/template.json index 3890e459e..4db9c8e76 100644 --- a/config/template.json +++ b/config/template.json @@ -615,7 +615,7 @@ "AmbushEvade": true }, "Coalition": { - "Mode": "hard", + "Mode": "tc1", "Fleet": "single" }, "StopCondition": { @@ -1186,7 +1186,7 @@ "AmbushEvade": true }, "Coalition": { - "Mode": "hard", + "Mode": "sp", "Fleet": "single" }, "StopCondition": { diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 47e14f076..26bca8414 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -3321,11 +3321,12 @@ "coalition_20240627" ], "option_bold": [ + "coalition_20230323", "coalition_20240627" ], - "cn": "coalition_20240627", - "en": "coalition_20240627", - "jp": "coalition_20240627", + "cn": "coalition_20230323", + "en": "coalition_20230323", + "jp": "coalition_20230323", "tw": "coalition_20240627" }, "Mode": { @@ -3366,11 +3367,11 @@ "Coalition": { "Mode": { "type": "select", - "value": "hard", + "value": "tc1", "option": [ - "easy", - "normal", - "hard", + "tc1", + "tc2", + "tc3", "ex" ] }, @@ -6632,11 +6633,12 @@ "coalition_20240627" ], "option_bold": [ + "coalition_20230323", "coalition_20240627" ], - "cn": "coalition_20240627", - "en": "coalition_20240627", - "jp": "coalition_20240627", + "cn": "coalition_20230323", + "en": "coalition_20230323", + "jp": "coalition_20230323", "tw": "coalition_20240627" }, "Mode": { @@ -6677,11 +6679,12 @@ "Coalition": { "Mode": { "type": "select", - "value": "hard", + "value": "sp", "option": [ - "easy", - "normal", - "hard", + "tc1", + "tc2", + "tc3", + "sp", "ex" ], "display": "hide" diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index e3c9ed34b..5f2b9af96 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -308,8 +308,8 @@ MaritimeEscort: Enable: true Coalition: Mode: - value: hard - option: [ easy, normal, hard, ex ] + value: tc1 + option: [ tc1, tc2, tc3, sp, ex ] Fleet: value: single option: [ single, multi ] diff --git a/module/config/argument/override.yaml b/module/config/argument/override.yaml index 4516afca7..eca1d80e9 100644 --- a/module/config/argument/override.yaml +++ b/module/config/argument/override.yaml @@ -238,6 +238,9 @@ Coalition: UseAutoSearch: false Use2xBook: false AmbushEvade: true + Coalition: + Mode: + option: [ tc1, tc2, tc3, ex ] StopCondition: MapAchievement: non_stop StageIncrease: false @@ -266,7 +269,7 @@ CoalitionSp: AmbushEvade: true Coalition: # CoalitionSp hard-codes Mode='sp' - Mode: hard + Mode: sp StopCondition: MapAchievement: non_stop StageIncrease: false diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 5ebece660..030329277 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -181,7 +181,7 @@ class GeneratedConfig: MaritimeEscort_Enable = True # Group `Coalition` - Coalition_Mode = 'hard' # easy, normal, hard, ex + Coalition_Mode = 'tc1' # tc1, tc2, tc3, sp, ex Coalition_Fleet = 'single' # single, multi # Group `Commission` diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index f6c17f648..ad3775001 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -83,7 +83,7 @@ "help": "" }, "Coalition": { - "name": "Little Academy", + "name": "Frostfall", "help": "" }, "MaritimeEscort": { @@ -119,7 +119,7 @@ "help": "" }, "CoalitionSp": { - "name": "Little Academy SP", + "name": "Frostfall SP", "help": "" }, "Commission": { @@ -1301,9 +1301,10 @@ "Mode": { "name": "Mode", "help": "SP needs to use event daily SP to run", - "easy": "Easy", - "normal": "Normal", - "hard": "Hard", + "tc1": "tc1", + "tc2": "tc2", + "tc3": "tc3", + "sp": "sp", "ex": "EX" }, "Fleet": { diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 39207496a..c0fdbd4ee 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -83,7 +83,7 @@ "help": "" }, "Coalition": { - "name": "リトル学園", + "name": "星霜海嵐", "help": "" }, "MaritimeEscort": { @@ -119,8 +119,8 @@ "help": "" }, "CoalitionSp": { - "name": "Task.CoalitionSp.name", - "help": "Task.CoalitionSp.help" + "name": "星霜海嵐SP", + "help": "" }, "Commission": { "name": "委託", @@ -152,7 +152,7 @@ }, "Awaken": { "name": "Task.Awaken.name", - "help": "Task.Awaken.help" + "help": "" }, "Daily": { "name": "デイリー", @@ -188,7 +188,7 @@ }, "Minigame": { "name": "Task.Minigame.name", - "help": "Task.Minigame.help" + "help": "" }, "OpsiGeneral": { "name": "一般設定", @@ -1301,9 +1301,10 @@ "Mode": { "name": "Coalition.Mode.name", "help": "Coalition.Mode.help", - "easy": "easy", - "normal": "normal", - "hard": "hard", + "tc1": "tc1", + "tc2": "tc2", + "tc3": "tc3", + "sp": "sp", "ex": "ex" }, "Fleet": { diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 7cf659c76..85fec1922 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -83,7 +83,7 @@ "help": "" }, "Coalition": { - "name": "童心学院", + "name": "极地风暴", "help": "" }, "MaritimeEscort": { @@ -119,7 +119,7 @@ "help": "" }, "CoalitionSp": { - "name": "童心学院每日SP", + "name": "极地风暴每日SP", "help": "" }, "Commission": { @@ -1301,9 +1301,10 @@ "Mode": { "name": "难度", "help": "SP图需要使用活动每日SP运行", - "easy": "简单", - "normal": "普通", - "hard": "困难", + "tc1": "tc1", + "tc2": "tc2", + "tc3": "tc3", + "sp": "sp", "ex": "EX" }, "Fleet": { diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index bc97584da..8101ba343 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -1301,9 +1301,10 @@ "Mode": { "name": "難度", "help": "SP圖需要使用活動每日SP運行", - "easy": "簡單", - "normal": "普通", - "hard": "困難", + "tc1": "tc1", + "tc2": "tc2", + "tc3": "tc3", + "sp": "sp", "ex": "EX" }, "Fleet": { diff --git a/module/ui/page.py b/module/ui/page.py index a44e26e3b..4926fd217 100644 --- a/module/ui/page.py +++ b/module/ui/page.py @@ -131,18 +131,18 @@ page_campaign.link(button=CAMPAIGN_GOTO_EVENT, destination=page_sp) # Coalition # FROSTFALL -# page_coalition = Page(COALITION_CHECK) -# page_coalition.link(button=GOTO_MAIN, destination=page_main) -# page_coalition.link(button=BACK_ARROW, destination=page_campaign) -# page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_coalition) -# ACADEMY -page_coalition_menu = Page(COALITION_ACADEMY_MAIN_CHECK) -page_coalition_menu.link(button=COALITION_ACADEMY_HOME, destination=page_main) -page_coalition = Page(COALITION_ACADEMY_CAMPAIGN_CHECK) -page_coalition.link(button=COALITION_ACADEMY_HOME, destination=page_main) -page_coalition.link(button=COALITION_ACADEMY_BACK, destination=page_coalition_menu) +page_coalition = Page(COALITION_CHECK) +page_coalition.link(button=GOTO_MAIN, destination=page_main) +page_coalition.link(button=BACK_ARROW, destination=page_campaign) page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_coalition) -page_coalition_menu.link(button=COALITION_ACADEMY_GOTO_CAMPAIGN, destination=page_coalition) +# ACADEMY +# page_coalition_menu = Page(COALITION_ACADEMY_MAIN_CHECK) +# page_coalition_menu.link(button=COALITION_ACADEMY_HOME, destination=page_main) +# page_coalition = Page(COALITION_ACADEMY_CAMPAIGN_CHECK) +# page_coalition.link(button=COALITION_ACADEMY_HOME, destination=page_main) +# page_coalition.link(button=COALITION_ACADEMY_BACK, destination=page_coalition_menu) +# page_campaign_menu.link(button=CAMPAIGN_MENU_GOTO_EVENT, destination=page_coalition) +# page_coalition_menu.link(button=COALITION_ACADEMY_GOTO_CAMPAIGN, destination=page_coalition) # Operation Siren page_os = Page(OS_CHECK) From 216d355b918fde5a71746f4e18cc9c2cbf7c6a60 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 17 Apr 2025 22:21:40 +0800 Subject: [PATCH 4/6] Fix: Redirect coalition modes --- module/config/config_updater.py | 2 ++ module/config/redirect_utils/utils.py | 33 +++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/module/config/config_updater.py b/module/config/config_updater.py index edff83305..dd3f73ac4 100644 --- a/module/config/config_updater.py +++ b/module/config/config_updater.py @@ -589,6 +589,8 @@ class ConfigUpdater: # 'GemsFarming.GemsFarming.ChangeVanguard', # change_ship_redirect), # ('Alas.DropRecord.API', 'Alas.DropRecord.API', api_redirect2) + # 2025.04.17 + ('Coalition.Coalition.Mode', 'Coalition.Coalition.Mode', coalition_to_frostfall) ] # redirection += [ # ( diff --git a/module/config/redirect_utils/utils.py b/module/config/redirect_utils/utils.py index 3d3030d95..33a4f6f6e 100644 --- a/module/config/redirect_utils/utils.py +++ b/module/config/redirect_utils/utils.py @@ -83,7 +83,7 @@ def emotion_mode_redirect(value): def change_ship_redirect(value): """ - FlagshipChange + FlagshipEquipChange -> ChangeFlagship + FlagshipChange + FlagshipEquipChange -> ChangeFlagship """ ship, equip = value if not ship: @@ -93,6 +93,7 @@ def change_ship_redirect(value): else: return 'ship' + def api_redirect2(value): """ remove shanghai proxy, use guangzhou @@ -100,4 +101,32 @@ def api_redirect2(value): if value == 'cn_sh_reverse_proxy': return 'cn_gz_reverse_proxy' else: - return value \ No newline at end of file + return value + + +def coalition_to_frostfall(value): + """ + Redirect Little Academy stage names to Frostfall + """ + if value == 'easy': + return 'tc1' + elif value == 'normal': + return 'tc2' + elif value == 'hard': + return 'tc3' + else: + return value + + +def coalition_to_little_academy(value): + """ + Redirect Little Academy stage names to Frostfall + """ + if value == 'tc1': + return 'easy' + elif value == 'tc2': + return 'normal' + elif value == 'tc3': + return 'hard' + else: + return value From 62d260db02813a7f97e89e50dc66643517bbe761 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 17 Apr 2025 22:27:13 +0800 Subject: [PATCH 5/6] Upd: FROSTFALL_TC3 and FROSTFALL_SP are swapped --- assets/cn/coalition/FROSTFALL_SP.png | Bin 8775 -> 7402 bytes assets/cn/coalition/FROSTFALL_TC3.png | Bin 8784 -> 7411 bytes assets/en/coalition/FROSTFALL_SP.png | Bin 8775 -> 7402 bytes assets/en/coalition/FROSTFALL_TC3.png | Bin 8784 -> 7411 bytes assets/jp/coalition/FROSTFALL_SP.png | Bin 8775 -> 7402 bytes assets/jp/coalition/FROSTFALL_TC3.png | Bin 8784 -> 7411 bytes module/coalition/assets.py | 4 ++-- 7 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/cn/coalition/FROSTFALL_SP.png b/assets/cn/coalition/FROSTFALL_SP.png index 0e9545d74aeee2c1b6cd220c572865877cce045d..87a0289b78a858d8949038dc5bc9c0bcc98dfdfa 100644 GIT binary patch literal 7402 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 diff --git a/assets/cn/coalition/FROSTFALL_TC3.png b/assets/cn/coalition/FROSTFALL_TC3.png index 6e38adee8f9ab664e5c8e03ced49c5baf6d9581d..e6d0581b50579451fea6b5e866caf90c17ba564e 100644 GIT binary patch literal 7411 zcmeI0dr%YC9>*77ND#FZ6%;TAxC)xrlF(!&Jmev<1Ti8HL1B~Kz?Qs777`v-N3Y(h z*9VArRm9qYR>xAWiemABiehDaD^(sfw^k6m47DIs5x8dq@|bq!j-A_o?qp{&yXTzW z?|Xi~&-tA*yV(>GzQ~R?g9bs6oj5c|3PEGRD=9v)!y3runqlU zea@vlu`Fbu;;||J3sC?h&&Dsc21ePIb!w$+SkZG;@^yw%*eH$zUWe^ z$y6nKc*Mc154vaHZ<|a>4Cie7l;SN7Mc?I(t;=y5^0+=K_4r6U_x( zn_Q30_o!^Dd^&FBj$d)wKD zS`+iuC#AP)yMAI%n0{&(UUJ_lfVL%O-FPdw<*UzWwy7)l(l9L9ulZlwkxz5t;j^BJ zKgIaldAe0i>b1UD&fl_gidrhL>A3Kyvuf_-`mrnQ>Uw=ox7OH9HjXPfwe4cf7=@o$ zL!Nr{0q3|~e7u2|F{!NHYGWb!-3})Y|N9B^N3|t&NHP+Cp7uOWpOw<~w8QGUG`e}F z$u!wv-qOx*tI7i#&i7;;YIri~%p=|9uk)AkK-n1yP+l>TFhs6Vu~1AS!&yd^7StUC z`S=;Ns5}KH=`uWtP>UFCSu7LUbY1{;ZVnBhyK`{*zQ zA`J=|kN_-)JsF%1LNNI98EH9pU zgjyB^Bm=;rRGk6=b3e!h3Dn^zsnJDhG)fVJ3W-j64h~DecEV5+4MIsAh;m>rgd;#; zUL?#xcre1{GC4eiGt6Ft5sHleW=(A#x=;U-hZ1@)e}=iMe@89DQ~O)}O(kL8N_4t; zQy{3kKLtISj$`IHfmZ*JJQ-Cd;o$TbDA#xW#P5^>#)C1rKrUp;&fx`=&h3vt@aDW+g?EHz>z*_u?GXQDJB=5!7g3E&I zy$HOQv8B2!xZaDvdl_4*>wkueHuO1#tHE240emcZIh)pk4=o#QXsjNBY^P8^D`;g;b8@MUha))sygZovRpt8{)=q_z={OtH> z)-l;;4{1!yu^l0I5{~!M;`-Ka?Mt-X!ju*rpIp!QaoS=9y1_dpI9wlVed_0H zrrZs7q1P|B=QY*0%ws*VZOWcQ{pVo0ECehBECehB{ty9EU)mxY2vXncO6c8HbYb^h zH~fWPTq_a2EjM@jB#G#Nyl%NsUk#xfrr?fJ`;}mbAZks#N1|ImI{r zEode3lN=>)Iu>N@Rp;#QUR_<2My$emv#uQ|RvwiXlpV;;TRh8}4vmJ+O|5B;65s3D;h$22a#W_@H9re7d#yxslf1L)jYLmmW~^5?Ess@E&sIitMo5;2duw$bvU2C+)EnvJ49hnAPV|SyLB^~!;p+UG`yZ6=$=WF_b-<$+umLJIJI`S z#KiIy>V;Wm}nJ$-`O34%ESrv-JR{_Pu|X4`@-6z?a-c86EAo!a6EV5lRJKW zb+=B$7r7jo@aA!JgXhip4UFwBFP{COVzD?`2v`VM2>hQBFx~92dr~0B?c^ivR!s literal 8784 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 diff --git a/assets/en/coalition/FROSTFALL_TC3.png b/assets/en/coalition/FROSTFALL_TC3.png index 6e38adee8f9ab664e5c8e03ced49c5baf6d9581d..e6d0581b50579451fea6b5e866caf90c17ba564e 100644 GIT binary patch literal 7411 zcmeI0dr%YC9>*77ND#FZ6%;TAxC)xrlF(!&Jmev<1Ti8HL1B~Kz?Qs777`v-N3Y(h z*9VArRm9qYR>xAWiemABiehDaD^(sfw^k6m47DIs5x8dq@|bq!j-A_o?qp{&yXTzW z?|Xi~&-tA*yV(>GzQ~R?g9bs6oj5c|3PEGRD=9v)!y3runqlU zea@vlu`Fbu;;||J3sC?h&&Dsc21ePIb!w$+SkZG;@^yw%*eH$zUWe^ z$y6nKc*Mc154vaHZ<|a>4Cie7l;SN7Mc?I(t;=y5^0+=K_4r6U_x( zn_Q30_o!^Dd^&FBj$d)wKD zS`+iuC#AP)yMAI%n0{&(UUJ_lfVL%O-FPdw<*UzWwy7)l(l9L9ulZlwkxz5t;j^BJ zKgIaldAe0i>b1UD&fl_gidrhL>A3Kyvuf_-`mrnQ>Uw=ox7OH9HjXPfwe4cf7=@o$ zL!Nr{0q3|~e7u2|F{!NHYGWb!-3})Y|N9B^N3|t&NHP+Cp7uOWpOw<~w8QGUG`e}F z$u!wv-qOx*tI7i#&i7;;YIri~%p=|9uk)AkK-n1yP+l>TFhs6Vu~1AS!&yd^7StUC z`S=;Ns5}KH=`uWtP>UFCSu7LUbY1{;ZVnBhyK`{*zQ zA`J=|kN_-)JsF%1LNNI98EH9pU zgjyB^Bm=;rRGk6=b3e!h3Dn^zsnJDhG)fVJ3W-j64h~DecEV5+4MIsAh;m>rgd;#; zUL?#xcre1{GC4eiGt6Ft5sHleW=(A#x=;U-hZ1@)e}=iMe@89DQ~O)}O(kL8N_4t; zQy{3kKLtISj$`IHfmZ*JJQ-Cd;o$TbDA#xW#P5^>#)C1rKrUp;&fx`=&h3vt@aDW+g?EHz>z*_u?GXQDJB=5!7g3E&I zy$HOQv8B2!xZaDvdl_4*>wkueHuO1#tHE240emcZIh)pk4=o#QXsjNBY^P8^D`;g;b8@MUha))sygZovRpt8{)=q_z={OtH> z)-l;;4{1!yu^l0I5{~!M;`-Ka?Mt-X!ju*rpIp!QaoS=9y1_dpI9wlVed_0H zrrZs7q1P|B=QY*0%ws*VZOWcQ{pVo0ECehBECehB{ty9EU)mxY2vXncO6c8HbYb^h zH~fWPTq_a2EjM@jB#G#Nyl%NsUk#xfrr?fJ`;}mbAZks#N1|ImI{r zEode3lN=>)Iu>N@Rp;#QUR_<2My$emv#uQ|RvwiXlpV;;TRh8}4vmJ+O|5B;65s3D;h$22a#W_@H9re7d#yxslf1L)jYLmmW~^5?Ess@E&sIitMo5;2duw$bvU2C+)EnvJ49hnAPV|SyLB^~!;p+UG`yZ6=$=WF_b-<$+umLJIJI`S z#KiIy>V;Wm}nJ$-`O34%ESrv-JR{_Pu|X4`@-6z?a-c86EAo!a6EV5lRJKW zb+=B$7r7jo@aA!JgXhip4UFwBFP{COVzD?`2v`VM2>hQBFx~92dr~0B?c^ivR!s literal 8784 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 diff --git a/assets/jp/coalition/FROSTFALL_TC3.png b/assets/jp/coalition/FROSTFALL_TC3.png index 6e38adee8f9ab664e5c8e03ced49c5baf6d9581d..e6d0581b50579451fea6b5e866caf90c17ba564e 100644 GIT binary patch literal 7411 zcmeI0dr%YC9>*77ND#FZ6%;TAxC)xrlF(!&Jmev<1Ti8HL1B~Kz?Qs777`v-N3Y(h z*9VArRm9qYR>xAWiemABiehDaD^(sfw^k6m47DIs5x8dq@|bq!j-A_o?qp{&yXTzW z?|Xi~&-tA*yV(>GzQ~R?g9bs6oj5c|3PEGRD=9v)!y3runqlU zea@vlu`Fbu;;||J3sC?h&&Dsc21ePIb!w$+SkZG;@^yw%*eH$zUWe^ z$y6nKc*Mc154vaHZ<|a>4Cie7l;SN7Mc?I(t;=y5^0+=K_4r6U_x( zn_Q30_o!^Dd^&FBj$d)wKD zS`+iuC#AP)yMAI%n0{&(UUJ_lfVL%O-FPdw<*UzWwy7)l(l9L9ulZlwkxz5t;j^BJ zKgIaldAe0i>b1UD&fl_gidrhL>A3Kyvuf_-`mrnQ>Uw=ox7OH9HjXPfwe4cf7=@o$ zL!Nr{0q3|~e7u2|F{!NHYGWb!-3})Y|N9B^N3|t&NHP+Cp7uOWpOw<~w8QGUG`e}F z$u!wv-qOx*tI7i#&i7;;YIri~%p=|9uk)AkK-n1yP+l>TFhs6Vu~1AS!&yd^7StUC z`S=;Ns5}KH=`uWtP>UFCSu7LUbY1{;ZVnBhyK`{*zQ zA`J=|kN_-)JsF%1LNNI98EH9pU zgjyB^Bm=;rRGk6=b3e!h3Dn^zsnJDhG)fVJ3W-j64h~DecEV5+4MIsAh;m>rgd;#; zUL?#xcre1{GC4eiGt6Ft5sHleW=(A#x=;U-hZ1@)e}=iMe@89DQ~O)}O(kL8N_4t; zQy{3kKLtISj$`IHfmZ*JJQ-Cd;o$TbDA#xW#P5^>#)C1rKrUp;&fx`=&h3vt@aDW+g?EHz>z*_u?GXQDJB=5!7g3E&I zy$HOQv8B2!xZaDvdl_4*>wkueHuO1#tHE240emcZIh)pk4=o#QXsjNBY^P8^D`;g;b8@MUha))sygZovRpt8{)=q_z={OtH> z)-l;;4{1!yu^l0I5{~!M;`-Ka?Mt-X!ju*rpIp!QaoS=9y1_dpI9wlVed_0H zrrZs7q1P|B=QY*0%ws*VZOWcQ{pVo0ECehBECehB{ty9EU)mxY2vXncO6c8HbYb^h zH~fWPTq_a2EjM@jB#G#Nyl%NsUk#xfrr?fJ`;}mbAZks#N1|ImI{r zEode3lN=>)Iu>N@Rp;#QUR_<2My$emv#uQ|RvwiXlpV;;TRh8}4vmJ+O|5B;65s3D;h$22a#W_@H9re7d#yxslf1L)jYLmmW~^5?Ess@E&sIitMo5;2duw$bvU2C+)EnvJ49hnAPV|SyLB^~!;p+UG`yZ6=$=WF_b-<$+umLJIJI`S z#KiIy>V;Wm}nJ$-`O34%ESrv-JR{_Pu|X4`@-6z?a-c86EAo!a6EV5lRJKW zb+=B$7r7jo@aA!JgXhip4UFwBFP{COVzD?`2v`VM2>hQBFx~92dr~0B?c^ivR!s literal 8784 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 Date: Thu, 17 Apr 2025 22:33:10 +0800 Subject: [PATCH 6/6] Chore: Air date of Frostfall rerun --- campaign/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/campaign/Readme.md b/campaign/Readme.md index b76f9055c..7afed88a9 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -238,4 +238,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20250320 | event 20230223 cn | Revelations of Dust | 复刻湮烬尘墟 | Revelations of Dust Rerun | 黙示の遺構(復刻) | - | | 20250320 | event 20240521 cn | Light of the Martyrium | - | - | - | 綻放於輝光之城 | | 20250410 | event 20241024 cn | Tempesta and the Sleeping Sea | - | - | - | 颶風與沉眠之海 | -| 20230323 | coalition 20230323 | Frostfall | 极地风暴 | Frostfall | 星霜海嵐 | - | +| 20250417 | coalition 20230323 | Frostfall | 极地风暴 | Frostfall | 星霜海嵐 | - |