怪物标识系统详解与高级应用

这个系统允许你为怪物设置临时标识(0-9共10个),每个标识可以存储一个0-255的数值。这些标识不会永久存储(服务器重启后消失),但可以用于实现各种动态效果,如:

?? 核心命令详解

1. 范围设置怪物标识(批量操作)

SetRangeMonAddByte 地图 X坐标 Y坐标 范围 怪物名称(*代表所有) 标识号(0-9) 值(0-255) 有效时间(秒;0或空为一直有效)

示例:

#ACT
; 给人物周围10格内所有怪物设置标识0=100
SetRangeMonAddByte self <$X> <$Y> 10 * 0 100

; 只给周围5格内的"野猪"设置标识1=50
SetRangeMonAddByte self <$X> <$Y> 5 野猪 1 50

2. 单个怪物设置标识(针对当前攻击目标)

M.SetMonAddByte 标识号(0-9) 值(0-255) 有效时间(秒;0或空为一直有效)

示例:

#ACT
; 给当前攻击的怪物设置标识2=200
M.SetMonAddByte 2 200

3. 检测怪物标识(需攻击后触发)

M.CheckMonAddByte 标识号(0-9) 比较符号(<,>,=) 检测数值(0-255)

示例:

#ACT
; 如果当前攻击的怪物标识3 > 50,则触发效果
M.CheckMonAddByte 3 > 50
#SAY
你的攻击触发了怪物的特殊状态!
注意:必须攻击怪物后才能检测,不能直接读取。

4. 获取怪物标识值(需攻击后触发)

M.GetMonAddByte 标识号(0-9) 保存变量

示例:

#ACT
; 获取当前攻击目标的标识0值,存入N1变量
M.GetMonAddByte 0 N1
SendMsg 5 这个怪物的标识0值是:<$STR(N1)>

?? 高级应用场景

1. 标记精英怪,触发额外掉落

#ACT
; 给当前怪物设置标识1=1(代表精英怪)
M.SetMonAddByte 1 1

[@OnKillMob]
#IF
M.CheckMonAddByte 1 = 1
#ACT
; 如果是精英怪,额外掉落物品
Give 金条 1
SendMsg 5 你击杀了精英怪,获得了额外奖励!

?? 注意事项

  1. 标识是临时的,服务器重启后所有怪物标识会重置。
  2. 检测和获取标识必须攻击怪物,不能直接读取未攻击的目标。
  3. 标识号0-9,每个标识存储0-255的数值。
  4. 可以结合#CALL#IF等脚本命令实现更复杂的逻辑。

?? 完整示例脚本

[@标记精英怪]
#ACT
; 给周围8格内的"白野猪"设置标识1=1(精英标记)
SetRangeMonAddByte self <$X> <$Y> 8 白野猪 1 1
SendMsg 5 已标记附近的精英白野猪!

[@攻击检测]
#IF
M.CheckMonAddByte 1 = 1
#ACT
SendMsg 5 你正在攻击一只精英怪!
; 精英怪受到伤害+20%
M.HumanHP - 20 0 0 0 0 1

[@击杀精英怪]
#IF
M.CheckMonAddByte 1 = 1
#ACT
Give 屠龙 1
SendMsg 5 恭喜!你击杀了精英怪,获得了屠龙!

总结

这套系统非常适合做动态怪物行为控制,比如:

如果你有更复杂的需求,可以结合变量、计时器、技能触发等实现更强大的功能! ??