turi.lua (part √2)
turi.lua
自動釣りプログラムturiのメイン部分です。
自動釣り機能自体はjidoturi.luaなどの他ファイルに記述されています。
本ファイルでは自動釣りクラスの準備と実行、そして自動釣りクラスで追加実行される、定期的な統計ファイル保存コルーチンと終了判定コルーチンの定義を行っています。
----------------------------------------------------------- -- turi.lua -- 自動釣りプログラム -- @author 琴葉茜(さとうけい) ----------------------------------------------------------- dofile('/lib/turi_lib') application.turtleInit('turi') ----------------------------------------------------------- -- プログラム引数処理 ----------------------------------------------------------- local args = { ... } local config_path = args[1] or 'turi_config' -- 第一引数はコンフィグファイル名や ----------------------------------------------------------- -- コンフィグファイル読み込み ----------------------------------------------------------- local config = application.loadConfig(config_path) ----------------------------------------------------------- -- result_file定義ブロック ----------------------------------------------------------- local result_file = config.save do -- クロージャOOPや local self = result_file -- 出力済みの釣り回数 self.last = 0 ----------------------------------------------------------- -- 釣り結果を出力するで -- @param turi [in]自動釣りオブジェクト -- @param force [in]trueなら回数に関係なく書き込むよ ----------------------------------------------------------- function result_file.write(turi, force) -- 書き込むのは釣り何回かに1回だけやで local tried = turi.getTriedCount() if not force and (tried % self.frequency ~= 0 or tried <= self.last) then return end print('tureta item csv wo save suruyo!') turi.saveStats() -- 書き込むよ self.last = tried -- 最後に書き込んだ釣り回数を覚えとくよ end ----------------------------------------------------------- -- 自動釣りの結果保存用コルーチン -- @param turi [in]自動釣りオブジェクト ----------------------------------------------------------- function result_file.saveResult(turi) while true do sleep(self.interval) self.write(turi) end end end ----------------------------------------------------------- -- 釣り終了判定コルーチン -- @param turi [in]自動釣りオブジェクト ----------------------------------------------------------- function checkExit(turi) repeat sleep(turi.wait_fishing - 1) -- 釣り1回につき1回動いて欲しいねん -- 釣り終了判定や until config.turi_limit and turi.getTriedCount() >= config.turi_limit end ----------------------------------------------------------- -- main ----------------------------------------------------------- -- 自動釣りオブジェクト生成 local turi = jidoturi.new(config.turi) -- 自動釣りで一緒に動かすコルーチンのリストを作るよ local coroutines = { akaneutils.getNoArgFunc(result_file.saveResult, turi), } if config.turi_limit then -- 釣り回数制限があるときだけ追加するよ coroutines[#coroutines + 1] = akaneutils.getNoArgFunc(checkExit, turi) end -- 釣り実行 print('turi suruyo!! ('.. turtlefuel.getFuelLevelString() ..')') turi.doFishing(unpack(coroutines)) -- 終わり print(string.format('%d kai turi sitasi tomaru yo!', turi.getTriedCount())) print(string.format('%d kai tureta de!', turi.getSuccessCount())) result_file.write(turi, true) -- 最後に統計ファイル書き出すよ