3KM2传奇服务端SMALL与LARGE条件命令完整参数说明及脚本示例

来源: 作者: 点击:
SMALL和LARGE在3KM2里属于脚本条件判断命令,放在#IF下面使用,用来比较数字型变量大小。SMALL表示小于,LARGE表示大于。旧版很多引擎只支持变量对固定数值比较,3KM2增加了变量对变量的写法,可直接拿两个数字变量做大小判断。

一、基础单数值写法

格式:

IF

SMALL变量名数值
ACT

执行内容

IF

LARGE变量名数值
ACT

执行内容

SMALL变量名数值表示变量值小于该数值时条件成立。LARGE变量名数值表示变量值大于该数值时条件成立。等于不包含在内,等于要用EQUAL。

示例:

IF

SMALLD01
ACT

SENDMSG7D0小于1,执行补偿处理

IF

LARGED010
ACT

SENDMSG7D0大于10,执行奖励处理

上面两段放在NPC脚本、功能脚本或QFunction条件里都能用。D0先通过MOV、INC、DEC、MOVR等赋值后再判断,不要直接拿没赋值的变量比,不同引擎未初始化变量默认值可能不同。

二、3KM2变量对变量写法

3KM2的SMALL和LARGE支持两个数字变量互比,不强制写固定常数。以已定义数字型自定义变量TEST为例,SMALL可用下面四种:

SMALLD01
检测D0值是否小于1,最基础用法。

SMALLHUMANTESTD0
检测自定义变量TEST值是否小于D0值。HUMAN表示人物自定义数字变量,TEST为变量名,D0为另一变量。

SMALLD0HUMANTEST
检测D0值是否小于自定义变量TEST值。顺序和上面相反,前面是被比较变量,后面是参照变量。

SMALLHUMANTEST1
检测自定义变量TEST值是否小于1。

LARGE和SMALL格式完全一样,只把判断方向换成大于:

LARGED01
检测D0是否大于1。

LARGEHUMANTESTD0
检测TEST是否大于D0。

LARGED0HUMANTEST
检测D0是否大于TEST。

LARGEHUMANTEST1
检测TEST是否大于1。

三、自定义变量声明与读取

用HUMAN自定义变量前,先在M2变量管理或脚本声明里把TEST定义成数字型自定义变量。不同3KM2版本入口写法可能有差异,有的用变量配置文件,有的用脚本声明命令。未声明直接写SMALLHUMANTEST1,可能报未知变量或条件不生效。

赋值示例:

IF

ACT

MOVHUMANTEST0

累加示例:

IF

ACT

CALCVARHUMANTEST+1

部分3KM2自定义变量用CALCVAR做加减,用CHECKVAR做比较。CHECKVAR写法示例:

IF

CHECKVARHUMANTEST>5
ACT

SENDMSG7TEST大于5

IF

CHECKVARHUMANTEST<5
ACT

SENDMSG7TEST小于5

如果版本同时支持SMALLHUMANTEST5和CHECKVARHUMANTEST<5,前者走传统条件命令,后者走自定义变量检查命令。改脚本时别混用两套格式,同一段#IF里尽量统一。

四、常用系统变量配合SMALLLARGE

D变量:D0到D9或更高区间,临时数字变量,常用于NPC传参、计算中间值。
G变量:全局数字变量,重启可保存,适合全服计数、活动进度。
A变量:部分引擎A为字符变量,做数字比较要先确认版本是否允许;3KM2若A只存字符,SMALLA01可能不按数字处理。
N变量:私人数字变量,不保存,适合单人任务次数。
P变量:参数变量,NPC传入P0到P9后用SMALLP03、LARGEP05做范围判断很常见。
M变量:私人数字变量,部分引擎用来做临时计算。

示例用P变量:

IF

SMALLP03
ACT

SENDMSG7传入参数小于3,发放初级奖励

IF

LARGEP05
ACT

