※本記事は、モンスターハンターライズ(MHRise)のテオ・テスカトルのクエスト(溶岩洞)へ行き、ウロコモリトカゲが落とすテオ素材の回収を自動化するプログラムについて解説した記事です。MHRiseの操作をArduino Leonardoで自動化しております。「Arduinoって何?」って方はポケモン剣盾自動化の00回目の記事を、Arduinoの環境構築(ライブラリ含む)は01回目の記事をご覧ください。
今回の記事は、前回の記事での溶岩洞探索ツア―自動化を改良し、錬金素材の回収に特化させて自動化しました。カムラポイントのみ欲しい場合は前々回の記事、ポイントと素材をそこそこに欲しい場合は前回の記事の方が効率が良いのでそちらをご覧ください。
2021.05.19追記 プログラムを一部修正しました。メインキャンプの特産品収集の削除、ウロコモリトカゲの落とし物回収の微調整を行いました。
本記事では、このプログラム(スケッチ)でできることや原理を解説したうえで、スケッチを配布しています。とにかくスケッチが欲しいという方は下へと読み飛ばしてください。
きっかけ、動機
前回の自動化では溶岩洞でウロコモリトカゲを攻撃することによりモンスター素材の回収を自動化に追加し、カムラポイントと素材の両方を稼ぐことが可能になりました。一方で、検証してみたところ思ったよりも錬金素材の効率が悪かったので、今回は錬金素材の収集に特化させてみました。
さらに、前回の投稿直前に、狩猟クエストであればトカゲの落とす素材が狩猟対象のモンスターに限られること、狩猟クエストでも帰還することでデメリットなくアイテムを持ち帰れることに気が付きましたので、実行に移しました。
これで何ができるの?
集会所上位(HR40以上)のテオ・テスカトルのクエストへ行き、ウロコモリトカゲを攻撃してモンスター素材を入手するという動作を繰り返します。今回は2か所のウロコモリトカゲを攻撃することで1クエストで最大6個の素材を入手します。だいたい取り逃す
実際に動かしたところ、睡眠中など7.5時間動かして錬金ポイント30000、幽玄のお守り200個分の素材を回収しました。(1時間当たり25個以上)
原理、おおまかな流れ
概要
前回から比較した、今回の主な改良点は黄色で表示します。
モンハンライズでは、強い装備を作るためにはマカ錬金で護石を入手する必要があり、そのためにモンスター素材などを必要とします。理想の装備を作るには何百何千とモンスターを狩ることになります。
本プログラムでは
「集会所上位のテオ・テスカトルのクエストへ行き、2か所のウロコモリトカゲを攻撃し、落とし物を拾う」
という動作を繰り返します。1周当たり4分程度、素材を3-6個程度回収します。
サブキャンプ1、2それぞれから近いウロコモリトカゲの落とし物を採取します。
プログラム開始前の準備について
①クエストについて
本プログラムでは集会所HR40以上で解放されるテオ・テスカトルのクエストへ行きます。
探索ツアーではなく狩猟クエストへ行きます。ツアーでない利点は、
ウロコモリトカゲが落とす素材が狩猟対象のモンスター素材に限定される
ことにあります。 前回のプログラムでは、錬金に使えない素材(爆炎袋など)や価値の低い素材の出ることが多かったため、ハズレ素材のなくポイントが高いテオ素材を狙います。
さらに、テオ・テスカトルのクエストは確定で溶岩洞となり、ランダム要素がないので自動化に最適と考えます。
今回拾うことができるのは、たてがみ、塵粉(75pt)、鱗、殻(65pt)の4種類となります。宝玉などのレア素材は落とさないようですが、錬金につぎ込む分には問題ないかと思います。
狩猟クエストの場合、メニュー中の「クエストから帰還」を選択することで、探索ツアーのようにアイテムを持ち帰ることができますこんな機能知らなかった。(クエストリタイアはクエスト受注前の状態に戻ります)
なお、テオ・テスカトルのクエストはHR40で緊急クエストとして出現します。星7リストから選択するため、1度は緊急クエストをクリアしてください。
②食事について
前回同様、ウロコモリトカゲを安定して出現させるために食事をします。
今回は、「お団子環境生物召喚」のスキルを発動させます。あらかじめマイセット32に「お団子環境生物召喚」を含むセットを設定してください。
1クエスト5分以内なので、クエスト終了後もお団子の日替わりや、発動するスキルは変わりません(○○%ではなく、前回に出たのとまったく同じスキルが発動します)
③装備について
装備について、前回同様スラッシュアックスを担ぐことを前提にしております。
スラッシュアックスの利点は、Aボタン連打で出せるぶんまわしで立ち位置が変わらずに円状(おうぎ形)の広い範囲を攻撃し続けられるためです。
武器の攻撃力は関係ないため、好きな武器(スロット数や見た目など)を使ってください。
また、スキルは地質学Lv3を推奨します。今回は少量の特産品に加え、ウロコモリトカゲの近くにある鉱石の収集もついでに行っております。特産品、鉱石の採取できる個数が増えます(1枠分追加)。2枠→3枠になるので、1.5倍の効率となります。
もっとも、ついでの採取なのでなくても問題ありません。
プログラムの流れについて
本プログラムでの実際の動きは、となります。
前回からの主な変更点の他、⑦の挙動も修正しております。
落とし物の取りこぼしをなくそうと試行錯誤しましたが改善しなかったので時間効率重視にしました(妥協)。効率的にすべて拾えそうであれば、各自で修正してください(そして教えてください)。
作成したスケッチ
作成したスケッチは以下のようになります。
2021.05.19追記 プログラムを一部修正しました。メインキャンプの特産品収集の削除、ウロコモリトカゲ2か所の落とし物回収の微調整を行いました。回収効率はあまり改善していないかも。
Ver.1.1のスケッチのファイルはこちら。
(Ver.1.0の古いファイルはこちら。動画と同じ)
なお、執筆者がスケッチを作成するにあたり使用した環境は以下のようになります。
・パッケージ版、日本語設定(DL版ではロード時間が違う可能性があります)
ロード時間などによる操作のずれが考えられますので、適宜調整してください。
本スケッチを実際に使用した動画はこちら↓
* モンハンライズ、溶岩洞特産品の採取でのカムラポイント回収+ウロコモリトカゲからモンスター素材回収の自動化
* サブキャンプ2近くのウロコモリトカゲを回収するため、前回のスケッチを改良
*
* 初期条件は以下の通り
* 1. 設定はオートセーブ有(執筆者環境のコンフィグ等で設定しているため、適宜スケッチ改変を推奨)
* 2. あらかじめHR40の緊急クエスト(テオテスカトル)を終える
* 3. 装備はスラッシュアックスを担ぐ。ポイント・鉱石稼ぎのため地質学Lv3を推奨。
* 4. 食事のマイセット32(リストの最後)をあらかじめ設定し、「環境生物召喚」が発動できるようにする
* 5. 集会所へ移動(オフライン)し、マップを開ける状態でマイコンを挿してスタート
* 6. もしマイコンをスタートさせた初回の食事で「環境生物召喚」が発動しなかった場合、
* マイセットのお団子3個の順番を変えたり、別のクエストを消化したりしてスキルが発動するようにする
*/
#include <auto_command_util.h>
// 集会所~溶岩洞ツアー開始~竜骨の化石採取
void startTour(){
// 集会所初期位置~受付話しかけ
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);
pushButton(Button::A, 1000);
pushHatButton(Hat::RIGHT, 200, 2);
pushHatButton(Hat::DOWN, 200, 2);
pushButton(Button::A, 300, 2);
pushButton(Button::A, 1700);
// 団子食べる
No32dango();
// クエスト開始
pushButton(Button::ZR, 300);
pushButton(Button::A, 3000);
pushButton(Button::B, 100, 5);
// // クエスト開始まで待機
delay(18000);
}
// 出発前に団子(マイセット32)を食べる
void No32dango(){
// 集会所でツアー受注後、食事
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);
delay(2800);
// 食事>お金で>いつもの>マイセット32
pushButton(Button::A, 500);
pushButton(Button::A, 300, 2);
pushHatButton(Hat::LEFT, 200);
pushHatButton(Hat::UP, 200);
pushButton(Button::A, 300, 2);
pushButton(Button::B, 100, 25);
delay(500);
}
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::UP, 300);
pushButton(Button::A, 200);
pushButton(Button::A, 8500);
// キャンプ右から回り込み、雷光虫を無視して竜骨の化石へ
SwitchController().pressButton(Button::R);
SwitchController().setStickTiltRatio(100, 0, 0, 0);
delay(2000);
SwitchController().setStickTiltRatio(0, -100, 0, 0);
delay(3000);
SwitchController().setStickTiltRatio(-60, -80, 0, 0);
delay(8000);
SwitchController().releaseButton(Button::R);
pushButton(Button::A, 200, 10);
SwitchController().setStickTiltRatio(0, 0, 0, 0);
delay(5000);
// 採取後飛び降りてウロコモリトカゲのところへ
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(500);
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);
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 finishTour(){
// クエストクリアで帰還
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)」を削除
void loop(){
startTour();
goSub2();
goSub1();
finishTour();
}
最後に
本スケッチを使用することで、テオ・テスカトルの素材の収集が自動でできます。このプログラムでマカ錬金用素材を効率よく稼げます。
このプログラムで一通りモンハン関係の自動化は終わりかと思います(今後のアプデ次第)。今まで(4回)の自動化で、①交易によるハチミツなど消費アイテム②隠密隊やトカゲによる錬金素材③カムラポイントや金、をそれぞれ稼ぐことが可能となりました。その他に自動化で欲しいものができた頃に、また自動化を試みると思います。
2021.05.19追記 極一部の界隈で話題にしてもらったり移植してもらったりしているみたいでありがとうございます。各自の環境に合わせてどんどんプログラムを弄ってください。
プログラムの不備、改善点などありましたらコメントやお問い合わせからお願いいたします。
念のため書きますが、使用マイコンはArduino Leonardoです。最もメジャーなUnoなどでは本プログラムは使えませんのでご注意を。
Arduino Arduino Leonardo (ピンソケット・ピンヘッダ実装済) 【A000057】 | ||||
|
上記のスケッチのファイルを使用させていただこうかと思ったのですが
返信削除書き込みでエラーが出ます。どういった原因が考えられるでしょうか?
自己解決しました。ありがとうございました。
返信削除ヘッダファイルがありませんと出るのですがどうすればいいでしょうか?
返信削除上の文は出なくなったのですが書き込みまで完了していざスイッチに繋いでみてもうんともすんともしません、何が原因でしょうか?
返信削除エラー等は出ていません
詳しい状況が分からないので何とも言えませんが、スケッチの書き込み自体が問題ないのであれば、考えられるのは「デバイスIDの書き換え」のミスが考えられます。
削除以下の【ポケモン×Arduino_01】の記事の「Arduino IDEの導入」をやってみてください。
https://kokenikki.blogspot.com/2021/02/arduino01arduino-leonardo.html
boards.txtを書き換える時の "leonardo.vid"などで間違いがないか確認してください。もしATmega32U4の他のマイコン(Microなど)を使用している場合は、leonardoではなくそれぞれ対応したところのvidなどを同じように変えてみてください。
削除このコメントは投稿者によって削除されました。
返信削除返信ありがとうございますm(_ _)m
返信削除leonardo.vid、pid8列とleonardo.build.vid、pidの2列だけですよね?
一応その記事もよく読んでやってみたんですけど差し込んでも動き出さなくて
他につまづいていそうなことをとりあえず列挙してみます。以下を試しても解決しないようであれば、Arduino導入~書き込みまでの流れを詳しく教えていただけると助かります。
削除・boards.txtの書き換えにはどのテキストエディタを使用しましたか?(相性があるのかも?Win標準のメモ帳は不可)
・ArduinoIDEを開いてマイコンを挿した時に、左上の「ツール」の項目で正しく「Arduino Leonardo」として認識、指定されていますか?
・書き込み時は「→」マークの「マイコンボードに書き込む」をクリックし、書き込みが完了しましたと表示されていますか?
説明ありがとうございます!無事に導入出来ました!
返信削除しかしこのスケッチを使うと溶岩洞の採取ツアーに行ってしまいテオ・テスカトルのクエストに行けません
ブログページ上のスケッチ(灰色枠)について書き換え忘れていたので修正しました。採取ツアーではなくテオのクエストを選択するようになるかと思います。
削除おそらくこれで大丈夫かと思いますが、灰色の枠の上にあるリンクから、実際に動かすために使用したinoファイルを直接DLした方が確実かもしれません。
読み込み中に、//集会所入り口へマップ移動のコマンド入力の1行目の部分で、「'SwitchController' was not declared in this scope」とエラー表示がされるのですがどう対処すればいいでしょうか。
返信削除ライブラリ内の'SwitchController'関数が正しく読み込めていないと考えられます。ひとまず考えられる原因として以下に挙げておきます。
削除・#include が宣言されていない(消してしまっていないか確認してください)
・【ポケモン×Arduino_01】の環境構築でライブラリが正しく導入できていない(ArduinoIDE左上「ファイル」>スケッチ例の中に「NintendoSwitchController」>「pokemon」があれば大丈夫かと思います)
・「NintendoSwitchController」ライブラリと類似、バージョン違いなどのライブラリを複数入っていないか(以前にも自動化したことがあれば、その時に入れたライブラリ等を一時的に移すなどして確認してみてください)
ありがとうございます!#inclueeを入れたら、検証は出来ました!
削除しかし書き込みをすると、「マイコンボードに書き込んでいます」と永遠に表示され、40分くらい経っても終わりません😭
確認したところ、pcにポートが認識されてなかったみたいです。
削除この場合どうすればポートを認識できるようになるでしょうか?
質問ばかりすいません🙇♂️
データ送信非対応の安いケーブルを使ってしまっていました🙇♂️
削除買い直してもう一度試してみます。
最大28672バイトのフラッシュメモリのうち、スケッチが8130バイト(28%)を使っています。
返信削除最大2560バイトのRAMのうち、グローバル変数が216バイト(8%)を使っていて、ローカル変数で2344バイト使うことができます。
processing.app.debug.RunnerException
at cc.arduino.packages.uploaders.SerialUploader.uploadUsingPreferences(SerialUploader.java:152)
at cc.arduino.UploaderUtils.upload(UploaderUtils.java:77)
at processing.app.SketchController.upload(SketchController.java:732)
at processing.app.SketchController.exportApplet(SketchController.java:703)
at processing.app.Editor$UploadHandler.run(Editor.java:2055)
at java.lang.Thread.run(Thread.java:748)
Caused by: processing.app.SerialException: シリアルポート「COM4」をタッチできませんでした。
at processing.app.Serial.touchForCDCReset(Serial.java:107)
at cc.arduino.packages.uploaders.SerialUploader.uploadUsingPreferences(SerialUploader.java:136)
... 5 more
Caused by: jssc.SerialPortException: Port name - COM4; Method name - openPort(); Exception type - Port busy.
at jssc.SerialPort.openPort(SerialPort.java:164)
at processing.app.Serial.touchForCDCReset(Serial.java:101)
... 6 more
と表示されています、
こちらのプログラムなのですがマイナスボタン操作を長押しではなく単押しにする方法などありますでしょうか?
返信削除マイナス長押しは以下のようになっています。
削除SwitchController().pressButton(Button::MINUS);
delay(800);
SwitchController().releaseButton(Button::MINUS);
マイナス押しを開始>800ミリ秒待機>押しを終了、となります。
単押しにする、つまり「一瞬だけ」長押しするのは、delayを100程度にすることで可能です。あるいは、
pushButton(Button::MINUS, xxx); でもほとんど同じです(xxxは単押し後の待機時間)。