採集回数/耐久を回復するSomething Need Doingの収集品採集マクロ

免責事項

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

【2024年5月13日追記】
Patch 6.58現在、この記事で紹介しているマクロは動作しません
原因は GetNodeText() 関数で現在の収集価値を取得できなくなってしまったためで、現状代替案を見つけられていないため、今後の対応は未定です。

最近、お得意様取引用のギャザラー収集品マクロをアップデートしました。
元々使っていたマクロはこんな感じです。

/ac 集中検分 <wait.3>
/ac 慎重純化 <wait.3>
/ac 集中検分 <wait.3>
/ac 慎重純化 <wait.3>
/ac 慎重純化 <wait.3>
/ac 慎重純化 <wait.3>
/ac 収集品採集 <wait.3>
/ac 石工の理 <wait.3>
/ac 老農の知 <wait.3>
/ac 収集品採集 <wait.3>
/ac 理知興起 <wait.3>
/ac 収集品採集 <wait.3>
/ac 収集品採集 <wait.3>
/ac 収集品採集 <wait.3>
/ac 収集品採集 <wait.3>

これでも基本的には動くのですが、

  • 4回の慎重純化で収集価値が1000にならなくてもそのまま採集してしまう
  • 石工の理・老農の知のうち使わなかった方のアクションの <wait.3> が無駄になる
  • 理知興起が実行できない場合は更に <wait.3> が無駄になる
  • 耐久が0になっても収集品採集を実行し続けることがある

などが気になって、最近は手動で採集することが多かったです。
上記のマクロでぴったり15行なので、これ以上の改良も思いつきませんでした。

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

導入方法

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

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

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

function getValue()
  return tonumber(GetNodeText("GatheringMasterpiece", 104))
end

function getCount()
  return tonumber(GetNodeText("GatheringMasterpiece", 70))
end

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

if IsAddonVisible("GatheringMasterpiece") then
  scrutinyCount = 0
  while getValue() < 1000 do
    if scrutinyCount < 2 and getGP() >= 200 then
      yield("/ac 集中検分 <wait.3>")
      scrutinyCount = scrutinyCount + 1
    end
    yield("/ac 慎重純化 <wait.3>")
  end
  maxCount = tonumber(GetNodeText("GatheringMasterpiece", 68))
  currentJob = string.sub(GetNodeText("_Exp", 3), 0, 3)
  while getCount() > 0 do
    if getCount() ~= maxCount and getGP() >= 300 then
      if currentJob == "MIN" then
        yield("/ac 石工の理 <wait.3>")
      elseif currentJob == "BTN" then
        yield("/ac 老農の知 <wait.3>")
      end
    end
    if getCount() ~= maxCount and HasStatus("理知興起実行可") then
      yield("/ac 理知興起 <wait.3>")
    end
    yield("/ac 収集品採集 <wait.3>")
  end
end

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

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

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

Luaの処理について

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

収集品ウィンドウの表示確認

if IsAddonVisible("GatheringMasterpiece") then
  ...
end

エラーや事故防止のため、最初に収集品採集画面の表示を確認しています。
収集品採集画面が表示されていないときは何もせずにマクロが終了します。

収集価値上昇

scrutinyCount = 0
while getValue() < 1000 do
  if scrutinyCount < 2 and getGP() >= 200 then
    yield("/ac 集中検分 <wait.3>")
    scrutinyCount = scrutinyCount + 1
  end
  yield("/ac 慎重純化 <wait.3>")
end

収集価値が1000になるまで慎重純化を使います。
最初の2回のみ、GPが200以上なら慎重純化の前に集中検分を使います。

耐久回復と収集品採集

maxCount = tonumber(GetNodeText("GatheringMasterpiece", 68))
currentJob = string.sub(GetNodeText("_Exp", 3), 0, 3)
while getCount() > 0 do
  if getCount() ~= maxCount and getGP() >= 300 then
    if currentJob == "MIN" then
      yield("/ac 石工の理 <wait.3>")
    elseif currentJob == "BTN" then
      yield("/ac 老農の知 <wait.3>")
    end
  end
  if getCount() ~= maxCount and HasStatus("理知興起実行可") then
    yield("/ac 理知興起 <wait.3>")
  end
  yield("/ac 収集品採集 <wait.3>")
end

耐久が0になるまで収集品採集を行います。
耐久が100%未満でGPが300以上のとき、採掘師なら石工の理、園芸師なら老農の知を使います。
耐久が100%未満で理知興起実行可時は理知興起を使います。

耐久を回復したくない場合はGP699以下の状態でマクロを実行してください。

おわりに

効果「採集回数/耐久+1」が付いている採集ポイントを見つけてこのマクロを実行すると、収集価値1000のアイテムが大体3〜4個、本当に運がいいときは6個手に入ります。

このマクロを使うときは、最初に「採集回数/耐久+1」の採集ポイントでGP700以上の状態で採集し、残りの数を見て次の採集ポイントを決めるのがいいと思います。

ヤオの場合、1回目で採集したアイテムが4個以上の場合、耐久を回復しなくても2個手に入ることが多いので、GPが400以上になったら次のポイントで採集しています。
1回目で採集したアイテムが3個以下だった場合はGPが700以上になるのを待ちます。

ヤオ

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

コメント

  • 匿名

    コメント失礼します。質問なのですが、
    しょっぱなに慎重純化を2回使用した場合にバリューアップと耐久減少なしがそれぞれ1回以上発動した場合のみ次に集中検分を実行するという動作をLuaで再現することは可能でしょうか?

    返信
  • 匿名

    コメント失礼します。質問なのですが、しょっぱなに慎重純化を2回使用した場合にバリューアップと耐久減少なしがそれぞれ1回以上発動した場合のみ次に集中検分を実行させるといったマクロをLuaで組むことは可能でしょうか?

    返信
  • サイ

    こんばんは、無人島の一番高い山の山頂で無限採取出来るようなマクロも作れますでしょうか?

    返信

コメントを投稿する