传奇脚本条件判断执行顺序详解

来源: 作者: 点击:
您提供的脚本逻辑存在一个关键的执行顺序问题,导致了您观察到的现象。它的执行顺序是从上到下依次检测,但只执行第一个满足条件的#ACT段,而不是满足任意条件就跳转。

脚本实际执行流程分析

您脚本中[@TXWheel_1_2]段落的逻辑结构如下:
1.第一步:检测#IFSMALLG19100000(G19<100000)
◦如果为真:则执行其后的#ACT(生成随机数,跳转到@TXWheel_2_1),然后BREAK结束整个脚本段。

◦如果为假:则继续执行下一个#IF进行判断。

2.第二步:检测#IFLARGEG191000000(G19>1000000)
◦如果为真:则执行其后的#ACT,然后BREAK结束。

◦如果为假:则继续执行下一个#IF进行判断。

3.第三步:检测#IFCHECKGAMEGOLD>9(元宝>9)
◦如果为真:则执行其后的#ACT。

◦如果为假:则执行最后的#ELSEACT(弹出元宝不足提示)。

核心问题与错误原因

1.您对逻辑的理解有误:这不是“满足三个条件之一就跳转”,而是“从上到下检查,只执行最先满足的那个条件块”。这是传奇脚本标准执行方式。

2.报错信息根源:您收到的错误变量P1取值在0到72之间直接指出了语法问题。
◦在第三步的#ACT中,命令是MOVRP172。

◦MOVR命令的格式是MOVR变量名随机数上限,其含义是:生成一个从0到(随机数上限-1)的整数。

◦因此,MOVRP172的意思是生成一个0到71之间的随机数。但提示信息显示引擎将其解释为生成0到72之间的数,这可能是个微小歧义,但核心是参数72本身语法正确,不应该导致M2加载报错。报错的根本原因很可能不在这条命令本身,而在于您将LARGE改成SMALL时引发的其他语法错误(如条件嵌套不当、缺少结束符等),导致引擎解析后续参数时错乱。您看到的这个错误是解析错乱后的结果表象。

现象解释与修正方案

•为何“把SMALL改成LARGE,游戏里点抽奖没反应”?

假设您将第一个#IFSMALLG19100000改成了#IFLARGEG19100000。
◦这意味着第一步检测变为:G19是否大于10万?

◦如果您的G19值小于10万,此条件不满足,流程进入第二步。

◦第二步检测G19是否大于100万?显然也不满足(都小于10万了),流程进入第三步。

◦第三步检测元宝>9。如果此时您包裹内元宝也不足10个,则条件不满足,于是执行最后的#ELSEACT,即弹出“元宝不足”的提示框,之后GOTO@TXWheel_1返回转盘界面。这在您看来就是“点抽奖没反应”(实际是弹窗后回到了起点)。

•正确的、符合您“满足任一条件则抽奖”意图的脚本写法应为:
[@TXWheel_1_2]
#IF
#ACT
;--条件判断开始--
;情况一:G19<100000
SMALLG19100000
MOVRP196
MOVM35<$STR(P1)>
GOTO@TXWheel_2_1
BREAK

;情况二:G19>1000000
LARGEG191000000
MOVRP148
MOVM35<$STR(P1)>
GOTO@TXWheel_2_1
BREAK

;情况三:元宝>9
CHECKGAMEGOLD>9
MOVRP172
MOVM35<$STR(P1)>
GOTO@TXWheel_2_1
BREAK

;以上条件均不满足
#ELSEACT
MESSAGEBOX[提示]:启动幸运大转轮1次需要10个元宝,你的元宝不足无法启动。\ \    请确保你的包裹内有多余的地方放奖品。
GOTO@TXWheel_1
BREAK

但请注意:以上写法只是逻辑示意,传奇脚本中多个#IF-#ACT块的串联通常需要用不同的标签分隔。更常见的实现方式是使用#IF配合#ACT与#ELSEACT的嵌套,或分别用GOTO跳转到不同的标签块进行处理。您原有的脚本结构,从语法上看是为了实现优先级判断(先判断G19大小,最后判断元宝),而非“或”关系。

结论与建议

1.脚本逻辑:您原脚本是顺序优先级判断,不是“或”逻辑。它优先检查G19的数值区间,只有当前两个区间都不满足时,才检查元宝是否足够。
2.报错原因:MOVRP172语法无误。报错极可能是您将LARGE改为SMALL时,破坏了脚本的语法结构(比如可能导致编译器将后续字符错误地解析为参数),引发M2加载失败。游戏内能运行但报错,是因为M2加载了有语法错误的脚本,执行到错误参数时触发。
3.修改建议:
◦明确您的设计意图:是希望G19在不同区间有不同抽奖行为(当前逻辑),还是希望“G19小于10万或大于100万或元宝足够”这三种情况都执行同一个抽奖逻辑?

◦如果是前者(当前逻辑),请检查并修正您修改SMALL/LARGE时引入的语法错误,确保每个#IF-#ACT-#BREAK块完整独立。

◦如果是后者(或逻辑),您需要重写判断结构,例如可以将三种条件用#OR命令连接,或者用GOTO将三种情况引导至同一个执行标签。
[顶部]