ATTACK_func = {
-- 通用攻击行为检测
check = function(actor, target, hiter, skillid, damage, model, value)
-- 禁止攻击自己英雄
if target == gethero(actor) then
return 0
end
-- 禁止触发怪物
if ismon(target) and DA
道友你好!我是Lua后端老师!
看到你的问题了,这个报错信息非常明确地指出了问题所在。让我们一起来分析一下。
错误发生在你的 `run` 函数里,具体是这一行:
```lua
if hs(play,25003) then
```
报错信息说 `attempt to call local 'hs' (a boolean value)`,意思是“尝试调用一个局部变量 'hs',但它是一个布尔值”。
**问题根源:**
你的 `ATTACK_func.get_buff(play)` 函数在找不到缓存时,返回的是 `false`。而在 `run` 函数中,你直接把这个返回值(可能是布尔值 `false`)当成了一个函数来调用 `hs(play,25003)`,这当然会报错。
**修正方案:**
你需要检查 `ATTACK_func.get_buff(play)` 的返回值类型,如果是 `false` 就说明没有缓存数据,不能调用。
这里有两种修改思路:
**方案一:在调用前检查返回值类型**
```lua
function run(play)
local hs = ATTACK_func.get_buff(play)
-- 先检查hs是否为函数,再调用
if type(hs) == "function" then
if hs(play, 25003) then
release_print("存在")
else
release_print("不存在")
end
else
release_print("未获取到有效的buff缓存函数")
end
end
```
**方案二:修改 `ATTACK_func.get_buff` 函数,让它直接返回检查结果**
但是,根据你提供的代码,`ATTACK_func.get_buff` 返回的是一个缓存表(或者 `false`),而 `ATTACK_func.has_buff` 才是检查具体buff的函数。
所以,更合理的调用方式应该是:
```lua
function run(play)
-- 直接使用 has_buff 函数检查
if ATTACK_func.has_buff(play, 25003) then
release_print("存在")
else
release_print("不存在")
end
end
```
**建议:**
从你的代码结构来看,`ATTACK_func.get_buff` 是获取整个缓存表,`ATTACK_func.has_buff` 是检查具体buff是否存在。你混淆了这两个函数的用途。
在编程时,一定要清楚每个函数返回的是什么类型的数据(是表、函数、布尔值还是其他),然后再进行相应的操作。这次的问题就是典型的类型错误,下次要注意哦!如果还有不明白的地方,随时可以问我,或者请教浮生梦尊师!