Asteor
  • 主页
  • 战斗和装备
    • 属性
    • 技能
    • 伤害计算
  • 副本
    • 副本
    • 副本列表
      • 松果村
      • 鹦鹉镇
      • 紫绒球城
      • 混沌地牢
  • 装备列表
    • 武器
    • 防具
    • 饰品
  • 杂项
    • 禁止事项
由 GitBook 提供支持
在本页
  • 伤害上下文
  • 通用攻击计算流程
  • 通用防御计算流程
  • 普通攻击计算流程
  • 技能伤害计算流程
  • 持续伤害计算流程
  • 环境伤害计算流程
  1. 战斗和装备

伤害计算

伤害计算流程由多个步骤组成,不同的伤害计算方式彼此之间共享一部分计算流程,因此在这里只列出各个计算流程块。

伤害上下文

用于记录这一伤害的特殊属性,在伤害计算开始前创建一个上下文实例,并在不同的计算流程块间传递,包括:

  • 伤害来源/持续伤害来源

  • 伤害目标

  • 伤害类型

  • 是否为普攻

  • 是否为技能

  • 是否为持续伤害

  • 是否为连击伤害

  • 是否为弹射物

  • 是否忽略护盾

  • 是否为真实伤害

  • 是否暴击

通用攻击计算流程

进入流程时,需要包含:伤害上下文,原始伤害值。

  1. 定义伤害值Damage(DMG)为原始伤害值。

  2. 根据伤害类型,决定增幅伤害的属性Bonus(BNS)。

    1. 如果是物理伤害,使用力量作为增幅,BNS=Strength(STR)。

    2. 如果是法术伤害,使用智慧作为增幅,BNS=Intelligence(INT)。

    3. 如果是剧烈伤害,使用烈性作为增幅,BNS=Ferocity(FER)。

    4. 否则,BNS=0,此情况通常不会发生。

  3. 如果攻击方是玩家,触发攻击前被动技能。

  4. 如果攻击方是玩家,计算暴击增幅。

    1. 获取暴击率CriticalChance(CRC)。

    2. 如果触发暴击,触发暴击/普攻暴击/技能暴击被动技能,获取暴击伤害CriticalDamage(CRD)。

    3. 使用暴击伤害增幅伤害DMG=DMG×(1+CRD)。

  5. 获取攻击方的穿透Penetrate(PEN)、攻击强度AttackForce(ATF)、伤害加成DamageMultiplier(DM)、额外伤害ExtraDamage(ED) 、护盾伤害加成ArmorDamageMultiplier(ADM)、护盾穿透率ArmorPenetrateRate(APR)。

  6. 判断攻击方是否具有力量效果,根据力量效果等级LVL增幅伤害加成DM=0.15×LVL,即每一级可以使伤害加成增加15%。

  7. 判定攻击方是否具有虚弱效果,根据虚弱效果等级LVL修正伤害DMG=DMG×(0.8^LVL),即每一级可以使伤害减少为上一级的80%。

  8. 计算伤害DMG=(DMG×(1+BNS)+ED)×(1+DM)。

通用防御计算流程

进入流程时,需要包含:伤害上下文,伤害值DMG,穿透PEN,攻击强度ATF,护盾伤害加成ADM,护盾穿透率APR。后4个参数不存在时,视为0。

  1. 触发防御前伤害事件。

  2. 使用防御方易伤增幅伤害。

    1. 获取防御方易伤Fragile(FG)。

    2. 如果防御方具有不幸效果,根据不幸效果等级LVL修正易伤FG=FG+0.1×LVL,即每一级可以使易伤增加10%。

    3. 计算易伤增幅伤害DMG=DMG×(1+FG)

  3. 获取防御方的防御力Defense(DEF)、防御强度DefenseForce(DFC)、护盾强度ArmorToughness(ART)。

  4. 根据伤害类型,获取防御方的对应防御属性增幅Bonus(BNS)。

    1. 如果是物理伤害,使用物理防御作为增幅,BNS=(PhysicalDefenseBonus)PDE。

    2. 如果是法术伤害,使用法术防御作为增幅,BNS=(MagicalDefenseBonus)MDE。

    3. 如果是剧烈伤害,使用剧烈防御作为增幅,BNS=(ViolentDefenseBonus)VDE。

    4. 否则,BNS=0,此情况通常不会发生。

    5. 增幅防御力DEF=DEF×(1+BNS)

  5. 使用伤害减免降低伤害。

    1. 计算等效减免比例。

      1. 获取伤害减免DamageAbsorb(DA)。

      2. 如果DA<=0.5,等效减免比例Rate=DA。

      3. 如果DA>0.5,等效减免比例Rate=DA/(DA+0.5)。

    2. 计算减免伤害DMG=DMG×(1-Rate)。

  6. 计算穿透百分比效率PenetrateRate(PEN_R)=PEN/(PEN+150)。

  7. 计算攻击强度百分比效率AttackForceRate(ATF_R)=ATF/(ATF+150+DFC)。

  8. 使用穿透和攻击强度降低防御力,计算防御力减伤系数DefenseFactor(DF)。

    1. DEF=DEF×(1-ATF_R)

    2. DF=(DEF-PEN)/(DEF+150×(1-PEN_R))。

    [!] 可能改动 思考: 穿透是否需要降低防御力减伤系数计算过程中分母中的常数项? 可能的计算方式改动: DF=(DEF-PEN)/(DEF-PEN+150)。可能引起的问题:DEF-PEN可能为负数,引起意外。

  9. 如果不是真实伤害,使用防御力减伤系数降低伤害DMG=DMG×(1-DF)。

  10. 如果是真实伤害或忽略护盾,直接返回伤害值DMG。

  11. 使用攻击强度比例降低护盾强度ART=ART-ATF_R×0.8。

  12. 获取防御方当前护盾值Armor(AR)。

  13. 计算等效护盾值EqualArmor(EAR)=AR×(1+ART)。

  14. 分配伤害到护盾和生命值。

    1. 本次伤害能够对护盾造成的最大伤害MaxDamageOnArmor=DMG×(1+ADM) ,实际造成的伤害ExactDamageOnArmor=Min(EAR, MaxDamageOnArmor)。

    2. 计算对护盾造成伤害所消耗的原始伤害RawDamageOnArmor=ExactDamageOnArmor/(1+ADM)。

    3. 修正对护盾造成的伤害DamageOnArmor=ExactDamageOnArmor/(1+ART)。

    4. 使用护盾抵消伤害Damage=Damage-RawDamageOnArmor。

    5. 计算穿透护盾的伤害Damage=Damage+RawDamageOnArmor×APR。

  15. 如果护盾被击破,触发攻击方的破盾被动和防御方的盾破被动。

  16. 触发防御后伤害事件。

  17. 返回最终伤害值Damage。

