2025/4/21 全ジョブロジック大幅変更 コピペする前に必ずバックアップしてください!

【GearSwap】属性帯の自動着替えコード

よしざうるすさんのGearSwapで天候や曜日を扱う[FF11]で公開されているコードを使わせてもらっています。

このコードは、天候に応じた着替えを自動化してくれる大変便利なものなので、精霊ジョブにとっては必須と言えるツールです。

目次

ソースコード

ソースファイルは次の場所に設置してください。

GearSwap/
  └ data/
    └ キャラクター名/
      └ weather_obi.lua

weather = {}
weather_strong = {}
weaken_element = {}
elemental_obi = {}

-- 弱天候
weather['火'] = '熱波'
weather['水'] = '雨'
weather['雷'] = '雷'
weather['土'] = '砂塵'
weather['風'] = '風'
weather['氷'] = '雪'
weather['光'] = 'オーロラ'
weather['闇'] = '妖霧'

-- 強天候
weather_strong['火'] = '灼熱波'
weather_strong['水'] = 'スコール'
weather_strong['雷'] = '雷雨'
weather_strong['土'] = '砂嵐'
weather_strong['風'] = '暴風'
weather_strong['氷'] = '吹雪'
weather_strong['光'] = '神光'
weather_strong['闇'] = '闇'

-- 弱点属性
weaken_element['火'] = '水'
weaken_element['水'] = '雷'
weaken_element['雷'] = '土'
weaken_element['土'] = '風'
weaken_element['風'] = '氷'
weaken_element['氷'] = '火'
weaken_element['光'] = '闇'
weaken_element['闇'] = '光'

-- 所持している属性帯(所持していない場合はnil)
elemental_obi = {}
elemental_obi['火'] = {waist="火輪の帯",}
elemental_obi['水'] = {waist="水輪の帯",}
elemental_obi['雷'] = {waist="雷輪の帯",}
elemental_obi['土'] = {waist="土輪の帯",}
elemental_obi['風'] = {waist="風輪の帯",}
elemental_obi['氷'] = {waist="氷輪の帯",}
elemental_obi['光'] = {waist="光輪の帯",}
elemental_obi['闇'] = {waist="闇輪の帯",}

hachirin = nil

function get_hachirin(spell_element)
    if elemental_obi[spell_element] then -- 属性帯がある場合
        if spell_element == world.weather_element or spell_element == world.day_element then
            return elemental_obi[spell_element]
        else
            return nil
        end
    else -- 八輪の帯を使用する場合
        if weather_strong[spell_element] == world.weather then -- 強天候
            return hachirin
        elseif weather[spell_element] == world.weather 
               and world.day_element ~= weaken_element[spell_element] then -- 弱天候 かつ 弱点属性曜日でない
            return hachirin
        elseif world.day_element == spell_element
               and world.weather ~= weather_strong[weaken_element[spell_element]]
               and world.weather ~= weather[weaken_element[spell_element]] then -- 同属性曜日 かつ 天候が非干渉 
            return hachirin
        else
            return nil
        end
    end
end

使い方

このコードはGearSwap単体でもMote-libsでも利用可能です。

GearSwap単体で利用する場合は、よしざうるすさんのページを見た方がわかりやすいかもしれません。

私はMote-libsで利用しているので、Mote-libsでの使い方を説明します。

①インクルード

ジョブ定義ファイルのjob_setup()かuser_setup()にインクルードします。

function job_setup()
    include('weather_obi') 
end

②属性帯の所持状況を定義

所持している属性帯を次のように定義します。

八輪の帯を持っている、または所持していない属性帯がある場合は「elemental_obi[‘水’] = nil」としてください。

私は八輪の帯を作らず八属性の帯を利用しているので、このような定義になっています。

elemental_obi = {}
elemental_obi['火'] = {waist="火輪の帯",}
elemental_obi['水'] = {waist="水輪の帯",}
elemental_obi['雷'] = {waist="雷輪の帯",}
elemental_obi['土'] = {waist="土輪の帯",}
elemental_obi['風'] = {waist="風輪の帯",}
elemental_obi['氷'] = {waist="氷輪の帯",}
elemental_obi['光'] = {waist="光輪の帯",}
elemental_obi['闇'] = {waist="闇輪の帯",}

属性帯>八輪の帯の優先順位で着替えを行ってくれますので、八論の帯を所持しつつ単体の属性帯を持っている場合でも、属性帯の着替えが優先されます。

③自動着替え

次のように実装することで、精霊詠唱の装備セットを天候に応じた属性帯に着替えてくれます。

function job_post_midcast(spell, action, spellMap, eventArgs)
    if spell.skill == '精霊魔法' then
        equip(get_hachirin(spell.element))
    end
end

コメント

