# Manaka × DG-LAB 新手快速开始

当前为 **v1.1.0：V3 / V4 双协议版**。V4 支持郊狼与负鼠分别选择和启停；负鼠需要 DG-LAB 4 App。已发现或已选中设备不代表已启用输出。

从旧版升级时，关闭游戏和旧控制中心，将完整包解压到新目录；选择原游戏目录，执行“安装 / 修复运行环境”，然后重新启动游戏以加载新版遥测与 HUD。设置和自定义波形保留在 `%APPDATA%\ManakaDGLab`。

## 玩家使用方式

1. 解压完整文件夹，不要只复制 EXE。
2. 双击 `ManakaQmlControlCenter.exe`；开发目录可双击
   `start_control_center.bat`，无设备演示可运行 `preview_control_center.bat`。
3. 首次启动请阅读风险知情协议；不同意会直接退出，且不会启动网络或设备服务。
4. 第一次使用时选择游戏根目录：打开该文件夹后必须能直接看到
   `SecretFlasherManaka.exe`。不要选择 `BepInEx`、`BepInEx/plugins` 或
   `SecretFlasherManaka_Data` 子目录；不确定时点击插件里的“目录怎么选？”。
5. 点击“一键安装并启动游戏”。纯原版不需要预装 BepInEx；控制中心正式支持
   v1.1.1、v1.1.2 和 v1.1.3，并会安装 BepInEx 6 IL2CPP 环境、为当前游戏版本准备对应的 Interop，再部署独立遥测插件。
6. 进入可操作场景，界面会自动显示心率、NPC 警觉度、动作和兴奋度。
7. 点击“波形工作台”可直接预览只读的内置预设、切换智能/固定模式，或使用简单画布绘制自己的波形。
   自定义波形可以命名并保存到“我的波形库”，固定目录为
   `%APPDATA%\ManakaDGLab\waveforms`；每个波形都是独立 JSON 文件，可备份或分享。
8. “存档工具”可以读取并修改当前存档的游戏货币（RP）和经验值。先载入目标存档，
   让角色处于室外（非室内），再按 Esc 暂停游戏并点击“备份、写入并保存”；每次写入前
   都会自动备份原始存档。经验写入后，需要完成任意任务并回家触发结算，等级才会刷新。
9. “Mod 管理器”只管理当前游戏目录中已有的插件、CustomMission 1 和
   CustomMission 2 内容。发行包不再携带第三方 Mod 仓库；请在“创意工坊”访问
   F95Zone 原帖，下载后使用 Drop-in 收件箱，或通过专用向导导入 user9527 整合包。

## Mod 管理器

- **插件**：扫描 `BepInEx\plugins` 下的 DLL；整合包 `plugins\save` 中的 DLL 会显示为已拥有但未启用。
- **V1 任务**：把来源目录中的 `CustomMissions`/`CustomMissions1` JSON 按系列归组，启用后复制到游戏的 `CustomMissions`。
- **V2 包**：每个 `CustomMissions2\包名` 文件夹是一个独立开关；名称与简介优先读取其 `meta.json`。
- **前置关系**：V1 任务需要先启用 `CustomMission 1`（`SFM_custom_mission.dll`）；V2 包需要先启用 `CustomMission 2`（`SFM_custom_mission_v2.dll`）。Mod 管理器的“推荐与前置”页会持续显示这两个加载器以及 Moaning2、Aftermath & StageLock 的实际状态。
- **当前加载**：是“全部 Mod”的启用状态筛选，只显示当前位于游戏启用目录、理论上会随游戏加载的插件和任务包；不读取运行日志，也不代表已经验证过运行结果。
- **V1 任务与地点**：每张 V1 Mod 卡同时提供启用开关、JSON 数量、地图起点和警告；可以按任务名、地图区域或触发位置搜索。整理文件没有覆盖的 Mod 仍会显示，并明确标记“没有地点记录”。
- 停用不会删除内容，而是移到游戏根目录的 `ManakaModManager\disabled`；再次启用会原样恢复。
- V2 的配置和存档目录不会随任务包停用而删除。
- 修改前必须完全退出游戏；只按 Esc 或回到标题画面不够。
- Aftermath 两个变体、MultiStageItemSearch 与 Plus 属于互斥组合，管理器会阻止同时启用；
  Hunted、Vampire、NPCBehaviorModifier 等已知软冲突会显示黄色警告。
- 第三方 Mod 仍属于其原作者；控制中心只保存路径和开关状态，不把这些文件打进发布包。
- 便携包仅内置 BepInEx 运行环境和本项目的 DG-LAB 遥测插件。CustomMission 1/2
  加载器、任务与其他插件均由用户从作者页面取得。

### 导入 user9527 汉化整合

