GearSwapの使い方

GearSwapは、プレイヤーが起こすアクションに応じた着替えを自動で行うWindowerのアドオンです。

普通のFF11では次のコマンドで着替えを行いますが、制限があるため最適な着替えを行うことが難しいのが現状です。

コマンドメリットデメリット
/equipラグなく着替えられるマクロ行数に制限があるため、全ての部位を最適に着替えられない
/equipset全ての部位を最適に着替えられる反映までに1秒程度のラグがある

GearSwapを使えばこのデメリットがなくなります。

ただし、プログラムコードを記述する必要があるため、全ての人に最適解となる訳ではありません。最強の着替えをしたければ、ある程度プログラムの読み書きができなければ使えません。

プログラムなんてできないよって人は、私が公開しているコードを参考にしてください。最終的には自分でロジックを書き換えられるようになりましょう!わからないことがあれば気軽にコメントしてください。出来る範囲でお答えします。

目次

GearSwapのインストール

WindowerでGearSwapを有効にします。

有効にするとWindower\addons\GearSwap\が設置されます。

日本語バージョンのインストール

GearSwapには着替えを便利にするMote-libsというライブラリが用意されています。

このライブラリを使えばsets.midcast["ケアル"]のような記述ができるようになるのですが、GearSwapは日本語に対応していないため、よしざうるすさんが本家を日本語化してくれたバージョンを使います。

ダウンロードした圧縮ファイルを展開し、Windower\addons\GearSwap\libsへ上書きすると日本語でMote-libsが使えるようになります。

念のためファイル比較ツールなどでファイルの差分を確認しておいてください。確認が面倒くさい人は、下記の差分ファイルだけを上書きしてください。

GearSwapの仕組み

GearSwapは次のように装備を定義して使います。この定義は/equipsetのようなものだと考えてください。

魔法やアクションなど用途別の装備を定義をしておけば、GearSwapがアクションに応じてこの内容に合致する装備を自動で選択してくれるようになっています。

    sets.midcast['強化魔法'] = {
        main="ムサ",
        head={ name="テルキネキャップ", augments={'"Cure" potency +5%','Enh. Mag. eff. dur. +10',}},
        body={ name="PDガウン+3", augments={'Enhances "Enlightenment" effect',}},
        hands={ name="テルキネグローブ", augments={'"Cure" potency +7%','Enh. Mag. eff. dur. +10',}},
        legs={ name="テルキネブラコーニ", augments={'"Cure" potency +8%','Enh. Mag. eff. dur. +10',}},
        feet={ name="テルキネピガッシュ", augments={'"Cure" potency +8%','Enh. Mag. eff. dur. +10',}},
        neck="インカンタートルク",
        waist="エンブラサッシュ",
        left_ear="アンドアーピアス",
        right_ear="ミミルピアス",
        left_ring="メランリング",
        right_ring={ name="ゼラチナスリング+1", augments={'Path: A',}},
        back={ name="月明の羽衣",priority=16},
    }

魔法を詠唱する場合

GearSwapでは、次の順番でイベントファンクションが起動しています。

  • precast:処理前のイベントファンクション
  • midcast:処理中のイベントファンクション

precastは処理前のイベントで起動するファンクションですから、詠唱前に該当するFC装備定義があれば、それに着替えて魔法の詠唱を開始してくれます。その後、midcastで該当する着弾装備定義があれば、魔法詠唱の処理を完了させます。

よって、アクション前に着替えたい装備がある場合はprecastで定義し、アクション後に着替えたい場合はmidcastで定義すればいいのです。

命名ルール

GearSwapでアクションに応じた装備に自動で着替えるためには、GearSwapで定められている命名規則に従った名前で装備を定義しなければいけません。

命名規則
  • sets.precast
    • sets.precast.FC
    • sets.precast.JA
    • sets.precast.WS
    • sets.precast.RA
  • sets.midcast
    • sets.midcast.RA
    • sets.midcast.Pet
  • sets.idle
  • sets.resting
  • sets.engaged
  • sets.defense
  • sets.buff

命名規則には親子関係(ツリー構造)があり、子供の定義がなければ親の定義が採用されます。

