如何配置一个每秒执行的机器人 统计开区时间 用G2变量
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-06-18 15:58:57 |
👁️ 阅读: 10
我是lua后端老师!小仙,这个问题问得很好,我来教你如何配置一个每秒执行、统计开区时间的机器人。
首先,我们需要在 `RobotManage.txt` 文件中创建一个机器人。这个文件通常在你的服务端 `Mir200\Envir\Market_Def` 目录下。
**第一步:创建机器人脚本**
创建一个名为 `RobotManage.txt` 的文件(如果不存在的话),并添加以下内容:
```
[SEC]
@每秒统计
```
这行代码的意思是,每秒执行一次标签为 `@每秒统计` 的脚本。
**第二步:编写机器人逻辑**
接下来,我们需要在 `QFunction-0.txt` 这个主要的脚本文件中,编写 `@每秒统计` 标签下的具体逻辑。
```lua
[@每秒统计]
-- 这是每秒执行的机器人回调函数
function scheduled_backcall()
-- 获取开服天数(全局信息中的第1项)
local open_days = globalinfo(1)
-- 获取当前在线玩家数量(全局信息中的第6项)
local online_count = globalinfo(6)
-- 获取服务器名称(使用常量,因为 globalinfo(10) 可能获取异常)
local server_name = "<$SERVERNAME>"
-- 使用 release_print 在控制台输出信息,方便调试
release_print(string.format("[机器人统计] 服务器: %s, 开服天数: %d, 在线人数: %d", server_name, open_days, online_count))
-- 接下来,我们需要将开服天数存储到一个全局变量(G变量)中,供所有玩家和脚本使用
-- 我们假设使用 G2 变量来存储开服天数
setsysvar(2, tostring(open_days)) -- setsysvar 用于设置系统变量,参数1是变量索引,参数2是值
-- 如果你想存储更复杂的信息,比如拼接字符串,也可以
local stats_info = string.format("开服%d天,在线%d人", open_days, online_count)
setsysvar(3, stats_info) -- 将统计信息存入 G3 变量
end
```
**第三步:使用G变量**
设置好G变量后,你可以在游戏中的任何NPC脚本、触发脚本里使用它。
例如,在NPC对话中显示开服天数:
```lua
[@main]
你好,勇士!\
我们服务器已经开服 <$G2> 天了。\
当前有 <$G(N3)> 位英雄在线奋战!\
```
**重要提示:**
1. **`RobotManage.txt`** 和 **`QFunction-0.txt`** 文件修改后,需要在M2引擎的控制台点击 **“重读机器人配置”** 和 **“重读QFunction-0”** 才能使更改生效。
2. `globalinfo(1)` 获取的是从服务器部署开始计算的天数,这是一个累计值。
3. `setsysvar` 和 `getsysvar` 用于操作 **G(全局)变量**。`setsysvar(2, value)` 就是设置 G2 变量的值。在脚本中引用时用 `<$G2>`,在Lua中获取用 `getsysvar(2)`。
4. `release_print` 输出的信息可以在M2引擎的 **“调试-输出”** 窗口看到,非常适合用来检查机器人是否正常运行。
**进阶:使用新增的机器人事件接口(引擎64_24.05.23及以上)**
如果你的引擎版本比较新,还可以使用更灵活的 `addscheduled` 接口来动态创建机器人,这样就不需要手动编辑 `RobotManage.txt` 文件了。
你可以在游戏启动脚本(比如 `QManage.txt` 的 `[@startup]` 标签)里添加以下代码:
```lua
[@startup]
-- 服务器启动时执行
function startup(self)
local scheduled_name = "开区时间统计器"
-- 先检查是否已存在同名机器人,避免重复添加
if not hasscheduled(scheduled_name) then
-- 添加一个机器人,每1秒执行一次,跳转到标签 @scheduled_backcall
addscheduled(scheduled_name, 'SEC', '1', '@scheduled_backcall')
release_print("开区时间统计机器人已启动。")
end
end
```
这样配置后,一个每秒执行、自动统计开区天数并更新G2变量的机器人就设置完成了!小仙,如果还有哪里不明白,随时问我哦。
← 返回问答库