等风来Lietome 等风来Lietome
关注数: 450 粉丝数: 1,008 发帖数: 24,733 关注贴吧数: 3
近身技实现远程攻击BUG补充 [BUG实现方法再解释] 在2屏内使用HACKMAP的ScrLK键调到看到对方,或者在能看到对方的地方. 鼠标右键一直点对方 按住shift键 投郑 和近身技都设置在右边 使用投郑 动作没做出来之前切换到近身技能 ok 你会发现这个近身攻击已经实施在远方的敌人身上 [BUG相关的FAQ] 1:部分近身技可以用 lock name后throw切近身技实现远程攻击。(除ama的jab外,必须是有ar的非连续hit近身技)。 BAR的专心和狂战士,狂乱。 AMA的cs和jab。 但是pal的zeal,复仇,smite均没有实现,不然可以用hack将光环切到左键,原地smite任何人。Asn的throw切龙爪失败。BAR切ww失败。连续hit类近身hit技能只有ama的throw切jab成功。 同时 投掷类的翼斧等成为throw切近身技的首要武器。 2:实现远程近身的技能,如果连续点着右键,bug技能会连续使用段时间。 3:实现bug的同时,你的人物坐标其实是默认在对方身旁的,对方做出的任何攻击,你都被判定在攻击范围内,比如对方使用ww,你实现bug的同时也被ww hit。远距离实现bug时被hit死的话,你的尸体会在对方身旁。 因为游戏里怪物只在可见你的时候对你发生攻击,所以使用这样的bug PVM很安全。 而在PVP里,配合AA技能可以实现bug偷袭,但是绝对不能恋战。对有防范的对手来讲作用不是特别大。对手原地进攻就能同样攻击到你。
针对防治BUG蛇和老尼,低配角色安全KN的一些简单方法 最近有人问起关于KN的安全问题,所以我这里就简单说一下,主要针对的是新手玩家。 先说低配的三个关键点: 1. 尽量提高自身生命上限,能BO一下更好。 2. 针对BUG蛇的毒镖,堆40-50DR。 3. 针对老尼的尸爆,堆DR%和火抗。 第1点就不多说了,下面从第2点开始说,DR和DR%字面上区分很明显,一个是数值减少,另一个是百分比,对于BUG蛇的伤害类型(具体原理看全角色技能补遗的毒枪部分),选择前一种直接堆DR是最好的减免手段,40-50DR掌握好节奏基本可以无视毒云了。接下来说第3点,对于老尼的伤害类型(具体原理看全角色技能补遗的尸爆部分),旭日加高物免基本就不怎么怕了,但是最简单的还是使用尸体平静类装备,比如大自然和鸟人甲等,这里我只推荐使用大自然。 下面总结一下简单的人物装备搭配,首先低配角色中首选LSOR打KEY,常规加点 (ES加不加随意)即可,那么大自然这个既有DR又有镇尸效果的装备必选 (所以对于大自然来说DR越高越好),个人不建议选择合成戒指来凑DR,至于米山,眼光是必选的,其他可以考虑物免盔加羊毛衫,镶嵌物随便,12#作为备选,列举一些都是可以很快MF到的常见日用品。 头盔:军帽/永生技能头 项链:永生技能链/马拉/旭日 正手:新月 + 物免盾/基佬盾 副手:CTA+技能盾 衣服:海蛇皮 手套:塔格奥/法拳/卓古拉 戒指:大自然*2/大自然 + 技能戒 腰带:技能腰/物免腰/雪之冲突 鞋子:DRU绿鞋 佣兵:眼光 + 物免盔 + 羊毛衫 包裹比较随意,只要感觉有用的就可以往里面塞,镶嵌物可以备选12#,当然如果凑齐套装也可以换成套装,DR补一下问题不大。 下面列举一些常见的DR来源: 12# (镶防具) : 7DR 永生 (蓝色头环和项链可以出现的后缀) : 10-25DR 刚毅 : 7DR 羊毛衫 : 15-20DR 炎魔皮 : 10-15DR 基佬盾 : 11-16DR 大自然 : 7-11DR
D2中DC6文件的系统介绍 DC6文件是组成暗黑破坏神的一个重要部分.我们在游戏中随处都可见到DC6的身影.游戏的开始菜单,选择角色的聚会画面.人物的各种状态栏,各种的图标和鼠标.最丰富的莫过于装备的显示图像了:大小不已,颜色各异.等等这些都和DC6文件有着密不可分的关系. DC6文件有两种:一是静态的图像文件,另一种就是动态的动画文件.通过工具将DC6文件转换成PCX格式的图片后可以发现:静态的DC6其实就是单一的一张PCX图片;而动态的就是由多幅PCX图片组合而成的.在游戏中的选择人物画面中,燃烧的篝火,不同人物个性鲜明的动作,带给玩家一种身临其境的感受.而游戏中那庞大的装备系统则是静态DC6文件的功劳,千姿百态的装备使得MF的玩家如痴如醉.由于静态动态相结合,使玩家深深感受到了暗黑的博大魅力. 以装备使用的DC6文件为例稍加分析,可以直观的看到DC6文件完善调用的过程. 装备使用的DC6文件有两种: 1.文件名为flp(xxx).DC6 这是装备掉落时的动态动画. 2.文件名为inv(xxx).DC6 这个就是物品栏中显示的装备图像. 装备掉落时,游戏会根据txt文件中每类装备*规定好的flp(xxx).DC6动画来显示这个装备掉落时的动画.在装备被玩家捡起后,又会调用inv(xxx).DC6文件生成在物品栏中的图像. 而在此之前,装备生成时,游戏还会调用Palette文件夹中的6个调色板文件: 1.grey.dat 2.grey2.dat 3.greybrown.dat 4.invgrey.dat 5.invgrey2.dat 6.invgreybrown.dat 使用它们来给装备上色.包括flp(xxx).DC6文件和inv(xxx).DC6文件都会被上色,这样在装备掉落时,捡取后,都会显示出五颜六色的外观形象.在赏心悦目的同时也会给玩家带来新奇的感受. 以上是DC6文件的一般调用过程,而有些DC6文件的调用更加简单,省却了上色这一阶段.例如人物的状态栏,技能图标等等. 每类装备*:每类装备之中又会分为普通/扩展/精华三种档次的装备.但是调用的DC6文件相同.
FZ属性页显示的被怪物击中几率的计算过程 本文由virgol在2008年首发于TTBN。 属性页显示的被怪物击中几率的计算过程 以下所涉及的内容只针对 "怪物攻击你“时 属性页所显示的被怪物击中几率Tohit%,实际攻击调用的是另外的代码(大体相同,但细节上更复杂) Tohit%计算过程资料片和非资料片调用的是同一函数(代码位置D2Client.6FB38A00),而且不是一般的相同 以下是这个函数的主要流程: 1 取人物属性页显示的防御值 DEF1, 取 ARMORCLASS_VS_HTH 值(一般为0) 最终用于计算的防御值 DEF = DEF1 + ARMORCLASS_VS_HTH ; 2 获取怪物AR值,此值先记为 AR_BASE (一个复杂的过程,最终取得的值为各种资料网站上能找到的怪物AR值) 3 将 AR_BASE 转换到用于计算的 AR 判断monstats.txt中某一列的值是否等于1 ,这个列我估计是noRatio,不确定,但比较符合这个 等于1 的情况下 AR = AR_BASE ,跳到第4步 判断是否是资料片,资料片AR = AR_BASE ,跳到第4步 判断是否在普通难度,普通难度AR = AR_BASE ,跳到第4步 不满足上述条件,继续处理 先给出代码的处理方式 AR_BASE×5 ,逻辑左移1位 ,得到值 AR_TMP 让AR_TMP与0x88888889相乘, 取结果的高32位与AR_TMP相加,将结果算术右移3位,得到结果 AR_TMP2 接着还有一步 将AR_TMP2与 AR_TMP2算术右移15位相加 取得最终用于计算的 AR , 因为此步基本对结果没有影响,我们将其忽略 转化为近似的公式: AR = (10*AR_BASE+10*AR_BASE*(-2004318071)/(2^32))/8 ~= AR_BASE×0.667 实际计算过程中除法取整 4 接着就是大家熟悉的Tohit%计算公式,但是原来的取整方式是错的 Tohit% = [ ([ AR*100/(AR+DEF) ] * MLVL *2)/(DLVL+MLVL) ] 其中 DLVL 就是自身的等级 MLVL 是怪物等级 这里MLVL很关键,他是从mpq的monstats.txt中直接获取的!!资料片和非资料片一视同仁 也就是,对于资料片来说,计算Tohit%是忽略场景等级影响的,也忽略金怪带来的奖励等级 对于非资料片,一个72lv的大虫,计算Tohit%是按88lv来算的~~ 同样,第2步取 AR_BASE 的时候也是按monstats.txt中的等级来计算的 5 计算函数上面已经结束,调用后会再将结果限定到 [5 ,95]区间内
关于双持武器BUG的产生的一些问题 首先,下面仅以1.13C版本的BB为例,总结一下双持的工作原理。 对于影响双持的主要因素,大致可以分为三部分: 1.角色的全部物品栏(包括装备和包裹)。 2.标记为激活的active_hand_flag,与next_attack直接挂钩,0x2001代表副手,1代表主手。 3.统计角色active_stats的列表,暂且简写为statstlist,其中包含了角色的大部分属性(但不是全部),比如力量、敏捷、AR%和Min等等,基本上在itemstatcost.txt中都有列出。 ***第一个需要注意的地方:statstlist中会记录大部分装备提供的属性,但不包括非激活手装备的特殊标记,比如损坏的(damagerelated=1),另外武器支配和基础伤害也不会被记录。 当BB切换装备,走出营地或者使用会引起切手的技能(普攻、双挥和狂乱等),会导致statstlist的数据更新,而当BB使用此类攻击时,系统会读取statstlist中的AR,并根据当前激活的武器调用相应的武器支配属性(+AR%),无论攻击是否命中,系统都会将其他的设置为激活武器并更新对应的statstlist。 WW基本也是如此,在刷新statstlist的方式在硬代码方面也是类似的,不过有一点特殊的是,在WW期间,BB的武器挥动方式不同,所以对于武器切换方面的代码也不一样,下面用伪代码来简单描述一下svrdofunc(76)的[D2Game.016B8BE0]工作方式: # svrdofunc 76 ... max_attacks := get_number_attacks() # D2Game.016B6E40 if max_attacks > 0: attacks_done := 0 while attacks_done < max_attacks: ... do_attack() # D2Game.0176E5A0 update_statlist() # D2Game.0176DDE0 toggle_handness_flag() # D2Common.#10137 ... attacks_done := attacks_done + 1 end endif 现在,当理解svrdofunc(76)了之后,继续说回WW,WW的开始阶段,会调用svrstfunc(38)将handness_flag设置为1(即主手),并将定义变量next_attack_frame=0,然后从第4帧开始直到WW结束,每一帧都会调用svrdofunc(76)。 # get_number_attacks(): if next_attack_frame = 0: next_attack_frame := current_game_frame + 4 return 1 else if current_game_frame >= next_attack_frame: next_attack_frame := current_game_frame + delay_frames() if dual_wielding: return 2 else: return 1 endif else: return 0 endif 其中涉及的公式就不在赘述,delay_frames()代表的就是使用激活武器的WIAS和WSM计算得到的delay值, 其中WSM直接调用装备栏数据,而WIAS则是来自之前说过的statlist。 在实际近战过程中,系统会调用一个攻击函数,暂且简写为do_attack(),这个函数会调用statlist中的tohit属性,以及其他涉及的AR相关属性,如果判定为攻击命中,则会产生伤害。 ***第二个需要注意的地方:toggle_handness_flag()的作用是将handness_flag在1和0x2000之间切换,而且每次攻击必定会调用,这里的0x2000代表将原本作为副手的武器设定为当前默认主手武器。 ***第三个需要注意的地方:update_statlist()的作用是如果之前的do_attack()判定为成功命中,那么将会刷新statlist,清除当前激活武器的数据,然后写入其他武器的数据。 ***第四个需要注意的地方:toggle_handness_flag()每一击都会调用,而update_statlist()只有在成功命中之后才会调用。 最后,简单总结一下,如果攻击不论是因为什么原因miss掉,handness_flag会改变而statlist没变,结果就是当你以为BB正在使用主手武器时,实际游戏中的大部分计算过程调用的却是副手武器的数据。换句话来说就是,只有永远不出现MISS的时候,每次攻击才会正确切换激活武器。
首页 1 2 下一页