KBEngine官方论坛

 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 配置 开服
查看: 117|回复: 5

需求:服务器状态回滚

[复制链接]

2

主题

4

帖子

32

积分

新手上路

Rank: 1

积分
32
发表于 2018-10-30 18:06:59 | 显示全部楼层 |阅读模式
本帖最后由 kiddinglife 于 2018-10-30 18:10 编辑

在做moba后端逻辑  需要实现类似斧王斩杀技能 敌方玩家血量低于一定的值会造成即死效果 我在第n帧发动斩杀技能,敌方在第n+2帧开的吹风技能(吹风技能可以使玩家出无敌状态),而敌方网速比我快 或者我的网速抖动了一下,那么当我斩杀指令包到达服务器的时候, 已经是第n+5帧了, 而对方的指令包比我早到服务器,那么此时他在服务器端已经是无敌状态了, 服务器会判定我的斩杀没有任何效果。 这明显是不对的。争取的作法应该是:服务器应该回滚到第n帧,再进行逻辑判断。 第n帧的时候 敌方还没有开出来吹风技能 也就不是无敌状态, 那么服务器就会判断敌方死亡。
回复

使用道具 举报

5

主题

3506

帖子

214748万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2147483647

引擎扛把子

发表于 2018-10-31 14:03:50 | 显示全部楼层
服务器根据客户端回滚感觉挺奇怪。

一般似乎是客户端根据服务器回滚。

即使要回滚也是你自己处理的, 你可以记录所有的帧指令
QQ:3603661
3603661@qq.com
回复

使用道具 举报

2

主题

4

帖子

32

积分

新手上路

Rank: 1

积分
32
 楼主| 发表于 2018-10-31 16:05:33 | 显示全部楼层
本帖最后由 kiddinglife 于 2018-10-31 16:17 编辑

服务器只会回滚到第n帧时敌方的状态 以便进行逻辑判断 其他玩家的状态不会变的 当服务器判断敌方应该死亡 就将地方在第n帧是的状态设为最新 紧接向敌方客户端发送同步包  客户端收到后 播放自身死亡动画和斧王斩杀动画 另外 多讲一下 我这里的设计是遵循状态先行 技能动画要等服务器确认后才能播放 因为服务器是权威的状态是model  动画只是状态的view 这样可以避免玩家看到状态和动画不一致的情景 避免不必要的纠纷
服务器能提供一个entiity buffer最好了 让那个玩家选择最多保存多久之前的所有实体快照 buffer满了 把老快照删除 再查如新快照
回复

使用道具 举报

5

主题

3506

帖子

214748万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2147483647

引擎扛把子

发表于 2018-10-31 16:30:58 | 显示全部楼层
kiddinglife 发表于 2018-10-31 16:05
服务器只会回滚到第n帧时敌方的状态 以便进行逻辑判断 其他玩家的状态不会变的 当服务器判断敌方应该死亡  ...

服务器底层要加一个功能必须是一个比较大众需求的功能, 目前没找到太多应用场景。
你也可以参考守望先锋的做法预测和回滚,可能是一个主流的方式。


QQ:3603661
3603661@qq.com
回复

使用道具 举报

2

主题

4

帖子

32

积分

新手上路

Rank: 1

积分
32
 楼主| 发表于 2018-11-1 07:10:03 | 显示全部楼层
柯标 发表于 2018-10-31 14:03
服务器根据客户端回滚感觉挺奇怪。

一般似乎是客户端根据服务器回滚。

玩家自定义属性可以自己做缓存 但是位置方向这些属性怎么解决呢?位置变化的时候 会触发自定义的hook函数吗?
回复

使用道具 举报

5

主题

3506

帖子

214748万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2147483647

引擎扛把子

发表于 2018-11-1 09:43:19 | 显示全部楼层
onUpdateBegin、onUpdateEnd中自己记录
QQ:3603661
3603661@qq.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|KBEngine Forum

GMT+8, 2018-12-11 17:38 , Processed in 0.029673 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表