スクリプトが分かれば、ゲームエンジンが許す限り何でも出来ます。エディタ画面を弄らなくても、スクリプトだけでミッションを作れます。
アドオンに新規の機能を組み込む場合、スクリプトが必須になってきます。
スクリプトの記述はARMA2でも大きく変わらない(だろう)と思うので、ちょっとだけ解説します。
理解するには、ユーザーミッションやアドオンのスクリプトの中身をみて、ちょっと改造してみるのが一番です。
★全てのスクリプトに共通すること
・名前がinitのスクリプトは、ミッションで最初に必ず実行される。(init.sqs or init.sqf)
・実行するスクリプトのファイルだけに使える変数は、_をつける
・全てのスクリプトに共通の変数を使う場合は、_をつけない
例) a.sqsの中身 ’変数にプレーヤと乗り物を指定するスクリプト’
1: _hoge = player
2: hoge = vehicle(player)
b.sqsの中身 ’ダメージを与えて破壊するスクリプト’
1: _hoge setdammage 1
2: hoge setdammage 1
ミッションの中で a.sqsとb.sqsを実行させたとき、
1行目→b.sqsは_hogeが参照できないので、エラーが出ます。
2行目→b.sqsはa.sqsで定義したhogeを参照できるので、プレーヤーの乗り物を破壊します。
・[]は配列を表す。
配列の使い方例) -ある配列から3番目の要素を取り出す-
_array1 = [A,B,C,D]
_elementC = _array select 2 ←Aは0番目、Cは2番目と数えます
まずOFP・ARMAで使えるスクリプトは2種類あります。
①sqs
OFPで最も一般的に使われているスクリプトです。
・行の最初に;をつけるとコメント行になります。
・命令文の最後に;をつけ、続けて命令文を書くことができます。
・エラーが出たとき、1行でエラーの内容が表示されます。
・if文の書き方が2種類ある
例1) ?(条件) : 命令文1;命令文2
例2) if(条件) then {命令文1;命令文2};
呼び出し方:
引数 exec “スクリプト” (特に引数が無い場合は[] exec “script.sqs”)
[引数1,引数2] exec “スクリプト”
②sqf
ARMAで推奨されているスクリプトです。
記述を厳格に書かないとエラーが出ます。
・行の最初に//をつけるとコメント行になります。
・複数行のコメントは/*と*/で囲めばOK。
・命令文の最後は必ず;をつけなければいけません。エラーが出ます。
・エラーが出たとき、複数行でエラーの内容が表示されます。
・sqsで使えたif文の省略形 ?(条件):命令文 は使えません。
・for文、foreach文、if文、ifelse文、switch文、while文が使えます。
呼び出し方:
execVM “スクリプト” ←引数の指定無し
[引数] execVM “スクリプト” ←引数の指定有り
call compile preprocessFile “script.sqf”;の後、引数 call “実行文”
call compile preprocessFile “script.sqf”;の後、[引数1,引数2] call “実行文”
sqfには2種類あります。
A.実行するもの
・sqsと同じ。ただし中身は厳格に書かないとエラーが出る。
B.関数を定義するもの
関数を定義し、call文で実行させることができる。
別ファイルから実行する場合、
実行する前に、関数を書いたファイルを読むおまじない「call compile preprocessFile “スクリプト名”」を書く必要がある
以下の例では2つのファイルに分けていますが、A.B.は1つのファイルに書くこともできます。
その場合、call compile preprocessFile~ は必要ありません。
関数の例)
———func.sqfの中身———
func1 =
{
_unit = _this select 0;
_unit setdammage 1;
};
——————————-
関数を呼び出した例)
———call.sqfの中身———
call compile preprocessFile “func.sqf”;
[player] call func1;
——————————-
execVM “call.sqf” を実行すると、プレーヤが死亡します。
大雑把ですが、説明は以上です。sqf文は私が慣れていないせいもあって、不完全です。