2021/07/10

【MHRise×Arduino05】マカ錬金回しの自動化 (01改良版)

※本記事は、モンスターハンターライズ(MHRise)のマカ錬金への錬金素材の投入と、闘技大会ラージャンクエストでの乙を自動化するプログラムについて解説した記事です。MHRiseの操作をArduino Leonardoで自動化しております。「Arduinoって何?」って方はポケモン剣盾自動化の00回目の記事を、Arduinoの環境構築(ライブラリ含む)は01回目の記事をご覧ください。


今回の記事は、第01回の記事での闘技ラージャン突撃自動化を改良し、マカ錬金への錬金素材(モンスター素材)の投入する動作を追加しました。第01回の記事も合わせて参考にしてください。

また、錬金素材が何百、何千と大量にあることを前提としております。テオ・テスカトル素材の自動入手については前回の記事をご覧ください。

今回の記事は、所持している素材を大量に使用します。設定を誤って使用すると意図しない素材消費(宝玉を錬金に使用する等)の恐れがあります。最低限の設定を理解し、自身の環境に合わせて調整したうえで使用してください。

本記事では、このプログラム(スケッチ)でできることや原理を解説したうえで、スケッチを配布しています。とにかくスケッチが欲しいという方は下へと読み飛ばしてください。

 

きっかけ、動機

前回の自動化では溶岩洞でウロコモリトカゲを攻撃することによりモンスター素材の回収を自動化し、錬金素材としてテオ・テスカトルの素材をそこそこの効率で回収することができました。記事の投稿後も少しずつ収集を続けたところ、鱗などの素材が何千も獲得できたのは良いのですが、マカ錬金への投入が面倒になってきました

第01回の記事での闘技ラージャン突撃自動化を用いてクエスト回数を進める作業は自動化しておりましたが、マカ錬金への投入自体は自動化しておらず、錬金10回分(お守り50個)のクエスト失敗のみを自動化して錬金結果は自分で確認しておりました。 始めのうちは良おまの出現に一喜一憂しておりましたが、そこそこのお守りが揃った現在では一喜することが減り面倒になってきました。当たらないガチャほど虚無なものはない。

そこで、錬金素材の投入の動作を追加しました。受け取りも自動で行い、錬金結果の確認は装備BOXを覗くことでまとめて行います。

これで何ができるの?

集会所から闘技大会05のラージャンに挑み、1乙して集会所に戻るという動作を繰り返します。そのうえで、今回の追加点として10周ごとにギルドストアに話しかけ、マカ錬金の回収と新たな錬金の予約(幽玄)を行います。

元のプログラム同様、5周ごとに隠密隊でのモンスター素材や交易船での便利アイテムも自動で回収します。錬金をしない場合も、放っておくだけでハチミツやマンドラゴラ、あるいは錬金用の素材を少しずつ回収します。

今回の自動化では、所持している素材を大量に使用するため、長時間放置すると予期せぬ素材消費が考えられます。寝落ちした際の対策として、錬金素材の投入について上限を設けることができるようになっています。初期設定では100クエスト(=お守り500個)分を投入した後は隠密隊や交易船のみ続行するようにしています。


原理、おおまかな流れ

概要

大半の動作は第01回の自動化と同様です。同様の動作の説明は簡単な説明のみとするので、より詳しい内容は過去記事をご覧ください。それに対しての主な追加点、変更点を黄色で記述します。


本プログラムでは基本的に、

「闘技大会ラージャンに挑み、1乙でクエスト失敗となる」

という動作を繰り返します。

そのうえで、5クエスト(5乙)ごとにルームサービスに話しかけ、隠密隊と交易船のアイテムを回収(or売却)します。 

さらに10クエスト(10乙)ごとにギルドストアに話しかけ、マカ錬金の受け取りと新たな錬金(幽玄)の予約を行います。


闘技大会ラージャンについて

本プログラムでは集会所からウツシ教官に話しかけ、闘技大会クエスト05のラージャンを選択、クエスト開始からラージャンに倒されるようにします。


「闘技大会ラージャンに挑み、1乙でクエスト失敗となる」の動きは以下のようになります。

