2022/07/03

【MHR:S×Arduino01】MRラージャン素材回収自動化(トカゲしばき、サンブレイク対応版)

 ※本記事は、モンスターハンターライズ サンブレイク(MHR:S)のマカ錬金のための素材回収を自動化するプログラムについて解説した記事です。モンハンライズサンブレイクの操作をArduino Leonardoで自動化しております。「Arduinoって何?」って方はポケモン剣盾の00回目の記事を、Arduinoの環境構築(ライブラリ含む)は01回目の記事をご覧ください。

 

本記事で紹介するプログラムは、過去にモンハンライズ(アプデ前)用に作成したプログラムを、サンブレイクでのマスターランクに対応するように改良したものとなります。

基本的にはライズの 04回目の記事と同様となりますので、合わせてご覧ください。

 

22/07/16追記:Ver1.1公開しました。溶岩洞のクエストとして、盟勇同行クエストの激昂ラージャンに対応させました。通常ラージャンよりも素材の質、クエスト条件の安定などメリットが大きいため、MR50を超えた場合はVer1.1の使用をおすすめします。

 

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


 

きっかけ、動機

モンスターハンターライズの大型アップデートとして、サンブレイク発売しました!新モンスター、高難易度なクエスト、新スキル、そしてマカ錬金

ストーリーをクリアし、MR仕様のマカ錬金が解禁されましたので、過去のプログラムを流用してお守りガチャを自動化します。

①ウロコモリトカゲをしばいて、錬金に必要なモンスター素材を回収
②貯まった素材を投入しつつ、闘技大会クエストを失敗してクエスト回数消費(+隠密隊と交易によるアイテム回収)

の2つを調整しましたので、本記事で①を、こちらにて②を公開します。

これで何ができるの?

過去に作成した、アプデ前ライズ用プログラム(上位用)を、サンブレイクのマスターランク用に改良しました。

錬金に必要な素材を、ウロコモリトカゲをしばいて回収します。溶岩洞のクエスト(今回はラージャン)を受注し、環境生物出現するウロコモリトカゲを攻撃することで落とすモンスター素材(MRラージャン素材)を回収して帰還を繰り返すことで、錬金素材を貯めます。

1時間当たり約7200pt、MR用のマカ錬金・神気での錬金200pt×36回ほどの素材を回収します。

原理、おおまかな流れ

概要

本プログラムでは、

マスターランク(MR)の溶岩洞のラージャンのクエストへ行き、そこで出現するウロコモリトカゲを攻撃して落とすラージャン素材を回収する

動作を繰り返します。実行するコンテストの部門や回数はプログラムを改変して設定します。


基本的には前回同様のため、前回プログラムを理解している方は、直下の変更点、注意点のみご覧になり、以降は飛ばしていただいて構いません。


旧プログラム、旧ライズからの変更点、注意点について

はじめに、旧プログラムから改良、修正した点を列挙しておきます。

①対象クエストについて

ウロコモリトカゲが落とす素材は、クエストの狩猟対象となるモンスターの、レアではない素材のみとなります。そのため、素材ツアーではなく狩猟クエストを受注し、そのクエストのモンスターの素材を回収します。

前回はテオ・テスカトルを対象としていましたが、今回はラージャンのクエストに変更しました。理由は、テオ・テスカトルの落とす素材に上位素材である塵粉やたてがみが含まれているためです。 拾った素材が上位素材の場合、MR用のマカ錬金・神気に使用することができません。

そのため、溶岩洞に出現する錬金ポイントが高い(≒対象の攻略難易度の高い)モンスターとして、テオではなくラージャンを選択しました。なお、ヤツカダキ系は錬金に使えない体液などの素材を落とすため却下、バゼルギウスは溶岩洞にいるかと思ったがクエスト不在。

②食事場での団子について

