From 50ea845d838489b6c02a05d82616cc0994860eeb Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 24 Jun 2026 00:55:59 +0800 Subject: [PATCH 1/8] Upd: [TW] AIR_STRIKE_CANCEL AIR_STRIKE_CONFIRM --- assets/tw/handler/AIR_STRIKE_CANCEL.png | Bin 0 -> 6474 bytes assets/tw/handler/AIR_STRIKE_CONFIRM.png | Bin 0 -> 6786 bytes module/handler/assets.py | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 assets/tw/handler/AIR_STRIKE_CANCEL.png create mode 100644 assets/tw/handler/AIR_STRIKE_CONFIRM.png diff --git a/assets/tw/handler/AIR_STRIKE_CANCEL.png b/assets/tw/handler/AIR_STRIKE_CANCEL.png new file mode 100644 index 0000000000000000000000000000000000000000..7ffa8c40c307d8990a3072048cf6e4258a3157bf GIT binary patch literal 6474 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 b1<65@&!0H(LL7=4Q<=cOU-;-h&__ literal 0 HcmV?d00001 diff --git a/assets/tw/handler/AIR_STRIKE_CONFIRM.png b/assets/tw/handler/AIR_STRIKE_CONFIRM.png new file mode 100644 index 0000000000000000000000000000000000000000..6baca294e20cd70878b0bea0d6b971be1ae0ad17 GIT binary patch literal 6786 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 KmVEl^{r>~SMc>Z= literal 0 HcmV?d00001 diff --git a/module/handler/assets.py b/module/handler/assets.py index 0fdecbeda..b660353a7 100644 --- a/module/handler/assets.py +++ b/module/handler/assets.py @@ -4,8 +4,8 @@ # This file was automatically generated by dev_tools/button_extract.py. # Don't modify it manually. -AIR_STRIKE_CANCEL = Button(area={'cn': (887, 644, 948, 676), 'en': (887, 644, 948, 676), 'jp': (948, 644, 1009, 676), 'tw': (887, 644, 948, 676)}, color={'cn': (193, 141, 135), 'en': (193, 141, 135), 'jp': (194, 124, 117), 'tw': (193, 141, 135)}, button={'cn': (887, 644, 948, 676), 'en': (887, 644, 948, 676), 'jp': (948, 644, 1009, 676), 'tw': (887, 644, 948, 676)}, file={'cn': './assets/cn/handler/AIR_STRIKE_CANCEL.png', 'en': './assets/cn/handler/AIR_STRIKE_CANCEL.png', 'jp': './assets/jp/handler/AIR_STRIKE_CANCEL.png', 'tw': './assets/cn/handler/AIR_STRIKE_CANCEL.png'}) -AIR_STRIKE_CONFIRM = Button(area={'cn': (1100, 644, 1161, 675), 'en': (1100, 644, 1161, 675), 'jp': (1161, 644, 1222, 675), 'tw': (1100, 644, 1161, 675)}, color={'cn': (129, 161, 199), 'en': (129, 161, 199), 'jp': (137, 170, 211), 'tw': (129, 161, 199)}, button={'cn': (1100, 644, 1161, 675), 'en': (1100, 644, 1161, 675), 'jp': (1161, 644, 1222, 675), 'tw': (1100, 644, 1161, 675)}, file={'cn': './assets/cn/handler/AIR_STRIKE_CONFIRM.png', 'en': './assets/cn/handler/AIR_STRIKE_CONFIRM.png', 'jp': './assets/jp/handler/AIR_STRIKE_CONFIRM.png', 'tw': './assets/cn/handler/AIR_STRIKE_CONFIRM.png'}) +AIR_STRIKE_CANCEL = Button(area={'cn': (887, 644, 948, 676), 'en': (887, 644, 948, 676), 'jp': (948, 644, 1009, 676), 'tw': (889, 646, 946, 674)}, color={'cn': (193, 141, 135), 'en': (193, 141, 135), 'jp': (194, 124, 117), 'tw': (207, 162, 159)}, button={'cn': (887, 644, 948, 676), 'en': (887, 644, 948, 676), 'jp': (948, 644, 1009, 676), 'tw': (889, 646, 946, 674)}, file={'cn': './assets/cn/handler/AIR_STRIKE_CANCEL.png', 'en': './assets/cn/handler/AIR_STRIKE_CANCEL.png', 'jp': './assets/jp/handler/AIR_STRIKE_CANCEL.png', 'tw': './assets/tw/handler/AIR_STRIKE_CANCEL.png'}) +AIR_STRIKE_CONFIRM = Button(area={'cn': (1100, 644, 1161, 675), 'en': (1100, 644, 1161, 675), 'jp': (1161, 644, 1222, 675), 'tw': (1102, 646, 1161, 674)}, color={'cn': (129, 161, 199), 'en': (129, 161, 199), 'jp': (137, 170, 211), 'tw': (155, 181, 216)}, button={'cn': (1100, 644, 1161, 675), 'en': (1100, 644, 1161, 675), 'jp': (1161, 644, 1222, 675), 'tw': (1102, 646, 1161, 674)}, file={'cn': './assets/cn/handler/AIR_STRIKE_CONFIRM.png', 'en': './assets/cn/handler/AIR_STRIKE_CONFIRM.png', 'jp': './assets/jp/handler/AIR_STRIKE_CONFIRM.png', 'tw': './assets/tw/handler/AIR_STRIKE_CONFIRM.png'}) AIR_STRIKE_ENTER = Button(area={'cn': (1194, 456, 1249, 530), 'en': (1194, 456, 1249, 530), 'jp': (1194, 456, 1249, 530), 'tw': (1194, 456, 1249, 530)}, color={'cn': (123, 124, 131), 'en': (123, 124, 131), 'jp': (123, 124, 131), 'tw': (123, 124, 131)}, button={'cn': (1194, 456, 1249, 530), 'en': (1194, 456, 1249, 530), 'jp': (1194, 456, 1249, 530), 'tw': (1194, 456, 1249, 530)}, file={'cn': './assets/cn/handler/AIR_STRIKE_ENTER.png', 'en': './assets/cn/handler/AIR_STRIKE_ENTER.png', 'jp': './assets/cn/handler/AIR_STRIKE_ENTER.png', 'tw': './assets/cn/handler/AIR_STRIKE_ENTER.png'}) ANDROID_NO_RESPOND = Button(area={'cn': (341, 433, 391, 472), 'en': (341, 433, 391, 472), 'jp': (341, 433, 391, 472), 'tw': (341, 433, 391, 472)}, color={'cn': (217, 237, 235), 'en': (217, 237, 235), 'jp': (217, 237, 235), 'tw': (217, 237, 235)}, button={'cn': (341, 433, 391, 472), 'en': (341, 433, 391, 472), 'jp': (341, 433, 391, 472), 'tw': (341, 433, 391, 472)}, file={'cn': './assets/cn/handler/ANDROID_NO_RESPOND.png', 'en': './assets/en/handler/ANDROID_NO_RESPOND.png', 'jp': './assets/jp/handler/ANDROID_NO_RESPOND.png', 'tw': './assets/tw/handler/ANDROID_NO_RESPOND.png'}) AUTO_SEARCH_MAP_OPTION_OFF = Button(area={'cn': (1205, 549, 1275, 566), 'en': (1203, 552, 1277, 564), 'jp': (1204, 547, 1276, 568), 'tw': (1205, 546, 1275, 567)}, color={'cn': (196, 169, 169), 'en': (151, 132, 138), 'jp': (179, 153, 156), 'tw': (153, 132, 137)}, button={'cn': (1205, 549, 1275, 566), 'en': (1203, 552, 1277, 564), 'jp': (1204, 547, 1276, 568), 'tw': (1205, 546, 1275, 567)}, file={'cn': './assets/cn/handler/AUTO_SEARCH_MAP_OPTION_OFF.png', 'en': './assets/en/handler/AUTO_SEARCH_MAP_OPTION_OFF.png', 'jp': './assets/jp/handler/AUTO_SEARCH_MAP_OPTION_OFF.png', 'tw': './assets/tw/handler/AUTO_SEARCH_MAP_OPTION_OFF.png'}) From 934ecda6eb7f7f086bc5c930a742ff3472ed3e8f Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Thu, 25 Jun 2026 19:33:22 +0800 Subject: [PATCH 2/8] Opt: using template matching for commission suffix recognition (#5731) * Opt: using pHash and template matching for commission suffix recognition * Refactor: improve suffix image processing and hash calculation --- module/commission/project.py | 120 ++++++++++++++++++++++++++--------- 1 file changed, 91 insertions(+), 29 deletions(-) diff --git a/module/commission/project.py b/module/commission/project.py index afdc8c809..9c53b459b 100644 --- a/module/commission/project.py +++ b/module/commission/project.py @@ -1,6 +1,6 @@ from datetime import datetime, timedelta +import hashlib -import module.config.server as server from module.base.decorator import Config from module.base.filter import Filter from module.base.utils import * @@ -23,20 +23,53 @@ ) -class SuffixOcr(Ocr): - def pre_process(self, image): - image = super().pre_process(image) - - left = np.where(np.min(image[5:-5, :], axis=0) < 85)[0] - # Look back several pixels - if server.server in ['jp']: - look_back = 21 - else: - look_back = 18 - if len(left): - image = image[:, left[-1] - look_back:] +def crop_suffix_image(image, area): + """ + Args: + image (np.ndarray): + area (tuple): Commission name area. + + Returns: + np.ndarray | None: Cropped suffix image, black letters on white background. + """ + name_image = crop(image, area) + name_image = extract_letters(name_image, letter=(255, 255, 255), threshold=128).astype(np.uint8) + + line = cv2.reduce(name_image[5:-5, :], 0, cv2.REDUCE_AVG).flatten() + columns = np.where(line < 250)[0] + if not len(columns): + return None + + # Look back several pixels from the rightmost letter to include Roman numerals. + threshold = 250 + look_back = 10 + for i in range(columns[-1], 0, -1): + if line[i] > threshold: + if columns[-1] - i > look_back: + look_back = columns[-1] - i + break + + left = columns[-1] - look_back + right = columns[-1] + 1 + x1, y1 = area[0:2] + suffix_area = area_offset((left - 3, -3, right + 3, name_image.shape[0] + 3), (x1, y1)) + image = crop(image, suffix_area) + image = extract_letters(image, letter=(255, 255, 255), threshold=128).astype(np.uint8) + return image + + +def image_hash(image): + """ + Args: + image (np.ndarray): + + Returns: + str: + """ + if image is None: + return '' - return image + return hashlib.md5(image.tobytes()).hexdigest() class Commission: @@ -46,10 +79,10 @@ class Commission: name: str # If success to parse commission name valid: bool - # Suffix in roman numerals - # May be wrong if commission does not have a suffix - # Value: ⅠⅡⅢⅤⅣⅥ - suffix: str + # Cropped suffix image, black letters on white background, or None + suffix_image: np.ndarray + # Hash of suffix image, used only for logging, or empty string if suffix_image is None + suffix_hash: str # Genre name in project_data.py # Value: major_comm, daily_resource, urgent_cube, ... genre: str @@ -113,8 +146,8 @@ def commission_parse(self): self.genre = self.commission_name_parse(self.name) # Suffix - ocr = SuffixOcr(button, lang='azur_lane', letter=(255, 255, 255), threshold=128, alphabet='IV') - self.suffix = self.beautify_name(ocr.ocr(self.image)) + self.suffix_image = crop_suffix_image(self.image, self.button.area) + self.suffix_hash = image_hash(self.suffix_image) # Duration time area = area_offset((290, 68, 390, 95), self.area[0:2]) @@ -160,8 +193,8 @@ def commission_parse(self): self.genre = self.commission_name_parse(self.name) # Suffix - ocr = SuffixOcr(button, lang='azur_lane', letter=(255, 255, 255), threshold=128, alphabet='IV') - self.suffix = self.beautify_name(ocr.ocr(self.image)) + self.suffix_image = crop_suffix_image(self.image, self.button.area) + self.suffix_hash = image_hash(self.suffix_image) # Duration time area = area_offset((290, 68, 390, 95), self.area[0:2]) @@ -209,8 +242,8 @@ def commission_parse(self): self.genre = self.commission_name_parse(self.name) # Suffix - ocr = SuffixOcr(button, lang='azur_lane', letter=(255, 255, 255), threshold=128, alphabet='IV') - self.suffix = self.beautify_name(ocr.ocr(self.image)) + self.suffix_image = crop_suffix_image(self.image, self.button.area) + self.suffix_hash = image_hash(self.suffix_image) # Duration time area = area_offset((290, 68, 390, 95), self.area[0:2]) @@ -254,8 +287,8 @@ def commission_parse(self): self.genre = self.commission_name_parse(self.name) # Suffix - ocr = SuffixOcr(button, lang='azur_lane', letter=(255, 255, 255), threshold=128, alphabet='IV') - self.suffix = self.beautify_name(ocr.ocr(self.image)) + self.suffix_image = crop_suffix_image(self.image, self.button.area) + self.suffix_hash = image_hash(self.suffix_image) # Duration time area = area_offset((290, 68, 390, 95), self.area[0:2]) @@ -288,7 +321,7 @@ def commission_parse(self): self.status = dic[int(np.argmax(color))] def __str__(self): - name = f'{self.name} | {self.suffix}' + name = f'{self.name} | {self.suffix_hash}' if self.suffix_hash else self.name if not self.valid: return f'{name} (Invalid)' info = {'Genre': self.genre, 'Status': self.status, 'Duration': self.duration} @@ -315,7 +348,7 @@ def __eq__(self, other): if self.genre != other.genre or self.status != other.status: return False if self.category_str == 'daily': - if self.suffix != other.suffix: + if not self.suffix_match(other): return False if self.genre == 'urgent_box': for tag in ['NYB', 'BIW']: @@ -332,7 +365,7 @@ def __eq__(self, other): return False if self.repeat_count != other.repeat_count: return False - if self.genre in ['extra_oil', 'night_oil'] and self.suffix != other.suffix: + if self.genre in ['extra_oil', 'night_oil'] and not self.suffix_match(other): return False return True @@ -340,6 +373,35 @@ def __eq__(self, other): def __hash__(self): return hash(f'{self.genre}_{self.name}') + def suffix_match(self, other, similarity=0.75): + """ + Args: + other (Commission): + similarity (float): 0-1. Similarity. + + Returns: + bool: + """ + if self.suffix_image is None and other.suffix_image is None: + return True + if self.suffix_image is None or other.suffix_image is None: + return False + + def match(image, template): + template = crop(template, (3, 3, template.shape[1] - 3, template.shape[0] - 3), copy=False) + if image.shape[0] < template.shape[0] or image.shape[1] < template.shape[1]: + return 0.0 + + res = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) + _, sim, _, _ = cv2.minMaxLoc(res) + return sim + + sim = max( + match(self.suffix_image, other.suffix_image), + match(other.suffix_image, self.suffix_image) + ) + return sim >= similarity + def parse_time(self, string): """ Args: From 4a1f23032b66645aa49d223e880b67ab3c2358e4 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Thu, 25 Jun 2026 19:34:29 +0800 Subject: [PATCH 3/8] Revert "Upd: [JP] asset GET_ITEMS_X (#5718)" (#5751) This reverts commit c852cff758aa82e19be2da4f320548dfe375ffb4. --- assets/jp/combat/GET_ITEMS_1.png | Bin 13532 -> 9089 bytes assets/jp/combat/GET_ITEMS_2.png | Bin 13609 -> 9896 bytes assets/jp/combat/GET_ITEMS_3.png | Bin 13609 -> 10214 bytes module/combat/assets.py | 6 +++--- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/jp/combat/GET_ITEMS_1.png b/assets/jp/combat/GET_ITEMS_1.png index b321db8955ccb04b812fbe06a899f06f897710b3..1c68ab63cabe3d24072498a562c9e23091d6f082 100644 GIT binary patch literal 9089 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 literal 13532 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 diff --git a/assets/jp/combat/GET_ITEMS_2.png b/assets/jp/combat/GET_ITEMS_2.png index d69a8e86f13bb2430ffc33cb8830e6ef18eb572d..91d02538b5d83f6363bd629d7d1103bd6390b75e 100644 GIT binary patch literal 9896 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 LV0AzKa_@ft>_ckL literal 13609 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�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�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 Date: Thu, 25 Jun 2026 19:36:02 +0800 Subject: [PATCH 4/8] Chore: move hashlib to local import --- module/commission/project.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/commission/project.py b/module/commission/project.py index 9c53b459b..cd88c1628 100644 --- a/module/commission/project.py +++ b/module/commission/project.py @@ -1,5 +1,4 @@ from datetime import datetime, timedelta -import hashlib from module.base.decorator import Config from module.base.filter import Filter @@ -69,6 +68,7 @@ def image_hash(image): if image is None: return '' + import hashlib return hashlib.md5(image.tobytes()).hexdigest() From 8c59d162b10a3bde17dde843ef17bc61f114ce18 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 25 Jun 2026 19:38:21 +0800 Subject: [PATCH 5/8] Upd: [TW] Event entrance of Revelations of Dust Rerun (event_20230223_cn) --- campaign/Readme.md | 1 + module/config/argument/args.json | 80 ++++++++++++++++---------------- module/config/i18n/zh-TW.json | 2 +- 3 files changed, 42 insertions(+), 41 deletions(-) diff --git a/campaign/Readme.md b/campaign/Readme.md index 6b9b05042..eb7caa365 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -301,3 +301,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20260528 | event 20220818 cn | Operation Convergence | - | - | - | 復刻遠匯點作戰 | | 20260605 | event 20260520 cn | Alliance Before the Hagiobull | - | - | - | 聖印前的同盟 | | 20260618 | event 20240521 cn | Light of the Martyrium Rerun | 复刻绽放于辉光之城 | Light of the Martyrium Rerun | 赫輝のマルティリウム(復刻) | - | +| 20260625 | event 20230223 cn | Revelations of Dust | - | - | - | 復刻湮燼塵墟 | diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 374ee6097..e0b7497e9 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1643,8 +1643,8 @@ "type": "select", "value": "campaign_main", "option": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ], "option_cn": [ "event_20240521_cn" @@ -1656,11 +1656,11 @@ "event_20240521_cn" ], "option_tw": [ - "event_20260520_cn" + "event_20230223_cn" ], "option_bold": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ] }, "Mode": { @@ -1925,8 +1925,8 @@ "type": "select", "value": "campaign_main", "option": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ], "option_cn": [ "event_20240521_cn" @@ -1938,11 +1938,11 @@ "event_20240521_cn" ], "option_tw": [ - "event_20260520_cn" + "event_20230223_cn" ], "option_bold": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ] }, "Mode": { @@ -2322,8 +2322,8 @@ "type": "select", "value": "campaign_main", "option": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ], "option_cn": [ "event_20240521_cn" @@ -2335,11 +2335,11 @@ "event_20240521_cn" ], "option_tw": [ - "event_20260520_cn" + "event_20230223_cn" ], "option_bold": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ] }, "Mode": { @@ -4069,8 +4069,8 @@ "type": "select", "value": "campaign_main", "option": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ], "option_cn": [ "event_20240521_cn" @@ -4082,11 +4082,11 @@ "event_20240521_cn" ], "option_tw": [ - "event_20260520_cn" + "event_20230223_cn" ], "option_bold": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ] }, "Mode": { @@ -4483,8 +4483,8 @@ "type": "select", "value": "campaign_main", "option": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ], "option_cn": [ "event_20240521_cn" @@ -4496,11 +4496,11 @@ "event_20240521_cn" ], "option_tw": [ - "event_20260520_cn" + "event_20230223_cn" ], "option_bold": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ] }, "Mode": { @@ -4897,8 +4897,8 @@ "type": "select", "value": "campaign_main", "option": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ], "option_cn": [ "event_20240521_cn" @@ -4910,11 +4910,11 @@ "event_20240521_cn" ], "option_tw": [ - "event_20260520_cn" + "event_20230223_cn" ], "option_bold": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ] }, "Mode": { @@ -5311,8 +5311,8 @@ "type": "select", "value": "campaign_main", "option": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ], "option_cn": [ "event_20240521_cn" @@ -5324,11 +5324,11 @@ "event_20240521_cn" ], "option_tw": [ - "event_20260520_cn" + "event_20230223_cn" ], "option_bold": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ] }, "Mode": { @@ -5715,8 +5715,8 @@ "type": "select", "value": "campaign_main", "option": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ], "option_cn": [ "event_20240521_cn" @@ -5728,11 +5728,11 @@ "event_20240521_cn" ], "option_tw": [ - "event_20260520_cn" + "event_20230223_cn" ], "option_bold": [ - "event_20240521_cn", - "event_20260520_cn" + "event_20230223_cn", + "event_20240521_cn" ] }, "Mode": { diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 64cedf885..60930b400 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -742,7 +742,7 @@ "event_20220915_cn": "復刻紫絳槿嵐", "event_20221124_cn": "復刻鍊金術士與秘密遺跡群島", "event_20221222_cn": "復刻定向折疊", - "event_20230223_cn": "湮燼塵墟", + "event_20230223_cn": "復刻湮燼塵墟", "event_20230525_cn": "空相交會點", "event_20230803_cn": "奏響鳶尾之歌", "event_20230817_cn": "愚者的天平", From ef6de04490e5f0e2b3542d619af143471d77f225 Mon Sep 17 00:00:00 2001 From: wess09 Date: Thu, 25 Jun 2026 20:07:24 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dws-scrcpy=E9=A2=84?= =?UTF-8?q?=E8=A7=88=E4=B8=AD=E7=9A=84=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BC=98=E5=8C=96=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E8=BF=90=E8=A1=8C=E7=8A=B6=E6=80=81=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/webui/api.py | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/module/webui/api.py b/module/webui/api.py index f479e76d6..f830d0c93 100644 --- a/module/webui/api.py +++ b/module/webui/api.py @@ -320,8 +320,10 @@ async def _collect_ws_scrcpy_preroll(session, max_wait=3.0): data = await asyncio.wait_for(session.recv(), timeout=timeout) except asyncio.TimeoutError: continue - if not data: + if data is None: break + if data == b"": + continue parsed = _ws_scrcpy_parse_initial(data) if parsed: display = (parsed.get("displays") or [{}])[0] @@ -359,6 +361,7 @@ def _live_preview_error_message(error): WS_SCRCPY_FILEPATH_REMOTE = "/data/local/tmp/ws-scrcpy-server-v1.19-ws7.jar" WS_SCRCPY_MAGIC_INITIAL = b"scrcpy_initial" WS_SCRCPY_DEVICE_NAME_LENGTH = 64 +WS_SCRCPY_PID_FILE_REMOTE = "/data/local/tmp/ws_scrcpy.pid" def _ws_scrcpy_int(data, offset): @@ -523,14 +526,19 @@ def _server_command(self): ] return f"CLASSPATH={WS_SCRCPY_FILEPATH_REMOTE} nohup app_process {' '.join(args)} >/dev/null 2>&1 &" - def _local_port_open(self): - if not self.local_port: + def _server_running(self): + try: + pid = self.connection.adb_shell(f"test -f {WS_SCRCPY_PID_FILE_REMOTE} && cat {WS_SCRCPY_PID_FILE_REMOTE}", timeout=2) + pid = str(pid or "").strip().split()[0] + except Exception: + pid = "" + if not pid: return False try: - with socket.create_connection(("127.0.0.1", int(self.local_port)), timeout=0.3): - return True - except OSError: + cmdline = self.connection.adb_shell(f"cat /proc/{int(pid)}/cmdline", timeout=2, rstrip=False) + except Exception: return False + return WS_SCRCPY_PACKAGE in str(cmdline) and WS_SCRCPY_VERSION in str(cmdline) def start_server(self): if not os.path.exists(WS_SCRCPY_FILEPATH_LOCAL): @@ -539,7 +547,7 @@ def start_server(self): logger.hr("实时 ws-scrcpy 预览启动") self.connection.adb_push(WS_SCRCPY_FILEPATH_LOCAL, WS_SCRCPY_FILEPATH_REMOTE) self.local_port = self.connection.adb_forward(f"tcp:{WS_SCRCPY_PORT}") - if self._local_port_open(): + if self._server_running(): logger.info("ws-scrcpy server 已在运行,复用设备端服务") return output = self.connection.adb_shell(self._server_command(), timeout=2) @@ -558,7 +566,7 @@ async def connect(self): last_error = None for _index in range(20): try: - self.remote_ws = await connect(url, max_size=None) + self.remote_ws = await connect(url, max_size=None, ping_interval=None, close_timeout=1) self.alive = True return except Exception as e: @@ -1062,8 +1070,10 @@ async def _ws_live_ws_scrcpy(websocket, instance, fps, target_width, bitrate_sca while session.alive: data = await session.recv() - if not data: + if data is None: break + if data == b"": + continue parsed = _ws_scrcpy_parse_initial(data) if parsed: display = (parsed.get("displays") or [{}])[0] From 3efc8135f323ee064da2396615e1517e14b79e55 Mon Sep 17 00:00:00 2001 From: quankong1551 <96553536+quankong1551@users.noreply.github.com> Date: Thu, 25 Jun 2026 21:54:09 +0800 Subject: [PATCH 7/8] =?UTF-8?q?fix(island):=20=E4=BF=AE=E6=AD=A3=E6=B8=AF?= =?UTF-8?q?=E5=8F=A3=E5=95=86=E5=8C=BA=E8=B7=AF=E7=BA=BF=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E8=B5=84=E6=BA=90=20(#395)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新 ROUTE_PORT_BUSINESS_COMPLETE 资源图,匹配当前港口商区路线完成入口 - 同步按钮识别区域与平均颜色,避免沿用旧位置导致误判 --- .../ROUTE_PORT_BUSINESS_COMPLETE.png | Bin 7638 -> 7474 bytes module/island_daily_interact/assets.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/cn/island_daily_interact/ROUTE_PORT_BUSINESS_COMPLETE.png b/assets/cn/island_daily_interact/ROUTE_PORT_BUSINESS_COMPLETE.png index 519439bbd2252181d0b298c2010a583d7b73e4c5..9a3d8b60cb227392e076f23babeef06a038ee694 100644 GIT binary patch delta 4926 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 diff --git a/module/island_daily_interact/assets.py b/module/island_daily_interact/assets.py index cb1e2bf83..df76c922e 100644 --- a/module/island_daily_interact/assets.py +++ b/module/island_daily_interact/assets.py @@ -23,7 +23,7 @@ ROUTE_BUSINESS_NURSERY_COMPLETE = Button(area={'cn': (801, 312, 1033, 344), 'en': (801, 312, 1033, 344), 'jp': (801, 312, 1033, 344), 'tw': (801, 312, 1033, 344)}, color={'cn': (233, 235, 233), 'en': (233, 235, 233), 'jp': (233, 235, 233), 'tw': (233, 235, 233)}, button={'cn': (801, 312, 1033, 344), 'en': (801, 312, 1033, 344), 'jp': (801, 312, 1033, 344), 'tw': (801, 312, 1033, 344)}, file={'cn': './assets/cn/island_daily_interact/ROUTE_BUSINESS_NURSERY_COMPLETE.png', 'en': './assets/cn/island_daily_interact/ROUTE_BUSINESS_NURSERY_COMPLETE.png', 'jp': './assets/cn/island_daily_interact/ROUTE_BUSINESS_NURSERY_COMPLETE.png', 'tw': './assets/cn/island_daily_interact/ROUTE_BUSINESS_NURSERY_COMPLETE.png'}) ROUTE_JUU_NURSERY_COMPLETE = Button(area={'cn': (801, 344, 1033, 373), 'en': (801, 344, 1033, 373), 'jp': (801, 344, 1033, 373), 'tw': (801, 344, 1033, 373)}, color={'cn': (232, 233, 233), 'en': (232, 233, 233), 'jp': (232, 233, 233), 'tw': (232, 233, 233)}, button={'cn': (801, 344, 1033, 373), 'en': (801, 344, 1033, 373), 'jp': (801, 344, 1033, 373), 'tw': (801, 344, 1033, 373)}, file={'cn': './assets/cn/island_daily_interact/ROUTE_JUU_NURSERY_COMPLETE.png', 'en': './assets/cn/island_daily_interact/ROUTE_JUU_NURSERY_COMPLETE.png', 'jp': './assets/cn/island_daily_interact/ROUTE_JUU_NURSERY_COMPLETE.png', 'tw': './assets/cn/island_daily_interact/ROUTE_JUU_NURSERY_COMPLETE.png'}) ROUTE_PLAIN_COMPLETE = Button(area={'cn': (801, 344, 1033, 373), 'en': (801, 344, 1033, 373), 'jp': (801, 344, 1033, 373), 'tw': (801, 344, 1033, 373)}, color={'cn': (232, 233, 233), 'en': (232, 233, 233), 'jp': (232, 233, 233), 'tw': (232, 233, 233)}, button={'cn': (801, 344, 1033, 373), 'en': (801, 344, 1033, 373), 'jp': (801, 344, 1033, 373), 'tw': (801, 344, 1033, 373)}, file={'cn': './assets/cn/island_daily_interact/ROUTE_PLAIN_COMPLETE.png', 'en': './assets/cn/island_daily_interact/ROUTE_PLAIN_COMPLETE.png', 'jp': './assets/cn/island_daily_interact/ROUTE_PLAIN_COMPLETE.png', 'tw': './assets/cn/island_daily_interact/ROUTE_PLAIN_COMPLETE.png'}) -ROUTE_PORT_BUSINESS_COMPLETE = Button(area={'cn': (801, 344, 1033, 373), 'en': (801, 344, 1033, 373), 'jp': (801, 344, 1033, 373), 'tw': (801, 344, 1033, 373)}, color={'cn': (232, 233, 233), 'en': (232, 233, 233), 'jp': (232, 233, 233), 'tw': (232, 233, 233)}, button={'cn': (801, 344, 1033, 373), 'en': (801, 344, 1033, 373), 'jp': (801, 344, 1033, 373), 'tw': (801, 344, 1033, 373)}, file={'cn': './assets/cn/island_daily_interact/ROUTE_PORT_BUSINESS_COMPLETE.png', 'en': './assets/cn/island_daily_interact/ROUTE_PORT_BUSINESS_COMPLETE.png', 'jp': './assets/cn/island_daily_interact/ROUTE_PORT_BUSINESS_COMPLETE.png', 'tw': './assets/cn/island_daily_interact/ROUTE_PORT_BUSINESS_COMPLETE.png'}) +ROUTE_PORT_BUSINESS_COMPLETE = Button(area={'cn': (801, 311, 1033, 340), 'en': (801, 311, 1033, 340), 'jp': (801, 311, 1033, 340), 'tw': (801, 311, 1033, 340)}, color={'cn': (236, 237, 237), 'en': (236, 237, 237), 'jp': (236, 237, 237), 'tw': (236, 237, 237)}, button={'cn': (801, 311, 1033, 340), 'en': (801, 311, 1033, 340), 'jp': (801, 311, 1033, 340), 'tw': (801, 311, 1033, 340)}, file={'cn': './assets/cn/island_daily_interact/ROUTE_PORT_BUSINESS_COMPLETE.png', 'en': './assets/cn/island_daily_interact/ROUTE_PORT_BUSINESS_COMPLETE.png', 'jp': './assets/cn/island_daily_interact/ROUTE_PORT_BUSINESS_COMPLETE.png', 'tw': './assets/cn/island_daily_interact/ROUTE_PORT_BUSINESS_COMPLETE.png'}) ROUTE_PORT_COMPLETE = Button(area={'cn': (801, 344, 1033, 373), 'en': (801, 344, 1033, 373), 'jp': (801, 344, 1033, 373), 'tw': (801, 344, 1033, 373)}, color={'cn': (232, 233, 233), 'en': (232, 233, 233), 'jp': (232, 233, 233), 'tw': (232, 233, 233)}, button={'cn': (801, 344, 1033, 373), 'en': (801, 344, 1033, 373), 'jp': (801, 344, 1033, 373), 'tw': (801, 344, 1033, 373)}, file={'cn': './assets/cn/island_daily_interact/ROUTE_PORT_COMPLETE.png', 'en': './assets/cn/island_daily_interact/ROUTE_PORT_COMPLETE.png', 'jp': './assets/cn/island_daily_interact/ROUTE_PORT_COMPLETE.png', 'tw': './assets/cn/island_daily_interact/ROUTE_PORT_COMPLETE.png'}) TEMPLATE_BUSINESS_DELIVERY_TASK_ICON = Template(file={'cn': './assets/cn/island_daily_interact/TEMPLATE_BUSINESS_DELIVERY_TASK_ICON.png', 'en': './assets/cn/island_daily_interact/TEMPLATE_BUSINESS_DELIVERY_TASK_ICON.png', 'jp': './assets/cn/island_daily_interact/TEMPLATE_BUSINESS_DELIVERY_TASK_ICON.png', 'tw': './assets/cn/island_daily_interact/TEMPLATE_BUSINESS_DELIVERY_TASK_ICON.png'}) TEMPLATE_JUU_EXPRESS_TASK_ICON = Template(file={'cn': './assets/cn/island_daily_interact/TEMPLATE_JUU_EXPRESS_TASK_ICON.png', 'en': './assets/cn/island_daily_interact/TEMPLATE_JUU_EXPRESS_TASK_ICON.png', 'jp': './assets/cn/island_daily_interact/TEMPLATE_JUU_EXPRESS_TASK_ICON.png', 'tw': './assets/cn/island_daily_interact/TEMPLATE_JUU_EXPRESS_TASK_ICON.png'}) From 305987ecf1493c214e0ddbec20f3cd353d7d8f40 Mon Sep 17 00:00:00 2001 From: zet-wu Date: Thu, 25 Jun 2026 23:10:16 +0800 Subject: [PATCH 8/8] =?UTF-8?q?fix(campaign):=20=E4=BF=AE=E5=A4=8D"?= =?UTF-8?q?=E7=BE=8E=E6=A2=A6=E5=B7=A1=E6=BC=94=EF=BC=9A=E5=A5=87=E5=A6=99?= =?UTF-8?q?=E5=A4=9C"=E6=B4=BB=E5=8A=A8sp=E5=85=B3=E5=8D=A1=E9=85=8D?= =?UTF-8?q?=E7=BD=AEMAP=5FHAS=5FMODE=5FSWITCH=E8=A2=AB=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E4=B8=BATrue=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- campaign/event_20260625_cn/sp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/campaign/event_20260625_cn/sp.py b/campaign/event_20260625_cn/sp.py index fc756161c..64b1e5647 100644 --- a/campaign/event_20260625_cn/sp.py +++ b/campaign/event_20260625_cn/sp.py @@ -66,7 +66,7 @@ class Config: MAP_HAS_MYSTERY = False MAP_CHAPTER_SWITCH_20260326 = True STAGE_ENTRANCE = ['half', '20240725'] - MAP_HAS_MODE_SWITCH = True + MAP_HAS_MODE_SWITCH = False STAGE_INCREASE_AB = True MAP_WALK_USE_CURRENT_FLEET = True STAR_REQUIRE_1 = 0