2021年5月1日土曜日

Power Automate Desktopに釣りさせてみた

 UWSCで実現した自動の釣りを Power Automate Desktop (以降PAD)に移植してみました。ロジックは出来上がっているので簡単かと思いきや結構大変でした。まずは動画をご覧になってください。1匹釣り上げるのを見届けて頂けましたら十分です。


 コンセプトが全く違うものを比較するのはナンセンス、と分かっていても注目度抜群のPADですのでなんかすごいことになるのではと思いましたが、もう一声という感じでした。UWSCが凄すぎるだけなんですけどね。そんなことしようとする人はいないと思いますが、ゲームを自動化する場合に注意したい点をまとめましたのでご参考まで。

デバッグモードのパフォーマンス

 デバッグモードで動かさないと何で処理しているのかさっぱりわからなくなるため、今回はデバッグモードで動くことを条件としてロジックを組みました。デバッグモードで実行した場合、通常実行モードの1/100程度のスピードとなりますがそれがまた大変な制約でした。ステップ全てが目視でチェックできるようにしてあるからだとは思いますが、タイミングを調整するにはこのうえなくやりにくい状態です。今回はデバックモードでも継続して釣りができるように調整したため、早め早めのライン出しとなっているため1匹釣り上げるのに凄く時間がかかっています。画面を見ていると、処理以外の制御文も同じように時間がかかるようです。例えば、次の処理はどちらが時間がかかると思いますか?

if TRUE then
    NOP
else
    NOP
endif

if FALSE then
    NOP
else
    NOP
endif

同じであってほしいですが、FALSEの時のほうが時間がかかります。そう、「else」行を処理する分だけ時間がかかるのです。例えば危険回避とかの少しでも早く始めたい処理を真側で処理するようロジックを組んだほうがいいです。今回の例ではテンションのチェックになりますね。デバッグモードでなければ測定できるレベルでの差ではないようです。そもそも何にこだわっているのか?って話ですけどね。

色判定

 表現が難しいですが、PADはよくあるウィンドウアプリの制御を想定しています。ボタンやリスト等のコントロールで構成されるアプリケーションは制御が簡単です。コントロールの状態を判定することもできます。ゲームにはそういったコントロールパーツが存在しないため、特に状態をチェックする方法は画像判定に頼るしかありません。ですが、最近のゲームはメニューやステータスの背景もなんとなく透けてる状態なので画像判定が難しくなっています。そのため、特定座標の色の濃さ等で判定するしかなく今回もそのようにしています。一番の問題は、PADには座標の色をチェックする機能がありません。RPAで効率よくしたいと思っている人に必要ないんですけどね。PADは、Java,PowerShell,Python,VBScriptと思いつく限りの外部プログラムを呼び出せますので、今回はPowerShellで実現しています。引数を渡せないので必要な個所別にそれぞれ別のスクリプトになっています。

レスポンスと品質

 通常の文字列をコピー&ペーストするように制御文をコピーすることができますが、レスポンスが非常に悪く、思った場所にペーストするのがたいへんです。常に1テンポ遅れて反映される感じです。PADはローカルに情報を保持せず全てクラウド側に保存されるため、もしかすると1操作毎にOneDriveに一時ファイルを保存しているのかもしれません。作業中、不定期にエラーで編集画面が停止してしまうのはまいりました。

0 件のコメント:

コメントを投稿