9

Magic: TheGatheringOnlineの取引ボットをコーディングしたいと思います。このボットは、誰かが取引を申し出て受け入れ、他のトレーダーから入手できるカードを調べて(情報は画面に表示されます)、他の同様の機能を実行するまで待つ必要があります。いくつか質問があります。

  1. 誰かが取引を提供していることをどうやって知ることができますか?
  2. 他のトレーダーがカードを持っていることをどうやって知ることができますか(情報は写真に保存されています)?

私は今それを行う方法を想像することはできません、私はそれを経験したことがありません、今まで私は私の物理学の必需品のためにコンソールプログラムだけをコーディングしてきました。

4

2 に答える 2

12

まず、一部のオンラインゲームでは、特定のプレーヤーに不当な利点を与える可能性があるため、ボットを禁止していることに注意してください。MTGOの利用規約は、サービスに悪影響を与える可能性のあるものには制限を設けていますが、これについては何も述べていないようです。また、将来的にAPIを追加する可能性もあるのことで、自動化の考え方に反することはないようですが、現時点ではサポートしていません。ここでは注意深く踏みますが、有害または虐待的でない限り、ボットを作成しても問題ないようです。これは法律上のアドバイスではありません。MTGOを実行している人々に許可を求めることをお勧めします。編集これを書いた時から、すでにボットがたくさんあることが指摘されているので、ボットを書くのに問題はないはずです。

利用規約で禁止されていないが、APIがない場合は、何が起こっているのかを検出し、ゲームを自動的に制御する方法を見つける必要があります。ポーカーボット(アーカイブされたコピー)の作成に関するかなり優れた一連の記事があります。これには、DLLをアプリケーションに挿入し、画面をスクレイプし、アプリケーションを制御する方法に関する優れた情報が含まれています。それはあなたにこの種のことをするための出発点を提供するかもしれません。

また、他の人がこれを行うためにすでに作成したツールを探すこともできます。既存のMTGOボットがいくつかあるように見えますが、それらはすべて少し大雑把に見えます(パスワードを盗んだという報告がいくつかあります)ので、そこで注意してください。

編集

この回答はまだ賛成票を集めているように思われるので、おそらくもっと役立つ情報で更新する必要があります。これを書いた後、私はSikuliと呼ばれる素晴らしいUI自動化システムを見つけました。これにより、GUIを自動化するプログラムをPythonで作成できます。ボタン、カード、その他のUI要素を非常に簡単に認識できるようにする画像認識機能が含まれています。スクリーンショットを撮り、それを切り取って興味のあるものだけを含め、ファジーな画像マッチングを行います(背景などを変更してもマッチングが失敗しないようにします)。これらのスクリーンショットをソースコードに直接埋め込むことができるカスタムIDEも含まれているため、コードが探しているものを正確に確認できます。これが例ですドキュメントから(コードフォーマットの謝罪、StackOverflowの制限されたHTMLのサブセットを考えると、コード内で画像をインラインで実行することは簡単ではありません):

def resizeApp(app, dx, dy):                      
    switchApp(app)                                
    corner = find(Pattern(enter image description here).targetOffset(3,14)) 
                                                  
    drop_point = corner.getTarget().offset(dx, dy)
    dragDrop(corner, drop_point)                  
                                                  
resizeApp("Safari", 50, 50)                      

これは、デバッグしているプロセスにDLLを挿入するという、上記のリンク先の記事で説明されている手法よりもはるかに簡単に開始できます。Sikuliは完全にUIレベルで実行されるため、自動化するプログラムを変更したり、内部の変更によってスクリプトが破損したりする心配はありません。

少し苦手なのは、テキストの処理です。OCR機能を備えていますが、それほど優れているわけではありません。ただし、テキストが選択可能な場合は、テキストを選択してコピーし、クリップボードを直接見ることができます。

優れたAPIやテキストベースのインターフェースなしで何かを自動化するボットを作成する場合、Sikuliはおそらく私が到達する最初のツールです。

于 2009-12-27T01:21:20.853 に答える
6

この答えは私のコメントから構成されています。

あなたがやろうとしていることは、あなたがそれをやろうとする方法にかかわらず、難しいことです。
間違いなくそれを行う最も簡単な方法は、ユーザーを完全に模倣することです。そのため、アプリケーションはボタンを押したり、マウスを動かしたりします。これの欠点は、画面を認識できるかどうかに依存していることです。
ゲームファイルを変更できれば、必要なカードを1つの固有の色にスキン(画像(テクスチャ))するだけで簡単にできます。
主な欠点は、ゲームをトップレベルのウィンドウとして使用するか、仮想マシンでゲームを実行する必要があることです。どちらも理想的ではありません。

別の方法は、プロセスメモリを読み取ることです。あなたは物事をより簡単にするであろうメモリ位置のリストを見つけることができるかもしれません、さもなければそれは多くのハードワーク、メモリアドレスを推測するためのデバッガを必要とします。また、アセンブリを理解できるようになることも(非常に)役立ちます。

3番目の方法は、パケットを傍受して変更することです。これは、(少なくとも私にとっては)上記の方法よりも簡単です。処理する情報が少ないため、プロトコルをリバースエンジンするのが簡単です。パケットスニファを設定し、1つの異なる変数(たとえば、カード)を使用してアクションを実行し、その違いを比較するだけです。

確認する必要があるのは、EULAに違反していないことです。ゲームがどのように機能するかはわかりませんが、私が遭遇したほとんどのゲームには、私が言及したことのいずれかを行うことを禁止する(つまり、禁止される)EULAがあります。

于 2009-12-27T01:18:56.977 に答える