Compare commits

..

3 Commits

606 changed files with 25513 additions and 81186 deletions

View File

@@ -1,64 +0,0 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/javascript-node
{
"name": "MAA Docs Env (Light)",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
// "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"build": {
"dockerfile": "Dockerfile"
},
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [3001],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "bash .devcontainer/0/post-create.sh",
// Configure tool-specific properties.
"customizations": {
"vscode": {
"extensions": [
"nekosu.maa-support",
"ms-python.python",
"ms-python.black-formatter",
"ms-python.isort",
"esbenp.prettier-vscode",
"DavidAnson.vscode-markdownlint",
"yzhang.markdown-all-in-one",
"vue.volar",
"mkxml.vscode-filesize"
],
"settings": {
// Editor formatting
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
// Language-specific formatting
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
// Python formatting and linting
"isort.args": ["--profile", "black"],
// Python runtime
"python.terminal.launchArgs": ["-u"],
"python.defaultInterpreterPath": "/home/vscode/miniconda/envs/maa/bin/python",
"python.terminal.activateEnvironment": false,
// Performance optimizations
"search.exclude": {
"**/node_modules": true,
"**/3rdparty": true
}
}
}
}
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}

View File

@@ -1,39 +0,0 @@
FROM mcr.microsoft.com/devcontainers/base:ubuntu
USER vscode
ENV CONDA_DIR=/home/vscode/miniconda
ENV PATH="$CONDA_DIR/bin:$PATH"
ARG CLANGD_VERSION=20
ARG PYTHON_VERSION=3.12
ARG NODEJS_VERSION=24
# Install system dependencies
RUN sudo apt update \
&& sudo apt upgrade -y \
&& sudo apt install -y \
cmake clangd-${CLANGD_VERSION}
RUN sudo update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-${CLANGD_VERSION} 100
# Install Miniconda
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh \
&& bash ~/miniconda.sh -b -p ${CONDA_DIR} \
&& rm ~/miniconda.sh \
&& conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main \
&& conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
# Configure conda environment
RUN eval "$(conda shell.bash hook)" \
&& conda create -n maa \
&& conda activate maa \
&& conda install -y \
python=${PYTHON_VERSION} \
conda-forge::nodejs=${NODEJS_VERSION} \
&& pip install pre-commit black isort
# Finalize conda setup
RUN conda init \
&& conda config --set auto_activate false \
&& echo "conda activate maa" >> ~/.bashrc

View File

@@ -1,83 +0,0 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/javascript-node
{
"name": "MAA Core Env (Full)",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
// "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"build": {
"dockerfile": "Dockerfile"
},
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [3001],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "bash .devcontainer/1/post-create.sh",
// Configure tool-specific properties.
"customizations": {
"vscode": {
"extensions": [
"nekosu.maa-support",
"ms-vscode.cmake-tools",
"xaver.clang-format",
"llvm-vs-code-extensions.vscode-clangd",
"ms-python.python",
"ms-python.black-formatter",
"ms-python.isort",
"esbenp.prettier-vscode",
"DavidAnson.vscode-markdownlint",
"yzhang.markdown-all-in-one",
"vue.volar",
"mkxml.vscode-filesize"
],
"settings": {
// Editor formatting
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
// Language-specific formatting
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
"[cpp]": {
"editor.defaultFormatter": "xaver.clang-format"
},
"[c]": {
"editor.defaultFormatter": "xaver.clang-format"
},
// Python formatting and linting
"isort.args": ["--profile", "black"],
// Python runtime
"python.terminal.launchArgs": ["-u"],
"python.defaultInterpreterPath": "/home/vscode/miniconda/envs/maa/bin/python",
"python.terminal.activateEnvironment": false,
// CMake settings
"cmake.configureSettings": {
"BUILD_DEBUG_DEMO": "ON",
"CMAKE_TOOLCHAIN_FILE": "MaaDeps/cmake/maa-x64-linux-toolchain.cmake"
},
"cmake.configureOnOpen": false,
// Performance optimizations
"search.exclude": {
"**/node_modules": true,
"**/build": true,
"**/install": true,
"**/MaaDeps": true,
"**/3rdparty": true
}
}
}
}
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}

View File

@@ -1,42 +0,0 @@
#!/bin/bash
WORKSPACE=$(pwd)
# conda activate maa
echo "===================="
cd "$WORKSPACE"
echo "Setting up git safe.directory for $WORKSPACE and its submodules..."
git config --global --add safe.directory "$WORKSPACE"
git submodule foreach --recursive 'git config --global --add safe.directory "$toplevel/$path"'
echo "===================="
cd "$WORKSPACE"/docs
echo "Installing node modules..."
npm install -g pnpm
pnpm install --frozen-lockfile
echo "===================="
cd "$WORKSPACE"
echo "Installing Python dependencies..."
# Install Python dependencies from all tools
for req_file in tools/*/requirements.txt; do
if [ -f "$req_file" ]; then
echo "Installing from $req_file"
pip install -r "$req_file"
fi
done
for req_file in tools/*/requirements-dev.txt; do
if [ -f "$req_file" ]; then
echo "Installing from $req_file"
pip install -r "$req_file"
fi
done
echo "===================="
cd "$WORKSPACE"
echo "Installing MaaDeps..."
python tools/maadeps-download.py
# Link clang-format & clangd to /usr/local/bin for easy access
sudo ln -s $WORKSPACE/MaaDeps/x-tools/llvm/bin/clang-format /usr/local/bin/clang-format
# sudo ln -s $WORKSPACE/MaaDeps/x-tools/llvm/bin/clangd /usr/local/bin/clangd

View File

@@ -17,12 +17,11 @@ RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -
# Configure conda environment
RUN eval "$(conda shell.bash hook)" \
&& conda create -n maa \
&& conda create -n maa python=$PYTHON_VERSION -y \
&& conda activate maa \
&& conda install -y \
python=$PYTHON_VERSION \
conda-forge::nodejs=$NODEJS_VERSION \
&& pip install pre-commit black isort
&& conda install -y conda-forge::nodejs=$NODEJS_VERSION \
&& pip install pre-commit black \
&& npm install -g pnpm
# Finalize conda setup
RUN conda init \

View File

@@ -1,5 +1,50 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/javascript-node
{
"name": "Plain Env (Nothing Installed)",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"postCreateCommand": "git config --global --add safe.directory \"$(pwd)\" && git submodule foreach --recursive 'git config --global --add safe.directory \"$toplevel/$path\"'"
"name": "MAA",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
// "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"build": {
"dockerfile": "Dockerfile"
},
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [3001],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "bash .devcontainer/post-create.sh",
// Configure tool-specific properties.
"customizations": {
"vscode": {
"extensions": [
"mkxml.vscode-filesize",
"nekosu.maa-support",
"DavidAnson.vscode-markdownlint",
"esbenp.prettier-vscode",
"vue.volar",
"ms-python.python",
"ms-python.black-formatter"
],
"settings": {
// format
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[markdown]": {
"editor.defaultFormatter": "DavidAnson.vscode-markdownlint"
},
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter"
},
// python
"python.terminal.launchArgs": ["-u"],
"python.defaultInterpreterPath": "/home/vscode/miniconda/envs/maa/bin/python",
"python.terminal.activateEnvironment": false
}
}
}
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}

View File

@@ -4,13 +4,18 @@ WORKSPACE=$(pwd)
# conda activate maa
echo "===================="
cd "$WORKSPACE"
echo "Setting up git safe.directory for $WORKSPACE and its submodules..."
cd "$WORKSPACE"
git config --global --add safe.directory "$WORKSPACE"
git submodule foreach --recursive 'git config --global --add safe.directory "$toplevel/$path"'
echo "===================="
cd "$WORKSPACE"
echo "Installing dependencies for python..."
# pip install -r tools/.../requirements.txt
# pip install -r tools/.../requirements-dev.txt
echo "===================="
echo "Installing dependencies for nodejs..."
cd "$WORKSPACE"/docs
echo "Installing node modules..."
npm install -g pnpm
pnpm install --frozen-lockfile

2
.gitattributes vendored
View File

@@ -10,5 +10,3 @@
*.md text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.sh text eol=lf

View File

@@ -338,7 +338,7 @@ jobs:
github.event.pull_request.base.repo.full_name
needs: meta
runs-on: macos-26
runs-on: macos-latest
strategy:
matrix:
arch: [arm64, x86_64]
@@ -396,7 +396,7 @@ jobs:
github.event.pull_request.base.repo.full_name
needs: [meta, macOS-Core]
runs-on: macos-26
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
@@ -442,7 +442,7 @@ jobs:
api-private-key: ${{ secrets.HGUANDL_APPSTORE_KEY }}
- name: Setup Xcode Toolchain
if: false
if: true
run: |
sudo xcode-select -s /Applications/Xcode_16.1.app/Contents/Developer
@@ -575,7 +575,7 @@ jobs:
find . -type f | while read f; do mv -fvt . $f; done
- name: Release to Github
uses: softprops/action-gh-release@v2.4.1
uses: softprops/action-gh-release@v2.3.3
with:
body_path: CHANGELOG.md
files: |

View File

@@ -25,7 +25,6 @@ permissions:
jobs:
analyze-manual:
name: Analyze MaaCore and MaaWpfGui
if: github.repository_owner == 'MaaAssistantArknights'
runs-on: windows-latest
steps:
- name: Checkout repository
@@ -34,13 +33,13 @@ jobs:
show-progress: false
- name: Setup CodeQL
uses: github/codeql-action/init@v4
uses: github/codeql-action/init@v3
with:
languages: c-cpp,csharp
build-mode: manual
- name: Run CodeQL
uses: github/codeql-action/analyze@v4
uses: github/codeql-action/analyze@v3
with:
category: "/language:multi-manual"

View File

@@ -17,7 +17,6 @@ permissions:
jobs:
analyze-workflows:
name: Analyze GitHub Workflows
if: github.repository_owner == 'MaaAssistantArknights'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
@@ -26,12 +25,12 @@ jobs:
show-progress: false
- name: Setup CodeQL for GitHub Actions
uses: github/codeql-action/init@v4
uses: github/codeql-action/init@v3
with:
languages: actions
build-mode: none
- name: Run CodeQL Analysis
uses: github/codeql-action/analyze@v4
uses: github/codeql-action/analyze@v3
with:
category: "/language:multi-none"

View File

