Something Need Doingでインスタンス移動をマクロ化する方法

免責事項

この記事では、XIVLauncherやDalamudプラグインに関する内容を取り扱っています。
外部ツールを使うリスクをよく理解した上で、自己責任で使用してください。
当ブログでは、記載内容によって生じた損害・損失に対する一切の責任を負いません。

Patch 6.4の混雑緩和のために一部のエリアが複数のフィールドインスタンスに分割されたことで、暁月エリアのAモブツアーが16連戦で開催されるようになりましたね。
(リリースされてだいぶ経つので今更な話題ですが……)

得られる報酬が増えて嬉しい反面、インスタンス移動時の操作にモタついたり、混雑している時間帯だと人数制限ですぐに移動できなかったりして、次のモブに間に合わないこともあります。
単純に操作が増えて面倒なのもあり、この時期は連戦に参加するのが億劫になりがちです。

どうにか楽に移動できないかと試行錯誤した末、Something Need Doing 内のLua Script機能を使ったマクロで解決できたのでご紹介します。

Something Need Doingについて

その名の通り、プレイヤーの代わりに何かをしてくれるプラグインです。
標準のマクロの拡張版、というとイメージしやすいかもしれません。
プラグイン独自のテキストコマンドが用意されており、より複雑なマクロを作成できます。

導入方法

以下の手順の通り、最初に新しい空のマクロを作ってください。

  1. Something Need Doingのウィンドウを開く( /pcraft
  2. ウィンドウの左上にある「/」を右クリック
  3. 任意のマクロ名を入力して「+」をクリック

新しいマクロが作れたら、今度は以下のコードをまるっとコピーしてください。

i = 1 -- 移動したいインスタンスの番号

yield("/target エーテライト <wait.0.25>")
yield("/send NUMPAD0 <wait.0.25>")
yield("/waitaddon SelectString")

arr = {4, 5}
for key in pairs(arr) do
  v = arr[key]
  str = GetNodeText("SelectString", 2, v, 3)
  if string.find(str, "インスタンスエリアへ移動") ~= nil then
    yield("/click select_string" .. v .. " <wait.0.25>")
    break
  end
end

yield("/waitaddon SelectString")
yield("/click select_string" .. i + 1 .. " <wait.0.25>")

コピーしたら、Something Need Doingのウィンドウで先ほど作った空のマクロを選択します。
ウィンドウの右下に「Macro Editor」という欄が表示されます。
そこに先ほどコピーしたコードを貼り付けてください。

最後に、Macro Editorの下にある「</>」をクリックして有効にしてください。
スクリーンショットのように緑色になっていればOKです。

Luaマクロの安全確認

とても重要なことなので、改めて。
最後に必ず、Macro Editorの下にある「</>」が緑色になっていることを確認してください。

この「</>」はLua scriptを有効にするかどうか設定するためのボタンです。
Lua scriptが有効になっていない状態でLuaマクロを実行すると、内容が全てチャットに流れます

何故そんな恐ろしいことが起きるかというと、Lua scriptが有効になっていない場合、Luaのコードはただのテキストとして認識されてしまうからです。
普段マクロを自作される方ならご存知かもしれませんが、FF14の標準のマクロでは、文頭にテキストコマンド( /say/fc など)がない行は、現在選択しているチャットチャンネル(SayやFreeCompanyなど)に流れる仕様になっています。

インスタンス別にLuaマクロを用意

先ほどLuaマクロを作ったときに「あれ?」と思った方もいるかもしれません。
コピーしたLuaの1行目を見てみてください。

i = 1 -- 移動したいインスタンスの番号

この記述は、移動するインスタンス番号を指定するものです。
i = 1 ならインスタンス1へ、i = 2 ならインスタンス2へ移動します。

なので、先ほどのLuaマクロを作っていただいたときと同じ手順で新しく作り、1行目を i = 2 に書き換えたものを用意してください。
新しいマクロを作るとLua scriptはデフォルトで無効になっているので、最後に必ず、Macro Editorの下にある「</>」が緑色になっていることを確認してくださいね。

Luaマクロを実行

作ったLuaマクロを実際に実行してみましょう。

  1. フィールドインスタンスが分割されているエリアに行く
  2. Something Need Doingのウィンドウを開く( /pcraft
  3. インスタンス移動用のLuaマクロを選ぶ
  4. Editorの「▶︎」をクリック

上手く動かないときはチャットにエラーが表示され、Luaマクロも一時停止します。
エラーが出てしまった場合は、もう一度実行する前に「Macro Queue」のゴミ箱のボタンを押して、一時停止中のLuaマクロを完全に停止してください。

標準のマクロとして実行

インスタンス移動のたびにSomething Need Doingのウィンドウを開くのは面倒、という方向け。
以下のテキストコマンドを使えば、標準のマクロからLuaマクロを実行できます。

/pcraft run インスタンス1に移動

「インスタンス1に移動」の部分は、設定したLuaマクロ名に書き換えて使用してください。

ホットバーに入れると更に便利ですが、マクロやホットバーの空きに余裕のない方は無理に追加しなくても、Something Need Doingのウィンドウから実行するので十分だと思います。

おわりに

Lua scriptには、今回使ったもの以外にもいくつかの関数が用意されています。
自由度が高く複雑なマクロを組めるので、また良さそうなLuaマクロができたらご紹介します。

ヤオ

自動化・ツール化が趣味のエンジニアです。
C言語やLuaは専門外ですが、実際に動かしながらマイペースに勉強中。
ゆくゆくはDalamudプラグインの開発に挑戦するのが目標です。

よく「本当に人間だったんだ」「喋り方がChatGPTみたい」と言われます。

コメント

  • 匿名希望

    わかりやすい記事で無事導入できました。
    今後の記事も楽しみにしております。

    返信
  • 匿名

    黄金でも動きますか?

    返信
    • ヤオ

      黄金での動作確認はしていませんが、Lifestreamのインス切り替えボタンの方が早くて確実です!

      返信
  • しんめん

    チョコボレースの出走を自動で繰り返すマクロは作れませんか?
    CFからサゴリーロードを選択しスタート後は「←」をキープして繰り返す動作です。

    返信
    • ヤオ

      /click/send を使えば可能です。

      返信

コメントを投稿する