|
原创作者:等风来1 _5 h: k4 s5 J; K: F( N
发布日期:2016-02-28
0 {8 k9 Q, C4 S/ F+ Y8 |* C% R9 I% p) x2 Q l5 |. Y! q$ |
+ u) ~& `: v+ T( {: t
下面仅以投射物类攻击(Missile Attack)为代表,简单说一下关于遭受攻击时的格挡(Blocking)判定流程:
# T3 \. j) q4 C
3 w9 ]5 f2 | J
& \5 p8 G3 O. A# @& X# k$ i* }7 @7 x' |. g1. 判定是否为投射物,否则退出判定。
: l' B2 |( ^; `* l$ Y6 a5 h& Y2. 判定投射物是否为有源投射物,否则判定失败,即无源或检测不到来源的投射物无法格挡。. p3 v: X! P4 Z7 L9 a: b
3. 读取Missiles.txt,检测是否存在非法数据。 T$ y* j" Y" K5 E8 S6 J6 b: q! A
4. 判定投射物是否能被打断,如果ResultFlag_Hit=true,则跳过格挡判定流程,直接命中,即连续性投射物无法格挡,否则进入步骤4.1。0 ~' L8 B$ h- o6 k, o
4.1 如果投射物的Missilestxt.GetHit=true,则判定为ResultFlag_GetHit=ture,进入步骤4.3,否则进入步骤4.2。% V+ ]; [8 [/ }% m7 ?+ [# ]
4.2 如果投射物的Missilestxt.SoftHit=ture,则判定为ResultFlag_SoftHit=ture,进入步骤4.3,否则进入步骤5。
- B7 w5 b& z0 g6 m C/ b3 h4 I4.3 如果Missiles.txt中投射物的Missilestxt.KnockBack>0,系统将在0与99之间取随机数,随机数小于Missiles.txt中的投射物KnockBack值,则判定为ResultFlag_KnockBack=ture。
4 c: Q: b& Y/ T7 B/ z5. 进入正式格挡判定流程,首先会检测是否为物理伤害,但此处无论检测的结果如何,都将直接转为调用近战攻击(Melee Attack)的格挡判定,换句话来说,从此处开始回归常规格挡判定。
; E7 B7 E+ ~" [! @5.1 调用人物基本数据进行格挡计算,如果返回值(BlockFlag)=0,则不触发格挡效果。
6 {7 t2 W. k1 V) B5.2 如果投射物的Missilestxt.GetHit=true和Missilestxt.KnockBack!=0 这两者中有任意一项不符合,则直接跳过格挡流程。+ s7 i) O/ P* A& u c
5.3 如果ResultFlag_GetHit=0且ResultFlag_SoftHit=ture,则直接判定为BlockFlag=0。
" D3 f/ X: C! L2 Y/ ?5.4 如果AMA的闪避类效果与格挡类效果联动触发,判定为ResultFlag_Block=ture 则格挡生效,即闪避类效果只能在格挡失败后起作用,武器格挡有自己独立的ResultFlag,不在此处判定。
7 V2 c8 C* n; N, z; s* I! T$ f5.5 一些特殊类效果有自己独特的判定方式,一旦判定成功,无论格挡是否判定成功都会生效,如穿透攻击等。
5 P$ R/ ]% {. k6 f# S+ |5.6 如果格挡类效果触发成功,则判定ResultFlag_Hit=false,即跳过伤害结算。
( N0 d. l1 g! O. W- c5 F/ h8 k# A3 L; I- l2 r
PS:从系统的角度来看,所有单独的投射物都可以格挡,但是某些投射物即使能够格挡也会造成伤害,因为SrvHitFunc和SrvDmgFunc的检测发生在格挡判定之前。- q! Q; F! E2 Z W/ R% Q
e6 e9 ?$ s9 E; z5 w3 o2 W
9 w9 m8 t3 G, c9 f9 }
【盾牌格挡的相关设定补充】
6 D0 A4 t% b6 F/ Z5 O/ D) Z# U- `9 P7 t# h) x
下面这些攻击方式或技能可以被盾牌格挡:& R3 s9 m& |5 r
近战攻击
* H. |2 }. N" x% W箭矢攻击
7 x7 w+ x& o. D* q标枪飞斧飞刀类投掷攻击* V+ z# P m3 s; w* R! i' B9 n
附带物理伤害的投射物: s `( t7 l# O2 A
冥河娃娃Fetish 骨爆
4 H5 d" h- I; L自杀者Suicide 自爆
( u, P. O* T/ [- @8 G8 m火焰强化Fire Enchanted 自爆3 ?9 W& a3 `7 t& d
, S/ w) {0 B2 C. S" W. p/ t; U
下面这些攻击方式或技能不可以被盾牌格挡: r- z1 a5 }& G0 v" t
技能等级>=50 的火箭Fire Arrow (<50可以被格挡)7 n' Q6 ^9 f' s. m/ A
技能等级>=50 的冰箭Cold Arrow (<50可以被格挡); U b9 I5 u3 a2 Q: y0 ~& F, [
闪电球Lightning Bolt+ t( ^! q% @' @
熔岩巨岩Molten Boulder 的爆炸伤害
2 h T; Z5 T# X5 A龙卷风Tornado 的周期性范围伤害
2 {/ P3 n, j; r毁天灭地Armageddon 的范围碰撞伤害
6 V6 V# F! {+ S, [' z: ?, z6 XNEC 尸体爆炸Corpse Explosion
9 A5 n9 v( m- A, W, r1 NPAL 重击Smite
* ]# }' v# c# P* ?怪物冲锋Charging) r; O9 q* v, e }" y
Nihlathak 尸体爆炸Corpse Explosion
0 K& x1 R, I5 @
- c7 I" v5 L% a: ?3 F
/ I; I4 t6 E% i7 ]4 F8 M【格挡效果】) y7 V, D4 d$ v7 V0 o2 g* ?! U
! q% e4 ~6 g* ^! T9 l当格挡判定成功时,100%会发生格挡效果,即抵消该次攻击。格挡判定只和格挡率CTB有关,和FBR无关。
; J! }+ E9 l8 r( r3 |/ T
. w2 `' T& H8 Q, v* O7 k* E注:当处于跑步状态,人物格挡率降为1/3;当鼠标拿着东西时,人物无法格挡。格挡率在软代码中并没有规定上限,但是硬代码中规定了75%上限。修改D2Common.dll将人物格挡率上限提升到100%后,可以堆满格挡扔进牛堆里永不磨损。+ S" X3 a- |7 _
: f5 {2 u1 G) y0 W' P
【格挡动画】
- O* ?7 m6 c: h) d- t+ P9 |8 V& P/ K/ A. q
当格挡判定成功时,除了特殊情况外,人物会立刻停止当前动作,并进入格挡动画状态。特殊情况主要包括不可打断动作和格挡动画本身。提高FBR可以缩短格挡动画。
$ Y' j5 V) X/ T% z/ ~
+ a# Y; b+ C4 B0 I7 h注:格挡动画本身并非不可打断动作,但在调用了格挡动画后,短时间内不会再调用新的格挡动画,这个不会触发格挡动画的时间被称为"Block-Lock"或"Block Timer",最短时间为10F,可以被FBR延长,由硬代码控制,有关这个概念,引用AB的原文来解释更为贴切。' ?1 u9 |. l" D5 d9 \, L* L
& d$ z! P/ x t+ R7 R7 [
4 T+ J! R* ^' l d简单翻译上文的后半部分:当玩家变身为吸血鬼或冥河娃娃等无法格挡的怪物时,格挡依然会发挥作用,提高FBR可以延长Block-Lock时间。
/ A: `, D1 E6 c6 A/ S+ k! }# d6 b
5 b/ G. b4 P' ~# X& \注:吸血鬼和冥河娃娃无对应的DCC且COF中无FBR相关数据,所以调用了打击恢复动画取代了格挡动画,并根据FHR来调节动画速度,且自身的打击恢复动作不受影响,依然独立判定。简而言之就是人物变身不影响自身格挡率。
9 ^ S0 d0 L8 U! m1 ]& {' }0 k5 ^+ i3 _. I- _3 o
9 H0 U) X" T& K3 ?1 o" n x
【武器格挡】
8 G1 i" v a) M5 v( \0 z" d3 Q# {, K7 t* f
武器格挡是ASN的特有技能,需要装备双爪才能激活,格挡率和技能等级有关。当格挡判定成功时,会调用人物的格挡动画,提高FBR可以缩短格挡动画。
2 ^9 \0 Q3 D1 N ], B
# e3 {4 H- C; Q( V. O) R; i注:当人物处于跑步或行走状态下无法进行武器格挡(在WW过程中相当于人物处于站立状态)。武器格挡率在硬代码未规定上限,但在软代码规定了上限为65%下限为20%,通过修改硬代码才可以使其他人物获得WB技能,其他相关补充在这里。! {9 M- D" r6 o" r
6 a) [" f' [, k a; U
【怪物格挡】
: K- l8 T. J" P' S7 d e j" J- ^( W x7 Z0 X
怪物格挡主要包括以下两种。
% T7 j# i; `2 ]# F# Z7 t! n% S盾牌格挡:怪物自身装备盾牌并配有格挡动画,且在MonStats.txt中有格挡率的设定,这样的怪物类型并不多,常见的就是骷髅战士、沉沦魔、黑暗猎人、女猎人和投石怪等。+ f4 m' n5 Q# q8 u. [) w
非盾牌格挡:怪物自身没有装备盾牌且不配有格挡动画,但在MonStats.txt中定义了NoShldBlock=1并有格挡率设定,这样的怪物更少,常见的就是解答者、厄运骑士、各关底boss和其对应的uber版。
9 u* b1 `9 n; ?# e
& `- W+ N$ N" a5 c" W【主要公式】
* x% W* A0 }. ~% Y% T6 H- t
' D. I# A& p) |: q' I) j' b$ b人物的CTB(Chance TO Block)计算公式:1 x: |4 C0 A" u( k. w, u3 f. `
CTB% = [∑Block% * (Dex - 15) / (cLvl * 2)]8 [6 m0 T' d" `) h9 R$ w7 q( i! `- Q
4 v! r* d$ c6 }! n/ P0 s人物达到Block75%所需要敏捷的计算公式:
, h& i! P" {9 G+ UDex = {150% * cLvl / ∑Block% + 15}# \8 ^8 ]: H7 y+ I# v" V& h0 O* }; `
$ S) y `, A# O! `/ P( M1 \人物的FBR(Faster Block Rate)计算公式:
" [7 N1 e0 {' C" l2 vEFBR = [FBR * 120 / (FBR + 120)] + FBR_Skill( z4 U9 A2 Z1 t7 ]% z; {
FPA = {256 * BlockBaseRate / [AnimationSpeed * (50 + EFBR) / 100]} - 1, ]" G& D# A) r9 J- r
Block-Lock = 10 + [FBR/8]
1 a' G- Y# l0 c( u/ F" R
3 \$ h1 I) B9 v. j/ c, A& C |
|