1. 在“设备与游戏”选择游戏根目录，并先完成 BepInEx 运行环境安装。
2. 完全退出游戏，在“Mod 管理器”点击“9527 导入向导”。
3. 选择解压后能直接看到 `BepInEx`、`CustomMissions`、`CustomMissions2`
   和必读说明的目录。向导也能从只有一个有效候选项的上一层目录自动定位。
4. 检查识别出的插件、V1/V2 数量，阅读作者提供的必读说明，然后确认安装计划。
5. 向导会备份将被覆盖的文件，复制配置和附属资源，并应用“精简启动”预设：
   只启用 `SFM_custom_mission.dll` 与 `SFM_custom_mission_v2.dll`；其他第三方 DLL、
   全部 V1/V2 内容先放入 `ManakaModManager\disabled`。
6. 导入完成后在“本地 Mod”逐项开启需要的任务。DG-LAB 遥测插件不会被该预设关闭。

备份位于游戏目录的 `ManakaModManager\backups\9527-日期时间`。后续再次用向导更新时，
软件会依据上一次安装清单清理已由向导管理、但新包中已经移除的旧文件；不会运行或上传
整合包中的 EXE、BAT 或其他脚本。

### Drop-in 添加外部 Mod

1. 在 Mod 管理器点击“打开收件箱”。
2. 把外部 Mod 的 DLL、V1 JSON、V2 文件夹、完整 Mod 目录或 ZIP 放入
   `dropin_mods\incoming`。
3. 回到软件点击“导入并扫描”，新内容会马上出现在插件/V1/V2 列表中。
4. 确认来源可信后，再使用右侧开关安装到游戏。

导入会把内容标准化复制到 `dropin_mods\repository`；成功处理的原文件会移到
`dropin_mods\archive` 留作恢复，收件箱不会在下次扫描时重复导入。再次放入同名内容会
完整替换仓库版本，并在游戏关闭时刷新已启用副本。用户导入的 Mod 可在“全部 Mod”卡片
点击“删除”，同时清理仓库、游戏副本和停用隔离区。ZIP 会拒绝越界路径、符号链接、超过 5000 个文件或
解压后超过 512 MiB 的压缩包。导入阶段不会执行 BAT、EXE 或其他脚本；但启用第三方
DLL 后，BepInEx 会在游戏启动时加载它，因此请勿使用不可信来源的 Mod。

普通 F95Zone 内容请放入 Drop-in 收件箱；user9527 整合包请在“创意工坊”的路线 2
使用专用向导。Mod 管理器顶部不再切换来源，始终显示当前游戏目录及其停用隔离区中的内容。

## 存档工具

- 当前仅编辑游戏原生字段 `CurrentRp` 与 `ExposeExp`，不会连带修改技能、任务或解锁状态。
- 存档经过游戏自身的加密与序列化；控制中心不会直接篡改加密字节，而是让游戏插件在主线程
  更新数值，再调用游戏自己的手动槽位保存流程。
- 修改前的备份位于 `%APPDATA%\ManakaDGLab\save_backups`，默认保留最近 20 份。
- 必须先进入目标存档、让角色处于室外（非室内），然后按 Esc 暂停。未连接游戏、未载入手动槽位
  或游戏仍在运行时，写入会被拒绝。
- 修改经验值后，先完成任意任务，再回家触发游戏结算；等级不会在写入经验的瞬间直接刷新。
- 建议先使用较小数值验证游戏显示正常，不要输入超过界面允许范围的数值。

## 连接 DG-LAB

1. 电脑与手机连接同一局域网，在“设备与游戏”的二维码上方选择 V3 或 V4。
2. **V3**：在 DG-LAB 3 App 中通过蓝牙连接郊狼，打开“SOCKET 控制”，初始化后选择“连接服务器”并扫描二维码。默认端口为 TCP `9999`，页面下方有四步教程。
3. **V4**：使用 DG-LAB 4 App，连接郊狼和/或负鼠硬件，插好对应配件后扫码。默认端口为 TCP `9998`；郊狼和负鼠共用一次扫码，分别管理。
4. V4 发现受支持设备时会自动选中，但仍需逐台手动启用。手机里添加了设备并不等于蓝牙已连接；不能启用时点击按钮查看右下角的具体原因。
5. 可以在进入游戏前启用已就绪的设备，此时保持零输出待机。收到新鲜游戏数据后才开始联动。短暂的游戏数据刷新中断会归零待机，之后收到新的有效数据自动继续；设备断连或输出错误仍需手动重新启用。
6. “全部停止”停止两台设备，之后的游戏数据不会自动重新启用它们。源分配或负鼠配置保存后，需重新手动启用对应设备。

二维码无法连接时，检查同一 Wi-Fi、访客网络隔离与 Windows 专用网络防火墙权限。在“连接不上？”中可以切换局域网 IP 或使用可信家庭网络中的管理员网络修复。

## 负鼠工作台与 HUD