コメント一覧 (23件)

  • 管理人様
    いつもありがとうございます。授業料をお支払いしたい・・・。
    学者にの属性帯着替えなのですが、うまくいきません。例えば火陣IIを自分にかけているのですが、属性帯に自動で着替えてくれません。下記、SCH.lua の1行目からです。

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

    function job_setup()
    include(‘weather_obi’)
    end

    function job_post_midcast(spell, action, spellMap, eventArgs)
    if spell.skill == ‘精霊魔法’ then
    equip(get_hachirin(spell.element))
    end
    end
    とコピペしたのですが、間違っているでしょうか。

    • 私の学者のコードを参考にしているのなら、最新版で試してみてください。
      最新コードと構造が違います。

      そして、考えられるポイントは、属性帯ファイルの設置がちゃんとされているのか。
      併せて確認してみてください。

      • 管理人様
        お忙しいところ、本当に恐縮しております。ありがとうございます。
        管理人様の学者のコードを使わせていただいてます。そこに下記の①②③の属性帯のコードをSCH.luaにコピペしているのですが、このあたりが間違っているのでしょうか?
        ①インクルード←SCH.luaが正しい?
        ②属性帯の所持状況を定義←SCH.gear.luaが正しい?それともweather_obi.lua?の中身?具体的な置き場所が今一つ分からない。(多分これが原因?)
        ③自動着替え←スレッドを見る限りSCH.gear.luaが正しい?

        階層などは確認して間違っていないようです。
        何度もしつこく申し訳ありませんお手すきの時にでもご教示いただければと思います。
        よろしくお願いいたします。

        • function job_setup()
          include(‘weather_obi’)
          end
          を見る限り、明らかに最新のコードと内容が違うので、最新版を確認してほしいのです。
          ブラウザに古い情報を保持したまま最新版が表示されないがあるようですので、ブラウザのキャシュクリアをしてみてください。

          最新版の前提で回答します。
          ①多くのジョブで共通して使う処理は、共通ファイルにまとめました。Initialize()で呼び出している部分がそれであり、そのなかで属性帯のロードを行っています。
          ②属性帯の定義はweather_obi.luaに行います。
          複数キャラクターがいる場合、キャラクター毎に属性帯の所持状況が異なるため、キャラクター毎に設置する必要があるため、weather_obi.luaは、キャラクターフォルダに設置してください。
          ③属性帯の着替えはロジック側で行っています。SCH.gear.luaには一切定義していません。
          job_post_midcastで条件に合う場合にのみ属性帯を自動着替えしています。

          おそらくこれでご質問の回答になっているのでは無いかと思いますが、相違があれば遠慮無くご質問ください。

          • 管理人様
            重ね重ね恐縮であります。ありがとうございます。
            ・ブラウザキャッシュをクリアした。PCを再起動した。
            ・SCH.lua SCH.gear.lua weather_obi.lua user-globals.lua をこちらのサイトからまるっとコピペして入れ替えて、階層を確認した。
            ・//gs reloadをコンソールから行ってエラーなし。
               ↓
             属性帯に着替えない。
               ↓
            ・SCH.luaに
            function job_setup()
            include(‘weather_obi’)
            end
            と入力する。
               ↓
             属性帯に着替えない。
            といった状況です。
            もっと根本的な、FF側のコマンドや操作の間違いでしょうか?

          • Initialize()で帯をロードしてるので、書き加える必要ありません。
            帯着替えにコマンドも必要なくて、普通に天候(陣)に応じて着替えられます。

            動かない可能性は、ファイルの設置場所が正しいかどうかくらいですかね?

          • 管理人様
            休日にもかかわらずご返答ありがとうございます。
            もしかすると環境的なものなんでしょうか。
            実は黒魔導士の時はちゃんと着替えてくれてます。本件とは関係ないのですが、風水師の時はエラーはでないで読み込んでくれるのですが、全く動いてくれません。(着替えなどを全くしてくれない)
            とりあえず、いろいろいじってみます。ありがとうございました。感謝いたしております。

          • 動いているジョブのコードの差異を見ればわかりそうですね。
            ま、頑張ってみてください。

  • 迅速な対応ありがとうございます(>人<;)
    僕の質問の仕方が悪かったみたいですいません

    ①インクルードはGEO.luaファイルの中の
    function job_setup()
    include(player.name .. ‘/weather_obi’)
    state.OffenseMode:options(‘Normal’)
    state.IdleMode:options(‘Normal’)
    end
    の部分を
    function job_setup()
    include(‘weather_obi’)
    end
    に上書きすればいいってことですね

    ②は帯は全て持っていますのでこのままでいいですよね? 

    ③は質問がわかりにくすぎてすいません
    GearSwap/
      └ data/
        ├ GEO.lua
        └ キャラクター名/
          ├ weather_obi.lua
          └ GEO_gear.lua
    このようになってます!
    ただ
    function job_post_midcast(spell, action, spellMap, eventArgs)
    if spell.skill == ‘精霊魔法’ then
    equip(get_hachirin(spell.element))
    end
    end
    をどこのファイルのどこに配置したらいいかがわからないのです。

    GEO.luaファイル?
    GEO_gear.luaファイル?

    配置場所は一番下?でいいのですか?

    • ①は変更しなくても大丈夫です。
      ②帯全部あるならこれも変更しなくて大丈夫です。
      ③GEO_gear.luaです。

      私が公開してるサンプルを参考にして貰えれば動くと思いますよ!

      • ご迷惑など素人質問に丁寧に答えていただきありがとうございました(´;ω;`)やってみます!

  • ごめんなさいど素人です(´;ω;`)
    使い方の
    ①インクルードは
    ジョブ.luaの中にあるjob_setup()かuser_setup()を書き換えればいいんですか?
    ②属性帯の所持状況を定義は
    基本的に何もいじらなくて良い?
    ③自動着替えは
    ジョブ.luaでいいのかな?のどこに設置すれば良いですか?
    ほんと!ごめんなさい色々探ってみたもののパニクって話かりません(´;ω;`)
    設置はしたものの属性帯が着替えてくれません、風水士のエラーはならなくなりました!ありがとうございます♪

    • ①includeは風水のコードにもありますが、天候に応じて属性帯を着替えたいジョブに記述してください。私はjob_setupに書いています。
      ②基本的にはいじってください。キャラが持っている帯を書けば良いです。帯がないのならnilとしてください。
      持っていないのに定義がある状態でどう動くのかは確認していないので、わかりません。
      ③たとえば風水師ならGearSwapのファイル構成は次のようになります。
      GearSwap/
        └ data/
          ├ GEO.lua
          └ キャラクター名/
            ├ weather_obi.lua
            └ GEO_gear.lua

      GEO.luaがロジックファイルで、GEO_gear.luaが装備を定義したファイルです。
      この階層でファイルを置かなければエラーになると思います。
      キャラクター名は実際のキャラクター名にしてくださいね。

      例えば、複数キャラで風水をやっているのなら、風水のロジックファイルはひとつで、キャラクター分の風水装備ファイルがあるイメージです。
      ロジックファイルは全キャラ共通で使うものになります。

  • 非常に丁寧にご回答頂きありがとうございます。
    ヴァナボッチの複垢ライフが更に楽しくなりました!
    今後も素敵な記事を楽しみに拝見させて頂きます。

  • いつも拝見させて頂いています。
    質問ですが、複垢で帯の所持が違う場合の対策は御座いますでしょうか。
    例)風天候の場合
     A:風輪持ち → 風輪に着替え
     B:風輪なし → 八輪に着替え 
    今回の場合は風輪有りにしてしまうとBは風輪ないので八輪に着替えずです。
    もし宜しければヒントだけでも頂けると幸いです。

    • こんにちは。

      私はサブキャラも同じ帯で揃えたので問題なかったのですが、確かにサブキャラと帯の状態が異なれば着替えが出来ないですね。
      対応して公開しているコードに反映させておきます。
      またご確認ください。

    • 反映しました。
      次の手順で変更対応をお願いします。
      ①data/weather_obi を data/キャラクター名/weather_obi に移動。
       ※キャラ毎の帯所持状況でweather_obiを更新
      ②include(‘/weather_obi’) となっている部分をinclude(player.name .. ‘/weather_obi’) に書き換える。

  • 丁度黒を初めて八帯(ばらばら)の所で難儀しております
    現在GearSwap単体でしか使っておりませんが、Mote-libsの方がやりやすいのでしょうか?
    もし可能でしたら、初心者でも導入できる手法をご教示頂けるとたすかります

    • 私も初めはGearSwapから始めましたが、完全にMotelibsに移行しました。

      Gearswapは全て自分でロジックを実装しなくてはいけませんが、Motelibsはその必要がありません。
      その分、初めは難しく感じるかもしれませんが、慣れれば快適です。
      もちろんカスタムすることも可能です。

      お手持ちの帯を教えてくれれば、その内容で書き換えてお答えしますよ。

      • ご返答ありがとうございます。
        八帯のバラは全部持っております

        ただ、GearSwapも始めたばかりで苦戦しておりますw
        FCとか着替えとかは出来たけど、
        BLM_gearに【sets.buff[‘砂塵の陣’] = {waist=”土輪の帯”,}】を入れてみたりと色々やってみたけど、その部分だけ動かず投げました(*’ω’*)

        時間のある時にMotelibsも勉強してみようと思います(‘ω’)ノ

        • 黒はあまりやっていないので、装備などが中途半端な状態ですが、近々黒のコードを投稿しておきます。
          参考にしてみてください。

コメントする

目次