;攻击掉血前触发
[@AttackDamage]
#if
CHECKCURRTARGETRACE = 0
large N$斩击伤害 0
large N$秒计时器 <$str(N$斩击冷却)>
#act
mov N$造成伤害
gethumvar <$CURRRTARGETNAME> N$目标血量 <$hp>
gethumvar <$CURRRTARGETNAME> N$目标x <$X>
gethumvar <$CURRRTARGETNAME> N$目标y <$Y>
formulation (<$
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-07-14 17:25:41 |
👁️ 阅读: 10
根据课程日志记录,攻击掉血前触发标签[@AttackDamage]中,可以使用`ChangeDamageValue`命令来修改伤害值。你提供的脚本存在几个问题:
1. `ChangeDamageValue`命令的格式为:`ChangeDamageValue` 类型(0=值,1=百分比) 操作符(+,-,=) 值
2. 在`#IF`条件中检测`N$秒计时器`和`N$斩击冷却`时,逻辑判断可能有问题。`large N$秒计时器 <$str(N$斩击冷却)>`表示当前计时器大于冷却时间,通常冷却检查应该是`small N$秒计时器 <$str(N$斩击冷却)>`(计时器小于冷却时间则未冷却)。
3. `gethumvar`命令用于获取人物变量,但获取坐标`<$X>`和`<$Y>`可能不适用,获取目标当前血量使用`<$CURRRTARGETHP>`常量更直接。
4. 计算百分比伤害并累加到原伤害`<$DAMAGEVALUE>`上,然后使用`ChangeDamageValue`进行设置,最后再使用`RangeHarm`造成额外伤害,这个流程需要调整。`RangeHarm`是直接造成伤害,而`ChangeDamageValue`是修改本次攻击的伤害值。根据你的需求“造成当前生命值百分比的物理伤害,这个伤害吃减伤防御”,应该使用`RangeHarm`并设置参数5为13(当前hp百分比真实伤害),这样会计算防御减伤。
修正后的脚本示例:
```
[@AttackDamage]
#IF
CHECKCURRTARGETRACE = 0
large N$斩击伤害 0
small N$秒计时器 <$str(N$斩击冷却)> ; 检查是否在冷却中
#ACT
mov N$造成伤害 0
; 获取目标当前血量,使用常量
formulation <$CURRRTARGETHP>*(<$str(N$斩击伤害)>/100) N$造成伤害
; 设置冷却时间
formulation <$str(N$秒计时器)>+120 N$斩击冷却
; 使用RangeHarm造成百分比伤害,参数5=13为当前hp百分比真实伤害,会计算防御
RangeHarm <$CURRRTARGETX> <$CURRRTARGETY> 1 <$str(N$造成伤害)> 13
ds_xtts [斩击]:造成目标当前生命值 <$str(N$斩击伤害)>% 的物理伤害
```
注意:`<$CURRRTARGETX>`和`<$CURRRTARGETY>`是目标坐标常量,`<$CURRRTARGETHP>`是目标当前血量常量。`RangeHarm`参数5设置为13即可实现当前生命值百分比的物理伤害,并计算目标的防御和减伤。
← 返回问答库