就这背刺的机制从以前拔刀斩优化到后面假背刺优化,再到如今的正面背刺等等一堆问题层出不穷,现在更有一些让人摸不着头脑的新名词诞生
我这简要从程序的角度分析下背刺技能的逻辑吧,没有源码我这里也只能从常规的开发角度来推测。
///
一、前后端(客户端与服务器)的交互
接下来的分析需要各位对前后端同步有个基本的知识,这里简化下网络交互的原理,仅从最简单的应用层面来说下这方面的知识。
众所周知,要实现前后端同步,需要通过“发包”(发送数据包)来传输数据,逻辑链为:
客户端触发事件 → 客户端发包 → 服务器收包 →服务器处理事件 → 服务器返包 → 客户端收包 → 客户端执行表现。
在具体的实现层面,为了区分每个数据包的类型和作用,客户端与服务器通过“收发协议”的方式来约束发包的数据结构与处理方式。
通俗一点,就是说客户端有一份“菜单”(协议列表),客户端向服务器“报菜名”(请求对应协议),服务器听到后开始做对应的菜(接受协议并做对应的处理)。
所以一次背刺操作的逻辑链为:
客户端触发背刺 → 客户端请求背刺协议 → 服务器接收背刺协议 → 服务器校验是否背刺成功 → 服务器返回带有结果数据的背刺协议 → 客户端接收返回数据 → 客户端做出表现(对方是否死亡)
这里需要注意的是,平砍对应攻击协议,背刺对应背刺协议,两者从请求上就不一致。
///
二、客户端如何触发背刺
这一点早就在大批讨论背刺机制的贴子里得出了一个大伙较为认可的结论,即:
敌人背后会有一片扇形的背刺区域(并非红光特效区域),背刺角度决定了背刺区域扇形角度;
而刀锋自己则会有一个扇形的攻击范围,攻击角度决定了攻击区域扇形角度;
当敌人处于攻击角度内,刀锋处于背刺角度内时,若刀锋与敌人距离小于等于背刺距离,那么此时满足背刺条件,客户端会表现为出现背刺框。
当玩家在出现背刺框时点击左键,客户端就会向服务器请求背刺协议。
值得注意的是,在枪神纪中,背刺动作的动画是在请求协议的同时播放的,所以哪怕服务器返回背刺失败,客户端也仍然会播放背刺动作,搞笑的是角色动作属于实时同步的数据,所以别人能看到你假背刺的动作
///
三、服务器如何校验背刺
这一点本来是个很简单的问题,只需要前后端的检查逻辑一致即可,但这样会增加服务器的消耗,且严格的同步逻辑需要高频率的同步才能确保玩家的体验(即需要高tick),所以枪神纪在这里选择了一些“偷鸡”的方法来进行检查,以保证在低频同步下也能正常游玩。
而在多次优化后服务器检查逻辑也有所不同,这里只讨论现在有可能的校验逻辑。
从官方解释假背刺的原理中可以看出,服务器肯定有检查玩家之间的距离。那么角度呢?
从转圈火事件后,我曾认为服务器校验背刺应该也是同样的逻辑,即:服务器以玩家和敌人的朝向向量作为判断依据,且不考虑前后位置关系。那么就会导致刀锋玩家即使已经出现在敌人的前方,只要双方朝向符合背刺&攻击角度,那么服务器就会判定为背刺成功。
直到有人发了正面背刺挂的视角视频,我有了个新的猜测。
正面背刺外挂的视角目前已知的有两种:
① 敌人模型在自己视角中不断旋转,所以可以触发背刺框。
②当自己接近敌人时,敌人模型会自动转向并背对自己。
而外挂修改的是本地文件,或者直接向服务器发送错误的数据包,换句话说,外挂无法干涉服务器的检查判断逻辑。
由此我得出一个暴论:服务器根本没判断角度
也就是说,只要客户端能够触发背刺框或者请求背刺协议,服务器在接收后检查玩家之间的距离满足要求则背刺成功。
///
四、背刺相关问题以及解释
基于上述推导结论,我针对现有背刺相关问题做出一些可能的原因的解释。
4.1 背刺变平砍
由于平砍和背刺的协议不同,所以让你触发平砍时一定是客户端判断为平砍,也就是在客户端获取敌人角度和位置时,并不满足背刺条件,建议你换个性能好点帧率高的电脑
4.2 假背刺
即客户端播放了背刺动作(请求背刺协议),但服务器返回了背刺失败或者根本没返回(网络卡顿导致丢包),而由于上述结论推断服务器不判断角度,得出结论为当服务器进入检查逻辑时,玩家之间的距离超出背刺距离。
4.3 正面背刺
这里先假设个场景,存在某一瞬间,对于刀锋玩家的客户端来说满足背刺条件,并请求服务器,此时敌人旋转视角导致角度条件不满足时,仍然会被背刺。
这里有两种说法:
① 根据上述推导结论,只要距离满足并请求背刺协议,那么背刺一定成功,对于敌人玩家来说无解。
② 延迟背刺,即敌人玩家网络卡顿,导致在背刺完成的时候没有接收到服务器的发包,所以“假存活”了一段时间,对于敌人玩家来说,网络够快能解决该问题(及时死,没有正面背刺的假象
)
上述两者表现一致,但区别在于②是敌方网络差才会出现,而①则是只要刀锋玩家自己网络不好也会频繁出现,这类刀锋会经常被说正面背刺,也会经常假背刺
我这简要从程序的角度分析下背刺技能的逻辑吧,没有源码我这里也只能从常规的开发角度来推测。
///
一、前后端(客户端与服务器)的交互
接下来的分析需要各位对前后端同步有个基本的知识,这里简化下网络交互的原理,仅从最简单的应用层面来说下这方面的知识。
众所周知,要实现前后端同步,需要通过“发包”(发送数据包)来传输数据,逻辑链为:
客户端触发事件 → 客户端发包 → 服务器收包 →服务器处理事件 → 服务器返包 → 客户端收包 → 客户端执行表现。
在具体的实现层面,为了区分每个数据包的类型和作用,客户端与服务器通过“收发协议”的方式来约束发包的数据结构与处理方式。
通俗一点,就是说客户端有一份“菜单”(协议列表),客户端向服务器“报菜名”(请求对应协议),服务器听到后开始做对应的菜(接受协议并做对应的处理)。
所以一次背刺操作的逻辑链为:
客户端触发背刺 → 客户端请求背刺协议 → 服务器接收背刺协议 → 服务器校验是否背刺成功 → 服务器返回带有结果数据的背刺协议 → 客户端接收返回数据 → 客户端做出表现(对方是否死亡)
这里需要注意的是,平砍对应攻击协议,背刺对应背刺协议,两者从请求上就不一致。
///
二、客户端如何触发背刺
这一点早就在大批讨论背刺机制的贴子里得出了一个大伙较为认可的结论,即:
敌人背后会有一片扇形的背刺区域(并非红光特效区域),背刺角度决定了背刺区域扇形角度;
而刀锋自己则会有一个扇形的攻击范围,攻击角度决定了攻击区域扇形角度;
当敌人处于攻击角度内,刀锋处于背刺角度内时,若刀锋与敌人距离小于等于背刺距离,那么此时满足背刺条件,客户端会表现为出现背刺框。
当玩家在出现背刺框时点击左键,客户端就会向服务器请求背刺协议。
值得注意的是,在枪神纪中,背刺动作的动画是在请求协议的同时播放的,所以哪怕服务器返回背刺失败,客户端也仍然会播放背刺动作,搞笑的是角色动作属于实时同步的数据,所以别人能看到你假背刺的动作
///
三、服务器如何校验背刺
这一点本来是个很简单的问题,只需要前后端的检查逻辑一致即可,但这样会增加服务器的消耗,且严格的同步逻辑需要高频率的同步才能确保玩家的体验(即需要高tick),所以枪神纪在这里选择了一些“偷鸡”的方法来进行检查,以保证在低频同步下也能正常游玩。
而在多次优化后服务器检查逻辑也有所不同,这里只讨论现在有可能的校验逻辑。
从官方解释假背刺的原理中可以看出,服务器肯定有检查玩家之间的距离。那么角度呢?
从转圈火事件后,我曾认为服务器校验背刺应该也是同样的逻辑,即:服务器以玩家和敌人的朝向向量作为判断依据,且不考虑前后位置关系。那么就会导致刀锋玩家即使已经出现在敌人的前方,只要双方朝向符合背刺&攻击角度,那么服务器就会判定为背刺成功。
直到有人发了正面背刺挂的视角视频,我有了个新的猜测。
正面背刺外挂的视角目前已知的有两种:
① 敌人模型在自己视角中不断旋转,所以可以触发背刺框。
②当自己接近敌人时,敌人模型会自动转向并背对自己。
而外挂修改的是本地文件,或者直接向服务器发送错误的数据包,换句话说,外挂无法干涉服务器的检查判断逻辑。
由此我得出一个暴论:服务器根本没判断角度
也就是说,只要客户端能够触发背刺框或者请求背刺协议,服务器在接收后检查玩家之间的距离满足要求则背刺成功。
///
四、背刺相关问题以及解释
基于上述推导结论,我针对现有背刺相关问题做出一些可能的原因的解释。
4.1 背刺变平砍
由于平砍和背刺的协议不同,所以让你触发平砍时一定是客户端判断为平砍,也就是在客户端获取敌人角度和位置时,并不满足背刺条件,建议你换个性能好点帧率高的电脑
4.2 假背刺
即客户端播放了背刺动作(请求背刺协议),但服务器返回了背刺失败或者根本没返回(网络卡顿导致丢包),而由于上述结论推断服务器不判断角度,得出结论为当服务器进入检查逻辑时,玩家之间的距离超出背刺距离。
4.3 正面背刺
这里先假设个场景,存在某一瞬间,对于刀锋玩家的客户端来说满足背刺条件,并请求服务器,此时敌人旋转视角导致角度条件不满足时,仍然会被背刺。
这里有两种说法:
① 根据上述推导结论,只要距离满足并请求背刺协议,那么背刺一定成功,对于敌人玩家来说无解。
② 延迟背刺,即敌人玩家网络卡顿,导致在背刺完成的时候没有接收到服务器的发包,所以“假存活”了一段时间,对于敌人玩家来说,网络够快能解决该问题(及时死,没有正面背刺的假象
上述两者表现一致,但区别在于②是敌方网络差才会出现,而①则是只要刀锋玩家自己网络不好也会频繁出现,这类刀锋会经常被说正面背刺,也会经常假背刺














