传奇装备精练脚本变量不对的排查与修正

来源: 作者: 点击:
脚本变量不对通常表现为提示框内容空白、显示乱码、数值与预期不符,或是直接触发M2报错“变量未定义”。从你贴出的脚本来看,问题集中在变量未初始化、变量类型混用、以及提示信息与赋值逻辑脱节这三个层面。

先看属性代码。SetNewItemValue 命令的第二个参数是属性类型编号,GOM引擎的属性对照表如下:0是暴击几率,1是增加攻击伤害,2是物理伤害减少,3是魔法伤害减少,4是忽视目标防御,5是所有伤害反弹,6是增加目标暴率,7是人物体力增加,8是人物魔力增加,9是怒气恢复增加,10是合击攻击增加。你的脚本中 @3 给武器加的是属性4也就是忽视目标防御,@4 加的是属性5所有伤害反弹,@5 加的是属性6增加目标暴率。但提示信息里写的是“体质”对应属性6,“攻击伤害”对应属性1,“物理伤害减少”对应属性2,“魔法伤害减少”对应属性3,“忽视目标防御”对应属性4,“攻击伤害反弹”对应属性5。这里出现了明显的错位:脚本实际写入的属性和提示文字声称增加的属性是两套不同的东西。

修正的第一步是统一属性代码。如果想让提示信息如实反映实际效果,@3 的操作应为 SetNewItemValue 1 4 + <$STR(A63)>,提示中对应“忽视目标防御”是正确的。@4 操作属性5对应“所有伤害反弹”,但提示中写的是“攻击伤害反弹”,属性名称有偏差但代码没问题。@5 操作属性6对应的是“增加目标暴率”,而你的提示写的是“体质”。如果意图是加体质,属性代码应该是7(人物体力增加),而不是6。

变量未定义是第二个核心问题。提示信息中出现的 <$STR(A60)>、<$STR(A61)>、<$STR(A62)> 这三个变量,在你的脚本里从未被赋值。A60、A61、A62 既没有通过 GetRandomText 从文件中读取,也没有用 MOV 命令手动设定过。脚本执行到 MESSAGEBOX 那行时,A60 到 A62 的值是空的或残留着上一次脚本运行的数据,显示出来的结果自然混乱。

解决方式是补全赋值。在 @3 之前增加一个初始化段,或者直接在 @3 到 @5 中把六个变量全部用 GetRandomText 读出来。例如把 @3 改为:

GetRandomText .\QuestDiary\数据文件\锻造数值.txt A60
GetRandomText .\QuestDiary\数据文件\锻造数值.txt A61
GetRandomText .\QuestDiary\数据文件\锻造数值.txt A62
GetRandomText .\QuestDiary\数据文件\锻造数值.txt A63
SetNewItemValue 1 4 + <$STR(A63)>

后续 @4、@5 同理补上对应的读取命令。GetRandomText 的语法是“GetRandomText 文件路径 变量名”,从文本文件中随机取一行赋给变量。文件路径前面那个点不能省略,表示相对路径。

A系列变量的类型需要留意。A0 到 A99 在多数引擎中被归类为字符型变量,可以存数字也可以存文本。GetRandomText 读出来的内容严格说是字符串,SetNewItemValue 的参数却是整型。如果锻造数值.txt 里的行包含非数字字符,比如带了空格、百分号或中文,赋值给 A63 后 SetNewItemValue 解析就会失败,导致属性加不上去。文件里的每一行应该只写纯数字,一行一个值,不要带任何符号。

变量作用域是另一个容易忽略的点。A 系列变量属于临时变量,在脚本块跳转(GOTO)后通常还能保留,但如果中间有其他脚本段对同一个变量名进行了赋值,@3 里读进 A63 的值可能在执行到 @5 之前已经被覆盖了。如果在 @3 到 @5 之间还有别的命令段在操作 A63 到 A65,就会出现数值错乱。建议换成 S 系列变量(S0 到 S99),作用范围更稳定,或者确保这段脚本中没有任何其他对 A60 到 A65 的赋值操作。

MESSAGEBOX 里的换行符写法也要检查。你写的是“\ \”,反斜杠后跟全角空格。部分引擎的 MESSAGEBOX 命令只识别“\”作为换行,全角空格会被当作普通字符显示在提示框里,导致排版异常。如果目的是换行,直接写“\”即可。

最后确认 M2 的“新增属性”开关是否勾选。GOM 引擎需要在 M2 选项的物品装备设置中勾选“启用新增属性”,登录器才能正常显示装备上的元素属性,否则 SetNewItemValue 虽然执行了,但装备上不会显示任何变化。装备穿上后取下再重新佩戴,属性才会刷新到最新状态。

按上述步骤逐项修改:补全 A60 到 A65 的赋值、核对属性代码与提示文字的对应关系、检查锻造数值.txt 的内容格式、确认 M2 新增属性已启用。改完后重载脚本测试,提示框应能正常显示六个变量的实际数值,装备属性也会正确附加。