MENU

【GearSwap】学者のMote-libs用コード

学者のMote-libsコードです。

目次

ソースコード

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['メルトン'] =  sets.midcast['精霊魔法']
    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

コメント

コメントする

目次