Advertisement
Alakazard12

remote

Jan 8th, 2019
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.93 KB | None | 0 0
  1. local server_channel = 23
  2. local client_channel = 43
  3.  
  4. local modules = peripheral.find("neuralInterface")
  5. if not modules then error("Must have a neural interface", 0) end
  6. if not modules.hasModule("plethora:glasses") then error("The overlay glasses are missing", 0) end
  7.  
  8. local canvas = modules.canvas()
  9. canvas.clear()
  10.  
  11. local modem = peripheral.find("modem")
  12. if not modem then
  13.     print("No modem")
  14.     return
  15. end
  16.  
  17.  
  18. modem.open(client_channel)
  19. modem.open(server_channel)
  20.  
  21.  
  22.  
  23.  
  24. -- GUI
  25. local main_group = canvas.addGroup({5, 50})
  26. local background = main_group.addRectangle(0, 0, 100, 50, 0x00000080)
  27. local title = main_group.addText({x = 5, y = 5}, "Reactor Stats", 0xFFFFFFFF, 0.6)
  28. local title_background = main_group.addRectangle(0, 0, 100, 13, 0x00009080)
  29. local efficiency_text = main_group.addText({x = 5, y = 15}, "Efficiency: N/A", 0xFFFFFFFF, 0.6)
  30. local energy_change_text = main_group.addText({x = 5, y = 23}, "Energy Change: N/A", 0xFFFFFFFF, 0.6)
  31. local process_power_text = main_group.addText({x = 5, y = 31}, "Process Power: N/A", 0xFFFFFFFF, 0.6)
  32.  
  33.  
  34. -- Events
  35.  
  36. local reactor_events = {
  37.     ["efficiency"] = function(efficiency)
  38.         efficiency_text.setText("Efficiency: " .. efficiency)
  39.     end;
  40.  
  41.     ["energy_change"] = function(change)
  42.         energy_change_text.setText("Energy Change: " .. change)
  43.     end;
  44.  
  45.     ["process_power"] = function(power)
  46.         process_power_text.setText("Process Power: " .. power)
  47.     end;
  48. }
  49.  
  50. local events = {
  51.     ["reactor"] = function(subevent, ...)
  52.         local handler = reactor_events[subevent]
  53.         if handler then
  54.             handler(...)
  55.         else
  56.             print("No subevent '" .. subevent .. "'")
  57.         end
  58.     end;
  59. }
  60.  
  61.  
  62. local function process_message(message)
  63.     if message:sub(1, ("event:"):len()) ~= "event:" then return end
  64.     message = message:sub(("event:"):len() + 1)
  65.  
  66.     local args = {}
  67.     for arg in message:gmatch("[^:]+") do
  68.         table.insert(args ,arg)
  69.     end
  70.  
  71.     local event = args[1]
  72.     table.remove(args, 1)
  73.  
  74.     local handler = events[event]
  75.     if handler then
  76.         handler(table.unpack(args))
  77.     else
  78.         print("No event '" .. event .. "'")
  79.     end
  80. end
  81.  
  82. local function request(message, no_response)
  83.     modem.transmit(server_channel, client_channel, message)
  84.     if not no_response then
  85.         while true do
  86.             local event, side, channel, reply, message, distance = os.pullEvent("modem_message")
  87.             if channel == client_channel then
  88.                 if message:sub(1, ("response:"):len()) == "response:" then
  89.                     return message:sub(("response:"):len() + 1)
  90.                 end
  91.             end
  92.         end
  93.     end
  94. end
  95.  
  96.  
  97.  
  98.  
  99. while true do
  100.     local event, side, channel, reply, message, distance = os.pullEventRaw()
  101.     if event == "modem_message" then
  102.         if channel == client_channel then
  103.             process_message(message)
  104.         end
  105.     elseif event == "terminate" then
  106.         break
  107.     elseif event == "chat_message" then
  108.         local player, message = side, channel
  109.         if message == "!disable" then
  110.             request("reactor:disable", true)
  111.         elseif message == "!enable" then
  112.             request("reactor:enable", true)
  113.         end
  114.     end
  115. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement