返信先: ARMA3 ミッションエディットスレ

ホーム フォーラム TRI Gaming フォーラム ARMA3 ミッションエディットスレ 返信先: ARMA3 ミッションエディットスレ

#29356
Line
参加者
    Variableについて

Variableとはエディター側で任意に決める事が出来ます。
例を踏まえて説明したいと思います。

Trigger 1
Condition : not (alive Tank01) or isNull (driver Tank01)
Act : TASK1DONE = TRUE;
PublicVariable "TASK1DONE";

Trigger 2
Condition : TASK1DONE AND (WEST countSide thislist) > 5
Act : "END" call BIS_fnc_endMission;

この様に二つのトリガーを設定したと想定します。
まずトリガー1の方はTANK01が行動不能になればTASK1DONEというバリアブルが発動します。
そして、TASK1DONEの値TRUEを得たトリガー2にBluforユニットが6名以上トリガー内に入ればミッションエンドという事になります。

PublicVariableというのは各クライアントと同期を取る為の命令です。
これが無ければ自分は値を取得しているのに他のプレイヤーは取得していないという状況になる可能性があります。
そしてこの場合トリガー2が発動しない等、いつまで経ってもミッションが終了しない人等が出て来ます。
また、途中参加の人が上手く同期を取ることが出来なくなり、タスク完了してる人としていない人が出て来たりもします。

ローカル処理での状態では必須です。(addAction等のsqfファイル)

Variableを数値化

Variableは基本TRUEかFALSEで使い分けを行いますが、数値を当てはめることも出来ます。

Init.sqf
Bomb_count = 0;
Initにまずこう記述します。
ミッションが開始されれば全プレイヤーはBomb_countが0ということを知ります。

次にトリガーのActに

Trigger 1
Condition : Defuse_Bomb01
Act : Bomb_count = Bomb_count +1; PublicVariable "Bomb_count";

Trigger 2
Condition : Bomb_count == 1
Act : TASK1DONE = TRUE;PublicVariable "TASK1DONE";

トリガー1でBomb_count + 1でBomb_countの値が1になりました。
トリガー2でBomb_count == 1、つまり==というのは1とBomb_countが同じ物として定義されている場合ということです。

注意 : 数字を利用する際は必ず前持ってinit.sqfでVariableを定義しておきましょう。

Variableを数値化するのは基本スクリプトで走らせる際に使用したりします。
基本はTRUE or FALSEで大丈夫です。

また他のスクリプトでWaitUntilやWhileを使用して待機しているスクリプトがある時は予めinit.sqf内でVariableを認識させておく必要があります。
Init.sqf

if (isServer) then {
OBJECTFIXED = FALSE;
SEQUENCE01START = FALSE;
};

この様に予め設定をしておかないとOBJECTFIXEDって何????とサーバー側でエラーを吐き続けます。

色々試すとミッションの幅が広がりますのでチャレンジしてみてください。

しかし、複雑にするとエラー探しが大変になり、ミッションが動かないという状況になりますので注意が必要です。