アンバスなどのコンテンツで、何かと出番が増えてきているナイト。
詠唱中断処理など、そこそこ拘ってMote-libsのコードを組んでいます。是非とも参考にしてください。
Mote-libsコード
ナイトのGearSwapコードは下記リンク参照。
私のナイトの説明
ナイトでコンテンツに出す機会もそれなりにありますので、少しでも便利にするため、小細工を仕込んでいます。
小細工その①詠唱中断処理
function job_midcast(spell, action, spellMap, eventArgs)
local fc=68/100
if string.find(spell.type, 'Magic') then
equip(sets.midcast.interruption)
local adjust=0.95
local cast_time = (spell.cast_time*(1-fc))*adjust
if spellMap == 'Phalanx' then
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.midcast.Phalanx')
elseif spellMap == 'Cure' then
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.midcast.Cure')
elseif spellMap == 'Flash' then
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.midcast.Flash')
elseif spellMap == 'Banish' then
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.midcast.Banish')
elseif spellMap == 'BlueMagical' then
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.midcast.BlueMagical')
elseif spellMap == 'BlueBuff' then
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.midcast.BlueBuff')
end
end
end
【GearSwap】Mote-libsで詠唱中断処理を組み込む方法で紹介している詠唱中断処理を使っています。
- ファランクス
- ケアル
- フラッシュ
- バニシュ
- 青魔法
これらの魔法は詠唱中断装備で詠唱して、詠唱完了直前に効果アップ装備に着替えています。
上記の定義にない魔法に関しては、とりあえず詠唱中断装備で詠唱するようになっています。
小細工その②マクロの節約
elseif cmdParams[1] == 'Enmity' then
local spell_recasts = windower.ffxi.get_spell_recasts()
local recast_time_Flash = spell_recasts[112]/60
local recast_time_BlankGaze = spell_recasts[592]/60
local recast_time_Jettatura = spell_recasts[575]/60
local ability_recasts = windower.ffxi.get_ability_recasts()
local recast_time_Provoke = spell_recasts[5]/60
if recast_time_Flash == 0 then
send_command('input /ja '..windower.to_shift_jis('神聖の印')..' <me>;wait 0.5;input /ma '..windower.to_shift_jis('フラッシュ')..' <stnpc>')
elseif recast_time_Jettatura == 0 then
send_command('input /ma '..windower.to_shift_jis('ジェタチュラ')..' <stnpc>')--0.5
elseif recast_time_BlankGaze == 0 then
send_command('input /ma '..windower.to_shift_jis('ブランクゲイズ')..' <stnpc>')--3
elseif recast_time_Provoke == 0 then
send_command('input /ja '..windower.to_shift_jis('挑発')..' <stnpc>')
end
elseif cmdParams[1] == 'EnmityRange' then
local spell_recasts = windower.ffxi.get_spell_recasts()
local recast_time_FrightfulRoar = spell_recasts[561]/60
local recast_time_Soporific = spell_recasts[598]/60
local recast_time_SheepSong = spell_recasts[584]/60
local recast_time_GeistWall = spell_recasts[605]/60
local recast_time_Stinking = spell_recasts[537]/60
if recast_time_FrightfulRoar == 0 then
send_command('input /ma '..windower.to_shift_jis('フライトフルロア')..' <stnpc>')--2
elseif recast_time_GeistWall == 0 then
send_command('input /ma '..windower.to_shift_jis('ガイストウォール')..' <stnpc>')--3
elseif recast_time_Stinking == 0 then
send_command('input /ma '..windower.to_shift_jis('スティンキングガス')..' <stnpc>')--4
elseif recast_time_Soporific == 0 then
send_command('input /ma '..windower.to_shift_jis('サペリフィック')..' <stnpc>')--3
elseif recast_time_SheepSong == 0 then
send_command('input /ma '..windower.to_shift_jis('シープソ\\ング')..' <stnpc>')--3
end
end
挑発やフラッシュなど目的が同じで違う処理が複数ある場合、マクロパレットが煩雑になってしまいます。
加えてガイストウォールなどの範囲敵対心用のマクロボタンも用意しなければいけなく、似たような処理を行うマクロがたくさん必要になります。
同じ目的の処理は一つのボタンにまとめたい。そのためのコードです。
こんなコードを使わなくても、6行のマクロに書けばいいじゃないかと思うかもしれませんが、GearSwapで6行マクロに複数の魔法を記述すると、正しく着替えが行われません。なので、一つのボタンで複数の処理をまとめるためこんなコードを書きました。
目的 | 該当箇所 | マクロからの呼び出し方法 |
---|---|---|
単体敵対心用 | cmdParams[1] == ‘Enmity’ | /console gs c Enmity |
範囲敵対心用 | cmdParams[1] == ‘EnmityRange’ | /console gs c EnmityRange |
これらのコマンドが呼び出されると、実行可能なアクションが上から順番に実行されます。リキャストが間に合わない場合は実行されません。
if recast_time_Flash == 0 then
send_command('input /ja '..windower.to_shift_jis('神聖の印')..' <me>;wait 0.5;input /ma '..windower.to_shift_jis('フラッシュ')..' <stnpc>')
elseif recast_time_Jettatura == 0 then
send_command('input /ma '..windower.to_shift_jis('ジェタチュラ')..' <stnpc>')--0.5
elseif recast_time_BlankGaze == 0 then
send_command('input /ma '..windower.to_shift_jis('ブランクゲイズ')..' <stnpc>')--3
elseif recast_time_Provoke == 0 then
send_command('input /ja '..windower.to_shift_jis('挑発')..' <stnpc>')
魔法のリキャスト情報はffxi.get_spell_recasts()から、アビリティのリキャスト情報はffxi.get_ability_recasts()から取得します。Windower\resを参照して該当アクションのコードで認識させています。
小細工その③ファランクス切れの通知
function job_buff_change(buff, gain)
if buff == "ファランクス" and not gain then
windower.add_to_chat(167,'!!!!!! ファランクス切れ !!!!!!')
end
end
ナイトにとってファランクスは生命線です。
たくさん強化されているような状況で小さなアイコンからファランクスの経過時間を確認するのは困難です。
Timersである程度認識できるとしても、切れている場合はなかなか気付かないことも多いので、私はファランクスが切れたタイミングで目立つメッセージを自分に表示させるようにしています。
コメント