From 888d72b6826563dd82d53b9d4da8f45f433d46f5 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Thu, 7 Mar 2024 17:06:05 +0800 Subject: [PATCH 01/96] Fix: handle info bar which obstructs DORM_RED_DOT (#3528) * Upd: [CN, EN, JP] dorm asset DORM_RED_DOT * Fix: handle info bar which obstructs DORM_RED_DOT --- module/dorm/dorm.py | 1 + 1 file changed, 1 insertion(+) diff --git a/module/dorm/dorm.py b/module/dorm/dorm.py index 873504dc0..ef9983a91 100644 --- a/module/dorm/dorm.py +++ b/module/dorm/dorm.py @@ -408,6 +408,7 @@ class RewardDorm(UI): return self.ui_ensure(page_dormmenu) + self.handle_info_bar() if not self.appear(DORM_RED_DOT, offset=(30, 30)): logger.info('Nothing to collect. Dorm collecting skipped.') collect = False From caeb091ce663b39961ba8e0c844c60c8d4acd08d Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Mon, 11 Mar 2024 21:19:26 +0800 Subject: [PATCH 02/96] Add: War Archives Counterattack within the Fjord --- ...EMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png | Bin 0 -> 18975 bytes campaign/Readme.md | 19 +++-- campaign/war_archives_20200603_cn/sp1.py | 74 +++++++++++++++++ campaign/war_archives_20200603_cn/sp2.py | 76 +++++++++++++++++ campaign/war_archives_20200603_cn/sp3.py | 77 ++++++++++++++++++ module/config/argument/args.json | 6 +- module/config/i18n/en-US.json | 1 + module/config/i18n/ja-JP.json | 1 + module/config/i18n/zh-CN.json | 1 + module/config/i18n/zh-TW.json | 19 +++-- module/war_archives/assets.py | 1 + module/war_archives/dictionary.py | 1 + 12 files changed, 255 insertions(+), 21 deletions(-) create mode 100644 assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png create mode 100644 campaign/war_archives_20200603_cn/sp1.py create mode 100644 campaign/war_archives_20200603_cn/sp2.py create mode 100644 campaign/war_archives_20200603_cn/sp3.py diff --git a/assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png b/assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png new file mode 100644 index 0000000000000000000000000000000000000000..59e24d63c0af8c4ae6a766564b6d8d870feae5ac GIT binary patch literal 18975 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 literal 0 HcmV?d00001 diff --git a/campaign/Readme.md b/campaign/Readme.md index 7ab90fea2..862285ac2 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -24,22 +24,23 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20180607 | war archives 20180607 cn | Ink Stained Steel Sakura | 墨染的钢铁之花 | Ink Stained Steel Sakura | 墨染まりし鋼の桜 | 墨染的鋼鐵之花 | | 20180726 | war archives 20180726 cn | Iris of Light and Dark | 光与影的鸢尾之华 | Iris of Light and Dark | 光と影のアイリス | 光與影的鳶尾之華 | | 20210121 | war archives 20181227 cn | Crimson Echoes | 苍红的回响 | Crimson Echoes | 縹映る深緋の残響 | 蒼紅的迴響 | -| 20210513 | war archives 20200820 cn | Scherzo of Iron and Blood | 铁血音符誓言 | Scherzo of Iron and Blood | 黒鉄の楽章 誓いの海 | - | +| 20210513 | war archives 20200820 cn | Scherzo of Iron and Blood | 铁血音符誓言 | Scherzo of Iron and Blood | 黒鉄の楽章 誓いの海 | 鐵血音符誓言 | | 20211014 | war archives 20211014 cn | Crescendo of Polaris | 激奏的Polaris | Crescendo of Polaris | 激奏のポラリス | 激奏的Polaris | -| 20220113 | war archives 20190911 cn | Empyreal Tragicomedy | 神圣的悲喜剧 | Empyreal Tragicomedy | 悲歎せし焔海の詩 | - | -| 20220407 | war archives 20210325 cn | Ashen Simulacrum | 箱庭疗法 | Ashen Simulacrum | 開かれし紺碧の砂箱 | - | +| 20220113 | war archives 20190911 cn | Empyreal Tragicomedy | 神圣的悲喜剧 | Empyreal Tragicomedy | 悲歎せし焔海の詩 | 神聖的悲喜劇 | +| 20220407 | war archives 20210325 cn | Ashen Simulacrum | 箱庭疗法 | Ashen Simulacrum | 開かれし紺碧の砂箱 | 箱庭療法 | | 20220721 | war archives 20210624 cn | Swirling Cherry Blossoms | 浮樱影华 | Swirling Cherry Blossoms | 翳りし満ちる影の華 | 浮櫻影華 | -| 20220901 | war archives 20200806 cn | The Enigma and the Shark | 最重要的宝物 | The Enigma and the Shark | 鉄血鮫とエニグマ | - | -| 20221013 | war archives 20201029 cn | Universe in Unison | 激唱的UNIVERSE | Universe in Unison | 激唱のユニバース | - | +| 20220901 | war archives 20200806 cn | The Enigma and the Shark | 最重要的宝物 | The Enigma and the Shark | 鉄血鮫とエニグマ | 最重要的寶物 | +| 20221013 | war archives 20201029 cn | Universe in Unison | 激唱的UNIVERSE | Universe in Unison | 激唱のユニバース | 激唱的UNIVERSE | | 20221117 | war archives 20200903 cn | Stars of the Shimmering Fjord | 峡湾间的星辰 | Stars of the Shimmering Fjord | 輝ける峡湾の星 | 峽灣間的星辰 | | 20221117 | war archives 20210819 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | 微層混合 | | 20211028 | war archives 20211028 cn | Skybound Oratorio | 穹顶下的圣咏曲 | Skybound Oratorio | 神穹を衝く聖歌 | 穹頂下的聖詠曲 | | 20230420 | war archives 20220210 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | 北境序曲 | | 20230511 | war archives 20220414 cn | Aurora Noctis | 永夜幻光 | Aurora Noctis | 極夜照らす幻光 | 永夜幻光 | -| 20230831 | war archives 20201229 cn | Inverted Orthant | 负象限作战 | Inverted Orthant | 虚畳なりし限象 | - | -| 20240118 | war archives 20200917 cn | Dreamwaker's Butterfly | 蝶海梦花 | Dreamwaker's Butterfly | 刹那觀る胡蝶の夢 | - | -| 20240118 | war archives 20210527 cn | Mirror Involution | 镜位螺旋 | Mirror Involution | 照らす螺旋の鏡海 | - | -| 20240222 | war archives 20210225 cn | Khorovod of Dawn's Rime | 破晓冰华 | Khorovod of Dawn's Rime | 暁射す氷華の嵐 | - | +| 20230713 | war archives 20200603 cn | Counterattack Within the Fjord | 峡湾间的反击 | Counterattack Within the Fjord | 峡湾間の反撃 | 峽灣間的反擊 | +| 20230831 | war archives 20201229 cn | Inverted Orthant | 负象限作战 | Inverted Orthant | 虚畳なりし限象 | 負象限作戰 | +| 20240118 | war archives 20200917 cn | Dreamwaker's Butterfly | 蝶海梦花 | Dreamwaker's Butterfly | 刹那觀る胡蝶の夢 | 蝶海夢花 | +| 20240118 | war archives 20210527 cn | Mirror Involution | 镜位螺旋 | Mirror Involution | 照らす螺旋の鏡海 | 鏡位螺旋 | +| 20240222 | war archives 20210225 cn | Khorovod of Dawn's Rime | 破晓冰华 | Khorovod of Dawn's Rime | 暁射す氷華の嵐 | 破曉冰華 | | 20200227 | event 20200227 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | - | | 20200312 | event 20200312 cn | The Solomon Ranger | 复刻斯图尔特的硝烟 | The Solomon Ranger Rerun | 南洋に靡く硝煙(復刻) | - | | 20200326 | event 20200326 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | - | diff --git a/campaign/war_archives_20200603_cn/sp1.py b/campaign/war_archives_20200603_cn/sp1.py new file mode 100644 index 000000000..fedbeea0f --- /dev/null +++ b/campaign/war_archives_20200603_cn/sp1.py @@ -0,0 +1,74 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +MAP = CampaignMap('SP1') +MAP.shape = 'K7' +MAP.camera_data = ['D2', 'D5', 'H2', 'H5'] +MAP.camera_data_spawn_point = ['H5'] +MAP.map_data = """ + ++ ++ ++ -- ME -- -- -- -- ++ -- + -- ME -- ++ -- ++ ++ ME -- ++ ME + ME -- -- Me -- ME ++ -- Me ++ -- + -- -- -- -- -- ++ ME -- -- -- SP + ME -- -- Me -- -- -- __ -- -- SP + -- -- ME ++ -- MS -- Me -- -- -- + -- -- -- ++ MB -- 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 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': 1}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Z18'] + MOVABLE_ENEMY_TURN = (3,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.073, 1.093) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.038, 1.057) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.008, 1.026) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20200603_cn/sp2.py b/campaign/war_archives_20200603_cn/sp2.py new file mode 100644 index 000000000..4d69a20a9 --- /dev/null +++ b/campaign/war_archives_20200603_cn/sp2.py @@ -0,0 +1,76 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +from .sp1 import Config as ConfigBase + +MAP = CampaignMap('SP2') +MAP.shape = 'K7' +MAP.camera_data = ['D2', 'D5', 'H2', 'H5'] +MAP.camera_data_spawn_point = ['D2', 'H2'] +MAP.map_data = """ + -- -- ++ ++ SP -- SP ++ ++ ++ ++ + -- ME ++ ++ -- -- -- -- -- ME ME + ME -- -- MS -- -- -- ME -- -- MB + ++ -- -- -- Me -- Me ++ __ -- MB + -- -- ++ ++ ++ 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 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, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Z2'] + MOVABLE_ENEMY_TURN = (3,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.135, 1.157) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.098, 1.118) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.066, 1.085) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20200603_cn/sp3.py b/campaign/war_archives_20200603_cn/sp3.py new file mode 100644 index 000000000..0b6442b84 --- /dev/null +++ b/campaign/war_archives_20200603_cn/sp3.py @@ -0,0 +1,77 @@ +from ..campaign_war_archives.campaign_base import CampaignBase +from module.logger import logger +from module.map.map_base import CampaignMap +from module.map.map_grids import RoadGrids, SelectedGrids + +from .sp1 import Config as ConfigBase + +MAP = CampaignMap('SP3') +MAP.shape = 'K7' +MAP.camera_data = ['D2', 'D5', 'H2', 'H5'] +MAP.camera_data_spawn_point = ['D2'] +MAP.map_data = """ + ++ ++ ++ MS ++ ME -- ME ++ ++ ++ + SP -- -- -- -- -- MS -- ME Me -- + SP -- -- -- -- Me -- __ -- -- ME + ++ ++ ++ MS -- ++ ++ -- Me ++ -- + MB MB ++ -- Me ++ ++ -- -- ++ ++ + -- -- -- -- -- -- -- -- -- ME -- + ME ME -- Me -- ME ++ ME -- ME -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 +""" +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, 'enemy': 1}, + {'battle': 5, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, K1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, K7, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Z19'] + MOVABLE_ENEMY_TURN = (3,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.168, 1.190) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.130, 1.150) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.097, 1.116) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_5(self): + return self.fleet_boss.clear_boss() diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 2eda65ce6..2b187ba39 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -3376,6 +3376,7 @@ "war_archives_20190911_cn", "war_archives_20191010_en", "war_archives_20191031_en", + "war_archives_20200603_cn", "war_archives_20200806_cn", "war_archives_20200820_cn", "war_archives_20200903_cn", @@ -3393,13 +3394,12 @@ "war_archives_20220414_cn" ], "option_bold": [ - "war_archives_20210225_cn", - "war_archives_20220414_cn" + "war_archives_20210225_cn" ], "cn": "war_archives_20210225_cn", "en": "war_archives_20210225_cn", "jp": "war_archives_20210225_cn", - "tw": "war_archives_20220414_cn" + "tw": "war_archives_20210225_cn" }, "Mode": { "type": "select", diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 7b793dcd1..b135651f9 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -731,6 +731,7 @@ "war_archives_20190911_cn": "archives Empyreal Tragicomedy", "war_archives_20191010_en": "archives Encircling Graf Spee", "war_archives_20191031_en": "archives Divergent Chessboard", + "war_archives_20200603_cn": "archives Counterattack Within the Fjord", "war_archives_20200806_cn": "archives The Enigma and the Shark", "war_archives_20200820_cn": "archives Scherzo of Iron and Blood", "war_archives_20200903_cn": "archives Stars of the Shimmering Fjord", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index ef7c6a883..292d80a98 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -731,6 +731,7 @@ "war_archives_20190911_cn": "檔案 悲歎せし焔海の詩", "war_archives_20191010_en": "檔案 アドミラル・グラーフ・シュペー追撃戦", "war_archives_20191031_en": "檔案 鏡写されし異色", + "war_archives_20200603_cn": "檔案 峡湾間の反撃", "war_archives_20200806_cn": "檔案 鉄血鮫とエニグマ", "war_archives_20200820_cn": "檔案 黒鉄の楽章 誓いの海", "war_archives_20200903_cn": "檔案 輝ける峡湾の星", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 5c226df52..597a58969 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -731,6 +731,7 @@ "war_archives_20190911_cn": "档案 神圣的悲喜剧", "war_archives_20191010_en": "档案 围剿斯佩伯爵", "war_archives_20191031_en": "档案 异色格", + "war_archives_20200603_cn": "档案 峡湾间的反击", "war_archives_20200806_cn": "档案 最重要的宝物", "war_archives_20200820_cn": "档案 铁血音符誓言", "war_archives_20200903_cn": "档案 峡湾间的星辰", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 611647c01..1e9080fcf 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -728,18 +728,19 @@ "war_archives_20190221_en": "檔案 凜冬王冠", "war_archives_20190321_en": "檔案 紅染的參訪者", "war_archives_20190620_en": "檔案 光榮的一戰", - "war_archives_20190911_cn": "archives Empyreal Tragicomedy", + "war_archives_20190911_cn": "檔案 神聖的悲喜劇", "war_archives_20191010_en": "檔案 圍剿斯佩伯爵", "war_archives_20191031_en": "檔案 異色格", - "war_archives_20200806_cn": "archives The Enigma and the Shark", - "war_archives_20200820_cn": "archives Scherzo of Iron and Blood", + "war_archives_20200603_cn": "檔案 峽灣間的反擊", + "war_archives_20200806_cn": "檔案 最重要的寶物", + "war_archives_20200820_cn": "檔案 鐵血音符誓言", "war_archives_20200903_cn": "檔案 峽灣間的星辰", - "war_archives_20200917_cn": "archives Dreamwakers Butterfly", - "war_archives_20201029_cn": "archives Universe in Unison", - "war_archives_20201229_cn": "archives Inverted Orthant", - "war_archives_20210225_cn": "archives Khorovod of Dawns Rime", - "war_archives_20210325_cn": "archives Ashen Simulacrum", - "war_archives_20210527_cn": "archives Mirror Involution", + "war_archives_20200917_cn": "檔案 蝶海夢花", + "war_archives_20201029_cn": "檔案 激唱的UNIVERSE", + "war_archives_20201229_cn": "檔案 負象限作戰", + "war_archives_20210225_cn": "檔案 破曉冰華", + "war_archives_20210325_cn": "檔案 箱庭療法", + "war_archives_20210527_cn": "檔案 鏡位螺旋", "war_archives_20210624_cn": "檔案 浮櫻影華", "war_archives_20210819_cn": "檔案 微層混合", "war_archives_20211014_cn": "檔案 激奏的Polaris", diff --git a/module/war_archives/assets.py b/module/war_archives/assets.py index 52b5e16c7..28c72e747 100644 --- a/module/war_archives/assets.py +++ b/module/war_archives/assets.py @@ -7,6 +7,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'}) 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_COUNTERATTACK_WITHIN_THE_FJORD = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png', 'en': './assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png', 'jp': './assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png', 'tw': './assets/cn/war_archives/TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD.png'}) TEMPLATE_CRESCENDO_OF_POLARIS = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png', 'en': './assets/en/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png', 'jp': './assets/jp/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png', 'tw': './assets/cn/war_archives/TEMPLATE_CRESCENDO_OF_POLARIS.png'}) TEMPLATE_CRIMSON_ECHOES = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_CRIMSON_ECHOES.png', 'en': './assets/en/war_archives/TEMPLATE_CRIMSON_ECHOES.png', 'jp': './assets/jp/war_archives/TEMPLATE_CRIMSON_ECHOES.png', 'tw': './assets/cn/war_archives/TEMPLATE_CRIMSON_ECHOES.png'}) TEMPLATE_DIVERGENT_CHESSBOARD = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png', 'en': './assets/en/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png', 'jp': './assets/jp/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png', 'tw': './assets/tw/war_archives/TEMPLATE_DIVERGENT_CHESSBOARD.png'}) diff --git a/module/war_archives/dictionary.py b/module/war_archives/dictionary.py index 0ecee5f89..752dffbce 100644 --- a/module/war_archives/dictionary.py +++ b/module/war_archives/dictionary.py @@ -27,4 +27,5 @@ dic_archives_template = { 'war_archives_20200917_cn': TEMPLATE_DREAMWAKERS_BUTTERFLY, 'war_archives_20210527_cn': TEMPLATE_MIRROR_INVOLUTION, 'war_archives_20210225_cn': TEMPLATE_KHOROVOD_OF_DAWNS_RIME, + 'war_archives_20200603_cn': TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD, } From 0ddd253514192910c6958cb894630a162b0aeb17 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Mon, 11 Mar 2024 22:26:33 +0800 Subject: [PATCH 03/96] Add: War Archives Prelude under the Moon --- .../TEMPLATE_PRELUDE_UNDER_THE_MOON.png | Bin 0 -> 23651 bytes campaign/Readme.md | 1 + campaign/war_archives_20190314_en/sp1.py | 59 ++++++++++++++++ campaign/war_archives_20190314_en/sp2.py | 66 ++++++++++++++++++ campaign/war_archives_20190314_en/sp3.py | 64 +++++++++++++++++ module/config/argument/args.json | 33 ++++----- module/config/i18n/en-US.json | 1 + module/config/i18n/ja-JP.json | 1 + module/config/i18n/zh-CN.json | 1 + module/config/i18n/zh-TW.json | 1 + module/war_archives/assets.py | 1 + module/war_archives/dictionary.py | 1 + 12 files changed, 213 insertions(+), 16 deletions(-) create mode 100644 assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png create mode 100644 campaign/war_archives_20190314_en/sp1.py create mode 100644 campaign/war_archives_20190314_en/sp2.py create mode 100644 campaign/war_archives_20190314_en/sp3.py diff --git a/assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png b/assets/cn/war_archives/TEMPLATE_PRELUDE_UNDER_THE_MOON.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3a9b3177ccb298cb8d26325013890f84ccfeaa GIT binary patch literal 23651 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 Date: Mon, 11 Mar 2024 22:47:32 +0800 Subject: [PATCH 04/96] Add: War Archives The Solomon Ranger --- .../TEMPLATE_THE_SOLOMON_RANGER.png | Bin 0 -> 34917 bytes campaign/Readme.md | 1 + campaign/war_archives_20200312_cn/sp1.py | 59 ++++++++++++++++ campaign/war_archives_20200312_cn/sp2.py | 66 ++++++++++++++++++ campaign/war_archives_20200312_cn/sp3.py | 64 +++++++++++++++++ module/config/argument/args.json | 1 + module/config/i18n/en-US.json | 1 + module/config/i18n/ja-JP.json | 1 + module/config/i18n/zh-CN.json | 1 + module/config/i18n/zh-TW.json | 1 + module/war_archives/assets.py | 1 + module/war_archives/dictionary.py | 1 + 12 files changed, 197 insertions(+) create mode 100644 assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png create mode 100644 campaign/war_archives_20200312_cn/sp1.py create mode 100644 campaign/war_archives_20200312_cn/sp2.py create mode 100644 campaign/war_archives_20200312_cn/sp3.py diff --git a/assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png b/assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png new file mode 100644 index 0000000000000000000000000000000000000000..3ca7b48218f7a881b93730486633d7cef0b9e338 GIT binary patch literal 34917 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 gGa;AO)9>25Huo-f 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 QX8-^I07*qoM6N<$f+iVZEdT%j literal 0 HcmV?d00001 diff --git a/campaign/Readme.md b/campaign/Readme.md index d52af15cb..8b7ec35fa 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -24,6 +24,7 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20180607 | war archives 20180607 cn | Ink Stained Steel Sakura | 墨染的钢铁之花 | Ink Stained Steel Sakura | 墨染まりし鋼の桜 | 墨染的鋼鐵之花 | | 20180717 | war archives 20190314 en | Prelude under the Moon | 月光下的序曲 | Prelude under the Moon | 月夜の開幕曲 | 月光下的序曲 | | 20180726 | war archives 20180726 cn | Iris of Light and Dark | 光与影的鸢尾之华 | Iris of Light and Dark | 光と影のアイリス | 光與影的鳶尾之華 | +| 20200312 | war archives 20200312 cn | The Solomon Ranger | 斯图尔特的硝烟 | The Solomon Ranger | 南洋に靡く硝煙 | 斯圖爾特的硝煙 | | 20210121 | war archives 20181227 cn | Crimson Echoes | 苍红的回响 | Crimson Echoes | 縹映る深緋の残響 | 蒼紅的迴響 | | 20210513 | war archives 20200820 cn | Scherzo of Iron and Blood | 铁血音符誓言 | Scherzo of Iron and Blood | 黒鉄の楽章 誓いの海 | 鐵血音符誓言 | | 20211014 | war archives 20211014 cn | Crescendo of Polaris | 激奏的Polaris | Crescendo of Polaris | 激奏のポラリス | 激奏的Polaris | diff --git a/campaign/war_archives_20200312_cn/sp1.py b/campaign/war_archives_20200312_cn/sp1.py new file mode 100644 index 000000000..297b40f54 --- /dev/null +++ b/campaign/war_archives_20200312_cn/sp1.py @@ -0,0 +1,59 @@ +from ..campaign_war_archives.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 = 'H5' +MAP.camera_data = ['D2', 'D3', 'E2', 'E3'] +MAP.camera_data_spawn_point = ['D3', 'D2'] +MAP.map_data = """ + ++ ++ ++ -- ME ME MB ++ + SP -- -- Me __ ME -- -- + -- ME ++ -- Me ++ MB -- + -- Me -- ME -- ++ -- ME + 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, \ +A2, B2, C2, D2, E2, F2, G2, H2, \ +A3, B3, C3, D3, E3, F3, G3, H3, \ +A4, B4, C4, D4, E4, F4, G4, H4, \ +A5, B5, C5, D5, E5, F5, G5, H5, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = False + 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' + + def battle_0(self): + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20200312_cn/sp2.py b/campaign/war_archives_20200312_cn/sp2.py new file mode 100644 index 000000000..d68dcf8c1 --- /dev/null +++ b/campaign/war_archives_20200312_cn/sp2.py @@ -0,0 +1,66 @@ +from ..campaign_war_archives.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 = 'G7' +MAP.camera_data = ['D2', 'D5'] +MAP.camera_data_spawn_point = ['D5'] +MAP.map_data = """ + ++ ++ -- ME -- ME MB + -- ++ -- -- -- -- MB + ME -- Me -- ++ ++ ++ + -- -- Me __ -- ME MB + -- ME ++ -- ++ ME -- + SP -- -- -- ++ -- ME + ++ SP -- Me -- ME -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'mystery': 1}, + {'battle': 1, 'enemy': 1}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, \ +A2, B2, C2, D2, E2, F2, G2, \ +A3, B3, C3, D3, E3, F3, G3, \ +A4, B4, C4, D4, E4, F4, G4, \ +A5, B5, C5, D5, E5, F5, G5, \ +A6, B6, C6, D6, E6, F6, G6, \ +A7, B7, C7, D7, E7, F7, G7, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = False + MAP_HAS_AMBUSH = True + MAP_HAS_MYSTERY = True + # ===== End of generated config ===== + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20200312_cn/sp3.py b/campaign/war_archives_20200312_cn/sp3.py new file mode 100644 index 000000000..392f05ba2 --- /dev/null +++ b/campaign/war_archives_20200312_cn/sp3.py @@ -0,0 +1,64 @@ +from ..campaign_war_archives.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 = 'I6' +MAP.camera_data = ['D2', 'D4', 'F2', 'F4'] +MAP.camera_data_spawn_point = ['F2', 'D4'] +MAP.map_data = """ + ++ MB -- ME -- Me -- ++ ++ + MB -- -- -- ++ -- ME ++ ++ + MB ME __ -- -- ME -- ME SP + ++ ++ ++ -- -- -- -- ++ -- + MB -- ME Me -- ++ -- Me -- + -- ME -- -- 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5, 'enemy': 1, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = False + 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' + + def battle_0(self): + 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() diff --git a/module/config/argument/args.json b/module/config/argument/args.json index defb93a2f..728c5ded9 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -3377,6 +3377,7 @@ "war_archives_20190911_cn", "war_archives_20191010_en", "war_archives_20191031_en", + "war_archives_20200312_cn", "war_archives_20200603_cn", "war_archives_20200806_cn", "war_archives_20200820_cn", diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 95adb22f1..31f8ebae4 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -732,6 +732,7 @@ "war_archives_20190911_cn": "archives Empyreal Tragicomedy", "war_archives_20191010_en": "archives Encircling Graf Spee", "war_archives_20191031_en": "archives Divergent Chessboard", + "war_archives_20200312_cn": "archives The Solomon Ranger", "war_archives_20200603_cn": "archives Counterattack Within the Fjord", "war_archives_20200806_cn": "archives The Enigma and the Shark", "war_archives_20200820_cn": "archives Scherzo of Iron and Blood", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 8df77d081..f8d3297a0 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -732,6 +732,7 @@ "war_archives_20190911_cn": "檔案 悲歎せし焔海の詩", "war_archives_20191010_en": "檔案 アドミラル・グラーフ・シュペー追撃戦", "war_archives_20191031_en": "檔案 鏡写されし異色", + "war_archives_20200312_cn": "檔案 南洋に靡く硝煙", "war_archives_20200603_cn": "檔案 峡湾間の反撃", "war_archives_20200806_cn": "檔案 鉄血鮫とエニグマ", "war_archives_20200820_cn": "檔案 黒鉄の楽章 誓いの海", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 62daee14f..e86cef6e6 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -732,6 +732,7 @@ "war_archives_20190911_cn": "档案 神圣的悲喜剧", "war_archives_20191010_en": "档案 围剿斯佩伯爵", "war_archives_20191031_en": "档案 异色格", + "war_archives_20200312_cn": "档案 斯图尔特的硝烟", "war_archives_20200603_cn": "档案 峡湾间的反击", "war_archives_20200806_cn": "档案 最重要的宝物", "war_archives_20200820_cn": "档案 铁血音符誓言", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 7ef575243..8d09a25ce 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -732,6 +732,7 @@ "war_archives_20190911_cn": "檔案 神聖的悲喜劇", "war_archives_20191010_en": "檔案 圍剿斯佩伯爵", "war_archives_20191031_en": "檔案 異色格", + "war_archives_20200312_cn": "檔案 斯圖爾特的硝煙", "war_archives_20200603_cn": "檔案 峽灣間的反擊", "war_archives_20200806_cn": "檔案 最重要的寶物", "war_archives_20200820_cn": "檔案 鐵血音符誓言", diff --git a/module/war_archives/assets.py b/module/war_archives/assets.py index ae8d43173..5afb447eb 100644 --- a/module/war_archives/assets.py +++ b/module/war_archives/assets.py @@ -30,6 +30,7 @@ TEMPLATE_STARS_OF_THE_SHIMMERING_FJORD = Template(file={'cn': './assets/cn/war_a TEMPLATE_STRIVE_WISH_AND_STRATEGIZE = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png', 'en': './assets/en/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png', 'jp': './assets/jp/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png', 'tw': './assets/tw/war_archives/TEMPLATE_STRIVE_WISH_AND_STRATEGIZE.png'}) TEMPLATE_SWIRLING_CHERRY_BLOSSOMS = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png', 'en': './assets/en/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png', 'jp': './assets/cn/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png', 'tw': './assets/cn/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png'}) TEMPLATE_THE_ENIGMA_AND_THE_SHARK = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png', 'en': './assets/en/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png', 'jp': './assets/cn/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png', 'tw': './assets/cn/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png'}) +TEMPLATE_THE_SOLOMON_RANGER = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png', 'en': './assets/en/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png', 'jp': './assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png', 'tw': './assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png'}) TEMPLATE_UNIVERSE_IN_UNISON = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'en': './assets/en/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'jp': './assets/jp/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'tw': './assets/cn/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png'}) TEMPLATE_VISITORS_DYED_IN_RED = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'en': './assets/en/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'jp': './assets/jp/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'tw': './assets/tw/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png'}) TEMPLATE_WINTERS_CROWN = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_WINTERS_CROWN.png', 'en': './assets/en/war_archives/TEMPLATE_WINTERS_CROWN.png', 'jp': './assets/jp/war_archives/TEMPLATE_WINTERS_CROWN.png', 'tw': './assets/tw/war_archives/TEMPLATE_WINTERS_CROWN.png'}) diff --git a/module/war_archives/dictionary.py b/module/war_archives/dictionary.py index 5a79948c5..ff715a258 100644 --- a/module/war_archives/dictionary.py +++ b/module/war_archives/dictionary.py @@ -29,4 +29,5 @@ dic_archives_template = { 'war_archives_20210225_cn': TEMPLATE_KHOROVOD_OF_DAWNS_RIME, 'war_archives_20200603_cn': TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD, 'war_archives_20190314_en': TEMPLATE_PRELUDE_UNDER_THE_MOON, + 'war_archives_20200312_cn': TEMPLATE_THE_SOLOMON_RANGER, } From b0b54a4b68a0b7c807d590631608560e33339463 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Mon, 11 Mar 2024 22:57:37 +0800 Subject: [PATCH 05/96] Add: War Archives The Way Home in the Night --- .../TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png | Bin 0 -> 25927 bytes campaign/Readme.md | 1 + campaign/war_archives_20200507_cn/sp1.py | 65 ++++++++++++++++ campaign/war_archives_20200507_cn/sp2.py | 63 ++++++++++++++++ campaign/war_archives_20200507_cn/sp3.py | 70 ++++++++++++++++++ module/config/argument/args.json | 9 ++- module/config/i18n/en-US.json | 1 + module/config/i18n/ja-JP.json | 1 + module/config/i18n/zh-CN.json | 1 + module/config/i18n/zh-TW.json | 1 + module/war_archives/assets.py | 1 + module/war_archives/dictionary.py | 1 + 12 files changed, 210 insertions(+), 4 deletions(-) create mode 100644 assets/cn/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png create mode 100644 campaign/war_archives_20200507_cn/sp1.py create mode 100644 campaign/war_archives_20200507_cn/sp2.py create mode 100644 campaign/war_archives_20200507_cn/sp3.py diff --git a/assets/cn/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png b/assets/cn/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png new file mode 100644 index 0000000000000000000000000000000000000000..d68c3e1bd42adba13c1b5379b3edc48c6df57c65 GIT binary patch literal 25927 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 Tf5|zL00000NkvXXu0mjfjD>v! literal 0 HcmV?d00001 diff --git a/campaign/Readme.md b/campaign/Readme.md index 8b7ec35fa..8473e5809 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -36,6 +36,7 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20221117 | war archives 20200903 cn | Stars of the Shimmering Fjord | 峡湾间的星辰 | Stars of the Shimmering Fjord | 輝ける峡湾の星 | 峽灣間的星辰 | | 20221117 | war archives 20210819 cn | Microlayer Medley | 微层混合 | Microlayer Medley | 闇靄払う銀翼 | 微層混合 | | 20211028 | war archives 20211028 cn | Skybound Oratorio | 穹顶下的圣咏曲 | Skybound Oratorio | 神穹を衝く聖歌 | 穹頂下的聖詠曲 | +| 20230309 | war archives 20200507 cn | The Way Home in the Night | 夜幕下的归途 | The Way Home in the Night | 帰路は海色の陰りへと | 夜幕下的歸途 | | 20230420 | war archives 20220210 cn | Northern Overture | 北境序曲 | Northern Overture | 凍絶の北海 | 北境序曲 | | 20230511 | war archives 20220414 cn | Aurora Noctis | 永夜幻光 | Aurora Noctis | 極夜照らす幻光 | 永夜幻光 | | 20230713 | war archives 20200603 cn | Counterattack Within the Fjord | 峡湾间的反击 | Counterattack Within the Fjord | 峡湾間の反撃 | 峽灣間的反擊 | diff --git a/campaign/war_archives_20200507_cn/sp1.py b/campaign/war_archives_20200507_cn/sp1.py new file mode 100644 index 000000000..6ed66faf3 --- /dev/null +++ b/campaign/war_archives_20200507_cn/sp1.py @@ -0,0 +1,65 @@ +from ..campaign_war_archives.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 = 'H7' +MAP.camera_data = ['D2', 'D5', 'E2', 'E5'] +MAP.camera_data_spawn_point = ['E5', 'D5'] +MAP.map_data = """ + -- ++ ++ MB MB ++ ++ ++ + ME ++ Me -- -- ME Me -- + -- -- __ -- ME __ -- -- + ME -- ME -- -- -- ME -- + -- -- ++ ME -- 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': 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, \ +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: + # ===== Start of generated config ===== + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = False + MAP_HAS_AMBUSH = False + 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' + + def battle_0(self): + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20200507_cn/sp2.py b/campaign/war_archives_20200507_cn/sp2.py new file mode 100644 index 000000000..15f61b9a3 --- /dev/null +++ b/campaign/war_archives_20200507_cn/sp2.py @@ -0,0 +1,63 @@ +from ..campaign_war_archives.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 = 'K6' +MAP.camera_data = ['D2', 'D4', 'H2', 'H4'] +MAP.camera_data_spawn_point = ['D4'] +MAP.map_data = """ + -- -- ++ ++ -- Me -- ++ ++ ME -- + Me ME ++ ++ ME -- ME -- ME -- ME + -- -- MB -- MB -- -- -- -- -- -- + ++ -- -- MB -- __ Me ++ ++ ME ++ + SP -- Me -- ME -- -- ++ ME -- ME + SP SP ++ ++ ++ ME -- -- -- -- ME +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 50 50 + 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, I1, J1, K1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, K3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, K4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, K5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, K6, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = False + MAP_HAS_AMBUSH = False + 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' + + def battle_0(self): + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/war_archives_20200507_cn/sp3.py b/campaign/war_archives_20200507_cn/sp3.py new file mode 100644 index 000000000..cec61e279 --- /dev/null +++ b/campaign/war_archives_20200507_cn/sp3.py @@ -0,0 +1,70 @@ +from ..campaign_war_archives.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 = ['D2', 'D6', 'E2', 'E6'] +MAP.camera_data_spawn_point = ['D6'] +MAP.map_data = """ + ++ ++ ++ ME ME ++ MB MB + ME -- -- -- -- ME -- MB + -- -- Me Me -- __ -- ++ + ME -- ++ ++ -- Me -- ME + -- -- SP SP -- ++ -- ME + ME -- -- -- ME ++ ME -- + ++ ++ Me -- -- -- -- ME + ++ ME Me -- ME ++ ME -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 2}, + {'battle': 1, 'enemy': 2, 'siren': 1}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'enemy': 1}, + {'battle': 5, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, \ +A2, B2, C2, D2, E2, F2, G2, H2, \ +A3, B3, C3, D3, E3, F3, G3, H3, \ +A4, B4, C4, D4, E4, F4, G4, H4, \ +A5, B5, C5, D5, E5, F5, G5, H5, \ +A6, B6, C6, D6, E6, F6, G6, H6, \ +A7, B7, C7, D7, E7, F7, G7, H7, \ +A8, B8, C8, D8, E8, F8, G8, H8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = False + MAP_HAS_AMBUSH = False + 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' + + def battle_0(self): + 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() diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 728c5ded9..63b3d739c 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -2872,8 +2872,8 @@ "raid_20240130" ], "option_bold": [ - "raid_20240130", - "raid_20230118" + "raid_20230118", + "raid_20240130" ], "cn": "raid_20240130", "en": "raid_20240130", @@ -3378,6 +3378,7 @@ "war_archives_20191010_en", "war_archives_20191031_en", "war_archives_20200312_cn", + "war_archives_20200507_cn", "war_archives_20200603_cn", "war_archives_20200806_cn", "war_archives_20200820_cn", @@ -6111,8 +6112,8 @@ "raid_20240130" ], "option_bold": [ - "raid_20240130", - "raid_20230118" + "raid_20230118", + "raid_20240130" ], "cn": "raid_20240130", "en": "raid_20240130", diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 31f8ebae4..f26c6573e 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -733,6 +733,7 @@ "war_archives_20191010_en": "archives Encircling Graf Spee", "war_archives_20191031_en": "archives Divergent Chessboard", "war_archives_20200312_cn": "archives The Solomon Ranger", + "war_archives_20200507_cn": "archives The Way Home in the Night", "war_archives_20200603_cn": "archives Counterattack Within the Fjord", "war_archives_20200806_cn": "archives The Enigma and the Shark", "war_archives_20200820_cn": "archives Scherzo of Iron and Blood", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index f8d3297a0..19a652fa0 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -733,6 +733,7 @@ "war_archives_20191010_en": "檔案 アドミラル・グラーフ・シュペー追撃戦", "war_archives_20191031_en": "檔案 鏡写されし異色", "war_archives_20200312_cn": "檔案 南洋に靡く硝煙", + "war_archives_20200507_cn": "檔案 帰路は海色の陰りへと", "war_archives_20200603_cn": "檔案 峡湾間の反撃", "war_archives_20200806_cn": "檔案 鉄血鮫とエニグマ", "war_archives_20200820_cn": "檔案 黒鉄の楽章 誓いの海", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index e86cef6e6..c6596d8cc 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -733,6 +733,7 @@ "war_archives_20191010_en": "档案 围剿斯佩伯爵", "war_archives_20191031_en": "档案 异色格", "war_archives_20200312_cn": "档案 斯图尔特的硝烟", + "war_archives_20200507_cn": "档案 夜幕下的归途", "war_archives_20200603_cn": "档案 峡湾间的反击", "war_archives_20200806_cn": "档案 最重要的宝物", "war_archives_20200820_cn": "档案 铁血音符誓言", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 8d09a25ce..3a13aad6c 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -733,6 +733,7 @@ "war_archives_20191010_en": "檔案 圍剿斯佩伯爵", "war_archives_20191031_en": "檔案 異色格", "war_archives_20200312_cn": "檔案 斯圖爾特的硝煙", + "war_archives_20200507_cn": "檔案 夜幕下的歸途", "war_archives_20200603_cn": "檔案 峽灣間的反擊", "war_archives_20200806_cn": "檔案 最重要的寶物", "war_archives_20200820_cn": "檔案 鐵血音符誓言", diff --git a/module/war_archives/assets.py b/module/war_archives/assets.py index 5afb447eb..e55421fa1 100644 --- a/module/war_archives/assets.py +++ b/module/war_archives/assets.py @@ -31,6 +31,7 @@ TEMPLATE_STRIVE_WISH_AND_STRATEGIZE = Template(file={'cn': './assets/cn/war_arch TEMPLATE_SWIRLING_CHERRY_BLOSSOMS = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png', 'en': './assets/en/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png', 'jp': './assets/cn/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png', 'tw': './assets/cn/war_archives/TEMPLATE_SWIRLING_CHERRY_BLOSSOMS.png'}) TEMPLATE_THE_ENIGMA_AND_THE_SHARK = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png', 'en': './assets/en/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png', 'jp': './assets/cn/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png', 'tw': './assets/cn/war_archives/TEMPLATE_THE_ENIGMA_AND_THE_SHARK.png'}) TEMPLATE_THE_SOLOMON_RANGER = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png', 'en': './assets/en/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png', 'jp': './assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png', 'tw': './assets/cn/war_archives/TEMPLATE_THE_SOLOMON_RANGER.png'}) +TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png', 'en': './assets/en/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png', 'jp': './assets/cn/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png', 'tw': './assets/cn/war_archives/TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT.png'}) TEMPLATE_UNIVERSE_IN_UNISON = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'en': './assets/en/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'jp': './assets/jp/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png', 'tw': './assets/cn/war_archives/TEMPLATE_UNIVERSE_IN_UNISON.png'}) TEMPLATE_VISITORS_DYED_IN_RED = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'en': './assets/en/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'jp': './assets/jp/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png', 'tw': './assets/tw/war_archives/TEMPLATE_VISITORS_DYED_IN_RED.png'}) TEMPLATE_WINTERS_CROWN = Template(file={'cn': './assets/cn/war_archives/TEMPLATE_WINTERS_CROWN.png', 'en': './assets/en/war_archives/TEMPLATE_WINTERS_CROWN.png', 'jp': './assets/jp/war_archives/TEMPLATE_WINTERS_CROWN.png', 'tw': './assets/tw/war_archives/TEMPLATE_WINTERS_CROWN.png'}) diff --git a/module/war_archives/dictionary.py b/module/war_archives/dictionary.py index ff715a258..b232fa86f 100644 --- a/module/war_archives/dictionary.py +++ b/module/war_archives/dictionary.py @@ -30,4 +30,5 @@ dic_archives_template = { 'war_archives_20200603_cn': TEMPLATE_COUNTERATTACK_WITHIN_THE_FJORD, 'war_archives_20190314_en': TEMPLATE_PRELUDE_UNDER_THE_MOON, 'war_archives_20200312_cn': TEMPLATE_THE_SOLOMON_RANGER, + 'war_archives_20200507_cn': TEMPLATE_THE_WAY_HOME_IN_THE_NIGHT, } From d921c3a845b855a3474e6205506151f8de974c3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=A6=E5=BF=B5=E9=80=8D=E9=81=A5?= <103258286+MengNianxiaoyao@users.noreply.github.com> Date: Fri, 15 Mar 2024 00:17:29 +0800 Subject: [PATCH 06/96] Upd: Event Virtual Tower Rerun (#3546) Co-authored-by: LmeSzinc --- campaign/Readme.md | 3 +- module/config/argument/args.json | 80 ++++++++++++++++---------------- module/config/i18n/en-US.json | 2 +- module/config/i18n/ja-JP.json | 2 +- module/config/i18n/zh-CN.json | 2 +- 5 files changed, 45 insertions(+), 44 deletions(-) diff --git a/campaign/Readme.md b/campaign/Readme.md index 7ab90fea2..6da08c8a8 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -13,7 +13,7 @@ To add a new event, add a new row in here, and run `python -m module.config.conf **CN, EN, JP, TW** Event names in GUI. If an event is not aired on some servers, use `-`. | Aired Date | Directory | Event Name | CN | EN | JP | TW | -| ---------- | ------------------------ | -------------------------------------------- | ---------------------- | -------------------------------------------- | ------------------------------------ | ------------------------ | +| :--------- | :----------------------- | :------------------------------------------- | :--------------------- | :------------------------------------------- | :----------------------------------- | :----------------------- | | 20170607 | war archives 20181020 en | Strive, Wish, and Strategize | 努力、希望和计划 | Strive, Wish, and Strategize | 努力、希望と計画 | 努力、希望和計劃 | | 20170802 | war archives 20191031 en | Divergent Chessboard | 异色格 | Divergent Chessboard | 鏡写されし異色 | 異色格 | | 20170928 | war archives 20190321 en | Visitors Dyed in Red | 红染的参访者 | Visitors Dyed in Red | 紅染の来訪者 | 紅染的參訪者 | @@ -181,3 +181,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20240206 | raid 20230118 | Winter Pathfinder | - | - | - | 冬日的尋路人 | | 20240229 | event 20230223 cn | Revelations of Dust | - | - | - | 湮燼塵墟 | | 20240229 | event 20240229 cn | Snowrealm Peregrination | 雪境迷踪 | Snowrealm Peregrination | 銀界遊廻 | - | +| 20240314 | event 20220324 cn | Virtual Tower Rerun | 复刻虚像构筑之塔 | Virtual Tower Rerun | 幻像の塔(復刻) | - | diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 2eda65ce6..f68a1a3b9 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1681,12 +1681,12 @@ ], "display": "hide", "option_bold": [ - "event_20230223_cn", - "event_20240229_cn" + "event_20220324_cn", + "event_20230223_cn" ], - "cn": "event_20240229_cn", - "en": "event_20240229_cn", - "jp": "event_20240229_cn", + "cn": "event_20220324_cn", + "en": "event_20220324_cn", + "jp": "event_20220324_cn", "tw": "event_20230223_cn" }, "Mode": { @@ -2014,12 +2014,12 @@ "event_20240229_cn" ], "option_bold": [ - "event_20230223_cn", - "event_20240229_cn" + "event_20220324_cn", + "event_20230223_cn" ], - "cn": "event_20240229_cn", - "en": "event_20240229_cn", - "jp": "event_20240229_cn", + "cn": "event_20220324_cn", + "en": "event_20220324_cn", + "jp": "event_20220324_cn", "tw": "event_20230223_cn" }, "Mode": { @@ -2462,12 +2462,12 @@ "event_20240229_cn" ], "option_bold": [ - "event_20230223_cn", - "event_20240229_cn" + "event_20220324_cn", + "event_20230223_cn" ], - "cn": "event_20240229_cn", - "en": "event_20240229_cn", - "jp": "event_20240229_cn", + "cn": "event_20220324_cn", + "en": "event_20220324_cn", + "jp": "event_20220324_cn", "tw": "event_20230223_cn" }, "Mode": { @@ -3852,12 +3852,12 @@ "event_20240229_cn" ], "option_bold": [ - "event_20230223_cn", - "event_20240229_cn" + "event_20220324_cn", + "event_20230223_cn" ], - "cn": "event_20240229_cn", - "en": "event_20240229_cn", - "jp": "event_20240229_cn", + "cn": "event_20220324_cn", + "en": "event_20220324_cn", + "jp": "event_20220324_cn", "tw": "event_20230223_cn" }, "Mode": { @@ -4317,12 +4317,12 @@ "event_20240229_cn" ], "option_bold": [ - "event_20230223_cn", - "event_20240229_cn" + "event_20220324_cn", + "event_20230223_cn" ], - "cn": "event_20240229_cn", - "en": "event_20240229_cn", - "jp": "event_20240229_cn", + "cn": "event_20220324_cn", + "en": "event_20220324_cn", + "jp": "event_20220324_cn", "tw": "event_20230223_cn" }, "Mode": { @@ -4782,12 +4782,12 @@ "event_20240229_cn" ], "option_bold": [ - "event_20230223_cn", - "event_20240229_cn" + "event_20220324_cn", + "event_20230223_cn" ], - "cn": "event_20240229_cn", - "en": "event_20240229_cn", - "jp": "event_20240229_cn", + "cn": "event_20220324_cn", + "en": "event_20220324_cn", + "jp": "event_20220324_cn", "tw": "event_20230223_cn" }, "Mode": { @@ -5247,12 +5247,12 @@ "event_20240229_cn" ], "option_bold": [ - "event_20230223_cn", - "event_20240229_cn" + "event_20220324_cn", + "event_20230223_cn" ], - "cn": "event_20240229_cn", - "en": "event_20240229_cn", - "jp": "event_20240229_cn", + "cn": "event_20220324_cn", + "en": "event_20220324_cn", + "jp": "event_20220324_cn", "tw": "event_20230223_cn" }, "Mode": { @@ -5702,12 +5702,12 @@ "event_20240229_cn" ], "option_bold": [ - "event_20230223_cn", - "event_20240229_cn" + "event_20220324_cn", + "event_20230223_cn" ], - "cn": "event_20240229_cn", - "en": "event_20240229_cn", - "jp": "event_20240229_cn", + "cn": "event_20220324_cn", + "en": "event_20220324_cn", + "jp": "event_20220324_cn", "tw": "event_20230223_cn" }, "Mode": { diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 7b793dcd1..5ea080a49 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -693,7 +693,7 @@ "event_20220210_cn": "Northern Overture Rerun", "event_20220224_cn": "Abyssal Refrain", "event_20220310_tw": "復刻斯圖爾特的硝煙", - "event_20220324_cn": "Virtual Tower", + "event_20220324_cn": "Virtual Tower Rerun", "event_20220407_tw": "蒼紅的迴響(復刻)", "event_20220414_cn": "Aurora Noctis Rerun", "event_20220428_cn": "Rondo at Rainbows End", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index ef7c6a883..bb8b3ce21 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -693,7 +693,7 @@ "event_20220210_cn": "凍絶の北海(復刻)", "event_20220224_cn": "鳴動せし星霜の淵", "event_20220310_tw": "復刻斯圖爾特的硝煙", - "event_20220324_cn": "幻像の塔", + "event_20220324_cn": "幻像の塔(復刻)", "event_20220407_tw": "蒼紅的迴響(復刻)", "event_20220414_cn": "極夜照らす幻光(復刻)", "event_20220428_cn": "吟ずる瑠璃の楽章", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 5c226df52..bd934a4f9 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -693,7 +693,7 @@ "event_20220210_cn": "复刻北境序曲", "event_20220224_cn": "深度回音", "event_20220310_tw": "復刻斯圖爾特的硝煙", - "event_20220324_cn": "虚像构筑之塔", + "event_20220324_cn": "复刻虚像构筑之塔", "event_20220407_tw": "蒼紅的迴響(復刻)", "event_20220414_cn": "复刻永夜幻光", "event_20220428_cn": "虹彩的终幕曲", From 12b612da44650bd06752c5193eb3bc74f75f2665 Mon Sep 17 00:00:00 2001 From: RilyLC <94281898+RilyLC@users.noreply.github.com> Date: Fri, 15 Mar 2024 00:22:00 +0800 Subject: [PATCH 07/96] Upd:[TW]Event:Daedalian Hymn Rerun (#3547) Co-authored-by: LmeSzinc --- campaign/Readme.md | 1 + module/config/i18n/zh-TW.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/campaign/Readme.md b/campaign/Readme.md index 6da08c8a8..577f0347a 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -181,4 +181,5 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20240206 | raid 20230118 | Winter Pathfinder | - | - | - | 冬日的尋路人 | | 20240229 | event 20230223 cn | Revelations of Dust | - | - | - | 湮燼塵墟 | | 20240229 | event 20240229 cn | Snowrealm Peregrination | 雪境迷踪 | Snowrealm Peregrination | 銀界遊廻 | - | +| 20240314 | event 20210422 cn | Daedalian Hymn | - | - | - | 復刻復興的讚美詩 | | 20240314 | event 20220324 cn | Virtual Tower Rerun | 复刻虚像构筑之塔 | Virtual Tower Rerun | 幻像の塔(復刻) | - | diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 611647c01..44f4230d7 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -675,7 +675,7 @@ "event_20210225_tw": "北境序曲", "event_20210325_cn": "復刻箱庭療法", "event_20210415_tw": "復刻圍剿施佩伯爵", - "event_20210422_cn": "復興的讚美詩", + "event_20210422_cn": "復刻復興的讚美詩", "event_20210429_tw": "復刻墨染的鋼鐵之花", "event_20210527_cn": "復刻鏡位螺旋", "event_20210527_tw": "微層混合", From 8af7b7bba52b2ecb103517708b06a455d71411d2 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 15 Mar 2024 00:25:52 +0800 Subject: [PATCH 08/96] Upd: Config update --- module/config/argument/args.json | 48 ++++++++++++++++---------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 978b9dd3c..a939c91f9 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1681,13 +1681,13 @@ ], "display": "hide", "option_bold": [ - "event_20220324_cn", - "event_20230223_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20230223_cn" + "tw": "event_20210422_cn" }, "Mode": { "type": "select", @@ -2014,13 +2014,13 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20230223_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20230223_cn" + "tw": "event_20210422_cn" }, "Mode": { "type": "select", @@ -2462,13 +2462,13 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20230223_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20230223_cn" + "tw": "event_20210422_cn" }, "Mode": { "type": "select", @@ -3855,13 +3855,13 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20230223_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20230223_cn" + "tw": "event_20210422_cn" }, "Mode": { "type": "select", @@ -4320,13 +4320,13 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20230223_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20230223_cn" + "tw": "event_20210422_cn" }, "Mode": { "type": "select", @@ -4785,13 +4785,13 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20230223_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20230223_cn" + "tw": "event_20210422_cn" }, "Mode": { "type": "select", @@ -5250,13 +5250,13 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20230223_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20230223_cn" + "tw": "event_20210422_cn" }, "Mode": { "type": "select", @@ -5705,13 +5705,13 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20230223_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20230223_cn" + "tw": "event_20210422_cn" }, "Mode": { "type": "select", From f076ba12ed9510615e762ae3f93deefaddf05fb4 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 16 Mar 2024 16:02:07 +0800 Subject: [PATCH 09/96] Add: [ALAS] Proxy element props --- module/device/method/utils.py | 91 ++++++++++++++++++++++++++++++++--- 1 file changed, 84 insertions(+), 7 deletions(-) diff --git a/module/device/method/utils.py b/module/device/method/utils.py index 477188b3d..817cb4ab8 100644 --- a/module/device/method/utils.py +++ b/module/device/method/utils.py @@ -18,9 +18,11 @@ except ImportError: # We expect `screencap | nc 192.168.0.1 20298` instead of `screencap '|' nc 192.168.80.1 20298` import adbutils import subprocess + adbutils._utils.list2cmdline = subprocess.list2cmdline adbutils._device.list2cmdline = subprocess.list2cmdline + # BaseDevice.shell() is missing a check_okay() call before reading output, # resulting in an `OKAY` prefix in output. def shell(self, @@ -40,6 +42,7 @@ except ImportError: output = c.read_until_close() return output.rstrip() if rstrip else output + adbutils._device.BaseDevice.shell = shell from module.base.decorator import cached_property @@ -309,7 +312,7 @@ class HierarchyButton: if res: return res[0] else: - return 'HierarchyButton' + return self.xpath @cached_property def count(self): @@ -319,15 +322,30 @@ class HierarchyButton: def exist(self): return self.count == 1 + @cached_property + def attrib(self): + if self.exist: + return self.nodes[0].attrib + else: + return {} + @cached_property def area(self): if self.exist: - bounds = self.nodes[0].attrib.get("bounds") + bounds = self.attrib.get("bounds") lx, ly, rx, ry = map(int, re.findall(r"\d+", bounds)) return lx, ly, rx, ry else: return None + @cached_property + def size(self): + if self.area is not None: + lx, ly, rx, ry = self.area + return rx - lx, ry - ly + else: + return None + @cached_property def button(self): return self.area @@ -338,9 +356,68 @@ class HierarchyButton: def __str__(self): return self.name + """ + Element props + """ + + def _get_bool_prop(self, prop: str) -> bool: + return self.attrib.get(prop, "").lower() == 'true' + @cached_property - def focused(self): - if self.exist: - return self.nodes[0].attrib.get("focused").lower() == 'true' - else: - return False + def index(self) -> int: + try: + return int(self.attrib.get("index", 0)) + except IndexError: + return 0 + + @cached_property + def text(self) -> str: + return self.attrib.get("text", "").strip() + + @cached_property + def resourceId(self) -> str: + return self.attrib.get("resourceId", "").strip() + + @cached_property + def package(self) -> str: + return self.attrib.get("resourceId", "").strip() + + @cached_property + def description(self) -> str: + return self.attrib.get("resourceId", "").strip() + + @cached_property + def checkable(self) -> bool: + return self._get_bool_prop('checkable') + + @cached_property + def clickable(self) -> bool: + return self._get_bool_prop('clickable') + + @cached_property + def enabled(self) -> bool: + return self._get_bool_prop('enabled') + + @cached_property + def fucusable(self) -> bool: + return self._get_bool_prop('fucusable') + + @cached_property + def focused(self) -> bool: + return self._get_bool_prop('focused') + + @cached_property + def scrollable(self) -> bool: + return self._get_bool_prop('scrollable') + + @cached_property + def longClickable(self) -> bool: + return self._get_bool_prop('longClickable') + + @cached_property + def password(self) -> bool: + return self._get_bool_prop('password') + + @cached_property + def selected(self) -> bool: + return self._get_bool_prop('selected') From d702a3ec0ab1a8a2263cabfeff2f61daa726c4b1 Mon Sep 17 00:00:00 2001 From: weeswelai <52352067+weeswelai@users.noreply.github.com> Date: Thu, 21 Mar 2024 14:34:31 +0800 Subject: [PATCH 10/96] Upd: Make handle dorm popup the lowest priority --- module/dorm/buy_furniture.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/module/dorm/buy_furniture.py b/module/dorm/buy_furniture.py index d0b51f49a..312f733a9 100644 --- a/module/dorm/buy_furniture.py +++ b/module/dorm/buy_furniture.py @@ -2,6 +2,7 @@ from datetime import datetime, timedelta from module.combat.assets import GET_SHIP from module.dorm.assets import * +from module.exercise.assets import EXERCISE_PREPARATION from module.logger import logger from module.ocr.ocr import Digit from module.ui.assets import DORM_CHECK @@ -33,10 +34,6 @@ class BuyFurniture(UI): else: self.device.screenshot() - if self.ui_additional(): - self.interval_clear(DORM_CHECK) - continue - # Enter furniture shop page from page_dorm, only need to enter once if self.appear(DORM_CHECK, offset=(20, 20), interval=3): self.device.click(DORM_FURNITURE_SHOP_ENTER) @@ -44,6 +41,7 @@ class BuyFurniture(UI): continue if self.appear(DORM_FURNITURE_SHOP_FIRST_SELECTED, offset=(20, 20)): + self.interval_reset(EXERCISE_PREPARATION) # Enter furniture details page from furniture shop page if self.appear(DORM_FURNITURE_DETAILS_ENTER, offset=(20, 20), interval=3): self.device.click(DORM_FURNITURE_DETAILS_ENTER) @@ -57,6 +55,10 @@ class BuyFurniture(UI): if self.appear(DORM_FURNITURE_DETAILS_QUIT, offset=(20, 20)): break + if self.ui_additional(): + self.interval_clear(DORM_CHECK) + continue + def furniture_shop_quit(self, skip_first_screenshot=False): """ Pages: From 51fa384dc63e698f0b1ff77b0be267630275f956 Mon Sep 17 00:00:00 2001 From: weeswelai <52352067+weeswelai@users.noreply.github.com> Date: Thu, 21 Mar 2024 14:35:42 +0800 Subject: [PATCH 11/96] Upd: Modify check interval to 6 days to avoid missing rerun event furniture. --- module/config/i18n/en-US.json | 2 +- module/config/i18n/zh-CN.json | 2 +- module/config/i18n/zh-TW.json | 2 +- module/dorm/buy_furniture.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 5ca899918..9f613688a 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -1418,7 +1418,7 @@ }, "LastRun": { "name": "Last Check Time", - "help": "The time of the last check is recorded here to prevent the task from running repeatedly. Check interval is 7 days. This value is automatically recorded and generally does not need to be modified." + "help": "The time of the last check is recorded here to prevent the task from running repeatedly. Check interval is 6 days. This value is automatically recorded and generally does not need to be modified." } }, "Meowfficer": { diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index f7a83d450..015759e41 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -1418,7 +1418,7 @@ }, "LastRun": { "name": "上次检查时间", - "help": "记录上一次检查的时间以防止任务重复运行,检查间隔为7天,这个数值是自动记录的,一般不需要修改" + "help": "记录上一次检查的时间以防止任务重复运行,检查间隔为6天,这个数值是自动记录的,一般不需要修改" } }, "Meowfficer": { diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 81ab6156f..09a089f4b 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -1418,7 +1418,7 @@ }, "LastRun": { "name": "上次檢查時間", - "help": "記錄上一次檢查的時間以防止任務重複執行,這個數值是自動記錄的,一般不需要修改" + "help": "記錄上一次檢查的時間以防止任務重複執行,檢查間隔為6天,這個數值是自動記錄的,一般不需要修改" } }, "Meowfficer": { diff --git a/module/dorm/buy_furniture.py b/module/dorm/buy_furniture.py index 312f733a9..4d2061d38 100644 --- a/module/dorm/buy_furniture.py +++ b/module/dorm/buy_furniture.py @@ -11,7 +11,7 @@ from module.ui.ui import UI OCR_FURNITURE_COIN = Digit(OCR_DORM_FURNITURE_COIN, letter=(107, 89, 82), threshold=128, alphabet='0123456789', name='OCR_FURNITURE_COIN') OCR_FURNITURE_PRICE = Digit(OCR_DORM_FURNITURE_PRICE, letter=(255, 247, 247), threshold=64, alphabet='0123456789', name='OCR_FURNITURE_PRICE') -CHECK_INTERVAL = 7 # Check every 7 days +CHECK_INTERVAL = 6 # Check every 6 days # Only for click FURNITURE_BUY_BUTTON = { "all": DORM_FURNITURE_BUY_ALL, From c59bddfc7e6fb47df227e6201e3e9cd659418d52 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 21 Mar 2024 18:21:15 +0800 Subject: [PATCH 12/96] Upd: [TW] MAP_OFFENSIVE and SWITCH_OVER (#3544) --- assets/tw/map/MAP_OFFENSIVE.png | Bin 12650 -> 11478 bytes assets/tw/map/SWITCH_OVER.png | Bin 14638 -> 13431 bytes module/map/assets.py | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/tw/map/MAP_OFFENSIVE.png b/assets/tw/map/MAP_OFFENSIVE.png index e1eb7c9cfbf5e4741de1dab23e786ab489591eda..d7cb459cd1906a1665e5af4c089cb357dfe2473a 100644 GIT binary patch delta 6315 zcmXY#d0f(Y;{Tm#=GV448MEV69vkd*tBIvzDmxqM%+93aCMurgeT1as9eie{*&y*4 zx6%xcO(!)_2^H`{n(-h*WlZq^kupUSkrV+1kuSNwKR=Jp@%X&o@7L?~e7)Z*F_Wlg z>_10?_kDx-Dkw*|Dt35i6H<2kwTtqs`)_H_z78Iu6rQbPh91m&NbY?6-^U|^-}lX4 zXD5ByjUqAb2%xFI#7}(LeyVI}qt)}qR}0Y(CU)=fvJ^c|feFYsL|pxgkfk{+xGnHt z#({fR51Im7BU(%Qk4#LS>rtGo_xo+9b~_~r()Zs+QhfS5ZmItgwGH3N{=~$jga1iS zz@2Tgwpaw>I_F}vZxCY5pnrUaNSv**Gi*iZn6gDtF(q63%Z8tg2-rY=a@EA-2T4zt zQeoDnn`zNuZB&=qJGRbeq-Ra`WL8Z@`!pLL0Ze`Xq&IZz3xC{VQCIOPpe;)QRkE=8 zRh*7+VB7Xj&rM8BIQY?#*djNMlXmy{^IMwt-HA`9eGr50hFZmGaLhx?^NNj&^BW~S zKicE(flBo#frpcwpCh2A{oUmMnV4*;;u4}p4xCT1WNZ^Y%H2jyl0pGxtlMwW4GA_6 zu%Z`)X-1CgYBZ^ZG6l?QSnci_Pd~to zpEJ&vQ^Q)BzYBcFGoxTR5J}rTB1;8fqF_Sfa zIitT;0ph)AnwpxiTUcBQ6hz}@fQ{2asPG;!1!s;1IS;g7Z=Ry^d(Z5vapS&Z8MegG z_nAGy!GWdHZI{8TA6c20yq@Cq33Q|ra*e^I*2lNkklfD;Gq7WbL>n6Tv=H1-q8@tY z@OC48P*r&k`@+V4QmsIGmCRsw+Aou?lwBuXa*u3(cRR@p0)>hemw+*vW}6|Ikn)J! znR;U3^lp0sPf?8zpm#-0${KRlw-O^#9ZdF_nCv{7BqK$hC9(bNoCp~oTwCM-Xcm*X zXw`~wy-tFmF3>Zlo$R=q>64VGTTz7f4^^JR6ZE?)Qy{O6^o1`#foxZ56XjhX8y{vq z-Y!WD$FZX@z#!9%%%*7`Eb6}Pg8zLovuAE#aS0v*3f)^fpDN8SFNr?EVo&&FPO4J% z=J|TgRkpSyEZPs@Ujn9WY*2)Cg$13j$h@8R$!sl@=>)FLqBi+NM8tbij1zrG{3}#6 za673440eLcCEi}=!&|03qfIO51J$yCB~EFL2wHN^^6n zW+j)Bs0Gd|`6P4`!*R1{|`+fMA0I1Z#WNtuB17c=Ru?$!}=jY=@Y2F|6B_ zN=X?fV83p`-=jwZskZv#!hCet;O64Y19dVCOPoedW;cxXEXkiYREN?qwO+Ygk7p*P zCMNHx$>`Y=?3X=TH|*7p_D*#aNoBD}-@ov1Trgwzx{RB01EFB=D%UsP+*_U^3*5S= zP5UymVuQEsvzeVgcso!nDckeMy-$&H!rK~m=cxeB-Ru5O5Q?^oh7sOa`onEBL?8Td z^Z2x+^L#js6GclKq!Q41hmGpNq}BJV2_RwlhPGQ_CnDBK`)Z+YGqmLCmp>#;^kAoU6pD#zK{RD7Z@yg zANeukc<6@-_qFn7?JS=wJ!uq<1CW<7ES}OYT8@=e)np6Is%ldi+v0Fw1S0dy)tw3w!a}2T^Rp8>&Y1AbIDT$S_=!mgQRQ7m20y$(9bc|m4)E#;z1~dk)Uk2p3@iJgo z!znCm968l2MSf>Luo>8YT6C-;G02x$rc9bId`X;?0!sVp1iLxR0%ooI*(XPg`C_NK zT=nThykMn63&UE!z1?%`R#py!R06Jz#2?8#l6oKAq@JmAF)PisJZZ+8Mq?ue>FY=x zt8KO?Nny~@({B#!m(QODxAxu*^+jCoy=zk^&rctaQhPgxRzTg`|FGt*$gU8YBYe@+ z;sC&mX_0?XZJb=HVA6QDy6+R`$ zUKH)CbUqu)DtIBB+capebnl#Wag*R5bgORt1!gJ|r_pcOjQ2Gm`@gVmXtW7LuNv=d z|0;Z&ocBGMEKI`^W3@%@yoH%sfN2az%t;G&Fd=fJbY|sNN}yg_x)(kjez5WYQEiHC zskQReQv5_01zHz8#fW63&tQ7fI0mq^cm$KDT1-yFe8{5wg`A%6R)Y!uMOjmK=f6R; zrxy-DGb-eP(ujk05SNXWk@Jsc>Umsph@?F)jMmEZdV8481>z^PH{((Rkw|RK((rJS zAcV{0JCrBpmjI)tv!7o5z|fSB?ZD+@Aq{1G7_zzK3;`03NK0#R5k57al*aoGv_}`s zM(a-nv+7?Pul>#Zd1QWf=x0~RW$D}R9vhVJBe6frj)N&7DztC^W>oi%r(1ybX%5-h zF{Yaj%w0h6f{}ruK9M!VBGY12)bmOwFV|g=J>R1oPAaL?_F9Blmo^Jfro%6YbS*D3 z?mI5Kn;nHmIk!vT#NpkQ+}VgJ`Rj)aIjx$Zfs+q5F;G5o@Et2!3~PQ4eW=HF#ZY!(4`i<+i&a653+~_;QS&BVm&QVw!(ogSrgi1VmyMbz^e!Mwg8R%78 zJ2~c-u57?{^i+XT*;OS^M|gPU-&|s^)5Cp&OwEdK|67?=Jv>`I4zH(}Up2>ES~b;l z5^?xg3~DK|HH*;l6P=9dZ+m zAlc}$a1?XD)Xq>%=EbUvCKd0}KWrf7onpWj$tde{Cvbbkz6jGx2n7D&1qFC+c4SGn z$P3Z!s}E?6??-lTHE{~2BmEGEu1qkqbh@F(KE;fxd~Y*Qg#$m8Qz0)})?f0jch4H? zHQSSomk@cj-iIbXby#Xu(H&)eff?_eQ#p=AszUfeU5RWy5IsrH%bR=;bofZSXpq{J z2LdWhCf!D*^%R6DO6={Vi*-aI#Z}&y6z7ZV-wztgNLT;0t1nk1BKZwA2xWUi%M{`_b?43BJ%td)YA0ff(DGe#SdLf-Y7)x_y;d zXj4aHmXh|@NEiD6+=-=-05`WO`EPG~a&G?VM{46Ef|+VAJZ&j1w6l?-cYi`8mQ@5I zaY*XYOzoZh^!z{uDR@1JU?bTw!yu zh{(@J_#uj$W8lZ$c@Hny+D90Eo}%obsg8mU`iuaaJ5tI(`7InC!&F}`H(P2)QDudf z#h$#dfkk@=G{f2&6au2t7U%pMm$WjOvGea+CmcO`n-CGPxOq}25M!%G zzJ8e=xRjg~>f4l>y_|O;4l(*;Zgib3Mnx=6x26}v^rH>7_)C%jj#lv}6O$XX135Kz zfQt*)gYiSLMYopb1gXUYvoYZCi4^5L%AiJV3Q9VCOUk2tf)dnovGBxX;x&{=fcO7b zbE-ZQ-RoV#XP{K7nL%-S?nS+S_AAUlZ5Fvto><76Zt;)omEwLE6^MJ(o%+e%KbwDu zvix>Z0nxdE*x2j6`P<7R(p(5Y@2aRzq@!4_NFQWLVOOqj3ZSM}$ZxxP5i7exFB{Iq zaCTGU+lN>5=c3#*l5pL{)0if-1Ee;XuiRMQscp;@dk$T>6^W0QXIInP;Rd=o|JHW6 z`oRA}qS+MYb2JrOSYF|v+c{6=>|h5%={07Rbdn9^j#xVYr0KzFVTg9-^d?!K3UT2Q zRi4*6!hBc9700R)&RXF7+sr|w=z_-1tq2;83QjSXB{m#K_Cd2)DV)s8#`XXXsjc~U zR3Dfx-M4g(U5e-G4`g#5Bmda*fxccc{N_I1CH&|VF8{lKKOi;9XI?EkL#edlPbVfV z^w)vkzfX-7w2a;{jZaWKVDP#0(Ejb;rOd)M<vQJ*51RtJ_+r5nh)ya@nkmDz*-^l;ZhRXfX4hTA6Ug6o$I1tB z9g!hHlRMf~hFqX|A|AFNEqg6_Rsx`AL7q6^UA9L6r=t0@K!MqlH;+GaV9DNkEZfw( zf6D=3<(l&z?%Zz1yjv=VAsQC_qB!*NoH(W9%e`Fz@Z^xZ>CTHvi_A%JN@dsp-urzE zxYZ|4!QJ#gM5*SeDH1HK92v+ie&^PTY*v5e0ui<5RdxM~5g%05AOT*iitz4u;^%y(bE^pKp`3FbtZGWWX4ZhS)cg!FoHI+Nlty5BC0S17MH z>ojW{YpLaUUhMmV(b87^s+6Sv=ezAM(I|Zfw6m3QksDH+?*3Outb2`w42zRb2I|&- zCsgwd=k$YOA%K}omneF_ot%Ye(>|Y*Jg+j{AvG0S?6tA67ASNuBFzokGfcD+wWeI) z@1OJe4CZ6XK$#J4K61#1-x-Q*H)Ar28;>n{&YT`xku?rihF|k~IKENoO7$Xk!9*u! zPiMfxPGM^ZQ%ZM9VWBH?TJ7FaS6#wkC^TQ8f#_;@k(e@nAFo)|jSNgoQI-AqT7d{& zZ@*Lib9STMo{Tl8u-8fG=qigNEFUD?IP#2_u6E_V3UK(*e97pLb8OU5kDdL_v6Q1A zYf=*$etf8D*g54WiHe&WrVE(!D>(-p>g-#*2M&YGyF(F(c4FbNm?_cY;90=JTC@z3 zAHFKG!X1_0+$EwXGVBwvl?1Pm$PP7)l0>rK{)(Z1|C+YD;TZkz4?XQh$)IrzSIVE# z9jMwC%+fzsf3b$8xyfMsL!j7jHNH)!r6|6qh(SQBG@r6+V&MDj+{p$K02XI zVA`P=Fw;-c9?Zxl1^`OfMH@IgaxN0(#q9O6sTsTTl%|b1UHmZI7xOkqhX$ob{K*!C zVuk$E@SO8GqF<{k?$j>Wat>a8W-I|~V@#U=z+5stfCCD2UU=9!ZR>0ESt-mR6^l)Y z5rmC6(Q=<)sg=t2__`Ylw|n0Oa+#r5d`6W&Ye-~lq0k1n2<1n%`s;oX-Dh}x%W)X= zsd^%@Dr3mggL{g_+J|^ZYfR4rJh$dQ__rhYG0mkt+6HjnyF1jS)Zig^Tz#c#|B~eq zt(AA1!{|kikc7Ad4(!QzPeB*VlR6w91ea~^Oxlf6yBMuql6Rm;nIIWI_N-96(&Kk? zbpuXnZEPaRKb*+bp_9_RK8h$n-UhOu-9bkErRx31JnES zi1I3-!dpLBwRsfe%#5FK9SuI7D0N=;jZ2M1v}^47C}+`OQ2IIsAW7iW(Z9^p7Ugb_ zy)k|JE=>q_veV?y4r%ULTVF!@=uSHBPN#;`sRBwcb-Q+^%(=ZI#}l{ZQ%E9OI5U}* zEN4H2DX%Bz{`h*vr6|v0PuWj`T`PGBH*tISUg)Zs-C%rsNq#i9CnaASySSe`Qtv7g zHc@H7pwmA-wE~Rc={=4KM>J;>9EUIQuE?_wQCZ`PSx8=pZu@yfg|+Omy=8i%zL<@{ zrdZQa#txTF%?xs=Cn(=2Z@snvfsi6%80VJrp!y*Tayn&diW)iby=?LhMShBE#AcnV zu6`U{APkQ84Wg;LopdaqNY#cbX&JV%pob%YA`ruS*tvKrAVV`b^4y%hMyqD={1|u( zQ0}_BuC15qHV8qYL%7nYCEDH|5l_krY_LY43tzNt9*qrOUE0TgcQeda6^Vw#Si%;p zKx`VJuuzzAsI#fl?t1_^U$^v=9IYecG_0mPm=l_e< z@oP`gD;2sT*2w;9z=FGZ)LBDJ%cRN#8B-yBxqqHT_8;!FIdousdg3&gl4syMWzma> z>1#&opyNr?Jzd4B8W$HzO;_9q4W-A0I7<)9PwToyS#t@^QJ&F3i;E2)6l|i4ABcNY zCYWM#Dy9EYZVqJcBCn1|8=51%M^9;4K-bahR96}YNTYiVhYEKh{(rU^gjN;l!8+SC zW7JRKC9fcPaQlv!O3^>%U_$2*mZW~e1rhY@8CQun2^a60?-(A`pGSO&(-u*Vg!{(v z3a{fF5Axr+ErlnKE8y_sW4rT4&>nKRTc>fZOKXW`zm&l5dSim@YFjsMSGLpx%Y=Ds zKk5rk6$S#1QJt;#1A#p?p@K z(C$+?g%^Qi@|gi!4qmmf>%XZ7qD$VuQo2R7Lu;|A)}3qEC+7*nlNpg@7_8=r#15NL zOwX`ZWd<#HI(0ZuX|+HW=u#Zd1~O?ByZIOt8%Vf&+1i@q)673^$9PKNQy;KEv8k{H z(HYj#!AB+VA$zsk&jTlL`tt4dt!3?rTb5ma|8UUK;FiJ}vq*1H=ey~9pZMJzNW*VW zmjz~i&2eUyVMUa_ZDR$}Uk^-=LRL8y*_{cSbjz0R<30v>H&bK#*EdTYTtp~sQRvwi zw)eLjUSok$XWfbchPxJ{uYPg^5&H3G9~$c&kq)nzz{iHIQn=Zh#59sT!Q7l=m1S*A z$H~O?o5RDZgtfc}AXvL*l8ljF^{{`|oQbekJN)Vb&0+|Vrsfr$=#a5!-~NY6@A;=1 zv35iA(?%;vR;S6`G77>%kaEpo?)kWA3{+jA_D^SR6xlC2X(IQIqBTjHl2nef zLtS2_TA$FL!}8mFvvnQ4{@Sb*m01RMp{7L4{`o)XN^q_487D!0DET~;;E{HuC34~1 zpsNK>f6yiWv%u~`VpCzGO+LELRtao{GK`|y(Qa>bo)@d#&TUTnkj8E29OVhSk0k%& ztpR$6IV%=wF0PG^V-gnTv$T=b8sc0}4pXEsI>QQ_jkf06je#z83#;H&Q1x3}KB908 z+8QER?4<^inkWUmJfg97d$Wc-{wA1fX@y^$^;c(^6B?8+kG_k_ObU2_t!s{YfYeQQ xKTKhFsz3jAuATnucuB0di2>h7({r|k5_j&I3xv%?sUGJ;lN|5?eT!5=4ettflGbnN~Q{GFS}x5>;O+$7!^$>X!p z$>W~aLvKGaA{XWGe273s-ZVhnZ|0N<(;80h?3cRC{+hUQ+ow=~#+wKt_K+*$F2{JF{7o8s z)K1HbGrLE{Zu8?H9i6`x_BDEZA=-@kY|=POAS8wK-003w*KbmPTS<#+ZvJj!9T@P|ccV0a7+YEzBJ3TW0JufnX$#*|_ZzQkzOh@Ov-{KpfPv2!uHR8MqGUhJQ z-i^+26?tkE=kYzV-xvDYL%IB65i#b@nf91&47oucj#@ryAd=Z zhe(t}E^)01UxSc%nAcIG4EfUeO{-Vpn@*O$s;}V|eSJzmt?5-{cG`l{M`p+T{P5qW z_~mLRk#Kutnx?_E3~5$9Fm^(Z=S`;4egI2QXy45Ofv9}6gr{B{pL=totBWc zzbV|iwAJ9zav{w53WYao_8ZD;p+X*uA3QT+lqpM7*ekPJTqZ}Zd??kI$68|8?L(<@ zZpBbVnhkh%eQ67!e!JR2xT9TnhPu6E z&pyKEFHqT<6^5g7;CuIDeS4M-YdV(|$#>gs9`JVOWCo;31f?_9oQ%#=XCkp)v3In+ zrF-{r9Dybq`piUB>#2 z_1C}GgWCp3#J7N0gKD~)ZyjQTsHomhz{mV zqWROAw#tutp>4fCnkxI2@yS^*Z6OI3()s8La7y}q0rlv;oNOGfM!OJE9p0lN$wGaFya7uD-n=i(pMIB}s($C93iHxa30;QT6kC#%nVRin_! zFL&$ZX&ORNTcYU{hCC`pCygHoYaBqV~TPmsUl(uvhC23k@(ZZ!}0~3f6 zc2lvZ77*e&tPO1-SO46~ej9kMub*^P8N!aUn?+Hkk3H!30^5CLKa6)(z@X z#ye9T#2P^&d|K@knPU-tF849OWO0_bla4k^OxhoG*p;d0A(?*F9K}mLdfb(PXT{D9 z`|(J8Fb9MT=(WBBeCQ!sO8YMk#)ERItAKr;7Ha_Cc~?g2w{Y1xDA40JkH@Nb++v~n z@*HNavETDxn4{(fo@!GhUG3=H?cTS$6l;io{?CUIx3r?C)&U&OM)*m7yoM4mc$N(v zu_$^x9;euBq{r|6l`4{;%h^$OcKMsqQLOlY?{dTa#)b1b&Efsf-a8SIuw+~EweY0F zbuCyLu~cGsE>7u$4t$dPr|`m5nm@>9H4H0UCDen#ZNpCs`!xT&C5UTCGVdm|Yb19z z;65!IKUQ=ATmP_lrrn8s%vf)AjzImVs3A@=>>24y^COtC0_s?kW;Rp_vd|@BAEHTF8BU%^1}|V z=|G!RDA7>1+EPK>F$T|07SB$KZ2p_8SwYWt_UuwK692uQ9;Ltp^=4jbs@!VyTw<=U zV%0Gmb+p%1Xv5P9>u5$9@X(=q?b=0DV~grr-TPdqIUUNe~Bj>6?O>TYF&3fDA$s1e3Ve4vf)xO*|#n);1(Cl+6`H{4CT+h#rD~2zg&ni^@gR;0D_VkD}X> zndvG1IF|PE_yxqbJ^%c0omvLZQhO2=&eWb-m$;Ba5fqI0B6<(Fm?I&FQ4e> zu%9m3huh|EZ=PSn@%w6p*k@CRD~B$YEF1yEj=C8ImJ;?8ypp%DzBl`Sjv0z}`Eu0J zQ>c96(~aNZ9hZS$50zfQ9yj}>OdI+%LjH}1dFqF7rQCK3#7>}Y^1w~O8rZx|U?f55t!TRPk}DYC3-_s*F3@+ipR ze)1g_cq9F-%Uf``85y7E&EKLO2ZL$-C%}VU%sD^B8X2KE4dGV3n}#t)Pho5RvY3-u zLa&s%JS{J}nudSz4xM~0AK1Q8@G$xB8pU05rn+&a>w4;GX_TaLLZjlv+g8dB@JQ7P zJie@+-Nq(GVG?rME|;s8cNHr7RY8yXtEpPv@{3QN+Q?diduzKFmesGvN{18&d=-Af zhzkbACe5B40YfJ2LsbyyITqaXR*`dQM5GADBpm>`c7M%W1m>&M=RKOM4rY?YAqG{e zK3`dpeO`R}y^hYa;!DhR?s4ozl!tNpVGY3140Y(_0rMvI$hiDWn3ynE%p94ddc zn6>5T9@$$BoKi&_G3?fdxY_f&Ux?YM=f_MUC>td-vb4wcp~;_rOJnrJjjjPpxVdtR z7SOBTdgWNJ0E49=4}x@!wi=OM;K8pWa$23^4i@@W0_bf({rw5vyLa^v$Fe?@Lkv8# zz2)&y@cegE1&o$ThatNtc+Ny1p)YqSbx7Zi1_X1KlALtAeDedLXm!LfYlEQoNbo52>-CNOM=E02sxq3W-E-jzWH&7lbJ3++9peI&50kr~Jc? zCdHrK5AyX{D9(TzNlpU!xyqZ3*L+YSRO;3Ww|*)q@m`X6NBFs6K=+$=l8KdoV6SKY zrP1)7{QiP85>jZ~0dt2?c{eU+Aj^^sj1s#y-hbs`1f2Ld#i#^RZwh;rA60-Un?yQl z78>P4OIGSmW#c+7etraTJxs0MMX>cHoX($~9$ImO0S1+2yxK`z4J_sxuGp!*P8uh2 z8)l3?$|u=mHRQYnSH5ZLOlE(6uJNunnk!KMqf%{_9A{fXY#3-_d5<3rD(P!$WTV_6 zH7UN}UeZugjJFC>N;?~O;{&sq+XNADGt@FSI>807`X3u`167lW6y&q&U z3P33Hh^6hmZcKA&{LBc8wI$?m-p;6lVJW(La&<5?-x#8V(pO}D-cbp)Xf zTit(l%A=#fe5L0dcib3!BG$iHZ?AQbhxfxaw&GJ(;~v|xx*Z4{_f~#10Chobx2da@ZvpEc{wAfz|Ir(ZhqMOw=&Rxly(H|%xqY0pxmzm= z1pC#S9qBrr7RV$E)sow^pOpa`?sx>9bm2%r?XfEPGINBaMY)q+8VB z>C82J`GsVPon6DVl3HD{AsMYJ^AA$Q(hf3V;A9?KA*kk`JpUzwc$7#FWMQ8`K!}5-paA3-drB zUk-ib0igqg5TyvaR&v@mwhJG}kGG3b@@&C&aR1u{X_Wb^6$xH#k-fg;w@GI->Y)#k300x!CyN4a2f*ys2pcWZc^8Cw*E(EyCYs~(IHqG>($V(QK7R2s zc51rJ!#!~O_z&gGJgtXZXU4l1)|ABZQNWKFU$|vQPlj%|BK)ZarR9Fe7CPH1c>BAm z!K<|1KB9#*G7vss1BS;aNNnpaMqP?QRaqoT)KZ*%bkb{zjp)_)Ep#Qn%?)is_4T|? zLK|`rVKLWK_bH|dH>Y{r2Wz~`&Sib+4lznQ$$=<$;JVKj9z0Di<9{GJdcP=?| zZn@PxD3?w?XaD#n5xAz2|30!2TK^GYT-WTuZTYCfs_2XoUkdUfs?WKSe7(m6+<1+) z`l^w5yzv0&BjX$-pNRD;xqQm1R?J=e4544aOPDBTd2({KHaPcqC6rnym~~R2Xa%c* zx#=!Y-6b3iYdRS}DCZ*&PKH5`M|Gae)RGAxd4FG~13drj|A*k8$5p6TlU|-23*eO5r)kZl`v$~l82@d@)XHq-C5}S@0_nJjeeD<~btbhKO%2C^Rz+VfWCPW!C zlmzssb$Bsh#dGnqig7{}boJoOtDDJs9_X$PYuZ&7{;Vm+8O2-a!SvIwnf-p;U> z)XbdYSWyFgkhH3tzXb@Je=;b@7}a!8rX_f*id!hA#_Lijz|QgMx$7oCuIIj7pyPe62dqCTjx^-~%V)6bHy zyD^$ur=NfNw=79^<69O6nws>4((KBHWZS$AMJ7jh`UtPRX+-Y;vjD=ua`2bI;CMH$ zTAL!XOnm#ls+8Z$ufkx{H~UY(D+FJ&&h*BjC}XiF2arw4V-z0YhX9X4y>E+ zCxGIx716HX#wRT1K~S(qj+ATBcAwiJGz`501`Ewh8eadX@_ha}d*!0%vP)`2@iWBe z=X)lrgty^`K)k4!KpU)YA@Q22 z0aesNCU)FxYV-18(cMTY><^++l(=UCC%Ex1&YCf_IcYvyv?suAm{VXfs8@gF<4~y= zZYdAuOqITw-=fjSILS{uw(fbpie!Y!uMGDgpgyS+N4N3N$sPPKsR3v<-h9&@Qg-Y` ztZGO)iW?ou@`InA99nMESJWqeqxG#D$B!u2(j{Fh4OjOj%LOfnlwMF)j5u2s> zig&X3My-Ceh4tJ88Qiv^_MI5)X!N-_w`(J)nES4JMt%)mZ~B zC%lN(H|(u~&B>-FK6t+RM- z%AajA%P>`jSY%cmbNU!w!n%^WF?aIiC`uP9yH z9hX7JeCM?~it*p*Hyi~`dg;!gt=WFPe!WQq=sRF}jWouf=PqtwN4@6Wv}e2zbdIWu z#_rH#C2WdA2-GRsAT#MOKO!b>QF!QIqQR6{7kavij&X#NW%yi$1)AVXEIe_Ua?&kXMPSg>AP2dPqw)Jg#zeoA!wy7~vfs$T~kPODKILxigA`(%* z$|{)bU`Z&Md|8kNLj`wF#4k!Jb1anoD6C6-MUgi>^arcIrzd_XFY%r%1j%$j4AD%b z+Q&vOZeGKeO}ZC830^f)Ph`FTX-9QW;R}r28bl@E9!OE50cKb;L5V_zqW3F*+IVQL zN@`7wPrPz+eLQ!)vtm0`547F9D2;ozxmMA;93(GPN*5P|&({W?#uViuc2l==jodg+ zneuE0>Zu@ZW5os7mZZW>>E|2;PYH5i2xhg0Gc1$xAqq4JfMmib#G#=JAqoLx9d(G8 zGSdR+B^r`xS4nHVe-Y1_dWRw@(kaO(^mQottu|n|aAYz?(pgvlF^%;fE%#z=TlB`1 zFf50Y#=2{bWHxOfrv__RUM;?+^Nzmanz0-)>nqJQM`i$edE~_kF?-6^9X4Dm?Xd=a zdd1!42Zi6k*qx+78zAtdK(s0zkvkLzDA$|0&B%>{CAxJaJK_E33?_5r93}2i*uH=P z6qc>QO=~{HEBK{P-`zzHHI?+Qj&s+L26jFR$j%AKbBhR+owbRAy~>J2`j5uK&0P^$ z`q^09Q?xGV>vOb4YXO1jT**bayajgtN7!Jk4YaQ)^{YB@!1j7e)*6rqqcsl?X>S`N zU|*v)CWFU~%%7qmDf0|aigTGR$f4+|5C-#i@W-@E@1=mK-XRr3#f?Zx+phe&uU6vR z&0UvD>Llnh+-tUWa71x)KG6aWdx^2{{km1ea*8QJuFeL!Z((4ohr}K4w|sRw5bp%!8wJTtG0NGK8{|r5ws1o-lTWUKQZazb zOgYqkraZuCX9aL#Nh?OmqZb7(Ped-eYh?=;)%Mms9M%7JMHXQAQoKr)#Ba&wgt&LF zIcfwC9Hn*YHx~s^&aOti!>fHc3DL~E9=X)%=zo1yjh}<)~9O9N4*ayXUlg zGF{4%+l$Gn^KXeni{v}VA7!WhXGgO%+25I;Ja$FDV)7!I7ekP(AYzO6FunIjP*m=- zr7-_sg==d5Il3@KSP87lE@~|-iRjnSe*omb*#3^ij>KG+I~`$sRvE*`+%K87WT4+^ zJ=~kqe8Iu^&ia!Pj&H{w_Lc>3_U%A3b=!h6>D zjW?f2D0F*lvf4)%+K2O%V?Ng+l>^dJPxd&_SD}6}pQaDw*KcmV?~fDBS5q}hsx`bx zu(qQqvb<W9BkkyXvXUofp|9Y@|hg^}+UxP3&IKJ2Z@cYg8nmszj Ygzq4=R^u17&7pI_?INuC{LjDrA2}M%Gynhq diff --git a/assets/tw/map/SWITCH_OVER.png b/assets/tw/map/SWITCH_OVER.png index e241cf716aef1d01768894f14ebeb7e815a3a8f2..739c8e5ac65c90ad599d7b56d8621d8492fac8aa 100644 GIT binary patch delta 8284 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 I{>NMY2RN+xzwMC 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 Date: Thu, 21 Mar 2024 18:35:48 +0800 Subject: [PATCH 13/96] Fix: [CN][JP] Handle bugged AUTO_SEARCH_OS_MAP_OPTION_OFF button - TODO: [EN][TW] Update AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED --- ...AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED.png | Bin 0 -> 10622 bytes ...AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED.png | Bin 0 -> 10550 bytes module/os/map.py | 8 +++---- module/os_handler/assets.py | 1 + module/os_handler/map_event.py | 22 ++++++++++++++---- 5 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 assets/cn/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED.png create mode 100644 assets/jp/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED.png diff --git a/assets/cn/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED.png b/assets/cn/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED.png new file mode 100644 index 0000000000000000000000000000000000000000..e2d954d86f902769de61635697578244728bd129 GIT binary patch literal 10622 zcmeHN`9G9v*nf~?$x;&8g|rYwWr?92p=_xvDUxNv*q1Sup`7SMjfgQ>OC{N2lyzp5 zEMu5Sj(yKEX)v}i#%%9&&M)u#H@tp$KG*Zy&*%O;*K^<3_j_&k-;VZH;-d1R004;F zSpVq+0D`<*{%^v6@B}Gg!kH&TLap5*0ATNd-xnY7BL5Hoh}!vESU5V~3yBPgxEB(t zYGYxc8X6wr=MV7(fSA#OYf#rLx(sNF?knkhad@=`3AqobsaFVh?Q?szFB9=Ud<&}gn=h~0P2{P2ETbTaOcK-CvE=LFF zb+i2yCvY`H4Rm;Iiqn$LzX#Z7Poj=`&d(1Dgm&_Mh{6SyxdWrlz`ZHPZT&Hk;+vx1 zVi{>LLzcO6;Y-IZ6D38_y?d9B+d%Bsr@^;)Z#iSJt3cQbb5vz(NisXk zD>%B!=_#48=i=#LI$535`7n|F^myNoGc~ug4?bRV{ky?Y&8`#H==AK*!}#nUQj3Xt zYbrTxku0b-BLUJ1U*Y3VlW_eW4Vc3>PNvK6eFp3UpV5QS0U!&yJOp#WY$?_FepA zE=f`J<)NGla@SjphxdH^ARu47|HaI{y3eN##mUoBx9(FyW&gNysPN07mK2da7rKNG zcpWx=wEynYVKt(#Eb8eVH81NknMtoz7avJqRcr4Gf6ZTZG2q#4YxVV$;nGG=Zkg|7 zjCHB%J!U;_u{!pKq&4$q2$v&I#8hRj4AL z)n`a%IAk*MZFBX~#_f-O*owT;aC-e*>hf7%v-v%5iu5j`ir-)DEi3#-`28c}qMJ5B z#nFzs*HX(4oQZmIq&H8-g7Ere$-uW4{$PLlJ>A8~CXtC`WlQ8Yn@{od>4HzdnFoD<$&x`B3_Efe`irhK4G=|*$exhkR))Cu88y6Rbi z^<+QT@fNR5d3dQf#k%CWcYTN4lfyC{dcJF}7YDty(zFo5n4A*VsWC+iWan4LX-VP z9i;ZD7@RsId@e%{a@x>)wI{>-XJD>>L*MFOGw=2j?lnF8datC9GMykfWlzx32-AV09s z3p>&>#(MJbjb(oO<+O8YojId9@dUvfyBvB&t~1CP=1g-Qs<0WnMbV}N4Z1)a6Ok(7EArIZHG zN1l%lkBsVxhJ?0IUeBCqEBjj3w&(&@0KbeV*f=Zu_DTjp3K@-*y%tpZxHPyZmXJL! zztZ&mV?V7VuQ_kLawO=Vi5}DTgmR{xPM!k(cAF{n!saU7^+#CGY(Z&W>6eWRvaUz8 zhnoizqwIjr*DM@771TBM)qNU6h`VD9GWFddE((A;K>S6qMXA`gShXortU7!Uj)DuZ z3Yq732yDbQZU(k4vt}=Nhwn4rJRj!1{C%`Qpn%FA)Sfp&X9b@KHvge320D0AOhnvG zB|IynRd!v0;jKRo)_&1T$ubh8kDt(cuk-6_-L=TDNV@i5#he=xjCs0-C`)fVKNj#QJQ`dP0C9qNFXc5P zHN0=QACtOmxrUUAJfI=6{P*0~;jgBD&qnZ*Ausgv=U!aTiS(|TAAi*-yRb+k6hckh z&bnp98$QgHLe`qiC#zm`)IH=dUm9$ubYT6jyoU~!*jGO-4t)^^CoR}Bxy(lO4Lj#Q2PZ2?BVi*ajh^Q}&o6Nj_s^-*8ah>ftlq&- zODju!4z>`~t&o-4O`lU|L~M*5ggmtEE2(p;a+Hv<)qSTG<9^6JrokFxee)mvDL>9H zhWg$IGVz#<4~`8V(8CQeZfnzOILl@k^|WiUP@U7aotk`N{8zsx5bhCbbJ&hQT%B&L z2f)VHpE@OffAhvd>w(Le?6T*0LU7gQ%|`EoUfDi3r~$|Ucjv?tve}*$p%w3{wm)2I zSoq;$?>P`pg9VL_PF}9>UZz-6UQ>cA=x(^`%b0)*1K(0s#VZxop3EzF23?+vd>I=+ zd)iyq+ubX0*6ZxDd(WqevGtedO15GP5^ocn*_Gw>*b&XqLEHp1ZbKqj>EQWE>hqqPUoH| zTN{VY=Ou-V<}JT~ehj^NLgLGX`OinE-p0qxI{th~Y#VRuokAtn(}XG3Fs<*#xTuPg zB|*ieFEP}g=_Lh99!gf&dM=!Lde%Ft^DM%pu(;ru=^A71LDp=kPibL+y_xAhsBswG zmW2wuef2g5Y(XkClZ{-lt@otkHzvu5+p8_1n`-pCV@K+*RGL$8X0X zVyao#QT8vP9m!vbb(|XC)}ZO_JFRy}ZEliO36a!7&U0>m>dbem9;*TMOX^P$1u7~E z;_{evA7a)_X>I8NQa9Y03!_Aolc(4}m{&-ytl`zYj5HFi3RboePAxC1HttmKRB0i? zOxNDBDv4tW)COwPR3}CSb&O@saop(J@$M}B=0FFL<2fu{`d=H&Bj1bkdC{h-x3!ZU z0K^^vfTUyqU~qYI5dfl20l=?20AQR80J0&Op6!ZiF4KIs-|_7o-zTVWNz>!`y|(AM4_rT|ZDm-hmJ@qUj4iDj^k}|DwP(0RHZMO6 zGrALxd3R}G`sIl`??erYEe*zRN?WJ#-_GS%>U!uCcKv+-a$>g942C(k6Gk$nTN4bX z$S{ruo-5AN7I0j2P~%0I0APNSZ{P2M$0A9;g`+L7hbNNm@~i%Sls*9P@kDVhzzb^t zpnZ?|Z*ffXzp1Bpr|vG(u1V}7XO|^*8FANf>^jNafM7Rn+Kmx+L+RbLVK+tk|CC9x zekx)jp7&&WowGIL&U;Brj^bizY6OzX+|rt5tz4GIthQXWhtfHhsh-T94pt|Q0ZSQi zuC=kp!EzZzI++^o7J7+6AWUM`t^8{4w48E$RAyQ!WvS&HsV~k7KY$kF_Mj0iMP?dC z?v>%|2+7(QZ{1Xb5PMw+mX_icZd8S4`JgZc^zcZEbEXeFvL}%{P>?HjfFG@Dp6~69IB$7&j7^Y#{k`Ra$N~_45TY{FlaTYY< zLRQE>2m8v0f-}Qfx<+*5}8n3%)HEhDYTif zXZ+^OmCw}n>k~eYqb>9V>qZ7?*C&6ioj3|bj&x^W5*v&1sP;7>in1q>_)O(5?iSwrJ zj8;}2-WYvY*9*fs9d0f>s+ui$b%kwMk(RrR6#a70zS^g}Ywl z$uRl1ER&>CK;{b_zU2p_dk{$^EPXWD-D)H;K^K1mXn|%X8_?0*!3)X-g??B}c0uB4 z2S0o~$RP!ZWMW7$4~tHLwpXKN$A_A5F((~4mp+hEuaI_R#a;kaGONxv&d zkufll)kUg{oURU*x%$Md)>ZqhZ*$&p0MrE4QyQ+3LpRiPeO{gw%Oj+dIx3vYeK7W! zVjHlnNtEVVM`=Gij<Y1Mda&jF1^~5(j6-ehG<+ePM;e6eZ&f zTR0O?xglA(l*4V>ZeT40$a5jQrE7+%;xjzi&9g270@t zuEZz&STzIZ;)dI(eaTEWc6Gn@Tcs)pp%#O#qCKP55ZL6}JQ-RhJ4D3AK71s^u=gwO@4tb0C@RD|bihLx;OZs4g&8bN_feHKu8$oC(`DQ<*0U z{AW}Ao~-pY3T8)n;yg;Cds|{wvys-{rVU?@&Gezoh1pXlNt_}TAMS!z2lCZKfhXHI zO(CtPo@|rp6{i))toFpgcWC~Z{!*bBtaXRac)FY){*=Ocrwktg?E}VUB}0S#TAEfl z$fMU-SM;WoYa3qdxGOG!L7p0D9~w`2N>qni_$O@F+VbpNzR>J`k_6}T!I5ZWv%=rwLaXGpPl1$=p6L>9)EjHFhi=6(g9?vrMY##=L zL37gu$rNV(IL06Wjq*_GOw(RCKQcB(nAgN}8R`d;+$}!wkXPMXT@=Tj(?)XZh=v{u zEIce2n;0L(C1~_V&PMPMV8jSVl|Uu+amL@~8hH>{i4Q*trbOlZ#~|V!9{l;eb=vf} z-ps>^4SNjHJR2te-0Gth#uE@`1@;38LF6|Ei9=G;iuazVh%W?-UiePT3=(st1H(hKgd^6H>)>yCLrWX*g2nJy71^Um1vk{7T*R=~+akh81@unPPE~rxYs&g)Y_l z&$^U#g<6H^_TgdhXj2ru*6UFCDsjwhJU6HJKYEqMFKmPewvs>?4~cw@^BXXUVEZdc zonUX}1e&VN+j*=_$C@6Pd~JG6zGHl6(JNY}Sq^Nmk{A_Y+~Tc>&YlZD=L3d5n;omK z@}9#Z3HfG5S2C9-UFUwXse6+wh=UZ9?QMIh|CHfM#;^6I4%GxR@ObI5DoAgYCSSGY za_|JG`$xc33wi@R&V-=m0{B~j**y>2Z zV&n|ntm_oS?m!Y0*~nPADpO4=%?r--(Sk*z&O?z#Z1!xvNdvc=d->m@{j?Q%9%z8a zJ|nC(OHL1urlY7USi{rXdHp7=WwuYwQj0Wzwoy(=QImT9$_x6orp7tM(aa-IitZ_5+2%o9&naFvCy6` zl-v;v+8*(=qpRpftVI@7dgT_L>=$Wu=eZ^O4zR3SrL&u<+x*YLu;|pvbekNy{d#>O zJf<1iB& zu)RMzf}aMf;MVD4d8cRndfH=qcq1KQJ$Q_en<=PwL;VtH+n{q~Y>E(@fWqxC5@Y74 wRCik)yB(q3?$^JZxZ5QB|J4v>CJF$^%{KQP+%oSFB>>o1+W%Q~@y>()0qN=+>i_@% literal 0 HcmV?d00001 diff --git a/assets/jp/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED.png b/assets/jp/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED.png new file mode 100644 index 0000000000000000000000000000000000000000..e1fc3b293884d4ff766f6d6affe3b2b8bb6ba122 GIT binary patch literal 10550 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 literal 0 HcmV?d00001 diff --git a/module/os/map.py b/module/os/map.py index 94f574908..67f70eddc 100644 --- a/module/os/map.py +++ b/module/os/map.py @@ -6,9 +6,7 @@ import inflection from module.base.timer import Timer from module.combat.assets import PAUSE from module.config.utils import get_os_reset_remain -from module.exception import CampaignEnd, RequestHumanTakeover -from module.exception import GameTooManyClickError -from module.exception import MapWalkError, ScriptError +from module.exception import CampaignEnd, GameTooManyClickError, MapWalkError, RequestHumanTakeover, ScriptError from module.exercise.assets import QUIT_CONFIRM, QUIT_RECONFIRM from module.handler.login import LoginHandler, MAINTENANCE_ANNOUNCE from module.logger import logger @@ -17,7 +15,7 @@ from module.os.assets import FLEET_EMP_DEBUFF, MAP_GOTO_GLOBE_FOG from module.os.fleet import OSFleet from module.os.globe_camera import GlobeCamera from module.os.globe_operation import RewardUncollectedError -from module.os_handler.assets import AUTO_SEARCH_OS_MAP_OPTION_OFF, \ +from module.os_handler.assets import AUTO_SEARCH_OS_MAP_OPTION_OFF, AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED, \ AUTO_SEARCH_OS_MAP_OPTION_ON, AUTO_SEARCH_REWARD from module.os_handler.strategic import StrategicSearchHandler from module.ui.assets import GOTO_MAIN @@ -508,6 +506,8 @@ class OSMap(OSFleet, Map, GlobeCamera, StrategicSearchHandler): if not unlock_checked: if self.appear(AUTO_SEARCH_OS_MAP_OPTION_OFF, offset=(5, 120)): unlock_checked = True + elif self.appear(AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED, offset=(5, 120)): + unlock_checked = True elif self.appear(AUTO_SEARCH_OS_MAP_OPTION_ON, offset=(5, 120)): unlock_checked = True diff --git a/module/os_handler/assets.py b/module/os_handler/assets.py index 68694c637..a982033e8 100644 --- a/module/os_handler/assets.py +++ b/module/os_handler/assets.py @@ -11,6 +11,7 @@ ACTION_POINT_REMAIN_OS = Button(area={'cn': (878, 28, 928, 46), 'en': (878, 28, ACTION_POINT_USE = Button(area={'cn': (738, 528, 910, 585), 'en': (742, 531, 909, 584), 'jp': (737, 528, 911, 586), 'tw': (739, 528, 909, 585)}, color={'cn': (93, 142, 203), 'en': (107, 152, 208), 'jp': (92, 141, 203), 'tw': (95, 144, 205)}, button={'cn': (738, 528, 910, 585), 'en': (742, 531, 909, 584), 'jp': (737, 528, 911, 586), 'tw': (739, 528, 909, 585)}, file={'cn': './assets/cn/os_handler/ACTION_POINT_USE.png', 'en': './assets/en/os_handler/ACTION_POINT_USE.png', 'jp': './assets/jp/os_handler/ACTION_POINT_USE.png', 'tw': './assets/tw/os_handler/ACTION_POINT_USE.png'}) ASH_POPUP_CHECK = Button(area={'cn': (665, 318, 759, 340), 'en': (372, 324, 601, 342), 'jp': (438, 311, 534, 346), 'tw': (665, 298, 759, 320)}, color={'cn': (154, 163, 172), 'en': (174, 179, 184), 'jp': (146, 154, 161), 'tw': (157, 166, 176)}, button={'cn': (665, 318, 759, 340), 'en': (372, 324, 601, 342), 'jp': (438, 311, 534, 346), 'tw': (665, 298, 759, 320)}, file={'cn': './assets/cn/os_handler/ASH_POPUP_CHECK.png', 'en': './assets/en/os_handler/ASH_POPUP_CHECK.png', 'jp': './assets/jp/os_handler/ASH_POPUP_CHECK.png', 'tw': './assets/tw/os_handler/ASH_POPUP_CHECK.png'}) AUTO_SEARCH_OS_MAP_OPTION_OFF = Button(area={'cn': (1205, 549, 1275, 566), 'en': (1203, 534, 1274, 544), 'jp': (1204, 572, 1276, 593), 'tw': (1206, 573, 1275, 591)}, color={'cn': (196, 169, 169), 'en': (167, 140, 142), 'jp': (180, 154, 157), 'tw': (167, 143, 147)}, button={'cn': (1205, 549, 1275, 566), 'en': (1203, 534, 1274, 544), 'jp': (1204, 572, 1276, 593), 'tw': (1206, 573, 1275, 591)}, file={'cn': './assets/cn/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF.png', 'en': './assets/en/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF.png', 'jp': './assets/jp/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF.png', 'tw': './assets/tw/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF.png'}) +AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED = Button(area={'cn': (1205, 531, 1275, 547), 'en': (1205, 531, 1275, 547), 'jp': (1205, 531, 1274, 548), 'tw': (1205, 531, 1275, 547)}, color={'cn': (156, 135, 134), 'en': (156, 135, 134), 'jp': (157, 137, 136), 'tw': (156, 135, 134)}, button={'cn': (1205, 531, 1275, 547), 'en': (1205, 531, 1275, 547), 'jp': (1205, 531, 1274, 548), 'tw': (1205, 531, 1275, 547)}, file={'cn': './assets/cn/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED.png', 'en': './assets/cn/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED.png', 'jp': './assets/jp/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED.png', 'tw': './assets/cn/os_handler/AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED.png'}) AUTO_SEARCH_OS_MAP_OPTION_ON = Button(area={'cn': (1205, 549, 1275, 566), 'en': (1203, 534, 1274, 544), 'jp': (1205, 573, 1275, 592), 'tw': (1206, 573, 1275, 591)}, color={'cn': (149, 176, 193), 'en': (110, 131, 152), 'jp': (145, 172, 190), 'tw': (123, 148, 169)}, button={'cn': (1205, 549, 1275, 566), 'en': (1203, 534, 1274, 544), 'jp': (1205, 573, 1275, 592), 'tw': (1206, 573, 1275, 591)}, file={'cn': './assets/cn/os_handler/AUTO_SEARCH_OS_MAP_OPTION_ON.png', 'en': './assets/en/os_handler/AUTO_SEARCH_OS_MAP_OPTION_ON.png', 'jp': './assets/jp/os_handler/AUTO_SEARCH_OS_MAP_OPTION_ON.png', 'tw': './assets/tw/os_handler/AUTO_SEARCH_OS_MAP_OPTION_ON.png'}) AUTO_SEARCH_REWARD = Button(area={'cn': (575, 598, 721, 646), 'en': (574, 597, 722, 648), 'jp': (577, 597, 722, 645), 'tw': (576, 598, 720, 647)}, color={'cn': (169, 168, 170), 'en': (168, 171, 174), 'jp': (165, 170, 175), 'tw': (171, 174, 179)}, button={'cn': (575, 598, 721, 646), 'en': (574, 597, 722, 648), 'jp': (577, 597, 722, 645), 'tw': (576, 598, 720, 647)}, file={'cn': './assets/cn/os_handler/AUTO_SEARCH_REWARD.png', 'en': './assets/en/os_handler/AUTO_SEARCH_REWARD.png', 'jp': './assets/jp/os_handler/AUTO_SEARCH_REWARD.png', 'tw': './assets/tw/os_handler/AUTO_SEARCH_REWARD.png'}) CLICK_SAFE_AREA = Button(area={'cn': (1104, 169, 1214, 284), 'en': (1104, 169, 1214, 284), 'jp': (1104, 169, 1214, 284), 'tw': (1104, 169, 1214, 284)}, color={'cn': (96, 114, 142), 'en': (96, 114, 142), 'jp': (96, 114, 142), 'tw': (96, 114, 142)}, button={'cn': (1104, 169, 1214, 284), 'en': (1104, 169, 1214, 284), 'jp': (1104, 169, 1214, 284), 'tw': (1104, 169, 1214, 284)}, file={'cn': './assets/cn/os_handler/CLICK_SAFE_AREA.png', 'en': './assets/en/os_handler/CLICK_SAFE_AREA.png', 'jp': './assets/jp/os_handler/CLICK_SAFE_AREA.png', 'tw': './assets/tw/os_handler/CLICK_SAFE_AREA.png'}) diff --git a/module/os_handler/map_event.py b/module/os_handler/map_event.py index 3e909d531..3b186ec58 100644 --- a/module/os_handler/map_event.py +++ b/module/os_handler/map_event.py @@ -213,6 +213,7 @@ class MapEventHandler(EnemySearchingHandler): AUTO_SEARCH_REWARD, AUTO_SEARCH_OS_MAP_OPTION_ON, AUTO_SEARCH_OS_MAP_OPTION_OFF, + AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED, ]) confirm_timer.reset() continue @@ -244,11 +245,17 @@ class MapEventHandler(EnemySearchingHandler): bool: If clicked. """ if self.appear(AUTO_SEARCH_OS_MAP_OPTION_OFF, offset=(5, 120)) \ - and AUTO_SEARCH_OS_MAP_OPTION_OFF.match_appear_on(self.device.image) \ - and self.info_bar_count() >= 2: - self.device.screenshot_interval_set() - self.os_auto_search_quit(drop=drop) - raise CampaignEnd + and AUTO_SEARCH_OS_MAP_OPTION_OFF.match_appear_on(self.device.image): + if self.info_bar_count() >= 2: + self.device.screenshot_interval_set() + self.os_auto_search_quit(drop=drop) + raise CampaignEnd + if self.appear(AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED, offset=(5, 120)) \ + and AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED.match_appear_on(self.device.image): + if self.info_bar_count() >= 2: + self.device.screenshot_interval_set() + self.os_auto_search_quit(drop=drop) + raise CampaignEnd if self.appear(AUTO_SEARCH_REWARD, offset=(50, 50)): self.device.screenshot_interval_set() if self.os_auto_search_quit(drop=drop): @@ -265,6 +272,11 @@ class MapEventHandler(EnemySearchingHandler): and AUTO_SEARCH_OS_MAP_OPTION_OFF.match_appear_on(self.device.image): self.device.click(AUTO_SEARCH_OS_MAP_OPTION_OFF) return True + # Game client bugged sometimes, AUTO_SEARCH_OS_MAP_OPTION_OFF grayed out but still functional + if self.appear(AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED, offset=(5, 120), interval=3) \ + and AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED.match_appear_on(self.device.image): + self.device.click(AUTO_SEARCH_OS_MAP_OPTION_OFF_DISABLED) + return True else: if self.appear(AUTO_SEARCH_OS_MAP_OPTION_ON, offset=(5, 120), interval=3) \ and AUTO_SEARCH_OS_MAP_OPTION_ON.match_appear_on(self.device.image): From d1a9ce771dc2c49e564f5bcb91b0cb8f7cb81218 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 21 Mar 2024 18:44:32 +0800 Subject: [PATCH 14/96] Upd: [CN] MISSION_POPUP_ACK and MISSION_POPUP_GO (#3530) --- assets/cn/handler/MISSION_POPUP_ACK.png | Bin 8545 -> 8840 bytes assets/cn/handler/MISSION_POPUP_GO.png | Bin 8303 -> 10220 bytes module/handler/assets.py | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/cn/handler/MISSION_POPUP_ACK.png b/assets/cn/handler/MISSION_POPUP_ACK.png index 86e66b4283f3a80f8a6aef7e6f70ac99c3e0785a..d9c4038fd22c170349e664ab678d4711a7f585de 100644 GIT binary patch literal 8840 zcmeHsc{Ei2|Nlj0kR>fdNRosoMAo7ZvW$#F(f20_MI6@ldKco zV;y7}`xyH)*5B0U@9+P=Kf34M^StN0&UxL}^YM5-pO5GB+!tmh`rMpCoB#lD-!Zra z27trNSJs~(R;IZjX2`-c9KHrN0RX^t{LjMzyvq;-0M5Jay1Hg&k6?kYfJZRjvv+iL z&-(hqT;07M0swp%V-aGVL_ei9PJhS?(HUGROY?dHoRcU5{ou3t!1o4lisIwHL5P0N z2|01{ScZY+x2Ggd1I+Wu_ZMs3ZpJ>hjkB~@T^1wfS3O43sMMW-oyOUW+1+jgkvHNP z|Ap5xA3T8T;AjoCL9ql=gKurP2-cGZzYd+{o9X!Kc9;MFD{KfjDzH?0m!$*-umZlM z%jfx9Ck`U(%`R90XI}%q&hgK3u_S_lAD8d_I05_+1WGL`9&iH50N{lP(>Vux<_4BF z?r0qb1`CqN0>I#hGX)?Zo&`w1sDGaIMgwr)@(Ea$wfQUXzUaoe%ZHkaSt4wzuj;c# z;0^=9udEY!Z`=nW(sg7zfwQWtfUfBAF1EAAZ0{9%n|>8I`bO6pumH^+DP3tsy^1Gl zQ+^7CtgZZ-6rcR+Ri@)4AkF8>F?}v04J~opV3y6e`zQbiF?zo2t7<3C&P-3txXyaf zHV7Z~Jy&4ow8U4(_Zwfb9s>AGh_qox3ZaZx3mvvCSjaasq86R=-#s4eE|{s?jf@OyV79ow7}x##EP z6I={_HQRAW=ZX(~R${+3I(+YybkC$xnZ4}E*j4KnwPxq;wj%1luWyOBrA+eAhhJS4 zOWos03gHHdo|!hARI^ugcr~MzSyn@;mqJ{x0X{dSs|Y#(BsDP-Zpg3z zU1_;f0MIxmX#Xi$!1y}|0B*g1a;fwt`_V5aikf*czKAq73$QvJxpm{{`DP71og>o` zXE?J3Q*WNW*Q_>psH&7r=>4&G6MU6luBdX){^GZPvgj*te!~15;fH@NYk`i(YX<{~H97wi*W>MPY$uNV zID0jAH?~p#O7fF(bGH9jgKpG)5)+F3{yv~5P>I(eBK3o3k5HwkW<>Re{2rsZpg`bp z>?@auo+~`AFNd7$U&h?N|H4}6LhC6PinTH%LD@ybS|#|TaC4>;4RoG0F5>tS2pYxr z)$3_uqQ14UweBa$C5cM@dXN=IWYm?fQsQIGbN!? zJjWfA49@eky_q)Q6qiiAdWY+dr@@GUT&_i~Rxh7>hVg~PMDMn-X;67Y(b=@uHHo~5 zrf+uITBd7Gs1cq|8gqO&56(^IH&lM8O*xd8byX+*{b%#8g3SLwpP#E`+1~MfA8aOX z5mRtnDd?SK7y6WLN3L8B>E}ClH+T9Y`T4+lj?qZb+i5@3dOhdZ=V#|5H$skbKjV&U zHE_Oo+Vgbi>3qSO)AH%Y9}oAXrT@66FmP2k-R&*!TbQNwrL9Y0CttVor>LbsQcx+g zpYK@)SZb3HpSkW8TJjb`A&)=mSyq@$6>$7_s*qG5V%bn|t+*Q;0!}a^nmgv;9rvDY zyKt93i`IMp%pm8UOU?Jw@#3exUwyc0t<&!hVOx~-e0$f~uAH%C9DI03I9NW^*g`kp zvuly-Ygf#SUl$9{_p)Cr*M~9;yT!Y?yF=yJ!D6^ohG(V|eyDL| zH$FP=b_T&P?pj=H>TqgU$Klkwsq~_^5G@D-vI!X|y3=pJD7)z0Z{=ksY=u6GRzr7G zf5M`%--6NJ<0mFhBuMv4Z(8^aUs>8+;#_*SbcA|+%V|q;%X^C`(s_noq+dNyJU5lVh4X(aGHRHcYbWXPZqKxg(9?E-&@tU znS*XXld(hI|BZHP5*`=s+`WtzZgXhSq}|+Dp<7S-bxvXO(fME36KCb2!B89M4o=jx zBI814zk>IVk#Bata2=ud)wDDpZgZ`TvWXo^Ka|I=d^rAa!x8zTS|@dma&X&-`6t1e z1=fTaE{bF~*>^oB+d-I?dRGj z@R;AXSJU_dkDuqDzL@?t_)YW0Q~>L&*E_|G>38>116_(Kva0yO3M`V@1RvzahEn$r;HRIbd%0)JmBFg_?^srmiwFN!-(j z8Si%Cq?mU4v;-qyedMH9v~f>PCAip(=ajMhCmFb%pdGx{0B2zPpW?Xd{sKdS>*=X5 zTwUvU7}KY+Wh^gix*)KQ+gXEtdKwp{Z-kk?*; zBYX4mbY-4eDWw!7w{`dwZ`jtkoODWgU`g{xBiTX1FA1bL7Wo!^D*j!nS35IlW#UK* z+eCN|504qvv{M%i7IPPUis&{?C5AYUo1~x5R=BaktML?JM{mQiz-*+)=BuvCuJ$fA zWhZ5-U1xRC$XfQboGm0K+@S-qhb^qZ4_z4UZyF5=UFV4uIjKHIOI~WMl7U-!;%-0Q z^yyuGI+`HlEL`6-gBq>X4>2WVCWPjNvTxm{EqVmPyvQX@P30Wk;A`=s25P<(bOdY| zO??+qgs7Nly`@Lp1jyCr) z2O|O%(Z|;uplDa7T!LDa6Ra}dV=ij0GNzv)!`9dK^C z#7u30z-8kaM|#`(*ldEsN~7<_IlA+RWQ`G4vshCf<-0dwP+|vLd`R!0T4@vqZroi| z@1gaDZ+kS80tS8$Tz1Gp;Ar2Mgll{*jGn2Ltl#_{yhRlV;aoN*J0KI_CA;|Hy#@Ad z-i7eW{j!J6-oJj|Z@y1#vEilhaKvQpCm;01O!Vq^>XRh&B;pe=Vq(JFLb$aD-ANPq z<@v{n?I_3rVlkj_c6@Jg$B1aXJGjEdh$A)?BMR32X@vzPYONBjVvXGh&DD>)*zS?X zv|3vIcq>jU{o?M8eY5qRZI{;kpQd!J*|7axd3x0Pj%06^BD32(>tX=D3jjz-0EmbL z0LB5+&I3S@0st)B2LQFV03ZN+<4DkB+NwLZZr+0rFO80S+F3niUs1F;DP|sHXl!); z0!u-zS<0z}pHJFzORw3zO-8)ElNRmmB>Ht(th6({w6m#fr}XDz>qj$AkJv^C&>zmc zxz=pb_$SHsx@rcx;6S4@fwxY)Wxrl6d+tAMR9)ulGYsP6ThT_T2FUz0>&-}?_B2BZz6dnX@ zqn6t^W53v0Y_CrrZw@pkeVpb8$h2cqJ?F+<1oJ9SuXXw4@fTJ!IIlQhh zDc3yPg733a$N!T|yU^lI7Ri%@0ylso@L=RORi00w1VJ#e^Lswp7=1fLkuYS9!G3p% z;Re!N5PUiYkvN#83~Ar>;77$fu^BaE82T7D0BQ!p*&JqI`HZ@6$iBd5x~)v^<7W?Wp8bt2yfOizDwE#yXz&|+Z&VljH)oJVyJ`7@15w?U@DxtL7cI=EJwNB zv<=owbqQCD4i(oB&;b!t2=F%n8S&y#6PSti1;eJfEYxBklT6UWQYcqPVc{M$q(z$jI(THoBw)zzdaNR8N#^ukZm&e7UhP@l}FQ%LG8 z_rQ%E75@eX<-L7qv-dzVUWcwX=B1yNhrViYB2n=Y=(OXer{U0 z;p!G%CZjK#p`7~FITW>1qyw6O&e^w>mz2*Nsc_ER{(D4=A~ib^qOqv@PF#hX)Q4Zb zs$^7EZE0;Lmd4q9yN5cX&R9Vywy3w5qUddbd?I;Ew*5$N&&+_jdpzR*K|dRxnj4!- zbwMm+>!=t4#z{F2dqa;npnnN|ch})GBGgi?Lgo%&nSSVe06mAg}0#Y@*)y{PTT3Y&3@)l$n6 zN{dj!&Q=#Qh?&WUx-w`vQ^!m=5;Dg!%wigW(w1{fs3-#$d>c}w&yZ`acZ_#l!-7dn zLJg(!lnk*0w()w{-yi2544EIV(w6;;*v8iL{Bf^nzVgB$CMu6(Q$8+!&r!jT?-N1< z>`JPj?)bHNg6X>O&bRJ%(@UfgQnvsGn^uv+_YvkzLb@zwh;3c19M43D*@W52I@lUY zjPw3=!SyB2lC&uiv%FhYQQ7E!pJ4t8@_7>(q}j0V8=p|kV;*m3@orHHJ;i>Q*x8w} zL#ZPjI6BldR@Xp-m9uQ&XLR6uT?1~JBlVV+G$L-P&@0PlUp!}NA&;amEY%y@d+aX} zo|?`<)%BH)qYMUl}zA55Wdry%+cI+JihH4`r%MJrTYN`iM-Rd8)llmbtk*^`_1|8%`FASfH z;`3-8TsYKRVuIe01e!ogKMgF7j4-QHl?=wULJKb)xL5_bo~peUCLQIFl+;J}6{U3e6Sn%U%8O9QxfW=?V=h4I?bIBUDq82X4sY+Pf)gWa>NwTHIMPTayol zd2KNJDcJO8(xzTc&m(555;vBG9IDc2dM#E7rcWL0{ub9Vei?v;2<0V%g`yLC?<-ww zT?i~|5RV7fV!+SK&bVyI{jW`Qpis6|DLgSPc|>irJ+n@BEyxdeR@pLZErnNR^Y~_4 z?5I!8fXw$1=GSnhmp*5CW$rP)b}xoHG1tYT6gZ8tx)u9Rjn*9U&zR+wD_ipn z4?8+C8C;J(lEbIhkh+m-MDb%6%Sy;T(R&vAxC}xbQ+tBxGbsp=EX*pZF;Nzd|9&$I zxrqOn!>40dV^J?WwLT^2^;_U?lJtoB;WbrE^0T1!hLK7(THL*E2kS!*axq2LCvMj? zXu2R!w3`j1KC9m5h_b6=19iQ3BAs_3ehszo)yW~IK*D^LnPk@W)A@vjg^fC78hmcy z7F|9r$2W#blr-5phQa(`XhIDEGD@}0N!F7djW0X1Y#N&y#S)PpISa6zxwA-uFe?h& z4L(5^h(*y?zFPD}?GUsSQ<;6FXIhQb*2g@f!jTev$W_g?fQdeVuAP(5?m z!S;H)%iDUD1{rm!3W0hibaL5y(e^`f|WgS{kC3``Ob+BRqek28l%)(M=pRAB2djMYZs>xD#V8D6AL7d4D3Bumx}~z zwNm-WRne)S`8+>xEkb5mJK*_N)ad((Ea3MT;X{hfe}V5dKyk6DsW z2z&qA3THU~o-0TtuK{oTClQ-n;!Jzp&o}V`zvd?{{{(tzE*R4dJC^@@)cUvb4}t%W f5y%V+KMmYH{0n|J;ZpdYbKbdaa;sS9{?q>l-anHL literal 8545 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 literal 8303 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 diff --git a/module/handler/assets.py b/module/handler/assets.py index e2dc0cb29..45f9cde9d 100644 --- a/module/handler/assets.py +++ b/module/handler/assets.py @@ -64,8 +64,8 @@ MAP_STAR_2 = Button(area={'cn': (532, 377, 540, 384), 'en': (518, 382, 526, 389) MAP_STAR_3 = Button(area={'cn': (818, 377, 827, 384), 'en': (804, 382, 812, 389), 'jp': (818, 377, 827, 384), 'tw': (818, 377, 827, 384)}, color={'cn': (251, 233, 143), 'en': (252, 234, 144), 'jp': (251, 233, 143), 'tw': (251, 233, 143)}, button={'cn': (818, 377, 827, 384), 'en': (804, 382, 812, 389), 'jp': (818, 377, 827, 384), 'tw': (818, 377, 827, 384)}, file={'cn': './assets/cn/handler/MAP_STAR_3.png', 'en': './assets/en/handler/MAP_STAR_3.png', 'jp': './assets/jp/handler/MAP_STAR_3.png', 'tw': './assets/tw/handler/MAP_STAR_3.png'}) MAP_WALK_OUT_OF_STEP = Button(area={'cn': (654, 312, 704, 335), 'en': (454, 314, 698, 338), 'jp': (736, 312, 783, 336), 'tw': (653, 309, 705, 334)}, color={'cn': (109, 113, 120), 'en': (108, 109, 116), 'jp': (137, 135, 143), 'tw': (118, 124, 132)}, button={'cn': (654, 312, 704, 335), 'en': (454, 314, 698, 338), 'jp': (736, 312, 783, 336), 'tw': (653, 309, 705, 334)}, file={'cn': './assets/cn/handler/MAP_WALK_OUT_OF_STEP.png', 'en': './assets/en/handler/MAP_WALK_OUT_OF_STEP.png', 'jp': './assets/jp/handler/MAP_WALK_OUT_OF_STEP.png', 'tw': './assets/tw/handler/MAP_WALK_OUT_OF_STEP.png'}) MAP_WALK_SPEEDUP = Button(area={'cn': (1025, 406, 1055, 436), 'en': (1025, 406, 1055, 436), 'jp': (1025, 406, 1055, 436), 'tw': (1025, 406, 1055, 436)}, color={'cn': (62, 97, 72), 'en': (62, 97, 72), 'jp': (62, 97, 72), 'tw': (62, 97, 72)}, button={'cn': (1025, 406, 1055, 436), 'en': (1025, 406, 1055, 436), 'jp': (1025, 406, 1055, 436), 'tw': (1025, 406, 1055, 436)}, file={'cn': './assets/cn/handler/MAP_WALK_SPEEDUP.png', 'en': './assets/en/handler/MAP_WALK_SPEEDUP.png', 'jp': './assets/jp/handler/MAP_WALK_SPEEDUP.png', 'tw': './assets/tw/handler/MAP_WALK_SPEEDUP.png'}) -MISSION_POPUP_ACK = Button(area={'cn': (413, 489, 566, 532), 'en': (413, 489, 566, 532), 'jp': (410, 482, 574, 539), 'tw': (413, 489, 566, 532)}, color={'cn': (169, 170, 172), 'en': (169, 170, 172), 'jp': (162, 164, 167), 'tw': (169, 170, 172)}, button={'cn': (413, 489, 566, 532), 'en': (413, 489, 566, 532), 'jp': (410, 482, 574, 539), 'tw': (413, 489, 566, 532)}, file={'cn': './assets/cn/handler/MISSION_POPUP_ACK.png', 'en': './assets/en/handler/MISSION_POPUP_ACK.png', 'jp': './assets/jp/handler/MISSION_POPUP_ACK.png', 'tw': './assets/tw/handler/MISSION_POPUP_ACK.png'}) -MISSION_POPUP_GO = Button(area={'cn': (716, 488, 869, 533), 'en': (716, 488, 869, 533), 'jp': (711, 482, 874, 539), 'tw': (716, 488, 869, 533)}, color={'cn': (89, 138, 201), 'en': (89, 138, 201), 'jp': (93, 142, 204), 'tw': (89, 138, 201)}, button={'cn': (716, 488, 869, 533), 'en': (716, 488, 869, 533), 'jp': (711, 482, 874, 539), 'tw': (716, 488, 869, 533)}, file={'cn': './assets/cn/handler/MISSION_POPUP_GO.png', 'en': './assets/en/handler/MISSION_POPUP_GO.png', 'jp': './assets/jp/handler/MISSION_POPUP_GO.png', 'tw': './assets/tw/handler/MISSION_POPUP_GO.png'}) +MISSION_POPUP_ACK = Button(area={'cn': (432, 493, 543, 533), 'en': (413, 489, 566, 532), 'jp': (410, 482, 574, 539), 'tw': (413, 489, 566, 532)}, color={'cn': (181, 182, 184), 'en': (169, 170, 172), 'jp': (162, 164, 167), 'tw': (169, 170, 172)}, button={'cn': (432, 493, 543, 533), 'en': (413, 489, 566, 532), 'jp': (410, 482, 574, 539), 'tw': (413, 489, 566, 532)}, file={'cn': './assets/cn/handler/MISSION_POPUP_ACK.png', 'en': './assets/en/handler/MISSION_POPUP_ACK.png', 'jp': './assets/jp/handler/MISSION_POPUP_ACK.png', 'tw': './assets/tw/handler/MISSION_POPUP_ACK.png'}) +MISSION_POPUP_GO = Button(area={'cn': (719, 493, 861, 534), 'en': (716, 488, 869, 533), 'jp': (711, 482, 874, 539), 'tw': (716, 488, 869, 533)}, color={'cn': (125, 164, 214), 'en': (89, 138, 201), 'jp': (93, 142, 204), 'tw': (89, 138, 201)}, button={'cn': (719, 493, 861, 534), 'en': (716, 488, 869, 533), 'jp': (711, 482, 874, 539), 'tw': (716, 488, 869, 533)}, file={'cn': './assets/cn/handler/MISSION_POPUP_GO.png', 'en': './assets/en/handler/MISSION_POPUP_GO.png', 'jp': './assets/jp/handler/MISSION_POPUP_GO.png', 'tw': './assets/tw/handler/MISSION_POPUP_GO.png'}) MONTHLY_PASS_NOTICE = Button(area={'cn': (554, 505, 726, 561), 'en': (716, 488, 869, 533), 'jp': (554, 505, 726, 561), 'tw': (554, 505, 726, 561)}, color={'cn': (109, 153, 208), 'en': (89, 138, 201), 'jp': (109, 153, 208), 'tw': (109, 153, 208)}, button={'cn': (872, 152, 939, 196), 'en': (863, 173, 929, 217), 'jp': (872, 152, 939, 196), 'tw': (872, 152, 939, 196)}, file={'cn': './assets/cn/handler/MONTHLY_PASS_NOTICE.png', 'en': './assets/en/handler/MONTHLY_PASS_NOTICE.png', 'jp': './assets/cn/handler/MONTHLY_PASS_NOTICE.png', 'tw': './assets/cn/handler/MONTHLY_PASS_NOTICE.png'}) MYSTERY_ITEM = Button(area={'cn': (589, 294, 691, 427), 'en': (589, 294, 691, 427), 'jp': (589, 294, 691, 427), 'tw': (589, 294, 691, 427)}, color={'cn': (144, 127, 83), 'en': (144, 127, 83), 'jp': (144, 127, 83), 'tw': (144, 127, 83)}, button={'cn': (588, 478, 698, 496), 'en': (588, 478, 698, 496), 'jp': (588, 478, 698, 496), 'tw': (588, 478, 698, 496)}, file={'cn': './assets/cn/handler/MYSTERY_ITEM.png', 'en': './assets/en/handler/MYSTERY_ITEM.png', 'jp': './assets/jp/handler/MYSTERY_ITEM.png', 'tw': './assets/tw/handler/MYSTERY_ITEM.png'}) POPUP_CANCEL = Button(area={'cn': (453, 506, 525, 536), 'en': (407, 485, 574, 535), 'jp': (455, 515, 521, 546), 'tw': (454, 495, 525, 526)}, color={'cn': (196, 198, 199), 'en': (168, 169, 171), 'jp': (181, 183, 184), 'tw': (195, 196, 197)}, button={'cn': (453, 506, 525, 536), 'en': (407, 485, 574, 535), 'jp': (455, 515, 521, 546), 'tw': (454, 495, 525, 526)}, file={'cn': './assets/cn/handler/POPUP_CANCEL.png', 'en': './assets/en/handler/POPUP_CANCEL.gif', 'jp': './assets/jp/handler/POPUP_CANCEL.png', 'tw': './assets/tw/handler/POPUP_CANCEL.png'}) From 7a01eadcd22ff2cc0908b39352c353a160fc3620 Mon Sep 17 00:00:00 2001 From: RilyLC <94281898+RilyLC@users.noreply.github.com> Date: Thu, 21 Mar 2024 19:33:21 +0800 Subject: [PATCH 15/96] Upd:[TW]Event:Reflections of the Oasis (#3574) Co-authored-by: LmeSzinc --- assets/tw/raid/GORIZIA_OCR_REMAIN_EX.png | Bin 0 -> 4021 bytes assets/tw/raid/GORIZIA_RAID_EASY.png | Bin 0 -> 8341 bytes assets/tw/raid/GORIZIA_RAID_HARD.png | Bin 0 -> 8329 bytes assets/tw/raid/GORIZIA_RAID_NORMAL.png | Bin 0 -> 8206 bytes assets/tw/ui/RAID_CHECK.png | Bin 12183 -> 12220 bytes campaign/Readme.md | 1 + module/config/argument/args.json | 40 +++++++++++------------ module/config/i18n/zh-TW.json | 2 +- module/raid/assets.py | 8 ++--- module/ui/assets.py | 2 +- 10 files changed, 27 insertions(+), 26 deletions(-) create mode 100644 assets/tw/raid/GORIZIA_OCR_REMAIN_EX.png create mode 100644 assets/tw/raid/GORIZIA_RAID_EASY.png create mode 100644 assets/tw/raid/GORIZIA_RAID_HARD.png create mode 100644 assets/tw/raid/GORIZIA_RAID_NORMAL.png diff --git a/assets/tw/raid/GORIZIA_OCR_REMAIN_EX.png b/assets/tw/raid/GORIZIA_OCR_REMAIN_EX.png new file mode 100644 index 0000000000000000000000000000000000000000..5d68c39d8bdb3c2815c73927284d4f406e33e651 GIT binary patch literal 4021 zcmeH{`#aQG9LK-dSVb0zajR!#T{e_ql{8YrFohD$BA233Du%gGGlQCyBxGIYDN-R~ zs#zoE(PU7lOhcnw$Cz;)*Fi3`?)%mL2m9kb^LfsBKIb{l^Eu~zUgv#I@<|Vb>Q>#Y z005}Exx&2wU<){u|NNson2zj1%7IB4FmVS=AsJJEM8(y(hEh_U%zZI_vgtmziWDwAZA7z-tIv zUp1*6`w~t9dDLk?n{2Mq$3<>`)WJGxSSko6YOC{bWK?8Y9xoeBtn(rddrni?AT!an z@xG|;{I075vlyT}xecze(QqI;*Hqm%rko3zIRxqum%+jrlL4Rfl|C-d+_5}`%*7X6 zsUT$VB{hczKX$nQ3IK3@xEyQ0cnrsgThXIb)IMRRrD4~;4aC$wbk8sH7jwDc>ueUY zM!gPP&#^jM#|3{r$(l{Jo2W{n2WCxBwKEZcam~zWXaT35HK3FVHA(<)GVaRqNT6b8 zl(O3OSR52nOa94AV2`4)N~$Nn2`RDLwH>zw13&`Qw7+Ws1IfW0j*G-p1f80T5pXA* zceO#v&*I6)!-87!689ab~<?OWA49^!x ziYb!SyYisXMB*>Z2{eJ$%PF*PKY{P{9Hc$As=Wj@KI8DrFbZ-%o-9zM!pzU@9IX&( zTm&oPoydRO+KZ^lIwz5&&TjX3fM2Fqz;K+#DgxiPdiDBmxs`>`vLHDX0GNU5r8SS7 z)9OrK!%9UGi4d(lWV>_MYdhhKk?EW@B3~ReONtq4l6MVjF#ZfWf!bzCoC}yLxny8F zgXR_TLV32xhHwKrIx13#hG&J9FT)}o@!BZVT4>u-h=ILHYa*Zs0Dq5VQB1j%C!+p8 zUEej{Lpti79VGA?&pVX*7&I(Ya3uk^QXXyD2X1is14Sb(YPkuMSY*#@h3x+|YArW~ z#$j}e7eiWv7A7UJY*whB;`fVcJ*l>}820#*;z|~UVX=QU7V3o4zi&fxh@{8+1hQXu zMO6E?IKGyP`7q&IadGoz^;57T;LeVyT5mD419@ZLK5MQse1mba}|!h)F+7ZfBEhS?jOo z5dkj?{Sh6bCiT`^UTu;(PQaeY6zq+41(qVLa~dq^X$;aD88gXqW9-!qHhMDuE{)!fmg)<*EX zdb$^}mYqwB=%v>9=Zls^%P0RHZEXIkVYMF;{xw-E0bAxRrMmYBQu82lQck;hSiF_C zRY8`9ZS+H?P&`$@SrB;pKlPZ0e)lF@=Ox0v7-kxgwlI}!K|EG}VV_pV)O!hmm(4hY zcj;I&qchNE#x(WdO|xM-SS^u)atf9Z6H6jnmk4O%Z}PYAlz%$e}e z)1TzYuoE}IZzqq&T8UFiS%#5z&?RcDoTz0(?bM}D0JQ{rSA23zG2><{9 literal 0 HcmV?d00001 diff --git a/assets/tw/raid/GORIZIA_RAID_EASY.png b/assets/tw/raid/GORIZIA_RAID_EASY.png new file mode 100644 index 0000000000000000000000000000000000000000..3ccd79a162b8dc614146b595aa73db3d487a443f GIT binary patch literal 8341 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 a%ok_+zw|wFW@r&L4u2VYfDv`}%6|aayP|sl literal 0 HcmV?d00001 diff --git a/assets/tw/raid/GORIZIA_RAID_HARD.png b/assets/tw/raid/GORIZIA_RAID_HARD.png new file mode 100644 index 0000000000000000000000000000000000000000..a76c178e2d4e17cf1b7411d8df97bcb4cadda74a GIT binary patch literal 8329 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 literal 0 HcmV?d00001 diff --git a/assets/tw/ui/RAID_CHECK.png b/assets/tw/ui/RAID_CHECK.png index 87d471c94b9071d023420754092bafd17e10e973..bb74b18f70f1ca2b336906d4c9eab0493d466b95 100644 GIT binary patch literal 12220 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 d{uk7SakGCOJ6N`dvH?-c;Ja_Hh{{lhHnGgT~ literal 12183 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 Date: Thu, 21 Mar 2024 19:03:41 +0800 Subject: [PATCH 16/96] Fix: [ALAS] Enhance auto device detection, ignore 127.0.0.1:7555 from MuMu 12 --- module/device/connection.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/module/device/connection.py b/module/device/connection.py index cd5f75de0..3db639ad9 100644 --- a/module/device/connection.py +++ b/module/device/connection.py @@ -84,6 +84,11 @@ class AdbDeviceWithStatus(AdbDevice): def __bool__(self): return True + @cached_property + def may_mumu12_family(self): + # 127.0.0.1:16XXX + return len(self.serial) == 15 and self.serial.startswith('127.0.0.1:16') + class Connection(ConnectionAttr): def __init__(self, config): @@ -773,7 +778,16 @@ class Connection(ConnectionAttr): raise RequestHumanTakeover elif available.count == 1: logger.info(f'Auto device detection found only one device, using it') - self.serial = devices[0].serial + self.serial = available[0].serial + del_cached_property(self, 'adb') + elif available.count == 2 \ + and available.select(serial='127.0.0.1:7555') \ + and available.select(may_mumu12_family=True): + logger.info(f'Auto device detection found MuMu12 device, using it') + # For MuMu12 serials like 127.0.0.1:7555 and 127.0.0.1:16384 + # ignore 7555 use 16384 + remain = available.select(may_mumu12_family=True).first_or_none() + self.serial = remain.serial del_cached_property(self, 'adb') else: logger.critical('Multiple devices found, auto device detection cannot decide which to choose, ' From 06cd62f3ee84161a88070fa120583c6cb898cbf4 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 21 Mar 2024 21:28:37 +0800 Subject: [PATCH 17/96] Opt: [ALAS] Reuse image array to improve memory performance --- module/device/method/adb.py | 2 +- module/device/method/ascreencap.py | 4 ++-- module/device/method/droidcast.py | 27 +++++++++++++++++++-------- module/device/method/uiautomator_2.py | 2 +- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/module/device/method/adb.py b/module/device/method/adb.py index 282447ce2..bd3397edf 100644 --- a/module/device/method/adb.py +++ b/module/device/method/adb.py @@ -128,7 +128,7 @@ class Adb(Connection): if image is None: raise ImageTruncated('Empty image after cv2.imdecode') - image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + cv2.cvtColor(image, cv2.COLOR_BGR2RGB, dst=image) if image is None: raise ImageTruncated('Empty image after cv2.cvtColor') diff --git a/module/device/method/ascreencap.py b/module/device/method/ascreencap.py index 10ac1110c..c93321cfe 100644 --- a/module/device/method/ascreencap.py +++ b/module/device/method/ascreencap.py @@ -165,11 +165,11 @@ class AScreenCap(Connection): # ValueError: cannot reshape array of size 0 into shape (720,1280,4) raise ImageTruncated(str(e)) - image = cv2.flip(image, 0) + cv2.flip(image, 0, dst=image) if image is None: raise ImageTruncated('Empty image after cv2.flip') - image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + cv2.cvtColor(image, cv2.COLOR_BGR2RGB, dst=image) if image is None: raise ImageTruncated('Empty image after cv2.cvtColor') diff --git a/module/device/method/droidcast.py b/module/device/method/droidcast.py index dc4b5360c..1a5e71f62 100644 --- a/module/device/method/droidcast.py +++ b/module/device/method/droidcast.py @@ -169,7 +169,7 @@ class DroidCast(Uiautomator2): if image is None: raise ImageTruncated('Empty image after cv2.imdecode') - image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + cv2.cvtColor(image, cv2.COLOR_BGR2RGB, dst=image) if image is None: raise ImageTruncated('Empty image after cv2.cvtColor') @@ -211,14 +211,25 @@ class DroidCast(Uiautomator2): # image = cv2.merge([r, g, b]) # The same as the code above but costs about 5ms instead of 10ms. - r = cv2.multiply(arr & 0b1111100000000000, 0.00390625).astype(np.uint8) - g = cv2.multiply(arr & 0b0000011111100000, 0.125).astype(np.uint8) - b = cv2.multiply(arr & 0b0000000000011111, 8).astype(np.uint8) - r = cv2.add(r, cv2.multiply(r, 0.03125)) - g = cv2.add(g, cv2.multiply(g, 0.015625)) - b = cv2.add(b, cv2.multiply(b, 0.03125)) - image = cv2.merge([r, g, b]) + r = cv2.bitwise_and(arr, 0b1111100000000000) + cv2.multiply(r, 0.00390625, dst=r) + r = np.uint8(r) + m = cv2.multiply(r, 0.03125) + cv2.add(r, m, dst=r) + g = cv2.bitwise_and(arr, 0b0000011111100000) + cv2.multiply(g, 0.125, dst=g) + g = np.uint8(g) + m = cv2.multiply(g, 0.015625) + cv2.add(g, m, dst=g) + + b = cv2.bitwise_and(arr, 0b0000000000011111) + cv2.multiply(b, 8, dst=b) + b = np.uint8(b) + m = cv2.multiply(b, 0.03125) + cv2.add(b, m, dst=b) + + image = cv2.merge([r, g, b]) return image def droidcast_wait_startup(self): diff --git a/module/device/method/uiautomator_2.py b/module/device/method/uiautomator_2.py index dea534a31..69520f0a2 100644 --- a/module/device/method/uiautomator_2.py +++ b/module/device/method/uiautomator_2.py @@ -122,7 +122,7 @@ class Uiautomator2(Connection): if image is None: raise ImageTruncated('Empty image after cv2.imdecode') - image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + cv2.cvtColor(image, cv2.COLOR_BGR2RGB, dst=image) if image is None: raise ImageTruncated('Empty image after cv2.cvtColor') From 6987d60c96e389c9537db312cd0706f6ac195518 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 28 Mar 2024 12:44:42 +0800 Subject: [PATCH 18/96] Add: Alas.EmulatorInfo settings --- config/template.json | 9 +++--- module/config/argument/args.json | 39 +++++++++++++++--------- module/config/argument/argument.yaml | 34 ++++++++++++++------- module/config/argument/task.yaml | 2 +- module/config/config_generated.py | 9 +++--- module/config/i18n/en-US.json | 44 +++++++++++++++++----------- module/config/i18n/ja-JP.json | 42 ++++++++++++++++---------- module/config/i18n/zh-CN.json | 44 +++++++++++++++++----------- module/config/i18n/zh-TW.json | 44 +++++++++++++++++----------- 9 files changed, 165 insertions(+), 102 deletions(-) diff --git a/config/template.json b/config/template.json index 383485cda..972c9f435 100644 --- a/config/template.json +++ b/config/template.json @@ -9,11 +9,10 @@ "ScreenshotDedithering": false, "AdbRestart": false }, - "RestartEmulator": { - "Enable": false, - "EmulatorData": "emulator:\nname:\npath:", - "ErrorRestart": false, - "DailyRestart": false + "EmulatorInfo": { + "Emulator": "auto", + "name": null, + "path": null }, "Error": { "HandleError": true, diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 8c3a8cc7f..fd94c205d 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -139,23 +139,34 @@ "value": false } }, - "RestartEmulator": { - "Enable": { - "type": "checkbox", - "value": false + "EmulatorInfo": { + "Emulator": { + "type": "select", + "value": "auto", + "option": [ + "auto", + "NoxPlayer", + "NoxPlayer64", + "BlueStacks4", + "BlueStacks5", + "BlueStacks4HyperV", + "BlueStacks5HyperV", + "LDPlayer3", + "LDPlayer4", + "LDPlayer9", + "MuMuPlayer", + "MuMuPlayerX", + "MuMuPlayer12", + "MEmuPlayer" + ] }, - "EmulatorData": { + "name": { "type": "textarea", - "value": "emulator:\nname:\npath:", - "mode": "yaml" + "value": null }, - "ErrorRestart": { - "type": "checkbox", - "value": false - }, - "DailyRestart": { - "type": "checkbox", - "value": false + "path": { + "type": "textarea", + "value": null } }, "Error": { diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 3ea59e0b0..00a88c350 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -38,17 +38,31 @@ Emulator: option: [ ADB, uiautomator2, minitouch, Hermit, MaaTouch ] ScreenshotDedithering: false AdbRestart: false -RestartEmulator: - Enable: false - EmulatorData: +EmulatorInfo: + Emulator: + value: auto + option: [ + auto, + NoxPlayer, + NoxPlayer64, + BlueStacks4, + BlueStacks5, + BlueStacks4HyperV, + BlueStacks5HyperV, + LDPlayer3, + LDPlayer4, + LDPlayer9, + MuMuPlayer, + MuMuPlayerX, + MuMuPlayer12, + MEmuPlayer, + ] + name: + value: null + type: textarea + path: + value: null type: textarea - mode: yaml - value: |- - emulator: - name: - path: - ErrorRestart: False - DailyRestart: False Error: HandleError: true SaveError: true diff --git a/module/config/argument/task.yaml b/module/config/argument/task.yaml index a6cabef1b..74e40c088 100644 --- a/module/config/argument/task.yaml +++ b/module/config/argument/task.yaml @@ -10,7 +10,7 @@ Alas: tasks: Alas: - Emulator - - RestartEmulator + - EmulatorInfo - Error - Optimization - DropRecord diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 8f206a577..bbf0a138c 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -26,11 +26,10 @@ class GeneratedConfig: Emulator_ScreenshotDedithering = False Emulator_AdbRestart = False - # Group `RestartEmulator` - RestartEmulator_Enable = False - RestartEmulator_EmulatorData = 'emulator:\nname:\npath:' - RestartEmulator_ErrorRestart = False - RestartEmulator_DailyRestart = False + # Group `EmulatorInfo` + EmulatorInfo_Emulator = 'auto' # auto, NoxPlayer, NoxPlayer64, BlueStacks4, BlueStacks5, BlueStacks4HyperV, BlueStacks5HyperV, LDPlayer3, LDPlayer4, LDPlayer9, MuMuPlayer, MuMuPlayerX, MuMuPlayer12, MEmuPlayer + EmulatorInfo_name = None + EmulatorInfo_path = None # Group `Error` Error_HandleError = True diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 9f613688a..41452c7b9 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -429,26 +429,36 @@ "help": "" } }, - "RestartEmulator": { + "EmulatorInfo": { "_info": { - "name": "Restart Emulator", + "name": "Emulator Settings", + "help": "The following values are auto-filled according to \"Serial\", if you don’t understand, please don't modify them" + }, + "Emulator": { + "name": "Emulator Type", + "help": "", + "auto": "Auto-detect", + "NoxPlayer": "Nox Player", + "NoxPlayer64": "Nox Player 64bit", + "BlueStacks4": "BlueStacks 4", + "BlueStacks5": "BlueStacks 5", + "BlueStacks4HyperV": "BlueStacks 4 Hyper-V", + "BlueStacks5HyperV": "BlueStacks 5 Hyper-V", + "LDPlayer3": "LD Player 3", + "LDPlayer4": "LD Player 4", + "LDPlayer9": "LD Player 9", + "MuMuPlayer": "MuMu Player", + "MuMuPlayerX": "MuMu Player X", + "MuMuPlayer12": "MuMu Player 12", + "MEmuPlayer": "MEmu Player" + }, + "name": { + "name": "Emulator Instance Name", "help": "" }, - "Enable": { - "name": "RestartEmulator.Enable.name", - "help": "RestartEmulator.Enable.help" - }, - "EmulatorData": { - "name": "RestartEmulator.EmulatorData.name", - "help": "RestartEmulator.EmulatorData.help" - }, - "ErrorRestart": { - "name": "Restart Emulator on Error", - "help": "Automatically restart the emulator when it cannot be connected" - }, - "DailyRestart": { - "name": "Restart Emulator when Server Refreshes", - "help": "Restart emulator every day to solve the memory leak problem" + "path": { + "name": "Emulator Installation Path", + "help": "" } }, "Error": { diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index b072c2660..51f6142a7 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -429,26 +429,36 @@ "help": "Emulator.AdbRestart.help" } }, - "RestartEmulator": { + "EmulatorInfo": { "_info": { - "name": "RestartEmulator._info.name", - "help": "RestartEmulator._info.help" + "name": "EmulatorInfo._info.name", + "help": "EmulatorInfo._info.help" }, - "Enable": { - "name": "RestartEmulator.Enable.name", - "help": "RestartEmulator.Enable.help" + "Emulator": { + "name": "EmulatorInfo.Emulator.name", + "help": "EmulatorInfo.Emulator.help", + "auto": "auto", + "NoxPlayer": "NoxPlayer", + "NoxPlayer64": "NoxPlayer64", + "BlueStacks4": "BlueStacks4", + "BlueStacks5": "BlueStacks5", + "BlueStacks4HyperV": "BlueStacks4HyperV", + "BlueStacks5HyperV": "BlueStacks5HyperV", + "LDPlayer3": "LDPlayer3", + "LDPlayer4": "LDPlayer4", + "LDPlayer9": "LDPlayer9", + "MuMuPlayer": "MuMuPlayer", + "MuMuPlayerX": "MuMuPlayerX", + "MuMuPlayer12": "MuMuPlayer12", + "MEmuPlayer": "MEmuPlayer" }, - "EmulatorData": { - "name": "RestartEmulator.EmulatorData.name", - "help": "RestartEmulator.EmulatorData.help" + "name": { + "name": "EmulatorInfo.name.name", + "help": "EmulatorInfo.name.help" }, - "ErrorRestart": { - "name": "RestartEmulator.ErrorRestart.name", - "help": "RestartEmulator.ErrorRestart.help" - }, - "DailyRestart": { - "name": "RestartEmulator.DailyRestart.name", - "help": "RestartEmulator.DailyRestart.help" + "path": { + "name": "EmulatorInfo.path.name", + "help": "EmulatorInfo.path.help" } }, "Error": { diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 015759e41..d85d0713d 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -429,26 +429,36 @@ "help": "" } }, - "RestartEmulator": { + "EmulatorInfo": { "_info": { - "name": "重启模拟器", + "name": "模拟器设置", + "help": "下列数值是根据Serial自动填充的,如果不懂请不要随意修改" + }, + "Emulator": { + "name": "模拟器类型", + "help": "", + "auto": "自动检测", + "NoxPlayer": "夜神模拟器", + "NoxPlayer64": "夜神模拟器64位", + "BlueStacks4": "蓝叠模拟器4", + "BlueStacks5": "蓝叠模拟器5", + "BlueStacks4HyperV": "蓝叠模拟器4 Hyper-V", + "BlueStacks5HyperV": "蓝叠模拟器5 Hyper-V", + "LDPlayer3": "雷电模拟器3", + "LDPlayer4": "雷电模拟器4", + "LDPlayer9": "雷电模拟器9", + "MuMuPlayer": "MuMu模拟器", + "MuMuPlayerX": "MuMu模拟器X", + "MuMuPlayer12": "MuMu模拟器12", + "MEmuPlayer": "逍遥模拟器" + }, + "name": { + "name": "模拟器实例名称", "help": "" }, - "Enable": { - "name": "RestartEmulator.Enable.name", - "help": "RestartEmulator.Enable.help" - }, - "EmulatorData": { - "name": "RestartEmulator.EmulatorData.name", - "help": "RestartEmulator.EmulatorData.help" - }, - "ErrorRestart": { - "name": "出错时重启模拟器", - "help": "在无法连接到模拟器时自动重启模拟器" - }, - "DailyRestart": { - "name": "服务器刷新时重启模拟器", - "help": "每天主动重启模拟器以解决内存泄漏问题" + "path": { + "name": "模拟器安装路径", + "help": "" } }, "Error": { diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 72dab8a80..ed8b745f6 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -429,26 +429,36 @@ "help": "" } }, - "RestartEmulator": { + "EmulatorInfo": { "_info": { - "name": "重啟模擬器", + "name": "模擬器設定", + "help": "下列數值是根據Serial自動填充的,如果不懂請不要隨意修改" + }, + "Emulator": { + "name": "模擬器類型", + "help": "", + "auto": "自動檢測", + "NoxPlayer": "夜神模擬器", + "NoxPlayer64": "夜神模擬器64位", + "BlueStacks4": "藍疊模擬器4", + "BlueStacks5": "藍疊模擬器5", + "BlueStacks4HyperV": "藍疊模擬器4 Hyper-V", + "BlueStacks5HyperV": "藍疊模擬器5 Hyper-V", + "LDPlayer3": "雷電模擬器3", + "LDPlayer4": "雷電模擬器4", + "LDPlayer9": "雷電模擬器9", + "MuMuPlayer": "MuMu模擬器", + "MuMuPlayerX": "MuMu模擬器X", + "MuMuPlayer12": "MuMu模擬器12", + "MEmuPlayer": "逍遙模擬器" + }, + "name": { + "name": "模擬器實例名稱", "help": "" }, - "Enable": { - "name": "RestartEmulator.Enable.name", - "help": "RestartEmulator.Enable.help" - }, - "EmulatorData": { - "name": "RestartEmulator.EmulatorData.name", - "help": "RestartEmulator.EmulatorData.help" - }, - "ErrorRestart": { - "name": "啟用重啟模擬器", - "help": "在模擬器被關閉的時候自動啟動模擬器" - }, - "DailyRestart": { - "name": "伺服器重繪時重啟模擬器", - "help": "每天主動重啟模擬器以解决記憶體洩漏問題" + "path": { + "name": "模擬器安裝路徑", + "help": "" } }, "Error": { From a144908e143ecfde42741e99869929845f149409 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 28 Mar 2024 12:45:36 +0800 Subject: [PATCH 19/96] Add: [ALAS] Auto emulator start --- deploy/Windows/utils.py | 166 +++++++++ module/device/device.py | 35 +- module/device/emulator.py | 325 ------------------ module/device/platform/emulator_base.py | 104 +++++- ...indows_emulator.py => emulator_windows.py} | 150 +++++--- module/device/platform/platform_base.py | 68 ++-- .../{windows.py => platform_windows.py} | 146 ++++---- module/device/platform/utils.py | 54 +++ 8 files changed, 557 insertions(+), 491 deletions(-) create mode 100644 deploy/Windows/utils.py delete mode 100644 module/device/emulator.py rename module/device/platform/{windows_emulator.py => emulator_windows.py} (77%) rename module/device/platform/{windows.py => platform_windows.py} (63%) create mode 100644 module/device/platform/utils.py diff --git a/deploy/Windows/utils.py b/deploy/Windows/utils.py new file mode 100644 index 000000000..6b27a3ace --- /dev/null +++ b/deploy/Windows/utils.py @@ -0,0 +1,166 @@ +import os +import re +from dataclasses import dataclass +from typing import Callable, Generic, Iterable, TypeVar + +T = TypeVar("T") + +DEPLOY_CONFIG = './config/deploy.yaml' +DEPLOY_TEMPLATE = './deploy/Windows/template.yaml' + + +class cached_property(Generic[T]): + """ + cached-property from https://github.com/pydanny/cached-property + Add typing support + + A property that is only computed once per instance and then replaces itself + with an ordinary attribute. Deleting the attribute resets the property. + Source: https://github.com/bottlepy/bottle/commit/fa7733e075da0d790d809aa3d2f53071897e6f76 + """ + + def __init__(self, func: Callable[..., T]): + self.func = func + + def __get__(self, obj, cls) -> T: + if obj is None: + return self + + value = obj.__dict__[self.func.__name__] = self.func(obj) + return value + + +def iter_folder(folder, is_dir=False, ext=None): + """ + Args: + folder (str): + is_dir (bool): True to iter directories only + ext (str): File extension, such as `.yaml` + + Yields: + str: Absolute path of files + """ + for file in os.listdir(folder): + sub = os.path.join(folder, file) + if is_dir: + if os.path.isdir(sub): + yield sub.replace('\\\\', '/').replace('\\', '/') + elif ext is not None: + if not os.path.isdir(sub): + _, extension = os.path.splitext(file) + if extension == ext: + yield os.path.join(folder, file).replace('\\\\', '/').replace('\\', '/') + else: + yield os.path.join(folder, file).replace('\\\\', '/').replace('\\', '/') + + +def poor_yaml_read(file): + """ + Poor implementation to load yaml without pyyaml dependency, but with re + + Args: + file (str): + + Returns: + dict: + """ + if not os.path.exists(file): + return {} + + data = {} + regex = re.compile(r'^(.*?):(.*?)$') + with open(file, 'r', encoding='utf-8') as f: + for line in f.readlines(): + line = line.strip('\n\r\t ').replace('\\', '/') + if line.startswith('#'): + continue + result = re.match(regex, line) + if result: + k, v = result.group(1), result.group(2).strip('\n\r\t\' ') + if v: + if v.lower() == 'null': + v = None + elif v.lower() == 'false': + v = False + elif v.lower() == 'true': + v = True + elif v.isdigit(): + v = int(v) + data[k] = v + + return data + + +def poor_yaml_write(data, file, template_file=DEPLOY_TEMPLATE): + """ + Args: + data (dict): + file (str): + template_file (str): + """ + with open(template_file, 'r', encoding='utf-8') as f: + text = f.read().replace('\\', '/') + + for key, value in data.items(): + if value is None: + value = 'null' + elif value is True: + value = "true" + elif value is False: + value = "false" + text = re.sub(f'{key}:.*?\n', f'{key}: {value}\n', text) + + with open(file, 'w', encoding='utf-8', newline='') as f: + f.write(text) + + +@dataclass +class DataProcessInfo: + proc: object # psutil.Process or psutil._pswindows.Process + pid: int + + @cached_property + def name(self): + name = self.proc.name() + return name + + @cached_property + def cmdline(self): + try: + cmdline = self.proc.cmdline() + except: + # psutil.AccessDenied + cmdline = [] + cmdline = ' '.join(cmdline).replace(r'\\', '/').replace('\\', '/') + return cmdline + + def __str__(self): + # Don't print `proc`, it will take some time to get process properties + return f'DataProcessInfo(name="{self.name}", pid={self.pid}, cmdline="{self.cmdline}")' + + __repr__ = __str__ + + +def iter_process() -> Iterable[DataProcessInfo]: + try: + import psutil + except ModuleNotFoundError: + return + + if psutil.WINDOWS: + # Since this is a one-time-usage, we access psutil._psplatform.Process directly + # to bypass the call of psutil.Process.is_running(). + # This only costs about 0.017s. + for pid in psutil.pids(): + proc = psutil._psplatform.Process(pid) + yield DataProcessInfo( + proc=proc, + pid=proc.pid, + ) + else: + # This will cost about 0.45s, even `attr` is given. + for proc in psutil.process_iter(): + yield DataProcessInfo( + proc=proc, + pid=proc.pid, + ) diff --git a/module/device/device.py b/module/device/device.py index ff116ea18..97127db9a 100644 --- a/module/device/device.py +++ b/module/device/device.py @@ -7,16 +7,15 @@ from module.config.utils import get_server_next_update from module.device.app_control import AppControl from module.device.control import Control from module.device.screenshot import Screenshot -from module.exception import (GameNotRunningError, GameStuckError, - GameTooManyClickError, RequestHumanTakeover) +from module.exception import (EmulatorNotRunningError, GameNotRunningError, GameStuckError, GameTooManyClickError, + RequestHumanTakeover) from module.handler.assets import GET_MISSION from module.logger import logger if sys.platform == 'win32': - from module.device.emulator import EmulatorManager + from module.device.platform.platform_windows import PlatformWindows as Platform else: - class EmulatorManager: - pass + from module.device.platform.platform_base import PlatformBase as Platform def show_function_call(): @@ -59,7 +58,7 @@ def show_function_call(): logger.info('Function calls:' + ''.join(func_list)) -class Device(Screenshot, Control, AppControl, EmulatorManager): +class Device(Screenshot, Control, AppControl, Platform): _screen_size_checked = False detect_record = set() click_record = collections.deque(maxlen=15) @@ -68,13 +67,27 @@ class Device(Screenshot, Control, AppControl, EmulatorManager): stuck_long_wait_list = ['BATTLE_STATUS_S', 'PAUSE', 'LOGIN_CHECK'] def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) + for _ in range(2): + try: + super().__init__(*args, **kwargs) + break + except EmulatorNotRunningError: + # Try to start emulator + if self.emulator_instance is not None: + self.emulator_start() + else: + logger.critical( + f'No emulator with serial "{self.config.Emulator_Serial}" found, ' + f'please set a correct serial' + ) + raise + + # Auto-fill emulator info + if self.config.EmulatorInfo_Emulator == 'auto': + _ = self.emulator_instance + self.screenshot_interval_set() - # Temp fix for MuMu 12 before DroidCast updated - if self.is_mumu_family: - logger.info('Patching screenshot method for mumu') - self.config.override(Emulator_ScreenshotMethod='ADB_nc') # Auto-select the fastest screenshot method if not self.config.is_template_config and self.config.Emulator_ScreenshotMethod == 'auto': self.run_simple_screenshot_benchmark() diff --git a/module/device/emulator.py b/module/device/emulator.py deleted file mode 100644 index 44ef65592..000000000 --- a/module/device/emulator.py +++ /dev/null @@ -1,325 +0,0 @@ -import os -import re -import winreg -import subprocess - -from adbutils.errors import AdbError - -from deploy.emulator import VirtualBoxEmulator -from module.base.decorator import cached_property -from module.device.connection import Connection -from module.device.method.utils import get_serial_pair -from module.exception import RequestHumanTakeover, EmulatorNotRunningError -from module.logger import logger - - -class EmulatorInstance(VirtualBoxEmulator): - - def __init__(self, name, root_path, emu_path, - vbox_path=None, vbox_name=None, kill_para=None, multi_para=None): - """ - Args: - name (str): Emulator name in windows uninstall list. - root_path (str): Relative path from uninstall.exe to emulator installation folder. - emu_path (str): Relative path to executable simulator file. - vbox_path (str): Relative path to virtual box folder. - vbox_name (str): Regular Expression to match the name of .vbox file. - kill_para (str): Parameters required by kill emulator. - multi_para (str): Parameters required by start multi open emulator, - #id will be replaced with the real ID. - """ - super().__init__( - name=name, - root_path=root_path, - adb_path=None, - vbox_path=vbox_path, - vbox_name=vbox_name, - ) - self.emu_path = emu_path - self.kill_para = kill_para - self.multi_para = multi_para - - @cached_property - def id_and_serial(self): - """ - Returns: - list[str, str]: List of multi_id and serial. - """ - vbox = [] - for path, folders, files in os.walk(os.path.join(self.root, self.vbox_path)): - for file in files: - if re.match(self.vbox_name, file): - file = os.path.join(path, file) - vbox.append(file) - - serial = [] - for file in vbox: - with open(file, 'r', encoding='utf-8', errors='ignore') as f: - for line in f.readlines(): - # - res = re.search('<*?hostport="(.*?)".*?guestport="5555"/>', line) - if res: - serial.append([os.path.basename(file).split(".")[0], f'127.0.0.1:{res.group(1)}']) - - return serial - - -class Bluestacks5Instance(EmulatorInstance): - @cached_property - def root(self): - try: - return super().root - except FileNotFoundError: - self.name = 'BlueStacks_nxt_cn' - return super().root - - @cached_property - def id_and_serial(self): - try: - reg = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\BlueStacks_nxt") - except FileNotFoundError: - reg = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\BlueStacks_nxt_cn") - directory = winreg.QueryValueEx(reg, 'UserDefinedDir')[0] - - with open(os.path.join(directory, 'bluestacks.conf'), encoding='utf-8') as f: - content = f.read() - emulators = re.findall(r'bst.instance.(\w+).status.adb_port="(\d+)"', content) - serial = [] - for emulator in emulators: - serial.append([emulator[0], f'127.0.0.1:{emulator[1]}']) - return serial - - -class EmulatorManager(Connection): - pid = None - SUPPORTED_EMULATORS = { - 'nox_player': EmulatorInstance( - name="Nox", - root_path=".", - emu_path="./Nox.exe", - vbox_path="./BignoxVMS", - vbox_name='.*.vbox$', - kill_para='-quit', - multi_para='-clone:#id', - ), - 'mumu_player': EmulatorInstance( - name="Nemu", - root_path=".", - emu_path="./EmulatorShell/NemuPlayer.exe", - vbox_path="./vms", - vbox_name='.*.nemu$', - ), - 'bluestacks_5': Bluestacks5Instance( - name='BlueStacks_nxt', - root_path='.', - emu_path='./HD-Player.exe', - multi_para='--instance #id', - ), - } - - def detect_emulator(self, serial, emulator=None): - """ - Args: - serial (str): - emulator (EmulatorInstance): - - Returns: - list[EmulatorInstance, str]:Emulator and multi_id - """ - if emulator is None: - logger.info('Detect emulator from all emulators installed') - emulators = [] - for emulator in self.SUPPORTED_EMULATORS.values(): - try: - serials = emulator.id_and_serial - for cur_serial in serials: - if cur_serial[1] == serial: - emulators.append([emulator, cur_serial[0]]) - except FileNotFoundError: - pass - - logger.info('Detected emulators:') - for emulator in emulators: - logger.info(f'Name: {emulator[0].name}, Multi_id: {emulator[1]}') - - if len(emulators) == 1 or \ - (len(emulators) > 0 and emulators[0][0] == self.SUPPORTED_EMULATORS['mumu_player']): - logger.info('Find the only emulator, using it') - return emulators[0][0], emulators[0][1] - elif len(emulators) == 0: - logger.warning('The emulator corresponding to serial is not found, ' - 'please check the setting or use custom command') - else: - logger.warning('Multiple emulators with the same serial have been found, ' - 'please select one manually or use custom command') - raise RequestHumanTakeover - - else: - try: - logger.info(f'Detect emulator from {emulator.name}') - serials = emulator.id_and_serial - for cur_serial in serials: - if cur_serial[1] == serial: - logger.info('Find the only emulator, using it') - return emulator, cur_serial[0] - except FileNotFoundError: - pass - logger.warning('The emulator corresponding to serial is not found, ' - 'please check the setting or use custom command') - raise RequestHumanTakeover - - @staticmethod - def execute(command): - """ - Args: - command (str): - - Returns: - subprocess.Popen: - """ - command = command.replace(r"\\", "/").replace("\\", "/").replace('"', '"') - logger.info(f'Execute: {command}') - return subprocess.Popen(command, close_fds=True) # only work on Windows - - @staticmethod - def task_kill(pid=None, name=None): - """ - Args: - pid (list, int): - name (list, str): - - Returns: - subprocess.Popen: - """ - command = 'taskkill ' - if pid is not None: - if isinstance(pid, list): - for p in pid: - command += f'/pid {p} ' - else: - command += f'/pid {pid} ' - elif name is not None: - if isinstance(name, list): - for n in name: - command += f'/im {n} ' - else: - command += f'/im {name} ' - else: - raise RequestHumanTakeover - command += '/t /f' - - return EmulatorManager.execute(command) - - def adb_connect(self, serial): - try: - return super(EmulatorManager, self).adb_connect(serial) - except EmulatorNotRunningError: - raise RequestHumanTakeover - - def detect_emulator_status(self, serial): - devices = self.list_device() - for device in devices: - if device.serial == serial: - return device.status - return 'offline' - - def emulator_start(self, serial, emulator=None, multi_id=None, command=None): - """ - Args: - serial (str): Expected serial after simulator starts successfully. - emulator (EmulatorInstance): Emulator to start. - multi_id (str): Emulator ID used by multi open emulator. - command (str): Customized path and parameters of the simulator to start. - - Return: - bool: If start successful. - """ - if command is None: - command = '\"' + os.path.abspath(os.path.join(emulator.root, emulator.emu_path)) + '\"' - if emulator.multi_para is not None and multi_id is not None: - command += " " + emulator.multi_para.replace("#id", multi_id) - - logger.info('Start emulator') - pipe = self.execute(command) - self.pid = pipe.pid - self.sleep(10) - - for _ in range(20): - if pipe.poll() is not None: - break - try: - if super().adb_connect(serial): - # Wait until emulator start completely - self.sleep(10) - return True - except EmulatorNotRunningError: - pass - self.sleep(5) - return False - - def emulator_kill(self, serial, emulator=None, multi_id=None, command=None): - """ - Args: - serial (str): Expected serial after simulator starts successfully. - emulator (EmulatorInstance): Emulator to start. - multi_id (str): Emulator ID used by multi open emulator. - command (str): Customized path and parameters of the simulator to start. - - Return: - bool: If kill successful. - """ - if command is None and emulator.kill_para is not None: - command = '\"' + os.path.abspath(os.path.join(emulator.root, emulator.emu_path)) + '\"' - if emulator.multi_para is not None and multi_id is not None: - command += " " + emulator.multi_para.replace("#id", multi_id) - command += " " + emulator.kill_para - - logger.info('Kill emulator') - if emulator == self.SUPPORTED_EMULATORS['bluestacks_5']: - try: - self.adb_command(['reboot', '-p'], timeout=20) - if self.detect_emulator_status(serial) == 'offline': - self.pid = None - return True - except AdbError: - return False - - if emulator == self.SUPPORTED_EMULATORS['mumu_player']: - self.task_kill(pid=None, name=['NemuHeadless.exe', 'NemuPlayer.exe', 'NemuSvc.exe']) - elif command is not None: - self.execute(command) - else: - self.task_kill(pid=self.pid, name=os.path.basename(emulator.emu_path)) - self.sleep(5) - - for _ in range(10): - if self.detect_emulator_status(serial) == 'offline': - self.pid = None - return True - self.sleep(2) - return False - - def emulator_restart(self): - serial, _ = get_serial_pair(self.serial) - if serial is None: - serial = self.serial - - if os.name != 'nt': - logger.warning('Restart simulator only works under Windows platform') - return False - - logger.hr('Emulator restart') - if self.config.RestartEmulator_EmulatorType == 'auto': - emulator, multi_id = self.detect_emulator(serial) - else: - emulator = self.SUPPORTED_EMULATORS[self.config.RestartEmulator_EmulatorType] - emulator, multi_id = self.detect_emulator(serial, emulator=emulator) - - for _ in range(3): - if not self.emulator_kill(serial, emulator, multi_id): - continue - if self.emulator_start(serial, emulator, multi_id): - return True - - logger.warning('Restart emulator failed for 3 times, please check your settings') - raise RequestHumanTakeover diff --git a/module/device/platform/emulator_base.py b/module/device/platform/emulator_base.py index f5decef4f..19262b083 100644 --- a/module/device/platform/emulator_base.py +++ b/module/device/platform/emulator_base.py @@ -1,14 +1,41 @@ import os +import re import typing as t from dataclasses import dataclass -from deploy.utils import cached_property, iter_folder +from module.device.platform.utils import cached_property, iter_folder def abspath(path): return os.path.abspath(path).replace('\\', '/') +def get_serial_pair(serial): + """ + Args: + serial (str): + + Returns: + str, str: `127.0.0.1:5555+{X}` and `emulator-5554+{X}`, 0 <= X <= 32 + """ + if serial.startswith('127.0.0.1:'): + try: + port = int(serial[10:]) + if 5555 <= port <= 5555 + 32: + return f'127.0.0.1:{port}', f'emulator-{port - 1}' + except (ValueError, IndexError): + pass + if serial.startswith('emulator-'): + try: + port = int(serial[9:]) + if 5554 <= port <= 5554 + 32: + return f'127.0.0.1:{port + 1}', f'emulator-{port}' + except (ValueError, IndexError): + pass + + return None, None + + @dataclass class EmulatorInstanceBase: # Serial for adb connection @@ -52,22 +79,46 @@ class EmulatorInstanceBase: def __bool__(self): return True + @cached_property + def MuMuPlayer12_id(self): + """ + Convert MuMu 12 instance name to instance id. + Example names: + MuMuPlayer-12.0-3 + YXArkNights-12.0-1 + + Returns: + int: Instance ID, or None if this is not a MuMu 12 instance + """ + res = re.search(r'MuMuPlayer-12.0-(\d+)', self.name) + if res: + return int(res.group(1)) + res = re.search(r'YXArkNights-12.0-(\d+)', self.name) + if res: + return int(res.group(1)) + + return None + class EmulatorBase: + # Values here must match those in argument.yaml EmulatorInfo.Emulator.option NoxPlayer = 'NoxPlayer' NoxPlayer64 = 'NoxPlayer64' NoxPlayerFamily = [NoxPlayer, NoxPlayer64] BlueStacks4 = 'BlueStacks4' BlueStacks5 = 'BlueStacks5' + BlueStacks4HyperV = 'BlueStacks4HyperV' + BlueStacks5HyperV = 'BlueStacks5HyperV' BlueStacksFamily = [BlueStacks4, BlueStacks5] LDPlayer3 = 'LDPlayer3' LDPlayer4 = 'LDPlayer4' LDPlayer9 = 'LDPlayer9' LDPlayerFamily = [LDPlayer3, LDPlayer4, LDPlayer9] - MumuPlayer = 'MumuPlayer' - MumuPlayer9 = 'MumuPlayer9' - MumuPlayerFamily = [MumuPlayer, MumuPlayer9] - MemuPlayer = 'MemuPlayer' + MuMuPlayer = 'MuMuPlayer' + MuMuPlayerX = 'MuMuPlayerX' + MuMuPlayer12 = 'MuMuPlayer12' + MuMuPlayerFamily = [MuMuPlayer, MuMuPlayerX, MuMuPlayer12] + MEmuPlayer = 'MEmuPlayer' @classmethod def path_to_type(cls, path: str) -> str: @@ -81,12 +132,19 @@ class EmulatorBase: """ return '' - def iter_instances(self): + def iter_instances(self) -> t.Iterable[EmulatorInstanceBase]: """ Yields: EmulatorInstance: Emulator instances found in this emulator """ - return + pass + + def iter_adb_binaries(self) -> t.Iterable[str]: + """ + Yields: + str: Filepath to adb binaries found in this emulator + """ + pass def __init__(self, path): # Path to .exe file @@ -143,10 +201,7 @@ class EmulatorBase: list[str]: """ folder = self.abspath(folder) - try: - return list(iter_folder(folder, is_dir=is_dir, ext=ext)) - except FileNotFoundError: - return [] + return list(iter_folder(folder, is_dir=is_dir, ext=ext)) class EmulatorManagerBase: @@ -163,3 +218,30 @@ class EmulatorManagerBase: Get all emulator instances installed on current computer. """ return [] + + @cached_property + def all_emulator_serials(self) -> t.List[str]: + """ + Returns: + list[str]: All possible serials on current computer. + """ + out = [] + for emulator in self.all_emulator_instances: + out.append(emulator.serial) + # Also add serial like `emulator-5554` + port_serial, emu_serial = get_serial_pair(emulator.serial) + if emu_serial: + out.append(emu_serial) + return out + + @cached_property + def all_adb_binaries(self) -> t.List[str]: + """ + Returns: + list[str]: All adb binaries of emulators on current computer. + """ + out = [] + for emulator in self.all_emulators: + for exe in emulator.iter_adb_binaries(): + out.append(exe) + return out diff --git a/module/device/platform/windows_emulator.py b/module/device/platform/emulator_windows.py similarity index 77% rename from module/device/platform/windows_emulator.py rename to module/device/platform/emulator_windows.py index cc08bb41b..f94f0707d 100644 --- a/module/device/platform/windows_emulator.py +++ b/module/device/platform/emulator_windows.py @@ -5,11 +5,11 @@ import typing as t import winreg from dataclasses import dataclass -import psutil - -from module.base.decorator import cached_property -from module.config.utils import iter_folder +# module/device/platform/emulator_base.py +# module/device/platform/emulator_windows.py +# Will be used in Alas Easy Install, they shouldn't import any Alas modules. from module.device.platform.emulator_base import EmulatorBase, EmulatorInstanceBase, EmulatorManagerBase +from module.device.platform.utils import cached_property, iter_folder @dataclass @@ -118,13 +118,15 @@ class Emulator(EmulatorBase): return cls.LDPlayer3 if exe == 'NemuPlayer.exe': if dir2 == 'nemu': - return cls.MumuPlayer + return cls.MuMuPlayer elif dir2 == 'nemu9': - return cls.MumuPlayer9 + return cls.MuMuPlayerX else: - return cls.MumuPlayer + return cls.MuMuPlayer + if exe == 'MuMuPlayer.exe': + return cls.MuMuPlayer12 if exe == 'MEmu.exe': - return cls.MemuPlayer + return cls.MEmuPlayer return '' @@ -148,6 +150,8 @@ class Emulator(EmulatorBase): yield exe.replace('dnmultiplayer.exe', 'dnplayer.exe') elif 'NemuMultiPlayer.exe' in exe: yield exe.replace('NemuMultiPlayer.exe', 'NemuPlayer.exe') + elif 'MuMuMultiPlayer.exe' in exe: + yield exe.replace('MuMuMultiPlayer.exe', 'MuMuManager.exe') elif 'MEmuConsole.exe' in exe: yield exe.replace('MEmuConsole.exe', 'MEmu.exe') else: @@ -250,14 +254,14 @@ class Emulator(EmulatorBase): name=folder, path=self.path ) - elif self == Emulator.MumuPlayer: + elif self == Emulator.MuMuPlayer: # MuMu has no multi instances, on 7555 only yield EmulatorInstance( serial='127.0.0.1:7555', name='', path=self.path, ) - elif self == Emulator.MumuPlayer9: + elif self == Emulator.MuMuPlayerX: # vms/nemu-12.0-x64-default for folder in self.list_folder('../vms', is_dir=True): for file in iter_folder(folder, ext='.nemu'): @@ -268,7 +272,18 @@ class Emulator(EmulatorBase): name=os.path.basename(folder), path=self.path, ) - elif self == Emulator.MemuPlayer: + elif self == Emulator.MuMuPlayer12: + # vms/MuMuPlayer-12.0-0 + for folder in self.list_folder('../vms', is_dir=True): + for file in iter_folder(folder, ext='.nemu'): + serial = Emulator.vbox_file_to_serial(file) + if serial: + yield EmulatorInstance( + serial=serial, + name=os.path.basename(folder), + path=self.path, + ) + elif self == Emulator.MEmuPlayer: # ./MemuHyperv VMs/{name}/{name}.memu for folder in self.list_folder('./MemuHyperv VMs', is_dir=True): for file in iter_folder(folder, ext='.memu'): @@ -280,6 +295,27 @@ class Emulator(EmulatorBase): path=self.path, ) + def iter_adb_binaries(self) -> t.Iterable[str]: + """ + Yields: + str: Filepath to adb binaries found in this emulator + """ + if self == Emulator.NoxPlayerFamily: + exe = self.abspath('./nox_adb.exe') + if os.path.exists(exe): + yield exe + if self == Emulator.MuMuPlayerFamily: + # From MuMu9\emulator\nemu9\EmulatorShell + # to MuMu9\emulator\nemu9\vmonitor\bin\adb_server.exe + exe = self.abspath('../vmonitor/bin/adb_server.exe') + if os.path.exists(exe): + yield exe + + # All emulators have adb.exe + exe = self.abspath('./adb.exe') + if os.path.exists(exe): + yield exe + class EmulatorManager(EmulatorManagerBase): @staticmethod @@ -294,17 +330,26 @@ class EmulatorManager(EmulatorManagerBase): path = r'Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist' # {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\xxx.exe regex_hash = re.compile(r'{.*}') - with winreg.OpenKey(winreg.HKEY_CURRENT_USER, path) as reg: - folders = list_key(reg) + try: + with winreg.OpenKey(winreg.HKEY_CURRENT_USER, path) as reg: + folders = list_key(reg) + except FileNotFoundError: + return + for folder in folders: - with winreg.OpenKey(winreg.HKEY_CURRENT_USER, f'{path}\\{folder}\\Count') as reg: - for key in list_reg(reg): - key = codecs.decode(key.name, 'rot-13') - # Skip those with hash - if regex_hash.search(key): - continue - for file in Emulator.multi_to_single(key): - yield file + try: + with winreg.OpenKey(winreg.HKEY_CURRENT_USER, f'{path}\\{folder}\\Count') as reg: + for key in list_reg(reg): + key = codecs.decode(key.name, 'rot-13') + # Skip those with hash + if regex_hash.search(key): + continue + for file in Emulator.multi_to_single(key): + yield file + except FileNotFoundError: + # FileNotFoundError: [WinError 2] 系统找不到指定的文件。 + # Might be a random directory without "Count" subdirectory + continue @staticmethod def iter_mui_cache(): @@ -317,8 +362,11 @@ class EmulatorManager(EmulatorManagerBase): str: Path to emulator executable, may contains duplicate values """ path = r'Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache' - with winreg.OpenKey(winreg.HKEY_CURRENT_USER, path) as reg: - rows = list_reg(reg) + try: + with winreg.OpenKey(winreg.HKEY_CURRENT_USER, path) as reg: + rows = list_reg(reg) + except FileNotFoundError: + return regex = re.compile(r'(^.*\.exe)\.') for row in rows: @@ -380,36 +428,32 @@ class EmulatorManager(EmulatorManagerBase): 'leidian9', 'Nemu', 'Nemu9', + 'MuMuPlayer-12.0' 'MEmu', ] for path in known_uninstall_registry_path: - with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path) as reg: - for software in list_key(reg): - if software not in known_emulator_registry_name: - continue + try: + with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path) as reg: + software_list = list_key(reg) + except FileNotFoundError: + continue + for software in software_list: + if software not in known_emulator_registry_name: + continue + try: with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, f'{path}\\{software}') as software_reg: - try: - uninstall = winreg.QueryValueEx(software_reg, 'UninstallString')[0] - except FileNotFoundError: - continue - if not uninstall: - continue - # UninstallString is like: - # C:\Program Files\BlueStacks_nxt\BlueStacksUninstaller.exe -tmp - # "E:\ProgramFiles\Microvirt\MEmu\uninstall\uninstall.exe" -u - # Extract path in "" - res = re.search('"(.*?)"', uninstall) - uninstall = res.group(1) if res else uninstall - yield uninstall - - @staticmethod - def iter_running_emulator() -> t.Iterable[psutil.Process]: - """ - This may cost some time. - """ - for proc in psutil.process_iter(): - if Emulator.is_emulator(str(proc.name())): - yield proc + uninstall = winreg.QueryValueEx(software_reg, 'UninstallString')[0] + except FileNotFoundError: + continue + if not uninstall: + continue + # UninstallString is like: + # C:\Program Files\BlueStacks_nxt\BlueStacksUninstaller.exe -tmp + # "E:\ProgramFiles\Microvirt\MEmu\uninstall\uninstall.exe" -u + # Extract path in "" + res = re.search('"(.*?)"', uninstall) + uninstall = res.group(1) if res else uninstall + yield uninstall @cached_property def all_emulators(self) -> t.List[Emulator]: @@ -448,11 +492,9 @@ class EmulatorManager(EmulatorManagerBase): if Emulator.is_emulator(file) and os.path.exists(file): exe.add(file) # MuMu specific directory - folder = abspath(os.path.join(os.path.dirname(uninstall), 'EmulatorShell')) - if os.path.exists(folder): - for file in iter_folder(folder, ext='.exe'): - if Emulator.is_emulator(file) and os.path.exists(file): - exe.add(file) + for file in iter_folder(abspath(os.path.join(os.path.dirname(uninstall), 'EmulatorShell')), ext='.exe'): + if Emulator.is_emulator(file) and os.path.exists(file): + exe.add(file) exe = [Emulator(path).path for path in exe if Emulator.is_emulator(path)] exe = sorted(set(exe)) diff --git a/module/device/platform/platform_base.py b/module/device/platform/platform_base.py index e38fe2729..1b68faad8 100644 --- a/module/device/platform/platform_base.py +++ b/module/device/platform/platform_base.py @@ -1,23 +1,23 @@ +import sys import typing as t -import yaml -from pydantic import BaseModel, SecretStr +from pydantic import BaseModel +from module.base.decorator import cached_property, del_cached_property from module.device.connection import Connection from module.device.platform.emulator_base import EmulatorInstanceBase, EmulatorManagerBase from module.logger import logger from module.map.map_grids import SelectedGrids -from module.base.decorator import cached_property, del_cached_property -class EmulatorData(BaseModel): +class EmulatorInfo(BaseModel): emulator: str = '' name: str = '' path: str = '' # For APIs of chinac.com, a phone cloud platform. - access_key: SecretStr = '' - secret: SecretStr = '' + # access_key: SecretStr = '' + # secret: SecretStr = '' class PlatformBase(Connection, EmulatorManagerBase): @@ -36,23 +36,25 @@ class PlatformBase(Connection, EmulatorManagerBase): - Retry is required. - Using bored sleep to wait startup is forbidden. """ - pass + logger.info(f'Current platform {sys.platform} does not support emulator_start, skip') def emulator_stop(self): """ Stop a emulator. """ - pass + logger.info(f'Current platform {sys.platform} does not support emulator_stop, skip') @cached_property - def emulator_data(self) -> EmulatorData: - try: - data = yaml.safe_load(self.config.RestartEmulator_EmulatorData) - return EmulatorData(**data) - except Exception as e: - logger.error(e) - logger.error("Failed to load EmulatorData, no emulator_instance") - return EmulatorData() + def emulator_info(self) -> EmulatorInfo: + emulator = self.config.EmulatorInfo_Emulator + name = str(self.config.EmulatorInfo_name).strip().replace('\n', '') + path = str(self.config.EmulatorInfo_path).strip().replace('\n', '') + + return EmulatorInfo( + emulator=emulator, + name=name, + path=path, + ) @cached_property def emulator_instance(self) -> t.Optional[EmulatorInstanceBase]: @@ -60,7 +62,7 @@ class PlatformBase(Connection, EmulatorManagerBase): Returns: EmulatorInstanceBase: Emulator instance or None """ - data = self.emulator_data + data = self.emulator_info old_info = dict( emulator=data.emulator, path=data.path, @@ -74,14 +76,18 @@ class PlatformBase(Connection, EmulatorManagerBase): ) # Write complete emulator data - new_info = dict( - emulator=instance.type, - path=instance.path, - name=instance.name, - ) - if new_info != old_info: - self.config.RestartEmulator_EmulatorData = yaml.safe_dump(new_info).strip() - del_cached_property(self, 'emulator_data') + if instance is not None: + new_info = dict( + emulator=instance.type, + path=instance.path, + name=instance.name, + ) + if new_info != old_info: + with self.config.multi_set(): + self.config.EmulatorInfo_Emulator = instance.type + self.config.EmulatorInfo_name = instance.name + self.config.EmulatorInfo_path = instance.path + del_cached_property(self, 'emulator_info') return instance @@ -102,7 +108,7 @@ class PlatformBase(Connection, EmulatorManagerBase): Returns: EmulatorInstance: Emulator instance or None if no instances not found. """ - logger.hr('Find emulator instance') + logger.hr('Find emulator instance', level=2) instances = SelectedGrids(self.all_emulator_instances) for instance in instances: logger.info(instance) @@ -115,6 +121,7 @@ class PlatformBase(Connection, EmulatorManagerBase): return None if select.count == 1: instance = select[0] + logger.hr('Emulator instance', level=2) logger.info(f'Found emulator instance: {instance}') return instance @@ -127,6 +134,7 @@ class PlatformBase(Connection, EmulatorManagerBase): return None if select.count == 1: instance = select[0] + logger.hr('Emulator instance', level=2) logger.info(f'Found emulator instance: {instance}') return instance @@ -139,6 +147,7 @@ class PlatformBase(Connection, EmulatorManagerBase): return None if select.count == 1: instance = select[0] + logger.hr('Emulator instance', level=2) logger.info(f'Found emulator instance: {instance}') return instance @@ -151,15 +160,10 @@ class PlatformBase(Connection, EmulatorManagerBase): return None if select.count == 1: instance = select[0] + logger.hr('Emulator instance', level=2) logger.info(f'Found emulator instance: {instance}') return instance # Still too many instances logger.warning(f'Found multiple emulator instances with {search_args}') return None - - -if __name__ == '__main__': - self = PlatformBase('alas') - d = self.emulator_instance - print(d) diff --git a/module/device/platform/windows.py b/module/device/platform/platform_windows.py similarity index 63% rename from module/device/platform/windows.py rename to module/device/platform/platform_windows.py index 9ae83b2c1..de00efeca 100644 --- a/module/device/platform/windows.py +++ b/module/device/platform/platform_windows.py @@ -1,14 +1,15 @@ import ctypes +import re import subprocess -import typing as t import psutil +from deploy.Windows.utils import DataProcessInfo from module.base.decorator import run_once from module.base.timer import Timer from module.device.connection import AdbDeviceWithStatus from module.device.platform.platform_base import PlatformBase -from module.device.platform.windows_emulator import Emulator, EmulatorInstance, EmulatorManager +from module.device.platform.emulator_windows import Emulator, EmulatorInstance, EmulatorManager from module.logger import logger @@ -30,11 +31,11 @@ def minimize_window(hwnd): def get_window_title(hwnd): """Returns the window title as a string.""" - textLenInCharacters = ctypes.windll.user32.GetWindowTextLengthW(hwnd) - stringBuffer = ctypes.create_unicode_buffer( - textLenInCharacters + 1) # +1 for the \0 at the end of the null-terminated string. - ctypes.windll.user32.GetWindowTextW(hwnd, stringBuffer, textLenInCharacters + 1) - return stringBuffer.value + text_len_in_characters = ctypes.windll.user32.GetWindowTextLengthW(hwnd) + string_buffer = ctypes.create_unicode_buffer( + text_len_in_characters + 1) # +1 for the \0 at the end of the null-terminated string. + ctypes.windll.user32.GetWindowTextW(hwnd, string_buffer, text_len_in_characters + 1) + return string_buffer.value def flash_window(hwnd, flash=True): @@ -42,8 +43,8 @@ def flash_window(hwnd, flash=True): class PlatformWindows(PlatformBase, EmulatorManager): - @staticmethod - def execute(command): + @classmethod + def execute(cls, command): """ Args: command (str): @@ -55,67 +56,53 @@ class PlatformWindows(PlatformBase, EmulatorManager): logger.info(f'Execute: {command}') return subprocess.Popen(command, close_fds=True) # only work on Windows - @staticmethod - def taskkill(process): + @classmethod + def kill_process_by_regex(cls, regex: str) -> int: """ - Args: - process (str, list[str]): Process name or a list of them - - Returns: - subprocess.Popen: - """ - if not isinstance(process, list): - process = [process] - return self.execute(f'taskkill /t /f /im ' + ''.join(process)) - - @staticmethod - def find_running_emulator(instance: EmulatorInstance) -> t.Optional[psutil.Process]: - for proc in EmulatorManager.iter_running_emulator(): - cmdline = [arg.replace('\\', '/').replace(r'\\', '/') for arg in proc.cmdline()] - cmdline = ' '.join(cmdline) - if instance.path in cmdline and instance.name in cmdline: - return proc - - logger.warning(f'Cannot find a running emulator process with path={instance.path}, name={instance.name}') - return None - - def emulator_kill_by_process(self, instance: EmulatorInstance) -> bool: - """ - Kill a emulator by finding its process. + Kill processes with cmdline match the given regex. Args: - instance: + regex: Returns: - bool: If success + int: Number of processes killed """ - proc = self.find_running_emulator(instance) - if proc is not None: - proc.kill() - return True - else: - return False + count = 0 + + for proc in psutil.process_iter(): + cmdline = DataProcessInfo(proc=proc, pid=proc.pid).cmdline + if re.search(regex, cmdline): + logger.info(f'Kill emulator: {cmdline}') + proc.kill() + count += 1 + + return count def _emulator_start(self, instance: EmulatorInstance): """ Start a emulator without error handling """ exe = instance.emulator.path - if instance == Emulator.MumuPlayer: + if instance == Emulator.MuMuPlayer: # NemuPlayer.exe self.execute(exe) - if instance == Emulator.MumuPlayer9: + elif instance == Emulator.MuMuPlayerX: # NemuPlayer.exe -m nemu-12.0-x64-default - self.execute(f'{exe} -m {instance.name}') + self.execute(f'"{exe}" -m {instance.name}') + elif instance == Emulator.MuMuPlayer12: + # MuMuPlayer.exe -v 0 + if instance.MuMuPlayer12_id is None: + logger.warning(f'Cannot get MuMu instance index from name {instance.name}') + self.execute(f'"{exe}" -v {instance.MuMuPlayer12_id}') elif instance == Emulator.NoxPlayerFamily: # Nox.exe -clone:Nox_1 - self.execute(f'{exe} -clone:{instance.name}') + self.execute(f'"{exe}" -clone:{instance.name}') elif instance == Emulator.BlueStacks5: # HD-Player.exe -instance Pie64 - self.execute(f'{exe} -instance {instance.name}') + self.execute(f'"{exe}" -instance {instance.name}') elif instance == Emulator.BlueStacks4: # BlueStacks\Client\Bluestacks.exe -vmname Android_1 - self.execute(f'{exe} -vmname {instance.name}') + self.execute(f'"{exe}" -vmname {instance.name}') else: raise EmulatorUnknown(f'Cannot start an unknown emulator instance: {instance}') @@ -123,16 +110,53 @@ class PlatformWindows(PlatformBase, EmulatorManager): """ Stop a emulator without error handling """ + logger.hr('Emulator stop', level=2) exe = instance.emulator.path - if instance == Emulator.MumuPlayer: - # taskkill /t /f /im NemuHeadless.exe NemuPlayer.exe NemuSvc.exe - self.taskkill(['NemuHeadless.exe', 'NemuPlayer.exe', 'NemuSvc.exe']) - elif instance == Emulator.MumuPlayer9: - # Kill by process - self.emulator_kill_by_process(instance) + if instance == Emulator.MuMuPlayer: + # MuMu6 does not have multi instance, kill one means kill all + # Has 4 processes + # "C:\Program Files\NemuVbox\Hypervisor\NemuHeadless.exe" --comment nemu-6.0-x64-default --startvm + # "E:\ProgramFiles\MuMu\emulator\nemu\EmulatorShell\NemuPlayer.exe" + # E:\ProgramFiles\MuMu\emulator\nemu\EmulatorShell\NemuService.exe + # "C:\Program Files\NemuVbox\Hypervisor\NemuSVC.exe" -Embedding + self.kill_process_by_regex( + rf'(' + rf'NemuHeadless.exe' + rf'|NemuPlayer.exe\"' + rf'|NemuPlayer.exe$' + rf'|NemuService.exe' + rf'|NemuSVC.exe' + rf')' + ) + elif instance == Emulator.MuMuPlayerX: + # MuMu X has 3 processes + # "E:\ProgramFiles\MuMu9\emulator\nemu9\EmulatorShell\NemuPlayer.exe" -m nemu-12.0-x64-default -s 0 -l + # "C:\Program Files\Muvm6Vbox\Hypervisor\Muvm6Headless.exe" --comment nemu-12.0-x64-default --startvm xxx + # "C:\Program Files\Muvm6Vbox\Hypervisor\Muvm6SVC.exe" --Embedding + self.kill_process_by_regex( + rf'(' + rf'NemuPlayer.exe.*-m {instance.name}' + rf'|Muvm6Headless.exe' + rf'|Muvm6SVC.exe' + rf')' + ) + elif instance == Emulator.MuMuPlayer12: + # MuMu 12 has 2 processes: + # E:\ProgramFiles\Netease\MuMuPlayer-12.0\shell\MuMuPlayer.exe -v 0 + # "C:\Program Files\MuMuVMMVbox\Hypervisor\MuMuVMMHeadless.exe" --comment MuMuPlayer-12.0-0 --startvm xxx + if instance.MuMuPlayer12_id is None: + logger.warning(f'Cannot get MuMu instance index from name {instance.name}') + self.kill_process_by_regex( + rf'(' + rf'MuMuVMMHeadless.exe.*--comment {instance.name}' + rf'|MuMuPlayer.exe.*-v {instance.MuMuPlayer12_id}' + rf')' + ) + # There is also a shared service, no need to kill it + # "C:\Program Files\MuMuVMMVbox\Hypervisor\MuMuVMMSVC.exe" --Embedding elif instance == Emulator.NoxPlayerFamily: # Nox.exe -clone:Nox_1 -quit - self.execute(f'{exe} -clone:{instance.name} -quit') + self.execute(f'"{exe}" -clone:{instance.name} -quit') else: raise EmulatorUnknown(f'Cannot stop an unknown emulator instance: {instance}') @@ -152,8 +176,10 @@ class PlatformWindows(PlatformBase, EmulatorManager): # OSError: [WinError 740] 请求的操作需要提升。 if 'WinError 740' in msg: logger.error('To start/stop MumuAppPlayer, ALAS needs to be run as administrator') - except Exception as e: + except EmulatorUnknown as e: logger.error(e) + except Exception as e: + logger.exception(e) logger.error(f'Emulator function {func.__name__}() failed') return False @@ -164,6 +190,7 @@ class PlatformWindows(PlatformBase, EmulatorManager): bool: True if startup completed False if timeout """ + logger.hr('Emulator start', level=2) current_window = get_focused_window() serial = self.emulator_instance.serial logger.info(f'Current window: {current_window}') @@ -263,6 +290,7 @@ class PlatformWindows(PlatformBase, EmulatorManager): return True def emulator_start(self): + logger.hr('Emulator start', level=1) for _ in range(3): # Stop if not self._emulator_function_wrapper(self._emulator_stop): @@ -283,9 +311,11 @@ class PlatformWindows(PlatformBase, EmulatorManager): return False def emulator_stop(self): + logger.hr('Emulator stop', level=1) return self._emulator_function_wrapper(self._emulator_stop) if __name__ == '__main__': self = PlatformWindows('alas') - self.emulator_start() + d = self.emulator_instance + print(d) diff --git a/module/device/platform/utils.py b/module/device/platform/utils.py new file mode 100644 index 000000000..4ebf94af1 --- /dev/null +++ b/module/device/platform/utils.py @@ -0,0 +1,54 @@ +import os +from typing import Callable, Generic, TypeVar + +T = TypeVar("T") + + +class cached_property(Generic[T]): + """ + cached-property from https://github.com/pydanny/cached-property + Add typing support + + A property that is only computed once per instance and then replaces itself + with an ordinary attribute. Deleting the attribute resets the property. + Source: https://github.com/bottlepy/bottle/commit/fa7733e075da0d790d809aa3d2f53071897e6f76 + """ + + def __init__(self, func: Callable[..., T]): + self.func = func + + def __get__(self, obj, cls) -> T: + if obj is None: + return self + + value = obj.__dict__[self.func.__name__] = self.func(obj) + return value + + +def iter_folder(folder, is_dir=False, ext=None): + """ + Args: + folder (str): + is_dir (bool): True to iter directories only + ext (str): File extension, such as `.yaml` + + Yields: + str: Absolute path of files + """ + try: + files = os.listdir(folder) + except FileNotFoundError: + return + + for file in files: + sub = os.path.join(folder, file) + if is_dir: + if os.path.isdir(sub): + yield sub.replace('\\\\', '/').replace('\\', '/') + elif ext is not None: + if not os.path.isdir(sub): + _, extension = os.path.splitext(file) + if extension == ext: + yield os.path.join(folder, file).replace('\\\\', '/').replace('\\', '/') + else: + yield os.path.join(folder, file).replace('\\\\', '/').replace('\\', '/') From 71318a3228d0c7c86b2516ca749b36e194934127 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 28 Mar 2024 18:46:55 +0800 Subject: [PATCH 20/96] Chore: [ALAS] Expose one Platform class --- module/device/device.py | 8 +------- module/device/platform/__init__.py | 6 ++++++ module/device/platform/emulator_base.py | 2 +- module/device/platform/emulator_windows.py | 8 -------- 4 files changed, 8 insertions(+), 16 deletions(-) create mode 100644 module/device/platform/__init__.py diff --git a/module/device/device.py b/module/device/device.py index 97127db9a..efd4a86b3 100644 --- a/module/device/device.py +++ b/module/device/device.py @@ -1,5 +1,4 @@ import collections -import sys from datetime import datetime from module.base.timer import Timer @@ -12,11 +11,6 @@ from module.exception import (EmulatorNotRunningError, GameNotRunningError, Game from module.handler.assets import GET_MISSION from module.logger import logger -if sys.platform == 'win32': - from module.device.platform.platform_windows import PlatformWindows as Platform -else: - from module.device.platform.platform_base import PlatformBase as Platform - def show_function_call(): """ @@ -58,7 +52,7 @@ def show_function_call(): logger.info('Function calls:' + ''.join(func_list)) -class Device(Screenshot, Control, AppControl, Platform): +class Device(Screenshot, Control, AppControl): _screen_size_checked = False detect_record = set() click_record = collections.deque(maxlen=15) diff --git a/module/device/platform/__init__.py b/module/device/platform/__init__.py new file mode 100644 index 000000000..0dbc4b9fb --- /dev/null +++ b/module/device/platform/__init__.py @@ -0,0 +1,6 @@ +import sys + +if sys.platform == 'win32': + from module.device.platform.platform_windows import PlatformWindows as Platform +else: + from module.device.platform.platform_base import PlatformBase as Platform diff --git a/module/device/platform/emulator_base.py b/module/device/platform/emulator_base.py index 19262b083..ecd026ba1 100644 --- a/module/device/platform/emulator_base.py +++ b/module/device/platform/emulator_base.py @@ -54,7 +54,7 @@ class EmulatorInstanceBase: Returns: str: Emulator type, such as Emulator.NoxPlayer """ - return EmulatorBase.path_to_type(self.path) + return self.emulator.type @cached_property def emulator(self): diff --git a/module/device/platform/emulator_windows.py b/module/device/platform/emulator_windows.py index f94f0707d..142ad3e30 100644 --- a/module/device/platform/emulator_windows.py +++ b/module/device/platform/emulator_windows.py @@ -56,14 +56,6 @@ def abspath(path): class EmulatorInstance(EmulatorInstanceBase): - @cached_property - def type(self) -> str: - """ - Returns: - str: Emulator type, such as Emulator.NoxPlayer - """ - return Emulator.path_to_type(self.path) - @cached_property def emulator(self): """ From ad766df9109099bbca26c1cde3ff9e506f0d38a5 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 28 Mar 2024 18:55:27 +0800 Subject: [PATCH 21/96] Chore: [ALAS] Cache prop nemud.app_keep_alive --- module/device/connection.py | 9 +++++++-- module/device/connection_attr.py | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/module/device/connection.py b/module/device/connection.py index 3db639ad9..4266f6463 100644 --- a/module/device/connection.py +++ b/module/device/connection.py @@ -266,15 +266,20 @@ class Connection(ConnectionAttr): return True return False + @cached_property + def nemud_app_keep_alive(self) -> str: + res = self.adb_getprop('nemud.app_keep_alive') + return res + @retry def check_mumu_app_keep_alive(self): if not self.is_mumu_family: return False - res = self.adb_getprop('nemud.app_keep_alive') + res = self.nemud_app_keep_alive logger.attr('nemud.app_keep_alive', res) if res == '': - # Empry property, might not be a mumu emulator or might be an old mumu + # Empty property, probably MuMu6 or MuMu12 version < 3.5.6 return True elif res == 'false': # Disabled diff --git a/module/device/connection_attr.py b/module/device/connection_attr.py index 65c483dd7..da16756d5 100644 --- a/module/device/connection_attr.py +++ b/module/device/connection_attr.py @@ -146,7 +146,12 @@ class ConnectionAttr: def is_mumu_family(self): # 127.0.0.1:7555 # 127.0.0.1:16384 + 32*n - return self.serial == '127.0.0.1:7555' or self.serial.startswith('127.0.0.1:16') + return self.serial == '127.0.0.1:7555' or self.is_mumu12_family + + @cached_property + def is_mumu12_family(self): + # 127.0.0.1:16384 + 32*n + return len(self.serial) == 15 and self.serial.startswith('127.0.0.1:16') @cached_property def is_emulator(self): From 501d0e6a7f72163d20f0d29f8697a81d0394b682 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 28 Mar 2024 19:11:57 +0800 Subject: [PATCH 22/96] Add: ScreenshotMethod option nemu_ipc --- module/config/argument/args.json | 35 ++++++++++++++-------------- module/config/argument/argument.yaml | 13 ++++++++++- module/config/config_generated.py | 2 +- module/config/i18n/en-US.json | 3 ++- module/config/i18n/ja-JP.json | 3 ++- module/config/i18n/zh-CN.json | 3 ++- module/config/i18n/zh-TW.json | 3 ++- 7 files changed, 39 insertions(+), 23 deletions(-) diff --git a/module/config/argument/args.json b/module/config/argument/args.json index fd94c205d..3a6d0f4ee 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -116,7 +116,8 @@ "aScreenCap_nc", "DroidCast", "DroidCast_raw", - "scrcpy" + "scrcpy", + "nemu_ipc" ] }, "ControlMethod": { @@ -1692,8 +1693,8 @@ ], "display": "hide", "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -2025,8 +2026,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -2473,8 +2474,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -3866,8 +3867,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -4331,8 +4332,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -4796,8 +4797,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -5261,8 +5262,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -5716,8 +5717,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 00a88c350..61209d6de 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -32,7 +32,18 @@ Emulator: option: [ disabled, ] ScreenshotMethod: value: auto - option: [ auto, ADB, ADB_nc, uiautomator2, aScreenCap, aScreenCap_nc, DroidCast, DroidCast_raw, scrcpy ] + option: [ + auto, + ADB, + ADB_nc, + uiautomator2, + aScreenCap, + aScreenCap_nc, + DroidCast, + DroidCast_raw, + scrcpy, + nemu_ipc, + ] ControlMethod: value: minitouch option: [ ADB, uiautomator2, minitouch, Hermit, MaaTouch ] diff --git a/module/config/config_generated.py b/module/config/config_generated.py index bbf0a138c..24e8624f6 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -21,7 +21,7 @@ class GeneratedConfig: Emulator_Serial = 'auto' Emulator_PackageName = 'auto' # auto, com.bilibili.azurlane, com.YoStarEN.AzurLane, com.YoStarJP.AzurLane, com.hkmanjuu.azurlane.gp, com.bilibili.blhx.huawei, com.bilibili.blhx.mi, com.tencent.tmgp.bilibili.blhx, com.bilibili.blhx.baidu, com.bilibili.blhx.qihoo, com.bilibili.blhx.nearme.gamecenter, com.bilibili.blhx.vivo, com.bilibili.blhx.mz, com.bilibili.blhx.dl, com.bilibili.blhx.lenovo, com.bilibili.blhx.uc, com.bilibili.blhx.mzw, com.yiwu.blhx.yx15, com.bilibili.blhx.m4399, com.bilibili.blhx.bilibiliMove, com.hkmanjuu.azurlane.gp.mc Emulator_ServerName = 'disabled' # disabled, cn_android-0, cn_android-1, cn_android-2, cn_android-3, cn_android-4, cn_android-5, cn_android-6, cn_android-7, cn_android-8, cn_android-9, cn_android-10, cn_android-11, cn_android-12, cn_android-13, cn_android-14, cn_android-15, cn_android-16, cn_android-17, cn_android-18, cn_android-19, cn_android-20, cn_android-21, cn_android-22, cn_android-23, cn_ios-0, cn_ios-1, cn_ios-2, cn_ios-3, cn_ios-4, cn_ios-5, cn_ios-6, cn_ios-7, cn_ios-8, cn_ios-9, cn_ios-10, cn_channel-0, cn_channel-1, cn_channel-2, cn_channel-3, cn_channel-4, en-0, en-1, en-2, en-3, en-4, en-5, jp-0, jp-1, jp-2, jp-3, jp-4, jp-5, jp-6, jp-7, jp-8, jp-9, jp-10, jp-11, jp-12, jp-13, jp-14, jp-15, jp-16, jp-17 - Emulator_ScreenshotMethod = 'auto' # auto, ADB, ADB_nc, uiautomator2, aScreenCap, aScreenCap_nc, DroidCast, DroidCast_raw, scrcpy + Emulator_ScreenshotMethod = 'auto' # auto, ADB, ADB_nc, uiautomator2, aScreenCap, aScreenCap_nc, DroidCast, DroidCast_raw, scrcpy, nemu_ipc Emulator_ControlMethod = 'minitouch' # ADB, uiautomator2, minitouch, Hermit, MaaTouch Emulator_ScreenshotDedithering = False Emulator_AdbRestart = False diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 41452c7b9..6970b8072 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -409,7 +409,8 @@ "aScreenCap_nc": "aScreenCap_nc", "DroidCast": "DroidCast", "DroidCast_raw": "DroidCast_raw", - "scrcpy": "scrcpy" + "scrcpy": "scrcpy", + "nemu_ipc": "nemu_ipc" }, "ControlMethod": { "name": "Control Method", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 51f6142a7..cd8457662 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -409,7 +409,8 @@ "aScreenCap_nc": "aScreenCap_nc", "DroidCast": "DroidCast", "DroidCast_raw": "DroidCast_raw", - "scrcpy": "scrcpy" + "scrcpy": "scrcpy", + "nemu_ipc": "nemu_ipc" }, "ControlMethod": { "name": "Emulator.ControlMethod.name", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index d85d0713d..026b58e3b 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -409,7 +409,8 @@ "aScreenCap_nc": "aScreenCap_nc", "DroidCast": "DroidCast", "DroidCast_raw": "DroidCast_raw", - "scrcpy": "scrcpy" + "scrcpy": "scrcpy", + "nemu_ipc": "nemu_ipc" }, "ControlMethod": { "name": "模拟器控制方案", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index ed8b745f6..f4b765108 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -409,7 +409,8 @@ "aScreenCap_nc": "aScreenCap_nc", "DroidCast": "DroidCast", "DroidCast_raw": "DroidCast_raw", - "scrcpy": "scrcpy" + "scrcpy": "scrcpy", + "nemu_ipc": "nemu_ipc" }, "ControlMethod": { "name": "模擬器控制方案", From 54f06bc91e31131ffccee9e7310896c55fde9a4a Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 28 Mar 2024 21:41:53 +0800 Subject: [PATCH 23/96] Add: nemu_ipc screenshot and control proxy --- module/device/app_control.py | 2 +- module/device/control.py | 20 ++++++++++++-------- module/device/screenshot.py | 4 +++- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/module/device/app_control.py b/module/device/app_control.py index a6b45229e..1368a74f1 100644 --- a/module/device/app_control.py +++ b/module/device/app_control.py @@ -9,7 +9,7 @@ from module.logger import logger class AppControl(Adb, WSA, Uiautomator2): hierarchy: etree._Element - _app_u2_family = ['uiautomator2', 'minitouch', 'scrcpy', 'MaaTouch'] + _app_u2_family = ['uiautomator2', 'minitouch', 'scrcpy', 'MaaTouch', 'nemu_ipc'] def app_is_running(self) -> bool: method = self.config.Emulator_ControlMethod diff --git a/module/device/control.py b/module/device/control.py index 5834d3625..e9857f76f 100644 --- a/module/device/control.py +++ b/module/device/control.py @@ -5,11 +5,12 @@ from module.base.utils import * from module.device.method.hermit import Hermit from module.device.method.maatouch import MaaTouch from module.device.method.minitouch import Minitouch +from module.device.method.nemu_ipc import NemuIpc from module.device.method.scrcpy import Scrcpy from module.logger import logger -class Control(Hermit, Minitouch, Scrcpy, MaaTouch): +class Control(Hermit, Minitouch, Scrcpy, MaaTouch, NemuIpc): def handle_control_check(self, button): # Will be overridden in Device pass @@ -22,6 +23,7 @@ class Control(Hermit, Minitouch, Scrcpy, MaaTouch): 'minitouch': self.click_minitouch, 'Hermit': self.click_hermit, 'MaaTouch': self.click_maatouch, + 'nemu_ipc': self.nemu_ipc, } def click(self, button, control_check=True): @@ -78,6 +80,8 @@ class Control(Hermit, Minitouch, Scrcpy, MaaTouch): self.long_click_scrcpy(x, y, duration) elif method == 'MaaTouch': self.long_click_maatouch(x, y, duration) + elif method == 'nemu_ipc': + self.long_click_nemu_ipc(x, y, duration) else: self.swipe_adb((x, y), (x, y), duration) @@ -86,13 +90,9 @@ class Control(Hermit, Minitouch, Scrcpy, MaaTouch): p1, p2 = ensure_int(p1, p2) duration = ensure_time(duration) method = self.config.Emulator_ControlMethod - if method == 'minitouch': - logger.info('Swipe %s -> %s' % (point2str(*p1), point2str(*p2))) - elif method == 'uiautomator2': + if method == 'uiautomator2': logger.info('Swipe %s -> %s, %s' % (point2str(*p1), point2str(*p2), duration)) - elif method == 'scrcpy': - logger.info('Swipe %s -> %s' % (point2str(*p1), point2str(*p2))) - elif method == 'MaaTouch': + elif method in ['minitouch', 'MaaTouch', 'scrcpy', 'nemu_ipc']: logger.info('Swipe %s -> %s' % (point2str(*p1), point2str(*p2))) else: # ADB needs to be slow, or swipe doesn't work @@ -114,6 +114,8 @@ class Control(Hermit, Minitouch, Scrcpy, MaaTouch): self.swipe_scrcpy(p1, p2) elif method == 'MaaTouch': self.swipe_maatouch(p1, p2) + elif method == 'nemu_ipc': + self.swipe_nemu_ipc(p1, p2) else: self.swipe_adb(p1, p2, duration=duration) @@ -163,8 +165,10 @@ class Control(Hermit, Minitouch, Scrcpy, MaaTouch): self.drag_scrcpy(p1, p2, point_random=point_random) elif method == 'MaaTouch': self.drag_maatouch(p1, p2, point_random=point_random) + elif method == 'nemu_ipc': + self.drag_nemu_ipc(p1, p2, point_random=point_random) else: logger.warning(f'Control method {method} does not support drag well, ' f'falling back to ADB swipe may cause unexpected behaviour') self.swipe_adb(p1, p2, duration=ensure_time(swipe_duration * 2)) - self.click(Button(area=(), color=(), button=area_offset(point_random, p2), name=name ),False) + self.click(Button(area=(), color=(), button=area_offset(point_random, p2), name=name), False) diff --git a/module/device/screenshot.py b/module/device/screenshot.py index 4980b9028..cc418a573 100644 --- a/module/device/screenshot.py +++ b/module/device/screenshot.py @@ -13,13 +13,14 @@ from module.base.utils import get_color, image_size, limit_in, save_image from module.device.method.adb import Adb from module.device.method.ascreencap import AScreenCap from module.device.method.droidcast import DroidCast +from module.device.method.nemu_ipc import NemuIpc from module.device.method.scrcpy import Scrcpy from module.device.method.wsa import WSA from module.exception import RequestHumanTakeover, ScriptError from module.logger import logger -class Screenshot(Adb, WSA, DroidCast, AScreenCap, Scrcpy): +class Screenshot(Adb, WSA, DroidCast, AScreenCap, Scrcpy, NemuIpc): _screen_size_checked = False _screen_black_checked = False _minicap_uninstalled = False @@ -38,6 +39,7 @@ class Screenshot(Adb, WSA, DroidCast, AScreenCap, Scrcpy): 'DroidCast': self.screenshot_droidcast, 'DroidCast_raw': self.screenshot_droidcast_raw, 'scrcpy': self.screenshot_scrcpy, + 'nemu_ipc': self.screenshot_nemu_ipc, } def screenshot(self): From 5c2671d6664223eeee4d2fd0167bead2e98a0216 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 28 Mar 2024 21:44:16 +0800 Subject: [PATCH 24/96] Add: Add nemu_ipc to benchmark --- module/daemon/benchmark.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/module/daemon/benchmark.py b/module/daemon/benchmark.py index c0e4ec778..9b3cfe96f 100644 --- a/module/daemon/benchmark.py +++ b/module/daemon/benchmark.py @@ -69,17 +69,19 @@ class Benchmark(DaemonBase, CampaignUI): if not isinstance(cost, (float, int)): return Text(cost, style="bold bright_red") - if cost < 0.10: + if cost < 0.025: + return Text('Insane Fast', style="bold bright_green") + if cost < 0.100: return Text('Ultra Fast', style="bold bright_green") - if cost < 0.20: + if cost < 0.200: return Text('Very Fast', style="bright_green") - if cost < 0.30: + if cost < 0.300: return Text('Fast', style="green") - if cost < 0.50: + if cost < 0.500: return Text('Medium', style="yellow") - if cost < 0.75: + if cost < 0.750: return Text('Slow', style="red") - if cost < 1.00: + if cost < 1.000: return Text('Very Slow', style="bright_red") return Text('Ultra Slow', style="bold bright_red") @@ -88,11 +90,11 @@ class Benchmark(DaemonBase, CampaignUI): if not isinstance(cost, (float, int)): return Text(cost, style="bold bright_red") - if cost < 0.1: + if cost < 0.100: return Text('Fast', style="bright_green") - if cost < 0.2: + if cost < 0.200: return Text('Medium', style="yellow") - if cost < 0.4: + if cost < 0.400: return Text('Slow', style="red") return Text('Very Slow', style="bright_red") @@ -187,6 +189,8 @@ class Benchmark(DaemonBase, CampaignUI): if device == 'android_phone_vmos': screenshot = ['ADB', 'aScreenCap', 'DroidCast', 'DroidCast_raw'] click = ['ADB', 'Hermit', 'MaaTouch'] + if self.device.nemu_ipc_available(): + screenshot.append('nemu_ipc') scene = self.config.Benchmark_TestScene if 'screenshot' not in scene: @@ -223,6 +227,8 @@ class Benchmark(DaemonBase, CampaignUI): screenshot = remove('aScreenCap', 'aScreenCap_nc') if self.device.is_chinac_phone_cloud: screenshot = remove('ADB_nc', 'aScreenCap_nc') + if self.device.nemu_ipc_available(): + screenshot.append('nemu_ipc') screenshot = tuple(screenshot) self.TEST_TOTAL = 3 From 32e4571afc1bbdf34e2bafcb89aa625460031e2d Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 28 Mar 2024 23:27:26 +0800 Subject: [PATCH 25/96] Upd: LOGIN_ANNOUNCE --- assets/cn/handler/LOGIN_ANNOUNCE_2.BUTTON.png | Bin 0 -> 6243 bytes assets/cn/handler/LOGIN_ANNOUNCE_2.png | Bin 0 -> 6312 bytes assets/en/handler/LOGIN_ANNOUNCE_2.BUTTON.png | Bin 0 -> 6243 bytes assets/en/handler/LOGIN_ANNOUNCE_2.png | Bin 0 -> 6312 bytes assets/jp/handler/LOGIN_ANNOUNCE_2.BUTTON.png | Bin 0 -> 6243 bytes assets/jp/handler/LOGIN_ANNOUNCE_2.png | Bin 0 -> 6312 bytes assets/tw/handler/LOGIN_ANNOUNCE_2.BUTTON.png | Bin 0 -> 6243 bytes assets/tw/handler/LOGIN_ANNOUNCE_2.png | Bin 0 -> 6312 bytes module/handler/assets.py | 1 + module/handler/login.py | 2 ++ module/ui/ui.py | 9 +++++---- 11 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 assets/cn/handler/LOGIN_ANNOUNCE_2.BUTTON.png create mode 100644 assets/cn/handler/LOGIN_ANNOUNCE_2.png create mode 100644 assets/en/handler/LOGIN_ANNOUNCE_2.BUTTON.png create mode 100644 assets/en/handler/LOGIN_ANNOUNCE_2.png create mode 100644 assets/jp/handler/LOGIN_ANNOUNCE_2.BUTTON.png create mode 100644 assets/jp/handler/LOGIN_ANNOUNCE_2.png create mode 100644 assets/tw/handler/LOGIN_ANNOUNCE_2.BUTTON.png create mode 100644 assets/tw/handler/LOGIN_ANNOUNCE_2.png diff --git a/assets/cn/handler/LOGIN_ANNOUNCE_2.BUTTON.png b/assets/cn/handler/LOGIN_ANNOUNCE_2.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec0d2990a1d964831f1f840110464702558efbb GIT binary patch literal 6243 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 L$*n3K$H)HxwGId& literal 0 HcmV?d00001 diff --git a/assets/cn/handler/LOGIN_ANNOUNCE_2.png b/assets/cn/handler/LOGIN_ANNOUNCE_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f13407e9aadbc77c3b6e5f6fe14a51ffb1837ed9 GIT binary patch literal 6312 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 U(^Mrg@ihM*2P^~=kpKVy literal 0 HcmV?d00001 diff --git a/assets/en/handler/LOGIN_ANNOUNCE_2.BUTTON.png b/assets/en/handler/LOGIN_ANNOUNCE_2.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec0d2990a1d964831f1f840110464702558efbb GIT binary patch literal 6243 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 L$*n3K$H)HxwGId& literal 0 HcmV?d00001 diff --git a/assets/en/handler/LOGIN_ANNOUNCE_2.png b/assets/en/handler/LOGIN_ANNOUNCE_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f13407e9aadbc77c3b6e5f6fe14a51ffb1837ed9 GIT binary patch literal 6312 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 U(^Mrg@ihM*2P^~=kpKVy literal 0 HcmV?d00001 diff --git a/assets/jp/handler/LOGIN_ANNOUNCE_2.BUTTON.png b/assets/jp/handler/LOGIN_ANNOUNCE_2.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec0d2990a1d964831f1f840110464702558efbb GIT binary patch literal 6243 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 L$*n3K$H)HxwGId& literal 0 HcmV?d00001 diff --git a/assets/jp/handler/LOGIN_ANNOUNCE_2.png b/assets/jp/handler/LOGIN_ANNOUNCE_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f13407e9aadbc77c3b6e5f6fe14a51ffb1837ed9 GIT binary patch literal 6312 zcmeH~c{J4F_s2gB8Dz;eF?OMa?4^+awv2umAwSrU$=n3IL3> zBmECBJlPZ{rr(` z9^S415K7E93$aY6@M(-uTsaWhLu++e-m!qV1P0v6X;s3R1~@(D2ZF{iksQfEs% zfh(qQS7AdUDMs)w-&$hmdEw&>qMWmYHh0E$09XTsg+>Lw(cGu2MFRAI-@wH)Tpbff zj~b1oECA6|U|gJQj+G8&3Upq))5!yLo(A5Sy}Qc-yZ`|2ut;rjpo$Gx-qO=x1cuP* zBnU86B8Ub9NpwK=S=}@AT1|kXd90}nJ-!Vn!f1(KWWd+Z#aMk%)TNJUVFZGcEm0g= zjzCPdwoDfws!9*&2y=IXL=8Yi^8L7Rw1Zz97ETA?2^rm4xB8WMuo*uDLN?aMC&eb) zyz8``Am=#Un5V__vT`N3;d3B^o|6C|K<)cMQ5Y7v20}v6wy)mkt(lB$8HOr51YGRn`zLs!7v2o{B zAwd>a))h(T;uiU-M2#b*3FLTU)DF#iI2^tP+|SXI=JuT8(d?WJV#*AR`8|F zNgQ^>MIR)e>zh=rvz6gZShswJH5R|!5%$qE^}5)%j7hGAXvKAr%me215H z1|(2)DrbVT{*!_#+uS&pZS0aCntg0|DmPna35b%ME_#9&WPIVTT^_kbbU$qeF7 zaOJd^GSP*nJSO7po&II?Xl>6_JGjJ#tUu3{BwMXr)NrS$V#0nxv#!F6*taI2U-Us* zA1g%!622A%^aUz&*u`X)c=ZX?3#-R`D5>bXH6IiRJV;1(iRn{dcYFTF$@Y2t4aaAe z0#Y4(E;E)Yh!hnUA3rS``x(E0DC8X6JTDho52pmNsq3A|{Da)MM52 zf)B%G%go9&`Z+!F45XG&KHo;C!Ea+QqFJd8C=QfS+TOR%(+xbZ_NS8u%q3?`%U*El ztGH^;Fq9W6YG)T!nRKHIeu1l=!V0bRe2RjN<;>#I+{!^YlHIv{I)pOW(t#g29_}8L zdvXhbjm#sDgl}a1$m;i+XIhwBc(fIAlI;oGqYk+9S$;462>y!G4g7N12Co=@W@UHY zk^ij-&31pu@e*lnd4A`7ByZ|>t_)ZPA|oneuIi3?fVt*CSQYD?*XA6r?GX=N-86q^ zJcVZd#rJvuEo9z=zEsm=8e*Da+-u@c+UjudaMy+H?UT5hMNisnvM*DV0!&h8qSc=!{VwbtQRSb#nGl94`A();`^OuKR^o zj$312{m;Ozu1*;eW(f0bIr+*!o>zfW>!0S~{iL|^8+q;eiI);PGKray1jfwUnH0=R zga#rEv5okR(Hpc~l3DT@wD2~DTI8P0h2;`HR95F!e+ka@8RMDcNjcYlZrjY4sIa`h z%(9%bd}8Iwj?<3hj?Yf7P?sQ=(4bnNTBLtqP*WCk(QR(tL( z$?GZT=O5LEJwNydyJI}PO}$-~bFnelDr{_M{NEevSzLkKXP8%>O@A5sqW)|ufPT(9 zM=5VQ=T2szOU(?a(-lQEg+n(?&BDzPE+AHy-E4 z8Qo|tNh&d^YryJXO`FX}WbCMps6Eixz4yfEX3$q9W+T%JVX6FSA0;+#Bd!mQVtW7F z|08?lMc#|NQd2gM%=!zzhtv9VP zX6G}ItGp0ubJ`{p3vYp2|56%rJ6xnnus-CAY(c#-#=dzsgblS?9~Z~nXyTJdG=qd( zRIoE`yc_DV*8hNTkMK70za2aF%4vgYrbo7mY&3qyy2$n7v6B5_o|;rq%Ge5q{77elea)#|r+ zUK{xFWR0yFx}G!xb@0(24J;1#+)nPU@BZEmQgKpQvFZAN8Qv(qRJs$MA8kiK98|w< zX#FEa9K?-;L~OD@65>@GCBIm1et#j;z54+G0!v$evOMQyei(AO^&r9=#?1gk&8;+vL3R5mY9V#gn1x5L1 z)z_)h57VbA?p74!8)~Zm$|i+T4ED3V>`d%h+;w^jG$Dbj1`Q6BZ=0iYDRyhkep})c z=V8f)Th;0{>bg;W2NUpG8|0EJg|K3AwI*=u_L5p3`DgU5Cw?H{_ut_DM?Z3f0E07SDRRfY;cuHvPek<`{k!hD>F}nV+&K2)7{?`%j*!$UvgUrqx zUvT*1=x6*yziyZAfW%FSq?CLS5h$BL%f{WF^ofeM72LhwqYy`7O98Lv#ttU;ZuMI3 z53R9M6MJzrVdzbN@@sT0tV5zhq`4|%F7j|+j`DbOPqM#IiPmk3y1-3u13sw z4(&H-9qWMJ^=o%RiOVCJ_wrl?@#_^kPq20$7zF)wCTc{L8Qbqx&KsLB#2fmYI>)5l zBBQ`Q$jZ(I8yH9R^%pO>eWfU<(=G--7*oM~Z)~l(O~id% z#Lq~0Y*aK{%i)%?n-?l*J8NpRz( zNlY|%hgi(f-gLioqF0Eo@Rjipe`o)h!NmoopSt!}sgbjLeOHb}I(|)Vm#1jh8T2w4 z@+OpLs2Np`^@+yN@FmwSEc{vD4?UV#?(%l3Qm#6}9LKEsN0n*I|~V-@7*w zX?%XCb@QVovGQ_>D%u{Gs=04J?;n0C%>_jZtTPQ!8)d_^Z39y!Q@R4JaSK&lawqdR zY=yiX|L+e@Y<1wga^D{=H{6jKSWH47W%3R&7som&CwpR7#ApiqD8%aS+H!*fP8Z?Y zN<@ywjS3D4(`H#z5@6qCp@tcA_Lw@i9U;#oynEHJ{5|CV72PHhx4FJYE|(U*ZODu8 z9h2oL3?D^ae*8}9T@y~z^KkIw$ZGAd%}6vXcPv`^IQP&&m1rt8g_gOKf5{vFi1+g5 zEFX`k=>f>RUPoAAx@a{-+7VxRY?S1donDfUj_h U(^Mrg@ihM*2P^~=kpKVy literal 0 HcmV?d00001 diff --git a/assets/tw/handler/LOGIN_ANNOUNCE_2.BUTTON.png b/assets/tw/handler/LOGIN_ANNOUNCE_2.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec0d2990a1d964831f1f840110464702558efbb GIT binary patch literal 6243 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 L$*n3K$H)HxwGId& literal 0 HcmV?d00001 diff --git a/assets/tw/handler/LOGIN_ANNOUNCE_2.png b/assets/tw/handler/LOGIN_ANNOUNCE_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f13407e9aadbc77c3b6e5f6fe14a51ffb1837ed9 GIT binary patch literal 6312 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 U(^Mrg@ihM*2P^~=kpKVy literal 0 HcmV?d00001 diff --git a/module/handler/assets.py b/module/handler/assets.py index 45f9cde9d..33f0c0a58 100644 --- a/module/handler/assets.py +++ b/module/handler/assets.py @@ -46,6 +46,7 @@ INFO_BAR_DETECT = Button(area={'cn': (194, 299, 1086, 348), 'en': (194, 299, 108 IN_MAP = Button(area={'cn': (749, 654, 921, 707), 'en': (757, 654, 917, 699), 'jp': (748, 653, 919, 705), 'tw': (749, 654, 921, 707)}, color={'cn': (213, 124, 124), 'en': (215, 132, 132), 'jp': (212, 124, 124), 'tw': (213, 124, 124)}, button={'cn': (749, 654, 921, 707), 'en': (757, 654, 917, 699), 'jp': (748, 653, 919, 705), 'tw': (749, 654, 921, 707)}, file={'cn': './assets/cn/handler/IN_MAP.png', 'en': './assets/en/handler/IN_MAP.png', 'jp': './assets/jp/handler/IN_MAP.png', 'tw': './assets/tw/handler/IN_MAP.png'}) IN_STAGE = Button(area={'cn': (122, 16, 172, 39), 'en': (120, 18, 208, 40), 'jp': (121, 15, 174, 40), 'tw': (122, 16, 172, 39)}, color={'cn': (149, 167, 207), 'en': (104, 118, 157), 'jp': (151, 167, 205), 'tw': (149, 167, 207)}, button={'cn': (122, 16, 172, 39), 'en': (120, 18, 208, 40), 'jp': (121, 15, 174, 40), 'tw': (122, 16, 172, 39)}, file={'cn': './assets/cn/handler/IN_STAGE.png', 'en': './assets/en/handler/IN_STAGE.png', 'jp': './assets/jp/handler/IN_STAGE.png', 'tw': './assets/tw/handler/IN_STAGE.png'}) LOGIN_ANNOUNCE = Button(area={'cn': (1160, 45, 1227, 90), 'en': (1159, 44, 1228, 91), 'jp': (1160, 46, 1224, 86), 'tw': (1160, 45, 1227, 90)}, color={'cn': (174, 61, 56), 'en': (193, 79, 73), 'jp': (191, 79, 74), 'tw': (174, 61, 56)}, button={'cn': (1160, 61, 1190, 90), 'en': (1160, 61, 1190, 90), 'jp': (1160, 61, 1190, 90), 'tw': (1160, 61, 1190, 90)}, file={'cn': './assets/cn/handler/LOGIN_ANNOUNCE.png', 'en': './assets/en/handler/LOGIN_ANNOUNCE.png', 'jp': './assets/jp/handler/LOGIN_ANNOUNCE.png', 'tw': './assets/tw/handler/LOGIN_ANNOUNCE.png'}) +LOGIN_ANNOUNCE_2 = Button(area={'cn': (1193, 83, 1215, 105), 'en': (1193, 83, 1215, 105), 'jp': (1193, 83, 1215, 105), 'tw': (1193, 83, 1215, 105)}, color={'cn': (158, 170, 175), 'en': (158, 170, 175), 'jp': (158, 170, 175), 'tw': (158, 170, 175)}, button={'cn': (1171, 83, 1193, 105), 'en': (1171, 83, 1193, 105), 'jp': (1171, 83, 1193, 105), 'tw': (1171, 83, 1193, 105)}, file={'cn': './assets/cn/handler/LOGIN_ANNOUNCE_2.png', 'en': './assets/en/handler/LOGIN_ANNOUNCE_2.png', 'jp': './assets/jp/handler/LOGIN_ANNOUNCE_2.png', 'tw': './assets/tw/handler/LOGIN_ANNOUNCE_2.png'}) LOGIN_CHECK = Button(area={'cn': (1214, 653, 1268, 709), 'en': (1214, 653, 1268, 709), 'jp': (1214, 653, 1268, 709), 'tw': (1214, 653, 1268, 709)}, color={'cn': (203, 215, 230), 'en': (203, 215, 230), 'jp': (203, 215, 230), 'tw': (203, 215, 230)}, button={'cn': (416, 294, 534, 400), 'en': (1078, 591, 1168, 635), 'jp': (416, 294, 534, 400), 'tw': (416, 294, 534, 400)}, file={'cn': './assets/cn/handler/LOGIN_CHECK.png', 'en': './assets/en/handler/LOGIN_CHECK.png', 'jp': './assets/jp/handler/LOGIN_CHECK.png', 'tw': './assets/tw/handler/LOGIN_CHECK.png'}) LOGIN_GAME_UPDATE = Button(area={'cn': (700, 471, 873, 529), 'en': (726, 474, 850, 519), 'jp': (704, 475, 867, 525), 'tw': (706, 477, 866, 528)}, color={'cn': (238, 170, 78), 'en': (241, 169, 73), 'jp': (234, 167, 77), 'tw': (235, 169, 80)}, button={'cn': (700, 471, 873, 529), 'en': (726, 474, 850, 519), 'jp': (704, 475, 867, 525), 'tw': (706, 477, 866, 528)}, file={'cn': './assets/cn/handler/LOGIN_GAME_UPDATE.png', 'en': './assets/en/handler/LOGIN_GAME_UPDATE.png', 'jp': './assets/jp/handler/LOGIN_GAME_UPDATE.png', 'tw': './assets/tw/handler/LOGIN_GAME_UPDATE.png'}) LOGIN_RETURN_INFO = Button(area={'cn': (960, 123, 1158, 333), 'en': (960, 123, 1158, 333), 'jp': (960, 123, 1158, 333), 'tw': (960, 123, 1158, 333)}, color={'cn': (170, 185, 166), 'en': (170, 185, 166), 'jp': (170, 185, 166), 'tw': (170, 185, 166)}, button={'cn': (960, 123, 1158, 333), 'en': (960, 123, 1158, 333), 'jp': (960, 123, 1158, 333), 'tw': (960, 123, 1158, 333)}, file={'cn': './assets/cn/handler/LOGIN_RETURN_INFO.png', 'en': './assets/en/handler/LOGIN_RETURN_INFO.png', 'jp': './assets/jp/handler/LOGIN_RETURN_INFO.png', 'tw': './assets/tw/handler/LOGIN_RETURN_INFO.png'}) diff --git a/module/handler/login.py b/module/handler/login.py index 937ad805f..5b7664324 100644 --- a/module/handler/login.py +++ b/module/handler/login.py @@ -58,6 +58,8 @@ class LoginHandler(UI): login_success = True if self.appear_then_click(LOGIN_ANNOUNCE, offset=(30, 30), interval=5): continue + if self.appear_then_click(LOGIN_ANNOUNCE_2, offset=(30, 30), interval=5): + continue if self.appear(EVENT_LIST_CHECK, offset=(30, 30), interval=5): self.device.click(BACK_ARROW) continue diff --git a/module/ui/ui.py b/module/ui/ui.py index dc66e1918..2babd19fc 100644 --- a/module/ui/ui.py +++ b/module/ui/ui.py @@ -7,10 +7,9 @@ from module.exception import (GameNotRunningError, GamePageUnknownError, RequestHumanTakeover) from module.exercise.assets import EXERCISE_PREPARATION from module.freebies.assets import PURCHASE_POPUP -from module.handler.assets import (AUTO_SEARCH_MENU_EXIT, BATTLE_PASS_NOTICE, - GAME_TIPS, LOGIN_ANNOUNCE, - LOGIN_CHECK, LOGIN_RETURN_SIGN, - MAINTENANCE_ANNOUNCE, MONTHLY_PASS_NOTICE) +from module.handler.assets import (AUTO_SEARCH_MENU_EXIT, BATTLE_PASS_NOTICE, GAME_TIPS, LOGIN_ANNOUNCE, + LOGIN_ANNOUNCE_2, LOGIN_CHECK, LOGIN_RETURN_SIGN, MAINTENANCE_ANNOUNCE, + MONTHLY_PASS_NOTICE) from module.handler.info_handler import InfoHandler from module.logger import logger from module.map.assets import (FLEET_PREPARATION, MAP_PREPARATION, @@ -331,6 +330,8 @@ class UI(InfoHandler): # Daily reset if self.appear_then_click(LOGIN_ANNOUNCE, offset=(30, 30), interval=3): return True + if self.appear_then_click(LOGIN_ANNOUNCE_2, offset=(30, 30), interval=3): + return True if self.appear_then_click(GET_ITEMS_1, offset=True, interval=3): return True if self.appear_then_click(GET_ITEMS_2, offset=True, interval=3): From 164fcc96c569d6d76dae103948e510d1080fc42d Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 28 Mar 2024 23:47:32 +0800 Subject: [PATCH 26/96] Add: Event entrance of From Zero to Hero (raid_20240328) --- campaign/Readme.md | 1 + module/config/argument/args.json | 54 +++++++++++++++++--------------- module/config/i18n/en-US.json | 1 + module/config/i18n/ja-JP.json | 1 + module/config/i18n/zh-CN.json | 1 + module/config/i18n/zh-TW.json | 1 + 6 files changed, 33 insertions(+), 26 deletions(-) diff --git a/campaign/Readme.md b/campaign/Readme.md index 3962cc507..fd3a4751a 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -188,3 +188,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20240314 | event 20210422 cn | Daedalian Hymn | - | - | - | 復刻復興的讚美詩 | | 20240314 | event 20220324 cn | Virtual Tower Rerun | 复刻虚像构筑之塔 | Virtual Tower Rerun | 幻像の塔(復刻) | - | | 20240321 | raid 20230629 | Reflections of the Oasis | - | - | - | 綠洲往事 | +| 20240328 | raid 20240328 | From Zero to Hero | 从零开始的魔王讨伐之旅 | From Zero to Hero | ゼロから頑張る魔王討伐 | - | diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 8c3a8cc7f..5933dbea0 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1681,8 +1681,8 @@ ], "display": "hide", "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -2014,8 +2014,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -2462,8 +2462,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -2869,15 +2869,16 @@ "raid_20221027", "raid_20230118", "raid_20230629", - "raid_20240130" + "raid_20240130", + "raid_20240328" ], "option_bold": [ "raid_20230629", - "raid_20240130" + "raid_20240328" ], - "cn": "raid_20240130", - "en": "raid_20240130", - "jp": "raid_20240130", + "cn": "raid_20240328", + "en": "raid_20240328", + "jp": "raid_20240328", "tw": "raid_20230629" }, "Mode": { @@ -3855,8 +3856,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -4320,8 +4321,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -4785,8 +4786,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -5250,8 +5251,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -5705,8 +5706,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20220324_cn", - "event_20210422_cn" + "event_20210422_cn", + "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -6109,15 +6110,16 @@ "raid_20221027", "raid_20230118", "raid_20230629", - "raid_20240130" + "raid_20240130", + "raid_20240328" ], "option_bold": [ "raid_20230629", - "raid_20240130" + "raid_20240328" ], - "cn": "raid_20240130", - "en": "raid_20240130", - "jp": "raid_20240130", + "cn": "raid_20240328", + "en": "raid_20240328", + "jp": "raid_20240328", "tw": "raid_20230629" }, "Mode": { diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 9f613688a..238d45f4b 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -720,6 +720,7 @@ "raid_20230118": "Winter Pathfinder", "raid_20230629": "Reflections of the Oasis", "raid_20240130": "Spring Festive Fiasco", + "raid_20240328": "From Zero to Hero", "war_archives_20180607_cn": "archives Ink Stained Steel Sakura", "war_archives_20180726_cn": "archives Iris of Light and Dark", "war_archives_20181020_en": "archives Strive Wish and Strategize", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index b072c2660..976e317bf 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -720,6 +720,7 @@ "raid_20230118": "冬の案内人", "raid_20230629": "緑地伽話", "raid_20240130": "新春宴会狂騒曲", + "raid_20240328": "ゼロから頑張る魔王討伐", "war_archives_20180607_cn": "檔案 墨染まりし鋼の桜", "war_archives_20180726_cn": "檔案 光と影のアイリス", "war_archives_20181020_en": "檔案 努力希望と計画", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 015759e41..4fe8f2e67 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -720,6 +720,7 @@ "raid_20230118": "冬日的寻路人", "raid_20230629": "绿洲往事", "raid_20240130": "寰昌宇定家事忙", + "raid_20240328": "从零开始的魔王讨伐之旅", "war_archives_20180607_cn": "档案 墨染的钢铁之花", "war_archives_20180726_cn": "档案 光与影的鸢尾之华", "war_archives_20181020_en": "档案 努力希望和计划", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 72dab8a80..b8bdb0687 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -720,6 +720,7 @@ "raid_20230118": "冬日的尋路人", "raid_20230629": "綠洲往事", "raid_20240130": "Spring Festive Fiasco", + "raid_20240328": "From Zero to Hero", "war_archives_20180607_cn": "檔案 墨染的鋼鐵之花", "war_archives_20180726_cn": "檔案 光與影的鳶尾之華", "war_archives_20181020_en": "檔案 努力希望和計劃", From e8909f4d59d01bec0f63ac40394d79688b71a4a5 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 29 Mar 2024 02:17:47 +0800 Subject: [PATCH 27/96] Add: UI switches in RPG raid --- assets/cn/raid/RPG_GOTO_STAGE.png | Bin 0 -> 6963 bytes assets/cn/raid/RPG_GOTO_STORY.png | Bin 0 -> 6894 bytes assets/cn/raid/RPG_HOME.png | Bin 0 -> 6254 bytes assets/cn/raid/RPG_LEAVE_CITY.png | Bin 0 -> 6165 bytes assets/cn/raid/RPG_RAID_EASY.png | Bin 0 -> 7271 bytes assets/cn/raid/RPG_RAID_EX.png | Bin 0 -> 7576 bytes assets/cn/raid/RPG_RAID_HARD.png | Bin 0 -> 7211 bytes assets/cn/raid/RPG_RAID_NORMAL.png | Bin 0 -> 7133 bytes assets/cn/raid/RPG_STATUS_POPUP.png | Bin 0 -> 6671 bytes assets/en/raid/RPG_GOTO_STAGE.png | Bin 0 -> 6963 bytes assets/en/raid/RPG_GOTO_STORY.png | Bin 0 -> 6894 bytes assets/en/raid/RPG_HOME.png | Bin 0 -> 6254 bytes assets/en/raid/RPG_LEAVE_CITY.png | Bin 0 -> 6165 bytes assets/en/raid/RPG_RAID_EASY.png | Bin 0 -> 7271 bytes assets/en/raid/RPG_RAID_EX.png | Bin 0 -> 7576 bytes assets/en/raid/RPG_RAID_HARD.png | Bin 0 -> 7211 bytes assets/en/raid/RPG_RAID_NORMAL.png | Bin 0 -> 7133 bytes assets/en/raid/RPG_STATUS_POPUP.png | Bin 0 -> 6671 bytes assets/jp/raid/RPG_GOTO_STAGE.png | Bin 0 -> 6963 bytes assets/jp/raid/RPG_GOTO_STORY.png | Bin 0 -> 6894 bytes assets/jp/raid/RPG_HOME.png | Bin 0 -> 6254 bytes assets/jp/raid/RPG_LEAVE_CITY.png | Bin 0 -> 6165 bytes assets/jp/raid/RPG_RAID_EASY.png | Bin 0 -> 7271 bytes assets/jp/raid/RPG_RAID_EX.png | Bin 0 -> 7576 bytes assets/jp/raid/RPG_RAID_HARD.png | Bin 0 -> 7211 bytes assets/jp/raid/RPG_RAID_NORMAL.png | Bin 0 -> 7133 bytes assets/jp/raid/RPG_STATUS_POPUP.png | Bin 0 -> 6671 bytes assets/tw/raid/RPG_GOTO_STAGE.png | Bin 0 -> 6963 bytes assets/tw/raid/RPG_GOTO_STORY.png | Bin 0 -> 6894 bytes assets/tw/raid/RPG_HOME.png | Bin 0 -> 6254 bytes assets/tw/raid/RPG_LEAVE_CITY.png | Bin 0 -> 6165 bytes assets/tw/raid/RPG_RAID_EASY.png | Bin 0 -> 7271 bytes assets/tw/raid/RPG_RAID_EX.png | Bin 0 -> 7576 bytes assets/tw/raid/RPG_RAID_HARD.png | Bin 0 -> 7211 bytes assets/tw/raid/RPG_RAID_NORMAL.png | Bin 0 -> 7133 bytes assets/tw/raid/RPG_STATUS_POPUP.png | Bin 0 -> 6671 bytes module/raid/assets.py | 9 +++++++++ module/ui/page.py | 15 +++++++++++++++ module/ui/ui.py | 17 ++++++++++++++--- 39 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 assets/cn/raid/RPG_GOTO_STAGE.png create mode 100644 assets/cn/raid/RPG_GOTO_STORY.png create mode 100644 assets/cn/raid/RPG_HOME.png create mode 100644 assets/cn/raid/RPG_LEAVE_CITY.png create mode 100644 assets/cn/raid/RPG_RAID_EASY.png create mode 100644 assets/cn/raid/RPG_RAID_EX.png create mode 100644 assets/cn/raid/RPG_RAID_HARD.png create mode 100644 assets/cn/raid/RPG_RAID_NORMAL.png create mode 100644 assets/cn/raid/RPG_STATUS_POPUP.png create mode 100644 assets/en/raid/RPG_GOTO_STAGE.png create mode 100644 assets/en/raid/RPG_GOTO_STORY.png create mode 100644 assets/en/raid/RPG_HOME.png create mode 100644 assets/en/raid/RPG_LEAVE_CITY.png create mode 100644 assets/en/raid/RPG_RAID_EASY.png create mode 100644 assets/en/raid/RPG_RAID_EX.png create mode 100644 assets/en/raid/RPG_RAID_HARD.png create mode 100644 assets/en/raid/RPG_RAID_NORMAL.png create mode 100644 assets/en/raid/RPG_STATUS_POPUP.png create mode 100644 assets/jp/raid/RPG_GOTO_STAGE.png create mode 100644 assets/jp/raid/RPG_GOTO_STORY.png create mode 100644 assets/jp/raid/RPG_HOME.png create mode 100644 assets/jp/raid/RPG_LEAVE_CITY.png create mode 100644 assets/jp/raid/RPG_RAID_EASY.png create mode 100644 assets/jp/raid/RPG_RAID_EX.png create mode 100644 assets/jp/raid/RPG_RAID_HARD.png create mode 100644 assets/jp/raid/RPG_RAID_NORMAL.png create mode 100644 assets/jp/raid/RPG_STATUS_POPUP.png create mode 100644 assets/tw/raid/RPG_GOTO_STAGE.png create mode 100644 assets/tw/raid/RPG_GOTO_STORY.png create mode 100644 assets/tw/raid/RPG_HOME.png create mode 100644 assets/tw/raid/RPG_LEAVE_CITY.png create mode 100644 assets/tw/raid/RPG_RAID_EASY.png create mode 100644 assets/tw/raid/RPG_RAID_EX.png create mode 100644 assets/tw/raid/RPG_RAID_HARD.png create mode 100644 assets/tw/raid/RPG_RAID_NORMAL.png create mode 100644 assets/tw/raid/RPG_STATUS_POPUP.png diff --git a/assets/cn/raid/RPG_GOTO_STAGE.png b/assets/cn/raid/RPG_GOTO_STAGE.png new file mode 100644 index 0000000000000000000000000000000000000000..44219b003fed39917ee3399a6b56e05f6260fcef GIT binary patch literal 6963 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 literal 0 HcmV?d00001 diff --git a/assets/cn/raid/RPG_GOTO_STORY.png b/assets/cn/raid/RPG_GOTO_STORY.png new file mode 100644 index 0000000000000000000000000000000000000000..d7dd1a9b03e6649ae44f958dc2163c81164bebfb GIT binary patch literal 6894 zcmeI0_fwNi*T*lK^bUq1fNhbe?H2Gw?A00Koi6QxyULG~`dp zUv!jYqb&HCf^6vBG>tp}fRXc`Ndcs!@c;nB(^n54>gd?Jdb)bpySfQIdiYSt&E3`Z zm6Hts_>QJO_c4s$Kd(5oZ^H^z8Qv&Oc6tMVg;8|vY)08^p8$(@Y#hohVQ>a07dLyF zrhfC=0S3)<_-xiSwB3UU_=`w=xW#M- z;2tFGzTB{2jJ9TTM|}t-x8^jp5ZfZ|ryWfT0Blgfe1kl{D;-mOa|I{?w*m3X9Bnga zp%|Sj27pi;Fb(EdVx)+L0PW&>?OZ@R5AgkYxitfj002&~02MG$$P5s79x2iQ!v*o< zAYeHALIE8RMFAkLXC}prXbz=!dh*6c424zS+4d5MZ7|W_` z4ul|7M7sc?yOhAgi=5q5LRwT=l6~0e0yDQTv?c}6h)e8Fe$pq+g--m%=d-mjJ$q^P zr&Fnl1?W1PE&V(=Ejd+~Q*((*tA_~y_zv(tPVXwkE-lW_EZQzPk#<_LPaQX0!HSnQ zr%vlWQc?qK&w5FtW(y00RBmk)-@UMo1uub7C}2NzU?M$6pY?*_m)}7o?C!Dh#f&dH z?e_&PFfcN%iCBKAmz;}KJd>VrosJCJBmX@e^VOCZrpIBJz! zF8fQur)^=uC(+mOvofW|qTCUih9A&6;HPb{8c3Y#rH;f|j+J1kO~IrS`gk8^0QFwG z@mUpZCC;faXq|#GlEtvk8&D3~7W>G@7zeP~$wt5++7E%cMi8aNIaOt*%Z>NhRL;$ZTwwUZlk|XBuTgH8 zy7D^}Ulx1H3|qyITX&h4ra6q?5ZplL%y}|?^3=Vjr+&~*$7yj%4$f{FJq+%l10kZR z!4{e_pF(nkR^VK^;Ffmx9LfR}hd2{W;Vm(Du6t3&%7?LI?Ltx!#}RcJw-Vlz=~Dfs z^ir;kE(N-b&TP(I8M=Xp#hO3!> zFyy<^cHU~iP!<{^Yb9WK$D5nKF~fpHcbPIWgp){T`i||V)7#is4MQ!%hxsBz;R+56 zodJF5yIVi6g5&eGD@6P_4w`)})lpa0FI~KpA!2%!h0`ov^D;}vr}<|LmqcQv z9x*<0)Ev_k%Xyxo*vIxNP3sCF*12PHo~|qeC6pXj9m^W4{pqNqX}+3Et_41;MW1~c zl9RykSk^{qfjT!+N(GTssM}qT@tdv?E|>Y@k#m-}j>Plu0!|sP6p`-K^AB-3V#tAC zDX;8a?b}PNcw*=$LNBT%|4Qz2T&7)FS_$3pVPbyI9NMO7d5zbR*Pl0!rjzqacXkt*}QlXx{hrZGPtdLQ!NT0RH6dL$d zUB6ssu7Ljc`J#aW0sY#7+a)~^A4rT&udW%g!R+Mip%ru4`!Mya_nJsOtLj$Xs7vQt zrEE40RR-OmR0L7S&rdC1mK_kaylIa3y(Rp$oRnarw<5q+=yyAJSym?S8oSOr$X(DXX^?~$ydxDFDVjjmX$WyjC2 z(D;paGx_W|drVxjJre&2c@=$SJ=|_i))%B`i*mhSiISPL8F##IVfjjGET=iAWxnBh zcY_?g)QufSh2^THwLFfz9od#NniPPeNqU;J zkNON%gu_^LL1Tg_!FkZYNr&Gcl_^y&6<3vCoLb!Mo$5TrHOm!qz3=+&bC=Ou z#A6}@F@<<;?cScnp2(i_Uavsc1rC8hc~AKOcTcY_Zzs1pLe7j#Q$ce<(~5x|zugy) z^le$t*C(+!j%4p-&~xX!h&-1}KV0Gh-#VtRvVRwuTAMmvJmUO&qD!GAu;}Qicq)H~ zNs|KU!Oq6M;q2?Kx%9l$yr0{#OA@Burbebm^%u3v)2?I;N;)W6|- zQ%>bbB}k2+&ZU*5iK3}JC&8r1t-?glY$WI&@7f63;y(>LVm98o}__T%-94+{Y7Xdm5AYDtB)?l!Ft*$%>eY4nY^9-}r|AQQJ)B@Z`KqzxH9idAM2O!<+}@ zl2eLw+I)&$lBZS4!gzKKXmOg-{_C9SI)og*=z10-Rg# zQp2>>8nUCZbxW(!kMDn4Oot}!-JOsRe0XU8UR&L(RhnKKauXKE`>95F`zcg)a1zx! z@_IzYHiz_H{+S-VT;b4{PE$P`}4vF9@}HwPGMSjWCf%| zhvmGMME*_Rmpm_h(VF#|FMdl;*`BT*2s6GtA5b6rT?hTWd>HL(v^fpNs@0wsj(iUC z5x->u!C3pg+UN_!+2hKRPIP7sA^KYmu<@;ENN8Vf?!%jJ4P+7v5;|}$B|9%_thg-_ zt@TL`$pbH;!8bsOW+*pQe#xKj>gdH;gJ)&~0lP5g(b37r)tzeuO+pUA1+{O4{r0%t z;laSK_Z!T`{F_k={ASLNCq2LTIqXJvS9EuFQ^{J$uD$H4LXB;GxsBZOOAj`|K~IW{ zsvAbGj1FQaeEhdrLIt?xCrJs!y2_ir29EV=fx9k!>u)Dw_$>J`*u|g;w1$s%OGb=; zu0QRb8j0ZG>FPB84T~+KcZS@Kx~M7VwvZa)I-0tc;#2AN;s(pl2Ma&0PJIpVpVL|X z($h5F)IEg=uHL01Xu@vx$zi=vVo2vKg)jA_<&Vg80aF2uhU&8*(yciwuQu5jgN&^7 zYYLkO^Kawl@~rbR(w`|Q{6>t!_O*@?jwZS$^>zsr-j`yJbpOED%Jb#6Q0 zeakVC>LBZ1!<$2KP%mcb*dD@udFXLx;uzkD)(9;wG7}dQvNq zzuM)>#09hnX7`Wx-WteuPYtX{k-4^YkC{M)Te#BUTa% zeR#%c!dZX#OrJ)V#(=Q8a8yjXpdddpU;UPKPy9??SsrI^XAtxZM(`+FnmU<1deUon zJiNhp5ZQ|@ffa1KlZpzy$+Zc$3D)(%6gIye7x#<>lF%f~R9n3u;@YwDsm?b3(5fx( zm-fEmQo!l4#QwYOBayyLX>zwIWTgpt3IKj001y%i00(Dey8-}Sk^r!34ghkW0RZIs z$*e^k0ND5+sXoy29VJdE!7mI6&~9WVu-An#BWUPd9#D#*jVwa7KQPimmX*U6z*(_U zYHpy~h^R;*V`}{m)}fr-*NtyPy{4p>1D(rdOQV$XImcW4<30QEcUq3F5D@9x=i}?p zPf=ER4Y)u>rY5O!(q__>jM-#eH9Pr~f5%?}e+m30@Rz_}0)GkoUjoOO_bN#0$0XVz zpGoY!46UJz6m@R)QaRFOrWmQGb;4F;bp zk_=de%l;d^9QR=C39-6GH+?|J(cw-JF=C0-52o54_86>;&*60QO)6!X;bpvK2 z;}P(Qu{#oH>kiu;_m7O#Kfu58eH0$O@dO1uTXf(+t9HOw;x>D(mM_lPZvD324=wih zsVaNCKnnnO@9s@8xea--m+s9)DIM>&Mx_@sDq;WZa!rXzfs@#$K2HiTJyCT!-PS zqQ*$|^+zjCUYji*b_5F(!ORL1P@wf$H}s$dd6MbTAP@69>DmSj25)9>QT?L?1;_6Mp)s@tc7qlfAj($#G^ zMaiKld|iuTGE-3Bk|9#%fy0AMa#E>ZuQ%aGefug$_7H)JBlCrUlEGXVPd>m$ipLmO z$(=Pog6XSrzxLD{%o`D_g>mYO9*IU0Q;IkH^A<;J1dEu)cSl6s?^tf+z&>;jeN$D4 zaL76)$D-U&l)QJZARKwnG=XaB28)0f%_`XAism*~r{FyIP5J8%7Aw4@HFhc z%li6%Zb~Qt!DI+#!dB)60tX+T90{5^R#&ygcEL-|lAyT}6IH2cHTnOY>vi45%(VHY z5~i!{p;a+y-JKsW)~^ITOO3^`qx1wv3bcesXT5-QXSv|h|QOu7;Z=P2Fo@%pE}$S+2j%?=I@58@3>@H5U#vtBfJPGjHhI#?@?GOOnj z8Eaq0)<^aw+spsAyoBh!H}lK~yP`Oi9{4>TfkYygk!hckq}p4`2$+eZ?wxUUb#W|` z^DKn?ppetxB~NmFwu-5#)gN-)G>SLt!r2%9_7WZ4JVcbl5X)=IVSC9E>SjJu6WRim z{}s#7*0!zpk+=BhNO9^!w)6U(+z32g*LF~&Ete^Ycbj$_vbyQfe}?bPG6*E!_V4&h l;Qt{3mI|_70Gyps0ojV?w#`@P|B)1cM{3VhOH|C?{tu8fZBzgN literal 0 HcmV?d00001 diff --git a/assets/cn/raid/RPG_HOME.png b/assets/cn/raid/RPG_HOME.png new file mode 100644 index 0000000000000000000000000000000000000000..8d84d8d243cd8f9dceff902ccdb149ce07222ed3 GIT binary patch literal 6254 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 literal 0 HcmV?d00001 diff --git a/assets/cn/raid/RPG_RAID_EASY.png b/assets/cn/raid/RPG_RAID_EASY.png new file mode 100644 index 0000000000000000000000000000000000000000..216fcc9eec0fffb613d722e130a4a4460ce7f907 GIT binary patch literal 7271 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 Inodvt2e3a^=Kufz literal 0 HcmV?d00001 diff --git a/assets/cn/raid/RPG_RAID_EX.png b/assets/cn/raid/RPG_RAID_EX.png new file mode 100644 index 0000000000000000000000000000000000000000..b16b3f0f0026453cccaf49635dc740c7a437ce3a GIT binary patch literal 7576 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 literal 0 HcmV?d00001 diff --git a/assets/cn/raid/RPG_RAID_NORMAL.png b/assets/cn/raid/RPG_RAID_NORMAL.png new file mode 100644 index 0000000000000000000000000000000000000000..8b69b36bb7c93d3d624b8bb4f8f266ffbcb8d005 GIT binary patch literal 7133 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 literal 0 HcmV?d00001 diff --git a/assets/cn/raid/RPG_STATUS_POPUP.png b/assets/cn/raid/RPG_STATUS_POPUP.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd75492d4a9ef32b41c90fc572dacb3faf5b424 GIT binary patch literal 6671 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 literal 0 HcmV?d00001 diff --git a/assets/en/raid/RPG_GOTO_STAGE.png b/assets/en/raid/RPG_GOTO_STAGE.png new file mode 100644 index 0000000000000000000000000000000000000000..44219b003fed39917ee3399a6b56e05f6260fcef GIT binary patch literal 6963 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 literal 0 HcmV?d00001 diff --git a/assets/en/raid/RPG_GOTO_STORY.png b/assets/en/raid/RPG_GOTO_STORY.png new file mode 100644 index 0000000000000000000000000000000000000000..d7dd1a9b03e6649ae44f958dc2163c81164bebfb GIT binary patch literal 6894 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 literal 0 HcmV?d00001 diff --git a/assets/en/raid/RPG_HOME.png b/assets/en/raid/RPG_HOME.png new file mode 100644 index 0000000000000000000000000000000000000000..8d84d8d243cd8f9dceff902ccdb149ce07222ed3 GIT binary patch literal 6254 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 literal 0 HcmV?d00001 diff --git a/assets/en/raid/RPG_RAID_EASY.png b/assets/en/raid/RPG_RAID_EASY.png new file mode 100644 index 0000000000000000000000000000000000000000..216fcc9eec0fffb613d722e130a4a4460ce7f907 GIT binary patch literal 7271 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 Inodvt2e3a^=Kufz literal 0 HcmV?d00001 diff --git a/assets/en/raid/RPG_RAID_EX.png b/assets/en/raid/RPG_RAID_EX.png new file mode 100644 index 0000000000000000000000000000000000000000..b16b3f0f0026453cccaf49635dc740c7a437ce3a GIT binary patch literal 7576 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 literal 0 HcmV?d00001 diff --git a/assets/en/raid/RPG_RAID_NORMAL.png b/assets/en/raid/RPG_RAID_NORMAL.png new file mode 100644 index 0000000000000000000000000000000000000000..8b69b36bb7c93d3d624b8bb4f8f266ffbcb8d005 GIT binary patch literal 7133 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 literal 0 HcmV?d00001 diff --git a/assets/en/raid/RPG_STATUS_POPUP.png b/assets/en/raid/RPG_STATUS_POPUP.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd75492d4a9ef32b41c90fc572dacb3faf5b424 GIT binary patch literal 6671 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 literal 0 HcmV?d00001 diff --git a/assets/jp/raid/RPG_GOTO_STAGE.png b/assets/jp/raid/RPG_GOTO_STAGE.png new file mode 100644 index 0000000000000000000000000000000000000000..44219b003fed39917ee3399a6b56e05f6260fcef GIT binary patch literal 6963 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 literal 0 HcmV?d00001 diff --git a/assets/jp/raid/RPG_GOTO_STORY.png b/assets/jp/raid/RPG_GOTO_STORY.png new file mode 100644 index 0000000000000000000000000000000000000000..d7dd1a9b03e6649ae44f958dc2163c81164bebfb GIT binary patch literal 6894 zcmeI0_fwNi*T*lK^bUq1fNhbe?H2Gw?A00Koi6QxyULG~`dp zUv!jYqb&HCf^6vBG>tp}fRXc`Ndcs!@c;nB(^n54>gd?Jdb)bpySfQIdiYSt&E3`Z zm6Hts_>QJO_c4s$Kd(5oZ^H^z8Qv&Oc6tMVg;8|vY)08^p8$(@Y#hohVQ>a07dLyF zrhfC=0S3)<_-xiSwB3UU_=`w=xW#M- z;2tFGzTB{2jJ9TTM|}t-x8^jp5ZfZ|ryWfT0Blgfe1kl{D;-mOa|I{?w*m3X9Bnga zp%|Sj27pi;Fb(EdVx)+L0PW&>?OZ@R5AgkYxitfj002&~02MG$$P5s79x2iQ!v*o< zAYeHALIE8RMFAkLXC}prXbz=!dh*6c424zS+4d5MZ7|W_` z4ul|7M7sc?yOhAgi=5q5LRwT=l6~0e0yDQTv?c}6h)e8Fe$pq+g--m%=d-mjJ$q^P zr&Fnl1?W1PE&V(=Ejd+~Q*((*tA_~y_zv(tPVXwkE-lW_EZQzPk#<_LPaQX0!HSnQ zr%vlWQc?qK&w5FtW(y00RBmk)-@UMo1uub7C}2NzU?M$6pY?*_m)}7o?C!Dh#f&dH z?e_&PFfcN%iCBKAmz;}KJd>VrosJCJBmX@e^VOCZrpIBJz! zF8fQur)^=uC(+mOvofW|qTCUih9A&6;HPb{8c3Y#rH;f|j+J1kO~IrS`gk8^0QFwG z@mUpZCC;faXq|#GlEtvk8&D3~7W>G@7zeP~$wt5++7E%cMi8aNIaOt*%Z>NhRL;$ZTwwUZlk|XBuTgH8 zy7D^}Ulx1H3|qyITX&h4ra6q?5ZplL%y}|?^3=Vjr+&~*$7yj%4$f{FJq+%l10kZR z!4{e_pF(nkR^VK^;Ffmx9LfR}hd2{W;Vm(Du6t3&%7?LI?Ltx!#}RcJw-Vlz=~Dfs z^ir;kE(N-b&TP(I8M=Xp#hO3!> zFyy<^cHU~iP!<{^Yb9WK$D5nKF~fpHcbPIWgp){T`i||V)7#is4MQ!%hxsBz;R+56 zodJF5yIVi6g5&eGD@6P_4w`)})lpa0FI~KpA!2%!h0`ov^D;}vr}<|LmqcQv z9x*<0)Ev_k%Xyxo*vIxNP3sCF*12PHo~|qeC6pXj9m^W4{pqNqX}+3Et_41;MW1~c zl9RykSk^{qfjT!+N(GTssM}qT@tdv?E|>Y@k#m-}j>Plu0!|sP6p`-K^AB-3V#tAC zDX;8a?b}PNcw*=$LNBT%|4Qz2T&7)FS_$3pVPbyI9NMO7d5zbR*Pl0!rjzqacXkt*}QlXx{hrZGPtdLQ!NT0RH6dL$d zUB6ssu7Ljc`J#aW0sY#7+a)~^A4rT&udW%g!R+Mip%ru4`!Mya_nJsOtLj$Xs7vQt zrEE40RR-OmR0L7S&rdC1mK_kaylIa3y(Rp$oRnarw<5q+=yyAJSym?S8oSOr$X(DXX^?~$ydxDFDVjjmX$WyjC2 z(D;paGx_W|drVxjJre&2c@=$SJ=|_i))%B`i*mhSiISPL8F##IVfjjGET=iAWxnBh zcY_?g)QufSh2^THwLFfz9od#NniPPeNqU;J zkNON%gu_^LL1Tg_!FkZYNr&Gcl_^y&6<3vCoLb!Mo$5TrHOm!qz3=+&bC=Ou z#A6}@F@<<;?cScnp2(i_Uavsc1rC8hc~AKOcTcY_Zzs1pLe7j#Q$ce<(~5x|zugy) z^le$t*C(+!j%4p-&~xX!h&-1}KV0Gh-#VtRvVRwuTAMmvJmUO&qD!GAu;}Qicq)H~ zNs|KU!Oq6M;q2?Kx%9l$yr0{#OA@Burbebm^%u3v)2?I;N;)W6|- zQ%>bbB}k2+&ZU*5iK3}JC&8r1t-?glY$WI&@7f63;y(>LVm98o}__T%-94+{Y7Xdm5AYDtB)?l!Ft*$%>eY4nY^9-}r|AQQJ)B@Z`KqzxH9idAM2O!<+}@ zl2eLw+I)&$lBZS4!gzKKXmOg-{_C9SI)og*=z10-Rg# zQp2>>8nUCZbxW(!kMDn4Oot}!-JOsRe0XU8UR&L(RhnKKauXKE`>95F`zcg)a1zx! z@_IzYHiz_H{+S-VT;b4{PE$P`}4vF9@}HwPGMSjWCf%| zhvmGMME*_Rmpm_h(VF#|FMdl;*`BT*2s6GtA5b6rT?hTWd>HL(v^fpNs@0wsj(iUC z5x->u!C3pg+UN_!+2hKRPIP7sA^KYmu<@;ENN8Vf?!%jJ4P+7v5;|}$B|9%_thg-_ zt@TL`$pbH;!8bsOW+*pQe#xKj>gdH;gJ)&~0lP5g(b37r)tzeuO+pUA1+{O4{r0%t z;laSK_Z!T`{F_k={ASLNCq2LTIqXJvS9EuFQ^{J$uD$H4LXB;GxsBZOOAj`|K~IW{ zsvAbGj1FQaeEhdrLIt?xCrJs!y2_ir29EV=fx9k!>u)Dw_$>J`*u|g;w1$s%OGb=; zu0QRb8j0ZG>FPB84T~+KcZS@Kx~M7VwvZa)I-0tc;#2AN;s(pl2Ma&0PJIpVpVL|X z($h5F)IEg=uHL01Xu@vx$zi=vVo2vKg)jA_<&Vg80aF2uhU&8*(yciwuQu5jgN&^7 zYYLkO^Kawl@~rbR(w`|Q{6>t!_O*@?jwZS$^>zsr-j`yJbpOED%Jb#6Q0 zeakVC>LBZ1!<$2KP%mcb*dD@udFXLx;uzkD)(9;wG7}dQvNq zzuM)>#09hnX7`Wx-WteuPYtX{k-4^YkC{M)Te#BUTa% zeR#%c!dZX#OrJ)V#(=Q8a8yjXpdddpU;UPKPy9??SsrI^XAtxZM(`+FnmU<1deUon zJiNhp5ZQ|@ffa1KlZpzy$+Zc$3D)(%6gIye7x#<>lF%f~R9n3u;@YwDsm?b3(5fx( zm-fEmQo!l4#QwYOBayyLX>zwIWTgpt3IKj001y%i00(Dey8-}Sk^r!34ghkW0RZIs z$*e^k0ND5+sXoy29VJdE!7mI6&~9WVu-An#BWUPd9#D#*jVwa7KQPimmX*U6z*(_U zYHpy~h^R;*V`}{m)}fr-*NtyPy{4p>1D(rdOQV$XImcW4<30QEcUq3F5D@9x=i}?p zPf=ER4Y)u>rY5O!(q__>jM-#eH9Pr~f5%?}e+m30@Rz_}0)GkoUjoOO_bN#0$0XVz zpGoY!46UJz6m@R)QaRFOrWmQGb;4F;bp zk_=de%l;d^9QR=C39-6GH+?|J(cw-JF=C0-52o54_86>;&*60QO)6!X;bpvK2 z;}P(Qu{#oH>kiu;_m7O#Kfu58eH0$O@dO1uTXf(+t9HOw;x>D(mM_lPZvD324=wih zsVaNCKnnnO@9s@8xea--m+s9)DIM>&Mx_@sDq;WZa!rXzfs@#$K2HiTJyCT!-PS zqQ*$|^+zjCUYji*b_5F(!ORL1P@wf$H}s$dd6MbTAP@69>DmSj25)9>QT?L?1;_6Mp)s@tc7qlfAj($#G^ zMaiKld|iuTGE-3Bk|9#%fy0AMa#E>ZuQ%aGefug$_7H)JBlCrUlEGXVPd>m$ipLmO z$(=Pog6XSrzxLD{%o`D_g>mYO9*IU0Q;IkH^A<;J1dEu)cSl6s?^tf+z&>;jeN$D4 zaL76)$D-U&l)QJZARKwnG=XaB28)0f%_`XAism*~r{FyIP5J8%7Aw4@HFhc z%li6%Zb~Qt!DI+#!dB)60tX+T90{5^R#&ygcEL-|lAyT}6IH2cHTnOY>vi45%(VHY z5~i!{p;a+y-JKsW)~^ITOO3^`qx1wv3bcesXT5-QXSv|h|QOu7;Z=P2Fo@%pE}$S+2j%?=I@58@3>@H5U#vtBfJPGjHhI#?@?GOOnj z8Eaq0)<^aw+spsAyoBh!H}lK~yP`Oi9{4>TfkYygk!hckq}p4`2$+eZ?wxUUb#W|` z^DKn?ppetxB~NmFwu-5#)gN-)G>SLt!r2%9_7WZ4JVcbl5X)=IVSC9E>SjJu6WRim z{}s#7*0!zpk+=BhNO9^!w)6U(+z32g*LF~&Ete^Ycbj$_vbyQfe}?bPG6*E!_V4&h l;Qt{3mI|_70Gyps0ojV?w#`@P|B)1cM{3VhOH|C?{tu8fZBzgN literal 0 HcmV?d00001 diff --git a/assets/jp/raid/RPG_HOME.png b/assets/jp/raid/RPG_HOME.png new file mode 100644 index 0000000000000000000000000000000000000000..8d84d8d243cd8f9dceff902ccdb149ce07222ed3 GIT binary patch literal 6254 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 literal 0 HcmV?d00001 diff --git a/assets/jp/raid/RPG_RAID_EASY.png b/assets/jp/raid/RPG_RAID_EASY.png new file mode 100644 index 0000000000000000000000000000000000000000..216fcc9eec0fffb613d722e130a4a4460ce7f907 GIT binary patch literal 7271 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 Inodvt2e3a^=Kufz literal 0 HcmV?d00001 diff --git a/assets/jp/raid/RPG_RAID_EX.png b/assets/jp/raid/RPG_RAID_EX.png new file mode 100644 index 0000000000000000000000000000000000000000..b16b3f0f0026453cccaf49635dc740c7a437ce3a GIT binary patch literal 7576 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 literal 0 HcmV?d00001 diff --git a/assets/jp/raid/RPG_RAID_NORMAL.png b/assets/jp/raid/RPG_RAID_NORMAL.png new file mode 100644 index 0000000000000000000000000000000000000000..8b69b36bb7c93d3d624b8bb4f8f266ffbcb8d005 GIT binary patch literal 7133 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 literal 0 HcmV?d00001 diff --git a/assets/jp/raid/RPG_STATUS_POPUP.png b/assets/jp/raid/RPG_STATUS_POPUP.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd75492d4a9ef32b41c90fc572dacb3faf5b424 GIT binary patch literal 6671 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 literal 0 HcmV?d00001 diff --git a/assets/tw/raid/RPG_GOTO_STAGE.png b/assets/tw/raid/RPG_GOTO_STAGE.png new file mode 100644 index 0000000000000000000000000000000000000000..44219b003fed39917ee3399a6b56e05f6260fcef GIT binary patch literal 6963 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 literal 0 HcmV?d00001 diff --git a/assets/tw/raid/RPG_GOTO_STORY.png b/assets/tw/raid/RPG_GOTO_STORY.png new file mode 100644 index 0000000000000000000000000000000000000000..d7dd1a9b03e6649ae44f958dc2163c81164bebfb GIT binary patch literal 6894 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 literal 0 HcmV?d00001 diff --git a/assets/tw/raid/RPG_HOME.png b/assets/tw/raid/RPG_HOME.png new file mode 100644 index 0000000000000000000000000000000000000000..8d84d8d243cd8f9dceff902ccdb149ce07222ed3 GIT binary patch literal 6254 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 literal 0 HcmV?d00001 diff --git a/assets/tw/raid/RPG_RAID_EASY.png b/assets/tw/raid/RPG_RAID_EASY.png new file mode 100644 index 0000000000000000000000000000000000000000..216fcc9eec0fffb613d722e130a4a4460ce7f907 GIT binary patch literal 7271 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 Inodvt2e3a^=Kufz literal 0 HcmV?d00001 diff --git a/assets/tw/raid/RPG_RAID_EX.png b/assets/tw/raid/RPG_RAID_EX.png new file mode 100644 index 0000000000000000000000000000000000000000..b16b3f0f0026453cccaf49635dc740c7a437ce3a GIT binary patch literal 7576 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 literal 0 HcmV?d00001 diff --git a/assets/tw/raid/RPG_RAID_NORMAL.png b/assets/tw/raid/RPG_RAID_NORMAL.png new file mode 100644 index 0000000000000000000000000000000000000000..8b69b36bb7c93d3d624b8bb4f8f266ffbcb8d005 GIT binary patch literal 7133 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 literal 0 HcmV?d00001 diff --git a/assets/tw/raid/RPG_STATUS_POPUP.png b/assets/tw/raid/RPG_STATUS_POPUP.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd75492d4a9ef32b41c90fc572dacb3faf5b424 GIT binary patch literal 6671 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 literal 0 HcmV?d00001 diff --git a/module/raid/assets.py b/module/raid/assets.py index 314472fe6..2f1157766 100644 --- a/module/raid/assets.py +++ b/module/raid/assets.py @@ -59,6 +59,15 @@ KUYBYSHEY_RAID_HARD = Button(area={'cn': (1073, 345, 1125, 371), 'en': (1074, 34 KUYBYSHEY_RAID_NORMAL = Button(area={'cn': (1045, 423, 1097, 451), 'en': (1036, 424, 1099, 449), 'jp': (1048, 427, 1091, 448), 'tw': (1044, 423, 1096, 452)}, color={'cn': (86, 95, 109), 'en': (81, 92, 105), 'jp': (131, 143, 154), 'tw': (86, 95, 109)}, button={'cn': (1045, 423, 1097, 451), 'en': (1036, 424, 1099, 449), 'jp': (1048, 427, 1091, 448), 'tw': (1044, 423, 1096, 452)}, file={'cn': './assets/cn/raid/KUYBYSHEY_RAID_NORMAL.png', 'en': './assets/en/raid/KUYBYSHEY_RAID_NORMAL.png', 'jp': './assets/jp/raid/KUYBYSHEY_RAID_NORMAL.png', 'tw': './assets/tw/raid/KUYBYSHEY_RAID_NORMAL.png'}) RAID_FLEET_PREPARATION = Button(area={'cn': (983, 577, 1181, 638), 'en': (1041, 592, 1121, 631), 'jp': (983, 579, 1180, 635), 'tw': (983, 577, 1181, 638)}, color={'cn': (236, 188, 115), 'en': (236, 184, 117), 'jp': (235, 183, 103), 'tw': (236, 188, 115)}, button={'cn': (983, 577, 1181, 638), 'en': (1041, 592, 1121, 631), 'jp': (983, 579, 1180, 635), 'tw': (983, 577, 1181, 638)}, file={'cn': './assets/cn/raid/RAID_FLEET_PREPARATION.png', 'en': './assets/en/raid/RAID_FLEET_PREPARATION.png', 'jp': './assets/jp/raid/RAID_FLEET_PREPARATION.png', 'tw': './assets/tw/raid/RAID_FLEET_PREPARATION.png'}) RAID_REWARDS = Button(area={'cn': (836, 127, 900, 169), 'en': (836, 127, 900, 169), 'jp': (836, 127, 900, 169), 'tw': (836, 127, 900, 169)}, color={'cn': (217, 103, 98), 'en': (217, 103, 98), 'jp': (217, 103, 98), 'tw': (217, 103, 98)}, button={'cn': (836, 127, 900, 169), 'en': (836, 127, 900, 169), 'jp': (836, 127, 900, 169), 'tw': (836, 127, 900, 169)}, file={'cn': './assets/cn/raid/RAID_REWARDS.png', 'en': './assets/en/raid/RAID_REWARDS.png', 'jp': './assets/jp/raid/RAID_REWARDS.png', 'tw': './assets/tw/raid/RAID_REWARDS.png'}) +RPG_GOTO_STAGE = Button(area={'cn': (55, 495, 80, 520), 'en': (55, 495, 80, 520), 'jp': (55, 495, 80, 520), 'tw': (55, 495, 80, 520)}, color={'cn': (174, 168, 160), 'en': (174, 168, 160), 'jp': (174, 168, 160), 'tw': (174, 168, 160)}, button={'cn': (55, 495, 80, 520), 'en': (55, 495, 80, 520), 'jp': (55, 495, 80, 520), 'tw': (55, 495, 80, 520)}, file={'cn': './assets/cn/raid/RPG_GOTO_STAGE.png', 'en': './assets/en/raid/RPG_GOTO_STAGE.png', 'jp': './assets/jp/raid/RPG_GOTO_STAGE.png', 'tw': './assets/tw/raid/RPG_GOTO_STAGE.png'}) +RPG_GOTO_STORY = Button(area={'cn': (59, 491, 84, 516), 'en': (59, 491, 84, 516), 'jp': (59, 491, 84, 516), 'tw': (59, 491, 84, 516)}, color={'cn': (182, 122, 105), 'en': (182, 122, 105), 'jp': (182, 122, 105), 'tw': (182, 122, 105)}, button={'cn': (59, 491, 84, 516), 'en': (59, 491, 84, 516), 'jp': (59, 491, 84, 516), 'tw': (59, 491, 84, 516)}, file={'cn': './assets/cn/raid/RPG_GOTO_STORY.png', 'en': './assets/en/raid/RPG_GOTO_STORY.png', 'jp': './assets/jp/raid/RPG_GOTO_STORY.png', 'tw': './assets/tw/raid/RPG_GOTO_STORY.png'}) +RPG_HOME = Button(area={'cn': (1222, 29, 1240, 51), 'en': (1222, 29, 1240, 51), 'jp': (1222, 29, 1240, 51), 'tw': (1222, 29, 1240, 51)}, color={'cn': (197, 181, 158), 'en': (197, 181, 158), 'jp': (197, 181, 158), 'tw': (197, 181, 158)}, button={'cn': (1222, 29, 1240, 51), 'en': (1222, 29, 1240, 51), 'jp': (1222, 29, 1240, 51), 'tw': (1222, 29, 1240, 51)}, file={'cn': './assets/cn/raid/RPG_HOME.png', 'en': './assets/en/raid/RPG_HOME.png', 'jp': './assets/jp/raid/RPG_HOME.png', 'tw': './assets/tw/raid/RPG_HOME.png'}) +RPG_LEAVE_CITY = Button(area={'cn': (688, 642, 711, 664), 'en': (688, 642, 711, 664), 'jp': (688, 642, 711, 664), 'tw': (688, 642, 711, 664)}, color={'cn': (158, 130, 109), 'en': (158, 130, 109), 'jp': (158, 130, 109), 'tw': (158, 130, 109)}, button={'cn': (688, 642, 711, 664), 'en': (688, 642, 711, 664), 'jp': (688, 642, 711, 664), 'tw': (688, 642, 711, 664)}, file={'cn': './assets/cn/raid/RPG_LEAVE_CITY.png', 'en': './assets/en/raid/RPG_LEAVE_CITY.png', 'jp': './assets/jp/raid/RPG_LEAVE_CITY.png', 'tw': './assets/tw/raid/RPG_LEAVE_CITY.png'}) +RPG_RAID_EASY = Button(area={'cn': (313, 259, 343, 289), 'en': (313, 259, 343, 289), 'jp': (313, 259, 343, 289), 'tw': (313, 259, 343, 289)}, color={'cn': (147, 61, 62), 'en': (147, 61, 62), 'jp': (147, 61, 62), 'tw': (147, 61, 62)}, button={'cn': (313, 259, 343, 289), 'en': (313, 259, 343, 289), 'jp': (313, 259, 343, 289), 'tw': (313, 259, 343, 289)}, file={'cn': './assets/cn/raid/RPG_RAID_EASY.png', 'en': './assets/en/raid/RPG_RAID_EASY.png', 'jp': './assets/jp/raid/RPG_RAID_EASY.png', 'tw': './assets/tw/raid/RPG_RAID_EASY.png'}) +RPG_RAID_EX = Button(area={'cn': (949, 518, 976, 565), 'en': (949, 518, 976, 565), 'jp': (949, 518, 976, 565), 'tw': (949, 518, 976, 565)}, color={'cn': (166, 66, 69), 'en': (166, 66, 69), 'jp': (166, 66, 69), 'tw': (166, 66, 69)}, button={'cn': (949, 518, 976, 565), 'en': (949, 518, 976, 565), 'jp': (949, 518, 976, 565), 'tw': (949, 518, 976, 565)}, file={'cn': './assets/cn/raid/RPG_RAID_EX.png', 'en': './assets/en/raid/RPG_RAID_EX.png', 'jp': './assets/jp/raid/RPG_RAID_EX.png', 'tw': './assets/tw/raid/RPG_RAID_EX.png'}) +RPG_RAID_HARD = Button(area={'cn': (475, 108, 505, 138), 'en': (475, 108, 505, 138), 'jp': (475, 108, 505, 138), 'tw': (475, 108, 505, 138)}, color={'cn': (97, 59, 59), 'en': (97, 59, 59), 'jp': (97, 59, 59), 'tw': (97, 59, 59)}, button={'cn': (475, 108, 505, 138), 'en': (475, 108, 505, 138), 'jp': (475, 108, 505, 138), 'tw': (475, 108, 505, 138)}, file={'cn': './assets/cn/raid/RPG_RAID_HARD.png', 'en': './assets/en/raid/RPG_RAID_HARD.png', 'jp': './assets/jp/raid/RPG_RAID_HARD.png', 'tw': './assets/tw/raid/RPG_RAID_HARD.png'}) +RPG_RAID_NORMAL = Button(area={'cn': (149, 561, 179, 591), 'en': (149, 561, 179, 591), 'jp': (149, 561, 179, 591), 'tw': (149, 561, 179, 591)}, color={'cn': (152, 57, 59), 'en': (152, 57, 59), 'jp': (152, 57, 59), 'tw': (152, 57, 59)}, button={'cn': (149, 561, 179, 591), 'en': (149, 561, 179, 591), 'jp': (149, 561, 179, 591), 'tw': (149, 561, 179, 591)}, file={'cn': './assets/cn/raid/RPG_RAID_NORMAL.png', 'en': './assets/en/raid/RPG_RAID_NORMAL.png', 'jp': './assets/jp/raid/RPG_RAID_NORMAL.png', 'tw': './assets/tw/raid/RPG_RAID_NORMAL.png'}) +RPG_STATUS_POPUP = Button(area={'cn': (1120, 97, 1144, 121), 'en': (1120, 97, 1144, 121), 'jp': (1120, 97, 1144, 121), 'tw': (1120, 97, 1144, 121)}, color={'cn': (158, 165, 176), 'en': (158, 165, 176), 'jp': (158, 165, 176), 'tw': (158, 165, 176)}, button={'cn': (1120, 97, 1144, 121), 'en': (1120, 97, 1144, 121), 'jp': (1120, 97, 1144, 121), 'tw': (1120, 97, 1144, 121)}, file={'cn': './assets/cn/raid/RPG_STATUS_POPUP.png', 'en': './assets/en/raid/RPG_STATUS_POPUP.png', 'jp': './assets/jp/raid/RPG_STATUS_POPUP.png', 'tw': './assets/tw/raid/RPG_STATUS_POPUP.png'}) SURUGA_OCR_REMAIN_EASY = Button(area={'cn': (1093, 549, 1141, 563), 'en': (1093, 549, 1141, 563), 'jp': (1096, 549, 1141, 563), 'tw': (1096, 549, 1141, 563)}, color={'cn': (161, 161, 161), 'en': (161, 161, 161), 'jp': (155, 155, 155), 'tw': (155, 155, 155)}, button={'cn': (1093, 549, 1141, 563), 'en': (1093, 549, 1141, 563), 'jp': (1096, 549, 1141, 563), 'tw': (1096, 549, 1141, 563)}, file={'cn': './assets/cn/raid/SURUGA_OCR_REMAIN_EASY.png', 'en': './assets/en/raid/SURUGA_OCR_REMAIN_EASY.png', 'jp': './assets/jp/raid/SURUGA_OCR_REMAIN_EASY.png', 'tw': './assets/tw/raid/SURUGA_OCR_REMAIN_EASY.png'}) SURUGA_OCR_REMAIN_HARD = Button(area={'cn': (1071, 318, 1118, 332), 'en': (1071, 318, 1118, 332), 'jp': (1073, 318, 1118, 331), 'tw': (1079, 318, 1118, 332)}, color={'cn': (158, 158, 159), 'en': (158, 158, 159), 'jp': (173, 173, 173), 'tw': (168, 168, 168)}, button={'cn': (1071, 318, 1118, 332), 'en': (1071, 318, 1118, 332), 'jp': (1073, 318, 1118, 331), 'tw': (1079, 318, 1118, 332)}, file={'cn': './assets/cn/raid/SURUGA_OCR_REMAIN_HARD.png', 'en': './assets/en/raid/SURUGA_OCR_REMAIN_HARD.png', 'jp': './assets/jp/raid/SURUGA_OCR_REMAIN_HARD.png', 'tw': './assets/tw/raid/SURUGA_OCR_REMAIN_HARD.png'}) SURUGA_OCR_REMAIN_NORMAL = Button(area={'cn': (1137, 426, 1185, 439), 'en': (1137, 426, 1185, 439), 'jp': (1140, 426, 1185, 439), 'tw': (1140, 426, 1185, 439)}, color={'cn': (164, 164, 164), 'en': (164, 164, 164), 'jp': (158, 158, 158), 'tw': (158, 158, 158)}, button={'cn': (1137, 426, 1185, 439), 'en': (1137, 426, 1185, 439), 'jp': (1140, 426, 1185, 439), 'tw': (1140, 426, 1185, 439)}, file={'cn': './assets/cn/raid/SURUGA_OCR_REMAIN_NORMAL.png', 'en': './assets/en/raid/SURUGA_OCR_REMAIN_NORMAL.png', 'jp': './assets/jp/raid/SURUGA_OCR_REMAIN_NORMAL.png', 'tw': './assets/tw/raid/SURUGA_OCR_REMAIN_NORMAL.png'}) diff --git a/module/ui/page.py b/module/ui/page.py index f42090ca8..d07ad0f1e 100644 --- a/module/ui/page.py +++ b/module/ui/page.py @@ -1,6 +1,7 @@ import traceback from module.ui.assets import * +from module.raid.assets import * MAIN_CHECK = MAIN_GOTO_CAMPAIGN @@ -248,3 +249,17 @@ page_supply_pack.link(button=GOTO_MAIN, destination=page_main) page_build = Page(BUILD_CHECK) page_main.link(button=MAIN_GOTO_BUILD, destination=page_build) page_build.link(button=GOTO_MAIN, destination=page_main) + +# RPG event (raid_20240328) +page_rpg_stage = Page(RPG_GOTO_STORY) +page_rpg_story = Page(RPG_GOTO_STAGE) +page_rpg_stage.link(button=RPG_GOTO_STORY, destination=page_rpg_story) +page_rpg_stage.link(button=RPG_HOME, destination=page_main) +page_rpg_story.link(button=RPG_GOTO_STAGE, destination=page_rpg_stage) +page_rpg_story.link(button=RPG_HOME, destination=page_main) + +page_main.link(button=MAIN_GOTO_RAID, destination=page_rpg_stage) + +page_rpg_city = Page(RPG_LEAVE_CITY) +page_rpg_city.link(button=RPG_LEAVE_CITY, destination=page_rpg_stage) +page_rpg_city.link(button=RPG_HOME, destination=page_main) diff --git a/module/ui/ui.py b/module/ui/ui.py index 2babd19fc..8ae99bc86 100644 --- a/module/ui/ui.py +++ b/module/ui/ui.py @@ -3,6 +3,7 @@ from module.base.decorator import run_once from module.base.timer import Timer from module.coalition.assets import FLEET_PREPARATION as COALITION_FLEET_PREPARATION from module.combat.assets import GET_ITEMS_1, GET_ITEMS_2, GET_SHIP +from module.raid.assets import * from module.exception import (GameNotRunningError, GamePageUnknownError, RequestHumanTakeover) from module.exercise.assets import EXERCISE_PREPARATION @@ -165,7 +166,13 @@ class UI(InfoHandler): # Unknown page but able to handle logger.info("Unknown ui page") - if self.appear_then_click(GOTO_MAIN, offset=(30, 30), interval=2) or self.ui_additional(): + if self.appear_then_click(GOTO_MAIN, offset=(30, 30), interval=2): + timeout.reset() + continue + if self.appear_then_click(RPG_HOME, offset=(30, 30), interval=2): + timeout.reset() + continue + if self.ui_additional(): timeout.reset() continue @@ -495,6 +502,10 @@ class UI(InfoHandler): self.device.click(GOTO_MAIN) return True + # RPG event (raid_20240328) + if self.appear_then_click(RPG_STATUS_POPUP, offset=(30, 30), interval=3): + return True + return False def ui_button_interval_reset(self, button): @@ -515,5 +526,5 @@ class UI(InfoHandler): self.interval_reset(RAID_CHECK) if button == SHOP_GOTO_SUPPLY_PACK: self.interval_reset(EXCHANGE_CHECK) - if button == DORMMENU_GOTO_DORM: - self.interval_reset(GET_SHIP) + if button in [RPG_GOTO_STAGE, RPG_GOTO_STORY, RPG_LEAVE_CITY]: + self.interval_timer[GET_SHIP.name] = Timer(5).reset() From 8be7d9f794a895f08b91b0b6d94f11128a1eaa96 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 29 Mar 2024 02:27:26 +0800 Subject: [PATCH 28/96] Add: Enter stage in RPG raid --- module/raid/daily.py | 5 +++++ module/raid/raid.py | 40 ++++++++++++++++++++++++++++++++++++++-- module/raid/run.py | 8 ++++++-- 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/module/raid/daily.py b/module/raid/daily.py index 4510d29d8..8dda1bdf6 100644 --- a/module/raid/daily.py +++ b/module/raid/daily.py @@ -25,6 +25,11 @@ class RaidDaily(RaidRun): Args: name (str): Raid name, such as 'raid_20200624' """ + if self.is_raid_rpg(): + logger.info('RPG raid has no dailies') + self.config.Scheduler_Enable = False + self.config.task_stop() + name = name if name else self.config.Campaign_Event stages = [RaidStage(name) for name in STAGES] STAGE_FILTER.load(self.config.RaidDaily_StageFilter) diff --git a/module/raid/raid.py b/module/raid/raid.py index 7a68d9b7a..bf9c18944 100644 --- a/module/raid/raid.py +++ b/module/raid/raid.py @@ -13,6 +13,7 @@ from module.ocr.ocr import Digit, DigitCounter from module.raid.assets import * from module.raid.combat import RaidCombat from module.ui.assets import RAID_CHECK +from module.ui.page import page_rpg_stage class OilExhausted(Exception): @@ -31,6 +32,7 @@ class HuanChangCounter(Digit): The limit on number of raid event "Spring Festive Fiasco" is vertical, Ocr numbers on the top half. """ + def ocr(self, image, direct_ocr=False): result = super().ocr(image, direct_ocr) return (result, 0, 15) @@ -51,7 +53,8 @@ class HuanChangPtOcr(Digit): # Calculate connected area, greater than 60 is considered a number, # CN, JP background rightmost is connected but EN is not, # EN need judge both [0, -1] and [-1, -1] - num_idx = [i for i in range(1, count + 1) if i != cc[0, -1] and i != cc[-1, -1] and np.count_nonzero(cc == i) > 60] + num_idx = [i for i in range(1, count + 1) if + i != cc[0, -1] and i != cc[-1, -1] and np.count_nonzero(cc == i) > 60] image = ~(np.isin(cc, num_idx) * 255) # Numbers are white, need invert return image.astype(np.uint8) @@ -80,6 +83,8 @@ def raid_name_shorten(name): return "GORIZIA" elif name == "raid_20240130": return "HUANCHANG" + elif name == "raid_20240328": + return "RPG" else: raise ScriptError(f'Unknown raid name: {name}') @@ -287,7 +292,10 @@ class Raid(MapOperation, RaidCombat, CampaignEvent): def raid_expected_end(self): if self.appear_then_click(RAID_REWARDS, offset=(30, 30), interval=3): return False - return self.appear(RAID_CHECK, offset=(30, 30)) + if self.is_raid_rpg(): + return self.appear(page_rpg_stage.check_button, offset=(30, 30)) + else: + return self.appear(RAID_CHECK, offset=(30, 30)) def raid_execute_once(self, mode, raid): """ @@ -352,3 +360,31 @@ class Raid(MapOperation, RaidCombat, CampaignEvent): else: logger.info(f'Raid {self.config.Campaign_Event} does not support PT ocr, skip') return 0 + + def is_raid_rpg(self): + return self.config.Campaign_Event == 'raid_20240328' + + def raid_rpg_swipe(self, skip_first_screenshot=True): + """ + Swipe til the rightmost in RPG raid (raid_20240328) + """ + interval = Timer(1) + while 1: + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() + + # End + if self.appear(RPG_RAID_EASY, offset=(10, 10)): + logger.info('RPG raid already at rightmost') + break + + if self.handle_story_skip(): + continue + if self.handle_get_items(): + continue + if interval.reached(): + self.device.swipe_vector((-900, 0), box=(0, 130, 1280, 440)) + interval.reset() + continue diff --git a/module/raid/run.py b/module/raid/run.py index 4daa93820..0bed97141 100644 --- a/module/raid/run.py +++ b/module/raid/run.py @@ -4,7 +4,7 @@ from module.exception import ScriptEnd, ScriptError from module.logger import logger from module.raid.assets import RAID_REWARDS from module.raid.raid import OilExhausted, Raid, raid_ocr -from module.ui.page import page_raid +from module.ui.page import page_raid, page_rpg_stage class RaidRun(Raid, CampaignEvent): @@ -100,7 +100,11 @@ class RaidRun(Raid, CampaignEvent): # UI ensure self.device.stuck_record_clear() self.device.click_record_clear() - self.ui_ensure(page_raid) + if not self.is_raid_rpg(): + self.ui_ensure(page_raid) + else: + self.ui_ensure(page_rpg_stage) + self.raid_rpg_swipe() # End for mode EX if mode == 'ex': From fe223d70bfa924a71965b5160d6060927f326140 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 29 Mar 2024 03:21:10 +0800 Subject: [PATCH 29/96] Fix: Swapped RPG_RAID_EASY and RPG_RAID_NORMAL --- assets/cn/raid/RPG_RAID_EASY.png | Bin 7271 -> 7133 bytes assets/cn/raid/RPG_RAID_NORMAL.png | Bin 7133 -> 7271 bytes assets/en/raid/RPG_RAID_EASY.png | Bin 7271 -> 7133 bytes assets/en/raid/RPG_RAID_NORMAL.png | Bin 7133 -> 7271 bytes assets/jp/raid/RPG_RAID_EASY.png | Bin 7271 -> 7133 bytes assets/jp/raid/RPG_RAID_NORMAL.png | Bin 7133 -> 7271 bytes assets/tw/raid/RPG_RAID_EASY.png | Bin 7271 -> 7133 bytes assets/tw/raid/RPG_RAID_NORMAL.png | Bin 7133 -> 7271 bytes module/raid/assets.py | 4 ++-- 9 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/cn/raid/RPG_RAID_EASY.png b/assets/cn/raid/RPG_RAID_EASY.png index 216fcc9eec0fffb613d722e130a4a4460ce7f907..8b69b36bb7c93d3d624b8bb4f8f266ffbcb8d005 100644 GIT binary patch delta 1855 zcmXYxeKebC8pdC?Q?o;w-PuD+Elp25IqaxbhcvV?UDJ>Fh@nD-d9_zC_R?LIicenqs^xkzM zkO^{$EJ5XAJSojf&q1gq_waJxXjn9oD`d694dN^&C{&0xS|Ak6qt4DlsHDxJh z2Uz?ZxmvpI_RH^m-mC-SD2hs96%%sHeZAyv>CSAqJ*%g{xS;03s+*ctPC}uw*L7g# zBHoc__a{Y+Md0D@0zSlOdVjcd;>1F z(3E}~I`NMvLJ+yx9spYNBeI*CP0{buN&m(;?UDG@$ucj@U?40WV|*p8XTwOUSbtRk zH=(e3oT_W5m}vzq>Dnqzq-JS#m2bXYV{Hcju|e)#QHpnbTz-+9M%YgX@)FFTsAI9% znDS>wC)$&_dS_))ssA?XkY;9PbD&Z90Bo05AUo}?0H6^WJ(nEA_6dlo7J`mE5rd{< zDA-WN4S}DjA=B%SDTN&t#6ixy`zey7&|-q$WG>;-^;+?>3{9kn&X8-#Zst9kk1R{l zoc-)mvf_vug(V{)6RM;J>3Wjm*;B^}m&GaP8K6}o$4`q%LXBcML}9WbeVL~16d6B+ zF+a98gxP*$;lEUC;a?vgsLXTTS+1fuqbXyw%vk@9aX-EUwj2$S6`*27&@nRF z+Z0s+>F=y_S^{TBQfn;lvw{A@yp6|x$QEh~q9V&I%0$bC9*p=Qlu1=i2sp}67s}+#l}~rzZwdHWut6@D)nRX?aJsrsq17xn;k7ydFS_6Rf(W24fZnQM- z8W>`xE@NsxsNpLAc;(?`!`CM124VAu$)OtuEfmNL`5UU zkL%&A2`ce2uXVp4YE3S7k`y}q|2_*75#;nF1wwO(tGqD>j%sFT{`<%iTxR^>_)M=hTohTf&gd^y#999F_irclq7qNt$~*u-%-Mbahy7>-Sh myURaqJ7eXv6=zgg0l$rWN^;)qcHaU9z@EW<*Z9v%xBmwTLd{tK delta 1993 zcmXAqc~p{#8pgj?E1kSclP#t*PPo)B1AP_gt>x(c0shL+T_&-L-I0p42(j|=C2hU4|i64u6Q6Y42~d-gQZlK$ zY^N>ac`Vh&rwmXr1otHmLDy3WGC3)D8xRC+=P4+3H@Wu7ZnL6?)uyxR(@Uz2H=ghr z7t5UD3p?VZVQ$R!WMKXDcxkkOb$tg9i(F=@**>cug08z&9L1#e_hSuV5qNCB!z0VX z$&3RB0AOpN7fkU{;I^TpP@SNDYZEBX*syP(cV?2a0|VcH_7jN1S&ONzX*^W#4}NAnA*= z+k~^(2LPM)HTs9_{$P0jHLq`ME)E@vY3E7=M8>}DYv#uleLzbn*eqasXa}Weq=?VPV zR(=(7WZ>@2k)wg|ZUwNjhm4}aYx%vs$3zUY{zB&E+Tcj6XL+tSKPH@dh$4}} z6ILMM;>dq{{5WKBufr*%h{okg0O0h^8wE;K%=7lx`_DQb_7bT$d@->aow{IJTU2{-Ynn!ku5S)+;0%&(WHP%xHtXlQ zK1{bPK@P?_vq)5;{n1gmgJmm>%LkLkyr)rWNkkxPYMdq2jITSNJIoB;G+w*OltC34}tz@Vw~y+u`Zk-F^a4DZoSe>sW^kp z3eXJI4ujeTBip;F_M;f#=!mGp7&?Zg(G4zivvT{`%5izT2J2J5!N5`|xxA?MiT)y| z-31d#VN@qYO_ie&s|G)_HJ& zJ(;OrEMD#ISAJG0ASh8WtN{%o$O}(RH73zqKYPpXSGhrA#C?CA@nvIdJ8aWBePe(? zD${I)<}k=Oce#z+3355b4)1sIeHscf$Q75U6kZWR&?xh|^!79*^SW2fC6(ewkK;yY-I%Y;;2*XocTkMXnJJzbn z&%Kn(ynH8~S* zT?@~uw0C-&9*sxuo$2XVFtjz-$V6|9S|{$djc4#IWXyg4g#93@tButM_)x#Y$vLEo`d4?Ng3;%BXOr&y EA0dw>;s5{u diff --git a/assets/cn/raid/RPG_RAID_NORMAL.png b/assets/cn/raid/RPG_RAID_NORMAL.png index 8b69b36bb7c93d3d624b8bb4f8f266ffbcb8d005..216fcc9eec0fffb613d722e130a4a4460ce7f907 100644 GIT binary patch delta 1993 zcmXAqc~p{#8pgj?E1kSclP#t*PPo)B1AP_gt>x(c0shL+T_&-L-I0p42(j|=C2hU4|i64u6Q6Y42~d-gQZlK$ zY^N>ac`Vh&rwmXr1otHmLDy3WGC3)D8xRC+=P4+3H@Wu7ZnL6?)uyxR(@Uz2H=ghr z7t5UD3p?VZVQ$R!WMKXDcxkkOb$tg9i(F=@**>cug08z&9L1#e_hSuV5qNCB!z0VX z$&3RB0AOpN7fkU{;I^TpP@SNDYZEBX*syP(cV?2a0|VcH_7jN1S&ONzX*^W#4}NAnA*= z+k~^(2LPM)HTs9_{$P0jHLq`ME)E@vY3E7=M8>}DYv#uleLzbn*eqasXa}Weq=?VPV zR(=(7WZ>@2k)wg|ZUwNjhm4}aYx%vs$3zUY{zB&E+Tcj6XL+tSKPH@dh$4}} z6ILMM;>dq{{5WKBufr*%h{okg0O0h^8wE;K%=7lx`_DQb_7bT$d@->aow{IJTU2{-Ynn!ku5S)+;0%&(WHP%xHtXlQ zK1{bPK@P?_vq)5;{n1gmgJmm>%LkLkyr)rWNkkxPYMdq2jITSNJIoB;G+w*OltC34}tz@Vw~y+u`Zk-F^a4DZoSe>sW^kp z3eXJI4ujeTBip;F_M;f#=!mGp7&?Zg(G4zivvT{`%5izT2J2J5!N5`|xxA?MiT)y| z-31d#VN@qYO_ie&s|G)_HJ& zJ(;OrEMD#ISAJG0ASh8WtN{%o$O}(RH73zqKYPpXSGhrA#C?CA@nvIdJ8aWBePe(? zD${I)<}k=Oce#z+3355b4)1sIeHscf$Q75U6kZWR&?xh|^!79*^SW2fC6(ewkK;yY-I%Y;;2*XocTkMXnJJzbn z&%Kn(ynH8~S* zT?@~uw0C-&9*sxuo$2XVFtjz-$V6|9S|{$djc4#IWXyg4g#93@tButM_)x#Y$vLEo`d4?Ng3;%BXOr&y EA0dw>;s5{u delta 1855 zcmXYxeKebC8pdC?Q?o;w-PuD+Elp25IqaxbhcvV?UDJ>Fh@nD-d9_zC_R?LIicenqs^xkzM zkO^{$EJ5XAJSojf&q1gq_waJxXjn9oD`d694dN^&C{&0xS|Ak6qt4DlsHDxJh z2Uz?ZxmvpI_RH^m-mC-SD2hs96%%sHeZAyv>CSAqJ*%g{xS;03s+*ctPC}uw*L7g# zBHoc__a{Y+Md0D@0zSlOdVjcd;>1F z(3E}~I`NMvLJ+yx9spYNBeI*CP0{buN&m(;?UDG@$ucj@U?40WV|*p8XTwOUSbtRk zH=(e3oT_W5m}vzq>Dnqzq-JS#m2bXYV{Hcju|e)#QHpnbTz-+9M%YgX@)FFTsAI9% znDS>wC)$&_dS_))ssA?XkY;9PbD&Z90Bo05AUo}?0H6^WJ(nEA_6dlo7J`mE5rd{< zDA-WN4S}DjA=B%SDTN&t#6ixy`zey7&|-q$WG>;-^;+?>3{9kn&X8-#Zst9kk1R{l zoc-)mvf_vug(V{)6RM;J>3Wjm*;B^}m&GaP8K6}o$4`q%LXBcML}9WbeVL~16d6B+ zF+a98gxP*$;lEUC;a?vgsLXTTS+1fuqbXyw%vk@9aX-EUwj2$S6`*27&@nRF z+Z0s+>F=y_S^{TBQfn;lvw{A@yp6|x$QEh~q9V&I%0$bC9*p=Qlu1=i2sp}67s}+#l}~rzZwdHWut6@D)nRX?aJsrsq17xn;k7ydFS_6Rf(W24fZnQM- z8W>`xE@NsxsNpLAc;(?`!`CM124VAu$)OtuEfmNL`5UU zkL%&A2`ce2uXVp4YE3S7k`y}q|2_*75#;nF1wwO(tGqD>j%sFT{`<%iTxR^>_)M=hTohTf&gd^y#999F_irclq7qNt$~*u-%-Mbahy7>-Sh myURaqJ7eXv6=zgg0l$rWN^;)qcHaU9z@EW<*Z9v%xBmwTLd{tK diff --git a/assets/en/raid/RPG_RAID_EASY.png b/assets/en/raid/RPG_RAID_EASY.png index 216fcc9eec0fffb613d722e130a4a4460ce7f907..8b69b36bb7c93d3d624b8bb4f8f266ffbcb8d005 100644 GIT binary patch delta 1855 zcmXYxeKebC8pdC?Q?o;w-PuD+Elp25IqaxbhcvV?UDJ>Fh@nD-d9_zC_R?LIicenqs^xkzM zkO^{$EJ5XAJSojf&q1gq_waJxXjn9oD`d694dN^&C{&0xS|Ak6qt4DlsHDxJh z2Uz?ZxmvpI_RH^m-mC-SD2hs96%%sHeZAyv>CSAqJ*%g{xS;03s+*ctPC}uw*L7g# zBHoc__a{Y+Md0D@0zSlOdVjcd;>1F z(3E}~I`NMvLJ+yx9spYNBeI*CP0{buN&m(;?UDG@$ucj@U?40WV|*p8XTwOUSbtRk zH=(e3oT_W5m}vzq>Dnqzq-JS#m2bXYV{Hcju|e)#QHpnbTz-+9M%YgX@)FFTsAI9% znDS>wC)$&_dS_))ssA?XkY;9PbD&Z90Bo05AUo}?0H6^WJ(nEA_6dlo7J`mE5rd{< zDA-WN4S}DjA=B%SDTN&t#6ixy`zey7&|-q$WG>;-^;+?>3{9kn&X8-#Zst9kk1R{l zoc-)mvf_vug(V{)6RM;J>3Wjm*;B^}m&GaP8K6}o$4`q%LXBcML}9WbeVL~16d6B+ zF+a98gxP*$;lEUC;a?vgsLXTTS+1fuqbXyw%vk@9aX-EUwj2$S6`*27&@nRF z+Z0s+>F=y_S^{TBQfn;lvw{A@yp6|x$QEh~q9V&I%0$bC9*p=Qlu1=i2sp}67s}+#l}~rzZwdHWut6@D)nRX?aJsrsq17xn;k7ydFS_6Rf(W24fZnQM- z8W>`xE@NsxsNpLAc;(?`!`CM124VAu$)OtuEfmNL`5UU zkL%&A2`ce2uXVp4YE3S7k`y}q|2_*75#;nF1wwO(tGqD>j%sFT{`<%iTxR^>_)M=hTohTf&gd^y#999F_irclq7qNt$~*u-%-Mbahy7>-Sh myURaqJ7eXv6=zgg0l$rWN^;)qcHaU9z@EW<*Z9v%xBmwTLd{tK delta 1993 zcmXAqc~p{#8pgj?E1kSclP#t*PPo)B1AP_gt>x(c0shL+T_&-L-I0p42(j|=C2hU4|i64u6Q6Y42~d-gQZlK$ zY^N>ac`Vh&rwmXr1otHmLDy3WGC3)D8xRC+=P4+3H@Wu7ZnL6?)uyxR(@Uz2H=ghr z7t5UD3p?VZVQ$R!WMKXDcxkkOb$tg9i(F=@**>cug08z&9L1#e_hSuV5qNCB!z0VX z$&3RB0AOpN7fkU{;I^TpP@SNDYZEBX*syP(cV?2a0|VcH_7jN1S&ONzX*^W#4}NAnA*= z+k~^(2LPM)HTs9_{$P0jHLq`ME)E@vY3E7=M8>}DYv#uleLzbn*eqasXa}Weq=?VPV zR(=(7WZ>@2k)wg|ZUwNjhm4}aYx%vs$3zUY{zB&E+Tcj6XL+tSKPH@dh$4}} z6ILMM;>dq{{5WKBufr*%h{okg0O0h^8wE;K%=7lx`_DQb_7bT$d@->aow{IJTU2{-Ynn!ku5S)+;0%&(WHP%xHtXlQ zK1{bPK@P?_vq)5;{n1gmgJmm>%LkLkyr)rWNkkxPYMdq2jITSNJIoB;G+w*OltC34}tz@Vw~y+u`Zk-F^a4DZoSe>sW^kp z3eXJI4ujeTBip;F_M;f#=!mGp7&?Zg(G4zivvT{`%5izT2J2J5!N5`|xxA?MiT)y| z-31d#VN@qYO_ie&s|G)_HJ& zJ(;OrEMD#ISAJG0ASh8WtN{%o$O}(RH73zqKYPpXSGhrA#C?CA@nvIdJ8aWBePe(? zD${I)<}k=Oce#z+3355b4)1sIeHscf$Q75U6kZWR&?xh|^!79*^SW2fC6(ewkK;yY-I%Y;;2*XocTkMXnJJzbn z&%Kn(ynH8~S* zT?@~uw0C-&9*sxuo$2XVFtjz-$V6|9S|{$djc4#IWXyg4g#93@tButM_)x#Y$vLEo`d4?Ng3;%BXOr&y EA0dw>;s5{u diff --git a/assets/en/raid/RPG_RAID_NORMAL.png b/assets/en/raid/RPG_RAID_NORMAL.png index 8b69b36bb7c93d3d624b8bb4f8f266ffbcb8d005..216fcc9eec0fffb613d722e130a4a4460ce7f907 100644 GIT binary patch delta 1993 zcmXAqc~p{#8pgj?E1kSclP#t*PPo)B1AP_gt>x(c0shL+T_&-L-I0p42(j|=C2hU4|i64u6Q6Y42~d-gQZlK$ zY^N>ac`Vh&rwmXr1otHmLDy3WGC3)D8xRC+=P4+3H@Wu7ZnL6?)uyxR(@Uz2H=ghr z7t5UD3p?VZVQ$R!WMKXDcxkkOb$tg9i(F=@**>cug08z&9L1#e_hSuV5qNCB!z0VX z$&3RB0AOpN7fkU{;I^TpP@SNDYZEBX*syP(cV?2a0|VcH_7jN1S&ONzX*^W#4}NAnA*= z+k~^(2LPM)HTs9_{$P0jHLq`ME)E@vY3E7=M8>}DYv#uleLzbn*eqasXa}Weq=?VPV zR(=(7WZ>@2k)wg|ZUwNjhm4}aYx%vs$3zUY{zB&E+Tcj6XL+tSKPH@dh$4}} z6ILMM;>dq{{5WKBufr*%h{okg0O0h^8wE;K%=7lx`_DQb_7bT$d@->aow{IJTU2{-Ynn!ku5S)+;0%&(WHP%xHtXlQ zK1{bPK@P?_vq)5;{n1gmgJmm>%LkLkyr)rWNkkxPYMdq2jITSNJIoB;G+w*OltC34}tz@Vw~y+u`Zk-F^a4DZoSe>sW^kp z3eXJI4ujeTBip;F_M;f#=!mGp7&?Zg(G4zivvT{`%5izT2J2J5!N5`|xxA?MiT)y| z-31d#VN@qYO_ie&s|G)_HJ& zJ(;OrEMD#ISAJG0ASh8WtN{%o$O}(RH73zqKYPpXSGhrA#C?CA@nvIdJ8aWBePe(? zD${I)<}k=Oce#z+3355b4)1sIeHscf$Q75U6kZWR&?xh|^!79*^SW2fC6(ewkK;yY-I%Y;;2*XocTkMXnJJzbn z&%Kn(ynH8~S* zT?@~uw0C-&9*sxuo$2XVFtjz-$V6|9S|{$djc4#IWXyg4g#93@tButM_)x#Y$vLEo`d4?Ng3;%BXOr&y EA0dw>;s5{u delta 1855 zcmXYxeKebC8pdC?Q?o;w-PuD+Elp25IqaxbhcvV?UDJ>Fh@nD-d9_zC_R?LIicenqs^xkzM zkO^{$EJ5XAJSojf&q1gq_waJxXjn9oD`d694dN^&C{&0xS|Ak6qt4DlsHDxJh z2Uz?ZxmvpI_RH^m-mC-SD2hs96%%sHeZAyv>CSAqJ*%g{xS;03s+*ctPC}uw*L7g# zBHoc__a{Y+Md0D@0zSlOdVjcd;>1F z(3E}~I`NMvLJ+yx9spYNBeI*CP0{buN&m(;?UDG@$ucj@U?40WV|*p8XTwOUSbtRk zH=(e3oT_W5m}vzq>Dnqzq-JS#m2bXYV{Hcju|e)#QHpnbTz-+9M%YgX@)FFTsAI9% znDS>wC)$&_dS_))ssA?XkY;9PbD&Z90Bo05AUo}?0H6^WJ(nEA_6dlo7J`mE5rd{< zDA-WN4S}DjA=B%SDTN&t#6ixy`zey7&|-q$WG>;-^;+?>3{9kn&X8-#Zst9kk1R{l zoc-)mvf_vug(V{)6RM;J>3Wjm*;B^}m&GaP8K6}o$4`q%LXBcML}9WbeVL~16d6B+ zF+a98gxP*$;lEUC;a?vgsLXTTS+1fuqbXyw%vk@9aX-EUwj2$S6`*27&@nRF z+Z0s+>F=y_S^{TBQfn;lvw{A@yp6|x$QEh~q9V&I%0$bC9*p=Qlu1=i2sp}67s}+#l}~rzZwdHWut6@D)nRX?aJsrsq17xn;k7ydFS_6Rf(W24fZnQM- z8W>`xE@NsxsNpLAc;(?`!`CM124VAu$)OtuEfmNL`5UU zkL%&A2`ce2uXVp4YE3S7k`y}q|2_*75#;nF1wwO(tGqD>j%sFT{`<%iTxR^>_)M=hTohTf&gd^y#999F_irclq7qNt$~*u-%-Mbahy7>-Sh myURaqJ7eXv6=zgg0l$rWN^;)qcHaU9z@EW<*Z9v%xBmwTLd{tK diff --git a/assets/jp/raid/RPG_RAID_EASY.png b/assets/jp/raid/RPG_RAID_EASY.png index 216fcc9eec0fffb613d722e130a4a4460ce7f907..8b69b36bb7c93d3d624b8bb4f8f266ffbcb8d005 100644 GIT binary patch delta 1855 zcmXYxeKebC8pdC?Q?o;w-PuD+Elp25IqaxbhcvV?UDJ>Fh@nD-d9_zC_R?LIicenqs^xkzM zkO^{$EJ5XAJSojf&q1gq_waJxXjn9oD`d694dN^&C{&0xS|Ak6qt4DlsHDxJh z2Uz?ZxmvpI_RH^m-mC-SD2hs96%%sHeZAyv>CSAqJ*%g{xS;03s+*ctPC}uw*L7g# zBHoc__a{Y+Md0D@0zSlOdVjcd;>1F z(3E}~I`NMvLJ+yx9spYNBeI*CP0{buN&m(;?UDG@$ucj@U?40WV|*p8XTwOUSbtRk zH=(e3oT_W5m}vzq>Dnqzq-JS#m2bXYV{Hcju|e)#QHpnbTz-+9M%YgX@)FFTsAI9% znDS>wC)$&_dS_))ssA?XkY;9PbD&Z90Bo05AUo}?0H6^WJ(nEA_6dlo7J`mE5rd{< zDA-WN4S}DjA=B%SDTN&t#6ixy`zey7&|-q$WG>;-^;+?>3{9kn&X8-#Zst9kk1R{l zoc-)mvf_vug(V{)6RM;J>3Wjm*;B^}m&GaP8K6}o$4`q%LXBcML}9WbeVL~16d6B+ zF+a98gxP*$;lEUC;a?vgsLXTTS+1fuqbXyw%vk@9aX-EUwj2$S6`*27&@nRF z+Z0s+>F=y_S^{TBQfn;lvw{A@yp6|x$QEh~q9V&I%0$bC9*p=Qlu1=i2sp}67s}+#l}~rzZwdHWut6@D)nRX?aJsrsq17xn;k7ydFS_6Rf(W24fZnQM- z8W>`xE@NsxsNpLAc;(?`!`CM124VAu$)OtuEfmNL`5UU zkL%&A2`ce2uXVp4YE3S7k`y}q|2_*75#;nF1wwO(tGqD>j%sFT{`<%iTxR^>_)M=hTohTf&gd^y#999F_irclq7qNt$~*u-%-Mbahy7>-Sh myURaqJ7eXv6=zgg0l$rWN^;)qcHaU9z@EW<*Z9v%xBmwTLd{tK delta 1993 zcmXAqc~p{#8pgj?E1kSclP#t*PPo)B1AP_gt>x(c0shL+T_&-L-I0p42(j|=C2hU4|i64u6Q6Y42~d-gQZlK$ zY^N>ac`Vh&rwmXr1otHmLDy3WGC3)D8xRC+=P4+3H@Wu7ZnL6?)uyxR(@Uz2H=ghr z7t5UD3p?VZVQ$R!WMKXDcxkkOb$tg9i(F=@**>cug08z&9L1#e_hSuV5qNCB!z0VX z$&3RB0AOpN7fkU{;I^TpP@SNDYZEBX*syP(cV?2a0|VcH_7jN1S&ONzX*^W#4}NAnA*= z+k~^(2LPM)HTs9_{$P0jHLq`ME)E@vY3E7=M8>}DYv#uleLzbn*eqasXa}Weq=?VPV zR(=(7WZ>@2k)wg|ZUwNjhm4}aYx%vs$3zUY{zB&E+Tcj6XL+tSKPH@dh$4}} z6ILMM;>dq{{5WKBufr*%h{okg0O0h^8wE;K%=7lx`_DQb_7bT$d@->aow{IJTU2{-Ynn!ku5S)+;0%&(WHP%xHtXlQ zK1{bPK@P?_vq)5;{n1gmgJmm>%LkLkyr)rWNkkxPYMdq2jITSNJIoB;G+w*OltC34}tz@Vw~y+u`Zk-F^a4DZoSe>sW^kp z3eXJI4ujeTBip;F_M;f#=!mGp7&?Zg(G4zivvT{`%5izT2J2J5!N5`|xxA?MiT)y| z-31d#VN@qYO_ie&s|G)_HJ& zJ(;OrEMD#ISAJG0ASh8WtN{%o$O}(RH73zqKYPpXSGhrA#C?CA@nvIdJ8aWBePe(? zD${I)<}k=Oce#z+3355b4)1sIeHscf$Q75U6kZWR&?xh|^!79*^SW2fC6(ewkK;yY-I%Y;;2*XocTkMXnJJzbn z&%Kn(ynH8~S* zT?@~uw0C-&9*sxuo$2XVFtjz-$V6|9S|{$djc4#IWXyg4g#93@tButM_)x#Y$vLEo`d4?Ng3;%BXOr&y EA0dw>;s5{u diff --git a/assets/jp/raid/RPG_RAID_NORMAL.png b/assets/jp/raid/RPG_RAID_NORMAL.png index 8b69b36bb7c93d3d624b8bb4f8f266ffbcb8d005..216fcc9eec0fffb613d722e130a4a4460ce7f907 100644 GIT binary patch delta 1993 zcmXAqc~p{#8pgj?E1kSclP#t*PPo)B1AP_gt>x(c0shL+T_&-L-I0p42(j|=C2hU4|i64u6Q6Y42~d-gQZlK$ zY^N>ac`Vh&rwmXr1otHmLDy3WGC3)D8xRC+=P4+3H@Wu7ZnL6?)uyxR(@Uz2H=ghr z7t5UD3p?VZVQ$R!WMKXDcxkkOb$tg9i(F=@**>cug08z&9L1#e_hSuV5qNCB!z0VX z$&3RB0AOpN7fkU{;I^TpP@SNDYZEBX*syP(cV?2a0|VcH_7jN1S&ONzX*^W#4}NAnA*= z+k~^(2LPM)HTs9_{$P0jHLq`ME)E@vY3E7=M8>}DYv#uleLzbn*eqasXa}Weq=?VPV zR(=(7WZ>@2k)wg|ZUwNjhm4}aYx%vs$3zUY{zB&E+Tcj6XL+tSKPH@dh$4}} z6ILMM;>dq{{5WKBufr*%h{okg0O0h^8wE;K%=7lx`_DQb_7bT$d@->aow{IJTU2{-Ynn!ku5S)+;0%&(WHP%xHtXlQ zK1{bPK@P?_vq)5;{n1gmgJmm>%LkLkyr)rWNkkxPYMdq2jITSNJIoB;G+w*OltC34}tz@Vw~y+u`Zk-F^a4DZoSe>sW^kp z3eXJI4ujeTBip;F_M;f#=!mGp7&?Zg(G4zivvT{`%5izT2J2J5!N5`|xxA?MiT)y| z-31d#VN@qYO_ie&s|G)_HJ& zJ(;OrEMD#ISAJG0ASh8WtN{%o$O}(RH73zqKYPpXSGhrA#C?CA@nvIdJ8aWBePe(? zD${I)<}k=Oce#z+3355b4)1sIeHscf$Q75U6kZWR&?xh|^!79*^SW2fC6(ewkK;yY-I%Y;;2*XocTkMXnJJzbn z&%Kn(ynH8~S* zT?@~uw0C-&9*sxuo$2XVFtjz-$V6|9S|{$djc4#IWXyg4g#93@tButM_)x#Y$vLEo`d4?Ng3;%BXOr&y EA0dw>;s5{u delta 1855 zcmXYxeKebC8pdC?Q?o;w-PuD+Elp25IqaxbhcvV?UDJ>Fh@nD-d9_zC_R?LIicenqs^xkzM zkO^{$EJ5XAJSojf&q1gq_waJxXjn9oD`d694dN^&C{&0xS|Ak6qt4DlsHDxJh z2Uz?ZxmvpI_RH^m-mC-SD2hs96%%sHeZAyv>CSAqJ*%g{xS;03s+*ctPC}uw*L7g# zBHoc__a{Y+Md0D@0zSlOdVjcd;>1F z(3E}~I`NMvLJ+yx9spYNBeI*CP0{buN&m(;?UDG@$ucj@U?40WV|*p8XTwOUSbtRk zH=(e3oT_W5m}vzq>Dnqzq-JS#m2bXYV{Hcju|e)#QHpnbTz-+9M%YgX@)FFTsAI9% znDS>wC)$&_dS_))ssA?XkY;9PbD&Z90Bo05AUo}?0H6^WJ(nEA_6dlo7J`mE5rd{< zDA-WN4S}DjA=B%SDTN&t#6ixy`zey7&|-q$WG>;-^;+?>3{9kn&X8-#Zst9kk1R{l zoc-)mvf_vug(V{)6RM;J>3Wjm*;B^}m&GaP8K6}o$4`q%LXBcML}9WbeVL~16d6B+ zF+a98gxP*$;lEUC;a?vgsLXTTS+1fuqbXyw%vk@9aX-EUwj2$S6`*27&@nRF z+Z0s+>F=y_S^{TBQfn;lvw{A@yp6|x$QEh~q9V&I%0$bC9*p=Qlu1=i2sp}67s}+#l}~rzZwdHWut6@D)nRX?aJsrsq17xn;k7ydFS_6Rf(W24fZnQM- z8W>`xE@NsxsNpLAc;(?`!`CM124VAu$)OtuEfmNL`5UU zkL%&A2`ce2uXVp4YE3S7k`y}q|2_*75#;nF1wwO(tGqD>j%sFT{`<%iTxR^>_)M=hTohTf&gd^y#999F_irclq7qNt$~*u-%-Mbahy7>-Sh myURaqJ7eXv6=zgg0l$rWN^;)qcHaU9z@EW<*Z9v%xBmwTLd{tK diff --git a/assets/tw/raid/RPG_RAID_EASY.png b/assets/tw/raid/RPG_RAID_EASY.png index 216fcc9eec0fffb613d722e130a4a4460ce7f907..8b69b36bb7c93d3d624b8bb4f8f266ffbcb8d005 100644 GIT binary patch delta 1855 zcmXYxeKebC8pdC?Q?o;w-PuD+Elp25IqaxbhcvV?UDJ>Fh@nD-d9_zC_R?LIicenqs^xkzM zkO^{$EJ5XAJSojf&q1gq_waJxXjn9oD`d694dN^&C{&0xS|Ak6qt4DlsHDxJh z2Uz?ZxmvpI_RH^m-mC-SD2hs96%%sHeZAyv>CSAqJ*%g{xS;03s+*ctPC}uw*L7g# zBHoc__a{Y+Md0D@0zSlOdVjcd;>1F z(3E}~I`NMvLJ+yx9spYNBeI*CP0{buN&m(;?UDG@$ucj@U?40WV|*p8XTwOUSbtRk zH=(e3oT_W5m}vzq>Dnqzq-JS#m2bXYV{Hcju|e)#QHpnbTz-+9M%YgX@)FFTsAI9% znDS>wC)$&_dS_))ssA?XkY;9PbD&Z90Bo05AUo}?0H6^WJ(nEA_6dlo7J`mE5rd{< zDA-WN4S}DjA=B%SDTN&t#6ixy`zey7&|-q$WG>;-^;+?>3{9kn&X8-#Zst9kk1R{l zoc-)mvf_vug(V{)6RM;J>3Wjm*;B^}m&GaP8K6}o$4`q%LXBcML}9WbeVL~16d6B+ zF+a98gxP*$;lEUC;a?vgsLXTTS+1fuqbXyw%vk@9aX-EUwj2$S6`*27&@nRF z+Z0s+>F=y_S^{TBQfn;lvw{A@yp6|x$QEh~q9V&I%0$bC9*p=Qlu1=i2sp}67s}+#l}~rzZwdHWut6@D)nRX?aJsrsq17xn;k7ydFS_6Rf(W24fZnQM- z8W>`xE@NsxsNpLAc;(?`!`CM124VAu$)OtuEfmNL`5UU zkL%&A2`ce2uXVp4YE3S7k`y}q|2_*75#;nF1wwO(tGqD>j%sFT{`<%iTxR^>_)M=hTohTf&gd^y#999F_irclq7qNt$~*u-%-Mbahy7>-Sh myURaqJ7eXv6=zgg0l$rWN^;)qcHaU9z@EW<*Z9v%xBmwTLd{tK delta 1993 zcmXAqc~p{#8pgj?E1kSclP#t*PPo)B1AP_gt>x(c0shL+T_&-L-I0p42(j|=C2hU4|i64u6Q6Y42~d-gQZlK$ zY^N>ac`Vh&rwmXr1otHmLDy3WGC3)D8xRC+=P4+3H@Wu7ZnL6?)uyxR(@Uz2H=ghr z7t5UD3p?VZVQ$R!WMKXDcxkkOb$tg9i(F=@**>cug08z&9L1#e_hSuV5qNCB!z0VX z$&3RB0AOpN7fkU{;I^TpP@SNDYZEBX*syP(cV?2a0|VcH_7jN1S&ONzX*^W#4}NAnA*= z+k~^(2LPM)HTs9_{$P0jHLq`ME)E@vY3E7=M8>}DYv#uleLzbn*eqasXa}Weq=?VPV zR(=(7WZ>@2k)wg|ZUwNjhm4}aYx%vs$3zUY{zB&E+Tcj6XL+tSKPH@dh$4}} z6ILMM;>dq{{5WKBufr*%h{okg0O0h^8wE;K%=7lx`_DQb_7bT$d@->aow{IJTU2{-Ynn!ku5S)+;0%&(WHP%xHtXlQ zK1{bPK@P?_vq)5;{n1gmgJmm>%LkLkyr)rWNkkxPYMdq2jITSNJIoB;G+w*OltC34}tz@Vw~y+u`Zk-F^a4DZoSe>sW^kp z3eXJI4ujeTBip;F_M;f#=!mGp7&?Zg(G4zivvT{`%5izT2J2J5!N5`|xxA?MiT)y| z-31d#VN@qYO_ie&s|G)_HJ& zJ(;OrEMD#ISAJG0ASh8WtN{%o$O}(RH73zqKYPpXSGhrA#C?CA@nvIdJ8aWBePe(? zD${I)<}k=Oce#z+3355b4)1sIeHscf$Q75U6kZWR&?xh|^!79*^SW2fC6(ewkK;yY-I%Y;;2*XocTkMXnJJzbn z&%Kn(ynH8~S* zT?@~uw0C-&9*sxuo$2XVFtjz-$V6|9S|{$djc4#IWXyg4g#93@tButM_)x#Y$vLEo`d4?Ng3;%BXOr&y EA0dw>;s5{u diff --git a/assets/tw/raid/RPG_RAID_NORMAL.png b/assets/tw/raid/RPG_RAID_NORMAL.png index 8b69b36bb7c93d3d624b8bb4f8f266ffbcb8d005..216fcc9eec0fffb613d722e130a4a4460ce7f907 100644 GIT binary patch delta 1993 zcmXAqc~p{#8pgj?E1kSclP#t*PPo)B1AP_gt>x(c0shL+T_&-L-I0p42(j|=C2hU4|i64u6Q6Y42~d-gQZlK$ zY^N>ac`Vh&rwmXr1otHmLDy3WGC3)D8xRC+=P4+3H@Wu7ZnL6?)uyxR(@Uz2H=ghr z7t5UD3p?VZVQ$R!WMKXDcxkkOb$tg9i(F=@**>cug08z&9L1#e_hSuV5qNCB!z0VX z$&3RB0AOpN7fkU{;I^TpP@SNDYZEBX*syP(cV?2a0|VcH_7jN1S&ONzX*^W#4}NAnA*= z+k~^(2LPM)HTs9_{$P0jHLq`ME)E@vY3E7=M8>}DYv#uleLzbn*eqasXa}Weq=?VPV zR(=(7WZ>@2k)wg|ZUwNjhm4}aYx%vs$3zUY{zB&E+Tcj6XL+tSKPH@dh$4}} z6ILMM;>dq{{5WKBufr*%h{okg0O0h^8wE;K%=7lx`_DQb_7bT$d@->aow{IJTU2{-Ynn!ku5S)+;0%&(WHP%xHtXlQ zK1{bPK@P?_vq)5;{n1gmgJmm>%LkLkyr)rWNkkxPYMdq2jITSNJIoB;G+w*OltC34}tz@Vw~y+u`Zk-F^a4DZoSe>sW^kp z3eXJI4ujeTBip;F_M;f#=!mGp7&?Zg(G4zivvT{`%5izT2J2J5!N5`|xxA?MiT)y| z-31d#VN@qYO_ie&s|G)_HJ& zJ(;OrEMD#ISAJG0ASh8WtN{%o$O}(RH73zqKYPpXSGhrA#C?CA@nvIdJ8aWBePe(? zD${I)<}k=Oce#z+3355b4)1sIeHscf$Q75U6kZWR&?xh|^!79*^SW2fC6(ewkK;yY-I%Y;;2*XocTkMXnJJzbn z&%Kn(ynH8~S* zT?@~uw0C-&9*sxuo$2XVFtjz-$V6|9S|{$djc4#IWXyg4g#93@tButM_)x#Y$vLEo`d4?Ng3;%BXOr&y EA0dw>;s5{u delta 1855 zcmXYxeKebC8pdC?Q?o;w-PuD+Elp25IqaxbhcvV?UDJ>Fh@nD-d9_zC_R?LIicenqs^xkzM zkO^{$EJ5XAJSojf&q1gq_waJxXjn9oD`d694dN^&C{&0xS|Ak6qt4DlsHDxJh z2Uz?ZxmvpI_RH^m-mC-SD2hs96%%sHeZAyv>CSAqJ*%g{xS;03s+*ctPC}uw*L7g# zBHoc__a{Y+Md0D@0zSlOdVjcd;>1F z(3E}~I`NMvLJ+yx9spYNBeI*CP0{buN&m(;?UDG@$ucj@U?40WV|*p8XTwOUSbtRk zH=(e3oT_W5m}vzq>Dnqzq-JS#m2bXYV{Hcju|e)#QHpnbTz-+9M%YgX@)FFTsAI9% znDS>wC)$&_dS_))ssA?XkY;9PbD&Z90Bo05AUo}?0H6^WJ(nEA_6dlo7J`mE5rd{< zDA-WN4S}DjA=B%SDTN&t#6ixy`zey7&|-q$WG>;-^;+?>3{9kn&X8-#Zst9kk1R{l zoc-)mvf_vug(V{)6RM;J>3Wjm*;B^}m&GaP8K6}o$4`q%LXBcML}9WbeVL~16d6B+ zF+a98gxP*$;lEUC;a?vgsLXTTS+1fuqbXyw%vk@9aX-EUwj2$S6`*27&@nRF z+Z0s+>F=y_S^{TBQfn;lvw{A@yp6|x$QEh~q9V&I%0$bC9*p=Qlu1=i2sp}67s}+#l}~rzZwdHWut6@D)nRX?aJsrsq17xn;k7ydFS_6Rf(W24fZnQM- z8W>`xE@NsxsNpLAc;(?`!`CM124VAu$)OtuEfmNL`5UU zkL%&A2`ce2uXVp4YE3S7k`y}q|2_*75#;nF1wwO(tGqD>j%sFT{`<%iTxR^>_)M=hTohTf&gd^y#999F_irclq7qNt$~*u-%-Mbahy7>-Sh myURaqJ7eXv6=zgg0l$rWN^;)qcHaU9z@EW<*Z9v%xBmwTLd{tK diff --git a/module/raid/assets.py b/module/raid/assets.py index 2f1157766..bf94c56c3 100644 --- a/module/raid/assets.py +++ b/module/raid/assets.py @@ -63,10 +63,10 @@ RPG_GOTO_STAGE = Button(area={'cn': (55, 495, 80, 520), 'en': (55, 495, 80, 520) RPG_GOTO_STORY = Button(area={'cn': (59, 491, 84, 516), 'en': (59, 491, 84, 516), 'jp': (59, 491, 84, 516), 'tw': (59, 491, 84, 516)}, color={'cn': (182, 122, 105), 'en': (182, 122, 105), 'jp': (182, 122, 105), 'tw': (182, 122, 105)}, button={'cn': (59, 491, 84, 516), 'en': (59, 491, 84, 516), 'jp': (59, 491, 84, 516), 'tw': (59, 491, 84, 516)}, file={'cn': './assets/cn/raid/RPG_GOTO_STORY.png', 'en': './assets/en/raid/RPG_GOTO_STORY.png', 'jp': './assets/jp/raid/RPG_GOTO_STORY.png', 'tw': './assets/tw/raid/RPG_GOTO_STORY.png'}) RPG_HOME = Button(area={'cn': (1222, 29, 1240, 51), 'en': (1222, 29, 1240, 51), 'jp': (1222, 29, 1240, 51), 'tw': (1222, 29, 1240, 51)}, color={'cn': (197, 181, 158), 'en': (197, 181, 158), 'jp': (197, 181, 158), 'tw': (197, 181, 158)}, button={'cn': (1222, 29, 1240, 51), 'en': (1222, 29, 1240, 51), 'jp': (1222, 29, 1240, 51), 'tw': (1222, 29, 1240, 51)}, file={'cn': './assets/cn/raid/RPG_HOME.png', 'en': './assets/en/raid/RPG_HOME.png', 'jp': './assets/jp/raid/RPG_HOME.png', 'tw': './assets/tw/raid/RPG_HOME.png'}) RPG_LEAVE_CITY = Button(area={'cn': (688, 642, 711, 664), 'en': (688, 642, 711, 664), 'jp': (688, 642, 711, 664), 'tw': (688, 642, 711, 664)}, color={'cn': (158, 130, 109), 'en': (158, 130, 109), 'jp': (158, 130, 109), 'tw': (158, 130, 109)}, button={'cn': (688, 642, 711, 664), 'en': (688, 642, 711, 664), 'jp': (688, 642, 711, 664), 'tw': (688, 642, 711, 664)}, file={'cn': './assets/cn/raid/RPG_LEAVE_CITY.png', 'en': './assets/en/raid/RPG_LEAVE_CITY.png', 'jp': './assets/jp/raid/RPG_LEAVE_CITY.png', 'tw': './assets/tw/raid/RPG_LEAVE_CITY.png'}) -RPG_RAID_EASY = Button(area={'cn': (313, 259, 343, 289), 'en': (313, 259, 343, 289), 'jp': (313, 259, 343, 289), 'tw': (313, 259, 343, 289)}, color={'cn': (147, 61, 62), 'en': (147, 61, 62), 'jp': (147, 61, 62), 'tw': (147, 61, 62)}, button={'cn': (313, 259, 343, 289), 'en': (313, 259, 343, 289), 'jp': (313, 259, 343, 289), 'tw': (313, 259, 343, 289)}, file={'cn': './assets/cn/raid/RPG_RAID_EASY.png', 'en': './assets/en/raid/RPG_RAID_EASY.png', 'jp': './assets/jp/raid/RPG_RAID_EASY.png', 'tw': './assets/tw/raid/RPG_RAID_EASY.png'}) +RPG_RAID_EASY = Button(area={'cn': (149, 561, 179, 591), 'en': (149, 561, 179, 591), 'jp': (149, 561, 179, 591), 'tw': (149, 561, 179, 591)}, color={'cn': (152, 57, 59), 'en': (152, 57, 59), 'jp': (152, 57, 59), 'tw': (152, 57, 59)}, button={'cn': (149, 561, 179, 591), 'en': (149, 561, 179, 591), 'jp': (149, 561, 179, 591), 'tw': (149, 561, 179, 591)}, file={'cn': './assets/cn/raid/RPG_RAID_EASY.png', 'en': './assets/en/raid/RPG_RAID_EASY.png', 'jp': './assets/jp/raid/RPG_RAID_EASY.png', 'tw': './assets/tw/raid/RPG_RAID_EASY.png'}) RPG_RAID_EX = Button(area={'cn': (949, 518, 976, 565), 'en': (949, 518, 976, 565), 'jp': (949, 518, 976, 565), 'tw': (949, 518, 976, 565)}, color={'cn': (166, 66, 69), 'en': (166, 66, 69), 'jp': (166, 66, 69), 'tw': (166, 66, 69)}, button={'cn': (949, 518, 976, 565), 'en': (949, 518, 976, 565), 'jp': (949, 518, 976, 565), 'tw': (949, 518, 976, 565)}, file={'cn': './assets/cn/raid/RPG_RAID_EX.png', 'en': './assets/en/raid/RPG_RAID_EX.png', 'jp': './assets/jp/raid/RPG_RAID_EX.png', 'tw': './assets/tw/raid/RPG_RAID_EX.png'}) RPG_RAID_HARD = Button(area={'cn': (475, 108, 505, 138), 'en': (475, 108, 505, 138), 'jp': (475, 108, 505, 138), 'tw': (475, 108, 505, 138)}, color={'cn': (97, 59, 59), 'en': (97, 59, 59), 'jp': (97, 59, 59), 'tw': (97, 59, 59)}, button={'cn': (475, 108, 505, 138), 'en': (475, 108, 505, 138), 'jp': (475, 108, 505, 138), 'tw': (475, 108, 505, 138)}, file={'cn': './assets/cn/raid/RPG_RAID_HARD.png', 'en': './assets/en/raid/RPG_RAID_HARD.png', 'jp': './assets/jp/raid/RPG_RAID_HARD.png', 'tw': './assets/tw/raid/RPG_RAID_HARD.png'}) -RPG_RAID_NORMAL = Button(area={'cn': (149, 561, 179, 591), 'en': (149, 561, 179, 591), 'jp': (149, 561, 179, 591), 'tw': (149, 561, 179, 591)}, color={'cn': (152, 57, 59), 'en': (152, 57, 59), 'jp': (152, 57, 59), 'tw': (152, 57, 59)}, button={'cn': (149, 561, 179, 591), 'en': (149, 561, 179, 591), 'jp': (149, 561, 179, 591), 'tw': (149, 561, 179, 591)}, file={'cn': './assets/cn/raid/RPG_RAID_NORMAL.png', 'en': './assets/en/raid/RPG_RAID_NORMAL.png', 'jp': './assets/jp/raid/RPG_RAID_NORMAL.png', 'tw': './assets/tw/raid/RPG_RAID_NORMAL.png'}) +RPG_RAID_NORMAL = Button(area={'cn': (313, 259, 343, 289), 'en': (313, 259, 343, 289), 'jp': (313, 259, 343, 289), 'tw': (313, 259, 343, 289)}, color={'cn': (147, 61, 62), 'en': (147, 61, 62), 'jp': (147, 61, 62), 'tw': (147, 61, 62)}, button={'cn': (313, 259, 343, 289), 'en': (313, 259, 343, 289), 'jp': (313, 259, 343, 289), 'tw': (313, 259, 343, 289)}, file={'cn': './assets/cn/raid/RPG_RAID_NORMAL.png', 'en': './assets/en/raid/RPG_RAID_NORMAL.png', 'jp': './assets/jp/raid/RPG_RAID_NORMAL.png', 'tw': './assets/tw/raid/RPG_RAID_NORMAL.png'}) RPG_STATUS_POPUP = Button(area={'cn': (1120, 97, 1144, 121), 'en': (1120, 97, 1144, 121), 'jp': (1120, 97, 1144, 121), 'tw': (1120, 97, 1144, 121)}, color={'cn': (158, 165, 176), 'en': (158, 165, 176), 'jp': (158, 165, 176), 'tw': (158, 165, 176)}, button={'cn': (1120, 97, 1144, 121), 'en': (1120, 97, 1144, 121), 'jp': (1120, 97, 1144, 121), 'tw': (1120, 97, 1144, 121)}, file={'cn': './assets/cn/raid/RPG_STATUS_POPUP.png', 'en': './assets/en/raid/RPG_STATUS_POPUP.png', 'jp': './assets/jp/raid/RPG_STATUS_POPUP.png', 'tw': './assets/tw/raid/RPG_STATUS_POPUP.png'}) SURUGA_OCR_REMAIN_EASY = Button(area={'cn': (1093, 549, 1141, 563), 'en': (1093, 549, 1141, 563), 'jp': (1096, 549, 1141, 563), 'tw': (1096, 549, 1141, 563)}, color={'cn': (161, 161, 161), 'en': (161, 161, 161), 'jp': (155, 155, 155), 'tw': (155, 155, 155)}, button={'cn': (1093, 549, 1141, 563), 'en': (1093, 549, 1141, 563), 'jp': (1096, 549, 1141, 563), 'tw': (1096, 549, 1141, 563)}, file={'cn': './assets/cn/raid/SURUGA_OCR_REMAIN_EASY.png', 'en': './assets/en/raid/SURUGA_OCR_REMAIN_EASY.png', 'jp': './assets/jp/raid/SURUGA_OCR_REMAIN_EASY.png', 'tw': './assets/tw/raid/SURUGA_OCR_REMAIN_EASY.png'}) SURUGA_OCR_REMAIN_HARD = Button(area={'cn': (1071, 318, 1118, 332), 'en': (1071, 318, 1118, 332), 'jp': (1073, 318, 1118, 331), 'tw': (1079, 318, 1118, 332)}, color={'cn': (158, 158, 159), 'en': (158, 158, 159), 'jp': (173, 173, 173), 'tw': (168, 168, 168)}, button={'cn': (1071, 318, 1118, 332), 'en': (1071, 318, 1118, 332), 'jp': (1073, 318, 1118, 331), 'tw': (1079, 318, 1118, 332)}, file={'cn': './assets/cn/raid/SURUGA_OCR_REMAIN_HARD.png', 'en': './assets/en/raid/SURUGA_OCR_REMAIN_HARD.png', 'jp': './assets/jp/raid/SURUGA_OCR_REMAIN_HARD.png', 'tw': './assets/tw/raid/SURUGA_OCR_REMAIN_HARD.png'}) From c98a5a7ad905209dd1254129cad50bccde7c5cfd Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 29 Mar 2024 03:23:20 +0800 Subject: [PATCH 30/96] Upd: [EN] BATTLE_PREPARATION it's 5 frames now - - --- assets/en/combat/BATTLE_PREPARATION.gif | Bin 17527 -> 22003 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/en/combat/BATTLE_PREPARATION.gif b/assets/en/combat/BATTLE_PREPARATION.gif index dc0e69021de601e1507d0025a4ec3ed8b76f00c1..9bb9622ce3922a1bb090e14a31a9059cfd71b91d 100644 GIT binary patch delta 2349 zcmWlVdsGv50)>B*$7E)b!KqLo(%Qkdeduhhywonfs4cEWyH!Ai07}4648})zNJa<& zYrt6pCEAF=7HZq22028;HI1MIjfIq02wM(}WoztfCu=Jsww9&meCIp&-ajv21^x0F zWIw##d|>%3vv_W)-q+3zUE_w@IbS8a!xJpR0pPOrzy~B4RqE9rh~)8bs7SW>9LsW)N+nu&Y=xBiUSTU->K$1Q+Y=g z??~l3)m*O|&W)SM%WbENW}+h+2PZM@?x&asXA(`y5cEc0jc7Mlm>rOQT}4WrG) zqs`htv)cUn{8t2l2J^o8tDr3NNAq`^ZGxF1WD4}Rm4vQ`_4kZLL!Qw`W#iX^;>wu& zNn=m`%{zyBm#ui{8T&nT{0s2MMGD@;3Z(01Zq7-7<^;<(2EUz2)KG?3*4)G1wh$2u z*Q>tqWaN>;a5B-j{1TM@+u?EN;%4r(C!R5I)ju0vNGsmcgU|hMgCi-g1H4iC(?%&A;B#Ca(8y}W5{azi$Pu_hwzjei~48dR0UC+Y* zEk|VvATqgTeDS!V=7rVwuq|iW>hgbKzE+HH_Qi>HeQgat7yt13&dJ-Krmcr};c8)0 znRGK-Hvhm`b=tc4FV&-YaXqW^3+~PpX%{AlUZo*P*h=BWs{O~?p24&Ik+a{NV|nDfus5f?kgSL{?x4zt`w8*$4@hkHrg8bf2!ZS{s7xlikee_NI)Ehh*X!Y3 z4>ruX?fP|9-pYIbx?p(0sSt+QX!sqyU$|gtM#hPBD=r|~1Qze;-jCMyex+H5gsoPI z!=Uhq>UFKpC`G$vjee2h7-ssLru<~o11Ve9HE*j}s)+|-wyqm5ZTkLE{)f-yDOUoR zDch<1@Y!=Auhoa}8UKdfReR+VHqy z(Wm8I5Z5D&0? zTK3}t>174xTbM1T^pKne8LBL?M)(z#o@vjuZdW5g=v^R`QF??1GNqtZi9cMFEe#5< z@aUl+h;)NFv>?oNSV#+M6ObL=l)IPHI_#n^Re6VcV2=yGLd*P&NP8HpXJtkL!*jAC zG|~}P78fiAL6GReGD*qyW@#*?3bl##PkYdF6q-yNL?|)01AUcJJ*$Mz1<_I$l$i+W zSn)A$%F}xK3M*5y;8Bc9Y!fyz(h-ex38k7%%brfv<7%=Hv%`HsEI(Kr5`@QGh=oZX zBcv3in&CpWN6TtRRR3|=PEyw370+Sm*9i0!iRyyJ=pLYtrjUA9`CujOmQ-L=Ro450 z`W@JT=}xmv5n%ucAYO@#XpUzlf>;Va&7fmU`alp)B#n0E-nJb46WxiOUi6R> zrZygXE+|;05s*q%g4lt~4((A&Xm3idO*ZAm{Rz^(1WaWKFlB+NoK!tZ@&%k5!TEYYmHa3jMA$jS>);wNga#c9!7kV z=*^ftH;9l=6V4E)1slA=r6i;^f+S7JYT}@ffouwFgRS7Z6hS`AXm7!r5wj5-4~;E+ z(Ti1i;q4Pgi9+~f5E)3wiX580MO>snQWAt)0jk~DXx&@lj|=&lX;`!*J4z!R)?gP| zfj%a+!FnHTU<%hPIh;YC`=Jhhc*|t`o)!}V7iC*37p>ig*H8j$G>`?s@MWlus;pC# z)ZfDI+hnWgik@g_+3nLGPE9rm{eshOJc+7T7nZDeQgFhbJA+0BfN0-h@m&%hbfF3b zR1>d~5@J=dg-atDAZwN>pnE$&`vh3-l9&~e2GI1N{nE?dTw40uB`UJ*)s=0p?QDxynTw*b L;H2jv2(0`+cGVJ> delta 11 Scmeyon(=!F Date: Fri, 29 Mar 2024 03:28:29 +0800 Subject: [PATCH 31/96] Fix: Continue gacha even if UR exchange point is full (#3582) --- module/gacha/gacha_reward.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/module/gacha/gacha_reward.py b/module/gacha/gacha_reward.py index 70ebe4119..0460cc951 100644 --- a/module/gacha/gacha_reward.py +++ b/module/gacha/gacha_reward.py @@ -68,6 +68,10 @@ class RewardGacha(GachaUI, GeneralShop, Retirement): ocr_submit = OCR_BUILD_SUBMIT_WW_COUNT confirm_timer.reset() continue + # Continue gacha even if UR exchange point is full + if self.handle_popup_confirm('GACHA_PREP'): + confirm_timer.reset() + continue # End if self.appear(BUILD_PLUS, offset=index_offset) \ From de1bcde0544e9e497805477c6666186e70d59bff Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 29 Mar 2024 09:22:24 +0800 Subject: [PATCH 32/96] Upd: [EN] BATTLE_PREPARATION --- assets/en/combat/BATTLE_PREPARATION.gif | Bin 22003 -> 22082 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/en/combat/BATTLE_PREPARATION.gif b/assets/en/combat/BATTLE_PREPARATION.gif index 9bb9622ce3922a1bb090e14a31a9059cfd71b91d..d368984caec140ab68abf1ede5d77b9878f38517 100644 GIT binary patch delta 2781 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 LdG3UWK;r)aw`B{c delta 2345 zcmWlVc~ld30>^)oV=^w;7>{sBMhF3G zz*&J3ZN#93+JhS85fRrkf)X?qQeq)&c`%kOvDZ%4Rz_?s%f9z{pZEQK|NM4-4*mKW zWHYU=7SAo#d)v6d8{A+U=WXK$n|W_D=WXT(8+q?E7T#OKdrf>_GvC+9yBoQ_X0ET1 zb2oGDM!wI&_to%j3-7Ms`YfE=!nqnb*R*T=)9#w4hI3drM~&Z6!}pnZw~2Ebc$bNH z890}Ta~XJdA?MN;@-8jsO6I!^d{-gYW#YOFTvs9ArJd^9&UIA#_A+@Mo0e~+I+N!e|j^?B#><#M*AGZ~> zq@C2SXeWiiPJk9r<-3{oTO-kV?{B*|n*F)?_EOmRihcN`GNgUxUu`Xw60$V)XS3^t zKU<73uLR|3bW`#yGi~;-qKWpK^8cQDR5O`S`7B-TboxpV_?OZ>A?DzB!e}!d5H3F- z)46&g&$x0|Rpj-g8*Wknjo-@#B#Ca-8y^)l{!tmiPu_nuw`IldG{Ij|ozKJnDMe)p zATl{;eEFoTYR>8h*w(YHwYk4C-zdhmcw@x6-q!kG3V(ca*W}$#Q`W<~akVg^M7o77 znSbz{I%Qq#SL%_RnC{iNdH3gvvQsJ%L$KSn`7&g2`_eK8AK*HbCiIR%w1#{m+H&qu7Tcc^SgcYbRg~}6@SHpeM z(HwGK$lFsMNLD}_cT%N8eT4X>ha|RV^O*clm_T*}lqZs%$ZZ%1?LZR!+s)9<7k7KIx zC8g+4SIWe|r5k2BQ5O5hcfpp5PEJDRgI9rU_l&EVm3mCYl)mUv7F(J?EWmPU*-s0k zR~49dVWybULvk9VsWQYG;n!4Zx-HwXLyZKW_kd7F=@A;pl!6u|{%BFAG$6djqlW_^ z+y!RSf)M8sAuXthLw0(S?q5x5w~4+|P&&mkXNQYTj zOrQ`1K)e%6CnYqgI0Xd-b4p~T!y^mR)0yb?YiK#QGFdOW0K#m7BK z&+6!FtW3><$5AS=RoK8thc(hAlxh|&dp1>vtI2%K2KNTA+(2Pa03LNBW+ru%kW!Rt zh7;KlDXSt;{l_J{NLjr{Je#H8Akfn!stXt+yMaEELh78Q1Ld?!Qif3#86ODhc47x3 zGnXo{Z(R6CgaO2XSS2#7IguU@qAC0ggN`z({Q)?hG}@H=TC?y^bSHOt(8EfY+IalM zfMA(MKq_@1J`wT4-eFQ&aVe#jl=>JfmIbq-RWj;eE?F%0DI0Z?dH@i6S|rk7Z>W zSd(bVBOLI<+YqqCnvzQ}7$dsPp6F-Gc7Zopv>!;mJ9-+ip4Qva zx;4@|`zf#fXwflq_Tx}NBY{1qsEj>RaZPCo|5)fM7p;k^8KzS2#l1g5;2W$pdF($X z+tBS+Vf(tri#{}N5K@L!L=}NpS4klQ7nF6&q z(b_n;+GeQ-D8r(sC-whkWiA@eB_N4Y&_Jg5DzLYwC{1MM*mB^705-&=4l&3^k~yH<*Jnk%ge5)7Qst2>qx7n97P)>@Qp=)uhY;^1dOK?G zEh6aCxU<9=!3K|TDG6zfAVE{Knm8n6Agcn~V9onJNs!Aj+B@(Tq}m8h1V`t;?7=EL z@Q#UNL_T~ffb_>@gbz;NA}&xMNpZq$0M%}6u9{;_;h3&SZG|dgK@cHy=uU068r4jb`qLCU4Tn(` z7!98w;r)wYFNvRZB5$FBtFd4PE2^a>_wOXND$liIpWU&FE(8X?7|trle=GF3={+KgBmD^F-Ndv zPK~6WtXigk9_$2d6JWVhQmv5GgT{w#S6==0%F^GjP~okwuWWr|S8JrIx*#G0PIw7| Hz{>vtr796l From 555fb2ad29eca66eac0614817450da277d023b4b Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Mon, 1 Apr 2024 21:07:34 +0800 Subject: [PATCH 33/96] Upd: Assets FORMATION to adapt to W15 --- assets/cn/handler/FORMATION_1.BUTTON.png | Bin 0 -> 9809 bytes assets/cn/handler/FORMATION_1.png | Bin 9809 -> 11357 bytes assets/cn/handler/FORMATION_2.BUTTON.png | Bin 0 -> 10286 bytes assets/cn/handler/FORMATION_2.png | Bin 10286 -> 11630 bytes assets/cn/handler/FORMATION_3.BUTTON.png | Bin 0 -> 10313 bytes assets/cn/handler/FORMATION_3.png | Bin 10313 -> 11610 bytes assets/en/handler/FORMATION_1.BUTTON.png | Bin 0 -> 9809 bytes assets/en/handler/FORMATION_1.png | Bin 9809 -> 11357 bytes assets/en/handler/FORMATION_2.BUTTON.png | Bin 0 -> 10286 bytes assets/en/handler/FORMATION_2.png | Bin 10286 -> 11630 bytes assets/en/handler/FORMATION_3.BUTTON.png | Bin 0 -> 10313 bytes assets/en/handler/FORMATION_3.png | Bin 10313 -> 11610 bytes assets/jp/handler/FORMATION_1.BUTTON.png | Bin 0 -> 9809 bytes assets/jp/handler/FORMATION_1.png | Bin 9809 -> 11357 bytes assets/jp/handler/FORMATION_2.BUTTON.png | Bin 0 -> 10286 bytes assets/jp/handler/FORMATION_2.png | Bin 10286 -> 11630 bytes assets/jp/handler/FORMATION_3.BUTTON.png | Bin 0 -> 10313 bytes assets/jp/handler/FORMATION_3.png | Bin 10313 -> 11610 bytes assets/tw/handler/FORMATION_1.BUTTON.png | Bin 0 -> 9809 bytes assets/tw/handler/FORMATION_1.png | Bin 9809 -> 11357 bytes assets/tw/handler/FORMATION_2.BUTTON.png | Bin 0 -> 10286 bytes assets/tw/handler/FORMATION_2.png | Bin 10286 -> 11630 bytes assets/tw/handler/FORMATION_3.BUTTON.png | Bin 0 -> 10313 bytes assets/tw/handler/FORMATION_3.png | Bin 10313 -> 11610 bytes module/handler/assets.py | 6 +++--- 25 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 assets/cn/handler/FORMATION_1.BUTTON.png create mode 100644 assets/cn/handler/FORMATION_2.BUTTON.png create mode 100644 assets/cn/handler/FORMATION_3.BUTTON.png create mode 100644 assets/en/handler/FORMATION_1.BUTTON.png create mode 100644 assets/en/handler/FORMATION_2.BUTTON.png create mode 100644 assets/en/handler/FORMATION_3.BUTTON.png create mode 100644 assets/jp/handler/FORMATION_1.BUTTON.png create mode 100644 assets/jp/handler/FORMATION_2.BUTTON.png create mode 100644 assets/jp/handler/FORMATION_3.BUTTON.png create mode 100644 assets/tw/handler/FORMATION_1.BUTTON.png create mode 100644 assets/tw/handler/FORMATION_2.BUTTON.png create mode 100644 assets/tw/handler/FORMATION_3.BUTTON.png diff --git a/assets/cn/handler/FORMATION_1.BUTTON.png b/assets/cn/handler/FORMATION_1.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..621645902a9a17e8d9254104f403d1c80db905de GIT binary patch literal 9809 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 literal 0 HcmV?d00001 diff --git a/assets/cn/handler/FORMATION_1.png b/assets/cn/handler/FORMATION_1.png index 621645902a9a17e8d9254104f403d1c80db905de..309290142866bbbc0d4fe9bcec0c55070eb5d390 100644 GIT binary patch literal 11357 zcmeHNcTf{+w2vSlh$0{&f|S@$38YDnh=eZE1(X&-0=YmENq|rSC`uO_h;$L@A|fKv z<Qr&> z@ML`1-Rkq$$K}R7qP-FCiusxJbH#d(O%E=~-#fe%v1Hl9J_lm72Mv(3vo9Z6 zRbhx=@c0~TAHluKTa#@wy@f1%EwzHjWUWpm8)Iz z^c_;G5vtJ$Hn|PI_L#CDcEe*O0>>e<2)`rGS4U|a!p(i@IWv4uhO0REp(P*h*uK>~ zc=2hh4^`dwQYGn27N5seNs#EH9`R9%zO_9B`$!ai8#3$)8c?gTnENDQT;If9$5GK( ze_fpGWU@csX;XdQdylz;2Ai6+#)2y9p$Dbzofv|Bj^Hy97<2^Tn>I`iyE^c_0n2@s zmXU@!KpcuiTfNLSq8@#7eqw&dYlaUkv|6@e$gxYFf*{dzoWiW`*5^OY()U-YGJbCeYL0jsv)*)j zi*EG(%2xG}lU^ZMRW$rPmu}6DC)oW zrX_6P_TdM6(89cjy>p%&4ZWRVc_xL~=@}=|N0NM$dJ8*%lx7jXRcE=kXOABAV66Aq zIkx&shwj|1KE$KvM-^787I<^l_yPYHMkXar9f8n&r<5+MG4NcPdZw2mkmfrXj~~A= zE=oO?4?3Wf`%KrCYmLW^ z(Jl)g;524axRuQ5eTY-`c@UKI$nPqbAJR^;a*Cus;CjJ8xYYGP@P$xbpxVRa>Klid zm6c&SS3>vK3h~?>dj2H-TD)XJnl6h@Ov=Sp!&cGX*p@l9RP3HNG&hcesA95wF+t)g zM$e)?9v{yh=UkFr<6-uR#|Fbfj(S}YIL(vIkj*gH1&L+)JeOmZP~pA$n=@;hk@Q~9g@=gSQTu9MG@jmX^Z`3kxE4$TI0R4mTb z&Er;8JUBe}DTKs{h;j$BzPh7!`5Xok|LCKNwB~zFn&L^WW&f+?XtG&r{_INyhGvoNg5_}D_=Cmef2r<+)ES@~wCfRmAEwgPj#WiKV zO{2A|O{KLj712s>ZE4L-bxG}SxkPwMxMTO_x3A68>GRZs4k2{{GtrM^{Kk6P?_6j= zofstLgZdv?8VTJ1Z{^8dhnkKFd}bd(nvXWh;C9 zurbAY36?~?;I!#89&;*KOME+Y;-V*yhR2<7-80`pmM-BFs$88O*r{ z=6%J=4wsqvZu(~43%+L+EP2$44+X!5I0$W&B3>xAyDWKA$^`$((y`$%wid31=yh=G zWS7jA(uAeM_~CvH$LpC!3mW_&ACFu;ayf`Oi2n*#%j1YLdtAu%PY@r-en^2>oC%+C z#SMq-$=o$t2T}~N*Op%8YsGD=Z`*=hOwWjbbiAuv=`vj~?axaeb8ey&ZHQI5-B_2F z*x!V#N=l16wtRdNe5&IcFrS(~z?!q#=b3{l*{}}y7?;a(t}+?UvZG7wouwvUJwAWu z(R9izk;tBl&MhM9xtO_xxcjU#a?m+qRUcQ~Nlvv% z8&hnuF>f~qXCBP#u(w&!SUF27?`|q6cmL=B-vP3bpklIqNDbE$3WBi-#k>-E;_ z!M5Z!|DNl6db~%yQ!iD02)jjBeDRD)u}zWVcEfGuQj`c;&9ZvsLBZmIvHfE%cW;06 z{x}`~?f2laCwJ*WA*>wxGg-ZkVz_k=HJ5njTh`ou!juUv0@s0O(Gh6%=WYo+3Ea=4 z5-h4{RiRaC*bFP9O7p-Lf9`UpD(rB=aMVyT@0wUo9$CKhV!ZU=8hBXQHAq~n-8i~< zb(O2)RP-rTuI2z(03={mCO(?Eap{wHVvc6=d;1yj8SYpX5)0|kY^}tY_Q|}{VP{Yp z&RTu3@)1L^dJh*2J{&RFADg_E+@4r`b-z}3+{#(h=^_+k_`|0+4b(W3Sl8h>h()+x zc71kW_KUjc@M%-YQ*2xpa7vv)Zwe}qolULY<>)u&@W|mO`i~b+OUZsyi*<~Jk}UH& z7qsfmEYKHA%x_&UHEX`{?8fVNmejMpK#M*HOilq=s8LcX9}JUZQWs z#UwoP#PMd@53e;xKF?bAoVpRj6R2DvCHdYyrQ5$t^t1GP!c0<{mXIdx6t8B6=6Q{N z(kQWbHLSrX%!1za=q>JbeY}0swfbv=?Ni-7xyMC~#G539x&_}9QCP65H6h`0;a>}N zFh;t$L9aF6XkO8-R+Cne{G3o`hf^b_=oTAf}lQ}lDc|2pI?-DcIyfh8y51^1+BpG;fW zr&H4*Q-T+d(cb1(B_h zbO4HyAyG)0v;Ww+IOfq5Gx6=Kf@|OMM%MmD-Vk$Zv#TfNbiMvdr%MTK0}kbpyRc=tw9%3oWsy?ydHd50ZkGCa zY14==6K@_~sOv=;fJ`}T7d&<0M&!+A&7N0y>N)=X=+gX5a8 zu`>a93O3fdB8w$Ch-0itRyc8*0~vTc27%-iXk-l54o4NX!r2grDDZ4S30Rn5jRG58 z(1L1_m2kEMH8)3`zS~s;teYKH#u}_}kxiZ^3jjFas2E|IgFTTVOGANoabloLA;KQPcZ3f7T8rV>a*;T=qj70HQ; z0)v5h;XmwiAZuy;2~VW_WC7qqf`%bWz{H^v4h|B3*Pu|9odJ-a2K|>B6a(O8LP8Hm zAvrl>amvm(BK5@IA*``~>XV%u?RVX=#!BGqaSnhe1y~jKk0n*rwRHZ}*rC9N;6UEh z0?7V{B$a^wi>!axwllNq&fg6I)c?f&hx8x5?+OD_T3WJb64q(QJase*ytBTnH3>_w zmfbx?NM3+qv3O|+90tcjkWx}s5DXFuh2Uf`$O{*wka&co%-^8Yi4-b^h{f$d0pQ{U z00)o2U@u4_Fc4|HG!}wHU||ppR7whR!3u6ADJ3O^g-hfA2BGap0J0Ke|97i)psWEX zxC|UAWsN~VkT|R~1PQ}hL97rsYlt)!gU3rr;xSfMR=ZHvSXmX4qXPyAC&2+@gOeZ= zZFVPi2$xmVQAdH{;?TcFbnG!yJfHy70D)*ta-sY+Wk7Ji=~FQ~e8Qw)Fd3-}2n1A8 zQU(f_{7dK>&XEG-;tnbdDvm(z&g=w67H|ik7PFJ70Ko1z;Ek-3BMw6)IU0~i_9*a< zQNlZ#e@<%w1!aw)V$c{W4giJ1k+M)=hZ(@3vPifr40;|aEerjdJjt4Xcm40Acgjat z{zuT&2ozv_*WIBXHKmWc`Qz%xr9EM{n1qFQ%R&}|{ow)y`mg zz`qjym0ka1bg}*QGKC`oPe3lft5OpAKtAxA#cZXiiUw_iE`fYi@g1ju5mvIA2?Ye& z&%N{81B#433JkJP)wPsa#`o@FKgYItL;O7m#BHUHRy3e>P4_DLpX_jDnbVHnn`z13 z2HoHC%$xs>A1kXd*w0pxSMi|voCsIG@s|f;d!s9uPYnC;dF*={9c^kaBtTXFEWm!< z$0x?elJb~?)m-t;*y~#dU&bH9$FseQzxY}9i%xHLQTBF$7~>qFgexOGWkNsrc38I{r3h2b{hHGml- zWyE9A*vg~RpHyM5ac(#UC+~@av3Ri|s=$Y1dwi}puGoDzlO#5qlh~@OylEA1&R1lerPsdQ-bG6x zRvtWR6uIcrB~7!~T|t>~PMRIdt*a5xKsTleaa`<-XxxI%L)BGjr zU^@YorUgBhJd&D}1$*NE=pm<5IaImjXtw;ZBS95IbwLzT*6ITIghr_UXV2=ElZ7|- z+N}@PL=l}9GC}Mh5E)bUK<@0)5NCF%BVJ)Kb^77J{;L9}2 z!w796q;Wb9Ge#k1&rkSG-|U&rq4#HAOQ*~_ZuD1m+a*g!>4piMsB|mXo97;cQ0PS3 z)WTXnaCrm&77@3vzF8eDiSSxWcL~JjIIMRM_s7bOt~8P2a*?KS{51+h9$9_<7h_FF zY=PiAPF!8Xd%bIjh)V1wn5-_v*>I8Y#EbV~^0ofs>s#aQs<~U=+lM$}rCB}JElAr7 zye0K8jn=XUx~c(OSTuV?SqrN@Ei`ZDs+W0M!?~L-pWO6!gK?Kp$1DjMr5k><(snk} zQNZfu32>FjETqX4#xy)qbCoOBid^Yf{DkuHP{LbF5E!-e*sk(Y)ZK7U=)<)9h)iVRuZu z;g#O|ljqiArW*<#tCmk_O{KA8*(1z4Zfx`HM$a~PO7~Uvtl!!*b{nt7D|Bz6CX-r^ zi(bpx78z6dQ~7eU{Sg%}JMEkoodN!z_zU=PEmtk=X-r9y;NEnro{uK^>?RwhL&0w= zHULXJuqQzy4GFV?Me}2%(4vOB^#1;h_J$FCmVh`&tSY+v>GWn;?jm0^Gb;%6ULf}R z)(!FSGFlR2JL}Z+FPAmML!Edo0lo^-Q?{6D9TIIDpTwyhD{i=Z=M@1jk zeP{A5fLU#MskhR&&+GXrCFCKD=Cqp!+v=}et{6>TmJ;7ju6 z!=)Nyl0Al)dt~7qX0MKKZL)VV900=E4w64uRW~wdZl-b8Frp!9t2APyT|f{YqLd1* z^jGD>emM%m=jlamj`k2Ti<~noToTX0Ds>#XPLIeMaX7DSss#AYU>Y;+Pfx53uJ*k# z$oU2aF#_L-O2!Lnl$-*L1#|t3#+=SNA?$>xy*1R^xgq}bm`O%~GiFy%x1<^#tZ6su zh-`;ML?mTXxOd|3AT_=wJL^p@!CeI6Ul^QEQoX(<+BiJ>Xrj?UP(i{BN`F6ZgK zEb5;*5(2d92+Uuwc^DsO^A_wfCYrU>X_dlNAx z%27%o6`Yomu4i=WIXhN-+osbduw<8U8zG;nY9|0f8d5Ew&obbzHG?wCgXr565hTy; z@foi^6rzn|d(h8iYxC;N-mj@&DG`^Kokv^V78Z6m$IPwEWHB8Bfh@UI@87@A8>HNM z9%yt#{VCek>dK3v`Fs2w=0(oKnZ(evrKv4dh40NV-)8GABE2@WYD3F>VHA{D`1LKe z4?tbUQPz65a!kc-vPTCj&5dAafv-()znIlXPF+Fe7*4~9_0_f#I(cl9!x^6@bt6@K zk;s#XTy$N0|2w5}Qn4du>6#~#B?#m#QQ10^A~%5zPKpRi0&af+E!_E0d*xMvbVSeLWh!n9mp6kA7VtAcMS(jA(=Y4e9lBFPkQV;DyX6k2eb+W` z(vFg^5&=gRb$+eIGg9#3*n=De0+f}+&IVGC$8d&}bLMJk|K>nZT#-@j%U7BPi3W+G z`9cN67}rk@;lfikTMV3S-M>XC^w#N@g?+Re2Hv^TnOaIt(`(bNlnQ z+NNxnOBSbH@*mImSo9wk#IbkczDU!2cfA_3E2J?;YG9VJLRjQ_!(dxQj!`BG^)l3P zI>#>8Yb(7<>we?Xq0yiOj-9NkfzKf}&UQ02%H5Jdz@MWHyIANUPA$l>zQHx4Opf{Y zu6hB$7qR2mIw#?Al=ge$HWX*76s)VW8)`{dLCf pBp}4UwqFeVV&MOo0aN_;{&Ar#&dcXdjO>`Au6z~!>aykS{{TB20r~&{ literal 9809 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 diff --git a/assets/cn/handler/FORMATION_2.BUTTON.png b/assets/cn/handler/FORMATION_2.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..bae9a30ca3d916ef59e5509d93c6d455ec866bac GIT binary patch literal 10286 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 F{{tGI@HGGc literal 0 HcmV?d00001 diff --git a/assets/cn/handler/FORMATION_2.png b/assets/cn/handler/FORMATION_2.png index bae9a30ca3d916ef59e5509d93c6d455ec866bac..51effe6c214501002594c47db685a8edd02651c7 100644 GIT binary patch literal 11630 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 C;jsSz literal 10286 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 F{{tGI@HGGc diff --git a/assets/cn/handler/FORMATION_3.BUTTON.png b/assets/cn/handler/FORMATION_3.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..c43781a065594b36fecdc94e98103b334a4ee61f GIT binary patch literal 10313 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 literal 0 HcmV?d00001 diff --git a/assets/cn/handler/FORMATION_3.png b/assets/cn/handler/FORMATION_3.png index c43781a065594b36fecdc94e98103b334a4ee61f..abce4c396d39b57c587abb216e81349aa97f06ac 100644 GIT binary patch literal 11610 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 literal 10313 zcmeHs_dDC)A9h;ZgNC9g+Gw@3XzdwVDQb_}R7-6UdkbB}t_m74T4|_Stra^;)e35p z7`01mB0}(_zSr|NJU=|2b6xN2m8-9tA6nu_c;InaPhGQ#1H^D z$@qEv_nG62NrhkY7-Kr?p<(U~0Gwz0_Z$PHrC$L6&gnR-s_N@I!F*uePB4#ak5yH# zd3eDboZajJfB<5Kk-u3Il>rO^3b5w<>kGhz1sQod3sl1H%mB> zRWNZb+XWzJ_*PMVm_I>J<7Zo4_;GfPKPRqTn(JtEJlPBYtT6=!zI|GP220-0bzj0ip2Jp=IrQzM<4UK@01u7uX6AeYj!p$qh z)sKhQodo#Bo4sREc?JkaJ-kZ*T$4QxP~~ImWV)u!^zmLV{!gBb$JQ;01f$JI!1irpLaZnq3`~={VZuctDW_EUv$)n}iH($JKo+W^20&tq3Sxb=4 zezZ9EJBSt&C`(u2%lxF@s>plw-1+m%H*G)F-J6a9A4*KZ{=~qy8UG%Tg4O_@X)36~ z2F&Yy&*$!bMTYV79VZ^%cc;z^9JIU*+m9FOnUef&b(cMQ-7Kn7AEeU~SY?<9x!#sM z#kvqCzRsVre>TbgBA_5buR*usba{tc1AOJ!@fc>aUO#{ed{ZQr`+OqclB1+}AQb>e z!qXB|?i>Sjrhc9V0BZkUvHF7K)c$n_0DydaDg5oh=?gzD7c?-Z|KP1{;5`2P6h!61 zjRwU_4^Pd6Up@EfO3DMSCk^t$C(6GuaeoA+OlwD^*X0pF+xTHn*BMS!{0Y!=4axW6pRX+-E*pTFTfIIX&wJ>SXssczA>wse zF3w72_Z_MAns_ulx>o%@@@0tuQ~z;am8viN+|j>2diVH9vRH?wWV`lom+>iuS7hh* zX#Mr|0fa`!+lBYsXLg7kd2SUO`RG}c8Mj~yhuy51lu3e=9j}>;A3IM&=JVAvH;%`I zvn`!@`sPxj+pBl))XlWbRKMI@5-4M>K4W_J^_%;Rw?Ii>^vZ4qvC@79*vfx@XQoyl zxN@EEdgjfix0u;%k~D5Gx4oayJ$L=)JMqWoAG>OhG(hNB%$_uW?PDbWxX~zhQ!Y zw}B0&-e&*RuHD6wh_`AVBQ!8i>~O!h;;wW261QJBdpPK2!bHC7`a#FmvV^vz?RRpI z$4@L++ep>>t3!c9qC>`N&Eywghf{UpPbW;zW6Z5e!IenI zX{i8CutNdts%?Sfxc#WB;&WSPank3XpPOgug*uV0X%5vrWqm#bLhIepg5iR;rFgl4 zbl1%1^&_<;dfZ#=qx5FY80nan6kd52x$vb0HiZe&+T?cEbUn-{&G&efeJu9dq zd6s*ny0^TKfVvH{s@aq$VLBrho!hwiZeHxE z-&6Cadv$zzrRjp1gZH4Vq@R|5>Nbce@stz`wx9vx2fB>vQTs6H4_0@Ig2V zewv=Sr?A_xpRj|U4BX&Y*FE{{*pFkg$Ld~kzbs{PW#T`9I)Obcbu#W`%_*@9VD^U> z&R#U<_ez2_aBlF>>?B4V@22&zx1Y&ix8T{mM-bHJ8wAEjbf1~H1c&9&v=;~!XApnX z-4K=h&Ri%?TIgjVVezk`iw0#zKAt|*yMqNY=6jBH@#_hBu~iBrmkKXG#{w5OLpQr6 zbY*zu*UFaxkvospQ(1l3Zk%0?n)x~WQz>fN`}n+Dnne0c+LII?yQ10A>?+Q=g|3cF ze?@aC^LHV#Z$Gf6mMG7@zV=XG?26uOuDcE|+r}I8TfIm1*>Twh-*J_iitpz#Op>={ z#}q$QoYgbD6PU>LzDi(I#{@DsUeG<_IU*v5Oh=|;3@EcY_9JHM$DYBh9BS7=sB(b}_)$YNR85Zd?b7+fwxf5V{#WJ8$qfW!3Ut+@H zV38(p{uM_^-Mer4mETH-D+A2e|A6q1YB&U9j5z&8?^_#IzX)(%>kaL2>L^Ls*Pk*o zG~RFt9NmaFeBF!1s@{2JDw&*zZ0m3@+Onv!V}G9f!g$psb->ajOqes-rof}%OVQ3Z zwaU3EQ(c>Z5K17FNF3M1wJ(!3$e+pX1yplYZnW7*5hV*Y@nLsKA(bI zDDjWF~nC+m9FzXJJ{la`){fHoO5I^Q0yvh8UmtA3e6}ePf zekZ`xweC?U#l3gs)mQ?zEl)Lm4n9_??yuLJnGlQ(KE3^DmF(gJa~mzj<4ev$4W;Aw zG~_*I(cv&6dO6L%+`~ecx$(j5k6RNtA;Hu7e?N6KjW%^opu%vJGh~gxJH7IF-vSW~ z^rO)@d`ZlBRQCw8pW0{vOTq9 z*;KK}XG@2y(6ibXw(HU`;61c6Bx;=%ShxCXi3jH{ICi!2W;JEUZ+n^3|J;i9sC7_6 zKry|ZxW9OMmt`@m?BKh71N6_%vxaBgP3A1C%x5Dr50Hm_k(0gZ1oZ&{HG#N<41Ru| zi`;b^FS?Q@b4zmBy4&FZ84jJ@zscCHd0l+#b+i>jHz2) z1%B$Kt`833mz9ig?is;(dt37g^C3XS(*GO(A@Cmp{~_=n0{)?lix`6Ys@P%aw&LmU{2z=^8O^Wk!3&gX4w6VDP?I9Kw(7wN_uz z)D!Pu;UXyH#j;kP!!k^(RR^+F#XTcs&3TN`cli@%IM|lwruR$XW}08(`d0CQ4fn8--v6a*^};Da>518F8eZFJmOMPe-$Dk3HjknvHSv zy8tFe+=hShXaCUt!e5d*4ikllt&XY>O|6nIRCDi2FdO~*YuZ54AmZjvo!AOej~`m~ z!HxwkEkY#vYy)G9%De`7vHtDjE~E27n>=5?HM&G}Q_OsU zWaTP<0r87zj&nbx!zHtsM9~QKmO4Ss?B3lkt?79y~j@0f|s#G?!b?V@)q1H4YP)Z;hSwdY| zpBc@Zum+rBG|B9?fT2;hb(XTSQkGeJC@6zS)2+~<2|_E}$raflDuIb2j4CUKE)Id= zE*8t)r&Z*o0GA(F+BnDV|TDfHj>l&?){V84EA*p zC$koOEHtAKR@B#oQJENeE0u>4j{?3xMedk+*6v`KFG*9x2rU z8IUbpG66&L&~+v*_z+WANz-jre%n)oq)XupvOcxJ%IV^P1{EY{R8i3OpcAQ=DmQN3 zZCr#x#WdHFy=o=uNgw*MP+bYt2qzq4%aw`NGFh4EOzmgpd#z?7XTi!Db+R$S*>&~W zFBvFwdF;l0SXxOoj2KtTx6=`_SF8nTR@gh)Ue;j=!UJ41G5vbw+>os;`X?Ks17hlT%vR}CC12RVef8Y6&Nh3VlmoUV4jT>k4C(Ho!_GB=rdI6rXKYd z1|g}bZSViSBCf-Mem)x?GWPWjT&hrg~sZ8d&TgD0PI4TBehDf5mJi zd6j+-RI+XE?dh`zHY@k(c;swb-_|_hXkEVDnbzW+tM}x+goJB~pg^`Ia}rjWFL`lkKnHY$PJRW_ zFIm&IpmAP!q6p;9Y(E)fYriU-n&KNRV$kuH#invPqFXOyDr!BzCwL_eVVo#OUUv;u zlo_&aS-m^Ey(@8ag06;|NW<)+?72%mrE}lBjSJ4z=0muFq4@Y5U<+#7;YHke{(6s8 zEo9`x;Y$TLk|OJ@-bsLem`_IwK3Gl|O}8^VTl-n7q%1Rg1e&PHs7h`B&^R(B1dIcQ<^ z9!+k3a~i2Yc3k#G#b88b z9tS&tt!jGwqS8Vq=7rr;pL05~KRYV=TjFJh)-aXwk)$e~I5qqZ6}~=61uF(S`_1y0 z7Co&aiqw3v3ULWX+`j3BN)21h=TxTjJ4wp>{+cbe$>i@8V321xC}^k4<-6zD=;OVf z1gijgDnCE>N&H$TC;0HKqae%j#aqanGU$Rl`=7mqPB;UOKX->iTdELO4zZqnwL|BClDpY5mR;C&oP)x4Kleyt6!=fm?Qi zLPfl*YJ%NsOG^jb%VEywIi15T)2!MZRM`Cy^isW@e~C=s3=F(cG&VNEQVfMcrF4ui z(mH*<9f-<&;6KFO#pkX zDKi(@C=&`gnS5Ox6+_a2p7~K0sbST3SyE{HzNQDH^QMPud!G4x^y1f!hfSs3A?v8L zav^AK)rd>>xXU6_54FQ;u8Y({d5N%;;zQWbBJuPYWm>Y4|4u#rpdJ>whaNhd`8FOs z39lx11gHS&VgI`yvO8@jTEH8_E>E}4Vv%}bi+x%2`K(xq^ph&*S3Whg@+MmO$n3

K#Xz%ab81pBldi7!lumf0H}9K$k(E*VIq7ByOALO*W{0NWFX5tP zxpLKB&+YWsR!_P`4oS_(wzPIfSE{ANnz+0j&l$Q?$3oq2!#2`3;EiYg86N7Cu7dTL zRL%HYsRiN(VT#`0K7kns|opt$9IQ=)UN@ z8k_ZyNOd!>GJMifY?Ln)JF(Zs{fxmO!k4N{dU_14*3zM$PKPP((^Ip;Muh+DY^;U^ zg0p;8Pi1yXw?xA0P$*PzFs4QMV26!A*miX+80Z-g5U^01TE9yvuCQk)Z4~2TOyokz z@t?{A0<#X|x|ON?S$9Y{>vD3ntO5jll}VVbRnM zhMbYJ>UL&sWsdR{60bpFu*1d)+FSmR!_zU!*0B}-n$8`Tqzqgf+97{XK5+hp)8~Fk z%g9Le(-WcVjFKp+>uMOItn}h(^rbNT6U~}|l$ko8b!0te8OQZuo!vvS_(pR`LP!CkgwY$dtXC1$#fVHiSsC-dRD^4`qWs86U@ z6oq><$G>fqZ06TxSN- zFwGF8=`27b(A#Rx3H)1}BXR1BCA)<{$=sSnsEKK@QA?@A+pM18^w|m8#zJ@< zK`X09^1=XBwe&OPnp}UDgv8J^_1619hq3-QcAf$SIi|XB&yz( zq_N1}!X_w$P}C`1nh`0G?`CBR(=y7LpI|c(mq-;_vPw^7c&-v7qVrSOs$XiG>SJ6M|g!><7E1a2sg3J;D)dg#~QCo89Gzxqe+euD1*u zrL!9+NG$9vUlsE3sH7{aoNJk0)JAMlhnB3CTt(e{ULYaJ0ts zg8RzySK}D@4xSOL#nv;LDML;W`rWQA%wb}fDYO%2sh0p(-5%YgdtFrm7 z9Lm>~0eo(sGYMiNQzc^~S337D8XYTGGIwyWm1h&YsLD^*9})d0Z#$!@nTLz3Pr>ZC zA+#Khe8O*67|Iq};J)xgpI>@qs{Y}T$(kn_!CE%|Smm~BJ2Gc`3YrZXDw&-X&R+@%83K0dQt{d zJqrSHsK+Gb$-1b;CBT=yD=HV7HghRnFnAhacGugl zFeb^LJm5#U#Y&i{|uQopnb2>R%)>4{^HpXY0 zniU6APEWYv+Ii2#lb@4v%5gbAu# z@_TE@q{3-21`t)|pzN{sk@Au8@ux!hL|7Cehc_AF8-`&dbyrkJSFy;EmeVZnRx?z? z$G${H2n#{>&Rh!Bf=C-^qRYE^5`oxXU*$ZadbV$aO6GoB%BI~WoA;siLxxwr?!G+9 za24UornthE!o(OtbAelG+schJLupIZAwRDoH*R`niN!7n0hsuC^MX5=sulwQu*7Ep~E~Mz;vseEI7b3SP diff --git a/assets/en/handler/FORMATION_1.BUTTON.png b/assets/en/handler/FORMATION_1.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..621645902a9a17e8d9254104f403d1c80db905de GIT binary patch literal 9809 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 literal 0 HcmV?d00001 diff --git a/assets/en/handler/FORMATION_1.png b/assets/en/handler/FORMATION_1.png index 621645902a9a17e8d9254104f403d1c80db905de..309290142866bbbc0d4fe9bcec0c55070eb5d390 100644 GIT binary patch literal 11357 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 literal 9809 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 diff --git a/assets/en/handler/FORMATION_2.BUTTON.png b/assets/en/handler/FORMATION_2.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..bae9a30ca3d916ef59e5509d93c6d455ec866bac GIT binary patch literal 10286 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 F{{tGI@HGGc literal 0 HcmV?d00001 diff --git a/assets/en/handler/FORMATION_2.png b/assets/en/handler/FORMATION_2.png index bae9a30ca3d916ef59e5509d93c6d455ec866bac..51effe6c214501002594c47db685a8edd02651c7 100644 GIT binary patch literal 11630 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 C;jsSz literal 10286 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 F{{tGI@HGGc diff --git a/assets/en/handler/FORMATION_3.BUTTON.png b/assets/en/handler/FORMATION_3.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..c43781a065594b36fecdc94e98103b334a4ee61f GIT binary patch literal 10313 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 literal 0 HcmV?d00001 diff --git a/assets/en/handler/FORMATION_3.png b/assets/en/handler/FORMATION_3.png index c43781a065594b36fecdc94e98103b334a4ee61f..abce4c396d39b57c587abb216e81349aa97f06ac 100644 GIT binary patch literal 11610 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 literal 10313 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 diff --git a/assets/jp/handler/FORMATION_1.BUTTON.png b/assets/jp/handler/FORMATION_1.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..621645902a9a17e8d9254104f403d1c80db905de GIT binary patch literal 9809 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 literal 0 HcmV?d00001 diff --git a/assets/jp/handler/FORMATION_1.png b/assets/jp/handler/FORMATION_1.png index 621645902a9a17e8d9254104f403d1c80db905de..309290142866bbbc0d4fe9bcec0c55070eb5d390 100644 GIT binary patch literal 11357 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 literal 9809 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 diff --git a/assets/jp/handler/FORMATION_2.BUTTON.png b/assets/jp/handler/FORMATION_2.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..bae9a30ca3d916ef59e5509d93c6d455ec866bac GIT binary patch literal 10286 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 F{{tGI@HGGc literal 0 HcmV?d00001 diff --git a/assets/jp/handler/FORMATION_2.png b/assets/jp/handler/FORMATION_2.png index bae9a30ca3d916ef59e5509d93c6d455ec866bac..51effe6c214501002594c47db685a8edd02651c7 100644 GIT binary patch literal 11630 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 C;jsSz literal 10286 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 F{{tGI@HGGc diff --git a/assets/jp/handler/FORMATION_3.BUTTON.png b/assets/jp/handler/FORMATION_3.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..c43781a065594b36fecdc94e98103b334a4ee61f GIT binary patch literal 10313 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 literal 0 HcmV?d00001 diff --git a/assets/jp/handler/FORMATION_3.png b/assets/jp/handler/FORMATION_3.png index c43781a065594b36fecdc94e98103b334a4ee61f..abce4c396d39b57c587abb216e81349aa97f06ac 100644 GIT binary patch literal 11610 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 literal 10313 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 diff --git a/assets/tw/handler/FORMATION_1.BUTTON.png b/assets/tw/handler/FORMATION_1.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..621645902a9a17e8d9254104f403d1c80db905de GIT binary patch literal 9809 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 literal 0 HcmV?d00001 diff --git a/assets/tw/handler/FORMATION_1.png b/assets/tw/handler/FORMATION_1.png index 621645902a9a17e8d9254104f403d1c80db905de..309290142866bbbc0d4fe9bcec0c55070eb5d390 100644 GIT binary patch literal 11357 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 literal 9809 zcmeIW_fu1C7d3nU6;Y(BG$9fMtRP)lP>Fy@M=7C6krtYSUJ}$B2m%5(O$bFnL8OTo zIs}y}O6oEchAnqCf`(aJ|qb%2FCQn@EnD6-Ebg~%$)|mnWkUn434jD>4 z0Y<=UP~r+#>(ue98Ury?;Bo>m3FcZj%Mfn_v`IW}I}fz+0$+^F9nJtr0N@rFavuzQ zJ_oF9J%pSDh6@tMc!1%YO9iKaSOy^Ns^%5OyS2d6Coha{GB*AI-WA;iOPpvdVF)v? zkk(`jt3L_&y)lbtzxxyjOS^xw6S#bb5l|Q6?qa&E!}RWUA8xY1#w)x^iveitNbX8~ z)F*SkD)~3R|K|GSwD9x~x3c@TJl8lJS!Tf*sTdJ%tpz5XZdL%`-|PK;bVn_IVSaXM z-f_W=yw#j@1Yh?ALxeXbj_P6*fFxj8(OS1ZF8UmU!^0vI&`oG13IWC$$p zU}t^@?L`OPIlL>B_1>UOMex#@vu9UD?cUelo{5GW%S?GrMk9CVPmc&e>%jB$yJ^LZ zxvyx?Z9V)-jNUACoVYLLL0u3zY7Ixx-dyXQmMycqdExbjSyYt)ShqE>+9&}k+@3tm zwS+gM;?Ze24FJ%0FRp*N$ISZud{HA?#&^NGMjl4nQ_#DtR~l6~ z?w^_syL9F~Z^}Ks$BjzEC$L|b_}_7+PjP(vE_LVJ!X%gF3z8Slsi(YIKX~gRSWet) zJI!q?tc2#Ydov8~KFyQ%<^pD%Tq!(WenFbhr?^b^T@xN|)hv@Z@Ww#1T$$|Ise-ly-tH{akeYEK7 z1BAYQV;|Nl#pW0@Vrv-_`QT}k8NXQTMf*83Ig>a!dqFb=zY7A5S+?ZUR~VzixK~bF z|HJXa?PYwtrkReJ`X|v9k#Afzr%hR2{Uh~59Gv(`|C?wK*IrYAol;r6nMRS=ny`>? zmZ-Hj8@ElO))lt)e`od12#dx`KRo*ou0_zg^}+Z9q>sZTLr07h@7_K>d-`iw(dE>H z%6Rs8{eKVIf6i8(S87I2>#*cpG5V0ir7ibNZSKU!Z0Y-H?>-xL6=V&Z{)|@2hCOtD z=Vu^k99h6E>zgjxg}JES@!?kP;O}%7Cl{)-P)v~+F2j>gs%jd1+lT6deJK3L_*7o@JkhDOW(_8kpo=?oK?_3YLknoEuSt;2h z8JWEB`SBCP6Scv>&u1SOK4CAkHVMtscv5aKQ@}ECv2d_J@JVffd`Y*Fzfqh)kD*O& zgAMKFzWuqc5#bu|BD8WJ+gG;m#R^|+k$$#eb|3F;!bG|Wf2(U}@pW%S$M58UfS+Wr zj> zG8s?q1u5K?JuM&4=O%T>e!Vl^ei8oGrK)%RpQ%rr9nLigP0qQ!4|Bz<#MUC6X5<2R zAdW?zm+XpU$DfVCRc!5CqzNCIJ~YoZT})jX$G6kZ&8v>|VM_LAK~urcB~vE>r}v0ViX2bgqxcT4RKHXnWB2^m`5xIp9m#Y2 zYc+k?{_R{$EoQ8E#C?F+soES`c%UnR5oovisY<@LwN5pge%?8gnUBf;L5W|GwDz+$ zw?3#B(l5^t%fjDwZzD8WOxAYz!RzsB1k+k4at0% zb)dZ8L5thPO$BaV+|WDul;JzW97FvJ{ukv;a3;`+v=bkhk3b}BfmF1i{ z$UD)qk!Mq2&t7KC>1KNGgGweg#t% zR`t2+ML^{4gN;-!AMPtGt5LH}!%eDDGYG~7w{)3|+4RRLKK3PZV>#74^Gn?wS^g^K za^~?Ncf#LtrG8bLdv*D~fh4c~T)u~{Aou1!m~j0E4LPwnhGmsi+A9CfXPPAM+#xE5 zs_#2T=xg}4$gt=e-3UzJ`?p$zqH6-hj~DffJRiBGn3R!}k!y6$CFR?Vq1%;LEA<_3 z+(q*d{wXA-kpyT9}}&^Ca68c@=#s+5MtX zH9u{tXEPYG9q2wfI<8&$Yn7x$`atq1qMGAMwd-B)4gQW;KUXZU5j!VfBZ*a-{`$>Xals#hnRgzLNv=MgZeyi5+*cNNBl%b% zEhVoxOqk~=W;NX(>jk^c_T%2%ckzk5kl-1E#rNGm$9{HAq@gOePm{C)Z}chQe2Z@7 zy1!F>Ur%0)$;}kB7SwF0JVuhGX6$`i<>E}U-eq1@-PoIbnK+a0ke`*Qr=~iPHWo$A^b~i+{@OYGBl~~qReM_%E0F;zeAO3;aFXTk8tv2C zJT*_5`Y~3G=svdW4&3iPK0c;_>7oC3{fEGR2>ge@e+c|PjKE}?;><<*{`0>#+u)MY zq*Pk2DIW3ecahcS1NJ$}d7OqCwqd~yp}R%(pq2W=0(}KeL$G!%8n(Qf4@>6`p;Y2f zKWBokzqX*iB;!=t!N#`K7IlJ+j}r@Z)M(G7Y!7bvTvF)8O($7{OtD!7UxQp~b=h&>-$Rpqs0PGTkg5buFGA%#Z zCv^$iw>5iX%_JN_X{sTIvA8-zc)#1=yrm$Inxu)9L$)}pd%fmmfC&Ip%754Hjp*bn z`_@KrNkLgd=`j^5a~7@@;*PP$TiH0|Y|~y`N-3=!dkI`&H+IVMQD*%YZgn4$hc6t( zS8;Xc-fsN=cGZtl6IfGS{{C^G9YH7`DZ=Mv+)`(KF1a}#|C56n(P_JZx>$*-TR!rn z{!n`>5Ax7XS`#N8Mp96F)jbo|654{l@M*>6ACsgrZq2zhjW}0|^GN9Qgg9U2R8$#V z8xQ7miX?RSt2X5SzzNcEl<$av%W@jRGaGJ)K1F$Iu!gRrhLwn>b8+tNS6UzM_&3Oe z+UBP$;;X9^ZEo@;Qu_H5s{{Tkn)^x09PzQmrD2LlzWy?ir~v4iDyxJ;vB${O1I5&sd z_lC|YmExY$ZlKnaVc_yoIlE7sY3e(n^Iv}X3Oti$vwQ>{s3^uZ+4Vkfe9Mg7>8?6S z-<`{PnN6_bgp)+2MyK_qe$Uw;Y!$Y1%oE~s8xcG^BrIuNw;St;%ylRHR44AP#rB{! zDE8Eet7T~yg}~tD9on^NSo(+?eqfY6A&ufc-^x5GoU;`?f$E_1`tb`o1NFkGg^X5@ zI*~4ZU&5*nf26fnw^uJzh$pr?NGnnloPJ5V>E`$U`J>>Ho(ECj8}C?UA5z=@sTMQ^ zYVdOSHX_;ewa0&+vhOdx8rh?pg|XaiK5LjB;z^rcX>ON%ldIRQTB$lFFg>1j$3pws zLYDFntx6yw(y!n%Bkl1B6a7dn!&=TR$TlC(pP*QRc*Fk@uT+37c*bRjD5S4GYD9g) zMmZCdf}hJD%#D=UH*BVv=E!0P<}G7kxdVQ76!=$BX>UKI{0)vVeNIouPSBgsd6&V4^t;y z_{Cua7@=Y*(oNf8N3DF6!qn@VSq*7$9rWH?yr-m4%4KNh?Tj^(bA~EkkCP4%t-CP(pj+=C!f;EmG3I;BEH(5Z&6!v(3gtaTK}*? z*AV%z855_XLqxetuRGLc>cI3D_zX|-1HhdNc_>dm4%13_{q1@Vr$^BF{qFVg_%vb= zc5om>l4_&wIKGD>NzdXV?J`Nik-QN{9*%64$T6a|ANkPPGsre*emrfe{{6v2>csdy z`FOefIE0o+_?X1y6cPLrKhd;qy%Sn8L_(kzEH!3>e|{HT8>?0w>u@Y&CC{x}r+7P( z+y-g}eXXi_L~}A?xhy*7#{U0Os5r)cSJ#+Yd$eP}T6k%{Q^kn6P-7Ke2(!b!E|c+M zt9Ci50tE%G#=;dEf^$_TG@z_yb@i6Mh3z|6B1=+YxXhOWOxUVnzM7^mClF_}EuweH zC*P%&e_)#?&-)ixm57}~2kz&U;^jOTUU0e1&6M(ywO4717((wv*OHGoBBp_pt~12m z8d!UPo`71SAhZzXN-SC3`R20xouN>9#5bD$QhfW=Mr#2vGjqxDf=?6@eO0RdHjy;X zg#qZq^V-}pR;Z>PRS?iMpqS-XEZ5)z=yVIt-T^MYYDGBusv$g9Sj5iX-+%wmhm0cM z@{q{!xbKNlz!=Hoq>Q>fd*l93>&qT$Fzrn>^+j=;F4S!Z)~dMB^1lY4=d45wgsHD0 zeW+N^h6-~=!3{ihyyg&-ntj`GdnUE+iww?%L^jSlBTJ73=9Y&dCF&K*FSus!RiieR zhK_cT`?2U~9CCxss63v$z+=}q&kXBv4_7JLjlb->!!)G3R~V_xtD5rA!e%elbhJWs zb8oG5#rmkLL;tpy29(<{`eg0jN||_-Ss)algAtd(bkSRk;6eVQ?7A%n8!3_LcVQRx zDO0t7D$ccp5q*hooSfY($>OuK@3K;xdr@#D}Oof-@Fqw+g`fdt<5RD#Nt7zO7~MS1PKE3gf`WI!L&t|f1ihSs zF0m&3V5S5@D%f_%V7d!E9EkK=iI^3a#5Z&9`~fk)%@MZ!RABwy6`^!p(BwgBj4;?$ zqX~I$KE}Bs$0dEukD9Eut3Bka*@7Ykd)m|@Z;4EMK%-*NTwNvuMu&j&GP8o zpI&l4EKB3mGFb!KWI)}SH*N5G=55@QP}0VoAP)wY ztk9m4m&rDnI2m$E^i^yMS~>;ytJ8AK5+WM_ZCcjD{~KvMx)N?~Y?qu4oNc5xdhz5m z-C{#Kx&kf(P7)s5{Y%{mGdz_ka_Q~Wekysm+H2?P%_MMJ1XF9;kK~`sA~NzN6nNs9+79;IT5J6iCG=Hh2i9m#L4%-Awl*}rH!WL*DERj+l4l)VJ) zLZe~nHKE_OJ^BYBIUYk@-}$7V8ah3dsYfFn>~RwntAi8uL33wqUUTUhlZH2((IwF0 z?Y3QAQ<3SZXpI8e9YW0ClJEnl>vl#MGsF9%sF!&MnGe{XvC8E*IzYLl{5FcE9O?-@ zj^!hoj;+>qI|=3*17+Iyd0n9^QwKb;uN2s=eI~Sz{)clBnPPB8HL$4&D`egi@)Y%G zorU=gnpZjk-9V|!Dk=A%C&Np7mLqL%vTu3}wH-OWfRu*>l;Z^bkH<<#DIIfVrXvSa z<44u@8C_T9BGKg7|?VLI$g>cNTOQbY;VFexAlbH!tWC zQVDWznS|QhUr7ZGvxLxkN>K+r4Vmf#&ijzuD1NyJ^rFl`B)1t#0a35CTbI&xb7L9* zBa!PbuP%k9E9H&E|b(Zt4={1VYn#% zJcSlkE0S^J2S?}P$V-PzO}FTz){E19SO_`j%){s5Y1ppNTU|eWGcm=ZaaOM)+vuMt zH}4x8l=jnljppqqi`ggBk~>9P)--ja)_!l!|9qv{^!)+G=sh2N}CUX=->k!#yXi#%3?qAxPR;wPC?Q+G|Y!C$!-+m*kPSsiEw#3VUBO5d*kkBxh zU%St8EU1c?DDE78@u$0wiUo1qs0JwOwnHFgnQR?8r(j(`z;M@=)NVH4phU`Zslim@ z&}d;Eh19HWnVfT6bOtJ^$kG(Ddk&_wf^#DGfz%>S&d@dH0owb`Up$hi9UIinWts+* zP%*K~KJm88k$ryjQmVS9ET^v;3Gy2#;KLC(C>ZwhsBU5Dpg6t1jtg838F;x!Gi{Y` z-CACycTY8HT90aoS8zl9p{E2$S&vq5)(g{SS?cXhA%Yle3$+B@Vr+_1 z8l4#;{ly~_?U(jp;0SarpZY8ZU3&%u%4*rqhOMa7n(fai{OViJ`sJ?;Ro8`nn(!Pz zn-SZW!n-aPmP`aYSwEVoKK-W-=}Yc=Y#JDg%m+skdGd9Ob(PJ>tcyKjl>;#7wv|>$ z<8$~0d;LjWnGb9EP6d`u8X8M2&Z=yE6H9DtyojBx`^v;LXp?Iu1!I-ea#;GOMyz+T zD&nen71k;UiGIP}0qqp;>P7PW){kypI~kdXMY5iBIjN??9VFyQW)4$yu7XD~f^Vf}F9_3H>ocI%g=X@QSxxG3J*?Kgs<>~76= zWy1&G$EBDY8;?AaoZh>wACl=&=lpC0O?dZ&(ZT3J;u_ur+dKR7=#4EP2 zHF9Fcf^Q=%T8Hb}>NbN-Cyuf`L43<_)Gk&46)3`fa;0nqA*jB6)W+-*c+_o&+9)bO(mSWm;Io?_s-F7b8++BM9pDebE?EKp#wYMK@6o~Y;bgD_Alg< zQ3*=(UyyB0GdJ_j0`sTs=NM=S8wq7AVzgqg3(9R2%srA6ZeAg=eCh5CHam`?6iJxx}5(cLm zI$bEr;A$bhtlF@CH!2RbZ=6c6WI)Vck6a-adAHH$rR0g4&0kK|iXkng$28MY+7cEf zu4|k-0CO$YRVXqcby^hCuC>i4;O;_~s13&{t<=YF8R$^&y3ko{QR?cF1HIKNi>1$3 zvZY7eg{hFhrMB;XR)rRY3KK!KI85)tb&<$%)$@OZj%4E%r{fEGR2>f40z$=}0%mARzXl^~bJh<>Dn1>Jape6U8zWhJR(8S{a diff --git a/assets/tw/handler/FORMATION_2.BUTTON.png b/assets/tw/handler/FORMATION_2.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..bae9a30ca3d916ef59e5509d93c6d455ec866bac GIT binary patch literal 10286 zcmeHM`8Sk**nUbSErbdQ8PO)P?^MQ`CCZj9+sHchHADHv$R4FJmLeou*0IyqZY&|g z7)H`OUH3gP4-K@=p1O1j0D!YP+F)Y< zIL`QZ^!v%9jN`6=?h(ep;-zij3jn7%f8R%d^bBqQIHm8RuKw`hGpHZb_ZigdijKPa z6)zts#KqkS0D>km9|fAHP%f(CDNbyr_s2KO)7)PGAfe)u-RCTF&b>1i7?Jq}9X=lP`KU}YMzV{mbB-X@AenVigpgJssu)aPLY&%5OnL)n0N~Qz(6tF81D3)XQ zx=(W22`a+b?Gwg911Gr<3CBQo+R|?#K3!RcpEm+^bo+cdT6o_z*;-p@>$cB%g?OvG z)FfQ@70K88uN$=_QeRXUG5t8|f4A?&iKxjb7<%x_ z-wz0To!}5LB*6-a!`fNJMQc2bF~20zbm;ulviSBrS72bM?={YeH2V^(W0(BL9*2_ZleWvtgBR2*+M~kiBAglDTHF$c7-l zV3x4WHC9gB6z!|5J#Xd>P6-MpN$Q-|anr_W-~ROIlj`s}mkd3T)g+Ie>G_it5ye;1 zl2J))NrrD|J#F)-^NJntSv{7VtHz&FIdo;5)E18AWlP>ieE4G2Uzqjd^YYSiRnL zx3ITMUmlzIny8Hie>wfQ$b_xP#xyKn)1>m@Tp`Pki$$Y_d?pQrvZVvYfyRjs2aRlV zn{DYYsSal=qF!l!h|bx%FI#U^|EeD6Ke(bg;;tO7&G^Wyk^KV zNJS*N=5qWcKJmuz4bmge35m7+wNq>9YbVwf$aZ95vIlvPukSJkA4bVf z>A8=ee_w#RSL5oZ8R@pd_QJMhGiP4skG`4PGF|?)kdq}?j~`QgDji`(G<`87Z;y4G3gO<)CdGW#yKgSD09o+wcG8l#O@NJs z4Xugaurfm=3v%q}r)^G&>|ax;eiYgjZ=6f?;3?81sG> zO^J%8C+@b)1aDm=8XSLm5mOH#w zz=a3FwHJ2&#!bmDVk<^fkNmv-D599+c?+6zQvxxuFs@Ds=UU?v;9TtLZtU)`hOCXK z{ZjiPD0)|en8xA9d6i{7X1;yAT_tAD_vn&)x>Uw|`r~(g4y6l|Idxo%%LC}FKxGRV zi=^lBuikT{Rj4gQUb+8JoZE1rz*C=(bL$`ED?^RuocJ80a#XFZ@|(p>)3;>#DWx!V z>a!?AP5(|Q7DMA(!O1*t>V&rSO~IJy;z6u8_O?Q5MruZ`@mZI5Rkz0Opsu3~A-8U& zoShF|^yuYHiSDJ$3+?%C<1V?5u~F$rtqddDD_&EYWgGjzo}`omdsW0Nh{ z;K{87JoQ^I&7|KJruLvcOLv~sIb5)N>u5r7O&hf|4Zq3t*0$KI_;cy*SIyeR zSu+FM(dVRKkBNzCT~zP-s`l!qRnKCIMN64(lk2_F?@^m)OL&R#3%s@-y3>9iLtIG- z{Z;+F{Y)};GV7LoHO08CkFvSskj!vvv?;x$2-S=gnZUG61%__3M)F-ynkJ;KHCEpW zGIMLv2qSq8Z@ipJykyT?-?9jss?`cK?8r(C%?o8FYY>B8-GnU0X+e$9BiWth0lg2%T%ZC{K~8%eBJwq}>4WI#=MS4ZTV0ki?*} z{pJb!3Nw{$CA{jO+^N;$=kC+ir-N-4Yy?)8=&Xa(!;$EjVXZ!`Q6WvC_{2;B0p7Eh znzkGVQf3M&3OEOQVWx+{tG-1`c={~u!Jzs6_~z-o*uj?4;KFSmLQ!FvVwX^tK;uBL z3Ne4bWB?aNs3p|nyP59$H>9X8JwMnNr~I=`6CTc%Vz|vK4%){0 z01zS!01=S@uy@EfmjS^44gjn?1pvkO0Kf%(W80w#0DP7@;CqjQCf26z!5#O)1UB&r zw&+9W`nixGk!7ENyB8YU9YEclpIS@TBTroZE~aV@VlMeE$ll{57+qW(**O1Hwlg5- z(K*!;^^>;*;>^y?Nr3N!dVP;79#1a$aIyVi6#L`0Go{g}?=)fBSW;Wjm(q=88;wdS zWZQGqXvD@B%7Mv_QrI5-u*LQmBlQ2S{}A{Of&UQr4}t&32q;S$?lLwdKw_kG`0`#~ z9Mxg+jlcY1{G!%W@VA20{ICcpY!xS`(j1*byvBHrpBaHzS{jyEs4)^spV?n~LZDU0 z7}vu^_3OlCmvn+WL9Uvq+nglqUCe>n372C}8G6VpJIN(axWy$Wf$*F9b~W8tmzSNA zhmV8z34)~1TT^Rha}{-!+6qW$hvX5)w&v#{GUTT0TjP4qC%WKAB6(ql5!C~od8u!v zcJ2_!=)kmV4P|bcoVfJOFv0!i4&=9ya}kWqk815q#(KY-up7V4#zdrXdIhVY3@vUL z40)FyClP>j@|D>sf>o%+h~#Ku;OR~+dT41kRssYsUI~eLlPoMd`qcmFpPz3t6%y*w zvm~RdkO|0)%0=oVG!@<#*I_^8KQ-?IuENp#EquL0jUc$H%XO8B^(xn`-(K0zXFU^%BJ>c9J~UrU#8ay8>&nkP^A|Q+S10W z;qughq1EtRDv{`oNf{XAF7>#TM#32mYFRwr7o zidf4nXHjW}^x11LA|@NZLTj!&Uu06_flD3?#@jWm~Z%eStzW?fGPaA%B7%G~EUXYaX<(72S>@P;l zvDFRyX#1LBgJ|3-vq{$zaW)Ow8?(*Q6LAQuReEpLpm=NHYMcoMe?p)w?j5N`A1r0SA~uv-VXMnI1jf~%8_=DZw5R&y zf{~)=JeLPm9lq?pdxF10L?p#iav20#`D!j&Lzvv}?2nb)EK>e>KoQPTd+xwOVjHBv#YRYWLz%(^Sk*p^~ekqqIV%zSB>wUhb=m&MyC| zbizeBBb2l<3Q?woic7A#RxAF}+3bXmgl`XehLI>X=);uI zG*@Z;gQufb6H4;qiIB3o^Zj|l2aY%jU1wpO`%|M8`n+%5)zbRS9jd?t?K!`I{0n!V+hC*TXNSPIUv z(-;~m^6o8t*gvJCf)eqU^h^weKaz&<-F<>?5D3Nzg0(WOzohN~ol>kPk&UnfP>%E} z*~~)7?Tq?6NrMBv!}#)e%pJ!y4RCv?LgD(?Ux|yc&4g=d1$i;t4bG$8@XzX+^EZVg zb#KtvjabYOH|dWzs{XLVTu%r`gzk+w7o64E*bZ;7BVSIZPo45e-A$=n&2~vp zMNHrNHwM!pe>Nx#AQix1JRA1RHI$ZP{6|QS-Tu)zr`15DxfqRjy03Jg7v}QdM&A5Q zmA`ZxnQlTSoO#kb`e)SL8#EJ_ z1Gl$#)w%Q`U@WW2gm_-uD|=eDfQUm9Lw35*ej!0bKV620 zZPcoSge-hd;rP=d-|P1+JM;V1W-BuFLZ*>R$0w|^rNxxQts3uha@kPl34iMa?tiBYHZAkd3jq^QSM%-60kf!eur&!hW1B|WBNWe zNb*$vA`*QpKk-eY`vlGEYMc0CQrVL&eCTb;AW&}&n<+$W^-k&|BU!h_FSdP4b z1LfYh&*in1qWYy{H$2=I1#e%(ZoD1OIEXifq&3vsur{NJ`uJv?LaVi047^y_^_?Vw-@x`@Ox!=MK`=U(aJh*{ zl3T>vg83qe6|40Ug31y?8Y{e#BPu?CYJ=`Lhg;R>;@Qqkm1Wu?~ zCdb8BNx4un4)-zh2y9&X8{@Afc#7x~UpPZuU^CfaGkqfSJ&s$wX|^tbTF1vS!wK8G zwyzjQzSqIe@Gh`@)FX2$I z?VJ(KSqOXN1++BoVh7K#7lht}zVW(^BYdCuN;{dQ#z>XJ#mE(!tx>6p|9TEZ zBxMUGlq%a3K>o3og9@LS2!@WPZ1;G3yS!(+fBd(7D(=YaV7B^5pv6vKg89|=`(IuB zXnceb3O|?dMEA1?JQdmaEU4vOt@vUDqP*Mt`%u3e)aG!WL3?LfxcB>OuoruKA!dHancycM3{Jp_)T?2IhUZ*y}EV>=iQ;W{TZ$s)_eX zCYb3-^ncVCI=3lb>m%<5nur{JK7R$2z8JGOZ1ae$JEFNRp zqex9nPjiNbhHBw61H)H;_TuX#OOuM8)506+D}-ihJ6rZRt;gs4MwyR^>Ttl+C#>4| zp*AkHX;CP&UyGb`L&m;(h1SvouMJgZIGj@#7%=^mcvBRoleP2h%bYh(HXZ(~>sxDH zjQlUjIs8FG*=3t7zm(F{3VEB$0s>m8&w2y&j5b(BT@5Z-yoE@bMz(ATG;ei|;kofo zO5fG>_QmCcALYbwQq)J}%6Eb)hv%&;cohR33TuMLM}0q4C2J%+JT?)W0sa z0MCr?b$D!jZApH#E;!Rc3bcsN7EePr6P(SQaSD3EHTO_!ojl`rv^t(YqtM-uhl3xRy$+_{j>e4!m`^mxn%9G795M{X8tX?5J$ye?frKy{`$ zay9ISLwsPd##oyi>$51;qD3 zsB)RX&Y|+I(b<7Qt_P1Q$g#M(lq3ga(Ne620%wP74>xtRBCfEusuEl5Vc-4r$df9FoGazpH;iN;uHg@ZowQ|v0QB2O8j`n^6!2c^Uu@kv_%!ldzOh0 zguMBXhIVS{ZCkFgwzXiGxpw=Zw0u9a{5+l4!!5R#y@DyJT{yW6+NGb2;PGn+wk8~0|@CBQ!}qtu=GQ1aOcT}GfB+p`vi&A!C>znmn6!gN#;m)3O7A#+Sp))&ddl4xo zMEg8f{Ig{0Ooqd#oSPbK_Iv8!{zO4p_$=ZxaUd{ZdY8J2cB%op8hLH1yYN;gzV9OKN7i%QR71p3<)XyudX2 zV54HKEY!B?fVs?;w&&*D+)1P)s?o8A&NX>4%>wym1t~gQ`i`uzxUPau@sbge*Umah zxjFg|_Xn-5rCLPq9i|ULqS+-7dQlp93L3uquUa_Kof;1pDWylcRTe-{o_v`ZTT|Au zQf{3$E6Cz7atCb$3cjowyxTW2IJG;%n|C8cM-D4KcW;&io~_16{q6q%?$Wk>GI4Fi z4(vDe$pd|7Udm9-cZf6?zOr}V$*_Pu3#F?fbJuexrJrXFE~V&<)l7+7(Oyw3W-={N z3}NiL-oMm^h=h|rFCRV27{QiodB1UxlH!Wh0KXHNko9a1-p)aKPSwls6ZzELJ!Kz5Ikz`$ zG}{9cn{j2-ZL?iWiG-9^{ND5ATZVrHIVttCu+$=I2^~m-*X}L$A8aTPNsOAp?+qv^ zvDdff=V26$ps=7-OX%(97I`^3YNk?``1-y0z$i)uAq^20*YIKQ9D<3lKTy6Humlje z4W5{cb`!5c`-j2cRJyUQ3r^O)qV9Uvk9sSzMed}Tai5|e^VItnLOv)2=FS=VRR88D zNRz=DU$ zPuc@3ZtXjRS&%9dliD7Tbjy0273e9tGzR-K$g0+cgr9H~ijop^5gmf`d)(pIy69vL z(QLVyS2YAine`rwtGL~ks_eY86Q=n?uybmFa?M67{Er`D6JqL0>}_obuEu6=S$1CV zkpZ`ZqG~Ij_&-Kq(|oUm2?(^dW)CpS8~+`Qj)noa^#0SA F{{tGI@HGGc literal 0 HcmV?d00001 diff --git a/assets/tw/handler/FORMATION_2.png b/assets/tw/handler/FORMATION_2.png index bae9a30ca3d916ef59e5509d93c6d455ec866bac..51effe6c214501002594c47db685a8edd02651c7 100644 GIT binary patch literal 11630 zcmeHMXHZjHw2pekf`WjEToEu>u%rSZ3B^L_B1J+#DTa^$LW(4G0w@Yd6+sbc3L-@T zrAk#qkX{5qx`NUnN;kB3KyRD(X5QSHSN?eBWX?Hzul4P;F9BJXv{JoI!iJf=oDLfvLwruL6#)D*it|smrgUi z(|nr_Y%QJ+P~NcDbQXgu(&73jzm&e85sTxo-ui&W?uEIrG!R)4wfdnx`;F2sPd{Qj z2$8mzf<8*6VPosCNXKmrTcz?ZnQ$-5n%uV@X|vfGIYf)FwfSx*yX7Ihm4LQREcDo^ zVqZGizyFK#tpVXDd3_^L<2eg#IN|i{HE*SjdwiNgA7a#Z@60`Lx~ke^-(#56>e<&@ z@GeXcXuE=~ii)0|4V^`2+Rz!2nkp)PcmmiT6MNU$@O;M}zs3^z6205I0wS91Yz#JP z>@3j;gC0X{+okpD76^>O88UGCVUM>Wr9XNns)RiU2i(}8|9tE>QC#a4#_oN0HLcP` z`-)vT_0fG2^PYC`C5=7S9ClkF=+=_Y=GSM9w|Vb)XuSK=P=$YRp!KCK8+LpJZL$Y_ zWMpTb*|VUwF>0g7hameXp#_nWLO#jwi^p0{29<$U<0A@8zzC4uy`Z6~g$`3uk!rLO zA?8rNZuPx9S)B&BRs-1N8qz47Id$Tq$6OSdA2W@-t|(f|Z0IL{{oH+IAQ&T98WeU( zRAgxDLIJY$Fv*9d>3gb@{`tA6$2k;8`gS*Tka^z99zwb;jl2dKa0PwTsJ8g}4rW}} zC{)W|(NK2*DtIv2U-Yo)dEel0p}hq=L<{u9>6pLBPdYHx_QI|>`-aO3&BR4hCi4N7}BUx+T# z;pp2ego?R5jpFtg_ok|$pYeUiV7%Xg#FiCD@jU`d2TT275vsV_$7dza-p##OCFH+3 z>WuHHh4}jm{N*c;ItuRI>|79Nx@){K>A>%&JjFrM#{?v|xmz7?;;?xu)i-^w4{VOQ z7rWSaZG}yEadxF@&q1#ck~$9gLQub9{QlB~jk1y;)l-{BPwgAtB=qXHyjKD*K>Qy! zZ9FaQ|J#*Ih>zEH-`aqa6xr>a`(SUxwe(9zQg|F62*~=N7<*Y)Ngrj=TcB5KFa6fN z!2r$|=Y90+_PSHMuHUHIC2Ziwl2oY@%erBFYv1Qhn^gq##3HsHQaPisQTWu@1A`Q? zG~dyOl;MlR(yZSLK|59QAL!c%a)sTtNWr%~F1zqdzF8i9eDk z2+#;iuDZCJM^zP}cQ%5zMnd>Tf5P2|Mh{VmY5H6AVpEh`@vYLAx6cabsM#gdH#ZD} zSSPTev4K!E!h`6h{lnSA0yAi?FptkeQV=3!uh&_z!@}7cvqiJ_wS-`9h*ky>A3ryK zift1c3)orV@XXR4k+t!BmVplEWo_YCcD{DHnBFZCZB zGd}j4^w-@+$6KXY$4vEI9{Uqy4QC8ZpWe$fe&~X`qVX+N(7amXX8Ifb3rU8FEW;7s zcR5IWhZ@EZqvD$F5ID8@i~8;p75@DypY#Ky7p1MGNrucG2oiXt+HmyWu@%r2&KKxr9^#|E1 zLysCrzT3;g!x~boW)P2Aa*oT6hYDv4eF|mVD&6$mZn#aj&ChJ(o>)G(yq{abJLUNYkEkd(H&%1nxU4*b*L9Zch%m@DAbw z;e`~Ph&K^6uDD3e9?j?4Q0cL>9vk*sUrQmI^ENG{=_lz?koLUFxlYq5)4qZyLr#rs znl<;$|t_7xwWM4zgM^~870uMo}8+rIGxR&FOzDY4FH6kIXsPT0Yj zwvIBBagPt*MMNHJ-`5VTO?0iCUYP!UD7av>z`=CPEQz)wAD3T3GjKL@4srKc+{Dl3 zk5dnSdp$YTI&J85qqTXPIXIIqv)$f$PHXNc{Y_V6(Hr+BzkZ=F=O>tbghu&}{P)f^ zjlJ|6eMh}=yl$T7p5XM#(>wO|e| z3a6RimMEMkln|Y0@z&*S#9Iwgx+S5~JfOv2=#ArB(m>)sbbqo4_e6IAL$OTxA^H;+ zJfP|t2tCne98GZ}aM)k)TgiRT~+GEHYm&{FWODa9btJ4)fcU0+ciPEOXuzObw zH3S}STSVr{Oe6iW>#_r~AJxW0PMD$&Z5Nayt8@fr6;;S~G`4!b!DX2v?+@HPA3l9p z9y_lQ=MV>{Un=OB(y2W%#h!j?e)U3`S@XpQ7oX)_VkHgLaPduPNl)AeW0}wkN~M+b z`m4Fub8YRsq;sGrU>*ffikWVhQS<$T=d+$;7XyU@R4e3BFYHsg{5z#TpkLTdK2Fn- z&~`Z_qMfdNT&s^hNGn~qQ%|^K!S1}BLw;8G(7w^A&gfIySXX!cerW=<5hl?ko>ju! zLQ<~|iByOjFV-Ux^z#FsX=iC)5H;;EBkSenj>X;t#Xp9}1A3y2ZJG=Cpw?QPt+{$dc@G~Qo`O5Rb zz?MY`EYE%(1wS#rLYRWtq-dPHM}NTLofbk#W?a!8#>Bg-rLa$9`t9^yjTZ+>s*Ao4 z8*$Tz@|m>8ZWE>mJO6XsyOMy#`}6xeWtX3ujY=vhk1AomUMllZAay@Ka+16{<5@g> z;5)J6dIN4+s!RRtVfGQ&N%IAlCC#?*sN{;1$5%}k>ppilzjRqb!i5#&R!nD>S~8<8 zQeJ*oeK$$wus+Nz6GSs9=8?tvUd)e>G3sj3J!c`A0?u>J@ssyFhrjQg`8Jsxq#N(K zY5w~3V#@418`vH@*#g^OW1X{D5}gVqTG1`ZP!}o#*dK#HiYHwdM3NnuC22{vwxub7 zIYlqQlD1Y#V1k?uT!*1Twz1W4b0D90J7-98vm;@wz$cZrE4p9-04kY9lysrm)0kKn zCGa{f7Pwy_Gf7f8LRGk2jp9cMx z8cajrZ31RMX3`xUNMuzfGL0qmcL*!epZW|(2m5t*tVl4jJ(&uKGJ#bQ|5#F8Q%CPl zjWr6aZK;fPEr9HQNV04xf06YM+ty~*-TAvAfcl@f|B(K}_jO@FN=FBaqmvxh%+tgv zf!Ef@TG2_iR@n7hc?_B&V<|_3kVtSOL{=V&f}rK($Pg4o7A}v%kkCW~@o!L?G$xBk zBazpj0C1=+fFo;(hFii(B#6Ac90ejP14lqGvM3A$O|e8F&B1@D(K!}z^Gz2bVC4<7Ckti!Nc^%4%gjJ(EP>Db| zZK*_SGK@j9UY}Sa9D7<%QwfZO!v7l4vnR4BfC5khwlpicGxM)0Lt85OJd3!-Cqf>9 zz{tyC;7B#WkqBWaYPmw0EHuEv2fr-7$V_VIRsV~c^r<$!v7{ux3Z1 ziey8iS(AbO@iSrn7`Oc|l0goIBFZ7rNC<^&MS{qp&=iOz(Fy?}V`NY$6d6vWV17jK zPjn`o!g3}$kWX6!JOW$+3A)aer1Z~F9sQ>@&Nk$=H~^GE;K2D8WnkD(XJKm{;}35Y zVgHE_#dU$dwHQF}#~9GMfKCYevlag23$XQn^Y|Hu|IH;NC4VjQulW5%*Dt#M6$AfD z_*ZuQqU&EV@UMh_W!L{0UEBY9nIhAG9gs8ds`NF-;wtc(#bc?hjsvZNPJw*YDeZ@W zk!=hO6W}L)UZJ(m2GISOy};lWmZpyCmf_zv?2tKTCYNjj0_}Ft#GN*D>73|6_?v!b zZ}}P@kzcb~M!Q#LkhQ7QGSHiBYW(_W!z0Y;jm=?T5d-7F`(l~{Q`dRJk4ZztEW$rC zz8o9Q*xGh_W8v#(goDP1oo#mV<@1P~A1}LT9On9&=cUB3nZ`E?#hUO=bnMabta#n* zqHNAG4WKE2FvolQnmq z=&Q~MuqhIUz)}euhd7; z8@E=Ez>*UK2i&A+#cl(+1dG5?gz)6@Oz&7<0iJ+}uGhlr9`4dt#hIn~KQtCD4|aE7 z6nMUxZ5GOjLUWD-E~Aq$mz7C3@~H7MnHh_@&ek{_2ct;3leso0rPUgyANh`~pmdLK zo6I7VTcs=`bH6Ug{{x#o->Ka$zR!+R%uKeuKc0xWTx0KqEuiG_Q~cOPivvCM<@fnD z6xW=pi}XHP^yA=p3i}1=t*?M(bPvdk86*T$Te*vR%W$je z22(^sj|en7y3Y3$!B)T3!d5;7CevOn&rM7Y&}4tlofe~pyd7x1+0Uj74)>!I>XhSp zT!$Kh3G|pW2Iu4?`-PVm>x!5Fh6A=lM(z0Y)bI;VZ%m+JC+7aH?KG=th{z14RlvlR<8K9eB;=gaZ9vSZo~{N zu6|!h=k#Fbs|$krpciKc6^Fi@Q4$YLt52`zb;P66c=x@(5uBnWfr!taShd0_qGQ}V z8n5%gfh_U;tVoIo#25=S^LJ6lh&%AOn^gv?_Q5g(oRyW}iNM5fHl|v(e9`6Q<^FDLXG#nYAymPxB|U>Pr4O`I@N*VM=}QU0RY$%}^4x+!{EF?>Z)A*ThsfwEGL?$B4* zK@9P)gIfCE7p=Y76lh@yxt3wB*pU~!V#S!Kh3mNu&t#;fS9F>_O%!)4R)G~Zju#!U zg&lTKty7*p{bnsQUzzZoauhYNQ8P;zOT?hX8a9OZJN1gg6vPEN$MOb8(Ac^cmqX4K z8>ii7cZq$za3%zw5r@*j2v=}#H|I{9h#Fi;b#`(ZJyy7b_rc~%Adt89$FHZerz79`8xPoyY{M1eSZ)h!C&NOs!pwUzj^CRQP z67|i*xzLGhN}Se9fu8blaG`QSsHtu`dwxNFI8x{tw?aTO>6k!AI(1vfN-L_5*v~?3 z@e^-iT5gjC3WM^lv9mzES)JK5Ui>Uu@w-h&_5>mFPIJXnjfLq;w=b7dYkIs^t0&!y z!l*OlCS}LRMA3d3^tp+zA!hiMrAG6Dxh;gm(8ZH|FQ*$OI!=rQS4juvF>{v`!@>|s zHs?0aR*bBt0!SA!)RC9nY=ag|#l@iA=BFZ|ecZ0-#K6Q)jmIsD9F~(Z`?!hxvC9Z!OZ^Qy>VpT}%;Qbb;TmPzHsf!S4O z{%kh9QR-ViuKz}-%z6#RIqsb- z8Y%nKz}qE&5Dy(KWSN+H+Vhq7*klkLWl?V_LhU6UE7_sh%Z)8 z3(aXqCgT@;XVpw9IWgjAMMgx{GpqpJ@H{F?rv+z~nvg-7FX=hblarq>Z~txo8GERR zVWuE+9xl~izRcg{y11}iVti*5hI{W^bd0;;dfyp(gtI`B+~Be7ZnZZ+7ESoPebe4E z@5EVMTDfo?`dlnESEIGoVv^0s{GQ@!&t0xwoKFm>0}M!%pECggRxc>x!@@e=e)8!U zx7ow)UTUa6FX{qBlD_iMZ&q!;9dDfW32gO~y{7bt1NwbS4SnOQKo~;X&v4k!oX3j# z8iP9Q+hpteXGg=9>ZaYQfMR?))7;QC-jy+CzBtyNu{tvQgpi>YvFPqjU!D#Hceaek zw>fQwZK9@XsSPU9Jr@V>WSW=Ey$jT@D2eawTK={?Nz9u#ksVAFmW`JhT5B8Dueq34 zc7+4_c=qRK;rWdQscFnk*OTWs>?}=5X7HF zLOlrxtd#wdPNQA#_MOn54fXw) z8(%()XQ$a1^<4OUHHRNafnUcj27WQ{|IL7P&FY2^-2oaNT#uABTQpVA;WEx#y7nJO C;jsSz literal 10286 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 F{{tGI@HGGc diff --git a/assets/tw/handler/FORMATION_3.BUTTON.png b/assets/tw/handler/FORMATION_3.BUTTON.png new file mode 100644 index 0000000000000000000000000000000000000000..c43781a065594b36fecdc94e98103b334a4ee61f GIT binary patch literal 10313 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 literal 0 HcmV?d00001 diff --git a/assets/tw/handler/FORMATION_3.png b/assets/tw/handler/FORMATION_3.png index c43781a065594b36fecdc94e98103b334a4ee61f..abce4c396d39b57c587abb216e81349aa97f06ac 100644 GIT binary patch literal 11610 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 literal 10313 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 diff --git a/module/handler/assets.py b/module/handler/assets.py index 33f0c0a58..fd6591181 100644 --- a/module/handler/assets.py +++ b/module/handler/assets.py @@ -26,9 +26,9 @@ FAST_FORWARD_OFF = Button(area={'cn': (982, 587, 1022, 605), 'en': (982, 587, 10 FAST_FORWARD_ON = Button(area={'cn': (1024, 587, 1064, 605), 'en': (1024, 587, 1064, 605), 'jp': (1024, 587, 1064, 605), 'tw': (1024, 587, 1064, 605)}, color={'cn': (251, 251, 251), 'en': (251, 251, 251), 'jp': (251, 251, 251), 'tw': (251, 251, 251)}, button={'cn': (1024, 587, 1064, 605), 'en': (1024, 587, 1064, 605), 'jp': (1024, 587, 1064, 605), 'tw': (1024, 587, 1064, 605)}, file={'cn': './assets/cn/handler/FAST_FORWARD_ON.png', 'en': './assets/en/handler/FAST_FORWARD_ON.png', 'jp': './assets/jp/handler/FAST_FORWARD_ON.png', 'tw': './assets/tw/handler/FAST_FORWARD_ON.png'}) FLEET_LOCKED = Button(area={'cn': (1185, 501, 1192, 519), 'en': (1184, 502, 1191, 519), 'jp': (1172, 496, 1180, 531), 'tw': (1185, 501, 1192, 519)}, color={'cn': (59, 100, 110), 'en': (61, 102, 111), 'jp': (56, 87, 103), 'tw': (59, 100, 110)}, button={'cn': (1185, 501, 1192, 519), 'en': (1184, 502, 1191, 519), 'jp': (1172, 496, 1180, 531), 'tw': (1185, 501, 1192, 519)}, file={'cn': './assets/cn/handler/FLEET_LOCKED.png', 'en': './assets/en/handler/FLEET_LOCKED.png', 'jp': './assets/jp/handler/FLEET_LOCKED.png', 'tw': './assets/tw/handler/FLEET_LOCKED.png'}) FLEET_UNLOCKED = Button(area={'cn': (1185, 492, 1192, 525), 'en': (1184, 496, 1191, 522), 'jp': (1171, 492, 1181, 531), 'tw': (1185, 492, 1192, 525)}, color={'cn': (84, 74, 98), 'en': (95, 81, 101), 'jp': (80, 75, 103), 'tw': (84, 74, 98)}, button={'cn': (1185, 492, 1192, 525), 'en': (1184, 496, 1191, 522), 'jp': (1171, 492, 1181, 531), 'tw': (1185, 492, 1192, 525)}, file={'cn': './assets/cn/handler/FLEET_UNLOCKED.png', 'en': './assets/en/handler/FLEET_UNLOCKED.png', 'jp': './assets/jp/handler/FLEET_UNLOCKED.png', 'tw': './assets/tw/handler/FLEET_UNLOCKED.png'}) -FORMATION_1 = Button(area={'cn': (1108, 415, 1170, 477), 'en': (1108, 415, 1170, 477), 'jp': (1108, 415, 1170, 477), 'tw': (1108, 415, 1170, 477)}, color={'cn': (80, 82, 93), 'en': (80, 82, 93), 'jp': (80, 82, 93), 'tw': (80, 82, 93)}, button={'cn': (1108, 415, 1170, 477), 'en': (1108, 415, 1170, 477), 'jp': (1108, 415, 1170, 477), 'tw': (1108, 415, 1170, 477)}, file={'cn': './assets/cn/handler/FORMATION_1.png', 'en': './assets/en/handler/FORMATION_1.png', 'jp': './assets/jp/handler/FORMATION_1.png', 'tw': './assets/tw/handler/FORMATION_1.png'}) -FORMATION_2 = Button(area={'cn': (1108, 415, 1170, 477), 'en': (1108, 415, 1170, 477), 'jp': (1108, 415, 1170, 477), 'tw': (1108, 415, 1170, 477)}, color={'cn': (80, 82, 92), 'en': (80, 82, 92), 'jp': (80, 82, 92), 'tw': (80, 82, 92)}, button={'cn': (1108, 415, 1170, 477), 'en': (1108, 415, 1170, 477), 'jp': (1108, 415, 1170, 477), 'tw': (1108, 415, 1170, 477)}, file={'cn': './assets/cn/handler/FORMATION_2.png', 'en': './assets/en/handler/FORMATION_2.png', 'jp': './assets/jp/handler/FORMATION_2.png', 'tw': './assets/tw/handler/FORMATION_2.png'}) -FORMATION_3 = Button(area={'cn': (1108, 415, 1170, 477), 'en': (1108, 415, 1170, 477), 'jp': (1108, 415, 1170, 477), 'tw': (1108, 415, 1170, 477)}, color={'cn': (79, 82, 92), 'en': (79, 82, 92), 'jp': (79, 82, 92), 'tw': (79, 82, 92)}, button={'cn': (1108, 415, 1170, 477), 'en': (1108, 415, 1170, 477), 'jp': (1108, 415, 1170, 477), 'tw': (1108, 415, 1170, 477)}, file={'cn': './assets/cn/handler/FORMATION_3.png', 'en': './assets/en/handler/FORMATION_3.png', 'jp': './assets/jp/handler/FORMATION_3.png', 'tw': './assets/tw/handler/FORMATION_3.png'}) +FORMATION_1 = Button(area={'cn': (1108, 446, 1170, 477), 'en': (1108, 446, 1170, 477), 'jp': (1108, 446, 1170, 477), 'tw': (1108, 446, 1170, 477)}, color={'cn': (79, 82, 92), 'en': (79, 82, 92), 'jp': (79, 82, 92), 'tw': (79, 82, 92)}, button={'cn': (1108, 415, 1170, 477), 'en': (1108, 415, 1170, 477), 'jp': (1108, 415, 1170, 477), 'tw': (1108, 415, 1170, 477)}, file={'cn': './assets/cn/handler/FORMATION_1.png', 'en': './assets/en/handler/FORMATION_1.png', 'jp': './assets/jp/handler/FORMATION_1.png', 'tw': './assets/tw/handler/FORMATION_1.png'}) +FORMATION_2 = Button(area={'cn': (1108, 446, 1170, 477), 'en': (1108, 446, 1170, 477), 'jp': (1108, 446, 1170, 477), 'tw': (1108, 446, 1170, 477)}, color={'cn': (81, 83, 92), 'en': (81, 83, 92), 'jp': (81, 83, 92), 'tw': (81, 83, 92)}, button={'cn': (1108, 415, 1170, 477), 'en': (1108, 415, 1170, 477), 'jp': (1108, 415, 1170, 477), 'tw': (1108, 415, 1170, 477)}, file={'cn': './assets/cn/handler/FORMATION_2.png', 'en': './assets/en/handler/FORMATION_2.png', 'jp': './assets/jp/handler/FORMATION_2.png', 'tw': './assets/tw/handler/FORMATION_2.png'}) +FORMATION_3 = Button(area={'cn': (1108, 446, 1170, 477), 'en': (1108, 446, 1170, 477), 'jp': (1108, 446, 1170, 477), 'tw': (1108, 446, 1170, 477)}, color={'cn': (79, 82, 91), 'en': (79, 82, 91), 'jp': (79, 82, 91), 'tw': (79, 82, 91)}, button={'cn': (1108, 415, 1170, 477), 'en': (1108, 415, 1170, 477), 'jp': (1108, 415, 1170, 477), 'tw': (1108, 415, 1170, 477)}, file={'cn': './assets/cn/handler/FORMATION_3.png', 'en': './assets/en/handler/FORMATION_3.png', 'jp': './assets/jp/handler/FORMATION_3.png', 'tw': './assets/tw/handler/FORMATION_3.png'}) FORMATION_LOCATION = Button(area={'cn': (145, 115, 437, 159), 'en': (145, 115, 437, 159), 'jp': (145, 115, 437, 159), 'tw': (145, 115, 437, 159)}, color={'cn': (103, 118, 118), 'en': (103, 118, 118), 'jp': (103, 118, 118), 'tw': (103, 118, 118)}, button={'cn': (145, 115, 437, 159), 'en': (145, 115, 437, 159), 'jp': (145, 115, 437, 159), 'tw': (145, 115, 437, 159)}, file={'cn': './assets/cn/handler/FORMATION_LOCATION.png', 'en': './assets/en/handler/FORMATION_LOCATION.png', 'jp': './assets/jp/handler/FORMATION_LOCATION.png', 'tw': './assets/tw/handler/FORMATION_LOCATION.png'}) GAME_TIPS = Button(area={'cn': (1009, 586, 1028, 614), 'en': (1009, 586, 1028, 614), 'jp': (1009, 586, 1028, 614), 'tw': (1009, 586, 1028, 614)}, color={'cn': (85, 84, 85), 'en': (85, 84, 85), 'jp': (85, 84, 85), 'tw': (85, 84, 85)}, button={'cn': (924, 653, 943, 672), 'en': (924, 653, 943, 672), 'jp': (924, 653, 943, 672), 'tw': (924, 653, 943, 672)}, file={'cn': './assets/cn/handler/GAME_TIPS.png', 'en': './assets/en/handler/GAME_TIPS.png', 'jp': './assets/jp/handler/GAME_TIPS.png', 'tw': './assets/tw/handler/GAME_TIPS.png'}) GAME_TIPS3 = Button(area={'cn': (1008, 586, 1028, 614), 'en': (1008, 586, 1028, 614), 'jp': (1008, 586, 1028, 614), 'tw': (1008, 586, 1028, 614)}, color={'cn': (105, 104, 105), 'en': (105, 104, 105), 'jp': (105, 104, 105), 'tw': (105, 104, 105)}, button={'cn': (1008, 586, 1028, 614), 'en': (1008, 586, 1028, 614), 'jp': (1008, 586, 1028, 614), 'tw': (1008, 586, 1028, 614)}, file={'cn': './assets/cn/handler/GAME_TIPS3.png', 'en': './assets/en/handler/GAME_TIPS3.png', 'jp': './assets/jp/handler/GAME_TIPS3.png', 'tw': './assets/tw/handler/GAME_TIPS3.png'}) From 28d3116a817e07ecbfed3da7f34173cde4fecb9e Mon Sep 17 00:00:00 2001 From: RilyLC <94281898+RilyLC@users.noreply.github.com> Date: Wed, 3 Apr 2024 23:39:52 +0800 Subject: [PATCH 34/96] Upd:[TW]Event:The Flame-Touched Dagger Rerun (#3605) --- campaign/Readme.md | 1 + module/config/argument/args.json | 40 ++++++++++++++++---------------- module/config/i18n/zh-TW.json | 2 +- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/campaign/Readme.md b/campaign/Readme.md index fd3a4751a..212ecd771 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -189,3 +189,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20240314 | event 20220324 cn | Virtual Tower Rerun | 复刻虚像构筑之塔 | Virtual Tower Rerun | 幻像の塔(復刻) | - | | 20240321 | raid 20230629 | Reflections of the Oasis | - | - | - | 綠洲往事 | | 20240328 | raid 20240328 | From Zero to Hero | 从零开始的魔王讨伐之旅 | From Zero to Hero | ゼロから頑張る魔王討伐 | - | +| 20240403 | event 20211111 cn | The Flame-Touched Dagger | - | - | - | 復刻杰諾瓦的焰火 | diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 5933dbea0..e91eb3469 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1681,13 +1681,13 @@ ], "display": "hide", "option_bold": [ - "event_20210422_cn", + "event_20211111_cn", "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20210422_cn" + "tw": "event_20211111_cn" }, "Mode": { "type": "select", @@ -2014,13 +2014,13 @@ "event_20240229_cn" ], "option_bold": [ - "event_20210422_cn", + "event_20211111_cn", "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20210422_cn" + "tw": "event_20211111_cn" }, "Mode": { "type": "select", @@ -2462,13 +2462,13 @@ "event_20240229_cn" ], "option_bold": [ - "event_20210422_cn", + "event_20211111_cn", "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20210422_cn" + "tw": "event_20211111_cn" }, "Mode": { "type": "select", @@ -2873,8 +2873,8 @@ "raid_20240328" ], "option_bold": [ - "raid_20230629", - "raid_20240328" + "raid_20240328", + "raid_20230629" ], "cn": "raid_20240328", "en": "raid_20240328", @@ -3856,13 +3856,13 @@ "event_20240229_cn" ], "option_bold": [ - "event_20210422_cn", + "event_20211111_cn", "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20210422_cn" + "tw": "event_20211111_cn" }, "Mode": { "type": "select", @@ -4321,13 +4321,13 @@ "event_20240229_cn" ], "option_bold": [ - "event_20210422_cn", + "event_20211111_cn", "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20210422_cn" + "tw": "event_20211111_cn" }, "Mode": { "type": "select", @@ -4786,13 +4786,13 @@ "event_20240229_cn" ], "option_bold": [ - "event_20210422_cn", + "event_20211111_cn", "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20210422_cn" + "tw": "event_20211111_cn" }, "Mode": { "type": "select", @@ -5251,13 +5251,13 @@ "event_20240229_cn" ], "option_bold": [ - "event_20210422_cn", + "event_20211111_cn", "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20210422_cn" + "tw": "event_20211111_cn" }, "Mode": { "type": "select", @@ -5706,13 +5706,13 @@ "event_20240229_cn" ], "option_bold": [ - "event_20210422_cn", + "event_20211111_cn", "event_20220324_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", "jp": "event_20220324_cn", - "tw": "event_20210422_cn" + "tw": "event_20211111_cn" }, "Mode": { "type": "select", @@ -6114,8 +6114,8 @@ "raid_20240328" ], "option_bold": [ - "raid_20230629", - "raid_20240328" + "raid_20240328", + "raid_20230629" ], "cn": "raid_20240328", "en": "raid_20240328", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index b8bdb0687..20b092a2b 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -687,7 +687,7 @@ "event_20210916_cn": "碧海光粼", "event_20211028_cn": "復刻穹頂下的聖詠曲", "event_20211028_tw": "復刻光與影的鳶尾之華", - "event_20211111_cn": "杰諾瓦的焰火", + "event_20211111_cn": "復刻杰諾瓦的焰火", "event_20211125_cn": "復刻-交匯世界的弧光", "event_20211229_cn": "逆轉彩虹之塔", "event_20220210_cn": "復刻北境序曲", From 894e0c4c82dfabb62067ad028ee2195326a7948a Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Wed, 3 Apr 2024 23:42:20 +0800 Subject: [PATCH 35/96] Opt: reset dorm view before dorm_collect (#3510) --- assets/cn/dorm/DORM_MANAGE.png | Bin 0 -> 8696 bytes assets/en/dorm/DORM_MANAGE.png | Bin 0 -> 8696 bytes assets/jp/dorm/DORM_MANAGE.png | Bin 0 -> 8696 bytes assets/tw/dorm/DORM_MANAGE.png | Bin 0 -> 8696 bytes module/dorm/assets.py | 1 + module/dorm/dorm.py | 55 ++++++++++++++++++++------------- 6 files changed, 34 insertions(+), 22 deletions(-) create mode 100644 assets/cn/dorm/DORM_MANAGE.png create mode 100644 assets/en/dorm/DORM_MANAGE.png create mode 100644 assets/jp/dorm/DORM_MANAGE.png create mode 100644 assets/tw/dorm/DORM_MANAGE.png diff --git a/assets/cn/dorm/DORM_MANAGE.png b/assets/cn/dorm/DORM_MANAGE.png new file mode 100644 index 0000000000000000000000000000000000000000..a15de5da8a3a3b47cc78dea08d54a3fae27fe4ee GIT binary patch literal 8696 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 literal 0 HcmV?d00001 diff --git a/assets/en/dorm/DORM_MANAGE.png b/assets/en/dorm/DORM_MANAGE.png new file mode 100644 index 0000000000000000000000000000000000000000..a15de5da8a3a3b47cc78dea08d54a3fae27fe4ee GIT binary patch literal 8696 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 literal 0 HcmV?d00001 diff --git a/assets/jp/dorm/DORM_MANAGE.png b/assets/jp/dorm/DORM_MANAGE.png new file mode 100644 index 0000000000000000000000000000000000000000..a15de5da8a3a3b47cc78dea08d54a3fae27fe4ee GIT binary patch literal 8696 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 literal 0 HcmV?d00001 diff --git a/assets/tw/dorm/DORM_MANAGE.png b/assets/tw/dorm/DORM_MANAGE.png new file mode 100644 index 0000000000000000000000000000000000000000..a15de5da8a3a3b47cc78dea08d54a3fae27fe4ee GIT binary patch literal 8696 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 literal 0 HcmV?d00001 diff --git a/module/dorm/assets.py b/module/dorm/assets.py index a0b2f5d57..fcc90cc6b 100644 --- a/module/dorm/assets.py +++ b/module/dorm/assets.py @@ -17,6 +17,7 @@ DORM_FURNITURE_SHOP_ENTER = Button(area={'cn': (1067, 604, 1120, 650), 'en': (10 DORM_FURNITURE_SHOP_FIRST = Button(area={'cn': (241, 565, 271, 572), 'en': (241, 565, 271, 572), 'jp': (241, 565, 271, 572), 'tw': (241, 565, 271, 572)}, color={'cn': (247, 213, 129), 'en': (247, 213, 129), 'jp': (247, 213, 129), 'tw': (247, 213, 129)}, button={'cn': (241, 565, 271, 572), 'en': (241, 565, 271, 572), 'jp': (241, 565, 271, 572), 'tw': (241, 565, 271, 572)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_SHOP_FIRST.png', 'en': './assets/en/dorm/DORM_FURNITURE_SHOP_FIRST.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_SHOP_FIRST.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_SHOP_FIRST.png'}) DORM_FURNITURE_SHOP_FIRST_SELECTED = Button(area={'cn': (239, 519, 273, 525), 'en': (239, 519, 273, 525), 'jp': (239, 519, 273, 525), 'tw': (239, 519, 273, 525)}, color={'cn': (242, 205, 114), 'en': (242, 205, 114), 'jp': (242, 205, 114), 'tw': (242, 205, 114)}, button={'cn': (239, 519, 273, 525), 'en': (239, 519, 273, 525), 'jp': (239, 519, 273, 525), 'tw': (239, 519, 273, 525)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_SHOP_FIRST_SELECTED.png', 'en': './assets/en/dorm/DORM_FURNITURE_SHOP_FIRST_SELECTED.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_SHOP_FIRST_SELECTED.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_SHOP_FIRST_SELECTED.png'}) DORM_FURNITURE_SHOP_QUIT = Button(area={'cn': (38, 34, 58, 63), 'en': (38, 34, 58, 63), 'jp': (38, 34, 58, 63), 'tw': (38, 34, 58, 63)}, color={'cn': (255, 241, 195), 'en': (255, 241, 195), 'jp': (255, 241, 195), 'tw': (255, 241, 195)}, button={'cn': (38, 34, 58, 63), 'en': (38, 34, 58, 63), 'jp': (38, 34, 58, 63), 'tw': (38, 34, 58, 63)}, file={'cn': './assets/cn/dorm/DORM_FURNITURE_SHOP_QUIT.png', 'en': './assets/en/dorm/DORM_FURNITURE_SHOP_QUIT.png', 'jp': './assets/jp/dorm/DORM_FURNITURE_SHOP_QUIT.png', 'tw': './assets/tw/dorm/DORM_FURNITURE_SHOP_QUIT.png'}) +DORM_MANAGE = Button(area={'cn': (949, 600, 1005, 659), 'en': (949, 600, 1005, 659), 'jp': (949, 600, 1005, 659), 'tw': (949, 600, 1005, 659)}, color={'cn': (255, 245, 213), 'en': (255, 245, 213), 'jp': (255, 245, 213), 'tw': (255, 245, 213)}, button={'cn': (949, 600, 1005, 659), 'en': (949, 600, 1005, 659), 'jp': (949, 600, 1005, 659), 'tw': (949, 600, 1005, 659)}, file={'cn': './assets/cn/dorm/DORM_MANAGE.png', 'en': './assets/en/dorm/DORM_MANAGE.png', 'jp': './assets/jp/dorm/DORM_MANAGE.png', 'tw': './assets/tw/dorm/DORM_MANAGE.png'}) DORM_MANAGE_CHECK = Button(area={'cn': (1128, 116, 1150, 135), 'en': (1128, 116, 1150, 135), 'jp': (1128, 116, 1150, 135), 'tw': (1128, 116, 1150, 135)}, color={'cn': (173, 147, 77), 'en': (173, 147, 77), 'jp': (173, 147, 77), 'tw': (173, 147, 77)}, button={'cn': (1128, 116, 1150, 135), 'en': (1128, 116, 1150, 135), 'jp': (1128, 116, 1150, 135), 'tw': (1128, 116, 1150, 135)}, file={'cn': './assets/cn/dorm/DORM_MANAGE_CHECK.png', 'en': './assets/en/dorm/DORM_MANAGE_CHECK.png', 'jp': './assets/jp/dorm/DORM_MANAGE_CHECK.png', 'tw': './assets/tw/dorm/DORM_MANAGE_CHECK.png'}) DORM_RED_DOT = Button(area={'cn': (528, 339, 543, 356), 'en': (528, 339, 543, 356), 'jp': (528, 339, 543, 356), 'tw': (734, 215, 767, 248)}, color={'cn': (214, 126, 114), 'en': (214, 126, 114), 'jp': (214, 126, 114), 'tw': (130, 89, 94)}, button={'cn': (528, 339, 543, 356), 'en': (528, 339, 543, 356), 'jp': (528, 339, 543, 356), 'tw': (734, 215, 767, 248)}, file={'cn': './assets/cn/dorm/DORM_RED_DOT.png', 'en': './assets/en/dorm/DORM_RED_DOT.png', 'jp': './assets/jp/dorm/DORM_RED_DOT.png', 'tw': './assets/tw/dorm/DORM_RED_DOT.png'}) OCR_DORM_FILL = Button(area={'cn': (813, 271, 987, 296), 'en': (813, 271, 987, 296), 'jp': (813, 271, 987, 296), 'tw': (813, 271, 987, 296)}, color={'cn': (222, 213, 193), 'en': (222, 213, 193), 'jp': (222, 213, 193), 'tw': (222, 213, 193)}, button={'cn': (813, 271, 987, 296), 'en': (813, 271, 987, 296), 'jp': (813, 271, 987, 296), 'tw': (813, 271, 987, 296)}, file={'cn': './assets/cn/dorm/OCR_DORM_FILL.png', 'en': './assets/en/dorm/OCR_DORM_FILL.png', 'jp': './assets/jp/dorm/OCR_DORM_FILL.png', 'tw': './assets/tw/dorm/OCR_DORM_FILL.png'}) diff --git a/module/dorm/dorm.py b/module/dorm/dorm.py index ef9983a91..ba057b425 100644 --- a/module/dorm/dorm.py +++ b/module/dorm/dorm.py @@ -78,8 +78,8 @@ class RewardDorm(UI): out: page_dorm, with info_bar """ image = MASK_DORM.apply(self.device.image) - loves = TEMPLATE_DORM_LOVE.match_multi(image, name='DORM_LOVE', scaling=1.5) - coins = TEMPLATE_DORM_COIN.match_multi(image, name='DORM_COIN', scaling=1.5) + loves = TEMPLATE_DORM_LOVE.match_multi(image, name='DORM_LOVE') + coins = TEMPLATE_DORM_COIN.match_multi(image, name='DORM_COIN') logger.info(f'Dorm loves: {len(loves)}, Dorm coins: {len(coins)}') # Complicated dorm background if len(loves) > 6: @@ -153,6 +153,35 @@ class RewardDorm(UI): f'does not support DOWN/UP events, use multi-click instead') self.device.multi_click(button, count) + def dorm_view_reset(self, skip_first_screenshot=True): + """ + Use Dorm manage and Back to reset dorm view. + + Pages: + in: page_dorm, without info_bar + out: page_dorm, without info_bar + """ + while 1: + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() + + if self.appear(DORM_MANAGE_CHECK, offset=(20, 20)): + break + + if self.appear(DORM_FEED_ENTER, offset=(20, 20), interval=5): + self.device.click(DORM_MANAGE) + + while 1: + self.device.screenshot() + + if self.appear(DORM_FEED_ENTER, offset=(20, 20)): + break + + if self.appear(DORM_MANAGE_CHECK, offset=(20, 20), interval=5): + self.device.click(DORM_FURNITURE_SHOP_QUIT) + def dorm_collect(self): """ Click all coins and loves on current screen. @@ -164,26 +193,8 @@ class RewardDorm(UI): out: page_dorm, without info_bar """ logger.hr('Dorm collect') - # if self.config.Emulator_ControlMethod not in ['uiautomator2', 'minitouch']: - # logger.warning(f'Current control method {self.config.Emulator_ControlMethod} ' - # f'does not support 2 finger zoom out, skip dorm collect') - # return - - # Already at a high camera view now, no need to zoom-out. - # for _ in range(2): - # logger.info('Dorm zoom out') - # # Left hand down - # x, y = random_rectangle_point((33, 228, 234, 469)) - # self.device.minitouch_builder.down(x, y, contact_id=1).commit() - # self.device.minitouch_send() - # # Right hand swipe - # # Need to avoid drop-down menu in android, which is 38 px. - # p1, p2 = random_rectangle_vector( - # (-700, 450), box=(247, 45, 1045, 594), random_range=(-50, -50, 50, 50), padding=0) - # self.device.drag_minitouch(p1, p2, point_random=(0, 0, 0, 0)) - # # Left hand up - # self.device.minitouch_builder.up(contact_id=1).commit() - # self.device.minitouch_send() + + self.dorm_view_reset() # Collect _dorm_receive_attempt = 0 From dd3d26d97e7a96af79da0a16e81b375fbb94470e Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 3 Apr 2024 23:50:35 +0800 Subject: [PATCH 36/96] Opt: Reuse screenshots in dorm_view_reset() --- module/dorm/dorm.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/module/dorm/dorm.py b/module/dorm/dorm.py index ba057b425..1763f3e97 100644 --- a/module/dorm/dorm.py +++ b/module/dorm/dorm.py @@ -158,29 +158,42 @@ class RewardDorm(UI): Use Dorm manage and Back to reset dorm view. Pages: - in: page_dorm, without info_bar - out: page_dorm, without info_bar + in: page_dorm + out: page_dorm """ + logger.info('Dorm view reset') while 1: if skip_first_screenshot: skip_first_screenshot = False else: self.device.screenshot() - + + # End if self.appear(DORM_MANAGE_CHECK, offset=(20, 20)): break - if self.appear(DORM_FEED_ENTER, offset=(20, 20), interval=5): + if self.appear(DORM_FEED_ENTER, offset=(20, 20), interval=3): self.device.click(DORM_MANAGE) + continue + # Handle all popups + if self.ui_additional(): + continue + if self.appear_then_click(DORM_FURNITURE_CONFIRM, offset=(30, 30), interval=3): + continue + skip_first_screenshot = True while 1: - self.device.screenshot() + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() if self.appear(DORM_FEED_ENTER, offset=(20, 20)): break - if self.appear(DORM_MANAGE_CHECK, offset=(20, 20), interval=5): + if self.appear(DORM_MANAGE_CHECK, offset=(20, 20), interval=3): self.device.click(DORM_FURNITURE_SHOP_QUIT) + continue def dorm_collect(self): """ @@ -193,7 +206,7 @@ class RewardDorm(UI): out: page_dorm, without info_bar """ logger.hr('Dorm collect') - + self.dorm_view_reset() # Collect @@ -531,7 +544,7 @@ class RewardDorm(UI): self.config.Scheduler_Enable = False self.config.task_stop() - self.dorm_run(feed=self.config.Dorm_Feed, + self.dorm_run(feed=self.config.Dorm_Feed, collect=self.config.Dorm_Collect, buy_furniture=self.config.BuyFurniture_Enable) From b181669c57d0696cafc74abe43fa164842720ab7 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 3 Apr 2024 23:53:24 +0800 Subject: [PATCH 37/96] Fix: Handle action point popup during globe_update() --- module/os/globe_camera.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/module/os/globe_camera.py b/module/os/globe_camera.py index c4e72783c..8b4215f7a 100644 --- a/module/os/globe_camera.py +++ b/module/os/globe_camera.py @@ -6,8 +6,8 @@ from module.os.assets import * from module.os.globe_detection import GLOBE_MAP_SHAPE, GlobeDetection from module.os.globe_operation import GlobeOperation from module.os.globe_zone import Zone, ZoneManager -from module.os_ash.assets import ASH_SHOWDOWN, ASH_QUIT -from module.os_handler.assets import AUTO_SEARCH_REWARD +from module.os_ash.assets import ASH_QUIT, ASH_SHOWDOWN +from module.os_handler.assets import ACTION_POINT_CANCEL, ACTION_POINT_USE, AUTO_SEARCH_REWARD class GlobeCamera(GlobeOperation, ZoneManager): @@ -66,6 +66,11 @@ class GlobeCamera(GlobeOperation, ZoneManager): self.device.click(ASH_QUIT) timeout.reset() continue + # Action point popup + if self.appear(ACTION_POINT_USE, offset=(20, 20), interval=3): + self.device.click(ACTION_POINT_CANCEL) + timeout.reset() + continue logger.warning('Trying to do globe_update(), but not in os globe map') continue From 31462288bd512f331a9d8c6d6268779585806279 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 4 Apr 2024 00:02:19 +0800 Subject: [PATCH 38/96] Opt: Reset dock sorting after changing flagship (#3532) --- module/campaign/gems_farming.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/module/campaign/gems_farming.py b/module/campaign/gems_farming.py index eb537eed1..786d7f780 100644 --- a/module/campaign/gems_farming.py +++ b/module/campaign/gems_farming.py @@ -194,17 +194,19 @@ class GemsFarming(CampaignRun, Dock, EquipmentChange): scanner.disable('rarity') if self.config.GemsFarming_CommonCV == 'any': - logger.info('') self.dock_sort_method_dsc_set(False) ships = scanner.scan(self.device.image) if ships: # Don't need to change current + self.dock_sort_method_dsc_set() return ships scanner.set_limitation(fleet=0) - return scanner.scan(self.device.image, output=False) + ships = scanner.scan(self.device.image, output=False) + self.dock_sort_method_dsc_set() + return ships else: template = { @@ -234,6 +236,7 @@ class GemsFarming(CampaignRun, Dock, EquipmentChange): candidates = [ship for ship in scanner.scan(self.device.image) if template.match(self.image_crop(ship.button), similarity=SIM_VALUE)] + self.dock_sort_method_dsc_set() return candidates def get_common_rarity_dd(self): From 1decd3d6a1551955287f71d779d33221d33170f7 Mon Sep 17 00:00:00 2001 From: Air111 <54128005+Air111@users.noreply.github.com> Date: Thu, 4 Apr 2024 19:31:26 +0800 Subject: [PATCH 39/96] Fix: Reset dock sorting after changing ship (#3608) --- module/campaign/gems_farming.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/module/campaign/gems_farming.py b/module/campaign/gems_farming.py index 786d7f780..aed711907 100644 --- a/module/campaign/gems_farming.py +++ b/module/campaign/gems_farming.py @@ -177,6 +177,7 @@ class GemsFarming(CampaignRun, Dock, EquipmentChange): self.dock_select_one(button) self.dock_filter_set() + self.dock_sort_method_dsc_set() self.dock_select_confirm(check_button=page_fleet.check_button) def get_common_rarity_cv(self): @@ -200,13 +201,10 @@ class GemsFarming(CampaignRun, Dock, EquipmentChange): ships = scanner.scan(self.device.image) if ships: # Don't need to change current - self.dock_sort_method_dsc_set() return ships scanner.set_limitation(fleet=0) - ships = scanner.scan(self.device.image, output=False) - self.dock_sort_method_dsc_set() - return ships + return scanner.scan(self.device.image, output=False) else: template = { @@ -236,7 +234,6 @@ class GemsFarming(CampaignRun, Dock, EquipmentChange): candidates = [ship for ship in scanner.scan(self.device.image) if template.match(self.image_crop(ship.button), similarity=SIM_VALUE)] - self.dock_sort_method_dsc_set() return candidates def get_common_rarity_dd(self): From df408fad9d2cde26425cedb8285e06fb88727e84 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 5 Apr 2024 17:48:34 +0800 Subject: [PATCH 40/96] Upd: [EN] DORM_FEED_ENTER --- assets/en/dorm/DORM_FEED_ENTER.png | Bin 9151 -> 8091 bytes module/dorm/assets.py | 2 +- module/dorm/dorm.py | 5 ++--- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/assets/en/dorm/DORM_FEED_ENTER.png b/assets/en/dorm/DORM_FEED_ENTER.png index b3c12eb9d2ca5c9c4b94509077e27287e6396c5d..ea99ee4959749bda7046714029c7ae2d24ca4f2b 100644 GIT binary patch literal 8091 zcmeI1_fyl$*T+AA3aC_pAl+~k5d=kwbQF;2rG^gDFTF!3p#+etL?TT}qy-7Ri-6Ps z3P=e7Lzmt=gpQ$px!?Odf5P*_Gvm(eoX^Z>W_QnP-+OlFoVVJVYIIjQt^xo+_Z*@E z1%S&JpOimnC@+i>?+c0xL+b%C_6C4!H~#4qKuQ`r09@5@R94p3c5sKedpo#$@I6;n z=JW7!w{vu{1pxoibX`BA_(L{@sY6=^gQp`~VmRal=yD(n$}zmm!pi z`A*y-)(Mb?zLt|2;f>LPw07b`DOn-Ym-rYL@!#w(w*kNw72F>I`=oe6QRWU%0v>}R ze=xVtoQKzG-!TOE;(%!|^U^hnSSZjTqSwI!bg%=TbSwV43M2r43q0s47$~Fz*7u$( zTn0u8;>SV22$rjW28f~nlJBbhL8(*^Sn7vCg(;iA0UwK%z#^BLODRH)zlf<(hT<** zzR^ap3`&+jX!29xZh-GGC7{f6gFwZnPWACYU(=Q;pzkcnT<9xKK!EzZv@+AX<|_S&## z&Rgzag__)|t2mb0~%LM>FozD8#|V-?OoRExLMEBw^c%FVYF z8oh+S^z@8>ejdpk~G*0DKXW}gLN{HAtZ_+7k zydND<{6?!;^9ywq-lZ9_NkNICH|p~Rln}f3-*H@v0~qba#o&hk5Z^?OQ4*p62^EQvXf^04g8D?tOYfef=v-aWj3|SMG*p5T(@>6{YKcG|MqQy)qxlbv2Vc z>B&vKW|@&oRiCIhJ~E}uFjjtj_?T{Kn)zkeng{5LB|GLDd&3*rOHVpzZdl!tK{8oK zkAQn*Z>rf3)`Y6@r^KwLf|L9GGi8GjmCSje49F;uspZu~3IlfEl1EM9O5CJa_%*t1YS`;!>fWzPG;OAiVIJ zUXeaSk-0%|?lb)g?YRQl0k)#S0&e~K0?E=Is2?;&yI02|tI^{0)sYR|=QppPeS8DS z(zB`lelzM8+jlYBZKJ0{UItWa!pUq+e~^M*u{)P_vG}CzxU-y< zwWHWrc58Oqe4`*C!8ygQj#$|b>+bFl9xom#?p%+S9!zt_ST+7^7(0o2ouiu8_5vk| zYEK$X3c_Db(nvZi{$QYB05{k-7%qN3^m0vj&2`AoMVr$w^?IsID*j7;Noq-}Z>sAQ z%PdQbV4vW=uG{Ft^^^6h>nZD3Hlz=%4sIW~9`tf|b1`!d$--oVykI`vzAhdOYuPj6 zEd{LwEh~ohoc5XC>AMo3+&^RS%xGUUNY^zlGS4j|0H3(Pv02ww)xV#WTAw;z^3!!- zqFcT#xae3zB$cz%tVN#mWN+)xXx6iPEfosQD ztLZcjA809~Aa8rrvqGitU4b$qAS0qNw-G!g-^h;`LL?)oPcX-_NBGm2UrjUc9ky-F z%a#;hDHbSjVH{xO4bC(QkTbrWg_Kxn%W~?k_aRX*CyQ4X@+PWDq%+Mev?jp~$LE zr7p}9b|^elJa2q#kBi=pDR@^aJLdGo%h$fx$pz|Svz}TLT2ojP<{$A(bsNnLyYUC@ z#@qSUkyiP)bKaCoE-8=F=2P^NU^b--7^k>C|aK5M7 zqU>4=d2SlqH+KF`eXXV1h>gPPlvmfhkbA$FZjgBJctSQ<`N-jo)-#{)k7%`^Lh!ho z?`!#YH4IdSCX0K2dj7mGosgE0mIbAAOsW(beo%e4TFXvID4uQ}zUbP;86VMgIL}Y^ z-W_9gd96;&s)Uwm)3d3I<_r0ovYYzXKyVO~fk#tzXRBoXYp>XXaIv4XYd%$s)c6~3 zPlKCO>)H5Gx*$K1hi1^azx*Ay`hxKe_|HkF+OtMb{T(Ox_)au5ye}t5S?HCacw#|9 zC*G}e&!pCd)hh8XeUcM;(9|I09w^bG*rPbV^w+0nHH))`nihjW`*7FM(a9IpT^nnV zwd^&w;zQ%6vKKg~CxbuUY|)i)ZbvO}TDZQLgk=Ue?MD+T30(v#2`h;W)9x?DV>_9W zSqA~>A!c}k(~_d<#-Ddahngn*0(a@dxmjf=NeSx>RYLxT&N$WJeYd{NR}(QD)|_=s zi-?IDH9xI3OiW--AoYPNY0U}d?lNB1)byFw6)G9U1CjAqNDXx#P2EWGtMV|pNB`}~ z!dHQ*+@QcY?d8m#mhl$CRB}l5KFt~gF4QN}MR+82_@9#?jMN>LZ5Lkjk@i+h*74 zUzW|5y)DKJBzoEi%vr*Df5c3mTDRID|1uVPC5?U&R;$8GkKr$ZuE8`49?+e z-bG7Or?ba@_8OgxY+WOxdYek&1-o9PqJlD+cK&wWh90>5cJ4_@&sZ?2hEzAzj^j9`!O z=TUpD#(|D)l&YvZOwTu5v^!)Qc`zd^>zjVC!dRl15n<(PmmEfZ$Y61HPCn(oSo81p zo4{`ZzX|*%@SDJI0>26T9~1bcxO9VuVqECFc2`|RB@WvWvZH2*A$Qe+5If(F-d24L z-(UB|;G|{YCnMjrEM)c<9)X(b%MsSDpWb6pcV~A7OD12)o30NC?RU;)Ef-2+BOU7V zBat$=y`3DJqN0j1l-_Vr4CdX0vrabB3GO^OY2NK7C9B~*`=`B)J)5cuD8qm2gV#l# z?R-)|p0dU;$&8bUxPVOHw}88PZ%upr;5G0eb@+2J8JagGL0Rj`BkpwkU_a?dqxHoZ zf7tc{s6B##;A_XEKUSr$QtwxVbRM=htd`U*6md7>i5gC-m%>8uBBI`$8JhZLc~m%O zDf{wzBr@Gj?G^wqhK8N$=YE|X3W67zi4(j-6dLy`qW0T|i|Rxe=;LWX6zhZKSc?TH837bLAfydp3n0tnWA4J*AvM+cP zii}?P?DjGvI)-OWe#Ao7(+d_PU&p1Ipn8D=Eb1+ru|&2mub60+^>lTX8N<-=atX`k zT%>@3D+m2KhGV)~Y3AcjAT#ex*(LlG1aBeEwDB4B*_k@xN-b(Z46PbzE+6!(V~BJ3 zPK;L98K2jUdeq{O+=WtH_4MOP38i$=JS*JmXrXYMaDJwT>1LCSKgHc8DmE5(gwXcx zi+1*3{MJ|=t`DOT{%7MAAOVXH`Ij#e(GNbwq--n>pzm;o1Y2!X8{!j^n$j+26X^nD zQOeq0Si$)+Wy|wbWB{g z>u(sGPveKS){p6BLvVLTtB7&lApw$+`MT+#YgPX`Oq6Q!QP?cvw}$OOV72dzd~1dK zE}TW$sw5ZMGT9E`kq{q!Lt8XjRV7-o8ZM>A6lXn`Cz=l5Q9qyNs~f2uOgk^yP3<>k zi34xoX2Z|Q^;A^S0uRQrW|sGKo!g_M)iO9G++V(BA@sbw|F51a`=4=3gI5tjtJ>qn z332GSG1a=yRT386_U>*PWm4n~_`HJ~X@L5uH+U_X=uy+Xn;*FEARg%IJeMexmm$~B zOMf8qH1D_{)D(1}7p<4qxjMh1h&cN0qQG9FreZqZ`4?=t;&fk4tJ-l=_VEYvs3+G` zsyY65i)E#;k)^KQ>LF)c3x-m8!}e&4M!9s2xhxJ{ItGTKLi5Eh>IGc%y9D^yLS9CI zlY18o#-utRsHuo3BrvI7r>DOYqgjfpz0f@-BWQNs@O)?X=Z*N162dl7rtZT;T25jD zDCr61e+8w_%0x6>2|g>YT3noM!lnC|+}txL>^yR+-0sto!UP^ThbP|U$D)wFFj&n| zN4Z~?*YLAKtaBDpnVMQ>$Wvgp@q?TsIdw^DRE{&cea(VBPsa7-M6n^1q{OP~AwfI2q%hIlOgzdnLLkI6KDxAkZZkDf|7 zSVKCn)$e`{v-*p_831USn-TX=EGRp14m1C=Z%0P~kKC^?T=z;9MYv~ecqIl97nWy7 zT?FdLL4KHvxSNH z6Deoh;^y(`4@v7h=y2b0H{rx4;ohg6cE?`#iv zQ<(mAF%xv|X|uCD-?5wtLYzSFc?AYe`ZB4`oAClvz?P@gRq^ph3#X1ZrC9~tdKDN$ zV@fe{<&wcZbL$pqB*hGYx*gO8ZJy}y9#TAG; z+N4`$!}(RXsTixUY;XQd)MFEbl17NznoI=-7bQIfHubPKf%c@p32-zQk4CkmTFcB1 zNU94PX}VjZs85>r?nP{@^Ojbl>|ii1RZcR0phBK)v{<2SrEMH|XJ_I%SNT|ysxW_7 zLXxXU$o`PN$ura3Cn0jHbO9HY!GG?}#{_t4ms3#;QAR8$4Rx z$Im>dBcJ~`uYG6E;yG86zOj)TV)+0k&&!pMMIj1pZY%C7DH;@d{XogZq>)N-EVfMe zQhD--Nnmg;^S>%LX^2lvB`E8gaF@B7Pnh@$j^_6GSr9~q&4kCe;?PXCM^(78B%%Gp z;arXA0p4C{F?UF1l+n8Imt50|VSDm{oiJNVL_}6g3(>(Sr*b)^5W=LBL=@(b|MWi( ziI6&sPla=tR(nx=A!OH7;4e=c$= zjZf1U<3=2NnWmk)rXL$TC`fK9x$Q;dVdM0~vDW-yh|1ZtOmq1XRq>}%Z_ z$(3MU8><;x?yq?9jz?1V-QC5KKTk-ATlx=Gh=7X#EY;%Z{V~trAl(CYX1N45G2zP;U1yq9!F5-1gwEmXdb`u?72+gTrDltp{Lff zW5NDFjYJ{3lPRfV!%%$I=KP(9;9-{Et%i0rMr@MPFtAkfCGzvsU{*I$VCxw`0gRlX zS$Y)`m!B2h!YaRo;s%$@e$Jyw_d1OE=IK}Z?fBmX$d2NF+NWstGg$J}UDERcaS}Y- ze4O;CcMHqwTL85dO~}?!jvnxTV?3n-M_`IY%bd0*iQU}Sno8j&w!UUO?Z=thovoF# z6Vi`&ee+33l}c=_t#5Pm_Rd;OS+rDK-RVqEFE9DC-y%q+unF12nOxO}vK;xZ^c#R) zQmuV*t(-A6H3d?jWs%5EBBi#d-$Hu3XNX0B7oXG(-fMLzrM{ni)`SqzqOwYk63rP1 zq9ZgXCD0+@-^WBhS;OgdwM5k98C`q)VJs0%pLasakYH> z{=RID*PcVKOL-J6NB<_C(w4=dosrzPj!40a;UnjX`1xlW3Ax~Vyd*8o=6yx+I@Z9t z+gO)CCtlP}($~w7W;VA!g{b{$V2&`du_940z#&RSw@rFgl8=u^5=esTz{vhk;GsHG05C_AxSYO+N2ucs zTt(~-WJ;NShZAY;_mTs!I$TXXC5OQ+UY zhqLvAo9rlfN?XhL6$z*Q)KFpp%CxVRml-X=bhIdKCL?#mKOjJ#4qdE?WTDL*v7k>A zK&SkIv9T%@2e?I1XaTmYI|aQbN;dzjrYZo+oMpryMaLVjRY4K3aN9|?LfId zf(0P^<{v(M5${sXJ^i*y{ub@Kt#kdp>SV>?IbS1BY{95#LsVlb4BW>n|E$TR_Xn8g zG}{|(=8w9xJz7dLCk8cg1z%pFkezcgjy6Oa?M4*mvOMi@#^t1hvK;QEi!e@3@kC$M z8=)ZWG-v_p0`x;#!?`FJ6TQAJiB4~2@^X(yle~8zRgCCr5!yUR%t0DueafyPoT_+E zqM}NaeA43=q3kM^Kd!Eeoo)Zns3{Evd#p1w>poA39p&civO;DYnJYK=U5FgN0$gR4 zF!U*6kvdPpvwxa@jnXFV!T`7Qc|Cc};ot&!b_&ihjUMCq?g2j2i3~TdlZGP*1k?Kr z7E&Z^zy;fM_MAtPlP72t+Y_}_UZHPVUq^~83p$)oN*tFNir+sb4gWYHKiOCt*H}kB ziOnAnXtQ!`an#8@^=#PUyQ?LOzR)UkD-O<)uZ@zy)6eXuPH%)UB-Now6ef0rVlq{D zx~vWA(qKcO!_z)lF#3KI@BIQAtt*W+>5{r4>5jASVjAP=^r(6GRFeQX|3z-sTBrAnxk#K=Oa`^Yx1*Iw}PjZp3Qjd4& zhvfbRgII4=*O(#Lrw)mW4?>Yi{5ud3V74ei7^gJ z9;a<*n@F^DDeJvzBw z&L=q)HM zeD_qhZOd9H?7jp^fG@`+1NEk3=#kE^Lbh#Y4XD#3nXM=?c?+bcAdBG>n|!!+os=O3 zfl%!&Dnk1+VJI%jpOg@U4d*IfOJyReO>=YXIl-yscC$-YFGfOscnp*WYS^t(PIWe) zA+o6q^0H8MvVp7+Sl70!SCM0v>p%DNW8(^tsop5?Sk^-C9zY)@o?sPJo>QM}Ky2P@ zrIg5RLkM+; zN4FCS3!B!#ciz7NPfv4t2)uvM=vC5(-ay5xyN`ieZ#njjHto-}{0QMZ3C^O;KQ+s$ zIgZ@u?_aEVs6PH^8_Pm=M@aC-oG-(Ra--4>Q;$^r6irS>67b|ksQ`DFYV_4k)fbBc z78YT0Lz?3$+2I?^c6@lN09cByrg99wX|t~z4|nADy7F>4GonY@wc3g9o4+l0I>?5` zMgsomZ_te!odJ;p_4ltW8oT`*F8)m~u$!tv2#Hy5TJ8im0rN+Hy{y%+xSW;GlcX=g z^J*DL0KDb#L(Q2#za-5`LKUilA*>?J*1(^>pU$8dgpKMsZZ?}?>bsR9?0fTIxocWf zvfK5|@Y)#K6-jL>#XNm$z;OzXq~%v?W*VJnO%%Y2l6uM-#mg&I}=>rKMX~Il$zTa^>7K2frN( zoY+AqK3Y8P%48ni`7g-u*8C^C1g39AA^{*sFgK>zl%cYdjqs+j0y_y?JljbEEnG%> znuS@VE}}(82Q;OJpFEDv*)&9qU0t$MStjY51ElmoV#(_i&@859QNM#A;F zp>!S>Q6&MHV)e)#J`4jd>J2l>4#gUWToX#aa91QL>+60Kx}zY`)6*NcRvo}LsiT+; zW}_K3aXFOQfJrs5+OhUOt<7d^(t%7}v-je-fTa}haTVRAYYm34Q~{F}F^!a;Pv)Um z2&J2(zC4E2;436utS$Me20Gbyk~9&@pA(=6$2#1jB5hyIbP?sU3vLMf)anVTpT85v ze>997&B2-8tmWYWrgCxeDLy(j0cRf9Ob;aRru1O)S6%HpXQS$yxFy4fj2;fF(mDsH zHn^L!nyRWM1CG6eeR8%oU;A!yJD

1^6{xiljGS%1W2D^s{4HZJXRNz_iCheT_ap zBe$jf+k5yXLB@$DL}Pp_PQne_QmObbvhIJ;2wBsa2O+r~HwOz-Nf-(ACaMt}=Zdi- zs&sA%09Tx=6%fu09g`H92EZ;ir$x~69$+4C4B6rMi8NnpUBtFIPj&(0qh2Yo-F*f9$xWR1T#t5*b z&D~W2cp#xMrSx(P!=V1~BW56gy@@M4GwyPzXD1FgJ=M!YW}2`qTZIX%d%$;hkJO6o zf7C0qC3b#Q@%%aHo6r=A+HEJFe6EW+7+X=(}v%Z^Lxt4c_WX} z^f`i7o)zMJzcWv!L83gp{QQ~|Lu@ua-6qmklm?cSEZA&3cMq)xY9WT#h%mmI>tno5 z2 z#r8U-P!KN}p9a4&bj|f)tmo;rw@zRW@2quNx@^F9s+Kl&odRcF#ez4FCRiL(aB&u42v(fCZ4vSqlNJXTey7jeN;ZlY Date: Mon, 8 Apr 2024 03:14:33 +0800 Subject: [PATCH 41/96] Add: Click method nemu_ipc --- module/config/argument/args.json | 3 ++- module/config/argument/argument.yaml | 9 ++++++++- module/config/config_generated.py | 2 +- module/config/i18n/en-US.json | 3 ++- module/config/i18n/ja-JP.json | 3 ++- module/config/i18n/zh-CN.json | 3 ++- module/config/i18n/zh-TW.json | 3 ++- module/device/control.py | 2 +- 8 files changed, 20 insertions(+), 8 deletions(-) diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 6d88f5d7b..e03400a71 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -128,7 +128,8 @@ "uiautomator2", "minitouch", "Hermit", - "MaaTouch" + "MaaTouch", + "nemu_ipc" ] }, "ScreenshotDedithering": { diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 61209d6de..6fdd93573 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -46,7 +46,14 @@ Emulator: ] ControlMethod: value: minitouch - option: [ ADB, uiautomator2, minitouch, Hermit, MaaTouch ] + option: [ + ADB, + uiautomator2, + minitouch, + Hermit, + MaaTouch, + nemu_ipc, + ] ScreenshotDedithering: false AdbRestart: false EmulatorInfo: diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 24e8624f6..03dc8cde4 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -22,7 +22,7 @@ class GeneratedConfig: Emulator_PackageName = 'auto' # auto, com.bilibili.azurlane, com.YoStarEN.AzurLane, com.YoStarJP.AzurLane, com.hkmanjuu.azurlane.gp, com.bilibili.blhx.huawei, com.bilibili.blhx.mi, com.tencent.tmgp.bilibili.blhx, com.bilibili.blhx.baidu, com.bilibili.blhx.qihoo, com.bilibili.blhx.nearme.gamecenter, com.bilibili.blhx.vivo, com.bilibili.blhx.mz, com.bilibili.blhx.dl, com.bilibili.blhx.lenovo, com.bilibili.blhx.uc, com.bilibili.blhx.mzw, com.yiwu.blhx.yx15, com.bilibili.blhx.m4399, com.bilibili.blhx.bilibiliMove, com.hkmanjuu.azurlane.gp.mc Emulator_ServerName = 'disabled' # disabled, cn_android-0, cn_android-1, cn_android-2, cn_android-3, cn_android-4, cn_android-5, cn_android-6, cn_android-7, cn_android-8, cn_android-9, cn_android-10, cn_android-11, cn_android-12, cn_android-13, cn_android-14, cn_android-15, cn_android-16, cn_android-17, cn_android-18, cn_android-19, cn_android-20, cn_android-21, cn_android-22, cn_android-23, cn_ios-0, cn_ios-1, cn_ios-2, cn_ios-3, cn_ios-4, cn_ios-5, cn_ios-6, cn_ios-7, cn_ios-8, cn_ios-9, cn_ios-10, cn_channel-0, cn_channel-1, cn_channel-2, cn_channel-3, cn_channel-4, en-0, en-1, en-2, en-3, en-4, en-5, jp-0, jp-1, jp-2, jp-3, jp-4, jp-5, jp-6, jp-7, jp-8, jp-9, jp-10, jp-11, jp-12, jp-13, jp-14, jp-15, jp-16, jp-17 Emulator_ScreenshotMethod = 'auto' # auto, ADB, ADB_nc, uiautomator2, aScreenCap, aScreenCap_nc, DroidCast, DroidCast_raw, scrcpy, nemu_ipc - Emulator_ControlMethod = 'minitouch' # ADB, uiautomator2, minitouch, Hermit, MaaTouch + Emulator_ControlMethod = 'minitouch' # ADB, uiautomator2, minitouch, Hermit, MaaTouch, nemu_ipc Emulator_ScreenshotDedithering = False Emulator_AdbRestart = False diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 45d2ad064..179ead1fd 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -419,7 +419,8 @@ "uiautomator2": "uiautomator2", "minitouch": "minitouch", "Hermit": "Hermit", - "MaaTouch": "MaaTouch" + "MaaTouch": "MaaTouch", + "nemu_ipc": "nemu_ipc" }, "ScreenshotDedithering": { "name": "Image Color De-dithering", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 50c1c665d..210b99932 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -419,7 +419,8 @@ "uiautomator2": "uiautomator2", "minitouch": "minitouch", "Hermit": "Hermit", - "MaaTouch": "MaaTouch" + "MaaTouch": "MaaTouch", + "nemu_ipc": "nemu_ipc" }, "ScreenshotDedithering": { "name": "Emulator.ScreenshotDedithering.name", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 87c7a1512..445ef5b99 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -419,7 +419,8 @@ "uiautomator2": "uiautomator2", "minitouch": "minitouch", "Hermit": "Hermit", - "MaaTouch": "MaaTouch" + "MaaTouch": "MaaTouch", + "nemu_ipc": "nemu_ipc" }, "ScreenshotDedithering": { "name": "去除图片色彩抖动", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index c042f0b67..0f179a58a 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -419,7 +419,8 @@ "uiautomator2": "uiautomator2", "minitouch": "minitouch", "Hermit": "Hermit", - "MaaTouch": "MaaTouch" + "MaaTouch": "MaaTouch", + "nemu_ipc": "nemu_ipc" }, "ScreenshotDedithering": { "name": "去除圖片色彩抖動", diff --git a/module/device/control.py b/module/device/control.py index e9857f76f..2a793c29d 100644 --- a/module/device/control.py +++ b/module/device/control.py @@ -23,7 +23,7 @@ class Control(Hermit, Minitouch, Scrcpy, MaaTouch, NemuIpc): 'minitouch': self.click_minitouch, 'Hermit': self.click_hermit, 'MaaTouch': self.click_maatouch, - 'nemu_ipc': self.nemu_ipc, + 'nemu_ipc': self.click_nemu_ipc, } def click(self, button, control_check=True): From 2ebe71b7747557de2235d997007be2765ee50fab Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 8 Apr 2024 04:04:35 +0800 Subject: [PATCH 42/96] Add: NemuIpc method --- module/device/method/nemu_ipc.py | 512 +++++++++++++++++++++++++++++++ 1 file changed, 512 insertions(+) create mode 100644 module/device/method/nemu_ipc.py diff --git a/module/device/method/nemu_ipc.py b/module/device/method/nemu_ipc.py new file mode 100644 index 000000000..1218f0a89 --- /dev/null +++ b/module/device/method/nemu_ipc.py @@ -0,0 +1,512 @@ +import asyncio +import ctypes +import os +import sys +from functools import wraps, partial + +import cv2 +import numpy as np + +from module.base.decorator import cached_property, del_cached_property, has_cached_property +from module.base.utils import ensure_time +from module.device.method.minitouch import insert_swipe, random_rectangle_point +from module.device.method.utils import RETRY_TRIES, retry_sleep +from module.device.platform import Platform +from module.exception import RequestHumanTakeover +from module.logger import logger + + +class NemuIpcIncompatible(Exception): + pass + + +class NemuIpcError(Exception): + pass + + +class CaptureStd: + """ + Capture stdout and stderr from both python and C library + https://stackoverflow.com/questions/5081657/how-do-i-prevent-a-c-shared-library-to-print-on-stdout-in-python/17954769 + + ``` + with CaptureStd() as capture: + # String wasn't printed + print('whatever') + # But captured in ``capture.stdout`` + print(f'Got stdout: "{capture.stdout}"') + print(f'Got stderr: "{capture.stderr}"') + ``` + """ + + def __init__(self): + self.fdout = sys.stdout.fileno() + self.fderr = sys.stderr.fileno() + self.reader_out, self.writer_out = os.pipe() + self.reader_err, self.writer_err = os.pipe() + self.old_stdout = os.fdopen(os.dup(self.fdout), 'w') + self.old_stderr = os.fdopen(os.dup(self.fderr), 'w') + + self.stdout = b'' + self.stderr = b'' + + def _redirect_stdout(self, to): + sys.stdout.close() + os.dup2(to.fileno(), self.fdout) + sys.stdout = os.fdopen(self.fdout, 'w') + + def _redirect_stderr(self, to): + sys.stderr.close() + os.dup2(to.fileno(), self.fderr) + sys.stderr = os.fdopen(self.fderr, 'w') + + def __enter__(self): + self.old_stdout.__enter__() + self.old_stderr.__enter__() + with open(self.writer_out, 'w') as file: + self._redirect_stdout(to=file) + with open(self.writer_err, 'w') as file: + self._redirect_stderr(to=file) + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self._redirect_stdout(to=self.old_stdout) + self._redirect_stderr(to=self.old_stderr) + self.old_stdout.__exit__(exc_type, exc_val, exc_tb) + self.old_stderr.__exit__(exc_type, exc_val, exc_tb) + + self.stdout = self.recvall(self.reader_out) + self.stderr = self.recvall(self.reader_err) + os.close(self.reader_out) + os.close(self.reader_err) + + @staticmethod + def recvall(reader, length=1024) -> bytes: + fragments = [] + while 1: + chunk = os.read(reader, length) + if chunk: + fragments.append(chunk) + else: + break + output = b''.join(fragments) + return output + + +class CaptureNemuIpc(CaptureStd): + instance = None + + def is_capturing(self): + """ + Only capture at the topmost wrapper to avoid nested capturing + If a capture is ongoing, this instance does nothing + """ + cls = self.__class__ + return isinstance(cls.instance, cls) and cls.instance != self + + def __enter__(self): + if self.is_capturing(): + return self + + super().__enter__() + CaptureNemuIpc.instance = self + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + if self.is_capturing(): + return + + CaptureNemuIpc.instance = None + super().__exit__(exc_type, exc_val, exc_tb) + + self.check_stdout() + self.check_stderr() + + def check_stdout(self): + if not self.stdout: + return + logger.info(f'NemuIpc stdout: {self.stdout}') + + def check_stderr(self): + if not self.stderr: + return + logger.error(f'NemuIpc stderr: {self.stderr}') + + # Calling an old MuMu12 player + # Tested on 3.4.0 + # b'nemu_capture_display rpc error: 1783\r\n' + # Tested on 3.7.3 + # b'nemu_capture_display rpc error: 1745\r\n' + if b'error: 1783' in self.stderr or b'error: 1745' in self.stderr: + raise NemuIpcIncompatible( + f'NemuIpc requires MuMu12 version >= 3.8.13, please check your version') + # contact_id incorrect + # b'nemu_capture_display cannot find rpc connection\r\n' + if b'cannot find rpc connection' in self.stderr: + raise NemuIpcError(self.stderr) + # Emulator died + # b'nemu_capture_display rpc error: 1722\r\n' + # MuMuVMMSVC.exe died + # b'nemu_capture_display rpc error: 1726\r\n' + # No idea how to handle yet + + +def retry(func): + @wraps(func) + def retry_wrapper(self, *args, **kwargs): + """ + Args: + self (NemuIpcImpl): + """ + init = None + for _ in range(RETRY_TRIES): + try: + if callable(init): + retry_sleep(_) + init() + return self.ev_run_sync(func, self, *args, **kwargs) + # Can't handle + except RequestHumanTakeover: + break + # Can't handle + except NemuIpcIncompatible as e: + logger.error(e) + break + # Function call timeout + except asyncio.TimeoutError: + logger.warning(f'Func {func.__name__}() call timeout, retrying') + + def init(): + self.reconnect() + # NemuIpcError + except NemuIpcError as e: + logger.error(e) + + def init(): + self.reconnect() + # Unknown, probably a trucked image + except Exception as e: + logger.exception(e) + + def init(): + pass + + logger.critical(f'Retry {func.__name__}() failed') + raise RequestHumanTakeover + + return retry_wrapper + + +class NemuIpcImpl: + def __init__(self, nemu_folder: str, instance_id: int, display_id: int = 0): + """ + Args: + nemu_folder: Installation path of MuMu12, e.g. E:/ProgramFiles/MuMuPlayer-12.0 + instance_id: Emulator instance ID, starting from 0 + display_id: Always 0 if keep app alive was disabled + """ + self.nemu_folder: str = nemu_folder + self.instance_id: int = instance_id + self.display_id: int = display_id + + ipc_dll = os.path.abspath(os.path.join(nemu_folder, './shell/sdk/external_renderer_ipc.dll')) + logger.info( + f'NemuIpcImpl init, ' + f'nemu_folder={nemu_folder}, ' + f'ipc_dll={ipc_dll}, ' + f'instance_id={instance_id}, ' + f'display_id={display_id}' + ) + + try: + self.lib = ctypes.CDLL(ipc_dll) + except OSError as e: + logger.error(e) + # OSError: [WinError 126] 找不到指定的模块。 + if not os.path.exists(ipc_dll): + raise NemuIpcIncompatible( + f'ipc_dll={ipc_dll} does not exist, ' + f'NemuIpc requires MuMu12 version >= 3.8.13, please check your version') + else: + raise NemuIpcIncompatible( + f'ipc_dll={ipc_dll} exists, but cannot be loaded') + self.connect_id: int = 0 + self.width = 0 + self.height = 0 + + def connect(self): + if self.connect_id > 0: + return + + with CaptureNemuIpc(): + connect_id = self.lib.nemu_connect(self.nemu_folder, self.instance_id) + if connect_id == 0: + raise NemuIpcError( + 'Connection failed, please check if nemu_folder is correct and emulator is running' + ) + + self.connect_id = connect_id + # logger.info(f'NemuIpc connected: {self.connect_id}') + + def disconnect(self): + if self.connect_id == 0: + return + + with CaptureNemuIpc(): + self.lib.nemu_disconnect(self.connect_id) + + # logger.info(f'NemuIpc disconnected: {self.connect_id}') + self.connect_id = 0 + + def reconnect(self): + self.disconnect() + self.connect() + + def __enter__(self): + self.connect() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.disconnect() + + @cached_property + def _ev(self): + return asyncio.new_event_loop() + + async def ev_run_async(self, func, *args, **kwargs): + """ + Args: + func: Sync function to call + *args: + **kwargs: + + Raises: + asyncio.TimeoutError: If function call timeout + """ + func_wrapped = partial(func, *args, **kwargs) + result = await asyncio.wait_for(self._ev.run_in_executor(None, func_wrapped), timeout=0.2) + return result + + def ev_run_sync(self, func, *args, **kwargs): + """ + Args: + func: Sync function to call + *args: + **kwargs: + + Raises: + asyncio.TimeoutError: If function call timeout + """ + result = self._ev.run_until_complete(self.ev_run_async(func, *args, **kwargs)) + return result + + def get_resolution(self): + """ + Get emulator resolution, `self.width` and `self.height` will be set + """ + if self.connect_id == 0: + self.connect() + + width_ptr = ctypes.pointer(ctypes.c_int(0)) + height_ptr = ctypes.pointer(ctypes.c_int(0)) + nullptr = ctypes.POINTER(ctypes.c_int)() + + with CaptureNemuIpc(): + ret = self.lib.nemu_capture_display( + self.connect_id, self.display_id, 0, width_ptr, height_ptr, nullptr) + if ret > 0: + raise NemuIpcError('nemu_capture_display failed during get_resolution()') + self.width = width_ptr.contents.value + self.height = height_ptr.contents.value + + @retry + def screenshot(self): + """ + Returns: + np.ndarray: Image array in RGBA color space + Note that image is upside down + """ + if self.connect_id == 0: + self.connect() + + with CaptureNemuIpc(): + self.get_resolution() + + width_ptr = ctypes.pointer(ctypes.c_int(self.width)) + height_ptr = ctypes.pointer(ctypes.c_int(self.height)) + length = self.width * self.height * 4 + pixels_pointer = ctypes.pointer((ctypes.c_ubyte * length)()) + + ret = self.lib.nemu_capture_display( + self.connect_id, self.display_id, length, width_ptr, height_ptr, pixels_pointer) + if ret > 0: + raise NemuIpcError('nemu_capture_display failed during screenshot()') + + # image = np.ctypeslib.as_array(pixels_pointer, shape=(self.height, self.width, 4)) + image = np.ctypeslib.as_array(pixels_pointer.contents).reshape((self.height, self.width, 4)) + return image + + def convert_xy(self, x, y): + """ + Convert classic ADB coordinates to Nemu's + `self.height` must be updated before calling this method + + Returns: + int, int + """ + x, y = int(x), int(y) + x, y = self.height - y, x + return x, y + + @retry + def down(self, x, y): + """ + Contact down, continuous contact down will be considered as swipe + """ + if self.connect_id == 0: + self.connect() + if self.height == 0: + self.get_resolution() + + x, y = self.convert_xy(x, y) + + with CaptureNemuIpc(): + ret = self.lib.nemu_input_event_touch_down(self.connect_id, self.display_id, x, y) + if ret > 0: + raise NemuIpcError('nemu_input_event_touch_down failed') + + @retry + def up(self): + """ + Contact up + """ + if self.connect_id == 0: + self.connect() + + with CaptureNemuIpc(): + ret = self.lib.nemu_input_event_touch_up(self.connect_id, self.display_id) + if ret > 0: + raise NemuIpcError('nemu_input_event_touch_up failed') + + +def serial_to_id(serial: str): + """ + Predict instance ID from serial + E.g. + "127.0.0.1:16384" -> 0 + "127.0.0.1:16416" -> 1 + + Returns: + int: instance_id, or None if failed to predict + """ + try: + port = int(serial.split(':')[1]) + except (IndexError, ValueError): + return None + index, offset = divmod(port - 16384, 32) + if 0 <= index < 32 and offset in [0, 1, 2]: + return index + else: + return None + + +class NemuIpc(Platform): + @cached_property + def nemu_ipc(self) -> NemuIpcImpl: + """ + Initialize a nemu ipc implementation + """ + # Try existing settings first + folder = os.path.abspath(os.path.join(self.config.EmulatorInfo_path, '../../')) + index = serial_to_id(self.serial) + if index is not None: + try: + return NemuIpcImpl( + nemu_folder=folder, + instance_id=index, + display_id=0 + ).__enter__() + except (NemuIpcIncompatible, NemuIpcError) as e: + logger.error(e) + logger.error('Emulator info incorrect') + + # Search emulator instance + # with E:\ProgramFiles\MuMuPlayer-12.0\shell\MuMuPlayer.exe + # installation path is E:\ProgramFiles\MuMuPlayer-12.0 + try: + return NemuIpcImpl( + nemu_folder=self.emulator_instance.emulator.abspath('../'), + instance_id=self.emulator_instance.MuMuPlayer12_id, + display_id=0 + ).__enter__() + except (NemuIpcIncompatible, NemuIpcError) as e: + logger.error(e) + logger.error('Unable to initialize NemuIpc') + raise RequestHumanTakeover + + def nemu_ipc_available(self) -> bool: + if not self.is_mumu_family: + return False + if self.nemud_app_keep_alive == '': + return False + try: + _ = self.nemu_ipc + except RequestHumanTakeover: + return False + return True + + def nemu_ipc_release(self): + if has_cached_property(self, 'nemu_ipc'): + self.nemu_ipc.disconnect() + del_cached_property(self, 'nemu_ipc') + + def screenshot_nemu_ipc(self): + image = self.nemu_ipc.screenshot() + + image = cv2.cvtColor(image, cv2.COLOR_BGRA2BGR) + cv2.flip(image, 0, dst=image) + return image + + def click_nemu_ipc(self, x, y): + down = ensure_time((0.010, 0.020)) + with CaptureNemuIpc(): + self.nemu_ipc.down(x, y) + self.sleep(down) + self.nemu_ipc.up() + self.sleep(0.050 - down) + + def long_click_nemu_ipc(self, x, y, duration=1.0): + with CaptureNemuIpc(): + self.nemu_ipc.down(x, y) + self.sleep(duration) + self.nemu_ipc.up() + self.sleep(0.050) + + def swipe_nemu_ipc(self, p1, p2): + points = insert_swipe(p0=p1, p3=p2) + + with CaptureNemuIpc(): + for point in points: + self.nemu_ipc.down(*point) + self.sleep(0.010) + + self.nemu_ipc.up() + self.sleep(0.050) + + def drag_nemu_ipc(self, p1, p2, point_random=(-10, -10, 10, 10)): + p1 = np.array(p1) - random_rectangle_point(point_random) + p2 = np.array(p2) - random_rectangle_point(point_random) + points = insert_swipe(p0=p1, p3=p2, speed=20) + + with CaptureNemuIpc(): + for point in points: + self.nemu_ipc.down(*point) + self.sleep(0.010) + + self.nemu_ipc.down(*p2) + self.sleep(0.140) + self.nemu_ipc.down(*p2) + self.sleep(0.140) + + self.nemu_ipc.up() + self.sleep(0.050) From 78adcbbc7d1d69fc717b4285d534b00d7a9769c5 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 8 Apr 2024 04:11:50 +0800 Subject: [PATCH 43/96] Opt: No android versions selecting in benchmark --- module/config/argument/args.json | 2 -- module/config/argument/argument.yaml | 8 +++++--- module/config/config_generated.py | 2 +- module/config/i18n/en-US.json | 12 +++++------- module/config/i18n/ja-JP.json | 2 -- module/config/i18n/zh-CN.json | 6 ++---- module/config/i18n/zh-TW.json | 6 ++---- module/daemon/benchmark.py | 4 +++- 8 files changed, 18 insertions(+), 24 deletions(-) diff --git a/module/config/argument/args.json b/module/config/argument/args.json index e03400a71..614757ee9 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -9084,11 +9084,9 @@ "value": "emulator", "option": [ "emulator", - "emulator_android_12", "plone_cloud_with_adb", "phone_cloud_without_adb", "android_phone", - "android_phone_12", "android_phone_vmos" ] }, diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 6fdd93573..0dd97c6c0 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -706,9 +706,11 @@ Benchmark: DeviceType: value: emulator option: [ - emulator, emulator_android_12, - plone_cloud_with_adb, phone_cloud_without_adb, - android_phone, android_phone_12, android_phone_vmos + emulator, + plone_cloud_with_adb, + phone_cloud_without_adb, + android_phone, + android_phone_vmos, ] TestScene: value: screenshot_click diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 03dc8cde4..ac42e4d5a 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -426,7 +426,7 @@ class GeneratedConfig: OpsiDaemon_SelectEnemy = True # Group `Benchmark` - Benchmark_DeviceType = 'emulator' # emulator, emulator_android_12, plone_cloud_with_adb, phone_cloud_without_adb, android_phone, android_phone_12, android_phone_vmos + Benchmark_DeviceType = 'emulator' # emulator, plone_cloud_with_adb, phone_cloud_without_adb, android_phone, android_phone_vmos Benchmark_TestScene = 'screenshot_click' # screenshot_click, screenshot, click # Group `AzurLaneUncensored` diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 179ead1fd..719dedcca 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -2424,13 +2424,11 @@ "DeviceType": { "name": "Device Type", "help": "", - "emulator": "Emulator (Android <= 9)", - "emulator_android_12": "Emulator (Android > 9)", - "plone_cloud_with_adb": "Phone cloud with public network ADB", - "phone_cloud_without_adb": "Phone cloud without public network ADB", - "android_phone": "Android Phone (Android <= 9)", - "android_phone_12": "Android Phone (Android > 9)", - "android_phone_vmos": "Android Phone (VMOS emulator)" + "emulator": "Emulators", + "plone_cloud_with_adb": "Phone clouds with public network ADB", + "phone_cloud_without_adb": "Phone clouds without public network ADB", + "android_phone": "Android Phones", + "android_phone_vmos": "Android Phones (VMOS emulator)" }, "TestScene": { "name": "Test Scene", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 210b99932..3ae296fed 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -2425,11 +2425,9 @@ "name": "Benchmark.DeviceType.name", "help": "Benchmark.DeviceType.help", "emulator": "emulator", - "emulator_android_12": "emulator_android_12", "plone_cloud_with_adb": "plone_cloud_with_adb", "phone_cloud_without_adb": "phone_cloud_without_adb", "android_phone": "android_phone", - "android_phone_12": "android_phone_12", "android_phone_vmos": "android_phone_vmos" }, "TestScene": { diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 445ef5b99..b9eddf199 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -2424,12 +2424,10 @@ "DeviceType": { "name": "设备类型", "help": "", - "emulator": "模拟器 安卓<=9", - "emulator_android_12": "模拟器 安卓>9", + "emulator": "模拟器", "plone_cloud_with_adb": "云手机 有公网ADB", "phone_cloud_without_adb": "云手机 无公网ADB", - "android_phone": "安卓真机 安卓<=9", - "android_phone_12": "安卓真机 安卓>9", + "android_phone": "安卓真机", "android_phone_vmos": "安卓真机VMOS虚拟机" }, "TestScene": { diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 0f179a58a..50d579ea6 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -2424,12 +2424,10 @@ "DeviceType": { "name": "設備類型", "help": "", - "emulator": "模擬器 安卓<=9", - "emulator_android_12": "模擬器 安卓>9", + "emulator": "模擬器", "plone_cloud_with_adb": "雲手機 有公網ADB", "phone_cloud_without_adb": "雲手機 無公網ADB", - "android_phone": "安卓真機 安卓<=9", - "android_phone_12": "安卓真機 安卓>9", + "android_phone": "安卓真機", "android_phone_vmos": "安卓真機VMOS虛擬機" }, "TestScene": { diff --git a/module/daemon/benchmark.py b/module/daemon/benchmark.py index 9b3cfe96f..cc43a8aee 100644 --- a/module/daemon/benchmark.py +++ b/module/daemon/benchmark.py @@ -180,7 +180,9 @@ class Benchmark(DaemonBase, CampaignUI): return [l for l in screenshot if l not in args] # No ascreencap on Android > 9 - if device in ['emulator_android_12', 'android_phone_12']: + sdk = self.device.sdk_ver + logger.info(f'sdk_ver: {sdk}') + if not (21 <= sdk <= 28): screenshot = remove('aScreenCap', 'aScreenCap_nc') # No nc loopback if device in ['plone_cloud_with_adb']: From 2a74c338a36d1f901c3d84ef43429263779d329f Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 8 Apr 2024 04:32:33 +0800 Subject: [PATCH 44/96] Opt: Limit screenshot and control combinations when using nemu_ipc --- module/config/config_updater.py | 5 +++++ module/device/device.py | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/module/config/config_updater.py b/module/config/config_updater.py index 17230c58a..f34ee4adb 100644 --- a/module/config/config_updater.py +++ b/module/config/config_updater.py @@ -726,6 +726,11 @@ class ConfigUpdater: key = key.split(".") key[-1] = key[-1].replace("Value", "Record") yield ".".join(key), datetime.now().strftime("%Y-%m-%d %H:%M:%S") + # Oh no, dynamic dropdown update can only be used on pywebio > 1.8.0 + # elif key == 'Alas.Emulator.ScreenshotMethod' and value == 'nemu_ipc': + # yield 'Alas.Emulator.ControlMethod', 'nemu_ipc' + # elif key == 'Alas.Emulator.ControlMethod' and value == 'nemu_ipc': + # yield 'Alas.Emulator.ScreenshotMethod', 'nemu_ipc' def read_file(self, config_name, is_template=False): """ diff --git a/module/device/device.py b/module/device/device.py index efd4a86b3..8000b0c1c 100644 --- a/module/device/device.py +++ b/module/device/device.py @@ -81,6 +81,7 @@ class Device(Screenshot, Control, AppControl): _ = self.emulator_instance self.screenshot_interval_set() + self.method_check() # Auto-select the fastest screenshot method if not self.config.is_template_config and self.config.Emulator_ScreenshotMethod == 'auto': @@ -99,7 +100,22 @@ class Device(Screenshot, Control, AppControl): bench = Benchmark(config=self.config, device=self) method = bench.run_simple_screenshot_benchmark() # Set - self.config.Emulator_ScreenshotMethod = method + with self.config.multi_set(): + self.config.Emulator_ScreenshotMethod = method + if method == 'nemu_ipc': + self.config.Emulator_ControlMethod = 'nemu_ipc' + + def method_check(self): + """ + Check combinations of screenshot method and control methods + """ + # nemu_ipc should be together + if self.config.Emulator_ScreenshotMethod == 'nemu_ipc' and self.config.Emulator_ControlMethod != 'nemu_ipc': + logger.warning('When using nemu_ipc, both screenshot and control should use nemu_ipc') + self.config.Emulator_ControlMethod = 'nemu_ipc' + if self.config.Emulator_ScreenshotMethod != 'nemu_ipc' and self.config.Emulator_ControlMethod == 'nemu_ipc': + logger.warning('When not using nemu_ipc, both screenshot and control should not use nemu_ipc') + self.config.Emulator_ControlMethod = 'minitouch' def handle_night_commission(self, daily_trigger='21:00', threshold=30): """ From 176c77230e0b5f87316f8f6aa63c9c639cee0f13 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 8 Apr 2024 04:50:19 +0800 Subject: [PATCH 45/96] Add: New installer but never used --- deploy/Windows/adb.py | 74 ++++++++++ deploy/Windows/alas.py | 80 +++++++++++ deploy/Windows/app.py | 57 ++++++++ deploy/Windows/config.py | 226 +++++++++++++++++++++++++++++++ deploy/Windows/emulator.py | 171 +++++++++++++++++++++++ deploy/Windows/git.py | 162 ++++++++++++++++++++++ deploy/Windows/installer_test.py | 117 ++++++++++++++++ deploy/Windows/logger.py | 75 ++++++++++ deploy/Windows/patch.py | 154 +++++++++++++++++++++ deploy/Windows/pip.py | 132 ++++++++++++++++++ deploy/Windows/template.yaml | 166 +++++++++++++++++++++++ 11 files changed, 1414 insertions(+) create mode 100644 deploy/Windows/adb.py create mode 100644 deploy/Windows/alas.py create mode 100644 deploy/Windows/app.py create mode 100644 deploy/Windows/config.py create mode 100644 deploy/Windows/emulator.py create mode 100644 deploy/Windows/git.py create mode 100644 deploy/Windows/installer_test.py create mode 100644 deploy/Windows/logger.py create mode 100644 deploy/Windows/patch.py create mode 100644 deploy/Windows/pip.py create mode 100644 deploy/Windows/template.yaml diff --git a/deploy/Windows/adb.py b/deploy/Windows/adb.py new file mode 100644 index 000000000..d995b6b63 --- /dev/null +++ b/deploy/Windows/adb.py @@ -0,0 +1,74 @@ +import logging +import os + +from deploy.Windows.emulator import EmulatorManager +from deploy.Windows.logger import Progress, logger + + +def show_fix_tip(module): + logger.info(f""" + To fix this: + 1. Open console.bat + 2. Execute the following commands: + pip uninstall -y {module} + pip install --no-cache-dir {module} + 3. Re-open Alas.exe + """) + + +class AdbManager(EmulatorManager): + def adb_install(self): + logger.hr('Start ADB service', 0) + + if self.ReplaceAdb: + logger.hr('Replace ADB', 1) + self.adb_replace() + Progress.AdbReplace() + if self.AutoConnect: + logger.hr('ADB Connect', 1) + self.brute_force_connect() + Progress.AdbConnect() + + if False: + logger.hr('Uiautomator2 Init', 1) + try: + import adbutils + from uiautomator2 import init + except ModuleNotFoundError as e: + message = str(e) + for module in ['apkutils2', 'progress']: + # ModuleNotFoundError: No module named 'apkutils2' + # ModuleNotFoundError: No module named 'progress.bar' + if module in message: + show_fix_tip(module) + exit(1) + raise + + # Remove global proxies, or uiautomator2 will go through it + for k in list(os.environ.keys()): + if k.lower().endswith('_proxy'): + del os.environ[k] + + for device in adbutils.adb.iter_device(): + initer = init.Initer(device, loglevel=logging.DEBUG) + # MuMu X has no ro.product.cpu.abi, pick abi from ro.product.cpu.abilist + if initer.abi not in ['x86_64', 'x86', 'arm64-v8a', 'armeabi-v7a', 'armeabi']: + initer.abi = initer.abis[0] + initer.set_atx_agent_addr('127.0.0.1:7912') + + for _ in range(2): + try: + initer.install() + break + except AssertionError: + logger.info(f'AssertionError when installing uiautomator2 on device {device.serial}') + logger.info('If you are using BlueStacks or LD player or WSA, ' + 'please enable ADB in the settings of your emulator') + exit(1) + except ConnectionError: + if _ == 1: + raise + init.GITHUB_BASEURL = 'http://tool.appetizer.io/openatx' + + initer._device.shell(["rm", "/data/local/tmp/minicap"]) + initer._device.shell(["rm", "/data/local/tmp/minicap.so"]) diff --git a/deploy/Windows/alas.py b/deploy/Windows/alas.py new file mode 100644 index 000000000..9f8873938 --- /dev/null +++ b/deploy/Windows/alas.py @@ -0,0 +1,80 @@ +import os +import time +import typing as t + +from deploy.Windows.config import DeployConfig +from deploy.Windows.logger import Progress, logger +from deploy.Windows.utils import DataProcessInfo, cached_property, iter_process + + +class AlasManager(DeployConfig): + @cached_property + def alas_folder(self): + return [ + self.filepath(self.PythonExecutable), + self.root_filepath + ] + + @cached_property + def self_pid(self): + return os.getpid() + + def list_process(self) -> t.List[DataProcessInfo]: + logger.info('List process') + process = list(iter_process()) + logger.info(f'Found {len(process)} processes') + return process + + def iter_process_by_names(self, names, in_alas=False) -> t.Iterable[DataProcessInfo]: + """ + Args: + names (str, list[str]): process name, such as 'alas.exe' + in_alas (bool): If the output process must in Alas + + Yields: + DataProcessInfo: + """ + if not isinstance(names, list): + names = [names] + try: + for proc in self.list_process(): + + if not (proc.name and proc.name in names): + continue + if proc.pid == self.self_pid: + continue + if in_alas: + cmdline = proc.cmdline.replace(r"\\", "/").replace("\\", "/") + for folder in self.alas_folder: + if folder in cmdline: + yield proc + else: + yield proc + except Exception as e: + logger.info(str(e)) + return False + + def kill_process(self, process: DataProcessInfo): + self.execute(f'taskkill /f /t /pid {process.pid}', allow_failure=True, output=False) + + def alas_kill(self): + for _ in range(10): + logger.hr(f'Kill existing Alas', 0) + proc_list = list(self.iter_process_by_names(['python.exe'], in_alas=True)) + if not len(proc_list): + Progress.KillExisting() + return True + for proc in proc_list: + logger.info(proc) + self.kill_process(proc) + + logger.warning('Unable to kill existing Alas, skip') + Progress.KillExisting() + return False + + +if __name__ == '__main__': + self = AlasManager() + start = time.time() + self.alas_kill() + print(time.time() - start) diff --git a/deploy/Windows/app.py b/deploy/Windows/app.py new file mode 100644 index 000000000..750a50d13 --- /dev/null +++ b/deploy/Windows/app.py @@ -0,0 +1,57 @@ +import filecmp +import os +import shutil + +from deploy.Windows.config import DeployConfig +from deploy.Windows.logger import Progress, logger + + +class AppManager(DeployConfig): + @staticmethod + def app_asar_replace(folder, path='./toolkit/WebApp/resources/app.asar'): + """ + Args: + folder (str): Path to AzurLaneAutoScript + path (str): Path from AzurLaneAutoScript to app.asar + + Returns: + bool: If updated. + """ + source = os.path.abspath(os.path.join(folder, path)) + logger.info(f'Old file: {source}') + + try: + import alas_webapp + except ImportError: + logger.info(f'Dependency alas_webapp not exists, skip updating') + return False + + update = alas_webapp.app_file() + logger.info(f'New version: {alas_webapp.__version__}') + logger.info(f'New file: {update}') + + if os.path.exists(source): + if filecmp.cmp(source, update, shallow=True): + logger.info('app.asar is already up to date') + return False + else: + # Keyword "Update app.asar" is used in AlasApp + # to determine whether there is a hot update + logger.info(f'Update app.asar {update} -----> {source}') + os.remove(source) + shutil.copy(update, source) + return True + else: + logger.info(f'{source} not exists, skip updating') + return False + + def app_update(self): + logger.hr(f'Update app', 0) + + if not self.AppAsarUpdate: + logger.info('AppAsarUpdate is disabled, skip') + Progress.UpdateAlasApp() + return False + + # self.app_asar_replace(os.getcwd()) + # Progress.UpdateAlasApp() diff --git a/deploy/Windows/config.py b/deploy/Windows/config.py new file mode 100644 index 000000000..adf91ee67 --- /dev/null +++ b/deploy/Windows/config.py @@ -0,0 +1,226 @@ +import copy +import os +import subprocess +from typing import Optional, Union + +from deploy.Windows.logger import logger +from deploy.Windows.utils import DEPLOY_CONFIG, DEPLOY_TEMPLATE, cached_property, poor_yaml_read, poor_yaml_write + + +class ExecutionError(Exception): + pass + + +class ConfigModel: + # Git + Repository: str = "https://github.com/LmeSzinc/AzurLaneAutoScript" + Branch: str = "master" + GitExecutable: str = "./toolkit/Git/mingw64/bin/git.exe" + GitProxy: Optional[str] = None + SSLVerify: bool = False + AutoUpdate: bool = True + KeepLocalChanges: bool = False + + # Python + PythonExecutable: str = "./toolkit/python.exe" + PypiMirror: Optional[str] = None + InstallDependencies: bool = True + RequirementsFile: str = "requirements.txt" + + # Adb + AdbExecutable: str = "./toolkit/Lib/site-packages/adbutils/binaries/adb.exe" + ReplaceAdb: bool = True + AutoConnect: bool = True + InstallUiautomator2: bool = True + + # Ocr + UseOcrServer: bool = False + StartOcrServer: bool = False + OcrServerPort: int = 22268 + OcrClientAddress: str = "127.0.0.1:22268" + + # Update + EnableReload: bool = True + CheckUpdateInterval: int = 5 + AutoRestartTime: str = "03:50" + + # Misc + DiscordRichPresence: bool = False + + # Remote Access + EnableRemoteAccess: bool = False + SSHUser: Optional[str] = None + SSHServer: Optional[str] = None + SSHExecutable: Optional[str] = None + + # Webui + WebuiHost: str = "0.0.0.0" + WebuiPort: int = 22367 + Language: str = "en-US" + Theme: str = "default" + DpiScaling: bool = True + Password: Optional[str] = None + CDN: Union[str, bool] = False + Run: Optional[str] = None + AppAsarUpdate: bool = True + NoSandbox: bool = True + + # Dynamic + GitOverCdn: bool = False + + +class DeployConfig(ConfigModel): + def __init__(self, file=DEPLOY_CONFIG): + """ + Args: + file (str): User deploy config. + """ + self.file = file + self.config = {} + self.config_template = {} + self.read() + + # Bypass webui.config.DeployConfig.__setattr__() + # Don't write these into deploy.yaml + super().__setattr__('GitOverCdn', self.Repository in ['cn']) + if self.Repository in ['global', 'cn']: + super().__setattr__('Repository', 'https://github.com/LmeSzinc/StarRailCopilot') + + self.write() + self.show_config() + + def show_config(self): + logger.hr("Show deploy config", 1) + for k, v in self.config.items(): + if k in ("Password", "SSHUser"): + continue + if self.config_template[k] == v: + continue + logger.info(f"{k}: {v}") + + logger.info(f"Rest of the configs are the same as default") + + def read(self): + self.config = poor_yaml_read(DEPLOY_TEMPLATE) + self.config_template = copy.deepcopy(self.config) + self.config.update(poor_yaml_read(self.file)) + + for key, value in self.config.items(): + if hasattr(self, key): + super().__setattr__(key, value) + + def write(self): + poor_yaml_write(self.config, self.file) + + def filepath(self, path): + """ + Args: + path (str): + + Returns: + str: Absolute filepath. + """ + if os.path.isabs(path): + return path + + return ( + os.path.abspath(os.path.join(self.root_filepath, path)) + .replace(r"\\", "/") + .replace("\\", "/") + ) + + @cached_property + def root_filepath(self): + return ( + os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")) + .replace(r"\\", "/") + .replace("\\", "/") + ) + + @cached_property + def adb(self) -> str: + exe = self.filepath(self.AdbExecutable) + if os.path.exists(exe): + return exe + + logger.warning(f'AdbExecutable: {exe} does not exists, use `adb` instead') + return 'adb' + + @cached_property + def git(self) -> str: + exe = self.filepath(self.GitExecutable) + if os.path.exists(exe): + return exe + + logger.warning(f'GitExecutable: {exe} does not exists, use `git` instead') + return 'git' + + @cached_property + def python(self) -> str: + return self.filepath(self.PythonExecutable) + + @cached_property + def requirements_file(self) -> str: + if self.RequirementsFile == 'requirements.txt': + return 'requirements.txt' + else: + return self.filepath(self.RequirementsFile) + + def execute(self, command, allow_failure=False, output=True): + """ + Args: + command (str): + allow_failure (bool): + output(bool): + + Returns: + bool: If success. + Terminate installation if failed to execute and not allow_failure. + """ + command = command.replace(r"\\", "/").replace("\\", "/").replace('"', '"') + if not output: + command = command + ' >nul 2>nul' + logger.info(command) + error_code = os.system(command) + if error_code: + if allow_failure: + logger.info(f"[ allowed failure ], error_code: {error_code}") + return False + else: + logger.info(f"[ failure ], error_code: {error_code}") + self.show_error(command) + raise ExecutionError + else: + logger.info(f"[ success ]") + return True + + def subprocess_execute(self, cmd, timeout=10): + """ + Args: + cmd (list[str]): + timeout: + + Returns: + str: + """ + logger.info(' '.join(cmd)) + process = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) + try: + stdout, stderr = process.communicate(timeout=timeout) + process.kill() + except subprocess.TimeoutExpired: + process.kill() + stdout, stderr = process.communicate() + logger.info(f'TimeoutExpired, stdout={stdout}, stderr={stderr}') + return stdout.decode() + + def show_error(self, command=None): + logger.hr("Update failed", 0) + self.show_config() + logger.info("") + logger.info(f"Last command: {command}") + logger.info( + "Please check your deploy settings in config/deploy.yaml " + "and re-open Alas.exe" + ) + logger.info("Take the screenshot of entire window if you need help") diff --git a/deploy/Windows/emulator.py b/deploy/Windows/emulator.py new file mode 100644 index 000000000..3dfc74f15 --- /dev/null +++ b/deploy/Windows/emulator.py @@ -0,0 +1,171 @@ +import asyncio +import filecmp +import os +import shutil +import sys +import typing as t +from dataclasses import dataclass + +from deploy.Windows.alas import AlasManager +from deploy.Windows.logger import logger +from deploy.Windows.utils import cached_property + +if sys.platform.startswith("win"): + asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy()) + + +@dataclass +class DataAdbDevice: + serial: str + status: str + + +class EmulatorManager(AlasManager): + @cached_property + def emulator_manager(self): + from module.device.platform.emulator_windows import EmulatorManager + return EmulatorManager() + + def adb_kill(self): + # Just kill it, because some adb don't obey. + logger.hr('Kill all known ADB', level=2) + for proc in self.iter_process_by_names([ + # Most emulator use this + 'adb.exe', + # NoxPlayer 夜神模拟器 + 'nox_adb.exe', + # MumuPlayer MuMu模拟器 + 'adb_server.exe', + # Bluestacks 蓝叠模拟器 + 'HD-Adb.exe' + ]): + logger.info(proc) + self.kill_process(proc) + + def adb_devices(self): + """ + Returns: + list[DataAdbDevice]: Connected devices in adb + """ + logger.hr('Adb deivces', level=2) + result = self.subprocess_execute([self.adb, 'devices']) + devices = [] + for line in result.replace('\r\r\n', '\n').replace('\r\n', '\n').split('\n'): + if line.startswith('List') or '\t' not in line: + continue + serial, status = line.split('\t') + device = DataAdbDevice( + serial=serial, + status=status, + ) + devices.append(device) + logger.info(device) + return devices + + def brute_force_connect(self): + """ + Brute-force connect all available emulator instances + """ + devices = self.adb_devices() + + # Disconnect offline devices + for device in devices: + if device.status == 'offline': + self.subprocess_execute([self.adb, 'disconnect', device.serial]) + + # Get serial + list_serial = self.emulator_manager.all_emulator_serials + + logger.hr('Brute force connect', level=2) + + async def _connect(serial): + try: + await asyncio.create_subprocess_exec(self.adb, 'connect', serial) + except Exception as e: + logger.info(e) + + async def connect(): + await asyncio.gather( + *[_connect(serial) for serial in list_serial] + ) + + asyncio.run(connect()) + + return self.adb_devices() + + @staticmethod + def adb_path_to_backup(adb, new_backup=True): + """ + Args: + adb (str): Filepath to an adb binary + new_backup (bool): True to return a new backup path, + False to return an existing backup + + Returns: + str: Filepath to its backup file + """ + for n in range(10): + backup = f'{adb}.bak{n}' if n else f'{adb}.bak' + if os.path.exists(backup): + if new_backup: + continue + else: + return backup + else: + if new_backup: + return backup + else: + continue + + # Too many backups, override the first one + return f'{adb}.bak' + + def iter_adb_to_replace(self) -> t.Iterable[str]: + for adb in self.emulator_manager.all_adb_binaries: + if filecmp.cmp(adb, self.adb, shallow=True): + logger.info(f'{adb} is same as {self.adb}, skip') + continue + else: + yield adb + + def adb_replace(self): + """ + Backup the adb in emulator folder to xxx.bak, replace it with your adb. + `adb kill-server` must be called before replacing. + """ + replace = list(self.iter_adb_to_replace()) + if not replace: + logger.info('No need to replace') + return + + self.adb_kill() + for adb in replace: + logger.info(f'Replacing {adb}') + bak = self.adb_path_to_backup(adb, new_backup=True) + logger.info(f'{adb} -----> {bak}') + shutil.move(adb, bak) + logger.info(f'{self.adb} -----> {adb}') + shutil.copy(self.adb, adb) + + def adb_recover(self): + """ + Revert `adb_replace()` + """ + for adb in self.emulator_manager.all_adb_binaries: + logger.info(f'Recovering {adb}') + bak = self.adb_path_to_backup(adb, new_backup=False) + if os.path.exists(bak): + logger.info(f'Delete {adb}') + if os.path.exists(adb): + os.remove(adb) + logger.info(f'{bak} -----> {adb}') + shutil.move(bak, adb) + else: + logger.info('No backup available, skip') + continue + + +if __name__ == '__main__': + os.chdir(os.path.join(os.path.dirname(__file__), '../../')) + self = EmulatorManager() + self.brute_force_connect() diff --git a/deploy/Windows/git.py b/deploy/Windows/git.py new file mode 100644 index 000000000..c873f6b35 --- /dev/null +++ b/deploy/Windows/git.py @@ -0,0 +1,162 @@ +import configparser +import os + +from deploy.Windows.config import DeployConfig +from deploy.Windows.logger import Progress, logger +from deploy.Windows.utils import cached_property +from deploy.git_over_cdn.client import GitOverCdnClient + + +class GitConfigParser(configparser.ConfigParser): + def check(self, section, option, value): + result = self.get(section, option, fallback=None) + if result == value: + logger.info(f'Git config {section}.{option} = {value}') + return True + else: + return False + + +class GitOverCdnClientWindows(GitOverCdnClient): + def update(self, *args, **kwargs): + Progress.GitInit() + _ = super().update(*args, **kwargs) + Progress.GitShowVersion() + return _ + + @cached_property + def latest_commit(self) -> str: + _ = super().latest_commit + Progress.GitLatestCommit() + return _ + + def download_pack(self): + _ = super().download_pack() + Progress.GitDownloadPack() + return _ + + +class GitManager(DeployConfig): + @staticmethod + def remove(file): + try: + os.remove(file) + logger.info(f'Removed file: {file}') + except FileNotFoundError: + logger.info(f'File not found: {file}') + + @cached_property + def git_config(self): + conf = GitConfigParser() + conf.read('./.git/config') + return conf + + def git_repository_init( + self, repo, source='origin', branch='master', + proxy='', ssl_verify=True, keep_changes=False + ): + logger.hr('Git Init', 1) + if not self.execute(f'"{self.git}" init', allow_failure=True): + self.remove('./.git/config') + self.remove('./.git/index') + self.remove('./.git/HEAD') + self.remove('./.git/ORIG_HEAD') + self.execute(f'"{self.git}" init') + Progress.GitInit() + + logger.hr('Set Git Proxy', 1) + if proxy: + if not self.git_config.check('http', 'proxy', value=proxy): + self.execute(f'"{self.git}" config --local http.proxy {proxy}') + if not self.git_config.check('https', 'proxy', value=proxy): + self.execute(f'"{self.git}" config --local https.proxy {proxy}') + else: + if not self.git_config.check('http', 'proxy', value=None): + self.execute(f'"{self.git}" config --local --unset http.proxy', allow_failure=True) + if not self.git_config.check('https', 'proxy', value=None): + self.execute(f'"{self.git}" config --local --unset https.proxy', allow_failure=True) + + if ssl_verify: + if not self.git_config.check('http', 'sslVerify', value='true'): + self.execute(f'"{self.git}" config --local http.sslVerify true', allow_failure=True) + else: + if not self.git_config.check('http', 'sslVerify', value='false'): + self.execute(f'"{self.git}" config --local http.sslVerify false', allow_failure=True) + Progress.GitSetConfig() + + logger.hr('Set Git Repository', 1) + if not self.git_config.check(f'remote "{source}"', 'url', value=repo): + if not self.execute(f'"{self.git}" remote set-url {source} {repo}', allow_failure=True): + self.execute(f'"{self.git}" remote add {source} {repo}') + Progress.GitSetRepo() + + logger.hr('Fetch Repository Branch', 1) + self.execute(f'"{self.git}" fetch {source} {branch}') + Progress.GitFetch() + + logger.hr('Pull Repository Branch', 1) + # Remove git lock + for lock_file in [ + './.git/index.lock', + './.git/HEAD.lock', + './.git/refs/heads/master.lock', + ]: + if os.path.exists(lock_file): + logger.info(f'Lock file {lock_file} exists, removing') + os.remove(lock_file) + if keep_changes: + if self.execute(f'"{self.git}" stash', allow_failure=True): + self.execute(f'"{self.git}" pull --ff-only {source} {branch}') + if self.execute(f'"{self.git}" stash pop', allow_failure=True): + pass + else: + # No local changes to existing files, untracked files not included + logger.info('Stash pop failed, there seems to be no local changes, skip instead') + else: + logger.info('Stash failed, this may be the first installation, drop changes instead') + self.execute(f'"{self.git}" reset --hard {source}/{branch}') + self.execute(f'"{self.git}" pull --ff-only {source} {branch}') + else: + self.execute(f'"{self.git}" reset --hard {source}/{branch}') + Progress.GitReset() + # Since `git fetch` is already called, checkout is faster + if not self.execute(f'"{self.git}" checkout {branch}', allow_failure=True): + self.execute(f'"{self.git}" pull --ff-only {source} {branch}') + Progress.GitCheckout() + + logger.hr('Show Version', 1) + self.execute(f'"{self.git}" --no-pager log --no-merges -1') + Progress.GitShowVersion() + + @property + def goc_client(self): + client = GitOverCdnClient( + url='https://vip.123pan.cn/1815343254/pack/LmeSzinc_StarRailCopilot_master', + folder=self.root_filepath, + source='origin', + branch='master', + git=self.git, + ) + client.logger = logger + return client + + def git_install(self): + logger.hr('Update Alas', 0) + + if not self.AutoUpdate: + logger.info('AutoUpdate is disabled, skip') + Progress.GitShowVersion() + return + + if self.GitOverCdn: + if self.goc_client.update(keep_changes=self.KeepLocalChanges): + return + + self.git_repository_init( + repo=self.Repository, + source='origin', + branch=self.Branch, + proxy=self.GitProxy, + ssl_verify=self.SSLVerify, + keep_changes=self.KeepLocalChanges, + ) diff --git a/deploy/Windows/installer_test.py b/deploy/Windows/installer_test.py new file mode 100644 index 000000000..a3995e528 --- /dev/null +++ b/deploy/Windows/installer_test.py @@ -0,0 +1,117 @@ +import time + +from deploy.Windows.logger import logger + +output = r""" +Process: [ 0% ] +./toolkit/Lib/site-packages/requests/sessions.py trust_env already patched +./toolkit/Lib/site-packages/pip/_vendor/requests/sessions.py trust_env already patched +./toolkit/Lib/site-packages/uiautomator2/init.py minicap_urls no need to patch +./toolkit/Lib/site-packages/uiautomator2/init.py appdir already patched +./toolkit/Lib/site-packages/adbutils/mixin.py apkutils2 no need to patch +Process: [ 5% ] +==================== SHOW DEPLOY CONFIG ==================== +Repository: https://e.coding.net/llop18870/alas/AzurLaneAutoScript.git +Branch: feature +PypiMirror: https://pypi.tuna.tsinghua.edu.cn/simple +Language: zh-CN +Rest of the configs are the same as default +Process: [ 10% ] ++---------------------------------------------------+ +| UPDATE ALAS | ++---------------------------------------------------+ +==================== GIT INIT ==================== +"D:/AlasRelease/AzurLaneAutoScript/toolkit/Git/mingw64/bin/git.exe" init +Reinitialized existing Git repository in D:/AlasRelease/AzurLaneAutoScript/.git/ +[ success ] +Process: [ 15% ] +==================== SET GIT PROXY ==================== +Git config http.proxy = None +Git config https.proxy = None +Git config http.sslVerify = true +Process: [ 18% ] +==================== SET GIT REPOSITORY ==================== +Git config remote "origin".url = https://e.coding.net/llop18870/alas/AzurLaneAutoScript.git +Process: [ 20% ] +==================== FETCH REPOSITORY BRANCH ==================== +"D:/AlasRelease/AzurLaneAutoScript/toolkit/Git/mingw64/bin/git.exe" fetch origin feature +From https://e.coding.net/llop18870/alas/AzurLaneAutoScript + * branch feature -> FETCH_HEAD +[ success ] +Process: [ 40% ] +==================== PULL REPOSITORY BRANCH ==================== +"D:/AlasRelease/AzurLaneAutoScript/toolkit/Git/mingw64/bin/git.exe" reset --hard origin/feature +HEAD is now at 11595208 Fix: No process cache since it's fast already +[ success ] +Process: [ 45% ] +"D:/AlasRelease/AzurLaneAutoScript/toolkit/Git/mingw64/bin/git.exe" checkout feature +Already on 'feature' +Your branch is up to date with 'origin/feature'. +[ success ] +Process: [ 48% ] +==================== SHOW VERSION ==================== +"D:/AlasRelease/AzurLaneAutoScript/toolkit/Git/mingw64/bin/git.exe" --no-pager log --no-merges -1 +commit 11595208afe1ca1b3d48f5722795ce2387bccd87 (HEAD -> feature, origin/feature) +Author: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> +Date: Tue Apr 4 01:17:09 2023 +0800 + + Fix: No process cache since it's fast already +[ success ] +Process: [ 50% ] ++----------------------------------------------------------+ +| KILL EXISTING ALAS | ++----------------------------------------------------------+ +List process +Found 264 processes +Process: [ 60% ] ++-----------------------------------------------------------+ +| UPDATE DEPENDENCIES | ++-----------------------------------------------------------+ +All dependencies installed +Process: [ 70% ] ++--------------------------------------------------+ +| UPDATE APP | ++--------------------------------------------------+ +Old file: D:\AlasRelease\AzurLaneAutoScript\toolkit\WebApp\resources\app.asar +New version: 0.3.7 +New file: D:\AlasRelease\AzurLaneAutoScript\toolkit\lib\site-packages\alas_webapp\app.asar +app.asar is already up to date +Process: [ 75% ] ++---------------------------------------------------------+ +| START ADB SERVICE | ++---------------------------------------------------------+ +==================== REPLACE ADB ==================== +No need to replace +Process: [ 90% ] +==================== ADB CONNECT ==================== +-------------------- ADB DEIVCES -------------------- +D:/AlasRelease/AzurLaneAutoScript/toolkit/Lib/site-packages/adbutils/binaries/adb.exe devices +DataAdbDevice(serial='127.0.0.1:16384', status='device') +DataAdbDevice(serial='127.0.0.1:16480', status='device') +DataAdbDevice(serial='127.0.0.1:7555', status='device') +Process: [ 92% ] +-------------------- BRUTE FORCE CONNECT -------------------- +already connected to 127.0.0.1:7555 +already connected to 127.0.0.1:16384 +already connected to 127.0.0.1:16480 +already connected to 127.0.0.1:7555 +Process: [ 98% ] +-------------------- ADB DEIVCES -------------------- +D:/AlasRelease/AzurLaneAutoScript/toolkit/Lib/site-packages/adbutils/binaries/adb.exe devices +DataAdbDevice(serial='127.0.0.1:16384', status='device') +DataAdbDevice(serial='127.0.0.1:16480', status='device') +DataAdbDevice(serial='127.0.0.1:7555', status='device') +Process: [ 100% ] +中文测试,!@#nfoir +""" + + +def run(): + for row in output.split('\n'): + time.sleep(0.05) + if row: + logger.info(row) + + +if __name__ == '__main__': + run() diff --git a/deploy/Windows/logger.py b/deploy/Windows/logger.py new file mode 100644 index 000000000..a0607dc31 --- /dev/null +++ b/deploy/Windows/logger.py @@ -0,0 +1,75 @@ +import logging +import os +import sys + +os.chdir(os.path.join(os.path.dirname(__file__), '../../')) + +logger = logging.getLogger("deploy") +_logger = logger + +formatter = logging.Formatter(fmt="%(message)s") +hdlr = logging.StreamHandler(stream=sys.stdout) +hdlr.setFormatter(formatter) +logger.addHandler(hdlr) +logger.setLevel(logging.INFO) + + +def hr(title, level=3): + if logger is not _logger: + return logger.hr(title, level) + + title = str(title).upper() + if level == 0: + middle = "|" + " " * 20 + title + " " * 20 + "|" + border = "+" + "-" * (len(middle) - 2) + "+" + logger.info(border) + logger.info(middle) + logger.info(border) + if level == 1: + logger.info("=" * 20 + " " + title + " " + "=" * 20) + if level == 2: + logger.info("-" * 20 + " " + title + " " + "-" * 20) + if level == 3: + logger.info(f"<<< {title} >>>") + + +def attr(name, text): + print(f'[{name}] {text}') + + +logger.hr = hr +logger.attr = attr + + +class Percentage: + def __init__(self, progress): + self.progress = progress + + def __call__(self, *args, **kwargs): + logger.info(f'Process: [ {self.progress}% ]') + + +class Progress: + Start = Percentage(0) + ShowDeployConfig = Percentage(10) + + GitInit = Percentage(12) + GitSetConfig = Percentage(13) + GitSetRepo = Percentage(15) + GitFetch = Percentage(40) + GitReset = Percentage(45) + GitCheckout = Percentage(48) + GitShowVersion = Percentage(50) + + GitLatestCommit = Percentage(25) + GitDownloadPack = Percentage(40) + + KillExisting = Percentage(60) + UpdateDependency = Percentage(70) + UpdateAlasApp = Percentage(75) + + AdbReplace = Percentage(80) + AdbConnect = Percentage(95) + + # Must have a 100% + Finish = Percentage(100) diff --git a/deploy/Windows/patch.py b/deploy/Windows/patch.py new file mode 100644 index 000000000..a1d3be03f --- /dev/null +++ b/deploy/Windows/patch.py @@ -0,0 +1,154 @@ +import os +import re + +from deploy.Windows.logger import logger + + +def patch_trust_env(file): + """ + People use proxies, but they never realize that proxy software leaves a + global proxy pointing to itself even when the software is not running. + In most situations we set `session.trust_env = False` in requests, but this + does not effect the `pip` command. + + To handle untrusted user environment for good. We patch the code file in + requests directly. Of course, the patch only effect the python env inside + Alas. + + Returns: + bool: If patched. + """ + try: + with open(file, 'r', encoding='utf-8') as f: + content = f.read() + except FileNotFoundError: + logger.info(f'{file} trust_env not exist') + return + + if re.search('self.trust_env = True', content): + content = re.sub('self.trust_env = True', 'self.trust_env = False', content) + with open(file, 'w', encoding='utf-8') as f: + f.write(content) + logger.info(f'{file} trust_env patched') + elif re.search('self.trust_env = False', content): + logger.info(f'{file} trust_env already patched') + else: + logger.info(f'{file} trust_env is not in the file') + + +def check_running_directory(): + """ + An fool-proof mechanism. + Show error if user is running Easy Install in compressing software, + since Alas can't install in temp directories. + """ + file = __file__.replace(r"\\", "/").replace("\\", "/") + # C:/Users//AppData/Local/Temp/360zip$temp/360$3/AzurLaneAutoScript + if 'Temp/360zip' in file: + logger.critical('请先解压Alas的压缩包,再安装Alas') + exit(1) + # C:/Users//AppData/Local/Temp/Rar$EXa9248.23428/AzurLaneAutoScript + if 'Temp/Rar' in file or 'Local/Temp' in file: + logger.critical('Please unzip ALAS installer first') + exit(1) + + +def patch_uiautomator2(): + """ + uiautomator2 download assets from https://tool.appetizer.io first then fallback to https://github.com/openatx. + https://tool.appetizer.io is added to bypass the wall in China but https://tool.appetizer.io is slow outside of CN + plus some CN users cannot access it for unknown reason. + + So we patch `uiautomator2/init.py` to a local assets cache `uiautomator2cache/cache`. + appdir = os.path.join(os.path.expanduser('~'), '.uiautomator2') + to: + appdir = os.path.join(__file__, '../../uiautomator2cache') + + And we also remove minicap installations since emulators doesn't need it. + for url in self.minicap_urls: + self.push_url(url) + to: + for url in []: + self.push_url(url) + """ + init_file = './toolkit/Lib/site-packages/uiautomator2/init.py' + cache_dir = './toolkit/Lib/site-packages/uiautomator2cache/cache' + appdir = "os.path.join(__file__, '../../uiautomator2cache')" + + modified = False + try: + with open(init_file, 'r', encoding='utf-8') as f: + content = f.read() + except FileNotFoundError: + logger.info(f'{init_file} not exist') + return + + # Patch minicap_urls + res = re.search(r'self.minicap_urls', content) + if res: + content = re.sub(r'self.minicap_urls', '[]', content) + modified = True + logger.info(f'{init_file} minicap_urls patched') + else: + logger.info(f'{init_file} minicap_urls no need to patch') + + # Patch appdir + if os.path.exists(cache_dir): + res = re.search(r'appdir ?=(.*)\n', content) + if res: + prev = res.group(1).strip() + if prev == appdir: + logger.info(f'{init_file} appdir already patched') + else: + content = re.sub(r'appdir ?=.*\n', f'appdir = {appdir}\n', content) + modified = True + logger.info(f'{init_file} appdir patched') + else: + logger.info(f'{init_file} appdir not found') + else: + logger.info('uiautomator2cache is not installed skip patching') + + # Save file + if modified: + with open(init_file, 'w', encoding='utf-8') as f: + f.write(content) + logger.info(f'{init_file} content saved') + + +def patch_apkutils2(): + """ + `adbutils/mixin.py` `ShellMixin.install` imports `apkutils2`, but `apkutils2` does not provide wheel files, + it may failed to install for unknown reasons. Since we never used that method, we just remove the import. + """ + mixin = './toolkit/Lib/site-packages/adbutils/mixin.py' + + try: + with open(mixin, 'r', encoding='utf-8') as f: + content = f.read() + except FileNotFoundError: + logger.info(f'{mixin} not exist') + return + + res = re.search(r'import apkutils2', content) + if res: + content = re.sub(r'import apkutils2', '', content) + with open(mixin, 'w', encoding='utf-8') as f: + f.write(content) + logger.info(f'{mixin} apkutils2 patched') + else: + logger.info(f'{mixin} apkutils2 no need to patch') + + +def pre_checks(): + check_running_directory() + + # patch_trust_env + patch_trust_env('./toolkit/Lib/site-packages/requests/sessions.py') + patch_trust_env('./toolkit/Lib/site-packages/pip/_vendor/requests/sessions.py') + + patch_uiautomator2() + patch_apkutils2() + + +if __name__ == '__main__': + pre_checks() diff --git a/deploy/Windows/pip.py b/deploy/Windows/pip.py new file mode 100644 index 000000000..cedb0a19a --- /dev/null +++ b/deploy/Windows/pip.py @@ -0,0 +1,132 @@ +import os +import re +import typing as t +from dataclasses import dataclass +from urllib.parse import urlparse + +from deploy.Windows.config import DeployConfig +from deploy.Windows.logger import logger, Progress +from deploy.Windows.utils import cached_property + + +@dataclass +class DataDependency: + name: str + version: str + + def __post_init__(self): + # uvicorn[standard] -> uvicorn + self.name = re.sub(r'\[.*\]', '', self.name) + # opencv_python -> opencv-python + self.name = self.name.replace('_', '-').strip() + # PyYaml -> pyyaml + self.name = self.name.lower() + self.version = self.version.strip() + self.version = re.sub(r'\.0$', '', self.version) + + @cached_property + def pretty_name(self): + return f'{self.name}=={self.version}' + + def __str__(self): + return self.pretty_name + + __repr__ = __str__ + + def __eq__(self, other): + return str(self) == str(other) + + def __hash__(self): + return hash(str(self)) + + +class PipManager(DeployConfig): + @cached_property + def pip(self): + return f'"{self.python}" -m pip' + + @cached_property + def python_site_packages(self): + return os.path.abspath(os.path.join(self.python, '../Lib/site-packages')) \ + .replace(r"\\", "/").replace("\\", "/") + + @cached_property + def set_installed_dependency(self) -> t.Set[DataDependency]: + data = [] + regex = re.compile(r'(.*)-(.*).dist-info') + try: + for name in os.listdir(self.python_site_packages): + res = regex.search(name) + if res: + dep = DataDependency(name=res.group(1), version=res.group(2)) + data.append(dep) + except FileNotFoundError: + logger.info(f'Directory not found: {self.python_site_packages}') + return set(data) + + @cached_property + def set_required_dependency(self) -> t.Set[DataDependency]: + data = [] + regex = re.compile('(.*)==(.*)[ ]*#') + file = self.filepath('./requirements.txt') + try: + with open(file, 'r', encoding='utf-8') as f: + for line in f.readlines(): + res = regex.search(line) + if res: + dep = DataDependency(name=res.group(1), version=res.group(2)) + data.append(dep) + except FileNotFoundError: + logger.info(f'File not found: {file}') + return set(data) + + @cached_property + def set_dependency_to_install(self) -> t.Set[DataDependency]: + """ + A poor dependency comparison, but much much faster than `pip install` and `pip list` + """ + data = [] + for dep in self.set_required_dependency: + if dep not in self.set_installed_dependency: + data.append(dep) + return set(data) + + def pip_install(self): + logger.hr('Update Dependencies', 0) + + if not self.InstallDependencies: + logger.info('InstallDependencies is disabled, skip') + Progress.UpdateDependency() + return + + if not len(self.set_dependency_to_install): + logger.info('All dependencies installed') + Progress.UpdateDependency() + return + else: + logger.info(f'Dependencies to install: {self.set_dependency_to_install}') + + # Install + logger.hr('Check Python', 1) + self.execute(f'"{self.python}" --version') + + arg = [] + if self.PypiMirror: + mirror = self.PypiMirror + arg += ['-i', mirror] + # Trust http mirror or skip ssl verify + if 'http:' in mirror or not self.SSLVerify: + arg += ['--trusted-host', urlparse(mirror).hostname] + elif not self.SSLVerify: + arg += ['--trusted-host', 'pypi.org'] + arg += ['--trusted-host', 'files.pythonhosted.org'] + + # Don't update pip, just leave it. + # logger.hr('Update pip', 1) + # self.execute(f'"{self.pip}" install --upgrade pip{arg}') + arg += ['--disable-pip-version-check'] + + logger.hr('Update Dependencies', 1) + arg = ' ' + ' '.join(arg) if arg else '' + self.execute(f'{self.pip} install -r {self.requirements_file}{arg}') + Progress.UpdateDependency() diff --git a/deploy/Windows/template.yaml b/deploy/Windows/template.yaml new file mode 100644 index 000000000..40e5fd1d6 --- /dev/null +++ b/deploy/Windows/template.yaml @@ -0,0 +1,166 @@ +Deploy: + Git: + # URL of AzurLaneAutoScript repository + # [CN user] Use 'cn' to get update from git-over-cdn service + # [Other] Use 'global' to get update from https://github.com/LmeSzinc/StarRailCopilot + Repository: 'global' + # Branch of Alas + # [Developer] Use 'dev', 'app', etc, to try new features + # [Other] Use 'master', the stable branch + Branch: 'master' + # Filepath of git executable `git.exe` + # [Easy installer] Use './toolkit/Git/mingw64/bin/git.exe' + # [Other] Use you own git + GitExecutable: './toolkit/Git/mingw64/bin/git.exe' + # Set git proxy + # [CN user] Use your local http proxy (http://127.0.0.1:{port}) or socks5 proxy (socks5://127.0.0.1:{port}) + # [Other] Use null + GitProxy: null + # Set SSL Verify + # [In most cases] Use true + # [Other] Use false to when connected to an untrusted network + SSLVerify: true + # Update Alas at startup + # [In most cases] Use true + AutoUpdate: true + # Whether to keep local changes during update + # User settings, logs and screenshots will be kept, no mather this is true or false + # [Developer] Use true, if you modified the code + # [Other] Use false + KeepLocalChanges: false + + Python: + # Filepath of python executable `python.exe` + # [Easy installer] Use './toolkit/python.exe' + # [Other] Use you own python, and its version should be 3.7.6 64bit + PythonExecutable: './toolkit/python.exe' + # URL of pypi mirror + # [CN user] Use 'https://pypi.tuna.tsinghua.edu.cn/simple' for faster and more stable download + # [Other] Use null + PypiMirror: null + # Install dependencies at startup + # [In most cases] Use true + InstallDependencies: true + # Path to requirements.txt + # [In most cases] Use 'requirements.txt' + # [In AidLux] Use './deploy/AidLux/{version}/requirements.txt', version is default to 0.92 + RequirementsFile: 'requirements.txt' + + Adb: + # Filepath of ADB executable `adb.exe` + # [Easy installer] Use './toolkit/Lib/site-packages/adbutils/binaries/adb.exe' + # [Other] Use you own latest ADB, but not the ADB in your emulator + AdbExecutable: './toolkit/Lib/site-packages/adbutils/binaries/adb.exe' + # Whether to replace ADB + # Chinese emulators (NoxPlayer, LDPlayer, MemuPlayer, MuMuPlayer) use their own ADB, instead of the latest. + # Different ADB servers will terminate each other at startup, resulting in disconnection. + # For compatibility, we have to replace them all. + # This will do: + # 1. Terminate current ADB server + # 2. Rename ADB from all emulators to *.bak and replace them by the AdbExecutable set above + # 3. Brute-force connect to all available emulator instances + # [In most cases] Use true + # [In few cases] Use false, if you have other programs using ADB. + ReplaceAdb: true + # Brute-force connect to all available emulator instances + # [In most cases] Use true + AutoConnect: true + # Re-install uiautomator2 + # [In most cases] Use true + InstallUiautomator2: true + + Ocr: + # Run Ocr as a service, can reduce memory usage by not import mxnet everytime you start an alas instance + + # Whether to use ocr server + # [Default] false + UseOcrServer: false + # Whether to start ocr server when start GUI + # [Default] false + StartOcrServer: false + # Port of ocr server runs by GUI + # [Default] 22268 + OcrServerPort: 22268 + # Address of ocr server for alas instance to connect + # [Default] 127.0.0.1:22268 + OcrClientAddress: 127.0.0.1:22268 + + Update: + # Use auto update and builtin updater feature + # This may cause problem https://github.com/LmeSzinc/AzurLaneAutoScript/issues/876 + EnableReload: true + # Check update every X minute + # [Disable] 0 + # [Default] 5 + CheckUpdateInterval: 5 + # Scheduled restart time + # If there are updates, Alas will automatically restart and update at this time every day + # and run all alas instances that running before restarted + # [Disable] null + # [Default] 03:50 + AutoRestartTime: 03:50 + + Misc: + # Enable discord rich presence + DiscordRichPresence: false + + RemoteAccess: + # Enable remote access (using ssh reverse tunnel serve by https://github.com/wang0618/localshare) + # ! You need to set Password below to enable remote access since everyone can access to your alas if they have your url. + # See here (http://app.azurlane.cloud/en.html) for more infomation. + EnableRemoteAccess: false + # Username when login into ssh server + # [Default] null (will generate a random one when startup) + SSHUser: null + # Server to connect + # [Default] null + # [Format] host:port + SSHServer: null + # Filepath of SSH executable `ssh.exe` + # [Default] ssh (find ssh in system PATH) + # If you don't have one, install OpenSSH or download it here (https://github.com/PowerShell/Win32-OpenSSH/releases) + SSHExecutable: ssh + + Webui: + # --host. Host to listen + # [Use IPv6] '::' + # [In most cases] Default to '0.0.0.0' + WebuiHost: 0.0.0.0 + # --port. Port to listen + # You will be able to access webui via `http://{host}:{port}` + # [In most cases] Default to 22367 + WebuiPort: 22367 + # Language to use on web ui + # 'zh-CN' for Chinese simplified + # 'en-US' for English + # 'ja-JP' for Japanese + # 'zh-TW' for Chinese traditional + # 'es-ES' for Spanish + Language: en-US + # Theme of web ui + # 'default' for light theme + # 'dark' for dark theme + Theme: default + # Follow system DPI scaling + # [In most cases] true + # [In few cases] false to make Alas smaller, if you have a low resolution but high DPI scaling. + DpiScaling: true + # --key. Password of web ui + # Useful when expose Alas to the public network + Password: null + # --cdn. Use jsdelivr cdn for pywebio static files (css, js). + # 'true' for jsdelivr cdn + # 'false' for self host cdn (automatically) + # 'https://path.to.your/cdn' to use custom cdn + CDN: false + # --run. Auto-run specified config when startup + # 'null' default no specified config + # '["alas"]' specified "alas" config + # '["alas","alas2"]' specified "alas" "alas2" configs + Run: null + # To update app.asar + # [In most cases] true + AppAsarUpdate: true + # --no-sandbox. https://github.com/electron/electron/issues/30966 + # Some Windows systems cannot call the GPU normally for virtualization, and you need to manually turn off sandbox mode + NoSandbox: false From 5623f10ee699bec8ed8e51bacef65991a28c93ca Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 8 Apr 2024 05:06:10 +0800 Subject: [PATCH 46/96] Opt: [ALAS] Brute force connect if auto didn't find any emulators --- module/device/connection.py | 50 +++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/module/device/connection.py b/module/device/connection.py index 4266f6463..8fd559ce8 100644 --- a/module/device/connection.py +++ b/module/device/connection.py @@ -11,7 +11,7 @@ import uiautomator2 as u2 from adbutils import AdbClient, AdbDevice, AdbTimeout, ForwardItem, ReverseItem from adbutils.errors import AdbError -from module.base.decorator import Config, cached_property, del_cached_property +from module.base.decorator import Config, cached_property, del_cached_property, run_once from module.base.utils import ensure_time from module.config.server import VALID_CHANNEL_PACKAGE, VALID_PACKAGE, set_server from module.device.connection_attr import ConnectionAttr @@ -757,23 +757,41 @@ class Connection(ConnectionAttr): If serial=='auto' and only 1 device detected, use it """ logger.hr('Detect device') - logger.info('Here are the available devices, ' - 'copy to Alas.Emulator.Serial to use it or set Alas.Emulator.Serial="auto"') - devices = self.list_device() + available = SelectedGrids([]) + devices = SelectedGrids([]) - # Show available devices - available = devices.select(status='device') - for device in available: - logger.info(device.serial) - if not len(available): - logger.info('No available devices') + @run_once + def brute_force_connect(): + from deploy.Windows.emulator import EmulatorManager + manager = EmulatorManager() + manager.brute_force_connect() - # Show unavailable devices if having any - unavailable = devices.delete(available) - if len(unavailable): - logger.info('Here are the devices detected but unavailable') - for device in unavailable: - logger.info(f'{device.serial} ({device.status})') + for _ in range(2): + logger.info('Here are the available devices, ' + 'copy to Alas.Emulator.Serial to use it or set Alas.Emulator.Serial="auto"') + devices = self.list_device() + + # Show available devices + available = devices.select(status='device') + for device in available: + logger.info(device.serial) + if not len(available): + logger.info('No available devices') + + # Show unavailable devices if having any + unavailable = devices.delete(available) + if len(unavailable): + logger.info('Here are the devices detected but unavailable') + for device in unavailable: + logger.info(f'{device.serial} ({device.status})') + + # brute_force_connect + if self.config.Emulator_Serial == 'auto' and available.count == 0: + logger.warning(f'No available device found, brute force connecting') + brute_force_connect() + continue + else: + break # Auto device detection if self.config.Emulator_Serial == 'auto': From 65c826a70f1799f5cd2a8b060e4a7465c72a4fcb Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 8 Apr 2024 05:23:14 +0800 Subject: [PATCH 47/96] Opt: Release nemu_ipc connection during wait --- module/device/device.py | 2 ++ module/device/method/nemu_ipc.py | 1 + 2 files changed, 3 insertions(+) diff --git a/module/device/device.py b/module/device/device.py index 8000b0c1c..04a12ff86 100644 --- a/module/device/device.py +++ b/module/device/device.py @@ -166,6 +166,8 @@ class Device(Screenshot, Control, AppControl): # stop it during wait if self.config.Emulator_ScreenshotMethod == 'scrcpy': self._scrcpy_server_stop() + if self.config.Emulator_ScreenshotMethod == 'nemu_ipc': + self.nemu_ipc_release() def stuck_record_add(self, button): self.detect_record.add(str(button)) diff --git a/module/device/method/nemu_ipc.py b/module/device/method/nemu_ipc.py index 1218f0a89..cb1394787 100644 --- a/module/device/method/nemu_ipc.py +++ b/module/device/method/nemu_ipc.py @@ -459,6 +459,7 @@ class NemuIpc(Platform): if has_cached_property(self, 'nemu_ipc'): self.nemu_ipc.disconnect() del_cached_property(self, 'nemu_ipc') + logger.info('nemu_ipc released') def screenshot_nemu_ipc(self): image = self.nemu_ipc.screenshot() From 6bae27cacc9199f61256b3e79af6239d76efd7c3 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 8 Apr 2024 21:56:23 +0800 Subject: [PATCH 48/96] Fix: File descriptor leak in nested CaptureNemuIpc call --- module/device/method/nemu_ipc.py | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/module/device/method/nemu_ipc.py b/module/device/method/nemu_ipc.py index cb1394787..3b4d97b0c 100644 --- a/module/device/method/nemu_ipc.py +++ b/module/device/method/nemu_ipc.py @@ -40,13 +40,6 @@ class CaptureStd: """ def __init__(self): - self.fdout = sys.stdout.fileno() - self.fderr = sys.stderr.fileno() - self.reader_out, self.writer_out = os.pipe() - self.reader_err, self.writer_err = os.pipe() - self.old_stdout = os.fdopen(os.dup(self.fdout), 'w') - self.old_stderr = os.fdopen(os.dup(self.fderr), 'w') - self.stdout = b'' self.stderr = b'' @@ -61,19 +54,24 @@ class CaptureStd: sys.stderr = os.fdopen(self.fderr, 'w') def __enter__(self): - self.old_stdout.__enter__() - self.old_stderr.__enter__() - with open(self.writer_out, 'w') as file: - self._redirect_stdout(to=file) - with open(self.writer_err, 'w') as file: - self._redirect_stderr(to=file) + self.fdout = sys.stdout.fileno() + self.fderr = sys.stderr.fileno() + self.reader_out, self.writer_out = os.pipe() + self.reader_err, self.writer_err = os.pipe() + self.old_stdout = os.fdopen(os.dup(self.fdout), 'w') + self.old_stderr = os.fdopen(os.dup(self.fderr), 'w') + + file_out = os.fdopen(self.writer_out, 'w') + file_err = os.fdopen(self.writer_err, 'w') + self._redirect_stdout(to=file_out) + self._redirect_stderr(to=file_err) return self def __exit__(self, exc_type, exc_val, exc_tb): self._redirect_stdout(to=self.old_stdout) self._redirect_stderr(to=self.old_stderr) - self.old_stdout.__exit__(exc_type, exc_val, exc_tb) - self.old_stderr.__exit__(exc_type, exc_val, exc_tb) + self.old_stdout.close() + self.old_stderr.close() self.stdout = self.recvall(self.reader_out) self.stderr = self.recvall(self.reader_err) From 22618fe46c2bd0f8eb772663b47264922fbfb4fd Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 8 Apr 2024 22:04:33 +0800 Subject: [PATCH 49/96] Fix: Failed to init nemu_ipc on empty emulator path (#3616) --- module/device/method/nemu_ipc.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/module/device/method/nemu_ipc.py b/module/device/method/nemu_ipc.py index 3b4d97b0c..7f67968e8 100644 --- a/module/device/method/nemu_ipc.py +++ b/module/device/method/nemu_ipc.py @@ -415,22 +415,24 @@ class NemuIpc(Platform): Initialize a nemu ipc implementation """ # Try existing settings first - folder = os.path.abspath(os.path.join(self.config.EmulatorInfo_path, '../../')) - index = serial_to_id(self.serial) - if index is not None: - try: - return NemuIpcImpl( - nemu_folder=folder, - instance_id=index, - display_id=0 - ).__enter__() - except (NemuIpcIncompatible, NemuIpcError) as e: - logger.error(e) - logger.error('Emulator info incorrect') + if self.config.EmulatorInfo_path: + folder = os.path.abspath(os.path.join(self.config.EmulatorInfo_path, '../../')) + index = serial_to_id(self.serial) + if index is not None: + try: + return NemuIpcImpl( + nemu_folder=folder, + instance_id=index, + display_id=0 + ).__enter__() + except (NemuIpcIncompatible, NemuIpcError) as e: + logger.error(e) + logger.error('Emulator info incorrect') # Search emulator instance # with E:\ProgramFiles\MuMuPlayer-12.0\shell\MuMuPlayer.exe # installation path is E:\ProgramFiles\MuMuPlayer-12.0 + _ = self.emulator_instance try: return NemuIpcImpl( nemu_folder=self.emulator_instance.emulator.abspath('../'), From b81818f030bb64ee9301806f44def2927400a357 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Mon, 8 Apr 2024 22:47:44 +0800 Subject: [PATCH 50/96] Opt: load offsets of auto search settings at fleet preparation stage (#3612) --- module/handler/auto_search.py | 2 +- module/map/map_fleet_preparation.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/module/handler/auto_search.py b/module/handler/auto_search.py index 9f1bed545..f4785fd56 100644 --- a/module/handler/auto_search.py +++ b/module/handler/auto_search.py @@ -133,7 +133,7 @@ class AutoSearchHandler(EnemySearchingHandler): active = [] for index, button in enumerate(AUTO_SEARCH_SETTINGS): - if self.image_color_count(button, color=(156, 255, 82), threshold=221, count=20): + if self.image_color_count(button.button, color=(156, 255, 82), threshold=221, count=20): active.append(index) if not active: diff --git a/module/map/map_fleet_preparation.py b/module/map/map_fleet_preparation.py index 71f76cb9f..fc3b51aee 100644 --- a/module/map/map_fleet_preparation.py +++ b/module/map/map_fleet_preparation.py @@ -5,6 +5,9 @@ from module.base.button import Button from module.base.timer import Timer from module.base.utils import * from module.exception import RequestHumanTakeover +from module.handler.assets import AUTO_SEARCH_SET_MOB, AUTO_SEARCH_SET_BOSS, \ + AUTO_SEARCH_SET_ALL, AUTO_SEARCH_SET_STANDBY, \ + AUTO_SEARCH_SET_SUB_AUTO, AUTO_SEARCH_SET_SUB_STANDBY from module.handler.info_handler import InfoHandler from module.logger import logger from module.map.assets import * @@ -346,4 +349,13 @@ class FleetPreparation(InfoHandler): else: submarine.clear() + if self.appear(FLEET_1_CLEAR, offset=(-20, -80, 20, 5)): + AUTO_SEARCH_SET_MOB.load_offset(FLEET_1_CLEAR) + AUTO_SEARCH_SET_BOSS.load_offset(FLEET_1_CLEAR) + AUTO_SEARCH_SET_ALL.load_offset(FLEET_1_CLEAR) + AUTO_SEARCH_SET_STANDBY.load_offset(FLEET_1_CLEAR) + if self.appear(SUBMARINE_CLEAR, offset=(-20, -80, 20, 5)): + AUTO_SEARCH_SET_SUB_AUTO.load_offset(SUBMARINE_CLEAR) + AUTO_SEARCH_SET_SUB_STANDBY.load_offset(SUBMARINE_CLEAR) + return True From 7d574dde8b89e792e2712b86080dd8d2f25159bd Mon Sep 17 00:00:00 2001 From: ygrzxc <69748153+ygrzxc@users.noreply.github.com> Date: Mon, 8 Apr 2024 22:49:30 +0800 Subject: [PATCH 51/96] Add: Change the designated vanguard combination (#3520) * Add: Change the designated vanguard combination * Add: Change the designated vanguard combination * Add: Change the designated vanguard combination * Add: Change the designated vanguard combination * Add: Change the designated vanguard combination * Add: Change the designated vanguard combination * Add: Translation for change the designated vanguard combination * Add: Translation for change the designated vanguard combination * Upd:Update dev's args.json * Upd:Update dev's args.json * Upd:Reduce template image size and Implement function * Upd:Reduce template image size and Implement function * Upd:Reduce template image size and Implement function --------- Co-authored-by: y y --- assets/cn/retire/TEMPLATE_AULICK.png | Bin 0 -> 1486 bytes assets/cn/retire/TEMPLATE_BOGUE.png | Bin 14361 -> 1993 bytes assets/cn/retire/TEMPLATE_CASSIN_1.png | Bin 0 -> 1409 bytes assets/cn/retire/TEMPLATE_CASSIN_2.png | Bin 0 -> 1205 bytes assets/cn/retire/TEMPLATE_DOWNES_1.png | Bin 0 -> 1622 bytes assets/cn/retire/TEMPLATE_DOWNES_2.png | Bin 0 -> 1751 bytes assets/cn/retire/TEMPLATE_FOOTE.png | Bin 0 -> 1746 bytes assets/cn/retire/TEMPLATE_HERMES.png | Bin 14539 -> 2539 bytes assets/cn/retire/TEMPLATE_LANGLEY.png | Bin 20079 -> 2417 bytes assets/cn/retire/TEMPLATE_RANGER.png | Bin 16636 -> 2632 bytes assets/en/retire/TEMPLATE_AULICK.png | Bin 0 -> 1486 bytes assets/en/retire/TEMPLATE_BOGUE.png | Bin 14361 -> 1993 bytes assets/en/retire/TEMPLATE_CASSIN_1.png | Bin 0 -> 1409 bytes assets/en/retire/TEMPLATE_CASSIN_2.png | Bin 0 -> 1205 bytes assets/en/retire/TEMPLATE_DOWNES_1.png | Bin 0 -> 1622 bytes assets/en/retire/TEMPLATE_DOWNES_2.png | Bin 0 -> 1751 bytes assets/en/retire/TEMPLATE_FOOTE.png | Bin 0 -> 1746 bytes assets/en/retire/TEMPLATE_HERMES.png | Bin 14539 -> 2539 bytes assets/en/retire/TEMPLATE_LANGLEY.png | Bin 20079 -> 2417 bytes assets/en/retire/TEMPLATE_RANGER.png | Bin 16636 -> 2632 bytes assets/jp/retire/TEMPLATE_AULICK.png | Bin 0 -> 1486 bytes assets/jp/retire/TEMPLATE_BOGUE.png | Bin 14361 -> 1993 bytes assets/jp/retire/TEMPLATE_CASSIN_1.png | Bin 0 -> 1409 bytes assets/jp/retire/TEMPLATE_CASSIN_2.png | Bin 0 -> 1205 bytes assets/jp/retire/TEMPLATE_DOWNES_1.png | Bin 0 -> 1622 bytes assets/jp/retire/TEMPLATE_DOWNES_2.png | Bin 0 -> 1751 bytes assets/jp/retire/TEMPLATE_FOOTE.png | Bin 0 -> 1746 bytes assets/jp/retire/TEMPLATE_HERMES.png | Bin 14539 -> 2539 bytes assets/jp/retire/TEMPLATE_LANGLEY.png | Bin 20079 -> 2417 bytes assets/jp/retire/TEMPLATE_RANGER.png | Bin 16636 -> 2632 bytes assets/tw/retire/TEMPLATE_AULICK.png | Bin 0 -> 1486 bytes assets/tw/retire/TEMPLATE_BOGUE.png | Bin 14361 -> 1993 bytes assets/tw/retire/TEMPLATE_CASSIN_1.png | Bin 0 -> 1409 bytes assets/tw/retire/TEMPLATE_CASSIN_2.png | Bin 0 -> 1205 bytes assets/tw/retire/TEMPLATE_DOWNES_1.png | Bin 0 -> 1622 bytes assets/tw/retire/TEMPLATE_DOWNES_2.png | Bin 0 -> 1751 bytes assets/tw/retire/TEMPLATE_FOOTE.png | Bin 0 -> 1746 bytes assets/tw/retire/TEMPLATE_HERMES.png | Bin 14539 -> 2539 bytes assets/tw/retire/TEMPLATE_LANGLEY.png | Bin 20079 -> 2417 bytes assets/tw/retire/TEMPLATE_RANGER.png | Bin 16636 -> 2632 bytes config/template.json | 3 +- module/campaign/gems_farming.py | 47 +++++++++++++++++++++++-- module/config/argument/args.json | 27 +++++++++----- module/config/argument/argument.yaml | 9 +++-- module/config/config_generated.py | 3 +- module/config/i18n/en-US.json | 21 +++++++---- module/config/i18n/ja-JP.json | 21 +++++++---- module/config/i18n/zh-CN.json | 21 +++++++---- module/config/i18n/zh-TW.json | 21 +++++++---- module/retire/assets.py | 6 ++++ 50 files changed, 134 insertions(+), 45 deletions(-) create mode 100644 assets/cn/retire/TEMPLATE_AULICK.png create mode 100644 assets/cn/retire/TEMPLATE_CASSIN_1.png create mode 100644 assets/cn/retire/TEMPLATE_CASSIN_2.png create mode 100644 assets/cn/retire/TEMPLATE_DOWNES_1.png create mode 100644 assets/cn/retire/TEMPLATE_DOWNES_2.png create mode 100644 assets/cn/retire/TEMPLATE_FOOTE.png create mode 100644 assets/en/retire/TEMPLATE_AULICK.png create mode 100644 assets/en/retire/TEMPLATE_CASSIN_1.png create mode 100644 assets/en/retire/TEMPLATE_CASSIN_2.png create mode 100644 assets/en/retire/TEMPLATE_DOWNES_1.png create mode 100644 assets/en/retire/TEMPLATE_DOWNES_2.png create mode 100644 assets/en/retire/TEMPLATE_FOOTE.png create mode 100644 assets/jp/retire/TEMPLATE_AULICK.png create mode 100644 assets/jp/retire/TEMPLATE_CASSIN_1.png create mode 100644 assets/jp/retire/TEMPLATE_CASSIN_2.png create mode 100644 assets/jp/retire/TEMPLATE_DOWNES_1.png create mode 100644 assets/jp/retire/TEMPLATE_DOWNES_2.png create mode 100644 assets/jp/retire/TEMPLATE_FOOTE.png create mode 100644 assets/tw/retire/TEMPLATE_AULICK.png create mode 100644 assets/tw/retire/TEMPLATE_CASSIN_1.png create mode 100644 assets/tw/retire/TEMPLATE_CASSIN_2.png create mode 100644 assets/tw/retire/TEMPLATE_DOWNES_1.png create mode 100644 assets/tw/retire/TEMPLATE_DOWNES_2.png create mode 100644 assets/tw/retire/TEMPLATE_FOOTE.png diff --git a/assets/cn/retire/TEMPLATE_AULICK.png b/assets/cn/retire/TEMPLATE_AULICK.png new file mode 100644 index 0000000000000000000000000000000000000000..a48dd95422e675ac0b091032be76f4c986d707c4 GIT binary patch literal 1486 zcmbu9do+}39LL}Ho#7=$Ge$}b&5%nXGefKr$|Y=ao!W$^m~=*nV{%z*+nl2t;~vJP zQgVr0ikjLeF(KmOMz-MZ(!$`A~$LJ%tuK`62}ZC;phda0S4HmF~bGPZB~fg!bli1ScwX5_$A;Z2$| ztYBH76*Gc}6)CNC1wse~4x_1zcg7OW?DeB+5qx2^QS7;#zlR1LfrnIAnUncLve&q1 z*qB#qQlfXTIr?^CoChf8$Z#hDL%MzHy$8P*m-I@+A&}ElQR4bI(FDCJsm+$R7^05l zdg%ZYmvzjz(H0#6*t?Bqsoyhb!Xmzg#18I3aa)Et?=0hYnyW^eFsWIYGk#A>7_%(T zCd>rp4rQl(OrL*eGTEhExGCRY4j1O8ne3+{$)DJkpp=+Uur8%t${W!Q?TTcT#V&qv zM~u7Vj+TD2d%u3Xn@YK3PMw{8>7PNQ^6K2iMH$XtC)?pq4ytWY#BctUfs_OGW1pJ`>vx<#+D*J*EBoF1pFL~d{i&)acGa~_VKN= zVK3fF&l|vFay(RDjGhyg(RgV;$+I2LjH&m*X+(_;lQtGhU6EEIBAq_-5X&6(DiB~o>{dVZrs#(d69w%0-$nV;x>3R6J+2N$G z_nNhS3(@+(VgfUYcaK-(d`16>A_!p+nn*kvOCXY**Ww5&-ul7oPdN0G23G`Ek(y*z zr?@b@!y#6sSxLy=`Gv5Otq5|9n`w8=B}0LA%Equ*Z$h8#dm2Hwtf8GWtQlE($@Kb^ zHre~aq_E7wcNv#;^;y+Rg}u?5J%~{H=NAAW0D;74;;~9-q87o>*>^3=D;?OB-3pL# zwOetIsg;ZfihX{#H0VfSB1*jN-W*YKHG6hXOQX9RF0wa|Pv%v#AGN^#8gJ;<$T|Vx z1Bq8n^NJ(2b7sv8HfMe~%($)c&xBUfY$cMrCF-CWx-b(TE2ed q$N@Zm*){4~Pr9+qh}B4ED@xYe@abhZV+#AW^2AV(xF6*x7yJdCpjny# literal 0 HcmV?d00001 diff --git a/assets/cn/retire/TEMPLATE_BOGUE.png b/assets/cn/retire/TEMPLATE_BOGUE.png index fd2125c99d8bf59015c90ed9d1073a3573489502..3eaaf159af748fbc22cac1edd99a6f85b4d4b91a 100644 GIT binary patch literal 1993 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 F2>?25zxx0H literal 0 HcmV?d00001 diff --git a/assets/cn/retire/TEMPLATE_DOWNES_1.png b/assets/cn/retire/TEMPLATE_DOWNES_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc67cb94ba09e4e4f088c342c5ce99337a85f91 GIT binary patch literal 1622 zcmbu9do|NDL3_n-GY=ktEw?>W!2^=fMZkg&HU+X5g6 z03cMr)+mq)Aa{g9A%)OTiHZmdi-<~#i9;p5PfAt_TKg1K6y%_d*TCU4@TPjYdZr`` z3zCP6M`UCH_7PJZNpdkublKxy!x9v5u=&y-fPVmVvpSW@}4kO zTS-`tT3umU9?xghh+=Qd;#>8Jp(4N$47_ zk5^GPZHW-!*G>-5#sm`bEE*5^xTn}RKfgl>@439{Da^rBZsoh2d2Pdfn=3JGFh$j# zaL8%Pb}h=xJ?lPAp?WoIMa!$SSLj7r9_g_E$ef?XolP2Z@Y7s=9|3x-uWc~%35R?O zwHx&Xrc=-r1pX9uK8V6yb(-U>Gqr1rSaB`=vKD)bZ#q@VP%bP50LG0?hlgrPezZsEC$;(X7v^zLbUILUAOeKLVaVO=Ko}fAU?f#=cxwSEm#AE6 zL)X(u$$`pyIu5KeeEx8mp2G(F9*}`OIN#LfsyI&Ek<5da}c%s62r{PExgx zhVAo_62X7kt6k0?#Ek1^qsV=HuSo4q(*S1AIp2ecEG0CVp;21S;-!IB`Y+lXV0LrZ zfQB-8o{3R3Jq?Y@N(nUjsnfHR+@KT?9dh{fUmrqOpRfjLx24I<{HjLQA61|%yV3iV zm6Ke-7*(f~`^bjWa1Gm({9`e%^pWUeP|f$1<&?QGVJ7h+$JMJ%Kk@`CUafXb&+NfF z9fRXkoj9JopPXji#oB8X>M;bnCeUjrCNVPO^G8E5ps)SUxZCx7=VxUZ zA3{Cv=bL(6Cw4QsiMSY^U5h;Sm&3mSDWI7SkImr{|i#;Fo_ zdL0BUfiR_O2`a`Dc5AExr+D6oqC|s5cIB@W?+kU)vNf%E)Nr!I#_y$iBxk>$cGY)qgaHxbG<&f@Z=iB=IZJDLjF-5 z#mqkRSVgvpqSg&}8v|k2!7EH6#`@^cH=`h8dkpLfgaL32LK5?otVoPoH{MKhXQm{X~)9GySwBDE}IuDdrha3 zHZxBvIzH*}p~t0Xo``pB-+Rkq#_yLIE-sX*l`f86e2g@2R^n1JBWC6@}tI)+AV z%hFZuAx?#Ga?21|r9u)rzv}dy=lpg4IG^|X{pb6~`@Wy=^SrO3OECZ-*D>4~00aU6 z5DY%Eq-*f`Va z&RaHZ2@TDJ{9gh^HGonD%zGu%Fo1u5?BcEZv{|M2?8j87l0x`T_Mu!DN}lfA3a*@jo3uJefh|m=@OQYPrY{z zxdCo4mNgNBA+8wkH^-`?g&C`xj38y?DL2?>>5%n(7!Kb9exo_Zqu#T>xH_1sP%47 z!2+-4Ya_){*4&AWJ72rM(H}YEK|>8C(j$#fnw3HgUuM4vj=C;qGm=UlRmF?7jML}d2&Vh)2L(#EmQ?hFG8Xuh zdwLrzxVSe(@yVK%!rb)eMB3eSSF+QjlsxTg7l!RfDkx>{zdGymf*h67kTiF&$l~!Y z9ZsfRT;mI`_U4a$dH%KdMd_EZR~oFK9MQAYS$^>w$O~Er3$9H``4!tz{Z^am4kF9o z^Gsp4PbnrlXSS*M$0Z`mQQqnE+#`c6F|LnheW!*J(f1$v0Ga1C1@7d zF4KG&dkgN^cRIY7RqdhECqB*D5Pf09!3~(#`{Ux*OGn5N1yOQ4juA<0k*O3Uk0V6T2*R zToB=-Ucq|sut@zzVwKZtB8hw&YpY*+SFW329Z7yRTE)))oVzE=c-%F`+WZ57BLfNM z5o7(Ola!T`ZI43pMsF%7>0hgCgx9nMyV69?lX-QrH5gm_fzQOP!mY_A7nYOg8GwCZ zf2Io0`$M!df7Xs6HA8on>>|L791ex&_3w`9m8Hy>qKKmnHnMoyDG5TY{(Qj|JvFU8 z8X@y^iHEdD6jZQ&k*8a^p6dGLAJ2v}hay9#`s%Xq{P2Or+EKIm*S1u;oUg@RYK~L@ zy+^)6zIe_RN|>S-H4O74RcI4jax7vc`lhx}6}jQH%_aG6_#25$O5HQ>%bDizIHhFZi)dZI!b{fL%lGq@b zLb0r|B0SnyvLYMB=A|WdKBj9u5q0}1Q{oGW0n;(`G*{1zLaW)}l3~G;sDRq_3=CnR zF6~gpRuZ-K9M>wC8<*0;PiF38C!Z^G0R7-m0PMS?e++@`gHl4{DM$jw(doM(ur?il zPmOu)ake?{X_dK#T_eRY=%*fj)VP)qFSCy#;l3Cb{|>dRolC7HZLbC6A%m*<0dz6k zy}9CW<}#^@>bs+X))t5*+iy}3+-KT^PXn)7TV5U&iYJ1dg1d57$ED+_nXPt1=geh+ i+01>p3wV7OoYCDm-IeyKxni?}I?uIf(+duY?!N$Qxymm9 literal 0 HcmV?d00001 diff --git a/assets/cn/retire/TEMPLATE_FOOTE.png b/assets/cn/retire/TEMPLATE_FOOTE.png new file mode 100644 index 0000000000000000000000000000000000000000..47ce0006f4497d90313780e429c852e4471c9e3b GIT binary patch literal 1746 zcmbu9XH?Ty7{>qqY<3nUARI_SBBNm>mWF@<6q%)Arh?@ZMX>@Zdsr+8C>TLmp~guK zLqIgt#Yh!HK|nEJKmq|o3L;dIQ4q1325CM0-uJopocrDnzw_LC&ig3k$}s@#<>u)I zfFJ;XDgjCbkPRT#3yDOisjH-=siC2%h1b?m32%)145wPg8;Be9Roj+IB2jIb)--FT z>*md_Tt9A1Oey$(0ZIvgK>_B#7AS}TAQ%ve0hPZ21^@tot~vcw2qY8+M?sWB0BZfd znu_Z@S*HCfGrY1{{k`kyl1=hQ8|Hm@r8nTBHzSJ%6Z`*o$Yee8KblR8{gz_W>vEDU z-BOjVg6o58@K0pb0SX5pFyJE_f>!mUzjmL%=A-g8M(K9f8ri#CCkLv}4Afibt=KPjgt4FEb(6Kw<)J`X#C{WZMg1u9%%DypD$4V;O?=cr%kv` zqj}fLI09i_!5$ZW0z2Hky(VSzcxK4yjj0nuA9$v|YN=nR7M~2cp?EBdx~(Xf+&AX2 zIByc~^h*Su41EcPl)d4g%7&3({8k3eupyBQ}6aE^Md z;WeI6%G&Os-#!}Gl~(MKV5MEAnb1!!WQij+PyFGgbNs&TN`B1E<%?-~*KVopz(VZX zEDj0S?mx4Hns{^^n-x7a?L8Gt4yci}ItI@1xub32OKP--V=LH1T1rKuiywVgvG`0- zc1G`gj;);23U9i7vSJKQ_t;g(Cx4z~#kiSXJ|YU87j{zMphn zybpO9KT^X^R|2*|8TV=JWp;@5yn$*EDXKhzKma%l`fpT#5C8*(p|Lok3(1zwz?H&@wBj9{a2UtfGOZXv|j_bkEFhWE_BOzZd2 zaL2pE(WFe)@cthJ^$U(omoMDL3{(|`il<}tjqiV7DE2v6A2Be9dv0=3W#4SgzADz> z@c-C{VqjRb$~zo~*Cmn}oBU$eV`}XMGOYF1)hxS)(8V6sV$RX0@Qt3KZDg{&6GJTUlbNm3Wkji|N@dk`G`7B?0H2tpPnSG}b+YL8Q;2KBq^(uDKyzlPg4_8AIo sg2K@df_Y?+;E7>y6%{ATm^N@qn;Y%qq?~yz+LO*x0v$gzq$>yi2Aj^kng9R* literal 0 HcmV?d00001 diff --git a/assets/cn/retire/TEMPLATE_HERMES.png b/assets/cn/retire/TEMPLATE_HERMES.png index a09399356d52dae0c9bd4d2ebe0994b0b9620afd..30ac15d94c4a9d0192a33d318c376652703786f2 100644 GIT binary patch literal 2539 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 diff --git a/assets/cn/retire/TEMPLATE_LANGLEY.png b/assets/cn/retire/TEMPLATE_LANGLEY.png index 8fb671a163bd6c332c6e574a1bf54a3f0757e475..6c15ecdf976df520da003c677e2da0921dab5782 100644 GIT binary patch literal 2417 zcmV-%36A!OP)Px%RZvV+Md$6<-R{o+^UlWO)?R&jAV)`Wn2u$GQK|$oJF3|J~02=hpxK z=lAE<|MS-W@6P?_#`oRC@7cfa)4$`-z23&Q*1W9GwWZa;waTfO-ngO5sD$_Q@Bi=K z|MTbn_vi2K-sj`qxw5s_($l-Zy58Q=`1beh=HlVq-v9gm@9ymX`}hC<|NsB@|Nrm* z`|tnz=l}fP|M%Yi^WOjO*8l6)|Le~G=g$A*&i~xR?8T_>&$RaA&as1bmt0TKn~eYK z-l2+jx|xL2x0>e8wBE<5&$q3!ot~$Xi^i_3$+Wij>FNLV@Bi=T>Dtiu@80U;*7x)0 z%*edf&cdRcnx&U9b&dRT>t(B6PfPaRChm>!3d1Y{GCMYQ>3<*OiCWvowduw<~ zZF4zcb5BlHz9JHw4hmWj4RaY4oI*4I#h>AceBz&y(20Eaq@MATkjasR;k>ibwY<-) zxXGido`{LkyuQ}O!o91Z#+p{}Eux3#DW6b}w1B`!=*DN0H`Sz$O@S~*oxD?>vXJ3cW}Q$l27Ol@mI zWotrbb2(^qFk^KwUu!vJYdBwHEm>ttcY1e#c-Gg`xwx}zW?)xdV?0n(E;utySyeqw zMu3rppt7W>!?L={zK*G$iGOpJe}+9hJ&K``?f2*2?%iIcFSP&w2Fgi9K~#9!P0xF5 z)%6|5@%QKZ`<>IC)6#N^&?-iOmNE;cP(Vc3XyS+$5HBb(p(2~tIGx!Rb#95n3>7c` zIB(N(nPj@KO_@%G;f7OT<9bS4s-?8xP=>UEZE5M{^qlWA2?~4t_sJ*ElRWk_?5G=E zy%9VX9lsUxyU%l&IPK)aasNiuM@F*f>7Z(;>rj}4;9xMxUJi2|`ofjW&jZZK(%(Z? zZ5YOBU#ws7%hW4vhbZWDs;g`DzP_PBrY8Rf$x%{Oo!#}pnY@Z~x=00Op&6yFVt^?se+$M87 zK52x1KKq248l^;dD5tgMM?W6p8FTceo5nA$nYa4^4^)%M`V>sCfx%foLGXRqs?C?J zjM}xa-Fy({c&JJhgSszWdudH?I||TjZBUcZC5@vA%G;`jwFaX1vGq%x*)Cn5Ss$6S z(|m=bh5&H!`aj*@BZPsyy(@(=+%6JOzJD54HWr?VFU6&*#hQgTJhR$QD0fIk7X0Kp z+V*4d{HEMD&(B{VkHPT$_=<{fI^8Lwr=o8ixEC8MbYH=4L}Xtdlg+%t6r@hQYB!(! zVDtvxRAuJPf}+Ep4-E}L%AqVq#A=$eP(jnYx?n4+MvY1f@rQ zVotRnEQ#AU+3Vt6<@=VJ&9b+hR)piyJv0kM`P@(1oRl4y*}jvq{EsgLT)gG}Y@PKM z!W7eonzL!=<@I-udoYE|{q>WXbZb=(V!{Mjs0@HCcPG$02Ef;sY*{g_)R&c+b?^Le z&+=`)opMqTzWXaJ|H0ZfF36phYN^N@W3MFwl{IPVSO72(W%ggaByEL_`ps+EJoVH7%^$R4Sl6f-cB zVF2XpDOw)A;k~N{9k6!vg2LkB;+d+i+`Oi9^SFwy4*>YN-DPemLVyrDg+oPmoRGgN zB4-#jm|C}P-Qq2?w*0FvH1ozcUbGjUf1VaNQve_=cW~(4w@&=oIU+2xnsY93#wL=J zx9@E-0Fl6b$L2>^>Pi=Mm4)U$SxlY#s@^NZ%n3rHp>Nl0Mu$KL`^ z)bcHLbaW_~aq!E|xASbZHaGw;v?v9V1cG)r4#wE510(@ z0Z><8q|*m}W)}b+PF(z5%b111oiAkqcdOG$Jdc}oe_{7b1#}9hsqoxx7mh6c6aXpP z|KJ=A6&trK=^G3|AzUX@fMP`*d5=D9LVO!{V4N||u8AJajh{S5xaKxFsQJjwIkD+# zR%fE1^r-mY4b!EuP@jNrqk;g4+1M*JKvy(V(C0EijPBbM_Obw$tO1DH8sLa_Jdtcm~_{`|E7!!TJ-UHZZ-Hmf$dSON700000NkvXXu0mjfVP^id literal 20079 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 z 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 LNkvXXu0mjfr|vrU diff --git a/assets/en/retire/TEMPLATE_AULICK.png b/assets/en/retire/TEMPLATE_AULICK.png new file mode 100644 index 0000000000000000000000000000000000000000..a48dd95422e675ac0b091032be76f4c986d707c4 GIT binary patch literal 1486 zcmbu9do+}39LL}Ho#7=$Ge$}b&5%nXGefKr$|Y=ao!W$^m~=*nV{%z*+nl2t;~vJP zQgVr0ikjLeF(KmOMz-MZ(!$`A~$LJ%tuK`62}ZC;phda0S4HmF~bGPZB~fg!bli1ScwX5_$A;Z2$| ztYBH76*Gc}6)CNC1wse~4x_1zcg7OW?DeB+5qx2^QS7;#zlR1LfrnIAnUncLve&q1 z*qB#qQlfXTIr?^CoChf8$Z#hDL%MzHy$8P*m-I@+A&}ElQR4bI(FDCJsm+$R7^05l zdg%ZYmvzjz(H0#6*t?Bqsoyhb!Xmzg#18I3aa)Et?=0hYnyW^eFsWIYGk#A>7_%(T zCd>rp4rQl(OrL*eGTEhExGCRY4j1O8ne3+{$)DJkpp=+Uur8%t${W!Q?TTcT#V&qv zM~u7Vj+TD2d%u3Xn@YK3PMw{8>7PNQ^6K2iMH$XtC)?pq4ytWY#BctUfs_OGW1pJ`>vx<#+D*J*EBoF1pFL~d{i&)acGa~_VKN= zVK3fF&l|vFay(RDjGhyg(RgV;$+I2LjH&m*X+(_;lQtGhU6EEIBAq_-5X&6(DiB~o>{dVZrs#(d69w%0-$nV;x>3R6J+2N$G z_nNhS3(@+(VgfUYcaK-(d`16>A_!p+nn*kvOCXY**Ww5&-ul7oPdN0G23G`Ek(y*z zr?@b@!y#6sSxLy=`Gv5Otq5|9n`w8=B}0LA%Equ*Z$h8#dm2Hwtf8GWtQlE($@Kb^ zHre~aq_E7wcNv#;^;y+Rg}u?5J%~{H=NAAW0D;74;;~9-q87o>*>^3=D;?OB-3pL# zwOetIsg;ZfihX{#H0VfSB1*jN-W*YKHG6hXOQX9RF0wa|Pv%v#AGN^#8gJ;<$T|Vx z1Bq8n^NJ(2b7sv8HfMe~%($)c&xBUfY$cMrCF-CWx-b(TE2ed q$N@Zm*){4~Pr9+qh}B4ED@xYe@abhZV+#AW^2AV(xF6*x7yJdCpjny# literal 0 HcmV?d00001 diff --git a/assets/en/retire/TEMPLATE_BOGUE.png b/assets/en/retire/TEMPLATE_BOGUE.png index fd2125c99d8bf59015c90ed9d1073a3573489502..3eaaf159af748fbc22cac1edd99a6f85b4d4b91a 100644 GIT binary patch literal 1993 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 F2>?25zxx0H literal 0 HcmV?d00001 diff --git a/assets/en/retire/TEMPLATE_DOWNES_1.png b/assets/en/retire/TEMPLATE_DOWNES_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc67cb94ba09e4e4f088c342c5ce99337a85f91 GIT binary patch literal 1622 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 literal 0 HcmV?d00001 diff --git a/assets/en/retire/TEMPLATE_FOOTE.png b/assets/en/retire/TEMPLATE_FOOTE.png new file mode 100644 index 0000000000000000000000000000000000000000..47ce0006f4497d90313780e429c852e4471c9e3b GIT binary patch literal 1746 zcmbu9XH?Ty7{>qqY<3nUARI_SBBNm>mWF@<6q%)Arh?@ZMX>@Zdsr+8C>TLmp~guK zLqIgt#Yh!HK|nEJKmq|o3L;dIQ4q1325CM0-uJopocrDnzw_LC&ig3k$}s@#<>u)I zfFJ;XDgjCbkPRT#3yDOisjH-=siC2%h1b?m32%)145wPg8;Be9Roj+IB2jIb)--FT z>*md_Tt9A1Oey$(0ZIvgK>_B#7AS}TAQ%ve0hPZ21^@tot~vcw2qY8+M?sWB0BZfd znu_Z@S*HCfGrY1{{k`kyl1=hQ8|Hm@r8nTBHzSJ%6Z`*o$Yee8KblR8{gz_W>vEDU z-BOjVg6o58@K0pb0SX5pFyJE_f>!mUzjmL%=A-g8M(K9f8ri#CCkLv}4Afibt=KPjgt4FEb(6Kw<)J`X#C{WZMg1u9%%DypD$4V;O?=cr%kv` zqj}fLI09i_!5$ZW0z2Hky(VSzcxK4yjj0nuA9$v|YN=nR7M~2cp?EBdx~(Xf+&AX2 zIByc~^h*Su41EcPl)d4g%7&3({8k3eupyBQ}6aE^Md z;WeI6%G&Os-#!}Gl~(MKV5MEAnb1!!WQij+PyFGgbNs&TN`B1E<%?-~*KVopz(VZX zEDj0S?mx4Hns{^^n-x7a?L8Gt4yci}ItI@1xub32OKP--V=LH1T1rKuiywVgvG`0- zc1G`gj;);23U9i7vSJKQ_t;g(Cx4z~#kiSXJ|YU87j{zMphn zybpO9KT^X^R|2*|8TV=JWp;@5yn$*EDXKhzKma%l`fpT#5C8*(p|Lok3(1zwz?H&@wBj9{a2UtfGOZXv|j_bkEFhWE_BOzZd2 zaL2pE(WFe)@cthJ^$U(omoMDL3{(|`il<}tjqiV7DE2v6A2Be9dv0=3W#4SgzADz> z@c-C{VqjRb$~zo~*Cmn}oBU$eV`}XMGOYF1)hxS)(8V6sV$RX0@Qt3KZDg{&6GJTUlbNm3Wkji|N@dk`G`7B?0H2tpPnSG}b+YL8Q;2KBq^(uDKyzlPg4_8AIo sg2K@df_Y?+;E7>y6%{ATm^N@qn;Y%qq?~yz+LO*x0v$gzq$>yi2Aj^kng9R* literal 0 HcmV?d00001 diff --git a/assets/en/retire/TEMPLATE_HERMES.png b/assets/en/retire/TEMPLATE_HERMES.png index a09399356d52dae0c9bd4d2ebe0994b0b9620afd..30ac15d94c4a9d0192a33d318c376652703786f2 100644 GIT binary patch literal 2539 zcmV{q200001b5ch_0Itp) z=>Px$l~7DnMgQ~O|LE5L_~+-_&hO*a|LfkhyT$#{d8Sdxnhv{O>6j72MCg#VQnsQ*vw41Drc=zz#|Ifbn z_2;s-#+aR{DIqA!zObjMvggaR|JKg7ppB@Zp+GDtwUmLitfi=xic=OY*`ba1)4g6F zIn11kteuc@ZE=DWI);ms-m$0W!?N0{ot==8Sxij5hIec;Iq&S==(ncytfTnk%SSy% z!kT>NPc4gEUC9YJV~{K-9#@>(klo z=I7tfqi{`5{>SEfQ)Bb3x~zSV+m^Kd`rg95zi0q)n7Mt9Dw=?JQcv52NW56E>ynOj`VL?wg9HiZr+smKZ z0_*DwFa0dLH$^I5&T07|<04Jd9H-G}-oQVIRYTJ)c47PX&iz@o<|zcun*hC3Aw5G7 z1UOR^YfI=Mem1!`g*kl;J92;l=LDPxt-&pIVk;*!HI|CX|S&4i1iH-~fb}X&P6&{&cIEx@~x}Sx>rT53vhS2Oz&r>yJ*M$qm~& zn`He9QJWrh$sty;7)EW3gD{+(4TmZF=QGdQTo#PQ*RNmi zoZam7EIrX|hQniia&R2yVhqYUg9*2*JNM&rcCPD227yj6&PnFBZnD|8H!x#cK*E-aB*6n^g+$E2 z82>ouCITgVIH8R_rqhRa;5@}-f{k~IC`BR9 zBfEr@=kw2>U+%YPQg!SS!_gXkfv&nSu@?9NaqW`~IhiX@#0IO-?7 z2|}LGCq}`Fn7z1}q3L|V>u`uM3Xs8Egcd42F({!O1-dd$Cc)VwCN&jx+hiYtXmAZ> z#`DXUCSDUF2H!*pjBQS#BL|vk39ViY+yic4w{uQAXBq^yEh1Pq5y^_fF)-3fYFWm7 zc48O=MfK?4I?zrxtDhP|D2lR-;$s{zmTa=p_!~j+r4gf5BSx%NjxMY$R~ZEZgi=F7 zo*Wb)H2|Tg*2~ltLMC~WAV@U6D_r$b$emU4iXRmAFeFw>tJa4Mv zV#K7R<3(gesk$v843@~ZGC4VOtEkM#L8#%QI+V~shyxalMoo@^WAuu0Bwh@*5W{z; zOIlWVYb3I{Vwfy+6@o;DH5ddVM-E7%Boc`}>lirvi73mroenswlapPSxD4;5SZZRz zQ0UoYS%xkcvmA_4!_lZ`L7hyp4~Lc%1Ocmma9y0H%bgA~vkE1|dRvqwsXl2iq-{rv z%cWj!zW#l*h7D(Yl1Mh0Us@v_r0Q4{m%O&U6EDV*j0&w3HVd~{MeI&amXrO{_LX|M z$@fogKZFjP5riQAKDWN48#uC3mIU8vF%Cf*jYh^`n1m+X>aNeyYej?UltGbs3aPOB zxs5&Y?{6%W(XIEx`6U~vu8mu>WRJu)TCGwk7(~V)P{}Z6m~3A;ef4lKSWX!V-*~vY zTlZ>z?a5&%^w&RY%+e96I;PzvCm-8b>y&H|a3GDD%<33OnReF~?ATHUKqZoLV+?_~ zM-KLB?X^TP%Y2^@tMrnSf-Kbm5-LbPfUO$@+3u& zqqv!nE#wPEo6#nLVVIST#_-&){a^87xnr@Ekm>0c!%SxkV>2&aw97|D*nf!O&aECv zN>wn5Eyb6ebqkvaQ&_bk+M-eM(|&G0UhH&QL6~bA$_%K+7%WobMK93bE>8{|gNUgR zhLNJL6;80d<&r2mQHELA%dM|PbD#G6+r@a$Rw{*9WPH?T#sF8&G+O`rxNS3xO~A{r zB?=~4zPe4#&DGIB*m50@CX=uBa=BOVCz;Fj%e_{y>_k!YVCYN_9Oy7Jt~$-a>KLs1 z*w*`k*xfv=y?vXqvf%@&m)_n0W0d}O%fiu}I!0k%pZbhv#wI2*8mOiGX~_fLzEZY9N)=LRB&g)yd97SJ4k$ zz4g$O)I*cq15H*944t*mji#X&RY4U}!6q3Ao9xwthKPl1;ua_g7f4_M3NVMbU1LTC2L4*%~@*_P`b#0j$00~-r z3FhgOeS&UoHUK!s_R*vv;uwOE`mJ4LA0q1v_uIX8df2?N$)pl9C&ruO&GBYk*8l@R z1~MSZnYsPyFh1`9*c*-7Xh_Vjxj2UT;LH8mSbN=aW-tSZV+=jpo8!g7aTa;zLhm`T zF*QizvXL@_RNJ=k#5YYdOae@xGsg)4AOQ%;oRAn-h!ckx&9!>us*1!i#MNELDCNq{ngWSj-btVl})wQkIJ?=(O7 zfJO=cGsn)Wbwi|(`Lg>}Bs4^)fZ)AaZ&oilj0$RvIybd9Ef|F@s3OF`9H~-eB~-0= z)Zm0d&k2y1QWubd64+c-?zjyvqSgv|ev5^~t9PBD2q17C2t`Dgzb}K znJ-@hKp@0`T&Bj%43H!lyD+B?01y#XiUclMq_cx6Nkm=eFV5t$Aq(m03PB*eh-Z!z zAVG4z*XyfV33_ede*i*4NFtaUmbt70zzMG!8O$8Re5V8YYMnR%AR&kSo0*4KAx(S* z^PWHRDzO$L#z2)uMmHPC!I_bn1ceyEeC7|Fvg z`xsJUfFKCxRNP`7<@hVZ?GQ;myM`o)h!)e(iq6oNk!*cNC%)n`1VPAYd3Hf^jW~A9 z2^k~?>2dB?TB+EFGYfW+3gwfWmR||x&ZF#%3^OtSx|5~EJkX7^1&*(hxac5!pa3CNb!rnJ%coa z1~fyy2BcyMlwGeBfg>NUX2%~<57fT|5A_ML+O3B*3GuqOjh6(NIPr85_X z4i#>S=$ZQ>vdfJT36er;r4sY1*-nCx!F@a@wU;b*jvvqHeKNHH5Msp3RhrT(jvrJQ ztu5u@!io>U4-^9C_F2(+8M;#CO5ZSeu^#hNi$QEP&3M|jF$Pi^01tb1IcZ5$?21}F&jtr}#2l9ZPGdsZ`Fy4mL+E~ES+2S!L@V#bT*YM~p&<+l4WT6I!{4>;!~p?dWcI#0qu*4e&$3CvIZGg4 zPL#r}!+S{p;@l2nE_!1{CS+dP^K-vu?8#TW;@`g@wd z006sT0i?uynN7D!++hOCHJhul;y}F!AuN?71FsFzBqwAx>z4_KeBsZ0b{=9yR%A5S zn_@ruSqL#OCuZh;RZdaj#s1~tb%7jOW>@x%FG!I_)`yn z1nUfz3YA5rP^m%)5=4b51ceYo=eds@J(wv&1K_}X-nyXjevJSorHPpHaH@s910n!Q zP!KvW{8z1O+Ykc;s3KV`E%AG~7V{ei1elqq{4j+OK>!9=hG;4JB}gtECNLOl00BZv zNcVW6N2X{z63IWGQVwU_Ups4E7wY>g4%U6Yxr= zyL1qdl*BJC5iIie*#rXaxU;rF7yy|#3;cqIpOOIQq?KB^8D4Bm=7dU}f!Q#aS)pfh zmG(cMeEfHJC6V2*AN^GZQmN4$f$%!O(s&-{wS# zS+6)BWbO*1ozxslwh%lqu*ON0Fad~I0kb7mUK8TdVkbsmMW9nmG{>0Lsk$8~_9pNd}lf8Sx~#>7GB>zqM{c4B^Cm z_!l4l@HE`{{(JHHQHZRGh;*S50mumggD7ACG{_>KS7yD@D>Vya=NHLZ_ zm4Xa21vL>54)hF0~>q4gy@~iHKw8x>#ssH*A~* z7ZNH(v?5w)^@>IRuG|ST6G_fYf(C5>kdTph=Lhe(XGals_j_jY#boc(yCC}H=YK;; zo8PifihJhFs?ujjAm)6O2a9#(J|&okt1yGg8Yj*GBr^PIwDVJ`ks?oEPWcR1o)Nwm z1+f4!owqd$a!hVp&);ZJ||v!C1XTbtmdDy?c0J6}{~T}k8w zBxHgB)(Azd34kP39Afa#K}eJT@8H3M`(YLV#GI(ysxVr`=@X~k8ke9l=SUgFT0ax~ z7FZF1E1q6);zi)dlqHK)u#Q0>oH?F`@MT8mxi;jU9MZ-np#-fvTGLdIky#3)`PBu0 zlv$DjFbA0DIxT|)5-wOXfUIQdgRV4y=4KOP=uTYyEu%=Ok!m(wUNV%CAv2g$V31&45og9#Ek|~NmzE!vJc`!_b($HV_K6?Nelg&F zL_|WSxi7bXyM`zek*bv>l1fMCc;=BKfWybryT86WetZ1h58i_!rLDjC5qn2{KXGZRU9ey z08ywlAc7>)s)0xYOFB+mLf5h?F8f7}VkvO+)B)0UQPs8>D-tMKLMhK<`zvEEgi91a z@bvM1^LhgTsZ@%cs)$H&_RGV{r2wroa{vqpkRnv%P9rl@>PUc z(e_(gugEN!dvsX>Nh#I5v&)(5&NGOJOua(_@yV8ZG<98@a&jEEHg-0*#`}*CVo%%e z-q{{+5(W39MdrEXo)+^|XL%K7KM8E-H5 zLWTrEKrUQRfwU@|=I#nHu>a-s&bv%Rs?z?X)wwR-L}HfJc@_>a*4GJr8q8tl*mErs zn8)L0_ucmnp+viv{(ts?LRrV|3B}e zCS@BKqiW+S-g~xBTXyT6ZHN+t1qsyG>H+NvSeilyjH6L{AUaxmg~C7=X(ImNEJ}3 zxI-81L8Y{x!`lo{rDD&BVF^K%P&~)s&60xOI8q^#Qfl+|xP98TCyrByFG73l?tgkO z=J?}3|Fd&(AYJLX1zGI;vpEcB2MN@*2{HOv944E%`PQZsB+m&Ef&GL1qo+aF_TqWU z0T(|hW}?tq#Z|;pKvrsUFx}kRR!U3J6=cGUw4a4@hKsJ$wCDCo+q~Y8paEv1REMqQnR(@ScbyY|2 zi#J?;+0FdkZ|{Hq2Op5CxsOz72#^ScGy^FC&O9EE+v(I^wpd8bBx1F z-*=GaD-*hW6xKxOK#vr^VDy1O z^HdZyIhgLgUpX*FyH?D0<}rp&!NRRbyTI#U4nBOLQ(=ml87dsPv*&543MeM zR}%QnPao}TrR{Y~YwG=X_1+f~2rcfRxWy3zBnBs2S&KRON&Qdfi$5A72(o7#@Yo33;Arp1a;CqaR#dF=3;ySwkcH@-b~ z$4;#q^cRF|28bXes>M$HT3e#P?L3#=tJ#=CG-x<&0#perXhlRI1;ip2hY-PB;uoks z%)C2pNf3t^nBRMM*BBFGh%cf)b^uIW14unHz&%HJ1{0B~&F1aR>Eru;7R!At%;EOf z(Fxph=ezE`@7$q^NZ_?q3r;C*tUU*Py3=s~^F8;p9ROM)=HzF-o?@!}e+GpB0Hgp=TdsEQtw3W@PF@aZXLsY;SEYu3ln&p)ZLO2r;(P z!;gRd(d3KC;qRuet=@?gFiJPpsx?WA2%vzAeE;EO|H}z;LM5rvu5GywD4-OP8QF1T zA+Z1G@b2H;)3tT(VyTcUX#QEAU1WE!ezKU-5K;sI6%B-5yb6iMfS2-#w;4*AGpaln zCTH#=G8AbNEylH?Z%5rf1jS?qK1 zRbs5nh_g8PV)EeE_m}ypa&h0J>_$UtdNDbS4odcB#;tQ$)UfPD%hvc2M8jixaa+cdrHY$ zHyhj7owv4&U?hSRBr96l_<8Q0WR87^F{+9nh%@{w3>h=?gXe`2i;M>kR}r`<<=L?zu~nNRnsZ#Bub*UGw&xA){-> zed5S_U+mdRDW&c0@d}C0CdV(ReCfy>nN_9u*l|TPS|s{0&m9~h_RiU66N2Jb)A;zP zeST!G*)UsZJeeY=vVMa_JCA4zlo~m$h=@WAfSi6g(G?-X4Cyb$a$n|t47N6rq%|_e$cldaCqHc7xV17j z1`=JEZE}I~%urbEz=X)^*-*w-9dl!PF)(K!DREm_QN=ikNXi;#w zC^gmxy-plRfs2!+v)B*??cG& z)gggHj&`fj^OE!8;HJ6r5n|Mp8dO#ZEfS&UP{@}dA#E)WzdSm6yeu!J34kHm&Mwd8+jRqnBOJ|Nma?VPY?((#u&_5ppAYZ{pV<2xU@qa0L4@x(6@8fi@* zweINg(Ffmu&#qfABPRk4`Bu!AL^p`I^R8`69V|n3y@JvbP#adRQC$GTa_5=jS4SyD zH6F`KS&4NGt+K$k>O#%o$Ya!e%8Mmjne4)5qSO zbZWiPTD4Ex^OPyJ9Z6)6U_rF3vtK3dWn`7O$ngRMX-M*M2pJL}(n@KibnGO$AO()5 zhmuTMoKO%zcYnS2qyP0zebb;{Y4DNL8CzHYoVu@$oO5nEC2P00w%Pm8Lta&?(kc4- zdIORSfRpb!e(DA}rnG83GuI={oc15Lfw`EyAd+IJ-z)cA>@QvE#ZKp*0S_6H!wX(N2OW?|GSY}4g=zKiwv>?_hy@(KGpZYRSHw&)wJ_c=!u9Q+bmbzquzFHG$ zs)%S_rm(O9lm|%nknm_PXt6K4q>)_1@FuNdqFG|`hJZVKliJ-TUkso)<&ymb0l{$))Z%c{|6tu|NZyx zyt&gpZT*S=<*)br%(ura0U!P!KOT=ayOX1o*{mCTvx!~j+9M|pv0=?f(-kUY9q5vw zv?_1-3f!^teNeTbiZ;ia;jNwaxA&d*^-YUDfh37kE5sPxi6cQqX{dtgFh?Y22f`FUR z!J|W^NmlCc(FED3%J>)-2}J;!*SGy?{P?dwzV{D%1uXZSXXd)LKl)F1KKS3>chh~+ zq$|zLr1W@e%e6<{b7yKpYwC>4nTI>+e3t-dP-Cnx$O?i;z^+^Uz4s^o*F7i6{`<`Z zV5DlPh`P@E&hs(wl6fIjuMl&ml>$L4MS?i;(POuI?+_rNiAZa6kwmXS6!}nw1SA(U z`Yf*z;i3z;{I-(zx>ZUQs&OB=kM`!aJJInp+BX_KQk&Nma?(_M@%i;6v{tgx%t^12 zUaO^mR`lVY|M15@`5}$SHjNo+0HhQu(n=bu6UqJQ)SY&7D3Z&4LLf5x3^N|vn`5(X zwW?)RFa<_tHPYj^cP5V}-7_~V$uhY>YNe?vc?uk23^8(I^dWQ(F)Dz--nqRm+Ii+~ zsXZUUQ6w&5&DS8nr9x^*+e%9)ZIS1ZL04WW8wSIRBrkqh3V8(qq>QPr+myMvVF9bh`c4t#5zlz5RoIjw|l?JYParT4^c@Ukbv!QY!VSecbLp+W+vs-6cV# zjA;=kBmsHl6|^C-lng6lz7C66T$-oHe$80(u+pTGmO9iK%9l~)~1ghnVZ*l?TrQmH{DO5W}{J~&iB5V(~E|T z9)_SLEFh$9Z2P!%Pmb)mVP;wsQ_@^$tPu-<*F3)`-uT&$ZF{d zUrMCc&M_}7U>$K81uxG~rs1_x>dwsW*a7g*Jp`ySBq+t;zB(-023TG~S897}3rO2< zHXr`^kC8dXsA^k+4y%?pXLio*eR1F3wD$Ez8x#BJpE<1Qows*wbBji*J9hD8se($s zJEE1_AwW=b!)lW5*!dG5`$QljQWcf1J*v{W(q`R~qVB}qGWxSW*_M?`C6#&})0*e} zek1?R2hS&P`FIIP!pqBRNKEm^hyHr#I?qb;jOjOf8f=t$Z|m0K!G3(=_=Sd~g%{2l zT5Ha**9<8gIYwbCp|RT=P9a4vw@2asxKguWYpZxf?*iyEqoc^W=DX!TW# z44yaFFvg$<sg7da=YWQo}fm&u$Msi)=*W1d;FZtJEoBQsCiVFfZHqm+rA2PafR zU!n6ja_N^)s3Rm*up?dk1^3i3E3I^xd7oYTwDkx31b81|>I9_TqcWk7S`H>e%!wGd zyou<-{{4F5u8x<>%79D871YA`uH^R*K6EM5=rZceNiYcGu|0Y+bqQeM zWGJH42hOEK$DF=7AtSzEcO13C?swl;>rLT)4B!!Q&kWES(TuvTtFONz-7%j@1YVKL zWUkf_Ku+;A-uu-(_uTDTOGNIOBV&!VcYpe$pZ)gGpZb+_&^ab`nf@1xL+ESL8dp9a zI=Frv$C5??W`O9&Q^%=;LG-K$|T5pe{gWHb$d&b zlmpZ~0B6n>MC6X$_FGns6a;O*ZGZR|pE(zaF!XZENH6$OzwEVgjaSz$UHJS8 zA%hchT4dp!e;HMuh1m#Kx!&jPc z+dX&T`La>aB0HjOJu_-!%z8}~+1DF2(x4^e#yyAA$S+wbqRjEx+14gGA*W@hrGk5v z>gJI_rI|UNv=4rD_uen>9X&n*kYcb`YfgwUde?F6in};|!~T~)-PwI-*Q_^T7D<3P z`P1&7LdaKrDX@f_QVcA-|K+|r8CKUc+x2KAPlpqjx#v)-?BQi z_do7^^s83V&=x}%ylF|TO9JDsBraW<*Ssy<bIkGV9i#xB{BUH3ASBdtXeq z-x}A7Ol{p0*StQasx~jo3B(f@ILHzP z&y0-Nhxpu6>EaCl6i+>G*wSyNti(be3^Npk7P6!wx@Ug!c>ld0yzgh;KW^m})a$ho z($qCF+8Jx5++&wQus3d*OzqRd@$K=>ot>Y3>Pk&v*Lh@Uy(F=E=b8=XO?~AcsVqku1BUwmDq>&s{Go;M9PBmYPXl^($F39%>53RgJ!_?! zH@61~Qx>7%Ub6^*DniL|&p@AI&maHoz4*lh0%}d)`c5;x*~D4ro`s{wt$Xf2`ENf| zwI0g+X5ODhoFo?9ytRG!`JSv)y>1SksgM5pFT*V8dQ***)j{BB2?K3gAIF&@ysPBmmNbW0Dgp(>|K;?^=@q$P{@0m-~}` zkBE@@@Wgk(;k4a(XBQcyP%BGyY`eoSi+tiY$73298Y%mx1-rX{`^%$~Bkm=4P88a$ zcJn$rRyNwdguWL>>3zLgkkmc*CQG%oxw*A%u36+%*9rpDfAmx-v#z*vG5GQA?ICxu z(rOI=)2PO*Q(DIi5-bTvPaSjA>tle4)UsVpQ67bj`ZR=Ag`9rX-v8AD@{zJEnUKEg zcHZ2YPNzgHGm@b9|M+M3{+4#$+{Oq1l%TD*b~r}wToB2WlAc+6=es*cUrr(X?mN3E z@wY*?{u_>X8saMa3Qj$zS&#q(nx+A$dA$aJ4EMY%&!=dgP3;W>QF<5`_cWOGTU2SD zb;Z;TJxigCvG;y?kFKim+dBgUo(F8Kr0Ntw;X00ebWh#>!G6i-EbAR(+3gBYf`jgIg(bSHvSxx%Ackg`goz~v4*sz0*Gf;P7 zY+bYp{*{=QU$BpUg}9tDoNM`+ZaCdrz7c zkAN728#5FUk-pZTGQMM7feNV4wEt+o>pX-`nVFOK9mim=8U>O*!rJiM$3Bu$n{RC& z{^q_R9G>{%eJE|Z5GMzRzx>Vgzx>G$zx^GXP94_BSZlW$2*eoJabRaFg*A(H4KeR; z#4pdt2YUI<=GXGB{wbt)CocA9o>dV~eLVIJXjAaMkj7eIQK5*g3)WhI6GyXdk--ca zNoG!&?Z}p%gTw5FWIz-780~mlDl>U_C@XGmGywJwT-!P|(zhCe4FBBQ8_mvm%+I_1 zy^pvL=p|W;({A_s--jSu8`LHcx+hLTGJ~W_8Gwn2sG_aC;^T!3GfqF zZ}=Cv)Zu3-dpVzP7)d6 z1>L#5D+%r-v`<_2%-Icd=iOWOhBbBVyLce>x8B^=0(+nC#TXRH$jLcptc|{tCsREh z1GuH=;E5|_;TK%8?(ToOXK&!ncQ%m$=I(KDCoasQ8IiS?Mp_}o7~NBUj=uB_`0pk3 zI-7}dajZm`;_OU||CE_S@Xwri!Q3Ynjk#vx3s!2dNy99be(;H-saK-K8KLJm^QEp8 z03e6PutdlR3@u4kRF6oF6bS}!=iQxhXC)%nykSjE4}S8q!-GkqGy}d5A@cScl1@Ac z;PDi|q-{Y2D#DW)K&86KAN_pKwVl$`o$~&dN51PeZT<0Iysuv01QDXEN1FRfy|izX z3BUiCpFW-jcjAU1rT{V$$M(xZFj1!QRpr>hTFj<_<044Xb)jC@{@CgDy0i!xaAteW42d>#6M_hPfBd0;JVh6}ic)6Z^R1hWB4y@b zP2b1FNsSC&A-tTYX60ZrQ3X1Au$#&|_&|SDKm4x^*B`DHJq44L>20^DYQ;Frk!PWM&?+f;a<`RHaL< zzggA_EMca_U}pFEzI!|keX=*Kd)hLyz1}oU6FX-}g29>HEXYd7c&20Ra87|mKj|TY zp6Qcc9ZkDhjY7F<^Tu`oQO;&;sbnAd*sO?z%+;hF?MoX*R4o z@eoTCE%xX-zhaPdckjG^|G$5N(?~fH;G=gj8dLkH?a^25;gfd%nR7Xe-`%Zmk6q^m z1{6ca)T`+rIaAj~BC3s1T3?Eu{XvGVDB_IdAt`y@ZqQsa;YkZYq-gqNs*N@y!R^p+}($Jlj9@K2rzo9GWQob2NrnR> z^Xk)ocp(`pT1fCP8`|Y*rQC`C>`#8^9!-oQWF!ux$aCC$YX<`3kx_!EX8^J1Up_wY z;P-2*fCR*zkDeWMvrtk`FS*0z+$4nLo_XFy{@+4AgswZM*21ahJ}Rk@L6S(2J9ay_ zx5HBpLHr{6)2^;-HL8an2#FlNUiB(Hm=<=!s;inam^r;<#i#|{|J%FNwpuAUOubL9kl+V}}#hG$p<{6eVz`6%kBBYq*#5r#y+`w@D18 zu=VtDB#qd4C>;F#Jz|!X3d~w-J`HAMOfx?Ge4>dqH!KVI;|>{}V0*I}pZX&X_j^x7 z5|TiSg=XWymn)(4d9P#|49A3w?!?Cv*OJmB^V%OkEYRvJ#`6ww%IsQ4YieN;%ZhxD zaO$Z7m=#gzoZT?7^O`1RwL(L2pQT7ZH&`PWF;3ejv zC;js4wOfhi+fi$GzmrGIg$-}86y7jG1T~YIT6Z#>=?@R=K zB`frj^td@U*>ziAtK(^G|L=PoW79OcBKO?Yb-n%8PP2Q*eRU*(@w!n0o7Pgs{{MJD zifU8ueX+;PYNYf?FD^u&vZw@N9s;R$T{r7S(HugVr&SCY!D8Wg{FBBv|6;}PUOvTf zxxQTtr97b&oEJZhh&YC$XWhWUs zJ(ngU$UueWTGQo7g2Ic~o%q5@IFZHe^qR}(YB6_a>!}jLQW`JozY~Fn@fu~;{G)-f#S@*?+nB|+>lb-KRrys?D zN~<+BhyuWMKCZBz6ktKVXLk}nXx?bdH6w+TLPEfhabLRq&-c5>)18~m-T(Tt@4tHo zFBA9S4{kq5rLe421^}bAl;E5SPz!*B41lcU!HL&asT&pm&bDM;X@AGaL$=(|vQq$D zyc2fQBV^Xr)=D?GHzyDG&DIW)WKM269b0Qgbv1L1VY zZlO7rR4!Vc3gC{t?~)p6qZJWJQJUAIxzX4SQ(G$qwa(eA7FYl9_OH^0gg@7H*KU}@ zX=_ZqP+VH8@FD^jztzZ^0B~X@hwZtN+_re6S=kqqa^j5Gg~TjJx;$n!cwb*nrm>`X z=Rbci{dCXm?Qh>`h=9yE@f~>5`!EYqX}V@Zh|EckbSctAhEhZ6FNWk4S}8Rq&TuE5 z1xn@D_U#4&wl=nD>XC8J+V=60d*=LU{Dae%1d2Vs`eALYKJnc1(j6i#1=XZBw>A?8 zUFjv#zmj2AUZrrS@IEs*54m3~KqJGm03h~JDYd<|bMF_Q?2NbTw|2PmZWbT7!~Gbk zRPk0Cm_LC_P>6vcNoZ{pGKUwDAbIgXs%3M_LTJPc^nCx}Wba^q_nqBDhMs%p+|gI9 zKk2;hR{Ed)A%_}i>f9>+AO)1tu60@$uc;tpY>aM7$t!c&s;K60Fo5Bi>%&Qih!YdA zsPZ8|&L42YJu9O6y4`!YcWd0ZK1?1>j=%u4s+HCNSdjO=q$fAlmaCLz$NUlmV!v(M1Z)8;LRi2|~u+r+fPc2i7Q48+*-y2$E9x{q2W;!9tKEH8RU*ZUPWw*K6l| zN}L3wL}>su{+0p&1`+uek=97B8|Gp-(~`JzhoZ|Jb0pS_!jJ^en&KBR^?^s~*4Fmq zS9>4*{AX=sQp${Mns@)?#O~CG7^NV4qgjxzL2zp;jyzf$5QE191200$FR-F=&SX))aZ*599le|Nszg! p{AnuZFQ2SF1z8G8ObcJ*{|B39gygSg&&mJ*002ovPDHLkV1n9z*){+G diff --git a/assets/en/retire/TEMPLATE_LANGLEY.png b/assets/en/retire/TEMPLATE_LANGLEY.png index 8fb671a163bd6c332c6e574a1bf54a3f0757e475..6c15ecdf976df520da003c677e2da0921dab5782 100644 GIT binary patch literal 2417 zcmV-%36A!OP)Px%RZvV+Md$6<-R{o+^UlWO)?R&jAV)`Wn2u$GQK|$oJF3|J~02=hpxK z=lAE<|MS-W@6P?_#`oRC@7cfa)4$`-z23&Q*1W9GwWZa;waTfO-ngO5sD$_Q@Bi=K z|MTbn_vi2K-sj`qxw5s_($l-Zy58Q=`1beh=HlVq-v9gm@9ymX`}hC<|NsB@|Nrm* z`|tnz=l}fP|M%Yi^WOjO*8l6)|Le~G=g$A*&i~xR?8T_>&$RaA&as1bmt0TKn~eYK z-l2+jx|xL2x0>e8wBE<5&$q3!ot~$Xi^i_3$+Wij>FNLV@Bi=T>Dtiu@80U;*7x)0 z%*edf&cdRcnx&U9b&dRT>t(B6PfPaRChm>!3d1Y{GCMYQ>3<*OiCWvowduw<~ zZF4zcb5BlHz9JHw4hmWj4RaY4oI*4I#h>AceBz&y(20Eaq@MATkjasR;k>ibwY<-) zxXGido`{LkyuQ}O!o91Z#+p{}Eux3#DW6b}w1B`!=*DN0H`Sz$O@S~*oxD?>vXJ3cW}Q$l27Ol@mI zWotrbb2(^qFk^KwUu!vJYdBwHEm>ttcY1e#c-Gg`xwx}zW?)xdV?0n(E;utySyeqw zMu3rppt7W>!?L={zK*G$iGOpJe}+9hJ&K``?f2*2?%iIcFSP&w2Fgi9K~#9!P0xF5 z)%6|5@%QKZ`<>IC)6#N^&?-iOmNE;cP(Vc3XyS+$5HBb(p(2~tIGx!Rb#95n3>7c` zIB(N(nPj@KO_@%G;f7OT<9bS4s-?8xP=>UEZE5M{^qlWA2?~4t_sJ*ElRWk_?5G=E zy%9VX9lsUxyU%l&IPK)aasNiuM@F*f>7Z(;>rj}4;9xMxUJi2|`ofjW&jZZK(%(Z? zZ5YOBU#ws7%hW4vhbZWDs;g`DzP_PBrY8Rf$x%{Oo!#}pnY@Z~x=00Op&6yFVt^?se+$M87 zK52x1KKq248l^;dD5tgMM?W6p8FTceo5nA$nYa4^4^)%M`V>sCfx%foLGXRqs?C?J zjM}xa-Fy({c&JJhgSszWdudH?I||TjZBUcZC5@vA%G;`jwFaX1vGq%x*)Cn5Ss$6S z(|m=bh5&H!`aj*@BZPsyy(@(=+%6JOzJD54HWr?VFU6&*#hQgTJhR$QD0fIk7X0Kp z+V*4d{HEMD&(B{VkHPT$_=<{fI^8Lwr=o8ixEC8MbYH=4L}Xtdlg+%t6r@hQYB!(! zVDtvxRAuJPf}+Ep4-E}L%AqVq#A=$eP(jnYx?n4+MvY1f@rQ zVotRnEQ#AU+3Vt6<@=VJ&9b+hR)piyJv0kM`P@(1oRl4y*}jvq{EsgLT)gG}Y@PKM z!W7eonzL!=<@I-udoYE|{q>WXbZb=(V!{Mjs0@HCcPG$02Ef;sY*{g_)R&c+b?^Le z&+=`)opMqTzWXaJ|H0ZfF36phYN^N@W3MFwl{IPVSO72(W%ggaByEL_`ps+EJoVH7%^$R4Sl6f-cB zVF2XpDOw)A;k~N{9k6!vg2LkB;+d+i+`Oi9^SFwy4*>YN-DPemLVyrDg+oPmoRGgN zB4-#jm|C}P-Qq2?w*0FvH1ozcUbGjUf1VaNQve_=cW~(4w@&=oIU+2xnsY93#wL=J zx9@E-0Fl6b$L2>^>Pi=Mm4)U$SxlY#s@^NZ%n3rHp>Nl0Mu$KL`^ z)bcHLbaW_~aq!E|xASbZHaGw;v?v9V1cG)r4#wE510(@ z0Z><8q|*m}W)}b+PF(z5%b111oiAkqcdOG$Jdc}oe_{7b1#}9hsqoxx7mh6c6aXpP z|KJ=A6&trK=^G3|AzUX@fMP`*d5=D9LVO!{V4N||u8AJajh{S5xaKxFsQJjwIkD+# zR%fE1^r-mY4b!EuP@jNrqk;g4+1M*JKvy(V(C0EijPBbM_Obw$tO1DH8sLa_Jdtcm~_{`|E7!!TJ-UHZZ-Hmf$dSON700000NkvXXu0mjfVP^id literal 20079 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 z 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 LNkvXXu0mjfr|vrU diff --git a/assets/jp/retire/TEMPLATE_AULICK.png b/assets/jp/retire/TEMPLATE_AULICK.png new file mode 100644 index 0000000000000000000000000000000000000000..a48dd95422e675ac0b091032be76f4c986d707c4 GIT binary patch literal 1486 zcmbu9do+}39LL}Ho#7=$Ge$}b&5%nXGefKr$|Y=ao!W$^m~=*nV{%z*+nl2t;~vJP zQgVr0ikjLeF(KmOMz-MZ(!$`A~$LJ%tuK`62}ZC;phda0S4HmF~bGPZB~fg!bli1ScwX5_$A;Z2$| ztYBH76*Gc}6)CNC1wse~4x_1zcg7OW?DeB+5qx2^QS7;#zlR1LfrnIAnUncLve&q1 z*qB#qQlfXTIr?^CoChf8$Z#hDL%MzHy$8P*m-I@+A&}ElQR4bI(FDCJsm+$R7^05l zdg%ZYmvzjz(H0#6*t?Bqsoyhb!Xmzg#18I3aa)Et?=0hYnyW^eFsWIYGk#A>7_%(T zCd>rp4rQl(OrL*eGTEhExGCRY4j1O8ne3+{$)DJkpp=+Uur8%t${W!Q?TTcT#V&qv zM~u7Vj+TD2d%u3Xn@YK3PMw{8>7PNQ^6K2iMH$XtC)?pq4ytWY#BctUfs_OGW1pJ`>vx<#+D*J*EBoF1pFL~d{i&)acGa~_VKN= zVK3fF&l|vFay(RDjGhyg(RgV;$+I2LjH&m*X+(_;lQtGhU6EEIBAq_-5X&6(DiB~o>{dVZrs#(d69w%0-$nV;x>3R6J+2N$G z_nNhS3(@+(VgfUYcaK-(d`16>A_!p+nn*kvOCXY**Ww5&-ul7oPdN0G23G`Ek(y*z zr?@b@!y#6sSxLy=`Gv5Otq5|9n`w8=B}0LA%Equ*Z$h8#dm2Hwtf8GWtQlE($@Kb^ zHre~aq_E7wcNv#;^;y+Rg}u?5J%~{H=NAAW0D;74;;~9-q87o>*>^3=D;?OB-3pL# zwOetIsg;ZfihX{#H0VfSB1*jN-W*YKHG6hXOQX9RF0wa|Pv%v#AGN^#8gJ;<$T|Vx z1Bq8n^NJ(2b7sv8HfMe~%($)c&xBUfY$cMrCF-CWx-b(TE2ed q$N@Zm*){4~Pr9+qh}B4ED@xYe@abhZV+#AW^2AV(xF6*x7yJdCpjny# literal 0 HcmV?d00001 diff --git a/assets/jp/retire/TEMPLATE_BOGUE.png b/assets/jp/retire/TEMPLATE_BOGUE.png index fd2125c99d8bf59015c90ed9d1073a3573489502..3eaaf159af748fbc22cac1edd99a6f85b4d4b91a 100644 GIT binary patch literal 1993 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 F2>?25zxx0H literal 0 HcmV?d00001 diff --git a/assets/jp/retire/TEMPLATE_DOWNES_1.png b/assets/jp/retire/TEMPLATE_DOWNES_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc67cb94ba09e4e4f088c342c5ce99337a85f91 GIT binary patch literal 1622 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 literal 0 HcmV?d00001 diff --git a/assets/jp/retire/TEMPLATE_FOOTE.png b/assets/jp/retire/TEMPLATE_FOOTE.png new file mode 100644 index 0000000000000000000000000000000000000000..47ce0006f4497d90313780e429c852e4471c9e3b GIT binary patch literal 1746 zcmbu9XH?Ty7{>qqY<3nUARI_SBBNm>mWF@<6q%)Arh?@ZMX>@Zdsr+8C>TLmp~guK zLqIgt#Yh!HK|nEJKmq|o3L;dIQ4q1325CM0-uJopocrDnzw_LC&ig3k$}s@#<>u)I zfFJ;XDgjCbkPRT#3yDOisjH-=siC2%h1b?m32%)145wPg8;Be9Roj+IB2jIb)--FT z>*md_Tt9A1Oey$(0ZIvgK>_B#7AS}TAQ%ve0hPZ21^@tot~vcw2qY8+M?sWB0BZfd znu_Z@S*HCfGrY1{{k`kyl1=hQ8|Hm@r8nTBHzSJ%6Z`*o$Yee8KblR8{gz_W>vEDU z-BOjVg6o58@K0pb0SX5pFyJE_f>!mUzjmL%=A-g8M(K9f8ri#CCkLv}4Afibt=KPjgt4FEb(6Kw<)J`X#C{WZMg1u9%%DypD$4V;O?=cr%kv` zqj}fLI09i_!5$ZW0z2Hky(VSzcxK4yjj0nuA9$v|YN=nR7M~2cp?EBdx~(Xf+&AX2 zIByc~^h*Su41EcPl)d4g%7&3({8k3eupyBQ}6aE^Md z;WeI6%G&Os-#!}Gl~(MKV5MEAnb1!!WQij+PyFGgbNs&TN`B1E<%?-~*KVopz(VZX zEDj0S?mx4Hns{^^n-x7a?L8Gt4yci}ItI@1xub32OKP--V=LH1T1rKuiywVgvG`0- zc1G`gj;);23U9i7vSJKQ_t;g(Cx4z~#kiSXJ|YU87j{zMphn zybpO9KT^X^R|2*|8TV=JWp;@5yn$*EDXKhzKma%l`fpT#5C8*(p|Lok3(1zwz?H&@wBj9{a2UtfGOZXv|j_bkEFhWE_BOzZd2 zaL2pE(WFe)@cthJ^$U(omoMDL3{(|`il<}tjqiV7DE2v6A2Be9dv0=3W#4SgzADz> z@c-C{VqjRb$~zo~*Cmn}oBU$eV`}XMGOYF1)hxS)(8V6sV$RX0@Qt3KZDg{&6GJTUlbNm3Wkji|N@dk`G`7B?0H2tpPnSG}b+YL8Q;2KBq^(uDKyzlPg4_8AIo sg2K@df_Y?+;E7>y6%{ATm^N@qn;Y%qq?~yz+LO*x0v$gzq$>yi2Aj^kng9R* literal 0 HcmV?d00001 diff --git a/assets/jp/retire/TEMPLATE_HERMES.png b/assets/jp/retire/TEMPLATE_HERMES.png index a09399356d52dae0c9bd4d2ebe0994b0b9620afd..30ac15d94c4a9d0192a33d318c376652703786f2 100644 GIT binary patch literal 2539 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 diff --git a/assets/jp/retire/TEMPLATE_LANGLEY.png b/assets/jp/retire/TEMPLATE_LANGLEY.png index 8fb671a163bd6c332c6e574a1bf54a3f0757e475..6c15ecdf976df520da003c677e2da0921dab5782 100644 GIT binary patch literal 2417 zcmV-%36A!OP)Px%RZvV+Md$6<-R{o+^UlWO)?R&jAV)`Wn2u$GQK|$oJF3|J~02=hpxK z=lAE<|MS-W@6P?_#`oRC@7cfa)4$`-z23&Q*1W9GwWZa;waTfO-ngO5sD$_Q@Bi=K z|MTbn_vi2K-sj`qxw5s_($l-Zy58Q=`1beh=HlVq-v9gm@9ymX`}hC<|NsB@|Nrm* z`|tnz=l}fP|M%Yi^WOjO*8l6)|Le~G=g$A*&i~xR?8T_>&$RaA&as1bmt0TKn~eYK z-l2+jx|xL2x0>e8wBE<5&$q3!ot~$Xi^i_3$+Wij>FNLV@Bi=T>Dtiu@80U;*7x)0 z%*edf&cdRcnx&U9b&dRT>t(B6PfPaRChm>!3d1Y{GCMYQ>3<*OiCWvowduw<~ zZF4zcb5BlHz9JHw4hmWj4RaY4oI*4I#h>AceBz&y(20Eaq@MATkjasR;k>ibwY<-) zxXGido`{LkyuQ}O!o91Z#+p{}Eux3#DW6b}w1B`!=*DN0H`Sz$O@S~*oxD?>vXJ3cW}Q$l27Ol@mI zWotrbb2(^qFk^KwUu!vJYdBwHEm>ttcY1e#c-Gg`xwx}zW?)xdV?0n(E;utySyeqw zMu3rppt7W>!?L={zK*G$iGOpJe}+9hJ&K``?f2*2?%iIcFSP&w2Fgi9K~#9!P0xF5 z)%6|5@%QKZ`<>IC)6#N^&?-iOmNE;cP(Vc3XyS+$5HBb(p(2~tIGx!Rb#95n3>7c` zIB(N(nPj@KO_@%G;f7OT<9bS4s-?8xP=>UEZE5M{^qlWA2?~4t_sJ*ElRWk_?5G=E zy%9VX9lsUxyU%l&IPK)aasNiuM@F*f>7Z(;>rj}4;9xMxUJi2|`ofjW&jZZK(%(Z? zZ5YOBU#ws7%hW4vhbZWDs;g`DzP_PBrY8Rf$x%{Oo!#}pnY@Z~x=00Op&6yFVt^?se+$M87 zK52x1KKq248l^;dD5tgMM?W6p8FTceo5nA$nYa4^4^)%M`V>sCfx%foLGXRqs?C?J zjM}xa-Fy({c&JJhgSszWdudH?I||TjZBUcZC5@vA%G;`jwFaX1vGq%x*)Cn5Ss$6S z(|m=bh5&H!`aj*@BZPsyy(@(=+%6JOzJD54HWr?VFU6&*#hQgTJhR$QD0fIk7X0Kp z+V*4d{HEMD&(B{VkHPT$_=<{fI^8Lwr=o8ixEC8MbYH=4L}Xtdlg+%t6r@hQYB!(! zVDtvxRAuJPf}+Ep4-E}L%AqVq#A=$eP(jnYx?n4+MvY1f@rQ zVotRnEQ#AU+3Vt6<@=VJ&9b+hR)piyJv0kM`P@(1oRl4y*}jvq{EsgLT)gG}Y@PKM z!W7eonzL!=<@I-udoYE|{q>WXbZb=(V!{Mjs0@HCcPG$02Ef;sY*{g_)R&c+b?^Le z&+=`)opMqTzWXaJ|H0ZfF36phYN^N@W3MFwl{IPVSO72(W%ggaByEL_`ps+EJoVH7%^$R4Sl6f-cB zVF2XpDOw)A;k~N{9k6!vg2LkB;+d+i+`Oi9^SFwy4*>YN-DPemLVyrDg+oPmoRGgN zB4-#jm|C}P-Qq2?w*0FvH1ozcUbGjUf1VaNQve_=cW~(4w@&=oIU+2xnsY93#wL=J zx9@E-0Fl6b$L2>^>Pi=Mm4)U$SxlY#s@^NZ%n3rHp>Nl0Mu$KL`^ z)bcHLbaW_~aq!E|xASbZHaGw;v?v9V1cG)r4#wE510(@ z0Z><8q|*m}W)}b+PF(z5%b111oiAkqcdOG$Jdc}oe_{7b1#}9hsqoxx7mh6c6aXpP z|KJ=A6&trK=^G3|AzUX@fMP`*d5=D9LVO!{V4N||u8AJajh{S5xaKxFsQJjwIkD+# zR%fE1^r-mY4b!EuP@jNrqk;g4+1M*JKvy(V(C0EijPBbM_Obw$tO1DH8sLa_Jdtcm~_{`|E7!!TJ-UHZZ-Hmf$dSON700000NkvXXu0mjfVP^id literal 20079 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 z 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 LNkvXXu0mjfr|vrU diff --git a/assets/tw/retire/TEMPLATE_AULICK.png b/assets/tw/retire/TEMPLATE_AULICK.png new file mode 100644 index 0000000000000000000000000000000000000000..a48dd95422e675ac0b091032be76f4c986d707c4 GIT binary patch literal 1486 zcmbu9do+}39LL}Ho#7=$Ge$}b&5%nXGefKr$|Y=ao!W$^m~=*nV{%z*+nl2t;~vJP zQgVr0ikjLeF(KmOMz-MZ(!$`A~$LJ%tuK`62}ZC;phda0S4HmF~bGPZB~fg!bli1ScwX5_$A;Z2$| ztYBH76*Gc}6)CNC1wse~4x_1zcg7OW?DeB+5qx2^QS7;#zlR1LfrnIAnUncLve&q1 z*qB#qQlfXTIr?^CoChf8$Z#hDL%MzHy$8P*m-I@+A&}ElQR4bI(FDCJsm+$R7^05l zdg%ZYmvzjz(H0#6*t?Bqsoyhb!Xmzg#18I3aa)Et?=0hYnyW^eFsWIYGk#A>7_%(T zCd>rp4rQl(OrL*eGTEhExGCRY4j1O8ne3+{$)DJkpp=+Uur8%t${W!Q?TTcT#V&qv zM~u7Vj+TD2d%u3Xn@YK3PMw{8>7PNQ^6K2iMH$XtC)?pq4ytWY#BctUfs_OGW1pJ`>vx<#+D*J*EBoF1pFL~d{i&)acGa~_VKN= zVK3fF&l|vFay(RDjGhyg(RgV;$+I2LjH&m*X+(_;lQtGhU6EEIBAq_-5X&6(DiB~o>{dVZrs#(d69w%0-$nV;x>3R6J+2N$G z_nNhS3(@+(VgfUYcaK-(d`16>A_!p+nn*kvOCXY**Ww5&-ul7oPdN0G23G`Ek(y*z zr?@b@!y#6sSxLy=`Gv5Otq5|9n`w8=B}0LA%Equ*Z$h8#dm2Hwtf8GWtQlE($@Kb^ zHre~aq_E7wcNv#;^;y+Rg}u?5J%~{H=NAAW0D;74;;~9-q87o>*>^3=D;?OB-3pL# zwOetIsg;ZfihX{#H0VfSB1*jN-W*YKHG6hXOQX9RF0wa|Pv%v#AGN^#8gJ;<$T|Vx z1Bq8n^NJ(2b7sv8HfMe~%($)c&xBUfY$cMrCF-CWx-b(TE2ed q$N@Zm*){4~Pr9+qh}B4ED@xYe@abhZV+#AW^2AV(xF6*x7yJdCpjny# literal 0 HcmV?d00001 diff --git a/assets/tw/retire/TEMPLATE_BOGUE.png b/assets/tw/retire/TEMPLATE_BOGUE.png index fd2125c99d8bf59015c90ed9d1073a3573489502..3eaaf159af748fbc22cac1edd99a6f85b4d4b91a 100644 GIT binary patch literal 1993 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 F2>?25zxx0H literal 0 HcmV?d00001 diff --git a/assets/tw/retire/TEMPLATE_DOWNES_1.png b/assets/tw/retire/TEMPLATE_DOWNES_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc67cb94ba09e4e4f088c342c5ce99337a85f91 GIT binary patch literal 1622 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 literal 0 HcmV?d00001 diff --git a/assets/tw/retire/TEMPLATE_FOOTE.png b/assets/tw/retire/TEMPLATE_FOOTE.png new file mode 100644 index 0000000000000000000000000000000000000000..47ce0006f4497d90313780e429c852e4471c9e3b GIT binary patch literal 1746 zcmbu9XH?Ty7{>qqY<3nUARI_SBBNm>mWF@<6q%)Arh?@ZMX>@Zdsr+8C>TLmp~guK zLqIgt#Yh!HK|nEJKmq|o3L;dIQ4q1325CM0-uJopocrDnzw_LC&ig3k$}s@#<>u)I zfFJ;XDgjCbkPRT#3yDOisjH-=siC2%h1b?m32%)145wPg8;Be9Roj+IB2jIb)--FT z>*md_Tt9A1Oey$(0ZIvgK>_B#7AS}TAQ%ve0hPZ21^@tot~vcw2qY8+M?sWB0BZfd znu_Z@S*HCfGrY1{{k`kyl1=hQ8|Hm@r8nTBHzSJ%6Z`*o$Yee8KblR8{gz_W>vEDU z-BOjVg6o58@K0pb0SX5pFyJE_f>!mUzjmL%=A-g8M(K9f8ri#CCkLv}4Afibt=KPjgt4FEb(6Kw<)J`X#C{WZMg1u9%%DypD$4V;O?=cr%kv` zqj}fLI09i_!5$ZW0z2Hky(VSzcxK4yjj0nuA9$v|YN=nR7M~2cp?EBdx~(Xf+&AX2 zIByc~^h*Su41EcPl)d4g%7&3({8k3eupyBQ}6aE^Md z;WeI6%G&Os-#!}Gl~(MKV5MEAnb1!!WQij+PyFGgbNs&TN`B1E<%?-~*KVopz(VZX zEDj0S?mx4Hns{^^n-x7a?L8Gt4yci}ItI@1xub32OKP--V=LH1T1rKuiywVgvG`0- zc1G`gj;);23U9i7vSJKQ_t;g(Cx4z~#kiSXJ|YU87j{zMphn zybpO9KT^X^R|2*|8TV=JWp;@5yn$*EDXKhzKma%l`fpT#5C8*(p|Lok3(1zwz?H&@wBj9{a2UtfGOZXv|j_bkEFhWE_BOzZd2 zaL2pE(WFe)@cthJ^$U(omoMDL3{(|`il<}tjqiV7DE2v6A2Be9dv0=3W#4SgzADz> z@c-C{VqjRb$~zo~*Cmn}oBU$eV`}XMGOYF1)hxS)(8V6sV$RX0@Qt3KZDg{&6GJTUlbNm3Wkji|N@dk`G`7B?0H2tpPnSG}b+YL8Q;2KBq^(uDKyzlPg4_8AIo sg2K@df_Y?+;E7>y6%{ATm^N@qn;Y%qq?~yz+LO*x0v$gzq$>yi2Aj^kng9R* literal 0 HcmV?d00001 diff --git a/assets/tw/retire/TEMPLATE_HERMES.png b/assets/tw/retire/TEMPLATE_HERMES.png index a09399356d52dae0c9bd4d2ebe0994b0b9620afd..30ac15d94c4a9d0192a33d318c376652703786f2 100644 GIT binary patch literal 2539 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 diff --git a/assets/tw/retire/TEMPLATE_LANGLEY.png b/assets/tw/retire/TEMPLATE_LANGLEY.png index 8fb671a163bd6c332c6e574a1bf54a3f0757e475..6c15ecdf976df520da003c677e2da0921dab5782 100644 GIT binary patch literal 2417 zcmV-%36A!OP)Px%RZvV+Md$6<-R{o+^UlWO)?R&jAV)`Wn2u$GQK|$oJF3|J~02=hpxK z=lAE<|MS-W@6P?_#`oRC@7cfa)4$`-z23&Q*1W9GwWZa;waTfO-ngO5sD$_Q@Bi=K z|MTbn_vi2K-sj`qxw5s_($l-Zy58Q=`1beh=HlVq-v9gm@9ymX`}hC<|NsB@|Nrm* z`|tnz=l}fP|M%Yi^WOjO*8l6)|Le~G=g$A*&i~xR?8T_>&$RaA&as1bmt0TKn~eYK z-l2+jx|xL2x0>e8wBE<5&$q3!ot~$Xi^i_3$+Wij>FNLV@Bi=T>Dtiu@80U;*7x)0 z%*edf&cdRcnx&U9b&dRT>t(B6PfPaRChm>!3d1Y{GCMYQ>3<*OiCWvowduw<~ zZF4zcb5BlHz9JHw4hmWj4RaY4oI*4I#h>AceBz&y(20Eaq@MATkjasR;k>ibwY<-) zxXGido`{LkyuQ}O!o91Z#+p{}Eux3#DW6b}w1B`!=*DN0H`Sz$O@S~*oxD?>vXJ3cW}Q$l27Ol@mI zWotrbb2(^qFk^KwUu!vJYdBwHEm>ttcY1e#c-Gg`xwx}zW?)xdV?0n(E;utySyeqw zMu3rppt7W>!?L={zK*G$iGOpJe}+9hJ&K``?f2*2?%iIcFSP&w2Fgi9K~#9!P0xF5 z)%6|5@%QKZ`<>IC)6#N^&?-iOmNE;cP(Vc3XyS+$5HBb(p(2~tIGx!Rb#95n3>7c` zIB(N(nPj@KO_@%G;f7OT<9bS4s-?8xP=>UEZE5M{^qlWA2?~4t_sJ*ElRWk_?5G=E zy%9VX9lsUxyU%l&IPK)aasNiuM@F*f>7Z(;>rj}4;9xMxUJi2|`ofjW&jZZK(%(Z? zZ5YOBU#ws7%hW4vhbZWDs;g`DzP_PBrY8Rf$x%{Oo!#}pnY@Z~x=00Op&6yFVt^?se+$M87 zK52x1KKq248l^;dD5tgMM?W6p8FTceo5nA$nYa4^4^)%M`V>sCfx%foLGXRqs?C?J zjM}xa-Fy({c&JJhgSszWdudH?I||TjZBUcZC5@vA%G;`jwFaX1vGq%x*)Cn5Ss$6S z(|m=bh5&H!`aj*@BZPsyy(@(=+%6JOzJD54HWr?VFU6&*#hQgTJhR$QD0fIk7X0Kp z+V*4d{HEMD&(B{VkHPT$_=<{fI^8Lwr=o8ixEC8MbYH=4L}Xtdlg+%t6r@hQYB!(! zVDtvxRAuJPf}+Ep4-E}L%AqVq#A=$eP(jnYx?n4+MvY1f@rQ zVotRnEQ#AU+3Vt6<@=VJ&9b+hR)piyJv0kM`P@(1oRl4y*}jvq{EsgLT)gG}Y@PKM z!W7eonzL!=<@I-udoYE|{q>WXbZb=(V!{Mjs0@HCcPG$02Ef;sY*{g_)R&c+b?^Le z&+=`)opMqTzWXaJ|H0ZfF36phYN^N@W3MFwl{IPVSO72(W%ggaByEL_`ps+EJoVH7%^$R4Sl6f-cB zVF2XpDOw)A;k~N{9k6!vg2LkB;+d+i+`Oi9^SFwy4*>YN-DPemLVyrDg+oPmoRGgN zB4-#jm|C}P-Qq2?w*0FvH1ozcUbGjUf1VaNQve_=cW~(4w@&=oIU+2xnsY93#wL=J zx9@E-0Fl6b$L2>^>Pi=Mm4)U$SxlY#s@^NZ%n3rHp>Nl0Mu$KL`^ z)bcHLbaW_~aq!E|xASbZHaGw;v?v9V1cG)r4#wE510(@ z0Z><8q|*m}W)}b+PF(z5%b111oiAkqcdOG$Jdc}oe_{7b1#}9hsqoxx7mh6c6aXpP z|KJ=A6&trK=^G3|AzUX@fMP`*d5=D9LVO!{V4N||u8AJajh{S5xaKxFsQJjwIkD+# zR%fE1^r-mY4b!EuP@jNrqk;g4+1M*JKvy(V(C0EijPBbM_Obw$tO1DH8sLa_Jdtcm~_{`|E7!!TJ-UHZZ-Hmf$dSON700000NkvXXu0mjfVP^id literal 20079 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 z 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 LNkvXXu0mjfr|vrU diff --git a/config/template.json b/config/template.json index 972c9f435..21450d303 100644 --- a/config/template.json +++ b/config/template.json @@ -310,8 +310,9 @@ }, "GemsFarming": { "ChangeFlagship": "ship", - "ChangeVanguard": "ship", "CommonCV": "any", + "ChangeVanguard": "ship", + "CommonDD": "any", "CommissionLimit": true }, "Campaign": { diff --git a/module/campaign/gems_farming.py b/module/campaign/gems_farming.py index aed711907..4c6d19961 100644 --- a/module/campaign/gems_farming.py +++ b/module/campaign/gems_farming.py @@ -8,7 +8,13 @@ from module.exception import CampaignEnd from module.handler.assets import AUTO_SEARCH_MAP_OPTION_OFF from module.logger import logger from module.map.assets import FLEET_PREPARATION, MAP_PREPARATION -from module.retire.assets import DOCK_CHECK, TEMPLATE_BOGUE, TEMPLATE_HERMES, TEMPLATE_LANGLEY, TEMPLATE_RANGER +from module.retire.assets import ( + DOCK_CHECK, + TEMPLATE_BOGUE, TEMPLATE_HERMES, TEMPLATE_LANGLEY, TEMPLATE_RANGER, + TEMPLATE_CASSIN_1, TEMPLATE_CASSIN_2, TEMPLATE_DOWNES_1, TEMPLATE_DOWNES_2, + TEMPLATE_AULICK, TEMPLATE_FOOTE +) + from module.retire.dock import Dock from module.retire.scanner import ShipScanner from module.ui.page import page_fleet @@ -150,6 +156,7 @@ class GemsFarming(CampaignRun, Dock, EquipmentChange): Returns: bool: True if vanguard changed """ + logger.hr('Change vanguard', level=1) logger.attr('ChangeVanguard', self.config.GemsFarming_ChangeVanguard) if self.change_vanguard_equip: @@ -253,13 +260,47 @@ class GemsFarming(CampaignRun, Dock, EquipmentChange): fleet=self.config.Fleet_Fleet1, status='free') scanner.disable('rarity') + self.dock_sort_method_dsc_set() + ships = scanner.scan(self.device.image) if ships: # Don't need to change current return ships scanner.set_limitation(fleet=0) - return scanner.scan(self.device.image, output=False) + + candidates = self.find_candidates(self.get_templates(self.config.GemsFarming_CommonDD), scanner) + + if candidates: + return candidates + else: + logger.info('No specific DD was found, try reversed order.') + return candidates + + def find_candidates(self, template, scanner): + """ + Find candidates based on template matching using a scanner. + + """ + candidates = [] + for item in template: + candidates = [ship for ship in scanner.scan(self.device.image, output=False) + if item.match(self.image_crop(ship.button), similarity=SIM_VALUE)] + if candidates: + break + return candidates + + def get_templates(self, CommonDD): + """ + Returns the corresponding template list based on CommonDD + + """ + if CommonDD == 'any': + return [TEMPLATE_CASSIN_1, TEMPLATE_CASSIN_2, TEMPLATE_DOWNES_1, TEMPLATE_DOWNES_2, TEMPLATE_AULICK, TEMPLATE_FOOTE] + elif CommonDD == 'aulick_or_foote': + return [TEMPLATE_AULICK, TEMPLATE_FOOTE] + else: + return [TEMPLATE_CASSIN_1, TEMPLATE_CASSIN_2, TEMPLATE_DOWNES_1, TEMPLATE_DOWNES_2] def flagship_change_execute(self): """ @@ -385,4 +426,4 @@ class GemsFarming(CampaignRun, Dock, EquipmentChange): continue else: - break + break \ No newline at end of file diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 614757ee9..ca176af50 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1594,15 +1594,6 @@ "ship_equip" ] }, - "ChangeVanguard": { - "type": "select", - "value": "ship", - "option": [ - "disabled", - "ship", - "ship_equip" - ] - }, "CommonCV": { "type": "select", "value": "any", @@ -1614,6 +1605,24 @@ "hermes" ] }, + "ChangeVanguard": { + "type": "select", + "value": "ship", + "option": [ + "disabled", + "ship", + "ship_equip" + ] + }, + "CommonDD": { + "type": "select", + "value": "any", + "option": [ + "any", + "aulick_or_foote", + "cassin_or_downes" + ] + }, "CommissionLimit": { "type": "checkbox", "value": true diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 0dd97c6c0..f7539f823 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -269,12 +269,15 @@ GemsFarming: ChangeFlagship: value: ship option: [ ship, ship_equip ] - ChangeVanguard: - value: ship - option: [ disabled, ship, ship_equip ] CommonCV: value: any option: [ any, langley, bogue, ranger, hermes ] + ChangeVanguard: + value: ship + option: [ disabled, ship, ship_equip ] + CommonDD: + value: any + option: [ any, aulick_or_foote , cassin_or_downes ] CommissionLimit: true # ==================== Event ==================== diff --git a/module/config/config_generated.py b/module/config/config_generated.py index ac42e4d5a..46dca26cf 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -149,8 +149,9 @@ class GeneratedConfig: # Group `GemsFarming` GemsFarming_ChangeFlagship = 'ship' # ship, ship_equip - GemsFarming_ChangeVanguard = 'ship' # disabled, ship, ship_equip GemsFarming_CommonCV = 'any' # any, langley, bogue, ranger, hermes + GemsFarming_ChangeVanguard = 'ship' # disabled, ship, ship_equip + GemsFarming_CommonDD = 'any' # any, aulick_or_foote, cassin_or_downes GemsFarming_CommissionLimit = True # Group `EventGeneral` diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 719dedcca..493f3915b 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -1134,13 +1134,6 @@ "ship": "Change Ship", "ship_equip": "Change Ship + Gears" }, - "ChangeVanguard": { - "name": "Change Vanguard", - "help": "Change vanguard if flagship or vanguard are emotion exhausted.If you choose not to change, your fleet will ignore the low emotion warning and continue combat.\nSwitch out to new level 100(70) common vanguard after current flagship has reached level 32+ (Only CN players'0 limit break ship can reach level 100)\n\nThe vanguard's equipment is replaced when being switched out by first recording the current setup. Only populated equipment slots will be replaced.", - "disabled": "Don't Change", - "ship": "Change Ship", - "ship_equip": "Change Ship + Gears" - }, "CommonCV": { "name": "Flagship Common CV/CVL Preference", "help": "", @@ -1150,6 +1143,20 @@ "ranger": "ranger", "hermes": "hermes" }, + "ChangeVanguard": { + "name": "Change Vanguard", + "help": "Change vanguard if flagship or vanguard are emotion exhausted.If you choose not to change, your fleet will ignore the low emotion warning and continue combat.\nSwitch out to new level 100(70) common vanguard after current flagship has reached level 32+ (Only CN players'0 limit break ship can reach level 100)\n\nThe vanguard's equipment is replaced when being switched out by first recording the current setup. Only populated equipment slots will be replaced.", + "disabled": "Don't Change", + "ship": "Change Ship", + "ship_equip": "Change Ship + Gears" + }, + "CommonDD": { + "name": "Flagship Common DD Preference", + "help": "", + "any": "any", + "aulick_or_foote": "aulick or foote", + "cassin_or_downes": "cassin or downes" + }, "CommissionLimit": { "name": "Prevent Too Many Urgent Commissions", "help": "When running 7x24, prevent having a lot of urgent commissions and not being able to complete daily commissions. It is recommended to select only short-terms and high-yields in the commission filter" diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 3ae296fed..fb5fc0b0d 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -1134,13 +1134,6 @@ "ship": "ship", "ship_equip": "ship_equip" }, - "ChangeVanguard": { - "name": "GemsFarming.ChangeVanguard.name", - "help": "GemsFarming.ChangeVanguard.help", - "disabled": "disabled", - "ship": "ship", - "ship_equip": "ship_equip" - }, "CommonCV": { "name": "GemsFarming.CommonCV.name", "help": "GemsFarming.CommonCV.help", @@ -1150,6 +1143,20 @@ "ranger": "ranger", "hermes": "hermes" }, + "ChangeVanguard": { + "name": "GemsFarming.ChangeVanguard.name", + "help": "GemsFarming.ChangeVanguard.help", + "disabled": "disabled", + "ship": "ship", + "ship_equip": "ship_equip" + }, + "CommonDD": { + "name": "GemsFarming.CommonDD.name", + "help": "GemsFarming.CommonDD.help", + "any": "any", + "aulick_or_foote": "aulick or foote", + "cassin_or_downes": "cassin or downes" + }, "CommissionLimit": { "name": "GemsFarming.CommissionLimit.name", "help": "GemsFarming.CommissionLimit.help" diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index b9eddf199..7c665095f 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -1134,13 +1134,6 @@ "ship": "更换舰船", "ship_equip": "更换舰船 + 装备" }, - "ChangeVanguard": { - "name": "更换前排", - "help": "当前排红脸时更换前排,选择不更换则会强制红脸出击\n换前排通过找一艘心情不低于10、等级100的白鹰白皮驱逐完成,所以尽量保证有足够多的驱逐。国服以外则为等级70的白鹰白船驱逐。\n\n换装备只会更换正在装备中的栏位,即使是白装也会更换。如果指定了旗舰,则会更换全部5个装备,未指定旗舰只会更换设备。", - "disabled": "不更换", - "ship": "更换舰船", - "ship_equip": "更换舰船 + 装备" - }, "CommonCV": { "name": "指定旗舰航母", "help": "", @@ -1150,6 +1143,20 @@ "ranger": "突击者", "hermes": "竞技神" }, + "ChangeVanguard": { + "name": "更换前排", + "help": "当前排红脸时更换前排,选择不更换则会强制红脸出击\n换前排通过找一艘心情不低于10、等级100的白鹰白皮驱逐完成,所以尽量保证有足够多的驱逐。国服以外则为等级70的白鹰白船驱逐。\n\n换装备只会更换正在装备中的栏位,即使是白装也会更换。如果指定了旗舰,则会更换全部5个装备,未指定旗舰只会更换设备。", + "disabled": "不更换", + "ship": "更换舰船", + "ship_equip": "更换舰船 + 装备" + }, + "CommonDD": { + "name": "指定前排", + "help": "", + "any": "任意", + "aulick_or_foote": "奥利克或富特", + "cassin_or_downes": "卡辛或唐斯" + }, "CommissionLimit": { "name": "防止紧急委托数量过多", "help": "在7x24运行时防止紧急委托数量过多做不完每日委托,建议在委托过滤器仅选择短时长高收益委托" diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 50d579ea6..b0057775e 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -1134,13 +1134,6 @@ "ship": "更換艦船", "ship_equip": "更換艦船 + 裝備" }, - "ChangeVanguard": { - "name": "更換前排", - "help": "當前排紅臉時更換前排,選擇不更換則會強制紅臉出擊\n換前排通過找一艘心情不低於10、等級70的白鷹白船驅逐完成,所以盡量保證有足夠多的驅逐。國服則為等級100的白鷹白船驅逐。\n\n換裝備只會更換正在裝備中的欄位,即使是白裝也會更換。如果指定了旗艦,則會更換全部5個裝備,未指定旗艦隻會更換設備。", - "disabled": "不更换", - "ship": "更換艦船", - "ship_equip": "更換艦船 + 裝備" - }, "CommonCV": { "name": "指定旗艦航母", "help": "", @@ -1150,6 +1143,20 @@ "ranger": "突擊者", "hermes": "競技神" }, + "ChangeVanguard": { + "name": "更換前排", + "help": "當前排紅臉時更換前排,選擇不更換則會強制紅臉出擊\n換前排通過找一艘心情不低於10、等級70的白鷹白船驅逐完成,所以盡量保證有足夠多的驅逐。國服則為等級100的白鷹白船驅逐。\n\n換裝備只會更換正在裝備中的欄位,即使是白裝也會更換。如果指定了旗艦,則會更換全部5個裝備,未指定旗艦隻會更換設備。", + "disabled": "不更换", + "ship": "更換艦船", + "ship_equip": "更換艦船 + 裝備" + }, + "CommonDD": { + "name": "指定前排", + "help": "", + "any": "任意", + "aulick_or_foote": "奧利克或富特", + "cassin_or_downes": "卡辛或唐斯" + }, "CommissionLimit": { "name": "防止緊急委託數量過多", "help": "在7x24運行時防止緊急委託數量過多做不完每日委託,建議在委託過濾器僅選擇短時長高收益委託" diff --git a/module/retire/assets.py b/module/retire/assets.py index a10ccadd5..b9651a538 100644 --- a/module/retire/assets.py +++ b/module/retire/assets.py @@ -55,3 +55,9 @@ TEMPLATE_IN_COMMISSION = Template(file={'cn': './assets/cn/retire/TEMPLATE_IN_CO TEMPLATE_IN_EVENT_FLEET = Template(file={'cn': './assets/cn/retire/TEMPLATE_IN_EVENT_FLEET.png', 'en': './assets/cn/retire/TEMPLATE_IN_EVENT_FLEET.png', 'jp': './assets/cn/retire/TEMPLATE_IN_EVENT_FLEET.png', 'tw': './assets/cn/retire/TEMPLATE_IN_EVENT_FLEET.png'}) TEMPLATE_LANGLEY = Template(file={'cn': './assets/cn/retire/TEMPLATE_LANGLEY.png', 'en': './assets/en/retire/TEMPLATE_LANGLEY.png', 'jp': './assets/jp/retire/TEMPLATE_LANGLEY.png', 'tw': './assets/tw/retire/TEMPLATE_LANGLEY.png'}) TEMPLATE_RANGER = Template(file={'cn': './assets/cn/retire/TEMPLATE_RANGER.png', 'en': './assets/en/retire/TEMPLATE_RANGER.png', 'jp': './assets/jp/retire/TEMPLATE_RANGER.png', 'tw': './assets/tw/retire/TEMPLATE_RANGER.png'}) +TEMPLATE_CASSIN_1 = Template(file={'cn': './assets/cn/retire/TEMPLATE_CASSIN_1.png', 'en': './assets/en/retire/TEMPLATE_CASSIN_1.png', 'jp': './assets/jp/retire/TEMPLATE_CASSIN_1.png', 'tw': './assets/tw/retire/TEMPLATE_CASSIN_1.png'}) +TEMPLATE_CASSIN_2 = Template(file={'cn': './assets/cn/retire/TEMPLATE_CASSIN_2.png', 'en': './assets/en/retire/TEMPLATE_CASSIN_2.png', 'jp': './assets/jp/retire/TEMPLATE_CASSIN_2.png', 'tw': './assets/tw/retire/TEMPLATE_CASSIN_2.png'}) +TEMPLATE_DOWNES_1 = Template(file={'cn': './assets/cn/retire/TEMPLATE_DOWNES_1.png', 'en': './assets/en/retire/TEMPLATE_DOWNES_1.png', 'jp': './assets/jp/retire/TEMPLATE_DOWNES_1.png', 'tw': './assets/tw/retire/TEMPLATE_DOWNES_1.png'}) +TEMPLATE_DOWNES_2 = Template(file={'cn': './assets/cn/retire/TEMPLATE_DOWNES_2.png', 'en': './assets/en/retire/TEMPLATE_DOWNES_2.png', 'jp': './assets/jp/retire/TEMPLATE_DOWNES_2.png', 'tw': './assets/tw/retire/TEMPLATE_DOWNES_2.png'}) +TEMPLATE_AULICK = Template(file={'cn': './assets/cn/retire/TEMPLATE_AULICK.png', 'en': './assets/en/retire/TEMPLATE_AULICK.png', 'jp': './assets/jp/retire/TEMPLATE_AULICK.png', 'tw': './assets/tw/retire/TEMPLATE_AULICK.png'}) +TEMPLATE_FOOTE = Template(file={'cn': './assets/cn/retire/TEMPLATE_FOOTE.png', 'en': './assets/en/retire/TEMPLATE_FOOTE.png', 'jp': './assets/jp/retire/TEMPLATE_FOOTE.png', 'tw': './assets/tw/retire/TEMPLATE_FOOTE.png'}) From 010d4aa8123c199e23db4408a0109d224be484bf Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 8 Apr 2024 22:54:44 +0800 Subject: [PATCH 52/96] Chore: Raise error when receiving invalid CommonDD setting --- module/campaign/gems_farming.py | 36 +++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/module/campaign/gems_farming.py b/module/campaign/gems_farming.py index 4c6d19961..6c86ae0a6 100644 --- a/module/campaign/gems_farming.py +++ b/module/campaign/gems_farming.py @@ -4,7 +4,7 @@ from module.combat.assets import BATTLE_PREPARATION from module.equipment.assets import * from module.equipment.equipment_change import EquipmentChange from module.equipment.fleet_equipment import OCR_FLEET_INDEX -from module.exception import CampaignEnd +from module.exception import CampaignEnd, ScriptError from module.handler.assets import AUTO_SEARCH_MAP_OPTION_OFF from module.logger import logger from module.map.assets import FLEET_PREPARATION, MAP_PREPARATION @@ -17,8 +17,8 @@ from module.retire.assets import ( from module.retire.dock import Dock from module.retire.scanner import ShipScanner -from module.ui.page import page_fleet from module.ui.assets import BACK_ARROW +from module.ui.page import page_fleet SIM_VALUE = 0.95 @@ -290,17 +290,31 @@ class GemsFarming(CampaignRun, Dock, EquipmentChange): break return candidates - def get_templates(self, CommonDD): + @staticmethod + def get_templates(common_dd): """ - Returns the corresponding template list based on CommonDD - + Returns the corresponding template list based on CommonDD """ - if CommonDD == 'any': - return [TEMPLATE_CASSIN_1, TEMPLATE_CASSIN_2, TEMPLATE_DOWNES_1, TEMPLATE_DOWNES_2, TEMPLATE_AULICK, TEMPLATE_FOOTE] - elif CommonDD == 'aulick_or_foote': - return [TEMPLATE_AULICK, TEMPLATE_FOOTE] + if common_dd == 'any': + return [ + TEMPLATE_CASSIN_1, TEMPLATE_CASSIN_2, + TEMPLATE_DOWNES_1, TEMPLATE_DOWNES_2, + TEMPLATE_AULICK, + TEMPLATE_FOOTE + ] + elif common_dd == 'aulick_or_foote': + return [ + TEMPLATE_AULICK, + TEMPLATE_FOOTE + ] + elif common_dd == 'cassin_or_downes': + return [ + TEMPLATE_CASSIN_1, TEMPLATE_CASSIN_2, + TEMPLATE_DOWNES_1, TEMPLATE_DOWNES_2 + ] else: - return [TEMPLATE_CASSIN_1, TEMPLATE_CASSIN_2, TEMPLATE_DOWNES_1, TEMPLATE_DOWNES_2] + logger.error(f'Invalid CommonDD setting: {common_dd}') + raise ScriptError(f'Invalid CommonDD setting: {common_dd}') def flagship_change_execute(self): """ @@ -426,4 +440,4 @@ class GemsFarming(CampaignRun, Dock, EquipmentChange): continue else: - break \ No newline at end of file + break From 840014f039c5b45b6cc4a05fb94743479e26fda7 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Tue, 9 Apr 2024 00:35:56 +0800 Subject: [PATCH 53/96] Fix: [ALAS] DroidCast image orientation on MuMu12 --- module/device/connection.py | 11 +++++- module/device/method/droidcast.py | 57 ++++++++++++++++++++++++++- module/device/method/uiautomator_2.py | 9 +++-- 3 files changed, 71 insertions(+), 6 deletions(-) diff --git a/module/device/connection.py b/module/device/connection.py index 8fd559ce8..8b0f1d511 100644 --- a/module/device/connection.py +++ b/module/device/connection.py @@ -269,6 +269,7 @@ class Connection(ConnectionAttr): @cached_property def nemud_app_keep_alive(self) -> str: res = self.adb_getprop('nemud.app_keep_alive') + logger.attr('nemud.app_keep_alive', res) return res @retry @@ -277,7 +278,6 @@ class Connection(ConnectionAttr): return False res = self.nemud_app_keep_alive - logger.attr('nemud.app_keep_alive', res) if res == '': # Empty property, probably MuMu6 or MuMu12 version < 3.5.6 return True @@ -292,6 +292,15 @@ class Connection(ConnectionAttr): logger.warning(f'Invalid nemud.app_keep_alive value: {res}') return False + @cached_property + def is_mumu_over_version_356(self) -> bool: + """ + Returns: + bool: If MuMu12 version >= 3.5.6, + which has nemud.app_keep_alive and always be a vertical device + """ + return self.nemud_app_keep_alive != '' + @cached_property def _nc_server_host_port(self): """ diff --git a/module/device/method/droidcast.py b/module/device/method/droidcast.py index 1a5e71f62..3c7a97762 100644 --- a/module/device/method/droidcast.py +++ b/module/device/method/droidcast.py @@ -95,6 +95,8 @@ class DroidCast(Uiautomator2): """ _droidcast_port: int = 0 + droidcast_width: int = 0 + droidcast_height: int = 0 @cached_property def droidcast_session(self): @@ -112,15 +114,37 @@ class DroidCast(Uiautomator2): - /preview To get PNG screenshots. """ + def droidcast_url(self, url='/preview'): + if self.is_mumu_over_version_356: + w, h = self.droidcast_width, self.droidcast_height + if self.orientation == 0: + return f'http://127.0.0.1:{self._droidcast_port}{url}?width={w}&height={h}' + elif self.orientation == 1: + return f'http://127.0.0.1:{self._droidcast_port}{url}?width={h}&height={w}' + else: + # logger.warning('DroidCast receives invalid device orientation') + pass + return f'http://127.0.0.1:{self._droidcast_port}{url}' def droidcast_raw_url(self, url='/screenshot'): + if self.is_mumu_over_version_356: + w, h = self.droidcast_width, self.droidcast_height + if self.orientation == 0: + return f'http://127.0.0.1:{self._droidcast_port}{url}?width={w}&height={h}' + elif self.orientation == 1: + return f'http://127.0.0.1:{self._droidcast_port}{url}?width={h}&height={w}' + else: + # logger.warning('DroidCast receives invalid device orientation') + pass + return f'http://127.0.0.1:{self._droidcast_port}{url}' def droidcast_init(self): logger.hr('DroidCast init') self.droidcast_stop() + self._droidcast_update_resolution() logger.info('Pushing DroidCast apk') self.adb_push(self.config.DROIDCAST_FILEPATH_LOCAL, self.config.DROIDCAST_FILEPATH_REMOTE) @@ -150,10 +174,25 @@ class DroidCast(Uiautomator2): else: logger.error(f'Unknown DROIDCAST_VERSION: {self.config.DROIDCAST_VERSION}') + def _droidcast_update_resolution(self): + if self.is_mumu_over_version_356: + logger.info('Update droidcast resolution') + w, h = self.resolution_uiautomator2(cal_rotation=False) + self.get_orientation() + # 720, 1280 + # mumu12 > 3.5.6 is always a vertical device + self.droidcast_width, self.droidcast_height = w, h + logger.info(f'Droicast resolution: {(w, h)}') + @retry def screenshot_droidcast(self): self.config.DROIDCAST_VERSION = 'DroidCast' + if self.is_mumu_over_version_356: + if not self.droidcast_width or not self.droidcast_height: + self._droidcast_update_resolution() + resp = self.droidcast_session.get(self.droidcast_url(), timeout=3) + if resp.status_code == 404: raise DroidCastVersionIncompatible('DroidCast server does not have /preview') image = resp.content @@ -173,16 +212,27 @@ class DroidCast(Uiautomator2): if image is None: raise ImageTruncated('Empty image after cv2.cvtColor') + if self.is_mumu_over_version_356: + if self.orientation == 1: + image = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE) + return image @retry def screenshot_droidcast_raw(self): self.config.DROIDCAST_VERSION = 'DroidCast_raw' + shape = (720, 1280) + if self.is_mumu_over_version_356: + if not self.droidcast_width or not self.droidcast_height: + self._droidcast_update_resolution() + if self.droidcast_height and self.droidcast_width: + shape = (self.droidcast_height, self.droidcast_width) + image = self.droidcast_session.get(self.droidcast_raw_url(), timeout=3).content # DroidCast_raw returns a RGB565 bitmap try: - arr = np.frombuffer(image, dtype=np.uint16).reshape((720, 1280)) + arr = np.frombuffer(image, dtype=np.uint16).reshape(shape) except ValueError as e: if len(image) < 500: logger.warning(f'Unexpected screenshot: {image}') @@ -230,6 +280,11 @@ class DroidCast(Uiautomator2): cv2.add(b, m, dst=b) image = cv2.merge([r, g, b]) + + if self.is_mumu_over_version_356: + if self.orientation == 1: + image = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE) + return image def droidcast_wait_startup(self): diff --git a/module/device/method/uiautomator_2.py b/module/device/method/uiautomator_2.py index 69520f0a2..765f7dde6 100644 --- a/module/device/method/uiautomator_2.py +++ b/module/device/method/uiautomator_2.py @@ -243,7 +243,7 @@ class Uiautomator2(Connection): return hierarchy @retry - def resolution_uiautomator2(self) -> t.Tuple[int, int]: + def resolution_uiautomator2(self, cal_rotation=True) -> t.Tuple[int, int]: """ Faster u2.window_size(), cause that calls `dumpsys display` twice. @@ -252,9 +252,10 @@ class Uiautomator2(Connection): """ info = self.u2.http.get('/info').json() w, h = info['display']['width'], info['display']['height'] - rotation = self.get_orientation() - if (w > h) != (rotation % 2 == 1): - w, h = h, w + if cal_rotation: + rotation = self.get_orientation() + if (w > h) != (rotation % 2 == 1): + w, h = h, w return w, h def resolution_check_uiautomator2(self): From 09fe301597689bbc00e55b544d6b8476c62cf2db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9C=9E=E9=A3=9B?= Date: Tue, 9 Apr 2024 11:23:16 +0800 Subject: [PATCH 54/96] fix: ship template assets bit error (#3618) --- assets/cn/retire/TEMPLATE_AULICK.png | Bin 1486 -> 3464 bytes assets/cn/retire/TEMPLATE_BOGUE.png | Bin 1993 -> 2830 bytes assets/cn/retire/TEMPLATE_CASSIN_1.png | Bin 1409 -> 3022 bytes assets/cn/retire/TEMPLATE_CASSIN_2.png | Bin 1205 -> 2910 bytes assets/cn/retire/TEMPLATE_DOWNES_1.png | Bin 1622 -> 3282 bytes assets/cn/retire/TEMPLATE_DOWNES_2.png | Bin 1751 -> 3337 bytes assets/cn/retire/TEMPLATE_FOOTE.png | Bin 1746 -> 2923 bytes assets/cn/retire/TEMPLATE_HERMES.png | Bin 2539 -> 2847 bytes assets/cn/retire/TEMPLATE_LANGLEY.png | Bin 2417 -> 3195 bytes assets/cn/retire/TEMPLATE_RANGER.png | Bin 2632 -> 3092 bytes assets/en/retire/TEMPLATE_AULICK.png | Bin 1486 -> 3464 bytes assets/en/retire/TEMPLATE_BOGUE.png | Bin 1993 -> 2830 bytes assets/en/retire/TEMPLATE_CASSIN_1.png | Bin 1409 -> 3022 bytes assets/en/retire/TEMPLATE_CASSIN_2.png | Bin 1205 -> 2910 bytes assets/en/retire/TEMPLATE_DOWNES_1.png | Bin 1622 -> 3282 bytes assets/en/retire/TEMPLATE_DOWNES_2.png | Bin 1751 -> 3337 bytes assets/en/retire/TEMPLATE_FOOTE.png | Bin 1746 -> 2923 bytes assets/en/retire/TEMPLATE_HERMES.png | Bin 2539 -> 2847 bytes assets/en/retire/TEMPLATE_LANGLEY.png | Bin 2417 -> 3195 bytes assets/en/retire/TEMPLATE_RANGER.png | Bin 2632 -> 3092 bytes assets/jp/retire/TEMPLATE_AULICK.png | Bin 1486 -> 3464 bytes assets/jp/retire/TEMPLATE_BOGUE.png | Bin 1993 -> 2830 bytes assets/jp/retire/TEMPLATE_CASSIN_1.png | Bin 1409 -> 3022 bytes assets/jp/retire/TEMPLATE_CASSIN_2.png | Bin 1205 -> 2910 bytes assets/jp/retire/TEMPLATE_DOWNES_1.png | Bin 1622 -> 3282 bytes assets/jp/retire/TEMPLATE_DOWNES_2.png | Bin 1751 -> 3337 bytes assets/jp/retire/TEMPLATE_FOOTE.png | Bin 1746 -> 2923 bytes assets/jp/retire/TEMPLATE_HERMES.png | Bin 2539 -> 2847 bytes assets/jp/retire/TEMPLATE_LANGLEY.png | Bin 2417 -> 3195 bytes assets/jp/retire/TEMPLATE_RANGER.png | Bin 2632 -> 3092 bytes assets/tw/retire/TEMPLATE_AULICK.png | Bin 1486 -> 3464 bytes assets/tw/retire/TEMPLATE_BOGUE.png | Bin 1993 -> 2830 bytes assets/tw/retire/TEMPLATE_CASSIN_1.png | Bin 1409 -> 3022 bytes assets/tw/retire/TEMPLATE_CASSIN_2.png | Bin 1205 -> 2910 bytes assets/tw/retire/TEMPLATE_DOWNES_1.png | Bin 1622 -> 3282 bytes assets/tw/retire/TEMPLATE_DOWNES_2.png | Bin 1751 -> 3337 bytes assets/tw/retire/TEMPLATE_FOOTE.png | Bin 1746 -> 2923 bytes assets/tw/retire/TEMPLATE_HERMES.png | Bin 2539 -> 2847 bytes assets/tw/retire/TEMPLATE_LANGLEY.png | Bin 2417 -> 3195 bytes assets/tw/retire/TEMPLATE_RANGER.png | Bin 2632 -> 3092 bytes module/retire/assets.py | 12 ++++++------ 41 files changed, 6 insertions(+), 6 deletions(-) diff --git a/assets/cn/retire/TEMPLATE_AULICK.png b/assets/cn/retire/TEMPLATE_AULICK.png index a48dd95422e675ac0b091032be76f4c986d707c4..eb7f3f25c0703b33fa5e91ff4c73bd9ae6747d29 100644 GIT binary patch literal 3464 zcmb_f2~-o;8lI$KQ6GY~DAJ-K0;OQcWCIcjiv&%OfUGWPC1fTLAqz=>fTDp~31~qn zQV>OPK}91j$f8o9Eegs~s$$zHODUkDfFPwP%bOr@+CICSo|lu!+`04p+xIW`BxRlV z8iTo}a{&M_V6&Kh$bG5y(nlk|#eTG5|G-1OXf58#rEc zo>*wdg~Xw-okA!<&;a1%qL6TT5wIK^3Wo_q3|#;9N*q=IF>vdt9FQY%hrH=3thL(&9CivKk6_^3v<9&oIP0+P zVkwNJ*@1W-2okXlG&>>%=7my7E3hPxL?RGL1dxO$(&$7IokGD*e{hI7Da5DyF;`C; zL!KD8aJgJUClF#|W9?$ec4BE5fk>m#5CsGh36CJ~vN(~PtH6t7%V#t&VHr;LGjNEjZ(x)J5foerfoKP6W10d&yjh$iS{gZJ9O4n+NLUDq zK}hXJ7x$0KzSYGi&3mz6gc0CS-Dt7$l5oLf(p&1;j~Uf*&js zM@xCIM-1ZTa&0scy1NwS%Ei(Eu{d%jQ|o42#*!#@B&_v%fd~@E%0Bvy0L|V4DslEu~f)K z0u~6lVK6}=3d3P%X{5W0BgIn0Fyb9~$_oyM&KAk!ToDguGZ{D}W;=lZqSJ^Djt~vz z;dxZD10IAZRJm)LrM4c(Wf8+Wzt-Nrq zC=5nsB?0&EgZXEb_-A?eLofaRf+1)p4B;q4(stE*e%cx2fKX zcYPo@oGB$uf57#g3zI;TV47VY-u zuU}2E(NoUt?AhtNyY*(l>YNyLRTs9(*ezp)?HTG-<;~E<64bGSy07-aieIAoR_2|{ zSol&M)w{^rTpy^)4bCF-Gc7HYO~))1*`_~yhpED5cFC7mMWvSLSYIAoj5_9Y^bE7V zfB50G#1LR}|6*op!=b^}k$Nkoar>(ZRMpWqVAE~4!UYWeu1=r4SM?_f&3|rBGkbV> zed+PsL;KDi72bk|bdodXEuvc7az$T0HMG}h<#5aQ@lV=IIvE&IZOsKz)5~Z_p~A?!6r)!sE6;qHFfyu1=G_O6s>~ld$@8%-Nov&jS^v zFL$p?T-fDzN2dq~u}i7#DYweby0)p&c>dO3S<*>8_q!Z74DLMooD#dJJvEA2&B8Cp z4^?NnG!%_)+TVM!VeO{}Mn3m=Ce~D^owE$>UN@kK#{g*Gb5=`Bk7zD3GgOZY-1fC} zD6-}SV9ie-{lNC4BUJ3}TIck{xLu_^B?bWBd53ett8{kv(3n%p>05=w;@*M+b!?2@ zNMB!>np3E>|2E6PIpLQH++b(={4Ecxk3Xrm^(aw0l%C&qj&5GoUb<@%dfBwkWm#*} z9L~x29%;-bUO4pQs(&q7jyi@(t1w(_9`tzQ-L{J&&BxDEbov?b&lZnPR;zPrEL}z) z|1i){{mHWD!q%v*qxTIfi<+Na|7>XV#-=S5BU^gDS zp@5X*4qk)N=lpVSTnb9KYI!Cw(2MPd`YBqc{aIz$xH#d;Fm?Gl&?GC9ZC$CKkNL=K z??Qk)e`4%ec=!9AG3r*yXOn<_Mo56Qk5&CcS)rV+({CA`-08h6dr|9E+mfF#~YCW`fL&43ad0T2&;+KIRTB7!6F*oQWmP7ta?j(xdJwQ1d-}8mu-Nm1e-AjgzfHIX4^y48_ znRU(*%&9sH*W+FqrK&}JNuc(tB?Vjz&Qh`3Lt>jQ1OuZxzS3!X-8xX3-g;-^U<$pL zwB!^!m_G4)o!WFIS8{Yy)56)?_t%FGGuZFY6k8YRb&4=YHR-iPlRyvr1j#d15Ym zA@$lfwqD-j(c29B`ti<7he)pbIe}zj3u>KC`$Ur=P`I+~6c&wDDw&0g+^W<$CZ2p< z*CN-VZ`=9|V_$U;l6Pb@cS%EIl6-g9b<_$-flT9~u;Or2na~issMW99$= literal 1486 zcmbu9do+}39LL}Ho#7=$Ge$}b&5%nXGefKr$|Y=ao!W$^m~=*nV{%z*+nl2t;~vJP zQgVr0ikjLeF(KmOMz-MZ(!$`A~$LJ%tuK`62}ZC;phda0S4HmF~bGPZB~fg!bli1ScwX5_$A;Z2$| ztYBH76*Gc}6)CNC1wse~4x_1zcg7OW?DeB+5qx2^QS7;#zlR1LfrnIAnUncLve&q1 z*qB#qQlfXTIr?^CoChf8$Z#hDL%MzHy$8P*m-I@+A&}ElQR4bI(FDCJsm+$R7^05l zdg%ZYmvzjz(H0#6*t?Bqsoyhb!Xmzg#18I3aa)Et?=0hYnyW^eFsWIYGk#A>7_%(T zCd>rp4rQl(OrL*eGTEhExGCRY4j1O8ne3+{$)DJkpp=+Uur8%t${W!Q?TTcT#V&qv zM~u7Vj+TD2d%u3Xn@YK3PMw{8>7PNQ^6K2iMH$XtC)?pq4ytWY#BctUfs_OGW1pJ`>vx<#+D*J*EBoF1pFL~d{i&)acGa~_VKN= zVK3fF&l|vFay(RDjGhyg(RgV;$+I2LjH&m*X+(_;lQtGhU6EEIBAq_-5X&6(DiB~o>{dVZrs#(d69w%0-$nV;x>3R6J+2N$G z_nNhS3(@+(VgfUYcaK-(d`16>A_!p+nn*kvOCXY**Ww5&-ul7oPdN0G23G`Ek(y*z zr?@b@!y#6sSxLy=`Gv5Otq5|9n`w8=B}0LA%Equ*Z$h8#dm2Hwtf8GWtQlE($@Kb^ zHre~aq_E7wcNv#;^;y+Rg}u?5J%~{H=NAAW0D;74;;~9-q87o>*>^3=D;?OB-3pL# zwOetIsg;ZfihX{#H0VfSB1*jN-W*YKHG6hXOQX9RF0wa|Pv%v#AGN^#8gJ;<$T|Vx z1Bq8n^NJ(2b7sv8HfMe~%($)c&xBUfY$cMrCF-CWx-b(TE2ed q$N@Zm*){4~Pr9+qh}B4ED@xYe@abhZV+#AW^2AV(xF6*x7yJdCpjny# diff --git a/assets/cn/retire/TEMPLATE_BOGUE.png b/assets/cn/retire/TEMPLATE_BOGUE.png index 3eaaf159af748fbc22cac1edd99a6f85b4d4b91a..f6fb845455a365da48b705dcca70f1135a1fda39 100644 GIT binary patch literal 2830 zcmbVO2~-p377m*%E}$YrEHuO&%`({}gAu_Xi3%tt2%_R7nUDaQl6?JVX#*MW`T(q5?`)I5mnWqJ&mKWfM^71cB4`Xxq~{Gns#8zWd$pF8@7AS?=#U z*2c*OgTajDa@c|B-NkrWnWDcJ0-2rY&04_;QDHEnCmJsk%z;B#4922Z$_rKp`z-^7 zh>Qq{5CKe#l_^j(1~cC?RsjhkVKq(whfC!wd|PoT9w!yC@T=&4WIx3sSR&=tygVhi&Ru&~!fw3(7ATNlnjju^~+#p09$-;XX9pZxhmg5#7 zN*Ko^k_kdG8NkhB5&;@46woMhaTGFzLINlxGKByzL4X3%Xt<#RkGfNe#9$zM@sKn0 ziG`P_)e4YA(rUFtEtQBU!$|;>$wUcA6bb=F5L9t;H55ybtELV!uwj)@DOISYh#Y5R zgan92&BCKnKgA$ZjL^zeLwQ0oMv8?LB!EaZ#xw{N2}f`WjWTM`xkyNYqhJ{7oqk{2AL*epyAJB!c+nUGTM{H z06|2h)2SkeB4E&j!}bA6DY~_wsDI64+;GO0069_>TCBLC9kCLQ9$H07af4j|LPBGA zv+zP=Sz!@==(Y4S8Te-re4^D#V3hPP%KZtZLd0qnWyN($V7(a zD76xuw?L*H4}&r9;j+DWoRrj{yF1tL9r^>Ad)vhFOjTy~Gggbk5q%Yp}L=Kv(u<6-phw#X!yUX~)-pbvkRan_;^)#kOHZZtBkN z>|(uoifx+CrwbEhr-aeC^^&;RcE zWN*wp483hC_jKeGL_Uh&85bX9#`-CK260c7TgId{X2~ME8y^j(E%k41-*ljtn=A}? zcI_NDCohF>ZI*6=nZ0nVyV;(F*llm$J}ya;i{2#nO`pDy!#CV26pQ&X@&7}zB1lPg zx5_7cn`b_4e?r3K^Qr5%6o##aqZIKbrqhD?tG8lPW$U@1?v#sI^O$sY2QIM@b70@H z1Z{NbgTrRYHe^ZA9vfnhjlrynvnB6FH}7lRA`?1pw4If?IL1CY`nYLc(`n|mEDr}u zlSJ|2^r+Z&L)bSRmsRs4G~e&K&|#lTsNj#s>V!m|dLCu1(l>UGU__ z8|;Or!Cfowx6biRcYP+U4l>t|wkJBYV=HTgNjbL6mmSPaw7ZsU)JNJ1)ZN0{yZshGj`E$r%()lh$ZG41)Lhr3Vptn&jY zo{8sO-;$@#7?to;I-}O(3Sn>h^^eJ^&#Wyciql+PMp`^w?U7@GjhJCs_G+LYE87Y8 zbjezJ4g0>XdsgV)^z{o&%!2w%w^7%s-*!g-5R`Ce z)8&Ja?tN*crCZ0{DcnQ~O|lwy=cw6XZ9O$`K}xG_y<^zTnFD<%duMkJ?AMai#g0Yp zbF4X*?*Tr(xh^c&@#l`Ra<}%QkM6#kAKK8@m5<%!efylRNx=rSWJg0Fqt#W7OHH*B{*ok8+ zec$b0lM@`Yt*OlMjjJf+W_w=JLtl?}ORALzM{}^-{z&fbvJ*Q)S8ac^%C~#Q{i4ar zEgLRp)uhu+LH;;m8Uu-f=T&eVX0D`W6m9wCRz|^@`JInTfc~Ze=l2H=pLqD8PvR}k zb^&g9v^{b9u}L3Nx_44rLxk?dt0~t~8~2%vn=lU7sDH6>mUHs)O?U6Q_zTk<2f!Tx z4)Fo&o!7*->nqQdZf{~*oIF1dwo~+#ik#>Z};q9es&;kIltC-ptm{J-7s*5gts3r{kX5TKZSqh zSam04@yKgoQTLM)`lW9ISc|7*AGDaz`Z2t@AkFjV5|Fsg%|Cfo%U6@DAKVwvQjVMY zE_G@=5P!WZ4~sMvr-=*tiZxf&jDxKGk1t*N*!t+AYvsY}C40FwyRP0lrjrCf+fQX2 z&`;T{ldpA}Tesuk^BzGyc1?r6B;VqJyO(A7OAl>}q?+;0)rr@+jj;QK&bwG@(L|9a etyr5mP>R{^hU-+m3R-6T$IA8bXXkpa-|`#6tyeJs literal 1993 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 literal 1205 zcmex=`&P}AcMV=Xt8Ueb z(`kGvx-Fis85`GL)2aOQ ztt&2{TD9oZQdQjx7hH>i?_<@@#LU3R0@2P4(tg=n;?c&H4sIdmrdvzyiQ7BVaK5{s zSJcUqK;1e53`~qHjLghTY|J2+1H&JvorP79O-M0N*szdYNkrKxXyQh3$0n%v80{H0 z?&MKQvtKg*$>iWzPqWCy4prMGu8@1uyz%dKhD|3P?l?Q8F!}Ms<+|3p{V#61&y}ff z?6}`pn9=vUX6YvO!%CMnYH10| ztQ7u){ajOwjK88+!0l_KdY_)eY`gGA8cqSiSQCNNzl+zmpD=xC zQ)J?|#6o8c|2uZKebby4n@^tcUF_S@dvz6hj_$YE zR=0oTVM=uI@7dwEdZ(IW(eJ6!Rj=7MN?%oA3@yLGpgrqm?EQ!L?%n%yYxS-*Yu1Q% z3BTc76MtETcbT8a-rbugZdZP}@Xk4#&9lx$E?pM&?~JC$<0-%DnRd4GOjX=^@|NqH zcdGu1H#V4lxhyyN?!8#$MiVC8_3wLso7VAKwcmdGY(f7L##Mp0mT?-LSW?RS;>t9G zPVWwZ?Q_db&n9l${UkikWYq!}4yl_R4E4KC-hZN#a@;eszEFI%u-B_~Uem+BUtH}m znfFYgf0C`~iGx=Q#b5kqnCR8L@YY0!^&$rTK!HzP1HOPwsv>{b9QPAQYUi*F|jO}FHKnGzi4?03Fu@ub{M(H2`yoD4gcsk6m(Py3fmzF&pz3fcd^ F2>?25zxx0H diff --git a/assets/cn/retire/TEMPLATE_DOWNES_1.png b/assets/cn/retire/TEMPLATE_DOWNES_1.png index 0bc67cb94ba09e4e4f088c342c5ce99337a85f91..9effcd06db32a864b893c82b4102387d526df2b6 100644 GIT binary patch literal 3282 zcmbVP3piBy8$N6d6YSm6lky}Vs zD3wTID>e z(L4YEG@Tf97IHRG9O}x*Z#j$d3OUUUX81?|Kx4k*Py({D4FN!nRHWbJg(a@t+SI{UvmxlJTX5yH^4iJyeh!8{W5t}_Y z5dsc{i(a!DwJMy75C|bDhzb`5i6qo;8u|k-6 zL-VB4U@8_XlgX@PL@QVvh{aPV6oddvAYc##MzT{R1;a5SiRmW>IwawU`N2{?EJ7(5 zK{gyJrJ)h2A9D}}&(ew{Gj&2Lh7AXUv3M(-BBu{PE@u`O94Zd_5S+`wLP3xa5=kWp z7C(y(=D|`}!h`>UdiL?}0wA?zGG}A_sTQGdHiSg#7>1-VQ;5hT=dLs{-0Ff-(~QTR>p%6(!a6$BTNDZNM)cHvJXV6^^fg@{VVYjFzoN8 z|2y;kLi!)u@4rZ&DJzEuiUJ{IR$|eLWUz{%^3fFRAN~69>^B4G6C9apiskG)MJ{G1 zG9*H%#mKzPO&s?J0M%+Iy1fTuztGc#x2@6W{cr@g=J4u5BB}zG&skK8a`7g)^we7Q z=I;I8+kEfV@}7NugKeyi*FAl%8?`8@*&Tix2byRFw%?==vd&X82GHJVHUmbzL&S5S zvR-q3*IUhd`J+X|^j!~q9r=VQEn;)?_&B*cvN*7QQfHz=4&cZ`wEDO#vP|{pSvcb` zK?{flwtu$vS(M-Bc8|^{&(Q%&p6qbh)BfGz2!b4KG=DDI;*Lg9{dBBgP5R_dM)qcT zS1WIA)4#TMGTvGBn*KRu$K2}$7D^-2Nk$y!%kfPsjdl%m$d_+bVdy9+%TWLc(8)VB z6hL*G?*No#w699+t4f(av=l(c)(%DG7c92B<_`pRO}()$S84``JkFk94gr0h!--?s zl4!lY8md?1%bwA?w)a)@icvZ7*L>C)H>)=q(q8we&}>%3#lC*8!d;|ha9yLj8}mZV zLDri>7c7IEJL5BBxD^S>8FJp4oH+%_X>j&96Hxw6{j=}%gxW`b+Tw#m1o{R*YorC@~4O0AGM^`HqU7+d|D6C zjV0UB6B|M=_X?uhceMKG9@Mo>FiAY!7;TSDcy;v6PYvWZ7RhIu`LsYk+rpeg`d9Mr zbsE>9a%uJF4EsH^HAC#^6&J>Z8P>02*6}Lx%Gd!X9Cap_d~v#;^Xi$zcDsgj_Sb3-wQeElIwqemPh4>AMpD`)^X@^fb=WJZ zTTHk6Y@j>k4L5#2o3@rmt(+m?4_i{Dw6Z{3|)m-5yfS{j#C|0wh8R(p-y{sydP zoLJv2t`MB8TM;=XwQ7Ab_koL{4mL)(>`ImC#ga3ac+0+lD0|u!J;l7pYgJo~9$WGi!|9xIkEPWY8o0}F#9=EU`N(Kc*4=`IEE!MD zZdXm;kM{VM9y8RvV^xu_DxOuC>{pFVE?Cye{I#UpF{7%BEkzsr) zN3_01k1H=RJF%o^q_4WdFAD;O>{a~VJvL4vY%1%tiyFOg01lPc?!L3oU0tu;d2soI zdp*TRY`X7R`p9g~=kFN5t>lU(Y%GrHzp)QhcK-9)v=QuA@4DI}!p>>rKD;#?-Rir& zF#M_|y1hp5*i2oi>5Q`h^L2_q4lT$nxLa09JbQ<}eN?LBeyG2xO-z8*vqyV7(_S99 z5bbO7aIAI(iJ+=tuB^7U_Mq$H(pVs4sk(k<_R7xg$5Su*9%9jB zU85uY)tjC_vh)R}PYyFcIexlb*X{YE z{H5mQ!U+!tqHa`Ws+zaJD9z_K@MSDxs~}&6*fF@!?&}{8UCrKqQ)W4en}$vtXCA6G zT&_9y=$`(K*y~b@s7dV$!@EtB7kfLYtk)N4KhxG|UKIQCvL|a=yP=WCYiur!R{ZO5 Ma@|NDL3_n-GY=ktEw?>W!2^=fMZkg&HU+X5g6 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 diff --git a/assets/cn/retire/TEMPLATE_FOOTE.png b/assets/cn/retire/TEMPLATE_FOOTE.png index 47ce0006f4497d90313780e429c852e4471c9e3b..241f9a75bf7e78c5f3f3a89cc354de1a61a4ab23 100644 GIT binary patch literal 2923 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 literal 1746 zcmbu9XH?Ty7{>qqY<3nUARI_SBBNm>mWF@<6q%)Arh?@ZMX>@Zdsr+8C>TLmp~guK zLqIgt#Yh!HK|nEJKmq|o3L;dIQ4q1325CM0-uJopocrDnzw_LC&ig3k$}s@#<>u)I zfFJ;XDgjCbkPRT#3yDOisjH-=siC2%h1b?m32%)145wPg8;Be9Roj+IB2jIb)--FT z>*md_Tt9A1Oey$(0ZIvgK>_B#7AS}TAQ%ve0hPZ21^@tot~vcw2qY8+M?sWB0BZfd znu_Z@S*HCfGrY1{{k`kyl1=hQ8|Hm@r8nTBHzSJ%6Z`*o$Yee8KblR8{gz_W>vEDU z-BOjVg6o58@K0pb0SX5pFyJE_f>!mUzjmL%=A-g8M(K9f8ri#CCkLv}4Afibt=KPjgt4FEb(6Kw<)J`X#C{WZMg1u9%%DypD$4V;O?=cr%kv` zqj}fLI09i_!5$ZW0z2Hky(VSzcxK4yjj0nuA9$v|YN=nR7M~2cp?EBdx~(Xf+&AX2 zIByc~^h*Su41EcPl)d4g%7&3({8k3eupyBQ}6aE^Md z;WeI6%G&Os-#!}Gl~(MKV5MEAnb1!!WQij+PyFGgbNs&TN`B1E<%?-~*KVopz(VZX zEDj0S?mx4Hns{^^n-x7a?L8Gt4yci}ItI@1xub32OKP--V=LH1T1rKuiywVgvG`0- zc1G`gj;);23U9i7vSJKQ_t;g(Cx4z~#kiSXJ|YU87j{zMphn zybpO9KT^X^R|2*|8TV=JWp;@5yn$*EDXKhzKma%l`fpT#5C8*(p|Lok3(1zwz?H&@wBj9{a2UtfGOZXv|j_bkEFhWE_BOzZd2 zaL2pE(WFe)@cthJ^$U(omoMDL3{(|`il<}tjqiV7DE2v6A2Be9dv0=3W#4SgzADz> z@c-C{VqjRb$~zo~*Cmn}oBU$eV`}XMGOYF1)hxS)(8V6sV$RX0@Qt3KZDg{&6GJTUlbNm3Wkji|N@dk`G`7B?0H2tpPnSG}b+YL8Q;2KBq^(uDKyzlPg4_8AIo sg2K@df_Y?+;E7>y6%{ATm^N@qn;Y%qq?~yz+LO*x0v$gzq$>yi2Aj^kng9R* diff --git a/assets/cn/retire/TEMPLATE_HERMES.png b/assets/cn/retire/TEMPLATE_HERMES.png index 30ac15d94c4a9d0192a33d318c376652703786f2..7b20af71dafdff8927f66595ea708e9ae6f54611 100644 GIT binary patch literal 2847 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 diff --git a/assets/cn/retire/TEMPLATE_RANGER.png b/assets/cn/retire/TEMPLATE_RANGER.png index 032daadbf0713bed88b53f69bdd9197882fd1f53..9e75ea056ac43a8c112b1f4461cbbfa4a62f79ff 100644 GIT binary patch literal 3092 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 literal 1486 zcmbu9do+}39LL}Ho#7=$Ge$}b&5%nXGefKr$|Y=ao!W$^m~=*nV{%z*+nl2t;~vJP zQgVr0ikjLeF(KmOMz-MZ(!$`A~$LJ%tuK`62}ZC;phda0S4HmF~bGPZB~fg!bli1ScwX5_$A;Z2$| ztYBH76*Gc}6)CNC1wse~4x_1zcg7OW?DeB+5qx2^QS7;#zlR1LfrnIAnUncLve&q1 z*qB#qQlfXTIr?^CoChf8$Z#hDL%MzHy$8P*m-I@+A&}ElQR4bI(FDCJsm+$R7^05l zdg%ZYmvzjz(H0#6*t?Bqsoyhb!Xmzg#18I3aa)Et?=0hYnyW^eFsWIYGk#A>7_%(T zCd>rp4rQl(OrL*eGTEhExGCRY4j1O8ne3+{$)DJkpp=+Uur8%t${W!Q?TTcT#V&qv zM~u7Vj+TD2d%u3Xn@YK3PMw{8>7PNQ^6K2iMH$XtC)?pq4ytWY#BctUfs_OGW1pJ`>vx<#+D*J*EBoF1pFL~d{i&)acGa~_VKN= zVK3fF&l|vFay(RDjGhyg(RgV;$+I2LjH&m*X+(_;lQtGhU6EEIBAq_-5X&6(DiB~o>{dVZrs#(d69w%0-$nV;x>3R6J+2N$G z_nNhS3(@+(VgfUYcaK-(d`16>A_!p+nn*kvOCXY**Ww5&-ul7oPdN0G23G`Ek(y*z zr?@b@!y#6sSxLy=`Gv5Otq5|9n`w8=B}0LA%Equ*Z$h8#dm2Hwtf8GWtQlE($@Kb^ zHre~aq_E7wcNv#;^;y+Rg}u?5J%~{H=NAAW0D;74;;~9-q87o>*>^3=D;?OB-3pL# zwOetIsg;ZfihX{#H0VfSB1*jN-W*YKHG6hXOQX9RF0wa|Pv%v#AGN^#8gJ;<$T|Vx z1Bq8n^NJ(2b7sv8HfMe~%($)c&xBUfY$cMrCF-CWx-b(TE2ed q$N@Zm*){4~Pr9+qh}B4ED@xYe@abhZV+#AW^2AV(xF6*x7yJdCpjny# diff --git a/assets/en/retire/TEMPLATE_BOGUE.png b/assets/en/retire/TEMPLATE_BOGUE.png index 3eaaf159af748fbc22cac1edd99a6f85b4d4b91a..f6fb845455a365da48b705dcca70f1135a1fda39 100644 GIT binary patch literal 2830 zcmbVO2~-p377m*%E}$YrEHuO&%`({}gAu_Xi3%tt2%_R7nUDaQl6?JVX#*MW`T(q5?`)I5mnWqJ&mKWfM^71cB4`Xxq~{Gns#8zWd$pF8@7AS?=#U z*2c*OgTajDa@c|B-NkrWnWDcJ0-2rY&04_;QDHEnCmJsk%z;B#4922Z$_rKp`z-^7 zh>Qq{5CKe#l_^j(1~cC?RsjhkVKq(whfC!wd|PoT9w!yC@T=&4WIx3sSR&=tygVhi&Ru&~!fw3(7ATNlnjju^~+#p09$-;XX9pZxhmg5#7 zN*Ko^k_kdG8NkhB5&;@46woMhaTGFzLINlxGKByzL4X3%Xt<#RkGfNe#9$zM@sKn0 ziG`P_)e4YA(rUFtEtQBU!$|;>$wUcA6bb=F5L9t;H55ybtELV!uwj)@DOISYh#Y5R zgan92&BCKnKgA$ZjL^zeLwQ0oMv8?LB!EaZ#xw{N2}f`WjWTM`xkyNYqhJ{7oqk{2AL*epyAJB!c+nUGTM{H z06|2h)2SkeB4E&j!}bA6DY~_wsDI64+;GO0069_>TCBLC9kCLQ9$H07af4j|LPBGA zv+zP=Sz!@==(Y4S8Te-re4^D#V3hPP%KZtZLd0qnWyN($V7(a zD76xuw?L*H4}&r9;j+DWoRrj{yF1tL9r^>Ad)vhFOjTy~Gggbk5q%Yp}L=Kv(u<6-phw#X!yUX~)-pbvkRan_;^)#kOHZZtBkN z>|(uoifx+CrwbEhr-aeC^^&;RcE zWN*wp483hC_jKeGL_Uh&85bX9#`-CK260c7TgId{X2~ME8y^j(E%k41-*ljtn=A}? zcI_NDCohF>ZI*6=nZ0nVyV;(F*llm$J}ya;i{2#nO`pDy!#CV26pQ&X@&7}zB1lPg zx5_7cn`b_4e?r3K^Qr5%6o##aqZIKbrqhD?tG8lPW$U@1?v#sI^O$sY2QIM@b70@H z1Z{NbgTrRYHe^ZA9vfnhjlrynvnB6FH}7lRA`?1pw4If?IL1CY`nYLc(`n|mEDr}u zlSJ|2^r+Z&L)bSRmsRs4G~e&K&|#lTsNj#s>V!m|dLCu1(l>UGU__ z8|;Or!Cfowx6biRcYP+U4l>t|wkJBYV=HTgNjbL6mmSPaw7ZsU)JNJ1)ZN0{yZshGj`E$r%()lh$ZG41)Lhr3Vptn&jY zo{8sO-;$@#7?to;I-}O(3Sn>h^^eJ^&#Wyciql+PMp`^w?U7@GjhJCs_G+LYE87Y8 zbjezJ4g0>XdsgV)^z{o&%!2w%w^7%s-*!g-5R`Ce z)8&Ja?tN*crCZ0{DcnQ~O|lwy=cw6XZ9O$`K}xG_y<^zTnFD<%duMkJ?AMai#g0Yp zbF4X*?*Tr(xh^c&@#l`Ra<}%QkM6#kAKK8@m5<%!efylRNx=rSWJg0Fqt#W7OHH*B{*ok8+ zec$b0lM@`Yt*OlMjjJf+W_w=JLtl?}ORALzM{}^-{z&fbvJ*Q)S8ac^%C~#Q{i4ar zEgLRp)uhu+LH;;m8Uu-f=T&eVX0D`W6m9wCRz|^@`JInTfc~Ze=l2H=pLqD8PvR}k zb^&g9v^{b9u}L3Nx_44rLxk?dt0~t~8~2%vn=lU7sDH6>mUHs)O?U6Q_zTk<2f!Tx z4)Fo&o!7*->nqQdZf{~*oIF1dwo~+#ik#>Z};q9es&;kIltC-ptm{J-7s*5gts3r{kX5TKZSqh zSam04@yKgoQTLM)`lW9ISc|7*AGDaz`Z2t@AkFjV5|Fsg%|Cfo%U6@DAKVwvQjVMY zE_G@=5P!WZ4~sMvr-=*tiZxf&jDxKGk1t*N*!t+AYvsY}C40FwyRP0lrjrCf+fQX2 z&`;T{ldpA}Tesuk^BzGyc1?r6B;VqJyO(A7OAl>}q?+;0)rr@+jj;QK&bwG@(L|9a etyr5mP>R{^hU-+m3R-6T$IA8bXXkpa-|`#6tyeJs literal 1993 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 literal 1205 zcmex=`&P}AcMV=Xt8Ueb z(`kGvx-Fis85`GL)2aOQ ztt&2{TD9oZQdQjx7hH>i?_<@@#LU3R0@2P4(tg=n;?c&H4sIdmrdvzyiQ7BVaK5{s zSJcUqK;1e53`~qHjLghTY|J2+1H&JvorP79O-M0N*szdYNkrKxXyQh3$0n%v80{H0 z?&MKQvtKg*$>iWzPqWCy4prMGu8@1uyz%dKhD|3P?l?Q8F!}Ms<+|3p{V#61&y}ff z?6}`pn9=vUX6YvO!%CMnYH10| ztQ7u){ajOwjK88+!0l_KdY_)eY`gGA8cqSiSQCNNzl+zmpD=xC zQ)J?|#6o8c|2uZKebby4n@^tcUF_S@dvz6hj_$YE zR=0oTVM=uI@7dwEdZ(IW(eJ6!Rj=7MN?%oA3@yLGpgrqm?EQ!L?%n%yYxS-*Yu1Q% z3BTc76MtETcbT8a-rbugZdZP}@Xk4#&9lx$E?pM&?~JC$<0-%DnRd4GOjX=^@|NqH zcdGu1H#V4lxhyyN?!8#$MiVC8_3wLso7VAKwcmdGY(f7L##Mp0mT?-LSW?RS;>t9G zPVWwZ?Q_db&n9l${UkikWYq!}4yl_R4E4KC-hZN#a@;eszEFI%u-B_~Uem+BUtH}m znfFYgf0C`~iGx=Q#b5kqnCR8L@YY0!^&$rTK!HzP1HOPwsv>{b9QPAQYUi*F|jO}FHKnGzi4?03Fu@ub{M(H2`yoD4gcsk6m(Py3fmzF&pz3fcd^ F2>?25zxx0H diff --git a/assets/en/retire/TEMPLATE_DOWNES_1.png b/assets/en/retire/TEMPLATE_DOWNES_1.png index 0bc67cb94ba09e4e4f088c342c5ce99337a85f91..9effcd06db32a864b893c82b4102387d526df2b6 100644 GIT binary patch literal 3282 zcmbVP3piBy8$N6d6YSm6lky}Vs zD3wTID>e z(L4YEG@Tf97IHRG9O}x*Z#j$d3OUUUX81?|Kx4k*Py({D4FN!nRHWbJg(a@t+SI{UvmxlJTX5yH^4iJyeh!8{W5t}_Y z5dsc{i(a!DwJMy75C|bDhzb`5i6qo;8u|k-6 zL-VB4U@8_XlgX@PL@QVvh{aPV6oddvAYc##MzT{R1;a5SiRmW>IwawU`N2{?EJ7(5 zK{gyJrJ)h2A9D}}&(ew{Gj&2Lh7AXUv3M(-BBu{PE@u`O94Zd_5S+`wLP3xa5=kWp z7C(y(=D|`}!h`>UdiL?}0wA?zGG}A_sTQGdHiSg#7>1-VQ;5hT=dLs{-0Ff-(~QTR>p%6(!a6$BTNDZNM)cHvJXV6^^fg@{VVYjFzoN8 z|2y;kLi!)u@4rZ&DJzEuiUJ{IR$|eLWUz{%^3fFRAN~69>^B4G6C9apiskG)MJ{G1 zG9*H%#mKzPO&s?J0M%+Iy1fTuztGc#x2@6W{cr@g=J4u5BB}zG&skK8a`7g)^we7Q z=I;I8+kEfV@}7NugKeyi*FAl%8?`8@*&Tix2byRFw%?==vd&X82GHJVHUmbzL&S5S zvR-q3*IUhd`J+X|^j!~q9r=VQEn;)?_&B*cvN*7QQfHz=4&cZ`wEDO#vP|{pSvcb` zK?{flwtu$vS(M-Bc8|^{&(Q%&p6qbh)BfGz2!b4KG=DDI;*Lg9{dBBgP5R_dM)qcT zS1WIA)4#TMGTvGBn*KRu$K2}$7D^-2Nk$y!%kfPsjdl%m$d_+bVdy9+%TWLc(8)VB z6hL*G?*No#w699+t4f(av=l(c)(%DG7c92B<_`pRO}()$S84``JkFk94gr0h!--?s zl4!lY8md?1%bwA?w)a)@icvZ7*L>C)H>)=q(q8we&}>%3#lC*8!d;|ha9yLj8}mZV zLDri>7c7IEJL5BBxD^S>8FJp4oH+%_X>j&96Hxw6{j=}%gxW`b+Tw#m1o{R*YorC@~4O0AGM^`HqU7+d|D6C zjV0UB6B|M=_X?uhceMKG9@Mo>FiAY!7;TSDcy;v6PYvWZ7RhIu`LsYk+rpeg`d9Mr zbsE>9a%uJF4EsH^HAC#^6&J>Z8P>02*6}Lx%Gd!X9Cap_d~v#;^Xi$zcDsgj_Sb3-wQeElIwqemPh4>AMpD`)^X@^fb=WJZ zTTHk6Y@j>k4L5#2o3@rmt(+m?4_i{Dw6Z{3|)m-5yfS{j#C|0wh8R(p-y{sydP zoLJv2t`MB8TM;=XwQ7Ab_koL{4mL)(>`ImC#ga3ac+0+lD0|u!J;l7pYgJo~9$WGi!|9xIkEPWY8o0}F#9=EU`N(Kc*4=`IEE!MD zZdXm;kM{VM9y8RvV^xu_DxOuC>{pFVE?Cye{I#UpF{7%BEkzsr) zN3_01k1H=RJF%o^q_4WdFAD;O>{a~VJvL4vY%1%tiyFOg01lPc?!L3oU0tu;d2soI zdp*TRY`X7R`p9g~=kFN5t>lU(Y%GrHzp)QhcK-9)v=QuA@4DI}!p>>rKD;#?-Rir& zF#M_|y1hp5*i2oi>5Q`h^L2_q4lT$nxLa09JbQ<}eN?LBeyG2xO-z8*vqyV7(_S99 z5bbO7aIAI(iJ+=tuB^7U_Mq$H(pVs4sk(k<_R7xg$5Su*9%9jB zU85uY)tjC_vh)R}PYyFcIexlb*X{YE z{H5mQ!U+!tqHa`Ws+zaJD9z_K@MSDxs~}&6*fF@!?&}{8UCrKqQ)W4en}$vtXCA6G zT&_9y=$`(K*y~b@s7dV$!@EtB7kfLYtk)N4KhxG|UKIQCvL|a=yP=WCYiur!R{ZO5 Ma@|NDL3_n-GY=ktEw?>W!2^=fMZkg&HU+X5g6 z03cMr)+mq)Aa{g9A%)OTiHZmdi-<~#i9;p5PfAt_TKg1K6y%_d*TCU4@TPjYdZr`` z3zCP6M`UCH_7PJZNpdkublKxy!x9v5u=&y-fPVmVvpSW@}4kO zTS-`tT3umU9?xghh+=Qd;#>8Jp(4N$47_ zk5^GPZHW-!*G>-5#sm`bEE*5^xTn}RKfgl>@439{Da^rBZsoh2d2Pdfn=3JGFh$j# zaL8%Pb}h=xJ?lPAp?WoIMa!$SSLj7r9_g_E$ef?XolP2Z@Y7s=9|3x-uWc~%35R?O zwHx&Xrc=-r1pX9uK8V6yb(-U>Gqr1rSaB`=vKD)bZ#q@VP%bP50LG0?hlgrPezZsEC$;(X7v^zLbUILUAOeKLVaVO=Ko}fAU?f#=cxwSEm#AE6 zL)X(u$$`pyIu5KeeEx8mp2G(F9*}`OIN#LfsyI&Ek<5da}c%s62r{PExgx zhVAo_62X7kt6k0?#Ek1^qsV=HuSo4q(*S1AIp2ecEG0CVp;21S;-!IB`Y+lXV0LrZ zfQB-8o{3R3Jq?Y@N(nUjsnfHR+@KT?9dh{fUmrqOpRfjLx24I<{HjLQA61|%yV3iV zm6Ke-7*(f~`^bjWa1Gm({9`e%^pWUeP|f$1<&?QGVJ7h+$JMJ%Kk@`CUafXb&+NfF z9fRXkoj9JopPXji#oB8X>M;bnCeUjrCNVPO^G8E5ps)SUxZCx7=VxUZ zA3{Cv=bL(6Cw4QsiMSY^U5h;Sm&3mSDWI7SkImr{|i#;Fo_ zdL0BUfiR_O2`a`Dc5AExr+D6oqC|s5cIB@W?+kU)vNf%E)Nr!I#_y$iBxk>$cGY)qgaHxbG<&f@Z=iB=IZJDLjF-5 z#mqkRSVgvpqSg&}8v|k2!7EH6#`@^cH=`h8dkpLfgaL32LK5?otVoPoH{MKhXQm{X~)9GySwBDE}IuDdrha3 zHZxBvIzH*}p~t0Xo``pB-+Rkq#_yLIE-sX*l`f86e2g@2R^nE#Ue{eK;-*P!xgZ zL84$79}^))(EzZ{I!4R`!(b^U7!DB#nb@J~S}aBYF|pp}93n?-3x^6E<0SB=I9Dzh z7Y5QHto3@#x)=sZ5CKbhn3#xgA;O4ZVyAf-=vwiZfW=Hhq+v`fOW_dX!*R#hiXAOQ}CBVeHvL9wJc ztTXCD zs7ymeG-8IW1m;Oa60S%TK3ggGS;-hO6;H;PdJBY*NQRjG$^d5bq%aeUR*i}yqF*|f zNM?{J3=(w>k;WhrKSDVoNWhQ%KPZXBAQ2fv`fs3U&p; zin78GcIL6*4>Iu2BKSxv3x!eAzbN-d7$V|JWjqPY3PH2=x9vpuGw}#7`md$`v*P`U z^xwDNzmYzZRxp$&41v*ENx&+CAt;8*$D$B^U$5zRzZyWZaCE9EmUHtIy_uWHun?t| zp!2qbNaR+Abv`iSc)C7)$3-gbJTGJ`CFWhriRDI%l{6B#+5ApJ|Jw752scxo zEGRJlB+ul9PvZPt36DqSHJRi#c^AA;(^~Y&x)cq!qaEAbqdI-1$G+)!&PPh^JQsU; z95gy5{kcR+3jtmFf7!XPZUFCpD8xQ%N@eg$&g=T5sC$f7O*1x-xV+{fKY`X?B;VMq zOKI}qEFMm>f0S1Qr3F--EKyE4(pioi*c#o}+72}b`LE^zDi zchM`(!eV3iEp9h;fF-w=+1zytZy!jWpQf+*tUP|@ZMtQ>OTiWY5oA%7?EH_JW|?OuCkL($s!~2_zHM=GIptBPhK;l86WGDCGn zT`u2giH|#?oD`9!c}?r8i^FCHQf6{9dH3~W)v~TC(Si%i+9U1Fg*3f$Kh%yA%^mi~ zv0i^Vjw9sgzTe#~uk~g+j!~k34*Qx0qr~()C99{}dfMryoIOvMpL`TKsUPkg+*LkU zi@Wg_r0_I?_)APR5;jJ2zaaa{QYYTOhV3NwIY0u~uY}b!SDnY|i-8U}G@n1wSiY9i zC&H(<$pywN(`B*Zz;&$^E0uFr-%3_VTD+3&)pzy$e&u`{Rzk{#;yRBNvbBYNsos>s z#aUxM*5W}j0^gQ41z5)l!|s}OFR z82L2UwvOJ#x*Hf?EkE{-6>uH!TYxFLb4laAca&^xOU`=AO{=2uy!|%vujpZ zS{a6wmGs={sy!F%+Vs4o#o*o72KrWvZ39o>ROTK&G7HCWIg2qu-7)PhWLnE|#eq z5|T&i4#w-JRW4nkeb~I?&H5I#3H)S4T1~e`AooRG)KvG5yvG03rtMwCjvxNMMN2c; zDSf@h<(73R=U3J3IzsOcWn}GfDW--*RPs}~)rOA&^yve+!p3hippci|47ptfI zZDK=%nXh+R)pujBGBG+ZbQlD$eBWYcB~X{}yiu`sv#5&f^?>?jwD%+j?(){r;m(@G;jAk#1yQdIDFo zsm#wy$xhcKaF3F9z~mMEj!~fZQt8X*DLJB^$m}zsK3ZYMqu!_f!;L+YhvXgAQRBB? z=?)z~v(Q2fNY-hKEwFZ!6H*6k%q~Bn2ampYsJZv$nf3u?WveeWF=FYrBR`p5h#$;a z0i8bI*=}1<5jY@yu>FXou18oY92;^!GH10DQ7ml&nw00A1++5EE5vdS!1V14VWNTa z$PG)vxr^zn&YIFrVzITl(*7+^WNO8OpH+s{5eq*bT(!}+?}q~=6;rAvUG1JBWC6@}tI)+AV z%hFZuAx?#Ga?21|r9u)rzv}dy=lpg4IG^|X{pb6~`@Wy=^SrO3OECZ-*D>4~00aU6 z5DY%Eq-*f`Va z&RaHZ2@TDJ{9gh^HGonD%zGu%Fo1u5?BcEZv{|M2?8j87l0x`T_Mu!DN}lfA3a*@jo3uJefh|m=@OQYPrY{z zxdCo4mNgNBA+8wkH^-`?g&C`xj38y?DL2?>>5%n(7!Kb9exo_Zqu#T>xH_1sP%47 z!2+-4Ya_){*4&AWJ72rM(H}YEK|>8C(j$#fnw3HgUuM4vj=C;qGm=UlRmF?7jML}d2&Vh)2L(#EmQ?hFG8Xuh zdwLrzxVSe(@yVK%!rb)eMB3eSSF+QjlsxTg7l!RfDkx>{zdGymf*h67kTiF&$l~!Y z9ZsfRT;mI`_U4a$dH%KdMd_EZR~oFK9MQAYS$^>w$O~Er3$9H``4!tz{Z^am4kF9o z^Gsp4PbnrlXSS*M$0Z`mQQqnE+#`c6F|LnheW!*J(f1$v0Ga1C1@7d zF4KG&dkgN^cRIY7RqdhECqB*D5Pf09!3~(#`{Ux*OGn5N1yOQ4juA<0k*O3Uk0V6T2*R zToB=-Ucq|sut@zzVwKZtB8hw&YpY*+SFW329Z7yRTE)))oVzE=c-%F`+WZ57BLfNM z5o7(Ola!T`ZI43pMsF%7>0hgCgx9nMyV69?lX-QrH5gm_fzQOP!mY_A7nYOg8GwCZ zf2Io0`$M!df7Xs6HA8on>>|L791ex&_3w`9m8Hy>qKKmnHnMoyDG5TY{(Qj|JvFU8 z8X@y^iHEdD6jZQ&k*8a^p6dGLAJ2v}hay9#`s%Xq{P2Or+EKIm*S1u;oUg@RYK~L@ zy+^)6zIe_RN|>S-H4O74RcI4jax7vc`lhx}6}jQH%_aG6_#25$O5HQ>%bDizIHhFZi)dZI!b{fL%lGq@b zLb0r|B0SnyvLYMB=A|WdKBj9u5q0}1Q{oGW0n;(`G*{1zLaW)}l3~G;sDRq_3=CnR zF6~gpRuZ-K9M>wC8<*0;PiF38C!Z^G0R7-m0PMS?e++@`gHl4{DM$jw(doM(ur?il zPmOu)ake?{X_dK#T_eRY=%*fj)VP)qFSCy#;l3Cb{|>dRolC7HZLbC6A%m*<0dz6k zy}9CW<}#^@>bs+X))t5*+iy}3+-KT^PXn)7TV5U&iYJ1dg1d57$ED+_nXPt1=geh+ i+01>p3wV7OoYCDm-IeyKxni?}I?uIf(+duY?!N$Qxymm9 diff --git a/assets/en/retire/TEMPLATE_FOOTE.png b/assets/en/retire/TEMPLATE_FOOTE.png index 47ce0006f4497d90313780e429c852e4471c9e3b..241f9a75bf7e78c5f3f3a89cc354de1a61a4ab23 100644 GIT binary patch literal 2923 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 literal 1746 zcmbu9XH?Ty7{>qqY<3nUARI_SBBNm>mWF@<6q%)Arh?@ZMX>@Zdsr+8C>TLmp~guK zLqIgt#Yh!HK|nEJKmq|o3L;dIQ4q1325CM0-uJopocrDnzw_LC&ig3k$}s@#<>u)I zfFJ;XDgjCbkPRT#3yDOisjH-=siC2%h1b?m32%)145wPg8;Be9Roj+IB2jIb)--FT z>*md_Tt9A1Oey$(0ZIvgK>_B#7AS}TAQ%ve0hPZ21^@tot~vcw2qY8+M?sWB0BZfd znu_Z@S*HCfGrY1{{k`kyl1=hQ8|Hm@r8nTBHzSJ%6Z`*o$Yee8KblR8{gz_W>vEDU z-BOjVg6o58@K0pb0SX5pFyJE_f>!mUzjmL%=A-g8M(K9f8ri#CCkLv}4Afibt=KPjgt4FEb(6Kw<)J`X#C{WZMg1u9%%DypD$4V;O?=cr%kv` zqj}fLI09i_!5$ZW0z2Hky(VSzcxK4yjj0nuA9$v|YN=nR7M~2cp?EBdx~(Xf+&AX2 zIByc~^h*Su41EcPl)d4g%7&3({8k3eupyBQ}6aE^Md z;WeI6%G&Os-#!}Gl~(MKV5MEAnb1!!WQij+PyFGgbNs&TN`B1E<%?-~*KVopz(VZX zEDj0S?mx4Hns{^^n-x7a?L8Gt4yci}ItI@1xub32OKP--V=LH1T1rKuiywVgvG`0- zc1G`gj;);23U9i7vSJKQ_t;g(Cx4z~#kiSXJ|YU87j{zMphn zybpO9KT^X^R|2*|8TV=JWp;@5yn$*EDXKhzKma%l`fpT#5C8*(p|Lok3(1zwz?H&@wBj9{a2UtfGOZXv|j_bkEFhWE_BOzZd2 zaL2pE(WFe)@cthJ^$U(omoMDL3{(|`il<}tjqiV7DE2v6A2Be9dv0=3W#4SgzADz> z@c-C{VqjRb$~zo~*Cmn}oBU$eV`}XMGOYF1)hxS)(8V6sV$RX0@Qt3KZDg{&6GJTUlbNm3Wkji|N@dk`G`7B?0H2tpPnSG}b+YL8Q;2KBq^(uDKyzlPg4_8AIo sg2K@df_Y?+;E7>y6%{ATm^N@qn;Y%qq?~yz+LO*x0v$gzq$>yi2Aj^kng9R* diff --git a/assets/en/retire/TEMPLATE_HERMES.png b/assets/en/retire/TEMPLATE_HERMES.png index 30ac15d94c4a9d0192a33d318c376652703786f2..7b20af71dafdff8927f66595ea708e9ae6f54611 100644 GIT binary patch literal 2847 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 diff --git a/assets/en/retire/TEMPLATE_RANGER.png b/assets/en/retire/TEMPLATE_RANGER.png index 032daadbf0713bed88b53f69bdd9197882fd1f53..9e75ea056ac43a8c112b1f4461cbbfa4a62f79ff 100644 GIT binary patch literal 3092 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 literal 1486 zcmbu9do+}39LL}Ho#7=$Ge$}b&5%nXGefKr$|Y=ao!W$^m~=*nV{%z*+nl2t;~vJP zQgVr0ikjLeF(KmOMz-MZ(!$`A~$LJ%tuK`62}ZC;phda0S4HmF~bGPZB~fg!bli1ScwX5_$A;Z2$| ztYBH76*Gc}6)CNC1wse~4x_1zcg7OW?DeB+5qx2^QS7;#zlR1LfrnIAnUncLve&q1 z*qB#qQlfXTIr?^CoChf8$Z#hDL%MzHy$8P*m-I@+A&}ElQR4bI(FDCJsm+$R7^05l zdg%ZYmvzjz(H0#6*t?Bqsoyhb!Xmzg#18I3aa)Et?=0hYnyW^eFsWIYGk#A>7_%(T zCd>rp4rQl(OrL*eGTEhExGCRY4j1O8ne3+{$)DJkpp=+Uur8%t${W!Q?TTcT#V&qv zM~u7Vj+TD2d%u3Xn@YK3PMw{8>7PNQ^6K2iMH$XtC)?pq4ytWY#BctUfs_OGW1pJ`>vx<#+D*J*EBoF1pFL~d{i&)acGa~_VKN= zVK3fF&l|vFay(RDjGhyg(RgV;$+I2LjH&m*X+(_;lQtGhU6EEIBAq_-5X&6(DiB~o>{dVZrs#(d69w%0-$nV;x>3R6J+2N$G z_nNhS3(@+(VgfUYcaK-(d`16>A_!p+nn*kvOCXY**Ww5&-ul7oPdN0G23G`Ek(y*z zr?@b@!y#6sSxLy=`Gv5Otq5|9n`w8=B}0LA%Equ*Z$h8#dm2Hwtf8GWtQlE($@Kb^ zHre~aq_E7wcNv#;^;y+Rg}u?5J%~{H=NAAW0D;74;;~9-q87o>*>^3=D;?OB-3pL# zwOetIsg;ZfihX{#H0VfSB1*jN-W*YKHG6hXOQX9RF0wa|Pv%v#AGN^#8gJ;<$T|Vx z1Bq8n^NJ(2b7sv8HfMe~%($)c&xBUfY$cMrCF-CWx-b(TE2ed q$N@Zm*){4~Pr9+qh}B4ED@xYe@abhZV+#AW^2AV(xF6*x7yJdCpjny# diff --git a/assets/jp/retire/TEMPLATE_BOGUE.png b/assets/jp/retire/TEMPLATE_BOGUE.png index 3eaaf159af748fbc22cac1edd99a6f85b4d4b91a..f6fb845455a365da48b705dcca70f1135a1fda39 100644 GIT binary patch literal 2830 zcmbVO2~-p377m*%E}$YrEHuO&%`({}gAu_Xi3%tt2%_R7nUDaQl6?JVX#*MW`T(q5?`)I5mnWqJ&mKWfM^71cB4`Xxq~{Gns#8zWd$pF8@7AS?=#U z*2c*OgTajDa@c|B-NkrWnWDcJ0-2rY&04_;QDHEnCmJsk%z;B#4922Z$_rKp`z-^7 zh>Qq{5CKe#l_^j(1~cC?RsjhkVKq(whfC!wd|PoT9w!yC@T=&4WIx3sSR&=tygVhi&Ru&~!fw3(7ATNlnjju^~+#p09$-;XX9pZxhmg5#7 zN*Ko^k_kdG8NkhB5&;@46woMhaTGFzLINlxGKByzL4X3%Xt<#RkGfNe#9$zM@sKn0 ziG`P_)e4YA(rUFtEtQBU!$|;>$wUcA6bb=F5L9t;H55ybtELV!uwj)@DOISYh#Y5R zgan92&BCKnKgA$ZjL^zeLwQ0oMv8?LB!EaZ#xw{N2}f`WjWTM`xkyNYqhJ{7oqk{2AL*epyAJB!c+nUGTM{H z06|2h)2SkeB4E&j!}bA6DY~_wsDI64+;GO0069_>TCBLC9kCLQ9$H07af4j|LPBGA zv+zP=Sz!@==(Y4S8Te-re4^D#V3hPP%KZtZLd0qnWyN($V7(a zD76xuw?L*H4}&r9;j+DWoRrj{yF1tL9r^>Ad)vhFOjTy~Gggbk5q%Yp}L=Kv(u<6-phw#X!yUX~)-pbvkRan_;^)#kOHZZtBkN z>|(uoifx+CrwbEhr-aeC^^&;RcE zWN*wp483hC_jKeGL_Uh&85bX9#`-CK260c7TgId{X2~ME8y^j(E%k41-*ljtn=A}? zcI_NDCohF>ZI*6=nZ0nVyV;(F*llm$J}ya;i{2#nO`pDy!#CV26pQ&X@&7}zB1lPg zx5_7cn`b_4e?r3K^Qr5%6o##aqZIKbrqhD?tG8lPW$U@1?v#sI^O$sY2QIM@b70@H z1Z{NbgTrRYHe^ZA9vfnhjlrynvnB6FH}7lRA`?1pw4If?IL1CY`nYLc(`n|mEDr}u zlSJ|2^r+Z&L)bSRmsRs4G~e&K&|#lTsNj#s>V!m|dLCu1(l>UGU__ z8|;Or!Cfowx6biRcYP+U4l>t|wkJBYV=HTgNjbL6mmSPaw7ZsU)JNJ1)ZN0{yZshGj`E$r%()lh$ZG41)Lhr3Vptn&jY zo{8sO-;$@#7?to;I-}O(3Sn>h^^eJ^&#Wyciql+PMp`^w?U7@GjhJCs_G+LYE87Y8 zbjezJ4g0>XdsgV)^z{o&%!2w%w^7%s-*!g-5R`Ce z)8&Ja?tN*crCZ0{DcnQ~O|lwy=cw6XZ9O$`K}xG_y<^zTnFD<%duMkJ?AMai#g0Yp zbF4X*?*Tr(xh^c&@#l`Ra<}%QkM6#kAKK8@m5<%!efylRNx=rSWJg0Fqt#W7OHH*B{*ok8+ zec$b0lM@`Yt*OlMjjJf+W_w=JLtl?}ORALzM{}^-{z&fbvJ*Q)S8ac^%C~#Q{i4ar zEgLRp)uhu+LH;;m8Uu-f=T&eVX0D`W6m9wCRz|^@`JInTfc~Ze=l2H=pLqD8PvR}k zb^&g9v^{b9u}L3Nx_44rLxk?dt0~t~8~2%vn=lU7sDH6>mUHs)O?U6Q_zTk<2f!Tx z4)Fo&o!7*->nqQdZf{~*oIF1dwo~+#ik#>Z};q9es&;kIltC-ptm{J-7s*5gts3r{kX5TKZSqh zSam04@yKgoQTLM)`lW9ISc|7*AGDaz`Z2t@AkFjV5|Fsg%|Cfo%U6@DAKVwvQjVMY zE_G@=5P!WZ4~sMvr-=*tiZxf&jDxKGk1t*N*!t+AYvsY}C40FwyRP0lrjrCf+fQX2 z&`;T{ldpA}Tesuk^BzGyc1?r6B;VqJyO(A7OAl>}q?+;0)rr@+jj;QK&bwG@(L|9a etyr5mP>R{^hU-+m3R-6T$IA8bXXkpa-|`#6tyeJs literal 1993 zcmV;)2R8VLP)Px$>`+WpMgRNn|M&0z_viof=l}2L|MTzn<=+4B-v8^~|L5NS=hpDl!~EdM_T9bt z+_v-DweQZT@XDO$#FyT;jNrJH*RqM$u$RrMjk}zAgVUa zx9`5U$D*Xou&nCS(A~ei&cC(J#>nK~-0$Sx-PX?c^6&rl_y6zj+{(|lr?3C(@9)~x z#F4R*-}2Yk>(9>J)Y0e1#n`{T&bYqFxU<6A z*WId(jG>W`W?)}WOiWr^UO_iQK}171J2^x-I7~i1T~1Jmc5`oMW^izHUubch&hMhe z+{xzefuOruXPj|%pVY!Dz0d7f=UTx5U+57*A9$pa%p(J3 zFft8xAT7#5B4ZlFZAeI1!J#nBcpA`^KHk^$`z%-PF5`9hN#6M;U(FT3CoqG1)9))z zOcey_UYqYXwqB9~?wm1Hp>gjPgzzDOmG?k5nGMhei5U}8!6eOz8{6e#-EB4`D{AX87O{eIi4FK<3vo6G~Tki^|!;BE_$QdD5p%?R4q-?981 z63D!>LC<`+^pG|msz50~N;QK%0fBIRRjkyU0Y`H&v(0w0*E_lEOyke9=-*G~rF>#M z7Y;!Rfx1{D2(W9z?YDqlBaxq-zTh|i>8RIafJ{Y$K{75Z12~%80Ss@(%~Kls)^yqC z)~D?r{(5lt{x7b(c=VBZ^P)oliAneI98ps5-*4+r#Z+c9!aRVM z6&!f_Ofpjehr3O#40;R$8GMUQ2MT<09xPKgJv#vOZAFn6p%Js<;I_UiwP|2;uZdA7 z7X_5I-pI5HCvM~{L)|@;Iaw?>1x?ru{o8rbuiu=(1SsasaVS^k5unK4@Jk=}Pg$b> zZlwEF_SIw1YGJ?vH>`9&n}+|$gc)pl_FoU2)~OFR9qBvI&%DPfk2aapZ!Mk|2~LS6$ILXw65lzoM&@C%43o784bLx|R`YN%GMdg+gRCHE zc7ps?uGJ^jtjCie0z#B}AjE7IFw5MjyugHMIswYQ`9gK%cyhyAk9}jq@ipGqhYa8X zW0^Wtq&?Mf8N(eg2ss1~>vt}2{-SDuKW6}&j#1Xw7-0Vn8aL>-$WYdkIl^MRck7vo z`%`6|6^>G8z&3RXoz8AV8vcf0<%l9AN+R1bw)FKyPkva7PGQ$x;Ni=Ys@5<4?tG9T zp3Buy1-PBSP(c^}fO%<}_ZlEk>glGmZ)c3()%ry>K_a+eyy4MGFbY}k>}wNi$0|q{ zdJE95y(Sa}SGI)xJ;tz;AoR0wgDJ9_()pbUAk&fA)imUfs?RnaT3G9^32XrAdspZF zdpRTPU>8ydV|gOkc1R2gK!rPo9a^=p{VLnWG9J?Ibh+vMT923VxcKFqpI;N?B%G5;$wp zz}4|zn>|jqhju^!D#$TLV^qQvb1>17!6sPWNSzo3WE;5C2Lx29Nv_&39LgFAPD+5# zseu7)>JlJe)?5SjPoytzJQ%VdSqjY;3t)vpk=OD(DeMk_#P}i@a9Eg0K)&y&Y@YP5 zH2UUIwr|(=wgOepE(n6O)E^}Tk1O=g0`e&i*DnESLGRZ6MmT0&W=tRaFTr*~OAgAG z1_J1TkZgc!0jOS_)*fUKN||?R;CTlO6H78GfSO4_D!@Ji$bq}YM5&|omFd(8=yuz4CQ!u81{JEfp@AWwf{;BJ6Nzj=Kvr2(t>Pq^K!jvsGC)97Rz*;s73~uR z42w$@eafmvM8%@Ms^9_&DxhLfT#DibsCg5%)AniG(>XJle`db>-Q~OgJ=qlC=P@2{ zh6ey(yq7005WAb}t}%MpZ+Rg5Ep{6#_xx4~07jE^7Y^8+I}HE~G?HLG%J=o*2oWh6 z5+MSZtdhzxGypg{spOC_3PwQz93hc$iN9)Uh@eEoC5AcpQhnuaaHPaDK>-IP_yr3S zqJ(S_(P<&*sN!G*QW%9ml{8wW!2t*w#U;Av9D;n`0MHFlz#yAU zB?+li8pvXkX-rrsVAAbDI+aeR(C8E@okU}EXmk#f2@V}Z%$-6c<^=K<4LQS}xWq^l zm2)VRxVSiS9D|G~A}BOAn~f1r=yVc>ASvTzD5N6ElvcwGJXk4INaUylk%2l!NPxtk zTp||gU=C9G2(3&xR41%r6cr?=(8yF>P6I%Za0DlhQA7_o7YQkFG%ST>s1n1{MzHco z1VxmQ$XBRGKL5@ER$E`+5g%WSMJgR}p+wzdu{4GX@U<8BItcYeL=tiQ|3PUq4i(dw{W~buGa?9u{t_$_a>R&23SkLLq)-G*k;@{8 z;7A!cZb&quz#L=IF$SXW_2qcUlqe(JvVI$tq7)3dz8noi3SGvzE zUp%4Zr>UfA0`1u3+{Es4S~ov@+RC<)tUEM5HDy{T?wri|Jc;jS6!p-&$R)%&?@d|N zM8%V*IoIdbEbI#izWu)Ma9G=#MsLmC+wRa5`zk9qQ?BxW)Uu zr1+ZY0&Dlxj-P%befLaeYRB|Zj!VsMbltUoQL!efZt_-x9{WAwD{^oD(#n$4W^G!M6yJ>e`FH}EkLViUC z0*T|Bt79Ex9&5rT9?`qbY4O{kerE`Fe|R$0>mJ^zuLC4(S?-e1QItrX)_U6E!)vHA z@^RszB5TJdsz)q~n?1iENUX5B=h_NH;}l}W9hCuCT8EY@S6dNI-g{+pbwkz0)cOq& zqgDI3e`D2z%@OM25=~2d%PE4}tlqGkwP|nGiOIWQ;LT&7*_HC_0nZSiJ1dv}It(c2G;m5u1BJQhda7#Sa)5i`U2oWNk8Wb|#y z``UeAe?sp11?-&posF%nckP_Ebw6&1mbLGpouPcFfB0hWyYRc4>*F3a8HX5o7c8Co zS+M6>CyV^fD8V0Xd&0HaTznU&c2AII``e#MAuLm&nrdoh!7*)X%>HG~HqTa!vD63M z*?wg=Mj4kDEikOM(=3UuiyvK~X5;i5e;TJwbG^6i!PMGwFCfM7IqB&s+3oEwkKKN8 zyr3d@IpwHmw0;$@*;-0SFw-y)2+=}xK zOswzd)Huc4-a2d+U_QV17caZa?2c6*7x!DNUvp!dIQ?%(}AQT;+YcVJN zZbG%tBBFLdZAV}juk_KQ+J29kzPE-AxXg*5Wq`@p1660X+p3qIh_ypfw|_PW`c(cs ztoX6!xJ>r(bKQe#%uHZ3F zweJ=RT{U>cx-aqJe6?k|-M1E}l$jRDGFk$Sm1JaKW`yX58qCDZ!pO=1Hk3&KDCXcA zWS+ZwRzo67=(p=a90yBEJ|u~ zJ!G!L+z{qnz*JSO8*F@6sHE?k$D@7vKr;*k7?>DY7@3(^m^mTNU}R!uU||(x6H+u3 z4rDiSN>p-e6cJT%E-YHOXd~3ejP?u6t$99-=&gT|0`gQ5oFNyT+ zLf+Zdoq|W2Hz~GjkUQH~jS@JVzi`PV-dwutSz4OI~d+J(aSCNB&ZSTb<~dtz&R(x;F2?w-xN@x3ej^^1x~8AB=SlDw~H*F2x! zdVlQ~gYK4Ojf@*p9QYF&F8z4>IBkKF{H=2Fz>=4-Z%Q_PIJ8fq=*Uxv8M(`6@&%n! zWcg_R`H{T#6|)U)3*4nvD1VY&8NhdInQK94+rdxT7hPRlW3_r2gQD6#X+MtrBk@je z8{__t{d1J`H|b9f+%|=`Uv2XZpFE>mibBSIPnfUNi?!EYlj2!tR&8^)<&sOn?3@>+ zOM=Y*Gi3J_zqaX_7?E_Td*=hkotEOo@A#_@J$`)d ziJ11uWy*`I!{7h4ez)nG*)$uoZ_*W_p*gevMo8^;Wjp$B#hs~k#}{1Fo}Rw3e4C-_ zYhRvA9cP07nKHliI@0?4y4sVO-aea>-Y)T2T=A=C)$YlE-h_E_?BDcin)|GW9h08k zUX?3vmHcS=@hF*dZu;Jy$>}^{4{DVhB=-kLCd4b39KHRFdE+;!^}xg|56rcotcsMY zfT>wfh(!RHmW?18ixHT1pPW5*;z*vRO|7`nQ5!L}M>Ah;cHMq;*UdTA{~7$1uj>gH z2ia7bMxNt2Icrg%-qJ{&Ihl37DoO>n58b+3w{Frak3!AWx)MS+HfjDidA<30glMH! z+p;6Op8RJ}vEyl!`_BM$i;^G%BMURA%=x9Yz=cA4!wpj5T!@07w*&vyHJE6ck_+JPUfYKCOz15{sx%#HA7oh|mcFr|r|Wr*md9|IB>%yWd^@dy*OG zzhsj6OmhGLCi(KXLHK=+;W9JEf6Idydi*wC$y=@lfC*NH%LvFXv;hFqYN;Sh6UO(0 z#F(4}BbW#!CCZgJ8UWlq5|ywx7S(_vR3cR{2`{Sa2%r>U5<;E%6uy#!#z=W!L6vXuzc7{JO z2{9Ut5+aim5)w!WjwDPaAyXL)22Mbx(TF&Ls7_L7;6$QAJ#U18i>k#csZt}w6rh0- z7GZH3CIOfFJ_fmRlvbf0&J&(7aw4oGQ%MvkBAQR7(Z zC{`JRX)tvR_7UpQ&%bkk=a$bO_3=S1a`~tWwZ=Oh4`VnXA4IDKNlKI)gsQPPl^FGo z$7RklM5BZ_DiqdWDglPcMk*CJA{nGPk!aweP^kjJ64Z--V}NpD4ay|oRdXUz@RK2+ z&>)&4M0K*KxIz@ldng}6q|r(L2c=RW3In1seh0;S27xv3UxE=a6pg9mFdnc}4ogt7 zQXwILqiKXVm<&_lj&XI4Ln`=u$XB7(zzQ+y%ViSqm`PG80y(+5(qOvCnTS%NsYDoc zq7z{%LqtRwt~4>?DspwC(njpLm^jW**%5mLx5q<|robXPks)G;iLQu~D^cX^=t@NB za5T-u8DYQ_ml68_l@#AvuruF(^*@C*^(*Q)AJZ1XzW#C3v>}vYp5u6R(Ej|6KatE8a(> z|FQl4iS*&Lieq4f1jT11nP3QpY#1uY0G+w8M-q#dla zvR_tv8nrUzV?bKpE1*wOy!3>f&*lO9>Wu$hXp1e25C%LC*@p_vn_+$jZL!sYynaBlo0MNYvy7QlN8=bUMIZgNY`ct8|3SL1iSi;gqiZSBpGiWq- ztl92{)0*3xY;rm(%2|i!#!fRv#yw$Aj{rnX?demu+nRSVj@`5FJKCAy7WJfCStJrQ z&!Jzo;WW-4ZzOtXZS-wwVD;m59VO$es#lJu1p16+TcbXW;{z7}yjf4)v^2Y2U3$^a z+ViG$Rmgng`|b6aq3hngIGA-56xZkb2|uHtmVwlIfiQRdwK0W*su112v#%HR1;f1P z3A0ySKY4Rf`r?Ji`~|sZqF?T`vfbUPp)C`}DTuF>=&FLu*cE_QTvSrn_W*1t>~o%J z1H9Qz{7fR~TW`CuO;IQhRp6ji}-e-?^$&UUsE-TXEr4{k()USv;_gqdP3Ozw|x0hAr zAxp<2sh()pv*L>)m$JsyeNisvMa34(&cdK2#Qn(IF8k13S#PaUnmB%zvr^Q#r10Pv zp;0KQDo7nRQ>=l?)D48^az2mp)k&K_)2vQmz__Fig;9O&u2ZpZqfWwQC>Du?l) zw&0k&`E}Wj8T;HHqwS?^S$^+>t<4rb!c)?jPfONgmLkNgT*xfwyIWopqdmv-qV;r~ zTh^pkRTf5$jR*k?=vT1kA$9jcfTuHvn*vg5UQV_v-RC*cd_rmcO~1NO4(Q|8=<6Nl zVD%}FLH&kxC#C<@yjrQ~5Yav(r1@Ytc>Zoq)cr%!T4rRe`>kqyv5v(a+sAQ#y~JgD zcAeWq?pgEI2hvI;C8gO_Ejw(hIs)6563NpYgZ-v}rt~}PhU1D7yZv^b zvP^U>Jdtzw;%l|g_XVNyY(4`EJ=!~Wqs1|8=*r-xw|N_qkA+)%O`|aD(wrTI8u!$P z6)W1kGLR+KJ+o7~8-fA%`6|`gIjLLHqEwjHyqndr<*5l3;F@NJrL@~yndG0Ul-Y6| v1j4SvHm}coQZQYVYC?^=P`%XS_y9R@s>O^htD1DfKVV;Pf9^4_sPta}yUJ># literal 1205 zcmex=`&P}AcMV=Xt8Ueb z(`kGvx-Fis85`GL)2aOQ ztt&2{TD9oZQdQjx7hH>i?_<@@#LU3R0@2P4(tg=n;?c&H4sIdmrdvzyiQ7BVaK5{s zSJcUqK;1e53`~qHjLghTY|J2+1H&JvorP79O-M0N*szdYNkrKxXyQh3$0n%v80{H0 z?&MKQvtKg*$>iWzPqWCy4prMGu8@1uyz%dKhD|3P?l?Q8F!}Ms<+|3p{V#61&y}ff z?6}`pn9=vUX6YvO!%CMnYH10| ztQ7u){ajOwjK88+!0l_KdY_)eY`gGA8cqSiSQCNNzl+zmpD=xC zQ)J?|#6o8c|2uZKebby4n@^tcUF_S@dvz6hj_$YE zR=0oTVM=uI@7dwEdZ(IW(eJ6!Rj=7MN?%oA3@yLGpgrqm?EQ!L?%n%yYxS-*Yu1Q% z3BTc76MtETcbT8a-rbugZdZP}@Xk4#&9lx$E?pM&?~JC$<0-%DnRd4GOjX=^@|NqH zcdGu1H#V4lxhyyN?!8#$MiVC8_3wLso7VAKwcmdGY(f7L##Mp0mT?-LSW?RS;>t9G zPVWwZ?Q_db&n9l${UkikWYq!}4yl_R4E4KC-hZN#a@;eszEFI%u-B_~Uem+BUtH}m znfFYgf0C`~iGx=Q#b5kqnCR8L@YY0!^&$rTK!HzP1HOPwsv>{b9QPAQYUi*F|jO}FHKnGzi4?03Fu@ub{M(H2`yoD4gcsk6m(Py3fmzF&pz3fcd^ F2>?25zxx0H diff --git a/assets/jp/retire/TEMPLATE_DOWNES_1.png b/assets/jp/retire/TEMPLATE_DOWNES_1.png index 0bc67cb94ba09e4e4f088c342c5ce99337a85f91..9effcd06db32a864b893c82b4102387d526df2b6 100644 GIT binary patch literal 3282 zcmbVP3piBy8$N6d6YSm6lky}Vs zD3wTID>e z(L4YEG@Tf97IHRG9O}x*Z#j$d3OUUUX81?|Kx4k*Py({D4FN!nRHWbJg(a@t+SI{UvmxlJTX5yH^4iJyeh!8{W5t}_Y z5dsc{i(a!DwJMy75C|bDhzb`5i6qo;8u|k-6 zL-VB4U@8_XlgX@PL@QVvh{aPV6oddvAYc##MzT{R1;a5SiRmW>IwawU`N2{?EJ7(5 zK{gyJrJ)h2A9D}}&(ew{Gj&2Lh7AXUv3M(-BBu{PE@u`O94Zd_5S+`wLP3xa5=kWp z7C(y(=D|`}!h`>UdiL?}0wA?zGG}A_sTQGdHiSg#7>1-VQ;5hT=dLs{-0Ff-(~QTR>p%6(!a6$BTNDZNM)cHvJXV6^^fg@{VVYjFzoN8 z|2y;kLi!)u@4rZ&DJzEuiUJ{IR$|eLWUz{%^3fFRAN~69>^B4G6C9apiskG)MJ{G1 zG9*H%#mKzPO&s?J0M%+Iy1fTuztGc#x2@6W{cr@g=J4u5BB}zG&skK8a`7g)^we7Q z=I;I8+kEfV@}7NugKeyi*FAl%8?`8@*&Tix2byRFw%?==vd&X82GHJVHUmbzL&S5S zvR-q3*IUhd`J+X|^j!~q9r=VQEn;)?_&B*cvN*7QQfHz=4&cZ`wEDO#vP|{pSvcb` zK?{flwtu$vS(M-Bc8|^{&(Q%&p6qbh)BfGz2!b4KG=DDI;*Lg9{dBBgP5R_dM)qcT zS1WIA)4#TMGTvGBn*KRu$K2}$7D^-2Nk$y!%kfPsjdl%m$d_+bVdy9+%TWLc(8)VB z6hL*G?*No#w699+t4f(av=l(c)(%DG7c92B<_`pRO}()$S84``JkFk94gr0h!--?s zl4!lY8md?1%bwA?w)a)@icvZ7*L>C)H>)=q(q8we&}>%3#lC*8!d;|ha9yLj8}mZV zLDri>7c7IEJL5BBxD^S>8FJp4oH+%_X>j&96Hxw6{j=}%gxW`b+Tw#m1o{R*YorC@~4O0AGM^`HqU7+d|D6C zjV0UB6B|M=_X?uhceMKG9@Mo>FiAY!7;TSDcy;v6PYvWZ7RhIu`LsYk+rpeg`d9Mr zbsE>9a%uJF4EsH^HAC#^6&J>Z8P>02*6}Lx%Gd!X9Cap_d~v#;^Xi$zcDsgj_Sb3-wQeElIwqemPh4>AMpD`)^X@^fb=WJZ zTTHk6Y@j>k4L5#2o3@rmt(+m?4_i{Dw6Z{3|)m-5yfS{j#C|0wh8R(p-y{sydP zoLJv2t`MB8TM;=XwQ7Ab_koL{4mL)(>`ImC#ga3ac+0+lD0|u!J;l7pYgJo~9$WGi!|9xIkEPWY8o0}F#9=EU`N(Kc*4=`IEE!MD zZdXm;kM{VM9y8RvV^xu_DxOuC>{pFVE?Cye{I#UpF{7%BEkzsr) zN3_01k1H=RJF%o^q_4WdFAD;O>{a~VJvL4vY%1%tiyFOg01lPc?!L3oU0tu;d2soI zdp*TRY`X7R`p9g~=kFN5t>lU(Y%GrHzp)QhcK-9)v=QuA@4DI}!p>>rKD;#?-Rir& zF#M_|y1hp5*i2oi>5Q`h^L2_q4lT$nxLa09JbQ<}eN?LBeyG2xO-z8*vqyV7(_S99 z5bbO7aIAI(iJ+=tuB^7U_Mq$H(pVs4sk(k<_R7xg$5Su*9%9jB zU85uY)tjC_vh)R}PYyFcIexlb*X{YE z{H5mQ!U+!tqHa`Ws+zaJD9z_K@MSDxs~}&6*fF@!?&}{8UCrKqQ)W4en}$vtXCA6G zT&_9y=$`(K*y~b@s7dV$!@EtB7kfLYtk)N4KhxG|UKIQCvL|a=yP=WCYiur!R{ZO5 Ma@|NDL3_n-GY=ktEw?>W!2^=fMZkg&HU+X5g6 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 diff --git a/assets/jp/retire/TEMPLATE_FOOTE.png b/assets/jp/retire/TEMPLATE_FOOTE.png index 47ce0006f4497d90313780e429c852e4471c9e3b..241f9a75bf7e78c5f3f3a89cc354de1a61a4ab23 100644 GIT binary patch literal 2923 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 literal 1746 zcmbu9XH?Ty7{>qqY<3nUARI_SBBNm>mWF@<6q%)Arh?@ZMX>@Zdsr+8C>TLmp~guK zLqIgt#Yh!HK|nEJKmq|o3L;dIQ4q1325CM0-uJopocrDnzw_LC&ig3k$}s@#<>u)I zfFJ;XDgjCbkPRT#3yDOisjH-=siC2%h1b?m32%)145wPg8;Be9Roj+IB2jIb)--FT z>*md_Tt9A1Oey$(0ZIvgK>_B#7AS}TAQ%ve0hPZ21^@tot~vcw2qY8+M?sWB0BZfd znu_Z@S*HCfGrY1{{k`kyl1=hQ8|Hm@r8nTBHzSJ%6Z`*o$Yee8KblR8{gz_W>vEDU z-BOjVg6o58@K0pb0SX5pFyJE_f>!mUzjmL%=A-g8M(K9f8ri#CCkLv}4Afibt=KPjgt4FEb(6Kw<)J`X#C{WZMg1u9%%DypD$4V;O?=cr%kv` zqj}fLI09i_!5$ZW0z2Hky(VSzcxK4yjj0nuA9$v|YN=nR7M~2cp?EBdx~(Xf+&AX2 zIByc~^h*Su41EcPl)d4g%7&3({8k3eupyBQ}6aE^Md z;WeI6%G&Os-#!}Gl~(MKV5MEAnb1!!WQij+PyFGgbNs&TN`B1E<%?-~*KVopz(VZX zEDj0S?mx4Hns{^^n-x7a?L8Gt4yci}ItI@1xub32OKP--V=LH1T1rKuiywVgvG`0- zc1G`gj;);23U9i7vSJKQ_t;g(Cx4z~#kiSXJ|YU87j{zMphn zybpO9KT^X^R|2*|8TV=JWp;@5yn$*EDXKhzKma%l`fpT#5C8*(p|Lok3(1zwz?H&@wBj9{a2UtfGOZXv|j_bkEFhWE_BOzZd2 zaL2pE(WFe)@cthJ^$U(omoMDL3{(|`il<}tjqiV7DE2v6A2Be9dv0=3W#4SgzADz> z@c-C{VqjRb$~zo~*Cmn}oBU$eV`}XMGOYF1)hxS)(8V6sV$RX0@Qt3KZDg{&6GJTUlbNm3Wkji|N@dk`G`7B?0H2tpPnSG}b+YL8Q;2KBq^(uDKyzlPg4_8AIo sg2K@df_Y?+;E7>y6%{ATm^N@qn;Y%qq?~yz+LO*x0v$gzq$>yi2Aj^kng9R* diff --git a/assets/jp/retire/TEMPLATE_HERMES.png b/assets/jp/retire/TEMPLATE_HERMES.png index 30ac15d94c4a9d0192a33d318c376652703786f2..7b20af71dafdff8927f66595ea708e9ae6f54611 100644 GIT binary patch literal 2847 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 diff --git a/assets/jp/retire/TEMPLATE_RANGER.png b/assets/jp/retire/TEMPLATE_RANGER.png index 032daadbf0713bed88b53f69bdd9197882fd1f53..9e75ea056ac43a8c112b1f4461cbbfa4a62f79ff 100644 GIT binary patch literal 3092 zcmbVO2UrvL8$O1Jt1JgNAOYEqHb{`q9_$bL{Lbb6c@c9@U(rj?bAFres}kN@ArP=_dQt~IA`{lkrPJ( z05FE*!w$mk*1FSJAG;n7V!p+0BV;}c6#y{GLU-x`Ten*Rz_1!|@B(xJ*B|5~5+Wo( zcrZ~Vkzr^6aP?5hAbu2#;&^bRSn7t?)||rQ!~!>bs56($mCb}jVjr~}o~ND@%vVS8 znF73rJI+-FVgwQxg>WiKv{V7A-0=OpAhy=MCgE}Y5H!jS@2PW$Tfhy(%|zrdj!7gF z_+&B#$6yjEbePYhQ=M>BGL=fAP)TGefx-kSRFF=`4gBz!JGnpz2C-)iIK!UY@FEnI zfh3YrsU#|CL_{7*qA;0EjDSR?5-OPY$r$a=Al3zN$qc8FHaOy_aEO3?$^MXhm?W3?>D^3M59(hrO3!GHrFy z$iSI$7(x+wFoHx6Rw{5%GLA|oQgPEl#Zm#HR80Sa0nCO_*bR?WjYc5T2oy>%g$9zz zpflZ(?1C-6K)HxOEQ}q3(g|ejU9ge}ZB?BY;roAHf1XC`9BE2n$#&fg)j& zOd5&D4W$vBi9{oE%rT~p)~|xg1vyd$3Q74ehwX;PVkU~k0+7LQnZXqBV1j@m;1Om( zbcn#@QD+dCWFC($Br{~CV|1D(+SQ(I+ehr^C5zO z&*Tf}EuxtZ zUsqOGfFF1*{z?Y^T?Aifl_D4;{hM-sfhiCns)XdQXC#)be{3hxx5O);Wq&XI-xcpK z(!bSy|3&&hTKOVK8VO^wl7!a`uzwQY&M0cFTC(- z*^Qa(TC;H3wUsU0o|f9u3AL?Zt}ncWhRIK|^@f|@i#Szl^=i%4h+!5*c||YBJ+0P8 z1_@o!Q+BkB-{vJ3{@4@xuvA;BP1rIcULHmEu`F0n(Y*MCLfc)DP=)_tVx%7cQEh87 z%r-5wR6hq~5uBv&m!1QB0PfFb0NtO5vw!=O$>to!QwgomhT2zwKC8!Kmwb$p3lokG%jc~!Ua-nHJM&)wzDdusLFYV5s+&4 zcv_Clo}-hAqk;9-!m5Il6f4(v^_3%>>l;fv6Ze*z8A}L9HXXPV*J?6qc?*j*`fM?q zg~Nj-#~r7AZ(QJAocwMiJ=-%0@Zr)zgUi+|Ic4N|ul33lRf;hl+!>jaQm9F_D%fJ3 z+Ykou4(679GPO8T<9hU1MJ40VT1Pa%!kaaJo1y7NMX`E9^`0MFmMOuvS9b8mNwn3X z^9Ai)o{##r+uQq1cX;FD?Zlcj!9M@`gttceg}00nKUM8dsH)R*Svh?7M%ws-?C7~w z<-U_>y~viy8rPmT?;qur-F~n-_Ji-qsL(#ug-pQI%--*eK>RFk!6_!*Gv`R-vCA}b z&K$>tz$Z0#x_cj=-Ww{tQ+GcFRk+=s=&i{MxV=8>e3~I3S>JrXIHH`9zo5S1Xwt|V zaR%Db6EVabA}jB9TaQO^&7l(&@vU)+PwJ1}w(j*_J4a{)4xN+ww)mebH$C3hUS+?y zygkfyQvK@|j{~{a{oZDsU&=BNZBHy~=k-4IRbFFh>h$eX_Jr&#%-PrbGWAn)_&C3_ zvg&$;5$mM(nX||CGw(xfKBHRg40A3$spq6q-7A;OD^m+TD(~gp+!WlJ@YA~1zE0Ac zW!75yLruzFt0SoilTqRF!nuBps&R{|mhNb3>Rsvg^s<4bq)YW|RDh`Vc%?{-i1_KN z&#h4GyjY%|p402^nj4aR(K1{;_v0A7u=i`*X;BR808*Xon*WocrSmi0>kevHXp27H zy3xGkbx%lmp2?Pdm->cx9d&Tr{^7n&GsmXrPW2_<&?tAO;Mv=(+$=|DSKn>2jPJ|p za8T{f+P$}9(xrxBv!{fs56~VTyl4&YB-F$w@x-~qj9TV$_Ga$dmEn^A@VD;E zS7S5W@1{w1$5G(a3_-rpIv~OZHvW~**d736_lzHF!4?R&|}^+DP#@n;K5VH8$sx+jnAMxs1U7$sH>RQSx!70FxZPzJD9Eod(zDy`R~h?a?)c-| z(pi;$$HIG8Y)iQs#yf21IjeNBW8JY~^+t)O1MLFXeE;G4y$@bLah_JR$Ep`yZa$-T z-_@S3!=>F7k2)kk(K;I^j+KR3839Oh>3eOUxnJqh)e+ty*V-)1u`KzaL_Aw$0@w*l z%*}8Px%wNOk{MKL5ODI_T=9VsCeAQKZ45(x@G4heG<6jBluUK<>nASrDdC3hV&iXb(Z zEkb@MIE*GloHtaCK2?M=Lw74BkvTN#o}K4^h3|ue_lk`7j*Rz`jQW<2_>_eBj)eD$ zg!hVj_lA4#jEmNCcJFt7?{#zMYi;Lpb>44p+GS$BM@i3EShPe%jx990SzF9tX#b&} z_okfpt(^6=rS7n(-mRee$F=URoc_A6|Foy~tfu#%o%f%V_nMUVn~d+5iszGz=Z=Kl zkA>ceg`rJL$!=%ol7#1vd)|tB-i34LhDM{`h6m|t^|e1TqRt%!}xnU&0~s^yuQ-m{s` zx23$swbB2fl<$OknOswDGB%-bZG28c!kCNHt(@JRoZgm>=bn`BpOpWqsMUmfuWVw* zhkV3)c(876)sTO}dTf+OIjmq-y>MmBad^FAYN2Fgd_q8mR9dHffaAKxvs_Klcxcpv zbGv3(#$#EhK01jgBx@xvn?XadP)@*8Pu_of>Xek#f`;d?v-i`z{n^g{@7Dk8%I(_D z^4Qk##>13iVVswje{ys7?d0v;;os8M>*wqL{{R2>`2XtX|L^br_3!`l=l}2L|L@-a z>)!w8*8k(y|KQI5+s^;o#{bvG=*7G5(#H4I$^YKj{^#Dfjfkv}g{g+QZdY)efTfLY zn~-g{XhxKCSCKs-T2(e^U_^jOJAZk7yx_dD_szZk>(+5vT1+@LOD-u|H#0{jB{?W1 zArKHQ92`I%9$!K}V=5kZIyYVJHL(UkLP9W!A%-O9ocFm}llsl8z)#K3!RW(O22 z>Z#jiAW7)GO8f1l0uXcw^+>d1@v|5Idb#spe|geM=X_}-LJ>iUe^HeI4w?H?}pPO-hbo|D6 zSMQZbIN5?Ej4j$NHpos@Jq{Pnhmr>TA71sv?D_oYXT5cC-(EKnD<+T}9XvoNWUzQ- zDmaj-A#>g`uK`HFhlQtp{^FQ@q%50WA=}ZHkJ?!HdOCD5oW(&ZJ-4kb8s1L|+^;H| z@YzEo;D_X%RSl2sl{BrdIa9fp+3HzXa%UwwhNkB;45*v+NYmm*gOfLe-T0bp8deDmI-oY8$>>G5`}bHLZv z$AojHSYT)w)cVLFfctm#aM=RvLhmh$T+A5pzO7#MmhpFN=NpFu0Pd`cajnA@U-G<% zx;*8XGjN!lOdWCO!xyEQLB>4~q=h}q<~@u#9=&(h@dccqLuv3RIKe|800CWFWU0D6 z9ny?-ORJRVky&n+4Vao`y>t2!v;qPQaMrnID+H40H0slqwZjTx!wWzbi{hgGy6dv9 zsyiERe21<+!~gB-k>U5*F7bjh3k&M{0uV1QfX&EU6-QviWy-1|mBp^$fQR$k_3kROp6s?ol@FZOv7zWZ5YJG~r zU0Ih5H%Uu#E;@gp1 zaq5@<7%UBJuCRXp{rAUku*@>;mgAbOk|H;0=+}F?(P?9mArKA#bxiuQp&T5WI0`@9 zZwsvLttSv};4gFoMdwDW%uR6l=$4Lug3aFI2ViFYM{RQkjn7SS5?X6+3b%6z zxt8WIyzlkC&3Eoykdo41tQu;$A*2gPj|Qy+ZT_RJ11 z(@(v3nV>5Do(Ep~;~CH6$%GlGwRwDUaZ`Qvy+8MPCHsgjo9{GdJG?Z zE4j%I$T~KANF=IHX{PEiAeI#@>>fCZ0BC&VvHo`)`dO5db12Rs)7w%)s2brKKatw9 z(%v~|Nb)vw|Hci@EI(yxYwh=7W{QV4LJL% zZZgd5bkc1wlR+M&$H2Ny%O6{BIhn4heTKAbz$kA<2R8sn!<{LY1XL$jZ|gVc+tYb; zFg*0G*7A2BYTvGdew^fFpZ4l=i(!EKk2!$3*`VCqJgOtDOHH((Z`A^@(W~*L;*nRR z9zJ@kz^=VJM<1M=ek@&6=;WNa&~XyLm!APl${k!$0_wE6K0fvfcl`6fNPRPBQ(Niv z;?|#B7>6Xl3DKdN4ta-dVb84Yg_|-nO_>?_gRfG_(dZMyT)6rvn|?6*^tg_o!b1ok zgbCawiF{cPRa?NJ5C63i`@kua-xO08w8cn(P2MW$!-PyhW&!W7l0QRUH4b*{po<_E z*6cUdtsDBuKlAe{wm$uJyCZ>_wjTd%`c5+kg@mtGnw`$gJuNvWx(Ec`dW&ap2aNQg zq)oaM62!1!XJ>hiR#mmY)rQa+s91(v*v=Ku>TR;zCELLa{In9?KWkj qjwp%)7%^eQecD))v+=qZ3E+Rlnz=q<1l>mf0000fTDp~31~qn zQV>OPK}91j$f8o9Eegs~s$$zHODUkDfFPwP%bOr@+CICSo|lu!+`04p+xIW`BxRlV z8iTo}a{&M_V6&Kh$bG5y(nlk|#eTG5|G-1OXf58#rEc zo>*wdg~Xw-okA!<&;a1%qL6TT5wIK^3Wo_q3|#;9N*q=IF>vdt9FQY%hrH=3thL(&9CivKk6_^3v<9&oIP0+P zVkwNJ*@1W-2okXlG&>>%=7my7E3hPxL?RGL1dxO$(&$7IokGD*e{hI7Da5DyF;`C; zL!KD8aJgJUClF#|W9?$ec4BE5fk>m#5CsGh36CJ~vN(~PtH6t7%V#t&VHr;LGjNEjZ(x)J5foerfoKP6W10d&yjh$iS{gZJ9O4n+NLUDq zK}hXJ7x$0KzSYGi&3mz6gc0CS-Dt7$l5oLf(p&1;j~Uf*&js zM@xCIM-1ZTa&0scy1NwS%Ei(Eu{d%jQ|o42#*!#@B&_v%fd~@E%0Bvy0L|V4DslEu~f)K z0u~6lVK6}=3d3P%X{5W0BgIn0Fyb9~$_oyM&KAk!ToDguGZ{D}W;=lZqSJ^Djt~vz z;dxZD10IAZRJm)LrM4c(Wf8+Wzt-Nrq zC=5nsB?0&EgZXEb_-A?eLofaRf+1)p4B;q4(stE*e%cx2fKX zcYPo@oGB$uf57#g3zI;TV47VY-u zuU}2E(NoUt?AhtNyY*(l>YNyLRTs9(*ezp)?HTG-<;~E<64bGSy07-aieIAoR_2|{ zSol&M)w{^rTpy^)4bCF-Gc7HYO~))1*`_~yhpED5cFC7mMWvSLSYIAoj5_9Y^bE7V zfB50G#1LR}|6*op!=b^}k$Nkoar>(ZRMpWqVAE~4!UYWeu1=r4SM?_f&3|rBGkbV> zed+PsL;KDi72bk|bdodXEuvc7az$T0HMG}h<#5aQ@lV=IIvE&IZOsKz)5~Z_p~A?!6r)!sE6;qHFfyu1=G_O6s>~ld$@8%-Nov&jS^v zFL$p?T-fDzN2dq~u}i7#DYweby0)p&c>dO3S<*>8_q!Z74DLMooD#dJJvEA2&B8Cp z4^?NnG!%_)+TVM!VeO{}Mn3m=Ce~D^owE$>UN@kK#{g*Gb5=`Bk7zD3GgOZY-1fC} zD6-}SV9ie-{lNC4BUJ3}TIck{xLu_^B?bWBd53ett8{kv(3n%p>05=w;@*M+b!?2@ zNMB!>np3E>|2E6PIpLQH++b(={4Ecxk3Xrm^(aw0l%C&qj&5GoUb<@%dfBwkWm#*} z9L~x29%;-bUO4pQs(&q7jyi@(t1w(_9`tzQ-L{J&&BxDEbov?b&lZnPR;zPrEL}z) z|1i){{mHWD!q%v*qxTIfi<+Na|7>XV#-=S5BU^gDS zp@5X*4qk)N=lpVSTnb9KYI!Cw(2MPd`YBqc{aIz$xH#d;Fm?Gl&?GC9ZC$CKkNL=K z??Qk)e`4%ec=!9AG3r*yXOn<_Mo56Qk5&CcS)rV+({CA`-08h6dr|9E+mfF#~YCW`fL&43ad0T2&;+KIRTB7!6F*oQWmP7ta?j(xdJwQ1d-}8mu-Nm1e-AjgzfHIX4^y48_ znRU(*%&9sH*W+FqrK&}JNuc(tB?Vjz&Qh`3Lt>jQ1OuZxzS3!X-8xX3-g;-^U<$pL zwB!^!m_G4)o!WFIS8{Yy)56)?_t%FGGuZFY6k8YRb&4=YHR-iPlRyvr1j#d15Ym zA@$lfwqD-j(c29B`ti<7he)pbIe}zj3u>KC`$Ur=P`I+~6c&wDDw&0g+^W<$CZ2p< z*CN-VZ`=9|V_$U;l6Pb@cS%EIl6-g9b<_$-flT9~u;Or2na~issMW99$= literal 1486 zcmbu9do+}39LL}Ho#7=$Ge$}b&5%nXGefKr$|Y=ao!W$^m~=*nV{%z*+nl2t;~vJP zQgVr0ikjLeF(KmOMz-MZ(!$`A~$LJ%tuK`62}ZC;phda0S4HmF~bGPZB~fg!bli1ScwX5_$A;Z2$| ztYBH76*Gc}6)CNC1wse~4x_1zcg7OW?DeB+5qx2^QS7;#zlR1LfrnIAnUncLve&q1 z*qB#qQlfXTIr?^CoChf8$Z#hDL%MzHy$8P*m-I@+A&}ElQR4bI(FDCJsm+$R7^05l zdg%ZYmvzjz(H0#6*t?Bqsoyhb!Xmzg#18I3aa)Et?=0hYnyW^eFsWIYGk#A>7_%(T zCd>rp4rQl(OrL*eGTEhExGCRY4j1O8ne3+{$)DJkpp=+Uur8%t${W!Q?TTcT#V&qv zM~u7Vj+TD2d%u3Xn@YK3PMw{8>7PNQ^6K2iMH$XtC)?pq4ytWY#BctUfs_OGW1pJ`>vx<#+D*J*EBoF1pFL~d{i&)acGa~_VKN= zVK3fF&l|vFay(RDjGhyg(RgV;$+I2LjH&m*X+(_;lQtGhU6EEIBAq_-5X&6(DiB~o>{dVZrs#(d69w%0-$nV;x>3R6J+2N$G z_nNhS3(@+(VgfUYcaK-(d`16>A_!p+nn*kvOCXY**Ww5&-ul7oPdN0G23G`Ek(y*z zr?@b@!y#6sSxLy=`Gv5Otq5|9n`w8=B}0LA%Equ*Z$h8#dm2Hwtf8GWtQlE($@Kb^ zHre~aq_E7wcNv#;^;y+Rg}u?5J%~{H=NAAW0D;74;;~9-q87o>*>^3=D;?OB-3pL# zwOetIsg;ZfihX{#H0VfSB1*jN-W*YKHG6hXOQX9RF0wa|Pv%v#AGN^#8gJ;<$T|Vx z1Bq8n^NJ(2b7sv8HfMe~%($)c&xBUfY$cMrCF-CWx-b(TE2ed q$N@Zm*){4~Pr9+qh}B4ED@xYe@abhZV+#AW^2AV(xF6*x7yJdCpjny# diff --git a/assets/tw/retire/TEMPLATE_BOGUE.png b/assets/tw/retire/TEMPLATE_BOGUE.png index 3eaaf159af748fbc22cac1edd99a6f85b4d4b91a..f6fb845455a365da48b705dcca70f1135a1fda39 100644 GIT binary patch literal 2830 zcmbVO2~-p377m*%E}$YrEHuO&%`({}gAu_Xi3%tt2%_R7nUDaQl6?JVX#*MW`T(q5?`)I5mnWqJ&mKWfM^71cB4`Xxq~{Gns#8zWd$pF8@7AS?=#U z*2c*OgTajDa@c|B-NkrWnWDcJ0-2rY&04_;QDHEnCmJsk%z;B#4922Z$_rKp`z-^7 zh>Qq{5CKe#l_^j(1~cC?RsjhkVKq(whfC!wd|PoT9w!yC@T=&4WIx3sSR&=tygVhi&Ru&~!fw3(7ATNlnjju^~+#p09$-;XX9pZxhmg5#7 zN*Ko^k_kdG8NkhB5&;@46woMhaTGFzLINlxGKByzL4X3%Xt<#RkGfNe#9$zM@sKn0 ziG`P_)e4YA(rUFtEtQBU!$|;>$wUcA6bb=F5L9t;H55ybtELV!uwj)@DOISYh#Y5R zgan92&BCKnKgA$ZjL^zeLwQ0oMv8?LB!EaZ#xw{N2}f`WjWTM`xkyNYqhJ{7oqk{2AL*epyAJB!c+nUGTM{H z06|2h)2SkeB4E&j!}bA6DY~_wsDI64+;GO0069_>TCBLC9kCLQ9$H07af4j|LPBGA zv+zP=Sz!@==(Y4S8Te-re4^D#V3hPP%KZtZLd0qnWyN($V7(a zD76xuw?L*H4}&r9;j+DWoRrj{yF1tL9r^>Ad)vhFOjTy~Gggbk5q%Yp}L=Kv(u<6-phw#X!yUX~)-pbvkRan_;^)#kOHZZtBkN z>|(uoifx+CrwbEhr-aeC^^&;RcE zWN*wp483hC_jKeGL_Uh&85bX9#`-CK260c7TgId{X2~ME8y^j(E%k41-*ljtn=A}? zcI_NDCohF>ZI*6=nZ0nVyV;(F*llm$J}ya;i{2#nO`pDy!#CV26pQ&X@&7}zB1lPg zx5_7cn`b_4e?r3K^Qr5%6o##aqZIKbrqhD?tG8lPW$U@1?v#sI^O$sY2QIM@b70@H z1Z{NbgTrRYHe^ZA9vfnhjlrynvnB6FH}7lRA`?1pw4If?IL1CY`nYLc(`n|mEDr}u zlSJ|2^r+Z&L)bSRmsRs4G~e&K&|#lTsNj#s>V!m|dLCu1(l>UGU__ z8|;Or!Cfowx6biRcYP+U4l>t|wkJBYV=HTgNjbL6mmSPaw7ZsU)JNJ1)ZN0{yZshGj`E$r%()lh$ZG41)Lhr3Vptn&jY zo{8sO-;$@#7?to;I-}O(3Sn>h^^eJ^&#Wyciql+PMp`^w?U7@GjhJCs_G+LYE87Y8 zbjezJ4g0>XdsgV)^z{o&%!2w%w^7%s-*!g-5R`Ce z)8&Ja?tN*crCZ0{DcnQ~O|lwy=cw6XZ9O$`K}xG_y<^zTnFD<%duMkJ?AMai#g0Yp zbF4X*?*Tr(xh^c&@#l`Ra<}%QkM6#kAKK8@m5<%!efylRNx=rSWJg0Fqt#W7OHH*B{*ok8+ zec$b0lM@`Yt*OlMjjJf+W_w=JLtl?}ORALzM{}^-{z&fbvJ*Q)S8ac^%C~#Q{i4ar zEgLRp)uhu+LH;;m8Uu-f=T&eVX0D`W6m9wCRz|^@`JInTfc~Ze=l2H=pLqD8PvR}k zb^&g9v^{b9u}L3Nx_44rLxk?dt0~t~8~2%vn=lU7sDH6>mUHs)O?U6Q_zTk<2f!Tx z4)Fo&o!7*->nqQdZf{~*oIF1dwo~+#ik#>Z};q9es&;kIltC-ptm{J-7s*5gts3r{kX5TKZSqh zSam04@yKgoQTLM)`lW9ISc|7*AGDaz`Z2t@AkFjV5|Fsg%|Cfo%U6@DAKVwvQjVMY zE_G@=5P!WZ4~sMvr-=*tiZxf&jDxKGk1t*N*!t+AYvsY}C40FwyRP0lrjrCf+fQX2 z&`;T{ldpA}Tesuk^BzGyc1?r6B;VqJyO(A7OAl>}q?+;0)rr@+jj;QK&bwG@(L|9a etyr5mP>R{^hU-+m3R-6T$IA8bXXkpa-|`#6tyeJs literal 1993 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 literal 1205 zcmex=`&P}AcMV=Xt8Ueb z(`kGvx-Fis85`GL)2aOQ ztt&2{TD9oZQdQjx7hH>i?_<@@#LU3R0@2P4(tg=n;?c&H4sIdmrdvzyiQ7BVaK5{s zSJcUqK;1e53`~qHjLghTY|J2+1H&JvorP79O-M0N*szdYNkrKxXyQh3$0n%v80{H0 z?&MKQvtKg*$>iWzPqWCy4prMGu8@1uyz%dKhD|3P?l?Q8F!}Ms<+|3p{V#61&y}ff z?6}`pn9=vUX6YvO!%CMnYH10| ztQ7u){ajOwjK88+!0l_KdY_)eY`gGA8cqSiSQCNNzl+zmpD=xC zQ)J?|#6o8c|2uZKebby4n@^tcUF_S@dvz6hj_$YE zR=0oTVM=uI@7dwEdZ(IW(eJ6!Rj=7MN?%oA3@yLGpgrqm?EQ!L?%n%yYxS-*Yu1Q% z3BTc76MtETcbT8a-rbugZdZP}@Xk4#&9lx$E?pM&?~JC$<0-%DnRd4GOjX=^@|NqH zcdGu1H#V4lxhyyN?!8#$MiVC8_3wLso7VAKwcmdGY(f7L##Mp0mT?-LSW?RS;>t9G zPVWwZ?Q_db&n9l${UkikWYq!}4yl_R4E4KC-hZN#a@;eszEFI%u-B_~Uem+BUtH}m znfFYgf0C`~iGx=Q#b5kqnCR8L@YY0!^&$rTK!HzP1HOPwsv>{b9QPAQYUi*F|jO}FHKnGzi4?03Fu@ub{M(H2`yoD4gcsk6m(Py3fmzF&pz3fcd^ F2>?25zxx0H diff --git a/assets/tw/retire/TEMPLATE_DOWNES_1.png b/assets/tw/retire/TEMPLATE_DOWNES_1.png index 0bc67cb94ba09e4e4f088c342c5ce99337a85f91..9effcd06db32a864b893c82b4102387d526df2b6 100644 GIT binary patch literal 3282 zcmbVP3piBy8$N6d6YSm6lky}Vs zD3wTID>e z(L4YEG@Tf97IHRG9O}x*Z#j$d3OUUUX81?|Kx4k*Py({D4FN!nRHWbJg(a@t+SI{UvmxlJTX5yH^4iJyeh!8{W5t}_Y z5dsc{i(a!DwJMy75C|bDhzb`5i6qo;8u|k-6 zL-VB4U@8_XlgX@PL@QVvh{aPV6oddvAYc##MzT{R1;a5SiRmW>IwawU`N2{?EJ7(5 zK{gyJrJ)h2A9D}}&(ew{Gj&2Lh7AXUv3M(-BBu{PE@u`O94Zd_5S+`wLP3xa5=kWp z7C(y(=D|`}!h`>UdiL?}0wA?zGG}A_sTQGdHiSg#7>1-VQ;5hT=dLs{-0Ff-(~QTR>p%6(!a6$BTNDZNM)cHvJXV6^^fg@{VVYjFzoN8 z|2y;kLi!)u@4rZ&DJzEuiUJ{IR$|eLWUz{%^3fFRAN~69>^B4G6C9apiskG)MJ{G1 zG9*H%#mKzPO&s?J0M%+Iy1fTuztGc#x2@6W{cr@g=J4u5BB}zG&skK8a`7g)^we7Q z=I;I8+kEfV@}7NugKeyi*FAl%8?`8@*&Tix2byRFw%?==vd&X82GHJVHUmbzL&S5S zvR-q3*IUhd`J+X|^j!~q9r=VQEn;)?_&B*cvN*7QQfHz=4&cZ`wEDO#vP|{pSvcb` zK?{flwtu$vS(M-Bc8|^{&(Q%&p6qbh)BfGz2!b4KG=DDI;*Lg9{dBBgP5R_dM)qcT zS1WIA)4#TMGTvGBn*KRu$K2}$7D^-2Nk$y!%kfPsjdl%m$d_+bVdy9+%TWLc(8)VB z6hL*G?*No#w699+t4f(av=l(c)(%DG7c92B<_`pRO}()$S84``JkFk94gr0h!--?s zl4!lY8md?1%bwA?w)a)@icvZ7*L>C)H>)=q(q8we&}>%3#lC*8!d;|ha9yLj8}mZV zLDri>7c7IEJL5BBxD^S>8FJp4oH+%_X>j&96Hxw6{j=}%gxW`b+Tw#m1o{R*YorC@~4O0AGM^`HqU7+d|D6C zjV0UB6B|M=_X?uhceMKG9@Mo>FiAY!7;TSDcy;v6PYvWZ7RhIu`LsYk+rpeg`d9Mr zbsE>9a%uJF4EsH^HAC#^6&J>Z8P>02*6}Lx%Gd!X9Cap_d~v#;^Xi$zcDsgj_Sb3-wQeElIwqemPh4>AMpD`)^X@^fb=WJZ zTTHk6Y@j>k4L5#2o3@rmt(+m?4_i{Dw6Z{3|)m-5yfS{j#C|0wh8R(p-y{sydP zoLJv2t`MB8TM;=XwQ7Ab_koL{4mL)(>`ImC#ga3ac+0+lD0|u!J;l7pYgJo~9$WGi!|9xIkEPWY8o0}F#9=EU`N(Kc*4=`IEE!MD zZdXm;kM{VM9y8RvV^xu_DxOuC>{pFVE?Cye{I#UpF{7%BEkzsr) zN3_01k1H=RJF%o^q_4WdFAD;O>{a~VJvL4vY%1%tiyFOg01lPc?!L3oU0tu;d2soI zdp*TRY`X7R`p9g~=kFN5t>lU(Y%GrHzp)QhcK-9)v=QuA@4DI}!p>>rKD;#?-Rir& zF#M_|y1hp5*i2oi>5Q`h^L2_q4lT$nxLa09JbQ<}eN?LBeyG2xO-z8*vqyV7(_S99 z5bbO7aIAI(iJ+=tuB^7U_Mq$H(pVs4sk(k<_R7xg$5Su*9%9jB zU85uY)tjC_vh)R}PYyFcIexlb*X{YE z{H5mQ!U+!tqHa`Ws+zaJD9z_K@MSDxs~}&6*fF@!?&}{8UCrKqQ)W4en}$vtXCA6G zT&_9y=$`(K*y~b@s7dV$!@EtB7kfLYtk)N4KhxG|UKIQCvL|a=yP=WCYiur!R{ZO5 Ma@|NDL3_n-GY=ktEw?>W!2^=fMZkg&HU+X5g6 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 diff --git a/assets/tw/retire/TEMPLATE_FOOTE.png b/assets/tw/retire/TEMPLATE_FOOTE.png index 47ce0006f4497d90313780e429c852e4471c9e3b..241f9a75bf7e78c5f3f3a89cc354de1a61a4ab23 100644 GIT binary patch literal 2923 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 literal 1746 zcmbu9XH?Ty7{>qqY<3nUARI_SBBNm>mWF@<6q%)Arh?@ZMX>@Zdsr+8C>TLmp~guK zLqIgt#Yh!HK|nEJKmq|o3L;dIQ4q1325CM0-uJopocrDnzw_LC&ig3k$}s@#<>u)I zfFJ;XDgjCbkPRT#3yDOisjH-=siC2%h1b?m32%)145wPg8;Be9Roj+IB2jIb)--FT z>*md_Tt9A1Oey$(0ZIvgK>_B#7AS}TAQ%ve0hPZ21^@tot~vcw2qY8+M?sWB0BZfd znu_Z@S*HCfGrY1{{k`kyl1=hQ8|Hm@r8nTBHzSJ%6Z`*o$Yee8KblR8{gz_W>vEDU z-BOjVg6o58@K0pb0SX5pFyJE_f>!mUzjmL%=A-g8M(K9f8ri#CCkLv}4Afibt=KPjgt4FEb(6Kw<)J`X#C{WZMg1u9%%DypD$4V;O?=cr%kv` zqj}fLI09i_!5$ZW0z2Hky(VSzcxK4yjj0nuA9$v|YN=nR7M~2cp?EBdx~(Xf+&AX2 zIByc~^h*Su41EcPl)d4g%7&3({8k3eupyBQ}6aE^Md z;WeI6%G&Os-#!}Gl~(MKV5MEAnb1!!WQij+PyFGgbNs&TN`B1E<%?-~*KVopz(VZX zEDj0S?mx4Hns{^^n-x7a?L8Gt4yci}ItI@1xub32OKP--V=LH1T1rKuiywVgvG`0- zc1G`gj;);23U9i7vSJKQ_t;g(Cx4z~#kiSXJ|YU87j{zMphn zybpO9KT^X^R|2*|8TV=JWp;@5yn$*EDXKhzKma%l`fpT#5C8*(p|Lok3(1zwz?H&@wBj9{a2UtfGOZXv|j_bkEFhWE_BOzZd2 zaL2pE(WFe)@cthJ^$U(omoMDL3{(|`il<}tjqiV7DE2v6A2Be9dv0=3W#4SgzADz> z@c-C{VqjRb$~zo~*Cmn}oBU$eV`}XMGOYF1)hxS)(8V6sV$RX0@Qt3KZDg{&6GJTUlbNm3Wkji|N@dk`G`7B?0H2tpPnSG}b+YL8Q;2KBq^(uDKyzlPg4_8AIo sg2K@df_Y?+;E7>y6%{ATm^N@qn;Y%qq?~yz+LO*x0v$gzq$>yi2Aj^kng9R* diff --git a/assets/tw/retire/TEMPLATE_HERMES.png b/assets/tw/retire/TEMPLATE_HERMES.png index 30ac15d94c4a9d0192a33d318c376652703786f2..7b20af71dafdff8927f66595ea708e9ae6f54611 100644 GIT binary patch literal 2847 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 diff --git a/assets/tw/retire/TEMPLATE_RANGER.png b/assets/tw/retire/TEMPLATE_RANGER.png index 032daadbf0713bed88b53f69bdd9197882fd1f53..9e75ea056ac43a8c112b1f4461cbbfa4a62f79ff 100644 GIT binary patch literal 3092 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 Date: Tue, 9 Apr 2024 21:28:20 +0800 Subject: [PATCH 55/96] Fix: duped std was opened twice --- module/device/method/nemu_ipc.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/module/device/method/nemu_ipc.py b/module/device/method/nemu_ipc.py index 7f67968e8..f6bd5a220 100644 --- a/module/device/method/nemu_ipc.py +++ b/module/device/method/nemu_ipc.py @@ -45,12 +45,12 @@ class CaptureStd: def _redirect_stdout(self, to): sys.stdout.close() - os.dup2(to.fileno(), self.fdout) + os.dup2(to, self.fdout) sys.stdout = os.fdopen(self.fdout, 'w') def _redirect_stderr(self, to): sys.stderr.close() - os.dup2(to.fileno(), self.fderr) + os.dup2(to, self.fderr) sys.stderr = os.fdopen(self.fderr, 'w') def __enter__(self): @@ -58,20 +58,20 @@ class CaptureStd: self.fderr = sys.stderr.fileno() self.reader_out, self.writer_out = os.pipe() self.reader_err, self.writer_err = os.pipe() - self.old_stdout = os.fdopen(os.dup(self.fdout), 'w') - self.old_stderr = os.fdopen(os.dup(self.fderr), 'w') + self.old_stdout = os.dup(self.fdout) + self.old_stderr = os.dup(self.fderr) file_out = os.fdopen(self.writer_out, 'w') file_err = os.fdopen(self.writer_err, 'w') - self._redirect_stdout(to=file_out) - self._redirect_stderr(to=file_err) + self._redirect_stdout(to=file_out.fileno()) + self._redirect_stderr(to=file_err.fileno()) return self def __exit__(self, exc_type, exc_val, exc_tb): self._redirect_stdout(to=self.old_stdout) self._redirect_stderr(to=self.old_stderr) - self.old_stdout.close() - self.old_stderr.close() + os.close(self.old_stdout) + os.close(self.old_stderr) self.stdout = self.recvall(self.reader_out) self.stderr = self.recvall(self.reader_err) From 5073054826f431752cc5f55d97f85dd888fca481 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Tue, 9 Apr 2024 21:46:30 +0800 Subject: [PATCH 56/96] Opt: No mxnet loading at first release_resources() for faster startup --- module/ocr/al_ocr.py | 10 ++++++---- module/ocr/models.py | 9 ++++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/module/ocr/al_ocr.py b/module/ocr/al_ocr.py index f010621aa..5f6fee115 100644 --- a/module/ocr/al_ocr.py +++ b/module/ocr/al_ocr.py @@ -2,15 +2,17 @@ import os import cv2 import numpy as np +from PIL import Image + +from module.exception import RequestHumanTakeover +from module.logger import logger + +logger.info('Loading OCR dependencies') from cnocr import CnOcr from cnocr.cn_ocr import (check_model_name, data_dir, gen_network, load_module, read_charset) from cnocr.fit.ctc_metrics import CtcMetrics from cnocr.hyperparams.cn_hyperparams import CnHyperparams as Hyperparams -from PIL import Image - -from module.exception import RequestHumanTakeover -from module.logger import logger def get_mxnet_context(): diff --git a/module/ocr/models.py b/module/ocr/models.py index 75f5b7e9f..9547e8abd 100644 --- a/module/ocr/models.py +++ b/module/ocr/models.py @@ -1,5 +1,4 @@ from module.base.decorator import cached_property -from module.ocr.al_ocr import AlOcr class OcrModel: @@ -13,8 +12,9 @@ class OcrModel: # Font: Impact, AgencyFB-Regular, MStiffHeiHK-UltraBold # Charset: 0123456789ABCDEFGHIJKLMNPQRSTUVWXYZ:/- (Letter 'O' and is not included) # _num_classes: 39 + from module.ocr.al_ocr import AlOcr return AlOcr(model_name='densenet-lite-gru', model_epoch=15, root='./bin/cnocr_models/azur_lane', - name='azur_lane') + name='azur_lane') @cached_property def cnocr(self): @@ -26,10 +26,12 @@ class OcrModel: # Font: Various # Charset: Number, English character, Chinese character, symbols, # _num_classes: 6426 + from module.ocr.al_ocr import AlOcr return AlOcr(model_name='densenet-lite-gru', model_epoch=39, root='./bin/cnocr_models/cnocr', name='cnocr') @cached_property def jp(self): + from module.ocr.al_ocr import AlOcr return AlOcr(model_name='densenet-lite-gru', model_epoch=125, root='./bin/cnocr_models/jp', name='jp') @cached_property @@ -42,7 +44,8 @@ class OcrModel: # Font: Various, 6 kinds # Charset: Numbers, Upper english characters, Chinese traditional characters # _num_classes: 5322 + from module.ocr.al_ocr import AlOcr return AlOcr(model_name='densenet-lite-gru', model_epoch=63, root='./bin/cnocr_models/tw', name='tw') -OCR_MODEL = OcrModel() \ No newline at end of file +OCR_MODEL = OcrModel() From 0307b2c383d2e23b6a92a02a65d84fe88c000edd Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Tue, 9 Apr 2024 22:40:27 +0800 Subject: [PATCH 57/96] Add: Long tab food when using nemu_ipc --- module/dorm/dorm.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/module/dorm/dorm.py b/module/dorm/dorm.py index 06eaba58e..b06b262a3 100644 --- a/module/dorm/dorm.py +++ b/module/dorm/dorm.py @@ -9,6 +9,7 @@ from module.base.timer import Timer from module.base.utils import * from module.dorm.assets import * from module.dorm.buy_furniture import BuyFurniture +from module.handler.assets import POPUP_CONFIRM from module.logger import logger from module.ocr.ocr import Digit, DigitCounter from module.template.assets import TEMPLATE_DORM_COIN, TEMPLATE_DORM_LOVE @@ -117,7 +118,7 @@ class RewardDorm(UI): if not self._dorm_has_food(button) \ or self.handle_info_bar() \ - or self.handle_popup_cancel('DORM_FEED'): + or self.appear(POPUP_CONFIRM, offset=self._popup_offset): break if timeout.reached(): logger.warning('Wait dorm feed timeout') @@ -139,7 +140,7 @@ class RewardDorm(UI): if not self._dorm_has_food(button) \ or self.handle_info_bar() \ - or self.handle_popup_cancel('DORM_FEED'): + or self.appear(POPUP_CONFIRM, offset=self._popup_offset): break if timeout.reached(): logger.warning('Wait dorm feed timeout') @@ -147,6 +148,26 @@ class RewardDorm(UI): self.device.u2.touch.up(x, y) + @Config.when(DEVICE_CONTROL_METHOD='nemu_ipc') + def _dorm_feed_long_tap(self, button, count): + timeout = Timer(count // 5 + 5).start() + x, y = random_rectangle_point(button.button) + + while 1: + self.device.nemu_ipc.down(x, y) + time.sleep(.01) + self.device.screenshot() + + if not self._dorm_has_food(button) \ + or self.handle_info_bar() \ + or self.appear(POPUP_CONFIRM, offset=self._popup_offset): + break + if timeout.reached(): + logger.warning('Wait dorm feed timeout') + break + + self.device.nemu_ipc.up() + @Config.when(DEVICE_CONTROL_METHOD=None) def _dorm_feed_long_tap(self, button, count): logger.warning(f'Current control method {self.config.Emulator_ControlMethod} ' From 3c789f4630b7288079f3e77329f36477ceabff15 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Tue, 9 Apr 2024 22:43:01 +0800 Subject: [PATCH 58/96] Opt: Reuse screenshot when dismissing dorm feed popup --- module/dorm/dorm.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/module/dorm/dorm.py b/module/dorm/dorm.py index b06b262a3..48f0c783e 100644 --- a/module/dorm/dorm.py +++ b/module/dorm/dorm.py @@ -289,13 +289,18 @@ class RewardDorm(UI): else: self._dorm_feed_long_tap(button, count) + skip_first_screenshot = True while 1: - self.device.screenshot() - if self.handle_popup_cancel('DORM_FEED'): - continue + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() # End if self.appear(DORM_FEED_CHECK, offset=(20, 20)): break + # Click + if self.handle_popup_cancel('DORM_FEED'): + continue def dorm_food_get(self): """ From 247f333d1e85d75cb5f56e0c119b35186e997df1 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Tue, 9 Apr 2024 22:46:00 +0800 Subject: [PATCH 59/96] Add: Long tab food when using MaaTouch --- module/dorm/dorm.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/module/dorm/dorm.py b/module/dorm/dorm.py index 48f0c783e..79f7d7379 100644 --- a/module/dorm/dorm.py +++ b/module/dorm/dorm.py @@ -127,6 +127,29 @@ class RewardDorm(UI): self.device.minitouch_builder.up().commit() self.device.minitouch_send() + @Config.when(DEVICE_CONTROL_METHOD='MaaTouch') + def _dorm_feed_long_tap(self, button, count): + timeout = Timer(count // 5 + 5).start() + x, y = random_rectangle_point(button.button) + self.device.maatouch_builder.down(x, y).commit() + self.device.maatouch_send() + + while 1: + self.device.maatouch_builder.move(x, y).commit().wait(10) + self.device.maatouch_send() + self.device.screenshot() + + if not self._dorm_has_food(button) \ + or self.handle_info_bar() \ + or self.appear(POPUP_CONFIRM, offset=self._popup_offset): + break + if timeout.reached(): + logger.warning('Wait dorm feed timeout') + break + + self.device.maatouch_builder.up().commit() + self.device.maatouch_send() + @Config.when(DEVICE_CONTROL_METHOD='uiautomator2') def _dorm_feed_long_tap(self, button, count): timeout = Timer(count // 5 + 5).start() @@ -176,7 +199,7 @@ class RewardDorm(UI): def dorm_view_reset(self, skip_first_screenshot=True): """ - Use Dorm manage and Back to reset dorm view. + Use Dorm manage and Back to reset dorm view. Pages: in: page_dorm From 3e17697904b80a9698a3bd0af970f18a6df23a49 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 10 Apr 2024 00:31:52 +0800 Subject: [PATCH 60/96] Fix: skip_first_screenshot after long tap only --- module/dorm/dorm.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/module/dorm/dorm.py b/module/dorm/dorm.py index 79f7d7379..1f7df2e6d 100644 --- a/module/dorm/dorm.py +++ b/module/dorm/dorm.py @@ -308,11 +308,13 @@ class RewardDorm(UI): for _ in range(count): self.device.click(button) self.device.sleep((0.5, 0.8)) + skip_first_screenshot = False else: self._dorm_feed_long_tap(button, count) + skip_first_screenshot = True - skip_first_screenshot = True + self.popup_interval_clear() while 1: if skip_first_screenshot: skip_first_screenshot = False From 76e148f860fde0aa3ed992042d8320a08f931931 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 10 Apr 2024 13:47:12 +0800 Subject: [PATCH 61/96] Fix: Auto redirect MuMu12 from 127.0.0.1:7555 to 127.0.0.1:16xxx --- module/device/connection.py | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/module/device/connection.py b/module/device/connection.py index 8b0f1d511..bbd6ed0b4 100644 --- a/module/device/connection.py +++ b/module/device/connection.py @@ -771,6 +771,7 @@ class Connection(ConnectionAttr): @run_once def brute_force_connect(): + logger.info('Brute force connect') from deploy.Windows.emulator import EmulatorManager manager = EmulatorManager() manager.brute_force_connect() @@ -796,7 +797,7 @@ class Connection(ConnectionAttr): # brute_force_connect if self.config.Emulator_Serial == 'auto' and available.count == 0: - logger.warning(f'No available device found, brute force connecting') + logger.warning(f'No available device found') brute_force_connect() continue else: @@ -854,6 +855,36 @@ class Connection(ConnectionAttr): f'Using serial: {emu_serial}') self.serial = emu_serial + # Redirect MuMu12 from 127.0.0.1:7555 to 127.0.0.1:16xxx + if self.serial == '127.0.0.1:7555': + for _ in range(2): + mumu12 = available.select(may_mumu12_family=True) + if mumu12.count == 1: + emu_serial = mumu12.first_or_none().serial + logger.warning(f'Redirect MuMu12 {self.serial} to {emu_serial}') + self.serial = emu_serial + self.config.Emulator_Serial = emu_serial + break + elif mumu12.count >= 2: + logger.warning(f'Multiple MuMu12 serial found, cannot redirect') + break + else: + # Only 127.0.0.1:7555 + if self.is_mumu_over_version_356: + logger.warning(f'Device {self.serial} is MuMu12 but corresponding port not found') + brute_force_connect() + devices = self.list_device() + # Show available devices + available = devices.select(status='device') + for device in available: + logger.info(device.serial) + if not len(available): + logger.info('No available devices') + continue + else: + # MuMu6 + break + @retry def list_package(self, show_log=True): """ From 0226dd5df36ae364d74c8e5a8c4d89785fa4e169 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 10 Apr 2024 13:55:02 +0800 Subject: [PATCH 62/96] Opt: Allow nemu_ipc to have a lower default screenshot interval --- module/device/screenshot.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/module/device/screenshot.py b/module/device/screenshot.py index cc418a573..0f3f23b3e 100644 --- a/module/device/screenshot.py +++ b/module/device/screenshot.py @@ -157,6 +157,9 @@ class Screenshot(Adb, WSA, DroidCast, AScreenCap, Scrcpy, NemuIpc): if interval != origin: logger.warning(f'Optimization.ScreenshotInterval {origin} is revised to {interval}') self.config.Optimization_ScreenshotInterval = interval + # Allow nemu_ipc to have a lower default + if self.config.Emulator_ScreenshotMethod == 'nemu_ipc': + interval = limit_in(origin, 0.1, 0.2) elif interval == 'combat': origin = self.config.Optimization_CombatScreenshotInterval interval = limit_in(origin, 0.3, 1.0) From 190da3a1d05a2bbcb646d3222d61a775dc175421 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 10 Apr 2024 19:10:17 +0800 Subject: [PATCH 63/96] Fix: Exe from registry may in lower case --- module/device/platform/emulator_windows.py | 39 ++++++++++++---------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/module/device/platform/emulator_windows.py b/module/device/platform/emulator_windows.py index 142ad3e30..07863f253 100644 --- a/module/device/platform/emulator_windows.py +++ b/module/device/platform/emulator_windows.py @@ -70,7 +70,7 @@ class Emulator(EmulatorBase): def path_to_type(cls, path: str) -> str: """ Args: - path: Path to .exe file + path: Path to .exe file, case insensitive Returns: str: Emulator type, such as Emulator.NoxPlayer @@ -78,46 +78,49 @@ class Emulator(EmulatorBase): folder, exe = os.path.split(path) folder, dir1 = os.path.split(folder) folder, dir2 = os.path.split(folder) - if exe == 'Nox.exe': - if dir2 == 'Nox': + exe = exe.lower() + dir1 = dir1.lower() + dir2 = dir2.lower() + if exe == 'nox.exe': + if dir2 == 'nox': return cls.NoxPlayer - elif dir2 == 'Nox64': + elif dir2 == 'nox64': return cls.NoxPlayer64 else: return cls.NoxPlayer - if exe == 'Bluestacks.exe': - if dir1 in ['BlueStacks', 'BlueStacks_cn']: + if exe == 'bluestacks.exe': + if dir1 in ['bluestacks', 'bluestacks_cn']: return cls.BlueStacks4 - elif dir1 in ['BlueStacks_nxt', 'BlueStacks_nxt_cn']: + elif dir1 in ['bluestacks_nxt', 'bluestacks_nxt_cn']: return cls.BlueStacks5 else: return cls.BlueStacks4 - if exe == 'HD-Player.exe': - if dir1 in ['BlueStacks', 'BlueStacks_cn']: + if exe == 'hd-player.exe': + if dir1 in ['bluestacks', 'bluestacks_cn']: return cls.BlueStacks4 - elif dir1 in ['BlueStacks_nxt', 'BlueStacks_nxt_cn']: + elif dir1 in ['bluestacks_nxt', 'bluestacks_nxt_cn']: return cls.BlueStacks5 else: return cls.BlueStacks5 if exe == 'dnplayer.exe': - if dir1 == 'LDPlayer': + if dir1 == 'ldplayer': return cls.LDPlayer3 - elif dir1 == 'LDPlayer4': + elif dir1 == 'ldplayer4': return cls.LDPlayer4 - elif dir1 == 'LDPlayer9': + elif dir1 == 'ldplayer9': return cls.LDPlayer9 else: return cls.LDPlayer3 - if exe == 'NemuPlayer.exe': + if exe == 'nemuplayer.exe': if dir2 == 'nemu': return cls.MuMuPlayer elif dir2 == 'nemu9': return cls.MuMuPlayerX else: return cls.MuMuPlayer - if exe == 'MuMuPlayer.exe': + if exe == 'mumuplayer.exe': return cls.MuMuPlayer12 - if exe == 'MEmu.exe': + if exe == 'memu.exe': return cls.MEmuPlayer return '' @@ -143,7 +146,9 @@ class Emulator(EmulatorBase): elif 'NemuMultiPlayer.exe' in exe: yield exe.replace('NemuMultiPlayer.exe', 'NemuPlayer.exe') elif 'MuMuMultiPlayer.exe' in exe: - yield exe.replace('MuMuMultiPlayer.exe', 'MuMuManager.exe') + yield exe.replace('MuMuMultiPlayer.exe', 'MuMuPlayer.exe') + elif 'MuMuManager.exe' in exe: + yield exe.replace('MuMuManager.exe', 'MuMuPlayer.exe') elif 'MEmuConsole.exe' in exe: yield exe.replace('MEmuConsole.exe', 'MEmu.exe') else: From 6726293edf281f938646a5fa355108f76fa232da Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 10 Apr 2024 19:19:53 +0800 Subject: [PATCH 64/96] Fix: Emulator name was "None" in string --- module/device/platform/platform_base.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/module/device/platform/platform_base.py b/module/device/platform/platform_base.py index 1b68faad8..6b329663b 100644 --- a/module/device/platform/platform_base.py +++ b/module/device/platform/platform_base.py @@ -47,8 +47,18 @@ class PlatformBase(Connection, EmulatorManagerBase): @cached_property def emulator_info(self) -> EmulatorInfo: emulator = self.config.EmulatorInfo_Emulator - name = str(self.config.EmulatorInfo_name).strip().replace('\n', '') - path = str(self.config.EmulatorInfo_path).strip().replace('\n', '') + + def parse_info(value): + if isinstance(value, str): + value = value.strip().replace('\n', '') + if value in ['None', 'False', 'True']: + value = '' + return value + else: + return '' + + name = parse_info(self.config.EmulatorInfo_name) + path = parse_info(self.config.EmulatorInfo_path) return EmulatorInfo( emulator=emulator, From 024b7f314302ce154b2eb824e264f6792ebafbd1 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 10 Apr 2024 19:43:38 +0800 Subject: [PATCH 65/96] Fix: ev_run_sync timeout now does not include std capturing --- module/device/method/nemu_ipc.py | 36 +++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/module/device/method/nemu_ipc.py b/module/device/method/nemu_ipc.py index f6bd5a220..90131962c 100644 --- a/module/device/method/nemu_ipc.py +++ b/module/device/method/nemu_ipc.py @@ -162,7 +162,7 @@ def retry(func): if callable(init): retry_sleep(_) init() - return self.ev_run_sync(func, self, *args, **kwargs) + return func(self, *args, **kwargs) # Can't handle except RequestHumanTakeover: break @@ -237,7 +237,10 @@ class NemuIpcImpl: return with CaptureNemuIpc(): - connect_id = self.lib.nemu_connect(self.nemu_folder, self.instance_id) + connect_id = self.ev_run_sync( + self.lib.nemu_connect, + self.nemu_folder, self.instance_id + ) if connect_id == 0: raise NemuIpcError( 'Connection failed, please check if nemu_folder is correct and emulator is running' @@ -251,7 +254,10 @@ class NemuIpcImpl: return with CaptureNemuIpc(): - self.lib.nemu_disconnect(self.connect_id) + self.ev_run_sync( + self.lib.nemu_disconnect, + self.connect_id + ) # logger.info(f'NemuIpc disconnected: {self.connect_id}') self.connect_id = 0 @@ -282,7 +288,7 @@ class NemuIpcImpl: asyncio.TimeoutError: If function call timeout """ func_wrapped = partial(func, *args, **kwargs) - result = await asyncio.wait_for(self._ev.run_in_executor(None, func_wrapped), timeout=0.2) + result = await asyncio.wait_for(self._ev.run_in_executor(None, func_wrapped), timeout=0.05) return result def ev_run_sync(self, func, *args, **kwargs): @@ -310,8 +316,10 @@ class NemuIpcImpl: nullptr = ctypes.POINTER(ctypes.c_int)() with CaptureNemuIpc(): - ret = self.lib.nemu_capture_display( - self.connect_id, self.display_id, 0, width_ptr, height_ptr, nullptr) + ret = self.ev_run_sync( + self.lib.nemu_capture_display, + self.connect_id, self.display_id, 0, width_ptr, height_ptr, nullptr + ) if ret > 0: raise NemuIpcError('nemu_capture_display failed during get_resolution()') self.width = width_ptr.contents.value @@ -335,8 +343,10 @@ class NemuIpcImpl: length = self.width * self.height * 4 pixels_pointer = ctypes.pointer((ctypes.c_ubyte * length)()) - ret = self.lib.nemu_capture_display( - self.connect_id, self.display_id, length, width_ptr, height_ptr, pixels_pointer) + ret = self.ev_run_sync( + self.lib.nemu_capture_display, + self.connect_id, self.display_id, length, width_ptr, height_ptr, pixels_pointer + ) if ret > 0: raise NemuIpcError('nemu_capture_display failed during screenshot()') @@ -369,7 +379,10 @@ class NemuIpcImpl: x, y = self.convert_xy(x, y) with CaptureNemuIpc(): - ret = self.lib.nemu_input_event_touch_down(self.connect_id, self.display_id, x, y) + ret = self.ev_run_sync( + self.lib.nemu_input_event_touch_down, + self.connect_id, self.display_id, x, y + ) if ret > 0: raise NemuIpcError('nemu_input_event_touch_down failed') @@ -382,7 +395,10 @@ class NemuIpcImpl: self.connect() with CaptureNemuIpc(): - ret = self.lib.nemu_input_event_touch_up(self.connect_id, self.display_id) + ret = self.ev_run_sync( + self.lib.nemu_input_event_touch_up, + self.connect_id, self.display_id + ) if ret > 0: raise NemuIpcError('nemu_input_event_touch_up failed') From 907790182084c6ec4e52f96b25ed969e6abebb34 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 10 Apr 2024 21:37:08 +0800 Subject: [PATCH 66/96] Fix: Handle MISSION_POPUP_ACK when receiving tactical class --- module/tactical/tactical_class.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/module/tactical/tactical_class.py b/module/tactical/tactical_class.py index 692d5051f..5bad47e0c 100644 --- a/module/tactical/tactical_class.py +++ b/module/tactical/tactical_class.py @@ -7,7 +7,7 @@ from module.base.timer import Timer from module.base.utils import * from module.combat.level import LevelOcr from module.exception import ScriptError -from module.handler.assets import GET_MISSION, POPUP_CANCEL, POPUP_CONFIRM +from module.handler.assets import GET_MISSION, MISSION_POPUP_ACK, MISSION_POPUP_GO, POPUP_CANCEL, POPUP_CONFIRM from module.logger import logger from module.map.map_grids import SelectedGrids from module.ocr.ocr import DigitCounter, Duration, Ocr @@ -445,6 +445,10 @@ class RewardTacticalClass(Dock): continue if self.ui_page_main_popups(): continue + # Similar to handle_mission_popup_ack, but battle pass item expire popup has a different ACK button + if self.appear(MISSION_POPUP_GO, offset=self._popup_offset, interval=2): + self.device.click(MISSION_POPUP_ACK) + continue if self.appear(TACTICAL_CLASS_CANCEL, offset=(30, 30), interval=2) \ and self.appear(TACTICAL_CLASS_START, offset=(30, 30)): if self._tactical_books_choose(): From 1b8734d24fb71879bc4658378dfb3fdcdc6cef29 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Wed, 10 Apr 2024 21:38:53 +0800 Subject: [PATCH 67/96] Add: HOMO_STORAGE data for d2/d4 in Divergent Chessboard (#3622) --- campaign/war_archives_20191031_en/b2.py | 7 +++++++ campaign/war_archives_20191031_en/b4.py | 7 +++++++ campaign/war_archives_20191031_en/d2.py | 7 +++++++ campaign/war_archives_20191031_en/d4.py | 7 +++++++ 4 files changed, 28 insertions(+) diff --git a/campaign/war_archives_20191031_en/b2.py b/campaign/war_archives_20191031_en/b2.py index 99710918a..a411e427d 100644 --- a/campaign/war_archives_20191031_en/b2.py +++ b/campaign/war_archives_20191031_en/b2.py @@ -54,6 +54,13 @@ class Config(ConfigBase): MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = True # ===== End of generated config ===== + HOMO_EDGE_COLOR_RANGE = (0, 12) + HOMO_EDGE_HOUGHLINES_THRESHOLD = 210 + MAP_SWIPE_MULTIPLY = (1.101, 1.122) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.065, 1.085) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.034, 1.053) + HOMO_STORAGE = ((6, 5), [(211, 175), (782, 175), (158, 569), (800, 569)]) + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'top' class Campaign(CampaignBase): diff --git a/campaign/war_archives_20191031_en/b4.py b/campaign/war_archives_20191031_en/b4.py index bb04914ab..0e8584c6a 100644 --- a/campaign/war_archives_20191031_en/b4.py +++ b/campaign/war_archives_20191031_en/b4.py @@ -58,6 +58,13 @@ class Config(ConfigBase): MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False # ===== End of generated config ===== + HOMO_EDGE_COLOR_RANGE = (0, 12) + HOMO_EDGE_HOUGHLINES_THRESHOLD = 210 + MAP_SWIPE_MULTIPLY = (1.101, 1.122) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.065, 1.085) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.034, 1.053) + HOMO_STORAGE = ((6, 4), [(448, 180), (1051, 180), (426, 513), (1100, 513)]) + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'top' class Campaign(CampaignBase): diff --git a/campaign/war_archives_20191031_en/d2.py b/campaign/war_archives_20191031_en/d2.py index 5ab9f2114..dbda2c3f3 100644 --- a/campaign/war_archives_20191031_en/d2.py +++ b/campaign/war_archives_20191031_en/d2.py @@ -55,6 +55,13 @@ class Config(ConfigBase): MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = True # ===== End of generated config ===== + HOMO_EDGE_COLOR_RANGE = (0, 12) + HOMO_EDGE_HOUGHLINES_THRESHOLD = 210 + MAP_SWIPE_MULTIPLY = (1.101, 1.122) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.065, 1.085) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.034, 1.053) + HOMO_STORAGE = ((6, 5), [(211, 175), (782, 175), (158, 569), (800, 569)]) + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'top' class Campaign(CampaignBase): diff --git a/campaign/war_archives_20191031_en/d4.py b/campaign/war_archives_20191031_en/d4.py index 01258a03a..3736c9f85 100644 --- a/campaign/war_archives_20191031_en/d4.py +++ b/campaign/war_archives_20191031_en/d4.py @@ -58,6 +58,13 @@ class Config(ConfigBase): MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False # ===== End of generated config ===== + HOMO_EDGE_COLOR_RANGE = (0, 12) + HOMO_EDGE_HOUGHLINES_THRESHOLD = 210 + MAP_SWIPE_MULTIPLY = (1.101, 1.122) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.065, 1.085) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.034, 1.053) + HOMO_STORAGE = ((6, 4), [(448, 180), (1051, 180), (426, 513), (1100, 513)]) + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'top' class Campaign(CampaignBase): From 13f5c1a6b3e268cbcd21c0aa15be3b1125b9a4ba Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 11 Apr 2024 02:11:59 +0800 Subject: [PATCH 68/96] Fix: Deredundant emulator path in lowercase --- module/device/platform/emulator_windows.py | 5 ++++- module/device/platform/platform_base.py | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/module/device/platform/emulator_windows.py b/module/device/platform/emulator_windows.py index 07863f253..bb873e690 100644 --- a/module/device/platform/emulator_windows.py +++ b/module/device/platform/emulator_windows.py @@ -495,7 +495,10 @@ class EmulatorManager(EmulatorManagerBase): exe = [Emulator(path).path for path in exe if Emulator.is_emulator(path)] exe = sorted(set(exe)) - exe = [Emulator(path) for path in exe] + dic = {} + for path in exe: + dic.setdefault(path.lower(), path) + exe = [Emulator(path) for path in dic.values()] return exe @cached_property diff --git a/module/device/platform/platform_base.py b/module/device/platform/platform_base.py index 6b329663b..16313f87d 100644 --- a/module/device/platform/platform_base.py +++ b/module/device/platform/platform_base.py @@ -47,6 +47,8 @@ class PlatformBase(Connection, EmulatorManagerBase): @cached_property def emulator_info(self) -> EmulatorInfo: emulator = self.config.EmulatorInfo_Emulator + if emulator == 'auto': + emulator = '' def parse_info(value): if isinstance(value, str): From d4b5cd11f0fa8a32d41e69e518c7801451ba9c3e Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Thu, 11 Apr 2024 17:37:43 +0800 Subject: [PATCH 69/96] Add: Event entrance of Abyssal Refrain Rerun (#3629) --- campaign/Readme.md | 1 + module/config/argument/args.json | 72 ++++++++++++++++---------------- module/config/i18n/en-US.json | 2 +- module/config/i18n/ja-JP.json | 2 +- module/config/i18n/zh-CN.json | 2 +- 5 files changed, 40 insertions(+), 39 deletions(-) diff --git a/campaign/Readme.md b/campaign/Readme.md index 212ecd771..318c74f10 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -190,3 +190,4 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20240321 | raid 20230629 | Reflections of the Oasis | - | - | - | 綠洲往事 | | 20240328 | raid 20240328 | From Zero to Hero | 从零开始的魔王讨伐之旅 | From Zero to Hero | ゼロから頑張る魔王討伐 | - | | 20240403 | event 20211111 cn | The Flame-Touched Dagger | - | - | - | 復刻杰諾瓦的焰火 | +| 20240411 | event 20220224 cn | Abyssal Refrain Rerun | 复刻深度回音 | Abyssal Refrain Rerun | 鳴動せし星霜の淵(復刻) | - | \ No newline at end of file diff --git a/module/config/argument/args.json b/module/config/argument/args.json index ca176af50..84e1c928f 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1704,11 +1704,11 @@ "display": "hide", "option_bold": [ "event_20211111_cn", - "event_20220324_cn" + "event_20220224_cn" ], - "cn": "event_20220324_cn", - "en": "event_20220324_cn", - "jp": "event_20220324_cn", + "cn": "event_20220224_cn", + "en": "event_20220224_cn", + "jp": "event_20220224_cn", "tw": "event_20211111_cn" }, "Mode": { @@ -2037,11 +2037,11 @@ ], "option_bold": [ "event_20211111_cn", - "event_20220324_cn" + "event_20220224_cn" ], - "cn": "event_20220324_cn", - "en": "event_20220324_cn", - "jp": "event_20220324_cn", + "cn": "event_20220224_cn", + "en": "event_20220224_cn", + "jp": "event_20220224_cn", "tw": "event_20211111_cn" }, "Mode": { @@ -2485,11 +2485,11 @@ ], "option_bold": [ "event_20211111_cn", - "event_20220324_cn" + "event_20220224_cn" ], - "cn": "event_20220324_cn", - "en": "event_20220324_cn", - "jp": "event_20220324_cn", + "cn": "event_20220224_cn", + "en": "event_20220224_cn", + "jp": "event_20220224_cn", "tw": "event_20211111_cn" }, "Mode": { @@ -2895,8 +2895,8 @@ "raid_20240328" ], "option_bold": [ - "raid_20240328", - "raid_20230629" + "raid_20230629", + "raid_20240328" ], "cn": "raid_20240328", "en": "raid_20240328", @@ -3879,11 +3879,11 @@ ], "option_bold": [ "event_20211111_cn", - "event_20220324_cn" + "event_20220224_cn" ], - "cn": "event_20220324_cn", - "en": "event_20220324_cn", - "jp": "event_20220324_cn", + "cn": "event_20220224_cn", + "en": "event_20220224_cn", + "jp": "event_20220224_cn", "tw": "event_20211111_cn" }, "Mode": { @@ -4344,11 +4344,11 @@ ], "option_bold": [ "event_20211111_cn", - "event_20220324_cn" + "event_20220224_cn" ], - "cn": "event_20220324_cn", - "en": "event_20220324_cn", - "jp": "event_20220324_cn", + "cn": "event_20220224_cn", + "en": "event_20220224_cn", + "jp": "event_20220224_cn", "tw": "event_20211111_cn" }, "Mode": { @@ -4809,11 +4809,11 @@ ], "option_bold": [ "event_20211111_cn", - "event_20220324_cn" + "event_20220224_cn" ], - "cn": "event_20220324_cn", - "en": "event_20220324_cn", - "jp": "event_20220324_cn", + "cn": "event_20220224_cn", + "en": "event_20220224_cn", + "jp": "event_20220224_cn", "tw": "event_20211111_cn" }, "Mode": { @@ -5274,11 +5274,11 @@ ], "option_bold": [ "event_20211111_cn", - "event_20220324_cn" + "event_20220224_cn" ], - "cn": "event_20220324_cn", - "en": "event_20220324_cn", - "jp": "event_20220324_cn", + "cn": "event_20220224_cn", + "en": "event_20220224_cn", + "jp": "event_20220224_cn", "tw": "event_20211111_cn" }, "Mode": { @@ -5729,11 +5729,11 @@ ], "option_bold": [ "event_20211111_cn", - "event_20220324_cn" + "event_20220224_cn" ], - "cn": "event_20220324_cn", - "en": "event_20220324_cn", - "jp": "event_20220324_cn", + "cn": "event_20220224_cn", + "en": "event_20220224_cn", + "jp": "event_20220224_cn", "tw": "event_20211111_cn" }, "Mode": { @@ -6136,8 +6136,8 @@ "raid_20240328" ], "option_bold": [ - "raid_20240328", - "raid_20230629" + "raid_20230629", + "raid_20240328" ], "cn": "raid_20240328", "en": "raid_20240328", diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 493f3915b..ebe8cd55c 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -703,7 +703,7 @@ "event_20211125_cn": "World-spanning Arclight Rerun", "event_20211229_cn": "Tower of Transcendence Rerun", "event_20220210_cn": "Northern Overture Rerun", - "event_20220224_cn": "Abyssal Refrain", + "event_20220224_cn": "Abyssal Refrain Rerun", "event_20220310_tw": "復刻斯圖爾特的硝煙", "event_20220324_cn": "Virtual Tower Rerun", "event_20220407_tw": "蒼紅的迴響(復刻)", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index fb5fc0b0d..52baf06e1 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -703,7 +703,7 @@ "event_20211125_cn": "弧光は交わる世界にて(復刻)", "event_20211229_cn": "遡望せし虹彩の塔(復刻)", "event_20220210_cn": "凍絶の北海(復刻)", - "event_20220224_cn": "鳴動せし星霜の淵", + "event_20220224_cn": "鳴動せし星霜の淵(復刻)", "event_20220310_tw": "復刻斯圖爾特的硝煙", "event_20220324_cn": "幻像の塔(復刻)", "event_20220407_tw": "蒼紅的迴響(復刻)", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 7c665095f..416026583 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -703,7 +703,7 @@ "event_20211125_cn": "复刻交汇世界的弧光", "event_20211229_cn": "复刻逆转彩虹之塔", "event_20220210_cn": "复刻北境序曲", - "event_20220224_cn": "深度回音", + "event_20220224_cn": "复刻深度回音", "event_20220310_tw": "復刻斯圖爾特的硝煙", "event_20220324_cn": "复刻虚像构筑之塔", "event_20220407_tw": "蒼紅的迴響(復刻)", From 92a9761d1b7157b4172beef2250cfa237698a619 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 11 Apr 2024 21:48:58 +0800 Subject: [PATCH 70/96] Upd: [CN] Smaller SWITCH_2_EX to handle game client bug --- assets/cn/campaign/SWITCH_2_EX.png | Bin 10290 -> 6681 bytes module/campaign/assets.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/cn/campaign/SWITCH_2_EX.png b/assets/cn/campaign/SWITCH_2_EX.png index 2b341509c511e5370683e08bf875c8fcfac72cdc..e98776244099a7d7e9d4d374b7968a58fe3eaadc 100644 GIT binary patch delta 1357 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 Date: Thu, 11 Apr 2024 21:58:22 +0800 Subject: [PATCH 71/96] Upd: [CN] Add TEMPLATE_STAGE_CLEAR_SMALL to handle bugged game client --- .../cn/template/TEMPLATE_STAGE_CLEAR_SMALL.png | Bin 0 -> 1211 bytes module/campaign/campaign_ocr.py | 6 ++++++ module/template/assets.py | 1 + 3 files changed, 7 insertions(+) create mode 100644 assets/cn/template/TEMPLATE_STAGE_CLEAR_SMALL.png diff --git a/assets/cn/template/TEMPLATE_STAGE_CLEAR_SMALL.png b/assets/cn/template/TEMPLATE_STAGE_CLEAR_SMALL.png new file mode 100644 index 0000000000000000000000000000000000000000..22e0c2bda5819851e7e7a35d5261a01d9f024fe5 GIT binary patch literal 1211 zcmV;s1VsCZP)KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO51AM#2z{tSB zz;IdD(Z$J?fi%FHTu@ZPz`$^Tfq}s&CAB!2fq~%*0|P^Pc}YPD0|R3W0|SFdQg%TJ z0|R3L0|SFdc1Vyj0|R3V0|OIJNoqw20|NttbACZ(QD%BZiGrb}rKN&nN`6wRLU3hq zNosDff@fZGeo;YwQDRAI3IhWJ)D8v)1_oZ2{1OHC#LPSeLsL}-Dual~C?)grM$+xhxmf|p7B=;2nnnfbQ63e)F`Yd zd{`u1lvi}CSe!Vg_*RJ&Nny#OQWes=(obaO$cD-Z%AJ+(QSedZRlJ}yML9}EN#(Wb zR<%ZTKMh%px0?I3CTgeZSnCSuzS29QKi{CnFv`f%Skm~n$vxA{#r++CO)=?RdfInDbtjt*-0cR=O|sSme3TYk~JdpT)k*{8ss|57-*GH|SXK z`H)+o&%(Y$FhvSRDMcH{xWz`r<;Axo%ud{#bT;{UDpQ(Vx=lt@W>wa#>^(X6@|g0~ z3w#QTi)I%eE_qufQSMSvSUIoiZ1vw-y}J1NNe#yue>WSnq_@s%yWSz#>D|@deYlsQ z&%VEI!oG?BCp%7QoqA$A?~LG?vt~V-qcyi=-o6D~3&R#IUi@*X!?Fp>AFecB)w=rT zTHSR`>u+u}*wnH4!B(qnQ@4NE>AP#y9*(`~`;H$_KiGNb^%1|Ln~#g1s6F}QwD*}U z=VZ^fU-)z>?((Ut7T1>D5WU%Y>+7BLyEpIqJUH;k^zrJaiqB@g5PaG7n)yxL+n?`C zKYaRB@cG@>yl?M*RI+y?e7jKeZ#YO-C0USw0K~#9!M98s9!$2Gd;9u@8G{F=t zwn&r=L5d*gB9!Wo!9{R%ad2?;8GHf}+vv8LzXwvEBGm`m_8@_$LMoOAt*(N%V~C Z0RXtRe8TK`q;~)S002ovPDHLkV1n`lH@5%) literal 0 HcmV?d00001 diff --git a/module/campaign/campaign_ocr.py b/module/campaign/campaign_ocr.py index 637481d7c..78642c549 100644 --- a/module/campaign/campaign_ocr.py +++ b/module/campaign/campaign_ocr.py @@ -188,6 +188,12 @@ class CampaignOcr(ModuleBase): image, self._stage_image_gray, name_offset=(75, 9), name_size=(60, 16) ) + # 2024.04.11 Game client bugged with random broken assets around TEMPLATE_STAGE_CLEAR + digits += self.campaign_match_multi( + TEMPLATE_STAGE_CLEAR_SMALL, + image, self._stage_image_gray, + name_offset=(53, 2), name_size=(60, 16) + ) digits += self.campaign_match_multi( TEMPLATE_STAGE_PERCENT, image, self._stage_image_gray, diff --git a/module/template/assets.py b/module/template/assets.py index 27c3d4721..3604cee76 100644 --- a/module/template/assets.py +++ b/module/template/assets.py @@ -212,6 +212,7 @@ TEMPLATE_SIREN_Zuikaku = Template(file={'cn': './assets/cn/template/TEMPLATE_SIR TEMPLATE_STAGE_BLUE_CLEAR = Template(file={'cn': './assets/cn/template/TEMPLATE_STAGE_BLUE_CLEAR.png', 'en': './assets/en/template/TEMPLATE_STAGE_BLUE_CLEAR.png', 'jp': './assets/jp/template/TEMPLATE_STAGE_BLUE_CLEAR.png', 'tw': './assets/tw/template/TEMPLATE_STAGE_BLUE_CLEAR.png'}) TEMPLATE_STAGE_BLUE_PERCENT = Template(file={'cn': './assets/cn/template/TEMPLATE_STAGE_BLUE_PERCENT.png', 'en': './assets/en/template/TEMPLATE_STAGE_BLUE_PERCENT.png', 'jp': './assets/jp/template/TEMPLATE_STAGE_BLUE_PERCENT.png', 'tw': './assets/tw/template/TEMPLATE_STAGE_BLUE_PERCENT.png'}) TEMPLATE_STAGE_CLEAR = Template(file={'cn': './assets/cn/template/TEMPLATE_STAGE_CLEAR.png', 'en': './assets/en/template/TEMPLATE_STAGE_CLEAR.png', 'jp': './assets/jp/template/TEMPLATE_STAGE_CLEAR.png', 'tw': './assets/tw/template/TEMPLATE_STAGE_CLEAR.png'}) +TEMPLATE_STAGE_CLEAR_SMALL = Template(file={'cn': './assets/cn/template/TEMPLATE_STAGE_CLEAR_SMALL.png', 'en': './assets/cn/template/TEMPLATE_STAGE_CLEAR_SMALL.png', 'jp': './assets/cn/template/TEMPLATE_STAGE_CLEAR_SMALL.png', 'tw': './assets/cn/template/TEMPLATE_STAGE_CLEAR_SMALL.png'}) TEMPLATE_STAGE_GREEN_CLEAR = Template(file={'cn': './assets/cn/template/TEMPLATE_STAGE_GREEN_CLEAR.png', 'en': './assets/en/template/TEMPLATE_STAGE_GREEN_CLEAR.png', 'jp': './assets/jp/template/TEMPLATE_STAGE_GREEN_CLEAR.png', 'tw': './assets/tw/template/TEMPLATE_STAGE_GREEN_CLEAR.png'}) TEMPLATE_STAGE_HALF_PERCENT = Template(file={'cn': './assets/cn/template/TEMPLATE_STAGE_HALF_PERCENT.png', 'en': './assets/en/template/TEMPLATE_STAGE_HALF_PERCENT.png', 'jp': './assets/jp/template/TEMPLATE_STAGE_HALF_PERCENT.png', 'tw': './assets/tw/template/TEMPLATE_STAGE_HALF_PERCENT.png'}) TEMPLATE_STAGE_PERCENT = Template(file={'cn': './assets/cn/template/TEMPLATE_STAGE_PERCENT.png', 'en': './assets/en/template/TEMPLATE_STAGE_PERCENT.png', 'jp': './assets/jp/template/TEMPLATE_STAGE_PERCENT.png', 'tw': './assets/tw/template/TEMPLATE_STAGE_PERCENT.png'}) From 76da1ce139972adbfc1250e47740dc906e7671e2 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 11 Apr 2024 22:04:22 +0800 Subject: [PATCH 72/96] Fix: Allow nemu_ipc for screenshot only cuz bad swipes on slow PC --- module/device/device.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/module/device/device.py b/module/device/device.py index 04a12ff86..f24833bc6 100644 --- a/module/device/device.py +++ b/module/device/device.py @@ -102,20 +102,21 @@ class Device(Screenshot, Control, AppControl): # Set with self.config.multi_set(): self.config.Emulator_ScreenshotMethod = method - if method == 'nemu_ipc': - self.config.Emulator_ControlMethod = 'nemu_ipc' + # if method == 'nemu_ipc': + # self.config.Emulator_ControlMethod = 'nemu_ipc' def method_check(self): """ Check combinations of screenshot method and control methods """ # nemu_ipc should be together - if self.config.Emulator_ScreenshotMethod == 'nemu_ipc' and self.config.Emulator_ControlMethod != 'nemu_ipc': - logger.warning('When using nemu_ipc, both screenshot and control should use nemu_ipc') - self.config.Emulator_ControlMethod = 'nemu_ipc' - if self.config.Emulator_ScreenshotMethod != 'nemu_ipc' and self.config.Emulator_ControlMethod == 'nemu_ipc': - logger.warning('When not using nemu_ipc, both screenshot and control should not use nemu_ipc') - self.config.Emulator_ControlMethod = 'minitouch' + # if self.config.Emulator_ScreenshotMethod == 'nemu_ipc' and self.config.Emulator_ControlMethod != 'nemu_ipc': + # logger.warning('When using nemu_ipc, both screenshot and control should use nemu_ipc') + # self.config.Emulator_ControlMethod = 'nemu_ipc' + # if self.config.Emulator_ScreenshotMethod != 'nemu_ipc' and self.config.Emulator_ControlMethod == 'nemu_ipc': + # logger.warning('When not using nemu_ipc, both screenshot and control should not use nemu_ipc') + # self.config.Emulator_ControlMethod = 'minitouch' + pass def handle_night_commission(self, daily_trigger='21:00', threshold=30): """ From 63b76fdb0e59c851745a9e7fd9f744c3a92b423d Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 11 Apr 2024 23:56:55 +0800 Subject: [PATCH 73/96] Fix: Convert emulator-* when finding emulator instances --- module/device/platform/platform_base.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/module/device/platform/platform_base.py b/module/device/platform/platform_base.py index 16313f87d..396b63579 100644 --- a/module/device/platform/platform_base.py +++ b/module/device/platform/platform_base.py @@ -5,6 +5,7 @@ from pydantic import BaseModel from module.base.decorator import cached_property, del_cached_property from module.device.connection import Connection +from module.device.method.utils import get_serial_pair from module.device.platform.emulator_base import EmulatorInstanceBase, EmulatorManagerBase from module.logger import logger from module.map.map_grids import SelectedGrids @@ -80,8 +81,14 @@ class PlatformBase(Connection, EmulatorManagerBase): path=data.path, name=data.name, ) + # Redirect emulator-5554 to 127.0.0.1:5555 + serial = self.serial + port_serial, _ = get_serial_pair(self.serial) + if port_serial is not None: + serial = port_serial + instance = self.find_emulator_instance( - serial=str(self.config.Emulator_Serial).strip(), + serial=serial, name=data.name, path=data.path, emulator=data.emulator, From c3408b2b305447cc9b522f2aea0d936aef38aeba Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 12 Apr 2024 00:03:37 +0800 Subject: [PATCH 74/96] Opt: Write serial if auto device detection found only one instead of searching again next time --- module/device/connection.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/module/device/connection.py b/module/device/connection.py index bbd6ed0b4..22ee5061c 100644 --- a/module/device/connection.py +++ b/module/device/connection.py @@ -811,7 +811,7 @@ class Connection(ConnectionAttr): raise RequestHumanTakeover elif available.count == 1: logger.info(f'Auto device detection found only one device, using it') - self.serial = available[0].serial + self.config.Emulator_Serial = self.serial = available[0].serial del_cached_property(self, 'adb') elif available.count == 2 \ and available.select(serial='127.0.0.1:7555') \ @@ -820,7 +820,7 @@ class Connection(ConnectionAttr): # For MuMu12 serials like 127.0.0.1:7555 and 127.0.0.1:16384 # ignore 7555 use 16384 remain = available.select(may_mumu12_family=True).first_or_none() - self.serial = remain.serial + self.config.Emulator_Serial = self.serial = remain.serial del_cached_property(self, 'adb') else: logger.critical('Multiple devices found, auto device detection cannot decide which to choose, ' @@ -862,8 +862,7 @@ class Connection(ConnectionAttr): if mumu12.count == 1: emu_serial = mumu12.first_or_none().serial logger.warning(f'Redirect MuMu12 {self.serial} to {emu_serial}') - self.serial = emu_serial - self.config.Emulator_Serial = emu_serial + self.config.Emulator_Serial = self.serial = emu_serial break elif mumu12.count >= 2: logger.warning(f'Multiple MuMu12 serial found, cannot redirect') @@ -871,6 +870,8 @@ class Connection(ConnectionAttr): else: # Only 127.0.0.1:7555 if self.is_mumu_over_version_356: + # is_mumu_over_version_356 and nemud_app_keep_alive was cached + # Acceptable since it's the same device logger.warning(f'Device {self.serial} is MuMu12 but corresponding port not found') brute_force_connect() devices = self.list_device() From b3ca33fc2fa9c5ba42ee0954bc8fa2b037423ce8 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 12 Apr 2024 00:35:35 +0800 Subject: [PATCH 75/96] Fix: Add half percent template also --- module/campaign/campaign_ocr.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/module/campaign/campaign_ocr.py b/module/campaign/campaign_ocr.py index 78642c549..77d4ca0ef 100644 --- a/module/campaign/campaign_ocr.py +++ b/module/campaign/campaign_ocr.py @@ -199,6 +199,11 @@ class CampaignOcr(ModuleBase): image, self._stage_image_gray, name_offset=(48, 0), name_size=(60, 16) ) + digits += self.campaign_match_multi( + TEMPLATE_STAGE_HALF_PERCENT, + image, self._stage_image_gray, + name_offset=(48, 0), name_size=(60, 16) + ) if 'half' in self.config.STAGE_ENTRANCE: digits += self.campaign_match_multi( TEMPLATE_STAGE_HALF_PERCENT, From c1ed90dcf404583a7b898eaed98379492d14abbe Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 12 Apr 2024 01:20:28 +0800 Subject: [PATCH 76/96] Fix: Handle MuMu12 port switches --- module/device/connection.py | 30 +++++++++++++++++++++++++++++- module/device/connection_attr.py | 20 ++++++++++++++++---- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/module/device/connection.py b/module/device/connection.py index 22ee5061c..ce5e1968e 100644 --- a/module/device/connection.py +++ b/module/device/connection.py @@ -84,10 +84,17 @@ class AdbDeviceWithStatus(AdbDevice): def __bool__(self): return True + @cached_property + def port(self) -> int: + try: + return int(self.serial.split(':')[1]) + except (IndexError, ValueError): + return 0 + @cached_property def may_mumu12_family(self): # 127.0.0.1:16XXX - return len(self.serial) == 15 and self.serial.startswith('127.0.0.1:16') + return 16384 <= self.port <= 17408 class Connection(ConnectionAttr): @@ -829,6 +836,7 @@ class Connection(ConnectionAttr): # Handle LDPlayer # LDPlayer serial jumps between `127.0.0.1:5555+{X}` and `emulator-5554+{X}` + # No config write since it's dynamic port_serial, emu_serial = get_serial_pair(self.serial) if port_serial and emu_serial: # Might be LDPlayer, check connected devices @@ -886,6 +894,26 @@ class Connection(ConnectionAttr): # MuMu6 break + # MuMu12 uses 127.0.0.1:16385 if port 16384 is occupied, auto redirect + # No config write since it's dynamic + if self.is_mumu12_family: + matched = False + for device in available.select(may_mumu12_family=True): + if device.port == self.port: + # Exact match + matched = True + break + if not matched: + for device in available.select(may_mumu12_family=True): + if -2 <= device.port - self.port <= 2: + # Port switched + logger.info(f'MuMu12 port switches from {self.serial} to {device.serial}') + del_cached_property(self, 'port') + del_cached_property(self, 'is_mumu12_family') + del_cached_property(self, 'is_mumu_family') + self.serial = device.serial + break + @retry def list_package(self, show_log=True): """ diff --git a/module/device/connection_attr.py b/module/device/connection_attr.py index da16756d5..5fe64733a 100644 --- a/module/device/connection_attr.py +++ b/module/device/connection_attr.py @@ -142,6 +142,18 @@ class ConnectionAttr: def is_wsa(self): return bool(re.match(r'^wsa', self.serial)) + @cached_property + def port(self) -> int: + try: + return int(self.serial.split(':')[1]) + except (IndexError, ValueError): + return 0 + + @cached_property + def is_mumu12_family(self): + # 127.0.0.1:16XXX + return 16384 <= self.port <= 17408 + @cached_property def is_mumu_family(self): # 127.0.0.1:7555 @@ -149,9 +161,8 @@ class ConnectionAttr: return self.serial == '127.0.0.1:7555' or self.is_mumu12_family @cached_property - def is_mumu12_family(self): - # 127.0.0.1:16384 + 32*n - return len(self.serial) == 15 and self.serial.startswith('127.0.0.1:16') + def is_nox_family(self): + return 62001 <= self.port <= 63025 @cached_property def is_emulator(self): @@ -197,7 +208,8 @@ class ConnectionAttr: rf"SOFTWARE\BlueStacks_bgp64_hyperv\Guests\{folder_name}\Config") as key: port = QueryValueEx(key, "BstAdbPort")[0] except FileNotFoundError: - logger.error(rf'Unable to find registry HKEY_LOCAL_MACHINE\SOFTWARE\BlueStacks_bgp64_hyperv\Guests\{folder_name}\Config') + logger.error( + rf'Unable to find registry HKEY_LOCAL_MACHINE\SOFTWARE\BlueStacks_bgp64_hyperv\Guests\{folder_name}\Config') logger.error('Please confirm that your are using BlueStack 4 hyper-v and not regular BlueStacks 4') logger.error(r'Please check if there is any other emulator instances under ' r'registry HKEY_LOCAL_MACHINE\SOFTWARE\BlueStacks_bgp64_hyperv\Guests') From 583528917866d2d8538a5a519f37529e27041448 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 13 Apr 2024 01:41:54 +0800 Subject: [PATCH 77/96] Opt: Increase nemu_ipc timeout to 0.15s for slow PCs --- module/device/method/nemu_ipc.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/module/device/method/nemu_ipc.py b/module/device/method/nemu_ipc.py index 90131962c..ab822703c 100644 --- a/module/device/method/nemu_ipc.py +++ b/module/device/method/nemu_ipc.py @@ -288,7 +288,9 @@ class NemuIpcImpl: asyncio.TimeoutError: If function call timeout """ func_wrapped = partial(func, *args, **kwargs) - result = await asyncio.wait_for(self._ev.run_in_executor(None, func_wrapped), timeout=0.05) + # Increased timeout for slow PCs + # Default screenshot interval is 0.2s, so a 0.15s timeout would have a fast retry without extra time costs + result = await asyncio.wait_for(self._ev.run_in_executor(None, func_wrapped), timeout=0.15) return result def ev_run_sync(self, func, *args, **kwargs): From 7321af9e8fc98af0cd741f3bc35d02d67d1e5475 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 13 Apr 2024 01:43:30 +0800 Subject: [PATCH 78/96] Opt: [CN] Remove temp fixes of rendering bugs on game client --- module/campaign/campaign_ocr.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/module/campaign/campaign_ocr.py b/module/campaign/campaign_ocr.py index 77d4ca0ef..763dda45f 100644 --- a/module/campaign/campaign_ocr.py +++ b/module/campaign/campaign_ocr.py @@ -189,21 +189,21 @@ class CampaignOcr(ModuleBase): name_offset=(75, 9), name_size=(60, 16) ) # 2024.04.11 Game client bugged with random broken assets around TEMPLATE_STAGE_CLEAR - digits += self.campaign_match_multi( - TEMPLATE_STAGE_CLEAR_SMALL, - image, self._stage_image_gray, - name_offset=(53, 2), name_size=(60, 16) - ) + # digits += self.campaign_match_multi( + # TEMPLATE_STAGE_CLEAR_SMALL, + # image, self._stage_image_gray, + # name_offset=(53, 2), name_size=(60, 16) + # ) + # digits += self.campaign_match_multi( + # TEMPLATE_STAGE_HALF_PERCENT, + # image, self._stage_image_gray, + # name_offset=(48, 0), name_size=(60, 16) + # ) digits += self.campaign_match_multi( TEMPLATE_STAGE_PERCENT, image, self._stage_image_gray, name_offset=(48, 0), name_size=(60, 16) ) - digits += self.campaign_match_multi( - TEMPLATE_STAGE_HALF_PERCENT, - image, self._stage_image_gray, - name_offset=(48, 0), name_size=(60, 16) - ) if 'half' in self.config.STAGE_ENTRANCE: digits += self.campaign_match_multi( TEMPLATE_STAGE_HALF_PERCENT, From 42af2e479f816d99b28370ee51667267669a3934 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 13 Apr 2024 02:26:41 +0800 Subject: [PATCH 79/96] Chore: [ALAS] Abstract has_cached_image --- module/campaign/run.py | 2 +- module/device/screenshot.py | 4 ++++ module/ui/ui.py | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/module/campaign/run.py b/module/campaign/run.py index 134c0f121..e410078c5 100644 --- a/module/campaign/run.py +++ b/module/campaign/run.py @@ -340,7 +340,7 @@ class CampaignRun(CampaignEvent): # UI ensure self.device.stuck_record_clear() self.device.click_record_clear() - if not hasattr(self.device, 'image') or self.device.image is None: + if not self.device.has_cached_image: self.device.screenshot() self.campaign.device.image = self.device.image if self.campaign.is_in_map(): diff --git a/module/device/screenshot.py b/module/device/screenshot.py index 0f3f23b3e..23c613a9d 100644 --- a/module/device/screenshot.py +++ b/module/device/screenshot.py @@ -72,6 +72,10 @@ class Screenshot(Adb, WSA, DroidCast, AScreenCap, Scrcpy, NemuIpc): return self.image + @property + def has_cached_image(self): + return hasattr(self, 'image') and self.image is not None + def _handle_orientated_image(self, image): """ Args: diff --git a/module/ui/ui.py b/module/ui/ui.py index 8ae99bc86..0c6288494 100644 --- a/module/ui/ui.py +++ b/module/ui/ui.py @@ -146,7 +146,7 @@ class UI(InfoHandler): while 1: if skip_first_screenshot: skip_first_screenshot = False - if not hasattr(self.device, "image") or self.device.image is None: + if not self.device.has_cached_image: self.device.screenshot() else: self.device.screenshot() From 561541377db558df0502e078d5b7b29a005173c6 Mon Sep 17 00:00:00 2001 From: Zuosizhu <2839299264@qq.com> Date: Sat, 13 Apr 2024 11:54:12 +0800 Subject: [PATCH 80/96] Fix: Dashboard won't refresh after gacha when using gacha tickets(PR =9) --- module/gacha/gacha_reward.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/module/gacha/gacha_reward.py b/module/gacha/gacha_reward.py index ab8aaa12f..a5aaaa5df 100644 --- a/module/gacha/gacha_reward.py +++ b/module/gacha/gacha_reward.py @@ -324,6 +324,9 @@ class RewardGacha(GachaUI, GeneralShop, Retirement): buy[0] = self.build_ticket_count # Calculate rolls allowed based on configurations and resources buy[1] = self.gacha_calculate(self.config.Gacha_Amount-self.build_ticket_count, gold_cost, cube_cost) + else: + LogRes(self.config).Cube = self.build_cube_count + self.config.update() # Submit 'buy_count' and execute if capable # Cannot use handle_popup_confirm, this window From ac8000b753e9c305fa7d73cd263fd12a45aadb62 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 13 Apr 2024 22:41:53 +0800 Subject: [PATCH 81/96] Opt: Capture std only when having errors --- module/device/method/nemu_ipc.py | 134 ++++++++++++++++--------------- 1 file changed, 71 insertions(+), 63 deletions(-) diff --git a/module/device/method/nemu_ipc.py b/module/device/method/nemu_ipc.py index ab822703c..58dc2dd15 100644 --- a/module/device/method/nemu_ipc.py +++ b/module/device/method/nemu_ipc.py @@ -2,7 +2,7 @@ import asyncio import ctypes import os import sys -from functools import wraps, partial +from functools import partial, wraps import cv2 import numpy as np @@ -147,6 +147,8 @@ class CaptureNemuIpc(CaptureStd): # MuMuVMMSVC.exe died # b'nemu_capture_display rpc error: 1726\r\n' # No idea how to handle yet + if b'error: 1722' in self.stderr or b'error: 1726' in self.stderr: + raise NemuIpcError('Emulator instance is probably dead') def retry(func): @@ -172,7 +174,7 @@ def retry(func): break # Function call timeout except asyncio.TimeoutError: - logger.warning(f'Func {func.__name__}() call timeout, retrying') + logger.warning(f'Func {func.__name__}() call timeout, retrying: {_}') def init(): self.reconnect() @@ -236,11 +238,10 @@ class NemuIpcImpl: if self.connect_id > 0: return - with CaptureNemuIpc(): - connect_id = self.ev_run_sync( - self.lib.nemu_connect, - self.nemu_folder, self.instance_id - ) + connect_id = self.ev_run_sync( + self.lib.nemu_connect, + self.nemu_folder, self.instance_id + ) if connect_id == 0: raise NemuIpcError( 'Connection failed, please check if nemu_folder is correct and emulator is running' @@ -253,11 +254,10 @@ class NemuIpcImpl: if self.connect_id == 0: return - with CaptureNemuIpc(): - self.ev_run_sync( - self.lib.nemu_disconnect, - self.connect_id - ) + self.ev_run_sync( + self.lib.nemu_disconnect, + self.connect_id + ) # logger.info(f'NemuIpc disconnected: {self.connect_id}') self.connect_id = 0 @@ -302,8 +302,24 @@ class NemuIpcImpl: Raises: asyncio.TimeoutError: If function call timeout + NemuIpcIncompatible: + NemuIpcError """ result = self._ev.run_until_complete(self.ev_run_async(func, *args, **kwargs)) + + err = False + if func.__name__ == 'nemu_connect': + if result == 0: + err = True + else: + if result > 0: + err = True + # Get to actual error message printed in std + if err: + logger.warning(f'Failed to call {func.__name__}, result={result}') + with CaptureNemuIpc(): + result = self._ev.run_until_complete(self.ev_run_async(func, *args, **kwargs)) + return result def get_resolution(self): @@ -317,11 +333,10 @@ class NemuIpcImpl: height_ptr = ctypes.pointer(ctypes.c_int(0)) nullptr = ctypes.POINTER(ctypes.c_int)() - with CaptureNemuIpc(): - ret = self.ev_run_sync( - self.lib.nemu_capture_display, - self.connect_id, self.display_id, 0, width_ptr, height_ptr, nullptr - ) + ret = self.ev_run_sync( + self.lib.nemu_capture_display, + self.connect_id, self.display_id, 0, width_ptr, height_ptr, nullptr + ) if ret > 0: raise NemuIpcError('nemu_capture_display failed during get_resolution()') self.width = width_ptr.contents.value @@ -337,18 +352,17 @@ class NemuIpcImpl: if self.connect_id == 0: self.connect() - with CaptureNemuIpc(): - self.get_resolution() + self.get_resolution() - width_ptr = ctypes.pointer(ctypes.c_int(self.width)) - height_ptr = ctypes.pointer(ctypes.c_int(self.height)) - length = self.width * self.height * 4 - pixels_pointer = ctypes.pointer((ctypes.c_ubyte * length)()) + width_ptr = ctypes.pointer(ctypes.c_int(self.width)) + height_ptr = ctypes.pointer(ctypes.c_int(self.height)) + length = self.width * self.height * 4 + pixels_pointer = ctypes.pointer((ctypes.c_ubyte * length)()) - ret = self.ev_run_sync( - self.lib.nemu_capture_display, - self.connect_id, self.display_id, length, width_ptr, height_ptr, pixels_pointer - ) + ret = self.ev_run_sync( + self.lib.nemu_capture_display, + self.connect_id, self.display_id, length, width_ptr, height_ptr, pixels_pointer + ) if ret > 0: raise NemuIpcError('nemu_capture_display failed during screenshot()') @@ -380,11 +394,10 @@ class NemuIpcImpl: x, y = self.convert_xy(x, y) - with CaptureNemuIpc(): - ret = self.ev_run_sync( - self.lib.nemu_input_event_touch_down, - self.connect_id, self.display_id, x, y - ) + ret = self.ev_run_sync( + self.lib.nemu_input_event_touch_down, + self.connect_id, self.display_id, x, y + ) if ret > 0: raise NemuIpcError('nemu_input_event_touch_down failed') @@ -396,11 +409,10 @@ class NemuIpcImpl: if self.connect_id == 0: self.connect() - with CaptureNemuIpc(): - ret = self.ev_run_sync( - self.lib.nemu_input_event_touch_up, - self.connect_id, self.display_id - ) + ret = self.ev_run_sync( + self.lib.nemu_input_event_touch_up, + self.connect_id, self.display_id + ) if ret > 0: raise NemuIpcError('nemu_input_event_touch_up failed') @@ -488,44 +500,40 @@ class NemuIpc(Platform): def click_nemu_ipc(self, x, y): down = ensure_time((0.010, 0.020)) - with CaptureNemuIpc(): - self.nemu_ipc.down(x, y) - self.sleep(down) - self.nemu_ipc.up() - self.sleep(0.050 - down) + self.nemu_ipc.down(x, y) + self.sleep(down) + self.nemu_ipc.up() + self.sleep(0.050 - down) def long_click_nemu_ipc(self, x, y, duration=1.0): - with CaptureNemuIpc(): - self.nemu_ipc.down(x, y) - self.sleep(duration) - self.nemu_ipc.up() - self.sleep(0.050) + self.nemu_ipc.down(x, y) + self.sleep(duration) + self.nemu_ipc.up() + self.sleep(0.050) def swipe_nemu_ipc(self, p1, p2): points = insert_swipe(p0=p1, p3=p2) - with CaptureNemuIpc(): - for point in points: - self.nemu_ipc.down(*point) - self.sleep(0.010) + for point in points: + self.nemu_ipc.down(*point) + self.sleep(0.010) - self.nemu_ipc.up() - self.sleep(0.050) + self.nemu_ipc.up() + self.sleep(0.050) def drag_nemu_ipc(self, p1, p2, point_random=(-10, -10, 10, 10)): p1 = np.array(p1) - random_rectangle_point(point_random) p2 = np.array(p2) - random_rectangle_point(point_random) points = insert_swipe(p0=p1, p3=p2, speed=20) - with CaptureNemuIpc(): - for point in points: - self.nemu_ipc.down(*point) - self.sleep(0.010) + for point in points: + self.nemu_ipc.down(*point) + self.sleep(0.010) - self.nemu_ipc.down(*p2) - self.sleep(0.140) - self.nemu_ipc.down(*p2) - self.sleep(0.140) + self.nemu_ipc.down(*p2) + self.sleep(0.140) + self.nemu_ipc.down(*p2) + self.sleep(0.140) - self.nemu_ipc.up() - self.sleep(0.050) + self.nemu_ipc.up() + self.sleep(0.050) From 43bdc7e6106b591aa24a4f5d031b23a9caef05ce Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 13 Apr 2024 22:48:12 +0800 Subject: [PATCH 82/96] Opt: Add early_ocr_import for faster mxnet import --- module/base/base.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/module/base/base.py b/module/base/base.py index fc24743c7..0b07a2c34 100644 --- a/module/base/base.py +++ b/module/base/base.py @@ -16,6 +16,8 @@ class ModuleBase: config: AzurLaneConfig device: Device + EARLY_OCR_IMPORT = False + def __init__(self, config, device=None, task=None): """ Args: @@ -49,6 +51,7 @@ class ModuleBase: self.device = device self.interval_timer = {} + self.early_ocr_import() @cached_property def stat(self) -> AzurStats: @@ -58,6 +61,37 @@ class ModuleBase: def emotion(self) -> Emotion: return Emotion(config=self.config) + def early_ocr_import(self): + """ + Start a thread to import cnocr and mxnet while the Alas instance just starting to take screenshots + The import is paralleled since taking screenshot is I/O-bound while importing is CPU-bound, + thus would speed up the startup 0.5 ~ 1.0s and even 5s on slow PCs. + """ + if ModuleBase.EARLY_OCR_IMPORT: + return + if self.config.task.command.lower() in ['alas', 'template']: + logger.info('No actual task bound, skip early_ocr_import') + return + + def do_ocr_import(): + # Wait first image + import time + while 1: + if self.device.has_cached_image: + break + time.sleep(0.01) + + logger.info('early_ocr_import start') + from cnocr import CnOcr + _ = CnOcr + logger.info('early_ocr_import finish') + + logger.info('early_ocr_import call') + import threading + thread = threading.Thread(target=do_ocr_import, daemon=True) + thread.start() + ModuleBase.EARLY_OCR_IMPORT = True + def ensure_button(self, button): if isinstance(button, str): button = HierarchyButton(self.device.hierarchy, button) From 8ee4405d496d7d7f8581771c72964cff31a535da Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 13 Apr 2024 23:32:13 +0800 Subject: [PATCH 83/96] Add: [ALAS] Add background worker --- module/base/base.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/module/base/base.py b/module/base/base.py index 0b07a2c34..6c676abc7 100644 --- a/module/base/base.py +++ b/module/base/base.py @@ -10,6 +10,7 @@ from module.device.method.utils import HierarchyButton from module.logger import logger from module.map_detection.utils import fit_points from module.statistics.azurstats import AzurStats +from module.webui.setting import cached_class_property class ModuleBase: @@ -92,6 +93,26 @@ class ModuleBase: thread.start() ModuleBase.EARLY_OCR_IMPORT = True + @cached_class_property + def worker(self): + """ + A thread pool to run things at background + + Examples: + ``` + def func(image): + logger.info('Update thread start') + with self.config.multi_set(): + self.dungeon_get_simuni_point(image) + self.dungeon_update_stamina(image) + ModuleBase.worker.submit(func, self.device.image) + ``` + """ + logger.hr('Creating worker') + from concurrent.futures import ThreadPoolExecutor + pool = ThreadPoolExecutor(1) + return pool + def ensure_button(self, button): if isinstance(button, str): button = HierarchyButton(self.device.hierarchy, button) From c928654a360233ae66b28c547f226ccaeaee1181 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 13 Apr 2024 23:33:49 +0800 Subject: [PATCH 84/96] Del: Remove nemu_ipc controls cuz bad swipes on slow PCs --- module/config/argument/args.json | 43 ++++++++++++++-------------- module/config/argument/argument.yaml | 1 - module/config/config_generated.py | 2 +- module/config/i18n/en-US.json | 3 +- module/config/i18n/ja-JP.json | 3 +- module/config/i18n/zh-CN.json | 3 +- module/config/i18n/zh-TW.json | 3 +- 7 files changed, 26 insertions(+), 32 deletions(-) diff --git a/module/config/argument/args.json b/module/config/argument/args.json index ca176af50..01702058b 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -128,8 +128,7 @@ "uiautomator2", "minitouch", "Hermit", - "MaaTouch", - "nemu_ipc" + "MaaTouch" ] }, "ScreenshotDedithering": { @@ -1703,8 +1702,8 @@ ], "display": "hide", "option_bold": [ - "event_20211111_cn", - "event_20220324_cn" + "event_20220324_cn", + "event_20211111_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -2036,8 +2035,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20211111_cn", - "event_20220324_cn" + "event_20220324_cn", + "event_20211111_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -2484,8 +2483,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20211111_cn", - "event_20220324_cn" + "event_20220324_cn", + "event_20211111_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -2895,8 +2894,8 @@ "raid_20240328" ], "option_bold": [ - "raid_20240328", - "raid_20230629" + "raid_20230629", + "raid_20240328" ], "cn": "raid_20240328", "en": "raid_20240328", @@ -3878,8 +3877,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20211111_cn", - "event_20220324_cn" + "event_20220324_cn", + "event_20211111_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -4343,8 +4342,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20211111_cn", - "event_20220324_cn" + "event_20220324_cn", + "event_20211111_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -4808,8 +4807,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20211111_cn", - "event_20220324_cn" + "event_20220324_cn", + "event_20211111_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -5273,8 +5272,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20211111_cn", - "event_20220324_cn" + "event_20220324_cn", + "event_20211111_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -5728,8 +5727,8 @@ "event_20240229_cn" ], "option_bold": [ - "event_20211111_cn", - "event_20220324_cn" + "event_20220324_cn", + "event_20211111_cn" ], "cn": "event_20220324_cn", "en": "event_20220324_cn", @@ -6136,8 +6135,8 @@ "raid_20240328" ], "option_bold": [ - "raid_20240328", - "raid_20230629" + "raid_20230629", + "raid_20240328" ], "cn": "raid_20240328", "en": "raid_20240328", diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index f7539f823..cc20982a1 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -52,7 +52,6 @@ Emulator: minitouch, Hermit, MaaTouch, - nemu_ipc, ] ScreenshotDedithering: false AdbRestart: false diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 46dca26cf..8ac69edaa 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -22,7 +22,7 @@ class GeneratedConfig: Emulator_PackageName = 'auto' # auto, com.bilibili.azurlane, com.YoStarEN.AzurLane, com.YoStarJP.AzurLane, com.hkmanjuu.azurlane.gp, com.bilibili.blhx.huawei, com.bilibili.blhx.mi, com.tencent.tmgp.bilibili.blhx, com.bilibili.blhx.baidu, com.bilibili.blhx.qihoo, com.bilibili.blhx.nearme.gamecenter, com.bilibili.blhx.vivo, com.bilibili.blhx.mz, com.bilibili.blhx.dl, com.bilibili.blhx.lenovo, com.bilibili.blhx.uc, com.bilibili.blhx.mzw, com.yiwu.blhx.yx15, com.bilibili.blhx.m4399, com.bilibili.blhx.bilibiliMove, com.hkmanjuu.azurlane.gp.mc Emulator_ServerName = 'disabled' # disabled, cn_android-0, cn_android-1, cn_android-2, cn_android-3, cn_android-4, cn_android-5, cn_android-6, cn_android-7, cn_android-8, cn_android-9, cn_android-10, cn_android-11, cn_android-12, cn_android-13, cn_android-14, cn_android-15, cn_android-16, cn_android-17, cn_android-18, cn_android-19, cn_android-20, cn_android-21, cn_android-22, cn_android-23, cn_ios-0, cn_ios-1, cn_ios-2, cn_ios-3, cn_ios-4, cn_ios-5, cn_ios-6, cn_ios-7, cn_ios-8, cn_ios-9, cn_ios-10, cn_channel-0, cn_channel-1, cn_channel-2, cn_channel-3, cn_channel-4, en-0, en-1, en-2, en-3, en-4, en-5, jp-0, jp-1, jp-2, jp-3, jp-4, jp-5, jp-6, jp-7, jp-8, jp-9, jp-10, jp-11, jp-12, jp-13, jp-14, jp-15, jp-16, jp-17 Emulator_ScreenshotMethod = 'auto' # auto, ADB, ADB_nc, uiautomator2, aScreenCap, aScreenCap_nc, DroidCast, DroidCast_raw, scrcpy, nemu_ipc - Emulator_ControlMethod = 'minitouch' # ADB, uiautomator2, minitouch, Hermit, MaaTouch, nemu_ipc + Emulator_ControlMethod = 'minitouch' # ADB, uiautomator2, minitouch, Hermit, MaaTouch Emulator_ScreenshotDedithering = False Emulator_AdbRestart = False diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 493f3915b..0a92da126 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -419,8 +419,7 @@ "uiautomator2": "uiautomator2", "minitouch": "minitouch", "Hermit": "Hermit", - "MaaTouch": "MaaTouch", - "nemu_ipc": "nemu_ipc" + "MaaTouch": "MaaTouch" }, "ScreenshotDedithering": { "name": "Image Color De-dithering", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index fb5fc0b0d..ca0c6b95e 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -419,8 +419,7 @@ "uiautomator2": "uiautomator2", "minitouch": "minitouch", "Hermit": "Hermit", - "MaaTouch": "MaaTouch", - "nemu_ipc": "nemu_ipc" + "MaaTouch": "MaaTouch" }, "ScreenshotDedithering": { "name": "Emulator.ScreenshotDedithering.name", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 7c665095f..2aa482cde 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -419,8 +419,7 @@ "uiautomator2": "uiautomator2", "minitouch": "minitouch", "Hermit": "Hermit", - "MaaTouch": "MaaTouch", - "nemu_ipc": "nemu_ipc" + "MaaTouch": "MaaTouch" }, "ScreenshotDedithering": { "name": "去除图片色彩抖动", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index b0057775e..7008809e5 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -419,8 +419,7 @@ "uiautomator2": "uiautomator2", "minitouch": "minitouch", "Hermit": "Hermit", - "MaaTouch": "MaaTouch", - "nemu_ipc": "nemu_ipc" + "MaaTouch": "MaaTouch" }, "ScreenshotDedithering": { "name": "去除圖片色彩抖動", From 87c466f55acb3b13a3856ab107b099fbcbc51934 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Sat, 13 Apr 2024 23:42:53 +0800 Subject: [PATCH 85/96] Add: Medal Shop item SpecializedCore (#3637) --- assets/shop/medal/SpecializedCore.png | Bin 0 -> 18534 bytes module/shop/base.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 assets/shop/medal/SpecializedCore.png diff --git a/assets/shop/medal/SpecializedCore.png b/assets/shop/medal/SpecializedCore.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ec5fc299b4e9e8313c75f0d64251b7234977ca GIT binary patch literal 18534 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 Date: Sun, 14 Apr 2024 00:20:46 +0800 Subject: [PATCH 86/96] Add: Iter running emulators when searching all emulators --- module/device/platform/emulator_base.py | 8 +++++ module/device/platform/emulator_windows.py | 35 ++++++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/module/device/platform/emulator_base.py b/module/device/platform/emulator_base.py index ecd026ba1..df77f5f2b 100644 --- a/module/device/platform/emulator_base.py +++ b/module/device/platform/emulator_base.py @@ -205,6 +205,14 @@ class EmulatorBase: class EmulatorManagerBase: + @staticmethod + def iter_running_emulator(): + """ + Yields: + str: Path to emulator executables, may contains duplicate values + """ + return + @cached_property def all_emulators(self) -> t.List[EmulatorBase]: """ diff --git a/module/device/platform/emulator_windows.py b/module/device/platform/emulator_windows.py index bb873e690..a001ee59b 100644 --- a/module/device/platform/emulator_windows.py +++ b/module/device/platform/emulator_windows.py @@ -321,7 +321,7 @@ class EmulatorManager(EmulatorManagerBase): Get recently executed programs in UserAssist https://github.com/forensicmatt/MonitorUserAssist - Returns: + Yields: str: Path to emulator executables, may contains duplicate values """ path = r'Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist' @@ -452,6 +452,31 @@ class EmulatorManager(EmulatorManagerBase): uninstall = res.group(1) if res else uninstall yield uninstall + @staticmethod + def iter_running_emulator(): + """ + Yields: + str: Path to emulator executables, may contains duplicate values + """ + try: + import psutil + except ModuleNotFoundError: + return + # Since this is a one-time-usage, we access psutil._psplatform.Process directly + # to bypass the call of psutil.Process.is_running(). + # This only costs about 0.017s. + for pid in psutil.pids(): + proc = psutil._psplatform.Process(pid) + try: + exe = proc.cmdline() + exe = exe[0].replace(r'\\', '/').replace('\\', '/') + except (psutil.AccessDenied, IndexError): + # psutil.AccessDenied + continue + + if Emulator.is_emulator(exe): + yield exe + @cached_property def all_emulators(self) -> t.List[Emulator]: """ @@ -479,7 +504,7 @@ class EmulatorManager(EmulatorManagerBase): exe.add(ld) # Uninstall registry - for uninstall in self.iter_uninstall_registry(): + for uninstall in EmulatorManager.iter_uninstall_registry(): # Find emulator executable from uninstaller for file in iter_folder(abspath(os.path.dirname(uninstall)), ext='.exe'): if Emulator.is_emulator(file) and os.path.exists(file): @@ -493,6 +518,12 @@ class EmulatorManager(EmulatorManagerBase): if Emulator.is_emulator(file) and os.path.exists(file): exe.add(file) + # Running + for file in EmulatorManager.iter_running_emulator(): + if os.path.exists(file): + exe.add(file) + + # De-redundancy exe = [Emulator(path).path for path in exe if Emulator.is_emulator(path)] exe = sorted(set(exe)) dic = {} From d1ba75250aec7a27229a35bb6c789b358038d928 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sun, 14 Apr 2024 00:56:47 +0800 Subject: [PATCH 87/96] Fix: Ignore wrong emulator info when searching emulator instance --- module/device/platform/platform_base.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/module/device/platform/platform_base.py b/module/device/platform/platform_base.py index 396b63579..d004b5ed6 100644 --- a/module/device/platform/platform_base.py +++ b/module/device/platform/platform_base.py @@ -136,7 +136,7 @@ class PlatformBase(Connection, EmulatorManagerBase): # Search by serial select = instances.select(**search_args) if select.count == 0: - logger.warning(f'No emulator instance with {search_args}') + logger.warning(f'No emulator instance with {search_args}, serial invalid') return None if select.count == 1: instance = select[0] @@ -149,9 +149,9 @@ class PlatformBase(Connection, EmulatorManagerBase): search_args['name'] = name select = instances.select(**search_args) if select.count == 0: - logger.warning(f'No emulator instances with {search_args}') - return None - if select.count == 1: + logger.warning(f'No emulator instances with {search_args}, name invalid') + search_args.pop('name') + elif select.count == 1: instance = select[0] logger.hr('Emulator instance', level=2) logger.info(f'Found emulator instance: {instance}') @@ -162,9 +162,9 @@ class PlatformBase(Connection, EmulatorManagerBase): search_args['path'] = path select = instances.select(**search_args) if select.count == 0: - logger.warning(f'No emulator instances with {search_args}') - return None - if select.count == 1: + logger.warning(f'No emulator instances with {search_args}, path invalid') + search_args.pop('path') + elif select.count == 1: instance = select[0] logger.hr('Emulator instance', level=2) logger.info(f'Found emulator instance: {instance}') @@ -175,9 +175,9 @@ class PlatformBase(Connection, EmulatorManagerBase): search_args['type'] = emulator select = instances.select(**search_args) if select.count == 0: - logger.warning(f'No emulator instances with {search_args}') - return None - if select.count == 1: + logger.warning(f'No emulator instances with {search_args}, type invalid') + search_args.pop('type') + elif select.count == 1: instance = select[0] logger.hr('Emulator instance', level=2) logger.info(f'Found emulator instance: {instance}') From d67874ca68bd0dc6c66045142f481d9bfb2291f1 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sun, 14 Apr 2024 01:01:05 +0800 Subject: [PATCH 88/96] Fix: Filter emulator instances by the running emulator path --- module/device/platform/emulator_base.py | 15 +++++++++++++++ module/device/platform/emulator_windows.py | 9 +++------ module/device/platform/platform_base.py | 21 ++++++++++++++++++++- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/module/device/platform/emulator_base.py b/module/device/platform/emulator_base.py index df77f5f2b..94483e9f9 100644 --- a/module/device/platform/emulator_base.py +++ b/module/device/platform/emulator_base.py @@ -36,6 +36,21 @@ def get_serial_pair(serial): return None, None +def remove_duplicated_path(paths): + """ + Args: + paths (list[str]): + + Returns: + list[str]: + """ + paths = sorted(set(paths)) + dic = {} + for path in paths: + dic.setdefault(path.lower(), path) + return list(dic.values()) + + @dataclass class EmulatorInstanceBase: # Serial for adb connection diff --git a/module/device/platform/emulator_windows.py b/module/device/platform/emulator_windows.py index a001ee59b..f7a5e54bc 100644 --- a/module/device/platform/emulator_windows.py +++ b/module/device/platform/emulator_windows.py @@ -8,7 +8,8 @@ from dataclasses import dataclass # module/device/platform/emulator_base.py # module/device/platform/emulator_windows.py # Will be used in Alas Easy Install, they shouldn't import any Alas modules. -from module.device.platform.emulator_base import EmulatorBase, EmulatorInstanceBase, EmulatorManagerBase +from module.device.platform.emulator_base import EmulatorBase, EmulatorInstanceBase, EmulatorManagerBase, \ + remove_duplicated_path from module.device.platform.utils import cached_property, iter_folder @@ -525,11 +526,7 @@ class EmulatorManager(EmulatorManagerBase): # De-redundancy exe = [Emulator(path).path for path in exe if Emulator.is_emulator(path)] - exe = sorted(set(exe)) - dic = {} - for path in exe: - dic.setdefault(path.lower(), path) - exe = [Emulator(path) for path in dic.values()] + exe = [Emulator(path) for path in remove_duplicated_path(exe)] return exe @cached_property diff --git a/module/device/platform/platform_base.py b/module/device/platform/platform_base.py index d004b5ed6..d4c2dae04 100644 --- a/module/device/platform/platform_base.py +++ b/module/device/platform/platform_base.py @@ -6,7 +6,7 @@ from pydantic import BaseModel from module.base.decorator import cached_property, del_cached_property from module.device.connection import Connection from module.device.method.utils import get_serial_pair -from module.device.platform.emulator_base import EmulatorInstanceBase, EmulatorManagerBase +from module.device.platform.emulator_base import EmulatorInstanceBase, EmulatorManagerBase, remove_duplicated_path from module.logger import logger from module.map.map_grids import SelectedGrids @@ -183,6 +183,25 @@ class PlatformBase(Connection, EmulatorManagerBase): logger.info(f'Found emulator instance: {instance}') return instance + # Still too many instances, search from running emulators + running = remove_duplicated_path(list(self.iter_running_emulator())) + logger.info('Running emulators') + for exe in running: + logger.info(exe) + if len(running) == 1: + logger.info('Only one running emulator') + # Same as searching path + search_args['path'] = running[0] + select = instances.select(**search_args) + if select.count == 0: + logger.warning(f'No emulator instances with {search_args}, path invalid') + search_args.pop('path') + elif select.count == 1: + instance = select[0] + logger.hr('Emulator instance', level=2) + logger.info(f'Found emulator instance: {instance}') + return instance + # Still too many instances logger.warning(f'Found multiple emulator instances with {search_args}') return None From 3e585ab8e758db722adea0f09caf3399059df87c Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sun, 14 Apr 2024 01:06:04 +0800 Subject: [PATCH 89/96] Fix: Mark nemu_ipc unavailable if emulator instance not found --- module/device/method/nemu_ipc.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/module/device/method/nemu_ipc.py b/module/device/method/nemu_ipc.py index 58dc2dd15..b79e1c322 100644 --- a/module/device/method/nemu_ipc.py +++ b/module/device/method/nemu_ipc.py @@ -462,7 +462,9 @@ class NemuIpc(Platform): # Search emulator instance # with E:\ProgramFiles\MuMuPlayer-12.0\shell\MuMuPlayer.exe # installation path is E:\ProgramFiles\MuMuPlayer-12.0 - _ = self.emulator_instance + if self.emulator_instance is None: + logger.error('Unable to use NemuIpc because emulator instance not found') + raise RequestHumanTakeover try: return NemuIpcImpl( nemu_folder=self.emulator_instance.emulator.abspath('../'), From 8e6bb5631d714b8108b51733b65837d0a68d37d9 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sun, 14 Apr 2024 01:12:20 +0800 Subject: [PATCH 90/96] Fix: Perspective parameters in Abyssal Refrain B --- campaign/event_20220224_cn/b1.py | 15 +-------------- campaign/event_20220224_cn/d1.py | 1 + 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/campaign/event_20220224_cn/b1.py b/campaign/event_20220224_cn/b1.py index 0431dab06..4614e27aa 100644 --- a/campaign/event_20220224_cn/b1.py +++ b/campaign/event_20220224_cn/b1.py @@ -55,20 +55,6 @@ class Config: MAP_HAS_MYSTERY = False # ===== End of generated config ===== - INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { - 'height': (150, 255 - 17), - 'width': (0.9, 10), - 'prominence': 10, - 'distance': 35, - } - EDGE_LINES_FIND_PEAKS_PARAMETERS = { - 'height': (255 - 17, 255), - 'prominence': 10, - 'distance': 50, - # 'width': (0, 7), - 'wlen': 1000 - } - HOMO_EDGE_COLOR_RANGE = (0, 17) MAP_ENEMY_GENRE_DETECTION_SCALING = { 'DD': 1.111, 'CL': 1.111, @@ -76,6 +62,7 @@ class Config: 'BBred': 1.111, 'CV': 1.111, } + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom' MAP_SWIPE_MULTIPLY = (0.974, 0.992) MAP_SWIPE_MULTIPLY_MINITOUCH = (0.942, 0.959) MAP_SWIPE_MULTIPLY_MAATOUCH = (0.914, 0.931) diff --git a/campaign/event_20220224_cn/d1.py b/campaign/event_20220224_cn/d1.py index 4ec7eeb1f..12bc601c6 100644 --- a/campaign/event_20220224_cn/d1.py +++ b/campaign/event_20220224_cn/d1.py @@ -76,6 +76,7 @@ class Config: 'BBred': 1.111, 'CV': 1.111, } + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom' MAP_SWIPE_MULTIPLY = (0.974, 0.992) MAP_SWIPE_MULTIPLY_MINITOUCH = (0.942, 0.959) MAP_SWIPE_MULTIPLY_MAATOUCH = (0.914, 0.931) From 502558dbbd2cce06ae587da179a5992c9464e7b5 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 15 Apr 2024 00:57:40 +0800 Subject: [PATCH 91/96] Fix: brute_force_connect() was called on linux --- module/device/connection.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/module/device/connection.py b/module/device/connection.py index ce5e1968e..0611d523b 100644 --- a/module/device/connection.py +++ b/module/device/connection.py @@ -4,6 +4,7 @@ import platform import re import socket import subprocess +import sys import time from functools import wraps @@ -805,8 +806,11 @@ class Connection(ConnectionAttr): # brute_force_connect if self.config.Emulator_Serial == 'auto' and available.count == 0: logger.warning(f'No available device found') - brute_force_connect() - continue + if sys.platform == 'win32': + brute_force_connect() + continue + else: + break else: break From 16ba4aaad6079b82554320b9911635aeb7dba50d Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 15 Apr 2024 02:54:44 +0800 Subject: [PATCH 92/96] Chore: Poorly search mxnet-cu* instead of using pkg_resources --- module/base/base.py | 4 ++-- module/ocr/al_ocr.py | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/module/base/base.py b/module/base/base.py index 6c676abc7..8f33d433e 100644 --- a/module/base/base.py +++ b/module/base/base.py @@ -83,8 +83,8 @@ class ModuleBase: time.sleep(0.01) logger.info('early_ocr_import start') - from cnocr import CnOcr - _ = CnOcr + from module.ocr.al_ocr import AlOcr + _ = AlOcr logger.info('early_ocr_import finish') logger.info('early_ocr_import call') diff --git a/module/ocr/al_ocr.py b/module/ocr/al_ocr.py index 5f6fee115..b662b1501 100644 --- a/module/ocr/al_ocr.py +++ b/module/ocr/al_ocr.py @@ -17,10 +17,12 @@ from cnocr.hyperparams.cn_hyperparams import CnHyperparams as Hyperparams def get_mxnet_context(): import re - import pkg_resources - for pkg in pkg_resources.working_set: - if re.match(r'^mxnet-cu\d+$', pkg.key): - logger.info(f'MXNet gpu package: {pkg.key}=={pkg.version} found, using it') + import cnocr + site_packages = os.path.abspath(os.path.join(cnocr.__file__, '../../')) + for file in os.listdir(site_packages): + # mxnet_cu101-1.6.0.dist-info + if re.match(r'^mxnet[-_]cu\d+', file): + logger.info(f'MXNet gpu package: {file} found, using it') return 'gpu' return 'cpu' From 31da8d42a144005e4ba716e2c5995b248c8f4b28 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 15 Apr 2024 03:48:37 +0800 Subject: [PATCH 93/96] Opt: Early init minitouch and MaaTouch for faster startup --- module/base/base.py | 2 +- module/config/config.py | 4 +++ module/device/device.py | 7 +++++ module/device/method/maatouch.py | 43 +++++++++++++++++++++++++------ module/device/method/minitouch.py | 40 +++++++++++++++++++++++----- 5 files changed, 80 insertions(+), 16 deletions(-) diff --git a/module/base/base.py b/module/base/base.py index 8f33d433e..587951663 100644 --- a/module/base/base.py +++ b/module/base/base.py @@ -70,7 +70,7 @@ class ModuleBase: """ if ModuleBase.EARLY_OCR_IMPORT: return - if self.config.task.command.lower() in ['alas', 'template']: + if not self.config.is_actual_task: logger.info('No actual task bound, skip early_ocr_import') return diff --git a/module/config/config.py b/module/config/config.py index 1b7d0dc54..c91660937 100644 --- a/module/config/config.py +++ b/module/config/config.py @@ -189,6 +189,10 @@ class AzurLaneConfig(ConfigUpdater, ManualConfig, GeneratedConfig, ConfigWatcher self.data, keys="Alas.Optimization.CloseGameDuringWait", default=False ) + @property + def is_actual_task(self): + return self.task.command.lower() not in ['alas', 'template'] + def get_next_task(self): """ Calculate tasks, set pending_task and waiting_task diff --git a/module/device/device.py b/module/device/device.py index f24833bc6..1aa6a033a 100644 --- a/module/device/device.py +++ b/module/device/device.py @@ -87,6 +87,13 @@ class Device(Screenshot, Control, AppControl): if not self.config.is_template_config and self.config.Emulator_ScreenshotMethod == 'auto': self.run_simple_screenshot_benchmark() + # Early init + if self.config.is_actual_task: + if self.config.Emulator_ControlMethod == 'MaaTouch': + self.early_maatouch_init() + if self.config.Emulator_ControlMethod == 'minitouch': + self.early_minitouch_init() + def run_simple_screenshot_benchmark(self): """ Perform a screenshot method benchmark, test 3 times on each method. diff --git a/module/device/method/maatouch.py b/module/device/method/maatouch.py index b1d6e3471..8aa59e13a 100644 --- a/module/device/method/maatouch.py +++ b/module/device/method/maatouch.py @@ -1,14 +1,15 @@ import socket +import threading from functools import wraps from adbutils.errors import AdbError -from module.base.decorator import cached_property, del_cached_property +from module.base.decorator import cached_property, del_cached_property, has_cached_property from module.base.timer import Timer from module.base.utils import * from module.device.connection import Connection from module.device.method.minitouch import CommandBuilder, insert_swipe -from module.device.method.utils import RETRY_TRIES, retry_sleep, handle_adb_error +from module.device.method.utils import RETRY_TRIES, handle_adb_error, retry_sleep from module.exception import RequestHumanTakeover from module.logger import logger @@ -36,20 +37,20 @@ def retry(func): def init(): self.adb_reconnect() - del_cached_property(self, 'maatouch_builder') + del_cached_property(self, '_maatouch_builder') # Emulator closed except ConnectionAbortedError as e: logger.error(e) def init(): self.adb_reconnect() - del_cached_property(self, 'maatouch_builder') + del_cached_property(self, '_maatouch_builder') # AdbError except AdbError as e: if handle_adb_error(e): def init(): self.adb_reconnect() - del_cached_property(self, 'maatouch_builder') + del_cached_property(self, '_maatouch_builder') else: break # MaaTouchNotInstalledError: Received "Aborted" from MaaTouch @@ -58,12 +59,12 @@ def retry(func): def init(): self.maatouch_install() - del_cached_property(self, 'maatouch_builder') + del_cached_property(self, '_maatouch_builder') except BrokenPipeError as e: logger.error(e) def init(): - del_cached_property(self, 'maatouch_builder') + del_cached_property(self, '_maatouch_builder') # Unknown, probably a trucked image except Exception as e: logger.exception(e) @@ -90,13 +91,39 @@ class MaaTouch(Connection): max_y: int _maatouch_stream = socket.socket _maatouch_stream_storage = None + _maatouch_init_thread = None @cached_property - def maatouch_builder(self): + def _maatouch_builder(self): self.maatouch_init() # Orientation is handled inside MaaTouch return CommandBuilder(self, handle_orientation=False) + @property + def maatouch_builder(self): + # Wait init thread + if self._maatouch_init_thread is not None: + self._maatouch_init_thread.join() + del self._maatouch_init_thread + self._maatouch_init_thread = None + + return self._maatouch_builder + + def early_maatouch_init(self): + """ + Start a thread to init maatouch connection while the Alas instance just starting to take screenshots + This would speed up the first click 0.2 ~ 0.4s. + """ + if has_cached_property(self, '_maatouch_builder'): + return + + def early_maatouch_init_func(): + _ = self._maatouch_builder + + thread = threading.Thread(target=early_maatouch_init_func, daemon=True) + self._maatouch_init_thread = thread + thread.start() + def maatouch_init(self): logger.hr('MaaTouch init') max_x, max_y = 1280, 720 diff --git a/module/device/method/minitouch.py b/module/device/method/minitouch.py index 70abd1a1c..42c582271 100644 --- a/module/device/method/minitouch.py +++ b/module/device/method/minitouch.py @@ -1,7 +1,7 @@ import asyncio import json -import re import socket +import threading import time from functools import wraps from typing import List @@ -10,11 +10,11 @@ import websockets from adbutils.errors import AdbError from uiautomator2 import _Service -from module.base.decorator import Config, cached_property, del_cached_property +from module.base.decorator import Config, cached_property, del_cached_property, has_cached_property from module.base.timer import Timer from module.base.utils import * from module.device.connection import Connection -from module.device.method.utils import RETRY_TRIES, retry_sleep, handle_adb_error +from module.device.method.utils import RETRY_TRIES, handle_adb_error, retry_sleep from module.exception import RequestHumanTakeover, ScriptError from module.logger import logger @@ -324,7 +324,7 @@ def retry(func): self.install_uiautomator2() if self._minitouch_port: self.adb_forward_remove(f'tcp:{self._minitouch_port}') - del_cached_property(self, 'minitouch_builder') + del_cached_property(self, '_minitouch_builder') # MinitouchOccupiedError: Timeout when connecting to minitouch except MinitouchOccupiedError as e: logger.error(e) @@ -333,7 +333,7 @@ def retry(func): self.restart_atx() if self._minitouch_port: self.adb_forward_remove(f'tcp:{self._minitouch_port}') - del_cached_property(self, 'minitouch_builder') + del_cached_property(self, '_minitouch_builder') # AdbError except AdbError as e: if handle_adb_error(e): @@ -345,7 +345,7 @@ def retry(func): logger.error(e) def init(): - del_cached_property(self, 'minitouch_builder') + del_cached_property(self, '_minitouch_builder') # Unknown, probably a trucked image except Exception as e: logger.exception(e) @@ -366,12 +366,38 @@ class Minitouch(Connection): _minitouch_ws: websockets.WebSocketClientProtocol max_x: int max_y: int + _minitouch_init_thread = None @cached_property - def minitouch_builder(self): + def _minitouch_builder(self): self.minitouch_init() return CommandBuilder(self) + @property + def minitouch_builder(self): + # Wait init thread + if self._minitouch_init_thread is not None: + self._minitouch_init_thread.join() + del self._minitouch_init_thread + self._minitouch_init_thread = None + + return self._minitouch_builder + + def early_minitouch_init(self): + """ + Start a thread to init minitouch connection while the Alas instance just starting to take screenshots + This would speed up the first click 0.05s. + """ + if has_cached_property(self, '_minitouch_builder'): + return + + def early_minitouch_init_func(): + _ = self._minitouch_builder + + thread = threading.Thread(target=early_minitouch_init_func, daemon=True) + self._minitouch_init_thread = thread + thread.start() + @Config.when(DEVICE_OVER_HTTP=False) def minitouch_init(self): logger.hr('MiniTouch init') From 4858d55c460897da18fac8e4fc0b4f74d913a7e3 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 15 Apr 2024 18:43:42 +0800 Subject: [PATCH 94/96] Opt: Patch pkg_resources for faster startup --- module/device/device.py | 6 ++ module/device/pkg_resources/__init__.py | 82 +++++++++++++++++++++++++ module/ocr/al_ocr.py | 12 ++-- 3 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 module/device/pkg_resources/__init__.py diff --git a/module/device/device.py b/module/device/device.py index 1aa6a033a..038b6719b 100644 --- a/module/device/device.py +++ b/module/device/device.py @@ -1,6 +1,12 @@ import collections from datetime import datetime +# Patch pkg_resources before importing adbutils and uiautomator2 +from module.device.pkg_resources import get_distribution + +# Just avoid being removed by import optimization +_ = get_distribution + from module.base.timer import Timer from module.config.utils import get_server_next_update from module.device.app_control import AppControl diff --git a/module/device/pkg_resources/__init__.py b/module/device/pkg_resources/__init__.py new file mode 100644 index 000000000..61014ef79 --- /dev/null +++ b/module/device/pkg_resources/__init__.py @@ -0,0 +1,82 @@ +import os +import re +import sys + +from module.base.decorator import cached_property + +""" +Importing pkg_resources is so slow, like 0.4 ~ 1.0s, just google it you will find it indeed really slow. +Since it was some kind of standard library there is no way to modify it or speed it up. +So here's a poor but fast implementation of pkg_resources returning the things in need. + +To patch: +``` +# Patch pkg_resources before importing adbutils and uiautomator2 +from module.device.pkg_resources import get_distribution +# Just avoid being removed by import optimization +_ = get_distribution +``` +""" +# Inject sys.modules, pretend we have pkg_resources imported +sys.modules['pkg_resources'] = sys.modules['module.device.pkg_resources'] + + +class FakeDistributionObject: + def __init__(self, dist, version): + self.dist = dist + self.version = version + + def __str__(self): + return f'{self.__class__.__name__}({self.dist}={self.version})' + + __repr__ = __str__ + + +class PackageCache: + @cached_property + def site_packages(self): + # Just whatever library to locate the `site-packages` directory + import requests + path = os.path.abspath(os.path.join(requests.__file__, '../../')) + return path + + @cached_property + def dict_installed_packages(self): + """ + Returns: + dict: Key: str, package name + Value: FakeDistributionObject + """ + dic = {} + for file in os.listdir(self.site_packages): + # mxnet_cu101-1.6.0.dist-info + res = re.match(r'^(.+)-(.+)\.dist-info$', file) + if res: + obj = FakeDistributionObject( + dist=res.group(1), + version=res.group(2), + ) + dic[obj.dist] = obj + + return dic + + +PACKAGE_CACHE = PackageCache() + + +def resource_filename(*args): + if args == ("adbutils", "binaries"): + path = os.path.abspath(os.path.join(PACKAGE_CACHE.site_packages, *args)) + return path + + +def get_distribution(dist): + """Return a current distribution object for a Requirement or string""" + if dist == 'adbutils': + return PACKAGE_CACHE.dict_installed_packages.get('adbutils', '0.11.0') + if dist == 'uiautomator2': + return PACKAGE_CACHE.dict_installed_packages.get('uiautomator2', '2.16.17') + + +class DistributionNotFound(Exception): + pass diff --git a/module/ocr/al_ocr.py b/module/ocr/al_ocr.py index b662b1501..e913c42f3 100644 --- a/module/ocr/al_ocr.py +++ b/module/ocr/al_ocr.py @@ -13,16 +13,14 @@ from cnocr.cn_ocr import (check_model_name, data_dir, gen_network, load_module, read_charset) from cnocr.fit.ctc_metrics import CtcMetrics from cnocr.hyperparams.cn_hyperparams import CnHyperparams as Hyperparams +from module.device.pkg_resources import PACKAGE_CACHE def get_mxnet_context(): - import re - import cnocr - site_packages = os.path.abspath(os.path.join(cnocr.__file__, '../../')) - for file in os.listdir(site_packages): - # mxnet_cu101-1.6.0.dist-info - if re.match(r'^mxnet[-_]cu\d+', file): - logger.info(f'MXNet gpu package: {file} found, using it') + for dist in PACKAGE_CACHE.dict_installed_packages.values(): + # mxnet_cu101 + if dist.dist.startswith('mxnet_cu'): + logger.info(f'MXNet gpu package: {dist.dist}=={dist.version} found, using it') return 'gpu' return 'cpu' From 8376d628437c66c6fb38f97253003bcc3efa26c5 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 15 Apr 2024 19:17:18 +0800 Subject: [PATCH 95/96] Sync: [ALAS] Minitouch multi-finger support --- module/device/method/maatouch.py | 42 ++++++++++++++++--------- module/device/method/minitouch.py | 52 +++++++++++++++++-------------- 2 files changed, 55 insertions(+), 39 deletions(-) diff --git a/module/device/method/maatouch.py b/module/device/method/maatouch.py index b1d6e3471..8122505bc 100644 --- a/module/device/method/maatouch.py +++ b/module/device/method/maatouch.py @@ -77,6 +77,19 @@ def retry(func): return retry_wrapper +class MaatouchBuilder(CommandBuilder): + def __init__(self, device, contact=0, handle_orientation=False): + """ + Args: + device (MaaTouch): + """ + + super().__init__(device, contact, handle_orientation) + + def send(self): + return self.device.maatouch_send(builder=self) + + class MaaTouchNotInstalledError(Exception): pass @@ -94,8 +107,7 @@ class MaaTouch(Connection): @cached_property def maatouch_builder(self): self.maatouch_init() - # Orientation is handled inside MaaTouch - return CommandBuilder(self, handle_orientation=False) + return MaatouchBuilder(self) def maatouch_init(self): logger.hr('MaaTouch init') @@ -166,14 +178,14 @@ class MaaTouch(Connection): ) ) - def maatouch_send(self): - content = self.maatouch_builder.to_minitouch() + def maatouch_send(self, builder: MaatouchBuilder): + content = builder.to_minitouch() # logger.info("send operation: {}".format(content.replace("\n", "\\n"))) byte_content = content.encode('utf-8') self._maatouch_stream.sendall(byte_content) self._maatouch_stream.recv(0) - self.sleep(self.maatouch_builder.delay / 1000 + self.maatouch_builder.DEFAULT_DELAY) - self.maatouch_builder.clear() + self.sleep(self.maatouch_builder.delay / 1000 + builder.DEFAULT_DELAY) + builder.clear() def maatouch_install(self): logger.hr('MaaTouch install') @@ -188,7 +200,7 @@ class MaaTouch(Connection): builder = self.maatouch_builder builder.down(x, y).commit() builder.up().commit() - self.maatouch_send() + builder.send() @retry def long_click_maatouch(self, x, y, duration=1.0): @@ -196,7 +208,7 @@ class MaaTouch(Connection): builder = self.maatouch_builder builder.down(x, y).commit().wait(duration) builder.up().commit() - self.maatouch_send() + builder.send() @retry def swipe_maatouch(self, p1, p2): @@ -204,14 +216,14 @@ class MaaTouch(Connection): builder = self.maatouch_builder builder.down(*points[0]).commit() - self.maatouch_send() + builder.send() for point in points[1:]: builder.move(*point).commit().wait(10) - self.maatouch_send() + builder.send() builder.up().commit() - self.maatouch_send() + builder.send() @retry def drag_maatouch(self, p1, p2, point_random=(-10, -10, 10, 10)): @@ -221,15 +233,15 @@ class MaaTouch(Connection): builder = self.maatouch_builder builder.down(*points[0]).commit() - self.maatouch_send() + builder.send() for point in points[1:]: builder.move(*point).commit().wait(10) - self.maatouch_send() + builder.send() builder.move(*p2).commit().wait(140) builder.move(*p2).commit().wait(140) - self.maatouch_send() + builder.send() builder.up().commit() - self.maatouch_send() + builder.send() diff --git a/module/device/method/minitouch.py b/module/device/method/minitouch.py index 70abd1a1c..405bc0299 100644 --- a/module/device/method/minitouch.py +++ b/module/device/method/minitouch.py @@ -184,7 +184,7 @@ class CommandBuilder: max_x = 1280 max_y = 720 - def __init__(self, device, handle_orientation=True): + def __init__(self, device, contact=0, handle_orientation=True): """ Args: device: @@ -192,6 +192,7 @@ class CommandBuilder: self.device = device self.commands = [] self.delay = 0 + self.contact = contact self.handle_orientation = handle_orientation @property @@ -243,21 +244,21 @@ class CommandBuilder: self.delay += ms return self - def up(self, contact=0): + def up(self): """ add minitouch command: 'u \n' """ - self.commands.append(Command('u', contact=contact)) + self.commands.append(Command('u', contact=self.contact)) return self - def down(self, x, y, contact=0, pressure=100): + def down(self, x, y, pressure=100): """ add minitouch command: 'd \n' """ x, y = self.convert(x, y) - self.commands.append(Command('d', x=x, y=y, contact=contact, pressure=pressure)) + self.commands.append(Command('d', x=x, y=y, contact=self.contact, pressure=pressure)) return self - def move(self, x, y, contact=0, pressure=100): + def move(self, x, y, pressure=100): """ add minitouch command: 'm \n' """ x, y = self.convert(x, y) - self.commands.append(Command('m', x=x, y=y, contact=contact, pressure=pressure)) + self.commands.append(Command('m', x=x, y=y, contact=self.contact, pressure=pressure)) return self def clear(self): @@ -271,6 +272,9 @@ class CommandBuilder: def to_atx_agent(self) -> List[str]: return [command.to_atx_agent(self.max_x, self.max_y) for command in self.commands] + def send(self): + return self.device.minitouch_send(builder=self) + class MinitouchNotInstalledError(Exception): pass @@ -446,14 +450,14 @@ class Minitouch(Connection): ) @Config.when(DEVICE_OVER_HTTP=False) - def minitouch_send(self): - content = self.minitouch_builder.to_minitouch() + def minitouch_send(self, builder: CommandBuilder): + content = builder.to_minitouch() # logger.info("send operation: {}".format(content.replace("\n", "\\n"))) byte_content = content.encode('utf-8') self._minitouch_client.sendall(byte_content) self._minitouch_client.recv(0) - time.sleep(self.minitouch_builder.delay / 1000 + self.minitouch_builder.DEFAULT_DELAY) - self.minitouch_builder.clear() + time.sleep(self.minitouch_builder.delay / 1000 + builder.DEFAULT_DELAY) + builder.clear() @cached_property def _minitouch_loop(self): @@ -514,8 +518,8 @@ class Minitouch(Connection): self._minitouch_ws = self._minitouch_loop_run(connect()) @Config.when(DEVICE_OVER_HTTP=True) - def minitouch_send(self): - content = self.minitouch_builder.to_atx_agent() + def minitouch_send(self, builder: CommandBuilder): + content = builder.to_atx_agent() async def send(): for row in content: @@ -523,15 +527,15 @@ class Minitouch(Connection): await self._minitouch_ws.send(row) self._minitouch_loop_run(send()) - time.sleep(self.minitouch_builder.delay / 1000 + self.minitouch_builder.DEFAULT_DELAY) - self.minitouch_builder.clear() + time.sleep(builder.delay / 1000 + builder.DEFAULT_DELAY) + builder.clear() @retry def click_minitouch(self, x, y): builder = self.minitouch_builder builder.down(x, y).commit() builder.up().commit() - self.minitouch_send() + builder.send() @retry def long_click_minitouch(self, x, y, duration=1.0): @@ -539,7 +543,7 @@ class Minitouch(Connection): builder = self.minitouch_builder builder.down(x, y).commit().wait(duration) builder.up().commit() - self.minitouch_send() + builder.send() @retry def swipe_minitouch(self, p1, p2): @@ -547,14 +551,14 @@ class Minitouch(Connection): builder = self.minitouch_builder builder.down(*points[0]).commit() - self.minitouch_send() + builder.send() for point in points[1:]: builder.move(*point).commit().wait(10) - self.minitouch_send() + builder.send() builder.up().commit() - self.minitouch_send() + builder.send() @retry def drag_minitouch(self, p1, p2, point_random=(-10, -10, 10, 10)): @@ -564,15 +568,15 @@ class Minitouch(Connection): builder = self.minitouch_builder builder.down(*points[0]).commit() - self.minitouch_send() + builder.send() for point in points[1:]: builder.move(*point).commit().wait(10) - self.minitouch_send() + builder.send() builder.move(*p2).commit().wait(140) builder.move(*p2).commit().wait(140) - self.minitouch_send() + builder.send() builder.up().commit() - self.minitouch_send() + builder.send() From 485c024b448e11a970dafa26e1d29be50c84f6db Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Mon, 15 Apr 2024 19:20:52 +0800 Subject: [PATCH 96/96] Fix: Chain call minitouch in dorm --- module/dorm/dorm.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/module/dorm/dorm.py b/module/dorm/dorm.py index 1f7df2e6d..5c76eded7 100644 --- a/module/dorm/dorm.py +++ b/module/dorm/dorm.py @@ -108,12 +108,13 @@ class RewardDorm(UI): # Long tap to feed. This requires minitouch. timeout = Timer(count // 5 + 5).start() x, y = random_rectangle_point(button.button) - self.device.minitouch_builder.down(x, y).commit() - self.device.minitouch_send() + builder = self.device.minitouch_builder + builder.down(x, y).commit() + builder.send() while 1: - self.device.minitouch_builder.move(x, y).commit().wait(10) - self.device.minitouch_send() + builder.move(x, y).commit().wait(10) + builder.send() self.device.screenshot() if not self._dorm_has_food(button) \ @@ -124,19 +125,20 @@ class RewardDorm(UI): logger.warning('Wait dorm feed timeout') break - self.device.minitouch_builder.up().commit() - self.device.minitouch_send() + builder.up().commit() + builder.send() @Config.when(DEVICE_CONTROL_METHOD='MaaTouch') def _dorm_feed_long_tap(self, button, count): timeout = Timer(count // 5 + 5).start() x, y = random_rectangle_point(button.button) - self.device.maatouch_builder.down(x, y).commit() - self.device.maatouch_send() + builder = self.device.maatouch_builder + builder.down(x, y).commit() + builder.send() while 1: - self.device.maatouch_builder.move(x, y).commit().wait(10) - self.device.maatouch_send() + builder.move(x, y).commit().wait(10) + builder.send() self.device.screenshot() if not self._dorm_has_food(button) \ @@ -147,8 +149,8 @@ class RewardDorm(UI): logger.warning('Wait dorm feed timeout') break - self.device.maatouch_builder.up().commit() - self.device.maatouch_send() + builder.up().commit() + builder.send() @Config.when(DEVICE_CONTROL_METHOD='uiautomator2') def _dorm_feed_long_tap(self, button, count):