サンブレイクの新要素として、食事で団子を選択する際に飛び竹串が使用可能となりました。今までの通常串だと団子スキルのレベルが2で一律なのに対して、飛び竹串を使用すると、上の団子はスキルLv4で発動率-20%、真ん中はLv3で-10%、下はLv1で+10%となります。

本自動化で必要な団子スキルはお団子環境生物召喚」、Lv2で90%となります。試してみたところ、ウロコモリトカゲはLv1では確定出現せず、従来のLv2で2匹とも確定出現します。したがって、飛び竹串は使用せず、従来のLv2のまま団子をマイセットに設定してください。

また、十字キー上下入力を食事場で誤作動した場合に、竹トンボを飛ばすアクション(長時間)をしてしまうことがありました。食事場で十字キー上下を使用しないようにするため、使用するマイセットを32から25(1番後ろのページの1番上)に変更します。マイセット25に、飛び竹串を使用せず 「お団子環境生物召喚」の団子を含む組み合わせを設定してください。

③集会所でのクエスト選択について

クエストを受注する場所は、新たな舞台である観測拠点、ではなくカムラの里の集会所を引き続き使用します。観測拠点はNPCが歩いていたり、立ち位置が変わっていたりするため動作の邪魔をされることがありました。特に受付の姫の近くにいたネコに邪魔されました。

アプデ前の上位、下位、百竜などのクエスト選択肢に加え、マスタークエスト、傀異クエストの選択肢が追加されます。カーソルは最後に選択したものにあわさるため、最後に傀異クエストを選択した場合は、自動化前にマスターランクにカーソルを合わせてください。

 

④クエスト中の動きについて

旧ライズからサンブレイクへのアプデにて変更された動きとして、壁に向かってダッシュ(Rボタン押しながらスティック倒し)すると、翔蟲を使用せずに壁を登ることができるようになりました。普段の狩りであれば便利なのですが、この仕様により元のプログラムで壁にぶつかると勝手に登ってしまいます。

そのため、壁際でのRボタンの押すタイミングを変更しました(サブキャンプ2からの動きのみ)。壁沿いに進むときに歩くタイミングが増えたので、1周にかかる時間が数秒程度増えました。時間のロスが気になる方は、自身の環境に合わせて走る時間を再調整してください。

また、オトモ偵察隊により、マップから移動できる選択肢が増えたため、偵察隊を間違って使用しないように選択方法を修正しました。

その他、動きを微修正しています。


プログラム開始前の準備について

本項目は、基本的に前回プログラムと変更はなく、ほぼコピペです。前回と同じ説明は簡潔に留め、変更箇所のみ黄色で表記します。

①クエストについて

22/07/16加筆:

本プログラムではMR50到達後であれば盟勇同行クエスト★6の激昂ラージャンを、それ以下であれば集会所クエストMR★5の通常ラージャンをおすすめします。初期設定ではMR★5の溶岩洞ラージャンのクエスト行きます

探索ツアーではなく狩猟クエストへ行きます。


MR50を超えており、盟勇同行クエストを解禁しているようであれば、 盟勇同行クエスト★6の激昂ラージャンが最大効率と思われます。

以下、通常ラージャンのクエストと比較したときのメリットとなります。

・素材として怒天髪(90)、牙(100)、爪(90)、煌毛(110)に加え、ラージャンハートのドロップを確認しました。通常ラージャンよりも錬金ポイントの回収量が高くなります。 

・盟勇クエストは1度出現してしまえば一覧から消えることがなく、クエスト受注時ごとにクエスト一覧の並び順が変化しません。いつでも同じ設定で自動化を開始、周回できるようになります。(★5通常ラージャンの場合は、古龍3種のクエスト出現が確定ではないため、何かのクエストをクリアするたびにラージャンがリスト1~4番目の範囲で前後してしまい、マイコンの書き換えが必要でした。 )

激昂ラージャン以外のモンスターが出現しません。また、提督ガレアスという盾が常駐するため、大型モンスターから攻撃される可能性が低くなります。(通常ラージャンのクエストではリオレウスに高台を攻撃されるなどのことがあります。)


なお、デメリットとして

・忙しいであろう提督ガレアスを連れまわし、スラアクで切りかかるたびに文句を言われます。

 

ほぼメリットしかないので、MR50を超えていたら激昂ラージャンを対象にすることをおすすめします。盟勇同行クエストを進めていない場合、 ガレアス同行★5のバゼルギウス、★6のオオナズチを順にクリアしてください。


MR50到達前であれば、プログラム作成時、執筆者環境ではMR10を超えた程度、傀異クエストが出現したころとなります。現時点で溶岩洞のラージャンが最大効率と判断しました(詳しくは上記変更点、注意点の①参照)。

溶岩洞のラージャンのクエストにて、ウロコモリトカゲが落とす素材は、

黒毛(80pt)、牙(100)、爪(90)、煌毛(110)の4種類となり、前2つが出やすいです。

溶岩洞であれば他のモンスターのクエストでも使用可能なため、MR増加とともに解禁されるクエストで、より効率的なものがあればクエスト選択の操作を変更してください。

 

②食事について

ウロコモリトカゲを安定して出現させるために食事をします

今回は、「お団子環境生物召喚」のスキルを発動させます。あらかじめマイセット25に「お団子環境生物召喚」を含むセットを設定してください。

1クエスト5分以内なので、クエスト終了後もお団子の日替わりや、発動するスキルは変わりません(○○%ではなく、前回に出たのとまったく同じスキルが発動します)

 

③装備について

装備について、スラッシュアックスを担ぐことを前提にしております。

スラッシュアックスの利点は、Aボタン連打で出せるぶんまわしで立ち位置が変わらずに円状(おうぎ形)の広い範囲を攻撃し続けられるためです。 

武器の攻撃力は関係ないため、好きな武器(スロット数や見た目など)を使ってください。

また、スキルは地質学Lv3を推奨します。トカゲに加えて特産品、鉱石の収集をついでに行っております。特産品、鉱石の採取できる個数が増えます(1枠分追加)。2枠→3枠になるので、1.5倍の効率となります。

もっとも、ついでの採取なのでなくても問題ありません。

マスターランクでも、上位・下位の装備で問題ありません。ただし、溶岩洞に出現するリオレウスがサブキャンプ1近くのウロコモリトカゲのいる高台に向かって火球を吐いてくるようになったため、1撃で倒されない程度の耐性はあった方がいいかもしれません。


準備、必要なもの

本スケッチでは、マイコンを挿す前に以下の準備が必要となります。

初期条件は以下の通り
1. 設定はオートセーブ有(執筆者環境のコンフィグ等で設定しているため、適宜スケッチ改変を推奨)
2. あらかじめサンブレイクのEDまで(マカ錬金開放まで)進める。また、緊急クエストが出ていない状態にする。
3. 装備はスラッシュアックスを担ぐ。特産ポイント・鉱石稼ぎのため地質学Lv3を推奨。
4. 食事のマイセット25(リストの最後のページ1番上)をあらかじめ設定し、「環境生物召喚」が発動できるようにする。環境生物召喚Lv1だとウロコモリトカゲ出現しない可能性あるため、飛び竹串は使わずLv2を発動させる。
5. 使用前にクエストカウンターでマスターランククエストを選択し、カーソルを合わせておく
6. 集会所(カムラ)へ移動(オフライン)し、マップを開ける状態でマイコンを挿してスタート。新エリアの観測拠点ではないので注意
7. もしマイコンをスタートさせた初回の食事で「環境生物召喚」90%が発動しなかった場合、マイセットのお団子3個の順番を変えたり、別のクエストを消化したりしてスキルが発動するようにする

作成したスケッチ

