这段精炼脚本出现“变量不对”,主要问题集中在三点:
GetRandomText 读取的是文本内容,赋值给 A63、A64、A65 这类字符型变量。
SetNewItemValue 需要的是数值型参数,不能直接把文本型变量当成数字使用。
<STR(A63)> 只能把变量内容显示出来,不能保证它已经变成可计算的数值。
所以脚本执行到精炼属性时,容易出现变量类型不匹配、读取失败、属性加不上、提示参数错误等问题。
一、当前脚本的问题点
原脚本里有这几句:
GetRandomText .QuestDiary数据文件锻造数值.txt A63
SetNewItemValue 1 4 + <STR(A63)>
这里的问题在于:
GetRandomText 是从文本文件里随机读取一行内容,结果会存入 A63。
A0-A999 属于字符型变量,存的是文本,不是数字。
而 SetNewItemValue 是修改装备属性值的命令,后面的参数需要数值。
你写成:
SetNewItemValue 1 4 + <STR(A63)>
引擎在解析时,会把 <STR(A63)> 当成显示内容处理,不一定能正确转成数值参与计算。
因此,即使 锻造数值.txt 里写的是数字,比如:
1
2
3
5
8
10
A63 拿到的也可能是文本形式的 5,不能直接给 SetNewItemValue 做数值运算。
二、正确思路:文本变量转数值变量
正确做法是:
用 GetRandomText 从文件里读取随机数值文本。
把读取到的文本转成数值变量。
再用数值变量给 SetNewItemValue 赋值。
不同引擎写法可能略有差异,常见思路是先把 A63 的内容赋给一个数字变量,例如 P、D、M、N 这类数字变量,再使用这个数字变量。
示例思路如下:
GetRandomText .QuestDiary数据文件锻造数值.txt A63
MOV P63 <STR(A63)>
SetNewItemValue 1 4 + P63
这里 P63 只是示例数字变量名,具体能不能用 P63,要看你当前引擎支持的数字变量范围。
有些引擎支持 P0-P999、D0-D999、M0-M999、N0-N999,不同引擎范围不同。
如果你用的引擎不支持 P63,可以换成它支持的数字变量,例如:
D63
M63
N63
关键是:
A变量 用来读文本。
数字变量 用来参与属性计算。
SetNewItemValue 不能直接吃 <STR(A变量)>。
三、修正后的脚本参考
可以把原脚本改成下面这种结构:
[@3]
IF
ACT
GetRandomText .QuestDiary数据文件锻造数值.txt A63
MOV P63 <STR(A63)>
SetNewItemValue 1 4 + P63
GOTO @4
BREAK
[@4]
IF
ACT
GetRandomText .QuestDiary数据文件锻造数值.txt A64
MOV P64 <STR(A64)>
SetNewItemValue 1 5 + P64
GOTO @5
BREAK
[@5]
IF
CHECKUSEITEM 1
ACT
GetRandomText .QuestDiary数据文件锻造数值.txt A65
MOV P65 <STR(A65)>
SetNewItemValue 1 6 + P65
MESSAGEBOX [精炼成功]:你的武器<WEAPON>,成功的增加了:\
体质+<STR(P65)>%\
攻击伤害+<STR(P60)>%\
物理伤害减少+<STR(P61)>%\
魔法伤害减少+<STR(P62)>%\
忽视目标防御+<STR(P63)>%\
攻击伤害反弹+<STR(P64)>%
SENDMSG 7 [精炼成功]:你的武器<WEAPON>属性精炼成功,元素之石消耗完了。
ELSEACT
MESSAGEBOX [失败提示]:你身上的武器没有存在,元素之石消失了.
BREAK
这段只是修正变量类型思路,不是唯一写法。
如果你引擎里 P63 不能用,就换成你引擎支持的数字变量。
四、锻造数值.txt 文件也要检查
锻造数值.txt 里的内容必须干净,不能有多余符号。
正确示例:
1
2
3
5
8
10
错误示例:
1,
2;
3
5
8%
下面这些都会导致变量读取异常:
数字后面带中文逗号
数字后面带分号
数字后面带空格
数字后面带全角空格
数字后面带百分号
文件编码不是普通文本编码
文件里有空行
文件里有中文标点
建议把 锻造数值.txt 用记事本或代码编辑器打开,每行只保留纯数字,不要加多余符号。
五、SetNewItemValue 参数也要核对
SetNewItemValue 的参数格式一般是:
SetNewItemValue 装备位置 属性位置 控制符 数值
你脚本里写的是:
SetNewItemValue 1 4 + <STR(A63)>
这里要确认三件事:
1 是不是你要修改的装备位置。
通常 1 代表武器,但不同引擎或不同脚本环境可能不同。
4、5、6 是不是你要修改的属性位置。
属性位置对应装备的哪种属性,要看你引擎说明。
+ 后面必须接数值变量,不能接文本变量。
如果属性位置写错,即使变量正确,也可能出现:
属性没加上去
加到了错误属性上
提示参数错误
装备属性异常
精炼看起来成功但实际无效
六、MESSAGEBOX 里的显示变量也要统一
原脚本里有:
体质+<STR(A65)>%
攻击伤害+<STR(A60)>%
物理伤害减少+<STR(A61)>%
魔法伤害减少+<STR(A62)>%
忽视目标防御+<STR(A63)>%
攻击伤害反弹+<STR(A64)>%
这里要注意:
A60、A61、A62 在前面没有看到赋值。
如果它们没有提前赋值,显示出来可能是空值或旧值。
如果你希望显示刚才精炼增加的数值,应该统一使用已经赋值的变量。
例如:
体质+<STR(P65)>%
忽视目标防御+<STR(P63)>%
攻击伤害反弹+<STR(P64)>%
如果 A60、A61、A62 是别的地方赋值的,也要确认它们同样是数字变量,或者已经正确转成数字变量后再显示。
七、完整排查顺序
按下面顺序查,基本能定位问题:
检查 锻造数值.txt 是否每行都是纯数字。
检查 GetRandomText 读取到的变量是不是 A变量。
检查 SetNewItemValue 后面是否使用了数字变量。
检查是否把 <STR(A变量)> 直接当成数值使用。
检查 P63、P64、P65 这类数字变量是否被你的引擎支持。
检查 SetNewItemValue 的装备位置和属性位置是否正确。
检查 MESSAGEBOX 里显示的变量是否和实际赋值变量一致。
检查脚本中所有符号是否为英文半角符号。
八、最可能修复方式
你这个脚本最核心的修改就是把文本变量转成数字变量。
原写法:
GetRandomText .QuestDiary数据文件锻造数值.txt A63
SetNewItemValue 1 4 + <STR(A63)>
改成类似:
GetRandomText .QuestDiary数据文件锻造数值.txt A63
MOV P63 <STR(A63)>
SetNewItemValue 1 4 + P63
如果改完后还报错,就重点查两个地方:
P63 是否被当前引擎支持。
SetNewItemValue 1 4 里的 4 是否是你引擎里对应的正确属性位置。
不同引擎对变量名、属性位置、命令参数支持不完全一样,修改前建议先备份原脚本文件。

