GearSwapで召喚士[FF11]

f:id:yyoshisaur:20190613184551p:plain

長らく放置していた召喚士をジョブ首を強化するタイミングでGearSwap化をしました。
初めてのペットジョブ系のGearSwapのスクリプトで、少しほかのジョブ(非ペットジョブ系)のスクリプトと異なる部分があったので、記事にしてみます。

契約の履行

召喚士の主力である「契約の履行」では魔法などと同様に、実行前、実行中、実行後のタイミングで着替えを行いますが、
実行中の着替えをpet_midcast, 実行後の着替えをpet_aftercastで行うところが通常の魔法等と異なります。

装備変更の流れ
  1. [precast] 契約の履行使用間隔の短縮装備に変更
  2. [pet_midcast] 契約の履行装備に変更
  3. [pet_aftercast] 待機装備に変更

契約の履行の実行タイミングはプレイヤーではなく、ペットにあるので、
midcastではなく、pet_midcastで着替えを行います。
契約の履行の実行後も同様にaftercastではなく、pet_aftercastで着替えを行います。
契約の履行では、平行してプレイヤーのmidcast, aftercastも実行されるので、
midcast, aftercastでは着替えを行わないようにするほうがよさそうです。

アストラルパッセージ

アストラルパッセージ中は、契約の履行の再使用時間が0になることと着弾以外の装備に誤って上書きしないようにすることを考慮して、
precast, pet_aftercastで着替えを行わないようにします。

サンプル
function get_sets()
    -- 契約の履行使用間隔の短縮装備
    sets.precast.bpad = {
        ammo="サンカスサシェ+1",
        head={ name="BCホーン+1",},
        body={ name="CNダブレット+3",},
    }
    
    -- 物理系幻術装備などの着弾装備
    sets.midcast.bp_physical = {
        ammo="サンカスサシェ+1",
        head={ name="APクラウン+1", augments={'Pet: Attack+25','Pet: "Mag.Atk.Bns."+25','Blood Pact Dmg.+8',}},
        body={ name="CNダブレット+3",},
        hands={ name="マーリンダスタナ", augments={'Pet: Attack+26 Pet: Rng.Atk.+26','Blood Pact Dmg.+10','Pet: STR+8','Pet: Mag. Acc.+2','Pet: "Mag.Atk.Bns."+4',},},
        legs={ name="APズボン+1", augments={'Pet: STR+20','Blood Pact Dmg.+14','Pet: "Dbl. Atk."+4',},},
        feet={ name="CNピガッシュ+3",},
        neck={ name="召喚士の首輪+2",},
        waist={ name="王将の帯",},
        left_ear={ name="ゲロスピアス",},
        right_ear="ルガルバンダピアス",
        left_ring="ヴァラールリング+1",
        right_ring="ヴァラールリング+1",
        back={ name="カンペストレケープ", augments={'Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20','Eva.+20 /Mag. Eva.+20','Pet: Accuracy+10 Pet: Rng. Acc.+10','"Fast Cast"+10',}},
    }

    -- 待機装備
    sets.aftercast.idle_dt = {
        ammo="サンカスサシェ+1",
        head={ name="CNホーン+3",},
        body={ name="APダルマティカ+1", augments={'Summoning magic skill +20','Enmity-6','Pet: Damage taken -4%',},},
        hands={ name="アステリアミトン+1",},
        legs={ name="アシドゥイズボン+1",},
        feet={ name="バヤミサボ+1",},
        neck={ name="召喚士の首輪+2",},
        waist="ルセデティサッシュ",
        left_ear={ name="エヴァンズピアス"},
        right_ear="エンメルカルピアス",
        left_ring="守りの指輪",
        right_ring="VCリング+1",
        back={ name="カンペストレケープ", augments={'MP+60','Eva.+20 /Mag. Eva.+20','Mag. Evasion+10','Pet: "Regen"+10','Damage taken-5%',},},
    }

    sets.aftercast.idle = sets.aftercast.idle_dt

end

function precast(spell)

    -- アストラルパッセージ中は着替えなし
    if buffactive['アストラルパッセージ'] then
        return
    end
    
    -- 契約の履行:幻術, 契約の履行:験術の時、短縮装備
    if spell.type == 'BloodPactRage' or spell.type == 'BloodPactWard' then
        equip(sets.precast.bpad)
    end

