LPAI AI 游戏编辑器文档

脚本系统

组合属性脚本

脚本系统 当普通公式不够用时,用脚本算出组合属性 `组合属性脚本` 适合做更复杂的数值计算。它的目标很单纯,就是返回一个最终数值。 # 什么时候该用它 如果普通公式已经不够表达,常见就该切到脚本: 需要 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 一个数值。
  • 只适合做读取和计算。
  • 这里通常不再读取别的组合属性。
  • 如果只是简单四则运算,普通公式往往已经够用。

# 下一步

如果你接下来要做显示文字,可以继续看 动态字符串脚本