脚本示例

地图怪物不足自动刷怪脚本

按地图实时怪物数量自动补刷的完整脚本,含 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])> 取值,避免多个流程共用同一临时变量时互相覆盖(脚本给了错误用例与正确用例对比)。

相关阅读