2025/11/17 記事をまとめてブログ全体を整理しました。

魔法やアビリティなどのマクロパレット節約術

目的が同じ種類のアビリティや魔法を節約する仕組みを共通ファイルに実装しています。

目次

ロジック説明

  • アスピル系
  • ドレイン系
  • 空蝉の術系
  • 単体敵対行動系
  • 範囲敵対行動系

敵対行動系は盾ジョブでの使用を想定しています。

アスピル系

アスピルマクロにgs c aspirと書けば次の優先度でアスピルが発動します。

  • アスピルIII
  • アスピルII
  • アスピル
function Aspir()
    local recasts = windower.ffxi.get_spell_recasts()
    local recast_time_3 = recasts[881]/60
    local recast_time_2 = recasts[248]/60
    local recast_time_1 = recasts[247]/60

    if recast_time_3 == 0 and (player.main_job == '風' or player.main_job == '黒') then
       send_command('input /ma '..windower.to_shift_jis('アスピルIII')..' <stnpc>')
    elseif recast_time_2 == 0 then
        send_command('input /ma '..windower.to_shift_jis('アスピルII')..' <stnpc>')
    elseif recast_time_1 == 0 then
        send_command('input /ma '..windower.to_shift_jis('アスピル')..' <stnpc>')
    else
        windower.add_to_chat(30, 'アスピル リキャスト---> III: %.1fs, II: %.1fs, I: %.1fs':format(recast_time_3, recast_time_1, recast_time_1))
    end
end

ドレイン系

ドレインマクロにgs c drainと書けば次の優先度でドレインが発動します。

  • ドレインIII
  • ドレインII
  • ドレイン
function Drain()
    local recasts = windower.ffxi.get_spell_recasts()
    local recast_time_3 = recasts[880]/60
    local recast_time_2 = recasts[246]/60
    local recast_time_1 = recasts[245]/60

    if recast_time_3 == 0 and player.main_job == '暗' then
        send_command('input /ma '..windower.to_shift_jis('ドレインIII')..' <stnpc>')
    elseif recast_time_2 == 0 and player.main_job == '暗' then
        send_command('input /ma '..windower.to_shift_jis('ドレインII')..' <stnpc>')
    elseif recast_time_1 == 0 then
        send_command('input /ma '..windower.to_shift_jis('ドレイン')..' <stnpc>')
    else
        windower.add_to_chat(30, 'ドレイン リキャスト---> III: %.1fs,II: %.1fs, I: %.1fs':format(recast_time_3, recast_time_2, recast_time_1))
    end
end

空蝉の術系

空蝉マクロにgs c Utsusemiと書けば次の優先度で空蝉の術が発動します。

  • 空蝉の術:参
  • 空蝉の術:弐
  • 空蝉の術:壱
function Utsusemi()
    local recasts = windower.ffxi.get_spell_recasts()
    local recast_time_3 = recasts[340]/60
    local recast_time_2 = recasts[339]/60
    local recast_time_1 = recasts[338]/60

    if recast_time_3 == 0 and player.main_job == '忍' then
        send_command('input /ma '..windower.to_shift_jis('空蝉の術:参')..' <me>')
    elseif recast_time_2 == 0 then
        send_command('input /ma '..windower.to_shift_jis('空蝉の術:弐')..' <me>')
    elseif recast_time_1 == 0 then
        send_command('input /ma '..windower.to_shift_jis('空蝉の術:壱')..' <me>')
    else
        windower.add_to_chat(30, '空蝉の術 リキャスト---> 参: %.1fs, 弐: %.1fs, 壱: %.1fs':format(recast_time_3, recast_time_2, recast_time_1))
    end
end

単体敵対行動系

単体の敵対行動マクロにgs c Enmityと書けば次の優先度で使えるアビリティや魔法が発動します。

  • フラッシュ
  • ジェタチュラ(サポ青)
  • ブランクゲイズ(サポ青)
  • 挑発(サポ戦)
  • スタン(サポ暗)
  • アブゾタック(サポ暗)
function ActionEnmity()
    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
end

ジェタチュラは前方範囲なので、不要な場合はコメントアウトしてください。

範囲敵対行動系

範囲の敵対行動マクロにgs c EnmityRangeと書けば次の優先度で使えるアビリティや魔法が発動します。

  • フライトフルロア(サポ青)
  • ガイストウォール(サポ青)
  • スティキングガス(サポ青)
  • サペリフィック(サポ青)
  • シープソング(サポ青)
  • 魔物達のララバイ(サポ吟)
  • ディアガ
  • バニシュガ
function ActionEnmityRange()
    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
    local recast_time_Lullaby   = spell_recasts[376]/60
    local recast_time_Banishga  = spell_recasts[38]/60
    local recast_time_Diaga     = spell_recasts[33]/60

    if player.sub_job == '青' and recast_time_FrightfulRoar == 0 and player.sub_job_level>49 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_Lullaby == 0 then
        send_command('input /ma '..windower.to_shift_jis('魔物達のララバイ')..' <stnpc>')--3
    elseif player.sub_job == '赤' and recast_time_Diaga == 0 then
        send_command('input /ma '..windower.to_shift_jis('ディアガ')..' <stnpc>')--3
    elseif recast_time_Banishga == 0 then
        send_command('input /ma '..windower.to_shift_jis('バニシュガ')..' <stnpc>')--3
    end
end

ディアガとバニシュガ自体に敵対心がないのですが、敵を釣るときに便利なのでまとめています。

不要なら個別にマクロを用意するか、コメントアウトしてください。

コメント

コメントする

目次