|#contents|

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

*LUAの使い方(ものすごい基本) [#vad452f7]
1) インベントリのControlタブからLUA Boxを選び、適当な所に設置します。
2) 接近してQキーを押すとエディタが開きますので、命令文を書き込みます。
3) 画面右側のApply changes (SAVE)(F8)を押して内容を反映させます。続いて画面右上のExit (don't save changes)をクリックするとエディタ画面から出ます。
#br
 LUAの動作そのものにAI Mainframeは必要ありません。AIと一緒に語られる事が多いのは、LUAがAI Mainframeの持っている情報を見ることが多いからです。


*データ相関図 [#da0cc722]
(旧Wikiより)
#br
こんな感じでデータをとるときには情報を取得する必要があります。
&ref(./d05b786f9fb87441.png);

*LUA関数リファレンス [#d05dfd9b]
 LUA Boxのエディタ画面の上端にある「Help」から、From The Depthsに用いる関数のリファレンスを参照できます。
#br
 OCRソフトでテキストに起こしてみた:[[LUA関数リファレンス:http://wikiwiki.jp/ftdjp/?LUA%B4%D8%BF%F4%A5%EA%A5%D5%A5%A1%A5%EC%A5%F3%A5%B9]]
#br
 LUAに強いエライ人が関数の解説を日本語化してくれたようです。
 [[LUA_ヘルプドキュメント]]
*LUAが動作しない場合 [#x020a258]
(旧Wikiより)
#br
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
#br
原因は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/:http://www.slua.net/download/]]

*スクリプトの入手先 [#x5329b2e]
・[[LUAお役立ちサンプルコード:http://wikiwiki.jp/ftdjp/?LUA%A4%AA%CC%F2%CE%A9%A4%C1%A5%B5%A5%F3%A5%D7%A5%EB%A5%B3%A1%BC%A5%C9]]
 旧Wikiから。
#br
・公式フォーラムの[[LUA Scripting:http://www.fromthedepthsgame.com/forum/forumdisplay.php?fid=129]]
 船舶・艦隊例
-[[Naval AI with terrain & friendly avoidance, evasive maneuvers :http://fromthedepthsgame.com/forum/showthread.php?tid=20953]]

 潜水艦例
-[[Submarine AI! Full Hydrofoil support! Terrain Detection :http://fromthedepthsgame.com/forum/showthread.php?tid=8882]]

 航空機例
-[[Advanced aerial, water start, and dogfighting AI :http://www.fromthedepthsgame.com/forum/showthread.php?tid=9108]]
-[[Cinematic aircraft AI. 1.7: dogfights galore :http://www.fromthedepthsgame.com/forum/showthread.php?tid=11873]]
-[[Hover AI: spinblock support + agility upgrade :http://fromthedepthsgame.com/forum/showthread.php?tid=15393]]

 戦車例
-[[Land/Tank AI :http://www.fromthedepthsgame.com/forum/showthread.php?tid=10724]]

 特殊例
-[[Multi-targeting Kamikaze AI :http://fromthedepthsgame.com/forum/showthread.php?tid=14037]]

 ミサイル例
-[[javelin style close in guidance for missiles.:http://www.fromthedepthsgame.com/forum/showthread.php?tid=10000]]
-[["Unified" missile script + Dual-/multi-profile missile script :http://www.fromthedepthsgame.com/forum/showthread.php?tid=21639]]
-[[LUA Swarm Missiles :http://fromthedepthsgame.com/forum/showthread.php?tid=26353]]

 砲撃例
-[[Ultimate Cannon Aiming Script  :http://fromthedepthsgame.com/forum/showthread.php?tid=26877]]

 AMCC例
-[[Advanced Cannon CIWS :http://www.fromthedepthsgame.com/forum/showthread.php?tid=11399]]
*使用例) LUA誘導ミサイル [#d349743d]
 今回は公式フォーラムで公開されているミサイル誘導スクリプトを使います。ちょっとめどい。

**下準備 [#re3b589a]
 [[フォーラムのスレッド:http://www.fromthedepthsgame.com/forum/showthread.php?tid=8960]]から[[スクリプトを配布しているサイト:https://github.com/Blothorn/FTD/tree/master/WeaponGuidance]]へ行きます。STPG.luaにスクリプトがあります。
 行番号のついている部分、500行ほどをまるごとOSのクリップボードにコピーしておきます。

**ミサイル側の準備 [#bd44954b]
&ref(./ftd_lua_001.jpg,50%);
#br
 とりあえず5ブロックミサイルなど作りました。
 Missile Launch PadにLUA Transceiverを取り付けます。
#br
&ref(./ftd_lua_002.jpg,50%);
#br
 ミサイルブロックの中にLUA Receiverを組み込みます。
 誘導効果を確かめるため、赤外線誘導やレーザー誘導に関係するパーツは組み込みません。後は適当です。


**LUA Boxの設置 [#yd258da8]
 LUA Boxを適当な場所に置きます。
#br
&ref(./ftd_lua_004.jpg,50%);
#br
 近づいてQキーを押すとエディタ画面に入ります。
#br
&ref(./ftd_lua_005.jpg,50%);
#br

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

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

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

#br
 下準備でクリップボードにコピーしておいたスクリプトを、空行の部分に貼り付けます。
(OSのショートカットを利用。Windowsならctrl + v)
#br
&ref(./ftd_lua_006.jpg,50%);
#br
 このスクリプトをそのまま使うと、ミサイルの燃料が切れる前に自爆します。十分に飛んでもらうには、スクリプトの最初の方にある

 -- 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',
 }
 
#br
 の部分の最後に
#br

 CullTime = 16,

#br
 を書き加えます。16の数字は調整して下さい。中距離~長距離ミサイルの場合はもっと大きい数字が必要になるでしょう。
#br
&ref(./ftd_lua_016.jpg,50%);
#br
#region(そのパラメータどこから持ってきた?)
 なんか途中で自爆するからスレッドを最新の順に見ていったらオリジナルにないステータス書いてる人がいて試したら自爆しなくなった
#endregion
#br
 最後に、ペースト&修正した内容を保存してエディタを閉じます。画面右にある「Apply changes (SAVE)(F8)」をクリックして内容を反映させてから、画面右上にある「Exit (don't save changes)」をクリックしてエディタを閉じます。

**AI Mainframeの準備 [#y2a952d1]
 このスクリプトはAI Mainframeを必要とします。
#br
&ref(./ftd_lua_007.jpg,50%);
#br
 適当な場所にAI Mainframeを置きます。AI MainframeとLUA Boxを接続する必要はありません。手動でミサイルを発射するだけならワイヤレスシステムも必要ありません(別途AIにミサイルを撃たせたい時などは必要になります)。
#br
#region(AI Mainframの要不要を判断する基準は?)
 スクリプトの中を検索してmainframeとか書いてあったらだいたい必要です。
#endregion

**試射 [#c29ff2c0]
 適当なビークルを敵として呼び出し、誘導性能をチェックします。
#br
&ref(./ftd_lua_015.jpg,50%);
#br
 明後日の方向に向けて撃っても、途中で曲がって敵に当たります。LUAミサイル一丁あがり。


*コメント [#c0de6b8b]
#pcomment(./コメント,reply)