オーメン詰みや、各種コンテンツと何かと便利な青魔道士。
Mote-libsも比較的シンプルに構成できているので、いいサンプルになるのではないかと思います。
ソースコード
Mote-libsでは、ジョブロジック部分(ジョブ名.lua)と装備セット部分(ジョブ名_gear.lua)を切り分けていますので、次のような階層構造になっています。
GearSwap/
└ data/
├ PLD.lua
└ キャラクター名/
└ PLD_gear.lua
ジョブロジック部分
function get_sets()
mote_include_version = 2
include('Mote-Include.lua')
set_language('japanese')
end
function job_setup()
include('Mote-TreasureHunter')
state.OffenseMode:options('Normal','D1')
state.IdleMode:options('Normal','Refresh')
state.Weapons = M{'Tizona','Naegling','Maxentius','D1'}
state.WeaponLock = M(false, '武器固定')
state.TreasureHunter = M(false, 'トレハン')
end
function user_setup()
send_command('bind f1 gs c cycle IdleMode')
send_command('bind f2 gs c cycle Weapons')
send_command('wait 2; gs c set IdleMode Normal;')
end
function user_unload()
send_command('unbind f1')
send_command('unbind f2')
send_command('input /si blank;')
end
function job_precast(spell, action, spellMap, eventArgs)
if spell.action_type == 'Ranged Attack' then
equip({range="ラミアベーン"})
end
end
function user_post_midcast(spell, action, spellMap, eventArgs)
if spell.skill == '青魔法' then
for buff,active in pairs(state.Buff) do
if active and sets.buff[buff] then
equip(sets.buff[buff])
end
end
if state.WeaponLock.value then
local weapon = sets.Weapons[state.Weapons.value]
if player.equipment.sub == weapon.main.name then
weapon.sub.priority = 1
weapon.main.priority = 0
end
equip(weapon)
end
end
if state.TreasureHunter.value then
equip(sets.TreasureHunter)
end
end
function job_buff_change(buff, gain)
if state.Buff[buff] ~= nil then
state.Buff[buff] = gain
elseif buff == "睡眠" then
if gain then -- 睡眠状態
equip({main="カリブルヌス"})
end
end
end
function customize_idle_set(idleSet)
if state.WeaponLock.value then
local weapon = sets.Weapons[state.Weapons.value]
if player.equipment.sub == weapon.main.name then
weapon.sub.priority = 1
weapon.main.priority = 0
end
idleSet = set_combine(idleSet, weapon)
end
return idleSet
end
function customize_melee_set(meleeSet)
local weapon = sets.Weapons[state.Weapons.value]
meleeSet = set_combine(meleeSet, weapon)
return meleeSet
end
function job_self_command(cmdParams, eventArgs)
if cmdParams[1] == 'lockstyleset' then
send_command('input /lockstyleset 21;')
end
end
装備セット部分
function init_gear_sets()
sets.buff['ブルーバースト'] = {feet="HSバシュマク+2"}
sets.buff['ブルーチェーン'] = {}
sets.buff['コンバージェンス'] = {}
sets.buff['ディフュージョン'] = {feet="LLチャルク+3"}
sets.buff['エンチェーンメント'] = {}
sets.buff['エフラックス'] = {legs="HSタイト+2"}
sets.Weapons = {}
sets.Weapons.Tizona = { main={name="ティソーナ"}, sub={ name="サクパタソード"}}
sets.Weapons.Naegling = { main={name="ネイグリング"}, sub={ name="サクパタソード"}}
sets.Weapons.Maxentius = { main={name="マクセンチアス"}, sub={ name="サクパタソード"}}
sets.Weapons.D1 = { main={name="クトゥルブナイフ"}, sub={ name="幽世の短剣"}}
sets.TreasureHunter = {
ammo="完璧な幸運の卵",
legs={ name="ヘルクリアトラウザ", augments={'CHR+15','"Resist Silence"+4','"Treasure Hunter"+2','Accuracy+2 Attack+2',}},
waist="チャークベルト",
}
sets.idle = {
main={ name="シャルウル", augments={'Evasion+15','Phys. dmg. taken -4%','AGI+17',}},
sub={ name="シャルウル", augments={'Evasion+15','Phys. dmg. taken -4%','AGI+17',}},
ammo="アマークラスター",
head="ニャメヘルム",
body="ニャメメイル",
hands="ニャメガントレ",
legs="ニャメフランチャ",
feet="ニャメソルレット",
neck={ name="バーシチョーカー+1", augments={'Path: A',}},
waist="スヴェルグーリズ+1",
left_ear="エアバニピアス",
right_ear="インフューズピアス",
left_ring="守りの指輪",
right_ring="シュネデックリング",
back={ name="ロスメルタケープ", augments={'AGI+20','Eva.+20 /Mag. Eva.+20','Evasion+10','Evasion+15',}},
}
sets.idle.Refresh = set_combine(sets.idle, {
ammo="ストンチタスラム+1",
head={ name="ヘルクリアヘルム", augments={'Weapon skill damage +2%','AGI+6','"Refresh"+2','Accuracy+9 Attack+9',}},
body="HSミンタン+2",
hands={ name="ヘルクリアグローブ", augments={'Spell interruption rate down -6%','Attack+5','"Refresh"+2','Accuracy+8 Attack+8',}},
legs={ name="ヘルクリアトラウザ", augments={'Pet: VIT+10','"Subtle Blow"+10','"Refresh"+2','Accuracy+8 Attack+8',}},
feet={ name="ヘルクリアブーツ", augments={'"Mag.Atk.Bns."+17','STR+9','"Refresh"+2',}},
neck="シビルスカーフ",
waist="プラチナモグベルト",
})
sets.engaged = {
ammo="コイストボダー",
head="マリグナスシャポー",
body="マリグナスタバード",
hands="マリグナスグローブ",
legs="マリグナスタイツ",
feet="マリグナスブーツ",
neck={ name="ミラージストール+2", augments={'Path: A',}},
waist="霊亀腰帯",
left_ear="素破の耳",
right_ear={ name="ハシシンピアス+2", augments={'System: 1 ID: 1676 Val: 0','Accuracy+20','Mag. Acc.+20','"Dbl.Atk."+8','STR+15 INT+15',}},
left_ring="シーリチリング+1",
right_ring="エポナリング",
back={ name="ロスメルタケープ", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}},
}
-- --------------------------------------
-- precast
-- --------------------------------------
sets.precast.JA['アジュールロー'] = {hands="LLバズバンド+1"}
sets.precast.FC = {
ammo="サピエンスオーブ",
head={ name="カマインマスク+1", augments={'Accuracy+20','Mag. Acc.+12','"Fast Cast"+4',}},
body="ピンガチュニック+1",
hands="HSバズバンド+2",
legs="ピンガズボン",
neck="オルンミラトルク",
waist="プラチナモグベルト",
left_ear={ name="オノワイヤリング+1", augments={'Path: A',}},
left_ring={ name="ゼラチナスリング+1", augments={'Path: A',}},
right_ring="メダダリング",
back={ name="フィフォレケープ+1", augments={'Path: A',}},
}
sets.precast.FC['青魔法']=set_combine(sets.precast.FC,{body="HSミンタン+2"})
sets.precast.WS.Critical = {
ammo="コイストボダー",
head={ name="ブリスタサリット+1", augments={'Path: A',}},
body="エンフォサハーネス",
hands="HSバズバンド+2",
legs="HSタイト+2",
feet="セレオイドグリーヴ",
neck={ name="ミラージストール+2", augments={'Path: A',}},
waist="フォシャベルト",
left_ear="オドルピアス",
right_ear={ name="ハシシンピアス+2", augments={'System: 1 ID: 1676 Val: 0','Accuracy+20','Mag. Acc.+20','"Dbl.Atk."+8','STR+15 INT+15',}},
left_ring="イラブラットリング",
right_ring="エポナリング",
back={ name="ロスメルタケープ", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}},
}
sets.precast.WS.Damage = {
ammo="コイストボダー",
head="HSカヴク+2",
body="ASジュバ+3",
hands="HSバズバンド+2",
legs="HSタイト+2",
feet={ name="LLチャルク+3", augments={'Enhances "Diffusion" effect',}},
neck={ name="ミラージストール+2", augments={'Path: A',}},
waist={ name="セールフィベルト+1", augments={'Path: A',}},
left_ear={ name="胡蝶のイヤリング", augments={'Accuracy+4','TP Bonus +250',}},
right_ear={ name="ハシシンピアス+2", augments={'System: 1 ID: 1676 Val: 0','Accuracy+20','Mag. Acc.+20','"Dbl.Atk."+8','STR+15 INT+15',}},
left_ring="イラブラットリング",
right_ring="エパミノダスリング",
back={ name="ロスメルタケープ", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%',}},
}
sets.precast.WS.Magic = {
ammo="ペムフレドタスラム",
head="HSカヴク+2",
body="HSミンタン+2",
hands="HSバズバンド+2",
legs="HSタイト+2",
feet="HSバシュマク+2",
neck="シビルスカーフ",
waist="オルペウスサッシュ",
left_ear="王将の耳飾り",
right_ear="フリオミシピアス",
left_ring="エパミノダスリング",
right_ring="メダダリング",
back={ name="オリストケープ+1", augments={'Path: A',}},
}
sets.precast.WS['レクイエスカット'] = set_combine(sets.precast.WS.MultDamagei, {})
sets.precast.WS['シャンデュシニュ'] = set_combine(sets.precast.WS.Critical, {})
sets.precast.WS['サベッジブレード'] = set_combine(sets.precast.WS.Damage, {})
sets.precast.WS['エクスピアシオン'] = set_combine(sets.precast.WS.Damage, {})
sets.precast.WS['ブラックヘイロー'] = set_combine(sets.precast.WS.Damage, {})
sets.precast.WS['サンギンブレード'] = set_combine(sets.precast.WS.Magic, {})
-- --------------------------------------
-- midcast
-- --------------------------------------
sets.midcast['強化魔法'] = {
head={ name="テルキネキャップ", augments={'"Conserve MP"+5','Enh. Mag. eff. dur. +10',}},
body={ name="テルキネシャジュブ", augments={'"Conserve MP"+5','Enh. Mag. eff. dur. +10',}},
hands={ name="テルキネグローブ", augments={'"Cure" potency +7%','Enh. Mag. eff. dur. +10',}},
legs={ name="テルキネブラコーニ", augments={'"Conserve MP"+5','Enh. Mag. eff. dur. +10',}},
feet={ name="テルキネピガッシュ", augments={'"Conserve MP"+5','Enh. Mag. eff. dur. +10',}},
neck="インカンタートルク",
waist="オリンポスサッシュ",
left_ear="アンドアーピアス",
left_ring="スティキニリング+1",
right_ring="スティキニリング+1",
back={ name="フィフォレケープ+1", augments={'Path: A',}},
}
sets.midcast['アクアベール'] = set_combine(sets.midcast['強化魔法'] ,{
head={ name="AMコイフ+1", augments={'MP+80','Mag. Acc.+20','"Mag.Atk.Bns."+20',}},
legs="シェダルサラウィル",
waist="エンパチコスロープ",
})
sets.midcast.Cure={
ammo="ストンチタスラム+1",
head="ニャメヘルム",
body="ピンガチュニック+1",
hands={ name="テルキネグローブ", augments={'"Cure" potency +7%','Enh. Mag. eff. dur. +10',}},
legs="ピンガズボン",
feet="ニャメソルレット",
neck={ name="アンムーヴカラー+1", augments={'Path: A',}},
waist="プラチナモグベルト",
left_ear={ name="オノワイヤリング+1", augments={'Path: A',}},
left_ring={ name="ゼラチナスリング+1", augments={'Path: A',}},
back="ソレムニティケープ",
}
sets.midcast.BlueHealing=sets.midcast.Cure
sets.midcast.BlueMagical = {
main="マクセンチアス",
sub="ブンジロッド",
ammo={ name="ガストリタスラム+1", augments={'Path: A',}},
head="HSカヴク+2",
body="HSミンタン+2",
hands="HSバズバンド+2",
legs="HSタイト+2",
feet="HSバシュマク+2",
neck={ name="ミラージストール+2", augments={'Path: A',}},
waist="オルペウスサッシュ",
left_ear="王将の耳飾り",
right_ear="フリオミシピアス",
left_ring={ name="メタモルリング+1", augments={'Path: A',}},
right_ring="メダダリング",
back={ name="オリストケープ+1", augments={'Path: A',}},
}
sets.midcast.BlueMagicAcc = {
main="マクセンチアス",
sub="ブンジロッド",
ammo="ペムフレドタスラム",
head="HSカヴク+2",
body="HSミンタン+2",
hands="HSバズバンド+2",
legs="HSタイト+2",
feet="HSバシュマク+2",
neck={ name="ミラージストール+2", augments={'Path: A',}},
waist="エスカンストーン",
left_ear="昏黄の耳飾り",
right_ear={ name="ハシシンピアス+2", augments={'System: 1 ID: 1676 Val: 0','Accuracy+20','Mag. Acc.+20','"Dbl.Atk."+8','STR+15 INT+15',}},
left_ring={ name="メタモルリング+1", augments={'Path: A',}},
right_ring="メダダリング",
back={ name="オリストケープ+1", augments={'Path: A',}},
}
sets.midcast.BlueBuff = {
ammo="マーヴィタスラム",
head={ name="LLケフィエ+3", augments={'Enhances "Convergence" effect',}},
body="ASジュバ+3",
hands="HSバズバンド+2",
legs="HSタイト+2",
feet={ name="LLチャルク+3", augments={'Enhances "Diffusion" effect',}},
neck={ name="ミラージストール+2", augments={'Path: A',}},
waist="プラチナモグベルト",
left_ear={ name="オノワイヤリング+1", augments={'Path: A',}},
right_ear={ name="ハシシンピアス+2", augments={'System: 1 ID: 1676 Val: 0','Accuracy+20','Mag. Acc.+20','"Dbl.Atk."+8','STR+15 INT+15',}},
left_ring="スティキニリング+1",
right_ring="スティキニリング+1",
back={ name="コンフラワーケープ", augments={'MP+23','Accuracy+3','Blue Magic skill +10',}},
}
sets.midcast['夢想花'] = set_combine(sets.midcast.BlueMagicAcc,sets.TreasureHunter)
sets.midcast['クルエルジョーク'] = set_combine(sets.midcast.BlueMagicAcc,{main="ティソーナ"})
sets.midcast['サドンランジ'] = set_combine(sets.midcast.BlueMagicAcc,{main="ティソーナ"})
sets.midcast['マジックハンマー'] = set_combine(sets.midcast.BlueMagical ,sets.midcast.BlueMagicAcc)
sets.midcast['エントゥーム'] = set_combine(sets.midcast.BlueMagical ,{neck="クアンプネックレス",left_ring="ゼラチナスリング+1"})
sets.midcast['エンバームアース'] = set_combine(sets.midcast.BlueMagical ,{neck="クアンプネックレス",left_ring="ゼラチナスリング+1"})
sets.midcast['テネブラルクラッシュ'] = set_combine(sets.midcast.BlueMagical ,{head="妖蟲の髪飾り+1",ring2="アルコンリング"})
sets.midcast['アンビルライトニング'] = set_combine(sets.midcast.BlueMagical ,{left_ring="イラブラットリング",back={ name="ロスメルタケープ", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','Crit.hit rate+10',}}})
sets.midcast['精霊魔法'] = sets.midcast.BlueMagical
end
私の青魔道士の説明
私の青魔道士は、主にオーメン詰み用に調整しています。
この装備で一周約8分弱で、2グループくらいまでなら問題なく集められます。夢想花にトレハンを仕込んでいますので、全体にトレハン4を乗せて平均10個くらいの残魂を得られる感じです。
青魔道士でアンバスなどのコンテンツに出す機会もそれなりにありますので、いろいろ小細工を仕込んでいます。
小細工その①武器の固定による点滅防止
私はサブキャラを引き連れて歩くことが多いため、装備切り替えによる点滅を可能な限り避けています。
待機装備と魔法は基本的に片手棍を装備しており、抜刀時は片手剣になります。殴ったり魔法を唱えたりするコンテンツでは着替えによる点滅でサブキャラがどこかに走って行ってしまいますので、そのための措置として、midcastに次の処理を組み込みました。
抜刀ありきのコンテンツの場合はstate.WeaponLock = M(false, ‘武器固定’)で武器の着替えを行わないようにしています。
state.WeaponLockがtrueの場合、魔法詠唱してもアビリティを使っても武器は固定されるようになっています。
if state.WeaponLock.value then
local weapon = sets.weapons[state.Weapons.value]
if player.equipment.sub == weapon.main.name then
weapon.sub.priority = 1
weapon.main.priority = 0
end
equip(weapon)
end
これと同じ処理をcustomize_idle_setにもセットしていますので、納刀してもロックした状態の武器を維持できます。
function customize_idle_set(idleSet)
if state.WeaponLock.value then
local weapon = sets.Weapons[state.Weapons.value]
if player.equipment.sub == weapon.main.name then
weapon.sub.priority = 1
weapon.main.priority = 0
end
idleSet = set_combine(idleSet, weapon)
end
return idleSet
end
DressUpアドオンを活用すれば、こんなことをしなくても点滅を防げるのですが、あまりにも不自然で周りから突っ込まれたときに言い訳できないので、武器固定のフラグを切り替えて対応しています。
小細工その②トレハンの常時化
夢想花にトレハンを仕込んでいるのですが、リキャストが間に合わず素材集めで待ち時間が発生します。
そんな時のために、どんなアクションでもトレハン組み込むフラグがstate.TreasureHunterです。このフラグがtrueの場合はトレハン4のサブダクを連打することができますので、シーフ並に素材集めすることが可能になります。
if state.TreasureHunter.value then
equip(sets.TreasureHunter)
end
小細工その③睡眠対策
睡眠による行動阻害対策として、第一段階のプライムウェポンに着替える処理です。
これにより、睡眠したと同時に起きられます。
function job_buff_change(buff, gain)
if state.Buff[buff] ~= nil then
state.Buff[buff] = gain
elseif buff == "睡眠" then
if gain then -- 睡眠状態
equip({main="カリブルヌス"})
end
end
end
あまりにも瞬時に起きてしまうので、周りに疑われてしまう可能性がありますので、様子見しながら実装しています。ソロプレイなら問題ありませんが、パーティプレイはそれなりに気を使いながらプレイしています。
小細工その④キーバインド
f1キーにIdleModeの切り替え、f2キーに武器の持ち替えをするようにキーバインドを設定しています。このバインドはジョブチェンジで解除されます。
function user_setup()
send_command('bind f1 gs c cycle IdleMode')
send_command('bind f2 gs c cycle Weapons')
send_command('wait 2; gs c set IdleMode Normal;')
end
function user_unload()
send_command('unbind f1')
send_command('unbind f2')
send_command('input /si blank;')
end
直接ファンクションキーを押してもいいのですが、私はそれすら面倒くさいので、JoyToKeyを使ってコントローラーのスタートとセレクトボタンに割り当てています。
殴り装備による武器変更
私のメイン武器はティソーナ。そのほかにネイグリングと打用にマクセンチアス、あとラーニング用にD1武器です。
これらを状況に応じて切り替えて使っています。
state.Weapons = M{'Tizona','Naegling','Maxentius','D1'}
sets.Weapons = {}
sets.Weapons.Tizona = { main={name="ティソーナ"}, sub={ name="サクパタソード"}}
sets.Weapons.Naegling = { main={name="ネイグリング"}, sub={ name="サクパタソード"}}
sets.Weapons.Maxentius = { main={name="マクセンチアス"}, sub={ name="サクパタソード"}}
sets.Weapons.D1 = { main={name="クトゥルブナイフ"}, sub={ name="幽世の短剣"}}
local weapon = sets.weapons[state.Weapons.value]
武器の持ち替えはFF11マクロに仕込んでいます。
/console gs c cycle Weapons
マクロを一回押すとstate.Weaponsが順番にサイクルします。サイクルした情報はMote-libsで管理されていますので、最終サイクルした武器が適用される仕組みです。
青魔法のセット
AzureSetsで青魔法を管理しています。
現在次のセットを状況別に使い分けています。
- ambus(アンバス用)
- magic(オーメン詰みや範囲焼き用)
- physical(物理攻撃コンテンツ用)
- sub(サポ青盾用)
<?xml version="1.1" ?>
<settings>
<global>
<spellsets>
<ambus>
<slot01>エラチックフラッター</slot01>
<slot02>偃月刃</slot02>
<slot03>デルタスラスト</slot03>
<slot05>夢想花</slot05>
<slot06>オカルテーション</slot06>
<slot07>t.アッサルト</slot07>
<slot08>重い一撃</slot08>
<slot09>アクリッドストリーム</slot09>
<slot10>サドンランジ</slot10>
<slot11>ファンタッド</slot11>
<slot12>n.メディテイト</slot12>
<slot13>ディフュージョンレイ</slot13>
<slot15>f.ホールド</slot15>
<slot16>シアリングテンペスト</slot16>
<slot17>テネブラルクラッシュ</slot17>
<slot18>アンビルライトニング</slot18>
<slot19>ホワイトウィンド</slot19>
<slot20>ブランクゲイズ</slot20>
</ambus>
<magic>
<slot01>エラチックフラッター</slot01>
<slot02>偃月刃</slot02>
<slot03>デルタスラスト</slot03>
<slot04>エントゥーム</slot04>
<slot05>サブダックション</slot05>
<slot06>夢想花</slot06>
<slot07>マジックハンマー</slot07>
<slot08>オカルテーション</slot08>
<slot09>t.アッサルト</slot09>
<slot10>重い一撃</slot10>
<slot11>エンプティスラッシュ</slot11>
<slot12>コクーン</slot12>
<slot13>スペクトラルフロー</slot13>
<slot14>マジックフルーツ</slot14>
<slot15>s.ドライバー</slot15>
<slot16>レテナグレア</slot16>
<slot17>t.アップヒーヴ</slot17>
<slot18>アンビルライトニング</slot18>
</magic>
<physical>
<slot01>エラチックフラッター</slot01>
<slot02>偃月刃</slot02>
<slot03>デルタスラスト</slot03>
<slot04>エントゥーム</slot04>
<slot06>夢想花</slot06>
<slot08>オカルテーション</slot08>
<slot09>t.アッサルト</slot09>
<slot10>重い一撃</slot10>
<slot11>アクリッドストリーム</slot11>
<slot12>サドンランジ</slot12>
<slot13>ファンタッド</slot13>
<slot14>n.メディテイト</slot14>
<slot15>ディフュージョンレイ</slot15>
<slot16>アンビルライトニング</slot16>
<slot17>マジックフルーツ</slot17>
<slot18>シアリングテンペスト</slot18>
<slot19>テネブラルクラッシュ</slot19>
</physical>
<sub>
<slot01>スティンキングガス</slot01>
<slot02>リフュエリング</slot02>
<slot03>磁鉄粉</slot03>
<slot04>メタルボディ</slot04>
<slot05>コクーン</slot05>
<slot06>カースドスフィア</slot06>
<slot07>シープソング</slot07>
<slot08>ブランクゲイズ</slot08>
<slot09>ジェタチュラ</slot09>
<slot10>ガイストウォール</slot10>
<slot11>フライトフルロア</slot11>
<slot12>サペリフィック</slot12>
<slot13>アイスブレイク</slot13>
</sub>
</spellsets>
</global>
</settings>
魔法セットの切り替えと保存
魔法のセットは「aset save セット名」、魔法のロードは「aset spellset セット名」で行います。
このコマンドをFF11のマクロに登録して使い分けています。
/console aset spellset ambus
/console aset spellset magic
/console aset spellset physical
コメント