【GearSwap】ナイトのMote-libs用コード

ナイトのMote-libsコードです。

このコードでは、次のことができます。

  • 特性
    • バフ効果を高める装備に自動着替え
    • 着替え時のHP減少対策
    • 睡眠自動解除
    • 詠唱中断されにくい魔法詠唱(効果アップ装備着替え)
  • マクロ制御
    • ヘイト稼ぎ関連
  • フラグ制御
    • Jazero切り替え
  • その他
    • ジョブロード時にロックスタイル固定
    • ファランクス効果切れの通知
目次

ソースコード

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()
    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になってます

    • 教えてくれて感謝です!
      今まで動いてなかったことすら気付いていませんでした。。

コメントする

目次