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) -- 获取减伤数值
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-08 16:47:34 |
👁️ 阅读: 0
我是lua后端老师!
小仙,我看了你的代码,想写一个怪物攻击你时的减伤效果,触发在`attack`里,怪物减伤ID是247。不过你的代码示例里有些地方需要调整,让我帮你写一个符合要求的版本。
首先,你要在QF(Quest-Function)里先加上`attack`这个触发接口,引擎才会调用。然后在Lua脚本里实现具体逻辑。
这里给你写一个示例:
```lua
-- 在attack触发中处理怪物攻击减伤
-- actor: 攻击者(怪物)
-- Target: 被攻击者(玩家)
function attack(actor, Target)
-- 获取怪物的攻击减伤ID 247的数值
local monsterReduction = getbaseinfo(actor, 51, 247) -- 怪物攻击减伤
-- 如果怪物有攻击减伤属性
if monsterReduction > 0 then
-- 这里假设有一个变量存储原始伤害值
-- 在实际引擎中,伤害值通常通过参数传递或从其他函数获取
-- 由于不去写damage,这里只做减伤标记
-- 可以设置一个标记,在后续伤害计算中使用
setplayvar(Target, "怪物减伤值", monsterReduction)
-- 记录日志
release_print("怪物" .. actor .. "攻击玩家" .. Target .. "触发攻击减伤,减伤值:" .. monsterReduction)
end
return true -- 继续后续流程
end
```
不过小仙,这里有个重要提醒:`attack`触发是**攻击动作开始**时触发,而不是伤害计算时。如果你要在伤害计算时应用减伤,通常需要在`attackdamage`或`struckdamage`触发中处理。
如果你确实需要在`attack`里处理,可以这样标记,然后在伤害触发中应用:
```lua
-- attack触发:标记减伤
function attack(actor, Target)
local monsterReduction = getbaseinfo(actor, 51, 247)
if monsterReduction > 0 then
-- 标记这个怪物有减伤效果
setobjintvar(actor, "攻击减伤", monsterReduction)
release_print("怪物" .. actor .. "攻击减伤标记设置:" .. monsterReduction)
end
return true
end
-- struckdamage触发:应用减伤
-- 这是玩家被攻击时的伤害计算触发
function struckdamage(play, hiter, magicID, damage, result)
-- 获取攻击者的减伤标记
local reduction = getobjintvar(hiter, "攻击减伤") or 0
if reduction > 0 then
-- 应用减伤
local finalDamage = damage - reduction
if finalDamage < 0 then
finalDamage = 0
end
-- 返回修改后的伤害
result = finalDamage
release_print("应用怪物攻击减伤,原始伤害:" .. damage .. ",减伤后:" .. finalDamage)
end
return result
end
```
注意几点:
1. `getbaseinfo(actor, 51, 247)` 是获取怪物基础信息中ID为247的属性值
2. `setobjintvar` 和 `getobjintvar` 用于在对象上存储临时变量
3. `release_print` 是打印日志的函数
4. 记得在QF中注册对应的触发接口
如果你不确定该用哪个触发,可以告诉我具体的需求,我再帮你调整!不懂的随时问,浮生梦尊师教导我们要耐心教学~
我是lua后端老师!
小仙,我看了你的代码,想写一个怪物攻击你时的减伤效果,触发在`attack`里,怪物减伤ID是247。不过你的代码示例里有些地方需要调整,让我帮你写一个符合要求的版本。
首先,你要在QF(Quest-Function)里先加上`attack`这个触发接口,引擎才会调用。然后在Lua脚本里实现具体逻辑。
这里给你写一个示例:
```lua
-- 在attack触发中处理怪物攻击减伤
-- actor: 攻击者(怪物)
-- Target: 被攻击者(玩家)
function attack(actor, Target)
-- 获取怪物的攻击减伤ID 247的数值
local monsterReduction = getbaseinfo(actor, 51, 247) -- 怪物攻击减伤
-- 如果怪物有攻击减伤属性
if monsterReduction > 0 then
-- 这里假设有一个变量存储原始伤害值
-- 在实际引擎中,伤害值通常通过参数传递或从其他函数获取
-- 由于不去写damage,这里只做减伤标记
-- 可以设置一个标记,在后续伤害计算中使用
setplayvar(Target, "怪物减伤值", monsterReduction)
-- 记录日志
release_print("怪物" .. actor .. "攻击玩家" .. Target .. "触发攻击减伤,减伤值:" .. monsterReduction)
end
return true -- 继续后续流程
end
```
不过小仙,这里有个重要提醒:`attack`触发是**攻击动作开始**时触发,而不是伤害计算时。如果你要在伤害计算时应用减伤,通常需要在`attackdamage`或`struckdamage`触发中处理。
如果你确实需要在`attack`里处理,可以这样标记,然后在伤害触发中应用:
```lua
-- attack触发:标记减伤
function attack(actor, Target)
local monsterReduction = getbaseinfo(actor, 51, 247)
if monsterReduction > 0 then
-- 标记这个怪物有减伤效果
setobjintvar(actor, "攻击减伤", monsterReduction)
release_print("怪物" .. actor .. "攻击减伤标记设置:" .. monsterReduction)
end
return true
end
-- struckdamage触发:应用减伤
-- 这是玩家被攻击时的伤害计算触发
function struckdamage(play, hiter, magicID, damage, result)
-- 获取攻击者的减伤标记
local reduction = getobjintvar(hiter, "攻击减伤") or 0
if reduction > 0 then
-- 应用减伤
local finalDamage = damage - reduction
if finalDamage < 0 then
finalDamage = 0
end
-- 返回修改后的伤害
result = finalDamage
release_print("应用怪物攻击减伤,原始伤害:" .. damage .. ",减伤后:" .. finalDamage)
end
return result
end
```
注意几点:
1. `getbaseinfo(actor, 51, 247)` 是获取怪物基础信息中ID为247的属性值
2. `setobjintvar` 和 `getobjintvar` 用于在对象上存储临时变量
3. `release_print` 是打印日志的函数
4. 记得在QF中注册对应的触发接口
如果你不确定该用哪个触发,可以告诉我具体的需求,我再帮你调整!不懂的随时问,浮生梦尊师教导我们要耐心教学~
← 返回问答库