ミッションスクリプトからローカルのテキストファイルを読み込みたい

まとめ

  • loadFile 関数で読み込める
  • -filePatching 引数をつけて arma3 を起動する必要がある
  • UTF-8も読み込めるので日本語も大丈夫
  • データベース連携もありだよ

概要

手軽に News を表示したいので、ローカルのテキストファイルを読み込みます。ローカルのテキストファイルを読み込むにはFilePatching を有効にします。テキストファイルは、Arma 3インストールフォルダの配下の任意の場所へ配置します。

ちなみに、loadFile はサーバーサイドのSQFファイルを読込み、実行/プリコンパイルするために良く利用されている関数です。クライアントに見せたくないスクリプトをサーバーだけに配置できる利点があります。

事前準備

引数を指定して、arma3server_x64.exe を起動しましょう(例: arma3server_x64.exe -filePatching)。基本はサーバーで読み込んで、 publicVariable で各クライアントで配信すればよいですね。

Arma 3インストールフォルダの配下に、「news」というフォルダを作成し、「docs」フォルダの中へ、news.txt を置いておきます。

コード

コードはシンプルです。

// グローバル変数を初期化する
if (isNil "TSAN_NEWS_STRING") then {
    TSAN_NEWS_STRING = "";
};

// サーバーのローカルに存在するテキストファイルを読み込む
TSAN_NEWS_STRING = loadFile "docs\news.txt";

// サーバーのログファイル(RPTファイル)に news.txt のテキストを表示する
diag_log [TSAN_NEWS_STRING]; 

// JIPを考慮してクイアントにテキストを配信(配信したいなら)
publicVariable "TSAN_NEWS_STRING";

今回はテキストファイルを読み込んでプレーン状態で利用していますが、 htmlファイルを読み込みしてブリーフィング画面に表示すると、更にリッチなドキュメントを表示できます。htmlLoad 関数で http経由で html ファイルを開けますが、制限事項が多いので試しませんでした。すぐに試したいときはここを見てください。



留意点

原則、Arma 3のインストールフォルダより上位の階層は参照できません。

UTF-8ファイルを読み込むとき、127文字以上の文字列を渡すとテキストファイルを正しく読み込まれません。

こんなやり方も

更新頻度が高いときは、extDB or Intercept Database + MariaDB もありです。最終的に私はこの方式を採用しました。これから構築するなら、APIがフレンドリーなIntercept Databaseがおすすめです。私は最終的にこの方式を採用しました。

楽しい Arma 3 スクリプティングを!