2025/4/4 全体的に使い方などの説明ページを近日中に用意する予定です

【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

コメント

コメント一覧 (15件)

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

    ①インクルードは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も勉強してみようと思います(‘ω’)ノ

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

ど素人です(´;Д;`) へ返信する コメントをキャンセル

目次