Skip to content

检定对象

在 ADVMaker 中,检定通过 ADVUserCheck 对象来描述,通常可以在对话或者选项的 check 字段中进行配置,当游戏执行到这个检定时,会自动掷出骰子,计算最终点数,并与目标值比较,然后根据成功或失败分别跳转。

ADVUserCheck 参数详解

一个检定由几个核心部分组成,理解它们就像组装一台简单的戏剧机器。下面我们逐一说明。

骰子(dice

dice 决定了“用什么投掷”。你可以选择两种提供骰子的方式,推荐使用简洁的骰子表达式;如果你需要完全掌控随机逻辑,也可以传入一个自定义骰子对象。无论哪种方式,框架都会呼唤它来产生一个随机整数。

dice 的默认值取决于你选择什么检定方法,检定方法会在综合示例这一章讲到。

目标值(target

target 是检定的“及格线”。当在检定方式为 d20 模式时,投出的点数(加上修正后)必须大于或等于目标值,才算成功。在 percent 模式下为小于等于。

你可以直接写一个固定数字,比如 15;但更具动态感的是传入一个函数,比如 () => character.strength。这样,目标值就能跟随角色的状态实时变化——角色越强,检定就越容易通过。

目标介绍(targetDesc

你可以介绍一个这个目标值,例如:敏捷检定【困难】

修正值(modifier

环境、装备、或者剧情中的增益与减益,这些都可以通过 modifier 来表达。它是一个数组,每个元素都是一条修正记录,包含两个字段:

  • name:一段简短的字符串,用来告诉玩家这个修正来自何处,例如 "力量加成""受伤惩罚"。这会让检定界面显得透明而可信。
  • value:一个返回数值的函数,它决定了这条修正加多少(或减多少)。正值会提升检定结果,负值则会拖后腿。

所有 modifier 的数值会在骰子结果后累加。框架会在检定展示时自动列出这些修正名称和数值,让玩家清晰了解成功或失败的原因。

成功与失败的动作(success / fail

这是检定的分岔路口。successfail 各自接收一个动作:通过后该做什么,失败后该做什么。你可以填入场景或对话的 ID,也可以填入一个选项数组,或者干脆嵌入另一个检定来实现连环判定。这两个属性都是必填的,因为检定的意义就在于分支。

成功与失败的回调(onSuccess / onFail

除了改变剧情走向,有时你还需要“悄悄”做点事情:记录一个成就、播放一阵音效、修改某个看不见的属性。onSuccessonFail 就是为这种副作用准备的。它们都是函数,分别在检定成功或失败时被调用,而不会影响 successfail 所指向的主流程。两者默认都是“什么也不做”。


下表列出了定义一个检定所需的全部属性:

参数名类型默认值描述
diceADVDiceDiceExpression根据检定方式本次检定使用的骰子。
targetnumber() => number无,必填检定的目标值。投掷出的点数大于等于该值即为成功,反之为失败。可以传入一个函数,在检定时动态计算目标值,例如 () => player.strength
modifier{ name: string; value: () => number }[][]修正值数组。每个修正项包含一个 name(显示给玩家的修正原因,如“力量加成”)和一个 value 函数(返回修正的数值)。所有修正值会累加到骰子结果上。
successADVUserNext无,必填检定成功时执行的动作。可以是场景/对话 ID、选项数组、检定对象、null 或函数。
failADVUserNext无,必填检定失败时执行的动作,规则同上。
onSuccess() => void() => {}成功时的回调函数,用于执行一些副作用,如播放音效、记录成就等。
onFail() => void() => {}失败时的回调函数。

提示targetmodifier 的值都可以是动态函数,这意味着你可以根据角色当前的状态(血量、技能等级、装备等)实时调整难度和加成,让游戏更具动态性。