传奇装备精炼脚本变量不对排查与修正方法

来源: 作者: 点击:
这段精炼脚本出现“变量不对”,主要问题集中在三点:

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 是否是你引擎里对应的正确属性位置。

不同引擎对变量名、属性位置、命令参数支持不完全一样,修改前建议先备份原脚本文件。