当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

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

热度:
这段精炼脚本出现“变量不对”,主要问题集中在三点:

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

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