さて、前回の答えですが
(1~4の数字) call BIS_fnc_earthQuake ;でした。できたかな?
では本題。早速何も考えずに、init.sqfに次の文を書いてください。
[] execVM "script.sqf" ;
execVMとは、ちょっとプログラムを触ったことのある人はティン!と来ると思いますが、要はスクリプト呼び出しコマンドなわけです。この場合、引数[]で"script.sqf"を呼び出そうとしたわけですが、この時点ではscript.sqfは作成されていない…はずなのでエラーが発生する、というわけです。
では、init.sqfのときと同じ要領でscript.sqfを作成し、その中に次の文を書いてください。
hint "script.sqf is running!" ;どうですか?スクリプトは正常に動いたと思います。要領をつかんだ人は分かると思いますが、スクリプトを呼び出し、動かしてくれます。
では、ここで簡単に実習。先ほど作成したscript.sqfをtest.sqfと改名し、新たに作成したscriptsフォルダの中に入れてください。さあどのように呼び出せばよいでしょうか?
答えは、
[] execVM "scripts\test.sqf" ;です。基準フォルダはmission.sqmがある場所で、そこからフォルダを進む場合\(バックスラッシュ)で区切ってください。
正しく書いていれば、正しく動くはずです。
さて、そろそろexecVMの前にある空のArrayが気になってくる人もいると思いますが…なんだと思いますか?
この段階では全く意味をなさない適当な引数です。実は、このArray(Array以外も突っ込めますけど)は呼び出したスクリプトの中で引数として使えるんです。
例えば、init.sqfの中身を
["Tom",22] execVM "scripts\test.sqf" ;とし、test.sqfの中身を
hint format ["%1 is %2 age.",_this select 0,_this select 1] ;とすると、
と、表示されます。説明のために新しく出てきたformatですが、基本はstrと同じです。例えば、
format ["%1,%2","First","Second"]の結果は、
First,Secondとなる単純なスクリプトです。つまり、Array1番目以降の中身がにArray最初の文字列の中の%1や%2などに置き換えてくれるスクリプトです。
…おほん、話が少しずれましたね。先ほどのhintで気が付いてくれると幸いですが、execVMで呼び出すときに引数に["Tom",22]が入りました。その引数はtest.sqf内で_thisとして扱えます。この場合はArrayなので、一つのデータを取り出すためにselectを使用していますが、execVMの引数はString,Number,Booleanなどさまざまなデータを突っ込めます。
このexecVMとスクリプトを使用すれば、ミッション内のスクリプトをモジュール式に管理することが出来、非常に生産性が高まるほか、整備性が高まります。
【実習】scriptsフォルダ内にgetName.sqfを作成し、中身を次のようなスクリプトにする。
適当にプレイヤーの参加にユニットを配置し、そのユニット全員の名前を2秒おきに読み上げる。なお、ユニットの引数はexecVMとともに書く。グループのユニット全員を取得する際は、unitsスクリプト、名前取得はname。
0 件のコメント :
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。