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变量在机器人里未写入导致判断错位。
一、基础单数值写法
格式:
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变量在机器人里未写入导致判断错位。

