diff --git a/entrypointclient.lua b/entrypointclient.lua index cd743ac..5980f8b 100644 --- a/entrypointclient.lua +++ b/entrypointclient.lua @@ -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