私はWorld of Warcraftに非常に長い間会って、すべてを愛していましたが、ほとんど何も私を悩ませませんでした-釣り。 これは退屈な繰り返しアクションで、釣りボタンを押すだけで、5〜15秒ごとにフロートを突くことができます。 私の開発スキルは向上しており、釣りの状況は毎年改善していませんでしたので、1石で2羽の鳥を殺すことにしました。
私は、コンピューターを制御することなく最小化モードで動作する、釣りをすることができるボットをすでに見てきました。 私はまた、不正行為の禁止に関する無慈悲なサーダードがどれほど良いかを知っています。 RAM内のデータの変更は、組み込みのアンチチートによって簡単に決定されます。 さて、最後に-ポピーでボットが見つかりませんでした。
したがって、これらの問題をすべて一度に閉じて、マウス制御をインターセプトし、フロートをスローし、必要に応じて画面上で突くボットを作成することにしました。 思ったように、pythonにはそのようなことを自動化するための幅広いツールがあり、私は間違っていませんでした。
少しグーグルで、
OpenCVを見つけました。ここでは、
簡単 なガイド付きのテンプレートが検索されてい
ます 。 それを使用して、画面上のフロートを探します。
まず、画像自体をフロートで取得する必要があります。 スクリーンショットを撮る方法の
ガイド付きでpyscreenshotライブラリを検索して見つけたら、少し編集します。
import pyscreenshot as ImageGrab screen_size = None screen_start_point = None screen_end_point = None
次の図を取得します。

次に-フロートを見つけます。 これを行うには、探しているfloatテンプレート自体が必要です。 何百もの試みの後、私はまだOpenCVが最もよく定義しているものを選択しました。 ここにあります:








上記の
リンクからコードを取得し、ループとテンプレートを追加します。
import cv2 import numpy as np from matplotlib import pyplot as plt def find_float(screenshot_name): print 'Looking for a float' for x in range(0, 7):
したがって、フロートの座標があり、
autopyは文字通り1行を使用してマウスカーソルを移動できます。座標を代入します。
import autopy def move_mouse(place): x,y = place[0], place[1] print("Moving cursor to " + str(place)) autopy.mouse.smooth_move(int(screen_start_point[0]) + x , int(screen_start_point[1]) + y) def main(): check_screensize() img_name = make_screenshot() cords = find_float(img_name) move_mouse(cords)
フロート上のカーソル、そして今楽しい部分は、いつクリックするかをどのように知るのですか? 実際、ゲーム自体では、フロートは跳ね返り、何かが水に飛び込んでいるように音を出します。 画像検索でテストした後、OpenCVが結果を返す前に0.5秒を考えなければならなかったことに気付きました。フロートはさらに速くジャンプし、OpenCVを使用して画像の変更を判断することはできそうにないので、音を聞きます。 この問題については、さまざまな解決策を掘り下げて、ここで停止する必要がありました。音声認識にGoogle APIを使用する例です。そこから、音声を読み取るコードを取得します。
import pyaudio import wave import audioop from collections import deque import time import math def listen(): print 'Listening for loud sounds...' CHUNK = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 2 RATE = 18000
最後に残っているのは、魚自体を捕まえることです。音が聞こえたら、再びautopyを使用します。
def snatch(): print('Snatching!') autopy.mouse.click(autopy.mouse.RIGHT_BUTTON) def main(): check_screensize() img_name = make_screenshot() cords = find_float(img_name) move_mouse(cords) if listen(): snatch()
私のテストによると、私は夜にボート釣りを辞め、そのような虐待の週に彼は約7000回投げ、約5000匹の魚を釣った。 30%のエラーは、フロートの点灯または回転のためにサウンドをキャッチしたり、フロートを見つけることができない場合があるために発生します。 しかし、私はその結果に満足しています-最初にpythonを試し、ボットを作成し、多くの時間を節約しました。
ここで完全なコードを見ることができますが、ゲームプロセスの自動化は
ユーザー契約に違反し 、禁止を取得できるため、フィッシングの悪用を使用しないことを強くお勧めします。
どんなコメントでも喜んでいます。