actboy168 / MoeHero

我的英雄不可能那么萌
GNU General Public License v3.0
80 stars 38 forks source link

出现0血怪或无敌怪的bug问题 #14

Closed w4454962 closed 5 years ago

w4454962 commented 5 years ago

之前听说你处理了无敌状态,但是问题不是无敌的问题 而是这框架有个bug

在types\unit.lua里 当一个单位被 杀死后 假如的身上带有物品 会先执行 unit:remove() 再响应 war3触发器 例如 丢弃物品事件 此时因为已经被remove了 而lua中关于该单位的handle的数据信息都被完全清空了,这时丢弃物品事件再次传进这个handle 会生成一个 新的lua unit对象 而 该handle则被魔兽回收,直到魔兽重新创建一个 handle 与之前相同的 单位出来 此时就会响应这个bug

lua表中储存着一个无效的 handle 的unit对象 此时创建单位传进一个handle 被认为是已创建的旧对象 而不会响应 单位-创建 事件 而导致该单位没有注册伤害事件, 所以独立于伤害系统之外,故此 是无敌怪

而0血怪也是相同 是 重新创建的时候 被旧的单位对象的生命值属性 刷新 到了新的单位之上

处理方法 当 remove 单位的时候 把这个handle 放入到一个 无效的handle表里 当 CreateUnit的时候 将handle 从无效表中排除 当 init_unit的时候 判断 handle是否在无效表中 是则 return nil 即可

actboy168 commented 5 years ago

pr please

w4454962 commented 5 years ago

不要啦 你们自己知道的改一下的就好了 我都没fork 让有需要的人知道就好了