传奇脚本运行逻辑顺序解析 幸运转盘脚本报错及问题排查

来源: 作者: 点击:
本人捣鼓传奇幸运转盘脚本,遇到了逻辑顺序和报错相关的问题,贴出自己的脚本片段,跪求高手帮忙分析,主要疑问是脚本的条件检测顺序,以及修改命令后报错和游戏内无反应的原因,具体情况如下,越详细解答越好,万分感谢!
先把自己写的幸运转盘脚本完整贴出来,方便高手排查,脚本如下:
[@TXWheel_1]
{
╔════╦════╦════╦════╗╔════╗\
║经验 2万║经验 5万║经验3万 ║元宝+ 88║║<游戏说明/@TXWheel_HELP>╠═╗\
╠════╬════╩════╬════╣╚════╝ ║\
║元宝+ 5 ║         ║元宝+ 10║╔════╗ ║\
╠════╣  <启动大转轮/@TXWheel_1_2>  ╠════╣║<总转次数/@TXWheel_3>╠═╣\
║元宝+ 5 ║         ║元宝+ 20║╚════╝ ║\
╠════╬════╦════╬════╣╔════╗ ║\
║经验 1万║经验4 万║经验8 万║元宝+ 20║║<返回首页/@MAIN>╠═╝\
╚════╩════╩════╩════╝╚════╝\
}
[@TXWheel_1_2]
#IF
SMALL G19 100000
#ACT
MOVR P1 96
MOV M35 <$STR(P1)>
GOTO @TXWheel_2_1
BREAK
#IF
LARGE G19 1000000
#ACT
MOVR P1 48
MOV M35 <$STR(P1)>
GOTO @TXWheel_2_1
BREAK
#IF
CHECKGAMEGOLD > 9
#ACT
MOVR P1 72
MOV M35 <$STR(P1)>
GOTO @TXWheel_2_1
BREAK
#ELSEACT
MESSAGEBOX [提示]:启动幸运大转轮1次需要10个元宝,你的元宝不足无法启动。\ \    请确保你的包裹内有多余的地方放奖品。
GOTO @TXWheel_1
BREAK
我的第一个核心疑问,就是这段[@TXWheel_1_2]脚本的运行逻辑顺序,是不是先检测G19小于100000(SMALL G19 100000),然后再检测G19大于1000000(LARGE G19 1000000),最后再检测元宝大于9(CHECKGAMEGOLD > 9)?
我自己理解的是,传奇脚本的条件检测应该是从上到下依次执行,只要满足其中任意一个条件,就会执行对应的#ACT命令,然后跳转到@TXWheel_2_1,也就是说,不管是满足G19小于100000、G19大于1000000,还是元宝大于9,只要有一个条件达标,就能启动转盘,跳到指定节点,可实际测试下来,好像不是这样,而且修改命令后还出现了报错和无反应的情况。
再说说我测试的过程和遇到的问题,首先我按照原本的脚本设置,加载后游戏内点击“启动大转轮”,能正常触发,但我想调整G19的检测条件,就把第一个#IF里的SMALL改成了LARGE,变成“LARGE G19 100000”,然后重新加载M2,没有出现任何报错提示,看似加载成功,可回到游戏里,点击“启动大转轮”却没有任何反应,既不提示元宝不足,也不跳转,完全没动静。
我以为是修改错了命令,又把第一个#IF里的LARGE改回了原来的SMALL,重新加载M2的时候,就出现了报错,报错内容很明确:[脚本错误] 脚本命令:MOVR NPC名称:幸运转盘 地图:3(333:333) 参数1:P1 参数2:72 参数3:;变量P1取值在0到72之间 参数4: 参数5: 参数6:。
虽然报错了,但奇怪的是,回到游戏里点击“启动大转轮”,却能正常抽奖,能触发元宝检测,元宝足够的时候能正常跳转,元宝不足的时候会弹出提示,和原本的正常状态一样,就是M2会一直报这个错误,不知道是什么原因。
我自己琢磨了很久,也没搞明白问题出在哪,先说说我对脚本逻辑顺序的理解,不知道是不是错了。我认为,[@TXWheel_1_2]这个触发节点,点击后会从上到下依次检测三个#IF条件,第一个条件是G19小于100000,满足就执行MOVR P1 96等命令,然后跳走;如果不满足,就检测第二个条件G19大于1000000,满足就执行MOVR P1 48等命令,跳走;如果还是不满足,就检测第三个条件元宝大于9,满足就执行MOVR P1 72等命令,跳走;如果三个条件都不满足,就执行#ELSEACT里的提示,返回转盘首页。
按照这个逻辑,只要满足三个条件中的任意一个,都能跳到@TXWheel_2_1启动转盘,可我修改SMALL为LARGE后,加载不报错但游戏内无反应,改回SMALL后,加载报错但游戏内正常,这就让我很困惑了,到底是逻辑顺序理解错了,还是MOVR命令的参数有问题?
关于报错内容,提示“变量P1取值在0到72之间”,我看了下脚本里的MOVR命令,三个#ACT里分别是MOVR P1 96、MOVR P1 48、MOVR P1 72,难道是MOVR命令的第二个参数有范围限制,不能超过72?可原本的脚本里,第一个#ACT是MOVR P1 96,一开始加载的时候并没有报错,游戏内也能正常运行,为什么改回SMALL后,就出现了这个报错?
还有一个疑问,我把第一个#IF的SMALL改成LARGE后,为什么游戏内点击启动没反应?当时我确认G19的数值是在100000到1000000之间,按理说不满足第一个条件(LARGE G19 100000,也就是G19大于100000),也不满足第二个条件(LARGE G19 1000000,G19小于1000000),应该会检测第三个条件元宝是否大于9,如果元宝足够,就会执行第三个#ACT,跳转到@TXWheel_2_1才对,可实际却没有任何反应,既不执行第三个条件,也不弹出元宝不足的提示,这是为什么?
我也检查过脚本的格式,没有发现明显的错误,每个#IF对应#ACT,末尾都加了BREAK,跳转命令GOTO也没有写错,@TXWheel_2_1这个节点也存在,没有遗漏。而且重新加载M2的时候,除了改回SMALL那次,其他时候都没有报错,说明脚本格式应该是没问题的,问题可能出在逻辑顺序或者MOVR命令的参数上。
我也尝试过调整三个#IF条件的顺序,把元宝检测的条件放到第一个,G19小于100000放到第二个,G19大于1000000放到第三个,重新加载后,游戏内点击启动,还是和之前一样,改SMALL为LARGE无反应,改回SMALL报错但能正常运行,没有解决根本问题。
另外,我也怀疑是不是G19这个变量的数值有问题,比如G19的数值一直处于某个固定范围,导致修改SMALL和LARGE后,条件一直不满足,所以游戏内无反应。我特意查看了G19的变量值,确认是可以正常变化的,不是固定不变的,排除了变量数值的问题。
还有一个疑问,传奇脚本的#IF条件检测,是不是有优先级?比如前面的条件不满足,才会检测后面的,还是只要有一个条件满足,就会立即执行,不管后面的条件?我一直认为是从上到下依次检测,满足一个就执行,不满足就继续往下,直到所有条件都检测完,可现在的测试结果,好像和这个理解有偏差。
关于MOVR命令的报错,我查了一下相关的脚本命令说明,MOVR应该是随机赋值命令,格式大概是MOVR 变量 数值,意思是给变量随机赋值,范围是0到这个数值之间。报错提示变量P1取值在0到72之间,是不是意味着MOVR命令的第二个参数不能超过72?可我原本的脚本里,MOVR P1 96是可以正常运行的,没有报错,为什么改回SMALL后,就出现了这个报错?
我也尝试过把第一个#ACT里的MOVR P1 96改成MOVR P1 72,和第三个#ACT的参数一样,然后改回SMALL,重新加载M2,这次没有报错,游戏内也能正常抽奖,点击启动能正常触发,这说明确实是MOVR P1 96这个参数有问题,超过了72的取值范围,可为什么一开始加载的时候没有报错?
总结一下我的核心疑问和问题,求高手逐一解答:
1、[@TXWheel_1_2]脚本的运行逻辑顺序,是不是从上到下依次检测三个#IF条件(先G19<100000,再G19>1000000,最后元宝>9),满足任意一个就执行对应#ACT并跳转?
2、为什么把第一个#IF的SMALL改成LARGE,加载M2不报错,但游戏内点击启动大转轮无反应?
3、为什么把LARGE改回SMALL,加载M2报错(变量P1取值在0到72之间),但游戏内却能正常抽奖?
4、MOVR命令的第二个参数是不是有范围限制,不能超过72?为什么一开始MOVR P1 96能正常运行,改回SMALL后就报错?
5、如何修改脚本,才能让三个条件任意满足一个就正常跳转,同时解决报错和游戏内无反应的问题?
我自己对传奇脚本的逻辑顺序和MOVR命令的了解有限,琢磨了好几天都没解决,只能来求助各位高手,希望能结合我贴出的脚本和测试情况,详细分析问题根源,给出具体的修改方法,最好能贴出修改后的脚本片段,我可以直接复制加载测试,万分感谢!
补充说明一下,我使用的是常见的传奇引擎,脚本加载路径没有错,其他脚本都能正常运行,只有这个幸运转盘的脚本出现了问题。另外,我也重启过M2和服务器,重新加载过所有脚本,问题依然存在,排除了加载不彻底的问题。
还有一个细节,我发现报错的时候,不管是点击启动大转轮,还是其他操作,M2都会一直弹出那个脚本错误提示,但游戏内的功能不受影响,依然能正常抽奖,元宝不足的时候也能正常弹出提示,不知道这种报错会不会影响其他脚本的运行,有没有办法彻底解决这个报错。
我也尝试过删除第一个#IF条件,只保留后两个条件,重新加载后,游戏内点击启动能正常触发,没有报错,也没有无反应的情况,这说明第一个#IF条件和对应的MOVR P1 96命令,确实是导致报错和无反应的关键,但我需要保留三个条件,所以必须解决这个问题。
跪求高手支招,帮我理清脚本的运行逻辑顺序,解决报错和游戏内无反应的问题,让三个条件任意满足一个就能正常启动转盘,万分感谢!