2009/6/2 火曜日

スクリプト解説

Filed under:   ─スクリプト編 — gachopin @ 14:36:39

スクリプトが分かれば、ゲームエンジンが許す限り何でも出来ます。エディタ画面を弄らなくても、スクリプトだけでミッションを作れます。
アドオンに新規の機能を組み込む場合、スクリプトが必須になってきます。

スクリプトの記述は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文は私が慣れていないせいもあって、不完全です。

コメントはまだありません »

コメントはまだありません。

この投稿へのコメントの RSS フィード TrackBack URL

コメントをどうぞ

HTML convert time: 0.262 sec. Powered by WordPress ME