脚本系统
组合属性脚本
脚本系统 当普通公式不够用时,用脚本算出组合属性 `组合属性脚本` 适合做更复杂的数值计算。它的目标很单纯,就是返回一个最终数值。 # 什么时候该用它 如果普通公式已经不够表达,常见就该切到脚本: 需要 if / else 需要循环 需要读表格 需要统计一批对象 需要很多中间变量 # 最重要的规则 只能做读取
脚本系统
当普通公式不够用时,用脚本算出组合属性
`组合属性脚本` 适合做更复杂的数值计算。它的目标很单纯,就是返回一个最终数值。
# 什么时候该用它
如果普通公式已经不够表达,常见就该切到脚本:
- 需要
if / else - 需要循环
- 需要读表格
- 需要统计一批对象
- 需要很多中间变量
# 最重要的规则
- 只能做读取和计算
- 必须返回数值
- 这里通常直接读取普通属性、表格或对象属性来计算
这三条是最重要的。
# 1. 最简单的写法
let atk = player.getPro("攻击");
let def = player.getPro("防御");
let level = player.getPro("等级");
return atk * 2 + def + level * 5;
这类脚本最适合回答一个问题:当前这个值到底是多少。
# 2. 读表格来算结果
let level = player.getPro("工坊等级");
let table = player.getTable("工坊倍率表");
let rate = Number(table?.getData(level, "倍率") || 1);
return player.getPro("基础产量") * rate;
这很适合把数值配置放进表格,再由脚本做最后计算。
# 3. 统计一批对象
let pets = objects.getObjects("宠物");
let total = 0;
for (const pet of pets) {
total += Number(pet.getPro("战力") || 0);
}
return total;
这很适合:
- 统计所有装备总耐久
- 统计所有宠物总战力
- 取一批对象里的最大值或平均值
# 4. 做条件分支
let chapter = player.getPro("当前章节");
let score = player.getPro("基础评分");
if (chapter >= 5) {
return score * 1.5;
}
return score;
如果你已经开始有“先判断,再决定怎么算”的需求,脚本通常就比普通公式更合适。
# 5. 当前对象里也可以用
如果这个组合属性正好是在对象控件当前行里读取的,当前对象的属性也会参与计算。
这时你常见可以直接写:
let quality = player.getPro("品质");
let atk = player.getPro("攻击");
return atk + quality * 20;
或者更直接一点:
let obj = tools.kwargs.object;
if (!obj) return 0;
return Number(obj.getPro("攻击") || 0) + Number(obj.getPro("品质") || 0) * 20;
# 6. 这类内容通常不写在这里
下面这些内容更常写在触发脚本、事件或别的位置:
- 改属性
- 发奖励
- 跳场景
- 弹窗
- AI 请求
- 新建或删除对象
例如:
player.addPro("金币", 100);
return 999;
组合属性脚本主要负责把数值算出来。
# 7. 特别注意:这里通常不再读取组合属性
组合属性脚本里一般不会再去读组合属性:
player.getComPro("总战力");
这样很容易把计算关系绕乱。
更常见的写法是直接读取普通属性、表格或对象属性,再算出结果。
# 8. 几个常见例子
# 战力总分
let attack = player.getPro("攻击");
let defense = player.getPro("防御");
let crit = player.getPro("暴击");
return attack * 1.2 + defense * 0.9 + crit * 5;
# 负重率
let weight = player.getPro("当前负重");
let maxWeight = player.getPro("最大负重");
if (maxWeight <= 0) return 0;
return weight / maxWeight;
# 所有装备总耐久
let equips = objects.getObjects("装备");
let total = 0;
for (const equip of equips) {
total += Number(equip.getPro("耐久") || 0);
}
return total;
# 使用时要注意的几件事
- 必须
return一个数值。 - 只适合做读取和计算。
- 这里通常不再读取别的组合属性。
- 如果只是简单四则运算,普通公式往往已经够用。
# 下一步
如果你接下来要做显示文字,可以继续看 动态字符串脚本。