问题:
由于在开发中,涉及到战斗验证的问题,开始的时候战斗是客户端再做,但是服务器只验证战斗结果是否正确。
服务器验证的方式就是:战力是否足够打败boss,如果战力小于boss很多战力,则服务器认为是作弊
但是有时候玩家和boss的战力相差不大的时候,这种验证方式就不能判断了。
解决方案:
客户端将战斗模块打包成dll,该dll只负责战斗逻辑,进入战斗前,传入相关数据,输出战斗结果和战后数据
这样客户端,服务器可以共用这个战斗dll逻辑模块。
服务器跑的战斗逻辑和客户端一样,这样结果就肯定没问题了。也不用担心客户端作弊的情况
服务器只验证战斗胜利的情况,并且玩家和boss的战力相差不是很大的时候
如果战斗胜利,但战力相差很大,肯定是作弊。
进入战斗前:客户端向服务器发送战斗请求,同时把战斗前玩家的所有数据,包括参战的所有角色属性,还有玩家的所有属性,发送给服务器。
服务器拿到客户端的初始数据之后,模拟客户端进行战斗。
战斗结束:客户端再次把所有阵容数据和玩家数据发送到服务器,服务器拿客户端数据和自己计算的数据进行比较。数据不一致,说明客户端作弊,认为战斗失败。
一般这种验证只在回合制的pve中使用,pvp或者自由竞技的游戏的话,就可能需要用到帧同步
这就用到了再unity中将战斗模块打包成dll的功能,这篇博客说的比较仔细
https://blog.csdn.net/zhenghongzhi6/article/details/78874580