//没登陆

欢迎您来到凯恩之角,奈非天!

帖子:1131

符文:2652

跳转到指定楼层
1#
发表于 2021-3-12 21:15:50 |只看该作者 |倒序浏览 来自:辽宁
解析者: Myrdinn
译注者: Louis-J

原作者:悄然花开
原帖地址

帖子:1131

符文:2652

2#
本帖最后由 等风来Lietome 于 2021-3-12 21:18 编辑

前言:Tohit Functions(v1.11),是Myrdinn于2005年8月在v1.11刚升级时通过对汇编程序的hardcoded解析而完成的,之所以没有第一时间编译过来,是因为之前Tommi Gustafsson编撰的To Hit Calculations(v1.10) 已经很全面了,且v1.11除了在个别程序段有些小变动外,基本没有什么改变。
昨天又翻了下,发现其中有些小改变还是很有趣的(哪些小地方改变了,大家自己看下去发现-o-),且有些地方很有测试的价值。当然,对想了解Tohit具体流程的玩家来说,也有一定的参考价值。
Myrdinn在几个英文/法文网站发这个帖子时,并没有给出程序段而是直接给出了解析结果,而我找不到这个Functions的地址具体在哪,所以没能更深入地了解具体的运行。
带*的基本都是我加的注释,难免有疏漏或错误的地方。

1) Defence Rating(DR): 防御值

1a) 玩家
DR1 = [(armorclass+basedefense)+(armorclass+basedefense)×item_armor_percent%]×Armor_override_percent
*armorclass: 装备提供的总防御值
*basedefense: int(Dexterity/4)
*item_armor_percent%: 提升防御值的%,包括各种技能、非防具上的(如武器Ribcracker Quarterstaff上的,技能holyshield、各种冰甲等)
*Armor_override_percent: =0,特指Bar的Berserk技能

DR2 = DR1 + Def Vs Missile,Def Vs Melee
*可以看到,如果在使用Berserk技能时,如果装备提供Def Vs Missile或Def Vs Melee,此时的防御值并不是我们所想象的那样为0。

Myrdinn没有给出Monster的DR解析,不过,我相信大家都知道具体的计算过程,下面仅给出简单的公式。

1b) 怪物
DR2 = AC_MonStats.txt×AC%_MonLvl.txt×(1+Other%)
*other%: 如Stone Skin属性

1c) 佣兵
DR2 = [Defense + int[△Hlvl×(Def/Lvl)] + int(Dexterity/4) + Item_Defense]×(1+Other%)
*Defense: 基础等级的防御值(CF Hireling.txt)
*△Hlvl: 与基础等级的等级差
*Def/Lvl: 防御/等级因子(CF Hireling.txt)
*Dexterity: 敏捷,包括自身和装备提供的
*Item_Defense: 装备提供的防御
*Other%: 非装备提供的防御%

1d) 玩家的各种Minion
可以从Skills.txt,MonStats.txt中得到各种Minion的具体防御值,当然如女武神、影子等可以通过装备/技能(如Shadow使用魔影斗篷)得到提升,不一一赘述。

2) Attack Rating: 攻击准确率

2a) 玩家

①AR1 = Dexterity×5 + Tohit - (35) + ToHitFactor(CF Charstats.txt)
*Tohit: 直接加的AR,即+x to attack rating属性

②调用ITD和Fractional Target AC程序段
ITD
仅对怪物有效
如果目标品质 = 0A,则无效
如果目标是eBoss(CF Monstat.txt),则无效
如果目标是佣兵,则无效
*0A的范围不能确定,应该是超级金怪(CF superuniques.txt)和随机金怪以及对冠军级Champion怪物。
*关于ITD的被作用对象,会另文讨论,v1.10时Myrdinn对此做过hardcoded的程序解析,我有空会试着做下v1.11b的解析。

Fractional AC
-Target Defense X%(即如ETH Rune):
如果目标为玩家(可能包括玩家的minions和summoner)、佣兵或者eBoss怪物,则效果减半
上限为100%
DR = DR2 - DR2 × (X/100)
*这里Myrdinn可能漏看了些程序段,如的-def(如Inner Sight,-X to target defense per hit)和-%def(Skill)(如Cloak of Shadows/Battle Cry/Conviction等);
实际计算时-def为: armorclass = armorclass-def
-%def(Skill): armorclass+basedefense = (armorclass+basedefense) - (armorclass+basedefense)×%def(Skill)

