|
原创作者:等风来
: L6 e! @. t) \- f* O$ L; V [发布日期:2016-02-28
5 q6 E8 M" \; C0 j. b+ \9 l; u) _4 A; E$ Y3 q+ P0 o
3 g" p& d/ S$ ~: j6 }8 r
下面仅以投射物类攻击(Missile Attack)为代表,简单说一下关于遭受攻击时的格挡(Blocking)判定流程:
7 v, X- Q4 x. k! M9 g3 a7 K
w% G' i- E, M" w
* _/ l s7 E4 ]. {1. 判定是否为投射物,否则退出判定。
/ A% y8 ]2 @% \6 v8 o2. 判定投射物是否为有源投射物,否则判定失败,即无源或检测不到来源的投射物无法格挡。. x( i! y3 L" ?* b3 ]5 H" O# ?
3. 读取Missiles.txt,检测是否存在非法数据。+ i3 G+ ? f7 x; s, @
4. 判定投射物是否能被打断,如果ResultFlag_Hit=true,则跳过格挡判定流程,直接命中,即连续性投射物无法格挡,否则进入步骤4.1。
& n5 z. K3 O9 X3 F4 O$ o- e9 E4.1 如果投射物的Missilestxt.GetHit=true,则判定为ResultFlag_GetHit=ture,进入步骤4.3,否则进入步骤4.2。
8 n8 z- R7 N2 `4.2 如果投射物的Missilestxt.SoftHit=ture,则判定为ResultFlag_SoftHit=ture,进入步骤4.3,否则进入步骤5。- [& g% O/ i; n, y, e% E$ V; i; F- _
4.3 如果Missiles.txt中投射物的Missilestxt.KnockBack>0,系统将在0与99之间取随机数,随机数小于Missiles.txt中的投射物KnockBack值,则判定为ResultFlag_KnockBack=ture。
/ {! G) Q2 C! l$ [& o7 |5. 进入正式格挡判定流程,首先会检测是否为物理伤害,但此处无论检测的结果如何,都将直接转为调用近战攻击(Melee Attack)的格挡判定,换句话来说,从此处开始回归常规格挡判定。$ U5 J3 z" j& X( p% q3 j
5.1 调用人物基本数据进行格挡计算,如果返回值(BlockFlag)=0,则不触发格挡效果。
8 ]) W' R& o5 C5 k5.2 如果投射物的Missilestxt.GetHit=true和Missilestxt.KnockBack!=0 这两者中有任意一项不符合,则直接跳过格挡流程。: x: q$ f% S; a/ ~7 u) b! q9 v
5.3 如果ResultFlag_GetHit=0且ResultFlag_SoftHit=ture,则直接判定为BlockFlag=0。4 ~6 n( a% f( Y% _ t
5.4 如果AMA的闪避类效果与格挡类效果联动触发,判定为ResultFlag_Block=ture 则格挡生效,即闪避类效果只能在格挡失败后起作用,武器格挡有自己独立的ResultFlag,不在此处判定。
, N; B! B4 y4 c4 }0 U5.5 一些特殊类效果有自己独特的判定方式,一旦判定成功,无论格挡是否判定成功都会生效,如穿透攻击等。" y+ g' Y% t/ J9 U* v7 e
5.6 如果格挡类效果触发成功,则判定ResultFlag_Hit=false,即跳过伤害结算。
# M5 Y+ g+ K( d- Z z" n; G; ~6 t _& x7 t1 s \: v# Q7 T) a
PS:从系统的角度来看,所有单独的投射物都可以格挡,但是某些投射物即使能够格挡也会造成伤害,因为SrvHitFunc和SrvDmgFunc的检测发生在格挡判定之前。$ o( @5 Q, F( H: S, @7 U
" p/ I% h4 a3 F( }0 g% M( E; w2 C; Z+ @
【盾牌格挡的相关设定补充】
# F4 G( o+ H1 j8 h6 k
5 i- C4 Y+ `% O, j$ z下面这些攻击方式或技能可以被盾牌格挡:
7 [# |7 w& `: {$ E/ {+ M z8 r8 W近战攻击+ i& a8 k, e+ m% ^ P
箭矢攻击; x5 a8 F' [; W
标枪飞斧飞刀类投掷攻击: E7 {: E# f/ W( D
附带物理伤害的投射物
g5 |% p$ p" R2 Y冥河娃娃Fetish 骨爆* V( d) u% k$ e4 b" q: ]: e
自杀者Suicide 自爆, a! N/ d5 E' C. M; b/ Z5 V
火焰强化Fire Enchanted 自爆6 g- U. ~: c2 r- ^6 A* f: o" h
1 Q9 @% E) U- z' C
下面这些攻击方式或技能不可以被盾牌格挡:1 P4 }! [, ^4 r7 s0 S/ `. T( V
技能等级>=50 的火箭Fire Arrow (<50可以被格挡) R! S8 ` p3 n9 I! o) v
技能等级>=50 的冰箭Cold Arrow (<50可以被格挡)
, u6 o% }! v) E- Y) E闪电球Lightning Bolt# c& Q, n- p% H+ U
熔岩巨岩Molten Boulder 的爆炸伤害
4 M/ S9 v/ Z o# s+ |8 U龙卷风Tornado 的周期性范围伤害9 V. u- _2 C9 y
毁天灭地Armageddon 的范围碰撞伤害
) k+ P7 @; ?( [" L+ X, gNEC 尸体爆炸Corpse Explosion- ~% q' e1 e" d0 l* p, V C
PAL 重击Smite
' E D) X1 Y" g) C! d) G: a怪物冲锋Charging0 K4 J' ^- N$ x* G
Nihlathak 尸体爆炸Corpse Explosion
5 E" S: J$ j3 \8 I+ P6 F* c. D
8 q% {. n& p6 p+ @6 L
【格挡效果】5 s0 | r( B$ [7 j
+ e e/ l: V& G3 i; m当格挡判定成功时,100%会发生格挡效果,即抵消该次攻击。格挡判定只和格挡率CTB有关,和FBR无关。
3 x; T# [$ n0 f. `4 x; S6 A4 s" l5 x% r
注:当处于跑步状态,人物格挡率降为1/3;当鼠标拿着东西时,人物无法格挡。格挡率在软代码中并没有规定上限,但是硬代码中规定了75%上限。修改D2Common.dll将人物格挡率上限提升到100%后,可以堆满格挡扔进牛堆里永不磨损。" O# _- V0 \. T6 d8 C
$ j; {- V/ A) b! f+ }【格挡动画】
. z/ J2 U6 H" P7 q) h/ c
" m" D+ o3 K# ?5 Z1 P当格挡判定成功时,除了特殊情况外,人物会立刻停止当前动作,并进入格挡动画状态。特殊情况主要包括不可打断动作和格挡动画本身。提高FBR可以缩短格挡动画。$ V) G1 M4 Z4 a
* |! K, z/ L( t: U. M: m/ K注:格挡动画本身并非不可打断动作,但在调用了格挡动画后,短时间内不会再调用新的格挡动画,这个不会触发格挡动画的时间被称为"Block-Lock"或"Block Timer",最短时间为10F,可以被FBR延长,由硬代码控制,有关这个概念,引用AB的原文来解释更为贴切。
8 }$ `1 K' V: k) t
9 m+ p, |; j1 s& H
: } K2 Z! e0 j( O/ F }# X( r$ D简单翻译上文的后半部分:当玩家变身为吸血鬼或冥河娃娃等无法格挡的怪物时,格挡依然会发挥作用,提高FBR可以延长Block-Lock时间。6 u1 Y! q: S) g+ O
5 g7 e t6 Z) h. l+ {/ f
注:吸血鬼和冥河娃娃无对应的DCC且COF中无FBR相关数据,所以调用了打击恢复动画取代了格挡动画,并根据FHR来调节动画速度,且自身的打击恢复动作不受影响,依然独立判定。简而言之就是人物变身不影响自身格挡率。) j5 ?) } Y6 O+ X1 w+ V: h- R
) E3 _ ]- h# x& N0 a% _5 `. C2 c5 \. x0 m3 l
【武器格挡】# ]5 t- O8 P l* k! P
9 z6 g/ U2 j4 T" L+ }, ~. k& n
武器格挡是ASN的特有技能,需要装备双爪才能激活,格挡率和技能等级有关。当格挡判定成功时,会调用人物的格挡动画,提高FBR可以缩短格挡动画。
5 |' v5 {0 R: W0 I4 d' A
- T' M" W3 j7 U注:当人物处于跑步或行走状态下无法进行武器格挡(在WW过程中相当于人物处于站立状态)。武器格挡率在硬代码未规定上限,但在软代码规定了上限为65%下限为20%,通过修改硬代码才可以使其他人物获得WB技能,其他相关补充在这里。2 g: j; ]" g* L( x9 W) C
% Q+ l, f7 R( t& s- f【怪物格挡】# c% l: A: J, J( ^. d' L/ n: O
9 _* W6 z- A/ Y怪物格挡主要包括以下两种。
. w) \) _5 d) p! I$ J) t( W盾牌格挡:怪物自身装备盾牌并配有格挡动画,且在MonStats.txt中有格挡率的设定,这样的怪物类型并不多,常见的就是骷髅战士、沉沦魔、黑暗猎人、女猎人和投石怪等。
& t7 }6 L+ G) ?. j# r非盾牌格挡:怪物自身没有装备盾牌且不配有格挡动画,但在MonStats.txt中定义了NoShldBlock=1并有格挡率设定,这样的怪物更少,常见的就是解答者、厄运骑士、各关底boss和其对应的uber版。+ h' g6 K8 E# p1 e6 m( u# R- o* f
! s2 o5 }6 o- x# m- j: J
【主要公式】 T7 y4 ] c; ]& r! g
6 L- `5 f: Q$ F人物的CTB(Chance TO Block)计算公式:
9 W7 a2 u: ^, f% a8 g+ NCTB% = [∑Block% * (Dex - 15) / (cLvl * 2)]
+ ^. n. u6 v" n
* G( W6 G+ [" J; l& b# a1 N人物达到Block75%所需要敏捷的计算公式:. Q# z& I" a @8 f3 d; V, U
Dex = {150% * cLvl / ∑Block% + 15}
0 J2 P. u% _0 }* c
1 ^5 s0 v, D% D1 b% R- k8 @7 X4 W人物的FBR(Faster Block Rate)计算公式:
4 V' L6 Y6 q; U N& F/ x5 REFBR = [FBR * 120 / (FBR + 120)] + FBR_Skill
8 Z( |! T4 X5 b3 g: H' s( O9 kFPA = {256 * BlockBaseRate / [AnimationSpeed * (50 + EFBR) / 100]} - 1
3 F! h; k& u2 Z1 LBlock-Lock = 10 + [FBR/8] ~8 [0 w+ X0 e1 J6 L: V
! d6 l- n" c# t/ U! h/ z |
|