你看到过哪些新手错误,以及如何解决?
其中一个经常出现的问题是没有对客户端进行任何检查。
例如:
- 用户反编译Flash游戏源代码或监听网络流量,看到高分数据的去向并将虚假的高分发送到那里,而不是真正玩游戏。 - 用户使用修改器获得物品,即使该物品在当前关卡中可能不会出现。这样就像“客户端X获得物品Y”一样发送到服务器,并且服务器只接受它。
简单的解决方法当然是将游戏客户端视为与服务器交互的API。然后用户可以尽情使用训练器和其他内存操作,但服务器只会告诉您不能这样做。将服务器视为具有游戏规则的数据库,可以在其上查询内容。
例如:
- 客户端:启动游戏 - 客户端:连接到服务器 - 客户端:从服务器查询可用资金的金额 - 用户:启用将资金设置为无限的修改器 - 客户端:server.buyItem('非常昂贵') - 服务器:检查游戏状态(用户现在可以购买物品)。检查player[0].money ->没有奖励。 - 客户端:server.buyItem('可以得到这个') - 服务器:检查游戏状态(用户现在可以购买物品)。检查player[0].money,ok。player[0].items.add('可以得到这个')将从player[0].money中减少其成本。然后通知客户端send(player[0],'items','可以得到这个'); send(player[0],'money',player[0].money)。
另一种方法是记录客户端的动作并将其发送到高分服务器,服务器会播放它。当然,这可能会导致记录非常大。
其中一个经常出现的问题是没有对客户端进行任何检查。
例如:
- 用户反编译Flash游戏源代码或监听网络流量,看到高分数据的去向并将虚假的高分发送到那里,而不是真正玩游戏。 - 用户使用修改器获得物品,即使该物品在当前关卡中可能不会出现。这样就像“客户端X获得物品Y”一样发送到服务器,并且服务器只接受它。
简单的解决方法当然是将游戏客户端视为与服务器交互的API。然后用户可以尽情使用训练器和其他内存操作,但服务器只会告诉您不能这样做。将服务器视为具有游戏规则的数据库,可以在其上查询内容。
例如:
- 客户端:启动游戏 - 客户端:连接到服务器 - 客户端:从服务器查询可用资金的金额 - 用户:启用将资金设置为无限的修改器 - 客户端:server.buyItem('非常昂贵') - 服务器:检查游戏状态(用户现在可以购买物品)。检查player[0].money ->没有奖励。 - 客户端:server.buyItem('可以得到这个') - 服务器:检查游戏状态(用户现在可以购买物品)。检查player[0].money,ok。player[0].items.add('可以得到这个')将从player[0].money中减少其成本。然后通知客户端send(player[0],'items','可以得到这个'); send(player[0],'money',player[0].money)。
另一种方法是记录客户端的动作并将其发送到高分服务器,服务器会播放它。当然,这可能会导致记录非常大。