FF14マクロ入門

FF14にはユーザーマクロの機能があります。果たしてFF14のマクロはプログラムでしょうか。チューリング完全ではありませんがプログラム的なそういう感じだと思います。Dockerfileと同じぐらいにはプログラム的でカルネージハート未満ぐらいにはプログラム的な気はします。

# 基本仕様
* システムメニュー>マクロ管理からマクロエディタを開く事が出来ます
* 1つのマクロは最大で15行までの文を書く事が出来ます
* 作成したマクロは通常のスキルと同様にボタンとして配置し起動する事が出来ます
* /macroicon シャドウフレア、とマクロ内に記述する事でボタンのアイコン画像へ任意の別スキル用アイコン画像を参照させる事が出来ます。この設定をした場合通常のスキルアイコンと同様にアイコン上へCT(再使用可能になるまでの時間)の表示がされます
* 命令は/を行頭に記述します。これはマクロではなく通常のチャットウィンドでも同様です。(/randomとチャットウィンドに打ってみましょう)
* マクロ内のコメントは//で記述します
* 命令や対象指定子といったトークン間には半角スペースを用います
* 条件分岐やループや再帰といった機能はありません

# 用途
大別して戦闘用、生産用、コミュニケーション用、の三系統があります。

現行のバトルシステムにおいては戦闘にマクロが活用できる状況は限定的です。GCD(Global Cool Down)の影響を受ける通常スキルの間にアビリティ(GCDの影響を受けないインスタントスキル)を挟んでいくのが火力を向上させる基本ギミックの一つなのですが、これを実現するにはマクロの処理速度が著しく遅いためです。例外として、自キャラとは別のキャラ(ペット)も同時に操作する必要のある学者といった、操作量の多い職業においてはその補助としてのマクロが高い重要性を持っています。

翻って高いリアルタイム性能が求められないクラフター職(生産職)においては、複雑な状況判断を求められない単純なアイテム製作でマクロは広く活用されています。

またコミュニケーション用途としては、8人が協調して動作する事を求められる高難易度コンテンツにおける合意形成のため戦闘開始前にテンプレート文言を流したり、コンテンツ内の特定のタイミングにおける効果音を伴う注意喚起メッセージの表示、といった事に用いられています。

これらの状況は4.X以降など処理系のバージョンアップによって状況が変わる可能性がありますが、ここでは3.X以下を対象とします。

# 基本命令
## /macrolock
これを記載したマクロの実行中は排他ロックがかかり別マクロの起動が抑制されます。

## /macroerror
これを記載したマクロではエラーログの出力が抑制されます。(例えばacで実行しようとしたアクションがCT中で実行失敗した時のエラーログなど)

## /macrocancel
マクロに記述する事は出来ずチャット欄からの入力のみ可能な命令です。現在実行中のマクロを強制停止します。

## /ac actionName 
actionNameで指定したアクション(スキル等)を実行します

## /pac actionName
actionNameで指定したペット(妖精等)のアクションを実行します

## /generalaction actionName
actionNameで指定したジェネラルアクション(スプリント等)を実行します

## /marking markerName \<target\>
markerNameで指定した種類のマーカーをtargetに対して付与します。
### markerName
* circle
* triangle
* cross
* square
* stop1
* bind1
* atack1

## /echo string 
任意のstringをログへ出力します。このログはマクロを実行した本人にのみ表示されます

## /s string
任意のstringをsayモードで出力します

## /sh string
任意のstringをshoutモードで出力します

## /p string
任意のstringをPTモードで出力します

## /wait int
int秒数だけマクロの実行を中断します。小数点があっても特にエラーは出ませんが内部的には切り上げた整数秒として処理されるようです。

# target(対象指定子)

## \<t\>
対象指定の文脈で使用した場合は「現在target中のオブジェクトを対象」とします。単独で使用した場合は「現在target中のオブジェクトの名前」の文字列へ変換されます。また以下に示す対象指定子は全て単独で用いた場合には対象の名前を表す文字列へ変換されます。

## \<tt\>
対象指定の文脈で使用した場合は「現在target中のオブジェクトがtarget中のオブジェクトを対象」とします。AさんがBさんをtargetしている場合、AさんにttするとBさんを指し示す事になります。

## \<me\>
対象指定の文脈で使用した場合は「自分自身を対象」とします。単独で使用した場合は「自分自身の名前」の文字列へ変換されます

## \<1\>
PTリストの1番上のキャラを指し示します。2であれば上から2番目のキャラになります。なおパーティ>パーティメンバーのメニューからPTリストの並び順を任意のものへ変更する事が出来ます。

## \<mo\>
現在マウスオーバーしている対象を指し示します。攻撃用にtargetは敵へ固定したまま任意の対象へ回復を行いたい学者等での利用例が多い。

