ラスクラマクロが上手く動かない場合

ラスクラのマクロで上手く動かない場合はここに書いてある内容を確認してみて下さい。基本的な設定等は下の記事で確認してください。確認する時はログを出すマクロを使用すると原因が分かりやすいです。色がついているコードはそのままコピペできますが貼り付けた時に””が全角「””」になっている場合があるので必ず半角の””に修正してください

ラスクラマクロの説明
v3.03のDMM版の設定.uwsに間違いがありました 設定.uwsの59行目の「PUBLIC fz = 2」を「PUBLIC fz = 50」へ変更し上書き保存するか修正済みのv3.04をDLしてください。その際v3.03の設定.u...

chkimgxでエラーが発生しました

「chkimgxでエラーが発生しました」が出て「スタックトレースの取得に失敗」がでる場合は立ち上げるエミュの名前にNoxなら「NoxPlayer」がBlueStacksなら「BlueStacks」が含まれているか確認してみて下さい。含まれていないエミュの場合は該当する文字を含んだ名前にするか使用するマクロファイルを開いて2行目か3行目にある「wid = getid(“NoxPlayer”) 」の””の中の文字を自分が使用するエミュの名前に変えて下さい

エラーについて

例として

1.NoxPlayer OK

2.NoxPlayerゲーム用 OK

3.ゲーム用 NG

こんな感じです

上記以外が原因の場合は別途連絡ください

画像認識できない

登録した画像がアプリ内にあるのに画像認識ができず「ループ再開・・・画像監視中」がずっと出る場合は、一度「画像認識確認用」で確認してみて下さい。そこで画像の認識率が%で表示されるのであまりにも低いようなら画像を撮りなおしてください

スクショを取る時はマクロを使用する状態で撮ってください。フルスクリーンで使用するならフルスクリーンに変えてから画像を撮る、ウィンドウモードならウィンドウモードで撮るようにしてください

撮りなおしても認識できない場合は、使用するマクロの21行目くらいにある「Threshold_delta = 15」の数字の部分を大きくしてもう一度認識させてみて下さい。そこでも「○○認識しました」とログが出ずに「ループ再開・・・画像監視中」が出る場合は下記を試してください

ループ再開しか出ない場合

エラー1

ちょっとごちゃごちゃしてますが、まずコマンドプロンプトを開いて「adb devices」と打って出てくるデバイスが1つか確認してみて下さい。この時のデバイス名もメモっておいてください。2つ以上出る場合は他にエミュが起動していると思うのでNoxマルチインスタンスマネージャーを立ち上げて確認してみて下さい。1つしか起動していないのにデバイス名が2つ以上出ている場合はNox以外のエミュが立ち上がっているか確認してみて下さい

次に下の6行をコピーして「○○.uws」で保存してください。○○は適当な名前でいいです

  1. wid = GETID(“NoxPlayer”)
  2. cls = STATUS(wid, ST_class)
  3. title = STATUS(wid, ST_title)
  4. print “ウィンドウ名は” + title + “です”
  5. print “ウィンドウIDは” + wid + “です”
  6. print “ウィンドウクラス名は” + cls + “です”

保存できたらそのファイルをuwscに登録して起動してみて下さい。上の画像の上の方にあるようにウィンドウ名、ウィンドウID、ウィンドウクラスが表示されると思います。ウィンドウIDが-1の場合はウィンドが取得できていないです。下記のウィンドウ名とウィンドウクラス名を設定してからもう一度調べてみてください

次に使用するマクロファイルを開き1~3行目くらいにあるwid = getid(“Noxplayer1”)の部分を下に書いてあるコードのように変更します。ウィンドウIDは下のコードの”Noxplayer1”の部分、ウィンドウクラス名は”Qt5QWindowIcon”の部分にそれぞれ先程調べて出て来たものに修正します

  1. wid = getid(“Noxplayer1″,”Qt5QWindowIcon”,0)

マクロファイルを修正したら一度動かしてみて下さい

駄目な場合はエミュの名前を”ゲーム用”とか”NoxPlayer”を含まない文字に変えて、マクロファイルのの1~3行目くらいにあるwid=をwid = getid(“ゲーム用”)とかに変えてマクロを動かしてみて下さい

駄目な場合はマクロファイルの1~3行目くらいにあるwid=をwid = 0に変えて使用するマクロファイルと同じフォルダにあるタップ~、タップ~広範囲を開いて5行目くらいにあるCMD=の部分を書きのコードに変えてここにデバイスを貼り付けの部分を最初に調べたデバイス名に変えてから動かしてみてください

  1. CMD = “nox_adb -s ここにデバイス番号を貼り付け shell input tap shell input tap ” + g_imgx_x + ” ” + g_imgx_y

上から順に試していってそれでもおかしい場合はご迷惑おかけしますが再度連絡お願いします。

タップ・クリックができない・ずれる

画像もきちんと認識されているのにタップ・クリックができない・ずれる場合で一番多い原因はNoxの解像度関係です。フルスクリーンだと上手くタップできないことが多いです。修正できるか不明なのでウィンドウモードで使用して下さい。ウインドウモードでもNox側の解像度がPCモニターより高い場合は下げて下さい。自分でNoxのウインドウサイズを変更している場合はNoxの設定にあるウインドウサイズの復元するを選んで元に戻してください。大体がこれで直ります。

下記の画像で説明すると、真ん中がデフォルトで左が手動で大きくしている、右が手動で小さくしています。解像度や縮尺が関係しているので詳細な説明は省きますが、結果から言うとデフォルト以外は画像認識が問題ない場合でもタップする位置がずれます。特に元のサイズから小さくするほど誤タップすることが多くなります

エラー確認1

上記の原因以外の場合は詳しく原因をひとつづつ調べていきます。まずはログを出すファイルでアプリ内のどこを押そうとしているのか確認して下さい

エラー確認

上の画像にもある「nox_adb shell input tap 293 355」がここを押しますで、押せた場合は「〇〇.bmp」を認識しましたと出ます。もし「〇〇.bmp」を認識しましたと出ない場合はアプリに命令が行っていないのでadbまでのパスが通っているか確認してください。「nox adb 環境パス」とかで検索するとパスの通し方が出てきます

問題はタップしているのにアプリ上では押せていない場合です。まずマクロのフォルダにある「座標取得.uwsc」をマクロ使う要領でuwscに登録して起動してください。左上に黄色い吹き出しでマウスカーソルがある場所の座標が出てきます。絶対座標、相対座標とありますが絶対座標はモニター全体の座標なのでこちらは気にしなくていいです。見る必要があるのは相対座標です。マウスをアプリに持って行き、押したい画像がある場所近くまで持っていってください。そこからログで出て来た数字に近づけていきます。上の例で言うと相対座標がx:293 y:355までマウスを動かしてください

この時にちゃんと認識したい画像がない場合は画像の認識が上手く行っていない可能性があるので画像を撮りなおすか、上の画像を認識できないでも説明しているマクロファイルの21行目くらいにある「Threshold_delta = 15」の数字を下げて下さい

上記項目も問題ない場合、マクロを起動してどこをタップしているか確認してください。座標があっているのにタップ位置が大きくずれている場合は先にも書いたように解像度の問題の場合が多いので、Noxのサイズを手動で変更している場合は元に戻してみて下さい。それでも駄目な場合はエミュレータ側の解像度を下げて下さい(Noxの場合は携帯540×960)。座標があっているのにタップが大きくずれる場合はこれで大体直ります。

タップする位置が微妙にずれている場合ですが、これは定点クリックしないようにタップする位置を微妙に毎回変えているのが原因でおそらく縦方向にずれている場合がほとんだだと思います。その場合はNoxの場合は「タップ.uwsc」と「タップログ用.uwsc」を開いて2行目にある

「CMD = “nox_adb shell input tap ” + (G_IMGX_X + RANDOM(35)) + ” ” + (G_IMGX_Y + RANDOM(5))」

