英魂之刃吧 关注:834,185贴子:26,919,079
  • 39回复贴,共1

护甲/防御——减免,底层逻辑

只看楼主收藏回复


先看程序代码逻辑:
防御(护甲)≥0
减免=Math.floor(防御*0.01/(1+0.01*防御)*100)
防御<0
减免=
-Math.floor((1-Math.pow(0.99,Math.abs(防御)))*100)
代码逻辑解读:
Math.floor()表示只取整数
Math.pow()表示前一个作为底数,后一个为底数的次方
上面就是以0.99作为底数,Math.abs(防御)作为次方
Math.abs()表示括号里取绝对值部分
//这里减免算到最后,减免不带百分号(%),因为在编程语言中,%有着其他作用,会产生歧义而导致运行错误
最后只要在伤害运算时加上*0.01就行。
因此,在下面的式子中我会调和出一个百分比,便于语言表述。
基于程序逻辑转换成人话:
护甲防御大于0,减免=防御/(防御+100)
小于0,-减免=1-0.99的防御数值的绝对值次方

这个大家都说烂了,懂的都懂

这里18取的是护甲绝对值,0.99^18这里算出来的所有小数是保留的,到了整个式子最后再只保留两位小数。
因为要方便理解,又要保证精准,所以式子取小数部分作了一点调整。
.
装备延展:
幽冥刺等直接做加加减减就行了,面板也会显示。
--
破山锥等穿透
代码逻辑为
实际伤害 = “破甲伤” + (1 - 减免 * 0.01) * (面板伤害 - “破甲伤”)
上面这个“减免”并没有按照我们转换成人话的描述,而是延续原先的代码逻辑,而原先不能带百分号,所以加上了*0.01。
我们下面说的减免是带有百分号的,并解读一下上面的程序含义
实际伤害=无视减免的这部分伤害+(1-减免)×(面板伤害-无视减免的这部分伤害)
无视减免的这部分伤害=面板伤害×无视减免百分比
//这里说的很绕,但为了避免陷入语言误区、为了更精准,不得已的操作,下面听我娓娓道来。
.
玩家对这类装备特性,大致有这三种不同描述,百分比减甲、百分比无视防御以及有部分伤害为百分比真伤,但都有谬误或者不直观。
因为不管是百分比减甲还是百分比无视防御,它们都是在与防御挂钩,然而我们参与伤害的一系列换算最后还是代入减免,那么严格来讲,它是在和减免挂钩。如果非要认为防御就是减免,那为啥1防御≠1减免,或者为啥1防御≠1%减免?
所以更为精准和直观的描述为,无视减免百分比,即破山锥无视敌方32%的物理减免。
例如,敌方50%减免,如果自身持破山锥32%无视减免,即32%×50%减免=16%减免被无视。那么在这个情况下打出的物伤,对面实则只有34%免伤。
.
//来个实际案例剖析:



这个白袍43护甲,则减免为30%
出了破山锥,Q面板伤害为150的情况下,打了白袍119的实际伤害
按照一般的算法
实际伤害=150×32%+(1-30%)×(150-150×32%)=119
这样固然是正确的
//但更为方便的是,我们直接以破山锥无视敌方32%的物理减免为基准,而不是“无视防御”
白袍30%减免,无视掉32%,即32%×30%=9.6%,那么还有20.4%减免,150×(1-20.4%)=119
(这里不保留小数的情况只有在护甲转化为减免的时候,其他情况是保留的,因为程序里Math.floor就是取整呀)
//所以之后看待破山锥,视作为无视敌方32%的物理减免就行了,也可以说降低敌方已有减免的32%


IP属地:陕西1楼2024-03-22 21:48回复
    无视32%减免,直接视为0.68×原有减免更直白。


    IP属地:陕西2楼2024-03-22 22:02
    回复
      nb


      IP属地:河北来自Android客户端3楼2024-03-22 22:09
      回复
        厉害 好帖


        IP属地:安徽来自Android客户端4楼2024-03-22 22:54
        回复
          看立了


          IP属地:江苏来自Android客户端5楼2024-03-22 23:05
          收起回复
            看不懂


            IP属地:广西来自Android客户端6楼2024-03-22 23:24
            回复
              还有个单独纳入计算的 东方w


              IP属地:四川来自Android客户端7楼2024-03-23 01:10
              收起回复
                出就对了


                IP属地:浙江来自iPhone客户端8楼2024-03-23 03:09
                回复
                  我以为是破山把百分之32的物理伤害转化为真实伤害


                  IP属地:新疆来自Android客户端9楼2024-03-23 10:34
                  回复
                    太深奥了,但是我想请教一个困扰多年的问题,血刀和幽冥刺,老是有人说幽冥刺不如血刀,虽然攻击方面血刀更高,但是幽冥刺降低的防御力是不是也会同时降低对面物理减伤?那不是幽冥刺伤害加成要高于血刀吗?


                    IP属地:四川来自Android客户端10楼2024-03-23 11:12
                    收起回复
                      也就是说破山对五彩的伤害减免没有效果?以前以为是类似转化成物理性质的真伤,因为有没有破山打五彩伤害差距太大


                      IP属地:四川来自Android客户端11楼2024-03-23 13:32
                      收起回复
                        下期算泉水的真实伤害(这个很有意思,明明是真实伤害,却会因为目标的防御而降低伤害)


                        IP属地:广东来自Android客户端12楼2024-03-23 18:59
                        收起回复
                          超械护甲四倍,幽冥刺减护甲也是4倍,但到了负护甲阶段也是减四倍护甲吗?
                          除此之外那英魂能够实现的最低护甲是多少,能够加成多少
                          至于你那破山锥的解释,其实是多此一举,只是数学上的变式,你和他说破山出了32%是类似真伤,无视全部护甲更好理解。因为这是大众朴素公认的认知,多生出概念容易出现帖子说的看不懂情况
                          计算公式。伤害*0.32+(0.68*50%)*伤害,0.68*50%就是你说的34,你直接说还有一部分伤害直接*0.32就是出了破山能类似真伤的意思


                          IP属地:江西13楼2024-03-24 16:45
                          收起回复
                            无视护甲在英魂出歧义的原因是因为lol,我没玩过lol
                            但我听过,他们护甲公式也是x/(x+100),但他们的穿甲是无视掉基础护甲,而不是英魂的无视减免。
                            假如lol有100护甲,50%减免,你有32%护甲穿透,那就是无视他32护甲,他还有68护甲,但是减免还有68/168=40.4%
                            而我们英魂却能打到34%,这就是差距,假如lol和英魂都有1万护甲的英雄,那就是英魂能打死而lol出了穿甲也没伤害。
                            所以英魂解释破山一定要用类似真伤来解释


                            IP属地:江西14楼2024-03-24 17:03
                            收起回复
                              我一直这么觉得的,破山你有一百攻击,先打真伤32,其他68攻击按照对面护甲算减免


                              IP属地:广西来自Android客户端15楼2024-08-12 03:54
                              回复