├── .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 | LOGO 5 |

6 | 7 |
8 | 9 | # MAA_SnowBreak 10 | 11 | 基于全新架构的 尘白禁区 小助手。图像技术 + 模拟控制,解放双手! 12 | 由 [MaaFramework](https://github.com/MaaXYZ/MaaFramework) 强力驱动! 13 | 14 |
15 | 16 |

17 | license 18 | Python 19 | platform 20 | commit 21 | mirrorchyan_rid 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 | Contributors to MAA_SnowBreak 250 | 251 | 252 | -------------------------------------------------------------------------------- /assets/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | LOGO 5 |

6 | 7 |
8 | 9 | # MAA_SnowBreak 10 | 11 | 基于全新架构的 尘白禁区 小助手。图像技术 + 模拟控制,解放双手! 12 | 由 [MaaFramework](https://github.com/MaaXYZ/MaaFramework) 强力驱动! 13 | 14 |
15 | 16 |

17 | license 18 | Python 19 | platform 20 | commit 21 | mirrorchyan_rid 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 | Contributors to MAA_SnowBreak 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 | --------------------------------------------------------------------------------