2014年2月5日水曜日

バブルワールドのスロットを自動操作ツールでまわす

yahooモバゲーのゲーム「バブルワールド」をチマチマとやってます。 このゲーム、鍵を手に入れるとスロットを回せるんですが、面倒ですよね。 ボタンを押して結果を見るだけなのに無駄な演出が長くて時間をとられます。 鍵が200くらいたまってくると手動で回す気がしません。

ってことでマウスの自動操作ツールでスロットを回すことにしました。 まわしている間に別の作業をできるように、バーチャルマシン上でやります。 バーチャルマシンにはUbuntuが入っているので、自動操作ツールもLinux版を用意。

sudo apt-get install xautomation

これでxteコマンドが使えるようになりました。 xteコマンドを使うと、端末やシェルスクリプトでマウスやキーボードの操作と同等の効果を得ることができます。 細かい使い方は説明のあるサイトに丸投げ。

え~と。 どちらも素敵なお名前のブログですね。

気を取り直して、まずはマウスクリックをする座標を調べます。 ゲームのページを表示して、「バブルワールド宝箱」をクリック。 調べた座標を使いまわせるよう、ブラウザの位置とか基準となるブラウザのスクロールバーの位置とかを決めておきます。 スロットのボタンとかぶらない位置に端末のウィンドウを移動します。 そして端末で

xte 'mousemove [x座標] [y座標]' 'mouseclick 3'

と入力。 [x座標] [y座標]には適当な数値を入れてちょうどいい座標を探しました。 mouseclick 3は右クリックなのでメニューが開きます。 メニューの左上の座標が[x座標] [y座標]で指定した位置になります。 何度か数字をいじってメニュー表示をしてというのを繰り返し、スロットのボタンとメニューの左上が重なる位置を探します。 狙ったところになったら座標調査終了です。

その座標を元にスロットを回すシェルスクリプトを作成。 こんな感じになりました。

#!/bin/bash
for i in {0..100}
do
    xte 'mousemove 570 720' 'mouseclick 1'
    sleep 10s
    xte 'mousemove 570 720' 'mouseclick 1'
    sleep 3s
done

複雑なことをやるわけではないので適当です。 sleepの時間も適当。 演出次第ではズレるかも知れないけど、それで困ることも無いですからいいでしょう。 570、720というのはそれぞれ画面上のx座標、y座標です。

手抜きコードのため、途中で止める機能とかはありません。 バーチャルマシン上ではブラウザと端末だけ表示。 止めるときはブラウザを最小化して、端末でCtrl+cで止めます。

スクリプトに実行権限を付けて、

sudo chmod +x script.sh

スクリプトを試します。 スロットのボタンをそのまま連打すると「友達とシェア」してしまうので、まず1度手動でまわしてチェックを外しておきます。 端末を、クリックすべきボタンにかぶらないように動かしてスクリプト実行。

上手くいきました。 勝手にスロットが動きます。 マウスが動くのはバーチャルマシン上なのでホストマシンでの作業も妨げません。 他の事をしながら鍵を消費することができます。 ヨカッタヨカッタ。

とりあえずこれで今ある鍵はある程度なくなりました。 ゲームを続けていたら、1ヵ月後とか2ヵ月後とかにまた鍵がたまるでしょうからまたスクリプトでまわしましょう。 そのときは一応

xte 'mousemove 570 720' 'mouseclick 3'

で右クリックメニューを表示して位置を確認するところからかな?

windows上でやるならもっと凝った自動操作ツールとかありそうですね。 でもまぁ、やる事が単純だからこのネタに関してはこれでok。