Skip to content

Latest commit

 

History

History
313 lines (265 loc) · 12.6 KB

inputdescribe.md

File metadata and controls

313 lines (265 loc) · 12.6 KB

OneDice 输入标准

运算符

普通多面掷骰 d

AdB(kq)C(pb)DaE

简述

这是最基础的掷骰方式,即为掷A个面数为B的多面骰子,然后计算它们(全部或部分)的点数总和,即为该表达式的最终结果。
a存在时转变为骰池,等同无限加骰池 aAa(B+1)kEmB,即无加骰轮下计算不低于成功线的骰子个数。

参数介绍

符号 参数 名称 解释 缺省 类别
d A 骰数 掷出多少个骰子 1 左值
d B 面数 掷出的骰子有多少面 - 右值
k/q C 选取线 只选取最大/小骰子
结果的个数,k大q小
A 参数
p/b D 奖惩数 追加奖惩骰的个数 0 参数
a E 骰池 功能转换为骰池
结果转为记录不低于该值的骰子个数
- 参数

附加说明

  • 面数B的缺省值通常由规则书决定,例如DND中通常为20,而COC中通常为100
  • p/b符号的奖惩骰规则来自COC,详见惩罚骰/奖励骰,该参数将强制覆写B100,并对A个骰子中每一只都进行C个该操作
  • k/q符号与p/b符号不可同时使用
  • a符号存在时,其余参数全部失效

惩罚骰/奖励骰 p/b

A(pb)B

简述

这是来自COC的掷骰方式,即为掷1个面数为100的多面骰子(实质上为:范围0~910面个位骰;范围0~910面十位骰,其中当出值为0时记作100),再掷B个面数为10惩罚骰/奖励骰,用其中最大/最小点数替换原先的十位骰,然后计算它们(全部或部分)的点数总和,即为该表达式的最终结果。

参数介绍

符号 参数 名称 解释 缺省 类别
p/b A - 无意义 1 左值
p/b B 面数 追加奖惩骰的个数 1 右值

无限加骰池 a

AaBkCqDmE

简述

这是常见于无限规则的掷骰方式,即为掷A个面数为E的多面骰子,计算点数不低于B的骰子个数,然后以此为新的骰子个数进行下一轮掷骰,直到下一轮掷骰不存在,然后求出所有累计结果中点数不低于C(如果有)以及不高于D(如果有)的骰子个数,即为该表达式的最终结果。

参数介绍

符号 参数 名称 解释 缺省 类别
a A 初始骰数 第一轮掷出多少个骰子 - 左值
a B 加骰线 每有一枚不低于该值
则下一轮掷骰增加一枚骰子
- 右值
k C 成功线 最终计算不低于该参数的骰子个数 8 参数
q D 反向成功线 最终计算不高于该参数的骰子个数 - 参数
m E 面数 掷出的骰子有多少面 10 参数

双重十字加骰池 c

AcBmC

简述

这是常见于双重十字规则的掷骰方式,即为掷A个面数为C的多面骰子,计算点数不低于B的骰子个数,然后以此为新的骰子个数进行下一轮掷骰,直到下一轮掷骰不存在,最后一轮记其最大值,此前每一轮记为C点,然后累加每一轮的点数总和。

参数介绍

符号 参数 名称 解释 缺省 类别
c A 初始骰数 第一轮掷出多少个骰子 - 左值
c B 加骰线 每有一枚不低于该值
则下一轮掷骰增加一枚骰子
- 右值
m C 面数 掷出的骰子有多少面 10 参数

FATE掷骰池 f/df

AfB

简述

理论上,FATE规则发展自Fudge规则。
这是常见于FATE规则的掷骰方式,即为掷A个面数为3的多面骰子,该骰子的三面分别为+/-/0,分别计为1-10,计算所有骰子点数总和,即为该表达式的最终结果。
由于历史原因,df直接等同于f

参数介绍

符号 参数 名称 解释 缺省 类别
f A 骰数 掷出多少个骰子 4 左值
f B - 无意义 3 右值

三目运算 ?

A?B:C

简述

三目运算符的作用只有一个,就是在A不为0时等于BA0时等于C

参数介绍

符号 参数 名称 解释 缺省 类别
? A 被判别式 这个表达式的真假将决定最终的值 - 左值
? B 为真表达式 为真时表达式的值 - 右值
: C 为假表达式 为假时表达式的值 - 参数

多元组 []

[A,B,C,D,...]

简述

多元组在格式上是被[]包裹的,被一系列,分隔的表达式(或称元素),如上例子,将会顺序执行ABCD……直到多元组结束。
这种表达式可以实现表达式的嵌套与多条表达式的组合,并且可以配合khkllp来实现特殊的操作。

参数介绍

符号 参数 名称 解释 缺省 类别
[] A B C D ... 表达式序列 顺序执行 - 序列

附加说明

  • 逗号表达式:对于那些与多元组结合没有特殊操作的运算符,默认情况下,多元组的值将为最后一个表达式的值,如[2,3]d100实际等同于3d100
  • 多态:部分运算符同时具有数值与多元组类型的计算结果,实际使用哪一个取决于与它结合的下一级运算符,例如2d100可以同时具有127[84,43]的效果,所以2d100d2等同于127d22d100kh等同于[84,43]kh

优势劣势/最大最小 kh/kl/dh/dl

A(kh/hl/dh/dl)B

简述

这是常见于DND规则的掷骰方式,这种算符需要与多元组或者具有多元组结果的算符配合使用,例如df[]
这个算符的意思即为将A的计算结果转换为多元组,比较其中各个表达式结果的大小并按照升序/降序从左至右排序,然后取其左侧/右侧B个点数,然后计算这些点数的总和。
该运算符由k/dh/l组合,共有4种情形:

  • k/d代表取左侧/右侧数字
  • h/l代表由左至右进行降序/升序排列,即大数/小数在左
    所以在实际使用中,kh/dlkl/dh分别为一样的功能,即取最大/最小B个数字并求和,区别是排序过程的顺序不一样。

