脚本系统
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 对象。