使命召唤吧 关注:1,184,562贴子:26,786,668

回复:论sbmm改伤论真相

只看楼主收藏回复

命中判定
Hit = Accuracy * (Distance / Weapon.Range)^2
其中Accuracy为玩家当前的射击精度,Distance为玩家与目标的距离,Weapon.Range为武器的有效射程。最后比较结果与一个随机数,大于则判定为命中。
伤害计算公式
Damage = Weapon.BaseDamage * Random(0.9, 1.1) * HitzoneDamageMultiplier
其中Weapon.BaseDamage为武器的基础伤害值。乘以一个0.9-1.1的随机数添加变化。HitzoneDamageMultiplier为不同身体区域受击的伤害倍率。如头部倍率最大,手脚最小。
被击中玩家剩余生命值
HealthRemaining = HealthBefore - Damage * DistanceFallOff
DistanceFallOff为不同距离的伤害衰减系数。近距离时为1,远距离时逐渐衰减。
延迟补偿
Hit = ShootAt(Position + Velocity * Delay)
ShootAt:客户端的射击打击点Position:目标的位置Velocity:目标的速度向量Delay:客户端到服务器的延迟时间
将目标在延迟时间内所可能移动到的位置,作为最终判定命中的位置
客户端发现目标位置在X,射击点也在X
但是由于100ms的延迟,信息到达服务器时目标可能已经移动到X+V*0.1秒了
所以服务器会将X+V*0.1作为最终射击判定点,而不是X
当完整计算套用以后实际你瞄准射击的部位不会是最终打击的部位 再加上延迟补偿机制服务器可能会将本不会命中的子弹算在命中里面表现就是你在看到对方的时候 对方开火到你死亡感官上可能只有0.1s 实际你的位置补偿可能在你还没看见他的时候 服务器已经将你的位置补偿给了对方, 当你还在墙内往墙外移动时 对方视角里 你已经在墙外了 就会给人一种你直接被秒的错觉 。
换一个思路就是假如你射击者的延迟高于对方,在服务器做计算的时候会反向补偿,及你射击的对象可能在服务器上根本就没有到或者已经过了那个瞄准点了,你看到的只是单纯的服务器脑补补偿给你看见的实际位置还没有发送到服务端,但是你的命中反馈是有的,因为命中反馈是在本地计算触发动画的。
说白了这一切都是 设计者为了保证服务器在并行计算中性能最优解做出的妥协,市面上的大型FPS游戏都是倾向于从射击者角色进行计算 这就会照成延迟高的一方常处于劣势。好处就是减轻服务器计算量、带宽。 同时避免了 个别设计游戏中出现魔法子弹、角色无敌的情况,比如塔科夫,塔科夫就是做了双向验证 导致各种魔法子弹 无敌的问题 同时对双方电脑以及服务器造成高负载的情况 。


IP属地:云南129楼2023-08-14 09:46
回复
    我来水文字了


    IP属地:广东来自iPhone客户端130楼2023-08-15 01:44
    回复
      2025-07-25 10:44:05
      广告
      不感兴趣
      开通SVIP免广告
      对的,其实能感觉出来是服务器这里,不知道有没有人遇到,在激烈对枪中你感觉你伤害打满了,但是对面把你打死了,于是你为了尽快回到战场直接跳过死亡回放一看击杀播报,显示你把对面打死了,也就是对面在你死之后才死的,那这段多出来的时间,按照lz说的回去排队处理你的数据,就解释的通了


      IP属地:山东来自Android客户端131楼2023-09-14 20:14
      回复
        sbmm铁人,受益者视角:【当代钢铁侠】 https://www.bilibili.com/video/BV17F411y7Jg


        IP属地:湖北132楼2024-09-23 14:51
        回复
          看楼主文章之前,我就隐约猜到那个命中提示的结算应该是在本地,并且它并不代表服务器端已经确认你命中了。很简单,使命召唤16时期的初代战区,别人先手打我我还有可能用身法跑掉,19代的战区2我基本都是瞬间倒地,而且看击杀回放对面也永远是在瞬移。我是肉身在美服打的,我还一度怀疑是家里网络的问题……其二就是,作为一个程序员,这种动态改伤害改生命值的东西你给我钱我也懒得写,就算我真写了也不会告诉你。感谢楼主解惑


          IP属地:湖南来自iPhone客户端136楼2024-11-22 17:25
          回复
            我问一下那个战区换三四次服务器不会被封吧


            IP属地:安徽来自Android客户端137楼2025-04-08 09:44
            回复