diff --git a/.github/workflows/dev-build-mac.yml b/.github/workflows/dev-build-mac.yml new file mode 100644 index 0000000000..c906c6c993 --- /dev/null +++ b/.github/workflows/dev-build-mac.yml @@ -0,0 +1,55 @@ +name: dev-build-mac + +on: + push: + branches-ignore: + - master + paths: + - 'src/MeoAssistant/**' + - 'src/MeoAsstGui/**' + - 'src/MeoAsstMac/**' + - '3rdparty/**' + - 'include/**' + - 'resource/**' + - CMakeLists.txt + pull_request: + branches: + - dev + paths: + - 'src/MeoAssistant/**' + - 'src/MeoAsstGui/**' + - 'src/MeoAsstMac/**' + - '3rdparty/**' + - 'include/**' + - 'resource/**' + - CMakeLists.txt + +jobs: + macos-latest: + runs-on: macos-12 + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Cache Homebrew + uses: actions/cache@v3 + with: + path: $(brew --prefix) + key: ${{ runner.os }}-homebrew-${{ hashFiles('.config/brew/Brewfile') }} + - name: Install Dependencies + run: | + brew update --preinstall + brew install ninja range-v3 + - name: Configure MeoAssistant + run: | + mkdir build && cd build + cmake .. -GNinja -DBUILD_XCFRAMEWORK=ON -DBUILD_UNIVERSAL=ON + - name: Build libMeoAssistant + run: cmake --build build + - name: Build MeoAsstMac + working-directory: src/MeoAsstMac + run: xcodebuild ARCHS="arm64 x86_64" CODE_SIGN_IDENTITY="-" DEVELOPMENT_TEAM="-" ONLY_ACTIVE_ARCH=NO -derivedDataPath DerivedData -project MeoAsstMac.xcodeproj -scheme MeoAsstMac + - uses: actions/upload-artifact@v3 + with: + name: MAA-macos + path: src/MeoAsstMac/DerivedData/Build/Products/Debug diff --git a/.github/workflows/dev-build.yml b/.github/workflows/dev-build-win.yml similarity index 87% rename from .github/workflows/dev-build.yml rename to .github/workflows/dev-build-win.yml index 55ee73c18b..f057e92f16 100644 --- a/.github/workflows/dev-build.yml +++ b/.github/workflows/dev-build-win.yml @@ -9,12 +9,12 @@ # # - To trigger manual generation invoke: # -# nuke --generate-configuration GitHubActions_dev-build --host GitHubActions +# nuke --generate-configuration GitHubActions_dev-build-win --host GitHubActions # # # ------------------------------------------------------------------------------ -name: dev-build +name: dev-build-win on: push: @@ -55,9 +55,9 @@ jobs: name: windows-latest runs-on: windows-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Cache .nuke/temp, ~/.nuget/packages - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: | .nuke/temp @@ -69,7 +69,7 @@ jobs: Reason: ${{ github.event.inputs.Reason }} ReleaseSimulation: ${{ github.event.inputs.ReleaseSimulation }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/upload-artifact@v1 + - uses: actions/upload-artifact@v3 with: - name: artifacts + name: MAA-win-x64 path: artifacts diff --git a/.github/workflows/release-maa-mac.yml b/.github/workflows/release-maa-mac.yml new file mode 100644 index 0000000000..7504760c36 --- /dev/null +++ b/.github/workflows/release-maa-mac.yml @@ -0,0 +1,90 @@ +name: release-maa-mac + +on: + release: + types: [published] + +jobs: + macos-latest: + name: macos-latest + runs-on: macos-12 + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: 'Install Developer ID Certificate' + uses: apple-actions/import-codesign-certs@v1 + with: + p12-file-base64: ${{ secrets.HGUANDL_SIGN_CERT_P12 }} + p12-password: ${{ secrets.HGUANDL_SIGN_CERT_PASSWD }} + - name: Cache Homebrew + uses: actions/cache@v3 + with: + path: $(brew --prefix) + key: ${{ runner.os }}-homebrew-${{ hashFiles('.config/brew/Brewfile') }} + - name: Install Dependencies + run: | + brew update --preinstall + brew install ninja range-v3 create-dmg + - name: Configure MeoAssistant + run: | + mkdir build && cd build + cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DBUILD_XCFRAMEWORK=ON -DBUILD_UNIVERSAL=ON + - name: Build libMeoAssistant + run: cmake --build build + - name: Build MeoAsstMac + working-directory: src/MeoAsstMac + run: xcodebuild -project MeoAsstMac.xcodeproj -scheme MeoAsstMac archive -archivePath MeoAsstMac.xcarchive -configuration Release + - name: Export MeoAsstMac + working-directory: src/MeoAsstMac + run: xcodebuild -exportArchive -archivePath MeoAsstMac.xcarchive -exportOptionsPlist ExportOptions.plist -exportPath Export + - name: Create disk image + working-directory: src/MeoAsstMac + run: create-dmg --background dmg-bkg.png --window-size 500 300 --icon-size 128 --icon MeoAsstMac.app 0 120 --hide-extension MeoAsstMac.app --app-drop-link 270 120 MeoAsstMac.dmg Export/MeoAsstMac.app + - name: Archive debug symbols + working-directory: src/MeoAsstMac/MeoAsstMac.xcarchive/dSYMs + run: ditto -c -k --keepParent MeoAsstMac.app.dSYM MeoAsstMac.app.dSYM.zip + - name: Upload products + uses: actions/upload-artifact@v3 + with: + name: MAA-macos + path: | + src/MeoAsstMac/MeoAsstMac.dmg + src/MeoAsstMac/MeoAsstMac.xcarchive/dSYMs/MeoAsstMac.app.dSYM.zip + + macos-release: + name: macos-release + runs-on: macos-12 + needs: [macos-latest] + steps: + - name: 'Setup tag information' + run: | + GIT_TAG=${GITHUB_REF#refs/*/} + echo "GIT_TAG=${GIT_TAG}" >> $GITHUB_ENV + echo "APP_DMG=MAA-${GIT_TAG}-macos.dmg" >> $GITHUB_ENV + echo "APP_SYM=MAAComponent-DebugSymbol-${GIT_TAG}-macos.zip" >> $GITHUB_ENV + - name: Download artifacts + uses: actions/download-artifact@v3 + with: + name: MAA-macos + - name: 'Verify image' + run: | + mv MeoAsstMac.dmg $APP_DMG + mv MeoAsstMac.xcarchive/dSYMs/MeoAsstMac.app.dSYM.zip $APP_SYM + hdiutil verify $APP_DMG + - name: 'Notarize image' + env: + NOTARY_USER: ${{ secrets.HGUANDL_NOTARY_AAPL_ID }} + NOTARY_PASSWD: ${{ secrets.HGUANDL_NOTARY_PASSWD }} + NOTARY_TEAM: ${{ secrets.HGUANDL_SIGN_IDENTITY }} + run: | + xcrun notarytool submit --apple-id "$NOTARY_USER" --password "$NOTARY_PASSWD" --team-id "$NOTARY_TEAM" --wait $APP_DMG + xcrun stapler staple $APP_DMG + - name: Upload image to release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: 'MAA*${{ env.GIT_TAG }}-macos*' + file_glob: true + tag: ${{ env.GIT_TAG }} + overwrite: true diff --git a/.github/workflows/release-maa.yml b/.github/workflows/release-maa-win.yml similarity index 84% rename from .github/workflows/release-maa.yml rename to .github/workflows/release-maa-win.yml index 68563e702c..6c83d07162 100644 --- a/.github/workflows/release-maa.yml +++ b/.github/workflows/release-maa-win.yml @@ -9,12 +9,12 @@ # # - To trigger manual generation invoke: # -# nuke --generate-configuration GitHubActions_release-maa --host GitHubActions +# nuke --generate-configuration GitHubActions_release-maa-win --host GitHubActions # # # ------------------------------------------------------------------------------ -name: release-maa +name: release-maa-win on: push: @@ -26,9 +26,9 @@ jobs: name: windows-latest runs-on: windows-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Cache .nuke/temp, ~/.nuget/packages - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: | .nuke/temp @@ -39,7 +39,7 @@ jobs: env: PUBLISH_GH_PAT: ${{ secrets.PUBLISH_GH_PAT }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/upload-artifact@v1 + - uses: actions/upload-artifact@v3 with: - name: artifacts + name: MAA-win-x64 path: artifacts diff --git a/.gitmodules b/.gitmodules index 358c602a99..70db001202 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,4 +3,7 @@ url = https://github.com/MaaAssistantArknights/MaaTestSet.git [submodule "3rdparty/VisionOCR"] path = 3rdparty/VisionOCR - url = https://github.com/hguandl/VisionOCR.git + url = https://github.com/MaaAssistantArknights/VisionOCR.git +[submodule "src/MeoAsstMac"] + path = src/MeoAsstMac + url = https://github.com/MaaAssistantArknights/MeoAsstMac.git diff --git a/3rdparty/VisionOCR b/3rdparty/VisionOCR index cd18ce5e00..67991c4c0c 160000 --- a/3rdparty/VisionOCR +++ b/3rdparty/VisionOCR @@ -1 +1 @@ -Subproject commit cd18ce5e00e40436b5b207beab4ff0cdb8e7b74e +Subproject commit 67991c4c0c191f3e74bcdcbc0537d730ef9f028f diff --git a/CMakeLists.txt b/CMakeLists.txt index 992d9b3883..d249113765 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,12 @@ if (NOT CMAKE_BUILD_TYPE) endif () option(BUILD_TEST "build a demo" OFF) +option(BUILD_XCFRAMEWORK "build xcframework for macOS app" OFF) +option(BUILD_UNIVERSAL "build both arm64 and x86_64 on macOS" OFF) + +if (BUILD_UNIVERSAL) + set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64") +endif () set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -42,10 +48,6 @@ if (MSVC) target_link_libraries(MeoAssistant ws2_32 ${OpenCV} ${PaddleOCR_LIB} ${ZLIB}) target_include_directories(MeoAssistant PRIVATE 3rdparty/include) else () - find_package(OpenCV REQUIRED) - target_include_directories(MeoAssistant PRIVATE ${OpenCV_INCLUDE_DIRS}) - target_link_libraries(MeoAssistant ${OpenCV_LIBS}) - find_package(ZLIB REQUIRED) target_include_directories(MeoAssistant PRIVATE ${ZLIB_INCLUDE_DIRS}) target_link_libraries(MeoAssistant ${ZLIB_LIBRARY}) @@ -59,11 +61,13 @@ else () add_subdirectory(3rdparty/VisionOCR) target_link_libraries(MeoAssistant vnocr - "-framework CoreFoundation" - "-framework CoreGraphics" - "-framework Vision" + "-framework Accelerate" ) else () + find_package(OpenCV REQUIRED) + target_include_directories(MeoAssistant PRIVATE ${OpenCV_INCLUDE_DIRS}) + target_link_libraries(MeoAssistant ${OpenCV_LIBS}) + target_link_libraries(MeoAssistant ppocr paddle_inference protobuf cryptopp gflags glog utf8proc xxhash iomp5 mkldnn mklml_intel) endif (APPLE) @@ -74,3 +78,15 @@ if (BUILD_TEST) add_executable(test tools/TestCaller/main.cpp) target_link_libraries(test MeoAssistant) endif (BUILD_TEST) + +if (BUILD_XCFRAMEWORK) + add_custom_command(OUTPUT MeoAssistant.xcframework + COMMAND rm -rf MeoAssistant.xcframework + COMMAND xcodebuild -create-xcframework -library libMeoAssistant.dylib -headers ${PROJECT_SOURCE_DIR}/include -output MeoAssistant.xcframework + DEPENDS MeoAssistant + ) + + add_custom_target(MaaXCFramework ALL + DEPENDS MeoAssistant MeoAssistant.xcframework + ) +endif (BUILD_XCFRAMEWORK) diff --git a/README.md b/README.md index c78918ded6..26139ce993 100644 --- a/README.md +++ b/README.md @@ -48,12 +48,6 @@ MAA 的意思是 MAA Assistant Arknights ## 下载地址 -***第一次使用请下载 `MaaBundle-vX.Y.Z.zip`*** - -***第一次使用请下载 `MaaBundle-vX.Y.Z.zip`*** - -***第一次使用请下载 `MaaBundle-vX.Y.Z.zip`*** - [稳定版](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases/latest) [测试版](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases) diff --git a/README_en-US.md b/README_en-US.md index fcbab96a5b..051498d5c3 100644 --- a/README_en-US.md +++ b/README_en-US.md @@ -48,12 +48,6 @@ Talk is cheap. Show me the pictures! ## Download -***Please download `MaaBundle-vX.Y.Z.zip` for first time use*** - -***Please download `MaaBundle-vX.Y.Z.zip` for first time use*** - -***Please download `MaaBundle-vX.Y.Z.zip` for first time use*** - [Stable](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases/latest) [Development](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases) @@ -150,7 +144,7 @@ Please refer to [Linux Tutorial](docs/en-us/2.1-LINUX_TUTORIAL.md) - [C interface](include/AsstCaller.h): [Integration Example](tools/TestCaller/main.cpp) - [Python interface](src/Python/asst.py): [Integration Example](src/Python/sample.py) -- [Golang interface](src/Golang/MaaAssistantArknights/): [Integration Example](src/Golang/MaaAssistantArknights/maa/maa.go) +- [Golang interface](src/Golang/MaaAssistantArknights/): [Integration Example](src/Golang/MaaAssistantArknights/maa/maa.go) - [Dart interface](src/dart/) - [Java interface](src/Java/Maaj): [Integration Example](src/Java/Maaj/src/main/java/com/iguigui/maaj/MaaJavaSample.java) - [Rust interface](src/Rust/src/maa_sys/): [HTTP api](src/Rust) diff --git a/README_ja-JP.md b/README_ja-JP.md index 17b62a8843..2447bba55a 100644 --- a/README_ja-JP.md +++ b/README_ja-JP.md @@ -48,12 +48,6 @@ UIを見れば使い方もすぐ分かる! ## ダウンロードリンク -***初めて使用する場合 `MaaBundle-vX.Y.Z.zip` をダウンロードしてください*** - -***初めて使用する場合 `MaaBundle-vX.Y.Z.zip` をダウンロードしてください*** - -***初めて使用する場合 `MaaBundle-vX.Y.Z.zip` をダウンロードしてください*** - [安定版](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases/latest) [ベータ版](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases) diff --git a/README_zh-TW.md b/README_zh-TW.md index deb849d4a0..0e56433c28 100644 --- a/README_zh-TW.md +++ b/README_zh-TW.md @@ -48,12 +48,6 @@ MAA 的意思是 MAA Assistant Arknights ## 下載連結 -***第一次使用請下載 `MaaBundle-vX.Y.Z.zip`*** - -***第一次使用請下載 `MaaBundle-vX.Y.Z.zip`*** - -***第一次使用請下載 `MaaBundle-vX.Y.Z.zip`*** - [穩定版](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases/latest) [測試版](https://github.com/MaaAssistantArknights/MaaAssistantArknights/releases) diff --git a/docs/3.1-集成文档.md b/docs/3.1-集成文档.md index 7e925c721d..567d441542 100644 --- a/docs/3.1-集成文档.md +++ b/docs/3.1-集成文档.md @@ -185,6 +185,9 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p ```jsonc { "enable": bool, // 是否启用本任务,可选,默认为 true + "theme": string, // 肉鸽名,可选,默认 "Phantom" + // Phantom - 傀影与猩红血钻 + // Mizuki - 水月与深蓝之树 "mode": int, // 模式,可选项。默认 0 // 0 - 刷蜡烛,尽可能稳定的打更多层数 // 1 - 刷源石锭,第一层投资完就退出 diff --git a/docs/3.2-回调消息协议.md b/docs/3.2-回调消息协议.md index faa8914c11..3a84adfacc 100644 --- a/docs/3.2-回调消息协议.md +++ b/docs/3.2-回调消息协议.md @@ -15,20 +15,22 @@ typedef void(ASST_CALL* AsstCallback)(int msg, const char* details, void* custom enum class AsstMsg { /* Global Info */ - InternalError = 0, // 内部错误 - InitFailed, // 初始化失败 - ConnectionInfo, // 连接相关信息 - AllTasksCompleted, // 全部任务完成 + InternalError = 0, // 内部错误 + InitFailed = 1, // 初始化失败 + ConnectionInfo = 2, // 连接相关信息 + AllTasksCompleted = 3, // 全部任务完成 + /* TaskChain Info */ - TaskChainError = 10000, // 任务链执行/识别错误 - TaskChainStart, // 任务链开始 - TaskChainCompleted, // 任务链完成 - TaskChainExtraInfo, // 任务链额外信息 + TaskChainError = 10000, // 任务链执行/识别错误 + TaskChainStart = 10001, // 任务链开始 + TaskChainCompleted = 10002, // 任务链完成 + TaskChainExtraInfo = 10003, // 任务链额外信息 + /* SubTask Info */ - SubTaskError = 20000, // 原子任务执行/识别错误 - SubTaskStart, // 原子任务开始 - SubTaskCompleted, // 原子任务完成 - SubTaskExtraInfo // 原子任务额外信息 + SubTaskError = 20000, // 原子任务执行/识别错误 + SubTaskStart = 20001, // 原子任务开始 + SubTaskCompleted = 20002, // 原子任务完成 + SubTaskExtraInfo = 20003 // 原子任务额外信息 }; ``` @@ -186,29 +188,29 @@ Todo 汇报到一图流大数据 - `InfrastDormDoubleConfirmButton` 基建宿舍的二次确认按钮,仅当干员冲突时才会有,请提示用户 -- `Roguelike1Start` +- `StartExplore` 肉鸽开始探索 -- `Roguelike1StageTraderInvestConfirm` +- `StageTraderInvestConfirm` 肉鸽投资了源石锭 -- `Roguelike1StageTraderInvestSystemFull` +- `StageTraderInvestSystemFull` 肉鸽投资达到了游戏上限 -- `Roguelike1ExitThenAbandon` +- `ExitThenAbandon` 肉鸽放弃了本次探索 -- `Roguelike1MissionCompletedFlag` +- `MissionCompletedFlag` 肉鸽战斗完成 -- `Roguelike1MissionFailedFlag` +- `MissionFailedFlag` 肉鸽战斗失败 -- `Roguelike1StageSafeHouseEnter` +- `StageSafeHouseEnter` 肉鸽关卡:诡异行商 -- `Roguelike1StageSafeHouseEnter` +- `StageSafeHouseEnter` 肉鸽关卡:安全的角落 -- `Roguelike1StageEncounterEnter` +- `StageEncounterEnter` 肉鸽关卡:不期而遇/古堡馈赠 -- `Roguelike1StageCambatDpsEnter` +- `StageCambatDpsEnter` 肉鸽关卡:普通作战 -- `Roguelike1StageEmergencyDps` +- `StageEmergencyDps` 肉鸽关卡:紧急作战 -- `Roguelike1StageDreadfulFoe` +- `StageDreadfulFoe` 肉鸽关卡:险路恶敌 - `StartGameTask` 打开客户端失败(配置文件与传入client_type不匹配) diff --git a/docs/en-us/3.1-INTEGRATION.md b/docs/en-us/3.1-INTEGRATION.md index 974ae3c751..9ec258bbe9 100644 --- a/docs/en-us/3.1-INTEGRATION.md +++ b/docs/en-us/3.1-INTEGRATION.md @@ -173,6 +173,9 @@ Appends a task. ```jsonc { "enable": bool, // Whether to enable this task, optional, by default true + "theme": string, // Name of the theme, optional, by default "Phantom" + // Phantom - 傀影与猩红血钻 + // Mizuki - 水月与深蓝之树 "mode": int, // Mode, optional, by default 0 // 0 - For candle, plays as much as you can with stable strategy // 1 - For Originium Ingots, exits after first level diff --git a/docs/en-us/3.2-CALLBACK_SCHEMA.md b/docs/en-us/3.2-CALLBACK_SCHEMA.md index 1fcbd10d0e..4e66a09549 100644 --- a/docs/en-us/3.2-CALLBACK_SCHEMA.md +++ b/docs/en-us/3.2-CALLBACK_SCHEMA.md @@ -186,29 +186,29 @@ Todo Reporting to Yituliu Big Data. - `InfrastDormDoubleConfirmButton` Double confirmation at infrastructure, only happens when there is a conflict with other operators. -- `Roguelike1Start` +- `StartExplore` Integrated Strategy: starting. -- `Roguelike1StageTraderInvestConfirm` +- `StageTraderInvestConfirm` Integrated Strategy: trading items with Originium Ingot. -- `Roguelike1StageTraderInvestSystemFull` +- `StageTraderInvestSystemFull` Integrated Strategy: trading system full. -- `Roguelike1ExitThenAbandon` +- `ExitThenAbandon` Integrated Strategy: exit confirmation. -- `Roguelike1MissionCompletedFlag` +- `MissionCompletedFlag` Integrated Strategy: mission completed. -- `Roguelike1MissionFailedFlag` +- `MissionFailedFlag` Integrated Strategy: mission failed. -- `Roguelike1StageSafeHouseEnter` +- `StageSafeHouseEnter` Integrated Strategy: Cunning Merchant -- `Roguelike1StageSafeHouseEnter` +- `StageSafeHouseEnter` Integrated Strategy: Safehouse -- `Roguelike1StageEncounterEnter` +- `StageEncounterEnter` Integrated Strategy: Chance Meeting -- `Roguelike1StageCambatDpsEnter` +- `StageCambatDpsEnter` Integrated Strategy: Operation -- `Roguelike1StageEmergencyDps` +- `StageEmergencyDps` Integrated Strategy: Emergency Operation -- `Roguelike1StageDreadfulFoe` +- `StageDreadfulFoe` Integrated Strategy: Dreadful Foe - `StartGameTask` Failed to launch client (incompatible config file with client_type) diff --git a/docs/ja-jp/3.1-統合ドキュメント.md b/docs/ja-jp/3.1-統合ドキュメント.md index 28ed3538a2..754139c9a8 100644 --- a/docs/ja-jp/3.1-統合ドキュメント.md +++ b/docs/ja-jp/3.1-統合ドキュメント.md @@ -172,6 +172,9 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p ```jsonc { "enable": bool, // このタスクを有効にするかどうか, オプション, デフォルトは true + "theme": string, // テーマの名前, オプション, デフォルトは "Phantom" + // Phantom - 傀影与猩红血钻 + // Mizuki - 水月与深蓝之树 "mode": int, // モード, オプション, デフォルトは 0 // 0 - キャンドル収集, 安定した戦略で続けられるだけ続ける // 1 - 源石錐収集, 一階層で終了します diff --git a/docs/ja-jp/3.2-コールバックAPI.md b/docs/ja-jp/3.2-コールバックAPI.md index 180353667d..2f73c833c5 100644 --- a/docs/ja-jp/3.2-コールバックAPI.md +++ b/docs/ja-jp/3.2-コールバックAPI.md @@ -186,29 +186,29 @@ Todo Yituliu へビッグデータの報告. - `InfrastDormDoubleConfirmButton` 基地施設での二重確認は、他のオペレーターとの競合がある場合のみ発生します. -- `Roguelike1Start` +- `StartExplore` 統合戦略: 開始. -- `Roguelike1StageTraderInvestConfirm` +- `StageTraderInvestConfirm` 統合戦略: 源石錐とアイテム交換. -- `Roguelike1StageTraderInvestSystemFull` +- `StageTraderInvestSystemFull` 統合戦略: 投資満額. -- `Roguelike1ExitThenAbandon` +- `ExitThenAbandon` 統合戦略: 終了確認. -- `Roguelike1MissionCompletedFlag` +- `MissionCompletedFlag` 統合戦略: ミッション完了. -- `Roguelike1MissionFailedFlag` +- `MissionFailedFlag` 統合戦略: ミッション失敗. -- `Roguelike1StageSafeHouseEnter` +- `StageSafeHouseEnter` 統合戦略: 怪しい旅商人 -- `Roguelike1StageSafeHouseEnter` +- `StageSafeHouseEnter` 統合戦略: 安全な片隅 -- `Roguelike1StageEncounterEnter` +- `StageEncounterEnter` 統合戦略: 思わぬ遭遇 -- `Roguelike1StageCambatDpsEnter` +- `StageCambatDpsEnter` 統合戦略: 作戦 -- `Roguelike1StageEmergencyDps` +- `StageEmergencyDps` 統合戦略: 緊急作戦 -- `Roguelike1StageDreadfulFoe` +- `StageDreadfulFoe` 統合戦略: 悪路凶敵 - `StartGameTask` クライアントの起動に失敗 (client_type と設定ファイルの互換性なし) diff --git a/docs/zh-tw/3.1-集成文件.md b/docs/zh-tw/3.1-集成文件.md index 7b49a070f6..23f6de94c5 100644 --- a/docs/zh-tw/3.1-集成文件.md +++ b/docs/zh-tw/3.1-集成文件.md @@ -172,6 +172,9 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p ```jsonc { "enable": bool, // 是否啟用本任務,可選,預設為 true + "theme": string, // 肉鴿名,可選,預設 "Phantom" + // Phantom - 傀影與猩紅血鑽 + // Mizuki - 水月與深藍之樹 "mode": int, // 模式,可選項。預設 0 // 0 - 刷蠟燭,盡可能穩定地打更多層數 // 1 - 刷源石錠,第一層投資完就退出 diff --git a/docs/zh-tw/3.2-回呼訊息協定.md b/docs/zh-tw/3.2-回呼訊息協定.md index bb9136555a..11cf4f5c2f 100644 --- a/docs/zh-tw/3.2-回呼訊息協定.md +++ b/docs/zh-tw/3.2-回呼訊息協定.md @@ -186,29 +186,29 @@ Todo 匯報到一圖流巨量資料 - `InfrastDormDoubleConfirmButton` 基建宿舍的二次確認按鈕,僅當幹員衝突時才會有,請提示使用者 -- `Roguelike1Start` +- `StartExplore` 肉鴿開始探索 -- `Roguelike1StageTraderInvestConfirm` +- `StageTraderInvestConfirm` 肉鴿投資了源石錠 -- `Roguelike1StageTraderInvestSystemFull` +- `StageTraderInvestSystemFull` 肉鴿投資達到了遊戲上限 -- `Roguelike1ExitThenAbandon` +- `ExitThenAbandon` 肉鴿放棄了本次探索 -- `Roguelike1MissionCompletedFlag` +- `MissionCompletedFlag` 肉鴿戰鬥完成 -- `Roguelike1MissionFailedFlag` +- `MissionFailedFlag` 肉鴿戰鬥失敗 -- `Roguelike1StageSafeHouseEnter` +- `StageSafeHouseEnter` 肉鴿關卡:詭異行商 -- `Roguelike1StageSafeHouseEnter` +- `StageSafeHouseEnter` 肉鴿關卡:安全的角落 -- `Roguelike1StageEncounterEnter` +- `StageEncounterEnter` 肉鴿關卡:不期而遇/古堡饋贈 -- `Roguelike1StageCambatDpsEnter` +- `StageCambatDpsEnter` 肉鴿關卡:普通作戰 -- `Roguelike1StageEmergencyDps` +- `StageEmergencyDps` 肉鴿關卡:緊急作戰 -- `Roguelike1StageDreadfulFoe` +- `StageDreadfulFoe` 肉鴿關卡:險路惡敵 - `StartGameTask` 打開用戶端失敗(設定檔與傳入client_type不匹配) diff --git a/include/AsstCaller.h b/include/AsstCaller.h index 1343ac147c..435002cbe4 100644 --- a/include/AsstCaller.h +++ b/include/AsstCaller.h @@ -2,16 +2,26 @@ #include "AsstPort.h" +#ifndef __cplusplus +#include +#endif + +#ifdef __cplusplus namespace asst { class Assistant; } +#endif #ifdef __cplusplus extern "C" { #endif +#ifdef __cplusplus typedef asst::Assistant* AsstHandle; +#else + typedef void* AsstHandle; +#endif typedef int TaskId; typedef void(ASST_CALL* AsstApiCallback)(int msg, const char* detail_json, void* custom_arg); diff --git a/include/module.modulemap b/include/module.modulemap new file mode 100644 index 0000000000..0fe3104227 --- /dev/null +++ b/include/module.modulemap @@ -0,0 +1,8 @@ +module MeoAssistant { + umbrella header "AsstCaller.h" + export * + link framework "Accelerate" + link framework "OpenCL" + link framework "Vision" + link "c++" +} diff --git a/package-definition.json b/package-definition.json index 5d93599825..37e18446a0 100644 --- a/package-definition.json +++ b/package-definition.json @@ -1,6 +1,6 @@ [ { - "name_template": "MaaBundle-{VERSION}", + "name_template": "MAA-{VERSION}-win-x64", "type": "MaaBundle", "configuration": { "include": [ @@ -9,14 +9,13 @@ } }, { - "name_template": "MaaBundle-OTA-{VERSION}", + "name_template": "MAAComponent-OTA-{VERSION}-win-x64", "type": "MaaBundleOta", "configuration": { "include": [ "resource/**", "MeoAssistant.dll", - "MeoAsstGui.exe", - "作业制作器/**" + "MeoAsstGui.exe" ], "exclude": [ "**/PaddleOCR/**" @@ -24,7 +23,7 @@ } }, { - "name_template": "MaaCore-{VERSION}", + "name_template": "MAAComponent-Core-{VERSION}-win-x64", "type": "MaaCore", "configuration": { "include": [ @@ -33,7 +32,7 @@ } }, { - "name_template": "MaaDependency-{VERSION}", + "name_template": "MAAComponent-Dependency-{VERSION}-win-x64", "type": "MaaDependency", "configuration": { "include": [ @@ -48,7 +47,7 @@ } }, { - "name_template": "MaaDependencyNoAvx-{VERSION}", + "name_template": "MAAComponent-DependencyNoAvx-{VERSION}-win-x64", "type": "MaaDependencyNoAvx", "configuration": { "include": [ @@ -59,7 +58,16 @@ } }, { - "name_template": "MaaResource-{VERSION}", + "name_template": "MAAComponent-DebugSymbol-{VERSION}-win-x64", + "type": "MaaDebugSymbol", + "configuration": { + "include": [ + "**/*.pdb" + ] + } + }, + { + "name_template": "MAAComponent-Resource-{VERSION}", "type": "MaaResource", "configuration": { "include": [ @@ -69,14 +77,5 @@ "**/PaddleOCR/**" ] } - }, - { - "name_template": "MaaDebugSymbol-{VERSION}", - "type": "MaaDebugSymbol", - "configuration": { - "include": [ - "**/*.pdb" - ] - } } ] diff --git a/resource/addition/Roguelike2/resource/tasks.json b/resource/addition/Roguelike2/resource/tasks.json deleted file mode 100644 index d34ff866c0..0000000000 --- a/resource/addition/Roguelike2/resource/tasks.json +++ /dev/null @@ -1,735 +0,0 @@ -{ - "Roguelike1StageEncounter": { - "Doc": "不期而遇(随机奖励)", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "templThreshold": 0.96, - "next": [ - "Roguelike1StageEncounterEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike1StageBoons": { - "Doc": "古堡馈赠(随机奖励)", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "templThreshold": 0.95, - "next": [ - "Roguelike1StageEncounterEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike1StageCambatDps": { - "Doc": "普通作战", - "action": "ClickSelf", - "cache": false, - "templThreshold": 0.95, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "next": [ - "Roguelike1StageCambatDpsEnter", - "Roguelike1StageEmergencyDpsEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike1StageEmergencyDps": { - "Doc": "紧急作战", - "action": "ClickSelf", - "cache": false, - "templThreshold": 0.95, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "next": [ - "Roguelike1StageEmergencyDpsEnter", - "Roguelike1StageCambatDpsEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike2StageRegionalCommissioning": { - "Doc": "地区委托(随机奖励)", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "templThreshold": 0.95, - "next": [ - "Roguelike1StageEncounterEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike2StageEmergencyTransportation": { - "Doc": "紧急运输,拒绝可以获取3希望", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "templThreshold": 0.95, - "next": [ - "Roguelike1StageEncounterEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike2StageWindAndRain": { - "Doc": "风雨际会,拒绝可以获取4生命值", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "templThreshold": 0.95, - "next": [ - "Roguelike1StageEncounterEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike2StageGambling": { - "Doc": "骰子关卡", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "templThreshold": 0.95, - "next": [ - "Roguelike1StageEncounterEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike2StageDreadfulFoe-5": { - "Doc": "第五层的boss关卡", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "templThreshold": 0.85, - "next": [ - "Roguelike2StageDreadfulFoe-5Enter", - "Roguelike1StageDreadfulFoeEnter", - "Roguelike1StageEmergencyDpsEnter", - "Roguelike1StageCambatDpsEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike2StageDreadfulFoe-5Enter": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1036, - 371, - 223, - 223 - ], - "next": [ - "Roguelike1QuickFormation" - ] - }, - "Roguelike1StageTrader": { - "Doc": "诡意行商(交易所)", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "templThreshold": 0.95, - "next": [ - "Roguelike1StageTraderEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike1StageSafeHouse": { - "Doc": "安全的角落", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "templThreshold": 0.95, - "next": [ - "Roguelike1StageSafeHouseEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike1StageDreadfulFoe": { - "Doc": "险路恶敌(boss关卡)", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "next": [ - "Roguelike1StageDreadfulFoeEnter", - "Roguelike1StageEmergencyDpsEnter", - "Roguelike1StageCambatDpsEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ], - "next_Doc": "普通作战和紧急作战的图比较像,有时候会识别错,这里的next把两个开始的按钮都放进来,提高容错" - }, - "Roguelike2DiceConfirm": { - "Doc": "骰子的确认按钮", - "action": "ClickSelf", - "cache": false, - "roi": [ - 551, - 577, - 174, - 143 - ], - "templThreshold": 0.95, - "rearDelay": 1000, - "next": [ - "Roguelike1StageEncounterEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose", - "Roguelike1ClickToDrops" - ] - }, - "Roguelike2GetDropBox": { - "Doc": "漂流密匣“打开”按钮", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 471, - 1280, - 157 - ], - "templThreshold": 0.85, - "rearDelay": 1000, - "next": [ - "Roguelike1DropsFlag", - "Roguelike2GetDropBoxSelect", - "Roguelike1ChooseOperFlag" - ] - }, - "Roguelike2GetDropBoxSelect": { - "Doc": "漂流密匣-锤子砸开“选择”按钮", - "action": "ClickSelf", - "cache": false, - "roi": [ - 830, - 438, - 276, - 140 - ], - "templThreshold": 0.85, - "rearDelay": 1000, - "next": [ - "Roguelike1DropsFlag", - "Roguelike1ChooseOperFlag", - "Roguelike1ClickToDrops" - ] - }, - "Roguelike2LastReward4": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 174, - 151, - 935, - 533 - ], - "next": [ - "Roguelike1LastRewardConfirm" - ] - }, - "Roguelike2CloseCollectionContinue": { - "action": "ClickSelf", - "templThreshold": 0.9, - "cache": false, - "roi": [ - 549, - 440, - 123, - 130 - ], - "maskRange": [ - 100, - 255 - ], - "next": [ - "Roguelike1StageEncounterEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose", - "Roguelike1DropsFlag", - "Roguelike2CloseEvent", - "Roguelike1ChooseOperFlag" - ] - }, - "Roguelike2CloseCollectionClose": { - "action": "ClickSelf", - "cache": false, - "templThreshold": 0.9, - "roi": [ - 572, - 434, - 144, - 141 - ], - "maskRange": [ - 100, - 255 - ], - "next": [ - "Roguelike1StageEncounterEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose", - "Roguelike1DropsFlag", - "Roguelike2CloseEvent", - "Roguelike1ChooseOperFlag" - ] - }, - "Roguelike2CloseEvent": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 567, - 584, - 145, - 136 - ], - "next": [ - "Roguelike1StageEncounterEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose", - "Roguelike1DropsFlag", - "Roguelike2CloseEvent" - ] - }, - "Roguelike2CommissionedMissionCompleted": { - "action": "ClickRect", - "specificRect": [ - 600, - 600, - 50, - 50 - ], - "rearDelay": 1000, - "cache": false, - "roi": [ - 519, - 202, - 282, - 154 - ], - "next": [ - "Roguelike1StageEncounterEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike2DiceConfirmThenAbandon": { - "Doc": "骰子的确认按钮", - "action": "ClickSelf", - "template": "Roguelike2DiceConfirm.png", - "cache": false, - "roi": [ - 551, - 577, - 174, - 143 - ], - "templThreshold": 0.95, - "next": [ - "Roguelike1ExitThenAbandon" - ] - }, - "Roguelike2MapObject": { - "action": "DoNothing", - "cache": false, - "roi": [ - 257, - 488, - 189, - 123 - ], - "next": [ - "Roguelike1RecruitOther" - ] - }, - "Roguelike2NextLevel": { - "algorithm": "OcrDetect", - "action": "ClickSelf", - "cache": false, - "text": [ - "天光海岸", - "离岸孤岛", - "波涛略地", - "隐秘温床", - "失尘岩洞", - "幽海丛林", - "绀碧摇篮" - ], - "roi": [ - 522, - 431, - 245, - 144 - ], - "next": [ - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike2DataTraceback": { - "action": "DoNothing", - "cache": false, - "roi": [ - 56, - 277, - 243, - 152 - ], - "next": [ - "Roguelike1ClickToStartPoint" - ] - }, - "Roguelike1StageEncounterFree": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1100, - 0, - 180, - 700 - ], - "maskRange": [ - 5, - 255 - ], - "preDelay": 500, - "next": [ - "Roguelike1StageEncounterLeaveConfirm", - "Roguelike1StageEncounterLeave", - "Roguelike1StageEncounterUnknown", - "Roguelike1StageEncounterFree", - "Roguelike1ChooseOperFlag" - ] - }, - "Roguelike1StageEncounterLeave": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1100, - 0, - 180, - 700 - ], - "maskRange": [ - 5, - 255 - ], - "preDelay": 500, - "next": [ - "Roguelike1StageEncounterLeaveConfirm", - "Roguelike1StageEncounterFree", - "Roguelike1StageEncounterUnknown", - "Roguelike1StageEncounterLeave", - "Roguelike1ChooseOperFlag" - ] - } -} diff --git a/resource/global/YoStarEN/resource/tasks.json b/resource/global/YoStarEN/resource/tasks.json index f86bad2503..7e41ba32c8 100644 --- a/resource/global/YoStarEN/resource/tasks.json +++ b/resource/global/YoStarEN/resource/tasks.json @@ -343,11 +343,11 @@ "Stop" ] }, - "Roguelike1StageTraderInvestSystemFull": { + "Roguelike@StageTraderInvestSystemFull": { "algorithm": "OcrDetect", "cache": false, "reduceOtherTimes": [ - "Roguelike1StageTraderInvestConfirm" + "Roguelike@StageTraderInvestConfirm" ], "text": [ "Storage full" @@ -359,7 +359,7 @@ 289 ], "next": [ - "Roguelike1StageTraderInvestCancel" + "Roguelike@StageTraderInvestCancel" ] }, "BattleStageName": { @@ -1527,7 +1527,7 @@ ] ] }, - "Roguelike1Custom-HijackSquad": { + "RoguelikeCustom-HijackSquad": { "algorithm": "OcrDetect", "text": [], "roi": [ @@ -1579,7 +1579,7 @@ ] ] }, - "Roguelike1Custom-HijackRoles": { + "RoguelikeCustom-HijackRoles": { "algorithm": "OcrDetect", "text": [], "roi": [ @@ -1615,7 +1615,7 @@ ] ] }, - "Roguelike1Custom-HijackCoChar": { + "RoguelikeCustom-HijackCoChar": { "algorithm": "OcrDetect", "text": [], "roi": [ diff --git a/resource/global/YoStarEN/resource/template/Roguelike1Abandon.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@Abandon.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1Abandon.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@Abandon.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1ChooseDifficulty.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@ChooseDifficulty.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1ChooseDifficulty.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@ChooseDifficulty.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1Continue.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@Continue.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1Continue.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@Continue.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1EnterAfterRecruit.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@EnterAfterRecruit.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1EnterAfterRecruit.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@EnterAfterRecruit.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1GetDrop1.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@GetDrop1.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1GetDrop1.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@GetDrop1.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1GetDrop2.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@GetDrop2.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1GetDrop2.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@GetDrop2.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1GetDrop3.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@GetDrop3.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1GetDrop3.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@GetDrop3.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1GetDropCompleted.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@GetDropCompleted.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1GetDropCompleted.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@GetDropCompleted.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1GetDropLeave.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@GetDropLeave.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1GetDropLeave.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@GetDropLeave.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1GetDropRecruit.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@GetDropRecruit.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1GetDropRecruit.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@GetDropRecruit.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1LastReward.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@LastReward.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1LastReward.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@LastReward.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1LastReward2.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@LastReward2.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1LastReward2.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@LastReward2.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1MissionFailedFlag2.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@MissionFailedFlag2.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1MissionFailedFlag2.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@MissionFailedFlag2.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1Recruit.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@Recruit.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1Recruit.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@Recruit.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1Team3.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@RolesDefault.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1Team3.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@RolesDefault.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1Recruit1.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@SquadDefault.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1Recruit1.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@SquadDefault.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageCambatDpsEnter.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@StageCambatDpsEnter.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageCambatDpsEnter.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@StageCambatDpsEnter.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageEmergencyDpsEnter.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@StageEmergencyDpsEnter.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageEmergencyDpsEnter.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@StageEmergencyDpsEnter.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageEncounterEnter.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@StageEncounterEnter.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageEncounterEnter.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@StageEncounterEnter.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageEncounterLeaveConfirm.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@StageEncounterLeaveConfirm.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageEncounterLeaveConfirm.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@StageEncounterLeaveConfirm.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageEncounterUnknown.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@StageEncounterUnknown.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageEncounterUnknown.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@StageEncounterUnknown.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageSafeHouseEnter.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@StageSafeHouseEnter.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageSafeHouseEnter.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@StageSafeHouseEnter.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageTraderEnter.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@StageTraderEnter.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageTraderEnter.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@StageTraderEnter.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1Start.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@StartExplore.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1Start.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@StartExplore.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1TodoEnter.png b/resource/global/YoStarEN/resource/template/Phantom@Roguelike@TodoEnter.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1TodoEnter.png rename to resource/global/YoStarEN/resource/template/Phantom@Roguelike@TodoEnter.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1ChooseOperConfirm.png b/resource/global/YoStarEN/resource/template/Roguelike@ChooseOperConfirm.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1ChooseOperConfirm.png rename to resource/global/YoStarEN/resource/template/Roguelike@ChooseOperConfirm.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1DropsFlag.png b/resource/global/YoStarEN/resource/template/Roguelike@DropsFlag.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1DropsFlag.png rename to resource/global/YoStarEN/resource/template/Roguelike@DropsFlag.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1FormationConfirm.png b/resource/global/YoStarEN/resource/template/Roguelike@FormationConfirm.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1FormationConfirm.png rename to resource/global/YoStarEN/resource/template/Roguelike@FormationConfirm.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1QuickFormation.png b/resource/global/YoStarEN/resource/template/Roguelike@QuickFormation.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1QuickFormation.png rename to resource/global/YoStarEN/resource/template/Roguelike@QuickFormation.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageTraderInvestCancel.png b/resource/global/YoStarEN/resource/template/Roguelike@StageTraderInvestCancel.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageTraderInvestCancel.png rename to resource/global/YoStarEN/resource/template/Roguelike@StageTraderInvestCancel.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageTraderInvestConfirm.png b/resource/global/YoStarEN/resource/template/Roguelike@StageTraderInvestConfirm.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageTraderInvestConfirm.png rename to resource/global/YoStarEN/resource/template/Roguelike@StageTraderInvestConfirm.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageTraderInvestSystem.png b/resource/global/YoStarEN/resource/template/Roguelike@StageTraderInvestSystem.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageTraderInvestSystem.png rename to resource/global/YoStarEN/resource/template/Roguelike@StageTraderInvestSystem.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageTraderInvestSystemEnter.png b/resource/global/YoStarEN/resource/template/Roguelike@StageTraderInvestSystemEnter.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageTraderInvestSystemEnter.png rename to resource/global/YoStarEN/resource/template/Roguelike@StageTraderInvestSystemEnter.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageTraderInvestSystemError.png b/resource/global/YoStarEN/resource/template/Roguelike@StageTraderInvestSystemError.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageTraderInvestSystemError.png rename to resource/global/YoStarEN/resource/template/Roguelike@StageTraderInvestSystemError.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageTraderInvestSystemLeave.png b/resource/global/YoStarEN/resource/template/Roguelike@StageTraderInvestSystemLeave.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageTraderInvestSystemLeave.png rename to resource/global/YoStarEN/resource/template/Roguelike@StageTraderInvestSystemLeave.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageTraderLeave.png b/resource/global/YoStarEN/resource/template/Roguelike@StageTraderLeave.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageTraderLeave.png rename to resource/global/YoStarEN/resource/template/Roguelike@StageTraderLeave.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StageTraderLeaveConfirm.png b/resource/global/YoStarEN/resource/template/Roguelike@StageTraderLeaveConfirm.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StageTraderLeaveConfirm.png rename to resource/global/YoStarEN/resource/template/Roguelike@StageTraderLeaveConfirm.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1StartAction.png b/resource/global/YoStarEN/resource/template/Roguelike@StartAction.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1StartAction.png rename to resource/global/YoStarEN/resource/template/Roguelike@StartAction.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1TraderRandomShoppingConfirm.png b/resource/global/YoStarEN/resource/template/Roguelike@TraderRandomShoppingConfirm.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1TraderRandomShoppingConfirm.png rename to resource/global/YoStarEN/resource/template/Roguelike@TraderRandomShoppingConfirm.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1BattleAbandon.png b/resource/global/YoStarEN/resource/template/RoguelikeBattleAbandon.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1BattleAbandon.png rename to resource/global/YoStarEN/resource/template/RoguelikeBattleAbandon.png diff --git a/resource/global/YoStarEN/resource/template/Roguelike1BattleAbandonConfirm.png b/resource/global/YoStarEN/resource/template/RoguelikeBattleAbandonConfirm.png similarity index 100% rename from resource/global/YoStarEN/resource/template/Roguelike1BattleAbandonConfirm.png rename to resource/global/YoStarEN/resource/template/RoguelikeBattleAbandonConfirm.png diff --git a/resource/global/YoStarJP/resource/tasks.json b/resource/global/YoStarJP/resource/tasks.json index 09c78c8141..50b09a81fd 100644 --- a/resource/global/YoStarJP/resource/tasks.json +++ b/resource/global/YoStarJP/resource/tasks.json @@ -1794,7 +1794,7 @@ "RecruitNowConfirm" ] }, - "Roguelike1Custom-HijackSquad": { + "RoguelikeCustom-HijackSquad": { "algorithm": "OcrDetect", "text": [], "roi": [ @@ -1846,7 +1846,7 @@ ] ] }, - "Roguelike1Custom-HijackRoles": { + "RoguelikeCustom-HijackRoles": { "algorithm": "OcrDetect", "text": [], "roi": [ @@ -1874,7 +1874,7 @@ ] ] }, - "Roguelike1Custom-HijackCoChar": { + "RoguelikeCustom-HijackCoChar": { "algorithm": "OcrDetect", "text": [], "roi": [ @@ -1919,7 +1919,7 @@ ], "preDelay": 1000 }, - "Roguelike1RecruitLevel": { + "RoguelikeRecruitLevel": { "template": "empty.png", "Doc": "日服的等级字体比国服大一圈,要改roi", "roi": [ diff --git a/resource/global/YoStarJP/resource/template/Roguelike1Abandon.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@Abandon.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1Abandon.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@Abandon.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1ChooseDifficulty.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@ChooseDifficulty.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1ChooseDifficulty.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@ChooseDifficulty.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1Continue.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@Continue.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1Continue.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@Continue.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1EnterAfterRecruit.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@EnterAfterRecruit.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1EnterAfterRecruit.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@EnterAfterRecruit.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1GetDrop1.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDrop1.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1GetDrop1.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDrop1.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1GetDrop2.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDrop2.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1GetDrop2.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDrop2.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1GetDrop3.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDrop3.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1GetDrop3.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDrop3.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1GetDropCompleted.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDropCompleted.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1GetDropCompleted.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDropCompleted.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1GetDropLeave.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDropLeave.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1GetDropLeave.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDropLeave.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1GetDropRecruit.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDropRecruit.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1GetDropRecruit.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDropRecruit.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1GetDropSelect.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDropSelect.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1GetDropSelect.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDropSelect.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1GetDropSelectReward.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDropSelectReward.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1GetDropSelectReward.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@GetDropSelectReward.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1LastReward.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@LastReward.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1LastReward.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@LastReward.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1LastReward2.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@LastReward2.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1LastReward2.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@LastReward2.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1LastReward3.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@LastReward3.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1LastReward3.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@LastReward3.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1RecruitConfirm.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@LastRewardConfirm.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1RecruitConfirm.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@LastRewardConfirm.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1MissionFailedFlag2.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@MissionFailedFlag2.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1MissionFailedFlag2.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@MissionFailedFlag2.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1Recruit.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@Recruit.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1Recruit.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@Recruit.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1Team3.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@RolesDefault.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1Team3.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@RolesDefault.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1Recruit1.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@SquadDefault.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1Recruit1.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@SquadDefault.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageCambatDpsEnter.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageCambatDpsEnter.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageCambatDpsEnter.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageCambatDpsEnter.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageDreadfulFoeEnter.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageDreadfulFoeEnter.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageDreadfulFoeEnter.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageDreadfulFoeEnter.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageEmergencyDpsEnter.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageEmergencyDpsEnter.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageEmergencyDpsEnter.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageEmergencyDpsEnter.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageEncounterEnter.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageEncounterEnter.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageEncounterEnter.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageEncounterEnter.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageEncounterLeaveConfirm.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageEncounterLeaveConfirm.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageEncounterLeaveConfirm.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageEncounterLeaveConfirm.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageEncounterUnknown.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageEncounterUnknown.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageEncounterUnknown.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageEncounterUnknown.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageSafeHouseEnter.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageSafeHouseEnter.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageSafeHouseEnter.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageSafeHouseEnter.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageTraderEnter.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageTraderEnter.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageTraderEnter.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@StageTraderEnter.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1Start.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@StartExplore.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1Start.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@StartExplore.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1TodoEnter.png b/resource/global/YoStarJP/resource/template/Phantom@Roguelike@TodoEnter.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1TodoEnter.png rename to resource/global/YoStarJP/resource/template/Phantom@Roguelike@TodoEnter.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1TeamConfirm.png b/resource/global/YoStarJP/resource/template/Roguelike1TeamConfirm.png deleted file mode 100644 index ebb9390ab1..0000000000 Binary files a/resource/global/YoStarJP/resource/template/Roguelike1TeamConfirm.png and /dev/null differ diff --git a/resource/global/YoStarJP/resource/template/Roguelike1ChooseOperConfirm.png b/resource/global/YoStarJP/resource/template/Roguelike@ChooseOperConfirm.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1ChooseOperConfirm.png rename to resource/global/YoStarJP/resource/template/Roguelike@ChooseOperConfirm.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1DropsFlag.png b/resource/global/YoStarJP/resource/template/Roguelike@DropsFlag.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1DropsFlag.png rename to resource/global/YoStarJP/resource/template/Roguelike@DropsFlag.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1FormationConfirm.png b/resource/global/YoStarJP/resource/template/Roguelike@FormationConfirm.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1FormationConfirm.png rename to resource/global/YoStarJP/resource/template/Roguelike@FormationConfirm.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1QuickFormation.png b/resource/global/YoStarJP/resource/template/Roguelike@QuickFormation.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1QuickFormation.png rename to resource/global/YoStarJP/resource/template/Roguelike@QuickFormation.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1RecruitCloseGuide.png b/resource/global/YoStarJP/resource/template/Roguelike@RecruitCloseGuide.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1RecruitCloseGuide.png rename to resource/global/YoStarJP/resource/template/Roguelike@RecruitCloseGuide.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageTraderInvestCancel.png b/resource/global/YoStarJP/resource/template/Roguelike@StageTraderInvestCancel.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageTraderInvestCancel.png rename to resource/global/YoStarJP/resource/template/Roguelike@StageTraderInvestCancel.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageTraderInvestConfirm.png b/resource/global/YoStarJP/resource/template/Roguelike@StageTraderInvestConfirm.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageTraderInvestConfirm.png rename to resource/global/YoStarJP/resource/template/Roguelike@StageTraderInvestConfirm.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageTraderInvestSystem.png b/resource/global/YoStarJP/resource/template/Roguelike@StageTraderInvestSystem.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageTraderInvestSystem.png rename to resource/global/YoStarJP/resource/template/Roguelike@StageTraderInvestSystem.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageTraderInvestSystemEnter.png b/resource/global/YoStarJP/resource/template/Roguelike@StageTraderInvestSystemEnter.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageTraderInvestSystemEnter.png rename to resource/global/YoStarJP/resource/template/Roguelike@StageTraderInvestSystemEnter.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageTraderInvestSystemLeave.png b/resource/global/YoStarJP/resource/template/Roguelike@StageTraderInvestSystemLeave.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageTraderInvestSystemLeave.png rename to resource/global/YoStarJP/resource/template/Roguelike@StageTraderInvestSystemLeave.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageTraderLeave.png b/resource/global/YoStarJP/resource/template/Roguelike@StageTraderLeave.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageTraderLeave.png rename to resource/global/YoStarJP/resource/template/Roguelike@StageTraderLeave.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StageTraderLeaveConfirm.png b/resource/global/YoStarJP/resource/template/Roguelike@StageTraderLeaveConfirm.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StageTraderLeaveConfirm.png rename to resource/global/YoStarJP/resource/template/Roguelike@StageTraderLeaveConfirm.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1StartAction.png b/resource/global/YoStarJP/resource/template/Roguelike@StartAction.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1StartAction.png rename to resource/global/YoStarJP/resource/template/Roguelike@StartAction.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1TraderRandomShoppingConfirm.png b/resource/global/YoStarJP/resource/template/Roguelike@TraderRandomShoppingConfirm.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1TraderRandomShoppingConfirm.png rename to resource/global/YoStarJP/resource/template/Roguelike@TraderRandomShoppingConfirm.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1BattleAbandon.png b/resource/global/YoStarJP/resource/template/RoguelikeBattleAbandon.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1BattleAbandon.png rename to resource/global/YoStarJP/resource/template/RoguelikeBattleAbandon.png diff --git a/resource/global/YoStarJP/resource/template/Roguelike1BattleAbandonConfirm.png b/resource/global/YoStarJP/resource/template/RoguelikeBattleAbandonConfirm.png similarity index 100% rename from resource/global/YoStarJP/resource/template/Roguelike1BattleAbandonConfirm.png rename to resource/global/YoStarJP/resource/template/RoguelikeBattleAbandonConfirm.png diff --git a/resource/global/txwy/resource/tasks.json b/resource/global/txwy/resource/tasks.json index da2e805260..c98a41ba54 100644 --- a/resource/global/txwy/resource/tasks.json +++ b/resource/global/txwy/resource/tasks.json @@ -202,6 +202,33 @@ "RecruitFlag" ] }, + "FromIntegratedStrategies": { + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": [ + "進入主題" + ], + "roi": [ + 1006, + 445, + 246, + 157 + ], + "next": [ + "FromIntegratedStrategies", + "Begin" + ] + }, + "RoguelikeRecruitLevel": { + "template": "empty.png", + "Doc": "日服的等级字体比国服大一圈,要改roi", + "roi": [ + -172, + -1, + 18, + 12 + ] + }, "RecruitTags": { "algorithm": "OcrDetect", "fullMatch": true, @@ -346,5 +373,1170 @@ "支援机械" ] ] + }, + "BattleStageName": { + "algorithm": "OcrDetect", + "cache": false, + "text": [], + "Doc": "该任务的 ocrReplace 被所有涉及Rouge-like的English识别任务复用", + "ocrReplace": [ + [ + "與蟲為伴", + "与虫为伴" + ], + [ + "馴獸小屋", + "驯兽小屋" + ], + [ + "禮炮小隊", + "礼炮小队" + ], + [ + "意外", + "意外" + ], + [ + "壓軸登場", + "压轴登场" + ], + [ + "巡邏隊", + "巡逻队" + ], + [ + "Destitute Knights", + "落魄骑士" + ], + [ + "Unequal Split", + "分赃不均" + ], + [ + "正義", + "正义" + ], + [ + "似曾相識", + "似曾相识" + ], + [ + "酒商運輸隊", + "酒商运输队" + ], + [ + "With The Crowd", + "从众效应" + ], + [ + "Beast Fighting", + "斗兽笼" + ], + [ + "Premiere", + "首演" + ], + [ + "Reform", + "感化" + ], + [ + "Pressing Ahead", + "步步紧逼" + ], + [ + "Shrouded in Clouds", + "阴云笼罩" + ], + [ + "Fireworks Show", + "烟花秀" + ], + [ + "Unending", + "永无尽头" + ], + [ + "Traveler From Afar", + "远方来客" + ], + [ + "A Dance Together", + "共舞" + ], + [ + "Bob's Beers", + "鲍勃酒品" + ], + [ + "Drone Landing Zone", + "无人机起降库" + ], + [ + "The Red Mist", + "红雾弥漫" + ], + [ + "The Night of Ritual", + "仪式之夜" + ], + [ + "The Biting Cold", + "彻骨冰寒" + ], + [ + "Dangers Abound", + "危机四伏" + ], + [ + "Surprise Factory", + "惊喜工厂" + ], + [ + "Absurd Trickeries", + "荒唐把戏" + ], + [ + "Sarkaz Desire", + "萨卡兹的渴求" + ], + [ + "Ursus Desire", + "乌萨斯的渴求" + ], + [ + "A Date With Slugs", + "与虫为伴" + ], + [ + "Beast Taming", + "驯兽小屋" + ], + [ + "Gun Salute", + "礼炮小队" + ], + [ + "Accident", + "意外" + ], + [ + "The Grand Finale", + "压轴登场" + ], + [ + "Patrol Squad", + "巡逻队" + ], + [ + "Destitute Knights", + "落魄骑士" + ], + [ + "Unequal Split", + "分赃不均" + ], + [ + "Justice", + "正义" + ], + [ + "A Familiar Face", + "似曾相识" + ], + [ + "Vintage Transport", + "酒商运输队" + ], + [ + "With The Crowd", + "从众效应" + ], + [ + "Beast Fighting", + "斗兽笼" + ], + [ + "Premiere", + "首演" + ], + [ + "Reform", + "感化" + ], + [ + "Pressing Ahead", + "步步紧逼" + ], + [ + "Shrouded in Clouds", + "阴云笼罩" + ], + [ + "Fireworks Show", + "烟花秀" + ], + [ + "Unending", + "永无尽头" + ], + [ + "Traveler From Afar", + "远方来客" + ], + [ + "A Dance Together", + "共舞" + ], + [ + "Bob's Beers", + "鲍勃酒品" + ], + [ + "Drone Landing Zone", + "无人机起降库" + ], + [ + "The Red Mist", + "红雾弥漫" + ], + [ + "The Night of Ritual", + "仪式之夜" + ], + [ + "The Biting Cold", + "彻骨冰寒" + ], + [ + "Dangers Abound", + "危机四伏" + ], + [ + "Surprise Factory", + "惊喜工厂" + ], + [ + "Absurd Trickeries", + "荒唐把戏" + ], + [ + "Sarkaz Desire", + "萨卡兹的渴求" + ], + [ + "Ursus Desire", + "乌萨斯的渴求" + ], + [ + "Mind The Doors", + "开门请当心" + ], + [ + "Theft from Above", + "大盗当头" + ], + [ + "Terrifying Legends", + "恐怖传说" + ], + [ + "Fatal Melodies", + "悦耳杀机" + ], + [ + "A Cold Seperation", + "寒渊惜别" + ], + [ + "Crying Over Spilt Milk", + "覆水难收" + ], + [ + "Need No More", + "别无所求" + ], + [ + "Nothing Ends Well", + "诸事不顺" + ] + ], + "roi": [ + 250, + 435, + 800, + 100 + ] + }, + "CharsNameOcrReplace": { + "algorithm": "OcrDetect", + "text": [], + "Doc": "该任务的 ocrReplace 被所有涉及干员名的English Name识别任务复用", + "ocrReplace": [ + [ + "SilverAsh", + "银灰" + ], + [ + "Blaze", + "煌" + ], + [ + "Surtr", + "史尔特尔" + ], + [ + "^Ch'en$", + "陈" + ], + [ + "Thorns", + "棘刺" + ], + [ + "^Specter$", + "幽灵鲨" + ], + [ + "Nearl the Radiant Knight", + "耀骑士临光" + ], + [ + "Lappland", + "拉普兰德" + ], + [ + "Indra", + "因陀罗" + ], + [ + "Amiya", + "阿米娅" + ], + [ + "Broca", + "布洛卡" + ], + [ + "Savage", + "暴行" + ], + [ + "Bibeak", + "柏喙" + ], + [ + "Franka", + "芙兰卡" + ], + [ + "Sideroca", + "铸铁" + ], + [ + "Swire", + "诗怀雅" + ], + [ + "Whislash", + "鞭刃" + ], + [ + "Akafuyu", + "赤冬" + ], + [ + "Flamebringer", + "炎客" + ], + [ + "Melantha", + "玫兰莎" + ], + [ + "Dobermann", + "杜宾" + ], + [ + "Matoimaru", + "缠丸" + ], + [ + "Frostleaf", + "霜叶" + ], + [ + "Estelle", + "艾丝黛尔" + ], + [ + "Hellagur", + "赫拉格" + ], + [ + "Pallas", + "帕拉斯" + ], + [ + "Mountain", + "山" + ], + [ + "^Skadi$", + "斯卡蒂" + ], + [ + "Ayerscarpe", + "断崖" + ], + [ + "Tequila", + "龙舌兰" + ], + [ + "Flint", + "燧石" + ], + [ + "Astesia", + "星极" + ], + [ + "La Pluma", + "羽毛笔" + ], + [ + "Tachanka", + "战车" + ], + [ + "Conviction", + "断罪者" + ], + [ + "Arene", + "芳汀" + ], + [ + "Jackie", + "杰克" + ], + [ + "Cutter", + "刻刀" + ], + [ + "Beehunter", + "猎蜂" + ], + [ + "Mousse", + "慕斯" + ], + [ + "Utage", + "宴" + ], + [ + "Popukar", + "泡普卡" + ], + [ + "Midnight", + "月见夜" + ], + [ + "Reserve Operator - Melee", + "预备干员-近战" + ], + [ + "Angelina", + "安洁莉娜" + ], + [ + "Sora", + "空" + ], + [ + "Skadi the Corrupting Heart", + "浊心斯卡蒂" + ], + [ + "Scene", + "稀音" + ], + [ + "Suzuran", + "铃兰" + ], + [ + "Mayer", + "梅尔" + ], + [ + "Magallan", + "麦哲伦" + ], + [ + "Pramanix", + "初雪" + ], + [ + "Gnosis", + "灵知" + ], + [ + "Glaucus", + "格劳克斯" + ], + [ + "Shamare", + "巫恋" + ], + [ + "Tsukinogi", + "月禾" + ], + [ + "Istina", + "真理" + ], + [ + "Podenco", + "波登可" + ], + [ + "Earthspirit", + "地灵" + ], + [ + "Roberta", + "罗比菈塔" + ], + [ + "Deepcolor", + "深海色" + ], + [ + "梓蘭", + "梓兰" + ], + [ + "Reserve Operator - Caster", + "预备干员-术师" + ], + [ + "Hibiscus", + "芙蓉" + ], + [ + "安賽爾", + "安赛尔" + ], + [ + "Myrrh", + "末药" + ], + [ + "Gavial", + "嘉维尔" + ], + [ + "Perfumer", + "调香师" + ], + [ + "白面鴞", + "白面鸮" + ], + [ + "Silence", + "赫默" + ], + [ + "Warfarin", + "华法琳" + ], + [ + "閃靈", + "闪灵" + ], + [ + "夜鶯", + "夜莺" + ], + [ + "蘇蘇洛", + "苏苏洛" + ], + [ + "Ceylon", + "锡兰" + ], + [ + "Breeze", + "微风" + ], + [ + "Folinic", + "亚叶" + ], + [ + "Purestream", + "清流" + ], + [ + "Whisperain", + "絮雨" + ], + [ + "Tuye", + "图耶" + ], + [ + "凱爾希", + "凯尔希" + ], + [ + "Mulberry", + "桑葚" + ], + [ + "Honeyberry", + "蜜莓" + ], + [ + "Reserve Operator - Logistics", + "预备干员-后勤" + ], + [ + "Flametail", + "焰尾" + ], + [ + "Wildmane", + "野鬃" + ], + [ + "Saileach", + "琴柳" + ], + [ + "Saga", + "嵯峨" + ], + [ + "Beanstalk", + "豆苗" + ], + [ + "Chiave", + "贾维" + ], + [ + "Elysium", + "极境" + ], + [ + "Bagpipe", + "风笛" + ], + [ + "Reed", + "苇草" + ], + [ + "Myrtle", + "桃金娘" + ], + [ + "Grani", + "格拉尼" + ], + [ + "Siege", + "推进之王" + ], + [ + "Texas", + "德克萨斯" + ], + [ + "Zima", + "凛冬" + ], + [ + "Vigna", + "红豆" + ], + [ + "Scavenger", + "清道夫" + ], + [ + "Courier", + "讯使" + ], + [ + "Plume", + "翎羽" + ], + [ + "Vanilla", + "香草" + ], + [ + "Fang", + "芬" + ], + [ + "Yato", + "夜刀" + ], + [ + "'Justice Knight'", + "正义骑士号" + ], + [ + "Fartooth", + "远牙" + ], + [ + "Ch'en the Holungday", + "假日威龙陈" + ], + [ + "Toddifons", + "熔泉" + ], + [ + "Ash", + "灰烬" + ], + [ + "Archetto", + "空弦" + ], + [ + "Pinecone", + "松果" + ], + [ + "Rosmontis", + "迷迭香" + ], + [ + "Aosta", + "奥斯塔" + ], + [ + "April", + "四月" + ], + [ + "Aciddrop", + "酸糖" + ], + [ + "Andreana", + "安哲拉" + ], + [ + "^Rosa$", + "早露" + ], + [ + "Sesa", + "慑砂" + ], + [ + "GreyThroat", + "灰喉" + ], + [ + "Ambriel", + "安比尔" + ], + [ + "May", + "梅" + ], + [ + "Executor", + "送葬人" + ], + [ + "Vermeil", + "红云" + ], + [ + "Schwarz", + "黑" + ], + [ + "Catapult", + "空爆" + ], + [ + "Exusiai", + "能天使" + ], + [ + "Firewatch", + "守林人" + ], + [ + "Provence", + "普罗旺斯" + ], + [ + "Meteorite", + "陨星" + ], + [ + "Platinum", + "白金" + ], + [ + "Blue Poison", + "蓝毒" + ], + [ + "ShiraYuki", + "白雪" + ], + [ + "Meteor", + "流星" + ], + [ + "Jessica", + "杰西卡" + ], + [ + "Adnachiel", + "安德切尔" + ], + [ + "^Kroos$", + "克洛丝" + ], + [ + "Rangers", + "巡林者" + ], + [ + "Reserve Operator - Sniper", + "预备干员-狙击" + ], + [ + "Shalem", + "暮落" + ], + [ + "Aurora", + "极光" + ], + [ + "Ashlock", + "灰毫" + ], + [ + "Heavyrain", + "暴雨" + ], + [ + "Blitz", + "闪击" + ], + [ + "Mudrock", + "泥岩" + ], + [ + "Blemishine", + "瑕光" + ], + [ + "Bubble", + "泡泡" + ], + [ + "Eunectes", + "森蚺" + ], + [ + "Asbestos", + "石棉" + ], + [ + "Nian", + "年" + ], + [ + "Hung", + "吽" + ], + [ + "Bison", + "拜松" + ], + [ + "Dur-nar", + "坚雷" + ], + [ + "Spot", + "斑点" + ], + [ + "Saria", + "塞雷娅" + ], + [ + "Hoshiguma", + "星熊" + ], + [ + "Vulcan", + "火神" + ], + [ + "Croissant", + "可颂" + ], + [ + "Liskarm", + "雷蛇" + ], + [ + "^Nearl$", + "临光" + ], + [ + "Gummy", + "古米" + ], + [ + "Cuora", + "蛇屠箱" + ], + [ + "Matterhorn", + "角峰" + ], + [ + "Beagle", + "米格鲁" + ], + [ + "Cardigan", + "卡缇" + ], + [ + "Noir Corne", + "黑角" + ], + [ + "Kjera", + "耶拉" + ], + [ + "Corroserum", + "蚀清" + ], + [ + "Pudding", + "布丁" + ], + [ + "Carnelian", + "卡涅利安" + ], + [ + "Indigo", + "深靛" + ], + [ + "Passenger", + "异客" + ], + [ + "^Dusk$", + "夕" + ], + [ + "Lava the Purgatory", + "炎狱炎熔" + ], + [ + "Iris", + "爱丽丝" + ], + [ + "Mint", + "薄绿" + ], + [ + "Tomimi", + "特米米" + ], + [ + "Beeswax", + "蜜蜡" + ], + [ + "Click", + "卡达" + ], + [ + "Leonhardt", + "莱恩哈特" + ], + [ + "Absinthe", + "苦艾" + ], + [ + "Ceobe", + "刻俄柏" + ], + [ + "Leizi", + "惊蛰" + ], + [ + "Mostima", + "莫斯提马" + ], + [ + "Greyy", + "格雷伊" + ], + [ + "Nightmare", + "夜魔" + ], + [ + "Eyjafjalla", + "艾雅法拉" + ], + [ + "Ifrit", + "伊芙利特" + ], + [ + "Skyfire", + "天火" + ], + [ + "Gitano", + "远山" + ], + [ + "Haze", + "夜烟" + ], + [ + "Steward", + "史都华德" + ], + [ + "^Lava", + "炎熔" + ], + [ + "Durin", + "杜林" + ], + [ + "Mizuki", + "水月" + ], + [ + "Kirara", + "绮良" + ], + [ + "Bena", + "贝娜" + ], + [ + "Gladiia", + "歌蕾蒂娅" + ], + [ + "Frost", + "霜华" + ], + [ + "Mr.Nothing", + "乌有" + ], + [ + "Kafka", + "卡夫卡" + ], + [ + "Robin", + "罗宾" + ], + [ + "Jaye", + "孑" + ], + [ + "Weedy", + "温蒂" + ], + [ + "Phantom", + "傀影" + ], + [ + "Aak", + "阿" + ], + [ + "Snowsant", + "雪雉" + ], + [ + "Waai Fu", + "槐琥" + ], + [ + "Ethan", + "伊桑" + ], + [ + "FEater", + "食铁兽" + ], + [ + "Manticore", + "狮蝎" + ], + [ + "Cliffheart", + "崖心" + ], + [ + "Projekt Red", + "红" + ], + [ + "Shaw", + "阿消" + ], + [ + "Rope", + "暗索" + ], + [ + "Gravel", + "砾" + ] + ] } } diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@Abandon.png b/resource/global/txwy/resource/template/Phantom@Roguelike@Abandon.png new file mode 100644 index 0000000000..3f22f3857d Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@Abandon.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@ChooseDifficulty.png b/resource/global/txwy/resource/template/Phantom@Roguelike@ChooseDifficulty.png new file mode 100644 index 0000000000..7ffdd5dc3a Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@ChooseDifficulty.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@Continue.png b/resource/global/txwy/resource/template/Phantom@Roguelike@Continue.png new file mode 100644 index 0000000000..9aa8e47162 Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@Continue.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@EnterAfterRecruit.png b/resource/global/txwy/resource/template/Phantom@Roguelike@EnterAfterRecruit.png new file mode 100644 index 0000000000..545870cabb Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@EnterAfterRecruit.png differ diff --git a/resource/template/Roguelike1GamePass.png b/resource/global/txwy/resource/template/Phantom@Roguelike@GamePass.png similarity index 100% rename from resource/template/Roguelike1GamePass.png rename to resource/global/txwy/resource/template/Phantom@Roguelike@GamePass.png diff --git a/resource/template/Roguelike1GamePassSkip1.png b/resource/global/txwy/resource/template/Phantom@Roguelike@GamePassSkip1.png similarity index 100% rename from resource/template/Roguelike1GamePassSkip1.png rename to resource/global/txwy/resource/template/Phantom@Roguelike@GamePassSkip1.png diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@GetDrop3.png b/resource/global/txwy/resource/template/Phantom@Roguelike@GetDrop3.png new file mode 100644 index 0000000000..b3551e2cf8 Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@GetDrop3.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@GetDropCompleted.png b/resource/global/txwy/resource/template/Phantom@Roguelike@GetDropCompleted.png new file mode 100644 index 0000000000..268a398eaf Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@GetDropCompleted.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@GetDropSelect.png b/resource/global/txwy/resource/template/Phantom@Roguelike@GetDropSelect.png new file mode 100644 index 0000000000..8109a68c5c Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@GetDropSelect.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@GetDropSelectReward.png b/resource/global/txwy/resource/template/Phantom@Roguelike@GetDropSelectReward.png new file mode 100644 index 0000000000..e4cdd85895 Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@GetDropSelectReward.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@LastReward.png b/resource/global/txwy/resource/template/Phantom@Roguelike@LastReward.png new file mode 100644 index 0000000000..dc1f84d039 Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@LastReward.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@LastReward2.png b/resource/global/txwy/resource/template/Phantom@Roguelike@LastReward2.png new file mode 100644 index 0000000000..96dbb7d5aa Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@LastReward2.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@LastReward3.png b/resource/global/txwy/resource/template/Phantom@Roguelike@LastReward3.png new file mode 100644 index 0000000000..8b683b1c4a Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@LastReward3.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@LastRewardConfirm.png b/resource/global/txwy/resource/template/Phantom@Roguelike@LastRewardConfirm.png new file mode 100644 index 0000000000..1ff762eaf7 Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@LastRewardConfirm.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@MissionFailedFlag2.png b/resource/global/txwy/resource/template/Phantom@Roguelike@MissionFailedFlag2.png new file mode 100644 index 0000000000..4ea17d5516 Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@MissionFailedFlag2.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@RolesDefault.png b/resource/global/txwy/resource/template/Phantom@Roguelike@RolesDefault.png new file mode 100644 index 0000000000..4d7f5aea9c Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@RolesDefault.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@SquadDefault.png b/resource/global/txwy/resource/template/Phantom@Roguelike@SquadDefault.png new file mode 100644 index 0000000000..b03a63c7ce Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@SquadDefault.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@StageCambatDpsEnter.png b/resource/global/txwy/resource/template/Phantom@Roguelike@StageCambatDpsEnter.png new file mode 100644 index 0000000000..827b81901b Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@StageCambatDpsEnter.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@StageDreadfulFoeEnter.png b/resource/global/txwy/resource/template/Phantom@Roguelike@StageDreadfulFoeEnter.png new file mode 100644 index 0000000000..2c2c17c1dc Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@StageDreadfulFoeEnter.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@StageEmergencyDpsEnter.png b/resource/global/txwy/resource/template/Phantom@Roguelike@StageEmergencyDpsEnter.png new file mode 100644 index 0000000000..eebc5a18fb Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@StageEmergencyDpsEnter.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@StageEncounterEnter.png b/resource/global/txwy/resource/template/Phantom@Roguelike@StageEncounterEnter.png new file mode 100644 index 0000000000..ff409bf96b Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@StageEncounterEnter.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@StageEncounterLeaveConfirm.png b/resource/global/txwy/resource/template/Phantom@Roguelike@StageEncounterLeaveConfirm.png new file mode 100644 index 0000000000..1bee431bd7 Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@StageEncounterLeaveConfirm.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@StageSafeHouseEnter.png b/resource/global/txwy/resource/template/Phantom@Roguelike@StageSafeHouseEnter.png new file mode 100644 index 0000000000..cd92b5e011 Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@StageSafeHouseEnter.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@StageTraderEnter.png b/resource/global/txwy/resource/template/Phantom@Roguelike@StageTraderEnter.png new file mode 100644 index 0000000000..8e38855d35 Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@StageTraderEnter.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@StartExplore.png b/resource/global/txwy/resource/template/Phantom@Roguelike@StartExplore.png new file mode 100644 index 0000000000..5c6891e1a6 Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@StartExplore.png differ diff --git a/resource/global/txwy/resource/template/Phantom@Roguelike@TodoEnter.png b/resource/global/txwy/resource/template/Phantom@Roguelike@TodoEnter.png new file mode 100644 index 0000000000..b407885bd3 Binary files /dev/null and b/resource/global/txwy/resource/template/Phantom@Roguelike@TodoEnter.png differ diff --git a/resource/global/txwy/resource/template/Roguelike@ChooseOperConfirm.png b/resource/global/txwy/resource/template/Roguelike@ChooseOperConfirm.png new file mode 100644 index 0000000000..e65a427fdb Binary files /dev/null and b/resource/global/txwy/resource/template/Roguelike@ChooseOperConfirm.png differ diff --git a/resource/global/txwy/resource/template/Roguelike@DropsFlag.png b/resource/global/txwy/resource/template/Roguelike@DropsFlag.png new file mode 100644 index 0000000000..8ca26a52d1 Binary files /dev/null and b/resource/global/txwy/resource/template/Roguelike@DropsFlag.png differ diff --git a/resource/global/txwy/resource/template/Roguelike@FormationConfirm.png b/resource/global/txwy/resource/template/Roguelike@FormationConfirm.png new file mode 100644 index 0000000000..2b07da18a6 Binary files /dev/null and b/resource/global/txwy/resource/template/Roguelike@FormationConfirm.png differ diff --git a/resource/template/Roguelike1QuickFormation.png b/resource/global/txwy/resource/template/Roguelike@QuickFormation.png similarity index 100% rename from resource/template/Roguelike1QuickFormation.png rename to resource/global/txwy/resource/template/Roguelike@QuickFormation.png diff --git a/resource/global/txwy/resource/template/Roguelike@RecruitCloseGuide.png b/resource/global/txwy/resource/template/Roguelike@RecruitCloseGuide.png new file mode 100644 index 0000000000..828a5b5ed1 Binary files /dev/null and b/resource/global/txwy/resource/template/Roguelike@RecruitCloseGuide.png differ diff --git a/resource/global/txwy/resource/template/Roguelike@StageTraderInvestConfirm.png b/resource/global/txwy/resource/template/Roguelike@StageTraderInvestConfirm.png new file mode 100644 index 0000000000..d895c8df05 Binary files /dev/null and b/resource/global/txwy/resource/template/Roguelike@StageTraderInvestConfirm.png differ diff --git a/resource/global/txwy/resource/template/Roguelike@StageTraderInvestSystem.png b/resource/global/txwy/resource/template/Roguelike@StageTraderInvestSystem.png new file mode 100644 index 0000000000..b72bfba572 Binary files /dev/null and b/resource/global/txwy/resource/template/Roguelike@StageTraderInvestSystem.png differ diff --git a/resource/global/txwy/resource/template/Roguelike@StageTraderInvestSystemEnter.png b/resource/global/txwy/resource/template/Roguelike@StageTraderInvestSystemEnter.png new file mode 100644 index 0000000000..c7b361b653 Binary files /dev/null and b/resource/global/txwy/resource/template/Roguelike@StageTraderInvestSystemEnter.png differ diff --git a/resource/global/txwy/resource/template/Roguelike@StageTraderLeave.png b/resource/global/txwy/resource/template/Roguelike@StageTraderLeave.png new file mode 100644 index 0000000000..40f848f440 Binary files /dev/null and b/resource/global/txwy/resource/template/Roguelike@StageTraderLeave.png differ diff --git a/resource/global/txwy/resource/template/Roguelike@StageTraderLeaveConfirm.png b/resource/global/txwy/resource/template/Roguelike@StageTraderLeaveConfirm.png new file mode 100644 index 0000000000..c2c1e62072 Binary files /dev/null and b/resource/global/txwy/resource/template/Roguelike@StageTraderLeaveConfirm.png differ diff --git a/resource/global/txwy/resource/template/Roguelike@StartAction.png b/resource/global/txwy/resource/template/Roguelike@StartAction.png new file mode 100644 index 0000000000..9e762faf18 Binary files /dev/null and b/resource/global/txwy/resource/template/Roguelike@StartAction.png differ diff --git a/resource/global/txwy/resource/template/Roguelike@TraderRandomShoppingConfirm.png b/resource/global/txwy/resource/template/Roguelike@TraderRandomShoppingConfirm.png new file mode 100644 index 0000000000..36eab5e9e0 Binary files /dev/null and b/resource/global/txwy/resource/template/Roguelike@TraderRandomShoppingConfirm.png differ diff --git a/resource/global/txwy/resource/template/RoguelikeBattleAbandon.png b/resource/global/txwy/resource/template/RoguelikeBattleAbandon.png new file mode 100644 index 0000000000..318d286b79 Binary files /dev/null and b/resource/global/txwy/resource/template/RoguelikeBattleAbandon.png differ diff --git a/resource/global/txwy/resource/template/RoguelikeBattleAbandonConfirm.png b/resource/global/txwy/resource/template/RoguelikeBattleAbandonConfirm.png new file mode 100644 index 0000000000..004c1ccc45 Binary files /dev/null and b/resource/global/txwy/resource/template/RoguelikeBattleAbandonConfirm.png differ diff --git a/resource/tasks.json b/resource/tasks.json index 54adf1d02a..daf58c6c91 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -45,13 +45,23 @@ "text": [], "maxTimes": 10 }, + "Episode11": { + "algorithm": "JustReturn", + "action": "DoNothing", + "sub": [ + "StageTheme", + "SwipeToTheRight", + "StageThemeChapter3ToEpisode11" + ] + }, "Episode10": { "algorithm": "JustReturn", "action": "DoNothing", "sub": [ "StageTheme", "SwipeToTheRight", - "StageThemeChapter3ToEpisode10" + "StageThemeChapter3ToEpisode11", + "StageThemeEpisode11ToEpisode10" ] }, "Episode9": { @@ -60,8 +70,8 @@ "sub": [ "StageTheme", "SwipeToTheRight", - "StageThemeChapter3ToEpisode10", - "StageThemeEpisode10ToEpisode9" + "StageThemeChapter3ToEpisode11", + "StageThemeEpisode11ToEpisode9" ] }, "Episode8": { @@ -214,19 +224,38 @@ "SwipeToTheRight" ] }, - "StageThemeChapter3ToEpisode10": { + "StageThemeChapter3ToEpisode11": { "action": "ClickSelf", "roi": [ - 771, - 133, - 369, - 276 + 759, + 147, + 395, + 410 ] }, - "StageThemeEpisode10ToEpisode9": { + "StageThemeEpisode11ToEpisode10": { "algorithm": "OcrDetect", "action": "ClickSelf", "text": [ + "10" + ], + "roi": [ + 902, + 618, + 161, + 102 + ], + "next": [ + "StageThemeEpisode11ToEpisode10", + "DoNothing" + ], + "rearDelay": 500 + }, + "StageThemeEpisode11ToEpisode9": { + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": [ + "10", "9" ], "roi": [ @@ -236,7 +265,7 @@ 102 ], "next": [ - "StageThemeEpisode10ToEpisode9", + "StageThemeEpisode11ToEpisode9", "DoNothing" ], "rearDelay": 500 @@ -1700,6 +1729,10 @@ "^云$", "山" ], + [ + "峨", + "嵯峨" + ], [ "姜哦", "嵯峨" @@ -2842,9 +2875,8 @@ ] }, "Main": { - "Doc": "base_task: Main", - "algorithm": "JustReturn", - "action": "DoNothing" + "Doc": "base_task", + "template": "empty.png" }, "Fight@Main": { "template": "Terminal.png", @@ -4393,53 +4425,6 @@ 300 ] }, - "RoguelikeRecruitSwipeToTheLeftBegin": { - "algorithm": "JustReturn", - "action": "ClickRect", - "specificRect": [ - 1080, - 200, - 200, - 300 - ], - "preDelay": 300, - "rearDelay": 1000, - "maxTimes": 2, - "Doc": "这里的preDelay作为滑动duration使用,rearDelay作为滑动额外延时使用,maxTimes作为重复次数使用" - }, - "RoguelikeRecruitSwipeToTheLeftEnd": { - "algorithm": "JustReturn", - "action": "ClickRect", - "specificRect": [ - 400, - 200, - 200, - 300 - ] - }, - "RoguelikeRecruitSlowlySwipeRightRect": { - "algorithm": "JustReturn", - "action": "ClickRect", - "specificRect": [ - 980, - 200, - 100, - 300 - ], - "preDelay": 1500, - "rearDelay": 300, - "Doc": "这里的preDelay作为滑动duration使用,rearDelay作为滑动额外延时使用" - }, - "RoguelikeRecruitSlowlySwipeLeftRect": { - "algorithm": "JustReturn", - "action": "ClickRect", - "specificRect": [ - 560, - 200, - 100, - 300 - ] - }, "InfrastOperMoodProgressBar": { "template": "empty.png", "templThreshold_Doc": "这里的templThreshold,作为进度条最小灰度阈值使用", @@ -6217,7 +6202,7 @@ }, "BattleOperCooling": { "template": "empty.png", - "specialThreshold": 850, + "specialThreshold": 1000, "specialThreshold_Doc": "这个任务中作为符合range的像素点数量阈值", "rectMove": [ -45, @@ -6482,60 +6467,6 @@ "07e01e78700e6006e007e007e0076006700e1ffe011800700060008001800700" ] }, - "Roguelike1BattleExitBegin": { - "action": "ClickSelf", - "roi": [ - 3, - 0, - 153, - 154 - ], - "maskRange": [ - 100, - 255 - ], - "next": [ - "Roguelike1BattleAbandon", - "Roguelike1BattleExitBegin" - ] - }, - "Roguelike1BattleAbandon": { - "action": "ClickSelf", - "roi": [ - 648, - 229, - 220, - 246 - ], - "next": [ - "Roguelike1BattleAbandonConfirm", - "Roguelike1BattleAbandon" - ] - }, - "Roguelike1BattleAbandonConfirm": { - "action": "ClickSelf", - "roi": [ - 716, - 416, - 259, - 153 - ], - "next": [ - "Roguelike1BattleAbandonConfirm", - "Stop" - ] - }, - "Roguelike1BattleSpeedUp": { - "algorithm": "JustReturn", - "action": "ClickRect", - "specificRect": [ - 1070, - 20, - 60, - 60 - ], - "preDelay": 3000 - }, "BattleSkillReady": { "roi": [ 0, @@ -6594,2099 +6525,6 @@ 30 ] }, - "Roguelike1@Main": { - "template": "Terminal.png", - "action": "ClickSelf", - "roi": [ - 880, - 100, - 180, - 120 - ], - "next": [ - "Roguelike1@Main", - "Roguelike1@CloseAnno", - "Roguelike1TodoEnter", - "IntegratedStrategies" - ], - "rearDelay": 1000 - }, - "Roguelike1TodoEnter": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 908, - 54, - 372, - 500 - ], - "maskRange": [ - 1, - 255 - ], - "next": [ - "Roguelike1TodoEnter", - "Roguelike1Begin" - ] - }, - "IntegratedStrategies": { - "action": "ClickSelf", - "roi": [ - 963, - 599, - 148, - 121 - ], - "next": [ - "IntegratedStrategies", - "IntegratedStrategiesToRoguelike1" - ] - }, - "IntegratedStrategiesToRoguelike1": { - "algorithm": "OcrDetect", - "action": "ClickSelf", - "text": [ - "进入主题" - ], - "roi": [ - 1006, - 445, - 246, - 157 - ], - "next": [ - "IntegratedStrategiesToRoguelike1", - "Roguelike1Begin" - ] - }, - "Roguelike1@ReturnTo": { - "template": "Return.png", - "templThreshold": 0.7, - "cache": false, - "action": "ClickSelf", - "roi": [ - 0, - 0, - 180, - 80 - ], - "next": [ - "Roguelike1ChooseDifficulty", - "Roguelike1Start", - "Roguelike1ExitThenAbandon", - "Roguelike1Abandon", - "Roguelike1@Main", - "Roguelike1@ReturnTo", - "Roguelike1@ReturnToConfirm", - "Roguelike1@CloseAnno", - "Roguelike1@FromStageSN" - ] - }, - "Roguelike1Begin": { - "algorithm": "JustReturn", - "next": [ - "Roguelike1ChooseDifficulty", - "Roguelike1Start", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose", - "Roguelike2CloseEvent", - "Roguelike2NextLevel", - "Roguelike1ExitThenAbandon", - "Roguelike1Abandon", - "Roguelike1@TodaysSupplies", - "Roguelike1@Main", - "Roguelike1@CloseAnno", - "Roguelike1TodoEnter", - "Roguelike1Continue", - "Roguelike1@ReturnTo", - "Roguelike1@ReturnToConfirm", - "Roguelike1@OfflineConfirm", - "Roguelike1@StartToWakeUp", - "Roguelike1@StartUpConnectingFlag", - "Roguelike1@FromStageSN" - ] - }, - "Roguelike1Continue": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1032, - 487, - 248, - 215 - ], - "rearDelay": 500, - "next": [ - "Roguelike1MissionFailedFlag2", - "Roguelike1ExitThenAbandon" - ] - }, - "Roguelike1ChooseDifficulty": { - "action": "ClickSelf", - "roi": [ - 1061, - 373, - 208, - 71 - ], - "next": [ - "Roguelike1Start" - ] - }, - "Roguelike1Start": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1026, - 470, - 254, - 248 - ], - "rearDelay": 2000, - "next": [ - "Roguelike1Recruit1", - "Roguelike1InitalDrop", - "Roguelike1Start" - ] - }, - "Roguelike1InitalDrop": { - "Doc": "古堡观光(简单模式)初始会有一个免费道具,点确认。月度小队也有,再多几次", - "action": "ClickSelf", - "roi": [ - 569, - 583, - 141, - 137 - ], - "next": [ - "Roguelike1Recruit1", - "Roguelike1InitalDrop" - ] - }, - "Roguelike1DialogSkip": { - "Doc": "月度小队,跳过对话", - "action": "ClickSelf", - "roi": [ - 1106, - 0, - 174, - 139 - ], - "next": [ - "Roguelike1DialogSkip", - "Roguelike1DialogSkipConfirm" - ] - }, - "Roguelike1DialogSkipConfirm": { - "action": "ClickSelf", - "roi": [ - 725, - 409, - 249, - 169 - ], - "next": [ - "Roguelike1DialogSkip", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike1LastReward": { - "Doc": "你的上一次探索突破了至少两层困难,这一次可以获得更多支援——热水壶", - "action": "ClickSelf", - "cache": false, - "roi": [ - 174, - 151, - 935, - 533 - ], - "next": [ - "Roguelike1LastRewardConfirm" - ] - }, - "Roguelike1LastReward2": { - "Doc": "你的上一次探索突破了至少两层困难,这一次可以获得更多支援—— 5 源石锭", - "action": "ClickSelf", - "cache": false, - "roi": [ - 174, - 151, - 935, - 533 - ], - "next": [ - "Roguelike1LastRewardConfirm" - ] - }, - "Roguelike1LastReward3": { - "Doc": "你的上一次探索突破了至少两层困难,这一次可以获得更多支援—— 3 目标生命", - "action": "ClickSelf", - "cache": false, - "roi": [ - 174, - 151, - 935, - 533 - ], - "next": [ - "Roguelike1LastRewardConfirm" - ] - }, - "Roguelike2LastReward4": { - "template": "empty.png", - "templThreshold": 2.0 - }, - "Roguelike1LastRewardRand": { - "Doc": "你的上一次探索突破了至少两层困难,这一次可以获得更多支援—— 问号", - "action": "ClickSelf", - "cache": false, - "roi": [ - 174, - 151, - 935, - 533 - ], - "next": [ - "Roguelike1LastRewardConfirm" - ] - }, - "Roguelike1LastRewardConfirm": { - "template": "Roguelike1RecruitConfirm.png", - "action": "ClickSelf", - "cache": false, - "roi": [ - 174, - 151, - 935, - 533 - ], - "next": [ - "Roguelike1Team3", - "Roguelike1CloseCollection" - ] - }, - "Roguelike1Custom-HijackSquad": { - "algorithm": "OcrDetect", - "text": [], - "roi": [ - 0, - 383, - 1280, - 142 - ], - "ocrReplace": [] - }, - "Roguelike1Custom-HijackRoles": { - "algorithm": "OcrDetect", - "text": [], - "roi": [ - 54, - 356, - 1172, - 183 - ], - "ocrReplace": [] - }, - "Roguelike1Custom-HijackCoChar": { - "algorithm": "OcrDetect", - "text": [], - "roi": [ - 186, - 298, - 913, - 200 - ], - "ocrReplace": [], - "preDelay": 1000 - }, - "Roguelike1Recruit1": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 153, - 1280, - 532 - ], - "next": [ - "Roguelike1RecruitConfirm" - ] - }, - "Roguelike1RecruitConfirm": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 483, - 1280, - 200 - ], - "next": [ - "Roguelike1LastReward", - "Roguelike1LastReward2", - "Roguelike1LastReward3", - "Roguelike2LastReward4", - "Roguelike1LastRewardRand", - "Roguelike1Team3", - "Roguelike1CloseCollection", - "Roguelike1DialogSkip", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose", - "Roguelike2MapObject" - ] - }, - "Roguelike1CloseCollection": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 569, - 400, - 140, - 139 - ], - "next": [ - "Roguelike1LastReward", - "Roguelike1LastReward2", - "Roguelike1LastReward3", - "Roguelike2LastReward4", - "Roguelike1LastRewardRand", - "Roguelike1Team3" - ] - }, - "Roguelike1Team3": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 601, - 153, - 363, - 529 - ], - "next": [ - "Roguelike1TeamConfirm" - ] - }, - "Roguelike1TeamConfirm": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 153, - 1280, - 529 - ], - "next": [ - "Roguelike1RecruitMain" - ] - }, - "Roguelike2MapObject": { - "template": "empty.png", - "templThreshold": 2.0 - }, - "Roguelike1RecruitMain": { - "action": "ClickSelf", - "template": "Roguelike1Recruit.png", - "templThreshold": 0.6, - "cache": false, - "roi": [ - 190, - 470, - 300, - 154 - ], - "next": [ - "Roguelike1ChooseOperFlag", - "Roguelike1RecruitCloseGuide" - ], - "rearDelay": 1000 - }, - "Roguelike1RecruitOther": { - "action": "ClickSelf", - "template": "Roguelike1Recruit.png", - "templThreshold": 0.6, - "cache": false, - "roi": [ - 190, - 470, - 900, - 154 - ], - "next": [ - "Roguelike1ChooseOperFlag", - "Roguelike1RecruitCloseGuide" - ], - "rearDelay": 1000 - }, - "Roguelike1RecruitCloseGuide": { - "action": "ClickSelf", - "roi": [ - 56, - 41, - 194, - 134 - ], - "next": [ - "Roguelike1ChooseOperFlag" - ] - }, - "Roguelike1ChooseOper": { - "Doc": "本任务注册了插件 RoguelikeRecruitTaskPlugin", - "algorithm": "JustReturn", - "action": "DoNothing", - "next": [ - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose", - "Roguelike1ChooseOperConfirm" - ] - }, - "Roguelike1RecruitSwipeMaxTime": { - "template": "empty.png", - "maxTimes_Doc": "这个参数是肉鸽招募时,向右划动的最大次数", - "maxTimes": 4 - }, - "Roguelike1RecruitOcrFlag": { - "roi": [ - 525, - 110, - 640, - 500 - ], - "templThreshold": 0.9 - }, - "Roguelike1RecruitOcr": { - "algorithm": "OcrDetect", - "text": [], - "fullMatch": true, - "roi": [ - 13, - 26, - 120, - 23 - ], - "specificRect": [ - 100, - 0, - 0, - 0 - ], - "specificRect_Doc": "x拿来当文字灰度二值化下限用" - }, - "Roguelike1RecruitElite0": { - "roi": [ - -170, - -60, - 60, - 50 - ] - }, - "Roguelike1RecruitElite1": { - "roi": [ - -170, - -60, - 60, - 50 - ] - }, - "Roguelike1RecruitElite2": { - "roi": [ - -170, - -60, - 60, - 50 - ] - }, - "Roguelike1RecruitLevel": { - "template": "empty.png", - "roi": [ - -171, - 0, - 15, - 11 - ] - }, - "Roguelike1ChooseOperFlag": { - "template": "Roguelike1ChooseOperConfirm.png", - "action": "DoNothing", - "roi": [ - 1016, - 602, - 264, - 118 - ], - "next": [ - "Roguelike1ChooseOper", - "Roguelike1RecruitCloseGuide" - ] - }, - "Roguelike1ChooseOperConfirm": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1016, - 602, - 264, - 118 - ], - "next": [ - "Roguelike1RecruitSkip", - "Roguelike1TraderRandomShopping", - "Roguelike1StageEncounterGiveUpRecruitConfirm", - "Roguelike1ChooseOperConfirm", - "Roguelike1RecruitWithoutButton" - ] - }, - "Roguelike1RecruitSkip": { - "template": "RecruitSkip.png", - "action": "ClickSelf", - "roi": [ - 1100, - 0, - 180, - 150 - ], - "next": [ - "Roguelike1RecruitSkip", - "Roguelike1RecruitOther", - "Roguelike1TraderRandomShopping", - "Roguelike1StageTraderLeave", - "Roguelike1DropsFlag", - "Roguelike1ChooseOperFlag", - "Roguelike1RecruitWithoutButton" - ] - }, - "Roguelike1RecruitWithoutButton": { - "algorithm": "JustReturn", - "action": "ClickRect", - "specificRect": [ - 1180, - 15, - 85, - 60 - ], - "next": [ - "Roguelike1RecruitOther", - "Roguelike1EnterAfterRecruit", - "Roguelike1TraderRandomShopping", - "Roguelike1StageTraderLeave", - "Roguelike1DropsFlag", - "Roguelike1ChooseOperFlag", - "Roguelike2DiceConfirm", - "Roguelike1RecruitWithoutButton" - ] - }, - "Roguelike1EnterAfterRecruit": { - "action": "ClickSelf", - "roi": [ - 1078, - 234, - 202, - 239 - ], - "rearDelay": 3000, - "next": [ - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike1StageTrader": { - "Doc": "诡意行商(交易所)", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "templThreshold": 0.85, - "next": [ - "Roguelike1StageTraderEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike1StageTraderEnter": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1035, - 374, - 226, - 220 - ], - "rearDelay": 3000, - "next": [ - "Roguelike1StageTraderInvestSystem", - "Roguelike1TraderRandomShopping", - "Roguelike1StageTraderLeave" - ] - }, - "Roguelike1TraderRandomShopping": { - "Doc": "该任务注册了 RoguelikeShoppingTaskPlugin,若是点完了仍在当前界面,说明没啥要买的,直接离开商店(next 里的 Roguelike1StageTraderLeave)", - "action": "ClickSelf", - "templThreshold": 0.7, - "cache": false, - "roi": [ - 480, - 240, - 750, - 280 - ], - "rectMove": [ - -40, - -100, - 20, - 60 - ], - "next": [ - "Roguelike1TraderRandomShoppingConfirm", - "Roguelike1TraderRandomShoppingCancel", - "Roguelike1StageTraderLeave", - "Roguelike1StageTraderLeaveConfirm" - ], - "maskRange": [ - 1, - 255 - ] - }, - "Roguelike1TraderShopping": { - "template": "Roguelike1TraderRandomShopping.png", - "templThreshold": 0.7, - "roi": [ - 480, - 240, - 750, - 280 - ], - "maskRange": [ - 1, - 255 - ] - }, - "Roguelike1TraderShoppingOcr": { - "algorithm": "OcrDetect", - "text": [], - "roi": [ - -120, - -160, - 190, - 35 - ], - "ocrReplace": [] - }, - "Roguelike1TraderShoppingOver": { - "template": "Roguelike1StageTraderLeave.png", - "action": "ClickSelf", - "cache": false, - "roi": [ - 1046, - 443, - 234, - 204 - ] - }, - "Roguelike1TraderRandomShoppingConfirm": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 872, - 425, - 221, - 136 - ], - "next": [ - "Roguelike1TraderRandomShopping", - "Roguelike1ChooseOperFlag", - "Roguelike1StageTraderLeave" - ] - }, - "Roguelike1TraderRandomShoppingCancel": { - "template": "Roguelike1StageTraderInvestCancel.png", - "action": "ClickSelf", - "cache": false, - "roi": [ - 350, - 350, - 500, - 250 - ], - "next": [ - "Roguelike1StageTraderLeave" - ] - }, - "Roguelike1StageSafeHouse": { - "Doc": "安全的角落", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "templThreshold": 0.85, - "next": [ - "Roguelike1StageSafeHouseEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike2StageRegionalCommissioning": { - "template": "empty.png", - "templThreshold": 2.0, - "templThreshold_Doc": "means disabled" - }, - "Roguelike2StageGambling": { - "template": "empty.png", - "templThreshold": 2.0, - "templThreshold_Doc": "means disabled" - }, - "Roguelike2DiceConfirm": { - "template": "empty.png", - "templThreshold": 2.0, - "templThreshold_Doc": "means disabled" - }, - "Roguelike1StageSafeHouseEnter": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1037, - 374, - 221, - 221 - ], - "next": [ - "Roguelike1ChooseOperFlag", - "Roguelike1StageEncounterFree", - "Roguelike1StageEncounterLeave", - "Roguelike1StageEncounterUnknown", - "Roguelike1StageEncounterClickToLeave" - ] - }, - "Roguelike1StageTraderInvestSystem": { - "templThreshold": 0.75, - "action": "ClickSelf", - "roi": [ - 365, - 51, - 276, - 216 - ], - "exceededNext": [ - "Roguelike1TraderRandomShopping", - "Roguelike1StageTraderLeave" - ], - "next": [ - "Roguelike1StageTraderInvestSystemEnter", - "Roguelike1TraderRandomShopping", - "Roguelike1StageTraderLeave" - ] - }, - "Roguelike1StageTraderInvestSystemEnter": { - "action": "ClickSelf", - "roi": [ - 417, - 228, - 502, - 247 - ], - "next": [ - "Roguelike1StageTraderInvestSystemError", - "Roguelike1StageTraderInvestConfirm", - "Roguelike1StageTraderInvestCancel" - ] - }, - "Roguelike1StageTraderInvestConfirm": { - "action": "ClickSelf", - "roi": [ - 852, - 422, - 278, - 144 - ], - "rearDelay": 500, - "next": [ - "Roguelike1StageTraderInvestSystemError", - "Roguelike1StageTraderInvestSystemFull", - "Roguelike1StageTraderInvestConfirm", - "Roguelike1StageTraderInvestCancel" - ] - }, - "Roguelike1StageTraderInvestSystemError": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 508, - 204, - 235, - 240 - ], - "next": [ - "Roguelike1StageTraderInvestCancel" - ] - }, - "Roguelike1StageTraderInvestSystemFull": { - "algorithm": "OcrDetect", - "cache": false, - "reduceOtherTimes": [ - "Roguelike1StageTraderInvestConfirm" - ], - "text": [ - "当前储备余额已达上限", - "当前", - "上限" - ], - "roi": [ - 982, - 28, - 298, - 289 - ], - "next": [ - "Roguelike1StageTraderInvestCancel" - ] - }, - "Roguelike1StageTraderInvestCancel": { - "action": "ClickSelf", - "roi": [ - 507, - 418, - 242, - 149 - ], - "exceededNext": [ - "Roguelike1ExitThenAbandon" - ], - "next": [ - "Roguelike1StageTraderInvestSystemLeave" - ] - }, - "Roguelike1StageTraderInvestSystemLeave": { - "action": "ClickSelf", - "roi": [ - 682, - 420, - 245, - 143 - ], - "next": [ - "Roguelike1TraderRandomShopping", - "Roguelike1StageTraderLeave" - ] - }, - "Roguelike1StageTraderLeave": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1046, - 443, - 234, - 204 - ], - "next": [ - "Roguelike1StageTraderLeaveConfirm", - "Roguelike1StageTraderLeave" - ] - }, - "Roguelike1ExitThenAbandon": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 0, - 320, - 160 - ], - "next": [ - "Roguelike1ExitThenAbandon", - "Roguelike1Abandon", - "Roguelike2DiceConfirmThenAbandon", - "Roguelike2DataTraceback" - ] - }, - "Roguelike2DataTraceback": { - "template": "empty.png", - "templThreshold": 2.0 - }, - "Roguelike1Abandon": { - "action": "ClickSelf", - "roi": [ - 1076, - 243, - 177, - 179 - ], - "next": [ - "Roguelike1AbandonConfirm", - "Roguelike1Abandon" - ] - }, - "Roguelike1AbandonConfirm": { - "action": "ClickSelf", - "roi": [ - 720, - 413, - 249, - 168 - ], - "next": [ - "Roguelike1MissionFailedFlag2", - "Roguelike1Start" - ] - }, - "Roguelike1StageTraderLeaveConfirm": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 985, - 447, - 295, - 203 - ], - "exceededNext": [ - "Roguelike2DiceConfirmThenAbandon", - "Roguelike1ExitThenAbandon" - ], - "next": [ - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike2DiceConfirmThenAbandon": { - "template": "empty.png", - "templThreshold": 2.0 - }, - "Roguelike2CloseCollectionContinue": { - "template": "empty.png", - "templThreshold": 2.0 - }, - "Roguelike2CloseCollectionClose": { - "template": "empty.png", - "templThreshold": 2.0 - }, - "Roguelike1StageEncounter": { - "Doc": "不期而遇(随机奖励)", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "templThreshold": 0.85, - "next": [ - "Roguelike1StageEncounterEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike1StageBoons": { - "Doc": "古堡馈赠(随机奖励)", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "templThreshold": 0.85, - "next": [ - "Roguelike1StageEncounterEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ] - }, - "Roguelike1StageEncounterEnter": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1037, - 374, - 221, - 221 - ], - "next": [ - "Roguelike1ChooseOperFlag", - "Roguelike1StageEncounterFree", - "Roguelike1StageEncounterLeave", - "Roguelike1StageEncounterUnknown", - "Roguelike1StageEncounterClickToLeave" - ] - }, - "Roguelike1StageEncounterFree": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1100, - 0, - 180, - 700 - ], - "preDelay": 500, - "templThreshold": 0.99, - "next": [ - "Roguelike1StageEncounterLeaveConfirm", - "Roguelike1StageEncounterLeave", - "Roguelike1StageEncounterUnknown", - "Roguelike1StageEncounterFree", - "Roguelike1ChooseOperFlag" - ] - }, - "Roguelike1StageEncounterLeave": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1100, - 0, - 180, - 700 - ], - "preDelay": 500, - "templThreshold": 0.97, - "next": [ - "Roguelike1StageEncounterLeaveConfirm", - "Roguelike1StageEncounterFree", - "Roguelike1StageEncounterUnknown", - "Roguelike1StageEncounterLeave", - "Roguelike1ChooseOperFlag" - ] - }, - "Roguelike1StageEncounterUnknown": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 950, - 50, - 320, - 580 - ], - "templThreshold": 0.91, - "preDelay": 1500, - "next": [ - "Roguelike1ChooseOperFlag", - "Roguelike1StageEncounterLeaveConfirm", - "Roguelike1StageEncounterFree", - "Roguelike1StageEncounterLeave", - "Roguelike1StageEncounterUnknown" - ] - }, - "Roguelike1StageEncounterLeaveConfirm": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1069, - 0, - 211, - 700 - ], - "rearDelay": 1000, - "next": [ - "Roguelike1ChooseOperFlag", - "Roguelike1StageEncounterFree", - "Roguelike1StageEncounterLeave", - "Roguelike1StageEncounterUnknown", - "Roguelike1StageEncounterSpecialClose", - "Roguelike1StageCambatDpsEnter", - "Roguelike1StageEmergencyDpsEnter", - "Roguelike1ClickToDrops" - ] - }, - "Roguelike1StageEncounterSpecialClose": { - "Doc": "关掉“大锁”", - "action": "ClickSelf", - "roi": [ - 570, - 400, - 140, - 138 - ], - "next": [ - "Roguelike1StageEncounterSpecialClose", - "Roguelike1ClickToDrops" - ] - }, - "Roguelike1StageEncounterGiveUpRecruitConfirm": { - "action": "ClickSelf", - "roi": [ - 613, - 410, - 424, - 171 - ], - "next": [ - "Roguelike1TraderRandomShopping", - "Roguelike1StageTraderLeave", - "Roguelike1DropsFlag", - "Roguelike1ClickToDrops" - ] - }, - "Roguelike1StageEncounterClickToLeave": { - "algorithm": "JustReturn", - "action": "ClickRect", - "specificRect": [ - 600, - 600, - 50, - 50 - ], - "next": [ - "Roguelike1ChooseOperFlag", - "Roguelike1StageEncounterFree", - "Roguelike1StageEncounterLeave", - "Roguelike1StageEncounterUnknown", - "Roguelike1StageEncounterClickToLeave" - ] - }, - "Roguelike1StageCambatDps": { - "Doc": "普通作战", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "next": [ - "Roguelike1StageCambatDpsEnter", - "Roguelike1StageEmergencyDpsEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ], - "next_Doc": "普通作战和紧急作战的图比较像,有时候会识别错,这里的next把两个开始的按钮都放进来,提高容错" - }, - "Roguelike1StageCambatDpsEnter": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1036, - 371, - 223, - 223 - ], - "next": [ - "Roguelike1QuickFormation" - ] - }, - "Roguelike1StageEmergencyDps": { - "Doc": "紧急作战", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "next": [ - "Roguelike1StageEmergencyDpsEnter", - "Roguelike1StageCambatDpsEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ], - "next_Doc": "普通作战和紧急作战的图比较像,有时候会识别错,这里的next把两个开始的按钮都放进来,提高容错" - }, - "Roguelike1StageEmergencyDpsEnter": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1036, - 371, - 223, - 223 - ], - "next": [ - "Roguelike1QuickFormation" - ] - }, - "Roguelike1StageDreadfulFoe": { - "Doc": "险路恶敌(boss关卡)", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 53, - 1280, - 554 - ], - "next": [ - "Roguelike1StageDreadfulFoeEnter", - "Roguelike1StageEmergencyDpsEnter", - "Roguelike1StageCambatDpsEnter", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose" - ], - "next_Doc": "普通作战和紧急作战的图比较像,有时候会识别错,这里的next把两个开始的按钮都放进来,提高容错" - }, - "Roguelike2StageDreadfulFoe-5": { - "template": "empty.png", - "templThreshold": 2.0, - "templThreshold_Doc": "means disabled" - }, - "Roguelike2StageEmergencyTransportation": { - "template": "empty.png", - "templThreshold": 2.0, - "templThreshold_Doc": "means disabled" - }, - "Roguelike2StageWindAndRain": { - "template": "empty.png", - "templThreshold": 2.0, - "templThreshold_Doc": "means disabled" - }, - "Roguelike1StageDreadfulFoeEnter": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 1036, - 371, - 223, - 223 - ], - "next": [ - "Roguelike1QuickFormation" - ] - }, - "Roguelike1QuickFormation": { - "Doc": "本任务注册了插件 RoguelikeFormationTaskPlugin", - "action": "ClickSelf", - "roi": [ - 817, - 0, - 402, - 146 - ], - "next": [ - "Roguelike1FormationConfirm" - ], - "rearDelay": 2000 - }, - "Roguelike1QuickFormationDelay": { - "algorithm": "JustReturn", - "action": "DoNothing", - "rearDelay": 100 - }, - "Roguelike1QuickFormationClearAndReselect": { - "action": "ClickSelf", - "roi": [ - 821, - 608, - 139, - 112 - ], - "next": [ - "Roguelike1QuickFormationClearAndReselect-Confirm" - ] - }, - "Roguelike1QuickFormationClearAndReselect-Confirm": { - "template": "Roguelike1FormationConfirm.png", - "action": "ClickSelf", - "roi": [ - 1015, - 601, - 265, - 119 - ], - "next": [ - "Roguelike1QuickFormationClearAndReselect-Formation", - "Roguelike1QuickFormationClearAndReselect-Confirm" - ] - }, - "Roguelike1QuickFormationClearAndReselect-Formation": { - "template": "Roguelike1QuickFormation.png", - "action": "ClickSelf", - "roi": [ - 817, - 0, - 402, - 146 - ], - "next": [ - "Roguelike1QuickFormationClearAndReselect-Formation", - "Stop" - ], - "rearDelay": 2000 - }, - "Roguelike1FormationOper": { - "cache": false, - "roi": [ - 363, - 11, - 891, - 668 - ], - "maskRange": [ - 1, - 255 - ], - "templThreshold": 0.9 - }, - "Roguelike1FormationOperSelected": { - "template": "empty.png", - "templThreshold": 1000, - "templThreshold_Doc": "这个任务中作为符合range的像素点数量阈值", - "maskRange_Doc": "拿来做H通道的范围", - "maskRange": [ - 95, - 105 - ], - "specificRect_Doc": "拿来做S、V通道的范围", - "specificRect": [ - 170, - 210, - 70, - 140 - ] - }, - "Roguelike1FormationConfirm": { - "action": "ClickSelf", - "roi": [ - 1015, - 601, - 265, - 119 - ], - "next": [ - "Roguelike1StartAction" - ] - }, - "Roguelike1SkillSelectionFlag": { - "templThreshold": 0.9, - "maskRange": [ - 1, - 255 - ] - }, - "Roguelike1SkillSelectionName": { - "algorithm": "OcrDetect", - "fullMatch": true, - "text": [], - "roi": [ - 210, - 8, - 120, - 20 - ], - "specificRect": [ - 100, - 0, - 0, - 0 - ], - "specificRect_Doc": "x拿来当文字灰度二值化下限用" - }, - "Roguelike1SkillSelectionMove1": { - "algorithm": "JustReturn", - "rectMove_Doc": "技能1相对flag的坐标", - "rectMove": [ - 180, - -40, - 40, - 30 - ], - "rearDelay": 200 - }, - "Roguelike1SkillSelectionMove2": { - "algorithm": "JustReturn", - "rectMove_Doc": "技能2相对flag的坐标", - "rectMove": [ - 240, - -40, - 30, - 30 - ] - }, - "Roguelike1SkillSelectionMove3": { - "algorithm": "JustReturn", - "rectMove_Doc": "技能3相对flag的坐标", - "rectMove": [ - 300, - -40, - 30, - 30 - ] - }, - "Roguelike1SkillSelectionTeamFull": { - "cache": false, - "roi": [ - 135, - 22, - 1032, - 668 - ], - "maskRange": [ - 200, - 255 - ] - }, - "Roguelike1StartAction": { - "template": "Roguelike1StartAction.png", - "Doc": "本任务注册了插件 RoguelikeSkillSelectionTaskPlugin、RoguelikeBattleTaskPlugin", - "action": "ClickSelf", - "preDelay": 500, - "roi": [ - 905, - 593, - 375, - 127 - ], - "next": [ - "Roguelike1InBattleFlag", - "Roguelike1MissionCompletedFlag", - "Roguelike1MissionFailedFlag", - "Roguelike1MissionFailedFlag2", - "Roguelike1GamePassSkip1", - "Roguelike1GamePassTheEndConfirm", - "Roguelike1GamePass" - ] - }, - "Roguelike2NextLevel": { - "template": "empty.png", - "templThreshold": 2.0 - }, - "Roguelike1GamePassSkip1": { - "action": "ClickSelf", - "roi": [ - 1090, - 0, - 190, - 144 - ], - "next": [ - "Roguelike1GamePassSkip1Confirm" - ] - }, - "Roguelike1GamePassSkip1Confirm": { - "action": "ClickSelf", - "roi": [ - 715, - 282, - 171, - 155 - ], - "next": [ - "Roguelike2DataTraceback", - "Roguelike1GamePassSkip2", - "Roguelike1GamePassTheEndConfirm", - "Roguelike1GamePass" - ] - }, - "Roguelike1GamePassSkip2": { - "action": "ClickSelf", - "roi": [ - 1109, - 0, - 171, - 138 - ], - "next": [ - "Roguelike1GamePassTheEndConfirm", - "Roguelike1GamePass", - "Roguelike1ClickToStartPoint" - ] - }, - "Roguelike1GamePassTheEndConfirm": { - "action": "ClickSelf", - "roi": [ - 554, - 512, - 177, - 161 - ], - "next": [ - "Roguelike1GamePass" - ] - }, - "Roguelike1GamePass": { - "cache": false, - "roi": [ - 400, - 0, - 500, - 300 - ], - "next": [ - "Roguelike1ClickToStartPoint" - ] - }, - "Roguelike1WaitBattleStart": { - "Doc": "点了开始行动之后,可能会网络不好一直loading,用这个任务等一会", - "template": "Roguelike1QuickFormation.png", - "action": "DoNothing", - "roi": [ - 817, - 0, - 402, - 146 - ], - "next": [ - "Roguelike1WaitBattleStart" - ] - }, - "Roguelike1InBattleFlag": { - "template": "BattleOfficiallyBegin.png", - "roi": [ - 1165, - 20, - 65, - 65 - ], - "maskRange": [ - 100, - 255 - ], - "action": "DoNothing", - "rearDelay": 5000, - "next": [ - "Roguelike1InBattleFlag", - "Roguelike1MissionCompletedFlag", - "Roguelike1MissionFailedFlag", - "Roguelike1MissionFailedFlag2" - ] - }, - "Roguelike1MissionCompletedFlag": { - "roi": [ - 0, - 0, - 148, - 143 - ], - "next": [ - "Roguelike1ClickToDrops" - ] - }, - "Roguelike1ClickToDrops": { - "algorithm": "JustReturn", - "action": "ClickRect", - "specificRect": [ - 600, - 600, - 50, - 50 - ], - "rearDelay": 500, - "next": [ - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose", - "Roguelike1ChooseOperFlag", - "Roguelike1StageEncounterSpecialClose", - "Roguelike1TraderRandomShopping", - "Roguelike1StageTraderLeave", - "Roguelike1DropsFlag", - "Roguelike1@TodaysSupplies", - "Roguelike1@Main", - "Roguelike1@CloseAnno", - "Roguelike1@OfflineConfirm", - "Roguelike1@StartToWakeUp", - "Roguelike1@StartUpConnectingFlag", - "Roguelike1ClickToDrops" - ] - }, - "Roguelike1DropsFlag": { - "roi": [ - 875, - 601, - 152, - 119 - ], - "next": [ - "Roguelike1GetDrop1", - "Roguelike1GetDrop2", - "Roguelike1GetDrop3", - "Roguelike1GetDropSelect", - "Roguelike1GetDropRecruit", - "Roguelike2GetDropBox", - "Roguelike1GetDropCompleted", - "Roguelike1GetDropLeave", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose", - "Roguelike1ChooseOperFlag", - "Roguelike1StageEncounterFree", - "Roguelike1StageEncounterLeave", - "Roguelike1StageEncounterUnknown", - "Roguelike1StageEncounterSpecialClose", - "Roguelike1EnterAfterRecruit", - "Roguelike1StageTraderLeave", - "Roguelike2CloseEvent", - "Roguelike1DialogSkip" - ] - }, - "Roguelike2CloseEvent": { - "template": "empty.png", - "templThreshold": 2.0, - "templThreshold_Doc": "means disabled" - }, - "Roguelike1GetDrop1": { - "Doc": "源石锭,绿色的“拿走”按钮", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 471, - 1280, - 157 - ], - "templThreshold": 0.85, - "rearDelay": 1000, - "next": [ - "Roguelike1DropsFlag", - "Roguelike1ChooseOperFlag" - ] - }, - "Roguelike1GetDrop2": { - "Doc": "希望,黄色的“拿走”按钮", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 471, - 1280, - 157 - ], - "templThreshold": 0.85, - "rearDelay": 1000, - "next": [ - "Roguelike1DropsFlag", - "Roguelike1ChooseOperFlag", - "Roguelike1ClickToDrops" - ] - }, - "Roguelike1GetDrop3": { - "Doc": "未知的剧目,黄色的“翻开”按钮", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 471, - 1280, - 157 - ], - "rearDelay": 1000, - "templThreshold": 0.85, - "next": [ - "Roguelike1ChooseOperFlag", - "Roguelike1ClickToDrops" - ] - }, - "Roguelike2GetDropBox": { - "template": "empty.png", - "templThreshold": 2.0, - "templThreshold_Doc": "means disabled" - }, - "Roguelike1GetDropRecruit": { - "Doc": "招募券,白色的“招募”按钮", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 471, - 1280, - 157 - ], - "rearDelay": 1000, - "next": [ - "Roguelike1ChooseOperFlag", - "Roguelike1GetDrop1", - "Roguelike1GetDrop2", - "Roguelike1GetDrop3", - "Roguelike1GetDropSelect", - "Roguelike1GetDropRecruit", - "Roguelike2GetDropBox", - "Roguelike1GetDropCompleted", - "Roguelike1GetDropLeave" - ] - }, - "Roguelike1GetDropSelect": { - "Doc": "“选择”按钮,有可能是招募二选一,也有收藏品二选一", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 471, - 1280, - 157 - ], - "rearDelay": 2000, - "next": [ - "Roguelike1GetDropSelectRecruit", - "Roguelike1GetDropSelectReward", - "Roguelike1ChooseOperFlag", - "Roguelike1GetDropCompleted", - "Roguelike1GetDropSelect" - ] - }, - "Roguelike1GetDropSelectRecruit": { - "template": "Roguelike1GetDropRecruit.png", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 420, - 1280, - 175 - ], - "rearDelay": 1000, - "templThreshold": 0.85, - "next": [ - "Roguelike1ChooseOperFlag", - "Roguelike1GetDropSelectRecruit" - ] - }, - "Roguelike1GetDropSelectReward": { - "cache": false, - "action": "ClickSelf", - "roi": [ - 0, - 420, - 1280, - 175 - ], - "rearDelay": 1000, - "next": [ - "Roguelike1ClickToDrops", - "Roguelike1GetDropSelectReward", - "Roguelike1ChooseOperFlag" - ] - }, - "Roguelike1GetDropCompleted": { - "action": "ClickRect", - "specificRect": [ - 600, - 600, - 50, - 50 - ], - "roi": [ - 488, - 206, - 302, - 289 - ], - "rearDelay": 3000, - "next": [ - "Roguelike1GetDrop1", - "Roguelike1GetDrop2", - "Roguelike1GetDrop3", - "Roguelike1GetDropSelect", - "Roguelike1GetDropRecruit", - "Roguelike2GetDropBox", - "Roguelike1ChooseOperFlag", - "Roguelike1ClickToDrops" - ] - }, - "Roguelike1GetDropLeave": { - "Doc": "不要了,走了(", - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 218, - 1280, - 296 - ], - "next": [ - "Roguelike1GetDropLeaveConfirm", - "Roguelike1DropsFlag", - "Roguelike1ChooseOperFlag" - ] - }, - "Roguelike1GetDropLeaveConfirm": { - "action": "ClickSelf", - "cache": false, - "roi": [ - 0, - 484, - 1280, - 138 - ], - "next": [ - "Roguelike1DropsFlag" - ] - }, - "Roguelike1MissionFailedFlag": { - "roi": [ - 504, - 163, - 480, - 267 - ], - "next": [ - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose", - "Roguelike1ClickToStartPoint" - ] - }, - "Roguelike1MissionFailedFlag2": { - "cache": false, - "roi": [ - 473, - 0, - 351, - 194 - ], - "next": [ - "Roguelike1ClickToStartPoint" - ] - }, - "Roguelike2CommissionedMissionCompleted": { - "template": "empty.png", - "templThreshold": 2.0, - "templThreshold_Doc": "means disabled" - }, - "Roguelike1ClickToStartPoint": { - "algorithm": "JustReturn", - "action": "ClickRect", - "specificRect": [ - 600, - 600, - 50, - 50 - ], - "rearDelay": 1000, - "next": [ - "Roguelike1Start", - "Roguelike1StageTrader", - "Roguelike1StageSafeHouse", - "Roguelike2StageWindAndRain", - "Roguelike2StageEmergencyTransportation", - "Roguelike1StageEncounter", - "Roguelike1StageBoons", - "Roguelike1StageCambatDps", - "Roguelike1StageEmergencyDps", - "Roguelike1StageDreadfulFoe", - "Roguelike2StageDreadfulFoe-5", - "Roguelike2StageRegionalCommissioning", - "Roguelike2StageGambling", - "Roguelike2CommissionedMissionCompleted", - "Roguelike2DiceConfirm", - "Roguelike2CloseCollectionContinue", - "Roguelike2CloseCollectionClose", - "Roguelike1GamePass", - "Roguelike1@TodaysSupplies", - "Roguelike1@Main", - "Roguelike1@CloseAnno", - "Roguelike1TodoEnter", - "Roguelike1Continue", - "Roguelike1@ReturnTo", - "Roguelike1@ReturnToConfirm", - "Roguelike1@OfflineConfirm", - "Roguelike1@StartToWakeUp", - "Roguelike1@StartUpConnectingFlag", - "Roguelike1ClickToStartPoint" - ] - }, "StageDrops-StageName": { "algorithm": "OcrDetect", "action": "DoNothing", @@ -9020,5 +6858,3206 @@ 254, 138 ] + }, + "Begin": { + "Doc": "Roguelike base task", + "algorithm": "JustReturn" + }, + "FromIntegratedStrategies": { + "algorithm": "OcrDetect", + "action": "ClickSelf", + "text": [ + "进入主题" + ], + "roi": [ + 1006, + 445, + 246, + 157 + ], + "next": [ + "FromIntegratedStrategies", + "Begin" + ] + }, + "IntegratedStrategies": { + "action": "ClickSelf", + "roi": [ + 963, + 599, + 148, + 121 + ], + "next": [ + "IntegratedStrategies", + "FromIntegratedStrategies" + ] + }, + "Roguelike@Abandon": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "roi": [ + 1076, + 243, + 177, + 179 + ], + "next": [ + "Roguelike@AbandonConfirm", + "Roguelike@Abandon" + ] + }, + "Roguelike@AbandonConfirm": { + "action": "ClickSelf", + "roi": [ + 720, + 413, + 249, + 168 + ], + "next": [ + "Roguelike@MissionFailedFlag2", + "Roguelike@StartExplore" + ] + }, + "Roguelike@ChooseDifficulty": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "roi": [ + 1061, + 373, + 208, + 71 + ], + "next": [ + "Roguelike@StartExplore" + ] + }, + "Roguelike@ChooseOper": { + "Doc": "本任务注册了插件 RoguelikeRecruitTaskPlugin", + "algorithm": "JustReturn", + "action": "DoNothing" + }, + "Roguelike@ChooseOperConfirm": { + "action": "ClickSelf", + "cache": false, + "roi": [ + 1016, + 602, + 264, + 118 + ], + "next": [ + "Roguelike@RecruitSkip", + "Roguelike@TraderRandomShopping", + "Roguelike@StageEncounterGiveUpRecruitConfirm", + "Roguelike@ChooseOperConfirm", + "Roguelike@RecruitWithoutButton" + ] + }, + "Roguelike@ChooseOperFlag": { + "template": "Roguelike@ChooseOperConfirm.png", + "action": "DoNothing", + "roi": [ + 1016, + 602, + 264, + 118 + ], + "next": [ + "Roguelike@ChooseOper", + "Roguelike@RecruitCloseGuide" + ] + }, + "Roguelike@ClickToDrops": { + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [ + 600, + 600, + 50, + 50 + ], + "rearDelay": 500 + }, + "Roguelike@ClickToStartPoint": { + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [ + 600, + 600, + 50, + 50 + ], + "rearDelay": 1000 + }, + "Roguelike@CloseCollection": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 569, + 400, + 140, + 139 + ] + }, + "Roguelike@Continue": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 1032, + 487, + 248, + 215 + ], + "rearDelay": 500, + "next": [ + "Roguelike@MissionFailedFlag2", + "Roguelike@ExitThenAbandon" + ] + }, + "Roguelike@DialogSkip": { + "Doc": "月度小队,跳过对话", + "action": "ClickSelf", + "roi": [ + 1106, + 0, + 174, + 139 + ], + "next": [ + "Roguelike@DialogSkip", + "Roguelike@DialogSkipConfirm" + ] + }, + "Roguelike@DialogSkipConfirm": { + "action": "ClickSelf", + "roi": [ + 725, + 409, + 249, + 169 + ] + }, + "Roguelike@DropsFlag": { + "roi": [ + 875, + 601, + 152, + 119 + ] + }, + "Roguelike@EnterAfterRecruit": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "roi": [ + 1078, + 234, + 202, + 239 + ], + "rearDelay": 3000 + }, + "Roguelike@ExitThenAbandon": { + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 0, + 320, + 160 + ] + }, + "Roguelike@FormationConfirm": { + "action": "ClickSelf", + "roi": [ + 1015, + 601, + 265, + 119 + ], + "next": [ + "Roguelike@StartAction" + ] + }, + "Roguelike@GamePass": { + "Doc": "base_task", + "template": "empty.png", + "cache": false, + "roi": [ + 400, + 0, + 500, + 300 + ], + "next": [ + "Roguelike@ClickToStartPoint" + ] + }, + "Roguelike@GamePassSkip1": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "roi": [ + 1090, + 0, + 190, + 144 + ], + "next": [ + "Roguelike@GamePassSkip1Confirm" + ] + }, + "Roguelike@GamePassSkip1Confirm": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "roi": [ + 715, + 282, + 171, + 155 + ] + }, + "Roguelike@GamePassSkip2": { + "action": "ClickSelf", + "roi": [ + 1109, + 0, + 171, + 138 + ], + "next": [ + "Roguelike@GamePassTheEndConfirm", + "Roguelike@GamePass", + "Roguelike@ClickToStartPoint" + ] + }, + "Roguelike@GamePassTheEndConfirm": { + "action": "ClickSelf", + "roi": [ + 554, + 512, + 177, + 161 + ], + "next": [ + "Roguelike@GamePass" + ] + }, + "Roguelike@GetDrop1": { + "Doc": "base_task", + "Doc2": "源石锭,绿色的“拿走”按钮", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 471, + 1280, + 157 + ], + "templThreshold": 0.85, + "rearDelay": 1000, + "next": [ + "Roguelike@DropsFlag", + "Roguelike@ChooseOperFlag" + ] + }, + "Roguelike@GetDrop2": { + "Doc": "base_task", + "Doc2": "希望,黄色的“拿走”按钮", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 471, + 1280, + 157 + ], + "templThreshold": 0.85, + "rearDelay": 1000, + "next": [ + "Roguelike@DropsFlag", + "Roguelike@ChooseOperFlag", + "Roguelike@ClickToDrops" + ] + }, + "Roguelike@GetDrop3": { + "Doc": "base_task", + "Doc2": "未知的剧目,黄色的“翻开”按钮", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 471, + 1280, + 157 + ], + "rearDelay": 1000, + "templThreshold": 0.85, + "next": [ + "Roguelike@ChooseOperFlag", + "Roguelike@ClickToDrops" + ] + }, + "Roguelike@GetDropCompleted": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickRect", + "specificRect": [ + 600, + 600, + 50, + 50 + ], + "roi": [ + 488, + 206, + 302, + 289 + ], + "rearDelay": 3000 + }, + "Roguelike@GetDropLeave": { + "Doc": "base_task", + "Doc2": "不要了,走了(", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 218, + 1280, + 296 + ], + "next": [ + "Roguelike@GetDropLeaveConfirm", + "Roguelike@DropsFlag", + "Roguelike@ChooseOperFlag" + ] + }, + "Roguelike@GetDropLeaveConfirm": { + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 484, + 1280, + 138 + ], + "next": [ + "Roguelike@DropsFlag" + ] + }, + "Roguelike@GetDropRecruit": { + "Doc": "base_task", + "Doc2": "招募券,白色的“招募”按钮", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 471, + 1280, + 157 + ], + "rearDelay": 1000 + }, + "Roguelike@GetDropSelect": { + "Doc": "base_task", + "Doc2": "“选择”按钮,有可能是招募二选一,也有收藏品二选一", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 471, + 1280, + 157 + ], + "rearDelay": 2000, + "next": [ + "Roguelike@GetDropSelectRecruit", + "Roguelike@GetDropSelectReward", + "Roguelike@ChooseOperFlag", + "Roguelike@GetDropCompleted", + "Roguelike@GetDropSelect" + ] + }, + "Roguelike@GetDropSelectRecruit": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 420, + 1280, + 175 + ], + "rearDelay": 1000, + "templThreshold": 0.85, + "next": [ + "Roguelike@ChooseOperFlag", + "Roguelike@GetDropSelectRecruit" + ] + }, + "Roguelike@GetDropSelectReward": { + "Doc": "base_task", + "template": "empty.png", + "cache": false, + "action": "ClickSelf", + "roi": [ + 0, + 420, + 1280, + 175 + ], + "rearDelay": 1000, + "next": [ + "Roguelike@ClickToDrops", + "Roguelike@GetDropSelectReward", + "Roguelike@ChooseOperFlag" + ] + }, + "Roguelike@InBattleFlag": { + "template": "BattleOfficiallyBegin.png", + "roi": [ + 1165, + 20, + 65, + 65 + ], + "maskRange": [ + 100, + 255 + ], + "action": "DoNothing", + "rearDelay": 5000, + "next": [ + "Roguelike@InBattleFlag", + "Roguelike@MissionCompletedFlag", + "Roguelike@MissionFailedFlag", + "Roguelike@MissionFailedFlag2" + ] + }, + "Roguelike@InitalDrop": { + "Doc": "base_task", + "Doc2": "古堡观光(简单模式)初始会有一个免费道具,点确认。月度小队也有,再多几次", + "template": "empty.png", + "action": "ClickSelf", + "roi": [ + 569, + 583, + 141, + 137 + ], + "next": [ + "Roguelike@SquadDefault", + "Roguelike@InitalDrop" + ] + }, + "Roguelike@LastReward": { + "Doc": "base_task", + "Doc2": "你的上一次探索突破了至少两层困难,这一次可以获得更多支援——热水壶", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 174, + 151, + 935, + 533 + ], + "next": [ + "Roguelike@LastRewardConfirm" + ] + }, + "Roguelike@LastReward2": { + "Doc": "base_task", + "Doc2": "你的上一次探索突破了至少两层困难,这一次可以获得更多支援—— 5 源石锭", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 174, + 151, + 935, + 533 + ], + "next": [ + "Roguelike@LastRewardConfirm" + ] + }, + "Roguelike@LastReward3": { + "Doc": "base_task", + "Doc2": "你的上一次探索突破了至少两层困难,这一次可以获得更多支援—— 3 目标生命", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 174, + 151, + 935, + 533 + ], + "next": [ + "Roguelike@LastRewardConfirm" + ] + }, + "Roguelike@LastRewardConfirm": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 174, + 151, + 935, + 533 + ], + "next": [ + "Roguelike@RolesDefault", + "Roguelike@CloseCollection" + ] + }, + "Roguelike@LastRewardRand": { + "Doc": "base_task", + "Doc2": "你的上一次探索突破了至少两层困难,这一次可以获得更多支援—— 问号", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 174, + 151, + 935, + 533 + ], + "next": [ + "Roguelike@LastRewardConfirm" + ] + }, + "Roguelike@Main": { + "template": "Terminal.png", + "action": "ClickSelf", + "roi": [ + 880, + 100, + 180, + 120 + ], + "next": [ + "Roguelike@Main", + "Roguelike@CloseAnno", + "Roguelike@TodoEnter", + "Roguelike@IntegratedStrategies" + ], + "rearDelay": 1000 + }, + "Roguelike@MissionCompletedFlag": { + "roi": [ + 0, + 0, + 148, + 143 + ], + "next": [ + "Roguelike@ClickToDrops" + ] + }, + "Roguelike@MissionFailedFlag": { + "Doc": "base_task", + "template": "empty.png" + }, + "Roguelike@MissionFailedFlag2": { + "Doc": "base_task", + "template": "empty.png", + "cache": false, + "roi": [ + 473, + 0, + 351, + 194 + ], + "next": [ + "Roguelike@ClickToStartPoint" + ] + }, + "Roguelike@QuickFormation": { + "Doc": "本任务注册了插件 RoguelikeFormationTaskPlugin", + "action": "ClickSelf", + "roi": [ + 817, + 0, + 402, + 146 + ], + "next": [ + "Roguelike@FormationConfirm" + ], + "rearDelay": 2000 + }, + "Roguelike@SquadDefault": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 153, + 1280, + 532 + ], + "next": [ + "Roguelike@SquadConfirm" + ] + }, + "Roguelike@RecruitCloseGuide": { + "action": "ClickSelf", + "roi": [ + 56, + 41, + 194, + 134 + ], + "next": [ + "Roguelike@ChooseOperFlag" + ] + }, + "Roguelike@SquadConfirm": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 483, + 1280, + 200 + ] + }, + "Roguelike@RecruitMain": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "templThreshold": 0.6, + "cache": false, + "roi": [ + 190, + 470, + 300, + 154 + ], + "next": [ + "Roguelike@ChooseOperFlag", + "Roguelike@RecruitCloseGuide" + ], + "rearDelay": 1000 + }, + "Roguelike@RecruitOther": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "templThreshold": 0.6, + "cache": false, + "roi": [ + 190, + 470, + 900, + 154 + ], + "next": [ + "Roguelike@ChooseOperFlag", + "Roguelike@RecruitCloseGuide" + ], + "rearDelay": 1000 + }, + "Roguelike@RecruitSkip": { + "template": "RecruitSkip.png", + "action": "ClickSelf", + "roi": [ + 1100, + 0, + 180, + 150 + ], + "next": [ + "Roguelike@RecruitSkip", + "Roguelike@RecruitOther", + "Roguelike@TraderRandomShopping", + "Roguelike@StageTraderLeave", + "Roguelike@DropsFlag", + "Roguelike@ChooseOperFlag", + "Roguelike@RecruitWithoutButton" + ] + }, + "Roguelike@RecruitWithoutButton": { + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [ + 1180, + 15, + 85, + 60 + ] + }, + "Roguelike@ReturnTo": { + "template": "Return.png", + "templThreshold": 0.7, + "cache": false, + "action": "ClickSelf", + "roi": [ + 0, + 0, + 180, + 80 + ], + "next": [ + "Roguelike@ChooseDifficulty", + "Roguelike@StartExplore", + "Roguelike@ExitThenAbandon", + "Roguelike@Abandon", + "Roguelike@Main", + "Roguelike@ReturnTo", + "Roguelike@ReturnToConfirm", + "Roguelike@CloseAnno", + "Roguelike@FromStageSN" + ] + }, + "Roguelike@StageBoons": { + "Doc": "base_task", + "Doc2": "古堡馈赠(随机奖励)", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 53, + 1280, + 554 + ] + }, + "Roguelike@StageCambatDps": { + "Doc": "base_task", + "Doc2": "普通作战", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 53, + 1280, + 554 + ] + }, + "Roguelike@StageCambatDpsEnter": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 1036, + 371, + 223, + 223 + ], + "next": [ + "Roguelike@QuickFormation" + ] + }, + "Roguelike@StageDreadfulFoe": { + "Doc": "base_task", + "Doc2": "险路恶敌(boss关卡)", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 53, + 1280, + 554 + ] + }, + "Roguelike@StageDreadfulFoeEnter": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 1036, + 371, + 223, + 223 + ], + "next": [ + "Roguelike@QuickFormation" + ] + }, + "Roguelike@StageEmergencyDps": { + "Doc": "base_task", + "Doc2": "紧急作战", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 53, + 1280, + 554 + ] + }, + "Roguelike@StageEmergencyDpsEnter": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 1036, + 371, + 223, + 223 + ], + "next": [ + "Roguelike@QuickFormation" + ] + }, + "Roguelike@StageEncounter": { + "Doc": "base_task", + "Doc2": "不期而遇(随机奖励)", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 53, + 1280, + 554 + ] + }, + "Roguelike@StageEncounterClickToLeave": { + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [ + 600, + 600, + 50, + 50 + ], + "next": [ + "Roguelike@ChooseOperFlag", + "Roguelike@StageEncounterFree", + "Roguelike@StageEncounterLeave", + "Roguelike@StageEncounterUnknown", + "Roguelike@StageEncounterClickToLeave" + ] + }, + "Roguelike@StageEncounterEnter": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 1037, + 374, + 221, + 221 + ], + "next": [ + "Roguelike@ChooseOperFlag", + "Roguelike@StageEncounterFree", + "Roguelike@StageEncounterLeave", + "Roguelike@StageEncounterUnknown", + "Roguelike@StageEncounterClickToLeave" + ] + }, + "Roguelike@StageEncounterFree": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 1100, + 0, + 180, + 700 + ], + "preDelay": 500 + }, + "Roguelike@StageEncounterGiveUpRecruitConfirm": { + "action": "ClickSelf", + "roi": [ + 613, + 410, + 424, + 171 + ], + "next": [ + "Roguelike@TraderRandomShopping", + "Roguelike@StageTraderLeave", + "Roguelike@DropsFlag", + "Roguelike@ClickToDrops" + ] + }, + "Roguelike@StageEncounterLeave": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 1100, + 0, + 180, + 700 + ], + "preDelay": 500 + }, + "Roguelike@StageEncounterLeaveConfirm": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 1069, + 0, + 211, + 700 + ], + "rearDelay": 1000, + "next": [ + "Roguelike@ChooseOperFlag", + "Roguelike@StageEncounterFree", + "Roguelike@StageEncounterLeave", + "Roguelike@StageEncounterUnknown", + "Roguelike@StageEncounterSpecialClose", + "Roguelike@StageCambatDpsEnter", + "Roguelike@StageEmergencyDpsEnter", + "Roguelike@ClickToDrops" + ] + }, + "Roguelike@StageEncounterSpecialClose": { + "Doc": "base_task", + "Doc2": "关掉“大锁”", + "template": "empty.png", + "action": "ClickSelf", + "roi": [ + 570, + 400, + 140, + 138 + ], + "next": [ + "Roguelike@StageEncounterSpecialClose", + "Roguelike@ClickToDrops" + ] + }, + "Roguelike@StageEncounterUnknown": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 950, + 50, + 320, + 580 + ], + "preDelay": 1500 + }, + "Roguelike@StageSafeHouse": { + "Doc": "base_task", + "Doc2": "安全的角落", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 53, + 1280, + 554 + ] + }, + "Roguelike@StageSafeHouseEnter": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 1037, + 374, + 221, + 221 + ], + "next": [ + "Roguelike@ChooseOperFlag", + "Roguelike@StageEncounterFree", + "Roguelike@StageEncounterLeave", + "Roguelike@StageEncounterUnknown", + "Roguelike@StageEncounterClickToLeave" + ] + }, + "Roguelike@StageTrader": { + "Doc": "base_task", + "Doc2": "诡意行商(交易所)", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 53, + 1280, + 554 + ] + }, + "Roguelike@StageTraderEnter": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 1035, + 374, + 226, + 220 + ], + "rearDelay": 3000, + "next": [ + "Roguelike@StageTraderInvestSystem", + "Roguelike@TraderRandomShopping", + "Roguelike@StageTraderLeave" + ] + }, + "Roguelike@StageTraderInvestCancel": { + "action": "ClickSelf", + "roi": [ + 507, + 418, + 242, + 149 + ], + "exceededNext": [ + "Roguelike@ExitThenAbandon" + ], + "next": [ + "Roguelike@StageTraderInvestSystemLeave" + ] + }, + "Roguelike@StageTraderInvestConfirm": { + "action": "ClickSelf", + "roi": [ + 852, + 422, + 278, + 144 + ], + "rearDelay": 500, + "next": [ + "Roguelike@StageTraderInvestSystemError", + "Roguelike@StageTraderInvestSystemFull", + "Roguelike@StageTraderInvestConfirm", + "Roguelike@StageTraderInvestCancel" + ] + }, + "Roguelike@StageTraderInvestSystem": { + "templThreshold": 0.75, + "action": "ClickSelf", + "roi": [ + 365, + 51, + 276, + 216 + ], + "exceededNext": [ + "Roguelike@TraderRandomShopping", + "Roguelike@StageTraderLeave" + ], + "next": [ + "Roguelike@StageTraderInvestSystemEnter", + "Roguelike@TraderRandomShopping", + "Roguelike@StageTraderLeave" + ] + }, + "Roguelike@StageTraderInvestSystemEnter": { + "action": "ClickSelf", + "roi": [ + 417, + 228, + 502, + 247 + ], + "next": [ + "Roguelike@StageTraderInvestSystemError", + "Roguelike@StageTraderInvestConfirm", + "Roguelike@StageTraderInvestCancel" + ] + }, + "Roguelike@StageTraderInvestSystemError": { + "action": "ClickSelf", + "cache": false, + "roi": [ + 508, + 204, + 235, + 240 + ], + "next": [ + "Roguelike@StageTraderInvestCancel" + ] + }, + "Roguelike@StageTraderInvestSystemFull": { + "algorithm": "OcrDetect", + "cache": false, + "reduceOtherTimes": [ + "Roguelike@StageTraderInvestConfirm" + ], + "text": [ + "当前储备余额已达上限", + "当前", + "上限" + ], + "roi": [ + 982, + 28, + 298, + 289 + ], + "next": [ + "Roguelike@StageTraderInvestCancel" + ] + }, + "Roguelike@StageTraderInvestSystemLeave": { + "action": "ClickSelf", + "roi": [ + 682, + 420, + 245, + 143 + ], + "next": [ + "Roguelike@TraderRandomShopping", + "Roguelike@StageTraderLeave" + ] + }, + "Roguelike@StageTraderLeave": { + "action": "ClickSelf", + "cache": false, + "roi": [ + 1046, + 443, + 234, + 204 + ], + "next": [ + "Roguelike@StageTraderLeaveConfirm", + "Roguelike@StageTraderLeave" + ] + }, + "Roguelike@StageTraderLeaveConfirm": { + "action": "ClickSelf", + "cache": false, + "roi": [ + 985, + 447, + 295, + 203 + ] + }, + "Roguelike@StartExplore": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 1026, + 470, + 254, + 248 + ], + "rearDelay": 2000, + "next": [ + "Roguelike@SquadDefault", + "Roguelike@InitalDrop", + "Roguelike@StartExplore" + ] + }, + "Roguelike@StartAction": { + "Doc": "本任务注册了插件 RoguelikeSkillSelectionTaskPlugin、RoguelikeBattleTaskPlugin", + "action": "ClickSelf", + "preDelay": 500, + "roi": [ + 905, + 593, + 375, + 127 + ], + "next": [ + "Roguelike@InBattleFlag", + "Roguelike@MissionCompletedFlag", + "Roguelike@MissionFailedFlag", + "Roguelike@MissionFailedFlag2", + "Roguelike@GamePassSkip1", + "Roguelike@GamePassTheEndConfirm", + "Roguelike@GamePass" + ] + }, + "Roguelike@RolesDefault": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 601, + 153, + 363, + 529 + ], + "next": [ + "Roguelike@RolesConfirm" + ] + }, + "Roguelike@RolesConfirm": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 153, + 1280, + 529 + ], + "next": [ + "Roguelike@RecruitMain" + ] + }, + "Roguelike@TodoEnter": { + "Doc": "base_task", + "template": "empty.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 908, + 54, + 372, + 500 + ], + "maskRange": [ + 1, + 255 + ], + "next": [ + "Roguelike@TodoEnter", + "Roguelike@Begin" + ] + }, + "Roguelike@TraderRandomShopping": { + "Doc": "该任务注册了 RoguelikeShoppingTaskPlugin,若是点完了仍在当前界面,说明没啥要买的,直接离开商店(next 里的 PhantomStageTraderLeave)", + "action": "ClickSelf", + "templThreshold": 0.7, + "cache": false, + "roi": [ + 480, + 240, + 750, + 280 + ], + "rectMove": [ + -40, + -100, + 20, + 60 + ], + "next": [ + "Roguelike@TraderRandomShoppingConfirm", + "Roguelike@TraderRandomShoppingCancel", + "Roguelike@StageTraderLeave", + "Roguelike@StageTraderLeaveConfirm" + ], + "maskRange": [ + 1, + 255 + ] + }, + "Roguelike@TraderRandomShoppingCancel": { + "template": "Roguelike@StageTraderInvestCancel.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 350, + 350, + 500, + 250 + ], + "next": [ + "Roguelike@StageTraderLeave" + ] + }, + "Roguelike@TraderRandomShoppingConfirm": { + "action": "ClickSelf", + "cache": false, + "roi": [ + 872, + 425, + 221, + 136 + ], + "next": [ + "Roguelike@TraderRandomShopping", + "Roguelike@ChooseOperFlag", + "Roguelike@StageTraderLeave" + ] + }, + "Phantom@Roguelike@Abandon": {}, + "Phantom@Roguelike@Begin": { + "algorithm": "JustReturn", + "next": [ + "Phantom@Roguelike@ChooseDifficulty", + "Phantom@Roguelike@StartExplore", + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe", + "Phantom@Roguelike@ExitThenAbandon", + "Phantom@Roguelike@Abandon", + "Phantom@Roguelike@TodaysSupplies", + "Phantom@Roguelike@Main", + "Phantom@Roguelike@CloseAnno", + "Phantom@Roguelike@TodoEnter", + "Phantom@Roguelike@Continue", + "Phantom@Roguelike@ReturnTo", + "Phantom@Roguelike@ReturnToConfirm", + "Phantom@Roguelike@OfflineConfirm", + "Phantom@Roguelike@StartToWakeUp", + "Phantom@Roguelike@StartUpConnectingFlag", + "Phantom@Roguelike@FromStageSN" + ] + }, + "Phantom@Roguelike@ChooseDifficulty": {}, + "Phantom@Roguelike@ChooseOper": { + "next": [ + "Phantom@Roguelike@ChooseOperConfirm" + ] + }, + "Phantom@Roguelike@ClickToDrops": { + "next": [ + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe", + "Phantom@Roguelike@ChooseOperFlag", + "Phantom@Roguelike@StageEncounterSpecialClose", + "Phantom@Roguelike@TraderRandomShopping", + "Phantom@Roguelike@StageTraderLeave", + "Phantom@Roguelike@DropsFlag", + "Phantom@Roguelike@TodaysSupplies", + "Phantom@Roguelike@Main", + "Phantom@Roguelike@CloseAnno", + "Phantom@Roguelike@OfflineConfirm", + "Phantom@Roguelike@StartToWakeUp", + "Phantom@Roguelike@StartUpConnectingFlag", + "Phantom@Roguelike@ClickToDrops" + ] + }, + "Phantom@Roguelike@ClickToStartPoint": { + "next": [ + "Phantom@Roguelike@StartExplore", + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe", + "Phantom@Roguelike@GamePass", + "Phantom@Roguelike@TodaysSupplies", + "Phantom@Roguelike@Main", + "Phantom@Roguelike@CloseAnno", + "Phantom@Roguelike@TodoEnter", + "Phantom@Roguelike@Continue", + "Phantom@Roguelike@ReturnTo", + "Phantom@Roguelike@ReturnToConfirm", + "Phantom@Roguelike@OfflineConfirm", + "Phantom@Roguelike@StartToWakeUp", + "Phantom@Roguelike@StartUpConnectingFlag", + "Phantom@Roguelike@ClickToStartPoint" + ] + }, + "Phantom@Roguelike@CloseCollection": { + "next": [ + "Phantom@Roguelike@LastReward", + "Phantom@Roguelike@LastReward2", + "Phantom@Roguelike@LastReward3", + "Phantom@Roguelike@LastRewardRand", + "Phantom@Roguelike@RolesDefault" + ] + }, + "Phantom@Roguelike@Continue": {}, + "Phantom@Roguelike@DialogSkipConfirm": { + "template": "Roguelike@DialogSkipConfirm.png", + "next": [ + "Phantom@Roguelike@DialogSkip", + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe" + ] + }, + "Phantom@Roguelike@DropsFlag": { + "template": "Roguelike@DropsFlag.png", + "next": [ + "Phantom@Roguelike@GetDrop1", + "Phantom@Roguelike@GetDrop2", + "Phantom@Roguelike@GetDrop3", + "Phantom@Roguelike@GetDropSelect", + "Phantom@Roguelike@GetDropRecruit", + "Phantom@Roguelike@GetDropCompleted", + "Phantom@Roguelike@GetDropLeave", + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe", + "Phantom@Roguelike@ChooseOperFlag", + "Phantom@Roguelike@StageEncounterFree", + "Phantom@Roguelike@StageEncounterLeave", + "Phantom@Roguelike@StageEncounterUnknown", + "Phantom@Roguelike@StageEncounterSpecialClose", + "Phantom@Roguelike@EnterAfterRecruit", + "Phantom@Roguelike@StageTraderLeave", + "Phantom@Roguelike@DialogSkip" + ] + }, + "Phantom@Roguelike@EnterAfterRecruit": { + "next": [ + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe" + ] + }, + "Phantom@Roguelike@ExitThenAbandon": { + "template": "Roguelike@ExitThenAbandon.png", + "next": [ + "Phantom@Roguelike@ExitThenAbandon", + "Phantom@Roguelike@Abandon" + ] + }, + "Phantom@Roguelike@GamePass": {}, + "Phantom@Roguelike@GamePassSkip1": {}, + "Phantom@Roguelike@GamePassSkip1Confirm": { + "next": [ + "Phantom@Roguelike@GamePassSkip2", + "Phantom@Roguelike@GamePassTheEndConfirm", + "Phantom@Roguelike@GamePass" + ] + }, + "Phantom@Roguelike@GetDrop1": {}, + "Phantom@Roguelike@GetDrop2": {}, + "Phantom@Roguelike@GetDrop3": {}, + "Phantom@Roguelike@GetDropCompleted": { + "next": [ + "Phantom@Roguelike@GetDrop1", + "Phantom@Roguelike@GetDrop2", + "Phantom@Roguelike@GetDrop3", + "Phantom@Roguelike@GetDropSelect", + "Phantom@Roguelike@GetDropRecruit", + "Phantom@Roguelike@ChooseOperFlag", + "Phantom@Roguelike@ClickToDrops" + ] + }, + "Phantom@Roguelike@GetDropLeave": {}, + "Phantom@Roguelike@GetDropRecruit": { + "next": [ + "Phantom@Roguelike@ChooseOperFlag", + "Phantom@Roguelike@GetDrop1", + "Phantom@Roguelike@GetDrop2", + "Phantom@Roguelike@GetDrop3", + "Phantom@Roguelike@GetDropSelect", + "Phantom@Roguelike@GetDropRecruit", + "Phantom@Roguelike@GetDropCompleted", + "Phantom@Roguelike@GetDropLeave" + ] + }, + "Phantom@Roguelike@GetDropSelect": {}, + "Phantom@Roguelike@GetDropSelectRecruit": { + "template": "Phantom@Roguelike@GetDropRecruit.png" + }, + "Phantom@Roguelike@GetDropSelectReward": {}, + "Phantom@Roguelike@InitalDrop": {}, + "Phantom@Roguelike@LastReward": {}, + "Phantom@Roguelike@LastReward2": {}, + "Phantom@Roguelike@LastReward3": {}, + "Phantom@Roguelike@LastRewardConfirm": {}, + "Phantom@Roguelike@LastRewardRand": {}, + "Phantom@Roguelike@MissionFailedFlag": { + "roi": [ + 504, + 163, + 480, + 267 + ], + "next": [ + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe", + "Phantom@Roguelike@ClickToStartPoint" + ] + }, + "Phantom@Roguelike@MissionFailedFlag2": {}, + "Phantom@Roguelike@SquadDefault": {}, + "Phantom@Roguelike@SquadConfirm": { + "template": "Phantom@Roguelike@LastRewardConfirm.png", + "next": [ + "Phantom@Roguelike@LastReward", + "Phantom@Roguelike@LastReward2", + "Phantom@Roguelike@LastReward3", + "Phantom@Roguelike@LastRewardRand", + "Phantom@Roguelike@RolesDefault", + "Phantom@Roguelike@CloseCollection", + "Phantom@Roguelike@DialogSkip", + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe" + ] + }, + "Phantom@Roguelike@RecruitMain": { + "template": "Phantom@Roguelike@Recruit.png" + }, + "Phantom@Roguelike@RecruitOther": { + "template": "Phantom@Roguelike@Recruit.png" + }, + "Phantom@Roguelike@RecruitWithoutButton": { + "next": [ + "Phantom@Roguelike@RecruitOther", + "Phantom@Roguelike@EnterAfterRecruit", + "Phantom@Roguelike@TraderRandomShopping", + "Phantom@Roguelike@StageTraderLeave", + "Phantom@Roguelike@DropsFlag", + "Phantom@Roguelike@ChooseOperFlag", + "Phantom@Roguelike@RecruitWithoutButton" + ] + }, + "Phantom@Roguelike@StageBoons": { + "templThreshold": 0.85, + "next": [ + "Phantom@Roguelike@StageEncounterEnter", + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe" + ] + }, + "Phantom@Roguelike@StageCambatDps": { + "next_Doc": "普通作战和紧急作战的图比较像,有时候会识别错,这里的next把两个开始的按钮都放进来,提高容错", + "next": [ + "Phantom@Roguelike@StageCambatDpsEnter", + "Phantom@Roguelike@StageEmergencyDpsEnter", + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe" + ] + }, + "Phantom@Roguelike@StageCambatDpsEnter": {}, + "Phantom@Roguelike@StageDreadfulFoe": { + "next_Doc": "普通作战和紧急作战的图比较像,有时候会识别错,这里的next把两个开始的按钮都放进来,提高容错", + "next": [ + "Phantom@Roguelike@StageDreadfulFoeEnter", + "Phantom@Roguelike@StageEmergencyDpsEnter", + "Phantom@Roguelike@StageCambatDpsEnter", + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe" + ] + }, + "Phantom@Roguelike@StageDreadfulFoeEnter": {}, + "Phantom@Roguelike@StageEmergencyDps": { + "next_Doc": "普通作战和紧急作战的图比较像,有时候会识别错,这里的next把两个开始的按钮都放进来,提高容错", + "next": [ + "Phantom@Roguelike@StageEmergencyDpsEnter", + "Phantom@Roguelike@StageCambatDpsEnter", + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe" + ] + }, + "Phantom@Roguelike@StageEmergencyDpsEnter": {}, + "Phantom@Roguelike@StageEncounter": { + "templThreshold": 0.85, + "next": [ + "Phantom@Roguelike@StageEncounterEnter", + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe" + ] + }, + "Phantom@Roguelike@StageEncounterEnter": {}, + "Phantom@Roguelike@StageEncounterFree": { + "templThreshold": 0.99, + "next": [ + "Phantom@Roguelike@StageEncounterLeaveConfirm", + "Phantom@Roguelike@StageEncounterLeave", + "Phantom@Roguelike@StageEncounterUnknown", + "Phantom@Roguelike@StageEncounterFree", + "Phantom@Roguelike@ChooseOperFlag" + ] + }, + "Phantom@Roguelike@StageEncounterLeave": { + "templThreshold": 0.97, + "next": [ + "Phantom@Roguelike@StageEncounterLeaveConfirm", + "Phantom@Roguelike@StageEncounterFree", + "Phantom@Roguelike@StageEncounterUnknown", + "Phantom@Roguelike@StageEncounterLeave", + "Phantom@Roguelike@ChooseOperFlag" + ] + }, + "Phantom@Roguelike@StageEncounterLeaveConfirm": {}, + "Phantom@Roguelike@StageEncounterSpecialClose": {}, + "Phantom@Roguelike@StageEncounterUnknown": { + "templThreshold": 0.91, + "next": [ + "Phantom@Roguelike@ChooseOperFlag", + "Phantom@Roguelike@StageEncounterLeaveConfirm", + "Phantom@Roguelike@StageEncounterFree", + "Phantom@Roguelike@StageEncounterLeave", + "Phantom@Roguelike@StageEncounterUnknown" + ] + }, + "Phantom@Roguelike@StageSafeHouse": { + "templThreshold": 0.85, + "next": [ + "Phantom@Roguelike@StageSafeHouseEnter", + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe" + ] + }, + "Phantom@Roguelike@StageSafeHouseEnter": {}, + "Phantom@Roguelike@StageTrader": { + "templThreshold": 0.85, + "next": [ + "Phantom@Roguelike@StageTraderEnter", + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe" + ] + }, + "Phantom@Roguelike@StageTraderEnter": {}, + "Phantom@Roguelike@StageTraderLeaveConfirm": { + "template": "Roguelike@StageTraderLeaveConfirm.png", + "exceededNext": [ + "Phantom@Roguelike@ExitThenAbandon" + ], + "next": [ + "Phantom@Roguelike@StageTrader", + "Phantom@Roguelike@StageSafeHouse", + "Phantom@Roguelike@StageEncounter", + "Phantom@Roguelike@StageBoons", + "Phantom@Roguelike@StageCambatDps", + "Phantom@Roguelike@StageEmergencyDps", + "Phantom@Roguelike@StageDreadfulFoe" + ] + }, + "Phantom@Roguelike@StartExplore": {}, + "Phantom@Roguelike@RolesDefault": {}, + "Phantom@Roguelike@RolesConfirm": { + "template": "Phantom@Roguelike@LastRewardConfirm" + }, + "Phantom@Roguelike@TodoEnter": {}, + "Mizuki@Roguelike@Abandon": {}, + "Mizuki@Roguelike@Begin": { + "algorithm": "JustReturn", + "next": [ + "Mizuki@Roguelike@ChooseDifficulty", + "Mizuki@Roguelike@StartExplore", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose", + "Mizuki@Roguelike@CloseEvent", + "Mizuki@Roguelike@NextLevel", + "Mizuki@Roguelike@ExitThenAbandon", + "Mizuki@Roguelike@Abandon", + "Mizuki@Roguelike@TodaysSupplies", + "Mizuki@Roguelike@Main", + "Mizuki@Roguelike@CloseAnno", + "Mizuki@Roguelike@TodoEnter", + "Mizuki@Roguelike@Continue", + "Mizuki@Roguelike@ReturnTo", + "Mizuki@Roguelike@ReturnToConfirm", + "Mizuki@Roguelike@OfflineConfirm", + "Mizuki@Roguelike@StartToWakeUp", + "Mizuki@Roguelike@StartUpConnectingFlag", + "Mizuki@Roguelike@FromStageSN" + ] + }, + "Mizuki@Roguelike@ChooseDifficulty": {}, + "Mizuki@Roguelike@ChooseOper": { + "next": [ + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose", + "Mizuki@Roguelike@ChooseOperConfirm" + ] + }, + "Mizuki@Roguelike@ClickToDrops": { + "next": [ + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose", + "Mizuki@Roguelike@ChooseOperFlag", + "Mizuki@Roguelike@StageEncounterSpecialClose", + "Mizuki@Roguelike@TraderRandomShopping", + "Mizuki@Roguelike@StageTraderLeave", + "Mizuki@Roguelike@DropsFlag", + "Mizuki@Roguelike@TodaysSupplies", + "Mizuki@Roguelike@Main", + "Mizuki@Roguelike@CloseAnno", + "Mizuki@Roguelike@OfflineConfirm", + "Mizuki@Roguelike@StartToWakeUp", + "Mizuki@Roguelike@StartUpConnectingFlag", + "Mizuki@Roguelike@ClickToDrops" + ] + }, + "Mizuki@Roguelike@ClickToStartPoint": { + "next": [ + "Mizuki@Roguelike@StartExplore", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose", + "Mizuki@Roguelike@GamePass", + "Mizuki@Roguelike@TodaysSupplies", + "Mizuki@Roguelike@Main", + "Mizuki@Roguelike@CloseAnno", + "Mizuki@Roguelike@TodoEnter", + "Mizuki@Roguelike@Continue", + "Mizuki@Roguelike@ReturnTo", + "Mizuki@Roguelike@ReturnToConfirm", + "Mizuki@Roguelike@OfflineConfirm", + "Mizuki@Roguelike@StartToWakeUp", + "Mizuki@Roguelike@StartUpConnectingFlag", + "Mizuki@Roguelike@ClickToStartPoint" + ] + }, + "Mizuki@Roguelike@CloseCollection": { + "next": [ + "Mizuki@Roguelike@LastReward", + "Mizuki@Roguelike@LastReward2", + "Mizuki@Roguelike@LastReward3", + "Mizuki@Roguelike@LastReward4", + "Mizuki@Roguelike@LastRewardRand", + "Mizuki@Roguelike@RolesDefault" + ] + }, + "Mizuki@Roguelike@CloseCollectionClose": { + "action": "ClickSelf", + "cache": false, + "templThreshold": 0.9, + "roi": [ + 572, + 434, + 144, + 141 + ], + "maskRange": [ + 100, + 255 + ], + "next": [ + "Mizuki@Roguelike@StageEncounterEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose", + "Mizuki@Roguelike@DropsFlag", + "Mizuki@Roguelike@CloseEvent", + "Mizuki@Roguelike@ChooseOperFlag" + ] + }, + "Mizuki@Roguelike@CloseCollectionContinue": { + "action": "ClickSelf", + "templThreshold": 0.9, + "cache": false, + "roi": [ + 549, + 440, + 123, + 130 + ], + "maskRange": [ + 100, + 255 + ], + "next": [ + "Mizuki@Roguelike@StageEncounterEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose", + "Mizuki@Roguelike@DropsFlag", + "Mizuki@Roguelike@CloseEvent", + "Mizuki@Roguelike@ChooseOperFlag" + ] + }, + "Mizuki@Roguelike@CloseEvent": { + "action": "ClickSelf", + "cache": false, + "roi": [ + 567, + 584, + 145, + 136 + ], + "next": [ + "Mizuki@Roguelike@StageEncounterEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose", + "Mizuki@Roguelike@DropsFlag", + "Mizuki@Roguelike@CloseEvent" + ] + }, + "Mizuki@Roguelike@CommissionedMissionCompleted": { + "action": "ClickRect", + "specificRect": [ + 600, + 600, + 50, + 50 + ], + "rearDelay": 1000, + "cache": false, + "roi": [ + 519, + 202, + 282, + 154 + ], + "next": [ + "Mizuki@Roguelike@StageEncounterEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@Continue": {}, + "Mizuki@Roguelike@DataTraceback": { + "action": "DoNothing", + "cache": false, + "roi": [ + 56, + 277, + 243, + 152 + ], + "next": [ + "Mizuki@Roguelike@ClickToStartPoint" + ] + }, + "Mizuki@Roguelike@DialogSkipConfirm": { + "template": "Roguelike@DialogSkipConfirm.png", + "next": [ + "Mizuki@Roguelike@DialogSkip", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@DiceConfirm": { + "Doc": "骰子的确认按钮", + "action": "ClickSelf", + "cache": false, + "roi": [ + 551, + 577, + 174, + 143 + ], + "templThreshold": 0.95, + "rearDelay": 1000, + "next": [ + "Mizuki@Roguelike@StageEncounterEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose", + "Mizuki@Roguelike@ClickToDrops" + ] + }, + "Mizuki@Roguelike@DiceConfirmThenAbandon": { + "Doc": "骰子的确认按钮", + "action": "ClickSelf", + "template": "Mizuki@Roguelike@DiceConfirm.png", + "cache": false, + "roi": [ + 551, + 577, + 174, + 143 + ], + "templThreshold": 0.95, + "next": [ + "Mizuki@Roguelike@ExitThenAbandon" + ] + }, + "Mizuki@Roguelike@DropsFlag": { + "template": "Roguelike@DropsFlag.png", + "next": [ + "Mizuki@Roguelike@GetDrop1", + "Mizuki@Roguelike@GetDrop2", + "Mizuki@Roguelike@GetDrop3", + "Mizuki@Roguelike@GetDropSelect", + "Mizuki@Roguelike@GetDropRecruit", + "Mizuki@Roguelike@GetDropBox", + "Mizuki@Roguelike@GetDropCompleted", + "Mizuki@Roguelike@GetDropLeave", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose", + "Mizuki@Roguelike@ChooseOperFlag", + "Mizuki@Roguelike@StageEncounterFree", + "Mizuki@Roguelike@StageEncounterLeave", + "Mizuki@Roguelike@StageEncounterUnknown", + "Mizuki@Roguelike@StageEncounterSpecialClose", + "Mizuki@Roguelike@EnterAfterRecruit", + "Mizuki@Roguelike@StageTraderLeave", + "Mizuki@Roguelike@CloseEvent", + "Mizuki@Roguelike@DialogSkip" + ] + }, + "Mizuki@Roguelike@EnterAfterRecruit": { + "next": [ + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@ExitThenAbandon": { + "template": "Roguelike@ExitThenAbandon.png", + "next": [ + "Mizuki@Roguelike@ExitThenAbandon", + "Mizuki@Roguelike@Abandon", + "Mizuki@Roguelike@DiceConfirmThenAbandon", + "Mizuki@Roguelike@DataTraceback" + ] + }, + "Mizuki@Roguelike@GamePass": {}, + "Mizuki@Roguelike@GamePassSkip1": {}, + "Mizuki@Roguelike@GamePassSkip1Confirm": { + "next": [ + "Mizuki@Roguelike@DataTraceback", + "Mizuki@Roguelike@GamePassSkip2", + "Mizuki@Roguelike@GamePassTheEndConfirm", + "Mizuki@Roguelike@GamePass" + ] + }, + "Mizuki@Roguelike@GetDrop1": {}, + "Mizuki@Roguelike@GetDrop2": {}, + "Mizuki@Roguelike@GetDrop3": {}, + "Mizuki@Roguelike@GetDropBox": { + "Doc": "漂流密匣“打开”按钮", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 471, + 1280, + 157 + ], + "templThreshold": 0.85, + "rearDelay": 1000, + "next": [ + "Mizuki@Roguelike@DropsFlag", + "Mizuki@Roguelike@GetDropBoxSelect", + "Mizuki@Roguelike@ChooseOperFlag" + ] + }, + "Mizuki@Roguelike@GetDropBoxSelect": { + "Doc": "漂流密匣-锤子砸开“选择”按钮", + "action": "ClickSelf", + "cache": false, + "roi": [ + 830, + 438, + 276, + 140 + ], + "templThreshold": 0.85, + "rearDelay": 1000, + "next": [ + "Mizuki@Roguelike@DropsFlag", + "Mizuki@Roguelike@ChooseOperFlag", + "Mizuki@Roguelike@ClickToDrops" + ] + }, + "Mizuki@Roguelike@GetDropCompleted": { + "next": [ + "Mizuki@Roguelike@GetDrop1", + "Mizuki@Roguelike@GetDrop2", + "Mizuki@Roguelike@GetDrop3", + "Mizuki@Roguelike@GetDropSelect", + "Mizuki@Roguelike@GetDropRecruit", + "Mizuki@Roguelike@GetDropBox", + "Mizuki@Roguelike@ChooseOperFlag", + "Mizuki@Roguelike@ClickToDrops" + ] + }, + "Mizuki@Roguelike@GetDropLeave": {}, + "Mizuki@Roguelike@GetDropRecruit": { + "next": [ + "Mizuki@Roguelike@ChooseOperFlag", + "Mizuki@Roguelike@GetDrop1", + "Mizuki@Roguelike@GetDrop2", + "Mizuki@Roguelike@GetDrop3", + "Mizuki@Roguelike@GetDropSelect", + "Mizuki@Roguelike@GetDropRecruit", + "Mizuki@Roguelike@GetDropBox", + "Mizuki@Roguelike@GetDropCompleted", + "Mizuki@Roguelike@GetDropLeave" + ] + }, + "Mizuki@Roguelike@GetDropSelect": {}, + "Mizuki@Roguelike@GetDropSelectRecruit": { + "template": "Mizuki@Roguelike@GetDropRecruit.png" + }, + "Mizuki@Roguelike@GetDropSelectReward": {}, + "Mizuki@Roguelike@InitalDrop": {}, + "Mizuki@Roguelike@LastReward": {}, + "Mizuki@Roguelike@LastReward2": {}, + "Mizuki@Roguelike@LastReward3": {}, + "Mizuki@Roguelike@LastReward4": { + "action": "ClickSelf", + "cache": false, + "roi": [ + 174, + 151, + 935, + 533 + ], + "next": [ + "Mizuki@Roguelike@LastRewardConfirm" + ] + }, + "Mizuki@Roguelike@LastRewardConfirm": {}, + "Mizuki@Roguelike@LastRewardRand": {}, + "Mizuki@Roguelike@MapObject": { + "action": "DoNothing", + "cache": false, + "roi": [ + 257, + 488, + 189, + 123 + ], + "next": [ + "Mizuki@Roguelike@RecruitOther" + ] + }, + "Mizuki@Roguelike@MissionFailedFlag": { + "roi": [ + 504, + 163, + 480, + 267 + ], + "next": [ + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose", + "Mizuki@Roguelike@ClickToStartPoint" + ] + }, + "Mizuki@Roguelike@MissionFailedFlag2": {}, + "Mizuki@Roguelike@NextLevel": { + "algorithm": "OcrDetect", + "action": "ClickSelf", + "cache": false, + "text": [ + "天光海岸", + "离岸孤岛", + "波涛略地", + "隐秘温床", + "失尘岩洞", + "幽海丛林", + "绀碧摇篮" + ], + "roi": [ + 522, + 431, + 245, + 144 + ], + "next": [ + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@SquadDefault": {}, + "Mizuki@Roguelike@SquadConfirm": { + "template": "Mizuki@Roguelike@LastRewardConfirm.png", + "next": [ + "Mizuki@Roguelike@LastReward", + "Mizuki@Roguelike@LastReward2", + "Mizuki@Roguelike@LastReward3", + "Mizuki@Roguelike@LastReward4", + "Mizuki@Roguelike@LastRewardRand", + "Mizuki@Roguelike@RolesDefault", + "Mizuki@Roguelike@CloseCollection", + "Mizuki@Roguelike@DialogSkip", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose", + "Mizuki@Roguelike@MapObject" + ] + }, + "Mizuki@Roguelike@RecruitMain": { + "template": "Mizuki@Roguelike@Recruit.png" + }, + "Mizuki@Roguelike@RecruitOther": { + "template": "Mizuki@Roguelike@Recruit.png" + }, + "Mizuki@Roguelike@RecruitWithoutButton": { + "next": [ + "Mizuki@Roguelike@RecruitOther", + "Mizuki@Roguelike@EnterAfterRecruit", + "Mizuki@Roguelike@TraderRandomShopping", + "Mizuki@Roguelike@StageTraderLeave", + "Mizuki@Roguelike@DropsFlag", + "Mizuki@Roguelike@ChooseOperFlag", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@RecruitWithoutButton" + ] + }, + "Mizuki@Roguelike@StageBoons": { + "templThreshold": 0.95, + "next": [ + "Mizuki@Roguelike@StageEncounterEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@StageCambatDps": { + "templThreshold": 0.95, + "next_Doc": "普通作战和紧急作战的图比较像,有时候会识别错,这里的next把两个开始的按钮都放进来,提高容错", + "next": [ + "Mizuki@Roguelike@StageCambatDpsEnter", + "Mizuki@Roguelike@StageEmergencyDpsEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@StageCambatDpsEnter": {}, + "Mizuki@Roguelike@StageDreadfulFoe": { + "next_Doc": "普通作战和紧急作战的图比较像,有时候会识别错,这里的next把两个开始的按钮都放进来,提高容错", + "next": [ + "Mizuki@Roguelike@StageDreadfulFoeEnter", + "Mizuki@Roguelike@StageEmergencyDpsEnter", + "Mizuki@Roguelike@StageCambatDpsEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@StageDreadfulFoe-5": { + "Doc": "第五层的boss关卡", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 53, + 1280, + 554 + ], + "templThreshold": 0.85, + "next": [ + "Mizuki@Roguelike@StageDreadfulFoe-5Enter", + "Mizuki@Roguelike@StageDreadfulFoeEnter", + "Mizuki@Roguelike@StageEmergencyDpsEnter", + "Mizuki@Roguelike@StageCambatDpsEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@StageDreadfulFoe-5Enter": { + "action": "ClickSelf", + "cache": false, + "roi": [ + 1036, + 371, + 223, + 223 + ], + "next": [ + "Mizuki@Roguelike@QuickFormation" + ] + }, + "Mizuki@Roguelike@StageDreadfulFoeEnter": {}, + "Mizuki@Roguelike@StageEmergencyDps": { + "templThreshold": 0.95, + "next_Doc": "普通作战和紧急作战的图比较像,有时候会识别错,这里的next把两个开始的按钮都放进来,提高容错", + "next": [ + "Mizuki@Roguelike@StageEmergencyDpsEnter", + "Mizuki@Roguelike@StageCambatDpsEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@StageEmergencyDpsEnter": {}, + "Mizuki@Roguelike@StageEmergencyTransportation": { + "Doc": "紧急运输,拒绝可以获取3希望", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 53, + 1280, + 554 + ], + "templThreshold": 0.95, + "next": [ + "Mizuki@Roguelike@StageEncounterEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@StageEncounter": { + "templThreshold": 0.96, + "next": [ + "Mizuki@Roguelike@StageEncounterEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@StageEncounterEnter": {}, + "Mizuki@Roguelike@StageEncounterFree": { + "maskRange": [ + 5, + 255 + ], + "next": [ + "Mizuki@Roguelike@StageEncounterLeaveConfirm", + "Mizuki@Roguelike@StageEncounterLeave", + "Mizuki@Roguelike@StageEncounterUnknown", + "Mizuki@Roguelike@StageEncounterFree", + "Mizuki@Roguelike@ChooseOperFlag" + ] + }, + "Mizuki@Roguelike@StageEncounterLeave": { + "maskRange": [ + 5, + 255 + ], + "next": [ + "Mizuki@Roguelike@StageEncounterLeaveConfirm", + "Mizuki@Roguelike@StageEncounterFree", + "Mizuki@Roguelike@StageEncounterUnknown", + "Mizuki@Roguelike@StageEncounterLeave", + "Mizuki@Roguelike@ChooseOperFlag" + ] + }, + "Mizuki@Roguelike@StageEncounterLeaveConfirm": {}, + "Mizuki@Roguelike@StageEncounterSpecialClose": {}, + "Mizuki@Roguelike@StageEncounterUnknown": { + "templThreshold": 0.91, + "next": [ + "Mizuki@Roguelike@ChooseOperFlag", + "Mizuki@Roguelike@StageEncounterLeaveConfirm", + "Mizuki@Roguelike@StageEncounterFree", + "Mizuki@Roguelike@StageEncounterLeave", + "Mizuki@Roguelike@StageEncounterUnknown" + ] + }, + "Mizuki@Roguelike@StageGambling": { + "Doc": "骰子关卡", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 53, + 1280, + 554 + ], + "templThreshold": 0.95, + "next": [ + "Mizuki@Roguelike@StageEncounterEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@StageRegionalCommissioning": { + "Doc": "地区委托(随机奖励)", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 53, + 1280, + 554 + ], + "templThreshold": 0.95, + "next": [ + "Mizuki@Roguelike@StageEncounterEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@StageSafeHouse": { + "templThreshold": 0.95, + "next": [ + "Mizuki@Roguelike@StageSafeHouseEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@StageSafeHouseEnter": {}, + "Mizuki@Roguelike@StageTrader": { + "templThreshold": 0.95, + "next": [ + "Mizuki@Roguelike@StageTraderEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@StageTraderEnter": {}, + "Mizuki@Roguelike@StageTraderLeaveConfirm": { + "template": "Roguelike@StageTraderLeaveConfirm.png", + "exceededNext": [ + "Mizuki@Roguelike@DiceConfirmThenAbandon", + "Mizuki@Roguelike@ExitThenAbandon" + ], + "next": [ + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@StageWindAndRain": { + "Doc": "风雨际会,拒绝可以获取4生命值", + "action": "ClickSelf", + "cache": false, + "roi": [ + 0, + 53, + 1280, + 554 + ], + "templThreshold": 0.95, + "next": [ + "Mizuki@Roguelike@StageEncounterEnter", + "Mizuki@Roguelike@StageTrader", + "Mizuki@Roguelike@StageSafeHouse", + "Mizuki@Roguelike@StageWindAndRain", + "Mizuki@Roguelike@StageEmergencyTransportation", + "Mizuki@Roguelike@StageEncounter", + "Mizuki@Roguelike@StageBoons", + "Mizuki@Roguelike@StageCambatDps", + "Mizuki@Roguelike@StageEmergencyDps", + "Mizuki@Roguelike@StageDreadfulFoe", + "Mizuki@Roguelike@StageDreadfulFoe-5", + "Mizuki@Roguelike@StageRegionalCommissioning", + "Mizuki@Roguelike@StageGambling", + "Mizuki@Roguelike@CommissionedMissionCompleted", + "Mizuki@Roguelike@DiceConfirm", + "Mizuki@Roguelike@CloseCollectionContinue", + "Mizuki@Roguelike@CloseCollectionClose" + ] + }, + "Mizuki@Roguelike@StartExplore": {}, + "Mizuki@Roguelike@RolesDefault": {}, + "Mizuki@Roguelike@RolesConfirm": { + "template": "Mizuki@Roguelike@LastRewardConfirm" + }, + "Mizuki@Roguelike@TodoEnter": {}, + "RoguelikeBattleAbandon": { + "action": "ClickSelf", + "roi": [ + 648, + 229, + 220, + 246 + ], + "next": [ + "RoguelikeBattleAbandonConfirm", + "RoguelikeBattleAbandon" + ] + }, + "RoguelikeBattleAbandonConfirm": { + "action": "ClickSelf", + "roi": [ + 716, + 416, + 259, + 153 + ], + "next": [ + "RoguelikeBattleAbandonConfirm", + "Stop" + ] + }, + "RoguelikeBattleExitBegin": { + "action": "ClickSelf", + "roi": [ + 3, + 0, + 153, + 154 + ], + "maskRange": [ + 100, + 255 + ], + "next": [ + "RoguelikeBattleAbandon", + "RoguelikeBattleExitBegin" + ] + }, + "RoguelikeBattleSpeedUp": { + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [ + 1070, + 20, + 60, + 60 + ], + "preDelay": 3000 + }, + "RoguelikeCustom-HijackCoChar": { + "algorithm": "OcrDetect", + "text": [], + "roi": [ + 186, + 298, + 913, + 200 + ], + "ocrReplace": [], + "preDelay": 1000 + }, + "RoguelikeCustom-HijackRoles": { + "algorithm": "OcrDetect", + "text": [], + "roi": [ + 54, + 356, + 1172, + 183 + ], + "ocrReplace": [] + }, + "RoguelikeCustom-HijackSquad": { + "algorithm": "OcrDetect", + "text": [], + "roi": [ + 0, + 383, + 1280, + 142 + ], + "ocrReplace": [] + }, + "RoguelikeFormationOper": { + "cache": false, + "roi": [ + 363, + 11, + 891, + 668 + ], + "maskRange": [ + 1, + 255 + ], + "templThreshold": 0.9 + }, + "RoguelikeFormationOperSelected": { + "template": "empty.png", + "templThreshold": 1000, + "templThreshold_Doc": "这个任务中作为符合range的像素点数量阈值", + "maskRange_Doc": "拿来做H通道的范围", + "maskRange": [ + 95, + 105 + ], + "specificRect_Doc": "拿来做S、V通道的范围", + "specificRect": [ + 170, + 210, + 70, + 140 + ] + }, + "RoguelikeQuickFormationClearAndReselect": { + "action": "ClickSelf", + "roi": [ + 821, + 608, + 139, + 112 + ], + "next": [ + "RoguelikeQuickFormationClearAndReselect-Confirm" + ] + }, + "RoguelikeQuickFormationClearAndReselect-Confirm": { + "template": "Roguelike@FormationConfirm.png", + "action": "ClickSelf", + "roi": [ + 1015, + 601, + 265, + 119 + ], + "next": [ + "RoguelikeQuickFormationClearAndReselect-Formation", + "RoguelikeQuickFormationClearAndReselect-Confirm" + ] + }, + "RoguelikeQuickFormationClearAndReselect-Formation": { + "template": "Roguelike@QuickFormation.png", + "action": "ClickSelf", + "roi": [ + 817, + 0, + 402, + 146 + ], + "next": [ + "RoguelikeQuickFormationClearAndReselect-Formation", + "Stop" + ], + "rearDelay": 2000 + }, + "RoguelikeQuickFormationDelay": { + "algorithm": "JustReturn", + "action": "DoNothing", + "rearDelay": 100 + }, + "RoguelikeRecruitElite0": { + "roi": [ + -170, + -60, + 60, + 50 + ] + }, + "RoguelikeRecruitElite1": { + "roi": [ + -170, + -60, + 60, + 50 + ] + }, + "RoguelikeRecruitElite2": { + "roi": [ + -170, + -60, + 60, + 50 + ] + }, + "RoguelikeRecruitLevel": { + "template": "empty.png", + "roi": [ + -171, + 0, + 15, + 11 + ] + }, + "RoguelikeRecruitOcr": { + "algorithm": "OcrDetect", + "text": [], + "fullMatch": true, + "roi": [ + 13, + 26, + 120, + 23 + ], + "specificRect_Doc": "x拿来当文字灰度二值化下限用", + "specificRect": [ + 100, + 0, + 0, + 0 + ] + }, + "RoguelikeRecruitOcrFlag": { + "roi": [ + 525, + 110, + 640, + 500 + ], + "templThreshold": 0.9 + }, + "RoguelikeRecruitSlowlySwipeLeftRect": { + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [ + 560, + 200, + 100, + 300 + ] + }, + "RoguelikeRecruitSlowlySwipeRightRect": { + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [ + 980, + 200, + 100, + 300 + ], + "preDelay": 1500, + "rearDelay": 300, + "Doc": "这里的preDelay作为滑动duration使用,rearDelay作为滑动额外延时使用" + }, + "RoguelikeRecruitSwipeMaxTime": { + "template": "empty.png", + "maxTimes_Doc": "这个参数是肉鸽招募时,向右划动的最大次数", + "maxTimes": 4 + }, + "RoguelikeRecruitSwipeToTheLeftBegin": { + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [ + 1080, + 200, + 200, + 300 + ], + "preDelay": 300, + "rearDelay": 1000, + "maxTimes": 2, + "Doc": "这里的preDelay作为滑动duration使用,rearDelay作为滑动额外延时使用,maxTimes作为重复次数使用" + }, + "RoguelikeRecruitSwipeToTheLeftEnd": { + "algorithm": "JustReturn", + "action": "ClickRect", + "specificRect": [ + 400, + 200, + 200, + 300 + ] + }, + "RoguelikeSkillSelectionFlag": { + "templThreshold": 0.9, + "maskRange": [ + 1, + 255 + ] + }, + "RoguelikeSkillSelectionMove1": { + "algorithm": "JustReturn", + "rectMove_Doc": "技能1相对flag的坐标", + "rectMove": [ + 180, + -40, + 40, + 30 + ], + "rearDelay": 200 + }, + "RoguelikeSkillSelectionMove2": { + "algorithm": "JustReturn", + "rectMove_Doc": "技能2相对flag的坐标", + "rectMove": [ + 240, + -40, + 30, + 30 + ] + }, + "RoguelikeSkillSelectionMove3": { + "algorithm": "JustReturn", + "rectMove_Doc": "技能3相对flag的坐标", + "rectMove": [ + 300, + -40, + 30, + 30 + ] + }, + "RoguelikeSkillSelectionName": { + "algorithm": "OcrDetect", + "fullMatch": true, + "text": [], + "roi": [ + 210, + 8, + 120, + 20 + ], + "specificRect_Doc": "x拿来当文字灰度二值化下限用", + "specificRect": [ + 100, + 0, + 0, + 0 + ] + }, + "RoguelikeSkillSelectionTeamFull": { + "cache": false, + "roi": [ + 135, + 22, + 1032, + 668 + ], + "maskRange": [ + 200, + 255 + ] + }, + "RoguelikeTraderShopping": { + "template": "Roguelike@TraderRandomShopping.png", + "templThreshold": 0.7, + "roi": [ + 480, + 240, + 750, + 280 + ], + "maskRange": [ + 1, + 255 + ] + }, + "RoguelikeTraderShoppingOcr": { + "algorithm": "OcrDetect", + "text": [], + "roi": [ + -120, + -160, + 190, + 35 + ], + "ocrReplace": [] + }, + "RoguelikeTraderShoppingOver": { + "template": "Roguelike@StageTraderLeave.png", + "action": "ClickSelf", + "cache": false, + "roi": [ + 1046, + 443, + 234, + 204 + ] + }, + "RoguelikeWaitBattleStart": { + "Doc": "点了开始行动之后,可能会网络不好一直loading,用这个任务等一会", + "template": "Roguelike@QuickFormation.png", + "action": "DoNothing", + "roi": [ + 817, + 0, + 402, + 146 + ], + "next": [ + "RoguelikeWaitBattleStart" + ] } -} +} \ No newline at end of file diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1Abandon.png b/resource/template/Mizuki@Roguelike@Abandon.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1Abandon.png rename to resource/template/Mizuki@Roguelike@Abandon.png diff --git a/resource/template/Roguelike1ChooseDifficulty.png b/resource/template/Mizuki@Roguelike@ChooseDifficulty.png similarity index 100% rename from resource/template/Roguelike1ChooseDifficulty.png rename to resource/template/Mizuki@Roguelike@ChooseDifficulty.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1CloseCollection.png b/resource/template/Mizuki@Roguelike@CloseCollection.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1CloseCollection.png rename to resource/template/Mizuki@Roguelike@CloseCollection.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2CloseCollectionClose.png b/resource/template/Mizuki@Roguelike@CloseCollectionClose.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2CloseCollectionClose.png rename to resource/template/Mizuki@Roguelike@CloseCollectionClose.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2CloseCollectionContinue.png b/resource/template/Mizuki@Roguelike@CloseCollectionContinue.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2CloseCollectionContinue.png rename to resource/template/Mizuki@Roguelike@CloseCollectionContinue.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2CloseEvent.png b/resource/template/Mizuki@Roguelike@CloseEvent.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2CloseEvent.png rename to resource/template/Mizuki@Roguelike@CloseEvent.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2CommissionedMissionCompleted.png b/resource/template/Mizuki@Roguelike@CommissionedMissionCompleted.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2CommissionedMissionCompleted.png rename to resource/template/Mizuki@Roguelike@CommissionedMissionCompleted.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1Continue.png b/resource/template/Mizuki@Roguelike@Continue.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1Continue.png rename to resource/template/Mizuki@Roguelike@Continue.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2DataTraceback.png b/resource/template/Mizuki@Roguelike@DataTraceback.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2DataTraceback.png rename to resource/template/Mizuki@Roguelike@DataTraceback.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2DiceConfirm.png b/resource/template/Mizuki@Roguelike@DiceConfirm.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2DiceConfirm.png rename to resource/template/Mizuki@Roguelike@DiceConfirm.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1EnterAfterRecruit.png b/resource/template/Mizuki@Roguelike@EnterAfterRecruit.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1EnterAfterRecruit.png rename to resource/template/Mizuki@Roguelike@EnterAfterRecruit.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1GamePass.png b/resource/template/Mizuki@Roguelike@GamePass.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1GamePass.png rename to resource/template/Mizuki@Roguelike@GamePass.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1GamePassSkip1.png b/resource/template/Mizuki@Roguelike@GamePassSkip1.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1GamePassSkip1.png rename to resource/template/Mizuki@Roguelike@GamePassSkip1.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1GamePassSkip1Confirm.png b/resource/template/Mizuki@Roguelike@GamePassSkip1Confirm.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1GamePassSkip1Confirm.png rename to resource/template/Mizuki@Roguelike@GamePassSkip1Confirm.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1GetDrop1.png b/resource/template/Mizuki@Roguelike@GetDrop1.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1GetDrop1.png rename to resource/template/Mizuki@Roguelike@GetDrop1.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1GetDrop2.png b/resource/template/Mizuki@Roguelike@GetDrop2.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1GetDrop2.png rename to resource/template/Mizuki@Roguelike@GetDrop2.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1GetDrop3.png b/resource/template/Mizuki@Roguelike@GetDrop3.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1GetDrop3.png rename to resource/template/Mizuki@Roguelike@GetDrop3.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2GetDropBox.png b/resource/template/Mizuki@Roguelike@GetDropBox.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2GetDropBox.png rename to resource/template/Mizuki@Roguelike@GetDropBox.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2GetDropBoxSelect.png b/resource/template/Mizuki@Roguelike@GetDropBoxSelect.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2GetDropBoxSelect.png rename to resource/template/Mizuki@Roguelike@GetDropBoxSelect.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1GetDropCompleted.png b/resource/template/Mizuki@Roguelike@GetDropCompleted.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1GetDropCompleted.png rename to resource/template/Mizuki@Roguelike@GetDropCompleted.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1GetDropLeave.png b/resource/template/Mizuki@Roguelike@GetDropLeave.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1GetDropLeave.png rename to resource/template/Mizuki@Roguelike@GetDropLeave.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1GetDropRecruit.png b/resource/template/Mizuki@Roguelike@GetDropRecruit.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1GetDropRecruit.png rename to resource/template/Mizuki@Roguelike@GetDropRecruit.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1GetDropSelect.png b/resource/template/Mizuki@Roguelike@GetDropSelect.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1GetDropSelect.png rename to resource/template/Mizuki@Roguelike@GetDropSelect.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1GetDropSelectReward.png b/resource/template/Mizuki@Roguelike@GetDropSelectReward.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1GetDropSelectReward.png rename to resource/template/Mizuki@Roguelike@GetDropSelectReward.png diff --git a/resource/template/Roguelike1InitalDrop.png b/resource/template/Mizuki@Roguelike@InitalDrop.png similarity index 100% rename from resource/template/Roguelike1InitalDrop.png rename to resource/template/Mizuki@Roguelike@InitalDrop.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1LastReward.png b/resource/template/Mizuki@Roguelike@LastReward.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1LastReward.png rename to resource/template/Mizuki@Roguelike@LastReward.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1LastReward2.png b/resource/template/Mizuki@Roguelike@LastReward2.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1LastReward2.png rename to resource/template/Mizuki@Roguelike@LastReward2.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1LastReward3.png b/resource/template/Mizuki@Roguelike@LastReward3.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1LastReward3.png rename to resource/template/Mizuki@Roguelike@LastReward3.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2LastReward4.png b/resource/template/Mizuki@Roguelike@LastReward4.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2LastReward4.png rename to resource/template/Mizuki@Roguelike@LastReward4.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1RecruitConfirm.png b/resource/template/Mizuki@Roguelike@LastRewardConfirm.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1RecruitConfirm.png rename to resource/template/Mizuki@Roguelike@LastRewardConfirm.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1LastRewardRand.png b/resource/template/Mizuki@Roguelike@LastRewardRand.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1LastRewardRand.png rename to resource/template/Mizuki@Roguelike@LastRewardRand.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2MapObject.png b/resource/template/Mizuki@Roguelike@MapObject.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2MapObject.png rename to resource/template/Mizuki@Roguelike@MapObject.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1MissionFailedFlag.png b/resource/template/Mizuki@Roguelike@MissionFailedFlag.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1MissionFailedFlag.png rename to resource/template/Mizuki@Roguelike@MissionFailedFlag.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1MissionFailedFlag2.png b/resource/template/Mizuki@Roguelike@MissionFailedFlag2.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1MissionFailedFlag2.png rename to resource/template/Mizuki@Roguelike@MissionFailedFlag2.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1Recruit.png b/resource/template/Mizuki@Roguelike@Recruit.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1Recruit.png rename to resource/template/Mizuki@Roguelike@Recruit.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1Team3.png b/resource/template/Mizuki@Roguelike@RolesDefault.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1Team3.png rename to resource/template/Mizuki@Roguelike@RolesDefault.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1Recruit1.png b/resource/template/Mizuki@Roguelike@SquadDefault.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1Recruit1.png rename to resource/template/Mizuki@Roguelike@SquadDefault.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageBoons.png b/resource/template/Mizuki@Roguelike@StageBoons.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageBoons.png rename to resource/template/Mizuki@Roguelike@StageBoons.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageCambatDps.png b/resource/template/Mizuki@Roguelike@StageCambatDps.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageCambatDps.png rename to resource/template/Mizuki@Roguelike@StageCambatDps.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageCambatDpsEnter.png b/resource/template/Mizuki@Roguelike@StageCambatDpsEnter.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageCambatDpsEnter.png rename to resource/template/Mizuki@Roguelike@StageCambatDpsEnter.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2StageDreadfulFoe-5.png b/resource/template/Mizuki@Roguelike@StageDreadfulFoe-5.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2StageDreadfulFoe-5.png rename to resource/template/Mizuki@Roguelike@StageDreadfulFoe-5.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2StageDreadfulFoe-5Enter.png b/resource/template/Mizuki@Roguelike@StageDreadfulFoe-5Enter.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2StageDreadfulFoe-5Enter.png rename to resource/template/Mizuki@Roguelike@StageDreadfulFoe-5Enter.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageDreadfulFoe.png b/resource/template/Mizuki@Roguelike@StageDreadfulFoe.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageDreadfulFoe.png rename to resource/template/Mizuki@Roguelike@StageDreadfulFoe.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageDreadfulFoeEnter.png b/resource/template/Mizuki@Roguelike@StageDreadfulFoeEnter.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageDreadfulFoeEnter.png rename to resource/template/Mizuki@Roguelike@StageDreadfulFoeEnter.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageEmergencyDps.png b/resource/template/Mizuki@Roguelike@StageEmergencyDps.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageEmergencyDps.png rename to resource/template/Mizuki@Roguelike@StageEmergencyDps.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageEmergencyDpsEnter.png b/resource/template/Mizuki@Roguelike@StageEmergencyDpsEnter.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageEmergencyDpsEnter.png rename to resource/template/Mizuki@Roguelike@StageEmergencyDpsEnter.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2StageEmergencyTransportation.png b/resource/template/Mizuki@Roguelike@StageEmergencyTransportation.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2StageEmergencyTransportation.png rename to resource/template/Mizuki@Roguelike@StageEmergencyTransportation.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageEncounter.png b/resource/template/Mizuki@Roguelike@StageEncounter.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageEncounter.png rename to resource/template/Mizuki@Roguelike@StageEncounter.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageEncounterEnter.png b/resource/template/Mizuki@Roguelike@StageEncounterEnter.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageEncounterEnter.png rename to resource/template/Mizuki@Roguelike@StageEncounterEnter.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageEncounterFree.png b/resource/template/Mizuki@Roguelike@StageEncounterFree.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageEncounterFree.png rename to resource/template/Mizuki@Roguelike@StageEncounterFree.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageEncounterLeave.png b/resource/template/Mizuki@Roguelike@StageEncounterLeave.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageEncounterLeave.png rename to resource/template/Mizuki@Roguelike@StageEncounterLeave.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageEncounterLeaveConfirm.png b/resource/template/Mizuki@Roguelike@StageEncounterLeaveConfirm.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageEncounterLeaveConfirm.png rename to resource/template/Mizuki@Roguelike@StageEncounterLeaveConfirm.png diff --git a/resource/template/Roguelike1StageEncounterSpecialClose.png b/resource/template/Mizuki@Roguelike@StageEncounterSpecialClose.png similarity index 100% rename from resource/template/Roguelike1StageEncounterSpecialClose.png rename to resource/template/Mizuki@Roguelike@StageEncounterSpecialClose.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageEncounterUnknown.png b/resource/template/Mizuki@Roguelike@StageEncounterUnknown.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageEncounterUnknown.png rename to resource/template/Mizuki@Roguelike@StageEncounterUnknown.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2StageGambling.png b/resource/template/Mizuki@Roguelike@StageGambling.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2StageGambling.png rename to resource/template/Mizuki@Roguelike@StageGambling.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2StageRegionalCommissioning.png b/resource/template/Mizuki@Roguelike@StageRegionalCommissioning.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2StageRegionalCommissioning.png rename to resource/template/Mizuki@Roguelike@StageRegionalCommissioning.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageSafeHouse.png b/resource/template/Mizuki@Roguelike@StageSafeHouse.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageSafeHouse.png rename to resource/template/Mizuki@Roguelike@StageSafeHouse.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageSafeHouseEnter.png b/resource/template/Mizuki@Roguelike@StageSafeHouseEnter.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageSafeHouseEnter.png rename to resource/template/Mizuki@Roguelike@StageSafeHouseEnter.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageTrader.png b/resource/template/Mizuki@Roguelike@StageTrader.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageTrader.png rename to resource/template/Mizuki@Roguelike@StageTrader.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1StageTraderEnter.png b/resource/template/Mizuki@Roguelike@StageTraderEnter.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1StageTraderEnter.png rename to resource/template/Mizuki@Roguelike@StageTraderEnter.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike2StageWindAndRain.png b/resource/template/Mizuki@Roguelike@StageWindAndRain.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike2StageWindAndRain.png rename to resource/template/Mizuki@Roguelike@StageWindAndRain.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1Start.png b/resource/template/Mizuki@Roguelike@StartExplore.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1Start.png rename to resource/template/Mizuki@Roguelike@StartExplore.png diff --git a/resource/addition/Roguelike2/resource/template/Roguelike1TodoEnter.png b/resource/template/Mizuki@Roguelike@TodoEnter.png similarity index 100% rename from resource/addition/Roguelike2/resource/template/Roguelike1TodoEnter.png rename to resource/template/Mizuki@Roguelike@TodoEnter.png diff --git a/resource/template/Roguelike1Abandon.png b/resource/template/Phantom@Roguelike@Abandon.png similarity index 100% rename from resource/template/Roguelike1Abandon.png rename to resource/template/Phantom@Roguelike@Abandon.png diff --git a/resource/template/Phantom@Roguelike@ChooseDifficulty.png b/resource/template/Phantom@Roguelike@ChooseDifficulty.png new file mode 100644 index 0000000000..1adf20cc48 Binary files /dev/null and b/resource/template/Phantom@Roguelike@ChooseDifficulty.png differ diff --git a/resource/template/Roguelike1CloseCollection.png b/resource/template/Phantom@Roguelike@CloseCollection.png similarity index 100% rename from resource/template/Roguelike1CloseCollection.png rename to resource/template/Phantom@Roguelike@CloseCollection.png diff --git a/resource/template/Roguelike1Continue.png b/resource/template/Phantom@Roguelike@Continue.png similarity index 100% rename from resource/template/Roguelike1Continue.png rename to resource/template/Phantom@Roguelike@Continue.png diff --git a/resource/template/Roguelike1EnterAfterRecruit.png b/resource/template/Phantom@Roguelike@EnterAfterRecruit.png similarity index 100% rename from resource/template/Roguelike1EnterAfterRecruit.png rename to resource/template/Phantom@Roguelike@EnterAfterRecruit.png diff --git a/resource/template/Phantom@Roguelike@GamePass.png b/resource/template/Phantom@Roguelike@GamePass.png new file mode 100644 index 0000000000..76d71a9dbf Binary files /dev/null and b/resource/template/Phantom@Roguelike@GamePass.png differ diff --git a/resource/template/Phantom@Roguelike@GamePassSkip1.png b/resource/template/Phantom@Roguelike@GamePassSkip1.png new file mode 100644 index 0000000000..42f4767989 Binary files /dev/null and b/resource/template/Phantom@Roguelike@GamePassSkip1.png differ diff --git a/resource/template/Roguelike1GamePassSkip1Confirm.png b/resource/template/Phantom@Roguelike@GamePassSkip1Confirm.png similarity index 100% rename from resource/template/Roguelike1GamePassSkip1Confirm.png rename to resource/template/Phantom@Roguelike@GamePassSkip1Confirm.png diff --git a/resource/template/Roguelike1GetDrop1.png b/resource/template/Phantom@Roguelike@GetDrop1.png similarity index 100% rename from resource/template/Roguelike1GetDrop1.png rename to resource/template/Phantom@Roguelike@GetDrop1.png diff --git a/resource/template/Roguelike1GetDrop2.png b/resource/template/Phantom@Roguelike@GetDrop2.png similarity index 100% rename from resource/template/Roguelike1GetDrop2.png rename to resource/template/Phantom@Roguelike@GetDrop2.png diff --git a/resource/template/Roguelike1GetDrop3.png b/resource/template/Phantom@Roguelike@GetDrop3.png similarity index 100% rename from resource/template/Roguelike1GetDrop3.png rename to resource/template/Phantom@Roguelike@GetDrop3.png diff --git a/resource/template/Roguelike1GetDropCompleted.png b/resource/template/Phantom@Roguelike@GetDropCompleted.png similarity index 100% rename from resource/template/Roguelike1GetDropCompleted.png rename to resource/template/Phantom@Roguelike@GetDropCompleted.png diff --git a/resource/template/Roguelike1GetDropLeave.png b/resource/template/Phantom@Roguelike@GetDropLeave.png similarity index 100% rename from resource/template/Roguelike1GetDropLeave.png rename to resource/template/Phantom@Roguelike@GetDropLeave.png diff --git a/resource/template/Roguelike1GetDropRecruit.png b/resource/template/Phantom@Roguelike@GetDropRecruit.png similarity index 100% rename from resource/template/Roguelike1GetDropRecruit.png rename to resource/template/Phantom@Roguelike@GetDropRecruit.png diff --git a/resource/template/Roguelike1GetDropSelect.png b/resource/template/Phantom@Roguelike@GetDropSelect.png similarity index 100% rename from resource/template/Roguelike1GetDropSelect.png rename to resource/template/Phantom@Roguelike@GetDropSelect.png diff --git a/resource/template/Roguelike1GetDropSelectReward.png b/resource/template/Phantom@Roguelike@GetDropSelectReward.png similarity index 100% rename from resource/template/Roguelike1GetDropSelectReward.png rename to resource/template/Phantom@Roguelike@GetDropSelectReward.png diff --git a/resource/template/Phantom@Roguelike@InitalDrop.png b/resource/template/Phantom@Roguelike@InitalDrop.png new file mode 100644 index 0000000000..f368ad9413 Binary files /dev/null and b/resource/template/Phantom@Roguelike@InitalDrop.png differ diff --git a/resource/template/Roguelike1LastReward.png b/resource/template/Phantom@Roguelike@LastReward.png similarity index 100% rename from resource/template/Roguelike1LastReward.png rename to resource/template/Phantom@Roguelike@LastReward.png diff --git a/resource/template/Roguelike1LastReward2.png b/resource/template/Phantom@Roguelike@LastReward2.png similarity index 100% rename from resource/template/Roguelike1LastReward2.png rename to resource/template/Phantom@Roguelike@LastReward2.png diff --git a/resource/template/Roguelike1LastReward3.png b/resource/template/Phantom@Roguelike@LastReward3.png similarity index 100% rename from resource/template/Roguelike1LastReward3.png rename to resource/template/Phantom@Roguelike@LastReward3.png diff --git a/resource/template/Roguelike1RecruitConfirm.png b/resource/template/Phantom@Roguelike@LastRewardConfirm.png similarity index 100% rename from resource/template/Roguelike1RecruitConfirm.png rename to resource/template/Phantom@Roguelike@LastRewardConfirm.png diff --git a/resource/template/Roguelike1LastRewardRand.png b/resource/template/Phantom@Roguelike@LastRewardRand.png similarity index 100% rename from resource/template/Roguelike1LastRewardRand.png rename to resource/template/Phantom@Roguelike@LastRewardRand.png diff --git a/resource/template/Roguelike1MissionFailedFlag.png b/resource/template/Phantom@Roguelike@MissionFailedFlag.png similarity index 100% rename from resource/template/Roguelike1MissionFailedFlag.png rename to resource/template/Phantom@Roguelike@MissionFailedFlag.png diff --git a/resource/template/Roguelike1MissionFailedFlag2.png b/resource/template/Phantom@Roguelike@MissionFailedFlag2.png similarity index 100% rename from resource/template/Roguelike1MissionFailedFlag2.png rename to resource/template/Phantom@Roguelike@MissionFailedFlag2.png diff --git a/resource/template/Roguelike1Recruit.png b/resource/template/Phantom@Roguelike@Recruit.png similarity index 100% rename from resource/template/Roguelike1Recruit.png rename to resource/template/Phantom@Roguelike@Recruit.png diff --git a/resource/template/Roguelike1Team3.png b/resource/template/Phantom@Roguelike@RolesDefault.png similarity index 100% rename from resource/template/Roguelike1Team3.png rename to resource/template/Phantom@Roguelike@RolesDefault.png diff --git a/resource/template/Roguelike1Recruit1.png b/resource/template/Phantom@Roguelike@SquadDefault.png similarity index 100% rename from resource/template/Roguelike1Recruit1.png rename to resource/template/Phantom@Roguelike@SquadDefault.png diff --git a/resource/template/Roguelike1StageBoons.png b/resource/template/Phantom@Roguelike@StageBoons.png similarity index 100% rename from resource/template/Roguelike1StageBoons.png rename to resource/template/Phantom@Roguelike@StageBoons.png diff --git a/resource/template/Roguelike1StageCambatDps.png b/resource/template/Phantom@Roguelike@StageCambatDps.png similarity index 100% rename from resource/template/Roguelike1StageCambatDps.png rename to resource/template/Phantom@Roguelike@StageCambatDps.png diff --git a/resource/template/Roguelike1StageCambatDpsEnter.png b/resource/template/Phantom@Roguelike@StageCambatDpsEnter.png similarity index 100% rename from resource/template/Roguelike1StageCambatDpsEnter.png rename to resource/template/Phantom@Roguelike@StageCambatDpsEnter.png diff --git a/resource/template/Roguelike1StageDreadfulFoe.png b/resource/template/Phantom@Roguelike@StageDreadfulFoe.png similarity index 100% rename from resource/template/Roguelike1StageDreadfulFoe.png rename to resource/template/Phantom@Roguelike@StageDreadfulFoe.png diff --git a/resource/template/Roguelike1StageDreadfulFoeEnter.png b/resource/template/Phantom@Roguelike@StageDreadfulFoeEnter.png similarity index 100% rename from resource/template/Roguelike1StageDreadfulFoeEnter.png rename to resource/template/Phantom@Roguelike@StageDreadfulFoeEnter.png diff --git a/resource/template/Roguelike1StageEmergencyDps.png b/resource/template/Phantom@Roguelike@StageEmergencyDps.png similarity index 100% rename from resource/template/Roguelike1StageEmergencyDps.png rename to resource/template/Phantom@Roguelike@StageEmergencyDps.png diff --git a/resource/template/Roguelike1StageEmergencyDpsEnter.png b/resource/template/Phantom@Roguelike@StageEmergencyDpsEnter.png similarity index 100% rename from resource/template/Roguelike1StageEmergencyDpsEnter.png rename to resource/template/Phantom@Roguelike@StageEmergencyDpsEnter.png diff --git a/resource/template/Roguelike1StageEncounter.png b/resource/template/Phantom@Roguelike@StageEncounter.png similarity index 100% rename from resource/template/Roguelike1StageEncounter.png rename to resource/template/Phantom@Roguelike@StageEncounter.png diff --git a/resource/template/Roguelike1StageEncounterEnter.png b/resource/template/Phantom@Roguelike@StageEncounterEnter.png similarity index 100% rename from resource/template/Roguelike1StageEncounterEnter.png rename to resource/template/Phantom@Roguelike@StageEncounterEnter.png diff --git a/resource/template/Roguelike1StageEncounterFree.png b/resource/template/Phantom@Roguelike@StageEncounterFree.png similarity index 100% rename from resource/template/Roguelike1StageEncounterFree.png rename to resource/template/Phantom@Roguelike@StageEncounterFree.png diff --git a/resource/template/Roguelike1StageEncounterLeave.png b/resource/template/Phantom@Roguelike@StageEncounterLeave.png similarity index 100% rename from resource/template/Roguelike1StageEncounterLeave.png rename to resource/template/Phantom@Roguelike@StageEncounterLeave.png diff --git a/resource/template/Roguelike1StageEncounterLeaveConfirm.png b/resource/template/Phantom@Roguelike@StageEncounterLeaveConfirm.png similarity index 100% rename from resource/template/Roguelike1StageEncounterLeaveConfirm.png rename to resource/template/Phantom@Roguelike@StageEncounterLeaveConfirm.png diff --git a/resource/template/Phantom@Roguelike@StageEncounterSpecialClose.png b/resource/template/Phantom@Roguelike@StageEncounterSpecialClose.png new file mode 100644 index 0000000000..1e9ef00b50 Binary files /dev/null and b/resource/template/Phantom@Roguelike@StageEncounterSpecialClose.png differ diff --git a/resource/template/Roguelike1StageEncounterUnknown.png b/resource/template/Phantom@Roguelike@StageEncounterUnknown.png similarity index 100% rename from resource/template/Roguelike1StageEncounterUnknown.png rename to resource/template/Phantom@Roguelike@StageEncounterUnknown.png diff --git a/resource/template/Roguelike1StageSafeHouse.png b/resource/template/Phantom@Roguelike@StageSafeHouse.png similarity index 100% rename from resource/template/Roguelike1StageSafeHouse.png rename to resource/template/Phantom@Roguelike@StageSafeHouse.png diff --git a/resource/template/Roguelike1StageSafeHouseEnter.png b/resource/template/Phantom@Roguelike@StageSafeHouseEnter.png similarity index 100% rename from resource/template/Roguelike1StageSafeHouseEnter.png rename to resource/template/Phantom@Roguelike@StageSafeHouseEnter.png diff --git a/resource/template/Roguelike1StageTrader.png b/resource/template/Phantom@Roguelike@StageTrader.png similarity index 100% rename from resource/template/Roguelike1StageTrader.png rename to resource/template/Phantom@Roguelike@StageTrader.png diff --git a/resource/template/Roguelike1StageTraderEnter.png b/resource/template/Phantom@Roguelike@StageTraderEnter.png similarity index 100% rename from resource/template/Roguelike1StageTraderEnter.png rename to resource/template/Phantom@Roguelike@StageTraderEnter.png diff --git a/resource/template/Roguelike1Start.png b/resource/template/Phantom@Roguelike@StartExplore.png similarity index 100% rename from resource/template/Roguelike1Start.png rename to resource/template/Phantom@Roguelike@StartExplore.png diff --git a/resource/template/Roguelike1TodoEnter.png b/resource/template/Phantom@Roguelike@TodoEnter.png similarity index 100% rename from resource/template/Roguelike1TodoEnter.png rename to resource/template/Phantom@Roguelike@TodoEnter.png diff --git a/resource/template/Roguelike1ShoppingFlag.png b/resource/template/Roguelike1ShoppingFlag.png deleted file mode 100644 index 3613b2772d..0000000000 Binary files a/resource/template/Roguelike1ShoppingFlag.png and /dev/null differ diff --git a/resource/template/Roguelike1TeamConfirm.png b/resource/template/Roguelike1TeamConfirm.png deleted file mode 100644 index c1990edd15..0000000000 Binary files a/resource/template/Roguelike1TeamConfirm.png and /dev/null differ diff --git a/resource/template/Roguelike1AbandonConfirm.png b/resource/template/Roguelike@AbandonConfirm.png similarity index 100% rename from resource/template/Roguelike1AbandonConfirm.png rename to resource/template/Roguelike@AbandonConfirm.png diff --git a/resource/template/Roguelike1ChooseOperConfirm.png b/resource/template/Roguelike@ChooseOperConfirm.png similarity index 100% rename from resource/template/Roguelike1ChooseOperConfirm.png rename to resource/template/Roguelike@ChooseOperConfirm.png diff --git a/resource/template/Roguelike1DialogSkip.png b/resource/template/Roguelike@DialogSkip.png similarity index 100% rename from resource/template/Roguelike1DialogSkip.png rename to resource/template/Roguelike@DialogSkip.png diff --git a/resource/template/Roguelike1DialogSkipConfirm.png b/resource/template/Roguelike@DialogSkipConfirm.png similarity index 100% rename from resource/template/Roguelike1DialogSkipConfirm.png rename to resource/template/Roguelike@DialogSkipConfirm.png diff --git a/resource/template/Roguelike1DropsFlag.png b/resource/template/Roguelike@DropsFlag.png similarity index 100% rename from resource/template/Roguelike1DropsFlag.png rename to resource/template/Roguelike@DropsFlag.png diff --git a/resource/template/Roguelike1ExitThenAbandon.png b/resource/template/Roguelike@ExitThenAbandon.png similarity index 100% rename from resource/template/Roguelike1ExitThenAbandon.png rename to resource/template/Roguelike@ExitThenAbandon.png diff --git a/resource/template/Roguelike1FormationConfirm.png b/resource/template/Roguelike@FormationConfirm.png similarity index 100% rename from resource/template/Roguelike1FormationConfirm.png rename to resource/template/Roguelike@FormationConfirm.png diff --git a/resource/template/Roguelike1GamePassSkip2.png b/resource/template/Roguelike@GamePassSkip2.png similarity index 100% rename from resource/template/Roguelike1GamePassSkip2.png rename to resource/template/Roguelike@GamePassSkip2.png diff --git a/resource/template/Roguelike1GamePassTheEndConfirm.png b/resource/template/Roguelike@GamePassTheEndConfirm.png similarity index 100% rename from resource/template/Roguelike1GamePassTheEndConfirm.png rename to resource/template/Roguelike@GamePassTheEndConfirm.png diff --git a/resource/template/Roguelike1GetDropLeaveConfirm.png b/resource/template/Roguelike@GetDropLeaveConfirm.png similarity index 100% rename from resource/template/Roguelike1GetDropLeaveConfirm.png rename to resource/template/Roguelike@GetDropLeaveConfirm.png diff --git a/resource/template/Roguelike1MissionCompletedFlag.png b/resource/template/Roguelike@MissionCompletedFlag.png similarity index 100% rename from resource/template/Roguelike1MissionCompletedFlag.png rename to resource/template/Roguelike@MissionCompletedFlag.png diff --git a/resource/template/Roguelike@QuickFormation.png b/resource/template/Roguelike@QuickFormation.png new file mode 100644 index 0000000000..742325ad5e Binary files /dev/null and b/resource/template/Roguelike@QuickFormation.png differ diff --git a/resource/template/Roguelike1RecruitCloseGuide.png b/resource/template/Roguelike@RecruitCloseGuide.png similarity index 100% rename from resource/template/Roguelike1RecruitCloseGuide.png rename to resource/template/Roguelike@RecruitCloseGuide.png diff --git a/resource/template/Roguelike1StageEncounterGiveUpRecruitConfirm.png b/resource/template/Roguelike@StageEncounterGiveUpRecruitConfirm.png similarity index 100% rename from resource/template/Roguelike1StageEncounterGiveUpRecruitConfirm.png rename to resource/template/Roguelike@StageEncounterGiveUpRecruitConfirm.png diff --git a/resource/template/Roguelike1StageTraderInvestCancel.png b/resource/template/Roguelike@StageTraderInvestCancel.png similarity index 100% rename from resource/template/Roguelike1StageTraderInvestCancel.png rename to resource/template/Roguelike@StageTraderInvestCancel.png diff --git a/resource/template/Roguelike1StageTraderInvestConfirm.png b/resource/template/Roguelike@StageTraderInvestConfirm.png similarity index 100% rename from resource/template/Roguelike1StageTraderInvestConfirm.png rename to resource/template/Roguelike@StageTraderInvestConfirm.png diff --git a/resource/template/Roguelike1StageTraderInvestSystem.png b/resource/template/Roguelike@StageTraderInvestSystem.png similarity index 100% rename from resource/template/Roguelike1StageTraderInvestSystem.png rename to resource/template/Roguelike@StageTraderInvestSystem.png diff --git a/resource/template/Roguelike1StageTraderInvestSystemEnter.png b/resource/template/Roguelike@StageTraderInvestSystemEnter.png similarity index 100% rename from resource/template/Roguelike1StageTraderInvestSystemEnter.png rename to resource/template/Roguelike@StageTraderInvestSystemEnter.png diff --git a/resource/template/Roguelike1StageTraderInvestSystemError.png b/resource/template/Roguelike@StageTraderInvestSystemError.png similarity index 100% rename from resource/template/Roguelike1StageTraderInvestSystemError.png rename to resource/template/Roguelike@StageTraderInvestSystemError.png diff --git a/resource/template/Roguelike1StageTraderInvestSystemLeave.png b/resource/template/Roguelike@StageTraderInvestSystemLeave.png similarity index 100% rename from resource/template/Roguelike1StageTraderInvestSystemLeave.png rename to resource/template/Roguelike@StageTraderInvestSystemLeave.png diff --git a/resource/template/Roguelike1StageTraderLeave.png b/resource/template/Roguelike@StageTraderLeave.png similarity index 100% rename from resource/template/Roguelike1StageTraderLeave.png rename to resource/template/Roguelike@StageTraderLeave.png diff --git a/resource/template/Roguelike1StageTraderLeaveConfirm.png b/resource/template/Roguelike@StageTraderLeaveConfirm.png similarity index 100% rename from resource/template/Roguelike1StageTraderLeaveConfirm.png rename to resource/template/Roguelike@StageTraderLeaveConfirm.png diff --git a/resource/template/Roguelike1StartAction.png b/resource/template/Roguelike@StartAction.png similarity index 100% rename from resource/template/Roguelike1StartAction.png rename to resource/template/Roguelike@StartAction.png diff --git a/resource/template/Roguelike1TraderRandomShopping.png b/resource/template/Roguelike@TraderRandomShopping.png similarity index 100% rename from resource/template/Roguelike1TraderRandomShopping.png rename to resource/template/Roguelike@TraderRandomShopping.png diff --git a/resource/template/Roguelike1TraderRandomShoppingConfirm.png b/resource/template/Roguelike@TraderRandomShoppingConfirm.png similarity index 100% rename from resource/template/Roguelike1TraderRandomShoppingConfirm.png rename to resource/template/Roguelike@TraderRandomShoppingConfirm.png diff --git a/resource/template/Roguelike1BattleAbandon.png b/resource/template/RoguelikeBattleAbandon.png similarity index 100% rename from resource/template/Roguelike1BattleAbandon.png rename to resource/template/RoguelikeBattleAbandon.png diff --git a/resource/template/Roguelike1BattleAbandonConfirm.png b/resource/template/RoguelikeBattleAbandonConfirm.png similarity index 100% rename from resource/template/Roguelike1BattleAbandonConfirm.png rename to resource/template/RoguelikeBattleAbandonConfirm.png diff --git a/resource/template/Roguelike1BattleExitBegin.png b/resource/template/RoguelikeBattleExitBegin.png similarity index 100% rename from resource/template/Roguelike1BattleExitBegin.png rename to resource/template/RoguelikeBattleExitBegin.png diff --git a/resource/template/Roguelike1FormationOper.png b/resource/template/RoguelikeFormationOper.png similarity index 100% rename from resource/template/Roguelike1FormationOper.png rename to resource/template/RoguelikeFormationOper.png diff --git a/resource/template/Roguelike1QuickFormationClearAndReselect.png b/resource/template/RoguelikeQuickFormationClearAndReselect.png similarity index 100% rename from resource/template/Roguelike1QuickFormationClearAndReselect.png rename to resource/template/RoguelikeQuickFormationClearAndReselect.png diff --git a/resource/template/Roguelike1RecruitElite0.png b/resource/template/RoguelikeRecruitElite0.png similarity index 100% rename from resource/template/Roguelike1RecruitElite0.png rename to resource/template/RoguelikeRecruitElite0.png diff --git a/resource/template/Roguelike1RecruitElite1.png b/resource/template/RoguelikeRecruitElite1.png similarity index 100% rename from resource/template/Roguelike1RecruitElite1.png rename to resource/template/RoguelikeRecruitElite1.png diff --git a/resource/template/Roguelike1RecruitElite2.png b/resource/template/RoguelikeRecruitElite2.png similarity index 100% rename from resource/template/Roguelike1RecruitElite2.png rename to resource/template/RoguelikeRecruitElite2.png diff --git a/resource/template/Roguelike1RecruitOcrFlag.png b/resource/template/RoguelikeRecruitOcrFlag.png similarity index 100% rename from resource/template/Roguelike1RecruitOcrFlag.png rename to resource/template/RoguelikeRecruitOcrFlag.png diff --git a/resource/template/Roguelike1SkillSelectionFlag.png b/resource/template/RoguelikeSkillSelectionFlag.png similarity index 100% rename from resource/template/Roguelike1SkillSelectionFlag.png rename to resource/template/RoguelikeSkillSelectionFlag.png diff --git a/resource/template/Roguelike1SkillSelectionTeamFull.png b/resource/template/RoguelikeSkillSelectionTeamFull.png similarity index 100% rename from resource/template/Roguelike1SkillSelectionTeamFull.png rename to resource/template/RoguelikeSkillSelectionTeamFull.png diff --git a/resource/template/StageThemeChapter3ToEpisode10.png b/resource/template/StageThemeChapter3ToEpisode10.png deleted file mode 100644 index 745d054556..0000000000 Binary files a/resource/template/StageThemeChapter3ToEpisode10.png and /dev/null differ diff --git a/resource/template/StageThemeChapter3ToEpisode11.png b/resource/template/StageThemeChapter3ToEpisode11.png new file mode 100644 index 0000000000..841362d8a0 Binary files /dev/null and b/resource/template/StageThemeChapter3ToEpisode11.png differ diff --git a/src/MeoAssistant/Assistant.cpp b/src/MeoAssistant/Assistant.cpp index 0c4c8d9efa..400be5fca5 100644 --- a/src/MeoAssistant/Assistant.cpp +++ b/src/MeoAssistant/Assistant.cpp @@ -119,13 +119,12 @@ asst::Assistant::TaskId asst::Assistant::append_task(const std::string& type, co #undef ASST_ASSISTANT_APPEND_TASK_FROM_STRING_IF_BRANCH auto& json = ret.value(); - bool enable = json.get("enable", true); - ptr->set_enable(enable); + ptr->set_exit_flag(&m_thread_idle).set_ctrler(m_ctrler).set_status(m_status).set_enable(json.get("enable", true)); + bool params_ret = ptr->set_params(json); if (!params_ret) { return 0; } - std::unique_lock lock(m_mutex); ++m_task_id; @@ -255,8 +254,6 @@ void Assistant::working_proc() }; task_callback(AsstMsg::TaskChainStart, callback_json, this); - task_ptr->set_exit_flag(&m_thread_idle).set_ctrler(m_ctrler).set_status(m_status); - bool ret = task_ptr->run(); finished_tasks.emplace_back(id); @@ -266,7 +263,9 @@ void Assistant::working_proc() } lock.unlock(); - task_callback(ret ? AsstMsg::TaskChainCompleted : AsstMsg::TaskChainError, callback_json, this); + // We don't consider a task failed when user stop it. + auto msg = ret || m_thread_idle ? AsstMsg::TaskChainCompleted : AsstMsg::TaskChainError; + task_callback(msg, callback_json, this); if (!m_thread_idle && m_tasks_list.empty()) { callback_json["finished_tasks"] = json::array(finished_tasks); diff --git a/src/MeoAssistant/ImageAnalyzer/RoguelikeFormationImageAnalyzer.cpp b/src/MeoAssistant/ImageAnalyzer/RoguelikeFormationImageAnalyzer.cpp index 9e645c2adf..2207b64e61 100644 --- a/src/MeoAssistant/ImageAnalyzer/RoguelikeFormationImageAnalyzer.cpp +++ b/src/MeoAssistant/ImageAnalyzer/RoguelikeFormationImageAnalyzer.cpp @@ -12,7 +12,7 @@ bool asst::RoguelikeFormationImageAnalyzer::analyze() m_result.clear(); MultiMatchImageAnalyzer opers_analyzer(m_image); - opers_analyzer.set_task_info("Roguelike1FormationOper"); + opers_analyzer.set_task_info("RoguelikeFormationOper"); if (!opers_analyzer.analyze()) { return false; @@ -51,7 +51,7 @@ bool asst::RoguelikeFormationImageAnalyzer::selected_analyze(const Rect& roi) cv::Mat hsv; cv::cvtColor(img_roi, hsv, cv::COLOR_BGR2HSV); - const auto selected_task_ptr = Task.get("Roguelike1FormationOperSelected"); + const auto selected_task_ptr = Task.get("RoguelikeFormationOperSelected"); int h_low = selected_task_ptr->mask_range.first; int h_up = selected_task_ptr->mask_range.second; int s_low = selected_task_ptr->specific_rect.x; diff --git a/src/MeoAssistant/ImageAnalyzer/RoguelikeRecruitImageAnalyzer.cpp b/src/MeoAssistant/ImageAnalyzer/RoguelikeRecruitImageAnalyzer.cpp index c0867a4fc2..28b866dab2 100644 --- a/src/MeoAssistant/ImageAnalyzer/RoguelikeRecruitImageAnalyzer.cpp +++ b/src/MeoAssistant/ImageAnalyzer/RoguelikeRecruitImageAnalyzer.cpp @@ -4,23 +4,32 @@ #include "General/OcrWithFlagTemplImageAnalyzer.h" #include "TaskData.h" #include "Utils/Logger.hpp" +#include "Utils/NoWarningCV.h" bool asst::RoguelikeRecruitImageAnalyzer::analyze() { LogTraceFunction; OcrWithFlagTemplImageAnalyzer analyzer(m_image); - analyzer.set_task_info("Roguelike1RecruitOcrFlag", "Roguelike1RecruitOcr"); + analyzer.set_task_info("RoguelikeRecruitOcrFlag", "RoguelikeRecruitOcr"); analyzer.set_replace(Task.get("CharsNameOcrReplace")->replace_map); - analyzer.set_threshold(Task.get("Roguelike1RecruitOcr")->specific_rect.x); + analyzer.set_threshold(Task.get("RoguelikeRecruitOcr")->specific_rect.x); if (!analyzer.analyze()) { return false; } + // using blue channel only when matching level to filter out the yellow ring + cv::Mat bbb_image; + { + cv::Mat blue; + cv::extractChannel(m_image, blue, 0); + cv::merge(std::array { blue, blue, blue }, bbb_image); + } + for (const auto& [_, rect, name] : analyzer.get_result()) { int elite = match_elite(rect); - int level = match_level(rect); + int level = match_level(bbb_image, rect); if (level == 0) { // 要么就是识别错了,要么这个干员希望不够,是灰色的 @@ -46,9 +55,9 @@ int asst::RoguelikeRecruitImageAnalyzer::match_elite(const Rect& raw_roi) LogTraceFunction; static const std::unordered_map EliteTaskName = { - { "Roguelike1RecruitElite0", 0 }, - { "Roguelike1RecruitElite1", 1 }, - { "Roguelike1RecruitElite2", 2 }, + { "RoguelikeRecruitElite0", 0 }, + { "RoguelikeRecruitElite1", 1 }, + { "RoguelikeRecruitElite2", 2 }, }; int elite_result = 0; @@ -72,12 +81,12 @@ int asst::RoguelikeRecruitImageAnalyzer::match_elite(const Rect& raw_roi) return elite_result; } -int asst::RoguelikeRecruitImageAnalyzer::match_level(const Rect& raw_roi) +int asst::RoguelikeRecruitImageAnalyzer::match_level(const cv::Mat& image, const Rect& raw_roi) { LogTraceFunction; - auto task_ptr = Task.get("Roguelike1RecruitLevel"); - OcrWithPreprocessImageAnalyzer analyzer(m_image, raw_roi.move(task_ptr->roi)); + auto task_ptr = Task.get("RoguelikeRecruitLevel"); + OcrWithPreprocessImageAnalyzer analyzer(image, raw_roi.move(task_ptr->roi)); auto& replace = Task.get("NumberOcrReplace")->replace_map; analyzer.set_replace(replace); analyzer.set_expansion(1); diff --git a/src/MeoAssistant/ImageAnalyzer/RoguelikeRecruitImageAnalyzer.h b/src/MeoAssistant/ImageAnalyzer/RoguelikeRecruitImageAnalyzer.h index 0e2445bc09..4d91063407 100644 --- a/src/MeoAssistant/ImageAnalyzer/RoguelikeRecruitImageAnalyzer.h +++ b/src/MeoAssistant/ImageAnalyzer/RoguelikeRecruitImageAnalyzer.h @@ -17,7 +17,7 @@ namespace asst private: int match_elite(const Rect& raw_roi); - int match_level(const Rect& raw_roi); + static int match_level(const cv::Mat& image, const Rect& raw_roi); std::vector m_result; }; diff --git a/src/MeoAssistant/ImageAnalyzer/RoguelikeSkillSelectionImageAnalyzer.cpp b/src/MeoAssistant/ImageAnalyzer/RoguelikeSkillSelectionImageAnalyzer.cpp index d6afa10c99..09a93c3eae 100644 --- a/src/MeoAssistant/ImageAnalyzer/RoguelikeSkillSelectionImageAnalyzer.cpp +++ b/src/MeoAssistant/ImageAnalyzer/RoguelikeSkillSelectionImageAnalyzer.cpp @@ -13,7 +13,7 @@ bool asst::RoguelikeSkillSelectionImageAnalyzer::analyze() { MultiMatchImageAnalyzer flag_analyzer(m_image); - flag_analyzer.set_task_info("Roguelike1SkillSelectionFlag"); + flag_analyzer.set_task_info("RoguelikeSkillSelectionFlag"); if (!flag_analyzer.analyze()) { return false; @@ -49,7 +49,7 @@ bool asst::RoguelikeSkillSelectionImageAnalyzer::analyze() std::string asst::RoguelikeSkillSelectionImageAnalyzer::name_analyze(const Rect& roi) { OcrWithPreprocessImageAnalyzer analyzer; - auto name_task_ptr = Task.get("Roguelike1SkillSelectionName"); + auto name_task_ptr = Task.get("RoguelikeSkillSelectionName"); analyzer.set_threshold(name_task_ptr->specific_rect.x); analyzer.set_task_info(name_task_ptr); analyzer.set_image(m_image); @@ -66,9 +66,9 @@ std::string asst::RoguelikeSkillSelectionImageAnalyzer::name_analyze(const Rect& std::vector asst::RoguelikeSkillSelectionImageAnalyzer::skill_analyze(const Rect& roi) { static const std::array TasksName = { - "Roguelike1SkillSelectionMove1", - "Roguelike1SkillSelectionMove2", - "Roguelike1SkillSelectionMove3", + "RoguelikeSkillSelectionMove1", + "RoguelikeSkillSelectionMove2", + "RoguelikeSkillSelectionMove3", }; std::vector result; result.reserve(TasksName.size()); @@ -82,6 +82,6 @@ std::vector asst::RoguelikeSkillSelectionImageAnalyzer::skill_analyz void asst::RoguelikeSkillSelectionImageAnalyzer::team_full_analyze() { MatchImageAnalyzer analyzer(m_image); - analyzer.set_task_info("Roguelike1SkillSelectionTeamFull"); + analyzer.set_task_info("RoguelikeSkillSelectionTeamFull"); m_team_full = !analyzer.analyze(); } diff --git a/src/MeoAssistant/Resource/TemplResource.cpp b/src/MeoAssistant/Resource/TemplResource.cpp index 8677583c7b..a88d13cab5 100644 --- a/src/MeoAssistant/Resource/TemplResource.cpp +++ b/src/MeoAssistant/Resource/TemplResource.cpp @@ -19,6 +19,9 @@ bool asst::TemplResource::load(const std::filesystem::path& path) LogTraceFunction; Log.info("load", path); +#ifdef ASST_DEBUG + bool some_file_not_exists = false; +#endif for (const std::string& filename : m_templs_filename) { std::filesystem::path filepath(path / asst::utils::path(filename)); if (!filepath.has_extension()) { @@ -33,9 +36,18 @@ bool asst::TemplResource::load(const std::filesystem::path& path) } else { Log.error("Templ load failed, file not exists", filepath); +#ifdef ASST_DEBUG + some_file_not_exists = true; +#else return false; +#endif } } +#ifdef ASST_DEBUG + if (some_file_not_exists) { + return false; + } +#endif m_loaded = true; return true; } diff --git a/src/MeoAssistant/RuntimeStatus.cpp b/src/MeoAssistant/RuntimeStatus.cpp index ca7ac7bc2a..7bcbe10bda 100644 --- a/src/MeoAssistant/RuntimeStatus.cpp +++ b/src/MeoAssistant/RuntimeStatus.cpp @@ -59,3 +59,23 @@ void asst::RuntimeStatus::clear_str() noexcept { m_string.clear(); } + +std::optional asst::RuntimeStatus::get_properties(const std::string& key) const noexcept +{ + if (auto iter = m_properties.find(key); iter != m_properties.cend()) { + return iter->second; + } + else { + return std::nullopt; + } +} + +void asst::RuntimeStatus::set_properties(std::string key, std::string value) +{ + m_properties.insert_or_assign(std::move(key), std::move(value)); +} + +void asst::RuntimeStatus::clear_properties() noexcept +{ + m_properties.clear(); +} diff --git a/src/MeoAssistant/RuntimeStatus.h b/src/MeoAssistant/RuntimeStatus.h index d91a8e0b02..364b64900f 100644 --- a/src/MeoAssistant/RuntimeStatus.h +++ b/src/MeoAssistant/RuntimeStatus.h @@ -29,6 +29,10 @@ namespace asst void set_str(std::string key, std::string value); void clear_str() noexcept; + std::optional get_properties(const std::string& key) const noexcept; + void set_properties(std::string key, std::string value); + void clear_properties() noexcept; + RuntimeStatus& operator=(const RuntimeStatus& rhs) = delete; RuntimeStatus& operator=(RuntimeStatus&& rhs) noexcept = delete; @@ -41,10 +45,12 @@ namespace asst static inline const std::string RoguelikeTraderNoLongerBuy = "RoguelikeNoLongerBuy"; static inline const std::string RoguelikeSkillUsagePrefix = "RoguelikeSkillUsage-"; static inline const std::string RoguelikeTeamFullWithoutRookie = "RoguelikeTeamFullWithoutRookie"; + static inline const std::string RoguelikeTheme = "RoguelikeTheme"; private: std::unordered_map m_number; std::unordered_map m_rect; - std::unordered_map m_string; + std::unordered_map m_string; // 跨任务时会被清理的量 + std::unordered_map m_properties; // 跨任务时不会清理的量 }; } diff --git a/src/MeoAssistant/Task/Plugin/DrGrandetTaskPlugin.cpp b/src/MeoAssistant/Task/Plugin/DrGrandetTaskPlugin.cpp index 5a8dc30596..20ad90fcb8 100644 --- a/src/MeoAssistant/Task/Plugin/DrGrandetTaskPlugin.cpp +++ b/src/MeoAssistant/Task/Plugin/DrGrandetTaskPlugin.cpp @@ -14,7 +14,7 @@ bool asst::DrGrandetTaskPlugin::verify(AsstMsg msg, const json::value& details) } const std::string task = details.at("details").at("task").as_string(); - if (task == "StoneConfirm") { + if (task == "Fight@StoneConfirm") { return true; } else { diff --git a/src/MeoAssistant/Task/Plugin/GameCrashRestartTaskPlugin.cpp b/src/MeoAssistant/Task/Plugin/GameCrashRestartTaskPlugin.cpp index bc0c244d84..bb0222a8ef 100644 --- a/src/MeoAssistant/Task/Plugin/GameCrashRestartTaskPlugin.cpp +++ b/src/MeoAssistant/Task/Plugin/GameCrashRestartTaskPlugin.cpp @@ -8,8 +8,8 @@ bool asst::GameCrashRestartTaskPlugin::verify(AsstMsg msg, const json::value& de return false; } - if (details.at("details").at("task").as_string() == "RestartGameAndContinueFighting" && - m_status->get_number("LastStartButton2")) { + if (details.at("details").at("task").as_string() == "Fight@RestartGameAndContinue" && + m_status->get_number("Fight@LastStartButton2")) { return true; } else { diff --git a/src/MeoAssistant/Task/Plugin/RoguelikeBattleTaskPlugin.cpp b/src/MeoAssistant/Task/Plugin/RoguelikeBattleTaskPlugin.cpp index e5ed9f3d30..d6c0789ccd 100644 --- a/src/MeoAssistant/Task/Plugin/RoguelikeBattleTaskPlugin.cpp +++ b/src/MeoAssistant/Task/Plugin/RoguelikeBattleTaskPlugin.cpp @@ -25,7 +25,18 @@ bool asst::RoguelikeBattleTaskPlugin::verify(AsstMsg msg, const json::value& det return false; } - if (details.at("details").at("task").as_string() == "Roguelike1StartAction") { + auto roguelike_name_opt = m_status->get_properties(RuntimeStatus::RoguelikeTheme); + if (!roguelike_name_opt) { + Log.error("Roguelike name doesn't exist!"); + return false; + } + const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string& task = details.get("details", "task", ""); + std::string_view task_view = task; + if (task_view.starts_with(roguelike_name)) { + task_view.remove_prefix(roguelike_name.length()); + } + if (task_view == "Roguelike@StartAction") { return true; } else { @@ -89,7 +100,7 @@ bool asst::RoguelikeBattleTaskPlugin::_run() void asst::RoguelikeBattleTaskPlugin::wait_for_start() { - ProcessTask(*this, { "Roguelike1WaitBattleStart" }).set_task_delay(0).set_retry_times(0).run(); + ProcessTask(*this, { "RoguelikeWaitBattleStart" }).set_task_delay(0).set_retry_times(0).run(); } bool asst::RoguelikeBattleTaskPlugin::get_stage_info() @@ -398,7 +409,7 @@ bool asst::RoguelikeBattleTaskPlugin::auto_battle() } // 如果发现有新撤退,就更新m_retreated_opers // 如果发现有新转好的,只更新m_last_cooling_count,在部署时从set中删去 - if (cooling_count > m_last_cooling_count) { + if (cooling_count > m_last_cooling_count && !m_first_deploy) { battle_pause(); int remain_add = cooling_count - m_last_cooling_count; for (size_t i = 0; i < opers.size(); ++i) { @@ -665,7 +676,8 @@ bool asst::RoguelikeBattleTaskPlugin::auto_battle() if (opt_oper.name != UnknownName) { auto real_loc_type = get_oper_location_type(opt_oper.name); - if (real_loc_type != BattleLocationType::All && real_loc_type != get_role_location_type(opt_oper.role)) { + if (real_loc_type != BattleLocationType::Invalid && // 说明名字识别错了 + real_loc_type != BattleLocationType::All && real_loc_type != get_role_location_type(opt_oper.role)) { // 重新计算干员是否有地方放 if (available_locations(opt_oper.name).empty()) { set_position_full(opt_oper.name, true); @@ -783,7 +795,7 @@ bool asst::RoguelikeBattleTaskPlugin::auto_battle() bool asst::RoguelikeBattleTaskPlugin::speed_up() { - return ProcessTask(*this, { "Roguelike1BattleSpeedUp" }).run(); + return ProcessTask(*this, { "RoguelikeBattleSpeedUp" }).run(); } bool asst::RoguelikeBattleTaskPlugin::use_skill(const Rect& rect) @@ -806,7 +818,7 @@ bool asst::RoguelikeBattleTaskPlugin::retreat(const Point& point) bool asst::RoguelikeBattleTaskPlugin::abandon() { - return ProcessTask(*this, { "Roguelike1BattleExitBegin" }).run(); + return ProcessTask(*this, { "RoguelikeBattleExitBegin" }).run(); } void asst::RoguelikeBattleTaskPlugin::all_melee_retreat() @@ -962,12 +974,6 @@ bool asst::RoguelikeBattleTaskPlugin::wait_start() std::this_thread::yield(); } - std::filesystem::create_directory("map"); - for (const auto& [loc, info] : m_normal_tile_info) { - std::string text = "( " + std::to_string(loc.x) + ", " + std::to_string(loc.y) + " )"; - cv::putText(image, text, cv::Point(info.pos.x - 30, info.pos.y), 1, 1.2, cv::Scalar(0, 0, 255), 2); - } - // 识别一帧总击杀数 BattleImageAnalyzer kills_analyzer(image); kills_analyzer.set_target(BattleImageAnalyzer::Target::Kills); @@ -977,6 +983,10 @@ bool asst::RoguelikeBattleTaskPlugin::wait_start() } if (!m_stage_name.empty()) { + for (const auto& [loc, info] : m_normal_tile_info) { + std::string text = "( " + std::to_string(loc.x) + ", " + std::to_string(loc.y) + " )"; + cv::putText(image, text, cv::Point(info.pos.x - 30, info.pos.y), 1, 1.2, cv::Scalar(0, 0, 255), 2); + } asst::imwrite("map/" + m_stage_name + ".png", image); } else { diff --git a/src/MeoAssistant/Task/Plugin/RoguelikeControlTaskPlugin.cpp b/src/MeoAssistant/Task/Plugin/RoguelikeControlTaskPlugin.cpp index 2e39057d43..c1e96a3d6c 100644 --- a/src/MeoAssistant/Task/Plugin/RoguelikeControlTaskPlugin.cpp +++ b/src/MeoAssistant/Task/Plugin/RoguelikeControlTaskPlugin.cpp @@ -1,5 +1,8 @@ #include "RoguelikeControlTaskPlugin.h" +#include "RuntimeStatus.h" +#include "Utils/Logger.hpp" + bool asst::RoguelikeControlTaskPlugin::verify(AsstMsg msg, const json::value& details) const { if (msg != AsstMsg::SubTaskExtraInfo || details.get("subtask", std::string()) != "ProcessTask") { @@ -10,9 +13,19 @@ bool asst::RoguelikeControlTaskPlugin::verify(AsstMsg msg, const json::value& de return false; } - const std::string task = details.at("details").at("task").as_string(); - if (task == "Roguelike1Start" || task == "Roguelike1StageTraderInvestConfirm" || - task == "Roguelike1StageTraderInvestSystemFull") { + auto roguelike_name_opt = m_status->get_properties(RuntimeStatus::RoguelikeTheme); + if (!roguelike_name_opt) { + Log.error("Roguelike name doesn't exist!"); + return false; + } + const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string& task = details.get("details", "task", ""); + std::string_view task_view = task; + if (task_view.starts_with(roguelike_name)) { + task_view.remove_prefix(roguelike_name.length()); + } + if (task_view == "Roguelike@Start" || task_view == "Roguelike@StageTraderInvestConfirm" || + task_view == "Roguelike@StageTraderInvestSystemFull") { return true; } @@ -23,4 +36,4 @@ bool asst::RoguelikeControlTaskPlugin::_run() { m_task_ptr->set_enable(false); return true; -} +} \ No newline at end of file diff --git a/src/MeoAssistant/Task/Plugin/RoguelikeCustomStartTaskPlugin.cpp b/src/MeoAssistant/Task/Plugin/RoguelikeCustomStartTaskPlugin.cpp index beec3ee90d..8d86ef0f7e 100644 --- a/src/MeoAssistant/Task/Plugin/RoguelikeCustomStartTaskPlugin.cpp +++ b/src/MeoAssistant/Task/Plugin/RoguelikeCustomStartTaskPlugin.cpp @@ -14,13 +14,23 @@ bool asst::RoguelikeCustomStartTaskPlugin::verify(AsstMsg msg, const json::value return false; } - static const std::unordered_map> TaskMap = { - { "Roguelike1Recruit1", { AsstMsg::SubTaskCompleted, RoguelikeCustomType::Squad } }, - { "Roguelike1Team3", { AsstMsg::SubTaskCompleted, RoguelikeCustomType::Roles } }, - { "Roguelike1RecruitMain", { AsstMsg::SubTaskStart, RoguelikeCustomType::CoreChar } }, - }; + auto roguelike_name_opt = m_status->get_properties(RuntimeStatus::RoguelikeTheme); + if (!roguelike_name_opt) { + Log.error("Roguelike name doesn't exist!"); + return false; + } + const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; const std::string& task = details.get("details", "task", ""); - auto it = TaskMap.find(task); + std::string_view task_view = task; + if (task_view.starts_with(roguelike_name)) { + task_view.remove_prefix(roguelike_name.length()); + } + static const std::unordered_map> TaskMap = { + { "Roguelike@SquadDefault", { AsstMsg::SubTaskCompleted, RoguelikeCustomType::Squad } }, + { "Roguelike@RolesDefault", { AsstMsg::SubTaskCompleted, RoguelikeCustomType::Roles } }, + { "Roguelike@RecruitMain", { AsstMsg::SubTaskStart, RoguelikeCustomType::CoreChar } }, + }; + auto it = TaskMap.find(task_view); if (it == TaskMap.cend()) { return false; } @@ -70,12 +80,12 @@ bool asst::RoguelikeCustomStartTaskPlugin::hijack_squad() for (size_t i = 0; i != SwipeTimes; ++i) { auto image = m_ctrler->get_image(); OcrImageAnalyzer analyzer(image); - analyzer.set_task_info("Roguelike1Custom-HijackSquad"); + analyzer.set_task_info("RoguelikeCustom-HijackSquad"); analyzer.set_required({ m_customs[RoguelikeCustomType::Squad] }); if (!analyzer.analyze()) { ProcessTask(*this, { "SlowlySwipeToTheRight" }).run(); - sleep(Task.get("Roguelike1Custom-HijackSquad")->rear_delay); + sleep(Task.get("RoguelikeCustom-HijackSquad")->rear_delay); continue; } const auto& rect = analyzer.get_result().front().rect; @@ -90,7 +100,7 @@ bool asst::RoguelikeCustomStartTaskPlugin::hijack_roles() { auto image = m_ctrler->get_image(); OcrImageAnalyzer analyzer(image); - analyzer.set_task_info("Roguelike1Custom-HijackRoles"); + analyzer.set_task_info("RoguelikeCustom-HijackRoles"); analyzer.set_required({ m_customs[RoguelikeCustomType::Roles] }); if (!analyzer.analyze()) { @@ -121,7 +131,7 @@ bool asst::RoguelikeCustomStartTaskPlugin::hijack_core_char() Log.info("role", role_ocr_name); auto image = m_ctrler->get_image(); OcrImageAnalyzer analyzer(image); - analyzer.set_task_info("Roguelike1Custom-HijackCoChar"); + analyzer.set_task_info("RoguelikeCustom-HijackCoChar"); analyzer.set_required({ role_ocr_name }); if (!analyzer.analyze()) { return false; @@ -129,7 +139,7 @@ bool asst::RoguelikeCustomStartTaskPlugin::hijack_core_char() const auto& role_rect = analyzer.get_result().front().rect; m_ctrler->click(role_rect); - sleep(Task.get("Roguelike1Custom-HijackCoChar")->pre_delay); + sleep(Task.get("RoguelikeCustom-HijackCoChar")->pre_delay); m_status->set_str(RuntimeStatus::RoguelikeCoreChar, char_name); return true; diff --git a/src/MeoAssistant/Task/Plugin/RoguelikeDebugTaskPlugin.cpp b/src/MeoAssistant/Task/Plugin/RoguelikeDebugTaskPlugin.cpp index 881e21145a..f4db0edf0a 100644 --- a/src/MeoAssistant/Task/Plugin/RoguelikeDebugTaskPlugin.cpp +++ b/src/MeoAssistant/Task/Plugin/RoguelikeDebugTaskPlugin.cpp @@ -1,6 +1,8 @@ #include "RoguelikeDebugTaskPlugin.h" #include "Controller.h" +#include "RuntimeStatus.h" +#include "Utils/Logger.hpp" bool asst::RoguelikeDebugTaskPlugin::verify(AsstMsg msg, const json::value& details) const { @@ -12,9 +14,19 @@ bool asst::RoguelikeDebugTaskPlugin::verify(AsstMsg msg, const json::value& deta return true; } - std::string task = details.get("details", "task", std::string()); + auto roguelike_name_opt = m_status->get_properties(RuntimeStatus::RoguelikeTheme); + if (!roguelike_name_opt) { + Log.error("Roguelike name doesn't exist!"); + return false; + } + const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string& task = details.get("details", "task", ""); + std::string_view task_view = task; + if (task_view.starts_with(roguelike_name)) { + task_view.remove_prefix(roguelike_name.length()); + } if (msg == AsstMsg::SubTaskStart && details.get("subtask", std::string()) == "ProcessTask") { - if (task == "Roguelike1ExitThenAbandon" || task == "Roguelike1GamePass") { + if (task_view == "Roguelike@ExitThenAbandon" || task_view == "Roguelike@GamePass") { return true; } } @@ -25,4 +37,4 @@ bool asst::RoguelikeDebugTaskPlugin::verify(AsstMsg msg, const json::value& deta bool asst::RoguelikeDebugTaskPlugin::_run() { return save_img("debug/roguelike/"); -} +} \ No newline at end of file diff --git a/src/MeoAssistant/Task/Plugin/RoguelikeFormationTaskPlugin.cpp b/src/MeoAssistant/Task/Plugin/RoguelikeFormationTaskPlugin.cpp index fc71c04d76..3a1fdc76f4 100644 --- a/src/MeoAssistant/Task/Plugin/RoguelikeFormationTaskPlugin.cpp +++ b/src/MeoAssistant/Task/Plugin/RoguelikeFormationTaskPlugin.cpp @@ -5,6 +5,7 @@ #include "../Sub/ProcessTask.h" #include "Controller.h" #include "ImageAnalyzer/RoguelikeFormationImageAnalyzer.h" +#include "RuntimeStatus.h" #include "TaskData.h" #include "Utils/Logger.hpp" @@ -14,7 +15,18 @@ bool asst::RoguelikeFormationTaskPlugin::verify(AsstMsg msg, const json::value& return false; } - if (details.at("details").at("task").as_string() == "Roguelike1QuickFormation") { + auto roguelike_name_opt = m_status->get_properties(RuntimeStatus::RoguelikeTheme); + if (!roguelike_name_opt) { + Log.error("Roguelike name doesn't exist!"); + return false; + } + const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string& task = details.get("details", "task", ""); + std::string_view task_view = task; + if (task_view.starts_with(roguelike_name)) { + task_view.remove_prefix(roguelike_name.length()); + } + if (task_view == "Roguelike@QuickFormation") { return true; } else { @@ -50,7 +62,7 @@ bool asst::RoguelikeFormationTaskPlugin::_run() reselect = true; } if (!reselect && select_count != 0) { - sleep(Task.get("Roguelike1QuickFormationDelay")->rear_delay); + sleep(Task.get("RoguelikeQuickFormationDelay")->rear_delay); formation_analyzer.set_image(m_ctrler->get_image()); if (!formation_analyzer.analyze()) { @@ -76,7 +88,7 @@ bool asst::RoguelikeFormationTaskPlugin::_run() void asst::RoguelikeFormationTaskPlugin::clear_and_reselect() { // 清空并退出游戏会自动按等级重新排序 - ProcessTask(*this, { "Roguelike1QuickFormationClearAndReselect" }).run(); + ProcessTask(*this, { "RoguelikeQuickFormationClearAndReselect" }).run(); size_t select_count = analyze_and_select(); // 说明第二页还有 @@ -103,4 +115,4 @@ size_t asst::RoguelikeFormationTaskPlugin::analyze_and_select() ++select_count; } return select_count; -} +} \ No newline at end of file diff --git a/src/MeoAssistant/Task/Plugin/RoguelikeRecruitTaskPlugin.cpp b/src/MeoAssistant/Task/Plugin/RoguelikeRecruitTaskPlugin.cpp index ee28e7cc4b..ddd691d872 100644 --- a/src/MeoAssistant/Task/Plugin/RoguelikeRecruitTaskPlugin.cpp +++ b/src/MeoAssistant/Task/Plugin/RoguelikeRecruitTaskPlugin.cpp @@ -14,7 +14,18 @@ bool asst::RoguelikeRecruitTaskPlugin::verify(AsstMsg msg, const json::value& de return false; } - if (details.at("details").at("task").as_string() == "Roguelike1ChooseOper") { + auto roguelike_name_opt = m_status->get_properties(RuntimeStatus::RoguelikeTheme); + if (!roguelike_name_opt) { + Log.error("Roguelike name doesn't exist!"); + return false; + } + const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string& task = details.get("details", "task", ""); + std::string_view task_view = task; + if (task_view.starts_with(roguelike_name)) { + task_view.remove_prefix(roguelike_name.length()); + } + if (task_view == "Roguelike@ChooseOper") { return true; } else { @@ -52,7 +63,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() // 干员名字的识别位置 std::unordered_map last_oper_rects; - int SwipeTimes = Task.get("Roguelike1RecruitSwipeMaxTime")->max_times; + int SwipeTimes = Task.get("RoguelikeRecruitSwipeMaxTime")->max_times; int i = 0; std::unordered_set pre_oper_names; // 翻页找出所有候选干员 @@ -182,7 +193,7 @@ bool asst::RoguelikeRecruitTaskPlugin::_run() // 向右滑动 Log.trace(__FUNCTION__, "| Page", i, "oper count:", oper_count, "- continue swiping"); slowly_swipe(ProcessTaskAction::SlowlySwipeToTheRight); - sleep(Task.get("Roguelike1Custom-HijackSquad")->rear_delay); + sleep(Task.get("RoguelikeCustom-HijackSquad")->rear_delay); } // 没有候选干员,进入后备逻辑 @@ -307,7 +318,7 @@ bool asst::RoguelikeRecruitTaskPlugin::check_char(const std::string& char_name, else { slowly_swipe(ProcessTaskAction::SlowlySwipeToTheRight); } - sleep(Task.get("Roguelike1Custom-HijackSquad")->rear_delay); + sleep(Task.get("RoguelikeCustom-HijackSquad")->rear_delay); } Log.info(__FUNCTION__, "| Cannot find oper `" + char_name + "`"); swipe_to_the_left_of_operlist(i / 3 + 1); diff --git a/src/MeoAssistant/Task/Plugin/RoguelikeResetTaskPlugin.cpp b/src/MeoAssistant/Task/Plugin/RoguelikeResetTaskPlugin.cpp index d8f42e56b8..9a43598c05 100644 --- a/src/MeoAssistant/Task/Plugin/RoguelikeResetTaskPlugin.cpp +++ b/src/MeoAssistant/Task/Plugin/RoguelikeResetTaskPlugin.cpp @@ -1,6 +1,7 @@ #include "RoguelikeResetTaskPlugin.h" #include "RuntimeStatus.h" +#include "Utils/Logger.hpp" bool asst::RoguelikeResetTaskPlugin::verify(AsstMsg msg, const json::value& details) const { @@ -8,7 +9,18 @@ bool asst::RoguelikeResetTaskPlugin::verify(AsstMsg msg, const json::value& deta return false; } - if (details.at("details").at("task").as_string() == "Roguelike1Start") { + auto roguelike_name_opt = m_status->get_properties(RuntimeStatus::RoguelikeTheme); + if (!roguelike_name_opt) { + Log.error("Roguelike name doesn't exist!"); + return false; + } + const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string& task = details.get("details", "task", ""); + std::string_view task_view = task; + if (task_view.starts_with(roguelike_name)) { + task_view.remove_prefix(roguelike_name.length()); + } + if (task_view == "Roguelike@Start") { return true; } else { diff --git a/src/MeoAssistant/Task/Plugin/RoguelikeShoppingTaskPlugin.cpp b/src/MeoAssistant/Task/Plugin/RoguelikeShoppingTaskPlugin.cpp index 69b1d830eb..c0bf4ad17b 100644 --- a/src/MeoAssistant/Task/Plugin/RoguelikeShoppingTaskPlugin.cpp +++ b/src/MeoAssistant/Task/Plugin/RoguelikeShoppingTaskPlugin.cpp @@ -14,7 +14,18 @@ bool asst::RoguelikeShoppingTaskPlugin::verify(AsstMsg msg, const json::value& d return false; } - if (details.at("details").at("task").as_string() == "Roguelike1TraderRandomShopping") { + auto roguelike_name_opt = m_status->get_properties(RuntimeStatus::RoguelikeTheme); + if (!roguelike_name_opt) { + Log.error("Roguelike name doesn't exist!"); + return false; + } + const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string& task = details.get("details", "task", ""); + std::string_view task_view = task; + if (task_view.starts_with(roguelike_name)) { + task_view.remove_prefix(roguelike_name.length()); + } + if (task_view == "Roguelike@TraderRandomShopping") { return true; } else { @@ -27,7 +38,7 @@ bool asst::RoguelikeShoppingTaskPlugin::_run() LogTraceFunction; OcrWithFlagTemplImageAnalyzer analyzer; - analyzer.set_task_info("Roguelike1TraderShopping", "Roguelike1TraderShoppingOcr"); + analyzer.set_task_info("RoguelikeTraderShopping", "RoguelikeTraderShoppingOcr"); analyzer.set_image(m_ctrler->get_image()); if (!analyzer.analyze()) { @@ -151,8 +162,8 @@ bool asst::RoguelikeShoppingTaskPlugin::_run() if (!bought) { // 如果什么都没买,即使有商品,说明也是不需要买的,这里强制离开商店,后面让 ProcessTask 继续跑 - return ProcessTask(*this, { "Roguelike1TraderShoppingOver" }).run(); + return ProcessTask(*this, { "RoguelikeTraderShoppingOver" }).run(); } return true; -} +} \ No newline at end of file diff --git a/src/MeoAssistant/Task/Plugin/RoguelikeSkillSelectionTaskPlugin.cpp b/src/MeoAssistant/Task/Plugin/RoguelikeSkillSelectionTaskPlugin.cpp index cfcc0e02d8..4ec8fe4a62 100644 --- a/src/MeoAssistant/Task/Plugin/RoguelikeSkillSelectionTaskPlugin.cpp +++ b/src/MeoAssistant/Task/Plugin/RoguelikeSkillSelectionTaskPlugin.cpp @@ -14,7 +14,18 @@ bool asst::RoguelikeSkillSelectionTaskPlugin::verify(AsstMsg msg, const json::va return false; } - if (details.at("details").at("task").as_string() == "Roguelike1StartAction") { + auto roguelike_name_opt = m_status->get_properties(RuntimeStatus::RoguelikeTheme); + if (!roguelike_name_opt) { + Log.error("Roguelike name doesn't exist!"); + return false; + } + const std::string roguelike_name = std::move(roguelike_name_opt.value()) + "@"; + const std::string& task = details.get("details", "task", ""); + std::string_view task_view = task; + if (task_view.starts_with(roguelike_name)) { + task_view.remove_prefix(roguelike_name.length()); + } + if (task_view == "Roguelike@StartAction") { return true; } else { @@ -33,7 +44,7 @@ bool asst::RoguelikeSkillSelectionTaskPlugin::_run() return false; } - int delay = Task.get("Roguelike1SkillSelectionMove1")->rear_delay; + int delay = Task.get("RoguelikeSkillSelectionMove1")->rear_delay; bool has_rookie = false; for (const auto& [name, skill_vec] : analyzer.get_result()) { if (name.empty()) { @@ -67,4 +78,4 @@ bool asst::RoguelikeSkillSelectionTaskPlugin::_run() m_status->set_number(RuntimeStatus::RoguelikeTeamFullWithoutRookie, 0); } return true; -} +} \ No newline at end of file diff --git a/src/MeoAssistant/Task/Plugin/StageDropsTaskPlugin.cpp b/src/MeoAssistant/Task/Plugin/StageDropsTaskPlugin.cpp index 9dc96dfbbb..837a30754b 100644 --- a/src/MeoAssistant/Task/Plugin/StageDropsTaskPlugin.cpp +++ b/src/MeoAssistant/Task/Plugin/StageDropsTaskPlugin.cpp @@ -22,10 +22,10 @@ bool asst::StageDropsTaskPlugin::verify(AsstMsg msg, const json::value& details) return false; } const std::string task = details.at("details").at("task").as_string(); - if (task == "EndOfAction") { - auto pre_time_opt = m_status->get_number("LastStartButton2"); + if (task == "Fight@EndOfAction") { + auto pre_time_opt = m_status->get_number("Fight@LastStartButton2"); int64_t pre_start_time = pre_time_opt ? pre_time_opt.value() : 0; - auto pre_reg_time_opt = m_status->get_number("LastRecognizeDrops"); + auto pre_reg_time_opt = m_status->get_number("Fight@LastRecognizeDrops"); int64_t pre_recognize_time = pre_reg_time_opt ? pre_reg_time_opt.value() : 0; if (pre_start_time + RecognitionTimeOffset == pre_recognize_time) { Log.info("Recognitions time too close, pass", pre_start_time, pre_recognize_time); @@ -34,7 +34,7 @@ bool asst::StageDropsTaskPlugin::verify(AsstMsg msg, const json::value& details) m_is_annihilation = false; return true; } - else if (task == "EndOfActionAnnihilation") { + else if (task == "Fight@EndOfActionAnnihilation") { m_is_annihilation = true; return true; } diff --git a/src/MeoAssistant/Task/RoguelikeTask.cpp b/src/MeoAssistant/Task/RoguelikeTask.cpp index dfa0786ed6..65b1a67874 100644 --- a/src/MeoAssistant/Task/RoguelikeTask.cpp +++ b/src/MeoAssistant/Task/RoguelikeTask.cpp @@ -9,16 +9,14 @@ #include "Plugin/RoguelikeResetTaskPlugin.h" #include "Plugin/RoguelikeShoppingTaskPlugin.h" #include "Plugin/RoguelikeSkillSelectionTaskPlugin.h" +#include "RuntimeStatus.h" #include "Sub/ProcessTask.h" - #include "Utils/Logger.hpp" asst::RoguelikeTask::RoguelikeTask(const AsstCallback& callback, void* callback_arg) : PackageTask(callback, callback_arg, TaskType), m_roguelike_task_ptr(std::make_shared(callback, callback_arg, TaskType)) { - m_roguelike_task_ptr->set_tasks({ "Roguelike1Begin" }); - m_roguelike_task_ptr->register_plugin(); m_roguelike_task_ptr->register_plugin(); m_roguelike_task_ptr->register_plugin(); @@ -45,16 +43,25 @@ bool asst::RoguelikeTask::set_params(const json::value& params) // 2 - 【弃用】两者兼顾,投资过后再退出,没有投资就继续往后打 // 3 - 尝试通关,激进策略 + std::string theme = params.get("theme", "Phantom"); + if (m_status == nullptr) { + m_roguelike_task_ptr->set_tasks({ "Stop" }); + Log.error(__FUNCTION__, "| Cannot set roguelike name!"); + return false; + } + m_status->set_properties(RuntimeStatus::RoguelikeTheme, theme); + theme += "@"; + m_roguelike_task_ptr->set_tasks({ theme + "Roguelike@Begin" }); + int mode = params.get("mode", 0); switch (mode) { case 0: break; case 1: - m_roguelike_task_ptr->set_times_limit("Roguelike1StageTraderLeaveConfirm", 0, - ProcessTask::TimesLimitType::Post); + m_roguelike_task_ptr->set_times_limit("StageTraderLeaveConfirm", 0, ProcessTask::TimesLimitType::Post); break; case 2: - [[unlikely]] m_roguelike_task_ptr->set_times_limit("Roguelike1StageTraderInvestCancel", 0); + [[unlikely]] m_roguelike_task_ptr->set_times_limit("StageTraderInvestCancel", 0); break; default: Log.error(__FUNCTION__, "| Unknown mode", mode); @@ -62,22 +69,22 @@ bool asst::RoguelikeTask::set_params(const json::value& params) } int number_of_starts = params.get("starts_count", INT_MAX); - m_roguelike_task_ptr->set_times_limit("Roguelike1Start", number_of_starts); + m_roguelike_task_ptr->set_times_limit(theme + "Roguelike@Start", number_of_starts); bool investment_enabled = params.get("investment_enabled", true); if (!investment_enabled) { // 禁用投资系统,通过 exceededNext 进入商店购买逻辑 - m_roguelike_task_ptr->set_times_limit("Roguelike1StageTraderInvestSystem", 0); + m_roguelike_task_ptr->set_times_limit("StageTraderInvestSystem", 0); } int number_of_investments = params.get("investments_count", INT_MAX); - m_roguelike_task_ptr->set_times_limit("Roguelike1StageTraderInvestConfirm", number_of_investments); + m_roguelike_task_ptr->set_times_limit("StageTraderInvestConfirm", number_of_investments); bool stop_when_full = params.get("stop_when_investment_full", false); if (stop_when_full) { - m_roguelike_task_ptr->set_times_limit("Roguelike1StageTraderInvestSystemFull", 0); + m_roguelike_task_ptr->set_times_limit("StageTraderInvestSystemFull", 0); constexpr int InvestLimit = 999; - m_roguelike_task_ptr->set_times_limit("Roguelike1StageTraderInvestConfirm", InvestLimit); + m_roguelike_task_ptr->set_times_limit("StageTraderInvestConfirm", InvestLimit); } if (auto squad_opt = params.find("squad")) { diff --git a/src/MeoAssistant/Task/Sub/AbstractTask.cpp b/src/MeoAssistant/Task/Sub/AbstractTask.cpp index 40d527be9d..a5e359d865 100644 --- a/src/MeoAssistant/Task/Sub/AbstractTask.cpp +++ b/src/MeoAssistant/Task/Sub/AbstractTask.cpp @@ -183,7 +183,15 @@ void asst::AbstractTask::callback(AsstMsg msg, const json::value& detail) } } if (m_callback) { - m_callback(msg, detail, m_callback_arg); + // TODO 屎山: task 字段需要忽略 @ 和前面的字符,否则回调大改 + json::value proced_detail = detail; + if (std::string task = detail.get("details", "task", std::string()); !task.empty()) { + if (size_t pos = task.rfind('@'); pos != std::string::npos) { + proced_detail["details"]["task"] = task.substr(pos + 1); + } + } + + m_callback(msg, proced_detail, m_callback_arg); } } diff --git a/src/MeoAssistant/Task/Sub/AbstractTask.h b/src/MeoAssistant/Task/Sub/AbstractTask.h index 1a1e8caf32..d09a431faf 100644 --- a/src/MeoAssistant/Task/Sub/AbstractTask.h +++ b/src/MeoAssistant/Task/Sub/AbstractTask.h @@ -40,8 +40,8 @@ namespace asst virtual AbstractTask& set_task_id(int task_id) noexcept; template - std::shared_ptr register_plugin() requires std::derived_from // Plugin must inherit AbstractTaskPlugin + std::shared_ptr register_plugin() { auto plugin = std::make_shared(m_callback, m_callback_arg, m_task_chain); m_plugins.emplace(plugin); diff --git a/src/MeoAssistant/Task/Sub/AutoRecruitTask.cpp b/src/MeoAssistant/Task/Sub/AutoRecruitTask.cpp index 6f43e001fb..a9e301af28 100644 --- a/src/MeoAssistant/Task/Sub/AutoRecruitTask.cpp +++ b/src/MeoAssistant/Task/Sub/AutoRecruitTask.cpp @@ -295,6 +295,7 @@ bool asst::AutoRecruitTask::recruit_one(const Rect& button) info["why"] = "识别错误"; callback(AsstMsg::SubTaskError, info); } + m_force_skipped.emplace(slot_index_from_rect(button)); click_return_button(); return false; } diff --git a/src/MeoAssistant/TaskData.cpp b/src/MeoAssistant/TaskData.cpp index cb9ca41e05..52eebda8c7 100644 --- a/src/MeoAssistant/TaskData.cpp +++ b/src/MeoAssistant/TaskData.cpp @@ -7,6 +7,7 @@ #include "Resource/TemplResource.h" #include "Utils/AsstRanges.hpp" #include "Utils/AsstTypes.h" +#include "Utils/AsstUtils.hpp" #include "Utils/Logger.hpp" const std::unordered_set& asst::TaskData::get_templ_required() const noexcept @@ -18,8 +19,8 @@ bool asst::TaskData::parse(const json::value& json) { LogTraceFunction; - auto to_lower = [](char c) -> char { return static_cast(std::tolower(c)); }; #ifdef ASST_DEBUG + // 语法检查 { bool validity = true; for (const auto& [name, task_json] : json.as_object()) { @@ -28,155 +29,305 @@ bool asst::TaskData::parse(const json::value& json) if (!validity) return false; } #endif + // <任务名, 模板任务标志位置, 任务参数ref> + std::vector>> template_task_info {}; + for (const auto& [name, task_json] : json.as_object()) { - std::string algorithm_str = task_json.get("algorithm", "matchtemplate"); - ranges::transform(algorithm_str, algorithm_str.begin(), to_lower); - auto algorithm = get_algorithm_type(algorithm_str); - if (algorithm == AlgorithmType::Invalid) [[unlikely]] { - Log.error("Unknown algorithm", algorithm_str); + // 模板任务特化需要等模板任务生成后才能生成 + if (size_t p = name.find('@'); p != std::string::npos) { + template_task_info.emplace_back(name, p, task_json); + continue; + } + + std::shared_ptr task_info_ptr = generate_task_info(name, task_json, nullptr); + if (task_info_ptr == nullptr) { return false; } + m_all_tasks_info[name] = task_info_ptr; + } - std::shared_ptr task_info_ptr = nullptr; - switch (algorithm) { - case AlgorithmType::JustReturn: - task_info_ptr = std::make_shared(); - break; - case AlgorithmType::MatchTemplate: { - auto match_task_info_ptr = std::make_shared(); - match_task_info_ptr->templ_name = task_json.get("template", name + ".png"); - m_templ_required.emplace(match_task_info_ptr->templ_name); + // 短任务在前,因为模板任务特化一定比模板任务长 + ranges::sort(template_task_info, + [](const auto& l, const auto& r) { return std::get<0>(l).length() < std::get<0>(r).length(); }); - match_task_info_ptr->templ_threshold = task_json.get("templThreshold", TemplThresholdDefault); - match_task_info_ptr->special_threshold = task_json.get("specialThreshold", 0); - if (auto opt = task_json.find("maskRange")) { - auto& mask_range = *opt; - match_task_info_ptr->mask_range = - std::make_pair(static_cast(mask_range[0]), static_cast(mask_range[1])); - } - - task_info_ptr = match_task_info_ptr; - } break; - case AlgorithmType::OcrDetect: { - auto ocr_task_info_ptr = std::make_shared(); - for (const json::value& text : task_json.at("text").as_array()) { - ocr_task_info_ptr->text.emplace_back(text.as_string()); - } - ocr_task_info_ptr->full_match = task_json.get("fullMatch", false); - if (auto opt = task_json.find("ocrReplace")) { - for (const json::value& rep : opt.value()) { - ocr_task_info_ptr->replace_map.emplace(rep[0].as_string(), rep[1].as_string()); - } - } - task_info_ptr = ocr_task_info_ptr; - } break; - case AlgorithmType::Hash: { - auto hash_task_info_ptr = std::make_shared(); - for (const json::value& hash : task_json.at("hash").as_array()) { - hash_task_info_ptr->hashes.emplace_back(hash.as_string()); - } - hash_task_info_ptr->dist_threshold = task_json.get("threshold", 0); - - if (auto opt = task_json.find("maskRange")) { - auto& mask_range = *opt; - hash_task_info_ptr->mask_range = - std::make_pair(static_cast(mask_range[0]), static_cast(mask_range[1])); - } - hash_task_info_ptr->bound = task_json.get("bound", true); - - task_info_ptr = hash_task_info_ptr; - } break; + for (const auto& [name, pos, task_json] : template_task_info) { + // 可能某个名字里带@的任务不是模板任务特化,只是普通的基类任务,这里最后一个参数可能为 nullptr + auto task_info_ptr = generate_task_info(name, task_json, get(name.substr(pos + 1)), name.substr(0, pos)); + if (task_info_ptr == nullptr) { + return false; } - task_info_ptr->cache = task_json.get("cache", true); - task_info_ptr->algorithm = algorithm; - task_info_ptr->name = name; - std::string action = task_json.get("action", "donothing"); - ranges::transform(action, action.begin(), to_lower); + m_all_tasks_info[name] = task_info_ptr; + } + +#ifdef ASST_DEBUG + bool some_next_null = false; + for (const auto& [name, task] : m_all_tasks_info) { + for (const auto& next : task->next) { + if (get(next) == nullptr) { + Log.error(name, "'s next", next, "is null"); + some_next_null = true; + } + } + } + if (some_next_null) { + return false; + } +#endif + return true; +} + +std::shared_ptr asst::TaskData::generate_task_info(const std::string& name, + const json::value& task_json, + std::shared_ptr default_ptr, + const std::string& task_prefix) +{ + if (default_ptr == nullptr) { + default_ptr = default_task_info_ptr; + } + + // 获取 algorithm 并按照 algorithm 生成 TaskInfo + auto algorithm = default_ptr->algorithm; + std::shared_ptr default_derived_ptr = default_ptr; + if (auto opt = task_json.find("algorithm")) { + std::string algorithm_str = opt.value(); + utils::tolowers(algorithm_str); + algorithm = get_algorithm_type(algorithm_str); + if (default_ptr->algorithm != algorithm) { + // 相同 algorithm 时才继承派生类成员 + default_derived_ptr = nullptr; + } + } + std::shared_ptr task_info_ptr = nullptr; + switch (algorithm) { + case AlgorithmType::MatchTemplate: + task_info_ptr = + generate_match_task_info(name, task_json, std::dynamic_pointer_cast(default_derived_ptr)); + break; + case AlgorithmType::OcrDetect: + task_info_ptr = + generate_ocr_task_info(name, task_json, std::dynamic_pointer_cast(default_derived_ptr)); + break; + case AlgorithmType::Hash: + task_info_ptr = + generate_hash_task_info(name, task_json, std::dynamic_pointer_cast(default_derived_ptr)); + break; + case AlgorithmType::JustReturn: + task_info_ptr = std::make_shared(); + break; + default: + Log.error("Unknown algorithm in task", name); + return nullptr; + } + + // 不管什么algorithm,都有基础成员(next, roi, 等等) + if (!append_base_task_info(task_info_ptr, name, task_json, default_ptr, task_prefix)) { + return nullptr; + } + task_info_ptr->algorithm = algorithm; + task_info_ptr->name = name; + return task_info_ptr; +} + +std::shared_ptr asst::TaskData::generate_match_task_info(const std::string& name, + const json::value& task_json, + std::shared_ptr default_ptr) +{ + if (default_ptr == nullptr) { + default_ptr = default_match_task_info_ptr; + } + auto match_task_info_ptr = std::make_shared(); + // template 留空时不从模板任务继承 + match_task_info_ptr->templ_name = task_json.get("template", name + ".png"); + m_templ_required.emplace(match_task_info_ptr->templ_name); + + // 其余若留空则继承模板任务 + match_task_info_ptr->templ_threshold = task_json.get("templThreshold", default_ptr->templ_threshold); + match_task_info_ptr->special_threshold = task_json.get("specialThreshold", default_ptr->special_threshold); + if (auto opt = task_json.find("maskRange")) { + auto& mask_range = *opt; + match_task_info_ptr->mask_range = + std::make_pair(static_cast(mask_range[0]), static_cast(mask_range[1])); + } + else { + match_task_info_ptr->mask_range = default_ptr->mask_range; + } + return match_task_info_ptr; +} + +std::shared_ptr asst::TaskData::generate_ocr_task_info([[maybe_unused]] const std::string& name, + const json::value& task_json, + std::shared_ptr default_ptr) +{ + if (default_ptr == nullptr) { + default_ptr = default_ocr_task_info_ptr; + } + auto ocr_task_info_ptr = std::make_shared(); + + if (auto opt = task_json.find("text")) { + for (const json::value& text : opt.value()) { + ocr_task_info_ptr->text.emplace_back(text.as_string()); + } + } + else { +#ifdef ASST_DEBUG + if (default_ptr->text.empty()) { + Log.warn("Ocr task", name, "has implicit empty text."); + } +#endif + ocr_task_info_ptr->text = default_ptr->text; + } + + ocr_task_info_ptr->full_match = task_json.get("fullMatch", default_ptr->full_match); + if (auto opt = task_json.find("ocrReplace")) { + for (const json::value& rep : opt.value()) { + ocr_task_info_ptr->replace_map.emplace(rep[0].as_string(), rep[1].as_string()); + } + } + else { + ocr_task_info_ptr->replace_map = default_ptr->replace_map; + } + return ocr_task_info_ptr; +} + +std::shared_ptr asst::TaskData::generate_hash_task_info([[maybe_unused]] const std::string& name, + const json::value& task_json, + std::shared_ptr default_ptr) +{ + if (default_ptr == nullptr) { + default_ptr = default_hash_task_info_ptr; + } + auto hash_task_info_ptr = std::make_shared(); + if (auto opt = task_json.find("hash")) { + for (const json::value& hash : opt.value()) { + hash_task_info_ptr->hashes.emplace_back(hash.as_string()); + } + } + else { +#ifdef ASST_DEBUG + if (default_ptr->hashes.empty()) { + Log.warn("Hash task", name, "has implicit empty hashes."); + } +#endif + hash_task_info_ptr->hashes = default_ptr->hashes; + } + + hash_task_info_ptr->dist_threshold = task_json.get("threshold", default_ptr->dist_threshold); + + if (auto opt = task_json.find("maskRange")) { + auto& mask_range = *opt; + hash_task_info_ptr->mask_range = + std::make_pair(static_cast(mask_range[0]), static_cast(mask_range[1])); + } + else { + hash_task_info_ptr->mask_range = default_ptr->mask_range; + } + hash_task_info_ptr->bound = task_json.get("bound", default_ptr->bound); + + return hash_task_info_ptr; +} + +bool asst::TaskData::append_base_task_info(std::shared_ptr task_info_ptr, const std::string& name, + const json::value& task_json, std::shared_ptr default_ptr, + std::string task_prefix) +{ + if (default_ptr == nullptr) { + default_ptr = default_task_info_ptr; + } + if (auto opt = task_json.find("action")) { + std::string action = opt.value(); + utils::tolowers(action); task_info_ptr->action = get_action_type(action); if (task_info_ptr->action == ProcessTaskAction::Invalid) [[unlikely]] { Log.error("Unknown action:", action, ", Task:", name); return false; } - - task_info_ptr->max_times = task_json.get("maxTimes", INT_MAX); - if (auto opt = task_json.find("exceededNext")) { - for (const json::value& exceed_next : opt.value()) { - task_info_ptr->exceeded_next.emplace_back(exceed_next.as_string()); - } - } - if (auto opt = task_json.find("onErrorNext")) { - for (const json::value& on_error_next : opt.value()) { - task_info_ptr->on_error_next.emplace_back(on_error_next.as_string()); - } - } - task_info_ptr->pre_delay = task_json.get("preDelay", 0); - task_info_ptr->rear_delay = task_json.get("rearDelay", 0); - if (auto opt = task_json.find("reduceOtherTimes")) { - for (const json::value& reduce : opt.value()) { - task_info_ptr->reduce_other_times.emplace_back(reduce.as_string()); - } - } - if (auto opt = task_json.find("roi")) { - auto& roi_arr = *opt; - int x = static_cast(roi_arr[0]); - int y = static_cast(roi_arr[1]); - int width = static_cast(roi_arr[2]); - int height = static_cast(roi_arr[3]); -#ifdef ASST_DEBUG - if (x + width > WindowWidthDefault || y + height > WindowHeightDefault) { - Log.error(name, "roi is out of bounds"); - return false; - } -#endif - task_info_ptr->roi = Rect(x, y, width, height); - } - else { - task_info_ptr->roi = Rect(); - } - - if (auto opt = task_json.find("sub")) { - for (const json::value& sub : opt.value()) { - task_info_ptr->sub.emplace_back(sub.as_string()); - } - } - task_info_ptr->sub_error_ignored = task_json.get("subErrorIgnored", false); - - if (auto opt = task_json.find("next")) { - for (const json::value& next : opt.value()) { - task_info_ptr->next.emplace_back(next.as_string()); - } - } - - if (auto opt = task_json.find("rectMove")) { - auto& move_arr = opt.value(); - task_info_ptr->rect_move = Rect(move_arr[0].as_integer(), move_arr[1].as_integer(), - move_arr[2].as_integer(), move_arr[3].as_integer()); - } - else { - task_info_ptr->rect_move = Rect(); - } - - if (auto opt = task_json.find("specificRect")) { - auto& rect_arr = opt.value(); - task_info_ptr->specific_rect = Rect(rect_arr[0].as_integer(), rect_arr[1].as_integer(), - rect_arr[2].as_integer(), rect_arr[3].as_integer()); - } - else { - task_info_ptr->specific_rect = Rect(); - } - - m_all_tasks_info[name] = task_info_ptr; } -#ifdef ASST_DEBUG - for (const auto& [name, task] : m_all_tasks_info) { - for (const auto& next : task->next) { - if (get(next) == nullptr) { - Log.error(name, "'s next", next, "is null"); - return false; - } + else { + task_info_ptr->action = default_ptr->action; + } + + task_info_ptr->cache = task_json.get("cache", default_ptr->cache); + task_info_ptr->max_times = task_json.get("maxTimes", default_ptr->max_times); + if (auto opt = task_json.find("exceededNext")) { + for (const json::value& exceed_next : opt.value()) { + task_info_ptr->exceeded_next.emplace_back(exceed_next.as_string()); } } + else { + task_info_ptr->exceeded_next = append_prefix(default_ptr->exceeded_next, task_prefix); + } + if (auto opt = task_json.find("onErrorNext")) { + for (const json::value& on_error_next : opt.value()) { + task_info_ptr->on_error_next.emplace_back(on_error_next.as_string()); + } + } + else { + task_info_ptr->on_error_next = append_prefix(default_ptr->on_error_next, task_prefix); + } + task_info_ptr->pre_delay = task_json.get("preDelay", default_ptr->pre_delay); + task_info_ptr->rear_delay = task_json.get("rearDelay", default_ptr->rear_delay); + if (auto opt = task_json.find("reduceOtherTimes")) { + for (const json::value& reduce : opt.value()) { + task_info_ptr->reduce_other_times.emplace_back(reduce.as_string()); + } + } + else { + task_info_ptr->reduce_other_times = append_prefix(default_ptr->reduce_other_times, task_prefix); + } + if (auto opt = task_json.find("roi")) { + auto& roi_arr = *opt; + int x = static_cast(roi_arr[0]); + int y = static_cast(roi_arr[1]); + int width = static_cast(roi_arr[2]); + int height = static_cast(roi_arr[3]); +#ifdef ASST_DEBUG + if (x + width > WindowWidthDefault || y + height > WindowHeightDefault) { + Log.error(name, "roi is out of bounds"); + return false; + } #endif + task_info_ptr->roi = Rect(x, y, width, height); + } + else { + task_info_ptr->roi = default_ptr->roi; + } + + if (auto opt = task_json.find("sub")) { + for (const json::value& sub : opt.value()) { + task_info_ptr->sub.emplace_back(sub.as_string()); + } + } + else { + task_info_ptr->sub = append_prefix(default_ptr->sub, task_prefix); + } + task_info_ptr->sub_error_ignored = task_json.get("subErrorIgnored", default_ptr->sub_error_ignored); + + if (auto opt = task_json.find("next")) { + for (const json::value& next : opt.value()) { + task_info_ptr->next.emplace_back(next.as_string()); + } + } + else { + task_info_ptr->next = append_prefix(default_ptr->next, task_prefix); + } + + if (auto opt = task_json.find("rectMove")) { + auto& move_arr = opt.value(); + task_info_ptr->rect_move = Rect(move_arr[0].as_integer(), move_arr[1].as_integer(), move_arr[2].as_integer(), + move_arr[3].as_integer()); + } + else { + task_info_ptr->rect_move = default_ptr->rect_move; + } + + if (auto opt = task_json.find("specificRect")) { + auto& rect_arr = opt.value(); + task_info_ptr->specific_rect = Rect(rect_arr[0].as_integer(), rect_arr[1].as_integer(), + rect_arr[2].as_integer(), rect_arr[3].as_integer()); + } + else { + task_info_ptr->specific_rect = default_ptr->specific_rect; + } return true; } diff --git a/src/MeoAssistant/TaskData.h b/src/MeoAssistant/TaskData.h index 55f1cf3c1d..154dfaf275 100644 --- a/src/MeoAssistant/TaskData.h +++ b/src/MeoAssistant/TaskData.h @@ -18,8 +18,104 @@ namespace asst class TaskData final : public SingletonHolder, public AbstractConfigerWithTempl { private: - static std::shared_ptr generate_task_info(const std::shared_ptr& base_ptr, - const std::string& task_prefix) + std::shared_ptr _default_match_task_info() + { + auto match_task_info_ptr = std::make_shared(); + match_task_info_ptr->templ_name = "__INVALID__"; + match_task_info_ptr->templ_threshold = TemplThresholdDefault; + match_task_info_ptr->special_threshold = 0; + + return match_task_info_ptr; + } + + std::shared_ptr _default_ocr_task_info() + { + auto ocr_task_info_ptr = std::make_shared(); + ocr_task_info_ptr->full_match = false; + + return ocr_task_info_ptr; + } + + std::shared_ptr _default_hash_task_info() + { + auto hash_task_info_ptr = std::make_shared(); + hash_task_info_ptr->dist_threshold = 0; + hash_task_info_ptr->bound = true; + + return hash_task_info_ptr; + } + + std::shared_ptr _default_task_info() + { + auto task_info_ptr = std::make_shared(); + task_info_ptr->algorithm = AlgorithmType::MatchTemplate; + task_info_ptr->action = ProcessTaskAction::DoNothing; + task_info_ptr->cache = true; + task_info_ptr->max_times = INT_MAX; + task_info_ptr->pre_delay = 0; + task_info_ptr->rear_delay = 0; + task_info_ptr->roi = Rect(); + task_info_ptr->sub_error_ignored = false; + task_info_ptr->rect_move = Rect(); + task_info_ptr->specific_rect = Rect(); + + return task_info_ptr; + } + + // 从模板任务生成 + const std::shared_ptr default_match_task_info_ptr = _default_match_task_info(); + const std::shared_ptr default_ocr_task_info_ptr = _default_ocr_task_info(); + const std::shared_ptr default_hash_task_info_ptr = _default_hash_task_info(); + const std::shared_ptr default_task_info_ptr = _default_task_info(); + + // 这是下面几个函数的封装 + std::shared_ptr generate_task_info(const std::string& name, const json::value&, + std::shared_ptr default_ptr, + const std::string& task_prefix = ""); + + std::shared_ptr generate_match_task_info(const std::string& name, const json::value&, + std::shared_ptr default_ptr); + std::shared_ptr generate_ocr_task_info(const std::string& name, const json::value&, + std::shared_ptr default_ptr); + std::shared_ptr generate_hash_task_info(const std::string& name, const json::value&, + std::shared_ptr default_ptr); + // TaskInfo 的基础成员 + bool append_base_task_info(std::shared_ptr task_info_ptr, const std::string& name, + const json::value& task_json, std::shared_ptr default_ptr, + std::string task_prefix = ""); + + static std::vector append_prefix(const std::vector& base_task_list, + const std::string& task_prefix) + { + if (task_prefix.empty()) { + return base_task_list; + } + std::vector task_list = {}; + for (const std::string& base : base_task_list) { + std::string_view base_view = base; + size_t l = 0; + bool has_same_prefix = false; + // base 任务里已经存在相同前缀,则不加前缀 + // https://github.com/MaaAssistantArknights/MaaAssistantArknights/pull/2116#issuecomment-1270115238 + for (size_t r = base_view.find('@'); r != std::string_view::npos; r = base_view.find('@', l)) { + if (task_prefix == base_view.substr(l, r - l)) { + has_same_prefix = true; + break; + } + l = r + 1; + } + if (has_same_prefix) { + task_list.emplace_back(base); + } + else { + task_list.emplace_back(task_prefix + "@" + base); + } + } + return task_list; + }; + // 运行时动态生成任务 + static std::shared_ptr _generate_task_info(const std::shared_ptr& base_ptr, + const std::string& task_prefix) { std::shared_ptr task_info_ptr; switch (base_ptr->algorithm) { @@ -36,35 +132,13 @@ namespace asst task_info_ptr = std::make_shared(*base_ptr); break; } - using tasklist_t = std::vector; - auto generate_tasks = [&](tasklist_t& task_list, const tasklist_t& base_task_list) { - task_list = {}; - for (const std::string& base : base_task_list) { - std::string_view base_view = base; - size_t l = 0; - bool has_same_prefix = false; - // base 任务里已经存在相同前缀,则不加前缀 - // https://github.com/MaaAssistantArknights/MaaAssistantArknights/pull/2116#issuecomment-1270115238 - for (size_t r = base_view.find('@'); r != std::string_view::npos; r = base_view.find('@', l)) { - if (task_prefix == base_view.substr(l, r - l)) { - has_same_prefix = true; - break; - } - l = r + 1; - } - if (has_same_prefix) { - task_list.emplace_back(base); - } - else { - task_list.emplace_back(task_prefix + "@" + base); - } - } - }; - generate_tasks(task_info_ptr->next, base_ptr->next); - generate_tasks(task_info_ptr->exceeded_next, base_ptr->exceeded_next); - generate_tasks(task_info_ptr->on_error_next, base_ptr->on_error_next); - generate_tasks(task_info_ptr->reduce_other_times, base_ptr->reduce_other_times); + task_info_ptr->name = task_prefix + "@" + base_ptr->name; + task_info_ptr->sub = append_prefix(base_ptr->sub, task_prefix); + task_info_ptr->next = append_prefix(base_ptr->next, task_prefix); + task_info_ptr->exceeded_next = append_prefix(base_ptr->exceeded_next, task_prefix); + task_info_ptr->on_error_next = append_prefix(base_ptr->on_error_next, task_prefix); + task_info_ptr->reduce_other_times = append_prefix(base_ptr->reduce_other_times, task_prefix); return task_info_ptr; } @@ -101,7 +175,7 @@ namespace asst } std::string derived_task_name = name.substr(0, name_len); - auto task_info_ptr = generate_task_info(base_task_iter, derived_task_name); + auto task_info_ptr = _generate_task_info(base_task_iter, derived_task_name); if (task_info_ptr == nullptr) [[unlikely]] { return nullptr; } diff --git a/src/MeoAssistant/Utils/AsstUtils.hpp b/src/MeoAssistant/Utils/AsstUtils.hpp index 5df45713b0..19846fa580 100644 --- a/src/MeoAssistant/Utils/AsstUtils.hpp +++ b/src/MeoAssistant/Utils/AsstUtils.hpp @@ -134,6 +134,13 @@ namespace asst::utils s.erase(s.begin(), ranges::find_if(s, not_space)); } + template + requires std::convertible_to, char> + void tolowers(Rng& rng) + { + ranges::transform(rng, rng.begin(), [](char c) -> char { return static_cast(std::tolower(c)); }); + } + inline std::string get_format_time() { char buff[128] = { 0 }; diff --git a/src/MeoAsstGui/Helper/AsstProxy.cs b/src/MeoAsstGui/Helper/AsstProxy.cs index c8d10642c4..2c9f68d2f1 100644 --- a/src/MeoAsstGui/Helper/AsstProxy.cs +++ b/src/MeoAsstGui/Helper/AsstProxy.cs @@ -163,24 +163,6 @@ namespace MeoAsstGui } private string _curResource = "_Unloaded"; - private bool _additionalLoaded = false; - - public bool LoadAdditionalResource() - { - if (_additionalLoaded) - { - return true; - } - - var settingsModel = _container.Get(); - if (settingsModel.RoguelikeTheme != "Roguelike1") - { - _additionalLoaded = AsstLoadResource(Directory.GetCurrentDirectory() + "\\resource\\addition\\" + settingsModel.RoguelikeTheme + "\\"); - return _additionalLoaded; - } - - return true; - } /// /// 加载全局资源。 @@ -194,8 +176,6 @@ namespace MeoAsstGui return true; } - _additionalLoaded = false; - bool loaded = true; if (settingsModel.ClientType == string.Empty || settingsModel.ClientType == "Official" || settingsModel.ClientType == "Bilibili") @@ -245,11 +225,13 @@ namespace MeoAsstGui public void Init() { // TODO: 屎山.jpg,过几个版本再把这两行删了 - File.Delete(Directory.GetCurrentDirectory() + "\\resource\\addition\\Roguelike2\\resource\\roguelike_recruit.json"); - File.Delete(Directory.GetCurrentDirectory() + "\\resource\\addition\\Roguelike2\\resource\\roguelike_shopping.json"); + DirectoryInfo dir = new DirectoryInfo(Directory.GetCurrentDirectory() + "\\resource\\addition\\"); + if (dir.Exists) + { + dir.Delete(true); + } bool loaded = LoadResource(); - loaded &= LoadAdditionalResource(); _handle = AsstCreateEx(_callback, IntPtr.Zero); @@ -645,62 +627,62 @@ namespace MeoAsstGui break; /* 肉鸽相关 */ - case "Roguelike1Start": + case "StartExplore": mainModel.AddLog(Localization.GetString("BegunToExplore") + $" {execTimes} " + Localization.GetString("UnitTime"), LogColor.Info); break; - case "Roguelike1StageTraderInvestConfirm": + case "StageTraderInvestConfirm": mainModel.AddLog(Localization.GetString("HasInvested") + $" {execTimes} " + Localization.GetString("UnitTime"), LogColor.Info); break; - case "Roguelike1ExitThenAbandon": + case "ExitThenAbandon": mainModel.AddLog(Localization.GetString("ExplorationAbandoned")); break; - // case "Roguelike1StartAction": + // case "StartAction": // mainModel.AddLog("开始战斗"); // break; - case "Roguelike1MissionCompletedFlag": + case "MissionCompletedFlag": mainModel.AddLog(Localization.GetString("FightCompleted")); break; - case "Roguelike1MissionFailedFlag": + case "MissionFailedFlag": mainModel.AddLog(Localization.GetString("FightFailed")); break; - case "Roguelike1StageTraderEnter": + case "StageTraderEnter": mainModel.AddLog(Localization.GetString("Trader")); break; - case "Roguelike1StageSafeHouseEnter": + case "StageSafeHouseEnter": mainModel.AddLog(Localization.GetString("SafeHouse")); break; - case "Roguelike1StageEncounterEnter": + case "StageEncounterEnter": mainModel.AddLog(Localization.GetString("Encounter")); break; - // case "Roguelike1StageBoonsEnter": + // case "StageBoonsEnter": // mainModel.AddLog("古堡馈赠"); // break; - case "Roguelike1StageCambatDpsEnter": + case "StageCambatDpsEnter": mainModel.AddLog(Localization.GetString("CambatDps")); break; - case "Roguelike1StageEmergencyDps": + case "StageEmergencyDps": mainModel.AddLog(Localization.GetString("EmergencyDps")); break; - case "Roguelike1StageDreadfulFoe": - case "Roguelike2StageDreadfulFoe-5Enter": + case "StageDreadfulFoe": + case "StageDreadfulFoe-5Enter": mainModel.AddLog(Localization.GetString("DreadfulFoe")); break; - case "Roguelike1StageTraderInvestSystemFull": + case "StageTraderInvestSystemFull": mainModel.AddLog(Localization.GetString("UpperLimit"), LogColor.Info); break; - case "RestartGameAndContinueFighting": + case "RestartGameAndContinue": mainModel.AddLog(Localization.GetString("GameCrash"), LogColor.Warning); break; @@ -708,7 +690,7 @@ namespace MeoAsstGui mainModel.AddLog(Localization.GetString("GameDrop"), LogColor.Warning); break; - case "Roguelike1GamePass": + case "GamePass": mainModel.AddLog(Localization.GetString("RoguelikeGamePass"), LogColor.RareOperator); break; } @@ -1031,7 +1013,7 @@ namespace MeoAsstGui /// 是否成功。 public bool AsstConnect(ref string error) { - if (!LoadResource() || !LoadAdditionalResource()) + if (!LoadResource()) { error = "Load Resource Failed"; return false; @@ -1421,9 +1403,10 @@ namespace MeoAsstGui /// TODO. /// TODO. /// TODO. + /// 肉鸽名字。["Phantom", "Mizuki"] /// 是否成功。 public bool AsstAppendRoguelike(int mode, int starts, bool investment_enabled, int invests, bool stop_when_full, - string squad, string roles, string core_char) + string squad, string roles, string core_char, string theme) { var task_params = new JObject(); task_params["mode"] = mode; @@ -1431,6 +1414,7 @@ namespace MeoAsstGui task_params["investment_enabled"] = investment_enabled; task_params["investments_count"] = invests; task_params["stop_when_investment_full"] = stop_when_full; + task_params["theme"] = theme; if (squad.Length > 0) { task_params["squad"] = squad; diff --git a/src/MeoAsstGui/Helper/StageManager.cs b/src/MeoAsstGui/Helper/StageManager.cs index 7737785651..4f4d8140c3 100644 --- a/src/MeoAsstGui/Helper/StageManager.cs +++ b/src/MeoAsstGui/Helper/StageManager.cs @@ -49,11 +49,6 @@ namespace MeoAsstGui // 「当前/上次」关卡导航 { string.Empty, new StageInfo { Display = Localization.GetString("DefaultStage"), Value = string.Empty } }, - // SideStory「长夜临光」复刻活动 - { "NL-8", new StageInfo { Display = "NL-8", Value = "NL-8", Activity = sideStory } }, - { "NL-9", new StageInfo { Display = "NL-9", Value = "NL-9", Activity = sideStory } }, - { "NL-10", new StageInfo { Display = "NL-10", Value = "NL-10", Activity = sideStory } }, - // 主线关卡 { "1-7", new StageInfo { Display = "1-7", Value = "1-7" } }, diff --git a/src/MeoAsstGui/MeoAsstGui.csproj b/src/MeoAsstGui/MeoAsstGui.csproj index 22c67441f8..4e095857dd 100644 --- a/src/MeoAsstGui/MeoAsstGui.csproj +++ b/src/MeoAsstGui/MeoAsstGui.csproj @@ -465,7 +465,6 @@ xcopy /e /y /i /c "$(ProjectDir)..\..\3rdparty\tools" "$(TargetDir)" -xcopy /e /y /i /c "$(ProjectDir)..\..\tools\CopilotDesinger\copilot-designer-deprecated" "$(TargetDir)\作业制作器" xcopy /e /y /i /c "$(ProjectDir)..\..\src\Python" "$(TargetDir)\Python" \ No newline at end of file diff --git a/src/MeoAsstGui/Resources/Localizations/en-us.xaml b/src/MeoAsstGui/Resources/Localizations/en-us.xaml index 5a3a1d17dc..ceddbb2869 100644 --- a/src/MeoAsstGui/Resources/Localizations/en-us.xaml +++ b/src/MeoAsstGui/Resources/Localizations/en-us.xaml @@ -136,7 +136,6 @@ Addiction Command arguments I.S. Theme - The Roguelike setting has been changed, do you want to restart the application immediately to apply the setting? Strategy Stop after starting N times Stop after investing N times diff --git a/src/MeoAsstGui/Resources/Localizations/ja-jp.xaml b/src/MeoAsstGui/Resources/Localizations/ja-jp.xaml index 1c5544ff3e..9321685cf7 100644 --- a/src/MeoAsstGui/Resources/Localizations/ja-jp.xaml +++ b/src/MeoAsstGui/Resources/Localizations/ja-jp.xaml @@ -136,7 +136,6 @@ 追加コマンド Roguelike Theme - The Roguelike setting has been changed, do you want to restart the application immediately to apply the setting? ストラテジー 冒険をN回始めた後に停止する N回投資した後に停止する @@ -447,4 +446,4 @@ つ、次は飲みすぎないようにしないと…… Hello World! - + \ No newline at end of file diff --git a/src/MeoAsstGui/Resources/Localizations/ko-kr.xaml b/src/MeoAsstGui/Resources/Localizations/ko-kr.xaml index e3155e86d1..4d143ab099 100644 --- a/src/MeoAsstGui/Resources/Localizations/ko-kr.xaml +++ b/src/MeoAsstGui/Resources/Localizations/ko-kr.xaml @@ -134,7 +134,6 @@ 추가 명령 Roguelike Theme - The Roguelike setting has been changed, do you want to restart the application immediately to apply the setting? 전략 N번 시작한 후 작업 중지 N번 투자 후 작업 중지 diff --git a/src/MeoAsstGui/Resources/Localizations/pallas.xaml b/src/MeoAsstGui/Resources/Localizations/pallas.xaml index cca27b7e5a..58befe1be6 100644 --- a/src/MeoAsstGui/Resources/Localizations/pallas.xaml +++ b/src/MeoAsstGui/Resources/Localizations/pallas.xaml @@ -134,7 +134,6 @@ 🍺🕺🍷💃🍺 🍷🍸💃🍷🍻 - 🍸🍷🍻💃💃🍻🍷🍻🍺🍺🍸🍻💃🕺🍺🍺🍻🍸🍸🍷🍺🍸💃🕺🍺🍸 🍻🍸🍻 🍸🍺🍺🍸🍻🍺🍷🍻🍻🍻🍸🍸🍷🍺 🍺🕺💃🍻🍷🍷🍻🍸🍺🍸🍻🍺🍻💃🕺 diff --git a/src/MeoAsstGui/Resources/Localizations/zh-cn.xaml b/src/MeoAsstGui/Resources/Localizations/zh-cn.xaml index 62195b7d00..6889cb4471 100644 --- a/src/MeoAsstGui/Resources/Localizations/zh-cn.xaml +++ b/src/MeoAsstGui/Resources/Localizations/zh-cn.xaml @@ -136,7 +136,6 @@ 附加命令 肉鸽主题 - 肉鸽设置已更改,是否现在重启 MAA 以应用设置? 策略 开始探索 N 次后停止任务 投资 N 个源石锭后停止任务 diff --git a/src/MeoAsstGui/Resources/Localizations/zh-tw.xaml b/src/MeoAsstGui/Resources/Localizations/zh-tw.xaml index 633c7e0c1e..d10324a6e2 100644 --- a/src/MeoAsstGui/Resources/Localizations/zh-tw.xaml +++ b/src/MeoAsstGui/Resources/Localizations/zh-tw.xaml @@ -134,7 +134,6 @@ 附加命令 肉鴿主題 - 肉鴿設置已更改,是否現在重啓 MAA 以應用設置? 策略 開始探索 N 次後停止任務 投資 N 個源石錠後停止任務 diff --git a/src/MeoAsstGui/ViewModels/SettingsViewModel.cs b/src/MeoAsstGui/ViewModels/SettingsViewModel.cs index 68ee39023a..f66f791d27 100644 --- a/src/MeoAsstGui/ViewModels/SettingsViewModel.cs +++ b/src/MeoAsstGui/ViewModels/SettingsViewModel.cs @@ -176,8 +176,8 @@ namespace MeoAsstGui RoguelikeThemeList = new List { - new CombData { Display = Localization.GetString("RoguelikeThemePhantom"), Value = "Roguelike1" }, - new CombData { Display = Localization.GetString("RoguelikeThemeMizuki"), Value = "Roguelike2" }, + new CombData { Display = Localization.GetString("RoguelikeThemePhantom"), Value = "Phantom" }, + new CombData { Display = Localization.GetString("RoguelikeThemeMizuki"), Value = "Mizuki" }, }; RoguelikeSquadList = new List @@ -791,7 +791,7 @@ namespace MeoAsstGui /* 肉鸽设置 */ - private string _roguelikeTheme = ViewStatusStorage.Get("Roguelike.RoguelikeTheme", "Roguelike1"); + private string _roguelikeTheme = ViewStatusStorage.Get("Roguelike.RoguelikeTheme", "Phantom"); /// /// Gets or sets the Roguelike theme. @@ -801,27 +801,8 @@ namespace MeoAsstGui get => _roguelikeTheme; set { - if (value == _roguelikeTheme) - { - return; - } - - ViewStatusStorage.Set("Roguelike.RoguelikeTheme", value); - System.Windows.Forms.MessageBoxManager.Yes = Localization.GetString("Ok"); - System.Windows.Forms.MessageBoxManager.No = Localization.GetString("ManualRestart"); - System.Windows.Forms.MessageBoxManager.Register(); - var result = MessageBox.Show( - Localization.GetString("RoguelikeChangedTip"), - Localization.GetString("Tip"), - MessageBoxButton.YesNo, - MessageBoxImage.Question); - System.Windows.Forms.MessageBoxManager.Unregister(); SetAndNotify(ref _roguelikeTheme, value); - if (result == MessageBoxResult.Yes) - { - Application.Current.Shutdown(); - System.Windows.Forms.Application.Restart(); - } + ViewStatusStorage.Set("Roguelike.RoguelikeTheme", value); } } diff --git a/src/MeoAsstGui/ViewModels/TaskQueueViewModel.cs b/src/MeoAsstGui/ViewModels/TaskQueueViewModel.cs index 30c20c40eb..8009c4ea6c 100644 --- a/src/MeoAsstGui/ViewModels/TaskQueueViewModel.cs +++ b/src/MeoAsstGui/ViewModels/TaskQueueViewModel.cs @@ -949,14 +949,13 @@ namespace MeoAsstGui private bool appendRoguelike() { var settings = _container.Get(); - int mode; - int.TryParse(settings.RoguelikeMode, out mode); + int.TryParse(settings.RoguelikeMode, out var mode); var asstProxy = _container.Get(); return asstProxy.AsstAppendRoguelike( mode, settings.RoguelikeStartsCount, settings.RoguelikeInvestmentEnabled, settings.RoguelikeInvestsCount, settings.RoguelikeStopWhenInvestmentFull, - settings.RoguelikeSquad, settings.RoguelikeRoles, settings.RoguelikeCoreChar); + settings.RoguelikeSquad, settings.RoguelikeRoles, settings.RoguelikeCoreChar, settings.RoguelikeTheme); } [DllImport("User32.dll", EntryPoint = "FindWindow")] diff --git a/src/MeoAsstMac b/src/MeoAsstMac new file mode 160000 index 0000000000..f689d735c6 --- /dev/null +++ b/src/MeoAsstMac @@ -0,0 +1 @@ +Subproject commit f689d735c6ec1346180fff12aba471d7df126992 diff --git a/src/Python/asst.py b/src/Python/asst.py index 0a8449bf0b..38c7189cdb 100644 --- a/src/Python/asst.py +++ b/src/Python/asst.py @@ -36,7 +36,7 @@ class Asst: Asst.__libpath = pathlib.Path(path) / 'MeoAssistant.dll' os.environ["PATH"] += os.pathsep + str(path) Asst.__lib = ctypes.WinDLL(str(Asst.__libpath)) - if platform.system().lower() == 'darwin': + elif platform.system().lower() == 'darwin': Asst.__libpath = pathlib.Path(path) / 'libMeoAssistant.dylib' os.environ['DYLD_LIBRARY_PATH'] += os.pathsep + str(path) Asst.__lib = ctypes.CDLL(str(Asst.__libpath)) diff --git a/tools/MaaBuilder/ActionConfiguration.cs b/tools/MaaBuilder/ActionConfiguration.cs index d9d5110af2..96edc023db 100644 --- a/tools/MaaBuilder/ActionConfiguration.cs +++ b/tools/MaaBuilder/ActionConfiguration.cs @@ -6,8 +6,8 @@ namespace MaaBuilder; [TypeConverter(typeof(TypeConverter))] public class ActionConfiguration : Enumeration { - public static readonly ActionConfiguration DevBuild = new() { Value = "dev-build" }; - public static readonly ActionConfiguration ReleaseMaa = new() { Value = "release-maa" }; + public static readonly ActionConfiguration DevBuild = new() { Value = "dev-build-win" }; + public static readonly ActionConfiguration ReleaseMaa = new() { Value = "release-maa-win" }; public static implicit operator string(ActionConfiguration configuration) { @@ -16,8 +16,8 @@ public class ActionConfiguration : Enumeration public static explicit operator ActionConfiguration(string value) => value switch { - "dev-build" => DevBuild, - "release-maa" => ReleaseMaa, + "dev-build-win" => DevBuild, + "release-maa-win" => ReleaseMaa, _ => null }; } diff --git a/tools/MaaBuilder/Build.cs b/tools/MaaBuilder/Build.cs index 6ae652be8d..12bd8f32d5 100644 --- a/tools/MaaBuilder/Build.cs +++ b/tools/MaaBuilder/Build.cs @@ -33,7 +33,7 @@ public partial class Build : NukeBuild const string MasterBranch = "master"; const string DevBranch = "dev"; - const string MaaDevBundlePackageNameTemplate = "MaaBundle-Dev-{VERSION}"; + const string MaaDevBundlePackageNameTemplate = "MAA-{VERSION}-win-x64-Dev"; string Version = ""; string ChangeLog = ""; diff --git a/tools/MaaBuilder/Builder/CI/Build.CI.GitHubActions.DevBuild.cs b/tools/MaaBuilder/Builder/CI/Build.CI.GitHubActions.DevBuild.cs index 6546f19856..79fab25947 100644 --- a/tools/MaaBuilder/Builder/CI/Build.CI.GitHubActions.DevBuild.cs +++ b/tools/MaaBuilder/Builder/CI/Build.CI.GitHubActions.DevBuild.cs @@ -3,7 +3,7 @@ using Nuke.Common.CI.GitHubActions; namespace MaaBuilder; [GitHubActions( - name: "dev-build", + name: "dev-build-win", image: GitHubActionsImage.WindowsLatest, OnPushBranchesIgnore = new[] { MasterBranch }, OnPullRequestBranches = new[] { DevBranch }, diff --git a/tools/MaaBuilder/Builder/CI/Build.CI.GitHubActions.ReleaseMaa.cs b/tools/MaaBuilder/Builder/CI/Build.CI.GitHubActions.ReleaseMaa.cs index 3a0650df6f..fcc7cf1aaf 100644 --- a/tools/MaaBuilder/Builder/CI/Build.CI.GitHubActions.ReleaseMaa.cs +++ b/tools/MaaBuilder/Builder/CI/Build.CI.GitHubActions.ReleaseMaa.cs @@ -3,7 +3,7 @@ using Nuke.Common.CI.GitHubActions; namespace MaaBuilder; [GitHubActions( - name: "release-maa", + name: "release-maa-win", image: GitHubActionsImage.WindowsLatest, OnPushTags = new[] { "v*" }, InvokedTargets = new[] { nameof(ReleaseMaa) },