| name | validate_player_action |
| description | 在执行任何玩家行动前,验证其合法性并确定检定方式(直接/优势/劣势/拒绝)。 |
| scenarios | ["play"] |
| metadata | {"author":"meathill","version":"1.0.0","group":"gameplay","execution-mode":"native"} |
验证玩家行动合法性
在 GM 叙述任何结果之前,先对玩家声明的行动或前提进行合法性校验,
确定是否需要检定、是否享有加值,以及如何调用 roll_dice。
When to use
- 玩家声称拥有某项背景优势时("我是本地人"、"我认识他")。
- 玩家声称某个动作不需要检定时("我肯定知道"、"我直接就做到了")。
- 任何涉及技能或属性的行动,在掷骰前先走本 skill。
Validation Procedure
Step 1 — 读取人物卡
用 view_file 读取当前调查员的 JSON 人物卡,确认:
profile.hometown / profile.background 等背景字段
special_rules 中的加成条件
skills 中相关技能值
Step 2 — 核查玩家声明与人物卡的一致性
| 玩家声明 | 核查项 | 结论示例 |
|---|
| "我是本地人" | profile.hometown 是否在驻马店/王家村 | 王富贵 ✅ → 优势;刘全兴 ❌ → 无加值 |
| "我认识刘老仙" | background 是否提及辖区执法经历 | 王富贵 ✅(黑皮笔记本档案)→ 相关检定+10 |
| "我直接做到了" | 该行动是否属于自动成功范畴(纯叙事/装备使用/已知事实) | 若不属于,必须检定 |
| "我用常识判断" | INT 属性是否支持,是否有专业背景 | 酌情降低难度,仍需检定 |
自动成功的合法场景(无需检定)
- 使用已持有的道具(掏出手电筒、翻开笔记本本身)
- 描述角色外貌、台词等纯叙事内容
- 已知必经线索的获取(模组中标注
无检定 的线索)
常见非法声明
- "我应该知道" + 信息超出背景合理范围 → 拒绝,给出原因,提示可用哪个技能尝试
- "我直接说服他" → 说服技能检定,背景可给优势但不能跳过
- 用另一角色的背景为当前角色申请优势 → 拒绝
Step 3 — 输出检定参数
验证通过后,输出以下结构化参数供 roll_dice 使用:
{
"action": "查阅刘老仙档案并回忆",
"skill": "图书馆使用",
"base_value": 50,
"modifier": 10,
"final_value": 60,
"roll_mode": "advantage",
"roll_mode_reason": "王富贵为本地宗教办,档案由本人亲自建立",
"difficulty": "regular",
"on_success": "获得刘铁柱完整档案细节 + 关键回忆(谈判软肋)",
"on_fail": "只获得基础档案信息,关键弱点细节想不起来"
}
roll_mode 取值:
normal — 单次投骰
advantage — 投两次取低(COC 中"奖励骰":两个十位取小)
disadvantage — 投两次取高(COC 中"惩罚骰":两个十位取大)
Do not
- 不验证就直接叙述行动结果(无论成功或失败)。
- 把玩家的背景声明当作自动成功的理由。
- 替玩家做行动决策——只验证玩家已经声明的行动。
- 在验证输出后立刻叙述结果,必须先调用 roll_dice。
Contract
当前 skill 的参数、边界与返回要求以本文件说明为准。
Usage
- 玩家声明行动 → 读人物卡 → Step 1-3。
- 输出检定参数结构体。
- 调用 roll_dice skill,传入检定参数。
- 根据 roll_dice 结果叙述后果,然后停下,等待玩家下一步决策。