Mote-Includeのaftercastにおける自動着替えの流れはちょっと複雑なので整理してみる。
aftercast()
┗handle_actions()
┗filter_aftercast() → EquipStopの処理
[C] user_aftercast() [U]
[C][h] job_aftercast() [U] → アクション成功時(not spell.interrupted)の処理など
[C][h] default_aftercast()
┗handle_equipping_gear()
┗job_handle_equipping_gear() [U] → check_range_lock()など
[h'] equip_gear_by_status() → sets.engaged or sets.idleへ着替え
[C] user_post_aftercast() [U]
[C] job_post_aftercast() [U] → sets.Buffへの着替えなど
cleanup_aftercast()
┗reset_transitory_classes() → classes.CustomClass and .JAMode= nil
上記の順番で関数が実行される。
[C]:eventArgs.cancel = trueのとき実行されない。
[h]:eventArgs.handled = trueのとき実行されない。
[U]:ユーザー関数
[h]:eventArgs.handled = trueのとき実行されない。
[U]:ユーザー関数
ユーザー関数[U]は5つもあるが、実際にはjob_aftercast()くらいしか使われていないようだ。希少な例だがTHF.luaでは他のユーザー関数も実装されている。
ここではBLM.luaのjob_aftercast()の例を挙げる。
function job_aftercast(spell, action, spellMap, eventArgs)マナウォールが成功した場合(not spell.interrupted)にマナウォール用の足装備に着替えて、足の部位を装備変更不可にしている。また、精霊魔法を成功させたときは、マジックバーストモードをリセットしている。
-- Lock feet after using Mana Wall.
if not spell.interrupted then
if spell.english == 'Mana Wall' then
enable('feet')
equip(sets.buff['Mana Wall'])
disable('feet')
elseif spell.skill == 'Elemental Magic' then
state.MagicBurst:reset()
end
end
end
なお、equip()は装備をGearSwapに登録するだけの関数で、サーバーへのパケット送信はこのタイミングでは行われない。equip()はGearSwapのグローバル変数equip_listに値をセットしているだけである。パケット送信がされるのは、equip_sets()内のみ。equip_sets()をユーザーファイルから呼び出すことはできない。
ユーザー関数aftercast()は、通常、triggers.luaのアクションパケットのイベントハンドラから呼び出される。その際、equip_sets('aftercast',~)という感じでequip_sets()にラップされる形で呼び出される。equip_sets()はaftercast()を実行し終わった後、着替え用パケットを送信する。
今晩は、いつも楽しく拝見させていただいています。
返信削除afterでの自動着替えについて教えていただきたくコメントさせていただきます。
pre → mid → afterの自動着替えで、preとmidは反映されるのですが、魔法詠唱後やアビ使用後にafterでの自動着替えがどうしても反映されません。
pre、mid、afterそれぞれのファンクションは空の状態で init_gear_sets には以下を宣言しています。
-------------------
sets.idle
sets.idle.Town
sets.idle.Field
-------------------
init_gear_setsでのsets名が間違っているのか、afterの自動着替えでは何かしら指示が必要なのか、教えていただけると幸いです。
※ afterファンクション内で「equip(sets.idle)」を記述すると着替えるのですが、これだとmoteを使う意味がないような…
こんにちは。コメントありがとうございます。
削除sets名は正しいと思いますし、aftercastで特別な指示は必要ないと思います。
//gs debugmode
でデバッグログを確認してみてはいかがでしょうか。
"Default aftercast set selection for ~"というデバッグログで、
装備セット名が表示されると思います。