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引擎版本支持这些命令,点击选项后即可查看变量变化;若不生效,则需要替换为当前引擎支持的变量类型或自定义变量命令。
传奇3K引擎脚本中INC和DEC命令用法变量自增自减与参数说明
来源:
作者:
点击:

