herom2引擎实现智能假人自动上线、喊话互动和随机走动,依赖的是机器人定时系统配合三组核心脚本文件。整个机制不需要第三方插件,全部通过服务端自带的Robot_def目录和QuestDiary目录下的脚本文件完成。以下从脚本范例入手,逐段拆解每个模块的配置方法和命令用法。
## 假人系统文件结构
herom2引擎的假人功能涉及以下核心文件路径:
Mir200\Envir\Robot_def\AutoRunRobot.txt负责定时调度,设定假人上线的时间间隔和触发标签。同目录下的RobotManage.txt负责绑定执行脚本,写具体要执行的上线、喊话、移动等命令。
Mir200\Envir\DummyNameList.txt存放假人角色名称列表,每行一个名字,DUMMYLOGON命令会按顺序从这个文件中读取名称登录假人。
Mir200\Envir\QManage.txt中的[@Login]段负责假人上线时的初始化配置,包括加载配置文件、设置攻击模式和启动自动行为。
QuestDiary目录下存放假人行为脚本和数据文件,包括喊话文本、移动坐标和表情数据等。具体路径如QuestDiary固定数据喊话系统一.txt、QuestDiary固定数据行动.txt等,路径写法使用相对路径,以QuestDiary为基准。
## 自动上号脚本
在AutoRunRobot.txt中添加定时任务,控制假人上线节奏:
```
;每30秒上线一个假人
#AutoRunNPC SEC 30 @假人上线
;每10分钟补充离线假人
#AutoRunNPC MIN 10 @补充假人
```
SEC 30表示每30秒执行一次@假人上线标签。时间单位支持SEC(秒)、MIN(分)、HOUR(时)、DAY(天),数字越小上线越快,根据服务端承载能力调整。
在RobotManage.txt中添加对应标签的执行命令:
```
[@假人上线]
#IF
CHECKDUMMYCOUNT < 20
#ACT
DUMMYLOGON 3 330 330 1
SENDMSG 6 假人已自动登录
BREAK
[@补充假人]
#IF
CHECKDUMMYCOUNT < 10
#ACT
DUMMYLOGON 3 330 330 5
SENDMSG 6 补充登录5个假人
BREAK
```
CHECKDUMMYCOUNT < 20是防重复的关键判断,当前在线假人少于20个时才执行DUMMYLOGON,否则定时器每次循环都会执行一遍登录命令,导致已登录的假人被踢下线重登。
DUMMYLOGON的参数格式为“地图 X坐标 Y坐标 数量”。3代表盟重省地图,330 330是土城安全区中心坐标,最后的1表示登录1个假人。坐标不要设在安全区内,安全区内的假人不会主动移动和攻击,如果要让假人打怪,坐标应设在猪洞、蜈蚣洞等非安全区地图。
## 假人上线初始化脚本
在QManage.txt的[@Login]段中添加假人初始化逻辑,确保假人上线后自动加载配置并启动行为:
```
[@Login]
#IF
ISDUMMY
#ACT
SETDUMMYCONFIGFILENAME ..\Envir\DummyConfig\<$USERNAME>.txt
LOADDUMMYCONFIGFILE
ChangeAttatckMode 0
DUMMYSTART
BREAK
```
ISDUMMY检测当前登录角色是否为假人。SETDUMMYCONFIGFILENAME指定该假人对应的配置文件路径,文件名使用<$USERNAME>动态读取假人角色名,确保每个假人加载各自的等级、装备和技能配置。LOADDUMMYCONFIGFILE执行加载。
ChangeAttatckMode 0将假人攻击模式设为全体攻击,这是假人主动打怪的前提。攻击模式参数中,0代表全体攻击(主动攻击),1为和平攻击(不PK),5为行会攻击,6为红名攻击(受攻击后反击)。
DUMMYSTART是启动假人自动行为的核心命令。缺少这条命令,假人上线后会站在原地不动,不攻击怪物也不移动,百分百变成木桩。
## 假人说话脚本
假人随机喊话依赖GetRandomText命令从文本文件中读取随机内容。在QuestDiary目录下创建喊话文本文件,每行写一条喊话内容:
QuestDiary固定数据喊话系统一.txt内容示例:
```
兄弟们,谁知道屠龙在哪爆?
刚打了个祖玛教主,爆了个力量戒指
谁带我去赤月峡谷啊
出售各种材料,价格公道
行会收人,来的密我
```
GetRandomText命令的格式为“GetRandomText 文件路径 变量名”,从指定文件中随机抽取一行存入变量,然后通过GuildNoticeMsg或SENDMSG命令发送出去。
喊话脚本范例:
```
[@假人喊话]
#ACT
GetRandomText QuestDiary固定数据喊话系统一.txt S99
GetRandomText QuestDiary固定数据试炼表情.txt S10
GMEXECUTE 表情 <$STR(S10)>
GuildNoticeMsg 0 151 (!)%s:<$STR(S99)>
DelayCall 7000 @假人行为循环
BREAK
```
GetRandomText分别从喊话文件和表情文件中抽取内容,S99和S10是临时字符串变量。GMEXECUTE 表情命令触发假人做出对应的表情动作。GuildNoticeMsg的格式中,参数依次为前景色、背景色、消息内容,(!)是消息前缀标识,%s会被引擎自动替换为假人角色名。
DelayCall 7000表示7秒后跳转到@假人行为循环标签,形成循环执行。
## 假人走动脚本
假人随机移动通过FakeMoveTo和Mapmove命令实现。FakeMoveTo用于同一地图内的坐标移动,Mapmove用于跨地图传送。
在QuestDiary目录下创建坐标文件,每行写一个坐标对:
QuestDiary固定数据试炼坐标.txt内容示例:
```
83 321
73 323
83 288
73 266
83 147
73 337
```
走动脚本范例:
```
[@假人行为循环]
#IF
random 7
#ACT
GetRandomText QuestDiary固定数据行动.txt S5
GMEXECUTE 追杀 <$STR(S5)>
DelayCall 1000 @回城
BREAK
#IF
random 6
#ACT
GetRandomText QuestDiary固定数据试炼坐标.txt S8
MOV P8 <$STR(S8)>
GetRandomText QuestDiary固定数据试炼坐标.txt S7
MOV P7 <$STR(S7)>
mapmove 0 <$STR(P8)> <$STR(P7)>
GetRandomText QuestDiary固定数据试炼表情.txt S10
GMEXECUTE 表情 <$STR(S10)>
DelayCall 6000 @假人行为循环
BREAK
```
random 7表示有七分之一概率执行该分支。GetRandomText从行动文件中读取一个玩家名字存入S5,GMEXECUTE 追杀命令让假人追杀该目标玩家,模拟PK行为。
random 6分支从坐标文件中读取坐标值,通过MOV命令将字符串变量S8和S7的值赋给P8和P7。P变量是位置变量,专门用于存储坐标值。mapmove 0 <$STR(P8)> <$STR(P7)>将假人传送到地图0的指定坐标位置。地图编号0代表比奇省,3代表盟重省。
DelayCall 6000表示6秒后跳转回@假人行为循环,形成持续循环的随机移动加喊话行为。
## 假人配置文件的设置
每个假人上线时需要加载独立的配置文件,确定其等级、职业、装备和技能。在Mir200\Envir\DummyConfig目录下,为每个假人创建一个以角色名命名的配置文件,文件名与DummyNameList.txt中的名字一致。
配置文件范例(文件名:假人战神.txt):
```
[Setup]
Level=45
Job=0
Map=3
X=330
Y=330
[Equip]
Weapon=屠龙
Armor=天魔神甲
Helmet=圣战头盔
[Skill]
Skill1=烈火剑法
Skill2=半月弯刀
```
Level设定假人等级,Job设定职业(0战士、1法师、2道士),Map/X/Y设定出生位置。Equip段设定装备,Skill段设定技能。SETDUMMYCONFIGFILENAME命令中的路径参数需要与这个目录对应。
## 性能优化与常见问题
假人数量控制在20个以内时,单核CPU配合2G内存即可运行。50至100个假人建议使用双核CPU和4G内存。超过100个假人需要启用分线加载,通过脚本将假人分散到不同线路,避免单线路负载过高。
假人上线后不动,优先检查QManage.txt的[@Login]段中是否包含DUMMYSTART命令。其次检查M2控制台的功能设置中是否勾选了“允许机器人移动”和“启用机器人战斗”选项。DUMMYLOGON指定的坐标如果落在墙壁、水面或障碍物上,假人也会卡住无法移动,需要更换为合法可通行坐标。
假人不说话,检查QuestDiary下的喊话文本文件编码是否为ANSI。herom2引擎对UTF-8编码的文本文件解析可能异常,导致GetRandomText读取失败。喊话脚本中的GuildNoticeMsg命令参数数量必须与引擎规范一致,多一个空格或少一个参数都会导致命令静默失败。
DUMMYLOGON每次执行都会从DummyNameList.txt按顺序读取假人名字。如果DummyNameList.txt中的名字数量少于设定数量,多出的登录请求会被忽略。确保DummyNameList.txt中的名字数量大于等于MaxRobotCount的上限值。
修改Robot_def目录下的脚本文件后,需要在M2控制台中执行“重载机器人脚本”或重启M2Server才能生效。仅重新加载NPC不会应用Robot脚本的改动。
传奇herom2引擎自动上号说话走动的智能假人脚本配置详解
来源:
作者:
点击:

