アプリビレッジ

おすすめのゲーム・スマホアプリの情報やストーリーなどの濃い話(ネタバレ含む)、面白い口コミまでもひっそりと公開中!

簡単にできるUWSCを使ったゲーム自動化のプログラミング【応用編】

公開:2021年05月15日

ゲーム自動化を行うためのマクロを何回かに分けてご紹介してきました。今回は応用になります。前回までのプログラミングでは補いきれなかった部分になりますので、これを読めばマクロがより便利で使いやすくなるはずです。

今回紹介する追加プログラムはこちらになります。

  1. 待ち時間を作る
  2. ランダムを作り不規則にする
  3. カーソルの位置を記憶し、元の場所に戻す
  4. テキストボックスを表示
  5. ループの回数指定とカウント表示
  6. メールの送信

興味のあるプログラムは見つかりましたか。それでは詳しく紹介していきましょう!

ゲーム自動化を止める待ち時間を作る

ゲームを自動化させていた、もっとも考えるのが行動のスピードです。オンラインゲームが増えた昨今では何でもかんでも素早くクリックしているとエラーが発生してしまいます。なので、何かの行動をする前、した後に少し間を取りたいことってありますよね。その悩みを解決するのがSLEEPです。使い方は簡単。

SLEEP(秒)

止めたい部分に入れて秒数を指定すればOK。0.01秒まで対応しており、例えば0.1秒止めたいならsleep(0.1)、12秒止めたいならsleep(12)ですね。

ゲーム自動化でランダムを入れて不規則にする

皆さんが心配している中に、同じ行動をずっと繰り返していたらバレてしまうというものがあるかと思います。サーバーでプレイヤーの行動を全てログとして捉えていたら、確かに同じ行動は怪しい行動だと思われるでしょう。まあ、サーバーの負荷が上がるのでまずないと思いますが……それでも、心配する人のためのランダムの作り方を紹介します。

ランダムにするためには、「RANDOM(範囲)」を使用します。0~範囲の中に入れた数字がランダムに選ばれます。つまり、RANDOM(10)と指定すると0~9が選ばれるということですね。これを応用して

R=RANDOM(10)

とすれば、変数にも数字を入れることができます。つまり、前回紹介したクリック動作に上記のランダムのRをプラスすることで、毎回クリック場所を10程度ずらせるのです。

IFB CHKIMG("画像ファイル名")
R=RANDOM(10)
BTN(LEFT, CLICK, G_IMG_X+10+R, G_IMG_Y+10+R)
ENDIF

10は画像によって異なりますので、ご自身が使う画像やクリック箇所に合わせて変更しましょう。これで毎回同じ場所をクリックするという問題は回避できます。同じ場所をクリックするのが心配という人は、ぜひ使ってみてくださいね。

ゲーム自動化時のカーソルの移動が煩わしい

PCが1台しかない場合、ゲーム自動化をしているときにパソコンが使えないので、無理やりパソコンを使おうとしますよね。その時、高い確率でマウスの主導権をマクロに取られて鬱陶しさを感じる人もいるでしょう。私も同じです。そんな人におすすめなのが、カーソルの位置を元に戻すプログラムです。

x=G_MOUSE_X
y=G_MOUSE_Y
MMV(x, y)

変数のxとyに「G_MOUSE_X」と「G_MOUSE_Y」で縦と横の座標を覚えさせて、「MMV(x, y)」でカーソルを移動させます。ですので、実際に使う場合には以下のような形になります。

IFB CHKIMG("画像ファイル名")
x=G_MOUSE_X
y=G_MOUSE_Y
BTN(LEFT, CLICK, G_IMG_X+10, G_IMG_Y+10)
MMV(x, y)
ENDIF

こうしておけば、画像を見つけてマクロがクリックした後に、元の座標xとyにカーソルを戻してくれます。

ちなみに変数において「xとX」、「yとY」はまったく別ものになりますので、「MMV(x, y)」を使用の際は「x=G_MOUSE_X」と「y=G_MOUSE_Y」の最初の文字は小文字で書くのを忘れないようにしてください。

ゲーム自動化を彩るテキストの表示

マクロがうまく動いてくれないときやどの部分を実行しているのか、表示させたいことってありますよね。短いマクロならゲームの自動化をしていても問題はありませんが、長くなってくると今、どの部分のプログラムが動いているのかわかりにくくなってしまいます。エラーを見つけるのにも役立ちますので、テキストの表示は重要です。UWSCでももちろん、テキストボックスの表示が可能です。

FUKIDASI(表示したいテキスト, 横, 縦, 吹き出しの向き, フォントサイズ, フォント名, 文字色, 背景色, 透明化) 

吹き出しの向きに関しては「0.なし」「1.上」「2.下」「3.左」「4.右」と数字で指定します。全て入力する必要はなく、省略も可能です。「FUKIDASI(表示したいテキスト)」とすれば、左上に黄色い背景色の黒いフォントでテキストが表示されます。テキストをダブルコーテーション("文字列")で括り、プラス(+)をつけることで、変数も使えます。詳しくは下のループ表示回数のところをご覧ください。

似たようなものにMSGBOXもありますが、こちらはOKのクリックが必要になったりしますので、ゲーム自動化ではあまり使いませんので紹介はしません。もしも、興味がある人は「UWSC辞典」に詳しく載っていますよ。

ゲーム自動化のループ回数設定とカウント表示

マクロを走らせていて、回数指定が欲しくなることがあります。例えば、10回だけ周回したいとか、スタミナ回復薬を3個まで使いたいなど、使用状況において無限ループでは困ることがちょいちょいでてきますよね。簡単にループ回数を決められますが、フラグやIFを使うので、少しプログラミングぽくなっていきます。

まずは追加するプログラムを紹介します。

A=1
IFB A = 10
BREAK
ENDIF
A = A + 1

「A=1」はループの外に書き、それ以降はループ内に入れます。IFBを越えて、「A = A + 1」に辿り着くたびに、Aに1ずつプラスされていきます。それが「A = 10」で指定した10回に到達すると、ループを「BREAK」で終了させます。10を100に変えると100回ループということですね。上は必要な部分だけを入れましたが、実際に使うときは以下のような形になります。

A=1
WHILE TRUE
IFB CHKIMG("画像ファイル名")
BTN(LEFT, CLICK, G_IMG_X+10, G_IMG_Y+10)
SLEEP(1)
A = A + 1
ENDIF
IFB A = 10
BREAK
ENDIF
WEND

少し長いので難しく見えますが、今までの応用でしかありませんので、きちんと理解していれば、簡単に使いこなせるはずです。それとSLEEPを入れないと、PCの性能によっては1ループで2回以上カウントすることがあります。ご自身の環境に合わせて待ち時間を設定してください。

ループ回数の表示

指定回数だけループさせると次に気になるのが、現在は何回目なのかということでしょう。こちらも応用となりますので、今までの内容を使えば実現可能です。使うのは「FUKIDASI(テキスト表示)」ですね。「IFB CHKIMG("画像ファイル名")」の上に、

FUKIDASI("現在" + A + "周目")

を入れるだけです。ビックリするくらいに簡単ですよね。書き方を少し変えるとカウントダウンにすることもできます。

B = 10 - A
FUKIDASI("残り" + B + "周")

変数の計算を覚えるとこのように簡単に表示ができるようになります。他にもSLEEPを使ったカウントダウンタイマー持つくれます。SLEEPで長い秒数を指定したいときに使うと便利ですね。使うのは「FOR ~ NEXT」です。こちらは条件が満たされるまで次へ進まないプログラムです。

FOR A = 179 TO 1 STEP -1
FUKIDASI("あと" + A + "秒")
SLEEP(1)
NEXT

と書くことで、180秒間のカウントダウンタイマーになります。待ち時間を変更する場合には179の部分を変更してください。

ゲーム自動化でメールを送信しよう

ここからはメールサーバーの知識やアカウント設定などが必要になります。自分でメーラーの設定をしたことがある人なら問題ないと思いますが、追加するプログラムが増えますのでハードルが一気に上がるのでご注意ください。マクロの終了や異常が発生した先にメールで教えてくれるようになるのは便利ですよ。

// メール送信設定 ここから ----------------------------------------------
mailfrom = "送信元メールアドレス"
mailto = "送信先メールアドレス"
subject = "メールタイトル"
body = "メール本文"
authflag = true	// SMTP認証使用の有無 Trueが使用 Falseが不使用
authid = "アカウントID"	// SMTP認証使用時のID
authps = "パスワード"	// SMTP認証使用時のパスワード
sslflag = true	// 暗号化された接続(SSL)使用の有無 Trueが使用 Falseが不使用

smtpserver = "送信サーバーアドレス"	// Gmailならsmtp.gmail.com
smtpserverport = 465	// サーバーのポート番号 Gmailなら465

// 以下は変更不要
Dim objEmail = CreateOleObj("CDO.Message")

objEmail.From = mailfrom
objEmail.To = mailto
objEmail.Subject = subject
objEmail.Textbody = body

schemas = "http://schemas.microsoft.com/cdo/configuration/"
objEmail.Configuration.Fields.Item(schemas + "sendusing") = 2
objEmail.Configuration.Fields.Item(schemas + "smtpserver") = smtpserver
objEmail.Configuration.Fields.Item(schemas + "smtpserverport") = smtpserverport

//SMTP認証を利用する場合
ifb authflag
    objEmail.Configuration.Fields.Item(schemas + "smtpauthenticate") = true
    objEmail.Configuration.Fields.Item(schemas + "sendusername") = authid
    objEmail.Configuration.Fields.Item(schemas + "sendpassword") = authps
endif

//暗号化された接続(SSL)を利用する場合
if sslflag then objEmail.Configuration.Fields.Item(schemas + "smtpusessl") = true

objEmail.Configuration.Fields.Update

// ここまで ----------------------------------------------

手打ちだと確実にミスが出るのでコピペでお使いください。送信元のアドレスは正直なんでも構いませんが、お使いの環境に酔ってはスパムメールとして扱われます。できれば、送信サーバーと同じアドレスを使うと良いでしょう。「送信先」はメールが届いて欲しいメールアドレスになります。

その他の設定につきましてはお使いのメールサーバーにお問い合わせください。言っている意味が分からない場合、おそらく設置は難しいです。以上がメールを送る設定になります。実際にメールを送る部分に以下を追加ください。

COM_ERR_IGN
objEmail.Send
COM_ERR_RET

上記で紹介したループの「BREAK」の前などに入れると、ゲーム自動化の終了をメールで教えてくれるようになります。ぜひ、お試し下さい。

まとめ

簡単にできるゲーム自動化のプログラミング「応用編」はいかがだったでしょうか?

今回紹介したプログラムを追加すれば、UWSCが使える環境であれば、かなりの状況に対応できるようになるはずです。色々なものが便利になり、周回にかける手間を大きく削減できるようになります。ポチポチと修行僧のようにクリックし続けるのもゲームの楽しみでしょうが、結果が変わらないならマクロでも良いんじゃないのかと思う人は、ぜひゲーム自動化のマクロを覚えていきましょう。

あなたの人生の時間は限られています。自分が後悔しないように有意義に使って下さいね!

前の記事

次の記事

あなたにおすすめ

よく読まれている記事

同時に読まれている記事

書き込みはこちらから