-- 人物攻击前触发
function attackdamage(play, target, hiter, skillid, damage, model, value)
ATTACK[333](play, target, hiter, skillid, damage, model, value)
-- 禁止攻击自己英雄
if target == gethero(play) then return damage == 0 end
-- 禁止触发怪物
if i
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-25 11:36:17 |
👁️ 阅读: 6
我是lua后端老师!
小仙,看到你的代码了,我来帮你分析一下。
首先,关于你想将伤害+100,你的代码里已经写出来了,在 `ATTACK[333]` 这个函数里,`damage = damage + 100` 这一行就是干这个的。这个函数会在 `attackdamage` 触发时被调用,并且会返回新的伤害值。不过,你需要在 `attackdamage` 函数里接收并返回这个修改后的值,才能让引擎生效。让我帮你调整一下:
```lua
-- 人物攻击前触发
function attackdamage(play, target, hiter, skillid, damage, model, value)
-- 禁止攻击自己英雄
if target == gethero(play) then
return 0
end
-- 禁止触发怪物
if ismon(target) and DATA.stop_mon[getbaseinfo(target, 1)] then
return damage
end
-- 巡航 有攻击行为继续挂机
if getplaydef(play, "S$巡航挂机") == "开" and getplaydef(play, "N$巡航攻击") == 0 then
setplaydef(play, "N$巡航攻击", 1)
sendmsg(play, 1, '{"Msg":"[提示] : 巡航期间攻击行为已记录","FColor":255,"BColor":219,"Type":1}')
end
-- 调用ATTACK表中的伤害处理函数,并返回处理后的伤害值
if ATTACK[333] then
damage = ATTACK[333](play, target, hiter, skillid, damage, model, value)
end
return damage
end
ATTACK = {
[333] = function(play, target, gongjizhe, skillid, damage, Model, value)
damage = damage + 100
sendmsg(play, 1, '{"Msg":"[提示] : '.. damage ..'","FColor":255,"BColor":219,"Type":1}')
return damage
end
}
return ATTACK
```
其次,关于 `ATTACK = {}` 是否可以添加 `local` 作为局部变量,以及是否影响性能:
1. **可以添加 `local`**:是的,你可以写成 `local ATTACK = {}`。这会让 `ATTACK` 成为当前文件(模块)的局部变量,而不是全局变量。
2. **性能影响**:**添加 `local` 通常对性能有正面影响**。在Lua中,局部变量的访问速度比全局变量快得多。因为局部变量存储在寄存器或栈上,而全局变量需要查询全局表 `_G`。所以,将 `ATTACK` 定义为局部变量是一个好习惯,有助于提升脚本执行效率。
修改后的局部变量版本:
```lua
-- 人物攻击前触发
function attackdamage(play, target, hiter, skillid, damage, model, value)
-- 禁止攻击自己英雄
if target == gethero(play) then
return 0
end
-- 禁止触发怪物
if ismon(target) and DATA.stop_mon[getbaseinfo(target, 1)] then
return damage
end
-- 巡航 有攻击行为继续挂机
if getplaydef(play, "S$巡航挂机") == "开" and getplaydef(play, "N$巡航攻击") == 0 then
setplaydef(play, "N$巡航攻击", 1)
sendmsg(play, 1, '{"Msg":"[提示] : 巡航期间攻击行为已记录","FColor":255,"BColor":219,"Type":1}')
end
-- 调用ATTACK表中的伤害处理函数,并返回处理后的伤害值
if ATTACK[333] then
damage = ATTACK[333](play, target, hiter, skillid, damage, model, value)
end
return damage
end
local ATTACK = { -- 这里改为局部变量
[333] = function(play, target, gongjizhe, skillid, damage, Model, value)
damage = damage + 100
sendmsg(play, 1, '{"Msg":"[提示] : '.. damage ..'","FColor":255,"BColor":219,"Type":1}')
return damage
end
}
return ATTACK
```
总结一下:
- 伤害+100的逻辑已经正确实现。
- **建议使用 `local ATTACK = {}`**,这有助于提升性能,也是良好的编程习惯。
如果还有不明白的地方,随时问我,或者请教我师傅浮生梦尊师!
← 返回问答库