序文の代わりに
今日、私は「ブラウザゲーム用のマクロボット」を作成する技術に関するハブに関する記事へのリンクを受け取りました。 AutoITがハブ上で不十分に表されていることを後悔してそこに書かれました 記事に記載されていることで、1〜2年前に手を出しました。 最近、ブラウザベースのおもちゃで奇跡を起こすことができるIE.au3ライブラリを使用していますが、この情報を自分で共有したいと思います。 すぐに警告します-これはMS-Internet Explorerでの作業についてのみです。 他のブラウザのファンには、どのブラウザでも同じことができるとすぐに言います。適切なライブラリを探す必要があるだけで、どのように機能するかは言えません。 IE.au3ライブラリについて説明します。これは標準のAutoITインストールの一部であり、かなりよくテストされ、コメントと例が提供されます。説明されている機能は、標準のパッケージ関数(または方法そこにこれと同じAutoITを呼び出します)。犠牲者の選択
AutoITのブラウザベースのゲームでの作業の例として、ゲーム「 My Village 」(ゲームの元の名前は「 My Free Farm 」) -http://www.mojaderewnja.ru/を提案します。日常的な行動。 たとえば、プロジェクトに月に約180ルーブルを支払わない場合は、植物の植え付けと水やりを手動で行う必要があります。 そして、これは通常、植物を植えるためだけにフィールド全体で120回のクリックであり、その後水に120回のクリックです。 フィールドは1つまたは2つではなく、最大で12個までです。 また、一部の植物は約10分間成長するため、そのようなクリックは、遊びたいという欲求を落とすか、ささいなインターネットや質の高いケーブルテレビを1か月楽しめるカジュアルなおもちゃに月額の支払いを強いられます。 「 My Village 」を自動化することは、まさに私たちが必要としているものです。
オプション番号1-プリミティブオプション
私たちは画面のどこを突くかを見て、必要なところに「マウス」を突く。 これは間違ったオプションであるとすぐに言わなければなりませんが、一般的な知識については、スクリプトのテキストに説明を付けます。第1部:画面上の「基準点」を見ています。この基準点に基づいて、フィールドをドラッグする正方形の位置を計算します。Func GetTopLeftCorner ( $ window )この関数は、ブラウザーのゲームウィンドウの左端を探して、斜めに走るドットの色をチェックします。 次に、ドットの色を調べて実行し、ゲームウィンドウの上部の境界線を探します。 見つかった点を 「 参照点 」と考えます。 それからゲームフィールド上の各セルまでの距離は固定されており、インデックスによって簡単に計算できます関数の結果は、それぞれ水平および垂直ポイントの座標に対応するグローバル変数$ xおよび$ yに返されます。 。 AutoItとともにインストールされるAutoIt Window Infoユーティリティを使用して以前に決定された手動で設定できます。上記のスクリプトは自家製のCheckRGB関数を使用します:
グローバル $ x = 0 、 $ y = 0
WinActivate ( $ window 、 "" )
WinActive ( $ window )の 場合
$サイズ = WinGetPos ( "[active]" )
$ i = 1 から $サイズまで [ 3 ]
If CheckRGB ( PixelGetColor ( $ x + $ i 、 $ y + $ i ) 、 Dec ( "402215" ) 、 Dec ( "5A352A" ) ) その後
If CheckRGB ( PixelGetColor ( $ x + $ i - 259 、 $ y + $ i ) 、 Dec ( "331A0D" ) 、 Dec ( "624232" ) ) Then
$ j = $ i To 1 ステップ -1
CheckRGB ( PixelGetColor ( $ i + 1 、 $ j ) 、 Dec ( "000000" ) 、 Dec ( "3A301D" ) )でない場合
$ x = $ i
$ y = $ j
ExitLoop ( 2 )
エンディフ
次へ
出口ループ
エンディフ
エンディフ
次へ
エンディフ
Endfunc
Func CheckRGB ( $ color 、 $ min 、 $ max )-この関数は、最初のパラメーター$ colorとして渡されたポイントの色をチェックし、ポイントの色の3つのコンポーネント( RGB )を考慮して、 $ min〜$ maxの色範囲になります。 それぞれTrueまたはFalseを返します。
ローカル $ rgb [ 3 ] [ 3 ]
$ res = True
$ rgb [ 2 ] [ 0 ] = BitAND ( $ min 、 Dec ( "FF0000" ) ) / Dec ( "10000" )
$ rgb [ 1 ] [ 0 ] = BitAND ( $ min 、 Dec ( "00FF00" ) ) / Dec ( "100" )
$ rgb [ 0 ] [ 0 ] = BitAND ( $ min 、 Dec ( "0000FF" ) )
$ rgb [ 2 ] [ 1 ] = BitAND ( $ color 、 Dec ( "FF0000" ) ) / Dec ( "10000" )
$ rgb [ 1 ] [ 1 ] = BitAND ( $ color 、 Dec ( "00FF00" ) ) / Dec ( "100" )
$ rgb [ 0 ] [ 1 ] = BitAND ( $ color 、 Dec ( "0000FF" ) )
$ rgb [ 2 ] [ 2 ] = BitAND ( $ max 、 Dec ( "FF0000" ) ) / Dec ( "10000" )
$ rgb [ 1 ] [ 2 ] = BitAND ( $ max 、 Dec ( "00FF00" ) ) / Dec ( "100" )
$ rgb [ 0 ] [ 2 ] = BitAND ( $ max 、 Dec ( "0000FF" ) )
$ i = 0 から 2
$ rgb [ $ i ] [ 0 ] > $ rgb [ $ i ] [ 1 ] または $ rgb [ $ i ] [ 1 ] > $ rgb [ $ i ] [ 2 ]
$ res = False
出口ループ
エンディフ
次へ
$ resを 返す
Endfunc
直接、フィールド上のすべてのセルをポンピングするプロセスは次のようになります。
$ i = 1 から 12ここではすべてが明確です。 ループヘッダーの10および12は、セル内のフィールドのサイズです。 MouseClickパラメーターの定数は、以前に定義された「基準点」に対して、同じAutoItウィンドウ情報ユーティリティを使用して計算されます。 スリープの遅延値は必要に応じて変更できます。これはドッキングの速度に影響しますが、速すぎるとゲームスクリプトの実行でエラーが発生する可能性があります。
$ j = 1 から 10
MouseClick ( "left" 、 $ x + ( $ i * 40 ) + 103 、 $ y + ( $ j * 40 ) + 172、1、1 )
睡眠 ( 25 )
次へ
次へ
この方法の利点は、どのブラウザーでも機能することです。 耕地全体が見えるようにゲームウィンドウを開くことができるすべての場所。欠点-ゲームウィンドウは常に開いている必要があり、ドッキングの速度を選択する必要があります。
オプション番号2-正しいオプション
マウスポインターはまったく使用しません。 代わりに、 IDによってIEブラウザーにロードされた目的のオブジェクトを突きます 。 (これらのセルのIDは 、ロードされたページのHTMLコードで確認できます。それぞれの名前はf1 - f120です)。ローカル $ i 、 $ j 、 $ n
ローカル $ oIE = _IEAttach ( $ gamewindowname )
$ i = 1 から 12
$ j = 0 から 9
$ obj = _IEGetObjById ( $ oIE 、 "f" & ( 12 * $ j + $ i ) )
If $ obj <> 0 Then $ obj 。 クリック ( )
次へ
次へ
オプション番号3-最も正しいオプション
前のオプションの欠点は、フィールドを固定する必要がある場合、ゲームから切り替えてスクリプトを実行する必要があることです。 これは不便です。 本当に便利なスクリプトでは、他のルーチン操作を節約するために追加のアクションを実行する必要はありません。 したがって、ゲームの標準アクション「 1つのシードを植える 」を「 選択したシードでフィールド全体を植える 」に置き換えるだけです。 これは次のようになります。$ obj = _IEGetObjById ( $ oIE 、 "anpflanzen" )前のスニペットに貼り付けるHTMLの一部を次に示します。
If $ obj <> 0 Then _
$ obj 。 outerHTML = "...ここにあるHTMLコードは、便宜上引用しています。"
< SPAN id = anpflanzen class = link onclick = "コード自体とJavaScriptスクリプトは、ゲームの元のHTMLコードとそれに読み込まれたスクリプトファイルから借用されており、水やりから着陸までわずかにやり直されています。
selectMode(0、true、選択済み);
var i、j、s、n = 0;
for(i = 1; i <13; i = i + rackElement [選択] .x)
for(j = 0; j <10; j = j + rackElement [選択] .y){
s = 12 * j + i; cache_me( " &$ zone& "、s、garten_prod [s]、garten_kategorie [s]、n ++);} " >
< IMG onmouseover = "this.src = 'http://mff.wavecdn.de/mff/garden_menue_seed.gif'; showDiv( 'tooltipseed')" onmouseout = "this.src = 'http://mff.wavecdn。 de / mff / leer.gif '; hideDiv(' tooltipseed ') " src = " http://mff.wavecdn.de/mff/leer.gif " width = 53 height = 68 >
< DIV スタイル = "DISPLAY:なし" id = tooltipseed class = blackbox onmouseover = "showDiv( 'tooltipseed')" onmouseout = "hideDiv( 'tooltipseed')" src = "http://mff.wavecdn.de/mff/ leer.gif " >すべてを植える< / DIV > < / SPAN >