読者です 読者をやめる 読者になる 読者になる

turi_config.lua

turi_config.lua

コンフィグファイルですが実態はLuaソースコードそのものです。
ここでオーバーライドする関数を記述してしまうのは暴挙なのかアリなのか。

-----------------------------------------------------------
-- turi_config
-- 自動釣りプログラムの設定ファイル
-- @author 琴葉茜(さとうけい)
-----------------------------------------------------------
local config = {}
local turi = {}
local hokyu = {}
local save = {}
-------------------------------------------------------------------------------
-- 動作設定 ここから
--   方向は、[forward / up / down / right / left / back]のどれかを使ってね
-------------------------------------------------------------------------------
-----------------------------------------------------------
-- 釣り設定
-----------------------------------------------------------
-------------------------------------
-- 釣りをする方向(水ブロックの方向)
turi.dir_fishing     = 'forward'

-------------------------------------
-- 焼ける魚をしまうチェストの方向
-- (bunruiをオーバーライドする場合はこれは使われないよ)
turi.dir_store_fish  = 'down'

-------------------------------------
-- 焼ける魚以外をしまうチェストの方向
-- (bunruiをオーバーライドする場合はこれは使われないよ)
turi.dir_store_other = 'down'

-------------------------------------
-- 釣りの待ち時間
turi.wait_fishing    = 25

-------------------------------------
-- 統計情報を自動読込するかどうか
turi.stats_auto_load = true

-------------------------------------
-- 統計情報保存時に追加モードで書き込むかどうか
turi.stats_save_add  = false

-------------------------------------
-- 釣り結果出力ファイルのパス
turi.stats_result_path  = '/stats/turi.csv'

-------------------------------------
-- 釣り結果出力ファイルのパス
turi.stats_items_path   = '/stats/turi_items.csv'

-----------------------------------------------------------
-- 燃料補給設定
-----------------------------------------------------------
-------------------------------------
-- 燃料チェストの方向
hokyu.direction   = 'right'

-------------------------------------
-- 燃料確認間隔(秒)
hokyu.wait        = 60

-------------------------------------
-- 燃料補給閾値
-- Fuel levelがこの数値未満になったら補給するよ
hokyu.threashold  = 100

-------------------------------------
-- 燃料十分量
-- 補給時、Fuel levelがこの数値以上になったら補給を完了するよ
hokyu.enough      = 100

-----------------------------------------------------------

-------------------------------------
-- 釣りの最大回数
-- 指定回数釣りしたら止まるで
-- nilまたはfalseを設定すると無制限に釣りを繰り返すよ
config.turi_limit = 1000

-----------------------------------------------------------
-- 釣り結果を保存するファイル
-----------------------------------------------------------
-------------------------------------
-- 出力頻度。釣りを何回したら出力するか
save.frequency     = 1

-------------------------------------
-- 釣りオブジェクトの走査間隔(秒数)
save.interval      = 10

-----------------------------------------------------------
-- gomi_bunrui チェスト設定
-----------------------------------------------------------
-------------------------------------
-- ゴミ箱の方向
-- 皮ブーツとか、チェストが山盛りになるやつはゴミ箱行きやで
local dir_store_gomi = 'up'

-------------------------------------
-- 釣果チェストの方向
-- ゴミ以外は全部こっちに入れるよ
local dir_store_other = 'down'

-------------------------------------------------------------------------------
-- 動作設定 ここまで
-------------------------------------------------------------------------------

-----------------------------------------------------------
-- 自動釣りアイテム分類関数オーバーライド
-----------------------------------------------------------
-----------------------------------------------------------
-- アイテムがゴミかどうか調べるよ
-- 長時間放置が前提だから
-- 皮ブーツとか釣り竿はチェストが溢れんようにゴミ扱いやで
-----------------------------------------------------------
local function kore_gomika(item_detail)
  -- 革ブーツ・釣り竿、水入り瓶、サドルならゴミや
  for _i, v in ipairs {
     'isLeatherBoots', 'isFishingRod', 'isWaterPotion', 'isSaddle',
  } do
    if identify[v](item_detail) then return true end
  end
  return false
end

-----------------------------------------------------------
-- しまっちゃおうねAPIに渡す分類コールバック関数やで
-- この関数で自動釣りAPIのアイテム分類関数をオーバーライドするよ
--
-- スロットを調べて、ゴミアイテムならゴミ用チェスト行きや
-- ゴミでも魚でもなければ釣果用チェストにしまうで
-- 魚の場合はスタックがいっぱいなら釣果用チェストにしまうよ
--
-- @param slot_no [in]対象スロット番号
-- @param force [in]trueの場合はスタックいっぱいじゃなくてもしまうよ
-- @return しまったらture / しまわなかったらfalse
-----------------------------------------------------------
local function gomi_bunrui(slot_no, force)
  local item_detail = turtle.getItemDetail(slot_no) -- 対象のアイテム情報やで
  if not item_detail then return false end -- スロットが空ならなにもしないよ

  -- ゴミチェック
  if kore_gomika(item_detail) then
    print('gomibako ikiya')
    return dir_store_gomi -- コイツはゴミ箱行きや
  end

  if identify.isFish(item_detail) then -- 魚やろか?
    -- 魚の場合、スタックいっぱいやなかったら何もしないで
    if not force and turtle.getItemSpace(slot_no) ~= 0 then return false end
  end
  print('slot '.. slot_no ..' wo simau yo!') -- しまうで~
  return dir_store_other
end

turi.bunrui = gomi_bunrui

-----------------------------------------------------------
turi.hokyu      = turtlefuel.new(hokyu)
config.turi     = turi
config.save     = save

return config