参数介绍

符号 参数 名称 解释 缺省 类别
kh/kl/dh/dl A 待比较取值的表达式 一个具有多元组结果的表达式 - 左值
kh/kl/dh/dl B 取多少个数字求和 无意义 1 右值

附加说明

  • 本运算符优先获取其左值表达式的多元组结果,无多元组结果的表达式将被视为只有一个表达式的多元组。

限制最大/最小 max/min

AmaxB
AminB

简述

max/min算符支持将左值A中的值的最大/最小值限制在指定的B之下/之上A可以是一个单一数字,也可以是一个多元组。

参数介绍

符号 参数 名称 解释 缺省 类别
max/min A 被检测表达式 被检测是否需要限制的表达式 - 左值
max/min B 阈值 会被进行限制的阈值 - 右值

循环 lp

AlpB

简述

lp算符支持快速使用循环,其左侧的A与循环次数、单次步进以及变量相关,可以是数值或者多元组,右侧的B则是被作为循环体的多元组。

参数介绍

符号 参数 名称 解释 缺省 类别
lp A 循环标识 用于标识循环次数与步进
详见附加说明
- 左值
lp B 循环体 用于被多次循环计算的表达式 - 右值

附加说明

  • A循环标识可以有以下多种格式:
    • X单个数值,则为从1X以单次步进1,循环至等于X为止,包括X
    • [X]单个元素的多元组,等同X单个数值
    • [X,Y]两个元素的多元组,则为从XY以单次步进1,循环至等于Y为止,包括Y
    • [X,Y,Z]两个元素的多元组,则为从XZ以单次步进Y,循环至等于Z为止,包括Z
  • B必须为多元组,元素数量不限,将按照循环顺序执行,并将每次循环的执行结果拼接为一个完整的多元组
  • 特别的,B中的每个元素可以用符号i来引用本次循环的循环变量。

裁切 sp

AspB

简述

sp算符支持对多元组进行裁切,其左侧的A是被裁切的多元组,右侧的B则是裁切的标识。

参数介绍

符号 参数 名称 解释 缺省 类别
sp A 被裁切多元组 被裁切的多元组 - 左值
sp B 裁切标识 用于标识裁切范围与步进
详见附加说明
- 右值

附加说明

  • A必须为多元组,元素数量不限。有多种结果的表达式将被优先获取多元组结果。
  • B裁切标识可以有以下多种格式:
    • X单个数值,则为取出从左至右第X个表达式的结果
    • [X]单个元素的多元组,等同X单个数值
    • [X,Y]两个元素的多元组,则为从左至右第XY以单次步进1,将取出的结果拼接为新的多元组,包括第Z
    • [X,Y,Z]两个元素的多元组,则为从左至右第XZ以单次步进Y,将取出的结果拼接为新的多元组,包括第Z

弹射 tp

Atp

简述

tp算符支持对表达式进行多元组强制转换,这种转换我们称为弹射,这个算符将会其左侧的A弹射为一个多元组结果,从而强制后续与它结合的运算符使用这个多元组结果,而不是遵守多元组章节提到的多态原则。

参数介绍

符号 参数 名称 解释 缺省 类别
tp A 被弹射式 被弹射的多元组或表达式 - 左值

临时变量 $t

$tA=B
$tA

简述

$t算符支持存入和读取临时变量,可以用于其它涉及到多元组的环境。
=子运算符存在时,将向标号为A的临时变量存入B
无论=子运算符是否存在,$t运算符的结果都等于本次运算后标号为A的临时变量中最终所存储的值。

参数介绍

符号 参数 名称 解释 缺省 类别
$t A 临时变量标号 将操作标号为A的变量 - 右值
= B 被赋值数 将把B进行赋值 - 参数

按位与/或 &/|

A&B
A|B

简述

&/|算符可以将AB基于二进制进行按位与/或运算,当数字仅有01时与逻辑运算无异。

参数介绍

符号 参数 名称 解释 缺省 类别
`&/ ` A 左值 参与计算的左值 -
`&/ ` B 右值 参与计算的右值 -

判断大于/小于 >/<

A>B
A<B

简述

>/<算符可以将AB基于数值进行大于/小于的比较,当左值A确实大于/小于右值B时,则结果为1,否则为0

参数介绍

符号 参数 名称 解释 缺省 类别
>/< A 左值 参与比较的左值 - 左值
>/< B 右值 参与比较的右值 - 右值

运算法则

初等代数

除了上一节所包括的各类扩展运算符,还支持进行初等代数相关的运算。

符号 名称 备注
+ 加法 -
- 减法 -
*
x
乘法 -
/ 除法 只取整数部分
^ -
? 阶加 -
( 左括号 详见运算优先级
) 右括号 详见运算优先级

运算优先级

当不存在括号()时,表达式中的初等运算符遵守从左往右,从优先级高到优先级低的运算方式,优先级等级如下:

符号 等级
< 1
> 1
& 2
| 2
+ 3
- 3
*
x
4
/ 4
^ 5
sp 6
kl 6
kh 6
dl 6
dh 6
min 6
max 6
lp 6
tp 6
df 7
d 7
a 7
c 7
f 7
b 7
p 7
? 8
$t 9
[ -
] -
, -
( -
) -

df等同于f 当存在小括号()的时候,括号内的表达式优先计算。 当存在中括号与逗号的多元组格式[,]时,多元组会被优先计算并作为值加入后续运算。