10年ぶりのFF11

久しぶりのヴァナ・ディールは、 ソロで遊べるFF11オフラインでした。

合成原価計算&全サーバー価格比較シート

f:id:from20020516:20180301230804j:plain

  • 指定したアイテムの合成レシピ、競売価格、競売履歴を取得して原価を計算します。
  • 指定したアイテムの全サーバーの競売価格を取得し、比較します。サーバー間の価格裁定(貿易)にご利用ください。
  • Google Spreadsheet(gsheet)とAppScriptで作成。

docs.google.com

  • ブラウザ上で動作します。
  • ご自身のGoogle Driveに"ファイル" → "コピーを作成"して使ってください。(Googleアカウントが必要)

f:id:from20020516:20180301205021j:plain

使い方

  • 背景青のセルが入力可能。
  • 合成レシピシート:
    • A2が#N/Aなら、選択してデータシートへのアクセスを許可してください。
    • B1にアイテム名を入力すると、レシピやA1で選択したサーバーでの完成品価格、原価が表示されます。
    • H1で表示される価格の種類を変更できます。
      • LATEST:FFXIAHが取得済みの価格最新1件を参照します。誤落札に弱い。
      • AVERAGE:同20件の平均値を参照します。
      • MEDIAN:同20件の中央値を参照します。
  • 価格比較シート:
    • 列Aにアイテム名を入力すると、全サーバーでの価格を表示します。(単位:万)
    • 列BFALSEの時は単品、TRUEの時はスタックの履歴を参照します。
    • C1で選択したサーバーの価格よりB1%以上価格が高いサーバーは背景がに、安いサーバーは背景がに変化します。
    • 価格表示はサーバー負荷の都合上、全てMEDIANです。取引の少ないアイテムは実勢価格とのずれが生じやすく、必ず実際の履歴を確認してください。 (03/04:価格から直接確認できるように変更しました)
  • アイテムやレシピは自動で最新のものに更新されます。

利用条件・免責

  1. 閲覧・転載・利用は自由ですが、改変した場合も含め条件1を引き継ぐものとします。
  2. データの正確性はその性質上、保証しません。また利用によって発生したいかなる損害についても、当方はその責を負わないものとします。
  3. 不具合があればTwitterで報告していただけると助かります。

データ取得元

技術情報

  • WindowerResources群は、Excelやgsheetで今回のようなシートを作る時に役立ちます。(テキストファイル。このご時世使えるものは使っていきたい!)
  • items.lua内のflagsは16bit長のビットフラグ。各1bitで以下のように対応していて、今回は"競売不可"フラグがfalseのアイテムのみをインポートする処理を行っています。
bit flag
16 Rare
15 Ex
14 宅配不可
13 店売り不可
12 装備可
11 NPCトレード可
10 使用可
9 リンクシェル
8 魔法スクロール
7 競売不可
6 銘入れ可
5 同アカウント宅配可
4 モグガーデンで使用可
3 "ゴブ箱"抽選対象(#ANVは含まれません)
2 GM装備(今はGMが出現することもないし、ここ有効活用しません?)
1
  • :ノーヴィオピアス
    • flags=47172(10進数) → 1011100001000100(2進数)
    • 右端の最下位ビットから3,7,12,13,14,16bit目が1(true)なので…
    • "ゴブ箱"抽選対象,競売不可,装備可,店売り不可,宅配不可,Rare属性
  • AppScriptを使わずシート上で変換したい場合は…(B1, A列にflags)

    =DEC2BIN(INT(A1/2^8),8)&DEC2BIN(MOD(A1,2^8),8)

  • ARRAYFORMULA関数を使えばオートフィルなしにA列全体を変換できます。

    =ARRAYFORMULA(DEC2BIN(INT(A:A/2^8),8)&DEC2BIN(MOD(A:A,2^8),8))

  • 以下のように16セルに分割するとデータとして使いやすい。(C1)

    =ARRAYFORMULA(MID(B:B,{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},1)*1)

  • 装備ジョブ(jobs)も同様に24bit長で管理されています。もっと簡潔に書きたい…

    =JOIN("",ARRAYFORMULA(IF(MID(DEC2BIN(INT(MOD(A1,2^24)/2^16),8)&DEC2BIN(INT(MOD(A1,2^16)/2^8),8)&DEC2BIN(MOD(A1,2^8),8),{23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1},1)*1,{"戦","モ","白","黒","赤","シ","ナ","暗","獣","吟","狩","侍","忍","竜","召","青","コ","か","踊","学","風","剣"},"")))

  • :戦ナ暗
    • jobs=386(10進数) → 000000000000000110000010(2進数)
    • 0剣風...吟獣暗ナシ赤黒白モ0
    • 最上位ビットがまだ空いているように見えますが、残念ながら既にモンストロス・プレッジで使用しているようです。新ジョブの夢がーー!