トカゲしばき自動化のスケッチはこちら(Ver1.1)。

 22/07/16追記:Ver1.1公開しました。溶岩洞のクエストとして、盟勇同行クエストの激昂ラージャンに対応させました。通常ラージャンよりも素材の質、クエスト条件の安定などメリットが大きいため、MR50を超えた場合はVer1.1の使用をおすすめします。

 

 MR50に達しておらず通常ラージャンを対象とする場合はVer1.0でも問題ありません。ただし効率はわずかに劣るため、早めにMR50まで進めることをおすすめします。

旧Ver1.0はこちら

本スケッチを実際に使用した動画はこちら(MHR:S-02と合わせて紹介)↓


/**
* モンハンライズ サンブレイク、溶岩洞でのウロコモリトカゲからモンスター素材回収の自動化
* 前回のスケッチより改変し、MRクエスト、アプデによる操作変更などへの対応、その他微修正
*
* 初期条件は以下の通り
* 1. 設定はオートセーブ有(執筆者環境のコンフィグ等で設定しているため、適宜スケッチ改変を推奨)
* 2. あらかじめサンブレイクのEDまで(マカ錬金開放まで)進める。また、緊急クエストが出ていない状態にする。
* 3. 装備はスラッシュアックスを担ぐ。特産ポイント・鉱石稼ぎのため地質学Lv3を推奨。
* 4. 食事のマイセット25(リストの最後のページ1番上)をあらかじめ設定し、「環境生物召喚」が発動できるようにする 
*  環境生物召喚Lv1だとウロコモリトカゲ出現しない可能性あるため、飛び竹串は使わずLv2を発動させる。
* 5. 使用前にクエストカウンターでマスターランククエストを選択し、カーソルを合わせておく
* 6. 集会所(カムラ)へ移動(オフライン)し、マップを開ける状態でマイコンを挿してスタート。新エリアの観測拠点ではないので注意。
* 7. もしマイコンをスタートさせた初回の食事で「環境生物召喚」90%が発動しなかった場合、
*   マイセットのお団子3個の順番を変えたり、別のクエストを消化したりしてスキルが発動するようにする
*/

// ----------以下、設定項目----------
// 周回するクエストの位置を選択。溶岩洞であればどのモンスターでもOK
/*
 * 初期設定では、Lv.M★5(上から2番目)、1ページ目、リスト上から3番目のラージャンのクエストを選択
 * なお、テオ・テスカトルは上位素材(塵粉など)を拾う可能性があるため、効率低め
 */

// クエストのレベル選択画面、上から何番目か
const int questlevel = 2;
// 選んだレベルのクエスト一覧の選択画面、何ページ目か
const int questpage = 1;
// 選んだページ内、上から何番目のクエストか
const int questlist = 3;
// ----------以上、設定項目----------


#include <auto_command_util.h>


// 観測拠点中央広場~溶岩洞のクエストを選択
void selectQuest(){
    // 集会所初期位置~受付話しかけ
    SwitchController().pressButton(Button::R);
    SwitchController().setStickTiltRatio(-100, -100, 0, 0);
    delay(1000);
    pushButton(Button::A, 100,2);
    pushButton(Button::A, 1000);
    SwitchController().setStickTiltRatio(0, 0, 0, 0);
    SwitchController().releaseButton(Button::R);

    // 集会所クエスト マスター(緊急クエストが出ている場合、下入力が必要)
    pushButton(Button::A, 300);
    // MRの溶岩洞での狩猟クエスト選択(上記、設定項目を参照)
    // クエストレベル、上からX番目を選択
    pushHatButton(Hat::DOWN, 200, questlevel -1);
    pushButton(Button::A, 1000);

    // クエスト一覧のYページ目へ移動
    pushHatButton(Hat::RIGHT, 200, questpage -1);
    // 上からZ番目のクエストを選択
    pushHatButton(Hat::DOWN, 200, questlist -1);
    pushButton(Button::A, 200, 2);
    pushButton(Button::A, 500);
    pushButton(Button::B, 100, 7);
    
}


