mogmasterを使ってみるクポ!

f:id:yyoshisaur:20200203125012j:plain
今回はmogmasterを使ってみた際のメモです。
mogmasterは、各収納とマイバッグ間のアイテムの移動を自動化するWindowerアドオンです。
2アカウント目のキャラクターがワードローブが一杯になりつつあり、1アカウント目のキャラクターはすでに一杯でジョブ専用の装備は使用する時にモグ金庫やモグロッカーからマイバッグに移しています。
複数のキャラクターで手動でのアイテム移動が必要になると大変なので、mogmasterを導入してみました。
(同様の機能を持つorganizerというアドオンもありますが、アイテム名を日本語で扱えたり、日本語の説明が充実していたmogmasterを選択しました。)


mogmasterの一次配布元がどこなのかわかりませんでしたが、https://w.atwiki.jp/ff11windower2/アップローダーにあるv.1.14.2を使用しました。
(日本語フォーラムにmogmaster作成者の方の投稿もあるので、アップローダーで公開していたのかしら。)
アップローダーにあるmogmasterは2015/05/23のものが最終のバージョンのようで、以後にバージョンアップされたものを見つけることができませんでした。

mogmasterの使い方は"説明.txt"に詳しく書かれているので、ここでは省略します。
使用してみて、自身の使用用途に合うように少しごにょごにょしたので備忘録として書いてみます。
(日本語フォーラムの過去ログを参考しています
【広めよう】Windower 11【本家窓化】 - 1495379880 - したらば掲示板
Windower 4.xx その5 - 1448380687 - したらば掲示板)

Nomad Moogleでのアイテムの移動

mogmasterではモグ金庫やモグロッカーへのアクセスはモグハウス内のみになっていますが、マウラやノーグなどにいるNomad Moogleでもモグ金庫などからアイテムの移動を行いたいです。

mogmasterではアイテムの移動にwindowerAPIのwindower.ffxi.get_item/put_itemが使われています。このAPINomad Moogleのいるエリアであれば、モグ金庫, モグロッカーにアクセスでき、アイテムを移動できるようです。(Nomad Moogleとの距離の制限もないようです。)
アイテムの移動時、現在の利用可能な収納を決定している処理をみると"モグハウス"と"それ以外"の条件しかありません。そこにNomad Moogleの条件を加えるとうまくいきそうです。
今回はジョブチェンジと合せて使用することを踏まえ、Nomad Moogleとの距離が6Ym以内であれば、利用可能という条件にしました。

-- mogmaster/libs/set_item.lua

-- 6Ym以内にNomad Moogleがいるか判定する
local function check_nomad_moogle()
    for _, mob in pairs(windower.ffxi.get_mob_array()) do
        if mob.name == 'Nomad Moogle' and math.sqrt(mob.distance) < 6 then
            return true
        end
    end

    return false
end

-- 以下はfunction set_item.exec(set_name)の中

    -- 利用する収納を判定
    local mog_list
    if windower.ffxi.get_info().mog_house then
        util.log.info('mog_house=true 全ての収納を使用します')
        mog_list = {'safe', 'safe2', 'storage', 'locker', 'satchel', 'sack', 'case'}
    elseif check_nomad_moogle() then    -- Nomad Moogleの条件を追加
        util.log.info('Nomad Moogle:モグ金庫・モグ金庫2・モグロッカー・サッチェル・サック・ケースを使用するクポ!')
        mog_list = {'safe', 'safe2', 'locker','satchel', 'sack', 'case'}
    else
        util.log.info('mog_house=false サッチェル・サック・ケースのみ使用します')
        mog_list = {'satchel', 'sack', 'case'}
    end

ワードローブ2, 3, 4のアイテムのエクスポート

ワードローブのアイテムはマイバッグに移動しなくても装備可能なので、エクスポートする必要はないと思いますが、ワードローブ1はエクスポートされるようになっているので、その他のワードローブもエクスポートの対象になるように修正しました。

-- mogmaster/libs/export_item.lua

-- wardrobe2~4を追加
local mog_categories = {
    'safe', 'safe2', 'storage', 'locker', 'satchel', 'sack', 'case', 'wardrobe', 'wardrobe2', 'wardrobe3', 'wardrobe4',
}
-- mogmaster/libs/util/const.lua

-- wardrobe2~4を追加
util.const = T{
    bags = {
        -- 省略
        safe2 = {
            id = 9,
            ja = 'モグ金庫2',
        },
        -- 追加
        wardrobe2 = {
            id = 10,
            ja = 'モグワードローブ2',
        },
        wardrobe3 = {
            id = 11,
            ja = 'モグワードローブ3',
        },
        wardrobe4 = {
            id = 12,
            ja = 'モグワードローブ4',
        },
    }
}


私の場合、アイテムの移動はジョブチェンジとセットで行なうので、gearswapのユーザースクリプトのget_sets()で"/setitems"コマンドを実行して運用しています。
アビセアの弱点用装備などのmogmasterで管理するほど使用頻度は高くないが、まとめて取り出したい装備はitemizerを使って移動させています。

感想

初期設定など導入には少し手間がかかりますが、アイテム移動を自動化できたことでジョブチェンジがとても快適になりました。以前にorganizerを試しに使ってみたことがあったのですが、モグ金庫などモグハウス内でしか使えなかったので導入を見送っていました。mogmasterでは少し修正することでNomad Moogleに対応でき、モグハウス以外でジョブチェンジすることが多い人にはとても便利なアドオンだと思います。手動でのアイテム移動のストレスが無くなるので、もっと早くに使っておけばよかったです。

おまけ

windower.ffxi.get_bag_info

今回、いくつか収納系のAPIを調べてみました。
mogmasterでは使用されていませんが、windower.ffxi.get_bag_infoで利用可能な収納を取得するとNomad Moogle付近ではモグ金庫、ロッカーはenabled=trueを期待しますが、モグハウス以外ではenabled=falseとなるようです。
res/bags.luaをみても、accessのプロパティには"Mog House"と"Everywhere"の2種類しかないため、Nomad Moogleは考慮されていないと思われます。
itemizerがNomad Moogleで使用できないのは、windower.ffxi.get_bag_infoを使用して利用可能な収納を判定しているからのようです。

lua invoke

Addon Commands :: Windower Documentation
mogmasterのコードを少し読んでみると、アイテムの移動や初期化で"lua i アドオン名 関数"というコマンドが使われています。
i(invoke)オプションはアドオンの関数をコマンドから直接実行できるようです。