GPを監視して指定以上溜まったら音を鳴らすSomething Need Doingのマクロ

免責事項

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

タイトルの通り、GPが指定以上溜まったら /echo で音を鳴らすだけのマクロを作りました。
シンプルなマクロですが「GP回復の待ち時間に別のことをしていて気が付いたら溢れてた……」というちょっとした悲しい事故を防ぐには十分役に立つと思います。

採掘師・園芸師のモーエンツール強化を少しだけ楽にしてくれるかもしれません。

今回のマクロも Something Need Doing のLua Script機能を使っています。
Lua Script機能は過去の記事でも紹介しているので、詳しく知りたい方は参考にしてみてください。

導入方法

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

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

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

threshold = 700
notifySound = "<se.1> <se.1> <se.1>"

function getCurrentJob()
  return string.sub(GetNodeText("_Exp", 3), 0, 3)
end

function getGP()
  return tonumber(GetNodeText("_ParameterWidget", 1, 5))
end

function getState()
  return getGP() >= threshold
end

state = getState()

while true do
  currentJob = getCurrentJob()
  if currentJob ~= "MIN" and currentJob ~= "BTN" then
    break
  end
  if not state and getState() then
    yield("/e GPが" .. threshold .. "以上になりました " .. notifySound)
    state = true
  elseif state and not getState() then
    state = false
  end
  yield("/wait 5")
end

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

最後に、Macro Editorの下にある「</>」をクリックして有効にしてください。
これが有効になっていないと、Luaで書いた内容が全てチャットに流れるので要注意です。

マクロを実行する前に、下のスクリーンショットのように緑色になっているか必ず確認してください。

Luaの処理について

簡単にですが、Luaで行っている処理を解説します。

音を鳴らすGPの閾値

threshold = 700

上記のマクロではGPが700以上で音が鳴り、閾値を変更したい場合は修正が必要です。
例えばGP400以上で音を鳴らしたい場合は threshold = 400 と書き換えてください。

音の種類と音量

notifySound = "<se.1> <se.1> <se.1>"

音の種類と音量を変更したい場合はこの部分を修正してください。
<se.1>~<se.16> の基本的な使い方はエオルゼアデータベース「代名詞」で確認できます。

GPの監視とチャット送信

while true do
  currentJob = getCurrentJob()
  if currentJob ~= "MIN" and currentJob ~= "BTN" then
    break
  end
  if not state and getState() then
    yield("/e GPが" .. threshold .. "以上になりました " .. notifySound)
    state = true
  elseif state and not getState() then
    state = false
  end
  yield("/wait 5")
end

現在のジョブが採掘師か園芸師なら5秒置きにGPを監視し、それ以外にジョブチェンジすると終了します。
/e/echo )は自分にだけ見えるチャットを表示するコマンドです。

おわりに

本当はコーディアルのリキャストも監視したかったのですが、対応する関数がなく断念しました。

当サイトでは収集品採集マクロも紹介しています。
採集ポイントの効果に合わせて手動でスキルを使った場合に比べると効率は下がりますが、ギャザラーが苦手な方やなるべく操作をせずに採集したい方にはおすすめです。

ヤオ

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

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

コメント

  • ギャザラー

    GPが特定の数値より下回った時の通知を出したいのですが、
    もしよければ教えて下さい。

    返信
    • ヤオ

      こんばんは。コメントいただきありがとうございます。
      13行目を return getGP() <= threshold に変更していただければ、指定したGP以下になった際に通知を出せると思います。
      ただ、この記事自体が古く最新バージョンでの動作確認をしていないので、うまくいかなければまたコメント頂ければ確認いたします。

      返信
    • ギャザラー

      動作確認できました。ありがとうございます!
      今Luaが楽しくて色々試行錯誤しているのですが、

      MPとGPはこれでうまく出来るのですが、
      ParameterWidget", 1, 5

      HPのParameterWidgetが分からず困ってます。

      返信
    • ヤオ

      無事に動いてよかったです!
      この記事を書いたときはSomething Need Doingが用意している関数をよく知らず、 GetNodeText() でGPを取得する回りくどいやり方を取っていたのですが、単純なHPの取得でしたら GetHP() のみで大丈夫です。

      もしかしたら本日公開した記事がお役に立つかもしれません。
      よければお時間のあるときに読んでみてください。
      https://yaonote.com/snd-lua-cp/

      返信
    • ギャザラー

      ありがとうございます!
      参考にさせて頂きます!

      返信

コメントを投稿する