函数
函数公式
函数就是给公式起个名字,随处复用。公式是整数运算:加减乘、整除(</)、上整除(>/)、取余(%)。
- 引用世界变量:[世界变量] 或 [.世界变量](点号开始的变量就是世界变量);
- 场景变量:[场景.变量](如 [森林.金币]);
- 物件变量:[场景.物件.变量](如 [森林.宝箱.开启次数];第一段也可以写场景名,或场景编号);
- 背包物品:[.bag.物品编号](输入 [ 从补全里选物品,自动插入物品编号;共享物品按来源身份解析)——读取背包里的数量,脚本里也能修改;试算恒 0;
- 调用其他函数:函数名()。
在函数库输入 [ 会自动补全变量与函数;「试算」即时显示结果与变量改动,改完马上看效果。
if 的分支也可以只写一个表达式:if [钥匙] == 1 then [钥匙] else [金币] end——整段 if 直接当作一个值(末行 = 返回值),可以放进更大的算式里。条件与计算的值也能直接选一个纯函数。
💡
纯算术函数可以放心用于条件——它不写任何状态、同一步内结果一致。而且改名会同步:函数改名自动更新所有引用它的公式,场景改名自动更新公式里的场景名。
脚本函数进阶
函数不止是算式。按行写三条语句,就能让函数「做事」:set 赋值、if … then … else … end 条件分支、for … times … end 有界循环;_rand(n) 取 0~n 的随机整数(含两端)。
set 也能写背包:set [.bag.物品编号] = …——只改当前用户的背包;多人世界里每人各有一份。试算只看不改,不会动真实背包。
循环还可以自带计数:for [`i] = 1 .. 52 times … end——每轮自动把计数变量设为当前数字,从 1 数到 52,一共 52 轮;起点大于终点时一轮也不跑。计数变量只在这一次执行里存在,用完即弃。
- for 计数器 [`i] = 起点 .. 终点 times:带着编号循环——每轮自动把计数变量设为当前数字(起点大于终点则一轮不跑);计数变量与局部变量同族,用完即弃。
- 局部变量 [`i]:方括号内反引号开头——每次函数执行新建、只在本次执行内有效、读未赋值 0、用完即弃;不进世界、存档或多人共享态;
- 洞 {表达式}:名字里的计算下标——[.tb_{cur}] 按 cur 的当前值动态找到对应变量;
- 自绑定 [..v]:「正在调用我的那个物件/计时器」的变量——同一个效果放进任意多个物件,每个只改自己;试算时没有调用物件,读 0、写入不生效,运行时以实际调用者为准。
「花费 ≈ N 步」实时估算执行成本:单次运行有步数上限,超限会中途停止。
⚠️
含 set / for / _rand 的函数(以及调用它们的函数)不能用于条件——它们会写状态或掷骰子。这类函数请只放在效果里。
if [.tb_{cur}] == 0 then
set [.tb_{cur}] = 1
end
for [`i] = 1 .. 3 times
set [.tb_{`i}] = [`i]
end💡
憋七世界的 52 张牌就是靠洞与自绑定写出来的:一张牌一个编号,一套效果管所有牌,每张只改自己——洗牌与发牌函数里还有 for 计数器的现场教学(从 1 数到 52,把牌一张张发进手牌位)。整副扑克没有一个特殊机制。
