Asverra——以GitHub Copilot为DM的D&D 5e活动
通过GitHub Copilot Chat播放了一个结构完整的D&D 5e活动。Copilot充当地下城大师,使用MCP服务器进行D&D规则查找和跨会话的持久内存。
角色:德拉克塔尔-半兽人圣骑士(复仇誓言),3级\ 世界:Asverra——一个黑暗幻想的自制背景\ 主要任务:追捕并摧毁Garek Shatterbone,在他的仪式打开通往阿喀戎飞机的门户之前。 47天倒计时。
______________________________________________________________________
如何玩
开始会话
- 打开一个新 GitHub Copilot 聊天助手 VS Code中的窗口(不是内联聊天——使用聊天面板)
- 确保MCP服务器处于活动状态(检查
.vscode/mcp.json) - 复制以下内容
prompts/start-session.md并将其粘贴到聊天中 - DM(Copilot)将读取内存文件,回顾上次会话,并将您带入世界
- 用简单的英语描述德拉克萨尔的动作
游戏期间
- 行动:只需描述你想做什么。DM会告诉你要滚动什么以及DC是什么。
- 骰子:使用
node scripts/dice-roller.js 1d20+6对于记录的滚动,或者说“为我滚动”,副驾驶会讲述 - 规则问题:用字符或类型询问DM
[DM mode: question]走出叙事之外 - 战斗:粘贴
prompts/combat.md正确地组织一场战斗 - 休息:从粘贴相关部分
prompts/rest.md
结束会话
完成后,粘贴以下内容 prompts/end-session.md副驾驶将:
- 更新所有内存文件
- 写会话日志
- 确认世界发生了什么变化
然后使用自动会话管理器:
node scripts/end-session.js这将验证字符表,检查内存更新,以正确的格式提交,并可选择推送。
或手动: git add -A && git commit -m "Session [N]: [brief description]" && git push
______________________________________________________________________
自动化和脚本
此活动包括用于验证和工作流管理的自动化工具。
会话管理器
node scripts/end-session.js自动化工作流程:
- ✅ 验证字符表
- ✅ 检查内存文件更新
- ✅ 创建/验证会话日志
- ✅ 以适当的格式提交
- ✅ 可选择推送到远程
字符验证器
node scripts/validate-character.js根据D&D 5e规则验证德拉克萨尔的角色表:
- 级别/熟练度奖金匹配
- XP级别正确
- HP在范围内
- 法术槽与圣骑士进程匹配
摇骰子
# Basic roll
node scripts/dice-roller.js 2d6+4
# With advantage
node scripts/dice-roller.js 1d20 --advantage
# With context logging
node scripts/dice-roller.js 8d6 --context "Fireball damage"特征:
- 加密安全RNG
- 优势/劣势支持
- 自动将所有滚动记录到
rolls.jsonl - 自然20/1检测
CI/CD
GitHub Actions会在每次提交时自动验证:
- 字符表规则
- 会话编号
- 内存文件存在
- MCP服务器构建
看 scripts/README.md 获取完整文档。
______________________________________________________________________
工作区结构
dnd/
├── .github/
│ └── copilot-instructions.md # DM persona, memory protocol, rules system
├── .vscode/
│ └── mcp.json # MCP server configuration
├── characters/
│ └── party/
│ └── drakthar.md # Full character sheet — update after every session
├── campaign/
│ ├── world/
│ │ ├── lore.md # World history, pantheon, The Sundering
│ │ ├── geography.md # Regions, cities, dungeon locations
│ │ └── factions.md # The four major factions and their goals
│ └── npcs/
│ ├── allies.md # Potential allies with motivations and secrets
│ └── antagonists.md # Garek Shatterbone and his lieutenants
├── sessions/
│ ├── session-000-prologue.md # Opening scene — start here for Session 1
│ └── [session logs added here]
├── memory/
│ ├── recent-events.md # Rolling log of last ~3 sessions (DM reads at session start)
│ ├── world-state.md # Current faction status, NPC locations, active threats
│ └── lessons-learned.md # Drak'Thar's injuries, oaths, relationships, DM continuity notes
├── rules/
│ ├── srd-reference.md # Key 5e rules cheat sheet
│ ├── paladin-oath-of-vengeance.md # Full subclass reference for Drak'Thar
│ └── house-rules.md # Deviations from RAW
├── prompts/
│ ├── start-session.md # Paste this to begin a session
│ ├── end-session.md # Paste this to close a session and save memory
│ ├── combat.md # Paste this when entering combat
│ ├── rest.md # Short/long rest procedures
│ └── level-up.md # Level 4 and Level 5 instructions
├── mcp-servers/
│ └── dnd-mcp/ # heffrey78/dnd-mcp — 40+ D&D tools via Open5e API
└── README.md______________________________________________________________________
MCP服务器
配置了三台MCP服务器 .vscode/mcp.json:
| 服务器 | 用途 |
|---|---|
| dnd-5e | 40+工具:法术查找、怪物属性块、遭遇构建器、角色工具。使用Open5e API(无需密钥)。 |
| 记忆 | 跨会话的持久NPC、位置和事件记忆的知识图。用途 @modelcontextprotocol/server-memory. |
| 文件系统 | 对所有活动文件的读/写访问权限。用途 @modelcontextprotocol/server-filesystem. |
这 dnd-mcp 服务器预先构建在 mcp-servers/dnd-mcp/dist/index.js。如果需要重建: cd mcp-servers/dnd-mcp && npm install && npm run build
______________________________________________________________________
活动状态
| | | |-|-| | 当前水平 | 3 | | 当前经验值 |900/2700(4级)| | 仪式前的日子 | 47 | | 上次会话 |开场白(尚未播放)| | 主要威胁 |Garek Shatterbone-阿什赫斯特堡|
______________________________________________________________________
知识总结
阿斯维拉 大陆是否仍在从 分离 --200年前的一场大灾难,当时瓦尔德里安帝国试图将阿喀戎神作为动力源。Acheron摧毁了自己,打破了天空( 疤痕),蒸发资本( 莫)并打破了几代人的神圣联系。
德拉克塔尔家族 Skullmoor,三年前被屠杀 铁爪掠夺者,由半恶魔军阀领导 Garek ShatterboneDrak'Sar幸存了下来。他宣读了神圣的复仇誓言。他一直在穿过 阿什菲尔德 从那以后,一直在追捕爪兵。
现在他发现,Garek距离打开通往阿喀戎平面的永久门户还有47天,阿喀戎是一支来自无尽战争维度的无限军队。
数学很简单。停止仪式。杀了Garek。完成誓言。
这一切都不简单。
______________________________________________________________________
Git工作流
每次会议后:
git add -A
git commit -m "Session [N]: [one-line description of what happened]"
git push由创建的会话日志 prompts/end-session.md 并且将包括所有内存文件更新。
