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"
}命名の優先度
実は、装備定義のにはいくつか書き方があり、書き方によって優先度が決められています。より具体的な定義になるほど優先度が高くなると考えてください。
ケアルの場合だとこうなります。
| 優先度 | 対応する属性 | 例 |
|---|---|---|
| 1 | spell.name | sets.midcast[‘ケアル’] |
| 2 | spellMap | sets.midcast.Cure |
| 3 | spell.skill | sets.midcast[‘回復魔法’] |
| 4 | spell.type | sets.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は次の順番で動いており、対応するファンクションが実装されていれば該当するファンクションが動く仕組みになっています。
- precast
- user_precast
- job_precast
- default_precast
- user_post_precast
- job_post_precast
- cleanup_precast
- 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 ParryIdleMode:待機モードの切り替え
被ダメカットやリフレ装備など、待機状態の装備を切り替えるために使います。
state.IdleMode:options('Normal','Refresh')
sets.idle = {}
sets.idle.Refresh = {}切り替えコマンドはマクロに仕込むか、キーバインドすると使いやすいです。
--サイクルさせる場合
gs c cycle IdleMode
--直接指定する場合
gs c set OffenseMode Normal
gs c set OffenseMode RefreshRangedMode:遠隔モードの切り替え
装備している遠隔武器の種類に応じて矢弾を持ち替えるモードに使えます。
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 WeaponskillModeCastingMode:詠唱中モードの切り替え
私は使っていませんが、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
コメント