作者LayerZ (无法如愿)
看板GameDesign
标题Re: [程式] 前、後端物理运算一致性
时间Tue Feb 2 01:48:44 2021
1F:推 LayerZ: 认真回一下,基本上是不可能做到前後端同步的,如果做得到 01/31 14:06
2F:→ LayerZ: 就已经突破云端游戏瓶颈了 01/31 14:06
3F:→ LayerZ: 一般有两种做法,一种是控制变数常数,Client端物理表演, 01/31 14:07
4F:→ LayerZ: Server端验算 (目前常见短连线游戏),一种是资料Server端 01/31 14:07
5F:→ LayerZ: 为主,Client仅依照Server端送下来的资讯作出表演,如何用 01/31 14:08
6F:→ LayerZ: 这些资讯让表演逼真是另一个领域了 01/31 14:08
7F:→ LayerZ: (MMO之类) 01/31 14:08
8F:→ LayerZ: 至於你说的作弊,作弊抓的到就好,指要让他正常游玩不会出 01/31 14:09
9F:→ LayerZ: 问题就没关系,至於玩家不管用任何手段作弊,只要server端 01/31 14:10
10F:→ LayerZ: 抓得出来(各种验算) 就能即时处理掉 01/31 14:10
>>请问你说的变数常数主要是控制哪些部分?(是指物理参数吗?)
>>目前想到的方法好像是比较偏向你说的方法2
>>我打算在Client跟Server都用Box2D去创建一个游戏世界(world)
>>并且让Client跟Server端的world尽可能保持在一致的状态
>>当玩家进行游戏操作後
>>Client会将该操作的RPC封包送至後端
>>後端接收封包後後产生结果(使用物理引擎计算路径并且包含乱数因素)并回传前端作演示
>>但这样似乎有可能会碰到浮点数精准的问题(?)
基本上不会在後端用物理引擎的..
假如有同时10000人游玩,那麽你的後端就要同时模拟10000场游戏,很明显是不切实际的
>>另外场面上如果有移动性的Body
>>似乎也会导致无法单靠物理参数就导出同样的结果
>>
移动性? 从什麽时候开始移动,从哪里开始,方向往哪里,什麽时候转弯
甚至随机移动的种子是多少,都是可以固定下来的常数
举个例子,高尔夫球游戏,理论上只要角度跟力道两个变数不变,打出去的结果就要是
固定的,而玩家怎麽打就是这游戏的变数 (量角器拿出来
因此理论上,控制好常数与变数,就能知道结果,甚至将结果记录下来,後来的用查表法
直接给你答案
___
不过上面是理论上的东西,实务上,後端真的需要知道精确的结果吗,验证的时候也不用
到100%精确,只要能确定是否合法就好
假设有个游戏
分数落在 0~100分之间,突然来个10000分的肯定有问题 (异常封包)
平均分数60~80,突然有玩家拿个100分再来查也没关系,甚至不需要去查
为什麽? 你要去靠动作查玩家怎麽达到的,那玩家直接作弊做出能达到的动作,你在後端
就查不到任何东西 (详见FPS外挂战争,可以另开一个专题了XDD)
--
昨天没说完,补充一下
你说你要对抗作弊,作弊也有很多形式不能一概而论,你还是要有个目标才能对抗
1.封包修改
「所有的封包在client做完运算与表演後,Server都要验证」
这是入门一定要学的观念,完全不该犯的错误
举个例子 GTA V 原本我觉得他们规模可以超过 Diablo 的,但是被作弊毁了
一颗手榴弹可以炸毁城市中所有的人,可以生成任意物件,甚至改变自己的数据
会发生这种事情,代表他可以传任何封包给Server端而没有验证,否则他能作的
顶多改变他自己的Client资料,自己显示自己爽而已
2.DDoS
这个要说作弊也不太对,但是有外挂疯狂送合法封包过来要你处理,你的後端也会挂掉
基本上是能做到的例如,让比赛直接中断,或是直接勒索游戏商付钱
所以还是要有观念的东西,正式的DDoS攻击应该会有MIS搞防火墙去挡
但是设计面上还是要考量到封包数量,跟过多过大封包的处理,不过新手的话遇到再说啦
...想到了啦,天堂加速器咩,加速Client端疯狂送正常封包Server端都当正常封包处理
3.客户端作弊
举个例子 「自动瞄准」
这种类型是Client端另外执行程式,把Client端的资料当成输入,作出枪枪暴头的玩家
行为,因此Server端收到的东西是完全正常的
後续游戏商与反外挂的战争可以再写个10万字吧...有机会再说
--
明知道这是不可能的愿望 却如同烙印的爪痕沁入大地
假如 可以实现的话 将我的存在剥夺 舍弃也无妨
祈祷着 祈求着 幻想也好
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.240.115.198 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1612201727.A.23E.html
※ 编辑: LayerZ (59.124.224.47 台湾), 02/02/2021 09:41:40
11F:推 v86861062: :D 02/02 12:17
12F:推 SecondRun: 我也在想多几个玩家他server就要死了吧XD 02/05 00:59