クライアント側のハッキングに抵抗するビジュアルを使用してマルチプレイヤークローキングを実装するにはどうすればよいですか?


19

私は、マルチプレイヤーゲームにステルスを実装することを考えてきました。これはMOBAスタイルのゲームなので、League of Legends(LoL)とHeroes of the Storm(HotS)を考えてください。複数のクライアントが単一のサーバーに接続し、すべてのクライアントにゲームの状態をブロードキャストします。クライアントは入力データをサーバーに送信します。サーバーは無効なコマンドに遭遇すると入力データを拒否する可能性があります。

さて、ステルスの実装が異なるため、これらのゲームを意図的に言及します。LoLには2つの状態があります。完全に表示されるか、完全に表示されないかのいずれかです。一方、HotSは、空中にきらめくようにステルスを実装します。

ヒーローズオブザストームインビジビリティ

私はこれがきちんとしたメカニックだと思います、それはあなたの環境に注意を払って促進/報酬を与えるからです。しかし、これはマルチプレイヤーゲームであるため、これが容易に悪用される可能性があることを認識しました。

「LoL」方式でステルスを実装すると、他のクライアントへのプレーヤー座標の送信を停止できます。プレイヤーのキャラクターがステルスを破ると、サーバーはその場所を再びブロードキャストできます。ただし、HotSモデルでは、キャラクターが動き回っている空気中にキラキラが見えます。これは、サーバーがプレーヤーの場所を他のクライアントに送信する必要があることを意味します。つまり、テクスチャやモデルを変更したり、ゲームコード自体を変更したりすると、マントのメカニズムが役に立たなくなる可能性があります。これに関するHotSボードのスレッドを次に示します。

私の質問は、巧妙なプレイヤーがゲーム(データ)を変更して「システムを破る」ことができるという問題を抱えることなく、クローキングを実装する方法があるかどうかです。これは可能ですか?できない場合、このメカニックを持つ他のマルチプレイヤーゲームはこれをどのように処理しますか?不可視のLoLスタイルだけが変更不可能ですか?

サーバーに偽の「クローク」ロケーションを時々送信させることを考えましたが、これは注意を払っている公正なプレイヤーにも害を及ぼすため、そうはなりません。


関連するのはlinkですが、私は他の人(サーバーで処理可能)にぶつかるのではなく、クローキングされたユニットを表示しています。
アンダーフロー

これは悪い提案ですが、サーバーですべてのグラフィカルレンダリングを実行してから、各プレーヤーの画面をクライアントにブロードキャストできます。入力のみを送信し、出力のみを送信します。クライアントは、ビデオを表示し、オーディオを再生するだけの薄いシェルです。
-user137

フィリップはそこで非常に良いアイデアを得ました。バウンディングボックスとスキルショットなどとの交差点に注意する必要があることを付け加えます。バウンディングボックスを送信する場合、スマートコーダーはどのキャラクターが見えないかをリバースエンジニアリングできます(異なるヒーローがいる場合)。ヒット時にトリガーするエフェクトがある場合、ボックスまたは少なくともエフェクトの位置とスケールなどを送信する必要があります。より抽象的なものはすべてもっと多いことに注意してください
-Greaka

プレーヤー座標の送信を停止することで、実際にLoLスタイルのクローキングを実装することはできません。キャラクターが描かれなくても、他の方法でマップ(および他のプレイヤー)と対話できる必要があります。しかし、「検出可能な」ステルス(フットプリント、きらめきなど)を実装すると、ゲームを改造するという問題を乗り越えるためのインセンティブの多くが取り除かれます。クローキングされたキャラクターを検出して先に進む方法を学びます。
スプーニエスト16

2
@TheSpooniest:プレイヤーの座標を送信するのをやめて、LoLスタイルのクローキングを実際に実装することはできませんか?プレイヤーAが非表示で、サーバーがプレイヤーBとCに座標を送信しなくなった場合、サーバーはAの上にBのキャラクターを移動することを拒否することにより、プレイヤーAとBの衝突を処理できます壁に)。A(まだ不可視)がBにスキルを発動する場合、サーバーは単に「Aからd方向に位置x、yから発動したスキル」をBおよびCに送信できます
アンダーフロー

回答:


20

悪用を容易にすることなく、きらめきの効果を実装することはできません...しかし、誰かが周囲にいることを示す間接的な手段、目に見えるプレイヤーにも適用される手段を使用した場合はどうでしょうか?

たとえば、プレーヤーが足跡を残し、プレーヤーの位置に関係なくサーバーから「フットプリント作成」メッセージが送信された場合はどうなりますか?すべてのプレイヤーはフットプリントを残しているので、アリーナを覆い、個々のプリントを目立たなくすることなくフットプリントモデルをより見やすくすることはできませんが、プレイヤーがフットプリントを目に見えるキャラクターなしで表示すると、誰かがそこにいることを知っています。

また、小さな小石がぶらぶらしたり、誰かが歩いているときに草をガサガサ音を立てたり、誰かが水の中を移動したときに現れる波紋のようなこともできます。「サイン」が特定の場所または素材にのみ適用される場合、これにより、目に見えないキャラクターを慎重に移動させ、自分の位置を譲ることを避けるための戦略を追加できます。


without making it easy to exploit->これは、この特定のものだけでなく、すべてのゲームメカニクスに適用されます
S.タリクチェティン

12
最後の段落について:目に見えないプレイヤーがこれらのことを引き起こす唯一のものである場合、あなたはハッキングに役立つ情報を提供していることに留意してください。ただし、ランダムなイベントや他のプレーヤーのアクションを介して、それぞれをトリガーすることもできます。それはハックをそらすノイズを生成し、環境をはるかに生き生きと動的に見せるための素晴らしい副作用があります。
フィリップ

2
これは非常に興味深いアイデアです、ありがとう!「足跡」の場合、これはステルスプレイヤーにターゲット(古い)足跡を「歩き回る」報酬を与え、他の人に忍び寄る(つまり、後ろから来る)こともできます。誰かが足跡のテクスチャ(またはあなたが持っているもの)をより明確にしたとしても、それらをステップインすると(おそらく)表示期間が更新されるだけです。
アンダーフロー

3
もちろん、この場合、どのトラックが新しいかを示すためにクライアント側のハッキングを行うことができます。
-Muhd

3
クライアント側のハッキングは、プレーヤーの位置に対応しない地域で作成されたフットプリントを強調表示する可能性があります。
エドワードコフィー

31

このサイトにあるマルチプレイヤーゲームでの不正行為の防止に関する他の無数の質問を見ると、クライアント側の不正行為を防止するための技術的な手段がないことが簡単にわかります。

できることは、クロークされたエンティティに関する情報を少なくすることです。歪み効果をレンダリングするためにクライアントが知る必要があるのは、その位置に何かが隠されていることだけです。しかし、それが何であるか、どのくらいの健康状態が残っているか、今何をしているのかなど、それについて特定のことを知る必要はありません。ゲームによっては、それだけでプレーヤーにとってゲームを変える情報不足になる可能性があります。


6
「少ない情報」には「少ない正確​​な情報」も伴います。サーバー側に保持される単一のランダムな方向に(たとえば)10フィートのオフセットを選択し、代わりにその場所を送信します。他の偶然の出会いでは、偽のきらめくキャラクターを追加します。
キータ-モニカを

2
@Keetaを使用する場合は、信号フィルターまたはエンティティの方向へのある種のランダムウォークを使用して、スムージング(毎回完全にランダムな値を生成しない)を行います。過度に不安定な場合は、目で見て明らかです。したがって、プレイヤーが移動中に隠れる能力と、静止したまま隠れる能力のバランスを取る必要があります。後者は、より効果的です。
ネイトダイヤモンド

@NateDiamondはい、正確に。そのため、サーバーが実際の場所の特定のオフセットを作成すると述べています。次に、実際のアクタが移動すると、オフセットにより揺らめきも移動します。きらめきが動くのを注意深く観察することで、実際の俳優がどこにいるかを推測できますが、それには多少の手間がかかります。不可視性が現実であり、実生活でこのきらめきを引き起こした場合、この余分な焦点は、不可視性を克服するためにまさに必要なものだと思います。
キータ-モニカを

ウォールハックに耐えるサーバーを作成するためのioquake3の興味深い変更があり、実際に機能したのはこれだけです。プレーヤーAがBの位置情報を受信するかどうかを決定する前に、プレーヤーAが別のプレーヤーBを見ることができるかどうか(つまり、壁や視界を遮る他の分離がないか)をサーバー側で確認することでした。これは、役に立たなかったため、ウォールハック。一番下の点は、誰もデータを操作しないようにする唯一の方法は、データをまったく提供しないことです。
貪欲な

@gaborousは、特にすべてのティックのすべてのプレーヤーにとって、実行するのに高価なチェックです。これは非常に価値のある費用かもしれませんが、開発者はサーバーのコストと能力を考慮する必要があります。
ネイトダイヤモンド

1

はい、クライアントに送信する情報は、意図したよりも明確に表示できます。しかし、ここにトリックがあります:

影響を軽減する

確かに、クライアントは何らかの情報を持っているかもしれませんが、共有したい情報とプレイヤーがそれで何ができるかについて慎重に考えることで、少なくともクライアントハックの影響を緩和できます。

1.プレーヤーは何を観察しますか?

  1. 特徴のあるキャラクターがその場で表示されます。この場合、クライアントはすべての情報を取得し、ハッキングはマントを簡単に元に戻すことができます
  2. その場で何かを見ます:この場合、クライアントは位置情報を持っています。場所を明らかにすることができますが、他の情報はまだ非表示にする必要があります。
  3. あなたは何かを観察しますが、それはその場にありません

a。あなたは何かを見ますが、それはその場ではありません(橋や茂みは動きますが、どこに向けるべきかわからないので、足跡は2秒の遅れでしか見えなくなります):この場合、クライアントは何か、しかしどこ/何を正確に。

b。別の方法で何かを観察します(何かがエリア内にある場合は音、方向の有無にかかわらずレーダーのような接近表示)

質問のスクリーンショットは、おそらく限られた情報に基づいているため、1〜2のように見えますが、まだいくつかの情報を提供できるアウトラインが表示されます。

2.プレーヤーは何ができますか?

誰かが座標XYにいると思うとしたら、何ができますか?典型的な選択肢は次のとおりです。

攻撃

  1. まるで彼がクロークされていないかのように彼を攻撃することができます
  2. AOA攻撃/トラップを使用して彼を攻撃することができます。
  3. 積極的に彼のクロークを解除し、その後のみ攻撃することができます
  4. 彼を攻撃することはできません

引越し

  1. あなたが動き始めると、あなたはエンジンが不思議なことにあなたを迂回に連れて行くことに気付く
  2. 通常は目標に向かって歩き始めますが、隠れたキャラクターに到達すると、彼の周りを移動したり、停止したりします
  3. 隠されたキャラクターにブロックされない

ルート選択が通常クライアント側で行われる場合


ご意見ありがとうございます。いずれにせよ、目に見えない文字に人々を「ぶつける」ことを計画していました。それはサーバーが計算して処理できるものだからです。サウンドのアイデアはきちんとしており、微妙な方法でサウンドを変更する(緊張、ジョーズだと思う)のはクールですが、たとえば、大きな音のファイルやSONE ONE CLOSE IS STEALTHEDという音声ファイルに簡単に置き換えることはできませんか?
アンダーフロー

1
「a」の線に沿った別のアイデア:きらめきは、クロークされたプレイヤーの近くのどこかにランダムに表示されますが、正確な場所には表示されません。サーバーがシマーの位置を送信するだけの場合、クライアントは実際にはそれほどリバースエンジニアリングを実行できません。実際、クロークされたプレイヤーが完全に見える場合でも、これはメカニックとして機能します。
ジェザモン

1
@Jezzamonはい、ある種の「変位」メカニックもクールです。ただし、マントの状況では機能しません。きらめくために目を光らせているプレイヤーを罰したくありません。たとえば、スキルショットなどを狙うには、きらめく「正確な」場所が必要です。
アンダーフロー

-2

波及効果は、シェーダーコードを介して実行できます。このモードではテクスチャの使用を無効にできるため、単純なテクスチャの変更は問題になりません。

3Dでは、モデルが登場すると、シェーダーを屈折をシミュレートするものに変更し、モデルの表面だけを使用して、色を破棄することができます。どうにかしてモデルを交換しても、効果は残ります。

プリコンパイルされたシェーダーの変更はゲームコードの変更と同じくらい難しく、ゲームファイル内の一部のテクスチャルックアップよりも1レベル難しいと思います。


3
実際の質問を見逃しました。そのような歪み効果を技術的に作成する方法ではありませんでした。プレーヤーに公開できる有用な情報を提供せずに、クライアントにレンダリングする場所の情報を提供する方法についてでした。
フィリップ

1
さて、私はこれに対処しますWhich means that players that change the texture or model or even the game code itself could render the cloak mechanic useless。そしてなぜ質問を見逃したのかわかりませんwhether there is some way to implement cloaking (with a 'shimmer', à la HotS), without having the issue that crafty players can modify the game (data) 。A:きらめきで覆い隠す、B:単純なテクスチャの変更よりも修正が難しい。実際にレンダリングする場所は別の側面です。リップル効果を周囲に適用する必要があるのが位置だけである場合、それはプレーヤーに送信される唯一のデータでなければなりません。
火星

2
私は過去にクライアント側のハックを開発しました。シェーダーを変更するのが難しいという概念は、非常に誤解を招くものです。はい、それは最も基本的な攻撃の形を阻止しますが、まともなGoogle-fuを持っている人なら誰でも午後にそれを見つけることができます。さて、あなたのゲームをきちんとしたハッカーと比較し、彼らがクライアント側のチートな良さで一杯になるまでにどれくらい時間がかかるかを見てください。

クライアント側が悪用される可能性があるため、ここのすべての回答にコメントをコピーして貼り付けてください。コードを変更するのはそれほど難しいことではないことを知っています(ボット、ハック、AAAゲームにはmodがあります)が、シェーダーリップル効果の特定の指示を探すよりも、ゲームファイルで半透明のテクスチャを検索する方が簡単だと思います。もちろん、シェーダーファイルがプレーンテキストでほとんど圧縮されていない場合は、子供でも壊れる可能性があります。私は本当にそれが実際のソリューションを提供して、それが悪いのか分からないsecurity.Iのまともなレベルを提供するために、一つの「プレイヤーに渡さ少ないデータ」と組み合わせることができる答えを、与えた
火星

@Thebluefishは公平であるため、開発者は不正行為をやめようとするリソースの支出から遠ざかり、代わりに、不正行為を検出してプラットフォームから問題のあるプレーヤーを完全に禁止する非常に複雑で不明瞭でよく構築された方法にリソースを費やしました...(明らかにSteamのVACなどのシステムを参照してください)。
Trotski94
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.