From ef6af4bc62a9f089063be57e5c069e635d713cc0 Mon Sep 17 00:00:00 2001 From: HenryDu8133 <813367384@qq.com> Date: Sat, 11 Jul 2026 16:32:48 +0800 Subject: [PATCH] fix(gate): fix attempt to call a nil value by moving checkAndApplyUpdate to the bottom --- gate.lua | 122 +++++++++++++++++++++++----------------------- refillmachine.lua | 2 +- ticketmachine.lua | 2 +- 3 files changed, 63 insertions(+), 63 deletions(-) diff --git a/gate.lua b/gate.lua index 4ba0528..d6a13ad 100644 --- a/gate.lua +++ b/gate.lua @@ -1,7 +1,7 @@ local DEFAULT_SERVER_BASE = "http://ticket.fse-media.group" local DEFAULT_SERVER_PATH = "/api/tickets/check" local GATE_OPEN_SECONDS = 2 -local VERSION = "v1.5.20" +local VERSION = "v1.5.21" local VERSION_CHECK_INTERVAL = 5 local serverURL = nil @@ -156,66 +156,6 @@ local function jsonDecode(str) if ok then return res else return nil end end -local function checkAndApplyUpdate() - local serverBase = guessBaseFromStatusURL(serverURL) - local txt = fetchHTTP(serverBase .. '/api/check-update?_t=' .. tostring(os.epoch and os.epoch("utc") or math.random(1, 999999))) - if not txt then return end - local data = jsonDecode(txt) - if not data or not data.update_counter then return end - local remoteTs = tonumber(data.update_counter) - - if not remoteTs or remoteTs <= 0 then return end - - local attemptFile = ".last_update_ts_gate" - if fs.exists(attemptFile) then - local f = fs.open(attemptFile, "r") - local tried = tonumber(f and f.readAll() or "0") or 0 - if f then f.close() end - if tried >= remoteTs then - return - end - end - - isUpdating = true - if type(drawReadyScreen) == "function" then - pcall(drawReadyScreen) - end - sleep(0.5) - - local f = fs.open(attemptFile, "w") - if f then f.write(tostring(remoteTs)); f.close() end - - local env = setmetatable({ AUTO_UPDATE_SILENT = true }, { __index = _G or getfenv() or _ENV }) - local fn, err = loadfile("update_gate.lua", env) - if fn then - local ok, res = pcall(fn, "--silent") - if not ok then - lastUpdateError = string.sub(tostring(res), 1, 30) - if term and term.setTextColor then - term.setTextColor(colors.red) - print("OTA Update Error: " .. tostring(res)) - term.setTextColor(colors.white) - end - end - else - lastUpdateError = "loadfile failed: " .. tostring(err) - if term and term.setTextColor then - term.setTextColor(colors.red) - print("OTA Update Error: " .. tostring(err)) - term.setTextColor(colors.white) - end - end - - isUpdating = false - if type(drawReadyScreen) == "function" then - pcall(drawReadyScreen) - end - - if not lastUpdateError then - os.reboot() - end -end - local function setServerConnected(ok) if serverConnected == ok then return end serverConnected = ok @@ -1515,6 +1455,66 @@ local function mainLoop() end end +local function checkAndApplyUpdate() + local serverBase = guessBaseFromStatusURL(serverURL) + local txt = fetchHTTP(serverBase .. '/api/check-update?_t=' .. tostring(os.epoch and os.epoch("utc") or math.random(1, 999999))) + if not txt then return end + local data = jsonDecode(txt) + if not data or not data.update_counter then return end + local remoteTs = tonumber(data.update_counter) + + if not remoteTs or remoteTs <= 0 then return end + + local attemptFile = ".last_update_ts_gate" + if fs.exists(attemptFile) then + local f = fs.open(attemptFile, "r") + local tried = tonumber(f and f.readAll() or "0") or 0 + if f then f.close() end + if tried >= remoteTs then + return + end + end + + isUpdating = true + if type(drawReadyScreen) == "function" then + pcall(drawReadyScreen) + end + sleep(0.5) + + local f = fs.open(attemptFile, "w") + if f then f.write(tostring(remoteTs)); f.close() end + + local env = setmetatable({ AUTO_UPDATE_SILENT = true }, { __index = _G or getfenv() or _ENV }) + local fn, err = loadfile("update_gate.lua", env) + if fn then + local ok, res = pcall(fn, "--silent") + if not ok then + lastUpdateError = string.sub(tostring(res), 1, 30) + if term and term.setTextColor then + term.setTextColor(colors.red) + print("OTA Update Error: " .. tostring(res)) + term.setTextColor(colors.white) + end + end + else + lastUpdateError = "loadfile failed: " .. tostring(err) + if term and term.setTextColor then + term.setTextColor(colors.red) + print("OTA Update Error: " .. tostring(err)) + term.setTextColor(colors.white) + end + end + + isUpdating = false + if type(drawReadyScreen) == "function" then + pcall(drawReadyScreen) + end + + if not lastUpdateError then + os.reboot() + end +end + local function backgroundSyncTask() pcall(function() refreshRemoteLuaVersion(guessBaseFromStatusURL(serverURL)) end) while true do diff --git a/refillmachine.lua b/refillmachine.lua index f96c97c..58361cf 100644 --- a/refillmachine.lua +++ b/refillmachine.lua @@ -1,4 +1,4 @@ -local VERSION = "v1.5.20" +local VERSION = "v1.5.21" local MACHINE_SIDE = "bottom" local PAYMENT_SIDE = "right" local PRESET_AMOUNTS = { 5, 10, 15, 20 } diff --git a/ticketmachine.lua b/ticketmachine.lua index ee8b78a..b77ee02 100644 --- a/ticketmachine.lua +++ b/ticketmachine.lua @@ -1,6 +1,6 @@ local CURRENT_STATION_CODE = 'Ticket-Machine' local API_BASE = 'http://ticket.fse-media.group/api' -local VERSION = 'v1.5.20' +local VERSION = 'v1.5.21' local UPDATE_CHECK_INTERVAL = 5 -- ###########################