はじめに
震天動地の章で連携を発生させる際にしばしば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
このほかにも計略〆や溶解→核熱の2連携などバリエーションを増やすこともできますね。