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

传奇服务端脚本SUM语句用法与多变量累加写法详解

热度:
SUM是传奇脚本里最基础但最容易写错的算术命令,很多新手卡在“变量名写错”“没初始化”“格式不对”上。下面按引擎实际执行逻辑拆开讲,直接照抄就能用。

一、SUM后面跟的是变量名,不是数值
正确写法:
MOV<$STR(N1)>10
MOV<$STR(N2)>20
SUMN1N2
MOV<STR(X)><STR(RESULT)>

这里SUMN1N2是把N1和N2这两个变量里的数值相加,结果存在系统隐藏变量<$STR(RESULT)>里。
错误写法:
SUM1020
SUM<STR(N1)><STR(N2)>
这两种引擎都读不到,因为SUM只认变量名,不认直接数值,也不认带<$STR()>包裹的写法。

二、单变量累加:SUM变量C的含义
MOV<$STR(X)>0
MOV<$STR(A)>5
MOV<$STR(B)>3
MOV<$STR(C)>2
SUMAB
MOV<STR(X)><STR(RESULT)>
SUMC
MOV<STR(X)><STR(RESULT)>

第一步SUMAB,RESULT=5+3=8,MOV到X,X=8。
第二步SUMC,引擎会自动用X+C,RESULT=8+2=10,再MOV回X,X=10。
这就是你查到的“X=X+C”的实际执行过程,前提是X里已经有值,否则第一次SUMC会算错。

三、N1到N20全部相加的标准写法
最稳妥、所有引擎都支持的方式:
MOV<$STR(X)>0
SUMN1
MOV<STR(X)><STR(RESULT)>
SUMN2
MOV<STR(X)><STR(RESULT)>
SUMN3
MOV<STR(X)><STR(RESULT)>
...
SUMN20
MOV<STR(X)><STR(RESULT)>

这样写虽然长,但不会出错。每一步都把RESULT存回X,下一步SUMNx就是X+Nx。

四、简化写法(部分引擎支持)
GOM/GEE新版本支持连续SUM:
MOV<$STR(X)>0
SUMN1N2N3N4N5N6N7N8N9N10N11N12N13N14N15N16N17N18N19N20
MOV<STR(X)><STR(RESULT)>

但老引擎或HERO引擎不支持一口气写20个变量,会直接忽略。稳妥起见,用循环写:

五、用循环批量加N1到N20
[@Main]
ACT

MOV<$STR(X)>0
MOV<$STR(I)>1
[@Loop]
IF

LARGEI20
ACT

GOTO@End
ELSEACT

SUMN<I>
MOV<STR(X)><STR(RESULT)>
INCI1
GOTO@Loop
[@End]
SAY

总和是:<$STR(X)>

这个脚本从I=1循环到20,每次SUMN<I>,把结果累加进X。N<I>会被引擎解析成N1、N2……N20。

六、常见错误排查
1.变量没初始化:MOV<$STR(N1)>0必须写,不然N1是空值,SUM结果异常。
2.变量名写错:N1不能写成n1或N[1],引擎区分大小写。
3.忘了MOV回X:SUMN1后必须MOV<STR(X)><STR(RESULT)>,否则下一步SUMN2用的还是旧X。
4.用错变量类型:N系列是数字变量,S是字符串,SUM只能算N系列。
5.脚本没重载:改完NPC脚本要在M2点ReloadNpc,不然还在跑旧逻辑。

七、完整示例:20个变量求和并判断是否达标
[@CheckSum]
ACT

MOV<$STR(X)>0
MOV<$STR(I)>1
[@AddLoop]
IF

LARGEI20
ACT

GOTO@Judge
ELSEACT

SUMN<I>
MOV<STR(X)><STR(RESULT)>
INCI1
GOTO@AddLoop
[@Judge]
IF

LARGEX1000
ACT

SENDMSG5总属性超过1000,符合条件
ELSEACT

SENDMSG5总属性不足,继续努力

八、其他算术命令对照
•INCN15:N1=N1+5(加固定值)

•DECN13:N1=N1-3

•MULN12:N1=N1*2

•DIVN12:N1=N1/2

•SUMN1N2:RESULT=N1+N2

SUM的核心规则只有三条:跟变量名、结果在RESULT、要手动MOV到目标变量。按这个逻辑写,N1到N20的累加就不会出问题。
[顶部]