⓪集会所の教官に話しかけてクエスト選択、防御の低いガンナー装備でスタート
①キャンプから少し左に動いてヒトダマドリを避けつつ、ラージャンに向かって飛び降りる(時短のため翔蟲も使用)
②ラージャンにプレイヤーの体をぶつけて確実に発見される
③うまくいけば咆哮回避あるいは段差を上るタイミングで咆哮を受けて吹っ飛びます。
④壁に向かって続けるため位置が動かずラージャンの攻撃に当たりやすく、倒れてもすぐに立ち上がります。
攻撃2発でデスルーラ

となります。

クエスト失敗で集会所に戻ったら、再び教官に話しかけに行きます。


隠密隊、交易船について

隠密隊は出発から帰ってくるまでに5クエストかかり、交易船では1クエストごとにアイテムが蓄積されます。本プログラムでは、隠密隊が帰ってきて、交易船アイテムがそこそこ溜まってる5クエストごとにアイテム回収を行います。

ラージャン5回の後、ループを中断して集会所準備エリアへマップ移動し、すぐ右にいるルームサービスに話しかけます。

隠密隊と交易船のうち、隠密隊のみカムラポイントを必要とします。カムラポイントが不足している等で隠密隊を使いたくない場合はキャンセルすることができます。スケッチの最初に固定値として設定しているommitsuGo = 1を0に変更することで隠密隊の使用をキャンセルできます。

また、隠密隊、交易船それぞれについて、スケッチの最初に固定値として設定しているommitsuUri = 0、koekiUri = 0をそれぞれ1にすることで、アイテムを受け取らずに売るようになります。 


マカ錬金について(追加要素)

ギルドストア会話から錬金受け取りについて

第01回の自動化からの追加要素として、マカ錬金の回収と予約を行います。

 マカ錬金はモンスター素材などを一定ポイントだけ投入することでお守り(護石)に変換してくれる機能です。クエストをクリアor失敗することにより1回ずつ錬金が進み、1度に10クエスト分まで同時に予約することができます。そのため、本スケッチでは10クエストごとにマカ錬金についての操作を行います。

ラージャン10回の後、ループを中断して集会所エリアへマップ移動し、クエスト受付の隣にいるギルドストアに話しかけます。

 ギルドストアに話しかけると、上から順に 買う、売る、福引(セール時のみ)、マカ錬金、Amiboを読み込む、世間話 の項目があります。セールの有無に関わらずマカ錬金は下から3番目となるので下から上へカーソルを動かします。

錬金術一覧を開いたら、まずは1番下「護石を受け取る」を選択します。錬金結果の護石が表示されるので、「すべて受け取る」を選択します。

錬金の予約、素材の投入について

受け取って予約が空になったら、「錬金術・幽玄」を選択します。護石1個当たりカムラポイント100pt、錬金素材150ptを消費し、クエスト1回あたり護石5個分、クエスト10回で50個分予約します。大量のポイントや素材を使用するため、必ず事前に稼ぎを行ってください(過去の自動化を参考)。他の錬金術を選択する場合はスキルの選択等が異なるため適宜調整してください。

ここから、錬金に使用する素材の選択となります。以下の「作成したスケッチ」にて示しますプログラムの中で定義されている1番上の関数「void renkinSelect()」のfor文(10回繰り返し)の中{カッコ内}を編集して設定します。ご自身の所持しているモンスター素材の種類や個数の状況に合わせてスケッチを書き換えてください。

錬金術・幽玄」を選択して素材の選択画面に移ります。ここでは、始めに並び順として「評価値順」か「所持数順」かを決定します。両者はRスティック押し込み(RCLICK)をすることで変更できるので、「評価値順」が良ければ押さない、「所持数順」が良ければ押すようにします。

「所持数順」に変更したい場合のみ Rスティック押し込み(RCLICK)を1回だけ入力

 その後、指定されたページ数(LRで移動)、行数(十字キー上下で移動)へ移動し、指定した個数を投入します。ここでは設定を容易にするため、「materialList(int page, int line, int piece)」関数を用意しております。

 「materialList(int page, int line, int piece)」関数では、

