arma3でチキンクリスプ食べながらスクリプト

arma3のエディッタ向けスクリプトを自分用に投稿

arma3 マルチプレイミッション Escapeのようにトリガーから生成する車両を判別する時の注意点

Escape from系は車両生成の時のカテゴリー分けにトリガーを使っている

f:id:question_and_life:20200207193625j:plain

 

例えばMRAPを生成する場合、画像のとおりに判別していく

その1

トリガーのテキスト名に"NATO_patrolVeh" (トリガー名ではなくテキスト部分)

実行文にMRAPと書く

 

その2

ユニットを使ってウェイポイントを設定する。

(自動生成される車両はユニットではなくトリガーの位置が生成時の位置基準となっていることに注意)

 

その3

トリガーとユニットを同期させる。

(このユニットは何でも良い、公式では市民ユニットが使用されている)

 

こうするとミッションのinitで予め記述されているコード通りに処理されランダムに生成される。

 

このinit処理についても簡単な流れを書く

 

その1

allMissionObjects "EmptyDetector"を使ってマップに置かれたすべてのオブジェクトから"NATO_patrolVeh"という条件のトリガーを探し出す。

 

その2
トリガーテキストを参照する

ここで車両のカテゴリーを分類できる

MRAP

CAR

APCなど・・・

TANK Platoonと書いて自分で戦車の小隊を設定しておき生成することも可能

 

その3

位置、向き、ウィポイントなど細かい設定を生成する

 

 

ここで重大な問題がある。

自分でトリガーの実行文にMRAPやCARを書いても実際のミッションでは機能しないということである。仮に"MRAP"、"CAR"と書いても処理に失敗する。

これはエディッタ側の仕様によるものと思われる。

具体的にはmission.sqmファイルをテキストなどで開くと分かる。

該当するトリガーを探すと次のようになっていた。

 

text = "NATO_patrolVeh";
condition = "call {this}";
onActivation = "call {MRAP}";

 

いくらトリガーの実行文を参照したとしてもcall {MRAP}と受け取ってしまう。

だから、if文やswitch文を使おうとしてもきちんと実行できない。

 

次のように編集し直す。

text = "NATO_patrolVeh";
condition = "call {this}";
onActivation = "MRAP";

このまま上書き保存すると正しくMRAPと参照してもらえる。

 

余談

今まで編集していてこの問題を解決することができなかった。

これまではトリガーのテキストで分類するようにしていた。

NATO_patrolMRAPやNATO_patrolCARのように

 

今回、問題は解決したが、ミッションファイルを開いて編集するよりはテキストで分類したほうが簡単な気がする

 

forums.bohemia.net