le_Fish

Rednet API

May 15th, 2020
1,238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.14 KB | None | 0 0
  1. BetterRN = {
  2.     side = "top"
  3. }
  4.  
  5. function BetterRN:new()
  6.     setmetatable({}, BetterRN)
  7.     self.side = self:findModem()
  8.     self:open()
  9.     return self
  10. end
  11.  
  12. function BetterRN:findModem()
  13.     local sides = {"top", "bottom", "left", "right", "front", "back"}
  14.     for i = 1, #sides do
  15.         if peripheral.getType(sides[i]) == "modem" then
  16.             return sides[i]
  17.         end
  18.     end
  19.     return false
  20. end
  21. function BetterRN:open()
  22.     if not self.side then
  23.         self.side = self:findModem()
  24.         if not self.side then
  25.             error("No modem connected")
  26.         end
  27.     end
  28.     rednet.open(self.side)
  29. end
  30.  
  31. function BetterRN:listen(channel)
  32.     local rawResponse = {}
  33.     while true do
  34.         if channel then
  35.             rawResponse = {rednet.receive(channel, 10)}
  36.         else
  37.             rawResponse = {rednet.receive(10)}
  38.         end
  39.         if next(rawResponse) ~= nil then
  40.             return rawResponse
  41.         end
  42.     end
  43. end
  44. function BetterRN:send(id, message, channel, times)
  45.     times = times or 6
  46.     local response
  47.     if channel then
  48.         for i = 1, times do
  49.             rednet.send(id, message, channel)
  50.             response = self:listen(channel)
  51.             if response and response[1] == id and (response[2] == true or response[2]:lower() == "true" or response[2]:lower() == "ok" or response[2] == 1) then
  52.                 break
  53.             end
  54.         end
  55.     else
  56.         for i = 1, times do
  57.             rednet.send(id, message)
  58.             response = self:listen()
  59.             if response and response[1] == id and (response[2] == true or response[2]:lower() == "true" or response[2]:lower() == "ok" or response[2] == 1)then
  60.                 break
  61.             end
  62.         end
  63.     end
  64. end
  65.  
  66. function BetterRN:broadcast(message, channel, times)
  67.     local times = times or 1
  68.     local message = message
  69.     local channel = channel
  70.     if channel then
  71.         for i = 1,times do
  72.             rednet.broadcast(message, channel)
  73.             sleep(1)
  74.         end
  75.     else
  76.         for i = 1,times do
  77.             rednet.broadcast(message)
  78.             sleep(1)
  79.         end
  80.     end
  81. end
Advertisement
Add Comment
Please, Sign In to add comment