MENU

【GearSwap】魔道剣士のMote-libs用コード

魔道剣士のMote-libsコードです。

目次

ソースコード

Mote-libsでは、ジョブロジック部分(ジョブ名.lua)と装備セット部分(ジョブ名_gear.lua)を切り分けていますので、次のような階層構造になっています。

GearSwap/
  └ data/
    ├ RUN.lua
    └ キャラクター名/
       └RUN_gear.lua

GearSwap\libsによしザウルスさんが日本語対応してくれているMote-libsを設置してください。

ジョブロジック


function get_sets()
    mote_include_version = 2
    include('Mote-Include.lua')
	set_language('japanese')
end

function job_setup()
    include('Mote-TreasureHunter')
end

function user_setup()
    state.Buff['エンボルド'] = buffactive['エンボルド'] or false	

    state.Weapons = M{'Epeolatry'}
    state.OffenseMode:options('Normal','Parry')
    state.IdleMode:options('Normal','Refresh')
    send_command('wait 5; gs c set IdleMode Normal; gs c lockstyleset')
    send_command('input /si item;')

    state.RuneText = M(false, 'ルーン')
end

function user_unload()
    text_destroy()          
end

function job_post_pretarget(spell, action, spellMap, eventArgs)
    equip(sets.Hpboost)
end

function job_post_midcast(spell, action, spellMap, eventArgs)
    if spell.skill == '強化魔法' then
        if state.Buff['エンボルド'] then
            equip(sets.buff['エンボルド'])
        end
    end
end

function job_midcast(spell, action, spellMap, eventArgs) 
    local fc=59/100
    if string.find(spell.type, 'Magic') then
        equip(sets.midcast.interruption)
        local adjust=0.6
        local cast_time = (spell.cast_time*(1-fc))*adjust    
        
        if  spell.name == 'フラッシュ' or 
            spell.name == 'スタン' or
            spell.name == 'ポイゾガ' or
            spell.name == 'フォイル' or
            spell.name == 'アブゾタック' or
            spell.type == 'BlueMagic' or
            spellMap   == 'Banish' then
            eventArgs.handled = true
            send_command('wait '..cast_time..'; gs equip sets.Enmity')
            
        elseif spellMap == 'Cure' then
            eventArgs.handled = true
            send_command('wait '..cast_time..'; gs equip sets.midcast.Cure')

        elseif spellMap == 'Phalanx' then
            eventArgs.handled = true
            send_command('wait '..cast_time..'; gs equip sets.midcast.Phalanx')

        elseif spellMap == 'Stoneskin' then
            eventArgs.handled = true
            send_command('wait '..cast_time..'; gs equip sets.midcast.Stoneskin')

        elseif spellMap == 'Regen' then
            eventArgs.handled = true
            send_command('wait '..cast_time..'; gs equip sets.midcast.Regen')
        end
    end
end

function job_buff_change(buff, gain)
    if buff == 'ファランクス' and not gain then
        windower.add_to_chat(167,'■■■■■ファランクス切れ■■■■■')
    elseif buff == 'バットゥタ' and gain then
        send_command('gs c set OffenseMode Parry')
    elseif buff == 'バットゥタ' and not gain then
        send_command('gs c set OffenseMode Normal')
    end
end

function customize_idle_set(idleSet)
    local weapon = sets.Weapons[state.Weapons.value]
    idleSet = set_combine(idleSet, weapon)
    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 '..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 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>')
        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
        if 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

    elseif cmdParams[1] =='RuneText' then
        if state.RuneText.value then
            showText()
        else
            hideText()
        end
    end
end


