1
0
mirror of https://gitee.com/sui-feng-cb/AzurLaneAutoScript1 synced 2026-03-18 01:01:29 +08:00

93 Commits

Author SHA1 Message Date
sui-feng-cb
74e6fd021a Merge branch 'master' of https://github.com/LmeSzinc/AzurLaneAutoScript 2026-03-14 20:17:42 +08:00
sui-feng-cb
b0b77e7097 Upd: use Filter in skinbox_allowed_positions 2026-03-14 20:14:49 +08:00
positnuec
58d9a9f653 Opt: SkinBox position filter 2026-03-14 20:14:34 +08:00
LmeSzinc
adfe9783b9 Bug fix (#5557) 2026-03-13 22:29:25 +08:00
guoh064
a11876976c Del: [JP] temporary MetaDigitCounter color (#5556) 2026-03-13 22:28:41 +08:00
LmeSzinc
a4fd8c126d Fix: Handle popup after enter minigame 2026-03-13 18:49:34 +08:00
LmeSzinc
a6f1695de5 Merge pull request #5555 from LmeSzinc/dev
Add: event entrance for event_20240229_cn rerun
2026-03-12 19:34:30 +08:00
guoh064
9a9454df26 Add: event entrance for event_20240229_cn rerun (#5552) 2026-03-12 18:47:15 +08:00
guoh064
3f9e7edf4e Add: hide_in_upper_left option for combat manual 2026-03-12 18:46:50 +08:00
guoh064
5611dce94b Upd: asset COMBAT_AUTO 2026-03-12 18:46:50 +08:00
sui-feng-cb
d7af303d04 Fix: missing argument in skinbox_position_check 2026-03-12 16:14:10 +08:00
sui-feng-cb
69cdd06e60 Upd: event_20240229_cn rerun 2026-03-12 02:11:51 +08:00
positnuec
71f8051b82 Add: Purchase SkinBox by position 2026-03-12 02:07:07 +08:00
positnuec
a07dffbeda Add: Auto recommend submarine fleet in hard mode 2026-03-09 13:42:55 +08:00
positnuec
b5fe8e425b Fix: Misjudgement caused by click light effect interference 2026-03-09 13:42:45 +08:00
positnuec
da7ca5d706 Add: Control CL1 Record independently 2026-03-09 12:50:27 +08:00
positnuec
ecf2a841cf Fix: OS infinite click on CLICK_SAFE_AREA 2026-03-09 12:45:47 +08:00
GH Action - Upstream Sync
3ceade600f Merge branch 'master' of https://github.com/LmeSzinc/AzurLaneAutoScript 2026-03-05 18:14:27 +00:00
LmeSzinc
b687048405 Merge pull request #5545 from LmeSzinc/dev
Bug fix
2026-03-06 01:13:28 +08:00
LmeSzinc
c9e95702dc Fix: Skip event story in event_20260226_cn 2026-03-06 01:12:54 +08:00
LmeSzinc
b24d09f1a0 Upd: [TW] Event event_20260226_cn (fixed #5544) 2026-03-06 01:11:10 +08:00
GH Action - Upstream Sync
4e2e4572c3 Merge branch 'master' of https://github.com/LmeSzinc/AzurLaneAutoScript 2026-03-05 14:56:10 +00:00
LmeSzinc
8618ea2352 Upd: Battle UI SpringInn (#5541) (#5543)
Co-authored-by: heipen <126669219+Heipen@users.noreply.github.com>
2026-03-05 22:42:45 +08:00
heipen
dbc5fe42e8 Upd: Battle UI SpringInn (#5541) 2026-03-04 12:32:12 +08:00
sui-feng-cb
2eec1333ad Merge branch 'master' of https://github.com/LmeSzinc/AzurLaneAutoScript 2026-02-28 05:33:05 +08:00
LmeSzinc
2a2901d218 Merge pull request #5533 from LmeSzinc/dev
Add: Event Springtide Inn Online (event_20260226_cn)
2026-02-28 04:43:01 +08:00
LmeSzinc
66fa598e75 Fix: Abyssal combat with handle_map_event (#5328) 2026-02-28 04:37:52 +08:00
LmeSzinc
bfe67e2922 Opt: swipe multiply in event_20260226_cn 2026-02-28 04:17:37 +08:00
LmeSzinc
bd108dc35f Fix: Clicking BACK_ARROW at combat loading 2026-02-28 04:09:49 +08:00
LmeSzinc
07bf9d9947 Fix: Handle wrong OCR error like "I4-4" (#5532) 2026-02-28 03:42:27 +08:00
guoh064
c8e8d0b2fe Add: Event Springtide Inn Online (event_20260226_cn) 2026-02-28 02:50:22 +08:00
sui-feng-cb
37a1d8bb8e Add: Event Springtide Inn Online (event_20260226_cn) 2026-02-27 17:12:21 +08:00
sui-feng-cb
3b8271fbca Revert "Upd: [tmp] event entrance of event_20260226_cn"
This reverts commit 8f933b5468.
2026-02-27 17:10:42 +08:00
guoh064
4b05184cbd Add: Event Springtide Inn Online (event_20260226_cn) 2026-02-27 00:19:36 +08:00
sui-feng-cb
a97af04d85 Fix: set the management page to top before island run 2026-02-26 20:31:17 +08:00
sui-feng-cb
8f933b5468 Upd: [tmp] event entrance of event_20260226_cn 2026-02-26 16:44:25 +08:00
LmeSzinc
5c7f57f3b2 Fix: patch_mimetype 2026-02-19 10:19:42 +08:00
sui-feng-cb
45b7c2cdba Merge branch 'master' of https://github.com/sui-feng-cb/AzurLaneAutoScript1 2026-02-19 05:16:45 +08:00
GH Action - Upstream Sync
ce23ea94a5 Merge branch 'master' of https://github.com/LmeSzinc/AzurLaneAutoScript 2026-02-18 20:51:23 +00:00
LmeSzinc
ad623f6332 Merge pull request #5525 from LmeSzinc/dev
Bug fix
2026-02-19 03:18:06 +08:00
LmeSzinc
c014140c6e Fix: [CN] Remove more dash-like characters (fixed #5522) 2026-02-19 03:14:09 +08:00
gepotumu
a538739910 Fix: infinite loop in _handle_use_box_amount when box count insufficient (#5516)
When requesting more boxes than available (e.g. requesting 8 but only 3
in stack), the amount-setting loop would never exit because the UI caps
at the available count while the script keeps clicking AMOUNT_PLUS.

Added click_count tracking: if multi_click() has been called 2 times
without the amount reaching the target, treat it as the UI cap and break.
Also changed the return value from bool to the actual amount set, so
_storage_use_one_box tracks the correct number of boxes used.
2026-02-19 02:19:08 +08:00
LmeSzinc
0a4f2a89fc Fix: handle raid remain like "915/", "1515" 2026-02-19 02:15:25 +08:00
LmeSzinc
986d825a81 Fix: [EN] UI switch to page_game_room 2026-02-19 01:58:20 +08:00
LmeSzinc
74bbaf8395 Fix: first ui switch must be ui_ensure 2026-02-18 09:10:55 +08:00
LmeSzinc
d99b759a08 Fix: no poor sleep in fleet_preparation_sidebar_ensure 2026-02-18 09:10:55 +08:00
ArecaSapling
102b7eeaf7 Upd: blueprint purchase for DR5 & PR6 (#5518) 2026-02-18 09:10:41 +08:00
sui-feng-cb
76eeba667f Add: Island Pearl Daemon 2026-02-17 20:58:33 +08:00
sui-feng-cb
1e5a7d444b Merge branch 'master' of https://github.com/sui-feng-cb/AzurLaneAutoScript1 2026-02-15 15:58:29 +08:00
sui-feng-cb
7b48e1ac58 Upd: blueprint purchase for DR5 & PR6 2026-02-15 15:57:18 +08:00
sui-feng-cb
a136cbe1ff Upd: config update 2026-02-15 15:54:45 +08:00
positnuec
39ee794e41 Add: Purchase PR6 and DR5 blueprints in shipyard 2026-02-15 15:11:45 +08:00
sui-feng-cb
e0b231bc58 Merge branch 'master' of https://github.com/LmeSzinc/AzurLaneAutoScript 2026-02-14 12:26:34 +08:00
sui-feng-cb
44eb4dbcf2 Revert "Add: [CN] Spring Auction Adventure (raid_20260212)"
This reverts commit c4961c80eb.
2026-02-14 12:25:42 +08:00
sui-feng-cb
95c1128c73 Revert "Fix: use cnocr for CHANGWU_OCR_REMAIN_*"
This reverts commit 5fceeddcb1.
2026-02-14 12:25:33 +08:00
LmeSzinc
cc089b6223 Merge pull request #5515 from LmeSzinc/dev
Add: Spring Auction Adventure (raid_20260212)
2026-02-14 03:44:51 +08:00
LmeSzinc
7eb80ca6f4 Upd: [CN] game server 裁决协议 2026-02-14 03:32:47 +08:00
LmeSzinc
9bb8e191ac Upd: [EN][JP][TW] Raid CHANGWU assets 2026-02-14 03:30:49 +08:00
LmeSzinc
efeb222764 Upd: [TW] Event entrance of raid_20260212 2026-02-14 03:06:07 +08:00
LmeSzinc
11405cf0c3 Fix: [EN] check other buttons for page_academy 2026-02-14 03:00:01 +08:00
LmeSzinc
3623d4c70a Merge pull request #5508 from sui-feng-cb/event_update
Add: [CN] Spring Auction Adventure (raid_20260212)
2026-02-14 02:32:28 +08:00
sui-feng-cb
5ab18b27fd Fix: use cnocr for CHANGWU_OCR_REMAIN_* 2026-02-12 20:28:24 +08:00
sui-feng-cb
5fceeddcb1 Fix: use cnocr for CHANGWU_OCR_REMAIN_* 2026-02-12 20:27:18 +08:00
sui-feng-cb
c4961c80eb Add: [CN] Spring Auction Adventure (raid_20260212) 2026-02-12 16:45:03 +08:00
sui-feng-cb
7e6b87bee8 Add: [CN] Spring Auction Adventure (raid_20260212) 2026-02-12 16:44:24 +08:00
GH Action - Upstream Sync
fc0e4ce016 Merge branch 'master' of https://github.com/LmeSzinc/AzurLaneAutoScript 2026-02-09 19:27:24 +00:00
LmeSzinc
eb73b3cfd8 Bug fix (#5505)
* Merge pull request #5500 from sui-feng-cb/event_update

Fix: raid_20240328 ex

* Upd: Battle UI Ancient

* Upd: [EN] TEMPLATE_REVELATIONS_OF_DUST

---------

Co-authored-by: ArecaSapling <115386623+sui-feng-cb@users.noreply.github.com>
2026-02-09 23:42:27 +08:00
LmeSzinc
7118c30fea Upd: [EN] TEMPLATE_REVELATIONS_OF_DUST 2026-02-09 23:40:21 +08:00
LmeSzinc
7d9e77e4fd Upd: Battle UI Ancient 2026-02-09 23:31:47 +08:00
ArecaSapling
5a32d9444c Merge pull request #5500 from sui-feng-cb/event_update
Fix: raid_20240328 ex
2026-02-09 23:23:20 +08:00
sui-feng-cb
530efc628e Upd: island ui_additional 2026-02-08 23:10:43 +08:00
sui-feng-cb
f981ec614d Fix: wait until ui appear in project_receive 2026-02-08 22:10:07 +08:00
sui-feng-cb
054da57f5b Fix: GameTooManyClickError in product_select 2026-02-08 21:01:37 +08:00
sui-feng-cb
3767be643a Upd: island character 2026-02-07 14:38:32 +08:00
sui-feng-cb
dfed4c9578 Fix: island item order 2026-02-07 04:09:31 +08:00
sui-feng-cb
352f7412a6 Fix: try reversed order in project_character_select 2026-02-07 03:52:37 +08:00
sui-feng-cb
10e302f37e Upd: island spring season item 2026-02-07 03:15:21 +08:00
sui-feng-cb
5c7b2b695b Merge branch 'master' of https://github.com/LmeSzinc/AzurLaneAutoScript 2026-02-06 23:23:24 +08:00
LmeSzinc
cd1ef2cf95 Merge pull request #5499 from LmeSzinc/dev
Dev
2026-02-06 21:29:17 +08:00
LmeSzinc
0a0e41c07f Merge pull request #5495 from sui-feng-cb/event_update
Upd: raid_20240328 rerun
2026-02-06 21:28:46 +08:00
sui-feng-cb
18049bbc7d Fix: raid_20240328 ex 2026-02-06 19:50:14 +08:00
sui-feng-cb
7e1a2322a6 Fix: use _raid_has_oil_icon for new UI design 2026-02-05 21:44:55 +08:00
sui-feng-cb
701807ec9f Fix: check once in combat_preparation 2026-02-05 21:43:38 +08:00
sui-feng-cb
6f1bdf1315 Fix: use _raid_has_oil_icon for new UI design 2026-02-05 21:03:13 +08:00
sui-feng-cb
a4fec2e2a0 Upd: raid_20240328 rerun 2026-02-05 20:47:33 +08:00
sui-feng-cb
b8144ce41a Upd: raid_20240328 rerun 2026-02-05 10:10:27 +08:00
sui-feng-cb
ab18dfe420 Fix: slow retrial for MISSION_OVERVIEW_ACCEPT(_SINGLE) 2026-02-05 09:56:22 +08:00
guoh064
eb33bdd747 Fix: slow retrial for MISSION_OVERVIEW_ACCEPT(_SINGLE) (#5487) 2026-02-04 18:26:41 +08:00
sui-feng-cb
b7c31e16e6 Opt: sort action point boxes by rarity 2026-02-02 22:06:43 +08:00
sui-feng-cb
f20aab0463 Merge branch 'master' of https://github.com/LmeSzinc/AzurLaneAutoScript 2026-01-31 11:30:13 +08:00
LmeSzinc
b99311a001 Merge pull request #5485 from LmeSzinc/dev
Dev
2026-01-31 03:26:21 +08:00
LmeSzinc
bb349af001 Upd: [TW] Coalition assets 2026-01-31 03:25:17 +08:00
LmeSzinc
87a031ed97 Upd: [TW] Event entrance of coalition_20260122 2026-01-31 03:18:38 +08:00
150 changed files with 5610 additions and 1944 deletions

View File

@@ -434,6 +434,10 @@ class AzurLaneAutoScript:
from module.storage.box_disassemble import StorageBox from module.storage.box_disassemble import StorageBox
StorageBox(config=self.config, device=self.device, task="BoxDisassemble").run() StorageBox(config=self.config, device=self.device, task="BoxDisassemble").run()
def island_pearl(self):
from module.island.pearl_daemon import IslandPearl
IslandPearl(config=self.config, device=self.device, task="IslandPearl").run()
def azur_lane_uncensored(self): def azur_lane_uncensored(self):
from module.daemon.uncensored import AzurLaneUncensored from module.daemon.uncensored import AzurLaneUncensored
AzurLaneUncensored(config=self.config, device=self.device, task="AzurLaneUncensored").run() AzurLaneUncensored(config=self.config, device=self.device, task="AzurLaneUncensored").run()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
assets/cn/raid/RPG_BACK.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
assets/en/raid/RPG_BACK.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
assets/jp/raid/RPG_BACK.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
assets/tw/raid/RPG_BACK.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -279,3 +279,8 @@ To add a new event, add a new row in here, and run `python -m module.config.conf
| 20260115 | event 20231221 cn | Light-Chasing Sea of Stars Rerun | 复刻星海逐光 | Light-Chasing Sea of Stars Rerun | 光追う星の海(復刻) | - | | 20260115 | event 20231221 cn | Light-Chasing Sea of Stars Rerun | 复刻星海逐光 | Light-Chasing Sea of Stars Rerun | 光追う星の海(復刻) | - |
| 20260122 | coalition 20260122 | Light & Shadow Fashion Shoot! | 光影风尚-拍摄进行时 | Light & Shadow Fashion Shoot! | 特集写真-撮影進行中 | - | | 20260122 | coalition 20260122 | Light & Shadow Fashion Shoot! | 光影风尚-拍摄进行时 | Light & Shadow Fashion Shoot! | 特集写真-撮影進行中 | - |
| 20260122 | event 20220526 cn | Pledge of the Radiant Court | - | - | - | 泠誓光庭 | | 20260122 | event 20220526 cn | Pledge of the Radiant Court | - | - | - | 泠誓光庭 |
| 20260129 | coalition 20260122 | Light & Shadow Fashion Shoot! | - | - | - | 光影風尚-拍攝進行時 |
| 20260205 | raid 20240328 | From Zero to Hero | 复刻从零开始的魔王讨伐之旅 | From Zero to Hero Rerun | ゼロから頑張る魔王討伐(復刻) | - |
| 20260212 | raid 20260212 | Spring Auction Adventure | 春宴怀玉香满庭 | Spring Auction Adventure | 新春玉逸品会 | 春宴懷玉香滿庭 |
| 20260226 | event 20260226 cn | Springtide Inn Online | 春满客栈Online | Springtide Inn Online | 春色旅籠Online | 春滿客棧Online |
| 20260312 | event 20240229 cn | Snowrealm Peregrination Rerun | 复刻雪境迷踪 | Snowrealm Peregrination Rerun | 銀界遊廻(復刻) | - |

View File

@@ -1,3 +1,4 @@
from module.base.timer import Timer
from module.campaign.campaign_base import CampaignBase as CampaignBase_ from module.campaign.campaign_base import CampaignBase as CampaignBase_
from module.exception import RequestHumanTakeover from module.exception import RequestHumanTakeover
from module.logger import logger from module.logger import logger
@@ -58,6 +59,7 @@ class CampaignBase(CampaignBase_):
Fixed number of scrolls until give up, may need to Fixed number of scrolls until give up, may need to
increase as more war archives campaigns are added increase as more war archives campaigns are added
""" """
confirm_timer = Timer(1.5, count=4)
for _ in range(20): for _ in range(20):
if skip_first_screenshot: if skip_first_screenshot:
skip_first_screenshot = False skip_first_screenshot = False
@@ -80,13 +82,19 @@ class CampaignBase(CampaignBase_):
return entrance return entrance
if WAR_ARCHIVES_SCROLL.appear(main=self): if WAR_ARCHIVES_SCROLL.appear(main=self):
confirm_timer.clear()
if WAR_ARCHIVES_SCROLL.at_bottom(main=self): if WAR_ARCHIVES_SCROLL.at_bottom(main=self):
WAR_ARCHIVES_SCROLL.set_top(main=self) WAR_ARCHIVES_SCROLL.set_top(main=self)
else: else:
WAR_ARCHIVES_SCROLL.next_page(main=self, page=0.66) WAR_ARCHIVES_SCROLL.next_page(main=self, page=0.66)
continue continue
else: else:
break confirm_timer.start()
if confirm_timer.reached():
logger.warning('WAR_ARCHIVES_SCROLL disappeared')
break
else:
continue
logger.warning('Failed to find archives entrance') logger.warning('Failed to find archives entrance')
return None return None

View File

@@ -0,0 +1,84 @@
from module.campaign.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('A1')
MAP.shape = 'I8'
MAP.camera_data = ['E2', 'E6']
MAP.camera_data_spawn_point = ['E2']
MAP.map_data = """
-- -- ME -- ME -- -- -- --
-- ++ -- -- -- ME ++ ++ --
-- ++ -- SP -- -- Me ++ --
-- ME -- -- SP -- -- ME --
++ -- Me -- -- -- Me -- --
-- ME ++ MS -- MS ++ ++ ++
-- -- ME -- __ -- ME ++ --
-- -- -- -- MB -- -- -- --
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 1},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 1},
{'battle': 3, 'enemy': 1, 'boss': 1},
{'battle': 4, 'enemy': 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 = []
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = False
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
MAP_SWIPE_MULTIPLY = (1.179, 1.201)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.140, 1.161)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.107, 1.127)
class Campaign(CampaignBase):
MAP = MAP
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
def battle_0(self):
if self.clear_siren():
return True
if self.clear_filter_enemy(self.ENEMY_FILTER, preserve=0):
return True
return self.battle_default()
def battle_3(self):
return self.clear_boss()

View File

@@ -0,0 +1,74 @@
from module.campaign.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 .a1 import Config as ConfigBase
MAP = CampaignMap('A2')
MAP.shape = 'J7'
MAP.camera_data = ['D2', 'D5', 'E4']
MAP.camera_data_spawn_point = ['D5']
MAP.map_data = """
-- ME -- -- ME ++ ++ -- -- --
MB -- ME -- -- -- ++ ME ME ++
++ -- ++ ++ Me -- Me -- -- ++
-- -- ++ ++ -- __ -- -- ME --
-- MS -- -- 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
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 1},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 1},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 1, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = []
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = False
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom-left'
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()

View File

@@ -0,0 +1,75 @@
from module.campaign.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 .a1 import Config as ConfigBase
MAP = CampaignMap('A3')
MAP.shape = 'H8'
MAP.camera_data = ['D4', 'D6', 'E3']
MAP.camera_data_spawn_point = ['D4']
MAP.map_data = """
++ ++ -- -- ME -- -- ME
++ ++ MS -- -- -- ME --
SP -- -- MS -- ++ -- --
SP -- -- MS -- ++ ME --
++ Me __ -- -- -- -- --
++ ME -- Me ++ ++ ++ --
-- -- -- -- Me -- ME --
MB ++ Me ME -- ME -- --
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 1},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 1},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 1, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, \
A2, B2, C2, D2, E2, F2, G2, H2, \
A3, B3, C3, D3, E3, F3, G3, H3, \
A4, B4, C4, D4, E4, F4, G4, H4, \
A5, B5, C5, D5, E5, F5, G5, H5, \
A6, B6, C6, D6, E6, F6, G6, H6, \
A7, B7, C7, D7, E7, F7, G7, H7, \
A8, B8, C8, D8, E8, F8, G8, H8, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = []
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = False
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
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()

View File

@@ -0,0 +1,85 @@
from module.campaign.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('B1')
MAP.shape = 'I8'
MAP.camera_data = ['D3', 'D6', 'F3', 'F6']
MAP.camera_data_spawn_point = ['D6']
MAP.map_data = """
++ -- -- -- -- -- -- -- --
ME -- ME ++ ++ ++ -- -- ++
-- ME -- MS -- MS -- ME ++
-- ++ MS -- -- -- Me -- ME
-- Me -- -- SP -- -- __ Me
-- -- -- SP -- -- Me -- --
++ ++ Me -- -- ++ -- MB --
++ ++ -- ME ME ++ ME -- ME
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 1},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 2, 'boss': 1},
{'battle': 5, 'enemy': 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 = []
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = False
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
MAP_SWIPE_MULTIPLY = (1.138, 1.160)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.101, 1.121)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.069, 1.088)
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()

View File

@@ -0,0 +1,76 @@
from module.campaign.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 .b1 import Config as ConfigBase
MAP = CampaignMap('B2')
MAP.shape = 'J8'
MAP.camera_data = ['D2', 'D6', 'G2', 'G6']
MAP.camera_data_spawn_point = ['G2']
MAP.map_data = """
MB ++ ME ME ++ ++ ++ -- -- --
-- -- -- -- ++ ME MS -- -- SP
-- ME ++ -- Me -- -- MS -- --
-- -- Me -- -- __ MS -- -- SP
-- ME -- ++ -- -- -- -- -- --
-- ++ ME -- Me -- Me ++ ++ ME
-- ME -- ME ++ -- -- ME ++ --
-- -- -- -- ++ ME -- -- -- --
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 1},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 2},
{'battle': 5, 'enemy': 1, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = []
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = False
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
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()

View File

@@ -0,0 +1,82 @@
from module.campaign.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 .b1 import Config as ConfigBase
MAP = CampaignMap('B3')
MAP.shape = 'I10'
MAP.camera_data = ['D4', 'D6', 'D8', 'F4', 'F6', 'F8']
MAP.camera_data_spawn_point = ['D2']
MAP.map_data = """
++ ++ ++ SP -- SP ++ ++ ++
-- -- -- -- -- -- -- -- --
-- Me ++ -- MS -- ++ Me --
-- Me ++ MS -- MS ++ Me --
-- -- Me -- __ -- Me -- --
ME -- -- -- ++ -- -- -- ME
-- ME -- ++ ++ ++ -- ME --
ME -- -- ME -- ME -- -- ME
++ ++ -- -- MB -- -- ++ ++
++ ++ -- ME -- ME -- ++ ++
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 2},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 2},
{'battle': 5, 'enemy': 1, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
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, \
A10, B10, C10, D10, E10, F10, G10, H10, I10, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = []
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = False
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
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()

View File

@@ -0,0 +1,84 @@
from module.campaign.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('C1')
MAP.shape = 'I8'
MAP.camera_data = ['E2', 'E6']
MAP.camera_data_spawn_point = ['E2']
MAP.map_data = """
-- -- ME -- ME -- -- -- --
-- ++ -- -- -- ME ++ ++ --
-- ++ -- SP -- -- Me ++ --
-- ME -- -- SP -- -- ME --
++ -- Me -- -- -- Me -- --
-- ME ++ MS -- MS ++ ++ ++
-- -- ME -- __ -- ME ++ --
-- -- -- -- MB -- -- -- --
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 2},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 1, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
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 = []
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = False
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
MAP_SWIPE_MULTIPLY = (1.179, 1.201)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.140, 1.161)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.107, 1.127)
class Campaign(CampaignBase):
MAP = MAP
ENEMY_FILTER = '1L > 1M > 1E > 1C > 2L > 2M > 2E > 2C > 3L > 3M > 3E > 3C'
def battle_0(self):
if self.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()

View File

@@ -0,0 +1,74 @@
from module.campaign.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 .c1 import Config as ConfigBase
MAP = CampaignMap('C2')
MAP.shape = 'J7'
MAP.camera_data = ['D2', 'D5', 'E4']
MAP.camera_data_spawn_point = ['D5']
MAP.map_data = """
-- ME -- -- ME ++ ++ -- -- --
MB -- ME -- -- -- ++ ME ME ++
++ -- ++ ++ Me -- Me -- -- ++
-- -- ++ ++ -- __ -- -- ME --
-- MS -- -- 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
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 2},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 1, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = []
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = False
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom-left'
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()

View File

@@ -0,0 +1,76 @@
from module.campaign.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 .c1 import Config as ConfigBase
MAP = CampaignMap('C3')
MAP.shape = 'H8'
MAP.camera_data = ['D4', 'D6', 'E3']
MAP.camera_data_spawn_point = ['D4']
MAP.map_data = """
++ ++ -- -- ME -- -- ME
++ ++ MS -- -- -- ME --
SP -- -- MS -- ++ -- --
SP -- -- MS -- ++ ME --
++ Me __ -- -- -- -- --
++ ME -- Me ++ ++ ++ --
-- -- -- -- Me -- ME --
MB ++ Me ME -- ME -- --
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 2},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 1},
{'battle': 5, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, \
A2, B2, C2, D2, E2, F2, G2, H2, \
A3, B3, C3, D3, E3, F3, G3, H3, \
A4, B4, C4, D4, E4, F4, G4, H4, \
A5, B5, C5, D5, E5, F5, G5, H5, \
A6, B6, C6, D6, E6, F6, G6, H6, \
A7, B7, C7, D7, E7, F7, G7, H7, \
A8, B8, C8, D8, E8, F8, G8, H8, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = []
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = False
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
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()

View File

@@ -0,0 +1,85 @@
from module.campaign.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('D1')
MAP.shape = 'I8'
MAP.camera_data = ['D3', 'D6', 'F3', 'F6']
MAP.camera_data_spawn_point = ['D6']
MAP.map_data = """
++ -- -- -- -- -- -- -- --
ME -- ME ++ ++ ++ -- -- ++
-- ME -- MS -- MS -- ME ++
-- ++ MS -- -- -- Me -- ME
-- Me -- -- SP -- -- __ Me
-- -- -- SP -- -- Me -- --
++ ++ Me -- -- ++ -- MB --
++ ++ -- ME ME ++ ME -- ME
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 2},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 2},
{'battle': 5, 'enemy': 1, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, \
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 = []
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = False
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = True
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
MAP_SWIPE_MULTIPLY = (1.138, 1.160)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.101, 1.121)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.069, 1.088)
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()

View File

@@ -0,0 +1,85 @@
from module.campaign.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 .d1 import Config as ConfigBase
MAP = CampaignMap('D2')
MAP.shape = 'J8'
MAP.camera_data = ['D2', 'D6', 'G2', 'G6']
MAP.camera_data_spawn_point = ['G2']
MAP.map_data = """
MB ++ ME ME ++ ++ ++ -- -- --
-- -- -- -- ++ ME MS -- -- SP
-- ME ++ -- Me -- -- MS -- --
-- -- Me -- -- __ MS -- -- SP
-- ME -- ++ -- -- -- -- -- --
-- ++ ME -- Me -- Me ++ ++ ME
-- ME -- ME ++ -- -- ME ++ --
-- -- -- -- ++ ME -- -- -- --
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 2},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2, 'siren': 1},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 2},
{'battle': 5, 'enemy': 1},
{'battle': 6, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, I1, J1, \
A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, \
A3, B3, C3, D3, E3, F3, G3, H3, I3, J3, \
A4, B4, C4, D4, E4, F4, G4, H4, I4, J4, \
A5, B5, C5, D5, E5, F5, G5, H5, I5, J5, \
A6, B6, C6, D6, E6, F6, G6, H6, I6, J6, \
A7, B7, C7, D7, E7, F7, G7, H7, I7, J7, \
A8, B8, C8, D8, E8, F8, G8, H8, I8, J8, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = []
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = False
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
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()

View File

@@ -0,0 +1,91 @@
from module.campaign.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 .d1 import Config as ConfigBase
MAP = CampaignMap('D3')
MAP.shape = 'I10'
MAP.camera_data = ['D4', 'D6', 'D8', 'F4', 'F6', 'F8']
MAP.camera_data_spawn_point = ['D2']
MAP.map_data = """
++ ++ ++ SP -- SP ++ ++ ++
-- -- -- -- -- -- -- -- --
-- Me ++ -- MS -- ++ Me --
-- Me ++ MS -- MS ++ Me --
-- -- Me -- __ -- Me -- --
ME -- -- -- ++ -- -- -- ME
-- ME -- ++ ++ ++ -- ME --
ME -- -- ME -- ME -- -- ME
++ ++ -- -- MB -- -- ++ ++
++ ++ -- ME -- ME -- ++ ++
"""
MAP.weight_data = """
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
50 50 50 50 50 50 50 50 50
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 2, 'siren': 2},
{'battle': 1, 'enemy': 1},
{'battle': 2, 'enemy': 2, 'siren': 1},
{'battle': 3, 'enemy': 1},
{'battle': 4, 'enemy': 2},
{'battle': 5, 'enemy': 1},
{'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, \
A10, B10, C10, D10, E10, F10, G10, H10, I10, \
= MAP.flatten()
class Config(ConfigBase):
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = []
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = False
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
# ===== End of generated config =====
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()

View File

@@ -0,0 +1,96 @@
from module.campaign.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 = 'H7'
MAP.camera_data = ['D5', 'E2', 'E5']
MAP.camera_data_spawn_point = ['D2']
MAP.map_data = """
-- -- -- -- ++ -- ME --
-- SP SP -- ++ ME -- ME
-- -- -- -- MS -- ME --
++ ++ ++ MS __ -- ++ ++
-- ME -- -- -- MS -- ++
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
"""
MAP.spawn_data = [
{'battle': 0, 'enemy': 10, 'siren': 3},
{'battle': 1},
{'battle': 2},
{'battle': 3},
{'battle': 4},
{'battle': 5},
{'battle': 6},
{'battle': 7, 'boss': 1},
]
A1, B1, C1, D1, E1, F1, G1, H1, \
A2, B2, C2, D2, E2, F2, G2, H2, \
A3, B3, C3, D3, E3, F3, G3, H3, \
A4, B4, C4, D4, E4, F4, G4, H4, \
A5, B5, C5, D5, E5, F5, G5, H5, \
A6, B6, C6, D6, E6, F6, G6, H6, \
A7, B7, C7, D7, E7, F7, G7, H7, \
= MAP.flatten()
class Config:
# ===== Start of generated config =====
MAP_SIREN_TEMPLATE = []
MOVABLE_ENEMY_TURN = (2,)
MAP_HAS_SIREN = True
MAP_HAS_MOVABLE_ENEMY = True
MAP_HAS_MAP_STORY = False
MAP_HAS_FLEET_STEP = True
MAP_HAS_AMBUSH = False
MAP_HAS_MYSTERY = False
STAR_REQUIRE_1 = 0
STAR_REQUIRE_2 = 0
STAR_REQUIRE_3 = 0
# ===== End of generated config =====
MAP_CHAPTER_SWITCH_20241219 = True
STAGE_ENTRANCE = ['half', '20240725']
MAP_HAS_MODE_SWITCH = False
STAGE_INCREASE_AB = True
MAP_WALK_USE_CURRENT_FLEET = True
MAP_IS_ONE_TIME_STAGE = True
MAP_SIREN_HAS_BOSS_ICON_SMALL = True
MAP_SWIPE_MULTIPLY = (1.162, 1.184)
MAP_SWIPE_MULTIPLY_MINITOUCH = (1.124, 1.145)
MAP_SWIPE_MULTIPLY_MAATOUCH = (1.091, 1.111)
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=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()

Some files were not shown because too many files have changed in this diff Show More