SENDMSG7传入参数大于5,发放高级奖励

示例用G变量做全服击杀数:

IF

LARGEG10100
ACT

SENDMSG0全服击杀已达100,开启下一阶段

IF

SMALLG10100
ACT

SENDMSG0全服击杀不足100,继续累计

五、NPC抽奖区间示例

需求:积分变量D0小于100发安慰奖,100到999发普通奖,大于等于1000发大奖。用SMALL和LARGE分段:

[@领奖]
IF

SMALLD0100
ACT

GIVE金币1000
SENDMSG7积分不足100,发放安慰奖

IF

LARGED099
SMALLD01000
ACT

GIVE普通奖券1
SENDMSG7积分100到999,发放普通奖

IF

LARGED0999
ACT

GIVE大奖券1
SENDMSG7积分达到1000,发放大奖

注意第二段用LARGED099且SMALLD01000,覆盖100到999。若写成LARGED0100且SMALLD01000,则100整不会命中,按需求是否含边界调整数值。SMALL是严格小于,LARGE是严格大于,边界值用EQUAL单独补。

六、充值或元宝区间示例

[@充值奖励]
IF

SMALLD01
ACT

SENDMSG7未充值或金额小于1,不发放

IF

LARGED00
SMALLD0101
ACT

GIVE蓄充值礼包1

IF

LARGED0100
SMALLD0501
ACT

GIVE中额充值礼包1

IF

LARGED0500
ACT

GIVE大额充值礼包1

D0先通过充值回调、机器人或脚本MOV赋值,例如MOVD0300后再进入判断。直接写SMALLD0101而不先赋值,结果取决于变量默认值。

七、任务次数限制示例

用N变量记录每日次数:

[@每日任务]
IF

LARGEN02
ACT

SENDMSG7今日已完成2次,不能再接
CLOSE

IF

SMALLN03
ACT

INCN01
SENDMSG7任务开始,当前第<$STR(N0)>次

N0未初始化按版本可能为0,SMALLN03表示0、1、2都可接。若要求最多3次,条件可改成LARGEN02走拒绝,SMALLN03走接取。

八、和EQUAL、RANDOM组合

SMALL、LARGE只管大小,等于用EQUAL,概率用RANDOM。不要写SMALLD05想同时包含5,小于5不包含5。

区间标准写法:

IF

LARGED04
SMALLD011
ACT

SENDMSG7D0在5到10之间

上面表示D0大于4且小于11,即5到10。若要把4和11也包含,改成:

IF

LARGED03
SMALLD012
ACT

SENDMSG7D0在4到11之间

和RANDOM组合示例:

IF

LARGED0100
RANDOM2
ACT

GIVE高级奖励1
SENDMSG7达到100且50%概率中奖

RANDOM2表示二分之一概率,具体命中规则以3KM2命令说明为准。

九、机器人脚本里使用

RobotManage或AutoRunRobot触发标签中也能用SMALLLARGE判断变量后发公告。示例:

[@整点统计]
IF

LARGEG2050
ACT

SENDMSG0当前在线活动人数指标G20超过50,开启加奖

IF

SMALLG2050
ACT

SENDMSG0指标不足50,维持基础奖励

G20先在登录脚本、计时脚本或活动脚本里赋值,机器人只负责读取判断和广播。

十、常见不生效原因

变量未赋值:SMALLD01判断前D0没有明确MOV或MOVR,旧值可能来自上一次脚本,结果不稳定。

自定义变量未声明:写SMALLHUMANTEST1前未在3KM2变量管理建TEST数字变量,条件可能直接失败。

把字符变量当数字比:A变量存文字时用SMALLA01不对,应先用数字变量或字符串长度命令,具体看引擎是否支持。

格式写成函数式:部分通用教程写SMALL(D01)或SMALL(D0)1,3KM2传统脚本一般写SMALLD01,空格分隔,不写括号。按所装版本命令表校对。

