
ナイトのMote-libsコードです。
このコードでは、次のことができます。
- 特性
- バフ効果を高める装備に自動着替え
- 着替え時のHP減少対策
- 睡眠自動解除
- 詠唱中断されにくい魔法詠唱(効果アップ装備着替え)
- マクロ制御
- ヘイト稼ぎ関連
- フラグ制御
- Jazero切り替え
- その他
- ジョブロード時にロックスタイル固定
- ファランクス効果切れの通知
目次
ソースコード
Mote-libsでは、ジョブロジック部分(ジョブ名.lua)と装備セット部分(ジョブ名_gear.lua)を切り分けていますので、次のような階層構造になっています。
GearSwap/
└ data/
├ PLD.lua
└ キャラクター名/
└ PLD_gear.lua
注意点
- GearSwap\libsによしざうるすさんが日本語対応してくれているMote-libsを設置してください。
ジョブロジック
function get_sets()
mote_include_version = 2
include('Mote-Include.lua')
set_language('japanese')
end
function job_setup()
state.Buff['睡眠'] = buffactive['睡眠'] or false
state.Buff["神聖の印"] = buffactive["神聖の印"] or false
end
function user_setup()
-- gs c cycle MainWeapons
state.MainWeapons = M{'Burtgang','Levante'}
-- gs c cycle DefenseMode
state.DefenseMode:options('Physical', 'Magical')
-- gs c cycle IdleMode
state.IdleMode:options('Normal','Refresh','Physical')
init_weaponns()
send_command('bind f3 gs c cycle DefenseMode;')
send_command('wait 5; gs c set IdleMode Normal; gs c lockstyleset;')
end
function user_unload()
send_command('bind f3 gs c cycle OffenseMode;')
end
function job_buff_change(buff, gain)
if state.Buff['睡眠'] then
equip({main="カリブルヌス"})
elseif buff == "ファランクス" and not gain then
windower.add_to_chat(167,'■■■■■ファランクス切れ■■■■■')
end
end
function job_post_precast(spell, action, spellMap, eventArgs)
set_priorities_by_hp()
end
function user_post_midcast(spell, action, spellMap, eventArgs)
if spell.skill == '神聖魔法' then
if state.Buff['神聖の印'] then
equip(set_combine(sets.buff['神聖の印'],sets.Hpboost))
end
end
end
function job_post_midcast(spell, action, spellMap, eventArgs)
set_priorities_by_hp()
local fc=71/100
if player.sub_job == '赤' then
fc = fc + 15/100
end
if fc >= 80/100 then
fc = 80/100
end
if string.find(spell.type, 'Magic') then
equip(sets.midcast.interruption)
local adjust=0.9
local cast_time = (spell.cast_time*(1-fc))*adjust
if spellMap == 'Cure' then
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.Hpboost; gs equip sets.midcast.Cure')
elseif spellMap == 'Phalanx' then
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.Hpboost; gs equip sets.midcast.Phalanx')
elseif spellMap == 'Stoneskin' then
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.Hpboost; gs equip sets.midcast.Stoneskin')
elseif spellMap == 'Regen' then
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.Hpboost; gs equip sets.midcast.Regen')
else
eventArgs.handled = true
send_command('wait '..cast_time..'; gs equip sets.Hpboost; gs equip sets.Enmity')
end
end
end
function customize_idle_set(idleSet)
local weapon = customize_weapon_set()
idleSet = set_combine(idleSet, weapon)
return idleSet
end
function customize_melee_set(meleeSet)
local weapon = customize_weapon_set()
meleeSet = set_combine(meleeSet, weapon)
return meleeSet
end
function customize_weapon_set()
--武器のセット
local weapon = nil
weapon = set_combine(weapon,{main=sets.weapons[state.MainWeapons.value]})
weapon = set_combine(weapon,{sub=sets.defense[state.DefenseMode.value]})
return weapon
end
function job_self_command(cmdParams, eventArgs)
if cmdParams[1] == 'lockstyleset' then
send_command('input /lockstyleset '..lockstyleset)
elseif cmdParams[1] == 'Idle' then
if player.status == 'Idle'then
equip(get_idle_set())
else
equip(get_melee_set())
end
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 recast_time_Stun = spell_recasts[252]/60
local recast_time_abzotac = spell_recasts[275]/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 /ma '..windower.to_shift_jis('フラッシュ')..' <stnpc>')
elseif player.sub_job == '青' and recast_time_Jettatura == 0 then
send_command('input /ma '..windower.to_shift_jis('ジェタチュラ')..' <stnpc>')--0.5
elseif player.sub_job == '青' and recast_time_BlankGaze == 0 then
send_command('input /ma '..windower.to_shift_jis('ブランクゲイズ')..' <stnpc>')--3
elseif player.sub_job == '戦' and recast_time_Provoke == 0 then
send_command('input /ja '..windower.to_shift_jis('挑発')..' <stnpc>')
elseif player.sub_job == '暗' and recast_time_Stun == 0 then
send_command('input /ma '..windower.to_shift_jis('スタン')..' <stnpc>')
elseif player.sub_job == '暗' and recast_time_abzotac == 0 then
send_command('input /ma '..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
local recast_time_Poisonga = spell_recasts[225]/60
if player.sub_job == '青' and recast_time_FrightfulRoar == 0 then
send_command('input /ma '..windower.to_shift_jis('フライトフルロア')..' <stnpc>')--2
elseif player.sub_job == '青' and recast_time_GeistWall == 0 then
send_command('input /ma '..windower.to_shift_jis('ガイストウォール')..' <stnpc>')--3
elseif player.sub_job == '青' and recast_time_Stinking == 0 then
send_command('input /ma '..windower.to_shift_jis('スティンキングガス')..' <stnpc>')--4
elseif player.sub_job == '青' and recast_time_Soporific == 0 then
send_command('input /ma '..windower.to_shift_jis('サペリフィック')..' <stnpc>')--3
elseif player.sub_job == '青' and recast_time_SheepSong == 0 then
send_command('input /ma '..windower.to_shift_jis('シープソ\\ング')..' <stnpc>')--3
elseif player.sub_job == '暗' and recast_time_Poisonga == 0 then
send_command('input /ma '..windower.to_shift_jis('ポイゾガ')..' <stnpc>')--3
end
end
end
function set_priorities_by_hp()
local future,current = gearswap.equip_list,gearswap.equip_list_history
function get_hp(piece)
if piece and type(piece)=='table' and piece.hp and type(piece.hp)=='number' then
return piece.hp
end
return 0
end
for i,v in pairs(future) do
local priority = get_hp(future[i]) - get_hp(current[i])
if type(v) == 'table' then
future[i].priority = priority
else
future[i] = {name=v,priority=priority}
end
end
end
装備セット
function init_weaponns()
--デフォルト武器を設定
send_command('gs c set MainWeapons Burtgang')
send_command('gs c set DefenseMode Physical')
end
function init_gear_sets()
lockstyleset = 121
sets.buff['かばう'] = {head="RVコロネット+1",body="CBサーコート+3"}
sets.buff['神聖の印'] = {feet="CVサバトン+3"}
sets.weapons = {}
sets.weapons.Burtgang = {name="ブルトガング"}
sets.weapons.Levante = {name="レヴァンテダガー"}
sets.defense = {}
sets.defense.Physical = {name="ドゥバン"}
sets.defense.Magical = {name="イージス"}
sets.Hpboost={
neck={ name="アンムーヴカラー+1",priority=14},
waist={ name="プラチナモグベルト",priority=16},
left_ring={ name="月明の指輪",priority=13},
back={ name="月明の羽衣",priority=15},
}
sets.Enmity = {
ammo="サピエンスオーブ",
head={ name="ロースバルブータ+1", augments={'Path: A',},hp=105,},
body={ name="CVキュイラス+3",hp=151,},
hands={ name="SVハントシュ+1", augments={'HP+105','Enmity+9','Potency of "Cure" effect received +15%',},hp=239,},
legs={ name="CBブリーチズ+3", augments={'Enhances "Invincible" effect',},hp=72,},
feet={ name="CVサバトン+3",hp=52},
neck="月光の首飾り",
waist={ name="プラチナモグベルト",hp=300,},
left_ear="無知の耳",
right_ear="クリプティクピアス",
left_ring="アペリエリング+1",
right_ring="アイワツリング",
back={ name="ルディアノスマント", augments={'HP+60','Eva.+20 /Mag. Eva.+20','HP+20','Enmity+10','Chance of successful block +5',},hp=80,},
}
sets.idle = {
ammo="ストンチタスラム+1",
head={ name="CVアーメット+3",hp=145,},
body={ name="アダマンアーマー", hp=182,},
hands={ name="CVガントレ+3", hp=64,},
legs={ name="CVクウィス+3", hp=127,},
feet={ name="RVレギンス+3", hp=82,},
neck={ name="騎士の数珠+2", augments={'Path: A',},hp=60,},
waist="無の腰当",
left_ear={ name="ズワゾピアス+1", augments={'Path: A',},hp=45,priority=14},
right_ear={ name="シバリエピアス+1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+15','Mag. Acc.+15','Damage taken-5%',}},
left_ring={ name="ヴェクサーリング+1",hp=55,priority=16},
right_ring="シュネデックリング",
back={ name="ルディアノスマント", augments={'HP+60','Eva.+20 /Mag. Eva.+20','HP+20','Enmity+10','Chance of successful block +5',},hp=80,priority=15},
}
sets.idle.Refresh = set_combine(sets.idle, {
body="SVキュイラス+1",
})
sets.idle.Physical = set_combine(sets.idle, {
left_ring="フォテファイリング",
right_ring="ワーデンリング"
})
sets.engaged = {
ammo="ストンチタスラム+1",
head={ name="サクパタヘルム", hp=91,},
body={ name="デーゴンブレスト", hp=136,},
hands={ name="サクパタガントレ",hp=91,},
legs={ name="サクパタクウィス", hp=114,},
feet={ name="サクパタレギンス", hp=68,},
neck={ name="騎士の数珠+2", augments={'Path: A',},hp=60,},
waist={ name="プラチナモグベルト",hp=300,priority=16},
left_ear={ name="ズワゾピアス+1", augments={'Path: A',},hp=45,priority=14},
right_ear={ name="シバリエピアス+1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+15','Mag. Acc.+15','Damage taken-5%',}},
left_ring="シーリチリング+1",
right_ring="シーリチリング+1",
back={ name="ルディアノスマント", augments={'HP+60','Eva.+20 /Mag. Eva.+20','HP+20','Enmity+10','Chance of successful block +5',},hp=80,priority=15},
}
--アビリティ発動時に着替えている必要あり
sets.precast.JA['インビンシブル'] = set_combine(sets.Enmity,{legs="CBブリーチズ+3"})
sets.precast.JA['ホーリーサークル'] = set_combine(sets.Enmity,{feet="RVレギンス+3"})
sets.precast.JA['シールドバッシュ'] = set_combine(sets.Enmity,{hands="CBガントレ+3"})
sets.precast.JA['センチネル'] = set_combine(sets.Enmity,{feet="CBレギンス+3"})
sets.precast.JA['かばう'] = sets.Enmity
sets.precast.JA['ランパート'] = set_combine(sets.Enmity,{head="CBコロネット+3"})
sets.precast.JA['マジェスティ'] = sets.Enmity
sets.precast.JA['フィールティ'] = set_combine(sets.Enmity,{body="CBサーコート+3"})
sets.precast.JA['シバルリー'] = {
ammo="クォーツタスラム+1",
hands={ name="CBガントレ+3", augments={'Enhances "Chivalry" effect',}},
neck={ name="騎士の数珠+2", augments={'Path: A',}},
waist="プラチナモグベルト",
left_ear={ name="オノワイヤリング+1", augments={'Path: A',}},
right_ear="エアバニピアス",
left_ring="スティキニリング+1",
right_ring="スティキニリング+1",
back="月明の羽衣",
}
sets.precast.JA['神聖の印'] = sets.Enmity
sets.precast.JA['セプルカー'] = sets.Enmity
sets.precast.JA['パリセード'] = sets.Enmity
sets.precast.JA['インターヴィーン'] = sets.Enmity
sets.precast.JA['挑発'] = sets.Enmity
sets.precast.JA['ヴァレション'] = sets.Enmity
sets.precast.JA['フルーグ'] = sets.Enmity
sets.precast.JA['ソードプレイ'] = sets.Enmity
sets.precast.JA['イグニス'] = sets.Enmity
sets.precast.JA['ゲールス'] = sets.Enmity
sets.precast.JA['フラブラ'] = sets.Enmity
sets.precast.JA['テッルス'] = sets.Enmity
sets.precast.JA['スルポール'] = sets.Enmity
sets.precast.JA['ウンダ'] = sets.Enmity
sets.precast.JA['ルックス'] = sets.Enmity
sets.precast.JA['テネブレイ'] = sets.Enmity
sets.precast.FC = {--66
ammo="サピエンスオーブ",
head={ name="カマインマスク+1", augments={'Accuracy+20','Mag. Acc.+12','"Fast Cast"+4',},},
body={ name="RVサーコート+3",hp=254,},
hands={ name="レイライングローブ", augments={'Accuracy+15','Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+3',}},
legs={ name="カマインクウィス+1", augments={'HP+80','STR+12','INT+12',},hp=130,},
feet={ name="オディシアグリーヴ", augments={'Mag. Acc.+1 "Mag.Atk.Bns."+1','"Fast Cast"+6','VIT+2','Mag. Acc.+2','"Mag.Atk.Bns."+13',}},
neck="オルンミラトルク",
waist={ name="プラチナモグベルト",hp=300,},
left_ear={ name="エテオレートピアス",hp=50,},
right_ear={ name="シバリエピアス+1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+15','Mag. Acc.+15','Damage taken-5%',}},
left_ring={ name="月明の指輪",hp=100,},
right_ring="メダダリング",
back={ name="ルディアノスマント", augments={'HP+60','Eva.+20 /Mag. Eva.+20','HP+20','"Fast Cast"+10','Spell interruption rate down-10%',},hp=80,},
}
sets.precast.WS.Damage = {
ammo="昏黄の礫",
head="サクパタヘルム",
body="サクパタブレスト",
hands="サクパタガントレ",
legs="サクパタクウィス",
feet="サクパタレギンス",
neck="フォシャゴルゲット",
waist="フォシャベルト",
left_ear="テロスピアス",
right_ear={ name="シバリエピアス+1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+15','Mag. Acc.+15','Damage taken-5%',}},
left_ring="月明の指輪",
right_ring="エパミノダスリング",
back="月明の羽衣",
}
sets.precast.WS.Critical = {
ammo="昏黄の礫",
head="サクパタヘルム",
body="サクパタブレスト",
hands="サクパタガントレ",
legs="サクパタクウィス",
feet="サクパタレギンス",
neck="フォシャゴルゲット",
waist="フォシャベルト",
left_ear="テロスピアス",
right_ear={ name="シバリエピアス+1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+15','Mag. Acc.+15','Damage taken-5%',}},
left_ring="月明の指輪",
right_ring="エパミノダスリング",
back="月明の羽衣",
}
sets.precast.WS.Magic = {
main="レヴァンテダガー",
sub="ドゥバン",
ammo="ストンチタスラム+1",
head="ニャメヘルム",
body="ニャメメイル",
hands="ニャメガントレ",
legs="ニャメフランチャ",
feet="ニャメソルレット",
neck="シビルスカーフ",
waist="オルペウスサッシュ",
left_ear={ name="胡蝶のイヤリング", augments={'Accuracy+4','TP Bonus +250',}},
right_ear="フリオミシピアス",
left_ring={ name="メタモルリング+1", augments={'Path: A',}},
right_ring="メダダリング",
back="無の外装",
}
sets.precast.WS['ロイエ'] = sets.Enmity
sets.precast.WS['サークルブレード'] = sets.Enmity
sets.precast.WS['シャンデュシニュ'] = sets.precast.WS.Critical
sets.precast.WS['サベッジブレード'] = sets.precast.WS.Damage
sets.precast.WS['イオリアンエッジ'] = sets.precast.WS.Magic
sets.midcast.Flash = sets.Enmity
sets.midcast.Banish = sets.Enmity
sets.midcast.BlueMagical = sets.Enmity
sets.midcast.BlueBuff = sets.Enmity
sets.midcast.interruption = {
ammo="ストンチタスラム+1",
head={ name="SVシャレル+1", augments={'HP+105','VIT+12','Phys. dmg. taken -4',},hp=282,},
body={ name="CVキュイラス+3",hp=151,},
hands={ name="CVガントレ+3",hp=64,},
legs={ name="CVクウィス+3",hp=127,},
feet={ name="SVシュー+1", augments={'HP+105','Enmity+9','Potency of "Cure" effect received +15%',},hp=227,},
neck="月光の首飾り",
waist="オドンブラサッシュ",
left_ear="磁界の耳",
right_ear={ name="シバリエピアス+1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+15','Mag. Acc.+15','Damage taken-5%',}},
left_ring={ name="月明の指輪",hp=100,},
back={ name="ルディアノスマント", augments={'HP+60','Eva.+20 /Mag. Eva.+20','HP+20','"Fast Cast"+10','Spell interruption rate down-10%',},hp=80,},
}
sets.midcast.Phalanx = {
main="サクパタソード",
sub="プリュウェン",
ammo="ストンチタスラム+1",
head={ name="オディシアヘルム", augments={'"Dbl.Atk."+3','"Mag.Atk.Bns."+3','Phalanx +5',},hp=112,},
body={ name="オディシアプレート", augments={'VIT+8','Attack+1','Phalanx +5',},hp=66,},
hands={ name="SVハントシュ+1", augments={'HP+105','Enmity+9','Potency of "Cure" effect received +15%',},hp=239},
legs={ name="サクパタクウィス",hp=114},
feet={ name="SVシュー+1", augments={'HP+105','Enmity+9','Potency of "Cure" effect received +15%',},hp=227,},
neck="月光の首飾り",
waist="オドンブラサッシュ",
left_ear="磁界の耳",
right_ear="ミミルピアス",
left_ring={ name="月明の指輪",hp=100,},
right_ring={ name="ゼラチナスリング+1", augments={'Path: A',},hp=135},
back={ name="ウェルドマント", augments={'VIT+1','DEX+2','Enmity+1','Phalanx +5',}},
}
sets.midcast.Cure = {
ammo="ストンチタスラム+1",
head={ name="SVシャレル+1", augments={'HP+105','VIT+12','Phys. dmg. taken -4',},hp=282},
body={ name="CVキュイラス+3",hp=151,},
hands={ name="SVハントシュ+1", augments={'HP+105','Enmity+9','Potency of "Cure" effect received +15%',},hp=239,},
legs={ name="CVクウィス+3",hp=127,},
feet={ name="オディシアグリーヴ", augments={'Mag. Acc.+1 "Mag.Atk.Bns."+1','"Fast Cast"+6','VIT+2','Mag. Acc.+2','"Mag.Atk.Bns."+13',},hp=20,},
neck="月光の首飾り",
waist="スローダベルト",
left_ear={name="クリプティクピアス",hp=40},
right_ear={ name="シバリエピアス+1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+15','Mag. Acc.+15','Damage taken-5%',}},
left_ring={ name="アイワツリング",hp=70},
right_ring={ name="ゼラチナスリング+1", augments={'Path: A',},hp=135},
back={ name="ルディアノスマント", augments={'HP+60','Eva.+20 /Mag. Eva.+20','HP+20','Enmity+10','Chance of successful block +5',},hp=80},
}
end
コメント
コメント一覧 (2件)
sets.precast.JA[‘センチネル’] = set_combine(sets.Enmity,{feer=”CBレギンス+3″})
お世話になってます、粗探しみたいになって申し訳ないですが feet が feerになってます
教えてくれて感謝です!
今まで動いてなかったことすら気付いていませんでした。。