mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-20 10:57:45 +08:00
Release v6.2.0-beta.1 (#15299)
This commit is contained in:
@@ -2,29 +2,25 @@ FROM mcr.microsoft.com/devcontainers/base:ubuntu
|
||||
|
||||
USER vscode
|
||||
|
||||
ENV CONDA_DIR=/home/vscode/miniconda
|
||||
ENV PATH="$CONDA_DIR/bin:$PATH"
|
||||
ENV PATH="/home/vscode/.local/bin:${PATH}"
|
||||
|
||||
ARG PYTHON_VERSION=3.12
|
||||
ARG PYTHON_VERSION=3.12.11
|
||||
ARG NODEJS_VERSION=24
|
||||
|
||||
# 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
|
||||
# Install and setup mise and uv
|
||||
RUN curl https://mise.run | sh
|
||||
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
|
||||
# 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
|
||||
# Activate mise
|
||||
RUN echo 'eval "$(mise activate bash)"' >> ~/.bashrc
|
||||
|
||||
# Finalize conda setup
|
||||
RUN conda init \
|
||||
&& conda config --set auto_activate false \
|
||||
&& echo "conda activate maa" >> ~/.bashrc
|
||||
# Setup Python and Node.js
|
||||
RUN mise use -g node@$NODEJS_VERSION
|
||||
RUN uv python install $PYTHON_VERSION
|
||||
|
||||
# Create and activate venv
|
||||
RUN uv venv --clear ~/.venv/maa
|
||||
RUN echo "source ~/.venv/maa/bin/activate" >> ~/.bashrc
|
||||
|
||||
# Install tools
|
||||
RUN uv tool install prek
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
#!/bin/bash
|
||||
WORKSPACE=$(pwd)
|
||||
|
||||
# conda activate maa
|
||||
|
||||
echo "===================="
|
||||
cd "$WORKSPACE"
|
||||
echo "Setting up git safe.directory..."
|
||||
|
||||
@@ -2,36 +2,40 @@ FROM mcr.microsoft.com/devcontainers/base:ubuntu
|
||||
|
||||
USER vscode
|
||||
|
||||
ENV CONDA_DIR=/home/vscode/miniconda
|
||||
ENV PATH="$CONDA_DIR/bin:$PATH"
|
||||
ENV PATH="/home/vscode/.local/bin:${PATH}"
|
||||
|
||||
ARG CLANGD_VERSION=20
|
||||
ARG PYTHON_VERSION=3.12
|
||||
ARG PYTHON_VERSION=3.12.11
|
||||
ARG NODEJS_VERSION=24
|
||||
|
||||
# Install system dependencies
|
||||
RUN sudo apt update \
|
||||
&& sudo apt upgrade -y \
|
||||
&& sudo apt install -y \
|
||||
cmake
|
||||
cmake \
|
||||
fish \
|
||||
&& sudo rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# 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
|
||||
# Initialize fish
|
||||
RUN fish -c exit
|
||||
|
||||
# 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 ruff
|
||||
# Install and setup mise and uv
|
||||
RUN curl https://mise.run | sh
|
||||
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
|
||||
# Finalize conda setup
|
||||
RUN conda init \
|
||||
&& conda config --set auto_activate false \
|
||||
&& echo "conda activate maa" >> ~/.bashrc
|
||||
# Activate mise
|
||||
RUN echo 'eval "$(mise activate bash)"' >> ~/.bashrc
|
||||
RUN echo 'mise activate fish | source' >> ~/.config/fish/config.fish
|
||||
|
||||
# Setup Python and Node.js
|
||||
RUN mise use -g node@$NODEJS_VERSION
|
||||
RUN uv python install $PYTHON_VERSION
|
||||
|
||||
# Create and activate venv
|
||||
RUN uv venv --clear ~/.venv/maa
|
||||
RUN echo "source ~/.venv/maa/bin/activate" >> ~/.bashrc
|
||||
RUN echo "source ~/.venv/maa/bin/activate.fish" >> ~/.config/fish/config.fish
|
||||
|
||||
# Install tools
|
||||
RUN uv tool install prek
|
||||
RUN uv tool install ruff
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
// Language-specific formatting
|
||||
"[python]": {
|
||||
"editor.defaultFormatter": "ms-python.black-formatter",
|
||||
"editor.defaultFormatter": "charliermarsh.ruff",
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.organizeImports": "explicit"
|
||||
}
|
||||
@@ -54,12 +54,9 @@
|
||||
"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.defaultInterpreterPath": "/home/vscode/.venv/maa/bin/python",
|
||||
"python.terminal.activateEnvironment": false,
|
||||
|
||||
// CMake settings
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
#!/bin/bash
|
||||
WORKSPACE=$(pwd)
|
||||
|
||||
# conda activate maa
|
||||
|
||||
echo "===================="
|
||||
cd "$WORKSPACE"
|
||||
echo "Setting up git safe.directory..."
|
||||
@@ -27,14 +25,14 @@ echo "Installing Python dependencies..."
|
||||
for req_file in tools/*/requirements.txt; do
|
||||
if [ -f "$req_file" ]; then
|
||||
echo "Installing from $req_file"
|
||||
pip install -r "$req_file"
|
||||
uv 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"
|
||||
uv pip install -r "$req_file"
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
2
.github/issue-checker.yml
vendored
2
.github/issue-checker.yml
vendored
@@ -252,7 +252,7 @@ labels:
|
||||
# `module: fight`
|
||||
- name: fight
|
||||
content: "module: fight"
|
||||
regexes: "刷图|刷理智|剿灭|刷.{0,6}材料|关卡选择|战斗|作战|[戰戦][鬥闘]|[Ff]ight|[Bb]attle|[Aa]nihilation"
|
||||
regexes: "刷图|理智|剿灭|刷.{0,6}材料|关卡选择|战斗|作战|[戰戦][鬥闘]|[Ff]ight|[Bb]attle|[Aa]nihilation"
|
||||
skip-if:
|
||||
- skip all
|
||||
- skip module
|
||||
|
||||
4
.github/workflows/ci.yml
vendored
4
.github/workflows/ci.yml
vendored
@@ -278,10 +278,10 @@ jobs:
|
||||
|
||||
- name: Build CLI
|
||||
run: |
|
||||
cargo build --release --locked --package maa-cli --features vendored-openssl
|
||||
cargo build --release --locked --package maa-cli --features git2/vendored-openssl
|
||||
cp -v target/$CARGO_BUILD_TARGET/release/maa $GITHUB_WORKSPACE/install/maa
|
||||
cargo build --release --locked --package maa-cli --no-default-features \
|
||||
--features git2,vendored-openssl
|
||||
--features git2,git2/vendored-openssl
|
||||
cp -v target/$CARGO_BUILD_TARGET/release/maa $GITHUB_WORKSPACE/appimage-maa
|
||||
working-directory: src/maa-cli
|
||||
|
||||
|
||||
158
CHANGELOG.md
158
CHANGELOG.md
@@ -1,137 +1,45 @@
|
||||
## v6.1.1
|
||||
|
||||
### Highlights
|
||||
|
||||
#### 新增隐秘战线(Hidden Front)玩法支持
|
||||
|
||||
本次版本新增隐秘战线(Hidden Front)功能。支持完整流程控制与识别逻辑,为相关玩法提供稳定、可用的自动化支持。
|
||||
v6.1.1 新增系列任务支持。
|
||||
|
||||
#### 外服肉鸽(界园)适配
|
||||
|
||||
完善了 Yostar JP / KR / EN 服务器的肉鸽(界园)玩法支持。
|
||||
|
||||
#### 日志悬浮窗正式上线
|
||||
|
||||
新增日志悬浮窗功能,可实时展示自动战斗相关日志,并支持通过托盘菜单快速切换显示状态,便于运行观测与问题排查。
|
||||
|
||||
#### 更新提示支持点击直接触发更新
|
||||
|
||||
主界面左上角的新版本提示现已支持点击,用户可直接触发更新流程,减少操作步骤。
|
||||
|
||||
----
|
||||
|
||||
#### New Hidden Front Support Across All Servers
|
||||
|
||||
This release introduces full support for the Hidden Front feature across all servers, with complete flow handling and recognition logic to ensure stable and reliable automation.
|
||||
v6.1.1 adds support for a series of new tasks.
|
||||
|
||||
#### Overseas Roguelike (JieGarden) Support
|
||||
|
||||
Roguelike (JieGarden) support has been improved for Yostar JP / KR / EN servers.
|
||||
|
||||
#### Floating Log Window Introduced
|
||||
|
||||
A new floating log window is now available, providing real-time visibility into auto-battle related logs. It can be toggled via the system tray for easier monitoring and debugging.
|
||||
|
||||
#### Clickable Update Notification in Main Window
|
||||
|
||||
The new version indicator in the top-left corner of the main window is now clickable, allowing users to directly trigger the update process for a smoother upgrade experience.
|
||||
|
||||
----
|
||||
|
||||
以下是详细内容:
|
||||
## v6.2.0-beta.1
|
||||
|
||||
### 新增 | New
|
||||
|
||||
* 隐秘战线支持系列任务 (#15249) @ABA2396 @HX3N @Constrat @Manicsteiner @momomochi987
|
||||
* 新增模板路径同步工具 (#15254) @ABA2396 @Constrat @HX3N @momomochi987
|
||||
* 添加孤星主题配置与模板图 @SherkeyXD
|
||||
* 繁中服「紅絲絨」活動導航 (#15234) @momomochi987
|
||||
* YostarEN base templates overhaul @Constrat
|
||||
* 增加冬时至基建温蒂组并调整温蒂组选人逻辑 (#15294) @drway
|
||||
* 新增成就系统 DLC 内容 (#15288) @ABA2396
|
||||
* 增强自动战斗文件选择功能,支持多级路径和相对目录 (#15174) @momomochi987 @ABA2396
|
||||
* 通知渠道添加 Gotify (#15284) @2436238575
|
||||
* 可以点击 20 次公告确认按钮关闭弹窗 @ABA2396
|
||||
* 允许设置是否启用线索交流与赠送线索 (#15278) @ABA2396
|
||||
* 给 bark 通知添加默认的分类组 (#15244) @Anselyuki
|
||||
* 重构主页日志侧边栏整体布局和样式 (#15211) @MistEO @ABA2396
|
||||
|
||||
### 改进 | Improved
|
||||
|
||||
* 优化 ImageCropper 输出 @SherkeyXD
|
||||
* optimize LoneTrail templates @Constrat
|
||||
* 优化路径显示的换行处理 @ABA2396
|
||||
* 在禁用时 TooltipBlock 显示特效 (#15260) @yali-hzy @ABA2396
|
||||
* devcontainer 从 conda 迁移至 mise/uv (#15251) @SherkeyXD
|
||||
|
||||
### 修复 | Fix
|
||||
|
||||
* 修复自动战斗击杀数识别错误 (#15266) @status102
|
||||
* 修复大地图技能、撤离按钮及相机偏移问题,连带修复引航者 S6 地图 TN-2 ~ TN-4 view[1] (#15252) @status102
|
||||
* 修复盲点撤退兜底逻辑 @status102
|
||||
* 修复自动战斗在未存在 debug/map 路径时无法生成地图截图的问题 @status102
|
||||
* 修复满线索再放入逻辑 @ABA2396
|
||||
* EN Sami floor detection regex @Constrat
|
||||
* Copper regex for Sui Garden EN @Constrat
|
||||
* bad reference @MistEO
|
||||
* 给缺失干员检查补上 Unavailable (#15296) @Alan-Charred
|
||||
* 尝试修复基建效率计算中的 out_of_range 异常 @ABA2396
|
||||
* 修复文档站搜索问题 @SherkeyXD
|
||||
* 远程控制截图无法获取最新图像 (#15276) @Hakuin123
|
||||
* Debug 图片保存目录 (#15250) @hguandl
|
||||
* 鬼影迷踪 -> 诡影迷踪 @ABA2396
|
||||
* update DormMini.png for EN (again) @Constrat
|
||||
* SA1633 warning missing copyright notice @Constrat
|
||||
|
||||
### 文档 | Docs
|
||||
|
||||
* 使用脚本一键安装 maa-cli (#15283) @wangl-cc
|
||||
* 源码链接同步最新行数 @Rbqwow
|
||||
* 中文集成文档统一格式 @ABA2396
|
||||
* 战斗协议 移动镜头 (#15261) @Daydreamer114
|
||||
* update KR documents (#15282) @HX3N
|
||||
|
||||
### 其他 | Other
|
||||
|
||||
* YostarJP copper regex (#15257) @eyjafjallascomb @Manicsteiner
|
||||
* YostarJP roguelike JieGarden OCR 优化 @Manicsteiner
|
||||
* KR tweak NightlyWarning and CheckBeforeReportingIssue @HX3N
|
||||
* 减少 string_view 滥用 @MistEO
|
||||
* 统一 `DEBUG_VERSION` @MistEO
|
||||
|
||||
----
|
||||
|
||||
## v6.1.0
|
||||
|
||||
### 新增 | New
|
||||
|
||||
* 隐秘战线(Hidden Front)支持 @ABA2396 @Manicsteiner @HX3N @Constrat
|
||||
* Yostar JP/KR/EN 界园肉鸽支持 @Manicsteiner @HX3N @Constrat
|
||||
* 支持点击标题栏左上角“检测到新版本”提示直接触发更新 @ABA2396
|
||||
* 新增极寒保全派驻作业与相关自动战斗支持 @Saratoga-Official @ABA2396
|
||||
* 新增日志悬浮窗,支持自动战斗日志源与布局优化 (#15185) @ABA2396
|
||||
* 右键托盘菜单新增日志悬浮窗显示切换 @ABA2396
|
||||
* WPF 日志系统支持按级别输出日志文件 @status102
|
||||
* 满线索状态下一键置入线索 @ABA2396
|
||||
* 移除未使用的模板资源 (#15207) @Constrat
|
||||
* 更新期间退出应用时增加二次确认提示 (#14964) @Hakuin123 @ABA2396
|
||||
|
||||
### 改进 | Improved
|
||||
|
||||
* move_camera 允许微调镜头 (#15220) @Daydreamer114
|
||||
* 任务运行期间,即使组件被禁用也可正常查看 Tooltip (#15186) @yali-hzy
|
||||
* 模板资源整体重构与体积优化,提升加载与识别效率 @Constrat
|
||||
* TemplResource 图片查找流程预构建索引,加快匹配速度 (#15092) @status102
|
||||
* ProcessTask 任务支持命中结果缓存,减少重复计算 (#12651) @status102
|
||||
* StableHash 算法优化,提升一致性与性能 @ABA2396
|
||||
* 截图工具统一将来自 src 的截图缩放至目标分辨率 @DavidWang19
|
||||
* RefreshCustomInfrastPlanIndexByPeriod 支持传入当前时间 @ABA2396
|
||||
* 悬浮窗整体布局与交互体验优化 @ABA2396
|
||||
* 使用 boost::regex 替换 std::regex,提高正则性能 (#15126) @MistEO
|
||||
* Update ko-kr.xaml (#15213) @178619
|
||||
|
||||
### 修复 | Fix
|
||||
|
||||
* 有猪把切换主题改炸了 @ABA2396
|
||||
* 引航者试炼借助战 @ABA2396
|
||||
* 修复资源更新错误复制 cache 文件夹的问题 @ABA2396
|
||||
* 修复更新后未成功下载的 OTA 包未被清理的问题 @status102
|
||||
* 修复更新界面在无可用 OTA 增量包时提示不正确的问题 @ABA2396
|
||||
* 修复 MacOS 下 asst.log 被意外自动清空的问题 (#15122) @Alan-Charred
|
||||
* 修复路径字符串首尾空格与控制字符导致的问题 (#15082) @mayuri0v0
|
||||
* 修复窗口更新检测按钮在更新期间未禁用的问题 @ABA2396
|
||||
* 修复日志与 UI 延迟变化导致的误匹配问题 (#15198) @status102
|
||||
* 修复 ROI 越界与更新工具异常 (#15204) @178619
|
||||
* 修复自动战斗中借用非好友助战后卡在加好友界面的问题 @ABA2396
|
||||
* 修复快速编队与模拟器卡顿导致的误点击与异常进入界面问题 @Saratoga-Official
|
||||
* 修复保全派驻在网络波动下可能无法确认阵容的问题 @ABA2396
|
||||
* 修复通宝与铜钱识别失败时的异常流程与卡死问题 (#15167 #15180 #15197) @travellerse @HX3N
|
||||
* 修复多服 OCR / 正则匹配问题,提升识别准确率(EN / JP / KR / 繁中) @Constrat @HX3N @Manicsteiner @momomochi987
|
||||
* 修复关卡名、掉落、通宝、铜钱、助战、招募等多处模板或识别错误 @ABA2396 @Constrat
|
||||
* Fixed multiple OCR regex issues for EN servers, improving drop, currency, and stage name recognition @Constrat
|
||||
* ClueGiveTo1stConfirm use delay for all client @Constrat
|
||||
|
||||
### 其他 | Other
|
||||
|
||||
* 调整倍战超过限制提示 @ABA2396
|
||||
* 更新 macos.cmake 构建配置 (#15173) @Alan-Charred
|
||||
* 更新 C# EditorConfig 以支持 C# 13 / 14 (#15146) @status102
|
||||
* 更新 pre-commit 与开发工具链配置 @SherkeyXD
|
||||
* 移除过时的代码检查与格式化配置,简化开发流程 @SherkeyXD
|
||||
* 悬浮窗移动时不再自动隐藏,避免与部分窗口(如 QQ)交互闪烁的问题 @ABA2396
|
||||
* continue on error required for blame ignore\npost @Constrat
|
||||
* 调整注释 @ABA2396
|
||||
* 微调公告确认按钮位置 @SherkeyXD
|
||||
* add IsDebugVersion to _forcedReloadResource (#15293) @Constrat
|
||||
* YostarKR tweak AS-OpenOcr @HX3N
|
||||
* YostarJP roguelike JieGarden ocr edit @Manicsteiner
|
||||
|
||||
@@ -46,7 +46,7 @@ MAA 的意思是 MAA Assistant Arknights
|
||||
|
||||
## 亮点功能
|
||||
|
||||
- 刷理智,掉落识别及上传 [企鹅物流](https://penguin-stats.cn/),[一图流](https://ark.yituliu.cn/)
|
||||
- 理智作战,掉落识别及上传 [企鹅物流](https://penguin-stats.cn/),[一图流](https://ark.yituliu.cn/)
|
||||
- 智能基建换班,自动计算干员效率,单设施内最优解;同时也支持 [自定义排班](https://docs.maa.plus/zh-cn/protocol/base-scheduling-schema.html)
|
||||
- 自动公招,可选使用加急许可,一次全部刷完!公招数据自动上传 [企鹅物流](https://penguin-stats.cn/result/stage/recruit/recruit),[一图流](https://ark.yituliu.cn/survey/maarecruitdata)
|
||||
- 支持手动识别公招界面,方便对高星公招做出选择 ~~(你的这个高资回费出的是推王呢还是推王呢)~~
|
||||
|
||||
@@ -2,7 +2,7 @@ export default {
|
||||
provider: 'algolia' as const,
|
||||
appId: '9ARM1N4899',
|
||||
apiKey: 'f42bf1d18c786d5a46da30eccac5cb34',
|
||||
indexName: 'maa',
|
||||
indexName: 'MaaAssistantArknights',
|
||||
locales: {
|
||||
'/zh-cn/': {
|
||||
placeholder: '搜索',
|
||||
|
||||
@@ -3,123 +3,194 @@ order: 1
|
||||
icon: material-symbols:download
|
||||
---
|
||||
|
||||
# Install and Build
|
||||
# Installation and Compilation
|
||||
|
||||
There are multiple ways to install maa-cli, including package managers, precompiled binaries, and building from source with `cargo`.
|
||||
There are multiple ways to install maa-cli, including pre-compiled binaries, package managers, and building from source with `cargo`.
|
||||
|
||||
## Pre-compiled Binaries
|
||||
|
||||
The easiest way to install maa-cli is by using the installation script:
|
||||
|
||||
::: tabs#pre-compile
|
||||
|
||||
@tab:active Linux and macOS
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/MaaAssistantArknights/maa-cli/main/install.sh | bash
|
||||
```
|
||||
|
||||
@tab Windows (PowerShell)
|
||||
|
||||
```powershell
|
||||
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/MaaAssistantArknights/maa-cli/main/install.ps1" -OutFile install.ps1; .\install.ps1
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
You can later update maa-cli by running `maa self update`.
|
||||
|
||||
If your platform is not listed above, you can try to [build from source](#build-from-source).
|
||||
|
||||
## Install via Package Manager
|
||||
|
||||
For macOS and supported Linux distributions, it is recommended to install maa-cli using a package manager.
|
||||
For macOS and supported Linux distributions, you can install maa-cli using a package manager.
|
||||
|
||||
### macOS
|
||||
|
||||
Homebrew users can install maa-cli via the unofficial [tap](https://github.com/MaaAssistantArknights/homebrew-tap/):
|
||||
|
||||
- Stable release:
|
||||
::: code-tabs
|
||||
|
||||
```bash
|
||||
brew install MaaAssistantArknights/tap/maa-cli
|
||||
```
|
||||
@tab:active Stable
|
||||
|
||||
- Beta releases:
|
||||
```bash :no-line-numbers
|
||||
brew install MaaAssistantArknights/tap/maa-cli
|
||||
```
|
||||
|
||||
```bash
|
||||
brew install MaaAssistantArknights/tap/maa-cli-beta
|
||||
```
|
||||
@tab Unstable/Pre-release
|
||||
|
||||
```bash :no-line-numbers
|
||||
brew install MaaAssistantArknights/tap/maa-cli-beta
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
### Linux
|
||||
|
||||
- Arch Linux users can install the [AUR package](https://aur.archlinux.org/packages/maa-cli/):
|
||||
Arch, Nix, and Linux Homebrew users can install maa-cli via their package managers.
|
||||
|
||||
```bash
|
||||
yay -S maa-cli
|
||||
```
|
||||
#### Arch Linux
|
||||
|
||||
- ❄️ Nix users can run directly:
|
||||
You can install the [AUR package](https://aur.archlinux.org/packages/maa-cli/):
|
||||
|
||||
```bash
|
||||
# Stable release
|
||||
nix run nixpkgs#maa-cli
|
||||
```
|
||||
::: code-tabs
|
||||
|
||||
```bash
|
||||
# Nightly build
|
||||
nix run github:Cryolitia/nur-packages#maa-cli-nightly
|
||||
```
|
||||
@tab:active paru
|
||||
|
||||
Stable is packaged in [nixpkgs](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-cli/package.nix), using the nixpkgs Rust toolchain; Nightly is in [NUR](https://github.com/Cryolitia/nur-packages/blob/master/pkgs/maa-assistant-arknights/maa-cli.nix), using the Beta Channel Rust toolchain, automatically updated and built daily by GitHub Actions.
|
||||
```bash :no-line-numbers
|
||||
paru -S maa-cli
|
||||
```
|
||||
|
||||
- Users using Homebrew on Linux please refer to the macOS installation method above.
|
||||
@tab yay
|
||||
|
||||
## Precompiled Binaries
|
||||
```bash :no-line-numbers
|
||||
yay -S maa-cli
|
||||
```
|
||||
|
||||
If package managers are not available on your system or you prefer not to use them, you can download the precompiled binaries for your platform from the following links. After decompressing, place the executable file in your `PATH` to use.
|
||||
:::
|
||||
|
||||
- [macOS](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-universal-apple-darwin.zip)
|
||||
- [Linux x86_64 (x64, amd64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-x86_64-unknown-linux-gnu.tar.gz)
|
||||
- [Linux aarch64 (arm64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-aarch64-unknown-linux-gnu.tar.gz)
|
||||
- [Windows x86_64 (x64, amd64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-x86_64-pc-windows-msvc.zip)
|
||||
- [Windows aarch64 (arm64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-aarch64-pc-windows-msvc.zip)
|
||||
#### ❄️ Nix
|
||||
|
||||
If your platform is not listed above, you can try to compile and install it yourself (see below).
|
||||
Users can run directly:
|
||||
|
||||
::: code-tabs
|
||||
|
||||
@tab:active Stable
|
||||
|
||||
```bash :no-line-numbers
|
||||
nix run nixpkgs#maa-cli
|
||||
```
|
||||
|
||||
@tab Nightly Build
|
||||
|
||||
```bash :no-line-numbers
|
||||
nix run github:Cryolitia/nur-packages#maa-cli-nightly
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
The stable version is packaged in [nixpkgs](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-cli/package.nix), using the Rust toolchain from `nixpkgs`; the nightly build is in [NUR](https://github.com/Cryolitia/nur-packages/blob/master/pkgs/maa-assistant-arknights/maa-cli.nix), using the Beta channel Rust toolchain, and is automatically updated and verified daily by a GitHub Actions.
|
||||
|
||||
#### Homebrew
|
||||
|
||||
For users who use Homebrew on Linux, please refer to the macOS installation method.
|
||||
|
||||
#### Other Distributions
|
||||
|
||||
Please use the [pre-compiled binaries](#pre-compiled-binaries) or [build from source](#build-from-source).
|
||||
|
||||
We welcome interested developers to submit maa-cli to the official or user repositories of more distributions!
|
||||
|
||||
## Build from Source
|
||||
|
||||
Rust developers can compile and install maa-cli themselves via `cargo`:
|
||||
Rust developers can compile and install maa-cli using `cargo`:
|
||||
|
||||
- Stable version:
|
||||
::: code-tabs
|
||||
|
||||
```bash
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --tag stable --locked
|
||||
```
|
||||
@tab:active Stable Version
|
||||
|
||||
- Development version:
|
||||
```bash :no-line-numbers
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --tag stable --locked
|
||||
```
|
||||
|
||||
```bash
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --locked
|
||||
```
|
||||
@tab Development Version
|
||||
|
||||
### Features
|
||||
```bash :no-line-numbers
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --locked
|
||||
```
|
||||
|
||||
When compiling from source, you can disable the default features with `--no-default-features` and then enable specific features with `--features`. The available features are:
|
||||
:::
|
||||
|
||||
- `cli_installer`: Provide `maa self update` command to update self, this feature is enabled by default;
|
||||
- `core_installer`: Provide `maa install` and `maa update` commands to install and update MaaCore and resources, this feature is enabled by default;
|
||||
- `git2`: Provide `libgit2` resource backend, this feature is enabled by default;
|
||||
- `vendored-openssl`: Build OpenSSL library by self instead of using system library, this feature is disabled by default;
|
||||
::: warning
|
||||
The Minimum Supported Rust Version (MSRV) for maa-cli is currently 1.88. Please note that the MSRV may change at any time, and we recommend always using the latest Rust toolchain for the best experience.
|
||||
:::
|
||||
|
||||
## Install MaaCore
|
||||
### Build Options
|
||||
|
||||
maa-cli only provides an interface for MaaCore, it needs MaaCore and resources to run tasks, which can be installed by maa-cli once it is installed:
|
||||
When compiling from source, you can disable default features with `--no-default-features` and then enable specific features with `--features`. The available features are:
|
||||
|
||||
```bash
|
||||
- `cli_installer`: Enables the `maa self update` command for self-updating. Enabled by default.
|
||||
- `core_installer`: Enables the `maa install` and `maa update` commands for installing and updating MaaCore and its resources. Enabled by default.
|
||||
- `git2`: Provides the `libgit2` backend for resource updates. Enabled by default.
|
||||
|
||||
## Install MaaCore and Resources
|
||||
|
||||
maa-cli only provides a command-line interface; it requires MaaCore and resources to run tasks.
|
||||
|
||||
Your steps will differ depending on the installation method and platform:
|
||||
|
||||
::: tabs#maacore
|
||||
|
||||
@tab:active Pre-compiled
|
||||
For users of pre-compiled binaries or those who built from source, maa-cli can help you install and update:
|
||||
|
||||
```bash :no-line-numbers
|
||||
maa install
|
||||
```
|
||||
|
||||
For Windows platform users, before running the `maa install` command, please run the following command as administrator in Command Prompt or PowerShell to install the required VC++ toolset:
|
||||
@tab Windows
|
||||
For Windows users, before running `maa install`, please run the following command as an administrator in Command Prompt or PowerShell to install the necessary VC++ runtime:
|
||||
|
||||
- Windows:
|
||||
```bat :no-line-numbers
|
||||
winget install "Microsoft.VCRedist.2015+.x64" --override "/repair /passive /norestart" --uninstall-previous --accept-package-agreements --force
|
||||
```
|
||||
|
||||
```bat
|
||||
winget install "Microsoft.VCRedist.2015+.x64" --override "/repair /passive /norestart" --uninstall-previous --accept-package-agreements --force
|
||||
```
|
||||
Then run `maa install`.
|
||||
|
||||
For users who installed via package managers, MaaCore can also be installed via package managers:
|
||||
@tab Arch
|
||||
You can use maa-cli to install the pre-compiled MaaCore:
|
||||
|
||||
- Homebrew:
|
||||
```bash :no-line-numbers
|
||||
maa install
|
||||
```
|
||||
|
||||
```bash
|
||||
brew install MaaAssistantArknights/tap/maa-core
|
||||
```
|
||||
You can also install maa-core via the [AUR](https://aur.archlinux.org/packages/maa-assistant-arknights/):
|
||||
|
||||
- Arch Linux:
|
||||
```bash :no-line-numbers
|
||||
paru -S maa-assistant-arknights
|
||||
```
|
||||
|
||||
```bash
|
||||
yay -S maa-assistant-arknights
|
||||
```
|
||||
or
|
||||
|
||||
- Nix:
|
||||
```bash :no-line-numbers
|
||||
yay -S maa-assistant-arknights
|
||||
```
|
||||
|
||||
maa-cli on Nix depends on the MaaCore package, so no additional installation is required.
|
||||
@tab Nix
|
||||
maa-cli on Nix has a hard dependency on MaaCore, so Nix users do not need to, and should not, install MaaCore manually.
|
||||
|
||||
**NOTE**: Only users who installed maa-cli via package managers can install MaaCore via package managers. Otherwise, please use the `maa install` command to install. In addition, the `maa install` downloads the official precompiled MaaCore, while the MaaCore installed by package managers has different compilation options and dependency versions from the official precompiled version, potentially causing variations in behavior and performance.
|
||||
:::
|
||||
|
||||
::: warning
|
||||
`maa install` downloads the officially pre-compiled MaaCore. MaaCore installed via package managers may use different compile options and dependency versions, which might lead to slight differences in performance and functionality.
|
||||
:::
|
||||
|
||||
@@ -158,7 +158,7 @@ For `C:\ProgramData\BlueStacks_nxt\bluestacks.conf`:
|
||||
|
||||
Select the configuration matching your emulator. If not listed, choose General Configuration. If that doesn't work, try any other available configuration.
|
||||
|
||||
For specific differences, see the [source code](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/dev/resource/config.json#L65).
|
||||
For specific differences, see the [source code](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/dev/resource/config.json#L57).
|
||||
|
||||
### MuMu Screenshot Enhanced Mode
|
||||
|
||||
|
||||
@@ -171,9 +171,10 @@ Supports some of the special stages, please refer to [autoLocalization example](
|
||||
"replenish": bool, // Whether to replenish Originium Shard in trading post, optional, by default false
|
||||
|
||||
"dorm_notstationed_enabled": bool, // Whether to enable "Not Stationed in Dorm" option, optional, by default false
|
||||
"dorm_trust_enabled": bool, // Whether to fill dormitory with operators not at max trust, optional, by default false
|
||||
"reception_message_board": bool, // Whether to collect credits from reception room message board, optional, by default true
|
||||
"reception_clue_exchange": bool, // Whether to perform clue exchange, optional, by default true
|
||||
"dorm_trust_enabled": bool, // Whether to fill dormitory with operators not at max trust, optional, by default false
|
||||
"reception_message_board": bool, // Whether to collect credits from reception room message board, optional, by default true
|
||||
"reception_clue_exchange": bool, // Whether to perform clue exchange, optional, by default true
|
||||
"reception_send_clue": bool, // Whether to send clues, optional, by default true
|
||||
|
||||
/* The following parameters are only effective when mode = 10000, otherwise they are ignored */
|
||||
"filename": string, // Custom config path, required. Editing in run-time is not supported.
|
||||
@@ -205,6 +206,7 @@ Supports some of the special stages, please refer to [autoLocalization example](
|
||||
"credit_fight": bool, // Whether to run one battle of OF-1 with support units to gain more Credits the next day; optional, default is false
|
||||
"formation_index": int // Formation slot index used for the OF-1 battle; optional, default is 0;
|
||||
// Integer between 0–4, where 0 = current squad, 1–4 = first, second, third, fourth squad
|
||||
// <Badge type="warning" text="Requires Infrastructure Shift task to take effect" />
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -9,79 +9,135 @@ icon: material-symbols:download
|
||||
This page is outdated and maybe still in Simplified Chinese. Translation is needed.
|
||||
:::
|
||||
|
||||
maa-cli 提供多种方式安装,包括包管理器、预编译二进制文件和通过 `cargo` 自行编译安装。
|
||||
maa-cli 提供多种方式安装,包括预编译二进制文件、包管理器和通过 `cargo` 自行编译安装。
|
||||
|
||||
## 预编译二进制文件
|
||||
|
||||
安装 maa-cli 最简单的方式是使用安装脚本一键安装:
|
||||
|
||||
::: tabs#pre-compile
|
||||
|
||||
@tab:active Linux 和 macOS
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/MaaAssistantArknights/maa-cli/main/install.sh | bash
|
||||
```
|
||||
|
||||
@tab Windows (PowerShell)
|
||||
|
||||
```powershell
|
||||
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/MaaAssistantArknights/maa-cli/main/install.ps1" -OutFile install.ps1; .\install.ps1
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
后续你可以通过 `maa self update` 来更新 maa-cli。
|
||||
|
||||
如果你的平台不在上述列表中,可以尝试自行[编译安装](#编译安装)。
|
||||
|
||||
## 通过包管理器安装
|
||||
|
||||
对于 macOS 和受支持的 Linux 发行版用户,推荐使用包管理器安装 maa-cli。
|
||||
对于 macOS 和受支持的 Linux 发行版用户,可以使用包管理器安装 maa-cli。
|
||||
|
||||
### macOS
|
||||
|
||||
Homebrew 用户可以通过非官方的 [tap](https://github.com/MaaAssistantArknights/homebrew-tap/) 安装 maa-cli:
|
||||
|
||||
- 稳定版本:
|
||||
::: code-tabs
|
||||
|
||||
```bash
|
||||
brew install MaaAssistantArknights/tap/maa-cli
|
||||
```
|
||||
@tab:active 稳定版
|
||||
|
||||
- 不稳定预发行版本:
|
||||
```bash :no-line-numbers
|
||||
brew install MaaAssistantArknights/tap/maa-cli
|
||||
```
|
||||
|
||||
```bash
|
||||
brew install MaaAssistantArknights/tap/maa-cli-beta
|
||||
```
|
||||
@tab 不稳定版/预发行版
|
||||
|
||||
```bash :no-line-numbers
|
||||
brew install MaaAssistantArknights/tap/maa-cli-beta
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
### Linux
|
||||
|
||||
- Arch Linux 用户可以安装 [AUR 包](https://aur.archlinux.org/packages/maa-cli/):
|
||||
Arch、Nix 以及 Linux Homebrew 用户可以通过包管理器安装 maa-cli。
|
||||
|
||||
```bash
|
||||
yay -S maa-cli
|
||||
```
|
||||
#### Arch Linux
|
||||
|
||||
- ❄️ Nix 用户可以直接运行:
|
||||
可以安装 [AUR 包](https://aur.archlinux.org/packages/maa-cli/):
|
||||
|
||||
```bash
|
||||
# 稳定版
|
||||
nix run nixpkgs#maa-cli
|
||||
```
|
||||
::: code-tabs
|
||||
|
||||
```bash
|
||||
# 每夜构建
|
||||
nix run github:Cryolitia/nur-packages#maa-cli-nightly
|
||||
```
|
||||
@tab:active paru
|
||||
|
||||
稳定版打包至 [nixpkgs](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-cli/package.nix) 中,使用 `nixpkgs` 中的 Rust 工具链;每夜构建位于 [NUR](https://github.com/Cryolitia/nur-packages/blob/master/pkgs/maa-assistant-arknights/maa-cli.nix) 中,使用 Beta channel 的 Rust 工具链,由 Github Action 每日自动更新和构建验证。
|
||||
```bash :no-line-numbers
|
||||
paru -S maa-cli
|
||||
```
|
||||
|
||||
- 对于在 Linux 上使用 Homebrew 的用户,参见上述 macOS 的安装方式。
|
||||
@tab yay
|
||||
|
||||
## 预编译二进制文件
|
||||
```bash :no-line-numbers
|
||||
yay -S maa-cli
|
||||
```
|
||||
|
||||
如果你的系统不受支持或者不想使用包管理器,你可以点击以下链接下载对应平台的预编译二进制文件,解压后将可执行文件放入 `PATH` 中即可使用。
|
||||
:::
|
||||
|
||||
- [macOS](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-universal-apple-darwin.zip)
|
||||
- [Linux x86_64 (x64, amd64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-x86_64-unknown-linux-gnu.tar.gz)
|
||||
- [Linux aarch64 (arm64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-aarch64-unknown-linux-gnu.tar.gz)
|
||||
- [Windows x86_64 (x64, amd64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-x86_64-pc-windows-msvc.zip)
|
||||
- [Windows aarch64 (arm64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-aarch64-pc-windows-msvc.zip)
|
||||
#### ❄️ Nix
|
||||
|
||||
如果你的平台不在上述列表中,可以尝试自行编译安装(参见下文)。
|
||||
用户可以直接运行:
|
||||
|
||||
::: code-tabs
|
||||
|
||||
@tab:active 稳定版
|
||||
|
||||
```bash :no-line-numbers
|
||||
nix run nixpkgs#maa-cli
|
||||
```
|
||||
|
||||
@tab 每夜构建
|
||||
|
||||
```bash :no-line-numbers
|
||||
nix run github:Cryolitia/nur-packages#maa-cli-nightly
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
稳定版打包至 [nixpkgs](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-cli/package.nix) 中,使用 `nixpkgs` 中的 Rust 工具链;每夜构建位于 [NUR](https://github.com/Cryolitia/nur-packages/blob/master/pkgs/maa-assistant-arknights/maa-cli.nix) 中,使用 Beta channel 的 Rust 工具链,由 Github Actions 每日自动更新和构建验证。
|
||||
|
||||
#### Homebrew
|
||||
|
||||
对于在 Linux 上使用 Homebrew 的用户,请参见上述 macOS 的安装方式。
|
||||
|
||||
#### 其他发行版
|
||||
|
||||
请使用 [预编译二进制文件](#预编译二进制文件) 或是 [自行编译安装](#编译安装)。
|
||||
|
||||
我们也欢迎各位有兴趣的开发者将 maa-cli 提交到更多发行版的官方仓库或是用户仓库!
|
||||
|
||||
## 编译安装
|
||||
|
||||
Rust 开发者可以通过 `cargo` 自行编译安装 maa-cli:
|
||||
|
||||
- 稳定版本:
|
||||
::: code-tabs
|
||||
|
||||
```bash
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --tag stable --locked
|
||||
```
|
||||
@tab:active 稳定版本
|
||||
|
||||
- 开发版本:
|
||||
```bash :no-line-numbers
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --tag stable --locked
|
||||
```
|
||||
|
||||
```bash
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --locked
|
||||
```
|
||||
@tab 开发版本
|
||||
|
||||
```bash :no-line-numbers
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --locked
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: warning
|
||||
maa-cli 目前的最低支持 Rust 版本 (MSRV) 为 1.88。请注意,MSRV 可能随时发生变化,我们建议始终使用最新的 Rust 工具链以获得最佳体验。
|
||||
:::
|
||||
|
||||
### 编译选项
|
||||
|
||||
@@ -89,33 +145,56 @@ Rust 开发者可以通过 `cargo` 自行编译安装 maa-cli:
|
||||
|
||||
- `cli_installer`: 启用 `maa self update` 命令,用于更新自身,这个特性默认启用;
|
||||
- `core_installer`: 启用 `maa install` 和 `maa update` 命令,用于安装和更新 MaaCore 及资源,这个特性默认启用;
|
||||
- `git2`: 提供 `libgit2` 资源更新后端,这个特性默认启用;
|
||||
- `vendored-openssl`: 自行编译 `openssl` 库,而不是使用系统的 `openssl` 库,这个特性默认禁用,这个特性通常在你的系统没有安装 `openssl` 库或者 `openssl` 版本过低时启用。
|
||||
- `git2`: 提供 `libgit2` 资源更新后端,这个特性默认启用。
|
||||
|
||||
## 安装 MaaCore 及资源
|
||||
|
||||
maa-cli 只提供了一个命令行界面,它需要 MaaCore 和资源来运行任务。一旦 maa-cli 安装完成,你可以通过它安装 MaaCore 及资源:
|
||||
maa-cli 只提供了一个命令行界面,它需要 MaaCore 和资源来运行任务。
|
||||
|
||||
```bash
|
||||
根据安装方式和平台的不同,你的操作也有所区别:
|
||||
|
||||
::: tabs#maacore
|
||||
|
||||
@tab:active 预编译
|
||||
对于使用预编译二进制或者自行编译的用户,maa-cli 可以帮助你安装和更新:
|
||||
|
||||
```bash :no-line-numbers
|
||||
maa install
|
||||
```
|
||||
|
||||
对于使用包管理器安装的用户,可以通过包管理器安装 MaaCore:
|
||||
@tab Windows
|
||||
对于 Windows 平台的用户,在运行 `maa install` 命令前,请以管理员身份在命令提示符或 PowerShell 中运行以下命令,以安装必要组件 VC++ 运行库:
|
||||
|
||||
- Homebrew:
|
||||
```bat :no-line-numbers
|
||||
winget install "Microsoft.VCRedist.2015+.x64" --override "/repair /passive /norestart" --uninstall-previous --accept-package-agreements --force
|
||||
```
|
||||
|
||||
```bash
|
||||
brew install MaaAssistantArknights/tap/maa-core
|
||||
```
|
||||
然后再运行 `maa install`。
|
||||
|
||||
- Arch Linux:
|
||||
@tab Arch
|
||||
你可以使用 maa-cli 安装预编译的 MaaCore:
|
||||
|
||||
```bash
|
||||
yay -S maa-assistant-arknights
|
||||
```
|
||||
```bash :no-line-numbers
|
||||
maa install
|
||||
```
|
||||
|
||||
- Nix:
|
||||
你也可以通过 [AUR](https://aur.archlinux.org/packages/maa-assistant-arknights/) 安装 maa-core
|
||||
|
||||
Nix 上的 maa-cli 强制依赖 MaaCore。 因此,Nix 用户无需,也不应该手动安装 MaaCore。
|
||||
```bash :no-line-numbers
|
||||
paru -S maa-assistant-arknights
|
||||
```
|
||||
|
||||
**注意**:只有使用包管理器安装 maa-cli 的用户才能使用包管理器安装 MaaCore,否则请使用 `maa install` 命令安装。此外,`maa install` 通过下载官方预编译的 MaaCore,而包管理器安装的 MaaCore 可能使用的编译选项和依赖版本与官方预编译的版本不同,这可能导致性能和功能上存在略微差异。
|
||||
或者
|
||||
|
||||
```bash :no-line-numbers
|
||||
yay -S maa-assistant-arknights
|
||||
```
|
||||
|
||||
@tab Nix
|
||||
Nix 上的 maa-cli 强制依赖 MaaCore,因此 Nix 用户无需,也不应该手动安装 MaaCore。
|
||||
|
||||
:::
|
||||
|
||||
::: warning
|
||||
`maa install` 下载的是 MAA 官方预编译的 MaaCore,而包管理器安装的 MaaCore 可能使用与官方预编译版本不同的编译选项和依赖版本,这也许会导致性能和功能上的略微差异。
|
||||
:::
|
||||
|
||||
@@ -202,7 +202,7 @@ MAA は現在 `bluestacks.conf` の保存場所をレジストリから読み取
|
||||
|
||||
対応するエミュレーターの設定を選択してください。リストにない場合は汎用設定を選択してください。汎用設定が利用できない場合は他の利用可能な設定を試し、選択してください。
|
||||
|
||||
具体的な違いについては、[ソースコード](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/dev/resource/config.json#L65)をご覧ください。
|
||||
具体的な違いについては、[ソースコード](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/dev/resource/config.json#L57)をご覧ください。
|
||||
|
||||
### MuMu スクリーンショット強化モード
|
||||
|
||||
|
||||
@@ -170,7 +170,10 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
|
||||
"threshold": float, // 宿舎に移動させる体力のしきい値 [0, 1.0]、オプション、デフォルトは 0.3
|
||||
"replenish": bool, // 源石の欠片を自動で補充する、オプション、デフォルトは false
|
||||
"dorm_notstationed_enabled": bool, // 寮の「入居していない」オプションを有効にするかどうか、オプション、デフォルトfalse
|
||||
"dorm_trust_enabled": bool, // 寮の残りの場所を信頼未満のオペレーターに記入するかどうか、オプション、デフォルトfalse
|
||||
"dorm_trust_enabled": bool, // 寮の残りの場所を信頼未満のオペレーターに記入するかどうか、オプション、デフォルトfalse
|
||||
"reception_message_board": bool, // 応接室の掲示板からクレジットを収集するかどうか、オプション、デフォルトtrue
|
||||
"reception_clue_exchange": bool, // 手がかり交換を実施するかどうか、オプション、デフォルトtrue
|
||||
"reception_send_clue": bool, // 手がかりを贈るかどうか、オプション、デフォルトtrue
|
||||
|
||||
/* 次のパラメータは、mode=10000でのみ有効になります。そうしないと無視されます */
|
||||
"filename": string, // カスタム構成パス、必須。実行中の設定はサポートされていません
|
||||
|
||||
@@ -23,15 +23,15 @@ icon: iconoir:developer
|
||||
|
||||
다음과 같은 다양한 개발 환경을 사전에 설정했습니다:
|
||||
|
||||
- 빈 환경(벌거숭이 Linux 컨테이너)(기본값)
|
||||
- 빈 환경 (순수 Linux 컨테이너) (기본값)
|
||||
|
||||
[](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights?devcontainer_path=.devcontainer%2Fdevcontainer.json)
|
||||
|
||||
- 경량 환경,문서 사이트 프론트엔드 개발에 적합
|
||||
- 경량 환경, 문서 사이트 프론트엔드 개발에 적합
|
||||
|
||||
[](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights?devcontainer_path=.devcontainer%2F0%2Fdevcontainer.json)
|
||||
|
||||
- 전체 환경,MAA Core 관련 개발에 적합(사용 권장하지 않음,로컬 개발 권장,관련 환경을 완전히 설정,다음 섹션 참조)
|
||||
- 전체 환경, MAA Core 관련 개발에 적합 (사용 권장하지 않음, 로컬 개발 권장, 관련 환경을 완전히 설정, 다음 섹션 참조)
|
||||
|
||||
[](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights?devcontainer_path=.devcontainer%2F1%2Fdevcontainer.json)
|
||||
|
||||
@@ -65,30 +65,37 @@ icon: iconoir:developer
|
||||
5. 개발 환경 구성
|
||||
- Visual Studio 2026 Community 설치 시 `C++ 데스크톱 개발` 및 `.NET 데스크톱 개발` 필수 선택
|
||||
|
||||
6. MAA.sln 파일 더블클릭 → Visual Studio에서 프로젝트 자동 로드
|
||||
7. VS 설정
|
||||
6. cmake 프로젝트 구성 실행
|
||||
|
||||
```cmd
|
||||
mkdir -p build
|
||||
cmake -G "Visual Studio 18 2026" -B build -DBUILD_WPF_GUI=ON -DBUILD_DEBUG_DEMO=ON
|
||||
```
|
||||
|
||||
7. `build/MAA.sln` 파일을 더블 클릭하여 엽니다. Visual Studio가 자동으로 전체 프로젝트를 로드합니다.
|
||||
8. VS 설정
|
||||
- 상단 구성에서 RelWithDebInfo x64 선택 (릴리스 빌드/ARM 플랫폼 시 생략)
|
||||
- MaaWpfGui 우클릭 → 속성 → 디버그 → 네이티브 디버깅 활성화 (C++ 코어 중단점 사용 가능)
|
||||
|
||||
8. 이제 자유롭게 ~~개조~~ 개발 시작!
|
||||
9. 주기적 커밋 (메시지 필수 작성)
|
||||
Git 초보자는 dev 브랜치 대신 새 브랜치 생성 권장:
|
||||
9. 이제 자유롭게 ~~개조~~ 개발 시작!
|
||||
10. 주기적 커밋 (메시지 필수 작성)
|
||||
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. 개발 완료 후 변경사항 원격 저장소로 푸시:
|
||||
11. 개발 완료 후 변경사항 원격 저장소로 푸시:
|
||||
|
||||
```bash
|
||||
git push origin dev
|
||||
```
|
||||
|
||||
11. [MAA 메인 저장소](https://github.com/MaaAssistantArknights/MaaAssistantArknights)에서 Pull Request 제출 (master 대신 dev 브랜치 지정 필수)
|
||||
12. 업스트림 저장소 변경사항 동기화 방법:
|
||||
12. [MAA 메인 저장소](https://github.com/MaaAssistantArknights/MaaAssistantArknights)에서 Pull Request 제출 (master 대신 dev 브랜치 지정 필수)
|
||||
13. 업스트림 저장소 변경사항 동기화 방법:
|
||||
1. 업스트림 저장소 추가:
|
||||
|
||||
```bash
|
||||
@@ -148,7 +155,7 @@ pip 설치 후에도 Pre-commit을 실행할 수 없다면, PIP 설치 경로가
|
||||
|
||||
이제, 매번 커밋할 때마다 포매팅 도구가 자동으로 실행되어 코드 형식이 규칙에 맞는지 확인합니다.
|
||||
|
||||
## Visual Studio에서 clang-format 사용 설정
|
||||
### Visual Studio에서 clang-format 사용 설정
|
||||
|
||||
1. clang-format 20.1.0 또는 그 이상 버전을 설치합니다.
|
||||
|
||||
|
||||
@@ -6,20 +6,18 @@ icon: jam:write-f
|
||||
# 문서 작성 가이드
|
||||
|
||||
::: tip
|
||||
이 문서의 목적은 문서 작성자가 주제가 제공하는 기능을 더 잘 활용하여 더 읽기 쉬운 효과를 얻는 데 도움을 주는 것입니다.
|
||||
이 문서의 목적은 문서 작성자가 테마가 제공하는 기능을 더 잘 활용하여 더 읽기 쉬운 효과를 얻는 데 도움을 주는 것입니다.
|
||||
:::
|
||||
|
||||
우리의 문서는 [vuepress](https://github.com/vuejs/vuepress)로 작성되었으며, [vuepress-theme-plume](https://github.com/pengzhanbo/vuepress-theme-plume) 테마를 사용하고 있습니다. 더 자세한 설명은 [공식 문서](https://theme-plume.vuejs.press/)를 참조할 수 있으며, 여기서는 일부 일반적인 기능에 대해서만 소개하겠습니다.
|
||||
우리의 문서는 [vuepress](https://github.com/vuejs/vuepress)로 구축되었으며, [vuepress-theme-plume](https://github.com/pengzhanbo/vuepress-theme-plume) 테마를 사용하고 있습니다. 더 자세한 설명은 [공식 문서](https://theme-plume.vuejs.press/)를 참조할 수 있으며, 여기서는 일부 일반적인 기능이나 커스텀된 기능에 대해서만 소개하겠습니다.
|
||||
|
||||
## 로컬 배포
|
||||
|
||||
1. [pnpm](https://pnpm.io/installation)을 설치하고, [Pull Request 가이드](./development.md#github-pull-request-진행-과정)을 참고해, 저장소를 로컬에 클론합니다.
|
||||
2. `docs` 경로에서 새로운 터미널을 열고, `pnpm i` 을 실행하여 의존성 파일을 다운로드합니다.
|
||||
1. [pnpm](https://pnpm.io/installation)을 설치하고, [Pull Request 가이드](./pr-tutorial.md)를 참고해, 저장소를 로컬에 클론합니다.
|
||||
2. `docs` 경로에서 새로운 터미널을 열고, `pnpm i` 를 실행하여 의존성을 설치합니다.
|
||||
3. `pnpm run dev` 를 실행하여 배포를 시작합니다.
|
||||
|
||||
## 컨테이너
|
||||
|
||||
~~도커 컨테이너가 아닙니다~~
|
||||
## 컨테이너와 카드
|
||||
|
||||
이 테마는 팁, 주석, 정보, 주의, 경고 및 세부 정보를 사용자 정의하는 컨테이너를 지원합니다. 이 기능을 사용하여 내용을 강조할 수 있습니다.
|
||||
|
||||
@@ -31,7 +29,14 @@ icon: jam:write-f
|
||||
:::
|
||||
```
|
||||
|
||||
허용되는 컨테이너 유형 및 기본 제목은 다음과 같습니다:
|
||||
또는 Github 스타일 구문 사용:
|
||||
|
||||
```markdown
|
||||
> [!컨테이너 타입]
|
||||
> 내용을 입력하세요
|
||||
```
|
||||
|
||||
허용되는 컨테이너 내용 및 기본 제목은 다음과 같습니다:
|
||||
|
||||
- `tip` 팁
|
||||
- `note` 주석
|
||||
@@ -39,42 +44,229 @@ icon: jam:write-f
|
||||
- `warning` 주의
|
||||
- `danger` 경고
|
||||
- `details` 세부 사항
|
||||
- `demo-wrapper` ==특수 컨테이너==
|
||||
|
||||
### 컨테이너 예시
|
||||
|
||||
::: tip
|
||||
이것은 팁 컨테이너입니다.
|
||||
이것은 팁 컨테이너입니다
|
||||
:::
|
||||
|
||||
::: note
|
||||
이것은 주석 컨테이너입니다.
|
||||
이것은 주석 컨테이너입니다
|
||||
:::
|
||||
|
||||
::: info
|
||||
이것은 정보 컨테이너입니다.
|
||||
이것은 정보 컨테이너입니다
|
||||
:::
|
||||
|
||||
::: warning
|
||||
이것은 주의 컨테이너입니다.
|
||||
이것은 주의 컨테이너입니다
|
||||
:::
|
||||
|
||||
::: danger
|
||||
이것은 위험 컨테이너입니다.
|
||||
이것은 위험 컨테이너입니다
|
||||
:::
|
||||
|
||||
::: details
|
||||
이것은 세부 사항 컨테이너입니다.
|
||||
이것은 세부 사항 컨테이너입니다
|
||||
:::
|
||||
|
||||
::: demo-wrapper
|
||||
이것은 매우 특별한 컨테이너입니다
|
||||
:::
|
||||
|
||||
## 형광펜 표시
|
||||
|
||||
마크다운 구문을 사용하여 원하는 내용을 표시하고 강조할 수 있습니다.
|
||||
|
||||
사용 방법: `==표시 내용=={표시 색상(선택 사항)}` 구문을 사용하여 표시하며, 양쪽에 공백이 있어야 합니다.
|
||||
|
||||
**입력:**
|
||||
|
||||
```markdown
|
||||
MaaAssistantArknights는 ==많은 돼지들== 에 의해 개발되었습니다
|
||||
```
|
||||
|
||||
**출력:**
|
||||
|
||||
MaaAssistantArknights는 ==많은 돼지들== 에 의해 개발되었습니다
|
||||
|
||||
테마에는 다음과 같은 색상 구성표가 내장되어 있습니다:
|
||||
|
||||
- **default**: `==Default==` - ==Default==
|
||||
- **info**: `==Info=={.info}` - ==Info=={.info}
|
||||
- **note**: `==Note=={.note}` - ==Note=={.note}
|
||||
- **tip**: `==Tip=={.tip}` - ==Tip=={.tip}
|
||||
- **warning**: `==Warning=={.warning}` - ==Warning=={.warning}
|
||||
- **danger**: `==Danger=={.danger}` - ==Danger=={.danger}
|
||||
- **caution**: `==Caution=={.caution}` - ==Caution=={.caution}
|
||||
- **important**: `==Important=={.important}` - ==Important=={.important}
|
||||
|
||||
## 숨겨진 텍스트
|
||||
|
||||
어떤 이유로 문서의 일부를 일시적으로 가려야 할 때, 숨겨진 텍스트 기능을 사용할 수 있습니다.
|
||||
|
||||
`!!숨겨야 할 내용!!{설정(선택 사항)}` 구문을 사용하여 사용할 수 있으며, 기본 효과는 다음과 같습니다.
|
||||
|
||||
!!왠지 모르게 맹모단(모에 백과)을 보고 있는 것 같다(취소선!!
|
||||
|
||||
다음과 같은 설정을 사용할 수 있습니다:
|
||||
|
||||
::: demo-wrapper
|
||||
입력:
|
||||
|
||||
```markdown
|
||||
+ 마스크 효과 + 마우스 호버: !!마우스 호버 시 보입니다!!{.mask .hover}
|
||||
+ 마스크 효과 + 클릭: !!클릭 시 보입니다!!{.mask .click}
|
||||
+ 블러 효과 + 마우스 호버: !!마우스 호버 시 보입니다!!{.blur .hover}
|
||||
+ 블러 효과 + 클릭: !!클릭 시 보입니다!!{.blur .click}
|
||||
```
|
||||
|
||||
출력:
|
||||
|
||||
- 마스크 효과 + 마우스 호버: !!마우스 호버 시 보입니다!!{.mask .hover}
|
||||
- 마스크 효과 + 클릭: !!클릭 시 보입니다!!{.mask .click}
|
||||
- 블러 효과 + 마우스 호버: !!마우스 호버 시 보입니다!!{.blur .hover}
|
||||
- 블러 효과 + 클릭: !!클릭 시 보입니다!!{.blur .click}
|
||||
|
||||
:::
|
||||
|
||||
## 단계 (Steps)
|
||||
|
||||
단계별 튜토리얼을 작성할 때, 순서가 있는 목록은 중첩으로 인해 계층 구조가 불분명해질 수 있습니다. 이럴 때 `steps` 컨테이너가 최고의 선택입니다.
|
||||
|
||||
이 컨테이너는 일반적인 컨테이너와 달리 시작과 끝을 표시하기 위해 4개의 콜론을 사용합니다.
|
||||
|
||||
입력:
|
||||
|
||||
````markdown
|
||||
:::: steps
|
||||
1. 단계 1
|
||||
|
||||
```ts
|
||||
console.log('Hello World!')
|
||||
```
|
||||
|
||||
2. 단계 2
|
||||
|
||||
여기는 단계 2의 관련 내용입니다
|
||||
|
||||
3. 단계 3
|
||||
|
||||
::: tip
|
||||
팁 컨테이너
|
||||
:::
|
||||
|
||||
4. 종료
|
||||
::::
|
||||
````
|
||||
|
||||
출력:
|
||||
|
||||
:::: steps
|
||||
|
||||
1. 단계 1
|
||||
|
||||
```ts
|
||||
console.log('Hello World!')
|
||||
```
|
||||
|
||||
2. 단계 2
|
||||
|
||||
여기는 단계 2의 관련 내용입니다
|
||||
|
||||
3. 단계 3
|
||||
|
||||
::: tip
|
||||
팁 컨테이너
|
||||
:::
|
||||
|
||||
4. 종료
|
||||
|
||||
::::
|
||||
|
||||
## 스마트 이미지 컨테이너
|
||||
|
||||
우리는 테마가 제공하는 기능을 기반으로 이미지 컨테이너를 포장했습니다. 이 컨테이너는 라이트/다크 테마에 따라 해당 이미지를 자동으로 표시하며, 자동 레이아웃을 지원합니다.
|
||||
|
||||
마크다운 본문에서 `<ImageGrid>` 컴포넌트를 사용하여 이 메서드를 호출할 수 있으며, 구체적인 구문과 효과는 다음과 같습니다.
|
||||
|
||||
::: demo-wrapper
|
||||
|
||||
구문:
|
||||
|
||||
```markdown
|
||||
<ImageGrid :imageList="[
|
||||
{
|
||||
light: 'images/zh-cn/readme/1-light.png',
|
||||
dark: 'images/zh-cn/readme/1-dark.png'
|
||||
},
|
||||
{
|
||||
light: 'images/zh-cn/readme/2-light.png',
|
||||
dark: 'images/zh-cn/readme/2-dark.png'
|
||||
},
|
||||
{
|
||||
light: 'images/zh-cn/readme/3-light.png',
|
||||
dark: 'images/zh-cn/readme/3-dark.png'
|
||||
},
|
||||
{
|
||||
light: 'images/zh-cn/readme/4-light.png',
|
||||
dark: 'images/zh-cn/readme/4-dark.png'
|
||||
}
|
||||
]" />
|
||||
```
|
||||
|
||||
렌더링 효과:
|
||||
|
||||
<ImageGrid :imageList="[
|
||||
{
|
||||
light: 'images/zh-cn/readme/1-light.png',
|
||||
dark: 'images/zh-cn/readme/1-dark.png'
|
||||
},
|
||||
{
|
||||
light: 'images/zh-cn/readme/2-light.png',
|
||||
dark: 'images/zh-cn/readme/2-dark.png'
|
||||
}
|
||||
]" />
|
||||
|
||||
:::
|
||||
|
||||
## 필드 컨테이너
|
||||
|
||||
이 구문은 다소 복잡하므로 [공식 문서](https://theme-plume.vuejs.press/guide/markdown/field/)를 참고하여 사용하세요.
|
||||
|
||||
효과는 다음과 같습니다.
|
||||
|
||||
:::: field-group
|
||||
::: field name="theme" type="ThemeConfig" required default="{ base: '/' }"
|
||||
테마 설정
|
||||
:::
|
||||
|
||||
::: field name="enabled" type="boolean" optional default="true"
|
||||
활성화 여부
|
||||
:::
|
||||
|
||||
::: field name="callback" type="(...args: any[]) => void" optional default="() => {}"
|
||||
<Badge type="tip" text="v1.0.0 추가" />
|
||||
콜백 함수
|
||||
:::
|
||||
|
||||
::: field name="other" type="string" deprecated
|
||||
<Badge type="danger" text="v0.9.0 폐기" />
|
||||
폐기된 속성
|
||||
:::
|
||||
::::
|
||||
|
||||
## 아이콘
|
||||
|
||||
이 테마는 아이콘을 지원합니다. 다음 위치에서 아이콘을 사용할 수 있습니다:
|
||||
|
||||
- 문서 제목: frontmatter에서 문서 제목 옆에 아이콘 설정
|
||||
- 문서 제목: frontmatter에서 문서 제목 옆에 아이콘 설정.
|
||||
|
||||
- 탐색 모음/사이드바: 탐색 모음 및 사이드바에 표시되는 아이콘 설정
|
||||
- 내비게이션 바/사이드바: 내비게이션 바와 사이드바에 표시되는 아이콘 설정.
|
||||
|
||||
- 문서 내용: 문서에서 아이콘 사용
|
||||
- 문서 내용: 문서 내에서 아이콘 사용.
|
||||
|
||||
### 문서의 아이콘 설정
|
||||
|
||||
@@ -94,32 +286,37 @@ icon: jam:write-f
|
||||
|
||||
### 문서에서 아이콘 사용
|
||||
|
||||
마크다운에서 `<HopeIcon />` 구성 요소를 사용하여 아이콘을 추가할 수 있습니다. 이 구성 요소에는 다음과 같은 속성이 있습니다:
|
||||
마크다운에서 `<Icon />` 컴포넌트를 사용하여 아이콘을 추가할 수 있습니다. 이 컴포넌트에는 다음과 같은 속성이 있습니다:
|
||||
|
||||
- `icon` 아이콘 키워드 및 URL 수신. 예: `jam:write-f`, `ic:round-home` 등
|
||||
- `color` css 스타일 색상 값 수신. 예: `#fff`, `red` 등 (이 옵션은 svg 아이콘에만 유효함)
|
||||
- `size` css 스타일 크기 값 수신. 예: `1rem`, `2em`, `100px` 등
|
||||
- `icon` 아이콘 키워드 및 URL을 받습니다. 예: `jam:write-f`, `ic:round-home` 등
|
||||
- `color` css 스타일 색상 값을 받습니다. 예: `#fff`, `red` 등 (이 옵션은 svg 아이콘에만 유효함)
|
||||
- `size` css 스타일 크기 값을 받습니다. 예: `1rem`, `2em`, `100px` 등
|
||||
|
||||
::: details 예시
|
||||
<HopeIcon icon="ic:round-home" color="#1f1e33"/>
|
||||
::: demo-wrapper 예시
|
||||
|
||||
입력:
|
||||
|
||||
```markdown
|
||||
<HopeIcon icon="ic:round-home" color="#1f1e33"/>
|
||||
- home - <Icon name="material-symbols:home" color="currentColor" size="1em" />
|
||||
- vscode - <Icon name="skill-icons:vscode-dark" size="2em" />
|
||||
- twitter - <Icon name="skill-icons:twitter" size="2em" />
|
||||
```
|
||||
|
||||
<HopeIcon icon="/images/maa-logo_512x512.png" size="4rem" />
|
||||
```markdown
|
||||
<HopeIcon icon="/images/maa-logo_512x512.png" size="4rem" />
|
||||
```
|
||||
출력:
|
||||
|
||||
- home - <Icon name="material-symbols:home" color="currentColor" size="1em" />
|
||||
- vscode - <Icon name="skill-icons:vscode-dark" size="2em" />
|
||||
- twitter - <Icon name="skill-icons:twitter" size="2em" />
|
||||
|
||||
:::
|
||||
|
||||
### 아이콘 키워드 가져오기
|
||||
### 아이콘 키워드 획득
|
||||
|
||||
이 문서에서 사용하는 아이콘은 [iconify](https://iconify.design/)에서 제공됩니다. 원하는 아이콘을 검색하려면 제공된 [아이콘 검색 페이지](https://icon-sets.iconify.design/)에서 검색한 다음 키워드를 복사하세요.
|
||||
이 문서에서 사용하는 아이콘은 [iconify](https://iconify.design/)에서 가져옵니다. 제공되는 [아이콘 검색 인터페이스](https://icon-sets.iconify.design/)에서 원하는 아이콘을 검색한 후 키워드를 복사할 수 있습니다.
|
||||
|
||||
## Frontmatter
|
||||
|
||||
Frontmatter는 Markdown 문서의 시작 부분에 `---`로 둘러싸인 내용이며 내부에서는 YAML 구문을 사용합니다. Frontmatter를 통해 문서의 편집 시간, 사용된 아이콘, 분류, 태그 등을 식별할 수 있습니다.
|
||||
Frontmatter는 마크다운 문서 맨 처음에 `---`로 감싸진 내용으로, 내부적으로 yml 문법을 사용합니다. Frontmatter를 통해 문서의 편집 시간, 사용하는 아이콘, 분류, 태그 등을 식별할 수 있습니다.
|
||||
|
||||
::: details 예시
|
||||
|
||||
@@ -139,6 +336,6 @@ order: 1
|
||||
|
||||
각 필드의 의미는 다음과 같습니다:
|
||||
|
||||
- `date` 문서의 편집 시간
|
||||
- `icon` 문서 제목 옆에 표시되는 아이콘
|
||||
- `order` 사이드바에서 문서의 순서
|
||||
- `date`: 문서의 편집 시간
|
||||
- `icon`: 문서 제목 옆의 아이콘
|
||||
- `order`: 사이드바에서 문서의 정렬 순서
|
||||
|
||||
@@ -8,7 +8,7 @@ icon: bxs:bot
|
||||
Issue Bot의 동작은 [issue-checker](https://github.com/zzyyyl/issue-checker)로 이루어지며, 설정 파일은 [issue-checker.yml](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/.github/issue-checker.yml) 입니다.
|
||||
|
||||
::: warning
|
||||
Commitizen 규격으로 커밋하지 않는 경우, 병합 요청(Merge Request)가 `ambiguous(애매모호한)`로 표시됨에 주의해주세요.
|
||||
Commitizen 규격으로 커밋하지 않는 경우, 풀 리퀘스트(Pull Request)가 `ambiguous(애매모호한)`로 표시됨에 주의해주세요.
|
||||
:::
|
||||
|
||||
## 기능
|
||||
@@ -46,7 +46,7 @@ Issue Bot은 풀 리퀘스트의 제목을 확인합니다. 아래 키워드로
|
||||
|
||||
- `Skip {LABEL_NAME}`은 특정 유형의 라벨이 추가되지 않도록 합니다.
|
||||
- `Skip labels`은 모든 라벨이 추가되지 않도록 합니다.
|
||||
- `fixed(수정함)` 라벨을 추가하려면 다음 명령어 중 하나를 사용할 수 있습니다:`<sup>`1 `</sup>`
|
||||
- `fixed(수정함)` 라벨을 추가하려면 다음 명령어 중 하나를 사용할 수 있습니다:<sup>1</sup>
|
||||
- `https://github.com/MaaAssistantArknights/MaaAssistantArknights/commit/{COMMIT_HASH} fixed`
|
||||
- `fixed by https://github.com/MaaAssistantArknights/MaaAssistantArknights/commit/{COMMIT_HASH}`
|
||||
- `{VERSION} fixed`
|
||||
|
||||
@@ -5,75 +5,99 @@ icon: teenyicons:linux-alt-solid
|
||||
|
||||
# Linux 컴파일 가이드
|
||||
|
||||
**이 튜토리얼은 독자가 일정한 Linux 환경 설정 능력과 프로그래밍 기초를 가지고 있다고 가정합니다!**, 만약 여러분이 MAA를 직접 컴파일하는 대신에 단순히 설치하길 원한다면 [Linux 설명서](../manual/device/linux.md)를 참고하세요.
|
||||
**이 가이드는 독자가 일정한 Linux 환경 설정 능력과 프로그래밍 기초를 가지고 있다고 가정합니다!** MAA를 직접 컴파일하는 대신 단순히 설치하길 원한다면 [사용자 매뉴얼 - Linux 지원](../manual/device/linux.md)를 참고하세요.
|
||||
|
||||
::: info 정보
|
||||
MAA의 빌드 방법은 여전히 논의 중입니다. 이 튜토리얼의 내용은 오래되었을 수 있으므로 [GitHub workflow file](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/.github/workflows/ci.yml#L134)의 스크립트를 참고하세요. 또한 [AUR PKGBUILD](https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=maa-assistant-arknights) 및 [nixpkgs](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-assistant-arknights/package.nix)을 참고할 수 있습니다.
|
||||
::: info 주의
|
||||
MAA의 빌드 방법은 여전히 논의 중입니다. 이 가이드의 내용은 최신 내용이 아닐 수 있으므로 [GitHub workflow file](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/.github/workflows/ci.yml#L134)의 스크립트를 참고하는 것이 좋습니다.
|
||||
또한 [AUR PKGBUILD](https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=maa-assistant-arknights) 또는 [nixpkgs](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-assistant-arknights/package.nix)를 참고할 수도 있습니다.
|
||||
:::
|
||||
|
||||
::: info
|
||||
Mac은 `tools/build_macos_universal.zsh` 스크립트를 사용하여 컴파일할 수 있습니다. [MaaAssistantArknights/MaaMacGui](https://github.com/MaaAssistantArknights/MaaMacGui) 프로젝트의 README.md를 참고하는 것을 권장합니다.
|
||||
Mac은 `tools/build_macos_universal.zsh` 스크립트를 사용하여 컴파일할 수 있습니다.
|
||||
MaaAssistantArknights/MaaMacGui 프로젝트의 [README.md](https://github.com/MaaAssistantArknights/MaaMacGui/blob/master/README.md)를 참고하는 것을 권장합니다.
|
||||
:::
|
||||
|
||||
## 컴파일 과정
|
||||
|
||||
1. 컴파일에 필요한 종속성 다운로드
|
||||
- Ubuntu/Debian
|
||||
:::: steps
|
||||
|
||||
```bash
|
||||
sudo apt install gcc-14 g++-14 cmake zlib1g-dev
|
||||
1. 컴파일에 필요한 종속성 다운로드
|
||||
::: code-tabs
|
||||
@tab:active Ubuntu/Debian
|
||||
|
||||
```bash :no-line-numbers
|
||||
sudo apt install cmake
|
||||
```
|
||||
|
||||
@tab Arch
|
||||
|
||||
```bash :no-line-numbers
|
||||
sudo pacman -S --needed cmake
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
2. 서드파티 라이브러리 빌드
|
||||
|
||||
사전 빌드된 종속성 라이브러리를 다운로드하거나 직접 빌드할 수 있습니다.
|
||||
- 사전 빌드된 서드파티 라이브러리 다운로드 (권장됨)
|
||||
사전 빌드된 라이브러리를 다운로드하거나 처음부터 컴파일할 수 있습니다.
|
||||
- 사전 빌드된 서드파티 라이브러리 다운로드 (권장)
|
||||
|
||||
> **Note**
|
||||
> 상대적으로 최신의 Linux 배포판 (Ubuntu 22.04)에서 컴파일된 동적 라이브러리가 포함되어 있습니다. 시스템의 libstdc++ 버전이 오래되었을 경우 ABI 호환성 문제가 발생할 수 있습니다.
|
||||
> [!Note]
|
||||
> ~~상대적으로 최신의 Linux 배포판 (Ubuntu 22.04)에서 컴파일된 동적 라이브러리가 포함되어 있습니다. 시스템의 libstdc++ 버전이 오래되었을 경우 ABI 호환성 문제가 발생할 수 있습니다.~~
|
||||
> 현재 크로스 컴파일을 기반으로 실행 환경 요구 사항을 낮추었으며, glibc 2.31 (ubuntu 20.04)만 있으면 됩니다.
|
||||
|
||||
```bash
|
||||
python tools/maadeps-download.py
|
||||
```
|
||||
|
||||
위의 방법으로 다운로드한 라이브러리가 시스템에서 실행되지 않거나 컨테이너와 같은 대안을 사용하지 않고 싶은 경우 직접 빌드해볼 수도 있습니다.
|
||||
- 서드파티 라이브러리 직접 빌드 (시간이 오래 걸릴 수 있음)
|
||||
만약 위 방법으로 다운로드한 라이브러리가 ABI 버전 등의 이유로 시스템에서 실행되지 않고, 컨테이너 등을 사용하고 싶지 않다면 처음부터 컴파일을 시도해 볼 수 있습니다.
|
||||
- 서드파티 라이브러리 직접 빌드 (오랜 시간이 소요됩니다)
|
||||
|
||||
```bash
|
||||
git submodule update --init --recursive
|
||||
git clone https://github.com/MaaAssistantArknights/MaaDeps
|
||||
cd MaaDeps
|
||||
# 시스템 환경이 너무 낮아 사전 빌드된 llvm 20을 사용할 수 없는 경우, 크로스 컴파일을 사용하지 않고 로컬 컴파일 환경을 직접 사용해 보세요.
|
||||
# src/MaaUtils/MaaDeps/cmake의 toolchain 구성을 조정해야 합니다.
|
||||
python linux-toolchain-download.py
|
||||
python build.py
|
||||
```
|
||||
|
||||
3. MAA 컴파일
|
||||
|
||||
```bash
|
||||
CC=gcc-14 CXX=g++-14 cmake -B build \
|
||||
cmake -B build \
|
||||
-DINSTALL_RESOURCE=ON \
|
||||
-DINSTALL_PYTHON=ON
|
||||
-DINSTALL_PYTHON=ON \
|
||||
-DCMAKE_TOOLCHAIN_FILE=src/MaaUtils/MaaDeps/cmake/maa-x64-linux-toolchain.cmake
|
||||
cmake --build build
|
||||
```
|
||||
|
||||
경로에 MAA를 설치하기 위해 위의 명령을 사용합니다. MAA는 `LD_LIBRARY_PATH`를 지정하여 실행하는 것이 좋으며, MAA를 `/usr`에 설치하지 마세요.
|
||||
MAA를 대상 위치에 설치합니다. MAA는 `LD_LIBRARY_PATH`를 지정하여 실행하는 것을 권장하며, 관리자 권한을 사용하여 MAA를 `/usr`에 설치하지 마세요.
|
||||
|
||||
> 지금은 실행 시 `LD_LIBRARY_PATH`를 지정할 필요가 없을 수도 있습니다.
|
||||
|
||||
```bash
|
||||
cmake --install build --prefix <target_directory>
|
||||
```
|
||||
|
||||
4. 완료, 디렉터리에서 빌드 파일을 확인할 수 있을 것입니다.
|
||||
|
||||
::::
|
||||
|
||||
## 통합 문서
|
||||
|
||||
[~~문서가 아닐수도 있습니다~~](../protocol/integration.md)
|
||||
[~~문서라고 부르기도 애매한~~](../protocol/integration.md)
|
||||
|
||||
### Python
|
||||
|
||||
[Python demo](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/src/Python/sample.py)에서 `__main__`의 구현을 참조하세요.
|
||||
[Python demo](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/src/Python/sample.py)에서 `__main__`의 구현을 참고하세요.
|
||||
|
||||
### C++
|
||||
|
||||
[CppSample](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/src/Cpp/main.cpp)의 구현을 참조하세요.
|
||||
[CppSample](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/src/Cpp/main.cpp)의 구현을 참고하세요.
|
||||
|
||||
### C Sharp
|
||||
|
||||
<!-- Do not use C#, MD003/heading-style: Heading style [Expected: atx; Actual: atx_closed] -->
|
||||
|
||||
[MaaWpfGui](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/src/MaaWpfGui/Main/AsstProxy.cs)의 구현을 참조하세요.
|
||||
[MaaWpfGui](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/src/MaaWpfGui/Main/AsstProxy.cs)의 구현을 참고하세요.
|
||||
|
||||
@@ -10,7 +10,7 @@ icon: ri:earth-fill
|
||||
이 튜토리얼을 시작하기 전에 다음 사항이 준비되었는지 확인해야 합니다.
|
||||
|
||||
1. 필요한 소프트웨어를 설치하고 올바르게 구성했습니다. ZH-CN 클라이언트 또는 해당 클라이언트의 `readme.md` 에 지원되는 기능이 제대로 작동하는지 확인할 수 있는 정보가 있어야 합니다.
|
||||
2. [작업 스키마](../protocol/task-schema.md) 를 읽고 각 필드의 의미와 사용법을 기본적으로 이해해야 합니다. 코드에서 `@` 와 `#` 의 의미와 용법도 이해해야 합니다.
|
||||
2. [작업 프로토콜](../protocol/task-schema.md)을 읽고 각 필드의 의미와 사용법을 기본적으로 이해해야 합니다. 코드에서 `@` 와 `#` 의 의미와 용법도 이해해야 합니다.
|
||||
3. ZH-CN 클라이언트의 `task.json` 파일과 템플릿 이미지는 해외 클라이언트에 대해 언급되지 않았거나 누락된 경우의 대안으로 사용된다는 점을 이해해야합니다. 해외 클라이언트에 대한 `task.json` 의 내용은 ZH-CN 작업 필드에 따라 다시 작성해야 합니다.
|
||||
4. 영어 실력이 있고, 영어 로그를 읽을 수 있으며, 로그를 통해 누락된 사진과 다른 정보를 찾을 수 있는 역량이 있으면 좋습니다.
|
||||
5. 작업 체인에 따라 개별적으로 수정을 수행하는 것이 좋습니다. 예를 들어, Award 작업을 수정하려면 `next` 필드의 순서에 따라 `template image`, `text`, 그리고 `roi` 를 단계적으로 수정해야 합니다. 이렇게 하면 수정 후 모든 작업이 정상적으로 작동하고 오류를 쉽게 발견할 수 있습니다. 또한 이렇게 하면 한 번에 너무 많은 콘텐츠가 수정될 때 소프트웨어가 어떤 작업에 고정되어 있는지 혼동하거나 잊어버리는 것을 방지할 수 있습니다.
|
||||
@@ -134,7 +134,7 @@ ROI 범위를 수정하는 방법:
|
||||
|
||||
```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.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 ]
|
||||
[2022-12-18 17:43:18.541][TRC][Px7ec][Tx15c8] Ocr Pipeline with asst::WordOcr | enter
|
||||
[2022-12-18 17:43:18.634][TRC][Px7ec][Tx15c8] Ocr Pipeline with asst::WordOcr | leave, 93 ms
|
||||
|
||||
@@ -9,7 +9,7 @@ icon: mingcute:git-pull-request-fill
|
||||
|
||||
::: warning
|
||||
이 가이드는 많은 개념을 단순화하여 더 많은 사람들이 실제로 사용할 수 있도록 설계되었습니다. 때로는 꽤 불안불안한 ~~하지만 간단한~~ 조치들과 약간 부정확한 설명이 있을 수 있으므로 전문가 분들의 이해를 부탁드립니다.
|
||||
만약 Git 사용 경험이 있고 프로그래밍 기초를 가지고 계시다면 ~~그럼 당신은 왜 보고 있나요🔨~~, 약간 더 발전된 가이드인 [Github Pull Request 진행과정](./development.md#github-pull-request-진행-과정)을 확인해주세요.
|
||||
만약 Git 사용 경험이 있고 프로그래밍 기초 지식을 가지고 계시다면 ~~그럼 당신은 왜 보고 있나요🔨~~, 약간 더 발전된 가이드인 [Github Pull Request 진행과정](./development.md#완전한-환경-설정-windows)을 확인해주세요.
|
||||
:::
|
||||
|
||||
## 기본 개념 및 용어 설명
|
||||
@@ -32,9 +32,9 @@ repo로도 알려져 있으며 코드 및 다른 리소스 파일을 저장하
|
||||
### Fork (복사)
|
||||
|
||||
단어 그대로 MAA의 코드를 복사하고 나서 수정 등의 작업을 수행할 수 있습니다. 원본을 망치지 않도록 조심하세요.
|
||||
그러나 중국어로 "복사"라는 용어를 사용할 때는 일반적으로 "복사"라는 용어를 생각합니다.또한 "fork"라는 명확한 번역이 없으므로 일반적으로 영어를 사용합니다. 예를 들어 "코드를 fork하여 복사합니다."
|
||||
하지만 일반적으로 '복제'라고 하면 Ctrl+C/V를 생각하기 쉬우므로, 보통 영단어 그대로 'Fork'라고 부릅니다. 예를 들어 "코드를 fork해간다"라고 합니다.
|
||||
|
||||
복사한 것은 `MAA (1)` (bushi)입니다.
|
||||
복사한 것은 `MAA (1)` (복사본)입니다.
|
||||
원래 저장소와 구별하기 위해 일반적으로 원래 MAA 저장소를 "원본 저장소", "원격 저장소", "상위 저장소"로 지칭합니다.
|
||||
각 사람이 자신의 복사본을 만들 수 있기 때문에 복사본을 "개인 저장소"로 지칭합니다.
|
||||
|
||||
@@ -52,7 +52,7 @@ PR로도 알려져 있으며, "풀 리퀘스트"라는 용어는 너무 길고
|
||||
|
||||
물론 "요청"이니까 승인이 필요합니다. MAA 팀의 분들이 당신의 변경 사항에 대해 몇 가지 의견을 제시할 수 있습니다. 물론 우리의 의견이 모두 옳은 것은 아니며, 합리적으로 논의합니다~
|
||||
|
||||
👇 아래는 현재 전문가들이 제시한 PR을 대기 중인 상태입니다.
|
||||
👇 아래는 현재 전문가들이 제시한 PR을 검토 대기 중인 상태입니다.
|
||||
|
||||
<ImageGrid :imageList="[
|
||||
{
|
||||
@@ -78,7 +78,7 @@ PR로도 알려져 있으며, "풀 리퀘스트"라는 용어는 너무 길고
|
||||
}
|
||||
]" />
|
||||
|
||||
2. "마스터 브랜치만" 옵션을 해제한 다음 Fork를 클릭합니다.
|
||||
2. 그런 다음 Create Fork를 클릭합니다.
|
||||
|
||||
<ImageGrid :imageList="[
|
||||
{
|
||||
@@ -115,7 +115,7 @@ PR로도 알려져 있으며, "풀 리퀘스트"라는 용어는 너무 길고
|
||||
]" />
|
||||
|
||||
6. 수정하세요! (리소스 파일과 같은 경우 먼저 컴퓨터에있는 MAA 폴더에서 수정 사항을 테스트 한 다음 웹 페이지로 복사하여 잘못된 수정을 방지하세요)
|
||||
7. 수정이 완료되면 맨 아래로 스크롤하여 수정 내용을 적습니다.
|
||||
7. 수정이 완료되면 오른쪽 상단의 👇 이 버튼을 클릭하여 커밋 페이지를 열고, 무엇을 수정했는지 작성합니다.
|
||||
|
||||
<ImageGrid :imageList="[
|
||||
{
|
||||
@@ -124,7 +124,7 @@ PR로도 알려져 있으며, "풀 리퀘스트"라는 용어는 너무 길고
|
||||
}
|
||||
]" />
|
||||
|
||||
우리는 간단한 커밋 제목 [관례적 커밋](https://www.conventionalcommits.org/zh-hans/v1.0.0/)이 있으니 가능하면 지켜주세요. 물론 정말 이해가 안 된다면 일단 아무렇게나 써도 됩니다.
|
||||
우리는 간단한 커밋 제목 [관례적 커밋](https://www.conventionalcommits.org/ko/v1.0.0/)이 있으니 가능하면 지켜주세요. 물론 정말 이해가 안 된다면 일단 아무렇게나 써도 됩니다.
|
||||
|
||||
<ImageGrid :imageList="[
|
||||
{
|
||||
@@ -133,9 +133,10 @@ PR로도 알려져 있으며, "풀 리퀘스트"라는 용어는 너무 길고
|
||||
}
|
||||
]" />
|
||||
|
||||
8. 두 번째 파일을 수정해야합니까? 수정 후 오류가 발생하여 수정을 다시하고 싶습니까? 전혀 문제가되지 않습니다! 5-8을 반복하세요!
|
||||
9. 모두 완료되면 PR을 제출하세요! Pull Request 탭을 클릭합니다.
|
||||
Compare & Pull Request 버튼이 있으면 좋지만 없어도 걱정하지 마세요. 아래의 New Pull Request를 클릭하면 됩니다. (11단계 참조)
|
||||
8. 두 번째 파일을 수정해야하나요? 수정 후 오류가 발생하여 다시 수정하고 싶으신가요? 전혀 문제 없습니다! 4-7 단계를 반복하세요!
|
||||
9. 모두 완료되면 PR을 제출하세요! Code를 클릭하여 **개인 저장소** 메인 페이지로 돌아갑니다.
|
||||
Compare & Pull Request 버튼이 있으면 바로 클릭하세요!
|
||||
없어도 걱정하지 마세요. 아래의 Contribute 버튼을 클릭한 다음 Open Pull Request를 클릭하면 됩니다.
|
||||
|
||||
<ImageGrid :imageList="[
|
||||
{
|
||||
@@ -155,7 +156,7 @@ PR로도 알려져 있으며, "풀 리퀘스트"라는 용어는 너무 길고
|
||||
]" />
|
||||
|
||||
그런 다음 제목, 수정한 내용 등을 작성하고 확인을 클릭합니다.
|
||||
PR 제목도 [관례적 커밋](https://www.conventionalcommits.org/zh-hans/v1.0.0/)을 지켜주세요. 물론 여전히 이해가 안 된다면 일단 아무렇게나 써도 됩니다.
|
||||
PR 제목도 [관례적 커밋](https://www.conventionalcommits.org/ko/v1.0.0/)을 지켜주세요. 물론 여전히 이해가 안 된다면 일단 아무렇게나 써도 됩니다.
|
||||
|
||||
<ImageGrid :imageList="[
|
||||
{
|
||||
@@ -164,7 +165,7 @@ PR로도 알려져 있으며, "풀 리퀘스트"라는 용어는 너무 길고
|
||||
}
|
||||
]" />
|
||||
|
||||
11. MAA 팀의 전문가들의 검토를 기다립니다! 물론 그들도 의견을 제시 할 수 있습니다.
|
||||
11. MAA 팀원들의 검토를 기다립니다! 물론 그들도 의견을 제시 할 수 있습니다.
|
||||
👇 예를 들어(오로지 오락을 위한 것이니 진지하게 받아들이지 마세요)
|
||||
|
||||
<ImageGrid :imageList="[
|
||||
@@ -174,9 +175,9 @@ PR로도 알려져 있으며, "풀 리퀘스트"라는 용어는 너무 길고
|
||||
}
|
||||
]" />
|
||||
|
||||
12. 만약 전문가들이 몇 가지 작은 문제를 수정하라고 말한다면 개인 저장소로 돌아가 이전의 dev 브랜치로 이동하여 3-9 단계를 반복하세요!
|
||||
당신의 현재 PR은 여전히 검토 대기 중이므로 나중에 수정 사항이 이 PR에 직접 반영됩니다.
|
||||
👇 예를 들어 아래에서 "재수정 데모"라는 새로운 내용이 추가된 것을 볼 수 있습니다.
|
||||
12. 만약 팀원들이 몇 가지 작은 문제를 수정하라고 한다면, **개인 저장소**로 돌아가서 4-7 단계를 반복하세요!
|
||||
1-2 단계(다시 fork)와 9-10 단계(다시 Pull Request)는 필요 없습니다. 현재 Pull Request는 여전히 검토 대기 중이며, 이후 수정 사항은 이 Pull Request에 직접 반영됩니다.
|
||||
👇 예를 들어 맨 아래에 재수정한 내용이 추가된 것을 볼 수 있습니다.
|
||||
|
||||
<ImageGrid :imageList="[
|
||||
{
|
||||
@@ -185,16 +186,13 @@ PR로도 알려져 있으며, "풀 리퀘스트"라는 용어는 너무 길고
|
||||
}
|
||||
]" />
|
||||
|
||||
13. 전문가들의 승인을 기다리면 모두 완료됩니다! 수정한 내용이 이미 MAA 메인 저장소에 들어갔습니다!
|
||||
13. MAA 팀원들의 승인을 기다리면 모두 완료됩니다! 수정한 내용이 이미 MAA 메인 저장소에 들어갔습니다!
|
||||
|
||||
14. 다음에 다른 PR을 제출하려면 먼저 dev 브랜치로 전환한 다음 아래 그림과 같이 진행하세요.
|
||||
14. 다음에 다른 PR을 제출하려면 먼저 개인 저장소 메인 페이지로 돌아가, `Sync fork`를 클릭하여 당신의 저장소를 주 저장소와 동기화하세요.
|
||||
|
||||
::: warning
|
||||
이 조작은 개인 저장소를 주 저장소와 완전히 동일한 상태로 강제로 동기화합니다. 이것은 충돌을 해결하는 가장 간단하고 효과적인 방법입니다. 그러나 개인 저장소에 이미 추가한 것이 있으면 그것이 삭제됩니다!
|
||||
:::
|
||||
충돌을 일으키지 않을 경우 오른쪽에 초록색 `Update Branch` 버튼을 사용하세요.
|
||||
여기서 주의할 점은, 빨간색 `Discard 1 commit`이 있다면 빨간색을 클릭하고, 없다면 녹색 `Update branch`를 클릭하세요.
|
||||
|
||||
충돌 상황에 대해 잘 모르거나 알 필요가 없다면 왼쪽의 버튼을 클릭하세요.
|
||||
그 다음 4-10 단계를 반복하여 다시 수정할 수 있습니다.
|
||||
|
||||
<ImageGrid :imageList="[
|
||||
{
|
||||
@@ -207,13 +205,11 @@ PR로도 알려져 있으며, "풀 리퀘스트"라는 용어는 너무 길고
|
||||
}
|
||||
]" />
|
||||
|
||||
그러면 3-14 단계를 반복하여 수정하고 PR을 제출하면 됩니다~
|
||||
|
||||
**버전이 출시**되면 당신의 GitHub 프로필 사진이 자동으로 기여자 목록에 추가됩니다. 모든 분들의 자비로운 공헌에 감사드립니다!
|
||||
~~왜 모든 사람들이 이중 인격이야, 아 나도 그렇지, 그럼 괜찮아~~
|
||||
**신규 버전이 출시**되면 당신의 GitHub 프로필 사진이 자동으로 기여자 목록에 추가됩니다. 모든 분들의 자비로운 공헌에 감사드립니다!
|
||||
~~왜 다들 오타쿠야, 아 나도 그렇지, 그럼 괜찮아~~
|
||||
|
||||
::: tip 기여자
|
||||
개발/테스트에 참여한 모든 친구들에게 감사드립니다. 여러분의 도움으로 MAA가 점점 더 좋아지고 있습니다! (\*´▽ `)ノノ
|
||||
개발/테스트에 참여한 모든 분들에게 감사드립니다. 여러분의 도움으로 MAA가 점점 더 좋아지고 있습니다! (\*´▽ `)ノノ
|
||||
|
||||
[](https://github.com/MaaAssistantArknights/MaaAssistantArknights/graphs/contributors)
|
||||
:::
|
||||
|
||||
@@ -3,127 +3,129 @@ order: 8
|
||||
icon: iconoir:code-brackets
|
||||
---
|
||||
|
||||
# Dedicated VSCode Extension Tutorial
|
||||
# 전용 VSCode 확장 프로그램 가이드
|
||||
|
||||
The extension provides a series of convenient development capabilities for MaaAssistantArknights/MaaFramework, including but not limited to the following features:
|
||||
이 확장 프로그램은 MaaAssistantArknights/MaaFramework에 대해 다음과 같은 기능들을 포함한 편리한 개발 기능들을 제공합니다:
|
||||
|
||||
- tasks.json support, including `template preview`, `next jump`, `task reference`, etc.
|
||||
- Screenshot / Crop image
|
||||
- `template 미리보기`, `next 점프`, `작업 참조(Task Reference)` 등을 포함한 tasks.json 지원
|
||||
- 이미지 캡처/자르기
|
||||
|
||||
For details, please visit [Extension Store](https://marketplace.visualstudio.com/items?itemName=nekosu.maa-support) or [Repository](https://github.com/neko-para/maa-support-extension).
|
||||
자세한 내용은 [마켓플레이스](https://marketplace.visualstudio.com/items?itemName=nekosu.maa-support) 또는 [저장소](https://github.com/neko-para/maa-support-extension)를 방문하여 확인할 수 있습니다.
|
||||
|
||||
## Installation
|
||||
## 설치
|
||||
|
||||
Searching `Maa` and installing it from VSCode extensions list is recommended.
|
||||
VSCode 확장 프로그램 목록에서 `Maa`를 검색하여 직접 설치하는 것을 권장합니다.
|
||||
|
||||
::: tip
|
||||
When used for the first time, the extension will automatically download the preset version of resources.
|
||||
Search command `Maa: select fetch registry` to switch the download source (npm / cnpm).
|
||||
처음 사용할 때 확장 프로그램은 사전 설정된 버전의 리소스를 자동으로 다운로드합니다.
|
||||
명령 팔레트에서 `Maa: 선택된 다운로드 소스(Maa: select fetch registry)`를 검색하여 다운로드 소스(npm / cnpm)를 전환할 수 있습니다.
|
||||
:::
|
||||
|
||||
## Features
|
||||
## 기능
|
||||
|
||||
### Control Panel
|
||||
### 제어판
|
||||
|
||||
A dedicated control panel is added to the left, with icon 
|
||||
전용 제어판이 왼쪽에 추가되었으며, 아이콘은  입니다.
|
||||
|
||||
The major features of the extension are based on the `interface.json` configuration. Select the activated `interface.json` on the top of the control panel.
|
||||
확장 프로그램의 대부분의 기능은 `interface.json` 구성을 기반으로 합니다. 제어판 상단에서 활성화할 `interface.json`을 선택할 수 있습니다.
|
||||
|
||||
The extension has a `Maa` compatiable mode. If `src/MaaCore` folder exists inside the opened workspace, the mode will be enabled automatically.
|
||||
확장 프로그램에는 `Maa` 호환 모드가 있습니다. 열린 폴더 내에 `src/MaaCore` 폴더가 감지되면 자동으로 활성화됩니다.
|
||||
|
||||
### Semantic resource analysis
|
||||
### 의미론적 리소스 분석
|
||||
|
||||
Select expected resource via the `Resource` select inside the control panel. The extension will index and diagnose resource via corresponding paths.
|
||||
제어판의 `리소스(Resource)` 드롭다운을 전환하여 예상되는 리소스를 선택하세요. 확장 프로그램은 해당 경로를 기반으로 인덱싱 및 진단을 수행합니다.
|
||||
|
||||
If you find that the editing json isn't hinted by the extension, please check if the activated resource contains it.
|
||||
편집하려는 json 파일에 플러그인 힌트가 표시되지 않는 경우, 활성화된 리소스에 해당 파일이 포함되어 있는지 확인하세요.
|
||||
|
||||
> The term `definitions of task / task defs` refers to key props of task objects.
|
||||
> `작업 정의(task defs)`란 작업 객체의 키 속성을 의미합니다.
|
||||
>
|
||||
> The term `references of task / task refs` refers to values containing task name (e.g. in `next`) in other task objects.
|
||||
> `작업 참조(task refs)`란 다른 작업 객체에서 작업 이름을 값으로 가질 수 있는 속성(예: `next`)을 의미합니다.
|
||||
|
||||
#### Query task defs / task refs
|
||||
#### 작업 정의/참조 조회
|
||||
|
||||
The extension supports Jump to task defs, Jump to task refs and View task defs.
|
||||
확장 프로그램은 정의로 이동(Jump to definition), 참조로 이동(Jump to references), 작업 정의 보기(View task definition)를 지원합니다.
|
||||
|
||||
When enabling the `Maa` compatible mode, the extension will be able to parse `template task`, supporting querying task defs and task refs in conjunction with base tasks. Images that have the same name as the task will be shown when hovering the task defs.
|
||||
`Maa` 호환 모드를 켜면 `템플릿 작업`을 파싱할 수 있어, 기본 클래스와 연동하여 작업 정의 및 참조를 조회할 수 있습니다. 작업 정의에 마우스를 올리면 동일한 이름의 이미지를 볼 수 있습니다.
|
||||
|
||||
Use `Ctrl+T` to quickly query and jump to a task definition.
|
||||
`Ctrl+T` 단축키를 사용하여 작업 정의를 빠르게 조회하고 이동할 수 있습니다.
|
||||
|
||||
#### Query / open images
|
||||
#### 이미지 조회/열기
|
||||
|
||||
The extension supports open images.
|
||||
이 확장 프로그램은 이미지 열기를 지원합니다.
|
||||
|
||||
When enabling the `Maa` compatible mode, the extension will be able to recursively search for the image.
|
||||
`Maa` 호환 모드를 켜면 이미지 경로에 대한 재귀적 검색을 허용합니다.
|
||||
|
||||
#### Task completion
|
||||
#### 작업 자동 완성
|
||||
|
||||
The extension supports autocompletion according to all known tasks.
|
||||
확장 프로그램은 알려진 모든 작업을 기반으로 자동 완성을 지원합니다.
|
||||
|
||||
When enabling the `Maa` compatible mode, typing `@` will trigger completion.
|
||||
`Maa` 호환 모드를 켜면 `@`를 입력하여 완성을 트리거할 수 있습니다.
|
||||
|
||||
#### Image path completion
|
||||
#### 이미지 경로 자동 완성
|
||||
|
||||
The extension supports autocompletion according to the path of all known images.
|
||||
확장 프로그램은 알려진 모든 이미지 경로를 기반으로 자동 완성을 지원합니다.
|
||||
|
||||
When enabling the `Maa` compatible mode, the extension will be able to recursively search for the image.
|
||||
`Maa` 호환 모드를 켜면 이미지 경로에 대한 재귀적 검색을 허용합니다.
|
||||
|
||||
#### Check tasks / image paths
|
||||
#### 작업/이미지 경로 유효성 검사
|
||||
|
||||
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.
|
||||
- 중복된 작업 정의가 있는지 확인
|
||||
- 알 수 없는 작업 참조가 있는지 확인
|
||||
- 알 수 없는 이미지 참조가 있는지 확인
|
||||
- 단일 작업 내에 중복된 작업 참조가 있는지 확인
|
||||
|
||||
#### Multiple paths resource support
|
||||
#### 다중 경로 리소스 지원
|
||||
|
||||
The extension supports resource with multiple paths. The extension will perform logical overlapping according to specified order, thus content loaded later can reference content loaded earlier.
|
||||
확장 프로그램은 리소스가 여러 경로를 포함하는 것을 지원하며, 지정된 순서대로 논리적 덮어쓰기를 수행합니다. 즉, 나중에 로드된 콘텐츠가 이전에 로드된 콘텐츠를 참조할 수 있습니다.
|
||||
|
||||
### Evaluate Task / Tsak List Expression (Only Maa)
|
||||
### 작업 계산 / 작업 목록 표현식 (Maa 전용)
|
||||
|
||||
Evaluating the expanded task object and the sources of each properties, and the result of the task list expression via the control panel.
|
||||
제어판을 통해 실제 확장된 작업 내용과 각 항목의 출처를 계산할 수 있으며, 작업 목록 표현식의 확장 결과도 계산할 수 있습니다.
|
||||
|
||||
### MaaPiCli feature (Only MaaFramework projects)
|
||||
### MaaPiCli 기능 (MaaFramework 프로젝트 전용)
|
||||
|
||||
Scanning and selecting controllers, selecting resource, adding and manipulating tasks, and launching tasks can be done via the control panel.
|
||||
제어판을 통해 컨트롤러를 스캔 및 선택하고, 리소스를 선택하고, 작업을 추가 및 관리하고, 작업을 실행할 수 있습니다.
|
||||
|
||||
### Take screenshots and crop images
|
||||
### 스크린샷 캡처 및 자르기
|
||||
|
||||
Searching and launching `Maa: open crop tool` inside VSCode command panel can open `Screenshots / Crop` panel.
|
||||
VSCode 명령 팔레트에서 `Maa: 스크린샷 도구 열기(Maa: open crop tool)`를 검색하고 실행하여 `스크린샷 / 자르기(Screenshots / Crop)` 패널을 열 수 있습니다.
|
||||
|
||||
> Use `Ctrl+Shift+P` (`Command+Shift+P` on MacOS) to open command panel
|
||||
> `Ctrl+Shift+P` (MacOS의 경우 `Command+Shift+P`)를 사용하여 명령 팔레트를 엽니다.
|
||||
|
||||
- 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
|
||||
- Use `Copy` button to copy the ROI as an array to the clipboard.
|
||||
- Click `Tool` button to open the recognition tool panel, where you can directly test recognition on the current image.
|
||||
- 컨트롤러를 선택하고 연결한 후 `스크린샷(Screencap)` 버튼을 사용하여 직접 스크린샷을 얻을 수 있습니다.
|
||||
- `업로드(Upload)` 버튼을 사용하여 수동으로 이미지를 업로드할 수 있습니다.
|
||||
- `Ctrl` 키를 누른 상태에서 자를 영역을 선택합니다.
|
||||
- 휠을 사용하여 확대/축소할 수 있습니다.
|
||||
- 자르기가 완료되면 `다운로드(Download)` 버튼을 사용하여 활성 리소스의 최상위 이미지 디렉터리에 자르기 결과를 자동으로 저장할 수 있습니다.
|
||||
- `복사(Copy)` 버튼을 사용하여 ROI를 배열 형태로 클립보드에 복사할 수 있습니다.
|
||||
- `도구(Tool)` 버튼을 누르면 인식 도구 패널이 열리며, 현재 이미지에 대해 직접 인식 테스트를 수행할 수 있습니다.
|
||||
|
||||
::: warning
|
||||
|
||||
If OCR recognition returns an empty result, please check whether the [OCR model](https://github.com/MaaXYZ/MaaFramework/blob/main/docs/en_us/1.1-QuickStarted.md#text-recognition-model-files) is configured correctly.
|
||||
(MaaFramework 프로젝트 전용)
|
||||
|
||||
OCR 인식 결과가 비어 있다면 [OCR 모델](https://github.com/MaaXYZ/MaaFramework/blob/main/docs/en_us/1.1-QuickStarted.md#text-recognition-model-files)이 올바르게 구성되었는지 확인하세요.
|
||||
|
||||
:::
|
||||
|
||||
### Log View
|
||||
### 로그 보기 기능
|
||||
|
||||
#### MaaFramework Log
|
||||
#### MaaFramework 로그
|
||||
|
||||
Search and execute `Maa: open maa log` in the VSCode command panel to view the `maa.log` generated during debugging.
|
||||
VSCode 명령 팔레트에서 `Maa: maa 로그 열기(Maa: open maa log)`를 검색하고 실행하여 디버깅 중에 생성된 `maa.log` 로그를 볼 수 있습니다.
|
||||
|
||||
#### Maa Pipeline Support Extension Log
|
||||
#### Maa Pipeline Support 확장 로그
|
||||
|
||||
Search and execute `Maa: open extension log` in the VSCode command panel to view the `mse.log` generated during debugging.
|
||||
VSCode 명령 팔레트에서 `Maa: 확장 로그 열기(Maa: open extension log)`를 검색하고 실행하여 디버깅 중에 생성된 `mse.log` 로그를 볼 수 있습니다.
|
||||
|
||||
### Bottom status bar
|
||||
### 하단 상태 표시줄
|
||||
|
||||
#### MaaSupport \[Extension Version\]
|
||||
#### MaaSupport [확장 버전]
|
||||
|
||||
Click to reveal control panel
|
||||
클릭하여 제어판으로 포커스를 이동합니다.
|
||||
|
||||
#### MaaFramework [MaaFw Version]
|
||||
#### MaaFramework [MaaFw 버전]
|
||||
|
||||
Click to switch `MaaFramework` version used by the extension. The selectable versions are limited to those supported by the current extension. If the version you need is not in the list, please consider changing the extension version.
|
||||
클릭하여 확장 프로그램에서 사용하는 `MaaFramework` 버전을 전환합니다. 선택할 수 있는 버전은 현재 확장 프로그램이 지원하는 버전으로 제한되며, 필요한 버전이 목록에 없으면 확장 프로그램 버전을 변경하는 것을 고려하세요.
|
||||
|
||||
@@ -11,7 +11,7 @@ maa-cli 설정 파일은 특정 설정 경로에 위치하며, `maa dir config`
|
||||
|
||||
모든 설정 파일은 TOML, YAML 또는 JSON 형식을 사용할 수 있으며, 아래 예시에서는 TOML 형식을 사용하고 파일 확장자는 `.toml`을 사용하겠습니다. 하지만 파일 확장자가 올바르면 이 세 가지 형식을 혼합해서 사용할 수 있습니다.
|
||||
|
||||
또한 일부 작업은 `filename`을 매개변수로 받아들이며, 상대 경로를 사용할 경우 설정 경로의 해당 하위 경로를 기준으로 합니다. 예를 들어, 사용자 정의 기반 시설 계획 파일의 상대 경로는 `$MAA_CONFIG_DIR/infrast`를 기준으로 해야 하고, 보안 파견 작업 파일은 `$MAA_CONFIG_DIR/ssscopilot`를 기준으로 해야 합니다.
|
||||
또한 일부 작업은 `filename`을 매개변수로 받아들이며, 상대 경로를 사용할 경우 설정 경로의 해당 하위 경로를 기준으로 합니다. 예를 들어, 사용자 정의 기반시설 계획 파일의 상대 경로는 `$MAA_CONFIG_DIR/infrast`를 기준으로 해야 하고, 보안 파견 작업 파일은 `$MAA_CONFIG_DIR/ssscopilot`를 기준으로 해야 합니다.
|
||||
|
||||
## 사용자 정의 작업
|
||||
|
||||
@@ -36,14 +36,14 @@ params = { client_type = "Official", start_game_enabled = true } # 해당 작업
|
||||
|
||||
```toml
|
||||
[[tasks]]
|
||||
name = "기반 시설 교대"
|
||||
name = "기반시설 교대"
|
||||
type = "Infrast"
|
||||
|
||||
[tasks.params]
|
||||
mode = 10000
|
||||
facility = ["Trade", "Reception", "Mfg", "Control", "Power", "Office", "Dorm"]
|
||||
dorm_trust_enabled = true
|
||||
filename = "normal.json" # 사용자 정의 기반 시설 계획 파일 이름은 `$MAA_CONFIG_DIR/infrast`에 있어야 합니다.
|
||||
filename = "normal.json" # 사용자 정의 기반시설 계획 파일 이름은 `$MAA_CONFIG_DIR/infrast`에 있어야 합니다.
|
||||
|
||||
# 18:00:00부터 다음 날 04:00:00까지 계획 0, 12:00:00 이전에는 계획 1, 그 이후에는 계획 2 사용
|
||||
[[tasks.variants]]
|
||||
@@ -61,7 +61,7 @@ params = { plan_index = 2 }
|
||||
|
||||
`condition` 필드는 어떤 변형이 사용될지를 결정하는 데 사용되며, 일치하는 변형의 `params` 필드는 작업의 매개변수에 합쳐집니다.
|
||||
|
||||
**주의**: 사용자 정의 기반 시설 계획 파일이 상대 경로를 사용하는 경우, `$MAA_CONFIG_DIR/infrast`를 기준으로 해야 합니다. 또한, 기반 시설 파일은 maa-cli가 아닌 MaaCore가 읽기 때문에 해당 파일 형식은 반드시 JSON이어야 합니다. maa-cli는 기반 시설 파일을 읽지 않으며, 파일에 정의된 시간대에 따라 적절한 서브 계획을 선택하지 않습니다. 따라서 `condition` 필드를 통해 적절한 시간대에 올바른 기반 시설 계획의 `plan_index` 매개변수를 지정해야 합니다. 이렇게 하면 적절한 시간대에 올바른 기반 시설 계획이 사용될 수 있습니다.
|
||||
**주의**: 사용자 정의 기반시설 계획 파일이 상대 경로를 사용하는 경우, `$MAA_CONFIG_DIR/infrast`를 기준으로 해야 합니다. 또한, 기반시설 파일은 maa-cli가 아닌 MaaCore가 읽기 때문에 해당 파일 형식은 반드시 JSON이어야 합니다. maa-cli는 기반시설 파일을 읽지 않으며, 파일에 정의된 시간대에 따라 적절한 서브 계획을 선택하지 않습니다. 따라서 `condition` 필드를 통해 적절한 시간대에 올바른 기반시설 계획의 `plan_index` 매개변수를 지정해야 합니다. 이렇게 하면 적절한 시간대에 올바른 기반시설 계획이 사용될 수 있습니다.
|
||||
|
||||
`Time` 조건 외에도 `DateTime`, `Weekday`, `DayMod` 조건이 있습니다. `DateTime` 조건은 특정 시간대를 지정하는 데 사용되고, `Weekday` 조건은 일주일 중 특정 요일을 지정하는 데 사용됩니다. `DayMod`는 사용자 정의 주기의 특정 일을 지정하는 데 사용됩니다.
|
||||
|
||||
@@ -89,11 +89,11 @@ params = { stage = "1-7" }
|
||||
위의 특정 조건 외에도, `OnSideStory`라는 조건이 있으며, 이 조건을 활성화하면 maa-cli는 해당 리소스를 읽어 현재 이벤트가 진행 중인지 판단합니다. 만약 진행 중인 이벤트가 있으면 해당 변형이 일치하게 됩니다. 예를 들어, 여름 이벤트 기간 동안 SL-8 파밍을 위한 조건은 `{ type = "OnSideStory", client = "Official" }`로 간단히 할 수 있습니다. 여기서 `client` 매개변수는 사용 중인 클라이언트를 나타내며, 각 클라이언트의 이벤트 시간은 다릅니다. 공식 서버나 b 서버를 사용하는 경우 이 매개변수를 생략할 수 있습니다. 이 조건을 통해 매번 이벤트가 업데이트될 때마다 이벤트의 열림 시간을 수동으로 수정할 필요 없이 해당 이벤트의 스테이지만 업데이트하면 됩니다.
|
||||
|
||||
위의 기본 조건 외에도 `{ type = "And", conditions = [...] }`, `{ type = "Or", conditions = [...] }`, `{ type = "Not", condition = ... }`를 사용하여 조건을 논리적으로 결합할 수 있습니다.
|
||||
여러 날에 걸친 기반 시설 교대를 원하는 사용자는 `DayMod`와 `Time`을 조합하여 여러 날에 걸친 교대를 설정할 수 있습니다. 예를 들어, 매 이틀마다 6번 교대를 원한다면 다음과 같이 작성할 수 있습니다:
|
||||
여러 날에 걸친 기반시설 교대를 원하는 사용자는 `DayMod`와 `Time`을 조합하여 여러 날에 걸친 교대를 설정할 수 있습니다. 예를 들어, 매 이틀마다 6번 교대를 원한다면 다음과 같이 작성할 수 있습니다:
|
||||
|
||||
```toml
|
||||
[[tasks]]
|
||||
name = "기반 시설 교대 (2일 6교대)"
|
||||
name = "기반시설 교대 (2일 6교대)"
|
||||
type = "Infrast"
|
||||
|
||||
[tasks.params]
|
||||
@@ -265,10 +265,13 @@ params = { stage = "CE-6" }
|
||||
[tasks.variants.params.stage]
|
||||
default = "1-7" # 기본 스테이지, 선택 사항 (기본값이 없으면 빈 값 입력 시 다시 입력하라는 메시지가 표시됨)
|
||||
description = "싸울 스테이지" # 설명, 선택 사항
|
||||
|
||||
# 입력한 스테이지가 1-7일 때 이성 회복제 수량 입력 필요
|
||||
[tasks.variants.params.medicine]
|
||||
# 의존 매개변수, 키는 매개변수 이름, 값은 의존 매개변수의 예상 값
|
||||
# 설정 시 모든 의존 매개변수가 예상 값을 만족할 때만 이 매개변수를 입력해야 함
|
||||
deps = { stage = "1-7" }
|
||||
# 매개변수는 조건부 매개변수로 설정할 수 있으며, 조건이 충족될 때만 입력이 필요합니다.
|
||||
# conditions 필드는 테이블로, 키는 동일 레벨의 다른 매개변수 이름이고 값은 예상 값입니다.
|
||||
# 여기서 조건은 stage가 1-7인 경우입니다. 여러 조건이 있는 경우 모든 조건이 충족되어야 합니다.
|
||||
conditions = { stage = "1-7" }
|
||||
default = 1000
|
||||
description = "사용할 이성 회복제"
|
||||
```
|
||||
@@ -330,7 +333,13 @@ address = "127.0.0.1:7777" # 필요 시 사전 설정된 주소를 재정의할
|
||||
|
||||
현재 `MuMuPro` 한 가지 에뮬레이터만 사전 설정이 있으며, 다른 일반적인 에뮬레이터의 사전 설정을 추가하고 싶다면 issue나 PR을 제출하세요.
|
||||
|
||||
여기에는 `PlayCover`라는 특수한 사전 설정이 있으며, 이는 macOS에서 `PlayCover`를 통해 네이티브로 실행되는 게임 클라이언트에 연결하는 데 사용됩니다. 이 경우 `adb_path`를 지정할 필요가 없으며, `address`는 `adb` 연결 주소가 아닌 `PlayTools`의 주소입니다. 자세한 내용은 [PlayCover 지원 문서][playcover-doc]를 참고하세요.
|
||||
#### 특수 프리셋
|
||||
|
||||
현재 `PlayCover (MacOS)`, `Waydroid (Linux)` 두 가지 특수 프리셋이 사전 구성되어 있습니다.
|
||||
|
||||
- `PlayCover`는 macOS에서 `PlayCover`를 통해 네이티브로 실행되는 게임 클라이언트에 연결하는 데 사용됩니다. 이 경우 `adb_path`를 지정할 필요가 없으며, `address`는 `adb` 연결 주소가 아닌 `PlayTools`의 주소입니다. 자세한 내용은 [PlayCover 지원 문서][playcover-doc]를 참고하세요.
|
||||
|
||||
- `Waydroid`는 Linux에서 `Waydroid`를 통해 네이티브로 실행되는 게임 클라이언트에 연결하는 데 사용됩니다. 이 경우에도 `adb_path`를 지정해야 합니다. 자세한 내용은 [Waydroid 지원 문서][waydroid-doc]를 참고하세요.
|
||||
|
||||
### 리소스 설정
|
||||
|
||||
@@ -404,25 +413,34 @@ auto_update = true # 각 작업 실행 시 리소스를 자동 업데이트할
|
||||
warn_on_update_failure = true # 업데이트 실패 시 오류를 바로 보고하지 않고 경고를 발행할지 여부
|
||||
backend = "libgit2" # 리소스 핫 업데이트 백엔드, 가능한 값은 "git" 또는 "libgit2", 기본값은 "git"
|
||||
|
||||
# 리소스 핫 업데이트 원격 저장소 관련 설정
|
||||
[resource.remote]
|
||||
branch = "main" # 원격 저장소의 브랜치, 기본값은 "main"입니다.
|
||||
# 원격 리소스 저장소의 URL, 기본 URL을 사용하려면 비워 두세요.
|
||||
url = "git@github.com:MaaAssistantArknights/MaaResource.git"
|
||||
# ssh를 사용하려면 인증 방식을 구성해야 하며, "ssh-agent" 또는 "ssh-key" 중 하나를 사용할 수 있습니다.
|
||||
# ssh-agent를 사용하려면 `use_ssh_agent`를 true로 설정하고, `ssh_key`와 `passphrase`는 비워 두세요.
|
||||
# use_ssh_agent = true # ssh-agent를 사용하여 인증
|
||||
# ssh-key를 사용하려면 `ssh_key`에 ssh 키의 경로를 설정하세요.
|
||||
branch = "main" # 원격 저장소의 브랜치, 기본값은 "main"
|
||||
# 원격 리소스 저장소의 URL, 비워두면 기본 URL 사용
|
||||
# GitHub 저장소는 HTTPS와 SSH 두 가지 프로토콜을 지원하며, HTTPS 프로토콜 사용을 권장합니다. 별도의 설정이 필요 없기 때문입니다.
|
||||
url = "https://github.com/MaaAssistantArknights/MaaResource.git"
|
||||
# url = "git@github.com:MaaAssistantArknights/MaaResource.git"
|
||||
# SSH 프로토콜을 사용해야 하는 경우, SSH 키를 제공해야 합니다. 가장 간단한 방법은 키의 경로를 제공하는 것입니다.
|
||||
ssh_key = "~/.ssh/id_ed25519" # ssh 키의 경로
|
||||
# ssh 키가 암호화된 경우, 암호를 입력해야 합니다.
|
||||
# maa는 기본적으로 암호화되지 않은 키를 사용합니다. 키가 암호로 보호된 경우, 키를 복호화할 암호를 제공해야 합니다.
|
||||
# 주의: libgit2 백엔드를 사용할 때만 maa가 암호를 libgit2에 전달합니다.
|
||||
# git 백엔드를 사용할 때는 git이 직접 암호를 요청합니다.
|
||||
# git 백엔드를 사용하고 키가 암호로 보호된 경우, ssh-agent를 사용하여 키를 관리하세요.
|
||||
passphrase = "password" # ssh 키의 암호
|
||||
# 설정 파일에 평문 암호를 저장하는 것은 안전하지 않으므로 이를 방지하기 위한 방법이 있습니다.
|
||||
# 그러나 설정 파일에 평문 암호를 저장하는 것은 안전하지 않으므로, 이를 피하는 몇 가지 방법이 있습니다.
|
||||
# 1. `passphrase`를 true로 설정하면, maa-cli가 매번 암호를 입력하라고 요청합니다.
|
||||
# 이 방법은 안전하지만 번거롭고 batch 모드에서는 사용할 수 없습니다.
|
||||
# passphrase = true
|
||||
# 2. `passphrase`를 환경 변수 이름으로 설정하면, maa-cli는 해당 환경 변수를 암호로 사용합니다.
|
||||
# 이 방법은 평문 암호보다 안전하지만, 환경 변수는 모든 프로그램에서 접근할 수 있으므로 여전히 위험이 있습니다.
|
||||
# passphrase = { env = "MAA_SSH_PASSPHRASE" }
|
||||
# 3. `passphrase`를 명령어로 설정하면, maa-cli는 해당 명령어를 실행하여 암호를 가져옵니다.
|
||||
# 이는 암호 관리자를 사용하여 암호를 관리할 때 매우 유용합니다.
|
||||
# 암호 관리자를 사용하여 암호를 관리한다면, 이 방법이 가장 안전하고 편리할 수 있습니다.
|
||||
# passphrase = { cmd = ["pass", "show", "ssh/id_ed25519"] }
|
||||
# 4. ssh-agent를 사용하여 키를 관리, **권장**
|
||||
# ssh-agent는 키를 메모리에 저장하므로 매번 암호를 입력할 필요가 없습니다.
|
||||
# 주의: ssh-agent가 시작되어 있고 키가 추가되어 있어야 하며, SSH_AUTH_SOCK 환경 변수가 설정되어 있어야 합니다.
|
||||
# use_ssh_agent = true # ssh-agent를 사용하여 인증, true로 설정하면 ssh_key와 passphrase 필드가 무시됩니다.
|
||||
```
|
||||
|
||||
**주의사항**:
|
||||
@@ -450,6 +468,7 @@ passphrase = "password" # ssh 키의 암호
|
||||
[task-types]: ../../protocol/integration.md#작업-유형-목록
|
||||
[emulator-ports]: ../../manual/connection.md#포트-번호-입력
|
||||
[playcover-doc]: ../../manual/device/macos.md#✅-playcover-제일-부드럽습니다-🚀
|
||||
[waydroid-doc]: ../../manual/device/linux.md#✅-waydroid
|
||||
[example-config]: https://github.com/MaaAssistantArknights/maa-cli/blob/main/crates/maa-cli/config_examples
|
||||
[wangl-cc-dotfiles]: https://github.com/wangl-cc/dotfiles/tree/main/home/dot_config/maa
|
||||
[schema-dir]: https://github.com/MaaAssistantArknights/maa-cli/blob/main/crates/maa-cli/schemas/
|
||||
|
||||
@@ -5,113 +5,192 @@ icon: material-symbols:download
|
||||
|
||||
# 설치 및 빌드
|
||||
|
||||
maa-cli는 패키지 관리자, 사전 컴파일된 바이너리 파일, `cargo`를 통한 자체 컴파일 설치 등 다양한 설치 방법을 제공합니다.
|
||||
maa-cli는 사전 컴파일된 바이너리, 패키지 관리자, 그리고 `cargo`를 이용한 소스 컴파일 등 다양한 설치 방법을 제공합니다.
|
||||
|
||||
## 패키지 관리자를 통한 설치
|
||||
## 사전 컴파일된 바이너리
|
||||
|
||||
macOS 및 지원되는 Linux 배포판 사용자에게는 패키지 관리자를 통해 maa-cli를 설치하는 것을 권장합니다.
|
||||
maa-cli를 가장 쉽게 설치하는 방법은 원클릭 설치 스크립트를 사용하는 것입니다:
|
||||
|
||||
::: tabs#pre-compile
|
||||
|
||||
@tab:active Linux 및 macOS
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/MaaAssistantArknights/maa-cli/main/install.sh | bash
|
||||
```
|
||||
|
||||
@tab Windows (PowerShell)
|
||||
|
||||
```powershell
|
||||
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/MaaAssistantArknights/maa-cli/main/install.ps1" -OutFile install.ps1; .\install.ps1
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
이후 `maa self update`를 통해 maa-cli를 업데이트할 수 있습니다.
|
||||
|
||||
사용 중인 플랫폼이 위 목록에 없다면, [소스에서 직접 빌드](#소스에서-직접-빌드)를 시도해 볼 수 있습니다.
|
||||
|
||||
## 패키지 관리자를 통해 설치
|
||||
|
||||
macOS 및 지원되는 Linux 배포판 사용자는 패키지 관리자를 사용하여 maa-cli를 설치할 수 있습니다.
|
||||
|
||||
### macOS
|
||||
|
||||
Homebrew 사용자는 비공식 [tap](https://github.com/MaaAssistantArknights/homebrew-tap/)을 통해 maa-cli를 설치할 수 있습니다:
|
||||
|
||||
- 안정 버전:
|
||||
::: code-tabs
|
||||
|
||||
```bash
|
||||
brew install MaaAssistantArknights/tap/maa-cli
|
||||
```
|
||||
@tab:active 안정 버전
|
||||
|
||||
- 불안정 베타 버전:
|
||||
```bash :no-line-numbers
|
||||
brew install MaaAssistantArknights/tap/maa-cli
|
||||
```
|
||||
|
||||
```bash
|
||||
brew install MaaAssistantArknights/tap/maa-cli-beta
|
||||
```
|
||||
@tab 불안정 버전/사전 출시 버전
|
||||
|
||||
```bash :no-line-numbers
|
||||
brew install MaaAssistantArknights/tap/maa-cli-beta
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
### Linux
|
||||
|
||||
- Arch Linux 사용자는 [AUR 패캐지](https://aur.archlinux.org/packages/maa-cli/)를 설치할 수 있습니다:
|
||||
Arch, Nix, 그리고 Linux Homebrew 사용자는 패키지 관리자를 통해 maa-cli를 설치할 수 있습니다.
|
||||
|
||||
```bash
|
||||
yay -S maa-cli
|
||||
```
|
||||
#### Arch Linux
|
||||
|
||||
- ❄️ Nix 사용자는 다음 명령어를 실행할 수 있습니다:
|
||||
[AUR 패키지](https://aur.archlinux.org/packages/maa-cli/)를 설치할 수 있습니다:
|
||||
|
||||
```bash
|
||||
# 안정 버전
|
||||
nix run nixpkgs#maa-cli
|
||||
```
|
||||
::: code-tabs
|
||||
|
||||
```bash
|
||||
# 매일 최신화 버전
|
||||
nix run github:Cryolitia/nur-packages#maa-cli-nightly
|
||||
```
|
||||
@tab:active paru
|
||||
|
||||
안정 버전은 [nixpkgs](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-cli/package.nix)에 포함되어 있으며, `nixpkgs`의 Rust 도구 체인을 사용합니다. 매일 빌드는 [NUR](https://github.com/Cryolitia/nur-packages/blob/master/pkgs/maa-assistant-arknights/maa-cli.nix)에 위치하며, Beta 채널의 Rust 도구 체인을 사용하고 GitHub Action을 통해 매일 자동으로 업데이트 및 빌드 검증을 수행합니다.
|
||||
```bash :no-line-numbers
|
||||
paru -S maa-cli
|
||||
```
|
||||
|
||||
- Linux에서 Homebrew를 사용하는 경우 위의 macOS 설치 방법을 참조하세요.
|
||||
@tab yay
|
||||
|
||||
## 사전 컴파일된 바이너리 파일
|
||||
```bash :no-line-numbers
|
||||
yay -S maa-cli
|
||||
```
|
||||
|
||||
지원되지 않는 시스템을 사용하거나 패키지 관리자를 사용하지 않으려는 경우, 아래 링크를 통해 해당 플랫폼의 사전 컴파일된 바이너리 파일을 다운로드하고, 압축을 풀어 실행 파일을 `PATH`에 추가하여 사용할 수 있습니다.
|
||||
:::
|
||||
|
||||
- [macOS](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-universal-apple-darwin.zip)
|
||||
- [Linux x86_64 (x64, amd64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-x86_64-unknown-linux-gnu.tar.gz)
|
||||
- [Linux aarch64 (arm64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-aarch64-unknown-linux-gnu.tar.gz)
|
||||
- [Windows x86_64 (x64, amd64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-x86_64-pc-windows-msvc.zip)
|
||||
- [Windows aarch64 (arm64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-aarch64-pc-windows-msvc.zip)
|
||||
#### ❄️ Nix
|
||||
|
||||
위의 목록에 없는 플랫폼의 경우, 직접 컴파일하여 설치할 수 있습니다(아래 참조).
|
||||
사용자는 직접 실행할 수 있습니다:
|
||||
|
||||
## 컴파일 설치
|
||||
::: code-tabs
|
||||
|
||||
Rust 개발자는 `cargo`를 통해 maa-cli를 직접 컴파일하여 설치할 수 있습니다:
|
||||
@tab:active 안정 버전
|
||||
|
||||
- 안정 버전:
|
||||
```bash :no-line-numbers
|
||||
nix run nixpkgs#maa-cli
|
||||
```
|
||||
|
||||
```bash
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --tag stable --locked
|
||||
```
|
||||
@tab 나이틀리 빌드
|
||||
|
||||
- 개발 버전:
|
||||
```bash :no-line-numbers
|
||||
nix run github:Cryolitia/nur-packages#maa-cli-nightly
|
||||
```
|
||||
|
||||
```bash
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --locked
|
||||
```
|
||||
:::
|
||||
|
||||
### 컴파일 옵션
|
||||
안정 버전은 [nixpkgs](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-cli/package.nix)에 패키징되어 있으며, `nixpkgs`의 Rust 툴체인을 사용합니다. 나이틀리 빌드는 [NUR](https://github.com/Cryolitia/nur-packages/blob/master/pkgs/maa-assistant-arknights/maa-cli.nix)에 있으며, 베타 채널의 Rust 툴체인을 사용하며 Github Action에 의해 매일 자동으로 업데이트되고 빌드가 검증됩니다.
|
||||
|
||||
소스에서 컴파일할 때 `--no-default-features`를 통해 기본 기능을 비활성화하고 `--features`를 통해 특정 기능을 활성화할 수 있습니다. 현재 사용 가능한 기능은 다음과 같습니다:
|
||||
#### Homebrew
|
||||
|
||||
- `cli_installer`: `maa self update` 명령어를 활성화하여 자체 업데이트를 가능하게 합니다. 이 기능은 기본적으로 활성화되어 있습니다.
|
||||
- `core_installer`: `maa install` 및 `maa update` 명령어를 활성화하여 MaaCore 및 리소스를 설치하고 업데이트할 수 있습니다. 이 기능은 기본적으로 활성화되어 있습니다.
|
||||
- `git2`: `libgit2` 리소스 업데이트 백엔드를 제공합니다. 이 기능은 기본적으로 활성화되어 있습니다.
|
||||
- `vendored-openssl`: 시스템의 `openssl` 라이브러리를 사용하는 대신 자체적으로 `openssl` 라이브러리를 컴파일합니다. 이 기능은 기본적으로 비활성화되어 있으며, 시스템에 `openssl` 라이브러리가 없거나 버전이 너무 낮을 때 활성화합니다.
|
||||
Linux에서 Homebrew를 사용하는 사용자는 위의 macOS 설치 방법을 참조하십시오.
|
||||
|
||||
#### 기타 배포판
|
||||
|
||||
[사전 컴파일된 바이너리](#사전-컴파일된-바이너리)를 사용하거나 [소스에서 직접 빌드](#소스에서-직접-빌드)하십시오.
|
||||
|
||||
관심 있는 개발자분들이 더 많은 배포판의 공식 저장소나 사용자 저장소에 maa-cli를 제출해 주시는 것을 환영합니다!
|
||||
|
||||
## 소스에서 직접 빌드
|
||||
|
||||
Rust 개발자는 `cargo`를 통해 maa-cli를 직접 빌드하고 설치할 수 있습니다:
|
||||
|
||||
::: code-tabs
|
||||
|
||||
@tab:active 안정 버전
|
||||
|
||||
```bash :no-line-numbers
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --tag stable --locked
|
||||
```
|
||||
|
||||
@tab 개발 버전
|
||||
|
||||
```bash :no-line-numbers
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --locked
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: warning
|
||||
현재 maa-cli의 최소 지원 Rust 버전(MSRV)은 1.88입니다. MSRV는 언제든지 변경될 수 있으므로, 최상의 경험을 위해 항상 최신 Rust 툴체인을 사용하는 것을 권장합니다.
|
||||
:::
|
||||
|
||||
### 빌드 옵션
|
||||
|
||||
소스에서 빌드할 때 `--no-default-features`로 기본 기능을 비활성화하고 `--features`로 특정 기능을 활성화할 수 있습니다. 사용 가능한 기능은 다음과 같습니다:
|
||||
|
||||
- `cli_installer`: 자가 업데이트를 위한 `maa self update` 명령을 활성화합니다. 기본적으로 활성화되어 있습니다.
|
||||
- `core_installer`: MaaCore 및 리소스를 설치하고 업데이트하기 위한 `maa install` 및 `maa update` 명령을 활성화합니다. 기본적으로 활성화되어 있습니다.
|
||||
- `git2`: 리소스 업데이트를 위한 `libgit2` 백엔드를 제공합니다. 기본적으로 활성화되어 있습니다.
|
||||
|
||||
## MaaCore 및 리소스 설치
|
||||
|
||||
maa-cli는 명령줄 인터페이스만 제공하며, 작업을 실행하려면 MaaCore와 리소스가 필요합니다. maa-cli를 설치한 후, 다음 명령어를 통해 MaaCore와 리소스를 설치할 수 있습니다:
|
||||
maa-cli는 명령줄 인터페이스만 제공하며, 작업을 실행하려면 MaaCore와 리소스가 필요합니다.
|
||||
|
||||
```bash
|
||||
설치 방법과 플랫폼에 따라 작업이 달라집니다:
|
||||
|
||||
::: tabs#maacore
|
||||
|
||||
@tab:active 사전 컴파일
|
||||
사전 컴파일된 바이너리를 사용하거나 직접 빌드한 사용자의 경우, maa-cli를 통해 설치 및 업데이트를 할 수 있습니다:
|
||||
|
||||
```bash :no-line-numbers
|
||||
maa install
|
||||
```
|
||||
|
||||
패키지 관리자를 통해 설치한 사용자는 패키지 관리자를 통해 MaaCore를 설치할 수 있습니다:
|
||||
@tab Windows
|
||||
Windows 플랫폼 사용자의 경우, `maa install` 명령을 실행하기 전에 관리자 권한으로 명령 프롬프트나 PowerShell에서 다음 명령을 실행하여 필수 구성 요소인 VC++ 런타임을 설치하십시오:
|
||||
|
||||
- Homebrew:
|
||||
```bat :no-line-numbers
|
||||
winget install "Microsoft.VCRedist.2015+.x64" --override "/repair /passive /norestart" --uninstall-previous --accept-package-agreements --force
|
||||
```
|
||||
|
||||
```bash
|
||||
brew install MaaAssistantArknights/tap/maa-core
|
||||
```
|
||||
그런 다음 `maa install`을 실행합니다.
|
||||
|
||||
- Arch Linux:
|
||||
@tab Arch
|
||||
maa-cli를 사용하여 사전 컴파일된 MaaCore를 설치할 수 있습니다:
|
||||
|
||||
```bash
|
||||
yay -S maa-assistant-arknights
|
||||
```
|
||||
```bash :no-line-numbers
|
||||
maa install
|
||||
```
|
||||
|
||||
- Nix:
|
||||
또는 [AUR](https://aur.archlinux.org/packages/maa-assistant-arknights/)을 통해 maa-core를 설치할 수도 있습니다:
|
||||
|
||||
Nix의 maa-cli는 MaaCore에 대한 필수 종속성이 있습니다. 따라서 Nix 사용자는 MaaCore를 수동으로 설치할 필요가 없으며, 설치해서도 안 됩니다.
|
||||
```bash :no-line-numbers
|
||||
paru -S maa-assistant-arknights
|
||||
```
|
||||
|
||||
**주의**: 패키지 관리자를 통해 maa-cli를 설치한 경우에만 패키지 관리자를 통해 MaaCore를 설치할 수 있습니다. 그렇지 않으면 `maa install` 명령어를 사용해야 합니다. 또한, `maa install` 명령어는 공식적으로 사전 컴파일된 MaaCore를 다운로드합니다. 패키지 관리자를 통해 설치된 MaaCore는 컴파일 옵션과 종속성 버전이 공식 사전 컴파일 버전과 다를 수 있습니다. 이는 maa-cli의 사용에 영향을 미치지 않지만, MaaCore의 기능과 성능에 차이가 있을 수 있습니다.
|
||||
또는
|
||||
|
||||
```bash :no-line-numbers
|
||||
yay -S maa-assistant-arknights
|
||||
```
|
||||
|
||||
@tab Nix
|
||||
Nix의 maa-cli는 MaaCore에 대한 강제 종속성이 있으므로, Nix 사용자는 수동으로 MaaCore를 설치할 필요가 없으며, 해서도 안 됩니다.
|
||||
|
||||
:::
|
||||
|
||||
::: warning
|
||||
`maa install`은 MAA 공식 사전 컴파일된 MaaCore를 다운로드합니다. 반면, 패키지 관리자로 설치된 MaaCore는 공식 버전과 다른 컴파일 옵션 및 종속성 버전을 사용할 수 있으며, 이로 인해 성능 및 기능에 약간의 차이가 발생할 수 있습니다.
|
||||
:::
|
||||
|
||||
@@ -47,7 +47,7 @@ MaaCore의 설치 및 구성을 완료하면 작업을 실행할 준비가 된
|
||||
- `maa startup [client]`: 게임을 시작하고 메인 화면으로 이동합니다. `[client]`는 클라이언트 유형이며, 생략하면 게임 클라이언트를 시작하지 않습니다.
|
||||
- `maa closedown [client]`: 게임 클라이언트를 종료합니다. `[client]`는 클라이언트 유형이며, 기본값은 `Official`입니다.
|
||||
- `maa fight [stage]`: 전투 작업을 실행합니다. `[stage]`는 스테이지 이름이며, 예를 들어 `1-7`입니다. 생략하면 이전 또는 현재 스테이지를 선택합니다.
|
||||
- `maa copilot <maa_uri>...`: 자동 전투 작업을 실행합니다. `<maa_uri>`는 작업의 URI이며, 여러 URI는 순차적으로 실행됩니다. `maa_uri`는 `maa://1234` 또는 로컬 파일 경로 `./1234.json`일 수 있습니다.
|
||||
- `maa copilot <maa_uri>...`: 자동지휘 작업을 실행합니다. `<maa_uri>`는 작업의 URI이며, 여러 URI는 순차적으로 실행됩니다. `maa_uri`는 `maa://1234` 또는 로컬 파일 경로 `./1234.json`일 수 있습니다.
|
||||
- `maa sscopilot <maa_uri>`: 자동 보안 파견을 실행합니다. `<maa_uri>`는 보안 파견 작업의 URI입니다.
|
||||
- `maa roguelike <theme>`: 자동 통합 전략을 실행합니다. `<theme>`는 통합 전략의 주제이며, 선택 가능한 값은 `Phantom`, `Mizuki`, `Sami`, `Sarkaz`, `JieGarden`입니다.
|
||||
- `maa reclamation <theme>`: 자동 생활 게임을 실행합니다. `<theme>`는 생활 게임의 주제이며, 현재 사용 가능한 값은 `Tales`입니다.
|
||||
@@ -96,7 +96,7 @@ maa-cli는 기본적으로 표준 오류(stderr)에 로그를 출력합니다. `
|
||||
- `maa cleanup`: `maa-cli` 및 `MaaCore`의 캐시를 정리합니다.
|
||||
- `maa import <file> [-t <type>]:` 설정 파일을 가져옵니다. `file`은 설정 파일의 경로입니다. `-t` 옵션을 통해 설정 파일의 유형(`cli`, `profile`, `infrast` 등)을 지정할 수 있습니다.
|
||||
|
||||
더 많은 명령어 사용 방법은 `maa help`를 통해 확인할 수 있으며, 특정 명령어의 사용 방법은 `maa help <command`>를 통해 확인할 수 있습니다.
|
||||
더 많은 명령어 사용 방법은 `maa help`를 통해 확인할 수 있으며, 특정 명령어의 사용 방법은 `maa help <command>`를 통해 확인할 수 있습니다.
|
||||
|
||||
[config-core]: config.md#maacore-관련-설정
|
||||
[custom-task]: config.md#사용자-정의-작업
|
||||
|
||||
@@ -24,6 +24,7 @@ MAA v5.22.3까지 지원하는 감지 가능한 에뮬레이터 및 연결 주
|
||||
:::info 기술적 정보
|
||||
자동 감지는 에뮬레이터의 ADB를 사용하지만, 자동 감지에 문제가 있을 경우 수동 설정이 필요합니다.
|
||||
`ADB 강제 교체`는 구글이 제공하는 ADB를 다운로드한 후 교체하는 것으로, 구글 ADB를 설정하면 한 번만 설정해두면 됩니다.
|
||||
환경 변수에 사용 가능한 ADB가 존재할 경우, `adb`라고 직접 입력해도 됩니다.
|
||||
:::
|
||||
|
||||
### 에뮬레이터에서 제공하는 ADB 사용
|
||||
@@ -55,7 +56,7 @@ MAA 폴더에 직접 압축을 푸는 것을 권장합니다. 그러면 ADB 경
|
||||
- [Bluestacks 5](https://support.bluestacks.com/hc/ko/articles/360061342631-%EB%B8%94%EB%A3%A8%EC%8A%A4%ED%83%9D4-%EB%B8%94%EB%A3%A8%EC%8A%A4%ED%83%9D5%EB%A1%9C-%EC%95%B1-%EC%A0%84%EC%86%A1%ED%95%98%EA%B8%B0) `5555`
|
||||
- [MuMu](https://mumu.163.com/help/20240807/40912_1073151.html?maa) `16384`
|
||||
- [MuMu Pro](https://mumu.163.com/mac/function/20240126/40028_1134600.html) `16384`
|
||||
- [LDPlayer 9](https://help.ldmnq.com/docs/LD9adbserver) `emulator-5554`
|
||||
- [LDPlayer 9](https://help.ldmnq.com/docs/LD9adbserver#edc3863750608062bcb3feea256413dc) `emulator-5554`
|
||||
- [逍遥(Xiaoyao)](https://bbs.xyaz.cn/forum.php?mod=viewthread&tid=365537) `21503`
|
||||
- [夜神(Yeshen)](https://support.yeshen.com/zh-CN/qt/ml) `62001`
|
||||
|
||||
@@ -106,66 +107,72 @@ MAA 폴더에 직접 압축을 푸는 것을 권장합니다. 그러면 ADB 경
|
||||
|
||||
일반적으로 이렇게 설정하면 연결됩니다. 연결되지 않는 경우, 여러 에뮬레이터 코어가 존재하거나 문제가 발생한 것입니다. 아래의 추가 설정을 읽어보세요.
|
||||
|
||||
#### `Bluestacks.Config.Keyword` 지정
|
||||
:::: steps
|
||||
|
||||
::: info 주의
|
||||
멀티 인스턴스 기능을 활성화했거나 여러 에뮬레이터 코어를 설치한 경우, 사용 중인 에뮬레이터 번호를 지정해야 합니다.
|
||||
:::
|
||||
1. `Bluestacks.Config.Keyword` 지정
|
||||
|
||||
`.\config\gui.json`에서 `Bluestacks.Config.Keyword` 필드를 검색합니다. 내용은 `"bst.instance.<에뮬레이터 번호>.status.adb_port"`입니다. 에뮬레이터 번호는 에뮬레이터 경로의 `BlueStacks_nxt\Engine`에서 확인할 수 있습니다.
|
||||
::: info 주의
|
||||
멀티 인스턴스 기능을 활성화했거나 여러 에뮬레이터 코어를 설치한 경우, 사용 중인 에뮬레이터 번호를 지정해야 합니다.
|
||||
:::
|
||||
|
||||
::: details 예시
|
||||
Nougat64 코어:
|
||||
`.\config\gui.json`에서 `Bluestacks.Config.Keyword` 필드를 검색합니다. 내용은 `"bst.instance.<에뮬레이터 번호>.status.adb_port"`입니다. 에뮬레이터 번호는 에뮬레이터 경로의 `BlueStacks_nxt\Engine`에서 확인할 수 있습니다.
|
||||
|
||||
```json
|
||||
"Bluestacks.Config.Keyword":"bst.instance.Nougat64.status.adb_port",
|
||||
```
|
||||
::: details 예시
|
||||
Nougat64 코어:
|
||||
|
||||
Pie64_2 코어:(코어 이름 뒤의 숫자는 멀티 인스턴스 코어를 나타냅니다)
|
||||
```json
|
||||
"Bluestacks.Config.Keyword":"bst.instance.Nougat64.status.adb_port",
|
||||
```
|
||||
|
||||
```json
|
||||
"Bluestacks.Config.Keyword": "bst.instance.Pie64_2.status.adb_port",
|
||||
```
|
||||
Pie64_2 코어:(코어 이름 뒤의 숫자는 멀티 인스턴스 코어를 나타냅니다)
|
||||
|
||||
:::
|
||||
```json
|
||||
"Bluestacks.Config.Keyword": "bst.instance.Pie64_2.status.adb_port",
|
||||
```
|
||||
|
||||
#### `Bluestacks.Config.Path` 지정
|
||||
:::
|
||||
|
||||
::: info 주의
|
||||
MAA는 이제 레지스트리에서 `bluestacks.conf`의 저장 위치를 읽어오려고 시도합니다. 이 기능이 작동하지 않을 경우 수동으로 구성 파일 경로를 지정해야 합니다.
|
||||
:::
|
||||
2. `Bluestacks.Config.Path` 지정
|
||||
|
||||
1. 블루스택 데이터 디렉토리에서 `bluestacks.conf` 파일을 찾습니다.
|
||||
- 글로벌 버전 `C:\ProgramData\BlueStacks_nxt\bluestacks.conf`
|
||||
- 중국 내륙 버전 `C:\ProgramData\BlueStacks_nxt_cn\bluestacks.conf`
|
||||
::: info 주의
|
||||
MAA는 이제 레지스트리에서 `bluestacks.conf`의 저장 위치를 읽어오려고 시도합니다. 이 기능이 작동하지 않을 경우 수동으로 구성 파일 경로를 지정해야 합니다.
|
||||
:::
|
||||
1. 블루스택 데이터 디렉토리에서 `bluestacks.conf` 파일을 찾습니다.
|
||||
- 글로벌 버전 `C:\ProgramData\BlueStacks_nxt\bluestacks.conf`
|
||||
- 중국 내륙 버전 `C:\ProgramData\BlueStacks_nxt_cn\bluestacks.conf`
|
||||
|
||||
참고: `C:\ProgramData`는 숨겨진 디렉터리입니다. 필요한 경우, 파일 탐색기의 주소 표시줄에 이 주소를 직접 붙여넣어 접근하세요.
|
||||
참고: `C:\ProgramData`는 숨겨진 디렉터리입니다. 필요한 경우, 파일 탐색기의 주소 표시줄에 이 주소를 직접 붙여넣어 접근하세요.
|
||||
|
||||
2. 처음 사용하는 경우, MAA를 한 번 실행하여 MAA가 자동으로 구성 파일을 생성하게 합니다.
|
||||
2. 처음 사용하는 경우, MAA를 한 번 실행하여 MAA가 자동으로 구성 파일을 생성하게 합니다.
|
||||
3. **MAA를 종료**한 후, `gui.json`을 열어 `Configurations` 아래의 현재 구성 이름 필드를 찾습니다(설정-구성 전환에서 확인할 수 있으며, 기본값은 `Default`입니다). 그 안에서 `Bluestacks.Config.Path` 필드를 찾아 `bluestacks.conf`의 전체 경로를 입력합니다. (슬래시를 이스케이프 `\\`해서 사용해야 합니다.)
|
||||
|
||||
3. **MAA를 종료**한 후, `gui.json`을 열어 `Configurations` 아래의 현재 구성 이름 필드를 찾습니다(설정-구성 전환에서 확인할 수 있으며, 기본값은 `Default`입니다). 그 안에서 `Bluestacks.Config.Path` 필드를 찾아 `bluestacks.conf`의 전체 경로를 입력합니다. (슬래시를 이스케이프 `\\`해서 사용해야 합니다.)
|
||||
::: details 예시
|
||||
`C:\ProgramData\BlueStacks_nxt\bluestacks.conf` 경로 예시
|
||||
|
||||
::: details 예시
|
||||
`C:\ProgramData\BlueStacks_nxt\bluestacks.conf` 경로 예시
|
||||
```json
|
||||
{
|
||||
"Configurations": {
|
||||
"Default": {
|
||||
"Bluestacks.Config.Path": "C:\\ProgramData\\BlueStacks_nxt\\bluestacks.conf"
|
||||
// 다른 구성 필드, 수동으로 입력하지 마세요.
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"Configurations": {
|
||||
"Default": {
|
||||
"Bluestacks.Config.Path": "C:\\ProgramData\\BlueStacks_nxt\\bluestacks.conf"
|
||||
// 다른 구성 필드, 수동으로 입력하지 마세요.
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
||||
:::
|
||||
3. MAA로 돌아가서 테스트
|
||||
|
||||
`설정-실행 설정`에서 `스크린샷 테스트` 기능을 사용하여 예상한 에뮬레이터 코어에 연결되었는지 확인할 수 있습니다.
|
||||
|
||||
::::
|
||||
|
||||
## 연결 구성
|
||||
|
||||
해당 에뮬레이터의 구성을 선택해야 합니다. 목록에 없으면 일반 구성을 선택하세요. 일반 구성이 작동하지 않으면 다른 사용 가능한 구성을 시도하세요.
|
||||
|
||||
자세한 차이점은 [소스 코드](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/dev/resource/config.json#L65)를 참조하세요.
|
||||
자세한 차이점은 [소스 코드](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/dev/resource/config.json#L57)를 참조하세요.
|
||||
|
||||
### MuMu 스크린샷 강화 모드
|
||||
|
||||
@@ -179,7 +186,7 @@ MAA는 이제 레지스트리에서 `bluestacks.conf`의 저장 위치를 읽어
|
||||
|
||||
### LD 스크린샷 향상 모드
|
||||
|
||||
현재 중국판 LD Player 9 V9.1.32 이상 버전만 지원됩니다. 명일방주 에디션은 현재 지원되지 않습니다. <!-- V9.0.78 -->
|
||||
공식 또는 국제판(International) LD Player 9 V9.1.32 이상 버전이 지원됩니다. <!-- V9.0.78 -->
|
||||
|
||||
1. 설정 → 연결 설정에서 `LD의 스크린샷 향상 모드 활성화`를 켭니다. 체크할 경우 MAA는 레지스트리를 통해 설치 경로를 자동으로 입력하려고 시도합니다.
|
||||
|
||||
|
||||
@@ -56,51 +56,52 @@ MAA Wine Bridge에서 생성된 `MaaDesktopIntegration.so`를 `MAA.exe`와 같
|
||||
|
||||
### Python 사용
|
||||
|
||||
#### 1. MAA 동적 라이브러리 설치
|
||||
:::: steps
|
||||
|
||||
1. [MAA 공식 웹사이트](https://maa.plus/)에서 리눅스 라이브러리를 다운로드하고 압축을 풉니다. 혹은 소프트웨어 저장소에서 설치합니다:
|
||||
- AUR:[maa-assistant-arknights](https://aur.archlinux.org/packages/maa-assistant-arknights)을 설치한 후에 설치 지침에 따라 파일을 편집합니다.
|
||||
- Nixpkgs: [maa-assistant-arknights](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-assistant-arknights/package.nix)
|
||||
1. MAA 동적 라이브러리 설치
|
||||
1. [MAA 공식 웹사이트](https://maa.plus/)에서 Linux 동적 라이브러리를 다운로드하고 압축을 풀거나 소프트웨어 저장소에서 설치합니다:
|
||||
- AUR:[maa-assistant-arknights](https://aur.archlinux.org/packages/maa-assistant-arknights)을 설치한 후에 설치 지침에 따라 파일을 편집합니다.
|
||||
- Nixpkgs: [maa-assistant-arknights](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-assistant-arknights/package.nix)
|
||||
2. `./MAA-v{버전}-linux-{아키텍처}/Python/` 디렉토리로 이동하여 `sample.py` 파일을 엽니다.
|
||||
|
||||
2. `./MAA-v{버전}-linux-{아키텍처}/Python/` 폴더로 이동하여 `sample.py` 파일을 엽니다.
|
||||
::: tip
|
||||
사전 컴파일된 버전은 상대적으로 최신 버전의 Linux 배포판 (Ubuntu 22.04)에서 컴파일된 동적 라이브러리를 포함하고 있습니다. 시스템의 libstdc++ 버전이 오래되면 ABI 호환성 문제가 발생할 수 있습니다.
|
||||
[Linux 컴파일 가이드](../../develop/linux-tutorial.md)를 참조하여 다시 컴파일하거나 컨테이너를 사용할 수 있습니다.
|
||||
:::
|
||||
|
||||
::: tip
|
||||
사전 컴파일된 버전은 상대적으로 최신 버전의 리눅스 배포판 (Ubuntu 22.04)에서 컴파일된 동적 라이브러리를 포함하고 있습니다. 시스템의 libstdc++ 버전이 오래되어 ABI 호환성 문제가 발생할 수 있습니다. [Linux 컴파일 가이드](../../develop/linux-tutorial.md)를 참조하여 다시 컴파일하거나 컨테이너를 실행할 수 있습니다.
|
||||
:::
|
||||
2. ADB 구성
|
||||
1. [`if asst.connect('adb.exe', '127.0.0.1:5554'):`](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/b4fc3528decd6777441a8aca684c22d35d2b2574/src/Python/sample.py#L62) 줄을 찾습니다.
|
||||
2. ADB 도구 호출
|
||||
- 에뮬레이터가 `Android Studio`의 `avd`를 사용하는 경우 ADB가 내장되어 있습니다. `adb.exe` 필드에 ADB 경로를 입력합니다. 일반적으로 `$HOME/Android/Sdk/platform-tools/` 폴더에서 찾을 수 있습니다. 예시:
|
||||
|
||||
#### 2. `adb` 구성
|
||||
```python
|
||||
if asst.connect("/home/foo/Android/Sdk/platform-tools/adb", "에뮬레이터의 ADB 주소"):
|
||||
```
|
||||
|
||||
1. [`if asst.connect('adb.exe', '127.0.0.1:5554'):`](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/722f0ddd4765715199a5dc90ea1bec2940322344/src/Python/sample.py#L48) 줄을 찾습니다.
|
||||
- 다른 에뮬레이터를 사용하는 경우 먼저 ADB를 다운로드해야 합니다: `$ sudo apt install adb` 후 경로를 입력하거나 `PATH` 환경 변수를 사용하여 `adb`를 입력합니다.
|
||||
|
||||
2. `adb` 도구 호출
|
||||
- 에뮬레이터가 `Android Studio`의 `avd`를 사용하는 경우 `adb`가 내장되어 있습니다. `adb.exe` 필드에 `adb` 경로를 입력합니다. 일반적으로 `$HOME/Android/Sdk/platform-tools/` 폴더에 있습니다. 예시:
|
||||
3. 에뮬레이터 ADB 경로 가져오기
|
||||
- ADB 도구를 직접 사용할 수 있습니다: `$ adb경로 devices`, 예시:
|
||||
|
||||
```python
|
||||
if asst.connect("/home/foo/Android/Sdk/platform-tools/adb", "모바일 에뮬레이터의 adb 주소"):
|
||||
```
|
||||
```shell
|
||||
$ /home/foo/Android/Sdk/platform-tools/adb devices
|
||||
List of devices attached
|
||||
emulator-5554 device
|
||||
```
|
||||
|
||||
- 다른 에뮬레이터를 사용하는 경우 `adb`를 먼저 다운로드해야 합니다: `$ sudo apt install adb`를 실행한 후 경로를 입력하거나 `PATH` 환경 변수를 사용하여 `adb`를 입력합니다.
|
||||
- 반환된 `emulator-5554`가 에뮬레이터의 ADB 주소이므로 `127.0.0.1:5555`를 대체합니다. 예시:
|
||||
|
||||
3. 에뮬레이터의 `adb` 경로 확인:
|
||||
- 직접 `adb` 도구를 사용할 수 있습니다: `$ adb경로 devices`를 실행하면 됩니다. 예시:
|
||||
```python
|
||||
if asst.connect("/home/foo/Android/Sdk/platform-tools/adb", "emulator-5554"):
|
||||
```
|
||||
|
||||
```shell
|
||||
$ /home/foo/Android/Sdk/platform-tools/adb devices
|
||||
List of devices attached
|
||||
emulator-5554 device
|
||||
```
|
||||
4. 이제 테스트할 수 있습니다: `$ python3 sample.py`를 실행하고 `연결 성공`이 반환되면 대부분 성공한 것입니다.
|
||||
|
||||
- 반환된 `emulator-5554`가 에뮬레이터의 `adb` 주소이므로 `127.0.0.1:5555`를 덮어씁니다. 예를 들어:
|
||||
3. 작업 구성
|
||||
|
||||
```python
|
||||
if asst.connect("/home/foo/Android/Sdk/platform-tools/adb", "emulator-5554"):
|
||||
```
|
||||
사용자 정의 작업: 필요에 따라 [통합 문서](../../protocol/integration.md)를 참조하여 `sample.py`의 [`# 작업 및 매개변수는 docs/integration.md 참조`](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/722f0ddd4765715199a5dc90ea1bec2940322344/src/Python/sample.py#L54) 부분을 수정합니다.
|
||||
|
||||
4. 이제 테스트를 진행해볼 수 있습니다: `$ python3 sample.py`를 실행한 후 연결 성공이 표시되면 대부분의 작업이 완료된 것입니다.
|
||||
|
||||
#### 3. 작업 설정
|
||||
|
||||
사용자 정의 작업: [통합 문서](../../protocol/integration.md)를 참조하고, `sample.py`의 # 작업 및 매개 변수는 [예제](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/722f0ddd4765715199a5dc90ea1bec2940322344/src/Python/sample.py#L54)를 참조해 줄을 수정하세요.
|
||||
::::
|
||||
|
||||
## 모바일 에뮬레이터 지원
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ const fullySupport = [
|
||||
{
|
||||
name: 'MuMu 에뮬레이터',
|
||||
link: 'https://mumu.163.com/',
|
||||
note: '완전히 호환되며, [스크린샷 향상 모드](../connection.html#mumu-스크린샷-향상-모드)에 대한 추가 지원이 있습니다. Hyper-V와 호환되는 것으로 알려져 있습니다.\n\n- "완료 시 에뮬레이터 종료" 기능이 간혹 비정상적일 수 있습니다. 이런 경우 MuMu 공식 채널에 피드백을 주세요;\n- 둘 이상의 인스턴스를 열 때는 MuMu 다중 실행기의 ADB 버튼을 통해 해당 인스턴스의 포트 정보를 확인하고, MAA `설정` - `연결 설정`에서 연결 주소의 포트 번호를 해당 포트로 변경해야 합니다.\n- `메모리 사용 정책`을 `리소스 사용량 감소`로 설정하지 마십시오.',
|
||||
note: '완전히 호환되며, [스크린샷 향상 모드](../connection.html#mumu-스크린샷-향상-모드)에 대한 추가 지원이 있습니다. Hyper-V와 호환되는 것으로 알려져 있습니다.\n\n- "완료 시 에뮬레이터 종료" 기능이 간혹 비정상적일 수 있습니다. 이런 경우 MuMu 공식 채널에 피드백을 주세요;\n- 둘 이상의 인스턴스를 열 때는 MuMu 다중 실행기의 ADB 버튼을 통해 해당 인스턴스의 포트 정보를 확인하고, MAA `설정` - `연결 설정`에서 연결 주소의 포트 번호를 해당 포트로 변경해야 합니다.\n- `메모리 사용 정책`을 `리소스 사용량 감소`로 설정하지 마세요.',
|
||||
},
|
||||
{
|
||||
name: 'LDPlayer',
|
||||
@@ -37,7 +37,7 @@ const fullySupport = [
|
||||
{
|
||||
name: 'Bluestacks 5',
|
||||
link: 'https://www.bluestacks.com/ko/',
|
||||
note: '완전히 호환됩니다. 에뮬레이터의 `설정` - `고급 설정`에서 `ADB 기능`을 켜야 합니다. Hyper-V와 호환되는 것으로 알려져 있습니다.\n\n- 느리고 번들로 제공되는 설치를 피하기 위해 [오프라인 설치 프로그램](https://support.bluestacks.com/hc/en-us/articles/4402611273485-BlueStacks-5-offline-installer)을 다운로드하는 것이 좋습니다; [Android 11](https://support.bluestacks.com/hc/en-us/articles/4402611273485-BlueStacks-5-offline-installer#:~:text=To%20install%20BlueStacks%205%20Android%2011) 버전 설치를 권장합니다; 제거하려면 공식 [제거 도구](https://support.bluestacks.com/hc/en-us/articles/360057724751-How-to-uninstall-BlueStacks-5-BlueStacks-X-and-BlueStacks-Services-completely-from-your-PC)를 사용하여 잔여물을 제거하세요.\n- adb 포트 번호가 계속 불규칙하게 변경되고 시작할 때마다 다르다면 컴퓨터에 [Hyper-V](https://support.bluestacks.com/hc/en-us/articles/4415238471053-System-requirements-for-BlueStacks-5-on-Hyper-V-enabled-Windows-10-and-11)가 활성화되어 있기 때문일 수 있습니다. MAA는 이제 BlueStacks 에뮬레이터 구성 파일 내에서 포트 번호를 자동으로 읽으려고 시도할 것입니다. 이 방법이 작동하지 않거나 다중 실행/둘 이상의 에뮬레이터 커널이 설치된 경우 [연결 (TODO)](../faq.html#블루스택-에뮬레이터가-매번-시작될-때마다-포트-번호가-다릅니다-hyper-v)을 참조하여 변경하세요. Hyper-V는 관리자로 실행되므로 에뮬레이터 자동 종료, 자동 연결 감지 등 adb와 관련 없는 작업도 MAA를 관리자로 실행해야 합니다.',
|
||||
note: '완전히 호환됩니다. 에뮬레이터의 `설정` - `고급 설정`에서 `ADB 기능`을 켜야 합니다. Hyper-V와 호환되는 것으로 알려져 있습니다.\n\n- 느리고 번들로 제공되는 설치를 피하기 위해 [오프라인 설치 프로그램](https://support.bluestacks.com/hc/en-us/articles/4402611273485-BlueStacks-5-offline-installer)을 다운로드하는 것이 좋습니다; [Android 11](https://support.bluestacks.com/hc/en-us/articles/4402611273485-BlueStacks-5-offline-installer#:~:text=To%20install%20BlueStacks%205%20Android%2011) 버전 설치를 권장합니다; 제거하려면 공식 [제거 도구](https://support.bluestacks.com/hc/en-us/articles/360057724751-How-to-uninstall-BlueStacks-5-BlueStacks-X-and-BlueStacks-Services-completely-from-your-PC)를 사용하여 잔여물을 제거하세요.\n- adb 포트 번호가 계속 불규칙하게 변경되고 시작할 때마다 다르다면 컴퓨터에 [Hyper-V](https://support.bluestacks.com/hc/en-us/articles/4415238471053-System-requirements-for-BlueStacks-5-on-Hyper-V-enabled-Windows-10-and-11)가 활성화되어 있기 때문일 수 있습니다. MAA는 이제 BlueStacks 에뮬레이터 구성 파일 내에서 포트 번호를 자동으로 읽으려고 시도할 것입니다. 이 방법이 작동하지 않거나 다중 실행/둘 이상의 에뮬레이터 커널이 설치된 경우 [연결 설정](../connection.md#bluestacks-에뮬레이터-hyper-v-포트-번호-변경)을 참조하여 변경하세요. Hyper-V는 관리자로 실행되므로 에뮬레이터 자동 종료, 자동 연결 감지 등 adb와 관련 없는 작업도 MAA를 관리자로 실행해야 합니다.',
|
||||
},
|
||||
...shuffleArray([
|
||||
{
|
||||
|
||||
@@ -37,6 +37,14 @@ winget install "Microsoft.VCRedist.2015+.x64" --override "/repair /passive /nore
|
||||
|
||||
웹 페이지 오른쪽 아래에 있는 위로 ↑ 화살표를 찾아 클릭하세요.
|
||||
|
||||
### 시스템 문제
|
||||
|
||||
- MAA는 32비트 운영 체제를 지원하지 않으며, Windows 7 / 8 / 8.1을 지원하지 않습니다.
|
||||
- 아래의 런타임 설치는 모두 구성 요소 저장소(CBS, TrustedInstaller/TiWorker, WinSxS)에 의존합니다.
|
||||
구성 요소 저장소가 손상되면 정상적으로 설치할 수 없습니다.
|
||||
|
||||
운영 체제를 다시 설치하는 것 이외에 다른 수정 방법을 제공할 수 없으며, 확장 기능이나 리스크가 표시되지 않은 "정리판" 운영 체제를 사용하는 것을 피하세요. 또는 아주 오래된 구버전 시스템 사용을 피하세요.
|
||||
|
||||
#### Windows N/KN 관련
|
||||
|
||||
Windows 8/8.1/10/11 N/KN(유럽/한국) 버전을 사용하는 경우, [미디어 기능 팩](https://support.microsoft.com/ko-kr/topic/c1c6fffa-d052-8338-7a79-a4bb980a700a)을 설치해야 합니다.
|
||||
@@ -55,26 +63,12 @@ Windows 7의 경우, 위에서 언급한 두 개의 런타임 라이브러리를
|
||||
|
||||
##### .NET 8 애플리케이션이 Windows 7에서 비정상적으로 실행되는 문제 완화 조치 [#8238](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/8238)
|
||||
|
||||
Windows 7에서 .NET 8 애플리케이션을 실행할 때 메모리 사용량이 비정상적으로 증가하는 문제가 있습니다. 아래의 완화 조치를 참조하십시오. Windows 8/8.1은 테스트되지 않았습니다. 동일한 문제가 있는 경우, 문서를 업데이트할 수 있도록 Issue를 제출해 주십시오.
|
||||
Windows 7에서 .NET 8 애플리케이션을 실행할 때 메모리 사용량이 비정상적으로 증가하는 문제가 있습니다. 아래의 완화 조치를 참조하세요. Windows 8/8.1은 테스트되지 않았습니다. 동일한 문제가 있는 경우, 문서를 업데이트할 수 있도록 Issue를 제출해 주세요.
|
||||
|
||||
1. `컴퓨터`를 열고 빈 공간을 마우스 오른쪽 버튼으로 클릭하여 속성을 클릭하고, 왼쪽의 `고급 시스템 설정`을 클릭한 다음 `환경 변수`를 클릭합니다.
|
||||
2. 새 시스템 변수를 만들고, 변수 이름을 `DOTNET_EnableWriteXorExecute`, 변수 값을 `0`으로 설정합니다.
|
||||
3. 컴퓨터를 재시작합니다.
|
||||
|
||||
#### 공식 통합 패키지 (확실함)
|
||||
|
||||
::: info 참고
|
||||
이 작업은 약 10GB 정도의 디스크 공간을 소비하므로 다른 방법들을 모두 시도한 후에 마지막으로 시도하세요.
|
||||
:::
|
||||
|
||||
[Microsoft C++ 빌드도구](https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/)를 설치하여 완전한 개발 환경을 설정하세요 (닷넷 및 C++ 개발 환경만 설치하면 됩니다).
|
||||
|
||||
### 가능성 3: 시스템 구성 요소 문제
|
||||
|
||||
상기된 런타임 설치는 구성 요소 저장소(CBS, TrustedInstaller/TiWorker, WinSxS)에 의존합니다. 구성 요소 저장소가 손상되면 정상적으로 설치할 수 없습니다.
|
||||
|
||||
운영 체제를 다시 설치하는 것 이외에 다른 수정 방법을 제공할 수 없으며, 확장 기능이나 리스크가 표시되지 않은 "정리판" 운영 체제를 사용하는 것을 피하세요.
|
||||
|
||||
## 연결 오류
|
||||
|
||||
::: tip
|
||||
@@ -141,17 +135,17 @@ UU 가속기와 MuMu를 동시에 사용할 경우 [공식 문서](https://mumu.
|
||||
|
||||
- `UI 위치 조절`을 사용하는 경우 0으로 설정하세요.
|
||||
- 국가 별 클라이언트를 플레이하는 경우 먼저 `설정` - `게임 설정` - `클라이언트 유형`에서 `클라이언트 버전`을 선택하세요. 해외 클라이언트의 경우 일부 기능이 완전히 호환되지 않을 수 있으므로 해당 해외 클라이언트 사용 설명서를 참조하세요.
|
||||
- 통합전략 기능을 사용할 경우, [사용자 설명서](./introduction/integrated-strategy.md)를 참조하고 `통합전략` - `테마`에서 올바른 테마를 선택하세요
|
||||
- 자동 전투가 자주 일시 정지되고 오퍼레이터가 배치되지 않으면 `설정` - `실행 설정`에서 `일시정지 상태로 배치하기`를 비활성화하세요.
|
||||
- 자동 배치가 오퍼레이터를 제대로 인식하지 못할 경우, 해당 오퍼레이터의 즐겨찾기를 해제하세요.
|
||||
- `Adb Input` 터치 모드 작업이 느린 것은 정상입니다. Copilot 기능이 필요한 경우 다른 모드로 전환해 보세요.
|
||||
- MuMu 에뮬레이터를 사용하는 경우, `메모리 사용 정책`을 `리소스 사용량 최소화`로 설정하지 마십시오.
|
||||
- 통합 전략 기능을 사용할 경우, [사용자 설명서](./introduction/integrated-strategy.md)를 참조하고 `통합 전략` - `테마`에서 올바른 테마를 선택하세요
|
||||
- 자동지휘가 자주 일시 정지되고 오퍼레이터가 배치되지 않으면 `설정` - `실행 설정`에서 `일시정지 상태로 배치하기`를 비활성화하세요.
|
||||
- 자동 편성 시 오퍼레이터를 제대로 인식하지 못할 경우, 해당 오퍼레이터의 즐겨찾기를 해제하세요.
|
||||
- `Adb Input` 터치 모드 작업이 느린 것은 정상입니다. 자동지휘 기능이 필요한 경우 다른 모드로 전환해 보세요.
|
||||
- MuMu 에뮬레이터를 사용하는 경우, `메모리 사용 정책`을 `리소스 사용량 최소화`로 설정하지 마세요.
|
||||
|
||||
### 스크린샷 촬영이 오래 걸리거나 오랜 시간이 걸립니다
|
||||
|
||||
- MAA는 현재 `RawByNc`, `RawWithGzip`, `Encode` 세 가지 방법으로 스크린샷을 지원하며 평균 스크린샷 시간이 400/800보다 클 때 한 번의 메시지를 출력합니다. (한 번의 작업에서 한 번만 메시지를 출력합니다)
|
||||
- `설정` - `연결 설정`에서 최근 30회 스크린샷 시간의 최소/평균/최대값을 표시하며 10회마다 스크린샷이 새로 고침됩니다.
|
||||
- Copilot(자동 전투) 기능은 스크린샷 시간에 크게 영향을 받습니다.
|
||||
- 자동지휘 기능은 스크린샷 시간에 크게 영향을 받습니다.
|
||||
- 이 시간은 MAA와 관련이 없으며 컴퓨터 성능, 현재 사용률 또는 에뮬레이터에 따라 달라집니다. 백그라운드를 정리하거나 에뮬레이터를 변경하거나 컴퓨터 구성을 업그레이드하는 등의 조치를 취해보세요.
|
||||
|
||||
## 관리자 권한 관련 문제
|
||||
@@ -167,4 +161,4 @@ UAC가 비활성화된 시스템에서는 "우클릭하여 관리자 권한으
|
||||
|
||||
## 중간에 다운로드 중 "로그인"/"인증" 메시지가 표시됩니다
|
||||
|
||||
브라우저 / IDM / FDM 등의 다운로드 관리자를 사용하여 파일을 다운로드하세요. **웨이더를 사용하지 마세요!**
|
||||
브라우저 / IDM / FDM 등의 다운로드 관리자를 사용하여 파일을 다운로드하세요. **Xunlei(썬더)를 사용하지 마세요!**
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: 기능
|
||||
title: 기능 소개
|
||||
icon: mdi:information-outline
|
||||
index: false
|
||||
dir:
|
||||
|
||||
@@ -3,7 +3,7 @@ order: 3
|
||||
icon: hugeicons:brain-02
|
||||
---
|
||||
|
||||
# 이성 사용 (Combat)
|
||||
# 이성 사용
|
||||
|
||||
## 일반 설정
|
||||
|
||||
|
||||
@@ -3,12 +3,12 @@ order: 9
|
||||
icon: ph:sword-bold
|
||||
---
|
||||
|
||||
# Copilot (자동 전투)
|
||||
# 자동지휘
|
||||
|
||||
[prts.plus](https://prts.plus)에서 이용해 다운로드/업로드 및 제작할 수 있습니다!
|
||||
|
||||
::: warning
|
||||
모든 자동 전투 관련 기능은 다음 전제 조건이 필요합니다. 여기에는 자동 전투와 통합전략이 포함되며 이에 국한되지 않습니다.
|
||||
모든 자동지휘 관련 기능은 다음 전제 조건이 필요합니다. 여기에는 자동지휘와 통합 전략이 포함되며 이에 국한되지 않습니다.
|
||||
|
||||
- 최소 60 프레임의 **안정적인** 게임 프레임률
|
||||
- 터치 모드는 Minitouch 또는 MaaTouch
|
||||
@@ -17,7 +17,7 @@ icon: ph:sword-bold
|
||||
|
||||
## 작업 불러오기
|
||||
|
||||
Copilot은 `일반/이벤트 스테이지` 및 `보안파견` 등을 지원합니다.
|
||||
자동지휘는 `편성 가능한 모든 스테이지` 및 `보안파견` 등을 지원합니다.
|
||||
|
||||
- 이 기능을 사용하려면 전투 준비 화면에서 `작전 개시` 버튼이 있는 곳에서 시작해야 합니다.
|
||||
그런 다음 MAA의 `자동지휘` 칸에서 `JSON 파일`을 가져오거나 [prts.plus](https://prts.plus)와 같은 사이트에서 코드를 입력하면 됩니다.
|
||||
@@ -25,20 +25,22 @@ Copilot은 `일반/이벤트 스테이지` 및 `보안파견` 등을 지원합
|
||||
- 자동 배치에 해당하는 오퍼레이터의 즐겨찾기를 해제해야 합니다.
|
||||
- `맞춤 오퍼레이터 추가`및 `신뢰도가 낮은 오퍼레이터 추가`도 할 수 있습니다.
|
||||
- `지원 유닛`을 사용하거나, 자동 편성이 불가능할 경우 수동 편성도 가능합니다.
|
||||
- `패러독스 시뮬레이션`의 경우 `자동 편성`을 사용하면 안됩니다! 스킬을 수동 선택 후 `시뮬레이션 시작` 버튼이 있는 화면에서 실행하세요.
|
||||
- `보안 파견`의 경우 자동편성이 불가능합니다! `수동 편성` 해주세요.
|
||||
- `반복 횟수` 기능이 있지만 `반복 횟수` 기능을 사용할 경우, MAA는 `지원 유닛`을 자동으로 빌리는 기능은 아직 없기에 주의하세요!
|
||||
- `패러독스 시뮬레이션`의 경우 `자동 편성`을 사용해서는 안 됩니다. 스킬을 수동 선택 후 `시뮬레이션 시작` 버튼이 있는 화면에서 실행하세요.
|
||||
- `보안 파견`의 경우 자동편성이 불가능합니다. `수동 편성` 해주세요.
|
||||
- `반복 횟수` 기능이 있지만 `반복 횟수` 기능을 사용할 경우, MAA는 `지원 유닛`을 자동으로 빌리는 기능은 아직 없기에 주의하세요.
|
||||
- 동일한 지역의 스테이지를 연속적으로 전투하려면, `전투 목록` 기능을 사용할 수 있습니다.
|
||||
- `전투 목록 아래`의 세 가지 버튼은 왼쪽에서 부터 `폴더 가져오기`, `스테이지 추가`, `스테이지 지우기`입니다.
|
||||
- 작업을 시작하려면 해당 지역의 지도 화면에서 자동 전투를 시작하세요. 이성이 부족하거나, 3성 클리어를 못한 경우 전투를 정지합니다.
|
||||
- `전투 목록 아래`의 세 가지 버튼은 왼쪽에서 부터 `폴더 가져오기`, `스테이지 추가`, `스테이지 지우기`입니다.
|
||||
`스테이지 추가` 우클릭은 작전 스테이지 추가이고, `스테이지 지우기` 우클릭은 선택되지 않은 스테이지만 지우기입니다.
|
||||
- 작업을 가져온 후, 전투 목록 아래에 스테이지 이름이 표시됩니다. 올바른지 확인한 후 해당 스테이지를 추가하세요. 목록의 스테이지는 드래그하여 순서를 조정하고, 실행 여부를 체크할 수 있습니다.
|
||||
- 작업을 시작하려면 해당 지역의 지도 화면에서 자동지휘를 시작하세요. 이성이 부족하거나, 전투 실패, 3성 클리어를 못한 경우 자동 전투 대기열을 중지합니다.
|
||||
- 전투 목록에 있는 스테이지는 `동일한 지역`에 있어야 합니다. (지도를 좌우로 스크롤하여 이동할 수 있어야 합니다)
|
||||
- **우수한 Copilot 파일에 반드시 추천을 눌러 제작자를 격려하세요! 큰 도움이 됩니다!**
|
||||
- **우수한 자동지휘 파일에 반드시 추천을 눌러 제작자를 격려해 주세요! 큰 도움이 됩니다!**
|
||||
|
||||

|
||||
|
||||
## Copilot 파일 작성
|
||||
## 자동지휘 파일 작성
|
||||
|
||||
- [파일 작성기](https://prts.plus/create)를 사용할 수 있고, [전투 스키마 문서](../../protocol/copilot-schema.md)를 참조할 수도 있습니다.
|
||||
- [파일 작성기](https://prts.plus/create)를 사용할 수 있고, [전투 프로토콜 문서](../../protocol/copilot-schema.md)를 참조할 수도 있습니다.
|
||||
- 좌표를 가져오려면:
|
||||
- 파일 작성기에서 스테이지를 입력한 후, 왼쪽 하단에 자동으로 확대/축소 가능한 좌표 지도가 표시됩니다. 오퍼레이터 위치를 클릭하여 설정할 수 있습니다.
|
||||
- 스테이지를 입력하고 JSON을 내보낸 후, 시작 버튼을 누르면 MAA 폴더의 `debug\map`에 좌표 정보가 포함된 지도 스크린샷이 생성됩니다.
|
||||
|
||||
@@ -26,11 +26,11 @@ icon: material-symbols:view-quilt-rounded
|
||||
- 제어 센터의 복잡성으로 인해서, `아미야`, `스와이어`, `켈시`, `레인보우 팀`과 기타 시간당 컨디션 +0.05 오퍼레이터만이 고려됩니다. 향후 개선될 예정입니다.
|
||||
- 필요한 시설 유형만 선택해 MAA가 처리하도록 할 수 있습니다. 기본값은 모두 선택되어있습니다
|
||||
|
||||
## 일괄 쉬프트
|
||||
## 일괄 교대
|
||||
|
||||
- 게임 내 프리셋 팀 설정 후 MAA가 자동으로 순환합니다.
|
||||
|
||||
## 커스텀 기반시설
|
||||
|
||||
- Yituliu의 [기반시설 JSON 생성기](https://ark.yituliu.cn/tools/schedule)를 참고해서 작성하세요. [기반시설 프로토콜 문서](../../protocol/base-scheduling-schema.md)도 참조할 수 있습니다.
|
||||
- MAA 폴더의 `/resource/custom_infrast/`에는 이론적 최대 효율의 작업 몇 개가 내장되어 있습니다. 오퍼레이터 인원 수 및 육성의 요구 사항이 매우 높기 때문에 직접 사용하는 것은 권장하지 않습니다.
|
||||
- Yituliu의 JSON 생성기를 참고해서 작성하세요. [기반시설 JSON 생성기](https://ark.yituliu.cn/tools/schedule), [기반시설 프로토콜 문서](../../protocol/base-scheduling-schema.md)도 참조하세요.
|
||||
|
||||
@@ -3,19 +3,19 @@ order: 7
|
||||
icon: ri:game-fill
|
||||
---
|
||||
|
||||
# 통합전략
|
||||
# 통합 전략
|
||||
|
||||
MAA는 기본적으로 가장 최신의 테마를 선택하며, `통합전략` - `일반 설정`에서 변경할 수 있습니다.
|
||||
MAA는 기본적으로 가장 최신의 테마를 선택하며, `통합 전략` - `일반 설정`에서 변경할 수 있습니다.
|
||||
|
||||
::: warning
|
||||
모든 자동 전투 관련 기능은 다음 전제 조건이 필요합니다. 여기에는 자동 전투와 통합전략이 포함되며 이에 국한되지 않습니다.
|
||||
모든 자동지휘 관련 기능은 다음 전제 조건이 필요합니다. 여기에는 자동지휘와 통합 전략이 포함되며 이에 국한되지 않습니다.
|
||||
|
||||
- 최소 60 프레임의 **안정적인** 게임 프레임률
|
||||
- 터치 모드는 Minitouch 또는 MaaTouch
|
||||
|
||||
:::
|
||||
|
||||
- 게임 내에서 해당 통합전략 테마를 터미널에서 고정(`PIN`)해주세요. 현재 자동 탐색이 가능하지만 장기적인 사용을 보장할 수는 없습니다.
|
||||
- 게임 내에서 해당 통합 전략 테마를 터미널에서 고정(`PIN`)해주세요. 현재 자동 탐색이 가능하지만 장기적인 사용을 보장할 수는 없습니다.
|
||||
- **목표가 아닌 테마**의 탐험을 미리 수동으로 종료하여 목표 테마가 현재 탐험을 시작할 수 있는지 확인하세요.
|
||||
- 설정에서 테마, 난이도, 분대, 시작 오퍼레이터(하나의 오퍼레이터만 가능) 등을 선택할 수 있습니다.
|
||||
- MAA는 지원 유닛을 사용하여 시작할 수 있습니다. 먼저 `일반 설정` → `시작 오퍼레이터`에 목표 오퍼레이터 이름을 입력하고, `고급 설정` → `「시작 오퍼레이터」로 지원 유닛 사용`을 활성화하세요.
|
||||
@@ -25,7 +25,7 @@ MAA는 기본적으로 가장 최신의 테마를 선택하며, `통합전략` -
|
||||
|
||||
## 추천 시작법
|
||||
|
||||
::: details _최종 업데이트: 2025/8/30_
|
||||
::: details _최종 업데이트: 2026/01/03_
|
||||
|
||||
| 테마 | 난이도 | 분대 | 직업군 | 오퍼레이터 |
|
||||
| ------ | ----------------- | --------------------------------- | -------- | ---------- |
|
||||
@@ -49,9 +49,9 @@ MAA는 기본적으로 가장 최신의 테마를 선택하며, `통합전략` -
|
||||
|
||||
## 전투 전략
|
||||
|
||||
자동 전투 중의 모든 작업은 미리 설정된 전략이며, 모든 스테이지 전투는 내장된 작업 파일을 호출합니다. 해당 스테이지의 작업이 존재하지 않을 경우, 그다지 똑똑하지 않은 일반 결정 로직이 전투에 사용됩니다.
|
||||
자동지휘 중의 모든 작업은 미리 설정된 전략이며, 모든 스테이지 전투는 내장된 작업 파일을 호출합니다. 해당 스테이지의 작업이 존재하지 않을 경우, 그다지 똑똑하지 않은 일반 결정 로직이 전투에 사용됩니다.
|
||||
|
||||
자세한 내용은 [통합전략 스키마](../../protocol/integrated-strategy-schema.md)를 참고하세요.
|
||||
자세한 내용은 [통합 전략 프로토콜](../../protocol/integrated-strategy-schema.md)을 참고하세요.
|
||||
|
||||
- 오퍼레이터와 숙련도를 자동으로 인식하고 더 나은 오퍼레이터와 스킬을 자동으로 선택합니다.
|
||||
- 상점 아이템을 식별하고 더 좋은 수집품을 우선적으로 구매합니다.
|
||||
@@ -60,6 +60,6 @@ MAA는 기본적으로 가장 최신의 테마를 선택하며, `통합전략` -
|
||||
|
||||
- 작업에 문제가 발생하면 현재 탐색을 자동으로 포기하고 재시도합니다.
|
||||
- 전투 시간이 5분을 초과하면 모든 지상 유닛이 자동으로 철수하며, 6분을 초과하면 현재 전투를 자동으로 포기하여 시간 낭비를 방지합니다.
|
||||
- 간헐적인 연결 끊김이나 업데이트 후에 자동으로 재연결하고 작업을 계속하려면 '시작 웨이크업 작업'을 활성화하고 해당 시간에 강제 예약 시작을 설정하세요.
|
||||
- 간헐적인 연결 끊김이나 업데이트 후에 자동으로 재연결하고 작업을 계속하려면 '로그인 작업'을 활성화하고 해당 시간에 강제 예약 시작을 설정하세요.
|
||||
|
||||
동일한 위치에서 여러 번 멈추는 경우, 로그와 스크린샷을 첨부하여 Issue를 제출해 주세요.
|
||||
동일한 위치에서 여러 번 멈추는 경우, 로그와 `debug/Roguelike` 폴더의 스크린샷을 첨부하여 Issue를 제출해 주세요.
|
||||
|
||||
@@ -3,19 +3,19 @@ order: 8
|
||||
icon: solar:streets-map-point-linear
|
||||
---
|
||||
|
||||
# 생존연산
|
||||
# 생존 연산
|
||||
|
||||
현재 생존연산 기능은 초기 단계이며, 현재 단계에서는 안정성을 보장할 수 없습니다.
|
||||
현재 생존 연산 기능은 초기 단계이며, 현재 단계에서는 안정성을 보장할 수 없습니다.
|
||||
|
||||
## 기본 모드
|
||||
|
||||
1. 생존연산 메인화면에서 시작해야합니다
|
||||
1. 생존 연산 메인화면에서 시작해야합니다
|
||||
2. 기존 데이터(진행사항)가 있으면 사용할 수 없습니다.
|
||||
3. 생존연산의 편성창에 오퍼레이터가 있으면 안됩니다.
|
||||
3. 생존 연산의 편성창에 오퍼레이터가 있으면 안됩니다.
|
||||
|
||||
## 도구 제조 모드
|
||||
|
||||
1. 생존연산 주둔지가 보이는 화면에서 시작해야합니다.
|
||||
1. 생존 연산 주둔지가 보이는 화면에서 시작해야합니다.
|
||||
2. 제작할 도구 이름 미작성시, 기본적으로 형광봉을 만듭니다.
|
||||
3. 결산 후 첫 번째 날이어야 하며, 이 후 3일 이내에 적의 침입이 없어야 합니다.
|
||||
4. 제조 가능한 수량이 99의 배수일 경우 멈출 수 있습니다. 저장하기 전에 재료를 약간 사용한 후에 다시 시도하세요.
|
||||
|
||||
@@ -5,11 +5,11 @@ icon: fluent:people-24-filled
|
||||
|
||||
# 공개모집
|
||||
|
||||
공개모집과 툴박스의 [공개모집 태그 인식](./tools.md#recruitment-recognition)과는 다른 기능입니다!!
|
||||
공개모집과 툴박스의 [공개모집 태그 인식](./tools.md#공개모집-태그-인식)과는 다른 기능입니다!!
|
||||
|
||||
## 자동 공개모집
|
||||
|
||||
공개모집은 `즉시 완료 허가증`을 사용하여 자동으로 연속적으로 모집합니다. Please `공개모집` - `일반 설정`으로 이동하여 자동으로 `즉시 완료 허가증을 자동 사용`을 선택하고 실행 시 최대 모집 횟수를 수정하세요.
|
||||
`즉시 완료 허가증` 자동 사용을 지원하며, 1회 실행 시 `최대 모집 횟수`를 설정할 수 있습니다. `즉시 완료 허가증 자동 사용`과 연계하여 모집권을 한 번에 모두 소모할 수도 있습니다.
|
||||
|
||||
1★, 5★, 6★이 나오면 알림이 표시됩니다.
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ order: 6
|
||||
icon: lucide:gift
|
||||
---
|
||||
|
||||
# 임무
|
||||
# 보상 수령
|
||||
|
||||
매일 보상과 매주 보상을 자동으로 수령합니다.
|
||||
|
||||
|
||||
@@ -7,11 +7,11 @@ icon: ic:round-rocket-launch
|
||||
|
||||
자동으로 에뮬레이터를 시작하고, 클라이언트를 자동으로 시작하며, 게임에 자동으로 로그인합니다.
|
||||
|
||||
자동으로 에뮬레이터를 시작하려면 별도의 설정이 필요합니다. 자세한 내용은 TODO를 참조하세요.
|
||||
자동으로 에뮬레이터를 시작하려면 별도의 설정이 필요합니다. 자세한 내용은 `설정` - `시작 설정`을 참조하세요.
|
||||
|
||||
## 계정 전환
|
||||
|
||||
**글로벌 서버는 해당이 안됩니다. (CN만 가능)**
|
||||
**글로벌 서버는 지원하지 않습니다. (CN만 가능)**
|
||||
|
||||
이 기능은 설정 전환 또는 정기 실행과 함께 사용해야 하며, `로그인` 작업이 실행될 때마다 계정 전환 작업이 수행됩니다.
|
||||
|
||||
@@ -21,6 +21,6 @@ icon: ic:round-rocket-launch
|
||||
|
||||
## 연결 설정
|
||||
|
||||
[여기로!](../connection.md)
|
||||
[연결 설정](../connection.md)
|
||||
|
||||
<!-- markdownlint-disable-file MD036 -->
|
||||
|
||||
@@ -21,27 +21,25 @@ icon: octicon:tools-16
|
||||
|
||||
현재 [펭귄 물류](https://penguin-stats.cn/planner), [Arknights Toolbox](https://arkntools.app/#/material), [Arknights | Planner](https://ark-nights.com/settings)로 내보내기 기능을 지원합니다.
|
||||
|
||||
JSON 스키마와 통합을 희망하는 경우 언제든지 문의해주세요.
|
||||
JSON 프로토콜과 통합을 희망하는 경우 언제든지 문의해주세요.
|
||||
|
||||
앞으로 더 유용한 기능이 추가될 **가능성**이 있습니다.
|
||||
|
||||
## 영상 인식 (Alpha)
|
||||
|
||||
전술 비디오를 인식하고 자동으로 Copilot 파일을 생성할 수 있습니다. 비디오 파일을 Copilot 탭 페이지로 끌어다 놓으면 시작됩니다.
|
||||
전술 비디오를 인식하고 자동으로 자동지휘 파일을 생성할 수 있습니다. 비디오 파일을 자동지휘 탭 페이지로 끌어다 놓으면 시작됩니다.
|
||||
|
||||
가로세로 비율이 16:9 이고 720p 이상의 해상도를 갖는 비디오만 지원됩니다. 비디오 내용에는 검은 테두리, 왜곡 보정, 에뮬레이터 테두리 또는 기타 요소가 없어야 합니다.
|
||||
|
||||
## 헤드헌팅 (가챠)
|
||||
|
||||
::: warning
|
||||
진짜로 가챠를 진행합니다.
|
||||
::: center
|
||||
**당신의 계정으로 오퍼레이터를 뽑았어!  당신의 계정으로 오퍼레이터를 뽑았어!  당신의 계정으로 오퍼레이터를 뽑았어!**  
|
||||
**당신의 계정으로 오퍼레이터를 뽑았어!  당신의 계정으로 오퍼레이터를 뽑았어!  당신의 계정으로 오퍼레이터를 뽑았어!**  
|
||||
**당신의 계정으로 오퍼레이터를 뽑았어!  당신의 계정으로 오퍼레이터를 뽑았어!  당신의 계정으로 오퍼레이터를 뽑았어!**  
|
||||
:::
|
||||
|
||||
**당신의 계정으로 오퍼레이터를 뽑았어! 당신의 계정으로 오퍼레이터를 뽑았어!**
|
||||
**당신의 계정으로 오퍼레이터를 뽑았어! 당신의 계정으로 오퍼레이터를 뽑았어!**
|
||||
**당신의 계정으로 오퍼레이터를 뽑았어! 당신의 계정으로 오퍼레이터를 뽑았어!**
|
||||
|
||||
니우니우 항공을 탈 기회를 놓쳤나요? 걱정 마세요! 이제 모두가 자신의 니우니우 항공을 가지고 있어요! 그리고 헤드헌팅 과정 중에는 스크린샷이 찍혀서 자동적으로 인터페이스 중앙에 표시될 거에요!
|
||||
[니우니우 항공](https://www.bilibili.com/opus/926129394412421126)을 탈 기회를 놓쳤나요? 걱정 마세요! 이제 모두가 자신의 니우니우 항공을 가지고 있어요! 그리고 헤드헌팅 과정 중에는 스크린샷이 찍혀서 자동적으로 인터페이스 중앙에 표시될 거에요!
|
||||
|
||||
## 모니터링
|
||||
|
||||
|
||||
@@ -9,11 +9,13 @@ icon: ri:guide-fill
|
||||
|
||||
## 사전 준비
|
||||
|
||||
:::: steps
|
||||
|
||||
1. 시스템 버전 확인
|
||||
|
||||
MAA 는 Windows 10/11만 지원합니다. 이전 버전의 Windows를 사용하는 경우 [FAQ](./faq.md#가능성2:런타임문제)를 참조하세요.
|
||||
MAA 는 Windows 10/11만 지원합니다. 이전 버전의 Windows를 사용하는 경우 [FAQ](./faq.md#런타임-문제)를 참조하세요.
|
||||
|
||||
Windows 사용자가 아닌 경우 [에뮬레이터 및 장치 지원](./device/)을 참조하십시오.
|
||||
Windows 사용자가 아닌 경우 [에뮬레이터 및 장치 지원](./device/)을 참조하세요.
|
||||
|
||||
2. 알맞는 버전 다운로드
|
||||
|
||||
@@ -27,7 +29,7 @@ icon: ri:guide-fill
|
||||
|
||||
MAA는 VCRedist x64 및 .NET 10이 필요합니다. MAA 디렉토리의 `DependencySetup_依赖库安装.bat`를 실행하여 설치하세요.
|
||||
|
||||
자세한 정보는 [FAQ](./faq.md#가능성-2-런타임-문제)를 참조하세요.
|
||||
자세한 정보는 [FAQ](./faq.md#런타임-문제)를 참조하세요.
|
||||
|
||||
5. 에뮬레이터 지원 확인
|
||||
|
||||
@@ -37,6 +39,8 @@ icon: ri:guide-fill
|
||||
|
||||
에뮬레이터 해상도는 가로 모드에서 `1280x720` 또는 `1920x1080`이어야 합니다. YosterEN 플레이어의 경우 `1920x1080`이어야 합니다.
|
||||
|
||||
::::
|
||||
|
||||
## 초기 설정
|
||||
|
||||
0. 자동 감지 기능을 사용하려면, 하나의 에뮬레이터만 설치되어 있고 멀티 인스턴스 기능을 사용하지 않아야 합니다.
|
||||
|
||||
@@ -3,33 +3,34 @@ order: 6
|
||||
icon: material-symbols:view-quilt-rounded
|
||||
---
|
||||
|
||||
# 기반시설 스키마
|
||||
# 기반시설 스케줄링 프로토콜
|
||||
|
||||
`resource/custom_infrast/*.json` 파일들의 사용법과 각 필드에 대한 설명입니다.
|
||||
`resource/custom_infrast/*.json` 파일의 사용법 및 각 필드 설명
|
||||
|
||||
::: tip
|
||||
주의: JSON 형식은 주석을 지원하지 않으므로 아래의 예시에서 주석은 제거해주시기 바랍니다.
|
||||
JSON 파일은 주석을 지원하지 않으므로, 텍스트 내의 주석은 예시용입니다. 직접 복사하여 사용하지 마세요.
|
||||
:::
|
||||
|
||||
[기반시설 시각적 표 제작도구(yituliu)](https://ark.yituliu.cn/tools/schedule)
|
||||
[기반시설 스케줄링 생성 도구](https://ark.yituliu.cn/tools/schedule)
|
||||
|
||||
## 완전한 필드 목록
|
||||
## 전체 필드 목록
|
||||
|
||||
```json
|
||||
{
|
||||
"title": "小号的换班方案", // 구성 제목, 선택 사항
|
||||
"description": "哈哈哈哈", // 구성 설명, 선택 사항
|
||||
"title": "小号的换班方案", // 작업명, 선택 사항
|
||||
"description": "哈哈哈哈", // 작업 설명, 선택 사항
|
||||
"plans": [
|
||||
{
|
||||
"name": "早班", // 계획 이름, 선택 사항, 2~4교대로 돌릴 때의 각 파트별 구성이 헷갈리지 않도록 해줍니다.
|
||||
"description": "lol", // 계획 설명, 선택 사항
|
||||
"description_post": "", // 계획 실행 후에 표시할 설명, 선택 사항
|
||||
"period": [ // 교대 기간, 선택 사항
|
||||
// 현재 시간이 이 범위 안에 있는 경우, 계획은 자동으로 선택됩니다 (전체 JSON 파일에 여러 계획이 있을 수 있음)
|
||||
// 이 필드가 없으면 각 실행 후 자동으로 다음 계획으로 전환됩니다.
|
||||
// Core에서 이 필드를 처리하지 않습니다. MAA와 인터페이스 통합을 사용하는 경우, 이 논리를 직접 구현하세요.
|
||||
"name": "早班", // 계획명, 선택 사항
|
||||
"description": "lol", // 계획 설명, 선택 사항
|
||||
"description_post": "", // 계획 실행 완료 후 표시되는 설명, 선택 사항
|
||||
"period": [
|
||||
// 교대 시간대, 선택 사항
|
||||
// 현재 시간이 이 구간 내에 있으면 해당 계획을 자동으로 선택합니다 (전체 json 파일에 여러 계획이 포함될 수 있음)
|
||||
// 이 필드가 없으면 매번 교대가 끝난 후 자동으로 다음 계획으로 전환됩니다
|
||||
// core는 이 필드를 처리하지 않으므로, 인터페이스를 사용하여 maa를 통합하는 경우 이 로직을 직접 구현하세요
|
||||
[
|
||||
"22:00", // hh:mm 형식으로 표시되며 현재는 단순 숫자 비교만 사용됩니다. 자정을 넘어가는 경우 이 파일의 예시를 참조하세요.
|
||||
"22:00", // hh:mm 형식 요구, 현재는 단순히 숫자 크기만 비교합니다. 날짜를 넘기는 경우 이 예시처럼 작성하세요
|
||||
"23:59"
|
||||
],
|
||||
[
|
||||
@@ -37,21 +38,23 @@ icon: material-symbols:view-quilt-rounded
|
||||
"06:00"
|
||||
]
|
||||
],
|
||||
"duration": 360, // 근무 기간 (분 단위), 예약 필드로 현재는 사용되지 않습니다. 나중에 시간이 되면 알림이나 자동 교대 기능이 추가될 수 있습니다.
|
||||
"Fiammetta": { // "Fiammetta"를 사용하는 오퍼레이터, 선택 사항. 사용하지 않는 경우 필요하지 않습니다.
|
||||
"enable": true, // "Fiammetta"를 사용할지 여부, 선택 사항. 기본값은 true입니다.
|
||||
"target": "巫恋", // 대상 오퍼레이터, 이는 OCR을 통해 얻어지며, 해당 클라이언트 언어에서 오퍼레이터 이름을 전달해야 합니다.
|
||||
"order": "pre", // 전체 교대 전에 사용할지 후에 사용할지 여부, 선택 사항. 값 범위는 "pre" / "post"입니다. 기본값은 "pre"입니다.
|
||||
"duration": 360, // 작업 지속 시간(분), 예약된 필드로 현재는 효과가 없습니다. 나중에 시간이 되면 교대 알림을 띄우거나 자동으로 교대할 수 있습니다
|
||||
"Fiammetta": {
|
||||
// "피아메타"를 어느 오퍼레이터에게 사용할지, 선택 사항, 비워두면 사용하지 않음
|
||||
"enable": true, // "피아메타" 사용 여부, 선택 사항, 기본값 true
|
||||
"target": "巫恋", // 목표 오퍼레이터, OCR을 사용하지만 OcrReplace를 지원하기에, 중문명으로 작성해야 함
|
||||
"order": "pre" // 전체 교대 전에 사용할지, 교대 후에 사용할지, 선택 사항, 값 범위 "pre" / "post", 기본값 "pre"
|
||||
},
|
||||
"drones": { // 드론 사용에 대한 정보입니다. 선택 사항이며, 지정하지 않으면 드론은 사용되지 않습니다.
|
||||
"enable": true, // 드론을 사용할지 여부. 선택 사항입니다. 기본값은 true입니다.
|
||||
"room": "trading", // 어떤 유형의 방에 드론을 사용할지를 지정합니다. 가능한 값으로는 "trading(무역소)" / "manufacture(제조소)"가 있습니다.
|
||||
"index": 1, // 드론을 사용할 방의 인덱스입니다. 왼쪽의 탭과 대응됩니다. 가능한 값으로는 [1 ~ 5]가 있습니다.
|
||||
"rule": "all", // 사용 규칙입니다. 예약 필드로 현재는 사용되지 않지만 플러그인 등의 작업 지원을 위해 나중에 사용될 수 있습니다.
|
||||
"order": "pre" // 오퍼레이터 교대 전에 드론을 사용할지 후에 사용할지 여부입니다. 선택 사항입니다. 가능한 값으로는 "pre" / "post"가 있습니다. 기본값은 "pre"입니다.
|
||||
"drones": {
|
||||
// 드론 사용, 선택 사항, 비워두면 드론을 사용하지 않음
|
||||
"enable": true, // 드론 사용 여부, 선택 사항, 기본값 true
|
||||
"room": "trading", // 어느 유형의 시설에 사용할지, 값 범위 "trading" / "manufacture"
|
||||
"index": 1, // 몇 번째 해당 유형의 시설에 사용할지, 왼쪽 탭 순서에 대응, 값 범위 [1, 5]
|
||||
"rule": "all", // 사용 규칙, 예약된 필드로 현재는 효과가 없습니다. 나중에 플러그인 등 조작을 지원하는 데 사용할 수 있습니다
|
||||
"order": "pre" // 오퍼레이터 교대 전에 사용할지, 교대 후에 사용할지, 선택 사항, 값 범위 "pre" / "post", 기본값 "pre"
|
||||
},
|
||||
"groups": [
|
||||
// "control" / "manufacture" / "trading"에 대해 오퍼레이터 그룹을 설정할 수 있습니다.
|
||||
// "control" / "manufacture" / "trading"에 대해 오퍼레이터 편성을 설정할 수 있음
|
||||
{
|
||||
"name": "古+银",
|
||||
"operators": ["古米", "银灰", "梅"]
|
||||
@@ -62,74 +65,71 @@ icon: material-symbols:view-quilt-rounded
|
||||
}
|
||||
],
|
||||
"rooms": {
|
||||
// 방 정보입니다. 필수 항목입니다.
|
||||
// 가능한 값으로는 "control(제어 센터)" / "manufacture(제조소)" / "trading(무역소)" / "power(발전소)" / "meeting(응접실)" / "hire(사무소)" / "dormitory()"가 있습니다.
|
||||
// 방이 지정되지 않은 경우 기본 알고리즘으로 오퍼레이터 교대를 수행합니다.
|
||||
// 특정 방에서 오퍼레이터 교대를 하지 않으려면 "skip" 필드를 사용하거나 소프트웨어의 인프라 설정에서 해당 시설을 선택 해제하세요.
|
||||
// 시설 정보, 필수
|
||||
// 값 범위 "control" / "manufacture" / "trading" / "power" / "meeting" / "hire" / "dormitory" / "processing"
|
||||
// 하나라도 빠지면 해당 시설은 기본 알고리즘을 사용하여 교대합니다.
|
||||
// 특정 시설의 교대를 원하지 않으면 skip 필드를 사용하거나, 소프트웨어 '임무 설정 - 기반시설 교대 - 일반 설정'에서 해당 시설의 체크를 해제하세요
|
||||
"control": [
|
||||
{
|
||||
"operators": [ // 이 방에 할당된 오퍼레이터들입니다. OCR을 통해 식별되며 해당 클라이언트 언어로 오퍼레이터 이름을 전달해야 합니다.
|
||||
"夕",
|
||||
"令",
|
||||
"凯尔希",
|
||||
"阿米娅",
|
||||
"玛恩纳"
|
||||
]
|
||||
}
|
||||
{
|
||||
"operators": [
|
||||
"夕", // OCR을 사용하지만 OcrReplace를 지원하기에, 중문명으로 작성해야 함
|
||||
"令",
|
||||
"凯尔希",
|
||||
"阿米娅",
|
||||
"玛恩纳"
|
||||
]
|
||||
}
|
||||
],
|
||||
"manufacture": [
|
||||
{
|
||||
"operators": ["芬", "稀音", "克洛丝"],
|
||||
"sort": false, // 오퍼레이터들을 위의 순서에 따라 정렬할지 여부입니다. 선택 사항입니다. 기본값은 false입니다.
|
||||
// 예를 들어 "稀音", "帕拉斯", "巫恋"(씬, 팔라스, 샤마르)와 같은 오퍼레이터를 사용하는 경우
|
||||
// "sort": false로 설정하면 순서가 뒤바뀔 수 있으며, 특히 시간이 지남에 따라 효율이 상승하는 오퍼레이터의 효과가 초기화되어 손실로 이어질 수 있습니다.
|
||||
// "sort": true를 사용하면 이러한 문제를 피할 수 있습니다.
|
||||
},
|
||||
{
|
||||
"skip": true // 이 방을 건너뛸지 여부를 나타냅니다 (배열 인덱스에 해당). 선택 사항입니다. 기본값은 false입니다.
|
||||
// true로 설정하면 다른 모든 필드를 비워둘 수 있습니다. 오퍼레이터 변경만 건너뛰게 됩니다. 드론 사용 및 단서 교환과 같은 다른 작업은 계속 진행됩니다.
|
||||
},
|
||||
{
|
||||
"operators": ["Castle-3"],
|
||||
"autofill": true, // 원래 알고리즘을 사용하여 나머지 위치를 자동으로 채울지 여부를 나타냅니다. 선택 사항입니다. 기본값은 false입니다.
|
||||
// 오퍼레이터 배열이 비어있는 경우 방 전체의 스케줄링은 원래 알고리즘을 기반으로 합니다.
|
||||
// 오퍼레이터 배열이 비어 있지 않은 경우 개별 오퍼레이터의 효율성만 고려되며 전체 조합의 효율성은 고려되지 않습니다.
|
||||
// 이후에 정의된 사용자 정의 오퍼레이터들과 충돌할 수 있으므로 주의해야 합니다. 예를 들어, 이후에 필요한 오퍼레이터들이 여기서 사용되는 경우에는 주의해서 사용하거나, 자동채우기를 하는 방의 순서를 뒤로 미루세요.
|
||||
"product": "Battle Record" // 현재 제조되는 제품, 선택 사항.
|
||||
// 시설에서 인식된 제품이 작업에 설정된 제품과 일치하지 않으면 인터페이스에 빨간색 경고 메시지가 표시됩니다. 미래에 추가 기능이 추가될 수 있습니다.
|
||||
// 가능한 값으로는 "Battle Record()" | "Pure Gold(순금)" | "Dualchip(듀얼 칩)" | "Originium Shard(오리지늄 조각)" | "LMD(용문폐)" | "Orundum()"가 있습니다.
|
||||
},
|
||||
{
|
||||
"operators": [
|
||||
"多萝西"
|
||||
],
|
||||
"candidates": [
|
||||
// 선택적 후보 오퍼레이터입니다. 모든 위치가 채워질 때까지 목록에 있는 오퍼레이터들을 사용합니다.
|
||||
// autofill=true와 호환되지 않습니다. 이 배열이 비어 있지 않은 경우 autofill을 false로 설정하세요.
|
||||
"星源",
|
||||
"白面鸮",
|
||||
"赫默"
|
||||
]
|
||||
},
|
||||
{
|
||||
"use_operator_groups": true, // groups에 있는 오퍼레이터 그룹을 사용하려면 true로 설정, 기본값은 false
|
||||
"operators": [
|
||||
// 활성화되면, operators에 있는 이름이 그룹 이름으로 해석됩니다.
|
||||
"古+银", // 컨디션 임계값 및 설정 순서에 따라 그룹 선택
|
||||
"清流" // 만약 古+银 그룹의 오퍼레이터 컨디션이 임계값 이하인 경우 清流 그룹 사용
|
||||
]
|
||||
}
|
||||
{
|
||||
"operators": ["芬", "稀音", "克洛丝"],
|
||||
"sort": false // 정렬 여부 (위의 operators 순서대로), 선택 사항, 기본값 false
|
||||
// 예: 씬, 팔라스, 샤마르 등의 오퍼레이터를 사용하고 "sort": false인 경우, 오퍼레이터 순서가 섞여 예열 효과가 손실될 수 있습니다.
|
||||
// "sort": true를 사용하면 이 문제를 피할 수 있습니다
|
||||
},
|
||||
{
|
||||
"skip": true // 현재 시설을 건너뛸지 여부 (배열 순서 대응), 선택 사항, 기본값 false
|
||||
// true일 경우, 다른 필드는 모두 비워둘 수 있습니다. 오퍼레이터 교대 작업만 건너뛰며, 드론 사용이나 단서 교환 등은 정상적으로 진행됩니다
|
||||
},
|
||||
{
|
||||
"operators": ["Castle-3"],
|
||||
"autofill": true, // 기존 알고리즘을 사용하여 남은 위치를 자동으로 채움, 선택 사항, 기본값 false
|
||||
// operators가 비어 있으면, 해당 시설은 완전히 기존 알고리즘을 사용하여 스케줄링합니다
|
||||
// operators가 비어 있지 않으면, 단일 오퍼레이터 효율만 고려하며 전체 조합 효율은 고려하지 않습니다
|
||||
// 뒤에 정의된 사용자 오퍼레이터와 충돌할 수 있으니 주의하세요. 예를 들어 뒤에 필요한 오퍼레이터를 여기서 가져다 쓸 수 있으므로 신중하게 사용하거나, autofill 시설 순서를 마지막으로 배치하세요
|
||||
"product": "Battle Record" // 현재 제조 생산품, 선택 사항.
|
||||
// 현재 시설과 작업에 설정된 생산품이 일치하지 않는 것으로 식별되면, 인터페이스에 빨간 글씨로 힌트가 뜹니다. 나중에 더 많은 기능이 생길 수 있습니다
|
||||
// 값 범위: "Battle Record" | "Pure Gold" | "Dualchip" | "Originium Shard" | "LMD" | "Orundum"
|
||||
},
|
||||
{
|
||||
"operators": ["多萝西"],
|
||||
"candidates": [
|
||||
// 후보 오퍼레이터, 선택 사항. 여기에 있는 오퍼레이터 중 있는 것을 사용하며 꽉 찰 때까지 선택합니다
|
||||
// autofill=true와 호환되지 않습니다. 즉 이 배열이 비어 있지 않으면 autofill은 false여야 합니다
|
||||
"星源",
|
||||
"白面鸮",
|
||||
"赫默"
|
||||
]
|
||||
},
|
||||
{
|
||||
"use_operator_groups": true, // true로 설정하여 groups의 오퍼레이터 편성을 사용, 기본값 false
|
||||
"operators": [
|
||||
// 활성화 시, operators의 이름은 편성명으로 해석됨
|
||||
"古+银", // 컨디션 임계값 및 설정 순서에 따라 편성 선택
|
||||
"清流" // 만약 古+银 그룹에 컨디션이 임계값보다 낮은 오퍼레이터가 있다면 清流 그룹 사용
|
||||
]
|
||||
}
|
||||
],
|
||||
"meeting": [
|
||||
{
|
||||
"autofill": true // 방 전체에 autofill을 사용합니다.
|
||||
"autofill": true // 이 시설 전체 autofill
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "晚班"
|
||||
// ...
|
||||
"name": "晚班"
|
||||
// ...
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -137,6 +137,6 @@ icon: material-symbols:view-quilt-rounded
|
||||
|
||||
## 예시
|
||||
|
||||
[243_layout_3_times_a_day](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/resource/custom_infrast/243_layout_3_times_a_day.json) 243 3교대
|
||||
[243 극한 효율, 하루 3회 교대](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/resource/custom_infrast/243_layout_3_times_a_day.json)
|
||||
|
||||
[153_layout_3_times_a_day](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/resource/custom_infrast/153_layout_3_times_a_day.json) 153 3교대
|
||||
[153 극한 효율, 하루 3회 교대](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/resource/custom_infrast/153_layout_3_times_a_day.json)
|
||||
|
||||
@@ -3,635 +3,515 @@ order: 2
|
||||
icon: material-symbols:u-turn-left
|
||||
---
|
||||
|
||||
# 콜백 메세지 프로토콜
|
||||
# 콜백 메시지 프로토콜
|
||||
|
||||
::: info 정보
|
||||
콜백 메시지는 버전 업데이트를 통해 빠르게 변경되고 있으며 이 문서는 오래된 것일 수 있습니다. 최신 콘텐츠는 [C# 통합 소스 코드](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/dev/src/MaaWpfGui/Main/AsstProxy.cs)를 참조하세요.
|
||||
:::
|
||||
|
||||
## 프로토타입
|
||||
## 콜백 함수 프로토타입
|
||||
|
||||
```cpp
|
||||
typedef void(ASST_CALL* AsstCallback)(int msg, const char* details, void* custom_arg);
|
||||
```
|
||||
|
||||
## 개요
|
||||
## 파라미터 개요
|
||||
|
||||
- `int msg`
|
||||
메시지 유형입니다.
|
||||
메시지 유형
|
||||
|
||||
```cpp
|
||||
enum class AsstMsg
|
||||
{
|
||||
/* 전역 정보 */
|
||||
InternalError = 0, // 내부 오류
|
||||
InitFailed, // 초기화 실패
|
||||
ConnectionInfo, // 연결 정보
|
||||
AllTasksCompleted, // 모든 태스크가 완료되었는지 여부
|
||||
AsyncCallInfo, // 비동기 호출 정보
|
||||
/* TaskChain 정보 */
|
||||
TaskChainError = 10000, // 태스크 체인 실행/인식 오류
|
||||
TaskChainStart, // 태스크 체인 시작
|
||||
TaskChainCompleted, // 태스크 체인 완료
|
||||
TaskChainExtraInfo, // 태스크 체인에 대한 추가 정보
|
||||
TaskChainStopped, // 태스크 체인 중지
|
||||
/* SubTask 정보 */
|
||||
SubTaskError = 20000, // 서브태스크 실행/인식 오류
|
||||
SubTaskStart, // 서브태스크 시작
|
||||
SubTaskCompleted, // 서브태스크 완료
|
||||
SubTaskExtraInfo, // 서브태스크에 대한 추가 정보
|
||||
SubTaskStopped, // 서브태스크 중지
|
||||
/* Global Info */
|
||||
InternalError = 0, // 내부 오류
|
||||
InitFailed = 1, // 초기화 실패
|
||||
ConnectionInfo = 2, // 연결 정보
|
||||
AllTasksCompleted = 3, // 모든 작업 완료
|
||||
AsyncCallInfo = 4, // 비동기 호출 정보
|
||||
Destroyed = 5, // 인스턴스 소멸됨
|
||||
|
||||
/* TaskChain Info */
|
||||
TaskChainError = 10000, // 작업 체인 실행/인식 오류
|
||||
TaskChainStart = 10001, // 작업 체인 시작
|
||||
TaskChainCompleted = 10002, // 작업 체인 완료
|
||||
TaskChainExtraInfo = 10003, // 작업 체인 추가 정보
|
||||
TaskChainStopped = 10004, // 작업 체인 수동 중지
|
||||
|
||||
/* SubTask Info */
|
||||
SubTaskError = 20000, // 서브 작업 실행/인식 오류
|
||||
SubTaskStart = 20001, // 서브 작업 시작
|
||||
SubTaskCompleted = 20002, // 서브 작업 완료
|
||||
SubTaskExtraInfo = 20003, // 서브 작업 추가 정보
|
||||
SubTaskStopped = 20004, // 서브 작업 수동 중지
|
||||
|
||||
/* Web Request */
|
||||
ReportRequest = 30000, // 보고 요청
|
||||
ReportRequest = 30000, // 보고 요청
|
||||
};
|
||||
```
|
||||
|
||||
- `const char* details`
|
||||
메시지 세부사항, JSON 형식입니다. 또한 [필드 설명](#필드-설명)도 참조하세요.
|
||||
메시지 세부사항, JSON 문자열, [필드 설명](#필드-설명) 참조
|
||||
- `void* custom_arg`
|
||||
호출자의 사용자 정의 인수로, `AsstCreateEx` 인터페이스의 `custom_arg` 인수를 전달합니다. C 언어 기반 언어에서는 이를 통해 `this` 포인터를 전달할 수 있습니다.
|
||||
호출자의 사용자 정의 인수로, `AsstCreateEx` 인터페이스의 `custom_arg` 인수가 그대로 전달됩니다. C 계열 언어에서는 이를 통해 `this` 포인터를 전달할 수 있습니다.
|
||||
|
||||
## 필드 설명
|
||||
|
||||
### InternalError
|
||||
|
||||
할일
|
||||
`details` 필드는 비어 있습니다.
|
||||
|
||||
### InitFailed
|
||||
|
||||
```json
|
||||
{
|
||||
"what": string, // 오류 유형
|
||||
"why": string, // 오류 원인
|
||||
"details": object // 오류 세부사항
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="what" type="string" required
|
||||
오류 유형
|
||||
:::
|
||||
::: field name="why" type="string" required
|
||||
오류 원인
|
||||
:::
|
||||
::: field name="details" type="object" required
|
||||
오류 상세
|
||||
:::
|
||||
::::
|
||||
|
||||
### ConnectionInfo
|
||||
|
||||
```json
|
||||
{
|
||||
"what": string, // 정보 유형
|
||||
"why": string, // 정보 원인
|
||||
"uuid": string, // UUID (연결 실패 시 빈 문자열)
|
||||
"details": {
|
||||
"adb": string, // AsstConnect 인터페이스의 adb_path 인수
|
||||
"address": string, // AsstConnect 인터페이스의 address 인수
|
||||
"config": string // AsstConnect 인터페이스의 config 인수
|
||||
}
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="what" type="string" required
|
||||
정보 유형
|
||||
:::
|
||||
::: field name="why" type="string" required
|
||||
정보 원인
|
||||
:::
|
||||
::: field name="uuid" type="string"
|
||||
장치 고유 코드(UUID) (연결 실패 시 비어 있음)
|
||||
:::
|
||||
::: field name="details" type="object" required
|
||||
연결 상세 정보. 구조는 다음과 같습니다:
|
||||
|
||||
### 자주 사용되는 `what` 필드 값
|
||||
- `adb` (string, required): `AsstConnect` 인터페이스의 `adb_path` 파라미터.
|
||||
- `address` (string, required): `AsstConnect` 인터페이스의 `address` 파라미터.
|
||||
- `config` (string, required): `AsstConnect` 인터페이스의 `config` 파라미터.
|
||||
|
||||
:::
|
||||
::::
|
||||
|
||||
### 자주 사용되는 `What` 필드
|
||||
|
||||
- `ConnectFailed`
|
||||
연결 실패.
|
||||
연결 실패
|
||||
- `Connected`
|
||||
연결됨. 이제 `uuid` 필드는 비어 있습니다 (다음 단계에서 가져올 것입니다).
|
||||
연결됨, 이때 `uuid` 필드는 비어 있음 (다음 단계에서 획득)
|
||||
- `UuidGot`
|
||||
UUID를 가져왔습니다.
|
||||
장치 고유 코드(UUID) 획득
|
||||
- `UnsupportedResolution`
|
||||
해상도가 지원되지 않습니다.
|
||||
지원하지 않는 해상도
|
||||
- `ResolutionError`
|
||||
해상도를 가져올 수 없습니다.
|
||||
해상도 획득 오류
|
||||
- `Reconnecting`
|
||||
연결이 끊어졌습니다 (adb/에뮬레이터 충돌), 재연결 중
|
||||
연결 끊김 (adb / 에뮬레이터 충돌), 재연결 중
|
||||
- `Reconnected`
|
||||
연결이 끊어졌습니다 (adb/에뮬레이터 충돌), 재연결 성공
|
||||
연결 끊김 (adb / 에뮬레이터 충돌), 재연결 성공
|
||||
- `Disconnect`
|
||||
연결이 끊어졌습니다 (adb/에뮬레이터 충돌), 재연결 실패
|
||||
연결 끊김 (adb / 에뮬레이터 충돌), 재시도 실패
|
||||
- `ScreencapFailed`
|
||||
스크린샷 실패 (adb/에뮬레이터 충돌), 재연결 실패
|
||||
스크린샷 실패 (adb / 에뮬레이터 충돌), 재시도 실패
|
||||
- `TouchModeNotAvailable`
|
||||
터치 모드를 사용할 수 없습니다
|
||||
지원하지 않는 터치 모드
|
||||
|
||||
### AsyncCallInfo
|
||||
|
||||
```json
|
||||
{
|
||||
"uuid": string, // UUID
|
||||
"what": string, // 호출 유형, "Connect" | "Click" | "Screencap" | ...
|
||||
"async_call_id": int, // 비동기 호출 ID, AsstAsyncXXX API를 호출한 결과 값입니다.
|
||||
"details": {
|
||||
"ret": bool, // 결과
|
||||
"cost": int64, // 경과 시간 (밀리초)
|
||||
}
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="uuid" type="string" required
|
||||
장치 고유 코드
|
||||
:::
|
||||
::: field name="what" type="string" required
|
||||
콜백 유형, 예: `Connect` | `Click` | `Screencap` 등
|
||||
:::
|
||||
::: field name="async_call_id" type="number" required
|
||||
비동기 요청 id, 즉 `AsstAsyncXXX` 호출 시 반환값
|
||||
:::
|
||||
::: field name="details" type="object" required
|
||||
비동기 호출 상세. 구조는 다음과 같습니다:
|
||||
|
||||
- `ret` (boolean, required): 실제 호출의 반환값.
|
||||
- `cost` (number, required): 소요 시간, 단위 밀리초.
|
||||
|
||||
:::
|
||||
::::
|
||||
|
||||
### AllTasksCompleted
|
||||
|
||||
```json
|
||||
{
|
||||
"taskchain": string, // 마지막 태스크 체인
|
||||
"uuid": string, // UUID
|
||||
"finished_tasks": [ // 실행된 마지막 태스크의 ID 목록
|
||||
int,
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="taskchain" type="string" required
|
||||
마지막 작업 체인
|
||||
:::
|
||||
::: field name="uuid" type="string" required
|
||||
장치 고유 코드
|
||||
:::
|
||||
::: field name="finished_tasks" type="array<number>" required
|
||||
이미 실행된 작업 id 목록
|
||||
:::
|
||||
::::
|
||||
|
||||
#### 자주 사용되는 `taskchain` 필드 값
|
||||
#### 자주 사용되는 `taskchain` 필드
|
||||
|
||||
- `StartUp`
|
||||
시작.
|
||||
시작 (깨우기)
|
||||
- `CloseDown`
|
||||
게임 클라이언트 닫기
|
||||
게임 종료
|
||||
- `Fight`
|
||||
전투.
|
||||
이성 소모 작전
|
||||
- `Mall`
|
||||
상점.
|
||||
크레딧 상점 및 쇼핑
|
||||
- `Recruit`
|
||||
자동 인원 모집.
|
||||
자동 공개모집
|
||||
- `Infrast`
|
||||
시설.
|
||||
기반시설 교대
|
||||
- `Award`
|
||||
일일 보상 받기
|
||||
일일 보상 수령
|
||||
- `Roguelike`
|
||||
로그라이크.
|
||||
통합 전략 반복
|
||||
- `Copilot`
|
||||
JSON 파일로 자동 전투
|
||||
자동지휘
|
||||
- `SSSCopilot`
|
||||
JSON 파일로 자동 전투 for STATIONARY SECURITY SERVICE
|
||||
보안 파견 자동지휘
|
||||
- `Depot`
|
||||
창고 인식
|
||||
- `OperBox`
|
||||
오퍼레이터 박스 인식
|
||||
오퍼레이터 인식
|
||||
- `Reclamation`
|
||||
Reclamation Algorithm (CN 클라이언트의 새로운 모드)
|
||||
생존 연산
|
||||
- `Custom`
|
||||
사용자 정의 태스크
|
||||
사용자 정의 작업
|
||||
- `SingleStep`
|
||||
단일 단계 태스크
|
||||
단일 단계 작업
|
||||
- `VideoRecognition`
|
||||
Copilot용 비디오 인식
|
||||
비디오 인식 작업
|
||||
- `Debug`
|
||||
디버그.
|
||||
디버그
|
||||
|
||||
### TaskChain과 관련된 정보
|
||||
### TaskChain 관련 메시지
|
||||
|
||||
```json
|
||||
{
|
||||
"taskchain": string, // 현재 Task Chain
|
||||
"taskid": int, // 현재 Task ID
|
||||
"uuid": string // UUID
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="taskchain" type="string" required
|
||||
현재 작업 체인
|
||||
:::
|
||||
::: field name="taskid" type="number" required
|
||||
현재 작업 TaskId
|
||||
:::
|
||||
::: field name="uuid" type="string" required
|
||||
장치 고유 코드
|
||||
:::
|
||||
::::
|
||||
|
||||
### TaskChainExtraInfo
|
||||
|
||||
할 일
|
||||
`details` 필드는 비어 있습니다.
|
||||
|
||||
### SubTask와 관련된 정보
|
||||
### SubTask 관련 메시지
|
||||
|
||||
```json
|
||||
{
|
||||
"subtask": string, // 서브태스크 이름
|
||||
"class": string, // 서브태스크 클래스
|
||||
"taskchain": string, // 현재 Task Chain
|
||||
"taskid": int, // 현재 Task ID
|
||||
"details": object, // 상세 정보
|
||||
"uuid": string // UUID
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="subtask" type="string" required
|
||||
서브 작업명
|
||||
:::
|
||||
::: field name="class" type="string" required
|
||||
서브 작업 심볼명
|
||||
:::
|
||||
::: field name="taskchain" type="string" required
|
||||
현재 작업 체인
|
||||
:::
|
||||
::: field name="taskid" type="number" required
|
||||
현재 작업 TaskId
|
||||
:::
|
||||
::: field name="details" type="object" required
|
||||
상세 정보
|
||||
:::
|
||||
::: field name="uuid" type="string" required
|
||||
장치 고유 코드
|
||||
:::
|
||||
::::
|
||||
|
||||
#### 자주 사용되는 `subtask` 필드 값
|
||||
#### 자주 사용되는 `subtask` 필드
|
||||
|
||||
- `ProcessTask`
|
||||
- `ProcessTask`
|
||||
`details` 필드 내용은 다음과 같습니다:
|
||||
|
||||
```json
|
||||
// 상세 정보에 대한 예시
|
||||
{
|
||||
"task": "StartButton2", // 태스크 이름
|
||||
"action": 512,
|
||||
"exec_times": 1, // 실행 횟수
|
||||
"max_times": 999, // 최대 실행 횟수
|
||||
"algorithm": 0
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="task" type="string" required
|
||||
작업명
|
||||
:::
|
||||
::: field name="action" type="number" required
|
||||
Action ID
|
||||
:::
|
||||
::: field name="exec_times" type="number" required
|
||||
실행된 횟수
|
||||
:::
|
||||
::: field name="max_times" type="number" required
|
||||
최대 실행 횟수
|
||||
:::
|
||||
::: field name="algorithm" type="number" required
|
||||
인식 알고리즘
|
||||
:::
|
||||
::::
|
||||
|
||||
- 기타 할 일
|
||||
- Todo 기타
|
||||
|
||||
##### 자주 사용되는 `task` 필드 값
|
||||
##### 자주 사용되는 `task` 필드
|
||||
|
||||
- `StartButton2`
|
||||
시작 중입니다.
|
||||
작전 시작
|
||||
- `MedicineConfirm`
|
||||
이성 회복제 사용 확인.
|
||||
이성 회복제 사용 확인
|
||||
- `ExpiringMedicineConfirm`
|
||||
만료가 임박한 이성 회복 아이템을 사용 확인.
|
||||
48시간 내 만료되는 이성 회복제 사용 확인
|
||||
- `StoneConfirm`
|
||||
오리지늄 조각 사용 확인.
|
||||
오리지늄 사용 확인
|
||||
- `RecruitRefreshConfirm`
|
||||
공개모집 새로고침 여부 확인.
|
||||
공개모집 태그 갱신 확인
|
||||
- `RecruitConfirm`
|
||||
공개모집 확인.
|
||||
공개모집 채용 확인
|
||||
- `RecruitNowConfirm`
|
||||
즉시 완료 허가증 확인.
|
||||
공개모집 즉시 완료 허가증 사용 확인
|
||||
- `ReportToPenguinStats`
|
||||
펭귄 스텟에 보고합니다.
|
||||
펭귄 물류 데이터 통계 보고
|
||||
- `ReportToYituliu`
|
||||
Yituliu 빅데이터에 보고합니다.
|
||||
Yituliu 빅데이터 보고
|
||||
- `InfrastDormDoubleConfirmButton`
|
||||
기반시설 더블 확인 버튼입니다. 다른 오퍼레이터와 충돌이 있을 때만 발생합니다.
|
||||
기반시설 숙소의 2차 확인 버튼, 오퍼레이터 충돌 시에만 나타남, 사용자에게 알림 필요
|
||||
- `StartExplore`
|
||||
통합전략: 시작 중입니다.
|
||||
통합 전략 탐험 시작
|
||||
- `StageTraderInvestConfirm`
|
||||
통합전략: 오리지늄 각뿔 아이템 거래.
|
||||
통합 전략 각뿔 투자 확인
|
||||
- `StageTraderInvestSystemFull`
|
||||
통합전략: 투자 시스템이 가득 참.
|
||||
통합 전략 투자 한도 도달
|
||||
- `ExitThenAbandon`
|
||||
통합전략: 나가기 확인.
|
||||
통합 전략 이번 탐험 포기
|
||||
- `MissionCompletedFlag`
|
||||
통합전략: 미션 완료.
|
||||
통합 전략 전투 완료
|
||||
- `MissionFailedFlag`
|
||||
통합전략: 미션 실패.
|
||||
통합 전략 전투 실패
|
||||
- `StageTraderEnter`
|
||||
통합전략: 교활한 상인 진입.
|
||||
통합 전략 노드: 교활한 상인
|
||||
- `StageSafeHouseEnter`
|
||||
통합전략: 안전가옥 진입.
|
||||
통합 전략 노드: 안전가옥
|
||||
- `StageEncounterEnter`
|
||||
통합전략: 우연한 만남 진입.
|
||||
통합 전략 노드: 우연한 만남/고성의 선물
|
||||
- `StageCombatDpsEnter`
|
||||
통합전략: 작전 진입.
|
||||
통합 전략 노드: 일반 작전
|
||||
- `StageEmergencyDps`
|
||||
통합전략: 긴급 작전 진입.
|
||||
통합 전략 노드: 긴급 작전
|
||||
- `StageDreadfulFoe`
|
||||
통합전략: 보스 진입.
|
||||
- `StartGameTask`
|
||||
클라이언트를 시작할 수 없음 (클라이언트 유형과 호환되지 않는 구성 파일).
|
||||
- 기타 할 일
|
||||
통합 전략 노드: 험난한 길
|
||||
- `StartGameTask`
|
||||
클라이언트 실행 실패 (설정 파일과 입력된 client_type 불일치)
|
||||
- Todo 기타
|
||||
|
||||
### SubTaskExtraInfo
|
||||
|
||||
```json
|
||||
{
|
||||
"taskchain": string, // 현재 Task Chain
|
||||
"class": string, // 서브태스크 클래스
|
||||
"what": string, // 정보 유형
|
||||
"details": object, // 정보 상세 내용
|
||||
"uuid": string, // UUID
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="taskchain" type="string" required
|
||||
현재 작업 체인
|
||||
:::
|
||||
::: field name="class" type="string" required
|
||||
서브 작업 유형
|
||||
:::
|
||||
::: field name="what" type="string" required
|
||||
정보 유형
|
||||
:::
|
||||
::: field name="details" type="object" required
|
||||
정보 상세
|
||||
:::
|
||||
::: field name="uuid" type="string" required
|
||||
장치 고유 코드
|
||||
:::
|
||||
::::
|
||||
|
||||
#### 자주 사용되는 `what`과 `details` 필드 값
|
||||
#### 자주 사용되는 `what` 및 `details` 필드
|
||||
|
||||
- `StageDrops`
|
||||
스테이지 드롭 정보
|
||||
|
||||
```json
|
||||
// 해당 details 필드 예시
|
||||
{
|
||||
"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
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
```
|
||||
노드 재료 드롭 정보. `details` 필드 구조는 다음과 같습니다:
|
||||
- `drops` (array, required): 이번에 식별된 드롭 재료, 배열의 각 항목:
|
||||
- `itemId` (string, required): 재료 ID
|
||||
- `quantity` (number, required): 드롭 수량
|
||||
- `itemName` (string, required): 재료 명칭
|
||||
- `stage` (object, required): 노드 정보:
|
||||
- `stageCode` (string, required): 노드 코드
|
||||
- `stageId` (string, required): 노드 ID
|
||||
- `stars` (number, required): 작전 종료 등급(별)
|
||||
- `stats` (array, required): 이번 실행 기간 동안의 총 재료 드롭, 배열의 각 항목:
|
||||
- `itemId` (string, required): 재료 ID
|
||||
- `itemName` (string, required): 재료 명칭
|
||||
- `quantity` (number, required): 총 수량
|
||||
- `addQuantity` (number, required): 이번에 추가된 드롭 수량
|
||||
|
||||
- `RecruitTagsDetected`
|
||||
공개모집 태그 감지
|
||||
공개모집 태그를 식별했습니다. `details` 필드 내용은 다음과 같습니다:
|
||||
|
||||
```json
|
||||
// 상세 정보에 대한 예시
|
||||
{
|
||||
"tags": [
|
||||
"费用回复",
|
||||
"防护",
|
||||
"先锋干员",
|
||||
"辅助干员",
|
||||
"近战位"
|
||||
]
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="tags" type="array<string>" required
|
||||
식별된 태그 목록
|
||||
:::
|
||||
::::
|
||||
|
||||
- `RecruitSpecialTag`
|
||||
고급 특별 채용 감지
|
||||
공개모집 특수 태그를 식별했습니다. `details` 필드 내용은 다음과 같습니다:
|
||||
|
||||
```json
|
||||
// 상세 정보에 대한 예시
|
||||
{
|
||||
"tag": "高级资深干员" // 고급 특별 채용
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="tag" type="string" required
|
||||
특수 태그 명칭, 예: `고급 특별 채용`
|
||||
:::
|
||||
::::
|
||||
|
||||
- `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
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
공개모집 식별 결과. `details` 필드 구조는 다음과 같습니다:
|
||||
- `tags` (array, required): 식별된 모든 태그, 현재 5개로 고정
|
||||
- `level` (number, required): 조합의 최고 등급(별)
|
||||
- `result` (array, required): 구체적인 조합 결과, 배열의 각 항목:
|
||||
- `tags` (array, required): 조합에 참여한 태그
|
||||
- `level` (number, required): 이 태그 조합의 등급
|
||||
- `opers` (array, required): 모집 가능한 오퍼레이터, 배열의 각 항목:
|
||||
- `name` (string, required): 오퍼레이터 명칭
|
||||
- `level` (number, required): 오퍼레이터 등급
|
||||
|
||||
- `RecruitTagsRefreshed`
|
||||
공개모집 태그 갱신 완료
|
||||
공개모집 태그를 갱신했습니다. `details` 필드 내용은 다음과 같습니다:
|
||||
|
||||
```json
|
||||
// 상세 정보에 대한 예시
|
||||
{
|
||||
"count": 1, // 갱신된 슬롯의 횟수
|
||||
"refresh_limit": 3 // 갱신 횟수 제한
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="count" type="number" required
|
||||
현재 슬롯 갱신 횟수
|
||||
:::
|
||||
::: field name="refresh_limit" type="number" required
|
||||
현재 슬롯 갱신 횟수 상한
|
||||
:::
|
||||
::::
|
||||
|
||||
- `RecruitNoPermit`
|
||||
모집 라이센스가 없습니다
|
||||
모집 허가증이 없습니다. `details` 필드 내용은 다음과 같습니다:
|
||||
|
||||
```json
|
||||
// 상세 정보에 대한 예시
|
||||
{
|
||||
"continue": true, // 계속 새로고침할지 말지
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="continue" type="boolean" required
|
||||
계속 갱신할지 여부
|
||||
:::
|
||||
::::
|
||||
|
||||
- `RecruitTagsSelected`
|
||||
공개모집 태그 선택 완료
|
||||
공개모집 태그를 선택했습니다. `details` 필드 내용은 다음과 같습니다:
|
||||
|
||||
```json
|
||||
// 상세 정보에 대한 예시
|
||||
{
|
||||
"tags": [
|
||||
"减速",
|
||||
"术师干员"
|
||||
]
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="tags" type="array<string>" required
|
||||
선택한 태그 목록
|
||||
:::
|
||||
::::
|
||||
|
||||
- `RecruitSlotCompleted`
|
||||
모집 슬롯 완료
|
||||
- `RecruitError`
|
||||
모집 인식 오류
|
||||
- `EnterFacility`
|
||||
기반시설 입장
|
||||
현재 공개모집 슬롯 작업 완료. `details` 필드는 비어 있습니다
|
||||
|
||||
```json
|
||||
// 상세 정보에 대한 예시
|
||||
{
|
||||
"facility": "Mfg", // 시설 이름
|
||||
"index": 0 // 시설 ID
|
||||
}
|
||||
```
|
||||
- `RecruitError`
|
||||
공개모집 식별 오류. `details` 필드는 비어 있습니다
|
||||
|
||||
- `EnterFacility`
|
||||
기반시설 시설에 진입했습니다. `details` 필드 내용은 다음과 같습니다:
|
||||
|
||||
:::: field-group
|
||||
::: field name="facility" type="string" required
|
||||
시설명
|
||||
:::
|
||||
::: field name="index" type="number" required
|
||||
시설 순서(인덱스)
|
||||
:::
|
||||
::::
|
||||
|
||||
- `NotEnoughStaff`
|
||||
사용 가능한 오퍼레이터가 부족함
|
||||
기반시설 가용 오퍼레이터 부족. `details` 필드 내용은 다음과 같습니다:
|
||||
|
||||
```json
|
||||
// 상세 정보에 대한 예시
|
||||
{
|
||||
"facility": "Mfg", // 시설 이름
|
||||
"index": 0 // 시설 ID
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="facility" type="string" required
|
||||
시설명
|
||||
:::
|
||||
::: field name="index" type="number" required
|
||||
시설 순서
|
||||
:::
|
||||
::::
|
||||
|
||||
- `ProductOfFacility`
|
||||
시설의 생산물
|
||||
기반시설 생산물. `details` 필드 내용은 다음과 같습니다:
|
||||
|
||||
```json
|
||||
// 상세 정보에 대한 예시
|
||||
{
|
||||
"product": "Money", // 생산물
|
||||
"facility": "Mfg", // 시설 이름
|
||||
"index": 0 // 시설 ID
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="product" type="string" required
|
||||
생산물명
|
||||
:::
|
||||
::: field name="facility" type="string" required
|
||||
시설명
|
||||
:::
|
||||
::: field name="index" type="number" required
|
||||
시설 순서
|
||||
:::
|
||||
::::
|
||||
|
||||
- `StageInfo`
|
||||
자동 전투 스테이지 정보
|
||||
자동 작전 노드 정보. `details` 필드 내용은 다음과 같습니다:
|
||||
|
||||
```json
|
||||
// 상세 정보에 대한 예시
|
||||
{
|
||||
"name": string // 스테이지 이름
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="name" type="string" required
|
||||
노드명
|
||||
:::
|
||||
::::
|
||||
|
||||
- `StageInfoError`
|
||||
자동 전투 스테이지 정보 오류
|
||||
자동 작전 노드 식별 오류. `details` 필드는 비어 있습니다
|
||||
|
||||
- `PenguinId`
|
||||
PenguinStats ID
|
||||
펭귄 물류 ID. `details` 필드 내용은 다음과 같습니다:
|
||||
|
||||
```json
|
||||
// 상세 정보에 대한 예시
|
||||
{
|
||||
"id": string
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="id" type="string" required
|
||||
펭귄 물류 ID
|
||||
:::
|
||||
::::
|
||||
|
||||
- `DepotInfo`
|
||||
창고 인식 결과
|
||||
- `Depot`
|
||||
창고 인식 결과. `details` 필드 구조는 다음과 같습니다:
|
||||
- `done` (boolean, required): 인식 완료 여부, `false`는 아직 인식 중임(진행 중 데이터)을 의미
|
||||
- `arkplanner` (object, required): [ArkPlanner](https://penguin-stats.cn/planner) 포맷 데이터
|
||||
- `lolicon` (object, required): [lolicon](https://arkntools.app/#/material) (Arkntools) 포맷 데이터
|
||||
|
||||
```json
|
||||
// 상세 정보에 대한 예시
|
||||
// ArkPlanner 포맷만 지원합니다. 더 많은 포맷이 나중에 지원될 수 있습니다.
|
||||
"arkplanner": {
|
||||
"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
|
||||
}
|
||||
]
|
||||
```
|
||||
- `OperBox`
|
||||
오퍼레이터 보관함 인식 결과. `details` 필드 구조는 다음과 같습니다:
|
||||
- `done` (boolean, required): 인식 완료 여부, `false`는 아직 인식 중임(진행 중 데이터)을 의미
|
||||
- `all_oper` (array, required): 전체 오퍼레이터 목록, 배열의 각 항목:
|
||||
- `id` (string, required): 오퍼레이터 ID
|
||||
- `name` (string, required): 오퍼레이터 명칭
|
||||
- `own` (boolean, required): 보유 여부
|
||||
- `rarity` (number, required): 오퍼레이터 레어도 [1, 6]
|
||||
- `own_opers` (array, required): 보유 중인 오퍼레이터 상세 정보 목록, 배열의 각 항목:
|
||||
- `id` (string, required): 오퍼레이터 ID
|
||||
- `name` (string, required): 오퍼레이터 명칭
|
||||
- `own` (boolean, required): 보유 여부
|
||||
- `elite` (number, required): 정예화 단계 [0, 2]
|
||||
- `level` (number, required): 오퍼레이터 레벨
|
||||
- `potential` (number, required): 오퍼레이터 잠재 [1, 6]
|
||||
- `rarity` (number, required): 오퍼레이터 레어도 [1, 6]
|
||||
|
||||
- `UnsupportedLevel`
|
||||
지원되지 않는 레벨 이름
|
||||
자동지휘, 지원하지 않는 노드명. `details` 필드는 비어 있습니다
|
||||
|
||||
### ReportRequest
|
||||
|
||||
이 필드는 코어 모듈에서 UI 계층으로 네트워크 요청 정보를 전달하는 데 주로 사용되며, UI는 실제 HTTP 보고 작업을 수행합니다.
|
||||
이 필드는 주로 코어 모듈이 UI 계층에 네트워크 요청 정보를 전달하는 데 사용되며, UI가 구체적인 HTTP 보고(Report) 작업을 수행합니다
|
||||
|
||||
```json
|
||||
{
|
||||
"url": "string", // 요청의 전체 URL 예: https://penguin-stats.io/PenguinStats/api/v2/report
|
||||
"headers": { // 요청 헤더 키-값 쌍 (Content-Type 제외, UI에서 추가)
|
||||
"authorization": "PenguinID 1234567890",
|
||||
"User-Agent": "MaaAssistantArknights/1.2.3 cpr/4.5.6"
|
||||
},
|
||||
"body": "string", // 요청 본문 내용 (보통 JSON 형식의 문자열)
|
||||
"subtask": "string" // 구체적인 보고 작업을 식별하는 서브태스크 이름 예: "ReportToPenguinStats", "ReportToYituliu"
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="url" type="string" required
|
||||
요청 전체 URL, 예: `https://penguin-stats.io/PenguinStats/api/v2/report`
|
||||
:::
|
||||
::: field name="headers" type="object" required
|
||||
요청 헤더 키-값 쌍 (`Content-Type` 미포함, UI 계층에서 자동 추가)
|
||||
:::
|
||||
::: field name="body" type="string" required
|
||||
요청 본문 내용 (일반적으로 JSON 형식의 문자열)
|
||||
:::
|
||||
::: field name="subtask" type="string" required
|
||||
서브 작업명, 구체적인 상보 임무 식별, 예: `ReportToPenguinStats`, `ReportToYituliu`
|
||||
:::
|
||||
::::
|
||||
|
||||
@@ -3,157 +3,172 @@ order: 3
|
||||
icon: ph:sword-bold
|
||||
---
|
||||
|
||||
# 전투 스키마
|
||||
# 자동지휘 프로토콜
|
||||
|
||||
`resource/copilot/*.json` 파일의 사용법 및 각 필드 설명
|
||||
|
||||
::: tip
|
||||
주의: JSON 형식은 주석을 지원하지 않으므로 아래의 예시에서 주석은 제거해주시기 바랍니다.
|
||||
JSON 파일은 주석을 지원하지 않으므로, 텍스트 내의 주석은 예시용입니다. 직접 복사하여 사용하지 마세요.
|
||||
:::
|
||||
|
||||
`resource/copilot/*.json` 및 필드 설명의 사용법.
|
||||
|
||||
## 개요
|
||||
## 전체 필드 목록
|
||||
|
||||
```json
|
||||
{
|
||||
"stage_name": "暴君", // 스테이지 이름, 필수 입력 항목입니다. 레벨, 코드, stageId, levelId 등 중복되지 않는 중국어 이름이면 어떤 것이든 사용 가능합니다.
|
||||
"opers": [ // 오퍼레이터 목록
|
||||
"stage_name": "暴君", // 스테이지명, 필수. 스테이지 중문명, code, stageId, levelId 등 유일성만 보장되면 가능
|
||||
"opers": [
|
||||
// 특정 오퍼레이터 지정
|
||||
{
|
||||
"name": "棘刺", // 오퍼레이터 이름
|
||||
|
||||
"skill": 3, // 스킬 ID (범위: [1, 3]), 선택 사항, 기본값은 1입니다.
|
||||
|
||||
"skill_usage": 0, // 스킬 사용법, 선택 사항, 기본값은 0입니다.
|
||||
// 0 - 'actions'에서 사용됨
|
||||
// 1 - 준비되면 사용 (예: 쏜즈: 데스트레자, 머틀: 지원지령β)
|
||||
// 2 - 준비되면 사용되며, 한 번만 사용됨 (예: 마운틴: 스탠스 스위칭)
|
||||
// 3 - 자동 결정 (구현되지 않음)
|
||||
// 0은 자동 발동 스킬(예: 강타, 패시브 등)입니다.
|
||||
|
||||
"requirements": { // 요구 사항, 예약된 필드이며 구현되지 않았습니다. 선택 사항이며 기본적으로 비어 있습니다.
|
||||
"elite": 2, // 정예화 요구 사항, 선택 사항, 기본값은 0입니다.
|
||||
"level": 90, // 레벨 요구 사항, 선택 사항, 기본값은 0입니다.
|
||||
"skill_level": 10, // 스킬 레벨 요구 사항, 선택 사항, 기본값은 0입니다.
|
||||
"module": 1, // 모듈 요구 사항, 선택 사항, 기본값은 0입니다.
|
||||
"module_level": 3, // 모듈 레벨, 선택 사항, 기본값은 0입니다.
|
||||
"potential": 1 // 잠재능력 요구 사항, 선택 사항, 기본값은 0입니다.
|
||||
"name": "重岳", // 오퍼레이터명
|
||||
"skill": 3, // 스킬 번호. 선택 사항, 기본값 1, 범위 [1, 3]
|
||||
"skill_usage": 2, // 스킬 사용법. 선택 사항, 기본값 0
|
||||
// 0 - 자동 사용 안 함 ("actions" 필드에 의존)
|
||||
// 1 - 쿨타임 찰 때마다 사용 (예: 쏜즈 3스킬, 머틀 1스킬 등)
|
||||
// 2 - X회 사용 (예: 마운틴 2스킬 1회 전환, 총웨 3스킬 5회 사용 등, "skill_times" 필드로 설정)
|
||||
// 3 - 자동 판단 (구현 예정)
|
||||
// 완전 자동 시전 스킬(패시브 등)인 경우 0 입력
|
||||
"skill_times": 5, // 스킬 사용 횟수. 선택 사항, 기본값 1
|
||||
"requirements": {
|
||||
// 육성 상태 요구. 예약된 필드로 아직 미구현. 선택 사항, 기본값 비어 있음
|
||||
"elite": 2, // 정예화 단계. 선택 사항, 기본값 0 (요구 없음)
|
||||
"level": 90, // 오퍼레이터 레벨. 선택 사항, 기본값 0
|
||||
"skill_level": 10, // 스킬 레벨. 선택 사항, 기본값 0
|
||||
"module": 1, // 모듈 번호. 선택 사항, 기본값 0
|
||||
"module_level": 3, // 모듈 레벨, 선택 사항, 기본값 0
|
||||
"potential": 1 // 잠재(돌파) 요구. 선택 사항, 기본값 0
|
||||
}
|
||||
},
|
||||
}
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"name": "任意正常群奶", // 그룹 이름, 필수 입력 항목입니다.
|
||||
// `deploy` 아래의 `name` 필드와 일치하는 모든 이름이 허용됩니다.
|
||||
|
||||
"opers": [ // 랜덤하게 선택되는 오퍼레이터들로 이루어진 목록입니다. 위의 `opers` 필드와 유사합니다. 레벨이 높은 오퍼레이터일수록 높은 우선순위를 갖습니다.
|
||||
"name": "任意正常群奶", // 그룹명, 필수
|
||||
// 임의로 이름을 지으면 되며, 아래 deploy의 name과 일치하면 됨
|
||||
"opers": [
|
||||
// 오퍼레이터 중 하나 선택, 순서 없음, 육성 상태 높은 것 우선 선택, 사용법은 위 opers 필드와 동일
|
||||
{
|
||||
"name": "夜莺", // Nightingale
|
||||
"name": "夜莺",
|
||||
"skill": 3,
|
||||
"skill_usage": 2 // 스킬 재사용 대기 시간이 다를 수 있음
|
||||
"skill_usage": 2 // 특정 시점인 경우, 오퍼레이터마다 스킬 쿨타임이 다를 수 있으니 주의
|
||||
},
|
||||
{
|
||||
"name": "白面鸮", // Ptilopsis
|
||||
"name": "白面鸮",
|
||||
"skill": 2,
|
||||
"skill_usage": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"actions": [ // 순차적으로 실행되는 작업들로 이루어진 목록입니다. 필수 입력 항목입니다.
|
||||
"actions": [
|
||||
// 전투 중 조작. 순서가 있으며, 이전 동작이 완료되어야 다음 동작 실행. 필수
|
||||
{
|
||||
"type": "部署", // 작업 유형, 선택 사항, 기본값은 "Deploy"입니다.
|
||||
// "Deploy" | "Skill" | "Retreat" | "SpeedUp" | "BulletTime" | "SkillUsage" | "Output" | "SkillDaemon" | "MoveCamera" | "ResetStopwatch"
|
||||
// "部署" | "技能" | "撤退" | "二倍速" | "子弹时间" | "技能用法" | "打印" | "摆完挂机" | "移动镜头" | "重置全局计时器"
|
||||
// 영어와 중국어 모두 지원됩니다.
|
||||
// "Deploy"는 비용이 충분해질 때까지 대기합니다 (타임아웃이 아닌 한).
|
||||
// "Skill"은 스킬이 준비될 때까지 대기합니다 (타임아웃이 아닌 한).
|
||||
// "SpeedUp"은 전환 가능하며, 사용 후 2배 속도가 됩니다. 다시 사용하면 정상 속도로 돌아갑니다.
|
||||
// "BulletTime"은 예약된 필드이며 구현되지 않았으며, 모든 다른 작업과 함께 정상 속도로 돌아갑니다.
|
||||
// "Output"은 문서의 내용을 출력합니다(자막 등).
|
||||
// "SkillDaemon"은 스킬을 사용 가능할 때 사용하고, 끝까지 아무 작업도 수행하지 않습니다.
|
||||
// "MoveCamera" — “파일럿 시험(引航者试炼)” 모드에서 사용되며, distance 필드도 함께 입력해야 합니다.
|
||||
// "ResetStopwatch" — 전역 타이머를 초기화합니다. “time_elapsed” 조건을 참고하세요.
|
||||
|
||||
// 다음 다섯 가지 필드 사이의 관계는 AND(논리곱)입니다, 즉 &&
|
||||
"kills": 0, // 필요한 킬 수에 도달할 때까지 대기합니다. 선택 사항, 기본값은 0입니다.
|
||||
|
||||
"costs": 50, // 특정 코스트가 될 때까지 대기합니다. 선택 사항, 기본값은 0입니다.
|
||||
// 잠재력으로 인해 코스트가 변경될 수 있으므로, 이 필드는 쉬운 전투에만 사용하세요. 그렇지 않으면 "cost_changes"를 사용하세요.
|
||||
// 코스트가 두 자리 수인 경우에만 정확하게 인식됩니다. 세 자리 수 비용에는 권장하지 않습니다.
|
||||
|
||||
"cost_changes": 5, // 특정 코스트가 변경될 때까지 대기합니다. 선택 사항, 기본값은 0입니다.
|
||||
// 작업 시작 시 코스트를 기준으로 계산합니다 (이전 작업의 비용을 기준으로 함).
|
||||
// 코스트가 두 자리 수인 경우에만 정확하게 인식됩니다. 세 자리 수 비용에는 권장하지 않습니다.
|
||||
|
||||
"cooling": 2, // 스킬 쿨타임에 있는 오퍼레이터의 수가 특정 숫자에 도달할 때까지 대기합니다. 선택 사항, 기본값은 "ignore"(-1)입니다.
|
||||
|
||||
"time_elapsed": 1000, // 밀리초(ms) 단위의 전역 타이머 조건입니다. 지정된 시간이 지나지 않으면 계속 대기합니다. 선택 항목이며, 기본값은 0으로 즉시 실행됩니다.
|
||||
// 주의: 이 시간은 마지막으로 실행된 type:ResetStopwatch 액션부터 계산됩니다.
|
||||
// 사용하기 전에 반드시 type:ResetStopwatch 액션을 실행해 타이머를 초기화해야 합니다. 그렇지 않으면 멈춰버립니다.
|
||||
|
||||
// TODO: 다른 조건
|
||||
// TODO: "condition_type": 0, // 조건 집계 유형, 선택 사항, 기본값은 0입니다.
|
||||
// // 0 - AND(논리곱); 1 - OR(논리합)
|
||||
|
||||
"name": "棘刺", // 오퍼레이터/그룹 이름, "Deploy" 유형일 때 필수 입력 항목입니다. "Skill" 또는 "Retreat" 유형일 때 선택 사항입니다.
|
||||
|
||||
"location": [ 5, 5 ], // 배치 위치
|
||||
// "Deploy" 유형일 때 필수 입력 항목입니다.
|
||||
// "Skill" 또는 "Retreat" 유형일 때 선택 사항입니다.
|
||||
// "Skill": 일반 오퍼레이터에게 스킬을 사용할 때 위치 대신 스킬 사용을 위한 위치 시설을 권장합니다. 스킬을 사용하기 위해 이름 대신 위치를 사용하세요.
|
||||
// "Retreat": 여러 소환물이 존재할 때 위치 대신 소환을 위해 철수를 권장합니다. 이름 대신 위치를 사용하세요.
|
||||
|
||||
"direction": "左", // 배치 방향, "Deploy" 유형일 때 필수 입력 항목입니다.
|
||||
// "Left" | "Right" | "Up" | "Down" | "None"
|
||||
// "左" | "右" | "上" | "下" | "无"
|
||||
// 영어와 중국어 모두 지원됩니다.
|
||||
|
||||
"skip_if_not_ready": false, // type이 "Skill"일 때만 유효합니다. 스킬이 준비되지 않았을 경우 현재 액션을 건너뛸 수 있으며, 주로 완료되지 않은 탄약 스킬을 비활성화할 때 사용됩니다. 선택 사항이며 기본값은 false입니다.
|
||||
|
||||
"skill_usage": 1, // 스킬 사용 설정을 재정의합니다. "SkillUsage" 유형일 때 필수 입력 항목입니다.
|
||||
// 예: Myrtle은 처음에 스킬을 사용하지 않고 공격해야 하며, 나중에 자동으로 스킬을 사용해야 합니다.
|
||||
// 이 경우 1로 설정하세요.
|
||||
|
||||
"pre_delay": 0, // 선행 지연 시간 (밀리초), 선택 사항, 기본값은 0입니다.
|
||||
"post_delay": 0, // 후행 지연 시간 (밀리초), 선택 사항, 기본값은 0입니다.
|
||||
|
||||
// "timeout": 999999999, // 예약된 필드이며 구현되지 않았습니다.
|
||||
// 제한 시간 (밀리초), "Deploy" 또는 "Skill" 유형일 때 선택 사항, 기본값은 INT_MAX입니다.
|
||||
// 타임아웃 시 다음 작업으로 진행합니다.
|
||||
|
||||
"doc": "下棘刺了!", // 설명, 선택 사항, 효과는 없지만 UI에 표시됩니다.
|
||||
"doc_color": "orange" // 설명 색상, 선택 사항, 효과는 없지만 UI에 표시됩니다.
|
||||
"type": "部署", // 조작 유형, 선택 사항, 기본값 "Deploy"
|
||||
// "Deploy" | "Skill" | "Retreat" | "SpeedUp" | "BulletTime" | "SkillUsage" | "Output" | "SkillDaemon" | "MoveCamera" | "ResetStopwatch"
|
||||
// "部署" | "技能" | "撤退" | "二倍速" | "子弹时间" | "技能用法" | "打印" | "摆完挂机" | "移动镜头" | "重置全局计时器"
|
||||
// 중/영문 모두 가능, 효과 동일
|
||||
// "Deploy"인 경우, 코스트가 부족하면 코스트가 모일 때까지 계속 대기 (timeout 제외)
|
||||
// "Skill"인 경우, 스킬 쿨타임이 안 찼으면 쿨타임 찰 때까지 계속 대기 (timeout 제외)
|
||||
// "二倍速"은 토글 방식임. 한 번 쓰면 2배속, 다시 쓰면 1배속으로 돌아옴
|
||||
// "子弹时间"은 임의의 오퍼레이터를 클릭한 후 1/5 속도로 만드는 것. 다른 action을 수행하면 정상 속도로 복구됨
|
||||
// "name" 또는 "location" 중 하나 필수. 어떤 오퍼레이터를 눌러 저속 모드에 진입할지 지정. 전장 또는 대기열 오퍼레이터 모두 가능 (자동 판단)
|
||||
// 만약 다음 동작이 "Skill" / "Retreat"라면, 다음 동작과 동일한 "name" 또는 "location"을 입력해야 함
|
||||
// 만약 다음 동작이 "Deploy"라면, 아무나 적어도 됨 (단 대기열에 있는 오퍼레이터는 누르면 인식이 가려질 수 있으므로 피하는 게 좋음)
|
||||
// "打印" 화면에는 이 단계가 표시되지 않으며, doc 내용만 출력됨 (설명 표시 용도)
|
||||
// "摆完挂机" "스킬 재사용 대기시간 완료 시 사용" 설정된 스킬만 사용하며, 전투 종료까지 아무것도 하지 않음
|
||||
// "移动镜头" "인도자의 시련" 모드에서 사용, distance 필드 필요
|
||||
// "重置全局计时器" 전역 타이머 리셋, "time_elapsed" 조건 참고
|
||||
// 현재 아래 5개 조건은 AND 관계임 (&&)
|
||||
"kills": 0, // 킬 수 조건, 도달 못하면 계속 대기. 선택 사항, 기본값 0 (즉시 실행)
|
||||
"costs": 50, // 코스트 조건, 도달 못하면 계속 대기. 선택 사항, 기본값 0 (즉시 실행)
|
||||
// 코스트는 잠재 등의 영향을 받으므로 정확하지 않을 수 있음. 타임라인이 엄격하지 않은 전투에 적합
|
||||
// 그렇지 않으면 아래 cost_changes 사용 권장
|
||||
// 또한 코스트가 두 자리 수일 때만 인식이 비교적 정확함. 세 자리 수는 인식 오류 가능성 있음. 비추천
|
||||
"cost_changes": 5, // 코스트 변화량 조건, 도달 못하면 계속 대기. 선택 사항, 기본값 0 (즉시 실행)
|
||||
// 이 action을 실행하기 시작한 시점부터 계산 (즉 이전 action이 끝난 시점의 코스트 기준)
|
||||
// 음수 지원 (제이 등 코스트 지속 소모 오퍼레이터로 인해 코스트가 줄어드는 경우)
|
||||
// 또한 코스트가 두 자리 수일 때만 인식이 비교적 정확함. 세 자리 수는 인식 오류 가능성 있음. 비추천
|
||||
"cooling": 2, // 쿨타임 중인 오퍼레이터 수 조건, 도달 못하면 계속 대기. 선택 사항, 기본값 -1 (인식 안 함)
|
||||
"time_elapsed": 1000, // 밀리초(ms) 단위 전역 타이머 조건, 도달 못하면 계속 대기. 선택 사항, 기본값 0 (즉시 실행)
|
||||
// 이전 type:ResetStopwatch action이 실행된 시점부터 계산됨
|
||||
// 사용 전 반드시 type:ResetStopwatch action을 실행하여 타이머를 초기화해야 함. 안 그러면 멈춤
|
||||
// TODO: 기타 조건
|
||||
// TODO: "condition_type": 0, // 실행 조건 간 관계, 선택 사항, 기본값 0
|
||||
// // 0 - AND; 1 - OR
|
||||
"name": "棘刺", // 오퍼레이터명 또는 그룹명. type이 "Deploy"일 때 필수, "Skill" | "Retreat"일 때 선택
|
||||
"location": [
|
||||
5,
|
||||
5
|
||||
], // 오퍼레이터 배치 위치
|
||||
// type "Deploy" 시 필수
|
||||
// type "Skill" | "Retreat" 시 선택
|
||||
// "Skill": 필드 위 자동 장치 등에 추천 (name 없이 location으로 스킬 발동). 일반 오퍼레이터는 name 권장
|
||||
// "Retreat": 동명의 소환물이 여러 개일 때 추천 (name 없이 location으로 퇴각). 일반 오퍼레이터는 name 권장
|
||||
// 좌표 정보는 https://map.ark-nights.com/areas 에서 확인 가능. 설정에서 "좌표 표시"를 "MAA"로 선택하면 MAA 좌표 확인 가능
|
||||
"direction": "左", // 배치 방향. type "Deploy" 시 필수
|
||||
// "Left" | "Right" | "Up" | "Down" | "None"
|
||||
// "左" | "右" | "上" | "下" | "无"
|
||||
// 중/영문 모두 가능, 효과 동일
|
||||
"skip_if_not_ready": false, // type "Skill" 시 유효. 스킬 사용 불가 시 해당 동작 건너뛰기 허용. 주로 다 못 쓴 탄약 스킬 끄는 용도. 선택 사항, 기본값 false
|
||||
"skill_usage": 1, // 스킬 용법 수정. type "SkillUsage" 시 필수
|
||||
// 예: 머틀 배치 직후에는 몹을 잡아야 해서 스킬을 안 쓰다가, 중반부터 자동으로 스킬을 써야 할 때
|
||||
// 해당 시점에 1로 설정하면 됨
|
||||
"skill_times": 5, // 스킬 사용 횟수. 선택 사항, 기본값 1
|
||||
"pre_delay": 0, // 전행 딜레이. 선택 사항, 기본값 0, 단위 ms
|
||||
// 현재 action의 모든 조건이 충족된 후 타이머 시작, 종료 후 type 동작 실행
|
||||
"post_delay": 0, // 후행 딜레이. 선택 사항, 기본값 0, 단위 ms
|
||||
// 현재 action의 type 동작 완료 후 타이머 시작, 종료 후 다음 action 진행
|
||||
//
|
||||
// "timeout": 999999999, // 예약된 필드, 미구현
|
||||
// 타임아웃. type "Deploy" | "Skill" 시 선택. 기본값 INT_MAX, 단위 ms
|
||||
// 타임아웃 시 현재 동작 포기하고 다음 동작 실행
|
||||
"distance": [
|
||||
4.5,
|
||||
0
|
||||
], // type "MoveCamera" 시 필수
|
||||
// [ x 이동 칸수, y 이동 칸수 ], 소수 가능, 음수 가능
|
||||
// x 양수면 카메라 우측 이동, y 양수면 카메라 위쪽 이동
|
||||
// 예: "distance": [-1, 1], "location": [5, 6]이면 실제로는 [6, 7]에 배치됨
|
||||
// 주의: x > +2 인 경우 강제로 화면 전환을 기다리며, 전환 후 동작 완료. 그 외에는 즉시 실행 및 완료
|
||||
"doc": "下棘刺了!", // 설명, 선택 사항. 인터페이스에 표시됨, 실제 기능 없음
|
||||
"doc_color": "orange" // 설명 글자색, 선택 사항, 기본값 회색. 인터페이스에 표시됨, 실제 기능 없음
|
||||
},
|
||||
// 예시 1
|
||||
// 예시 1
|
||||
{
|
||||
"name": "任意正常群奶",
|
||||
"location": [ 5, 6 ],
|
||||
"location": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"direction": "右"
|
||||
},
|
||||
// 예시 2
|
||||
// 예시 2
|
||||
{
|
||||
"name": "史尔特尔",
|
||||
"location": [ 4, 5 ],
|
||||
"location": [
|
||||
4,
|
||||
5
|
||||
],
|
||||
"direction": "左",
|
||||
"doc": "你史尔特尔奶奶来啦!",
|
||||
"doc_color": "red"
|
||||
},
|
||||
// 예시 3
|
||||
// 예시 3
|
||||
{
|
||||
"type": "二倍速"
|
||||
}
|
||||
],
|
||||
"minimum_required": "v4.0", // 필요한 최소한의 MAA 버전, 필수 입력 항목, 예약된 필드이며 구현되지 않았습니다.
|
||||
"doc": { // 설명, 선택 사항입니다.
|
||||
"minimum_required": "v4.0", // MAA 최소 요구 버전, 필수
|
||||
"doc": {
|
||||
// 설명, 선택 사항
|
||||
"title": "低练度高成功率作业",
|
||||
"title_color": "dark",
|
||||
"details": "对练度要求很低balabala……", // 여기에 이름, 비디오 링크, 공략글 링크 등을 쓸 수 있습니다.
|
||||
"details": "对练度要求很低balabala……", // 여기에 작성자명, 공략 영상 링크 등을 적으세요
|
||||
"details_color": "dark"
|
||||
},
|
||||
"difficulty": 0 // 작업의 난이도, 선택 사항, 기본값은 0입니다.
|
||||
// 0: 기본값, 설정 안 됨
|
||||
// 1: 일반 난이도 지원
|
||||
// 2: 레이드 난이도 지원
|
||||
// 3: 일반 및 레이드 난이도 지원
|
||||
"difficulty": 0 // 작업 난이도, 선택 사항, 기본값 0
|
||||
// 0: 기본, 미설정
|
||||
// 1: 일반 모드 지원
|
||||
// 2: 하드 모드 지원
|
||||
// 3: 일반, 하드 모드 지원
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -5,158 +5,156 @@ icon: mdi:remote-desktop
|
||||
|
||||
# 원격 제어 프로토콜
|
||||
|
||||
MAA를 원격으로 제어하려면 http(s) 서비스를 제공해야 합니다. 이 서비스는 아래 두 가지 익명 엔드포인트를 제공해야 합니다. 이 두 엔드포인트는 웹 엔드포인트이며 http(s) 프로토콜이어야 합니다.
|
||||
MAA를 원격으로 제어하려면 http(s) 서비스를 제공해야 합니다. 이 서비스는 아래 두 가지 익명 엔드포인트(Endpoint)를 제공해야 하며, 두 엔드포인트는 http(s) 프로토콜의 Web 엔드포인트여야 합니다.
|
||||
|
||||
::: warning
|
||||
엔드포인트가 http 프로토콜인 경우 MAA는 연결시마다 안전하지 않음 경고를 발생시킵니다. **공개 네트워크에 프로토콜을 배포하는 것은 매우 권장되지 않으며 위험합니다. 테스트 용도로만 사용하세요!**
|
||||
엔드포인트가 http 프로토콜인 경우 MAA는 연결 시마다 '안전하지 않음' 경고를 표시합니다. **공개 네트워크에 평문 전송 서비스를 배포하는 것은 매우 위험하므로 권장하지 않습니다. 테스트 용도로만 사용해 주세요.**
|
||||
:::
|
||||
|
||||
::: tip
|
||||
주의: JSON 형식은 주석을 지원하지 않으므로 아래의 예시에서 주석은 제거해주시기 바랍니다.
|
||||
주의: JSON 파일은 주석을 지원하지 않으므로 아래의 예시에서 주석은 제거하고 사용해 주세요.
|
||||
:::
|
||||
|
||||
## 작업 엔드포인트 가져오기
|
||||
## 작업 획득 엔드포인트 (Get Task)
|
||||
|
||||
MAA는 이 엔드 포인트를 계속하여 폴링하여 실행해야하는 작업을 시도하고 가져와야합니다. 그리고 가져온 목록에 따라 순서대로 실행합니다.
|
||||
MAA는 이 엔드포인트를 1초 간격으로 지속적으로 폴링하여 실행할 작업을 가져옵니다. 그리고 가져온 목록에 따라 순서대로 작업을 실행합니다.
|
||||
|
||||
엔드 포인트 경로는 자유롭지만 반드시 http(s) 엔드 포인트 여야합니다. 예를 들어: `https://your-control-host.net/maa/getTask`
|
||||
엔드포인트 경로는 자유롭지만 반드시 http(s) 엔드포인트여야 합니다.
|
||||
예: `https://your-control-host.net/maa/getTask`
|
||||
|
||||
제어 대상 MAA는 이 엔드포인트를 MAA 설정의 `작업 가져오기 엔드포인트` 텍스트 상자에 작성해야합니다.
|
||||
제어 대상 MAA의 설정 내 `작업 획득 엔드포인트` 입력란에 해당 엔드포인트를 입력해 주세요.
|
||||
|
||||
이 엔드포인트는 `Content-Type=application/json`의 POST 요청을 수락해야하며, 이 요청은 다음과 같은 JSON을 요청 본문으로 수락 할 수 있어야합니다.
|
||||
이 엔드포인트는 `Content-Type=application/json`인 POST 요청을 받을 수 있어야 하며, 요청 본문(Body)으로 아래와 같은 JSON을 수신할 수 있어야 합니다.
|
||||
|
||||
```json
|
||||
{
|
||||
"user":"ea6c39eb-a45f-4d82-9ecc-33a7bf2ae4dc", // 사용자가 MAA 설정에 제공한 사용자 식별자.
|
||||
"device":"f7cd9682-3de9-4eef-9137-ec124ea9e9ec" // MAA가 생성 한 장치 식별자.
|
||||
... // 이 엔드포인트에 다른 용도가 있는 경우 선택적 매개 변수를 추가 할 수 있지만 MAA는 user 및 device 만 전달합니다.
|
||||
"user":"ea6c39eb-a45f-4d82-9ecc-33a7bf2ae4dc", // 사용자가 MAA 설정에 입력한 사용자 식별자
|
||||
"device":"f7cd9682-3de9-4eef-9137-ec124ea9e9ec" // MAA가 자동 생성한 기기 식별자
|
||||
... // 이 엔드포인트에 다른 용도가 있다면 선택적 파라미터를 추가할 수 있지만, MAA는 user와 device만 전송합니다.
|
||||
}
|
||||
```
|
||||
|
||||
이 엔드포인트는 JSON 형식의 응답을 반환해야하며 최소한 다음 형식을 충족해야합니다.
|
||||
이 엔드포인트는 JSON 형식의 응답(Response)을 반환해야 하며, 최소한 다음 형식을 만족해야 합니다.
|
||||
|
||||
```json
|
||||
{
|
||||
"tasks": // MAA가 실행해야하는 Task 목록입니다. 현재 지원되는 유형은 아래 예시와 같습니다. 작업이없는 경우 연결이 무효로 간주됩니다.
|
||||
"tasks": // MAA가 실행해야 할 작업(Task) 목록입니다. 현재 지원되는 유형은 아래 예시와 같습니다. tasks가 없으면 연결 실패로 간주합니다.
|
||||
[
|
||||
// 순차 실행 작업: 아래 작업은 전달된 순서대로 대기열에 들어갑니다
|
||||
// 순차 실행 작업: 아래 작업들은 전달된 순서대로 대기열에 들어가 실행됩니다.
|
||||
{
|
||||
"id": "b353c469-b902-4357-bd8f-d133199eea31", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
||||
"type": "CaptureImage", //스크린샷 작업입니다. 현재 에뮬레이터의 스크린샷을 캡처하고 작업 보고서의 페이로드에 Base64 문자열로 넣습니다. 이러한 유형의 작업을 발행해야하는 경우 요청하는 엔드 포인트가 수용 할 수 있는 최대 요청 크기에 주의하세요. 스크린샷은 수십 메가바이트가 있으며 일반적인 게이트웨이의 기본 크기 제한을 초과할 수 있습니다.
|
||||
"id": "b353c469-b902-4357-bd8f-d133199eea31", // 작업의 고유 ID (문자열). 작업 보고 시 사용됩니다.
|
||||
"type": "CaptureImage", // 스크린샷 작업. 현재 에뮬레이터 화면을 캡처하여 작업 보고의 payload에 Base64 문자열로 담습니다. 이 작업을 내릴 때는 엔드포인트가 허용하는 최대 요청 크기에 주의해 주세요. 스크린샷은 수십 MB에 달할 수 있어 일반적인 게이트웨이의 기본 제한을 초과할 수 있습니다.
|
||||
},
|
||||
{
|
||||
"id": "15be4725-5bd3-443d-8ae3-0a5ae789254c", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
||||
"type": "LinkStart", //원 클릭 모의 농장 시작
|
||||
"id": "15be4725-5bd3-443d-8ae3-0a5ae789254c", // 작업의 고유 ID
|
||||
"type": "LinkStart", // 원클릭 파밍 시작 (StartUp)
|
||||
},
|
||||
{
|
||||
"id": "15be4725-5bd3-443d-8ae3-0a5ae789254c", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
||||
"type": "LinkStart-Recruiting", //현재 구성에 따라 원 클릭 모의 농장의 해당 하위 기능을 독립적으로 실행합니다. 주 요구 사항에 대한 이러한 타입의 옵션은 아래에 나와 있습니다.
|
||||
"id": "15be4725-5bd3-443d-8ae3-0a5ae789254c", // 작업의 고유 ID
|
||||
"type": "LinkStart-Recruiting", // 현재 설정에 따라 원클릭 파밍의 하위 기능(예: 공개모집)을 단독 실행합니다. 메인화면의 체크 여부는 무시합니다. 선택 가능한 값은 아래 설명을 참고하세요.
|
||||
},
|
||||
{
|
||||
"id": "b353c469-b902-4357-bd8f-d133199eea31", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
||||
"type": "Toolbox-GachaOnce", //툴박스에서의 하나의 카드 뽑기 작업입니다. 이 유형의 선택할 수 있는 값은 Toolbox-GachaOnce, Toolbox-GachaTenTimes입니다.
|
||||
"id": "b353c469-b902-4357-bd8f-d133199eea31", // 작업의 고유 ID
|
||||
"type": "Toolbox-GachaOnce", // 툴박스의 1회 뽑기 작업. 선택 가능 값: Toolbox-GachaOnce, Toolbox-GachaTenTimes
|
||||
},
|
||||
{
|
||||
"id": "b353c469-b902-4357-bd8f-d133199eea31", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
||||
"type": "Settings-ConnectionAddress", //설정 항목을 수정하는 작업입니다. ConfigurationHelper.SetValue("ConnectionAddress", params);를 실행하는 것과 동일합니다. 안전을 위해 모든 구성이 수정 가능한 것은 아닙니다. 수정 가능한 구성에 대한 자세한 내용은 아래를 참조하세요.
|
||||
"params": "value" //수정할 값
|
||||
"id": "b353c469-b902-4357-bd8f-d133199eea31", // 작업의 고유 ID
|
||||
"type": "Settings-ConnectionAddress", // 설정값 수정 작업. ConfigurationHelper.SetValue("ConnectionAddress", params)와 동일합니다. 보안을 위해 모든 설정을 수정할 수 있는 것은 아닙니다. 수정 가능한 설정은 아래를 참고하세요.
|
||||
"params": "value" // 수정할 값
|
||||
},
|
||||
//즉시 실행 작업: 아래 작업은 순차 실행 작업 중 실행되며, MAA는 아래의 모든 작업이 가능한 한 빨리 결과를 반환 할 것임을 보장합니다. 이러한 작업은 일반적으로 원격 제어 기능 자체의 제어에 사용됩니다.
|
||||
// 즉시 실행 작업: 아래 작업들은 순차 실행 작업 도중에 실행될 수 있으며, MAA는 가능한 한 빨리 결과를 반환합니다.주로 원격 제어 기능 자체를 제어할 때 사용합니다.
|
||||
{
|
||||
"id": "b353c469-b902-4357-bd8f-d133199eea31", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
||||
"type": "CaptureImageNow", //즉시 스크린샷 작업입니다. 위의 스크린샷 작업과 기본적으로 동일하지만 이 작업은 다른 작업을 기다리지 않고 즉시 실행됩니다.
|
||||
"id": "b353c469-b902-4357-bd8f-d133199eea31", // 작업의 고유 ID
|
||||
"type": "CaptureImageNow", // 즉시 스크린샷 작업. 위의 스크린샷 작업과 비슷하지만, 다른 작업을 기다리지 않고 즉시 실행됩니다.
|
||||
},
|
||||
{
|
||||
"id": "b353c469-b902-4357-bd8f-d133199eea31", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
||||
"type": "StopTask", //현재 작업을 종료하는 작업입니다. 현재 실행중인 작업을 종료하려고 시도합니다. 목록에 다른 작업이있는 경우 다음 작업을 계속하여 실행합니다. 이 작업은 현재 작업이 중지되고 확인되기를 기다리지 않으므로 중지 명령이 적용되었는지 확인하기 위해 하트비트 작업을 사용하세요.
|
||||
"id": "b353c469-b902-4357-bd8f-d133199eea31", // 작업의 고유 ID
|
||||
"type": "StopTask", // 현재 작업 중지. 실행 중인 작업을 중지하고, 목록에 대기 중인 다음 작업이 있다면 실행합니다. 이 명령은 중지 완료를 기다리지 않고 반환되므로, 중지 여부는 HeartBeat로 확인해 주세요.
|
||||
},
|
||||
{
|
||||
"id": "b353c469-b902-4357-bd8f-d133199eea31", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
||||
"type": "HeartBeat", //하트비트 작업은 즉시 반환되며, 현재 "순차 실행 작업" 대기열에서 실행 중인 작업의 ID를 페이로드로 반환합니다. 현재 작업이 없으면 빈 문자열을 반환합니다.
|
||||
"id": "b353c469-b902-4357-bd8f-d133199eea31", // 작업의 고유 ID
|
||||
"type": "HeartBeat", // 하트비트 작업. 즉시 반환되며, 현재 '순차 실행 작업' 큐에서 실행 중인 작업의 ID를 payload로 반환합니다. 실행 중인 작업이 없으면 빈 문자열을 반환합니다.
|
||||
},
|
||||
],
|
||||
... //이 엔드포인트에 다른 용도가 있는 경우 선택적 반환 값을 추가 할 수 있지만 MAA는 작업 만 읽습니다.
|
||||
... // 이 엔드포인트에 다른 용도가 있다면 선택적 반환값을 추가할 수 있지만, MAA는 tasks만 읽습니다.
|
||||
}
|
||||
```
|
||||
|
||||
이러한 작업은 순서대로 실행되므로 먼저 공개 인수를 내보내고 나중에 스크린샷을 보내면 스크린샷이 공개 인수 이후에 실행됩니다.
|
||||
이 엔드 포인트는 재진입이 가능하고 반복적으로 작업을 반환해야합니다. MAA는 작업 ID를 자동으로 기록하며 동일한 ID의 경우 작업을 다시 실행하지 않습니다.
|
||||
이 작업들은 순서대로 실행됩니다. 예를 들어 공개모집 작업을 먼저 보내고 스크린샷 작업을 보내면, 스크린샷은 공개모집이 끝난 뒤 실행됩니다.
|
||||
이 엔드포인트는 재진입 가능해야 하며, 실행할 작업을 반복해서 반환해야 합니다. MAA는 작업 ID를 자동으로 기록하여, 동일한 ID의 작업은 중복 실행하지 않습니다.
|
||||
|
||||
::: note
|
||||
|
||||
- LinkStart-[TaskName] 유형의 작업 유형의 LinkStart의 선택 가능한 값은 LinkStart-Base, LinkStart-WakeUp, LinkStart-Combat, LinkStart-Recruiting, LinkStart-Mall, LinkStart-Mission, LinkStart-AutoRoguelike, LinkStart-Reclamation입니다.
|
||||
- Settings-[SettingsName] 작업 유형의 유형 매개 변수의 선택 가능한 값은 Settings-ConnectionAddress, Settings-Stage1입니다.
|
||||
- 설정 시리즈 작업은 여전히 순서대로 실행되며 작업을 받은 즉시 실행되지 않으며 이전 작업 뒤에 배치됩니다.
|
||||
- 여러 즉시 실행 작업은 순서대로 실행되지만 이러한 작업은 모두 빠르게 실행되므로 순서에 관심을 두지 않아도됩니다.
|
||||
- **LinkStart-[TaskName]** 유형의 `type` 선택 가능 값:
|
||||
`LinkStart-Base`, `LinkStart-WakeUp`, `LinkStart-Combat`, `LinkStart-Recruiting`, `LinkStart-Mall`, `LinkStart-Mission`, `LinkStart-AutoRoguelike`, `LinkStart-Reclamation`
|
||||
- **Settings-[SettingsName]** 유형의 `type` 선택 가능 값:
|
||||
`Settings-ConnectionAddress`, `Settings-Stage1`
|
||||
- **Settings** 시리즈 작업은 순차 실행 작업으로 간주되어, 수신 즉시 실행되지 않고 이전 작업이 끝난 뒤 실행됩니다.
|
||||
- 복수의 **즉시 실행 작업**도 전달된 순서대로 실행되지만, 실행 속도가 매우 빠르므로 순서는 크게 신경 쓰지 않아도 됩니다.
|
||||
|
||||
:::
|
||||
|
||||
## 작업 보고 엔드 포인트
|
||||
## 작업 보고 엔드포인트 (Report Status)
|
||||
|
||||
MAA가 작업을 완료하면 작업의 실행 결과를 원격에 보고해야합니다.
|
||||
MAA가 작업을 완료하면, 이 엔드포인트를 통해 작업 실행 결과를 원격 서버로 보고합니다.
|
||||
|
||||
엔드 포인트 경로는 자유롭지만 반드시 http(s) 엔드 포인트 여야합니다. 예를 들어: `https://your-control-host.net/maa/reportStatus`
|
||||
엔드포인트 경로는 자유롭지만 반드시 http(s) 엔드포인트여야 합니다.
|
||||
예: `https://your-control-host.net/maa/reportStatus`
|
||||
|
||||
제어 대상 MAA는이 엔드 포인트를 MAA 설정의 `작업 보고 엔드포인트` 텍스트 상자에 작성해야합니다
|
||||
제어 대상 MAA의 설정 내 `작업 보고 엔드포인트` 입력란에 해당 엔드포인트를 입력해 주세요.
|
||||
|
||||
이 엔드포인트는 `Content-Type=application/json`의 POST 요청을 수락해야하며, 이 요청은 다음과 같은 JSON을 요청 본문으로 수락 할 수 있어야합니다.
|
||||
이 엔드포인트는 `Content-Type=application/json`인 POST 요청을 받을 수 있어야 하며, 요청 본문(Body)으로 아래와 같은 JSON을 수신할 수 있어야 합니다.
|
||||
|
||||
```json
|
||||
{
|
||||
"user":"ea6c39eb-a45f-4d82-9ecc-33a7bf2ae4dc", // 사용자가 MAA 설정에 제공한 사용자 식별자.
|
||||
"device":"f7cd9682-3de9-4eef-9137-ec124ea9e9ec", // MAA가 생성 한 장치 식별자.
|
||||
"task":"15be4725-5bd3-443d-8ae3-0a5ae789254c", // 보고 할 작업의 ID는 작업을 가져올 때의 ID와 일치합니다.
|
||||
"status":"SUCCESS", // 작업 실행 결과는 SUCCESS 또는 FAILED입니다. 일반적으로 작업이 성공하든 실패하든 SUCCESS 만 반환됩니다. 특별한 경우에만 실패를 반환합니다. 실패한 경우 상세 내용은 해당 작업 소개에서 명확하게 설명됩니다.
|
||||
"payload":"", // 보고서에 대한 데이터는 문자열 형식입니다. 작업 유형에 따라 달라집니다. 예를 들어 스크린샷 작업 보고서는 여기에 스크린샷의 Base64 문자열을 가져옵니다.
|
||||
... // 이 엔드포인트에 다른 용도가 있는 경우 선택적 매개 변수를 추가 할 수 있지만 MAA는 user 및 device 만 전달합니다.
|
||||
"user":"ea6c39eb-a45f-4d82-9ecc-33a7bf2ae4dc", // 사용자가 MAA 설정에 입력한 사용자 식별자
|
||||
"device":"f7cd9682-3de9-4eef-9137-ec124ea9e9ec", // MAA가 자동 생성한 기기 식별자
|
||||
"task":"15be4725-5bd3-443d-8ae3-0a5ae789254c", // 보고할 작업의 ID (Get Task 시 받은 ID와 일치)
|
||||
"status":"SUCCESS", // 작업 실행 결과 (SUCCESS 또는 FAILED). 일반적으로 성공/실패 여부와 관계없이 SUCCESS만 반환하며, 특수한 경우에만 FAILED를 반환합니다(해당 작업 설명에 명시됨).
|
||||
"payload":"", // 보고 데이터 (문자열). 작업 유형에 따라 다릅니다. 예: 스크린샷 작업은 여기에 Base64 문자열이 들어갑니다.
|
||||
... // 이 엔드포인트에 다른 용도가 있다면 선택적 파라미터를 추가할 수 있지만, MAA는 user와 device만 전송합니다.
|
||||
}
|
||||
```
|
||||
|
||||
이 엔드 포인트의 반환 내용은 상관 없습니다. 그러나 200OK를 반환하지 않으면 MAA 측에서 `업로드 실패`라는 알림이 표시됩니다.
|
||||
이 엔드포인트의 반환 내용은 자유롭지만, 200 OK를 반환하지 않으면 MAA 측에 `업로드 실패` 알림이 표시됩니다.
|
||||
|
||||
## 예시 워크플로우 - QQBot을 사용하여 MAA 제어
|
||||
## 예시 워크플로우 - QQBot으로 MAA 제어
|
||||
|
||||
A 개발자는 자신의 QQBot을 사용하여 MAA를 제어하려고합니다. 따라서 공개 네트워크에서 노출 된 백엔드를 개발하여 다음 두 가지 엔드포인트를 제공합니다.
|
||||
A 개발자는 자신의 QQBot으로 MAA를 제어하고 싶어 합니다. 이를 위해 공용 네트워크에 노출된 백엔드를 개발하고 두 개의 엔드포인트를 제공했습니다:
|
||||
|
||||
> [!tip]
|
||||
> https://myqqbot.com/maa/getTask
|
||||
> https://myqqbot.com/maa/reportStatus
|
||||
```text
|
||||
https://myqqbot.com/maa/getTask
|
||||
https://myqqbot.com/maa/reportStatus
|
||||
```
|
||||
|
||||
사용자의 편의를 위해 getTask 인터페이스는 어떤 매개 변수를 받더라도 기본적으로 200OK와 비어있는 작업 목록을 반환합니다.
|
||||
요청이 수신되면 A는 데이터베이스에서 중복 장치를 확인하고 그렇지 않으면 해당 장치와 사용자를 데이터베이스에 기록합니다.
|
||||
즉,이 워크플로우에서는이 엔드포인트가 사용자 등록을 담당합니다.
|
||||
사용자 편의를 위해 `getTask` 인터페이스는 어떤 파라미터가 오든 기본적으로 200 OK와 빈 `tasks` 목록을 반환합니다.
|
||||
A는 요청이 올 때마다 데이터베이스에 중복된 `device`가 있는지 확인하고, 없으면 해당 `device`와 `user`를 기록합니다. 즉, 이 인터페이스는 사용자 등록 기능도 겸합니다.
|
||||
|
||||
그는 QQBot에 사용자의 장치 ID를 제출하는 명령을 제공했습니다.
|
||||
A는 QQBot에 사용자가 자신의 `deviceId`를 제출할 수 있는 명령어를 추가했습니다.
|
||||
그리고 사용 설명서에 "MAA의 `사용자 식별자`에 자신의 QQ 번호를 적고, `기기 식별자`를 복사해서 봇에게 보내세요"라고 안내했습니다.
|
||||
|
||||
그의 QQBot 사용 설명서에는 MAA의 `사용자 식별자`에 자신의 QQ 번호를 입력하고 `장치 식별자`를 QQ 채팅으로 보내도록 지시합니다.
|
||||
QQBot이 식별자를 받으면, 메시지를 보낸 유저의 QQ 번호를 이용해 데이터베이스에 해당 기록이 있는지 찾습니다. 없으면 사용자에게 MAA 설정을 먼저 하라고 안내합니다.
|
||||
(MAA를 설정하면 지속적으로 요청을 보내므로, 사용자가 봇에게 메시지를 보낼 즈음엔 이미 DB에 기록이 있어야 합니다.)
|
||||
|
||||
A는 장치 ID를 수신하면 QQBot이 메시지의 사용자 QQ 번호를 기준으로 데이터베이스에서 해당 레코드를 찾아보고 없으면 사용자가 먼저 MAA를 구성하라고 알립니다.
|
||||
MAA를 구성 한 후 사용자가 MAA를 구성하면 MAA가 지속적으로 요청을 보내기 때문에 사용자가 MAA를 구성하면 메시지를 제출 할 때 데이터베이스에 일치하는 레코드가 있어야합니다.
|
||||
기록이 있다면 봇은 해당 DB 레코드에 '인증됨' 표시를 합니다. 이제 `getTask`는 인증된 `device`와 `user` 요청에 대해 진짜 작업 목록을 반환하기 시작합니다.
|
||||
|
||||
이후 Bot은 데이터베이스의 해당 레코드를 확인하고 검증 된 플래그를 설정하여이 장치 및 사용자가 빠른 getTask 요청에 대한 진정한 작업 목록을 반환하도록합니다.
|
||||
사용자가 QQBot을 통해 명령(예: "파밍 시작")을 내리면, 봇은 DB에 작업을 추가합니다. 잠시 후 `getTask` 요청이 오면 이 작업을 반환합니다. A는 친절하게도 사용자가 명령을 보낼 때마다 자동으로 스크린샷 작업도 하나씩 추가하도록 만들었습니다.
|
||||
|
||||
사용자가 QQBot을 통해 명령을 제출하면 Bot은 데이터베이스에 작업을 작성하므로 getTask가 이러한 작업을 반환합니다. 또한 사용자가 명령을 제출할 때마다,이 QQBot은 기본적으로 스크린 샷 작업 하나를 추가합니다.
|
||||
MAA가 작업을 마치고 `reportStatus`를 호출하면, 봇은 결과를 받아 사용자에게 QQ 메시지로 알림과 스크린샷을 전송합니다.
|
||||
|
||||
작업이 완료되면 MAA가 reportStatus를 호출하여 결과를 보고하면 Bot은 결과를받고 사용자에게 메시지를 보내고 스크린 샷을 표시합니다.
|
||||
## 예시 워크플로우 - 웹사이트로 MAA 제어
|
||||
|
||||
## 예시 워크플로우 - 웹 사이트를 사용하여 MAA 제어
|
||||
B 개발자는 웹사이트를 통해 MAA를 대량으로 관리하고 싶습니다. 자체 회원 시스템이 있는 웹사이트 백엔드를 만들고, 익명 접근 가능한 두 엔드포인트를 열었습니다:
|
||||
|
||||
B 개발자는 웹 사이트를 작성했으며 웹 사이트를 통해 MAA를 대량으로 관리하려고합니다. 따라서 공개 네트워크에서 자체 사용자 관리 시스템을 보유하고 두 가지 익명 엔드 포인트를 제공하는 백엔드를 개발했습니다.
|
||||
```text
|
||||
https://mywebsite.com/maa/getTask
|
||||
https://mywebsite.com/maa/reportStatus
|
||||
```
|
||||
|
||||
> [!tip]
|
||||
> https://mywebsite.com/maa/getTask
|
||||
> https://mywebsite.com/maa/reportStatus。
|
||||
웹사이트에는 MAA 연결 페이지가 있고, B가 `사용자 키`라고 부르는 랜덤 문자열과 `기기 식별자` 입력칸이 있습니다.
|
||||
웹사이트는 사용자에게 "MAA의 `사용자 식별자`에 이 사용자 키를 넣고, MAA의 `기기 식별자`를 여기에 입력하세요"라고 안내합니다.
|
||||
|
||||
웹 사이트에는 MAA 인스턴스에 대한 연결을 표시하는 페이지가 있습니다. B 개발자는 랜덤 문자열을 `사용자 키`라고하는 이 페이지에 표시하고 장치 ID를 입력할 수있는 텍스트 상자가 있습니다.
|
||||
웹사이트에서 '연결 생성'이 성공해야만 `getTask`가 200 OK를 반환하도록 하고, 그 외에는 401 Unauthorized를 반환하게 설정했습니다.
|
||||
따라서 사용자가 MAA에 정보를 잘못 입력하고 '연결 테스트'를 누르면 실패 알림을 받게 됩니다.
|
||||
|
||||
웹 사이트는 MAA의 `사용자 식별자`에 사용자 키를 입력하고 `장치 식별자`를 웹 사이트에 입력하도록 요구합니다.
|
||||
|
||||
MAA의 설정에 올바르게 MAA 연결을 만들려면 웹 사이트에서 사용자 키 및 장치 ID가 정확해야합니다.
|
||||
|
||||
사용자가 웹 사이트를 통해 MAA에 대한 제어 명령을 제출하면 웹 사이트는 데이터베이스에 작업을 작성합니다.
|
||||
|
||||
웹 사이트는이 페이지를 공개하기 때문에 누구나 사용자 키를 복사하여 사용할 수 있지만 장치 ID가 없으면 적절한 데이터베이스 레코드를 찾을 수 없으므로 getTask 호출에 대한 결과는 빈 목록입니다.
|
||||
|
||||
작업이 완료되면 MAA가 reportStatus를 호출하여 결과를 보고하면 웹 사이트는 결과를받고 사용자에게 페이지를 업데이트하여 작업 결과를 표시합니다.
|
||||
|
||||
<!-- markdownlint-disable-file MD034 -->
|
||||
사용자는 웹사이트에서 작업을 내리고, 대기열을 확인하고, 스크린샷을 볼 수 있습니다. 구현 방식은 QQBot 예시와 비슷하게 `getTask`와 `reportStatus`의 조합으로 이루어집니다.
|
||||
|
||||
@@ -3,74 +3,84 @@ order: 7
|
||||
icon: game-icons:prisoner
|
||||
---
|
||||
|
||||
# 보안파견 스키마
|
||||
# 보안 파견 프로토콜
|
||||
|
||||
::: tip
|
||||
주의: JSON 형식은 주석을 지원하지 않으므로 아래의 예시에서 주석은 제거해주시기 바랍니다.
|
||||
주의: JSON 파일은 주석을 지원하지 않으므로, 텍스트 내의 주석은 예시용입니다. 직접 복사하여 사용하지 마세요.
|
||||
:::
|
||||
|
||||
```json
|
||||
```json5
|
||||
{
|
||||
"type": "SSS", // 프로토콜 유형, SSS는 보안파견 의미함, 필수, 변경 불가
|
||||
"stage_name": "多索雷斯在建地块", // 구역 위치의 이름(도솔레스 건설부지), 필수
|
||||
"minimum_required": "v4.9.0", // MAA의 최소 요구 버전, 필수
|
||||
"type": "SSS", // 프로토콜 유형, SSS는 보안파견을 의미. 필수, 변경 불가
|
||||
"stage_name": "多索雷斯在建地块", // 보안 파견 맵 이름, 필수
|
||||
"minimum_required": "v4.9.0", // MAA 최소 요구 버전, 필수
|
||||
"doc": { // 설명, 선택 사항
|
||||
"title": "低练度高成功率作业",
|
||||
"title_color": "dark",
|
||||
"details": "L对练度要求很低balabala……", // 여기에 작성자 명이나, 참고 영상등의 정보를 적는게 좋습니다!
|
||||
"details": "对练度要求很低balabala……", // 여기에 작성자명이나 참고 영상 링크 등을 적으면 좋습니다.
|
||||
"details_color": "dark"
|
||||
},
|
||||
"buff": "自适应补给元件", // 자유롭게 선택 가능합니다
|
||||
"equipment": [ // 전술 장비 선택, 가로로 카운트, 선택 사항
|
||||
// 현재 버전에서는 구현되지 않으며, 인터페이스에만 표시됨
|
||||
"buff": "自适应补给元件", // 시작 전술 장비 선택, 선택 사항
|
||||
"equipment": [ // 시작 장비 선택, 가로 방향 순서, 선택 사항
|
||||
// 현재 버전 미구현, UI에만 표시됨
|
||||
"A", "A", "A", "A",
|
||||
"B", "B", "B", "B"
|
||||
],
|
||||
"strategy": "优选策略", // "Optimized strategy"(최적화 전략) 또는 "Free strategy"(자유 전략), 선택 사항
|
||||
// 현재 버전에서는 구현되지 않으며, 인터페이스에만 표시됨
|
||||
"opers": [ // 지정된 오퍼레이터, 선택 사항
|
||||
"strategy": "优选策略", // "우선 전략"(Optimized) 또는 "자유 전략"(Free), 선택 사항
|
||||
// 현재 버전 미구현, UI에만 표시됨
|
||||
"opers": [ // 지정 오퍼레이터, 선택 사항
|
||||
{
|
||||
"name": "棘刺",
|
||||
"skill": 3,
|
||||
"skill_usage": 1
|
||||
}
|
||||
],
|
||||
"tool_men": { // 필요한 각 직의 남은 인원 수, 코스트별로 정렬, 선택 사항
|
||||
// 현재 버전에서는 구현되지 않으며, 인터페이스에만 표시됨
|
||||
"tool_men": { // 필요한 직군별 나머지 인원 수, 코스트 순 정렬, 선택 사항
|
||||
// 현재 버전 미구현, UI에만 표시됨
|
||||
"Pioneer": 13,
|
||||
"Guards": 2,
|
||||
"近卫": 2, // 중/영문 모두 가능
|
||||
"Medic": 2
|
||||
},
|
||||
"drops": [ // 우선 순위로 플레이 시작 및 전투 중에 오퍼레이터 및 장비 획득
|
||||
"drops": [ // 전투 시작 및 도중 오퍼레이터/장비 획득 우선순위
|
||||
"空弦",
|
||||
"能天使",
|
||||
"先锋",
|
||||
"能天使", // 오퍼레이터명, 직군명 지원
|
||||
"先锋", // 직군명은 중/영문 모두 가능
|
||||
"Support",
|
||||
"无需增调干员", // 아무도 영입하지 않음
|
||||
"重整导能组件", // 장비 이름을 지원, 함께 씀
|
||||
"无需增调干员", // 아무도 영입하지 않음
|
||||
"重整导能组件", // 장비명 지원, 함께 작성 가능
|
||||
"反制导能组件",
|
||||
"战备激活阀", // 레벨 중간의 선택적 장비도 여기에 포함
|
||||
"战备激活阀", // 층 중간 선택 장비도 여기에 포함
|
||||
"改派发讯器"
|
||||
],
|
||||
"blacklist": [ // 블랙리스트, 선택 사항. 이들은 드롭에서 선택되지 않을 것입니다.
|
||||
// 이후 버전에서는 배치 도구의 사람들도 이들을 선택하지 않습니다.
|
||||
"blacklist": [ // 블랙리스트, 선택 사항. drops에서 선택되지 않음.
|
||||
// 추후 버전에서 편성 시에도 이 오퍼레이터들은 제외됨.
|
||||
"夜半",
|
||||
"梅尔"
|
||||
],
|
||||
"stages": [
|
||||
{
|
||||
"stage_name": "蜂拥而上", // 단일 레벨 스테이지 이름, 필수
|
||||
// 이름, stageId, levelId, 추천 stageId 또는 levelId를 지원합니다.
|
||||
// 기타 보존 스테이지와 충돌하는 코드 (예: LT-1)는 사용하지 말아주세요.
|
||||
|
||||
|
||||
"stage_name": "蜂拥而上", // 단일 층 스테이지명, 필수
|
||||
// name, stageId, levelId 지원. stageId 또는 levelId 권장.
|
||||
// 다른 보안 파견 맵과 겹칠 수 있는 code(예: LT-1)는 사용하지 마세요.
|
||||
"strategies": [ // 필수
|
||||
// 순서대로 각 객체의 tool_men에 따라 배치될 것입니다.
|
||||
// 현재 핸드에 tool_men이 없는 경우 다음 객체를 배치합니다.
|
||||
// 매 확인마다 위에서부터 순서대로 진행하며, 실행 완료된 전략은 건너뜀.
|
||||
// 현재 전략의 tool_men 배치가 완료된 경우:
|
||||
// core가 없으면 해당 전략 실행 완료로 간주
|
||||
// core가 있고 배치 가능하면 core를 배치하고 전략 실행 완료로 간주
|
||||
// core가 코스트 전환 중이면 대기하고 후속 전략 건너뜀
|
||||
// 현재 전략의 tool_men 배치가 아직 완료되지 않은 경우:
|
||||
// 대기 구역에 필요한 tool_men이 없으면 다음 전략 확인
|
||||
// 대기 구역에 필요한 tool_men이 있으면:
|
||||
// 즉시 배치 가능한 유닛이 없으면 대기
|
||||
// 즉시 배치 가능한 유닛이 있으면 코스트 적은 순으로 우선 배치
|
||||
// 같은 칸의 전략에 대해:
|
||||
// core가 없으면 대기 구역에 필요 유닛 없을 때(코스트 무관) 같은 칸 후속 전략 계속 확인 허용
|
||||
// core가 있으면 실행 완료 전까지 같은 칸 후속 전략 무시
|
||||
// 같은 칸에 여러 core 오퍼레이터를 작성 가능. 맨 마지막이 아닌 core 오퍼레이터는 전략 완료 후 패스와 동등하게 취급됨(tool_men 미포함)
|
||||
{
|
||||
"core": "棘刺",
|
||||
"tool_men": {
|
||||
"Pioneer": 1, // 영어 또는 중국어 이름 모두 허용됩니다.
|
||||
"Pioneer": 1, // 중/영문 모두 가능
|
||||
"Warrior": 1,
|
||||
"Medic": 1
|
||||
},
|
||||
@@ -94,7 +104,7 @@ icon: game-icons:prisoner
|
||||
"direction": "Left"
|
||||
},
|
||||
{
|
||||
// "core"를 제공하지 않으면, 통과를 보조하는 tool_men을 배치하는 데 사용될 수 있습니다.
|
||||
// "core"가 없으면 패순환용 오퍼레이터(tool_men) 배치 용도로 사용 가능
|
||||
"tool_men": {
|
||||
"Support": 100
|
||||
},
|
||||
@@ -105,15 +115,15 @@ icon: game-icons:prisoner
|
||||
"direction": "Left"
|
||||
}
|
||||
],
|
||||
"draw_as_possible": true, // "오퍼레이터 배치" 버튼. 가능할 때 사용할지 여부. 선택 사항, 기본값은 true입니다.
|
||||
"draw_as_possible": true, // "오퍼레이터 배치"(패순환) 버튼. 쿨 돌면 바로 누를지 여부. 선택 사항, 기본값 true.
|
||||
"actions": [ // 선택 사항
|
||||
// 숙제 복사의 논리를 재사용합니다.
|
||||
// 조건이 해당 액션을 충족하면 액션을 실행합니다. 그렇지 않으면 위의 전략들이 실행됩니다.
|
||||
// 자동지휘 로직 재사용
|
||||
// action 조건 만족 시 action 실행, 아니면 위 strategies 실행
|
||||
{
|
||||
"type": "调配干员" // 새로운 타입. "오퍼레이터 배치" 버튼을 클릭합니다. "draw_as_possible"가 true일 때는 무효화됩니다.
|
||||
"type": "调配干员" // 신규 타입. "오퍼레이터 배치" 버튼 클릭. "draw_as_possible"이 true면 무효.
|
||||
},
|
||||
{
|
||||
"type": "CheckIfStartOver", // 새로운 타입. 오퍼레이터가 사용 가능한지 확인합니다. 사용 불가능하면 종료하고 재시작합니다.
|
||||
"type": "CheckIfStartOver", // 신규 타입. 오퍼레이터 존재 확인. 없으면 재시도.
|
||||
"name": "棘刺"
|
||||
},
|
||||
{
|
||||
@@ -122,7 +132,7 @@ icon: game-icons:prisoner
|
||||
4,
|
||||
5
|
||||
],
|
||||
"direction": "Left"
|
||||
"direction": "左"
|
||||
},
|
||||
{
|
||||
"kills": 10,
|
||||
@@ -130,17 +140,17 @@ icon: game-icons:prisoner
|
||||
"name": "桃金娘"
|
||||
}
|
||||
],
|
||||
"retry_times": 3 // 전투 실패 시 재시도 횟수. 이 제한을 초과하면 해당 스테이지를 포기합니다.
|
||||
"retry_times": 3 // 전투 실패 시 재시도 횟수. 초과 시 해당 판 포기.
|
||||
},
|
||||
{
|
||||
"stage_name": "见者有份"
|
||||
// ...
|
||||
}
|
||||
// 하고 싶은만큼의 스테이지를 작성합니다. 예를 들어, 4개만 작성하면 스테이지 4개를 완료한 후 자동으로 재시작합니다.
|
||||
// 원하는 층수만큼 작성. 예를 들어 4층까지만 쓰면 4층 깨고 자동 재시도.
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 예시
|
||||
## 예시 파일
|
||||
|
||||
<https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/resource/copilot/>
|
||||
|
||||
@@ -3,334 +3,421 @@ order: 4
|
||||
icon: material-symbols:task
|
||||
---
|
||||
|
||||
# Tasks 스키마
|
||||
|
||||
::: tip
|
||||
It is recommended to use [Visual Studio Code](https://code.visualstudio.com/) and install [Maa Pipeline Support](https://marketplace.visualstudio.com/items?itemName=nekosu.maa-support) extension for efficient editing. For more details, please visit the extension's homepage and the [docs](../develop/vsc-ext-tutorial.md).
|
||||
:::
|
||||
|
||||
::: warning
|
||||
주의: JSON 형식은 주석을 지원하지 않으므로 아래의 예시에서 주석은 제거해주시기 바랍니다.
|
||||
:::
|
||||
# 작업 프로토콜
|
||||
|
||||
`resource/tasks`의 사용법 및 각 필드 설명
|
||||
|
||||
## 개요
|
||||
::: tip
|
||||
[Visual Studio Code](https://code.visualstudio.com/)를 사용하고 [Maa Pipeline Support](https://marketplace.visualstudio.com/items?itemName=nekosu.maa-support) 확장을 설치하여 효율적으로 편집하는 것을 권장합니다. 자세한 내용은 확장 홈페이지와 [문서](../develop/vsc-ext-tutorial.md)를 참조하세요.
|
||||
:::
|
||||
|
||||
::: warning
|
||||
JSON 파일은 주석을 지원하지 않으므로, 텍스트 내의 주석은 예시용입니다. 직접 복사하여 사용하지 마세요.
|
||||
:::
|
||||
|
||||
## 전체 필드 목록
|
||||
|
||||
```json
|
||||
{
|
||||
"작업이름": { // 작업 이름
|
||||
"TaskName": { // 작업 이름, @가 포함된 경우 특수 작업일 수 있으며 기본값이 다를 수 있음. 아래 특수 작업 유형 참조
|
||||
|
||||
"baseTask": "xxx", // 작업의 템플릿으로 사용될 xxx 작업을 지정합니다. 특수 작업 유형인 경우 아래의 템플릿 작업에 대한 설명을 참조하세요.
|
||||
"baseTask": "xxx", // xxx 작업을 템플릿(기반)으로 하여 작업 생성. 아래 특수 작업 유형의 '파생 작업' 참조
|
||||
|
||||
"algorithm": "MatchTemplate", // 선택 사항, 인식 알고리즘 유형을 나타냅니다.
|
||||
// 입력하지 않으면 기본값은 MatchTemplate입니다.
|
||||
// - JustReturn: 인식 없이 작업을 직접 실행합니다.
|
||||
// - MatchTemplate: 이미지 매칭
|
||||
// - OcrDetect: 텍스트 인식
|
||||
// - FeatureMatch: 특징 매칭
|
||||
"algorithm": "MatchTemplate", // 선택 사항, 인식 알고리즘 유형
|
||||
// 비워둘 시 기본값: MatchTemplate
|
||||
// - JustReturn: 인식 없이 바로 action 실행
|
||||
// - MatchTemplate: 이미지 매칭
|
||||
// - OcrDetect: 텍스트 인식
|
||||
// - FeatureMatch: 특징 매칭
|
||||
|
||||
"action": "ClickSelf", // 선택 사항, 인식 후 작업 유형을 나타냅니다.
|
||||
// 입력하지 않으면 기본값은 DoNothing입니다.
|
||||
// - ClickSelf: 인식된 위치를 클릭합니다 (인식된 대상 범위 내에서 무작위 점).
|
||||
// - ClickRect: 지정된 영역을 클릭합니다. specificRect 필드에 해당합니다. 이 옵션은 권장하지 않습니다.
|
||||
// - DoNothing: 아무 작업도 수행하지 않습니다.
|
||||
// - Stop: 현재 작업을 중지합니다.
|
||||
// - Swipe: 슬라이드, specificRect 및 rectMove 필드와 관련이 있습니다.
|
||||
// - Input: 텍스트 입력, algorithm이 JustReturn이어야 하며, inputText 필드에 해당합니다.
|
||||
"action": "ClickSelf", // 선택 사항, 인식 성공 후 동작
|
||||
// 비워둘 시 기본값: DoNothing
|
||||
// - ClickSelf: 인식된 위치 클릭 (인식된 목표 범위 내 무작위 지점)
|
||||
// - ClickRect: 지정된 영역 클릭, specificRect 필드에 대응 (비권장)
|
||||
// - DoNothing: 아무것도 하지 않음
|
||||
// - Stop: 현재 작업 정지
|
||||
// - Swipe: 스와이프, specificRect 및 rectMove 필드에 대응
|
||||
// - Input: 텍스트 입력, algorithm이 JustReturn이어야 함, inputText 필드에 대응
|
||||
|
||||
"sub": [ "SubTaskName1", "SubTaskName2" ],
|
||||
// 선택 사항, 서브 작업 목록입니다. 현재 작업이 실행된 후에 각 서브 작업을 순차적으로 실행합니다.
|
||||
// 서브 작업은 재귀적으로 정의할 수 있습니다. 그러나 무한 루프에 빠지지 않도록 주의하세요.
|
||||
"sub": ["SubTaskName1", "SubTaskName2"],
|
||||
// 선택 사항, 서브 작업 (비권장). 현재 작업 실행 후 서브 작업들을 순차적으로 실행
|
||||
// 중첩 가능(서브 작업의 서브 작업). 단, 무한 루프에 주의
|
||||
|
||||
"subErrorIgnored": true, // 선택 사항, 서브 작업 오류를 무시할지 여부를 나타냅니다.
|
||||
// 입력하지 않으면 기본값은 false입니다.
|
||||
// false인 경우, 서브 작업에 오류가 발생하면 이후 작업을 실행하지 않고 현재 작업이 오류로 간주됩니다.
|
||||
// true인 경우, 서브 작업의 오류 여부와는 무관하게 이후 작업 실행에 영향을 미치지 않습니다.
|
||||
|
||||
"maxTimes": 10, // 선택 사항, 작업이 최대로 실행될 수 있는 횟수를 나타냅니다.
|
||||
// 입력하지 않으면 무한히 실행됩니다.
|
||||
// 최대 횟수에 도달하면 exceededNext 필드가 존재한다면 exceededNext 작업이 실행되며, 그렇지 않으면 현재 작업이 중지됩니다.
|
||||
"subErrorIgnored": true, // 선택 사항, 서브 작업 오류 무시 여부
|
||||
// 비워둘 시 기본값: false
|
||||
// false: 서브 작업 중 하나라도 오류 발생 시 후속 작업 실행 안 함 (본 작업 오류로 간주)
|
||||
// true: 서브 작업 오류 여부가 영향을 주지 않음
|
||||
|
||||
"next": ["OtherTaskName1", "OtherTaskName2"],
|
||||
// 선택 사항, 현재 작업과 sub 작업을 완료한 후 다음에 실행할 작업을 나타냅니다.
|
||||
// 앞에서부터 순차적으로 인식하여 첫 번째로 매칭되는 작업을 실행합니다.
|
||||
// 입력하지 않으면 현재 작업 완료 후 바로 중지됩니다.
|
||||
// 선택 사항, 현재 작업 및 sub 작업 완료 후 실행할 다음 작업
|
||||
// 앞에서부터 순차적으로 인식하여 첫 번째로 매칭된 작업 실행
|
||||
// 비워둘 시 현재 작업 완료 후 바로 정지
|
||||
// 동일 작업에 대해 첫 번째 인식 후 두 번째는 인식하지 않음:
|
||||
// "next": [ "A", "B", "A", "A" ] -> "next": [ "A", "B" ]
|
||||
// JustReturn 유형 작업은 마지막 항목이 아닌 곳에 위치할 수 없음
|
||||
|
||||
"exceededNext": [ "OtherTaskName1", "OtherTaskName2" ],
|
||||
// 선택 사항, 최대 실행 횟수에 도달했을 때 실행할 작업을 나타냅니다.
|
||||
// 입력하지 않으면 최대 실행 횟수에 도달하면 중지됩니다. 입력했을 경우, next 대신 여기서 실행됩니다.
|
||||
"maxTimes": 10, // 선택 사항, 최대 실행 횟수
|
||||
// 비워둘 시 기본값: 무한
|
||||
// 최대 횟수 도달 후, exceededNext 필드가 있으면 실행, 없으면 작업 정지
|
||||
|
||||
"onErrorNext": [ "OtherTaskName1", "OtherTaskName2" ],
|
||||
// 선택 사항, 실행 중 오류가 발생한 경우에 실행될 이후 작업을 나타냅니다.
|
||||
"exceededNext": ["OtherTaskName1", "OtherTaskName2"],
|
||||
// 선택 사항, 최대 실행 횟수 도달 시 실행할 작업
|
||||
// 비워둘 시 정지; 작성 시 next 대신 이곳의 작업 실행
|
||||
"onErrorNext": ["OtherTaskName1", "OtherTaskName2"],
|
||||
// 선택 사항, 실행 오류 발생 시 후속 실행할 작업
|
||||
|
||||
"preDelay": 1000, // 선택 사항, 인식된 후 작업이 실행될 때까지 대기하는 시간을 밀리초로 나타냅니다. 입력하지 않으면 기본값은 0입니다.
|
||||
"postDelay": 1000, // 선택 사항, 실행된 후 다음 인식까지 지연되는 시간을 밀리초로 나타냅니다. 입력하지 않으면 기본값은 0입니다.
|
||||
"preDelay": 1000, // 선택 사항, 인식 성공 후 action 실행 전 지연 시간 (ms); 기본값 0
|
||||
"postDelay": 1000, // 선택 사항, action 실행 후 다음 next 인식 전 지연 시간 (ms); 기본값 0
|
||||
|
||||
"roi": [ 0, 0, 1280, 720 ], // 선택 사항, 인식 범위를 나타냅니다. 포맷은 [ x, y, width, height ]입니다.
|
||||
// 자동으로 1280 * 720으로 확장됩니다. 입력하지 않으면 기본값은 [ 0, 0, 1280, 720 ]입니다.
|
||||
// 가능한 한 많이 작성하고 인식 범위를 축소하면 성능 소비가 줄어들고 인식 속도가 빨라질 수 있습니다.
|
||||
"roi": [0, 0, 1280, 720], // 선택 사항, 인식 범위 [x, y, width, height]
|
||||
// 1280 * 720 기준 자동 스케일링; 기본값 [0, 0, 1280, 720]
|
||||
// 범위를 줄이면 성능 소모를 줄이고 인식 속도를 높일 수 있음
|
||||
|
||||
"cache": false, // 선택 사항, 작업이 캐싱을 사용하는지 여부를 나타냅니다. 기본값은 false입니다.
|
||||
// 최초 인식 이후에는 해당 위치만 인식하며, 성능을 크게 개선할 수 있습니다.
|
||||
"cache": true, // 선택 사항, 캐시 사용 여부, 기본값 true;
|
||||
// 첫 인식 성공 시 이후에는 해당 위치에서만 인식. 성능 대폭 절약 가능
|
||||
// 단, 인식 대상 위치가 절대 변하지 않는 경우에만 사용. 변할 수 있다면 false로 설정
|
||||
|
||||
"rectMove": [0, 0, 0, 0], // 선택 사항, 인식 후 목표 이동 (비권장). 1280 * 720 기준 자동 스케일링
|
||||
// 예: A를 인식했지만 실제 클릭은 A 아래 10픽셀 5*2 영역일 때
|
||||
// [0, 10, 5, 2]로 설정. 가능하면 클릭 위치를 직접 인식하는 것을 권장
|
||||
// 추가로, action이 Swipe일 때 유효하며 필수 (스와이프 종점)
|
||||
|
||||
// 단, 대상 인식 위치가 절대로 변하지 않을 작업에만 사용하세요. 대상 인식 위치가 항상 변하는 경우 false로 설정하세요.
|
||||
"reduceOtherTimes": ["OtherTaskName1", "OtherTaskName2"],
|
||||
// 선택 사항, 실행 후 다른 작업의 실행 카운트 감소
|
||||
// 예: 이성 회복제 사용 시, 이전에 누른 파란색 작전 시작 버튼이 무효화되었으므로 해당 작업 카운트 -1
|
||||
|
||||
"rectMove": [ 0, 0, 0, 0 ], // 선택 사항, 인식 후 대상 이동을 나타냅니다. Auto-scaling으로 기준은 1280 * 720입니다.
|
||||
// 예를 들어 A가 인식되지만 클릭해야 할 실제 위치는 A 아래 10 픽셀 5 * 2 영역의 어딘가에 있을 경우
|
||||
// [ 0, 10, 5, 2 ]를 채우고 가능한 경우 바로 클릭할 위치를 인식합니다. 이 옵션은 권장하지 않습니다.
|
||||
// 추가적으로, action이 Swipe인 경우 유효하고 필수입니다. 슬라이드의 끝점을 나타냅니다.
|
||||
"specificRect": [100, 100, 50, 50],
|
||||
// action이 ClickRect일 때 유효하며 필수, 지정 클릭 위치 (범위 내 무작위 점)
|
||||
// action이 Swipe일 때 유효하며 필수, 스와이프 시점
|
||||
// 1280 * 720 기준 자동 스케일링
|
||||
// algorithm이 "OcrDetect"일 때, specificRect[0]과 [1]은 그레이스케일 상/하한 임계값
|
||||
|
||||
"reduceOtherTimes": [ "OtherTaskName1", "OtherTaskName2" ],
|
||||
// 선택 사항, 다른 작업의 실행 횟수를 줄이기 위해 실행합니다.
|
||||
// 예를 들어 정신약을 먹으면 마지막으로 파란색 시작 동작 버튼을 클릭한 효과가 없으므로 파란색 시작 동작이 -1됩니다.
|
||||
"specialParams": [int, ...], // 특정 인식기에 필요한 추가 파라미터
|
||||
// action이 Swipe일 때 선택 사항: [0] duration, [1] 추가 슬라이드 활성화 여부
|
||||
|
||||
"specificRect": [ 100, 100, 50, 50 ],
|
||||
// action이 ClickRect인 경우 유효하고 필수입니다. 지정된 클릭 위치를 나타냅니다 (범위 내의 무작위 점).
|
||||
// action이 Swipe인 경우 유효하고 필수입니다. 슬라이드의 시작점을 나타냅니다.
|
||||
// Auto-scaling으로 기준은 1280 * 720입니다.
|
||||
// algorithm이 "OcrDetect"일 경우, specificRect[0]과 specificRect[1]은 그레이스케일의 상한선과 하한선 임계값을 나타냅니다.
|
||||
"highResolutionSwipeFix": false, // 선택 사항, 고해상도 스와이프 보정 활성화 여부
|
||||
// 현재 스테이지 내비게이션만 Unity 스와이프를 사용하지 않으므로 켜야 함
|
||||
// 기본값 false
|
||||
|
||||
"specialParams": [ int, ... ], // 일부 특수 인식기에 필요한 매개변수를 나타냅니다.
|
||||
// 추가 옵션, action이 Swipe인 경우 [0]은 지속 시간, [1]은 추가 슬라이드 여부를 나타냅니다.
|
||||
/* 이하 필드는 algorithm이 MatchTemplate일 때만 유효 */
|
||||
|
||||
"highResolutionSwipeFix": false, // 선택 항목. 고해상도 스와이프 보정을 활성화할지 여부.
|
||||
// 현재는 스테이지 내비게이션만 Unity 스와이프 방식을 사용하지 않으므로 이 옵션을 켜야 함
|
||||
// 기본값은 false
|
||||
"template": "xxx.png", // 선택 사항, 매칭할 이미지 파일명 (문자열 또는 리스트)
|
||||
// 기본값 "TaskName.png"
|
||||
// 템플릿 파일은 template 폴더 및 하위 폴더에서 재귀적으로 검색됨
|
||||
|
||||
/* 다음 필드들은 algorithm이 MatchTemplate인 경우에만 유효합니다. */
|
||||
"templThreshold": 0.8, // 선택 사항, 템플릿 매칭 점수 임계값. 이 값 이상이어야 인식 성공 (숫자 또는 리스트)
|
||||
// 기본값 0.8, 실제 점수는 로그 확인
|
||||
|
||||
"template": "xxx.png", // 선택 사항, 이미지 매칭에 사용할 이미지 파일의 이름을 나타냅니다.
|
||||
// 기본값은 "작업이름.png"입니다.
|
||||
"maskRange": [1, 255], // 선택 사항, 매칭 시 그레이스케일 마스크 범위. array<int, 2>
|
||||
// 예: 인식 불필요 부분을 검은색(0)으로 칠하고
|
||||
// [1, 255]로 설정하면 검은색 부분 무시
|
||||
|
||||
"templThreshold": 0.8, // 선택 사항, 이미지 템플릿 매칭 점수의 임계값을 나타냅니다. 이 점수 이상인 경우 이미지가 인식되었다고 판단합니다.
|
||||
// 기본값은 0.8입니다. 실제 점수는 로그에서 확인할 수 있습니다.
|
||||
|
||||
"maskRange": [ 1, 255 ], // 선택 사항, 흑백 마스크 범위를 나타냅니다.
|
||||
// 예를 들어 인식할 필요가 없는 이미지 부분은 검은색으로 칠해질 수 있습니다 (0의 흑백 값).
|
||||
// 그러면 "maskRange"를 [ 1, 255 ]로 설정하면 검은색 처리된 부분은 즉시 무시됩니다.
|
||||
|
||||
|
||||
"colorScales": [ // method가 HSVCount 또는 RGBCount일 때 유효하고 필수, 색상 마스크 범위.
|
||||
"colorScales": [ // method가 HSVCount 또는 RGBCount일 때 유효하며 필수, 색상 카운트 마스크 범위
|
||||
[ // list<array<array<int, 3>, 2>> / list<array<int, 2>>
|
||||
[23, 150, 40], // 구조는 [[lower1, upper1], [lower2, upper2], ...]
|
||||
[25, 230, 150] // 내측이 int일 경우는 그레이스케일,
|
||||
], // array<int, 3>일 경우는 삼채널 색상으로, method에 따라 RGB 또는 HSV로 결정됩니다;
|
||||
... // 중간 층의 array<*, 2>는 색상(또는 그레이스케일)의 하한과 상한:
|
||||
], // 외층은 다른 색상 범위를 나타내며, 식별할 영역은 템플릿 이미지에서 이들의 마스크의 합집합입니다.
|
||||
[23, 150, 40], // 구조: [[lower1, upper1], [lower2, upper2], ...]
|
||||
[25, 230, 150] // 내부가 int면 그레이스케일,
|
||||
], // array<int, 3>이면 3채널 색상 (method에 따라 RGB/HSV)
|
||||
... // 중간층 array<*, 2>는 색상(또는 그레이스케일) 하한/상한
|
||||
], // 최외각은 서로 다른 색상 범위를 나타내며, 인식 대상 영역은 이들의 마스크 합집합임
|
||||
|
||||
"colorWithClose": true, // 선택 사항, method가 HSVCount 또는 RGBCount일 때 유효, 기본값은 true
|
||||
// 색상 수를 세는 동안 마스크 범위에 먼저 닫힘 연산을 적용할지 여부.
|
||||
// 닫힘 연산은 작은 검은 점을 메울 수 있으며, 일반적으로 색상 수 세기 매칭 효과를 향상시키지만 이미지에 텍스트가 포함된 경우 false로 설정하는 것이 좋습니다
|
||||
"colorWithClose": true, // 선택 사항, method가 HSVCount/RGBCount일 때 유효, 기본값 true
|
||||
// 색상 카운트 시 마스크 범위에 대해 닫힘 연산(Closing) 수행 여부
|
||||
// 작은 구멍을 메워 매칭 효과를 높이나, 글자가 포함된 경우 false 권장
|
||||
|
||||
"pureColor": false, // 선택 사항, method가 HSVCount 또는 RGBCount일 때 유효, 기본값은 false
|
||||
// true인 경우 템플릿 매칭 점수를 무시하고 색상 매칭 결과에만 의존
|
||||
// 색상 특징이 뚜렷하지만 템플릿 매칭 효과가 좋지 않은 시나리오에 적합
|
||||
// 이 옵션 사용 시 templThreshold를 상향 조정하는 것이 권장됨
|
||||
"pureColor": false, // 선택 사항, method가 HSVCount/RGBCount일 때 유효, 기본값 false
|
||||
// true일 경우 템플릿 매칭 점수 무시, 색상 매칭 결과만 신뢰
|
||||
// 색상 특징은 뚜렷하나 템플릿 매칭이 잘 안 될 때 사용
|
||||
// 사용 시 templThreshold를 높이는 것을 권장
|
||||
|
||||
"method": "Ccoeff", // 선택 사항, 템플릿 매칭 알고리즘, 목록 형태일 수 있음
|
||||
// 지정하지 않을 경우 기본값은 Ccoeff
|
||||
// - Ccoeff: 색상에 민감하지 않은 템플릿 매칭 알고리즘, cv::TM_CCOEFF_NORMED에 해당
|
||||
// - RGBCount: 색상에 민감한 템플릿 매칭 알고리즘,
|
||||
// 먼저 마스크 범위에 따라 매칭 영역과 템플릿 이미지를 이진화하고,
|
||||
// RGB 색 공간 내의 유사도를 F1-score를 지표로 계산한 후,
|
||||
// 결과를 Ccoeff 결과와 점곱합니다
|
||||
// - HSVCount: RGBCount와 유사하지만 색상 공간을 HSV로 변경
|
||||
"method": "Ccoeff", // 선택 사항, 템플릿 매칭 알고리즘 (리스트 가능)
|
||||
// 비워둘 시 기본값 Ccoeff
|
||||
// - Ccoeff: 색상에 둔감한 템플릿 매칭 (cv::TM_CCOEFF_NORMED)
|
||||
// - RGBCount: 색상에 민감. colorScales로 이진화 후
|
||||
// RGB 공간 내 유사도(F1-score) 계산,
|
||||
// 그 결과를 Ccoeff 결과와 곱함
|
||||
// - HSVCount: RGBCount와 유사하나 HSV 공간 사용
|
||||
|
||||
/* 다음 필드들은 algorithm이 OcrDetect인 경우에만 유효합니다. */
|
||||
/* 이하 필드는 algorithm이 OcrDetect일 때만 유효 */
|
||||
|
||||
"text": [ "接管作战", "代理指挥" ], // 필수 사항, 인식할 텍스트 내용을 나타냅니다. 어떤 항목이 일치하면 인식되었다고 판단합니다.
|
||||
"text": [ "작전 수행", "대리 지휘" ], // 필수, 인식할 텍스트 내용. 하나라도 매칭되면 성공
|
||||
|
||||
"ocrReplace": [ // 선택 사항, 자주 오인식되는 텍스트를 대체할 내용입니다 (정규표현식 지원).
|
||||
[ "千员", "干员" ],
|
||||
[ ".+击干员", "狙击干员" ]
|
||||
"ocrReplace": [ // 선택 사항, 자주 오인식되는 텍스트 교정 (정규식 지원)
|
||||
[ "머틀", "머틀" ],
|
||||
[ ".+격대원", "저격대원" ]
|
||||
],
|
||||
|
||||
"fullMatch": false, // 선택 사항, 텍스트 인식이 모든 단어를 일치시키는지 여부를 나타냅니다. 기본값은 false입니다.
|
||||
// false인 경우, 부분 문자열인 경우 인식됩니다. 예를 들어 text: [ "시작" ]이면 실제 인식에서 "시작 작업"도 인식됩니다.
|
||||
// true인 경우, "시작"만 인식되어야 합니다.
|
||||
"fullMatch": false, // 선택 사항, 전체 일치 여부, 기본값 false
|
||||
// false: 부분 문자열 매칭 허용 (예: text ["시작"] -> "작전 시작" 인식 성공)
|
||||
// true: 정확히 일치해야 함 ("시작" -> "작전 시작" 실패)
|
||||
|
||||
"isAscii": false, // 선택 사항, 인식할 텍스트 내용이 ASCII 문자인지 여부를 나타냅니다.
|
||||
// 기본값은 false입니다.
|
||||
"isAscii": false, // 선택 사항, 인식 대상이 ASCII 문자인지 여부
|
||||
// 기본값 false
|
||||
|
||||
"withoutDet": false, // 선택 사항, 탐지 모델을 사용하지 않을지 여부를 나타냅니다.
|
||||
// 기본값은 false입니다.
|
||||
"withoutDet": false, // 선택 사항, 디텍션 모델 미사용 여부
|
||||
// 기본값 false
|
||||
|
||||
/* 다음 필드들은 algorithm이 OcrDetect이고 withoutDet가 true일 때만 유효합니다 */
|
||||
/* 이하 필드는 algorithm이 OcrDetect이고 withoutDet가 true일 때만 유효 */
|
||||
|
||||
"useRaw": true, // 선택 사항, 원본 이미지를 사용하여 매칭할지 여부
|
||||
// 기본값은 true이며, false이면 그레이스케일 매칭
|
||||
"useRaw": true, // 선택 사항, 원본 이미지 사용 여부
|
||||
// 기본값 true, false면 그레이스케일 매칭
|
||||
|
||||
"binThreshold": [140, 255], // 선택 사항. 그레이스케일 이진화의 상한 임계값 (기본값: [140, 255])
|
||||
// 이 값보다 높은 픽셀은 배경으로 간주되어 문자 영역에서 제외됩니다
|
||||
// 최종적으로 [lower, upper] 범위의 픽셀만 문자 전경으로 유지됩니다
|
||||
"binThreshold": [140, 255], // 선택 사항, 이진화 임계값 (기본값 [140, 255])
|
||||
// 범위 밖 픽셀은 배경으로 간주되어 제외됨
|
||||
// [lower, upper] 구간 픽셀만 전경(글자)으로 남음
|
||||
|
||||
/* 다음 필드들은 algorithm이 JustReturn이고 action이 Input일 때만 유효합니다 */
|
||||
/* 이하 필드는 algorithm이 JustReturn, action이 Input일 때만 유효 */
|
||||
|
||||
"inputText": "A string text.", // 필수 사항. 입력할 문자열 내용, 문자열 형식
|
||||
"inputText": "A string text.", // 필수, 입력할 문자열
|
||||
|
||||
/* 다음 필드들은 FeatureMatch인 경우에만 유효합니다. */
|
||||
/* 이하 필드는 algorithm이 FeatureMatch일 때만 유효 */
|
||||
|
||||
"template": "xxx.png", // 선택 사항. 일치시킬 이미지 파일 이름. 문자열 또는 문자열 목록일 수 있습니다.
|
||||
// 기본값: "taskname.png"
|
||||
"template": "xxx.png", // 선택 사항, 매칭할 이미지 파일명 (문자열/리스트)
|
||||
// 기본값 "TaskName.png"
|
||||
|
||||
"count": 4, // 일치시킬 특징점 수(임계값), 기본값: 4
|
||||
"count": 4, // 매칭 특징점 수 (임계값), 기본값 4
|
||||
|
||||
"ratio": 0.6, // KNN 일치 알고리즘의 거리 비율, [0 - 1.0]. 비율이 클수록 일치가 느슨해지고 연결하기가 더 쉽습니다. 기본값: 0.6
|
||||
"ratio": 0.6, // KNN 매칭 거리 비율 [0 - 1.0]. 클수록 느슨하여 매칭 쉬움. 기본값 0.6
|
||||
|
||||
"detector": "SIFT", // 특징점 검출기 유형, 선택 사항: SIFT, ORB, BRISK, KAZE, AKAZE, SURF; 기본값: SIFT
|
||||
// SIFT: 높은 계산 복잡도, 스케일 불변성, 회전 불변성. 최상의 효과.
|
||||
// ORB: 매우 빠른 계산 속도, 회전 불변성. 하지만 스케일 불변성은 없습니다.
|
||||
// BRISK: 매우 빠른 계산 속도, 스케일 불변성, 회전 불변성을 가집니다.
|
||||
// KAZE: 2D 및 3D 이미지에 적용 가능하며, 스케일 불변성과 회전 불변성을 가집니다.
|
||||
// AKAZE: 빠른 계산 속도, 스케일 불변성과 회전 불변성을 가집니다.
|
||||
"detector": "SIFT", // 특징점 검출기. SIFT, ORB, BRISK, KAZE, AKAZE, SURF. 기본값 SIFT
|
||||
// SIFT: 느리지만 스케일/회전 불변성 우수. 성능 최고.
|
||||
// ORB: 매우 빠름, 회전 불변. 스케일 불변성 없음.
|
||||
// BRISK: 매우 빠름, 스케일/회전 불변.
|
||||
// KAZE: 2D/3D 적용 가능, 스케일/회전 불변.
|
||||
// AKAZE: 빠름, 스케일/회전 불변.
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 표현식 계산
|
||||
|
||||
작업 목록 유형 필드 (`sub`, `next`, `onErrorNext`, `exceededNext`, `reduceOtherTimes`)는 표현식 계산을 지원합니다.
|
||||
|
||||
| 기호 | 의미 | 예시 |
|
||||
| :--------: | :-------------------------------------------------------: | :------------------------------------: |
|
||||
| `@` | `@` 형 작업 | `Fight@ReturnTo` |
|
||||
| `#` (단항) | 가상 작업 | `#self` |
|
||||
| `#` (이항) | 가상 작업 | `StartUpThemes#next` |
|
||||
| `*` | 다중 작업 반복 | `(ClickCornerAfterPRTS+ClickCorner)*5` |
|
||||
| `+` | 작업 목록 병합 (next 계열 필드에서 동명 작업은 앞쪽 우선) | `A+B` |
|
||||
| `^` | 작업 목록 차집합 (전자에만 존재, 순서 유지) | `(A+A+B+C)^(A+B+D)` (결과는 `C`) |
|
||||
|
||||
연산자 `@`, `#`, `*`, `+`, `^`의 우선순위: `#`(단항) > `@` = `#`(이항) > `*` > `+` = `^`.
|
||||
|
||||
## 특수 작업 유형
|
||||
|
||||
### 템플릿 작업(`@` 유형 작업)
|
||||
### 템플릿 작업
|
||||
|
||||
템플릿 작업과 기반 작업을 함께 **템플릿 작업**이라고 합니다.
|
||||
**템플릿 작업**은 파생 작업과 `@` 형 작업을 포함합니다. 템플릿 작업의 핵심은 기반 작업을 바탕으로 **필드의 기본값을 수정**하는 것입니다.
|
||||
|
||||
작업 "A"를 템플릿으로 사용하고 "B@A"로 표기하여 "A"를 통해 생성된 작업을 나타낼 수 있습니다.
|
||||
#### 파생 작업 (Derived Task)
|
||||
|
||||
- 작업 "B@A"가 `tasks.json`에 명시적으로 정의되어 있지 않으면 `sub`, `next`, `onErrorNext`, `exceededNext`, `reduceOtherTimes` 필드에 "B@" 접두사를 추가합니다(또는 작업 이름이 `#`로 시작하는 경우 "B"로 접두사를 추가
|
||||
`baseTask` 필드가 존재하는 작업이 파생 작업이며, `baseTask`에 지정된 작업을 해당 파생 작업의 **기반 작업(Base Task)**이라고 합니다. 파생 작업에서:
|
||||
|
||||
합니다). 나머지 매개변수는 "A" 작업과 동일합니다. 즉, 작업 "A"에 다음과 같은 매개변수가 있는 경우:
|
||||
1. 템플릿 매칭 작업이라도 **`template` 필드**의 기본값은 여전히 `"TaskName.png"`입니다.
|
||||
2. `algorithm` 필드가 기반 작업과 다르면, 파생 클래스 파라미터는 상속되지 않습니다 (TaskInfo 정의 파라미터만 상속).
|
||||
3. 나머지 필드의 기본값은 모두 **기반 작업의 해당 필드**를 따릅니다.
|
||||
|
||||
```json
|
||||
"A": {
|
||||
"template": "A.png",
|
||||
...,
|
||||
"next": [ "N1", "N2" ]
|
||||
}
|
||||
```
|
||||
#### 암시적 `@` 형 작업
|
||||
|
||||
이는 다음과 같이 정의한 것과 동일합니다.
|
||||
작업 `"A"`가 존재할 때, 작업 파일에 직접 정의되지 않았지만 `"B@A"` 형태의 작업이 사용되면 이를 암시적 `@` 형 작업이라 합니다. 작업 `"A"`는 작업 `"B@A"`의 **기반 작업**이 됩니다. 암시적 `@` 형 작업에서:
|
||||
|
||||
```json
|
||||
"B@A": {
|
||||
"template": "A.png",
|
||||
...,
|
||||
"next": [ "B@N1", "B@N2" ]
|
||||
}
|
||||
```
|
||||
1. 작업 목록 유형 필드(`sub`, `next`, `onErrorNext`, `exceededNext`, `reduceOtherTimes`)의 기본값은 기반 작업의 해당 필드에 **직접** `B@` 접두사를 붙인 값이 됩니다 (작업명이 `#`로 시작하면 `B` 접두사).
|
||||
2. 나머지 필드의 기본값은 모두 **기반 작업의 해당 필드**를 따릅니다 (필드 `template` 포함).
|
||||
|
||||
- 작업 "B@A"가 `tasks.json`에 정의되어 있다면
|
||||
1. `B@A`의 `algorithm` 필드가 `A`의 `algorithm`과 다른 경우, 파생된 클래스 매개변수는 상속되지 않습니다(단지 `TaskInfo`로 정의된 매개변수만 상속됨).
|
||||
2. 이미지 매칭 작업의 경우, 명시적으로 정의되지 않으면 `template`은 `B@A.png`가 됩니다(단지 "A" 작업의 `template` 이름을 상속하지 않음). 그렇지 않은 경우 다른 파생된 클래스 매개변수는 "A" 작업에서 직접 상속됩니다.
|
||||
3. `TaskInfo` 기본 클래스에 정의된 매개변수 (모든 유형의 작업에 해당하는 매개변수, 예를 들어 algorithm, roi, next 등)가 `B@A` 내에서 명시적으로 정의되지 않은 경우, 앞에서 언급한 `sub` 등 다섯 개의 필드를 제외한 나머지 매개변수는 `B@` 접두어가 추가된 상속시 추가됩니다. 그 외의 매개변수는 `A` 작업의 매개변수를 직접 상속합니다.
|
||||
#### 명시적 `@` 형 작업
|
||||
|
||||
> _참고: `"XXX#self"`는 `"#self"`와 동일한 의미를 갖습니다._
|
||||
작업 `"A"`가 존재하고, 작업 파일에 `"B@A"` 형태의 작업이 직접 정의되어 있으면 이를 명시적 `@` 형 작업이라 합니다. 작업 `"A"`는 작업 `"B@A"`의 **기반 작업**이 됩니다. 명시적 `@` 형 작업에서:
|
||||
|
||||
### 기반 작업
|
||||
1. 작업 목록 유형 필드(`sub`, `next`, `onErrorNext`, `exceededNext`, `reduceOtherTimes`)의 기본값은 기반 작업의 해당 필드에 **직접** `B@` 접두사를 붙인 값이 됩니다 (작업명이 `#`로 시작하면 `B` 접두사).
|
||||
2. 템플릿 매칭 작업이라도 **`template` 필드**의 기본값은 여전히 `"TaskName.png"`입니다.
|
||||
3. `algorithm` 필드가 기반 작업과 다르면, 파생 클래스 파라미터는 상속되지 않습니다 (TaskInfo 정의 파라미터만 상속).
|
||||
4. 나머지 필드의 기본값은 모두 **기반 작업의 해당 필드**를 따릅니다.
|
||||
|
||||
기반 작업과 템플릿 작업을 함께 **템플릿 작업**이라고 합니다.
|
||||
### 가상 작업 (`#` 형 작업)
|
||||
|
||||
`baseTask` 필드가 있는 작업은 기반 작업입니다.
|
||||
가상 작업은 `"#{sharp_type}"` 또는 `"B#{sharp_type}"` 형태의 작업입니다. 여기서 `{sharp_type}`은 `none`, `self`, `back`, `next`, `sub`, `on_error_next`, `exceeded_next`, `reduce_other_times` 중 하나입니다.
|
||||
|
||||
기반 작업은 템플릿 작업보다 우선합니다. 즉, `"B@A": { "baseTask": "C", ... }`는 작업 A와 관련이 없습니다.
|
||||
가상 작업은 **명령 가상 작업**(`none` / `self` / `back`)과 **필드 가상 작업**(`next` 등)으로 나뉩니다.
|
||||
|
||||
명시적으로 정의되지 않은 모든 매개변수는 해당 작업이 접두사 없이 기반 작업의 매개변수를 사용하며, `template`은 명시적으로 정의되지 않은 경우에는 여전히 `"작업이름.png"`입니다.
|
||||
| 가상 작업 유형 | 의미 | 간단 예시 |
|
||||
| :------------: | :-------------------: | :----------------------------------------------------------------------------------------------------------------------: |
|
||||
| none | 빈 작업 | 직접 건너뜀<sup>1</sup><br>`"A": {"next": ["#none", "T1"]}` -> `"A": {"next": ["T1"]}`<br>`"A#none + T1"` -> `"T1"` |
|
||||
| self | 현재 작업명 | `"A": {"next": ["#self"]}`의 `"#self"` -> `"A"`<br>`"B": {"next": ["A@B@C#self"]}`의 `"A@B@C#self"` -> `"B"`<sup>2</sup> |
|
||||
| back | # 앞의 작업명 | `"A@B#back"` -> `"A@B"`<br>`"#back"`이 직접 등장하면 건너뜀<sup>3</sup> |
|
||||
| next, sub 등 | # 앞 작업의 해당 필드 | `next` 예시:<br>`"A#next"` -> `Task.get("A")->next`<br>`"#next"`가 직접 등장하면 건너뜀 |
|
||||
|
||||
#### 멀티 파일 Task
|
||||
_Note<sup>1</sup>: `"#none"`은 주로 템플릿 작업의 접두사 추가 특성과 함께 사용하거나, `baseTask` 사용 시 불필요한 필드 상속을 피하기 위해 사용합니다._
|
||||
|
||||
나중에 로드된 작업 파일 (예: 글로벌 서버의 `tasks.json` 파일)에서 정의된 작업이 먼저 로드된 작업 파일 (예: CN 서버의 `tasks.json` 파일)에서도 동일한 이름의 작업이 정의된 경우 다음과 같습니다:
|
||||
_Note<sup>2</sup>: `"XXX#self"`와 `"#self"`는 동일한 의미입니다._
|
||||
|
||||
- 파일 2에 작업에 `baseTask` 필드가 없으면 파일 1에서 동일한 이름의 작업의 필드를 직접 상속합니다
|
||||
- 파일 2에 작업에 `baseTask` 필드가 있으면 파일 1에서 동일한 이름의 작업의 필드를 직접 상속하는 대신에 덮어씁니다.
|
||||
_Note<sup>3</sup>: 여러 작업이 `"next": [ "#back" ]`을 가질 때, `"T1@T2@T3"`는 `T3`, `T2`, `T1` 순으로 실행됨을 의미합니다._
|
||||
|
||||
### 가상 작업
|
||||
### 다중 파일 작업
|
||||
|
||||
가상 작업은 또한 숫자 기호(`#` 유형 작업)로 불립니다.
|
||||
나중에 로드된 작업 파일(예: 외섭 `tasks.json`, 이하 파일2)에 정의된 작업이 먼저 로드된 작업 파일(예: 중섭 `tasks.json`, 이하 파일1)에도 정의되어 있다면:
|
||||
|
||||
이름에 `#`이 포함된 작업은 가상 작업입니다. `#` 다음에는 `next`, `back`, `self`, `sub`, `on_error_next`, `exceeded_next`, `reduce_other_times`가 따라옵니다.
|
||||
|
||||
| 가상 작업 유형 | 의미 | 간단한 예시 |
|
||||
| :------------: | :----------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------: |
|
||||
| self | 부모 작업 이름 | `"A": {"next": "#self"}`에서 `"#self"`는 `"A"`로 해석됩니다.`<br>"B": {"next": "A@B@C#self"}`에서 `"A@B@C#self"`은 `"B"`로 해석됩니다.`<sup>`1 `</sup>` |
|
||||
| back | # 앞 작업 이름 | `"A@B#back"`은 `"A@B"`로 해석됩니다.`<br>`직접 나타날 경우 `"#back"`은 무시됩니다. |
|
||||
| next, sub 등 | 이전 작업 이름에 대응하는 필드 | `next`를 예로 들면:`<br>"A#next"`는 `Task.get("A")->next`로 해석됩니다.`<br>`직접 나타날 경우 `"#next"`은 무시됩니다. |
|
||||
|
||||
_참고 `<sup>`1 `</sup>`: `"XXX#self"`는 `"#self"`와 같은 의미를 갖습니다._
|
||||
|
||||
#### 간단한 예시
|
||||
|
||||
```json
|
||||
{
|
||||
"A": { "next": [ "N1", "N2" ] },
|
||||
"C": { "next": [ "B@A#next" ] },
|
||||
|
||||
"Loading": {
|
||||
"next": [ "#self", "#next", "#back" ]
|
||||
},
|
||||
"B": {
|
||||
"next": [ "Other", "B@Loading" ]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
다음 형식도 가능합니다.
|
||||
|
||||
```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" };
|
||||
```
|
||||
|
||||
#### 몇 가지 사용 예시
|
||||
|
||||
- `"next": ["#back"]`와 같이 여러 작업이 주어진 경우, `"Task1@Task2@Task3"`은 `Task3`, `Task2`, `Task1` 순으로 순차적으로 실행됨을 나타냅니다.
|
||||
|
||||
#### 기타 관련 정보
|
||||
|
||||
```json
|
||||
{
|
||||
"A": { "next": ["N0"] },
|
||||
"B": { "next": ["A#next"] },
|
||||
"C@A": { "next": ["N1"] }
|
||||
}
|
||||
```
|
||||
|
||||
위의 예시에서, `"C@B" -> next` (즉, `C@A#next`)는 `["N1"]`이 아닌 `["C@N0"]`입니다.
|
||||
|
||||
## 런타임에서 작업 수정
|
||||
|
||||
- `Task.lazy_parse()`는 런타임에서 json 작업 구성 파일을 로드할 수 있습니다. lazy_parse 규칙은 [멀티파일 Task](#멀티-파일-task)와 동일합니다.
|
||||
- `Task.set_task_base()`를 사용하여 작업의 `baseTask` 필드를 수정할 수 있습니다.
|
||||
- 파일2 작업에 `baseTask` 필드가 **없으면**, 파일1의 동명 작업 필드를 직접 상속합니다.
|
||||
- 파일2 작업에 `baseTask` 필드가 **있으면**, 파일1의 동명 작업 필드를 상속하지 않고 **덮어씁니다**. 특히, 템플릿이 없을 때 `"baseTask": "#none"`을 사용하여 불필요한 필드 상속을 막을 수 있습니다.
|
||||
|
||||
### 사용 예시
|
||||
|
||||
다음과 같은 작업 구성 파일이 있다고 가정합니다.
|
||||
- 파생 작업 예시 (`baseTask` 필드)
|
||||
|
||||
다음 두 작업이 정의되어 있다고 가정합니다:
|
||||
|
||||
```json
|
||||
"Return": {
|
||||
"action": "ClickSelf",
|
||||
"next": [ "Stop" ]
|
||||
},
|
||||
"Return2": {
|
||||
"baseTask": "Return"
|
||||
},
|
||||
```
|
||||
|
||||
`"Return2"` 작업은 `"Return"` 작업을 상속받아 실제로 다음 파라미터를 가집니다:
|
||||
|
||||
```json
|
||||
"Return2": {
|
||||
"algorithm": "MatchTemplate", // 직접 상속
|
||||
"template": "Return2.png", // "TaskName.png" 규칙 (템플릿 매칭이므로)
|
||||
"action": "ClickSelf", // 직접 상속
|
||||
"next": [ "Stop" ] // 직접 상속 (Template Task와 달리 접두사 없음)
|
||||
}
|
||||
```
|
||||
|
||||
- `@` 형 작업 예시
|
||||
|
||||
다음 파라미터를 가진 작업 `"A"`가 있다고 가정합니다:
|
||||
|
||||
```json
|
||||
"A": {
|
||||
"template": "A.png",
|
||||
...,
|
||||
"next": [ "N1", "#back" ]
|
||||
},
|
||||
```
|
||||
|
||||
작업 `"B@A"`가 직접 정의되지 않았다면(암시적), `"B@A"`는 실제로 다음 파라미터를 가집니다:
|
||||
|
||||
```json
|
||||
"B@A": {
|
||||
"template": "A.png",
|
||||
...,
|
||||
"next": [ "B@N1", "B#back" ]
|
||||
}
|
||||
```
|
||||
|
||||
작업 `"B@A"`가 `"B@A": {}`로 정의되어 있다면(명시적), `"B@A"`는 실제로 다음 파라미터를 가집니다:
|
||||
|
||||
```json
|
||||
"B@A": {
|
||||
"template": "B@A.png",
|
||||
...,
|
||||
"next": [ "B@N1", "B#back" ]
|
||||
}
|
||||
```
|
||||
|
||||
- 가상 작업 예시
|
||||
|
||||
```json
|
||||
{
|
||||
"A": { "next": ["N1", "N2"] },
|
||||
"C": { "next": ["B@A#next"] },
|
||||
|
||||
"Loading": {
|
||||
"next": ["#self", "#next", "#back"]
|
||||
},
|
||||
"B": {
|
||||
"next": ["Other", "B@Loading"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
결과는 다음과 같습니다:
|
||||
|
||||
```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" };
|
||||
```
|
||||
|
||||
### 주의 사항
|
||||
|
||||
작업 목록 유형 필드(`next` 등)에 정의된 작업이 낮은 우선순위 연산을 포함할 경우, 실제 결과가 예상과 다를 수 있습니다.
|
||||
|
||||
1. `@`와 이항 `#` 연산 순서에 따른 특례
|
||||
|
||||
```json
|
||||
{
|
||||
"A": { "next": ["N0"] },
|
||||
"B": { "next": ["A#next"] },
|
||||
"C@A": { "next": ["N1"] }
|
||||
}
|
||||
```
|
||||
|
||||
이 경우, `"C@B" -> next` (즉 `C@A#next`)는 `[ "N1" ]`이 되며, `[ "C@N0" ]`가 아닙니다.
|
||||
|
||||
2. `@`와 `+` 연산 순서에 따른 특례
|
||||
|
||||
```json
|
||||
{
|
||||
"A": { "next": ["#back + N0"] },
|
||||
"B@A": {}
|
||||
}
|
||||
```
|
||||
|
||||
이 경우,
|
||||
|
||||
```cpp
|
||||
Task.get("A")->next = { "N0" };
|
||||
|
||||
Task.get_raw("B@A")->next = { "B#back + N0" };
|
||||
Task.get("B@A")->next = { "B", "N0" }; // [ "B", "B@N0" ]가 아님에 주의
|
||||
```
|
||||
|
||||
사실 이 특성을 이용해 불필요한 접두사 추가를 피할 수 있습니다:
|
||||
|
||||
```json
|
||||
{
|
||||
"A": { "next": ["#none + N0"] }
|
||||
}
|
||||
```
|
||||
|
||||
## 런타임 작업 수정
|
||||
|
||||
- `Task.lazy_parse()`는 런타임에 JSON 작업 설정을 로드할 수 있습니다. lazy_parse 규칙은 [다중 파일 작업](#다중-파일-작업)과 동일합니다.
|
||||
- `Task.set_task_base()`는 작업의 `baseTask` 필드를 수정할 수 있습니다.
|
||||
|
||||
### 사용 예시
|
||||
|
||||
다음과 같은 작업 설정 파일이 있다고 가정합니다:
|
||||
|
||||
```json
|
||||
{
|
||||
"A": {
|
||||
"baseTask": "A_default"
|
||||
},
|
||||
"A_default": {
|
||||
"next": ["xxx"]
|
||||
},
|
||||
"A_mode1": {
|
||||
"next": ["yyy"]
|
||||
},
|
||||
"A_mode2": {
|
||||
"next": ["zzz"]
|
||||
}
|
||||
"A": {
|
||||
"baseTask": "A_default"
|
||||
},
|
||||
"A_default": {
|
||||
"next": ["xxx"]
|
||||
},
|
||||
"A_mode1": {
|
||||
"next": ["yyy"]
|
||||
},
|
||||
"A_mode2": {
|
||||
"next": ["zzz"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
다음 코드는 `mode` 값에 따라 작업 "A"를 변경하며, "A"에 의존하는 다른 작업인 "B@A" 등도 변경됩니다:
|
||||
다음 코드는 `mode` 값에 따라 작업 "A"를 변경하며, 동시에 "B@A"와 같이 "A"에 의존하는 다른 작업들도 변경합니다:
|
||||
|
||||
```cpp
|
||||
switch (mode) {
|
||||
case 1:
|
||||
Task.set_task_base("A", "A_mode1"); // 이것은 사실상 A를 A_mode1의 내용으로 대체하는 것과 같습니다. 아래와 같이 진행됩니다.
|
||||
Task.set_task_base("A", "A_mode1"); // 기본적으로 A를 A_mode1 내용으로 덮어쓰는 것과 같음. 아래도 동일
|
||||
break;
|
||||
case 2:
|
||||
Task.set_task_base("A", "A_mode2");
|
||||
@@ -341,27 +428,14 @@ default:
|
||||
}
|
||||
```
|
||||
|
||||
## 표현식 계산
|
||||
## Schema 검증
|
||||
|
||||
| 기호 | 의미 | 예시 |
|
||||
| :---------------: | :----------------------------------------------------------------------: | :------------------------------------: |
|
||||
| `@` | 템플릿 작업 | `Fight@ReturnTo` |
|
||||
| `#` (unary/단항) | 가상 작업 | `#self` |
|
||||
| `#` (binary/이항) | 가상 작업 | `StartUpThemes#next` |
|
||||
| `*` | 작업 반복 | `(ClickCornerAfterPRTS+ClickCorner)*5` |
|
||||
| `+` | 작업 목록 병합 | `A+B` |
|
||||
| `^` | 작업 목록 차집합 (앞쪽에는 있지만 뒤쪽에는 없는 작업으로, 순서는 유지됨) | `(A+A+B+C)^(A+B+D)` (= `C`) |
|
||||
|
||||
`@`, `#`, `*`, `+`, `^` 연산자의 우선순위는 다음과 같습니다: `#` (단항) > `@` = `#` (이항) > `*` > `+` = `^`.
|
||||
|
||||
## 스키마 확인
|
||||
|
||||
이 프로젝트는 `tasks.json`에 대한 JSON 스키마 확인을 설정하며, 스키마 파일은 `docs/maa_tasks_schema.json`입니다.
|
||||
본 프로젝트는 `tasks.json`에 대한 JSON schema 검증을 구성했습니다. 프로토콜 파일은 `docs/maa_tasks_schema.json`입니다.
|
||||
|
||||
### Visual Studio
|
||||
|
||||
`MaaCore.vcxproj`에 구성되어 있으며 즉시 사용할 수 있습니다. 힌트 효과는 상대적으로 불명확하며 일부 정보가 누락됩니다.
|
||||
`MaaCore.vcxproj`에 구성되어 있어 바로 사용 가능합니다. 힌트 효과는 다소 불명확하며 일부 정보가 누락될 수 있습니다.
|
||||
|
||||
### Visual Studio Code
|
||||
|
||||
`.vscode/settings.json`에 구성되어 있으며, 해당 **프로젝트 폴더**를 vscode로 열고 사용할 수 있습니다. 힌트가 더 잘 작동합니다.
|
||||
`.vscode/settings.json`에 구성되어 있으며, VS Code로 해당 **프로젝트 폴더**를 열면 사용할 수 있습니다. 힌트 효과가 좋습니다.
|
||||
|
||||
@@ -37,7 +37,7 @@ MAA는 MAA Assistant Arknights의 약자입니다
|
||||
## 주요 기능
|
||||
|
||||
- 이성을 사용하고, 아이템 드랍을 인식해 자동으로 통계 사이트에 업로드 합니다. [펭귄 물류](https://penguin-stats.io/), [Yituliu](https://ark.yituliu.cn/)
|
||||
- 자동으로 오퍼레이터 효율을 고려해 기반시설 교대를 하며, 동시에 사용자 커스텀 교대 기능도 지원합니다. [기반시설 스키마](./protocol/base-scheduling-schema.md)
|
||||
- 자동으로 오퍼레이터 효율을 고려해 기반시설 교대를 하며, 동시에 사용자 커스텀 교대 기능도 지원합니다. [기반시설 스케줄링 프로토콜](./protocol/base-scheduling-schema.md)
|
||||
- 자동으로 공개모집 및 즉시 모집을 선택할 수 있으며, 자동으로 통계 사이트에 업로드 합니다. [펭귄 물류](https://penguin-stats.io/result/stage/recruit/recruit), [Yituliu](https://ark.yituliu.cn/survey/maarecruitdata)
|
||||
- 공개 모집 화면에서 태그 인식을 할 수 있습니다.
|
||||
- 오퍼레이터 목록을 인식해, 보유중인 오퍼레이터들 및 잠재를 통계화하여 공개모집 태그 인식 시 표시합니다.
|
||||
@@ -45,7 +45,7 @@ MAA는 MAA Assistant Arknights의 약자입니다
|
||||
- 공개 모집 인터페이스에 수동 식별을 지원하여 높은 등급의 오퍼레이터 공개 모집을 용이하게 합니다.
|
||||
- 오퍼레이터 목록을 식별하고, 보유 및 미보유 오퍼레이터와 그들의 잠재를 계산하며, 이를 공개 모집 인터페이스에서 표시하는 것을 지원합니다.
|
||||
- 원클릭으로 친구 방문 및 크레딧 획득/구매를 하며, 임무 보상 수령 등의 모든 일과를 수행합니다.
|
||||
- 통합전략에서 자동으로 오퍼레이터 레벨을 인식하며, 오리지늄 각뿔 획득 및 노드 개방과 레벨을 올려줍니다.
|
||||
- 통합 전략에서 자동으로 오퍼레이터 레벨을 인식하며, 오리지늄 각뿔 획득 및 노드 개방과 레벨을 올려줍니다.
|
||||
- Copliot 파일을 통한 자동 지휘가 가능합니다. [영상 설명](https://www.bilibili.com/video/BV1H841177Fk/)
|
||||
- C, Python, Java, Rust, Golang, Java HTTP, Rust HTTP 다음과 같은 다양한 환경에서 MAA를 사용할 수 있습니다!
|
||||
|
||||
@@ -118,9 +118,9 @@ MAA는 중국어(간체)를 기본 언어로 하며, 번역 단어는 중국어(
|
||||
- [TypeScript 인터페이스](https://github.com/MaaAssistantArknights/MaaX/tree/main/packages/main/coreLoader)
|
||||
- [Woolang 인터페이스](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/dev/src/Woolang/maa.wo):[예제](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/dev/src/Woolang/demo.wo)
|
||||
- [통합문서](./protocol/integration.md)
|
||||
- [콜백 스키마](./protocol/callback-schema.md)
|
||||
- [전투 스키마](./protocol/copilot-schema.md)
|
||||
- [작업 스키마](./protocol/task-schema.md)
|
||||
- [콜백 프로토콜](./protocol/callback-schema.md)
|
||||
- [작업 프로토콜](./protocol/task-schema.md)
|
||||
- [자동지휘 프로토콜](./protocol/copilot-schema.md)
|
||||
|
||||
### 해외 서버 현지화
|
||||
|
||||
|
||||
@@ -5,11 +5,35 @@ icon: material-symbols:download
|
||||
|
||||
# 安装及编译
|
||||
|
||||
maa-cli 提供多种方式安装,包括包管理器、预编译二进制文件和通过 `cargo` 自行编译安装。
|
||||
maa-cli 提供多种方式安装,包括预编译二进制文件、包管理器和通过 `cargo` 自行编译安装。
|
||||
|
||||
## 预编译二进制文件
|
||||
|
||||
安装 maa-cli 最简单的方式是使用安装脚本一键安装:
|
||||
|
||||
::: tabs#pre-compile
|
||||
|
||||
@tab:active Linux 和 macOS
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/MaaAssistantArknights/maa-cli/main/install.sh | bash
|
||||
```
|
||||
|
||||
@tab Windows (PowerShell)
|
||||
|
||||
```powershell
|
||||
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/MaaAssistantArknights/maa-cli/main/install.ps1" -OutFile install.ps1; .\install.ps1
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
后续你可以通过 `maa self update` 来更新 maa-cli。
|
||||
|
||||
如果你的平台不在上述列表中,可以尝试自行[编译安装](#编译安装)。
|
||||
|
||||
## 通过包管理器安装
|
||||
|
||||
对于 macOS 和受支持的 Linux 发行版用户,推荐使用包管理器安装 maa-cli。
|
||||
对于 macOS 和受支持的 Linux 发行版用户,可以使用包管理器安装 maa-cli。
|
||||
|
||||
### macOS
|
||||
|
||||
@@ -33,7 +57,7 @@ brew install MaaAssistantArknights/tap/maa-cli-beta
|
||||
|
||||
### Linux
|
||||
|
||||
我们目前为 Arch 和 Nix 用户提供预编译基于包管理器的分发支持
|
||||
Arch、Nix 以及 Linux Homebrew 用户可以通过包管理器安装 maa-cli。
|
||||
|
||||
#### Arch Linux
|
||||
|
||||
@@ -75,41 +99,18 @@ nix run github:Cryolitia/nur-packages#maa-cli-nightly
|
||||
|
||||
:::
|
||||
|
||||
稳定版打包至 [nixpkgs](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-cli/package.nix) 中,使用 `nixpkgs` 中的 Rust 工具链;每夜构建位于 [NUR](https://github.com/Cryolitia/nur-packages/blob/master/pkgs/maa-assistant-arknights/maa-cli.nix) 中,使用 Beta channel 的 Rust 工具链,由 Github Action 每日动更新和构建验证
|
||||
稳定版打包至 [nixpkgs](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-cli/package.nix) 中,使用 `nixpkgs` 中的 Rust 工具链;每夜构建位于 [NUR](https://github.com/Cryolitia/nur-packages/blob/master/pkgs/maa-assistant-arknights/maa-cli.nix) 中,使用 Beta channel 的 Rust 工具链,由 Github Actions 每日自动更新和构建验证。
|
||||
|
||||
#### 其他发行版
|
||||
#### Homebrew
|
||||
|
||||
对于在 Linux 上使用 Homebrew 的用户,请参见上述 macOS 的安装方式。
|
||||
|
||||
否则,请 [使用预编译二进制文件](#预编译二进制文件) 或是 [自行编译安装](#编译安装)
|
||||
#### 其他发行版
|
||||
|
||||
请使用 [预编译二进制文件](#预编译二进制文件) 或是 [自行编译安装](#编译安装)。
|
||||
|
||||
我们也欢迎各位有兴趣的开发者将 maa-cli 提交到更多发行版的官方仓库或是用户仓库!
|
||||
|
||||
## 预编译二进制文件
|
||||
|
||||
如果你的系统不受支持或者不想使用包管理器,你可以点击以下链接下载对应平台的预编译二进制文件,解压后将可执行文件放入 `PATH` 中即可使用。
|
||||
|
||||
::: tabs#pre-compile
|
||||
|
||||
@tab:active macOS
|
||||
[前往下载](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-universal-apple-darwin.zip)
|
||||
|
||||
@tab Linux
|
||||
请选择你的架构
|
||||
|
||||
- [x64/x86_64/amd64](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-x86_64-unknown-linux-gnu.tar.gz)
|
||||
- [aarch64/arm64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-aarch64-unknown-linux-gnu.tar.gz)
|
||||
|
||||
@tab Windows
|
||||
请选择你的架构
|
||||
|
||||
- [x64/x86_64/amd64](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-x86_64-pc-windows-msvc.zip)
|
||||
- [aarch64/arm64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-aarch64-pc-windows-msvc.zip)
|
||||
|
||||
:::
|
||||
|
||||
如果你的平台不在上述列表中,可以尝试自行编译安装(参见下文)
|
||||
|
||||
## 编译安装
|
||||
|
||||
Rust 开发者可以通过 `cargo` 自行编译安装 maa-cli:
|
||||
@@ -130,67 +131,66 @@ cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin m
|
||||
|
||||
:::
|
||||
|
||||
::: warning
|
||||
maa-cli 目前的最低支持 Rust 版本 (MSRV) 为 1.88。请注意,MSRV 可能随时发生变化,我们建议始终使用最新的 Rust 工具链以获得最佳体验。
|
||||
:::
|
||||
|
||||
### 编译选项
|
||||
|
||||
从源码编译时,你可以通过 `--no-default-features` 禁用默认的特性,然后通过 `--features` 来启用特定的特性。目前可用的特性有:
|
||||
|
||||
- `cli_installer`: 启用 `maa self update` 命令,用于更新自身,这个特性默认启用;
|
||||
- `core_installer`: 启用 `maa install` 和 `maa update` 命令,用于安装和更新 MaaCore 及资源,这个特性默认启用;
|
||||
- `git2`: 提供 `libgit2` 资源更新后端,这个特性默认启用;
|
||||
- `vendored-openssl`: 自行编译 `openssl` 库,而不是使用系统的 `openssl` 库,这个特性默认禁用,这个特性通常在你的系统没有安装 `openssl` 库或者 `openssl` 版本过低时启用。
|
||||
- `git2`: 提供 `libgit2` 资源更新后端,这个特性默认启用。
|
||||
|
||||
## 安装 MaaCore 及资源
|
||||
|
||||
::: warning
|
||||
只有使用包管理器安装 maa-cli 的用户才能使用包管理器安装 MaaCore,否则请使用 `maa install` 命令安装
|
||||
此外,`maa install` 下载的是官方预编译的 MaaCore,而包管理器安装的 MaaCore 可能使用与官方预编译版本不同的编译选项和依赖版本,这也许会导致性能和功能上的略微差异
|
||||
:::
|
||||
maa-cli 只提供了一个命令行界面,它需要 MaaCore 和资源来运行任务。
|
||||
|
||||
maa-cli 只提供了一个命令行界面,它需要 MaaCore 和资源来运行任务。一旦 maa-cli 安装完成,你可以通过它安装 MaaCore 及资源:
|
||||
根据安装方式和平台的不同,你的操作也有所区别:
|
||||
|
||||
::: tabs#maacore
|
||||
|
||||
@tab:active 预编译
|
||||
对于使用预编译二进制或者自行编译的用户,maa-cli 可以帮助你安装和更新:
|
||||
|
||||
```bash :no-line-numbers
|
||||
maa install
|
||||
```
|
||||
|
||||
根据不同的平台,你的操作也有所区别
|
||||
|
||||
::: tabs#maacore
|
||||
|
||||
@tab Windows
|
||||
对于 Windows 平台用户,在运行 `maa install` 命令前,请以管理员身份在命令提示符或PowerShell中运行以下命令,以安装必要工具组 VC++
|
||||
对于 Windows 平台的用户,在运行 `maa install` 命令前,请以管理员身份在命令提示符或 PowerShell 中运行以下命令,以安装必要组件 VC++ 运行库:
|
||||
|
||||
```bat :no-line-numbers
|
||||
winget install "Microsoft.VCRedist.2015+.x64" --override "/repair /passive /norestart" --uninstall-previous --accept-package-agreements --force
|
||||
```
|
||||
|
||||
然后再运行 `maa install`
|
||||
|
||||
@tab Homebrew
|
||||
你可以直接通过 Homebrew 安装 maa-core
|
||||
|
||||
```bash :no-line-numbers
|
||||
brew install MaaAssistantArknights/tap/maa-core
|
||||
```
|
||||
然后再运行 `maa install`。
|
||||
|
||||
@tab Arch
|
||||
你可以通过 [AUR](https://aur.archlinux.org/packages/maa-assistant-arknights/) 安装 maa-core
|
||||
::: code-tabs
|
||||
你可以使用 maa-cli 安装预编译的 MaaCore:
|
||||
|
||||
@tab:active paru
|
||||
```bash :no-line-numbers
|
||||
maa install
|
||||
```
|
||||
|
||||
你也可以通过 [AUR](https://aur.archlinux.org/packages/maa-assistant-arknights/) 安装 maa-core
|
||||
|
||||
```bash :no-line-numbers
|
||||
paru -S maa-assistant-arknights
|
||||
```
|
||||
|
||||
@tab yay
|
||||
或者
|
||||
|
||||
```bash :no-line-numbers
|
||||
yay -S maa-assistant-arknights
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
@tab Nix
|
||||
Nix 上的 maa-cli 强制依赖 MaaCore,因此 Nix 用户无需,也不应该手动安装 MaaCore
|
||||
Nix 上的 maa-cli 强制依赖 MaaCore,因此 Nix 用户无需,也不应该手动安装 MaaCore。
|
||||
|
||||
:::
|
||||
|
||||
::: warning
|
||||
`maa install` 下载的是 MAA 官方预编译的 MaaCore,而包管理器安装的 MaaCore 可能使用与官方预编译版本不同的编译选项和依赖版本,这也许会导致性能和功能上的略微差异。
|
||||
:::
|
||||
|
||||
@@ -164,7 +164,7 @@ MAA 可以通过当前**正在运行的单个模拟器**自动检测并填充 AD
|
||||
|
||||
需选择对应模拟器的配置,若列表中没有则选择通用配置。若通用配置不可用请尝试并选择其他任一可用的配置。
|
||||
|
||||
具体区别可以阅读[源码](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/dev/resource/config.json#L65)。
|
||||
具体区别可以阅读[源码](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/dev/resource/config.json#L57)。
|
||||
|
||||
### MuMu 截图增强模式
|
||||
|
||||
|
||||
@@ -3,34 +3,34 @@ order: 3
|
||||
icon: hugeicons:brain-02
|
||||
---
|
||||
|
||||
# 刷理智
|
||||
# 理智作战
|
||||
|
||||
## 常规设置
|
||||
|
||||
- `吃理智药` + `吃源石` 和 `指定次数`、`指定材料` 三个选项为短路开关(或门),即达成三个选项中的任一条件,均会视为任务完成,停止刷理智。
|
||||
- `吃理智药` 指定补充几次理智(可能一次吃多瓶药)。
|
||||
- `吃源石` 指定碎几颗石头(一次一颗),当仓库中有理智药时不会碎石。
|
||||
- `药剂恢复` + `源石恢复` 和 `指定次数`、`指定材料` 三个选项为短路开关(或门),即达成三个选项中的任一条件,均会视为任务完成,停止理智作战。
|
||||
- `药剂恢复` 指定补充几瓶理智(可能一次吃多瓶药)。
|
||||
- `源石恢复` 指定碎几颗石头(一次一颗),当仓库中有理智药时不会碎石。
|
||||
- `指定次数` 指定刷多少次指定关卡(例如“刷 15 次后停止”)。
|
||||
- `指定材料` 指定刷多少个指定材料(例如“获取 5 个固源岩后停止”)。
|
||||
|
||||
- `指定材料` 与 `关卡选择` 是两个互相独立的逻辑。`指定材料` 只是以材料个数作为任务完成依据,并不会自动导航到相应关卡。
|
||||
- `吃源石` 只会在 `吃理智药` 之后判断,因为 MAA 只有在没有理智药时才会使用源石补充理智。所以在勾选 `吃源石` 之后,MAA 会将 `吃理智药` 的次数锁定为 999,确保将理智药吃光,以避免跳过 `吃源石` 判断。
|
||||
- `源石恢复` 只会在 `药剂恢复` 之后判断,因为 MAA 只有在没有理智药时才会使用源石补充理智。所以在勾选 `源石恢复` 之后,MAA 会将 `药剂恢复` 的次数锁定为 999,确保将理智药吃光,以避免跳过 `源石恢复` 判断。
|
||||
|
||||
::: details 例子
|
||||
|
||||
| 吃理智药 | 吃源石 | 指定次数 | 指定材料 | 结果 |
|
||||
| :------: | :----: | :------: | :------: | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| | | | | 刷完现有理智即结束。 |
|
||||
| 2 | | | | 先刷完现有理智,然后吃一次理智药,一共吃 `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 | | | | 先刷完现有理智,然后吃一次理智药,一共吃 `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 行为_ |
|
||||
|
||||
:::
|
||||
|
||||
@@ -39,7 +39,7 @@ icon: hugeicons:brain-02
|
||||
- 若关卡选择中没有你需要的关卡,请在 MAA 中选择 `当前/上次`,然后在游戏中手动定位关卡
|
||||
确保画面停留在 右上角有关卡名和剩余理智,右下角有代理指挥和开始行动 的关卡详情界面。
|
||||
- 若当前不处于此界面,则 `当前/上次` 会自动进入终端首页右下角“上次作战”的关卡。
|
||||
- 也可以在 `任务设置` - `刷理智` - `高级设置` 中启用 `手动输入关卡名` 手动输入关卡编号。目前支持导航的关卡有:
|
||||
- 也可以在 `任务设置` - `理智作战` - `高级设置` 中启用 `手动输入关卡名` 手动输入关卡编号。目前支持导航的关卡有:
|
||||
- 全部主线关卡。可在关卡末尾添加 `-NORMAL` 或 `-HARD` 来切换标准或磨难关卡。
|
||||
- 龙门币、作战记录的 5 / 6 关,但必须输入 `CE-6` / `LS-6`。MAA 会在第六关无法代理的情况下自动切换至第五关。
|
||||
- 技能书、采购凭证、碳本第 5 关,必须输入 `CA-5` / `AP-5` / `SK-5`。
|
||||
@@ -71,21 +71,21 @@ icon: hugeicons:brain-02
|
||||
这是一个类似于日程表的功能,并不能当做关卡选择任务失败时的备用关卡。
|
||||
|
||||
1. 例子:关卡选择 `龙门币-6/5`,备选选择 `1-7` 和 `经验-6/5`:
|
||||
- 如果当天开放 `龙门币-6/5`,就会前往 `龙门币-6/5`,不会前往 `1-7` 和 `经验-6/5`。如果玩家此时未解锁 `龙门币-6/5` 代理,则刷理智任务出错。
|
||||
- 如果当天未开放 `龙门币-6/5`,则会前往 `1-7`,不会前往 `龙门币-6/5`。如果玩家此时未解锁 1-7 代理,则刷理智任务出错。
|
||||
- 如果当天开放 `龙门币-6/5`,就会前往 `龙门币-6/5`,不会前往 `1-7` 和 `经验-6/5`。如果玩家此时未解锁 `龙门币-6/5` 代理,则理智作战任务出错。
|
||||
- 如果当天未开放 `龙门币-6/5`,则会前往 `1-7`,不会前往 `龙门币-6/5`。如果玩家此时未解锁 1-7 代理,则理智作战任务出错。
|
||||
- 由于 `经验-6/5` 前存在常驻关卡 `1-7`,在这种情况下,MAA 永远也不会前往 `经验-6/5` 战斗。
|
||||
2. 若关卡选择为 `剿灭模式`,则:
|
||||
- 不会因为剿灭的结果影响其余备选关卡的选择逻辑,即使剿灭出错,刷理智任务也不会出错。
|
||||
- 剩余的备选关卡只会继承 `吃理智药` 和 `代理倍率` 的设置,不受 `吃源石`、`指定次数`、`指定材料` 的控制。
|
||||
- 不会因为剿灭的结果影响其余备选关卡的选择逻辑,即使剿灭出错,理智作战任务也不会出错。
|
||||
- 剩余的备选关卡只会继承 `药剂恢复` 和 `代理倍率` 的设置,不受 `源石恢复`、`指定次数`、`指定材料` 的控制。
|
||||
|
||||
### 剩余理智
|
||||
|
||||
在 `刷理智` 任务结束后启动,不受 `吃理智药`、`吃源石`、`指定次数`、`指定材料`、`代理倍率` 的控制,刷完当前剩余理智即结束。
|
||||
在 `理智作战` 任务结束后启动,不受 `药剂恢复`、`源石恢复`、`指定次数`、`指定材料`、`代理倍率` 的控制,刷完当前剩余理智即结束。
|
||||
|
||||
- 适用于在 `关卡选择` 关卡理智不足后,继续前往 `剩余理智` 关卡清理剩余的“边角”理智(如前往 1-7)。
|
||||
- 亦适用于在代理倍率设置过高而理智不足时自动以单次连战刷光理智收尾(设置 1-7 连战 6 次,但只有 30 理智,于是自动转为刷 5 次不连战的 1-7)。
|
||||
- 若剩余理智仍然不足则会结束任务(如少于 6 理智)。
|
||||
- 如果剩余理智选择关卡为未开放关卡,则刷理智任务出错。
|
||||
- 如果剩余理智选择关卡为未开放关卡,则理智作战任务出错。
|
||||
|
||||
### 代理倍率
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ order: 5
|
||||
icon: solar:shop-2-bold
|
||||
---
|
||||
|
||||
# 获取信用及购物
|
||||
# 信用收支
|
||||
|
||||
- 会自动访问好友获取信用点,并前往信用交易所购物。
|
||||
- 借助战赚信用:
|
||||
|
||||
@@ -162,7 +162,7 @@ typedef void(ASST_CALL* AsstCallback)(int msg, const char* details, void* custom
|
||||
- `CloseDown`
|
||||
关闭游戏
|
||||
- `Fight`
|
||||
刷理智
|
||||
理智作战
|
||||
- `Mall`
|
||||
信用点及购物
|
||||
- `Recruit`
|
||||
|
||||
@@ -102,6 +102,7 @@ icon: ph:sword-bold
|
||||
// type 为 "技能" | "撤退" 时可选,
|
||||
// "技能":仅推荐场地上自动的装置等,不填写 name,并使用 location 开启技能。正常部署的干员推荐使用 name 开启技能
|
||||
// 撤退":仅推荐有多个同名召唤物时,不填写 name, 并使用 location 进行撤退。正常部署的干员推荐 name 进行撤退
|
||||
// 坐标信息可在 https://map.ark-nights.com/areas 中查看,在设置中将“坐标展示”选为“MAA”即为 MAA 使用的坐标
|
||||
"direction": "左", // 部署干员的干员朝向。 type 为 "部署" 时必选
|
||||
// "Left" | "Right" | "Up" | "Down" | "None"
|
||||
// "左" | "右" | "上" | "下" | "无"
|
||||
@@ -123,8 +124,10 @@ icon: ph:sword-bold
|
||||
4.5,
|
||||
0
|
||||
], // type 为 "移动镜头" 时必选
|
||||
// [ x 移动格子数,y 移动格子数 ],可为小数
|
||||
// 注意 "移动镜头" 时是识别不到正在站场中的,需要用 sleep 完整覆盖整个移动动画
|
||||
// [ x 移动格子数,y 移动格子数 ],可为小数,可为负
|
||||
// x 值为正时代表镜头右移,y 值为正时代表镜头上移
|
||||
// 例:"distance": [-1, 1],"location": [5, 6],实际会部署在 [6, 7]
|
||||
// 注意:当 x > +2 时,会强制等待转场,在完成转场后完成动作;否则立即执行,并立即完成动作
|
||||
"doc": "下棘刺了!", // 描述,可选。会显示在界面上,没有实际作用
|
||||
"doc_color": "orange" // 描述文字的颜色,可选,默认灰色。会显示在界面上,没有实际作用。
|
||||
},
|
||||
@@ -153,7 +156,7 @@ icon: ph:sword-bold
|
||||
"type": "二倍速"
|
||||
}
|
||||
],
|
||||
"minimum_required": "v4.0", // 最低要求 maa 版本号,必选。保留字段,暂未实现
|
||||
"minimum_required": "v4.0", // 最低要求 maa 版本号,必选。
|
||||
"doc": {
|
||||
// 描述,可选。
|
||||
"title": "低练度高成功率作业",
|
||||
|
||||
@@ -82,20 +82,20 @@ B服:`张三`,可输入 `张三`、`张`、`三`
|
||||
::::
|
||||
|
||||
- `Fight`
|
||||
刷理智
|
||||
理智作战
|
||||
|
||||
:::: field-group
|
||||
::: field name="enable" type="boolean" optional default="true"
|
||||
是否启用本任务。
|
||||
:::
|
||||
::: field name="stage" type="string" optional
|
||||
关卡名,默认为空,识别当前/上次的关卡。不支持运行中设置。
|
||||
关卡名,默认为空,识别当前/上次的关卡。不支持运行中设置。
|
||||
<br>
|
||||
支持全部主线关卡,如 `"1-7"`、`"S3-2"`等。
|
||||
支持全部主线关卡,如 `"1-7"`、`"S3-2"`等。
|
||||
<br>
|
||||
可在关卡结尾输入`Normal`/`Hard`表示需要切换标准与磨难难度。
|
||||
可在关卡结尾输入`Normal`/`Hard`表示需要切换标准与磨难难度。
|
||||
<br>
|
||||
剿灭作战,必须输入 `"Annihilation"`。
|
||||
剿灭作战,必须输入 `"Annihilation"`。
|
||||
<br>
|
||||
当期 SS 活动 后三关,必须输入完整关卡编号。
|
||||
:::
|
||||
@@ -112,11 +112,11 @@ B服:`张三`,可输入 `张三`、`张`、`三`
|
||||
战斗次数。
|
||||
:::
|
||||
::: field name="series" type="number" optional
|
||||
连战次数, -1~6。
|
||||
连战次数, -1~6。
|
||||
<br>
|
||||
`-1` 为禁用切换。
|
||||
`-1` 为禁用切换。
|
||||
<br>
|
||||
`0` 为自动切换为当前可用的最大次数, 如当前理智不够6次, 则选择最低可用次数。
|
||||
`0` 为自动切换为当前可用的最大次数, 如当前理智不够6次, 则选择最低可用次数。
|
||||
<br>
|
||||
`1~6` 为指定连战次数。
|
||||
:::
|
||||
@@ -134,17 +134,17 @@ B服:`张三`,可输入 `张三`、`张`、`三`
|
||||
企鹅数据汇报 id, 默认为空。仅在 `report_to_penguin` 为 true 时有效。
|
||||
:::
|
||||
::: field name="server" type="string" optional default="CN"
|
||||
服务器,会影响掉落识别及上传。
|
||||
服务器,会影响掉落识别及上传。
|
||||
<br>
|
||||
选项:`CN` | `US` | `JP` | `KR`
|
||||
:::
|
||||
::: field name="client_type" type="string" optional
|
||||
客户端版本,默认为空。用于游戏崩溃时重启并连回去继续刷,若为空则不启用该功能。
|
||||
客户端版本,默认为空。用于游戏崩溃时重启并连回去继续刷,若为空则不启用该功能。
|
||||
<br>
|
||||
选项:`Official` | `Bilibili` | `txwy` | `YoStarEN` | `YoStarJP` | `YoStarKR`
|
||||
:::
|
||||
::: field name="DrGrandet" type="boolean" optional default="false"
|
||||
节省理智碎石模式,仅在可能产生碎石效果时生效。
|
||||
节省理智碎石模式,仅在可能产生碎石效果时生效。
|
||||
<br>
|
||||
在碎石确认界面等待,直到当前的 1 点理智恢复完成后再立刻碎石。
|
||||
:::
|
||||
@@ -168,16 +168,16 @@ B服:`张三`,可输入 `张三`、`张`、`三`
|
||||
会去点击确认的 Tag 等级。若仅公招计算,可设置为空数组。
|
||||
:::
|
||||
::: field name="first_tags" type="array<string>" optional
|
||||
首选 Tags,仅在 Tag 等级为 3 时有效。默认为空。
|
||||
首选 Tags,仅在 Tag 等级为 3 时有效。默认为空。
|
||||
<br>
|
||||
当 Tag 等级为 3 时,会尽可能多地选择这里的 Tags(如果有),而且是强制选择,也就是会忽略所有“让 3 星 Tag 不被选择”的设置。
|
||||
:::
|
||||
::: field name="extra_tags_mode" type="number" optional default="0"
|
||||
选择更多的 Tags。
|
||||
选择更多的 Tags。
|
||||
<br>
|
||||
`0` - 默认行为
|
||||
`0` - 默认行为
|
||||
<br>
|
||||
`1` - 选 3 个 Tags, 即使可能冲突
|
||||
`1` - 选 3 个 Tags, 即使可能冲突
|
||||
<br>
|
||||
`2` - 如果可能, 同时选择更多的高星 Tag 组合, 即使可能冲突
|
||||
:::
|
||||
@@ -197,7 +197,7 @@ B服:`张三`,可输入 `张三`、`张`、`三`
|
||||
是否在识别到小车词条时跳过。
|
||||
:::
|
||||
::: field name="recruitment_time" type="object" optional
|
||||
Tag 等级(大于等于 3)和对应的希望招募时限,单位为分钟,默认值都为 540(即 09:00:00)。
|
||||
Tag 等级(大于等于 3)和对应的希望招募时限,单位为分钟,默认值都为 540(即 09:00:00)。
|
||||
<br>
|
||||
例如: `{ "3": 540, "4": 540 }`
|
||||
:::
|
||||
@@ -214,7 +214,7 @@ Tag 等级(大于等于 3)和对应的希望招募时限,单位为分钟
|
||||
一图流汇报 id, 默认为空。仅在 `report_to_yituliu` 为 true 时有效。
|
||||
:::
|
||||
::: field name="server" type="string" optional default="CN"
|
||||
服务器,会影响上传。
|
||||
服务器,会影响上传。
|
||||
<br>
|
||||
选项:`CN` | `US` | `JP` | `KR`
|
||||
:::
|
||||
@@ -228,28 +228,28 @@ Tag 等级(大于等于 3)和对应的希望招募时限,单位为分钟
|
||||
是否启用本任务。
|
||||
:::
|
||||
::: field name="mode" type="number" optional default="0"
|
||||
换班工作模式。
|
||||
换班工作模式。
|
||||
<br>
|
||||
`0` - `Default`: 默认换班模式,单设施最优解。
|
||||
`0` - `Default`: 默认换班模式,单设施最优解。
|
||||
<br>
|
||||
`10000` - `Custom`: 自定义换班模式,读取用户配置,可参考 [基建排班协议](./base-scheduling-schema.md)。
|
||||
`10000` - `Custom`: 自定义换班模式,读取用户配置,可参考 [基建排班协议](./base-scheduling-schema.md)。
|
||||
<br>
|
||||
`20000` - `Rotation`: 一键轮换模式,会跳过控制中枢、发电站、宿舍以及办公室,其余设施不进行换班但保留基本操作(如使用无人机、会客室逻辑)。
|
||||
:::
|
||||
::: field name="facility" type="array<string>" required
|
||||
要换班的设施(有序)。不支持运行中设置。
|
||||
要换班的设施(有序)。不支持运行中设置。
|
||||
<br>
|
||||
设施名:`Mfg` | `Trade` | `Power` | `Control` | `Reception` | `Office` | `Dorm` | `Processing` | `Training`
|
||||
:::
|
||||
::: field name="drones" type="string" optional default="\_NotUse"
|
||||
无人机用途。`mode = 10000` 时该字段无效。
|
||||
无人机用途。`mode = 10000` 时该字段无效。
|
||||
<br>
|
||||
选项:`_NotUse` | `Money` | `SyntheticJade` | `CombatRecord` | `PureGold` | `OriginStone` | `Chip`
|
||||
:::
|
||||
::: field name="threshold" type="number" optional default="0.3"
|
||||
工作心情阈值,取值范围 [0, 1.0]。
|
||||
工作心情阈值,取值范围 [0, 1.0]。
|
||||
<br>
|
||||
`mode = 10000` 时该字段仅针对 "autofill" 有效。
|
||||
`mode = 10000` 时该字段仅针对 "autofill" 有效。
|
||||
<br>
|
||||
`mode = 20000` 时该字段无效。
|
||||
:::
|
||||
@@ -268,13 +268,16 @@ Tag 等级(大于等于 3)和对应的希望招募时限,单位为分钟
|
||||
::: field name="reception_clue_exchange" type="boolean" optional default="true"
|
||||
是否进行线索交流。
|
||||
:::
|
||||
::: field name="reception_send_clue" type="boolean" optional default="true"
|
||||
是否赠送线索。
|
||||
:::
|
||||
::: field name="filename" type="string" required
|
||||
自定义配置路径。不支持运行中设置。
|
||||
自定义配置路径。不支持运行中设置。
|
||||
<br>
|
||||
<Badge type="warning" text="仅在 mode = 10000 时生效" />
|
||||
:::
|
||||
::: field name="plan_index" type="number" required
|
||||
使用配置中的方案序号。不支持运行中设置。
|
||||
使用配置中的方案序号。不支持运行中设置。
|
||||
<br>
|
||||
<Badge type="warning" text="仅在 mode = 10000 时生效" />
|
||||
:::
|
||||
@@ -313,7 +316,7 @@ Tag 等级(大于等于 3)和对应的希望招募时限,单位为分钟
|
||||
是否借助战打一局 OF-1 关卡以便在第二天获得更多信用。
|
||||
:::
|
||||
::: field name="formation_index" type="number" optional default="0"
|
||||
打 OF-1 时所使用的编队栏位的编号。
|
||||
打 OF-1 时所使用的编队栏位的编号。
|
||||
<br>
|
||||
为 0–4 的整数,其中 0 表示选择当前编队,1-4 分别表示第一、二、三、四编队。
|
||||
:::
|
||||
@@ -354,36 +357,36 @@ Tag 等级(大于等于 3)和对应的希望招募时限,单位为分钟
|
||||
是否启用本任务。
|
||||
:::
|
||||
::: field name="theme" type="string" optional default="Phantom"
|
||||
主题。
|
||||
主题。
|
||||
<br>
|
||||
`Phantom` - 傀影与猩红血钻
|
||||
`Phantom` - 傀影与猩红血钻
|
||||
<br>
|
||||
`Mizuki` - 水月与深蓝之树
|
||||
`Mizuki` - 水月与深蓝之树
|
||||
<br>
|
||||
`Sami` - 探索者的银凇止境
|
||||
`Sami` - 探索者的银凇止境
|
||||
<br>
|
||||
`Sarkaz` - 萨卡兹的无终奇语
|
||||
`Sarkaz` - 萨卡兹的无终奇语
|
||||
<br>
|
||||
`JieGarden` - 界园
|
||||
:::
|
||||
::: field name="mode" type="number" optional default="0"
|
||||
模式。
|
||||
模式。
|
||||
<br>
|
||||
`0` - 刷分/奖励点数,尽可能稳定地打更多层数。
|
||||
`0` - 刷分/奖励点数,尽可能稳定地打更多层数。
|
||||
<br>
|
||||
`1` - 刷源石锭,第一层投资完就退出。
|
||||
`1` - 刷源石锭,第一层投资完就退出。
|
||||
<br>
|
||||
`2` - <Badge type="danger" text="已弃用" /> 兼顾模式 0 与 1,投资过后再退出,没有投资就继续往后打。
|
||||
`2` - <Badge type="danger" text="已弃用" /> 兼顾模式 0 与 1,投资过后再退出,没有投资就继续往后打。
|
||||
<br>
|
||||
`3` - 开发中...
|
||||
`3` - 开发中...
|
||||
<br>
|
||||
`4` - 凹开局,先在 0 难度下到达第三层后重开,再到指定难度下凹开局奖励,若不为热水壶或希望则回到 0 难度下重新来过;若在 Phantom 主题下则不切换难度,仅在当前难度下尝试到达第三层、重开、凹开局。
|
||||
`4` - 凹开局,先在 0 难度下到达第三层后重开,再到指定难度下凹开局奖励,若不为热水壶或希望则回到 0 难度下重新来过;若在 Phantom 主题下则不切换难度,仅在当前难度下尝试到达第三层、重开、凹开局。
|
||||
<br>
|
||||
`5` - 刷坍缩范式;仅适用于 Sami 主题;通过战斗漏怪等方式加快坍缩值积累,若遇到的第一个的坍缩范式在 `expected_collapsal_paradigms` 列表中则停止任务,否则重开。
|
||||
`5` - 刷坍缩范式;仅适用于 Sami 主题;通过战斗漏怪等方式加快坍缩值积累,若遇到的第一个的坍缩范式在 `expected_collapsal_paradigms` 列表中则停止任务,否则重开。
|
||||
<br>
|
||||
`6` - 刷月度小队蚊子腿,除了针对模式的适配以外和模式0相同。
|
||||
`6` - 刷月度小队蚊子腿,除了针对模式的适配以外和模式 0 相同。
|
||||
<br>
|
||||
`7` - 刷深入调查蚊子腿,除了针对模式的适配以外和模式0相同。
|
||||
`7` - 刷深入调查蚊子腿,除了针对模式的适配以外和模式 0 相同。
|
||||
:::
|
||||
::: field name="squad" type="string" optional default="指挥分队"
|
||||
开局分队名。
|
||||
@@ -437,30 +440,30 @@ Tag 等级(大于等于 3)和对应的希望招募时限,单位为分钟
|
||||
希望在第一层远见阶段得到的密文版。仅适用于 Sami 主题,不限模式;若成功凹到则停止任务。
|
||||
:::
|
||||
::: field name="start_foldartal_list" type="array<string>" optional default="[]"
|
||||
凹开局时希望在开局奖励阶段得到的密文板。仅在主题为 Sami 且模式为 4 时有效。
|
||||
凹开局时希望在开局奖励阶段得到的密文板。仅在主题为 Sami 且模式为 4 时有效。
|
||||
<br>
|
||||
仅当开局拥有列表中所有的密文板时才算凹开局成功。
|
||||
仅当开局拥有列表中所有的密文板时才算凹开局成功。
|
||||
<br>
|
||||
注意,此参数须与 “生活至上分队” 同时使用,其他分队在开局奖励阶段不会获得密文板。
|
||||
:::
|
||||
::: field name="collectible_mode_start_list" type="object" optional
|
||||
凹开局时期望的奖励,默认全为 false。仅在模式为 4 时有效。
|
||||
凹开局时期望的奖励,默认全为 false。仅在模式为 4 时有效。
|
||||
<br>
|
||||
`hot_water`: 热水壶奖励,常用于触发烧水机制(通用)。
|
||||
`hot_water`: 热水壶奖励,常用于触发烧水机制(通用)。
|
||||
<br>
|
||||
`shield`: 护盾奖励,约等于额外生命值(通用)。
|
||||
`shield`: 护盾奖励,约等于额外生命值(通用)。
|
||||
<br>
|
||||
`ingot`: 源石锭奖励(通用)。
|
||||
`ingot`: 源石锭奖励(通用)。
|
||||
<br>
|
||||
`hope`: 希望奖励(通用,注意:JieGarden 主题下无 hope 奖励)。
|
||||
`hope`: 希望奖励(通用,注意:JieGarden 主题下无 hope 奖励)。
|
||||
<br>
|
||||
`random`: 随机奖励选项:游戏中指“消耗所有源石锭换一个随机收藏品”(通用)。
|
||||
`random`: 随机奖励选项:游戏中指“消耗所有源石锭换一个随机收藏品”(通用)。
|
||||
<br>
|
||||
`key`: 钥匙奖励,仅在 Mizuki 主题时有效。
|
||||
`key`: 钥匙奖励,仅在 Mizuki 主题时有效。
|
||||
<br>
|
||||
`dice`: 骰子奖励,仅在 Mizuki 主题时有效。
|
||||
`dice`: 骰子奖励,仅在 Mizuki 主题时有效。
|
||||
<br>
|
||||
`ideas`: 2 构想奖励,仅在 Sarkaz 主题时有效。
|
||||
`ideas`: 2 构想奖励,仅在 Sarkaz 主题时有效。
|
||||
:::
|
||||
::: field name="use_foldartal" type="boolean" optional
|
||||
是否使用密文板。模式 5 下默认值 `false`,其他模式下默认值 `true`。仅适用于 Sami 主题。
|
||||
@@ -490,9 +493,9 @@ Tag 等级(大于等于 3)和对应的希望招募时限,单位为分钟
|
||||
烧水时使用的分队, 默认与squad同步, 当squad为空字符串且未指定collectible_mode_squad值时为指挥分队。
|
||||
:::
|
||||
::: field name="start_with_seed" type="boolean" optional default="false"
|
||||
使用种子刷钱。
|
||||
使用种子刷钱。
|
||||
<br>
|
||||
仅在 Sarkaz 主题,Investment 模式,“点刺成锭分队” or “后勤分队” 时可能为 true。
|
||||
仅在 Sarkaz 主题,Investment 模式,“点刺成锭分队” or “后勤分队” 时可能为 true。
|
||||
<br>
|
||||
使用固定种子。
|
||||
:::
|
||||
@@ -502,41 +505,71 @@ Tag 等级(大于等于 3)和对应的希望招募时限,单位为分钟
|
||||
- `Copilot`
|
||||
自动抄作业
|
||||
|
||||
```json5
|
||||
{
|
||||
"enable": bool, // 是否启用本任务,可选,默认值 true
|
||||
"filename": string, // 单一作业 JSON 文件的路径,与 copilot_list 二选一(必填);相对路径与绝对路径均可
|
||||
"copilot_list": [ // 作业列表,与 filename 二选一(必填);当 filename 与 copilot_list 同时存在时,忽视 copilot_list;此参数生效时仅可执行 set_params 一次
|
||||
{
|
||||
"filename": string, // 作业 JSON 文件的路径;相对路径与绝对路径均可
|
||||
"stage_name": string, // 关卡名,具体请参考 [PRTS.Map](https://map.ark-nights.com)
|
||||
"is_raid": bool, // 是否切换为突袭模式,可选, 默认值 false
|
||||
"is_paradox": bool // 是否为悖论模拟关卡, 可选, 默认值 false;测试中参数
|
||||
},
|
||||
...
|
||||
],
|
||||
"loop_times": int, // 循环次数,可选,默认值 1;仅在单一作业模式下(即指定 filename 时)有效;此参数生效时仅可执行 set_params 一次
|
||||
"use_sanity_potion": bool, // 是否允许在剩余理智不足时使用理智药,可选,默认值 false
|
||||
"formation": bool, // 是否进行自动编队,可选,默认值 false
|
||||
"formation_index": int // 自动编队所使用的编队栏位的编号,可选,默认值 0;仅在 formation 为 true 时有效;
|
||||
// 为 0–4 的整数,其中 0 表示选择当前编队,1-4 分别表示第一、二、三、四编队
|
||||
"user_additional": [ // 自定义追加干员列表,可选,默认值 [];仅在 formation 为 true 时有效
|
||||
{
|
||||
"name": string, // 干员名,可选,默认值 "",若留空则忽视此干员
|
||||
"skill": int // 需要携带的技能,可选,默认值 1;为 1–3 的整数,若不在此范围内则遵从游戏内默认的技能选择
|
||||
},
|
||||
...
|
||||
],
|
||||
"add_trust": bool, // 是否在自动编队时以信赖值升序自动填充空余栏位,可选,默认值 false;仅在 formation 为 true 时有效
|
||||
"ignore_requirements": bool, // 是否在自动编队时忽视干员属性要求,可选,默认值 false;仅在 formation 为 true 时有效
|
||||
"support_unit_usage": int, // 助战干员的使用模式,可选,默认值 0;为 0–3 的整数,其中 support_unit_name;仅在 formation 为 true 时有效
|
||||
// 0 - 表示不使用助战干员
|
||||
// 1 - 如果有且仅有一名缺失干员则尝试寻找助战干员补齐编队,如果无缺失干员则不使用助战干员
|
||||
// 2 - 如果有且仅有一名缺失干员则尝试寻找助战干员补齐编队,如果无缺失干员则使用指定助战干员
|
||||
// 3 - 如果有且仅有一名缺失干员则尝试寻找助战干员补齐编队,如果无缺失干员则使用随机助战干员
|
||||
"support_unit_name": string // 指定助战干员名,可选,默认值 "";仅在 support_unit_usage 为 2 时有效
|
||||
}
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="enable" type="boolean" optional default="true"
|
||||
是否启用本任务。
|
||||
:::
|
||||
::: field name="filename" type="string"
|
||||
单一作业 JSON 文件的路径,与 copilot_list 二选一(必填);相对路径与绝对路径均可。
|
||||
:::
|
||||
::: field name="copilot_list" type="array<object>"
|
||||
作业列表,与 filename 二选一(必填);当 filename 与 copilot_list 同时存在时,忽视 copilot_list;此参数生效时仅可执行 set_params 一次。
|
||||
<br>
|
||||
每个对象包含:
|
||||
<br>
|
||||
|
||||
- `filename`: 作业 JSON 文件的路径;相对路径与绝对路径均可
|
||||
<br>
|
||||
- `stage_name`: 关卡名,具体请参考 [PRTS.Map](https://map.ark-nights.com)
|
||||
<br>
|
||||
- `is_raid`: 是否切换为突袭模式,可选,默认值 false
|
||||
<br>
|
||||
- `is_paradox`: 是否为悖论模拟关卡,可选,默认值 false;测试中参数
|
||||
:::
|
||||
::: field name="loop_times" type="number" optional default="1"
|
||||
循环次数。仅在单一作业模式下(即指定 filename 时)有效;此参数生效时仅可执行 set_params 一次。
|
||||
:::
|
||||
::: field name="use_sanity_potion" type="boolean" optional default="false"
|
||||
是否允许在剩余理智不足时使用理智药。
|
||||
:::
|
||||
::: field name="formation" type="boolean" optional default="false"
|
||||
是否进行自动编队。
|
||||
:::
|
||||
::: field name="formation_index" type="number" optional default="0"
|
||||
自动编队所使用的编队栏位的编号。仅在 formation 为 true 时有效。
|
||||
<br>
|
||||
为 0–4 的整数,其中 0 表示选择当前编队,1-4 分别表示第一、二、三、四编队。
|
||||
:::
|
||||
::: field name="user_additional" type="array<object>" optional default="[]"
|
||||
自定义追加干员列表。仅在 formation 为 true 时有效。
|
||||
<br>
|
||||
每个对象包含:
|
||||
<br>
|
||||
- `name`: 干员名,可选,默认值 "",若留空则忽视此干员
|
||||
<br>
|
||||
- `skill`: 需要携带的技能,可选,默认值 1;为 1–3 的整数,若不在此范围内则遵从游戏内默认的技能选择
|
||||
:::
|
||||
::: field name="add_trust" type="boolean" optional default="false"
|
||||
是否在自动编队时以信赖值升序自动填充空余栏位。仅在 formation 为 true 时有效。
|
||||
:::
|
||||
::: field name="ignore_requirements" type="boolean" optional default="false"
|
||||
是否在自动编队时忽视干员属性要求。仅在 formation 为 true 时有效。
|
||||
:::
|
||||
::: field name="support_unit_usage" type="number" optional default="0"
|
||||
助战干员的使用模式。为 0–3 的整数。仅在 formation 为 true 时有效。
|
||||
<br>
|
||||
`0` - 表示不使用助战干员
|
||||
<br>
|
||||
`1` - 如果有且仅有一名缺失干员则尝试寻找助战干员补齐编队,如果无缺失干员则不使用助战干员
|
||||
<br>
|
||||
`2` - 如果有且仅有一名缺失干员则尝试寻找助战干员补齐编队,如果无缺失干员则使用指定助战干员
|
||||
<br>
|
||||
`3` - 如果有且仅有一名缺失干员则尝试寻找助战干员补齐编队,如果无缺失干员则使用随机助战干员
|
||||
:::
|
||||
::: field name="support_unit_name" type="string" optional default=""
|
||||
指定助战干员名。仅在 support_unit_usage 为 2 时有效。
|
||||
:::
|
||||
::::
|
||||
|
||||
作业 JSON 请参考 [战斗流程协议](./copilot-schema.md)
|
||||
|
||||
@@ -582,16 +615,16 @@ Tag 等级(大于等于 3)和对应的希望招募时限,单位为分钟
|
||||
是否启用本任务。
|
||||
:::
|
||||
::: field name="theme" type="string" optional default="Fire"
|
||||
主题。
|
||||
主题。
|
||||
<br>
|
||||
`Fire` - _沙中之火_
|
||||
`Fire` - _沙中之火_
|
||||
<br>
|
||||
`Tales` - _沙洲遗闻_
|
||||
:::
|
||||
::: field name="mode" type="number" optional default="0"
|
||||
模式。
|
||||
模式。
|
||||
<br>
|
||||
`0` - 刷分与建造点,进入战斗直接退出。
|
||||
`0` - 刷分与建造点,进入战斗直接退出。
|
||||
<br>
|
||||
`1` - 沙中之火:刷赤金,联络员买水后基地锻造;沙洲遗闻:自动制造物品并读档刷货币。
|
||||
:::
|
||||
@@ -599,9 +632,9 @@ Tag 等级(大于等于 3)和对应的希望招募时限,单位为分钟
|
||||
自动制造的物品,建议填写子串。
|
||||
:::
|
||||
::: field name="increment_mode" type="number" optional default="0"
|
||||
点击类型。
|
||||
点击类型。
|
||||
<br>
|
||||
`0` - 连点
|
||||
`0` - 连点
|
||||
<br>
|
||||
`1` - 长按
|
||||
:::
|
||||
@@ -633,11 +666,11 @@ Tag 等级(大于等于 3)和对应的希望招募时限,单位为分钟
|
||||
目前仅支持 `"copilot"`。
|
||||
:::
|
||||
::: field name="subtask" type="string" required
|
||||
子任务类型。
|
||||
子任务类型。
|
||||
<br>
|
||||
`stage` - 设置关卡名,需要 `"details": { "stage": "xxxx" }`。
|
||||
`stage` - 设置关卡名,需要 `"details": { "stage": "xxxx" }`。
|
||||
<br>
|
||||
`start` - 开始作战,无 `details`。
|
||||
`start` - 开始作战,无 `details`。
|
||||
<br>
|
||||
`action` - 单步作战操作,`details` 需为作战协议中的单个 action,例如:`"details": { "name": "史尔特尔", "location": [ 4, 5 ], "direction": "左" }`,详情参考 [战斗流程协议](./copilot-schema.md)。
|
||||
:::
|
||||
@@ -755,18 +788,23 @@ bool ASSTAPI AsstSetInstanceOption(AsstHandle handle, AsstInstanceOptionKey key,
|
||||
|
||||
##### 键值一览
|
||||
|
||||
```cpp
|
||||
enum InstanceOptionKey
|
||||
{
|
||||
Invalid = 0,
|
||||
// 已弃用 // MinitouchEnabled = 1, // 是否启用 minitouch
|
||||
// 开了也不代表就一定能用,有可能设备不支持等
|
||||
// "1" 开,"0" 关
|
||||
TouchMode = 2, // 触控模式设置,默认 minitouch
|
||||
// minitouch | maatouch | adb
|
||||
DeploymentWithPause = 3, // 是否暂停下干员,同时影响抄作业、肉鸽、保全
|
||||
// "1" | "0"
|
||||
AdbLiteEnabled = 4, // 是否使用 AdbLite, "0" | "1"
|
||||
KillAdbOnExit = 5, // 退出时是否杀掉 Adb 进程, "0" | "1"
|
||||
};
|
||||
```
|
||||
:::: field-group
|
||||
::: field name="Invalid" type="number" optional default="0"
|
||||
无效占位。枚举值:0。
|
||||
:::
|
||||
::: field name="MinitouchEnabled" type="boolean" optional
|
||||
已弃用。原为是否启用 minitouch;"1" 开,"0" 关。注意设备可能不支持。枚举值:1(已弃用)。
|
||||
:::
|
||||
::: field name="TouchMode" type="string" optional default="minitouch"
|
||||
触控模式设置。可选值:minitouch | maatouch | adb。默认 minitouch。枚举值:2。
|
||||
:::
|
||||
::: field name="DeploymentWithPause" type="boolean" optional
|
||||
是否暂停下干员,同时影响抄作业、肉鸽、保全。可用值:"1" 或 "0"。枚举值:3。
|
||||
:::
|
||||
::: field name="AdbLiteEnabled" type="boolean" optional
|
||||
是否使用 AdbLite。可用值:"0" 或 "1"。枚举值:4。
|
||||
:::
|
||||
::: field name="KillAdbOnExit" type="boolean" optional
|
||||
退出时是否杀掉 Adb 进程。可用值:"0" 或 "1"。枚举值:5。
|
||||
:::
|
||||
::::
|
||||
|
||||
@@ -84,7 +84,7 @@ JSON 文件是不支持注释的,文本中的注释仅用于演示,请勿直
|
||||
|
||||
"reduceOtherTimes": ["OtherTaskName1", "OtherTaskName2"],
|
||||
// 可选项,执行后减少其他任务的执行计数。
|
||||
// 例如执行了吃理智药,则说明上一次点击蓝色开始行动按钮没生效,所以蓝色开始行动要-1
|
||||
// 例如执行了药剂恢复,则说明上一次点击蓝色开始行动按钮没生效,所以蓝色开始行动要-1
|
||||
|
||||
"specificRect": [100, 100, 50, 50],
|
||||
// 当 action 为 ClickRect 时有效且必选,表示指定的点击位置(范围内随机一点)。
|
||||
|
||||
@@ -36,7 +36,7 @@ MAA 的意思是 MAA Assistant Arknights
|
||||
|
||||
## 亮点功能
|
||||
|
||||
- 刷理智,掉落识别及上传 [企鹅物流](https://penguin-stats.cn/),[一图流](https://ark.yituliu.cn/)
|
||||
- 理智作战,掉落识别及上传 [企鹅物流](https://penguin-stats.cn/),[一图流](https://ark.yituliu.cn/)
|
||||
- 智能基建换班,自动计算干员效率,单设施内最优解;同时也支持 [自定义排班](./protocol/base-scheduling-schema.md)
|
||||
- 自动公招,可选使用加急许可,一次全部刷完!公招数据自动上传 [企鹅物流](https://penguin-stats.cn/result/stage/recruit/recruit),[一图流](https://ark.yituliu.cn/survey/maarecruitdata)
|
||||
- 支持手动识别公招界面,方便对高星公招做出选择 ~~(你的这个高资回费出的是推王呢还是推王呢)~~
|
||||
|
||||
@@ -9,79 +9,135 @@ icon: material-symbols:download
|
||||
This page is outdated and maybe still in Simplified Chinese. Translation is needed.
|
||||
:::
|
||||
|
||||
maa-cli 提供多种方式安装,包括包管理器、预编译二进制文件和通过 `cargo` 自行编译安装。
|
||||
maa-cli 提供多种方式安装,包括预编译二进制文件、包管理器和通过 `cargo` 自行编译安装。
|
||||
|
||||
## 预编译二进制文件
|
||||
|
||||
安装 maa-cli 最简单的方式是使用安装脚本一键安装:
|
||||
|
||||
::: tabs#pre-compile
|
||||
|
||||
@tab:active Linux 和 macOS
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/MaaAssistantArknights/maa-cli/main/install.sh | bash
|
||||
```
|
||||
|
||||
@tab Windows (PowerShell)
|
||||
|
||||
```powershell
|
||||
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/MaaAssistantArknights/maa-cli/main/install.ps1" -OutFile install.ps1; .\install.ps1
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
后续你可以通过 `maa self update` 来更新 maa-cli。
|
||||
|
||||
如果你的平台不在上述列表中,可以尝试自行[编译安装](#编译安装)。
|
||||
|
||||
## 通过包管理器安装
|
||||
|
||||
对于 macOS 和受支持的 Linux 发行版用户,推荐使用包管理器安装 maa-cli。
|
||||
对于 macOS 和受支持的 Linux 发行版用户,可以使用包管理器安装 maa-cli。
|
||||
|
||||
### macOS
|
||||
|
||||
Homebrew 用户可以通过非官方的 [tap](https://github.com/MaaAssistantArknights/homebrew-tap/) 安装 maa-cli:
|
||||
|
||||
- 稳定版本:
|
||||
::: code-tabs
|
||||
|
||||
```bash
|
||||
brew install MaaAssistantArknights/tap/maa-cli
|
||||
```
|
||||
@tab:active 稳定版
|
||||
|
||||
- 不稳定预发行版本:
|
||||
```bash :no-line-numbers
|
||||
brew install MaaAssistantArknights/tap/maa-cli
|
||||
```
|
||||
|
||||
```bash
|
||||
brew install MaaAssistantArknights/tap/maa-cli-beta
|
||||
```
|
||||
@tab 不稳定版/预发行版
|
||||
|
||||
```bash :no-line-numbers
|
||||
brew install MaaAssistantArknights/tap/maa-cli-beta
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
### Linux
|
||||
|
||||
- Arch Linux 用户可以安装 [AUR 包](https://aur.archlinux.org/packages/maa-cli/):
|
||||
Arch、Nix 以及 Linux Homebrew 用户可以通过包管理器安装 maa-cli。
|
||||
|
||||
```bash
|
||||
yay -S maa-cli
|
||||
```
|
||||
#### Arch Linux
|
||||
|
||||
- ❄️ Nix 用户可以直接运行:
|
||||
可以安装 [AUR 包](https://aur.archlinux.org/packages/maa-cli/):
|
||||
|
||||
```bash
|
||||
# 稳定版
|
||||
nix run nixpkgs#maa-cli
|
||||
```
|
||||
::: code-tabs
|
||||
|
||||
```bash
|
||||
# 每夜构建
|
||||
nix run github:Cryolitia/nur-packages#maa-cli-nightly
|
||||
```
|
||||
@tab:active paru
|
||||
|
||||
稳定版打包至 [nixpkgs](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-cli/package.nix) 中,使用 `nixpkgs` 中的 Rust 工具链;每夜构建位于 [NUR](https://github.com/Cryolitia/nur-packages/blob/master/pkgs/maa-assistant-arknights/maa-cli.nix) 中,使用 Beta channel 的 Rust 工具链,由 Github Action 每日自动更新和构建验证。
|
||||
```bash :no-line-numbers
|
||||
paru -S maa-cli
|
||||
```
|
||||
|
||||
- 对于在 Linux 上使用 Homebrew 的用户,参见上述 macOS 的安装方式。
|
||||
@tab yay
|
||||
|
||||
## 预编译二进制文件
|
||||
```bash :no-line-numbers
|
||||
yay -S maa-cli
|
||||
```
|
||||
|
||||
如果你的系统不受支持或者不想使用包管理器,你可以点击以下链接下载对应平台的预编译二进制文件,解压后将可执行文件放入 `PATH` 中即可使用。
|
||||
:::
|
||||
|
||||
- [macOS](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-universal-apple-darwin.zip)
|
||||
- [Linux x86_64 (x64, amd64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-x86_64-unknown-linux-gnu.tar.gz)
|
||||
- [Linux aarch64 (arm64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-aarch64-unknown-linux-gnu.tar.gz)
|
||||
- [Windows x86_64 (x64, amd64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-x86_64-pc-windows-msvc.zip)
|
||||
- [Windows aarch64 (arm64)](https://github.com/MaaAssistantArknights/maa-cli/releases/latest/download/maa_cli-aarch64-pc-windows-msvc.zip)
|
||||
#### ❄️ Nix
|
||||
|
||||
如果你的平台不在上述列表中,可以尝试自行编译安装(参见下文)。
|
||||
用户可以直接运行:
|
||||
|
||||
::: code-tabs
|
||||
|
||||
@tab:active 稳定版
|
||||
|
||||
```bash :no-line-numbers
|
||||
nix run nixpkgs#maa-cli
|
||||
```
|
||||
|
||||
@tab 每夜构建
|
||||
|
||||
```bash :no-line-numbers
|
||||
nix run github:Cryolitia/nur-packages#maa-cli-nightly
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
稳定版打包至 [nixpkgs](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-cli/package.nix) 中,使用 `nixpkgs` 中的 Rust 工具链;每夜构建位于 [NUR](https://github.com/Cryolitia/nur-packages/blob/master/pkgs/maa-assistant-arknights/maa-cli.nix) 中,使用 Beta channel 的 Rust 工具链,由 Github Actions 每日自动更新和构建验证。
|
||||
|
||||
#### Homebrew
|
||||
|
||||
对于在 Linux 上使用 Homebrew 的用户,请参见上述 macOS 的安装方式。
|
||||
|
||||
#### 其他发行版
|
||||
|
||||
请使用 [预编译二进制文件](#预编译二进制文件) 或是 [自行编译安装](#编译安装)。
|
||||
|
||||
我们也欢迎各位有兴趣的开发者将 maa-cli 提交到更多发行版的官方仓库或是用户仓库!
|
||||
|
||||
## 编译安装
|
||||
|
||||
Rust 开发者可以通过 `cargo` 自行编译安装 maa-cli:
|
||||
|
||||
- 稳定版本:
|
||||
::: code-tabs
|
||||
|
||||
```bash
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --tag stable --locked
|
||||
```
|
||||
@tab:active 稳定版本
|
||||
|
||||
- 开发版本:
|
||||
```bash :no-line-numbers
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --tag stable --locked
|
||||
```
|
||||
|
||||
```bash
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --locked
|
||||
```
|
||||
@tab 开发版本
|
||||
|
||||
```bash :no-line-numbers
|
||||
cargo install --git https://github.com/MaaAssistantArknights/maa-cli.git --bin maa --locked
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: warning
|
||||
maa-cli 目前的最低支持 Rust 版本 (MSRV) 为 1.88。请注意,MSRV 可能随时发生变化,我们建议始终使用最新的 Rust 工具链以获得最佳体验。
|
||||
:::
|
||||
|
||||
### 编译选项
|
||||
|
||||
@@ -89,33 +145,56 @@ Rust 开发者可以通过 `cargo` 自行编译安装 maa-cli:
|
||||
|
||||
- `cli_installer`: 启用 `maa self update` 命令,用于更新自身,这个特性默认启用;
|
||||
- `core_installer`: 启用 `maa install` 和 `maa update` 命令,用于安装和更新 MaaCore 及资源,这个特性默认启用;
|
||||
- `git2`: 提供 `libgit2` 资源更新后端,这个特性默认启用;
|
||||
- `vendored-openssl`: 自行编译 `openssl` 库,而不是使用系统的 `openssl` 库,这个特性默认禁用,这个特性通常在你的系统没有安装 `openssl` 库或者 `openssl` 版本过低时启用。
|
||||
- `git2`: 提供 `libgit2` 资源更新后端,这个特性默认启用。
|
||||
|
||||
## 安装 MaaCore 及资源
|
||||
|
||||
maa-cli 只提供了一个命令行界面,它需要 MaaCore 和资源来运行任务。一旦 maa-cli 安装完成,你可以通过它安装 MaaCore 及资源:
|
||||
maa-cli 只提供了一个命令行界面,它需要 MaaCore 和资源来运行任务。
|
||||
|
||||
```bash
|
||||
根据安装方式和平台的不同,你的操作也有所区别:
|
||||
|
||||
::: tabs#maacore
|
||||
|
||||
@tab:active 预编译
|
||||
对于使用预编译二进制或者自行编译的用户,maa-cli 可以帮助你安装和更新:
|
||||
|
||||
```bash :no-line-numbers
|
||||
maa install
|
||||
```
|
||||
|
||||
对于使用包管理器安装的用户,可以通过包管理器安装 MaaCore:
|
||||
@tab Windows
|
||||
对于 Windows 平台的用户,在运行 `maa install` 命令前,请以管理员身份在命令提示符或 PowerShell 中运行以下命令,以安装必要组件 VC++ 运行库:
|
||||
|
||||
- Homebrew:
|
||||
```bat :no-line-numbers
|
||||
winget install "Microsoft.VCRedist.2015+.x64" --override "/repair /passive /norestart" --uninstall-previous --accept-package-agreements --force
|
||||
```
|
||||
|
||||
```bash
|
||||
brew install MaaAssistantArknights/tap/maa-core
|
||||
```
|
||||
然后再运行 `maa install`。
|
||||
|
||||
- Arch Linux:
|
||||
@tab Arch
|
||||
你可以使用 maa-cli 安装预编译的 MaaCore:
|
||||
|
||||
```bash
|
||||
yay -S maa-assistant-arknights
|
||||
```
|
||||
```bash :no-line-numbers
|
||||
maa install
|
||||
```
|
||||
|
||||
- Nix:
|
||||
你也可以通过 [AUR](https://aur.archlinux.org/packages/maa-assistant-arknights/) 安装 maa-core
|
||||
|
||||
Nix 上的 maa-cli 强制依赖 MaaCore。 因此,Nix 用户无需,也不应该手动安装 MaaCore。
|
||||
```bash :no-line-numbers
|
||||
paru -S maa-assistant-arknights
|
||||
```
|
||||
|
||||
**注意**:只有使用包管理器安装 maa-cli 的用户才能使用包管理器安装 MaaCore,否则请使用 `maa install` 命令安装。此外,`maa install` 通过下载官方预编译的 MaaCore,而包管理器安装的 MaaCore 可能使用的编译选项和依赖版本与官方预编译的版本不同,这可能导致性能和功能上存在略微差异。
|
||||
或者
|
||||
|
||||
```bash :no-line-numbers
|
||||
yay -S maa-assistant-arknights
|
||||
```
|
||||
|
||||
@tab Nix
|
||||
Nix 上的 maa-cli 强制依赖 MaaCore,因此 Nix 用户无需,也不应该手动安装 MaaCore。
|
||||
|
||||
:::
|
||||
|
||||
::: warning
|
||||
`maa install` 下载的是 MAA 官方预编译的 MaaCore,而包管理器安装的 MaaCore 可能使用与官方预编译版本不同的编译选项和依赖版本,这也许会导致性能和功能上的略微差异。
|
||||
:::
|
||||
|
||||
@@ -150,7 +150,7 @@ MAA 現在會嘗試從登錄檔中讀取 `bluestacks.conf` 的儲存位置,當
|
||||
|
||||
需選擇對應模擬器的配置,若列表中沒有則選擇通用配置。若通用配置不可用,請嘗試並選擇其他任一可用的配置。
|
||||
|
||||
具體區別可以閱讀[原始碼](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/dev/resource/config.json#L65)。
|
||||
具體區別可以閱讀[原始碼](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/dev/resource/config.json#L57)。
|
||||
|
||||
### MuMu 截圖增強模式
|
||||
|
||||
|
||||
@@ -171,8 +171,11 @@ AsstTaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const cha
|
||||
// mode = 20000 時該欄位無效(會被忽略)
|
||||
"replenish": bool, // 貿易站 “源石碎片” 是否自動補貨,可選,預設 false
|
||||
|
||||
"dorm_notstationed_enabled": bool, // 是否啟用宿舍 “未進駐” 選項,可選,預設 false
|
||||
"dorm_trust_enabled": bool, // 是否將宿舍剩餘位置填入信賴未滿幹員,可選,預設 false
|
||||
"dorm_notstationed_enabled": bool, // 是否啟用宿舍 "未進駐" 選項,可選,預設 false
|
||||
"dorm_trust_enabled": bool, // 是否將宿舍剩餘位置填入信賴未滿幹員,可選,預設 false
|
||||
"reception_message_board": bool, // 是否領取會客室資訊板信用,可選,預設 true
|
||||
"reception_clue_exchange": bool, // 是否進行線索交流,可選,預設 true
|
||||
"reception_send_clue": bool, // 是否贈送線索,可選,預設 true
|
||||
|
||||
/* 以下參數僅在 mode = 10000 時生效,否則會被忽略 */
|
||||
"filename": string, // 自定義配置路徑,必選。不支援執行中設定
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user