inst:ListenForEvent("onhitother", onHit)
这是用来监听攻击动作事件的,监听到后执行函数onHit
实际测试
local target = data.target
data.damage = data.damage * 2
local damage = data.damage
damage = damage * 1
target.components.health:DoDelta(-damage)
这是onHit的一段代码,用手杖(伤害为17)攻击的伤害是51,即17 + 17 * 2,所以应该是先计算攻击的伤害,并应用在被攻击的对象上,然后在执行这个函数,而不是在攻击伤害计算之前执行。
对于下面的onAttack函数的执行也同理
inst:ListenForEvent("attacked", onAttack)
暂且将攻击分为
- 攻击前摇
- 攻击
- 攻击后摇
由此初步设想监听事件的函数执行都是发生攻击后摇的阶段。
注:只通过上述测试是无法验证函数执行的前后的,不过配上监听事情“killed”时就可以完全的验证上述的结论,因为如果被攻击的对象在执行完语句
target.components.health:DoDelta(-damage)
之后死亡时,是不会触发“killer”事件的,比如说用攻击为30的武器去攻击health为45的对象,此时是触发不了“killed”事件的,因为先计算武器的30伤害,然后执行onHit函数,在执行onHit函数过程中,对象刚好死亡,如果攻击health为25的对象时,对象在被攻击的时候就已经死亡了,此时就会触发“killed”事件