定型文辞書に【興味があります。】[FF11]

はじめに

震天動地の章で連携を発生させる際にしばしばPTチャットでそのタイミング報せます。

(hoge) 分解連携 → piyo <scall21>

で囲まれた文字は定型文辞書(Auto-translate function)で、使用しているクライアントの言語に変換されます。
ゲーム内ではチャットライン上でTABキーで定型文辞書の候補が表示され、選択することによって定型文が入力されますが、
Windowerのexecコマンドを使ってスクリプトファイルに記述した操作を実行するとき、PTチャットに定型文でログを出力するにはどうしたら良いのだろうかと考えていました。
(震天動地の連携作成では標準のマクロを使用すれば良いのですが、連携作成後のマジックバーストまで1回の操作で行おうとするとマクロの行数が足りませんでした。)

今回はゲーム外(Windower)から定型文を扱う方法についてまとめてみます。

きまりごと

FF11では文字コードにShift-JISが使われています。
定型文辞書はFF11独自の機能でShift-JISで文字として使用されていない文字コード0xFDを使って処理されています。
定型文辞書のフォーマットは以下のようになります。(各バイトはてきとうに名前をつけました)

0xFD type(1byte) lang(1byte) id(2byte) 0xFD

typeは、あとに続くidが"定型文"なのか、"アイテム"なのか、"だいじなもの"なのかを設定するフラグのようです。
0x00の文字コードが入力された場合、クラッシュする可能性があるようですが、
"アイテム"、"だいじなもの"のidは0x00を含む場合があるため、上位または下位バイトを0x00でマスクできるフラグがtypeのビットにアサインされているようです。
(idに0x00を含む場合はtypeでマスクを指定し、idには0x00を0xFFと指定しているみたいです)
typeの4ビット目を1とした場合には、idは"だいじなもの"として扱われるようです。(最下位ビットを0ビット目としています)

type id
0x02 定型文
0x07 アイテム
0x09 アイテム(idの上位バイトが0x00の場合)
0x0A アイテム(idの下位バイトが0x00の場合)
0x13 だいじなもの
0x15 だいじなもの(idの上位バイトが0x00の場合)
0x16 だいじなもの(idの下位バイトが0x00の場合)

langは、入力したクライアントの使用言語を設定するフラグで日本語なら0x01、英語なら0x02?となるようです。
idには"定型文"や"アイテム", "だいじなもの"のidを指定します。定型文のidは、res/auto_translates.luaで確認できます。
"定型文"では、下位バイトが0x00のものは定型文のカテゴリーとなり使用することはできないようです。
"アイテム"や"だいじなもの"はそれぞれres/items.lua, key_items.luaにあるidが使用されます。

  • 参考文献

Outputting an Autotranslate Message - Addon Development - Windower

つかってみよう

では、実際に定型文が出力できるのか冒頭に挙げた連携作成の例で試してみたいと思います。
どこに実装するのが良いかわかりませんが、今回は私がある程度自由に処理が記述できるGearSwapのユーザースクリプト内に実装します。
self commandでPTチャットにログを出力するようにします。

震天動地 1回目
//gs c sc start 分解
(hoge) 1:分解連携準備オッケー! -> piyo

震天動地 2回目
//gs c sc end 分解
(hoge) 2:分解MB:全力で攻撃だ!-> piyo


f:id:yyoshisaur:20190207180129p:plain
このほかにも計略〆や溶解→核熱の2連携などバリエーションを増やすこともできますね。