function attack(actor, Target, Hiter)
local playercutting = getbaseinfo(actor, 51, 216) --刀刀秒人
humanhp(Target, "-", playercutting)
local monsterDamage = getbaseinfo(actor, 51, 215) --刀刀切割
local monster = ismon(Target)
if mons
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-08 16:28:37 |
👁️ 阅读: 0
你好,我是lua后端老师!
修仙者,我来帮你补全这个“刀刀减伤”的逻辑。从你的代码看,思路是当攻击者和被攻击者都有某种“刀刀秒人”属性(假设是自定义属性)时,触发减伤效果。
不过,你的代码里有一些小问题需要修正:
1. `p` 函数不是引擎内置的打印函数,应该使用 `release_print`。
2. 减伤逻辑需要实际应用到伤害上,而不仅仅是打印。
3. 函数名 `attack` 需要确认是否已在 `QF` 中正确注册为 `@attackdamage` 触发。
根据你的思路,补全后的代码应该这样写:
```lua
function attack(actor, Target, Hiter, damage)
-- actor: 攻击者对象
-- Target: 被攻击者对象
-- Hiter: 本次触发可能为攻击者,但通常与actor一致,建议使用actor
-- damage: 本次攻击造成的原始伤害值
local playercutting = getbaseinfo(actor, 51, 216) -- 攻击者的“刀刀秒人”属性值
if playercutting > 0 then
humanhp(Target, "-", playercutting) -- 对目标造成固定伤害
release_print("玩家[" .. getbaseinfo(actor, 1) .. "]触发刀刀秒人,造成" .. playercutting .. "点伤害。")
end
local monsterDamage = getbaseinfo(actor, 51, 215) -- 攻击者的“刀刀切割”属性值
if ismon(Target) and monsterDamage > 0 then -- 判断目标是否为怪物
humanhp(Target, "-", monsterDamage)
release_print("玩家[" .. getbaseinfo(actor, 1) .. "]对怪物触发刀刀切割,造成" .. monsterDamage .. "点伤害。")
end
-- 刀刀减伤逻辑
local playercutting11 = getbaseinfo(actor, 51, 216) -- 攻击者的“刀刀秒人”属性(用于判断是否触发减伤)
local Targetcutting11 = getbaseinfo(Target, 51, 216) -- 被攻击者的“刀刀秒人”属性
if playercutting11 > 0 and Targetcutting11 > 0 then
local knifeAndBladeReduction = getbaseinfo(actor, 51, 219) -- 获取减伤数值
if knifeAndBladeReduction > 0 then
-- 计算减伤后的实际伤害
local finalDamage = damage - knifeAndBladeReduction
if finalDamage < 0 then
finalDamage = 0 -- 确保伤害不为负数
end
release_print("玩家[" .. getbaseinfo(actor, 1) .. "]与[" .. getbaseinfo(Target, 1) .. "]触发刀刀减伤,减伤值:" .. knifeAndBladeReduction .. ",原始伤害:" .. damage .. ",最终伤害:" .. finalDamage)
-- 这里需要将最终伤害应用到目标,但注意:在@attackdamage触发中直接修改damage参数可能不会影响引擎实际扣血。
-- 更常见的做法是,减伤效果通过其他方式实现(如BUFF),或者在触发中记录减伤值,在后续扣血时扣除。
-- 如果需要在本次攻击立即生效,可以尝试:
-- humanhp(Target, "-", finalDamage) -- 但需注意避免与引擎原始扣血重复计算
-- 并考虑返回一个值来中断或修改引擎的原始伤害处理(具体需查阅引擎对@attackdamage触发返回值的定义)。
end
end
-- 注意:如果引擎支持,可能需要返回一个值来影响原始伤害,例如返回 finalDamage。
end
```
**重要提示:**
1. 这个函数需要放在 `QF` 文件中,并且由 `@attackdamage` 触发调用。请确保你的 `QF` 文件里有 `[@attackdamage]` 的触发设置。
2. 关于减伤部分:在 `@attackdamage` 触发中直接使用 `humanhp` 再次扣血,可能会和引擎自身的扣血逻辑冲突,造成重复扣血。更优雅的方式是通过 `setsuckdamage` 或其他伤害控制接口,或者在触发中返回修改后的伤害值(如果引擎支持)。具体做法需要查阅引擎手册中关于 `@attackdamage` 触发返回值的说明。
3. 属性ID(如51, 215, 216, 219)需要与你 `cfg_customabl.xls`(自定义属性表)中的配置完全对应。
如果还有不清楚的,随时问我,或者请教我的师傅浮生梦尊师!
你好,我是lua后端老师!
修仙者,我来帮你补全这个“刀刀减伤”的逻辑。从你的代码看,思路是当攻击者和被攻击者都有某种“刀刀秒人”属性(假设是自定义属性)时,触发减伤效果。
不过,你的代码里有一些小问题需要修正:
1. `p` 函数不是引擎内置的打印函数,应该使用 `release_print`。
2. 减伤逻辑需要实际应用到伤害上,而不仅仅是打印。
3. 函数名 `attack` 需要确认是否已在 `QF` 中正确注册为 `@attackdamage` 触发。
根据你的思路,补全后的代码应该这样写:
```lua
function attack(actor, Target, Hiter, damage)
-- actor: 攻击者对象
-- Target: 被攻击者对象
-- Hiter: 本次触发可能为攻击者,但通常与actor一致,建议使用actor
-- damage: 本次攻击造成的原始伤害值
local playercutting = getbaseinfo(actor, 51, 216) -- 攻击者的“刀刀秒人”属性值
if playercutting > 0 then
humanhp(Target, "-", playercutting) -- 对目标造成固定伤害
release_print("玩家[" .. getbaseinfo(actor, 1) .. "]触发刀刀秒人,造成" .. playercutting .. "点伤害。")
end
local monsterDamage = getbaseinfo(actor, 51, 215) -- 攻击者的“刀刀切割”属性值
if ismon(Target) and monsterDamage > 0 then -- 判断目标是否为怪物
humanhp(Target, "-", monsterDamage)
release_print("玩家[" .. getbaseinfo(actor, 1) .. "]对怪物触发刀刀切割,造成" .. monsterDamage .. "点伤害。")
end
-- 刀刀减伤逻辑
local playercutting11 = getbaseinfo(actor, 51, 216) -- 攻击者的“刀刀秒人”属性(用于判断是否触发减伤)
local Targetcutting11 = getbaseinfo(Target, 51, 216) -- 被攻击者的“刀刀秒人”属性
if playercutting11 > 0 and Targetcutting11 > 0 then
local knifeAndBladeReduction = getbaseinfo(actor, 51, 219) -- 获取减伤数值
if knifeAndBladeReduction > 0 then
-- 计算减伤后的实际伤害
local finalDamage = damage - knifeAndBladeReduction
if finalDamage < 0 then
finalDamage = 0 -- 确保伤害不为负数
end
release_print("玩家[" .. getbaseinfo(actor, 1) .. "]与[" .. getbaseinfo(Target, 1) .. "]触发刀刀减伤,减伤值:" .. knifeAndBladeReduction .. ",原始伤害:" .. damage .. ",最终伤害:" .. finalDamage)
-- 这里需要将最终伤害应用到目标,但注意:在@attackdamage触发中直接修改damage参数可能不会影响引擎实际扣血。
-- 更常见的做法是,减伤效果通过其他方式实现(如BUFF),或者在触发中记录减伤值,在后续扣血时扣除。
-- 如果需要在本次攻击立即生效,可以尝试:
-- humanhp(Target, "-", finalDamage) -- 但需注意避免与引擎原始扣血重复计算
-- 并考虑返回一个值来中断或修改引擎的原始伤害处理(具体需查阅引擎对@attackdamage触发返回值的定义)。
end
end
-- 注意:如果引擎支持,可能需要返回一个值来影响原始伤害,例如返回 finalDamage。
end
```
**重要提示:**
1. 这个函数需要放在 `QF` 文件中,并且由 `@attackdamage` 触发调用。请确保你的 `QF` 文件里有 `[@attackdamage]` 的触发设置。
2. 关于减伤部分:在 `@attackdamage` 触发中直接使用 `humanhp` 再次扣血,可能会和引擎自身的扣血逻辑冲突,造成重复扣血。更优雅的方式是通过 `setsuckdamage` 或其他伤害控制接口,或者在触发中返回修改后的伤害值(如果引擎支持)。具体做法需要查阅引擎手册中关于 `@attackdamage` 触发返回值的说明。
3. 属性ID(如51, 215, 216, 219)需要与你 `cfg_customabl.xls`(自定义属性表)中的配置完全对应。
如果还有不清楚的,随时问我,或者请教我的师傅浮生梦尊师!
← 返回问答库