该bug是这两天在写插件时偶遇的,本身影响范围并大,但非常烦,在这里具体的描述一下:
在使用hook.Add EntityTakeDamage的情况下,只要玩家或npc使用hl2默认的Hitscan武器(撬棍,手枪和smg等子弹“瞬间”击中目标的武器),引用GetInflictor()函数返回的值不是武器本身而是攻击者。影响的范围并不大,仅限hl2默认武器中的hitscan类型,而smg的榴弹、手榴弹等投掷物和RPG、Ar2能量球和十字弓等发射物本身并不受到影响。非hl2原生武器暂时不受到影响。
可能你会觉得这个bug本身没什么大不了的,但是当你想修改撬棍造成的的伤害的时候,麻烦就来了:出于未知的原因,GMOD移除了调整撬棍伤害的convar,在cfg里也不见踪影。你必须通过判定伤害的来源然后通过EntityTakeDamage/CTakeDamageInfo进行修改,而上述bug就让这种方法绕路子了。一般来说只能通过GetActiveWeapon()来进行判断,但是这种判断的逻辑存在漏洞。因此,当你装备了撬棍而通过其他方式造成伤害,它也会成为修改的对象,引发潜在的冲突。
目前的解决办法:撬棍的DamageType是128,通过添加伤害类型判定来减小逻辑漏洞,不过这个也只是治标不治本,真正解决问题的办法是等待官方段修复。
在使用hook.Add EntityTakeDamage的情况下,只要玩家或npc使用hl2默认的Hitscan武器(撬棍,手枪和smg等子弹“瞬间”击中目标的武器),引用GetInflictor()函数返回的值不是武器本身而是攻击者。影响的范围并不大,仅限hl2默认武器中的hitscan类型,而smg的榴弹、手榴弹等投掷物和RPG、Ar2能量球和十字弓等发射物本身并不受到影响。非hl2原生武器暂时不受到影响。
可能你会觉得这个bug本身没什么大不了的,但是当你想修改撬棍造成的的伤害的时候,麻烦就来了:出于未知的原因,GMOD移除了调整撬棍伤害的convar,在cfg里也不见踪影。你必须通过判定伤害的来源然后通过EntityTakeDamage/CTakeDamageInfo进行修改,而上述bug就让这种方法绕路子了。一般来说只能通过GetActiveWeapon()来进行判断,但是这种判断的逻辑存在漏洞。因此,当你装备了撬棍而通过其他方式造成伤害,它也会成为修改的对象,引发潜在的冲突。
目前的解决办法:撬棍的DamageType是128,通过添加伤害类型判定来减小逻辑漏洞,不过这个也只是治标不治本,真正解决问题的办法是等待官方段修复。