写之前定义了这些,后来又加一点,还没有完成这些协议,而且没有写心跳包,因为完成了帧同步很激动,然后就把不想写心跳包了。。buff也没有实现
所有ID、指令都是int
除了客户端上传的帧同步数据,其他都是发什么上去服务器就转发什么给客户端
帧同步协议(FrameKey)
上行:FClientKey(会话ID + 操作 + buffID)
是否能释放技能由本地计算数据,发送出来由接收的客户端进行播放动画、计算伤害和计算buff,
buff的计算不叠加,只刷新时间。比如一个buff持续4帧,消耗了2帧,现在又来一个一样的buff,那么buff刷新为4帧,而不是叠加到6帧
相同的buff不叠加,两个减速buff减少的速度和一个减速buf是一样的
不同buff可以选择是否叠加,比如我用一个技能可以净化自己的debuff,然后两个人按下这个技能,然而网速不好,先按下的人的包反而
慢到,延迟到下一阵处理,这个锅就甩给玩家好了。
bufID列表
0 加血buff 持续x帧 实现效果:一帧加xxx血
1 减速buff 持续x帧 实现效果:持续时间内速度为原来一半
2 冰块buff 持续x帧 实现效果:不能操作
3 电击buff 持续x帧 实现效果:秒扣x格血
操作列表
MoveX -1000到1000的整数
MoveY -1000到1000的整数
下行:FServerKey(ServerFrameID + List<ClientKey>)
客户端帧数从1开始计算
服务端帧数也是1开始计算
房间通讯协议(ConnectKey)
上行:CClientKey(会话ID + 操作指令 + List<ValueArgs>)
操作指令列表
0 准备
1 取消准备 ///省略。异常就是离开了
2 离开房间(Client.Close())
3 客户名字
4 开始游戏(房主按钮)
5 场景加载完成,可以开始游戏
class ValueArgs{
string;
int;
bool;
}
下行:CServerKey(会话ID + 操作指令 + List<ValueArgs>)
操作指令列表
0 刚刚进入房间获取全部人信息(包括是否准备和名字) + 会话ID(由服务器分配)
1 开始游戏吧,给所有人发信息才能进入游戏(加载新场景吧)
2 启动帧同步模块,服务器开始计时,客户端也开始计时(客户端开始计时才开始打开打开遮罩)
3房间已满
4 房间已在游戏中
5xx离开房间
6 某人进入房间
7 某人离开房间
8 关闭房间
区分三种协议
0 帧同步客户端到服务器
1 帧同步服务器到客户端
2 房间协议
3 心跳包
连接成功客户端先发送名字,然后服务端回送信息
某人进入房间不能依赖进入房间的顺序排队,也不能按照进入字典的顺序排队,因为两个人加入房间可能因为网速慢导致不同客户端加入别人的时间不同,技能tick的时候顺序不同可能造成不同步
房间信息排序也一样,按照SessionID排序