end

function midcast(spell)
 
    -- 契約の履行:幻術, 契約の履行:験術の時は着替えなし
    if (spell.type == 'BloodPactRage' or spell.type == 'BloodPactWard') then
        return
    end

end

function aftercast(spell)

    -- 契約の履行:幻術, 契約の履行:験術の時は着替えなし
    if (spell.type == 'BloodPactRage' or spell.type == 'BloodPactWard') then
        return
    end

end

function pet_midcast(spell)

    if (spell.type == 'BloodPactRage' or spell.type == 'BloodPactWard') then
       -- 契約の履行に合った着弾装備に変更
       -- equip(sets.midcast.bp_physical)
    end

end

function pet_aftercast(spell)

    -- アストラルパッセージ中は着替えなし
    if buffactive['アストラルパッセージ'] then
        return
    end
    
    equip(sets.aftercast.idle)

end

その他に実装したこと

召喚士は契約の履行の着替えがメインなので、ユーザースクリプトは以外と簡素なものになりました。
その他で必要な着替えは、リフレシュなどの強化魔法やケアルなどで、これはほかのジョブと変りないと思います。

HP, MPの着替えによる損失の軽減

召喚士は、着弾装備にアポジ装備を使います。
この装備はプレイヤーのHPが減少するプロパティを持っているため、契約の履行実行時にそのまま着替えを行うとHPが大きく減少します。
また、召喚士専用装備はMP+が大きい装備が多く、強化魔法装備などに着替えたときにMPが減少することがあります。
以前、紹介したGearSwapで着替えの順番を指定する方法で、HP, MPの減少を軽減しました。

yyoshisaur.hatenablog.com

マクロの共通化

契約の履行は召喚獣毎に異っているため、以前はマクロを召喚獣毎に用意していました。
また、アストラルパッセージ用のマクロなどでマクロ数が多くなり、すべての契約の履行をマクロ化できませんでした。
(GearSwapの場合使用頻度の低い履行はメニューからで良いですが、履行はメニューの階層が1つ深いので不便です。)

同じペットジョブの獣使いの場合、「/bstpet」コマンドである程度共通化できますが、召喚士では「/bstpet」に相当するコマンドが用意されていません。
GearSwapのセルフコマンドを使用して、「/bstpet」コマンドに相当するものを実装してみました。
(すでにWindowerアドオン等であるかもしれませんが。もし既存のものがあれば教えてください。)
実装したコマンドは、幻術と験術で分け、さらに験術はバフとデバフで分けるようにして「/bstpet」と同様に番号で指定するようにしています。
実行対象のターゲットには、メインターゲットかサブターゲットを選べるようにし、
サブターゲットの場合、履行のターゲットタイプをリソースから取得し、<stpc>または、<stnpc>で実行できるようにしています。
(メインターゲットの場合は、<t>または、<me>で実行します。)

コマンド例
幻術
//gs c bp rage [number] [target]
験術(バフ系)
//gs c bp ward buff [number] [target]
験術(デバフ系)
//gs c bp ward debuff [number] [target]
アストラルフロー
//gs c bp astralflow [number] [target]

number: 1~
target: t(メインターゲット) or st(サブターゲット)

gearswap/smn.lua at master · yyoshisaur/gearswap · GitHub
gearswap/smn_avatar.lua at master · yyoshisaur/gearswap · GitHub

慣れるまでは各召喚獣の履行とコマンド番号の対応表を表示しておくことにしました。
f:id:yyoshisaur:20190613234844p:plain

アストラルパッセージはGearSwapのコマンドを介すと少し遅く、ラグが発生する感じがしたので、アストラルパッセージは別マクロにしました。

使い易いか分かりませんが、これで運用してみようと思います。

精霊召喚

また、使用頻度は低いですがエレメントサイフォンを使用する時に天候や曜日に合った精霊であれば、MP回復量にボーナスがあります。
以前、紹介した天候や曜日をGearSwapで扱う方法で、現在の天候や曜日に対応した精霊を呼び出すコマンドを実装してみました。

yyoshisaur.hatenablog.com