たとえば、アビリティ関係の着替えを行いたい場合は、JAの下に個別の定義をします。

    sets.precast.JA['連環計'] = {
        legs="PDパンツ+4"
    }

命名の優先度

実は、装備定義のにはいくつか書き方があり、書き方によって優先度が決められています。より具体的な定義になるほど優先度が高くなると考えてください。

ケアルの場合だとこうなります。

優先度対応する属性
1spell.namesets.midcast[‘ケアル’]
2spellMapsets.midcast.Cure
3spell.skillsets.midcast[‘回復魔法’]
4spell.typesets.midcast.Whitemagic

spellMapで全体をカバーして、個別魔法だけ特別に定義し直すのが基本的な使い方になると思います。

ケアル装備を定義するだけでも、いくつか書き方があるわけですが、これらの定義が混在している場合、優先度の高いものが採用されます。

何をどの定義で実装するかを考える必要があります。

spell.name

spell.nameで定義する場合のルールはこうです。

ケアルはWindower\res\spells.luaで次のように定義されていますので、このjaに該当する部分を使います。

[1] = {id=1,en="Cure",ja="ケアル",cast_time=2,element=6,icon_id=86,icon_id_nq=6,levels={[3]=1,[5]=3,[7]=5,[20]=5},mp_cost=8,prefix="/magic",range=12,recast=5,recast_id=1,requirements=1,skill=33,targets=63,type="WhiteMagic"},

spellMap

spellMapで定義する場合のルールはこうです。

ケアル関連はWindower\addons\GearSwap\libs\Mote-Mappings.luaで次のように定義されていますので、ケアルの場合はCureを使います。

    ['ケアル']='Cure',['ケアルII']='Cure',['ケアルIII']='Cure',['ケアルIV']='Cure',['ケアルV']='Cure',['ケアルVI']='Cure',
    ['フルケア']='Cure',
    ['ケアルラ']='Curaga',['ケアルラII']='Curaga',['ケアルラIII']='Curaga',
    ['ケアルガ']='Curaga',['ケアルガII']='Curaga',['ケアルガIII']='Curaga',['ケアルガIV']='Curaga',['ケアルガV']='Curaga',

Cureにはケアル1~6とフルケアが含まれていますので、sets.midcast.Cureで定義すると全てのケアルをカバーできる装備セットとなるわけです。

ケアルガの場合はsets.midcast.Curagaで装備セットを定義してくださいね。

spell.skill

skillの定義名はWindower\res\skills.luaにあります。

skill名称
Divine Magic神聖魔法sets.midcast[‘神聖魔法’]
Healing Magic回復魔法sets.midcast[‘回復魔法’]
Enhancing Magic強化魔法sets.midcast[‘強化魔法’]
Enfeebling Magic弱体魔法sets.midcast[‘弱体魔法’]
Elemental Magic精霊魔法sets.midcast[‘精霊魔法’]
Dark Magic暗黒魔法sets.midcast[‘暗黒魔法’]
Summoning Magic召喚魔法sets.midcast[‘召喚魔法’]
Ninjutsu忍術sets.midcast[‘忍術]
Singing歌唱sets.midcast[‘歌唱’]
Blue Magic青魔法sets.midcast[‘青魔法’]
Geomancy風水魔法sets.midcast[‘風水魔法’]

spell.type

typeの定義名はWindower\res\spells.luaにあります。

type名称
WhiteMagic白魔法sets.midcast.WhiteMagic
BlackMagic黒魔法sets.midcast.BlackMagic
BlueMagic青魔法sets.midcast.BlueMagic
SummonerPact召喚魔法sets.midcast.SummonerPact
Geomancy風水魔法sets.midcast.Geomancy
Ninjutsu忍術sets.midcast.Ninjutsu
BardSong歌唱sets.midcast.BardSong
Trustフェイスsets.midcast.Trust

GearSwapのカスタマイズ

GearSwapは次の順番で動いており、対応するファンクションが実装されていれば該当するファンクションが動く仕組みになっています。

  1. precast
    1. user_precast
    2. job_precast
    3. default_precast
    4. user_post_precast
    5. job_post_precast
    6. cleanup_precast
  2. midcast
    • user_midcast
    • job_midcast
    • default_midcast
    • user_post_midcast
    • job_post_midcast
    • cleanup_midcast