int pageの値-1だけRボタンを入力し、int pageのページ番号まで移動する。

②上下ボタンにて、ページ内の上から(int line)番目(1~7)の素材を選択する。ただし、上から4番目までは下ボタン、5番目以降は上ボタンを押して移動する。

③使用する素材数として(int piece)個を投入します。ただし、int pieceの値によって動作が変化します。

3-A. int pieceが10以上であれば、右ボタンを押して値を10だけ増加させます。その後、int pieceの値を-10したものとして扱い、int pieceが10未満になるまでAを繰り返し、1~9であればBの操作を行います。

3-B. int pieceが0以上9以下であれば、上ボタンをその回数だけ押して値を増加させます。

3-C. A, Bいずれの条件も満たさない場合、つまりはint pieceが負の整数であった場合、その値に関わらず下ボタンを1回だけ押します。この時、

つまりのところ、値が0以上であれば指定した値だけ使用数を増加、マイナスであれば全ツッパします。

④指定した素材を投入後、②と反対の上下操作を行い、カーソルを1番上に戻します。


以上①~④を「materialList(int page, int line, int piece)」関数にて行います。

なお、素材の素材を複数種類投入したい時は、この関数を続けて使うことができます。その場合は、2つ目以降のint pageについて、

「(目的のページ数) - (1つ前のページ数) +1」を指定してください。

1つ目が3ページ目、2つ目が7ページ目だったら、2つ目のint pageは5。

 

以上、素材を投入したら、上ボタン>Aボタン で「決定」して1クエスト分の予約が終了します。あとは、同様の操作を10回繰り返し、最後にBボタン連打でギルドストアでの会話を終了します。


準備、必要なもの

本スケッチでは、特に以下の準備が必要となります。

・スケッチ最初の固定値を変更することで、隠密隊の使用やアイテムの売却を設定します

・設定をオートセーブ有、その他執筆者設定の環境で動くようにしていますので、各自の設定に合わせてスケッチを変更してください。

・闘技大会クエストを1~5まですべて開放してください(していない場合は十字キーの押す回数などを要調整)

・オトモアイルーを、隠密隊に出発させる4匹がリスト一番上になるように並び替えてください

・マイコンを挿す前に、マカ錬金10回分を予約し、隠密隊を出発させ、交易船のアイテムとオトモを設定してください

・ (推奨)装備ボックスを開き、装備の並び替えをしてください(自動操作時に集めたお守りがリスト後ろ側に敷き詰められます。)

・村の中でマップを開ける状態でマイコンを挿してスタートしてください

 

注意事項!

(スケッチ上に書いてある内容と同様です)

 * 必ず自己責任の上で実行してください。必要なアイテムを失う等の責任は負いかねます。
 * 注意事項や編集が必要な箇所は「!」(全角びっくり)を付けてあるので、すべて確認すること。
 * 本スケッチをマイコンに書き込む前に必ず、交易や隠密隊のON/OFFや錬金素材に使うアイテムを設定すること。
 * 交易や隠密隊のON/OFFはすぐ下の「const int」付近を、錬金素材に使うアイテムは「void renkinSelect()」を参照。
 * 隠密隊によるアイテムの取得により、錬金に投入する素材リストの評価値順や所持数順が変わる恐れあり。確証が持てなければOFF推奨。「const int」付近参照
 * 自身の環境、もっている素材にあわせて、「void renkinSelect()」を必ず編集すること。
 * とりあえずスケッチ全体を理解したうえで実行してください。


作成したスケッチ

作成したスケッチは以下のようになります。

スケッチのファイルはこちら 

 

配布時のスケッチの初期設定では、以下のようになります。

・素材の投入は、「所持数順」の1番最初の素材を上限いっぱいまで投入

・マカ錬金の周回回数は10クエスト×10周を上限に設定(それ以降は隠密隊と交易船のみ)


 なお、執筆者がスケッチを作成するにあたり使用した環境は以下のようになります。

・パッケージ版、日本語設定(DL版ではロード時間が違う可能性があります)

ロード時間などによる操作のずれが考えられますので、適宜調整してください。