大小写和方向搞反:SMALL是小于,LARGE是大于。要“不低于100”应写LARGED099或EQUAL补充100,不能只写SMALLD0100。

条件顺序重叠:同一NPC先写SMALLD01000再写LARGED0100,小数值会被大区间提前拦截。区间判断按从窄到宽或从大到小排列,避免逻辑被覆盖。

变量类型不匹配:G、D、N、P、M数字变量可比较;S、A字符变量做数字比较前需确认版本转换方式。3KM2若提供字符串转数字命令,先转再比。

十一、排错步骤

修改脚本后重载M2或重读NPC脚本,看启动日志是否报SMALL、LARGE未知命令或参数错误。手动给变量赋值测试:

IF

ACT

MOVD03
SMALLD05
SENDMSG7测试小于5

若上面不出发送,检查命令是否在#IF下、变量作用域、M2版本是否支持该写法。变量对变量测试:

IF

ACT

MOVD03
MOVD15
SMALLD0D1
SENDMSG7D0小于D1测试

3KM2支持变量对变量再用HUMAN写法补:

IF

ACT

MOVD15
SMALLHUMANTESTD1
SENDMSG7TEST小于D1测试

不显示就检查TEST是否已声明为数字型自定义变量。

十二、和旧版通用写法对照

旧版通用:

SMALLG11检测G1是否小于1。
LARGEG110检测G1是否大于10。
EQUALG11检测G1是否等于1。

3KM2增强后:

SMALLG11仍可用。
LARGEG110仍可用。
SMALLG1G2比较G1是否小于G2。
SMALLHUMANTESTG1比较自定义TEST是否小于G1。
LARGEHUMANTESTG1比较自定义TEST是否大于G1。
SMALLG1HUMANTEST比较G1是否小于自定义TEST。
LARGEG1HUMANTEST比较G1是否大于自定义TEST。

自定义变量体系下也可用CHECKVAR代替部分大小判断,但SMALLLARGE在NPC条件行更直观,尤其做数值区间、参数范围、活动阈值时不用写多层EQUAL。

十三、完整接取任务示例

[@进入副本]
IF

SMALLHUMAN进入次数3
LARGEHUMAN通行证等级0
ACT

CALCVARHUMAN进入次数+1
SENDMSG7副本开启,今日已计入次数
MAPMOVE副本11010

IF

LARGEHUMAN进入次数2
ACT

SENDMSG7今日进入次数已满
CLOSE

第一段要求进入次数小于3且通行证等级大于0;第二段在次数大于2时拒绝。若进入次数等于3,第一段SMALL不成立,第二段LARGE成立,玩家被拦。

十四、完整活动积分示例

[@活动结算]
IF

SMALLD050
ACT

GIVE参与奖1
SENDMSG7积分低于50发参与奖

IF

LARGED049
SMALLD0201
ACT

GIVE普通奖1
SENDMSG7积分50到200发普通奖

IF

LARGED0200
SMALLD0501
ACT

GIVE精良奖1
SENDMSG7积分201到500发精良奖

IF

LARGED0500
ACT

GIVE至尊奖1
SENDMSG7积分超过500发至尊奖

D0由活动脚本在击杀、采集、充值、签到后写入。每段独立#IF,避免前面条件成立后用GOTO跳过后续;若希望只发一个奖,在每段#ACT后加GOTO到结束标签。

十五、写脚本时的格式底线

命令单独一行,不和其他条件拼同一行。变量名和数值之间用空格,不用逗号、不用中文顿号。HUMAN自定义变量写法保持“HUMAN变量名”整体,不要漏HUMAN也不要把变量名拆开。SMALL和LARGE只接数字型数据,字符内容改用EQUAL或字符串命令。机器人、NPC、登录脚本、功能脚本都按同一变量作用域测试,避免G变量在NPC里未读取、D变量在机器人里未写入导致判断错位。
[顶部]