|
怪物标识系统详解与高级应用 这个系统允许你为怪物设置临时标识(0-9共10个),每个标识可以存储一个0-255的数值。这些标识不会永久存储(服务器重启后消失),但可以用于实现各种动态效果,如: - 标记特殊怪物(精英怪、BOSS、任务怪)
- 触发特殊攻击效果(额外伤害、冰冻、中毒、减速)
- 控制怪物行为(是否触发特殊技能、是否掉落额外物品)
- 记录怪物状态(被攻击次数、是否被特定技能命中)
?? 核心命令详解1. 范围设置怪物标识(批量操作)SetRangeMonAddByte 地图 X坐标 Y坐标 范围 怪物名称(*代表所有) 标识号(0-9) 值(0-255) 有效时间(秒;0或空为一直有效)示例:#ACT; 给人物周围10格内所有怪物设置标识0=100SetRangeMonAddByte self <$X> <$Y> 10 * 0 100; 只给周围5格内的"野猪"设置标识1=50SetRangeMonAddByte self <$X> <$Y> 5 野猪 1 50
2. 单个怪物设置标识(针对当前攻击目标)M.SetMonAddByte 标识号(0-9) 值(0-255) 有效时间(秒;0或空为一直有效)示例:#ACT; 给当前攻击的怪物设置标识2=200M.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 N1SendMsg 5 这个怪物的标识0值是:<$STR(N1)>
?? 高级应用场景1. 标记精英怪,触发额外掉落#ACT; 给当前怪物设置标识1=1(代表精英怪)M.SetMonAddByte 1 1[@OnKillMob]#IFM.CheckMonAddByte 1 = 1#ACT; 如果是精英怪,额外掉落物品Give 金条 1SendMsg 5 你击杀了精英怪,获得了额外奖励!
?? 注意事项- 标识是临时的,服务器重启后所有怪物标识会重置。
- 检测和获取标识必须攻击怪物,不能直接读取未攻击的目标。
- 标识号0-9,每个标识存储0-255的数值。
- 可以结合#CALL、#IF等脚本命令实现更复杂的逻辑。
?? 完整示例脚本[@标记精英怪]#ACT; 给周围8格内的"白野猪"设置标识1=1(精英标记)SetRangeMonAddByte self <$X> <$Y> 8 白野猪 1 1SendMsg 5 已标记附近的精英白野猪![@攻击检测]#IFM.CheckMonAddByte 1 = 1#ACTSendMsg 5 你正在攻击一只精英怪!; 精英怪受到伤害+20%M.HumanHP - 20 0 0 0 0 1[@击杀精英怪]#IFM.CheckMonAddByte 1 = 1#ACTGive 屠龙 1SendMsg 5 恭喜!你击杀了精英怪,获得了屠龙!
总结- SetRangeMonAddByte:批量标记范围内的怪物。
- M.SetMonAddByte:标记当前攻击的怪物。
- M.CheckMonAddByte:检测怪物是否有特定标识(需攻击触发)。
- M.GetMonAddByte:获取怪物标识值(需攻击触发)。
这套系统非常适合做动态怪物行为控制,比如: - 任务怪标记(只有带特定标识的怪才算任务目标)
- 特殊技能触发(比如怪物血量低于30%时狂暴)
- 副本机制(比如Boss进入二阶段)
如果你有更复杂的需求,可以结合变量、计时器、技能触发等实现更强大的功能! ??
|