This commit is contained in:
2025-12-24 21:42:06 +00:00
parent f330830e6c
commit 8d0bcf6599

View File

@@ -1,4 +1,4 @@
local max_distance = 220
local max_distance = {}
local pullEvent = os.pullEventRaw
local modem = peripheral.find("modem",function (s) return peripheral.wrap(s).isWireless() end)
@@ -11,11 +11,12 @@ if not modem then
end
local message_queue = {}
modem.open(15125)
local canidate = {id = -1, distance = max_distance}
local canidate = {id = -1, distance = 764}
parallel.waitForAny(function () repeat sleep(0.1) until canidate.id ~= -1 end,
function ()
while true do
local _, _, channel, _, msg, distance = pullEvent("modem_message")
max_distance[msg.sender] = math.max(distance,max_distance[msg.sender] or 0)
if channel == 15125 then
if msg.protocol == "entrypoint_advertise" then
if distance < canidate.distance then
@@ -36,9 +37,9 @@ local function receive()
if msg.protocol == "heartbeat" and msg.target == os.getComputerID() and msg.sender == canidate.id then
last_heartbeat = os.epoch("utc")
modem.transmit(15125,15125,{protocol="heartbeat_response",sender=os.getComputerID(),target=canidate.id})
if distance > max_distance then
if distance > (max_distance[msg.sender]or 6)-5 then
modem.transmit(15125,15125,{protocol="entrypoint_disconnect",sender=os.getComputerID(),target=canidate.id})
canidate = {id = -1, distance = max_distance}
canidate = {id = -1, distance = (max_distance[msg.sender]or 6)-5}
parallel.waitForAny(function () repeat sleep(0.1) until canidate.id ~= -1 end,
function ()
while true do
@@ -78,7 +79,7 @@ end
local function connect()
while true do
if os.epoch("utc") - last_heartbeat > 200 then
canidate = {id = -1, distance = max_distance}
canidate = {id = -1, distance = (max_distance[msg.sender]or 6)-5}
parallel.waitForAny(function () repeat sleep(0.1) until canidate.id ~= -1 end,
function ()
while true do