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

