SMALL和LARGE在3KM2里属于脚本条件判断命令,放在#IF下面使用,用来比较数字型变量大小。SMALL表示小于,LARGE表示大于。旧版很多引擎只支持变量对固定数值比较,3KM2增加了变量对变量的写法,可直接拿两个数字变量做大小判断。
一、基础单数值写法
格式:
IF
SMALL 变量名 数值
ACT
执行内容
IF
LARGE 变量名 数值
ACT
执行内容
SMALL 变量名 数值 表示变量值小于该数值时条件成立。LARGE 变量名 数值 表示变量值大于该数值时条件成立。等于不包含在内,等于要用EQUAL。
示例:
IF
SMALL D0 1
ACT
SENDMSG 7 D0小于1,执行补偿处理
IF
LARGE D0 10
ACT
SENDMSG 7 D0大于10,执行奖励处理
上面两段放在NPC脚本、功能脚本或QFunction条件里都能用。D0先通过MOV、INC、DEC、MOVR等赋值后再判断,不要直接拿没赋值的变量比,不同引擎未初始化变量默认值可能不同。
二、3KM2变量对变量写法
3KM2的SMALL和LARGE支持两个数字变量互比,不强制写固定常数。以已定义数字型自定义变量TEST为例,SMALL可用下面四种:
SMALL D0 1
检测D0值是否小于1,最基础用法。
SMALL HUMAN TEST D0
检测自定义变量TEST值是否小于D0值。HUMAN表示人物自定义数字变量,TEST为变量名,D0为另一变量。
SMALL D0 HUMAN TEST
检测D0值是否小于自定义变量TEST值。顺序和上面相反,前面是被比较变量,后面是参照变量。
SMALL HUMAN TEST 1
检测自定义变量TEST值是否小于1。
LARGE和SMALL格式完全一样,只把判断方向换成大于:
LARGE D0 1
检测D0是否大于1。
LARGE HUMAN TEST D0
检测TEST是否大于D0。
LARGE D0 HUMAN TEST
检测D0是否大于TEST。
LARGE HUMAN TEST 1
检测TEST是否大于1。
三、自定义变量声明与读取
用HUMAN自定义变量前,先在M2变量管理或脚本声明里把TEST定义成数字型自定义变量。不同3KM2版本入口写法可能有差异,有的用变量配置文件,有的用脚本声明命令。未声明直接写SMALL HUMAN TEST 1,可能报未知变量或条件不生效。
赋值示例:
IF
ACT
MOV HUMAN TEST 0
累加示例:
IF
ACT
CALCVAR HUMAN TEST + 1
部分3KM2自定义变量用CALCVAR做加减,用CHECKVAR做比较。CHECKVAR写法示例:
IF
CHECKVAR HUMAN TEST > 5
ACT
SENDMSG 7 TEST大于5
IF
CHECKVAR HUMAN TEST < 5
ACT
SENDMSG 7 TEST小于5
如果版本同时支持SMALL HUMAN TEST 5和CHECKVAR HUMAN TEST < 5,前者走传统条件命令,后者走自定义变量检查命令。改脚本时别混用两套格式,同一段#IF里尽量统一。
四、常用系统变量配合SMALL LARGE
D变量:D0到D9或更高区间,临时数字变量,常用于NPC传参、计算中间值。
G变量:全局数字变量,重启可保存,适合全服计数、活动进度。
A变量:部分引擎A为字符变量,做数字比较要先确认版本是否允许;3KM2若A只存字符,SMALL A0 1可能不按数字处理。
N变量:私人数字变量,不保存,适合单人任务次数。
P变量:参数变量,NPC传入P0到P9后用SMALL P0 3、LARGE P0 5做范围判断很常见。
M变量:私人数字变量,部分引擎用来做临时计算。
示例用P变量:
IF
SMALL P0 3
ACT
SENDMSG 7 传入参数小于3,发放初级奖励
IF
LARGE P0 5
ACT
SENDMSG 7 传入参数大于5,发放高级奖励
示例用G变量做全服击杀数:
IF
LARGE G10 100
ACT
SENDMSG 0 全服击杀已达100,开启下一阶段
IF
SMALL G10 100
ACT
SENDMSG 0 全服击杀不足100,继续累计
五、NPC抽奖区间示例
需求:积分变量D0小于100发安慰奖,100到999发普通奖,大于等于1000发大奖。用SMALL和LARGE分段:
[@领奖]
IF
SMALL D0 100
ACT
GIVE 金币 1000
SENDMSG 7 积分不足100,发放安慰奖
IF
LARGE D0 99
SMALL D0 1000
ACT
GIVE 普通奖券 1
SENDMSG 7 积分100到999,发放普通奖
IF
LARGE D0 999
ACT
GIVE 大奖券 1
SENDMSG 7 积分达到1000,发放大奖
注意第二段用LARGE D0 99且SMALL D0 1000,覆盖100到999。若写成LARGE D0 100且SMALL D0 1000,则100整不会命中,按需求是否含边界调整数值。SMALL是严格小于,LARGE是严格大于,边界值用EQUAL单独补。
六、充值或元宝区间示例
[@充值奖励]
IF
SMALL D0 1
ACT
SENDMSG 7 未充值或金额小于1,不发放
IF
LARGE D0 0
SMALL D0 101
ACT
GIVE 小额充值礼包 1
IF
LARGE D0 100
SMALL D0 501
ACT
GIVE 中额充值礼包 1
IF
LARGE D0 500
ACT
GIVE 大额充值礼包 1
D0先通过充值回调、机器人或脚本MOV赋值,例如MOV D0 300后再进入判断。直接写SMALL D0 101而不先赋值,结果取决于变量默认值。
七、任务次数限制示例
用N变量记录每日次数:
[@每日任务]
IF
LARGE N0 2
ACT
SENDMSG 7 今日已完成2次,不能再接
CLOSE
IF
SMALL N0 3
ACT
INC N0 1
SENDMSG 7 任务开始,当前第<$STR(N0)>次
N0未初始化按版本可能为0,SMALL N0 3表示0、1、2都可接。若要求最多3次,条件可改成LARGE N0 2走拒绝,SMALL N0 3走接取。
八、和EQUAL、RANDOM组合
SMALL、LARGE只管大小,等于用EQUAL,概率用RANDOM。不要写SMALL D0 5想同时包含5,小于5不包含5。
区间标准写法:
IF
LARGE D0 4
SMALL D0 11
ACT
SENDMSG 7 D0在5到10之间
上面表示D0大于4且小于11,即5到10。若要把4和11也包含,改成:
IF
LARGE D0 3
SMALL D0 12
ACT
SENDMSG 7 D0在4到11之间
和RANDOM组合示例:
IF
LARGE D0 100
RANDOM 2
ACT
GIVE 高级奖励 1
SENDMSG 7 达到100且50%概率中奖
RANDOM 2表示二分之一概率,具体命中规则以3KM2命令说明为准。
九、机器人脚本里使用
RobotManage或AutoRunRobot触发标签中也能用SMALL LARGE判断变量后发公告。示例:
[@整点统计]
IF
LARGE G20 50
ACT
SENDMSG 0 当前在线活动人数指标G20超过50,开启加奖
IF
SMALL G20 50
ACT
SENDMSG 0 指标不足50,维持基础奖励
G20先在登录脚本、计时脚本或活动脚本里赋值,机器人只负责读取判断和广播。
十、常见不生效原因
变量未赋值:SMALL D0 1判断前D0没有明确MOV或MOVR,旧值可能来自上一次脚本,结果不稳定。
自定义变量未声明:写SMALL HUMAN TEST 1前未在3KM2变量管理建TEST数字变量,条件可能直接失败。
把字符变量当数字比:A变量存文字时用SMALL A0 1不对,应先用数字变量或字符串长度命令,具体看引擎是否支持。
格式写成函数式:部分通用教程写SMALL(D0,1)或SMALL (D0) 1,3KM2传统脚本一般写SMALL D0 1,空格分隔,不写括号。按所装版本命令表校对。
大小写和方向搞反:SMALL是小于,LARGE是大于。要“不低于100”应写LARGE D0 99或EQUAL补充100,不能只写SMALL D0 100。
条件顺序重叠:同一NPC先写SMALL D0 1000再写LARGE D0 100,小数值会被大区间提前拦截。区间判断按从窄到宽或从大到小排列,避免逻辑被覆盖。
变量类型不匹配:G、D、N、P、M数字变量可比较;S、A字符变量做数字比较前需确认版本转换方式。3KM2若提供字符串转数字命令,先转再比。
十一、排错步骤
修改脚本后重载M2或重读NPC脚本,看启动日志是否报SMALL、LARGE未知命令或参数错误。手动给变量赋值测试:
IF
ACT
MOV D0 3
SMALL D0 5
SENDMSG 7 测试小于5
若上面不出发送,检查命令是否在#IF下、变量作用域、M2版本是否支持该写法。变量对变量测试:
IF
ACT
MOV D0 3
MOV D1 5
SMALL D0 D1
SENDMSG 7 D0小于D1测试
3KM2支持变量对变量再用HUMAN写法补:
IF
ACT
MOV D1 5
SMALL HUMAN TEST D1
SENDMSG 7 TEST小于D1测试
不显示就检查TEST是否已声明为数字型自定义变量。
十二、和旧版通用写法对照
旧版通用:
SMALL G1 1 检测G1是否小于1。
LARGE G1 10 检测G1是否大于10。
EQUAL G1 1 检测G1是否等于1。
3KM2增强后:
SMALL G1 1 仍可用。
LARGE G1 10 仍可用。
SMALL G1 G2 比较G1是否小于G2。
SMALL HUMAN TEST G1 比较自定义TEST是否小于G1。
LARGE HUMAN TEST G1 比较自定义TEST是否大于G1。
SMALL G1 HUMAN TEST 比较G1是否小于自定义TEST。
LARGE G1 HUMAN TEST 比较G1是否大于自定义TEST。
自定义变量体系下也可用CHECKVAR代替部分大小判断,但SMALL LARGE在NPC条件行更直观,尤其做数值区间、参数范围、活动阈值时不用写多层EQUAL。
十三、完整接取任务示例
[@进入副本]
IF
SMALL HUMAN 进入次数 3
LARGE HUMAN 通行证等级 0
ACT
CALCVAR HUMAN 进入次数 + 1
SENDMSG 7 副本开启,今日已计入次数
MAPMOVE 副本1 10 10
IF
LARGE HUMAN 进入次数 2
ACT
SENDMSG 7 今日进入次数已满
CLOSE
第一段要求进入次数小于3且通行证等级大于0;第二段在次数大于2时拒绝。若进入次数等于3,第一段SMALL不成立,第二段LARGE成立,玩家被拦。
十四、完整活动积分示例
[@活动结算]
IF
SMALL D0 50
ACT
GIVE 参与奖 1
SENDMSG 7 积分低于50发参与奖
IF
LARGE D0 49
SMALL D0 201
ACT
GIVE 普通奖 1
SENDMSG 7 积分50到200发普通奖
IF
LARGE D0 200
SMALL D0 501
ACT
GIVE 精良奖 1
SENDMSG 7 积分201到500发精良奖
IF
LARGE D0 500
ACT
GIVE 至尊奖 1
SENDMSG 7 积分超过500发至尊奖
D0由活动脚本在击杀、采集、充值、签到后写入。每段独立#IF,避免前面条件成立后用GOTO跳过后续;若希望只发一个奖,在每段#ACT后加GOTO到结束标签。
十五、写脚本时的格式底线
命令单独一行,不和其他条件拼同一行。变量名和数值之间用空格,不用逗号、不用中文顿号。HUMAN自定义变量写法保持“HUMAN 变量名”整体,不要漏HUMAN也不要把变量名拆开。SMALL和LARGE只接数字型数据,字符内容改用EQUAL或字符串命令。机器人、NPC、登录脚本、功能脚本都按同一变量作用域测试,避免G变量在NPC里未读取、D变量在机器人里未写入导致判断错位。
3KM2传奇服务端SMALL与LARGE条件命令完整参数说明及脚本示例
来源:
作者:
点击:

