放置少女 – 育成自動化スクリプト

Category: Game, 放置少女 | Date: 2021年9月25日 | Author: Gappuri4th |

放置少女の育成はあまりにも時間がかかりすぎるので、育成の自動化スクリプトを作ってみました。


入手や使い方の説明などはこちらから。
cover1sea / houchi_auto_ikusei
zipダウンロード(v1.5)

過去バージョン

zipダウンロード(v1.1)
zipダウンロード(v1.2)
zipダウンロード(v1.3)
zipダウンロード(v1.4)

WindowsからNoxを介して動かすことを想定しています。
環境設定が面倒なのでちょっと敷居は高いかも。
機能としては、設定した育成方法(C級もしくはB級)、ステータス重み、育成回数に応じた自動育成と、ステータスの増加量記録機能を実装しています。
クロップだけしてOCRに通しているせいか、たまに数値の誤認識が起きるので完全放置せずときどき様子見たほうが良いです。
追記:OCRに通す前の前処理を加えて精度改善しました。
私の環境では誤認識が起きなくなりましたが環境によるかも?

なお、放置少女の規約は読んでいないのでどうなのか知りませんが、スマホゲームにおいてマクロや自動化ツールなどはアウトなこともあるので使用は自己責任でお願いします。
調べた感じだとこんなQAが見つかったので鯖に極端な負荷をかけるわけでもない育成自動化くらいは許されるとは思いますが、運営の匙加減なのでコッソリ使うくらいにとどめたほうがいいと思います。

36件のコメント

  • 匿名
    2021年9月26日 23:48

    便利なツールありがとうございます。
    引数にある重み付けの設定値の意味について教えて下さい。

    • Gappuri4th
      2021年9月27日 00:16

      筋力増加量*重み1+敏捷増加量*重み2+知力増加量*重み3+体力増加量*重み4
      を計算して、結果が正の場合に育成確定する、という感じです。

  • 匿名
    2022年1月1日 17:38

    あけましておめでとうございます。
    うまいこと使えないのですが、質問しても大丈夫ですか?
    ご迷惑になるようでしたら諦めます。

    • Gappuri4th
      2022年1月2日 00:35

      あけましておめでとうございます。
      解決できるかはわからないですが、質問はご自由にどうぞ。

      • 匿名
        2022年1月2日 15:22

        ありがとうございます。

        コマンド起動を掛けた所、画像の状態で育成が走りませんでした。

        一番下のPython -Vはパスを通すのにミスがあったのか心配だったので走らせただけです。

        何かわかりましたらご教授お願いします。

        • 匿名
          2022年1月2日 15:24

          申し訳ないです。
          アップローダーのURL貼り付けてありますので、お手数ですがそちらから画像の確認をお願いします。

        • Gappuri4th
          2022年1月2日 15:33

          画像ありがとうございます。
          ファイルパスに問題がありそうなので、以下をご確認ください。

          ・main.pyがあるディレクトリに、「tmp」という名前のディレクトリはありますか?なければ作成してください。

          ・main.pyまでのファイルパスに日本語が入らないようにしてください。
          H:\文字化け\houchi_~←この文字化け部が駄目そうなので、Hドライブ直下に置くなど。

          • 匿名
            2022年1月2日 17:46

            使用できました!

            2番目作業 文字化け部分が原因だったようです。
            フォルダ名を英語変更で改善しました。

            お手数おかけしてしまい申し訳ありません。
            ありがとうございました。

          • Gappuri4th
            2022年1月2日 19:39

            解決したようでよかったです。

  • KK
    2022年1月8日 15:21

    大変便利なツールありがとうございます。

    一応使った感じを残しておきます。
    1.自分の環境では1回育成4-5秒程度時間がかかりました。
    2.認識ミスは見ている限りありませんでした。
    3.WIFI環境ですが、たまに2~5秒のローディングが入るとOCR認識できないのか、スクリプトが落ちて育成が停止しました。そのため、たまに停止を見る必要があります。

    • Gappuri4th
      2022年1月9日 12:44

      レビューありがとうございます。助かります。

      1.育成確定後のステータス上昇表示の待ち時間がボトルネックとなっています。時間効率が悪いのでどうにかしたいと思うところ。
      3.これはちょっと改善案が思いついたので改善試してみます。

  • 匿名
    2022年2月2日 01:09

    お世話になっております。
    Python初心者であまり理解できていないのですが、実行の仕方に問題があるのでしょうか。

    C:\Program Files (x86)\Nox\bin>python main.py c|b 10000 10000 10000 10000 500
    ‘b’ は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。

    • Gappuri4th
      2022年2月2日 02:16

      オプションの指定の問題ですね。
      c|bはcもしくはbどちらか一方という意味です。
      C級ならc、b級ならbを指定ください。
      あと、重み値が大きすぎるとオーバーフローが怖いので、小さめの方がいいかもです。
      (10000くらいなら大丈夫だとは思いますが)
      提示頂いたコマンド例では全ステータスを均等育成となるので、すべて1で指定しても同様の結果が得られます。

      例:B級の均等育成500回
      python main.py b 1 1 1 1 500

      • 匿名
        2022年2月2日 19:50

        ありがとうございます無事実行できました。

  • 初心者
    2022年2月5日 11:04

    全くPyhonというかプログラミング関連に詳しくなくて悪戦苦闘しながら、どうにか導入までできたのですが、最後の育成バッチがうまく動きません
    エラーで「NotADirectoryError: [WinError 267] ディレクトリ名が無効です。」と出てしまっています
    わからないことだらけなので、ご教示いただけますと幸いです

    • Gappuri4th
      2022年2月5日 15:13

      NotADirectoryErrorなのでディレクトリ設定にミスがあるのだと思います。
      以下ご確認ください。

      1.main.py 13行目「F:\\Nox\bin」が「自身のNoxインストールディレクトリ\bin」になっているか

      2.main.pyがあるディレクトリに「tmp」ディレクトリがあるか(無ければ作成)

      • 初心者
        2022年2月7日 00:25

        お返事遅くなり、申し訳ございません

        ディレクトリ設定については改善したのですが、今度はIndexErrorが発生してしまいました…

        1080p
        b’Physical size: 1080×1920\r\n’
        Traceback (most recent call last):
        File “C:\houchi_auto_ikusei-1.3\main.py”, line 282, in
        main(sys.argv)
        File “C:\houchi_auto_ikusei-1.3\main.py”, line 251, in main
        for i in range(int(args[6])):
        IndexError: list index out of range

        と表示されています
        参照範囲エラーというのは理解できるのですが、どこを直すべきなのかがわかりません…
        お手数をおかけしますが、ご教示いただけますと幸いです

      • Gappuri4th
        2022年2月7日 15:49

        確認してみたところ、githubで改行コードが自動変換されることが原因でbatファイルが正常に動かないようです。
        応急策として、batファイルの一行目(SET STR=)を削除してみてください。

        • 初心者
          2022年2月7日 22:53

          お返事ありがとうございます

          いただいた応急策を実施したのですが、エラー内容に変更ありませんでした…
          申し訳ありません

        • Gappuri4th
          2022年2月7日 23:28

          一行目の改行まで削除されていますか?
          一行目の改行まで削除し「SET /P STR=”育成回数:”」が一行目になるようにすると、
          「育成回数:」で表示が止まって育成回数が指定できるようになるかと思います。
          これで不可能な場合、batファイルの「%STR%」が育成回数の指定なので、ここを任意の数値に直接書き換えて実行するしかないかもしれません…

  • 初心者
    2022年2月9日 12:26

    お返事ありがとうございます

    もう一回、ダウンロードし直して、一番上の行を削除しましたら解決しました!
    ありがとうございました!

  • guone
    2022年2月11日 00:29

    お世話になっております。
    順番通りにやってみた結果、うまく動かないので大変恐縮ではございますが質問させていただきます。

    C:\Users\guone>python main.py c 1 1 1 1 3
    err: ss_dir not exist
    C:\Users\guone\tmp

    上記のような結果になりました。「guone」はユーザー名です。
    なぜそこのtmpを参照しようとするのかわかりません。。
    どうすればうまく動くようになるか、思い当たる節がございましたらご指導のほどをよろしくお願いいたします。

    • guone
      2022年2月11日 10:25

      パソコン再起動したらできるようになっていたようです。お騒がせしましたm(_ _)m

  • Eile
    2022年3月18日 01:05

    こんばんは。こちらに記述された手順に則ってコマンドを使用したのですが、「python: can’t open file ‘main.py’: [Errno 2] No such file or directory」と出てしまい使用できませんでした。お手数をおかけしますが、ご教示いただけますと幸いです。

    • Gappuri4th
      2022年3月18日 09:24

      エラー文通り、ファイルがない
      →main.pyがないディレクトリで実行しています。
      main.pyのあるディレクトリに移動して実行すればよいかと思います。

  • 匿名
    2022年5月4日 17:29

    便利だ、元々クイズ目当てで拝見していましたが、これは礼を言わざるをえない。
    素晴らしいツール有難うございます。

  • 匿名
    2022年5月15日 01:35

    大変便利なツールありがとうございます。

    C:\Users\user\Desktop\houchi_auto_ikusei-1.5>python main.py c 0 0 0 1 11
    Traceback (most recent call last):
    File “main.py”, line 7, in
    import cv2
    ModuleNotFoundError: No module named ‘cv2’

    このエラーはどういう意味でしょうか?

    • 匿名
      2022年5月15日 02:05

      大変失礼しました。
      先ほどのエラーは自己解決できました。

  • G
    2022年5月15日 18:05

    こんばんは。
    以下のようになってしまって動作しません。

    C:\houchi_auto_ikusei-1.5>SET /P STR=”育成回数:”
    育成回数:10000

    C:\houchi_auto_ikusei-1.5>python main.py b 1 0 0.1 1 10000
    Traceback (most recent call last):
    File “C:\houchi_auto_ikusei-1.5\main.py”, line 20, in
    tool = pyocr.get_available_tools()[10000]
    IndexError: list index out of range

    IndexErrorの対処方法を調べてはみたもののわかりませんでした…なにか思いつくものがあればお願いします。上記の%STR%を任意の値にしても変化はありませんでした。

    • Gappuri4th
      2022年5月15日 18:29

      原因不明ですが、プログラムが書き換わってしまっているように見えます。
      main.pyをメモ帳などで開いたとき、20行目のコードはどうなっていますか?
      以下の通りになっていなければ以下に書き換えてください。
      tool = pyocr.get_available_tools()[0]

      • 匿名
        2022年5月17日 22:04

        C:\houchi_auto_ikusei-1.5>SET /P STR=”育成回数:”
        育成回数:20

        C:\houchi_auto_ikusei-1.5>python main.py b 1 0 0 0 20
        Traceback (most recent call last):
        File “C:\houchi_auto_ikusei-1.5\main.py”, line 20, in
        tool = pyocr.get_available_tools()[0]
        IndexError: list index out of range

        C:\houchi_auto_ikusei-1.5>PAUSE

        上記の結果になりました。
        素早い返信してくださっていたのに遅れて申し訳ないです

      • Gappuri4th
        2022年5月17日 22:54

        Tesseract-OCRはインストールされていますか?
        (初期設定の3.)
        インストール済の場合、デフォルトのインストールディレクトリ以外の場所にTesseract-OCRがインストールされているかと思いますので、19行目のファイルパスを自身のインストールディレクトリにあわせて変更してみてください。
        インストール先を変えた覚えがない…という場合は
        C:\Program Files (x86)\Tesseract-OCR\にインストールされている可能性が高いです。
        ↑にtesseract.exeがあれば
        pyocr.tesseract.TESSERACT_CMD = r”C:\\Program Files\\Tesseract-OCR (x86)\\tesseract.exe”
        となります。

        • 匿名
          2022年5月17日 23:25

          Tesseract-OCRのインストール方法が間違っていたようです。アンインストールして再度インストールしたところ問題なく動きました!ありがとうございます!!

  • とん
    2022年5月17日 20:31

    とても便利です。ありがとうございます。
    いくつか質問させてください。
    MAX_OCR_RETRY =
    NUM_ARGS =
    NUM_ARGS_DEV =
    SEC_WAIT_TAP =
    SEC_WAIT_GET_STATUS =
    SEC_RETRY_GET_STATUS_INTERVAL =
    SEC_RETRY_OCR_INTERVAL =
    SEC_WAIT_SIGINT =
    それぞれの意味合いを教えていただけますでしょうか?

    また、ステータスが読み込めない際、再読み込みと時と、次に進んでしまう時があります。
    どのような設定をしたらよろしいでしょうか?

    • Gappuri4th
      2022年5月17日 21:34

      あまりスクリプト内のパラメータを変更することは想定していませんが、一応各パラメータについて説明します。

      MAX_OCR_RETRY:
       OCRで読み込んだ数値が異常に小さい/大きいことを検知した時のリトライ回数上限です。
       上限を超えるとリトライをあきらめて、いったん育成を確定します。

      NUM_ARGS =
       main.pyのデフォルトの引数の数です。

      NUM_ARGS_DEV =
       noxが複数窓の場合のmain.pyの引数の数です。
       IP:portの指定が必要になるためNUM_ARGS+1になります。

      SEC_WAIT_TAP =
       画面タップ後の待機時間(秒)

      SEC_WAIT_GET_STATUS =
       育成画面をキャプチャしたあとの待機時間(秒)
       PCのスペックによってはキャプチャ画像の保存がOCR読み込ませるまでに間に合わなさそうだったためとりあえず用意したパラメータです。
       私の環境では0でも動くためとりあえず0になっています。

      SEC_RETRY_GET_STATUS_INTERVAL =
       OCRで読み込んだステータスがそもそも数値ではない場合の待機時間です。
       これはラグでボタンが押せていない、画面遷移ができていないことが要因であることがほとんどであるため、
       一定時間待機後に「やめる/保存」ボタンが出ているのか「C級育成/B級育成」のボタンが出ているかを判定し、それに応じて状態遷移しています。

      SEC_RETRY_OCR_INTERVAL =
       OCRで読み込んだ数値が異常に小さい/大きいことを検知した時のリトライまでの待機時間です。

      SEC_WAIT_SIGINT =
       スクリプトがSIGINT(Ctrl+C)を受け取ったとき、つまりはユーザがスクリプトを強制終了したときの育成結果画面表示でエラーを起こさないようにするための待機時間です。

      >また、ステータスが読み込めない際、再読み込みと時と、次に進んでしまう時があります。
      想定動作のため特に問題はないかと思います。
      ステータスが読み込めない場合がまず2パターンあり、それぞれで処理が変わります。
      ・読み込んだ数値の大きさがおかしい場合:
       MAX_OCR_RETRYで書いた説明の通りです。

      ・読み込んだものがそもそも数値として認識できなかった場合:
       SEC_RETRY_GET_STATUS_INTERVALで書いた説明の通りです。

      • 匿名
        2022年5月17日 22:12

        丁寧に説明していただき、本当にありがとう御座います!
        お陰様で安定させられるようになりました。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)