Windowerアドオンを作ってみよう!その1 [FF11]

f:id:yyoshisaur:20190224145651p:plain

今回は簡単なWindowerのアドオンを作ってみます。
アドオンをロードして、コマンドを受け付け、コマンドに応じて動作するようにします。
アドオンを作る練習としてはだた入力されたテキストを表示するような特に意味のないものでも良いですが、
実際に使えるものを例として作ってみます。(あまり実用的ではないかもしれませんが)

作りたいもの

sendを2アカウントで使っている場合、コマンドの送信先のキャラクター名は決っています。
ラインエディタから手動入力する際、毎回名前を入力するのは面倒なので、sendで指定する名前を省略できるアドオンを作ってみます。
イメージとしては、アドオンにコマンドを送るとあらかじめ設定した相手にsendコマンドを実行するというものです。
send自体を作り直すのではなく、既存アドオンsendのラッパー(wrapper)です。

//send Hoge /ma ストーン <bt>

送信先のキャラクター名を入力するところを

//newaddon /ma ストーン <bt>

と省略できるアドオンを作りたいと思います。
(newaddonとは仮のコマンド名で出来るだけ短いものをつけたいと思います)

はじめに

それではまっさらな状態からアドオンを作りましょう。
何はともあれアドオンの名前を決めます。
決められた相手に送信するので、「sendyou」というアドオン名にします。
作業用のフォルダを作って、そこにsendyou.luaを作ります。
動作確認もするので~/Windower4/addons/に直接作ってもよいと思いますが、
私は別の場所(~/User/ユーザー名/以下のユーザフォルダ等)に作業用のフォルダを作って、~/Windower4/addons/に作業用フォルダのシンボリックリンクを作って開発をしています。
~/Windower4/addons/に置くフォルダ名は他のアドオンに倣って、アドオン名にします。
ファイルの文字コードUTF-8にします。
sendyou.luaの中身を記述していきます。
まずは、アドオンの情報を記述します。

_addon.name = 'sendyou' -- 名前
_addon.version = '1.0' -- バージョン
_addon.author = 'yyoshisaur' -- 作成者
_addon.command = 'sy' -- コマンド名(この場合、//sy で使用できるようになります)

設定値、設定ファイル

次にアドオンの設定ファイルについてです。
Windowerには、アドオンが設定値を管理するためのモジュール「config」があります。
Config Library · Windower/Lua Wiki · GitHub
このモジュールを使うとアドオンのフォルダ内のdata/settings.xmlから設定値の読み込みや保存ができます。
設定ファイルには、アドオンの動作に必要なユーザーが設定可能な設定値を保存するようにします。
今回の例では、設定ファイルの使い方を試すために、キャラクター毎に送信先のキャラクター名を設定値として持つことにします。
(2アカウントしかない場合を想定しているので本来は送信先のキャラクター名は必要なく、"//send @others"を使えばいいのですが)
アドオンに設定ファイルを読み込むタイミングはアドオンがロードされたタイミングにしてみます。
register_eventでロード時に実行する処理を登録することができます。
Writing Addons · Windower/Lua Wiki · GitHub
Events · Windower/Lua Wiki · GitHub

config = require('config') -- モジュールを読み込み

-- アドオンがロードされた時の処理
function sy_load()
    -- 設定のデフォルト値
    defaults = {
        you = {
             -- src_name:送信元のキャラクター名, dst_name:送信先のキャラクター名
            ['src_name'] = 'dst_name',
        },
    }
    -- data/settings.xmlが存在しない場合、settings.xmlを作成し、デフォルト値を使用する
    -- data/settings.xmlが存在する場合は、settings.xmlの設定値が読み込まれる
    settings = config.load(defaults) 
end

-- アドオンがロードされた時に実行される処理を登録
windower.register_event('load', sy_load)

data/settings.xmlが存在しない場合、以下のようなファイルが自動生成されます。

<?xml version="1.1" ?>
<settings>
    <global>
        <you>
            <src_name>dst_name</src_name>
        </you>
    </global>
</settings>

以上でアドオンロード時の設定値読み込みまでできました。

少々長くなりそうなので、今回はここまでで
次回はコマンドを受け付け、設定値を使ってsendを実行する部分を実装してみたいと思います。

ソースファイルはGitHubにありますので、ご参考になれば。
github.com