GearSwapのコードを書く 第1回


はじめに

Windower及び各種アドオン・プラグインの使用は自己責任でお願いします。
当noteのコードはあくまでも筆者の環境でのみ動作を確認しておりますので、コード利用時の不具合や損害については責任を負いかねます。
予めご了承ください。
GearSwapは煩わしくなりがちな装備変更マクロを自動で行ってくれるアドオンです。
装備セットの個数やマクロの行数に制限されることなく、装備変更が可能になる為、マクロの記述などが極力簡単になっていくことになります。

コードを書く準備

1.ファイルを作成する

WindowerとGearSwapの導入はここでは省きます。
さっそくコードを書く準備からいきましょう。
Windowerのインストールされたディレクトリから
addons\GearSwap\dataまで移動します。
ここにコードファイルを作成していきます。
ファイル名についてルールがあります。
基本的には「PC名_ジョブ名.lua」というファイル名を付けましょう。
PC名はゲーム内と一致するように1文字目を大文字、以降小文字で書いてください。
その後にアンダースコアを1つ入れて、ジョブ名を3文字の略称で入れます。ジョブ名は大文字でも小文字でも問題ありません。
たとえば「Fujito_WAR.lua」というファイルを作成すると、ゲーム内でFujitoという自キャラが戦士にジョブチェンジしたときに自動的に該当のファイルが読み込まれる仕組みになっています。

2.基本の関数を知る

コードはluaという言語で書いていきますが、各種プログラミング言語をかじったことがある人ならあまり困ることなく書くことができると思います。
基本的に使う関数は3,4個です。
以下に説明していきます。
get_sets()
これは、装備セットを定義してロードするための関数です。
ファストキャスト装備やWS装備、着弾装備や待機用リフレ装備など
使いこなせるようになると、ここが一番行数が増えることになります。
precast(spell)
WS使用前、魔法詠唱前の装備を操作する関数です。
midcast(spell)
主に魔法の着弾前に着替えたい装備を操作する関数です。
aftercast(spell)
WSや魔法使用後に通常の装備に戻したいときに操作する関数です。
基本的にこの4つの関数の中を書き換えていくことになります。

3.装備名などを日本語対応にする

後述する装備のエクスポートをする際、日本語対応にしていなかった場合にエクスポートされた装備名が全て英語名で出力されてしまいます。
可読性に欠けるので、日本語で装備名が出るように変更します。
まだ、コードを書く準備の項目ですが、とりあえず実際にコードを記述してみましょう。

function get_sets()
    set_language('japanese')
end

get_sets()の中に「set_language('japanese')」を記述しておけば大丈夫です。

実際にコーディングしてみる

1.装備セットをエクスポートする

