論理と、幻想と。

ゲームやガジェットが好きなITスペシャリストが作ったものや考えたことについてダラダラ書きます

補助輪を用いたアクションリストのオーバーライド

補助輪とクライアント内に格納されているアクションリスト(いわゆる解析データ)を用いて、未知のアクションをざっくり識別する方法についてふんわり記載します。

参照

補助輪はanoyetta氏によって開発されているACT用プラグインの詰め合わせです。 github.com

SaintCoinachおよびGodbertはufx氏によって開発されているクライアントのアセット抽出用のコマンドラインツールおよびそのGUIラッパーです。 github.com

前提知識

補助輪がXIVAPIから取得したアクションリストを上書きするためのCSVファイルがあります。補助輪のインストールディレクトリ内の resources\Actions.csv です。CSVファイルの第1フィールドがアクションID、第2フィールドがアクション名を示します。

補助輪が受け取るログの中で Actions.csv に記載されているIDと一致するアクションが出現した場合、そのアクション名をCSVファイルに記載されているアクション名で上書きします。

上書きされたアクション名が有効なスコープは補助輪の内部です。スペスペ、UltraScouterのどちらにも有効です。ACTのログ上は上書き前のアクション、補助輪の出力するログでは上書き後のアクション名が記録されています。補助輪の扱うログ上のアクション名もオーバーライドされるということは、タイムラインのsync文やトリガーのマッチング対象文字列にも影響を与える可能性があります。

実際の運用

Godbert等を用いてアクションリストを開き、対象のアクションを見つけ出します。パッチ配信前のデータをエクスポートしておくと新しいパッチで追加された要素との差分を識別するのが容易になります。

例としてエデン覚醒編零式4層のボスが使用するアクション「ロックフラクチャー」を用います。

f:id:hackermind:20200117154448p:plain

アクションリストを見ると、4つの同名のアクションとしてクライアント内にデータが存在していることが分かります。KeyがアクションIDで、インデックス0にあたる文字列がアクション名です。これを以下のようなCSV形式にします。

16677,ロックフラクチャー
16678,ロックフラクチャー
16679,ロックフラクチャー
16680,ロックフラクチャー

このままでは分かりにくいので適当なsuffixを付けて一意に識別できるようにします。

16677,ロックフラクチャーA
16678,ロックフラクチャーB
16679,ロックフラクチャーC
16680,ロックフラクチャーD

このデータを補助輪のインストールディレクトリ内の resources\Actions.csv として保存します。これにより、同じ「ロックフラクチャー」というアクションでも補助輪の内部ではA,B,C,Dのどれかだと一意に識別することが可能になります。

実際に見たギミックとログを突き合わせて、ロックフラクチャーAが「フィールド北東(右上)を破壊する」アクションであると分かった場合、以下のように書き換えることができます。

16677,右上エリア破壊

UltraScouterのTarget → Actionを表示している場合、この変更をリアルタイムにオーバーレイ表示で視認することもできます。

f:id:hackermind:20200117154435p:plain

トリガーへの応用

アクションのIDとアクションの中身が分かればトリガー作成も容易になります。

当該のアクションがどのログ区分でACTのログに登場するかはやってみなければ分からないので、実際のログとアクションリストを突き合わせる必要があります。エデン覚醒編零式4層でのロックフラクチャーの場合は以下のようなログが見つかります。

14:4125:マキシタイタン starts using ロックフラクチャー on マキシタイタン.

10進数で表現されているKeyを基数変換して16進数にしたものが実際のコンテンツ内のログに出力されていることが分かります。(16677を16進数にすると4125です。) ちなみに補助輪(スペスペ)のアクションリストによるオーバーライドを行っていた場合、補助輪の出力するログには以下のように記載されます。

14:4125:マキシタイタン starts using ロックフラクチャーA on マキシタイタン.
14:4125:マキシタイタン starts using 右上エリア破壊 on マキシタイタン.

補足

解析データと呼ばれるものを見てみれば分かりますが、「このギミックはこういう風になっていてこうすればクリアできる」なんていう情報はどこにもありません。着目していないパラメータ類をきちんと読み込んでロジックを組み立てればあるいはそういうことができる可能性は否定できませんが、あくまでも文字列の羅列です。たまに解析で全てが分かっちゃうみたいなお花畑な勘違いをしている馬鹿がいるので一応書いておきます。クライアントとサーバの関係ぐらいは理解しておくともう少し豊かな人生が送れると思います。

蛇足

解析自体は明らかに真っ黒な行為なので当然に推奨も何もしていません。こんな記事を公開しておいて言うのもアレですが、やるなら自分の責任で自分が楽しむ範囲内に留めるべきです。