脚本示例
地图怪物不足自动刷怪脚本
按地图实时怪物数量自动补刷的完整脚本,含 DelayCall 上下文参数扩展用法。
用途
利用地图杀怪触发做“怪物数量不足自动补刷”:每次杀死指定怪物后统计当前地图该怪物的剩余数量,少于阈值就用 GM 命令补刷,并全服提示刷怪统计。
参考脚本
检测地图X个怪物的数量不足几只时刷新 利用地图杀怪触发
[ZD001|D717 石墓七层1] KillFUNC(1)
添加获取地图怪物数量变量:<$MapMonCnt(地图名.怪物名)>,地图无效返回-1,怪物无效或不参与数量统计返回-2,
注意只有怪物表的StatMask包含1,才会统计该怪物的数量,需要才加,例:
[@KillPlayMon1]
#ACT
;获取当前杀死怪物地图的怪物数到 S怪物数量 变量上
MOV S怪物数量 <$MapMonCnt(<$CurrentMap>.<$Param(0)>)>
#IF
;检测 此怪数量小于10就执行刷新
CompVal <$STR(S怪物数量)> < 10 int
#ACT
;用于统计刷新了多少只,看个人需要是否统计
INC G刷怪 10
;利用延迟跳转 传递 怪物名 怪物数 地图
DelayCall 1000 ~MobCurMob <$Param(0)> <$MapMonCnt(<$CurrentMap>.<$Param(0)>)> <$CurrentMap>
[~MobCurMob]
#ACT
;用GM命令执行刷怪 ,也可以用其他命令 此处只简单举列
GMEXECUTE MOB <$Param(0)> 10
;展示 当前地图 该怪物 剩余多少只,总刷新了多少只
sendmsg 0 当前地图【<$STR(S_CONTEXT[2])>】刷了【<$STR(S_CONTEXT[0])>】怪物【<$STR(S_CONTEXT[1])>】只,当前总刷新【<$STR(G刷怪)>】只
扩展DelayCall命令,支持5个上下文参数传输,防止参数被覆盖
错误用例:
[@重复执行]
#act
Mov S_暂存变量 xxxxx
DelayCall 1000 @delayCall
[@delayCall]
#act
; “S_暂存变量”此时很可能已被其他用到“S_暂存变量”的操作所覆盖(特别是对于重复执行的字段),造成错误结果
MapMove <$STR(S_暂存变量)>
扩展后的正确用例:
; 随后<$STR(S_CONTEXT[0~4])>可以取得参数的内容,此组变量用于传输参数内容,此变量为固定变量,仅可修改[0-4]获取内容
DelayCall 1000 @delayCall <$STR(S_暂存参数0)> 参数1 参数2 参数3 参数4 // 参数0~4为可选项,可以是任意变量
[@delayCall]
#act
; <$STR(S_CONTEXT[0])>此时等于“<$STR(S_暂存参数0)>”,<$STR(S_CONTEXT[1])>等于“参数1”...
MapMove <$STR(S_CONTEXT[0])>
关键点
- 数量变量是
<$MapMonCnt(地图名.怪物名)>:地图无效返回 -1,怪物无效或不参与统计返回 -2;只有怪物表StatMask包含 1 的怪物才会被统计。 - 触发入口写法
[ZD001|D717 石墓七层1] KillFUNC(1),即在地图/怪物配置里绑定[@KillPlayMon1]字段。 - 判断用
CompVal <$STR(S怪物数量)> < 10 int;补刷用GMEXECUTE MOB <$Param(0)> 10并sendmsg 0全服提示,刷新总数累加在G刷怪上。 - 脚本后半段是
DelayCall的上下文参数扩展说明:DelayCall 1000 @字段 参数0 参数1 参数2 参数3 参数4,接收方用<$STR(S_CONTEXT[0~4])>取值,避免多个流程共用同一临时变量时互相覆盖(脚本给了错误用例与正确用例对比)。
