数百人のプレイヤーによるサーバー側の物理シミュレーション


9

私は現在、物理をサーバー側でシミュレートしたいシングルプレイヤーの物理指向のゲームに取り組んでいます。これは、ゲームにリーダーボード、永続的なプレーヤーの進行状況などがあり、あらゆる種類の不正行為を防止したいためです。基本的には純粋なクライアントサーバーアーキテクチャであり、クライアントは「ダム」であり、サーバーが表示したいものだけを表示します。

しかし問題は、ゲームがおそらく数百人(おそらく数千人)の人々によって同時に行われることです。何百もの状態を同時に維持する必要がある場合、サーバーの処理能力が失われる可能性が最も高いため、これは私に関係しています。

すべての物理シミュレーションをクライアント側に移動しても問題はありませんが、クライアントシミュレーションの結果が有効かどうかを検証する方法が本当に必要です。しかし、私にはその方法がわかりません。

シミュレーションサーバー側をときどき実行して、クライアントがまだ公平に機能しているかどうかを検証することを考えましたが、サーバーにできるだけ負担をかけないようにしたいのです。

物理学は、Glenn FiedlerよるGDC 2011デモとほぼ同じくらい複雑になるでしょう。ただし、常に衝突するリジッドボディが1つのシーンに含まれ、すべてが同時に表示されます。

Web上のほとんどのリソース(ここでも、Glenn Fiedlersサイトは素晴らしいものです)が小規模なネットワーク化された物理学(Haloのような30プレイヤーのFPSなど)について話すので、私はこの特定のケースへの回答を得るのに苦労しています。

この件に関するアドバイス、ウェブサイト、論文などは非常にありがたいです。

私が回答したい質問の要約:

  • クライアントサーバーモデルはどの程度実現可能ですか?サーバーの処理能力に関する懸念は正当で根拠がありますか?
  • サーバー上のクライアントによって実行される物理シミュレーションを確実に検証することは可能ですか?もしそうなら、どうですか?

より多くの人が自分の考えを投稿してくれることを期待して、この質問はもう少し長く開いておきます。すでにやった人に感謝します!
Lennard Fonteijn、2012年

異なるクライアントが独立している限り、水平方向のスケーリングに問題はありません。EC2などを使用し、必要に応じて容量をオンラインにします。
ipeet

1
シングルプレイヤーゲームで誰かがカンニングした場合の問題はどこですか?ただ彼らに任せて、リーダーボードのアイデアを落とし、楽しいシングルプレーヤーゲームの作成に集中してください
Maik Semder

2
「サーバー上のクライアントが実行する物理シミュレーションを確実に検証することは可能ですか?」はい、それを検証することは可能ですが、以下のコメントを読んでください:RLのお金をトップスコアに与える計画、そしてそれはダーツのゲームに似ています。ここでの問題は物理学を検証することよりも少なく、これは簡単です。問題は、コンピュータープログラムにスローして完全なスコアを与える詐欺師がいることです。
Daniel Carlsson、2012年

共有された世界でサーバーで検証された物理学は完全に可能です。DCUOはこの良い例です。「サーバー」は実際には「サーバーボックスの束」を意味しますが、「サーバー」はどこかに座っている単一のボックスであると表現しているようです。現在、同じ物理空間で数千の独立した俳優をシミュレートすることはできないため、それについての議論はありません。あなたができることは、何千人ものプレイヤーを、相互作用しない独立したシミュレーションの島に広げることです。
Patrick Hughes

回答:


5

他のユーザーのクライアント側の送信を検証し、送信が無効に見える場合はクライアントにサーバーに報告させることができます。

次に、アクションを実行できます(不正行為者を禁止するか、虚偽の報告を偽造した者を禁止します)。その提出が本当に無効かどうかを自分で確認するには、特別なクライアントなどを使用できます。


3
それは実際にはかなり賢いです!それを考えたことはなかったでしょう、明らかに他の誰かが実行しているクライアントがシミュレーションをだましている場合、少なくとも2つまたは3つのクライアントがシミュレーションを実行する必要があります。この場合、すべてのクライアントが奇妙なことを報告した場合、サーバーは常に最終シミュレーションを実行できます。 。
Lennard Fonteijn、2012年

1

あなたのゲームはシングルプレイヤーです、他のプレイヤーとの唯一の「相互作用」はリーダーボードです。インスタンスを生成して、送信ごとにサーバー上のシミュレーションをチェックすることができます。物理が30クライアントを超えて同じであることを確認するためのすべてのトリックは必要ないため、すでに持っている以上のリソースは必要ないと思います。物理学はすでに働いています:)

すべての結果をチェックするのは少々やり過ぎです。誰かがスコアをリーダーボードに送信するたびにシミュレーションをサーバーに圧縮して送信し、自分のサーバーの上位5%のスコアのみ、または上位1%または賢いのは新しいハイスコアのみをチェックし、#1よりも優れていない全員がおそらく不正行為のないシミュレーションを持っていると想定することです。

