├── .github
└── workflows
│ ├── install.yml
│ ├── install.yml.agent
│ ├── mirrorchyan.yml
│ └── mirrorchyan_release_note.yml
├── .gitignore
├── .gitmodules
├── .vscode
└── settings.json
├── LICENSE
├── README.md
├── assets
├── README.md
├── custom
│ ├── Agent_file.py
│ ├── Recognition
│ │ └── LogicalOperators.py
│ ├── action
│ │ ├── Count.py
│ │ ├── Fishing.py
│ │ ├── PPOverride.py
│ │ ├── PuzzleClculate.py
│ │ ├── ScreenShot.py
│ │ ├── ShotSelf.py
│ │ ├── ShotTarget.py
│ │ ├── StoryRogue.py
│ │ └── __init__.py
│ ├── custom.json
│ └── main.py
├── interface.json
└── resource
│ ├── PC
│ ├── default_pipeline.json
│ └── pipeline
│ │ ├── 任务.json
│ │ ├── 关闭游戏.json
│ │ ├── 凭证.json
│ │ ├── 刷碎片.json
│ │ ├── 升级枪械.json
│ │ ├── 启动.json
│ │ ├── 商店.json
│ │ ├── 心动水弹.json
│ │ ├── 战斗.json
│ │ ├── 疗愈.json
│ │ ├── 精神拟境.json
│ │ ├── 赠送感知.json
│ │ ├── 通用任务.json
│ │ ├── 钓鱼.json
│ │ ├── 领取体力.json
│ │ └── 领取邮件.json
│ └── base
│ ├── default_pipeline.json
│ ├── image
│ ├── 任务
│ │ ├── 切换定期任务_1_186_183_55__0_136_283_155.png
│ │ ├── 切换定期任务_PC.png
│ │ ├── 切换日常_PC.png
│ │ └── 切换日常任务_8_88_168_58__0_38_268_158.png
│ ├── 体力
│ │ ├── 供应站补给箱_7_343_59_57__0_293_159_157.png
│ │ ├── 供应站补给箱_PC.png
│ │ └── 无体力补给包_PC.png
│ ├── 凭证
│ │ ├── 凭证奖励.png
│ │ ├── 凭证奖励_472_660_36_35__422_585_136_135.png
│ │ ├── 每周任务.png
│ │ ├── 每周任务_884_657_39_37__834_583_139_137.png
│ │ ├── 每日任务.png
│ │ ├── 每日任务_680_661_34_32__630_588_134_132.png
│ │ ├── 限定任务.png
│ │ └── 限定任务_1093_658_35_36__1043_584_135_136.png
│ ├── 刷碎片
│ │ ├── 咎冠芬妮.png
│ │ ├── 小天师行为02.png
│ │ ├── 恩雅羽蜕.png
│ │ ├── 无限之视里芙.png
│ │ ├── 朝翼凯西娅.png
│ │ ├── 未解锁行为02.png
│ │ ├── 狂猎里芙.png
│ │ ├── 琴诺悖谬.png
│ │ ├── 缄默芙提雅.png
│ │ ├── 蓝闪凯西娅.png
│ │ ├── 蓝闪行为02.png
│ │ ├── 记忆嵌片包.png
│ │ ├── 记忆嵌片包_820_30_32_32__770_0_132_132.png
│ │ ├── 豹豹伊切尔.png
│ │ ├── 辉耀芬妮.png
│ │ ├── 辉耀行为02.png
│ │ ├── 雨燕茉莉安.png
│ │ └── 驰掣芙提雅.png
│ ├── 升级
│ │ ├── 排序.png
│ │ ├── 排序2_325_203_130_30__275_153_230_130.png
│ │ ├── 排序_28_656_75_47__0_573_175_147.png
│ │ ├── 排序_PC.png
│ │ ├── 排序倒序_419_203_36_30__369_153_136_130.png
│ │ ├── 白材料.png
│ │ ├── 紫材料.png
│ │ ├── 紫材料_293_95_96_79__243_45_196_179.png
│ │ ├── 绿材料.png
│ │ ├── 绿材料_45_95_94_78__0_45_194_178.png
│ │ ├── 蓝材料.png
│ │ ├── 蓝材料_171_96_92_77__121_46_192_177.png
│ │ ├── 选择材料.png
│ │ └── 选择材料_790_464_93_89__740_414_193_189.png
│ ├── 启动
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 关闭公告1_1087_110_35_35__1037_60_135_135.png
│ │ ├── 关闭公告2_1080_142_31_29__1030_92_131_129.png
│ │ ├── 关闭公告3_1192_88_33_33__1142_38_133_133.png
│ │ └── 关闭通知_1203_52_31_33__1149_2_131_133.png
│ ├── 基地
│ │ └── 在基地内部.png
│ ├── 增益试炼
│ │ └── 暂停.png
│ ├── 妮塔之邀
│ │ └── 奇遇.png
│ ├── 异星守护
│ │ └── 开火.png
│ ├── 心动水弹
│ │ ├── GO.png
│ │ ├── GO_PC.png
│ │ ├── 向对方开枪.png
│ │ ├── 向对方开枪_PC.png
│ │ ├── 向自己开枪.png
│ │ ├── 向自己开枪_PC.png
│ │ ├── 墨镜.png
│ │ ├── 墨镜_PC.png
│ │ ├── 墨镜_偷.png
│ │ ├── 对方回合.png
│ │ ├── 对方回合_PC.png
│ │ ├── 展开道具.png
│ │ ├── 展开道具_PC.png
│ │ ├── 开枪!.png
│ │ ├── 怪盗之手.png
│ │ ├── 怪盗之手_偷.png
│ │ ├── 我的回合.png
│ │ ├── 我的回合_PC.png
│ │ ├── 手铐.png
│ │ ├── 手铐_PC.png
│ │ ├── 手铐_偷.png
│ │ ├── 拘束中.png
│ │ ├── 拘束中_PC.png
│ │ ├── 枪管.png
│ │ ├── 枪管_PC.png
│ │ ├── 枪管_偷.png
│ │ ├── 活力宝石.png
│ │ ├── 活力宝石_PC.png
│ │ ├── 活力宝石_偷.png
│ │ ├── 生命值.png
│ │ ├── 生命值_PC.png
│ │ ├── 退弹布偶.png
│ │ ├── 退弹布偶_偷.png
│ │ ├── 逆转魔术.png
│ │ ├── 逆转魔术_偷.png
│ │ └── 重置之锤.png
│ ├── 战斗
│ │ ├── 增加作战次数_748_460_62_37__698_410_162_137.png
│ │ ├── 战斗次数1_594_467_25_25__544_417_125_125.png
│ │ └── 战斗次数4_596_467_23_24__546_417_123_124.png
│ ├── 拼图
│ │ ├── 10_up.png
│ │ ├── 11_up.png
│ │ ├── 1_up.png
│ │ ├── 2_up.png
│ │ ├── 3_up.png
│ │ ├── 4_up.png
│ │ ├── 5_up.png
│ │ ├── 6_up.png
│ │ ├── 7_up.png
│ │ ├── 8_up.png
│ │ ├── 9_up.png
│ │ └── 赠送碎片.png
│ ├── 疗愈
│ │ ├── 切换捏_191_611_62_57__141_561_162_157.png
│ │ ├── 切换捏_PC.png
│ │ ├── 切换锤_56_611_63_59__6_561_163_159.png
│ │ ├── 切换锤_PC.png
│ │ ├── 开始疗愈_1130_626_70_48__1080_572_170_148.png
│ │ ├── 开始疗愈_PC.png
│ │ ├── 红点_987_426_30_32__937_376_130_132.png
│ │ ├── 红点_PC.png
│ │ ├── 黄点_902_392_31_32__852_342_131_132.png
│ │ ├── 黄点_PC.png
│ │ ├── 黑点_824_384_34_32__774_334_134_132.png
│ │ └── 黑点_PC.png
│ ├── 笔谈
│ │ ├── 战斗键位笔记.txt
│ │ ├── 笔谈_boss.png
│ │ ├── 笔谈_事件.png
│ │ ├── 笔谈_事件2.png
│ │ ├── 笔谈_宝箱__497_221_46_45__447_171_146_145.png
│ │ ├── 笔谈_战斗.png
│ │ ├── 笔谈_战斗2.png
│ │ ├── 笔谈_战斗_大门__94_334_176_60__44_284_276_160.png
│ │ ├── 笔谈_战斗_庭院__93_151_105_148__43_101_205_248.png
│ │ ├── 笔谈_战斗_红走廊__65_123_211_160__15_73_311_260.png
│ │ ├── 笔谈_战斗_走廊__64_130_202_145__14_80_302_245.png
│ │ ├── 笔谈_战斗中__109_21_22_19__59_0_122_90.png
│ │ ├── 笔谈_扩展背包__497_220_44_45__447_170_144_145.png
│ │ └── 笔谈_问号__498_457_42_43__448_407_142_143.png
│ ├── 精神拟境
│ │ ├── 打开精神拟境奖励_86_570_45_46__36_520_145_146.png
│ │ ├── 退出精神拟境奖励_1214_54_39_37__1141_4_139_137.png
│ │ ├── 难度5.png
│ │ └── 难度5_PC.png
│ ├── 赠送感知
│ │ ├── 好友.png
│ │ └── 好友_250_298_43_34__200_248_143_134.png
│ ├── 通用任务
│ │ ├── 主菜单_999_24_49_44__949_0_149_144.png
│ │ ├── 主菜单_PC.png
│ │ └── 返回.png
│ ├── 钓鱼
│ │ └── 退出地图.png
│ └── 领取邮件
│ │ ├── 邮件_74_281_39_30__24_231_139_130.png
│ │ └── 邮件_PC.png
│ ├── model
│ └── .gitignore
│ └── pipeline
│ ├── Alien_Guardian.json
│ ├── Battle_pass.json
│ ├── Character_Fragments.json
│ ├── Collect_Quest.json
│ ├── Daily_Battle.json
│ ├── Doki_Roulette.json
│ ├── Dorm_puzzle.json
│ ├── Fishing.json
│ ├── Gather_Pieces.json
│ ├── General.json
│ ├── Gift_Stamina.json
│ ├── Granted_PuzzlePieces.json
│ ├── Mail.json
│ ├── Nitas_Invitation.json
│ ├── Open_World_mission.json
│ ├── Psychic_Simulated_Realm.json
│ ├── Receive_Stamina.json
│ ├── Roguelike_-1.json
│ ├── Roguelike_2.json
│ ├── Shoping.json
│ ├── Start_up.json
│ ├── Stop_App.json
│ ├── Upgrade_Firearms.json
│ └── soothe.json
├── cliff.toml
├── configure.py
├── deps
└── .gitkeep
├── docs
└── 物品列表.md
├── install.py
├── install_agent.py
├── logo.png
├── maapicli.py
└── requirements.txt
/.github/workflows/install.yml:
--------------------------------------------------------------------------------
1 | name: install
2 |
3 | on:
4 | push:
5 | tags:
6 | - "v*"
7 | branches:
8 | - "**"
9 | paths:
10 | - ".github/workflows/install.yml"
11 | - "assets/**"
12 | - "**.py"
13 | pull_request:
14 | branches:
15 | - "**"
16 | paths:
17 | - ".github/workflows/install.yml"
18 | - "assets/**"
19 | - "**.py"
20 | workflow_dispatch:
21 |
22 | jobs:
23 | changelog:
24 | name: Generate changelog
25 | runs-on: ubuntu-latest
26 | outputs:
27 | release_body: ${{ steps.git-cliff.outputs.content }}
28 | steps:
29 | - name: Checkout
30 | uses: actions/checkout@v4
31 | with:
32 | fetch-depth: 0
33 |
34 | - name: Generate a changelog
35 | uses: orhun/git-cliff-action@v4
36 | id: git-cliff
37 | with:
38 | config: cliff.toml
39 | args: -vv --latest --strip header
40 | env:
41 | OUTPUT: CHANGES.md
42 | GITHUB_REPO: ${{ github.repository }}
43 |
44 | meta:
45 | runs-on: ubuntu-latest
46 | steps:
47 | - uses: actions/checkout@v4
48 | with:
49 | fetch-depth: 0
50 | - id: set_tag
51 | run: |
52 | is_release=${{ startsWith(github.ref, 'refs/tags/v') }}
53 | tag=$(git describe --tags --match "v*" ${{ github.ref }} || true)
54 | if [[ $tag != v* ]]; then
55 | tag=$(curl -sX GET "https://api.github.com/repos/${{ github.repository }}/releases/latest" --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' | awk '/tag_name/{print $4}' FS='["]')
56 | if [[ $tag != v* ]]; then
57 | tag="v0.0.0"
58 | fi
59 | tag=$(date "+$tag-%y%m%d-$(git rev-parse --short HEAD)")
60 | fi
61 | if ! $is_release ; then
62 | prefix=${tag%-*-*}
63 | suffix=${tag#$prefix-}
64 | tag="$prefix-ci.$suffix"
65 | fi
66 |
67 | echo tag=$tag | tee -a $GITHUB_OUTPUT
68 | echo is_release=$is_release | tee -a $GITHUB_OUTPUT
69 | outputs:
70 | tag: ${{ steps.set_tag.outputs.tag }}
71 | is_release: ${{ steps.set_tag.outputs.is_release }}
72 |
73 | build:
74 | needs: meta
75 | strategy:
76 | matrix:
77 | os: [windows, ubuntu, macos]
78 | arch: [aarch64, x86_64]
79 | include:
80 | - os: windows
81 | runs-on: windows-latest
82 | file-suffix: win
83 | - os: ubuntu
84 | runs-on: ubuntu-latest
85 | file-suffix: linux
86 | - os: macos
87 | runs-on: macos-latest
88 | file-suffix: macos
89 | fail-fast: false
90 |
91 | runs-on: ${{ matrix.runs-on }}
92 | steps:
93 | - uses: actions/checkout@v4
94 | with:
95 | submodules: true
96 |
97 | - name: Set up Python
98 | uses: actions/setup-python@v4
99 | with:
100 | python-version: '3.12'
101 |
102 | - name: Install
103 | shell: bash
104 | run: |
105 | pip install pyinstaller
106 | pip install -r requirements.txt
107 | python ./install.py ${{ needs.meta.outputs.tag }}
108 |
109 | - name: Download MFW
110 | uses: robinraju/release-downloader@v1
111 | with:
112 | repository: overflow65537/MFW-PyQt6
113 | fileName: "MFW-PyQt6-${{ matrix.file-suffix }}-${{ matrix.arch }}*"
114 | latest: true
115 | out-file-path: "maapicli"
116 | extract: true
117 |
118 | - name: rm MFW pack
119 | shell: bash
120 | run: |
121 | rm maapicli/MFW-PyQt6-${{ matrix.file-suffix }}-${{ matrix.arch }}*
122 |
123 | - uses: actions/upload-artifact@v4
124 | with:
125 | name: MSBA-${{ matrix.file-suffix }}-${{ matrix.arch }}
126 | path: "maapicli"
127 |
128 | release:
129 | if: ${{ needs.meta.outputs.is_release == 'true' }}
130 | needs: [meta, build, changelog]
131 | runs-on: ubuntu-latest
132 | steps:
133 | - uses: actions/download-artifact@v4
134 | with:
135 | path: assets
136 |
137 | - run: |
138 | cd assets
139 | for f in *; do
140 | (cd $f && zip -r ../$f-${{ needs.meta.outputs.tag }}.zip .)
141 | done
142 | - uses: softprops/action-gh-release@v2
143 | with:
144 | files: assets/*
145 | tag_name: ${{ needs.meta.outputs.tag }}
146 | body: ${{ needs.changelog.outputs.release_body }}
147 | draft: false
148 | prerelease: false
149 |
150 | - name: Trigger MirrorChyanUploading
151 | run: |
152 | gh workflow run --repo $GITHUB_REPOSITORY mirrorchyan
153 | gh workflow run --repo $GITHUB_REPOSITORY mirrorchyan_release_note
154 | env:
155 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
--------------------------------------------------------------------------------
/.github/workflows/install.yml.agent:
--------------------------------------------------------------------------------
1 | name: install
2 |
3 | on:
4 | push:
5 | tags:
6 | - "v*"
7 | branches:
8 | - "**"
9 | paths:
10 | - ".github/workflows/install.yml"
11 | - "assets/**"
12 | - "**.py"
13 | pull_request:
14 | branches:
15 | - "**"
16 | paths:
17 | - ".github/workflows/install.yml"
18 | - "assets/**"
19 | - "**.py"
20 | workflow_dispatch:
21 |
22 | jobs:
23 | changelog:
24 | name: Generate changelog
25 | runs-on: ubuntu-latest
26 | outputs:
27 | release_body: ${{ steps.git-cliff.outputs.content }}
28 | steps:
29 | - name: Checkout
30 | uses: actions/checkout@v4
31 | with:
32 | fetch-depth: 0
33 |
34 | - name: Generate a changelog
35 | uses: orhun/git-cliff-action@v4
36 | id: git-cliff
37 | with:
38 | config: cliff.toml
39 | args: -vv --latest --strip header
40 | env:
41 | OUTPUT: CHANGES.md
42 | GITHUB_REPO: ${{ github.repository }}
43 |
44 | meta:
45 | runs-on: ubuntu-latest
46 | steps:
47 | - uses: actions/checkout@v4
48 | with:
49 | fetch-depth: 0
50 | - id: set_tag
51 | run: |
52 | is_release=${{ startsWith(github.ref, 'refs/tags/v') }}
53 | tag=$(git describe --tags --match "v*" ${{ github.ref }} || true)
54 | if [[ $tag != v* ]]; then
55 | tag=$(curl -sX GET "https://api.github.com/repos/${{ github.repository }}/releases/latest" --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' | awk '/tag_name/{print $4}' FS='["]')
56 | if [[ $tag != v* ]]; then
57 | tag="v0.0.0"
58 | fi
59 | tag=$(date "+$tag-%y%m%d-$(git rev-parse --short HEAD)")
60 | fi
61 | if ! $is_release ; then
62 | prefix=${tag%-*-*}
63 | suffix=${tag#$prefix-}
64 | tag="$prefix-ci.$suffix"
65 | fi
66 |
67 | echo tag=$tag | tee -a $GITHUB_OUTPUT
68 | echo is_release=$is_release | tee -a $GITHUB_OUTPUT
69 | outputs:
70 | tag: ${{ steps.set_tag.outputs.tag }}
71 | is_release: ${{ steps.set_tag.outputs.is_release }}
72 |
73 | build:
74 | needs: meta
75 | strategy:
76 | matrix:
77 | os: [windows, ubuntu, macos]
78 | arch: [aarch64, x86_64]
79 | include:
80 | - os: windows
81 | runs-on: windows-latest
82 | file-suffix: win
83 | - os: ubuntu
84 | runs-on: ubuntu-latest
85 | file-suffix: linux
86 | - os: macos
87 | runs-on: macos-latest
88 | file-suffix: macos
89 | fail-fast: false
90 |
91 | runs-on: ${{ matrix.runs-on }}
92 | steps:
93 | - uses: actions/checkout@v4
94 | with:
95 | submodules: true
96 |
97 | - name: Set up Python
98 | uses: actions/setup-python@v4
99 | with:
100 | python-version: '3.12'
101 |
102 | - name: Download MaaFramework
103 | uses: robinraju/release-downloader@v1
104 | with:
105 | repository: MaaXYZ/MaaFramework
106 | fileName: "MAA-${{ matrix.file-suffix }}-${{ matrix.arch }}*"
107 | latest: true
108 | out-file-path: "deps"
109 | extract: true
110 | preRelease: true
111 |
112 | - name: Install
113 | shell: bash
114 | run: |
115 | pip install -r ./requirements.txt
116 | pip install pyinstaller
117 | python ./install.py ${{ needs.meta.outputs.tag }}
118 |
119 | - name: Download MFW
120 | uses: robinraju/release-downloader@v1
121 | with:
122 | repository: overflow65537/MFW-PyQt6
123 | fileName: "MFW-PyQt6-${{ matrix.file-suffix }}-${{ matrix.arch }}*"
124 | latest: true
125 | out-file-path: "install"
126 | extract: true
127 | preRelease: true
128 |
129 | - name: rm MFW pack
130 | shell: bash
131 | run: |
132 | rm install/MFW-PyQt6-${{ matrix.file-suffix }}-${{ matrix.arch }}*
133 |
134 | - uses: actions/upload-artifact@v4
135 | with:
136 | name: MSBA-${{ matrix.file-suffix }}-${{ matrix.arch }}
137 | path: "install"
138 |
139 | release:
140 | if: ${{ needs.meta.outputs.is_release == 'true' }}
141 | needs: [meta, build, changelog]
142 | runs-on: ubuntu-latest
143 | steps:
144 | - uses: actions/download-artifact@v4
145 | with:
146 | path: assets
147 |
148 | - run: |
149 | cd assets
150 | for f in *; do
151 | (cd $f && zip -r ../$f-${{ needs.meta.outputs.tag }}.zip .)
152 | done
153 | - uses: softprops/action-gh-release@v2
154 | with:
155 | files: assets/*
156 | tag_name: ${{ needs.meta.outputs.tag }}
157 | body: ${{ needs.changelog.outputs.release_body }}
158 | draft: false
159 | prerelease: false
160 |
161 | - name: Trigger MirrorChyanUploading
162 | run: |
163 | gh workflow run --repo $GITHUB_REPOSITORY mirrorchyan
164 | gh workflow run --repo $GITHUB_REPOSITORY mirrorchyan_release_note
165 | env:
166 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
167 |
--------------------------------------------------------------------------------
/.github/workflows/mirrorchyan.yml:
--------------------------------------------------------------------------------
1 | name: mirrorchyan
2 |
3 | on:
4 | workflow_dispatch:
5 |
6 | jobs:
7 | mirrorchyan:
8 | runs-on: macos-latest
9 | strategy:
10 | fail-fast: false
11 | matrix:
12 | os: [win]
13 | arch: [x86_64]
14 | steps:
15 | - id: uploading
16 | uses: MirrorChyan/uploading-action@v1
17 | with:
18 | filetype: latest-release
19 | filename: "MSBA-${{ matrix.os }}-${{ matrix.arch }}-*.zip"
20 | mirrorchyan_rid: MAA_SnowBreak
21 |
22 | owner: overflow65537
23 | repo: MAA_SnowBreak
24 | github_token: ${{ secrets.GITHUB_TOKEN }}
25 | upload_token: ${{ secrets.MirrorChyanUploadToken }}
26 | os: ${{ matrix.os }}
27 | arch: ${{ matrix.arch }}
28 |
29 | mirrorchyan_res:
30 | runs-on: macos-latest
31 | steps:
32 | - id: uploading
33 | uses: MirrorChyan/uploading-action@v1
34 | with:
35 | filetype: latest-release
36 | filename: "MSBA-win-x86_64-v*.zip"
37 | pick_files: '["resource", "interface.json","custom"]'
38 | exclude_files: '["*model/ocr/**"]'
39 | mirrorchyan_rid: MAA_SnowBreak
40 |
41 | owner: overflow65537
42 | repo: MAA_SnowBreak
43 | github_token: ${{ secrets.GITHUB_TOKEN }}
44 | upload_token: ${{ secrets.MirrorChyanUploadToken }}
45 |
--------------------------------------------------------------------------------
/.github/workflows/mirrorchyan_release_note.yml:
--------------------------------------------------------------------------------
1 | name: mirrorchyan_release_note
2 |
3 | on:
4 | workflow_dispatch:
5 | release:
6 | types: [edited]
7 |
8 | jobs:
9 | mirrorchyan:
10 | runs-on: macos-latest
11 |
12 | steps:
13 | - id: uploading
14 | uses: MirrorChyan/release-note-action@v1
15 | with:
16 | mirrorchyan_rid: MAA_SnowBreak
17 |
18 | upload_token: ${{ secrets.MirrorChyanUploadToken }}
19 | github_token: ${{ secrets.GITHUB_TOKEN }}
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # docs
2 | docs/node_modules
3 | docs/.vuepress/.temp
4 | # Prerequisites
5 | *.d
6 |
7 | # Compiled Object files
8 | build
9 | build-*
10 | *.slo
11 | *.lo
12 | *.o
13 | *.obj
14 |
15 | # Precompiled Headers
16 | *.gch
17 | *.pch
18 |
19 | # Compiled Dynamic libraries
20 | *.so
21 | *.dylib
22 | *.dll
23 |
24 | # Fortran module files
25 | *.mod
26 | *.smod
27 | !go.mod
28 |
29 | # Compiled Static libraries
30 | *.lai
31 | *.la
32 | *.a
33 | *.lib
34 |
35 | # Executables
36 | *.exe
37 | *.out
38 | *.app
39 |
40 | Debug
41 | Release
42 | .vs
43 | *.vcxproj.user
44 | *.swp
45 |
46 | ## Ignore Visual Studio temporary files, build results, and
47 | ## files generated by popular Visual Studio add-ons.
48 | ##
49 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
50 |
51 | # User-specific files
52 | *.rsuser
53 | *.suo
54 | *.user
55 | *.userosscache
56 | *.sln.docstates
57 |
58 | # User-specific files (MonoDevelop/Xamarin Studio)
59 | *.userprefs
60 |
61 | # Mono auto generated files
62 | mono_crash.*
63 |
64 | # Build results
65 | [Dd]ebug/
66 | [Dd]ebugPublic/
67 | [Rr]elease/
68 | [Rr]eleases/
69 | x64/
70 | x86/
71 | [Ww][Ii][Nn]32/
72 | [Aa][Rr][Mm]/
73 | [Aa][Rr][Mm]64/
74 | bld/
75 | [Bb]in/
76 | [Oo]bj/
77 | [Ll]og/
78 | [Ll]ogs/
79 | cmake-build-debug/
80 |
81 | # Visual Studio 2015/2017 cache/options directory
82 | .vs/
83 | # Uncomment if you have tasks that create the project's static files in wwwroot
84 | #wwwroot/
85 |
86 | # Visual Studio 2017 auto generated files
87 | Generated\ Files/
88 |
89 | # MSTest test Results
90 | [Tt]est[Rr]esult*/
91 | [Bb]uild[Ll]og.*
92 |
93 | # NUnit
94 | *.VisualState.xml
95 | TestResult.xml
96 | nunit-*.xml
97 |
98 | # Build Results of an ATL Project
99 | [Dd]ebugPS/
100 | [Rr]eleasePS/
101 | dlldata.c
102 |
103 | # Benchmark Results
104 | BenchmarkDotNet.Artifacts/
105 |
106 | # .NET Core
107 | project.lock.json
108 | project.fragment.lock.json
109 | artifacts/
110 |
111 | # ASP.NET Scaffolding
112 | ScaffoldingReadMe.txt
113 |
114 | # StyleCop
115 | StyleCopReport.xml
116 |
117 | # Files built by Visual Studio
118 | *_i.c
119 | *_p.c
120 | *_h.h
121 | *.ilk
122 | *.meta
123 | *.obj
124 | *.iobj
125 | *.pch
126 | *.pdb
127 | *.ipdb
128 | *.pgc
129 | *.pgd
130 | *.rsp
131 | *.sbr
132 | *.tlb
133 | *.tli
134 | *.tlh
135 | *.tmp
136 | *.tmp_proj
137 | *_wpftmp.csproj
138 | *.log
139 | *.tlog
140 | *.vspscc
141 | *.vssscc
142 | .builds
143 | *.pidb
144 | *.svclog
145 | *.scc
146 |
147 | # Chutzpah Test files
148 | _Chutzpah*
149 |
150 | # Visual C++ cache files
151 | ipch/
152 | *.aps
153 | *.ncb
154 | *.opendb
155 | *.opensdf
156 | *.sdf
157 | *.cachefile
158 | *.VC.db
159 | *.VC.VC.opendb
160 |
161 | # Visual Studio profiler
162 | *.psess
163 | *.vsp
164 | *.vspx
165 | *.sap
166 |
167 | # Visual Studio Trace Files
168 | *.e2e
169 |
170 | # TFS 2012 Local Workspace
171 | $tf/
172 |
173 | # Guidance Automation Toolkit
174 | *.gpState
175 |
176 | # ReSharper is a .NET coding add-in
177 | _ReSharper*/
178 | *.[Rr]e[Ss]harper
179 | *.DotSettings.user
180 |
181 | # TeamCity is a build add-in
182 | _TeamCity*
183 |
184 | # DotCover is a Code Coverage Tool
185 | *.dotCover
186 |
187 | # AxoCover is a Code Coverage Tool
188 | .axoCover/*
189 | !.axoCover/settings.json
190 |
191 | # Coverlet is a free, cross platform Code Coverage Tool
192 | coverage*.json
193 | coverage*.xml
194 | coverage*.info
195 |
196 | # Visual Studio code coverage results
197 | *.coverage
198 | *.coveragexml
199 |
200 | # NCrunch
201 | _NCrunch_*
202 | .*crunch*.local.xml
203 | nCrunchTemp_*
204 |
205 | # MightyMoose
206 | *.mm.*
207 | AutoTest.Net/
208 |
209 | # Web workbench (sass)
210 | .sass-cache/
211 |
212 | # Installshield output folder
213 | [Ee]xpress/
214 |
215 | # DocProject is a documentation generator add-in
216 | DocProject/buildhelp/
217 | DocProject/Help/*.HxT
218 | DocProject/Help/*.HxC
219 | DocProject/Help/*.hhc
220 | DocProject/Help/*.hhk
221 | DocProject/Help/*.hhp
222 | DocProject/Help/Html2
223 | DocProject/Help/html
224 |
225 | # Click-Once directory
226 | publish/
227 |
228 | # Publish Web Output
229 | *.[Pp]ublish.xml
230 | *.azurePubxml
231 | # Note: Comment the next line if you want to checkin your web deploy settings,
232 | # but database connection strings (with potential passwords) will be unencrypted
233 | *.pubxml
234 | *.publishproj
235 |
236 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
237 | # checkin your Azure Web App publish settings, but sensitive information contained
238 | # in these scripts will be unencrypted
239 | PublishScripts/
240 |
241 | # NuGet Packages
242 | *.nupkg
243 | # NuGet Symbol Packages
244 | *.snupkg
245 | # The packages folder can be ignored because of Package Restore
246 | **/[Pp]ackages/*
247 | # except build/, which is used as an MSBuild target.
248 | !**/[Pp]ackages/build/
249 | # Uncomment if necessary however generally it will be regenerated when needed
250 | #!**/[Pp]ackages/repositories.config
251 | # NuGet v3's project.json files produces more ignorable files
252 | *.nuget.props
253 | *.nuget.targets
254 |
255 | # Nuget personal access tokens and Credentials
256 | nuget.config
257 |
258 | # Microsoft Azure Build Output
259 | csx/
260 | *.build.csdef
261 |
262 | # Microsoft Azure Emulator
263 | ecf/
264 | rcf/
265 |
266 | # Windows Store app package directories and files
267 | AppPackages/
268 | BundleArtifacts/
269 | Package.StoreAssociation.xml
270 | _pkginfo.txt
271 | *.appx
272 | *.appxbundle
273 | *.appxupload
274 |
275 | # Visual Studio cache files
276 | # files ending in .cache can be ignored
277 | *.[Cc]ache
278 | # but keep track of directories ending in .cache
279 | !?*.[Cc]ache/
280 |
281 | # Others
282 | ClientBin/
283 | ~$*
284 | *~
285 | *.dbmdl
286 | *.dbproj.schemaview
287 | *.jfm
288 | *.pfx
289 | *.publishsettings
290 | orleans.codegen.cs
291 |
292 | # Including strong name files can present a security risk
293 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
294 | #*.snk
295 |
296 | # Since there are multiple workflows, uncomment next line to ignore bower_components
297 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
298 | #bower_components/
299 |
300 | # RIA/Silverlight projects
301 | Generated_Code/
302 |
303 | # Backup & report files from converting an old project file
304 | # to a newer Visual Studio version. Backup files are not needed,
305 | # because we have git ;-)
306 | _UpgradeReport_Files/
307 | Backup*/
308 | UpgradeLog*.XML
309 | UpgradeLog*.htm
310 | ServiceFabricBackup/
311 | *.rptproj.bak
312 |
313 | # SQL Server files
314 | *.mdf
315 | *.ldf
316 | *.ndf
317 |
318 | # Business Intelligence projects
319 | *.rdl.data
320 | *.bim.layout
321 | *.bim_*.settings
322 | *.rptproj.rsuser
323 | *- [Bb]ackup.rdl
324 | *- [Bb]ackup ([0-9]).rdl
325 | *- [Bb]ackup ([0-9][0-9]).rdl
326 |
327 | # Microsoft Fakes
328 | FakesAssemblies/
329 |
330 | # GhostDoc plugin setting file
331 | *.GhostDoc.xml
332 |
333 | # Node.js Tools for Visual Studio
334 | .ntvs_analysis.dat
335 | node_modules/
336 |
337 | # Visual Studio 6 build log
338 | *.plg
339 |
340 | # Visual Studio 6 workspace options file
341 | *.opt
342 |
343 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
344 | *.vbw
345 |
346 | # Visual Studio LightSwitch build output
347 | **/*.HTMLClient/GeneratedArtifacts
348 | **/*.DesktopClient/GeneratedArtifacts
349 | **/*.DesktopClient/ModelManifest.xml
350 | **/*.Server/GeneratedArtifacts
351 | **/*.Server/ModelManifest.xml
352 | _Pvt_Extensions
353 |
354 | # Paket dependency manager
355 | .paket/paket.exe
356 | paket-files/
357 |
358 | # FAKE - F# Make
359 | .fake/
360 |
361 | # CodeRush personal settings
362 | .cr/personal
363 |
364 | # Python Tools for Visual Studio (PTVS)
365 | __pycache__/
366 | *.pyc
367 |
368 | # Cake - Uncomment if you are using it
369 | # tools/**
370 | # !tools/packages.config
371 |
372 | # Tabs Studio
373 | *.tss
374 |
375 | # Telerik's JustMock configuration file
376 | *.jmconfig
377 |
378 | # BizTalk build output
379 | *.btp.cs
380 | *.btm.cs
381 | *.odx.cs
382 | *.xsd.cs
383 |
384 | # OpenCover UI analysis results
385 | OpenCover/
386 |
387 | # Azure Stream Analytics local run output
388 | ASALocalRun/
389 |
390 | # MSBuild Binary and Structured Log
391 | *.binlog
392 |
393 | # NVidia Nsight GPU debugger configuration file
394 | *.nvuser
395 |
396 | # MFractors (Xamarin productivity tool) working folder
397 | .mfractor/
398 |
399 | # Local History for Visual Studio
400 | .localhistory/
401 |
402 | # BeatPulse healthcheck temp database
403 | healthchecksdb
404 |
405 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
406 | MigrationBackup/
407 |
408 | # Ionide (cross platform F# VS Code tools) working folder
409 | .ionide/
410 |
411 | # Fody - auto-generated XML schema
412 | FodyWeavers.xsd
413 |
414 | # VS Code files for those working on multiple tools
415 | **/.vscode/*
416 | .vscode/*
417 | !.vscode/settings.json
418 | # !.vscode/tasks.json
419 | # !.vscode/launch.json
420 | # !.vscode/extensions.json
421 | *.code-workspace
422 |
423 | # Local History for Visual Studio Code
424 | .history/
425 |
426 | # Windows Installer files from build outputs
427 | *.cab
428 | *.msi
429 | *.msix
430 | *.msm
431 | *.msp
432 |
433 | # JetBrains Rider
434 | .idea/
435 | *.sln.iml
436 |
437 | enc_temp_folder/*
438 |
439 | # Nuke
440 | .nuke/temp/*
441 |
442 | # Build
443 | deps
444 | build
445 | install
446 |
447 | # Tools
448 | tools/ImageCropper/**/*.png
449 | assets/config/maa_pi_config.json
450 | maapicli.spec
451 | config/maa_option.json
452 | assets/agent/config/maa_option.json
453 | .vscode/settings.json
454 | install.py
455 | agent.spec
456 | dist
457 | assets/custom/config/maa_option.json
458 | ./maapicli
459 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "assets/MaaCommonAssets"]
2 | path = assets/MaaCommonAssets
3 | url = https://github.com/MaaXYZ/MaaCommonAssets
4 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "json.schemas": [
3 | {
4 | "fileMatch": [
5 | "/assets/resource/**/*.json",
6 | "/install/resource/**/*.json"
7 | ],
8 | "url": "/deps/tools/pipeline.schema.json"
9 | }
10 | ],
11 | "[json]": {
12 | "editor.formatOnSave": true,
13 | "editor.insertSpaces": true,
14 | "editor.tabSize": 4,
15 | "editor.indentSize": "tabSize"
16 | },
17 | "[python]": {
18 | "editor.defaultFormatter": "ms-python.black-formatter"
19 | }
20 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 overflow65537
4 | Copyright (c) 2024 Kazaorus
5 | Copyright (c) 2025 Ostwind23
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy
8 | of this software and associated documentation files (the "Software"), to deal
9 | in the Software without restriction, including without limitation the rights
10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | copies of the Software, and to permit persons to whom the Software is
12 | furnished to do so, subject to the following conditions:
13 |
14 | The above copyright notice and this permission notice shall be included in all
15 | copies or substantial portions of the Software.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | SOFTWARE.
24 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | # MAA_SnowBreak
10 |
11 | 基于全新架构的 尘白禁区 小助手。图像技术 + 模拟控制,解放双手!
12 | 由 [MaaFramework](https://github.com/MaaXYZ/MaaFramework) 强力驱动!
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | ## 主要功能
25 |
26 | - 启动/关闭游戏
27 | - 收取赠送感知
28 | - 升级枪械
29 | - 领取邮件
30 | - 商店自动购买指定物品[物品列表](docs/物品列表.md)
31 | - 领取体力
32 | - 精神拟境自动评测
33 | - 日常作战和活动作战
34 | - 刷天启碎片
35 | - 领取凭证和任务奖励
36 | - 自动信源研析
37 | - 基地疗愈
38 | - 钓鱼
39 | - 心动水弹
40 | - 异星守护
41 | - 悖论迷宫(验证战场)
42 | - 蜃梦笔谈
43 |
44 | ## 注意事项
45 |
46 | - 安卓端:模拟器必须为mumu模拟器,如果出现部分任务无法完成,请切换1280*720(240DPI)
47 | - 桌面端:不支持
48 | - 打开后无法运行首先尝试安装运行库 [https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170](https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170)
49 | - 反馈 QQ 群:980583911
50 |
51 | ## 图形化界面
52 |
53 | ### [MFW-PyQt6](https://github.com/overflow65537/MFW-PyQt6)
54 |
55 | 一个基于PyQt6的MAAFramework图形化操作界面
56 |
57 | - 下载对应系统架构,后缀带有MFW-PyQt的压缩包,比如 `MSBA-win-x86_64-MFW-PyQt-vXXX.zip`
58 | - 解压后运行main.exe或者MFW.exe
59 |
60 | ## 视频教程
61 |
62 | - 教程: [https://www.bilibili.com/video/BV1v2hFe8Esv/](https://www.bilibili.com/video/BV1v2hFe8Esv/)
63 | - 计划任务教程: [https://www.bilibili.com/video/BV1Nuh2eGEwG/](https://www.bilibili.com/video/BV1Nuh2eGEwG/)
64 |
65 | ## 使用说明
66 |
67 | 下载地址:[https://github.com/overflow65537/MAA_SnowBreak/releases](https://github.com/overflow65537/MAA_SnowBreak/releases)
68 |
69 | ### Windows
70 |
71 | - 对于绝大部分用户,请下载 `MSBA-win-x86_64-vXXX.zip`
72 | - 若确定自己的电脑是 arm 架构,请下载 `MSBA-win-aarch64-vXXX.zip`
73 | - 解压后以***管理员权限***运行 `MaaPiCli.exe` 即可
74 |
75 | ### macOS
76 |
77 | - 若使用 Intel 处理器,请下载 `MSBA-macos-x86_64-vXXX.zip`
78 | - 若使用 M1, M2 等 arm 处理器,请下载 `MSBA-macos-aarch64-vXXX.zip`
79 | - 使用方式:
80 |
81 | ```bash
82 | chmod a+x MaaPiCli
83 | ./MaaPiCli
84 | ```
85 |
86 | ### Linux
87 |
88 | ~~用 Linux 的大佬应该不需要我教~~
89 |
90 | ## MaaPiCli使用说明
91 |
92 | ### A
93 |
94 | - 启动后会出现:
95 |
96 | ```base
97 | Welcome to use Maa Project Interface CLI!
98 |
99 | Version: v0.0.1
100 |
101 | ### Select ADB ###
102 |
103 | 1. Auto detect
104 | 2. Manual input
105 |
106 | Please input [1-2]:
107 | ```
108 |
109 | - 如无必要,请选择1.Auto detect
110 |
111 | ```base
112 | ### Select ADB ###
113 |
114 | 1. Auto detect
115 | 2. Manual input
116 |
117 | Please input [1-2]: 1
118 |
119 | Finding device...
120 |
121 | ## Select Device ##
122 |
123 | 1. MuMuPlayer12
124 | H:/Program Files/Netease/MuMuPlayer-12.0/shell/adb.exe
125 | 127.0.0.1:16672
126 |
127 | Please input [1-1]: 1
128 | ```
129 |
130 | - 选择 1 后会像上面这样,列出若干个模拟器实例,之后选择你需要进行操控的即可。
131 | - 如果没有出现选项,请检查模拟器是否正常启动。以及管理员权限启动MaaPiCli。
132 |
133 | ### B
134 |
135 | - 选择完模拟器后就会进入到选择资源界面
136 |
137 | ```base
138 | ### Select resource ###
139 |
140 | 1. 官服
141 | 2. B 服
142 |
143 | Please input [1-2]:
144 | ```
145 |
146 | - 请按照自己的服务器类型选择
147 |
148 | ### C
149 |
150 | - 在初次启动后,会让你输入启动的任务:
151 |
152 | ```base
153 | ### Add task ###
154 |
155 | 1. 启动
156 | 2. 赠送感知
157 | 3. 邮件
158 | 4. 商店
159 | 5. 领取体力
160 | 6. 升级枪械
161 | 7. 活动
162 | 8. 常规战斗
163 | 9. 刷天启碎片
164 | 10. 任务
165 | 11. 活动任务
166 | 12. 凭证
167 | 13. 关闭游戏
168 |
169 | Please input [1-13]:
170 | ```
171 |
172 | - 选择你要执行的任务即可。
173 |
174 | ### D
175 |
176 | - 之后会反复出现:
177 |
178 | ```base
179 | Tasks:
180 |
181 | <这里会列出你已经增加,等待执行的任务>
182 |
183 | ### Select action ###
184 |
185 | 1. Switch controller
186 | 2. Switch resource
187 | 3. Add task
188 | 4. Move task
189 | 5. Delete task
190 | 6. Run tasks
191 | 7. Exit
192 | ```
193 |
194 | - 其中分别代表:
195 |
196 | 1. 调整控制器(也就是adb地址等)
197 | 2. 调整资源(切换官服或者b服)
198 | 3. 新增任务,像**C**中那样
199 | 4. 移动任务
200 | 5. 删除任务
201 | 6. 开始执行任务,在这之后就会自动开始操控。
202 | 7. 退出程序
203 |
204 | ## 其他说明
205 |
206 | - 添加 `-d` 参数可跳过交互直接运行任务,如 `./MaaPiCli.exe -d`,配合Windows计划任务可以实现自动开启任务
207 | - 反馈问题请附上日志文件 `debug/maa.log`,谢谢!
208 |
209 | ## How to build
210 |
211 | **如果你要编译源码才看这节,否则直接 [下载](https://github.com/overflow65537/MAA_SnowBreak/releases) 即可**
212 |
213 | 0. 完整克隆本项目及子项目
214 |
215 | ```bash
216 | git clone --recursive https://github.com/overflow65537/MAA_SnowBreak.git
217 | ```
218 | 1. 安装
219 |
220 | ```python
221 | python ./install.py
222 | ```
223 |
224 | 生成的二进制及相关资源文件在 `install` 目录下
225 |
226 | ## 开发相关
227 |
228 | - [MaaFramework 快速开始](https://github.com/MaaAssistantArknights/MaaFramework/blob/main/docs/zh_cn/1.1-%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B.md)
229 |
230 | ## Join us
231 |
232 | - 交流反馈 QQ 群:980583911
233 | - MaaFramework 开发交流 QQ 群: 595990173
234 |
235 | ## 鸣谢
236 |
237 | ### 开源库
238 |
239 | - [MaaFramework](https://github.com/MaaXYZ/MaaFramework)
240 | 基于图像识别的自动化黑盒测试框架 | An automation black-box testing framework based on image recognition
241 | - ~~[MFAWPF](https://github.com/SweetSmellFox/MFAWPF)~~
242 | ~~本项目是一个基于WPF框架开发的用户界面,旨在提供类似于MaaPiCli的功能~~
243 |
244 | ### 开发者
245 |
246 | 感谢以下开发者对 MAA_SnowBreak 作出的贡献:
247 |
248 |
249 |
250 |
251 |
252 |
--------------------------------------------------------------------------------
/assets/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | # MAA_SnowBreak
10 |
11 | 基于全新架构的 尘白禁区 小助手。图像技术 + 模拟控制,解放双手!
12 | 由 [MaaFramework](https://github.com/MaaXYZ/MaaFramework) 强力驱动!
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | ## 主要功能
25 |
26 | - 启动/关闭游戏
27 | - 收取赠送感知
28 | - 升级枪械
29 | - 领取邮件
30 | - 商店自动购买指定物品[物品列表](docs/物品列表.md)
31 | - 领取体力
32 | - 精神拟境自动评测
33 | - 日常作战和活动作战
34 | - 刷天启碎片
35 | - 领取凭证和任务奖励
36 | - 基地疗愈
37 | - 钓鱼
38 | - 心动水弹
39 | - 悖论迷宫
40 | - 蜃梦笔谈
41 |
42 | ## 注意事项
43 |
44 | - 安卓端:模拟器必须为mumu模拟器,如果出现部分任务无法完成,请切换1280*720(240DPI)
45 | - 桌面端:不支持
46 | - 打开后无法运行首先尝试安装运行库 [https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170](https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170)
47 | - 反馈 QQ 群:980583911
48 |
49 | ## 图形化界面
50 |
51 | ### [MFW-PyQt6](https://github.com/overflow65537/MFW-PyQt6)
52 |
53 | 一个基于PyQt6的MAAFramework图形化操作界面
54 |
55 | - 下载对应系统架构,后缀带有MFW-PyQt的压缩包,比如 `MSBA-win-x86_64-MFW-PyQt-vXXX.zip`
56 | - 解压后运行main.exe或者MFW.exe
57 |
58 | ## 视频教程
59 |
60 | - 教程: [https://www.bilibili.com/video/BV1v2hFe8Esv/](https://www.bilibili.com/video/BV1v2hFe8Esv/)
61 | - 计划任务教程: [https://www.bilibili.com/video/BV1Nuh2eGEwG/](https://www.bilibili.com/video/BV1Nuh2eGEwG/)
62 |
63 | ## 使用说明
64 |
65 | 下载地址:[https://github.com/overflow65537/MAA_SnowBreak/releases](https://github.com/overflow65537/MAA_SnowBreak/releases)
66 |
67 | ### Windows
68 |
69 | - 对于绝大部分用户,请下载 `MSBA-win-x86_64-vXXX.zip`
70 | - 若确定自己的电脑是 arm 架构,请下载 `MSBA-win-aarch64-vXXX.zip`
71 | - 解压后以***管理员权限***运行 `MaaPiCli.exe` 即可
72 |
73 | ### macOS
74 |
75 | - 若使用 Intel 处理器,请下载 `MSBA-macos-x86_64-vXXX.zip`
76 | - 若使用 M1, M2 等 arm 处理器,请下载 `MSBA-macos-aarch64-vXXX.zip`
77 | - 使用方式:
78 |
79 | ```bash
80 | chmod a+x MaaPiCli
81 | ./MaaPiCli
82 | ```
83 |
84 | ### Linux
85 |
86 | ~~用 Linux 的大佬应该不需要我教~~
87 |
88 | ## MaaPiCli使用说明
89 |
90 | ### A
91 |
92 | - 启动后会出现:
93 |
94 | ```base
95 | Welcome to use Maa Project Interface CLI!
96 |
97 | Version: v0.0.1
98 |
99 | ### Select ADB ###
100 |
101 | 1. Auto detect
102 | 2. Manual input
103 |
104 | Please input [1-2]:
105 | ```
106 |
107 | - 如无必要,请选择1.Auto detect
108 |
109 | ```base
110 | ### Select ADB ###
111 |
112 | 1. Auto detect
113 | 2. Manual input
114 |
115 | Please input [1-2]: 1
116 |
117 | Finding device...
118 |
119 | ## Select Device ##
120 |
121 | 1. MuMuPlayer12
122 | H:/Program Files/Netease/MuMuPlayer-12.0/shell/adb.exe
123 | 127.0.0.1:16672
124 |
125 | Please input [1-1]: 1
126 | ```
127 |
128 | - 选择 1 后会像上面这样,列出若干个模拟器实例,之后选择你需要进行操控的即可。
129 | - 如果没有出现选项,请检查模拟器是否正常启动。以及管理员权限启动MaaPiCli。
130 |
131 | ### B
132 |
133 | - 选择完模拟器后就会进入到选择资源界面
134 |
135 | ```base
136 | ### Select resource ###
137 |
138 | 1. 官服
139 | 2. B 服
140 |
141 | Please input [1-2]:
142 | ```
143 |
144 | - 请按照自己的服务器类型选择
145 |
146 | ### C
147 |
148 | - 在初次启动后,会让你输入启动的任务:
149 |
150 | ```base
151 | ### Add task ###
152 |
153 | 1. 启动
154 | 2. 赠送感知
155 | 3. 邮件
156 | 4. 商店
157 | 5. 领取体力
158 | 6. 升级枪械
159 | 7. 活动
160 | 8. 常规战斗
161 | 9. 刷天启碎片
162 | 10. 任务
163 | 11. 活动任务
164 | 12. 凭证
165 | 13. 关闭游戏
166 |
167 | Please input [1-13]:
168 | ```
169 |
170 | - 选择你要执行的任务即可。
171 |
172 | ### D
173 |
174 | - 之后会反复出现:
175 |
176 | ```base
177 | Tasks:
178 |
179 | <这里会列出你已经增加,等待执行的任务>
180 |
181 | ### Select action ###
182 |
183 | 1. Switch controller
184 | 2. Switch resource
185 | 3. Add task
186 | 4. Move task
187 | 5. Delete task
188 | 6. Run tasks
189 | 7. Exit
190 | ```
191 |
192 | - 其中分别代表:
193 |
194 | 1. 调整控制器(也就是adb地址等)
195 | 2. 调整资源(切换官服或者b服)
196 | 3. 新增任务,像**C**中那样
197 | 4. 移动任务
198 | 5. 删除任务
199 | 6. 开始执行任务,在这之后就会自动开始操控。
200 | 7. 退出程序
201 |
202 | ## 其他说明
203 |
204 | - 添加 `-d` 参数可跳过交互直接运行任务,如 `./MaaPiCli.exe -d`,配合Windows计划任务可以实现自动开启任务
205 | - 反馈问题请附上日志文件 `debug/maa.log`,谢谢!
206 |
207 | ## How to build
208 |
209 | **如果你要编译源码才看这节,否则直接 [下载](https://github.com/overflow65537/MAA_SnowBreak/releases) 即可**
210 |
211 | 0. 完整克隆本项目及子项目
212 |
213 | ```bash
214 | git clone --recursive https://github.com/overflow65537/MAA_SnowBreak.git
215 | ```
216 | 1. 安装
217 |
218 | ```python
219 | python ./install.py
220 | ```
221 |
222 | 生成的二进制及相关资源文件在 `install` 目录下
223 |
224 | ## 开发相关
225 |
226 | - [MaaFramework 快速开始](https://github.com/MaaAssistantArknights/MaaFramework/blob/main/docs/zh_cn/1.1-%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B.md)
227 |
228 | ## Join us
229 |
230 | - 交流反馈 QQ 群:980583911
231 | - MaaFramework 开发交流 QQ 群: 595990173
232 |
233 | ## 鸣谢
234 |
235 | ### 开源库
236 |
237 | - [MaaFramework](https://github.com/MaaXYZ/MaaFramework)
238 | 基于图像识别的自动化黑盒测试框架 | An automation black-box testing framework based on image recognition
239 | - ~~[MFAWPF](https://github.com/SweetSmellFox/MFAWPF)~~
240 | ~~本项目是一个基于WPF框架开发的用户界面,旨在提供类似于MaaPiCli的功能~~
241 |
242 | ### 开发者
243 |
244 | 感谢以下开发者对 MAA_SnowBreak 作出的贡献:
245 |
246 |
247 |
248 |
249 |
250 |
--------------------------------------------------------------------------------
/assets/custom/Agent_file.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2024-2025 MAA_SnowBreak
2 | #
3 | # Permission is hereby granted, free of charge, to any person obtaining a copy
4 | # of this software and associated documentation files (the "Software"), to deal
5 | # in the Software without restriction, including without limitation the rights
6 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | # copies of the Software, and to permit persons to whom the Software is
8 | # furnished to do so, subject to the following conditions:
9 | #
10 | # The above copyright notice and this permission notice shall be included in all
11 | # copies or substantial portions of the Software.
12 | #
13 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | # SOFTWARE.
20 |
21 | """
22 | MAA_SnowBreak
23 | MAA_SnowBreak Agent调试启动器
24 | 作者:overflow65537
25 | """
26 |
27 |
28 | from maa.agent.agent_server import AgentServer
29 |
30 | from action.Fishing import Fishing
31 | from action.ScreenShot import ScreenShot
32 | from action.ShotSelf import ShotSelf
33 | from action.ShotTarget import ShotTarget
34 | from action.StoryRogue import StoryRogue
35 | from action.Count import Count
36 | from action.PuzzleClculate import PuzzleClculate
37 | from Recognition.LogicalOperators import LOp
38 |
39 |
40 | @AgentServer.custom_recognition("LOp")
41 | class Agent_LOp(LOp):
42 | pass
43 |
44 |
45 | @AgentServer.custom_action("PuzzleClculate")
46 | class Agent_PuzzleClculate(PuzzleClculate):
47 | pass
48 |
49 |
50 | @AgentServer.custom_action("Count")
51 | class Agent_Count(Count):
52 | pass
53 |
54 |
55 | @AgentServer.custom_action("Fishing")
56 | class Agent_Fishing(Fishing):
57 | pass
58 |
59 |
60 | @AgentServer.custom_action("ShotSelf")
61 | class Agent_ShotSelf(ShotSelf):
62 | pass
63 |
64 |
65 | @AgentServer.custom_action("ShotTarget")
66 | class Agent_ShotTarget(ShotTarget):
67 | pass
68 |
69 |
70 | @AgentServer.custom_action("ScreenShot")
71 | class Agent_ScreenShot(ScreenShot):
72 | pass
73 |
74 |
75 | @AgentServer.custom_action("StoryRogue")
76 | class Agent_StoryRogue(StoryRogue):
77 | pass
78 |
--------------------------------------------------------------------------------
/assets/custom/Recognition/LogicalOperators.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2024-2025 MAA_Punish
2 | #
3 | # Permission is hereby granted, free of charge, to any person obtaining a copy
4 | # of this software and associated documentation files (the "Software"), to deal
5 | # in the Software without restriction, including without limitation the rights
6 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | # copies of the Software, and to permit persons to whom the Software is
8 | # furnished to do so, subject to the following conditions:
9 | #
10 | # The above copyright notice and this permission notice shall be included in all
11 | # copies or substantial portions of the Software.
12 | #
13 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | # SOFTWARE.
20 |
21 | """
22 | MAA_Punish
23 | MAA_Punish 逻辑识别器
24 | 作者:overflow65537
25 | """
26 |
27 | from maa.context import Context
28 | from maa.custom_recognition import CustomRecognition
29 | import json
30 |
31 |
32 | class LOp(CustomRecognition):
33 | def analyze(
34 | self,
35 | context: Context,
36 | argv: CustomRecognition.AnalyzeArg,
37 | ) -> CustomRecognition.AnalyzeResult:
38 | """
39 | 逻辑识别器:
40 | custom_recognition_param:
41 | {
42 | "mode": and,
43 | "nodes": ["node1", ["node2"]],
44 | }
45 | mode: 模式 and 或者 or,默认为and
46 | nodes: 需要识别的节点,使用列表括起来为反转识别结果
47 | """
48 | image = argv.image
49 | param: dict = json.loads(argv.custom_recognition_param)
50 | mode: str = param.get("mode", "and")
51 | nodes: list = param.get("nodes", [])
52 |
53 | if mode == "and":
54 | for item in nodes:
55 | result = self._eval_node(item, context, image)
56 | if not result:
57 | return
58 | return CustomRecognition.AnalyzeResult(
59 | box=(0, 0, 100, 100), detail=f"{nodes} used in {mode} success"
60 | )
61 |
62 | elif mode == "or":
63 | for item in nodes:
64 | result = self._eval_node(item, context, image)
65 | if result:
66 | return CustomRecognition.AnalyzeResult(
67 | box=(0, 0, 100, 100), detail=f"{nodes} used in {mode} success"
68 | )
69 | return
70 |
71 | else:
72 | return
73 |
74 | def _eval_node(self, node, context: Context, image) -> bool:
75 |
76 | if isinstance(node, str):
77 | return bool(context.run_recognition(node, image))
78 |
79 | elif isinstance(node, list) and len(node) == 1:
80 | inner_node = node[0]
81 | return not bool(context.run_recognition(inner_node, image))
82 |
--------------------------------------------------------------------------------
/assets/custom/action/Count.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2024-2025 MAA_SnowBreak
2 | #
3 | # Permission is hereby granted, free of charge, to any person obtaining a copy
4 | # of this software and associated documentation files (the "Software"), to deal
5 | # in the Software without restriction, including without limitation the rights
6 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | # copies of the Software, and to permit persons to whom the Software is
8 | # furnished to do so, subject to the following conditions:
9 | #
10 | # The above copyright notice and this permission notice shall be included in all
11 | # copies or substantial portions of the Software.
12 | #
13 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | # SOFTWARE.
20 |
21 | """
22 | MAA_SnowBreak
23 | MAA_SnowBreak 计数程序
24 | 作者:overflow65537
25 | """
26 |
27 |
28 | from maa.context import Context
29 | from maa.custom_action import CustomAction
30 | import json
31 |
32 |
33 | class Count(CustomAction):
34 | def run(
35 | self, context: Context, argv: CustomAction.RunArg
36 | ) -> CustomAction.RunResult:
37 | """
38 | 自定义动作:
39 | custom_action_param:
40 | {
41 | "count": 0,
42 | "target_count": 10,
43 | "next_node": ["node1", "node2"],
44 | "else_node": ["node3"],
45 | }
46 | count: 当前次数
47 | target_count: 目标次数
48 | next_node: 达到目标次数后执行的节点. 支持多个节点,按顺序执行,可以出现重复节点,可以为空
49 | else_node: 未达到目标次数时执行的节点. 支持多个节点,按顺序执行,可以出现重复节点,可以为空
50 | """
51 |
52 | argv_dict: dict = json.loads(argv.custom_action_param)
53 | print(argv_dict)
54 | if not argv_dict:
55 | return CustomAction.RunResult(success=True)
56 |
57 | current_count = argv_dict.get("count", 0)
58 | target_count = argv_dict.get("target_count", 0)
59 |
60 | if current_count <= target_count:
61 | argv_dict["count"] = current_count + 1
62 | context.override_pipeline(
63 | {argv.node_name: {"custom_action_param": argv_dict}}
64 | )
65 | self._run_nodes(context, argv_dict.get("else_node"))
66 | else:
67 | context.override_pipeline(
68 | {
69 | argv.node_name: {
70 | "custom_action_param": {
71 | "count": 0,
72 | "target_count": target_count,
73 | "else_node": argv_dict.get("else_node"),
74 | "next_node": argv_dict.get("next_node"),
75 | }
76 | }
77 | }
78 | )
79 | self._run_nodes(context, argv_dict.get("next_node"))
80 |
81 | return CustomAction.RunResult(success=True)
82 |
83 | def _run_nodes(self, context: Context, nodes):
84 | """统一处理节点执行逻辑"""
85 | if not nodes:
86 | return
87 | if isinstance(nodes, str):
88 | nodes = [nodes]
89 | for node in nodes:
90 | context.run_task(node)
91 |
--------------------------------------------------------------------------------
/assets/custom/action/Fishing.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2024-2025 MAA_SnowBreak
2 | # Copyright (c) 2024 LaoZhuJackson (Original Project: https://github.com/LaoZhuJackson/SnowbreakAutoAssistant)
3 | #
4 | # This module is derived from the original project's fishing module: https://github.com/LaoZhuJackson/SnowbreakAutoAssistant/tree/main/app/modules/fishing
5 | #
6 | # Permission is hereby granted, free of charge, to any person obtaining a copy
7 | # of this software and associated documentation files (the "Software"), to deal
8 | # in the Software without restriction, including without limitation the rights
9 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | # copies of the Software, and to permit persons to whom the Software is
11 | # furnished to do so, subject to the following conditions:
12 | #
13 | # The above copyright notice and this permission notice shall be included in all
14 | # copies or substantial portions of the Software.
15 | #
16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 | # SOFTWARE.
23 |
24 | """
25 | MAA_SnowBreak
26 | MAA_SnowBreak 钓鱼识别器
27 | 作者:overflow65537
28 | """
29 |
30 | from maa.context import Context
31 | from maa.custom_action import CustomAction
32 | import time
33 |
34 |
35 | # @AgentServer.custom_action("Fishing")
36 | class Fishing(CustomAction):
37 | def run(
38 | self, context: Context, argv: CustomAction.RunArg
39 | ) -> CustomAction.RunResult:
40 | image = context.tasker.controller.post_screencap().wait().get()
41 | result = context.run_recognition("检查黄色块数量", image)
42 |
43 | if result.best_result.count:
44 | initial_yellow_count = result.best_result.count
45 | yellow_count = result.best_result.count
46 |
47 | start_time = time.time()
48 | while time.time() - start_time < 2:
49 | if yellow_count < initial_yellow_count - 50:
50 | break
51 |
52 | image = context.tasker.controller.post_screencap().wait().get()
53 | result = context.run_recognition("检查黄色块数量", image)
54 | if not result:
55 | return CustomAction.RunResult(success=True)
56 | yellow_count = result.best_result.count
57 |
58 | context.tasker.controller.post_click(1171, 618).wait()
59 |
60 | return CustomAction.RunResult(success=True)
61 |
--------------------------------------------------------------------------------
/assets/custom/action/PPOverride.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2024-2025 MAA_SnowBreak
2 | #
3 | # Permission is hereby granted, free of charge, to any person obtaining a copy
4 | # of this software and associated documentation files (the "Software"), to deal
5 | # in the Software without restriction, including without limitation the rights
6 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | # copies of the Software, and to permit persons to whom the Software is
8 | # furnished to do so, subject to the following conditions:
9 | #
10 | # The above copyright notice and this permission notice shall be included in all
11 | # copies or substantial portions of the Software.
12 | #
13 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | # SOFTWARE.
20 |
21 | """
22 | MAA_SnowBreak
23 | MAA_SnowBreak pipeline覆盖器
24 | 作者:overflow65537
25 | """
26 |
27 | from maa.context import Context
28 | from maa.custom_action import CustomAction
29 | import json
30 |
31 |
32 | class PPOverride(CustomAction):
33 | def run(
34 | self, context: Context, argv: CustomAction.RunArg
35 | ) -> CustomAction.RunResult:
36 | argv = json.loads(argv.custom_action_param)
37 | if not argv:
38 | return CustomAction.RunResult(success=True)
39 | context.override_pipeline(argv)
40 | return CustomAction.RunResult(success=True)
41 |
--------------------------------------------------------------------------------
/assets/custom/action/ScreenShot.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2024-2025 MAA_SnowBreak
2 | #
3 | # Permission is hereby granted, free of charge, to any person obtaining a copy
4 | # of this software and associated documentation files (the "Software"), to deal
5 | # in the Software without restriction, including without limitation the rights
6 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | # copies of the Software, and to permit persons to whom the Software is
8 | # furnished to do so, subject to the following conditions:
9 | #
10 | # The above copyright notice and this permission notice shall be included in all
11 | # copies or substantial portions of the Software.
12 | #
13 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | # SOFTWARE.
20 |
21 | """
22 | MAA_SnowBreak
23 | MAA_SnowBreak 截图程序
24 | 作者:overflow65537
25 | """
26 |
27 | from maa.context import Context
28 | from maa.custom_action import CustomAction
29 | import os
30 | import time
31 | import struct
32 | import zlib
33 | import numpy
34 | import json
35 |
36 |
37 | class ScreenShot(CustomAction):
38 | def run(
39 | self, context: Context, argv: CustomAction.RunArg
40 | ) -> CustomAction.RunResult:
41 | argv: dict = json.loads(argv.custom_action_param)
42 | image: numpy.ndarray = context.tasker.controller.post_screencap().wait().get()
43 |
44 | debug_dir = os.path.abspath("debug")
45 | three_days_ago = time.time() - 3 * 24 * 3600
46 | if os.path.exists(debug_dir):
47 | for entry in os.scandir(debug_dir):
48 | if (
49 | entry.is_file()
50 | and entry.name.lower().endswith(".png")
51 | and entry.stat(follow_symlinks=False).st_mtime < three_days_ago
52 | ):
53 | try:
54 | os.remove(entry.path)
55 | except:
56 | pass
57 |
58 | height, width, _ = image.shape
59 | current_time = (
60 | argv.get("type", "") + "_" + time.strftime("%Y-%m-%d_%H-%M-%S") + ".png"
61 | )
62 | debug_path = os.path.join("debug", current_time)
63 |
64 | def png_chunk(chunk_type, data):
65 | chunk = chunk_type + data
66 | return (
67 | struct.pack("!I", len(data))
68 | + chunk
69 | + struct.pack("!I", zlib.crc32(chunk))
70 | )
71 |
72 | # Convert BGR to RGB
73 | image = image[:, :, [2, 1, 0]]
74 |
75 | raw_data = b"".join(b"\x00" + image[i, :, :].tobytes() for i in range(height))
76 | ihdr = struct.pack("!2I5B", width, height, 8, 2, 0, 0, 0)
77 | idat = zlib.compress(raw_data, level=9)
78 |
79 | with open(debug_path, "wb") as f:
80 | f.write(b"\x89PNG\r\n\x1a\n")
81 | f.write(png_chunk(b"IHDR", ihdr))
82 | f.write(png_chunk(b"IDAT", idat))
83 | f.write(png_chunk(b"IEND", b""))
84 |
85 | return CustomAction.RunResult(success=True)
86 |
--------------------------------------------------------------------------------
/assets/custom/action/ShotSelf.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2024-2025 MAA_SnowBreak
2 | #
3 | # Permission is hereby granted, free of charge, to any person obtaining a copy
4 | # of this software and associated documentation files (the "Software"), to deal
5 | # in the Software without restriction, including without limitation the rights
6 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | # copies of the Software, and to permit persons to whom the Software is
8 | # furnished to do so, subject to the following conditions:
9 | #
10 | # The above copyright notice and this permission notice shall be included in all
11 | # copies or substantial portions of the Software.
12 | #
13 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | # SOFTWARE.
20 |
21 | """
22 | MAA_SnowBreak
23 | MAA_SnowBreak 水弹活动射击判断
24 | 作者:overflow65537
25 | """
26 |
27 | # from maa.agent.agent_server import AgentServer
28 | from maa.context import Context
29 | from maa.custom_action import CustomAction
30 | import time
31 |
32 |
33 | # @AgentServer.custom_action("ShotSelf")
34 | class ShotSelf(CustomAction):
35 | def run(
36 | self, context: Context, argv: CustomAction.RunArg
37 | ) -> CustomAction.RunResult:
38 | image = context.tasker.controller.post_screencap().wait().get()
39 | item = context.run_recognition("展开道具", image)
40 | if item:
41 | x, y = (
42 | item.best_result.box[0] + item.best_result.box[2] // 2,
43 | item.best_result.box[1] + item.best_result.box[3] // 2,
44 | )
45 | context.tasker.controller.post_click(x, y).wait()
46 | time.sleep(1)
47 | image = context.tasker.controller.post_screencap().wait().get()
48 | health = context.run_recognition("生命值缺失", image)
49 | health_gem = context.run_recognition("检查活力宝石", image)
50 | if health and health_gem:
51 | x, y = (
52 | health_gem.best_result.box[0] + health_gem.best_result.box[2] // 2,
53 | health_gem.best_result.box[1] + health_gem.best_result.box[3] // 2,
54 | )
55 | context.tasker.controller.post_click(x, y).wait()
56 | time.sleep(1)
57 | context.run_task("使用道具")
58 | time.sleep(1)
59 | image = context.tasker.controller.post_screencap().wait().get()
60 | lock = context.run_recognition("检查手铐", image)
61 | lock_status = context.run_recognition("检查手铐状态", image)
62 | if lock and not (lock_status):
63 | x, y = (
64 | lock.best_result.box[0] + lock.best_result.box[2] // 2,
65 | lock.best_result.box[1] + lock.best_result.box[3] // 2,
66 | )
67 | context.tasker.controller.post_click(x, y).wait()
68 | time.sleep(1)
69 | context.run_task("使用道具")
70 | time.sleep(1)
71 | image = context.tasker.controller.post_screencap().wait().get()
72 | reversal = context.run_recognition("检查逆转魔术", image)
73 | if reversal:
74 | x, y = (
75 | reversal.best_result.box[0] + reversal.best_result.box[2] // 2,
76 | reversal.best_result.box[1] + reversal.best_result.box[3] // 2,
77 | )
78 | context.tasker.controller.post_click(x, y).wait()
79 | time.sleep(1)
80 | context.run_task("使用道具")
81 | time.sleep(1)
82 | barrel = context.run_recognition("检查枪管", image)
83 | if barrel:
84 | x, y = (
85 | barrel.best_result.box[0] + barrel.best_result.box[2] // 2,
86 | barrel.best_result.box[1] + barrel.best_result.box[3] // 2,
87 | )
88 | context.tasker.controller.post_click(x, y).wait()
89 | time.sleep(1)
90 | context.run_task("使用道具")
91 | time.sleep(1)
92 | context.run_task("向对方开枪")
93 | return CustomAction.RunResult(success=True)
94 | context.run_task("向自己开枪")
95 | return CustomAction.RunResult(success=True)
96 |
--------------------------------------------------------------------------------
/assets/custom/action/ShotTarget.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2024-2025 MAA_SnowBreak
2 | #
3 | # Permission is hereby granted, free of charge, to any person obtaining a copy
4 | # of this software and associated documentation files (the "Software"), to deal
5 | # in the Software without restriction, including without limitation the rights
6 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | # copies of the Software, and to permit persons to whom the Software is
8 | # furnished to do so, subject to the following conditions:
9 | #
10 | # The above copyright notice and this permission notice shall be included in all
11 | # copies or substantial portions of the Software.
12 | #
13 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | # SOFTWARE.
20 |
21 | """
22 | MAA_SnowBreak
23 | MAA_SnowBreak 水弹活动射击判断
24 | 作者:overflow65537
25 | """
26 |
27 | from maa.context import Context
28 | from maa.custom_action import CustomAction
29 | import time
30 |
31 |
32 | # @AgentServer.custom_action("ShotTarget")
33 | class ShotTarget(CustomAction):
34 | def run(
35 | self, context: Context, argv: CustomAction.RunArg
36 | ) -> CustomAction.RunResult:
37 | shot_chance = argv.custom_action_param
38 | print(bool(shot_chance))
39 | image = context.tasker.controller.post_screencap().wait().get()
40 | item = context.run_recognition("展开道具", image)
41 | if item:
42 | x, y = (
43 | item.best_result.box[0] + item.best_result.box[2] // 2,
44 | item.best_result.box[1] + item.best_result.box[3] // 2,
45 | )
46 | context.tasker.controller.post_click(x, y).wait()
47 | time.sleep(1)
48 | image = context.tasker.controller.post_screencap().wait().get()
49 |
50 | # reset = context.run_recognition("检查重置之锤", image)
51 | eject = context.run_recognition("检查退弹布偶", image)
52 | empty = context.run_recognition(
53 | "检查子弹_custom", image, {"检查子弹_custom": {"roi": [1067, 651, 25, 33]}}
54 | )
55 | water = context.run_recognition(
56 | "检查子弹_custom", image, {"检查子弹_custom": {"roi": [988, 652, 25, 34]}}
57 | )
58 |
59 | has_eject = bool(eject)
60 | is_not_shot_chance_true = argv.custom_action_param != '{"shot_chance":true}'
61 | if water and empty:
62 | has_bullets = (
63 | int(water.best_result.text) != 0 and int(empty.best_result.text) != 0
64 | )
65 | else:
66 | has_bullets = False
67 |
68 | if has_eject and is_not_shot_chance_true and has_bullets:
69 | eject_count = len(eject.filterd_results)
70 |
71 | bullet_count = int(water.best_result.text) + int(empty.best_result.text)
72 | print(f"子弹数量:{bullet_count}")
73 | print(f"退弹数量:{eject_count}")
74 | if eject_count >= bullet_count - 1:
75 | print("开始退弹")
76 | while (not int(water.best_result.text) == 0) and (
77 | not int(empty.best_result.text) == 0
78 | ):
79 | x, y = (
80 | eject.best_result.box[0] + eject.best_result.box[2] // 2,
81 | eject.best_result.box[1] + eject.best_result.box[3] // 2,
82 | )
83 | context.tasker.controller.post_click(x, y).wait()
84 | print(f"点击{x},{y}")
85 | time.sleep(1)
86 | print("开始重新装填")
87 | context.run_task("使用道具")
88 | time.sleep(1)
89 | image = context.tasker.controller.post_screencap().wait().get()
90 | empty = context.run_recognition(
91 | "检查子弹_custom",
92 | image,
93 | {"检查子弹_custom": {"roi": [1067, 651, 25, 33]}},
94 | ) # 空弹数量
95 | water = context.run_recognition(
96 | "检查子弹_custom",
97 | image,
98 | {"检查子弹_custom": {"roi": [988, 652, 25, 34]}},
99 | ) # 水弹数量
100 | eject = context.run_recognition("检查退弹布偶", image)
101 | if int(water.best_result.text) == 0:
102 | context.run_task("向自己开枪_custom"),
103 | return CustomAction.RunResult(success=True)
104 | elif int(empty.best_result.text) == 0:
105 | context.run_task("向对方开枪_custom_100")
106 | return CustomAction.RunResult(success=True)
107 | else:
108 | return CustomAction.RunResult(success=True)
109 |
110 | """if reset and eject: #有重置之锤和退弹布偶就直接用
111 | x, y = (
112 | reset.best_result.box[0] + reset.best_result.box[2] // 2,
113 | reset.best_result.box[1] + reset.best_result.box[3] // 2,
114 | )
115 | context.tasker.controller.post_click(x, y).wait()
116 | context.run_task("使用道具")
117 | time.sleep(1)
118 | image = context.tasker.controller.post_screencap().wait().get()
119 | eject_steal = context.run_recognition("检查退弹布偶_偷", image)
120 | if eject_steal :
121 | sorted_results = sorted(eject_steal.filterd_results, key=lambda x: x.score, reverse=True)
122 | target_list = [result.box for result in sorted_results[:4]] # 按照得分从高到低排序,取前4个
123 | for box in target_list:
124 | x = (box[0] + box[2]) // 2
125 | y = (box[1] + box[3]) // 2
126 | context.tasker.controller.post_click(x, y).wait()
127 | time.sleep(0.5)
128 | context.run_task("确定偷窃道具") #其实就是点击确定
129 | else:
130 | context.tasker.controller.post_click(10, 10).wait()"""
131 |
132 | health = context.run_recognition("生命值缺失", image)
133 | health_gem = context.run_recognition("检查活力宝石", image)
134 | if health and health_gem:
135 |
136 | x, y = (
137 | health_gem.best_result.box[0] + health_gem.best_result.box[2] // 2,
138 | health_gem.best_result.box[1] + health_gem.best_result.box[3] // 2,
139 | )
140 | context.tasker.controller.post_click(x, y).wait()
141 | time.sleep(1)
142 | context.run_task("使用道具")
143 | time.sleep(0.5)
144 | image = context.tasker.controller.post_screencap().wait().get()
145 | lock = context.run_recognition("检查手铐", image)
146 | lock_status = context.run_recognition("检查手铐状态", image)
147 | if lock and not (lock_status):
148 | x, y = (
149 | lock.best_result.box[0] + lock.best_result.box[2] // 2,
150 | lock.best_result.box[1] + lock.best_result.box[3] // 2,
151 | )
152 | context.tasker.controller.post_click(x, y).wait()
153 | time.sleep(1)
154 | context.run_task("使用道具")
155 | time.sleep(0.5)
156 | image = context.tasker.controller.post_screencap().wait().get()
157 | barrel = context.run_recognition("检查枪管", image)
158 | if barrel and argv.custom_action_param == '{"shot_chance":true}':
159 | x, y = (
160 | barrel.best_result.box[0] + barrel.best_result.box[2] // 2,
161 | barrel.best_result.box[1] + barrel.best_result.box[3] // 2,
162 | )
163 | context.tasker.controller.post_click(x, y).wait()
164 | time.sleep(1)
165 | context.run_task("使用道具")
166 | time.sleep(0.5)
167 | context.run_task("向对方开枪")
168 | return CustomAction.RunResult(success=True)
169 |
--------------------------------------------------------------------------------
/assets/custom/action/StoryRogue.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2024-2025 MAA_SnowBreak
2 | #
3 | # Permission is hereby granted, free of charge, to any person obtaining a copy
4 | # of this software and associated documentation files (the "Software"), to deal
5 | # in the Software without restriction, including without limitation the rights
6 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | # copies of the Software, and to permit persons to whom the Software is
8 | # furnished to do so, subject to the following conditions:
9 | #
10 | # The above copyright notice and this permission notice shall be included in all
11 | # copies or substantial portions of the Software.
12 | #
13 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | # SOFTWARE.
20 |
21 | """
22 | MAA_SnowBreak
23 | MAA_SnowBreak 蜃梦笔谈地图判断程序
24 | 作者:Ostwind23
25 | """
26 |
27 | from maa.context import Context
28 | from maa.custom_action import CustomAction
29 |
30 | import time
31 |
32 |
33 | # @AgentServer.custom_action("StoryRogue")
34 | class StoryRogue(CustomAction):
35 | # 静态计数器,记录成功运行的次数
36 | run_counter = 0
37 |
38 | def run(
39 | self, context: Context, argv: CustomAction.RunArg
40 | ) -> CustomAction.RunResult:
41 | # 获取屏幕截图
42 | image = context.tasker.controller.post_screencap().wait().get()
43 |
44 | # 场景识别,分为走廊、红走廊、大门、庭院
45 | corridor_result = context.run_recognition("走廊场景识别", image)
46 |
47 | red_corridor_result = context.run_recognition("红走廊场景识别", image)
48 |
49 | gate_result = context.run_recognition("大门场景识别", image)
50 |
51 | courtyard_result = context.run_recognition("庭院场景识别", image)
52 |
53 | # 根据识别结果执行不同的操作
54 | if corridor_result:
55 | print("识别到走廊场景")
56 | # 走廊场景的处理逻辑
57 | return self.handle_corridor(context)
58 | elif red_corridor_result:
59 | print("识别到红走廊场景")
60 | # 红走廊场景的处理逻辑
61 | return self.handle_red_corridor(context)
62 | elif gate_result:
63 | print("识别到大门场景")
64 | # 大门场景的处理逻辑
65 | return self.handle_gate(context)
66 | elif courtyard_result:
67 | print("识别到庭院场景")
68 | # 庭院场景的处理逻辑
69 | return self.handle_courtyard(context)
70 | else:
71 | print("无法识别当前场景")
72 | # 默认处理或错误处理
73 | return CustomAction.RunResult(success=True)
74 |
75 | def handle_corridor(self, context: Context) -> CustomAction.RunResult:
76 | """走廊场景的处理逻辑"""
77 | print("执行走廊场景处理")
78 | # 前进7秒
79 | self.move_forward(context, 7)
80 |
81 | # 循环执行技能直到战斗结束
82 | # result = self.skill_cycle_until_exit(context)
83 | # 取消python中的战斗程序,移交至pipeline中
84 |
85 | return CustomAction.RunResult(success=True)
86 |
87 | def handle_red_corridor(self, context: Context) -> CustomAction.RunResult:
88 | """红走廊场景的处理逻辑"""
89 | print("执行红走廊场景处理")
90 | # 前进7秒
91 | self.move_forward(context, 7)
92 | # 循环执行技能直到战斗结束
93 | # result = self.skill_cycle_until_exit(context)
94 | # 取消python中的战斗程序,移交至pipeline中
95 |
96 | return CustomAction.RunResult(success=True)
97 |
98 | def handle_gate(self, context: Context) -> CustomAction.RunResult:
99 | """大门场景的处理逻辑"""
100 | print("执行大门场景处理")
101 |
102 | # 前进6秒
103 | self.move_forward(context, 6)
104 |
105 | # 向右移动3.5秒
106 | self.move_right(context, 3.5)
107 |
108 | # 循环执行技能直到战斗结束
109 | # result = self.skill_cycle_until_exit(context)
110 | # 取消python中的战斗程序,移交至pipeline中
111 |
112 | return CustomAction.RunResult(success=True)
113 |
114 | def handle_courtyard(self, context: Context) -> CustomAction.RunResult:
115 | """庭院场景的处理逻辑"""
116 | print("执行庭院场景处理")
117 |
118 | # 前进7.5秒
119 | self.move_forward(context, 7.5)
120 |
121 | # 屏幕从右往左滑动
122 | self.swipe_screen(context, 688, 316, 536, 316)
123 |
124 | # 循环执行技能直到战斗结束
125 | # result = self.skill_cycle_until_exit(context)
126 | # 取消python中的战斗程序,移交至pipeline中
127 |
128 | return CustomAction.RunResult(success=True)
129 |
130 | def move_forward(self, context: Context, duration: float) -> None:
131 | """持续前进指定秒数"""
132 | print(f"前进 {duration} 秒")
133 | x, y = 268, 423 # 前进按钮的坐标
134 |
135 | # 修复:确保转换为整数
136 | duration_ms = int(duration * 1000)
137 | # 使用长时间的swipe来模拟长按效果(起点和终点相同)
138 | context.tasker.controller.post_swipe(x, y, x, y, duration_ms).wait()
139 | time.sleep(0.5) # 短暂等待以确保操作完成
140 |
141 | def move_right(self, context: Context, duration: float) -> None:
142 | """持续向右移动指定秒数"""
143 | print(f"向右移动 {duration} 秒")
144 | x, y = 370, 531 # 右进按钮的坐标
145 |
146 | # 修复:确保转换为整数
147 | duration_ms = int(duration * 1000)
148 | # 使用长时间的swipe来模拟长按效果(起点和终点相同)
149 | context.tasker.controller.post_swipe(x, y, x, y, duration_ms).wait()
150 | time.sleep(0.5) # 短暂等待以确保操作完成
151 |
152 | def swipe_screen(
153 | self, context: Context, start_x: int, start_y: int, end_x: int, end_y: int
154 | ) -> None:
155 | """从一点滑动到另一点"""
156 | print(f"滑动屏幕 从 ({start_x}, {start_y}) 到 ({end_x}, {end_y})")
157 | context.tasker.controller.post_swipe(start_x, start_y, end_x, end_y, 500).wait()
158 | time.sleep(0.5)
159 |
160 | def use_e_skill(self, context: Context) -> None:
161 | """使用E技能"""
162 | print("使用E技能")
163 | context.tasker.controller.post_click(1042, 327).wait()
164 | time.sleep(3) # 等待3秒再执行下一个动作
165 |
166 | def use_q_skill(self, context: Context) -> None:
167 | """使用Q技能"""
168 | print("使用Q技能")
169 | context.tasker.controller.post_click(1165, 329).wait()
170 | time.sleep(3) # 等待3秒再执行下一个动作
171 |
172 | def check_battle_exit(self, context: Context) -> bool:
173 | """检查是否有退出按钮"""
174 | image = context.tasker.controller.post_screencap().wait().get()
175 | exit_result = context.run_recognition("检查退出按钮", image)
176 | return bool(exit_result)
177 |
178 | def skill_cycle_until_exit(self, context: Context) -> CustomAction.RunResult:
179 | """循环执行技能直到战斗结束"""
180 | print("开始循环执行技能")
181 |
182 | max_cycles = 8 # 防止无限循环的安全措施
183 | cycle_count = 0
184 |
185 | while cycle_count < max_cycles:
186 | # 检查是否有退出按钮
187 | if self.check_battle_exit(context):
188 | print("检测到战斗结束,点击退出")
189 | # 增加计数器并打印
190 | StoryRogue.run_counter += 1
191 | print(f"StoryRogue 程序运行次数: {StoryRogue.run_counter}")
192 | # 使用带错误处理的点击方式
193 | try:
194 | context.tasker.controller.post_click(637, 637).wait()
195 | time.sleep(2)
196 | return CustomAction.RunResult(success=True)
197 | except Exception as e:
198 | print(f"点击退出按钮时出错: {e}")
199 | return CustomAction.RunResult(success=True)
200 |
201 | # 按E技能3次
202 | for _ in range(3):
203 | self.use_e_skill(context)
204 |
205 | # 每次技能后检查是否结束
206 | if self.check_battle_exit(context):
207 | print("检测到战斗结束,点击退出")
208 | # 增加计数器并打印
209 | StoryRogue.run_counter += 1
210 | print(f"StoryRogue 程序运行次数: {StoryRogue.run_counter}")
211 | context.tasker.controller.post_click(637, 637).wait()
212 | time.sleep(2)
213 | return CustomAction.RunResult(success=True)
214 |
215 | # 按Q技能1次
216 | self.use_q_skill(context)
217 |
218 | cycle_count += 1
219 | print(f"完成技能循环 {cycle_count}/{max_cycles}")
220 |
221 | # 如果达到最大循环次数仍未结束
222 | print("达到最大循环次数,强制结束")
223 | return CustomAction.RunResult(success=True)
224 |
--------------------------------------------------------------------------------
/assets/custom/action/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/custom/action/__init__.py
--------------------------------------------------------------------------------
/assets/custom/custom.json:
--------------------------------------------------------------------------------
1 | {
2 | "Fishing": {
3 | "type": "action",
4 | "class": "Fishing",
5 | "file_path": "{custom_path}/action/Fishing.py"
6 | },
7 | "ScreenShot": {
8 | "type": "action",
9 | "class": "ScreenShot",
10 | "file_path": "{custom_path}/action/ScreenShot.py"
11 | },
12 | "ShotSelf": {
13 | "type": "action",
14 | "class": "ShotSelf",
15 | "file_path": "{custom_path}/action/ShotSelf.py"
16 | },
17 | "ShotTarget": {
18 | "type": "action",
19 | "class": "ShotTarget",
20 | "file_path": "{custom_path}/action/ShotTarget.py"
21 | },
22 | "StoryRogue": {
23 | "type": "action",
24 | "class": "StoryRogue",
25 | "file_path": "{custom_path}/action/StoryRogue.py"
26 | },
27 | "Count": {
28 | "type": "action",
29 | "class": "Count",
30 | "file_path": "{custom_path}/action/Count.py"
31 | },
32 | "PuzzleClculate": {
33 | "type": "action",
34 | "class": "PuzzleClculate",
35 | "file_path": "{custom_path}/action/PuzzleClculate.py"
36 | },
37 | "PPOverride": {
38 | "type": "action",
39 | "class": "PPOverride",
40 | "file_path": "{custom_path}/action/PPOverride.py"
41 | },
42 | "LOp": {
43 | "type": "recognition",
44 | "class": "LOp",
45 | "file_path": "{custom_path}/recognition/LogicalOperators.py"
46 | }
47 | }
--------------------------------------------------------------------------------
/assets/custom/main.py:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2024-2025 MAA_SnowBreak
2 | #
3 | # Permission is hereby granted, free of charge, to any person obtaining a copy
4 | # of this software and associated documentation files (the "Software"), to deal
5 | # in the Software without restriction, including without limitation the rights
6 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | # copies of the Software, and to permit persons to whom the Software is
8 | # furnished to do so, subject to the following conditions:
9 | #
10 | # The above copyright notice and this permission notice shall be included in all
11 | # copies or substantial portions of the Software.
12 | #
13 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | # SOFTWARE.
20 |
21 | """
22 | MAA_SnowBreak
23 | MAA_SnowBreak Agent入口
24 | 作者:overflow65537
25 | """
26 |
27 | import sys
28 | from maa.agent.agent_server import AgentServer
29 | from maa.toolkit import Toolkit
30 |
31 | from Agent_file import *
32 |
33 |
34 | def main():
35 | Toolkit.init_option("./")
36 | if len(sys.argv) > 1:
37 | print("使用自定义socket_id: " + sys.argv[-1])
38 | socket_id = sys.argv[-1]
39 | else:
40 | print("使用默认socket_id: MAA_AGENT_SOCKET")
41 | socket_id = "MAA_AGENT_SOCKET"
42 | AgentServer.start_up(socket_id)
43 | AgentServer.join()
44 | AgentServer.shut_down()
45 |
46 |
47 | if __name__ == "__main__":
48 | main()
49 |
--------------------------------------------------------------------------------
/assets/resource/PC/default_pipeline.json:
--------------------------------------------------------------------------------
1 | {
2 | "Default": {
3 | "on_error": [
4 | "返回主菜单_err"
5 | ]
6 | }
7 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/任务.json:
--------------------------------------------------------------------------------
1 | {
2 | "切换到日常任务": {
3 | "roi": [
4 | 0,
5 | 49,
6 | 169,
7 | 175
8 | ],
9 | "template": "任务\\切换日常_PC.png"
10 | },
11 | "领取定期任务": {
12 | "roi": [
13 | 0,
14 | 49,
15 | 169,
16 | 175
17 | ],
18 | "template": "任务\\切换定期任务_PC.png"
19 | }
20 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/关闭游戏.json:
--------------------------------------------------------------------------------
1 | {
2 | "关闭游戏": {
3 | "action": "Key",
4 | "key": 27,
5 | "next": [
6 | "确定退出"
7 | ]
8 | },
9 | "确定退出": {
10 | "recognition": "OCR",
11 | "expected": "确定",
12 | "action": "Click"
13 | }
14 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/凭证.json:
--------------------------------------------------------------------------------
1 | {
2 | "每日任务": {
3 | "roi": [
4 | 777,
5 | 658,
6 | 56,
7 | 53
8 | ],
9 | "template": [
10 | "凭证\\每日任务.png"
11 | ]
12 | },
13 | "每周任务": {
14 | "roi": [
15 | 946,
16 | 660,
17 | 51,
18 | 50
19 | ],
20 | "template": [
21 | "凭证\\每周任务.png"
22 | ]
23 | },
24 | "限定任务": {
25 | "roi": [
26 | 1102,
27 | 656,
28 | 60,
29 | 54
30 | ],
31 | "template": [
32 | "凭证\\限定任务.png"
33 | ]
34 | },
35 | "凭证奖励": {
36 | "roi": [
37 | 610,
38 | 657,
39 | 58,
40 | 56
41 | ],
42 | "template": [
43 | "凭证\\凭证奖励.png"
44 | ]
45 | }
46 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/刷碎片.json:
--------------------------------------------------------------------------------
1 | {
2 | "使用记忆嵌片": {
3 | "recognition": "TemplateMatch",
4 | "roi": [
5 | 740,
6 | 15,
7 | 204,
8 | 40
9 | ],
10 | "template": "刷碎片\\记忆嵌片包.png",
11 | "target_offset": [
12 | 120,
13 | 0,
14 | 0,
15 | 0
16 | ]
17 | }
18 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/升级枪械.json:
--------------------------------------------------------------------------------
1 | {
2 | "点击+": {
3 | "template": "升级\\选择材料.png"
4 | },
5 | "排序": {
6 | "template": "升级\\排序.png"
7 | },
8 | "排序2": {
9 | "template": "升级\\排序_PC.png"
10 | },
11 | "等级提升": {
12 | "action": "Key",
13 | "key": 27
14 | }
15 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/启动.json:
--------------------------------------------------------------------------------
1 | {
2 | "启动": {
3 | "next": [
4 | "检查主界面"
5 | ],
6 | "interrupt": [
7 | "关闭奖励通知",
8 | "关闭公告",
9 | "关闭签到",
10 | "进入游戏"
11 | ]
12 | }
13 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/商店.json:
--------------------------------------------------------------------------------
1 | {
2 | "在商店内": {
3 | "recognition": "OCR",
4 | "roi": [
5 | 0,
6 | 40,
7 | 200,
8 | 140
9 | ],
10 | "expected": "常规物资",
11 | "next": [
12 | "向下滑动_商店"
13 | ]
14 | },
15 | "向下滑动_商店": {
16 | "recognition": "OCR",
17 | "roi": [
18 | 0,
19 | 40,
20 | 200,
21 | 140
22 | ],
23 | "expected": "常规物资",
24 | "action": "Swipe",
25 | "begin": [
26 | 620,
27 | 550,
28 | 0,
29 | 0
30 | ],
31 | "end": [
32 | 620,
33 | 300,
34 | 0,
35 | 0
36 | ],
37 | "next": [
38 | "判断物品",
39 | "返回主菜单"
40 | ]
41 | },
42 | "判断物品": {
43 | "next": [
44 | "买满",
45 | "售罄",
46 | "购买物品",
47 | "判断物品"
48 | ]
49 | },
50 | "购买物品": {
51 | "next": [
52 | "资金不足",
53 | "返回主菜单",
54 | "购买物品"
55 | ]
56 | }
57 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/心动水弹.json:
--------------------------------------------------------------------------------
1 | {
2 | "开始心动水弹": {
3 | "roi": [
4 | 583,
5 | 418,
6 | 206,
7 | 195
8 | ],
9 | "template": "心动水弹\\GO_PC.png"
10 | },
11 | "我的回合": {
12 | "roi": [
13 | 321,
14 | 33,
15 | 142,
16 | 57
17 | ],
18 | "template": "心动水弹\\我的回合_PC.png"
19 | },
20 | "检查墨镜": {
21 | "roi": [
22 | 81,
23 | 497,
24 | 364,
25 | 74
26 | ],
27 | "template": "心动水弹\\墨镜_PC.png"
28 | },
29 | "检查手铐": {
30 | "roi": [
31 | 81,
32 | 497,
33 | 364,
34 | 74
35 | ],
36 | "template": "心动水弹\\手铐_PC.png"
37 | },
38 | "检查枪管": {
39 | "roi": [
40 | 81,
41 | 497,
42 | 364,
43 | 74
44 | ],
45 | "template": "心动水弹\\枪管_PC.png"
46 | },
47 | "检查活力宝石": {
48 | "roi": [
49 | 81,
50 | 497,
51 | 364,
52 | 74
53 | ],
54 | "template": "心动水弹\\活力宝石_PC.png"
55 | },
56 | "使用道具": {
57 | "roi": [
58 | 315,
59 | 457,
60 | 76,
61 | 38
62 | ]
63 | },
64 | "检查手铐状态": {
65 | "roi": [
66 | 658,
67 | 8,
68 | 195,
69 | 106
70 | ],
71 | "template": "心动水弹\\拘束中_PC.png"
72 | },
73 | "检查水弹": {
74 | "roi": [
75 | 1073,
76 | 659,
77 | 26,
78 | 38
79 | ]
80 | },
81 | "判断射击目标_自己": {
82 | "roi": [
83 | 536,
84 | 638,
85 | 299,
86 | 52
87 | ]
88 | },
89 | "生命值缺失": {
90 | "roi": [
91 | 450,
92 | 82,
93 | 189,
94 | 47
95 | ],
96 | "template": "心动水弹\\生命值_PC.png"
97 | },
98 | "判断射击目标_对方": {
99 | "roi": [
100 | 536,
101 | 638,
102 | 299,
103 | 52
104 | ]
105 | },
106 | "对方回合": {
107 | "roi": [
108 | 826,
109 | 38,
110 | 157,
111 | 41
112 | ],
113 | "template": "心动水弹\\对方回合_PC.png"
114 | },
115 | "展开道具": {
116 | "roi": [
117 | 141,
118 | 641,
119 | 53,
120 | 50
121 | ],
122 | "template": "心动水弹\\展开道具_PC.png"
123 | },
124 | "开枪!": {
125 | "recognition": "DirectHit",
126 | "action": "Click",
127 | "target": [
128 | 500,
129 | 500,
130 | 0,
131 | 0
132 | ]
133 | },
134 | "收下道具": {
135 | "roi": [
136 | 562,
137 | 557,
138 | 154,
139 | 42
140 | ]
141 | },
142 | "向自己开枪": {
143 | "post_delay": 1000,
144 | "roi": [
145 | 1084,
146 | 537,
147 | 147,
148 | 93
149 | ],
150 | "template": "心动水弹\\向自己开枪_PC.png"
151 | },
152 | "向对方开枪": {
153 | "post_delay": 1000,
154 | "roi": [
155 | 1133,
156 | 589,
157 | 146,
158 | 93
159 | ],
160 | "template": "心动水弹\\向对方开枪_PC.png"
161 | },
162 | "再来!": {
163 | "roi": [
164 | 1094,
165 | 626,
166 | 121,
167 | 58
168 | ]
169 | }
170 | }
171 |
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/战斗.json:
--------------------------------------------------------------------------------
1 | {
2 | "速战MAX": {
3 | "next": [
4 | "速战MAX_2"
5 | ]
6 | },
7 | "速战MAX_2": {
8 | "recognition": "OCR",
9 | "roi": [
10 | 800,
11 | 440,
12 | 100,
13 | 80
14 | ],
15 | "expected": [
16 | "最大"
17 | ],
18 | "action": "Click"
19 | }
20 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/疗愈.json:
--------------------------------------------------------------------------------
1 | {
2 | "开始疗愈": {
3 | "template": [
4 | "疗愈\\红点_PC.png",
5 | "疗愈\\黄点_PC.png",
6 | "疗愈\\黑点_PC.png"
7 | ]
8 | },
9 | "重开": {
10 | "template": [
11 | "疗愈\\开始疗愈_PC.png"
12 | ]
13 | },
14 | "再来一次": {
15 | "roi": [
16 | 0,
17 | 0,
18 | 0,
19 | 0
20 | ]
21 | },
22 | "清理红点": {
23 | "template": [
24 | "疗愈\\红点_PC.png"
25 | ]
26 | },
27 | "切换锤": {
28 | "threshold": 0.9,
29 | "roi": [
30 | 0,
31 | 0,
32 | 0,
33 | 0
34 | ],
35 | "template": [
36 | "疗愈\\切换锤_PC.png"
37 | ],
38 | "action": "Key",
39 | "key": 90
40 | },
41 | "清理黄点": {
42 | "template": [
43 | "疗愈\\黄点_PC.png"
44 | ]
45 | },
46 | "切换捏": {
47 | "threshold": 0.9,
48 | "roi": [
49 | 0,
50 | 0,
51 | 0,
52 | 0
53 | ],
54 | "template": [
55 | "疗愈\\切换捏_PC.png"
56 | ],
57 | "action": "Key",
58 | "key": 88
59 | },
60 | "清理黑点": {
61 | "template": [
62 | "疗愈\\黑点_PC.png"
63 | ]
64 | },
65 | "开始疗愈_游戏内": {
66 | "threshold": 0.9,
67 | "roi": [
68 | 0,
69 | 0,
70 | 0,
71 | 0
72 | ],
73 | "template": [
74 | "疗愈\\开始疗愈_PC.png"
75 | ],
76 | "action": "Key",
77 | "key": 32
78 | }
79 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/精神拟境.json:
--------------------------------------------------------------------------------
1 | {
2 | "点击第一栏": {
3 | "target": [
4 | 122,
5 | 164,
6 | 1,
7 | 1
8 | ]
9 | },
10 | "点击第二栏": {
11 | "target": [
12 | 118,
13 | 252,
14 | 1,
15 | 1
16 | ]
17 | },
18 | "检查测评次数": {
19 | "roi": [
20 | 1192,
21 | 384,
22 | 45,
23 | 26
24 | ]
25 | },
26 | "检查测评等级": {
27 | "roi": [
28 | 1179,
29 | 310,
30 | 61,
31 | 64
32 | ],
33 | "template": [
34 | "精神拟境\\难度5_PC.png"
35 | ]
36 | },
37 | "检查测评等级_第二栏": {
38 | "roi": [
39 | 1179,
40 | 310,
41 | 61,
42 | 64
43 | ],
44 | "template": [
45 | "精神拟境\\难度5_PC.png"
46 | ]
47 | },
48 | "精神拟境_第二栏": {
49 | "roi": [
50 | 146,
51 | 114,
52 | 82,
53 | 125
54 | ]
55 | }
56 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/赠送感知.json:
--------------------------------------------------------------------------------
1 | {
2 | "打开好友": {
3 | "template": "赠送感知\\好友.png"
4 | }
5 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/通用任务.json:
--------------------------------------------------------------------------------
1 | {
2 | "关闭奖励通知": {
3 | "template": "通用任务\\获得道具_PC.png",
4 | "action": "Key",
5 | "key": 27
6 | },
7 | "返回主菜单": {
8 | "template": "通用任务\\主菜单_PC.png"
9 | }
10 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/钓鱼.json:
--------------------------------------------------------------------------------
1 | {
2 | "甩杆": {
3 | "roi": [
4 | 1000,
5 | 500,
6 | 300,
7 | 250
8 | ],
9 | "action": "Key",
10 | "key": 32
11 | },
12 | "钓鱼中": {
13 | "roi": [
14 | 1000,
15 | 500,
16 | 300,
17 | 250
18 | ]
19 | },
20 | "鱼上钩": {
21 | "roi": [
22 | 430,
23 | 90,
24 | 397,
25 | 214
26 | ],
27 | "target": [
28 | 1181,
29 | 629,
30 | 1,
31 | 1
32 | ],
33 | "action": "Key",
34 | "key": 32
35 | },
36 | "点击提示": {
37 | "roi": [
38 | 846,
39 | 229,
40 | 66,
41 | 32
42 | ]
43 | },
44 | "失败": {
45 | "roi": [
46 | 416,
47 | 35,
48 | 433,
49 | 187
50 | ]
51 | },
52 | "成功": {
53 | "action": "Key",
54 | "key": 27
55 | }
56 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/领取体力.json:
--------------------------------------------------------------------------------
1 | {
2 | "体力": {
3 | "next": [
4 | "无体力补给包",
5 | "领取体力"
6 | ]
7 | },
8 | "无体力补给包": {
9 | "recognition": "TemplateMatch",
10 | "roi": [
11 | 113,
12 | 443,
13 | 135,
14 | 65
15 | ],
16 | "template": "体力\\无体力补给包_PC.png",
17 | "next": [
18 | "返回主菜单"
19 | ]
20 | },
21 | "领取体力": {
22 | "roi": [
23 | 0,
24 | 0,
25 | 0,
26 | 0
27 | ]
28 | },
29 | "打开供应站": {
30 | "roi": [
31 | 26,
32 | 332,
33 | 168,
34 | 124
35 | ]
36 | },
37 | "打开供应站补给箱": {
38 | "roi": [
39 | 0,
40 | 223,
41 | 148,
42 | 246
43 | ],
44 | "template": "体力\\供应站补给箱_PC.png"
45 | }
46 | }
--------------------------------------------------------------------------------
/assets/resource/PC/pipeline/领取邮件.json:
--------------------------------------------------------------------------------
1 | {
2 | "进入邮件": {
3 | "roi": [
4 | 8,
5 | 245,
6 | 133,
7 | 130
8 | ],
9 | "template": "领取邮件\\邮件_PC.png"
10 | },
11 | "领取邮件": {
12 | "next": [
13 | "领取邮件2"
14 | ]
15 | },
16 | "领取邮件2": {
17 | "post_wait_freezes": 500,
18 | "recognition": "OCR",
19 | "roi": [
20 | 180,
21 | 610,
22 | 200,
23 | 120
24 | ],
25 | "expected": "批量领取",
26 | "action": "Click",
27 | "next": [
28 | "返回主菜单"
29 | ],
30 | "interrupt": [
31 | "关闭奖励通知"
32 | ]
33 | }
34 | }
--------------------------------------------------------------------------------
/assets/resource/base/default_pipeline.json:
--------------------------------------------------------------------------------
1 | {
2 | "Default": {
3 | "on_error": [
4 | "返回主菜单_err"
5 | ]
6 | }
7 | }
--------------------------------------------------------------------------------
/assets/resource/base/image/任务/切换定期任务_1_186_183_55__0_136_283_155.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/任务/切换定期任务_1_186_183_55__0_136_283_155.png
--------------------------------------------------------------------------------
/assets/resource/base/image/任务/切换定期任务_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/任务/切换定期任务_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/任务/切换日常_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/任务/切换日常_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/任务/切换日常任务_8_88_168_58__0_38_268_158.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/任务/切换日常任务_8_88_168_58__0_38_268_158.png
--------------------------------------------------------------------------------
/assets/resource/base/image/体力/供应站补给箱_7_343_59_57__0_293_159_157.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/体力/供应站补给箱_7_343_59_57__0_293_159_157.png
--------------------------------------------------------------------------------
/assets/resource/base/image/体力/供应站补给箱_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/体力/供应站补给箱_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/体力/无体力补给包_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/体力/无体力补给包_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/凭证/凭证奖励.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/凭证/凭证奖励.png
--------------------------------------------------------------------------------
/assets/resource/base/image/凭证/凭证奖励_472_660_36_35__422_585_136_135.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/凭证/凭证奖励_472_660_36_35__422_585_136_135.png
--------------------------------------------------------------------------------
/assets/resource/base/image/凭证/每周任务.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/凭证/每周任务.png
--------------------------------------------------------------------------------
/assets/resource/base/image/凭证/每周任务_884_657_39_37__834_583_139_137.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/凭证/每周任务_884_657_39_37__834_583_139_137.png
--------------------------------------------------------------------------------
/assets/resource/base/image/凭证/每日任务.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/凭证/每日任务.png
--------------------------------------------------------------------------------
/assets/resource/base/image/凭证/每日任务_680_661_34_32__630_588_134_132.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/凭证/每日任务_680_661_34_32__630_588_134_132.png
--------------------------------------------------------------------------------
/assets/resource/base/image/凭证/限定任务.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/凭证/限定任务.png
--------------------------------------------------------------------------------
/assets/resource/base/image/凭证/限定任务_1093_658_35_36__1043_584_135_136.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/凭证/限定任务_1093_658_35_36__1043_584_135_136.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/咎冠芬妮.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/咎冠芬妮.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/小天师行为02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/小天师行为02.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/恩雅羽蜕.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/恩雅羽蜕.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/无限之视里芙.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/无限之视里芙.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/朝翼凯西娅.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/朝翼凯西娅.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/未解锁行为02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/未解锁行为02.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/狂猎里芙.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/狂猎里芙.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/琴诺悖谬.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/琴诺悖谬.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/缄默芙提雅.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/缄默芙提雅.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/蓝闪凯西娅.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/蓝闪凯西娅.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/蓝闪行为02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/蓝闪行为02.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/记忆嵌片包.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/记忆嵌片包.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/记忆嵌片包_820_30_32_32__770_0_132_132.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/记忆嵌片包_820_30_32_32__770_0_132_132.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/豹豹伊切尔.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/豹豹伊切尔.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/辉耀芬妮.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/辉耀芬妮.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/辉耀行为02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/辉耀行为02.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/雨燕茉莉安.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/雨燕茉莉安.png
--------------------------------------------------------------------------------
/assets/resource/base/image/刷碎片/驰掣芙提雅.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/刷碎片/驰掣芙提雅.png
--------------------------------------------------------------------------------
/assets/resource/base/image/升级/排序.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/升级/排序.png
--------------------------------------------------------------------------------
/assets/resource/base/image/升级/排序2_325_203_130_30__275_153_230_130.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/升级/排序2_325_203_130_30__275_153_230_130.png
--------------------------------------------------------------------------------
/assets/resource/base/image/升级/排序_28_656_75_47__0_573_175_147.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/升级/排序_28_656_75_47__0_573_175_147.png
--------------------------------------------------------------------------------
/assets/resource/base/image/升级/排序_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/升级/排序_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/升级/排序倒序_419_203_36_30__369_153_136_130.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/升级/排序倒序_419_203_36_30__369_153_136_130.png
--------------------------------------------------------------------------------
/assets/resource/base/image/升级/白材料.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/升级/白材料.png
--------------------------------------------------------------------------------
/assets/resource/base/image/升级/紫材料.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/升级/紫材料.png
--------------------------------------------------------------------------------
/assets/resource/base/image/升级/紫材料_293_95_96_79__243_45_196_179.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/升级/紫材料_293_95_96_79__243_45_196_179.png
--------------------------------------------------------------------------------
/assets/resource/base/image/升级/绿材料.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/升级/绿材料.png
--------------------------------------------------------------------------------
/assets/resource/base/image/升级/绿材料_45_95_94_78__0_45_194_178.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/升级/绿材料_45_95_94_78__0_45_194_178.png
--------------------------------------------------------------------------------
/assets/resource/base/image/升级/蓝材料.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/升级/蓝材料.png
--------------------------------------------------------------------------------
/assets/resource/base/image/升级/蓝材料_171_96_92_77__121_46_192_177.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/升级/蓝材料_171_96_92_77__121_46_192_177.png
--------------------------------------------------------------------------------
/assets/resource/base/image/升级/选择材料.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/升级/选择材料.png
--------------------------------------------------------------------------------
/assets/resource/base/image/升级/选择材料_790_464_93_89__740_414_193_189.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/升级/选择材料_790_464_93_89__740_414_193_189.png
--------------------------------------------------------------------------------
/assets/resource/base/image/启动/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/启动/1.png
--------------------------------------------------------------------------------
/assets/resource/base/image/启动/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/启动/2.png
--------------------------------------------------------------------------------
/assets/resource/base/image/启动/关闭公告1_1087_110_35_35__1037_60_135_135.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/启动/关闭公告1_1087_110_35_35__1037_60_135_135.png
--------------------------------------------------------------------------------
/assets/resource/base/image/启动/关闭公告2_1080_142_31_29__1030_92_131_129.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/启动/关闭公告2_1080_142_31_29__1030_92_131_129.png
--------------------------------------------------------------------------------
/assets/resource/base/image/启动/关闭公告3_1192_88_33_33__1142_38_133_133.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/启动/关闭公告3_1192_88_33_33__1142_38_133_133.png
--------------------------------------------------------------------------------
/assets/resource/base/image/启动/关闭通知_1203_52_31_33__1149_2_131_133.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/启动/关闭通知_1203_52_31_33__1149_2_131_133.png
--------------------------------------------------------------------------------
/assets/resource/base/image/基地/在基地内部.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/基地/在基地内部.png
--------------------------------------------------------------------------------
/assets/resource/base/image/增益试炼/暂停.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/增益试炼/暂停.png
--------------------------------------------------------------------------------
/assets/resource/base/image/妮塔之邀/奇遇.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/妮塔之邀/奇遇.png
--------------------------------------------------------------------------------
/assets/resource/base/image/异星守护/开火.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/异星守护/开火.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/GO.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/GO.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/GO_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/GO_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/向对方开枪.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/向对方开枪.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/向对方开枪_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/向对方开枪_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/向自己开枪.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/向自己开枪.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/向自己开枪_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/向自己开枪_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/墨镜.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/墨镜.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/墨镜_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/墨镜_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/墨镜_偷.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/墨镜_偷.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/对方回合.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/对方回合.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/对方回合_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/对方回合_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/展开道具.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/展开道具.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/展开道具_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/展开道具_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/开枪!.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/开枪!.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/怪盗之手.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/怪盗之手.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/怪盗之手_偷.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/怪盗之手_偷.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/我的回合.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/我的回合.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/我的回合_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/我的回合_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/手铐.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/手铐.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/手铐_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/手铐_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/手铐_偷.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/手铐_偷.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/拘束中.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/拘束中.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/拘束中_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/拘束中_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/枪管.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/枪管.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/枪管_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/枪管_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/枪管_偷.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/枪管_偷.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/活力宝石.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/活力宝石.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/活力宝石_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/活力宝石_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/活力宝石_偷.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/活力宝石_偷.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/生命值.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/生命值.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/生命值_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/生命值_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/退弹布偶.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/退弹布偶.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/退弹布偶_偷.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/退弹布偶_偷.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/逆转魔术.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/逆转魔术.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/逆转魔术_偷.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/逆转魔术_偷.png
--------------------------------------------------------------------------------
/assets/resource/base/image/心动水弹/重置之锤.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/心动水弹/重置之锤.png
--------------------------------------------------------------------------------
/assets/resource/base/image/战斗/增加作战次数_748_460_62_37__698_410_162_137.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/战斗/增加作战次数_748_460_62_37__698_410_162_137.png
--------------------------------------------------------------------------------
/assets/resource/base/image/战斗/战斗次数1_594_467_25_25__544_417_125_125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/战斗/战斗次数1_594_467_25_25__544_417_125_125.png
--------------------------------------------------------------------------------
/assets/resource/base/image/战斗/战斗次数4_596_467_23_24__546_417_123_124.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/战斗/战斗次数4_596_467_23_24__546_417_123_124.png
--------------------------------------------------------------------------------
/assets/resource/base/image/拼图/10_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/拼图/10_up.png
--------------------------------------------------------------------------------
/assets/resource/base/image/拼图/11_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/拼图/11_up.png
--------------------------------------------------------------------------------
/assets/resource/base/image/拼图/1_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/拼图/1_up.png
--------------------------------------------------------------------------------
/assets/resource/base/image/拼图/2_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/拼图/2_up.png
--------------------------------------------------------------------------------
/assets/resource/base/image/拼图/3_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/拼图/3_up.png
--------------------------------------------------------------------------------
/assets/resource/base/image/拼图/4_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/拼图/4_up.png
--------------------------------------------------------------------------------
/assets/resource/base/image/拼图/5_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/拼图/5_up.png
--------------------------------------------------------------------------------
/assets/resource/base/image/拼图/6_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/拼图/6_up.png
--------------------------------------------------------------------------------
/assets/resource/base/image/拼图/7_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/拼图/7_up.png
--------------------------------------------------------------------------------
/assets/resource/base/image/拼图/8_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/拼图/8_up.png
--------------------------------------------------------------------------------
/assets/resource/base/image/拼图/9_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/拼图/9_up.png
--------------------------------------------------------------------------------
/assets/resource/base/image/拼图/赠送碎片.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/拼图/赠送碎片.png
--------------------------------------------------------------------------------
/assets/resource/base/image/疗愈/切换捏_191_611_62_57__141_561_162_157.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/疗愈/切换捏_191_611_62_57__141_561_162_157.png
--------------------------------------------------------------------------------
/assets/resource/base/image/疗愈/切换捏_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/疗愈/切换捏_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/疗愈/切换锤_56_611_63_59__6_561_163_159.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/疗愈/切换锤_56_611_63_59__6_561_163_159.png
--------------------------------------------------------------------------------
/assets/resource/base/image/疗愈/切换锤_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/疗愈/切换锤_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/疗愈/开始疗愈_1130_626_70_48__1080_572_170_148.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/疗愈/开始疗愈_1130_626_70_48__1080_572_170_148.png
--------------------------------------------------------------------------------
/assets/resource/base/image/疗愈/开始疗愈_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/疗愈/开始疗愈_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/疗愈/红点_987_426_30_32__937_376_130_132.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/疗愈/红点_987_426_30_32__937_376_130_132.png
--------------------------------------------------------------------------------
/assets/resource/base/image/疗愈/红点_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/疗愈/红点_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/疗愈/黄点_902_392_31_32__852_342_131_132.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/疗愈/黄点_902_392_31_32__852_342_131_132.png
--------------------------------------------------------------------------------
/assets/resource/base/image/疗愈/黄点_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/疗愈/黄点_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/疗愈/黑点_824_384_34_32__774_334_134_132.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/疗愈/黑点_824_384_34_32__774_334_134_132.png
--------------------------------------------------------------------------------
/assets/resource/base/image/疗愈/黑点_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/疗愈/黑点_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/笔谈/战斗键位笔记.txt:
--------------------------------------------------------------------------------
1 | 战斗结束: OCR检测"退出" [552,589,171,97]
2 |
3 | 走廊:
4 | 检测: [250,455,789,183]
5 | 前进 6 秒 [261,423,15,12]
6 |
7 | 按 e技能 3 次 [1042,327,52,51]
8 | 按 q技能 1 次 [1165,329,46,45]
9 | 循环上述按技能直至弹出战斗结束
10 |
11 |
12 | 庭院:
13 | 检测[43,101,205,248]
14 | 前进 6 秒 [261,423,15,12]
15 | 屏幕从右往左滑动 Swipe [688,316,1,0]->[536,316,1,0]
16 |
17 | 按 e技能 3 次 [1042,327,52,51]
18 | 按 q技能 1 次 [1165,329,46,45]
19 | 循环上述按技能直至弹出战斗结束
20 |
21 |
22 | 红走廊:
23 | 检测: [250,455,789,183]
24 | 按 e技能 3 次 [1042,327,52,51]
25 | 按 q技能 1 次 [1165,329,46,45]
26 | 循环上述按技能直至弹出战斗结束
27 |
28 | 大门:
29 | 检测: [44,284,276,160]
30 | 前进 6 秒 [261,423,15,12]
31 | 右进 4 秒 [368,531,2,1]
32 |
33 | 按 e技能 3 次 [1042,327,52,51]
34 | 按 q技能 1 次 [1165,329,46,45]
35 | 循环上述按技能直至弹出战斗结束
36 |
--------------------------------------------------------------------------------
/assets/resource/base/image/笔谈/笔谈_boss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/笔谈/笔谈_boss.png
--------------------------------------------------------------------------------
/assets/resource/base/image/笔谈/笔谈_事件.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/笔谈/笔谈_事件.png
--------------------------------------------------------------------------------
/assets/resource/base/image/笔谈/笔谈_事件2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/笔谈/笔谈_事件2.png
--------------------------------------------------------------------------------
/assets/resource/base/image/笔谈/笔谈_宝箱__497_221_46_45__447_171_146_145.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/笔谈/笔谈_宝箱__497_221_46_45__447_171_146_145.png
--------------------------------------------------------------------------------
/assets/resource/base/image/笔谈/笔谈_战斗.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/笔谈/笔谈_战斗.png
--------------------------------------------------------------------------------
/assets/resource/base/image/笔谈/笔谈_战斗2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/笔谈/笔谈_战斗2.png
--------------------------------------------------------------------------------
/assets/resource/base/image/笔谈/笔谈_战斗_大门__94_334_176_60__44_284_276_160.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/笔谈/笔谈_战斗_大门__94_334_176_60__44_284_276_160.png
--------------------------------------------------------------------------------
/assets/resource/base/image/笔谈/笔谈_战斗_庭院__93_151_105_148__43_101_205_248.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/笔谈/笔谈_战斗_庭院__93_151_105_148__43_101_205_248.png
--------------------------------------------------------------------------------
/assets/resource/base/image/笔谈/笔谈_战斗_红走廊__65_123_211_160__15_73_311_260.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/笔谈/笔谈_战斗_红走廊__65_123_211_160__15_73_311_260.png
--------------------------------------------------------------------------------
/assets/resource/base/image/笔谈/笔谈_战斗_走廊__64_130_202_145__14_80_302_245.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/笔谈/笔谈_战斗_走廊__64_130_202_145__14_80_302_245.png
--------------------------------------------------------------------------------
/assets/resource/base/image/笔谈/笔谈_战斗中__109_21_22_19__59_0_122_90.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/笔谈/笔谈_战斗中__109_21_22_19__59_0_122_90.png
--------------------------------------------------------------------------------
/assets/resource/base/image/笔谈/笔谈_扩展背包__497_220_44_45__447_170_144_145.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/笔谈/笔谈_扩展背包__497_220_44_45__447_170_144_145.png
--------------------------------------------------------------------------------
/assets/resource/base/image/笔谈/笔谈_问号__498_457_42_43__448_407_142_143.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/笔谈/笔谈_问号__498_457_42_43__448_407_142_143.png
--------------------------------------------------------------------------------
/assets/resource/base/image/精神拟境/打开精神拟境奖励_86_570_45_46__36_520_145_146.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/精神拟境/打开精神拟境奖励_86_570_45_46__36_520_145_146.png
--------------------------------------------------------------------------------
/assets/resource/base/image/精神拟境/退出精神拟境奖励_1214_54_39_37__1141_4_139_137.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/精神拟境/退出精神拟境奖励_1214_54_39_37__1141_4_139_137.png
--------------------------------------------------------------------------------
/assets/resource/base/image/精神拟境/难度5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/精神拟境/难度5.png
--------------------------------------------------------------------------------
/assets/resource/base/image/精神拟境/难度5_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/精神拟境/难度5_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/赠送感知/好友.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/赠送感知/好友.png
--------------------------------------------------------------------------------
/assets/resource/base/image/赠送感知/好友_250_298_43_34__200_248_143_134.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/赠送感知/好友_250_298_43_34__200_248_143_134.png
--------------------------------------------------------------------------------
/assets/resource/base/image/通用任务/主菜单_999_24_49_44__949_0_149_144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/通用任务/主菜单_999_24_49_44__949_0_149_144.png
--------------------------------------------------------------------------------
/assets/resource/base/image/通用任务/主菜单_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/通用任务/主菜单_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/image/通用任务/返回.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/通用任务/返回.png
--------------------------------------------------------------------------------
/assets/resource/base/image/钓鱼/退出地图.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/钓鱼/退出地图.png
--------------------------------------------------------------------------------
/assets/resource/base/image/领取邮件/邮件_74_281_39_30__24_231_139_130.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/领取邮件/邮件_74_281_39_30__24_231_139_130.png
--------------------------------------------------------------------------------
/assets/resource/base/image/领取邮件/邮件_PC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/assets/resource/base/image/领取邮件/邮件_PC.png
--------------------------------------------------------------------------------
/assets/resource/base/model/.gitignore:
--------------------------------------------------------------------------------
1 | ocr
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Alien_Guardian.json:
--------------------------------------------------------------------------------
1 | {
2 | "异星守护": {
3 | "next": [
4 | "结算_异星守护"
5 | ],
6 | "interrupt": [
7 | "开火_异星守护",
8 | "准备作战_异星守护",
9 | "重新执行_异星守护",
10 | "新伙伴",
11 | "惊喜奖励",
12 | "选择buff"
13 | ]
14 | },
15 | "惊喜奖励": {
16 | "recognition": "OCR",
17 | "roi": [
18 | 559,
19 | 32,
20 | 162,
21 | 53
22 | ],
23 | "expected": [
24 | "惊喜奖励"
25 | ],
26 | "action": "Click",
27 | "target": [
28 | 600,
29 | 10,
30 | 0,
31 | 0
32 | ]
33 | },
34 | "新伙伴": {
35 | "post_delay": 1000,
36 | "recognition": "OCR",
37 | "roi": [
38 | 569,
39 | 191,
40 | 145,
41 | 37
42 | ],
43 | "expected": [
44 | "新伙伴"
45 | ],
46 | "action": "Click",
47 | "target": [
48 | 600,
49 | 10,
50 | 0,
51 | 0
52 | ]
53 | },
54 | "重新执行_异星守护": {
55 | "post_delay": 1000,
56 | "recognition": "OCR",
57 | "roi": [
58 | 771,
59 | 598,
60 | 111,
61 | 50
62 | ],
63 | "expected": [
64 | "重新执行"
65 | ],
66 | "action": "Click"
67 | },
68 | "准备作战_异星守护": {
69 | "recognition": "OCR",
70 | "roi": [
71 | 1081,
72 | 628,
73 | 115,
74 | 43
75 | ],
76 | "expected": [
77 | "准备作战"
78 | ],
79 | "replace": [
80 | "签",
81 | "备"
82 | ],
83 | "action": "Click"
84 | },
85 | "结算_异星守护": {
86 | "recognition": "OCR",
87 | "roi": [
88 | 650,
89 | 634,
90 | 250,
91 | 41
92 | ],
93 | "expected": [
94 | "下一关",
95 | "退出"
96 | ],
97 | "action": "Click",
98 | "next": [
99 | "异星守护"
100 | ]
101 | },
102 | "开火_异星守护": {
103 | "recognition": "TemplateMatch",
104 | "green_mask": true,
105 | "roi": [
106 | 10,
107 | 188,
108 | 48,
109 | 47
110 | ],
111 | "template": "异星守护/开火.png",
112 | "action": "Swipe",
113 | "duration": 5000,
114 | "begin": [
115 | 1083,
116 | 471,
117 | 1,
118 | 1
119 | ],
120 | "end": [
121 | 1083,
122 | 471,
123 | 1,
124 | 1
125 | ]
126 | },
127 | "选择buff": {
128 | "recognition": "OCR",
129 | "roi": [
130 | 550,
131 | 29,
132 | 198,
133 | 73
134 | ],
135 | "expected": [
136 | "选择"
137 | ],
138 | "next": [
139 | "选择伙伴_异星守护",
140 | "选择buff_橙",
141 | "选择buff_紫",
142 | "选择buff_蓝",
143 | "选择buff_文字",
144 | "空任务"
145 | ]
146 | },
147 | "选择伙伴_异星守护": {
148 | "recognition": "OCR",
149 | "roi": [
150 | 375,
151 | 272,
152 | 765,
153 | 21
154 | ],
155 | "expected": [
156 | "新"
157 | ],
158 | "action": "Click",
159 | "next": [
160 | "确定_异星守护",
161 | "空任务"
162 | ]
163 | },
164 | "选择buff_文字": {
165 | "recognition": "OCR",
166 | "roi": [
167 | 226,
168 | 369,
169 | 123,
170 | 45
171 | ],
172 | "expected": [
173 | "[\\u4e00-\\u9fa5]"
174 | ],
175 | "action": "Click",
176 | "next": [
177 | "确定_异星守护",
178 | "空任务"
179 | ]
180 | },
181 | "选择buff_橙": {
182 | "count": 5,
183 | "recognition": "ColorMatch",
184 | "roi": [
185 | 244,
186 | 334,
187 | 812,
188 | 29
189 | ],
190 | "upper": [
191 | 220,
192 | 150,
193 | 60
194 | ],
195 | "lower": [
196 | 200,
197 | 130,
198 | 50
199 | ],
200 | "action": "Click",
201 | "connected": true,
202 | "order_by": "Score",
203 | "next": [
204 | "确定_异星守护",
205 | "空任务"
206 | ]
207 | },
208 | "选择buff_紫": {
209 | "count": 5,
210 | "recognition": "ColorMatch",
211 | "roi": [
212 | 244,
213 | 334,
214 | 812,
215 | 29
216 | ],
217 | "upper": [
218 | 176,
219 | 97,
220 | 214
221 | ],
222 | "lower": [
223 | 169,
224 | 94,
225 | 205
226 | ],
227 | "action": "Click",
228 | "connected": true,
229 | "order_by": "Score",
230 | "next": [
231 | "确定_异星守护",
232 | "空任务"
233 | ]
234 | },
235 | "选择buff_蓝": {
236 | "count": 5,
237 | "recognition": "ColorMatch",
238 | "roi": [
239 | 244,
240 | 334,
241 | 812,
242 | 29
243 | ],
244 | "upper": [
245 | 47,
246 | 91,
247 | 243
248 | ],
249 | "lower": [
250 | 45,
251 | 80,
252 | 204
253 | ],
254 | "action": "Click",
255 | "connected": true,
256 | "order_by": "Score",
257 | "next": [
258 | "确定_异星守护",
259 | "空任务"
260 | ]
261 | },
262 | "确定_异星守护": {
263 | "post_delay": 1000,
264 | "recognition": "OCR",
265 | "roi": [
266 | 610,
267 | 626,
268 | 63,
269 | 35
270 | ],
271 | "expected": [
272 | "确定"
273 | ],
274 | "action": "Click"
275 | }
276 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Battle_pass.json:
--------------------------------------------------------------------------------
1 | {
2 | "凭证": {
3 | "post_delay": 2000,
4 | "next": [
5 | "每日任务",
6 | "打开凭证"
7 | ]
8 | },
9 | "每日任务": {
10 | "post_delay": 1000,
11 | "recognition": "TemplateMatch",
12 | "green_mask": true,
13 | "roi": [
14 | 666,
15 | 656,
16 | 48,
17 | 41
18 | ],
19 | "template": [
20 | "凭证/每日任务_680_661_34_32__630_588_134_132.png"
21 | ],
22 | "action": "Click",
23 | "next": [
24 | "每日任务",
25 | "一键领取_每日",
26 | "每周任务"
27 | ]
28 | },
29 | "一键领取_每日": {
30 | "post_delay": 1000,
31 | "recognition": "OCR",
32 | "roi": [
33 | 0,
34 | 585,
35 | 233,
36 | 135
37 | ],
38 | "expected": "键领取",
39 | "action": "Click",
40 | "next": [
41 | "一键领取_每日",
42 | "每日任务",
43 | "每周任务"
44 | ],
45 | "interrupt": [
46 | "关闭奖励通知"
47 | ]
48 | },
49 | "每周任务": {
50 | "post_delay": 1000,
51 | "recognition": "TemplateMatch",
52 | "green_mask": true,
53 | "roi": [
54 | 873,
55 | 655,
56 | 45,
57 | 41
58 | ],
59 | "template": [
60 | "凭证/每周任务_884_657_39_37__834_583_139_137.png"
61 | ],
62 | "action": "Click",
63 | "next": [
64 | "每周任务",
65 | "一键领取_每周",
66 | "限定任务"
67 | ]
68 | },
69 | "一键领取_每周": {
70 | "post_delay": 1000,
71 | "recognition": "OCR",
72 | "roi": [
73 | 0,
74 | 585,
75 | 233,
76 | 135
77 | ],
78 | "expected": "键领取",
79 | "action": "Click",
80 | "next": [
81 | "一键领取_每周",
82 | "每周任务",
83 | "限定任务"
84 | ],
85 | "interrupt": [
86 | "关闭奖励通知"
87 | ]
88 | },
89 | "限定任务": {
90 | "post_delay": 1000,
91 | "recognition": "TemplateMatch",
92 | "green_mask": true,
93 | "roi": [
94 | 1084,
95 | 657,
96 | 36,
97 | 38
98 | ],
99 | "template": [
100 | "凭证/限定任务_1093_658_35_36__1043_584_135_136.png"
101 | ],
102 | "action": "Click",
103 | "next": [
104 | "限定任务",
105 | "一键领取_限定",
106 | "凭证奖励"
107 | ]
108 | },
109 | "一键领取_限定": {
110 | "post_delay": 1000,
111 | "recognition": "OCR",
112 | "roi": [
113 | 0,
114 | 585,
115 | 233,
116 | 135
117 | ],
118 | "expected": "键领取",
119 | "action": "Click",
120 | "next": [
121 | "一键领取_限定",
122 | "限定任务",
123 | "凭证奖励"
124 | ],
125 | "interrupt": [
126 | "关闭奖励通知"
127 | ]
128 | },
129 | "凭证奖励": {
130 | "threshold": 0.8,
131 | "post_delay": 1000,
132 | "recognition": "TemplateMatch",
133 | "green_mask": true,
134 | "roi": [
135 | 422,
136 | 585,
137 | 136,
138 | 135
139 | ],
140 | "template": [
141 | "凭证/凭证奖励_472_660_36_35__422_585_136_135.png"
142 | ],
143 | "action": "Click",
144 | "next": [
145 | "凭证奖励",
146 | "一键领取_凭证奖励",
147 | "返回主菜单"
148 | ]
149 | },
150 | "一键领取_凭证奖励": {
151 | "post_delay": 1000,
152 | "recognition": "OCR",
153 | "roi": [
154 | 0,
155 | 585,
156 | 233,
157 | 135
158 | ],
159 | "expected": "键领取",
160 | "action": "Click",
161 | "next": [
162 | "一键领取_凭证奖励",
163 | "凭证奖励",
164 | "返回主菜单"
165 | ],
166 | "interrupt": [
167 | "关闭奖励通知"
168 | ]
169 | },
170 | "打开凭证": {
171 | "post_delay": 2000,
172 | "recognition": "OCR",
173 | "roi": [
174 | 149,
175 | 326,
176 | 200,
177 | 120
178 | ],
179 | "expected": "凭证",
180 | "action": "Click",
181 | "next": [
182 | "凭证"
183 | ]
184 | }
185 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Collect_Quest.json:
--------------------------------------------------------------------------------
1 | {
2 | "任务": {
3 | "next": [
4 | "切换到日常任务",
5 | "一键领取_日常",
6 | "领取定期任务"
7 | ],
8 | "interrupt": [
9 | "账号等级提升",
10 | "关闭奖励通知",
11 | "打开任务"
12 | ]
13 | },
14 | "领取定期任务": {
15 | "recognition": "TemplateMatch",
16 | "roi": [
17 | 0,
18 | 136,
19 | 283,
20 | 155
21 | ],
22 | "template": "任务/切换定期任务_1_186_183_55__0_136_283_155.png",
23 | "action": "Click",
24 | "next": [
25 | "领取定期任务_next"
26 | ]
27 | },
28 | "领取定期任务_next": {
29 | "next": [
30 | "一键领取_定期",
31 | "返回主菜单"
32 | ],
33 | "interrupt": [
34 | "账号等级提升",
35 | "关闭奖励通知"
36 | ]
37 | },
38 | "一键领取_日常": {
39 | "post_wait_freezes": 1000,
40 | "recognition": "OCR",
41 | "roi": [
42 | 0,
43 | 574,
44 | 258,
45 | 146
46 | ],
47 | "expected": [
48 | "一键领取",
49 | "键领取"
50 | ],
51 | "action": "Click",
52 | "next": [
53 | "任务"
54 | ]
55 | },
56 | "一键领取_定期": {
57 | "post_wait_freezes": 1000,
58 | "recognition": "OCR",
59 | "roi": [
60 | 0,
61 | 574,
62 | 258,
63 | 146
64 | ],
65 | "expected": [
66 | "一键领取",
67 | "键领取"
68 | ],
69 | "action": "Click",
70 | "next": [
71 | "领取定期任务_next"
72 | ]
73 | },
74 | "打开任务": {
75 | "post_wait_freezes": 1000,
76 | "recognition": "OCR",
77 | "roi": [
78 | 900,
79 | 160,
80 | 150,
81 | 130
82 | ],
83 | "expected": "^任务$",
84 | "action": "Click"
85 | },
86 | "切换到日常任务": {
87 | "post_wait_freezes": 1000,
88 | "threshold": 0.9,
89 | "recognition": "TemplateMatch",
90 | "roi": [
91 | 0,
92 | 38,
93 | 268,
94 | 158
95 | ],
96 | "template": [
97 | "任务/切换日常任务_8_88_168_58__0_38_268_158.png"
98 | ],
99 | "action": "Click",
100 | "next": [
101 | "任务"
102 | ]
103 | },
104 | "活动任务": {
105 | "next": [
106 | "一键领取活动任务",
107 | "已经打开活动战斗界面",
108 | "返回主菜单"
109 | ],
110 | "interrupt": [
111 | "关闭奖励通知",
112 | "进入活动"
113 | ]
114 | },
115 | "一键领取活动任务": {
116 | "post_wait_freezes": 1000,
117 | "recognition": "OCR",
118 | "roi": [
119 | 0,
120 | 504,
121 | 301,
122 | 214
123 | ],
124 | "expected": [
125 | "一键领取",
126 | "键领取"
127 | ],
128 | "action": "Click",
129 | "next": [
130 | "已经打开活动战斗界面"
131 | ]
132 | },
133 | "已经打开活动战斗界面": {
134 | "inverse": true,
135 | "recognition": "OCR",
136 | "roi": [
137 | 950,
138 | 260,
139 | 180,
140 | 130
141 | ],
142 | "expected": "战斗",
143 | "next": [
144 | "打开活动任务",
145 | "打开活动任务2",
146 | "一键领取活动任务",
147 | "返回主菜单"
148 | ],
149 | "interrupt": [
150 | "关闭奖励通知"
151 | ]
152 | },
153 | "打开活动任务2": {
154 | "post_wait_freezes": 1000,
155 | "recognition": "OCR",
156 | "roi": [
157 | 326,
158 | 656,
159 | 99,
160 | 46
161 | ],
162 | "expected": [
163 | "抽丝剥茧",
164 | "任务"
165 | ]
166 | },
167 | "打开活动任务": {
168 | "post_wait_freezes": 1000,
169 | "recognition": "OCR",
170 | "expected": [
171 | "任务(?!完成|完)"
172 | ],
173 | "action": "Click",
174 | "next": [
175 | "已经打开活动战斗界面"
176 | ]
177 | }
178 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Daily_Battle.json:
--------------------------------------------------------------------------------
1 | {
2 | "战斗": {
3 | "next": [
4 | "使用体力界面_主要",
5 | "完成战斗",
6 | "未解锁战斗"
7 | ],
8 | "interrupt": [
9 | "开始战斗",
10 | "接收后勤",
11 | "速战",
12 | "进入深渊作战",
13 | "进入深渊作战_滑动",
14 | "进入作战",
15 | "作战_滑动",
16 | "选择作战1",
17 | "打开战斗",
18 | "进入活动",
19 | "选择活动作战2",
20 | "选择活动作战1_精确",
21 | "选择活动作战1",
22 | "账号等级提升",
23 | "关闭奖励通知"
24 | ]
25 | },
26 | "接收后勤": {
27 | "post_delay": 1000,
28 | "enabled": false,
29 | "recognition": "OCR",
30 | "roi": [
31 | 720,
32 | 630,
33 | 256,
34 | 66
35 | ],
36 | "expected": "接收",
37 | "action": "Click"
38 | },
39 | "未解锁战斗": {
40 | "recognition": "OCR",
41 | "roi": [
42 | 348,
43 | 313,
44 | 605,
45 | 88
46 | ],
47 | "expected": [
48 | "通关.{1,}后解锁"
49 | ],
50 | "next": [
51 | "返回主菜单"
52 | ]
53 | },
54 | "使用体力界面_主要": {
55 | "recognition": "OCR",
56 | "roi": [
57 | 821,
58 | 204,
59 | 154,
60 | 56
61 | ],
62 | "expected": "恢复感知",
63 | "next": [
64 | "选择临期体力药剂",
65 | "关闭体力界面"
66 | ]
67 | },
68 | "选择临期体力药剂": {
69 | "recognition": "OCR",
70 | "roi": [
71 | 191,
72 | 201,
73 | 326,
74 | 57
75 | ],
76 | "expected": [
77 | "3天",
78 | "2天",
79 | "1天"
80 | ],
81 | "action": "Click",
82 | "next": [
83 | "确认/取消使用体力"
84 | ]
85 | },
86 | "进入深渊作战_滑动": {
87 | "recognition": "OCR",
88 | "roi": [
89 | 630,
90 | 300,
91 | 100,
92 | 60
93 | ],
94 | "expected": [
95 | "困难"
96 | ],
97 | "action": "Swipe",
98 | "begin": [
99 | 500,
100 | 330,
101 | 0,
102 | 0
103 | ],
104 | "end": [
105 | 250,
106 | 330,
107 | 0,
108 | 0
109 | ]
110 | },
111 | "关闭速战界面": {
112 | "recognition": "OCR",
113 | "roi": [
114 | 521,
115 | 87,
116 | 250,
117 | 200
118 | ],
119 | "expected": "快速作战",
120 | "action": "Click",
121 | "target": [
122 | 0,
123 | 1,
124 | 0,
125 | 0
126 | ],
127 | "next": [
128 | "体力不足_next"
129 | ]
130 | },
131 | "进入深渊作战": {
132 | "post_delay": 1000,
133 | "recognition": "OCR",
134 | "expected": "深渊",
135 | "action": "Click"
136 | },
137 | "确认/取消使用体力": {
138 | "post_wait_freezes": 200,
139 | "recognition": "OCR",
140 | "roi": [
141 | 282,
142 | 471,
143 | 722,
144 | 176
145 | ],
146 | "action": "Click",
147 | "expected": ""
148 | },
149 | "速战MAX": {
150 | "recognition": "OCR",
151 | "roi": [
152 | 800,
153 | 440,
154 | 100,
155 | 80
156 | ],
157 | "expected": [
158 | "最大"
159 | ],
160 | "action": "Click"
161 | },
162 | "完成战斗": {
163 | "post_delay": 1000,
164 | "recognition": "OCR",
165 | "roi": [
166 | 527,
167 | 645,
168 | 229,
169 | 39
170 | ],
171 | "expected": [
172 | "完成"
173 | ],
174 | "action": "Click"
175 | },
176 | "打开战斗": {
177 | "recognition": "OCR",
178 | "roi": [
179 | 950,
180 | 260,
181 | 180,
182 | 130
183 | ],
184 | "expected": "战斗",
185 | "action": "Click"
186 | },
187 | "选择作战1": {
188 | "recognition": "OCR",
189 | "roi": [
190 | 1048,
191 | 369,
192 | 174,
193 | 58
194 | ],
195 | "expected": [
196 | "常规行动"
197 | ],
198 | "action": "Click"
199 | },
200 | "作战_滑动": {
201 | "recognition": "OCR",
202 | "roi": [
203 | 161,
204 | 575,
205 | 263,
206 | 195
207 | ],
208 | "expected": [
209 | "常规行动"
210 | ],
211 | "action": "Swipe",
212 | "begin": [
213 | 500,
214 | 330,
215 | 0,
216 | 0
217 | ],
218 | "end": [
219 | 450,
220 | 330,
221 | 0,
222 | 0
223 | ]
224 | },
225 | "进入作战": {
226 | "pre_wait_freezes": 200,
227 | "recognition": "OCR",
228 | "roi": [
229 | 57,
230 | 530,
231 | 2328,
232 | 43
233 | ],
234 | "action": "Click",
235 | "expected": ""
236 | },
237 | "速战": {
238 | "threshold": 0.9,
239 | "post_delay": 1000,
240 | "recognition": "OCR",
241 | "roi": [
242 | 867,
243 | 638,
244 | 212,
245 | 147
246 | ],
247 | "expected": "速战",
248 | "action": "Click",
249 | "next": [
250 | "速战_next"
251 | ]
252 | },
253 | "速战_next": {
254 | "next": [
255 | "使用体力界面",
256 | "速战MAX",
257 | "战斗次数",
258 | "增加战斗次数",
259 | "速战",
260 | "意外点击_速战"
261 | ]
262 | },
263 | "意外点击_速战": {
264 | "recognition": "OCR",
265 | "roi": [
266 | 527,
267 | 645,
268 | 229,
269 | 39
270 | ],
271 | "expected": [
272 | "完成"
273 | ]
274 | },
275 | "使用体力界面": {
276 | "recognition": "OCR",
277 | "roi": [
278 | 821,
279 | 204,
280 | 154,
281 | 56
282 | ],
283 | "expected": "恢复感知"
284 | },
285 | "战斗次数": {
286 | "only_rec": true,
287 | "roi": [
288 | 587,
289 | 463,
290 | 42,
291 | 30
292 | ],
293 | "recognition": "OCR",
294 | "expected": ""
295 | },
296 | "增加战斗次数": {
297 | "recognition": "TemplateMatch",
298 | "template": "战斗/增加作战次数_748_460_62_37__698_410_162_137.png",
299 | "roi": [
300 | 748,
301 | 460,
302 | 62,
303 | 37
304 | ],
305 | "action": "Click",
306 | "next": [
307 | "速战_next"
308 | ]
309 | },
310 | "开始战斗": {
311 | "post_delay": 1000,
312 | "recognition": "OCR",
313 | "roi": [
314 | 577,
315 | 539,
316 | 134,
317 | 38
318 | ],
319 | "expected": [
320 | "开始作战"
321 | ],
322 | "action": "Click"
323 | },
324 | "体力不足": {
325 | "recognition": "OCR",
326 | "roi": [
327 | 585,
328 | 337,
329 | 112,
330 | 44
331 | ],
332 | "expected": "道具不足",
333 | "next": [
334 | "体力不足_next"
335 | ]
336 | },
337 | "体力不足_next": {
338 | "next": [
339 | "关闭体力界面",
340 | "关闭速战界面",
341 | "返回主菜单"
342 | ]
343 | },
344 | "关闭体力界面": {
345 | "recognition": "OCR",
346 | "roi": [
347 | 821,
348 | 204,
349 | 154,
350 | 56
351 | ],
352 | "expected": "恢复感知",
353 | "action": "Click",
354 | "target": [
355 | 100,
356 | 0,
357 | 0,
358 | 0
359 | ],
360 | "next": [
361 | "体力不足_next"
362 | ]
363 | },
364 | "进入活动": {
365 | "post_delay": 1000,
366 | "recognition": "Custom",
367 | "custom_recognition": "LOp",
368 | "custom_recognition_param": {
369 | "mode": "and",
370 | "nodes": [
371 | "检查主界面",
372 | "检查活动区域内是否存在文字"
373 | ]
374 | },
375 | "action": "Click",
376 | "target": [
377 | 900,
378 | 311,
379 | 1,
380 | 1
381 | ]
382 | },
383 | "检查活动区域内是否存在文字": {
384 | "recognition": "OCR",
385 | "roi": [
386 | 829,
387 | 269,
388 | 132,
389 | 85
390 | ],
391 | "expected": ""
392 | },
393 | "选择活动作战1_精确": {
394 | "recognition": "OCR",
395 | "roi": [
396 | 41,
397 | 199,
398 | 150,
399 | 60
400 | ],
401 | "expected": [
402 | "材料",
403 | "研究基地"
404 | ],
405 | "action": "Click"
406 | },
407 | "选择活动作战1": {
408 | "recognition": "OCR",
409 | "expected": [
410 | "材料"
411 | ],
412 | "action": "Click"
413 | },
414 | "选择活动作战2": {
415 | "recognition": "OCR",
416 | "expected": [
417 | "深渊"
418 | ],
419 | "action": "Click"
420 | }
421 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Fishing.json:
--------------------------------------------------------------------------------
1 | {
2 | "钓鱼": {
3 | "on_error": [
4 | "钓鱼"
5 | ],
6 | "next": [
7 | "鱼上钩",
8 | "成功"
9 | ],
10 | "interrupt": [
11 | "钓鱼中",
12 | "甩杆"
13 | ]
14 | },
15 | "甩杆": {
16 | "post_delay": 1000,
17 | "count": 500,
18 | "recognition": "ColorMatch",
19 | "method": 4,
20 | "roi": [
21 | 1069,
22 | 538,
23 | 178,
24 | 166
25 | ],
26 | "lower": [
27 | 150,
28 | 190,
29 | 40
30 | ],
31 | "upper": [
32 | 220,
33 | 260,
34 | 110
35 | ],
36 | "connected": true,
37 | "action": "Click"
38 | },
39 | "钓鱼中": {
40 | "count": 500,
41 | "recognition": "ColorMatch",
42 | "upper": [
43 | 255,
44 | 255,
45 | 102
46 | ],
47 | "lower": [
48 | 200,
49 | 210,
50 | 40
51 | ],
52 | "roi": [
53 | 1050,
54 | 525,
55 | 202,
56 | 184
57 | ],
58 | "connected": true
59 | },
60 | "鱼上钩": {
61 | "recognition": "OCR",
62 | "roi": [
63 | 487,
64 | 56,
65 | 319,
66 | 210
67 | ],
68 | "expected": [
69 | "鱼儿",
70 | "上钩"
71 | ],
72 | "replace": [
73 | [
74 | "钩",
75 | "钓"
76 | ]
77 | ],
78 | "action": "Click",
79 | "target": [
80 | 1159,
81 | 612,
82 | 1,
83 | 1
84 | ],
85 | "next": [
86 | "成功",
87 | "失败"
88 | ],
89 | "interrupt": [
90 | "点击提示",
91 | "收杆"
92 | ],
93 | "on_error": [
94 | "钓鱼"
95 | ]
96 | },
97 | "失败": {
98 | "post_delay": 1000,
99 | "recognition": "OCR",
100 | "roi": [
101 | 503,
102 | 102,
103 | 274,
104 | 131
105 | ],
106 | "expected": "鱼跑掉了",
107 | "next": [
108 | "钓鱼"
109 | ]
110 | },
111 | "点击提示": {
112 | "recognition": "OCR",
113 | "roi": [
114 | 868,
115 | 184,
116 | 148,
117 | 62
118 | ],
119 | "only_rec": true,
120 | "expected": [
121 | "很好",
122 | "失败",
123 | "成功",
124 | "完美"
125 | ]
126 | },
127 | "收杆": {
128 | "post_delay": 1000,
129 | "recognition": "ColorMatch",
130 | "roi": [
131 | 766,
132 | 95,
133 | 347,
134 | 325
135 | ],
136 | "upper": [
137 | 255,
138 | 195,
139 | 5
140 | ],
141 | "lower": [
142 | 250,
143 | 185,
144 | 0
145 | ],
146 | "action": "Custom",
147 | "custom_action": "Fishing"
148 | },
149 | "检查黄色块数量": {
150 | "recognition": "ColorMatch",
151 | "roi": [
152 | 766,
153 | 95,
154 | 347,
155 | 325
156 | ],
157 | "upper": [
158 | 255,
159 | 195,
160 | 5
161 | ],
162 | "lower": [
163 | 250,
164 | 185,
165 | 0
166 | ],
167 | "connected": true
168 | },
169 | "成功": {
170 | "post_delay": 5000,
171 | "recognition": "OCR",
172 | "expected": [
173 | "本次获得"
174 | ],
175 | "action": "Click",
176 | "target": [
177 | 100,
178 | 0,
179 | 0,
180 | 0
181 | ],
182 | "next": [
183 | "钓鱼"
184 | ]
185 | }
186 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Gather_Pieces.json:
--------------------------------------------------------------------------------
1 | {
2 | "收取碎片": {
3 | "next": [
4 | "一键收取碎片"
5 | ],
6 | "interrupt": [
7 | "点击剩余碎片",
8 | "点击地图",
9 | "打开基地"
10 | ]
11 | },
12 | "打开基地": {
13 | "post_delay": 2000,
14 | "recognition": "OCR",
15 | "roi": [
16 | 1013,
17 | 480,
18 | 55,
19 | 41
20 | ],
21 | "expected": "基地",
22 | "action": "Click"
23 | },
24 | "一键收取碎片": {
25 | "post_delay": 1000,
26 | "recognition": "OCR",
27 | "only_rec": true,
28 | "roi": [
29 | 923,
30 | 491,
31 | 107,
32 | 40
33 | ],
34 | "expected": "收取",
35 | "action": "Click",
36 | "next": [
37 | "谢谢芙提雅",
38 | "返回主菜单_基地",
39 | "一键收取碎片"
40 | ]
41 | },
42 | "谢谢芙提雅": {
43 | "post_delay": 1000,
44 | "recognition": "OCR",
45 | "only_rec": true,
46 | "roi": [
47 | 567,
48 | 535,
49 | 140,
50 | 42
51 | ],
52 | "expected": "谢谢",
53 | "action": "Click",
54 | "next": [
55 | "返回主菜单_基地"
56 | ],
57 | "interrupt": [
58 | "点击地图"
59 | ]
60 | },
61 | "返回主菜单_基地": {
62 | "recognition": "OCR",
63 | "only_rec": true,
64 | "roi": [
65 | 1034,
66 | 22,
67 | 52,
68 | 27
69 | ],
70 | "expected": "退出",
71 | "action": "Click",
72 | "next": [
73 | "检查主界面",
74 | "返回主菜单_基地",
75 | "返回主菜单"
76 | ],
77 | "interrupt": [
78 | "点击地图"
79 | ]
80 | },
81 | "点击地图": {
82 | "green_mask": true,
83 | "recognition": "TemplateMatch",
84 | "roi": [
85 | 18,
86 | 0,
87 | 82,
88 | 79
89 | ],
90 | "template": "基地/在基地内部.png",
91 | "action": "Click"
92 | },
93 | "点击剩余碎片": {
94 | "post_delay": 1000,
95 | "recognition": "OCR",
96 | "only_rec": true,
97 | "roi": [
98 | 983,
99 | 678,
100 | 39,
101 | 23
102 | ],
103 | "expected": "剩余",
104 | "action": "Click"
105 | }
106 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/General.json:
--------------------------------------------------------------------------------
1 | {
2 | "关闭奖励通知": {
3 | "recognition": "OCR",
4 | "roi": [
5 | 488,
6 | 0,
7 | 298,
8 | 169
9 | ],
10 | "expected": [
11 | "获得道具"
12 | ],
13 | "action": "Click",
14 | "target": [
15 | 1,
16 | 0,
17 | 0,
18 | 0
19 | ]
20 | },
21 | "返回主菜单": {
22 | "post_wait_freezes": 1000,
23 | "recognition": "TemplateMatch",
24 | "roi": [
25 | 970,
26 | 0,
27 | 180,
28 | 80
29 | ],
30 | "template": [
31 | "通用任务/主菜单_999_24_49_44__949_0_149_144.png"
32 | ],
33 | "action": "Click",
34 | "next": [
35 | "检查主界面",
36 | "返回主菜单"
37 | ]
38 | },
39 | "道具过期提示": {
40 | "recognition": "OCR",
41 | "roi": [
42 | 460,
43 | 24,
44 | 363,
45 | 76
46 | ],
47 | "expected": "以下道具已经过期",
48 | "action": "Click",
49 | "target": [
50 | 1,
51 | 0,
52 | 0,
53 | 0
54 | ]
55 | },
56 | "账号等级提升": {
57 | "recognition": "OCR",
58 | "roi": [
59 | 663,
60 | 178,
61 | 283,
62 | 172
63 | ],
64 | "expected": "等级提升",
65 | "action": "Click",
66 | "target": [
67 | 100,
68 | 100,
69 | 0,
70 | 0
71 | ]
72 | },
73 | "返回主菜单_err": {
74 | "focus": {
75 | "succeeded": "[color:Tomato]识别错误,返回主菜单[/color]"
76 | },
77 | "action": "Custom",
78 | "custom_action": "ScreenShot",
79 | "custom_action_param": {
80 | "type": "ERR"
81 | },
82 | "next": [
83 | "检查主界面",
84 | "返回主菜单"
85 | ],
86 | "on_error": [
87 | "重启游戏"
88 | ]
89 | },
90 | "重启游戏": {
91 | "focus": {
92 | "succeeded": "[color:Tomato]未知错误,重启游戏[/color]"
93 | },
94 | "action": "StopApp",
95 | "package": "com.dragonli.projectsnow.lhm",
96 | "next": [
97 | "启动"
98 | ]
99 | },
100 | "custom通知": {}
101 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Gift_Stamina.json:
--------------------------------------------------------------------------------
1 | {
2 | "赠送感知": {
3 | "next": [
4 | "一键收赠",
5 | "打开好友",
6 | "返回主菜单"
7 | ]
8 | },
9 | "一键收赠": {
10 | "recognition": "OCR",
11 | "roi": [
12 | 1017,
13 | 602,
14 | 254,
15 | 150
16 | ],
17 | "expected": [
18 | "一键收赠",
19 | "键收赠"
20 | ],
21 | "action": "Click",
22 | "next": [
23 | "赠送感知"
24 | ]
25 | },
26 | "打开好友": {
27 | "post_delay": 1000,
28 | "recognition": "TemplateMatch",
29 | "roi": [
30 | 180,
31 | 248,
32 | 143,
33 | 134
34 | ],
35 | "template": [
36 | "赠送感知/好友_250_298_43_34__200_248_143_134.png"
37 | ],
38 | "action": "Click",
39 | "next": [
40 | "赠送感知"
41 | ]
42 | }
43 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Granted_PuzzlePieces.json:
--------------------------------------------------------------------------------
1 | {
2 | "赠送碎片": {
3 | "next": [
4 | "一键接收",
5 | "开始赠送"
6 | ],
7 | "interrupt": [
8 | "信源交换",
9 | "点击卡罗琳",
10 | "前进_基地拼图",
11 | "打开基地"
12 | ]
13 | },
14 | "一键接收": {
15 | "recognition": "OCR",
16 | "roi": [
17 | 1039,
18 | 615,
19 | 196,
20 | 93
21 | ],
22 | "expected": "键接收",
23 | "action": "Click",
24 | "next": [
25 | "开始赠送"
26 | ],
27 | "interrupt": [
28 | "进入赠送界面"
29 | ]
30 | },
31 | "进入赠送界面": {
32 | "recognition": "ColorMatch",
33 | "roi": [
34 | 346,
35 | 18,
36 | 148,
37 | 82
38 | ],
39 | "lower": [
40 | 137,
41 | 146,
42 | 154
43 | ],
44 | "upper": [
45 | 145,
46 | 152,
47 | 159
48 | ],
49 | "connected": true,
50 | "count": 100,
51 | "action": "Click"
52 | },
53 | "开始赠送": {
54 | "recognition": "OCR",
55 | "roi": [
56 | 105,
57 | 47,
58 | 68,
59 | 32
60 | ],
61 | "expected": "可赠送",
62 | "next": [
63 | "赠送已满"
64 | ],
65 | "interrupt": [
66 | "关闭奖励通知",
67 | "选择碎片进行赠送"
68 | ]
69 | },
70 | "选择碎片进行赠送": {
71 | "recognition": "OCR",
72 | "post_delay": 1000,
73 | "roi": [
74 | 33,
75 | 181,
76 | 196,
77 | 398
78 | ],
79 | "expected": "^(1[1-9](\\.\\d+)?|[2-9]\\d+(\\.\\d+)?)$",
80 | "action": "Click",
81 | "next": [
82 | "开始赠送碎片",
83 | "关闭奖励通知"
84 | ]
85 | },
86 | "开始赠送碎片": {
87 | "recognition": "OCR",
88 | "roi": [
89 | 1208,
90 | 183,
91 | 43,
92 | 22
93 | ],
94 | "expected": "赠送",
95 | "action": "Click"
96 | },
97 | "赠送已满": {
98 | "recognition": "ColorMatch",
99 | "roi": [
100 | 1014,
101 | 671,
102 | 22,
103 | 23
104 | ],
105 | "lower": [
106 | 186,
107 | 229,
108 | 248
109 | ],
110 | "upper": [
111 | 188,
112 | 233,
113 | 252
114 | ],
115 | "connected": true,
116 | "count": 10,
117 | "next": [
118 | "没有待领取的碎片"
119 | ],
120 | "interrupt": [
121 | "领取碎片"
122 | ]
123 | },
124 | "没有待领取的碎片": {
125 | "inverse": true,
126 | "recognition": "TemplateMatch",
127 | "roi": [
128 | 495,
129 | 618,
130 | 567,
131 | 74
132 | ],
133 | "template": "拼图\\赠送碎片.png",
134 | "next": [
135 | "返回主菜单_基地"
136 | ],
137 | "interrupt": [
138 | "继续_基地",
139 | "一会儿再见",
140 | "点击地图"
141 | ]
142 | },
143 | "继续_基地": {
144 | "recognition": "OCR",
145 | "roi": [
146 | 1188,
147 | 16,
148 | 56,
149 | 40
150 | ],
151 | "expected": "继续",
152 | "action": "Click"
153 | },
154 | "领取碎片": {
155 | "recognition": "TemplateMatch",
156 | "roi": [
157 | 495,
158 | 618,
159 | 567,
160 | 74
161 | ],
162 | "template": "拼图\\赠送碎片.png",
163 | "action": "Click"
164 | },
165 | "信源交换": {
166 | "recognition": "OCR",
167 | "roi": [
168 | 889,
169 | 289,
170 | 113,
171 | 236
172 | ],
173 | "expected": [
174 | "交换"
175 | ],
176 | "action": "Click"
177 | }
178 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Mail.json:
--------------------------------------------------------------------------------
1 | {
2 | "邮件": {
3 | "next": [
4 | "领取邮件",
5 | "空邮箱"
6 | ],
7 | "interrupt": [
8 | "进入邮件"
9 | ]
10 | },
11 | "空邮箱": {
12 | "recognition": "OCR",
13 | "roi": [
14 | 456,
15 | 325,
16 | 259,
17 | 63
18 | ],
19 | "expected": "暂时没有邮件",
20 | "next": [
21 | "返回主菜单"
22 | ]
23 | },
24 | "进入邮件": {
25 | "recognition": "TemplateMatch",
26 | "roi": [
27 | 24,
28 | 231,
29 | 139,
30 | 130
31 | ],
32 | "template": [
33 | "领取邮件/邮件_74_281_39_30__24_231_139_130.png"
34 | ],
35 | "action": "Click"
36 | },
37 | "领取邮件": {
38 | "post_wait_freezes": 500,
39 | "recognition": "OCR",
40 | "roi": [
41 | 180,
42 | 610,
43 | 200,
44 | 120
45 | ],
46 | "expected": "批量领取",
47 | "action": "Click",
48 | "next": [
49 | "返回主菜单"
50 | ],
51 | "interrupt": [
52 | "关闭奖励通知"
53 | ]
54 | }
55 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Open_World_mission.json:
--------------------------------------------------------------------------------
1 | {
2 | "新星开拓任务":{
3 | "post_delay":1000,
4 | "next":[
5 | "判断新星开拓"
6 | ],
7 | "interrupt":[
8 | "判断派遣0",
9 | "判断战斗界面0",
10 | "判断主界面0"
11 | ]
12 | },
13 | "判断新星开拓":{
14 | "recognition":"OCR",
15 | "expected":"伙伴岛",
16 | "roi":[
17 | 495,
18 | 348,
19 | 186,
20 | 98
21 | ],
22 | "post_delay":2000,
23 | "next":"进入开拓目标"
24 | },
25 | "判断派遣0":{
26 | "recognition":"OCR",
27 | "expected":"新星开拓",
28 | "roi":[
29 | 993,
30 | 547,
31 | 276,
32 | 62
33 | ],
34 | "post_delay":2000,
35 | "action":"Click"
36 | },
37 | "判断战斗界面0":{
38 | "recognition":"OCR",
39 | "expected":"特别派遣",
40 | "roi":[
41 | 25,
42 | 269,
43 | 307,
44 | 137
45 | ],
46 | "action":"Click"
47 | },
48 | "判断主界面0":{
49 | "recognition":"OCR",
50 | "expected":"战斗",
51 | "roi":[
52 | 962,
53 | 247,
54 | 179,
55 | 125
56 | ],
57 | "action":"Click"
58 | },
59 | "进入开拓目标":{
60 | "recognition":"OCR",
61 | "expected":"开拓目标",
62 | "roi":[
63 | 962,
64 | 540,
65 | 200,
66 | 67],
67 | "timeout":5000,
68 | "action":"Click",
69 | "post_delay":1000,
70 | "next":[
71 | "领取开拓奖励",
72 | "返回主菜单"
73 | ]
74 | },
75 | "领取开拓奖励":{
76 | "recognition":"OCR",
77 | "expected":"领取",
78 | "roi":[
79 | 17,
80 | 598,
81 | 186,
82 | 97
83 | ],
84 | "timeout":5000,
85 | "post_delay":1000,
86 | "action":"Click",
87 | "next":"返回主菜单",
88 | "interrupt":"关闭奖励通知"
89 | }
90 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Psychic_Simulated_Realm.json:
--------------------------------------------------------------------------------
1 | {
2 | "精神拟境": {
3 | "next": [
4 | "点击第一栏"
5 | ],
6 | "interrupt": [
7 | "打开精神拟境",
8 | "特别派遣",
9 | "打开战斗",
10 | "意外点击_地下清理"
11 | ]
12 | },
13 | "点击第一栏": {
14 | "post_delay": 1000,
15 | "recognition": "OCR",
16 | "roi": [
17 | 1080,
18 | 643,
19 | 124,
20 | 53
21 | ],
22 | "expected": "准备作战",
23 | "action": "Click",
24 | "target": [
25 | 151,
26 | 199,
27 | 0,
28 | 0
29 | ],
30 | "next": [
31 | "暂未开放",
32 | "检查测评次数",
33 | "检查测评等级"
34 | ],
35 | "interrupt": [
36 | "确认选项",
37 | "快速测评"
38 | ]
39 | },
40 | "意外点击_地下清理": {
41 | "recognition": "OCR",
42 | "roi": [
43 | 17,
44 | 80,
45 | 928,
46 | 191
47 | ],
48 | "expected": [
49 | "隧道",
50 | "区域",
51 | "废弃"
52 | ],
53 | "action": "Click",
54 | "target": [
55 | 1207,
56 | 63,
57 | 0,
58 | 0
59 | ]
60 | },
61 | "暂未开放": {
62 | "recognition": "OCR",
63 | "roi": [
64 | 557,
65 | 333,
66 | 176,
67 | 51
68 | ],
69 | "expected": "暂未开放",
70 | "next": [
71 | "返回主菜单"
72 | ]
73 | },
74 | "特别派遣": {
75 | "recognition": "OCR",
76 | "roi": [
77 | 39,
78 | 264,
79 | 295,
80 | 150
81 | ],
82 | "expected": "特别派遣",
83 | "action": "Click"
84 | },
85 | "打开精神拟境": {
86 | "post_delay": 1000,
87 | "recognition": "OCR",
88 | "roi": [
89 | 396,
90 | 514,
91 | 209,
92 | 128
93 | ],
94 | "expected": "精神拟境",
95 | "action": "Click"
96 | },
97 | "快速测评": {
98 | "recognition": "OCR",
99 | "roi": [
100 | 774,
101 | 578,
102 | 214,
103 | 142
104 | ],
105 | "expected": "快速测评",
106 | "action": "Click"
107 | },
108 | "确认选项": {
109 | "post_delay": 1000,
110 | "recognition": "OCR",
111 | "roi": [
112 | 864,
113 | 449,
114 | 201,
115 | 126
116 | ],
117 | "expected": "确定",
118 | "action": "Click"
119 | },
120 | "检查测评等级": {
121 | "green_mask": true,
122 | "recognition": "TemplateMatch",
123 | "roi": [
124 | 1147,
125 | 310,
126 | 70,
127 | 70
128 | ],
129 | "template": [
130 | "精神拟境/难度5.png"
131 | ],
132 | "next": [
133 | "点击第二栏"
134 | ]
135 | },
136 | "点击第二栏": {
137 | "post_delay": 1000,
138 | "recognition": "OCR",
139 | "roi": [
140 | 1080,
141 | 643,
142 | 124,
143 | 53
144 | ],
145 | "expected": "准备作战",
146 | "action": "Click",
147 | "target": [
148 | 148,
149 | 301,
150 | 0,
151 | 0
152 | ],
153 | "next": [
154 | "检查测评次数",
155 | "检查测评等级_第二栏"
156 | ],
157 | "interrupt": [
158 | "确认选项",
159 | "快速测评"
160 | ]
161 | },
162 | "检查测评等级_第二栏": {
163 | "green_mask": true,
164 | "recognition": "TemplateMatch",
165 | "roi": [
166 | 1147,
167 | 310,
168 | 70,
169 | 70
170 | ],
171 | "template": [
172 | "精神拟境/难度5.png"
173 | ],
174 | "next": [
175 | "返回主菜单"
176 | ]
177 | },
178 | "检查测评次数": {
179 | "recognition": "OCR",
180 | "roi": [
181 | 1159,
182 | 386,
183 | 55,
184 | 40
185 | ],
186 | "expected": [
187 | "0/4",
188 | "0/8"
189 | ],
190 | "next": [
191 | "领取精神拟境奖励"
192 | ]
193 | },
194 | "领取精神拟境奖励": {
195 | "post_wait_freezes": 1000,
196 | "recognition": "TemplateMatch",
197 | "roi": [
198 | 43,
199 | 516,
200 | 144,
201 | 139
202 | ],
203 | "template": "精神拟境/打开精神拟境奖励_86_570_45_46__36_520_145_146.png",
204 | "action": "Click",
205 | "next": [
206 | "一键领取_精神拟境",
207 | "退出精神拟境奖励界面"
208 | ],
209 | "interrupt": [
210 | "关闭奖励通知"
211 | ]
212 | },
213 | "一键领取_精神拟境": {
214 | "post_delay": 1000,
215 | "recognition": "OCR",
216 | "roi": [
217 | 1062,
218 | 623,
219 | 143,
220 | 53
221 | ],
222 | "expected": [
223 | "键领取",
224 | "一键领取"
225 | ],
226 | "action": "Click",
227 | "next": [
228 | "退出精神拟境奖励界面"
229 | ],
230 | "interrupt": [
231 | "关闭奖励通知"
232 | ]
233 | },
234 | "退出精神拟境奖励界面": {
235 | "recognition": "TemplateMatch",
236 | "roi": [
237 | 1186,
238 | 19,
239 | 93,
240 | 102
241 | ],
242 | "template": "精神拟境/退出精神拟境奖励_1214_54_39_37__1141_4_139_137.png",
243 | "action": "Click",
244 | "next": [
245 | "返回主菜单"
246 | ]
247 | },
248 | "精神拟境_第二栏": {
249 | "action": "Click",
250 | "target": [
251 | 148,
252 | 304,
253 | 1,
254 | 1
255 | ],
256 | "next": [
257 | "检查测评次数",
258 | "检查测评等级_第二栏"
259 | ],
260 | "interrupt": [
261 | "确认选项",
262 | "快速测评",
263 | "打开精神拟境",
264 | "特别派遣",
265 | "打开战斗"
266 | ]
267 | }
268 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Receive_Stamina.json:
--------------------------------------------------------------------------------
1 | {
2 | "体力": {
3 | "next": [
4 | "领取体力"
5 | ],
6 | "interrupt": [
7 | "向下滑动_体力",
8 | "打开供应站补给箱",
9 | "打开供应站"
10 | ]
11 | },
12 | "向下滑动_体力": {
13 | "recognition": "OCR",
14 | "roi": [
15 | 158,
16 | 96,
17 | 116,
18 | 34
19 | ],
20 | "expected": "限时补给箱",
21 | "action": "Swipe",
22 | "begin": [
23 | 620,
24 | 550,
25 | 0,
26 | 0
27 | ],
28 | "end": [
29 | 620,
30 | 300,
31 | 0,
32 | 0
33 | ]
34 | },
35 | "领取体力": {
36 | "recognition": "OCR",
37 | "roi": [
38 | 81,
39 | 137,
40 | 1198,
41 | 582
42 | ],
43 | "expected": "每日物资配给箱",
44 | "action": "Click",
45 | "next": [
46 | "购买体力",
47 | "售罄",
48 | "领取体力"
49 | ]
50 | },
51 | "打开供应站": {
52 | "recognition": "OCR",
53 | "roi": [
54 | 71,
55 | 325,
56 | 167,
57 | 131
58 | ],
59 | "expected": [
60 | "供应站"
61 | ],
62 | "action": "Click"
63 | },
64 | "打开供应站补给箱": {
65 | "recognition": "TemplateMatch",
66 | "roi": [
67 | 0,
68 | 293,
69 | 159,
70 | 157
71 | ],
72 | "template": [
73 | "体力/供应站补给箱_7_343_59_57__0_293_159_157.png"
74 | ],
75 | "action": "Click"
76 | },
77 | "购买体力": {
78 | "post_wait_freezes": 500,
79 | "recognition": "OCR",
80 | "roi": [
81 | 828,
82 | 476,
83 | 200,
84 | 150
85 | ],
86 | "expected": "购买",
87 | "action": "Click",
88 | "next": [
89 | "购买体力",
90 | "返回主菜单"
91 | ],
92 | "interrupt": [
93 | "关闭奖励通知"
94 | ]
95 | }
96 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Roguelike_-1.json:
--------------------------------------------------------------------------------
1 | {
2 | "增益试炼": {
3 | "timeout": 20000,
4 | "next": [
5 | "达到上限"
6 | ],
7 | "interrupt": [
8 | "确认选项",
9 | "在试炼中",
10 | "进入试炼战斗",
11 | "进入试炼",
12 | "进入增益试炼",
13 | "进入验证战场",
14 | "进入悖论迷宫_增益试炼",
15 | "打开战斗"
16 | ]
17 | },
18 | "进入悖论迷宫_增益试炼": {
19 | "recognition": "OCR",
20 | "expected": "迷宫",
21 | "roi": [
22 | 981,
23 | 120,
24 | 219,
25 | 101
26 | ],
27 | "action": "Click"
28 | },
29 | "进入验证战场": {
30 | "recognition": "OCR",
31 | "expected": "验证战场",
32 | "roi": [
33 | 21,
34 | 82,
35 | 203,
36 | 77
37 | ],
38 | "action": "Click"
39 | },
40 | "进入增益试炼": {
41 | "recognition": "OCR",
42 | "expected": "增益试炼",
43 | "roi": [
44 | 575,
45 | 320,
46 | 118,
47 | 53
48 | ],
49 | "action": "Click"
50 | },
51 | "进入试炼": {
52 | "recognition": "OCR",
53 | "roi": [
54 | 1011,
55 | 92,
56 | 244,
57 | 95
58 | ],
59 | "expected": "厄险",
60 | "action": "Click",
61 | "post_delay": 1000
62 | },
63 | "达到上限": {
64 | "recognition": "OCR",
65 | "expected": "上限",
66 | "post_delay": 500,
67 | "next": "返回主菜单"
68 | },
69 | "进入试炼战斗": {
70 | "recognition": "OCR",
71 | "roi": [
72 | 1105,
73 | 600,
74 | 151,
75 | 95
76 | ],
77 | "expected": "开始作战",
78 | "action": "Click",
79 | "post_delay": 1000
80 | },
81 | "在试炼中": {
82 | "recognition": "TemplateMatch",
83 | "roi": [
84 | 0,
85 | 0,
86 | 100,
87 | 100
88 | ],
89 | "template": "增益试炼/暂停.png",
90 | "next": "退出试炼",
91 | "interrupt": [
92 | "选择增益",
93 | "使用技能"
94 | ]
95 | },
96 | "选择增益": {
97 | "recognition": "OCR",
98 | "roi": [
99 | 528,
100 | 35,
101 | 231,
102 | 59
103 | ],
104 | "expected": "选择增益",
105 | "action": "Click",
106 | "target": [
107 | 640,
108 | 360,
109 | 1,
110 | 1
111 | ],
112 | "post_delay": 500,
113 | "next": [
114 | "确认增益"
115 | ]
116 | },
117 | "确认增益": {
118 | "recognition": "OCR",
119 | "roi": [
120 | 452,
121 | 577,
122 | 388,
123 | 136
124 | ],
125 | "expected": "确认",
126 | "action": "Click",
127 | "post_delay": 500,
128 | "next": [
129 | "不为单体增益",
130 | "丢弃单体增益"
131 | ]
132 | },
133 | "不为单体增益": {
134 | "recognition": "TemplateMatch",
135 | "roi": [
136 | 0,
137 | 0,
138 | 100,
139 | 100
140 | ],
141 | "template": "增益试炼/暂停.png"
142 | },
143 | "丢弃单体增益": {
144 | "recognition": "OCR",
145 | "roi": [
146 | 115,
147 | 598,
148 | 304,
149 | 91
150 | ],
151 | "expected": "丢弃",
152 | "action": "Click",
153 | "next": "确认丢弃"
154 | },
155 | "确认丢弃": {
156 | "recognition": "OCR",
157 | "roi": [
158 | 861,
159 | 462,
160 | 212,
161 | 96
162 | ],
163 | "expected": "确定",
164 | "action": "Click"
165 | },
166 | "使用技能": {
167 | "action": "Click",
168 | "target": [
169 | 1068,
170 | 354,
171 | 1,
172 | 1
173 | ]
174 | },
175 | "退出试炼": {
176 | "recognition": "OCR",
177 | "roi": [
178 | 452,
179 | 577,
180 | 388,
181 | 136
182 | ],
183 | "expected": "退出",
184 | "action": "Click",
185 | "post_delay": 2000,
186 | "next": "增益试炼"
187 | }
188 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Start_up.json:
--------------------------------------------------------------------------------
1 | {
2 | "启动": {
3 | "next": [
4 | "检查主界面"
5 | ],
6 | "interrupt": [
7 | "关闭公告",
8 | "关闭签到",
9 | "进入游戏",
10 | "关闭奖励通知",
11 | "账号等级提升",
12 | "意外点击_公告",
13 | "下载资源包",
14 | "启动应用"
15 | ]
16 | },
17 | "下载资源包": {
18 | "recognition": "OCR",
19 | "roi": [
20 | 820,
21 | 258,
22 | 401,
23 | 357
24 | ],
25 | "expected": "确定",
26 | "action": "Click"
27 | },
28 | "意外点击_公告": {
29 | "post_wait_freezes": 1000,
30 | "recognition": "TemplateMatch",
31 | "roi": [
32 | 970,
33 | 0,
34 | 180,
35 | 80
36 | ],
37 | "template": [
38 | "通用任务/主菜单_999_24_49_44__949_0_149_144.png"
39 | ],
40 | "action": "Click"
41 | },
42 | "检查主界面": {
43 | "post_delay": 1000,
44 | "recognition": "OCR",
45 | "roi": [
46 | 950,
47 | 260,
48 | 180,
49 | 130
50 | ],
51 | "expected": "^战斗$",
52 | "next": [
53 | "二次检测主界面",
54 | "启动"
55 | ]
56 | },
57 | "二次检测主界面": {
58 | "recognition": "OCR",
59 | "roi": [
60 | 950,
61 | 260,
62 | 180,
63 | 130
64 | ],
65 | "expected": "^战斗$"
66 | },
67 | "进入游戏": {
68 | "post_delay": 1000,
69 | "recognition": "OCR",
70 | "expected": "开始游戏",
71 | "roi": [
72 | 539,
73 | 569,
74 | 204,
75 | 137
76 | ],
77 | "action": "Click"
78 | },
79 | "启动应用": {
80 | "post_delay": 5000,
81 | "action": "StartApp",
82 | "package": "com.dragonli.projectsnow.lhm",
83 | "next": [
84 | "黑屏计数",
85 | "空任务"
86 | ]
87 | },
88 | "空任务": {},
89 | "黑屏计数": {
90 | "recognition": "ColorMatch",
91 | "upper": [
92 | 0,
93 | 0,
94 | 0
95 | ],
96 | "lower": [
97 | 0,
98 | 0,
99 | 0
100 | ],
101 | "connected": true,
102 | "count": 90000,
103 | "action": "Custom",
104 | "custom_action": "Count",
105 | "custom_action_param": {
106 | "self": "黑屏计数",
107 | "count": 0,
108 | "target_count": 12,
109 | "next_node": [
110 | "重启游戏"
111 | ]
112 | }
113 | },
114 | "关闭签到": {
115 | "post_delay": 1000,
116 | "threshold": 0.8,
117 | "recognition": "OCR",
118 | "roi": [
119 | 142,
120 | 88,
121 | 306,
122 | 232
123 | ],
124 | "expected": "刷新时间",
125 | "action": "Click",
126 | "target": [
127 | 1,
128 | 0,
129 | 0,
130 | 0
131 | ]
132 | },
133 | "关闭公告": {
134 | "post_delay": 1000,
135 | "threshold": 0.8,
136 | "recognition": "TemplateMatch",
137 | "roi": [
138 | 834,
139 | 40,
140 | 404,
141 | 266
142 | ],
143 | "template": [
144 | "启动/关闭通知_1203_52_31_33__1149_2_131_133.png",
145 | "启动/关闭公告1_1087_110_35_35__1037_60_135_135.png",
146 | "启动/关闭公告2_1080_142_31_29__1030_92_131_129.png",
147 | "启动/关闭公告3_1192_88_33_33__1142_38_133_133.png",
148 | "启动/1.png",
149 | "启动/2.png"
150 | ],
151 | "action": "Click"
152 | }
153 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Stop_App.json:
--------------------------------------------------------------------------------
1 | {
2 | "关闭游戏": {
3 | "action": "StopApp",
4 | "package": "com.dragonli.projectsnow.lhm"
5 | }
6 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/Upgrade_Firearms.json:
--------------------------------------------------------------------------------
1 | {
2 | "升级枪械": {
3 | "next": [
4 | "等级提升",
5 | "选择材料",
6 | "点击+",
7 | "升级",
8 | "排序3",
9 | "排序2",
10 | "排序",
11 | "打开背包"
12 | ],
13 | "interrupt": [
14 | "道具过期提示",
15 | "关闭奖励通知"
16 | ]
17 | },
18 | "升级": {
19 | "recognition": "OCR",
20 | "roi": [
21 | 46,
22 | 140,
23 | 136,
24 | 121
25 | ],
26 | "expected": "升级",
27 | "action": "Click",
28 | "next": [
29 | "升级枪械"
30 | ]
31 | },
32 | "点击+": {
33 | "recognition": "TemplateMatch",
34 | "roi": [
35 | 828,
36 | 386,
37 | 193,
38 | 189
39 | ],
40 | "template": [
41 | "升级/选择材料_790_464_93_89__740_414_193_189.png"
42 | ],
43 | "action": "Click",
44 | "next": [
45 | "升级枪械"
46 | ]
47 | },
48 | "选择材料": {
49 | "recognition": "TemplateMatch",
50 | "roi": [
51 | 0,
52 | 20,
53 | 387,
54 | 192
55 | ],
56 | "template": [
57 | "升级/白材料.png",
58 | "升级/绿材料.png",
59 | "升级/蓝材料.png",
60 | "升级/紫材料.png",
61 | "升级/绿材料_45_95_94_78__0_45_194_178.png",
62 | "升级/蓝材料_171_96_92_77__121_46_192_177.png",
63 | "升级/紫材料_293_95_96_79__243_45_196_179.png"
64 | ],
65 | "action": "Click",
66 | "next": [
67 | "检查升级",
68 | "选择材料"
69 | ]
70 | },
71 | "检查升级": {
72 | "recognition": "TemplateMatch",
73 | "roi": [
74 | 780,
75 | 387,
76 | 495,
77 | 186
78 | ],
79 | "template": [
80 | "升级/白材料.png",
81 | "升级/绿材料.png",
82 | "升级/蓝材料.png",
83 | "升级/紫材料.png"
84 | ],
85 | "next": [
86 | "点击升级",
87 | "选择材料"
88 | ]
89 | },
90 | "点击升级": {
91 | "post_delay": 2000,
92 | "recognition": "OCR",
93 | "roi": [
94 | 1040,
95 | 600,
96 | 189,
97 | 141
98 | ],
99 | "expected": "升级",
100 | "action": "Click",
101 | "next": [
102 | "点击升级",
103 | "升级枪械"
104 | ]
105 | },
106 | "等级提升": {
107 | "post_wait_freezes": 0,
108 | "recognition": "OCR",
109 | "roi": [
110 | 548,
111 | 175,
112 | 180,
113 | 124
114 | ],
115 | "action": "Click",
116 | "expected": "等级提升",
117 | "target": [
118 | 100,
119 | 100,
120 | 0,
121 | 0
122 | ],
123 | "next": [
124 | "返回主菜单"
125 | ]
126 | },
127 | "排序": {
128 | "recognition": "TemplateMatch",
129 | "roi": [
130 | 0,
131 | 616,
132 | 175,
133 | 147
134 | ],
135 | "template": [
136 | "升级/排序_28_656_75_47__0_573_175_147.png"
137 | ],
138 | "action": "Click",
139 | "next": [
140 | "升级枪械"
141 | ]
142 | },
143 | "排序2": {
144 | "recognition": "TemplateMatch",
145 | "roi": [
146 | 275,
147 | 153,
148 | 230,
149 | 130
150 | ],
151 | "template": [
152 | "升级/排序2_325_203_130_30__275_153_230_130.png"
153 | ],
154 | "action": "Click",
155 | "next": [
156 | "升级枪械"
157 | ]
158 | },
159 | "排序3": {
160 | "recognition": "TemplateMatch",
161 | "roi": [
162 | 419,
163 | 203,
164 | 36,
165 | 30
166 | ],
167 | "template": "升级/排序倒序_419_203_36_30__369_153_136_130.png",
168 | "action": "Click",
169 | "next": [
170 | "排序3",
171 | "确定排序"
172 | ]
173 | },
174 | "确定排序": {
175 | "post_delay": 1000,
176 | "recognition": "OCR",
177 | "roi": [
178 | 881,
179 | 544,
180 | 62,
181 | 42
182 | ],
183 | "expected": "确定",
184 | "action": "Click",
185 | "next": [
186 | "确定排序",
187 | "选择枪械"
188 | ]
189 | },
190 | "选择枪械": {
191 | "post_wait_freezes": 200,
192 | "action": "Click",
193 | "target": [
194 | 340,
195 | 143,
196 | 0,
197 | 0
198 | ],
199 | "next": [
200 | "枪械培养",
201 | "选择枪械"
202 | ]
203 | },
204 | "枪械培养": {
205 | "recognition": "OCR",
206 | "roi": [
207 | 620,
208 | 500,
209 | 122,
210 | 72
211 | ],
212 | "expected": "枪械培养",
213 | "action": "Click",
214 | "next": [
215 | "枪械培养",
216 | "升级枪械"
217 | ]
218 | },
219 | "打开背包": {
220 | "recognition": "OCR",
221 | "roi": [
222 | 1021,
223 | 625,
224 | 144,
225 | 119
226 | ],
227 | "expected": "背包",
228 | "action": "Click",
229 | "next": [
230 | "升级枪械"
231 | ]
232 | }
233 | }
--------------------------------------------------------------------------------
/assets/resource/base/pipeline/soothe.json:
--------------------------------------------------------------------------------
1 | {
2 | "疗愈": {
3 | "on_error": [
4 | "疗愈"
5 | ],
6 | "action": "Swipe",
7 | "begin": [
8 | 0,
9 | 200,
10 | 0,
11 | 0
12 | ],
13 | "end": [
14 | 0,
15 | 400,
16 | 0,
17 | 0
18 | ],
19 | "next": [
20 | "清理红点",
21 | "清理黄点",
22 | "清理黑点",
23 | "再来一次"
24 | ],
25 | "interrupt": [
26 | "未找到目标"
27 | ]
28 | },
29 | "未找到目标": {
30 | "action": "Swipe",
31 | "begin": [
32 | 100,
33 | 200,
34 | 0,
35 | 0
36 | ],
37 | "end": [
38 | 0,
39 | 400,
40 | 0,
41 | 0
42 | ]
43 | },
44 | "意外点击_黑点": {
45 | "recognition": "ColorMatch",
46 | "upper": [
47 | 123,
48 | 111,
49 | 106
50 | ],
51 | "lower": [
52 | 120,
53 | 108,
54 | 101
55 | ],
56 | "roi": [
57 | 43,
58 | 597,
59 | 221,
60 | 86
61 | ],
62 | "connected": true,
63 | "count": 1000,
64 | "next": [
65 | "疗愈"
66 | ]
67 | },
68 | "再来一次": {
69 | "post_delay": 1000,
70 | "recognition": "OCR",
71 | "roi": [
72 | 1026,
73 | 500,
74 | 222,
75 | 146
76 | ],
77 | "expected": "再来一次",
78 | "action": "Click",
79 | "next": [
80 | "疗愈"
81 | ]
82 | },
83 | "清理红点": {
84 | "recognition": "ColorMatch",
85 | "upper": [
86 | 223,
87 | 76,
88 | 96
89 | ],
90 | "lower": [
91 | 215,
92 | 41,
93 | 71
94 | ],
95 | "connected": true,
96 | "count": 5,
97 | "action": "Click",
98 | "next": [
99 | "意外点击_黑点",
100 | "切换锤",
101 | "开始疗愈_游戏内",
102 | "疗愈"
103 | ]
104 | },
105 | "切换锤": {
106 | "recognition": "TemplateMatch",
107 | "roi": [
108 | 6,
109 | 561,
110 | 163,
111 | 159
112 | ],
113 | "template": [
114 | "疗愈/切换锤_56_611_63_59__6_561_163_159.png"
115 | ],
116 | "action": "Click",
117 | "next": [
118 | "清理红点"
119 | ]
120 | },
121 | "清理黄点": {
122 | "threshold": 0.8,
123 | "green_mask": true,
124 | "recognition": "TemplateMatch",
125 | "template": [
126 | "疗愈/黄点_902_392_31_32__852_342_131_132.png"
127 | ],
128 | "action": "Click",
129 | "next": [
130 | "意外点击_黑点",
131 | "切换捏",
132 | "开始疗愈_游戏内",
133 | "疗愈"
134 | ]
135 | },
136 | "切换捏": {
137 | "recognition": "TemplateMatch",
138 | "roi": [
139 | 141,
140 | 561,
141 | 162,
142 | 157
143 | ],
144 | "template": [
145 | "疗愈/切换捏_191_611_62_57__141_561_162_157.png"
146 | ],
147 | "action": "Click",
148 | "next": [
149 | "清理黄点"
150 | ]
151 | },
152 | "清理黑点": {
153 | "threshold": 0.85,
154 | "green_mask": true,
155 | "recognition": "TemplateMatch",
156 | "template": [
157 | "疗愈/黑点_824_384_34_32__774_334_134_132.png"
158 | ],
159 | "action": "Click",
160 | "next": [
161 | "开始疗愈_游戏内",
162 | "疗愈"
163 | ]
164 | },
165 | "开始疗愈_游戏内": {
166 | "post_delay": 10000,
167 | "recognition": "TemplateMatch",
168 | "template": [
169 | "疗愈/开始疗愈_1130_626_70_48__1080_572_170_148.png"
170 | ],
171 | "roi": [
172 | 1080,
173 | 572,
174 | 170,
175 | 148
176 | ],
177 | "action": "Click",
178 | "next": [
179 | "疗愈"
180 | ]
181 | }
182 | }
--------------------------------------------------------------------------------
/cliff.toml:
--------------------------------------------------------------------------------
1 | [remote.github]
2 | owner = "overflow65537"
3 | repo = "MAA_SnowBreak"
4 | [changelog]
5 | # 尾部
6 | footer = """
7 |
8 | [已有 Mirror酱 CDK?点击前往高速下载](https://mirrorchyan.com/zh/projects?rid=MAA_SnowBreak)
9 |
10 | """
11 |
12 | [git]
13 | # parse the commits based on https://www.conventionalcommits.org
14 | conventional_commits = true
15 | # filter out the commits that are not conventional
16 | filter_unconventional = true
17 | # process each line of a commit as an individual commit
18 | split_commits = false
19 | # regex for preprocessing the commit messages
20 |
21 | # regex for parsing and grouping commits
22 | commit_parsers = [
23 | { message = "^feat", group = "新增 | Feat" },
24 | { message = "^fix", group = "修复 | Fix" },
25 | { message = "^docs", group = "文档 | Docs" },
26 | { message = "^perf", group = "优化 | Perf" },
27 | { message = "^refactor\\(clippy\\)", skip = true },
28 | { message = "^refactor", group = "重构 | Refactor" },
29 | { message = "^style", group = "样式 | Style" },
30 | { message = "^test", group = "测试 | Test" },
31 | { message = "^chore\\(release\\): prepare for", skip = true },
32 | { message = "^chore\\(deps.*\\)", skip = true },
33 | { message = "^chore\\(pr\\)", skip = true },
34 | { message = "^chore\\(pull\\)", skip = true },
35 | { message = "^chore\\(npm\\).*yarn\\.lock", skip = true },
36 | { message = "^chore", group = "杂项 | Chore" },
37 | { message = "^other", group = "其它 | Other" },
38 | { message = "^ci", group = "集成 | CI" },
39 | ]
40 | # protect breaking changes from being skipped due to matching a skipping commit_parser
41 | protect_breaking_commits = false
42 | # filter out the commits that are not matched by commit parsers
43 | filter_commits = false
44 | # regex for matching git tags
45 | tag_pattern = "v[0-9].*"
46 | # regex for skipping tags
47 | skip_tags = "beta|alpha"
48 | # regex for ignoring tags
49 | ignore_tags = "rc"
50 | # sort the tags topologically
51 | topo_order = false
52 | # sort the commits inside sections by oldest/newest order
53 | sort_commits = "newest"
--------------------------------------------------------------------------------
/configure.py:
--------------------------------------------------------------------------------
1 | from pathlib import Path
2 |
3 | import shutil
4 |
5 | assets_dir = Path(__file__).parent / "assets"
6 |
7 |
8 | def configure_ocr_model():
9 | if not (assets_dir / "MaaCommonAssets" / "OCR").exists():
10 | print("Please clone this repository completely, don’t miss \"--recursive\", and don’t download the zip package!")
11 | print("请完整克隆本仓库,不要漏掉 \"--recursive\",也不要下载 zip 包!")
12 | exit(1)
13 |
14 | shutil.copytree(
15 | assets_dir / "MaaCommonAssets" / "OCR" / "ppocr_v4" / "zh_cn",
16 | assets_dir / "resource" / "base" / "model" / "ocr",
17 | dirs_exist_ok=True,
18 | )
19 |
20 |
21 | if __name__ == "__main__":
22 | configure_ocr_model()
23 |
24 | print("OCR model configured.")
--------------------------------------------------------------------------------
/deps/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/docs/物品列表.md:
--------------------------------------------------------------------------------
1 | ### 1.最便宜的
2 | - 新手战斗记录
3 | - 初级职级认证
4 | - 合成颗粒
5 | #### 以上三种随机选择,购买一个后退出任务
6 | ### 2.辅助武器
7 | #### 彩虹打火机 ★★★★
8 | - 攻击力 27- /// 攻击力百分比 8%-40%
9 | - 支援技被使用后,场上队员获得武器拥有者攻击力13.2%/15.4%/17.6%/19.8%/22%的额外攻击力,持续15秒
10 | #### 深海呼唤 ★★★★
11 | - 攻击力 27- /// 攻击力百分比 8%-40%
12 | - 支援技被使用后,场上队员获得武器拥有者攻击力13.2%/15.4%/17.6%/19.8%/22%的额外攻击力,持续15秒
13 | #### 草莓蛋糕 ★★★★
14 | - 攻击力 27- /// 攻击力百分比 8%-40%
15 | - 支援技被使用后,场上队员获得武器拥有者攻击力13.2%/15.4%/17.6%/19.8%/22%的额外攻击力,持续15秒
16 | #### 军舰鸟 ★★★★
17 | - 攻击力 27- /// 攻击力百分比 8%-40%
18 | - 支援技被使用后,场上队员获得武器拥有者攻击力13.2%/15.4%/17.6%/19.8%/22%的额外攻击力,持续15秒
19 | #### 青金石 ★★★★
20 | - 攻击力 27- /// 攻击力百分比 8%-40%
21 | - 支援技被使用后,场上队员获得武器拥有者攻击力13.2%/15.4%/17.6%/19.8%/22%的额外攻击力,持续15秒
22 | #### 楼道怪猫 ★★★★
23 | - 攻击力 27- /// 同调指数 94-468
24 | - 全队爆发能量获取率提升30%/35%/40%/45%/50%
25 |
--------------------------------------------------------------------------------
/install.py:
--------------------------------------------------------------------------------
1 | from pathlib import Path
2 | import PyInstaller.__main__
3 | import site
4 | import os
5 |
6 | import shutil
7 | import sys
8 | import json
9 |
10 | from configure import configure_ocr_model
11 |
12 |
13 | working_dir = Path(__file__).parent
14 | install_path = working_dir / Path("maapicli")
15 | version = len(sys.argv) > 1 and sys.argv[1] or "v0.0.1"
16 |
17 |
18 | def bulid():
19 | # 获取 site-packages 目录列表
20 | site_packages_paths = site.getsitepackages()
21 |
22 | # 查找包含 MaaAgentBinary 的路径
23 | maa_bin_path2 = None
24 | for path in site_packages_paths:
25 | potential_path = os.path.join(path, "MaaAgentBinary")
26 | if os.path.exists(potential_path):
27 | maa_bin_path2 = potential_path
28 | break
29 |
30 | if maa_bin_path2 is None:
31 | raise FileNotFoundError("not found MaaAgentBinary")
32 |
33 | # 构建 --add-data 参数
34 | add_data_param2 = f"{maa_bin_path2}{os.pathsep}MaaAgentBinary"
35 |
36 | command = [
37 | "maapicli.py",
38 | "--name=maapicli",
39 | f"--add-data={add_data_param2}",
40 | f"--distpath={working_dir}",
41 | "--clean",
42 | ]
43 | PyInstaller.__main__.run(command)
44 |
45 | maa_bin_path = None
46 | for path in site_packages_paths:
47 | potential_path = os.path.join(path, "maa", "bin")
48 | if os.path.exists(potential_path):
49 | maa_bin_path = potential_path
50 | break
51 |
52 | if maa_bin_path is None:
53 | raise FileNotFoundError("not found maa/bin")
54 | shutil.copytree(
55 | maa_bin_path,
56 | install_path,
57 | dirs_exist_ok=True,
58 | )
59 |
60 |
61 | def install_resource():
62 |
63 | configure_ocr_model()
64 |
65 | shutil.copytree(
66 | working_dir / "assets" ,
67 | install_path ,
68 | dirs_exist_ok=True,
69 | )
70 | shutil.rmtree(install_path / "MaaCommonAssets")
71 | #删除指定文件,而非文件夹
72 | try:
73 | os.remove(install_path / "custom" / "main.py")
74 | except FileNotFoundError:
75 | pass
76 | try:
77 | os.remove(install_path / "custom" / "Agent_file.py")
78 | except FileNotFoundError:
79 | pass
80 |
81 | with open(install_path / "interface.json", "r", encoding="utf-8") as f:
82 | interface = json.load(f)
83 |
84 | interface["version"] = version
85 |
86 | with open(install_path / "interface.json", "w", encoding="utf-8") as f:
87 | json.dump(interface, f, ensure_ascii=False, indent=4)
88 |
89 |
90 | def install_chores():
91 | shutil.copy2(
92 | working_dir / "README.md",
93 | install_path,
94 | )
95 | shutil.copy2(
96 | working_dir / "LICENSE",
97 | install_path,
98 | )
99 |
100 |
101 | if __name__ == "__main__":
102 | bulid()
103 | install_resource()
104 | install_chores()
--------------------------------------------------------------------------------
/install_agent.py:
--------------------------------------------------------------------------------
1 | from pathlib import Path
2 |
3 | import PyInstaller.__main__
4 |
5 | import shutil
6 | import sys
7 | import json
8 |
9 | from configure import configure_ocr_model
10 |
11 |
12 | working_dir = Path(__file__).parent
13 | install_path = working_dir / Path("install")
14 | version = len(sys.argv) > 1 and sys.argv[1] or "v0.0.1"
15 |
16 |
17 | def install_deps():
18 | if not (working_dir / "deps" / "bin").exists():
19 | print('Please download the MaaFramework to "deps" first.')
20 | print('请先下载 MaaFramework 到 "deps"。')
21 | sys.exit(1)
22 |
23 | shutil.copytree(
24 | working_dir / "deps" / "bin",
25 | install_path,
26 | ignore=shutil.ignore_patterns(
27 | "*MaaDbgControlUnit*",
28 | "*MaaThriftControlUnit*",
29 | "*MaaRpc*",
30 | "*MaaHttp*",
31 | ),
32 | dirs_exist_ok=True,
33 | )
34 | shutil.copytree(
35 | working_dir / "deps" / "share" / "MaaAgentBinary",
36 | install_path / "MaaAgentBinary",
37 | dirs_exist_ok=True,
38 | )
39 |
40 |
41 | def install_resource():
42 |
43 | configure_ocr_model()
44 |
45 | shutil.copytree(
46 | working_dir / "assets" / "resource",
47 | install_path / "resource",
48 | dirs_exist_ok=True,
49 | )
50 | shutil.copy2(
51 | working_dir / "assets" / "interface.json",
52 | install_path,
53 | )
54 |
55 | with open(install_path / "interface.json", "r", encoding="utf-8") as f:
56 | interface: dict = json.load(f)
57 |
58 | interface["version"] = version
59 |
60 | #添加agent的配置
61 | interface["agent"] = interface.get("agent", {})#如果没有agent,则创建一个
62 | if sys.platform == "win32":
63 | interface["agent"]["child_exec"] = "{PROJECT_DIR}/agent/agent.exe"
64 | elif sys.platform == "darwin" or "linux":
65 | interface["agent"]["child_exec"] = "{PROJECT_DIR}/agent/agent"#linux和macos的可执行文件均为agent
66 | interface["agent"]["child_args"] = interface.get("agent", {}).get(
67 | "child_args", ["{PROJECT_DIR}"]
68 | ) # {PROJECT_DIR}为maafw的dll/so文件路径,通过参数传递给agent
69 | # 如果有其他的参数,需要在{PROJECT_DIR}的前面添加,需要保证{PROJECT_DIR}为最后一位
70 |
71 | with open(install_path / "interface.json", "w", encoding="utf-8") as f:
72 | json.dump(interface, f, ensure_ascii=False, indent=4)
73 |
74 |
75 | def install_chores():
76 | shutil.copy2(
77 | working_dir / "README.md",
78 | install_path,
79 | )
80 | shutil.copy2(
81 | working_dir / "LICENSE",
82 | install_path,
83 | )
84 |
85 |
86 | def install_agent():
87 | # 名字为agent
88 | command = [
89 | str(working_dir /"assets"/ "agent" / "main.py"),
90 | "--name=agent",
91 | "--clean",
92 | "--noconsole",
93 | ]
94 |
95 | PyInstaller.__main__.run(command)
96 | print(working_dir / "dist" / "agent")
97 | shutil.copytree(
98 | working_dir / "dist" / "agent",
99 | install_path / "agent",
100 | dirs_exist_ok=True,
101 | )
102 |
103 |
104 | if __name__ == "__main__":
105 | install_deps()
106 | install_resource()
107 | install_chores()
108 | install_agent()
109 |
110 | print(f"Install to {install_path} successfully.")
111 |
--------------------------------------------------------------------------------
/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/overflow65537/MAA_SnowBreak/706ba4d5de8ba76223b018858b5da0b16aaeca33/logo.png
--------------------------------------------------------------------------------
/maapicli.py:
--------------------------------------------------------------------------------
1 | import os
2 | if not os.path.exists("run_cli.py"):
3 | os.environ["MAAFW_BINARY_PATH"] = os.getcwd()
4 |
5 | from assets.custom.action.Fishing import Fishing
6 | from assets.custom.action.ShotTarget import ShotTarget
7 | from assets.custom.action.ScreenShot import ScreenShot
8 | from assets.custom.action.ShotSelf import ShotSelf
9 | from assets.custom.action.StoryRogue import StoryRogue
10 | from assets.custom.action.Count import Count
11 |
12 | from maa.toolkit import Toolkit
13 |
14 | import sys
15 |
16 |
17 | print("如无必要,请使用MFW.exe运行")
18 | print("if not necessary, please use MFW.exe to run")
19 |
20 | def main():
21 | # 注册自定义动作
22 | Toolkit.pi_register_custom_action("Fishing", Fishing())
23 | Toolkit.pi_register_custom_action("ShotTarget", ShotTarget())
24 | Toolkit.pi_register_custom_action("ScreenShot", ScreenShot())
25 | Toolkit.pi_register_custom_action("ShotSelf", ShotSelf())
26 | Toolkit.pi_register_custom_action("StoryRogue", StoryRogue())
27 | Toolkit.pi_register_custom_action("Count", Count())
28 |
29 | # 注册自定义识别
30 |
31 | directly = "-d" in sys.argv
32 | Toolkit.pi_run_cli("./", "./", directly)
33 |
34 |
35 | if __name__ == "__main__":
36 | main()
37 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | maafw
2 |
--------------------------------------------------------------------------------