Advertisement
LukasBor

CC_IR_switch_CNS_client

Feb 28th, 2021 (edited)
643
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.44 KB | None | 0 0
  1. --[[
  2. Client pro automatizaci vyhybek Immersive Railroading pomoci ComputerCraftu, instalace jako autorun: pastebin get smYLYNKv startup .
  3.  
  4. Detector (mode Computer) na horni (top), endermodem na spodni (bottom), trigger: Detector (Stock) jako druhy ve smeru (s redstonem),
  5. vystup redstonu pro ovladani vyhybky je na prave strane (redstone true je vyhybka aktivovana, redstone false je vyhybka v klidu).
  6.  
  7. Pokud ma pocitac na horni strane detector, bude odesilat zpravy o projizdejicich vlacich pri prejezdu triggeru.
  8. Format: DVyhybka:tag (napr. "DHTJDepo:Dieselka" = DHTJDepo - Detector pro vyhybku Hlavni Trat smer Jih do Depo , tag vlaku Dieselka).
  9. Nema-li detector, prejde do rezimu aktivatoru sve vyhybky a bude cekat na zpravu kde je uveden jako ten, kdo ma vyhybku aktivovat.
  10. Format: Vyhybka:1 (napr. "HTJDepo:1" = aktivuj vyhybku na Hlavni Trati ve smeru Jih na odbocce do Depa, nebo "...:0" pro klid).
  11.  
  12. Pojmenovani vlaku Computerem z CC a detectorem na zadni strane (mode Computer) prikazem: peripheral.wrap("back").setTag("Vlak")
  13. --]]
  14.  
  15. -- Komunikace s CNS
  16. local Vyhybka = "HTJDepo" -- jmeno vyhybky, kterou ovlada nebo pro kterou je detektorem (napr. Hlavni Trat smer Jih, odbocka Depo)
  17. local modemport = 6611 -- port pro komunikaci
  18.  
  19. -- Potrebne komponenty
  20. local detector = peripheral.wrap("top")
  21. local modem = peripheral.wrap("bottom")
  22.  
  23. -- Hlavni telo programu
  24. term.clear()
  25. term.setCursorPos(1,1)
  26. -- Bude pocitac v rezimu odesilani tagu nebo aktivace vyhybky? Pokud detector ~= nil, bude odesilat tagy (ma detector)
  27. if (detector ~= nil) then -- Pocitac ma detektor
  28.   -- Nastavime ComputerLabel podle Vyhybky (pokud neni stejny)
  29.   if (os.getComputerLabel() ~= ("D"..Vyhybka)) then os.setComputerLabel("D"..Vyhybka) end
  30.   -- V nekonecne smycce cekame na prijezd lokomotivy/vlaku
  31.   print("Cekam na prijezd vlaku ...")
  32.   while true do
  33.     local event_name, address, augment_type, stock_uuid = os.pullEvent("redstone")
  34.     local info = detector.info()
  35.    -- Mame vsechna potrebna data platna? (detector.info nesmi byt prazdny = bez vlaku)
  36.     if (info ~= nil) then
  37.    -- Vypis dat do terminalu
  38.       print("  Tag: "..info.tag)
  39.       print("  Loko: "..info.name)
  40.       print("  Smer: "..info.direction)
  41.       print("  Rychlost: "..math.floor(info.speed).." km/h")
  42.      -- Sestaveni zpravy
  43.       local zprava = ("D"..Vyhybka..":"..info.tag)
  44.      -- Odeslani zpravy do CNS
  45.       modem.transmit(modemport,modemport,zprava)
  46.       print("Zprava odeslana do CNS: "..zprava)
  47.       print("")
  48.       print("Cekam na prijezd vlaku ...")
  49.       sleep(1)
  50.     end
  51.   end
  52. else -- Pocitac nema detector
  53.   -- Nastavime ComputerLabel podle Vyhybky (pokud neni stejny)
  54.   if (os.getComputerLabel() ~= Vyhybka) then os.setComputerLabel(Vyhybka) end
  55.   -- V nekonecne smycce cekame na prijem zpravy
  56.   while true do
  57.     print("Cekam na zpravu se jmenem "..Vyhybka.." ...")
  58.     modem.open(modemport)
  59.     local event, modemSide, senderChannel, replyChannel, message, senderDistance = os.pullEvent("modem_message")
  60.     print("Prijata zprava: "..message)
  61.     if ((string.sub(string.lower(message), 1, -3)) == string.lower(Vyhybka)) then -- zprava je pro me
  62.       if (string.sub(message, -1) == "1") then -- zprava konci 1, aktivuj vyhybku
  63.         redstone.setOutput("right",true)
  64.         print("Vyhybka aktivni.")
  65.       else -- zprava nekonci 1, vyhybka v klidu
  66.         redstone.setOutput("right",false)
  67.         print("Vyhybka v klidu.")
  68.       end
  69.     end
  70.     print("")
  71.   end
  72. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement