LPAI AI 游戏编辑器文档

脚本系统

objects 对象

脚本系统 用 objects 读取、创建和删除对象 `objects` 用来操作 `类对象` 里创建出来的具体对象。做角色、装备、任务、怪物这类内容时,经常会用到它。 # 什么时候会用到它 常见场景有这些: 读取某一类对象的列表 新建一个对象 删除一个对象 通过 对象筛选器 取出一批对象 修改某个对象的名字、

脚本系统

用 objects 读取、创建和删除对象

`objects` 用来操作 `类对象` 里创建出来的具体对象。做角色、装备、任务、怪物这类内容时,经常会用到它。

# 什么时候会用到它

常见场景有这些:

  • 读取某一类对象的列表
  • 新建一个对象
  • 删除一个对象
  • 通过 对象筛选器 取出一批对象
  • 修改某个对象的名字、介绍或属性

# 常用方法一览

# 类对象相关

方法 作用
objects.getObjects(classname, pro?, start?, end?) 读取某个类里的对象列表
objects.newObject(classname, name, des) 新建一个对象
objects.delObject(classname, index) 按列表位置删除对象
objects.delObjectByID(classname, id) 按对象 ID 删除对象
objects.getObjectsByFilter(filterid, curobjectid?) 按对象筛选器取对象

# 单个对象相关

方法 作用
obj.getName() 读取对象名字
obj.setName(name) 修改对象名字
obj.getDes() 读取对象介绍
obj.setDes(des) 修改对象介绍
obj.getID() 读取对象 ID
obj.getPro(name) 读取对象属性
obj.setPro(name, value) 设置对象属性
obj.addPro(name, value) 给对象属性加减数值
obj.delPro(name) 清掉对象自己的属性覆写
obj.getComPro(name) 读取对象组合属性
obj.getString(name) 读取对象里的动态字符串
obj.setString(name, value) 写入对象里的动态字符串

# 1. 读取一类对象

let npcs = objects.getObjects("NPC");
let monsters = objects.getObjects("怪物");

如果你想顺便按某个属性范围筛一下,也可以这样写:

let lowHpMonsters = objects.getObjects("怪物", "当前血量", 0, 20);

# 2. 新建一个对象

let npc = objects.newObject("NPC", "酒馆老板", "总是知道一些消息");

创建成功后,就可以马上继续给它写属性:

if (npc) {
  npc.setPro("好感度", 10);
  npc.setPro("是否已见面", 1);
}

# 3. 删除对象

# 按列表位置删除

objects.delObject("掉落物", 0);

# 按对象 ID 删除

objects.delObjectByID("掉落物", "object_unique_id");

如果对象列表顺序会变化,常见会按 ID 删除对象。

# 4. 用对象筛选器取对象

如果你已经在编辑器里配好了 对象筛选器,脚本里可以直接用:

let targets = objects.getObjectsByFilter("可交互NPC");

这很适合:

  • 先在编辑器里配好挑选规则
  • 脚本里直接拿结果继续处理

# 5. 读取和修改单个对象

# 名字和介绍

let npc = objects.getObjects("NPC")[0];

let name = npc.getName();
let des = npc.getDes();

npc.setName("新酒馆老板");
npc.setDes("最近显得格外疲惫。");

# 对象 ID

let id = npc.getID();

对象 ID 很常用,特别是在对象控件的脚本里。

# 6. 读取和修改对象属性

# 读取属性

let favor = npc.getPro("好感度");
let hp = npc.getPro("当前血量");

# 设置属性

npc.setPro("好感度", 20);
npc.setPro("当前血量", 100);

# 增加或减少属性

npc.addPro("好感度", 5);
npc.addPro("耐久", -1);

# 清掉对象自己的属性覆写

npc.delPro("临时攻击加成");

这适合把对象恢复回默认状态或基础状态。

# 7. 读取对象组合属性和动态字符串

# 组合属性

let power = npc.getComPro("总战力");

# 动态字符串

let title = npc.getString("对象称号");
npc.setString("对象留言", "欢迎再次光临。");

如果一个动态字符串支持对象自己的内容覆写,这里会先读写对象自己的那一份。

# 8. 当前对象脚本里可以直接拿对象

如果脚本本来就是在对象控件的当前行里触发的,通常可以直接用:

let obj = tools.kwargs.object;
let objID = tools.kwargs.objID;

这样就不用先遍历整类对象再慢慢找。

# 一个常见例子

下面这个例子会找到当前对象,然后给它加一点好感度:

let obj = tools.kwargs.object;
if (!obj) return;

obj.addPro("好感度", 1);
obj.setString("对象留言", "你们的关系变得更好了。");

# 使用时要注意的几件事

  • newObject 失败时会返回 false
  • getObjectsByFilter 需要先在编辑器里有对应的 对象筛选器
  • obj.getPro 适合读对象属性,obj.getComPro 适合读对象组合属性。
  • 当前对象脚本里,通常会直接用 tools.kwargs.object

# 下一步

如果你还要做弹窗、输入、场景跳转、AI、地图或特效,可以继续看 tools 对象