ナイトのMote-libsコードについて説明します。
ファイル構成
GearSwap/
└ data/
├ user-globals.lua
(共通ファイル)
├ PLD.lua
(ジョブロジック)
└ キャラクター名/
├ weather_obi.lua
(属性帯)
└ PLD_gear.lua
(装備定義)
詠唱中断処理
通常、GearSwapの基本的な処理ではこうなります。
- precast(FC着替え)
- micdcast(着弾着替え)
そのため、詠唱中断装備はmidcastにセットするのが一般的です。メリポ込みで詠唱中断装備を103%以上にしておけばノックバックされない限り詠唱中断されることはありません。
が、この状態では最大効果を発揮できませんので、私は次の方法で詠唱中断対策を行っています。

理屈は「最速で魔法を詠唱し、詠唱完了する直前に着弾装備に着替える」です。
- まず、precastで可能な限りFCを積むことで、詠唱時間自体を短縮させます。
- 次に、魔法の詠唱時間をシステムから取得し、FC短縮後の詠唱時間を計算します。
- 計算された詠唱時間の少し前に着弾装備に着替えます。
詠唱中断装備から着弾装備に着替える一瞬のタイミングで詠唱中断されてしまう可能性はありますが、ほとんど中断されることはありません。
function job_post_midcast(spell, action, spellMap, eventArgs)
for buff,active in pairs(state.Buff) do
if active and sets.buff[buff] then
equip(sets.buff[buff])
end
end
if string.find(spell.type, 'Magic') then
local fc=73/100
if player.sub_job == '赤' then
fc = fc + 15/100
end
if fc >= 80/100 then
fc = 80/100
end
equip(sets.midcast.interruption)
local adjust=0.9
local cast_time = (spell.cast_time*(1-fc))*adjust
if spellMap == 'Cure' then
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.midcast.Cure')
elseif spellMap == 'Phalanx' then
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.midcast.Phalanx')
elseif spell.name == 'フラッシュ' then
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.midcast.Flash')
else
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.Enmity')
end
end
end
ややこしいなと思う人は、この部分の実装を削除し、midcastに詠唱中断装備を組み込んでください。
盾の種類によって防御モードを切り替える
魔法対策する場合はイージスに持ち替え魔法防御用の装備に切り替え、物理対策する場合はドゥバンに持ち替え物理防御用の装備に切り替えます。
--gs c cycle DefenseMode
state.DefenseMode:options('Physical', 'Magical', 'None')
gs c cycle DefenseMode
をマクロに登録するか、キーバインドさせるかなどしてご利用ください。
DefenseModeがNoneのときに抜刀すると、sets.engagedになります。
ノックバック装備
Mote-libsに用意されている各種モードは次の順番で装備を上書きしていきます。※装備定義がある場合のみ
- CombatForm
- CombatWeapon
- OffenseMode
- HybridMode
- CustomMeleeGroups
- DefenseMode
- Kiting
- user_customize_idle_set
- customize_idle_set
ノックバック処理をどのモードで定義するかによるのですが、あるべき論で考えるとHybridModeなのかなと私は思います。
ただし、着替えには上記順番のルールがありますので、DefenseModeの定義を使っている場合、HybridModeの着替えをDefenseModeで上書きしてしまいます。
なので、次の処理を実装しました。これによりどのモードの状態でもHybridModeを切り替えるだけでノックバック装備に着替えられます。
function user_customize_melee_set(meleeSet)
if state.HybridMode.value == "KnockBack" then
meleeSet =set_combine(meleeSet,sets.engaged.KnockBack)
end
return meleeSet
end
まぁ、これもあるべき論で考えると次のようにするべきなのでしょうが、この場合モードの切り替えマクロが二つ必要になりますので、鬱陶しいかなと思い、ノックバック切り替えは上記の実装にしているわけです。
state.PhysicalDefenseMode = M{['description'] = 'Physical Defense Mode', 'PDT','KnockBack'}
state.MagicalDefenseMode = M{['description'] = 'Magical Defense Mode', 'MDT','KnockBack'}
Mote-libsの仕様に準拠するなら後者のやりかたで、運用が面倒くさい人は前者のやり方でって感じですね。
敵を集める時のモード
盾ジョブは、ヒポメネソックスで敵を集める場面があると思います。
この装備は、被ダメ時にとんずらが発動することがありますが防御性能は低いので、敵を集めるときだけ装備を切り替えたい時に使います。
このモードを切り替えるコマンドはこれです。
gs c cycle Kiting
このモードは、納刀抜刀状態に限らず装備するので、モードの切り替えを忘れると防御性能がおちるので注意が必要です。
コメント
コメント一覧 (23件)
管理人様
いつもありがとうございます。
ナイトでオデシーに徴用される機会が多く、オデシー用のIdleMode.Odessy(シュネデックリング+ヒポメネソックス+1を身に着けていたい。)とOffenseMode.Odessy(ノックバック対策装備を組み込みたい)を作ってみたのですが、おかしなことになってしまいます。(コードを見てみたらなるほどなことですが。)
何か対策はあるでしょうか?ぶしつけな質問で恐縮です。
試していませんが、こんなコードで実現できると思います。
オデシー待機モードのコマンド:gs c set IdleMode Odessy
state.IdleMode:options(‘Normal’,Odessy’)
sets.idle.Odessy = {
feet = “ヒポメネソックス+1″,
right_ring=”シュネデックリング”,
}
オデシー抜刀ノックバック対策のコマンド:gs c set OffenseModeOdessy
state.OffenseMode:options(‘Normal’,’Multi’,Odessy’)
sets.engaged.Odessy = {
legs = “ダッシングサブリガ”,
back=”リパルスマント”,
}
管理人様
早速のご回答ありがとうございます!
試してみましたが、どうもうまく着替えてくれません。
色々いじってみます。
ありがとうございます!
正確にいうと、動いてはいますが、一部着替えがうまくいかない。です。
あぁ、もしかしたら
sets.idle.Odessy = set_combine(sets.idle,{
feet = “ヒポメネソックス+1″,
right_ring=”シュネデックリング”,
})
かもしれませんね。
管理人様
お手数をお掛けして申し訳ありません。
頑張ってみましたが、私のスキルでは到底及ばないようです。
もっと勉強します。ありがとうございました。
とりあえずやりたいことをこちらで更新して反映しておきました。
https://github.com/ktgreeds/GearSwap/blob/main/data/PLD.lua
https://github.com/ktgreeds/GearSwap/blob/main/data/%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%AD%E3%83%A3%E3%83%A9/PLD_gear.lua
管理人様
ありがとうございます!
すぐにお礼を申し上げるべきでしたが、とりあえずコードを書き換えて、マクロの方をいじりました。
実践もしてまいりました。
結果、大変良好で、ヒポメネとシュネデックでも被ダメージは問題なかったみたいです。
ただ、これは私個人のスキルの問題ですが、マクロの方のいじり方が今までこちらで見たことのないコードがあったので、それで四苦八苦しましたが、過去ログを見ながらなんとかテストの結果、大変良好でした。
本当にありがとうございます!
追伸ですw
これはどうしようもない問題ですが、Kitingのon offを意図的に選択できるといいですねw (cycleではなく。)
gs c kiting true
gs c kiting false
でできると思いますよ。試してみてください。
管理人様
ご回答ありがとうございます!
マクロパレットに
/console gs c kiting true
/console gs c kiting false
とそれぞれ書き入れ確認しましたがうまく動作しないようです。
コマンドが間違っているのでしょうか?
ちなみにチャット欄に
//gs c kiting true
等とも入れてみました。
すみません。コマンド間違えてました。
gs c kiting set true
gs c kiting set false
管理人様
お礼遅くなり申し訳ありません。
やってみます。ありがとうございます!
初心者での質問失礼します
ファイル構成
GearSwap/
└ data/
├ user-globals.lua(共通ファイル)
├ PLD.lua(ジョブロジック)
└ キャラクター名/
└ PLD_gear.lua(装備定義)
上記 記載通り行ってますが 全く動きません
以前、キャラクター名を間違えていた人がいたので、キャラクター名が正しいか確認してください。
例キャラクター名がaiueoなら、aiueoフォルダが必要になります。
ダメならまた聞いてください。
ご回答ありがとうございます
例キャラクター名がaiueoなら、aiueoフォルダが必要になります。
ご指摘の通り キャラクター名フォルダを作っており、その中にPLD_gear.luaが入っています。
しかし エラーが表示され動きません。
エラー内容を記載していただくか、他のコードをググって試して貰うしかないですね。
GearSwapやWindowerは外部ツールですから、ある程度プログラムなどの知識や自分でどうにかできるスキルが必要になります。
ご了承ください。
ジョブロジックファイルと装備定義ファイルがHPlowのあるなしだけで他が同じように見えたのですが、それで問題なかったでしょうか(PCから離れているので自分で確認できておりません)
すいません。
秒で直しました!
LowHpは、ケアル前にHPを減らすための装備セットになります。
この定義はGearSwapから使っていません。
早速の対応ありがとうございます^^
帰宅次第試してみますっ
sets.precast.JA[‘センチネル’] = set_combine(sets.Enmity,{feer=”CBレギンス+3″})
お世話になってます、粗探しみたいになって申し訳ないですが feet が feerになってます
教えてくれて感謝です!
今まで動いてなかったことすら気付いていませんでした。。