攻击敌人时5%几率触发「剑气」攻击伤害增加10%,使目标减速
10%,持续3秒,冷却180秒
TXT实现
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-06-09 11:42:28 |
👁️ 阅读: 11
我是lua后端老师!
小仙,你这个需求是典型的“攻击触发概率效果”实现,涉及概率判断、状态附加、冷却控制。在996引擎中,我们可以利用 **attackbypet**(宠物攻击前)或 **attackdamage**(人物攻击伤害前)这类触发接口,配合 **changemode** 实现减速,以及 **powerrate** 实现增伤,再结合定时器控制冷却。
由于你提到“攻击敌人时”且是TXT实现,我们优先考虑在 **QF** 中写触发脚本。根据你的需求,我们分几步:
1. **选择触发接口**:
- 如果是人物攻击,可用 `attackdamage`(攻击伤害前触发)。
- 如果是宠物攻击,可用 `attackbypet`(宠物攻击前触发)。
- 这里假设是人物攻击,我们用 `attackdamage`。
2. **概率判断**:5% 几率用 `random(100) < 5` 实现。
3. **效果实现**:
- **伤害增加10%**:用 `powerrate(actor, 110, 3)` 表示3秒内攻击力变为110%(即增加10%)。
- **目标减速10%**:用 `changemode(target, 11, 3, 3, 1)` 实现禁锢(减速)效果,范围3格,但只对目标生效。
- **冷却180秒**:用个人定时器 `ontimer` 配合变量标记冷却。
4. **冷却控制**:用 `getplayvar` 读取冷却标记,若在冷却中则跳过触发。
下面是完整的 **TXT触发脚本**(写在 QF 的 `attackdamage` 部分):
```lua
-- 攻击伤害前触发 attackdamage
local actor = play -- 攻击者
local target = target -- 被攻击目标
local magicID = magicID -- 技能ID(若普攻则为0)
-- 定义冷却标记变量名
local cooldownFlag = "剑气冷却"
-- 检查是否在冷却中
local cooldown = getplayvar(actor, cooldownFlag)
if cooldown and cooldown == "1" then
return -- 冷却中,直接返回
end
-- 5%概率触发
if random(100) < 5 then
-- 伤害增加10%,持续3秒
powerrate(actor, 110, 3)
-- 目标减速10%(用禁锢模式模拟减速),持续3秒,范围3格,只对目标生效
changemode(target, 11, 3, 3, 1)
-- 发送提示信息
sendmsg(actor, "【剑气】触发!伤害提升10%,目标减速10%持续3秒", 1)
sendmsg(target, "你被剑气击中,移动速度降低10%持续3秒", 1)
-- 设置冷却标记
setplayvar(actor, cooldownFlag, "1")
-- 180秒后清除冷却标记
setontimer(actor, 180, "剑气冷却清除")
end
```
然后,在 QF 中补充 `ontimer` 触发来清除冷却:
```lua
-- 定时器触发:剑气冷却清除
local actor = play
local cooldownFlag = "剑气冷却清除"
if cooldownFlag == "剑气冷却清除" then
setplayvar(actor, "剑气冷却", "0")
sendmsg(actor, "【剑气】冷却完毕,可以再次触发", 1)
end
```
**注意**:
- `changemode(..., 11, ...)` 是禁锢效果,会限制移动,符合“减速”需求。
- `powerrate` 是增加人物攻击力倍数,110 代表 110% 伤害(即提升10%)。
- 冷却标记用 `setplayvar` 存储,避免全局冲突。
如果还有不明白的,随时问我,或者请教浮生梦尊师!
← 返回问答库