@@ -272,7 +272,7 @@ jobs:
- name: Update version.json date if necessary
id: update_version
run: |
sh ./tools/ResourceUpdater/version.sh
./tools/ResourceUpdater/version.zsh
- name: Setup python
if: steps.update_version.outputs.contains_png == 'True'
@@ -350,14 +350,3 @@ jobs:
# if: steps.add_files.outputs.have_commits == 'True'
# run: |
# gh workflow run release-nightly-ota -f release_body="Auto Release of Resource Updates"
- name: Create issue if failed
if: failure()
uses: actions-cool/issues-helper@v3
with:
actions: "create-issue"
title: "Failed to Update Game Resources"
body: |
${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
@MistEO @ABA2396 @Constrat

View File

@@ -4,7 +4,6 @@ on:
push:
paths:
- ".github/workflows/smoke-testing.yml"
- "tools/SmokeTesting/**"
- "3rdparty/include/**"
- "include/**"
- "src/Cpp/**"
@@ -17,7 +16,6 @@ on:
pull_request:
paths:
- ".github/workflows/smoke-testing.yml"
- "tools/SmokeTesting/**"
- "3rdparty/include/**"
- "include/**"
- "src/Cpp/**"
@@ -108,7 +106,7 @@ jobs:
- name: Run tests
run: |
sh ./tools/SmokeTesting/run_tests.sh
./tools/SmokeTesting/run_tests.zsh
- name: Save cache smoke-testing (only in dev)
if: steps.smoke-cache.outputs.cache-hit != 'true' && github.ref == 'refs/heads/dev'

View File

@@ -35,7 +35,6 @@ jobs:
show-progress: false
- name: Setup Pages
if: github.repository_owner == 'MaaAssistantArknights'
uses: actions/configure-pages@v5
- name: Install pnpm
@@ -60,13 +59,13 @@ jobs:
working-directory: "./docs"
- name: Upload artifact
uses: actions/upload-pages-artifact@v4
uses: actions/upload-pages-artifact@v3
with:
path: "./docs/.vuepress/dist"
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
if: github.repository_owner == 'MaaAssistantArknights' && (inputs.deploy-to-prod == true || github.ref == 'refs/heads/master')
if: ${{ inputs.deploy-to-prod == true || github.ref == 'refs/heads/master' }}
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: "./docs/.vuepress/dist"

View File

@@ -4,50 +4,36 @@ ci:
autofix_prs: true
repos:
- repo: https://github.com/shssoichiro/oxipng
rev: v9.1.5
rev: v9.1.4
hooks:
- id: oxipng
name: Image Compression
args: ["-q", "-o", "2", "-s", "--ng"]
- repo: https://github.com/pre-commit/mirrors-clang-format
rev: v21.1.1
rev: v20.1.0
hooks:
- id: clang-format
name: Clang-Format (MaaCore)
files: ^src/MaaCore/.*
args: ["--assume-filename", ".clang-format"]
- repo: https://github.com/rbubley/mirrors-prettier
rev: v3.6.2
rev: v3.5.3
hooks:
- id: prettier
name: Prettier (Config Files)
name: prettier (config files)
files: ^((\.github/ISSUE_TEMPLATE|resource|src|tools)/.*|\.pre-commit-config\.yaml|package-definition\.json)
types_or:
- yaml
- json
- repo: https://github.com/rbubley/mirrors-prettier
rev: v3.6.2
rev: v3.5.3
hooks:
- id: prettier
name: Prettier (Documentation)
name: prettier (docs)
files: ^docs/.*
- repo: https://github.com/psf/black
rev: 25.9.0
hooks:
- id: black
name: Black Formatter (Python)
- repo: https://github.com/pycqa/isort
rev: 6.0.1
hooks:
- id: isort
name: Isort (Python)
args: ["--profile", "black", "--filter-files"]
- repo: https://github.com/DavidAnson/markdownlint-cli2
rev: v0.18.1
rev: v0.17.2
hooks:
- id: markdownlint-cli2
name: MarkdownLint (Documentation)
files: ^docs/.*|^README\.md$
types:
- markdown
args: ["--fix", "--config", "docs/.markdownlint.yaml"]
args: ["--fix", "--config", "docs/.markdownlint.yaml", "#**/node_modules"]

View File

@@ -1,12 +1,18 @@
**/node_modules/
**/pnpm-lock.yaml
docs/**/*.md
MaaDeps/
3rdparty/
src/maa-cli
src/MaaMacGui
# website/
# docs/
resource/Arknights-Tile-Pos/
tools/OptimizeTemplates/optimize_templates.json
CITATION.cff
CHANGELOG.md
## FUCK FUCK

View File

@@ -1,149 +1,31 @@
## v5.26.2
### Highlight
Support for Masses' Travel event (global)
Support for Duel Channel minigame (global)
Fixes for IS2 Phantom difficulty update (global)
Various fixes for global interface changes (global)
## v5.26.0-beta.1
### 新增 | New
* 支持访问好友半透明界面 @ABA2396
### 修复 | Fix
* ReceptionMini for EN @Constrat
* Various store OCR for EN IS @Constrat
* MT minigame EN @Constrat
* operbox, battlequick, infrast expand role EN @Constrat
* Exusiai and Hoshiguma prepare for alters @Constrat
* increase ROI for Orundum and SpecialAccess @Constrat
* OrundumActivities MT event for EN @Constrat
* update ChooseDifficulty for EN phantom @Constrat
* revert IS2 EN StrategyChange changes @Constrat
* add IS2 invest mode to EN, JP and txwy @Constrat
* POSIX compliant @Constrat
* preload Minigame EN @Constrat
* python formatting @Constrat
* KR monthly card reward @HX3N
* task sorter UTF-8 BOM fix @Constrat
* EN monthly card reward @Constrat
* YostarKR update VisitNext @HX3N
* update VisitNext ref #14357 @Constrat
### 文档 | Docs
* update prts.plus repo link @MistEO
* 移除前端公招 @MistEO
* 更新plume主题并适应新版的collections配置 (#14360) @lucienshawls
### 其他 | Other
* revert temp fix 715c2c13b5372dc769aa0b9efe2be551cd200192 for EN / JP and KR @Constrat
* Enable phantom roguelike difficulty for Yostar servers (#14332) @Manicsteiner
* update MT mini event EN @Constrat
* YostarKR MT ocr edit (#14398) @HX3N
* YostarKR MiniGame (#14395) @HX3N
* YostarJP update VisitNext (#14390) @Manicsteiner
* 调整Award模板阈值 @Saratoga-Official
* auto run smoke testing on tools/SmokeTesting modifications @Constrat
* YostarKR preload minigame (#14375) @HX3N
* preload minigame for MT EN @Constrat
* YostarJP MT stages and Duel channel (#14362) @Manicsteiner
* KR MT navigation (#14365) @HX3N
* 16-16地图 @status102
* remove global info for mumu @Constrat
* preload MT navigation EN @Constrat
----
----
## v5.26.1
### 新增 | New
* 新增 cdk 被封禁的提示信息 @ABA2396
* RM-1 (#14271) @Daydreamer114
### 改进 | Improved
* RegionOCRer 中 useRaw=false 时, 使用原图二值蒙版代替直接 OCR 二值图像 (#14276) @status102
### 修复 | Fix
* 游戏更新公招界面后无法确认招募 (#14335) @ABA2396
* 第一次访问 mirror酱 失败时错误提示 cdk 已过期 @ABA2396
* 手动关闭模拟器后未重启 MAA 时 minitouch 可能失效 @ABA2396
* 尝试修复生息演算任务识别并删除编队时卡住的问题 (#14290) @Alan-Charred
* 增强 playtools 关闭连接时的异常处理,确保套接字安全关闭 (#14280) @RainYangty
* EN IS3 encounter ocr fix MAA, EN 服水月肉鸽 事件名识别错误 bug Fixes @Constrat
* 理智药使用数量 ocr 不准确时中断使用 @status102
* 使用理智药 执行减少次数循环在 asst_stop 时缺少中断判断 @status102
* 修复因失败导致次生预算出错 (#14267) @Saratoga-Official
### 文档 | Docs
* 补充 CopilotTask 的文档 (#14319) @Alan-Charred
* 添加目录自动跳转组件并使 locale 自动生成 (#14299) @lucienshawls
* 文档站新增字符画组件 (#14270) @lucienshawls
* 将文档中指向部分文档目录的链接改为指向对应目录下的第一篇文档 (#14292) @JasonHuang79
### 其他 | Other
* 使用 `BeginAnimation` 替代 `新建 Storyboard 并添加动画` @ABA2396
* 将 mac 开发环境下的 cmake_osx 版本改为 13.4 (#14283) @Pylinx171
* 完善容器配置及依赖安装 (#14208) @lucienshawls
* run smoke test in lldb @horror-proton
* YostarJP ocr fix @Saratoga-Official
----
----
## v5.26.0
### 新增 | New
* 萨卡兹肉鸽 `待诉说的故事` 二次选择 (#14246) @Manicsteiner
* mac 支持次生预案 @ABA2396
* 次生预案十里坡剑神 @ABA2396
* 设置指引添加更新设置 @ABA2396
* 统一显示效果 @ABA2396
* 设置指引添加性能设置 @ABA2396
### 改进 | Improved
* 调整界园肉鸽招募策略 (#14255) @Saratoga-Official
* 优化界园肉鸽部分关卡策略 (#14244) @Lancarus
* 优化次生预案执行速度 @ABA2396
### 修复 | Fix
* 商店刷新两步走 (#14201) @Alan-Charred
* 水月肉鸽商店刷新延迟不够 @Saratoga-Official
* 按钮显示文字错误 @ABA2396
* 次生预案模拟器卡了容易点过头 @Saratoga-Official
* 怎么还有人在用 adb input @ABA2396
* 文档首页语言选择按钮的宽度定义方式 (#14199) @lucienshawls
* 傀影肉鸽无法识别四结局 (#14193) @Saratoga-Official
* GamePassSkip2 识别到错误的跳过 @Saratoga-Official
* 萨米肉鸽不期而遇避战 @Saratoga-Official
* clang @Constrat
* Google Play Games Developer shutdown @Constrat
* manual set resource version time @MistEO
* prettier @Constrat
### 文档 | Docs
* 更新文档 (#14236) @Rbqwow @Saratoga-Official
* 补充 vsc 插件繁中文档 @Rbqwow
* 补充vsc插件繁中文档 @Rbqwow
* 修复文档站 readme 盾换行 @Rbqwow
* 调整文档站的标题和尾注文本显示 (#14213) @lucienshawls
* 更新网页开发相关文档 (#14167) @Rbqwow @Manicsteiner
* 完善任务流程协议文档 (#13232) @zzyyyl
* 回调消息协议文档视觉更新 @SherkeyXD
* 集成文档视觉更新 @SherkeyXD
* 文档启用b站视频播放功能 @SherkeyXD
* 文档启用 b 站视频播放功能 @SherkeyXD
* 文档添加字段容器功能 @SherkeyXD
* 文档添加功能 @SherkeyXD
* 更新文档编写指南 @SherkeyXD
@@ -157,11 +39,10 @@ Various fixes for global interface changes (global)
### 其他 | Other
* 新图标和界面风格 @hguandl
* 统一显示效果 @ABA2396
* 水月萨米肉鸽不期而遇避战 @Saratoga-Official
* 重写完成后动作仅一次的ui字符串 (#14196) @Rbqwow
* 重写完成后动作仅一次的 ui 字符串 (#14196) @Rbqwow
* 贸易站没其他好用的人再用锏 @ABA2396
* YostarJP roguelike edits (#14252) @Manicsteiner
* YostarJP Sarkaz roguelike StageEncounter (#14223) @Manicsteiner
* YostarJP sami roguelike 720p (#14210) @Manicsteiner
* YostarJP Mizuki StageEncounter (#14206) @Manicsteiner

View File

@@ -98,9 +98,11 @@ MAA 支持命令行界面CLI操作支持 LinuxmacOS 和 Windows
### 主要关联项目
**目前项目组非常缺前端大佬,若您有相关经验,欢迎加入我们!**
- 全新框架:[MaaFramework](https://github.com/MaaXYZ/MaaFramework)
- [作业站](https://prts.plus) 前端:[zoot-plus-frontend](https://github.com/ZOOT-Plus/zoot-plus-frontend)
- [作业站](https://prts.plus) 后端:[ZootPlusBackend](https://github.com/ZOOT-Plus/ZootPlusBackend)
- [作业站](https://prts.plus) 前端:[maa-copilot-frontend](https://github.com/MaaAssistantArknights/maa-copilot-frontend)
- [作业站](https://prts.plus) 后端:[MaaBackendCenter](https://github.com/MaaAssistantArknights/MaaBackendCenter)
- [官网](https://maa.plus)[前端](https://github.com/MaaAssistantArknights/maa-website)
- 深度学习:[MaaAI](https://github.com/MaaAssistantArknights/MaaAI)
@@ -142,24 +144,6 @@ MAA 以中文(简体)为第一语言,翻译词条均以中文(简体)
[GitHub Pull Request 流程简述](https://docs.maa.plus/zh-cn/develop/development.html#github-pull-request-流程简述)
#### 想参与开发,但面对庞大的项目仓库望而却步?
请使用 GitHub Codespaces 在线开发环境,尽情尝试!
我们预置了多种不同的开发环境以供选择:
- 空白环境,裸 Linux 容器(默认)
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg?color=green)](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights?devcontainer_path=.devcontainer%2Fdevcontainer.json)
- 轻量环境,适合文档站前端开发
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg?color=green)](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights?devcontainer_path=.devcontainer%2F0%2Fdevcontainer.json)
- 全量环境,适合 MAA Core 相关开发
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg?color=green)](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights?devcontainer_path=.devcontainer%2F1%2Fdevcontainer.json)
#### Issue bot
请参阅 [Issue Bot 使用方法](https://docs.maa.plus/zh-cn/develop/issue-bot-usage.html)

View File

@@ -37,7 +37,7 @@ function(get_osx_architecture)
endfunction()
if(APPLE)
set(CMAKE_OSX_DEPLOYMENT_TARGET 13.4) # for to_chars
set(CMAKE_OSX_DEPLOYMENT_TARGET 13.3) # for to_chars
get_osx_architecture()
endif(APPLE)
@@ -70,4 +70,4 @@ function(create_resource_link TARGET_NAME OUTPUT_DIR)
COMMENT "Creating symlink for resource directory for ${TARGET_NAME}"
)
endif()
endfunction()
endfunction()

View File

@@ -1 +1,2 @@
**/pnpm-lock.yaml
**/*.md

View File

@@ -11,6 +11,12 @@ module.exports = {
arrowParens: 'always',
overrides: [
{
files: ['**/*.ts'],
options: {
semi: true,
},
},
{
files: ['**/*.*css'],
options: {
@@ -30,11 +36,5 @@ module.exports = {
tabWidth: 4,
},
},
{
files: ['**/*.md'],
options: {
embeddedLanguageFormatting: 'off',
},
},
],
}

View File

@@ -1,21 +1,11 @@
import { defineClientConfig } from 'vuepress/client'
import { defineClientConfig } from 'vuepress/client';
import { getAsciiArt } from './plugins/asciiArt.mts'
import ImageGrid from './components/ImageGrid.vue';
import AsciiArt from './components/AsciiArt.vue'
import ImageGrid from './components/ImageGrid.vue'
import Redirect from './components/Redirect.vue'
import './styles/index.scss'
import './styles/index.scss';
export default defineClientConfig({
enhance: ({ app }) => {
app.component('AsciiArt', AsciiArt)
app.component('ImageGrid', ImageGrid)
app.component('Redirect', Redirect)
// 输出一个随机的字符画
const asciiArtData = getAsciiArt(undefined, 'auto', 'console')
console.log('%c' + asciiArtData.text, 'white-space: pre;')
app.component('ImageGrid', ImageGrid);
},
})
});

View File

@@ -1,106 +0,0 @@
<template>
<div ref="asciiArtWrapperElement" class="ascii-art-wrapper">
<pre ref="asciiArtContentElement" class="ascii-art-content">{{ asciiArtText }}</pre>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount } from 'vue'
import { getAsciiArt, ThemeType, AsciiArtScope } from '../plugins/asciiArt.mts'
// -------- Props --------
interface AsciiArtProps {
name?: string
theme?: ThemeType
scope?: AsciiArtScope
}
const props = defineProps<AsciiArtProps>()
// -------- Refs --------
const asciiArtWrapperElement = ref<HTMLElement>()
const asciiArtContentElement = ref<HTMLElement>()
// -------- Data --------
let asciiArtNameInUse = props.name
const asciiArtText = ref('')
let layoutObserver: ResizeObserver
let themeObserver: MutationObserver
let isScaleUpLocked = false
let lastScaleRatio = 1
function refreshAsciiArt() {
const asciiArtData = getAsciiArt(asciiArtNameInUse, props.theme, props.scope)
asciiArtNameInUse = asciiArtData.name
asciiArtText.value = asciiArtData.text
}
function scaleAsciiArt() {
if (!asciiArtWrapperElement.value || !asciiArtContentElement.value) return
// 原始高度和宽度无视scale
const contentWidth = asciiArtContentElement.value.scrollWidth
const contentHeight = asciiArtContentElement.value.scrollHeight
if (contentWidth === 0 || contentHeight === 0) return
const targetWidth = asciiArtWrapperElement.value.clientWidth
const targetHeight = window.innerHeight
const scaleRatio = Math.min(targetWidth / contentWidth, targetHeight / contentHeight)
// 锁定状态不允许放大
if (scaleRatio > lastScaleRatio && isScaleUpLocked) return
lastScaleRatio = scaleRatio
isScaleUpLocked = true
asciiArtContentElement.value.style.transform = `scale(${scaleRatio})`
asciiArtWrapperElement.value.style.height = `${contentHeight * scaleRatio}px`
}
function forceScaleAsciiArt() {
isScaleUpLocked = false
scaleAsciiArt()
}
onMounted(() => {
if (!asciiArtWrapperElement.value || !asciiArtContentElement.value) return
layoutObserver = new ResizeObserver(scaleAsciiArt)
layoutObserver.observe(asciiArtContentElement.value)
layoutObserver.observe(asciiArtWrapperElement.value)
themeObserver = new MutationObserver(refreshAsciiArt)
themeObserver.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] })
window.addEventListener('resize', forceScaleAsciiArt)
refreshAsciiArt()
})
onBeforeUnmount(() => {
if (layoutObserver) {
layoutObserver.disconnect()
}
if (themeObserver) {
themeObserver.disconnect()
}
window.removeEventListener('resize', forceScaleAsciiArt)
})
</script>
<style scoped>
.ascii-art-wrapper {
display: flex;
justify-content: center;
align-items: flex-start;
}
.ascii-art-content {
display: block;
white-space: pre;
margin: 0 auto;
transform-origin: top;
line-height: 1;
font-family: 'JetBrains Mono', monospace;
}
</style>

View File

@@ -1,25 +0,0 @@
<template />
<script setup lang="ts">
import { onMounted } from 'vue'
import { useRouter, useRoute } from 'vuepress/client'
interface Props {
to?: string
}
const props = defineProps<Props>()
const route = useRoute()
const router = useRouter()
function resolvePath(to: string) {
const target = new URL(to, 'http://example.com' + route.path) // 使用一个虚拟的基础 URL
return target.pathname
}
onMounted(() => {
if (!props.to) return
const targetPath = resolvePath(props.to)
router.replace(targetPath)
})
</script>

View File

@@ -1,13 +1,11 @@
import { viteBundler } from '@vuepress/bundler-vite'
import { defineUserConfig } from 'vuepress'
import { googleAnalyticsPlugin } from '@vuepress/plugin-google-analytics'
import { plumeTheme } from 'vuepress-theme-plume'
import { viteBundler } from '@vuepress/bundler-vite';
import { defineUserConfig } from 'vuepress';
import { googleAnalyticsPlugin } from '@vuepress/plugin-google-analytics';
import { plumeTheme } from 'vuepress-theme-plume';
import { genSiteLocales } from './navigation/genLocales'
import DocSearchConfig from './plugins/search';
import DocSearchConfig from './plugins/search'
const isProd = process.env.NODE_ENV === 'production'
const isProd = process.env.NODE_ENV === 'production';
export default defineUserConfig({
base: '/',
@@ -17,7 +15,33 @@ export default defineUserConfig({
host: '0.0.0.0',
port: 3001,
locales: genSiteLocales(),
locales: {
'/zh-cn/': {
lang: 'zh-CN',
title: 'MAA 文档站',
description: '文档',
},
'/zh-tw/': {
lang: 'zh-TW',
title: 'MAA 文件站',
description: '文件',
},
'/en-us/': {
lang: 'en-US',
title: 'MAA Documentation Site',
description: 'Documentation',
},
'/ja-jp/': {
lang: 'ja-JP',
title: 'MAA ドキュメントサイト',
description: 'ドキュメント',
},
'/ko-kr/': {
lang: 'ko-KR',
title: 'MAA 문서 사이트',
description: '문서',
},
},
head: [
['link', { rel: 'preconnect', href: 'https://fonts.googleapis.com' }],
@@ -64,6 +88,8 @@ export default defineUserConfig({
contributors: false,
changelog: false,
blog: false,
cache: 'filesystem',
search: DocSearchConfig,
@@ -106,4 +132,4 @@ export default defineUserConfig({
id: 'G-FJQDKG394Z',
}),
],
})
});

View File

@@ -1,7 +1,5 @@
/// <reference types="vite/client" />
declare module '*.vue' {
import { DefineComponent } from 'vue'
const component: DefineComponent<{}, {}, any>
export default component
import { DefineComponent } from 'vue';
const component: DefineComponent<{}, {}, any>;
export default component;
}

View File

@@ -0,0 +1,19 @@
import { defineNavbarConfig } from 'vuepress-theme-plume';
export const enusNavbar = defineNavbarConfig([
{
text: 'User Manual',
icon: 'mdi:user',
link: '/en-us/manual/newbie.html',
},
{
text: 'Development Docs',
icon: 'ph:code-bold',
link: '/en-us/develop/development.html',
},
{
text: 'Protocol Docs',
icon: 'basil:document-solid',
link: '/en-us/protocol/integration.html',
},
]);

View File

@@ -0,0 +1,5 @@
export * from './zh-cn';
export * from './zh-tw';
export * from './en-us';
export * from './ja-jp';
export * from './ko-kr';

View File

@@ -0,0 +1,19 @@
import { defineNavbarConfig } from 'vuepress-theme-plume';
export const jajpNavbar = defineNavbarConfig([
{
text: '使用説明',
icon: 'mdi:user',
link: '/ja-jp/manual/newbie.html',
},
{
text: '開発関連',
icon: 'ph:code-bold',
link: '/ja-jp/develop/development.html',
},
{
text: 'プロトコルドキュメント',
icon: 'basil:document-solid',
link: '/ja-jp/protocol/integration.html',
},
]);

View File

@@ -0,0 +1,19 @@
import { defineNavbarConfig } from 'vuepress-theme-plume';
export const kokrNavbar = defineNavbarConfig([
{
text: '사용자 설명서',
icon: 'mdi:user',
link: '/ko-kr/manual/newbie.html',
},
{
text: '개발 문서',
icon: 'ph:code-bold',
link: '/ko-kr/develop/development.html',
},
{
text: '프로토콜 문서',
icon: 'basil:document-solid',
link: '/ko-kr/protocol/integration.html',
},
]);

View File

@@ -0,0 +1,19 @@
import { defineNavbarConfig } from 'vuepress-theme-plume';
export const zhcnNavbar = defineNavbarConfig([
{
text: '用户手册',
icon: 'mdi:user',
link: '/zh-cn/manual/newbie.html',
},
{
text: '开发文档',
icon: 'ph:code-bold',
link: '/zh-cn/develop/development.html',
},
{
text: '协议文档',
icon: 'basil:document-solid',
link: '/zh-cn/protocol/integration.html',
},
]);

View File

@@ -0,0 +1,19 @@
import { defineNavbarConfig } from 'vuepress-theme-plume';
export const zhtwNavbar = defineNavbarConfig([
{
text: '用戶說明書',
icon: 'mdi:user',
link: '/zh-tw/manual/newbie.html',
},
{
text: '開發文件',
icon: 'ph:code-bold',
link: '/zh-tw/develop/development.html',
},
{
text: '協議文件',
icon: 'basil:document-solid',
link: '/zh-tw/protocol/integration.html',
},
]);

View File

@@ -1,29 +0,0 @@
import { SiteLocaleConfig, LocaleConfig } from 'vuepress'
import { ThemeLocaleData } from 'vuepress-theme-plume'
import { locales } from './i18n'
import { genNavigationComponents } from './genNavigationComponents'
export function genSiteLocales(): SiteLocaleConfig {
const siteLocales: SiteLocaleConfig = {}
for (const locale of locales) {
siteLocales[`/${locale.name}/`] = {
lang: locale.htmlLang,
title: locale.siteTitle,
description: locale.siteDescription,
}
}
return siteLocales
}
export function genThemeLocales(): LocaleConfig<ThemeLocaleData> {
const themeLocales: LocaleConfig<ThemeLocaleData> = {}
for (const locale of locales) {
const navigationComponents = genNavigationComponents(locale)
themeLocales[`/${locale.name}/`] = {
navbar: navigationComponents.navbar,
collections: navigationComponents.collections,
}
}
return themeLocales
}

View File

@@ -1,161 +0,0 @@
import * as fs from 'fs'
import * as path from 'path'
import { default as matter } from 'gray-matter'
import { ThemeCollectionItem, ThemeNavItem, ThemeSidebarItem } from 'vuepress-theme-plume'
import { Locale } from './i18n'
interface MetaData {
baseName: string
order: number
title: string
icon: string
index: boolean
}
interface NavigationComponents {
navbar: ThemeNavItem[]
collections: ThemeCollectionItem[]
}
type SidebarItem = ThemeSidebarItem | string
function getMetaData(dir: string, entry: fs.Dirent): MetaData | null {
const currentPath = path.join(dir, entry.name)
if (!fs.existsSync(currentPath)) {
return null
}
let mdFilePath = ''
if (entry.isDirectory()) {
mdFilePath = path.join(currentPath, 'README.md')
} else if (entry.isFile() && entry.name.endsWith('.md') && entry.name.toLowerCase() !== 'readme.md') {
mdFilePath = currentPath
} else {
return null
}
if (!fs.existsSync(mdFilePath)) {
return null
}
const fileContent = fs.readFileSync(mdFilePath, 'utf-8')
const meta = matter(fileContent).data ?? {}
// 文件名,不含扩展名
const baseName = path.parse(entry.name).name
// 获取顺序目录的order在meta.dir.order里文件的order在meta.order里默认值为一个大数
const order = Number((entry.isDirectory() ? meta?.dir?.order : meta?.order) ?? Number.MAX_SAFE_INTEGER)
// 获取标题先从matter里找title再用正则获取一级标题最后fallback到文件名不含扩展名
const title = String(meta?.title ?? RegExp('# (.+)').exec(fileContent)?.[1] ?? baseName)
// 获取图标
const icon = String(meta?.icon ?? '')
// 是否添加到索引文件永远为true目录则看meta.index默认true
const index = entry.isDirectory() ? (Boolean(meta?.index) ?? true) : true
return {
baseName: baseName,
order: order,
title: title,
icon: icon,
index: index,
}
}
function getSidebarItems(dir: string): SidebarItem[] {
interface WrappedSidebarItem {
sidebarItem: SidebarItem
order: number
}
const entries = fs.readdirSync(dir, { withFileTypes: true }).filter((e) => !e.name.startsWith('.'))
const sidebarItemsWithOrder: WrappedSidebarItem[] = []
for (const entry of entries) {
let sidebarItem: SidebarItem
const metaData = getMetaData(dir, entry)
if (!metaData) {
continue
}
if (entry.isDirectory()) {
const children = getSidebarItems(path.join(dir, entry.name))
// 可折叠的子目录
sidebarItem = {
text: metaData.title,
// 只有当目录设置了index: true时才生成链接否则点击时不跳转、只切换折叠状态
link: metaData.index ? `${metaData.baseName}/` : undefined,
icon: metaData.icon,
// 目前没有文档使用了badge这个特性故不处理
// badge: undefined,
collapsed: true,
// 前面不能加斜杠,必须用相对路径
prefix: `${metaData.baseName}/`,
items: children,
}
} else if (entry.isFile() && entry.name.endsWith('.md') && entry.name.toLowerCase() !== 'readme.md') {
// 普通文件,取完整文件名作为链接
sidebarItem = entry.name
}
sidebarItemsWithOrder.push({ sidebarItem: sidebarItem, order: metaData.order })
}
sidebarItemsWithOrder.sort((a, b) => a.order - b.order)
return sidebarItemsWithOrder.map((i) => i.sidebarItem)
}
export function genNavigationComponents(
locale: Locale,
baseDir = path.resolve(__dirname, '../../'),
): NavigationComponents {
interface WrappedNavigationComponent {
navItem: ThemeNavItem
collectionItem: ThemeCollectionItem
order: number
}
const navigationComponentsWithOrder: WrappedNavigationComponent[] = []
// 进入指定语言目录即docs/<i18n>/
const langDir = path.join(baseDir, locale.name)
// 获取所有非隐藏文件和目录
const entries = fs.readdirSync(langDir, { withFileTypes: true }).filter((e) => !e.name.startsWith('.'))
for (const entry of entries) {
if (!entry.isDirectory()) continue
const metaData = getMetaData(langDir, entry)
if (!metaData) {
continue
}
const navbarItem: ThemeNavItem = {
text: metaData.title,
icon: metaData.icon,
link: `/${locale.name}/${metaData.baseName}/`,
}
const collectionItem: ThemeCollectionItem = {
type: 'doc',
title: metaData.title,
dir: metaData.baseName,
linkPrefix: `/${metaData.baseName}/`,
sidebar: getSidebarItems(path.join(langDir, entry.name)),
}
navigationComponentsWithOrder.push({
navItem: navbarItem,
collectionItem: collectionItem,
order: metaData.order,
})
}
navigationComponentsWithOrder.sort((a, b) => a.order - b.order)
return {
navbar: navigationComponentsWithOrder.map((i) => i.navItem),
collections: navigationComponentsWithOrder.map((i) => i.collectionItem),
}
}

View File

@@ -1,45 +0,0 @@
export interface Locale {
name: string
// displayName: string
htmlLang: string
siteTitle: string
siteDescription: string
}
export const locales: Locale[] = [
{
name: 'zh-cn',
// displayName: '简体中文',
htmlLang: 'zh-CN',
siteTitle: 'MAA 文档站',
siteDescription: '文档',
},
{
name: 'zh-tw',
// displayName: '繁體中文',
htmlLang: 'zh-TW',
siteTitle: 'MAA 文件站',
siteDescription: '文件',
},
{
name: 'en-us',
// displayName: 'English',
htmlLang: 'en-US',
siteTitle: 'MAA Documentation Site',
siteDescription: 'Documentation',
},
{
name: 'ja-jp',
// displayName: '日本語',
htmlLang: 'ja-JP',
siteTitle: 'MAA ドキュメントサイト',
siteDescription: 'ドキュメント',
},
{
name: 'ko-kr',
// displayName: '한국어',
htmlLang: 'ko-KR',
siteTitle: 'MAA 문서 사이트',
siteDescription: '문서',
},
]

View File

@@ -0,0 +1,8 @@
import { defineNotesConfig } from 'vuepress-theme-plume';
import { genNotes } from './genSidebar';
export const enusNotes = defineNotesConfig({
dir: 'en-us',
link: '/en-us/',
notes: genNotes('en-us'),
});

View File

@@ -0,0 +1,119 @@
import * as fs from 'fs';
import * as path from 'path';
import * as matterModule from 'gray-matter';
import { defineNoteConfig, ThemeNote, ThemeSidebarItem } from 'vuepress-theme-plume';
const matter = (matterModule as any).default;
interface MetaData {
baseName: string;
order: number;
title: string;
icon: string;
index: boolean;
}
function getMetaData(dir: string, entry: fs.Dirent): MetaData | null {
const currentPath = path.join(dir, entry.name);
if (!fs.existsSync(currentPath)) {
return null;
}
let mdFilePath = '';
if (entry.isDirectory()) {
mdFilePath = path.join(currentPath, 'README.md');
} else if (entry.isFile() && entry.name.endsWith('.md') && entry.name.toLowerCase() !== 'readme.md') {
mdFilePath = currentPath;
} else {
return null;
}
if (!fs.existsSync(mdFilePath)) {
return null;
}
const fileContent = fs.readFileSync(mdFilePath, 'utf-8');
const meta = matter(fileContent).data ?? {};
const baseName = path.parse(entry.name).name;
// 获取顺序目录的order在meta.dir.order里文件的order在meta.order里默认值为一个大数
const order = Number((entry.isDirectory() ? meta?.dir?.order : meta?.order) ?? Number.MAX_SAFE_INTEGER);
// 获取标题先从matter里找title再用正则获取一级标题最后fallback到文件名不含扩展名
const title = String(meta?.title ?? RegExp('# (.+)').exec(fileContent)?.[1] ?? baseName);
// 获取图标
const icon = String(meta?.icon ?? '');
// 是否作为索引页文件永远为true目录则看meta.index默认true
const index = entry.isDirectory() ? (Boolean(meta?.index) ?? true) : true;
return {
baseName: baseName,
order: order,
title: title,
icon: icon,
index: index,
};
}
export function genNotes(lang: string, baseDir = path.resolve(__dirname, '../../')): ThemeNote[] {
// 进入指定语言目录即docs/<i18n>/
const langDir = path.join(baseDir, lang);
// 递归获取目录和文件
function getItems(dir: string, isRoot: boolean): any[] {
// 将内容与对应顺序进行包装
interface Wrapped {
content: ThemeNote | ThemeSidebarItem | string;
order: number;
}
let itemsWithOrder: Wrapped[] = [];
// 获取所有非隐藏文件和目录
const entries = fs.readdirSync(dir, { withFileTypes: true }).filter((e) => !e.name.startsWith('.'));
for (const entry of entries) {
const metaData = getMetaData(dir, entry);
if (!metaData) {
continue;
}
if (entry.isDirectory()) {
// 递归获取子目录内容
const children = getItems(path.join(dir, entry.name), false);
if (isRoot) {
// 一级目录,作为“专题”
const item = defineNoteConfig({
dir: metaData.baseName,
link: `/${metaData.baseName}/`,
text: metaData.title,
sidebar: children,
});
itemsWithOrder.push({ content: item, order: metaData.order });
} else {
// 非一级目录,作为可折叠的子目录
const item: ThemeSidebarItem = {
text: metaData.title,
// 只有当目录设置了index: true时才生成链接否则点击时不跳转、只切换折叠状态
link: metaData.index ? `${metaData.baseName}/` : undefined,
icon: metaData.icon,
// 目前没有文档使用了这个特性,故不处理
// badge: undefined,
collapsed: true,
// 前面不能加斜杠,必须用相对路径
prefix: `${metaData.baseName}/`,
items: children,
};
itemsWithOrder.push({ content: item, order: metaData.order });
}
} else if (entry.isFile() && entry.name.endsWith('.md') && entry.name.toLowerCase() !== 'readme.md') {
// 普通文件,取完整文件名作为链接
const item = entry.name;
itemsWithOrder.push({ content: item, order: metaData.order });
}
}
// 当前dir的内容读取完毕进行排序并返回返回时丢弃order
itemsWithOrder.sort((a, b) => a.order - b.order);
return itemsWithOrder.map((i) => i.content);
}
// 递归起点只有这里是一级目录isRoot传true
return getItems(langDir, true);
}

View File

@@ -0,0 +1,5 @@
export * from './zh-cn';
export * from './zh-tw';
export * from './en-us';
export * from './ja-jp';
export * from './ko-kr';

View File

@@ -0,0 +1,8 @@
import { defineNotesConfig } from 'vuepress-theme-plume';
import { genNotes } from './genSidebar';
export const jajpNotes = defineNotesConfig({
dir: 'ja-jp',
link: '/ja-jp/',
notes: genNotes('ja-jp'),
});

View File

@@ -0,0 +1,8 @@
import { defineNotesConfig } from 'vuepress-theme-plume';
import { genNotes } from './genSidebar';
export const kokrNotes = defineNotesConfig({
dir: 'ko-kr',
link: '/ko-kr/',
notes: genNotes('ko-kr'),
});

View File

@@ -0,0 +1,8 @@
import { defineNotesConfig } from 'vuepress-theme-plume';
import { genNotes } from './genSidebar';
export const zhcnNotes = defineNotesConfig({
dir: 'zh-cn',
link: '/zh-cn/',
notes: genNotes('zh-cn'),
});

View File

@@ -0,0 +1,8 @@
import { defineNotesConfig } from 'vuepress-theme-plume';
import { genNotes } from './genSidebar';
export const zhtwNotes = defineNotesConfig({
dir: 'zh-tw',
link: '/zh-tw/',
notes: genNotes('zh-tw'),
});

View File

@@ -1,90 +0,0 @@
const modules = import.meta.glob<string>('../../asciiArts/*.txt', { query: '?raw', import: 'default', eager: true })
const asciiArts: Record<string, string> = {}
for (const path in modules) {
const name = path
.split('/')
.pop()
?.replace(/\.txt$/, '')!
asciiArts[name] = modules[path]
}
export type ThemeType = 'auto' | 'disable' | string
export type AsciiArtScope = 'web' | 'console'
interface AsciiArtData {
name: string | null
text: string
}
function pickAsciiArt(
arts: Record<string, string>,
artFilter?: (key: string) => boolean,
keyToName?: (key: string) => string,
): AsciiArtData {
const keys = artFilter ? Object.keys(arts).filter(artFilter) : Object.keys(arts)
let asciiArtKey: string | null
let asciiArtText: string
if (keys.length === 0) {
asciiArtKey = null
asciiArtText = ''
} else if (keys.length === 1) {
asciiArtKey = keys[0]
asciiArtText = arts[keys[0]]
} else {
const randomKey = keys[Math.floor(Math.random() * keys.length)]
asciiArtKey = randomKey
asciiArtText = arts[randomKey]
}
if (!asciiArtKey || !keyToName) {
return { name: asciiArtKey, text: asciiArtText }
} else {
return { name: keyToName(asciiArtKey), text: asciiArtText }
}
}
export function getAsciiArt(name?: string, theme: ThemeType = 'auto', scope: AsciiArtScope = 'web'): AsciiArtData {
let resolvedTheme: ThemeType = theme
// auto 模式
if (theme === 'auto') {
let currentTheme: string | null = null
if (scope === 'web' && typeof document !== 'undefined') {
// 浏览器中读取 HTML data-theme
currentTheme = document?.documentElement?.getAttribute('data-theme')
} else if (scope === 'console' && typeof window !== 'undefined' && window.matchMedia) {
// fallback: 检查系统首选主题
currentTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
}
resolvedTheme = currentTheme ? currentTheme : 'disable'
}
if (resolvedTheme !== 'disable') {
// light/dark/... 模式
return name
? pickAsciiArt(
asciiArts,
(k) => k === name + '.' + resolvedTheme,
() => name,
)
: pickAsciiArt(
asciiArts,
(k) => k.endsWith('.' + resolvedTheme),
(k) => k.replace(new RegExp('\\.' + resolvedTheme + '$'), ''),
)
} else {
// disable 模式
return name
? pickAsciiArt(
asciiArts,
(k) => k === name || k.startsWith(name + '.'),
() => name,
)
: pickAsciiArt(
asciiArts,
() => true,
(k) => k,
)
}
}

View File

@@ -81,4 +81,4 @@ export default {
},
},
},
}
};

View File

@@ -1,5 +1,6 @@
import { defineThemeConfig } from 'vuepress-theme-plume'
import { genThemeLocales } from './navigation/genLocales'
import { defineThemeConfig } from 'vuepress-theme-plume';
import { zhcnNavbar, zhtwNavbar, enusNavbar, jajpNavbar, kokrNavbar } from './navbar';
import { zhcnNotes, zhtwNotes, enusNotes, jajpNotes, kokrNotes } from './notes';
export default defineThemeConfig({
logo: '/images/maa-logo_512x512.png',
@@ -24,7 +25,28 @@ export default defineThemeConfig({
footer: false,
locales: genThemeLocales(),
locales: {
'/zh-cn/': {
navbar: zhcnNavbar,
notes: zhcnNotes,
},
'/zh-tw/': {
navbar: zhtwNavbar,
notes: zhtwNotes,
},
'/en-us/': {
navbar: enusNavbar,
notes: enusNotes,
},
'/ja-jp/': {
navbar: jajpNavbar,
notes: jajpNotes,
},
'/ko-kr/': {
navbar: kokrNavbar,
notes: kokrNotes,
},
},
autoFrontmatter: false,
@@ -104,4 +126,4 @@ export default defineThemeConfig({
// },
// ],
//},
})
});

View File

@@ -1,14 +1,74 @@
---
pageLayout: home
home: true
pageInfo: false
breadcrumb: false
navbar: false
config:
- type: custom
sidebar: false
index: false
lastUpdated: false
editLink: false
contributors: false
prev: false
next: false
---
# Ciallo (∠・ω< )⌒★
!: .7:~!.
:. :?55 ?5~::~J?:
:P5YY?7~: .!JYYJG. 7P! .7Y!.
^5JJJY55PPG5!. .?JYYJYG. ~P?. ~YJ: :PY~.
^5YYYYYYY5PPPPYJ??7!!~^!?YYYYY5 :5Y. :J5!. :G&#5^
~PY5555555PPPGGPPPPPPPPJ5YJYPP???5?57::.. !5J: Y&##P:
^YPP5JJY5555PPGG55PP555PGPPPGGPPP555555555YYYJJ?77!~^::...~5P^:. P####7
!GPPJ?JYYYYY5P5PPG57:...:!5GG?~!?JJY55PPPPPPPPPPP555555555YJYPYY57!~^::... .#####!
.?PY?YYYYYYY5PP5G?..:!??JYYPYY7. .....:^~!?JJYY5PPPPPPPP555555555555YYYJJ?77!!B####P
.5Y5YYYYYY555PGY.!?JYJJYJ5P:.?5^...:.::^~^^:::... ....::::~!!7?J5P55PPPPPPPP5P55PPGG###P
.:~?P5555PPPPGY:J77YYJY55Y: ..Y5?Y5PPGGBBBBGGGGP555J!^. ^~...^!77YY5G5::~:.:!5#G
^5555PPPG5?.~5JYYYYY7: :~?5PPG5BBBBB########BBB####BGY7~~^:..:: .:^!~^~?Y7~. ~J7Y
P55PPPGY~...?5?~^:...:75PPGP5PG#####BGBBBBBBBBBB######BGGP5YJ???7!7JY?!!?YYYJYJ^^GJ..
.!?P5YPB^ ....... :!J5PGB#######BBGY7~!!7?PYJJ7!5GB#######BBGPYYYYYJJYYYYY55GB##5^...
75YYPG... .::::JPGB####BGPP55J5?^~~~~~~~~~~!!!?PGGBBBB#####GGBBBBBB##########&G^^~
Y5YYGY... ..:^7PBB#####GPJ!~~~^~?!~~~~~~~~~~~~!!J7!7?JPG###&###############&&&&#5~
.PYY5B!... ..^YBBBB####GPJ~~~~~~~?J!~~~^^~~^^~~^^~!!::^75GB####&&&&&&&&&&&&&&##BG5
^PYY5G:... .^^PB#B###GP5JJ7~~~~~~~!7?~~~^..^:^~~~!~~~!~^~~5JJ555G##&&&&&&&#BBBGGPB!
?5YYPP......:Y######G?!~!!~~~~~~~~~~!7^^^^:^~~~~~~!7~~!~^~~~~~!7?YGB###P77!:JGGGGB:
5YYYGJ..... 7#B####GP!^~!~~~~~~^::!~~!~^^~~~~!~~~~~!J!~7!^~~~~~~!?Y5GPPPP5!^PGGGGP
.7 .PYY5B^..:::^GBB####PP!^7!^^~~~^^:^7~~~!^~~~~~~7~!~~~?5J?J7:~~~~~~~!?YY5YY55PPPGGGP~^:
^5 ~PYYPG...:.!PP#####G5J!:?!^^~~~~~~~!~~~~^~~~~~!J7!??!!J!!JY~^~~~~~~~7?Y5YY55PPGGGGGB#P
^G J5YYGY ..:!5YB####G5!^~~?!~~~!~~~~~~~~~~~~~~~!!77..~7^7~ .:7^~~~~!!~JGPPGGGBGB#####GY^
^&! 5YY5B! ^J5YGB###B5!^~~~?7~~~!7~~^??!~~~!~~~~~~!! :77!.::~!^~~~7!~!Y#########BBP.
^&#~ :PYY5B:.!YYJG#####GG!~~~~7?~~~?J~7?P57~~~!7~~~!~7:..:~5PGBJ~^!^~~!J~~!7P##B###BGGG7
^&##Y^. ?P5PGGJYYYYPB#####BG!~~~~~J!~!55?7?!~J?!!77!777?::JPBBGP5J~ .!~~7J!~~!7YGG5BBGGGGB:
^&###BG555YYYY5GBBB#B#####GGJ~~~~^7775?J~!!. .~??J?7??J7..!:7?7YY~7.^!~?J!~~!!7JP55PBGGGGG
^&######BBBBB##########&#B5?!~~~~^~55~.7!~ .:~!7Y?J?!!~. :!~^~~.:^.??!!!7??YP5PPBGGGGY
^&###################&##PY7~~!~~~~:?~ ^7:.^?5GBG7?!:. ... .:.:J????JY?5P57^:^75B!
.G&&&############&&&###GYJ?~~7~~~~~:!:.!YBBBGP5J^ :?JJJJJYGPG!. .. .5:
!G#&&&&&&&&&&&&#B5?GGGY5?~~~~~~~~~^755^~Y??57~!. :!J55YYY55GGPY .. !.
.~YBBBB#GYJ?77~7BBP55P7~7!~!77~~~~~~~^^^!~^~! .. ^?PGGGGGGG#BP7 !.
^5YY5G^ ..!GP55555?YP5!~~!77!!7?J~. .^:. .. .^5#57GPBBBBBBP. ....:Y~
J5YYPP:...:7GP55555GP5G#P!~~~~!!!7?!:^:...:^: .^J?5GP:.YPY7JJGB#Y .:~YGB.
5YYYGJ:::^YGGY:?P5G#BB##B57!77777777???JJJYY: ..:~!!YP7YYP^ ??7~7?5BBBJ~!5GG5
:PYY5B!:^JGGPGBJ5G#####PJGPPJ5Y????JJJJJYY5PY?YYY??JJJ?7~!~JBG: !??~!?YBBB#BGGGB7
!5YYPG5GGGGB###?B###BB?!JG555PPYJ?77JYPP5GP57!J5G5YGGPY?!:~BP~^. .7J?~~?JBBB#5Y5GB:
Y5YY5Y5P5555^!PJPJ^?GGJYGPPGG!. .!Y55Y5Y: ..:~7J555JPPY!P~.~YJ?~~7JG#BBYYYPG
^7?JJYYYY5557:.^^:7PPY55YY5P7 :. !PPPBP^... .J!5B5BB57JYP7?~~!J5B#GYYYGY
...^J!~^.^JG55PPPPPGJ... . ~BP55PYJJJ?7~~^?5PGBBBGGPGGJ!^^~JYBBPYY5B!
^^^:.:::?. ...:^~~~~^^::~!.:PGGPPPP5555555555555555PPPGP??7?YYBB5YY5B.
...::^~!7?JYY5PPPPPPPP55555YYY555555555YYPP
...:^~!7??JY555PPPPP55555BJ
...:^^~!7?Y^
. . . . .
7^.::?7:^: :7?:...P:. :~~~7P~~~^. :Y ^~~G!~~. :J?:^.?^^5 !! Y^ :Y.. ~~~^~Y!^~~: :P. :^^^JY .7~!.!~::5.
.:. ~^ 7? :YJ.77.P:~? Y~~7P~~J: ~7J^~!!P7!!.::JY?J:Y ?^ ^G..5~:P^!J .YJ Y7^Y Y^ :? 5 Y. P
Y: :JY? .GY^?!.P.~? :!!~?P~~?7 .^? !?!!!7? .7YJ~~ Y ^7.~Y.!7!!!~7: :7!~Y.!!^ 5 ~7^^!G^^::? 5 7~^~?J
Y^ ^~^.~! 7?!.::.P::: ~!!~?P!!J5. .J JJ!!~7P .57:^P Y: Y^ J.5 !7 PY 7~ :5 ^^ .YP: P :5~5:^^^^.P
!!~7!^:::!~ ~! Y .~?7 .. .? ?^ .~!J ?7^~5 J::. J.7::^7^~! :5 .!: : :~J ^^!?
.
<!-- Use a Random Ascii Art -->
<AsciiArt theme="auto" />
<!-- Use a specific Ascii Art -->
<!-- <AsciiArt name="maa-logo-with-endorsement" theme="disable" /> -->
<!-- markdownlint-disable-file -->

View File

@@ -1,59 +0,0 @@
!: .7:~!.
:. :?55 ?5~::~J?:
:P5YY?7~: .!JYYJG. 7P! .7Y!.
^5JJJY55PPG5!. .?JYYJYG. ~P?. ~YJ: :PY~.
^5YYYYYYY5PPPPYJ??7!!~^!?YYYYY5 :5Y. :J5!. :G&#5^
~PY5555555PPPGGPPPPPPPPJ5YJYPP???5?57::.. !5J: Y&##P:
^YPP5JJY5555PPGG55PP555PGPPPGGPPP555555555YYYJJ?77!~^::...~5P^:. P####7
!GPPJ?JYYYYY5P5PPG57:...:!5GG?~!?JJY55PPPPPPPPPPP555555555YJYPYY57!~^::... .#####!
.?PY?YYYYYYY5PP5G?..:!??JYYPYY7. .....:^~!?JJYY5PPPPPPPP555555555555YYYJJ?77!!B####P
.5Y5YYYYYY555PGY.!?JYJJYJ5P:.?5^...:.::^~^^:::... ....::::~!!7?J5P55PPPPPPPP5P55PPGG###P
.:~?P5555PPPPGY:J77YYJY55Y: ..Y5?Y5PPGGBBBBGGGGP555J!^. ^~...^!77YY5G5::~:.:!5#G
^5555PPPG5?.~5JYYYYY7: :~?5PPG5BBBBB########BBB####BGY7~~^:..:: .:^!~^~?Y7~. ~J7Y
P55PPPGY~...?5?~^:...:75PPGP5PG#####BGBBBBBBBBBB######BGGP5YJ???7!7JY?!!?YYYJYJ^^GJ..
.!?P5YPB^ ....... :!J5PGB#######BBGY7~!!7?PYJJ7!5GB#######BBGPYYYYYJJYYYYY55GB##5^...
75YYPG... .::::JPGB####BGPP55J5?^~~~~~~~~~~!!!?PGGBBBB#####GGBBBBBB##########&G^^~
Y5YYGY... ..:^7PBB#####GPJ!~~~^~?!~~~~~~~~~~~~!!J7!7?JPG###&###############&&&&#5~
.PYY5B!... ..^YBBBB####GPJ~~~~~~~?J!~~~^^~~^^~~^^~!!::^75GB####&&&&&&&&&&&&&&##BG5
^PYY5G:... .^^PB#B###GP5JJ7~~~~~~~!7?~~~^..^:^~~~!~~~!~^~~5JJ555G##&&&&&&&#BBBGGPB!
?5YYPP......:Y######G?!~!!~~~~~~~~~~!7^^^^:^~~~~~~!7~~!~^~~~~~!7?YGB###P77!:JGGGGB:
5YYYGJ..... 7#B####GP!^~!~~~~~~^::!~~!~^^~~~~!~~~~~!J!~7!^~~~~~~!?Y5GPPPP5!^PGGGGP
.7 .PYY5B^..:::^GBB####PP!^7!^^~~~^^:^7~~~!^~~~~~~7~!~~~?5J?J7:~~~~~~~!?YY5YY55PPPGGGP~^:
^5 ~PYYPG...:.!PP#####G5J!:?!^^~~~~~~~!~~~~^~~~~~!J7!??!!J!!JY~^~~~~~~~7?Y5YY55PPGGGGGB#P
^G J5YYGY ..:!5YB####G5!^~~?!~~~!~~~~~~~~~~~~~~~!!77..~7^7~ .:7^~~~~!!~JGPPGGGBGB#####GY^
^&! 5YY5B! ^J5YGB###B5!^~~~?7~~~!7~~^??!~~~!~~~~~~!! :77!.::~!^~~~7!~!Y#########BBP.
^&#~ :PYY5B:.!YYJG#####GG!~~~~7?~~~?J~7?P57~~~!7~~~!~7:..:~5PGBJ~^!^~~!J~~!7P##B###BGGG7
^&##Y^. ?P5PGGJYYYYPB#####BG!~~~~~J!~!55?7?!~J?!!77!777?::JPBBGP5J~ .!~~7J!~~!7YGG5BBGGGGB:
^&###BG555YYYY5GBBB#B#####GGJ~~~~^7775?J~!!. .~??J?7??J7..!:7?7YY~7.^!~?J!~~!!7JP55PBGGGGG
^&######BBBBB##########&#B5?!~~~~^~55~.7!~ .:~!7Y?J?!!~. :!~^~~.:^.??!!!7??YP5PPBGGGGY
^&###################&##PY7~~!~~~~:?~ ^7:.^?5GBG7?!:. ... .:.:J????JY?5P57^:^75B!
.G&&&############&&&###GYJ?~~7~~~~~:!:.!YBBBGP5J^ :?JJJJJYGPG!. .. .5:
!G#&&&&&&&&&&&&#B5?GGGY5?~~~~~~~~~^755^~Y??57~!. :!J55YYY55GGPY .. !.
.~YBBBB#GYJ?77~7BBP55P7~7!~!77~~~~~~~^^^!~^~! .. ^?PGGGGGGG#BP7 !.
^5YY5G^ ..!GP55555?YP5!~~!77!!7?J~. .^:. .. .^5#57GPBBBBBBP. ....:Y~
J5YYPP:...:7GP55555GP5G#P!~~~~!!!7?!:^:...:^: .^J?5GP:.YPY7JJGB#Y .:~YGB.
5YYYGJ:::^YGGY:?P5G#BB##B57!77777777???JJJYY: ..:~!!YP7YYP^ ??7~7?5BBBJ~!5GG5
:PYY5B!:^JGGPGBJ5G#####PJGPPJ5Y????JJJJJYY5PY?YYY??JJJ?7~!~JBG: !??~!?YBBB#BGGGB7
!5YYPG5GGGGB###?B###BB?!JG555PPYJ?77JYPP5GP57!J5G5YGGPY?!:~BP~^. .7J?~~?JBBB#5Y5GB:
Y5YY5Y5P5555^!PJPJ^?GGJYGPPGG!. .!Y55Y5Y: ..:~7J555JPPY!P~.~YJ?~~7JG#BBYYYPG
^7?JJYYYY5557:.^^:7PPY55YY5P7 :. !PPPBP^... .J!5B5BB57JYP7?~~!J5B#GYYYGY
...^J!~^.^JG55PPPPPGJ... . ~BP55PYJJJ?7~~^?5PGBBBGGPGGJ!^^~JYBBPYY5B!
^^^:.:::?. ...:^~~~~^^::~!.:PGGPPPP5555555555555555PPPGP??7?YYBB5YY5B.
...::^~!7?JYY5PPPPPPPP55555YYY555555555YYPP
...:^~!7??JY555PPPPP55555BJ
...:^^~!7?Y^
. . . . .
7^.::?7:^: :7?:...P:. :~~~7P~~~^. :Y ^~~G!~~. :J?:^.?^^5 !! Y^ :Y.. ~~~^~Y!^~~: :P. :^^^JY .7~!.!~::5.
.:. ~^ 7? :YJ.77.P:~? Y~~7P~~J: ~7J^~!!P7!!.::JY?J:Y ?^ ^G..5~:P^!J .YJ Y7^Y Y^ :? 5 Y. P
Y: :JY? .GY^?!.P.~? :!!~?P~~?7 .^? !?!!!7? .7YJ~~ Y ^7.~Y.!7!!!~7: :7!~Y.!!^ 5 ~7^^!G^^::? 5 7~^~?J
Y^ ^~^.~! 7?!.::.P::: ~!!~?P!!J5. .J JJ!!~7P .57:^P Y: Y^ J.5 !7 PY 7~ :5 ^^ .YP: P :5~5:^^^^.P
!!~7!^:::!~ ~! Y .~?7 .. .? ?^ .~!J ?7^~5 J::. J.7::^7^~! :5 .!: : :~J ^^!?
.

View File

@@ -1,72 +0,0 @@
. ,:.
;, .,NNd'.
. 'cl:. .' ..
;;'... ,clllc. .' ..
.,cll;::;,'. .loclllc. .'. '.
.;lolllccc::;;,. .olccclcc. ., '. ...
:ccccccccc:::;,.. locccllcc. '' .,. .....
ccccccccccc:::;;::::;;,,'...xlccclcc: ''. '. .....
.cccccc:::::::::,;;;;:::ccc:llc:clcc''....lkx. ,. ......
';::;:cc:;::;;;;;,;::::;;;::,c::cc:,:ccccc::;;;,''.... ,. .......
,:::;odlcccc::::;;';:::::;;::;,;:;;,;::cccccccccccccccc::;;;,''.... .'';. .......
,:::;dlcccccccc:::;,;::;:d00Oxoc;,';;,,,,,;;;;;:::::cccccccccccccccc::;;;,'.',dx:. .......
.:::;dolcccccccc:::::;,lONNNNNKOkl;;:kXXKOkkxdolc::;,,,,;;;:::::::ccccccccccccccc:::;;,''.... .......
;;lolccccccccc:::::;kNNNOdlc:::cc;l;lXNNNNNNNNNXWWNXKOkxdoc:;;,,,,;;;;:::::ccccccccccccccccc:::;;,'......'.....
:occccccccccc::::;:NKdl:llllcccc,KO;:O0KXXNNNNNWNNNWWWWWWNXNNXKOdollccc:;,,,,;;;;::::::ccccccccccccccc:.;.....
,lcccccccccc:::::;;O0:odllllllll;lNNO;;0KKK000OkxooooddxxO0XNNNK0KXNNNNWWNX0Okxdoc;;;,,,,,;;;::::::;c:;;':.....
.::ccccc:::::;;,xO:xxoccllllc;cXNNNk;okdlc:,,;;;;,;;;;,,',;:ldx0NNNNNMWNNNNNNNN0x0XXKkdlcl:;;;,,c0OOok0xl,...
';::::;;;;;;;kKoloocllllc;:kNNNKkd,;,;:;;;;;,'''.'',,,;;;;;,'',:oxKNNNNKKXNNXkkKNNNKKkkxddxdo,XOOOXWNNNXd;.
:ccc::::::::dNN;lllll:;:oONN0Oxc;:,:'c,,,,'''..........''...'...''':lddkOKXXX00XNNXNKKkxdxxxdccoxXNNNNKclO;
'cc:::::;;;oK0X0;c::cod0XKXNKo;:c:;oolo'.......''....''........''..',;:cc:cclodxk0KNKOdodOKKOcc;:::oKN0;.;O0
;c;;;;;,'oXXNXN0;lxKNNXXXKXd::c:;,,',,......',,c;,,;;;;;;,,;;''.....'''',;:clolc:::c:c:;clc::cloool:,o0cckXN
.:ccc;'ONNNKXNNXXXXNX0Od::c;,''''.....''';;:dxxxdol:,::coxx;;,.......'''''',:ccloooooooooooollc:,...;K0XN0
,cccc;'XXNNNNNN00XO0NOc;c;'.....',',,,,;;;okkkkkkkkxoxxdddkkc:;'........'...'::;;;;:::;;;,,,'........,0K0O
;ccc:;;XXXNNNNNX00O0x;:;'......;';;::ccolckkkkkkkkkkkkkkkxodxo;;;;;,,,'......,,.......................;OO,
:ccc:,lXKXXNNNXK0Oko,:'.'.....'c,odxxkkkkoxkkkkkkkkkkkkkkkkdodcoolc::;c'...............................o.
.cccc;,xXKXXNNXKKOOl;,'''.....';;lxkkkkkkklldkkkkkkkkkkkkkkkk0xoxkOOkxo,:'............................''.
'cccc;'0XXXXNNXKKOo,,.'''...'',:lkkkkkkkkkdoldkkkkkOkkkOkkkkkOOkddkKKOxo;:,..........................';,
,cccc;,XXXXXNNKK0l''''''...';;::lxkkkkkkkkxoolkkkkOXKOkKKkkkkxkkkxdxO0kkx,;;;,,,,..................,;;;'
;ccc:,cNXXXXNXxkd.,''...';::coxdxkkkkkkkkkkddodOkkO0XXOkOkkkkkdxkkkdxOkkklxxdlccc:''..........,:l';;;;;'
:ccc:,xXXXXXNX0O;',..'...:ldkkddkkkkkkkkkkkkkxoOk0Ok0KOkkkkkkkkddkkkdk0kkkkkkkxoooc,'....,odxok0x';;;;;.
.cccc;'0XXKKXNXXx''..'..',cdkkkxkkkkkkkkkOOxkkkxxOOOkkkkkkkkkkkkkooxkxox0kkkkkkkkxool;;;,'';loxX0l,;;;;,.
'cccc;'XXXKKKNN0''''.'..'::xkkokkkkkkkkkkKKdxkkko0kOkkkkkkdkkkkkkkloxkdokOkkkkkkkkxocl:;::;;;,cxk:,;;;;,
,ccc:;:XXKKK0XN:;'''...',:ckkklkkkkkkkk0OK0dxkkkdkOkkkkkkkoxkkkkkkx:lodolkOkkkkkkkkkdlcclcccccc:;,,,,,,'.
. ;ccc:,dXXKKKkkx,,'''...':,;o0klkO0kkkkkkkkkdxkkkkx0kkkkkkkkoOddxdddcc:lllcKkkkkkkkkkkkdlc::ccc::::::::;;,,,,
. .cccc:,ONXKKK0d'c'''...',c:dx0xlkkkkkkkkkkkkdkkkkkk0kkkkkkxdcddo:ddxd:kxccld0kkkkkkkkxxolc::ccc::;:,;;;;;,,,,
. .cccc;'NNXKKK0;c:''...';;:kkkkxoxkkkkxkkkkkkxkkkkkkOkkkkkdoolkKXOlkkkcOXXko:0kkkkkkxkkd:cccc::::;;;'.........
.. ,ccc:;;WNXK0k::l'''...,,ckkkkkdoxkkkkxkkkkkkxkkkkkkkkkkkkkkkdoXNN0ckkoxXNNN0xOkkkkkdxkxc',,;''''''........
.. ;ccc:;lWNXKk;cl,''...',ldkkkkkdodkkkkxdkkkkxoxkkkkkxkkkkkkkkxoNNNNKlkoxNNNNNo0kkkkkoxkxd:''.........'''.
... :ccc;,xNNXl;ll:'''...,,cdkkkkkxldkkkkdokkkkl:cxkkkkxxxxkxxkkd0NNNNN0lcllc::lc0kkkkxlkkxxd,.........';;;.
.... .cccc;,ONk:colc,'.....';,xkkkkkkcdkkkklckkoc;:oxkkkxxdxxxxxxxoNK0K0xl,;'':kKNx0kkkkookxxxdc'......',;;;;
...'. 'ccc:;'l:clll:;........;'xkkkkk0cdxkkx::dcoxckcldkxxxdxxxxddlOk0d:''',;:ccXWNxOkkkocxkxxxdl,':l';';;;;;,
....',....';,,,,:lll:::;';.......:'kkkkkkOooxkxoc:lkkcOKOlcodxdddddddlxXX;'',;:::cdxOWWxkkkolokkxxxoo,:;:',';;;;;,
.....',:ccccllllc:;,'''..'......'c':kkkkkkOodxo;ockkddXNNXOocooooooolc0WNdOXlodl:;xxxWXdkxlloxxxxxdoo;:::;,';;;;;'
........',;;;;,''''.............:;ldkkkkkk0olc;x0ckxdNNNXK00xdccoollooco0WWWNkxxxOOkoNxdOKloxxxxddooo,::::;,;;;;;.
............'.................',,dxxkkkkkk0d:;kXKoxoXNNNKKOxdkOlocoxxkOKNWWWWNkdkkdxKNXK0Nldddddooooo,c:::,,;;;;;
..............................;clxxkxkkkkkkKckKXkoxNNXOo:''';l,lxKNWWWWWWWWWWWWX00KNNNdXK0cooooolllol;c;:xxkxl,;,
.............................'lolxxxdxkkkkkOOdNNxONOl,''',,;OWOXWWWWWNNNNNNWWWWNNNNNNXXXXoollllllc,o::ckNNNNNN0:'
...........................',locxxxxdkkkkkk0xdXNx:'',;;::colKWWWWWNNNNNNNNNWWNNNNNNNNNXdllllllll;;,,cXWWNX00NNK.
......................'o:,;,ll:xkkkkkkkkkkkOko:,lk::cl::lxxkWWWWWNNNNNNNNWWWNNNNNNNKdccccccllc;;::,KWWNNNNXNNX.
................':okc';,,cc:xkkxkxdkkkkkkklloNW0lxxdoOkkdWWWWWNNNNNNWWWWWWWWWN0o::::cccc:;;,',c:WWWNNNNNNNN:
.'.....';clodkkkc'',:cc:lxkxxkkxldkkkkkkkxod0KkxxO0OdkWWWWWWNWWWWWNNWWWWWWWKdl:;;;;,,,:;''':lWWNNNNNNNNN,
;cccc;:0NNNKOkkx';::::c;dxd:ckkkkoodxkkkkkxdckNOxdddONNWWWWWWWWWNOOXWWWWWWWWNx,',,':,'''',,;;NWNNNNNNNKd
:ccc:,oKNNNNXXx,;::::c:;lc;:;oxkkkxxddddoc;xXNNNXXXNNNNNNNNWWWWWNNWWWWWWWWNk:'':kO,:,,,,'''''oNXNNNNX0:.
.cccc;'kKNXXK0O,;;::::cc;;:c;''oxkxxkkkxxxxlckXK0XKXXXNX0NNNNWWWWWWWWWWWN0o:l;;'xK0;;:ldolc''''0XOOkd:;,
'cccc;,kO0O0Ox,;;:o:::cc,':,'..,dxxxxxxxxdxxxolodxkkxdoloNNNWWWWWWWWWNKko,,x:l;:KXXcoodkool,'''kNNK0:,;,
,cccc;;OO000x,;;,kNk;::'......',;ddddddddddddddddllccllcKWWWWWWWWN0kxddo,ckl;o,ONNNcoodkooo,''''oxkc,;;'
:ccc:;c000Oc,;;;;;o::;.......;,;::docdddooooooolllllcc;dOOOOOOkoc:;::cddkkx,,:xNNNXooodkdoo;'''''';;;;;.
.cccc:,oOko;,;;;,'.d,,......,ld;;::;c,:cloooolllccccc:;:;;'''';olcodkkkOxOd;;'oNNNNXxoodkxoo;''''.::;;;;.
'cccc;,:,,;;;,,'..'d''...'':ddd':::::;c:,;cllc:cc::;;::lxxl:;';oc;',:ldk0Nc'':0kNNNKolodkkoo:''''.ccc;;;
,cccc;::,,,,,,',,''d..';,:,odd:;:::,c:dOXNWWWN0x;,:l':c:OXXXK0xoc;'''';'.d:;lXX:oNN0llodkkool'''''cccc;,
;cccccccccccccoNKd:o:o0Nd',;::,;;;,'cKWWWWWWWWWWXdc,lc:;;kXNNNNNXK0kxllld:;:':;,kKkocllxkkdol,.'',ccc:;'
,;:::ccccccccckNN0dkWXd;;ccccccc::,KNNNNNNNNNNOKWNc:::;,:OXNXNNNNNNNdx0k,.;,';dxcd;:dckkkxol;'.';ccc:;'
',:ONNKk:,;;:cccccccccNNNNNNNNNNNkKNWo,,;;,'oxOKKXXNNNNK:;;;,c,''';o;:;klkkkkolc,'.:ccc:;.
,kOxkNNO:. .,,,;;;:;;0NNXXXNNNNNKNNWl;;ccccc::::cclodxdoo:,;',';;,;,;,olkkkkolc,,'cccc:,
'XKl dXX: .:kKXXXXNK0NNK;;;ccccccccccccccccc::;;;;,;;;,,,,;xkkkkllc,,,cccc;,
ox;,,,,;;;::::::ccccccccccccccccccc::;::ccc::;'',cccc;'
.,,,,;;;;::::cccccccccccccccccccc::c:ccc;.
.,,;;;::::::cccccccccc:cc:,
.,,;;;:::::cc;,
..,'

View File

@@ -1,72 +0,0 @@
xX XkdKx
kxk: cKk :kKd
lXK .NOoldx .XO' xK0
cxxO0KXN0 Okolllok l0x xK0
kXkollxddxkOKk Klcolllok XOc OKO d'
xxlcllloooddxxkKx Oclooolook ;Kk. OKO x0KNl
.dooooooooodddxkKXNNNNXl. lcooollooc KOd ,kKx :000KK
,ooooooooooodddxxddddxxkkO00K;looolood' .NOO: OKN O000Kx
loooooodddddddddkxxxxdddooodllodolooOO0KKKl,;0d. 'k0O .00000X.
cOxddxdoodxddxxxxxkxddddxxxddkoddoodkdoooooddxxxkOO0KXXNNWK; 'kKO l00000K'
dkdddxc:looooddddxxOxdddddxxddxkxdxxkxddooooooooooooooooddxxxkOO0KXXNNWO' cOOxK; 0000000
okdddx:loooooooodddxkxddxd:..';coxkOxxkkkkkxxxxxdddddooooooooooooooooddxxxkO0Ok:;d0Nd. c000000x
;dddx:cloooooooodddddxkl' .',lxxd,...',,;:cloddxkkkkxxxdddddddooooooooooooooodddxxkOO00KXNNNWKc .0000000
xxlclooooooooodddddx, ':lodddooxlxl. . ..',;:codxxkkkkxxxxdddddooooooooooooooooodddxxkO00KXK0O00000
cdcoooooooooooddddxd .:ldllllooook.'xd'.... . ..':cllooodxkkkkxxxxddddddoooooooooooooood0x00000
;kloooooooooodddddxx'.dc:llllllllxl 'xx.......',;cccc::;;'.. .... ..',;:coxxxkkkkkxxxddddddxodxxOd00000
:ddooooodddddxxk;'d;;coolllloxo. ,xc,:lodkkxxxxkxxxxkkOkxdl:;. .;....,:loldxxxkko.''c,.;lk000
Oxddddxxxxxxx,.clccolllloxd, .,:kxkxdxxxxxkOOO0OOkkkxxxxxkOOkdc;. ... .,,. ..,,;::;:ck.'''. .:x0
ddooodddddddd: xllllldxdc' .';oxdkdOokkkkOOO0000000000OO000O000OOOdl::,'....... . ..,;:;;;:ooc;. .ol'x
.Ooodddddxxxc....xoddoc:.... .cxdodxcclcO0000000OO0000OO00000000OO00Okxdoodoolc:;,.. .':c:'..'ooxdddc. .x0x'.
,xoxxxxxkOc.. . .xl;. .....:ddodxkkOkk000000OkkoxkkxxxxxxkkxxOO00000OOOOkxdolclodddododxoloddolcccldkc.oo,.
0doooxO' .. .... ..':ddoxkOOOO00000OOOxxd:;;;:cldkddoc;;xxk0000000OOOOOOkdoolccccccccccccllodk000x... .
.kooooxO.. ...'. 'oxoxO00000OkOkkkkxxxc,,,,,,,,;c;;:::,,odxO00000000O000OddxxxxdddxxxkkkO00000000k...'
;xooodxx... ...'.;xdxO000000xOxxddooclo,,,,,,,,,,,,,,,;c:;cxxxxxkkkO000000kk00000000000000000000000x'':
ldooodkl.... ...',ckdO0O00000Ookc:;;,,,,c;,,,,,,,,,,,,,,,,:c:occloddxoO0000000000000000000000000KKKK00c'
xooooxk;.... ...''lxkOOO00000Oxxl;,,,,,,,ll:,,,,,,,,,,,,,,,,.;c;,'',;ckdO000KKKKKK0000000000000KKKKK0OOx
kooooxO..... ...'ckk0OOO000OOkdl,,,,,,,,,:cl:,,,,,',,,',,,,,'',::,..';cxdk00000KKKKKKKKKKKKKKKKKKKK0Oxkc
.kooooxk..... ...lOOOOOO000Oxxddl;,,,,,,,,;ccl,,,,'..',..,,,,;,,,;:;'.,,;kxxxkkkk0KKKKKKKKKKKKKKKK0kxxxO'
;xooodko .... .;,:0kOO000Oxddoc;:;,,,,,,,,,,::c:',,'...',',,,,,:;,,,:;',,,l;;:looodOO0KKKKKKKK0kdlOxxxxxO
odooodk;..... ..'xOk00O000dl:,,::,,,,,,,,,,,,,;c',.',..',,,,,,,,::,,,:,.,,,,,,,;cccokO0000kc:;c,.;Oxxxxxk
kooooxO...... ..;OO00O00Oko:,,,;,,,,,,,,,'';,,,;;''',,,,,,,,,,,,,cc;,;c;.,,,,,,,,;cclxxxkOOxlc;..lkxxxxkl
OooooxO...... .OOOO0O00Odd;,,c,,,,,,,,,,..:;,,,c.,',,,,,,:,,,,,,,lc;,:c,',,,,,,,,;coldxddxxxko;,dkxxxxk;
Nc 'kooodxd....... dxOOO000Okdo,,,l,,,,,,,,.'..:;,,,:,',,,,,,,c;,,,,,,;dlc:cl,',,,,,,,,,:looloooooodxkkkkkkOXNd.
0' cxooodk:.....,,;kkOOO000Odkxc.,l,'.,,,,,,,,,:;,,,,;.,,,,,,,,c'::;:::oodlllo.,,,,,,,,,,,:loddoooddddddddxxkkkk
0, xoooodk' .....:OoOOO000Okod:;.;l,,,,,,,,,,,,:,,,,,,.,,,,,,;:o::cd::;:d,;ool:.,,,,,,,,;;cloddoooddxdkxxxxxkkkk
0c 0ooooxO .....xodOO000Oxxd,,,,;c;,,,,;,,,,,,;,,,,,,',,,,,:ccl,..'l,,,o'..,cd.,,,,,,;,,:dooooddddxxxO00000000l
0k .kooodxx ...,ddlOOO000kko,,,,,:c;,,,,;,,,,,,;,,,,,,,,,,,,,,,:c. .o,,c;. .;',,,,,:;,;oOkkxOOOOOO0000000l
00; ;xooodxl ..,xolkOO000Okl:,,,,,:c:,,,,;:,,,,;c;,,,,,;,,,,,,,,;c .l,c; c.,,,,,c;,;:dOO000000000OOOO
00K. ddoooxk; .lxlldOOO000kko:,,,,,;l:,,,,:c,,,,ldo;,,,,;;;;,;;,,:. .lolloddlo.,,,,;l,,;;:k000000000Oxxxx
000K, Oooooxk' ,doclokO00000Oxk;,,,,,,o:,,,,lo,,coxdc;,,,;;:;;;;;;;c ....;lkxOOd,. ;.,,,,cc,;;;:oO000000Okxxxxl
000O0O OooodxOldollldx00000000xO;,,,,,.o:;,,;dd:oc;o,ol:,;;;:;;;;::l',.:dOOOkxdoo. ;',,,co;,;;;:lkOdlOxOxxxxxk;
0000Ok0XXXOxkkkkdllldddxOx0000000dO,,,,,,'cc;,;codl,,o'.'loc:;:::::::l;..xOOkxdddo:;' ;,,,clc,,;;;cckdxdOkOxxxxxk.
00000OkdoooollllodxkOOO00O000000OoOd,,,,,,'c:;cxco,,::. .'coccccccclo. :'.lc:ldx;;; .:,;llc;;;;;:ccxdddxkOxxxxxO
00000000OkxxxxkOOOO000000000KK00dxl:,,,,,,.clox;.o,;: ....;:ooccllccoc. ,;;;'',c ;:'.lc;;;;::ccckddddxkxxxxxx
000000000000O00000000000000KK0Okk:;;,,,,,,.:dx,..c;c. ..';:,'lcoc;;,'. ,:,,:;. ... l:::::ccccckodddkkxxxxxl
K0000000000000000000000000KK00xol;;,;,,,,,,.o,..,c; .'cdOOOxlkl;. .... :...occccclllclxoxd;;,;lkxk,
0KK000000000000000000000KKK00Olcl;;;:;,,,,,'': ;' 'lkOOOkkx' '. ....ccllllllokcddo, .dO.
kKKKK00000000KK00000KKKKK00Oklco;;;;:,,,,,,.;:. ;dOOkxxddocl. .:llllllllxxkko. ... .x
:0KKKKKKKKKKKKKKKKKKKKOcdkxklld;,,,,,,,,,,,',cdkl,ddolddl;;, .:oooooolloxxddk. . .o
.00KKKKKKKKKKKKKKOdc,oOxkkood;,,;,;:,,,,,,,llc .l;;:c',,: .cddddoooodxxkOkod d
.0O00000Oxolc:,,,oOOkdoodl;,;;,,;l:,,,,,,,;c:..,;;'.':, .:ldxxxxkkkdxOOOdl l
;xooooxd. .',,;Oxddddox:;:do,,,,cc:;,,,,,;:o, ';:::' ''. ;kOkkOdkOOOOkkxx .:
odooodkc. ..;kxddddodxloxdxc;,,,;;::::cox;. ... ,dOOd,'kdkkkkOOOOOc . ..dx
OooooxO,. ....'kxxddddooxxdoxOOc;,;;,,,;;;;lo,........ .. .cdlxxO;..xxdl:cloOOOO..'',:dxkc
Oooooxk,'.'.';kxxdcdddookOdkO00k:;;;;;;;;:;;;clc:;,,;:clc .,ckk;dlxd...occ:,cclkOOO, ..dkxk'
,kooooxx''...;kxxk, ,xddO000000Okx::::::::::::::::lloollo. .,;::cko,lxck' occ:,ccckOOOOc;,okxxO
cdooodxo...'okxxxxxcddx0000000xkxdd:co:::cccccccllllloox:'''''',codxddo::,,;kkd; .ccc:,:ccxOOOOOOxxxxxx
koooodkc',cxkxxxkO0:kk000000kl:xxddxokdolcccclllooooodxdxxOOOOxcloc:,,,';':xxOc .;cc:,;ccxOOOO0ddxxxxo
OooooxkdkkxxxkkO00O:OO000OOd:::Odddddxodkxollodooddxxddl;;ldxOxcoxOkdl:,. oOOd., .clc:,,ccdOOOO0oooxxx:
.kooooxddkkkkkkOkkOO:00Oxkdkc::dxdddkod:'. .;xkdlOdod'.....;coxOOOOxO0:dxl..dc .llc:,,cclOOOOOooooxk'
;xoooooooooooooc .:dcdc. :OkxddkxxxkOo. .:oklodxx,. ...,;lll:dxdOdxk,.,coll;,,:clk0OOkooodxO.
.dxdddooooooooo, .:, .:xxoooooooddk. '. odddxkd'. . :;.,k0xkOx:;o:xd:o,,,;clxO0Oxooodxk
.ckd' .,dkxxdooooooooo ,. ckkxxkOc;'.... .dxxxkokOOOxcxdx,l,,,,clokO0dooodxo
'k,';, 'dc'dkkkxxxdxx. ... . lxxoooooddddoolc:;:ccdkxOkOxxkxkxkcl,,,,clokkOoooodk:
.k..; ,..dc ,c,..... .. .xxxoooooooooooooooooddxxxxkxxxkkkkx;,,,,llokkkooooxk.
,,lkkkkxxxddddddoooooooooooooooooooddxddoooddxOOkooooxO
;xkkkxxxxddddooooooooooooooooooooddodoooxx
.lkkxxxddddddoooooooooodoodkc
.dkkxxxdddddooxk'
;xkO.

View File

@@ -1,54 +0,0 @@
WWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWMMWWMMMMMMMMWKOdoxdxolc:::;;:::;;;;;:ccclc:c:lxNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMW
WWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWMMWMWMMMMMMWWKkxodxddl;;;;;;;;;;;;;;;,,;;:::;;;:l0NWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWMWWWMWWMMMMMMMMMMMMMMMMMMMMMMMMM
WMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMWWWMMMMMMMMWWWXOxdoddOk::;;:cllccc::::;;,,,,,;;;;;,;:xKWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWMWWWWWMMMMMMMMMMMMMMMMMMMMMM
WWWWWMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWMMMMMWWWKOOoloOkdc::::::::::::;;:;::;,,,,,,;;,,,;cxKNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMWMMM
WWWWWWMMMMMMMMMMMMMWMMMMMMMMMMMWWWWWMMMMWWWXkOoclOXlccccc::::::cc:::;:;,::;,,';,;;,,,,:ok0NWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMWMMMMMMMMMMMMMMMMMMMMWMMM
WWWWWWWWWMWMWWWWMMMMMMMMMMMMWWWWWWWWWMMMWWWOxo:ckl:lcc:ccclooooldolc:::;;;:;;,';;;,,,,;;lkOKNWWWWWWWWWWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMWWMMMMMMMWWMMMMM
WWMWWWWWWWMWWWWMMMMMMMMWMWMMMWWWWWWWWWWWWMKxdc:ll::c;::lldxxdoolldddlllc:;;:;:;,;;,,,;;;;cxO0KWWWNWWWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMWWWWMMMMMWWWWWWW
WMMMMWWWWWWWWWWWWWWMWMWWMMMWMWWWWWWWWWWMNWkxlc::locc;ccollllclccc:looll:c:;:c::,;;,'',;,;;cxkO0XWNNNNNWWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWMWMMMMMMMMWMMMMMMMMMWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWNW0Oco:;:llll:c:clccccllc:::c::::;:;,ccc;',,'',;;;,,:x00O0NWNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMWWMMMMMMMWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNXMxx:l;;:olo::;::clllolllc::::;;;;;;;oc;,,,',''';;;,,;l00OkNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWMWMMMMMMMWMMMMMMMWMWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXNNNNoo;c,::c:::c:;:clllllllcc:::;;;;,;;lko,,''''''':l:;;;;o00xXNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMWMWWWMMWWMWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWNNNWKX:c;c::;:;;:l;;;clllcccccc::;;;;;;;;c0kl'''.'..'.,::;;:;;oOkXNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMWMWWWMMMMWWWWMWMMW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWNWOk;;;l;',;,:xlcc::ccccc:ccc:lc;;;;;,;c0xO;'''.'..',;,:,,::,;co0KNWWNWNNNNNNNWNNWWWWNWNWNWWWWWWWMWWMMWWMWWWWWWMMMWWWWMWWWW
WWWWWWWWWNWWWWWWWWWWWWWWWWWWMWWWWWWNMXN0o;';c'',;,lOxlcooc:::cl::cldx::lco:,dOxOl,.'......',,:;,,:;;;:O00KXNWNNWWWNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWW
WWWWWWWWWWNWWWWWWWWWWWWWWWWMWWWWWNXMNKNOl:';;'.',;lO0OdloxxddoollxxxxdxxxxxxOOOOx,.........',,:;;,,;;:oONNNXXNWWWWNNNNWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWNNXMKXXOc:'','..';okkxollodxkkkkkOOkxxolcccoxkOOx,..'.......,:;;:;;,;:clxKWWNNNWMMWWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWNWNWWNWWWWWWWWWWWWWWWWWWNXWW0NKO::'''.'..',';'.''.;x00000000x;',;,','',lo'..''.......,:;;:;;;,:cldOXWWNNNNNNWWWWWWNWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWN0NNKNKkcc,,'.....:kxldkkdkO00OOOOOOOkoOOxoxOo:c'...',... .,'',;:;,,;;;,;cox0NNWNNNNXNNNWMWWNNWWWNNNWWWWWWMMWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNKO00KX00ll,,'.....ckOxxxxkOOOOOOOOOOOOkxdxdkkxkc....',,... .,,,;,;:,;;;;,,;clkKNNNWWWWWWNNNNWWWWWWWWNNNNNNNNWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXW0OOoXK0kol,''.....'xkkkkOOOOOOkkkOkkkkkkkkkkkko...:;',,... .';,;:;;;;:c:;;;;:cldOKKXXWWWWWWWWNNXXNWWWWWWWWWWNXXNNNNWWWWWNWWWWWWN
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXNX0xdKKKodl,','.....,xkkkkkkkkkxxkkkkkkkkkkkkxo:;':l;','.... .';;;:::;,;ccllc:cclodxO00KKXNXXXXXXKKKK0OO00KKKXXXNWWNNNNNNNNNNNNNN
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWK0NNkxKKOo:o,',,.....;.okkkkkkkkkkkkkkkkkkkkkxdoo,clc,'.,.... .''::;:cc:,,:clloooddoloddxkOO0KXK0OOOOKKXNNNXXKKKKKKXXXXK0KXNNNNNNN
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWNKkKWNxKNxl::,,.''.':.;ocokkkkkkkkkkkkkkkkkkkxxxx;cl:,,''''......',:;;:ccl;',;:lloooddoldxxxxxkkkOOOKKKKKXKK0KNWWNNNNXNNXXNXKXNNNNN
WWWWWWWWWWWWWWWWWWWNNWWWWWWWWNXdKNW0KOdl:;,,.....,cdoxoxkkkkxkkkkkkxxkkkkxxxx::c;,,,,'.... ...'';:;:ccccc;,;,;cldoodddxk0NNNNNNXNNNNWNNNNNXXXNNNNXXXNXXNNXNNXXNN
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWNXdKWOkOxoc:,,''.....':dxxxxxkkkxkkkkxxxxxxxxxxlccc::;;;'.'.......',;;;clcccl::cccclolodxkxOKNNWWWWNNNNNNNNNNNNXXNNNNNNNNNNNXXXXXXN
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWX00Kdxxdlc:'.,'.'....;coxxxxxxxxxxxxxxxxxxxxdodoooc:;:c:',,......';;,,clllccc;lloodddoddxkOOO0XNNNNNNNNNNNNNNNNNXXNNNXXXNNXNXXXXXX
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWN0xdoddoll',..'.......:llldxxxxxxxxxxxxxxxoooddddddoc::cl,;,......,;;;cooooolcolooodddxxkk0OOOO0KXXNNNNNNXNNXNNXNXXNWNXXNNXXXXXXXX
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWNK0dcooolx,,,;.'........clllccdxxxxxxxxxo:oddddddxxdddddolo;;.......:::ccoooddod0xdodddxkOOKXK0OOXNXXXXKXNNNNXXXXNXXXXWXXXXNXXXXXXX
NNNNWWWNWWWWNWWWNWWWWWWWWWWWWKKkccccldd',,:;,'.......'cloc,,:ldxxxoc;;;ddddddddxxxxxdxkxooc'...'.;cc:llloodddkWXOdxxxxkkO0XWX00XNNNNXKKXNNXXNNNXNXXXWXXNXXXXXXXK
NNNNNWNNNNNNNNNNNWWNWWNNWWWWN0Kkc;loxO:;.,:;:.....,:''':oc;;,;;:c:;;,,,ddoooddddxxxxxxkkOokd;''',':lclodoooxxxxXWNKOkOk0KKXXNXKXKNWWNNNXXNNXNXXNXXXXNWNNNXXXKKKK
NNNNNNNNNNNNNNNWWWWWWWWNNNNWKOXO:lxxOd',',:,:. :..,::'.'''',;;;;;;,,''.dddooooddddxxxxxkOkdOx,.,,,,;loddxxdokxxk0NWWK00OXNNNNNXNWXNNWNNNNXXXXNXXXXXXNMXXXXXXXKKK
NNNNNNNNNWWNWNWWWWNNWWWWWNWKkKXkoKXOo',;;';;;..l. :o:,..'...':;;;;,,,,,,:ddddoodddddxxxxkkxxOx,'c:,,;oddOKxdkkx0K0KNWNX0KXNNNNNNNNXXXNNNNNNNNNXXXXXXNMXXNXXXXKKK
NNNNNNNNNNNNWNWWNNXXWWWWWWNkxOKONW0::':l:,;:'..l. dloc:'..'.:c::::;:::cc:xxxxxddxddddddxxxkdxOx,;dlc;;coOWOxkkONX0XKXNW0NNKKXNWWNWKXXXWNXXXXXNNNNXXXWNXXXXXXXKXK
XNNNNNNNNNNNNNNNNNNXXWWWWW0olx0WKd,:::ol:::;.,.l. lxdoc:....'::::cclllllcx0OOOOkkX0xdxOkxkkkdxOx,;dol;;coOkx0OKNNX0XKXXKNNXKXXXNWNXXXXXXXXXKNXXKXNXNNXXXXNXXXXKX
NNNNNNNNNXXXNNNNNNNNXXXXNKxclxxo:;lxdcdoOkd,.'.. .xxdlcc.. ,'.;cllllllcc:,:oxkkO00NNKkk0XNNX0kxxkc;dddl:cllldx0XNNX0X0KXNNXXXXXXNXXXXXXXXXXKXXKKKKXKKXXXXXXXXXXK
NNXNNNNNNNNNXNNNNNNNNWNX0OOdllllokkkxcxOW0d;;'' ;dxolc,. .;:;';cc:ccc::;::;:ccxOkk00XNXKKNWWNKkxkxcloddlcdxodxxOKXX0XKXXXKKXWNWWXXXXKXXXXXXXXXXXXKXKXXXXXXXXXXX
NNNNXXXNNNNNNNNNNNNNNWWWXXKOd0kO0000OlxNXxcOco...c,;,'...;odxol:';:::;:clcll:ll:oxkxkxk0KXXXXXXN0kkkkxolooodXNK0OkxOOKXXNXXXXXNNXXXXXXXXXXXKKXXXXKXKKKXXXXNXXXXX
NNNNNXNNNNNNNNNNNNNWWWWNNNXKk0XNKKKKXkx0okK0kl....;..l,,,dodxxxdo'.cccooooololoocoxxxxddxkkkkkkO0KKkO0KKxk0kxKNNNXKOOkO0XXXXXXXXXXXXXXXXXXXXKKKKXKKKXKXXXXXXXXXX
XNNNXNNNNNNNNNNNNNNNWWWWWXXXXNNNXK0OOkolxxkkxxc:.....;l:xdlldxko;,;':clooooollooolodddddoodddxkO00KkKKXNXOOKkxO0KKXXK0OkxO0XXXXXXXXXXXXXXXXXXKKXXXXXXXKXXXXXXXXX
NNNNNNNNNNNNNNNNNNNNWWWWWXXKKXXXXXXXXX0xdO0OO0ool:,..,:codoclc.'',,;'.'loooooooooocoddddddodxOOO0O0xKKXNNX0XNKk0KXXKKXXXK0kk0XXXXXXXXXXXXXXXXKXXXXXXXXXXXXXXKXXX
NNNNNNNNNNNNNNNNNNNNWWWWWNKW0KXXXXXXXXK000OO00:dxxxc:,...',;,'.'.',,,'':ooooooolool:oodddxxxxxkkkk0x00NNNNNKXXXkK0XXXXXXXXX0kkKXXXXXXXXXXXXXXKXXXXXXXXXXXXXXXXXX
NNNNNNNNNNNNNNNNNNNNNWWWWNWN0KKXXXXXK0KK00000dllodloxxkdc;,''..''..',cl,,loooolllolccddddxxxxxdddkOxOOKNNNNNXXNKkKKXXXXXXXXXK0O0XXXXXXXXXXKXKXXXXXXXXXKXXXXXXXXX
XNNXNNNNNNNNNNNNNNNNNWWWWXW0k00KKXX0KXXK0000xkkxdloxOkkkkxdll:l:lllloooo:,cooollllll:oddddddxxxxddkxO00KXNNNNKXN0kX0XXXXXXXXXKXKOKXXXXXKKXXXKKXXXXXKXKKXXXXXXXXX
XXXXNNNNNNNNNNNNNNNNNNNWXNXkdOO00K0XXXXKK00KOxxOxkOO00Okkkkdo::lldoooooooc::oooooooolcddddxxxxxxldxdx000XNNNNN0XNx00XXXXXXXXXXXXXOXXXXXXXXKXXKKXXXXXXKKXXXXXXXXX
XXXXNNNNNNNNNNNNNNNNNNNNXN0OxkOOO0KKKKKK00KKX0xkOO0KK000OkOxkl:;cdxdoooooocclooooooooooddxxxxxxllodxxO0KNNNXXXX0KKx0XXXXXXXXKKKK0KXXXXXXXXXXXXXXXXXKXXKXXXXXXXXX
XXXXXXNNNNNNNNNNNNNNNNNXWKOkxxkkk0KKKK0000KXKOxOO0KKK0000OOkkkl:clkxddoooodcooooooooooldxxxxxxl:clddkxO0XNNNNNXXKKkKXXXXXXXXXKXXXXXXXXXXXXXXXXXXXXXXXXKKKKXXXXXX
KKXXXXXXXXXXXXXXNNNNNXXXWkkxxxkkxxO0K00000XX0xOOOKKKK000000kOOkxdxxxddoddddoddddooooooooxxxxko:cloookxk0KNXXXXXXXKkKXXXXXXKKXKKXXXXXXXXXXXXXXXXXXNNNXXXKXXXXXXXX
KKXXXXXXXXXXXXXXXNNXXXKWKkxxxxxxxxxdk0000KXKOkOO0KKKK000000kOOkkxdkxddoxdddxddddddddooolxkkko:cdddolkxkO0XNXXXXXXXK0KKKKKXXKXKKKKKKXXXXKKKKXXXXXNXNNNXXXXXXXXXXX
KKXXXXXXXXKXXXXXXXXXXKNWkxxxxxdxxxdolxxOKKXKOkO0KKKKK000000kkOOkxdkxddoxxxxdxxxxdddddoolokkd:lxxdxcokxkO0KNXXXXXXXXKK0KKKKKKKKKKKKKXKKKKKKKKKXXXXXXNXXXXXXXXNXXX
0KKKKKKXXXKXXXXXXXNXKKKKxxxddxdxddlldxxdx0K0kOO0KKKKK000000kkkkkxdxxdodddxddxxxxxdddddoolxkooxxxxxlxkkkO00NNXXKXKKKKKK00KKKKKKKKKKKKKKKKKKKKKXXXXXXXXXXXXXXXNNXX
000KKKKXKKKKKKXXXXNX0OOxkxddxxxd::;lxxxxdd0OkO00KK00000000OkxkkkxdxxdoddddddddxxxdddddooldOOkxxxdddxxdkOOOKNNXKXKKKKKKKKKKKKKKKKKKKKKKK0KKKKKXXXXXXXXXXXXXXXXXXX
00KKKKKKKKKXXXXXXXXKO0OO0xddxxkd. .:kkxkO00OxO00000000000OOkxkkxxdxddodddddddddddddddooollk0000000OOklOOO00NNWNKKKK00K00K000000KKK00KKK0K00KKKKKKXKKKKKKKXXXXXXX
OO00000KKKKKXXXXXX0kkOO0OOdoxxxl. .oxkkkO00kxOO000000000OOOkkkxxxdddooddddddddddddddoooolcdO0000000K0dO000OXNNWWK0KK00000000K000000000000000K000KKKKKKKKKKKKKKKK
kkOOO00000KKKXXXKkO0000OOOOkxddOOcldxxxxkOOxxkkOOOOOOOOOOkkkxxxxddoooodooodoooddooooooollcok00000000kxOO00O0NNNWW00000OO00000OOOOOOOOOOOO000K00000KKKK000KK0K0KK

View File

@@ -1,54 +0,0 @@
.':c;:;clodddxxdddxxxxxdooolododl;
.,;c:;::lxxxxxxxxxxxxxxxkkxxdddxxxdl.
.';:c::',ddxxdolloooddddxxkkkkkxxxxxkxd;.
.''clc',:oddddddddddddxxdxddxkkkkkkxxkkkxo;.
.,'col'.loooooddddddoodddxdxkddxkkOxkxxkkkkdc,.
';cdo,ldloodooolccccl:clodddxxxdxxkOxxxkkkkxxl,'.
.;:odllddoxddll:;;:ccll:::lllodxxdxdxkxxkkkxxxxo;'..
,;loddlcooxoocllllolooodlcclldodxdoddkxxkOOkxkxxo;,'..
.'ocdxdlllldodoloooollodddoddddxdxkoooxOkkOOkxxxkkd;..'.
. ;;dlxxdclcddxddolllcllloddddxxxxxxxcoxkkkOkOOOxxxkkxl..',
. ccxokddodddodxdollllllloodddxxxxkxxl,ckkOOOOOOOdldxxxxc..;.
..doxoddxdxxdlxxxolllooooooddxxxxxxxxo.,lOOO0O00O0kddxxdxxc',.
',xxxlxOkxkd;looddooooodooodloxxxxxkxo.;'xOOO0O00Okxkdkkddkxoc..
. .cxOxoOOkxkl';loccodddolddol:;ddlocdk:';'lk0O000000Okkdxkkdxxxd'....
. . 'ldOxxO0Okxl'.':lc;;::ccll;;;;:;;;;;;'''';k000K0KK00Okkdxxkkxxdc' ..
. ...'odOOkO00Oxc,,;cllc:;,,,,,'',;;cloooc;,'';k0KO0KKX000kdxxdxxkxdol;.
. . .'ddOOOKO00OkOxO0OO0x;........;xOkxkOkOOklcOXKOOKKXX000kdxxdxxxkdol:'.
. . .,ookkO000K0d,;l:,,:,'..''''''',c'';c;'cdoOKX0Ok0KKNXkOOkxdxkkxxxkxoc;. .
.'......llkkOKK0KKo,';;;;,'''''''''''',;:;:,,;,oKXK0OkkKKXN0kkkxkxdkxxxxkkxol,.
. .''c...,clkOO0KKKKO;,,,,'''''',,,',,,,,,,,,,,,c0KXdxOkk0KXNXOxkxdxxxxdodxxxxdol:'.... .. ..
. ..;:...c:lkOkOKXXKKk;,,,,,,,,,;;,,,,,,,,,,,,;cdxOdlxOkO0KKXN0Oxxxdddxkxoollodoolc:;'..... ...........''........
.. ,;..'cdckOkk0X0XKx0c,,,,,,,,,,,,,,,,,,,,,;:cckolokO0k0KKKNXOOddxdoodkkdollccc::clc::;,''.....''''... ................
.,. ;. ;lddkk0OOKOd0xcoc,,,,,,,,,,,,,,,,,,,;;;;xoldkkOOOOKXXXX0OkdxxdoolxOkxdllccc::cl:;;;;;,,,'''.......... . .. ...
.:. ..':ldxkk00K0Kko:c;c;,,,,;,,,,,,;;,,,,;;;;ddoxkkkkO000XNXXKOOxdxdoooooxkxkxol:cc:::;,. . ... ... .. . ..
.:. ',';codkkOO00XXXOd:;;;;;,,,;,,,,;;;;;;;;;;loooddxxxO0O0KXXXK0Okxxxolooolddoooolclc:;,;'. .. ......
....:;;:lodOKkO0OKXXKxoc;;;;;;;;;;;;;;;;;;;;:c:cccodxdodOkkKKKXKKOxxkkollloooxllcc:::c::;,'''.. .. ... . ......
.;:c::cllOk00O00KKXK0dlll:;;;;;;;;;;;;;;;ccc::::::coddolkxkKKKKKKkxxxocccccloclccc:::;;,,.''''.... . . . .. .. ........
..:occcl;kkkx0O00KXKKK0ollloo:;;;;;;;;;cdc::::::;;:::::clcxx0KX00K0dddooccc::c:.;:c:::;,''....''. ...... .... .... .... .......
..,ooool::OkkdxkOKXX00K0Oolcokkdl:;;;coxxx::::::::;;;;;:;,;ccoOKK0O0xoodlllcc:::, .':;;;;,,'.. .... .... .. . ... .. ........
..,oxlc;'dx0kdxd0XKXKkdOOOdcoxxkxxdodxxkkk::ccc::::;;;;;;,,'c,:xOOOkOdlolc:ccc;;;;. .',',..... .... .. . .. .... .......
.'.'dl;;':OkOkdkd0NdXXkddO0OOOOkxxxxxxkkOO0:::cccc::::;;;;;,',:';k0kkkkxlc::;;:c,;;,. ...'. . . .... ...... ..........
.,..,c..'cOkxxOxxxXKlXNdcdk00O00KOdxxxxkkkkkkd::::cc:::::;;;;,,;;';kOodkkxc::'.;:,,;.... .... ... ...... .. .......
.. ,;'.' .ddOdldkxdOKXl0N:lcodOK0OKdoddddxdddood;;;;;::;::::::;;;,:;';kx:loxxoc' ';,,' ..... . ... .... ..... ... ..........
. .. .cl;. .:kdddcldddxXkXlKNl;:codKKK0Oddddoolllllo;.'''',,..;:;',;,,,:;';kx:clxxoc',;.'. ....... ..... .......... .... . .... ......
... .... .;ol;;cdxl;:o:c',:kKOK0NX;;:loo0XNkO0xolllllloodkdc;,,'.. .,,.. ..,;;,ox:::ldolll:;.. ...... ...... ...............................
. . ..'':llllc,,,;o;' .:xxOONNx:;clokKNKxdxOxoodoooddxddxdoo;',,... ... .,;,;olc::lo:;c:;;'............ ...............................
... ...':.,'....'l; .;o'oc0KKokxkOXXKxc:;cldOxdddxdololldlldc;,;,;,........ .,,,,;clccc:. ..',;''... ..... .......................... .....
. ..,.. .....,;.c,..,l0KXKxKXlkkk:c:;;;:cO0oooccccclclccoc;;;;::;,,,,,,'...,'...;,.,;. ..'','.........................................
. . .... ...'',cl;;,,;;od0XXK0xld;:ll:;,cxkxOdolcccccllccclc:::::cc:::;,'...,... .''.,;'.......',;'......................................
..............;:'.''.ccldkKKkdoc:colo0OOkkxO0Olccccccccccoc::::::c:;'''.'.;... ... .,...........,,....................................
. ..............''..d:;;;odkKX0OkxkO0O0OkkkOOdccccccclccldcc:::;;;;;,,,,.;.. ....,............,,..................................
.................:llc:lc;;,:oxkOO00OOK0Okolkklcccclllcloo::::;;;;;:::,';''. .. .,.............'.................................
. . . .,...............;,,;:lc;',,,,;:lldldllllccccdkoccclllllldc::::::;;;;::,;'.... .. .,..............'...............................
.... . .,:''.............';;';,''..',,,,:cddll:cccccccoddcccccccclo::::;;;;;;l:;:;.... .. ;...............'..............................
.... . .';,'''.............;,''......',';,ldxo:;:ccccccoolcccccccccc::;;;;;;llc:;;'.. .......;.............................................
...... . .',;;,,,............';''........'',,,ldol,;::cccc:occccccccccl:;;;;;;ldol::,;'.. ....,.............................................
................ ... ,,;;;,,;;'..........;'''..........,'',;:;;;::c::::c::::cccccccc;;;;,cdolccc,;,.. ........,.............................. ............
................. .... .,;;;;;;;;;:,.......',''...........,'',,;:,;::c;:::;::::::::cccl;,,,cdo:::cl,;,'.. ..................................... . ...........
...................... ,;;;;;:;;;:cl;;'....','............,,'',;:,;::c;;;;:;;;;:::::cclc,,:dl;;:;oc,;,'.. ........................................ ........ ...
.................. .....;;;::;:;::ll:;;:;...,''............,,,,,;:;;:c:::;::;;;;;:::::ccl;,cc;;;;;l;,,,'.. ................................................ ..
.................. ..'';,;::;;;:ddxl;;;;::.','............',;,,,;:;;:c::::::::;;;:::::ccl:'',;;;:::;;:,'''. ...................................................
....................'.''.;::;;,:KWKd,,;,'..';'...........'',;,,;;:;::c:::::::::::::::cccll,.......'',l'''.. .................................................
''.................,,''.'':c;;;lKNKc;,,,'..,;''.........''',,,;;;:::cc::::::::::::::cccclo:'.........:'...'. ................................................
,,'''............,'....'''',;::''ol:;;;;,'';;,,'''''''''',,,;;;;::cccc:ccc:ccc::ccccccclloc,........,;''..'. .....''.....''''''''''''.......................

View File

@@ -6,4 +6,4 @@ dir:
order: 2
---
<Redirect to="development" />
<Catalog base='/en-us/develop/' />

View File

@@ -15,15 +15,15 @@ You can quickly navigate to the section you want to see by searching for CI file
Workflow files are all stored under `.github/workflows`, and each file can be categorized into the following functional parts:
- [Code Testing](#code-testing)
- [Code Building](#code-building)
- [Version Release](#version-release)
- [Resource Updates](#resource-updates)
- [Website Building](#website-building)
- [Issues Management](#issues-management)
- [Pull Requests Management](#pull-requests-management)
- [MirrorChyan Related](#mirrorchyan-related)
- [Others](#others)
+ [Code Testing](#code-testing)
+ [Code Building](#code-building)
+ [Version Release](#version-release)
+ [Resource Updates](#resource-updates)
+ [Website Building](#website-building)
+ [Issues Management](#issues-management)
+ [Pull Requests Management](#pull-requests-management)
+ [MirrorChyan Related](#mirrorchyan-related)
+ [Others](#others)
Additionally, we use [pre-commit.ci](https://pre-commit.ci/) to implement automatic code formatting and image resource optimization, which runs automatically after creating PRs and generally requires no special attention.
@@ -51,10 +51,10 @@ This workflow runs automatically on any new commit and PR. When triggered by a r
Version release is the necessary operation to publish updates to users, consisting of the following workflows:
- `release-nightly-ota.yml` Release nightly builds
- `release-ota.yml` Release stable/beta versions
- `gen-changelog.yml` Generate changelog for stable/beta versions
- `pr-auto-tag.yml` Generate tags for stable/beta versions
+ `release-nightly-ota.yml` Release nightly builds
+ `release-ota.yml` Release stable/beta versions
+ `gen-changelog.yml` Generate changelog for stable/beta versions
+ `pr-auto-tag.yml` Generate tags for stable/beta versions
::: tip
The "ota" in the above file names stands for Over-the-Air, which is what we commonly call "incremental update packages". Therefore, MAA's release process actually includes building OTA packages for past versions.
@@ -82,9 +82,9 @@ The release process for these two channels is relatively more complex. We'll exp
This section of workflows is mainly responsible for MAA's resource updates and optimization, with the following specific workflows:
- `res-update-game.yml` Executes periodically to pull game resources from specified repositories
- `sync-resource.yml` Syncs resources to the MaaResource repository for resource updates
- `optimize-templates.yml` Optimizes template image sizes
+ `res-update-game.yml` Executes periodically to pull game resources from specified repositories
+ `sync-resource.yml` Syncs resources to the MaaResource repository for resource updates
+ `optimize-templates.yml` Optimizes template image sizes
### Website Building
@@ -119,8 +119,8 @@ This workflow checks whether commit messages in PRs conform to [Conventional Com
MirrorChyan is a paid update mirror service, with the following related workflows:
- `mirrorchyan.yml` Sync update packages to MirrorChyan
- `mirrorchyan_release_note.yml` Generate MirrorChyan Release Notes
+ `mirrorchyan.yml` Sync update packages to MirrorChyan
+ `mirrorchyan_release_note.yml` Generate MirrorChyan Release Notes
### Others

View File

@@ -21,40 +21,42 @@ Welcome to the [Web-based PR Tutorial](./pr-tutorial.md) that anyone can underst
2. Visit the [MAA main repository](https://github.com/MaaAssistantArknights/MaaAssistantArknights), click `Fork`, then `Create fork`.
3. Clone the dev branch of your repository with submodules:
```bash
git clone --recurse-submodules <your repository link> -b dev
```
```bash
git clone --recurse-submodules <your repository link> -b dev
```
::: warning
If using Git GUI clients like Visual Studio without `--recurse-submodules` support, run `git submodule update --init` after cloning to initialize submodules.
:::
::: warning
If using Git GUI clients like Visual Studio without `--recurse-submodules` support, run `git submodule update --init` after cloning to initialize submodules.
:::
4. Download prebuilt third-party libraries
**Python environment required - search for Python installation tutorials if needed**
_(tools/maadeps-download.py is located in the project root)_
```cmd
python tools/maadeps-download.py
```
```cmd
python tools/maadeps-download.py
```
5. Configure development environment
- Download and install `Visual Studio 2022 Community`, selecting `Desktop development with C++` and `.NET Desktop Development` during installation.
- Download and install `Visual Studio 2022 Community`, selecting `Desktop development with C++` and `.NET Desktop Development` during installation.
6. Double-click `MAA.sln` to open the project in Visual Studio.
7. Configure Visual Studio settings
- Select `RelWithDebInfo` and `x64` in the top configuration bar (Skip for Release builds or ARM platforms)
- Right-click `MaaWpfGui` → Properties → Debug → Enable native debugging (This enables breakpoints in C++ Core)
- Select `RelWithDebInfo` and `x64` in the top configuration bar (Skip for Release builds or ARM platforms)
- Right-click `MaaWpfGui` → Properties → Debug → Enable native debugging (This enables breakpoints in C++ Core)
8. Now you're ready to happily ~~mess around~~ start developing!
9. Commit regularly with meaningful messages during development
If you're not familiar with git usage, you might want to create a new branch for changes instead of committing directly to `dev`:
```bash
git branch your_own_branch
git checkout your_own_branch
```
```bash
git branch your_own_branch
git checkout your_own_branch
```
This keeps your changes isolated from upstream `dev` updates.
This keeps your changes isolated from upstream `dev` updates.
10. After development, push your local branch (e.g. `dev`) to your remote repository:
@@ -64,29 +66,30 @@ Welcome to the [Web-based PR Tutorial](./pr-tutorial.md) that anyone can underst
11. Submit a Pull Request at the [MAA main repository](https://github.com/MaaAssistantArknights/MaaAssistantArknights). Ensure your changes are based on the `dev` branch, not `master`.
12. To sync upstream changes:
1. Add upstream repository:
```bash
git remote add upstream https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
```
```bash
git remote add upstream https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
```
2. Fetch updates:
```bash
git fetch upstream
```
```bash
git fetch upstream
```
3. Rebase (recommended) or merge:
```bash
git rebase upstream/dev # rebase
```
```bash
git rebase upstream/dev # rebase
```
or
or
```bash
git merge # merge
```
```bash
git merge # merge
```
4. Repeat steps 7, 8, 9, 10.
@@ -102,11 +105,11 @@ Please ensure that it has been formatted before submission, or [enable Pre-commi
The currently enabled formatting tools are as follows:
| File Type | Format Tool |
| --------- | --------------------------------------------------------------- |
| C++ | [clang-format](https://clang.llvm.org/docs/ClangFormat.html) |
| Json/Yaml | [Prettier](https://prettier.io/) |
| Markdown | [markdownlint](https://github.com/DavidAnson/markdownlint-cli2) |
| File Type | Format Tool |
| --- | --- |
| C++ | [clang-format](https://clang.llvm.org/docs/ClangFormat.html) |
| Json/Yaml | [Prettier](https://prettier.io/) |
| Markdown | [markdownlint](https://github.com/DavidAnson/markdownlint-cli2) |
### Use Pre-commit Hooks to Automatically Format Code
@@ -114,10 +117,10 @@ The currently enabled formatting tools are as follows:
2. Execute the following command in the root directory of the project:
```bash
pip install pre-commit
pre-commit install
```
```bash
pip install pre-commit
pre-commit install
```
If pre-commit still cannot be used after pip install, please check if the pip installation path has been added to the PATH.
@@ -127,9 +130,9 @@ The formatting tool will automatically run every time you submit to ensure that
1. Install clang-format version 20.1.0 or higher.
```bash
python -m pip install clang-format
```
```bash
python -m pip install clang-format
```
2. Use tools like 'Everything' to locate the installation location of clang-format.exe. As a reference, if you are using Anaconda, clang-format.exe will be installed in YourAnacondaPath/Scripts/clang-format.exe.
3. In Visual Studio, search for 'clang-format' in Tools-Options.
@@ -147,4 +150,6 @@ You can also format with `tools\ClangFormatter\clang-formatter.py` directly, by
Create GitHub codespace with pre-configured C++ dev environments:
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg?color=green)](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights?devcontainer_path=.devcontainer%2F1%2Fdevcontainer.json)
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg?color=green)](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights)
Then follow the instructions in vscode or [Linux tutorial](./linux-tutorial.md) to configure GCC 12 and the CMake project.

View File

@@ -16,8 +16,8 @@ Your pull request will be marked as `ambiguous` when you are not committing with
### Auto Notification
- Adds labels to issues and pull requests, e.g., `module`, `Client`, `ambiguous`, `translation required`, etc.
Issue Bot will add categories based on keywords.
Please refer to the [configuration file](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/.github/issue-checker.yml) for the keywords.
Issue Bot will add categories based on keywords.
Please refer to the [configuration file](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/.github/issue-checker.yml) for the keywords.
- Adds the `MAA Team` label to issues and pull requests for MAA public team members.
#### Issues and Their Comments

View File

@@ -18,60 +18,63 @@ Mac can use the `tools/build_macos_universal.zsh` script for compilation. It's r
## Compilation Process
1. Download compilation dependencies
- Ubuntu/Debian
```bash
sudo apt install cmake
```
- Ubuntu/Debian
- Arch Linux
```bash
sudo apt install cmake
```
```bash
sudo pacman -S --needed cmake
```
- Arch Linux
```bash
sudo pacman -S --needed cmake
```
2. Build third-party libraries
You can choose to download pre-built dependency libraries or compile from scratch
- Download pre-built third-party libraries (recommended)
You can choose to download pre-built dependency libraries or compile from scratch
> **Note**
> ~~Contains dynamic libraries compiled on relatively new Linux distributions (Ubuntu 22.04). If your system's libstdc++ version is older, you may encounter ABI incompatibility issues.~~
> After introducing cross compiling to lower the runtime requirement, only glibc 2.31 (aka. ubuntu 20.04) is required now.
- Download pre-built third-party libraries (recommended)
```bash
python tools/maadeps-download.py
```
> **Note**
> ~~Contains dynamic libraries compiled on relatively new Linux distributions (Ubuntu 22.04). If your system's libstdc++ version is older, you may encounter ABI incompatibility issues.~~
> After introducing cross compiling to lower the runtime requirement, only glibc 2.31 (aka. ubuntu 20.04) is required now.
If you find the libraries downloaded above cannot run on your system due to ABI version issues and you don't want to use container solutions, you can also try compiling from scratch
- Build third-party libraries from scratch (will take considerable time)
```bash
python tools/maadeps-download.py
```
```bash
git clone https://github.com/MaaAssistantArknights/MaaDeps
cd MaaDeps
# If the system is too old to use our prebuilt llvm 20, please consider using local build enviroment instead of cross compiling.
# The toolchain config under MaaDeps/cmake needs to be modified.
python linux-toolchain-download.py
python build.py
```
If you find the libraries downloaded above cannot run on your system due to ABI version issues and you don't want to use container solutions, you can also try compiling from scratch
- Build third-party libraries from scratch (will take considerable time)
```bash
git clone https://github.com/MaaAssistantArknights/MaaDeps
cd MaaDeps
# If the system is too old to use our prebuilt llvm 20, please consider using local build enviroment instead of cross compiling.
# The toolchain config under MaaDeps/cmake needs to be modified.
python linux-toolchain-download.py
python build.py
```
3. Compile MAA
```bash
cmake -B build \
-DINSTALL_RESOURCE=ON \
-DINSTALL_PYTHON=ON \
-DCMAKE_TOOLCHAIN_FILE=MaaDeps/cmake/maa-x64-linux-toolchain.cmake
cmake --build build
```
```bash
cmake -B build \
-DINSTALL_RESOURCE=ON \
-DINSTALL_PYTHON=ON \
-DCMAKE_TOOLCHAIN_FILE=MaaDeps/cmake/maa-x64-linux-toolchain.cmake
cmake --build build
```
To install MAA to target location, note that MAA is recommended to run by specifying `LD_LIBRARY_PATH`, don't use administrator privileges to install MAA into `/usr`
To install MAA to target location, note that MAA is recommended to run by specifying `LD_LIBRARY_PATH`, don't use administrator privileges to install MAA into `/usr`
> Now it shall be able to run without specifying `LD_LIBRARY_PATH`
> Now it shall be able to run without specifying `LD_LIBRARY_PATH`
```bash
cmake --install build --prefix <target_directory>
```
```bash
cmake --install build --prefix <target_directory>
```
## Integration Documentation

View File

@@ -72,21 +72,21 @@ Conflicts are somewhat troublesome to resolve. This section only explains the co
1. First, enter MAA's main repository and click the Fork button in the upper right corner to fork a copy of the code
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/fork-light.png',
dark: 'images/zh-cn/pr-tutorial/fork-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/fork-light.png',
dark: 'images/zh-cn/pr-tutorial/fork-dark.png'
}
]" />
2. Then directly click "Create Fork"
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-2-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-2-dark.png'
}
]" />
3. You'll arrive at your personal repository. You can see the title is "YourName/MaaAssistantArknights" with small text below saying "forked from MaaAssistantArknights/MaaAssistantArknights"
@@ -98,13 +98,13 @@ Conflicts are somewhat troublesome to resolve. This section only explains the co
7. After editing, click the button in the upper right corner to open the commit page and write what you changed
We have a simple commit title [naming format](https://www.conventionalcommits.org/en/v1.0.0/). It's best to follow it, but if you really can't understand it, you can write something simple first.
We have a simple commit title [naming format](https://www.conventionalcommits.org/en/v1.0.0/). It's best to follow it, but if you really can't understand it, you can write something simple first.
8. Have a second file to modify? Discovered an error after finishing? No problem! Just repeat steps 4-7!
9. After all modifications are complete, make a PR! Click "Code" to return to your **personal repository's** homepage
If there's a "Compare & Pull Request" button, that's great - click it directly!
If not, don't worry - click the "Contribute" button below, then "Open Pull Request" - it's the same thing.
If there's a "Compare & Pull Request" button, that's great - click it directly!
If not, don't worry - click the "Contribute" button below, then "Open Pull Request" - it's the same thing.
10. You'll arrive at the main repository's PR page. Please verify that what you want to PR is what you intend to submit.
As shown in the image, there's a leftward arrow in the middle, requesting to merge the right side's PersonalName/MAA dev branch into the main repository/MAA dev branch.

View File

@@ -5,8 +5,8 @@ icon: iconoir:code-brackets
# Dedicated VSCode Extension Tutorial
- [Extension Store](https://marketplace.visualstudio.com/items?itemName=nekosu.maa-support)
- [Repository](https://github.com/neko-para/maa-support-extension)
* [Extension Store](https://marketplace.visualstudio.com/items?itemName=nekosu.maa-support)
* [Repository](https://github.com/neko-para/maa-support-extension)
## Installation
@@ -60,10 +60,10 @@ When enabling the `Maa` compatible mode, the extension will be able to recursive
The extension supports scheduled scanning and diagnosing all tasks.
- Check if contains task defs with same names.
- Check if contains unknown task refs.
- Check if contains unknown image refs.
- Check if contains duplicated task refs in a single task.
* Check if contains task defs with same names.
* Check if contains unknown task refs.
* Check if contains unknown image refs.
* Check if contains duplicated task refs in a single task.
#### Multiple paths resource support
@@ -83,11 +83,11 @@ Searching and launching `Maa: open crop tool` inside VSCode command panel can op
> Use `Ctrl+Shift+P` (`Command+Shift+P` on MacOS) to open command panel
- After selecting and connecting to the controller, use `Screencap` button to obtain screenshots
- Use `Upload` button to manually upload images.
- Hold `Ctrl` key and select cropping area
- Use wheels to zoom
- After finishing cropping, use `Download` button to save the cropping result to the folder of the topest layer of the activated resource
* After selecting and connecting to the controller, use `Screencap` button to obtain screenshots
* Use `Upload` button to manually upload images.
* Hold `Ctrl` key and select cropping area
* Use wheels to zoom
* After finishing cropping, use `Download` button to save the cropping result to the folder of the topest layer of the activated resource
### Bottom status bar

View File

@@ -6,4 +6,4 @@ dir:
order: 1
---
<Redirect to="newbie" />
<Catalog base='/en-us/manual/' />

View File

@@ -63,6 +63,7 @@ For other emulators, refer to [Zhao Qingqing's blog](https://www.cnblogs.com/zha
::: details Alternative methods
- Method 1: Check emulator ports using ADB commands
1. Launch **one** emulator and ensure no other Android devices are connected to your computer.
2. Open a terminal in the folder containing the ADB executable.
3. Run the following command:
@@ -85,6 +86,7 @@ For other emulators, refer to [Zhao Qingqing's blog](https://www.cnblogs.com/zha
Use `127.0.0.1:<port>` or `emulator-<four digits>` as your connection address.
- Method 2: Find established ADB connections
1. Follow Method 1.
2. Press `Windows key+S` to open search, type `Resource Monitor` and open it.
3. Go to the `Network` tab and find the emulator process name in the `Listening Ports` name column, such as `HD-Player.exe`.
@@ -129,6 +131,7 @@ MAA now attempts to read the `bluestacks.conf` storage location from the registr
:::
1. Find the `bluestacks.conf` file in the BlueStacks data directory
- International version default: `C:\ProgramData\BlueStacks_nxt\bluestacks.conf`
- Chinese version default: `C:\ProgramData\BlueStacks_nxt_cn\bluestacks.conf`

View File

@@ -6,4 +6,4 @@ dir:
order: 5
---
<Redirect to="windows" />
<Catalog base='/en-us/manual/device/' />

View File

@@ -17,7 +17,6 @@ This method involves ADB command-line usage, has lower stability, and still requ
3. Since MAA only supports `16:9` aspect ratios, devices with non-`16:9` or `9:16` screen ratios (including most modern devices) need to have their resolution forcibly changed. If your device's native screen ratio is `16:9` or `9:16`, you can skip the `Change Resolution` section.
4. Switch your device's navigation method to something other than `Full Screen Gestures`, such as `Classic Navigation Keys`, to avoid accidental operations.
5. Please set the `Notched Screen UI Adaptation` option in the game settings to 0 to avoid task errors.
:::
::: tip
@@ -37,6 +36,7 @@ Typical `16:9` resolutions include `3840x2160` (4K), `2560x1440` (2K), `1920x108
```
- When executed successfully, it will show connected USB debugging devices.
- Example of a successful connection:
```bash
@@ -118,6 +118,7 @@ Strongly recommended to restore the default resolution **before** restarting you
```
2. Rename the first file to `startup.bat` and the second to `finish.bat`.
- If no confirmation dialog appears when changing the extension and the file icon doesn't change, search for "How to show file extensions in Windows."
3. In MAA's `Settings` - `Connection Settings`, set `Start Script` to `startup.bat` and `End Script` to `finish.bat`.
@@ -148,6 +149,7 @@ Wired connections don't need IP addresses or ports - just the device serial numb
```
2. Find your device's IP address:
- Go to your phone's `Settings` - `Wi-Fi`, tap the connected network to view the IP address.
- The location varies by manufacturer - search for instructions if needed.
@@ -163,6 +165,7 @@ Wired connections don't need IP addresses or ports - just the device serial numb
1. On your phone, go to Developer Options, tap `Wireless Debugging` and enable it. Tap `Pair device with pairing code` and keep the popup open until pairing completes.
2. Complete the pairing:
1. In the command prompt, type `adb pair <IP address and port shown in the device popup>` and press Enter.
2. Enter the six-digit pairing code from the device popup and press Enter.
3. When you see `Successfully paired to <IP:port>`, the device popup will close automatically, and your computer's name will appear in the paired devices list.

View File

@@ -59,6 +59,7 @@ Place the `MaaDesktopIntegration.so` generated by MAA Wine Bridge in the same di
#### 1. Installing MAA Dynamic Library
1. Download and extract the Linux dynamic library from the [MAA website](https://maa.plus/), or install from a software repository:
- AUR: [maa-assistant-arknights](https://aur.archlinux.org/packages/maa-assistant-arknights), follow the post-installation instructions
- Nixpkgs: [maa-assistant-arknights](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-assistant-arknights/package.nix)
@@ -74,6 +75,7 @@ You can refer to the [Linux Compilation Tutorial](../../develop/linux-tutorial.m
1. Find the line [`if asst.connect('adb.exe', '127.0.0.1:5554'):`](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/b4fc3528decd6777441a8aca684c22d35d2b2574/src/Python/sample.py#L62)
2. ADB Tool Configuration
- If using `Android Studio`'s `AVD` emulator, it comes with ADB. You can directly specify the ADB path to replace `adb.exe`, typically found in `$HOME/Android/Sdk/platform-tools/`, for example:
```python
@@ -83,6 +85,7 @@ You can refer to the [Linux Compilation Tutorial](../../develop/linux-tutorial.m
- For other emulators, first install ADB: `$ sudo apt install adb`, then either specify the path or simply use `adb` if it's in your `PATH` environment variable.
3. Getting the Emulator's ADB Address
- Use the ADB tool directly: `$ adb_path devices`, for example:
```shell

View File

@@ -22,7 +22,6 @@ Or manually download and install these <u>**two**</u> runtime libraries to solve
- [Visual C++ Redistributable](https://aka.ms/vs/17/release/vc_redist.x64.exe)
- [.NET Desktop Runtime 8](https://aka.ms/dotnet/8.0/windowsdesktop-runtime-win-x64.exe)
:::
## Software won't run/crashes/shows errors
@@ -47,7 +46,7 @@ We cannot provide repair solutions other than reinstalling your system. Please a
#### Windows N/KN
For Windows N/KN (European/Korean versions), you also need to install the [Media Feature Pack](https://support.microsoft.com/en-us/topic/c1c6fffa-d052-8338-7a79-a4bb980a700a).
For Windows N/KN (European/Korean versions), you also need to install the [Media Feature Pack](https://support.microsoft.com/zh-cn/topic/c1c6fffa-d052-8338-7a79-a4bb980a700a).
#### Windows 7
@@ -55,7 +54,7 @@ For Windows N/KN (European/Korean versions), you also need to install the [Media
For Windows 7, before installing the two runtime libraries mentioned above, check if these patches are installed:
1. [Windows 7 Service Pack 1](https://support.microsoft.com/en-us/windows/b3da2c0f-cdb6-0572-8596-bab972897f61)
1. [Windows 7 Service Pack 1](https://support.microsoft.com/zh-cn/windows/b3da2c0f-cdb6-0572-8596-bab972897f61)
2. SHA-2 code signing patches:
- KB4474419: [Download link 1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu), [Download link 2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)
- KB4490628: [Download link 1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu), [Download link 2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)

View File

@@ -6,4 +6,4 @@ dir:
order: 4
---
<Redirect to="startup" />
<Catalog base='/en-us/manual/introduction/' />

View File

@@ -8,6 +8,7 @@ icon: hugeicons:brain-02
## General Settings
- The `Use Sanity Potion` + `Use Originium` and `Perform Battles`+ `Material` options work as OR conditions - the task will stop when any of these conditions is met.
- `Use Sanity Potion` specifies how many times to replenish sanity (may use multiple potions at once).
- `Use Originium` specifies how many Originium to use (one at a time). Originium won't be used if sanity potions are available.
- `Perform Battles` specifies the number of battles to complete (e.g., "stop after 15 runs").
@@ -18,19 +19,19 @@ icon: hugeicons:brain-02
::: details Examples
| Use Sanity Potion | Use Originium | Perform Battles | Material | Result |
| :---------------: | :-----------: | :-------------: | :------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | | | Uses current sanity and stops. |
| 2 | | | | Uses current sanity, then uses sanity potions up to 2 times, then stops. |
| _999_ | 2 | | | Uses current sanity, then all sanity potions, then Originium up to 2 times, then stops. |
| | | 2 | | Runs the selected stage 2 times, then stops. |
| | | | 2 | Farms until 2 of the specified material are obtained, then stops. |
| 2 | | 4 | | Runs the selected stage up to 4 times, using up to 2 sanity potions if needed, then stops. |
| 2 | | | 4 | Farms until 4 of the specified material are obtained, using up to 2 sanity potions if needed, then stops. |
| 2 | | 4 | 8 | Runs the selected stage up to 4 times, using up to 2 sanity potions if needed. Stops early if 8 of the specified material are obtained before reaching 4 runs. |
| _999_ | 4 | 8 | 16 | Runs the selected stage up to 8 times, using all sanity potions and up to 4 Originium if needed. Stops early if 16 of the specified material are obtained before reaching 8 runs. |
| | 2 | | | Uses current sanity, then stops if any sanity potions are available. If no potions, uses up to 2 Originium. _Not MAA GUI behavior_ |
| 2 | 4 | | | Uses current sanity, then up to 2 sanity potions. If potions remain, stops; if no potions remain after using ≤2 potions, uses up to 4 Originium. _Not MAA GUI behavior_ |
| Use Sanity Potion | Use Originium | Perform Battles | Material | Result |
| :---------------: | :-----------: | :-------------: | :------: | ------ |
| | | | | Uses current sanity and stops. |
| 2 | | | | Uses current sanity, then uses sanity potions up to 2 times, then stops. |
| _999_ | 2 | | | Uses current sanity, then all sanity potions, then Originium up to 2 times, then stops. |
| | | 2 | | Runs the selected stage 2 times, then stops. |
| | | | 2 | Farms until 2 of the specified material are obtained, then stops. |
| 2 | | 4 | | Runs the selected stage up to 4 times, using up to 2 sanity potions if needed, then stops. |
| 2 | | | 4 | Farms until 4 of the specified material are obtained, using up to 2 sanity potions if needed, then stops. |
| 2 | | 4 | 8 | Runs the selected stage up to 4 times, using up to 2 sanity potions if needed. Stops early if 8 of the specified material are obtained before reaching 4 runs. |
| _999_ | 4 | 8 | 16 | Runs the selected stage up to 8 times, using all sanity potions and up to 4 Originium if needed. Stops early if 16 of the specified material are obtained before reaching 8 runs. |
| | 2 | | | Uses current sanity, then stops if any sanity potions are available. If no potions, uses up to 2 Originium. _Not MAA GUI behavior_ |
| 2 | 4 | | | Uses current sanity, then up to 2 sanity potions. If potions remain, stops; if no potions remain after using ≤2 potions, uses up to 4 Originium. _Not MAA GUI behavior_ |
:::
@@ -45,6 +46,7 @@ icon: hugeicons:brain-02
- Skill summary, voucher, and carbon stages (level 5 only). Enter exact codes like `CA-5`, `AP-5`, or `SK-5`.
- All chip stages. Enter complete stage codes like `PR-A-1`.
- For Annihilation mode, use these specific values:
- Current annihilation: Annihilation
- Chernobog: Chernobog@Annihilation
- Lungmen Outskirts: LungmenOutskirts@Annihilation

View File

@@ -8,11 +8,7 @@ icon: ph:sword-bold
Welcome to use and share operation files on [prts.plus](https://prts.plus).
::: warning
All features involving Copilot require the following prerequisites, including but not limited to Copilot and Auto I. S.
- At least 60 frames of **stable** framerate
- Touch mode set to Minitouch or MaaTouch
All features involving automatic combat require a stable game frame rate of at least 60 FPS, including but not limited to Auto Combat and Integrated Strategy.
:::
## Using Operations

View File

@@ -8,11 +8,7 @@ icon: ri:game-fill
MAA selects the latest theme by default, which can be changed in `Auto Integrated Strategy` - `Integrated Strategy Theme`.
::: warning
All features involving Copilot require the following prerequisites, including but not limited to Copilot and Auto I. S.
- At least 60 frames of **stable** framerate
- Touch mode set to Minitouch or MaaTouch
All features involving automatic combat require a stable game frame rate of at least 60 FPS, including but not limited to Auto Combat and Integrated Strategy.
:::
- Please pin the corresponding Integrated Strategy theme at the terminal in-game. Although automatic navigation is currently possible, long-term functionality is not guaranteed.
@@ -56,10 +52,10 @@ For details, see the [Integrated Strategy Protocol](../../protocol/integrated-st
- Automatically recognizes operators and their levels, selecting optimal operators and skills.
- Recognizes shop items and prioritizes purchasing more powerful collectibles.
## Exception Detection
## Exception Handling
- If a task encounters problems, it will automatically abandon the current exploration and retry.
- If battle duration exceeds 5 minutes, all ground units will automatically retreat; if it exceeds 6 minutes, the current battle will be automatically abandoned to avoid time-consuming stalemates.
- To automatically reconnect and continue tasks after intermittent disconnections or updates, please also enable the Start Wake-Up Task and set the corresponding time for forced scheduled start.
- Automatically reconnects and continues tasks after disconnections or the 4 AM server reset.
- For battles exceeding 5 minutes, automatically retreats all ground units; after 6 minutes, abandons the battle to avoid time-consuming deadlocks.
- If a task encounters problems, automatically abandons the current exploration and retries.
If the program gets stuck at the same location multiple times, please submit an Issue with logs and screenshots.
If the program repeatedly gets stuck at the same point, please submit an Issue with logs

View File

@@ -11,31 +11,31 @@ Quick start guide!
1. Confirm system version
MAA on Windows only supports Windows 10 and 11. For older Windows versions, please refer to the system issues section in [FAQ](./faq.md#system-issues).
MAA on Windows only supports Windows 10 and 11. For older Windows versions, please refer to the system issues section in [FAQ](./faq.md#system-issues).
Non-Windows users, please refer to [Emulator and Device Support](./device/).
Non-Windows users, please refer to [Emulator and Device Support](./device/).
2. Download the correct version
The [MAA official website](https://maa.plus/) will automatically select the correct architecture for most users reading this article, which should be Windows x64.
The [MAA official website](https://maa.plus/) will automatically select the correct architecture for most users reading this article, which should be Windows x64.
3. Extract correctly
Ensure the extraction is complete, and make sure to extract MAA to a separate folder. Do not extract MAA to paths requiring UAC permissions such as `C:\` or `C:\Program Files\`.
Ensure the extraction is complete, and make sure to extract MAA to a separate folder. Do not extract MAA to paths requiring UAC permissions such as `C:\` or `C:\Program Files\`.
4. Install runtime libraries
MAA requires VCRedist x64 and .NET 8. Please run `DependencySetup_依赖库安装.bat` in the MAA directory to install them.
MAA requires VCRedist x64 and .NET 8. Please run `DependencySetup_依赖库安装.bat` in the MAA directory to install them.
For more information, please refer to the pinned section in [FAQ](./faq.md).
For more information, please refer to the pinned section in [FAQ](./faq.md).
5. Confirm emulator support
Check [Emulator and Device Support](./device/) to verify the compatibility of your emulator.
Check [Emulator and Device Support](./device/) to verify the compatibility of your emulator.
6. Set the correct emulator resolution
Emulator resolution should be landscape `1280x720` or `1920x1080`; for YostarEN players, it must be `1920x1080`.
Emulator resolution should be landscape `1280x720` or `1920x1080`; for YostarEN players, it must be `1920x1080`.
## Initial Configuration

View File

@@ -6,4 +6,4 @@ dir:
order: 3
---
<Redirect to="integration" />
<Catalog base='/en-us/protocol/' />

View File

@@ -202,7 +202,7 @@ Todo
#### Common `subtask` Field Values
- `ProcessTask`
- `ProcessTask`
```json
// Corresponding details field example

View File

@@ -51,12 +51,12 @@ The tools in `tools/RoguelikeRecruitmentTool` and `tools/RoguelikeOperSearch` ca
"team_complete_condition": [ // Conditions for squad completness
...
]
}
}
```
### Operator classification
Split operators in different **_groups_** according to your understanding of the game (Group concept references [Copilot Schema](./copilot-schema.md))
Split operators in different ***groups*** according to your understanding of the game (Group concept references [Copilot Schema](./copilot-schema.md))
::: info
@@ -67,7 +67,6 @@ Split operators in different **_groups_** according to your understanding of the
3. Please do not change the name of an existing group, as this may cause previous versions of the task to be unavailable when MAA is updated!
4. Please try not to add new groups, instead try to implement new operators added to the task into existing groups according to their usage
:::
::: tip
@@ -76,7 +75,7 @@ By default, only E1 Level 55 operators will be recruited
```json
{
"theme": "Phantom",
"theme": "Phantom",
"priority": [ // Groups, in order
{
"name": "棘刺", // Group name ("棘刺" = "Thorns")
@@ -92,7 +91,7 @@ By default, only E1 Level 55 operators will be recruited
}
]
},
"team_complete_condition": [
"team_complete_condition": [
...
]
]
@@ -101,60 +100,60 @@ By default, only E1 Level 55 operators will be recruited
1. Introduction to existing groups
Taking Sami's I.S. as an example: operators are mainly divided into:
Taking Sami's I.S. as an example: operators are mainly divided into:
| Group | Considerations | Class | Operators |
| :-------------------------------------------------------------- | :--------------------------------------------------------- | :----------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- |
| **_地面阻挡_** (Ground Blocking) | Field presence and clearing enemies | Defenders, Guards | Healing defenders, cornerstones, Blacknight, Mountain, M3, Ling and Scene's summons, Spot, Defender reserve operators |
| **_地面单切/处决者_** (Ground Single-Target/Executors) | Solo elite enemies | Executor specialists | SilverAsh, Yato the Elegy, Kirara R Yato, M3, Red |
| **_高台C_** (Ranged Core) | Sustained and decisive output | Snipers, Casters | Weathered, Logos, Ch'en the Holungday, Chongyue |
| **_高台输出_** (Ranged DPS) | Anti-air and sustained output | Snipers, Casters | Archetto, Exusiai, Kroos, Steward |
| **_速狙_** (Fast Snipers) | Physical damage, standard range | Snipers | Eyjafjalla, Exusiai, Yeye, Kroos |
| **_术师_** (Casters) | Arts damage, standard range | Single-target Casters | Eyjafjalla, Logos, Steward |
| **_辅助_** (Supporters) | Can hit 1 tile behind | Supporters | Suzuran, Lily of the Valley, Yeye, Orchid |
| **_狙击_** (Long-range Snipers) | Longer range high ground | Artilleryman, Spreadshooter | Weathered, Toddifons, Rosa |
| **_奶_** (Healers) | Healing ability | Medics, Supporters | Kal'tsit, Skadi the Corrupting Heart, Hibiscus, Ansel |
| **_单奶_** (Single-target Healers) | Attack range depth >= 4 | Medics | Kal'tsit, Reed the Flame Shadow, Ptilopsis, Perfumer, Hibiscus, Ansel |
| **_群奶_** (AoE Healers) | Attack range depth < 4, can heal behind | Medics, Supporters | Nightingale, Ptilopsis, Skadi the Corrupting Heart |
| **_回费_** (DP Recovery) | Cost recovery | Vanguards | Myrtle, Ines, Fang, Vanilla |
| **_地刺_** (Ground Traps) | No blocking, provides DPS or slowing in front of defenders | Ambushers | Gladiia, Ascalon, Manticore |
| **_地面远程_** (Ground Ranged) | Ground long-range, can output behind shields | Instructors, Lords | Horn, Pallas, Thorns, SilverAsh |
| **_领主_** (Lords) | Ground attack range depth > 4, can target air | Fortress, Lord | Thorns, SilverAsh, Chouyu |
| **_盾法_** (Shield Casters) | Short attack range, some tanking ability | Arts Fighter Casters | Lin, Carnelian |
| **_炮灰_** (Fodder) | Absorb attacks, redeploy | Specialists, summons | M3, Red, Myrtle, reserve operators |
| **_大龙_** (Big Dragon) | Tank in front of blockers, easy to combine | Summons | Ling's dragons, Jessica the Flame Purifier's shield |
| **_补给站_** (Supply Stations) | Accelerate main DPS operator skill rotation | Summons | Support Supply Station, Artificer operator summons |
| **_无人机_** (Drones) | Ignore height restrictions for healing summons | Summons | Skadi's Seaborn, Silence's Medical Drone |
| **_支援陷阱_** (Support Traps) | Deployable ground explosives | Summons | Support Mist Generator, Support Rumble-Rumble |
| **_障碍物_** (Obstacles) | Don't take deployment slots, attract aggro or block | Summons | Cage, obstacles |
| **_其他地面_** (Other Ground) | Ground operators not preferred for priority use | Push/pull, block-1 vanguards, swordmasters | Bagpipe, Croissant |
| **_高台预备/其他高台_** (High Ground Reserve/Other High Ground) | High ground operators not preferred for priority use | AoE casters, chain casters, tacticians | Orchid, reserve operators |
| Group | Considerations | Class | Operators |
| :--- | :--- | :--- | :--- |
| ***地面阻挡*** (Ground Blocking) | Field presence and clearing enemies | Defenders, Guards | Healing defenders, cornerstones, Blacknight, Mountain, M3, Ling and Scene's summons, Spot, Defender reserve operators |
| ***地面单切/处决者*** (Ground Single-Target/Executors) | Solo elite enemies | Executor specialists | SilverAsh, Yato the Elegy, Kirara R Yato, M3, Red |
| ***高台C*** (Ranged Core) | Sustained and decisive output | Snipers, Casters | Weathered, Logos, Ch'en the Holungday, Chongyue |
| ***高台输出*** (Ranged DPS) | Anti-air and sustained output | Snipers, Casters | Archetto, Exusiai, Kroos, Steward |
| ***速狙*** (Fast Snipers) | Physical damage, standard range | Snipers | Eyjafjalla, Exusiai, Yeye, Kroos |
| ***术师*** (Casters) | Arts damage, standard range | Single-target Casters | Eyjafjalla, Logos, Steward |
| ***辅助*** (Supporters) | Can hit 1 tile behind | Supporters | Suzuran, Lily of the Valley, Yeye, Orchid |
| ***狙击*** (Long-range Snipers) | Longer range high ground | Artilleryman, Spreadshooter | Weathered, Toddifons, Rosa |
| ***奶*** (Healers) | Healing ability | Medics, Supporters | Kal'tsit, Skadi the Corrupting Heart, Hibiscus, Ansel |
| ***单奶*** (Single-target Healers) | Attack range depth >= 4 | Medics | Kal'tsit, Reed the Flame Shadow, Ptilopsis, Perfumer, Hibiscus, Ansel |
| ***群奶*** (AoE Healers) | Attack range depth < 4, can heal behind | Medics, Supporters | Nightingale, Ptilopsis, Skadi the Corrupting Heart |
| ***回费*** (DP Recovery) | Cost recovery | Vanguards | Myrtle, Ines, Fang, Vanilla |
| ***地刺*** (Ground Traps) | No blocking, provides DPS or slowing in front of defenders | Ambushers | Gladiia, Ascalon, Manticore |
| ***地面远程*** (Ground Ranged) | Ground long-range, can output behind shields | Instructors, Lords | Horn, Pallas, Thorns, SilverAsh |
| ***领主*** (Lords) | Ground attack range depth > 4, can target air | Fortress, Lord | Thorns, SilverAsh, Chouyu |
| ***盾法*** (Shield Casters) | Short attack range, some tanking ability | Arts Fighter Casters | Lin, Carnelian |
| ***炮灰*** (Fodder) | Absorb attacks, redeploy | Specialists, summons | M3, Red, Myrtle, reserve operators |
| ***大龙*** (Big Dragon) | Tank in front of blockers, easy to combine | Summons | Ling's dragons, Jessica the Flame Purifier's shield |
| ***补给站*** (Supply Stations) | Accelerate main DPS operator skill rotation | Summons | Support Supply Station, Artificer operator summons |
| ***无人机*** (Drones) | Ignore height restrictions for healing summons | Summons | Skadi's Seaborn, Silence's Medical Drone |
| ***支援陷阱*** (Support Traps) | Deployable ground explosives | Summons | Support Mist Generator, Support Rumble-Rumble |
| ***障碍物*** (Obstacles) | Don't take deployment slots, attract aggro or block | Summons | Cage, obstacles |
| ***其他地面*** (Other Ground) | Ground operators not preferred for priority use | Push/pull, block-1 vanguards, swordmasters | Bagpipe, Croissant |
| ***高台预备/其他高台*** (High Ground Reserve/Other High Ground) | High ground operators not preferred for priority use | AoE casters, chain casters, tacticians | Orchid, reserve operators |
::: tip
"Ground Blocking" mainly considers an operator's overall defensive capabilities (sometimes killing everything is also a form of defense), including "Ground Ranged" and "Lord" groups.
::: tip
"Ground Blocking" mainly considers an operator's overall defensive capabilities (sometimes killing everything is also a form of defense), including "Ground Ranged" and "Lord" groups.
"Healers" mainly considers overall healing ability, including single-target and AoE healers. Consider attack range coverage when deciding whether to use single-target healers (healing 4 tiles) or AoE healers (healing behind).
"Healers" mainly considers overall healing ability, including single-target and AoE healers. Consider attack range coverage when deciding whether to use single-target healers (healing 4 tiles) or AoE healers (healing behind).
"Ranged DPS" only considers output ability, mainly a mixed ordering of sniper and caster professions. Consider damage type, attack range and other restrictions when using specific groups like fast snipers, casters, supporters, or shield casters.
"Ranged DPS" only considers output ability, mainly a mixed ordering of sniper and caster professions. Consider damage type, attack range and other restrictions when using specific groups like fast snipers, casters, supporters, or shield casters.
For trap-type summons, because there are many of them, don't put them in the support trap group. It works better to let MAA deploy them automatically.
:::
For trap-type summons, because there are many of them, don't put them in the support trap group. It works better to let MAA deploy them automatically.
:::
2. Groups requiring special handling
In addition to those general groups, sometimes we need more custom tweaks for some operators or types such as
In addition to those general groups, sometimes we need more custom tweaks for some operators or types such as
| Group | Operators | Features |
| :----------------------- | :----------------------------------------- | :--------------------------------------------------------------------------------------------------------------- |
| 益达 (Weathered) | 维什戴尔 (Weathered) | High ground DPS, prioritizing deployment can reduce pressure |
| 棘刺 (Thorns) | 棘刺 (Thorns), 号角 (Horn) | Ground ranged output, Phantom I.S. has some maps with very suitable positions |
| 召唤类 (Summoners) | 凯尔希 (Kal'tsit), 令 (Ling), 稀音 (Scene) | Self-contained ground blocking, some maps need priority deployment, summons can be used as blockers or fodder |
| 情报官 (Agents) | 晓歌 (Cantabile), 伊内丝 (Ines) | Can recover DP, provide side output, and can single cut |
| 浊心斯卡蒂 (Skadi Alter) | 浊心斯卡蒂 (Skadi the Corrupting Heart) | Decent healing under low pressure, but special range, some maps have suitable positions |
| 焰苇 (Reed Alter) | 焰影苇草 (Reed the Flame Shadow) | Commonly used opening operator in Sami I.S., combines healing and output, some maps have optimal positions |
| 玛恩纳 (SilverAsh) | 玛恩纳 (Closure), 银灰 (SilverAsh) | Ground large-area decisive output, can be deployed against bosses |
| 史尔特尔 (Surtr) | 史尔特尔 (Surtr) | Since Surtr always carries S3 at E2, field presence ability is almost zero, deployment priority is extremely low |
| 骰子 (Dice) | 骰子 (Dice) | In Mizuki I.S. the dice needs to be operated separately |
| Group | Operators | Features |
| :--- | :--- | :--- |
| 益达 (Weathered) | 维什戴尔 (Weathered) | High ground DPS, prioritizing deployment can reduce pressure |
| 棘刺 (Thorns) | 棘刺 (Thorns), 号角 (Horn) | Ground ranged output, Phantom I.S. has some maps with very suitable positions |
| 召唤类 (Summoners) | 凯尔希 (Kal'tsit), 令 (Ling), 稀音 (Scene) | Self-contained ground blocking, some maps need priority deployment, summons can be used as blockers or fodder |
| 情报官 (Agents) | 晓歌 (Cantabile), 伊内丝 (Ines) | Can recover DP, provide side output, and can single cut |
| 浊心斯卡蒂 (Skadi Alter) | 浊心斯卡蒂 (Skadi the Corrupting Heart) | Decent healing under low pressure, but special range, some maps have suitable positions |
| 焰苇 (Reed Alter) | 焰影苇草 (Reed the Flame Shadow) | Commonly used opening operator in Sami I.S., combines healing and output, some maps have optimal positions |
| 玛恩纳 (SilverAsh) | 玛恩纳 (Closure), 银灰 (SilverAsh) | Ground large-area decisive output, can be deployed against bosses |
| 史尔特尔 (Surtr) | 史尔特尔 (Surtr) | Since Surtr always carries S3 at E2, field presence ability is almost zero, deployment priority is extremely low |
| 骰子 (Dice) | 骰子 (Dice) | In Mizuki I.S. the dice needs to be operated separately |
::: info
Currently fixed to group unidentified ground crews behind the penultimate formation (other ground), and unidentified high-platform crews behind the penultimate formation (other high-platform)
@@ -207,11 +206,11 @@ For beginner accounts: If 10 recruitments don't satisfy half the team's key oper
"groups": [
"奶" // ("奶" = "Healers") (This indicates a need for 1 healer)
],
"threshold": 1
"threshold": 1
}
...
]
}
}
```
::: caution
@@ -247,7 +246,7 @@ For example: Operator `焰影苇草` (Reed the Flame Shadow) may appear in both
"skill_usage": 2, // Skill usage mode, refer to Combat Operation Protocol, difference is default is 1 if empty
// (0 is don't use automatically, 1 is use when ready, 2 is use x times (x is set by "skill_times" field), 3 is not supported for now)
"skill_times": 2, // Skill usage times, default is 1, effective when "skill_usage" field is 2
"alternate_skill": 2, // Alternative skills used when there is no designated skill, usually 6-star operators who have not
"alternate_skill": 2, // Alternative skills used when there is no designated skill, usually 6-star operators who have not
// E2'd and use 3 skills after promotion
// (in this case, use skill 2 when skill 3 is not available)
"alternate_skill_usage": 1, // Skill use mode for alternative skills (this field has not yet been implemented)
@@ -263,7 +262,7 @@ For example: Operator `焰影苇草` (Reed the Flame Shadow) may appear in both
// If the lineup completeness test is not passed, only key and 0 hope are recruited, saving hope.
"is_start": true, // If true, the operator is a starter. Default to false if empty. If there is no start player in the team,
// only start players and 0 hope players will be recruited, and user-filled players will be recruited.
"auto_retreat": 0, // Auto-retreat after a few full-seconds of deployment, takes effect when greater than 0, mainly used for specialists and vanguards,
"auto_retreat": 0, // Auto-retreat after a few full-seconds of deployment, takes effect when greater than 0, mainly used for specialists and vanguards,
// since I.S. usually starts at 2x speed, it is recommended to set it to skill duration divided by 2
"recruit_priority_when_team_full": 850, // No need to set separately, recruitment priority when lineup completeness is met, default is recruitment priority -100
"promote_priority_when_team_full": 850, // No need to set separately, promotion priority when lineup completeness is met, default is E2 priority +300
@@ -300,7 +299,7 @@ For example: Operator `焰影苇草` (Reed the Flame Shadow) may appear in both
5. Add groups and operators as you see fit
When you add a new group, you can copy operators from existing groups. Refer to the ratings already given by the devs, and modify them on that basis.
When you add a new group, you can copy operators from existing groups. Refer to the ratings already given by the devs, and modify them on that basis.
## Integrated Strategy Step 2: Battle Logic
@@ -311,91 +310,93 @@ For example: Operator `焰影苇草` (Reed the Flame Shadow) may appear in both
(Effective when the combat logic file for the level name does not exist)
1. Perform basic combat operations based on the tile grid of the map
- MAA performs basic combat operations based on whether the grid on the map is a blue or red box, whether it's a high platform or ground, and whether it can be deployed or not.
- MAA decides which job to use based on the name or number of the map only, and does not judge the map's **Standard**, **Emergency**, **Road Network**, **Foldartal Use**, etc.
- MAA performs basic combat operations based on whether the grid on the map is a blue or red box, whether it's a high platform or ground, and whether it can be deployed or not.
- MAA does not judge **in combat the situation of undefined squares on the map**, e.g. the position of the altar in the `Taming Hut`, the `follower effect` of monsters coming out of the left side or the right side.
- MAA decides which job to use based on the name or number of the map only, and does not judge the map's **Standard**, **Emergency**, **Road Network**, **Foldartal Use**, etc.
- MAA does not judge **in combat the situation of undefined squares on the map**, e.g. the position of the altar in the `Taming Hut`, the `follower effect` of monsters coming out of the left side or the right side.
So in the future, you need to try to design a set of combat logic that can cope with **all the different scenarios of a map name** (the above-mentioned scenarios), and be careful of being hung up on the issue that this map operates in Emergency Mode.
2. MAA's Basic Battle Strategy -- Blocking the Blue Entry Point
1. Ground Crews are preferably deployed on (or around) the grid of the Blue Box (why the grid, scroll down), orientated towards the Red box (auto-calculated), and are not deployed on the Red box
2. Prioritise the ground units before healers and ranged operators, in a circle from the blue box to the perimeter
1. Ground Crews are preferably deployed on (or around) the grid of the Blue Box (why the grid, scroll down), orientated towards the Red box (auto-calculated), and are not deployed on the Red box
3. It will keep deploying things that can be deployed according to the logic above (operators, summons, support items, etc.)
2. Prioritise the ground units before healers and ranged operators, in a circle from the blue box to the perimeter
3. It will keep deploying things that can be deployed according to the logic above (operators, summons, support items, etc.)
### Optimise basic combat strategies
1. Blue box Alternative
It's obviously not smart to just pile up your operators in front of the blue box, some levels have tiles where you can't get through, and the defence is very efficient here
It's obviously not smart to just pile up your operators in front of the blue box, some levels have tiles where you can't get through, and the defence is very efficient here
Or if there are levels with multiple blue boxes, and the MAA doesn't know which blue box corresponds to which red box, they may deploy randomly
Or if there are levels with multiple blue boxes, and the MAA doesn't know which blue box corresponds to which red box, they may deploy randomly
At this point, you'll need to open the [map wiki](https://map.ark-nights.com/areas?coord_override=maa) while imagining the battle in your head
At this point, you'll need to open the [map wiki](https://map.ark-nights.com/areas?coord_override=maa) while imagining the battle in your head
First switch the `Coordinate Display` to `MAA` in `Settings`
First switch the `Coordinate Display` to `MAA` in `Settings`
Then, based on your experience, find the coordinates and orientation of the points that need to be prioritised for defence, and write them into the `replacement_home` of the json.
Then, based on your experience, find the coordinates and orientation of the points that need to be prioritised for defence, and write them into the `replacement_home` of the json.
```json
{
"stage_name": "蓄水池", // Level name ("蓄水池" = "Cistern")
"replacement_home": [ // Entry points (blue boxes replacement points),
// at least 1 to be complete
{
"location": [ // Grid coordinates, obtained from the map wiki
6,
4
],
"direction_Doc1": "Preferred direction, it doesn't mean it's definitely in that direction (the algorithm makes its own judgement)",
"direction_Doc2": "Default is none, i.e. there is no recommended direction, it is entirely up to the algorithm to decide",
"direction_Doc3": "none / left / right / up / down / 无 / 上 / 下 / 左 / 右",
"direction": "left" // (This indicates priority deployment of operators
// to the grid at coordinates 6,4 to the left.)
}
],
...
```
```json
{
"stage_name": "蓄水池", // Level name ("蓄水池" = "Cistern")
"replacement_home": [ // Entry points (blue boxes replacement points),
// at least 1 to be complete
{
"location": [ // Grid coordinates, obtained from the map wiki
6,
4
],
"direction_Doc1": "Preferred direction, it doesn't mean it's definitely in that direction (the algorithm makes its own judgement)",
"direction_Doc2": "Default is none, i.e. there is no recommended direction, it is entirely up to the algorithm to decide",
"direction_Doc3": "none / left / right / up / down / 无 / 上 / 下 / 左 / 右",
"direction": "left" // (This indicates priority deployment of operators
// to the grid at coordinates 6,4 to the left.)
}
],
...
```
::: tip
The blue box alternative will take effect when all steps in `deploy_plan` are completed but there are still operators to deploy in the waiting area, following the same logic as the general combat strategy
:::
::: tip
The blue box alternative will take effect when all steps in `deploy_plan` are completed but there are still operators to deploy in the waiting area, following the same logic as the general combat strategy
:::
2. Deployment tile blacklist
There are points of priority for defence and points of priority for not deploying operators, such as where the fireball passes through, under the boss's feet, and some locations that are not good for output.
There are points of priority for defence and points of priority for not deploying operators, such as where the fireball passes through, under the boss's feet, and some locations that are not good for output.
At this point, we introduce `blacklist_location` to blacklist the tiles that we don't want MAA to deploy operators on.
::: info
The tiles added here will not be used, even if they are included in the deployment strategy later on.
:::
At this point, we introduce `blacklist_location` to blacklist the tiles that we don't want MAA to deploy operators on.
::: info
The tiles added here will not be used, even if they are included in the deployment strategy later on.
:::
```json
...
"blacklist_location_Doc": "This is an example of usage, not that the map 'Cistern' needs ban.",
"blacklist_location": [ // Locations where the deployment of the operators is prohibited
[
0,
0
],
[
1,
1
]
],
```
```json
...
"blacklist_location_Doc": "This is an example of usage, not that the map 'Cistern' needs ban.",
"blacklist_location": [ // Locations where the deployment of the operators is prohibited
[
0,
0
],
[
1,
1
]
],
```
3. Alternative map strategies
For example, if there is a monster in the blue box in Mizuki I.S. should we use the dice to ease the pressure of stacking monsters?
For example, if there is a monster in the blue box in Mizuki I.S. should we use the dice to ease the pressure of stacking monsters?
```json
"not_use_dice_Doc": "When the Blue box operator is retreated does MAA need to use the dice. Defaults to false if empty",
"not_use_dice": false,
```
```json
"not_use_dice_Doc": "When the Blue box operator is retreated does MAA need to use the dice. Defaults to false if empty",
"not_use_dice": false,
```
### Or is it an Emergency Operation? It's time to show your true white skills - customised combat strategies
@@ -407,68 +408,69 @@ There is no need to set up too many customised plans when there is a problem. It
1. Deployment of operators using groups
```json
"deploy_plan": [ // Deployment logic: order from top-to-bottom, left-to-right
// Tries to deploy the first operator it finds, or skips it if it doesn't.
{
"groups": ["百嘉", "基石", "地面C", "号角", "挡人先锋"], // Looks for operators from these groups
// ("百嘉" = "Gavial Alter", "基石" = "Cornerstone", "地面C" = "Ground C", "号角" = "Horn", "挡人先锋" = "Blocking Vanguard")
"location": [ 6, 4 ], // Deploys the first agent it finds to coordinates 6,4 and faces left.
"direction": "left", // If it doesn't find it, proceed to the next deployment operation.
},
{
"groups": [ "召唤" ], // ("召唤" = "Summoner")
"location": [ 6, 3 ],
"direction": "left"
},
{
"groups": [ "单奶", "群奶" ], // ("单奶" = "Single-target Healer", "群奶" = "AoE Healer")
"location": [ 6, 2 ],
"direction": "down"
}
]
```
```json
"deploy_plan": [ // Deployment logic: order from top-to-bottom, left-to-right
// Tries to deploy the first operator it finds, or skips it if it doesn't.
{
"groups": ["百嘉", "基石", "地面C", "号角", "挡人先锋"], // Looks for operators from these groups
// ("百嘉" = "Gavial Alter", "基石" = "Cornerstone", "地面C" = "Ground C", "号角" = "Horn", "挡人先锋" = "Blocking Vanguard")
"location": [ 6, 4 ], // Deploys the first agent it finds to coordinates 6,4 and faces left.
"direction": "left", // If it doesn't find it, proceed to the next deployment operation.
},
{
"groups": [ "召唤" ], // ("召唤" = "Summoner")
"location": [ 6, 3 ],
"direction": "left"
},
{
"groups": [ "单奶", "群奶" ], // ("单奶" = "Single-target Healer", "群奶" = "AoE Healer")
"location": [ 6, 2 ],
"direction": "down"
}
]
```
::: info
MAA flattens all deployment commands and then executes the highest-priority deployment operations
Example: deploys [ "百嘉" (Gavial), "基石" (Cornerstone), "地面C" (Ground C)] on [6,4], deploys [ "基石" (Cornerstone), "地面C" (Ground C)] on [6,3], then MAA will flatten the deployment commands to [ "百嘉" (Gavial), "基石" (Cornerstone), "地面C" (Ground C), "基石" (Cornerstone), "地面C" (Ground C)]
If a "百嘉" (Gavial) operator on [6,4] is retreated during battle, the "基石" (Cornerstone) operator in hand, if available, will be deployed on [6,4], instead of [6,3]
::: info
MAA flattens all deployment commands and then executes the highest-priority deployment operations
Example: deploys [ "百嘉" (Gavial), "基石" (Cornerstone), "地面C" (Ground C)] on [6,4], deploys [ "基石" (Cornerstone), "地面C" (Ground C)] on [6,3], then MAA will flatten the deployment commands to [ "百嘉" (Gavial), "基石" (Cornerstone), "地面C" (Ground C), "基石" (Cornerstone), "地面C" (Ground C)]
If a "百嘉" (Gavial) operator on [6,4] is retreated during battle, the "基石" (Cornerstone) operator in hand, if available, will be deployed on [6,4], instead of [6,3]
This means that from a macro perspective, after each deployment action is completed, it will start checking for executable strategies from the beginning (the current step's position has no already placed operators, and there are operators in the deployment area belonging to this step's operator group)
:::
This means that from a macro perspective, after each deployment action is completed, it will start checking for executable strategies from the beginning (the current step's position has no already placed operators, and there are operators in the deployment area belonging to this step's operator group)
:::
::: tip
Some commonly used operator group usages:
1. In many operations, the main defensive point combination is [ "地面阻挡" (Ground Blocking), "处决者" (Executor), "其他地面" (Other Ground)], which means when the main tanking operator dies, it will try to use an executor to delay the CD; when there's too much survival pressure on this point, consider using [ "重装" (Heavy Defender), "地面阻挡" (Ground Blocking), "处决者" (Executor), "炮灰" (Fodder), "其他地面" (Other Ground)]; for positions behind defenders, prioritize [ "地面远程" (Ground Ranged), "地面阻挡" (Ground Blocking), "处决者" (Executor), "其他地面" (Other Ground)]; to purely attract aggro or sacrifice, use [ "炮灰" (Fodder), "障碍物" (Obstacles), "其他地面" (Other Ground)]
::: tip
Some commonly used operator group usages:
2. High ground position combinations commonly use [ "高台输出" (Ranged DPS), "其他高台" (Other High Ground)], if you want any high ground to be placed you can use [ "高台输出" (Ranged DPS), "狙击" (Sniper), "辅助" (Supporter), "盾法" (Shield Caster), "其他高台" (Other High Ground)]
1. In many operations, the main defensive point combination is [ "地面阻挡" (Ground Blocking), "处决者" (Executor), "其他地面" (Other Ground)], which means when the main tanking operator dies, it will try to use an executor to delay the CD; when there's too much survival pressure on this point, consider using [ "重装" (Heavy Defender), "地面阻挡" (Ground Blocking), "处决者" (Executor), "炮灰" (Fodder), "其他地面" (Other Ground)]; for positions behind defenders, prioritize [ "地面远程" (Ground Ranged), "地面阻挡" (Ground Blocking), "处决者" (Executor), "其他地面" (Other Ground)]; to purely attract aggro or sacrifice, use [ "炮灰" (Fodder), "障碍物" (Obstacles), "其他地面" (Other Ground)]
3. Some ground positions are suitable for both SilverAsh and ground trap operators [ "玛恩纳" (SilverAsh), "地刺" (Ground Traps)]
:::
2. High ground position combinations commonly use [ "高台输出" (Ranged DPS), "其他高台" (Other High Ground)], if you want any high ground to be placed you can use [ "高台输出" (Ranged DPS), "狙击" (Sniper), "辅助" (Supporter), "盾法" (Shield Caster), "其他高台" (Other High Ground)]
3. Some ground positions are suitable for both SilverAsh and ground trap operators [ "玛恩纳" (SilverAsh), "地刺" (Ground Traps)]
:::
2. Deployment of operators at a point in time
::: tip
Suitable for certain single-cutting operators or usage scenarios that require cannon fodder
:::
::: tip
Suitable for certain single-cutting operators or usage scenarios that require cannon fodder
:::
```json
"deploy_plan": [
{
"groups": [ "异德", "刺客", "挡人先锋", "其他地面" ],
// ("异德" = "Strange Virtue", "刺客" = "Assassin", "挡人先锋" = "Blocking Vanguard", "其他地面" = "Other Ground")
"location": [ 5, 3 ],
"direction": "left",
"condition": [ 0, 3 ] // This operation is only performed when the number of kills is 0 - 3
},
{
"groups": [ "异德", "刺客", "挡人先锋", "其他地面" ],
"location": [ 5, 3 ],
"direction": "left",
"condition": [ 6, 10 ]
},
...
]
```
```json
"deploy_plan": [
{
"groups": [ "异德", "刺客", "挡人先锋", "其他地面" ],
// ("异德" = "Strange Virtue", "刺客" = "Assassin", "挡人先锋" = "Blocking Vanguard", "其他地面" = "Other Ground")
"location": [ 5, 3 ],
"direction": "left",
"condition": [ 0, 3 ] // This operation is only performed when the number of kills is 0 - 3
},
{
"groups": [ "异德", "刺客", "挡人先锋", "其他地面" ],
"location": [ 5, 3 ],
"direction": "left",
"condition": [ 6, 10 ]
},
...
]
```
3. Retrieval of the operators at some point
::: tip
@@ -477,64 +479,64 @@ There is no need to set up too many customised plans when there is a problem. It
Deployment and retreat commands for the same position should have non-overlapping condition numbers, otherwise it will instantly retreat after deploying
:::
```json
"retreat_plan": [ // Retrieval targets at specific points in time
{
"location": [ 4, 1 ],
"condition": [ 7, 8 ] // At 7 - 8 kills, remove operator on [4,1], skip if there are none.
}
]
```
```json
"retreat_plan": [ // Retrieval targets at specific points in time
{
"location": [ 4, 1 ],
"condition": [ 7, 8 ] // At 7 - 8 kills, remove operator on [4,1], skip if there are none.
}
]
```
4. Disable a skill at a certain point in time (to do)
5. Additional fields (not recommended)
```json
"role_order_Doc": "Operator type deployment order, the unspecified parts will be filled in with the order of Guard, Vanguard, Medic, Defender, Sniper, Caster, Supporter, Specialist, Summoner, and so on.",
"role_order": [ // Not recommended, please configure the deploy_plan field.
"warrior",
"pioneer",
"medic",
"tank",
"sniper",
"caster",
"support",
"special",
"drone"
],
"force_air_defense_when_deploy_blocking_num_Doc": "When there are 10000 blocking units on the field, it will start to force deploying a total of 1 pair of empty units (fill in or not will not affect the normal deployment logic), during this period, it does not prohibit the deployment of medical units (no default is false).",
"force_air_defense_when_deploy_blocking_num": { // Not recommended, please configure the deploy_plan field.
"melee_num": 10000,
"air_defense_num": 1,
"ban_medic": false
},
"force_deploy_direction_Doc": "These points force deployment directions for certain occupation",
"force_deploy_direction": [ // Not recommended, please configure the deploy_plan field.
{
"location": [
1,
1
],
"role_Doc": "Application of mandatory orientation to the occupation entered",
"role": [
"warrior",
"pioneer"
],
"direction": "up"
},
{
"location": [
3,
1
],
"role": [
"sniper"
],
"direction": "left"
}
],
```
```json
"role_order_Doc": "Operator type deployment order, the unspecified parts will be filled in with the order of Guard, Vanguard, Medic, Defender, Sniper, Caster, Supporter, Specialist, Summoner, and so on.",
"role_order": [ // Not recommended, please configure the deploy_plan field.
"warrior",
"pioneer",
"medic",
"tank",
"sniper",
"caster",
"support",
"special",
"drone"
],
"force_air_defense_when_deploy_blocking_num_Doc": "When there are 10000 blocking units on the field, it will start to force deploying a total of 1 pair of empty units (fill in or not will not affect the normal deployment logic), during this period, it does not prohibit the deployment of medical units (no default is false).",
"force_air_defense_when_deploy_blocking_num": { // Not recommended, please configure the deploy_plan field.
"melee_num": 10000,
"air_defense_num": 1,
"ban_medic": false
},
"force_deploy_direction_Doc": "These points force deployment directions for certain occupation",
"force_deploy_direction": [ // Not recommended, please configure the deploy_plan field.
{
"location": [
1,
1
],
"role_Doc": "Application of mandatory orientation to the occupation entered",
"role": [
"warrior",
"pioneer"
],
"direction": "up"
},
{
"location": [
3,
1
],
"role": [
"sniper"
],
"direction": "left"
}
],
```
::: info
When MAA cannot find a customized combat strategy for the current level, it will automatically execute the general combat strategy.
@@ -632,7 +634,7 @@ The Encounter options can be modified to guide MAA towards special endings
// (does not affect the operation, useful for convenient sorting)
"no": 167 // Collectible number (can be found in the wiki, does not affect the operation)
},
...
{
"name": "扩散之手", // ("扩散之手" = "Hand of Diffusion")
@@ -641,7 +643,7 @@ The Encounter options can be modified to guide MAA towards special endings
// you will try to buy the Hand of Diffusion when you encounter it)
],
"effect": "【扩散术师】、【链术师】和【轰击术师】每对一个单位造成伤害就回复2点技力值", // ("[Diffusion Artist], [Chain Artist], and [Blast Artist] regain 2 SP for each unit they deal damage to.")
"no": 136
"no": 136
},
...
@@ -652,7 +654,7 @@ The Encounter options can be modified to guide MAA towards special endings
// you will try to buy a Halberd-Breaker when you encounter it)
],
"effect": "所有【近卫】干员的防御力-40%,但攻击力+40%,攻击速度+30", // ("All [Guard] Operators members have -40% Defence, but +40% Attack Power and +30% Attack Speed.")
"no": 16
"no": 16
},
...
@@ -759,7 +761,7 @@ Here is an example task configuration for farming hidden Collapsal Paradigms:
"squad": "远程战术分队", // ("远程战术分队" = "Ranged Tactics Squad")
"roles": "稳扎稳打", // ("稳扎稳打" = "Steady Approach")
"core_char": "维什戴尔", // ("维什戴尔" = "Weathered")
"expected_collapsal_paradigms": ["目空一些", "睁眼瞎", "图像损坏", "一抹黑"]
"expected_collapsal_paradigms": ["目空一些", "睁眼瞎", "图像损坏", "一抹黑"]
// ("目空一些" = "Blank Somewhat", "睁眼瞎" = "Blind Eye", "图像损坏" = "Image Distortion", "一抹黑" = "Pitch Black")
}
```

View File

@@ -22,22 +22,22 @@ Appends a task.
#### Return Value
- `TaskId`
The task ID if the task is successfully appended, for the following configuration;
0 if the task is not successfully appended.
The task ID if the task is successfully appended, for the following configuration;
0 if the task is not successfully appended.
#### Parameter Description
- `AsstHandle handle`
Instance handle
Instance handle
- `const char* type`
Task type
Task type
- `const char* params`
Task parameters in JSON
Task parameters in JSON
##### List of Task Types
- `StartUp`
Start-up
Start-up
```json5
// Corresponding task parameters
@@ -54,7 +54,7 @@ Appends a task.
```
- `CloseDown`
Close Game Client
Close Game Client
```json5
// Corresponding task parameters
@@ -66,7 +66,7 @@ Appends a task.
```
- `Fight`
Operation
Operation
```json5
// Corresponding task parameters
@@ -105,7 +105,7 @@ Appends a task.
Supports some of the special stages, please refer to [autoLocalization example](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/tools/AutoLocalization/example/en-us.xaml#L260).
- `Recruit`
Recruitment
Recruitment
```json5
// Corresponding task parameters
@@ -149,7 +149,7 @@ Supports some of the special stages, please refer to [autoLocalization example](
```
- `Infrast`
Infrastructure shifting
Infrastructure shifting
```json5
{
@@ -182,8 +182,8 @@ Supports some of the special stages, please refer to [autoLocalization example](
```
- `Mall`
Collecting Credits and auto-purchasing.
Will buy items in order following `buy_first` list, buy other items from left to right ignoring items in `blacklist`, and buy other items from left to right ignoring the `blacklist` while credit overflows.
Collecting Credits and auto-purchasing.
Will buy items in order following `buy_first` list, buy other items from left to right ignoring items in `blacklist`, and buy other items from left to right ignoring the `blacklist` while credit overflows.
```json5
// Corresponding task parameters
@@ -209,7 +209,7 @@ Supports some of the special stages, please refer to [autoLocalization example](
```
- `Award`
Collecting various rewards
Collecting various rewards
```json5
// Corresponding task parameters
@@ -225,7 +225,7 @@ Supports some of the special stages, please refer to [autoLocalization example](
```
- `Roguelike`
Integrated Strategies
Integrated Strategies
```json5
// Task parameters
@@ -250,7 +250,7 @@ Supports some of the special stages, please refer to [autoLocalization example](
// 7 - Deep Dive rewards farming, same as mode 0 except for specific mode adaptations
"squad": string, // Starting squad name, optional, default is "指挥分队" (Command Squad);
"roles": string, // Starting role group, optional, default is "取长补短" (Complementary Strength);
"core_char": string, // Starting operator name, optional; supports only single operator **in Chinese**, regardless of server;
"core_char": string, // Starting operator name, optional; supports only single operator **in Chinese**, regardless of server;
// leave empty or set to "" to auto-select based on level
"use_support": bool, // Whether the starting operator is a support operator, optional, default is false
"use_nonfriend_support": bool, // Whether non-friend support operators are allowed, optional, default is false; only effective when `use_support` is true
@@ -309,7 +309,7 @@ Supports some of the special stages, please refer to [autoLocalization example](
For specific information about the Collapsal Paradigm farming feature, please refer to [Integrated Strategy Schema](./integrated-strategy-schema.md#sami-integrated-strategy-collapsal-paradigms)
- `Copilot`
Auto combat feature
Auto combat feature
```json5
{
@@ -322,7 +322,7 @@ For specific information about the Collapsal Paradigm farming feature, please re
For more details about auto-combat JSON, please refer to [Combat Operation Protocol](./copilot-schema.md)
- `SSSCopilot`
Auto combat feature for Stationary Security Service
Auto combat feature for Stationary Security Service
```json5
{
@@ -335,7 +335,7 @@ For more details about auto-combat JSON, please refer to [Combat Operation Proto
For more details about Stationary Security Service JSON, please refer to [SSS Schema](./sss-schema.md)
- `Depot`
Depot recognition
Depot recognition
```json5
// Corresponding task parameters
@@ -345,7 +345,7 @@ For more details about Stationary Security Service JSON, please refer to [SSS Sc
```
- `OperBox`
Operator box recognition
Operator box recognition
```json5
// Corresponding task parameters
@@ -355,7 +355,7 @@ For more details about Stationary Security Service JSON, please refer to [SSS Sc
```
- `Reclamation`
Reclamation Algorithm
Reclamation Algorithm
```json5
{
@@ -370,7 +370,7 @@ For more details about Stationary Security Service JSON, please refer to [SSS Sc
"tools_to_craft": [
string, // Automatically crafted items, optional, glow stick by default
...
]
]
// Suggested to fill in the substring
"increment_mode": int, // Click type, optional. 0 by default
// 0 - Rapid Click
@@ -380,7 +380,7 @@ For more details about Stationary Security Service JSON, please refer to [SSS Sc
```
- `Custom`
Custom Task
Custom Task
```json5
{
@@ -394,7 +394,7 @@ For more details about Stationary Security Service JSON, please refer to [SSS Sc
```
- `SingleStep`
Single-step task (currently only supports copilot)
Single-step task (currently only supports copilot)
```json5
{
@@ -412,7 +412,7 @@ For more details about Stationary Security Service JSON, please refer to [SSS Sc
```
- `VideoRecognition`
Video recognition, currently only supports operation (combat) video
Video recognition, currently only supports operation (combat) video
```json5
{
@@ -436,17 +436,17 @@ Set task parameters
#### Return Value
- `bool`
Whether the parameters are successfully set.
Whether the parameters are successfully set.
#### Parameter Description
- `AsstHandle handle`
Instance handle
Instance handle
- `TaskId task`
Task ID, the return value of `AsstAppendTask`
Task ID, the return value of `AsstAppendTask`
- `const char* params`
Task parameter in JSON, same as `AsstAppendTask`
For those fields that do not mention "Editing in run-time is not supported" can be changed during run-time. Otherwise these changes will be ignored when the task is running.
Task parameter in JSON, same as `AsstAppendTask`
For those fields that do not mention "Editing in run-time is not supported" can be changed during run-time. Otherwise these changes will be ignored when the task is running.
### `AsstSetStaticOption`
@@ -463,14 +463,14 @@ Set process-level parameters
#### Return Value
- `bool`
Is the setup successful
Is the setup successful
#### Parameter Description
- `AsstStaticOptionKey key`
key
key
- `const char* value`
value
value
##### List of Key and value
@@ -491,16 +491,16 @@ Set instance-level parameters
#### Return Value
- `bool`
Is the setup successful
Is the setup successful
#### Parameter Description
- `AsstHandle handle`
handle
handle
- `AsstInstanceOptionKey key`
key
key
- `const char* value`
value
value
##### List of Key and value

View File

@@ -88,7 +88,6 @@ The endpoint should be reentrant and repeatedly return tasks to execute, as MAA
- Settings-[SettingsName] task types include Settings-ConnectionAddress, Settings-Stage1
- Settings series tasks still execute sequentially rather than immediately, queuing behind previous tasks
- Multiple immediate execution tasks also execute in issued order, though since these tasks execute quickly, their order generally doesn't matter
:::
## Task Reporting Endpoint

View File

@@ -99,7 +99,7 @@ Please note that JSON files do not support comments. The comments in this docume
"highResolutionSwipeFix": false, // Optional, whether to enable high-resolution swipe fix
// Currently only needed for stage navigation which doesn't use unity swipe method
// Default is false
/* Fields below only valid when algorithm is MatchTemplate */
"template": "xxx.png", // Optional, image file to match, can be string or string list
@@ -165,7 +165,7 @@ Please note that JSON files do not support comments. The comments in this docume
/* Fields below only valid when algorithm is JustReturn and action is Input */
"inputText": "A string text.", // Required, text to input as string
/* Fields below only valid when algorithm is FeatureMatch */
"template": "xxx.png", // Optional, image file to match, can be string or string list
@@ -189,14 +189,14 @@ Please note that JSON files do not support comments. The comments in this docume
Task list type fields (`sub`, `next`, `onErrorNext`, `exceededNext`, `reduceOtherTimes`) support expression calculations.
| Symbol | Meaning | Example |
| :----------: | :--------------------------------------------------------------------------------------: | :------------------------------------: |
| `@` | `@`-type Task | `Fight@ReturnTo` |
| `#` (unary) | Virtual task | `#self` |
| `#` (binary) | Virtual task | `StartUpThemes#next` |
| `*` | Repeat tasks | `(ClickCornerAfterPRTS+ClickCorner)*5` |
| `+` | Task list merge (in next-type attributes, only first occurrence of same-name tasks kept) | `A+B` |
| `^` | Task list difference (in first but not second, order preserved) | `(A+A+B+C)^(A+B+D)` (result is `C`) |
| Symbol | Meaning | Example |
| :---------: | :---------------------------------------------------------: | :---------------------------------------: |
| `@` | `@`-type Task | `Fight@ReturnTo` |
| `#` (unary) | Virtual task | `#self` |
| `#` (binary)| Virtual task | `StartUpThemes#next` |
| `*` | Repeat tasks | `(ClickCornerAfterPRTS+ClickCorner)*5` |
| `+` | Task list merge (in next-type attributes, only first occurrence of same-name tasks kept) | `A+B` |
| `^` | Task list difference (in first but not second, order preserved) | `(A+A+B+C)^(A+B+D)` (result is `C`) |
Operators `@`, `#`, `*`, `+`, `^` have precedence: `#` (unary) > `@` = `#` (binary) > `*` > `+` = `^`.
@@ -204,31 +204,31 @@ Operators `@`, `#`, `*`, `+`, `^` have precedence: `#` (unary) > `@` = `#` (bina
### Template Task
**Template tasks** include derived tasks and `@`-type tasks. The core of the template task can be understood as **modifying the default values of fields** based on the _base task_.
**Template tasks** include derived tasks and `@`-type tasks. The core of the template task can be understood as **modifying the default values of fields** based on the *base task*.
#### Derived Task
Tasks with the `baseTask` field are derived tasks, and the task corresponding to the `baseTask` field is referred to as its _base task_ of this derived task. For a derived task,
Tasks with the `baseTask` field are derived tasks, and the task corresponding to the `baseTask` field is referred to as its *base task* of this derived task. For a derived task,
1. If it is an template matching task, the default value for the `template` field remains `"TaskName.png"`;
2. If the `algorithm` field differs from its _base task_, the derived class parameters are not inherited (only parameters defined in `TaskInfo` are inherited);
3. The default values for all other fields are the corresponding fields of its _base task_.
2. If the `algorithm` field differs from its *base task*, the derived class parameters are not inherited (only parameters defined in `TaskInfo` are inherited);
3. The default values for all other fields are the corresponding fields of its *base task*.
#### Implicit `@`-type Task
If task `"A"` exists and there is not a task directly defined in any task file such as `"B@A"`, it is an implicit `@`-type task, and task `"A"` is called the _base task_ of task `"B@A"`. For an implicit `@`-type task,
If task `"A"` exists and there is not a task directly defined in any task file such as `"B@A"`, it is an implicit `@`-type task, and task `"A"` is called the *base task* of task `"B@A"`. For an implicit `@`-type task,
1. The default values for task list type fields (`sub`, `next`, `onErrorNext`, `exceededNext`, `reduceOtherTimes`) are set to the base task's corresponding fields with the `B@` prefix directly appended (if the task name starts with `#`, the `B` prefix is appended);
2. The default values for all other fields (including the `template` field) are the corresponding fields of its _base task_.
2. The default values for all other fields (including the `template` field) are the corresponding fields of its *base task*.
#### Explicit `@`-type Task
If task `"A"` exists and there is a task directly defined in the task file such as `"B@A"`, it is an explicit `@`-type task, and task `"A"` is called the _base task_ of task `"B@A"`. For an explicit `@`-type task,
If task `"A"` exists and there is a task directly defined in the task file such as `"B@A"`, it is an explicit `@`-type task, and task `"A"` is called the *base task* of task `"B@A"`. For an explicit `@`-type task,
1. The default values for task list type fields (`sub`, `next`, `onErrorNext`, `exceededNext`, `reduceOtherTimes`) are set to the base task's corresponding fields with the `B@` prefix directly appended (if the task name starts with `#`, the `B` prefix is appended);
2. If it is an template matching task, the default value for the `template` field remains `"TaskName.png"`;
3. If the `algorithm` field differs from its _base task_, the derived class parameters are not inherited (only parameters defined in `TaskInfo` are inherited);
4. The default values for all other fields are the corresponding fields of its _base task_.
3. If the `algorithm` field differs from its *base task*, the derived class parameters are not inherited (only parameters defined in `TaskInfo` are inherited);
4. The default values for all other fields are the corresponding fields of its *base task*.
### Virtual Task (`#`-type Task)
@@ -236,18 +236,18 @@ Virtual tasks are tasks of the form `"#{sharp_type}"` or `"B#{sharp_type}"`, whe
Virtual tasks can be divided into **command virtual tasks** (`#none` / `#self` / `#back`) and **field virtual tasks** (`#next`, etc.).
| Virtual Task Type | Meaning | Simple example |
| :---------------: | :-------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------: |
| none | Empty Task | Skip directly<sup>1</sup><br>`"A": {"next": ["#none", "T1"]}` is interpreted as `"A": {"next": ["T1"]}`<br>`"A#none + T1"` is interpreted as `"T1"` |
| self | Current Task Name | `"A": {"next": "#self"}` in `"#self"` is interpreted as `"A"`<br>`"B": {"next": "A@B@C#self"}` in `"A@B@C#self"` is interpreted as `"B"`.<sup>2</sup> |
| back | # Preceding task name | `"A@B#back"` is interpreted as `"A@B"`<br>`"#back"` will be skipped if it appears directly<sup>3</sup> |
| next, sub, etc. | # The field corresponding to the previous task name | Take `next` for example:<br>`"A#next"` is interpreted as `Task.get("A")->next`<br>`"#next"` will be skipped if it appears directly |
| Virtual Task Type | Meaning | Simple example |
|:---------:|:---:|:--------:|
| none | Empty Task | Skip directly<sup>1</sup><br>`"A": {"next": ["#none", "T1"]}` is interpreted as `"A": {"next": ["T1"]}`<br>`"A#none + T1"` is interpreted as `"T1"` |
| self | Current Task Name | `"A": {"next": "#self"}` in `"#self"` is interpreted as `"A"`<br>`"B": {"next": "A@B@C#self"}` in `"A@B@C#self"` is interpreted as `"B"`.<sup>2</sup> |
| back | # Preceding task name | `"A@B#back"` is interpreted as `"A@B"`<br>`"#back"` will be skipped if it appears directly<sup>3</sup> |
| next, sub, etc. | # The field corresponding to the previous task name | Take `next` for example:<br>`"A#next"` is interpreted as `Task.get("A")->next`<br>`"#next"` will be skipped if it appears directly |
_Note<sup>1</sup>: `"#none"` generally used in conjunction with the template task to add prefixes, or used in the `baseTask` field to avoid unnecessary fields in multi-file inheritance._
*Note<sup>1</sup>: `"#none"` generally used in conjunction with the template task to add prefixes, or used in the `baseTask` field to avoid unnecessary fields in multi-file inheritance.*
_Note<sup>2</sup>: `"XXX#self"` has the same meaning as `"#self"`._
*Note<sup>2</sup>: `"XXX#self"` has the same meaning as `"#self"`.*
_Note<sup>3</sup>: When several tasks have `"next": [ "#back" ]`, `"T1@T2@T3"` represents executing `T3`, `T2`, and `T1` in sequence._
*Note<sup>3</sup>: When several tasks have `"next": [ "#back" ]`, `"T1@T2@T3"` represents executing `T3`, `T2`, and `T1` in sequence.*
### Multi-File Task
@@ -260,86 +260,86 @@ If a task defined in a later loaded task file (e.g. `tasks.json` for foreign ser
- Derived task example (field `baseTask`)
Assume the following two tasks are defined:
Assume the following two tasks are defined:
```json
"Return": {
"action": "ClickSelf",
"next": [ "Stop" ]
},
"Return2": {
"baseTask": "Return"
},
```
```json
"Return": {
"action": "ClickSelf",
"next": [ "Stop" ]
},
"Return2": {
"baseTask": "Return"
},
```
The parameters of the `"Return2"` task are directly inherited from the `"Return"` task, and actually include the following parameters:
The parameters of the `"Return2"` task are directly inherited from the `"Return"` task, and actually include the following parameters:
```json
"Return2": {
"algorithm": "MatchTemplate", // Directly inherited
"template": "Return2.png", // "TaskName.png"
"action": "ClickSelf", // Directly inherited
"next": [ "Stop" ] // Directly inherited, without any prefix compared to the Template Task
}
```
```json
"Return2": {
"algorithm": "MatchTemplate", // Directly inherited
"template": "Return2.png", // "TaskName.png"
"action": "ClickSelf", // Directly inherited
"next": [ "Stop" ] // Directly inherited, without any prefix compared to the Template Task
}
```
- `@`-type task example
Assume that a task `"A"` with the following parameters is defined:
Assume that a task `"A"` with the following parameters is defined:
```json
"A": {
"template": "A.png",
...,
"next": [ "N1", "#back" ]
},
```
```json
"A": {
"template": "A.png",
...,
"next": [ "N1", "#back" ]
},
```
If the task `"B@A"` is not directly defined, then the task `"B@A"` actually has the following parameters:
If the task `"B@A"` is not directly defined, then the task `"B@A"` actually has the following parameters:
```json
"B@A": {
"template": "A.png",
...,
"next": [ "B@N1", "B#back" ]
}
```
```json
"B@A": {
"template": "A.png",
...,
"next": [ "B@N1", "B#back" ]
}
```
If the task `"B@A"` is defined as `"B@A": {}`, then the task `"B@A"` actually has the following parameters:
If the task `"B@A"` is defined as `"B@A": {}`, then the task `"B@A"` actually has the following parameters:
```json
"B@A": {
"template": "B@A.png",
...,
"next": [ "B@N1", "B#back" ]
}
```
```json
"B@A": {
"template": "B@A.png",
...,
"next": [ "B@N1", "B#back" ]
}
```
- Virtual task example
```json
{
"A": { "next": ["N1", "N2"] },
"C": { "next": ["B@A#next"] },
```json
{
"A": { "next": ["N1", "N2"] },
"C": { "next": ["B@A#next"] },
"Loading": {
"next": ["#self", "#next", "#back"]
},
"B": {
"next": ["Other", "B@Loading"]
}
}
```
"Loading": {
"next": ["#self", "#next", "#back"]
},
"B": {
"next": ["Other", "B@Loading"]
}
}
```
Results in:
Results in:
```cpp
Task.get("C")->next = { "B@N1", "B@N2" };
```cpp
Task.get("C")->next = { "B@N1", "B@N2" };
Task.get("B@Loading")->next = { "B@Loading", "Other", "B" };
Task.get("Loading")->next = { "Loading" };
Task.get_raw("B@Loading")->next = { "B#self", "B#next", "B#back" };
```
Task.get("B@Loading")->next = { "B@Loading", "Other", "B" };
Task.get("Loading")->next = { "Loading" };
Task.get_raw("B@Loading")->next = { "B#self", "B#next", "B#back" };
```
### Precautions
@@ -347,41 +347,41 @@ If the tasks defined in the task list type field (`next`, etc.) contain low-prio
1. Special cases caused by the order of operations between `@` and double `#`
```json
{
"A": { "next": ["N0"] },
"B": { "next": ["A#next"] },
"C@A": { "next": ["N1"] }
}
```
```json
{
"A": { "next": ["N0"] },
"B": { "next": ["A#next"] },
"C@A": { "next": ["N1"] }
}
```
In the above case, `"C@B" -> next` (i.e., `C@A#next`) is `[ "N1" ]` rather than `[ "C@N0" ]`.
In the above case, `"C@B" -> next` (i.e., `C@A#next`) is `[ "N1" ]` rather than `[ "C@N0" ]`.
2. Special cases caused by the order of operations between `@` and `+`
```json
{
"A": { "next": ["#back + N0"] },
"B@A": {}
}
```
```json
{
"A": { "next": ["#back + N0"] },
"B@A": {}
}
```
In the above case,
In the above case,
```cpp
Task.get("A")->next = { "N0" };
```cpp
Task.get("A")->next = { "N0" };
Task.get_raw("B@A")->next = { "B#back + N0" };
Task.get("B@A")->next = { "B", "N0" }; // Note that it is not [ "B", "B@N0" ]
```
Task.get_raw("B@A")->next = { "B#back + N0" };
Task.get("B@A")->next = { "B", "N0" }; // Note that it is not [ "B", "B@N0" ]
```
In fact, you can use this feature to avoid adding unnecessary prefixes by simply defining
In fact, you can use this feature to avoid adding unnecessary prefixes by simply defining
```json
{
"A": { "next": ["#none + N0"] }
}
```
```json
{
"A": { "next": ["#none + N0"] }
}
```
## Runtime Task Modification

View File

@@ -12,7 +12,6 @@ dir:
![MAA Logo =256x256](/images/maa-logo_512x512.png)
<!-- markdownlint-restore -->
# MAA
![C++](https://img.shields.io/badge/C++-20-%2300599C?logo=cplusplus)
@@ -26,7 +25,7 @@ An Arknights assistant
Based on image recognition technology, complete all daily tasks with one click!
Development actively in progress ✿✿ヽ(°▽°)ノ✿
Development actively in progress ✿✿ヽ(°▽°)ノ✿
:::
@@ -91,9 +90,11 @@ MAA supports command-line interface (CLI) operation on Linux, macOS, and Windows
### Main Related Projects
**The project team is currently in great need of front-end developers. If you have relevant experience, we welcome you to join us!**
- New Framework: [MaaFramework](https://github.com/MaaXYZ/MaaFramework)
- [Copilot Site](https://prts.plus) Frontend: [zoot-plus-frontend](https://github.com/ZOOT-Plus/zoot-plus-frontend)
- [Copilot Site](https://prts.plus) Backend: [ZootPlusBackend](https://github.com/ZOOT-Plus/ZootPlusBackend)
- [Copilot Site](https://prts.plus) Frontend: [maa-copilot-frontend](https://github.com/MaaAssistantArknights/maa-copilot-frontend)
- [Copilot Site](https://prts.plus) Backend: [MaaBackendCenter](https://github.com/MaaAssistantArknights/MaaBackendCenter)
- [Official Website](https://maa.plus): [Frontend](https://github.com/MaaAssistantArknights/MaaAssistantArknights/tree/dev/website)
- Deep Learning: [MaaAI](https://github.com/MaaAssistantArknights/MaaAI)
@@ -193,9 +194,9 @@ User Exchange QQ Groups: [MAA Usage & Arknights Exchange QQ Group](https://api.m
Discord Server: [Invite Link](https://discord.gg/23DfZ9uA4V)
User Exchange Telegram Group: [Telegram Group](https://t.me/+Mgc2Zngr-hs3ZjU1)
Auto-battle JSON strategy sharing: [prts.plus](https://prts.plus)
Bilibili Live: [MrEO Live](https://live.bilibili.com/2808861) coding streams & [MAA-Official Live](https://live.bilibili.com/27548877) gaming/chat
Bilibili Live: [MrEO Live](https://live.bilibili.com/2808861) coding streams & [MAA-Official Live](https://live.bilibili.com/27548877) gaming/chat
Technical Group (non-Arknights, no casual chat): [Internal Competition Hell! (QQ Group)](https://jq.qq.com/?_wv=1027&k=ypbzXcA2)
Developer Group: [QQ Group](https://jq.qq.com/?_wv=1027&k=JM9oCk3C)
Developer Group: [QQ Group](https://jq.qq.com/?_wv=1027&k=JM9oCk3C)
If you find the software helpful, please give us a Star! ~ (the small star at the top right of the webpage), that's the biggest support

View File

@@ -6,4 +6,4 @@ dir:
order: 2
---
<Redirect to="development" />
<Catalog base='/ja-jp/develop/' />

View File

@@ -17,46 +17,48 @@ icon: iconoir:developer
2. [MAA メインリポジトリ](https://github.com/MaaAssistantArknights/MaaAssistantArknights)を開き、`Fork``Create fork` をクリック
3. 自身のリポジトリの dev ブランチをクローン(サブモジュール含む)
```bash
git clone --recurse-submodules <リポジトリの git リンク> -b dev
```
```bash
git clone --recurse-submodules <リポジトリの git リンク> -b dev
```
::: warning
Visual Studio など `--recurse-submodules` パラメータに対応していない Git GUI を使用する場合、クローン後に以下を実行:
::: warning
Visual Studio など `--recurse-submodules` パラメータに対応していない Git GUI を使用する場合、クローン後に以下を実行:
```bash
git submodule update --init
```
```bash
git submodule update --init
```
:::
:::
4. 事前ビルド済みサードパーティライブラリのダウンロード
**Python環境が必要インストール方法は各自検索**
_tools/maadeps-download.py はプロジェクトルートに配置_
**Python環境が必要インストール方法は各自検索**
_tools/maadeps-download.py はプロジェクトルートに配置_
```cmd
python tools/maadeps-download.py
```
```cmd
python tools/maadeps-download.py
```
5. 開発環境の設定
- `Visual Studio 2022 Community` をインストール時、`C++ によるデスクトップ開発` と `.NET デスクトップ開発` を選択必須
- `Visual Studio 2022 Community` をインストール時、`C++ によるデスクトップ開発` と `.NET デスクトップ開発` を選択必須
6. `MAA.sln` をダブルクリックで開き、Visual Studio にプロジェクトを自動ロード
7. VS の設定
- 上部設定バーで `RelWithDebInfo` `x64` を選択Release ビルド/ARM プラットフォームの場合は不要)
- `MaaWpfGui` 右クリック → プロパティ → デバッグ → ネイティブデバッグを有効化C++ Core へのブレークポイント設定可能
- 上部設定バーで `RelWithDebInfo` `x64` を選択Release ビルド/ARM プラットフォームの場合は不要
- `MaaWpfGui` 右クリック → プロパティ → デバッグ → ネイティブデバッグを有効化C++ Core へのブレークポイント設定可能)
8. これで自由に ~~改造~~ 開発を始められます
9. 一定量の変更ごにコミット(メッセージ記入必須)
Git 未経験者は dev ブランチ直接変更ではなく新規ブランチ作成推奨:
```bash
git branch your_own_branch
git checkout your_own_branch
```
```bash
git branch your_own_branch
git checkout your_own_branch
```
これで dev の更新影響を受けずに開発可能
これで dev の更新影響を受けずに開発可能
10. 開発完了後、変更をリモートリポジトリへプッシュ:
@@ -66,29 +68,30 @@ icon: iconoir:developer
11. [MAA メインリポジトリ](https://github.com/MaaAssistantArknights/MaaAssistantArknights) で Pull Request を提出master ではなく dev ブランチを指定)
12. 上流リポジトリの更新を同期する場合:
1. 上流リポジトリを追加:
```bash
git remote add upstream https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
```
```bash
git remote add upstream https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
```
2. 更新を取得:
```bash
git fetch upstream
```
```bash
git fetch upstream
```
3. リベース(推奨)またはマージ:
```bash
git rebase upstream/dev
```
```bash
git rebase upstream/dev
```
または
または
```bash
git merge
```
```bash
git merge
```
4. ステップ7、8、9、10 を繰り返し
@@ -100,9 +103,9 @@ Visual Studio 起動後、Git 操作は「Git 変更」画面からコマンド
1. clang-format バージョン20.1.0以上をインストールします。
```bash
python -m pip install clang-format
```
```bash
python -m pip install clang-format
```
2. 'Everything'などのツールを使用して、clang-format.exeのインストール場所を見つけます。参考までに、Anacondaを使用している場合、clang-format.exeはYourAnacondaPath/Scripts/clang-format.exeにインストールされます。
3. Visual Studioで、 Tools-Optionsで 'clang-format'を検索します。
@@ -122,4 +125,6 @@ Visual Studio 起動後、Git 操作は「Git 変更」画面からコマンド
GitHub codespace を作成して C++ 開発環境を自動的に構成する
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg?color=green)](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights?devcontainer_path=.devcontainer%2F1%2Fdevcontainer.json)
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg?color=green)](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights)
次に、 vscode または [Linuxチュートリアル](./linux-tutorial.md) のプロンプトに従って、 GCC 12 および CMake プロジェクトを構成します。

View File

@@ -14,6 +14,7 @@ MAAの構築方法はまだ議論されていますが、このチュートリ
## コンパイルプロセス
1. コンパイルに必要な依存をダウンロードして
- Ubuntu/Debian
```bash
@@ -23,6 +24,7 @@ MAAの構築方法はまだ議論されていますが、このチュートリ
2. サードパーティ製ライブラリのコンパイル
構築済みの依存ライブラリをダウンロードするか、最初からコンパイルするかを選択できます
- 事前構築されたサードパーティ製ライブラリのダウンロード(推奨)
> **Note**
@@ -33,6 +35,7 @@ MAAの構築方法はまだ議論されていますが、このチュートリ
```
上記の方法でダウンロードしたライブラリがABIバージョンなどの理由でシステム上で実行できず、コンテナなどのスキームを使用したくないことがわかった場合は、最初からコンパイルしてみることもできます
- サードパーティ製ライブラリを直接にコンパイルする(時間がかかる)
```bash

View File

@@ -43,7 +43,7 @@ icon: ri:earth-fill
例えば、切り取られた後の出力は次のようになる。
```log
``` log
src: Screenshot_xxx.png
dst: Screenshot_xxx.png_426,272,177,201.png
original roi: 476, 322, 77, 101,
@@ -60,8 +60,8 @@ amplified roi: 426, 272, 177, 201
- ENクライアントのテンプレートイメージフォルダの場所は `MaaAssistantArknights\resource\global\YoStarEN\resource\template`.
- 大陸版クライアントのテンプレートイメージフォルダの場所は `MaaAssistantArknights\resource\template`.
- ENクライアントのテンプレートイメージフォルダの場所は `MaaAssistantArknights\resource\global\YoStarEN\resource\template`.
- 大陸版クライアントのテンプレートイメージフォルダの場所は `MaaAssistantArknights\resource\template`.
task.json`ファイルに記載されているテンプレート画像を参照し、大陸版クライアントと海外クライアントのテンプレート画像を比較し、海外クライアントに不足しているテンプレートを特定します。
@@ -75,8 +75,8 @@ task.json`ファイルに記載されているテンプレート画像を参照
- ENクライアントの `task.json` の場所は `MaaAssistantArknights\resource\global\YoStarEN\resource\tasks.json`.
- 大陸版クライアントの `task.json` の場所は `MaaAssistantArknights\resource\tasks.json`.
- ENクライアントの `task.json` の場所は `MaaAssistantArknights\resource\global\YoStarEN\resource\tasks.json`.
- 大陸版クライアントの `task.json` の場所は `MaaAssistantArknights\resource\tasks.json`.
テキストを変更するには、対応するタスクを探し、`text`フィールドを対応するサーバーに表示されている内容に変更します。特定された内容は、ゲーム内の完全な内容の部分文字列である可能性があることに留意してください。一般的には、純粋なASCII文字として認識されない限り、テキストを含む`text`はすべて置き換える必要があります。
@@ -108,7 +108,7 @@ ROIの範囲を変更するには
ログを解析することは、プログラムに関する問題を特定するのに役立ちます。以下はログの例
```log
``` log
[2022-12-18 17:43:17.535][INF][Px7ec][Tx15c8] {"taskchain":"Award","details":{"to_be_recognized":["Award@ReturnTo","Award","ReceiveAward","DailyTask","WeeklyTask","Award@CloseAnno","Award@CloseAnnoTexas","Award@TodaysSupplies","Award@FromStageSN"],"cur_retry":10,"retry_times":20},"first":["AwardBegin"],"taskid":2,"class":"asst::ProcessTask","subtask":"ProcessTask","pre_task":"AwardBegin"}
[2022-12-18 17:43:18.398][INF][Px7ec][Tx15c8] Call ` C:\Program Files\BlueStacks_nxt\. \HD-Adb.exe -s 127.0.0.1:5555 exec-out "screencap | gzip -1" ` ret 0 , cost 862 ms , stdout size: 2074904 , socket size: 0
[2022-12-18 17:43:18.541][TRC][Px7ec][Tx15c8] OcrPack::recognize | roi: [ 500, 50, 300, 150 ]
@@ -130,7 +130,6 @@ ROIの範囲を変更するには
- `"taskid"` はタスク番号です。
- `"class"` と `subtask` はそれぞれ、タスクのクラスとサブタスクを表す。
- `"pre_task"` は一つ前のタスクを表す。
さらに、コマンドの実行結果 (例: `Call`) と `OCR` の情報 (例: `OcrPack::recognize`) がログに記録されます。
例えば、このログの `"to_be_recognized"`,`"cur_retry":3, "retry_times":20` は、タスクの認識を10回試行し、最大回数は20回であることを意味しています。最大回数に達すると、そのタスクはスキップされ、エラーが報告され、次のタスクが実行されます。前のタスクで問題がない場合、ここで認識に問題がある可能性があります。この問題をトラブルシューティングするには、ログに記載されているタスクに対応するテンプレートファイルがあるか、対応するタスクの `text` フィールドが正しくないか、タスク認識のための `roi` 範囲が正しくないかを確認し、必要な修正を加えてください。

View File

@@ -5,7 +5,7 @@ icon: mingcute:git-pull-request-fill
# 純WebサイトのPRチュートリアル
「パラスちゃん」も理解できるGitHubのPull Requestの使用ガイド (\*´▽`)
「パラスちゃん」も理解できるGitHubのPull Requestの使用ガイド (*´▽`)
この文書は機械翻訳です。もし可能であれば、中国語の文書を読んでください。もし誤りや修正の提案があれば、大変ありがたく思います。
@@ -75,79 +75,79 @@ Conflictを解決するのは少し面倒ですが、ここでは概念につい
1. まず、MAAのメインリポジトリにアクセスして、コードをforkします。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/fork-light.png',
dark: 'images/zh-cn/pr-tutorial/fork-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/fork-light.png',
dark: 'images/zh-cn/pr-tutorial/fork-dark.png'
}
]" />
2. 「Copy the master branch only」オプションを外して、Create Forkをクリックします。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-2-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-2-dark.png'
}
]" />
3. 次に、あなたの個人リポジトリに移動し、「あなたの名前/ MaaAssistantArknights」というタイトルが表示され、下に「MAAメインリポジトリから複製されたMaaAssistantArknights/MaaAssistantArknights」という文言が表示されます。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-3-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-3-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-3-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-3-dark.png'
}
]" />
4. 変更するファイルを探します。 "Go to file" をクリックしてグローバル検索を行うか、下のフォルダーから直接検索することもできます(ファイルの場所を知っている場合)。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-4-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-4-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-4-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-4-dark.png'
}
]" />
5. ファイルを開いたら、ファイルの右上隅にある✏️をクリックして編集を開始します。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-5-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-5-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-5-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-5-dark.png'
}
]" />
6. 変更を加えますもちろん、リソースファイルなどの場合は、まずMAAフォルダー内で変更をテストし、問題がないことを確認してから、ウェブページに貼り付けて変更を行ってください
7. 変更が完了したら、一番下までスクロールして、変更内容を記述します。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-7-1-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-7-1-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-7-1-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-7-1-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-7-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-7-2-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-7-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-7-2-dark.png'
}
]" />
8. 変更するもう1つのファイルがある場合は、5-8を繰り返してください。
9. 変更が完了したら、PRを行います個人リポジトリのPull Requestタブをクリックします。
「Compare & Pull Request」ボタンがある場合は、それをクリックしてください。ない場合は、「New Pull Request」をクリックしてください。
「Compare & Pull Request」ボタンがある場合は、それをクリックしてください。ない場合は、「New Pull Request」をクリックしてください。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-9-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-9-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-9-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-9-dark.png'
}
]" />
10. これでメインリポジトリに移動します。PRする内容を確認してください。
スクリーンショットのように、真ん中に左向きの矢印があり、右側の「個人名/MAA」のdevブランチを「メインリポジトリ/MAA」のdevブランチにマージすることを申請しています。
スクリーンショットのように、真ん中に左向きの矢印があり、右側の「個人名/MAA」のdevブランチを「メインリポジトリ/MAA」のdevブランチにマージすることを申請しています。
<ImageGrid :imageList="[
{
@@ -166,25 +166,25 @@ Conflictを解決するのは少し面倒ですが、ここでは概念につい
]" />
11. MAAチームの大佬たちに承認していただきましょうもちろん、意見を提供してくださることもあるかもしれません
👇例えば(純粋に娯楽のために、本気にしないでください)
👇例えば(純粋に娯楽のために、本気にしないでください)
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-11-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-11-dark.png'
}
]" />
{
light: 'images/zh-cn/pr-tutorial/pr-11-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-11-dark.png'
}
]" />
12. 大佬たちがさらに小さな問題を修正するように言った場合、あなたの個人のリポジトリに戻って、以前のdevブランチに切り替え、手順3-9を繰り返すだけで大丈夫です
手順2再度フォークするを実行する必要はなく、手順10再度プルリクエストするを実行する必要もありません。現在のプルリクエストはまだ承認待ちの状態にあり、後続の変更はこのプルリクエストに直接反映されます。
👇 以下は例です。最下部に「再度変更デモを変更」というメッセージが追加されたことがわかります。
手順2再度フォークするを実行する必要はなく、手順10再度プルリクエストするを実行する必要もありません。現在のプルリクエストはまだ承認待ちの状態にあり、後続の変更はこのプルリクエストに直接反映されます。
👇 以下は例です。最下部に「再度変更デモを変更」というメッセージが追加されたことがわかります。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-12-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-12-dark.png'
}
]" />
{
light: 'images/zh-cn/pr-tutorial/pr-12-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-12-dark.png'
}
]" />
13. 大佬たちの承認を得たら、すべて完了です! バージョンがリリースされた後、あなたのGitHubプロフィールアイコンは自動的に貢献者リストに追加されます。皆様のご奉仕に深く感謝申し上げます
~~なんで全部二次元キャラなんだろう、あ、私も二次元好きだったわ。ま、いいか~~
@@ -194,7 +194,7 @@ Conflictを解決するのは少し面倒ですが、ここでは概念につい
[![Contributors](https://contributors-img.web.app/image?repo=MaaAssistantArknights/MaaAssistantArknights&max=105&columns=15)](https://github.com/MaaAssistantArknights/MaaAssistantArknights/graphs/contributors)
:::
14. 次回別のPRを提出する場合は、まずdevブランチに切り替えて、以下の図のように直接操作してください。
14. 次回別のPRを提出する場合は、まずdevブランチに切り替えて、以下の図のように直接操作してください。
::: warning
この操作は、あなたの個人リポジトリをメインリポジトリとまったく同じ状態に強制的に同期するものであり、最も簡単で効果的な競合解消方法です。ただし、あなたの個人リポジトリにすでに追加されているものは削除されます!

View File

@@ -5,8 +5,8 @@ icon: iconoir:code-brackets
# Dedicated VSCode Extension Tutorial
- [Extension Store](https://marketplace.visualstudio.com/items?itemName=nekosu.maa-support)
- [Repository](https://github.com/neko-para/maa-support-extension)
* [Extension Store](https://marketplace.visualstudio.com/items?itemName=nekosu.maa-support)
* [Repository](https://github.com/neko-para/maa-support-extension)
## Installation
@@ -60,10 +60,10 @@ When enabling the `Maa` compatible mode, the extension will be able to recursive
The extension supports scheduled scanning and diagnosing all tasks.
- Check if contains task defs with same names.
- Check if contains unknown task refs.
- Check if contains unknown image refs.
- Check if contains duplicated task refs in a single task.
* Check if contains task defs with same names.
* Check if contains unknown task refs.
* Check if contains unknown image refs.
* Check if contains duplicated task refs in a single task.
#### Multiple paths resource support
@@ -83,11 +83,11 @@ Searching and launching `Maa: open crop tool` inside VSCode command panel can op
> Use `Ctrl+Shift+P` (`Command+Shift+P` on MacOS) to open command panel
- After selecting and connecting to the controller, use `Screencap` button to obtain screenshots
- Use `Upload` button to manually upload images.
- Hold `Ctrl` key and select cropping area
- Use wheels to zoom
- After finishing cropping, use `Download` button to save the cropping result to the folder of the topest layer of the activated resource
* After selecting and connecting to the controller, use `Screencap` button to obtain screenshots
* Use `Upload` button to manually upload images.
* Hold `Ctrl` key and select cropping area
* Use wheels to zoom
* After finishing cropping, use `Download` button to save the cropping result to the folder of the topest layer of the activated resource
### Bottom status bar

View File

@@ -6,4 +6,4 @@ dir:
order: 1
---
<Redirect to="newbie" />
<Catalog base='/ja-jp/manual/' />

View File

@@ -55,6 +55,7 @@ icon: mdi:plug
::: details 代替案
- オプション 1 : ADB コマンドを使用してエミュレータのポートを確認します
1. **単一**のエミュレータを起動し、他に Android デバイスがこのコンピュータに接続されていないことを確認します。
2. ADB 実行可能ファイルが格納されているフォルダでターミナルを起動します。
3. 次のコマンドを実行します。
@@ -77,6 +78,7 @@ icon: mdi:plug
使用 `127.0.0.1:<ポート>` または `emulator-<四桁の数字>` を接続アドレスとして使用します。
- 方法2すでに確立されたADB接続を検索する
1. 方法1を実行します。
2. `Windowsキー+S` を押して検索バーを開き、「リソースモニター」を入力して開きます。
3. `ネットワーク` タブに切り替えて、モニターするポート名であるシミュレータープロセス名(例:`HD-Player.exe`)を検索します。
@@ -173,6 +175,7 @@ MAA は現在 `bluestacks.conf` の保存場所をレジストリから読み取
:::
1. ブルースタックスシミュレータのデータディレクトリ内にある `bluestacks.conf` ファイルを見つけます。
- 国際版のデフォルトパスは `C:\ProgramData\BlueStacks_nxt\bluestacks.conf` です。
- 中国本土版のデフォルトパスは `C:\ProgramData\BlueStacks_nxt_cn\bluestacks.conf` です。

View File

@@ -6,4 +6,4 @@ dir:
order: 5
---
<Redirect to="windows" />
<Catalog base='/ja-jp/manual/device/' />

View File

@@ -11,12 +11,11 @@ icon: mingcute:android-fill
::: info 注意
1. Android 10 以降、SELinux が `Enforcing` モードの場合、Minitouch は使用できません、別のタッチモードに切り替えてください。または SELinux を **一時的に** `Permissive` モードに切り替え。
1. Android 10 以降、SELinux が `Enforcing` モードの場合、Minitouch は使用できません、別のタッチモードに切り替えてください。または SELinux を **一時的に** `Permissive` モードに切り替え。
2. Androidエコシステムは複雑なため、モードが正常に使用できるようになるまで、MAAの `設定` - `接続設定``接続構成``一般モード``互換モード``2番目の決議` または `一般モード(ブロックされた例外出力)`に変更してみてください。
3. MAAは `16:9` 比率の `720p` 以上の解像度にしか対応していません、ほとんどの近代的なデバイスを含む、`16:9` または `9:16` の画面比率でないデバイスは解像度を強制的に変更する必要があります。接続されているデバイスの画面解像度の比率がネイティブで `16:9` または `9:16`,の場合は、`解像度の変更` セクションをスキップできます。
4. 誤操作を避けるため、デバイスのナビゲーションモードを `クラシックナビゲーションキー` など、 `フルスクリーンジェスチャー` 以外の方法に切り替えてください。
5. エラーを避けるため、ゲーム内設定の `異形スクリーンUI対応` 項目を0に調整してください。
:::
::: tip
@@ -36,6 +35,7 @@ icon: mingcute:android-fill
```
- 実行に成功すると `USB デバッグ` デバイスが接続されたというメッセージが表示される。
- 成功した接続例:
```bash
@@ -102,7 +102,7 @@ icon: mingcute:android-fill
:: 解像度を 1080p に調整する
adb -s <ターゲット・デバイスのシリアル番号> shell wm size 1080x1920
:: 画面の輝度を下げる(オプション)
adb -s <ターゲット・デバイスのシリアル番号> shell settings put system screen_brightness 1
adb -s <ターゲット・デバイスのシリアル番号> shell settings put system screen_brightness 1
```
```bash
@@ -114,9 +114,10 @@ icon: mingcute:android-fill
adb -s <ターゲット・デバイスのシリアル番号> shell input keyevent 3
:: ロック画面(オプション)
adb -s <ターゲット・デバイスのシリアル番号> shell input keyevent 26
```
```
2. 最初のファイルを `startup.bat` に、2番目のファイルを `finish.bat` にリネームする。
- リネーム後、拡張子を変更するための2回目の確認ダイアログボックスが表示されず、ファイルアイコンも変更されない場合は、“Windowsでファイルの拡張子を表示する方法“をご自身で検索してください。
3. MAA の `設定` - `接続設定` - `スクリプトを使用して始めます` と `終了時にスクリプトを使用します` にそれぞれ `startup.bat` と `finish.bat` を記入してください。
@@ -147,6 +148,7 @@ icon: mingcute:android-fill
```
2. デバイスのIPアドレスを表示します。
- デバイスの `設定` - `WLAN` を開き、現在接続されているワイヤレスネットワークをタップしてIPアドレスを表示します。
- セッティング位置は各機器ブランドによって異なるので、各自で確認してほしい。
@@ -162,6 +164,7 @@ icon: mingcute:android-fill
1. デバイスの開発者向けオプションに移動し、 `ワイヤレスデバッグ` をクリックしてオンにし、OKをクリックして、 `ペアリングコードでデバイスをペアリング` をクリックして、ペアリングが完了するまで表示されるポップアップウィンドウを閉じないでください。
2. ペアリングします。
1. コマンドプロンプトウィンドウに `adb pair <デバイスのポップアップで指定されたIPアドレスとポート>` 、Enter キーを押します。
2. `<デバイスのポップアップウィンドウに表示される6桁のペアリングコード>` と入力し、Enter キーを押します。
3. ウィンドウに `Successfully paired to <IP:ポート>` と表示され、デバイスのポップアップウィンドウが自動的に消え、ペアリングされたデバイスの下部にコンピューター名が表示されます。

View File

@@ -25,6 +25,7 @@ icon: teenyicons:linux-alt-solid
1. [`if asst.connect('adb.exe', '127.0.0.1:5554'):`](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/722f0ddd4765715199a5dc90ea1bec2940322344/src/Python/sample.py#L48) セクションを見つける
2. `adb` ツール呼び出し
- エミュレータが `Android Studio``avd` を使用している場合は、 `adb` が付属します。 `adb.exe` の欄に直接 `adb` パスを記入することができ、一般的には `$HOME/Android/Sdk/platform-tools/` で見つけることができます。例:
```python
@@ -34,6 +35,7 @@ icon: teenyicons:linux-alt-solid
- 他のエミュレータを使用する場合は、最初に `adb` をダウンロードして: `$ sudo apt install adb` 次に、パスを入力するか、 `PATH` 環境変数を使用して `adb` を直接入力します
3. エミュレータの `adb` パス取得
- adb ツールを直接使用できます: `$ adbパス devices` ,例:
```shell

View File

@@ -57,8 +57,8 @@ Windows 7 の場合、上記の 2 つのランタイムライブラリをイン
1. [Windows 7 Service Pack 1](https://support.microsoft.com/ja-jp/windows/windows-7-service-pack-1-sp1-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B-b3da2c0f-cdb6-0572-8596-bab972897f61)
2. SHA-2 コード署名:
- KB4474419[ダウンロードリンク1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)、[ダウンロードリンク2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)
- KB4490628[ダウンロードリンク1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)、[ダウンロードリンク2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)
- KB4474419[ダウンロードリンク1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)、[ダウンロードリンク2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)
- KB4490628[ダウンロードリンク1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)、[ダウンロードリンク2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)
3. Platform Update for Windows 7DXGI 1.2、Direct3D 11.1KB2670838[ダウンロードリンク1](https://catalog.s.download.windowsupdate.com/msdownload/update/software/ftpk/2013/02/windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu)、[ダウンロードリンク2](http://download.windowsupdate.com/msdownload/update/software/ftpk/2013/02/windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu)
##### .NET 8 アプリケーションが Windows 7 で異常に動作する場合の緩和策 [#8238](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/8238)
@@ -97,7 +97,6 @@ Windows 7 で .NET 8 アプリケーションを実行すると、メモリ使
- エミュレータのインストールパスを見つける。Windowsはエミュレータの実行中にタスクマネージャーでプロセスを右クリックし、 `ファイルの場所を開く` をクリックします。
- トップまたはボトムのディレクトリに高確率で `adb.exe` が存在する可能性があります(必ずしもこの名前で呼ばれているとは限りません。`nox_adb.exe``HD-adb.exe``adb_server.exe` などと呼ばれる場合があります。とにかく名前に `adb` が含まれるexeです 。それを選択してください。
:::
- 接続アドレスが正しく入力されていることを確認してください。使用しているエミュレータのadbアドレスをインターネットで検索できます。通常は `127.0.0.1:5555` のような形式ですLDPlayerを除く
@@ -106,7 +105,7 @@ Windows 7 で .NET 8 アプリケーションを実行すると、メモリ使
関連資料およびリファレンス adbポート
- [Bluestacks 5](https://support.bluestacks.com/hc/ja/articles/360061342631-BlueStacks-5-BlueStacks-4%E3%81%8B%E3%82%89%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E7%A7%BB%E8%A1%8C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95) `5555`
- [Bluestacks 5](https://support.bluestacks.com/hc/zh-tw/articles/360061342631-%E5%A6%82%E4%BD%95%E5%B0%87%E6%82%A8%E7%9A%84%E6%87%89%E7%94%A8%E5%BE%9EBlueStacks-4%E8%BD%89%E7%A7%BB%E5%88%B0BlueStacks-5#%E2%80%9C2%E2%80%9D) `5555`
- [MuMu Pro](https://mumu.163.com/mac/function/20240126/40028_1134600.html) `16384`
- [MuMu](https://mumu.163.com/help/20240807/40912_1073151.html?maa) `16384`
- [Nemu](https://bbs.xyaz.cn/forum.php?mod=viewthread&tid=365537) `21503`
@@ -180,8 +179,9 @@ MAA はレジストリから `bluestacks.conf` の保存場所を読み取ろう
:::
1. Bluestacksエミュレータのデータディレクトリにある`bluestacks.conf`ファイルを探します
- グローバル版のデフォルトパス `C:\ProgramData\BlueStacks_nxt\bluestacks.conf`
- 中国版のデフォルトパス `C:\ProgramData\BlueStacks_nxt_cn\bluestacks.conf`
- グローバル版のデフォルトパス `C:\ProgramData\BlueStacks_nxt\bluestacks.conf`
- 中国版のデフォルトパス `C:\ProgramData\BlueStacks_nxt_cn\bluestacks.conf`
2. 初めて MAA を使用する場合は、一度 MAA を起動してください。MAAの `config` ディレクトリに `gui.json` が生成されます。

View File

@@ -6,4 +6,4 @@ dir:
order: 4
---
<Redirect to="startup" />
<Catalog base='/ja-jp/manual/introduction/' />

View File

@@ -8,6 +8,7 @@ icon: hugeicons:brain-02
## 一般設定
- `理性剤使用数``割る源石の数`、および `周回数指定``素材の指定` はいずれもショートサーキット的なスイッチOR条件です。これら3つの条件のうちいずれかを満たした時点でタスク達成とみなし、作戦を停止します。
- `理性剤使用数` は理性を何回分補充するかを指定します1回で複数本使う場合あり
- `割る源石の数` は源石を何個割るかを指定します1回につき1個。倉庫に理性剤がある場合は源石を割りません。
- `周回数指定` は選択したステージを何回周回するかを指定します「15回周回後に停止」
@@ -18,19 +19,19 @@ icon: hugeicons:brain-02
::: details 例
| 理性剤使用数 | 割る源石の数 | 周回数指定 | 素材の指定→ドロップ数 | 結果 |
| :----------: | :----------: | :--------: | :-------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | | | 所持理性を消費し切ったら終了。 |
| 2 | | | | まず所持理性を使い切り、その後理性剤を1回使用。合計 `2` 回分の補充後、理性を使い切って終了。 |
| _999_ | 2 | | | まず所持理性を使い切り、理性剤を使い切ってから源石を割る。源石は合計 `2` 回。理性を使い切って終了。 |
| | | 2 | | 選択ステージを `2` 回周回して終了。 |
| | | | 2 | ドロップ統計で指定素材を `2` 個入手した時点で終了。 |
| 2 | | 4 | | 最大 `2` 回まで理性剤を使用する前提で、選択ステージを `4` 回周回して終了。 |
| 2 | | | 4 | 最大 `2` 回まで理性剤を使用する前提で、ドロップ統計で指定素材を `4` 個入手したら終了。 |
| 2 | | 4 | 8 | 最大 `2` 回まで理性剤を使用する前提で、`4` 回周回したら終了。ただし `4` 回に到達する前に指定素材を `8` 個入手した場合は前倒しで終了。 |
| _999_ | 4 | 8 | 16 | 理性剤を使い切り、さらに源石を `4` 回割る前提で、`8` 回周回したら終了。ただし `8` 回に到達する前に指定素材を `16` 個入手した場合は前倒しで終了。 |
| | 2 | | | まず所持理性を使い切る。倉庫に理性剤があればそこで終了。理性剤がなければ源石を `2` 回割り、理性を使い切って終了。_MAA GUIの動作ではありません_ |
| 2 | 4 | | | まず所持理性を使い切る。`2` 回分の理性剤を使い終えても理性剤が残っていれば終了。`2` 回以内で理性剤が尽きた場合は源石を `4` 回割り、理性を使い切って終了。_MAA GUIの動作ではありません_ |
| 理性剤使用数 | 割る源石の数 | 周回数指定 | 素材の指定→ドロップ数 | 結果 |
| :------: | :----: | :------: | :------: | -------------------------------------------------------------------------------------------------------------------------------------- |
| | | | | 所持理性を消費し切ったら終了。 |
| 2 | | | | まず所持理性を使い切り、その後理性剤を1回使用。合計 `2` 回分の補充後、理性を使い切って終了。 |
| _999_ | 2 | | | まず所持理性を使い切り、理性剤を使い切ってから源石を割る。源石は合計 `2` 回。理性を使い切って終了。 |
| | | 2 | | 選択ステージを `2` 回周回して終了。 |
| | | | 2 | ドロップ統計で指定素材を `2` 個入手した時点で終了。 |
| 2 | | 4 | | 最大 `2` 回まで理性剤を使用する前提で、選択ステージを `4` 回周回して終了。 |
| 2 | | | 4 | 最大 `2` 回まで理性剤を使用する前提で、ドロップ統計で指定素材を `4` 個入手したら終了。 |
| 2 | | 4 | 8 | 最大 `2` 回まで理性剤を使用する前提で、`4` 回周回したら終了。ただし `4` 回に到達する前に指定素材を `8` 個入手した場合は前倒しで終了。 |
| _999_ | 4 | 8 | 16 | 理性剤を使い切り、さらに源石を `4` 回割る前提で、`8` 回周回したら終了。ただし `8` 回に到達する前に指定素材を `16` 個入手した場合は前倒しで終了。 |
| | 2 | | | まず所持理性を使い切る。倉庫に理性剤があればそこで終了。理性剤がなければ源石を `2` 回割り、理性を使い切って終了。_MAA GUIの動作ではありません_ |
| 2 | 4 | | | まず所持理性を使い切る。`2` 回分の理性剤を使い終えても理性剤が残っていれば終了。`2` 回以内で理性剤が尽きた場合は源石を `4` 回割り、理性を使い切って終了。_MAA GUIの動作ではありません_ |
:::
@@ -45,6 +46,7 @@ icon: hugeicons:brain-02
- アーツ学・購買資格証・炭素材の第 5 ステージ。`CA-5` / `AP-5` / `SK-5` を入力してください。
- すべてのSoCステージ。`PR-A-1` のように完全な番号を入力してください。
- 殲滅作戦は以下の入力値に対応し、対応する Value を使用してください:
- 当期殲滅作戦Annihilation
- チェルボーグChernobog@Annihilation
- 龍門郊外LungmenOutskirts@Annihilation

View File

@@ -2,17 +2,12 @@
order: 9
icon: ph:sword-bold
---
# 自動戦闘
作業共有サイト [prts.plus](https://prts.plus) で作業ファイルをご利用・共有ください。
::: warning
自動戦闘に関係するすべての機能は、以下の前提条件が必要です。これには自動戦闘自動ローグが含まれますが、これに限定されません。
- 少なくとも60フレームの**安定した**ゲームフレームレート
- タッチモードはMinitouchまたはMaaTouch
自動戦闘に関るすべての機能は、最低60フレームの安定したゲームフレームレートが必要です。これには自動戦闘自動ローグライクが含まれますが、これに限定されません。
:::
## 自動攻略のコピー

View File

@@ -8,11 +8,7 @@ icon: ri:game-fill
MAAはデフォルトで最新のテーマを選択しますが、`自動ロゲット` - `ロゲットテーマ`でターゲットテーマを変更することができます。
::: warning
自動戦闘に関するすべての機能は、以下の前提条件が必要です。これには自動戦闘と自動ローグが含まれますが、これに限定されません。
- 少なくとも60フレームの**安定した**ゲームフレームレート
- タッチモードはMinitouchまたはMaaTouch
すべての自動バトルに関する機能は、少なくとも 60 フレームの安定したゲームフレームレートが必要です。これには自動バトルや自動ローグが含まれますが、これに限ません。
:::
- ゲーム内で該当のロゲットテーマを端末に追加してください。現在は自動ナビゲートも可能ですが、長期的な使用可否は保証されません。
@@ -37,13 +33,13 @@ MAAはデフォルトで最新のテーマを選択しますが、`自動ロゲ
難易度の推奨は、`敵の難易度``希望消費``スコア倍率`などの要素を総合的に考慮しています。高い練度でテストした場合、比較的安定しており、実際の状況やニーズに応じて自由に調整できます。
| テーマ | 備考 |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ファントム | `正式調査·3` およびそれ以上の難易度で開始すると、希望消費を減少させるアイテムが手に入る場合があり、そのため開始時に六星オペレーターを召集できないことがあります。 |
| ミヅキ | `波瀾万丈·4` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `精神論分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。<br>`精神論分隊` はアカウントの練度が高い場合に適しており、運に頼る必要があります。 |
| サーミ | `自然の猛威·6` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `特訓分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。 |
| サルカズ | `魂に直面·15` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `歴史再編`内でまだ `位置測定分隊強化Ⅱ`を有効にしていない場合、 `位置測定分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。<br> `位置測定分隊`を選択した場合、回避戦略が採用され、 `魂のしおり`を素早く取得できますが、基本的にエンディングをクリアすることはできません。<br>源石錐を収集戦略を使用した場合、開始時の分隊は `破棘成金分隊` とならば、商店更新戦略を使用してプロセスを加速します。 |
| 界園 | `請君入園·15` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `指揮分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。<br>難易度が `請君入園·3`に設定され、源石錐を収集戦略を使用して開始時の分隊が `指揮分隊` とならば、 `時の果て` でスキップ戦略を使用してプロセスを加速します。 |
| テーマ | 備考 |
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ファントム | `正式調査·3` およびそれ以上の難易度で開始すると、希望消費を減少させるアイテムが手に入る場合があり、そのため開始時に六星オペレーターを召集できないことがあります。 |
| ミヅキ | `波瀾万丈·4` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `精神論分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。<br>`精神論分隊` はアカウントの練度が高い場合に適しており、運に頼る必要があります。 |
| サーミ | `自然の猛威·6` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `特訓分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。 |
| サルカズ | `魂に直面·15` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `歴史再編`内でまだ `位置測定分隊強化Ⅱ`を有効にしていない場合、 `位置測定分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。<br> `位置測定分隊`を選択した場合、回避戦略が採用され、 `魂のしおり`を素早く取得できますが、基本的にエンディングをクリアすることはできません。<br>源石錐を収集戦略を使用した場合、開始時の分隊は `破棘成金分隊` とならば、商店更新戦略を使用してプロセスを加速します。 |
| 界園 | `請君入園·15` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `指揮分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。<br>難易度が `請君入園·3`に設定され、源石錐を収集戦略を使用して開始時の分隊が `指揮分隊` とならば、 `時の果て` でスキップ戦略を使用してプロセスを加速します。 |
:::
@@ -58,8 +54,8 @@ MAA はゲーム内のすべての操作を予め設定された戦略で行い
## 異常検出
- 回線が切断されたり、午前4時に接続が中断された場合、タスクを再接続して続行します。
- 戦闘時間が5分を超えると、すべての地上ユニットを自動で撤退させ、6分を超えるとその戦闘を自動で放棄し、時間の無駄を避けます。
- タスクに問題が発生した場合、現在の探索を自動で放棄し、再試行します。
- 戦闘時間が5分を超えると、すべての地上ユニットが自動で撤退し、6分を超えるとその戦闘を自動で放棄して時間の無駄を避けます。
- 断続的な切断やアップデート後に自動的に再接続してタスクを継続するには、「開始ウェイクアップタスク」を有効にし、対応する時間に強制タイマー起動を設定してください。
同じ位置で何度もまる場合は、ログとスクリーンショット添付してIssueを提出してください。
ただし、同じ位置で何度もまる場合は、Issueを提出してフィードバックをお願いします。ログとスクリーンショット添付してください。

View File

@@ -32,12 +32,12 @@ icon: ic:baseline-article
- `周回数指定` ステージを何回周回するか指定例“15 周 で停止”)
- `素材を限定` 特定の素材のドロップ数が手に入るまで周回例“5 個 初級源岩獲得で停止”)
| 例 | 理性剤使用数 | 割る源石の数 | 周回数指定 | 素材を限定 | 結果 |
| :-: | :----------: | :----------: | :--------: | :---------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| A | 999 | 10 | 1 | ✖ | 理性材/純正源石を**1回**以上摂取し、`周回数1`回の条件を完了すると、即座に停止。理性不足の状態で純正源石か理性剤が不足している場合は摂取せずに自動的に終了します。 |
| B | | | 100 | ✖ | 100回ステージを実行しようとしますが、現在使用可能な理性を消費後おそらく数回に、`理性剤``純正源石`なしの条件が達成されるため、理性を消費できず、タスクは完了されます。 |
| C | 1 | | 100 | ✖ | 100回ステージを実行しようとしますが、理性剤を 1 個消費した後に理性が不足した場合、`理性剤使用数1``割る源石の数0`の条件を達成したためタスクは完了します。 |
| D | 999 | ✖ | 100 | 3個初級源岩 | 100回ステージを実行しようとし、最大 999 の理性剤を消費しようとしますが、実行中に3個の初級源岩を獲得した場合、`素材を限定3個の初級源岩`の条件を達成するため、その時点でタスクを完了し停止します。 |
| 例 | 理性剤使用数 | 割る源石の数 | 周回数指定 | 素材を限定 | 結果 |
|:--:|:--------:|:------:|:--------:|:---------:|-----------------------------------------------------------------------------------------------------------------------------------------------|
| A | 999 | 10 | 1 | ✖ | 理性材/純正源石を**1回**以上摂取し、`周回数1`回の条件を完了すると、即座に停止。理性不足の状態で純正源石か理性剤が不足している場合は摂取せずに自動的に終了します。 |
| B || ✖ | 100 | ✖ | 100回ステージを実行しようとしますが、現在使用可能な理性を消費後おそらく数回に、`理性剤``純正源石`なしの条件が達成されるため、理性を消費できず、タスクは完了されます。 |
| C | 1 | ✖ | 100 | ✖ | 100回ステージを実行しようとしますが、理性剤を 1 個消費した後に理性が不足した場合、`理性剤使用数1``割る源石の数0`の条件を達成したためタスクは完了します。 |
| D | 999 | ✖ | 100 | 3個初級源岩 | 100回ステージを実行しようとし、最大 999 の理性剤を消費しようとしますが、実行中に3個の初級源岩を獲得した場合、`素材を限定3個の初級源岩`の条件を達成するため、その時点でタスクを完了し停止します。 |
- `素材を限定``ステージ選択` は2つの別々のロジックです。
- `素材を限定` は、タスクを完了するための素材の数に基づいており、対応するステージに自動的に移動しません。
@@ -121,7 +121,7 @@ icon: ic:baseline-article
### 自動戦闘現在JP未対応
- 適応していないことが示されていますが、自動攻略ファイル内の中国語の指示を理解できる限り、ほとんどの機能を使用できます。アプリがバグで立ち往生した場合は、Issueを提出してフィードバックをお寄せください。
- 自動攻略ファイルのシェアは大歓迎です!
- 自動攻略ファイルのシェアは大歓迎です!
- [prts.plus](https://prts.plus) をご利用ください!
#### 使い方
@@ -129,9 +129,9 @@ icon: ic:baseline-article
`編成可能のステージ``保全駐在` モードでの自動戦闘をサポートします。
- この機能は、`行動開始` のある画面で開始する必要があります。
その後、 `攻略ファイルパス` または `ミステリーコード` をMAAの左上にあるボックスに入力するで、ジョブをインポートできます。
その後、 `攻略ファイルパス` または `ミステリーコード` をMAAの左上にあるボックスに入力するで、ジョブをインポートできます。
- さらに、ビデオ認識がサポートされており(テスト中)、ビデオファイルをドラッグすることでアクティブ化できます。
アスペクト比16:9、解像度720p以上の動画にのみ対応しています。動画には、黒枠、歪み補正、エミュレータの枠などが含まれていないことが必須です。
アスペクト比16:9、解像度720p以上の動画にのみ対応しています。動画には、黒枠、歪み補正、エミュレータの枠などが含まれていないことが必須です。
- `自動編成` 機能は、**現在の編成をクリアし**、ジョブに必要なオペレーターに基づいて編成を自動的に完了します。
- `自動編成` は、必要に応じてキャンセルして(たとえば、必要に応じて `戦友サポート` を使用する場合)、手動編成後に開始する。
- `カスタムオペレーターを追加する``信頼性の低いオペレーターを追加する` は、ミッションの必要に応じて自動編成に追加できます。
@@ -140,7 +140,7 @@ icon: ic:baseline-article
- 自動戦闘の「サイクル数」を設定できます(例:保全駐在)。
- `バトルリスト` 機能を使用して、同じエリア内のステージの連続した自動戦闘をキューに入れることができます。
- ジョブをインポートしたら、以下のリストのステージコードが正しいことを確認してから、ステージを追加します(代わりに右クリックして強襲作戦を追加します)。
追加後、対応するステージの作戦を行うかどうかのオンとオフを切り替えることができます。
追加後、対応するステージの作戦を行うかどうかのオンとオフを切り替えることができます。
- この機能をオンにすると、**ステージが配置されているマップ画面**で自動戦闘を開始できます。 自動戦闘キューは、理性不足/戦闘失敗した/星3以外で完了の場合に停止します。
- リスト内のステージが同じエリアにあることを確認してください(マップ画面を左右にスワイプすることでのみナビゲートできます)。
- **攻略ファイルの採点を高め、クリエイターを激励するために、必ず良質な攻略ファイルに「いいね!」を押してください。**
@@ -153,7 +153,7 @@ icon: ic:baseline-article
- マップ座標の取得:
- ジョブエディターでステージ名を入力すると、ドラッグ可能な座標マップが左下隅に自動的にロードされ、クリックして現在のオペレーターの位置を設定できます。
- ステージ名を入力して JSON をエクスポートすると、直接行動開始され、座標情報で覆われたマップのスクリーンショットが MAA ディレクトリの `debug\map` ディレクトリに生成されます。
- [PRTS.map](https://map.ark-nights.com/) の `設定` から座標を `MAA` に変更し使います。
- [PRTS.map](https://map.ark-nights.com/) `設定` から座標を `MAA` に変更し使います。
- 演習モードをサポートしている。
- 説明文には、自分の名前作者名、参考動画のURL、その他言いたいことなどを記入することをお勧めします
- QQディスカッショングループ [1169188429](https://jq.qq.com/?_wv=1027&k=QZcGcJ9G)(中国語のみ) に参加して、攻略ファイルの作成やその他の問題について私たちと議論することを歓迎します。
@@ -163,13 +163,13 @@ icon: ic:baseline-article
- 自動ジャンプに失敗した場合は、倉庫の `材料` インターフェースに手動で切り替え、**左端にスワイプ**して機能を開始してください。
- 現在の対応データサイトは、 [Arkplanner](https://penguin-stats.io/planner) 、 [アークナイツ ツールボックス](https://arkntools.app/#/material) 、 [ARK-NIGHTS.com](https://ark-nights.com/settings)。
- もしかしたら、後でもっと便利な機能を実行するために使われるかもしれません、多分。
- あなたがデータサイトのウェブマスターであるならば、あなたのサイトの材料JSONプロトコルを適応させるために私達に連絡することも大歓迎です。
- あなたがデータサイトのウェブマスターであるならば、あなたのサイトの材料JSONプロトコルを適応させるために私達に連絡することも大歓迎です。
## 設定の紹介
Windows MAAには `設定` タブの他に `タスク設定` もあります。 `スタート` のタスクリスト右側の `歯車` をクリックするとスタート内の異なるタスク設定に切り替えることができます〜
`一般設定` `高度な設定` をクリックすると、 `タスク設定` も切り替わるので注意してください~
`一般設定` `高度な設定` をクリックすると、 `タスク設定` も切り替わるので注意してください~
### カスタム接続
@@ -181,6 +181,7 @@ Windows MAAには `設定` タブの他に `タスク設定` もあります。
#### ポート番号の取得
- 方法1adbコマンドを使用して実行ポートを直接確認する
1. **一つの**エミュレータを起動し、このコンピューターに他の Android デバイスが接続されていないことを確認します。
2. ADB実行可能ファイルが保存されているフォルダ内のコマンドウィンドウを起動します。
3. 以下のコマンドを実行します:
@@ -202,6 +203,7 @@ Windows MAAには `設定` タブの他に `タスク設定` もあります。
接続アドレスとして `127.0.0.1:[ADBPORT]` を使用します(`[ADBPORT]`を実際の数字に置き換えます)。 `emulator-****` を出力する場合は、方法2を参照してください。
- 方法2: 確立されたADB接続を確認する
1. 方法1 を実行します。
2. `Logo Key + S` を押して検索バーを開き、 `Resource Monitor` と入力すると開きます。
3. `ネットワーク` タブに切り替えて、 `listening port` の `名前` 列でエミュレータ プロセス名 (`HD-Player.exe` など) を探します。
@@ -249,7 +251,7 @@ Windows MAAには `設定` タブの他に `タスク設定` もあります。
::: details 示例
```text
```text
マルチインスタンス1
エミュレータのパスC:\ProgramData\Microsoft\Windows\Start Menu\Programs\BlueStacks\マルチインスタンス1.lnk
マルチインスタンス2

View File

@@ -2,7 +2,6 @@
order: 11
icon: icon-park-solid:other
---
# その他
## GPU 推論加速
@@ -15,7 +14,7 @@ DirectML を使用して GPU による認識推論を加速<sup>[PR](https://git
メイン画面と設定での設定変更は通常自動保存されますが、以下の項目は MAA 再起動後にリセットされます。
- `*` マークが付いたオプション
- `(一回のみ)` マークが付いたオプション
- `(一回のみ)` マークが付いたオプション
- チェックボックスを右クリックして得られる半選択スイッチ
-

View File

@@ -2,7 +2,6 @@
order: 8
icon: solar:streets-map-point-linear
---
# 生息演算
::: important Translation Required

View File

@@ -2,7 +2,6 @@
order: 6
icon: lucide:gift
---
# 報酬受取
毎日の報酬と毎週の報酬を自動受取します。

View File

@@ -6,4 +6,4 @@ dir:
order: 3
---
<Redirect to="integration" />
<Catalog base='/ja-jp/protocol/' />

View File

@@ -22,41 +22,41 @@ typedef void(ASST_CALL* AsstCallback)(int msg, const char* details, void* custom
## 概要
- `int msg`
The message type
The message type
```cpp
enum class AsstMsg
{
/* Global Info */
InternalError = 0, // 内部エラー
InitFailed = 1, // 初期化に失敗しました
ConnectionInfo = 2, // 接続情報
AllTasksCompleted = 3, // すべてのタスクが完了したかどうか
AsyncCallInfo = 4, // 外部非同期呼び出し情報
```cpp
enum class AsstMsg
{
/* Global Info */
InternalError = 0, // 内部エラー
InitFailed = 1, // 初期化に失敗しました
ConnectionInfo = 2, // 接続情報
AllTasksCompleted = 3, // すべてのタスクが完了したかどうか
AsyncCallInfo = 4, // 外部非同期呼び出し情報
/* TaskChain Info */
TaskChainError = 10000, // 一連のタスク 実行/認識のエラー
TaskChainStart = 10001, // 一連のタスク 開始
TaskChainCompleted = 10002, // 一連のタスク 完了
TaskChainExtraInfo = 10003, // 一連のタスクの追加情報
TaskChainStopped = 10004, // 一連のタスク 手動停止
/* TaskChain Info */
TaskChainError = 10000, // 一連のタスク 実行/認識のエラー
TaskChainStart = 10001, // 一連のタスク 開始
TaskChainCompleted = 10002, // 一連のタスク 完了
TaskChainExtraInfo = 10003, // 一連のタスクの追加情報
TaskChainStopped = 10004, // 一連のタスク 手動停止
/* SubTask Info */
SubTaskError = 20000, // サブタスク 実行/認識におけるエラー
SubTaskStart = 20001, // サブタスク 実行
SubTaskCompleted = 20002, // サブタスク 完了
SubTaskExtraInfo = 20003, // サブタスクの追加情報
SubTaskStopped = 20004, // サブタスク 手動停止
/* SubTask Info */
SubTaskError = 20000, // サブタスク 実行/認識におけるエラー
SubTaskStart = 20001, // サブタスク 実行
SubTaskCompleted = 20002, // サブタスク 完了
SubTaskExtraInfo = 20003, // サブタスクの追加情報
SubTaskStopped = 20004, // サブタスク 手動停止
/* Web Request */
ReportRequest = 30000, // レポートリクエスト
};
```
/* Web Request */
ReportRequest = 30000, // レポートリクエスト
};
```
- `const char* details`
メッセージの詳細, JSON. 詳細: [Field Description](#field-description)
メッセージの詳細, JSON. 詳細: [Field Description](#field-description)
- `void* custom_arg`
呼び出し元のカスタム引数には、 `AsstCreateEx` インターフェースの `custom_arg` 引数が渡される。C ライクな言語では、`this` ポインタを一緒に渡すことができる。
呼び出し元のカスタム引数には、 `AsstCreateEx` インターフェースの `custom_arg` 引数が渡される。C ライクな言語では、`this` ポインタを一緒に渡すことができる。
## Field Description
@@ -92,25 +92,25 @@ Todo
### 多用される `What` フィルドの値
- `ConnectFailed`
接続失敗
接続失敗
- `Connected`
接続成功。現段階では `uuid` フィールドが空であることに注意してください (次のステップで取得されます)
接続成功。現段階では `uuid` フィールドが空であることに注意してください (次のステップで取得されます)
- `UuidGot`
UUID の取得
UUID の取得
- `UnsupportedResolution`
この解像度はサポートされていません
この解像度はサポートされていません
- `ResolutionError`
解像度を取得できない
解像度を取得できない
- `Reconnecting`
接続切断 (adb/emulator クラッシュ), 再接続開始
接続切断 (adb/emulator クラッシュ), 再接続開始
- `Reconnected`
接続切断 (adb/emulator クラッシュ), 再接続成功
接続切断 (adb/emulator クラッシュ), 再接続成功
- `Disconnect`
接続切断 (adb/emulator クラッシュ), 再接続失敗
接続切断 (adb/emulator クラッシュ), 再接続失敗
- `ScreencapFailed`
画面取得失敗 (adb/emulator クラッシュ), 再接続失敗
画面取得失敗 (adb/emulator クラッシュ), 再接続失敗
- `TouchModeNotAvailable`
サポートされていないタッチモード
サポートされていないタッチモード
### AsyncCallInfo
@@ -142,39 +142,39 @@ Todo
#### 多用される `taskchain` フィールドの値
- `StartUp`
ゲーム開始
ゲーム開始
- `CloseDown`
ゲームを閉じる
ゲームを閉じる
- `Fight`
作戦
作戦
- `Mall`
FPとFP交換所に買い物
FPとFP交換所に買い物
- `Recruit`
自動公開求人
自動公開求人
- `Infrast`
基地施設
基地施設
- `Award`
デイリー報酬を受け取る
デイリー報酬を受け取る
- `Roguelike`
統合戦略
統合戦略
- `Copilot`
自動作戦
自動作戦
- `SSSCopilot`
自動保全駐在作戦
自動保全駐在作戦
- `Depot`
倉庫の識別
倉庫の識別
- `OperBox`
オペレーターボックス識別
オペレーターボックス識別
- `Reclamation`
生息演算
生息演算
- `Custom`
カストム タスク
カストム タスク
- `SingleStep`
サブタスク
サブタスク
- `VideoRecognition`
ビデオ認識タスク
ビデオ認識タスク
- `Debug`
デバッグ
デバッグ
### TaskChain 関連情報
@@ -205,69 +205,69 @@ Todo
#### 多用される `subtask` フィールドの値
- `ProcessTask`
- `ProcessTask`
```json
// 対応する詳細フィールドの例
{
"task": "StartButton2", // タスク名
"action": 512,
"exec_times": 1, // 実行回数
"max_times": 999, // 最大実行回数
"algorithm": 0
}
```
```json
// 対応する詳細フィールドの例
{
"task": "StartButton2", // タスク名
"action": 512,
"exec_times": 1, // 実行回数
"max_times": 999, // 最大実行回数
"algorithm": 0
}
```
- Todo Other
##### 多用される `task` フィールドの値
- `StartButton2`
開始
開始
- `MedicineConfirm`
理性回復剤使用確認
理性回復剤使用確認
- `ExpiringMedicineConfirm`
48時間以内に期限が切れる理性回復剤使用確認
48時間以内に期限が切れる理性回復剤使用確認
- `StoneConfirm`
純正源石使用確認
純正源石使用確認
- `RecruitRefreshConfirm`
公開求人リストの更新確認
公開求人リストの更新確認
- `RecruitConfirm`
公開求人の確認
公開求人の確認
- `RecruitNowConfirm`
緊急招集票の使用確認
緊急招集票の使用確認
- `ReportToPenguinStats`
ペンギン急便への報告
ペンギン急便への報告
- `ReportToYituliu`
Yituliu へビッグデータの報告
Yituliu へビッグデータの報告
- `InfrastDormDoubleConfirmButton`
基地施設での二重確認は、他のオペレーターとの競合がある場合のみ発生します
基地施設での二重確認は、他のオペレーターとの競合がある場合のみ発生します
- `StartExplore`
統合戦略: 開始
統合戦略: 開始
- `StageTraderInvestConfirm`
統合戦略: 源石錐とアイテム交換
統合戦略: 源石錐とアイテム交換
- `StageTraderInvestSystemFull`
統合戦略: 投資満額
統合戦略: 投資満額
- `ExitThenAbandon`
統合戦略: 終了確認
統合戦略: 終了確認
- `MissionCompletedFlag`
統合戦略: ミッション完了
統合戦略: ミッション完了
- `MissionFailedFlag`
統合戦略: ミッション失敗
統合戦略: ミッション失敗
- `StageTraderEnter`
統合戦略: 怪しい旅商人
統合戦略: 怪しい旅商人
- `StageSafeHouseEnter`
統合戦略: 安全な片隅
統合戦略: 安全な片隅
- `StageEncounterEnter`
統合戦略: 思わぬ遭遇
統合戦略: 思わぬ遭遇
- `StageCombatDpsEnter`
統合戦略: 作戦
統合戦略: 作戦
- `StageEmergencyDps`
統合戦略: 緊急作戦
統合戦略: 緊急作戦
- `StageDreadfulFoe`
統合戦略: 悪路凶敵
統合戦略: 悪路凶敵
- `StartGameTask`
クライアントの起動に失敗 (client_type と設定ファイルの互換性なし)
クライアントの起動に失敗 (client_type と設定ファイルの互換性なし)
- Todo Other
### SubTaskExtraInfo
@@ -285,343 +285,343 @@ Todo
#### 多用される `what` と `details` フィールドの値
- `StageDrops`
ステージドロップインフォメーション
ステージドロップインフォメーション
```json
// 対応する詳細フィールドの例
{
"drops": [ // 今回のドロップされた素材
{
"itemId": "3301",
"quantity": 2,
"itemName": "アーツ学1"
},
{
"itemId": "3302",
"quantity": 1,
"itemName": "アーツ学2"
},
{
"itemId": "3303",
"quantity": 2,
"itemName": "アーツ学3"
}
],
"stage": { // レベル情報
"stageCode": "CA-5",
"stageId": "wk_fly_5"
},
"stars": 3, // ステージクリア評価
"stats": [ // この実行中にドロップされた素材の総量
{
"itemId": "3301",
"itemName": "アーツ学1",
"quantity": 4,
"addQuantity": 2 // 今回の新規ドロップ数
},
{
"itemId": "3302",
"itemName": "アーツ学2",
"quantity": 3,
"addQuantity": 1
},
{
"itemId": "3303",
"itemName": "アーツ学3",
"quantity": 4,
"addQuantity": 2
}
]
}
```
```json
// 対応する詳細フィールドの例
{
"drops": [ // 今回のドロップされた素材
{
"itemId": "3301",
"quantity": 2,
"itemName": "アーツ学1"
},
{
"itemId": "3302",
"quantity": 1,
"itemName": "アーツ学2"
},
{
"itemId": "3303",
"quantity": 2,
"itemName": "アーツ学3"
}
],
"stage": { // レベル情報
"stageCode": "CA-5",
"stageId": "wk_fly_5"
},
"stars": 3, // ステージクリア評価
"stats": [ // この実行中にドロップされた素材の総量
{
"itemId": "3301",
"itemName": "アーツ学1",
"quantity": 4,
"addQuantity": 2 // 今回の新規ドロップ数
},
{
"itemId": "3302",
"itemName": "アーツ学2",
"quantity": 3,
"addQuantity": 1
},
{
"itemId": "3303",
"itemName": "アーツ学3",
"quantity": 4,
"addQuantity": 2
}
]
}
```
- `RecruitTagsDetected`
採用タグの検出
採用タグの検出
```json
// 対応するフィールドの詳細
{
"tags": [
"COST回復",
"防御",
"先鋒タイプ",
"補助タイプ",
"近距離"
]
}
```
```json
// 対応するフィールドの詳細
{
"tags": [
"COST回復",
"防御",
"先鋒タイプ",
"補助タイプ",
"近距離"
]
}
```
- `RecruitSpecialTag`
特別な採用タグの検出
特別な採用タグの検出
```json
// 対応する詳細フィールドの例
{
"tag": "上級エリート"
}
```
```json
// 対応する詳細フィールドの例
{
"tag": "上級エリート"
}
```
- `RecruitResult`
公開求人結果
公開求人結果
```json
// 対応する詳細フィールドの例
{
"tags": [ // 全てのタグ、今のところは5つに違いない
"弱化",
"減速",
"術師タイプ",
"補助タイプ",
"近距離"
],
"level": 4, // 総合的なレアリティ
"result": [
{
"tags": [
"弱化"
],
"level": 4, // レアリティに対応するタグ
"opers": [
{
"name": "プラマニクス",
"level": 5 // レアリティに対応するオペレーター
},
{
"name": "メテオリーテ",
"level": 5
},
{
"name": "ワイフー",
"level": 5
},
{
"name": "ヘイズ",
"level": 4
},
{
"name": "メテオ",
"level": 4
}
]
},
{
"tags": [
"減速",
"術師タイプ"
],
"level": 4,
"opers": [
{
"name": "ナイトメア",
"level": 5
},
{
"name": "グレイ",
"level": 4
}
]
},
{
"tags": [
"弱化",
"術師タイプ"
],
"level": 4,
"opers": [
{
"name": "ヘイズ",
"level": 4
}
]
}
]
}
```
```json
// 対応する詳細フィールドの例
{
"tags": [ // 全てのタグ、今のところは5つに違いない
"弱化",
"減速",
"術師タイプ",
"補助タイプ",
"近距離"
],
"level": 4, // 総合的なレアリティ
"result": [
{
"tags": [
"弱化"
],
"level": 4, // レアリティに対応するタグ
"opers": [
{
"name": "プラマニクス",
"level": 5 // レアリティに対応するオペレーター
},
{
"name": "メテオリーテ",
"level": 5
},
{
"name": "ワイフー",
"level": 5
},
{
"name": "ヘイズ",
"level": 4
},
{
"name": "メテオ",
"level": 4
}
]
},
{
"tags": [
"減速",
"術師タイプ"
],
"level": 4,
"opers": [
{
"name": "ナイトメア",
"level": 5
},
{
"name": "グレイ",
"level": 4
}
]
},
{
"tags": [
"弱化",
"術師タイプ"
],
"level": 4,
"opers": [
{
"name": "ヘイズ",
"level": 4
}
]
}
]
}
```
- `RecruitTagsRefreshed`
公開求人タグの更新
公開求人タグの更新
```json
// 対応する詳細フィールドの例
{
"count": 1, // スロットが更新された回数
"refresh_limit": 3 // 更新最大回数
}
```
```json
// 対応する詳細フィールドの例
{
"count": 1, // スロットが更新された回数
"refresh_limit": 3 // 更新最大回数
}
```
- `RecruitNoPermit`
求人票が切れた
求人票が切れた
```json
// 対応する詳細フィールドの例
{
"continue": true, // 更新を続けるかどうか
}
```
```json
// 対応する詳細フィールドの例
{
"continue": true, // 更新を続けるかどうか
}
```
- `RecruitTagsSelected`
公開求人タグの選択
公開求人タグの選択
```json
// 対応する詳細フィールドの例
{
"tags": [
"減速",
"術師タイプ"
]
}
```
```json
// 対応する詳細フィールドの例
{
"tags": [
"減速",
"術師タイプ"
]
}
```
- `RecruitSlotCompleted`
公開求人スロットの完了
公開求人スロットの完了
- `RecruitError`
公開求人認識時のエラー
公開求人認識時のエラー
- `EnterFacility`
施設へ入る
施設へ入る
```json
// 対応する詳細フィールドの例
{
"facility": "Mfg", // 施設名
"index": 0 // 施設 ID
}
```
```json
// 対応する詳細フィールドの例
{
"facility": "Mfg", // 施設名
"index": 0 // 施設 ID
}
```
- `NotEnoughStaff`
オペレーター不足
オペレーター不足
```json
// 対応する詳細フィールドの例
{
"facility": "Mfg", // 施設名
"index": 0 // 施設 ID
}
```
```json
// 対応する詳細フィールドの例
{
"facility": "Mfg", // 施設名
"index": 0 // 施設 ID
}
```
- `ProductOfFacility`
施設の生産
施設の生産
```json
// 対応する詳細フィールドの例
{
"product": "Money", // 生産物
"facility": "Mfg", // 施設名
"index": 0 // 施設 ID
}
```
```json
// 対応する詳細フィールドの例
{
"product": "Money", // 生産物
"facility": "Mfg", // 施設名
"index": 0 // 施設 ID
}
```
- `StageInfo`
自動戦闘ステージの情報
自動戦闘ステージの情報
```json
// 対応する詳細フィールドの例
{
"name": string // ステージ名
}
```
```json
// 対応する詳細フィールドの例
{
"name": string // ステージ名
}
```
- `StageInfoError`
自動戦闘ステージの情報エラー
自動戦闘ステージの情報エラー
- `PenguinId`
PenguinStats ID
PenguinStats ID
```json
// 対応する詳細フィールドの例
{
"id": string
}
```
```json
// 対応する詳細フィールドの例
{
"id": string
}
```
- `DepotInfo`
倉庫のアイテムの認識結果
倉庫のアイテムの認識結果
```json
// 対応する詳細フィールドの例
"done": bool, // 認識が完了したかどうかfalse はまだ進行中かどうか(処理中のデータ)
"arkplanner": { // https://penguin-stats.cn/planner
"object": {
"items": [
{
"id": "2004",
"have": 4,
"name": "上級作戦記録"
},
{
"id": "mod_unlock_token",
"have": 25,
"name": "モジュールデータ"
},
{
"id": "2003",
"have": 20,
"name": "中級作戦記録"
}
],
"@type": "@penguin-statistics/depot"
},
"data": "{\"@type\":\"@penguin-statistics/depot\",\"items\":[{\"id\":\"2004\",\"have\":4,\"name\":\"上級作戦記録\"},{\"id\":\"mod_unlock_token\",\"have\":25,\"name\":\"モジュールデータ\"},{\"id\":\"2003\",\"have\":20,\"name\":\"中級作戦記録\"}]}"
},
"lolicon": { // https://arkntools.app/#/material
"object": {
"2004" : 4,
"mod_unlock_token": 25,
"2003": 20
},
"data": "{\"2003\":20,\"2004\": 4,\"mod_unlock_token\": 25}"
}
// 現在は ArkPlanner と Lolicon (Arkntools) 形式のみ対応、今後対応するサイトが増える可能性あり
```
```json
// 対応する詳細フィールドの例
"done": bool, // 認識が完了したかどうかfalse はまだ進行中かどうか(処理中のデータ)
"arkplanner": { // https://penguin-stats.cn/planner
"object": {
"items": [
{
"id": "2004",
"have": 4,
"name": "上級作戦記録"
},
{
"id": "mod_unlock_token",
"have": 25,
"name": "モジュールデータ"
},
{
"id": "2003",
"have": 20,
"name": "中級作戦記録"
}
],
"@type": "@penguin-statistics/depot"
},
"data": "{\"@type\":\"@penguin-statistics/depot\",\"items\":[{\"id\":\"2004\",\"have\":4,\"name\":\"上級作戦記録\"},{\"id\":\"mod_unlock_token\",\"have\":25,\"name\":\"モジュールデータ\"},{\"id\":\"2003\",\"have\":20,\"name\":\"中級作戦記録\"}]}"
},
"lolicon": { // https://arkntools.app/#/material
"object": {
"2004" : 4,
"mod_unlock_token": 25,
"2003": 20
},
"data": "{\"2003\":20,\"2004\": 4,\"mod_unlock_token\": 25}"
}
// 現在は ArkPlanner と Lolicon (Arkntools) 形式のみ対応、今後対応するサイトが増える可能性あり
```
- `OperBoxInfo`
オペレーターボックス識別結果
オペレーターボックス識別結果
```json
// 対応する詳細フィールドの例
"done": bool, // 認識が完了したかどうかfalse はまだ進行中かどうか(処理中のデータ)
"all_oper": [
{
"id": "char_002_amiya",
"name": "阿米娅",
"own": true
},
{
"id": "char_003_kalts",
"name": "凯尔希",
"own": true
},
{
"id": "char_1020_reed2",
"name": "焰影苇草",
"own": false
},
]
"own_opers": [
{
"id": "char_002_amiya", // オペレーターID
"name": "阿米娅", // 氏名、中国語で出力
"own": true, // 持っているかどうか
"elite": 2, // 昇進段階 0, 1, 2
"level": 50, // レベル
"potential": 6, // 潜在 [1, 6]
"rarity": 5 // レア度 [1, 6]
},
{
"id": "char_003_kalts",
"name": "凯尔希",
"own": true,
"elite": 2,
"level": 50,
"potential": 1,
"rarity": 6
}
]
```
```json
// 対応する詳細フィールドの例
"done": bool, // 認識が完了したかどうかfalse はまだ進行中かどうか(処理中のデータ)
"all_oper": [
{
"id": "char_002_amiya",
"name": "阿米娅",
"own": true
},
{
"id": "char_003_kalts",
"name": "凯尔希",
"own": true
},
{
"id": "char_1020_reed2",
"name": "焰影苇草",
"own": false
},
]
"own_opers": [
{
"id": "char_002_amiya", // オペレーターID
"name": "阿米娅", // 氏名、中国語で出力
"own": true, // 持っているかどうか
"elite": 2, // 昇進段階 0, 1, 2
"level": 50, // レベル
"potential": 6, // 潜在 [1, 6]
"rarity": 5 // レア度 [1, 6]
},
{
"id": "char_003_kalts",
"name": "凯尔希",
"own": true,
"elite": 2,
"level": 50,
"potential": 1,
"rarity": 6
}
]
```
- `UnsupportedLevel`
自動作戦で、サポートされていないレベル名
自動作戦で、サポートされていないレベル名
### ReportRequest

View File

@@ -28,7 +28,7 @@ JSONファイルはコメントをサポートしておらず、テキスト内
// 2 - X回使用例えば、マウンテン スキル2は1回、チョンユエ スキル3は5回、"skill_times" フィールドで設定)
// 3 - 自動判定 (未実装)
// 自動発動のスキルであれば0を記入
"skill_times": 5, // スキル使用回数。オプション、デフォルトは1
"requirements": { // 要件、予約フィールド、未実装、オプション、デフォルトは空白
@@ -110,7 +110,7 @@ JSONファイルはコメントをサポートしておらず、テキスト内
// 上記例の場合 1 に設定してください
"skill_times": 5, // スキル使用回数。オプション、デフォルトは1
"pre_delay": 0, // 事前遅延 msミリ秒, オプション, デフォルトは 0
"post_delay": 0, // 事後遅延 msミリ秒, オプション, デフォルトは 0

View File

@@ -52,7 +52,6 @@ JSONファイルはコメントをサポートしていません。テキスト
3. 既存のグループ名を変更しないでください。 MAA の更新時に以前のバージョンの作業が使用できなくなる可能性があります
4. 新しいグループを追加しないようにし、新しく追加されたユニットを使用法に基づいて既存のグループに組み込むようにしてください
:::
::: tip
@@ -88,31 +87,31 @@ JSONファイルはコメントをサポートしていません。テキスト
ファントムテーマを例に取ると:主にオペレーターを以下のように分類しています
| グループ | 主な考慮事項 | 主に職種を含む | オペレーターの例 |
| :------------- | :----------------------------- | :----------------- | :----------------------------------------------------------------------------------------------- |
| **_地面阻挡_** | 場に立つことと雑魚を清掃 | 重装、前衛 | 庇護衛士、基石、ラ・プルマ、マウンテン、M3、リィンとシーンの召喚ユニット、スポット、重装予備隊員 |
| **_地面单切_** | 一人でエリートモンスターと戦う | 執行者-特殊 | スルト、血掟テキサス、キリンRヤトウ、M3、レッド |
| **_高台 C_** | 常態と決戦DPS | 狙撃、術師 | 遊龍チェン、ゴールデングロー、エイヤフィヤトラ、フィアメッタ |
| **_高台输出_** | 対空および通常DPS | 狙撃、術師 | アルケット、エクシア、クルース、スチュワード |
| **_奶_** | 治療能力 | 医療、補助 | ケルシ、濁心スカジ、ハイビスカス、アンセル |
| **_回费_** | cost 回復 | 先鋒 | テンニンカ、イネス、フェン、バニラ |
| **_炮灰_** | 砲弾吸収、再配置 | 特殊、召喚ユニット | M3、レッド、テンニンカ、予備隊員 |
| **_高台预备_** | DPS能力を持っています | | オーキッド、予備隊員 |
| グループ | 主な考慮事項 | 主に職種を含む | オペレーターの例 |
| :--- | :--- | :--- | :--- |
| **_地面阻挡_** | 場に立つことと雑魚を清掃 | 重装、前衛 | 庇護衛士、基石、ラ・プルマ、マウンテン、M3、リィンとシーンの召喚ユニット、スポット、重装予備隊員 |
| **_地面单切_** | 一人でエリートモンスターと戦う | 執行者-特殊 | スルト、血掟テキサス、キリンRヤトウ、M3、レッド |
| **_高台 C_** | 常態と決戦DPS | 狙撃、術師 | 遊龍チェン、ゴールデングロー、エイヤフィヤトラ、フィアメッタ |
| **_高台输出_** | 対空および通常DPS | 狙撃、術師 | アルケット、エクシア、クルース、スチュワード |
| **_奶_** | 治療能力 | 医療、補助 | ケルシ、濁心スカジ、ハイビスカス、アンセル |
| **_回费_** | cost 回復 | 先鋒 | テンニンカ、イネス、フェン、バニラ |
| **_炮灰_** | 砲弾吸収、再配置 | 特殊、召喚ユニット | M3、レッド、テンニンカ、予備隊員 |
| **_高台预备_** | DPS能力を持っています | | オーキッド、予備隊員 |
2. 特別な操作が必要なグループ
上記のような一般的なグループ以外に、時折、特定のオペレーターやオペレーターの種類に対して細かいカスタマイズが必要な場合があります。例えば
| グループ | 含まれるオペレーター | 主な特徴 |
| :--------- | :--------------------------- | :------------------------------------------------------------------------------------------------------------------ |
| 棘刺 | ソーンズ、ホルン | 地上遠隔攻撃、特定の位置に非常に適したマップがあります |
| 召唤类 | ケルシ、リィン、シーン | 地上ブロックを持ち、一部のマップでは優先的に配置する必要があり、召喚物はブロックまたは死体として使用できます |
| 情报官 | カンタービレ、イネス | コスト回収やサイドアウトプット、シングルカットが可能 |
| 浊心斯卡蒂 | 濁心スカジ | 低圧時の回復量はまあまあですが、範囲が特殊で、一部のマップには特に適しています |
| 焰苇 | 焔影リード | サーミローグはよく開局オペレーターを使い、治療と輸出を兼ねており、いくつかの図には比較的適切な位置がある |
| 银灰 | シルバーアッシュ、ムリナール | 地上の大規模な戦闘出力、ボスに対して配置できます |
| 史尔特尔 | スルト | 精二後、3スキルを固定搭載するため、この時点でのスタンバイ能力はほぼゼロで、ブロック位置の配置優先度は非常に低いです |
| 骰子 | ダイス | ミヅキテーマの中のダイスは個別に操作する必要があります |
| グループ | 含まれるオペレーター | 主な特徴 |
| :--- | :--- | :--- |
| 棘刺 | ソーンズ、ホルン | 地上遠隔攻撃、特定の位置に非常に適したマップがあります |
| 召唤类 | ケルシ、リィン、シーン | 地上ブロックを持ち、一部のマップでは優先的に配置する必要があり、召喚物はブロックまたは死体として使用できます |
| 情报官 | カンタービレ、イネス | コスト回収やサイドアウトプット、シングルカットが可能 |
| 浊心斯卡蒂 | 濁心スカジ | 低圧時の回復量はまあまあですが、範囲が特殊で、一部のマップには特に適しています |
| 焰苇 | 焔影リード | サーミローグはよく開局オペレーターを使い、治療と輸出を兼ねており、いくつかの図には比較的適切な位置がある |
| 银灰 | シルバーアッシュ、ムリナール | 地上の大規模な戦闘出力、ボスに対して配置できます |
| 史尔特尔 | スルト | 精二後、3スキルを固定搭載するため、この時点でのスタンバイ能力はほぼゼロで、ブロック位置の配置優先度は非常に低いです |
| 骰子 | ダイス | ミヅキテーマの中のダイスは個別に操作する必要があります |
::: info 注意
現在、識別されていない近距離オペレーターは最後から2番目のグループ其他地面に分類され、識別されていない遠距離オペレーターは最後から1番目のグループ其他高台に分類されます
@@ -218,6 +217,7 @@ JSONファイルはコメントをサポートしていません。テキスト
### MAA ローグの基本戦闘ロジック--パラスちゃんの高血圧の源
1. マップ上のタイルの種類に基づいた基本的な戦闘操作
- MAA はマップ上のタイルが青い扉か赤い扉か、高台か地面か、配置可能かどうかに基づいて基本的な戦闘操作を行います。
- MAA はマップの名前や番号に基づいてどの作業を使用するかを決定し、マップの**一般**、**緊急**、**ルートネット**、**暗号板使用**などの状況を判断しません。
@@ -226,6 +226,7 @@ JSONファイルはコメントをサポートしていません。テキスト
したがって、後で、**すべての異なる状況**上記で言及した状況に対処できる戦闘ロジックを設計する必要があります。皆に「このマップの操作は高血圧だ」とissueで言われないように気をつけてください
2. MAA の基本的な作戦戦略--青い扉を封鎖
1. 地面オペレーターは青い扉のタイルに優先して配置されます(なぜタイル上なのかは後で説明)、またはその周囲に配置され、方向は赤い扉に向けられます(自動計算)。
2. 地面を優先して配置し、その後治療オペレーターや高台オペレーターを配置し、青い扉から周囲に向かって一周ずつ配置します。

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