机器人脚本怎么写
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-06-18 22:10:10 |
👁️ 阅读: 16
我是lua后端老师!
小仙,你想学习机器人脚本的写法是吧?这可是个很实用的功能,能帮你自动化执行很多任务,比如定时刷怪、发公告、清理数据等等。
在996引擎中,我们使用 `addscheduled` 这个函数来创建机器人脚本。它就像设置一个闹钟,到了指定时间就会自动执行你写好的代码。
我们先来看看这个函数怎么用:
```
addscheduled(scheduled_name, executeMethod, time, funcName)
```
**参数说明:**
* `scheduled_name` (字符串):给这个机器人取个名字,方便后续管理。
* `executeMethod` (字符串):执行方式,也就是闹钟的“响铃规则”。有下面几种选择:
* `'SEC'`:按秒运行。
* `'MIN'`:按分运行。
* `'HOUR'`:按小时运行。
* `'DAY'`:按天运行。
* `'RunOnDay'`:按每天的具体时间运行。
* `'RUNONWEEK'`:按星期几及具体时间运行。
* `time` (字符串):时间参数,配合上面的执行方式使用。比如 `'SEC'` 方式下填 `'5'`,就是每5秒执行一次。
* `funcName` (字符串):要跳转执行的标签名。这个标签需要写在你的脚本里,当机器人被触发时,就会运行这个标签下的代码。
**举个例子,假设我们想每30秒向全服发一条提示:**
首先,我们在 `QFunction-0.lua` 文件里写一个标签函数,比如叫 `@Robot_Announce`:
```
-- 这是一个机器人执行的函数,每30秒向全服发送提示
function Robot_Announce()
-- 使用系统对象(userid填"0")向所有玩家发送消息
sendmsg("0", "【系统提示】请注意休息,健康游戏!", 1) -- 1代表系统频道
release_print("机器人已发送全服提示")
end
```
然后,我们可以在某个NPC的脚本里,或者服务端启动的 `startup` 触发里,添加这个机器人:
```
-- 检查是否已经存在名为“全服提示”的机器人
local robot_name = "全服提示"
if not hasscheduled(robot_name) then
-- 如果不存在,就添加一个每30秒执行一次的机器人
addscheduled(robot_name, 'SEC', '30', '@Robot_Announce')
release_print("已成功创建机器人:" .. robot_name)
else
release_print("机器人 " .. robot_name .. " 已存在,无需重复创建")
end
```
**管理机器人:**
* **判断是否存在**:用 `hasscheduled(robot_name)`,返回 `true` 或 `false`。
* **删除机器人**:用 `delscheduled(robot_name)`。
```
-- 删除名为“全服提示”的机器人
delscheduled("全服提示")
release_print("已删除机器人:全服提示")
```
**重要提醒:**
1. 增删机器人事件是**异步操作**,不是立刻生效,但通常很快。
2. 机器人脚本里执行的函数,**没有默认的 `actor` (玩家对象) 参数**。如果你需要操作特定玩家,需要在函数内部通过其他方式(比如遍历在线玩家列表)来获取。
3. 机器人非常适合做全局性的、周期性的任务。
小仙,你先试着写一个简单的机器人,比如每分钟在日志里打印一次当前时间,练练手。哪里不明白随时再来问我!如果代码出错搞不定,也可以发给我帮你看看,咱们一起研究。
← 返回问答库