传奇3K引擎脚本中INC和DEC命令用法变量自增自减与参数说明

来源: 作者: 点击:

INC和DEC是传奇脚本里最常用的变量运算命令。INC用于变量自增,DEC用于变量自减。3K引擎如果兼容传统M2脚本语法,这两个命令的写法通常与GEE、GOM、M2等引擎接近,即先写变量,再写要加减的数值。

一、命令基础格式

INC命令格式:
INC 变量 数值

DEC命令格式:
DEC 变量 数值

示例:
INC N0 1
DEC N0 1

第一行表示N0增加1,第二行表示N0减少1。数值不只能写1,也可以写任意整数。例如INC N0 10表示N0增加10,DEC N0 5表示N0减少5。

二、常见变量类型

传奇脚本变量通常分为私人变量、全局变量、临时变量和自定义变量。不同引擎支持的变量范围不完全相同,3K引擎需要以自身说明书为准。常见变量包括:

P0-P9:临时私人变量,通常只在当前NPC对话中有效。
D0-D9:私人变量,部分引擎下线不保存。
N0-N999:私人数字变量,常用于临时计数。
S0-S999:私人字符变量,用于保存文本。
U0-U99:可保存的私人数字变量,常用于角色长期数据。
G0-G999:全局数字变量,全服共用。
A0-A999:全局字符变量,全服共用。

如果脚本需要记录玩家长期数据,例如累计充值、任务进度、每日次数,通常使用U变量或自定义变量。如果只是临时判断,例如NPC对话中计数,可以使用N变量或P变量。

三、基本使用示例

示例1:每次点击NPC增加1次领取次数

[@main]
IF
ACT
INC N0 1
SENDMSG 6 你已点击NPC,当前次数:<STR(N0)>
BREAK

示例2:每天最多领取5次

[@getreward]
IF
LARGE N0 4
ACT
SENDMSG 6 今日领取次数已用完。
BREAK
ELSEACT
INC N0 1
GIVE 金币 1000
SENDMSG 6 领取成功,今日已领取<STR(N0)>次。
BREAK

这里LARGE N0 4表示N0大于4时触发,也就是达到5次后不能再领取。

示例3:使用DEC扣除次数

[@usecount]
IF
SMALL N0 1
ACT
SENDMSG 6 次数不足。
BREAK
ELSEACT
DEC N0 1
SENDMSG 6 扣除1次,剩余<STR(N0)>次。
BREAK

SMALL N0 1表示N0小于1时触发,常用于判断次数是否为0。

四、配合MOV初始化变量

变量在使用前最好先确认是否有初始值。如果变量没有赋值,可能默认为0。需要设定初始值时,可以使用MOV命令。

[@init]
IF
ACT
MOV N0 0
MOV N1 10
SENDMSG 6 初始化完成,N0=<STR(N0)>,N1=<STR(N1)>
BREAK

之后再用INC和DEC进行加减:

ACT
INC N0 1
DEC N1 2

执行后N0变为1,N1变为8。

五、配合条件判断使用

INC和DEC本身只是执行命令,通常放在#ACT下方。判断变量大小需要放在#IF下方。

常用判断命令:

SMALL 变量 数值:变量小于指定数值。
LARGE 变量 数值:变量大于指定数值。
EQUAL 变量 数值:变量等于指定数值。

示例:当N0等于10时触发奖励

[@check]
IF
EQUAL N0 10
ACT
GIVE 金币 5000
MOV N0 0
SENDMSG 6 已领取奖励,计数已重置。
BREAK
ELSESAY
当前计数未达到10,无法领取。

六、用于循环和计数

INC和DEC经常用于循环计数。例如记录玩家杀怪数量、副本次数、任务进度、活动积分。

杀怪计数示例:
INC U0 1

每日次数示例:
INC N0 1
DEC N0 1

活动积分示例:
INC N1 10
DEC N1 5

如果要做每日重置,需要结合引擎提供的每日重置变量或自定义变量保存方式。部分引擎使用J变量在每日固定时间自动清零,部分引擎需要通过脚本在零点重置。3K引擎是否支持J变量,需要查看对应版本说明书。

七、数值越界需要注意

传奇脚本变量通常有取值范围。普通数字变量如果超过上限,可能出现溢出或变成负数。例如某些引擎中变量上限为65535,U变量上限可更高。使用INC连续增加时,应提前判断上限。

示例:限制N0最大为100

[@addcount]
IF
LARGE N0 99
ACT
SENDMSG 6 已达到上限。
BREAK
ELSEACT
INC N0 1
SENDMSG 6 当前数值:<STR(N0)>
BREAK

同样,DEC也要防止减到负数。

示例:防止N0小于0

[@subcount]
IF
SMALL N0 1
ACT
SENDMSG 6 数值不足,无法减少。
BREAK
ELSEACT
DEC N0 1
SENDMSG 6 当前数值:<STR(N0)>
BREAK

八、字符变量中的DEC用法差异

数字变量中的DEC表示数值减少。例如DEC N0 1就是N0减1。但在部分引擎中,DEC也可以用于字符变量,表示删除字符串内容。例如删除S1中的指定文本,或删除第几个字符。

这种用法与数字自减不同。数字型DEC改变的是数值,字符型DEC改变的是字符串。3K引擎是否支持字符型DEC,需要以实际测试和说明书为准。若不确定,建议只对N、U、G等数字变量使用DEC做数值自减。

九、3K引擎适配要点

不同传奇引擎对变量范围和命令支持有差异。3K引擎如果兼容传统M2脚本,通常可以使用以下写法:

INC 变量 数值
DEC 变量 数值
MOV 变量 数值
SMALL 变量 数值
LARGE 变量 数值
EQUAL 变量 数值

但以下情况需要特别确认:

变量上限是否与其他引擎一致。
U变量是否能保存到人物数据库。
G变量是否保存到全局配置文件。
自定义变量是否支持CALCVAR方式加减。
字符变量DEC是否支持字符串删除。

如果脚本写入后没有生效,优先检查变量类型是否正确、命令是否放在#ACT下方、变量名是否写错、文件编码是否为ANSI,以及是否已在控制台重载NPC或重启服务端。

十、完整参考脚本

[@main]
IF
ACT
SAY
当前计数:<STR(N0)>\
\
<增加1次/@inc1>\
<减少1次/@dec1>\
<增加10次/@inc10>\
<重置计数/@reset>\
<退出/@exit>

[@inc1]
IF
LARGE N0 999
ACT
SENDMSG 6 计数已达上限。
BREAK
ELSEACT
INC N0 1
SENDMSG 6 当前计数:<STR(N0)>
BREAK

[@dec1]
IF
SMALL N0 1
ACT
SENDMSG 6 计数不足,无法减少。
BREAK
ELSEACT
DEC N0 1
SENDMSG 6 当前计数:<STR(N0)>
BREAK

[@inc10]
IF
LARGE N0 989
ACT
SENDMSG 6 增加后将超过上限。
BREAK
ELSEACT
INC N0 10
SENDMSG 6 已增加10次,当前计数:<$STR(N0)>
BREAK

[@reset]
IF
ACT
MOV N0 0
SENDMSG 6 计数已重置为0。
BREAK

这个脚本可以用于测试INC、DEC、MOV、SMALL、LARGE等命令是否正常。若3K引擎版本支持这些命令,点击选项后即可查看变量变化;若不生效,则需要替换为当前引擎支持的变量类型或自定义变量命令。