dnf手游吧 关注:1,223,194贴子:14,150,223

[装备对比测试 - 第一弹] 装备 + 首饰对比

只看楼主收藏回复

首先鸣谢 @W小火鸡W 给我提供的脚本, 我作为开发所以用自己觉得舒服的方式简单封装了下但是初期的大部分复杂的东西都是直接 ctrl + c/v 的, 比如各种基础数据以及不算太复杂的计算逻辑
上来就先贴结果吧


然后是对于计算过程的一些具体情况的答疑和部分特殊情况的说明
1. 真理套不考虑纳入计算, 计算太麻烦脑子抽抽想不出来怎么写
2. 所有的属强都是按照全属性来考虑. 因此火套搭配纯粹这种属性不对应的情况我直接排除了
3. 安魂套以及部分存在技能加成的计算我是粗略的按照对应加成技能伤害占比来测算的最终加成, 可能不准但是不会差距太大, 但是对于不同职业可能会有一定的区别. 比如 45+1 我视为最终 * 1.04, 部分职业 45 伤害占比很高的时候会有不符合这个系数
对于部分有能力的伙计, 比如程序员或者大学生可以自行调试如果没有这方面的能力也想做一下测试, 其实也没关系, 会不会都影响不大为了方便大家自行计算, 我专门将脚本和数据封装在一起. 脚本贡献出来你们可以自己改改看, 哪怕看不懂代码也没关系(我加了足够多的注释, 基本看的懂大概). 只需要将代码复制到任何一个在线编辑器(百度 python 在线编辑器) 中执行就可以得到结果针对不同基础可以自行调整代码中的原始信息,. 从而满足自己的真实情对于在线解释器的使用, 可以参考我这个图片的指引

对于代码中的细节和计算公式我会在下面看有需要的话详细说明


