阿瓦隆游戏插件
阿瓦隆游戏插件:在群里玩一局紧张刺激的嘴炮推理
用机器人实现多人阿瓦隆游戏,支持角色分配、任务投票、刺杀等完整游戏流程。
作者: 蜥蜴
背景
阿瓦隆(Avalon)是一款经典的桌游,与狼人杀类似,是推理与欺骗的博弈。然而,线下玩阿瓦隆有个痛点:需要一位「主持人」来分配角色、通知玩家信息、记录投票结果。如果主持人是玩家之一,他可能因为知道所有人的身份而影响游戏公平性。
于是我就想:能不能让机器人来当这个「主持人」?
这样所有玩家都能全身心投入游戏,不用担心主持人作弊或记错信息。于是就有了这款基于 Koishi 框架的阿瓦隆游戏插件。
工具定位
koishi-plugin-avalon-lizard 是一款完全由机器人驱动的阿瓦隆游戏插件,核心功能是:
- 自动化角色分配:根据玩家人数自动分配角色
- 私密身份通知:通过私聊向每位玩家发送角色信息
- 任务投票管理:记录并公布投票结果
- 特殊规则支持:刺杀、湖中仙女等完整规则
游戏基础
阵营与目标
| 阵营 | 角色 | 胜利条件 |
|---|---|---|
| 正义阵营 🛡️ | 梅林、派西维尔、忠臣、好兰斯洛特 | 成功完成 3 次任务 |
| 邪恶阵营 ⚔️ | 莫甘娜、刺客、爪牙、莫德雷德、奥伯伦、坏兰斯洛特 | 使 3 次任务失败,或刺杀梅林成功 |
角色一览
| 角色 | 阵营 | 能力 |
|---|---|---|
| 梅林 | 正义 | 能看到邪恶阵营(除莫德雷德外) |
| 派西维尔 | 正义 | 能看到梅林和莫甘娜,但不分彼此 |
| 忠臣 | 正义 | 普通好人,完成使命 |
| 莫甘娜 | 邪恶 | 伪装成梅林迷惑派西维尔 |
| 刺客 | 邪恶 | 任务失败或刺杀梅林 |
| 爪牙 | 邪恶 | 普通坏人 |
| 莫德雷德 | 邪恶 | 梅林看不到他 |
| 奥伯伦 | 邪恶 | 身份孤立,看不到其他坏人 |
| 好兰斯洛特 | 正义 | 能看到坏兰斯洛特 |
| 坏兰斯洛特 | 邪恶 | 能看到好兰斯洛特 |
使用流程
1. 查看规则与角色
先了解游戏规则:
1 | 阿瓦隆 规则 |
查看特定角色的信息:
1 | 阿瓦隆 角色 梅林 |
2. 开始游戏
在群聊中输入:
1 | 阿瓦隆 开始 |
机器人会创建一个新游戏,并等待玩家加入。
3. 加入游戏
每位玩家在群聊中输入:
1 | 阿瓦隆 加入 |
目前支持 5 到 11 人 游戏。
4. 分配角色
人数达到要求后,主持人(或任意玩家)输入:
1 | 阿瓦隆 分配 |
机器人会自动分配角色,并通过私聊向每位玩家发送其角色信息、阵营和能力说明。
注意:角色分配后,每位玩家都会收到机器人的私聊消息,请确保机器人能向你发送私聊消息。
5. 任务阶段
选择任务成员
系统会随机指定一名「发车人」(Leader),发车人需要在群聊中选择参与本轮任务的玩家:
1 | 阿瓦隆 发车 玩家1,玩家2 |
用逗号分隔玩家名,注意玩家名大小写。
投票
被选中的玩家通过私聊投票:
1 | 阿瓦隆 投票 成功 |
注意:正义阵营玩家只能投「成功」,邪恶阵营可投「成功」或「失败」。
6. 特殊机制
刺杀
当正义阵营完成 3 次任务后,刺客可以发动刺杀:
1 | 阿瓦隆 刺杀 玩家名 // 在群聊中执行 |
- 刺杀成功(选对梅林)→ 邪恶阵营胜利
- 刺杀失败 → 正义阵营胜利
湖中仙女(8-11人局)
在 2、3、4 轮任务发车前,车长可以查验一名玩家的阵营:
1 | 阿瓦隆 查验 玩家名 // 车长私聊执行 |
系统会秘密告知车长目标玩家的阵营(正义/邪恶),车长可以选择公开或不公开。
7. 结束游戏
任何时候都可以提前结束游戏:
1 | 阿瓦隆 结束 |
完整对局示例
以下是一个完整游戏流程的示例:
1 | [群聊] 玩家A: 阿瓦隆 开始 |
安装与配置
安装
1 | npm install koishi-plugin-avalon-lizard |
或者在 Koishi 控制台的插件市场搜索 “avalon-lizard”。
配置
目前插件无需特殊配置,安装即可使用。
1 | plugins: |
资源文件
插件包含角色头像图片(位于 assets/ 目录),安装时会自动包含。
技术实现
技术栈
| 技术 | 用途 |
|---|---|
| Koishi | 机器人框架 |
| TypeScript | 开发语言 |
| 私聊 API | 秘密发送角色信息 |
核心设计
角色分配算法
根据玩家人数从预设的角色池中抽取相应数量的正义/邪恶角色,再随机分配给每位玩家。
私密通知
使用 session.bot.sendPrivateMessage 向每位玩家发送角色信息,确保其他人无法看到。
投票管理
通过 selectedPlayers 跟踪当前任务的参与者,使用 voted 标记确保每人只能投一次票。
注意事项
1. 昵称设置
建议玩家在游戏开始前设置一个简单的昵称(如 “玩家A”、”小明”),避免使用复杂字符或表情符号。这在「发车」时需要输入玩家名时尤为重要。
2. 私聊权限
机器人需要能向玩家发送私聊消息。请确保:
- 机器人没有被玩家屏蔽
- 机器人有私聊权限
- 玩家没有关闭「允许陌生人私聊」
3. 单频道限制
插件目前同时只支持一个频道进行游戏。如果您在多个群同时使用,可能会导致数据混乱。
4. 游戏状态
游戏状态保存在内存中,如果机器人重启,游戏数据会丢失。这在开发环境下不是问题,生产环境建议考虑持久化。
5. 网络延迟
投票是同步操作,所有参与者投票后才公布结果。如果有玩家长时间不投票,游戏会卡住。建议在游戏开始前确认所有参与者都能及时响应。
常见问题
Q: 为什么我收到的角色信息没有头像图片?
A: 确保插件正确安装了 assets/ 目录下的图片文件。如果图片缺失,角色信息仍然会以文字形式正常显示。
Q: 发车时提示”未找到玩家”?
A: 检查玩家名是否完全匹配(包括大小写)。建议在游戏开始前确认所有玩家的显示名称。
Q: 私聊没有收到角色信息?
A: 可能是机器人被你屏蔽了。请确认机器人可以向您发送私聊消息,然后重新开始游戏。
Q: 游戏进行中突然卡住了?
A: 可能是某个玩家没有投票。可以尝试在群聊中提醒该玩家投票。如果实在无法继续,使用「阿瓦隆 结束」强制结束游戏。
未来计划
- 支持多频道同时游戏
- 增加游戏状态持久化
- 支持自定义角色配置
- 添加游戏日志记录
- 优化湖中仙女交互方式
获取工具
- npm 包:
koishi-plugin-avalon-lizard - GitHub 仓库:lizard0126/avalon-lizard
- 反馈建议:GitHub Issues
- 支持作者:请我喝可乐
🎉 后续会更新搭建 Koishi 机器人的教程,敬请期待!