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

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

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

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

functionOnLogin()
--登录触发动作
end

functionOnLogout()
--注销清理
end

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

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

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

functionMain()
ifstate==0then
Robot.Say("开始巡逻")
Robot.MoveTo("mir2"335335)
state=1
elseifstate==1andRobot.IsArrived()then
Robot.AttackNearestMonster()
state=2
elseifstate==2andRobot.GetHPPer()<50then
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脚本,假人可触发任务流程。例如:
functionOnTalk()
ifRobot.CheckQuest(101)==0then
Robot.GiveQuest(101)
Robot.Say("请帮我收集5个铁矿")
end
end

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

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