游戏内添加禁止移动类buff之后,经常会出现目标依旧可以走动,或是施加buff后角色完全卡死无法解除,还有部分场景buff不生效的情况,这类问题大多来自脚本命令使用错误、引擎参数配置、buff叠加逻辑冲突,下面从命令原理、错误案例、排查步骤和修复方案完整说明。
实现角色无法移动效果,主流命令为MOBSTOP和HUMSTOP,HUMSTOP用于玩家角色,MOBSTOP用于怪物目标。基础语法格式,HUMSTOP 状态 持续时间,状态填写1代表开启禁止移动,0代表解除禁止移动,时间单位为秒。示例写法#ACT HUMSTOP 1 10,作用是让当前玩家10秒内不能移动,只可以释放技能或者聊天。针对怪物目标则使用MOBSTOP 1 10,选中怪物作为目标执行这条命令,怪物十秒内无法移动。
常见第一种故障,buff挂上之后目标依旧可以移动。优先核对命令对象是否匹配,给玩家使用MOBSTOP不会生效,给怪物使用HUMSTOP同样无效。其次检查脚本执行主体,部分触发器脚本中,没有锁定目标对象,直接执行命令,命令作用到执行脚本的人物身上,而不是预期目标。如果需要对指定目标施加禁止移动效果,需要先用TARGET锁定目标。示例完整脚本片段:
#IF
ISADMINS 0
#ACT
TARGET <$TARGET>
MOBSTOP 1 8
SENDMSG 6 目标被禁锢,8秒内无法移动
#SAY
成功禁锢目标\
<关闭/@exit>
TARGET指令用来锁定选中的对象,缺少锁定语句,命令无法识别作用目标,buff看似挂上,实际没有限制移动效果。
第二种问题,禁止移动buff到期之后角色依旧不能走动,无法解除。出现该现象,大多是多次重复叠加命令。多次执行HUMSTOP 1 10,不会刷新倒计时,部分引擎不会自动覆盖原有计时,会持续保留禁止移动标记。处理方案,施加新buff前,先执行解除命令清空旧状态,再重新施加禁锢。参考脚本:
#ACT
HUMSTOP 0
HUMSTOP 1 10
SENDMSG 6 禁锢生效,10秒内不能移动
先执行HUMSTOP 0清除之前的禁止移动标记,再开启新的计时,避免状态残留。也可以使用变量标记判断是否存在禁锢buff,防止重复触发叠加。
#IF
NOT CHECKVAR HUMAN N0 > 0
#ACT
HUMSTOP 1 10
MOV HUMAN N0 1
DELAYGOTO 10 @clearstop
[@clearstop]
#ACT
HUMSTOP 0
MOV HUMAN N0 0
SENDMSG 6 禁锢效果消失,恢复移动能力
使用自定义变量记录buff状态,时间到达后自动解除,减少状态残留。
第三种情况,部分地图、部分模式下禁止移动buff直接失效。地图参数里面存在免控标记,Mir200\Envir\MapInfo.txt中,部分地图设置了ANTISTUN参数,带有这个参数的地图,所有禁锢、定身类控制效果都会被忽略,buff无法限制移动。打开MapInfo.txt找到对应地图行,删除ANTISTUN标识,保存之后重载地图,控制效果即可正常生效。部分PK模式、行会模式、无敌状态下,角色自带免控属性,也会跳过HUMSTOP与MOBSTOP判定,编写脚本时增加状态判断,排除无敌、死亡状态。
#IF
!ISDEAD
!ISIMMUNE
#ACT
HUMSTOP 1 10
#ELSEACT
SENDMSG 6 目标处于免控状态,禁锢失败
增加!ISDEAD判断目标没有死亡,!ISIMMUNE排除无敌免控状态,只有满足条件才施加禁止移动buff。
第四类问题,施加buff之后,角色不能移动,但是可以通过传送、瞬移技能脱离禁锢。HUMSTOP只限制基础行走跑动,不会拦截传送、回城、瞬移类指令。如果需要一并限制传送,需要额外增加变量标记,在传送、回城脚本入口增加条件判断,检测禁锢变量,存在标记时禁止传送操作。
#IF
CHECKVAR HUMAN N0 > 0
#ACT
SENDMSG 6 处于禁锢状态,无法使用传送功能
BREAK
#ELSEACT
传送逻辑代码
这样在禁锢期间拦截传送指令,完善控制效果。
还有引擎版本带来的兼容问题,不同引擎对于HUMSTOP、MOBSTOP的支持存在差异,少数低版本引擎HUMSTOP不支持时间参数,只能手动解除。这类引擎不能写HUMSTOP 1 10,只能执行HUMSTOP 1开启,依靠定时器或者延时标签调用HUMSTOP 0关闭。升级引擎或者修改脚本结构,使用变量加延时标签的方案替代自带计时。
排查问题的固定流程,第一步确认使用的命令,区分玩家与怪物对应的指令。第二步查看M2控制台,执行脚本时是否存在语法报错,缺少换行、参数数量不对会造成命令不执行。第三步检查目标锁定,确认TARGET正确指向需要施加buff的对象。第四步检查地图MapInfo配置,查看是否开启免控参数。第五步测试buff叠加情况,多次释放查看状态是否残留,增加前置清除状态代码。第六步测试特殊技能,判断瞬移回城等技能是否突破禁锢,按需增加拦截脚本。
编写脚本测试阶段,优先在小号身上测试,观察计时、解除、叠加的表现。修改MapInfo地图参数之后,需要重载地图或者重启服务端配置才能生效。脚本修改完成后,重载NPC或者触发器,反复测试多次叠加控制效果,确认不会出现永久定身、buff不触发的异常。针对怪物的禁锢逻辑和玩家逻辑基本一致,只需要替换MOBSTOP命令,同时检查怪物AI脚本,部分怪物AI会强制重置自身状态,覆盖MOBSTOP的禁止移动标记,遇到这类怪物需要调整AI优先级,降低怪物自身状态刷新频率。
传奇脚本目标无法移动buff设置失效与异常问题排查和修复教程
来源:
作者:
点击:

