攻击和双防的伤害是怎么计算的?
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-06-10 10:25:08 |
👁️ 阅读: 9
我是lua后端老师!
小仙,你问的这个问题很关键啊!攻击和双防的伤害计算,在996引擎里,主要是通过一系列的攻击触发和受击触发来完成的,我们可以通过脚本来干预和修改最终的伤害值。
根据引擎的机制,伤害计算过程会触发不同的Lua脚本接口,我们可以通过这些接口获取到伤害值,并进行修改。这里给你梳理一下主要的触发接口和它们的作用:
**1. 攻击前触发 (可以修改即将造成的伤害)**
这些触发在计算伤害前发生,你可以拿到一个初始的`Damage`值,然后通过修改`result`参数来改变最终伤害。
```lua
-- @param self: 玩家对象 (触发者)
-- @param Target: 受击对象
-- @param Hiter: 攻击对象 (通常与self相同)
-- @param MagicId: 技能ID
-- @param Damage: 计算出的初始伤害值
-- @param result: 返回值,你需要修改这个值来改变最终伤害
-- @param Model: 攻击模式 (0=正常,1=暴击,2=格挡,3=切割) --引擎64_23.10.24新增
```
* `attackdamage`: 玩家攻击前触发
* `attackdamagebb`: 玩家的宝宝攻击前触发
* `heroattackdamage`: 英雄攻击前触发
* `heroattackdamagebb`: 英雄的宝宝攻击前触发
**2. 攻击后触发 (可以修改已经造成的伤害)**
这些触发在伤害计算并作用到目标后发生,你同样可以修改`result`来改变最终的伤害数值。
```lua
-- 参数与攻击前触发类似,但没有Model参数
```
* `attack`: 玩家物理攻击后触发
* `magicattack`: 玩家魔法攻击后触发
* `attackpet`: 宝宝物理攻击后触发
* `magicattackpet`: 宝宝魔法攻击后触发
* `heroattack`: 英雄物理攻击后触发
* `heromagicattack`: 英雄魔法攻击后触发
* `heroattackpet`: 英雄宝宝物理攻击后触发
* `heromagicattackpet`: 英雄宝宝魔法攻击后触发
**3. 受击触发 (被攻击时触发)**
这些是站在“挨打”方视角的触发。
```lua
-- @param self: 玩家对象 (挨打者)
-- @param Target: 受击对象 (通常就是self自己)
-- @param Hiter: 攻击对象
-- @param MagicId: 技能ID
```
* `struckdamage`: 玩家受到伤害时触发
**核心计算逻辑简述:**
引擎内部会先根据攻击方的攻击力、技能系数、目标的防御力等属性计算出一个基础`Damage`值。然后,这个值会依次经过上述的“攻击前触发”->“受击触发”->“攻击后触发”链条。你在任何一个环节修改了`result`,后续环节拿到的`Damage`值就是修改后的结果。
**举个例子,实现一个简单的伤害翻倍:**
假设你想在玩家攻击前,让伤害变成2倍,可以在QF里设置`[@attackdamage]`触发,然后在对应的Lua脚本里写:
```lua
function OnAttackDamage(self, Target, Hiter, MagicId, Damage, Model)
local finalDamage = Damage * 2 -- 将伤害翻倍
release_print("攻击前触发,原伤害:" .. Damage .. ",修改后伤害:" .. finalDamage)
return finalDamage -- 返回修改后的值,这个值会成为新的伤害
end
```
所以,小仙,**引擎本身有内置的攻击防御计算公式**,我们作为脚本开发者,更多的是通过这些触发点去“干预”和“修改”这个计算出来的结果,而不是直接从零开始计算。你需要什么特殊的伤害效果(比如根据对方防御百分比扣血,或者固定无视防御),就在这些触发函数里写你的逻辑就好了。
明白了吗?如果还有哪里不清楚,随时问我,或者去请教浮生梦尊师也行!
← 返回问答库