Monster Specifics AR%: 对特定怪物的AR%奖励
如果怪物为Demon,则AR%(Skill) = AR%(Skill) + item_demon_tohit
如果怪物为Undead,则AR%(Skill) = AR%(Skill) + item_Undead_tohit
*item_demon_tohit: +X To Attack Rating Against Vs Demon
*item_Undead_tohit: +X To Attack Rating Against Vs Demon
*是的,以上都算AR%,而不是+AR —— 这个测试验证起来比较简单

是否为Attack ranged范围攻击
如果是,则忽略AR%(Mastery)
*AR%(Mastery): Bar的各种武器掌握,Asn的爪掌握
所以如Bar的Double Throw,Asn的Blade Fury/Blade Sentinel不能从其Weapon Mastery上的AR%属性处得到AR%加成 —— 这个我之前在Ranged Attack Skills上的Attack Rating% bonuses中已经做过测试验证

AR% = AR%(Mastery + Skill + item_tohit_percent + attack_vs_montype + item_demon_tohit + item_Undead_tohit)
AR%(Mastery): Bar的各种武器掌握,Asn的爪掌握
AR%(Skill): 技能提供的AR%,如Blessed Aim/Enchant
AR%(item_tohit_percent): 装备提供的AR%
AR%(attack_vs_montype): 对不同怪物类型提升的AR%奖励
AR%(item_demon_tohit): 前面已经解释过
AR%(item_Undead_tohit): 前面已经解释过

2b) 怪物

AR = ToHit + Tohit(Skill) + 5×Dexterity
*ToHit: Monster: TH_MonStats.txt×TH%_MonLvl.txt;
Mercenary: [AR + int[△Hlvl×(AR/Lvl)],CF Hireling.txt;
Play's Minion: CF Skills.txt & MonStats.txt,不一一赘述
*Tohit(Skill): 技能上直接加的AR
*5×Dexterity: 此处应该是指Mercenary(佣兵也属于怪物的一种),Myrdinn认为此处的敏捷是指装备提供的,佣兵自身的敏捷不算在内,但我认为如防御计算一样,自身和装备提供的敏捷都参与计算;
Play's Minion(如Asn的Shadow自身提供的,Shadow/Valkyrie装备提供的)是否能从敏捷上得到加成未能确定 —— 也许需要测试验证,但是忒有难度了

AR% = item_tohit_percent (No Skill Bonus)
*item_tohit_percent: 装备上的AR%,此处应该是指Mercenary、Asn的Shadow、Ama的Valkyrie等
*No skill Bonus: 技能上的AR%,这个有点晕,雇主或结盟成员的技能上(如Blessed Aim/Fanaticism/Heart of Wolverine)提供的AR%对佣兵,Nec的骷髅等都是没有用的?
即便如Duriel的Jab,ACT2 Pet本身的Jab/Blessed Aim都不能得到AR%加成?
怪物自身的Blessed Aim/Fanaticism等特殊属性的AR%也是没作用的?
或者说上面AR中的Tohit(Skill),这个已经是经过AR%(Skill)提升后的AR
——需要做些测试验证

2c) 最终攻击准确率

Final AR = AR + AR×(AR%/100)

3) ToHit Formula: 命中率公式

检测参数
如果DR<0,则AR = AR - DR且DR = 0,*即Tohit% = 2 × [ALVL / (ALVL + DLVL)] × 100
如果AR<0,则DR = DR - AR且AR = 0,*即命中率为下限5%
如果DR<0,则AR = AR - DR(如果AR和DR都<0,将进行二次检测),*即Tohit% = 2 × [ALVL / (ALVL + DLVL)] × 100
*如检测到防守者为Running状态,则跳过ToHit%程序,即100%命中。

命中率公式
Tohit% = 2 × [ALVL / (ALVL + DLVL)] × 100 × [AR / (AR + DR)]
ALVL: 攻击者等级
DLVL: 防守者等级
AR: 攻击者的最终攻击准确率
DR: 防守者的最终防御值
命中率下限为5%,上限为95%

击中后
攻击者调用PMH子程序段
防守者调用Block/Evade等子程序段
发表于 2021-3-12 21:16:20 |只看该作者 来自:辽宁
头像被屏蔽

帖子:76

符文:2

3#
版主辛苦了
发表于 2021-9-2 23:02:29 |只看该作者 来自:北京
头像被屏蔽

帖子:4364

符文:492

4#
主楼斑竹的头像被屏蔽是什么鬼
发表于 2021-9-8 17:25:51 |只看该作者 来自:北京
签名被屏蔽

帖子:45

符文:0

5#
学习了,版主也太有钻研精神了
发表于 2022-12-26 03:59:28 |只看该作者 来自:英国
您需要登录后才可以回帖 登录 | 注册网易通行证