の (G_IMGX_Y + RANDOM(5))の部分 「+ RANDOM(5)」の部分を「 – 20 + RANDOM(20)」とかにしてみて下さい。これは見つけた画像の座標(G_IMGX_Y)から上方向に0~20の間でランダムな場所を上方向にタップしてねと言う意味です。よく分からなければ下のコードをそのままコピペしてください

Noxの場合は「タップ.uwsc」と「タップログ用.uwsc」に以下のコードをコピペで上書き

  1. CMD = “nox_adb shell input tap ” + (G_IMGX_X + RANDOM(35)) + ” ” + (G_IMGX_Y -20 + RANDOM(20))

BlueStacksの場合は「Bクリック.uwsc」と「Bクリックログ用.uwsc」に以下のコードをコピペで上書き(3行目です)

  1. btn(left,click,g_imgx_x + RANDOM(40),g_imgx_y -20 + RANDOM(20),RANDOM(10))

これでも誤タップが収まらないようなら-20のところを-30~-50の間の数字に変えてみて下さい。何をやっても解決しない場合は別途連絡下さい

コメント

  1. ありがとうございます。うまくできました、本当にありがとうございました、またご教授お願いします。

    • 希望通りの動作になったようで、よかったです。

  2. 返事ありがとうございます。やっぱりバックグラウンドではうごけませんしたか。それからもう一つ質問ですけど、マウスを取られないように設定したいですけど、どうすればいいですか?

    • すみませんMOUSEORG(wid,MORG_DIRECT,MORG_FORE)これですね、もう答え言ってましたのに全然理解しいてませんでした

      • いえいえ、問題が解決したようでよかったです

        • すみません、またまた質問ですけど、マクロを2時間をループして2時間経ってれば2時間止まって、またループ開始してほしいですけど
          Start = Gettime()
          While (Gettime() – start) < 7200
          Wend
          でuwscのスケジュールでインターバル4時間毎ってやってますが、これって大丈夫でしょうか?もしもっといいやり方が有れば教えて頂けると幸いです、ちなみに再開の時は変数を全部リセットして欲しいです。

          • それと上のループの中でa画像を認識してる時に、一定回数b画像を認識、さらにcの画像を一定回数認識したら、dの行動をして欲しい、でもbとcがその回数の条件に出す前はeの行動をしてほしいですがうまく出来ません
            Cntb = 1
            Cntc = 0
            While
            Ifb ….
            Elseif ……
            ……
            Elseif chkimgx b
            Elseif chkimgx c
            Elseif cntb = 0 and cntc >0
            Ifb chikimgx a
            d行動
            Else
            E行動
            Endif
            Else…..
            …..
            Endif
            Wend
            本当に何度も何度もすみません、もしよかったら、お教えてください、お願いします。

            • 仮にb画像が10回、c画像が5回としたら
              While
              Ifb chikimgx a and cntb = 10 and cntc > 5
              d行動
              cntb = 0
              cntc = 0

              Elseif chikimgx a and chkimgx b
              cntb = cntb +1

              Elseif chikimgx a and chkimgx c
              cntc = cntc +1

              Else
              E行動

              Endif
              Wend

              こんな感じでしょうか?(私の認識が間違っていたらすみません)

              a画像+b画像、a画像+c画像が見つかった時にカウントしていって一定回数がきたらd行動、それ以外はe行動になると思います

              カウントのリセットが必要ない場合はd行動の下2行は必要ないです

          • 私自身、スケジュールを使ったことがないので分かりませんが、kscさんのやり方で動いているようであれば問題ないと思います。

            変数のリセットは2時間経ってループを一旦休止する時にa = 0にすればいいと思います(変数名は適当です)

            スプリクトで組むなら下記を関数にしておいて(関数、ファイル、変数は適当です)

            ループ.uws-ファイル名
            Procedure ループ()    
            Start = Gettime()
            While (Gettime() – start) < 7200
            ループ処理
            Wend
            a=0
            exit
            Fend

            メインの.uwsでループ処理させればいいと思います

            メイン.uws-ファイル名
            call ループ
            While true
            ループ()
            sleep(7200)
            Wend

            こんな感じにしておけば2時間後に変数をリセットして2時間待機後にまたループ再開できると思います

            • 2時間毎にループと停止はこういう感じでできましか、全部のコマンドしてるのに、何で思いつかないのか、逆不思議です。
              それとa画像を見つけた時、b画像とc画像共に一定回数カウントされたらd行動しますが、どちらかのカウントが足りなければ、e行動します、それはどうすればできますか?

              • e行動をするトリガーは
                1.a画像がある
                2.a画像+b画像がある
                3.a画像+c画像がある
                4.a画像+b画像+c画像があるが、指定のカウントに届いていない
                5.a画像+b画像+c画像どの画像もない
                上記の5つの中にありますか?
                それとも別の条件でしょうか?

                • 1.a画像がある
                  2.a画像+b画像がある
                  3.a画像+c画像がある
                  4.a画像+b画像+c画像があるが、指定のカウントに届いていない
                  5.a画像+b画像+c画像どの画像もない

                  d行動は1、2、3、4
                  e行動はa画像+b画像+c画像、さらに指定カウントに出してる、です

                  • 出してる→足してるです

                    • 指定カウントの回数が仮にb画像が10回、c画像が5回としたら
                      While
                      Ifb cntb >= 10 and cntc >= 5 and chikimgx a and chkimgx b and chkimgx c
                      //b画像の認識回数10回以上、c画像の認識回数5回以上、画面内にa,b,c画像があるなら
                      e行動
                      cntb = 0
                      cntc = 0

                      Elseif chikimgx a and chkimgx b
                      //a画像とb画像が画面内にあるなら
                      cntb = cntb +1
                      d行動

                      Elseif chikimgx a and chkimgx c
                      //a画像とc画像が画面内にあるなら
                      cntc = cntc +1
                      d行動

                      Elseif chikimgx a
                      //a画像が画面内にあるなら
                      d行動

                      Endif
                      Wend

                      こうでしょうか?
                      //のあとに条件を書いてあります
                      演算式が違う場合は変えて下さい

  3. こんにちは、載せて頂いてるマクロを参考に別のゲームのマクロをお自作してますが、一つ問題がありまして、例えばChromeを対象にCHKIMGXで周回してますが、MOUSEORG(wid,MORG_DIRECT)でWID = GETID(”Google Chrome”)でしてると、どうしても認識してくれません、WID = 1か0にしてるとちゃんと動けます。それて何が原因ですか?ちなみCHKIMGX(“.bmp”,wid,1,1,500,1000,-1,5,-1)です、それとCHKIMGではちゃんとWID = GETID(”Google Chrome”)でもちゃんと動けます。
    もしよかったらご返事をお待ちしております。

    • 画像検索を始める前にCHKIMGXの関数を呼び出していないというのはないでしょうか?

      startup_chkimgx()
      これでCHKIMGXの関数を呼び出してCHKIMGXを使えるようにしますので画像検索の前に呼び出しておく必要があります

    • PC使えるようになったので試してみましたが、確かに認識できないですね

      CHKIMGXの説明を見ると「※MOUSEORGの設定は取得できないのでIDを明示的に指定してください。0の場合MORG_FORE, Window IDを指定した場合MORD_BACKと同じように動きます」

      とあるのでwidを指定した場合にはバックグラウンド操作になるみたいですね。たしかWindows10だとバックグラウンドの操作が上手くできない場合が多いというのを見ました

      なのでCHKIMGXを使う場合はkscさんがやっているようにWID = 0(スクリーン全体を検索、可視化状態)でやるしかないのかもしれません

      ただプラウザだとエミュと違って画像の解像度の誤差が無いと思うのでCHKIMGを使う方法でも問題ないかと思います

  4. FF15の新たなる王国のゲームは使えますか?

    • ラスクラのマクロをそのまま使えるかという意味では無理です
      マクロファイルを自分で編集できる場合でアプリがエミュレーターのNoxかBlueStacksで動く場合は可能です

      一応私の方でも作成依頼は受けていますが、最低1500円、最高3000円かかります
      依頼する場合でも上記で書いたようにNoxかBlueStacksで動く必要があります

      作成に関しては以下のページの下の方に記載しています
      マクロ販売

タイトルとURLをコピーしました