// クエスト選択後、団子(マイセット25)を食べる
void no25dango(){
    // クエスト受注後から食事場の椅子に座る
    SwitchController().pressButton(Button::R);
    SwitchController().setStickTiltRatio(100, -80, 0, 0);
    delay(2000);
    SwitchController().setStickTiltRatio(10, 100, 0, 0);
    delay(800);
    pushButton(Button::A, 100, 4);
    SwitchController().setStickTiltRatio(0, 0, 0, 0);
    SwitchController().releaseButton(Button::R);
    delay(2800);

    // 食事>お金で>いつもの>マイセット25
    pushButton(Button::A, 500);
    pushButton(Button::A, 300, 2);
    pushHatButton(Hat::LEFT, 200);
    pushButton(Button::A, 300, 2);
    pushButton(Button::B, 100, 25);
    delay(500);
}


// 団子を食べた後、ZRにてクエスト開始
void startQuest(){
    // クエスト開始
    pushButton(Button::ZR, 300);
    pushButton(Button::A, 3000);
    pushButton(Button::B, 100, 5);

    // クエスト開始まで待機
    delay(18000);
}


// 溶岩洞サブキャンプ1へ行き、エリア14の高台へ移動、ウロコモリトカゲと鉱石を回収
void goSub1(){
    // サブキャンプ1へ移動
    SwitchController().pressButton(Button::MINUS);
    delay(800);
    SwitchController().releaseButton(Button::MINUS);
    pushButton(Button::A, 300);
    pushHatButton(Hat::DOWN, 300);
    pushButton(Button::A, 200);
    pushButton(Button::A, 8500);

    // 後ろへ走って虹色の鉱石採取
    SwitchController().pressButton(Button::R);
    SwitchController().setStickTiltRatio(0, 100, 0, 0);
    delay(1000);
    pushButton(Button::A, 200, 10);
    SwitchController().setStickTiltRatio(0, 0, 0, 0);
    delay(1000);

    // 右前へ進み崖飛び降り、翔蟲を使ってエリア14高台へ移動
    SwitchController().setStickTiltRatio(100, 0, 0, 0);
    delay(1000);
    SwitchController().setStickTiltRatio(80, -10, 0, 0);
    delay(4600);
    SwitchController().setStickTiltRatio(70, -80, 0, 0);
    delay(1700);

    // 虫移動
    SwitchController().pressButton(Button::ZL);
    pushButton(Button::X, 1500);
    pushButton(Button::X, 200, 2);
    SwitchController().releaseButton(Button::ZL);
    delay(2000);

    // 左へ動き、ウロコモリトカゲ近くの行き止まりへ移動
    SwitchController().setStickTiltRatio(-100, -30, 0, 0);
    delay(4500);
    SwitchController().releaseButton(Button::R);
    SwitchController().setStickTiltRatio(0, 0, 0, 0);
    delay(300);

    // ウロコモリトカゲに近づく
    SwitchController().setStickTiltRatio(50, 90, 0, 0);
    delay(700);
    SwitchController().setStickTiltRatio(0, 0, 0, 0);

    // 武器出しからA連打、スラアクぶん回し
    pushButton(Button::X, 500);
    pushButton(Button::A, 400, 22);
    delay(3000);

    // 納刀し、アイテムを回収
    pushButton(Button::Y, 600);
    pushButton(Button::A, 100, 10);

    // 四角形の渦上に移動、立ち止まらずにA押しを繰り返し
    SwitchController().setStickTiltRatio(0, 70, 0, 0);
    pushButton(Button::A, 100, 2);
    SwitchController().setStickTiltRatio(-70, -70, 0, 0);
    pushButton(Button::A, 100, 2);
    SwitchController().setStickTiltRatio(70, -70, 0, 0);
    pushButton(Button::A, 100, 2);
    SwitchController().setStickTiltRatio(70, 70, 0, 0);
    pushButton(Button::A, 100, 2);
    SwitchController().setStickTiltRatio(-70, 70, 0, 0);
    pushButton(Button::A, 100, 2);
    SwitchController().setStickTiltRatio(-70, -70, 0, 0);
    pushButton(Button::A, 100, 3);
    SwitchController().setStickTiltRatio(70, -70, 0, 0);
    pushButton(Button::A, 100, 3);
    SwitchController().setStickTiltRatio(70, 70, 0, 0);
    pushButton(Button::A, 100, 3);
    SwitchController().setStickTiltRatio(-70, 70, 0, 0);
    pushButton(Button::A, 100, 3);
    SwitchController().setStickTiltRatio(-70, -70, 0, 0);
    pushButton(Button::A, 100, 3);
    SwitchController().setStickTiltRatio(70, -70, 0, 0);
    pushButton(Button::A, 100, 5);
    SwitchController().setStickTiltRatio(70, 70, 0, 0);
    pushButton(Button::A, 100, 5);
    SwitchController().setStickTiltRatio(-70, 70, 0, 0);
    pushButton(Button::A, 100, 7);
    SwitchController().setStickTiltRatio(-70, -70, 0, 0);
    pushButton(Button::A, 100, 6);

    // 上へ移動し、鉱石なども回収(金策が要らない場合削除可能)
    SwitchController().pressButton(Button::R);
    SwitchController().setStickTiltRatio(10, -100, 0, 0);
    pushButton(Button::A, 100, 15);
    SwitchController().setStickTiltRatio(50, 100, 0, 0);
    pushButton(Button::A, 100, 40);

    // スティックをニュートラルへ
    SwitchController().setStickTiltRatio(0, 0, 0, 0);
    SwitchController().releaseButton(Button::R);
    delay(1000);
    pushButton(Button::B, 100, 3);
}

// 溶岩洞サブキャンプ2へ行き、ウロコモリトカゲ回収
void goSub2(){
    // サブキャンプ2へ移動
    SwitchController().pressButton(Button::MINUS);
    delay(800);
    SwitchController().releaseButton(Button::MINUS);
    pushButton(Button::A, 300);
    pushHatButton(Hat::DOWN, 300, 2);
    pushButton(Button::A, 200);
    pushButton(Button::A, 8500);

    // キャンプ右から回り込み、雷光虫を無視して竜骨の化石へ
    // 壁を上らないように歩き
    SwitchController().setStickTiltRatio(100, 20, 0, 0);
    delay(2250);
    SwitchController().setStickTiltRatio(0, -100, 0, 0);
    delay(1000);

    // ここからR長押しで走り&滑り
    SwitchController().pressButton(Button::R);
    delay(2000);
    SwitchController().setStickTiltRatio(-60, -80, 0, 0);
    delay(7000);
    SwitchController().releaseButton(Button::R);
    delay(3500);
    pushButton(Button::A, 100, 15);
    SwitchController().setStickTiltRatio(0, 0, 0, 0);
    delay(4000);

    // 採取後飛び降りてウロコモリトカゲのところへ
    SwitchController().setStickTiltRatio(82, -52, 0, 0);
    SwitchController().pressButton(Button::R);
    delay(2800);
    SwitchController().releaseButton(Button::R);
    SwitchController().setStickTiltRatio(0, 0, 0, 0);
    delay(4000);
    SwitchController().setStickTiltRatio(-80, 80, 0, 0);
    delay(400);
    SwitchController().setStickTiltRatio(0, 0, 0, 0);
    delay(300);

    // 武器出しからA連打、スラアクぶん回し
    pushButton(Button::X, 500);
    pushButton(Button::A, 400, 22);
    delay(3000);

    // 納刀し、アイテムを回収
    pushButton(Button::Y, 600);
    pushButton(Button::A, 100, 10);

    // 四角形の渦上に移動、立ち止まらずにA押しを繰り返し
    SwitchController().setStickTiltRatio(70, 0, 0, 0);
    pushButton(Button::A, 50, 3);
    SwitchController().setStickTiltRatio(0, 0, 0, 0);
    pushButton(Button::A, 50, 3);
    SwitchController().setStickTiltRatio(-70, 70, 0, 0);
    pushButton(Button::A, 50, 2);
    SwitchController().setStickTiltRatio(-70, -70, 0, 0);
    pushButton(Button::A, 50, 2);
    SwitchController().setStickTiltRatio(70, -70, 0, 0);
    pushButton(Button::A, 50, 2);
    SwitchController().setStickTiltRatio(70, 70, 0, 0);
    pushButton(Button::A, 50, 2);
    SwitchController().setStickTiltRatio(-70, 70, 0, 0);
    pushButton(Button::A, 50, 3);
    SwitchController().setStickTiltRatio(-70, -70, 0, 0);
    pushButton(Button::A, 50, 3);
    SwitchController().setStickTiltRatio(70, -70, 0, 0);
    pushButton(Button::A, 50, 4);
    SwitchController().setStickTiltRatio(70, 70, 0, 0);
    pushButton(Button::A, 50, 3);
    SwitchController().setStickTiltRatio(-70, 70, 0, 0);
    pushButton(Button::A, 50, 4);
    SwitchController().setStickTiltRatio(-70, -70, 0, 0);
    pushButton(Button::A, 50, 4);
    SwitchController().setStickTiltRatio(70, -70, 0, 0);
    pushButton(Button::A, 50, 5);
    SwitchController().setStickTiltRatio(70, 70, 0, 0);
    pushButton(Button::A, 50, 5);
    SwitchController().setStickTiltRatio(-70, 70, 0, 0);
    pushButton(Button::A, 50, 5);
    SwitchController().setStickTiltRatio(0, 0, 0, 0);
    pushButton(Button::A, 50, 2);

    // 虫にぶら下がっている場合に地上へ降りる
    pushButton(Button::B, 100, 3);
    delay(3000);
}


