Advertisement
massacring

ReactorControl

May 26th, 2024 (edited)
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.91 KB | None | 0 0
  1. local MPL = require('MassaPeripheralLib')
  2.  
  3. local reactorStatus = false
  4.  
  5. local modem = MPL.getOnePeripheral("modem", function(name, peripheral)
  6.     return peripheral.isWireless()
  7. end)
  8.  
  9. local adapter = peripheral.find("fissionReactorLogicAdapter")
  10. if not adapter then error("No Logic Adapter connected.", 0) end
  11.  
  12. local channel = 4201
  13.  
  14. modem.open(channel)
  15.  
  16. local function activate()
  17.     if reactorStatus then return end
  18.     adapter.activate()
  19.     reactorStatus = true
  20. end
  21.  
  22. local function SCRAM()
  23.     if not reactorStatus then return end
  24.     adapter.scram()
  25.     reactorStatus = false
  26. end
  27.  
  28. local function hasWaste()
  29.     if adapter.getWasteFilledPercentage() < 0.1 then return end
  30.     SCRAM()
  31. end
  32.  
  33. local function errorHandler(err)
  34.     SCRAM()
  35.     error(string.format("ERROR: %s", err), 0)
  36. end
  37.  
  38. local function requestHandler()
  39.     local eventData = {os.pullEvent()}
  40.     local event = eventData[1]
  41.  
  42.     if event == 'modem_message' then
  43.         local senderChannel, replyChannel, message = eventData[3], eventData[4], eventData[5]
  44.         if senderChannel == channel then
  45.             print(string.format("Received message '%s' from channel %d", tostring(message), replyChannel))
  46.  
  47.             local switch = function (argument)
  48.                 argument = argument and tonumber(argument) or argument
  49.  
  50.                 local case =
  51.                 {
  52.                     activate = activate,
  53.                     SCRAM = SCRAM,
  54.                     default = function ()
  55.                         print("Invalid command")
  56.                     end
  57.                 }
  58.  
  59.                 if case[argument] then
  60.                     case[argument]()
  61.                 else
  62.                     case["default"]()
  63.                 end
  64.             end
  65.  
  66.             switch(message)
  67.         end
  68.     end
  69. end
  70.  
  71. while true do
  72.     xpcall(hasWaste, errorHandler)
  73.     sleep(1)
  74.     xpcall(requestHandler, errorHandler)
  75. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement