web-dev-qa-db-ja.com

ビデオゲームボット?

特に子供の頃にプログラミングを始めるきっかけになったので、いつも疑問に思っていたことが、ビデオゲームボットのしくみでしたか?さまざまな方法がたくさんあると思いますが、MMORPGの自動化についてはどうですか?それともFPSタイプのボットですか?

プレイヤーが作った自動化ボットについて話している。

30
cam

ゲームを「ボット」するには、プログラムで2つのことを実行できる必要があります。ゲームで何が起こっているかを検出し、ゲームに入力を提供します。

ゲームで何が起こっているかを検出することは、2つのうちでより困難になる傾向があります。これを行うためのいくつかの方法は次のとおりです。

  • Screen-Scraping この手法は、画面上の画像をキャプチャして解析し、敵、プレーヤーのステータス、パワーなどを探しますアップ、ゲームメッセージ、タイムレコーダーなど。これは特に難しい方法です。 [〜#〜] ocr [〜#〜] テキストの処理にテクニックを使用できますが、テキストが(無地のUI要素ではなく)ゲームの世界の上に書かれている場合) 、常に変化する背景により、正確で一貫性のある結果を得ることが難しくなる場合があります。単一のオブジェクトが存在する可能性のある多くの異なる位置と方向が原因で、画面上でテキスト以外のオブジェクトを見つけることは、特に3Dの世界ではさらに困難になる可能性があります。
  • オーディオキュー一部のゲームでは、アクションとイベントに独自の効果音が付いています。ゲームのオーディオ出力を監視し、関連する効果音の記録と照合することにより、これらのイベントを検出することが可能です。一部のゲームでは、プレーヤーがイベントに独自のサウンド効果を提供できるため、簡単に聞き取り、フィルターできるように設計されたサウンド効果を使用できます。
  • メモリの監視ゲームの内部動作がよく理解されている場合は、ゲームのメモリ領域を調べることでゲームの状態を監視できます。コンソールシステム用のいくつかのチートツール( Game Genie など)は、この方法を使用します。ゲームが更新するメモリを検出することにより、ゲームが実行していることを検出できます。一部のゲームは、この脆弱性を無効にするために、起動されるたびに使用するメモリの場所をランダム化します。
  • パケット分析適切なドライバを使用すると、ゲームのデータパケットがネットワークカードに送信または取得されるときに、それらを傍受できます(オンラインでプレイするゲームの場合)。 分析 これらのパケットは、ゲームクライアントがサーバーと通信しているものを明らかにできます。サーバーは通常、プレーヤー/敵のアクションを中心に展開します。
  • ゲームスクリプト一部のゲームには、組み込みのスクリプトインターフェイスがあります。使用できる場合、これはゲームソフトウェアが実行するように設計されているため、通常はこれが最も簡単な方法です(以前の方法はすべて「ハック」として通常カウントされます)。一部のスクリプトは、ゲーム内で(コンソールまたはアドオンシステムを介して)実行する必要があり、一部のスクリプトは、公開されたAPIを介してゲームを通じて通信する外部プログラムによって実行できます。

通常、ゲームに入力イベントを生成する方が簡単です。いくつかの方法は次のとおりです。

  • メモリ "ポーキング"上記のメモリ監視セクションと同様に、メモリポーキングは、ゲームのメモリスペースに直接データを書き込む行為です。これは、ゲームジニーがチートコードを適用するために使用する方法です。現代のゲームの複雑さを考えると、これは非常に困難な作業であり、ゲーム全体をクラッシュさせる可能性があります。
  • 入力エミュレーション人間との直接的な対話の代わりに、「偽の」キーボードまたはマウス信号を生成できます。これは、 AutoIt などのツールを使用してソフトウェアで実行できます。コンピュータのUSBまたはPS/2ポートに接続し、システムがキーボードのように見えるデバイスなどのハードウェアハックも使用できますが、代わりに、コンピュータから受信した信号に基づいて(たとえば、シリアルポート)。これらの方法は、ゲームが検出するのが難しくなります。
  • ゲームスクリプティング上記のように、一部のゲームはプログラムで制御するための組み込みメソッドを提供し、これらのツールを利用することは通常最も簡単です(ただし、おそらく最も強力な)テクニック。

ゲームで「ボット」を実行すると、通常、ゲームの利用規約に違反することになり、一時停止、禁止、またはそれ以上の事態につながる可能性があります。一部の法域では、これにより刑事罰が科せられる場合があります。これは、ゲームの組み込みスクリプト機能を使用するためのもう1つの利点です。ゲームソフトウェアの一部となるように設計されている場合、ゲームパブリッシャーは、その使用を禁止することはほとんどありません。

49
bta

簡単なMMORPGボットを自分で書いた後、 AutoHotkey を使用しました。

  • これは、ユーザー入力をシミュレートするための多くのメソッドを提供します。自分でC++で動作するものをプログラムするのは面倒です(またはAutoHotkeyのソースを調べてください)。
  • ゲーム画面(DirectX)でも、画面からピクセルパターンを直接検索できます。

つまり、画面で敵の名前(ゲームのフォントを含む画像として保存されている)を検索し、スクリプトはその下の数ピクセルをクリックして攻撃しました。また、低すぎる場合は、ヘルスバーとポットを追跡します。

とてもささいなこと。しかし、私もAutoHotkeyを使用して作成されたWoWボットを知っています。そして、私は see 他の多くの人々が同じ考えを持っていました(私のものはWoWのためではありませんでしたが、おそらく違法でもありました)。

より高度な手法 画面をキャプチャせずに直接 ゲームのメモリを読み取る 。これを機能させるには、多くのリバースエンジニアリングを実行する必要があります。そして、ゲームが更新されると動作を停止します。

12
Meinersbur

個人は毎日どのように行動していますか?

これは、ゲームのAIが解決する問題の一種です。

エンティティに何をしてほしいですか?それを行うようにエンティティをコーディングします。モンスターにプレーヤーのアバターを追跡させたい場合は、モンスターはアバターに向かい合って、それに向かって移動する必要があります。そのモンスターが適切な距離内に入ると、プレーヤーのアバターを噛むことを選択できます。この選択は、AmICloseEnough(monster, player);のように単純な場合もあれば、さらに複雑な場合やランダムな場合もあります。

FPSのボットは、完璧にするのは簡単ですが、楽しくするのは簡単ではないので、正しく理解するのが難しいです。例えば。プレイヤーがどこにいるかを常に正確に把握しているため(gPlayer.GetPosition())、毎回プレイヤーの頭を撃つことは簡単です。ボットを人間のように動かすには、少し「芸術」が必要です。

5
dash-tom-bang

それはAI(人工知能)と呼ばれ、複製するのはそれほど難しくありません。ゲームのプログラミング言語の一連のルールとコマンドがうまく機能します。たとえば、FPSボットは、プレーヤーの体の座標を取得し、その座標を狙って敵ボットの銃を設定し、特定の範囲内で射撃を開始することで機能します。

0
BRampersad

FPSスタイルのボットについては、Unreal Development Kitをご覧ください。私が理解しているように、これには実際のゲームのソースコードがたくさんあります。

http://udn.epicgames.com/Three/DevelopmentKitHome.html

0
dash-tom-bang

btaはとても良い返事をくれました。私は、さまざまな方法がゲーム会社によるさまざまな検出手段の影響を受けやすいことを付け加えたかっただけです。メモリモニタリングまたはパケット分析によるゲームクライアントへのハッキングは、通常、より簡単に検出できます。あなたは非常に簡単に捕まることができるので、私は一般にそれをお勧めしません。

入力エミュレーションで使用される画面スクレイピングは、一般的に、ゲームをボットして捕まらないための最も安全な方法です。多くの人々(私も含む)は何年も問題なくそれをやっています。

さらに、ゲームで何が行われているのかを検出してから入力を提供するまでのステップを追加するために、ゲームによっては、ゲームに提供する入力の種類を決定する前に大規模な計算が必要になります。たとえば、敵を攻撃するときに送信する船の数を計算しなければならないゲームがありました。これは、私が持っている船の数、船の種類、および誰とどのような種類の敵に基づいていました。通常、ほとんどすべてのプログラミング言語で計算できるため、計算は通常「簡単な」部分です。

0
Ryan