本スケッチを実際に使用した動画はこちら↓

 

初期設定版(1番所持数が多い素材を最大数投入)

  
//**
* モンハンライズ、闘技大会ラージャンにキルされにいく。
* 5周ごとに交易と隠密隊アイテムを回収or売却、
* 10周ごとに店へ行き護石錬金の受け取り&10回を予約する。
*
* 必ず注意事項をはじめ、すべて理解したうえで実行すること(必要なモンスター素材を失う恐れあり)
*
* 初期条件は以下の通り
* 0. 以下の注意事項などを必ず確認し、指定個所を編集する
* 1. 設定はオートセーブ有(執筆者環境のコンフィグ等で設定しているため、適宜スケッチ改変を推奨)
* 2. あらかじめ闘技大会クエストを1~5まで開放する
* 3. 隠密に行かせるオトモアイルー4匹をリストの1番上に並び替え
* 4. 錬金(10回)を予約、隠密隊を出発、交易のアイテムやオトモを設定した後、集会所へ移動(オフライン)
* 5. (推奨)装備BOXを開き、装備の並びを整理する(自動化時に取得した護石をリスト後ろ側に集めるため)
* 6. マップを開ける状態でマイコンを挿してスタート
*/

// 注意事項!
/**
 * 必ず自己責任の上で実行してください。必要なアイテムを失う等の責任は負いかねます。
 * 注意事項や編集が必要な箇所は「!」(全角びっくり)を付けてあるので、すべて確認すること。
 * 本スケッチをマイコンに書き込む前に必ず、交易や隠密隊のON/OFFや錬金素材に使うアイテムを設定すること。
 * 交易や隠密隊のON/OFFはすぐ下の「const int」付近を、錬金素材に使うアイテムは「void renkinSelect()」を参照。
 * 隠密隊によるアイテムの取得により、錬金に投入する素材リストの評価値順や所持数順が変わる恐れあり。確証が持てなければOFF推奨。「const int」付近参照
 * 自身の環境、もっている素材にあわせて、「void renkinSelect()」を必ず編集すること。
 * とりあえずスケッチ全体を理解したうえで実行してください。
 */


#include <auto_command_util.h>

int renkin_count = 0;
int death_count = 0;


// 10回単位の錬金の実行回数を設定(護石50個、7500ptにつき1)!
const int renkin_max = 10;
// 交易、隠密隊の設定。隠密隊のアイテムによりリストが前後する可能性があるので注意。持っていない素材がありそうな場合はOFF推奨!
const int ommitsuGo = 1; // 隠密隊を出発させる場合は1を、させない場合は0を入力
const int ommitsuUri = 0; // 隠密のアイテムを売る場合は1を、回収する場合は0を入力
const int koekiUri = 0; // 交易のアイテムを売る場合は1を、回収する場合は0を入力


// 必ずfor文内を、投入したい素材となるように編集すること!
// 「幽玄」にカーソルをあわせた状態から、錬金予約時、素材を選択して決定する動作を10回繰り返す
void renkinSelect(){
    for (int i = 0; i < 10; i++){

      // 錬金術・幽玄を選択
      pushButton(Button::A, 500);
      // リスト並び順を所持数順にしたい場合のみRCLICK。必要ない場合は文頭に「//」をつけてコメント化or削除すること!
      pushButton(Button::RCLICK, 300);
      // 素材のページ、行数(上から何段目)、投入個数(最大値を入れる場合はマイナスの値を設定)を設定!
      materialList(1, 1, -100);
      // もし1回の錬金に複数種類の素材を投入する場合、以下のように追加で記述!
      /*
       * // 「目的のページ数 - 現在のページ数 +1」, 行数、投入個数。以下の例では「4ページ先」の「上から3行目」を「2個」投入。
       * materialList(5, 3, 2);
       */
      // カーソルを決定に移動
      pushHatButton(Hat::UP, 200);
      pushButton(Button::A, 300);
      pushHatButton(Hat::LEFT, 200);
      pushButton(Button::A, 500);
    }
}