# その他
## \<se.1\>
ID1のサウンドエフェクトを発生させます。2の場合はID2の音が鳴ります。

# 例

## 複雑だが条件分岐は必要ない制作
```
/ac 堅実の心得 <wait.3>
/ac コンファートゾーン <wait.2>
/ac ステディハンド <wait.2>
/ac ピース・バイ・ピース <wait.3>
/ac ピース・バイ・ピース <wait.3>
/ac 堅実作業 <wait.3>
/ac 堅実作業 <wait.3>
/ac 堅実作業 <wait.3>
/ac 堅実作業 <wait.3>
/ac 堅実作業 <wait.3>
/ac 堅実作業 <wait.3>
/ac 堅実作業 <wait.3>
/ac コンファートゾーン <wait.2>
/ac 堅実作業 <wait.3>
/echo <<プリオム1終了>>
```
```
/ac 堅実作業 <wait.3>
/ac 堅実作業 <wait.3>
/ac 堅実作業 <wait.3>
/ac 堅実作業 <wait.3>
/ac 堅実作業 <wait.3>
/ac 堅実作業 <wait.3>
/ac 堅実作業 <wait.3>
/ac インナークワイエット <wait.2>
/ac 倹約II <wait.2>
/ac ステディハンドII <wait.2>
/ac ヘイスティタッチ <wait.3>
/ac ヘイスティタッチ <wait.3>
/ac ヘイスティタッチ <wait.3>
/ac ヘイスティタッチ <wait.3>
/echo <<プリオム2終了>>
```
```
/ac ヘイスティタッチ <wait.3>
/ac 模範作業II<wait.3>
/ac 模範作業II<wait.3>
/ac コンファートゾーン <wait.2>
/ac ステディハンドII <wait.2>
/ac ヘイスティタッチ <wait.3>
/ac マスターズメンドII <wait.3>
/ac ヘイスティタッチ <wait.3>
/ac ヘイスティタッチ <wait.3>
/ac ヘイスティタッチ <wait.3>
/ac ステディハンドII <wait.2>
/ac ヘイスティタッチ <wait.3>
/ac ヘイスティタッチ <wait.3>
/ac グレートストライド <wait.2>
/ac ビエルゴの祝福 
```
最大15行という仕様上の制限があるため、リアルタイム性があまり重要ではなく複雑な工程が必要な制作マクロにおいては複数マクロへ分割される事があります。なおアクション毎に必要となるwaitは異なります。

## 音を鳴らす
```
/micon バーサク
/ac バーサク <me>
/p バーサク開始 <se.4>
```
他のPTMへ発動中である旨を注意喚起したい場合等に使用。インビンホルムリビデといったヒーラーによる事後ケアが必要なスキルでの使用例が多い。

## PTリストの上から二番目を対象にアクション
```
/micon 光の癒し pet フェアリー・エオス
/pac 光の癒し <2>
/pac 光の癒し <2> <wait.1>
/pac 光の癒し <2> <wait.1> 
/pac 光の癒し <2> <wait.1>
/pac 光の癒し <2> <wait.1> 
/pac 光の癒し <2> <wait.1>
/pac 光の癒し <2> <wait.1> 
/pac 光の癒し <2> <wait.1>
/pac 光の癒し <2> <wait.1> 
/pac 光の癒し <2> <wait.1>
/pac 光の癒し <2> <wait.1> 
/pac 光の癒し <2> <wait.1>
/pac 光の癒し <2> <wait.1> 
/echo ---------------------------------------------------------------------------------------癒やし終了------------------------
```
通常はPTMのHP減少をトリガーに自動発動、又は手動連打で発動をする癒やしを連続実行する事でリジェネのようなHOTとして扱えるようになる。なお同様の番号による指定はtargetを敵へ固定したままMTを対象としたい影渡などにも利用される。

## 地面指定から対象指定への変更
```
/macroicon シャドウフレア
/macroerror
/ac シャドウフレア <t>
/ac シャドウフレア <t>
/ac シャドウフレア <t>
/ac シャドウフレア <t>
/ac シャドウフレア <t>
/ac シャドウフレア <t>
/ac シャドウフレア <t>
/ac シャドウフレア <t>
/ac シャドウフレア <t>
/ac シャドウフレア <t>
/ac シャドウフレア <t>
/ac シャドウフレア <t>
/ac シャドウフレア
```
スキル発動後に通常であれば地面の任意座標を指定する必要があるスキルを、現在targetしている対象の座標を起点に発動するものへ変更するマクロ。縮地・フレイミングアロー等でも可能。

# 参考文献
http://spoiler.sakura.ne.jp/srv/ff14/E6938DE4BD9C2FE3839EE382AFE383AD.html