あなたのシミュレーションが似ているか、セットアップされていて、相互作用していないか(確認が簡単)かどうか、またはプレイヤーが実行中にシミュレーションと相互作用できるかどうかはわかりませんが、異なるフローティングになるように物理を行うようにしてくださいポイント表現は混乱を招くことはなく、有効な実行を無効に見えます。


ゲームプレイ自体の詳細については知りたくありませんが、私のゲームをダーツゲームのゲームと比較することができます。ひとたび狙いを定めて投げると、物理が引き継がれ、それについて変更できることは何もありません。もう。この知識はあなたの答えを変えますか?
Lennard Fonteijn、2012年

いいえ、それは物事を変更しません:)。サーバーにリプレイを保存し、疑わしいもの(たとえば新しいハイスコア)のみをチェックする
Roy T.

1

サーバーで物理をシミュレートすることは非常に悪い考えであることを保証できます。主な問題はサーバーの負荷ではなく、応答性です。クライアントの応答性は信じられないほど悪くなります。プレーヤーがボタンを押すと、シミュレーションの結果を取得する前にサーバーに往復する必要があります。私は過去にこれのバリエーションを行ったことがあります(ほとんどがボタンを押すだけです)。結果はきれいではなく、それを回避する可能性のある非常に遅いゲーム(およびそのような場合でも、応答性の欠如は大きな問題です)。

このタイプのシナリオが次に現れるときに試すつもりの優れたスキームは、プレーヤーベースの非常に小さなサブセットをプレーヤーに選び、サーバー側で少しの間シミュレーションして、結果を彼らと比較することです。彼らの知識なしで。それらが大幅に逸脱している場合(ある程度の発散を期待する必要があります)、それらを潜在的な詐欺師として分類し、確認のためにしばらくシミュレーションを続けます。あなたが得るものは、ネットワーク条件などの影響を受けて、サーバーと比較して合法的なプレーヤーがどれだけ分岐するかによるある種の曲線であり、詐欺師がこの曲線の外にあることがすぐにわかります。このシステムには次の利点があります。

  • 自動化
  • 応答性を犠牲にしない
  • プレーヤーベースの非常に小さなサブセットをシミュレートするだけなので、負荷は管理可能であり、スケーラブルになります(負荷が高い場合は、シミュレーションするプレーヤーの数を減らすことができます)。
  • 私が考えることができるすべてのゲームに適用可能、非常に再利用可能

したがって、ロイのように、基本的には次のように言います。クライアント側に保持し、クライアントがスコアを送信するときに「リプレイ」を保存し、それらのリプレイをたまにしか検証しない(すべてではなく、小さな割合)。クライアントがクレジット支払いを提出したスコアに基づいて行われた場合はどうなりますか-プレーヤーの進行部分、クレジットはリアルマネーで購入することもできます(!!!)-それでもこのアプローチをお勧めしますか?不正行為が過剰なクレジットを与え、たまにしか検証しない場合、基本的にお金を失うことになります。スコアが特定のしきい値を超えている場合は、おそらくフラグを立てることができますが、もっと良い方法はありますか?
Lennard Fonteijn、2012年

物理エンジンが決定論的であり(そうでなければならない)、サーバーがクライアントと同じ開始状態と入力を使用してシミュレーションを実行する場合(実行可能でなければなりません)、結果は妥当な浮動小数点エラー境界内(重要ではない)にあるはずです。ランダムな効果があり、RNG状態を渡すのが現実的でない場合でも、乱数を渡してチェックに使用できます(ランダムなロールを回避することでゲームプレイに大きな違いがある場合は、それらの分布をチェックすることもできます)。 。
ipeet

不正行為はもはやハイスコアのリストに加わるのではなく、お金を稼ぐためです。お金が関係している場合は、より多くのセキュリティが必要です。私はあなたを助けることができません。
ロイT.

@RoyT。クレジットに基づいてお金を支払っていない場合でも、とにかくそれを行うでしょう(誰かが私が推測していると誤解していますか?)。私はゼロトレランスポリシーを使用するつもりなので、検証のために再生ファイルをバッチ処理します。本当に疑わしい場合は、行動を起こします。
Lennard Fonteijn、2012年

1

ダニエルが述べたように、ここでの大きな問題は、プレイヤーのためにアクションを実行するプログラムになるでしょう。プレイヤーが脳神経外科のために通常解決される精度を備えたロボットアームであった場合、ゲーム内の物理学の傾斜は必要ありません。


少しわかりにくいかもしれません。私のゲームでは、ゲームを完了すると仮想クレジットが付与されます。これらのクレジットを使用して、プレイする新しいコンテンツのロックを解除できます。また、リアルマネーを使用してクレジットを購入し、コンテンツをより早くロック解除することもできます(Pay2Winではないことに注意してください。クレジットに基づいてリアルマネーを支払うつもりはありません。とはいえ、ダーツは、ゲーマーが剛体の状態にどの程度影響を与えるかを説明するための単なる隠喩であり、「エイムボット」を恐れることはありません。
Lennard Fonteijn、2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.