- 负鼠仅在 V4 可用。可直接同步游戏振动器低/高档位，随机档跟随游戏实际变化，不在软件里另选一个随机强度。
- A/B 独立配置支持同步游戏、动作映射、随机轮播、固定波形与关闭。波形库和下拉框支持视觉预览；预览不会发送硬件输出。
- 内置四种振动包络，也可新建自定义曲线。初始低档 10、高档 30、硬上限 30，默认仅用 A 配件；始终受手机 App 上限及配件状态约束。
- 顶栏 HUD 开关与齿轮位于同一边框内。设置中可调整显示内容、大小、透明度与位置，支持窗口化和全屏。隐藏 HUD 不等于停止输出。
- 侧栏“设置”包含中英语言、日夜主题、HUD、新手教程和本地配置目录入口。

## 波形工作台

- A/B 每个通道可独立选择心率或游戏动作，支持双心率、双动作和互换；同来源共用波形分配。
- 心率低/中/高档分界为开始至满幅区间的 30% / 70%，配置窗口会显示实际 BPM。低于开始值目标为零，满幅值对应日常最高强度。

- **智能切换（推荐）**：低心率段使用“官方·呼吸”，中心率段使用“官方·心跳节奏”，高心率段使用“官方·连击”；动作来源根据动作类型选择波形并使用较低强度，峰值边沿让 A/B 同步使用一次“Climax 双击”。
- **DG-LAB 官方精选**：已导入呼吸、心跳节奏、波浪涟漪、潮汐、连击、按捏渐强、渐变弹跳和挑逗 2 的原始 V3 波形帧。
- **固定预设**：所有正在输出的阶段使用同一个波形，适合比较不同波形或个人偏好固定节奏。
- **我的波形**：拖动预览图上的 16 个节点绘制包络，再调整频率代码；保存后可分配给任意智能区间，也可作为固定波形。
- 点击智能规则右侧的波形名称可轮换该区间的预设。
- 官方预设带有保守的“体感系数”，会适度降低输出强度，减少不同波形在同一数值下的体感突变；安全硬上限仍是最终上限。
- 预设较多时，可在左侧预设列表中使用鼠标滚轮浏览。
- 波形切换只在状态区间变化时发生；切换时会先清空对应通道队列，再下发新波形，避免队列堆积。
- 官方波形来源与许可证说明见 `THIRD_PARTY_NOTICES.md`。

主界面右上角的 **A/B 波形** 会打开实时监视窗：A 通道显示实际下发的心率波形，
B 通道显示实际下发的动作波形；峰值时两者会同步显示 Climax 双击。

## 面向传播的发布形式

推荐使用 PyInstaller 的 `onedir` 便携目录，再把整个
`ManakaQmlControlCenter` 文件夹压缩为 ZIP。相比单文件 EXE，它启动更快，
也更不容易被杀毒软件误报。

## 安全默认值

- 首次运行和手动暂停时输出保持关闭；扫码绑定成功后自动启用本次连接。
- A 通道由游戏心率直接驱动。默认低强度为 90–160 BPM / 5–30；中强度为
  85–160 BPM / 5–50；高强度为 80–160 BPM / 10–90。
- B 通道由动作进度驱动，普通动作最高只使用日常最高强度的约 55%。
- NPC 警觉度只显示在界面中，不改变 A/B 通道输出。
- 用户可以设置开始/满幅 BPM、最低强度和日常最高强度。
- “个性化 Pulse”窗口使用两个双端滑块：一个选择心率范围，一个选择输出强度范围。
- 三种快速预设不会修改安全硬上限；日常最高值可以高于硬上限，但实际下发仍会被硬上限裁剪。
- 所有输出最后还会经过安全硬上限裁剪；设备范围为 0–100，默认硬上限为 30。
- 把硬上限从默认值提高到 30 以上时，界面会再次要求确认。
- 遥测丢失 0.75 秒或离开可玩场景时立即归零并进入安全待机；
- 撤离失败（游戏 `GameOver` 上升沿）会在 A/B 通道各播放一次受限的双击 Climax，结束后立即归零；在失败画面中途启动控制中心不会补触发；
  有效游戏数据恢复后自动继续，不需要重新扫码。
- 打开游戏 ESC 系统菜单时，通过游戏的 `SystemMenuView` 和 `TimeScaleManager` 双重检测立即归零；关闭菜单后自动恢复心率输出。
- 完全发现与高潮只产生一次边沿事件。
- 程序在事件中途启动时不会补发边沿事件。
- 扫码绑定成功后自动启用 A/B 通道，同时保留固定可见的大号“暂停/继续输出”按钮。
- 暂停时会立即让 A/B 归零并清空波形队列，但不会断开 Socket；继续时恢复当前心率驱动。
- 输出期间每 0.8 秒补充一段约 1 秒的波形，避免 DG-LAB App 队列播放一次后停止。