まず基準となるのが、default_precastです。ここではsets.precast.***の装備セットをメモリ上に展開します。

default_***処理より前に何かの実装をしたければ、user_もしくはjob_を実装します。default_より後に何かの処理を実装したければuser_post_もしくはjob_post_で実装します。

たとえば次の定義がある場合で、天候や陣に応じて八輪の帯に着替えたい場合は、default_より後の処理で着替えロジックを作ればいいのです。default_より前に動くロジックで作ってしまうと、default_の着替えで上書きされてしまいますので、作ったロジックを活かせません。

   sets.midcast['精霊魔法'] = {
        waist="スクリミルコード",
    }

具体的な例を挙げるとすると、私が作っている共通ファイルはuser_post_***で組んでおり、各ジョブのロジックではjob_post_***にしています。

両方ともに実装がある場合は、両方のファンクションが動くことになるのですが、最終に動いたロジックで装備を決定させますので、ジョブロジックで特別な処理が必要な場合はjob_post_でロジックを組んでいます

共通ロジックに処理があり、ジョブロジックに処理を定義していない場合は共通ロジックの処理しか行われません。もちろん両方に定義がない場合は、default_に該当する装備定義が選択されます。

各種モードの使い分け

GearSwap(Mote-libs)の各種モードについて説明します。

モード専用の装備を用意しておくと、臨機応変に操作をすることが可能になります。たとば、抜刀装備の場合だとSTP重視やマルチアタック重視、モクシャを重視した装備など状況に応じて切り替えられますのでジェールなどをやる場合には必須の機能です。

Mote-libsには次のモードが用意されています。使いどころがよく分からないモードもありますが、分かる部分だけ便利に使えれば良いと思います。

    state.OffenseMode         = M{['description'] = 'Offense Mode'}
    state.HybridMode          = M{['description'] = 'Hybrid Mode'}
    state.RangedMode          = M{['description'] = 'Ranged Mode'}
    state.WeaponskillMode     = M{['description'] = 'Weaponskill Mode'}
    state.CastingMode         = M{['description'] = 'Casting Mode'}
    state.IdleMode            = M{['description'] = 'Idle Mode'}
    state.RestingMode         = M{['description'] = 'Resting Mode'}

    state.DefenseMode         = M{['description'] = 'Defense Mode', 'None', 'Physical', 'Magical'}
    state.PhysicalDefenseMode = M{['description'] = 'Physical Defense Mode', 'PDT'}
    state.MagicalDefenseMode  = M{['description'] = 'Magical Defense Mode', 'MDT'}

    state.Kiting              = M(false, 'Kiting')
    state.SelectNPCTargets    = M(false, 'Select NPC Targets')
    state.PCTargetMode        = M{['description'] = 'PC Target Mode', 'default', 'stpt', 'stal', 'stpc'}

    state.EquipStop           = M{['description'] = 'Stop Equipping Gear', 'off', 'precast', 'midcast', 'pet_midcast'}

    state.CombatWeapon        = M{['description']='Combat Weapon', ['string']=''}
    state.CombatForm          = M{['description']='Combat Form', ['string']=''}

OffenseMode:抜刀モードの切り替え

戦闘スタイルに応じて抜刀時の装備を切り替えるために使います。

state.OffenseMode:options('Normal','Stp','Parry')
sets.engaged = {}
sets.engaged.Stp = {}
sets.engaged.Parry = {}

切り替えコマンドはマクロに仕込むか、キーバインドすると使いやすいです。

--サイクルさせる場合
gs c cycle OffenseMode

--直接指定する場合
gs c set OffenseMode Normal
gs c set OffenseMode Stp
gs c set OffenseMode Parry

IdleMode:待機モードの切り替え

被ダメカットやリフレ装備など、待機状態の装備を切り替えるために使います。

state.IdleMode:options('Normal','Refresh')
sets.idle = {}
sets.idle.Refresh = {}

切り替えコマンドはマクロに仕込むか、キーバインドすると使いやすいです。

--サイクルさせる場合
gs c cycle IdleMode