// 溶岩洞クエスト帰還、集会所へ戻る
void finishQuest(){
    // クエストから帰還する
    pushButton(Button::PLUS, 200);
    pushHatButton(Hat::RIGHT, 200);
    pushHatButton(Hat::DOWN, 200, 4);
    pushButton(Button::A, 300);
    pushHatButton(Hat::LEFT, 200);
    pushButton(Button::A, 14500);

    // オトモのアイテムがあれば売却
    pushHatButton(Hat::UP, 200);
    pushHatButton(Hat::RIGHT, 200);
    pushButton(Button::A, 300);
    pushHatButton(Hat::LEFT, 200);
    pushButton(Button::A, 300,5);

    // どこかでつっかえた場合のみ、ここでクエスト受注キャンセル&マップ移動コマンド(上記が正常に動いた場合、ロード時間)
    pushButton(Button::B, 100, 10);
    pushButton(Button::RCLICK, 300);
    pushButton(Button::A, 300,2);
    pushButton(Button::B, 100, 5);
    SwitchController().pressButton(Button::MINUS);
    delay(800);
    SwitchController().releaseButton(Button::MINUS);
    pushHatButton(Hat::UP, 300);
    pushButton(Button::A, 1000);

    // 移動コマンドに約6.5sec,しばらく待機
    delay(11000);
}


// 開始直後のみ、はじめに集会所入り口へ移動する
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);
    pushButton(Button::B, 100, 3);
}

// ループについて、サブキャンプ1(2)での行動を省略したい場合は「goSub1(2)」を削除
// モンスターに見つかるとキャンプ移動できなくなるので、見つかりにくい2から行くことを推奨
void loop(){
  selectQuest();
  no25dango();
  startQuest();
  goSub2();
  goSub1();
  finishQuest();
}


 

 

