
ブラウザゲームで戦闘時にコマンドを入力するスクリプトを作ったのですが、
動かすと実行時間にばらつきがあり、1ターンの入力制限時間内に全員分のコマンド入力を終えられないことがあります。
作ったスクリプトをコピーしておきます。
(戦闘開始処理/省略)
MMV(787,178,10)
sleep(0.25)
MMV(691,209,10)
sleep(0.25)
MMV(599,212,10)
sleep(0.25)
BTN(LEFT,CLICK,599,212,10)
MMV(784,247,10)
sleep(0.25)
MMV(692,271,10)
sleep(0.25)
MMV(590,272,10)
sleep(0.25)
BTN(LEFT,CLICK,590,272,10)
MMV(786,321,10)
sleep(0.25)
MMV(658,344,10)
sleep(0.25)
MMV(589,350,10)
sleep(0.25)
BTN(LEFT,CLICK,589,350,10)
このスクリプトは
1:コマンドにマウスカーソルを合わせる
2:使用したいスキルにマウスカーソルを合わせる
3:スキルを使用する対象をクリック
という手順を3キャラクター分行っていて、ラグなどに対応するためこれを5セット繰り返すようにしています。
sleepが実時間を基準に待機する関数だと聞いて使ってみたのですが、
制限時間である10秒以内に1セット完了できないことがあります。
どうすればスクリプトの実行時間を一定にできるのでしょうか?
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
> と動作の間隔を極端に短くしてもゲームが反応すること、
取りあえず、動作するならOKってしちゃっても良いかも。
Windows標準のメニューだと、マウス移動だけではすぐにポップアップしませんから、そのゲーム独自のメニューなのでしょう。
素早く操作しても確実にポップアップする作りなのか?とか、見極める必要はあると思います。
また、ゲームのシステムが不明瞭ですが、時間を決めずに逐次捜査結果を確認する方法だと、
・入力が間に合わないとデメリットがある
・間に合わない場合はキャンセルの操作なんかすればそのデメリットは避けられる
とかなら、入力状況と経過時間を見てキャンセルするとかって判断が可能です。
> マウス移動でスキルリストなどがポップアップする仕様ですが、
> リストが半透明で背景も場所によって変化するので、画像認識による処理は難しいです。
UWSCのChkImg関数は透過色も使えますし、そのスキルリストに枠なんか付いてるなら枠の色は背景に関係なく前景に表示される場合が多いし、他にも、
スキルリストの表示予定位置の画像を保存
マウスを移動
繰り返し
保存している画像とリスト表示予定位置の画像を比較
変化していればリストが表示されたと判断
とかって手もあります。(背景がアニメーションしていなければ…。)
No.6
- 回答日時:
ゲーム名分かればテストできるんですが、とりあえず
MMV(787,178,1000)
MMV(691,209,250)
MMV(599,212,250)
BTN(LEFT,DOWN,,,100)
BTN(LEFT,UP,,,100)
MMV(784,247,1000)
MMV(692,271,250)
MMV(590,272,250)
BTN(LEFT,DOWN,,,100)
BTN(LEFT,UP,,,100)
MMV(786,321,1000)
MMV(658,344,250)
MMV(589,350,250)
BTN(LEFT,DOWN,,,100)
BTN(LEFT,UP,,,100)
MMV間のスリープは不要です。MMVの実行待ちで時間調整してください
また、CLICKを確実にボタンを押し下げ押し上げするようDOWN-UPに変更しています。経験上CLICKでは反応しきれない場合が多々あります。
クリック後、ブラウザ側(ゲーム側)が超反応で次の応答待ちになることは多分無いです
なので、クリックした後に次のマウス動作まで1秒の実行待ちとしています。
これで1周5秒(5100ms)になります。
これとは別に
うまくポップアウトが表示されない場合は、マウスの動きをトレースし、中間地点を挟むといいかもしれません
(例)座標100,100→300,200 を 座標100,100→200,100→300,100→300,200
No.5
- 回答日時:
> 3秒で実行する処理のはずなのに4~5秒掛かっているのは気になりますが、
処理自体にかかる時間と、
| BTN(LEFT,CLICK,599,212,10)
| MMV(784,247,10)
の末尾のパラメータで指定している「10」は実行までの待ち時間(ミリ秒)なので、全体で0.1秒ちょいにはかかる事になっています。
MMVを10回繰り返す、Printで時刻表示ってのを繰り返し実行させると、自分の環境では1秒間に250回実行されたので、MMV10回すると1/250秒程度はかかる計算ですし。
--
> しかしそれでも全滅していたので、マウスの動きにゲームが反応しなかった場合がありそうです。
> これを防ぐにはどうすればいいのでしょうか。
一般的には、決まった時間待つって事はせずに、操作に対する応答をチェックして逐次実行します。
ゲーム内容が不明瞭なのでスクリプトから想像できる動作ですが、
1) 最初のマウス移動の操作で、メニューがポップアップするなどの応答がある。
2) メニューがポップアップしているのを確認してから、次のマウス移動を行なう。
って事を繰り返せば、決まった時間待つって事をせずに済みます。
上の例でのメニューが表示されたかどうかの確認だと、ChkImg関数で画像を確認とか、PeekColor関数で色を確認とかって事を行ないます。
他の手としては、キーボードで操作すると、Window標準のメニューなんかはスムーズに操作出来る場合があります。
--
> 0.4秒にしたところ、今度は10秒以内に1セット分の入力が間に合わないようになってしまいました。
ブラゲーなんかで入力時間が10秒しかないってのは結構厳しい気がしますが、手で操作した場合には、操作ミスがない限り確実に間に合うような操作なんでしょうか?
最速で手入力しても間に合わないような状況だと、ツール使っても厳しいと思います。
この回答への補足
さらに色々ためしたところ、スクリプトを
MMV(787,178,0)
sleep(0.01)
MMV(691,209,0)
sleep(0.01)
MMV(599,212,0)
sleep(0.01)
BTN(LEFT,CLICK,599,212,0)
と動作の間隔を極端に短くしてもゲームが反応すること、
13/10/16 05:15:28 1セット目入力開始
13/10/16 05:15:32 1セット目入力完了
13/10/16 05:15:34 2セット目入力完了
13/10/16 05:15:35 3セット目入力完了
13/10/16 05:15:36 4セット目入力完了
のようにゲームで入力処理が行われる1セット目の実行時間が他より長くなることを確認しました。
1ターン目の入力時間が7秒程度しかない場合もありますが、手作業なら2,3秒余ります。
マウス移動でスキルリストなどがポップアップする仕様ですが、
リストが半透明で背景も場所によって変化するので、画像認識による処理は難しいです。
No.4
- 回答日時:
> と分までしか出力されていませんでした。
> 秒まで出力するにはどこをいじればいいですか?
デフォルトだとそうでした。
スクリプトの先頭に、
OPTION LOGFILE=3
を書いといてください。
他の方法だと、
Print GetTime() + " 1セット目入力完了"
とかってすると、2000/01/01からの経過秒が一緒に表示されます。
時刻に直すのはもう一手間いりますが、秒の経過を確認するだけならこんなので十分かも。
この回答への補足
sleepの時間を0.3秒にして、ログに記録してみました。
13/10/15 11:22:18 1セット目入力開始
13/10/15 11:22:22 1セット目入力完了
13/10/15 11:22:27 2セット目入力完了
13/10/15 11:22:32 3セット目入力完了
13/10/15 11:22:35 4セット目入力完了
という感じで、3秒で実行する処理のはずなのに4~5秒掛かっているのは気になりますが、
極端に動作が遅くなることはありませんでした。
しかしそれでも全滅していたので、マウスの動きにゲームが反応しなかった場合がありそうです。
これを防ぐにはどうすればいいのでしょうか。
sleepの時間を増やせば確実に入力できるのかもしれませんが、
0.4秒にしたところ、今度は10秒以内に1セット分の入力が間に合わないようになってしまいました。
(そもそも、ゲーム側での制限時間が毎回きっちり10秒というわけではないかもしれません)
No.3
- 回答日時:
> カーソル移動から次のカーソル移動まで明らかに1秒以上かかっていました。
であれば、ログにも時刻が記録されるので、
13/10/14 12:43:16 1セット目入力完了
13/10/14 12:43:19 2セット目入力完了
13/10/14 12:43:22 3セット目入力完了
13/10/14 12:43:40 4セット目入力完了 ←ここで時間かかってる
13/10/14 12:43:44 5セット目入力完了
とかって風に、確認できるはずです。
UWSCの処理が遅延してるって確認出来るなら、その原因に対する対策を実施とか。
・余計なプログラムは停止。
・タスクマネージャでUWSCの優先度を変更。
・無料版で出来たかわかりませんが、Exeを作成。
・スクリプトでかかった時間を確認して、処理を変更なり処理中断なり。
この回答への補足
PRINT文で表示させた後ログを確認してみましたが、
13/10/14 14:15 1セット目入力完了
と分までしか出力されていませんでした。
秒まで出力するにはどこをいじればいいですか?
No.2
- 回答日時:
> 1セット約3秒、5セット約15秒で完了するように組んだはずなのですが、
> 観察してみると1セットの実行に10秒以上かかってしまうケースがあるのです。
ゲームの動作
1セット目の入力受付
|
|UWSCの動作
|1セット目の入力開始
||
||3秒
||
||
|入力が速すぎて、全部の入力が受け付けられずに終了
|
|10秒経過
|
|2セット目の入力開始
||
1セット目の入力受付終了
【UWSCは2セット目の入力してるが、1セット目の入力が完了していないように見える。】
2セット目の入力受付
||
||
…
とかって状況では?
--
1セット分の入力をどうやって確認しました?ゲーム画面?
1セット分の入力ごとに、
Print "1セット目入力完了"
なんかのログを表示して、ログで確認しては?フルスクリーンのゲームだとログウィンドウ見れませんが。
この回答への補足
このスクリプトは何度も実行していて、
9割程度は計算通り正確に実行してくれるのですが、
稀に実行が極端に遅くなることがあるのです。
(入力失敗=全滅なので入力失敗があると確実にわかる)
普段はタイマーで定期的に動かしているので実際に確認したのはまだ1回だけですが、
カーソル移動から次のカーソル移動まで明らかに1秒以上かかっていました。
No.1
- 回答日時:
> 制限時間である10秒以内に1セット完了できないことがあります。
> どうすればスクリプトの実行時間を一定にできるのでしょうか?
質問文のスクリプトは、一定の実行時間で実行されるようになっています。
ラグがあるのに一定時間で実行してるからダメなのでは?
例えば、
・メニューが表示される前にその下のサブメニューにカーソル合わせたり。
・画面が切り替わる前にクリックしたり。
・メニュー項目が表示される前に背景をクリックしたり。
この回答への補足
戦闘開始時にラグが最大3秒程度発生するのを考慮して、3キャラ分の行動入力を5回繰り返すようにしています。
1セット約3秒、5セット約15秒で完了するように組んだはずなのですが、
観察してみると1セットの実行に10秒以上かかってしまうケースがあるのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- C言語・C++・C# win10で、正確な待ち時間の作り方 6 2023/02/14 18:28
- その他(プログラミング・Web制作) uwscのCHKING関数の画像の認識がうまくいかない。 1 2022/06/18 20:55
- オープンソース Pythonのコードをexe化 1 2023/07/03 08:01
- Windows 10 Windows11 スリープではなく休止になってしまう 2 2023/04/04 12:46
- Visual Basic(VBA) vba Sleep関数について教えてください 1 2023/01/18 10:18
- 英語 不特定のyouが主語の疑問文に対する応答法 2 2023/07/05 09:04
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
このQ&Aを見た人はこんなQ&Aも見ています
-
決まった時刻(秒単位)にボタンを自動でクリックしたい
その他(ソフトウェア)
-
UWSCに制限時間を付けたいです
その他(プログラミング・Web制作)
-
UWSCのスクリプトにラグが発生します。
その他(プログラミング・Web制作)
-
-
4
UWSCのプログラミングついて教えてください。
その他(プログラミング・Web制作)
-
5
UWSCの終了の仕方
その他(プログラミング・Web制作)
-
6
UWSCの画像認識と条件分岐について(初心者で独学で作ってるもので助けてください)
その他(プログラミング・Web制作)
-
7
UWSCでエラー発生時の対処法について
その他(プログラミング・Web制作)
-
8
UWSCの待機コマンドについて
その他(ソフトウェア)
-
9
UWSC
フリーソフト
-
10
UWSC 画像認識で条件分岐
その他(プログラミング・Web制作)
-
11
変数内に入った文字列の結合 UWSC
その他(プログラミング・Web制作)
-
12
UWSCのTHREADについて
その他(プログラミング・Web制作)
-
13
uwcs のマクロで画像認識をしてその画像があればクリックというマクロを作成したのですが、クリック後
その他(開発・運用・管理)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Geminiって、Geminiの入力フォ...
-
エクセルVBA テキストボックス...
-
入力フォームの値をQRコードで...
-
初歩的な事だと思います。 Sub...
-
PHPのSJISからUTF-8への変換で...
-
TextBoxから数字が文字...
-
メールアドレスからの住所特定...
-
正規表現で2回以上連続する文字...
-
合い言葉による認証を設置した...
-
VBAでInputBoxの再入力をさせる...
-
Flashテキスト入力
-
懸賞支援ツールについて
-
HTMLのフォームで動的に日本語...
-
unicodeのソース
-
「イ分」・・・フンという文字...
-
EXCEL VBA のユーザーフォーム...
-
テキストボックスの番号を使っ...
-
DataGridView 列ごとの入力制限
-
検索候補に見られたくないキー...
-
アルファベットGの小文字の入力
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA テキストボックス...
-
初歩的な事だと思います。 Sub...
-
テキストボックスの番号を使っ...
-
EXCEL VBA で指定した範囲に入...
-
VBAでInputBoxの再入力をさせる...
-
Excel-VBAでInputBox+Pulldown...
-
入力フォームの値をQRコードで...
-
TextBoxから数字が文字...
-
数字以外の入力をエラーにする...
-
エディットボックスの入力制限...
-
DataGridViewの桁数制限に関して
-
HTMLで全角文字のみ入力するに...
-
「イ分」・・・フンという文字...
-
excel vba でユーザーフォーム...
-
DataGridView 列ごとの入力制限
-
アクセスのマクロ
-
至急です!Excelがわかりません
-
VBA R1C1形式で変数の入力について
-
教えて!全角文字「μ」の半角
-
アルファベットGの小文字の入力
おすすめ情報