-- 人物攻击前触发
function attackdamage(actor, target, hiter, skillid, damage, model, value)
-- release_print("技能id:",skillid,type(skillid),damage)
printusetime(actor,1)
-- 通用攻击行为检测 (巡航 禁止触发类怪物等)
damage = ATTACK_func.check_attack(actor, target,
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-27 18:21:43 |
👁️ 阅读: 1
我是lua后端老师!小仙,让我看看你的代码。从你的代码来看,问题可能出在技能威力计算的逻辑上。
首先,让我分析一下你的代码结构:
```lua
-- 在 check_attack 函数中
local magic_id = ATTACK_list.magic[skillid]
if magic_id then
local shanghai = getbaseinfo(target, 51, magic_id[1]) or 0 -- 技能威力增强
local dikang = isplayer(target) and (getbaseinfo(target, 51, magic_id[2]) or 0) or 0 -- 技能威力抵抗
local guding = (getbaseinfo(target, 51, magic_id[3]) or 0) - (isplayer(target) and (getbaseinfo(target, 51, magic_id[4]) or 0) or 0) -- 技能固定数值计算
damage = math.floor(damage * (1 + (shanghai - dikang) / 100) + guding)
end
```
根据你的配置:
```lua
ATTACK_list = {
magic = {
[12] = {305,306,307,308}, -- 刺杀剑术
},
}
```
对于刺杀剑术(skillid=12):
- magic_id[1] = 305(技能威力增强)
- magic_id[2] = 306(技能威力抵抗)
- magic_id[3] = 307(技能固定伤害增加)
- magic_id[4] = 308(技能固定伤害减少)
**问题分析:**
1. **第一个问题**:你使用的是 `getbaseinfo(target, 51, magic_id[1])`,但根据你的描述,你拥有的是305号属性,这应该是攻击者的属性,而不是目标的属性。所以这里应该是 `getbaseinfo(actor, 51, magic_id[1])`。
2. **第二个问题**:你期望增加5点伤害,但代码中计算的是百分比加成。305号属性(magic_id[1])是"技能威力增强",这是百分比加成,不是固定数值。
**修改建议:**
```lua
-- 修改 check_attack 函数中的技能威力计算部分
local magic_id = ATTACK_list.magic[skillid]
if magic_id then
-- 攻击者的技能威力增强(百分比)
local shanghai = getbaseinfo(actor, 51, magic_id[1]) or 0
-- 目标的技能威力抵抗(百分比)
local dikang = isplayer(target) and (getbaseinfo(target, 51, magic_id[2]) or 0) or 0
-- 攻击者的固定伤害增加
local guding_add = getbaseinfo(actor, 51, magic_id[3]) or 0
-- 目标的固定伤害减少
local guding_sub = isplayer(target) and (getbaseinfo(target, 51, magic_id[4]) or 0) or 0
-- 总固定伤害
local guding = guding_add - guding_sub
-- 计算公式:基础伤害 × (1 + (增强% - 抵抗%)/100) + 固定伤害
damage = math.floor(damage * (1 + (shanghai - dikang) / 100) + guding)
end
```
**调试建议:**
你可以在计算前后添加调试信息:
```lua
if magic_id then
local old_damage = damage
local shanghai = getbaseinfo(actor, 51, magic_id[1]) or 0
local dikang = isplayer(target) and (getbaseinfo(target, 51, magic_id[2]) or 0) or 0
local guding_add = getbaseinfo(actor, 51, magic_id[3]) or 0
local guding_sub = isplayer(target) and (getbaseinfo(target, 51, magic_id[4]) or 0) or 0
local guding = guding_add - guding_sub
release_print("技能威力计算:")
release_print("原伤害:", old_damage)
release_print("技能威力增强(305):", shanghai)
release_print("技能威力抵抗(306):", dikang)
release_print("固定伤害增加(307):", guding_add)
release_print("固定伤害减少(308):", guding_sub)
release_print("总固定伤害:", guding)
damage = math.floor(damage * (1 + (shanghai - dikang) / 100) + guding)
release_print("计算后伤害:", damage)
release_print("伤害变化:", damage - old_damage)
end
```
这样你就能清楚地看到每个属性的值和计算过程了。小仙,如果你还有不明白的地方,随时问我哦!
← 返回问答库