最後に

サンブレイク環境に合わせ、MRのマカ錬金のための素材収集自動化へと改変しました。本スケッチを使用することで、ラージャンのMR素材を寝ている間などに回収できます。1時間当たり護石36個程度となるため、これから長きにわたるであろう神おま探しのお供にどうぞ。今後、より高ポイントの素材が出る溶岩洞クエストが出た場合、適宜編集して利用してください。

 

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

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

10 件のコメント:

  1. 盟勇同行★6の激ラーが素材のポイントが上位互換&クエストの位置が他のクエストでぶれることがないので良さそうです

    返信削除
    返信
    1. コメントありがとうございます。盟勇クエストをあまり進めていなかったので激昂ラージャンクエストが溶岩洞固定なことに気づいておりませんでした。
      素材の質、クエストの位置などメリットばかりであったため、記事の加筆およびVer1.1の公開をしました。

      削除
  2. このコメントは投稿者によって削除されました。

    返信削除
  3. このコメントは投稿者によって削除されました。

    返信削除
  4. 初めまして。
    細かい解説ありがとうございます。
    そして2度のコメント削除申し訳ありません。

    1から設定などを勉強してここまでたどり着くことができました。
    お聞きしたいことがありまして、コメントさせていただきました。

    旧Ver1.0を検証すると途中まで進むのですが、

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

    ここまで進むと
    'SwitchController' was not declared in this scope
    というエラーがでて進まなくなってしまいます。

    対処方法があれば教えていただけたら幸いです。
    よろしくお願いします。

    返信削除
    返信
    1. ライブラリの導入は正しく行えていますでしょうか。ポケモン剣盾01回目の記事を確認してみてください。
      もしSwitch操作用の別のライブラリが既に導入されている場合、書き込み時には一時的にライブラリフォルダ内から移動させることをおすすめします。ある程度の互換性を持たせたライブラリも存在するのですが、完全ではないようなので導入記事の通りにライブラリを導入しなおしてみてください。

      削除
  5. こちらの記事を参考に自動化始めました!とても分かりやすい記事とスケッチのおかげで、初めてながら一週間くらいで読み解き導入することができました!!
    ウロコモリトカゲの落とし物を拾うということで、他のクエストだったら他のモンスターの天鱗なども狙えるのかな?と思ってクエ選択の操作をいじってますが、まだうまくできなくて試行錯誤しています!
    これからもブログ見させて頂きます!

    返信削除
  6. 初めまして。
    トカゲしばき旧Ver1.0を使用させていただきたいのですが、どうにもうまくいかず、教えていただけないでしょうか。
    環境設定が終わり、スケッチを書き込むと「ボードへの書き込みが完了しました。」と表示されますが、同時に「「C:\Program Files (x86)\Arduino\libraries\mhrsUrokoGetter」に、無効なライブラリ「C:\Program Files (x86)\Arduino\libraries\mhrsUrokoGetterにはヘッダファイル(.h)がありません」があります。
    」も表示されています。
    スイッチへマイコンを接続すると何も動作せず、書き込みができていないのか、スイッチ側がマイコンを認識していないのかわからない状態です。

    返信削除
    返信
    1. ここで公開しているファイルはlibrariesフォルダに入っているのでしょうか?librariesフォルダには導入記事にあるライブラリを入れ、mhrsUrokoGetterは別のところに入れることをおすすめします。
      そのうえで書き込みを試し、本ページ最上段のリンクより01回目の記事を確認し、VIDが正しく表示されるかなどを動画を参考に確認してください。

      削除
    2. ファイルはlibrariesフォルダに入れていました。
      おっしゃる通り、VIDが変更できていなかったためやり直し、ファイルをデスクトップへ移して動作できるようになりました。
      ありがとうございました!!

      削除

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

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