// 錬金予約時、素材リストのページ数、行数、投入個数を指定する。投入個数がマイナスの場合は1回に入れられる最大量をまとめて入れる
// pageは1以上、行数は1~7の範囲で設定
void materialList(int page, int line, int piece){
    // Rボタンにてページ移動
    pushButton(Button::R, 150, page - 1);
    // 上下ボタンにて指定行まで移動し、Aボタン
    if (line < 5){
      pushHatButton(Hat::DOWN, 150, line - 1);
    } else {
      pushHatButton(Hat::UP, 150, 9 - line);
    }
    pushButton(Button::A, 200);

    // 上ボタンにて投入個数を決定してAボタン。ただしpieceの値が0以下なら、代わりに下ボタンを1回おして最大数を投入する。
    while (piece > 9){
      pushHatButton(Hat::RIGHT, 150);
      piece = piece - 10;
    }
    if (piece >= 0){
      pushHatButton(Hat::UP, 150, piece);
    } else {
      pushHatButton(Hat::DOWN, 150);
    }
    pushButton(Button::A, 200);

    // 上下ボタンでリスト1番上まで移動
    if (line < 5){
      pushHatButton(Hat::UP, 150, line - 1);
    } else {
      pushHatButton(Hat::DOWN, 150, 9 - line);
    }
    
}

// 教官に話しかける~クエスト選択~ラージャンとの出会い~集会所に戻る
void rajangKorokoro(){
    //教官の後ろ~教官話しかけ~クエスト開始
    tiltJoystick(0, 100, 0, 0, 1300);
    pushButton(Button::A, 1300);
    pushButton(Button::A, 1200);
    pushHatButton(Hat::DOWN, 200, 4);
    pushButton(Button::A, 300);
    pushButton(Button::A, 2000);
    pushButton(Button::ZR, 300);
    pushButton(Button::A, 2000);

    // 防御の低いガンナーを選択
    pushButton(Button::L, 500);
    pushHatButton(Hat::DOWN, 200, 3);
    pushButton(Button::A, 300);
    pushButton(Button::A, 1000);

    // ラージャンに向かって走りだす。ヒトタマドリ取らないように最初だけ左方向へ
    SwitchController().setStickTiltRatio(-20, -100, 0, 0);
    SwitchController().pressButton(Button::R);
    delay(15000);
    SwitchController().setStickTiltRatio(0, -100, 0, 0);
    delay(1000);

    // 虫移動
    SwitchController().pressButton(Button::ZL);
    pushButton(Button::ZR, 800);
    pushButton(Button::A, 800);
    pushButton(Button::B, 3500);
    SwitchController().releaseButton(Button::ZL);
    pushButton(Button::B, 200, 5);
    delay(40000);

    // リザルト画面
    pushButton(Button::B, 100, 8);
    SwitchController().setStickTiltRatio(30, -100, 0, 0);

    // ロード中に、ハマり防止のため集会所入り口へマップ移動のコマンド入力
    SwitchController().pressButton(Button::MINUS);
    delay(800);
    SwitchController().releaseButton(Button::MINUS);
    pushHatButton(Hat::UP, 300);
    pushButton(Button::A, 300);

    // ロード~教官後ろの壁にぶつかる
    delay(19000);
    SwitchController().releaseButton(Button::R);
}



