LUA

Last-modified: 2018-04-15 (日) 17:18:43

LUAについて

 LUAはプログラム言語のひとつです。(Wikipedia「Lua」
 つまりLUAスクリプトを作るという事は、From The Depthsの中でプログラムを組むという事になります。LUAスクリプトを作りたいのであればFrom The Depthsを関連語句から外し、LUAについて調べた方がいいでしょう。

LUAの使い方(ものすごい基本)

1) インベントリのControlタブからLUA Boxを選び、適当な所に設置します。
2) 接近してQキーを押すとエディタが開きますので、命令文を書き込みます。
3) 画面右側のApply changes (SAVE)(F8)を押して内容を反映させます。続いて画面右上のExit (don't save changes)をクリックするとエディタ画面から出ます。

 

 LUAの動作そのものにAI Mainframeは必要ありません。AIと一緒に語られる事が多いのは、LUAがAI Mainframeの持っている情報を見ることが多いからです。

データ相関図

(旧Wikiより)

 

こんな感じでデータをとるときには情報を取得する必要があります。
d05b786f9fb87441.png

LUA関数リファレンス

 LUA Boxのエディタ画面の上端にある「Help」から、From The Depthsに用いる関数のリファレンスを参照できます。

 

 OCRソフトでテキストに起こしてみた:LUA関数リファレンス

 

 LUAに強いエライ人が関数の解説を日本語化してくれたようです。
 LUA_ヘルプドキュメント

LUAが動作しない場合

(旧Wikiより)

 

64bitのOSを使用している場合、LUABOXのGUIを開いた時に以下のエラーログが表示されることがあります
D://SteamLibrary/steamapps/common/From The Depths/From_The_Depths_Data/Plugins/slua.dll
 at (wrapper managed-to-native) LuaInterface.LuaDLL:luaL_newstate ()
at SLua.LuaState..ctor () [0x00000] in <filename unknown>:0
at SLua.LuaSvr..ctor () [0x00000] in <filename unknown>:0
at LuaBox.InitialiseLua () [0x00000] in <filename unknown>:0

 

原因はFtDのデータ内にあるslua.dllが32bitOS用であるためと考えられます。
\steamapps\common\From The Depths\From_The_Depths_Data\Pluginsの中にあるslua.dllを64bit用の物に入れ替える事で改善されます。
64bit用のslua.dllは以下のサイトからダウンロードできます。
http://www.slua.net/download/

スクリプトの入手先

LUAお役立ちサンプルコード
 旧Wikiから。

 

・公式フォーラムのLUA Scripting
 船舶・艦隊例

 潜水艦例

 航空機例

 戦車例

 特殊例

 ミサイル例

 砲撃例

 AMCC例

使用例) LUA誘導ミサイル

 今回は公式フォーラムで公開されているミサイル誘導スクリプトを使います。ちょっとめどい。

下準備

 フォーラムのスレッドからスクリプトを配布しているサイトへ行きます。STPG.luaにスクリプトがあります。
 行番号のついている部分、500行ほどをまるごとOSのクリップボードにコピーしておきます。

ミサイル側の準備

ftd_lua_001.jpg

 

 とりあえず5ブロックミサイルなど作りました。
 Missile Launch PadにLUA Transceiverを取り付けます。

 

ftd_lua_002.jpg

 

 ミサイルブロックの中にLUA Receiverを組み込みます。
 誘導効果を確かめるため、赤外線誘導やレーザー誘導に関係するパーツは組み込みません。後は適当です。

LUA Boxの設置

 LUA Boxを適当な場所に置きます。

 

ftd_lua_004.jpg

 

 近づいてQキーを押すとエディタ画面に入ります。

 

ftd_lua_005.jpg

 
Function Update(I)
-- put your code here
end
 

 となっている所にEnterで空行を適当に挿入します。
(挿入場所を分かりやすくするため。やらなくてもいい)

 
Function Update(I)
-- put your code here
end
 

 下準備でクリップボードにコピーしておいたスクリプトを、空行の部分に貼り付けます。
(OSのショートカットを利用。Windowsならctrl + v)

 

ftd_lua_006.jpg

 

 このスクリプトをそのまま使うと、ミサイルの燃料が切れる前に自爆します。十分に飛んでもらうには、スクリプトの最初の方にある

-- Sample configuration
WeaponSystems[1] = {
  Type = 2,
  MainframeIndex = 0,
  MaximumAltitude = 99999,
  MinimumAltitude = -3,
  MinimumSpeed = 0,
  MaximumSpeed = 350,
  MinimumRange = 100,
  FiringAngle = 60,
  Speed = 250,
  LaunchDelay = 0.3,
  MinimumConvergenceSpeed = 150,
  Endurance = 3.33,
  MinimumCruiseAltitude = 5,
  MaximumCruiseAltitude = 9999,
  DetonateOnCull = true,
  MaximumTargets = 2,
  TurnSpeed = 100,
  Direction = 'Forward',
}
 

 の部分の最後に

 
CullTime = 16,
 

 を書き加えます。16の数字は調整して下さい。中距離~長距離ミサイルの場合はもっと大きい数字が必要になるでしょう。

 

ftd_lua_016.jpg

 
そのパラメータどこから持ってきた?

 なんか途中で自爆するからスレッドを最新の順に見ていったらオリジナルにないステータス書いてる人がいて試したら自爆しなくなった

 

 最後に、ペースト&修正した内容を保存してエディタを閉じます。画面右にある「Apply changes (SAVE)(F8)」をクリックして内容を反映させてから、画面右上にある「Exit (don't save changes)」をクリックしてエディタを閉じます。

AI Mainframeの準備

 このスクリプトはAI Mainframeを必要とします。

 

ftd_lua_007.jpg

 

 適当な場所にAI Mainframeを置きます。AI MainframeとLUA Boxを接続する必要はありません。手動でミサイルを発射するだけならワイヤレスシステムも必要ありません(別途AIにミサイルを撃たせたい時などは必要になります)。

 
AI Mainframの要不要を判断する基準は?

 スクリプトの中を検索してmainframeとか書いてあったらだいたい必要です。

試射

 適当なビークルを敵として呼び出し、誘導性能をチェックします。

 

ftd_lua_015.jpg

 

 明後日の方向に向けて撃っても、途中で曲がって敵に当たります。LUAミサイル一丁あがり。

コメント

  • LUAのコマンド一覧表のような物ってどこにありましたっけ? -- 2016-07-02 (土) 23:02:59
    • luaはややこしいんですよ‥。FtD固有の関数は、Lua boxのエディタ開いて画面の上端のhelpから参照できます。luaそのものについては、lua入門とかリファレンスとかで検索してもらうのがいいかと。 -- sakusya? 2016-07-03 (日) 00:31:24
  • LUAって1つのミサイルに複数セットってできないですか? 例えば、ID100のミサイル迎撃ミサイルが10本あったとして、そのID100のミサイル迎撃ミサイル全部に複数ロックオンのLUAと、ミサイル、魚雷迎撃打ち分けLUAとか・・・・  いろいろ試したけどできないので・・・・ やっぱりできないんですかね? -- ベルダンディー? 2018-04-06 (金) 03:17:35
    • ID100はミサイルコントローラのIDでしょうか?複数ロックオンしつつ撃ち分けするLUAコードがあれば行けると思います -- ? 2018-04-15 (日) 17:18:42