Guest User

bfnode.lua

a guest
Jan 4th, 2019
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.30 KB | None | 0 0
  1.  
  2. --Управление нодами.
  3. --1)Подключите контроллеры красного камня, стоящие под нодами, к компу.
  4. --2)Прономеруйте их табличками - так будет удобнее управлять ими.
  5. --3)Запустите программу с ключом -i и следуйте инструкциям. Больше ключ -i не понадобится.
  6. --4)Доступные команды:
  7. --on <number or all>
  8. --off <number or all>
  9. --Например: on 4
  10. --off all
  11.  
  12. local c = require("component")
  13. local s = require("serialization")
  14. local sh = require("shell")
  15. local t = require("term")
  16. local fs = require("filesystem")
  17.  
  18. local cfg = "/cfg/nodes.cfg"
  19.  
  20. local coms = {off=1, on=0}
  21.  
  22. local function init()
  23.   local cl = c.list("redstone")
  24.   if not next(cl) then
  25.     error("Редстоун контроллеров нет в сети")
  26.   end
  27.   local at = {}
  28.   for a, _ in pairs(cl) do
  29.     c.proxy(a).setOutput(1,0)
  30.   end
  31.   for a, _ in pairs(cl) do
  32.     t.write("Введите номер ВЫКЛЮЧИВШЕЙСЯ ноды: ", true)
  33.     c.proxy(a).setOutput(1,1)
  34.     local n = tonumber(t.read())
  35.     c.proxy(a).setOutput(1,0)
  36.     at[n] = a
  37.   end
  38.   local f, str = fs.open(cfg, "w")
  39.   if(f==nil)then
  40.     error(str)
  41.   end
  42.   f:write(s.serialize(at))
  43.   f:close()
  44. end
  45.  
  46. local function load()
  47.   local f, str = fs.open(cfg, "r")
  48.   if(f==nil)then
  49.     error(str)
  50.   end
  51.   local ts = f:read(math.huge)
  52.   f:close()
  53.   local at = s.unserialize(ts)
  54.   if not (at==nil) then
  55.     return at
  56.   else
  57.     error("Файл конфигурации поврежден или отсутствует. Запустите программу с ключом -i")
  58.   end
  59. end
  60. local function turn(naddr, value, t)
  61.   if naddr == 0 then
  62.     for i,a in ipairs(t) do
  63.       c.proxy(a).setOutput(1, value)
  64.     end
  65.   else
  66.     c.proxy(naddr).setOutput(1, value)
  67.   end
  68. end
  69.  
  70. local _, options = sh.parse(...)
  71. for key, value in pairs(options) do
  72.   if key=="i" then
  73.     init()
  74.   end
  75. end
  76.  
  77. local at = load()
  78.  
  79. while true do
  80.   t.write("> ", true)
  81.   local tcom = t.read()
  82.   if not tcom then os.exit() end
  83.   local com = nil
  84.   local arg = nil
  85.   for k, v in string.gmatch(tcom, "(%w+)%s(%w+)") do
  86.     com = k
  87.     arg = v
  88.   end
  89.   if(arg=="all")then
  90.     turn(0, coms[com], at)
  91.   else
  92.     turn(at[tonumber(arg)], coms[com])
  93.   end
  94. end
Advertisement
Add Comment
Please, Sign In to add comment