// 5周ごとに、隠密隊と交易船のアイテムを回収or売却
void giveMeHoney(){
    SwitchController().setStickTiltRatio(0, 0, 0, 0);

    // 集会所準備エリアへマップ移動
    SwitchController().pressButton(Button::MINUS);
    delay(800);
    SwitchController().releaseButton(Button::MINUS);
    pushHatButton(Hat::UP, 300, 2);
    pushButton(Button::A, 1300);

    // ルームサービス話しかけ
    tiltJoystick(100, -100, 0, 0, 1000);
    pushButton(Button::A, 1400);
    pushHatButton(Hat::DOWN, 200);

    // ポイント不足の場合はommitsuGo=0にすることで隠密隊の使用をキャンセル可能
    if (ommitsuGo == 1){
      // 隠密隊リザルト
      pushButton(Button::A, 200, 2);
      delay(2200);
      pushHatButton(Hat::UP, 300);

      // ommitsuUri=1の場合のみ売却、それ以外は受け取り
      if (ommitsuUri == 1) {
        pushHatButton(Hat::RIGHT, 300);
        pushButton(Button::A, 500);
      }
      pushButton(Button::A, 500,3);

      // 出発、一番下のエリア(溶岩洞or百流夜行)を選択
      // 行き先を指定したい場合は十字キーの押す回数を要調整
      pushHatButton(Hat::UP, 200);
      // 調査先、オトモ4匹を順にAボタンで選択、出発
      pushButton(Button::A, 200, 10);
      pushButton(Button::B, 300);
    }

    // 交易船を確認
    pushHatButton(Hat::DOWN, 200);
    pushButton(Button::A, 500);
    pushButton(Button::A, 200);
    pushHatButton(Hat::UP, 200);
    pushButton(Button::A, 300);
    pushHatButton(Hat::UP, 300);

    // ommitsuUri=1の場合のみ売却、それ以外は受け取り
    if (ommitsuUri == 1) {
      pushHatButton(Hat::RIGHT, 300);
      pushButton(Button::A, 500);
    }
    pushButton(Button::A, 300, 2);

    // ルームサービス終了
    pushButton(Button::B, 100, 10);
    // 集会所入り口へマップ移動のコマンド入力
    SwitchController().pressButton(Button::MINUS);
    delay(800);
    SwitchController().releaseButton(Button::MINUS);
    pushHatButton(Hat::UP, 300);
    pushButton(Button::A, 300);

    // 集会所入り口から教官後ろまで移動
    SwitchController().setStickTiltRatio(30, -100, 0, 0);
    SwitchController().pressButton(Button::R);
    delay(5000);
    SwitchController().releaseButton(Button::R);
}

// 10周ごとに、護石錬金を受け取り+新たに10回分の錬金(幽玄)を予約
void makafushigi(){
    SwitchController().setStickTiltRatio(0, 0, 0, 0);

    // 集会所入り口へマップ移動のコマンド入力
    SwitchController().pressButton(Button::MINUS);
    delay(800);
    SwitchController().releaseButton(Button::MINUS);
    pushHatButton(Hat::UP, 300);
    pushButton(Button::A, 300);

    // ギルドストアへ話しかけ
    SwitchController().pressButton(Button::R);
    tiltJoystick(-100, 0, 0, 0, 2000);
    SwitchController().releaseButton(Button::R);
    pushButton(Button::A, 1400);

    // 下から3番目、「マカ錬金」選択
    pushHatButton(Hat::UP, 200, 3);
    pushButton(Button::A, 300);

    // 1番下、受け取り(一括)
    pushHatButton(Hat::UP, 200);
    pushButton(Button::A, 300);
    pushHatButton(Hat::UP, 200);
    pushButton(Button::A, 300);

    // 2つ上、幽玄にカーソルをあわせる
    pushHatButton(Hat::UP, 200, 2);
    // 「renkinSelect」であらかじめ設定した素材を投入(10クエスト分)
    renkinSelect();
    // Bボタン連打で錬金予約を終了する
    pushButton(Button::B, 100, 12);

}


void setup(){
    pushButton(Button::B, 500, 8); 
// 最初の数回の入力はswitchが認識しない場合があるので、無駄打ちをしておく
    pushButton(Button::A, 500);  // USBコントローラーとして決定
    delay(1300);
    // 集会所入り口へマップ移動のコマンド入力
    SwitchController().pressButton(Button::MINUS);
    delay(800);
    SwitchController().releaseButton(Button::MINUS);
    pushHatButton(Hat::UP, 300);
    pushButton(Button::A, 300);

    // 集会所入り口から教官後ろまで移動
    SwitchController().setStickTiltRatio(30, -100, 0, 0);
    SwitchController().pressButton(Button::R);
    delay(5000);
    SwitchController().releaseButton(Button::R);
}

