单机传奇机器人刷怪脚本不刷怪 同引擎两版本差异排查

来源: 作者: 点击:
本人架设单机传奇,遇到一个棘手的机器人刷怪脚本问题,反复调试都无法解决,全程直奔主题,恳请各位脚本高手帮忙看看,到底是哪里出了问题,怎么修改才能让复古版正常刷怪。

核心问题很明确,我有两个单机传奇版本,使用的是完全一样的引擎,机器人刷怪脚本也基本一致,只修改了地图编号、怪物名字这些基础数据,没有改动脚本核心命令和逻辑,但是变态版的脚本能正常刷怪,复古版的死活不刷怪,不管重启多少次服务器、刷新多少次脚本,复古版的地图里都没有怪物刷新,完全没有任何刷怪反应。

先跟大家说清楚两个版本的脚本差异,避免高手们混淆,两个版本的机器人刷怪相关脚本,文件夹路径、脚本文件名、核心命令都完全一样,唯一的不同就是我手动修改的部分:一是地图编号,变态版用的是其他地图编号,复古版我改成了h003(幻三)和h006(幻六);二是怪物名字,变态版用的是高阶怪物名称,复古版改成了黑色恶蛆88、楔蛾88、蝎蛇88、红野猪88、黑野猪88,除此之外,没有任何其他修改,包括脚本命令、判断条件、执行逻辑,全都一模一样。

下面我把复古版机器人刷怪相关的全部脚本内容完整贴出来,方便高手们精准排查,所有脚本都是我目前正在使用的,没有遗漏任何细节,也没有修改过任何命令,只替换了地图和怪物名称,具体如下:

首先是Robot_def文件夹里的MonGen.TXT文件,这个文件是机器人刷怪的定时触发脚本,里面只有两行内容,负责指定时间触发对应的刷怪命令,具体内容:#AutoRun NPC SEC 10 @幻三刷怪 #AutoRun NPC SEC 10 @幻六刷怪 ,意思就是每10秒触发一次@幻三刷怪和@幻六刷怪两个命令,实现幻三、幻六两个地图的定时刷怪,这个文件我没有做任何多余修改,和变态版的内容只有刷怪命令名称的差异(对应地图修改)。

然后是AutoRunRobot文件,这个文件是机器人自动执行脚本的触发设置,里面只有一行内容:#AutoRun NPC SEC 5 @练级活动 ,作用是每5秒触发一次@练级活动命令,关联后面的练级活动和地图传送脚本,这一行内容和变态版完全一致,没有做任何修改,确保练级活动能正常触发,玩家能进入刷怪地图。

接下来是核心的刷怪脚本,也就是RobotManage文件里的内容,重点是[@幻六刷怪]的脚本片段,这是幻六地图刷怪的核心逻辑,具体内容如下:[@幻六刷怪] #IF checkhum h006 1 EQUAL G60 1 #ELSEACT ClearMapMon h006 break #IF checkmonmap h006 100 #ELSEACT MONGENEX H006 55 50 黑色恶蛆88 100 100 MONGENEX H006 55 50 楔蛾88 50 50 MONGENEX H006 55 50 蝎蛇88 100 100 MONGENEX H006 55 50 红野猪88 100 100 MONGENEX H006 55 50 黑野猪88 100 100 。

我先简单说明一下这段幻六刷怪脚本的逻辑,我理解的是:首先判断h006(幻六)地图内是否有玩家(checkhum h006 1),并且判断G60变量是否等于1(EQUAL G60 1),如果两个条件有一个不满足,就清除h006地图内的所有怪物(ClearMapMon h006),然后结束当前脚本(break);如果两个条件都满足,再判断h006地图内的怪物数量是否小于100(checkmonmap h006 100),如果小于100,就用MONGENEX命令在h006地图的55,50坐标附近,刷出对应的五种怪物,每种怪物的数量和刷新范围按后面的数值设置。

