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より)
こんな感じでデータをとるときには情報を取得する必要があります。
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
船舶・艦隊例
潜水艦例
航空機例
- Advanced aerial, water start, and dogfighting AI
- Cinematic aircraft AI. 1.7: dogfights galore
- Hover AI: spinblock support + agility upgrade
戦車例
特殊例
ミサイル例
- javelin style close in guidance for missiles.
- "Unified" missile script + Dual-/multi-profile missile script
- LUA Swarm Missiles
砲撃例
AMCC例
使用例) LUA誘導ミサイル
今回は公式フォーラムで公開されているミサイル誘導スクリプトを使います。ちょっとめどい。
下準備
フォーラムのスレッドからスクリプトを配布しているサイトへ行きます。STPG.luaにスクリプトがあります。
行番号のついている部分、500行ほどをまるごとOSのクリップボードにコピーしておきます。
ミサイル側の準備
とりあえず5ブロックミサイルなど作りました。
Missile Launch PadにLUA Transceiverを取り付けます。
ミサイルブロックの中にLUA Receiverを組み込みます。
誘導効果を確かめるため、赤外線誘導やレーザー誘導に関係するパーツは組み込みません。後は適当です。
LUA Boxの設置
LUA Boxを適当な場所に置きます。
近づいてQキーを押すとエディタ画面に入ります。
Function Update(I) -- put your code here end
となっている所にEnterで空行を適当に挿入します。
(挿入場所を分かりやすくするため。やらなくてもいい)
Function Update(I) -- put your code here
end
下準備でクリップボードにコピーしておいたスクリプトを、空行の部分に貼り付けます。
(OSのショートカットを利用。Windowsならctrl + v)
このスクリプトをそのまま使うと、ミサイルの燃料が切れる前に自爆します。十分に飛んでもらうには、スクリプトの最初の方にある
-- 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の数字は調整して下さい。中距離~長距離ミサイルの場合はもっと大きい数字が必要になるでしょう。
なんか途中で自爆するからスレッドを最新の順に見ていったらオリジナルにないステータス書いてる人がいて試したら自爆しなくなった
最後に、ペースト&修正した内容を保存してエディタを閉じます。画面右にある「Apply changes (SAVE)(F8)」をクリックして内容を反映させてから、画面右上にある「Exit (don't save changes)」をクリックしてエディタを閉じます。
AI Mainframeの準備
このスクリプトはAI Mainframeを必要とします。
適当な場所にAI Mainframeを置きます。AI MainframeとLUA Boxを接続する必要はありません。手動でミサイルを発射するだけならワイヤレスシステムも必要ありません(別途AIにミサイルを撃たせたい時などは必要になります)。
スクリプトの中を検索してmainframeとか書いてあったらだいたい必要です。
試射
適当なビークルを敵として呼び出し、誘導性能をチェックします。
明後日の方向に向けて撃っても、途中で曲がって敵に当たります。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