local texts = require('texts')
message={
    [1] = {name='イグニス ', desc1='火:',desc2='(氷:',desc3='麻痺、バインド)'},
    [2] = {name='ゲールス ', desc1='氷:',desc2='(風:',desc3='静寂、ヘヴィ)'},
    [3] = {name='フラブラ ', desc1='風:',desc2='(土:',desc3='石化、テラー、スロウ)'},
    [4] = {name='テッルス ', desc1='土:',desc2='(雷:',desc3='スタン)'},
    [5] = {name='スルポール', desc1='雷:',desc2='(水:',desc3='毒)'},
    [6] = {name='ウンダ  ', desc1='水:',desc2='(火:',desc3='病気、悪疫、アムネジア)'},
    [7] = {name='ルックス ', desc1='光:',desc2='(闇:',desc3='呪い、睡眠)'},
    [8] = {name='テネブレイ', desc1='闇:',desc2='(光:',desc3='魅了、睡眠)'},
}
text_box = texts.new('${text}',{text={font='Meiryo', size=10}, pos={x=10, y=250}, padding = 5, bg={alpha=180}})
text_box.text='属性      耐性\n'..
'\\cs(255,128,128)'..message[1].desc1..message[1].name..message[1].desc2..message[1].desc3..'\\cr'..'\n'..
'\\cs(128,255,255)'..message[2].desc1..message[2].name..message[2].desc2..message[2].desc3..'\\cr'..'\n'..
'\\cs(128,255,128)'..message[3].desc1..message[3].name..message[3].desc2..message[3].desc3..'\\cr'..'\n'..
'\\cs(255,255,128)'..message[4].desc1..message[4].name..message[4].desc2..message[4].desc3..'\\cr'..'\n'..
'\\cs(255,128,255)'..message[5].desc1..message[5].name..message[5].desc2..message[5].desc3..'\\cr'..'\n'..
'\\cs(128,128,255)'..message[6].desc1..message[6].name..message[6].desc2..message[6].desc3..'\\cr'..'\n'..
'\\cs(255,255,255)'..message[7].desc1..message[7].name..message[7].desc2..message[7].desc3..'\\cr'..'\n'..
'\\cs(128,128,128)'..message[8].desc1..message[8].name..message[8].desc2..message[8].desc3..'\\cr'


function showText()
    text_box:show()
end

function hideText()
    text_box:hide()
end

function text_destroy()
    text_box:destroy()
end

装備セット