幻三刷怪的脚本逻辑和幻六完全一致,只是把地图编号改成了h003,怪物名称和数量稍有调整,这里就不重复贴出,重点排查幻六的脚本即可,因为两个地图都不刷怪,问题大概率是共性的。

最后是QManage.txt文件里的内容,这段脚本负责练级活动的触发和玩家进入刷怪地图的传送,具体内容:[@开始练级] #IF CHECKLEVELEX > 0 #ACT CloseBigDialogBox #SAY  \ <【进入幻3】/@MOVELIANJI>\ ;[@MOVELIANJI] #IF CHECKLEVELEX > 0 EQUAL G60 1 #ACT MAPMOVE h003 #ELSEACT MESSAGEBOX 目前活动未开启,无法进入该地图,\ close BREAK 。

这段脚本的逻辑很简单,玩家触发[@开始练级]命令后,只要等级大于0(CHECKLEVELEX > 0),就关闭大对话框,显示进入幻3的选项;玩家点击【进入幻3】,触发[@MOVELIANJI]命令,判断等级大于0且G60变量等于1,如果满足条件,就把玩家传送到h003(幻三)地图,如果不满足,就提示活动未开启,关闭对话框并结束脚本。

现在补充我自己的调试情况和疑问,方便高手们进一步判断,我已经做了以下尝试,都没有解决问题:

第一,重启服务器和刷新脚本,每次修改脚本后,我都会先保存文件,然后关闭所有服务器进程,重新启动服务器,同时在引擎里刷新机器人脚本和NPC脚本,但是复古版还是不刷怪,变态版重启后能正常刷怪,排除了脚本未生效的问题。

第二,检查地图编号和怪物名称,我反复确认了h003、h006两个地图编号,和复古版客户端、服务端的地图编号完全一致,没有填错,也没有混淆大小写;怪物名称“黑色恶蛆88”“楔蛾88”等,也和服务端怪物数据库里的名称完全一致,没有错别字、没有多余空格,排除了地图和怪物名称错误的问题。

第三,检查脚本命令格式,我对比了变态版和复古版的所有脚本命令,#IF、#ACT、#ELSEACT、break、MONGENEX、ClearMapMon等关键字,格式完全一致,没有遗漏关键字、没有多余空格,也没有填错命令,比如MONGENEX命令的参数顺序(地图编号、坐标、怪物名称、数量、范围),和变态版完全一样,排除了命令格式错误的问题。

第四,测试练级活动和地图传送,我手动触发[@开始练级]命令,能正常显示进入幻3的选项,点击后,只要G60变量等于1,就能正常传送到h003地图,提示信息也能正常显示,说明QManage.txt文件里的脚本是正常生效的,传送功能没有问题,问题应该只出在刷怪脚本本身,和传送脚本无关。

现在我重点怀疑几个可能出问题的地方,恳请高手们帮忙判断,第一个疑问,就是RobotManage文件里的checkhum h006 1和EQUAL G60 1这两个判断条件,是不是有问题?变态版里的判断条件和这个完全一样,能正常生效,为什么复古版就不行?checkhum h006 1是不是判断h006地图内有1个及以上玩家?如果地图内没有玩家,是不是就会执行#ELSEACT里的命令,清除怪物并结束脚本,导致不刷怪?

第二个疑问,G60变量到底是控制什么的?EQUAL G60 1是不是表示练级活动开启?我不确定复古版的G60变量有没有被正常激活,会不会是复古版里没有设置G60变量等于1,导致刷怪脚本的判断条件不满足,一直执行#ELSEACT里的清除怪物命令,所以无法刷怪?而变态版里的G60变量被正常激活,所以能正常刷怪?

第三个疑问,MONGENEX命令的参数设置有没有问题?复古版里的参数是H006 55 50 黑色恶蛆88 100 100,这里的H006和前面的h006大小写不一致,会不会影响脚本执行?我对比了变态版,变态版里的地图编号大小写是统一的,复古版里我不小心把MONGENEX命令里的地图编号写成了大写H006,而其他地方都是小写h006,这会不会是导致不刷怪的关键原因?