IP属地:广东1楼2023-08-04 18:48回复
    # 武器数据库, 懒得写了
    WEAPON_DB = {}
    # 装备数据库
    """
    安魂
    25-45技能 +3(每集算作0.8整体提升),
    1.5cd左右 50重置, 即放两次技能必然可以放得出第三次技能, 两个单位时间内可以放出三倍伤害. 即一单位时间内1.5倍伤害,
    考虑还有觉醒和 7065技能的存在, 25-45的伤害占比大概在70, 再 * 0.7
    考虑实战不可能完全理想按的出所有技能 * 0.8
    坠落
    v10技能 +4(每级算作0.0125整体提升),
    lv25技能 +2(每级算作0.02整体提升)
    深海
    lv45技能 +1(每级算作0.025整体提升),
    """
    EQUIP_DB = {
    "纯粹": {"属强": 110, "攻击": 50, "力智系数": 0.02, "属白": 0.1, "减防": 1.074, "暴击值": 80},
    "鬼面": {"黄字": 0.32, "攻击系数": 0.62, "技伤": 1.15 * 1.13, "白字": 0.12},
    "冥火": {"属强": 100, "技伤": 1.12 * 1.09, "属白": 0.3, "白字": 0.1, "攻击系数": 0.12},
    "黑暗": {"属强": 115, "黄字": 0.35, "技伤": 1.1 * 1.09, "攻击": 100, "属白": 0.05},
    "坚定": {"属强": 35, "白字": 0.50, "技伤": 1.26, "攻击系数": 0.17, "属白": 0.05, "黄字": 0.07, "力智系数": 0.1, "爆伤": 0.1, "暴击值": 100},
    "幽魂": {"属强": 120, "黄字": 0.05, "爆伤": 0.2, "技伤": 1.1 * 1.05, "属白": 0.2, "暴击值": 70, "力智": 50, "攻击": 50},
    "恶魔": {"力智系数": 0.34, "攻击系数": 0.24, "技伤": 1.15 * 1.13, "白字": 0.4},
    "虚空": {"属强": 50, "攻击系数": 0.1, "力智系数": 0.1, "技伤": 1.1 * 1.27, "黄字": 0.3, "暴击值": 80, "爆伤": 0.15},
    "坠落": {"属强": 50, "黄字": 0.18, "技伤": 1.12 * 1.14, "属白": 0.1, "暴击值": 200, "白字": 0.1, "其他暂定": 1.06 * 1.04},
    "天狼": {"爆伤": 0.12, "力智": 132, "白字": 0.25, "技伤": 1.28, "减防": 1.248, "攻击系数": 0.06, "力智系数": 0.06, "黄字": 0.06},
    "沉默": {"力智系数": 0.30, "攻击系数": 0.10, "白字": 0.26, "技伤": 1.19, "黄字": 0.25, "暴击值": 300, "减防": 1.048},
    "深海": {"属强": 65, "技伤": 1.15 * 1.07, "属白": 0.1, "攻击系数": 0.4, "暴击值": 100, "力智系数": 0.08, "其他暂定": 1.02},
    "黑洞": {"白字": 0.58, "技伤": 1.22 * 1.13, "暴击值": 100, "力智系数": 0.07, "黄字": 0.13, "攻击系数": 0.2},
    "安魂": {"属强": 75, "攻击系数": 0.15, "cd": 10, "白字": 0.15, "技伤": 1.27, "其他暂定": 1.24 * 1.5 * 0.7 * 0.8}
    }
    # 首饰数据库
    JEWELRY_DB = {
    "暗杀": {"技伤": 1.32, "黄字": 0.125, "暴击值": 130, "力智系数": 0.03, "爆伤": 0.125},
    "火套": {"属强": 39, "技伤": 1.11, "属白": 0.15, "爆伤": 0.14, "黄字": 0.09},
    "明星": {"属强": 36, "技伤": 1.11, "属白": 0.24, },
    "精炼": {"技伤": 1.07 * 1.05 * 1.05, "黄字": 0.10, "暴击值": 130, "力智系数": 0.06, "白字": 0.23, "属强": 26}
    }


    IP属地:广东2楼2023-08-04 18:50
    回复
      class CalDnf(object):
      def __init__(self, power=None, attack=None, attribute_strengthen=None,
      yellow=None, white=None, reduce_defense=None, skill_damage=None,
      critical=None, critical_value=None, critical_damage=None, has_pearl=True):
      # 基础力智
      self.base_power = power or 3800
      # 基础攻击
      self.base_attack = attack or 2200
      # 基础属强 基础29 + 工会16 + 三张16 + 宠物22+ 武器10 + 5级徽章*2
      self.base_attribute_strengthen = attribute_strengthen or 153
      # 基础黄字
      self.base_yellow = yellow or 0.21 # 称号(15) + 武器宝珠(6)
      # 基础白字
      self.base_white = white or 0.24 # 赛利亚(21) + 雷龙(3)
      # 基础减防
      self.base_reduce_defense = reduce_defense or 0
      # 基础技伤
      self.base_skill_damage = skill_damage or 0.2
      # 基础暴击率
      self.base_critical = critical or 0.15
      # 基础暴击值
      self.base_critical_value = critical_value or 1000
      # 基础暴伤
      self.base_critical_damage = critical_damage or 1.5
      # 有宝珠的情况下多加黄字 0.05
      if has_pearl:
      self.base_white += 0.05
      # 最终测算结果
      self.result = []
      def cal_compose(self):
      for equip, equip_info in EQUIP_DB.items():
      for jewelry, jewelry_info in JEWELRY_DB.items():
      # 火套不会跟光以及暗的套装搭配. 直接忽略
      if jewelry == "火套":
      if equip in ["幽魂", "纯粹"]:
      continue
      power = 0
      attack = 0
      power_rate = 0
      attack_rate = 0
      yellow = 0
      white = 0
      attribute_strengthen = 0
      attribute_strengthen_yellow_rate = 0
      attribute_strengthen_white_rate = 0
      reduce_defense = 0
      skill_damage = 0
      critical = 0
      critical_value = 0
      critical_damage = 0
      other = 0
      for each in [equip_info, jewelry_info]:
      power += each.get("力智", 0)
      attack += each.get("攻击", 0)
      power_rate += each.get("力智系数", 0)
      attack_rate += each.get("攻击系数", 0)
      yellow += each.get("黄字", 0)
      white += each.get("白字", 0)
      attribute_strengthen += each.get("属强", 0)
      attribute_strengthen_white_rate += each.get("属白", 0)
      attribute_strengthen_yellow_rate += each.get("属黄", 0)
      reduce_defense += each.get("减防", 0)
      skill_damage += each.get("技伤", 0)
      critical += each.get("暴击率", 0)
      critical_value += each.get("暴击值", 0)
      critical_damage += each.get("爆伤", 0)
      other += each.get("其他暂定", 0)
      self.result.append(self.cal_main(power, attack, power_rate, attack_rate,
      attribute_strengthen, yellow,
      attribute_strengthen_yellow_rate, white,
      attribute_strengthen_white_rate,
      reduce_defense, skill_damage, critical,
      critical_value, critical_damage,
      other, f"{equip} + {jewelry}"))
      # 计算主逻辑
      @staticmethod
      def show_num(num, length=5):
      show_v = "%.2f" % float(num)
      while len(show_v) < length:
      show_v += " "
      return show_v
      def cal_main(self, power, attack, power_rate, attack_rate, attribute_strengthen, yellow,
      attribute_strengthen_yellow_rate, white, attribute_strengthen_white_rate, reduce_defense,
      skill_damage, critical, critical_value, critical_damage, other, show_name):
      # ----------------- 面板信息 -----------------
      panel_power = self.base_power + power # 力智
      panel_attack = (self.base_attack + attack) * (1 + attack_rate) * (1 + panel_power / 250) # 攻击
      panel_critical_value = self.base_critical_value + critical_value # 暴击值
      panel_critical = self.base_critical + critical + panel_critical_value / 25.3 / 100 # 暴击率
      panel_critical_damage = self.base_critical_damage + critical_damage # 暴击伤害
      panel_attribute_strengthen = self.base_attribute_strengthen + attribute_strengthen # 属强
      # ----------------- 加成系数 -----------------
      power_rate = power_rate # 力智百分比增加
      attack_rate = attack_rate # 攻击百分比增加
      yellow_rate = self.base_yellow + yellow # 黄字百分比增加
      white_rate = self.base_white + white # 白字百分比增加
      attribute_strengthen_yellow_rate = attribute_strengthen_yellow_rate # 属黄百分比增加
      attribute_strengthen_white_rate = attribute_strengthen_white_rate # 属白百分比增加
      skill_damage_rate = self.base_skill_damage + skill_damage # 技工增加 (装备间乘算后, 于技能加算)
      reduce_defense_rate = self.base_reduce_defense + reduce_defense # 减防转换为最终伤害系数
      other = other # 其他暂定的调整系数
      # ----------------- 暂存常数系数 -----------------
      critical_desire = panel_critical * panel_critical_damage + (1 - panel_critical)
      yellow = attribute_strengthen_yellow_rate * (1 + panel_attribute_strengthen / 220) + yellow_rate + 1
      white = attribute_strengthen_white_rate * (1 + panel_attribute_strengthen / 220) + white_rate + 1
      return {
      "组合": show_name,
      "力智": panel_power,
      "攻击": self.show_num(panel_attack, 3),
      "属强": self.show_num(panel_attribute_strengthen, 3),
      "暴击": self.show_num(panel_critical, 3),
      "暴伤": self.show_num(panel_critical_damage, 3),
      "暴击期望": self.show_num(critical_desire, 3),
      "其他加成": self.show_num(other, 3),
      "力智系数": self.show_num(power_rate, 3),
      "攻击系数": self.show_num(0.05 + attack_rate, 3),
      "黄字": self.show_num(yellow, 3),
      "白字": self.show_num(white, 3),
      "技伤": self.show_num(skill_damage_rate, 3),
      "减防": self.show_num(reduce_defense_rate, 3),
      "强度": self.show_num(panel_attack * yellow * white * critical_desire * (
      1 + panel_attribute_strengthen / 220) * skill_damage_rate * 1 or other, 11),
      }
      def run(self):
      self.cal_compose()
      print(" --------------------------- 基础信息 --------------------------- ")
      print(f"属强:{self.base_attribute_strengthen} "
      f"| 黄字:{self.base_yellow} "
      f"| 白字:{self.base_white} "
      f"| 力智:{self.base_power} "
      f"| 攻击:{self.base_attack} "
      f"| 暴击率:{self.base_critical} "
      f"| 暴击值:{self.base_critical_value} "
      f"| 暴伤:{self.base_critical_damage} "
      f"| 技伤:{self.base_skill_damage} "
      f"| 减防:{self.base_reduce_defense} ")
      print(" --------------------------- 排名信息 --------------------------- ")
      c = 1
      for i in sorted(self.result, key=lambda x: float(x["强度"]), reverse=True):
      print(f"{str(c) if len(str(c)) ==2 else '0'+str(c)} {i['组合']} -- 强度:{i['强度']} "
      f"| 属强:{i['属强']} "
      f"| 黄字:{i['黄字']} "
      f"| 白字:{i['白字']} "
      f"| 力智:{i['力智']} "
      f"| 力智系数:{i['力智系数']} "
      f"| 攻击:{i['攻击']} "
      f"| 攻击系数:{i['攻击系数']} "
      f"| 暴击:{i['暴击']} "
      f"| 暴伤:{i['暴伤']} "
      f"| 暴击期望:{i['暴击期望']} "
      f"| 技伤:{i['技伤']} "
      f"| 减防:{i['减防']} "
      f"| 其他加成:{i['其他加成']}")
      c += 1
      if __name__ == '__main__':
      cal = CalDnf()
      cal.run()


      IP属地:广东3楼2023-08-04 18:50
      回复
        猜得到代码会失去格式, 不过没影响。 随便就能还原了。 或者 在这里我博客里面看也行
        https://www.cnblogs.com/shijieli/p/17606774.html


        IP属地:广东4楼2023-08-04 18:53
        回复
          因为是临时没多久写出来的。 所以可能有bug或者不对的地方。 有兴趣的可以帮我指出。 以及后续看有没有心情加上武器和辅助的搭配


          IP属地:广东5楼2023-08-04 18:54
          回复
            感谢楼主👍🏻


            来自Android客户端6楼2023-08-04 18:56
            回复
              顶个贴


              IP属地:江苏来自Android客户端7楼2023-08-04 18:58
              回复
                牛逼


                IP属地:贵州来自Android客户端8楼2023-08-04 18:59
                回复
                  太硬核了


                  IP属地:广东来自Android客户端9楼2023-08-04 19:00
                  回复
                    火鸡佬今天没空估计. 下班了估计也没法改代码了. 我感觉肯定有点问题的, 等火鸡佬整完估计会再发一个完整的. 后续就可以长期维护下去了. 我也下班了. 要改也要等下周上班摸鱼的时候再改了~~~~~~


                    IP属地:广东10楼2023-08-04 19:03
                    回复
                      牛的


                      IP属地:江苏来自Android客户端11楼2023-08-04 19:07
                      回复
                        大佬牛🍺。


                        IP属地:山东来自Android客户端12楼2023-08-04 19:09
                        回复
                          虚空现在这么拉吗


                          IP属地:湖北来自Android客户端13楼2023-08-04 19:16
                          收起回复
                            有些东西不好评价,比如减cd,伪装,霸体,这些都是影响实战体验的,还有一些几率性的比如灼烧,还有控蓝的,这些单看属性的话不好评价


                            星座王
                            点亮12星座印记,去领取
                            活动截止:2100-01-01
                            去徽章馆》
                            IP属地:广东来自Android客户端14楼2023-08-04 19:18
                            回复
                              我只能说666


                              IP属地:广东来自iPhone客户端15楼2023-08-04 19:34
                              回复