MENU

【GearSwap】Mote-libsで詠唱中断処理を組み込む方法

敵に殴られながらでも詠唱完了させるためには、詠唱中断率が103%以上の装備で詠唱する必要があります。

GearSwap的に表現すると、詠唱中断率が103%以上あるmidcast装備であれば詠唱中断されることはありません。

しかし、midcastでは効果アップ装備に着替えるため、詠唱中断率を維持できなくなります。

でも大丈夫。詠唱中断されにくく効果アップ装備に着替る方法があります。

ただし、この方法は詠唱中断装備で詠唱して、詠唱完了直前に効果アップ装備に着替える一ので、瞬の隙に詠唱中断されてしまう可能性があることをお断りしておきます。絶対詠唱中断されたくない場合は、効果アップ装備に詠唱中断率103%を組み込んでください。

目次

詠唱中断しにくい着替えを行う方法

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')
        end
    end
end

この処理でやっていることは、4つあります。

  • 強制的に詠唱中断装備に着替える
  • 後続処理キャンセルのフラグセット
  • 詠唱完了までの時間計算
  • 効果アップ装備の着替えを遅延

❶強制的に詠唱中断装備に着替える

equip(sets.midcast.interruption)

sets.midcast.interruption = {
	ammo="ストンチタスラム+1",
	head={ name="SVシャレル+1", augments={'HP+105','VIT+12','Phys. dmg. taken -4',},priority=4},
	body={name="CVキュイラス+3",priority=5},
	hands={ name="SVハントシュ+1", augments={'HP+105','Enmity+9','Potency of "Cure" effect received +15%',},priority=6},
	legs={ name="CBブリーチズ+3", augments={'Enhances "Invincible" effect',}},
	feet="CVサバトン+3",
	neck="月光の首飾り",
	waist={name="プラチナモグベルト",priority=10},
	left_ear="磁界の耳",
	right_ear={ name="シバリエピアス+1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+15','Mag. Acc.+15','Damage taken-5%',}},
	left_ring={name="ゼラチナスリング+1",priority=13},
	right_ring="アイワツリング",
	back={ name="ルディアノスマント", augments={'HP+60','Eva.+20 /Mag. Eva.+20','HP+20','Enmity+10','Chance of successful block +5',}},
}

これは普通に詠唱中断率が103%以上ある装備セットを定義するだけです。このセットで詠唱中断率が94%+メリポの詠唱中断率10%で合計104%あります。

❷強制的に詠唱中断装備に着替える

やまみかんさんの記事にも詳しく書いてありますが、Mote-libsはフラグをセットすれば、GearSwapによる着替えをある程度制御できます。

eventArgs.handled = true

このフラグにどのような意味があるのかは、Mote-Include.luaのhandle_actionsファンクションの実装を見ればある程度わかります。handle_actionsは、precast・midcast・aftercastに対応するようになっています。

今回はmidcastでの着替えが主題ですので、midcastの流れで簡単に説明しておきます。

handle_actions()では、次の順番で処理が流れていくようになっており、該当するファンクションを自分で実装している場合に限り、該当処理が動くようになっています。

  1. filter_midcast(必ず通る)
  2. user_midcast(cancel以外通る)
  3. job_midcast(cancel、handled以外通る)
  4. default_midcast(cancel、handled以外通る)
  5. user_post_midcast(cancel以外通る)
  6. job_post_midcast(cancel以外通る)
  7. cleanup_midcast(必ず通る)

私も詳しくないのではっきりとは言えないのですが、sets.midcastなどで定義している装備は、default_midcastで着替えが行われているようなので、default_midcastを通さなければ効果アップ装備に着替えることはありません。

よって、default_midcastを通さないために、default_midcastより前のファンクションであるjob_midcastでeventArgs.handled = trueをセットしています。

❸詠唱完了までの時間計算

local fc=68/100
local adjust=0.95
local cast_time = (spell.cast_time*(1-fc))*adjust    

私のナイトはFCが68ありますので、fc=68/100で0.68となります。

実例を挙げた方がわかりやすいので、ファランクスを例にして説明します。

この装備でファランクスを詠唱するのに必要な時間は3秒×(1-0.68)で、0.96秒になります。

詠唱開始から0.96後に詠唱完了するので、それまでに効果アップ装備に着替えられればいいのです。

あくまでも理論値としての0.96秒です。Mote-libsの処理時間やサーバーラグなどの処理がありますので、多少の余裕を持たさなければいけません。そのためのadjustです。

adjust=0.95にしていますので、0.96*0.95=0.912秒となり、詠唱開始から0.912秒後に効果アップ装備に着替が行われます。

着替えが早すぎると詠唱中断されてしまい、着替えが遅すぎると着替えられないので、実際の環境でadjust値を調整してください。

❹効果アップ装備の着替えを遅延

send_command('wait '..cast_time..'; gs equip sets.midcast.Phalanx')

先ほど計算した時間経過後にequipで着替えを行います。

コメント

コメントする

目次