第四个疑问,checkmonmap h006 100这个判断条件,是不是判断地图内怪物数量小于100就刷怪?如果这个数值设置过高,比如复古版h006地图的承载怪物数量本身就不到100,会不会导致判断条件一直不满足,无法执行刷怪命令?但变态版里的数值也是100,能正常刷怪,所以这个疑问暂时不确定。

第五个疑问,Robot_def文件夹里的MonGen.TXT文件,触发命令的时间设置有没有问题?每10秒触发一次,会不会太短,导致脚本冲突,无法正常刷怪?我尝试把时间改成20秒,重启服务器后,还是不刷怪,排除了时间设置过短的问题;另外,脚本里的@幻三刷怪、@幻六刷怪命令,有没有可能和其他脚本命令重名,导致无法正常触发?

还有一个细节,我发现复古版里,即使我手动把玩家传到h006地图,确保地图内有玩家(满足checkhum h006 1的条件),还是不刷怪,地图里始终没有任何怪物,这说明即使第一个判断条件满足,后面的刷怪命令还是没有执行,大概率是后面的判断条件有问题,或者MONGENEX命令本身有问题。

我也尝试过删除RobotManage文件里的#ELSEACT ClearMapMon h006 break这两行内容,只保留刷怪相关的判断和命令,重启服务器后,还是不刷怪,这说明问题不是出在清除怪物的命令上,而是出在刷怪命令的执行环节,或者前面的判断条件始终不满足。

另外,我检查了两个版本的引擎设置,机器人功能都是开启的,刷怪相关的配置(比如怪物刷新频率、地图承载怪物数量)也完全一致,没有任何差异,排除了引擎设置的问题,问题肯定出在复古版的脚本本身,而且是我修改地图和怪物名称时,不小心忽略的某个小细节。

再补充一个疑问,复古版里的怪物数据库,有没有可能没有添加我设置的五种怪物(黑色恶蛆88、楔蛾88等),导致即使刷怪脚本正常执行,也无法刷出怪物?我打开复古版的怪物数据库,确认里面有这五种怪物,属性和变态版里的对应怪物一致,排除了怪物数据库缺失的问题。

现在我实在没有头绪,两个版本用的是同样的引擎,脚本核心逻辑完全一致,只修改了地图和怪物名称,为什么变态版能正常刷怪,复古版就死活不刷怪?我怀疑最可能的问题就是G60变量没有激活,或者MONGENEX命令里的地图编号大小写不一致,还有就是checkhum判断条件的理解有误。

恳请各位脚本高手,结合我贴出的完整脚本内容,帮我逐一排查问题,重点看看G60变量、地图编号大小写、checkhum判断条件这几个地方,到底是哪里出错了,给出具体的修改方法,不需要多余的理论讲解,只需要精准的排查方向和修改步骤,比如哪个命令需要修改、哪个参数需要调整、G60变量怎么激活。

我自己对机器人刷怪脚本的理解有限,尤其是变量控制和命令参数的细节,可能很多简单的错误我自己看不到,而高手们一眼就能发现,再次恳请各位高手出手相助,帮我解决这个困扰已久的问题,只要能让复古版正常刷怪,万分感谢。

最后再总结一下核心排查点,方便高手快速定位:1、同引擎两个版本,脚本核心一致,仅修改地图编号和怪物名称,变态版刷怪正常,复古版不刷;2、复古版所有刷怪相关脚本已完整贴出,重点是RobotManage文件里的[@幻六刷怪]脚本;3、怀疑问题出在G60变量、地图编号大小写、checkhum判断条件、MONGENEX命令参数这几个地方;4、传送脚本正常,怪物数据库完整,引擎设置无差异。