等风来Lietome 等风来Lietome
关注数: 450 粉丝数: 1,008 发帖数: 24,733 关注贴吧数: 3
KB视频演示【格斗/巨鹰】BUG双爪陷阱ASN 搭配思路: 1. fcr满足正手65,副手102,正手放弃fhr (网络ok的时候使用副手tp) 2. 副爪是格斗剪前提下bug爪:敏捷加到刚好拿起巨鹰爪(要2s的并且放鞋子上方的手),根据装备情况镶一颗最少3敏捷为基础的珠,一颗13#或者ias为基础的珠(如果不介意美观程度,像我用的这种爪子,可以把ias珠镶到头上,头的一颗火珠换到巨鹰上,反正保证有效ias超过19即可,镶头上额外的好处是副手的抗性高一些),其它洞洞全部镶5/5火珠 3. 没带乌鸦一定要有hfd属性同时冰抗尽量满,满足4r前提下sc全部用life/mana 4. pet 用噩梦进攻(力量光环),装备因为资金有限用了廉价的方案:D,土豪还是用好的交尾无限&八目鳗头吧 操作思路: 1. 遇到大群怪感觉到威胁的时候使用斗篷,没事不要乱开影响聚怪 2. 带kb清场怪血比较多,先丢5个雷光(丢在多数怪面朝和行进的方向),配合手雷点杀fr低血少比较吃手雷的怪(不一定是电免,有复活怪的优先喂饱手雷),尸体出现后按照尸体的多少与位置调整亡者的个数与位置,难度低的场景想省事直接丢几个亡者就可以 3. kb5小队建议,第2/3/4队没事丢电网出怪换手雷,1/5队电网即可 ; 雷光和亡者比例看自己队伍造尸体的能力,如果是自己一个人带还是先5雷光出尸体点1~2亡者 感言: 1. 造价,不算太便宜 2. 效率,整体而言,属于pvc bh pal那档效率,没有太多不适合去的地方 3. 个性,个性十足 4. 个人觉得玩游戏不能一味的追求最高效率,否则mf和炸牛就没意义了因为再怎么mf和炸牛也不可能比rr收入来的快速稳定,游戏是用来消遣的,同样道理,如果你厌倦了千篇一律满大街的lsor ama,可以尝试下纯陷阱asn,根据一段时间的观察本人觉得是可以一战
关于双持狂乱(Frenzy)攻速计算的简单说明 双持两把武器的狂乱攻速计算十分复杂,为了便于理解,下面先举一个实例: [] 20级狂乱:SIAS=42 [] 幻化之刃(PB):WSM=-30;IAS=0 [] 巨神之剑(CS):WSM=10;IAS=0 在动画初始时,系统会计算出一个具体的动画播放速率,具体步骤如下: [] 首先获取当前的attackrate,也就是StatID=68(ItemStatCost.txt)。 attackrate = 100 - Right_Hand_WSM + SIAS = 100 - (-30) + 42 = 172 [] 这里需要注意的是Right_Hand指的是游戏角色的右手(手套上方),接下是计算全部武器的WSM_factor。 WSM_factor = (Right_Hand_WSM + Leftt_Hand_WSM ) / 2 - Leftt_Hand_WSM = ((-30) + 10) / 2 - 10 = -20 [] 然后使用递缩公式将用于攻击的装备IAS折算为EIAS。 EIAS = (120 * (Right_Hand_IAS + Off_weapon_IAS)) / (Right_Hand_IAS + Off_weapon_IAS + 120) = (120 * (0 + 0)) / (120 + 0) = 0 [] 接下来将以上的计算结果汇总到一起,开始计算a***tion_rate。 a***tion_rate = EIAS + WSM_factor + attackrate - 30 = 0 + (-20) + 172 - 30 = 122 [] 这里需要注意的是a***tion_rate的上下限为别为175/15,最后开始计算实际动画播放速度。 a***tion_speed = (256 * a***tion_rate)/ 100 = (256 * 122) / 100 = 312 [] 这里需要注意的是256并不是常数,而是animdata.d2中动画的特定值,不过玩家大部分攻击相关的动画都是使用256,在游戏中的每个Tick与a***tion_speed相加作为a***tion_position的增量,直到a***tion_position>=a***tion_length*256为止。 a***tion_position = a***tion_position + a***tion_speed [] 起始位置的a***tion_position从0开始计,然后将a***tion_position/256,以便获取当前的sequence_Frame并播放,当前的序列帧如下: Frame = 1;a***tion_position = 0;sequence_Frame = 0 Frame = 2;a***tion_position = 312;sequence_Frame = 1 Frame = 3;a***tion_position = 624;sequence_Frame = 2 Frame = 4;a***tion_position = 936;sequence_Frame = 3 [] 现在可以看到,下一个sequence_Frame = (882+312)/256 = 4,同时这也是一个action_Frame,也就是说此时狂乱序列的第一个攻击帧为4F,所以此时会发动攻击(call技能srvdo函数)。对于狂乱来说,这是在增加SIAS,然后重新计算a***tion_speed,这里需要使用新的SIAS。如果攻击命中了目标,则切换武器,相当于激活了左手武器并参加攻速计算过程,下面假定达到最大值后的理想状态。 Frame = 5;a***tion_position = 1248;sequence_Frame = 4 Frame = 6;a***tion_position = 1560;sequence_Frame = 6 Frame = 7;a***tion_position = 1872;sequence_Frame = 7 Frame = 8;a***tion_position = 2184;sequence_Frame = 8 [] 下一个sequence_Frame = (2184+312)/256 = 9,同时这也是一个action_Frame。接下来假定为理想状态,此后的步骤使用Lefr_Hand_WSM,这时会得到一个新的a***tion_speed=209,并继续播放动画。 Frame = 9;a***tion_position = 2393;sequence_Frame = 9 Frame = 10;a***tion_position = 2602;sequence_Frame = 10 Frame = 11;a***tion_position = 2811;sequence_Frame = 10 Frame = 12;a***tion_position = 3020;sequence_Frame = 11 Frame = 13;a***tion_position = 3229;sequence_Frame = 12 Frame = 14;a***tion_position = 3438;sequence_Frame = 13 Frame = 15;a***tion_position = 3647;sequence_Frame = 14 Frame = 16;a***tion_position = 3856;sequence_Frame = 15 Frame = 17;a***tion_position = 4065;sequence_Frame = 15 Frame = 18;a***tion_position = 4274;sequence_Frame = 16 [] 下一个a***tion_position = 4274+312 = 4586,而狂乱的a***tion_length=17,则17*256 = 4352,而4586>4352,所以动画至此结束,总长度为18F。
打击恢复(Hit Recovery)判定流程 原创作者:悄然花开 发布日期:2008-08-12 【遭受攻击时HR动作判断的流程】 1. 打击恢复动作(以下简称HR动作)只有在攻击动作的resultflag参数=4时才会产生。 2. 检测受攻击目标是否处于眩晕状态(stun)。如果是,直接进入HR状态。 3. 检测受攻击目标是否处于冻结状态(frozen)。如果是,判断结束,不产生HR动作。 4. 检测本次攻击是否包含毒素伤害。 4.1 如果是纯毒素伤害,判断结束,不产生HR动作。 4.2 同时包含毒伤害和其他类型的伤害。若受攻击目标受到的总伤害小于1,判断结束,不产生HR动作。反之转入步骤5 4.3 不包含毒素伤害。检测受攻击目标受到的总伤害是否大于等于1。是则转入步骤5,否则判断结束,不产生HR动作。 5. HR动作判断开始 5.1 获取受攻击目标最大生命值MaxHP。根据攻击类别(Hit Class)获取参数divisor,具体分类详见下文。 5.2 若目标受到本次攻击的伤害DAM<MaxHP/divisor,退出判定,不产生HR动作。反之转入步骤5.3。 5.3 若DAM≥MaxHP/(divisor/2),本行判断结束,转到步骤5.4。否则系统将取随机数0和1,若为0则不产生HR动作,退出判定;为1则转到步骤5.4。 5.4 若DAM≥MaxHP/(divisor/4),转入步骤5.5。反之系统取随机数0-3,若为0则不产生HR动作,退出判定;取其他数则转到步骤5.5。 5.5 系统检测受攻击目标是否允许产生HR动作。若判断允许,则产生HR动作,反之不产生。判断结束。 【简单来说判断标准如下】 纯毒素伤害不会造成HR动作。 非纯毒素伤害的情况下,记本次攻击所造成的伤害值为DAM,受攻击目标的最大生命值为MaxHP,相关参数为divisor,则 若DAM<MaxHP/divisor,则不产生HR动作; 若MaxHP/divisor≤DAM<2*MaxHP/divisor,则有3/8的几率产生HR动作; 若2*MaxHP/divisor≤DAM<4*MaxHP/divisor,则有3/4的几率产生HR动作; 若4*MaxHP/divisor≤DAM,则100%产生HR动作。
关于D2中等轴透视立体图形(Isometric Graphics)的简单介绍 原创作者:等风来 发布日期:2017-02-07 Isometric Graphics, 游戏绘图中的常用术语,D2就是一种等轴游戏(Isometric Game),实际上,Isometric Game 中的 isometric,指的正是机械制图中,以等轴测投影法绘制的三维物体平面图的一种测量方法,Isometric Game 都是(或基于)轴测图。轴测图就是用轴测投影的方法画出来的有立体感的图。轴测投影(axonometric projection)相对于正投影(orthographic projection)稍微复杂一点,即投影时,物体要围绕它在3D空间中的一个或多个坐标轴,相对于投影平面旋转一定的角度。所谓“轴测”,意思就是“沿着轴来测量”,凡是与坐标轴平行的线段,都可以沿轴向进行作图和测量。 如下图所示为一个典型的二维坐标例子,左边是2D游戏的画面效果,而右边则是3D游戏画面效果。轴测投影可以分为以下三种基本的情况: [] 等轴测投影(isometric projection) [] 正二测投影(两等角投影,dimetirc projection) [] 正三测投影(trimetric projection) 注:轴测投影下形成的物体影像,就好像从某个斜角观察物体一样,能让人在一个画面(投影平面)中看到物体的不止一个侧面。在轴测投影中,绘制出来的物体的轴或平面与投影平面并不是平行关系。简单说明一下我们需要了解的等轴测投影概念:即按照透视法缩短的三个坐标轴的缩放系数是相等的,而且任意两个坐标轴之间的角度都是120°。 Isometric Game,就是基于等轴测投影原理,把所有游戏界面元素沿坐标轴旋转一定角度制作并绘制到平面(屏幕)上,让玩家能够看到物体的多个侧面,从而产成3D效果的一种游戏。业内人士常常也把这种游戏称为“斜45度视角(或3/4视角)”、“2.5D”或“伪3D”游戏。游戏中的画面都是由众多“菱形”的等轴测视图构成的,也就是说游戏的地图是经由若干地图切片(tile)无缝地拼接而成的,只不过游戏画面的切片都被处理成了菱形,而不是正方形。但是Isometric Game 其实并不是真正的等轴测投影(isometric projection),而是正二测投影(dimetirc projection)。简单地说,如果是等轴测投影【三个轴两两之间的夹角都为120°】的话,那么就要按照30°角来绘制菱形,可这样会导致像素线条出现缺口,而绘制角度为26.5650°的直线恰好没有瑕疵,但此时三个轴之间的角度分别为:116.565°、116.565°、126.87°,这就是正二测投影(两等角投影)了,或许大家先入为主地认为正二测投影可以看成等轴投影的一个变体,或许是因为等轴测投影的应用最为广泛,所以游戏业内仍然将在2:1的菱形切片基础上构建的游戏称为 Isomentric Game。 如下图所示,左边为真正的等轴测投影旋转角度,而右边是游戏中的画面效果。PS:35.264°=arctan(sin(45°)) 【游戏地图和“码”的关系】 游戏中构成地图的最小菱形单元是Tile Unit(又名Sub Title),其对角线长度分别为水平32像素Pixels和竖直16像素Pixels,Yard和TU的换算关系为:1 Yard = 1.5 TU。【视野距离和“码”的关系】 游戏的屏幕分辨率一般是640*480或者800*600,但是窗口下面的控制面板占用48像素Pixels,所以我们实际上的屏幕像素应该是640*432或者800*552,而通常我们用的都是800*600分辨率。PS:最后补充一个3D效果的视野距离图片。
[1.09] Barbarian Whirlwind 攻击速度的计算 原创作者:Louis-J 发布日期:2004-08-20 一. 仅使用一把武器的情况 即除了两手分别持武器(Dual Wielding)以外的情况. 1. 计算 delay 游戏首先要计算一个 delay 值, 公式如下: delay = [FramePerDirection * 256 / [(WIAS - WSM + 100) * AnimationSpeed / 100]] 其中: FramePerDirection: 角色普通攻击动作A1的动作基础帧数, Bar的数值如下表: ==================== 武器类型 A1_Frames -------------------- 单手武器 16 -------------------- 双手剑 16 -------------------- 双手其它 19 ==================== AnimationSpeed: 角色普通攻击A1的动作速度,Bar的对应数值为256. WIAS: Weapon Increased Speed, 武器上的提速. WSM: Weapon Speed Modifier, 武器的基础速度 []: 方括号表示向下取整数. 2. 查 Real_Delay 根据 delay 值从下表查出一个对应的 Real_Delay 值. ==================== delay Real_Delay -------------------- 0 - 11 4 12 - 14 6 15 - 17 8 18 - 19 10 20 - 22 12 23 - 25 14 26及以上 16 ==================== 3. Whirlwind 的动作序列 启动 Whirlwind 时的那一帧记为第 0 帧. (1) 第 4 帧时, 攻击 Whirlwind 范围内的某个敌人; (2) 第 8 帧时, 攻击 Whirlwind 范围内的某个敌人; (3) 此后, 每隔 Real_Delay 个帧数就标记一次 "攻击状态"; 每隔4帧检测一次"攻击状态", 若发现 "攻击状态" 被标记, 则攻击Whirlwind 范围内的某个敌人. 4. Whirlwind 的攻击范围 Whirlwind 的攻击范围是 5 TU. 但究竟能否打到敌人还与武器的攻击范围有关. 若范围内有多个敌人, 将选择其中一个. 具体选法未知, 有可能是按敌人进出攻击范围的顺序排队. 5. Whirlwind 的动作序列帧与 Real_Delay 对照表 表中标记"M"表示此时标记一次"攻击状态", 标记"A"表示攻击敌人. 若 M 与 A 同时出现, 则攻击敌人, 标记为"A". ======================================== Real_Delay 16 14 12 10 8 6 4 ---------------------------------------- 序列帧 ---------------------------------------- 4 A A A A A A A 8 A A A A A A A 10 - - - - - - - 12 - - - - - - A 14 - - - - - M - 16 - - - - A A A 18 - - - M - - - 20 - - A A - A A 22 - M - - - - - 24 A A - - A - A 26 - - - - - M - 28 - - - A - A A 30 - - - - - - - 32 - - A - A A A 34 - - - - - - - 36 - A - - - - A 38 - - - M - M - 40 A - - A A A A 42 - - - - - - - 44 - - A - - A A 46 - - - - - - - 48 - - - A A - A 50 - M - - - M - 52 - A - - - A A 54 - - - - - - - 56 A - A - A A A ======================================== 可见, 当 Real_Delay 为 4 的整数倍时, 标记"攻击状态"与检测"攻击状态"发生在同一帧. 当 Real_Delay 不是 4 的整数倍时, 标记与检测"攻击状态"将发生分离. 例如 Real_Delay = 6 时, 从第 8 帧起, 下一次标记"攻击状态"发生在第 8 + 6 = 14 帧, 而这个标记要等到第 16 帧游戏检测"攻击状态"时才被检测到, 因此对应的攻击发生在第 16 帧. 二. 两手分别持一把武器(Dual Wielding) 数据与公式和上面完全一样, 只是在动作序列中有以下不同: (1) 一把武器作为 当前武器, 另一把武器作为 第二武器; (2) 每次攻击时, 两把武器均会攻击敌人, 如果打击范围内有多个敌人,则两把武器不会攻击同一个敌人;如果打击范围内只有一个敌人,则两把武器都会攻击这个敌人。但第一次攻击(第 4 帧)除外, 第一次攻击时仅 当前武器 攻击敌人; (3) 每发生一次攻击后, 游戏会切换武器, 当前武器 成为 第二武器, 原先的 第二武器 成为当前武器; (4) Real_Delay 为 当前武器 的 Real_Delay 值. 切换武器的动作使得实际的动作序列颇为复杂, 尤其是两把武器速度不同时. 下面举例说明: 武器A: Real_Delay = 6, 持于右手; 武器B: Real_Delay = 14, 持于左手; 动作序列如下: 1. 第 0 帧, 开始 Whirlwind. 当前武器为武器A, 第二武器为武器B. 2. 第 4 帧, 2.1 武器A 准备攻击敌人; 2.1.1 若范围内有敌人, 则武器A 攻击敌人, 然后切换武器, 本帧结束. 2.1.2 若范围内无敌人, 本帧结束. 3. 第 8 帧, 此时的 当前武器 要视 2 中的结果而定. 3.1 当前武器 准备攻击敌人; 3.1.1 若范围内有敌人, 则 当前武器 攻击敌人, 然后切换武器; 3.1.2 若范围内无敌人, 本帧结束. 3.2 若 3.1.1 中切换了武器(此时的 当前武器 为 3.1 中的第二武器), 3.2.1 若范围内有其它敌人, 则 当前武器 攻击敌人, 然后切换武器, 本帧结束. (注意, 此时不会攻击 3.1.1 中被攻击的敌人, 不论它是否位于范围之内.) 3.2.2 若范围内无其它敌人, 本帧结束. 4. 第 8 帧结束时, 下次攻击发生在哪一帧? 4.1 若 当前武器 为 武器A, 则下次攻击发生在第 16 帧(见序列帧 与 Real_Delay 对照表.) 4.2 若 当前武器 为 武器B, 则下次攻击发生在第 24 帧. 5. 第 8 帧之后的第一个攻击帧. 此时是第 16 帧还是第 24 帧要视 4 中的结果而定. 攻击的过程与 3 中类似. 5.1 若此时是第 16 帧, 5.1.1 若 当前武器 为 武器A, 则下次攻击发生在第 20 帧(见 序列帧 与 Real_Delay 对照表). 5.1.2 若 当前武器 为 武器B, 则下次攻击发生在第 24 帧. 5.2 若此时是第 24 帧, 5.2.1 若 当前武器 为 武器A, 则下次攻击发生在第 28 帧. 5.2.2 若 当前武器 为 武器B, 则下次攻击发生在第 36 帧. 6. 依次类推. 三. ASN使用混沌(Chaos)时的计算 计算方法同上。ASN持双爪或者单爪时,FramePerDirection=11,AnimationSpeed=208.
关于提示错误类通知 (Location : , line #xxxx) 的简单处理方法 原创作者:等风来 发布日期:2016-08-18 Halt Location : , line #xxxx Expression : Unrecoverable internal error xxxxxxxx 这是一种常见提示错误的通知,也是比较不好处理的一种错误。最近有不少新人遇到不知道该怎么办,我简单写一些自己的处理方法。 1. 判断是什么原因导致的,回想一下自己最后修改过什么,有习惯修改前备份的同学可以尝试还原一下。 2. 将错误提示截图,发到BBS上问一下或上其他网站查询解决方法。 3. 全屏模式有可能不会出现错误提示,这个时候改为窗口模式试一下(启动参数为:-w),个人建议尽量使用窗口模式进行游戏。 4. 如果是游戏进行中的崩溃,回想一下当时自己在做什么,基本可以判断是什么导致的游戏崩溃,以及怎么去避免这种情况的发生,有个最经典的例子就是AMA拿敲石头的锤子进入游戏出现的错误,这就是D2游戏文件中D2CHAR.MPQ文件损坏, AMRHWHMSC1HS.dcc文件缺失导致的。 5. 如果提示为Access Violation,这个需要查询D2的游戏记录文件,这个文件的名字是D2xxxxxx.txt,后面的xxxxxx是6位数字,命名的规则为年月日(yymmdd),将记录中有关Error的部分复制下来,发到BBS上问一下或上其他网站查询解决方法。 6. 错误提示line #xxxx 中的数字,通过修改DLL基址可以将Error提示中的xxxx重新定义方便查询。个人建议出错后,备份一下Storm.dll,然后用我上传的Storm.dll覆盖一下,然后重进游戏生成错误提示line #xxxx 后再还原,将新的line #xxxx 发到BBS上问一下或上其他网站查询解决方法。
一个关于物品属性排列顺序的小规律 原创作者:等风来 发布日期:2015-10-11 最近单机测试时修改了一些装备,无意间发现了一个物品属性的排列规律,不知道有没有人发过,写下来与大家分享一下。 物品属性的排列顺序优先级,主要由该属性的Descpriority和StatID决定,相关数据取自ItemStatCost.txt。 先去掉物品的基础属性,只留下我们主要关心的蓝色字体部分,Descpriority值较大的属性会优先显示,比如谜团的属性中+2所有技能的Descpriority=158,15%DTM的Descpriority=11,而3孔的Descpriority为空,所以显示出来的排列顺序为:+2所有技能/15%DTM/3孔。有用的属性中(去掉ByTime类),Descpriority值最大为160,最小为空,但有很多属性的Descpriority值相同,这时由StatID来决定优先显示顺序,比如我们常用的暗金珠宝的技能触发分为升级和死亡两种,这两种触发的Descpriority值均为160,但升级的StatID=199,而死亡的StatID=197,所以排列顺序上升级触发优先于死亡触发显示。另外还有种情况就是某属性的Descpriority和StatID都相同,比如电棒的Staffmod中,+3闪电、+3连锁闪电和+3支配闪电的Descpriority和StatID均为81和107,这三种都是SingleSkill类,故需要比较的就变成了SkillID,查Skill.txt得,闪电的SkillID=50,连锁闪电的SkillID=53,支配闪电的SkillID=63,所以显示出来的排列顺序为:+3支配闪电/+3连锁闪电/+3闪电。PS:引用的物品来自IMPK精品区,想ROB的童鞋可表找错人哦〜
【冲天梯经验公式】——个人总结之EXP详细计算流程 原创作者:等风来 发布日期:2016-02-02 正常冲天梯,队友平均等级差不多的情况下,想要达到最大化经验收益,个人意见是: 大菠萝7进1,老尼8进1,巴尔3进1、5进2或6进3。 上赛季冲天梯时偶然间发现,资料馆转自国外的经验计算流程的错误和疏漏比较多,从流程到猜想都有问题,导致计算数据和实际面板差距很大。 正好新赛季比较空闲,本猪直接查询了硬代码,并辅以实际测试,然后总结了完整的EXP计算流程的相关理论公式。 第一步:基础经验 exp1=[Exp(H)*L-XP(H)/100] 第二步:游戏人数 exp2=exp1*(游戏内人数-1)/2+exp1 第三步:结盟加成 exp3=exp2*(经验获取范围内玩家数-1)*89)/256+exp2 注:超过FFFFFFFFh的位数将被砍掉。 第四步:经验分配 exp4=exp3*角色等级clvl/(经验获取范围内所有角色等级clvl之和) 第五步:等级惩罚 (1)封顶经验 exp5=min(exp4,7FFFFFh) (2)人怪惩罚 exp6=exp5*malus 注:malus和人怪等级差惩罚,具体数据请看1楼。 (3)等级惩罚 1.clvl<70 且 exp<100000h,exp7=[(exp6*1024)/1024] 2.clvl<70 且 exp>=100000h,exp7=[exp6/1024]*1024 3.clvl>=70 且 exp<200000h,exp7=[(exp6*expratio)/1024] 4.clvl>=70 且 exp>=200000h,exp7=[exp6/1024]*expratio 注:expratio取自Experience.txt,具体数据请看1楼。 第七步:经验加成 1.exp>100000h,exp8=[exp7/100]*bonus+exp7 2.exp<=100000h,exp8=[(exp7*bonus)/100]+exp7
暗黑攻防动作解析及相关测试 原创作者:GoldenBomber 发布日期:2014-09-28 主楼:结论 1楼:本人所做的相关测试 非要概括的话,这篇文章主要就是写在攻与防中,攻击时候会遭遇什么、格挡时会遭遇什么、hr时会遭遇什么,然后会有什么影响变化,藉此让大家对自己人物的动作有个深入了解,以便在搭配甚至操作时能有所帮助,有兴趣围观,但又觉得稍显专业或者阅读不畅的朋友,建议只看主楼结论好了,1楼测试对有的朋友来说可能是一头雾水,甚至可能略显凌乱 本文立文的基础在于测试,是指通过预设好的方案,对动态链接库(硬编码)、动作速度相关、mpq相关数据源文件、各种装备等进行修改调整,以便达到可以观测预想方向的效果的测试 让我们看看部分修改后的效果截图(因impk每层楼有图片数量限制,这些只好放主楼这里),有一些是平常我们看不到的: 慢镜头下ama动作4连拍:分别是正常动作、格挡动作、打击恢复动作正面、打击恢复动作背面修改角色物理抗性上限100%、格挡上限100%100% dr的破衣服,修改代码dr上限值后上图所示100%dr就是这样实现的,其他各种正常或者超常规修改的装备不一一放上来了在开始正文前先说几个基本概念,以便大家更好地阅读本文 1、什么是动作:直观说就是我们在游戏窗口看到的画面、动画,一个人物、怪物在一个时间点上只能做一个动作,好比方你不可能看到一个一边tp一边格挡的sor,暴雪没有设计这样的动画 2、什么是检测:虽然一个时间点只能做一个动作,但是系统对于每次攻防都是必检的,好比方你正在格挡中,来了一波攻击,这时候对这波攻击里的每一份攻击都是严格按照攻防流程检测的,如果某攻击检测结果为掉血,那你就会在格挡动作中掉血(掉血不是动作,只是扣状态,就是扣左下角红瓶),因此才有了围殴致死这回事 3、什么是动作时间点:对于很多动作而言,它们有动作时间(用时多久完成这个动作)、也有个动作时间点(直观说好比方我们看到bh发出的那个时间点),这个动作时间点不在整个动作的开始、也不在结尾,而是在中间,形象地说一个动作分为起手——动作发出点——收手3部分 比方我们知道pal在50fcr下的帧数(查资料馆全角色fcr表)为11,这意味着pal完成一个施法动作(比方bh吧)用时11帧(我们知道动画都是由一个个静态画面连续组合起来的,11帧意思就是11个画面),那么我们在动画上看到的那个鸡腿是什么时候能看到呢?在中间第5帧,也就是第5个画面!一个动作用时11帧并不意味着11帧全是攻击画面,也就是11帧全是锤子,你想想11帧全部出锤子的画面?那就是恐怖的伤害*11了,事实上在整个动作时间11帧里,只有1个画面出锤子,那个就是动作时间点,下文所有说在xx时间内受到攻击xxx,全部指的是这个动作时间点在这xx时间范围内,这才是有效攻击! 4、更详细的解说请看正文 按照常规典型,我们知道动作流程通常是这样走的: 攻击——防御/命中检测——格挡检测——打击恢复检测 看似很平常,但真实的检测情况却远比我们想象的复杂得多,so请看正文一一道来 攻防动作流程解析: 一、怪物的出手 1、如果怪物不受到干扰,很显然它将按照行为参数的选择完成它的动作(反之,比方一只暴风施术者正向你飞来,还没到达预定攻击位置,半道上被你发出的bh秒了,然后就没有然后了) 2、如果根据行为参数的选择,怪物发动攻击,在其攻击动作(画面)未发出前,即在此次攻击的起手——动作时间点之间,受到char的攻击,并且判定为打击恢复的,怪物攻击中断并进入打击恢复动作 我们知道游戏有个ping值,单位是毫秒,也就是我们发出指令——服务器接收并反馈——我们自己收到反馈的时间,所以当你看到怪物的时候,在服务器那里怪物已经决定下一步要做什么了,所以第一步写怪物出手 ps:人物跟怪物一样,在出手——动作时间点之间,受到攻击并判定为格挡或者打击恢复(格挡只针对人物而言)的,则攻击中断并进入相应状态(由预备出手转入格挡或者打击恢复状态),各种中断不同点在于:出手动作停了然后啥都没看见、虽然停手但仍有动画播出不过没实际伤害作用 附:一些怪物(dy)及人物主要攻击技能的动作时间点(同型金怪神马的都一样的) 部分怪物/人物及其攻击技能 动作时间点(帧,秒) 特殊情况下 遗忘、厄运骑士普通攻击 10,0.417秒 厄运骑士狂热下可提高到7,0.2917秒 遗忘骑士所有施法技能 11,0.458秒 邪魔之王普通攻击 11,0.458秒 邪魔之王火焰喷射 8,0.333秒 pal的bh技能 9,0.375秒 50fcr下提高到5,0.208秒 sor的施法技能(暴雪、传送) 7,0.2917秒 70fcr下提高到3,0.125秒 那我们知道ping是系统来回的反应时间,100ping就是0.1秒,然后人的大脑还有个反应时间,百度说快则0.1几秒,慢则0.3几秒,对于ping不太好且喜欢频繁点击鼠标而反应又不是特别快的朋友来说,被怪物攻击进行中断判定那是太平常的事情了,另外我们可以看到50fcr下的bh动作时间点距离狂热骑士动作时间点只有不到1秒,这基本是非人力所能及的,我想这里的操作大概就是顶尖pal与一般pal的分别:顶尖pal不松鼠标连续操作,入位后基本都能先于怪物出手,然后将怪物打出打击回复中断怪物攻击 这里还引发一个槽点:小刀pal虽然比杖pal的fcr快了1帧,但是因为伤害略低,这一圈打出去没几个怪被打出打击回复的,所以比杖pal危险,但是对于不连续操作喜欢闪着打的朋友来说,除了伤害略不爽之外,貌似提高出手速度还不错 ps:对于sor来说,传送的收手动作为7帧,sor通常都是tp到位才发动攻击,因此对于低防低命、格挡久打击恢复慢的sor来说危险系数也相应地提高很多,想起曾在综合区看到在讨论格挡/体力型sor的时候有人说的一句话:如果你的sor总是被迫近身格挡,那么你的操作是灾难的,话说fz没有pet啊,so仁者见仁吧 再ps:对于很多飞射物来说,飞射物文件还定义有飞行距离和飞行速度,不是发出就直命中,对于fz来说,可能在动作时间点的关注上,最直接最现实的也就在狂热西西那里,所以没打算计算更多的 二、人物的出手 1、怪物命中检测,由怪物级别、人物级别、怪物命中率、人物防御值构成的概率计算,怪物要是打不中,这一波攻击结束;要是打中,则进入格挡进而可能进入打击恢复检测 ps:fz人物属性页面显示的怪物命中率是个bug显示,这里显示的怪物命中率在系统计算时,虽然调用了fz的怪物等级,但是却错误地调用了zlp的怪物命中率,实际fz怪物命中率比页面显示那个要小一些 2、假设在怪物命中检测中,怪物通过了def这一关进入到格挡甚至打击恢复检测,那么跟怪物一样,如果人物在出手——动作时间点之间,受到怪物攻击判定为格挡或者打击恢复,则攻击中断并进入相应动作,我想体会最深的应该是tp动作,明明点下去了却飞不起来,这就是中断了;中断后就算有动画,那也是无伤害的,比方著名的攻击技能pal的bh和sor的暴雪等等~~施法动作马上中断并结束、放出虚幻的但没有实际攻击力的动画、同时我们将看到格挡或者打击恢复动作 3、如果人物的出手未受到干扰,那就是正常流程走判定,攻击怪物 ps1:提高fcr、ias等整体上是整个动作时间缩短了,实际是把动作时间点提前了,我们更快地看到了出手动作,所以我们感觉动作更快了,而且随着动作时间点提前,意味着char受到攻击中断的概率又降低了 ps2:有些动作是不可中断动作的,根据技能文件在d2定义的357种技能中,一共有22种技能是不可中断的,其中就包括pal的盾击、冲锋、热诚;ama的炮轰、戳刺、击退;bar的旋风、狂乱、专心等,在这些动作中,无法实现诸如以格挡、打击恢复等去停下它们 ps3:为什么我们对tp中断体会更深呢?因为tp中断直接没下一个画面了,飞不起来了,而且这个技能用得太频繁,让人感觉怎么老中断啊?不像其他释放的中断,虽然没伤害,但起码好歹有个动画播出来,视觉上我们并不知道其实已经中断了 ps4:pal的专注有2成的概率避免中断,简直是神技 三、人物格挡 1、格挡是不可中断动作,一旦进入格挡,强如打击回复也不能影响它,不过修改测试表明,格挡中拿掉身上的装备比方盾啊什么的,可以从格挡动作中退出,但是正常状态就别想了,那点格挡时间眨眼就过 2、能造成格挡的除了纯物理攻击之外,还有物理带元素的,当然说是元素带物理也行,随着造成格挡,元素攻击也随着物理攻击一起挡掉,人物不会受到伤害,知名的比方墨菲斯托的冰冷带物理伤害的冰球、暴风施术者的红链 3、人在奔跑中是跳过命中检测的,100%命中,直接到格挡检测这一关,检测成功人物将停跑进入格挡动作 4、在格挡动作中,再来一次或几次判定为格挡的检测,格挡效果存在,动作不变,只按这一次动作完成 5、在格挡动作中,再来一次或几次判定为打击回复或者掉血的检测,格挡动作不变,人物掉血 四、格挡延迟时间 格挡动作=格挡动作时间+格挡动作延迟时间,对这个概念不清楚的可以看一下资料馆 格挡动作时间就是我们看到格挡抽一下、或者说顿一下那个动作,格挡延迟时间就是那个动作完成后人物在哪里正常站着的时间 1、格挡延迟时间内,角色可操作,且具有格挡能力,但不会出现格挡动作 2、这个时间内,人物的动作或者说攻击不会受到怪物攻击中断,不论怪物攻击是格挡前还是格挡时、甚至是延迟时间里发出的,只要怪物攻击的动作时间点在格挡延迟时间内的,均不会中断人物攻击 3、格挡延迟时间(已扣除相应的格挡动作时间),对于30/20的盾来说是14帧,对于15/10的盾来说是12帧,对于普通盾来说是10帧,个人倾向于能用30/20的盾就不用15/10的,2帧不少了,当然,这事仁者见仁吧 ps:对于首攻被格挡中断的人来说,他们的次攻可能于格挡动作完成后,在格挡延迟时间内发出,对于连续操作的高手来说实现格挡延迟时间内出手不是问题,但是对于pal,30/20这个属性对于一些人来说,多少还是有用的属性,毕竟30/20比啥都没有的盾在安全时间上多4f,对于习惯频繁点鼠标操作的人来说,这4f意味着他们次攻被中断的概率降低了~~典型的场景可能是这样的:看到一神器掉了,啪啪啪冲上去抢,然后让怪给打出格挡了,赶紧放招,结果这一放还慢了,攻击技能的动作时间点在安全时间之外了,然后正好怪物命中的动作时间点在你动作时间点之前了,再然后这一波攻击可能又被下一轮格挡或者打击恢复中断了 五、打击恢复 打击恢复已经经过验证不是一次伤害超过1/12就产生的,是一个根据伤害的概率事件,还是这种老观点的可以到资料馆学习一下 1、打击恢复是个可以中断动作,是可以被格挡中断的,即你正在打击恢复动作中受到怪物攻击,并判定为格挡,那么打击恢复动作提前结束进入格挡动作,所以还在堆fhr的朋友,还是那句话仁者见仁吧 2、在打击恢复动作中,再来一次或几次判定为打击恢复的检测,打击恢复动作不变,只按这一次动作完成,并相应掉血 3、在打击恢复动作中,再来一次或几次判定为掉血的检测,打击恢复动作不变,同时执行掉血 4、非直接伤害作用(比方cb)无论伤害多大、不可中断技能(比方ww)不管受到多大伤害,都出不了打击恢复 5、nefarius等大神在做打击恢复代码解析的时候给出答案说是resultflag=4时才能造出打击恢复动作,看飞射物设置文件中虽然可以查到这个值,但是这里似有个更广泛的值gethit,这些能造打击恢复和不能造的技能差不多是一半对一半的,要从中文上造格挡那样定义造打击恢复的攻击类型好像不好分类,我觉得hit(打击)这个词已经比较形象地说明了吧,像怪物直接砍人就能造打击恢复,而以帧来计伤害的灵魂传播者的持续性喷火就没法造,因为没有hit这种特质 还有什么没想到的再补充了 最后: 1、所有测试均是本人亲测,以服务此贴为宗旨,相关结论没有给出测试的,那基本是impk资料馆里有定性结论的,或者相当常识性的问题 2、篇幅及精力所限,有些数据可能只列出一部分,如果有需要的朋友可以提出,待我测算后加入 3、对于新人朋友来说,这篇可能过于繁琐和专业,从方便阅读角度出发,主楼关键词也用中文表述,一些太过专业的东西就不扩展了,知道有这么回事就行,阅读起来比较舒服点 4、感谢各路前辈在不同时间不同帖子不同的探索,从接触d2以来获益良多 5、以下测试及结论有什么不对的地方,或者大家还有什么想法,欢迎提出讨论,毕竟仓促之间所设计的测试并不一定考虑到方方面面 6、by goldenbomber,2014.9.28,from impk
格挡(Blocking)判定流程 原创作者:等风来 发布日期:2016-02-28 下面仅以投射物类攻击(Missile Attack)为代表,简单说一下关于遭受攻击时的格挡(Blocking)判定流程: 1. 判定是否为投射物,否则退出判定。 2. 判定投射物是否为有源投射物,否则判定失败,即无源或检测不到来源的投射物无法格挡。 3. 读取Missiles.txt,检测是否存在非法数据。 4. 判定投射物是否能被打断,如果ResultFlag_Hit=true,则跳过格挡判定流程,直接命中,即连续性投射物无法格挡,否则进入步骤4.1。 4.1 如果投射物的Missilestxt.GetHit=true,则判定为ResultFlag_GetHit=ture,进入步骤4.3,否则进入步骤4.2。 4.2 如果投射物的Missilestxt.SoftHit=ture,则判定为ResultFlag_SoftHit=ture,进入步骤4.3,否则进入步骤5。 4.3 如果Missiles.txt中投射物的Missilestxt.KnockBack>0,系统将在0与99之间取随机数,随机数小于Missiles.txt中的投射物KnockBack值,则判定为ResultFlag_KnockBack=ture。 5. 进入正式格挡判定流程,首先会检测是否为物理伤害,但此处无论检测的结果如何,都将直接转为调用近战攻击(Melee Attack)的格挡判定,换句话来说,从此处开始回归常规格挡判定。 5.1 调用人物基本数据进行格挡计算,如果返回值(BlockFlag)=0,则不触发格挡效果。 5.2 如果投射物的Missilestxt.GetHit=true和Missilestxt.KnockBack!=0 这两者中有任意一项不符合,则直接跳过格挡流程。 5.3 如果ResultFlag_GetHit=0且ResultFlag_SoftHit=ture,则直接判定为BlockFlag=0。 5.4 如果AMA的闪避类效果与格挡类效果联动触发,判定为ResultFlag_Block=ture 则格挡生效,即闪避类效果只能在格挡失败后起作用,武器格挡有自己独立的ResultFlag,不在此处判定。 5.5 一些特殊类效果有自己独特的判定方式,一旦判定成功,无论格挡是否判定成功都会生效,如穿透攻击等。 5.6 如果格挡类效果触发成功,则判定ResultFlag_Hit=false,即跳过伤害结算。 PS:从系统的角度来看,所有单独的投射物都可以格挡,但是某些投射物即使能够格挡也会造成伤害,因为SrvHitFunc和SrvDmgFunc的检测发生在格挡判定之前。
首页 1 2 3 下一页