基于 2024版 D&D 5e 规则 的 AI 地下城主系统。纯对话交互,无需专用客户端,任何 IM 软件即可运行。本 Skill 将 DM(地下城主)角色交给 AI,严格按照模组剧本和规则书推进游戏。
城主人格:明萨拉·班瑞(Minthara Baenre)——守序邪恶卓尔圣武士,前魔索布莱城贵族。语气霸道、果断、直接,但绝不放水作弊。详见 SOUL.md 和 IDENTITY.md。
┌─────────────────────────────────────────────┐
│ LLM 层:dnd-dm Skill (OpenClaw) │
│ 叙事生成、NPC 对话、场景描述、行为红线 │
│ ← prompt 驱动,保持 LLM 核心优势 │
├─────────────────────────────────────────────┤
│ API 层:dnd-api (FastAPI,端口自动检测) │
│ 30 个 HTTP 端点 + CLI 命令行工具 │
│ ← 任何平台(Discord/Foundry/Web)均可调用 │
├─────────────────────────────────────────────┤
│ 引擎层:dnd-engine(已内置) │
│ 骰子、战斗、存档、世界状态、模组缓存、SRD 搜索 │
│ ← 纯 Python,零 LLM 依赖,90 项测试覆盖 │
└─────────────────────────────────────────────┘
核心原则:上层依赖下层,下层不依赖上层。LLM 层只管叙事 + 调用引擎函数,不自行计算或拼数据。
将 dnd-dm-skill-x.x.x.zip 解压到空目录即可使用。
your-workspace/
├── SKILL.md / _meta.json
├── references/ ← 核心规则文件(供 LLM 读取)
│ └── party-sheet.html ← 角色卡网页(双击打开)
├── dnd-engine/ ← 引擎源码(已内置,无需安装)
└── items/ ← 物品模板
> ⚠️ 需用户自行准备:规则书和模组因版权原因无法随 Skill 分发。
将 2024版三宝书放入 rules/ 目录,模组文件放入 modules/ 目录。
在对话中回复 /verify,Agent 自动校验环境。通过后即可开始游戏。
首次使用时 LLM 会自动加载引擎:import sys; sys.path.insert(0, "dnd-engine")
| 技能 | 作用 | 配合方式 |
|:----|------|---------|
| dnd-dm(本技能) | 城主行为规则 + 三层架构调度 | 主技能,定义 DM 如何行动 |
| dnd5e-srd | SRD 5.2.1 RAG 检索 | 战时快速查规则,通过 Python 脚本搜索+展开引用 |
| 层级 | 名称 | 技术栈 | 核心职责 |
|:----:|:-----|:-------|:---------|
| LLM 层 | dnd-dm Skill | Markdown + prompt | 叙事、NPC、检定发起、行为红线——不可代码化 |
| API 层 | dnd-api | FastAPI(端口自动检测) | 30 个 HTTP 端点 + CLI 命令行工具 |
| 引擎层 | dnd-engine | pip 包, Python 3.10+ | 骰子/战斗/存档/世界状态/模组缓存/SRD搜索——纯函数 |
新增/修改功能时按 DM_DEV_GUIDE.md 开发规则9 做三层分析。
dnd_engine.combat.checks 结构化返回,LLM 仅展示结果
dnd_engine.save.templates 工厂生成,LLM 不自拼 JSON
标记)
combat_state.json
POST /api/combat/resolve-round 合并命中+伤害+状态更新
_scene_cache_*.json 追踪房间
checks.py 的 detail_lines 数组,格式由代码保证
party-sheet.html 双击即可查看队伍状态
roll_stat() 由引擎层执行
live_party.json 和角色卡
dnd_engine.save.io:write_save() / load_save() / list_saves()
scene_cache.py)
make_character_template() / make_save_template() / make_quest_template()
| 命令 | 功能 |
|:-----|:------|
| dnd-engine(已内置) | 初始化工作目录(创建 saves/ rules/ modules/ live_party.json) |
| dnd-engine verify | 校验环境(需 API 运行中) |
| dnd-engine server --port auto | 启动 API 服务(自动检测端口) |
骰子:
| 接口 | 功能 |
|:-----|:------|
| POST /api/roll | 骰子表达式求值 |
战斗:
| 接口 | 功能 |
|:-----|:------|
| POST /api/combat/check-hit | 命中判定 |
| POST /api/combat/calc-damage | 伤害结算 |
| POST /api/combat/skill-check | 技能检定(完整公式) |
| POST /api/combat/state/* | 战斗状态 CRUD(6 端点) |
| POST /api/combat/resolve-round | 一键命中+伤害+状态更新 |
| POST /api/combat/roll-initiative | 一键掷先攻+排序 |
队伍:
| 接口 | 功能 |
|:-----|:------|
| POST /api/party/calc-combat-xp | XP 计算 |
| POST /api/party/rest | 短休/长休结算 |
| GET /api/party/character/{name} | 角色属性查询 |
| POST /api/party/level-up | 升级自动结算 |
| GET /api/party/live | 实时角色状态 |
| POST /api/party/live/rebuild | 从存档重建实时状态 |
存档:
| 接口 | 功能 |
|:-----|:------|
| GET /api/saves/list | 存档列表 |
| POST /api/saves/load | 读档 |
| POST /api/saves/write | 存档 |
SRD:
| 接口 | 功能 |
|:-----|:------|
| GET /api/srd/search?q= | SRD 全文搜索 |
| POST /api/srd/expand | 展开上下文 |
| GET /api/srd/files | 查询 SRD 文件列表 |
| GET /api/srd/search-in-file | 在指定文件中搜索 |
系统:
| 接口 | 功能 |
|:-----|:------|
| GET /api/system/verify | 预飞校验:引用文件、引擎、权限 |
| POST /api/system/init | 自动创建工作目录 |
| GET /api/system/port | 查询当前 API 端口 |
世界状态:
| 接口 | 功能 |
|:-----|:------|
| GET /api/state/world | 世界状态 |
DM_RULES.md 中 26 条运行规则按 6 层组织,每条规则开头有 标记。加载时按层优先级常驻:
| 层 | 名称 | 包含规则 | 常驻时段 |
|:--:|:-----|:---------|:---------|
| 0 | 全局基石 | 0(会话启动), 0a(模组选择), 0.5(微互动), 10(红线), 18(代码), 19(Token), 21(安装) | 整个会话 |
| 1 | 运行时交互 | 1(检定), 1.5(叙事匹配), 2(场景空间), 3(推进), 4(支线), 17(不泄题), 20(回声) | 每次场景 |
| 2 | 展示模板 | 2b(地图), 9(信息展示) | 展示信息时 |
| 3 | 战斗系统 | 15(回合), 15b(装备) | 战斗回合 |
| 4 | 进度与状态 | 5(经验), 7(锚点), 8(章节), 13(存档), 14(存档), 16(实时状态) | 存档/升级 |
| 5 | 模组控制 | 12(构建), X(特殊) | 开新局/跨章 |
| 文件/目录 | 说明 |
|:----------|:------|
| references/ | 14 个核心引用文件(规则、模板、开发指南、人格定义、角色卡模板) |
| dnd-engine/ | [已弃用] 旧代码模板库(25 个 .py,兼容保留) |
| items/ | 物品模板目录(3 个 .md) |
| dnd-engine/ | 引擎层 + API 层全套源码 |
| dnd-engine/src/dnd_engine/ | 引擎层 Python 包(dice/combat/party/save/state/module/cli) |
| dnd-engine/api/server.py | FastAPI 服务(30 端点,端口自动检测) |
| dnd-engine/tests/ | pytest 测试(90 项) |
| saves/ | [自动生成] 存档文件 |
| rules/ | [自行准备] 2024版三宝书 |
| modules/ | [自行准备] D&D 模组文件 |
| party-sheet.html | 角色卡网页(双击即看,从 live_party.json 读取) |
| live_party.json | [自动生成] 实时角色状态 |
| _api_port.txt | [自动生成] API 运行端口 |
| _scene_cache_*.json | [自动生成] 场景缓存 |
共 9 个版本