序文の代わりに
今日、私は
「ブラウザゲーム用のマクロボット」を作成する技術に関するハブに関する記事へのリンクを受け取りました。
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 = 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
この関数は、ブラウザーのゲームウィンドウの左端を探して、斜めに走るドットの色をチェックします。 次に、ドットの色を調べて実行し、ゲームウィンドウの上部の境界線を探します。 見つかった
点を 「
参照点 」と考えます。 それからゲームフィールド上の各セルまでの距離は固定されており、インデックスによって簡単に計算できます関数の結果は、それぞれ水平および垂直ポイントの座標に対応するグローバル変数
$ xおよび
$ yに返されます。 。
AutoItとともにインストールされる
AutoIt Window Infoユーティリティを使用して以前に決定された手動で設定できます。上記のスクリプトは
自家製のCheckRGB関数を使用します:
Func CheckRGB ( $ color 、 $ min 、 $ max )
ローカル $ 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
-この関数は、最初のパラメーター
$ colorとして渡されたポイントの色をチェックし、ポイントの色の3つのコンポーネント(
RGB )を考慮して、
$ min〜$ maxの色範囲になります。 それぞれ
Trueまたは
Falseを返します。
直接、フィールド上のすべてのセルをポンピングするプロセスは次のようになります。
$ i = 1 から 12
$ j = 1 から 10
MouseClick ( "left" 、 $ x + ( $ i * 40 ) + 103 、 $ y + ( $ j * 40 ) + 172、1、1 )
睡眠 ( 25 )
次へ
次へ
ここではすべてが明確です。 ループヘッダーの10および12は、セル内のフィールドのサイズです。
MouseClickパラメーターの定数は、以前に定義された「基準点」に対して、同じ
AutoItウィンドウ情報ユーティリティを使用し
て計算されます。
スリープの遅延値は必要に応じて変更できます。これはドッキングの速度に影響しますが、速すぎるとゲームスクリプトの実行でエラーが発生する可能性があります。
この方法の利点は、どのブラウザーでも機能することです。 耕地全体が見えるようにゲームウィンドウを開くことができるすべての場所。欠点-ゲームウィンドウは常に開いている必要があり、ドッキングの速度を選択する必要があります。
オプション番号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" )
If $ obj <> 0 Then _
$ obj 。 outerHTML = "...ここにあるHTMLコードは、便宜上引用しています。"
前のスニペットに貼り付けるHTMLの一部を次に示します。
< SPAN id = anpflanzen class = link onclick = "
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 >
コード自体と
JavaScriptスクリプトは、ゲームの元の
HTMLコードとそれに読み込まれたスクリプトファイルから借用されており、水やりから着陸までわずかにやり直されています。