普通攻击计算流程

  1. 创建伤害上下文。

  2. 如果攻击方是弹射物或召唤物,重定向攻击方为其源头。

  3. 如果攻击不是连击,判断伤害间隔,若间隔过短,伤害计算结束,攻击被取消。

  4. 如果攻击由不同的攻击方发起,且距离上一次伤害的时间小于伤害间隔,本次攻击无法造成击退。

  5. 如果攻击方有失明效果,每一级有1/3的概率使攻击无法命中,若本次攻击未命中,伤害计算结束。

  6. 如果攻击方的伤害能够闪避,获取闪避率DodgeRate(DOD),并判定是否闪避,闪避成功时触发闪避被动,并结束伤害计算。

  7. 定义伤害总倍率OverallMultiplier(OM)为1。

  8. 如果攻击方主手持弓或弩造成近战伤害,OM=0.5。

  9. 如果攻击方造成了弹射物伤害,根据主副手实际持有的武器类型,调整本次伤害使用的主副手。

  10. 获取攻击方的攻击力AttackDamage(ATK)和攻击速度AttackSpeed(ATS)。

  11. 使用伤害总倍率OM修正伤害DMG=DMG×OM。

  12. 延迟,等待实际攻击发生。

  13. 如果攻击不是连击,计算连击发生概率BonusAttackRate(BAR)。

    1. 如果ATS<0.5,BAR=ATS。

    2. 如果ATS≥0.5,BAR=ATS/(ATS+0.5)。

  14. 如果攻击方是玩家,触发攻击后被动技能。

技能伤害计算流程

  1. 创建伤害上下文。

  2. 如果此次技能伤害允许被闪避,获取闪避率DodgeRate(DOD),并判定是否闪避,闪避成功时触发闪避被动,并结束伤害计算。

  3. 调整本体伤害使用的主副手为主手。

  4. 获取攻击方的攻击速度AttackSpeed(ATS),获取初始伤害DMG。

  5. 如果防御方正在使用盾牌格挡,使盾牌格挡失效。

  6. 延迟,等待实际攻击发生。

  7. 如果攻击不是连击,计算连击发生概率BonusAttackRate(BAR)。技能的连击率修正为0.5,因此计算开始前,ATS会被减半。

    1. 如果ATS<0.5,BAR=ATS。

    2. 如果ATS≥0.5,BAR=ATS/(ATS+0.5)。

  8. 如果攻击方是玩家,触发攻击后被动技能。

持续伤害计算流程

  1. 创建伤害上下文。

  2. 获取持续伤害的单次伤害值DMG。

  3. 造成持续伤害,无视绝大部分取消条件。

环境伤害计算流程

  1. 创建伤害上下文。

  2. 根据环境伤害类型,获取伤害值DMG和伤害类型DTYPE,定义是否无视护盾或是否为真实伤害。

上一页技能下一页副本

最后更新于3个月前

进入,携带参数:伤害上下文,伤害值DMG,穿透PEN,攻击强度ATF,护盾伤害加成ADM ,护盾穿透率APR,并得到最终伤害DMG。

如果无法定位到攻击方的位置,使用原始伤害作为DMG,并提前进入(跳过后续2步),得到最终伤害DMG。

进入,得到最终伤害DMG。

如果连击发生,触发连击被动,重新进入,额外造成一次伤害,无视绝大部分取消条件。

进入,得到最终伤害DMG。

如果连击发生,触发连击被动,重新进入,额外造成一次伤害,无视绝大部分取消条件。

进入,得到最终伤害DMG,无法造成暴击。

将部分环境伤害转化为持续伤害,进入,并结束伤害计算。

进入,得到最终伤害DMG。

防御计算流程
攻击计算流程
攻击计算流程
普通攻击计算流程
攻击计算流程
技能伤害计算流程
攻击计算流程
持续伤害计算流程
防御计算流程