|
原创作者:等风来
" v+ @. _- ]# w* ^1 k发布日期:2016-02-28 8 d7 |! [8 i" F6 ]
+ F0 F5 v: `) V
1 e0 u \/ }0 i9 p4 n, K' {
下面仅以投射物类攻击(Missile Attack)为代表,简单说一下关于遭受攻击时的格挡(Blocking)判定流程:
5 Y7 W: F8 t+ b$ }$ _' C% n+ H# H6 u4 q
* I' Q7 q v- l3 V# e4 ]& _; ^6 Z4 Z/ x8 _+ _/ D
1. 判定是否为投射物,否则退出判定。
4 g8 c0 X% Y) a( N1 N$ w ]+ j2. 判定投射物是否为有源投射物,否则判定失败,即无源或检测不到来源的投射物无法格挡。8 M) G5 ~2 z9 d1 b/ F( _
3. 读取Missiles.txt,检测是否存在非法数据。
K8 B0 w: n+ M4. 判定投射物是否能被打断,如果ResultFlag_Hit=true,则跳过格挡判定流程,直接命中,即连续性投射物无法格挡,否则进入步骤4.1。; j& h9 _" B. L9 f% w
4.1 如果投射物的Missilestxt.GetHit=true,则判定为ResultFlag_GetHit=ture,进入步骤4.3,否则进入步骤4.2。
% W, K& V! `9 \, q' V4.2 如果投射物的Missilestxt.SoftHit=ture,则判定为ResultFlag_SoftHit=ture,进入步骤4.3,否则进入步骤5。9 s% @/ l& p |, S' w! J) M( D
4.3 如果Missiles.txt中投射物的Missilestxt.KnockBack>0,系统将在0与99之间取随机数,随机数小于Missiles.txt中的投射物KnockBack值,则判定为ResultFlag_KnockBack=ture。
E& j! X( A' F: T5. 进入正式格挡判定流程,首先会检测是否为物理伤害,但此处无论检测的结果如何,都将直接转为调用近战攻击(Melee Attack)的格挡判定,换句话来说,从此处开始回归常规格挡判定。# M) F( v6 Y7 i- t5 K
5.1 调用人物基本数据进行格挡计算,如果返回值(BlockFlag)=0,则不触发格挡效果。8 I2 \7 J8 C/ k; h
5.2 如果投射物的Missilestxt.GetHit=true和Missilestxt.KnockBack!=0 这两者中有任意一项不符合,则直接跳过格挡流程。: V' h! v, a4 M& v
5.3 如果ResultFlag_GetHit=0且ResultFlag_SoftHit=ture,则直接判定为BlockFlag=0。
$ h' N h; t8 V, \5.4 如果AMA的闪避类效果与格挡类效果联动触发,判定为ResultFlag_Block=ture 则格挡生效,即闪避类效果只能在格挡失败后起作用,武器格挡有自己独立的ResultFlag,不在此处判定。
! Z4 k! C5 I+ r4 L/ {( x5.5 一些特殊类效果有自己独特的判定方式,一旦判定成功,无论格挡是否判定成功都会生效,如穿透攻击等。
5 F, X, z. k3 q5.6 如果格挡类效果触发成功,则判定ResultFlag_Hit=false,即跳过伤害结算。3 p% ^2 R& d2 x8 f- x% d
9 L# n# V' S. z4 H' \
PS:从系统的角度来看,所有单独的投射物都可以格挡,但是某些投射物即使能够格挡也会造成伤害,因为SrvHitFunc和SrvDmgFunc的检测发生在格挡判定之前。
2 o( H H9 L1 O$ _; k% g" D: E) q
) E! e- H* e; Z B& J& W
【盾牌格挡的相关设定补充】0 x1 v5 V/ V# `; @; g( `
# e- H% a0 v- J! T& ]下面这些攻击方式或技能可以被盾牌格挡:
8 E* Y2 k: a' ]/ {; z近战攻击
T; J* c! q V箭矢攻击
1 J, h! v5 M$ e: c1 T0 S0 B标枪飞斧飞刀类投掷攻击
8 G; G0 u( o# i3 h Q附带物理伤害的投射物5 ^4 J8 B; u8 {, s; H+ z7 X, A
冥河娃娃Fetish 骨爆& P' V8 i' h! J
自杀者Suicide 自爆
. O) t+ f# @: c L2 F火焰强化Fire Enchanted 自爆5 g! `& S9 d6 V# {! j$ m) R% A
: n7 h% U9 s% k, s v下面这些攻击方式或技能不可以被盾牌格挡:, p; O6 T+ e6 t4 c. d# f
技能等级>=50 的火箭Fire Arrow (<50可以被格挡)- o! x, `4 T+ E) H) S/ P
技能等级>=50 的冰箭Cold Arrow (<50可以被格挡)8 a; N" S* ? }7 s" w
闪电球Lightning Bolt8 M5 c' W2 F! `1 _1 g0 O( q' A
熔岩巨岩Molten Boulder 的爆炸伤害+ P+ d1 }! E/ l6 G c
龙卷风Tornado 的周期性范围伤害
B7 N8 ~ ^- w毁天灭地Armageddon 的范围碰撞伤害
8 y0 o* z7 L: f& U1 Z' o4 @6 UNEC 尸体爆炸Corpse Explosion
5 W7 g- d2 v7 w5 e" HPAL 重击Smite. n4 |$ u& o8 J7 ?
怪物冲锋Charging
8 Q6 z# G U5 F2 k/ S& wNihlathak 尸体爆炸Corpse Explosion
: ^$ s7 x" l8 R0 ?! M9 o* k
B2 ], z d( X9 v
' q" n- v( e! f/ `; m& P& [# H3 V【格挡效果】& I) l+ G7 V) u: Q
7 @9 `# l6 T1 h; B R当格挡判定成功时,100%会发生格挡效果,即抵消该次攻击。格挡判定只和格挡率CTB有关,和FBR无关。 b+ {) s( i. l* r
, H. Z Z$ H: T. L0 E- {; M; }% t
注:当处于跑步状态,人物格挡率降为1/3;当鼠标拿着东西时,人物无法格挡。格挡率在软代码中并没有规定上限,但是硬代码中规定了75%上限。修改D2Common.dll将人物格挡率上限提升到100%后,可以堆满格挡扔进牛堆里永不磨损。
; ~) R( y7 D3 b6 W& `- r1 r9 T5 r8 r3 |3 D; V, V
【格挡动画】
& B% t- Y; h1 q4 z" |2 q# D# [5 c
7 q% u. ?6 N) W8 u, ?& I7 {当格挡判定成功时,除了特殊情况外,人物会立刻停止当前动作,并进入格挡动画状态。特殊情况主要包括不可打断动作和格挡动画本身。提高FBR可以缩短格挡动画。6 ~0 ^5 |9 y# j5 k- f7 i; u/ J' ^
& ~5 X; L' p' N R& j注:格挡动画本身并非不可打断动作,但在调用了格挡动画后,短时间内不会再调用新的格挡动画,这个不会触发格挡动画的时间被称为"Block-Lock"或"Block Timer",最短时间为10F,可以被FBR延长,由硬代码控制,有关这个概念,引用AB的原文来解释更为贴切。$ X" Y+ q1 k% b6 r, r) H
* L+ Z1 N) O, u0 O9 Z1 R
. Y/ o3 k$ J+ z* G1 l* @1 P简单翻译上文的后半部分:当玩家变身为吸血鬼或冥河娃娃等无法格挡的怪物时,格挡依然会发挥作用,提高FBR可以延长Block-Lock时间。" b. q+ R+ z2 J. r0 [2 Z
- j, O/ a& c: T0 s" D2 w7 a
注:吸血鬼和冥河娃娃无对应的DCC且COF中无FBR相关数据,所以调用了打击恢复动画取代了格挡动画,并根据FHR来调节动画速度,且自身的打击恢复动作不受影响,依然独立判定。简而言之就是人物变身不影响自身格挡率。
! C( ^: e" e, W5 j, r" l9 a+ n
8 ]+ g. }4 T8 V6 `, ?8 g
7 F/ u ]* k8 l- A& J【武器格挡】
" L& }/ |) C& E1 z0 r0 `0 O$ O4 r* j' A2 t- `, j- [' L& F
武器格挡是ASN的特有技能,需要装备双爪才能激活,格挡率和技能等级有关。当格挡判定成功时,会调用人物的格挡动画,提高FBR可以缩短格挡动画。
3 D% G; g. U. e) }5 T1 X* J% I, a' J7 H9 z" c) U# `+ T/ F3 Y. v
注:当人物处于跑步或行走状态下无法进行武器格挡(在WW过程中相当于人物处于站立状态)。武器格挡率在硬代码未规定上限,但在软代码规定了上限为65%下限为20%,通过修改硬代码才可以使其他人物获得WB技能,其他相关补充在这里。
" x: t8 \, q7 C9 p8 j5 s/ M
9 p: f7 F6 `5 ~) V4 K【怪物格挡】/ M# y1 @' Y* W7 i, a
1 C2 \6 C1 |. C+ N+ D2 \* b# R2 [怪物格挡主要包括以下两种。
4 A' e. x2 C2 Y) s盾牌格挡:怪物自身装备盾牌并配有格挡动画,且在MonStats.txt中有格挡率的设定,这样的怪物类型并不多,常见的就是骷髅战士、沉沦魔、黑暗猎人、女猎人和投石怪等。
; `4 z N4 f g8 p. d0 g非盾牌格挡:怪物自身没有装备盾牌且不配有格挡动画,但在MonStats.txt中定义了NoShldBlock=1并有格挡率设定,这样的怪物更少,常见的就是解答者、厄运骑士、各关底boss和其对应的uber版。: M: }5 @$ ~3 l' s
- J5 {* G7 C$ Y' @) `2 J4 Q
【主要公式】1 ? K/ G* d" o* q
' y2 K) `" D& y: }) L4 n9 W9 P# ~. @/ R人物的CTB(Chance TO Block)计算公式:8 ]' D( D+ a2 l" y4 u; [$ q g
CTB% = [∑Block% * (Dex - 15) / (cLvl * 2)]
2 ]- M4 e3 I& r/ C6 U1 E: ^3 ^& C' b
人物达到Block75%所需要敏捷的计算公式:' W7 B* k X% f- P$ z. u
Dex = {150% * cLvl / ∑Block% + 15}
/ ~) Q/ [; ~( x6 B2 R$ C( X- L6 `) Q7 w; L
人物的FBR(Faster Block Rate)计算公式:
! x$ {: e# c0 REFBR = [FBR * 120 / (FBR + 120)] + FBR_Skill
1 k9 u( N! j6 r& g) L. ^% B, NFPA = {256 * BlockBaseRate / [AnimationSpeed * (50 + EFBR) / 100]} - 12 ~ o; Y, v0 p& e3 }: L
Block-Lock = 10 + [FBR/8]
! C4 Q R* h* K2 Z( j0 E9 V6 w
4 C2 q7 ^# t% ~' k% }. p. j |
|