传奇GOM引擎假人脚本系统定制开发全解析

来源: 作者: 点击:
GOM引擎内置的假人(NPC机器人)系统用于模拟玩家行为,常用于测试、挂机演示或活动引导。其核心由Lua脚本驱动,通过配置文件与服务端交互。以下从结构、编写、调试到高级功能逐步说明。

一、假人系统基础组成
假人脚本位于服务端目录 ScriptRobot 下,主入口为 RobotMain.lua。每个假人需在 RobotList.txt 中注册,格式如下:
假人ID 假人名称 脚本文件名 初始地图 X Y 方向
例如:
1001 测试假人 TestRobot mir2 333 333 4

二、基础脚本结构
新建 TestRobot.lua,内容必须包含以下函数:
function Main()
-- 主循环逻辑
end

function OnLogin()
-- 登录触发动作
end

function OnLogout()
-- 注销清理
end

Main() 每秒执行一次,用于移动、对话、使用物品等操作。所有API调用需通过 Robot. 前缀,如 Robot.Say("你好")。

三、常用API指令
移动:Robot.MoveTo(地图名, X, Y)
发言:Robot.Say("文本") 或 Robot.Yell("喊话")
使用技能:Robot.UseSkill(技能编号)
拾取物品:Robot.PickUpItem()
自动打怪:Robot.AttackNearestMonster()
执行延迟:Robot.Delay(毫秒)(注意:非阻塞,需配合状态机)

四、状态机实现复杂行为
因脚本无多线程,需用状态变量控制流程。示例:
local state = 0

function Main()
if state == 0 then
Robot.Say("开始巡逻")
Robot.MoveTo("mir2", 335, 335)
state = 1
elseif state == 1 and Robot.IsArrived() then
Robot.AttackNearestMonster()
state = 2
elseif state == 2 and Robot.GetHPPer() < 50 then
Robot.UseItem("金创药")
end
end

五、物品与背包操作
假人可携带预设物品,需在 RobotItemList.txt 中定义:
假人ID 物品名称 数量 耐久
脚本中通过 Robot.HasItem("物品名") 判断是否存在,Robot.UseItem("物品名") 触发使用。

六、事件绑定扩展
GOM支持绑定特定事件,如:
OnKillMonster(monsterName):击杀指定怪物后触发
OnGetItem(itemName):拾取物品时响应
需在脚本中明确定义函数名,引擎自动回调。

七、调试与日志
启用服务端日志:在 !Setup.txt 中设置 LogRobot=1;
脚本中插入 Robot.Log("调试信息"),日志输出至 LogRobotLog;
假人异常退出时,检查 RobotError.log 获取错误行号。

八、性能与限制
单服建议假人数量不超过50个,避免CPU占用过高;
禁止在 Main() 中使用死循环或长延迟;
移动指令需配合 IsArrived() 判断,防止路径阻塞。

九、高级应用:动态任务引导
结合QFunction脚本,假人可触发任务流程。例如:
function OnTalk()
if Robot.CheckQuest(101) == 0 then
Robot.GiveQuest(101)
Robot.Say("请帮我收集5个铁矿")
end
end

需确保QFunction中存在对应任务ID处理逻辑。

假人脚本本质是状态驱动的自动化代理,合理设计状态转换与事件响应即可实现复杂交互。所有修改需重启M2Server生效,建议先在测试地图验证逻辑。