最近 Windows から Manjaro システムに全面的に移行しましたが、本当に使いやすいです。Manjaro に移行した後の重要な問題は、以前のように MAA 明日方舟の収穫を複数開く方法です。結局、粥批は毎日 2 回収穫しなければならず、複数のアカウントを手動で収穫するのは非常に面倒です。
エミュレーター#
まず、MAA は 3 種類の Linux エミュレーターをサポートしています。一つは AVD、もう一つは Waydroid、そして redroid です。私は AVD を使用することにしました。結局、Google のサポートがあるので、比較的使いやすいです。Waydroid のコンテナ化の概念は良いですが、N カードに対するサポートがないようです。
AVD は android-studio に統合されており、まず AUR リポジトリから android-studio をダウンロードします(flatpak リポジトリを使用しないでください。コンテナ化により、後続のコマンドラインでエミュレーターを起動するのが非常に面倒になります)。プロキシを設定して Sdk をダウンロードした後、選択します。
もちろん、android-studio を使用せずに直接 AVD を使用することもできますが、android-studio はグラフィカルインターフェースを提供しているので、多くの手間を省けます。
新しいデバイスを作成し、解像度を 16:9 に設定し、720p 以上にします。フレームワークは (R - 30 - x86 - Android 11.0) を選択し、自分の構成に応じて各エミュレーターに適切な構成を割り当てます。ハードウェアアクセラレーションを有効にすることを忘れずに、これで MAA をサポートするエミュレーターが成功裏に作成され、adb を通じて明日方舟をインストールできます。
毎回エミュレーターを開くたびに android-studio を開くのは非常に面倒です。実際には、コマンドラインから直接エミュレーターを開くことができます。
~/Android/Sdk/emulator/emulator -list-avds //エミュレーターリストを取得
~/Android/Sdk/emulator/emulator -avd エミュレーター名 //指定したエミュレーターを起動
MAA 設定#
MAA を公式サイトからダウンロードして解凍した後、公式は MAA を呼び出すいくつかの方法を提供しています。一つは maa-cli、もう一つは Python インターフェースで、それぞれ解凍パッケージのルートディレクトリにある AppImage ファイルと Python フォルダーです。maa-cli の設定を見てみましたが、設定タスクと複数開くのは非常に面倒なので、Python インターフェースを使用して MAA を起動することにしました。Python フォルダー内の sample.py ファイルを開き、このファイルを変更することでタスク設定を完了できます。まず、adb のアドレスと adb デバイス名を設定し、次に必要に応じてドキュメントに従ってタスクを追加し、タスクパラメータを設定します。直接 python sample.py を実行すれば、すぐに収穫を開始できます。
毎回タスクのたびに py ファイルを変更するのは非常に面倒なので、python を実行する際にパラメータを受け入れ、実行するタスクを選択できるようにします。この sample ファイルを変更し、以下に私のタスク設定を示します。
import json
import pathlib
import time
import argparse
from asst.asst import Asst
from asst.utils import Message, Version, InstanceOptionType
from asst.updater import Updater
from asst.emulator import Bluestacks
@Asst.CallBackType
def my_callback(msg, details, arg):
m = Message(msg)
d = json.loads(details.decode('utf-8'))
print(m, d, arg)
if __name__ == "__main__":
# ArgumentParserオブジェクトを作成
parser = argparse.ArgumentParser(description='Arknights Assistant Script')
# 各タスクの有効化オプションを追加
parser.add_argument('--start-up', action='store_true', help='StartUpタスクを有効にする')
parser.add_argument('--recruit', action='store_true', help='Recruitタスクを有効にする')
parser.add_argument('--infrast', action='store_true', help='Infrastタスクを有効にする')
parser.add_argument('--visit', action='store_true', help='Visitタスクを有効にする')
parser.add_argument('--mall', action='store_true', help='Mallタスクを有効にする')
parser.add_argument('--fight', action='store_true', help='Fightタスクを有効にする')
parser.add_argument('--award', action='store_true', help='Awardタスクを有効にする')
parser.add_argument('--stage', type=str, default=None, help='Fightタスクのステージを指定')
args = parser.parse_args()
# dllファイルとリソースを保存するパスを設定してください
path = pathlib.Path(__file__).resolve().parent.parent
# アップデーターのパスとターゲットバージョンを設定し、更新
# Updater(path, Version.Stable).update()
Asst.load(path=path)
asst = Asst()
asst.set_instance_option(InstanceOptionType.touch_type, 'maatouch')
# adb環境変数を設定するか、adb実行可能ファイルのパスを変更してください
if asst.connect('/home/linsoap/Android/Sdk/platform-tools/adb', 'emulator-5554'):
print('接続成功')
else:
print('接続失敗')
exit()
# タスクとパラメータはdocs/集成文档.mdを参照してください
if args.start_up:
asst.append_task('StartUp', {
'client_type': 'Official',
'start_game_enabled': True
})
if args.recruit:
asst.append_task('Recruit', {
'enable': True,
'select': [4],
'confirm': [3, 4],
'times': 4
})
if args.infrast:
asst.append_task('Infrast', {
'enable': True,
'facility': [
"Mfg", "Trade", "Control", "Power", "Reception", "Office", "Dorm"
],
'drones': "Money"
})
if args.visit:
asst.append_task('Visit')
if args.mall:
asst.append_task('Mall', {
'shopping': True,
'buy_first': ['招聘许可', '龙门币'],
'blacklist': ['家具', '碳'],
})
if args.fight:
fight_params = {'enable': True}
if args.stage:
fight_params['stage'] = args.stage
asst.append_task('Fight', fight_params)
if args.award:
asst.append_task('Award', {
'enable': True,
})
asst.start()
while asst.running():
time.sleep(0)
Updater クラスには現在いくつかの問題があるため、直接コメントアウトすることをお勧めします。バグが修正されたらコメントを解除すれば大丈夫です。
上記の設定をインストールすれば、以下のコマンドで MAA を起動できます。
python emulator-54.py --start-up --recruit --infrast --visit --mall --fight --stage AP-5 --award
ワンキー スクリプト#
ワンキーでエミュレーターを起動#
一発で収穫を行うためには、複数のエミュレーターを一発で起動するスクリプトが必要です。一発で MAA を起動します。
まず、sample.py を複製し、その中の adb 名を変更します。
最初の問題は、AVD の adb 名が固定ではなく、起動順に割り当てられることです。私は 2 つの公式アカウントと 1 つの b 服アカウントを持っており、ランダムな adb 名は StartUp タスクの失敗を引き起こす可能性があります。したがって、複数開くときは、ポートを指定して、対応するクライアントが対応するタスクを実行できるようにする必要があります。
#!/bin/bash
while [ "$#" -gt 0 ]; do
case "$1" in
--start)
shift
while [ "$#" -gt 0 ]; do
case "$1" in
--all)
echo "すべてのエミュレーターを起動中..."
/home/linsoap/Android/Sdk/emulator/emulator -avd aknz -ports 5554,5555 &
/home/linsoap/Android/Sdk/emulator/emulator -avd aknz_1 -ports 5556,5557 &
/home/linsoap/Android/Sdk/emulator/emulator -avd mrfz -ports 5558,5559 &
shift
;;
--list)
echo "利用可能なエミュレーター:"
/home/linsoap/Android/Sdk/emulator/emulator -list-avds
shift
;;
-*)
echo "不明なオプション: $1"
exit 1
;;
*)
echo "エミュレーターを起動中: $1"
/home/linsoap/Android/Sdk/emulator/emulator -avd "$1" &
shift
;;
esac
done
;;
--stop)
shift
while [ "$#" -gt 0 ]; do
case "$1" in
--all)
echo "すべてのエミュレーターを停止中..."
/home/linsoap/Android/Sdk/platform-tools/adb -s emulator-5554 emu kill
/home/linsoap/Android/Sdk/platform-tools/adb -s emulator-5556 emu kill
/home/linsoap/Android/Sdk/platform-tools/adb -s emulator-5558 emu kill
shift
;;
-*)
echo "不明なオプション: $1"
exit 1
;;
*)
echo "エミュレーターを停止中: $1"
/home/linsoap/Android/Sdk/platform-tools/adb -s "$1" emu kill
shift
;;
esac
done
;;
-*)
echo "不明なオプション: $1"
exit 1
;;
esac
done
上記は私が ChatGPT を使って生成したワンキー起動スクリプトです。自分のニーズに応じて GPT にスクリプトを生成させれば大丈夫です。
- すべてのエミュレーターを起動:
./your_script.sh --start --all
- 特定のエミュレーターを起動:
./your_script.sh --start <emulator_name>
- 利用可能なエミュレーターリストを表示:
./your_script.sh --start --list
- すべてのエミュレーターを停止:
./your_script.sh --stop --all
- 特定のエミュレーターを停止:
./your_script.sh --stop <emulator_name>
ワンキーで MAA を起動#
sample.py を変更して、引数を受け入れて有効にするタスクを選択できるようにすることで、MAA をワンキーで起動するスクリプトを作成するのも簡単になります。ChatGPT を使ってニーズに応じてスクリプトを生成すれば大丈夫です。以下は私のスクリプトです。
#!/bin/bash
# 実行するPythonスクリプトファイルのリストを設定
python_scripts=("emulator-54.py" "emulator-56.py" "emulator-58.py")
# デフォルトのパラメータ値
all_flag=false
only_fight_flag=false
unfight_flag=false
stage_value=""
# コマンドラインパラメータを解析
while [ "$#" -gt 0 ]; do
case "$1" in
--all)
all_flag=true
;;
--only-fight)
only_fight_flag=true
;;
--unfight)
unfight_flag=true
;;
-stage|--stage)
shift
stage_value="$1"
;;
*)
echo "不明なオプション: $1"
exit 1
;;
esac
shift
done
# パラメータの組み合わせをチェック
if [ "$all_flag" = true ] && [ "$only_fight_flag" = true ]; then
echo "--allと--only-fightを同時に使用することはできません。"
exit 1
fi
# コマンドラインパラメータ文字列を構築
args="--start-up"
if [ "$all_flag" = true ] || [ "$only_fight_flag" = true ]; then
args+=" --recruit --infrast --visit --mall --award --fight"
fi
if [ "$only_fight_flag" = true ]; then
args+=" --fight"
fi
if [ -n "$stage_value" ]; then
args+=" --stage $stage_value"
fi
# 3つのPythonコマンドを直列に実行
for script in "${python_scripts[@]}"; do
# 現在実行中のタスクを出力
echo "$scriptでタスクを実行中"
# 直列実行
python "$script" $args & echo "$scriptでのタスクが完了しました" || echo "$scriptでのタスクの実行に失敗しました"
done
echo "すべてのタスクが完了しました"
このスクリプトは以下のコマンドをサポートしています。
--all
: すべてのタスクを起動します。--start-up
,--recruit
,--infrast
,--visit
,--mall
,--award
および--fight
を含みます。--only-fight
: すべてのタスクを起動します。--start-up
と--fight
を含みます。--unfight
: すべてのタスクを起動しますが、--fight
を含みません。--stage <value>
または-stage <value>
: タスクのステージの値を指定します。