私の学者装備とマクロを紹介します。
マクロ
私の学者マクロは4個だけで構成しています。
- パレット1:回復
- パレット2:強化
- パレット3:精霊
- パレット4:弱体
パレット1:回復
パレット1は回復と状態異常直しのパレットです。
攻ケア①は対アンデッド用の魔攻ケアルで意気昂然の章をセットで使うマクロで、攻ケア②は意気昂然の章なしのケアルマクロです。lockstyleマクロは攻撃マクロ点滅対策としてのロックスタイルセットです。
パレット2:強化
パレット2は強化魔法のパレットです。
オーラマクロは次のようにしています。
パレット3:精霊
パレット3は精霊系のパレットです。
詳しくは精霊系のマクロパレット節約術に書いておりますが、スクリプトによってパレットを節約していますので、すべての属性をこのパレットだけで完結させています。
連携①は震天トス、連携②は震天〆として使用しています。
パレット4:弱体
パレット4は弱体系のパレットです。
◆警告はパレット3に含めたかったのですが、設置するスペースがないので仕方なくパレット4に設置しています。
パレット10:その他
パレット10はその他諸々のパレットです。
セイズルはセイズルコタルディで精霊を詠唱するためのマクロで、主にジョブポなどでMBする場合に使います。
ベガリーはベガリーインスペクターで連携作成担当するときに使用するマクロです。ベガリーでは着替え無効になる時があるので、FC装備に着替えられず、震天連携を作れなくなることがあります。そのための措置として、常時FC装備で移動するためのマクロです。
6連携はベガリーお題の6連を作成するスクリプトを実行するためのマクロです。
呼び出しているマクロは次の通りです。
input /ja 震天動地の章 <me>
wait 1
input /ma エアロ <lastst>
wait 1
input /p 連携:2/6
wait 3
input /ja 震天動地の章 <me>
wait 1
input /ma ストーン <lastst>
wait 1
input /p 連携:3/6
wait 3
input /ja 震天動地の章 <me>
wait 1
input /ma エアロ <lastst>
wait 1
input /p 連携:4/6
wait 3
input /ja 震天動地の章 <me>
wait 1
input /ma ストーン <lastst>
wait 1
input /p 連携:5/6
wait 3
input /ja 震天動地の章 <me>
wait 1
input /ma エアロ <lastst>
wait 1
input /p 連携:6/6
ソースコード
Mote-libsでは、ジョブロジック部分(ジョブ名.lua)と装備セット部分(ジョブ名_gear.lua)を切り分けていますので、次のような階層構造になっています。
GearSwap/
└ data/
├ SCH.lua
└ キャラクター名/
└SCH_gear.lua
ジョブロジック部分
function get_sets()
mote_include_version = 2
include('Mote-Include.lua')
set_language('japanese')
end
-- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
function job_setup()
state.OffenseMode:options('Normal')
state.IdleMode:options('Normal')
state.Weapons = M{'White','Black'}
state.VagaryMode = M(false, 'Vagary Task')
state.Seidr = M(false, 'セイズルコタルディ')
state.Buff['気炎万丈の章'] = buffactive['気炎万丈の章'] or false
state.Buff['意気昂然の章'] = buffactive['意気昂然の章'] or false
state.Buff['令狸執鼠の章'] = buffactive['令狸執鼠の章'] or false
state.Buff['震天動地の章'] = buffactive['震天動地の章'] or false
state.Buff['簡素清貧の章'] = buffactive['簡素清貧の章'] or false
state.Buff['勤倹小心の章'] = buffactive['勤倹小心の章'] or false
state.Buff['電光石火の章'] = buffactive['電光石火の章'] or false
state.Buff['疾風迅雷の章'] = buffactive['疾風迅雷の章'] or false
state.Buff['虚誘掩殺の策'] = buffactive['虚誘掩殺の策'] or false
state.Buff['机上演習:蓄積中'] = buffactive['机上演習:蓄積中'] or false
include('weather_obi')
end
-------------------------------------------------------------------------------------------------------------------
-- User setup functions for this job. Recommend that these be overridden in a sidecar file.
-------------------------------------------------------------------------------------------------------------------
-- Setup vars that are user-dependent. Can override this function in a sidecar file.
function user_setup()
send_command('wait 5; gs c set IdleMode Normal; gs c lockstyleset')
end
function user_unload()
send_command('input /si blank;')
end
function job_post_midcast(spell, action, spellMap, eventArgs)
if spell.skill == '強化魔法' then
if state.Buff['令狸執鼠の章'] and spell.type =='WhiteMagic' then
equip(sets.buff['令狸執鼠の章'])
end
elseif spell.skill == '精霊魔法' then
equip(get_hachirin(spell.element))
if state.Seidr.value then
equip({body="セイズルコタルディ"})
end
if state.Buff['気炎万丈の章'] then
equip(sets.buff['気炎万丈の章'])
end
if state.Buff['震天動地の章'] then
if state.VagaryMode.value then
equip(sets.Vagary)
else
equip(sets.midcast.Immanence)
end
end
if state.Buff['虚誘掩殺の策'] and spell.element == world.weather_element then
equip(sets.buff['虚誘掩殺の策'])
end
elseif spell.skill == '回復魔法' then
if (spellMap == 'Cure' or spellMap == 'Curaga') and spell.target.type == 'MONSTER' then
equip(set_combine(sets.midcast['精霊魔法'],get_hachirin(spell.element),{main="デイブレイクワンド", sub="アムラピシールド"}))
if state.Buff['意気昂然の章'] then
equip(sets.buff['意気昂然の章'])
end
else
equip(set_combine(get_hachirin(spell.element),{back="黄昏の羽衣"}))
end
end
end
function job_buff_change(buff, gain)
if buff == "机上演習:蓄積中" then
handle_equipping_gear(player.status)
elseif buff == "睡眠" then
if gain then -- 睡眠状態
equip({main="プライムスタッフ"})
end
end
end
function customize_idle_set(idleSet)
local weapon = sets.weapons[state.Weapons.value]
idleSet = set_combine(idleSet, weapon)
if state.Buff['机上演習:蓄積中'] then
idleSet = set_combine(idleSet, sets.buff['机上演習'])
elseif state.VagaryMode.value then
idleSet = set_combine(idleSet, sets.Vagary)
end
return idleSet
end
function customize_melee_set(meleeSet)
local weapon = sets.weapons[state.Weapons.value]
if player.equipment.sub == weapon.main.name then
weapon.sub.priority = 1
weapon.main.priority = 0
end
meleeSet = set_combine(meleeSet, weapon)
return meleeSet
end
function job_self_command(cmdParams, eventArgs)
if cmdParams[1] == 'lockstyleset' then
send_command('input /lockstyleset 41;')
elseif cmdParams[1] == 'white' then
send_command('gs c set Weapons white')
send_command('input /lockstyleset 52;')
elseif cmdParams[1] == 'black' then
send_command('gs c set Weapons black')
send_command('input /lockstyleset 53;')
elseif cmdParams[1] == 'aspir' then
local recasts = windower.ffxi.get_spell_recasts()
local recast_time_a2 = recasts[248]/60
local recast_time_a = recasts[247]/60
if recast_time_a2 == 0 then
send_command('input /magic '..windower.to_shift_jis('アスピルII')..' <stnpc>')
elseif recast_time_a == 0 then
send_command('input /magic '..windower.to_shift_jis('アスピル')..' <stnpc>')
else
windower.add_to_chat(30, 'アスピル リキャスト---> II: %.1fs, I: %.1fs':format(recast_time_a2, recast_time_a))
end
elseif cmdParams[1] == 'sc' then
if cmdParams[2] == 'start' then
disp_start_skillchain_message(cmdParams[3])
elseif cmdParams[2] == 'end' then
disp_end_skillchain_message(cmdParams[3])
else
windower.add_to_chat(123,'invalid argment: ' .. command)
end
end
end
sc_mb = {
['溶解'] = {'炎'},
['硬化'] = {'氷'},
['炸裂'] = {'風'},
['切断'] = {'土'},
['衝撃'] = {'雷'},
['振動'] = {'水'},
['貫通'] = {'光'},
['収縮'] = {'闇'},
['核熱'] = {'炎', '光'},
['重力'] = {'土', '闇'},
['分解'] = {'風', '雷'},
['湾曲'] = {'氷', '水'},
}
function get_auto_translate_char_squence(phrase)
local at_start = 0xFD
local at_end = 0xFD
local at_type = 0x02
local at_lang = 0x01
local phrase_id = gearswap.res.auto_translates:with('ja', phrase).id
if phrase_id then
local phrase_id_upper = bit.band(bit.rshift(phrase_id, 8), 0xFF)
local phrase_id_lower = bit.band(phrase_id, 0xFF)
if phrase_id_lower == 0x00 then
return nil
else
return string.char(at_start, at_type, at_lang, phrase_id_upper, phrase_id_lower, at_end)
end
end
return nil
end
function disp_start_skillchain_message(sc_name)
local sc_msg = get_auto_translate_char_squence(sc_name)
local sc_mb_msg = {}
for i, v in ipairs(sc_mb[sc_name]) do
sc_mb_msg[i] = get_auto_translate_char_squence(v)
end
local msg = 'input /p '..sc_msg..windower.to_shift_jis(' 1/2')..' MB:'
for i,v in ipairs(sc_mb_msg) do
msg = msg..v
end
msg = msg..windower.to_shift_jis(' → ')..' <t>'
send_command(msg)
end
function disp_end_skillchain_message(sc_name)
local sc_msg = get_auto_translate_char_squence(sc_name)
local sc_mb_msg = {}
for i, v in ipairs(sc_mb[sc_name]) do
sc_mb_msg[i] = get_auto_translate_char_squence(v)
end
local msg = 'input /p '..sc_msg..windower.to_shift_jis(' 2/2')..' MB:'
for i,v in ipairs(sc_mb_msg) do
msg = msg..v
end
msg = msg..windower.to_shift_jis(' → ')..' <t>'..windower.to_shift_jis(' ※<recast=震天動地の章>')
send_command(msg)
end
装備セット部分
function init_gear_sets()
sets.buff['机上演習'] = {
head="ACボード+3",
body="PDガウン+3",
waist="エンブラサッシュ",
left_ear="サバントピアス",
}
sets.buff['気炎万丈の章'] = {head="ABボネット+3"}
sets.buff['意気昂然の章'] = {head="ABボネット+3"}
sets.buff['令狸執鼠の章'] = {hands='ABブレーサー+3'}
sets.buff['震天動地の章'] = {}
sets.buff['簡素清貧の章'] = {legs="ABパンツ+3"}
sets.buff['勤倹小心の章'] = {legs="ABパンツ+3"}
sets.buff['電光石火の章'] = {feet="PDローファー+1"}
sets.buff['疾風迅雷の章'] = {feet="PDローファー+1"}
sets.buff['虚誘掩殺の策'] = {fet="ABローファー+3"}
sets.precast.JA['連環計'] = {legs="PDパンツ+3"}
sets.precast.JA['大悟徹底'] = {body="PDガウン+3"}
sets.midcast['陣頭指揮'] = {feet="PDローファー+1"}
sets.weapons = {}
sets.weapons.White = { main={name="マリグナスポール"},sub={ name="エンキストラップ"}}
sets.weapons.Black = { main={name="デイブレイクワンド"},sub={ name="アムラピシールド"}}
sets.idle = {
ammo="ストンチタスラム+1",
head="ABボネット+3",
body="ABガウン+3",
hands="ニャメガントレ",
legs="ABパンツ+3",
feet="ニャメソルレット",
neck="シビルスカーフ",
waist="キャリアーサッシュ",
left_ear="エテオレートピアス",
right_ear="ハーティーピアス",
left_ring="ピュリティーリング",
right_ring="シュネデックリング",
back={ name="ルッフケープ", augments={'Eva.+20 /Mag. Eva.+20','Occ. inc. resist. to stat. ailments+10',}},
}
sets.Vagary=
{
main="ハーミットワンド",
sub="モーグリガード",
ammo="サピエンスオーブ",
head={ name="PDボード+3", augments={'Enh. "Altruism" and "Focalization"',}},
body="ピンガチュニック+1",
hands="ACブレーサー+2",
legs="ピンガズボン",
feet="ACローファー+3",
neck="オルンミラトルク",
waist="エンブラサッシュ",
left_ear="マリグナスピアス",
right_ear="エンチャンピアス+1",
left_ring="キシャールリング",
back={ name="フィフォレケープ+1", augments={'Path: A',}},
}
sets.precast.FC = {
ammo="サピエンスオーブ",
head={ name="PDボード+3", augments={'Enh. "Altruism" and "Focalization"',}},
body="ピンガチュニック+1",
hands="ACブレーサー+2",
legs="ピンガズボン",
feet="ACローファー+3",
neck="オルンミラトルク",
waist="エンブラサッシュ",
left_ear="マリグナスピアス",
right_ear="エンチャンピアス+1",
left_ring="キシャールリング",
right_ring="メダダリング",
back={ name="フィフォレケープ+1", augments={'Path: A',}},
}
sets.precast.FC['ディスペガ'] = set_combine( sets.precast.FC,{main="デイブレイクワンド",})
sets.precast.FC['インパクト'] = set_combine( sets.precast.FC,{head=empty,body="クレパスクラプリス",})
sets.precast.WS['ロッククラッシャー'] = set_combine(sets.midcast['精霊魔法'] , {neck="クアンプネックレス"})
sets.precast.WS['アースクラッシャー'] = set_combine(sets.midcast['精霊魔法'] , {neck="クアンプネックレス"})
sets.precast.WS['カタクリスム'] = set_combine(sets.midcast['精霊魔法'] , {head="妖蟲の髪飾り+1",right_ring="アルコンリング",})
sets.precast.WS['シャインストライク '] = set_combine(sets.midcast['精霊魔法'] , {})
sets.precast.WS['セラフストライク'] = set_combine(sets.midcast['精霊魔法'] , {})
sets.precast.WS['フラッシュノヴァ'] = set_combine(sets.midcast['精霊魔法'] , {})
sets.midcast.Cure = {
main={ name="ムサ", augments={'Path: C',}},
sub="コーンスー",
ammo="ストンチタスラム+1",
head={ name="ヴァニヤフード", augments={'MP+50','"Cure" potency +7%','Enmity-6',}},
body={ name="ロゼトジャズラン+1", augments={'Path: A',}},
hands="ABブレーサー+3",
legs="ピンガズボン",
feet={ name="ヴァニヤクロッグ", augments={'MP+50','"Cure" potency +7%','Enmity-6',}},
neck="オルンミラトルク",
waist="コーネリアの黒帯",
left_ear="シテレアパール",
right_ear={ name="アバテルピアス+1", augments={'System: 1 ID: 1676 Val: 0','Mag. Acc.+11','Enmity-1',}},
left_ring="スティキニリング+1",
right_ring="スティキニリング+1",
back="サウマタージケープ",
}
sets.midcast['弱体魔法'] = {
main="ブンジロッド",
sub="アムラピシールド",
ammo="クォーツタスラム+1",
head="ABボネット+3",
body="ABガウン+3",
hands="ABブレーサー+3",
legs="ABパンツ+3",
feet="ACローファー+3",
neck={ name="アギュトストール+2", augments={'Path: A',}},
waist="オブシテナサッシュ",
left_ear="マリグナスピアス",
right_ear={ name="アバテルピアス+1", augments={'System: 1 ID: 1676 Val: 0','Mag. Acc.+11','Enmity-1',}},
left_ring="キシャールリング",
right_ring="メダダリング",
back={ name="オリストケープ+1", augments={'Path: A',}},
}
sets.midcast['ディスペガ'] = set_combine(sets.midcast['弱体魔法'] ,{main="デイブレイクワンド",})
sets.midcast['インパクト'] = set_combine(sets.midcast['弱体魔法'],{head=empty,body="クレパスクラプリス",})
sets.midcast['精霊魔法'] = {
main="ブンジロッド",
sub="アムラピシールド",
ammo={ name="ガストリタスラム+1", augments={'Path: A',}},
head="ABボネット+3",
body="ABガウン+3",
hands="ABブレーサー+3",
legs="ABパンツ+3",
feet="ABローファー+3",
neck={ name="アギュトストール+2", augments={'Path: A',}},
waist="スクリミルコード",
left_ear="王将の耳飾り",
right_ear={ name="アバテルピアス+1", augments={'System: 1 ID: 1676 Val: 0','Mag. Acc.+11','Enmity-1',}},
left_ring={ name="メタモルリング+1", augments={'Path: A',}},
right_ring="メダダリング",
back={ name="ルッフケープ", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','INT+10','"Mag.Atk.Bns."+10',}},
}
sets.midcast.Helix = set_combine(sets.midcast['精霊魔法'] ,{
sub="カルミナス",
waist="スクリミルコード",
back="ブックワームケープ"
})
sets.midcast["光門の計II"] = set_combine(sets.midcast['精霊魔法'] ,{
main="デイブレイクワンド"
})
sets.midcast.Drain = set_combine(sets.midcast['精霊魔法'] ,{
main="ルビカンディティー",
legs={ name="PDパンツ+3", augments={'Enhances "Tabula Rasa" effect',}},
feet={ name="マーリンクラッコー", augments={'Mag. Acc.+30','"Drain" and "Aspir" potency +11','INT+5','"Mag.Atk.Bns."+2',}},
neck="エーラペンダント",
waist="風鳥の帯",
left_ring="エバネセンスリング",
right_ring="アルコンリング",
})
sets.midcast.Immanence={
main="ハーミットワンド",
sub="玄冥盾",
ammo="ストンチタスラム+1",
head={ name="ブリスタサリット+1", augments={'Path: A',}},
body={ name="ロゼトジャズラン+1", augments={'Path: A',}},
hands={ name="ガズブレスレット+1", augments={'Path: A',}},
legs={ name="AMスロップス+1", augments={'MP+80','"Mag.Atk.Bns."+25','Enmity-6',}},
feet="トゥティアサボ",
neck="上級近衛騎士カラー",
waist="コーネリアの黒帯",
left_ear="エテオレートピアス",
right_ear="ハーティーピアス",
left_ring="守りの指輪",
right_ring={ name="ゼラチナスリング+1", augments={'Path: A',}},
back={ name="フィフォレケープ+1", augments={'Path: A',}},
}
sets.midcast['強化魔法'] = {
main={ name="ムサ", augments={'Path: C',}},
sub="コーンスー",
head={ name="テルキネキャップ", augments={'"Conserve MP"+5','Enh. Mag. eff. dur. +10',}},
body={ name="PDガウン+3", augments={'Enhances "Enlightenment" effect',}},
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="エンブラサッシュ",
right_ear="ミミルピアス",
}
sets.midcast.Regen = set_combine(sets.midcast['強化魔法'],{head="ABボネット+3",body="テルキネシャジュブ",back="ブックワームケープ"})
sets.midcast.Refresh = set_combine(sets.midcast['強化魔法'], {head="AMコイフ+1", legs="シェダルサラウィル",})
sets.midcast.BarElement = set_combine(sets.midcast['強化魔法'], {legs="シェダルサラウィル",})
sets.midcast.Phalanx = sets.midcast['強化魔法']
sets.midcast['オーラ'] = sets.midcast['強化魔法']
sets.midcast['ストンスキン'] = set_combine(sets.midcast['強化魔法'], {legs="シェダルサラウィル", neck='ノデンズゴルゲット', left_ear='アースクライピアス', waist="ジーゲルサッシュ",})
sets.midcast['アクアベール'] = set_combine(sets.midcast['強化魔法'], {main="バドースロッド", sub="アムラピシールド", head="AMコイフ+1", legs="シェダルサラウィル"})
sets.midcast['リフレシュ'] = set_combine(sets.midcast['強化魔法'], {head="AMコイフ+1"})
end
コメント