あなたが見た初心者のミスとその治療法は何ですか?マルチプレイヤー/オンラインゲームプログラミングで最も多く見られる初心者ミス?
何度も何度起こっても、クライアントはサーバーに対してどのような方法でもチェックされません。例えば
:
- ユーザーがFlashゲームのソースを逆コンパイルまたはネットワークトラフィックに待機し、ハイスコアのデータが起こっても、ゲームをプレイしていないが、偽のハイスコアを送信している場合見ています。
- ユーザーはトレーナーを使用し、現在のレベルでは表示されないアイテムを取得します。これは "client X got item Y"のようなサーバーに送信され、サーバーはそれを受け入れます。
単純な治療法はもちろん、ゲームクライアントをサーバーのAPIとして扱うことです。その後、ユーザーは好きなだけトレーナーや他のメモリ操作を使うことができますが、サーバーはあなたがそれを行うことはできないと言います。サーバーをデータベースと見なして、その上にゲームルールがあるものを照会することができます。例
- クライアントのために
:ゲーム
- Clientを起動します。サーバー
- クライアントに接続します。サーバー
- ユーザーから利用可能金額を照会: を無限にお金をセットトレーナーを可能にします
- クライアント:server.buyItem( '非常に高価')
- サーバー:gamestateを確認します(ユーザーは今購入できます)。プレイヤー[0] .money - >ボーナスなしをチェックします。
- クライアント:server.buyItem( 'これを取得できます')
- サーバ:gamestateを確認します(ユーザーは今購入できます)。プレーヤー[0]を確認します。 player [0] .items.add( 'これを得ることができます')これはプレーヤー[0] .moneyからのコストを削減します。次に、クライアントsend(player [0]、 'items'、 'this get')に通知します。 send(プレイヤー[0]、 'money'、プレーヤー[0] .money)。
もう1つの方法は、クライアントの動きを記録し、サーバーが再生するハイスコアサーバーに送信することです。もちろん、これはレコードが非常に大きいことにつながります。
これはあなたのブログですか? – shoosh
+1 - 多分あなたの質問の第2部分を答えに移すのですか? –
これが無効な質問である理由について、いくつかのサブテキストがありますか?クローザーとダウンボッター、私を手がかりにしてください... –