こんにちわ、たけしGXです。
筆者がRPGゲームをプレイしてていつも思うことは、
「自動で経験値稼ぎができたらいいのにな…」
です。
地道に強くなるのがRPGのウリだとは思いますが、何度も同じクエストを繰り返して素材集めやレベル上げするのはやはり面倒です。
そういう機能がないなら自前で作ってしまえ!
エクセルのVBAを使えば自動クリックぐらいはできるんじゃないか?
ということで自動周回プレイに挑戦してみました。
結論から言って自動周回プレイはできたのですが、どのゲームでやったのかは伏せさせてもらいます。
なぜなら、利用規約に「外部ツール」の使用禁止とうたわれているゲームが多いからです。
エクセルVBAが外部ツールにあたるのかは不明です。
なので、垢バンの可能性があるのでは?と筆者は思っています。
それでも紹介する理由は「物凄く便利だから!」です。
今のところ筆者は垢バンされていません。
リスク承知で挑戦したい方は参考にしてみて下さい。
「エクセルVBA」でPCゲームをオートプレイ化
まず最初に注意事項
この記事を参考に自分もやってみようと思っている方へお伝えしておかなければならない事があります。
それは冒頭でも述べましたが、
「垢バンの可能性があるかも?」
ということです。
筆者は今のところ垢バンされていないですが、もしかしたらされるかも知れません。
別にプログラムを改変したりするわけではないので、大丈夫だと思っていますが、正直わかりません。
※ この記事はあくまでオートプレイできたという記録です。推奨するものではありません。参考にする場合はあくまで自己責任でお願いいたします。
前提条件
- 対応できるのはPC版のゲームのみ
PCのエクセルを起動して操作させるので、PC上で動くゲームでしかできません。 - エクセル VBAのある程度の知識は有った方がいい
ちょっとコードをコピペすれば簡単に実装できますがある程度の知識がないと、「何やってるのか解らない」という事になります。
そうなると、応用が効かないで自分でできる事が限定されます。
と言っても今回の記事で紹介する事は単純なので比較的簡単に理解できるとは思いますが。
自動化した内容
①画面の特定の位置を自動で順番にクリックする。
②ループで繰り返す。
この動作だけで、オートプレイが実現できました。
やりたい事は単純なのでVBAのコードは簡単です。
VBAのコード
Private Declare Sub Sleep Lib “kernel32” (ByVal ms As Long)
Declare Sub mouse_event Lib “user32” ( _
ByVal dwFlags As Long, _
Optional ByVal dx As Long, _
Optional ByVal dy As Long, _
Optional ByVal dwDate As Long, _
Optional ByVal dwExtraInfo As Long)
Declare Function SetCursorPos Lib “user32” (ByVal x As Long, ByVal y As Long) As Long
Const MOUSE_LEFTDOWN = &H2 ’10進数の2
Const MOUSE_LEFTUP = &H4 ’10進数の4
Const MOUSE_RIGHTDOWN = &H8 ’10進数の8
Const MOUSE_RIGHTUP = &H10 ’10進数の16
Dim x
Sub オートプレイ()
Do Until x = 1
SetCursorPos 740, 320
mouse_event MOUSE_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSE_LEFTUP, 0, 0, 0, 0
Sleep (3000)
SetCursorPos 800, 670
mouse_event MOUSE_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSE_LEFTUP, 0, 0, 0, 0
Sleep (3000)
SetCursorPos 650, 560
mouse_event MOUSE_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSE_LEFTUP, 0, 0, 0, 0
Sleep (3000)
Loop
End Sub
このままコピペすればとりあえず動くと思います。
コード内の命令文の意味はこんな感じです。
- SetCursorPos 740, 320
マウスカーソルの移動 左端から740ピクセルの位置、上端からの320ピクセルの位置 - mouse_event MOUSE_LEFTDOWN, 0, 0, 0, 0
左クリックを押す - mouse_event MOUSE_LEFTUP, 0, 0, 0, 0
左クリックを離す - Sleep (3000)
3秒間何もしない(待つ)
クリックする場所は座標指定していますので数値を変更して自分で調整が必要です。
sleep関数は一時停止する命令で、値は1=1000分の1秒です。
ちなみにsleep(1000)で1秒停止するという意味になります。
このsleep命令を入れておかないと、高速でクリックし続け操作不能になるので注意が必要です。
このコードを実行すると↑上記のように画面の3か所を順番に3秒ごとにクリックしていくことを繰り返します。
画面遷移に対応する
やっている事は単純ですが、ただ同じ場所をクリックするだけでは実現できないゲームがほとんどです。
遷移する画面に対してクリックしたい場所が違ってくるので、全てに対応する必要があります。
下記の図はとあるゲームで筆者がオートプレイを実現した時の画面遷移です。
関係のない場所をクリックしてしまいますが、反応しないのでOKでした。
要するに画面上の3か所をクリックできれば、自動周回プレイが可能になります。
これが、前述のVBAのコード実行で実現できる理由です。
終了方法
ループして永久に繰り返す仕様なので、終了させるにはエクセルを強制終了させるしかありません。
エクセルの右上のバツをクリックして無理矢理終わらせます。
sleep関数の値を小さくし過ぎるとマウス操作させてもらえなくなるので注意です。
テスト実行してみて
寝る前にセットして放置してみましたが、朝見てみたらうまく機能していなかった。
原因はバトルで敗北してしまったからです。
負けてしまったことで遷移する画面も変わってしまいうまくいかなくなっていました。
この問題には、絶対に負けない難易度のクエストを選ぶことで解決しました。
やった!これで完成だ!
という事で予期せぬ画面遷移で先に進めなくなるという場合もあるので注意が必要です。
まとめ
今のところバンされずにプレイできています。
垢バンは怖いですが、これは便利過ぎてやめられないです。
・エクセルをインストールしたPC
・PC上で動くゲーム
という条件があり、さらに全てのゲームで対応できるわけではないですが、実現できれば無駄な労力が省けます。
RPAには可能性がありますね。
実行している事は「定期的に特定の場所をクリック」するだけなので、これが規約違反になるのかグレーゾーンです。
手動でやっている事と同じだし、サーバーに負荷をかけるような事もしていない。
なので、セーフなんじゃないかと勝手に思っています。(あくまで勝手な意見です)
もし、垢バンされたらまたこの記事を更新します。
以上です。
参考にされる方はくれぐれも自己責任でお願いします。
コメント