支援帰還を考える

支援帰還の対応は非常に簡単です
適当にクリック入れて再出撃ダイアログを表示させたら再出撃ボタン押すだけ

while true	//メインループ
	ifb chkimgx("support_result.bmp",NOXid) then	//支援帰還
		P_cruise_repeat
(以下略)

procedure P_cruise_repeat
	P_random_sleep(3,5)
	repeat
		P_adb_BTN(300+randomx(300),170+randomx(340),300+randomx(500),"Support Return")
		P_random_sleep(0.5,1.5)
	until chkimgx("support_again.bmp",NOXid)
	P_adb_BTN(G_IMGX_X+delta_X+randomx(90),G_IMGX_Y+delta_Y+randomx(40)+delta_Y,0,"Repeat")
fend

そんな風に考えていた時代が私にもありました
いや、間違いではないんです。ちゃんと動きます
実は支援帰還の問題はその他の処理の最中で起こります

while true	//メインループ
	ifb chkimgx("support_result.bmp",NOXid) then	//支援帰還
		P_cruise_repeat
		
	elseif formation then //編成
		ifb chkimgx("home_form.bmp", NOXid, 1040, 460, 1270, 660, 1, 10, -1) then	//編成
			P_adb_BTN(G_IMGX_X+delta_X +randomx(180),G_IMGX_Y+delta_Y +randomx(100),100,"Forming")
			sleep(3)
(以下編成画面での処理)

支援帰還画面だったら再出撃処理を呼び出し、そうでなくてformationフラグ立ってたら「編成」ボタン探して押した後3秒待ち、3秒あれば編成画面になってるはずだから・・・と

考えたあなたは想定外のタイミングで表示された支援帰還画面を見て悩むことになります
上記スクリプトで使っているP_adb_BTNは座標X,Yの後に待ち時間を設定して呼び出す関数にしています
(あと動作確認用のキャプション文字列が最後にくっついてます)
ここでは100msの待ちを設定したのでこの瞬間に帰還タイミングが刺さると編成画面にいるはずが帰還画面になっている状況が発生します、 ならばそんな問題を起こす待ち時間は安易に設定しないようにすれば解決・・・

しません、編成は大丈夫だと思いますが実は戦闘ボタン押した後の戦域選択画面には帰還画面が被ってきます
これは戦域表示待ちの間に帰還が発生すると問答無用で画面が切り替わるのでスクリプトの待ち時間では回避できません
また戦闘中に帰還があった場合も終了後のホームもしくは戦域選択に画面が戻った瞬間に帰還画面がオーバーラップしてきます
(これは結構あるので実体験したことある方多いかと)
という訳で支援帰還についてはそれ自体の操作スクリプトではなく無遠慮に割り込んでくるタイミングにどう対応するかが大事です

while true	//メインループ
	ifb chkimgx("support_result.bmp",NOXid) then	//支援帰還
		P_cruise_repeat
		
	elseif formation then //編成
		ifb chkimgx("home_form.bmp", NOXid, 1040, 460, 1270, 660, 1, 10, -1) then	//編成
			P_adb_BTN(G_IMGX_X+delta_X +randomx(180),G_IMGX_Y+delta_Y +randomx(100),100,"Forming")
			sleep(3)
		elseif chkimgx("formation_menu.bmp",NOXid,170,10,270,120,1,10,-1) then //編成メニュー内
			P_SQ_formation
		endif

そんなこんなで編成押して3秒待ちのあとすぐに処理に取り掛かる(P_SQ_formation呼び出し)のではなく、いったんメインループに処理を戻して帰還画面が表示されてくるケースに配慮した上で無事に編成メニュー内に画面が移った確認が取れてから具体的な操作を開始します(このifブロックはループ2回分かけて編成画面移動と処理呼び出しを行います)
何らかの事情でループ2回目の時点で編成メニュー内に画面が移っていなければ再度編成ボタン押下を試みます(ボタンがあれば)
であれば編成ボタン押したあとの3秒待ちは画面遷移以外にも必要以上に高速でループを回してしまい、編成ボタンを連打してしまう事故を防止する意味も持つことになります

またformationフラグとのif文を階層分けしているのはformationフラグがクリアされない限りメインループからの処理は帰還対応以外必ずここへ吸い込まれるので後段の処理は実行されない作りにするためです
今回は状況分岐ifの再終段に戦闘突入を配置する計画なので編成その他の準備動作が完了しないと辿り着けないようにします
この辺の作りは色々意見があると思います