--直接指定する場合
gs c set OffenseMode Normal
gs c set OffenseMode Refresh

RangedMode:遠隔モードの切り替え

装備している遠隔武器の種類に応じて矢弾を持ち替えるモードに使えます。

state.RangedMode:options('Archery','Marksmanship')

このモードを使うためには、ある自力でプログラムを組まなければいけませんので、初心者向きのモードではありません。

銃を装備したら矢弾を自動で装備し、弓を装備したら矢を自動で装備するために次のようなコードを組んでいます。装備した遠隔武器が弓なのか銃なのかを判断し、対応する矢弾を装備するためのコードです。

function job_state_change(stateField,  newValue, oldValue)
    if stateField == 'RangeWeapons' then
        if newValue == 'Fomalhaut' then
            send_command('gs c set RangedMode Marksmanship')

        elseif newValue == 'TPBonus' then
            send_command('gs c set RangedMode Archery')
            
        elseif newValue == 'Hangaku' then
            send_command('gs c set RangedMode Archery')
        end
    end
end

function job_post_precast(spell, action, spellMap, eventArgs)
    if spell.name == '飛び道具' then
        if state.RangedMode.value == 'Archery' then
            equip({ammo = gear.ArcheryPhysics})
        elseif state.RangedMode.value == 'Marksmanship' then
            equip({ammo = gear.MarksmanshipPhysics})
        end
    end
end

手動でモードを切り替えることもできますが、私の場合はプログラムでモードを切り替えていますので、切り替えコマンドはマクロに組んでいません。

WeaponskillMode:ウェポンスキルモードの切り替え

戦術によってはモクシャを積んでWSを打つ場面がありますので、ウェポンスキルのモードを切り替えるために使います。WSの命中やダメージ用に別途装備セットを用意して切り替えるなどの使い方ができます。

state.WeaponskillMode:options('Normal', 'SubtleBlow')
--WS遠隔ダメージ
sets.precast.WS.Range = {}
sets.precast.WS.SubtleBlow = {}
sets.precast.WS["ラストスタンド"] = { Normal=sets.precast.WS.Range,
                                      SubtleBlow=set_combine(sets.precast.WS.Range,sets.precast.WS.SubtleBlow)} 

マクロに組み込んで使うと使いやすいです。

--サイクルさせる場合
gs c cycle WeaponskillMode

CastingMode:詠唱中モードの切り替え

私は使っていませんが、103%の詠唱中断装備で詠唱するか、FC装備で詠唱するかを分けて使うことができると思います。

DefenseMode:防御モードの切り替え

物理防御用のセットと魔法防御用のセットに切り替えて使うモードだと思います。

私も以前ナイトでこのモードを使っていましたが、今は盾を持ち替えた際に装備を切り替える実装をしているので現在は使っていません。

function customize_idle_set(idleSet)
    if state.SubWeapons.value == 'Duban' then
        return set_combine(idleSet,sets.idle)
    else
        return set_combine(idleSet,sets.idle.Magical)
    end
end


function customize_melee_set(meleeSet)
    if state.OffenseMode.value == 'Multi'then
        return set_combine(meleeSet,sets.engaged)
    elseif state.SubWeapons.value == 'Duban' then
        return set_combine(meleeSet,sets.engaged.Physical)
    else
        return set_combine(meleeSet,sets.engaged.Magical)
    end
end

他のモード切替と同じように使えますので、このモードを使いたい人は試してみてください。

あまり使わない・よく分からないモード

Kiting

大量の敵をかき集めるときに使うモードです。

装備定義の作り方によると思うのですが、私はあまり使わないモードです。

私の場合、抜刀装備には移動速度アップ装備を組み込んでいませんので、抜刀時の移動が遅いです。

sets.Kiting = {right_ring="シュネデックリング",}

抜刀しながら走る必要がある場合、state.Kitingでモードを切り替えると、上記装備に切り替わり抜刀状態でも移動速度アップ状態で走ることが可能になります。

たまに、敵の赤線技を避ける手法が必要な場合に使うことがありますが、ほとんど使いません。

RestingMode

私は使っていませんが、ヒーリング用の装備を切り替えるモードです。

SelectNPCTargets

どういう場面で使うのか分からないので、私は使っていません。

