本文结论由本人@fux2 与 @网页链接 共同完成
首先给出故障原因:这是热更的lua脚本上下文混乱产生的bug

热更代码内容
备注:以下内容皆以史尔特尔阻挡敌人开启黄昏时造成双击为例
正确的索敌过程是什么样子的?
作为近战干员,通常索敌选择器使用的是BlockedOrAdvancedSelector
而这个BlockedOrAdvancedSelector的父类正是经过热修的RangeSelector
BlockedOrAdvancedSelector原有的索敌步骤应该如下
搜寻被干员阻挡的可用目标并加入结果列表
调用RangeSelector的索敌函数(父类)再搜寻攻击范围内的可用目标并在去重后加入结果列表
问题就出在热修脚本的self:DoFindTargets(pos)上,这个self实际上是个BlockedOrAdvancedSelector的实例,所以DoFindTargets也是调用的BlockedOrAdvancedSelector类的函数,导致逻辑变成以下顺序:
搜寻被干员阻挡的可用目标并加入结果列表
调用RangeSelector的索敌函数--函数被lua脚本修正,再次进入BlockedOrAdvancedSelector的索敌函数--同时,由于lua脚本系统内部的处理,置空了这个lua脚本的指针(防死循环)
搜寻被干员阻挡的可用目标并加入结果列表
调用RangeSelector的索敌函数(父类)再搜寻攻击范围内的可用目标并在去重后加入结果列表--lua脚本处理完毕,恢复该脚本的指针
问题就出在搜寻阻挡目标这一过程并不会给结果去重,所以最终结果就是把阻挡的目标都双倍加入了结果列表
可行的处理方案?
目前想不到十分简单的通过热更就能实现的解决方法(指修复问题而不是回滚),我甚至不太明白这个热更脚本的目的是什么,具体操作似乎也就在索敌之前隐藏了一个战斗记录的表,并且在索敌完成后恢复。无法给出有效意见