人物击杀触发脚本多用于记录击杀计数、发放奖励、触发buff效果,很多管理员编写完成后,执行击杀动作却没有任何反馈,这类问题需要按照脚本触发规则、引擎参数、语法条件、权限过滤的顺序逐项排查,操作前备份对应脚本文件,避免修改失误导致原有逻辑错乱。
首先确认触发标签是否选用正确,击杀玩家的触发段分为[@OnKillHuman]和[@OnKillMon],[@OnKillMon]仅在击杀怪物时触发,击杀其他玩家不会调用这段代码,很多人会混淆两个触发标签,把玩家击杀逻辑写在怪物死亡触发段,无论怎么测试都不会执行。打开脚本文件,核对击杀玩家逻辑必须放在[@OnKillHuman]下,标签名称不能存在多余空格或者错别字,标签书写错误会直接造成脚本不加载。
脚本加载状态需要检查,修改脚本完成之后,部分引擎需要重载脚本,也有部分引擎需要重启服务端才能读取新增触发段。打开M2控制台查看脚本加载日志,如果日志提示语法错误,会直接跳过整段脚本,不会执行里面的指令。日志内会标注出错行数,根据提示找到对应的代码行,检查括号、条件判断符、换行格式,删除多余的空格与无效字符。
条件判断语句设置不当是触发失效的主要原因。脚本内#IF条件如果存在冲突,所有#ACT指令都不会运行。比较常见的错误是开启管理员权限测试,脚本内添加ISADMIN==0,代表管理员账号不会触发该击杀逻辑,使用管理员角色互相击杀,自然没有任何效果。还有PK模式判断,部分引擎的击杀触发,在和平模式、组队模式下不会生效,只有攻击模式才会触发人物击杀事件。
地图过滤条件也会拦截触发执行,如果脚本内增加MAP地图编号判断,击杀行为不在指定地图内,代码不会运行。安全区内部无法完成击杀,安全区地图本身禁止人物受到伤害,不存在击杀事件,脚本自然无法触发。跨地图击杀也会存在判定差异,目标人物死亡瞬间切换地图,击杀事件判定失败,脚本无法捕获击杀记录。
人物死亡判定相关引擎参数,部分引擎自带开关,可以关闭人物击杀事件推送,关闭之后无论怎么修改脚本,都无法捕获击杀玩家动作。打开引擎参数面板,找到人物相关选项,确认开启击杀人物触发事件。部分参数还有组队击杀过滤,组队击杀队友时,选择不触发击杀脚本,需要核对参数选项,确认参数和需求匹配。
变量作用域问题会造成脚本看似触发,却看不到效果。使用全局变量记录击杀数量时,变量名称写错,或者变量类型混用,数值不会正常累加。人物私有变量稳定性更好,用于记录单人击杀数据。脚本内发送提示信息时,SENDMSG的消息编号填写错误,消息发送到其他频道,测试者看不到文字提示,容易误以为脚本没有触发。可以在脚本内增加日志输出指令,每次触发向服务端日志写入一行文字,击杀人物之后查看日志,判断脚本是否运行。
权限与人物状态过滤,目标人物处于保护状态、下线死亡、复活类死亡,不会触发正常击杀事件。部分版本里人物被持续掉血效果致死,不属于直接击杀,不会运行[@OnKillHuman]脚本。如果需要捕获中毒灼烧造成的玩家死亡,需要改用人物死亡触发[@OnDie],而不是击杀触发脚本,两个触发的主体对象不一样,[@OnKillHuman]是攻击方触发,[@OnDie]是死亡方触发。
脚本内指令顺序错误,条件判断之后的执行指令位置错乱,也会出现不执行。#IF判断成功之后,紧跟#ACT执行代码,不能插入其他标签或者多余判断段。多条执行指令依次书写,换行格式保持统一,不要把多条指令写在同一行,部分引擎不支持单行多指令写法,会导致后半段指令失效。
测试阶段,使用普通账号进行测试,不要使用管理员账号,避免管理员过滤条件干扰结果。两个角色切换攻击模式,在非安全区地图互相攻击,完成击杀,查看服务端日志输出。先简化脚本,只保留发送屏幕提示的基础代码,去掉所有额外条件,测试基础触发能否正常运行。基础脚本可以正常触发之后,再逐步增加击杀计数、奖励发放等附加条件,每增加一段条件就测试一次,方便定位是哪一条条件造成脚本停止运行。
常见故障场景,击杀完成没有提示,查看M2脚本日志确认是否有报错,核对触发标签是否写错。管理员测试没有效果,检查脚本内是否存在ISADMIN过滤条件。玩家被毒杀死没有触发,更换为死亡触发脚本实现对应逻辑。有时候击杀脚本偶尔生效偶尔失效,需要检查是否存在变量没有及时清空,或者地图、模式条件不稳定。
全部调试完成之后,保存脚本文件,记录触发标签名称、引擎对应开关参数,以及脚本内的条件判断规则。后续修改击杀相关逻辑时,优先使用最简脚本做基础验证,确认触发正常再扩展功能。需要关闭击杀触发功能,直接注释掉对应的[@OnKillHuman]整段脚本代码,重载脚本即可。
首先确认触发标签是否选用正确,击杀玩家的触发段分为[@OnKillHuman]和[@OnKillMon],[@OnKillMon]仅在击杀怪物时触发,击杀其他玩家不会调用这段代码,很多人会混淆两个触发标签,把玩家击杀逻辑写在怪物死亡触发段,无论怎么测试都不会执行。打开脚本文件,核对击杀玩家逻辑必须放在[@OnKillHuman]下,标签名称不能存在多余空格或者错别字,标签书写错误会直接造成脚本不加载。
脚本加载状态需要检查,修改脚本完成之后,部分引擎需要重载脚本,也有部分引擎需要重启服务端才能读取新增触发段。打开M2控制台查看脚本加载日志,如果日志提示语法错误,会直接跳过整段脚本,不会执行里面的指令。日志内会标注出错行数,根据提示找到对应的代码行,检查括号、条件判断符、换行格式,删除多余的空格与无效字符。
条件判断语句设置不当是触发失效的主要原因。脚本内#IF条件如果存在冲突,所有#ACT指令都不会运行。比较常见的错误是开启管理员权限测试,脚本内添加ISADMIN==0,代表管理员账号不会触发该击杀逻辑,使用管理员角色互相击杀,自然没有任何效果。还有PK模式判断,部分引擎的击杀触发,在和平模式、组队模式下不会生效,只有攻击模式才会触发人物击杀事件。
地图过滤条件也会拦截触发执行,如果脚本内增加MAP地图编号判断,击杀行为不在指定地图内,代码不会运行。安全区内部无法完成击杀,安全区地图本身禁止人物受到伤害,不存在击杀事件,脚本自然无法触发。跨地图击杀也会存在判定差异,目标人物死亡瞬间切换地图,击杀事件判定失败,脚本无法捕获击杀记录。
人物死亡判定相关引擎参数,部分引擎自带开关,可以关闭人物击杀事件推送,关闭之后无论怎么修改脚本,都无法捕获击杀玩家动作。打开引擎参数面板,找到人物相关选项,确认开启击杀人物触发事件。部分参数还有组队击杀过滤,组队击杀队友时,选择不触发击杀脚本,需要核对参数选项,确认参数和需求匹配。
变量作用域问题会造成脚本看似触发,却看不到效果。使用全局变量记录击杀数量时,变量名称写错,或者变量类型混用,数值不会正常累加。人物私有变量稳定性更好,用于记录单人击杀数据。脚本内发送提示信息时,SENDMSG的消息编号填写错误,消息发送到其他频道,测试者看不到文字提示,容易误以为脚本没有触发。可以在脚本内增加日志输出指令,每次触发向服务端日志写入一行文字,击杀人物之后查看日志,判断脚本是否运行。
权限与人物状态过滤,目标人物处于保护状态、下线死亡、复活类死亡,不会触发正常击杀事件。部分版本里人物被持续掉血效果致死,不属于直接击杀,不会运行[@OnKillHuman]脚本。如果需要捕获中毒灼烧造成的玩家死亡,需要改用人物死亡触发[@OnDie],而不是击杀触发脚本,两个触发的主体对象不一样,[@OnKillHuman]是攻击方触发,[@OnDie]是死亡方触发。
脚本内指令顺序错误,条件判断之后的执行指令位置错乱,也会出现不执行。#IF判断成功之后,紧跟#ACT执行代码,不能插入其他标签或者多余判断段。多条执行指令依次书写,换行格式保持统一,不要把多条指令写在同一行,部分引擎不支持单行多指令写法,会导致后半段指令失效。
测试阶段,使用普通账号进行测试,不要使用管理员账号,避免管理员过滤条件干扰结果。两个角色切换攻击模式,在非安全区地图互相攻击,完成击杀,查看服务端日志输出。先简化脚本,只保留发送屏幕提示的基础代码,去掉所有额外条件,测试基础触发能否正常运行。基础脚本可以正常触发之后,再逐步增加击杀计数、奖励发放等附加条件,每增加一段条件就测试一次,方便定位是哪一条条件造成脚本停止运行。
常见故障场景,击杀完成没有提示,查看M2脚本日志确认是否有报错,核对触发标签是否写错。管理员测试没有效果,检查脚本内是否存在ISADMIN过滤条件。玩家被毒杀死没有触发,更换为死亡触发脚本实现对应逻辑。有时候击杀脚本偶尔生效偶尔失效,需要检查是否存在变量没有及时清空,或者地图、模式条件不稳定。
全部调试完成之后,保存脚本文件,记录触发标签名称、引擎对应开关参数,以及脚本内的条件判断规则。后续修改击杀相关逻辑时,优先使用最简脚本做基础验证,确认触发正常再扩展功能。需要关闭击杀触发功能,直接注释掉对应的[@OnKillHuman]整段脚本代码,重载脚本即可。

