From 9388666d1df704093a8034330715270575073716 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Thu, 18 Apr 2024 12:14:57 +0800 Subject: [PATCH 01/39] Fix: fall back to all union DDs when not specifying DD (#3648) --- module/campaign/gems_farming.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/module/campaign/gems_farming.py b/module/campaign/gems_farming.py index 6c86ae0a63..2458f6351e 100644 --- a/module/campaign/gems_farming.py +++ b/module/campaign/gems_farming.py @@ -269,13 +269,20 @@ def get_common_rarity_dd(self): scanner.set_limitation(fleet=0) + if self.config.GemsFarming_CommonDD == 'any': + 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 + + logger.info('No specific DD was found, try reversed order.') + self.dock_sort_method_dsc_set(False) + + candidates = self.find_candidates(self.get_templates(self.config.GemsFarming_CommonDD), scanner) + + return candidates def find_candidates(self, template, scanner): """ From a7f9518661aa1186cf62d22592b4c10ef34b6634 Mon Sep 17 00:00:00 2001 From: Air111 <54128005+Air111@users.noreply.github.com> Date: Thu, 18 Apr 2024 12:21:55 +0800 Subject: [PATCH 02/39] Opt: sort latest events in config update (#3653) --- module/config/config_updater.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/config/config_updater.py b/module/config/config_updater.py index f34ee4adbe..74d69eb567 100644 --- a/module/config/config_updater.py +++ b/module/config/config_updater.py @@ -435,7 +435,7 @@ def insert(key): latest = {} for server in ARCHIVES_PREFIX.keys(): latest[server] = deep_pop(self.args, keys=f'{task}.Campaign.Event.{server}', default='') - bold = list(set(latest.values())) + bold = sorted(set(latest.values())) deep_set(self.args, keys=f'{task}.Campaign.Event.option_bold', value=bold) for server, event in latest.items(): deep_set(self.args, keys=f'{task}.Campaign.Event.{server}', value=event) From e110ec40ed53ae3c4b90710f8faa676845db16e0 Mon Sep 17 00:00:00 2001 From: AkagiYui Date: Fri, 19 Apr 2024 01:19:51 +0800 Subject: [PATCH 03/39] fix: lock onepush version to 1.3.0 (#3643) Co-authored-by: LmeSzinc --- deploy/AidLux/0.92/requirements.txt | 2 +- deploy/docker/requirements.txt | 2 +- requirements-in.txt | 4 ++-- requirements.txt | 3 ++- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/deploy/AidLux/0.92/requirements.txt b/deploy/AidLux/0.92/requirements.txt index 78ea359534..f6ad33c258 100644 --- a/deploy/AidLux/0.92/requirements.txt +++ b/deploy/AidLux/0.92/requirements.txt @@ -9,7 +9,7 @@ jellyfish==0.11.2 lz4 mxnet==1.6.0 numpy -onepush +onepush==1.3.0 pillow prettytable==2.2.1 psutil==5.9.3 diff --git a/deploy/docker/requirements.txt b/deploy/docker/requirements.txt index eaa9999327..43fff96cf3 100644 --- a/deploy/docker/requirements.txt +++ b/deploy/docker/requirements.txt @@ -9,7 +9,7 @@ jellyfish==0.11.2 lz4 mxnet==1.6.0 numpy==1.16.6 -onepush +onepush==1.3.0 opencv-python-headless pillow prettytable==2.2.1 diff --git a/requirements-in.txt b/requirements-in.txt index 6146e97955..0981863097 100644 --- a/requirements-in.txt +++ b/requirements-in.txt @@ -10,7 +10,7 @@ jellyfish==0.11.2 lz4 mxnet==1.6.0 numpy==1.16.6 -onepush +onepush==1.3.0 opencv-python pillow prettytable==2.2.1 @@ -29,4 +29,4 @@ uiautomator2==2.16.17 uiautomator2cache==0.3.0.1 uvicorn[standard]==0.17.6 wrapt==1.13.1 -zerorpc==0.6.3 \ No newline at end of file +zerorpc==0.6.3 diff --git a/requirements.txt b/requirements.txt index d26b1145ef..a9c4492bdb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -47,7 +47,7 @@ matplotlib==3.4.3 # via gluoncv msgpack==1.0.3 # via zerorpc mxnet==1.6.0 # via -r requirements-in.txt, cnocr numpy==1.16.6 # via -r requirements-in.txt, cnocr, gluoncv, imageio, matplotlib, mxnet, opencv-python, scipy -onepush==1.2.0 # via -r requirements-in.txt +onepush==1.3.0 # via -r requirements-in.txt opencv-python==4.5.3.56 # via -r requirements-in.txt packaging==20.9 # via deprecation, uiautomator2 pillow==8.3.2 # via -r requirements-in.txt, cnocr, gluoncv, imageio, matplotlib, uiautomator2 @@ -57,6 +57,7 @@ progress==1.6 # via uiautomator2 psutil==5.9.3 # via -r requirements-in.txt py==1.10.0 # via retry pycparser==2.21 # via cffi +pycryptodome==3.20.0 # via onepush pydantic==1.10.2 # via -r requirements-in.txt pyelftools==0.27 # via apkutils2 pygments==2.12.0 # via rich From 27693a6762977c2b286129c06e39264432a58a38 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Fri, 19 Apr 2024 01:29:17 +0800 Subject: [PATCH 04/39] =?UTF-8?q?Add:=2015=E5=9B=BE=E5=BC=80=E8=8D=92/?= =?UTF-8?q?=E5=91=A8=E5=9B=9E=20(#3563)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add: W15 maps extracted * Add: template for Special Carrier in W15 * Add: method mob_move * Fix: MapDetectionError in strategy mob move * Fix: adjacent grid judge condition * Fix: should focus on location before moving * Fix: should update view before further operation * Fix: wait for STRATEGY_OPENED after executing mob move * Fix: offset for assets in _mob_move() * Opt: judge if movable before moving camera * Add: W15 mechanism * Opt: Rename Special Carrier asset name * Fix: offset for MOB_MOVE_1/MOB_MOVE_2 * Fix: separate MOB_MOVE_1 and MOB_MOVE_2 * Fix: should use appear_then_click in strategy_mob_move_enter * Fix: function import in campaign_15_base.py * Fix: missing assets import * Fix: missing offset in strategy_mob_move_cancel() * Fix: should move only once in a campaign * Temp: modify special carrier filter string to 3E * Fix: missing self. before 'moved' variable * Revert "Fix: missing self. before 'moved' variable" This reverts commit 00f70e0ab55e422898cb90c5d5e54d4e7c989511. * Revert "Fix: should move only once in a campaign" This reverts commit b588f5bb07dfc4511f39fa0797fbe160f356d604. * Fix: force goto special carrier * Fix: missing return True in battle function * Fix: enlarge offset of MOB_MOVE_ICON * Fix: typo in campaing_15_3 * Fix: update view after moving mob * Fix: should use full_scan_movable since mob moved * Fix: missing map_data_init() in campaign_15_4.py * Fix: battle 4 should be done by mob fleet * Revert "Fix: battle 4 should be done by mob fleet" This reverts commit 0e2af1ec817b7bc89fe123f03a33ea9ad955973f. * Fix: should switch to fleet_1 after battle_3 * Add: battle function when using clear mode * Fix: missing import * Fix: colliding Config class * Fix: Config.when should contain all cases * Opt: pick ammo after third battle in clear mode of 15-4 * Del: old assets CarrierSpecial * Fix: remake of CarrierSpecial template * Add: UI mask for W15 * Fix: missing ASSETS import * Fix: change full_scan_movable() to predict() * Fix: predict should be done after each move * Opt: camera_data in W15 * Del: remove predict * Add: map info process after mob move * Add: support for multi bosses in _expected_end() for W15 * Opt: show map after moving * Del: remove redundant import in fleet.py * Opt: using clear_chosen_enemy() instead of goto() directly * Fix: should first take screenshot before strategy enter/confirm/cancel * Add: asset TEMPLATE_SIREN_BOSS * Opt: Handle first stages of BOSS as Siren in 15-3/15-4 * Fix: missing override map_data * Add: ignore is_boss prediction for siren boss in 15-3/15-4 * Fix: should not use decorator Config with battle_x functions * Opt: camera data in 15-4 * Opt: directly overwrite map info into original map_data * Fix: missing indent block in campaign_15_4.py * Fix: expect 15-3/15-4 first bosses as siren * Revert "Add: ignore is_boss prediction for siren boss in 15-3/15-4" This reverts commit 1104631f92e5df0672dce8c7acaa1eb122731746. * Revert "Add: asset TEMPLATE_SIREN_BOSS" This reverts commit a29d6b6b9bfb9d79963adb404ce2091cbfafb810. * Revert "Add: support for multi bosses in _expected_end() for W15" This reverts commit 8d357abe5bab79a643e23e8513cefa87d31cb3e8. * Del: redundent map config * Fix: recover boss grids * Del: redundant clear_siren() * Del: redundant clear_siren() in battle_6 * Add: template for mob move icon * Opt: enlarge reinforcement fleet mask area for W15 * Opt: method _mob_move * Upd: TEMPLATE_MOB_MOVE_ICON * Fix: should have cool time between clicks of grid * Revert "Upd: TEMPLATE_MOB_MOVE_ICON" This reverts commit b3f2dcbc88dbe166470905f33d041b91c2192f57. * Upd: TEMPLATE_MOB_MOVE_ICON * Upd: TEMPLATE_MOB_MOVE_ICON * Upd: predict_mob_move_icon * Fix: 15-2 camera spawn point * Fix: should update view using self.device.image * Revert "Upd: TEMPLATE_MOB_MOVE_ICON" This reverts commit 92a12596a8f271ec64e249ecb58779d9b64ecea6. * Del: redundant assets MOB_MOVE_ICON.png * Fix: using map_is_clear_mode to get real value of clear mode * Opt: check mob_movable before moving * Opt: Refactor _mob_move * Fix: camera_sight in W15 * Opt: move sight to further point in _mob_move --- assets/cn/handler/MOB_MOVE_1.png | Bin 0 -> 12252 bytes assets/cn/handler/MOB_MOVE_2.png | Bin 0 -> 12527 bytes assets/cn/handler/MOB_MOVE_CANCEL.png | Bin 0 -> 8341 bytes .../TEMPLATE_ENEMY_CarrierSpecial.gif | Bin 0 -> 1521 bytes assets/cn/template/TEMPLATE_MOB_MOVE_ICON.png | Bin 0 -> 4832 bytes assets/en/handler/MOB_MOVE_1.png | Bin 0 -> 12252 bytes assets/en/handler/MOB_MOVE_2.png | Bin 0 -> 12527 bytes assets/jp/handler/MOB_MOVE_1.png | Bin 0 -> 12252 bytes assets/jp/handler/MOB_MOVE_2.png | Bin 0 -> 12527 bytes assets/jp/handler/MOB_MOVE_CANCEL.png | Bin 0 -> 8341 bytes assets/mask/MASK_MAP_UI_W15.png | Bin 0 -> 11858 bytes assets/tw/handler/MOB_MOVE_1.png | Bin 0 -> 12252 bytes assets/tw/handler/MOB_MOVE_2.png | Bin 0 -> 12527 bytes campaign/campaign_main/campaign_15_1.py | 92 +++++++++ campaign/campaign_main/campaign_15_2.py | 94 ++++++++++ campaign/campaign_main/campaign_15_3.py | 103 ++++++++++ campaign/campaign_main/campaign_15_4.py | 130 +++++++++++++ campaign/campaign_main/campaign_15_base.py | 177 ++++++++++++++++++ module/handler/assets.py | 11 +- module/handler/strategy.py | 87 ++++++++- module/map/camera.py | 6 +- module/map_detection/grid_predictor.py | 4 + module/template/assets.py | 2 + 23 files changed, 692 insertions(+), 14 deletions(-) create mode 100644 assets/cn/handler/MOB_MOVE_1.png create mode 100644 assets/cn/handler/MOB_MOVE_2.png create mode 100644 assets/cn/handler/MOB_MOVE_CANCEL.png create mode 100644 assets/cn/template/TEMPLATE_ENEMY_CarrierSpecial.gif create mode 100644 assets/cn/template/TEMPLATE_MOB_MOVE_ICON.png create mode 100644 assets/en/handler/MOB_MOVE_1.png create mode 100644 assets/en/handler/MOB_MOVE_2.png create mode 100644 assets/jp/handler/MOB_MOVE_1.png create mode 100644 assets/jp/handler/MOB_MOVE_2.png create mode 100644 assets/jp/handler/MOB_MOVE_CANCEL.png create mode 100644 assets/mask/MASK_MAP_UI_W15.png create mode 100644 assets/tw/handler/MOB_MOVE_1.png create mode 100644 assets/tw/handler/MOB_MOVE_2.png create mode 100644 campaign/campaign_main/campaign_15_1.py create mode 100644 campaign/campaign_main/campaign_15_2.py create mode 100644 campaign/campaign_main/campaign_15_3.py create mode 100644 campaign/campaign_main/campaign_15_4.py create mode 100644 campaign/campaign_main/campaign_15_base.py diff --git a/assets/cn/handler/MOB_MOVE_1.png b/assets/cn/handler/MOB_MOVE_1.png new file mode 100644 index 0000000000000000000000000000000000000000..de5971cf4c01f94f85f665964b66b9f111d4f394 GIT binary patch literal 12252 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 literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_ENEMY_CarrierSpecial.gif b/assets/cn/template/TEMPLATE_ENEMY_CarrierSpecial.gif new file mode 100644 index 0000000000000000000000000000000000000000..ae5936c83043f8844dbed560db4463e729f2463a GIT binary patch literal 1521 zcmZ?wbhEHblw^=(XlG#f|NsBLfB*je{rmIh&o^)0yn6NO#fukDo;P5(-Me>h-MV%C`t_?)TvV^ zOqkH$-{05Q*W26M)6>)4-QCsI)!EtE(b3V~-rm;M*4oOS6f?KQ&Ur2U0qdGRaseCQBhG|US3vKR$5wGQc_Y}TwGLCR9IM8P*9McpP!eP zmz$fLlarI3ot>4Hm6@5Dk&%&}o}QMLmYSNHl9G~~oSc-Dl$e;9kdP1`A0HPN7aJQJ z6B8319UT=F6&V>B5fKp{9v&7J78)8F5)u*|92^uB6c7;L@9*#D=jZF|>*M3&?d|R5 z<>l$=>EYqw?(Xj9=H}|^>f++!?Ck910`Yhz<$ZEbC3Wo2n; zX<=buZfCo{tD~c%t*x!4rKPEARxfc z&(AOlC=LO||J;7AA;Hd$0j@@R2F#5A|1&85WZ_T*8mt2{9F$EMIQ}!-e30>xiH(zu zg-K?EK(m{pTK+SRu8{WTW?oqp!^VkBhZ=#3O&S;vvvSLqzfk%4km)cBr$gPEp8<*o z8zwOE1SEWHa^+Ibj7r$y@X(P>uHw#;#)S(Sf>{J>QYw?#&&@UWOj^OQkkNIzOaGr8 zmJ6M_#56+=Z8*7jxxc(^*@>LaO)Orr9+SCx9Yb7s=9x!yNmvSJ_{&(g%ZM(zoOW)$ zLpM+1#e**dWHc-*Bo+oOJ2&6H=173!r_^3~+xpoW6Pet-`NfUuViJqpyrta=5>{I{ zxAD$%EuSVbv#8Z0O)chFj^U!iU2;z|H*H`HR`XMQ5Irg7=O-60F&(e62mfD8boH0i zNxrecGk96gZ0k0bUc<@9xkXjYGX5A`aycunsbR6vU9s_xVS80E&!P_5YKMvQ`CN4p zS%eBCgxo|5&s>aFXcaIzAy;W~sa?waz=LKX-#-k^yoqNR+hvL-Tx=1JoU`$mbZUd4 zn|#chgcf1X2NRk&)OiYzie+CAY?n^(c-SIfb%%jPq%4Q=3BTb21||-r4IJ)r)h#QJ z%VvZKvhWA)2y_$ic+tSbsd(fiBTt&ZBX`--FAGm7w%pmsCSA@V)XL9xR8pNob%VnZ zsrnm%?D9Da9Oue3+(~Sotso(Fh(m2b!yzu0AKOnzO5JEUB$4XU(lKpT--ISE%^ABL znmFzEB%Tmf^HF4xOP%rYn9|H+mQ0))D-xPGW>!6L60giDJT8|z;~}d=)*Zt`9EuYh z!qzBtFsO4FuL$%IbGC4F>r0-~*v4xpaO4oz@wx?0ysC2=j>y$r*wDaIJNM%;=^T@T zEJCht5}3KwI|P~q)Yl}iDm2$jd^#odjG?=XqsBoO5kHMU7Xb?v!B$>ljlg5Fb>A)= q;&V@7Y?IX4BEZaN$rBhZ6nN(#o3M|~LT!GXGhEDk76O6-4AuY#+r>%% literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_MOB_MOVE_ICON.png b/assets/cn/template/TEMPLATE_MOB_MOVE_ICON.png new file mode 100644 index 0000000000000000000000000000000000000000..2efbaf9ca7e81884f10928d5aaa5629a2a411740 GIT binary patch literal 4832 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 literal 0 HcmV?d00001 diff --git a/assets/mask/MASK_MAP_UI_W15.png b/assets/mask/MASK_MAP_UI_W15.png new file mode 100644 index 0000000000000000000000000000000000000000..656bc39a938630dddcf28255ecc5a779aa1bd09c GIT binary patch literal 11858 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 200 + def predict_mob_move_icon(self): + image = rgb2gray(self.relative_crop(area=(-0.5, -0.5, 0.5, 0.5), shape=(60, 60))) + return TEMPLATE_MOB_MOVE_ICON.match(image) + @cached_property def _image_similar_piece(self): return rgb2gray(self.relative_crop(area=(-0.5, -0.5, 0.5, 0.5), shape=(60, 60))) diff --git a/module/template/assets.py b/module/template/assets.py index 3604cee76c..6c0c9e8dcb 100644 --- a/module/template/assets.py +++ b/module/template/assets.py @@ -14,6 +14,7 @@ TEMPLATE_ENEMY_Carrier = Template(file={'cn': './assets/cn/template/TEMPLATE_ENEMY_Carrier.png', 'en': './assets/en/template/TEMPLATE_ENEMY_Carrier.png', 'jp': './assets/jp/template/TEMPLATE_ENEMY_Carrier.png', 'tw': './assets/tw/template/TEMPLATE_ENEMY_Carrier.png'}) TEMPLATE_ENEMY_CarrierInvertedOrthant = Template(file={'cn': './assets/cn/template/TEMPLATE_ENEMY_CarrierInvertedOrthant.png', 'en': './assets/en/template/TEMPLATE_ENEMY_CarrierInvertedOrthant.png', 'jp': './assets/jp/template/TEMPLATE_ENEMY_CarrierInvertedOrthant.png', 'tw': './assets/tw/template/TEMPLATE_ENEMY_CarrierInvertedOrthant.png'}) TEMPLATE_ENEMY_CarrierPurple = Template(file={'cn': './assets/cn/template/TEMPLATE_ENEMY_CarrierPurple.png', 'en': './assets/en/template/TEMPLATE_ENEMY_CarrierPurple.png', 'jp': './assets/jp/template/TEMPLATE_ENEMY_CarrierPurple.png', 'tw': './assets/tw/template/TEMPLATE_ENEMY_CarrierPurple.png'}) +TEMPLATE_ENEMY_CarrierSpecial = Template(file={'cn': './assets/cn/template/TEMPLATE_ENEMY_CarrierSpecial.gif', 'en': './assets/cn/template/TEMPLATE_ENEMY_CarrierSpecial.gif', 'jp': './assets/cn/template/TEMPLATE_ENEMY_CarrierSpecial.gif', 'tw': './assets/cn/template/TEMPLATE_ENEMY_CarrierSpecial.gif'}) TEMPLATE_ENEMY_L = Template(file={'cn': './assets/cn/template/TEMPLATE_ENEMY_L.png', 'en': './assets/en/template/TEMPLATE_ENEMY_L.png', 'jp': './assets/jp/template/TEMPLATE_ENEMY_L.png', 'tw': './assets/tw/template/TEMPLATE_ENEMY_L.png'}) TEMPLATE_ENEMY_Light = Template(file={'cn': './assets/cn/template/TEMPLATE_ENEMY_Light.png', 'en': './assets/en/template/TEMPLATE_ENEMY_Light.png', 'jp': './assets/jp/template/TEMPLATE_ENEMY_Light.png', 'tw': './assets/tw/template/TEMPLATE_ENEMY_Light.png'}) TEMPLATE_ENEMY_LightInvertedOrthant = Template(file={'cn': './assets/cn/template/TEMPLATE_ENEMY_LightInvertedOrthant.png', 'en': './assets/en/template/TEMPLATE_ENEMY_LightInvertedOrthant.png', 'jp': './assets/jp/template/TEMPLATE_ENEMY_LightInvertedOrthant.png', 'tw': './assets/tw/template/TEMPLATE_ENEMY_LightInvertedOrthant.png'}) @@ -30,6 +31,7 @@ TEMPLATE_FORMATION_2 = Template(file={'cn': './assets/cn/template/TEMPLATE_FORMATION_2.png', 'en': './assets/en/template/TEMPLATE_FORMATION_2.png', 'jp': './assets/jp/template/TEMPLATE_FORMATION_2.png', 'tw': './assets/tw/template/TEMPLATE_FORMATION_2.png'}) TEMPLATE_FORMATION_3 = Template(file={'cn': './assets/cn/template/TEMPLATE_FORMATION_3.png', 'en': './assets/en/template/TEMPLATE_FORMATION_3.png', 'jp': './assets/jp/template/TEMPLATE_FORMATION_3.png', 'tw': './assets/tw/template/TEMPLATE_FORMATION_3.png'}) TEMPLATE_MAP_WALK_OUT_OF_STEP = Template(file={'cn': './assets/cn/template/TEMPLATE_MAP_WALK_OUT_OF_STEP.png', 'en': './assets/en/template/TEMPLATE_MAP_WALK_OUT_OF_STEP.png', 'jp': './assets/jp/template/TEMPLATE_MAP_WALK_OUT_OF_STEP.png', 'tw': './assets/tw/template/TEMPLATE_MAP_WALK_OUT_OF_STEP.png'}) +TEMPLATE_MOB_MOVE_ICON = Template(file={'cn': './assets/cn/template/TEMPLATE_MOB_MOVE_ICON.png', 'en': './assets/cn/template/TEMPLATE_MOB_MOVE_ICON.png', 'jp': './assets/cn/template/TEMPLATE_MOB_MOVE_ICON.png', 'tw': './assets/cn/template/TEMPLATE_MOB_MOVE_ICON.png'}) TEMPLATE_OPERATIONS_ADD = Template(file={'cn': './assets/cn/template/TEMPLATE_OPERATIONS_ADD.png', 'en': './assets/en/template/TEMPLATE_OPERATIONS_ADD.png', 'jp': './assets/jp/template/TEMPLATE_OPERATIONS_ADD.png', 'tw': './assets/tw/template/TEMPLATE_OPERATIONS_ADD.png'}) TEMPLATE_OPERATIONS_RED_DOT = Template(file={'cn': './assets/cn/template/TEMPLATE_OPERATIONS_RED_DOT.png', 'en': './assets/en/template/TEMPLATE_OPERATIONS_RED_DOT.png', 'jp': './assets/jp/template/TEMPLATE_OPERATIONS_RED_DOT.png', 'tw': './assets/tw/template/TEMPLATE_OPERATIONS_RED_DOT.png'}) TEMPLATE_OS_AllyCargo = Template(file={'cn': './assets/cn/template/TEMPLATE_OS_AllyCargo.png', 'en': './assets/en/template/TEMPLATE_OS_AllyCargo.png', 'jp': './assets/jp/template/TEMPLATE_OS_AllyCargo.png', 'tw': './assets/tw/template/TEMPLATE_OS_AllyCargo.png'}) From 2507b0fa6b831595f8764f25c2c846e608e7770a Mon Sep 17 00:00:00 2001 From: Air111 <54128005+Air111@users.noreply.github.com> Date: Fri, 19 Apr 2024 01:40:40 +0800 Subject: [PATCH 05/39] Upd: Flagship changing (#3556) * Upd: Flagship changing asset * Upd: Equipment enter * Upd: Fleet detail check * Refactor: equipment changing * Upd: asset exercise/EQUIP_ENTER * Refactor: rename equipment functions * Fix: avoid GameTooManyClickError when EQUIPMENT_SCROLL disappears * Upd: [CN] assets EQUIP_1/2/3 * Fix: skip first screenshot in equipment.py --- assets/cn/equipment/EQUIP_1.png | Bin 7545 -> 6305 bytes assets/cn/equipment/EQUIP_2.png | Bin 7629 -> 6360 bytes assets/cn/equipment/EQUIP_3.png | Bin 7522 -> 6379 bytes assets/cn/equipment/FLEET_DETAIL.png | Bin 0 -> 13240 bytes assets/cn/equipment/FLEET_DETAIL_CHECK.png | Bin 0 -> 8969 bytes assets/cn/equipment/FLEET_DETAIL_ENTER.png | Bin 0 -> 20128 bytes .../equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png | Bin 0 -> 17825 bytes assets/cn/equipment/FLEET_ENTER_FLAGSHIP.png | Bin 6492 -> 5341 bytes assets/cn/exercise/EQUIP_ENTER.png | Bin 5597 -> 4669 bytes assets/en/equipment/FLEET_DETAIL.png | Bin 0 -> 13240 bytes assets/en/equipment/FLEET_DETAIL_CHECK.png | Bin 0 -> 8969 bytes assets/en/equipment/FLEET_DETAIL_ENTER.png | Bin 0 -> 20128 bytes .../equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png | Bin 0 -> 17825 bytes assets/en/equipment/FLEET_ENTER_FLAGSHIP.png | Bin 6492 -> 5341 bytes assets/en/exercise/EQUIP_ENTER.png | Bin 5597 -> 4669 bytes assets/jp/equipment/FLEET_DETAIL.png | Bin 0 -> 13240 bytes assets/jp/equipment/FLEET_DETAIL_CHECK.png | Bin 0 -> 8969 bytes assets/jp/equipment/FLEET_DETAIL_ENTER.png | Bin 0 -> 20128 bytes .../equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png | Bin 0 -> 17825 bytes assets/jp/equipment/FLEET_ENTER_FLAGSHIP.png | Bin 6492 -> 5341 bytes assets/jp/exercise/EQUIP_ENTER.png | Bin 5597 -> 4669 bytes assets/tw/equipment/FLEET_DETAIL.png | Bin 0 -> 13240 bytes assets/tw/equipment/FLEET_DETAIL_CHECK.png | Bin 0 -> 8969 bytes assets/tw/equipment/FLEET_DETAIL_ENTER.png | Bin 0 -> 20128 bytes .../equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png | Bin 0 -> 17825 bytes assets/tw/equipment/FLEET_ENTER_FLAGSHIP.png | Bin 6492 -> 5341 bytes assets/tw/exercise/EQUIP_ENTER.png | Bin 5597 -> 4669 bytes module/campaign/gems_farming.py | 64 +++++------- module/daily/daily.py | 2 +- module/daily/equipment.py | 39 +++++++ module/equipment/assets.py | 12 ++- module/equipment/equipment.py | 88 +++++++--------- module/equipment/equipment_change.py | 98 +++++++++--------- module/equipment/fleet_equipment.py | 66 +++++------- module/exercise/assets.py | 2 +- module/exercise/combat.py | 20 ++-- module/exercise/equipment.py | 21 +--- module/hard/equipment.py | 14 +-- module/retire/dock.py | 4 +- 39 files changed, 213 insertions(+), 217 deletions(-) create mode 100644 assets/cn/equipment/FLEET_DETAIL.png create mode 100644 assets/cn/equipment/FLEET_DETAIL_CHECK.png create mode 100644 assets/cn/equipment/FLEET_DETAIL_ENTER.png create mode 100644 assets/cn/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png create mode 100644 assets/en/equipment/FLEET_DETAIL.png create mode 100644 assets/en/equipment/FLEET_DETAIL_CHECK.png create mode 100644 assets/en/equipment/FLEET_DETAIL_ENTER.png create mode 100644 assets/en/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png create mode 100644 assets/jp/equipment/FLEET_DETAIL.png create mode 100644 assets/jp/equipment/FLEET_DETAIL_CHECK.png create mode 100644 assets/jp/equipment/FLEET_DETAIL_ENTER.png create mode 100644 assets/jp/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png create mode 100644 assets/tw/equipment/FLEET_DETAIL.png create mode 100644 assets/tw/equipment/FLEET_DETAIL_CHECK.png create mode 100644 assets/tw/equipment/FLEET_DETAIL_ENTER.png create mode 100644 assets/tw/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png create mode 100644 module/daily/equipment.py diff --git a/assets/cn/equipment/EQUIP_1.png b/assets/cn/equipment/EQUIP_1.png index 53f70fd22cd65ee92a8cf2c437952c332f5db227..75182dd922b4af1764707b96eb0587dbb55a15e1 100644 GIT binary patch delta 2876 zcma)7dsI?+9w&Ra&Gwj`*>bEY%R@S;AfiBCQ)V{ZhE$j_5ygCFjS`xonCpm{p)`ajD(n?IXJ^luv!_4qJ@vrx~{qXidqP$)A~Yxh_Al{v6J#G%OB_z~NG{h@=!hKSUA@mxS<1_M_1;$v%fr zm{dDWcsLNuPR?eguy};vKvyV7B%MJA-UKhyt%rke66m^bwPFB?!+=<5JO-N;=<4&@ z7#)$qWoKls8F6T+A1H61)%RVb(fdBf*ECvs%s_VYhE&xZ^8Enq+Oj=?T*<`+IFAt7=@RLGmDBDRp>|Yf2lGTZZf!!@8CQB(Xg#9aT79gJ(~Xc z#(3IU^M{{rdt8x8+r6XbE7#xE_FVls(xb#9A`SN^$%TsVgT?%VTWY=^kA#nGhBrGn z>+U(qo}SJB=(oo8Z6RNb9>=7Ad^>r8|3&#|S?*JYOKTf`GYlpZIxVgT4K_1{vIho( zoe9id?zQ<(-`W$a2E+#mM*Vy{XI?8h>VA#K5-1tvff=DoxIdWapm=znRUFmqSU|Ht9H@lpqj?mY&EWxL#)R{+~JQ~iu!3Uj6_O`h$B;+RW7e`ZR3U>NoT7>Mfa_h{H;Z_d6lY+ zQGXy=nN`m^kszO#Z1E-v#bWq0$5_ybl|KaeL37-hfZFNtwxZ<^G!kOr=8f+`#psL- zjVP&7j1-J$l}*PuW|!^UADc>*m38MDG_eg#ZecmyRBVzT=#69QLSr1Z!eIAU2m(bU z%dxVnQv`<-oMQz{bh(@GRqw93=NS!;>I&Y6g3fr7NAn$tp_0e{rh-dLMmT6(Jlv5) z#RJca_4LIg&}yv`@r`$jf1e0tj#Rs2SP}_bKW&(??dhK!pmjD5r0KO&OfL4-#JrAQ z4xh;36yXi=w>Ip84iCM3Gh9JXMjJ=mR9AT9TDVXu?yT|{yTDfx+T~5cfx_;MP@;Rk zlgfMD?#Wu)vJ1i3I4U)Qpv*4BHtIQj3C)2l;rTt^7ks>K6IAb}=N@sxhwhr`AE!(3 z8MAmo`$&)!E|HC_thgn|I~QZ;MY8ex!crDV!(Pi+)$g%lxhOJ&FK;k4UsBj3mm8*3 z=hM&NNQ2HQL2-?yI6>MA`Vg*G?rm8W3Bq7G5~HarZdjhu)#2pc1m-nXP_mtShDU|; zjFM9mpAZBDk7S7_vG8DV;yM`YMr;7PZ7TfG5KF$jjoMv9=%K>4y%niUIacw-q6>=t`<6=TU^UI%qenth&LRCRR9WG5@?X-Q4->@f6L@9eN_Q*!z z1Jmcg=Ffd7k`DK?V&^NhC!Y-t!a@J1&fKys3odj zxE&UW7r|@kn(D1J2twJz=D8X*DLv=MrW%R4h_j#-ofpd)N3Q8NXph*tRrXBqQdIq* z1W8s4D5WyE-bwf1XghpZ-OHYLH zT=;i^DS`=d6DlU>K2D8-jA;w%U9crVf}Usg1vI8aN=Rd%iD`N!`{#7 z3#aE*HtGSPJ~|h?v_Gb%=yW8$;4uq4940s=qI1;ubA8ujFw;e}e{xIU$-^;9Tb|Lt z*c&ty20l;fTDs3JE*c)=?{~krS9-0EL^K*YbRI_%de-!$s>H|@nN-QB7x!L%*r+YK zOSW7L+8tFhg%mvujyK8)B@L9I0(YVxT6Lf)B;EA%Wu`4b3RsY(A42!X4UK`f@T^al`6JpDwNCHy(?5=8+l)Et`|H-pzH<6;qwtdBJMTRS ausI4h@6=B&D=VSnV1y82u=Ed!fBp~d8BQ1g delta 4118 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 E?;yRM!~g&Q diff --git a/assets/cn/equipment/EQUIP_2.png b/assets/cn/equipment/EQUIP_2.png index ecc6cf29b60832487b05c1c248b4e9afb5e25b86..3887b16d183aa313b9fad24d7ed996545a73d02a 100644 GIT binary patch delta 2935 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 Mc>GA?-%fx1AB=}~od5s; delta 4203 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 DJDSNM diff --git a/assets/cn/equipment/EQUIP_3.png b/assets/cn/equipment/EQUIP_3.png index dc890355f9880e0b9700e650fa9d8575c08ad8cf..7cae81daced472155327338725dd3526ec6aadf0 100644 GIT binary patch delta 2959 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 diff --git a/assets/cn/equipment/FLEET_DETAIL.png b/assets/cn/equipment/FLEET_DETAIL.png new file mode 100644 index 0000000000000000000000000000000000000000..2fc9b9cd625481e23001562adf728ed6bcdd9a02 GIT binary patch literal 13240 zcmeHtd03j~nzvm}b9$P@A!%xiMiM+}rY3F}qvFEpr!l9;sC8e_DxyJDR8(9Lx}8AO zXl)va#$}?73kpUJqM(x0EeS5MMo>|SA&QEKNN@vmUQOGX^Id1YxxTsP&vISxF3(9e9UYxRpZ(RvTSw;)!0Fr1{`fX<_zU=NZvlt*6aN~7)6x0h z=-&4&os!byIy&#^pnU^V0^P5`kl1*$h$w6%$}BxT5un!5ae${MMj$b$lv9zY7<7Uo zM9$$tPNAb5ApzFz7Ve48sH^C|W+tP2GCh2enHZ#96a?;c${`&FOc0Msi8z%WAD4iG zr8`3Q=Y;|1d$-LYr}jxwFpiK<_ZB=A=>GXBXKXU+l#LnG6lq~$amvQd%=+R*R3y^+ z{3)mf6l!i^ZEj&_YGDI|LSaz5Q@?y5z;ek^(J*fp*IyO`t{fp(Q&JLP=H_@j-VASL zhE0w!x3sgfGq-@6L!qVsg()s0AtfT+Gy!M)>kKX^95NZ5n1aS8oZ6c)A`+XL;s^m) zeY1!7#NVb(!2N;~fS7rDM54K+nZ@3o_6ehqztJV8CdchB9)&bV#i8O+2`M;$*77&n z#H-j8Ebc1yznJ>B;eS{Fz}DUUw>ADLFY)oeErCn9lm=|$7eM|gHO@C95oPX;!eLXB zk*G^)0Gr0Y?j{8t{U31t!_#{s|G*b29sOUB?v4CLnh0}FMn$AxlYOz+xL@V}`L95n zf?AnfIQ6dq=!7UN9{0%}8^1h&a*0SmIYIzkxL|5wWeTGWx=WNDI@8sEbynmbMpArgj&Q zNYm&jq-~@f5@{J>8~N+=E?8vhp1%D0eANHv^Pb6Qz+fZd{^#@T$rlDp127S>XB3VQ zOUSAHn}K_(5|{esrVSLZRts~>z29HPgZ`WG{}}d5Km(vcA*c2<B~ek3Uv8uS$I^Q{oKYHSV4M=9Gbp-`qMX0r2I?fYV;DAu@GzOv65N`P4VP zR5tynAZ{xayk4a^xgC11Zwpa%pbk3!$VW%N_IEXX|NiC3*AEjv{i@*Mztny@f5y+kpi8gh>y_&%jzceJmR4+> z|7IwB>F~5dm*SeLk}U}v|5B+tEGKxryB~Ib|M?w(-x2s7f!`7M9f98w_#J`Y5%^z0 zVD)45jYjo*Iyx_&?Cu=cr4>Cji@iS3a1YvC+03hvu=-gAUi$iq-k31%$6>oOjjOgV z^)yr5k%E!fI(hcS&T1IA5Ol1t$u}ijlb)Wm$rfGMWZnfD2rmw;4e!1PciK&%YxoC7 zE}b8Cnkgq%SMqB56}|mib1~S)bsS@-{#CfTrAuRrEs!=6I*6WrF0bzAinKMN8TkgO zm#*o$YJeCqcjd zh`Z8Tv|CkR)>s|>i0hz{JlsXRtMky{RmCoLca1--t!(ApWd_D}_?xo+g!2Iv7k49u z1T-3r8P=&HTIrfrzC#Tjh|5UV29flG*fMR52|{&M71@<1&muzs$j zAERA!oE1vAFG}t~nnk_x9hOKa7Y=JK4ZQauBW5335(KW4os+o1Mv=nIubMZ z<_qCOZ%Wy4MOZc334Wz%-Hp>w+l^4az~}30d7hr5C@0TR@t;@k=K@l(Z_iaam%$x9 z1t%JjzE@PZd7>_-g9|qji3HwFJzLODjqR{tH2&w!#qGOHwOXstcKhCPE3Hvz7B4UY z(kz#+DPVnTV0&G|Tf5u3+}*6**LafGp@W+5cZLMn@95~PzN*mRch9p~)H9X2XNoAo z{$Xmub&WY2yDKmc(|m&u??|^1Ef&!hhpSiUd9`NATMmbJ$2c2Y)yv*oypl_Zshiu5 z5zNsOu4it@!Ck4lmDg9t0c_9oicNg|6u2 z&I}`~J|r?@lcnm0YunU>xGq?f9-=jOjPp3m8p7C3c;R&!_Z zIy)C}@1D^4(&n)#o)+m=%XZAqp(s<(H9MO#r>%@%CJNTcvxN2r`|l#Jvxlf;w4({3 zL+IJRrCBmW9F#whsp>r{N=ch*7s9G1iILMLvdy)))uIni-YRzHwHiPmkgEE;1+`&o z3r}eJ{%X5zdAw{;~eTxyiDz@scVoPKOBlAipElbWWtQs z60q58MSy-M+l5zC;Tai3>wLfL=qYGLMROhZ_2vhiqL_)1!a^@=b4BCsX7^1e3(bL% zw*X%?`1571Q=5ut%s0J^@OAOiZi;>8Eg?fx#p^{o4&@%-Dc;Xx^f-@rBc;nB4+KIO zPFlFD)@o`-7gGpHnis5sQKr-O2v1pmdkIbTjy}lo=e59ZQf;SBR;!SQ3x@6k~{TiNKYiCao zFP^*_tmu;|loD!AcFAvDSE?f#>`vg$d#&L z#0(c7c<$j&*`AP#CxWB;cn)Pwb_G6T$xr)#s5=8yi<_poq|k6&Nj00F8OAOerB@g- zpNA^O@q^3civvN!-v5SV&`OLenHM|k^WpVL<;}dL;%khtmM}%D&1MW$5#!TwlFadU zD;u^B&`gD`kd}!r?(L|+*_-vmtQUgfw~z0ccgH}spg;adTR7k6nHS=fP#;8}JMq>@ z5SerFo*L9X67l$j#x6S${kI-AM zEYdkycfwX6eEUU6(Fth3>cbQV?hgOJOsffMj7~nNN&fJmj!ws?+si_R-&k87=Fn7H zkWVKeJqT1Bq@3Nk~R)a>Pr);MP##TFjQH+g^(9-*gY z5O%*qJQ&#e=uBB*(||azCV(0kX^6RM%3h+DQe)`_D@@B5cbNlD90x+ZY(pLVGK)jl zy6IEer(k=W5X>^lY8Ef*8g>I*0P0+!kLX#upsUers|c!4zf|cv?{F{tVb33ZHxOF? zh`BvDFwo}kd>t=6(*4ZHyqsFA`ZhWK{U@g6$E8NqMH6tfj}7+Dx7UjL#iy-aqRMJQ zY&L_7lN^i=t3LvH!O=lf)<~i4gkZi5g1LzXIrE1x7S7bp1Ib$!JsD^?QyE)| zp=cBZVF`_*OCkx(fiSKszTmElL|}G!v=YJ1=gz_c-H;vsnM^LyeF6m>#HqAYwZgj_ zVNfFxNZO_{xv+<;W1s9t$vi<)*;__w-N7&XT)^3vWE(Qg=Q8FrE6Dni-binRC|Ft} z?Z`f@7H5%bq)=V+;KP8-p9SYq)L0{&K%n~)2u@8OF@glJ@aj=Cn=9(V3*jBUq2jgJ z0X~?URe?a5NtV}AVD!$PG_lX#u7u$IUIgR3c&GnH9O z+UThBO)6r|CkeRDZbVi?5x6n@+zi|Ok5ZlPfXe-J^=Ewcd0aFYG@6<@&=X5X7*+G< zl!rQ%&4cR<`gFuq@_2J~u)%f=Ga@Z%9Q<W-~z9^-y&9PhaTh z%$!m}brE0$pIMpPzl6`Uy)0-P6OWD|TpGr{(5#-V$qVGvkU5%#%k;A%0Ev>o*n;lzOEP=aYi zw;4VmjoiK>Y)q{aH$1fpjD1kP*mtRfhhT#o#@#G|#mNB;G6&PsSqqQ0so?qe z_pn!LO^hWmqRqhYR(>BEw!Gc1|AOKGFZHZZZf_T7BP4O!XV(P8D#~~!U=s!y)tzDq z+4LtE+xCGrV_LVv*L8h*_|DNTkC6Aq{k0`;U2AlG>mX3KMai^>-)Z|IWmo)m#0&9r1{Kh|iTGP>yN z<1P(Ncz#+P(+F;Qejg)Q{2t*y;At)K_DdqRJ%|%;FM5+HTTCO>6n=trn|hmZ3z3VO z%;b)K=!G$RJ)5xWV9dtag$tY#9pu`X^>_OBEc~Ya7n`&MphV`N#{11a?kWgeggSLgEYa zf%gS$lI^wd2jI=tL!0nNaF`~>c^|h|yiQT=3C#3+4lKj2)dS13oe?GTNdw9)LYHq; zL-8{@Mu`;=cOPX=q|mA6p5~5cQ>2r_|qCPgCQBW)S z;3ofazqK)}H4M|5cgAcqt*A`~#oIYvX>#yn=TIp3pipS+bwTu(<~6#zuO5Wm0y*2e zTmcg{#>-a}AB7w%EY9vrr?agq$Q&{x*C;~b94UBYl9Z09A3$zcd;rHCkne)+?P=2b3Au7()b6QNHpk|1X ztQ9%kT5JNj*1AqaYJuqA)RSJ;+UQhqG_0Z>BMDJ;@g<8IE5aq%ehS9Vv0)3=Ppc5z zYZt*Hc&lW3jKV{0FI<+4);Gn{P06O8m`H=Z#YIs^nY7&0aIX}Q-)M7L$WZEmpP43* zB4WN_^0^k)peu)>s>gS;$F63N1)3Dm82NIU@yqeUTSIy=U$SnFA^6q_?}w#cjlYq? zNRXLILM{F1>Y|-VyV=KiXa4-fqkwz+4x$<5WIjw2EgM(T%zU()bDs#aIjMM0Dvt*) z^K2aQvkvR;l49zLf)G~(w<}U3!I)kq|Hi#)pbHfn7f+$E`N1Ln0c8F#@AydMo#!{` zlgrTZn!hyON~DrGAB}(u)ZNqfxtK=ORr<*nD+*N=IreXa2 zz}YTQ(JPfEVfJK#8+PciwO@TgCm*PbalxJ+o9lxBr(51fi9hOnsV5$u=o0mMIJ~uT zk^v;%qh}?$q}8?8Pqs1wT8k)?#3~>}PoFj9(F;oL0{rM_E6%lCnztQWhan8t;UtgE zw2KCtf7(~~pz>jDf+{iYlV?q@Hb|=@a}jKZP$$jo;_Ic*W5^pI%l=YMUM-qt*B1)i zSzELgOw|DuQV9*xIv~lZMc=spH2CGS$+?J}$AIZEed7!=jbAcBqN48Ci9z+FG_)qJ zq&mcl?ShbM5+`UPGYCL^!7oKvKWB!itK-ikqo{?RoualuEiuExmfdisyt?qK@OP;OJVo?TmsphL!BCLQENoLrz&oVJ%@kGF2$ zFDjuG)^OP(m+6=n+4NA!9j=WJOL_#4B zQp&4oXIlT(JhwReJt9F;5ALJfW{9^!YdnVvK?o1sW2PRBeG7fH>01gk;Wh+f+{~jL zr!Er8As&87u<#+OGL4^kJxwq)nmLs5l!0evTC~-{%ecM>L+LS}15kR7%A!<) zRij6Z=KJ>iO%zp}It8l-0eJ!(3r{?+e5O*w0s7l6J3M+JUOT&Ng`3tj1c7b=0rkr0 zakn0*i=JA$licnScPwsYt<}>OdA$f&_du9cr7!{R&a#_k3=afuY@`LbF@c;##cOwo zdN2hPY+3XHnW_fm-Wa^`PGjfGKw&Sr6^^A(qsxw#Q*Xz{Vzi}}*j@QwUR`{mIhPgl z0{hO%{dC>$7>{3_(LfXf!URI4bV{zww5?=D)Ds0^NzpD1m+OoxWl+v-BcP(IET~PR zQpvpSvE^oF-o3sPg1TwCO;)x;y&*XSo59&(&^uqoo8hU2nEI`WCri>IP-k_NU$3ut zeSp4Uz`7v0>p1j&fAEd|%r(2_q9u-sSeY=&)sOyiw%%*6A@g1_bt`vFegyMbM|D^) z;Js4XSJbkqf-~2qEgT!@(+gE152x@7*@2-_21xp0QV&s7O`Z&MfM5;2-(EOJL%lLv zI>EA=g{>$F0EG58pvaPH8uLI%aj~pPSPDvN!&tjZyY8j#Cen}gPN%^OL2kX?K$jKR zJaUkbKhPlq=Vx|wMarTZ$FS$`zH>1A`feZ4TYfKNfM6u}<|!iXY%z7xyK#Oi(bkZg z5vZ<^Qu#+8>u+EhRTEZTn4Dx^7o(ZRh5RI5SpG&!QE*GcHK+azHDiHa6vxkE`u&LD zd#kl~XC|Vv$+6-XpXfeeyVl+Dvdn~>cV^qncwmk)S&kEQ1`xs>^jgp$vHe5>0 zJjfhksEWlvt@^`^cQgBV+64aMTipRK{&-=pvC%&uu|9w)`{pEOz^p3ww0fy8xSEoa z*M0{_rJ{4p<`ag@AXP;tFnMP4#|75T-v^M+g(_Kj|ErXpI{gYb~&; ztel)yK>bpJnq05QYtB?l4S_6&cBZWYoI# zpoDT-sj(QNzg;kpQCHVmal3eIED+;ZhEZjeR|ndU7q$Rd@GrTYkyVADdl;~Vk`Ko4 z*{OEsP5eqs?y!z-(kmve!W&DEmI!SN{TPlKpE=aCv4g z=41cpKJNnk5h+X1Z7Z73(cP=gH&_ShX?jgjD?kH!zVp>_H||*5a((p|lbJJ{mv_6m zj;YOnf!Ebd)z)XvLCR?&#Jm}q(Kua-2b@6bukBd;3?94NR7G&$;To97r$-P?A&1hY= zvojuCF}*lc^D2dP|eNLh{WU!{mAo*3DtuRAxJ~_v3z{_SvNP$?R!zP2Pf}Qv{R* zys61V;_@*G|C~{yvgu^76nT9#gH~60N0;2qB1voy%DUk@v#n~@A@LE3XASQHqij6Y zeq<}ToPm^Xi&^XBjl(r?#~b1cW1+`nW(EDuE0N=KiV&cKs7VZyhQk_E? z^)y!($r#{ZdxSZiw*UboQl!l&k-{!TBamzl#lL`((wiz6sZO5ea644gO7n1>I)a^7 zQxHy+;8%3XFfL5coNzGTNtvuKAg&b^GJD#}2w{@%khI_poy!B=&*q0sIHmPVEhW_8 zntZI)L!ei8?2nJ$23~zY`Nu&`E?iDoe7@>D?jXLqeF(GBGEBVcJmv8zw)3S>CAFFW zQmMY}G2s)50(QAU(C_a#Gg(V#@_e)Br!Ki3=HxvlQaAd$6>abp@x`hMh+3vu%-I3Dy2L2`JY7Qq^Xf5!yveixwqDWGb<25RY<15OOd`ndd&~fFi*uT7o9#fqbEA*u z1YLP)4>rWq1-@)Ms5FFYo_vD0bN6BREwsv6CNHx#HvE)xW46SLz26_B!i);!hm6Vlv!iDj-8opq2THYL_dB8O(og8ll*z!@{Se*cs-e9 zh1k_hW*e(noE3xYc_Bg&` zZ_Z6Ww=+yqkqFb+6Pn4*U;i!v-~EQ94+0b#*VA%y7{mlRQ3z3ReQil>XkP?t1E zr?fJdDm@J}L`kdy+OC4M+1WUo{dKr!{$KXr7dD2x@=Mu!s~?d^$vMG3od$57R#=D} za6VjU87^69J;V;bt=6s)Uj%NvV~%rJIS}UQ-xz*_LQ}xj5iSGH>p%yVMlodPQM#Qx zb#E0ipFca)o?B8$Yc`0zzFdj&@S%SaH0FnqLES+hOoB34YIY3cSfO8-ntgCKxL$4cz1ybQ&+_Zjymv~jsy zIRvuQlB3#YA>D^383mzPw9y#pj|ou~ATM0+kqJ~MVgfaIEGZNt2!yCh=h^c7rmkQ; z%RaF-irVyiN88a!Jd~ZUjQ_@q3OdF!t-@Siw%SR~vE_Sj4V5h465CF%q-pJUtN*AxmgmvR{yT-ZzsrcUZ0GLbIO6_pd`Ct7!6#d&S_z3yW_CLEQ&hO3q O*(DDb#{c=^>wgDi76nTH literal 0 HcmV?d00001 diff --git a/assets/cn/equipment/FLEET_DETAIL_CHECK.png b/assets/cn/equipment/FLEET_DETAIL_CHECK.png new file mode 100644 index 0000000000000000000000000000000000000000..73a637f175bc0e3c16f437d4b5cb07e78cf64ab7 GIT binary patch literal 8969 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 literal 0 HcmV?d00001 diff --git a/assets/cn/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png b/assets/cn/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png new file mode 100644 index 0000000000000000000000000000000000000000..d0048df453b52137bc359147a9c56adff52b87d9 GIT binary patch literal 17825 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
    gb?N&8mm18zcRb>V>hx)w&F~?pTYp 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 delta 3860 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 J^UWoz{{^f$ymbHo delta 2946 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 diff --git a/assets/en/equipment/FLEET_DETAIL.png b/assets/en/equipment/FLEET_DETAIL.png new file mode 100644 index 0000000000000000000000000000000000000000..2fc9b9cd625481e23001562adf728ed6bcdd9a02 GIT binary patch literal 13240 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 O*(DDb#{c=^>wgDi76nTH literal 0 HcmV?d00001 diff --git a/assets/en/equipment/FLEET_DETAIL_CHECK.png b/assets/en/equipment/FLEET_DETAIL_CHECK.png new file mode 100644 index 0000000000000000000000000000000000000000..73a637f175bc0e3c16f437d4b5cb07e78cf64ab7 GIT binary patch literal 8969 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 literal 0 HcmV?d00001 diff --git a/assets/en/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png b/assets/en/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png new file mode 100644 index 0000000000000000000000000000000000000000..d0048df453b52137bc359147a9c56adff52b87d9 GIT binary patch literal 17825 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
      gb?N&8mm18zcRb>V>hx)w&F~?pTYp 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 delta 3860 zcmV+v59{#VDcmxUIDZOFX+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHzp+MQE(Sd;e_ zKHv9c4^~3h@UfR{fdC>StO&>uS)ve<0AYj>5y@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZ zjR63eC`Tj$K!3XcU{!%qECRs70HCZuA}$2Lt^t5qwlYTofV~9(c8*w(4?ti5fSE!p z%m5%b0suoE6U_r4Oaq`W(!b!TUvP!ENC5!A%azTSOVTqGxRuZvck=My;vwR~Y_URN z7by^C3FIQ2mzyIKNaq7g&I|wm8u`(|{y0C7=jP<$=6`1AZ142NqW){}Zz4V+@!$Tu zi~3=fuAC~28EsPoqkpK{9G%|Vj005J}`Hw&=0RYXHq~ibpyyzHQ zsFW8>#s~laM4*8xut5h5!4#~(4xGUqyucR%VSffhKnx_nJP<+#?5=i zx(HVZgM=}{CnA%mPqZa^68XeSVKGG0roJ=O`kZsA{w~!BzPm=q|!{oOVI>m_MObMbS zQlyj;N;PFaO^>2$gY-Gd%Qm(Z8eYv>2*=jns=cMJ`N4THx>VkjAF8G9M07`GWOnM|ey z)0dgZR4~^v8<}UA514ONSSt1^d=-((5|uiYR+WC0=c-gyb5%dpd8!Lkt5pxHURHgk zMpd&=yOjAR1s%ETak!GFdam@h^#)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI)C?d3A#4A zQM!e?+jY>uuIoY)~6ln+%&eo6EMSt(&dHcAIVA6yg+*DbgwR zQ*PQZ?ELHs?3(Nb?K$>g_9gah_Rk&691wl!-G{dRHsl(}4 zXB%gsbDi@w7p6;)%MzD%mlsoQr;4X;pL)xc%+^yMd)ZNTI#eJ*$ zO)i@o$z8)e??LqN_gLa_%;TM>o2SC_kmoO6c3xRt`@J4dvz#WL)-Y|z+r(Soy~}%G zIzByR`p)SCKE^%*pMQFvhrXu1BHul}BYxI?nSKZSp8Grc%l(h|zu|fE7V%C6U;)7a z8@mESk|3$_Skm zS{wQ>%qC18))9_|&j{ZTes8AvOzF(F2#DZEY>2oYX&IRp`G0*BDJn9mF6vRVQ*?23 z_bk?|G6C?@kiR8rC z#65}Qa{}jVnlqf_npBo_W3J`gqPZ95>CVfZcRX1&S&)1zB2~Schd65~Cxg+yU zRz%j`tk2nT*)2JgoRplSQVnUAv@6#zwiHuJf`1l#y^yd_xUjR>xOiFd;3B_8 zyA~shQx|tGF!j;$ ztoK>JuYXFtYC+Y|hVTuo8}W_h8((co-gKdQYW0rIw9U%R12tha?OV*YtlRRTHly}> zoqt`+R{gE3x4zjX+Sb3_cYE^=gB=w+-tUy`ytONMS8KgRef4hA?t0jufM;t32jm~jej0UI&kHifN$EH?V5MBa9S!3!a?Q1 zC*P)gd*e{(q0YnH!_D8Bf4B7r>qvPk(mKC&tSzH$pgp0z@92!9ogH2sN4~fJe(y2k zV|B+hk5`_cohUu=`Q(C=R&z?UQbnZ;IU-!xL z-hbzhUGThc^dk3S+apRi!(|`JEz}0it z_}4C7pLxCS#_SunZYJFvxFx#v_;&W~7k3KoOx#_1k9e>AzS{lj2l@}{f3*IwWx#FV z_+Y?b&%;>{?+yuvp8k~o(}&^GN6bgnBY#FCjgOrl9~%uCz4Bzvli{bbrxVZ0epdf^ z>vOB;-~HnIOV3#R*zgPai_gEVd8zYq@2jb=I>#f&AH2?aJ@Kaet(_`g8%^e|9=1g zfaw4Lbua(`>RI+y?e7jKeZ#YO-C4v9%bK~#9!?A<|&9a$L$;LovUIE7cJf{xt6 zZpc-8aa($kEP`nealn;`FzyVPK{tZ_j9EmHSqUtvkAyW)4GRDlH`p>*Khv*z48n7)hkzb7CSd?+~^HV(l$FhvY&f>-G!!SfdJ*%6hY45d%cUzGHfC3Bv zn`k`GUEijyH0HjVRbAhfvz(_K5mi-15vfS)oZB&v=XrRN$B2|tM69RC=PBphulive z?tE~kTXhjxqyV4*1HdL4a^#5aVV6?MIgexae5vpI_J2W_ryP-@h?G+MpuPFKo1fag z8X_X+eEW~LW6ISmi4*`{ZG{K`cu6g{)7hi({olTS`O-m3(S0~pRh`ds+qOdaA#IRkKw^QQ!Xa?RlEV6ys_vQ`xp{S(fd?HX@~zN+S^f6kq_@Ob5%R?ejS1UBcy(d)wc!fCu2H<72o?^K> zKYK8ws#-Lc@;YLQb>#AkDa}$$QKxkjWu796^3rmCbar-W_n=T?p=-al9 zDSuKCi|s|uc^JpzlRJy;x=Qt0o&cZ#1Hfi__S>SxRx@0Tlas^c_NDcCjuidF?)3gi zJzLLr=Fh8gj=WqhPVS!GIXO*t>%HZ2crr%r7Ta;KoJWyk@(MHnD8K-)p;8o)ihOz5 z4CA{0@a*VsW2z#i_2Oc^x3l=nlq-uk*ni&}&WG_yP9L2$Dbj`1R817|>_#*Ipa28F zW)86wQ+{?1Tvug1D;JA;oue%N|9mT=sp@7cQW0sEj*bq;hwYo+K3L~$Bm#f}3;-J{ zMa~hah=|BjL=h<>rBAL#|L-mTnR_WkUF51x`J;%)Wf8ss1^@*Z05(=m5xIzG?^#;q z{}$sH2VIJYnDPs?IZ|5Jv%3BJ@tfah##Nl293Nc0oX)dA0YCu;fK60>c8H~zK6R5h zNBZP^I8sEeBBF>oMJmcT@0zN-_M>ZYo`3c3uOqLksuU@+kq*uU9uN`#1^@v6{{sN1 W+^;UrHNav30000+ek0DsMe?rzQb^eWM_FL4DAU?MQ8wu=O$E^YlH?Ch7m#b;e*M8I41Bue6c%7 z2GtT66-t{mSk+t};+h*dn#bqP!HN?MG9W>N#S)Sz>rBFjTXq?=HpK*vSrDVqhtD$| zVzt2vtVGcu=CM;YjwDIUL)+a&MKH{{XJZseQ3UBGNZLkv7>Z&j8cY9haUC|G(j~4MaE2v zY*>jIJ{*Ob%0W^yW@SCi6Jm@=uqxrOlV(m9kmoWuHKvJ{bDkrh2qh>RI>I_KST(8` ziXK%SV>+WA;Q(hG8Re7xX_KjGL%M|kVm5RP?HLYN~kL_je~(@D9o9|*%(5@ zeL6?%HZ>#Sf(hX5))+1P+xU&l>ELkvzvVD4N6~0tJbU zKth!xIF>mUrbH1H4Y@>dIW7OeAX6sm1}k&0%^Bxqnm-BEohs))( zg$;SL+7DPzpt*A1w<-^V`gonc&tLB1`%0=$a1IU6+!}vwSEEd zp{D|&Oroqkmagsr9g4^7Wve}yQb9*0)|8$ORq(^~N)#}wBN&!TWx<)n2zfj$7M}U^ zQfA{(i1>O!k)~j}(qP0{4bF=olAqcH1PY!oXHqH;;=d_cx(DXhFdPjy^gFnFIC( z-}lb~Abz%E5UhNE_XoQ!|Fpd?V9Fg307P|unipzeEl`8aUBb=UkU>?XN4M2ik6x z^{)az{2`C*ncw=wu}HpS_QxBh*Bse;`9##X_giuIfnEUqp7BBtn6j(?yB+Jl`RwN_ z=lP*nK|VcjtL^KP#7Q2Fy^A;g=p1v}yL{QEr1G^8dsQ71l{ek8)aqJ;Vvw|!GSq8EUWEsdZ@OTEq0ndx=9ZS1%jz>&TS)km% J^UWoz{{^f$ymbHo delta 2946 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 diff --git a/assets/jp/equipment/FLEET_DETAIL.png b/assets/jp/equipment/FLEET_DETAIL.png new file mode 100644 index 0000000000000000000000000000000000000000..2fc9b9cd625481e23001562adf728ed6bcdd9a02 GIT binary patch literal 13240 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 O*(DDb#{c=^>wgDi76nTH literal 0 HcmV?d00001 diff --git a/assets/jp/equipment/FLEET_DETAIL_CHECK.png b/assets/jp/equipment/FLEET_DETAIL_CHECK.png new file mode 100644 index 0000000000000000000000000000000000000000..73a637f175bc0e3c16f437d4b5cb07e78cf64ab7 GIT binary patch literal 8969 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 literal 0 HcmV?d00001 diff --git a/assets/jp/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png b/assets/jp/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png new file mode 100644 index 0000000000000000000000000000000000000000..d0048df453b52137bc359147a9c56adff52b87d9 GIT binary patch literal 17825 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
        gb?N&8mm18zcRb>V>hx)w&F~?pTYp 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 delta 3860 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 J^UWoz{{^f$ymbHo delta 2946 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 diff --git a/assets/tw/equipment/FLEET_DETAIL.png b/assets/tw/equipment/FLEET_DETAIL.png new file mode 100644 index 0000000000000000000000000000000000000000..2fc9b9cd625481e23001562adf728ed6bcdd9a02 GIT binary patch literal 13240 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 O*(DDb#{c=^>wgDi76nTH literal 0 HcmV?d00001 diff --git a/assets/tw/equipment/FLEET_DETAIL_CHECK.png b/assets/tw/equipment/FLEET_DETAIL_CHECK.png new file mode 100644 index 0000000000000000000000000000000000000000..73a637f175bc0e3c16f437d4b5cb07e78cf64ab7 GIT binary patch literal 8969 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 literal 0 HcmV?d00001 diff --git a/assets/tw/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png b/assets/tw/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png new file mode 100644 index 0000000000000000000000000000000000000000..d0048df453b52137bc359147a9c56adff52b87d9 GIT binary patch literal 17825 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
          gb?N&8mm18zcRb>V>hx)w&F~?pTYp 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 delta 3860 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 J^UWoz{{^f$ymbHo delta 2946 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 diff --git a/module/campaign/gems_farming.py b/module/campaign/gems_farming.py index 2458f6351e..92c84872d7 100644 --- a/module/campaign/gems_farming.py +++ b/module/campaign/gems_farming.py @@ -2,8 +2,7 @@ from module.campaign.run import CampaignRun 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.equipment.fleet_equipment import FleetEquipment from module.exception import CampaignEnd, ScriptError from module.handler.assets import AUTO_SEARCH_MAP_OPTION_OFF from module.logger import logger @@ -68,7 +67,7 @@ def handle_combat_low_emotion(self): raise CampaignEnd('Emotion withdraw') -class GemsFarming(CampaignRun, Dock, EquipmentChange): +class GemsFarming(CampaignRun, Dock, FleetEquipment): def load_campaign(self, name, folder='campaign_main'): super().load_campaign(name, folder) @@ -96,22 +95,11 @@ def change_vanguard(self): def change_vanguard_equip(self): return 'equip' in self.config.GemsFarming_ChangeVanguard - def _fleet_detail_enter(self): - """ - Enter GEMS_FLEET page - """ - self.ui_ensure(page_fleet) - _fleet_to_change = self.config.Fleet_Fleet1 - if self.config.Fleet_FleetOrder == 'fleet1_all_fleet2_standby': - _fleet_to_change = self.config.Fleet_Fleet1 - elif self.config.Fleet_FleetOrder == 'fleet1_standby_fleet2_all': - _fleet_to_change = self.config.Fleet_Fleet2 - self.ui_ensure_index(_fleet_to_change, letter=OCR_FLEET_INDEX, - next_button=FLEET_NEXT, prev_button=FLEET_PREV, skip_first_screenshot=True) - - def _ship_detail_enter(self, button): - self._fleet_detail_enter() - self.equip_enter(button) + def fleet_enter(self, fleet=None): + fleet = self.config.Fleet_Fleet1 + if self.config.Fleet_FleetOrder == 'fleet1_standby_fleet2_all': + fleet = self.config.Fleet_Fleet2 + super().fleet_enter(fleet) def flagship_change(self): """ @@ -128,24 +116,23 @@ def flagship_change(self): index_list = range(0, 5) logger.hr('Change flagship', level=1) logger.attr('ChangeFlagship', self.config.GemsFarming_ChangeFlagship) + self.fleet_enter() if self.change_flagship_equip: logger.hr('Record flagship equipment', level=2) - self._ship_detail_enter(FLEET_ENTER_FLAGSHIP) - self.record_equipment(index_list=index_list) - self._equip_take_off_one() - self.ui_back(page_fleet.check_button) + self.fleet_enter_ship(FLEET_DETAIL_ENTER_FLAGSHIP) + self.ship_equipment_record_image(index_list=index_list) + self.ship_equipment_take_off() + self.fleet_back() logger.hr('Change flagship', level=2) - self._fleet_detail_enter() success = self.flagship_change_execute() if self.change_flagship_equip: logger.hr('Equip flagship equipment', level=2) - self._ship_detail_enter(FLEET_ENTER_FLAGSHIP) - self._equip_take_off_one() - - self.equipment_take_on(index_list=index_list) - self.ui_back(page_fleet.check_button) + self.fleet_enter_ship(FLEET_DETAIL_ENTER_FLAGSHIP) + self.ship_equipment_take_off() + self.ship_equipment_take_on_image(index_list=index_list) + self.fleet_back() return success @@ -159,24 +146,23 @@ def vanguard_change(self): logger.hr('Change vanguard', level=1) logger.attr('ChangeVanguard', self.config.GemsFarming_ChangeVanguard) + self.fleet_enter() if self.change_vanguard_equip: logger.hr('Record vanguard equipment', level=2) - self._ship_detail_enter(FLEET_ENTER) - self.record_equipment() - self._equip_take_off_one() - self.ui_back(page_fleet.check_button) + self.fleet_enter_ship(FLEET_DETAIL_ENTER) + self.ship_equipment_record_image() + self.ship_equipment_take_off() + self.fleet_back() logger.hr('Change vanguard', level=2) - self._fleet_detail_enter() success = self.vanguard_change_execute() if self.change_vanguard_equip: logger.hr('Equip vanguard equipment', level=2) - self._ship_detail_enter(FLEET_ENTER) - self._equip_take_off_one() - - self.equipment_take_on() - self.ui_back(page_fleet.check_button) + self.fleet_enter_ship(FLEET_DETAIL_ENTER) + self.ship_equipment_take_off() + self.ship_equipment_take_on_image() + self.fleet_back() return success diff --git a/module/daily/daily.py b/module/daily/daily.py index 6b2e95bf72..241558f6c0 100644 --- a/module/daily/daily.py +++ b/module/daily/daily.py @@ -4,7 +4,7 @@ from module.combat.assets import BATTLE_PREPARATION from module.combat.combat import Combat from module.daily.assets import * -from module.equipment.fleet_equipment import DailyEquipment +from module.daily.equipment import DailyEquipment from module.logger import logger from module.ocr.ocr import Digit from module.ui.assets import BACK_ARROW, DAILY_CHECK diff --git a/module/daily/equipment.py b/module/daily/equipment.py new file mode 100644 index 0000000000..c21bd0b285 --- /dev/null +++ b/module/daily/equipment.py @@ -0,0 +1,39 @@ +from module.equipment.fleet_equipment import FleetEquipment +from module.logger import logger +from module.ui.page import page_main + + +class DailyEquipment(FleetEquipment): + + def fleet_enter(self, fleet=None): + fleet = self.config.FLEET_DAILY + if isinstance(fleet, list): + logger.info(f'Multiple daily fleets are set, change equipment only for the first one. fleet: {fleet}') + fleet = fleet[0] + super().fleet_enter(fleet) + + def equipment_take_on(self): + if self.config.FLEET_DAILY_EQUIPMENT is None: + return False + if self.equipment_has_take_on: + return False + + self.fleet_enter() + self.fleet_equipment_take_on_preset(preset_record=self.config.FLEET_DAILY_EQUIPMENT) + self.ui_back(page_main.check_button) + self.equipment_has_take_on = True + self.device.sleep(1) + return True + + def equipment_take_off(self): + if self.config.FLEET_DAILY_EQUIPMENT is None: + return False + if not self.equipment_has_take_on: + return False + + self.fleet_enter() + self.fleet_equipment_take_off() + self.ui_back(page_main.check_button) + self.equipment_has_take_on = False + self.device.sleep(1) + return True diff --git a/module/equipment/assets.py b/module/equipment/assets.py index f5a567a82a..a40f6e7ee3 100644 --- a/module/equipment/assets.py +++ b/module/equipment/assets.py @@ -9,9 +9,9 @@ EQUIPMENT_SCROLL_BOTTOM = Button(area={'cn': (1256, 575, 1264, 583), 'en': (1256, 575, 1264, 583), 'jp': (1256, 575, 1264, 583), 'tw': (1256, 575, 1264, 583)}, color={'cn': (244, 209, 66), 'en': (244, 209, 66), 'jp': (244, 209, 66), 'tw': (244, 209, 66)}, button={'cn': (1256, 575, 1264, 583), 'en': (1256, 575, 1264, 583), 'jp': (1256, 575, 1264, 583), 'tw': (1256, 575, 1264, 583)}, file={'cn': './assets/cn/equipment/EQUIPMENT_SCROLL_BOTTOM.png', 'en': './assets/en/equipment/EQUIPMENT_SCROLL_BOTTOM.png', 'jp': './assets/jp/equipment/EQUIPMENT_SCROLL_BOTTOM.png', 'tw': './assets/tw/equipment/EQUIPMENT_SCROLL_BOTTOM.png'}) EQUIPPING_OFF = Button(area={'cn': (25, 565, 60, 589), 'en': (30, 585, 59, 605), 'jp': (25, 565, 60, 589), 'tw': (25, 565, 60, 589)}, color={'cn': (94, 101, 104), 'en': (65, 70, 96), 'jp': (94, 101, 104), 'tw': (94, 101, 104)}, button={'cn': (25, 565, 60, 589), 'en': (30, 585, 59, 605), 'jp': (25, 565, 60, 589), 'tw': (25, 565, 60, 589)}, file={'cn': './assets/cn/equipment/EQUIPPING_OFF.png', 'en': './assets/en/equipment/EQUIPPING_OFF.png', 'jp': './assets/jp/equipment/EQUIPPING_OFF.png', 'tw': './assets/tw/equipment/EQUIPPING_OFF.png'}) EQUIPPING_ON = Button(area={'cn': (26, 485, 60, 510), 'en': (32, 563, 54, 583), 'jp': (26, 485, 60, 510), 'tw': (26, 485, 60, 510)}, color={'cn': (184, 191, 214), 'en': (164, 173, 208), 'jp': (184, 191, 214), 'tw': (184, 191, 214)}, button={'cn': (26, 486, 57, 584), 'en': (7, 559, 78, 606), 'jp': (26, 486, 57, 584), 'tw': (26, 483, 61, 590)}, file={'cn': './assets/cn/equipment/EQUIPPING_ON.png', 'en': './assets/en/equipment/EQUIPPING_ON.png', 'jp': './assets/jp/equipment/EQUIPPING_ON.png', 'tw': './assets/tw/equipment/EQUIPPING_ON.png'}) -EQUIP_1 = Button(area={'cn': (1191, 266, 1247, 319), 'en': (1200, 273, 1241, 314), 'jp': (1191, 265, 1248, 320), 'tw': (1190, 265, 1249, 319)}, color={'cn': (98, 142, 207), 'en': (77, 130, 192), 'jp': (97, 142, 206), 'tw': (102, 147, 211)}, button={'cn': (1191, 266, 1247, 319), 'en': (1200, 273, 1241, 314), 'jp': (1191, 265, 1248, 320), 'tw': (1190, 265, 1249, 319)}, file={'cn': './assets/cn/equipment/EQUIP_1.png', 'en': './assets/en/equipment/EQUIP_1.png', 'jp': './assets/jp/equipment/EQUIP_1.png', 'tw': './assets/tw/equipment/EQUIP_1.png'}) -EQUIP_2 = Button(area={'cn': (1191, 366, 1247, 419), 'en': (1200, 374, 1241, 415), 'jp': (1191, 365, 1248, 420), 'tw': (1190, 365, 1249, 419)}, color={'cn': (95, 139, 202), 'en': (77, 130, 192), 'jp': (94, 138, 201), 'tw': (100, 144, 208)}, button={'cn': (1191, 366, 1247, 419), 'en': (1200, 374, 1241, 415), 'jp': (1191, 365, 1248, 420), 'tw': (1190, 365, 1249, 419)}, file={'cn': './assets/cn/equipment/EQUIP_2.png', 'en': './assets/en/equipment/EQUIP_2.png', 'jp': './assets/jp/equipment/EQUIP_2.png', 'tw': './assets/tw/equipment/EQUIP_2.png'}) -EQUIP_3 = Button(area={'cn': (1191, 466, 1247, 519), 'en': (1200, 475, 1241, 516), 'jp': (1190, 467, 1249, 520), 'tw': (1190, 466, 1249, 520)}, color={'cn': (94, 137, 201), 'en': (80, 132, 192), 'jp': (89, 134, 197), 'tw': (97, 142, 205)}, button={'cn': (1191, 466, 1247, 519), 'en': (1200, 475, 1241, 516), 'jp': (1190, 467, 1249, 520), 'tw': (1190, 466, 1249, 520)}, file={'cn': './assets/cn/equipment/EQUIP_3.png', 'en': './assets/en/equipment/EQUIP_3.png', 'jp': './assets/jp/equipment/EQUIP_3.png', 'tw': './assets/tw/equipment/EQUIP_3.png'}) +EQUIP_1 = Button(area={'cn': (1211, 274, 1230, 315), 'en': (1200, 273, 1241, 314), 'jp': (1191, 265, 1248, 320), 'tw': (1190, 265, 1249, 319)}, color={'cn': (133, 181, 222), 'en': (77, 130, 192), 'jp': (97, 142, 206), 'tw': (102, 147, 211)}, button={'cn': (1211, 274, 1230, 315), 'en': (1200, 273, 1241, 314), 'jp': (1191, 265, 1248, 320), 'tw': (1190, 265, 1249, 319)}, file={'cn': './assets/cn/equipment/EQUIP_1.png', 'en': './assets/en/equipment/EQUIP_1.png', 'jp': './assets/jp/equipment/EQUIP_1.png', 'tw': './assets/tw/equipment/EQUIP_1.png'}) +EQUIP_2 = Button(area={'cn': (1211, 374, 1230, 416), 'en': (1200, 374, 1241, 415), 'jp': (1191, 365, 1248, 420), 'tw': (1190, 365, 1249, 419)}, color={'cn': (130, 179, 220), 'en': (77, 130, 192), 'jp': (94, 138, 201), 'tw': (100, 144, 208)}, button={'cn': (1211, 374, 1230, 416), 'en': (1200, 374, 1241, 415), 'jp': (1191, 365, 1248, 420), 'tw': (1190, 365, 1249, 419)}, file={'cn': './assets/cn/equipment/EQUIP_2.png', 'en': './assets/en/equipment/EQUIP_2.png', 'jp': './assets/jp/equipment/EQUIP_2.png', 'tw': './assets/tw/equipment/EQUIP_2.png'}) +EQUIP_3 = Button(area={'cn': (1211, 475, 1230, 517), 'en': (1200, 475, 1241, 516), 'jp': (1190, 467, 1249, 520), 'tw': (1190, 466, 1249, 520)}, color={'cn': (130, 179, 220), 'en': (80, 132, 192), 'jp': (89, 134, 197), 'tw': (97, 142, 205)}, button={'cn': (1211, 475, 1230, 517), 'en': (1200, 475, 1241, 516), 'jp': (1190, 467, 1249, 520), 'tw': (1190, 466, 1249, 520)}, file={'cn': './assets/cn/equipment/EQUIP_3.png', 'en': './assets/en/equipment/EQUIP_3.png', 'jp': './assets/jp/equipment/EQUIP_3.png', 'tw': './assets/tw/equipment/EQUIP_3.png'}) EQUIP_CONFIRM = Button(area={'cn': (792, 623, 959, 677), 'en': (809, 633, 940, 658), 'jp': (792, 623, 960, 674), 'tw': (792, 623, 960, 677)}, color={'cn': (222, 154, 59), 'en': (236, 192, 133), 'jp': (222, 152, 55), 'tw': (223, 153, 57)}, button={'cn': (792, 623, 959, 677), 'en': (793, 620, 961, 673), 'jp': (792, 623, 960, 674), 'tw': (792, 623, 960, 677)}, file={'cn': './assets/cn/equipment/EQUIP_CONFIRM.png', 'en': './assets/en/equipment/EQUIP_CONFIRM.png', 'jp': './assets/jp/equipment/EQUIP_CONFIRM.png', 'tw': './assets/tw/equipment/EQUIP_CONFIRM.png'}) EQUIP_OFF = Button(area={'cn': (907, 565, 1037, 610), 'en': (911, 564, 1034, 607), 'jp': (908, 564, 1039, 612), 'tw': (907, 565, 1037, 611)}, color={'cn': (112, 153, 216), 'en': (91, 142, 212), 'jp': (110, 151, 213), 'tw': (106, 150, 214)}, button={'cn': (907, 565, 1037, 610), 'en': (911, 564, 1034, 607), 'jp': (908, 564, 1039, 612), 'tw': (907, 565, 1037, 611)}, file={'cn': './assets/cn/equipment/EQUIP_OFF.png', 'en': './assets/en/equipment/EQUIP_OFF.png', 'jp': './assets/jp/equipment/EQUIP_OFF.png', 'tw': './assets/tw/equipment/EQUIP_OFF.png'}) EQUIP_SAVE = Button(area={'cn': (355, 312, 452, 433), 'en': (355, 312, 452, 433), 'jp': (407, 312, 476, 404), 'tw': (355, 312, 452, 433)}, color={'cn': (170, 156, 122), 'en': (170, 156, 122), 'jp': (119, 94, 128), 'tw': (170, 156, 122)}, button={'cn': (355, 312, 452, 433), 'en': (355, 312, 452, 433), 'jp': (407, 312, 476, 404), 'tw': (355, 312, 452, 433)}, file={'cn': './assets/cn/equipment/EQUIP_SAVE.png', 'en': './assets/en/equipment/EQUIP_SAVE.png', 'jp': './assets/jp/equipment/EQUIP_SAVE.png', 'tw': './assets/tw/equipment/EQUIP_SAVE.png'}) @@ -21,8 +21,12 @@ EQUIP_TAKE_ON_2 = Button(area={'cn': (866, 511, 950, 604), 'en': (866, 511, 950, 604), 'jp': (866, 511, 950, 604), 'tw': (866, 511, 950, 604)}, color={'cn': (117, 118, 127), 'en': (117, 118, 127), 'jp': (117, 118, 127), 'tw': (117, 118, 127)}, button={'cn': (866, 511, 950, 604), 'en': (866, 511, 950, 604), 'jp': (866, 511, 950, 604), 'tw': (866, 511, 950, 604)}, file={'cn': './assets/cn/equipment/EQUIP_TAKE_ON_2.png', 'en': './assets/en/equipment/EQUIP_TAKE_ON_2.png', 'jp': './assets/jp/equipment/EQUIP_TAKE_ON_2.png', 'tw': './assets/tw/equipment/EQUIP_TAKE_ON_2.png'}) EQUIP_TAKE_ON_3 = Button(area={'cn': (129, 252, 213, 345), 'en': (129, 252, 213, 345), 'jp': (129, 252, 213, 345), 'tw': (129, 252, 213, 345)}, color={'cn': (105, 108, 115), 'en': (105, 108, 115), 'jp': (105, 108, 115), 'tw': (105, 108, 115)}, button={'cn': (129, 252, 213, 345), 'en': (129, 252, 213, 345), 'jp': (129, 252, 213, 345), 'tw': (129, 252, 213, 345)}, file={'cn': './assets/cn/equipment/EQUIP_TAKE_ON_3.png', 'en': './assets/en/equipment/EQUIP_TAKE_ON_3.png', 'jp': './assets/jp/equipment/EQUIP_TAKE_ON_3.png', 'tw': './assets/tw/equipment/EQUIP_TAKE_ON_3.png'}) EQUIP_TAKE_ON_4 = Button(area={'cn': (128, 432, 212, 525), 'en': (128, 432, 212, 525), 'jp': (128, 432, 212, 525), 'tw': (128, 432, 212, 525)}, color={'cn': (109, 111, 120), 'en': (109, 111, 120), 'jp': (109, 111, 120), 'tw': (109, 111, 120)}, button={'cn': (128, 432, 212, 525), 'en': (128, 432, 212, 525), 'jp': (128, 432, 212, 525), 'tw': (128, 432, 212, 525)}, file={'cn': './assets/cn/equipment/EQUIP_TAKE_ON_4.png', 'en': './assets/en/equipment/EQUIP_TAKE_ON_4.png', 'jp': './assets/jp/equipment/EQUIP_TAKE_ON_4.png', 'tw': './assets/tw/equipment/EQUIP_TAKE_ON_4.png'}) +FLEET_DETAIL = Button(area={'cn': (906, 644, 1008, 699), 'en': (906, 644, 1008, 699), 'jp': (906, 644, 1008, 699), 'tw': (906, 644, 1008, 699)}, color={'cn': (166, 170, 188), 'en': (166, 170, 188), 'jp': (166, 170, 188), 'tw': (166, 170, 188)}, button={'cn': (906, 644, 1008, 699), 'en': (906, 644, 1008, 699), 'jp': (906, 644, 1008, 699), 'tw': (906, 644, 1008, 699)}, file={'cn': './assets/cn/equipment/FLEET_DETAIL.png', 'en': './assets/en/equipment/FLEET_DETAIL.png', 'jp': './assets/jp/equipment/FLEET_DETAIL.png', 'tw': './assets/tw/equipment/FLEET_DETAIL.png'}) +FLEET_DETAIL_CHECK = Button(area={'cn': (904, 684, 1102, 701), 'en': (904, 684, 1102, 701), 'jp': (904, 684, 1102, 701), 'tw': (904, 684, 1102, 701)}, color={'cn': (225, 168, 105), 'en': (225, 168, 105), 'jp': (225, 168, 105), 'tw': (225, 168, 105)}, button={'cn': (904, 684, 1102, 701), 'en': (904, 684, 1102, 701), 'jp': (904, 684, 1102, 701), 'tw': (904, 684, 1102, 701)}, file={'cn': './assets/cn/equipment/FLEET_DETAIL_CHECK.png', 'en': './assets/en/equipment/FLEET_DETAIL_CHECK.png', 'jp': './assets/jp/equipment/FLEET_DETAIL_CHECK.png', 'tw': './assets/tw/equipment/FLEET_DETAIL_CHECK.png'}) +FLEET_DETAIL_ENTER = Button(area={'cn': (729, 314, 802, 438), 'en': (729, 314, 802, 438), 'jp': (729, 314, 802, 438), 'tw': (729, 314, 802, 438)}, color={'cn': (154, 149, 147), 'en': (154, 149, 147), 'jp': (154, 149, 147), 'tw': (154, 149, 147)}, button={'cn': (729, 314, 802, 438), 'en': (729, 314, 802, 438), 'jp': (729, 314, 802, 438), 'tw': (729, 314, 802, 438)}, file={'cn': './assets/cn/equipment/FLEET_DETAIL_ENTER.png', 'en': './assets/en/equipment/FLEET_DETAIL_ENTER.png', 'jp': './assets/jp/equipment/FLEET_DETAIL_ENTER.png', 'tw': './assets/tw/equipment/FLEET_DETAIL_ENTER.png'}) +FLEET_DETAIL_ENTER_FLAGSHIP = Button(area={'cn': (103, 327, 176, 437), 'en': (103, 327, 176, 437), 'jp': (103, 327, 176, 437), 'tw': (103, 327, 176, 437)}, color={'cn': (141, 135, 138), 'en': (141, 135, 138), 'jp': (141, 135, 138), 'tw': (141, 135, 138)}, button={'cn': (103, 327, 176, 437), 'en': (103, 327, 176, 437), 'jp': (103, 327, 176, 437), 'tw': (103, 327, 176, 437)}, file={'cn': './assets/cn/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png', 'en': './assets/en/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png', 'jp': './assets/jp/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png', 'tw': './assets/tw/equipment/FLEET_DETAIL_ENTER_FLAGSHIP.png'}) FLEET_ENTER = Button(area={'cn': (502, 474, 517, 489), 'en': (502, 474, 517, 489), 'jp': (502, 474, 517, 489), 'tw': (502, 474, 517, 489)}, color={'cn': (58, 62, 77), 'en': (58, 62, 77), 'jp': (58, 62, 77), 'tw': (58, 62, 77)}, button={'cn': (502, 474, 517, 489), 'en': (502, 474, 517, 489), 'jp': (502, 474, 517, 489), 'tw': (502, 474, 517, 489)}, file={'cn': './assets/cn/equipment/FLEET_ENTER.png', 'en': './assets/en/equipment/FLEET_ENTER.png', 'jp': './assets/jp/equipment/FLEET_ENTER.png', 'tw': './assets/tw/equipment/FLEET_ENTER.png'}) -FLEET_ENTER_FLAGSHIP = Button(area={'cn': (577, 306, 604, 321), 'en': (577, 306, 604, 321), 'jp': (577, 306, 604, 321), 'tw': (577, 306, 604, 321)}, color={'cn': (95, 83, 74), 'en': (95, 83, 74), 'jp': (95, 83, 74), 'tw': (95, 83, 74)}, button={'cn': (577, 306, 604, 321), 'en': (577, 306, 604, 321), 'jp': (577, 306, 604, 321), 'tw': (577, 306, 604, 321)}, file={'cn': './assets/cn/equipment/FLEET_ENTER_FLAGSHIP.png', 'en': './assets/en/equipment/FLEET_ENTER_FLAGSHIP.png', 'jp': './assets/jp/equipment/FLEET_ENTER_FLAGSHIP.png', 'tw': './assets/tw/equipment/FLEET_ENTER_FLAGSHIP.png'}) +FLEET_ENTER_FLAGSHIP = Button(area={'cn': (577, 277, 605, 291), 'en': (577, 277, 605, 291), 'jp': (577, 277, 605, 291), 'tw': (577, 277, 605, 291)}, color={'cn': (132, 124, 128), 'en': (132, 124, 128), 'jp': (132, 124, 128), 'tw': (132, 124, 128)}, button={'cn': (577, 277, 605, 291), 'en': (577, 277, 605, 291), 'jp': (577, 277, 605, 291), 'tw': (577, 277, 605, 291)}, file={'cn': './assets/cn/equipment/FLEET_ENTER_FLAGSHIP.png', 'en': './assets/en/equipment/FLEET_ENTER_FLAGSHIP.png', 'jp': './assets/jp/equipment/FLEET_ENTER_FLAGSHIP.png', 'tw': './assets/tw/equipment/FLEET_ENTER_FLAGSHIP.png'}) FLEET_NEXT = Button(area={'cn': (1234, 327, 1254, 356), 'en': (1234, 327, 1254, 356), 'jp': (1234, 327, 1254, 356), 'tw': (1234, 327, 1254, 356)}, color={'cn': (72, 93, 125), 'en': (72, 93, 125), 'jp': (72, 93, 125), 'tw': (72, 93, 125)}, button={'cn': (1234, 327, 1254, 356), 'en': (1234, 327, 1254, 356), 'jp': (1234, 327, 1254, 356), 'tw': (1234, 327, 1254, 356)}, file={'cn': './assets/cn/equipment/FLEET_NEXT.png', 'en': './assets/en/equipment/FLEET_NEXT.png', 'jp': './assets/jp/equipment/FLEET_NEXT.png', 'tw': './assets/tw/equipment/FLEET_NEXT.png'}) FLEET_PREV = Button(area={'cn': (26, 327, 46, 356), 'en': (26, 327, 46, 356), 'jp': (26, 327, 46, 356), 'tw': (26, 327, 46, 356)}, color={'cn': (72, 93, 125), 'en': (72, 93, 125), 'jp': (72, 93, 125), 'tw': (72, 93, 125)}, button={'cn': (26, 327, 46, 356), 'en': (26, 327, 46, 356), 'jp': (26, 327, 46, 356), 'tw': (26, 327, 46, 356)}, file={'cn': './assets/cn/equipment/FLEET_PREV.png', 'en': './assets/en/equipment/FLEET_PREV.png', 'jp': './assets/jp/equipment/FLEET_PREV.png', 'tw': './assets/tw/equipment/FLEET_PREV.png'}) OCR_FLEET_INDEX = Button(area={'cn': (957, 113, 987, 163), 'en': (957, 113, 987, 163), 'jp': (957, 113, 987, 163), 'tw': (957, 113, 987, 163)}, color={'cn': (36, 54, 86), 'en': (36, 54, 86), 'jp': (36, 54, 86), 'tw': (36, 54, 86)}, button={'cn': (957, 113, 987, 163), 'en': (957, 113, 987, 163), 'jp': (957, 113, 987, 163), 'tw': (957, 113, 987, 163)}, file={'cn': './assets/cn/equipment/OCR_FLEET_INDEX.png', 'en': './assets/en/equipment/OCR_FLEET_INDEX.png', 'jp': './assets/jp/equipment/OCR_FLEET_INDEX.png', 'tw': './assets/tw/equipment/OCR_FLEET_INDEX.png'}) diff --git a/module/equipment/equipment.py b/module/equipment/equipment.py index 3e7920f11f..f86a377591 100644 --- a/module/equipment/equipment.py +++ b/module/equipment/equipment.py @@ -8,11 +8,6 @@ from module.storage.storage import StorageHandler from module.ui.assets import BACK_ARROW from module.ui.navbar import Navbar -from module.ui.switch import Switch - -equipping_filter = Switch('Equiping_filter') -equipping_filter.add_status('on', check_button=EQUIPPING_ON) -equipping_filter.add_status('off', check_button=EQUIPPING_OFF) SWIPE_DISTANCE = 250 SWIPE_RANDOM_RANGE = (-40, -20, 40, 20) @@ -21,11 +16,7 @@ class Equipment(StorageHandler): equipment_has_take_on = False - def equipping_set(self, enable=False): - if equipping_filter.set('on' if enable else 'off', main=self): - self.wait_until_stable(SWIPE_AREA) - - def _equip_view_swipe(self, distance, check_button=EQUIPMENT_OPEN): + def _ship_view_swipe(self, distance, check_button=EQUIPMENT_OPEN): swipe_count = 0 swipe_timer = Timer(5, count=10) self.handle_info_bar() @@ -36,7 +27,7 @@ def _equip_view_swipe(self, distance, check_button=EQUIPMENT_OPEN): if not swipe_timer.started() or swipe_timer.reached(): swipe_timer.reset() self.device.swipe_vector(vector=(distance, 0), box=SWIPE_AREA.area, random_range=SWIPE_RANDOM_RANGE, - padding=0, duration=(0.1, 0.12), name='EQUIP_SWIPE') + padding=0, duration=(0.1, 0.12), name='SHIP_SWIPE') # self.wait_until_appear(check_button, offset=(30, 30)) skip_first_screenshot = True while 1: @@ -47,14 +38,14 @@ def _equip_view_swipe(self, distance, check_button=EQUIPMENT_OPEN): if self.appear(check_button, offset=(30, 30)): break if self.appear(RETIRE_EQUIP_CONFIRM, offset=(30, 30)): - logger.info('RETIRE_EQUIP_CONFIRM popup in _equip_view_swipe()') + logger.info('RETIRE_EQUIP_CONFIRM popup in _ship_view_swipe()') return False swipe_count += 1 self.device.screenshot() if self.appear(RETIRE_EQUIP_CONFIRM, offset=(30, 30)): - logger.info('RETIRE_EQUIP_CONFIRM popup in _equip_view_swipe()') + logger.info('RETIRE_EQUIP_CONFIRM popup in _ship_view_swipe()') return False if SWIPE_CHECK.match(self.device.image): if swipe_count > 1: @@ -66,13 +57,13 @@ def _equip_view_swipe(self, distance, check_button=EQUIPMENT_OPEN): logger.info('New ship detected on swipe') return True - def equip_view_next(self, check_button=EQUIPMENT_OPEN): - return self._equip_view_swipe(distance=-SWIPE_DISTANCE, check_button=check_button) + def ship_view_next(self, check_button=EQUIPMENT_OPEN): + return self._ship_view_swipe(distance=-SWIPE_DISTANCE, check_button=check_button) - def equip_view_prev(self, check_button=EQUIPMENT_OPEN): - return self._equip_view_swipe(distance=SWIPE_DISTANCE, check_button=check_button) + def ship_view_prev(self, check_button=EQUIPMENT_OPEN): + return self._ship_view_swipe(distance=SWIPE_DISTANCE, check_button=check_button) - def equip_enter(self, click_button, check_button=EQUIPMENT_OPEN, long_click=True, skil_first_screenshot=True): + def ship_info_enter(self, click_button, check_button=EQUIPMENT_OPEN, long_click=True, skil_first_screenshot=True): enter_timer = Timer(10) while 1: @@ -88,7 +79,7 @@ def equip_enter(self, click_button, check_button=EQUIPMENT_OPEN, long_click=True # Long click accidentally became normal click, exit from dock if long_click: if self.appear(DOCK_CHECK, offset=(20, 20), interval=3): - logger.info(f'equip_enter {DOCK_CHECK} -> {BACK_ARROW}') + logger.info(f'ship_info_enter {DOCK_CHECK} -> {BACK_ARROW}') self.device.click(BACK_ARROW) continue if enter_timer.reached(): @@ -99,7 +90,7 @@ def equip_enter(self, click_button, check_button=EQUIPMENT_OPEN, long_click=True enter_timer.reset() @cached_property - def _equip_side_navbar(self): + def _ship_side_navbar(self): """ pry_sidebar 3 options research. @@ -119,14 +110,14 @@ def _equip_side_navbar(self): equipment. detail. """ - equip_side_navbar = ButtonGrid( + ship_side_navbar = ButtonGrid( origin=(21, 118), delta=(0, 94.5), button_shape=(60, 75), grid_shape=(1, 5), name='DETAIL_SIDE_NAVBAR') - return Navbar(grids=equip_side_navbar, + return Navbar(grids=ship_side_navbar, active_color=(247, 255, 173), active_threshold=221, inactive_color=(140, 162, 181), inactive_threshold=221) - def equip_side_navbar_ensure(self, upper=None, bottom=None): + def ship_side_navbar_ensure(self, upper=None, bottom=None): """ Ensure able to transition to page Whether page has completely loaded is handled @@ -153,25 +144,25 @@ def equip_side_navbar_ensure(self, upper=None, bottom=None): Returns: bool: if side_navbar set ensured """ - if self._equip_side_navbar.get_total(main=self) == 3: + if self._ship_side_navbar.get_total(main=self) == 3: if upper == 1 or bottom == 3: logger.warning('Transitions to "research" is not supported') return False - if self._equip_side_navbar.set(self, upper=upper, bottom=bottom): + if self._ship_side_navbar.set(self, upper=upper, bottom=bottom): return True return False - def _equip_take_off_one(self, skip_first_screenshot=True): + def ship_equipment_take_off(self, skip_first_screenshot=True): bar_timer = Timer(5) off_timer = Timer(5) confirm_timer = Timer(5) while 1: if skip_first_screenshot: - self.device.screenshot() - else: skip_first_screenshot = False + else: + self.device.screenshot() # End # if self.handle_info_bar(): @@ -197,36 +188,34 @@ def _equip_take_off_one(self, skip_first_screenshot=True): bar_timer.reset() continue - def equipment_take_off(self, enter, out, fleet): + def fleet_equipment_take_off(self, enter, long_click, out): """ Args: - enter (Button): Long click to edit equipment. + enter (Button): Button to edit equipment. + long_click (bool): How to click enter out (Button): Button to confirm exit success. - fleet (list[int]): list of equipment record. [3, 1, 1, 1, 1, 1] """ logger.hr('Equipment take off') - self.equip_enter(enter) + self.ship_info_enter(enter, long_click=long_click) - for index in '9'.join([str(x) for x in fleet if x > 0]): - index = int(index) - if index == 9: - self.equip_view_next() - else: - self._equip_take_off_one() - self.ui_click(click_button=EQUIPMENT_CLOSE, check_button=EQUIPMENT_OPEN, offset=None) + while True: + self.ship_equipment_take_off() + self.ui_click(click_button=EQUIPMENT_CLOSE, check_button=EQUIPMENT_OPEN, offset=None) + if not self.ship_view_next(): + break self.ui_back(out) self.equipment_has_take_on = False - def _equip_take_on_one(self, index, skip_first_screenshot=True): + def ship_equipment_take_on_preset(self, index, skip_first_screenshot=True): bar_timer = Timer(5) on_timer = Timer(5) while 1: if skip_first_screenshot: - self.device.screenshot() - else: skip_first_screenshot = False + else: + self.device.screenshot() # End # if self.handle_info_bar(): @@ -251,22 +240,23 @@ def _equip_take_on_one(self, index, skip_first_screenshot=True): on_timer.reset() continue - def equipment_take_on(self, enter, out, fleet): + def fleet_equipment_take_on_preset(self, preset_record, enter, long_click, out): """ Args: - enter (Button): Long click to edit equipment. + preset_record (list[int]): list of equipment record. [3, 1, 1, 1, 1, 1] + enter (Button): Button to edit equipment. + long_click (bool): How to click enter out (Button): Button to confirm exit success. - fleet (list[int]): list of equipment record. [3, 1, 1, 1, 1, 1] """ logger.hr('Equipment take on') - self.equip_enter(enter) + self.ship_info_enter(enter, long_click=long_click) - for index in '9'.join([str(x) for x in fleet if x > 0]): + for index in '9'.join([str(x) for x in preset_record if x > 0]): index = int(index) if index == 9: - self.equip_view_next() + self.ship_view_next() else: - self._equip_take_on_one(index=index) + self.ship_equipment_take_on_preset(index=index) self.ui_click(click_button=EQUIPMENT_CLOSE, check_button=EQUIPMENT_OPEN, offset=None) self.ui_back(out) diff --git a/module/equipment/equipment_change.py b/module/equipment/equipment_change.py index de1e6ff142..700c3b594a 100644 --- a/module/equipment/equipment_change.py +++ b/module/equipment/equipment_change.py @@ -6,6 +6,7 @@ from module.logger import logger from module.ui.assets import BACK_ARROW from module.ui.scroll import Scroll +from module.ui.switch import Switch # Button of 5 equipments EQUIP_INFO_BAR = ButtonGrid( @@ -16,68 +17,58 @@ EQUIPMENT_SCROLL = Scroll(EQUIP_SCROLL, color=(247, 211, 66), name='EQUIP_SCROLL') SIM_VALUE = 0.90 +equipping_filter = Switch('Equipping_filter') +equipping_filter.add_status('on', check_button=EQUIPPING_ON) +equipping_filter.add_status('off', check_button=EQUIPPING_OFF) + class EquipmentChange(Equipment): - equip_list = {} - equipping_list = [] + equipment_list = {} - def get_equiping_list(self, skip_first_screenshot=True): - ''' - Pages: - in: ship's details - ''' - logger.info("Get equipping list") - if skip_first_screenshot: - pass - else: - self.device.screenshot() - index = 0 - self.equipping_list = [] - for button in EQUIPMENT_GRID.buttons: + def equipping_set(self, enable=False): + if equipping_filter.set('on' if enable else 'off', main=self): + self.wait_until_stable(SWIPE_AREA) + + def ship_equipment_record_image(self, index_list=range(0, 5)): + """ + Record equipment through upgrade page + Notice: The equipment icons in the upgrade page are the same size as the icons in the equipment status + """ + logger.info('RECORD EQUIPMENT') + self.ship_side_navbar_ensure(bottom=1) + self.equipment_list = {} + for index, button in enumerate(EQUIPMENT_GRID.buttons): + if index not in index_list: + continue crop_image = self.image_crop(button) edge_value = np.mean(np.abs(cv2.Sobel(crop_image, 3, 1, 1))) # Nothing is 0.15~1 # +1 is 40 # +10 is 46 if edge_value > 10: - self.equipping_list.append(index) - index += 1 - logger.info(f"Equipping list: {self.equipping_list}") - - def record_equipment(self, index_list=range(0, 5)): - ''' - Record equipment through upgrade page - Notice: The equipment icons in the upgrade page are the same size as the icons in the equipment status - ''' - logger.info('RECORD EQUIPMENT') - self.equip_side_navbar_ensure(bottom=1) - self.get_equiping_list() - - for index in index_list: - if index in self.equipping_list: - logger.info(f'Record {index}') - logger.info('Enter equipment info') - self.ui_click(appear_button=EQUIPMENT_OPEN, click_button=EQUIP_INFO_BAR[( - index, 0)], check_button=UPGRADE_ENTER) - logger.info('Enter upgrade inform') + # Enter equipment info + self.ui_click(appear_button=EQUIPMENT_OPEN, + click_button=EQUIP_INFO_BAR[(index, 0)], + check_button=UPGRADE_ENTER) + # Enter upgrade inform self.ui_click(click_button=UPGRADE_ENTER, check_button=UPGRADE_ENTER_CHECK, skip_first_screenshot=True) - logger.info('Save equipment tamplate') - self.equip_list[index] = self.image_crop(EQUIP_SAVE) - logger.info('Quit upgrade inform') + self.equipment_list[index] = self.image_crop(EQUIP_SAVE) + # Quit upgrade inform self.ui_click( click_button=UPGRADE_QUIT, check_button=EQUIPMENT_OPEN, appear_button=UPGRADE_ENTER_CHECK, skip_first_screenshot=True) + logger.info(f"Recorded equipment index list: {list(self.equipment_list.keys())}") - def equipment_take_on(self, index_list=range(0, 5), skip_first_screenshot=True): - ''' + def ship_equipment_take_on_image(self, index_list=range(0, 5), skip_first_screenshot=True): + """ Equip the equipment previously recorded - ''' + """ logger.info('Take on equipment') - self.equip_side_navbar_ensure(bottom=2) + self.ship_side_navbar_ensure(bottom=2) for index in index_list: - if index in self.equipping_list: + if index in self.equipment_list: logger.info(f'Take on {index}') enter_button = globals()[ 'EQUIP_TAKE_ON_{index}'.format(index=index)] @@ -85,7 +76,7 @@ def equipment_take_on(self, index_list=range(0, 5), skip_first_screenshot=True): self.ui_click(enter_button, check_button=EQUIPPING_ON, skip_first_screenshot=skip_first_screenshot, offset=(5, 5)) self.handle_info_bar() - self._find_equip(index) + self._find_equipment(index) @Config.when(DEVICE_CONTROL_METHOD='minitouch') def _equipment_swipe(self, distance=190): @@ -108,13 +99,13 @@ def _equipment_swipe(self, distance=300): self.device.screenshot() def _equip_equipment(self, point, offset=(100, 100)): - ''' + """ Equip Equipment then back to ship details Confirm the popup Pages: in: EQUIPMENT STATUS out: SHIP_SIDEBAR_EQUIPMENT - ''' + """ logger.info('Equip equipment') button = Button(area=(), color=(), button=(point[0], point[1], point[0] + offset[0], point[1] + offset[1]), name='EQUIPMENT') @@ -122,23 +113,28 @@ def _equip_equipment(self, point, offset=(100, 100)): logger.info('Equip confirm') self.ui_click(click_button=EQUIP_CONFIRM, check_button=SHIP_INFO_EQUIPMENT_CHECK) - def _find_equip(self, index): - ''' + def _find_equipment(self, index): + """ Find the equipment previously recorded Pages: in: EQUIPMENT STATUS - ''' + """ self.equipping_set(False) res = cv2.matchTemplate(self.device.screenshot(), np.array( - self.equip_list[index]), cv2.TM_CCOEFF_NORMED) + self.equipment_list[index]), cv2.TM_CCOEFF_NORMED) _, sim, _, point = cv2.minMaxLoc(res) if sim > SIM_VALUE: self._equip_equipment(point) return + if not EQUIPMENT_SCROLL.appear(main=self): + logger.warning('No recorded equipment was found.') + self.ui_back(check_button=globals()[f'EQUIP_TAKE_ON_{index}'], appear_button=EQUIPPING_OFF) + return + for _ in range(0, 15): self._equipment_swipe() @@ -146,7 +142,7 @@ def _find_equip(self, index): self.device.click(BACK_ARROW) continue res = cv2.matchTemplate(self.device.screenshot(), np.array( - self.equip_list[index]), cv2.TM_CCOEFF_NORMED) + self.equipment_list[index]), cv2.TM_CCOEFF_NORMED) _, sim, _, point = cv2.minMaxLoc(res) if sim > SIM_VALUE: diff --git a/module/equipment/fleet_equipment.py b/module/equipment/fleet_equipment.py index ce04d81afc..f2a568e209 100644 --- a/module/equipment/fleet_equipment.py +++ b/module/equipment/fleet_equipment.py @@ -1,6 +1,5 @@ from module.equipment.assets import * -from module.equipment.equipment import Equipment -from module.logger import logger +from module.equipment.equipment_change import EquipmentChange from module.ocr.ocr import Digit from module.ui.assets import FLEET_CHECK from module.ui.page import page_fleet @@ -8,40 +7,31 @@ OCR_FLEET_INDEX = Digit(OCR_FLEET_INDEX, letter=(90, 154, 255), threshold=128, alphabet='123456') -class DailyEquipment(Equipment): - equipment_has_take_on = False - - @property - def _fleet_daily(self): - fleet = self.config.FLEET_DAILY - if isinstance(fleet, list): - logger.info(f'Multiple daily fleets are set, change equipment only for the first one. fleet: {fleet}') - return fleet[0] - else: - return fleet - - def equipment_take_on(self): - if self.config.FLEET_DAILY_EQUIPMENT is None: - return False - if self.equipment_has_take_on: - return False - - self.ui_ensure(page_fleet) - self.ui_ensure_index(self._fleet_daily, letter=OCR_FLEET_INDEX, next_button=FLEET_NEXT, prev_button=FLEET_PREV) - super().equipment_take_on(enter=FLEET_ENTER, out=FLEET_CHECK, fleet=self.config.FLEET_DAILY_EQUIPMENT) - self.equipment_has_take_on = True - self.device.sleep(1) - return True - - def equipment_take_off(self): - if self.config.FLEET_DAILY_EQUIPMENT is None: - return False - if not self.equipment_has_take_on: - return False - +class FleetEquipment(EquipmentChange): + def fleet_enter(self, fleet): self.ui_ensure(page_fleet) - self.ui_ensure_index(self._fleet_daily, letter=OCR_FLEET_INDEX, next_button=FLEET_NEXT, prev_button=FLEET_PREV) - super().equipment_take_off(enter=FLEET_ENTER, out=FLEET_CHECK, fleet=self.config.FLEET_DAILY_EQUIPMENT) - self.equipment_has_take_on = False - self.device.sleep(1) - return True + self.ui_ensure_index(fleet, letter=OCR_FLEET_INDEX, + next_button=FLEET_NEXT, prev_button=FLEET_PREV, skip_first_screenshot=True) + + def fleet_equipment_take_on_preset(self, preset_record, enter=FLEET_DETAIL_ENTER_FLAGSHIP, + long_click=False, out=FLEET_DETAIL_CHECK): + self.ui_click(FLEET_DETAIL, appear_button=page_fleet.check_button, + check_button=FLEET_DETAIL_CHECK, skip_first_screenshot=True) + super().fleet_equipment_take_on_preset(preset_record=preset_record, enter=FLEET_DETAIL_ENTER_FLAGSHIP, + long_click=False, out=FLEET_DETAIL_CHECK) + self.ui_back(FLEET_CHECK) + + def fleet_equipment_take_off(self, enter=FLEET_DETAIL_ENTER_FLAGSHIP, long_click=False, out=FLEET_DETAIL_CHECK): + self.ui_click(FLEET_DETAIL, appear_button=page_fleet.check_button, + check_button=FLEET_DETAIL_CHECK, skip_first_screenshot=True) + super().fleet_equipment_take_off(enter=enter, long_click=long_click, out=out) + self.ui_back(FLEET_CHECK) + + def fleet_enter_ship(self, button): + self.ui_click(FLEET_DETAIL, appear_button=page_fleet.check_button, + check_button=FLEET_DETAIL_CHECK, skip_first_screenshot=True) + self.ship_info_enter(button, long_click=False) + + def fleet_back(self): + self.ui_back(FLEET_DETAIL_CHECK) + self.ui_back(FLEET_CHECK) diff --git a/module/exercise/assets.py b/module/exercise/assets.py index c0b2c2247d..6750c581c9 100644 --- a/module/exercise/assets.py +++ b/module/exercise/assets.py @@ -9,7 +9,7 @@ DEFENDER_HP_AREA = Button(area={'cn': (691, 43, 1004, 58), 'en': (691, 43, 1004, 58), 'jp': (691, 44, 1005, 56), 'tw': (691, 43, 1004, 58)}, color={'cn': (239, 51, 15), 'en': (239, 51, 15), 'jp': (244, 115, 98), 'tw': (239, 51, 15)}, button={'cn': (691, 43, 1004, 58), 'en': (691, 43, 1004, 58), 'jp': (691, 44, 1005, 56), 'tw': (691, 43, 1004, 58)}, file={'cn': './assets/cn/exercise/DEFENDER_HP_AREA.png', 'en': './assets/en/exercise/DEFENDER_HP_AREA.png', 'jp': './assets/jp/exercise/DEFENDER_HP_AREA.png', 'tw': './assets/tw/exercise/DEFENDER_HP_AREA.png'}) EQUIP_EDIT_ACTIVE = Button(area={'cn': (51, 608, 245, 668), 'en': (50, 607, 247, 670), 'jp': (53, 610, 245, 667), 'tw': (51, 607, 247, 668)}, color={'cn': (191, 159, 109), 'en': (186, 157, 105), 'jp': (192, 159, 109), 'tw': (191, 159, 109)}, button={'cn': (51, 608, 245, 668), 'en': (50, 607, 247, 670), 'jp': (53, 610, 245, 667), 'tw': (51, 607, 247, 668)}, file={'cn': './assets/cn/exercise/EQUIP_EDIT_ACTIVE.png', 'en': './assets/en/exercise/EQUIP_EDIT_ACTIVE.png', 'jp': './assets/jp/exercise/EQUIP_EDIT_ACTIVE.png', 'tw': './assets/tw/exercise/EQUIP_EDIT_ACTIVE.png'}) EQUIP_EDIT_INACTIVE = Button(area={'cn': (51, 608, 246, 667), 'en': (50, 607, 247, 670), 'jp': (50, 610, 244, 668), 'tw': (50, 608, 246, 669)}, color={'cn': (89, 112, 158), 'en': (88, 111, 156), 'jp': (90, 113, 160), 'tw': (92, 115, 160)}, button={'cn': (51, 608, 246, 667), 'en': (50, 607, 247, 670), 'jp': (50, 610, 244, 668), 'tw': (50, 608, 246, 669)}, file={'cn': './assets/cn/exercise/EQUIP_EDIT_INACTIVE.png', 'en': './assets/en/exercise/EQUIP_EDIT_INACTIVE.png', 'jp': './assets/jp/exercise/EQUIP_EDIT_INACTIVE.png', 'tw': './assets/tw/exercise/EQUIP_EDIT_INACTIVE.png'}) -EQUIP_ENTER = Button(area={'cn': (351, 446, 361, 456), 'en': (351, 446, 361, 456), 'jp': (351, 446, 361, 456), 'tw': (351, 446, 361, 456)}, color={'cn': (252, 251, 252), 'en': (252, 251, 252), 'jp': (252, 251, 252), 'tw': (252, 251, 252)}, button={'cn': (351, 446, 361, 456), 'en': (351, 446, 361, 456), 'jp': (351, 446, 361, 456), 'tw': (351, 446, 361, 456)}, file={'cn': './assets/cn/exercise/EQUIP_ENTER.png', 'en': './assets/en/exercise/EQUIP_ENTER.png', 'jp': './assets/jp/exercise/EQUIP_ENTER.png', 'tw': './assets/tw/exercise/EQUIP_ENTER.png'}) +EQUIP_ENTER = Button(area={'cn': (432, 283, 442, 293), 'en': (432, 283, 442, 293), 'jp': (432, 283, 442, 293), 'tw': (432, 283, 442, 293)}, color={'cn': (207, 206, 206), 'en': (207, 206, 206), 'jp': (207, 206, 206), 'tw': (207, 206, 206)}, button={'cn': (432, 283, 442, 293), 'en': (432, 283, 442, 293), 'jp': (432, 283, 442, 293), 'tw': (432, 283, 442, 293)}, file={'cn': './assets/cn/exercise/EQUIP_ENTER.png', 'en': './assets/en/exercise/EQUIP_ENTER.png', 'jp': './assets/jp/exercise/EQUIP_ENTER.png', 'tw': './assets/tw/exercise/EQUIP_ENTER.png'}) EXERCISE_PREPARATION = Button(area={'cn': (543, 539, 741, 599), 'en': (541, 537, 743, 601), 'jp': (549, 543, 736, 595), 'tw': (542, 539, 742, 600)}, color={'cn': (235, 186, 114), 'en': (234, 182, 102), 'jp': (235, 184, 111), 'tw': (236, 187, 117)}, button={'cn': (543, 539, 741, 599), 'en': (541, 537, 743, 601), 'jp': (549, 543, 736, 595), 'tw': (542, 539, 742, 600)}, file={'cn': './assets/cn/exercise/EXERCISE_PREPARATION.png', 'en': './assets/en/exercise/EXERCISE_PREPARATION.png', 'jp': './assets/jp/exercise/EXERCISE_PREPARATION.png', 'tw': './assets/tw/exercise/EXERCISE_PREPARATION.png'}) NEW_OPPONENT = Button(area={'cn': (1065, 340, 1204, 382), 'en': (1064, 339, 1205, 384), 'jp': (1064, 339, 1204, 383), 'tw': (1066, 342, 1203, 381)}, color={'cn': (129, 166, 220), 'en': (128, 165, 221), 'jp': (131, 165, 220), 'tw': (138, 172, 222)}, button={'cn': (1065, 340, 1204, 382), 'en': (1064, 339, 1205, 384), 'jp': (1064, 339, 1204, 383), 'tw': (1066, 342, 1203, 381)}, file={'cn': './assets/cn/exercise/NEW_OPPONENT.png', 'en': './assets/en/exercise/NEW_OPPONENT.png', 'jp': './assets/jp/exercise/NEW_OPPONENT.png', 'tw': './assets/tw/exercise/NEW_OPPONENT.png'}) OCR_EXERCISE_REMAIN = Button(area={'cn': (1153, 140, 1178, 165), 'en': (1153, 140, 1178, 165), 'jp': (1153, 140, 1178, 165), 'tw': (1153, 140, 1178, 165)}, color={'cn': (96, 132, 113), 'en': (96, 132, 113), 'jp': (96, 132, 113), 'tw': (96, 132, 113)}, button={'cn': (1153, 140, 1178, 165), 'en': (1153, 140, 1178, 165), 'jp': (1153, 140, 1178, 165), 'tw': (1153, 140, 1178, 165)}, file={'cn': './assets/cn/exercise/OCR_EXERCISE_REMAIN.png', 'en': './assets/en/exercise/OCR_EXERCISE_REMAIN.png', 'jp': './assets/jp/exercise/OCR_EXERCISE_REMAIN.png', 'tw': './assets/tw/exercise/OCR_EXERCISE_REMAIN.png'}) diff --git a/module/exercise/combat.py b/module/exercise/combat.py index 17eb8c9bdf..826cad1f5e 100644 --- a/module/exercise/combat.py +++ b/module/exercise/combat.py @@ -174,15 +174,15 @@ def equipment_take_off_when_finished(self): return False self._choose_opponent(0) - super().equipment_take_off() + self.equipment_take_off() self._preparation_quit() - # def equipment_take_on(self): - # if self.config.EXERCISE_FLEET_EQUIPMENT is None: - # return False - # if self.equipment_has_take_on: - # return False - # - # self._choose_opponent(0) - # super().equipment_take_on() - # self._preparation_quit() + def equipment_take_on(self): + if self.config.EXERCISE_FLEET_EQUIPMENT is None: + return False + if self.equipment_has_take_on: + return False + + self._choose_opponent(0) + super().equipment_take_on() + self._preparation_quit() diff --git a/module/exercise/equipment.py b/module/exercise/equipment.py index d77429346a..4d66b26e6d 100644 --- a/module/exercise/equipment.py +++ b/module/exercise/equipment.py @@ -1,10 +1,10 @@ from module.base.timer import Timer from module.combat.assets import BATTLE_PREPARATION -from module.equipment.equipment import Equipment +from module.equipment.equipment_change import EquipmentChange from module.exercise.assets import * -class ExerciseEquipment(Equipment): +class ExerciseEquipment(EquipmentChange): def _active_edit(self): timer = Timer(5) while 1: @@ -32,23 +32,12 @@ def _inactive_edit(self): break def equipment_take_on(self): - if self.config.EXERCISE_FLEET_EQUIPMENT is None: - return False - if self.equipment_has_take_on: - return False - self._active_edit() - super().equipment_take_on(enter=EQUIP_ENTER, out=BATTLE_PREPARATION, fleet=self.config.EXERCISE_FLEET_EQUIPMENT) + self.fleet_equipment_take_on_preset(preset_record=self.config.EXERCISE_FLEET_EQUIPMENT, enter=EQUIP_ENTER, + long_click=True, out=BATTLE_PREPARATION) self._inactive_edit() - return True def equipment_take_off(self): - if self.config.EXERCISE_FLEET_EQUIPMENT is None: - return False - if not self.equipment_has_take_on: - return False - self._active_edit() - super().equipment_take_off(enter=EQUIP_ENTER, out=BATTLE_PREPARATION, fleet=self.config.EXERCISE_FLEET_EQUIPMENT) + self.fleet_equipment_take_off(enter=EQUIP_ENTER, long_click=True, out=BATTLE_PREPARATION) self._inactive_edit() - return True diff --git a/module/hard/equipment.py b/module/hard/equipment.py index 2506baa518..59fbc7d812 100644 --- a/module/hard/equipment.py +++ b/module/hard/equipment.py @@ -1,17 +1,19 @@ -from module.equipment.equipment import Equipment +from module.equipment.equipment_change import EquipmentChange from module.hard.assets import * from module.map.assets import * -class HardEquipment(Equipment): +class HardEquipment(EquipmentChange): + def equipment_take_on(self): if self.config.FLEET_HARD_EQUIPMENT is None: return False if self.equipment_has_take_on: return False - enter = EQUIP_ENTER_1 if self.config.FLEET_HARD == 1 else EQUIP_ENTER_2 - super().equipment_take_on(enter=enter, out=FLEET_PREPARATION, fleet=self.config.FLEET_HARD_EQUIPMENT) + enter = EQUIP_ENTER_1 if self.config.Hard_HardFleet == 1 else EQUIP_ENTER_2 + self.fleet_equipment_take_on_preset(preset_record=self.config.FLEET_HARD_EQUIPMENT, enter=enter, + long_click=True, out=FLEET_PREPARATION) return True def equipment_take_off(self): @@ -20,6 +22,6 @@ def equipment_take_off(self): if not self.equipment_has_take_on: return False - enter = EQUIP_ENTER_1 if self.config.FLEET_HARD == 1 else EQUIP_ENTER_2 - super().equipment_take_off(enter=enter, out=FLEET_PREPARATION, fleet=self.config.FLEET_HARD_EQUIPMENT) + enter = EQUIP_ENTER_1 if self.config.Hard_HardFleet == 1 else EQUIP_ENTER_2 + self.fleet_equipment_take_off(enter=enter, long_click=True, out=FLEET_PREPARATION) return True diff --git a/module/retire/dock.py b/module/retire/dock.py index 2731179b73..3fad7c8d94 100644 --- a/module/retire/dock.py +++ b/module/retire/dock.py @@ -1,13 +1,13 @@ from module.base.button import ButtonGrid from module.base.decorator import cached_property from module.base.timer import Timer -from module.equipment.equipment import Equipment from module.logger import logger from module.ocr.ocr import DigitCounter from module.retire.assets import * from module.ui.scroll import Scroll from module.ui.setting import Setting from module.ui.switch import Switch +from module.ui.ui import UI DOCK_SORTING = Switch('Dork_sorting') DOCK_SORTING.add_status('Ascending', check_button=SORT_ASC, click_button=SORTING_CLICK) @@ -28,7 +28,7 @@ OCR_DOCK_SELECTED = DigitCounter(DOCK_SELECTED, threshold=64, name='OCR_DOCK_SELECTED') -class Dock(Equipment): +class Dock(UI): def handle_dock_cards_loading(self): # Poor implementation. self.device.sleep((1, 1.5)) From 00926388c8ec6dc2fc4b90796fc963058d4c8777 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 19 Apr 2024 01:52:51 +0800 Subject: [PATCH 06/39] Fix: site-packages detection on manual package builds --- module/device/method/utils.py | 14 ++++++++++ module/device/pkg_resources/__init__.py | 37 +++++++++++++++++++++---- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/module/device/method/utils.py b/module/device/method/utils.py index 817cb4ab8c..4ae0104feb 100644 --- a/module/device/method/utils.py +++ b/module/device/method/utils.py @@ -242,6 +242,20 @@ def remove_prefix(s, prefix): return s[len(prefix):] if s.startswith(prefix) else s +def remove_suffix(s, suffix): + """ + Remove suffix of a string or bytes like `string.removesuffix(suffix)`, which is on Python3.9+ + + Args: + s (str, bytes): + suffix (str, bytes): + + Returns: + str, bytes: + """ + return s[:-len(suffix)] if s.endswith(suffix) else s + + def remove_shell_warning(s): """ Remove warnings from shell diff --git a/module/device/pkg_resources/__init__.py b/module/device/pkg_resources/__init__.py index 61014ef79d..b685a6d9aa 100644 --- a/module/device/pkg_resources/__init__.py +++ b/module/device/pkg_resources/__init__.py @@ -3,6 +3,7 @@ import sys from module.base.decorator import cached_property +from module.logger import logger """ Importing pkg_resources is so slow, like 0.4 ~ 1.0s, just google it you will find it indeed really slow. @@ -18,7 +19,24 @@ ``` """ # Inject sys.modules, pretend we have pkg_resources imported -sys.modules['pkg_resources'] = sys.modules['module.device.pkg_resources'] +try: + sys.modules['pkg_resources'] = sys.modules['module.device.pkg_resources'] +except KeyError: + logger.error('Patch pkg_resources failed, patch module does not exists') + + +def remove_suffix(s, suffix): + """ + Remove suffix of a string or bytes like `string.removesuffix(suffix)`, which is on Python3.9+ + + Args: + s (str, bytes): + suffix (str, bytes): + + Returns: + str, bytes: + """ + return s[:-len(suffix)] if s.endswith(suffix) else s class FakeDistributionObject: @@ -50,11 +68,14 @@ def dict_installed_packages(self): dic = {} for file in os.listdir(self.site_packages): # mxnet_cu101-1.6.0.dist-info - res = re.match(r'^(.+)-(.+)\.dist-info$', file) + # adbutils-0.11.0-py3.7.egg-info + res = re.match(r'^([a-zA-Z0-9._]+)-([a-zA-Z0-9._]+)-', file) if res: + version = remove_suffix(res.group(2), '.dist') + # version = res.group(2) obj = FakeDistributionObject( dist=res.group(1), - version=res.group(2), + version=version, ) dic[obj.dist] = obj @@ -73,9 +94,15 @@ def resource_filename(*args): 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') + return PACKAGE_CACHE.dict_installed_packages.get( + 'adbutils', + FakeDistributionObject('adbutils', '0.11.0'), + ) if dist == 'uiautomator2': - return PACKAGE_CACHE.dict_installed_packages.get('uiautomator2', '2.16.17') + return PACKAGE_CACHE.dict_installed_packages.get( + 'uiautomator2', + FakeDistributionObject('uiautomator2', '2.16.17'), + ) class DistributionNotFound(Exception): From 54ff40588ca07bf1d624925ae2fec1427ce71a3c Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 19 Apr 2024 01:53:52 +0800 Subject: [PATCH 07/39] Fix: [ALAS] Touch builders have no retries if called directly --- module/device/method/maatouch.py | 1 + module/device/method/minitouch.py | 1 + 2 files changed, 2 insertions(+) diff --git a/module/device/method/maatouch.py b/module/device/method/maatouch.py index 300e8ff9c7..2b42ca6837 100644 --- a/module/device/method/maatouch.py +++ b/module/device/method/maatouch.py @@ -107,6 +107,7 @@ class MaaTouch(Connection): _maatouch_init_thread = None @cached_property + @retry def _maatouch_builder(self): self.maatouch_init() return MaatouchBuilder(self) diff --git a/module/device/method/minitouch.py b/module/device/method/minitouch.py index 18a09009f2..339c17cc16 100644 --- a/module/device/method/minitouch.py +++ b/module/device/method/minitouch.py @@ -373,6 +373,7 @@ class Minitouch(Connection): _minitouch_init_thread = None @cached_property + @retry def _minitouch_builder(self): self.minitouch_init() return CommandBuilder(self) From 01a3c29c8b95fd7aa84be380cb9f168f77c7d132 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 19 Apr 2024 01:54:36 +0800 Subject: [PATCH 08/39] Opt: camera_data_spawn_point should reuse camera_data in W15 --- campaign/campaign_main/campaign_15_1.py | 6 +++--- campaign/campaign_main/campaign_15_2.py | 4 ++-- campaign/campaign_main/campaign_15_3.py | 2 +- campaign/campaign_main/campaign_15_base.py | 5 ++--- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/campaign/campaign_main/campaign_15_1.py b/campaign/campaign_main/campaign_15_1.py index 082a5c2be8..c49cff6795 100644 --- a/campaign/campaign_main/campaign_15_1.py +++ b/campaign/campaign_main/campaign_15_1.py @@ -8,7 +8,7 @@ MAP = CampaignMap('15-1') MAP.shape = 'H7' MAP.camera_data = ['C2', 'C5', 'E2', 'E5'] -MAP.camera_data_spawn_point = ['D5'] +MAP.camera_data_spawn_point = ['C5'] MAP.camera_sight = (-2, -1, 3, 2) MAP.map_data = """ Me Me ME ++ ME MB ++ ++ @@ -73,13 +73,13 @@ def battle_0(self): else: if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): return True - + return self.battle_default() def battle_1(self): if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): return True - + return self.battle_default() def battle_5(self): diff --git a/campaign/campaign_main/campaign_15_2.py b/campaign/campaign_main/campaign_15_2.py index 944b5729dc..cfead58218 100644 --- a/campaign/campaign_main/campaign_15_2.py +++ b/campaign/campaign_main/campaign_15_2.py @@ -8,7 +8,7 @@ MAP = CampaignMap('15-2') MAP.shape = 'I8' MAP.camera_data = ['C2', 'C6', 'F2', 'F6'] -MAP.camera_data_spawn_point = ['E5'] +MAP.camera_data_spawn_point = ['F2'] MAP.camera_sight = (-2, -1, 3, 2) MAP.map_data = """ ME -- ME ME Me -- ++ ++ ++ @@ -81,7 +81,7 @@ def battle_0(self): def battle_1(self): if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): return True - + return self.battle_default() def battle_5(self): diff --git a/campaign/campaign_main/campaign_15_3.py b/campaign/campaign_main/campaign_15_3.py index 94c95092f5..63086c3b4e 100644 --- a/campaign/campaign_main/campaign_15_3.py +++ b/campaign/campaign_main/campaign_15_3.py @@ -91,7 +91,7 @@ def battle_4(self): if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): return True - return self.battle_default() + return self.battle_default() def battle_5(self): if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): diff --git a/campaign/campaign_main/campaign_15_base.py b/campaign/campaign_main/campaign_15_base.py index 7ddd27641f..71a2f6271d 100644 --- a/campaign/campaign_main/campaign_15_base.py +++ b/campaign/campaign_main/campaign_15_base.py @@ -64,12 +64,12 @@ def mob_movable(self, location, target): if not self.map[target].is_sea: logger.error(f'{self.map[target]} is not a sea grid.') movable = False - + if not movable: logger.error(f'Cannot move from {self.map[location]} to {self.map[target]}.') return movable - + def _mob_move(self, location, target): """ Move mob from location to target, and confirm if successfully moved. @@ -174,4 +174,3 @@ def mob_move(self, location, target): self._mob_move_info_change(location, target) self.map.show() return result - From cddfea680d946b129f7a71f5794d2a3ef7fcbfa6 Mon Sep 17 00:00:00 2001 From: Air111 <1796389814@qq.com> Date: Fri, 19 Apr 2024 14:13:18 +0800 Subject: [PATCH 09/39] Fix: rename equip_enter --- module/campaign/gems_farming.py | 2 +- module/retire/dock.py | 4 ++-- module/retire/enhancement.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/module/campaign/gems_farming.py b/module/campaign/gems_farming.py index 92c84872d7..d0e6368b2d 100644 --- a/module/campaign/gems_farming.py +++ b/module/campaign/gems_farming.py @@ -67,7 +67,7 @@ def handle_combat_low_emotion(self): raise CampaignEnd('Emotion withdraw') -class GemsFarming(CampaignRun, Dock, FleetEquipment): +class GemsFarming(CampaignRun, FleetEquipment, Dock): def load_campaign(self, name, folder='campaign_main'): super().load_campaign(name, folder) diff --git a/module/retire/dock.py b/module/retire/dock.py index 3fad7c8d94..2731179b73 100644 --- a/module/retire/dock.py +++ b/module/retire/dock.py @@ -1,13 +1,13 @@ from module.base.button import ButtonGrid from module.base.decorator import cached_property from module.base.timer import Timer +from module.equipment.equipment import Equipment from module.logger import logger from module.ocr.ocr import DigitCounter from module.retire.assets import * from module.ui.scroll import Scroll from module.ui.setting import Setting from module.ui.switch import Switch -from module.ui.ui import UI DOCK_SORTING = Switch('Dork_sorting') DOCK_SORTING.add_status('Ascending', check_button=SORT_ASC, click_button=SORTING_CLICK) @@ -28,7 +28,7 @@ OCR_DOCK_SELECTED = DigitCounter(DOCK_SELECTED, threshold=64, name='OCR_DOCK_SELECTED') -class Dock(UI): +class Dock(Equipment): def handle_dock_cards_loading(self): # Poor implementation. self.device.sleep((1, 1.5)) diff --git a/module/retire/enhancement.py b/module/retire/enhancement.py index 8852e06175..415652a191 100644 --- a/module/retire/enhancement.py +++ b/module/retire/enhancement.py @@ -49,7 +49,7 @@ def _enhance_enter(self, favourite=False, ship_type=None): if self.appear(DOCK_EMPTY, offset=(30, 30)): return False - self.equip_enter( + self.ship_info_enter( CARD_GRIDS[(0, 0)], check_button=SHIP_DETAIL_CHECK, long_click=False) return True From 932cd6c3709566902b32f71fffe7b76476bcb4a5 Mon Sep 17 00:00:00 2001 From: Air111 <1796389814@qq.com> Date: Fri, 19 Apr 2024 15:07:11 +0800 Subject: [PATCH 10/39] Fix: update [CN/JP/TW] asset EQUIPPING_ON to handle cat claw --- assets/cn/equipment/EQUIPPING_ON.BUTTON.png | Bin 10213 -> 0 bytes assets/cn/equipment/EQUIPPING_ON.png | Bin 3801 -> 7502 bytes assets/jp/equipment/EQUIPPING_ON.BUTTON.png | Bin 10213 -> 0 bytes assets/jp/equipment/EQUIPPING_ON.png | Bin 3801 -> 7387 bytes assets/tw/equipment/EQUIPPING_ON.BUTTON.png | Bin 24740 -> 0 bytes assets/tw/equipment/EQUIPPING_ON.png | Bin 3801 -> 7890 bytes module/equipment/assets.py | 2 +- 7 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 assets/cn/equipment/EQUIPPING_ON.BUTTON.png delete mode 100644 assets/jp/equipment/EQUIPPING_ON.BUTTON.png delete mode 100644 assets/tw/equipment/EQUIPPING_ON.BUTTON.png diff --git a/assets/cn/equipment/EQUIPPING_ON.BUTTON.png b/assets/cn/equipment/EQUIPPING_ON.BUTTON.png deleted file mode 100644 index 312f416c923d7575832c608cb0e96e2d4db298e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10213 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 delta 1241 zcmV;~1Sb2=I@ukNBYzH{Nkl6&jxJxG=Y1yt00000000000JF;lNdg0K=>fCB1xf(| zTza#?1xo<}mmagh1xf(}z@-P1!3EcU{I9L8_WDOhM?b+AT3cK3Z36%R@U!;|j~D;| zfXhGt1^@uyQplSAlJ!CT_}RFw>$o1vvM8_RXV1C+RW+WZ5JGV!_HT7#T#o}004mhQnLZL+OIzU+ivx8oTe$p*zUA9@AS6rmTz2k`=7gYJq{s%bUN+g zYO8m%vl##4%bmqRO1FDAdY&l&003{T!2tYpZ!}B4`@=B5PMV~8f4Dt5%(K+Ldw!Z7 z9gKIrsd_g$%~z%Y006jLnpy*#QriCFN%dkJvUx-Ebor_4^x5AZS1;;wXC0B-(;RM*Q??0EwK0I&*; z1mJ3vhX1LLOTO{bKlK0d=dI8FwAs5+EIOjoH0(SYoSL!7xoP&9jt9?ws^>4}Mc`RY zSOx|F0AK|g3BYwd9#58S%)Oh%t>2cj9iFe`w{MjvuQ(cxUhi|BzWO_^$Gf|O(<1-? z0B}K#1mNK?)%CK&`FES;$#_}j@i+kw>r*YzCn+}zA!~&&s}GM3&fh2t0002qLNjZC zrzuUB`8LnnX|f!TSv$^u^6jj#x&HQ5zCDS;?L6;Z%V#ao_4r>8k9(x2XI2XX006*` z)YLA}A;hyoX?p$%@pyBr{7U;*<+5UY|EtII%CPhc006)WG!lUGJdf+kd^>pd{A9d7 z7^mrSPpi(={Ixl=3>;fo+`Lm1*NWLn;IrFA0{{TP+iD~L7gt+-77At`lso1jx007|PvL=4RZYOs0*63wDulm-X z|6}L9o8|DJe)4QEU(g#v7H@x0yf$a{dZZMxkgv!72i?JbbvT(jTdcIaVE1|~uXj#QX@zi@#W=6`Zf=wh9u1!F4VQP9 zDFOok0B})FZGzR`DCeEb%j}va>GW<^TOZv%JEe7;$K!h3ywh#XUzpU&V(aXw0002+ zBQ+I(yVvr2A9iOMcJ^xD5Z9NVki~l+7XA0j@1NekQ_jPGb3B}e!|C^*3jhEBKdiae zAcg)$?~k7xS9-H~Cvz6JHj3YWy!C^f*Lj}byW4&>7XSbNE~eRV+2823f0=JTtm<#; zyd5_;%KrP^v)3#-`Mlpb6jxtu4c))nfAG!Dd>iQ0&MgB5007`Z)>ixT9UUG01kYn_ zZN;|@006)Z&t8Kq&;S4c@c%;q2D8Bh5Ca)ljS#|jcl%x=kj^l400000NkvXXu0mjf D|8i=p diff --git a/assets/jp/equipment/EQUIPPING_ON.BUTTON.png b/assets/jp/equipment/EQUIPPING_ON.BUTTON.png deleted file mode 100644 index 312f416c923d7575832c608cb0e96e2d4db298e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10213 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 DrAliZ diff --git a/assets/tw/equipment/EQUIPPING_ON.BUTTON.png b/assets/tw/equipment/EQUIPPING_ON.BUTTON.png deleted file mode 100644 index 8589ddfa5458b79be956bb52a9f0b7a7d6322abf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24740 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 Ay8r+H diff --git a/assets/tw/equipment/EQUIPPING_ON.png b/assets/tw/equipment/EQUIPPING_ON.png index 4bbbfada70397dea8a03265e702cb5655a29e6cf..c90fb5e2fc7855267fde2f5fe23dbd5318b17b04 100644 GIT binary patch literal 7890 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 DA#G~1 diff --git a/module/equipment/assets.py b/module/equipment/assets.py index a40f6e7ee3..31dffc6606 100644 --- a/module/equipment/assets.py +++ b/module/equipment/assets.py @@ -8,7 +8,7 @@ EQUIPMENT_OPEN = Button(area={'cn': (1139, 87, 1231, 111), 'en': (1143, 90, 1229, 110), 'jp': (1140, 88, 1234, 111), 'tw': (1138, 87, 1232, 112)}, color={'cn': (82, 137, 199), 'en': (75, 134, 200), 'jp': (80, 135, 198), 'tw': (86, 139, 198)}, button={'cn': (1139, 87, 1231, 111), 'en': (1143, 90, 1229, 110), 'jp': (1140, 88, 1234, 111), 'tw': (1138, 87, 1232, 112)}, file={'cn': './assets/cn/equipment/EQUIPMENT_OPEN.png', 'en': './assets/en/equipment/EQUIPMENT_OPEN.png', 'jp': './assets/jp/equipment/EQUIPMENT_OPEN.png', 'tw': './assets/tw/equipment/EQUIPMENT_OPEN.png'}) EQUIPMENT_SCROLL_BOTTOM = Button(area={'cn': (1256, 575, 1264, 583), 'en': (1256, 575, 1264, 583), 'jp': (1256, 575, 1264, 583), 'tw': (1256, 575, 1264, 583)}, color={'cn': (244, 209, 66), 'en': (244, 209, 66), 'jp': (244, 209, 66), 'tw': (244, 209, 66)}, button={'cn': (1256, 575, 1264, 583), 'en': (1256, 575, 1264, 583), 'jp': (1256, 575, 1264, 583), 'tw': (1256, 575, 1264, 583)}, file={'cn': './assets/cn/equipment/EQUIPMENT_SCROLL_BOTTOM.png', 'en': './assets/en/equipment/EQUIPMENT_SCROLL_BOTTOM.png', 'jp': './assets/jp/equipment/EQUIPMENT_SCROLL_BOTTOM.png', 'tw': './assets/tw/equipment/EQUIPMENT_SCROLL_BOTTOM.png'}) EQUIPPING_OFF = Button(area={'cn': (25, 565, 60, 589), 'en': (30, 585, 59, 605), 'jp': (25, 565, 60, 589), 'tw': (25, 565, 60, 589)}, color={'cn': (94, 101, 104), 'en': (65, 70, 96), 'jp': (94, 101, 104), 'tw': (94, 101, 104)}, button={'cn': (25, 565, 60, 589), 'en': (30, 585, 59, 605), 'jp': (25, 565, 60, 589), 'tw': (25, 565, 60, 589)}, file={'cn': './assets/cn/equipment/EQUIPPING_OFF.png', 'en': './assets/en/equipment/EQUIPPING_OFF.png', 'jp': './assets/jp/equipment/EQUIPPING_OFF.png', 'tw': './assets/tw/equipment/EQUIPPING_OFF.png'}) -EQUIPPING_ON = Button(area={'cn': (26, 485, 60, 510), 'en': (32, 563, 54, 583), 'jp': (26, 485, 60, 510), 'tw': (26, 485, 60, 510)}, color={'cn': (184, 191, 214), 'en': (164, 173, 208), 'jp': (184, 191, 214), 'tw': (184, 191, 214)}, button={'cn': (26, 486, 57, 584), 'en': (7, 559, 78, 606), 'jp': (26, 486, 57, 584), 'tw': (26, 483, 61, 590)}, file={'cn': './assets/cn/equipment/EQUIPPING_ON.png', 'en': './assets/en/equipment/EQUIPPING_ON.png', 'jp': './assets/jp/equipment/EQUIPPING_ON.png', 'tw': './assets/tw/equipment/EQUIPPING_ON.png'}) +EQUIPPING_ON = Button(area={'cn': (26, 510, 57, 584), 'en': (32, 563, 54, 583), 'jp': (32, 513, 55, 586), 'tw': (26, 510, 61, 590)}, color={'cn': (97, 115, 156), 'en': (164, 173, 208), 'jp': (108, 123, 165), 'tw': (86, 105, 148)}, button={'cn': (26, 510, 57, 584), 'en': (7, 559, 78, 606), 'jp': (32, 513, 55, 586), 'tw': (26, 510, 61, 590)}, file={'cn': './assets/cn/equipment/EQUIPPING_ON.png', 'en': './assets/en/equipment/EQUIPPING_ON.png', 'jp': './assets/jp/equipment/EQUIPPING_ON.png', 'tw': './assets/tw/equipment/EQUIPPING_ON.png'}) EQUIP_1 = Button(area={'cn': (1211, 274, 1230, 315), 'en': (1200, 273, 1241, 314), 'jp': (1191, 265, 1248, 320), 'tw': (1190, 265, 1249, 319)}, color={'cn': (133, 181, 222), 'en': (77, 130, 192), 'jp': (97, 142, 206), 'tw': (102, 147, 211)}, button={'cn': (1211, 274, 1230, 315), 'en': (1200, 273, 1241, 314), 'jp': (1191, 265, 1248, 320), 'tw': (1190, 265, 1249, 319)}, file={'cn': './assets/cn/equipment/EQUIP_1.png', 'en': './assets/en/equipment/EQUIP_1.png', 'jp': './assets/jp/equipment/EQUIP_1.png', 'tw': './assets/tw/equipment/EQUIP_1.png'}) EQUIP_2 = Button(area={'cn': (1211, 374, 1230, 416), 'en': (1200, 374, 1241, 415), 'jp': (1191, 365, 1248, 420), 'tw': (1190, 365, 1249, 419)}, color={'cn': (130, 179, 220), 'en': (77, 130, 192), 'jp': (94, 138, 201), 'tw': (100, 144, 208)}, button={'cn': (1211, 374, 1230, 416), 'en': (1200, 374, 1241, 415), 'jp': (1191, 365, 1248, 420), 'tw': (1190, 365, 1249, 419)}, file={'cn': './assets/cn/equipment/EQUIP_2.png', 'en': './assets/en/equipment/EQUIP_2.png', 'jp': './assets/jp/equipment/EQUIP_2.png', 'tw': './assets/tw/equipment/EQUIP_2.png'}) EQUIP_3 = Button(area={'cn': (1211, 475, 1230, 517), 'en': (1200, 475, 1241, 516), 'jp': (1190, 467, 1249, 520), 'tw': (1190, 466, 1249, 520)}, color={'cn': (130, 179, 220), 'en': (80, 132, 192), 'jp': (89, 134, 197), 'tw': (97, 142, 205)}, button={'cn': (1211, 475, 1230, 517), 'en': (1200, 475, 1241, 516), 'jp': (1190, 467, 1249, 520), 'tw': (1190, 466, 1249, 520)}, file={'cn': './assets/cn/equipment/EQUIP_3.png', 'en': './assets/en/equipment/EQUIP_3.png', 'jp': './assets/jp/equipment/EQUIP_3.png', 'tw': './assets/tw/equipment/EQUIP_3.png'}) From 25a33ede7d533902773bd41fd0f785c86996be54 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Fri, 19 Apr 2024 21:13:17 +0800 Subject: [PATCH 11/39] Fix: force battle function choice for 15-3/15-4 when clear all (#3655) --- campaign/campaign_main/campaign_15_3.py | 14 ++++++++++++++ campaign/campaign_main/campaign_15_4.py | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/campaign/campaign_main/campaign_15_3.py b/campaign/campaign_main/campaign_15_3.py index 63086c3b4e..dc9cced523 100644 --- a/campaign/campaign_main/campaign_15_3.py +++ b/campaign/campaign_main/campaign_15_3.py @@ -66,6 +66,20 @@ class Config(ConfigBase): class Campaign(CampaignBase): MAP = MAP + def battle_function(self): + if not self.config.MAP_CLEAR_ALL_THIS_TIME: + return super().battle_function() + + if self.battle_count == 3 \ + or (self.battle_count == 0 and not self.map_is_clear_mode): + func = self.FUNCTION_NAME_BASE + str(self.battle_count) + logger.info(f'Using function: {func}') + func = self.__getattribute__(func) + result = func() + return result + + return super().battle_function() + def battle_0(self): if not self.map_is_clear_mode: self.mob_move(B3, B4) diff --git a/campaign/campaign_main/campaign_15_4.py b/campaign/campaign_main/campaign_15_4.py index f43c1ca689..6c8ec540ad 100644 --- a/campaign/campaign_main/campaign_15_4.py +++ b/campaign/campaign_main/campaign_15_4.py @@ -71,6 +71,20 @@ class Config(ConfigBase): class Campaign(CampaignBase): MAP = MAP + def battle_function(self): + if not self.config.MAP_CLEAR_ALL_THIS_TIME: + return super().battle_function() + + if self.battle_count in [3, 6] \ + or (self.battle_count in [0, 1] and not self.map_is_clear_mode): + func = self.FUNCTION_NAME_BASE + str(self.battle_count) + logger.info(f'Using function: {func}') + func = self.__getattribute__(func) + result = func() + return result + + return super().battle_function() + def battle_0(self): if not self.map_is_clear_mode: self.clear_chosen_enemy(A1) From 0eee91a891de078eeb303b2d30c8f49dcb437870 Mon Sep 17 00:00:00 2001 From: Air111 <1796389814@qq.com> Date: Fri, 19 Apr 2024 15:40:55 +0800 Subject: [PATCH 12/39] Fix: scan ships in correct fleet --- module/campaign/gems_farming.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/module/campaign/gems_farming.py b/module/campaign/gems_farming.py index d0e6368b2d..57fef78155 100644 --- a/module/campaign/gems_farming.py +++ b/module/campaign/gems_farming.py @@ -95,11 +95,12 @@ def change_vanguard(self): def change_vanguard_equip(self): return 'equip' in self.config.GemsFarming_ChangeVanguard - def fleet_enter(self, fleet=None): - fleet = self.config.Fleet_Fleet1 + @property + def fleet_to_attack(self): if self.config.Fleet_FleetOrder == 'fleet1_standby_fleet2_all': - fleet = self.config.Fleet_Fleet2 - super().fleet_enter(fleet) + return self.config.Fleet_Fleet2 + else: + return self.config.Fleet_Fleet1 def flagship_change(self): """ @@ -116,7 +117,7 @@ def flagship_change(self): index_list = range(0, 5) logger.hr('Change flagship', level=1) logger.attr('ChangeFlagship', self.config.GemsFarming_ChangeFlagship) - self.fleet_enter() + self.fleet_enter(self.fleet_to_attack) if self.change_flagship_equip: logger.hr('Record flagship equipment', level=2) self.fleet_enter_ship(FLEET_DETAIL_ENTER_FLAGSHIP) @@ -146,7 +147,7 @@ def vanguard_change(self): logger.hr('Change vanguard', level=1) logger.attr('ChangeVanguard', self.config.GemsFarming_ChangeVanguard) - self.fleet_enter() + self.fleet_enter(self.fleet_to_attack) if self.change_vanguard_equip: logger.hr('Record vanguard equipment', level=2) self.fleet_enter_ship(FLEET_DETAIL_ENTER) @@ -183,8 +184,8 @@ def get_common_rarity_cv(self): logger.hr('FINDING FLAGSHIP') - scanner = ShipScanner( - level=(1, 31), emotion=(10, 150), fleet=self.config.Fleet_Fleet1, status='free') + scanner = ShipScanner(level=(1, 31), emotion=(10, 150), + fleet=self.fleet_to_attack, status='free') scanner.disable('rarity') if self.config.GemsFarming_CommonCV == 'any': @@ -243,7 +244,7 @@ def get_common_rarity_dd(self): max_level = 70 scanner = ShipScanner(level=(max_level, max_level), emotion=(10, 150), - fleet=self.config.Fleet_Fleet1, status='free') + fleet=self.fleet_to_attack, status='free') scanner.disable('rarity') self.dock_sort_method_dsc_set() From 194ec3e234809dfaf102d29bc67004b91bb7a93d Mon Sep 17 00:00:00 2001 From: Air111 <1796389814@qq.com> Date: Fri, 19 Apr 2024 21:48:50 +0800 Subject: [PATCH 13/39] Fix: lower SIM_VALUE in ship matching of GemsFarming --- module/campaign/gems_farming.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/campaign/gems_farming.py b/module/campaign/gems_farming.py index 57fef78155..8b8156fff2 100644 --- a/module/campaign/gems_farming.py +++ b/module/campaign/gems_farming.py @@ -19,7 +19,7 @@ from module.ui.assets import BACK_ARROW from module.ui.page import page_fleet -SIM_VALUE = 0.95 +SIM_VALUE = 0.92 class GemsCampaignOverride(CampaignBase): From 76f863ac59a9539e6be48c2691b58ed70e48b4b4 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 19 Apr 2024 22:38:49 +0800 Subject: [PATCH 14/39] Fix: [ALAS] Global MuMu 12 id --- module/device/platform/emulator_base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/device/platform/emulator_base.py b/module/device/platform/emulator_base.py index 94483e9f96..394becc244 100644 --- a/module/device/platform/emulator_base.py +++ b/module/device/platform/emulator_base.py @@ -105,7 +105,7 @@ def MuMuPlayer12_id(self): Returns: int: Instance ID, or None if this is not a MuMu 12 instance """ - res = re.search(r'MuMuPlayer-12.0-(\d+)', self.name) + res = re.search(r'MuMuPlayer(?:Global)?-12.0-(\d+)', self.name) if res: return int(res.group(1)) res = re.search(r'YXArkNights-12.0-(\d+)', self.name) From 74fe3138d70e14c781ac1d85abf7c519660ee4d3 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Fri, 19 Apr 2024 22:57:48 +0800 Subject: [PATCH 15/39] Opt: INTERNAL_LINES_FIND_PEAKS_PARAMETERS for W15 (#3659) --- campaign/campaign_main/campaign_15_base.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/campaign/campaign_main/campaign_15_base.py b/campaign/campaign_main/campaign_15_base.py index 71a2f6271d..4d42bc07c4 100644 --- a/campaign/campaign_main/campaign_15_base.py +++ b/campaign/campaign_main/campaign_15_base.py @@ -16,6 +16,12 @@ class Config: # Ambushes can be avoid by having more DDs. MAP_WALK_OPTIMIZE = False MAP_ENEMY_TEMPLATE = ['Light', 'Main', 'Carrier', 'CarrierSpecial'] + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 33), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } class CampaignBase(CampaignBase_): From 89aa1ad7dcbd306fae8227443bb9f1a3095eb5f6 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 20 Apr 2024 01:15:29 +0800 Subject: [PATCH 16/39] Fix: W15 optimizations - Upd: [CN] MOB_MOVE_CANCEL - Opt: MAP_SWIPE_MULTIPLY - Fix: 15-1 did not inherit ConfigBase --- assets/cn/handler/MOB_MOVE_CANCEL.png | Bin 8341 -> 8298 bytes campaign/campaign_main/campaign_15_1.py | 2 +- campaign/campaign_main/campaign_15_4.py | 4 ++++ campaign/campaign_main/campaign_15_base.py | 3 +++ module/handler/assets.py | 10 +++++----- module/handler/fast_forward.py | 1 + module/handler/strategy.py | 19 +++++++++---------- 7 files changed, 23 insertions(+), 16 deletions(-) diff --git a/assets/cn/handler/MOB_MOVE_CANCEL.png b/assets/cn/handler/MOB_MOVE_CANCEL.png index 1e4ad2b82fa073101bd224685c4dd692ec6dd8a8..3692eb2161eb0dc5a3596aabb3b1aa4679632d74 100644 GIT binary patch delta 5754 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 literal 8341 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 diff --git a/campaign/campaign_main/campaign_15_1.py b/campaign/campaign_main/campaign_15_1.py index c49cff6795..8e9f7f093b 100644 --- a/campaign/campaign_main/campaign_15_1.py +++ b/campaign/campaign_main/campaign_15_1.py @@ -47,7 +47,7 @@ = MAP.flatten() -class Config: +class Config(ConfigBase): # ===== Start of generated config ===== # MAP_SIREN_TEMPLATE = ['0'] # MOVABLE_ENEMY_TURN = (2,) diff --git a/campaign/campaign_main/campaign_15_4.py b/campaign/campaign_main/campaign_15_4.py index 6c8ec540ad..5899c328c4 100644 --- a/campaign/campaign_main/campaign_15_4.py +++ b/campaign/campaign_main/campaign_15_4.py @@ -67,6 +67,10 @@ class Config(ConfigBase): # MAP_HAS_MYSTERY = True # ===== End of generated config ===== + MAP_SWIPE_MULTIPLY = (1.055, 1.075) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.020, 1.039) + MAP_SWIPE_MULTIPLY_MAATOUCH = (0.990, 1.008) + class Campaign(CampaignBase): MAP = MAP diff --git a/campaign/campaign_main/campaign_15_base.py b/campaign/campaign_main/campaign_15_base.py index 4d42bc07c4..c9350b4b67 100644 --- a/campaign/campaign_main/campaign_15_base.py +++ b/campaign/campaign_main/campaign_15_base.py @@ -22,6 +22,9 @@ class Config: 'prominence': 10, 'distance': 35, } + MAP_SWIPE_MULTIPLY = (0.993, 1.011) + MAP_SWIPE_MULTIPLY_MINITOUCH = (0.960, 0.978) + MAP_SWIPE_MULTIPLY_MAATOUCH = (0.932, 0.949) class CampaignBase(CampaignBase_): diff --git a/module/handler/assets.py b/module/handler/assets.py index 7b371aa143..9d4e65d071 100644 --- a/module/handler/assets.py +++ b/module/handler/assets.py @@ -38,13 +38,13 @@ GET_SKIN = Button(area={'cn': (990, 550, 1022, 565), 'en': (991, 553, 1055, 564), 'jp': (990, 550, 1022, 565), 'tw': (990, 550, 1022, 565)}, color={'cn': (113, 114, 124), 'en': (142, 142, 152), 'jp': (113, 114, 124), 'tw': (113, 114, 124)}, button={'cn': (990, 550, 1022, 565), 'en': (991, 553, 1055, 564), 'jp': (990, 550, 1022, 565), 'tw': (990, 550, 1022, 565)}, file={'cn': './assets/cn/handler/GET_SKIN.png', 'en': './assets/en/handler/GET_SKIN.png', 'jp': './assets/cn/handler/GET_SKIN.png', 'tw': './assets/cn/handler/GET_SKIN.png'}) GUILD_POPUP_CANCEL = Button(area={'cn': (422, 449, 623, 486), 'en': (425, 452, 620, 483), 'jp': (422, 449, 623, 486), 'tw': (422, 449, 623, 486)}, color={'cn': (127, 125, 127), 'en': (125, 123, 125), 'jp': (119, 117, 119), 'tw': (127, 125, 127)}, button={'cn': (422, 449, 623, 486), 'en': (425, 452, 620, 483), 'jp': (422, 449, 623, 486), 'tw': (422, 449, 623, 486)}, file={'cn': './assets/cn/handler/GUILD_POPUP_CANCEL.png', 'en': './assets/en/handler/GUILD_POPUP_CANCEL.png', 'jp': './assets/jp/handler/GUILD_POPUP_CANCEL.png', 'tw': './assets/tw/handler/GUILD_POPUP_CANCEL.png'}) GUILD_POPUP_CONFIRM = Button(area={'cn': (655, 450, 856, 487), 'en': (658, 453, 853, 484), 'jp': (655, 450, 856, 487), 'tw': (655, 450, 856, 487)}, color={'cn': (90, 121, 217), 'en': (81, 114, 215), 'jp': (82, 116, 208), 'tw': (90, 121, 217)}, button={'cn': (655, 450, 856, 487), 'en': (658, 453, 853, 484), 'jp': (655, 450, 856, 487), 'tw': (655, 450, 856, 487)}, file={'cn': './assets/cn/handler/GUILD_POPUP_CONFIRM.png', 'en': './assets/en/handler/GUILD_POPUP_CONFIRM.png', 'jp': './assets/jp/handler/GUILD_POPUP_CONFIRM.png', 'tw': './assets/tw/handler/GUILD_POPUP_CONFIRM.png'}) -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'}) INFO_BAR_1 = Button(area={'cn': (202, 297, 1078, 299), 'en': (194, 297, 1086, 299), 'jp': (194, 297, 1086, 299), 'tw': (200, 297, 1080, 299)}, color={'cn': (107, 158, 255), 'en': (107, 158, 255), 'jp': (107, 158, 255), 'tw': (107, 158, 255)}, button={'cn': (202, 297, 1078, 299), 'en': (194, 297, 1086, 299), 'jp': (194, 297, 1086, 299), 'tw': (200, 297, 1080, 299)}, file={'cn': './assets/cn/handler/INFO_BAR_1.png', 'en': './assets/en/handler/INFO_BAR_1.png', 'jp': './assets/jp/handler/INFO_BAR_1.png', 'tw': './assets/tw/handler/INFO_BAR_1.png'}) INFO_BAR_2 = Button(area={'cn': (202, 241, 1078, 243), 'en': (194, 241, 1086, 243), 'jp': (194, 234, 1086, 236), 'tw': (200, 241, 1080, 243)}, color={'cn': (107, 158, 255), 'en': (107, 158, 255), 'jp': (107, 158, 255), 'tw': (107, 158, 255)}, button={'cn': (202, 241, 1078, 243), 'en': (194, 241, 1086, 243), 'jp': (194, 234, 1086, 236), 'tw': (200, 241, 1080, 243)}, file={'cn': './assets/cn/handler/INFO_BAR_2.png', 'en': './assets/en/handler/INFO_BAR_2.png', 'jp': './assets/jp/handler/INFO_BAR_2.png', 'tw': './assets/tw/handler/INFO_BAR_2.png'}) INFO_BAR_3 = Button(area={'cn': (202, 185, 1078, 187), 'en': (194, 185, 1086, 187), 'jp': (194, 171, 1086, 173), 'tw': (200, 185, 1080, 187)}, color={'cn': (107, 158, 255), 'en': (107, 158, 255), 'jp': (107, 158, 255), 'tw': (107, 158, 255)}, button={'cn': (202, 185, 1078, 187), 'en': (194, 185, 1086, 187), 'jp': (194, 171, 1086, 173), 'tw': (200, 185, 1080, 187)}, file={'cn': './assets/cn/handler/INFO_BAR_3.png', 'en': './assets/en/handler/INFO_BAR_3.png', 'jp': './assets/jp/handler/INFO_BAR_3.png', 'tw': './assets/tw/handler/INFO_BAR_3.png'}) INFO_BAR_AREA = Button(area={'cn': (200, 173, 1080, 348), 'en': (200, 173, 1080, 348), 'jp': (200, 173, 1080, 348), 'tw': (200, 173, 1080, 348)}, color={'cn': (71, 85, 102), 'en': (71, 85, 102), 'jp': (71, 85, 102), 'tw': (71, 85, 102)}, button={'cn': (200, 173, 1080, 348), 'en': (200, 173, 1080, 348), 'jp': (200, 173, 1080, 348), 'tw': (200, 173, 1080, 348)}, file={'cn': './assets/cn/handler/INFO_BAR_AREA.png', 'en': './assets/en/handler/INFO_BAR_AREA.png', 'jp': './assets/jp/handler/INFO_BAR_AREA.png', 'tw': './assets/tw/handler/INFO_BAR_AREA.png'}) INFO_BAR_DETECT = Button(area={'cn': (194, 299, 1086, 348), 'en': (194, 299, 1086, 348), 'jp': (194, 299, 1086, 348), 'tw': (194, 299, 1086, 348)}, color={'cn': (48, 53, 65), 'en': (48, 53, 65), 'jp': (48, 53, 65), 'tw': (48, 53, 65)}, button={'cn': (194, 299, 1086, 348), 'en': (194, 299, 1086, 348), 'jp': (194, 299, 1086, 348), 'tw': (194, 299, 1086, 348)}, file={'cn': './assets/cn/handler/INFO_BAR_DETECT.png', 'en': './assets/en/handler/INFO_BAR_DETECT.png', 'jp': './assets/jp/handler/INFO_BAR_DETECT.png', 'tw': './assets/tw/handler/INFO_BAR_DETECT.png'}) +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'}) @@ -69,14 +69,14 @@ 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'}) MOB_MOVE_1 = Button(area={'cn': (1102, 504, 1176, 578), 'en': (1102, 504, 1176, 578), 'jp': (1102, 504, 1176, 578), 'tw': (1102, 504, 1176, 578)}, color={'cn': (118, 120, 127), 'en': (118, 120, 127), 'jp': (118, 120, 127), 'tw': (118, 120, 127)}, button={'cn': (1102, 504, 1176, 578), 'en': (1102, 504, 1176, 578), 'jp': (1102, 504, 1176, 578), 'tw': (1102, 504, 1176, 578)}, file={'cn': './assets/cn/handler/MOB_MOVE_1.png', 'en': './assets/en/handler/MOB_MOVE_1.png', 'jp': './assets/jp/handler/MOB_MOVE_1.png', 'tw': './assets/tw/handler/MOB_MOVE_1.png'}) MOB_MOVE_2 = Button(area={'cn': (1102, 504, 1176, 578), 'en': (1102, 504, 1176, 578), 'jp': (1102, 504, 1176, 578), 'tw': (1102, 504, 1176, 578)}, color={'cn': (119, 121, 128), 'en': (119, 121, 128), 'jp': (119, 121, 128), 'tw': (119, 121, 128)}, button={'cn': (1102, 504, 1176, 578), 'en': (1102, 504, 1176, 578), 'jp': (1102, 504, 1176, 578), 'tw': (1102, 504, 1176, 578)}, file={'cn': './assets/cn/handler/MOB_MOVE_2.png', 'en': './assets/en/handler/MOB_MOVE_2.png', 'jp': './assets/jp/handler/MOB_MOVE_2.png', 'tw': './assets/tw/handler/MOB_MOVE_2.png'}) -MOB_MOVE_CANCEL = Button(area={'cn': (1162, 644, 1222, 675), 'en': (1162, 644, 1222, 675), 'jp': (1162, 644, 1222, 675), 'tw': (1162, 644, 1222, 675)}, color={'cn': (207, 140, 136), 'en': (207, 140, 136), 'jp': (207, 140, 136), 'tw': (207, 140, 136)}, button={'cn': (1162, 644, 1222, 675), 'en': (1162, 644, 1222, 675), 'jp': (1162, 644, 1222, 675), 'tw': (1162, 644, 1222, 675)}, file={'cn': './assets/cn/handler/MOB_MOVE_CANCEL.png', 'en': './assets/cn/handler/MOB_MOVE_CANCEL.png', 'jp': './assets/jp/handler/MOB_MOVE_CANCEL.png', 'tw': './assets/cn/handler/MOB_MOVE_CANCEL.png'}) +MOB_MOVE_CANCEL = Button(area={'cn': (1162, 646, 1220, 674), 'en': (1162, 646, 1220, 674), 'jp': (1162, 644, 1222, 675), 'tw': (1162, 646, 1220, 674)}, color={'cn': (224, 176, 173), 'en': (224, 176, 173), 'jp': (207, 140, 136), 'tw': (224, 176, 173)}, button={'cn': (1162, 646, 1220, 674), 'en': (1162, 646, 1220, 674), 'jp': (1162, 644, 1222, 675), 'tw': (1162, 646, 1220, 674)}, file={'cn': './assets/cn/handler/MOB_MOVE_CANCEL.png', 'en': './assets/cn/handler/MOB_MOVE_CANCEL.png', 'jp': './assets/jp/handler/MOB_MOVE_CANCEL.png', 'tw': './assets/cn/handler/MOB_MOVE_CANCEL.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'}) POPUP_CONFIRM = Button(area={'cn': (754, 502, 825, 532), 'en': (707, 487, 874, 537), 'jp': (754, 518, 826, 547), 'tw': (754, 495, 825, 525)}, color={'cn': (153, 183, 222), 'en': (105, 151, 207), 'jp': (139, 172, 215), 'tw': (147, 178, 218)}, button={'cn': (754, 502, 825, 532), 'en': (707, 487, 874, 537), 'jp': (754, 518, 826, 547), 'tw': (754, 495, 825, 525)}, file={'cn': './assets/cn/handler/POPUP_CONFIRM.png', 'en': './assets/en/handler/POPUP_CONFIRM.gif', 'jp': './assets/jp/handler/POPUP_CONFIRM.png', 'tw': './assets/tw/handler/POPUP_CONFIRM.png'}) STORY_CLOSE = Button(area={'cn': (1227, 28, 1252, 53), 'en': (1227, 28, 1252, 53), 'jp': (1227, 28, 1252, 53), 'tw': (1227, 28, 1252, 53)}, color={'cn': (87, 90, 104), 'en': (87, 90, 104), 'jp': (87, 90, 104), 'tw': (87, 90, 104)}, button={'cn': (1227, 28, 1252, 53), 'en': (1227, 28, 1252, 53), 'jp': (1227, 28, 1252, 53), 'tw': (1227, 28, 1252, 53)}, file={'cn': './assets/cn/handler/STORY_CLOSE.png', 'en': './assets/en/handler/STORY_CLOSE.png', 'jp': './assets/jp/handler/STORY_CLOSE.png', 'tw': './assets/tw/handler/STORY_CLOSE.png'}) -STORY_LETTER_BLACK = Button(area={'cn': (1145, 585, 1280, 720), 'en': (1145, 585, 1280, 720), 'jp': (1145, 585, 1280, 720), 'tw': (1145, 585, 1280, 720)}, color={'cn': (16, 20, 16), 'en': (16, 20, 16), 'jp': (16, 20, 16), 'tw': (16, 20, 16)}, button={'cn': (1145, 585, 1280, 720), 'en': (1145, 585, 1280, 720), 'jp': (1145, 585, 1280, 720), 'tw': (1145, 585, 1280, 720)}, file={'cn': './assets/cn/handler/STORY_LETTER_BLACK.png', 'en': './assets/en/handler/STORY_LETTER_BLACK.png', 'jp': './assets/jp/handler/STORY_LETTER_BLACK.png', 'tw': './assets/tw/handler/STORY_LETTER_BLACK.png'}) STORY_LETTERS_ONLY = Button(area={'cn': (1159, 26, 1264, 52), 'en': (1159, 26, 1264, 52), 'jp': (1159, 26, 1264, 52), 'tw': (1159, 26, 1264, 52)}, color={'cn': (123, 128, 141), 'en': (123, 128, 141), 'jp': (123, 128, 141), 'tw': (123, 128, 141)}, button={'cn': (1159, 26, 1264, 52), 'en': (1159, 26, 1264, 52), 'jp': (1159, 26, 1264, 52), 'tw': (1159, 26, 1264, 52)}, file={'cn': './assets/cn/handler/STORY_LETTERS_ONLY.png', 'en': './assets/en/handler/STORY_LETTERS_ONLY.png', 'jp': './assets/jp/handler/STORY_LETTERS_ONLY.png', 'tw': './assets/tw/handler/STORY_LETTERS_ONLY.png'}) +STORY_LETTER_BLACK = Button(area={'cn': (1145, 585, 1280, 720), 'en': (1145, 585, 1280, 720), 'jp': (1145, 585, 1280, 720), 'tw': (1145, 585, 1280, 720)}, color={'cn': (16, 20, 16), 'en': (16, 20, 16), 'jp': (16, 20, 16), 'tw': (16, 20, 16)}, button={'cn': (1145, 585, 1280, 720), 'en': (1145, 585, 1280, 720), 'jp': (1145, 585, 1280, 720), 'tw': (1145, 585, 1280, 720)}, file={'cn': './assets/cn/handler/STORY_LETTER_BLACK.png', 'en': './assets/en/handler/STORY_LETTER_BLACK.png', 'jp': './assets/jp/handler/STORY_LETTER_BLACK.png', 'tw': './assets/tw/handler/STORY_LETTER_BLACK.png'}) STORY_SKIP = Button(area={'cn': (1216, 676, 1258, 708), 'en': (1215, 672, 1259, 705), 'jp': (1216, 676, 1258, 708), 'tw': (1216, 676, 1258, 708)}, color={'cn': (148, 159, 178), 'en': (146, 155, 175), 'jp': (148, 159, 178), 'tw': (148, 159, 178)}, button={'cn': (1178, 25, 1196, 54), 'en': (1178, 25, 1196, 54), 'jp': (1178, 25, 1196, 54), 'tw': (1178, 25, 1196, 54)}, file={'cn': './assets/cn/handler/STORY_SKIP.png', 'en': './assets/en/handler/STORY_SKIP.png', 'jp': './assets/jp/handler/STORY_SKIP.png', 'tw': './assets/tw/handler/STORY_SKIP.png'}) STORY_SKIP_2 = Button(area={'cn': (1181, 26, 1225, 40), 'en': (1181, 26, 1225, 40), 'jp': (1181, 26, 1225, 40), 'tw': (1181, 26, 1225, 40)}, color={'cn': (173, 172, 181), 'en': (173, 172, 181), 'jp': (173, 172, 181), 'tw': (173, 172, 181)}, button={'cn': (1181, 26, 1225, 40), 'en': (1181, 26, 1225, 40), 'jp': (1181, 26, 1225, 40), 'tw': (1181, 26, 1225, 40)}, file={'cn': './assets/cn/handler/STORY_SKIP_2.png', 'en': './assets/en/handler/STORY_SKIP_2.png', 'jp': './assets/jp/handler/STORY_SKIP_2.png', 'tw': './assets/tw/handler/STORY_SKIP_2.png'}) STORY_SKIP_3 = Button(area={'cn': (28, 23, 55, 50), 'en': (28, 23, 55, 50), 'jp': (28, 23, 55, 50), 'tw': (28, 23, 55, 50)}, color={'cn': (192, 199, 209), 'en': (192, 199, 209), 'jp': (192, 199, 209), 'tw': (192, 199, 209)}, button={'cn': (28, 23, 55, 50), 'en': (28, 23, 55, 50), 'jp': (28, 23, 55, 50), 'tw': (28, 23, 55, 50)}, file={'cn': './assets/cn/handler/STORY_SKIP_3.png', 'en': './assets/en/handler/STORY_SKIP_3.png', 'jp': './assets/jp/handler/STORY_SKIP_3.png', 'tw': './assets/tw/handler/STORY_SKIP_3.png'}) @@ -89,7 +89,7 @@ SUBMARINE_MOVE_ENTER = Button(area={'cn': (1109, 511, 1169, 571), 'en': (1109, 511, 1169, 571), 'jp': (1109, 511, 1169, 571), 'tw': (1109, 511, 1169, 571)}, color={'cn': (106, 107, 114), 'en': (106, 107, 114), 'jp': (106, 107, 114), 'tw': (106, 107, 114)}, button={'cn': (1109, 511, 1169, 571), 'en': (1109, 511, 1169, 571), 'jp': (1109, 511, 1169, 571), 'tw': (1109, 511, 1169, 571)}, file={'cn': './assets/cn/handler/SUBMARINE_MOVE_ENTER.png', 'en': './assets/en/handler/SUBMARINE_MOVE_ENTER.png', 'jp': './assets/jp/handler/SUBMARINE_MOVE_ENTER.png', 'tw': './assets/tw/handler/SUBMARINE_MOVE_ENTER.png'}) SUBMARINE_VIEW_OFF = Button(area={'cn': (1140, 435, 1170, 468), 'en': (1140, 435, 1170, 468), 'jp': (1140, 435, 1170, 468), 'tw': (1140, 435, 1170, 468)}, color={'cn': (156, 156, 158), 'en': (156, 156, 158), 'jp': (156, 156, 158), 'tw': (156, 156, 158)}, button={'cn': (1140, 435, 1170, 468), 'en': (1140, 435, 1170, 468), 'jp': (1140, 435, 1170, 468), 'tw': (1140, 435, 1170, 468)}, file={'cn': './assets/cn/handler/SUBMARINE_VIEW_OFF.png', 'en': './assets/en/handler/SUBMARINE_VIEW_OFF.png', 'jp': './assets/jp/handler/SUBMARINE_VIEW_OFF.png', 'tw': './assets/tw/handler/SUBMARINE_VIEW_OFF.png'}) SUBMARINE_VIEW_ON = Button(area={'cn': (1140, 435, 1170, 468), 'en': (1140, 435, 1170, 468), 'jp': (1140, 435, 1170, 468), 'tw': (1140, 435, 1170, 468)}, color={'cn': (177, 178, 179), 'en': (177, 178, 179), 'jp': (177, 178, 179), 'tw': (177, 178, 179)}, button={'cn': (1140, 435, 1170, 468), 'en': (1140, 435, 1170, 468), 'jp': (1140, 435, 1170, 468), 'tw': (1140, 435, 1170, 468)}, file={'cn': './assets/cn/handler/SUBMARINE_VIEW_ON.png', 'en': './assets/en/handler/SUBMARINE_VIEW_ON.png', 'jp': './assets/jp/handler/SUBMARINE_VIEW_ON.png', 'tw': './assets/tw/handler/SUBMARINE_VIEW_ON.png'}) +USER_AGREEMENT_CONFIRM = Button(area={'cn': (709, 526, 742, 542), 'en': (709, 526, 742, 542), 'jp': (709, 526, 742, 542), 'tw': (709, 526, 742, 542)}, color={'cn': (151, 216, 243), 'en': (151, 216, 243), 'jp': (151, 216, 243), 'tw': (151, 216, 243)}, button={'cn': (709, 526, 742, 542), 'en': (709, 526, 742, 542), 'jp': (709, 526, 742, 542), 'tw': (709, 526, 742, 542)}, file={'cn': './assets/cn/handler/USER_AGREEMENT_CONFIRM.png', 'en': './assets/en/handler/USER_AGREEMENT_CONFIRM.png', 'jp': './assets/jp/handler/USER_AGREEMENT_CONFIRM.png', 'tw': './assets/tw/handler/USER_AGREEMENT_CONFIRM.png'}) USE_DATA_KEY = Button(area={'cn': (688, 316, 781, 338), 'en': (759, 323, 889, 342), 'jp': (625, 318, 742, 344), 'tw': (688, 316, 782, 338)}, color={'cn': (165, 154, 99), 'en': (170, 160, 94), 'jp': (122, 130, 121), 'tw': (159, 150, 97)}, button={'cn': (688, 316, 781, 338), 'en': (759, 323, 889, 342), 'jp': (625, 318, 742, 344), 'tw': (688, 316, 782, 338)}, file={'cn': './assets/cn/handler/USE_DATA_KEY.png', 'en': './assets/en/handler/USE_DATA_KEY.png', 'jp': './assets/jp/handler/USE_DATA_KEY.png', 'tw': './assets/tw/handler/USE_DATA_KEY.png'}) USE_DATA_KEY_NOTIFIED = Button(area={'cn': (770, 434, 793, 456), 'en': (820, 440, 837, 456), 'jp': (686, 430, 709, 456), 'tw': (782, 440, 799, 456)}, color={'cn': (41, 44, 49), 'en': (33, 40, 41), 'jp': (33, 44, 49), 'tw': (34, 40, 48)}, button={'cn': (770, 434, 793, 456), 'en': (820, 440, 837, 456), 'jp': (686, 430, 709, 456), 'tw': (782, 440, 799, 456)}, file={'cn': './assets/cn/handler/USE_DATA_KEY_NOTIFIED.png', 'en': './assets/en/handler/USE_DATA_KEY_NOTIFIED.png', 'jp': './assets/jp/handler/USE_DATA_KEY_NOTIFIED.png', 'tw': './assets/tw/handler/USE_DATA_KEY_NOTIFIED.png'}) -USER_AGREEMENT_CONFIRM = Button(area={'cn': (709, 526, 742, 542), 'en': (709, 526, 742, 542), 'jp': (709, 526, 742, 542), 'tw': (709, 526, 742, 542)}, color={'cn': (151, 216, 243), 'en': (151, 216, 243), 'jp': (151, 216, 243), 'tw': (151, 216, 243)}, button={'cn': (709, 526, 742, 542), 'en': (709, 526, 742, 542), 'jp': (709, 526, 742, 542), 'tw': (709, 526, 742, 542)}, file={'cn': './assets/cn/handler/USER_AGREEMENT_CONFIRM.png', 'en': './assets/en/handler/USER_AGREEMENT_CONFIRM.png', 'jp': './assets/jp/handler/USER_AGREEMENT_CONFIRM.png', 'tw': './assets/tw/handler/USER_AGREEMENT_CONFIRM.png'}) VOTE_CANCEL = Button(area={'cn': (404, 483, 576, 539), 'en': (413, 489, 566, 532), 'jp': (407, 483, 577, 538), 'tw': (404, 483, 576, 539)}, color={'cn': (167, 169, 171), 'en': (169, 170, 172), 'jp': (163, 164, 166), 'tw': (167, 169, 171)}, button={'cn': (404, 483, 576, 539), 'en': (413, 489, 566, 532), 'jp': (407, 483, 577, 538), 'tw': (404, 483, 576, 539)}, file={'cn': './assets/cn/handler/VOTE_CANCEL.png', 'en': './assets/en/handler/VOTE_CANCEL.png', 'jp': './assets/jp/handler/VOTE_CANCEL.png', 'tw': './assets/cn/handler/VOTE_CANCEL.png'}) diff --git a/module/handler/fast_forward.py b/module/handler/fast_forward.py index ccc6c7a88a..f8cbbf85ed 100644 --- a/module/handler/fast_forward.py +++ b/module/handler/fast_forward.py @@ -99,6 +99,7 @@ class FastForwardHandler(AutoSearchHandler): > 12-1 > 12-2 > 12-3 > 12-4 > 13-1 > 13-2 > 13-3 > 13-4 > 14-1 > 14-2 > 14-3 > 14-4 + > 15-1 > 15-2 > 15-3 > 15-4 """, 'A1 > A2 > A3', 'B1 > B2 > B3', diff --git a/module/handler/strategy.py b/module/handler/strategy.py index e08664e259..cc1d963bf0 100644 --- a/module/handler/strategy.py +++ b/module/handler/strategy.py @@ -193,7 +193,7 @@ def strategy_submarine_move_cancel(self, skip_first_screenshot=True): skip_first_screenshot = False else: self.device.screenshot() - + if self.appear_then_click(SUBMARINE_MOVE_CANCEL, offset=(20, 20), interval=5): pass if self.handle_popup_confirm('SUBMARINE_MOVE'): @@ -215,7 +215,6 @@ def strategy_get_mob_move_remain(self): in: STRATEGY_OPENED out: STRATEGY_OPENED """ - self.device.screenshot() if self.appear(MOB_MOVE_2, offset=(120, 120)): return 2 elif self.appear(MOB_MOVE_1, offset=(120, 120)): @@ -236,13 +235,13 @@ def strategy_mob_move_enter(self, skip_first_screenshot=True): else: self.device.screenshot() + if self.appear(MOB_MOVE_CANCEL, offset=(20, 20)): + break + if self.appear_then_click(MOB_MOVE_1, offset=(120, 120), interval=5): continue if self.appear_then_click(MOB_MOVE_2, offset=(120, 120), interval=5): continue - - if self.appear(MOB_MOVE_CANCEL, offset=(20, 20)): - break def strategy_mob_move_cancel(self, skip_first_screenshot=True): """ @@ -256,10 +255,10 @@ def strategy_mob_move_cancel(self, skip_first_screenshot=True): skip_first_screenshot = False else: self.device.screenshot() - - if self.appear_then_click(MOB_MOVE_CANCEL, offset=(20, 20), interval=5): - pass - if self.appear(MOB_MOVE_1, offset=(120, 120))\ + if self.appear(MOB_MOVE_1, offset=(120, 120)) \ or self.appear(MOB_MOVE_2, offset=(120, 120)): - break \ No newline at end of file + break + + if self.appear_then_click(MOB_MOVE_CANCEL, offset=(20, 20), interval=5): + continue From d512c4dadf29b41d4c4a818b0f842ef71a7d5695 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 20 Apr 2024 02:50:12 +0800 Subject: [PATCH 17/39] Opt: Remove meaningless sleep from stone age --- module/guild/operations.py | 2 +- module/map/camera.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/module/guild/operations.py b/module/guild/operations.py index 6be3bc40af..0df401e7d7 100644 --- a/module/guild/operations.py +++ b/module/guild/operations.py @@ -202,7 +202,7 @@ def _guild_operations_dispatch_swipe(self, forward=True, skip_first_screenshot=T p1, p2 = random_rectangle_vector( direction_vector, box=detection_area, random_range=(-50, -50, 50, 50), padding=20) self.device.drag(p1, p2, segments=2, shake=(0, 25), point_random=(0, 0, 0, 0), shake_random=(0, -5, 0, 5)) - self.device.sleep(0.3) + # self.device.sleep(0.3) logger.warning('Failed to find active operation dispatch') return False diff --git a/module/map/camera.py b/module/map/camera.py index 62174f19f2..2e9660322d 100644 --- a/module/map/camera.py +++ b/module/map/camera.py @@ -57,7 +57,8 @@ def _map_swipe(self, vector, box=(123, 159, 1175, 628)): vector = distance * vector vector = -vector self.device.swipe_vector(vector, name=name, box=box, whitelist_area=whitelist, blacklist_area=blacklist) - self.device.sleep(0.3) + # Donno why initial commit have a sleep here + # self.device.sleep(0.3) self.update() return True else: From 24326309ed02b5f4ec44ec479a8bf5e06705cb3b Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 20 Apr 2024 02:51:02 +0800 Subject: [PATCH 18/39] Refactor: Cleaner loops in _mob_move --- campaign/campaign_main/campaign_15_base.py | 96 ++++++++++++---------- 1 file changed, 52 insertions(+), 44 deletions(-) diff --git a/campaign/campaign_main/campaign_15_base.py b/campaign/campaign_main/campaign_15_base.py index c9350b4b67..3e3d3897d1 100644 --- a/campaign/campaign_main/campaign_15_base.py +++ b/campaign/campaign_main/campaign_15_base.py @@ -36,6 +36,10 @@ def map_data_init(self, map_): _ = ASSETS.ui_mask ASSETS.ui_mask = MASK_MAP_UI_W15.image + def _map_swipe(self, vector, box=(239, 159, 1175, 628)): + # Left border to 239, avoid swiping on support fleet + return super()._map_swipe(vector, box=box) + def mob_movable(self, location, target): """ Check if mob is movable from location to target. @@ -96,49 +100,54 @@ def _mob_move(self, location, target): """ location = location_ensure(location) target = location_ensure(target) - moved = False + + view_target = SelectedGrids([self.map[location], self.map[target]]) \ + .sort_by_camera_distance(self.camera)[1] + self.in_sight(view_target) + origin_grid = self.convert_global_to_local(location) + origin_grid.__str__ = location + target_grid = self.convert_global_to_local(target) + target_grid.__str__ = target + + logger.info('Select mob to move') + skip_first_screenshot = True + interval = Timer(2, count=4) while 1: - view_target = SelectedGrids([self.map[location], self.map[target]]) \ - .sort_by_camera_distance(self.camera)[1] - self.in_sight(view_target) - grid = self.convert_global_to_local(location) - grid.__str__ = location - grid_2 = self.convert_global_to_local(target) - grid_2.__str__ = target - - confirm_timer = Timer(1) - click_timeout = Timer(2, count=6).start() - - while 1: + if skip_first_screenshot: + skip_first_screenshot = False + else: self.device.screenshot() - if self.appear(STRATEGY_OPENED, offset=(120, 120)): - moved = True - break - if self.handle_popup_confirm('MOB_MOVE'): - confirm_timer.reset() - continue - else: - self.view.update(image=self.device.image) - - if not grid.predict_mob_move_icon(): - if confirm_timer.reached(): - self.device.click(grid) - confirm_timer.reset() - continue - if confirm_timer.reached(): - self.device.click(grid_2) - confirm_timer.reset() - - if click_timeout.reached(): - logger.warning('Click timeout. Retrying.') - self.predict() - self.ensure_edge_insight(skip_first_update=False) - break - - if moved: + + # End + if self.is_in_strategy_mob_move(): + self.view.update(image=self.device.image) + if origin_grid.predict_mob_move_icon(): break + # Click + if interval.reached() and self.is_in_strategy_mob_move(): + self.device.click(origin_grid) + interval.reset() + continue + + logger.info('Select target grid') + skip_first_screenshot = True + interval = Timer(2, count=4) + while 1: + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() - return moved + # End + if self.appear(STRATEGY_OPENED, offset=(120, 120)): + break + # Click + if interval.reached() and self.is_in_strategy_mob_move(): + self.device.click(target_grid) + interval.reset() + continue + if self.handle_popup_confirm('MOB_MOVE'): + continue def _mob_move_info_change(self, location, target): location = location_ensure(location) @@ -177,9 +186,8 @@ def mob_move(self, location, target): self.strategy_close() return False self.strategy_mob_move_enter() - result = self._mob_move(location, target) + self._mob_move(location, target) self.strategy_close(skip_first_screenshot=False) - if result: - self._mob_move_info_change(location, target) - self.map.show() - return result + + self._mob_move_info_change(location, target) + self.map.show() From 53aef7e99233dde97bb9a8476e0f817a58443997 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 20 Apr 2024 02:56:03 +0800 Subject: [PATCH 19/39] Opt: Handle GET_ITEMS before info_bar to be one screenshot faster --- module/shop/clerk.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/shop/clerk.py b/module/shop/clerk.py index 3ab48e7a64..9653febf12 100644 --- a/module/shop/clerk.py +++ b/module/shop/clerk.py @@ -285,11 +285,11 @@ def shop_buy_execute(self, item, skip_first_screenshot=True): if self.handle_retirement(): self.interval_reset(BACK_ARROW) continue - if self.handle_info_bar(): + if self.shop_obstruct_handle(): self.interval_reset(BACK_ARROW) success = True continue - if self.shop_obstruct_handle(): + if self.info_bar_count(): self.interval_reset(BACK_ARROW) success = True continue From ba47dcce1aaadf846867d90fa0f75401e0045109 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sat, 20 Apr 2024 03:01:32 +0800 Subject: [PATCH 20/39] Opt: Use MAIN_GOTO_FLEET instead of MAIN_GOTO_CAMPAIGN for faster switches with info_bar --- module/ui/page.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/module/ui/page.py b/module/ui/page.py index d07ad0f1ea..efc9c0c874 100644 --- a/module/ui/page.py +++ b/module/ui/page.py @@ -3,8 +3,6 @@ from module.ui.assets import * from module.raid.assets import * -MAIN_CHECK = MAIN_GOTO_CAMPAIGN - class Page: # Key: str, page name like "page_main" @@ -71,6 +69,11 @@ def link(self, button, destination): self.links[destination] = button +""" +Define UI pages +""" +# Use MAIN_GOTO_FLEET instead of MAIN_GOTO_CAMPAIGN for faster switches with info_bar +MAIN_CHECK = MAIN_GOTO_FLEET # Main page_main = Page(MAIN_CHECK) page_campaign_menu = Page(CAMPAIGN_MENU_CHECK) From 250cf4e1a208d40052d8325ce163d41fce0fbbb1 Mon Sep 17 00:00:00 2001 From: Air111 <54128005+Air111@users.noreply.github.com> Date: Mon, 22 Apr 2024 23:11:45 +0800 Subject: [PATCH 21/39] Fix: rename equipment functions (#3665) --- module/retire/enhancement.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/module/retire/enhancement.py b/module/retire/enhancement.py index 415652a191..e96177e98d 100644 --- a/module/retire/enhancement.py +++ b/module/retire/enhancement.py @@ -127,7 +127,7 @@ def state_enhance_check(): logger.info( 'Reached maximum number to check, exiting current category') return "state_enhance_exit" - if not self.equip_side_navbar_ensure(bottom=4): + if not self.ship_side_navbar_ensure(bottom=4): return "state_enhance_check" self.wait_until_appear(ENHANCE_RECOMMEND, offset=( @@ -189,7 +189,7 @@ def state_enhance_fail(): return "state_enhance_confirm" # Try to swipe to next - if self.equip_view_next(check_button=ENHANCE_RECOMMEND): + if self.ship_view_next(check_button=ENHANCE_RECOMMEND): if not need_to_skip: nonlocal ship_count ship_count -= 1 @@ -221,7 +221,7 @@ def state_enhance_exit(): # Avoid too_many_click exception caused by multiple tries without material if state_list[-2:] == ["state_enhance_recommend", "state_enhance_fail"]: if len(self.device.click_record): - while self.device.click_record[-1] in ['ENHANCE_RECOMMEND', 'EQUIP_SWIPE']: + while self.device.click_record[-1] in ['ENHANCE_RECOMMEND', 'SHIP_SWIPE']: self.device.click_record.pop() state_list.clear() state_list.append(state) From 41075b4a52dd403602e65dce317bc60804d12d24 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Mon, 22 Apr 2024 23:16:39 +0800 Subject: [PATCH 22/39] Fix: W15 optimization (#3660) * Fix: force battle function choice for 15-1/15-2 when clear all * Add: battle strategy when missing support fleet in W15 * Opt: open strategy once when checking mob move * Opt: reuse strategy_get_mob_move_remain() --- campaign/campaign_main/campaign_15_1.py | 19 +++++++++++++++---- campaign/campaign_main/campaign_15_2.py | 19 +++++++++++++++---- campaign/campaign_main/campaign_15_3.py | 8 ++++---- campaign/campaign_main/campaign_15_4.py | 22 +++++++++++----------- campaign/campaign_main/campaign_15_base.py | 11 +++++++++++ module/handler/strategy.py | 14 ++++++++------ 6 files changed, 64 insertions(+), 29 deletions(-) diff --git a/campaign/campaign_main/campaign_15_1.py b/campaign/campaign_main/campaign_15_1.py index 8e9f7f093b..f098e6171b 100644 --- a/campaign/campaign_main/campaign_15_1.py +++ b/campaign/campaign_main/campaign_15_1.py @@ -65,14 +65,25 @@ class Config(ConfigBase): class Campaign(CampaignBase): MAP = MAP + def battle_function(self): + if self.config.MAP_CLEAR_ALL_THIS_TIME \ + and self.battle_count == 0 and not self.map_is_clear_mode: + func = self.FUNCTION_NAME_BASE + str(self.battle_count) + logger.info(f'Using function: {func}') + func = self.__getattribute__(func) + result = func() + return result + + return super().battle_function() + def battle_0(self): - if not self.map_is_clear_mode: + if not self.map_is_clear_mode and self.map_has_mob_move: self.mob_move(B3, C3) self.clear_chosen_enemy(B1) return True - else: - if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): - return True + + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True return self.battle_default() diff --git a/campaign/campaign_main/campaign_15_2.py b/campaign/campaign_main/campaign_15_2.py index cfead58218..a91f7d0785 100644 --- a/campaign/campaign_main/campaign_15_2.py +++ b/campaign/campaign_main/campaign_15_2.py @@ -66,15 +66,26 @@ class Config(ConfigBase): class Campaign(CampaignBase): MAP = MAP + def battle_function(self): + if self.config.MAP_CLEAR_ALL_THIS_TIME \ + and self.battle_count == 0 and not self.map_is_clear_mode: + func = self.FUNCTION_NAME_BASE + str(self.battle_count) + logger.info(f'Using function: {func}') + func = self.__getattribute__(func) + result = func() + return result + + return super().battle_function() + def battle_0(self): - if not self.map_is_clear_mode: + if not self.map_is_clear_mode and self.map_has_mob_move: self.mob_move(I6, I7) self.mob_move(I7, H7) self.clear_chosen_enemy(G7) return True - else: - if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): - return True + + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True return self.battle_default() diff --git a/campaign/campaign_main/campaign_15_3.py b/campaign/campaign_main/campaign_15_3.py index dc9cced523..1797572d7b 100644 --- a/campaign/campaign_main/campaign_15_3.py +++ b/campaign/campaign_main/campaign_15_3.py @@ -81,13 +81,13 @@ def battle_function(self): return super().battle_function() def battle_0(self): - if not self.map_is_clear_mode: + if not self.map_is_clear_mode and self.map_has_mob_move: self.mob_move(B3, B4) self.clear_chosen_enemy(A1) return True - else: - if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): - return True + + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True return self.battle_default() diff --git a/campaign/campaign_main/campaign_15_4.py b/campaign/campaign_main/campaign_15_4.py index 5899c328c4..3bbd1153d4 100644 --- a/campaign/campaign_main/campaign_15_4.py +++ b/campaign/campaign_main/campaign_15_4.py @@ -90,28 +90,27 @@ def battle_function(self): return super().battle_function() def battle_0(self): - if not self.map_is_clear_mode: - self.clear_chosen_enemy(A1) + if not self.map_is_clear_mode and self.map_has_mob_move: + self.mob_move(J8, J7) + self.clear_chosen_enemy(K9) + return True + + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): return True - else: - if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): - return True return self.battle_default() def battle_1(self): if not self.map_is_clear_mode: - self.mob_move(J8, J7) - self.clear_chosen_enemy(K9) + self.clear_chosen_enemy(A1) + return True + + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): return True - else: - if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): - return True return self.battle_default() def battle_2(self): - self.pick_up_ammo() if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): return True @@ -123,6 +122,7 @@ def battle_3(self): self.fleet_1.switch_to() return True else: + self.pick_up_ammo() self.clear_chosen_enemy(H5, expected='siren') return True diff --git a/campaign/campaign_main/campaign_15_base.py b/campaign/campaign_main/campaign_15_base.py index 3e3d3897d1..a18f271a93 100644 --- a/campaign/campaign_main/campaign_15_base.py +++ b/campaign/campaign_main/campaign_15_base.py @@ -36,6 +36,17 @@ def map_data_init(self, map_): _ = ASSETS.ui_mask ASSETS.ui_mask = MASK_MAP_UI_W15.image + map_has_mob_move = False + + def strategy_set_execute(self, formation_index=None, sub_view=None, sub_hunt=None): + super().strategy_set_execute( + formation_index=formation_index, + sub_view=sub_view, + sub_hunt=sub_hunt, + ) + self.map_has_mob_move = (self.strategy_get_mob_move_remain() > 0) + logger.attr("Map has mob move", self.map_has_mob_move) + def _map_swipe(self, vector, box=(239, 159, 1175, 628)): # Left border to 239, avoid swiping on support fleet return super()._map_swipe(vector, box=box) diff --git a/module/handler/strategy.py b/module/handler/strategy.py index cc1d963bf0..7462a72eb8 100644 --- a/module/handler/strategy.py +++ b/module/handler/strategy.py @@ -20,6 +20,8 @@ submarine_view.add_status('on', check_button=SUBMARINE_VIEW_ON) submarine_view.add_status('off', check_button=SUBMARINE_VIEW_OFF) +MOB_MOVE_OFFSET = (120, 120) + class StrategyHandler(InfoHandler): fleet_1_formation_fixed = False @@ -215,9 +217,9 @@ def strategy_get_mob_move_remain(self): in: STRATEGY_OPENED out: STRATEGY_OPENED """ - if self.appear(MOB_MOVE_2, offset=(120, 120)): + if self.appear(MOB_MOVE_2, offset=MOB_MOVE_OFFSET): return 2 - elif self.appear(MOB_MOVE_1, offset=(120, 120)): + elif self.appear(MOB_MOVE_1, offset=MOB_MOVE_OFFSET): return 1 else: return 0 @@ -238,9 +240,9 @@ def strategy_mob_move_enter(self, skip_first_screenshot=True): if self.appear(MOB_MOVE_CANCEL, offset=(20, 20)): break - if self.appear_then_click(MOB_MOVE_1, offset=(120, 120), interval=5): + if self.appear_then_click(MOB_MOVE_1, offset=MOB_MOVE_OFFSET, interval=5): continue - if self.appear_then_click(MOB_MOVE_2, offset=(120, 120), interval=5): + if self.appear_then_click(MOB_MOVE_2, offset=MOB_MOVE_OFFSET, interval=5): continue def strategy_mob_move_cancel(self, skip_first_screenshot=True): @@ -256,8 +258,8 @@ def strategy_mob_move_cancel(self, skip_first_screenshot=True): else: self.device.screenshot() - if self.appear(MOB_MOVE_1, offset=(120, 120)) \ - or self.appear(MOB_MOVE_2, offset=(120, 120)): + if self.appear(MOB_MOVE_1, offset=MOB_MOVE_OFFSET) \ + or self.appear(MOB_MOVE_2, offset=MOB_MOVE_OFFSET): break if self.appear_then_click(MOB_MOVE_CANCEL, offset=(20, 20), interval=5): From ccf51f682940325d3fab8c8c890ce462a8b0277a Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Tue, 23 Apr 2024 00:58:29 +0800 Subject: [PATCH 23/39] Chore: Re-arrange requirements list --- deploy/AidLux/requirements_generator.py | 1 + deploy/docker/requirements.txt | 57 ++++++++++++++--------- deploy/docker/requirements_generator.py | 6 ++- deploy/git.py | 5 ++ deploy/headless/requirements.txt | 57 ++++++++++++++--------- deploy/headless/requirements_generator.py | 6 ++- requirements-in.txt | 57 ++++++++++++++--------- 7 files changed, 118 insertions(+), 71 deletions(-) diff --git a/deploy/AidLux/requirements_generator.py b/deploy/AidLux/requirements_generator.py index 14ed0f642b..041a37bb5b 100644 --- a/deploy/AidLux/requirements_generator.py +++ b/deploy/AidLux/requirements_generator.py @@ -45,6 +45,7 @@ def write_file(file, data): def aidlux_requirements_generate(requirements_in='requirements-in.txt'): logger.info('aidlux_requirements_generate') requirements = read_file(requirements_in) + requirements = dict(sorted(requirements.items())) for aidlux in iter_version(): logger.info(f'Generate requirements for AidLux {aidlux}') pre_installed = read_file(os.path.join(BASE_FOLDER, f'./{aidlux}/pre-installed.txt')) diff --git a/deploy/docker/requirements.txt b/deploy/docker/requirements.txt index 43fff96cf3..bdddcf10ac 100644 --- a/deploy/docker/requirements.txt +++ b/deploy/docker/requirements.txt @@ -1,31 +1,42 @@ -adbutils==0.11.0 -aiofiles -anyio==1.3.1 -av==10.0.0 -cnocr==1.2.2 -imageio==2.27.0 -inflection -jellyfish==0.11.2 -lz4 -mxnet==1.6.0 +# Image processing numpy==1.16.6 -onepush==1.3.0 -opencv-python-headless +scipy==1.4.1 pillow -prettytable==2.2.1 +opencv-python-headless +imageio==2.27.0 + +# Device connection +adbutils==0.11.0 +uiautomator2==2.16.17 +uiautomator2cache==0.3.0.1 +wrapt==1.13.1 +retrying +lz4 +av==10.0.0 psutil==5.9.3 + +# Utils +rich==11.2.0 +tqdm +jellyfish==0.11.2 +pyyaml +inflection pydantic +aiofiles +prettytable==2.2.1 +anyio==1.3.1 + +# Pushing +onepush==1.3.0 pypresence==4.2.1 + +# Ocr +cnocr==1.2.2 +mxnet==1.6.0 + +# Webui pywebio==1.6.2 -pyyaml -pyzmq==22.3.0 -retrying -rich==11.2.0 -scipy==1.4.1 starlette==0.14.2 -tqdm -uiautomator2==2.16.17 -uiautomator2cache==0.3.0.1 uvicorn[standard]==0.17.6 -wrapt==1.13.1 -zerorpc==0.6.3 \ No newline at end of file +zerorpc==0.6.3 +pyzmq==22.3.0 \ No newline at end of file diff --git a/deploy/docker/requirements_generator.py b/deploy/docker/requirements_generator.py index 84daab3c80..0e13db8d91 100644 --- a/deploy/docker/requirements_generator.py +++ b/deploy/docker/requirements_generator.py @@ -10,6 +10,8 @@ def read_file(file): out = {} with open(file, 'r', encoding='utf-8') as f: for line in f.readlines(): + if not line.strip(): + continue res = [s.strip() for s in line.split('==')] if len(res) > 1: name, version = res @@ -29,7 +31,9 @@ def write_file(file, data): lines.append(str(name)) with open(file, 'w', encoding='utf-8', newline='') as f: - f.write('\n'.join(lines)) + text = '\n'.join(lines) + text = text.replace('#', '\n#').strip() + f.write(text) def docker_requirements_generate(requirements_in='requirements-in.txt'): diff --git a/deploy/git.py b/deploy/git.py index aa4da24f2d..83572e769b 100644 --- a/deploy/git.py +++ b/deploy/git.py @@ -108,3 +108,8 @@ def git_install(self): ssl_verify=self.SSLVerify, keep_changes=self.KeepLocalChanges, ) + + +if __name__ == '__main__': + self = GitManager() + self.goc_client.get_status() \ No newline at end of file diff --git a/deploy/headless/requirements.txt b/deploy/headless/requirements.txt index c563a82b74..279c39778c 100644 --- a/deploy/headless/requirements.txt +++ b/deploy/headless/requirements.txt @@ -1,31 +1,42 @@ -adbutils==0.11.0 -aiofiles==23.1.0 -anyio==1.3.1 -av==10.0.0 -cnocr==1.2.2 -imageio==2.27.0 -inflection==0.5.1 -jellyfish==0.11.2 -lz4==4.3.2 -mxnet==1.6.0 +# Image processing numpy==1.17.4 -onepush==1.2.0 -opencv-python-headless==4.7.0.72 +scipy==1.4.1 pillow==9.5.0 -prettytable==2.2.1 +opencv-python-headless==4.7.0.72 +imageio==2.27.0 + +# Device connection +adbutils==0.11.0 +uiautomator2==2.16.17 +uiautomator2cache==0.3.0.1 +wrapt==1.15.0 +retrying==1.3.4 +lz4==4.3.2 +av==10.0.0 psutil==5.9.3 + +# Utils +rich==11.2.0 +tqdm==4.65.0 +jellyfish==0.11.2 +pyyaml==6.0 +inflection==0.5.1 pydantic==1.10.9 +aiofiles==23.1.0 +prettytable==2.2.1 +anyio==1.3.1 + +# Pushing +onepush==1.2.0 pypresence==4.2.1 + +# Ocr +cnocr==1.2.2 +mxnet==1.6.0 + +# Webui pywebio==1.6.2 -pyyaml==6.0 -pyzmq==22.3.0 -retrying==1.3.4 -rich==11.2.0 -scipy==1.4.1 starlette==0.14.2 -tqdm==4.65.0 -uiautomator2==2.16.17 -uiautomator2cache==0.3.0.1 uvicorn[standard]==0.17.6 -wrapt==1.15.0 -zerorpc==0.6.3 \ No newline at end of file +zerorpc==0.6.3 +pyzmq==22.3.0 \ No newline at end of file diff --git a/deploy/headless/requirements_generator.py b/deploy/headless/requirements_generator.py index bacf1ec7ac..5282fee3d6 100644 --- a/deploy/headless/requirements_generator.py +++ b/deploy/headless/requirements_generator.py @@ -10,6 +10,8 @@ def read_file(file): out = {} with open(file, 'r', encoding='utf-8') as f: for line in f.readlines(): + if not line.strip(): + continue res = [s.strip() for s in line.split('==')] if len(res) > 1: name, version = res @@ -29,7 +31,9 @@ def write_file(file, data): lines.append(str(name)) with open(file, 'w', encoding='utf-8', newline='') as f: - f.write('\n'.join(lines)) + text = '\n'.join(lines) + text = text.replace('#', '\n#').strip() + f.write(text) def headless_requirements_generate(requirements_in='requirements-in.txt'): diff --git a/requirements-in.txt b/requirements-in.txt index 0981863097..fdeee43121 100644 --- a/requirements-in.txt +++ b/requirements-in.txt @@ -1,32 +1,43 @@ -adbutils==0.11.0 -aiofiles -alas-webapp==0.3.7 -anyio==1.3.1 -av==10.0.0 -cnocr==1.2.2 -imageio==2.27.0 -inflection -jellyfish==0.11.2 -lz4 -mxnet==1.6.0 +# Image processing numpy==1.16.6 -onepush==1.3.0 -opencv-python +scipy==1.4.1 pillow -prettytable==2.2.1 +opencv-python +imageio==2.27.0 + +# Device connection +adbutils==0.11.0 +uiautomator2==2.16.17 +uiautomator2cache==0.3.0.1 +wrapt==1.13.1 +retrying +lz4 +av==10.0.0 psutil==5.9.3 + +# Utils +rich==11.2.0 +tqdm +jellyfish==0.11.2 +pyyaml +inflection pydantic +aiofiles +prettytable==2.2.1 +anyio==1.3.1 + +# Pushing +onepush==1.3.0 pypresence==4.2.1 + +# Ocr +cnocr==1.2.2 +mxnet==1.6.0 + +# Webui pywebio==1.6.2 -pyyaml -pyzmq==22.3.0 -retrying -rich==11.2.0 -scipy==1.4.1 starlette==0.14.2 -tqdm -uiautomator2==2.16.17 -uiautomator2cache==0.3.0.1 uvicorn[standard]==0.17.6 -wrapt==1.13.1 +alas-webapp==0.3.7 zerorpc==0.6.3 +pyzmq==22.3.0 From c9950983d5fb70506f505e4e2a8418e93cfcf9be Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Tue, 23 Apr 2024 01:11:41 +0800 Subject: [PATCH 24/39] Dep: Downgrade to pycryptodome==3.9.9 since old pip cannot download the wheels >=3.10 --- deploy/AidLux/0.92/requirements.txt | 1 + deploy/docker/requirements.txt | 1 + deploy/headless/requirements.txt | 3 ++- deploy/headless/requirements_generator.py | 2 +- requirements-in.txt | 1 + requirements.txt | 2 +- 6 files changed, 7 insertions(+), 3 deletions(-) diff --git a/deploy/AidLux/0.92/requirements.txt b/deploy/AidLux/0.92/requirements.txt index f6ad33c258..313df0b7b6 100644 --- a/deploy/AidLux/0.92/requirements.txt +++ b/deploy/AidLux/0.92/requirements.txt @@ -13,6 +13,7 @@ onepush==1.3.0 pillow prettytable==2.2.1 psutil==5.9.3 +pycryptodome==3.10.4 pydantic pypresence==4.2.1 pywebio==1.6.2 diff --git a/deploy/docker/requirements.txt b/deploy/docker/requirements.txt index bdddcf10ac..27ad150990 100644 --- a/deploy/docker/requirements.txt +++ b/deploy/docker/requirements.txt @@ -28,6 +28,7 @@ anyio==1.3.1 # Pushing onepush==1.3.0 +pycryptodome==3.9.9 pypresence==4.2.1 # Ocr diff --git a/deploy/headless/requirements.txt b/deploy/headless/requirements.txt index 279c39778c..b10cef4d5a 100644 --- a/deploy/headless/requirements.txt +++ b/deploy/headless/requirements.txt @@ -27,7 +27,8 @@ prettytable==2.2.1 anyio==1.3.1 # Pushing -onepush==1.2.0 +onepush==1.3.0 +pycryptodome==3.9.9 pypresence==4.2.1 # Ocr diff --git a/deploy/headless/requirements_generator.py b/deploy/headless/requirements_generator.py index 5282fee3d6..9c3c1ddbde 100644 --- a/deploy/headless/requirements_generator.py +++ b/deploy/headless/requirements_generator.py @@ -45,7 +45,7 @@ def headless_requirements_generate(requirements_in='requirements-in.txt'): 'inflection': '0.5.1', 'lz4': '4.3.2', 'numpy': '1.17.4', - 'onepush': '1.2.0', + # 'onepush': '1.2.0', 'opencv-python': { 'name': 'opencv-python-headless', 'version': '4.7.0.72' diff --git a/requirements-in.txt b/requirements-in.txt index fdeee43121..fd69eec2e7 100644 --- a/requirements-in.txt +++ b/requirements-in.txt @@ -28,6 +28,7 @@ anyio==1.3.1 # Pushing onepush==1.3.0 +pycryptodome==3.9.9 pypresence==4.2.1 # Ocr diff --git a/requirements.txt b/requirements.txt index a9c4492bdb..87d8e66dea 100644 --- a/requirements.txt +++ b/requirements.txt @@ -57,7 +57,7 @@ progress==1.6 # via uiautomator2 psutil==5.9.3 # via -r requirements-in.txt py==1.10.0 # via retry pycparser==2.21 # via cffi -pycryptodome==3.20.0 # via onepush +pycryptodome==3.9.9 # via onepush pydantic==1.10.2 # via -r requirements-in.txt pyelftools==0.27 # via apkutils2 pygments==2.12.0 # via rich From 0264e3f3479ea6fdcd1b6511a43255eeb88c9567 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Tue, 23 Apr 2024 19:39:13 +0800 Subject: [PATCH 25/39] Opt: mob move strategy in 15-4 (#3672) --- campaign/campaign_main/campaign_15_4.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/campaign/campaign_main/campaign_15_4.py b/campaign/campaign_main/campaign_15_4.py index 3bbd1153d4..a7690a4936 100644 --- a/campaign/campaign_main/campaign_15_4.py +++ b/campaign/campaign_main/campaign_15_4.py @@ -91,7 +91,7 @@ def battle_function(self): def battle_0(self): if not self.map_is_clear_mode and self.map_has_mob_move: - self.mob_move(J8, J7) + self.mob_move(J8, K8) self.clear_chosen_enemy(K9) return True From 6f030373f6f03ff2e6c1a9cdf2f8cc0c8e718db5 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Wed, 24 Apr 2024 09:03:49 +0800 Subject: [PATCH 26/39] Upd: asset FLEET_DETAIL_CHECK (#3674) --- assets/cn/equipment/FLEET_DETAIL_CHECK.png | Bin 8969 -> 10170 bytes assets/en/equipment/FLEET_DETAIL_CHECK.png | Bin 8969 -> 13190 bytes assets/jp/equipment/FLEET_DETAIL_CHECK.png | Bin 8969 -> 9902 bytes assets/tw/equipment/FLEET_DETAIL_CHECK.png | Bin 8969 -> 10367 bytes module/equipment/assets.py | 2 +- 5 files changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/cn/equipment/FLEET_DETAIL_CHECK.png b/assets/cn/equipment/FLEET_DETAIL_CHECK.png index 73a637f175bc0e3c16f437d4b5cb07e78cf64ab7..0bfc387c443aa7247dd28b8527713c61a1e38659 100644 GIT binary patch literal 10170 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 BKKlRw literal 8969 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 Y=fK|^LXX9in1lm94fL(rd-SXS16)xP9{>OV literal 8969 zcmeHLdsLcNwzuuvnaNBN*EDx-C&s9;KCT)?F&IUGwkBGp9)+V5aS@rG2)IX7F%(ch!c(yx z#iX2E3bYvJ`B*O$Xzz4`JUt#ms6?3On>z+QQsPc|M3W2f9!G<~fw5K*14#!AGHBFcci&@$}~jm@CN4f}TG1_ETfP6U_5{Dm4!Z0u>b% z1r>z`kqfdxArTP~pkOcv3=RYkfs~S5Dz-Q}bTECDW)d zPr%hDb0FnCSDQdk5-WL*mx!mgwMf~@VQh9fDL($ z&3m6rB~#uf{{z*}#Xm3ra2pr*+{WMag+zL8fv~*R!*}P(Tgf1a>DWV4fkK9*;Xyc0whG z_N4PD7|7OOP{_{psXXthzx^3LLpE4PZ5goIVr~o z03Vbmj)21fTaU*)mZkoU4De?sqaP;;^aOzd1X{_{8j*<4f7;3+cs$MvC>Hl*7Py^| z#AkXw?I!%otM^20(ffFSum2%bpTH>OENT(90RLt-K=MCL1rXpoXs0qgnFr{rccI8YjQn$L?e@bJ8><8y&pUH}yBwWwXcbaHZSM;?0~ig6w?Do?oPG0UW34pZe|NZ#Pqx`}7gJ9&a!&E-x5(!N3a! zUNG>2ffo$CVBiG<|9=^HWU*dH8211lBiPm@u@&E*kqU0ql}$;jko5kE;4D$Q&P;E^ zuFx*;}`*^s?@?w9<-+Q<5S*dmOLHKf!hhAgX6JL=(j;WCk?efRAS<_$MKg z`J9-ckipY~_qp3){Xr3xsT`LfdsgqAn9q|SJ|=@vz_xFKZ7UN*J_p^)MkO8W1y$cx zZMY#&7!Z=K(PZ<{iA;?b(UD@E<*eE!gLB2ba=fS?>|33g;g9QhkXPRhs2n>zSPPNG z@DpW3;n2qE=p_gv_H%{WMK~!ulz?nvthxy01LDX#26m&o?NCzn1p`fRC{-<7o~uQ7 z_(YS}V4&)ay4|>LErzpOb2~{Uppwbm@&R5v40G;8yWlE4&bz;`;?}C$0HdMJ`pOuq zjwc@Op-jT#^s<#P`@$St8-?ku*bv3CaB@Eb zt{qw9GL&XzX9`1Dnyo2|#IcD0qbeGj10)~bQ7Ug@d(rM+ zk_85gURZL{@7?x?zW299>vsPO;jqI_!l|hst zLIeBWG*p#D3r9DA+SiK2!-nMcH5P6%9>czM_wu=x{1RyPsuxa1Evi!+z*KgAtI&^# z0h1k$@K{(>qZr-op2*QC^6lG;6b*ftE}&KEv1j)37p@#AJD`eAN@~xTQ6FvO6Gk-Q z<@XyBnnf4%m7`i?&#@l)#KpiYOFA6tU>$HjcLG$E`ua;t7Q2zR{bMI5kEw#c9Fk}T zc+#m$GZWZbb>`{nw9QD=5~Y3g%2wKX#09~vIygqiPH&E;vH6l#pUa1ENeJeN?lWsC zfd9AUO%)+&;3yO(a^yeC>*F~$J9TS<5aJ!6|5hFDU}UwL(rqQ302aZ15v4aP{WQ85 zHk#3bOO{#h6Mbdo!L|KEqXx5gSs&w}x*a_)(H!w%_Ip)#NuZV5uc87|11_@#%|!-7 z1W^=lxuE!jX>l5tEUFx2s%y2ZmIxo*>2X56J4UY##t+})Hp)?Pf`zXf#zRx{?e5^5 zwQ3CtDeBp#%20v@W4=S)I7H|x9j5o%i!r=L`Goy|)>t}RSPd)a{dUHXX*uxc)!M$H zWXHZTh}rSUkACI!0q-*rmgzdWWWEQpM1255nJ=1xR(8Zp1PUSz5Hk@3WL_(pz*qD%u&h? zm0RUabd9klBVNCx_0|rYhK{3{8f`lAUPP=dTavD}DfWzLGRi|$lV^Mvz92K~S=U#| zeE$EM^U(oiU72>m~VTYnyc2KBlkPaT{?C27EoW-k4DImf63Q z?_%Ae@^oe>x%Uli-twWDTk4be;sfFw%g5s|49GHeU%rK(F+$^dnBOAz;Nr&J#H#^q zIA@JnQ$q@(omaIzQfv)|AluZiH z`NVqY$k7CgZFdr)TqU+#q^V3-@}~p7lK|MYO+S_T(v6xJ(<()^K1b>@uVwi5?7k^d zmoi46s>vEMqheg!kv;kd_Ue01PGzssF)56xWH@<>T$3}kbTPeGo|Dm0Ic{5I&GVsI z4_&H8FSc&>CcT_6K8S~#M42j+rS8s>_e|fW^38L@Yrz>yfoW*rkWl}fujQl$W~Z80 z6DOCk+TYN&bHmcciD8kAI#nQODhJ+Xv!4Q@D6YHy0&9HzOn?sR8X7xlSlHBo9~7H( z>l?Kj_o`8QaYp>jv4vBk(~`l7h%Dty1^${QudbcKRm#OB7$$P4C1$cAUc6#x*V1*Z zSeeGQp;6y#xIUz7(kYwN^!Gy2jvh%*0pT|My3E!iXS?cClZ%W zrP9%%HmkwaZT*g_5HX3pB~{8d?v|T+s^fF3=dO16AQ+s4@~-3x@^!9Z1MkqCpM_@O zF^;G#=C*o!dL4AZ`z{b@NBUM4xNaR;17p?8jeGfS!uB3oC$JYP@D1f&1EH}!TQg%y z_exdARFg0l)?})@1yPXK`h)flL1(l3Wi^OOY0>;R#EZphjhTF>Yu4OVlUAhP)(jG@ zw!tmdJV;svT3b+PR*h9GT*YAnE?c#yS5`)u*%PVcc4VcEGBrw~ST0%I{GP7~mvUN= z2d~H994py2TDS0R>R7%;Wjnst879@BxL}k>?JyiiFe4ClsJflK0hN|Jv}M~JY88r0 zk8^B}ntL!0u1LI$22(^-W-S;tAw@_P8l%Cb5&~PHDIiJw2|pf+Z?b(2%J{vrGp!h? zl%eHQ379PV#j@${QdNga)LMrI-+$${bK>L856kX>h8AHqSNfMpfk&fd3IY)OD1TOBn_-cD9^p!|LX9SvmW<$X^nX@IuBlyy;+qEr=ax$_ ze*FpW(aWYgr(B429i|i|<5+T%G@(Bz@$-=miFkKrU3@CBfzy(<$%w7A9g%9$qjzl4 z`mWiDi?gJzd3S|xlzndNuxci`k9I>OE3*{zd&#&r;(>jz6v?LDIs<{-mU8lYd$6mloIk|^B$aEH1q|5eBkp+LS>~|B3qV_i$g!Eq#Rf|^|wT~`#E!&xN z!6Lg0X!Drw4t_ynz-PE7bbkVr%Ne+9xuEh=7+A~vSaGcmA+=dF<5GjBTnJ>G{Ig3r zUGrY5AjBi%M_&G414(vlVh#?I$^(CXiyFQ;Gp&c~O{756Pv$M#wVAQok_C(?#dg=| zPPTk35ej1hzWHYi%U_dNjh3C5<=yy0m)>yKL@D%4IwhF*qu*-t@<5JtCKv zS5dE1_G^U3GZqEo>?-UJrujz$30vktbU>R6aXLBGy&274%e&2syR4+KNw@FKWo!dG zoK6b-G3cc+6G<+mcDz@oU8PZEE0o+z4(0G?CBN64j4=#oD7+-#L@Ns!|=`ImR zcdxA7=~IP_qK?)h1FQR#?|Njn2)$tPxd~@Izfa%# z7Nd6ES{zZ%6plwBCN&(v4L2p3k=v^#WNa5<#ZRXwM z-McM#-lH;W=B)qMJ89DD4_<@}T08MIg~m}dzaY1VbSjm->9&WcXMyi2&w)>jdS zY1a%i;G9Y{mDzw}W&b-=g>4?pV_-(C1vc|)>G%2-OaJWzWQWf1p|&e#l4ym)w!H1$ zS6auLBDLO#bW5u!5=d{9|9H%*=^fK95GbH2abfOH>4-YtzVFBhua~U;f(x^!Xcxh} zs`A1H9vpS>lF-N=*f5ZT#1?uBp~3yqvf7ze3w90l(w-iV-cDyO$79?%jgvZl`=#3k zygtroP2!2;F+uVY*L#D>)lJ$7ViO307(-5GuC~YwETLbtYz{ut+v_t}3s-Mn8Hk^` zrY0rl0YSDQ3$*mZX2@izwaT2ah-oV~@&|we(FwN7YQz-M>$=THm#7LF_`ETbGu=~1}M9A0)kOl4ayw2g)(Y!%u#XV$_#)BsK0J4>&K zTmD?Ok9XMUQZ5ie>pRB!S4ZO##sT@dsAGG)$o_(8rjg?+e-z*(7uomh_XY=BmQ>9EU<;t}$uHG{= zFr;=TZzoe<`K5jD^8CtJ(6K;$7LuM>DyD;t-CKb3m7_Od5h2m zj8U(OV_BN8-@PBOIk^_h6 zg0k}_V?gOY$O?%z&aC7^(QRBby*<#q(;l+GPpr_XB`*HarzK-dBf4)Dr7Qcj6r*s% zF6P~W@Fb1V$@Xm!%D((=!ckhSNX=QsRAkjW0fw@*MaD3}y7railxAAHGr4QNWH{`Vk}Fw#MjQQrt<+di1{1C z?Ah*kMUR2BN^j2?%!fNnEx@+N$1u&lW*petg+%j;jDVso|(h5biwE3T^JGpbB^aljdX0) zqAwllG1zq>?(QrvSnf@2QRR&L>!MC&rQ8m$pO@D6duo zlvJo7K|)m^Le$uYKr94G*<=ZbXiy<6M)vJ@6RfrKdo#c3%zHDxKe#hV?mgdgKHqab zXSw(0{9!kj4Qscr1%W^tTn}K6fI$BMPM80-dO7g3&*nQgKk!KvrW>IM& z6k~2wD8-l(Nuz>5ksXY~9y*oAtLOSR?_Iv!&o+f1AtRrRCgiv(rav(%PF0?NI29#* z+PKek-DBET(F0obf0Zig2gon_UGokHV-)a7PWn* z1AhMC^rp>iVDb4(d*| zuEeHc4pi>buL@{NJYuf%>BVQ?T|>7!Iq4tTl62x)$ritGc=_9PnN~Z^pebjAfB7Y~ zN_Z~mjz~vz)_8K+v%#l7y#()?hnbb|N1xs`8Xm$7buas}u-eP=<5gaA3ya5JUxwXG zoGV^^Vui^H-L%UE`L~l$ktxM7latX~`+U3m=k?DWY$Ts{-)%IbR z@jJhnyb}5QkLx~hU=t#yk~!_fGeO@bAERd5e)Ywrn4?2PZ-mz~y=OOa=oewn3EsA> zFz?_Et>wGpi8pQ(k;~mU>s`Mv`Nj$>JNaYc_AeftY&n2PyEgZAg2S`Prsw~BjQ@ve z&GOfWO;B+o4wH%^-^^_G_g}90ak#3?q58}`;YUS@YM9i?6oBS~o*o>S9)O$}`u;7| zC&_S`W9P%FaG&odPS+Zoc zBpLuggO0?2wYX^DTqA~ojkPM=U<~*u?y#{Vi%l`Mf?7f05T{65gaz1s zt+5@OOhq5TI=_Pet}x(}Ty7{D2IKK~P@W}}#SVfYP$(1(ZUM8ffB+g0P85?%jD#>b zrW%Mv3@n91V$(voG#1lXgGmfzg>x}rFtBd?hkuMv9PT|llk<)RfDc$CF%*V?!eI;s z>_ZC<*C_%3dFRl-wcvOGT?#uw;jqHlB#Ki6g~>Jj5Q0p4Zyy@Y4$+1~Cc!8n6b7Km z0d__FWlI-V+~M~Y8VZ7Fj8Lr=K=xlWxispZWc|fA&5Aah4;=x_-{by8`;XYQ%77LQ zhsLr<;Trc`u^6yse>9mzqLI;yr$h@YYb1pTfg^3G5Gz|a0)nC-kPvH2TN|RaB^8OF zT7LlL%H(i~OcF%{1%N|o01nyK(%KSEB0&&Tk|o3n34Ga-P*ey7MYOe{z^wyqt!zGk zaA(tisw9Sd=#>VF3_w{>1CdlD6$JrI5D+Ue$_ip@9cT$bA}p*?fq@oQ6kCcGicCT~ zv)BwGkWLzd7({`EGJ~`W8p6^054&Q(7Et(~lEWcHE)_5UdVt0xvv{08m%L~UiYJ$- z;S+&GSlS}3ENoELHYi&gu4od22EqZTC2A@a0MN>TXwZ&q z3X#iVd$Cv{7_i1EV~yqeWgO5@WFnV{C2}bMDBQvd4YxvDSbAB&(Fg<@j@kpaMZ-VP zXOU^tsQ*h_(>}&_i%CB~;{f|dX+?`YZXd-Db1P(ERLe}~T zU@b0@P7;|x6kvY5E7(8ew0~0!C=$`y7D0gnRYVR1GKio;h!m;~B#?+i!l@Jz)dqq3 zD>{cojTR}dc3=Df0EKD;o{)pBN z_P_YB(<*#0VgS2E88EtlNeFvC3g7Xi89M*P<6R#9i#q_&OPl;HewXN4qU&!l@VAtg zs%wd^zs11cQeLXA{}^3s|9qLEFo7o^9`LGkHMx`ryk@NoJmi7}Er9lczICCteFjL@ zgdXtafI#auX+Fz9nOC*}!c|;XoYSh8E4Hp*x8|xeFb4$s)Xx>W-z&01rMULJX?w)( zr=*&*rk5TcasDKDL#Fw2rj5L;_pgpz`e(PtI;@yOv^*S@C`;DpRMLL3pbT`t%xKVKIoxz0h$cZaw z?sQVA&(ReOE@^PsTuNA3&rBy6-Kr-dhlhdxTJ;5iD(G#8EeVBre3`I+=P`U#Vs9n0 zbf!|6QX4t3xqjI);9>W;i6!ZYk|GEb$JJkI-|$1!uNA71pDQx%`1i|GTl@@$8rD>F zI^P6?>DfkcamN=r==U+!R&Bix4C6&M4^AZ$+lKAE_I^>*BQ$t+dlY4A?zSwlbnd%K z+#}p`^s`i5zaRI5R)S8q6=e4PT%5GxSd-)47Y)Z;cJ!5h;?F5Ds|Y9e^xSi>M}E1n zQ^prg^$s=s)FTUz$l?nt`=@&QWl-dBPV!d5Z-x3y_T7vL2Ny_ToPlDfc@?40vH6q` zjD20jq3rCeCW<>t+=lm90+mNuwxymjsB$bEi za^6u0T}25;o!V+0Bu?g|yBan+`0N$MPXaELgrSCDhknuZNHr={KIs~-lr*_LeKFF| zQY|~ia=79xG`Lg=%Qjs75Cj@AZ!d~x$=DNf32_smRtcpCmnz6n^7%I2S(Y3<2d6J| zGYEoqd0*_@G$&$UUYSoZ>>Cwzcy0<8O{+R(_TWMTWkP&$L>-aW{kD^l+gUw7)P;>r zdCu`FY}#!PaVou$RP3k5*R5P}0tA}mEQ@?XSnvNJI;f>Mc)KaMRqTkxxD%M36lXaQ zi*7r^9Ne)@QPvYHBW6{WdC$#`)X+ETdZ=tu1+ABbLP?cArymP2vJs6JL|;qcX1^QVdplEK?<``=FbW3ghDc-RzN!OR%n zlA-wQ(siAQ{+{9K%k@o#uR{Ym#pO}yl{l%ta(bd=S{1dumD{5;5pZ?QY*BGEI_VWS zC+3tf=p)d>!jDFVuk5^739W$Y%y=5Hv#MchtIDIYI@K!`Q+JCi9kE`gqRTl34c~Mo z$}UeBwE+p(T-bF_KIks6cbJ{ce7jD|eZa+hql`kn-A2i;$9iTRb+XF+#WkrdDIOfM zQK{EemoGP_Tiy{mWfl56WerT_0lm@OlImg3Uo)+3Z*D1U;^I~yI?N~HyCfM zt{u1&lbPRAIv*d$_fsZF(5GI z5a^y8)!S?CRnKw1bfhF&-*iSM%0oyzRlM_qmSDG6yzRj+k28MYi>sQ};SX=w6dZV^rq>s$x_W3=% zv+PK9TxqwwuRqf;5bZ3kC#JVMiE@;$zdgnZm`;;0LIM@4XLjDvG9*=O0x<69`zsr-`O*hQ^Bx9^Re17u)87 zzjEj%N|55>C%m0>fq%W@XsVGQxav^bi>5kZreQs<-hI?ou=l#D&|qfJG`B;a@hg$n z5ps+{mv%de++R)9(wXD6zh}33x5KO*+*_g#_T}zgt<6q{RoP(Q$f4$PVU_}|sne2pTbwH)6Bcb>)UfBDzP|C zY@J*ib~Dp7M>_RgdyrUE;86By)8$)_eonE$W62RdF%g#RAIe{MpL&@<2(p|_37s9F8|^_^plN_Co47j@-Ose1A^UMFWX z(pQ+ApU9NX5Dkrv-)11OrM1p42dBp)1JbRZWnwI}L&f1mMFz@SH|qX6ah`($xC?E` z*K71ZbUhEX&*x>=OgAYCPGsqpwpaC4+4nLH+MS$BNmt!`&@X!U!g8U7>Ft1`H&aPo zUL}2$1P&(o@`IGYaZqKvR64dB1bSL*Izyds0@X8b6q=^oE=@e@)@vgPZ?3KDztdFx zv{tVXKXxkikubpJxkX&!K)F1>?*cf7e*99B*lz|r)av7^FgY-?uzCxS;d!)IGv#wR z6W?^y$7Qe;4-uQwMJ##1eD#Hwo<(=T71ug$=?MA)MJ?tz3?@*JH&fMNg7)}<6rW-? z$9nAbMbYAO%r!YI%G#2CUN%@EOOJRiyO3B16=vTFJB~Z^Ksc8jko`L?i^R#&RZkXx z11q-qm-qEzok{LsW$g*v#-w+MX+}-+=-W__Ls@KuIO#?;3&-lAIoG6f)24BxD^%$OUE|f>>oAJ5lBCO z0LB3$S88+bG(CL4)oIBM&^ge05UAK)TG;@eE$X_*r55SAwH>bR#r(N4jUnvZNW+G8mc8Z^9`xELf6b$Er_ ze_|#SrZ6(yYNn`d0(w=$D`dqOe%heSV~Yo#Q-VGp9)+V5aS@rG2)IX7F%(ch!c(yx z#iX2E3bYvJ`B*O$Xzz4`JUt#ms6?3On>z+QQsPc|M3W2f9!G<~fw5K*14#!AGHBFcci&@$}~jm@CN4f}TG1_ETfP6U_5{Dm4!Z0u>b% z1r>z`kqfdxArTP~pkOcv3=RYkfs~S5Dz-Q}bTECDW)d zPr%hDb0FnCSDQdk5-WL*mx!mgwMf~@VQh9fDL($ z&3m6rB~#uf{{z*}#Xm3ra2pr*+{WMag+zL8fv~*R!*}P(Tgf1a>DWV4fkK9*;Xyc0whG z_N4PD7|7OOP{_{psXXthzx^3LLpE4PZ5goIVr~o z03Vbmj)21fTaU*)mZkoU4De?sqaP;;^aOzd1X{_{8j*<4f7;3+cs$MvC>Hl*7Py^| z#AkXw?I!%otM^20(ffFSum2%bpTH>OENT(90RLt-K=MCL1rXpoXs0qgnFr{rccI8YjQn$L?e@bJ8><8y&pUH}yBwWwXcbaHZSM;?0~ig6w?Do?oPG0UW34pZe|NZ#Pqx`}7gJ9&a!&E-x5(!N3a! zUNG>2ffo$CVBiG<|9=^HWU*dH8211lBiPm@u@&E*kqU0ql}$;jko5kE;4D$Q&P;E^ zuFx*;}`*^s?@?w9<-+Q<5S*dmOLHKf!hhAgX6JL=(j;WCk?efRAS<_$MKg z`J9-ckipY~_qp3){Xr3xsT`LfdsgqAn9q|SJ|=@vz_xFKZ7UN*J_p^)MkO8W1y$cx zZMY#&7!Z=K(PZ<{iA;?b(UD@E<*eE!gLB2ba=fS?>|33g;g9QhkXPRhs2n>zSPPNG z@DpW3;n2qE=p_gv_H%{WMK~!ulz?nvthxy01LDX#26m&o?NCzn1p`fRC{-<7o~uQ7 z_(YS}V4&)ay4|>LErzpOb2~{Uppwbm@&R5v40G;8yWlE4&bz;`;?}C$0HdMJ`pOuq zjwc@Op-jT#^s<#P`@$St8-?ku*bv3CaB@Eb zt{qw9GL&XzX9`1Dnyo2|#IcD0qbeGj10)~bQ7Ug@d(rM+ zk_85gURZL{@7?x?zW299>vsPO;jqI_!l|hst zLIeBWG*p#D3r9DA+SiK2!-nMcH5P6%9>czM_wu=x{1RyPsuxa1Evi!+z*KgAtI&^# z0h1k$@K{(>qZr-op2*QC^6lG;6b*ftE}&KEv1j)37p@#AJD`eAN@~xTQ6FvO6Gk-Q z<@XyBnnf4%m7`i?&#@l)#KpiYOFA6tU>$HjcLG$E`ua;t7Q2zR{bMI5kEw#c9Fk}T zc+#m$GZWZbb>`{nw9QD=5~Y3g%2wKX#09~vIygqiPH&E;vH6l#pUa1ENeJeN?lWsC zfd9AUO%)+&;3yO(a^yeC>*F~$J9TS<5aJ!6|5hFDU}UwL(rqQ302aZ15v4aP{WQ85 zHk#3bOO{#h6Mbdo!L|KEqXx5gSs&w}x*a_)(H!w%_Ip)#NuZV5uc87|11_@#%|!-7 z1W^=lxuE!jX>l5tEUFx2s%y2ZmIxo*>2X56J4UY##t+})Hp)?Pf`zXf#zRx{?e5^5 zwQ3CtDeBp#%20v@W4=S)I7H|x9j5o%i!r=L`Goy|)>t}RSPd)a{dUHXX*uxc)!M$H zWXHZTh}rSUkACI!0q-*rmgzdWWWEQpM1255nJ=1xR(8Zp1PUSz5Hk@3WL_(pz*qD%u&h? zm0RUabd9klBVNCx_0|rYhK{3{8f`lAUPP=dTavD}DfWzLGRi|$lV^Mvz92K~S=U#| zeE$EM^U(oiU72>m~VTYnyc2KBlkPaT{?C27EoW-k4DImf63Q z?_%Ae@^oe>x%Uli-twWDTk4be;sfFw%g5s|49GHeU%rK(F+$^dnBOAz;Nr&J#H#^q zIA@JnQ$q@(omaIzQfv)|AluZiH z`NVqY$k7CgZFdr)TqU+#q^V3-@}~p7lK|MYO+S_T(v6xJ(<()^K1b>@uVwi5?7k^d zmoi46s>vEMqheg!kv;kd_Ue01PGzssF)56xWH@<>T$3}kbTPeGo|Dm0Ic{5I&GVsI z4_&H8FSc&>CcT_6K8S~#M42j+rS8s>_e|fW^38L@Yrz>yfoW*rkWl}fujQl$W~Z80 z6DOCk+TYN&bHmcciD8kAI#nQODhJ+Xv!4Q@D6YHy0&9HzOn?sR8X7xlSlHBo9~7H( z>l?Kj_o`8QaYp>jv4vBk(~`l7h%Dty1^${QudbcKRm#OB7$$P4C1$cAUc6#x*V1*Z zSeeGQp;6y#xIUz7(kYwN^!Gy2jvh%*0pT|My3E!iXS?cClZ%W zrP9%%HmkwaZT*g_5HX3pB~{8d?v|T+s^fF3=dO16AQ+s4@~-3x@^!9Z1MkqCpM_@O zF^;G#=C*o!dL4AZ`z{b@NBUM4xNaR;17p?8jeGfS!uB3oC$JYP@D1f&1EH}!TQg%y z_exdARFg0l)?})@1yPXK`h)flL1(l3Wi^OOY0>;R#EZphjhTF>Yu4OVlUAhP)(jG@ zw!tmdJV;svT3b+PR*h9GT*YAnE?c#yS5`)u*%PVcc4VcEGBrw~ST0%I{GP7~mvUN= z2d~H994py2TDS0R>R7%;Wjnst879@BxL}k>?JyiiFe4ClsJflK0hN|Jv}M~JY88r0 zk8^B}ntL!0u1LI$22(^-W-S;tAw@_P8l%Cb5&~PHDIiJw2|pf+Z?b(2%J{vrGp!h? zl%eHQ379PV#j@${QdNga)LMrI-+$${bK>L856kX>h8AHqSNfMpfk&fd3IY)OD1TOBn_-cD9^p!|LX9SvmW<$X^nX@IuBlyy;+qEr=ax$_ ze*FpW(aWYgr(B429i|i|<5+T%G@(Bz@$-=miFkKrU3@CBfzy(<$%w7A9g%9$qjzl4 z`mWiDi?gJzd3S|xlzndNuxci`k9I>OE3*{zd&#&r;(>jz6v?LDIs<{-mU8lYd$6mloIk|^B$aEH1q|5eBkp+LS>~|B3qV_i$g!Eq#Rf|^|wT~`#E!&xN z!6Lg0X!Drw4t_ynz-PE7bbkVr%Ne+9xuEh=7+A~vSaGcmA+=dF<5GjBTnJ>G{Ig3r zUGrY5AjBi%M_&G414(vlVh#?I$^(CXiyFQ;Gp&c~O{756Pv$M#wVAQok_C(?#dg=| zPPTk35ej1hzWHYi%U_dNjh3C5<=yy0m)>yKL@D%4IwhF*qu*-t@<5JtCKv zS5dE1_G^U3GZqEo>?-UJrujz$30vktbU>R6aXLBGy&274%e&2syR4+KNw@FKWo!dG zoK6b-G3cc+6G<+mcDz@oU8PZEE0o+z4(0G?CBN64j4=#oD7+-#L@Ns!|=`ImR zcdxA7=~IP_qK?)h1FQR#?|Njn2)$tPxd~@Izfa%# z7Nd6ES{zZ%6plwBCN&(v4L2p3k=v^#WNa5<#ZRXwM z-McM#-lH;W=B)qMJ89DD4_<@}T08MIg~m}dzaY1VbSjm->9&WcXMyi2&w)>jdS zY1a%i;G9Y{mDzw}W&b-=g>4?pV_-(C1vc|)>G%2-OaJWzWQWf1p|&e#l4ym)w!H1$ zS6auLBDLO#bW5u!5=d{9|9H%*=^fK95GbH2abfOH>4-YtzVFBhua~U;f(x^!Xcxh} zs`A1H9vpS>lF-N=*f5ZT#1?uBp~3yqvf7ze3w90l(w-iV-cDyO$79?%jgvZl`=#3k zygtroP2!2;F+uVY*L#D>)lJ$7ViO307(-5GuC~YwETLbtYz{ut+v_t}3s-Mn8Hk^` zrY0rl0YSDQ3$*mZX2@izwaT2ah-oV~@&|we(FwN7YQz-M>$=THm#7LF_`ETbGu=~1}M9A0)kOl4ayw2g)(Y!%u#XV$_#)BsK0J4>&K zTmD?Ok9XMUQZ5ie>pRB!S4ZO##sT@dsAGG)$o_(8rjg?+e-z*(7uomh_XY=BmQ>9EU<;t}$uHG{= zFr;=TZzoe<`K5jD^8CtJ(6K;$7LuM>DyD;t-CKb3m7_Od5h2m zj8U(OV_BN8-@PBOIk^_h6 zg0k}_V?gOY$O?%z&aC7^(QRBby*<#q(;l+GPpr_XB`*HarzK-dBf4)Dr7Qcj6r*s% zF6P~W@Fb1V$@Xm!%D((=!ckhSNX=QsRAkjW0fw@*MaD3}y7railxAAHGr4QNWH{`Vk}Fw#MjQQrt<+di1{1C z?Ah*kMUR2BN^j2?%!fNnEx@+N$1u&lW*petg+%j;jDVso|(h5biwE3T^JGpbB^aljdX0) zqAwllG1zq>?(QrvSnf@2QRR&L>!MC&rQ8MTQUp2nq^>K?H;l_+G%a_WSNy-|AYu|HxWN-uIk+p0oFJ zp1sd`S90<2A!ofc#%n+zklum)_#+_D3gA-bm(@DJ*Iw|~%Yd&(r`^4HN637WKrV;D z44|9v!UE|gbODnA0twn!hh5iIn5@?JZP=rua}*a#Dx;xWM{?Y z-g(s*%brND99?64^XnfO7gKNO9s2US9o$=zb*msT(FZA#!4($U8lR=RK6ql06an9RLm)rF%2(;`UOb3U<2OJ!J ziwB4zQFzIAf5qM{mA;Kpsl-)lqcF5vheBNq%+AvN7w5iNV?n`ThU8^u;>!5vez^s2(#0<$7DT(_%oxF$ zl*wH>MpdBmui~%W-tntslOQ(t%)57|4WD~=^v!P3e%(Pk=dwN4Qgug+7W<(slE&8{C;@^``Zrd;^JnzL*R3|A%$m` zZ`q==-tp=2Nde!*k29Cd9G_fHn&2k0T+ zgtHd}lBuWYJQE7tkIA-$4426uCQOgsPcrwP=F;6xA9AOjK1H>mLG10; z-~?CzfJNt#O$4j}b}&|83t7O$0@w4+Fo?;53Gb9G#EWp)#DT-5n;@Y`DBQwPzzns7 z*sU?aacKH`+kDSLI3GF!4F4VXPu9Q1 zzF-Vk5eQg3hZ-{P-T}NVWPW}ujYDP9unU)HYa6l+nrdx9v9V-WAgvg13kn5oV_|KB zM3a$d3K?UG{s8I#JD5jiQ|a?i063Hh;GmHVI@yL!u|UHy00bOEvA`ezLc93$cX4|7bZJK;|)k0YDBg*)$G6_>V4k zCX4RIBhT}RKqIU$7=$$j1$p=W+!us}Efwd8rF0ssr` zKr~nfE}hKdaNRka09(ksQzr8xfA1y$2}L9G$apf34uHZfkytnqYiZ?fX^BNxVd1D< za10jyfjx)DWQ6^H*7NCOf?Hhl{mfus{;-9n#hh}Z2QA($-UcuilF7tmAuX_E>S74N z=;EWQ=)HAyH@)pe!W9f<{Fksg@WU zU=jZpdN7B<UzlD8iZ1 zVg|H)9Jt>*7zA3oe*V1-l#plyG_K+uAULji^^xH^y_H@ax=Ikp$ov3)pSz$D!171n}2D6dV8u0o_lRw>CbCyuP22>#@B)i6zrns0nPFEeqN*g z_YcRrex!X_U|F(PXYJ66wL|*TE7!kjI&*|rM$%hbHQ2Yl>CEtc&sTec%4h1Pl2!vQ zEWMT(SYlv_fh7i(7+7LpiGd{s{(c6|&Fz@|$rA*6nEUgbHYFu#wxQ1B(k8bUH^*_r z1M54GRMK(BN0>p1F(v9Gd#>53_l6u16Vfiv1E){lmKRDwLI=cA%;=r|8Ae4t$h*Vq zk}L{*9PtMYToJ^r{Gii)y_Bwg{rXzdne)cJzz<9^%j%F~(WitLd2!&Pkk;6WiQOyx zke9*swd~6pg8F!DB*9&kbJlNch(Bj+5F+r_5Z)>=L*1C@Vcd4l7L~nlo1)U))j>G< za%3EuhFdWxxug%~%cgcGpwbX&8Ct@FX-KR_{8&+%hVU0m63>BjK_L6SJ25VHwJ(WI zc)W0uI5XwaLq21F;_38k+L^c8!N=s}J!i+V!pG^)J~2S}IK?9d@_l-pT?Wc>`^fbQV)CFaJFL#7LHul%tkI2^5)q#URGr}tJ zRcW6h`_OeOu-0x;Ia(qqb-C6vOW(@38KC41%}&LQUhS7@EHk*}rM^1)n$z0UbxPS~ z(eRNW_nr-`_~EP@V@dU%1_p`{&y>FJb~MmxJVyH^*!F9CJ~_7x)YaGI-9G5s$&C^`v?fz7RQoo^all%ZX_dI>;%Ii& zQ9^H)T_IA{&^_u#zo_a>#T#WxxPgOQ2YB);^$@3 zK@UYXfRi$3WRvSzFYg%|B9%qP4MeJUDm!NVqmE?-hY>q-sAId+Mgt7r8ih^WZX?!A z+$((=XBRV=@6&=--4SjpL|-%kEeAcU-|X8NJv;=l%l4B76vP-)GhTVv`1V!E4O}a7 zGU^liZpf!z1=V>VViYtaNw4@K`f5wznN9N9@^6CU@0FGZv>hu9zpkJB!d`TxN$%eF zAh)hsHkx)Msao#3vC$6l=BN0<;zG}lRxU0oi6-P9*b_d2@oX8_)(Tpy?nub|OZ#)} z>tBwmpYmJv%LwG+l5ukf@*2-K%&vT@56{ z?U>v453(|6CyF}6300T?`R&x{YeSuwdwn^#w3 zG@-bwlDnjax>g8URWL!pgR}9(!QzG&xBHcKmI+e=a~K*SJN;?;m4>VRa+2Ej1#e>{ ztFAO5LpV08$cBaD>sx{bcSRhVvjf{+9DIWg7Y|a#YCc+w^G2$90xDD*CEl6( zIZCSs%G-?|-*C5QgfYpD&+~Fraa`-fmmbvg5&) zcNkstT!U~1nJ>|Ap89DTrA_|zO^{(z2Q;TZ(nNIPfo)@McbCM8j~#3B_gk}=Cs#LJ zY6#a>3bCXdx%LyeT`6&QPU>`NmbR#Ryri={{zj(oZHXqm{>H`U(mriV{ZJLZCB+eH znmVCu+}1nR=j=}O)j~Zz)AuJ5p0U@vj%z&)E`hT$Lr1ShiI0(-@6H$9TJ@@JXW~~c zFdJEkT~{V{gVq*FFRs~$#$}u`DEd-CSlyNM%bcwm^4QtL zDx(Sha!PZhXtP_irnaQ>5oIHBOuwaXsyJ4wU4tDf!X#d=9=Meks}y4j>z*d|h3RK2 zEWx(f!*h`zFIMB0l5iU*aK$J5ARa2N1~bucH$D4to|jy7Msx_1HacW{Q+Z-~I_Jt} zHN|$Qc#^-tq9q7-X3i(X&Mu>lIyKTiRU%^oVtq`f`82kMOlIGV=MFiN-=}IfaIq#LZv~*RN1|_1c_#Cd`DKe(uiF~E3D3Z)!S1HgUW}y zz3dA^*@gq7chr>oUWfbcla4v!U*N0;O4M)OKz;=Cd-8_dkPC&b)6&Pe?rKYlr~3nu zfqlTKs9Pk_+nZ&xxKg@pTW@VaxkCQTd1m}5o6sYW{^+S1o-?X|Mu>0$l&H{q+u|yO z)2udr&!j+*{!b-sa-`Hh3D|QG>ahyqZjV0na%a2}56yujOPv-s$b$|C$4)~0st4_2 zjQh(Bt+RvkVilHn;=oWNAZDd?bTb8cW_br8O$ zm&Mq^2jmc;5~|VlUyZxF3ZMOwlC*2cE>^PZ`?ip+DA)Jf^6YHW0J17C&e-%#jvP2( zxo*5}keTR+r^VYyQyw_#p)p3N zJ{YL-dwi1Y$f7&ZW-z;c%(1t%I`i4}PTD5P$ttdr%n&R;>>+9f< zV#ltG=k;@T+lq=SI^1&e<2vn3$A0=?OY7vj%rT{TSsRJ=ComNQ`mo*U?)n z%r()9%6siaK9jke-tc=y9>ikn=ZVg|ppyLs)-gRK?Zh+F>D}67f7xW1hMU(8_2?-> zZ*PL1)mCBxlxZ<+?+Q_3)zpqTu56cP=w_|kSUK>YCDGP|=;yOWERK2MACZW%`R zS3HEhk%@CbpmV+#utTX*-|h7Q!Ff;h-vr2ldS6pI#G+TG-J!6ziij5|%GvaZ&3%QP zX4E{azS02LghgkAy|=I}KN|>YEmUC{W8%jzo2GWu*OcC}SlE?j^f*aB)F#^Bw<`=1 z?TJM-fFm_4IE@`4Pol(LSrnOYpq-Q0A~MVbPS_#GeR4GMRRv-AjuwGSk4$Kw=)B!_>;ra(5r=yEeH!P)f9$XNICFtUe=J z-1E*ujb2x#8M*HzC!cBPn`+;!^yW{sL{~u5qNttW+5o}$j9Mc~FD?1%<99D_0Vk1> zQ{JUTitM_4HdwAI>8#2d&X<^_MzlT{oRnTWMC`^Ux%T zD0wq!&b-Mdf@IF{*a+8l2t74zR?ps+Gt91P)O&cPV^Fnk=~iuITW0nv99c7cfK>P z@_ScJo9sSomyn-R(pl+lu&MEIq#7vbu0mu3wAsvHLBe6ygH~nFrMVDD_@JhuD1wAE z0M131NL%@n)k+00kr$5u|b(xw7{xZgA*SWp&8gveUx# zglBg$!6<|(r6;=r#oZ<^50%c26WlwYEqp+pcQRXGkhV72piFkL2MVF&h3XoKg66t* zfk0iJ&tHbmIUo%hfV1yyc3c}u{aVzeEZMBSJ+Zl>{1AG(H4ECpTCe>j<N7l<_O$2;J72%q!SiSz#hP5774 literal 8969 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 Date: Wed, 24 Apr 2024 09:04:22 +0800 Subject: [PATCH 27/39] Opt: sort asset lines before printing to file (#3675) * Opt: sort asset lines before printing to file * Upd: regenerated asset list files --- dev_tools/button_extract.py | 2 ++ module/template/assets.py | 40 ++++++++++++++++++------------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/dev_tools/button_extract.py b/dev_tools/button_extract.py index 1c8eb2dffd..b966f1a77a 100644 --- a/dev_tools/button_extract.py +++ b/dev_tools/button_extract.py @@ -174,6 +174,8 @@ def expression(self): exp.append(ImageExtractor(module=self.name, file=file).expression) continue + exp.sort() + logger.info('Module: %s(%s)' % (self.name, len(exp))) exp = IMPORT_EXP + exp return exp diff --git a/module/template/assets.py b/module/template/assets.py index 6c0c9e8dcb..07bf81d628 100644 --- a/module/template/assets.py +++ b/module/template/assets.py @@ -51,38 +51,38 @@ TEMPLATE_SIREN_Atlanta = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Atlanta.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Atlanta.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Atlanta.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Atlanta.gif'}) TEMPLATE_SIREN_August = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_August.gif', 'en': './assets/en/template/TEMPLATE_SIREN_August.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_August.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_August.gif'}) TEMPLATE_SIREN_AzusaMiura = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_AzusaMiura.gif', 'en': './assets/en/template/TEMPLATE_SIREN_AzusaMiura.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_AzusaMiura.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_AzusaMiura.gif'}) -TEMPLATE_SIREN_BaltimoreIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BaltimoreIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BaltimoreIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BaltimoreIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BaltimoreIdol.gif'}) TEMPLATE_SIREN_BB = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BB.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BB.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BB.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BB.gif'}) TEMPLATE_SIREN_BBalchemist = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BBalchemist.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BBalchemist.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BBalchemist.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BBalchemist.gif'}) TEMPLATE_SIREN_BBlightning = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BBlightning.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BBlightning.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BBlightning.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BBlightning.gif'}) TEMPLATE_SIREN_BBpurple = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BBpurple.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BBpurple.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BBpurple.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BBpurple.gif'}) TEMPLATE_SIREN_BBred = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BBred.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BBred.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BBred.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BBred.gif'}) +TEMPLATE_SIREN_BaltimoreIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BaltimoreIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BaltimoreIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BaltimoreIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BaltimoreIdol.gif'}) TEMPLATE_SIREN_Bellona = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Bellona.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Bellona.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Bellona.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Bellona.gif'}) TEMPLATE_SIREN_CA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CA.gif'}) TEMPLATE_SIREN_CAalchemist = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CAalchemist.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CAalchemist.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CAalchemist.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CAalchemist.gif'}) TEMPLATE_SIREN_CAgreen = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CAgreen.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CAgreen.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CAgreen.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CAgreen.gif'}) TEMPLATE_SIREN_CAlightning = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CAlightning.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CAlightning.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CAlightning.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CAlightning.gif'}) TEMPLATE_SIREN_CApurple = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CApurple.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CApurple.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CApurple.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CApurple.gif'}) -TEMPLATE_SIREN_Carabiniere = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Carabiniere.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Carabiniere.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Carabiniere.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Carabiniere.gif'}) TEMPLATE_SIREN_CAred = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CAred.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CAred.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CAred.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CAred.gif'}) -TEMPLATE_SIREN_Champagne = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Champagne.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Champagne.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Champagne.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Champagne.gif'}) -TEMPLATE_SIREN_ChihayaKisaragi = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_ChihayaKisaragi.gif', 'en': './assets/en/template/TEMPLATE_SIREN_ChihayaKisaragi.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_ChihayaKisaragi.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_ChihayaKisaragi.gif'}) -TEMPLATE_SIREN_Chitose = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Chitose.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Chitose.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Chitose.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Chitose.gif'}) -TEMPLATE_SIREN_Chiyoda = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Chiyoda.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Chiyoda.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Chiyoda.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Chiyoda.gif'}) -TEMPLATE_SIREN_Choukai = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Choukai.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Choukai.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Choukai.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Choukai.gif'}) TEMPLATE_SIREN_CL = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CL.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CL.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CL.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CL.gif'}) TEMPLATE_SIREN_CLalchemist = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CLalchemist.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CLalchemist.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CLalchemist.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CLalchemist.gif'}) -TEMPLATE_SIREN_ClevelandIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_ClevelandIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_ClevelandIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_ClevelandIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_ClevelandIdol.gif'}) TEMPLATE_SIREN_CLpurple = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CLpurple.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CLpurple.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CLpurple.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CLpurple.gif'}) -TEMPLATE_SIREN_Compiler = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Compiler.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Compiler.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Compiler.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Compiler.gif'}) TEMPLATE_SIREN_CV = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CV.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CV.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CV.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CV.gif'}) TEMPLATE_SIREN_CValchemist = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CValchemist.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CValchemist.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CValchemist.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CValchemist.gif'}) TEMPLATE_SIREN_CVlightning = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CVlightning.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CVlightning.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CVlightning.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CVlightning.gif'}) TEMPLATE_SIREN_CVpurple = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CVpurple.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CVpurple.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CVpurple.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CVpurple.gif'}) -TEMPLATE_SIREN_Dace = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Dace.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Dace.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Dace.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Dace.gif'}) +TEMPLATE_SIREN_Carabiniere = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Carabiniere.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Carabiniere.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Carabiniere.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Carabiniere.gif'}) +TEMPLATE_SIREN_Champagne = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Champagne.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Champagne.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Champagne.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Champagne.gif'}) +TEMPLATE_SIREN_ChihayaKisaragi = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_ChihayaKisaragi.gif', 'en': './assets/en/template/TEMPLATE_SIREN_ChihayaKisaragi.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_ChihayaKisaragi.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_ChihayaKisaragi.gif'}) +TEMPLATE_SIREN_Chitose = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Chitose.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Chitose.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Chitose.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Chitose.gif'}) +TEMPLATE_SIREN_Chiyoda = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Chiyoda.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Chiyoda.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Chiyoda.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Chiyoda.gif'}) +TEMPLATE_SIREN_Choukai = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Choukai.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Choukai.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Choukai.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Choukai.gif'}) +TEMPLATE_SIREN_ClevelandIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_ClevelandIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_ClevelandIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_ClevelandIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_ClevelandIdol.gif'}) +TEMPLATE_SIREN_Compiler = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Compiler.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Compiler.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Compiler.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Compiler.gif'}) TEMPLATE_SIREN_DD = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_DD.gif', 'en': './assets/en/template/TEMPLATE_SIREN_DD.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_DD.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_DD.gif'}) TEMPLATE_SIREN_DDalchemist = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_DDalchemist.gif', 'en': './assets/en/template/TEMPLATE_SIREN_DDalchemist.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_DDalchemist.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_DDalchemist.gif'}) TEMPLATE_SIREN_DDpurple = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_DDpurple.gif', 'en': './assets/en/template/TEMPLATE_SIREN_DDpurple.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_DDpurple.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_DDpurple.gif'}) +TEMPLATE_SIREN_Dace = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Dace.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Dace.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Dace.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Dace.gif'}) TEMPLATE_SIREN_Deutschland = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Deutschland.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Deutschland.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Deutschland.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Deutschland.gif'}) TEMPLATE_SIREN_Dewey = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Dewey.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Dewey.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Dewey.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Dewey.gif'}) TEMPLATE_SIREN_DidoIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_DidoIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_DidoIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_DidoIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_DidoIdol.gif'}) @@ -130,10 +130,10 @@ TEMPLATE_SIREN_Kirishima = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Kirishima.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Kirishima.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Kirishima.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Kirishima.gif'}) TEMPLATE_SIREN_Kongo = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Kongo.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Kongo.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Kongo.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Kongo.gif'}) TEMPLATE_SIREN_LaGalissonniere = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_LaGalissonniere.gif', 'en': './assets/en/template/TEMPLATE_SIREN_LaGalissonniere.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_LaGalissonniere.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_LaGalissonniere.gif'}) -TEMPLATE_SIREN_Leipzig = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Leipzig.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Leipzig.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Leipzig.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Leipzig.gif'}) TEMPLATE_SIREN_LeMalinIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_LeMalinIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_LeMalinIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_LeMalinIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_LeMalinIdol.gif'}) TEMPLATE_SIREN_LeMars = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_LeMars.gif', 'en': './assets/en/template/TEMPLATE_SIREN_LeMars.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_LeMars.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_LeMars.gif'}) TEMPLATE_SIREN_LeMars_ghost = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_LeMars_ghost.gif', 'en': './assets/en/template/TEMPLATE_SIREN_LeMars_ghost.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_LeMars_ghost.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_LeMars_ghost.gif'}) +TEMPLATE_SIREN_Leipzig = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Leipzig.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Leipzig.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Leipzig.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Leipzig.gif'}) TEMPLATE_SIREN_Lexington = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Lexington.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Lexington.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Lexington.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Lexington.gif'}) TEMPLATE_SIREN_Littorio = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Littorio.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Littorio.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Littorio.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Littorio.gif'}) TEMPLATE_SIREN_Lover = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Lover.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Lover.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Lover.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Lover.gif'}) @@ -163,28 +163,26 @@ TEMPLATE_SIREN_Roon = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Roon.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Roon.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Roon.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Roon.gif'}) TEMPLATE_SIREN_RoonIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_RoonIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_RoonIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_RoonIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_RoonIdol.gif'}) TEMPLATE_SIREN_Ryuuhou = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Ryuuhou.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Ryuuhou.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Ryuuhou.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Ryuuhou.gif'}) +TEMPLATE_SIREN_SK_BB = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SK_BB.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SK_BB.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SK_BB.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SK_BB.gif'}) +TEMPLATE_SIREN_SK_CA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SK_CA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SK_CA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SK_CA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SK_CA.gif'}) +TEMPLATE_SIREN_SK_CL = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SK_CL.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SK_CL.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SK_CL.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SK_CL.gif'}) +TEMPLATE_SIREN_SK_CV = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SK_CV.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SK_CV.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SK_CV.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SK_CV.gif'}) +TEMPLATE_SIREN_SK_DD = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SK_DD.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SK_DD.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SK_DD.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SK_DD.gif'}) +TEMPLATE_SIREN_SS = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SS.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SS.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SS.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SS.gif'}) TEMPLATE_SIREN_Sakawa = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Sakawa.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Sakawa.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Sakawa.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Sakawa.gif'}) TEMPLATE_SIREN_SanDiego = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SanDiego.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SanDiego.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SanDiego.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SanDiego.gif'}) TEMPLATE_SIREN_Scharnhorst = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Scharnhorst.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Scharnhorst.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Scharnhorst.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Scharnhorst.gif'}) TEMPLATE_SIREN_Sheffield = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Sheffield.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Sheffield.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Sheffield.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Sheffield.gif'}) TEMPLATE_SIREN_SheffieldIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png', 'en': './assets/en/template/TEMPLATE_SIREN_SheffieldIdol.png', 'jp': './assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png', 'tw': './assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png'}) TEMPLATE_SIREN_Shokaku = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Shokaku.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Shokaku.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Shokaku.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Shokaku.gif'}) -TEMPLATE_SIREN_shuguangjixie_huixing = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_shuguangjixie_huixing.gif', 'en': './assets/en/template/TEMPLATE_SIREN_shuguangjixie_huixing.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_shuguangjixie_huixing.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_shuguangjixie_huixing.gif'}) -TEMPLATE_SIREN_shuguangjixie_shanliu = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_shuguangjixie_shanliu.gif', 'en': './assets/en/template/TEMPLATE_SIREN_shuguangjixie_shanliu.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_shuguangjixie_shanliu.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_shuguangjixie_shanliu.gif'}) -TEMPLATE_SIREN_Sirenboss10 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Sirenboss10.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Sirenboss10.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Sirenboss10.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Sirenboss10.gif'}) TEMPLATE_SIREN_SirenBoss15 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SirenBoss15.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SirenBoss15.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SirenBoss15.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SirenBoss15.gif'}) TEMPLATE_SIREN_SirenBoss16 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SirenBoss16.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SirenBoss16.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SirenBoss16.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SirenBoss16.gif'}) TEMPLATE_SIREN_SirenBoss18 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SirenBoss18.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SirenBoss18.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SirenBoss18.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SirenBoss18.gif'}) TEMPLATE_SIREN_SirenBoss19 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SirenBoss19.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SirenBoss19.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SirenBoss19.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SirenBoss19.gif'}) -TEMPLATE_SIREN_SK_BB = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SK_BB.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SK_BB.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SK_BB.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SK_BB.gif'}) -TEMPLATE_SIREN_SK_CA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SK_CA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SK_CA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SK_CA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SK_CA.gif'}) -TEMPLATE_SIREN_SK_CL = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SK_CL.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SK_CL.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SK_CL.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SK_CL.gif'}) -TEMPLATE_SIREN_SK_CV = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SK_CV.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SK_CV.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SK_CV.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SK_CV.gif'}) -TEMPLATE_SIREN_SK_DD = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SK_DD.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SK_DD.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SK_DD.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SK_DD.gif'}) +TEMPLATE_SIREN_Sirenboss10 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Sirenboss10.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Sirenboss10.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Sirenboss10.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Sirenboss10.gif'}) TEMPLATE_SIREN_Soobrazitelny = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Soobrazitelny.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Soobrazitelny.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Soobrazitelny.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Soobrazitelny.gif'}) TEMPLATE_SIREN_Spee = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Spee.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Spee.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Spee.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Spee.gif'}) TEMPLATE_SIREN_SpeeIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SpeeIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SpeeIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SpeeIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SpeeIdol.gif'}) -TEMPLATE_SIREN_SS = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SS.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SS.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SS.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SS.gif'}) TEMPLATE_SIREN_Suzutsuki = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Suzutsuki.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Suzutsuki.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Suzutsuki.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Suzutsuki.gif'}) TEMPLATE_SIREN_Swordfish = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Swordfish.png', 'en': './assets/en/template/TEMPLATE_SIREN_Swordfish.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_Swordfish.png', 'tw': './assets/tw/template/TEMPLATE_SIREN_Swordfish.png'}) TEMPLATE_SIREN_Tirpitz = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Tirpitz.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Tirpitz.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Tirpitz.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Tirpitz.gif'}) @@ -211,6 +209,8 @@ TEMPLATE_SIREN_Z46 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z46.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Z46.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z46.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z46.gif'}) TEMPLATE_SIREN_Zuiho = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Zuiho.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Zuiho.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Zuiho.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Zuiho.gif'}) TEMPLATE_SIREN_Zuikaku = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Zuikaku.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Zuikaku.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Zuikaku.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Zuikaku.gif'}) +TEMPLATE_SIREN_shuguangjixie_huixing = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_shuguangjixie_huixing.gif', 'en': './assets/en/template/TEMPLATE_SIREN_shuguangjixie_huixing.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_shuguangjixie_huixing.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_shuguangjixie_huixing.gif'}) +TEMPLATE_SIREN_shuguangjixie_shanliu = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_shuguangjixie_shanliu.gif', 'en': './assets/en/template/TEMPLATE_SIREN_shuguangjixie_shanliu.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_shuguangjixie_shanliu.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_shuguangjixie_shanliu.gif'}) 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'}) From 42271e021dd1007f5b6a97f85c22d8a633cd853c Mon Sep 17 00:00:00 2001 From: RilyLC <94281898+RilyLC@users.noreply.github.com> Date: Thu, 25 Apr 2024 19:01:01 +0800 Subject: [PATCH 28/39] Upd:[TW]Event:The Fool's Scales (#3677) --- campaign/Readme.md | 3 ++- module/config/argument/args.json | 40 ++++++++++++++++---------------- module/config/i18n/zh-TW.json | 2 +- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/campaign/Readme.md b/campaign/Readme.md index 318c74f10a..8a134de720 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -190,4 +190,5 @@ 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 +| 20240411 | event 20220224 cn | Abyssal Refrain Rerun | 复刻深度回音 | Abyssal Refrain Rerun | 鳴動せし星霜の淵(復刻) | - | +| 20230817 | event 20230817 cn | The Fool's Scales | - | - | - | 愚者的天平 | diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 198ac121f7..17aa205ae2 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1703,12 +1703,12 @@ "display": "hide", "option_bold": [ "event_20220224_cn", - "event_20211111_cn" + "event_20230817_cn" ], "cn": "event_20220224_cn", "en": "event_20220224_cn", "jp": "event_20220224_cn", - "tw": "event_20211111_cn" + "tw": "event_20230817_cn" }, "Mode": { "type": "select", @@ -2036,12 +2036,12 @@ ], "option_bold": [ "event_20220224_cn", - "event_20211111_cn" + "event_20230817_cn" ], "cn": "event_20220224_cn", "en": "event_20220224_cn", "jp": "event_20220224_cn", - "tw": "event_20211111_cn" + "tw": "event_20230817_cn" }, "Mode": { "type": "select", @@ -2484,12 +2484,12 @@ ], "option_bold": [ "event_20220224_cn", - "event_20211111_cn" + "event_20230817_cn" ], "cn": "event_20220224_cn", "en": "event_20220224_cn", "jp": "event_20220224_cn", - "tw": "event_20211111_cn" + "tw": "event_20230817_cn" }, "Mode": { "type": "select", @@ -2894,8 +2894,8 @@ "raid_20240328" ], "option_bold": [ - "raid_20240328", - "raid_20230629" + "raid_20230629", + "raid_20240328" ], "cn": "raid_20240328", "en": "raid_20240328", @@ -3878,12 +3878,12 @@ ], "option_bold": [ "event_20220224_cn", - "event_20211111_cn" + "event_20230817_cn" ], "cn": "event_20220224_cn", "en": "event_20220224_cn", "jp": "event_20220224_cn", - "tw": "event_20211111_cn" + "tw": "event_20230817_cn" }, "Mode": { "type": "select", @@ -4343,12 +4343,12 @@ ], "option_bold": [ "event_20220224_cn", - "event_20211111_cn" + "event_20230817_cn" ], "cn": "event_20220224_cn", "en": "event_20220224_cn", "jp": "event_20220224_cn", - "tw": "event_20211111_cn" + "tw": "event_20230817_cn" }, "Mode": { "type": "select", @@ -4808,12 +4808,12 @@ ], "option_bold": [ "event_20220224_cn", - "event_20211111_cn" + "event_20230817_cn" ], "cn": "event_20220224_cn", "en": "event_20220224_cn", "jp": "event_20220224_cn", - "tw": "event_20211111_cn" + "tw": "event_20230817_cn" }, "Mode": { "type": "select", @@ -5273,12 +5273,12 @@ ], "option_bold": [ "event_20220224_cn", - "event_20211111_cn" + "event_20230817_cn" ], "cn": "event_20220224_cn", "en": "event_20220224_cn", "jp": "event_20220224_cn", - "tw": "event_20211111_cn" + "tw": "event_20230817_cn" }, "Mode": { "type": "select", @@ -5728,12 +5728,12 @@ ], "option_bold": [ "event_20220224_cn", - "event_20211111_cn" + "event_20230817_cn" ], "cn": "event_20220224_cn", "en": "event_20220224_cn", "jp": "event_20220224_cn", - "tw": "event_20211111_cn" + "tw": "event_20230817_cn" }, "Mode": { "type": "select", @@ -6135,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/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 7008809e52..c9eced9044 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -717,7 +717,7 @@ "event_20230223_cn": "湮燼塵墟", "event_20230525_cn": "Confluence of Nothingness", "event_20230803_cn": "奏響鳶尾之歌", - "event_20230817_cn": "The Fools Scales", + "event_20230817_cn": "愚者的天平", "event_20230914_cn": "Effulgence Before Eclipse", "event_20231026_cn": "Tempesta and the Fountain of Youth", "event_20231123_cn": "蒼閃忍法帖", From c5415d15bee976654619a9ec067249a8ba49d755 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 25 Apr 2024 19:05:22 +0800 Subject: [PATCH 29/39] Fix: [ALAS] Allow removing non-existent forwards and reverses --- module/device/connection.py | 41 ++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/module/device/connection.py b/module/device/connection.py index 0611d523b5..71ebbdeef7 100644 --- a/module/device/connection.py +++ b/module/device/connection.py @@ -506,30 +506,51 @@ def adb_reverse(self, remote): def adb_forward_remove(self, local): """ Equivalent to `adb -s forward --remove ` + No error raised when removing a non-existent forward + More about the commands send to ADB server, see: https://cs.android.com/android/platform/superproject/+/master:packages/modules/adb/SERVICES.TXT Args: local (str): Such as 'tcp:2437' """ - with self.adb_client._connect() as c: - list_cmd = f"host-serial:{self.serial}:killforward:{local}" - c.send_command(list_cmd) - c.check_okay() + try: + with self.adb_client._connect() as c: + list_cmd = f"host-serial:{self.serial}:killforward:{local}" + c.send_command(list_cmd) + c.check_okay() + except AdbError as e: + # No error raised when removing a non-existed forward + # adbutils.errors.AdbError: listener 'tcp:8888' not found + msg = str(e) + if re.search(r'listener .*? not found', msg): + logger.warning(f'{type(e).__name__}: {msg}') + else: + raise def adb_reverse_remove(self, local): """ Equivalent to `adb -s reverse --remove ` + No error raised when removing a non-existent reverse Args: local (str): Such as 'tcp:2437' """ - with self.adb_client._connect() as c: - c.send_command(f"host:transport:{self.serial}") - c.check_okay() - list_cmd = f"reverse:killforward:{local}" - c.send_command(list_cmd) - c.check_okay() + try: + with self.adb_client._connect() as c: + c.send_command(f"host:transport:{self.serial}") + c.check_okay() + list_cmd = f"reverse:killforward:{local}" + c.send_command(list_cmd) + c.check_okay() + except AdbError as e: + # No error raised when removing a non-existed forward + # adbutils.errors.AdbError: listener 'tcp:8888' not found + msg = str(e) + if re.search(r'listener .*? not found', msg): + logger.warning(f'{type(e).__name__}: {msg}') + else: + raise def adb_push(self, local, remote): """ From 75644f91d0b83885cb07f4b0cb47c9497a8bf541 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 26 Apr 2024 00:00:28 +0800 Subject: [PATCH 30/39] Add: Event entrance of Heart-Linking Harmony (event_20240425_cn) --- campaign/Readme.md | 3 +- module/config/argument/args.json | 80 +++++++++++++++++++------------- 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, 54 insertions(+), 33 deletions(-) diff --git a/campaign/Readme.md b/campaign/Readme.md index 8a134de720..fe11f8a74f 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -191,4 +191,5 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 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 | 鳴動せし星霜の淵(復刻) | - | -| 20230817 | event 20230817 cn | The Fool's Scales | - | - | - | 愚者的天平 | +| 20240425 | event 20230817 cn | The Fool's Scales | - | - | - | 愚者的天平 | +| 20240425 | event 20240425 cn | Heart-Linking Harmony | 共鸣的PASSION | Heart-Linking Harmony | - | - | diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 17aa205ae2..9871f01043 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -1698,15 +1698,17 @@ "event_20231026_cn", "event_20231123_cn", "event_20231221_cn", - "event_20240229_cn" + "event_20240229_cn", + "event_20240425_cn" ], "display": "hide", "option_bold": [ "event_20220224_cn", - "event_20230817_cn" + "event_20230817_cn", + "event_20240425_cn" ], - "cn": "event_20220224_cn", - "en": "event_20220224_cn", + "cn": "event_20240425_cn", + "en": "event_20240425_cn", "jp": "event_20220224_cn", "tw": "event_20230817_cn" }, @@ -2032,14 +2034,16 @@ "event_20231026_cn", "event_20231123_cn", "event_20231221_cn", - "event_20240229_cn" + "event_20240229_cn", + "event_20240425_cn" ], "option_bold": [ "event_20220224_cn", - "event_20230817_cn" + "event_20230817_cn", + "event_20240425_cn" ], - "cn": "event_20220224_cn", - "en": "event_20220224_cn", + "cn": "event_20240425_cn", + "en": "event_20240425_cn", "jp": "event_20220224_cn", "tw": "event_20230817_cn" }, @@ -2480,14 +2484,16 @@ "event_20231026_cn", "event_20231123_cn", "event_20231221_cn", - "event_20240229_cn" + "event_20240229_cn", + "event_20240425_cn" ], "option_bold": [ "event_20220224_cn", - "event_20230817_cn" + "event_20230817_cn", + "event_20240425_cn" ], - "cn": "event_20220224_cn", - "en": "event_20220224_cn", + "cn": "event_20240425_cn", + "en": "event_20240425_cn", "jp": "event_20220224_cn", "tw": "event_20230817_cn" }, @@ -3874,14 +3880,16 @@ "event_20231026_cn", "event_20231123_cn", "event_20231221_cn", - "event_20240229_cn" + "event_20240229_cn", + "event_20240425_cn" ], "option_bold": [ "event_20220224_cn", - "event_20230817_cn" + "event_20230817_cn", + "event_20240425_cn" ], - "cn": "event_20220224_cn", - "en": "event_20220224_cn", + "cn": "event_20240425_cn", + "en": "event_20240425_cn", "jp": "event_20220224_cn", "tw": "event_20230817_cn" }, @@ -4339,14 +4347,16 @@ "event_20231026_cn", "event_20231123_cn", "event_20231221_cn", - "event_20240229_cn" + "event_20240229_cn", + "event_20240425_cn" ], "option_bold": [ "event_20220224_cn", - "event_20230817_cn" + "event_20230817_cn", + "event_20240425_cn" ], - "cn": "event_20220224_cn", - "en": "event_20220224_cn", + "cn": "event_20240425_cn", + "en": "event_20240425_cn", "jp": "event_20220224_cn", "tw": "event_20230817_cn" }, @@ -4804,14 +4814,16 @@ "event_20231026_cn", "event_20231123_cn", "event_20231221_cn", - "event_20240229_cn" + "event_20240229_cn", + "event_20240425_cn" ], "option_bold": [ "event_20220224_cn", - "event_20230817_cn" + "event_20230817_cn", + "event_20240425_cn" ], - "cn": "event_20220224_cn", - "en": "event_20220224_cn", + "cn": "event_20240425_cn", + "en": "event_20240425_cn", "jp": "event_20220224_cn", "tw": "event_20230817_cn" }, @@ -5269,14 +5281,16 @@ "event_20231026_cn", "event_20231123_cn", "event_20231221_cn", - "event_20240229_cn" + "event_20240229_cn", + "event_20240425_cn" ], "option_bold": [ "event_20220224_cn", - "event_20230817_cn" + "event_20230817_cn", + "event_20240425_cn" ], - "cn": "event_20220224_cn", - "en": "event_20220224_cn", + "cn": "event_20240425_cn", + "en": "event_20240425_cn", "jp": "event_20220224_cn", "tw": "event_20230817_cn" }, @@ -5724,14 +5738,16 @@ "event_20231026_cn", "event_20231123_cn", "event_20231221_cn", - "event_20240229_cn" + "event_20240229_cn", + "event_20240425_cn" ], "option_bold": [ "event_20220224_cn", - "event_20230817_cn" + "event_20230817_cn", + "event_20240425_cn" ], - "cn": "event_20220224_cn", - "en": "event_20220224_cn", + "cn": "event_20240425_cn", + "en": "event_20240425_cn", "jp": "event_20220224_cn", "tw": "event_20230817_cn" }, diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 04edc66d1e..927dc0c21b 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -723,6 +723,7 @@ "event_20231123_cn": "The Ninja Scrolls: Azur Flash", "event_20231221_cn": "Light-Chasing Sea of Stars", "event_20240229_cn": "Snowrealm Peregrination", + "event_20240425_cn": "Heart-Linking Harmony", "raid_20200624": "Air Raid Drills with Essex Rerun", "raid_20210708": "Cross Wave rerun", "raid_20220127": "Mystery Investigation", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 954f323c6f..3185736706 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -723,6 +723,7 @@ "event_20231123_cn": "蒼閃忍法帖", "event_20231221_cn": "光追う星の海", "event_20240229_cn": "銀界遊廻", + "event_20240425_cn": "Heart-Linking Harmony", "raid_20200624": "特別演習超空強襲波(復刻)", "raid_20210708": "交錯する新たな波 (復刻)", "raid_20220127": "秘密事件調査", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index b0132a02a8..24e75d5dde 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -723,6 +723,7 @@ "event_20231123_cn": "苍闪忍法帖", "event_20231221_cn": "星海逐光", "event_20240229_cn": "雪境迷踪", + "event_20240425_cn": "共鸣的PASSION", "raid_20200624": "复刻特别演习埃塞克斯级", "raid_20210708": "复刻穿越彼方的水线", "raid_20220127": "演习神秘事件调查", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index c9eced9044..00b9a450b6 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -723,6 +723,7 @@ "event_20231123_cn": "蒼閃忍法帖", "event_20231221_cn": "Light-Chasing Sea of Stars", "event_20240229_cn": "Snowrealm Peregrination", + "event_20240425_cn": "Heart-Linking Harmony", "raid_20200624": "特別演習埃塞克斯級(復刻)", "raid_20210708": "復刻穿越彼方的水線", "raid_20220127": "演習神秘事件調查", From fbf7bc02c6f4e234ede68411984c964a02b40054 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 26 Apr 2024 02:36:53 +0800 Subject: [PATCH 31/39] Add: Heart-Linking Harmony chapter SP --- .../cn/template/TEMPLATE_SIREN_DidoIdol2.gif | Bin 0 -> 6398 bytes .../cn/template/TEMPLATE_SIREN_Elizabeth3.gif | Bin 0 -> 5266 bytes .../template/TEMPLATE_SIREN_GascogneIdol.gif | Bin 0 -> 4335 bytes assets/cn/template/TEMPLATE_SIREN_Laffey6.gif | Bin 0 -> 6444 bytes .../cn/template/TEMPLATE_SIREN_RoonIdol2.gif | Bin 0 -> 3244 bytes .../template/TEMPLATE_SIREN_SheffieldIdol.gif | Bin 0 -> 4383 bytes .../cn/template/TEMPLATE_SIREN_TaihouIdol.gif | Bin 0 -> 3043 bytes .../template/TEMPLATE_SIREN_TashkentIdol.gif | Bin 0 -> 4340 bytes assets/cn/template/TEMPLATE_SIREN_Z23_5.gif | Bin 0 -> 3293 bytes .../en/template/TEMPLATE_SIREN_DidoIdol2.gif | Bin 0 -> 6398 bytes .../en/template/TEMPLATE_SIREN_Elizabeth3.gif | Bin 0 -> 5266 bytes .../template/TEMPLATE_SIREN_GascogneIdol.gif | Bin 0 -> 4335 bytes assets/en/template/TEMPLATE_SIREN_Laffey6.gif | Bin 0 -> 6444 bytes .../en/template/TEMPLATE_SIREN_RoonIdol2.gif | Bin 0 -> 3244 bytes .../template/TEMPLATE_SIREN_SheffieldIdol.gif | Bin 0 -> 4383 bytes .../en/template/TEMPLATE_SIREN_TaihouIdol.gif | Bin 0 -> 3043 bytes .../template/TEMPLATE_SIREN_TashkentIdol.gif | Bin 0 -> 4340 bytes assets/en/template/TEMPLATE_SIREN_Z23_5.gif | Bin 0 -> 3293 bytes .../jp/template/TEMPLATE_SIREN_DidoIdol2.gif | Bin 0 -> 6398 bytes .../jp/template/TEMPLATE_SIREN_Elizabeth3.gif | Bin 0 -> 5266 bytes .../template/TEMPLATE_SIREN_GascogneIdol.gif | Bin 0 -> 4335 bytes assets/jp/template/TEMPLATE_SIREN_Laffey6.gif | Bin 0 -> 6444 bytes .../jp/template/TEMPLATE_SIREN_RoonIdol2.gif | Bin 0 -> 3244 bytes .../template/TEMPLATE_SIREN_SheffieldIdol.gif | Bin 0 -> 4383 bytes .../jp/template/TEMPLATE_SIREN_TaihouIdol.gif | Bin 0 -> 3043 bytes .../template/TEMPLATE_SIREN_TashkentIdol.gif | Bin 0 -> 4340 bytes assets/jp/template/TEMPLATE_SIREN_Z23_5.gif | Bin 0 -> 3293 bytes .../tw/template/TEMPLATE_SIREN_DidoIdol2.gif | Bin 0 -> 6398 bytes .../tw/template/TEMPLATE_SIREN_Elizabeth3.gif | Bin 0 -> 5266 bytes .../template/TEMPLATE_SIREN_GascogneIdol.gif | Bin 0 -> 4335 bytes assets/tw/template/TEMPLATE_SIREN_Laffey6.gif | Bin 0 -> 6444 bytes .../tw/template/TEMPLATE_SIREN_RoonIdol2.gif | Bin 0 -> 3244 bytes .../template/TEMPLATE_SIREN_SheffieldIdol.gif | Bin 0 -> 4383 bytes .../tw/template/TEMPLATE_SIREN_TaihouIdol.gif | Bin 0 -> 3043 bytes .../template/TEMPLATE_SIREN_TashkentIdol.gif | Bin 0 -> 4340 bytes assets/tw/template/TEMPLATE_SIREN_Z23_5.gif | Bin 0 -> 3293 bytes campaign/event_20240425_cn/campaign_base.py | 50 ++++++++++ campaign/event_20240425_cn/sp1.py | 87 ++++++++++++++++ campaign/event_20240425_cn/sp2.py | 78 +++++++++++++++ campaign/event_20240425_cn/sp3.py | 81 +++++++++++++++ campaign/event_20240425_cn/sp4.py | 81 +++++++++++++++ campaign/event_20240425_cn/sp5.py | 93 ++++++++++++++++++ module/template/assets.py | 11 ++- 43 files changed, 480 insertions(+), 1 deletion(-) create mode 100644 assets/cn/template/TEMPLATE_SIREN_DidoIdol2.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_Elizabeth3.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_GascogneIdol.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_Laffey6.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_RoonIdol2.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_TaihouIdol.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_TashkentIdol.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_Z23_5.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_DidoIdol2.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_Elizabeth3.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_GascogneIdol.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_Laffey6.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_RoonIdol2.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_SheffieldIdol.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_TaihouIdol.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_TashkentIdol.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_Z23_5.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_DidoIdol2.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_Elizabeth3.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_GascogneIdol.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_Laffey6.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_RoonIdol2.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_SheffieldIdol.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_TaihouIdol.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_TashkentIdol.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_Z23_5.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_DidoIdol2.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_Elizabeth3.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_GascogneIdol.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_Laffey6.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_RoonIdol2.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_SheffieldIdol.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_TaihouIdol.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_TashkentIdol.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_Z23_5.gif create mode 100644 campaign/event_20240425_cn/campaign_base.py create mode 100644 campaign/event_20240425_cn/sp1.py create mode 100644 campaign/event_20240425_cn/sp2.py create mode 100644 campaign/event_20240425_cn/sp3.py create mode 100644 campaign/event_20240425_cn/sp4.py create mode 100644 campaign/event_20240425_cn/sp5.py diff --git a/assets/cn/template/TEMPLATE_SIREN_DidoIdol2.gif b/assets/cn/template/TEMPLATE_SIREN_DidoIdol2.gif new file mode 100644 index 0000000000000000000000000000000000000000..32eac9a5f12aa6eb8b203d93409a2467faab7970 GIT binary patch literal 6398 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 U|M@`Iu#Y9Vns6-5frI(~2TN4TlmGw# literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_SIREN_Elizabeth3.gif b/assets/cn/template/TEMPLATE_SIREN_Elizabeth3.gif new file mode 100644 index 0000000000000000000000000000000000000000..657edf629cf28c1447096216ee2c92584496a890 GIT binary patch literal 5266 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 literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_SIREN_GascogneIdol.gif b/assets/cn/template/TEMPLATE_SIREN_GascogneIdol.gif new file mode 100644 index 0000000000000000000000000000000000000000..377fc0be4131f17c280b9c826e638bec9317d19c GIT binary patch literal 4335 zcmeI#`B%*Q1IO{tEKSq2O$$wnnwj?1G=*uQ+1f}ZLY8Qgk<>(}_%c(|w92&b70I-q zoTLb4ovD;aCOVc5U!_He7F!X0-_GZpIUUZuzuo)Gz4H&e=kq@2{W#B;x33q?B~%mA zhSDHtdV2cDk00N^f1jF~`u6SH*RNkECMLdo`SSVm=TDzLef;?G!-o&!B@bKHWZ{NImGc+{x>eZ|M{{G(H-kzSG7cX8sfByX0vuEAi-A|r8dHneC zqeqXry1E`deE8tO1G!w@-rnBQ(sJw8t)`|XnM`)=+O?}!uU@%wrJ$EiElIHB~4Srlh3o-@kwF-n~glNxOFK+OcCt zTwENF$J@GfYgAMem&=WahzJV{+puB7nl)YUmg$;z~ONG{QP`7JggRjoUK}(V1+F1}lLW+KE=nbD<;6+d3OrX-L-% zcD21sM1e!VSAxuunaotO&XGVIlEy5TC}EXEGD^=Nx*Dj7wKpjj(?xz(5%jXwd`%2< z__bhDN0C0xn%2uO_e3Itt0S!YJkyyda@a&Y52EL|t{=@-VbMu^EFL02A+nAlx7cnr zZ({RVCw+Z=uqCh}PoF*oiU2=4J3E0N_wV1o zckkYvJ9k=JTLC1^&CM_*H*em&e*HRtq`tl$CZx8u7ASJ+)G1&_Nl6JXqy30SJNdNKQ@`2n2jS9}u!<&mN#iLP7$7WarME zuqCmvu`w|*3Qjg}-W(Yj2~Y_S4+pMP)PycqVz%gYP)hRI~Y%mL~c z8X5w4bai!gbae1|yoQDb27~##p4mU~9H534P@{(rK`02~iP87T5CUlxSWibCu-|yQ zPOw9mu5K1Af0ohb)owI5{!WdoGj+*-7p3<1lUB60>r>XINAvO`L|HazkNR^>Pb!J9 znvw(v8KIov5s$r9NGUKAccrQO3P2GipJr0EM;MhYlb$vT?J5F)HIa_&*~9bja^sjE#+f z4gnDY7YIxSD3HOyK@cIp4iF)V`~cyhP@|)x1GLB8yLW*dZEbC^9gU5RQmGW!apT4f zkRpH&V8?|E7vKUpckbNG2mu8GG$}7HFD)%SapD9h5CBS1Q4wqk93e0w2M!zn5ds{6 z5fO<*up=-cAVs!s-wqcDP$N1z8jcV^#>R~sL4+u!8RIK*PLw^JeNWckWyeC%_1hCDzu~R#sM)mX@GT%+1X~p8zaCq8J++!-+C` z_G|?fib}y^u}Vrx|HKFV*MBo0LtU5P!wCTqhz#PALm0_vDjK>zHFRXQdye*}(N1QX zCXrnpuhoUUPoPB>$ZH>X$xA)9bktSq3@*+i+XZsQ7-c?0_ZTU6OQ(#fWJxWUqLWjW zm9VU=c$;jkc%Pg=Y8lA(Hg2qXiGoK3a$ILNh zc2s9)2$DcpGg~yoDeKQL_6o7X&*vp8<5iTRs@k+H#U;8z6M_t}Nr*rQb7&=~0ZgwF ztC&5>horiW>jo1lnFM~aE*Y&0^@QRH3?2lI389bls#IHbhoAOK!Ki5j2FZ`r8?$%! zIGZF8$cr-?HT4K_U9Xm+ly#yBYnHP-)%2WdCMHcSiGOIu%mo9>q1Y}k8(_WwHo$5b z7#Mi@@+F)ZioF6#1D-7KQUPFq(omQIuNKf4z==zjE`g;2I{^y;rU_gczy>%reh~u9 z6nLZj-WXt}03j4h1;hp@jeYy}!KIOyn7DiQZcrNW@$q1?05G;~+cwh-kQpH%A+Q;W zx&UB+x=@$_>H?(2k|j&PngLTrkrtpUKvDcrPRv|0GpEcO*wpWQb3?c&t6<)u4s7>@ zQyoX0)0U=ud)FL!18Y##+sfW6Iw*|Mrln6DR>Sp+*rGCR@z8A^)yLJ^@%B{YruvBoiiQDC}qyj@m{Y+@iRd0Yq|+JSQj{ydc! zHwvX2+ThXR?E_wh?i(dW>=1HmJ`O{f8k3<8XxS^9`}s1;*~w7sQNJ-KjGO_HuhA00 zILUSmz+Ln;m3-L>U7Xcbsgs^_45Ln@R literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_SIREN_Laffey6.gif b/assets/cn/template/TEMPLATE_SIREN_Laffey6.gif new file mode 100644 index 0000000000000000000000000000000000000000..54094373fd06659477fdd513845f7d8441877e59 GIT binary patch literal 6444 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 Wk6LM7aW+Zp?8r8>&V);u+kXJ6_d&A& literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_SIREN_RoonIdol2.gif b/assets/cn/template/TEMPLATE_SIREN_RoonIdol2.gif new file mode 100644 index 0000000000000000000000000000000000000000..e24b7e40f0a41da14d4dbedad99eb4134fdd52b0 GIT binary patch literal 3244 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 literal 0 HcmV?d00001 diff --git a/assets/cn/template/TEMPLATE_SIREN_TashkentIdol.gif b/assets/cn/template/TEMPLATE_SIREN_TashkentIdol.gif new file mode 100644 index 0000000000000000000000000000000000000000..b54d0575a10fea76d0a5f04da9e6376baf9bfc6a GIT binary patch literal 4340 zcmeI#c{J4j9>?*|cgBnnikZ=!a2aD{)bK+RE*eZjktkQ2+(Am(R4PipW;IiZ8L3ce zly>c#N;Q@=q>?u6w9>9srTV>p=X=igIKS@i{@Fj>@1Ng)zRNkE$9cX&hl_lC6Z#-J zQX%yH`}c3(zJ2}rwY$6f^XJc>K7H!y>iYQcTLUXlZG=e*OBjYuBz^xzg0s zbn)WF^XJbuHa4C+cg|oioIQKCuCDIPnKLytHPzMCRaI4by}q)t^2CV~$B!RBcI?>E zqeqV%Idb^$;R6Q_?BBnC-@bi&_wL=ZXV324yUWYVckSA>bLY};7#CXq;%E?t_Hm9=>B;zf%VEm*K1Jw1Kiym@J9X|rd~o-t!aYHDgq zN=kBaa$;hlSS*fxc;)Dqk#*Q5u6B9FL%$U)mM@L0PMMg$OL_~y#hmROBV)*dk zVPRoGK|w=@4h;+p^!NAo_4W1f@fk8?h?kd_r>CcfhliV+8=ueT@pz7oj%+sD-rnBM z&W^=mF_}zDOH1_s>nHvJhwrA5!(zsS1Vs(=baN+T-@hY=PewEccm@8Sukq(GK{U9j z(2~dqkvwGOnHbwFr?;Oj#zdB^qC0sjvZ{~>N%#@6=Nil?%)Br6wuR+>1zFu&lv8fN z$SU&z&i-y{4hKm&q3P)@m&z1D$oys&(w#BxS%Pz^q-^s>Buq50hw2NY@(N^BJ0S0W)P zO-wmHYC#*4*eVQ|_kK}eLXtFpV*L+ALM zYBlP(x+-Z(<3|5E%^KfNa#1f<;GP)?^Hfnbfs%$4+q_`zOS{3Tk6AKCGA+-kpE^c` zDa}g)7f~rjKmIUPPgTBr`2w(jDjz<4c=ztzn>TL=RbIY)`QpV3+?Kzv32>mD<|cp0J!gefrd?QzuWJ>?sV`a_G>Zg9i`x zN6Q(b3U8odIM*Lqml^Ay6X_2tb>FfB?`2sPXpp25LZlb|#fH5bfKAJ6%V)U4tj@KmfA~%PIL#3Fo%9I;>g^x8k)tT@oq_U*> z@_H?u`;vKsLl&&&rKXj4X=_9|&j0of6G+L!)o4OoyHA2+y*UXXuAzA|D&UMQNU^wI zE0>m;cDc9ibI_Z6#8x)4_LDHg=ct8qP-|5#xt}#ki%x2=F|w%Kw_A@1C=4WFnxvJf z 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 U|M@`Iu#Y9Vns6-5frI(~2TN4TlmGw# literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_Elizabeth3.gif b/assets/en/template/TEMPLATE_SIREN_Elizabeth3.gif new file mode 100644 index 0000000000000000000000000000000000000000..657edf629cf28c1447096216ee2c92584496a890 GIT binary patch literal 5266 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 literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_GascogneIdol.gif b/assets/en/template/TEMPLATE_SIREN_GascogneIdol.gif new file mode 100644 index 0000000000000000000000000000000000000000..377fc0be4131f17c280b9c826e638bec9317d19c GIT binary patch literal 4335 zcmeI#`B%*Q1IO{tEKSq2O$$wnnwj?1G=*uQ+1f}ZLY8Qgk<>(}_%c(|w92&b70I-q zoTLb4ovD;aCOVc5U!_He7F!X0-_GZpIUUZuzuo)Gz4H&e=kq@2{W#B;x33q?B~%mA zhSDHtdV2cDk00N^f1jF~`u6SH*RNkECMLdo`SSVm=TDzLef;?G!-o&!B@bKHWZ{NImGc+{x>eZ|M{{G(H-kzSG7cX8sfByX0vuEAi-A|r8dHneC zqeqXry1E`deE8tO1G!w@-rnBQ(sJw8t)`|XnM`)=+O?}!uU@%wrJ$EiElIHB~4Srlh3o-@kwF-n~glNxOFK+OcCt zTwENF$J@GfYgAMem&=WahzJV{+puB7nl)YUmg$;z~ONG{QP`7JggRjoUK}(V1+F1}lLW+KE=nbD<;6+d3OrX-L-% zcD21sM1e!VSAxuunaotO&XGVIlEy5TC}EXEGD^=Nx*Dj7wKpjj(?xz(5%jXwd`%2< z__bhDN0C0xn%2uO_e3Itt0S!YJkyyda@a&Y52EL|t{=@-VbMu^EFL02A+nAlx7cnr zZ({RVCw+Z=uqCh}PoF*oiU2=4J3E0N_wV1o zckkYvJ9k=JTLC1^&CM_*H*em&e*HRtq`tl$CZx8u7ASJ+)G1&_Nl6JXqy30SJNdNKQ@`2n2jS9}u!<&mN#iLP7$7WarME zuqCmvu`w|*3Qjg}-W(Yj2~Y_S4+pMP)PycqVz%gYP)hRI~Y%mL~c z8X5w4bai!gbae1|yoQDb27~##p4mU~9H534P@{(rK`02~iP87T5CUlxSWibCu-|yQ zPOw9mu5K1Af0ohb)owI5{!WdoGj+*-7p3<1lUB60>r>XINAvO`L|HazkNR^>Pb!J9 znvw(v8KIov5s$r9NGUKAccrQO3P2GipJr0EM;MhYlb$vT?J5F)HIa_&*~9bja^sjE#+f z4gnDY7YIxSD3HOyK@cIp4iF)V`~cyhP@|)x1GLB8yLW*dZEbC^9gU5RQmGW!apT4f zkRpH&V8?|E7vKUpckbNG2mu8GG$}7HFD)%SapD9h5CBS1Q4wqk93e0w2M!zn5ds{6 z5fO<*up=-cAVs!s-wqcDP$N1z8jcV^#>R~sL4+u!8RIK*PLw^JeNWckWyeC%_1hCDzu~R#sM)mX@GT%+1X~p8zaCq8J++!-+C` z_G|?fib}y^u}Vrx|HKFV*MBo0LtU5P!wCTqhz#PALm0_vDjK>zHFRXQdye*}(N1QX zCXrnpuhoUUPoPB>$ZH>X$xA)9bktSq3@*+i+XZsQ7-c?0_ZTU6OQ(#fWJxWUqLWjW zm9VU=c$;jkc%Pg=Y8lA(Hg2qXiGoK3a$ILNh zc2s9)2$DcpGg~yoDeKQL_6o7X&*vp8<5iTRs@k+H#U;8z6M_t}Nr*rQb7&=~0ZgwF ztC&5>horiW>jo1lnFM~aE*Y&0^@QRH3?2lI389bls#IHbhoAOK!Ki5j2FZ`r8?$%! zIGZF8$cr-?HT4K_U9Xm+ly#yBYnHP-)%2WdCMHcSiGOIu%mo9>q1Y}k8(_WwHo$5b z7#Mi@@+F)ZioF6#1D-7KQUPFq(omQIuNKf4z==zjE`g;2I{^y;rU_gczy>%reh~u9 z6nLZj-WXt}03j4h1;hp@jeYy}!KIOyn7DiQZcrNW@$q1?05G;~+cwh-kQpH%A+Q;W zx&UB+x=@$_>H?(2k|j&PngLTrkrtpUKvDcrPRv|0GpEcO*wpWQb3?c&t6<)u4s7>@ zQyoX0)0U=ud)FL!18Y##+sfW6Iw*|Mrln6DR>Sp+*rGCR@z8A^)yLJ^@%B{YruvBoiiQDC}qyj@m{Y+@iRd0Yq|+JSQj{ydc! zHwvX2+ThXR?E_wh?i(dW>=1HmJ`O{f8k3<8XxS^9`}s1;*~w7sQNJ-KjGO_HuhA00 zILUSmz+Ln;m3-L>U7Xcbsgs^_45Ln@R literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_Laffey6.gif b/assets/en/template/TEMPLATE_SIREN_Laffey6.gif new file mode 100644 index 0000000000000000000000000000000000000000..54094373fd06659477fdd513845f7d8441877e59 GIT binary patch literal 6444 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 Wk6LM7aW+Zp?8r8>&V);u+kXJ6_d&A& literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_RoonIdol2.gif b/assets/en/template/TEMPLATE_SIREN_RoonIdol2.gif new file mode 100644 index 0000000000000000000000000000000000000000..e24b7e40f0a41da14d4dbedad99eb4134fdd52b0 GIT binary patch literal 3244 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 literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_TashkentIdol.gif b/assets/en/template/TEMPLATE_SIREN_TashkentIdol.gif new file mode 100644 index 0000000000000000000000000000000000000000..b54d0575a10fea76d0a5f04da9e6376baf9bfc6a GIT binary patch literal 4340 zcmeI#c{J4j9>?*|cgBnnikZ=!a2aD{)bK+RE*eZjktkQ2+(Am(R4PipW;IiZ8L3ce zly>c#N;Q@=q>?u6w9>9srTV>p=X=igIKS@i{@Fj>@1Ng)zRNkE$9cX&hl_lC6Z#-J zQX%yH`}c3(zJ2}rwY$6f^XJc>K7H!y>iYQcTLUXlZG=e*OBjYuBz^xzg0s zbn)WF^XJbuHa4C+cg|oioIQKCuCDIPnKLytHPzMCRaI4by}q)t^2CV~$B!RBcI?>E zqeqV%Idb^$;R6Q_?BBnC-@bi&_wL=ZXV324yUWYVckSA>bLY};7#CXq;%E?t_Hm9=>B;zf%VEm*K1Jw1Kiym@J9X|rd~o-t!aYHDgq zN=kBaa$;hlSS*fxc;)Dqk#*Q5u6B9FL%$U)mM@L0PMMg$OL_~y#hmROBV)*dk zVPRoGK|w=@4h;+p^!NAo_4W1f@fk8?h?kd_r>CcfhliV+8=ueT@pz7oj%+sD-rnBM z&W^=mF_}zDOH1_s>nHvJhwrA5!(zsS1Vs(=baN+T-@hY=PewEccm@8Sukq(GK{U9j z(2~dqkvwGOnHbwFr?;Oj#zdB^qC0sjvZ{~>N%#@6=Nil?%)Br6wuR+>1zFu&lv8fN z$SU&z&i-y{4hKm&q3P)@m&z1D$oys&(w#BxS%Pz^q-^s>Buq50hw2NY@(N^BJ0S0W)P zO-wmHYC#*4*eVQ|_kK}eLXtFpV*L+ALM zYBlP(x+-Z(<3|5E%^KfNa#1f<;GP)?^Hfnbfs%$4+q_`zOS{3Tk6AKCGA+-kpE^c` zDa}g)7f~rjKmIUPPgTBr`2w(jDjz<4c=ztzn>TL=RbIY)`QpV3+?Kzv32>mD<|cp0J!gefrd?QzuWJ>?sV`a_G>Zg9i`x zN6Q(b3U8odIM*Lqml^Ay6X_2tb>FfB?`2sPXpp25LZlb|#fH5bfKAJ6%V)U4tj@KmfA~%PIL#3Fo%9I;>g^x8k)tT@oq_U*> z@_H?u`;vKsLl&&&rKXj4X=_9|&j0of6G+L!)o4OoyHA2+y*UXXuAzA|D&UMQNU^wI zE0>m;cDc9ibI_Z6#8x)4_LDHg=ct8qP-|5#xt}#ki%x2=F|w%Kw_A@1C=4WFnxvJf z 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 U|M@`Iu#Y9Vns6-5frI(~2TN4TlmGw# literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_Elizabeth3.gif b/assets/jp/template/TEMPLATE_SIREN_Elizabeth3.gif new file mode 100644 index 0000000000000000000000000000000000000000..657edf629cf28c1447096216ee2c92584496a890 GIT binary patch literal 5266 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 literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_GascogneIdol.gif b/assets/jp/template/TEMPLATE_SIREN_GascogneIdol.gif new file mode 100644 index 0000000000000000000000000000000000000000..377fc0be4131f17c280b9c826e638bec9317d19c GIT binary patch literal 4335 zcmeI#`B%*Q1IO{tEKSq2O$$wnnwj?1G=*uQ+1f}ZLY8Qgk<>(}_%c(|w92&b70I-q zoTLb4ovD;aCOVc5U!_He7F!X0-_GZpIUUZuzuo)Gz4H&e=kq@2{W#B;x33q?B~%mA zhSDHtdV2cDk00N^f1jF~`u6SH*RNkECMLdo`SSVm=TDzLef;?G!-o&!B@bKHWZ{NImGc+{x>eZ|M{{G(H-kzSG7cX8sfByX0vuEAi-A|r8dHneC zqeqXry1E`deE8tO1G!w@-rnBQ(sJw8t)`|XnM`)=+O?}!uU@%wrJ$EiElIHB~4Srlh3o-@kwF-n~glNxOFK+OcCt zTwENF$J@GfYgAMem&=WahzJV{+puB7nl)YUmg$;z~ONG{QP`7JggRjoUK}(V1+F1}lLW+KE=nbD<;6+d3OrX-L-% zcD21sM1e!VSAxuunaotO&XGVIlEy5TC}EXEGD^=Nx*Dj7wKpjj(?xz(5%jXwd`%2< z__bhDN0C0xn%2uO_e3Itt0S!YJkyyda@a&Y52EL|t{=@-VbMu^EFL02A+nAlx7cnr zZ({RVCw+Z=uqCh}PoF*oiU2=4J3E0N_wV1o zckkYvJ9k=JTLC1^&CM_*H*em&e*HRtq`tl$CZx8u7ASJ+)G1&_Nl6JXqy30SJNdNKQ@`2n2jS9}u!<&mN#iLP7$7WarME zuqCmvu`w|*3Qjg}-W(Yj2~Y_S4+pMP)PycqVz%gYP)hRI~Y%mL~c z8X5w4bai!gbae1|yoQDb27~##p4mU~9H534P@{(rK`02~iP87T5CUlxSWibCu-|yQ zPOw9mu5K1Af0ohb)owI5{!WdoGj+*-7p3<1lUB60>r>XINAvO`L|HazkNR^>Pb!J9 znvw(v8KIov5s$r9NGUKAccrQO3P2GipJr0EM;MhYlb$vT?J5F)HIa_&*~9bja^sjE#+f z4gnDY7YIxSD3HOyK@cIp4iF)V`~cyhP@|)x1GLB8yLW*dZEbC^9gU5RQmGW!apT4f zkRpH&V8?|E7vKUpckbNG2mu8GG$}7HFD)%SapD9h5CBS1Q4wqk93e0w2M!zn5ds{6 z5fO<*up=-cAVs!s-wqcDP$N1z8jcV^#>R~sL4+u!8RIK*PLw^JeNWckWyeC%_1hCDzu~R#sM)mX@GT%+1X~p8zaCq8J++!-+C` z_G|?fib}y^u}Vrx|HKFV*MBo0LtU5P!wCTqhz#PALm0_vDjK>zHFRXQdye*}(N1QX zCXrnpuhoUUPoPB>$ZH>X$xA)9bktSq3@*+i+XZsQ7-c?0_ZTU6OQ(#fWJxWUqLWjW zm9VU=c$;jkc%Pg=Y8lA(Hg2qXiGoK3a$ILNh zc2s9)2$DcpGg~yoDeKQL_6o7X&*vp8<5iTRs@k+H#U;8z6M_t}Nr*rQb7&=~0ZgwF ztC&5>horiW>jo1lnFM~aE*Y&0^@QRH3?2lI389bls#IHbhoAOK!Ki5j2FZ`r8?$%! zIGZF8$cr-?HT4K_U9Xm+ly#yBYnHP-)%2WdCMHcSiGOIu%mo9>q1Y}k8(_WwHo$5b z7#Mi@@+F)ZioF6#1D-7KQUPFq(omQIuNKf4z==zjE`g;2I{^y;rU_gczy>%reh~u9 z6nLZj-WXt}03j4h1;hp@jeYy}!KIOyn7DiQZcrNW@$q1?05G;~+cwh-kQpH%A+Q;W zx&UB+x=@$_>H?(2k|j&PngLTrkrtpUKvDcrPRv|0GpEcO*wpWQb3?c&t6<)u4s7>@ zQyoX0)0U=ud)FL!18Y##+sfW6Iw*|Mrln6DR>Sp+*rGCR@z8A^)yLJ^@%B{YruvBoiiQDC}qyj@m{Y+@iRd0Yq|+JSQj{ydc! zHwvX2+ThXR?E_wh?i(dW>=1HmJ`O{f8k3<8XxS^9`}s1;*~w7sQNJ-KjGO_HuhA00 zILUSmz+Ln;m3-L>U7Xcbsgs^_45Ln@R literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_Laffey6.gif b/assets/jp/template/TEMPLATE_SIREN_Laffey6.gif new file mode 100644 index 0000000000000000000000000000000000000000..54094373fd06659477fdd513845f7d8441877e59 GIT binary patch literal 6444 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 Wk6LM7aW+Zp?8r8>&V);u+kXJ6_d&A& literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_RoonIdol2.gif b/assets/jp/template/TEMPLATE_SIREN_RoonIdol2.gif new file mode 100644 index 0000000000000000000000000000000000000000..e24b7e40f0a41da14d4dbedad99eb4134fdd52b0 GIT binary patch literal 3244 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 literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_TashkentIdol.gif b/assets/jp/template/TEMPLATE_SIREN_TashkentIdol.gif new file mode 100644 index 0000000000000000000000000000000000000000..b54d0575a10fea76d0a5f04da9e6376baf9bfc6a GIT binary patch literal 4340 zcmeI#c{J4j9>?*|cgBnnikZ=!a2aD{)bK+RE*eZjktkQ2+(Am(R4PipW;IiZ8L3ce zly>c#N;Q@=q>?u6w9>9srTV>p=X=igIKS@i{@Fj>@1Ng)zRNkE$9cX&hl_lC6Z#-J zQX%yH`}c3(zJ2}rwY$6f^XJc>K7H!y>iYQcTLUXlZG=e*OBjYuBz^xzg0s zbn)WF^XJbuHa4C+cg|oioIQKCuCDIPnKLytHPzMCRaI4by}q)t^2CV~$B!RBcI?>E zqeqV%Idb^$;R6Q_?BBnC-@bi&_wL=ZXV324yUWYVckSA>bLY};7#CXq;%E?t_Hm9=>B;zf%VEm*K1Jw1Kiym@J9X|rd~o-t!aYHDgq zN=kBaa$;hlSS*fxc;)Dqk#*Q5u6B9FL%$U)mM@L0PMMg$OL_~y#hmROBV)*dk zVPRoGK|w=@4h;+p^!NAo_4W1f@fk8?h?kd_r>CcfhliV+8=ueT@pz7oj%+sD-rnBM z&W^=mF_}zDOH1_s>nHvJhwrA5!(zsS1Vs(=baN+T-@hY=PewEccm@8Sukq(GK{U9j z(2~dqkvwGOnHbwFr?;Oj#zdB^qC0sjvZ{~>N%#@6=Nil?%)Br6wuR+>1zFu&lv8fN z$SU&z&i-y{4hKm&q3P)@m&z1D$oys&(w#BxS%Pz^q-^s>Buq50hw2NY@(N^BJ0S0W)P zO-wmHYC#*4*eVQ|_kK}eLXtFpV*L+ALM zYBlP(x+-Z(<3|5E%^KfNa#1f<;GP)?^Hfnbfs%$4+q_`zOS{3Tk6AKCGA+-kpE^c` zDa}g)7f~rjKmIUPPgTBr`2w(jDjz<4c=ztzn>TL=RbIY)`QpV3+?Kzv32>mD<|cp0J!gefrd?QzuWJ>?sV`a_G>Zg9i`x zN6Q(b3U8odIM*Lqml^Ay6X_2tb>FfB?`2sPXpp25LZlb|#fH5bfKAJ6%V)U4tj@KmfA~%PIL#3Fo%9I;>g^x8k)tT@oq_U*> z@_H?u`;vKsLl&&&rKXj4X=_9|&j0of6G+L!)o4OoyHA2+y*UXXuAzA|D&UMQNU^wI zE0>m;cDc9ibI_Z6#8x)4_LDHg=ct8qP-|5#xt}#ki%x2=F|w%Kw_A@1C=4WFnxvJf z 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 U|M@`Iu#Y9Vns6-5frI(~2TN4TlmGw# literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_Elizabeth3.gif b/assets/tw/template/TEMPLATE_SIREN_Elizabeth3.gif new file mode 100644 index 0000000000000000000000000000000000000000..657edf629cf28c1447096216ee2c92584496a890 GIT binary patch literal 5266 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 literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_GascogneIdol.gif b/assets/tw/template/TEMPLATE_SIREN_GascogneIdol.gif new file mode 100644 index 0000000000000000000000000000000000000000..377fc0be4131f17c280b9c826e638bec9317d19c GIT binary patch literal 4335 zcmeI#`B%*Q1IO{tEKSq2O$$wnnwj?1G=*uQ+1f}ZLY8Qgk<>(}_%c(|w92&b70I-q zoTLb4ovD;aCOVc5U!_He7F!X0-_GZpIUUZuzuo)Gz4H&e=kq@2{W#B;x33q?B~%mA zhSDHtdV2cDk00N^f1jF~`u6SH*RNkECMLdo`SSVm=TDzLef;?G!-o&!B@bKHWZ{NImGc+{x>eZ|M{{G(H-kzSG7cX8sfByX0vuEAi-A|r8dHneC zqeqXry1E`deE8tO1G!w@-rnBQ(sJw8t)`|XnM`)=+O?}!uU@%wrJ$EiElIHB~4Srlh3o-@kwF-n~glNxOFK+OcCt zTwENF$J@GfYgAMem&=WahzJV{+puB7nl)YUmg$;z~ONG{QP`7JggRjoUK}(V1+F1}lLW+KE=nbD<;6+d3OrX-L-% zcD21sM1e!VSAxuunaotO&XGVIlEy5TC}EXEGD^=Nx*Dj7wKpjj(?xz(5%jXwd`%2< z__bhDN0C0xn%2uO_e3Itt0S!YJkyyda@a&Y52EL|t{=@-VbMu^EFL02A+nAlx7cnr zZ({RVCw+Z=uqCh}PoF*oiU2=4J3E0N_wV1o zckkYvJ9k=JTLC1^&CM_*H*em&e*HRtq`tl$CZx8u7ASJ+)G1&_Nl6JXqy30SJNdNKQ@`2n2jS9}u!<&mN#iLP7$7WarME zuqCmvu`w|*3Qjg}-W(Yj2~Y_S4+pMP)PycqVz%gYP)hRI~Y%mL~c z8X5w4bai!gbae1|yoQDb27~##p4mU~9H534P@{(rK`02~iP87T5CUlxSWibCu-|yQ zPOw9mu5K1Af0ohb)owI5{!WdoGj+*-7p3<1lUB60>r>XINAvO`L|HazkNR^>Pb!J9 znvw(v8KIov5s$r9NGUKAccrQO3P2GipJr0EM;MhYlb$vT?J5F)HIa_&*~9bja^sjE#+f z4gnDY7YIxSD3HOyK@cIp4iF)V`~cyhP@|)x1GLB8yLW*dZEbC^9gU5RQmGW!apT4f zkRpH&V8?|E7vKUpckbNG2mu8GG$}7HFD)%SapD9h5CBS1Q4wqk93e0w2M!zn5ds{6 z5fO<*up=-cAVs!s-wqcDP$N1z8jcV^#>R~sL4+u!8RIK*PLw^JeNWckWyeC%_1hCDzu~R#sM)mX@GT%+1X~p8zaCq8J++!-+C` z_G|?fib}y^u}Vrx|HKFV*MBo0LtU5P!wCTqhz#PALm0_vDjK>zHFRXQdye*}(N1QX zCXrnpuhoUUPoPB>$ZH>X$xA)9bktSq3@*+i+XZsQ7-c?0_ZTU6OQ(#fWJxWUqLWjW zm9VU=c$;jkc%Pg=Y8lA(Hg2qXiGoK3a$ILNh zc2s9)2$DcpGg~yoDeKQL_6o7X&*vp8<5iTRs@k+H#U;8z6M_t}Nr*rQb7&=~0ZgwF ztC&5>horiW>jo1lnFM~aE*Y&0^@QRH3?2lI389bls#IHbhoAOK!Ki5j2FZ`r8?$%! zIGZF8$cr-?HT4K_U9Xm+ly#yBYnHP-)%2WdCMHcSiGOIu%mo9>q1Y}k8(_WwHo$5b z7#Mi@@+F)ZioF6#1D-7KQUPFq(omQIuNKf4z==zjE`g;2I{^y;rU_gczy>%reh~u9 z6nLZj-WXt}03j4h1;hp@jeYy}!KIOyn7DiQZcrNW@$q1?05G;~+cwh-kQpH%A+Q;W zx&UB+x=@$_>H?(2k|j&PngLTrkrtpUKvDcrPRv|0GpEcO*wpWQb3?c&t6<)u4s7>@ zQyoX0)0U=ud)FL!18Y##+sfW6Iw*|Mrln6DR>Sp+*rGCR@z8A^)yLJ^@%B{YruvBoiiQDC}qyj@m{Y+@iRd0Yq|+JSQj{ydc! zHwvX2+ThXR?E_wh?i(dW>=1HmJ`O{f8k3<8XxS^9`}s1;*~w7sQNJ-KjGO_HuhA00 zILUSmz+Ln;m3-L>U7Xcbsgs^_45Ln@R literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_Laffey6.gif b/assets/tw/template/TEMPLATE_SIREN_Laffey6.gif new file mode 100644 index 0000000000000000000000000000000000000000..54094373fd06659477fdd513845f7d8441877e59 GIT binary patch literal 6444 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 Wk6LM7aW+Zp?8r8>&V);u+kXJ6_d&A& literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_RoonIdol2.gif b/assets/tw/template/TEMPLATE_SIREN_RoonIdol2.gif new file mode 100644 index 0000000000000000000000000000000000000000..e24b7e40f0a41da14d4dbedad99eb4134fdd52b0 GIT binary patch literal 3244 zcmeI!`BT#C9>DQ0qKJr!EbbZL0-6~jZs7td?iH?CQmLs2Pg-u7bM-ogsHlZ{vXfdF zE}6H?v^zC6SqW+}<>|P!*>b&VrnV_r+0FDm4KvJ{b51|@ThAZxJTss9Jg<5C2l~0X z#pyvSTnR)Tz#q;OS$H&K?J$v@_>C-1qo;-T==;6bMBO@b2Lqm7(-o1VM_RX6&dwY9j zGFeYg&y5>5u3x`??b@~O?(QpBu5@*EUA}zz(xpos9UT`gTxf4^KY#vwb8~Z3Q&U4j zLw$XHU0q#mZEa0WO?7p3Wo4yEBoYV&`T6;Id3m|Hxd#p$$j;7AOG`^lO-)Hj*|TR) za&j`C&reKDOh`!By?b|jeEhCmyLRr}xnswUn3$OD+qZAqwkR$1p;%j6TUuILSXhwB zWFnEccI{eob8|B@GgDJj6B83-V`C#DBSS+&0|NsBfq=*3aX1_ni`CcH$6zpedV0FL zx@a_7TU#52LTPDfA(2P~0->Ryp{}kD{W#xY0;E;#&76pEA2ydmx2M5jtE&*{lRA@f2A0-=r>tD4H5;FK2WFwyJ=fkrvbnTHHXgL+_^ z)=AAhX(VBZrltWBIp{5sX=>vc0T^%_Ayt8K)sjlp5W044B1MVVnBkN?)73dSaDsJk zzDxgz^=1>-UG1^b&|9-c^q~rsVNIRhTog7wyI-k^1I7Yo_Ou86{PX zUc!~OhRXl;is=l$4lXufGub)+Su~#uK@~<2LbODl6qB6ONBN?8qWU2e!P;&%ythK) z8l8tG4NsQfD3M*=Zo)*2gzPUS+FbN4)hDrpa)-%&F4p>Ct#6ggGVln6yTrFNu1>u3 ztNnHve~4~XevDeW@~ZYoe;I+6F~yZ;B%=Pq%moYjm%)_)T~=0BzI^!tjQRBG6ENn( zhY#=HzyFprfEi%S^z<|^W@>6`VqyX?1B`k6`0?1-7+~i9{rmUs-5VVp9UdMY7#Qg5 z>jTmNW&kanoty-Hw`l9H6D#KpzM#>T2>;qiDXT>veSk&zJ* z5kQx)urQ@An>KAy0TUP)s5C|i3~DUswFc`EC;ca2O)Z0y@S8 z2t9L_sE6w!`Jqp;_S7#+9FTg)=?U^0lH;vG0yzq0 z3?ut56%`g1D$4|T0SW|2p^6Zt6rex=6F`S=(EwcdR(L3ZP_@S&!$Sqc zA8D|)wFUX1(m_=qBoawkAW9%Wf&4W;KzpddLzNt$Hvkad?O*)3`0pnGydZq_Lc)Tn zA&5LaMy(8I9ns3FQu7lEbW&y@2k*WT4ATxBLhBHsbaBqjUBoo00EW=Dq_HGPzo{Yc zMmaq)AA~mE5_w+2hL;*}=9c0zr$ca-yvq?bg)J544BkMj+i?G8u}g*`PpgSjUh9@W zk+2Zj0Qx;c3jp|k}>rA?1=qNzKCPt<=LFyV`4+r9D{cA-|CN7`s>=`V?Q3~VF1MYD9@AR_zc;YA~Ig1my{ xCxl2?Uu~j$@~^J7;)L6H>!1@M$%+@h*KLSuN$2?y?zTQ+PHV#sP z@*!w;cJ|AcFP}eu{`Be7yLa#2zJ2@V&70}z>8Yuy$;ruQ&z?Pg{CHww;?bi=4J)zQ(>k&%(%;o*US0g*^_`SRtyzP{exUZGIf z+1Yvi{P}a|&YeAb_Vnq~Cr_SiYim1x{P?kB$BrI7+S=NB&s*^eSCbpy}cO>hL@L@r>CcfhXS_p@V~iy}kW{1q}+jqDHMv0jg7UnwUw2XrKP2Xg@w7fxtW=n zsi~=niHWhXv5}FHp`oF^zP_HGp02L0j*gC&mX?Nw29ZcqQ&Uq_RaH?@!Q=7Jf6wy3){IfNez80fiJRJUO2Xgt}s zPrlNT6;78Wt&Jz(e}8=WurUCbj~_q6#sFYmzkUrH^YZ0Ozzi@305d*54jXg(_U&7@ zZUJKeFhCbT%h1peObc+OySuxqs|(iU)TvVdmG<^_m=l3O(Ad~mUteEaTMHnmtgPI# zXAj_{q@<*%sEEVi?AWnm`}XbIwr$JG%G$DJ3!r7=#*KiM_3PJvqYI#A)v8sAiHSfL zHk%F8vU26h=;&ye7TA@)f(k4O;Dkn_%@xJP#l_j#8Aj!Ai2`$CU|;}5A(P1f6(EYX zwl+XTQ&W>fBB`sZOI=Y`R#s9{A`l1w7zG6d3?DqpvRntJ8LNR z`eMD44}D6MjcJxGd-8%vj#lQazHC8%fuZ8C$}$7=E_F5eH3G7Xv50_izDImu8$W=R z(diZAE2fYdp6huTBpw>cv-MBKhYB0AODQf@6PR>_P@ZffRKYwDca>@}EUC>9t*64o zT&b=MVj*PFnqC2r9<86Kk7lv-I4p=GqhMzVaU?(MB3;}@Wrfw0d64YNp{O(_xFV`F2mAA^H~QbKxqdVnIAE?v5K@gisxP$wN79cRv*0gWOR1(Zrt zQxg#7;K73+O%5D5P*+!1Q&Uq_RaH?@QC3z~SXc-$B|kqOWXjg9TVYP5rIMDGws!4W z5G$Zm03>rW1#ki~1-4}Q^5t`TWp1qeVW#}PQNBS1i1N2e1vJVxoWOxHmlKdFb48JI zqNu2d#bV{<dPi~hZ7+59asU$lYZke7<1jo$Yq_n|?xTtvm zA@~_*kK1TCsFYViz$;c`#@L8boZRYXkz=9W!34;@8$%jnGjcWZJ2TlEe({8`D^f-2 zlx!IuK54XqO+(NTI-Wchv+V(rqw3?qFJmES#imICrpyo|2b{IN7ZoAS-tFQ$zn4W9 z)3PB5UB=nhRcs(b4HvG!ie;75^#^C7CIxaB(n8i`u)a^Jiu1ZB!uAuW0Tt&>gZ5D# z0^hxqbZqWfWUhasR}t1qvY{#Dpet`0rGXL!YB_Bmt{%wo@jpO`>1-x>_7zpQM;y** zFi8BV(qj3o4zrfshx~M{mbMPjJsJLLR%zaG?V&zHo9xr?#AW01i{9Cdv&$J;Y!vGM z=mFCK&l^x5uU@?Z0rLF$bLqU1*2lej_u%?~7tWO{SAZcPLqLP{_xDQ!1kiEe!UgHP z`9nb9sRQqvmX?<0=H|Im2Vk;y?_Lloz!MNDrKP32cI_%IE(WOr!vZEyZf-7@%LV1~ zO|Sr7fGuDGNh1YJAZet`EtIgZu)h*1bC(ZH3fMem;9?6vTIoVD?U)?8&b%ur?=3l=DaGJsHHv!tQ=ismuHV zFYcb)p-NQ+?r1V{o_wi%>P$2{wlA;>O%lbEt{NldG_zh%>0u_aJS4M9NC~6yWN;~+ z)$jQ%Bt#18Z>DiPkQ{;?tzv?Ppye56W@(Aq5j3PMWF9#RK|;J+;e5wN4c=PO20S!5;2vz1wd$FMvBE|g+mVY@l zFkTR-?XZsMloCG?Vn8iaBVCEhAJKEmklY}ne%)E;nu^~!FDGwTtxe3(^!pP=irRJ= z-5eY82A{?1HVK#?-rMB`)>=sh#J0FRe|>9K_l*!4cWlj~Uvj$`rc{q9Ki9P+(ZOLRKz=|ARr;$iqunJUQn?JwP~rLF6X8*jt?A_OF>OEEf1lh zJ6mwf@`0VKoYjLIi0-JzNBWzAcq-8|p+Ypm6S^SG_wU-0{W_kF)UpSbu~ z{_bphhy+zb(DwHBr%#_ge*F01!-x0p-@kkJZfk36b93|U+qZAtym|fl^~T1=%F4>C zSFe_rm!Cg>zPPyf^y$-ug@yU~`MJ5d+1c6Y>FFm=o;-g1_|c9X=L?StG z;DA^xPDn_IkB^Uyjg5(kiH?qrii#2l1bg=EiHwYlh=}0x`MY-Q+PQOQSXfwSXlO`C zNMK+fm&@gFIBYhX#bPlS3_m|V8jVJ!QoX#qJUu-WTwPsVTwKUxvZJFT zi9{k02zWf++S(d}!5|O_=;!x?-vDjfc7IGt@;;#?CYZ}ZT5WGbv@H~t29Cw~e6-J* zK-hmFD~K=X(hDoFcI=G7E`zxm#o~zsauW(iqRP|~-d{BYTRX9g)>dWf?u9275>?0w zB+g5u)0+fJl@H44c8h#5sbaqvl8-{has`M#5FN8 z#($5mh^_yP6&g)p8U_j+Xc6kj-LvRg-HvdDc4qt-R^ulvA{tDUBhEVnBXu-{3T@}? znR7`Yq>IVk;t^xoDov%txUl6NhCFejZ(L^@zbn~@LR))O>Jg0LW^THOr{mAGO9`pq z4S#puY8VBJ2o?^21?%hUYinz(tE&KomoHxe6kfb|@$A{NZ(INtOiWCSkBk_y1To93)ik)>+I}oYirZ%^{uU~I-Rb$x!FQPeSJMZ zp}M+SsZ;_KPMtb+^5n@ACr%tcejMnKpPvt0kjZ36j~>m+$^tYTK72SmJv}8QB{?}6 z00Gk=5{csC;s6kU2BA<0(*Rtsh!7kc926A9`!Utb>|AJ_NGom=@rO=eCtQ@kkDnVf7?KVvwVNtTd6;pqW zt3ZK&SUm8z6YJQ0?e!ZfwS#A3irQw~&-Q|M{2wVM#O1SO4`z=}XhtPy*iq+}H>GD1 zwUpdp$&dr8hTsq`HBPTBB-+#Wm)0@IXu=ADS0wLXE+&!S5*sbR@`$Q(lv~y%2j96^ z2OOS4CCUs|NeI6|6zcyw|9nVA`|3&1PD*w|QKU*Fxk zckkS}13CxuAEXXC2P*(by`!T8tN>r9uGMNa8cj`2O;uIZ>C>k{=OA*0LQzsu0y+ng z=jP_Z^B+W>k&yukPfJTXbm$OR1mM(@l9Iq8keHZgiG1(gz3}`G4-fx3bxY*%@P{L( z)9Ijakhf+2TiS-_zq7NmC2}H>Xm4*1Qn#_O`I*a)djr@B2u-1gy1sONy8%Ml5XjL~ z(KKYjF@rTSlah*7B3WAODy%P4ECq;B z4b1;@eu_4)wr51EB@Yp2a8BIJ;SSaXI+{oc$XAS!7`0kzqK0x%gQ?f~2i~vTZ8l?^ z>D<(P4v literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_TashkentIdol.gif b/assets/tw/template/TEMPLATE_SIREN_TashkentIdol.gif new file mode 100644 index 0000000000000000000000000000000000000000..b54d0575a10fea76d0a5f04da9e6376baf9bfc6a GIT binary patch literal 4340 zcmeI#c{J4j9>?*|cgBnnikZ=!a2aD{)bK+RE*eZjktkQ2+(Am(R4PipW;IiZ8L3ce zly>c#N;Q@=q>?u6w9>9srTV>p=X=igIKS@i{@Fj>@1Ng)zRNkE$9cX&hl_lC6Z#-J zQX%yH`}c3(zJ2}rwY$6f^XJc>K7H!y>iYQcTLUXlZG=e*OBjYuBz^xzg0s zbn)WF^XJbuHa4C+cg|oioIQKCuCDIPnKLytHPzMCRaI4by}q)t^2CV~$B!RBcI?>E zqeqV%Idb^$;R6Q_?BBnC-@bi&_wL=ZXV324yUWYVckSA>bLY};7#CXq;%E?t_Hm9=>B;zf%VEm*K1Jw1Kiym@J9X|rd~o-t!aYHDgq zN=kBaa$;hlSS*fxc;)Dqk#*Q5u6B9FL%$U)mM@L0PMMg$OL_~y#hmROBV)*dk zVPRoGK|w=@4h;+p^!NAo_4W1f@fk8?h?kd_r>CcfhliV+8=ueT@pz7oj%+sD-rnBM z&W^=mF_}zDOH1_s>nHvJhwrA5!(zsS1Vs(=baN+T-@hY=PewEccm@8Sukq(GK{U9j z(2~dqkvwGOnHbwFr?;Oj#zdB^qC0sjvZ{~>N%#@6=Nil?%)Br6wuR+>1zFu&lv8fN z$SU&z&i-y{4hKm&q3P)@m&z1D$oys&(w#BxS%Pz^q-^s>Buq50hw2NY@(N^BJ0S0W)P zO-wmHYC#*4*eVQ|_kK}eLXtFpV*L+ALM zYBlP(x+-Z(<3|5E%^KfNa#1f<;GP)?^Hfnbfs%$4+q_`zOS{3Tk6AKCGA+-kpE^c` zDa}g)7f~rjKmIUPPgTBr`2w(jDjz<4c=ztzn>TL=RbIY)`QpV3+?Kzv32>mD<|cp0J!gefrd?QzuWJ>?sV`a_G>Zg9i`x zN6Q(b3U8odIM*Lqml^Ay6X_2tb>FfB?`2sPXpp25LZlb|#fH5bfKAJ6%V)U4tj@KmfA~%PIL#3Fo%9I;>g^x8k)tT@oq_U*> z@_H?u`;vKsLl&&&rKXj4X=_9|&j0of6G+L!)o4OoyHA2+y*UXXuAzA|D&UMQNU^wI zE0>m;cDc9ibI_Z6#8x)4_LDHg=ct8qP-|5#xt}#ki%x2=F|w%Kw_A@1C=4WFnxvJf z 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 SP2 > SP3 > SP4 > SP5 + """, + """ + ISP1 > ISP2 > ISP3 > ISP4 > ISP5 > ISP6 + """, + ] + + def campaign_set_chapter_event(self, chapter, mode='normal'): + self.ui_goto_event() + self.campaign_ensure_chapter(index=chapter) + return True + # μ + + def _campaign_get_chapter_index(self, name): + """ + Args: + name (str, int): + + Returns: + int + """ + if name == 'sp': + return 1 + if name == 'isp': + return 2 + if name == 'ex_sp': + return 3 + if name == 'ex_ex': + return 4 + + return super(CampaignBase, CampaignBase)._campaign_get_chapter_index(name) + + def is_event_animation(self): + # Blue banner + if self.image_color_count((1180, 285, 1280, 335), color=(140, 215, 255), count=1000): + logger.info('Live start!') + return True + # Red-black banner with white bottom border + if self.image_color_count((1193, 428, 1273, 436), color=(255, 255, 255), count=500): + logger.info('Live start!') + return True + + return False diff --git a/campaign/event_20240425_cn/sp1.py b/campaign/event_20240425_cn/sp1.py new file mode 100644 index 0000000000..5823556526 --- /dev/null +++ b/campaign/event_20240425_cn/sp1.py @@ -0,0 +1,87 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +MAP = CampaignMap('SP1') +MAP.shape = 'I8' +MAP.camera_data = ['C3', 'C6', 'E3', 'E6'] +MAP.camera_data_spawn_point = ['E3'] +MAP.camera_sight = (-2, -1, 3, 2) +MAP.map_data = """ + -- -- -- -- -- -- -- -- -- + -- -- ME ++ ++ ++ -- ++ -- + ++ ME -- ++ MB ++ ME -- ME + ++ -- -- ++ -- ++ -- -- -- + -- Me -- SP -- SP -- Me -- + ME -- -- -- __ -- -- -- ME + -- ++ ME -- MS -- ME ++ ++ + -- -- -- Me ++ Me -- -- ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 2, 'siren': 1}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Laffey6'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 33), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + MAP_SWIPE_MULTIPLY = (1.062, 1.082) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.027, 1.046) + MAP_SWIPE_MULTIPLY_MAATOUCH = (0.997, 1.015) + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom' + MAP_WALK_USE_CURRENT_FLEET = True + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_4(self): + return self.clear_boss() diff --git a/campaign/event_20240425_cn/sp2.py b/campaign/event_20240425_cn/sp2.py new file mode 100644 index 0000000000..33db6a645a --- /dev/null +++ b/campaign/event_20240425_cn/sp2.py @@ -0,0 +1,78 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .sp1 import Config as ConfigBase + +MAP = CampaignMap('SP2') +MAP.shape = 'I7' +MAP.camera_data = ['D2', 'D5', 'F5'] +MAP.camera_data_spawn_point = ['F2'] +MAP.camera_sight = (-2, -1, 3, 2) +MAP.map_data = """ + -- -- ME -- -- MS -- -- SP + -- ++ ++ Me __ Me MS -- -- + -- ++ ++ Me -- MS -- -- SP + -- -- ME -- -- -- ++ ++ ++ + -- ME -- -- ++ Me ++ MB ++ + ++ ++ ++ -- ME -- ++ -- ++ + -- -- ME -- -- -- -- -- ME +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 1}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['TashkentIdol', 'DidoIdol2'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + HOMO_STORAGE = ((7, 4), [(179.668, 262.579), (1042.431, 262.579), (89.435, 660.188), (1122.585, 660.188)]) + MAP_SWIPE_MULTIPLY = (1.246, 1.269) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.205, 1.227) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.170, 1.191) + + +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/event_20240425_cn/sp3.py b/campaign/event_20240425_cn/sp3.py new file mode 100644 index 0000000000..46e4a9a39d --- /dev/null +++ b/campaign/event_20240425_cn/sp3.py @@ -0,0 +1,81 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .sp1 import Config as ConfigBase + +MAP = CampaignMap('SP3') +MAP.shape = 'I8' +MAP.camera_data = ['C4', 'E4', 'E6'] +MAP.camera_data_spawn_point = ['C6'] +MAP.camera_sight = (-2, -1, 3, 2) +MAP.map_data = """ + ++ ++ ++ ++ -- ++ ++ ++ -- + -- ++ MB ++ ME -- ME -- -- + ME ++ -- ++ -- Me -- ME -- + -- Me -- Me -- ++ -- ME ++ + -- MS __ MS -- Me -- -- ++ + -- -- MS -- -- -- -- ME -- + ++ -- -- -- ++ ++ ME ME -- + ++ SP -- SP ++ ++ -- -- -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'battle': 1, 'enemy': 2}, + {'battle': 2, 'enemy': 1}, + {'battle': 3, 'enemy': 1}, + {'battle': 4}, + {'battle': 5, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['SheffieldIdol', 'RoonIdol2'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.069, 1.089) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.034, 1.053) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.004, 1.022) + + +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/campaign/event_20240425_cn/sp4.py b/campaign/event_20240425_cn/sp4.py new file mode 100644 index 0000000000..7b522cd112 --- /dev/null +++ b/campaign/event_20240425_cn/sp4.py @@ -0,0 +1,81 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .sp1 import Config as ConfigBase + +MAP = CampaignMap('SP4') +MAP.shape = 'I8' +MAP.camera_data = ['C3', 'C6', 'F3', 'F6'] +MAP.camera_data_spawn_point = ['D2'] +MAP.camera_sight = (-2, -1, 3, 2) +MAP.map_data = """ + ++ ++ ++ SP -- SP ++ ++ ++ + -- Me -- -- -- -- -- Me -- + ME -- MS -- MS -- MS -- ME + -- ++ -- Me __ Me -- ++ -- + -- Me -- ++ ++ ++ -- Me -- + ME -- -- ++ MB ++ -- -- ME + ++ ME -- ++ -- ++ -- ME ++ + ++ ME -- -- -- -- -- ME ++ +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 3, 'siren': 2}, + {'battle': 1, 'enemy': 2}, + {'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, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['Z23_5', 'Elizabeth3'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.251, 1.275) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.210, 1.232) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.175, 1.196) + + +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/campaign/event_20240425_cn/sp5.py b/campaign/event_20240425_cn/sp5.py new file mode 100644 index 0000000000..42867b5db9 --- /dev/null +++ b/campaign/event_20240425_cn/sp5.py @@ -0,0 +1,93 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .sp1 import Config as ConfigBase + +MAP = CampaignMap('SP5') +MAP.shape = 'I9' +MAP.camera_data = ['C4', 'C7', 'F4', 'F7'] +MAP.camera_data_spawn_point = ['C7'] +MAP.camera_sight = (-2, -1, 3, 2) +MAP.map_data = """ + ++ ++ -- ++ ++ ++ -- ++ ++ + ++ ++ ME -- Me -- ME -- ++ + -- -- -- ME -- ME -- -- -- + -- ME -- ++ ++ ++ -- ME -- + ME ++ -- ++ MB ++ -- ++ ME + -- ++ -- ++ -- ++ -- ++ -- + -- -- MS -- MS -- MS -- -- + Me -- -- -- __ -- -- -- Me + -- Me ++ SP -- SP ++ Me -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 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}, + {'battle': 6, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ +A9, B9, C9, D9, E9, F9, G9, H9, I9, \ + = MAP.flatten() + + +class Config(ConfigBase): + # ===== Start of generated config ===== + MAP_SIREN_TEMPLATE = ['GascogneIdol', 'TaihouIdol'] + MOVABLE_ENEMY_TURN = (2,) + MAP_HAS_SIREN = True + MAP_HAS_MOVABLE_ENEMY = True + MAP_HAS_MAP_STORY = True + MAP_HAS_FLEET_STEP = True + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + + MAP_SWIPE_MULTIPLY = (1.012, 1.031) + MAP_SWIPE_MULTIPLY_MINITOUCH = (0.979, 0.997) + MAP_SWIPE_MULTIPLY_MAATOUCH = (0.950, 0.968) + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_6(self): + return self.fleet_boss.clear_boss() diff --git a/module/template/assets.py b/module/template/assets.py index 07bf81d628..eec0bb57e0 100644 --- a/module/template/assets.py +++ b/module/template/assets.py @@ -86,13 +86,16 @@ TEMPLATE_SIREN_Deutschland = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Deutschland.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Deutschland.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Deutschland.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Deutschland.gif'}) TEMPLATE_SIREN_Dewey = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Dewey.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Dewey.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Dewey.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Dewey.gif'}) TEMPLATE_SIREN_DidoIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_DidoIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_DidoIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_DidoIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_DidoIdol.gif'}) +TEMPLATE_SIREN_DidoIdol2 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_DidoIdol2.gif', 'en': './assets/en/template/TEMPLATE_SIREN_DidoIdol2.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_DidoIdol2.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_DidoIdol2.gif'}) TEMPLATE_SIREN_Dilloy = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Dilloy.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Dilloy.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Dilloy.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Dilloy.gif'}) TEMPLATE_SIREN_DogPink = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_DogPink.gif', 'en': './assets/en/template/TEMPLATE_SIREN_DogPink.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_DogPink.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_DogPink.gif'}) TEMPLATE_SIREN_Dorsetshire = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Dorsetshire.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Dorsetshire.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Dorsetshire.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Dorsetshire.gif'}) TEMPLATE_SIREN_DukeOfYork = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_DukeOfYork.gif', 'en': './assets/en/template/TEMPLATE_SIREN_DukeOfYork.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_DukeOfYork.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_DukeOfYork.gif'}) TEMPLATE_SIREN_ELpurple = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_ELpurple.gif', 'en': './assets/en/template/TEMPLATE_SIREN_ELpurple.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_ELpurple.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_ELpurple.gif'}) +TEMPLATE_SIREN_Elizabeth3 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Elizabeth3.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Elizabeth3.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Elizabeth3.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Elizabeth3.gif'}) TEMPLATE_SIREN_Formidable = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Formidable.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Formidable.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Formidable.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Formidable.gif'}) TEMPLATE_SIREN_Gascogne = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Gascogne.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Gascogne.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Gascogne.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Gascogne.gif'}) +TEMPLATE_SIREN_GascogneIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_GascogneIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_GascogneIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_GascogneIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_GascogneIdol.gif'}) TEMPLATE_SIREN_Gloucester = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Gloucester.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Gloucester.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Gloucester.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Gloucester.gif'}) TEMPLATE_SIREN_Gneisenau = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Gneisenau.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Gneisenau.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Gneisenau.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Gneisenau.gif'}) TEMPLATE_SIREN_GrafZeppelin = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_GrafZeppelin.gif', 'en': './assets/en/template/TEMPLATE_SIREN_GrafZeppelin.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_GrafZeppelin.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_GrafZeppelin.gif'}) @@ -130,6 +133,7 @@ TEMPLATE_SIREN_Kirishima = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Kirishima.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Kirishima.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Kirishima.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Kirishima.gif'}) TEMPLATE_SIREN_Kongo = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Kongo.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Kongo.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Kongo.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Kongo.gif'}) TEMPLATE_SIREN_LaGalissonniere = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_LaGalissonniere.gif', 'en': './assets/en/template/TEMPLATE_SIREN_LaGalissonniere.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_LaGalissonniere.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_LaGalissonniere.gif'}) +TEMPLATE_SIREN_Laffey6 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Laffey6.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Laffey6.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Laffey6.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Laffey6.gif'}) TEMPLATE_SIREN_LeMalinIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_LeMalinIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_LeMalinIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_LeMalinIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_LeMalinIdol.gif'}) TEMPLATE_SIREN_LeMars = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_LeMars.gif', 'en': './assets/en/template/TEMPLATE_SIREN_LeMars.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_LeMars.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_LeMars.gif'}) TEMPLATE_SIREN_LeMars_ghost = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_LeMars_ghost.gif', 'en': './assets/en/template/TEMPLATE_SIREN_LeMars_ghost.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_LeMars_ghost.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_LeMars_ghost.gif'}) @@ -162,6 +166,7 @@ TEMPLATE_SIREN_Rodney = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Rodney.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Rodney.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Rodney.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Rodney.gif'}) TEMPLATE_SIREN_Roon = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Roon.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Roon.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Roon.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Roon.gif'}) TEMPLATE_SIREN_RoonIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_RoonIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_RoonIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_RoonIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_RoonIdol.gif'}) +TEMPLATE_SIREN_RoonIdol2 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_RoonIdol2.gif', 'en': './assets/en/template/TEMPLATE_SIREN_RoonIdol2.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_RoonIdol2.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_RoonIdol2.gif'}) TEMPLATE_SIREN_Ryuuhou = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Ryuuhou.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Ryuuhou.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Ryuuhou.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Ryuuhou.gif'}) TEMPLATE_SIREN_SK_BB = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SK_BB.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SK_BB.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SK_BB.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SK_BB.gif'}) TEMPLATE_SIREN_SK_CA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SK_CA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SK_CA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SK_CA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SK_CA.gif'}) @@ -173,7 +178,8 @@ TEMPLATE_SIREN_SanDiego = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SanDiego.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SanDiego.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SanDiego.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SanDiego.gif'}) TEMPLATE_SIREN_Scharnhorst = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Scharnhorst.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Scharnhorst.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Scharnhorst.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Scharnhorst.gif'}) TEMPLATE_SIREN_Sheffield = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Sheffield.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Sheffield.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Sheffield.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Sheffield.gif'}) -TEMPLATE_SIREN_SheffieldIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png', 'en': './assets/en/template/TEMPLATE_SIREN_SheffieldIdol.png', 'jp': './assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png', 'tw': './assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png'}) +TEMPLATE_SIREN_SheffieldIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png', 'en': './assets/en/template/TEMPLATE_SIREN_SheffieldIdol.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_SheffieldIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SheffieldIdol.gif'}) +TEMPLATE_SIREN_SheffieldIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png', 'en': './assets/en/template/TEMPLATE_SIREN_SheffieldIdol.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_SheffieldIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SheffieldIdol.gif'}) TEMPLATE_SIREN_Shokaku = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Shokaku.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Shokaku.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Shokaku.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Shokaku.gif'}) TEMPLATE_SIREN_SirenBoss15 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SirenBoss15.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SirenBoss15.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SirenBoss15.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SirenBoss15.gif'}) TEMPLATE_SIREN_SirenBoss16 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SirenBoss16.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SirenBoss16.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SirenBoss16.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SirenBoss16.gif'}) @@ -185,6 +191,8 @@ TEMPLATE_SIREN_SpeeIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_SpeeIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_SpeeIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_SpeeIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_SpeeIdol.gif'}) TEMPLATE_SIREN_Suzutsuki = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Suzutsuki.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Suzutsuki.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Suzutsuki.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Suzutsuki.gif'}) TEMPLATE_SIREN_Swordfish = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Swordfish.png', 'en': './assets/en/template/TEMPLATE_SIREN_Swordfish.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_Swordfish.png', 'tw': './assets/tw/template/TEMPLATE_SIREN_Swordfish.png'}) +TEMPLATE_SIREN_TaihouIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_TaihouIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_TaihouIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_TaihouIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_TaihouIdol.gif'}) +TEMPLATE_SIREN_TashkentIdol = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_TashkentIdol.gif', 'en': './assets/en/template/TEMPLATE_SIREN_TashkentIdol.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_TashkentIdol.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_TashkentIdol.gif'}) TEMPLATE_SIREN_Tirpitz = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Tirpitz.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Tirpitz.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Tirpitz.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Tirpitz.gif'}) TEMPLATE_SIREN_Trento = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Trento.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Trento.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Trento.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Trento.gif'}) TEMPLATE_SIREN_U101 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_U101.gif', 'en': './assets/en/template/TEMPLATE_SIREN_U101.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_U101.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_U101.gif'}) @@ -205,6 +213,7 @@ TEMPLATE_SIREN_Z18 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z18.png', 'en': './assets/en/template/TEMPLATE_SIREN_Z18.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z18.png', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z18.png'}) TEMPLATE_SIREN_Z19 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z19.png', 'en': './assets/en/template/TEMPLATE_SIREN_Z19.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z19.png', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z19.png'}) TEMPLATE_SIREN_Z2 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z2.png', 'en': './assets/en/template/TEMPLATE_SIREN_Z2.png', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z2.png', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z2.png'}) +TEMPLATE_SIREN_Z23_5 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z23_5.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Z23_5.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z23_5.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z23_5.gif'}) TEMPLATE_SIREN_Z24 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z24.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Z24.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z24.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z24.gif'}) TEMPLATE_SIREN_Z46 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Z46.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Z46.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Z46.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Z46.gif'}) TEMPLATE_SIREN_Zuiho = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Zuiho.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Zuiho.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Zuiho.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Zuiho.gif'}) From bbef93c03d69cd48a1663f65e3a8c6bc82d38dc8 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 26 Apr 2024 03:25:58 +0800 Subject: [PATCH 32/39] Add: Heart-Linking Harmony chapter ISP --- campaign/event_20240425_cn/campaign_base.py | 8 +- campaign/event_20240425_cn/isp1.py | 56 ++++++++++ campaign/event_20240425_cn/isp2.py | 53 +++++++++ campaign/event_20240425_cn/isp3.py | 53 +++++++++ campaign/event_20240425_cn/isp4.py | 53 +++++++++ campaign/event_20240425_cn/isp5.py | 53 +++++++++ campaign/event_20240425_cn/isp6.py | 53 +++++++++ campaign/event_20240425_cn/sp.py | 114 ++++++++++++++++++++ module/campaign/campaign_ocr.py | 2 +- 9 files changed, 443 insertions(+), 2 deletions(-) create mode 100644 campaign/event_20240425_cn/isp1.py create mode 100644 campaign/event_20240425_cn/isp2.py create mode 100644 campaign/event_20240425_cn/isp3.py create mode 100644 campaign/event_20240425_cn/isp4.py create mode 100644 campaign/event_20240425_cn/isp5.py create mode 100644 campaign/event_20240425_cn/isp6.py create mode 100644 campaign/event_20240425_cn/sp.py diff --git a/campaign/event_20240425_cn/campaign_base.py b/campaign/event_20240425_cn/campaign_base.py index 276b19c7d2..03ca495321 100644 --- a/campaign/event_20240425_cn/campaign_base.py +++ b/campaign/event_20240425_cn/campaign_base.py @@ -16,7 +16,6 @@ def campaign_set_chapter_event(self, chapter, mode='normal'): self.ui_goto_event() self.campaign_ensure_chapter(index=chapter) return True - # μ def _campaign_get_chapter_index(self, name): """ @@ -37,6 +36,13 @@ def _campaign_get_chapter_index(self, name): return super(CampaignBase, CampaignBase)._campaign_get_chapter_index(name) + @staticmethod + def _campaign_ocr_result_process(result): + result = CampaignBase_._campaign_ocr_result_process(result) + if result in ['usp', 'iisp']: + result = 'sp' + return result + def is_event_animation(self): # Blue banner if self.image_color_count((1180, 285, 1280, 335), color=(140, 215, 255), count=1000): diff --git a/campaign/event_20240425_cn/isp1.py b/campaign/event_20240425_cn/isp1.py new file mode 100644 index 0000000000..a1155dc662 --- /dev/null +++ b/campaign/event_20240425_cn/isp1.py @@ -0,0 +1,56 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +MAP = CampaignMap('ISP1') +MAP.shape = 'E5' +MAP.camera_data = ['C2'] +MAP.camera_data_spawn_point = ['C2'] +MAP.map_data = """ + -- ++ ++ ++ -- + -- ++ MB ++ -- + -- ++ -- ++ -- + ++ -- 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'boss': 1}, +] +A1, B1, C1, D1, E1, \ +A2, B2, C2, D2, E2, \ +A3, B3, C3, D3, E3, \ +A4, B4, C4, D4, E4, \ +A5, B5, C5, D5, E5, \ + = 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 + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + MAP_HAS_CLEAR_PERCENTAGE = False + FLEET_2 = 0 + MAP_IS_ONE_TIME_STAGE = True + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def battle_0(self): + return self.clear_boss() diff --git a/campaign/event_20240425_cn/isp2.py b/campaign/event_20240425_cn/isp2.py new file mode 100644 index 0000000000..467df2a85f --- /dev/null +++ b/campaign/event_20240425_cn/isp2.py @@ -0,0 +1,53 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .isp1 import Config as ConfigBase + +MAP = CampaignMap('ISP2') +MAP.shape = 'E5' +MAP.camera_data = ['C2'] +MAP.camera_data_spawn_point = ['C2'] +MAP.map_data = """ + -- ++ ++ ++ -- + -- ++ MB ++ -- + -- ++ -- ++ -- + ++ -- 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'boss': 1}, +] +A1, B1, C1, D1, E1, \ +A2, B2, C2, D2, E2, \ +A3, B3, C3, D3, E3, \ +A4, B4, C4, D4, E4, \ +A5, B5, C5, D5, E5, \ + = 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 + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== 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): + return self.clear_boss() diff --git a/campaign/event_20240425_cn/isp3.py b/campaign/event_20240425_cn/isp3.py new file mode 100644 index 0000000000..7afccbdeed --- /dev/null +++ b/campaign/event_20240425_cn/isp3.py @@ -0,0 +1,53 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .isp1 import Config as ConfigBase + +MAP = CampaignMap('ISP3') +MAP.shape = 'E5' +MAP.camera_data = ['C2'] +MAP.camera_data_spawn_point = ['C2'] +MAP.map_data = """ + -- ++ ++ ++ -- + -- ++ MB ++ -- + -- ++ -- ++ -- + ++ -- 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'boss': 1}, +] +A1, B1, C1, D1, E1, \ +A2, B2, C2, D2, E2, \ +A3, B3, C3, D3, E3, \ +A4, B4, C4, D4, E4, \ +A5, B5, C5, D5, E5, \ + = 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 + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== 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): + return self.clear_boss() diff --git a/campaign/event_20240425_cn/isp4.py b/campaign/event_20240425_cn/isp4.py new file mode 100644 index 0000000000..eaa0a32d64 --- /dev/null +++ b/campaign/event_20240425_cn/isp4.py @@ -0,0 +1,53 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .isp1 import Config as ConfigBase + +MAP = CampaignMap('ISP4') +MAP.shape = 'E5' +MAP.camera_data = ['C2'] +MAP.camera_data_spawn_point = ['C2'] +MAP.map_data = """ + -- ++ ++ ++ -- + -- ++ MB ++ -- + -- ++ -- ++ -- + ++ -- 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'boss': 1}, +] +A1, B1, C1, D1, E1, \ +A2, B2, C2, D2, E2, \ +A3, B3, C3, D3, E3, \ +A4, B4, C4, D4, E4, \ +A5, B5, C5, D5, E5, \ + = 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 + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== 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): + return self.clear_boss() diff --git a/campaign/event_20240425_cn/isp5.py b/campaign/event_20240425_cn/isp5.py new file mode 100644 index 0000000000..89ed824a0b --- /dev/null +++ b/campaign/event_20240425_cn/isp5.py @@ -0,0 +1,53 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .isp1 import Config as ConfigBase + +MAP = CampaignMap('ISP5') +MAP.shape = 'E5' +MAP.camera_data = ['C2'] +MAP.camera_data_spawn_point = ['C2'] +MAP.map_data = """ + -- ++ ++ ++ -- + -- ++ MB ++ -- + -- ++ -- ++ -- + ++ -- 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'boss': 1}, +] +A1, B1, C1, D1, E1, \ +A2, B2, C2, D2, E2, \ +A3, B3, C3, D3, E3, \ +A4, B4, C4, D4, E4, \ +A5, B5, C5, D5, E5, \ + = 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 + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== 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): + return self.clear_boss() diff --git a/campaign/event_20240425_cn/isp6.py b/campaign/event_20240425_cn/isp6.py new file mode 100644 index 0000000000..298ede1013 --- /dev/null +++ b/campaign/event_20240425_cn/isp6.py @@ -0,0 +1,53 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger +from .isp1 import Config as ConfigBase + +MAP = CampaignMap('ISP6') +MAP.shape = 'E5' +MAP.camera_data = ['C2'] +MAP.camera_data_spawn_point = ['C2'] +MAP.map_data = """ + -- ++ ++ ++ -- + -- ++ MB ++ -- + -- ++ -- ++ -- + ++ -- 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 +""" +MAP.spawn_data = [ + {'battle': 0, 'boss': 1}, +] +A1, B1, C1, D1, E1, \ +A2, B2, C2, D2, E2, \ +A3, B3, C3, D3, E3, \ +A4, B4, C4, D4, E4, \ +A5, B5, C5, D5, E5, \ + = 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 + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== 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): + return self.clear_boss() diff --git a/campaign/event_20240425_cn/sp.py b/campaign/event_20240425_cn/sp.py new file mode 100644 index 0000000000..8777c132b6 --- /dev/null +++ b/campaign/event_20240425_cn/sp.py @@ -0,0 +1,114 @@ +from .campaign_base import CampaignBase +from module.map.map_base import CampaignMap +from module.map.map_grids import SelectedGrids, RoadGrids +from module.logger import logger + +MAP = CampaignMap('SP') +MAP.shape = 'I9' +MAP.camera_data = ['C5', 'F5'] +MAP.camera_data_spawn_point = ['E7'] +MAP.camera_sight = (-2, -1, 3, 2) +MAP.map_data = """ + -- ++ ++ -- -- -- ++ ++ -- + -- ++ ++ -- MB -- ++ ++ -- + ++ ++ ++ ++ -- ++ ++ ++ ++ + -- ME ++ -- -- -- ++ ME -- + ME -- -- -- __ -- -- -- ME + -- ME ++ -- -- -- ++ ME -- + ++ ++ ++ ++ -- ++ ++ ++ ++ + -- ++ ++ -- -- -- ++ ++ -- + -- ++ ++ SP -- SP ++ ++ -- +""" +MAP.weight_data = """ + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 + 50 50 50 50 50 50 50 50 50 +""" +MAP.spawn_data = [ + {'battle': 0, 'enemy': 6, 'siren': 4}, + {'battle': 1}, + {'battle': 2}, + {'battle': 3}, + {'battle': 4}, + {'battle': 5}, + {'battle': 6}, + {'battle': 7, 'boss': 1}, +] +A1, B1, C1, D1, E1, F1, G1, H1, I1, \ +A2, B2, C2, D2, E2, F2, G2, H2, I2, \ +A3, B3, C3, D3, E3, F3, G3, H3, I3, \ +A4, B4, C4, D4, E4, F4, G4, H4, I4, \ +A5, B5, C5, D5, E5, F5, G5, H5, I5, \ +A6, B6, C6, D6, E6, F6, G6, H6, I6, \ +A7, B7, C7, D7, E7, F7, G7, H7, I7, \ +A8, B8, C8, D8, E8, F8, G8, H8, I8, \ +A9, B9, C9, D9, E9, F9, G9, H9, I9, \ + = MAP.flatten() + + +class Config: + # ===== Start of generated config ===== + MAP_HAS_MAP_STORY = False + MAP_HAS_FLEET_STEP = False + MAP_HAS_AMBUSH = False + MAP_HAS_MYSTERY = False + STAR_REQUIRE_1 = 0 + STAR_REQUIRE_2 = 0 + STAR_REQUIRE_3 = 0 + # ===== End of generated config ===== + + MAP_HAS_SIREN = True + MAP_HAS_CLEAR_PERCENTAGE = False + MAP_IS_ONE_TIME_STAGE = True + HOMO_STORAGE = ((9, 6), [(165.083, 80.309), (1168.09, 80.309), (21.023, 612.379), (1325.484, 612.379)]) + + MAP_SWIPE_MULTIPLY = (1.009, 1.028) + MAP_SWIPE_MULTIPLY_MINITOUCH = (0.976, 0.994) + MAP_SWIPE_MULTIPLY_MAATOUCH = (0.948, 0.965) + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom' + MAP_WALK_USE_CURRENT_FLEET = True + + +class Campaign(CampaignBase): + MAP = MAP + ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C' + + def map_data_init(self, map_): + super().map_data_init(map_) + D4.is_siren = True + D6.is_siren = True + F4.is_siren = True + F6.is_siren = True + + def battle_0(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=2): + return True + + return self.battle_default() + + def battle_5(self): + if self.clear_siren(): + return True + if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): + return True + + return self.battle_default() + + def battle_7(self): + return self.fleet_boss.clear_boss() + + def is_event_animation(self): + # Red-black banner with white bottom border + if self.image_color_count((1193, 322, 1273, 329), color=(255, 255, 255), count=500): + logger.info('Live start!') + return True + + return False \ No newline at end of file diff --git a/module/campaign/campaign_ocr.py b/module/campaign/campaign_ocr.py index 763dda45f7..1929fdf00a 100644 --- a/module/campaign/campaign_ocr.py +++ b/module/campaign/campaign_ocr.py @@ -59,7 +59,7 @@ def _campaign_separate_name(name): name = name.strip('-') if name == 'sp': return 'ex_sp', '1' - elif name.startswith('extra'): + elif name.startswith('extra') or name == 'ex': return 'ex_ex', '1' elif '-' in name: return name.split('-') From e3096487585352e155ed67ba9e12eb82cc12940c Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 26 Apr 2024 03:55:49 +0800 Subject: [PATCH 33/39] Upd: Siren name convert dict --- dev_tools/map_extractor.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dev_tools/map_extractor.py b/dev_tools/map_extractor.py index be324c21e8..7dcafcf038 100644 --- a/dev_tools/map_extractor.py +++ b/dev_tools/map_extractor.py @@ -248,6 +248,14 @@ # Light-Chasing Sea of Stars 'sairenboss10': 'Sirenboss10', 'UDFsairen_baolei_2': 'UDFFortress2', + + # Heart-Linking Harmony + 'lafei_6': 'Laffey6', + 'tashigan_idol': 'TashkentIdol', + 'xiefeierde_idol': 'SheffieldIdol', + 'yilishabai_3': 'Elizabeth3', + 'jiasikenie_idol': 'GascogneIdol', + 'dafeng_idol': 'TaihouIdol', } From 7a45fed67f8b0b45e2250f0384e1535c864aab9f Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 26 Apr 2024 04:01:06 +0800 Subject: [PATCH 34/39] Fix: Duplicated SheffieldIdol template --- .../cn/template/TEMPLATE_SIREN_SheffieldIdol.png | Bin 645 -> 0 bytes .../en/template/TEMPLATE_SIREN_SheffieldIdol.png | Bin 645 -> 0 bytes module/template/assets.py | 3 +-- 3 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png delete mode 100644 assets/en/template/TEMPLATE_SIREN_SheffieldIdol.png diff --git a/assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png b/assets/cn/template/TEMPLATE_SIREN_SheffieldIdol.png deleted file mode 100644 index 25445dd609420efca27d4df410fef237b8fe5a6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)El3hqsaU6!9bIzRqIdx}S$_{F>g|w0i#iA4nyc>vQ zL?1U@2tfrwL_yKlRYXKxNns=fDMDC~g@kDcVp60N3Fl2sO`BSJ4odF7)@fb%0lim0 zemwA8ysz@XCY`6a7{7nV1CTJ#>f1$ns&P#4f0U2|v?XCD@nU%Z1R!D+jBnq7B}hQW za=_~vG*~K>b2e)BZz+_`ogvkGLJ9yW0m16+u$`lI04`%85B?^#MV!iPqA=X|z7{}; zR5CsrpP86TrlezCmsNhNRRU<(fx6CmN_#7HUc56$CgeJ!JG7|+ur&}aD@$Ab`mN#p zEJPn%mIIHais~bqUpLLG0qx|d9weiZN#)Fk)-?I%_0u)(Vk5WUK;EUFZr`pdzw<^U zK6XZBPR9mY^OpCoDWz^1ZB25h!HYOwG{UjUq8*0=sKPG)E@izya0?v)T2rCM^94<0FlX|9^3El3hqsaU6!9bIzRqIdx}S$_{F>g|w0i#iA4nyc>vQ zL?1U@2tfrwL_yKlRYXKxNns=fDMDC~g@kDcVp60N3Fl2sO`BSJ4odF7)@fb%0lim0 zemwA8ysz@XCY`6a7{7nV1CTJ#>f1$ns&P#4f0U2|v?XCD@nU%Z1R!D+jBnq7B}hQW za=_~vG*~K>b2e)BZz+_`ogvkGLJ9yW0m16+u$`lI04`%85B?^#MV!iPqA=X|z7{}; zR5CsrpP86TrlezCmsNhNRRU<(fx6CmN_#7HUc56$CgeJ!JG7|+ur&}aD@$Ab`mN#p zEJPn%mIIHais~bqUpLLG0qx|d9weiZN#)Fk)-?I%_0u)(Vk5WUK;EUFZr`pdzw<^U zK6XZBPR9mY^OpCoDWz^1ZB25h!HYOwG{UjUq8*0=sKPG)E@izya0?v)T2rCM^94<0FlX|9^3 Date: Fri, 26 Apr 2024 04:06:23 +0800 Subject: [PATCH 35/39] Fix: Increase MAP_GRID_CENTER_TOLERANCE since short swipes on map no longer be responded to --- module/config/config_manual.py | 2 +- module/os/config.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/config/config_manual.py b/module/config/config_manual.py index 50efcb2d7c..d4e90c0a47 100644 --- a/module/config/config_manual.py +++ b/module/config/config_manual.py @@ -142,7 +142,7 @@ def SERVER(self): MAP_HAS_MYSTERY = True MAP_MYSTERY_MAP_CLICK = True MAP_MYSTERY_HAS_CARRIER = False - MAP_GRID_CENTER_TOLERANCE = 0.1 + MAP_GRID_CENTER_TOLERANCE = 0.2 MOVABLE_ENEMY_FLEET_STEP = 2 MOVABLE_ENEMY_TURN = (2,) diff --git a/module/os/config.py b/module/os/config.py index 5bc6a0e886..73444fd6b5 100644 --- a/module/os/config.py +++ b/module/os/config.py @@ -9,7 +9,7 @@ class OSConfig: MAP_HAS_FLEET_STEP = True IGNORE_LOW_EMOTION_WARN = False - MAP_GRID_CENTER_TOLERANCE = 0.2 + MAP_GRID_CENTER_TOLERANCE = 0.3 MAP_SWIPE_MULTIPLY = (1.174, 1.200) MAP_SWIPE_MULTIPLY_MINITOUCH = (1.135, 1.160) MAP_SWIPE_MULTIPLY_MAATOUCH = (1.102, 1.126) From bfb9bd0d61d1311a30739940b106c4b4fc46b73a Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 26 Apr 2024 04:07:31 +0800 Subject: [PATCH 36/39] Fix: Convert stage names in event_20240425_cn --- module/campaign/run.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/module/campaign/run.py b/module/campaign/run.py index e410078c53..edd40635c6 100644 --- a/module/campaign/run.py +++ b/module/campaign/run.py @@ -189,6 +189,12 @@ def handle_stage_name(self, name, folder, mode='normal'): name = 'sp' if folder == 'event_20221124_cn' and name in ['asp', 'a.sp']: name = 'sp' + if folder == 'event_20240425_cn': + if name in ['μsp', 'usp', 'iisp']: + name = 'sp' + name = name.replace('lsp', 'isp').replace('1sp', 'isp') + if name == 'isp': + name = 'isp1' # Convert to chapter T convert = { 'a1': 't1', From b07d266e494671cd5ecb5a42d6d2a680f348e23a Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 26 Apr 2024 11:29:18 +0800 Subject: [PATCH 37/39] Fix: Visited inaccessible grid if support fleet was missing --- campaign/campaign_main/campaign_15_1.py | 5 +++-- campaign/campaign_main/campaign_15_2.py | 5 +++-- campaign/campaign_main/campaign_15_3.py | 5 +++-- campaign/campaign_main/campaign_15_4.py | 10 ++++++---- campaign/campaign_main/campaign_15_base.py | 3 ++- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/campaign/campaign_main/campaign_15_1.py b/campaign/campaign_main/campaign_15_1.py index f098e6171b..f98c6da497 100644 --- a/campaign/campaign_main/campaign_15_1.py +++ b/campaign/campaign_main/campaign_15_1.py @@ -79,8 +79,9 @@ def battle_function(self): def battle_0(self): if not self.map_is_clear_mode and self.map_has_mob_move: self.mob_move(B3, C3) - self.clear_chosen_enemy(B1) - return True + if B1.is_accessible: + self.clear_chosen_enemy(B1) + return True if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): return True diff --git a/campaign/campaign_main/campaign_15_2.py b/campaign/campaign_main/campaign_15_2.py index a91f7d0785..038ebf1a3b 100644 --- a/campaign/campaign_main/campaign_15_2.py +++ b/campaign/campaign_main/campaign_15_2.py @@ -81,8 +81,9 @@ def battle_0(self): if not self.map_is_clear_mode and self.map_has_mob_move: self.mob_move(I6, I7) self.mob_move(I7, H7) - self.clear_chosen_enemy(G7) - return True + if G7.is_accessible: + self.clear_chosen_enemy(G7) + return True if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): return True diff --git a/campaign/campaign_main/campaign_15_3.py b/campaign/campaign_main/campaign_15_3.py index 1797572d7b..ea34dd0664 100644 --- a/campaign/campaign_main/campaign_15_3.py +++ b/campaign/campaign_main/campaign_15_3.py @@ -83,8 +83,9 @@ def battle_function(self): def battle_0(self): if not self.map_is_clear_mode and self.map_has_mob_move: self.mob_move(B3, B4) - self.clear_chosen_enemy(A1) - return True + if A1.is_accessible: + self.clear_chosen_enemy(A1) + return True if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=1): return True diff --git a/campaign/campaign_main/campaign_15_4.py b/campaign/campaign_main/campaign_15_4.py index a7690a4936..f5a8e2a0d3 100644 --- a/campaign/campaign_main/campaign_15_4.py +++ b/campaign/campaign_main/campaign_15_4.py @@ -92,8 +92,9 @@ def battle_function(self): def battle_0(self): if not self.map_is_clear_mode and self.map_has_mob_move: self.mob_move(J8, K8) - self.clear_chosen_enemy(K9) - return True + if K9.is_accessible: + self.clear_chosen_enemy(K9) + return True if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): return True @@ -102,8 +103,9 @@ def battle_0(self): def battle_1(self): if not self.map_is_clear_mode: - self.clear_chosen_enemy(A1) - return True + if A1.is_accessible: + self.clear_chosen_enemy(A1) + return True if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0): return True diff --git a/campaign/campaign_main/campaign_15_base.py b/campaign/campaign_main/campaign_15_base.py index a18f271a93..5b06ae6b60 100644 --- a/campaign/campaign_main/campaign_15_base.py +++ b/campaign/campaign_main/campaign_15_base.py @@ -36,7 +36,7 @@ def map_data_init(self, map_): _ = ASSETS.ui_mask ASSETS.ui_mask = MASK_MAP_UI_W15.image - map_has_mob_move = False + map_has_mob_move = True def strategy_set_execute(self, formation_index=None, sub_view=None, sub_hunt=None): super().strategy_set_execute( @@ -201,4 +201,5 @@ def mob_move(self, location, target): self.strategy_close(skip_first_screenshot=False) self._mob_move_info_change(location, target) + self.find_path_initial() self.map.show() From cba28a8aac22bca2bdcfe266fd92f603792363f9 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:37:25 +0800 Subject: [PATCH 38/39] Fix: Full scan wasn't early stopped cuz mixed use of siren and boss --- campaign/campaign_main/campaign_15_3.py | 5 +++-- campaign/campaign_main/campaign_15_4.py | 7 ++++--- campaign/campaign_main/campaign_15_base.py | 16 +++++++++++++++- module/map/map_base.py | 3 ++- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/campaign/campaign_main/campaign_15_3.py b/campaign/campaign_main/campaign_15_3.py index ea34dd0664..b5e3e10373 100644 --- a/campaign/campaign_main/campaign_15_3.py +++ b/campaign/campaign_main/campaign_15_3.py @@ -2,10 +2,11 @@ from module.map.map_base import CampaignMap from module.map.map_grids import SelectedGrids, RoadGrids -from .campaign_15_base import CampaignBase +from .campaign_15_base import CampaignBase, W15GridInfo from .campaign_15_base import Config as ConfigBase MAP = CampaignMap('15-3') +MAP.grid_class = W15GridInfo MAP.shape = 'J8' MAP.camera_data = ['C2', 'C6', 'G2', 'G6'] MAP.camera_data_spawn_point = ['G6'] @@ -15,7 +16,7 @@ -- ME ++ Me -- Me ME Me ME -- ME Me ME ME Me -- ++ MB -- ME ++ -- -- ME ME Me ++ ++ __ ME - Me ME -- ++ Me -- ME MB -- Me + Me ME -- ++ Me -- ME MS -- Me ME ME -- -- ME ME ME -- -- ME Me -- __ -- -- ME -- -- ++ ++ ++ ++ ++ Me -- -- SP SP ++ ++ diff --git a/campaign/campaign_main/campaign_15_4.py b/campaign/campaign_main/campaign_15_4.py index f5a8e2a0d3..ecdcf249f2 100644 --- a/campaign/campaign_main/campaign_15_4.py +++ b/campaign/campaign_main/campaign_15_4.py @@ -2,10 +2,11 @@ from module.map.map_base import CampaignMap from module.map.map_grids import SelectedGrids, RoadGrids -from .campaign_15_base import CampaignBase +from .campaign_15_base import CampaignBase, W15GridInfo from .campaign_15_base import Config as ConfigBase MAP = CampaignMap('15-4') +MAP.grid_class = W15GridInfo MAP.shape = 'K9' MAP.camera_data = ['C2', 'C5', 'C7', 'F2', 'F5', 'F7', 'H2', 'H5', 'H7'] MAP.camera_data_spawn_point = ['H2'] @@ -13,9 +14,9 @@ MAP.map_data = """ Me -- ME ME Me -- ME ++ ++ ME ME ME -- -- -- -- ME -- ++ ++ -- ME - ++ -- -- MB -- -- ME SP SP ME Me + ++ -- -- MS -- -- ME SP SP ME Me ++ ME -- ++ ++ -- -- -- -- ME -- - -- Me ME MA ++ ME -- MB -- -- ME + -- Me ME MA ++ ME -- MS -- -- ME ME ME ME -- -- -- -- ++ ME -- Me ME -- __ -- ME ME -- ME ME -- ++ -- -- ++ -- Me -- ME ME ME Me ME diff --git a/campaign/campaign_main/campaign_15_base.py b/campaign/campaign_main/campaign_15_base.py index 5b06ae6b60..0a5166cdb9 100644 --- a/campaign/campaign_main/campaign_15_base.py +++ b/campaign/campaign_main/campaign_15_base.py @@ -2,10 +2,11 @@ from module.base.timer import Timer from module.campaign.campaign_base import CampaignBase as CampaignBase_ from module.handler.assets import STRATEGY_OPENED -from module.map_detection.utils_assets import ASSETS from module.logger import logger from module.map.map_grids import SelectedGrids from module.map.utils import location_ensure +from module.map_detection.grid import GridInfo +from module.map_detection.utils_assets import ASSETS MASK_MAP_UI_W15 = Mask(file='./assets/mask/MASK_MAP_UI_W15.png') @@ -27,6 +28,19 @@ class Config: MAP_SWIPE_MULTIPLY_MAATOUCH = (0.932, 0.949) +class W15GridInfo(GridInfo): + def merge(self, info, mode='normal'): + # Consider boss as siren + if info.is_boss: + if not self.is_land and self.may_siren: + self.is_siren = True + self.enemy_scale = 0 + self.enemy_genre = '' + return True + + return super().merge(info, mode=mode) + + class CampaignBase(CampaignBase_): ENEMY_FILTER = '1T > 1L > 1E > 1M > 2T > 2L > 2E > 2M > 3T > 3L > 3E > 3M' diff --git a/module/map/map_base.py b/module/map/map_base.py index 42b81d03bf..68dcbb4314 100644 --- a/module/map/map_base.py +++ b/module/map/map_base.py @@ -10,6 +10,7 @@ class CampaignMap: def __init__(self, name=None): self.name = name + self.grid_class = GridInfo self.grids = {} self._shape = (0, 0) self._map_data = '' @@ -68,7 +69,7 @@ def shape(self, scale): self._shape = node2location(scale.upper()) for y in range(self._shape[1] + 1): for x in range(self._shape[0] + 1): - grid = GridInfo() + grid = self.grid_class() grid.location = (x, y) self.grids[(x, y)] = grid From a9068bb043a11402c85c1223b8a6ffa15e18891c Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:49:16 +0800 Subject: [PATCH 39/39] Fix: Turn on MAP_SWIPE_PREDICT_WITH_SEA_GRIDS since W15 have big maps --- campaign/campaign_main/campaign_15_base.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/campaign/campaign_main/campaign_15_base.py b/campaign/campaign_main/campaign_15_base.py index 0a5166cdb9..ce400f6da8 100644 --- a/campaign/campaign_main/campaign_15_base.py +++ b/campaign/campaign_main/campaign_15_base.py @@ -12,10 +12,9 @@ class Config: - # Disabled because having errors - MAP_SWIPE_PREDICT_WITH_SEA_GRIDS = False # Ambushes can be avoid by having more DDs. MAP_WALK_OPTIMIZE = False + MAP_HAS_MYSTERY = False MAP_ENEMY_TEMPLATE = ['Light', 'Main', 'Carrier', 'CarrierSpecial'] INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { 'height': (80, 255 - 33),