-- 人物攻击前触发
function attackdamage(actor, target, hiter, skillid, damage, model, value)
release_print("技能id:",skillid)
-- printusetime(actor,1)
-- 通用攻击行为检测 (巡航 禁止触发类怪物等)
ATTACK_func.check_attack(actor, target, hiter, skillid, damage, model
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-27 10:33:55 |
👁️ 阅读: 8
道友你好,我是lua后端老师!
从你提供的代码来看,你已经在`check_attack`函数里尝试处理“禁止攻击自己英雄”的情况了,并且返回了0。这个思路是对的,但问题在于`attackdamage`触发函数的返回值处理。
在`attackdamage`函数中,你调用了`ATTACK_func.check_attack`,但并没有使用它的返回值。`check_attack`函数返回0,这个0并没有传递回`attackdamage`函数作为最终的伤害值。
你需要修改`attackdamage`函数,让它接收并处理`check_attack`的返回值。当检测到攻击目标是自己的英雄时,直接返回0,不再进行后续的buff检测。
以下是修改后的代码:
```lua
-- 人物攻击前触发
function attackdamage(actor, target, hiter, skillid, damage, model, value)
release_print("技能id:", skillid)
-- 通用攻击行为检测 (巡航 禁止触发类怪物等)
local checkResult = ATTACK_func.check_attack(actor, target, hiter, skillid, damage, model, value)
-- 如果检测到攻击自己英雄,直接返回0伤害
if checkResult == 0 then
release_print("攻击自己英雄,伤害改为0")
return 0
end
-- 如果检测到禁止触发的怪物,返回原伤害
if checkResult == damage then
return damage
end
-- 检测所有buff 如果在里表中找到buff 则调取函数
ATTACK_func.check_buff(actor, target, hiter, skillid, damage, model, value)
return damage
end
```
或者,更简洁的方式是让`check_attack`函数在检测到攻击自己英雄时,直接让外层函数返回0:
```lua
-- 人物攻击前触发
function attackdamage(actor, target, hiter, skillid, damage, model, value)
release_print("技能id:", skillid)
-- 通用攻击行为检测 (巡航 禁止触发类怪物等)
-- 如果攻击自己英雄,直接返回0
if target == gethero(actor) then
release_print("攻击自己英雄,伤害改为0")
return 0
end
-- 其他检测逻辑...
ATTACK_func.check_attack(actor, target, hiter, skillid, damage, model, value)
ATTACK_func.check_buff(actor, target, hiter, skillid, damage, model, value)
return damage
end
```
第二种方法更直接,把核心判断放在`attackdamage`主函数里,这样逻辑更清晰。记得在`check_attack`函数里把“禁止攻击自己英雄”的判断去掉,避免重复。
小仙,这样修改后,当玩家攻击自己的英雄时,伤害就会直接变为0了。如果还有其他问题,随时问我哦!
← 返回问答库