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

f:id:yyoshisaur:20190224145651p:plain

前回はWindowerアドオンの設定ファイル読み込みまで実装しました。
yyoshisaur.hatenablog.com

今回は、アドオンにコマンドが入力された時の処理を作っていきます。
具体的には

//sy /ma ストーン <t>

のようなコマンドがラインエディタから入力された時の処理になります。
(または、Windowerコンソールからコマンドを入力した時)

"addon command" イベント

アドオンのロード時と同じようにregister_eventで登録することで
アドオンに対してコマンドが入力された場合の処理を行うことができます。
Events · Windower/Lua Wiki · GitHub

register_eventに登録する処理はイベント毎に登録するコールバック関数の引数が異ります。
"addon command"では引数に入力されたコマンドが入ってきます。
関数の引数は可変引数で入力されたコマンドが"半角スペース"で分割されています。
(上記の例では、"/ma ストーン <t>"の部分が引数になります)

キャラクター名の取得

このアドオンでは送信先のキャラクター名を決めるためには、送信元キャラクター名(操作しているキャラウター名)が必要です。
自身のキャラクター名の取得は、windower.ffxi.get_playerで行えます。
windower.ffxi.get_playeはキャラクター名のほかにも様々なプレイヤーに関する情報が取得できます。
FFXI Functions · Windower/Lua Wiki · GitHub
キャラクター名が取得できれば、前回の設定した情報から送信先のキャラクター名が取得できます。

アドオンから別のアドオンを実行

必要な情報が揃ったら、sendを実行します。
アドオン内から別のアドオンを実行する方法にwindower.send_commandがあります。
引数の文字列をWindowerコンソールで実行したかのように動作します。
(Windowerコンソールなのでコマンドの先頭に"//"は不要です)
Functions · Windower/Lua Wiki · GitHub

function sy_command(...)
    -- 入力されたコマンドをテーブルに保持
    local args = {...} 

    -- キャラクター名を取得
    local my_name = windower.ffxi.get_player().name:lower()
    -- 送信先のキャラクター名を設定から取得 
    local your_name = settings.you[my_name]

    -- 入力されたコマンドを結合
    local command = nil
    for i, v in ipairs(args) do
        if command then
            command = command..v..' '
        else
            command = v..' '
        end
    end

    -- sendコマンドを作成
    local send = 'send '..your_name..' '..command

    -- sendコマンドを発行
    windower.send_command(send)
end

-- アドオンでコマンドが入力された時の処理を登録
windower.register_event('addon command', sy_command)


ソースファイルはGitHubにありますので、ご参考になれば。
コマンドで送信先のキャラクター名を設定できるように機能を追加しています。
github.com