2015年05月31日

ACT SpecialSpellTimerでPTメンバの代名詞の順序を正しくする方法

この記事の不具合修正は、SpecialSpellTimerの1.7.0.6にて取り込まれました。

SpecialSpellTimer(記事投稿時の最新版1.7.0.0)、通称すぺすぺは私としても非常に重宝しているのですが、唯一の不満はPTリストの代名詞の順序が正しくない場合があることでした。プラグインのオプションタブにも「2〜8の順序は正しくない場合があります」と書いてあるように、作者も認識している問題のようです。直接的な影響として「ACT SpecialSpellTimerで女神や気合のリキャストを表示する方法」のようにパーティーメンバーの状態を監視しても、ときどき正しくないメンバーにスキル表示が付いてしまい、少々混乱を来すといったところです。

これを正しい順序にする方法です。

「もの」と「テクノロジー」の新情報サイト【ものテク】オープン!


最初に2つだけお断りしておきます。

【注意1】ビルド環境
すぺすぺのDLLを作り直す必要がありますので、ビルド環境が必要です。すべて無料で揃えられます。ただし、お使いのPC環境(OSやCPU等)の影響でビルドエラーが生じた際に対処する知識が必要です。

【注意2】検証の十分性
FF14本体のPTメンバの整列仕様が未公開であるため、試行を繰り返しながら仕様を推定しています。ただし、私一人ですべてを検証できたとは思っていません。万一、意図しない挙動を見つけた場合はコメント欄を通じてご指摘いただけると幸いです。

さて、では、本題に移ります。

【原因】正しくない場合とは
そもそも、「正しくない場合」とは、どんな場合かというと、ずばり、パーティー内に同じJOBの人が複数いる場合です。すぺすぺのPTメンバーの整列動作は、以下のコードで実装されています。

[LogBuffer.cs]
// FF14内部のPTメンバ自動ソート順で並び替える
var sorted =
from x in ptmemberCombatant
join y in Job.GetJobList() on
x.Job equals y.JobId
where
x.ID != player.ID
orderby
y.Role,
x.Job,
x.ID
select
x.Name.Trim();

これによると、以下の手順で整列が行われていることが分かります。
・自分以外でソート
・第一優先でロール別にソート(タンク>ヒーラー>近接DPS>遠隔DPS>その他)
・第二優先でJOB別にソート(例:モンク>竜騎士>忍者)
・最後にキャラID順にソート

JOB被りさえしなければPTメンバの代名詞は正しい順序となっていますので、意図しない挙動をしているのは「キャラID順にソート」という部分になります。

【修正】分かってしまえば実に簡単
結論に言ってしまうと、すぺすぺではキャラIDのソートは「昇順」で行われていますが、FF14本体の仕様は「降順」のようです。修正箇所は1ヶ所だけです。
(訂正前) x.ID
(訂正後) x.ID descending

あとはこれで再ビルドをすれば、修正版ACT.SpecialSpellTimer.dllが出来上がりますので、既存のDLLと差し替えて完了です。

【検証】これが一番の難問
キャラIDは普段見ることができませんし、FF14本体の仕様も想像に過ぎませんから、とにかく回数をこなして正しさを確認するしかありません。検証条件は「パーティー内に同じJOBの人が複数いる」ことです。この条件において、例えば、「ACT SpecialSpellTimerでリジェネの残り効果時間を表示する方法」を使って、リジェネをかけた相手のPTリスト上にスキル表示がされれば期待動作となります。私が試したところでは、今のところ問題は解決したように思えます。

もし、意図しない整列順となった場合は、修正方法を見直しますので、できるだけ詳しい状況(とくに以下の情報)を教えていただけると助かります。
・JOB
・パーティーメンバーの名前(イニシャルで構いません)
・FF14本体のPTリストの表示順
・すぺすぺの代名詞の順

上記の方法の有効性が確認できたら、作者に修正をお願いしようと思いますので、なにとぞご協力をお願いします。


ラベル:FF14 ACT
posted by わんこ at 04:00| Comment(0) | 小ネタ | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。