GearSwapで天候や曜日を扱う[FF11]

f:id:yyoshisaur:20190112213701p:plain
精霊ジョブなどで属性帯を使用するとき、現在の天候, 曜日で腰装備を切り替えたいと思い、
GearSwapのユーザースクリプトで天候、曜日を扱う方法について調べてみました。

GearSwapのリファレンスをみると、変数worldに天候, 曜日の情報が含まれているようです。

-- 天候名
-- 晴れの場合、 world.weather = "晴れ"
world.weather

-- 天候の属性名(晴れの場合は"なし"となる)
-- 熱波の場合、world.weather_element = "火"
world.weather_element

-- 曜日("~曜日"のような曜日名とならず属性名のような"火"となる)
-- 風曜日の場合、world.day = "風"
world.day

-- 曜日の属性名(dayとday_elementは同じ値になる?)
-- 風曜日の場合、world.day_element = "風"
world.day_element

GearSwap User Script Reference :: Windower Documentation

学者の陣はフィールドの天候より優先されるため、フィールドの天候が"闇"で陣が"極光の陣"の場合、

world.day_element = "光"

となります。

次に魔法の属性について、ユーザースクリプト内で定義しても良いですが、
変数spell.elementに使用した魔法の属性が格納されているので、
それを使用します。

-- weather_element, day_elementと同様の文字列が取得できる
-- サンダーの場合、
spell.element = "雷"

現在の天候, 曜日から使用する属性帯を取得する関数を作ってみます。

  • 上記の関数を使って精霊魔法のとき、天候, 曜日に合った属性帯に着替える
function midcast(spell)
    local obi = nil
    if spell.skill == '精霊魔法' then
        obi = get_elemental_obi(spell.element)
        equip(set_combine(sets.midcast.magic_mb, obi)
    end
end

おまけ

カバンの空き数の問題で"八輪の帯"を使用している場合は、天候, 曜日によって帯の効果が得られない場合、弱体してしまう場合があります。また、"闇輪の帯"や"火輪の帯"などよく使用する帯は別途所持している場合もあるので、上記の処理では不十分です。

"八輪の帯"と各属性帯が混在する場合の処理を考えてみます。

"八輪の帯"で天候, 曜日によって"良い"効果がある条件を挙げると、

  1. 使用する魔法属性と同属性の強天候である
  2. 使用する魔法属性と同属性の弱天候 かつ 使用する魔法属性の弱点属性の曜日でない
  3. 使用する魔法属性と同属性の曜日 かつ 使用する魔法属性と非干渉属性の天候である

上記以外の場合は、"八輪の帯"の効果が"なし"または"マイナス"になり、"八輪の帯"ではなくINTや魔攻の付いた帯を装備した方が良いと思われます。
天候/FF11用語辞典

以上を踏まえて、処理を記述します。分岐する条件が増えてくるとコードが複雑になって、メンテ性が悪くなってしまいますね。。


  • 上記の関数を使って精霊魔法のとき、天候, 曜日に合った属性帯に着替える(改良版)
function midcast(spell)
    local obi = nil
    if spell.skill == '精霊魔法' then
        obi = get_hachirin(spell.element)
        equip(set_combine(sets.midcast.magic_mb, obi)
    end
end