DCSのLUAスクリプティングにおけるHELLO WORLDを紹介します。
LUAをインストールします。
The programming language Lua: http://www.lua.org/
ソースをダウンロードし解凍すると、luaxx.exe(バージョンにより名前が違います)の入ったフォルダが解凍されます。このフォルダのパスをユーザー環境変数のPathに追加してください。
テキストエディタを開いて次のコードを記述し、Hello.luaの名前で保存してください。
sim = "DCS"
version = "1.2.7"
-- コメントはこのように書きます。
opinion = "rocks" -- コードの隣にコメントを書いても構いません。
print(sim .. " " .. version .. " " .. opinion)
Windows PowerShellを開きHello.luaの存在するディレクトリへCDしたのち、次のようにコマンドを叩きます。回答したluaソースファイルのexe名が例えばlua53.exeだった場合は、次の例のluaをlua53に書き換えてください。
PS C:\Users\johndoe>lua Hello.lua
PowerShell に次のメッセージが表示されます。
DCS 1.2.7 rocks
DCSを次に起動してください。ミッションエディタを開きトリガーアイコン(電気回路のスイッチ記号)を押したら、次の通りにトリガーを組みます。
TYPE: ONCE
EVENT: NO EVENT
CONDITIONS TYPE: TIME MORE
SECONDS: 1
ACTIONS: DO SCRIPT FILE: Hello.lua
先ほど作成したHello.Luaを開き、ミッション開始一秒後に実行されるようにしました。しかし、DCS_World内ではメッセージは表示されません。そこでコードを次のように書き換えます。
sim = "DCS"
version = "1.2.7"
opinion = "rocks"
env.info(sim .. " " .. version .. " " .. opinion)
Hello.luaをトリガーリストから指定しなおしてミッションを開始してください。今回もメッセージはDCS_World内には表示されませんが、代わりにC:\Users\<<userName>>\Saved Games\DCS\Logs\dcs.log へメッセージが記述されるようになりました。envはDCS側の持つシングルトンであり、このオブジェクトのinfoメソッドはdcs.logへ文字列を記述するため、デバッグに使用することができます。
さて、次はメッセージを次のように表示します。
sim = "DCS"
version = "1.2.7"
opinion = "rocks"
trigger.action.outText(sim .. " " .. version .. " " .. opinion)
Hello.luaを指定しなおしてミッションを開始するとエラーが発生し、スクリプトが終了します。エラーメッセージはtrigger.action.outText関数に渡す引数が足りないことを警告しています。そこで次のようにコードを直します。
sim = "DCS"
version = "1.2.7"
opinion = "rocks"
trigger.action.outText(sim .. " " .. version .. " " .. opinion, 10)
ふたつめの引数はDCS_World内のメッセージウィンドウを表示する秒数を表します。Hello.luaを指定しなおしてミッションを開始すると、メッセージウィンドウが表示されます。
次のコードをluaファイルの先頭に記述しておくと、エラーの発生時にDCS_Worldをフリーズさせずにスクリプトが終了するようにできます。デバッグ用には引数をtrueにしておき、本番環境ではfalseにしておくとよいでしょう。
env.setErrorMessageBoxEnabled(false)
変数のスコープはlocalとして宣言されない限りトリガーを跨いで適用されます。先ほどのコードから
trigger.action.outText(sim .. " " .. version .. " " .. opinion, 10)
の部分を別ファイルにカット&ペーストして、別トリガーから起動してみてください。最初に起動したトリガーが変数を宣言した後であれば、二つ目のトリガースクリプトで変数が呼びされます。