脚本变量不对通常表现为提示框内容空白、显示乱码、数值与预期不符,或是直接触发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的操作应为SetNewItemValue14+<$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\数据文件\锻造数值.txtA60
GetRandomText.\QuestDiary\数据文件\锻造数值.txtA61
GetRandomText.\QuestDiary\数据文件\锻造数值.txtA62
GetRandomText.\QuestDiary\数据文件\锻造数值.txtA63
SetNewItemValue14+<$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新增属性已启用。改完后重载脚本测试,提示框应能正常显示六个变量的实际数值,装备属性也会正确附加。
先看属性代码。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的操作应为SetNewItemValue14+<$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\数据文件\锻造数值.txtA60
GetRandomText.\QuestDiary\数据文件\锻造数值.txtA61
GetRandomText.\QuestDiary\数据文件\锻造数值.txtA62
GetRandomText.\QuestDiary\数据文件\锻造数值.txtA63
SetNewItemValue14+<$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新增属性已启用。改完后重载脚本测试,提示框应能正常显示六个变量的实际数值,装备属性也会正确附加。