void loop(){

  // 指定回数まで5回ごとに交易隠密隊、10回ごとに錬金
  if (death_count == 5) {
    giveMeHoney();

    // 錬金回数をオーバーするまでは10ずつカウント、錬金回数以降は5でリセット
    if (renkin_count > renkin_max){
      // カウントリセット
      death_count = 0;
    } else {
      rajangKorokoro();

      // カウント増加
      death_count++;
    }
  } else if (death_count == 10){
    makafushigi();
    giveMeHoney();

    // カウントリセット
    death_count = 0;
    // 錬金カウント増加
    renkin_count++;
  }
  else {
    rajangKorokoro();

    // カウント増加
    death_count++;
  }
}


 

おまけ、動画で紹介した複数種類投入版

 素材ポイントを無駄なく投入したい場合は以下を参考に編集してください。素材の投入により0個になったり所持数が減ったりすることで順番が入れ替わることがあるので注意

  
//~中略~
void renkinSelect(){
    for (int i = 0; i < 10; i++){

      // 錬金術・幽玄を選択
      pushButton(Button::A, 500);
      // リスト並び順を所持数順にしたい場合のみRCLICK。必要ない場合は文頭に「//」をつけてコメント化or削除すること!
      //pushButton(Button::RCLICK, 300);
      // 素材のページ、行数(上から何段目)、投入個数(最大値を入れる場合はマイナスの値を設定)を設定!
      // 順に「7ページ目の7列目を10個投入」「19ページ目3列目2個」「24ページ目4列目残り全部投入」
      materialList(7, 7, 10);
      materialList(13, 3, 2);
      materialList(6, 4, -1);

      // カーソルを決定に移動
      pushHatButton(Hat::UP, 200);
      pushButton(Button::A, 300);
      pushHatButton(Hat::LEFT, 200);
      pushButton(Button::A, 500);
    }
}


//~以下略~

 

 

最後に

本スケッチを使用することで、テオ・テスカトル素材収集の自動化で大量に入手した素材をマカ錬金へ投入する操作が自動でできます。このプログラムでマカ錬金でのお守り厳選も自動化し、ほぼ自動で素材入手からお守り厳選まですることができます。

今回の自動化はモンスター素材を大量に使用するため、かならず仕組みを理解し、自身の環境に合わせて改変したうえで使用してください。宝玉などを飲み込まれても責任は負いかねます。

また、武器、防具、お守りを含めた装備は2000個(50枠×40ページ)が上限となります。枠がいっぱいになると錬金の受け取りができなくなるためご注意ください。

プログラムの不備、改善点などありましたらコメントやお問い合わせからお願いいたします。 


念のため書きますが、使用マイコンはArduino Leonardoです。最もメジャーなUnoなどでは本プログラムは使えませんのでご注意を。

Arduino Arduino Leonardo (ピンソケット・ピンヘッダ実装済) 【A000057】
by カエレバ


3 件のコメント:

  1. いつも素晴らしいスケッチを紹介していただきありがとうございます🙇‍♂️
    本スケッチについてですが、オトモ隠密隊の調査先が選択されず出発することができません。まれにではなく、毎回です。そのせいで交易船も受け取ることが出来ず、リセットが入るまでループしてしまいます。
    何か対策はございますでしょうか。

    返信削除
    返信
    1. すいません自己解決しました🙇‍♂️
      ちなみにラージャンを飛び越えてしまって発見が遅れるのを防ぐために、飛んでいる時間ではなく地面を走っている時間をふやしたいのですが、どのように書き換えればいいでしょうか?

      削除
    2. ロード時間などのわずかな違いでクエスト開始後の動きがずれていると考えられます。プログラムの「// ラージャンに向かって走りだす」以降がクエスト中の行動となります。「//ラージャン...」の3行下の[delay(15000)]の数字を調整してみてください。
      おそらく数字を減らすと飛び越えなくできると思います。

      削除

【ポケモンSV×arduino06】道具プリンター乱数自動化(藍の円盤)

 ※本記事は、ポケモンSVの藍の円盤(DLC)にて、 道具プリンター を決まった日時に起動することで 特定のアイテム、ボールを狙って量産する操作を自動化 するプログラムについて解説した記事です。ポケモンSVの操作をArduino Leonardoで自動化しております。 本記事の内...