あなたが見た初心者の間違いとその治療法は何ですか?
何度も発生するのは、クライアントがサーバーに対してまったくチェックされていないことです。
例えば:
- ユーザーは、フラッシュ ゲームのソースを逆コンパイルするか、ネットワーク トラフィックをリッスンして、ハイ スコア データの行き先を確認し、ゲームをプレイしていなくても偽のハイ スコアをそこに送信します。
- ユーザーはトレーナーを使用し、現在のレベルには表示されない可能性があるアイテムを取得します。これは「クライアント X がアイテム Y を取得しました」のようにサーバーに送信され、サーバーはそれを受け入れるだけです。
もちろん、簡単な解決策は、サーバーへの API としてのみゲーム クライアントを処理することです。その後、ユーザーはトレーナーやその他のメモリ操作を好きなだけ使用できますが、サーバーはそれができないと言います。サーバーは、ゲームのルールを基にクエリを実行できるデータベースと考えてください。
例えば
- クライアント:ゲーム開始
- クライアント: サーバーに接続します
- クライアント: サーバーから利用可能な金額を照会します
- ユーザー:お金を無限に設定するトレーナーを有効にします
- クライアント: server.buyItem('非常に高価')
- サーバー: ゲームの状態を確認します (ユーザーは今すぐアイテムを購入できます)。player[0].money をチェック -> ボーナスなし。
- クライアント: server.buyItem('can get this')
- サーバー: ゲームの状態を確認します (ユーザーは今すぐアイテムを購入できます)。player[0].money をチェックします。player[0].items.add('can get this') これにより、player[0].money からのコストが削減されます。次に、クライアントに通知します send(player[0], 'items', 'can get this'); send(プレーヤー[0]、「お金」、プレーヤー[0].お金)。
もう 1 つの方法は、クライアントの動きを記録し、それをサーバーが再生するハイスコア サーバーに送信することです。もちろん、これはその記録が非常に大きいことにつながる可能性があります。