你见过什么样的新手错误,有什么解决方法?
一次又一次发生的一个是客户端没有针对服务器进行任何检查。
例如:
- 用户反编译 Flash 游戏源或监听网络流量,查看高分数据的去向,并发送虚假的高分,甚至不玩游戏。
- 用户使用培训师并获得甚至可能不会出现在当前级别的项目。这发送到服务器,如“客户端 X 得到项目 Y”,服务器只是接受。
简单的解决方法当然是将游戏客户端仅作为服务器的 API 处理。然后用户可以使用他们喜欢的训练器和其他内存操作,但服务器只是说你不能这样做。将服务器视为数据库,您可以在其中查询带有游戏规则的事物。
例如
- 客户端:开始游戏
- 客户端:连接到服务器
- 客户端:从服务器查询可用金额
- 用户:启用将钱设置为无限的培训师
- 客户端:server.buyItem('非常昂贵')
- 服务器:检查游戏状态(用户现在可以购买东西)。检查 player[0].money -> 没有奖金。
- 客户端:server.buyItem('可以得到这个')
- 服务器:检查游戏状态(用户现在可以购买东西)。检查 player[0].money,好的。player[0].items.add('can get this') 这将减少来自 player[0].money 的成本。然后通知客户端 send(player[0], 'items', 'can get this'); 发送(玩家[0],'钱',玩家[0].money)。
另一种方法是记录客户端的动作并将其发送到服务器播放它的高分服务器。当然,这会导致该记录非常大。