function init_gear_sets()
    lockstyleset = 101

    sets.buff['エンボルド'] = {back="ディバートケープ"}
    
    sets.Weapons = {}
    sets.Weapons.Epeolatry = { main={name="真・斬鉄剣"},sub={name="コーンスー"}}

    sets.Hpboost={
        neck={name="アンムーヴカラー+1",priority=12},
        waist={name="プラチナモグベルト",priority=15},
        left_ring={name="月明の指輪",priority=14},
        back={name="月明の羽衣",priority=13},
    }

    sets.Enmity = {
        ammo="サピエンスオーブ",
        head="ハリタスヘルム",
        body="エメットハーネス+1",
        hands="クーリスグローブ",
        legs="ERレグガード+3",
        feet="ERグリーヴ+3",
        neck="月光の首飾り",
        waist={name="プラチナモグベルト",priority=15},
        left_ear="無知の耳",
        right_ear="クリプティクピアス",
        left_ring="アイワツリング",
        right_ring="守りの指輪",
        back={ name="オーグマケープ", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Enmity+10','Damage taken-5%',}},
	}

    sets.engaged = {
        ammo="ストンチタスラム+1",
        head="ERガレア+3",
        body="RNコート+3",
        hands="ERガントレ+3",
        legs="ERレグガード+3",
        feet="ERグリーヴ+3",
        neck={ name="フサルクトルク+2", augments={'Path: A',}},
        waist="無の腰当",
        left_ear="シェリダピアス",
        right_ear={ name="エリラズピアス+1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+12','Mag. Acc.+12','Damage taken-4%',}},
        left_ring="月明の指輪",
        right_ring="フォテファイリング",
        back="無の外装",
    }
    sets.engaged.Parry=set_combine(sets.engaged,{ hands="トゥルムミトン+1",feet="トゥルムレギンス+1",})
    sets.idle = {
        ammo="ストンチタスラム+1",
        head="ERガレア+3",
        body="RNコート+3",
        hands="ERガントレ+3",
        legs="ERレグガード+3",
        feet="ERグリーヴ+3",
        neck={ name="フサルクトルク+2", augments={'Path: A',},priority=12},
        waist="無の腰当",
        left_ear="ハーティーピアス",
        right_ear={ name="エリラズピアス+1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+12','Mag. Acc.+12','Damage taken-4%',}},
        left_ring={name="月明の指輪",priority=14},
        right_ring="シュネデックリング",
        back="無の外装",
    }

    sets.idle.Refresh = set_combine(sets.idle, {
        ammo="ストンチタスラム+1",
        head="無の面",
        body="RNコート+3",
        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="シビルスカーフ",
    })

    --
    -- ■■■■■ precast ■■■■■
    --
    sets.precast.JA['E.スフォルツォ']       = set_combine(sets.Enmity,{body="FUコート+3"})
    sets.precast.JA['イグニス']             = set_combine(sets.Enmity,{})
    sets.precast.JA['ゲールス']             = set_combine(sets.Enmity,{})
    sets.precast.JA['フラブラ']             = set_combine(sets.Enmity,{})
    sets.precast.JA['テッルス']             = set_combine(sets.Enmity,{})
    sets.precast.JA['スルポール']           = set_combine(sets.Enmity,{})
    sets.precast.JA['ウンダ']               = set_combine(sets.Enmity,{})
    sets.precast.JA['ルックス']             = set_combine(sets.Enmity,{})
    sets.precast.JA['テネブレイ']           = set_combine(sets.Enmity,{})
    sets.precast.JA['ヴァレション']         = set_combine(sets.Enmity,{body="RNコート+3"})
    sets.precast.JA['フルーグ']             = set_combine(sets.Enmity,{feet="RNブーツ+2"})
    sets.precast.JA['ヴァリエンス']         = set_combine(sets.Enmity,{body="RNコート+3"})
    sets.precast.JA['バットゥタ']           = set_combine(sets.Enmity,{head="FUバンド+3"})
    sets.precast.JA['ソードプレイ']         = set_combine(sets.Enmity,{hands="FUミトン+3"})
    sets.precast.JA['ランジ']               = set_combine(sets.Enmity,{})
    sets.precast.JA['スワイプ']             = set_combine(sets.Enmity,{})
    sets.precast.JA['ガンビット']           = set_combine(sets.Enmity,{hands="RNミトン+3"})
    sets.precast.JA['レイク']               = set_combine(sets.Enmity,{feet="FUブーツ+3"})
    sets.precast.JA['エンボルド']           = set_combine(sets.Enmity,{})
    sets.precast.JA['ワンフォアオール']     = set_combine(sets.Enmity,{})
    sets.precast.JA['リエモン']             = set_combine(sets.Enmity,{})
    sets.precast.JA['インスパイア']         = set_combine(sets.Enmity,{legs="FUトラウザ+3"})
    sets.precast.JA['ビベイシャス']         = set_combine(sets.Enmity,{head="ERガレア+3",legs="RNトラウザ+2",neck="インカンタートルク",left_ring="スティキニリング+1",right_ring="スティキニリング+1"})
    sets.precast.JA['インクァルタタ']       = set_combine(sets.Enmity,{legs="ERレグガード+3"})
    sets.precast.JA['オディリックサブタ']   = set_combine(sets.Enmity,{})

    sets.precast.FC = {
        ammo="サピエンスオーブ",
        head="RNバンド+3",
        body="ERサーコート+3",
        hands="レイライングローブ",
        legs="ニャメフランチャ",
        feet="ニャメソルレット",
        neck="オルンミラトルク",
        waist={name="プラチナモグベルト",priority=15},
        left_ear="エンチャンピアス+1",
        right_ear="エテオレートピアス",
        left_ring={name="月明の指輪",priority=14},
        right_ring="メダダリング",
        back={ name="オーグマケープ", augments={'HP+60','Eva.+20 /Mag. Eva.+20','"Fast Cast"+10','Damage taken-5%',},priority=13},
    }
  
    sets.precast.WS.Critical = {
    }

    sets.precast.WS.Damage = {
        ammo="オシャシャの原論文",
        head="ERガレア+3",
        body="ERサーコート+3",
        hands="ERガントレ+3",
        legs="ERレグガード+3",
        feet="ERグリーヴ+3",
        neck="無の喉輪",
        waist="無の腰当",
        left_ear="オドルピアス",
        right_ear={ name="エリラズピアス+1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+12','Mag. Acc.+12','Damage taken-4%',}},
        left_ring="イラブラットリング",
        right_ring="王将の指輪",
        back={ name="オーグマケープ", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Enmity+10','Damage taken-5%',}},
    }

    sets.precast.WS.Magic = {
        ammo="コイストボダー",
        head="ニャメヘルム",
        body="ニャメメイル",
        hands="ニャメガントレ",
        legs="ニャメフランチャ",
        feet="ニャメソルレット",
        neck="シビルスカーフ",
        waist={ name="セールフィベルト+1", augments={'Path: A',}},
        left_ear={ name="胡蝶のイヤリング", augments={'Accuracy+4','TP Bonus +250',}},
        right_ear="フリオミシピアス",
        left_ring={ name="メタモルリング+1", augments={'Path: A',}},
        right_ring="メダダリング",
    }

    sets.precast.WS['ハードスラッシュ']     = sets.precast.WS.Damage 
    sets.precast.WS['パワースラッシュ']     = sets.precast.WS.Damage 
    sets.precast.WS['フロストバイト']       = sets.precast.WS.Magic 
    sets.precast.WS['フリーズバイト']       = sets.precast.WS.Magic 
    sets.precast.WS['ショックウェーブ']     = sets.precast.WS.Damage 
    sets.precast.WS['クレセントムーン']     = sets.precast.WS.Damage 
    sets.precast.WS['シックルムーン']       = sets.precast.WS.Damage 
    sets.precast.WS['スピンスラッシュ']     = sets.precast.WS.Damage 
    sets.precast.WS['グラウンドストライク'] = sets.precast.WS.Damage 
    sets.precast.WS['ヘラクレススラッシュ'] = sets.precast.WS.Magic 
    sets.precast.WS['レゾルーション']       = sets.precast.WS.Damage 
    sets.precast.WS['デミディエーション']   = sets.precast.WS.Damage 
    sets.precast.WS['フィンブルヴェト']     = sets.precast.WS.Damage 

    --
    -- ■■■■■ midcast ■■■■■
    --
    sets.midcast.interruption = {
        ammo="ストンチタスラム+1",
        head="ERガレア+3",
        body="アダマンアーマー",
        hands={ name="ローハイドグローブ", augments={'HP+50','Accuracy+15','Evasion+20',}},
        legs={ name="カマインクウィス+1", augments={'HP+80','STR+12','INT+12',},priority=3},
        feet="ERグリーヴ+3",
        neck="月光の首飾り",
        waist="オドンブラサッシュ",
        left_ear="磁界の耳",
        right_ear={ name="エリラズピアス+1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+12','Mag. Acc.+12','Damage taken-4%',}},
        left_ring={name="月明の指輪",priority=14},
        right_ring="守りの指輪",
        back={ name="オーグマケープ", augments={'HP+60','Eva.+20 /Mag. Eva.+20','"Fast Cast"+10','Damage taken-5%',},priority=13},
	}

    sets.midcast.EnhancingMagic = {
        ammo="ストンチタスラム+1",
        head="ERガレア+3",
        body="アダマンアーマー",
        hands="ニャメガントレ",
        legs={ name="FUトラウザ+3", augments={'Enhances "Inspire" effect',}},
        feet="ニャメソルレット",
        neck="サクロゴルゲット",
        waist="スローダベルト",
        left_ear="ミミルピアス",
        right_ear={ name="エリラズピアス+1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+12','Mag. Acc.+12','Damage taken-4%',}},
        left_ring={name="月明の指輪",priority=14},
        right_ring="守りの指輪",
        back={name="月明の羽衣",priority=13},
    }

    sets.midcast.Stoneskin= set_combine(sets.midcast.Enhancing ,{
        body="アダマンアーマー",
        hands="ストーンマフラ",
        legs="ヘイヴンホーズ",
        neck="ストーンゴルゲット",
        waist="ジーゲルサッシュ",
        left_ear="アースクライピアス",
        back={name="月明の羽衣",priority=13},
    })

    sets.midcast.Phalanx = {
        ammo="ストンチタスラム+1",
        head={ name="FUバンド+3", augments={'Enhances "Battuta" effect',}},
        body={ name="ヘルクリアベスト", augments={'STR+10','Pet: STR+9','Phalanx +5','Mag. Acc.+3 "Mag.Atk.Bns."+3',}},
        hands={ name="ヘルクリアグローブ", augments={'Magic Damage +1','Crit. hit damage +3%','Phalanx +4','Accuracy+10 Attack+10','Mag. Acc.+20 "Mag.Atk.Bns."+20',}},
        legs={ name="ヘルクリアトラウザ", augments={'AGI+8','Attack+7','Phalanx +4','Accuracy+1 Attack+1','Mag. Acc.+2 "Mag.Atk.Bns."+2',}},
        feet={ name="ヘルクリアブーツ", augments={'Weapon skill damage +2%','"Fast Cast"+3','Phalanx +5','Accuracy+16 Attack+16',}},
        neck="インカンタートルク",
        waist={name="プラチナモグベルト",priority=15},
        left_ear="ミミルピアス",
        right_ear={ name="エリラズピアス+1", augments={'System: 1 ID: 1676 Val: 0','Accuracy+12','Mag. Acc.+12','Damage taken-4%',}},
        left_ring="月明の指輪",
        right_ring="守りの指輪",
        back={ name="ディバートケープ", augments={'Enmity+1','"Embolden"+15','"Dbl.Atk."+3',}},
    }

    sets.midcast.Regen = set_combine(sets.midcast['強化魔法'],{head="RNバンド+3",body="FUコート+3",neck="サクロゴルゲット",waist="スローダベルト"})

    sets.midcast.Cure = sets.Enmity

end
ちょっとだけPR

コメント

コメント一覧 (5件)

  • 自分で試せてないので申し訳ないですが
    ロジック
    13  state.Buff[“エンボルド”] = buffactive[“エンボルド”] or false → ’エンボルト’
    ギア
    69-94 装備は ’’ → ””   じゃ無くても動きますか?

    • ダブルクォーテーションとシングルクォーテーションが統一されていないけど動くのか?
      ということですね?

      システム的には問題ありません。
      普通に動きます。

      ただ、あちこちからコピペして作っているため、混在した状態になっていてすっきりしない書き方になっています。

      どちらかで統一した方がよさそうなので、全コードチェックしておきます。

  • そうなんですね、自分で組むとき気にしてたんですっきりしました。
    ありがとうございます

  • 98行目 sets.precast.JA[‘スライトソード’] = set_combine(sets.Enmity,{hands=”FUミトン+3″})

    ですが、[‘スライトソード’]はジョブ特性ですので、
    正しくは、
    90行目 sets.precast.JA[‘ソードプレイ’] = set_combine(sets.Enmity,{})

    90行目 sets.precast.JA[‘ソードプレイ’] = set_combine(sets.Enmity,{hands=”FUミトン+3″})

    かと思われます。

    • ご指摘ありがとうございます。
      魔道剣士は、不慣れなものでして・・・

      用語辞典を参考に作ったので、理解できておりませんでした。
      誤り部分を修正して反映しました。
      また何か待ち該当あれば教えてください!

コメントする

目次