V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
CSGO
V2EX  ›  问与答

观 CSGOMajor 有感:游戏中完全不会发生同时死亡的时候吗?

  •  
  •   CSGO · 2022-05-16 21:50:36 +08:00 · 2214 次点击
    这是一个创建于 682 天前的主题,其中的信息可能已经有所发展或是发生改变。
    相比自己娱乐家里玩玩,在职业赛场上,队员是否能完全相信游戏给的判断死亡?狙击枪同时开火的概率完全没有吗?职业队员击杀似乎都是非常接近的时间,如果发生完全相同的时间击杀,游戏应该怎么判断谁死亡?

    128tick ,算下来 0.0078125s ,如果真的发生 0.0078125s 两边玩家同时开火,代码应该如何判断?
    22 条回复    2022-05-17 18:00:08 +08:00
    arch9999
        1
    arch9999  
       2022-05-16 21:54:32 +08:00
    先死的人打出去的子弹,是没有伤害的。
    pkoukk
        2
    pkoukk  
       2022-05-16 21:54:45 +08:00
    没怎么打过 csgo ,但是小时候在网吧 cs1.5 的时候,有专门的对狙图
    同时身亡概率还蛮高的,可能那会 tick 比较低吧
    arch9999
        3
    arch9999  
       2022-05-16 22:01:05 +08:00
    没看后半段,同一 tick 内互相造成致死伤害,CSGO 是随机一人死亡。不过我感觉是先送达数据包到服务端的一方存活。
    jsq2627
        4
    jsq2627  
       2022-05-16 23:16:38 +08:00
    按照一般程序员的逻辑,在一个 tick 内,肯定是把 buffer 队列里的数据包按顺序逐个处理,那就有先后了

    至于 buffer 里这两个包的先后又是怎么确定的,这就涉及 OS 以及上联各级路由器的包转发策略了 :D
    jsq2627
        5
    jsq2627  
       2022-05-16 23:21:41 +08:00
    万一在 LAN 里两台电脑的包正好同时到达交换机(“同时”指在交换机的一个时钟周期里),如果交换机是按照从端口从左到右从上到下扫描过去,那么左上角端口网线连着的选手一定更具有竞争优势 🤣
    XiaoGouBa
        6
    XiaoGouBa  
       2022-05-16 23:29:14 +08:00 via Android
    死后伤害就没有效判定了,v 社可能在延迟上做了手脚,所以 0.0078125s 同时开火根本不可能发生?
    Maboroshii
        7
    Maboroshii  
       2022-05-17 00:42:22 +08:00 via Android
    随缘就行了,没必要计较这么点时间差吧。人类根本无法感知
    across
        8
    across  
       2022-05-17 01:35:52 +08:00 via iPad
    反正最后是在服务器上计算判断,这个又没法并行,事件可能按游戏内时间戳排序,有可能一帧之内两方子弹都命中对方,这种极小概率,要不要一起死都不太影响游戏性。
    Mutoo
        9
    Mutoo  
       2022-05-17 06:17:47 +08:00
    有些游戏的结束判定并不是每帧计算的,而是每 N 帧判定,例如 N=30 ,这种情况是可以判定平局的。这种小概率事件没有什么必要,真正的高手比赛赛制也不会是简单的一局定输赢。
    xtreme1
        10
    xtreme1  
       2022-05-17 09:23:50 +08:00
    @jsq2627 我觉得到不了这么底层.. 完全看哪个 client 的 index 比较小
    kop1989smurf
        11
    kop1989smurf  
       2022-05-17 09:27:05 +08:00   ❤️ 1
    首先,明确两个概念。

    1 、服务器端其实没有极端的“同时”概念,客户端互斥的操作逻辑关系可以靠队列。(所以会出现玩家游戏体验与游戏判定不符的情况,比如你还没看到人,你就已经死了)
    2 、业务判断很大程度上不能只依赖 1tick 。(因为 1tick 不可靠,只依赖 1tick 很容易出现意料之外的效果,比如吞子弹)

    明确了这两个概念之后,是不是相对逻辑就明晰了?
    业务上,互杀可以实现,也可以不实现,纯看需求(判定规则)。

    至于说“这样是否公平”,我认为只要判定标准,以及双方延时是一致的(这个延时不一定和 ping 值成线性关系,这要看延时优化),其实就公平。
    LaGeNanRen
        12
    LaGeNanRen  
       2022-05-17 09:31:25 +08:00   ❤️ 1
    9 楼说的是对的,首先这实在是太小概率事件了
    pvp 时,判定都是上传到服务器的,就像你本地的弹道落点和服务器的弹道落点有差一样,以服务器的为准
    比如开镜对狙,假如结果上你是死掉的那个,其实你本地可能按下左键开枪了,甚至看到枪械开枪的动画了,但最后显示你死了,这个时候就是玩家常常说的“怎么我这枪没伤害啊”,这样一想是不是懂了,在打 faceit 之类的国外服务器,延迟比较高的时候会常见一些
    两边对枪同时死的情况有,但我大号玩了 1500h ,加上小号还有帮朋友上分,我算总共玩了 2000h 吧,就遇到过一次吧,实在是太小概率了
    tukela
        13
    tukela  
       2022-05-17 09:36:35 +08:00 via iPhone
    还得考虑弹道命中率问题。
    弹道不是百分百命中,会漂移。
    所以有时候会出现明明打中了,实际上没有中。
    glfpes
        14
    glfpes  
       2022-05-17 09:40:12 +08:00
    死后如果无法造成伤害,那的确不可能同时死亡

    像 LOL 技能有弹道,经常出现对拼同时死亡的情况
    hhaobao
        15
    hhaobao  
       2022-05-17 10:17:19 +08:00
    听着很有意思的, 虽然不做游戏服务端开发, 请问各位这方面有啥书可以看一下的?
    zjj19950716
        16
    zjj19950716  
       2022-05-17 10:30:41 +08:00
    同一条直线上,子弹和子弹会不会对冲掉
    CSGO
        17
    CSGO  
    OP
       2022-05-17 10:55:24 +08:00
    @zjj19950716 😄,看来你没玩过这种游戏,CSGO 压根没有子弹。战地游戏倒有子弹,飞出去还要时间,存在同时死亡。
    Senorsen
        18
    Senorsen  
       2022-05-17 12:49:28 +08:00
    小时玩 CS1.6 遇到过同时身亡,CSGO 不知。
    eGlhb2Jhb2Jhbw
        19
    eGlhb2Jhb2Jhbw  
       2022-05-17 13:13:05 +08:00
    @CSGO #17 没咋玩过,CSGO 没有子弹吗?我咋记得有个视频是开枪了,但是没打中,被反杀了,然后裁判慢放看见是弹起的瓶子挡住了狙的子弹。
    across
        20
    across  
       2022-05-17 15:06:09 +08:00 via iPhone
    @eGlhb2Jhb2Jhbw 普通游戏射击验证做射线检测就可以了,不用考虑子弹速度,ak 飘移也是枪口自己歪了,不是弹道弯了。这类不需要子弹,弹壳动画放一放得了。
    某些特别武器,比如榴弹枪,rpg 速度慢的,或者写实性强的,专门做弹道物理,然后检查弹道上的碰撞情况。
    MiketsuSmasher
        21
    MiketsuSmasher  
       2022-05-17 17:46:53 +08:00
    CSGO 不知道。
    但如果是 WOTB ,双方各有一辆残血坦克,在足够远的距离上朝对方开炮,确实会出现同时死亡的情况。
    krixaar
        22
    krixaar  
       2022-05-17 18:00:08 +08:00
    有 csgo 的奇思妙想先搜搜 3kilks
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2796 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:50 · PVG 19:50 · LAX 04:50 · JFK 07:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.