PCTargetMode

どういう場面で使うのか分からないので、私は使っていません。

EquipStop

私は使っていませんが、モードの切り替えで着替えをキャンセルできるのだと思います。

  • precast
  • midcast
  • pet_midcast

武器の持ち替え

上記には無いカスタムモードを作ることができます。

たぶん、state.CombatWeaponで切り替えるのが正しいのでしょうが、臨機応変に武器を持ち変えて戦う戦略が多いので、私は部分的に武器を持ち替えられるようにしています。

    state.MainWeapons           = M{'RostamA','RostamB','Naegling','Kustawi'}
    state.SubWeapons            = M{'CrepuscularKnife','NuskuShield','Tauret'}
    state.RangeWeapons          = M{'DeathPenalty','Fomalhaut'}

モードの切り替えは、マクロに組むなどしてください。

    --メイン武器のサイクル
    gs c cycle MainWeapons
    --サブ武器のサイクル
    gs c cycle SubWeapons
    --遠隔武器のサイクル
    gs c cycle RangeWeapons

    gear.RostamA                = {name="ロスタム", augments={'Path: A'}}
    gear.RostamB                = {name="ロスタム", augments={'Path: B'}}
    gear.RostamC                = {name="ロスタム", augments={'Path: C'}}
    gear.Naegling               = {name="ネイグリング"}
    gear.CrepuscularKnife       = {name="クレパスクラナイフ"}
    gear.DeathPenalty           = {name="デスペナルティ"}
    gear.Fomalhaut              = {name="フォーマルハウト"}
    gear.TPBonus                = {name="アナーキー+2"}
    gear.NuskuShield            = {name="ヌスクシールド"}
    gear.RAbulletphysics        = {name="クロノブレット"}
    gear.RAbulletMagic          = {name="ライヴブレット"}
    gear.CorsairShot            = {name="ライヴブレット"}
    gear.Kustawi                = {name="クスタウィ+1"}
    gear.Slip                   = {name="プライムガン"}

例えば、コルセアの場合ネイグリングを装備したらTPボーナスの銃を一緒に装備することになると思うので、ネイグリング用のマクロを用意しておくと便利です。

/con gs c set MainWeapons Naegling
/con gs c set TPBonus

Q&A

GearSwapって何ですか?

アクションに応じて自動で装備を切り替えてくれる便利なツールです。

  • 精霊魔法詠唱時には「魔攻装備」
  • 弱体魔法詠唱時には「魔命装備」
  • 殴る時は「TP装備」
  • WSには「WS装備」
GearSwapを入れたけど、何も起きません。どうして?

GearSwapは「luaファイル(装備切り替えスクリプト)」が必要です。

アドオンだけ入れても動きません。

まずは data/ フォルダにある「Sample」や他の人が公開しているファイルをコピーして使うとよいです。

luaファイルって自分で作らないといけないんですか?

最初は他人のをコピーでOKです。

自分のジョブ用に少しずつ「装備セットを書き換える」だけで十分です。

完全にゼロから作るのは慣れてからで大丈夫。

装備セットはどうやって書くの?

基本はこんな感じです

sets.engaged = {
    head="装備名",
    body="装備名",
    hands="装備名",
    legs="装備名",
    feet="装備名",
}
どのタイミングで装備が切り替わるの?

GearSwapでは大きく分けて以下のタイミングで切り替わります:

  • precast:詠唱開始前(FC装備など)
  • midcast:詠唱中(魔命装備など)
  • aftercast:詠唱後(TP装備など)
  • engaged:戦闘中の通常攻撃
  • idle:待機中

この仕組みを理解すると一気に使いやすくなります。

ログに「error」と出て動きません

多い原因は次の2つです:

  1. 装備名のスペルミス(アイテム名は正確に書く必要あり)
  2. カッコ {} の閉じ忘れ

エラーの行番号を見て修正しましょう。

面倒くさくて続かないんですが…

初心者は「戦闘用」「待機用」「魔法用」くらい3パターン作るだけで十分です。

いきなり完璧にしなくてOK。

徐々に「もうちょっとこうしたい」を追加していくのがおすすめ。

コメント

コメントする

目次