これは難解なスクリプトだぜ!
某質問を見て、ちょっと気になったのですが、もう解決済みになっていたのでここでコソコソと言及してみる。
主に4レス目にて提示されていたスクリプトについて。
ぶっちゃけわけわからん。まず引数に関する説明が何にも無い。しかも簡単にトレースしていくと、何も無いところから引数を取り出している…。意見を求めようと思ったら、随所にコメントを付けるべきですね。質問に答えている方も困っていました。
さて、一通りトレースしてみた所、何気に再帰関数となっていました。しかも引数さえちゃんとしてれば、たぶん機能するであろう形で。
しかしこれじゃあ、ユニットを一つ選択するごとにForEachでユニットリストを作り直すことになるので、お世辞にも優れたスクリプトとは言い難い。
Whileによるループで組むべきですね。
そして一番無駄な行為だったのは、ローカル変数宣言した変数を、別の関数で初期化しようとしていたところですね。
ローカル変数なら、宣言した関数が終了した時点で消えてなくなるので、初期化は必要ないです。
言うだけってのもちょっとアレなので、僕なりにアレンジしたものも一応公開。
一度も動かしてないので、動作保証は一切無し。Escapeしたユニットにヘックス座標データが残っているのかもわかりませんが、一応晒しておきます。長くなるので、「続きを読む」記法で。
最後に、こんな所でコソコソ言うことしかできなくて、ごめんなさい。
出撃: Local 一覧 待機数 残り 仮出撃 Local 待機ユニット数 = 0 ForEach UnitID In ユニット一覧(HP) If (Party() = 味方) And (Status() = 待機) And (IsAvailable(UnitID,母艦) = 0) Then 一覧[UnitID] = Nickname(UnitID) Incr 待機ユニット数 EndIf Next 待機数 = 待機ユニット数 + 5 If 待機数 > 50 Then 残り = 待機数 \ 10 ElseIf 待機数 > 30 Then 残り = 待機数 \ 5 ElseIf 待機数 > 20 Then 残り = 待機数 \ 4 ElseIf 待機数 > 10 Then 残り = 待機数 \ 3 Else 残り = 待機数 EndIf Do While (残り > 0) # 出撃位置決定処理 Ask 一覧 "残り出撃数$(残り)" 連続表示 キャンセル可 If 選択 = "" Then 残り = 0 Else Launch 選択 <決定したX座標> <決定したY座標> Set 仮出撃[選択] Unset 一覧[選択] Incr 残り -1 EndIf Loop Ask 出撃しますか? キャンセル可 出撃する 考え直す End If 選択 = 1 Then ForEach UnitID In 仮出撃 Escape UnitID Launch UnitID X(UnitID) Y(UnitID) Next Else ForEach UnitID In 仮出撃 一覧[UnitID] = Nickname(UnitID) Next EndIf Return