ゲーム内で実際に使用している装備を配列に書き出すことができます。
エクスポートする前に、そのPC名とジョブで作成した前述の日本語対応したファイルが存在することを確認してください。
その上で、ゲーム内でwindowerのコマンドライン、もしくはゲームのライン入力ウィンドウから「gs reload」(ライン入力の場合は//を忘れずに)と入力します。
これを怠ると、装備セットが英語でエクスポートされますので、ご注意ください。
では、書き出したい装備を全て装備した状態で、ゲーム内でwindowerのコマンドライン、もしくはゲームのライン入力ウィンドウから「gs export」(ライン入力の場合は//を忘れずに)と入力します。
間もなく、addons\GearSwap\data\exportフォルダに装備が書き出されたluaファイルが出力されます。
ファイル名は「PC名 日付 時刻.lua」になっています。
中身を見てみると

sets.exported={
    main="***",
    sub="***",
    ammo="***",
    head="***",
    body="***",
    hands="***",
    legs="***",
    feet="***",
    neck="***",
    waist="***",
    left_ear="***",
    right_ear="***",
    left_ring="***",
    right_ring="***",
    back="***",
}

上記のような装備品が一式書かれた配列が記述されています。
自信の用途に合った装備品でエクスポートファイルをどんどん作成していく必要がありますので、この操作は必ず覚えましょう。

2.get_setsを完成させる

function get_sets()
    set_language('japanese')
end

先ほど日本語対応させ、上記の状態のファイルに装備セットを書き足していきます。
まずはprecast,midcast,aftercastの空配列を定義します。

function get_sets()
    set_language('japanese')

    sets.precast = {}
    sets.midcast = {}
    sets.aftercast = {}
end

今回はWS装備のセットを記述していきましょう。

function get_sets()
    set_language('japanese')

    sets.precast = {}
    sets.midcast = {}
    sets.aftercast = {}

    sets.precast.ws = {
        head={ name="ニャメヘルム", augments={'Path: B',}},
        body={ name="ニャメメイル", augments={'Path: B',}},
        hands={ name="ニャメガントレ", augments={'Path: B',}},
        legs={ name="ニャメフランチャ", augments={'Path: B',}},
        feet={ name="ニャメソルレット", augments={'Path: B',}},
    }

end

一例としてニャメ一式を設定しました。
sets.precast.wsという配列名のwsの部分は自分でわかりやすい名前にしてかまいません。
precastがファストキャスト装備や、アビリティの効果を上げる装備などで複数増えていくので、sets.precast.fcなど別のセットを作成し区別しやすくするためです。
そして、同じようにaftercastの装備セットも忘れず記述して下さい。

function get_sets()
    set_language('japanese')

    sets.precast = {}
    sets.midcast = {}
    sets.aftercast = {}

    sets.precast.ws = {
        head={ name="ニャメヘルム", augments={'Path: B',}},
        body={ name="ニャメメイル", augments={'Path: B',}},
        hands={ name="ニャメガントレ", augments={'Path: B',}},
        legs={ name="ニャメフランチャ", augments={'Path: B',}},
        feet={ name="ニャメソルレット", augments={'Path: B',}},
    };

    sets.aftercast = {
       省略
    }
end

3.precast関数を記述する

装備セットを作っただけでは、装備変更は行われません。
precast関数で装備変更の条件を設定する必要があります。

function get_sets()
    set_language('japanese')

    sets.precast = {}
    sets.midcast = {}
    sets.aftercast = {}

    sets.precast.ws = {
        head={ name="ニャメヘルム", augments={'Path: B',}},
        body={ name="ニャメメイル", augments={'Path: B',}},
        hands={ name="ニャメガントレ", augments={'Path: B',}},
        legs={ name="ニャメフランチャ", augments={'Path: B',}},
        feet={ name="ニャメソルレット", augments={'Path: B',}},
    }

    sets.aftercast = {
       省略
    };
end

function precast(spell)
    if spell.type == 'WeaponSkill' then
        equip(sets.precast.ws)
    end
end

precast関数の中にif文で条件分岐を設定しました。
使用したアビリティ・WS・魔法などのタイプがウェポンスキルだった場合、WS装備に着替えるという条件です。
この場合、ウェポンスキルであればどのウェポンスキルでもニャメ一式に着替えます。
細かい条件分岐については次回詳しく説明していきたいと思います。

4.aftercast関数を記述する

最後にWS使用後に元の装備に戻すためのaftercast関数を記述します。

function get_sets()
    set_language('japanese')

    sets.precast = {}
    sets.midcast = {}
    sets.aftercast = {}

    sets.precast.ws = {
        head={ name="ニャメヘルム", augments={'Path: B',}},
        body={ name="ニャメメイル", augments={'Path: B',}},
        hands={ name="ニャメガントレ", augments={'Path: B',}},
        legs={ name="ニャメフランチャ", augments={'Path: B',}},
        feet={ name="ニャメソルレット", augments={'Path: B',}},
    }

    sets.aftercast = {
       省略
    }
end

function precast(spell)
    if spell.type == 'WeaponSkill' then
        equip(sets.precast.ws)
    end
end

function aftercast(spell)
    equip(sets.aftercast)
end

これでひとまず完成です。
precastで各種行動前の装備を定義し、aftercastで通常時の装備に戻す。
一連の流れは掴めたでしょうか。

次回予告

次回以降はmidcastや条件分岐を含めた構成を深掘りしていきたいと思います。
次回は、魔法を使用する際のmidcastの記述を解説していく予定です。

この記事が気に入ったらサポートをしてみませんか?